From 5fb438edf84263fdad63fac6aca1ad0af0b9edc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=85browski?= Date: Tue, 20 Feb 2024 22:42:04 +0100 Subject: [PATCH] Deploy website - based on 29646de16b972715bbdf8efc63c4734e1bd8a9a7 --- 404.html | 15 +- assets/css/styles.402ca3c1.css | 1 - assets/css/styles.b3b8a01d.css | 1 + ...exchange-activation-studio.7592ef0.640.png | Bin 62068 -> 0 bytes ...exchange-activation-studio.8844450.640.png | Bin 0 -> 56395 bytes ...pexchange-deselect-segment.d799e54.640.png | Bin 51880 -> 0 bytes ...pexchange-deselect-segment.d87540a.640.png | Bin 0 -> 48223 bytes ...mage-appexchange-flowchart.63b92d6.640.png | Bin 108967 -> 0 bytes ...mage-appexchange-flowchart.d225868.640.png | Bin 0 -> 106010 bytes ...e-appexchange-query-studio.04a5ccb.640.png | Bin 0 -> 77013 bytes ...e-appexchange-query-studio.5c0c958.640.png | Bin 77665 -> 0 bytes ...e-appexchange-segmentation.25cd1a0.640.png | Bin 92003 -> 0 bytes ...e-appexchange-segmentation.3972b9a.640.png | Bin 0 -> 88203 bytes ...mage-is-serverside-purpose.1c6d393.640.png | Bin 0 -> 61436 bytes ...age-is-serverside-purpose.5bba003.1030.png | Bin 155737 -> 0 bytes ...mage-is-serverside-purpose.8648fba.640.png | Bin 82502 -> 0 bytes ...age-is-serverside-purpose.cb7e14b.1030.png | Bin 0 -> 114972 bytes ...-is-serverside-template-ui.23a8fb4.640.png | Bin 65951 -> 0 bytes ...-is-serverside-template-ui.4a74717.640.png | Bin 0 -> 63154 bytes ...sfmc-debugging-email-sends.10a9a34.640.png | Bin 239149 -> 0 bytes ...sfmc-debugging-email-sends.ac0ef20.640.png | Bin 0 -> 235925 bytes ...fmc-debugging-email-sends.d1e0ee4.1030.png | Bin 473893 -> 0 bytes ...fmc-debugging-email-sends.f5cc312.1030.png | Bin 0 -> 448671 bytes ...mage-sql-join-cheat-sheet.0c6c1a0.1030.png | Bin 1130194 -> 0 bytes ...image-sql-join-cheat-sheet.5f50f25.640.png | Bin 0 -> 558545 bytes ...image-sql-join-cheat-sheet.8d34395.640.png | Bin 582526 -> 0 bytes ...mage-sql-join-cheat-sheet.fe36765.1030.png | Bin 0 -> 1071238 bytes ...n-inner-left-join-reversed.15f0975.640.png | Bin 0 -> 81765 bytes ...-inner-left-join-reversed.530ad23.1030.png | Bin 163763 -> 0 bytes ...-inner-left-join-reversed.b324a8b.1030.png | Bin 0 -> 156815 bytes ...n-inner-left-join-reversed.d379e7d.640.png | Bin 84776 -> 0 bytes ...e-sql-join-inner-left-join.142d389.640.png | Bin 0 -> 76249 bytes ...-sql-join-inner-left-join.9dcc67e.1030.png | Bin 152916 -> 0 bytes ...e-sql-join-inner-left-join.c789f84.640.png | Bin 79529 -> 0 bytes ...-sql-join-inner-left-join.f8ce751.1030.png | Bin 0 -> 146107 bytes ...f1b0a.edf8973f.js => 05bf1b0a.13876b19.js} | 2 +- assets/js/06bea203.01f84522.js | 1 - assets/js/06bea203.bb59e779.js | 1 + ...92c4b.6060a3e7.js => 09792c4b.060c4844.js} | 2 +- assets/js/0ae20921.4f282c77.js | 1 + assets/js/0ae20921.c9e843a1.js | 1 - ...df9a2.5f8000b0.js => 0b7df9a2.276be331.js} | 2 +- assets/js/0cb3f831.09bc0128.js | 1 + assets/js/0cb3f831.0bbf7690.js | 1 - assets/js/1308.d88e366a.js | 1 + assets/js/1328d02f.75c32aa1.js | 1 + assets/js/1328d02f.94855e42.js | 1 - assets/js/139f0dd3.1a38ff23.js | 1 + assets/js/139f0dd3.86b16f74.js | 1 - assets/js/13f9d961.8c9e649b.js | 1 + assets/js/13f9d961.b940ac19.js | 1 - .../js/{1426.71674b4b.js => 1426.51dbbb76.js} | 2 +- assets/js/14add631.316e2c03.js | 1 - assets/js/14add631.4b638deb.js | 1 + assets/js/14eb3368.03ea700a.js | 1 + assets/js/14eb3368.96621dc4.js | 1 - assets/js/15878b2f.2e60eca3.js | 1 - assets/js/15878b2f.be2fa562.js | 1 + assets/js/1644.6a09559c.js | 1 + assets/js/168.bb49794d.js | 25898 ++++++++++++++ assets/js/1765.bbf8e0e8.js | 2 - assets/js/177.0cf72559.js | 3439 ++ assets/js/17896441.7cdefb8f.js | 2 + ...E.txt => 17896441.7cdefb8f.js.LICENSE.txt} | 2 +- assets/js/17896441.957336a6.js | 2 - assets/js/1843ef45.001f1829.js | 1 - assets/js/1843ef45.4145bf52.js | 1 + assets/js/18f12793.9100f5f4.js | 1 + assets/js/18f12793.eca4f6de.js | 1 - assets/js/194.c8a2b0ef.js | 23670 +++++++++++++ assets/js/194.d3822238.js | 1 + assets/js/1a4e3797.dcd342f8.js | 2 - assets/js/1a4e3797.dcd342f8.js.LICENSE.txt | 1 - assets/js/1a4e3797.e5687d1b.js | 2 + assets/js/1a4e3797.e5687d1b.js.LICENSE.txt | 1 + assets/js/1ad5d13a.573648bd.js | 1 - assets/js/1ad5d13a.e01c73ea.js | 1 + assets/js/1be78505.6fd0c9a9.js | 1 - assets/js/2005.fab1d5ca.js | 1 + assets/js/20e039ae.9ce9760a.js | 1 + assets/js/20e039ae.d0481e11.js | 1 - assets/js/22145d1a.0a2eb044.js | 1 + assets/js/22145d1a.43f6683b.js | 1 - assets/js/237.d8346ba6.js | 1320 + assets/js/240325d0.2d6dbe4f.js | 1 - assets/js/240325d0.7bda18e2.js | 1 + assets/js/2491.142e201b.js | 1 + assets/js/2494.8c5c79ce.js | 1 + assets/js/273.2df474a7.js | 540 + assets/js/277.16e6ff67.js | 10814 ++++++ assets/js/2788.9cb2f862.js | 1 + assets/js/2924.5200593f.js | 1 + assets/js/2950.857e63af.js | 1 + ...7918c.e2871f9b.js => 2b07918c.bfd74b30.js} | 2 +- assets/js/2cf43088.5c1dd59f.js | 1 + assets/js/2cf43088.e4910f97.js | 1 - assets/js/2e2f252f.5cf41d20.js | 1 - assets/js/2e2f252f.75b39c57.js | 1 + assets/js/30084dac.ce88301b.js | 1 - assets/js/30084dac.dd2d0530.js | 1 + .../js/{316.d513d091.js => 304.f3b61469.js} | 350 +- assets/js/308.9f439c9e.js | 28209 ++++++++++++++++ assets/js/3177.66020859.js | 1 + assets/js/3304.44ae58a6.js | 1 + assets/js/3343.99c6e554.js | 1 + assets/js/3365a9e9.53894df1.js | 1 + assets/js/3365a9e9.7010b386.js | 1 - .../js/{724.d7e60c08.js => 339.2653dcec.js} | 21732 ++++++++---- assets/js/339.5eb1b06a.js | 2 + ...ICENSE.txt => 339.5eb1b06a.js.LICENSE.txt} | 0 assets/js/33ffb019.c602af21.js | 1 - assets/js/33ffb019.c8948b17.js | 1 + assets/js/343.68f3c34d.js | 25811 ++++++++++++++ assets/js/364.c53c5088.js | 10824 ++++++ ...b6fa3.e8674569.js => 369b6fa3.2659af38.js} | 2 +- assets/js/3720c009.465c883a.js | 1 - assets/js/3720c009.5613754b.js | 1 + ...60413.da161dd4.js => 3b360413.a59b8a66.js} | 2 +- ...e54b4.19f43cb3.js => 3b7e54b4.ee78072b.js} | 2 +- assets/js/407fe916.9f16b5e1.js | 1 - assets/js/407fe916.a95b4e8a.js | 1 + ...b673b.246861c2.js => 409b673b.4d59d03e.js} | 2 +- assets/js/4168.efe5e5a8.js | 1 + ...d9621.a7b1a4cb.js => 420d9621.f692ed56.js} | 2 +- assets/js/4237.dd6d72d0.js | 1 + assets/js/4248.360e6c79.js | 1 - assets/js/4641.d2f189f5.js | 1 + assets/js/4852.480c4bbc.js | 1 + assets/js/487.7b135b0c.js | 7370 ---- assets/js/48b2f688.6b3adc53.js | 1 + assets/js/48b2f688.f0eeff23.js | 1 - assets/js/491.ef9cc416.js | 1788 + assets/js/4d6aece4.4cba0721.js | 1 + assets/js/4d6aece4.ad869df5.js | 1 - assets/js/509f2ea4.2daddc7a.js | 1 + assets/js/509f2ea4.61b2f7a5.js | 1 - assets/js/5364.d6ef04bc.js | 1 + ...60ee5.d90f5bbc.js => 55960ee5.f30931d4.js} | 2 +- assets/js/5622.8bc30185.js | 1 + assets/js/5e95c892.d98fe6f3.js | 1 + assets/js/5ee690fc.579e0ecc.js | 1 - assets/js/5ee690fc.f9c9811f.js | 1 + assets/js/5ee7ecad.03eab702.js | 1 + assets/js/5ee7ecad.7dfd9771.js | 1 - assets/js/612d51b5.6e1d1434.js | 1 - assets/js/612d51b5.e39fe4d5.js | 1 + assets/js/622.6b0ea3ef.js | 1410 + assets/js/6316.2009feb9.js | 1 - ...aa231.fc8c5aed.js => 655aa231.8a8da211.js} | 2 +- assets/js/6648.874be767.js | 2 + ...CENSE.txt => 6648.874be767.js.LICENSE.txt} | 0 assets/js/67a57efa.0470c88d.js | 1 + assets/js/67a57efa.7afccd58.js | 1 - ...9b79c.df1b5be0.js => 6a99b79c.b0c3b401.js} | 2 +- assets/js/6d83c2a5.0534db3b.js | 1 - assets/js/6d83c2a5.900a528b.js | 1 + ...5f557.0bd177a2.js => 6f35f557.12b190b2.js} | 2 +- assets/js/7273.b7681d25.js | 1 + ...af923.f5f662e0.js => 734af923.66e54a0c.js} | 2 +- ...11010.669b6480.js => 75f11010.51fb09b8.js} | 2 +- assets/js/765.736383f9.js | 10065 ++++++ assets/js/7724.4286755f.js | 2 - assets/js/772c8612.51679971.js | 1 + assets/js/772c8612.e1066268.js | 1 - assets/js/7827587b.59bf63a4.js | 1 - assets/js/7827587b.5c2a3ddb.js | 1 + assets/js/788.692bdc3b.js | 14570 ++++++++ ...dd589.4ea7e967.js => 78bdd589.38c2e2c5.js} | 2 +- assets/js/7973.04e2016d.js | 1 + ...0f54e.60f7c7e3.js => 7a40f54e.77fd8205.js} | 2 +- ...16c75.c476101a.js => 7e516c75.f8b1bb27.js} | 2 +- ...afb14.3ea7593f.js => 7eaafb14.41c5fb03.js} | 2 +- assets/js/7f3cd917.896568e6.js | 1 + assets/js/7f3cd917.b05fc5c0.js | 1 - assets/js/7f9f5c99.283a3766.js | 1 - assets/js/7f9f5c99.3558effb.js | 1 + ...44c7d.eef205bf.js => 81e44c7d.4bc6f105.js} | 2 +- assets/js/81fb7942.0b5c08e5.js | 1 - assets/js/81fb7942.c6e9c5b4.js | 1 + ...0116e.c4f35040.js => 8440116e.ae436dba.js} | 2 +- assets/js/861.031f60e4.js | 1 + assets/js/861.ac3561a7.js | 1227 + assets/js/868.aaba0928.js | 1 + assets/js/885.03927ccf.js | 1 + assets/js/89.ec26e043.js | 1 + assets/js/89.f7c79b6a.js | 26522 +++++++++++++++ assets/js/8932.3e18a2bf.js | 1 + ...38aec.125cb74f.js => 8a538aec.56982abd.js} | 2 +- assets/js/8dfb128c.01423c01.js | 1 - assets/js/8dfb128c.255e587c.js | 1 + ...f5683.2ea92753.js => 8e6f5683.04266e36.js} | 2 +- ...7d15f.9dbda4fa.js => 9177d15f.0dc44d60.js} | 2 +- assets/js/9261.c462d503.js | 1 + assets/js/9277.67e8f16f.js | 1 + assets/js/929714a5.4a927c7b.js | 1 + assets/js/92cda9bf.8f424d73.js | 1 + assets/js/92cda9bf.c1740670.js | 1 - assets/js/932.5c8df329.js | 2097 ++ assets/js/935f2afb.fb7b5285.js | 1 + assets/js/935f2afb.fc80ed25.js | 1 - assets/js/937990e1.64309f69.js | 1 - assets/js/937990e1.dcd84fb0.js | 1 + assets/js/943.bd507ab2.js | 10323 ++++++ assets/js/9487.178ea76e.js | 1 - assets/js/950.e8389ad9.js | 742 + assets/js/973.39849cce.js | 2600 ++ assets/js/9765.ce649b7e.js | 1 + ...4d2ae.7565d3dd.js => 9944d2ae.30924c3e.js} | 2 +- ...3677c.4f4aa057.js => 9a63677c.0955f839.js} | 2 +- assets/js/9be7a4ef.8d8e7884.js | 1 - assets/js/9be7a4ef.b33b89ca.js | 1 + ...ad429.17fdd2f9.js => 9e4ad429.4ea748c4.js} | 2 +- ...09703.84b2269e.js => a6709703.6d4ee4f3.js} | 2 +- assets/js/a7bd4aaa.b1cb7e77.js | 1 + assets/js/a8b77297.5786a4c2.js | 1 + assets/js/a8b77297.98a212dc.js | 1 - assets/js/a94703ab.010027ee.js | 1 + assets/js/aeba84fb.db0b222d.js | 1 - assets/js/aeba84fb.ea4e46d2.js | 1 + ...fbe49.bec08f3e.js => b33fbe49.643e6335.js} | 2 +- assets/js/b39e9a29.37e14d41.js | 1 + assets/js/b39e9a29.8736aa8d.js | 1 - ...3a77c.2afc4922.js => b463a77c.b5a80d88.js} | 2 +- assets/js/b52e5d8d.ba7e203c.js | 1 - assets/js/b52e5d8d.e2ac5676.js | 1 + assets/js/b840d82f.93e628b2.js | 1 + assets/js/b840d82f.d2e54469.js | 1 - assets/js/b84a6020.1c18e841.js | 1 - assets/js/b84a6020.b74538bf.js | 1 + assets/js/ba7840dc.4e027f30.js | 1 + assets/js/ba7840dc.a5cbf57f.js | 1 - assets/js/bb5d57b6.0d958107.js | 1 - assets/js/bb5d57b6.a77ec260.js | 1 + assets/js/beb9716f.0aeff59d.js | 1 + assets/js/beb9716f.3850ee5a.js | 1 - ...0d864.e50fa5e0.js => c0a0d864.309ed5ce.js} | 2 +- assets/js/c4f5d8e4.22e2e8ab.js | 1 + assets/js/c4f5d8e4.8f51117e.js | 1 - assets/js/c64b8421.2653a86c.js | 1 + assets/js/c64b8421.ae233fe9.js | 1 - ...94043.ba82b1ba.js => c7794043.41a1b140.js} | 2 +- assets/js/c8a2287d.d9d8783f.js | 1 + assets/js/c8a2287d.feb5464a.js | 1 - ...2d9b9.db528504.js => cb12d9b9.86429a06.js} | 2 +- ...21ae3.110e20cb.js => ce321ae3.7e3d354d.js} | 2 +- assets/js/d44a7d50.7eb973ab.js | 1 + assets/js/d44a7d50.d1e2179b.js | 1 - assets/js/d4ed38e0.4a5c20ff.js | 1 - assets/js/d4ed38e0.83ddf61b.js | 1 + assets/js/d5687ba7.6c478ae9.js | 1 - assets/js/d5687ba7.860b7216.js | 1 + assets/js/dc8b40ff.885ab7e7.js | 1 - assets/js/dc8b40ff.ed60aaed.js | 1 + assets/js/df203c0f.18eddc47.js | 1 + assets/js/df203c0f.6fd6f28b.js | 1 - ...15d27.c2585def.js => e2615d27.892ab758.js} | 2 +- ...02ea0.7d8a622b.js => e3f02ea0.3f96c5cf.js} | 2 +- ...a2e7b.ef84462c.js => e5aa2e7b.84be1892.js} | 2 +- assets/js/e5fc05e6.16e1e6aa.js | 1 + assets/js/e5fc05e6.eebfc85c.js | 1 - assets/js/ec6dc5c4.60577ed4.js | 1 - assets/js/ec6dc5c4.a8be3632.js | 1 + assets/js/ecbe7f2c.13620c1b.js | 1 - assets/js/ecbe7f2c.cabea261.js | 1 + assets/js/ecd0154e.1b43ff83.js | 1 + assets/js/ecd0154e.f2e5d890.js | 1 - assets/js/edb10261.1cab876a.js | 1 + assets/js/edb10261.87a0b6a3.js | 1 - ...2d393.dd9463de.js => f3b2d393.f3dfe2e5.js} | 2 +- assets/js/f564aeae.007c6dbd.js | 1 + assets/js/f564aeae.7ebdc609.js | 1 - ...1cc1a.11f5b3c0.js => f881cc1a.c06a2035.js} | 2 +- ...5ea75.49291732.js => fcb5ea75.c5d8153c.js} | 2 +- assets/js/fd9368c3.172e512b.js | 1 + assets/js/fd9368c3.cd3f9f7b.js | 1 - assets/js/fe4d0c3d.08defbff.js | 1 + assets/js/fe4d0c3d.3a405712.js | 1 - ...c7cca.58ca14b1.js => ff2c7cca.f057c476.js} | 2 +- assets/js/ff6cdf17.1c6a804c.js | 1 - assets/js/ff6cdf17.66f64fbc.js | 1 + assets/js/main.2ee7034c.js | 2 + ...CENSE.txt => main.2ee7034c.js.LICENSE.txt} | 47 +- assets/js/main.91b2a2ce.js | 2 - assets/js/runtime~main.b0a683b9.js | 1 + assets/js/runtime~main.b2d63b24.js | 1 - certs/Salesforce/SF Business Analyst.pdf | Bin 0 -> 792884 bytes certs/Salesforce/SFMC Associate.pdf | Bin 0 -> 793757 bytes .../ampscript-style-guide/index.html | 138 +- docs/category/ampscript-snippets/index.html | 17 +- docs/category/ampscript/index.html | 17 +- docs/category/javascript/index.html | 17 +- docs/category/js-snippets/index.html | 17 +- .../mc-personalization-snippets/index.html | 17 +- docs/category/mc-personalization/index.html | 17 +- docs/category/serverside-code/index.html | 17 +- docs/category/sfmc-config/index.html | 17 +- docs/category/sfmc-sql-snippets/index.html | 17 +- docs/category/sfmc-sql/index.html | 17 +- docs/category/sfmc-webinars/index.html | 17 +- docs/category/ssjs-snippets/index.html | 17 +- docs/category/ssjs/index.html | 17 +- .../sfmc-appexchange-solutions/index.html | 207 +- .../sfmc-behavioral-triggers/index.html | 260 +- docs/config/sfmc-code-resource/index.html | 128 +- docs/config/sfmc-contact-deletion/index.html | 247 +- docs/config/sfmc-enhanced-send-log/index.html | 76 +- .../config/sfmc-features-on-demand/index.html | 58 +- .../sfmc-mcc-integration-patterns/index.html | 163 +- .../sfmc-mobile-connect-data-views/index.html | 104 +- docs/config/sfmc-system-data-views/index.html | 370 +- docs/index.html | 120 +- .../mcp-catalog-architecture/index.html | 231 +- .../mcp-open-time-email/index.html | 96 +- .../mcp-serverside-code-basics/index.html | 73 +- .../mcp-serverside-code-context/index.html | 184 + .../mcp-serverside-code-properties/index.html | 211 +- .../index.html | 70 +- docs/js/js-dom/index.html | 178 +- docs/js/js-if-and-switch/index.html | 81 +- docs/js/js-loops/index.html | 85 +- .../snippets/engage-with-countdown/index.html | 61 +- .../index.html | 78 +- docs/js/snippets/tailor-with-data/index.html | 63 +- .../sfmc-sql-aggregate-functions/index.html | 88 +- docs/sql/sfmc-sql-basics/index.html | 160 +- docs/sql/sfmc-sql-case/index.html | 52 +- .../sfmc-sql-conversion-functions/index.html | 61 +- docs/sql/sfmc-sql-date-functions/index.html | 149 +- docs/sql/sfmc-sql-from/index.html | 41 +- docs/sql/sfmc-sql-join/index.html | 143 +- docs/sql/sfmc-sql-like/index.html | 62 +- docs/sql/sfmc-sql-null-functions/index.html | 95 +- .../sql/sfmc-sql-numeric-functions/index.html | 73 +- docs/sql/sfmc-sql-select/index.html | 89 +- docs/sql/sfmc-sql-string-functions/index.html | 75 +- docs/sql/sfmc-sql-style-guide/index.html | 150 +- docs/sql/sfmc-sql-where/index.html | 73 +- .../sfmc-sql-debugging-email-sends/index.html | 83 +- .../index.html | 83 +- docs/ssjs/debugging-ssjs/index.html | 144 +- .../snippets/ampscript-in-ssjs/index.html | 61 +- .../snippets/sfmc-cloud-page-apps/index.html | 142 +- .../index.html | 55 +- .../snippets/ssjs-script-template/index.html | 63 +- docs/ssjs/ssjs-if-and-switch/index.html | 78 +- docs/ssjs/ssjs-loops/index.html | 64 +- docs/ssjs/ssjs-style-guide/index.html | 167 +- .../ssjs-vs-ampscript-performance/index.html | 81 +- docs/tags/amp-script/index.html | 17 +- docs/tags/analytics/index.html | 17 +- docs/tags/app-exchange/index.html | 17 +- docs/tags/app/index.html | 17 +- docs/tags/automation/index.html | 17 +- docs/tags/behavioral-triggers/index.html | 17 +- docs/tags/best-practice/index.html | 17 +- docs/tags/cloud-page/index.html | 17 +- docs/tags/configuration/index.html | 17 +- docs/tags/crm/index.html | 17 +- docs/tags/data-extensions/index.html | 17 +- docs/tags/data-management/index.html | 17 +- docs/tags/debugging/index.html | 17 +- docs/tags/deliverability/index.html | 17 +- docs/tags/einstein/index.html | 17 +- docs/tags/eloqua/index.html | 17 +- docs/tags/email/index.html | 17 +- docs/tags/index.html | 17 +- docs/tags/integration/index.html | 17 +- docs/tags/interaction-studio/index.html | 17 +- docs/tags/java-script/index.html | 17 +- docs/tags/journey/index.html | 17 +- .../index.html | 17 +- docs/tags/marketing-cloud/index.html | 17 +- docs/tags/performance/index.html | 17 +- docs/tags/personalisation/index.html | 17 +- docs/tags/setup/index.html | 17 +- docs/tags/sms/index.html | 17 +- docs/tags/snippet/index.html | 17 +- docs/tags/sql/index.html | 17 +- docs/tags/ssjs/index.html | 17 +- docs/tags/style-guide/index.html | 17 +- docs/tags/type-script/index.html | 17 +- docs/tags/users/index.html | 17 +- docs/tags/webinar/index.html | 17 +- .../index.html | 36 +- .../index.html | 35 +- .../sfmc-webinar-cloud-page-apps/index.html | 30 +- docs/zen-of-sfmc/index.html | 161 +- index.html | 15 +- search/index.html | 15 +- sitemap.xml | 2 +- sites/category/faq/index.html | 17 +- sites/category/ideas/index.html | 17 +- .../index.html | 103 +- .../index.html | 46 +- sites/ideas/marketing-cloud-ideas/index.html | 176 +- .../ideas/mc-personalization-ideas/index.html | 146 +- sites/licence/index.html | 32 +- sites/my-toolset/index.html | 73 +- sites/newsletter/index.html | 28 +- sites/privacy/index.html | 35 +- sites/tags/best-practice/index.html | 17 +- sites/tags/faq/index.html | 17 +- sites/tags/index.html | 17 +- sites/tags/interaction-studio/index.html | 17 +- .../index.html | 17 +- sites/tags/marketing-cloud/index.html | 17 +- sites/tags/personalization/index.html | 17 +- 407 files changed, 224179 insertions(+), 15000 deletions(-) delete mode 100644 assets/css/styles.402ca3c1.css create mode 100644 assets/css/styles.b3b8a01d.css delete mode 100644 assets/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png create mode 100644 assets/ideal-img/article-image-appexchange-activation-studio.8844450.640.png delete mode 100644 assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png create mode 100644 assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png delete mode 100644 assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png create mode 100644 assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png create mode 100644 assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png delete mode 100644 assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png delete mode 100644 assets/ideal-img/article-image-appexchange-segmentation.25cd1a0.640.png create mode 100644 assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png create mode 100644 assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png delete mode 100644 assets/ideal-img/article-image-is-serverside-purpose.5bba003.1030.png delete mode 100644 assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png create mode 100644 assets/ideal-img/article-image-is-serverside-purpose.cb7e14b.1030.png delete mode 100644 assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png create mode 100644 assets/ideal-img/article-image-is-serverside-template-ui.4a74717.640.png delete mode 100644 assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png create mode 100644 assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png delete mode 100644 assets/ideal-img/article-image-sfmc-debugging-email-sends.d1e0ee4.1030.png create mode 100644 assets/ideal-img/article-image-sfmc-debugging-email-sends.f5cc312.1030.png delete mode 100644 assets/ideal-img/article-image-sql-join-cheat-sheet.0c6c1a0.1030.png create mode 100644 assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png delete mode 100644 assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png create mode 100644 assets/ideal-img/article-image-sql-join-cheat-sheet.fe36765.1030.png create mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png delete mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join-reversed.530ad23.1030.png create mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join-reversed.b324a8b.1030.png delete mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join-reversed.d379e7d.640.png create mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png delete mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join.9dcc67e.1030.png delete mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png create mode 100644 assets/ideal-img/article-image-sql-join-inner-left-join.f8ce751.1030.png rename assets/js/{05bf1b0a.edf8973f.js => 05bf1b0a.13876b19.js} (92%) delete mode 100644 assets/js/06bea203.01f84522.js create mode 100644 assets/js/06bea203.bb59e779.js rename assets/js/{09792c4b.6060a3e7.js => 09792c4b.060c4844.js} (89%) create mode 100644 assets/js/0ae20921.4f282c77.js delete mode 100644 assets/js/0ae20921.c9e843a1.js rename assets/js/{0b7df9a2.5f8000b0.js => 0b7df9a2.276be331.js} (94%) create mode 100644 assets/js/0cb3f831.09bc0128.js delete mode 100644 assets/js/0cb3f831.0bbf7690.js create mode 100644 assets/js/1308.d88e366a.js create mode 100644 assets/js/1328d02f.75c32aa1.js delete mode 100644 assets/js/1328d02f.94855e42.js create mode 100644 assets/js/139f0dd3.1a38ff23.js delete mode 100644 assets/js/139f0dd3.86b16f74.js create mode 100644 assets/js/13f9d961.8c9e649b.js delete mode 100644 assets/js/13f9d961.b940ac19.js rename assets/js/{1426.71674b4b.js => 1426.51dbbb76.js} (99%) delete mode 100644 assets/js/14add631.316e2c03.js create mode 100644 assets/js/14add631.4b638deb.js create mode 100644 assets/js/14eb3368.03ea700a.js delete mode 100644 assets/js/14eb3368.96621dc4.js delete mode 100644 assets/js/15878b2f.2e60eca3.js create mode 100644 assets/js/15878b2f.be2fa562.js create mode 100644 assets/js/1644.6a09559c.js create mode 100644 assets/js/168.bb49794d.js delete mode 100644 assets/js/1765.bbf8e0e8.js create mode 100644 assets/js/177.0cf72559.js create mode 100644 assets/js/17896441.7cdefb8f.js rename assets/js/{17896441.957336a6.js.LICENSE.txt => 17896441.7cdefb8f.js.LICENSE.txt} (66%) delete mode 100644 assets/js/17896441.957336a6.js delete mode 100644 assets/js/1843ef45.001f1829.js create mode 100644 assets/js/1843ef45.4145bf52.js create mode 100644 assets/js/18f12793.9100f5f4.js delete mode 100644 assets/js/18f12793.eca4f6de.js create mode 100644 assets/js/194.c8a2b0ef.js create mode 100644 assets/js/194.d3822238.js delete mode 100644 assets/js/1a4e3797.dcd342f8.js delete mode 100644 assets/js/1a4e3797.dcd342f8.js.LICENSE.txt create mode 100644 assets/js/1a4e3797.e5687d1b.js create mode 100644 assets/js/1a4e3797.e5687d1b.js.LICENSE.txt delete mode 100644 assets/js/1ad5d13a.573648bd.js create mode 100644 assets/js/1ad5d13a.e01c73ea.js delete mode 100644 assets/js/1be78505.6fd0c9a9.js create mode 100644 assets/js/2005.fab1d5ca.js create mode 100644 assets/js/20e039ae.9ce9760a.js delete mode 100644 assets/js/20e039ae.d0481e11.js create mode 100644 assets/js/22145d1a.0a2eb044.js delete mode 100644 assets/js/22145d1a.43f6683b.js create mode 100644 assets/js/237.d8346ba6.js delete mode 100644 assets/js/240325d0.2d6dbe4f.js create mode 100644 assets/js/240325d0.7bda18e2.js create mode 100644 assets/js/2491.142e201b.js create mode 100644 assets/js/2494.8c5c79ce.js create mode 100644 assets/js/273.2df474a7.js create mode 100644 assets/js/277.16e6ff67.js create mode 100644 assets/js/2788.9cb2f862.js create mode 100644 assets/js/2924.5200593f.js create mode 100644 assets/js/2950.857e63af.js rename assets/js/{2b07918c.e2871f9b.js => 2b07918c.bfd74b30.js} (92%) create mode 100644 assets/js/2cf43088.5c1dd59f.js delete mode 100644 assets/js/2cf43088.e4910f97.js delete mode 100644 assets/js/2e2f252f.5cf41d20.js create mode 100644 assets/js/2e2f252f.75b39c57.js delete mode 100644 assets/js/30084dac.ce88301b.js create mode 100644 assets/js/30084dac.dd2d0530.js rename assets/js/{316.d513d091.js => 304.f3b61469.js} (76%) create mode 100644 assets/js/308.9f439c9e.js create mode 100644 assets/js/3177.66020859.js create mode 100644 assets/js/3304.44ae58a6.js create mode 100644 assets/js/3343.99c6e554.js create mode 100644 assets/js/3365a9e9.53894df1.js delete mode 100644 assets/js/3365a9e9.7010b386.js rename assets/js/{724.d7e60c08.js => 339.2653dcec.js} (75%) create mode 100644 assets/js/339.5eb1b06a.js rename assets/js/{7724.4286755f.js.LICENSE.txt => 339.5eb1b06a.js.LICENSE.txt} (100%) delete mode 100644 assets/js/33ffb019.c602af21.js create mode 100644 assets/js/33ffb019.c8948b17.js create mode 100644 assets/js/343.68f3c34d.js create mode 100644 assets/js/364.c53c5088.js rename assets/js/{369b6fa3.e8674569.js => 369b6fa3.2659af38.js} (93%) delete mode 100644 assets/js/3720c009.465c883a.js create mode 100644 assets/js/3720c009.5613754b.js rename assets/js/{3b360413.da161dd4.js => 3b360413.a59b8a66.js} (95%) rename assets/js/{3b7e54b4.19f43cb3.js => 3b7e54b4.ee78072b.js} (95%) delete mode 100644 assets/js/407fe916.9f16b5e1.js create mode 100644 assets/js/407fe916.a95b4e8a.js rename assets/js/{409b673b.246861c2.js => 409b673b.4d59d03e.js} (94%) create mode 100644 assets/js/4168.efe5e5a8.js rename assets/js/{420d9621.a7b1a4cb.js => 420d9621.f692ed56.js} (85%) create mode 100644 assets/js/4237.dd6d72d0.js delete mode 100644 assets/js/4248.360e6c79.js create mode 100644 assets/js/4641.d2f189f5.js create mode 100644 assets/js/4852.480c4bbc.js delete mode 100644 assets/js/487.7b135b0c.js create mode 100644 assets/js/48b2f688.6b3adc53.js delete mode 100644 assets/js/48b2f688.f0eeff23.js create mode 100644 assets/js/491.ef9cc416.js create mode 100644 assets/js/4d6aece4.4cba0721.js delete mode 100644 assets/js/4d6aece4.ad869df5.js create mode 100644 assets/js/509f2ea4.2daddc7a.js delete mode 100644 assets/js/509f2ea4.61b2f7a5.js create mode 100644 assets/js/5364.d6ef04bc.js rename assets/js/{55960ee5.d90f5bbc.js => 55960ee5.f30931d4.js} (87%) create mode 100644 assets/js/5622.8bc30185.js create mode 100644 assets/js/5e95c892.d98fe6f3.js delete mode 100644 assets/js/5ee690fc.579e0ecc.js create mode 100644 assets/js/5ee690fc.f9c9811f.js create mode 100644 assets/js/5ee7ecad.03eab702.js delete mode 100644 assets/js/5ee7ecad.7dfd9771.js delete mode 100644 assets/js/612d51b5.6e1d1434.js create mode 100644 assets/js/612d51b5.e39fe4d5.js create mode 100644 assets/js/622.6b0ea3ef.js delete mode 100644 assets/js/6316.2009feb9.js rename assets/js/{655aa231.fc8c5aed.js => 655aa231.8a8da211.js} (92%) create mode 100644 assets/js/6648.874be767.js rename assets/js/{1765.bbf8e0e8.js.LICENSE.txt => 6648.874be767.js.LICENSE.txt} (100%) create mode 100644 assets/js/67a57efa.0470c88d.js delete mode 100644 assets/js/67a57efa.7afccd58.js rename assets/js/{6a99b79c.df1b5be0.js => 6a99b79c.b0c3b401.js} (52%) delete mode 100644 assets/js/6d83c2a5.0534db3b.js create mode 100644 assets/js/6d83c2a5.900a528b.js rename assets/js/{6f35f557.0bd177a2.js => 6f35f557.12b190b2.js} (98%) create mode 100644 assets/js/7273.b7681d25.js rename assets/js/{734af923.f5f662e0.js => 734af923.66e54a0c.js} (81%) rename assets/js/{75f11010.669b6480.js => 75f11010.51fb09b8.js} (70%) create mode 100644 assets/js/765.736383f9.js delete mode 100644 assets/js/7724.4286755f.js create mode 100644 assets/js/772c8612.51679971.js delete mode 100644 assets/js/772c8612.e1066268.js delete mode 100644 assets/js/7827587b.59bf63a4.js create mode 100644 assets/js/7827587b.5c2a3ddb.js create mode 100644 assets/js/788.692bdc3b.js rename assets/js/{78bdd589.4ea7e967.js => 78bdd589.38c2e2c5.js} (97%) create mode 100644 assets/js/7973.04e2016d.js rename assets/js/{7a40f54e.60f7c7e3.js => 7a40f54e.77fd8205.js} (93%) rename assets/js/{7e516c75.c476101a.js => 7e516c75.f8b1bb27.js} (95%) rename assets/js/{7eaafb14.3ea7593f.js => 7eaafb14.41c5fb03.js} (85%) create mode 100644 assets/js/7f3cd917.896568e6.js delete mode 100644 assets/js/7f3cd917.b05fc5c0.js delete mode 100644 assets/js/7f9f5c99.283a3766.js create mode 100644 assets/js/7f9f5c99.3558effb.js rename assets/js/{81e44c7d.eef205bf.js => 81e44c7d.4bc6f105.js} (99%) delete mode 100644 assets/js/81fb7942.0b5c08e5.js create mode 100644 assets/js/81fb7942.c6e9c5b4.js rename assets/js/{8440116e.c4f35040.js => 8440116e.ae436dba.js} (98%) create mode 100644 assets/js/861.031f60e4.js create mode 100644 assets/js/861.ac3561a7.js create mode 100644 assets/js/868.aaba0928.js create mode 100644 assets/js/885.03927ccf.js create mode 100644 assets/js/89.ec26e043.js create mode 100644 assets/js/89.f7c79b6a.js create mode 100644 assets/js/8932.3e18a2bf.js rename assets/js/{8a538aec.125cb74f.js => 8a538aec.56982abd.js} (97%) delete mode 100644 assets/js/8dfb128c.01423c01.js create mode 100644 assets/js/8dfb128c.255e587c.js rename assets/js/{8e6f5683.2ea92753.js => 8e6f5683.04266e36.js} (87%) rename assets/js/{9177d15f.9dbda4fa.js => 9177d15f.0dc44d60.js} (95%) create mode 100644 assets/js/9261.c462d503.js create mode 100644 assets/js/9277.67e8f16f.js create mode 100644 assets/js/929714a5.4a927c7b.js create mode 100644 assets/js/92cda9bf.8f424d73.js delete mode 100644 assets/js/92cda9bf.c1740670.js create mode 100644 assets/js/932.5c8df329.js create mode 100644 assets/js/935f2afb.fb7b5285.js delete mode 100644 assets/js/935f2afb.fc80ed25.js delete mode 100644 assets/js/937990e1.64309f69.js create mode 100644 assets/js/937990e1.dcd84fb0.js create mode 100644 assets/js/943.bd507ab2.js delete mode 100644 assets/js/9487.178ea76e.js create mode 100644 assets/js/950.e8389ad9.js create mode 100644 assets/js/973.39849cce.js create mode 100644 assets/js/9765.ce649b7e.js rename assets/js/{9944d2ae.7565d3dd.js => 9944d2ae.30924c3e.js} (90%) rename assets/js/{9a63677c.4f4aa057.js => 9a63677c.0955f839.js} (89%) delete mode 100644 assets/js/9be7a4ef.8d8e7884.js create mode 100644 assets/js/9be7a4ef.b33b89ca.js rename assets/js/{9e4ad429.17fdd2f9.js => 9e4ad429.4ea748c4.js} (86%) rename assets/js/{a6709703.84b2269e.js => a6709703.6d4ee4f3.js} (97%) create mode 100644 assets/js/a7bd4aaa.b1cb7e77.js create mode 100644 assets/js/a8b77297.5786a4c2.js delete mode 100644 assets/js/a8b77297.98a212dc.js create mode 100644 assets/js/a94703ab.010027ee.js delete mode 100644 assets/js/aeba84fb.db0b222d.js create mode 100644 assets/js/aeba84fb.ea4e46d2.js rename assets/js/{b33fbe49.bec08f3e.js => b33fbe49.643e6335.js} (67%) create mode 100644 assets/js/b39e9a29.37e14d41.js delete mode 100644 assets/js/b39e9a29.8736aa8d.js rename assets/js/{b463a77c.2afc4922.js => b463a77c.b5a80d88.js} (69%) delete mode 100644 assets/js/b52e5d8d.ba7e203c.js create mode 100644 assets/js/b52e5d8d.e2ac5676.js create mode 100644 assets/js/b840d82f.93e628b2.js delete mode 100644 assets/js/b840d82f.d2e54469.js delete mode 100644 assets/js/b84a6020.1c18e841.js create mode 100644 assets/js/b84a6020.b74538bf.js create mode 100644 assets/js/ba7840dc.4e027f30.js delete mode 100644 assets/js/ba7840dc.a5cbf57f.js delete mode 100644 assets/js/bb5d57b6.0d958107.js create mode 100644 assets/js/bb5d57b6.a77ec260.js create mode 100644 assets/js/beb9716f.0aeff59d.js delete mode 100644 assets/js/beb9716f.3850ee5a.js rename assets/js/{c0a0d864.e50fa5e0.js => c0a0d864.309ed5ce.js} (98%) create mode 100644 assets/js/c4f5d8e4.22e2e8ab.js delete mode 100644 assets/js/c4f5d8e4.8f51117e.js create mode 100644 assets/js/c64b8421.2653a86c.js delete mode 100644 assets/js/c64b8421.ae233fe9.js rename assets/js/{c7794043.ba82b1ba.js => c7794043.41a1b140.js} (95%) create mode 100644 assets/js/c8a2287d.d9d8783f.js delete mode 100644 assets/js/c8a2287d.feb5464a.js rename assets/js/{cb12d9b9.db528504.js => cb12d9b9.86429a06.js} (67%) rename assets/js/{ce321ae3.110e20cb.js => ce321ae3.7e3d354d.js} (98%) create mode 100644 assets/js/d44a7d50.7eb973ab.js delete mode 100644 assets/js/d44a7d50.d1e2179b.js delete mode 100644 assets/js/d4ed38e0.4a5c20ff.js create mode 100644 assets/js/d4ed38e0.83ddf61b.js delete mode 100644 assets/js/d5687ba7.6c478ae9.js create mode 100644 assets/js/d5687ba7.860b7216.js delete mode 100644 assets/js/dc8b40ff.885ab7e7.js create mode 100644 assets/js/dc8b40ff.ed60aaed.js create mode 100644 assets/js/df203c0f.18eddc47.js delete mode 100644 assets/js/df203c0f.6fd6f28b.js rename assets/js/{e2615d27.c2585def.js => e2615d27.892ab758.js} (97%) rename assets/js/{e3f02ea0.7d8a622b.js => e3f02ea0.3f96c5cf.js} (82%) rename assets/js/{e5aa2e7b.ef84462c.js => e5aa2e7b.84be1892.js} (96%) create mode 100644 assets/js/e5fc05e6.16e1e6aa.js delete mode 100644 assets/js/e5fc05e6.eebfc85c.js delete mode 100644 assets/js/ec6dc5c4.60577ed4.js create mode 100644 assets/js/ec6dc5c4.a8be3632.js delete mode 100644 assets/js/ecbe7f2c.13620c1b.js create mode 100644 assets/js/ecbe7f2c.cabea261.js create mode 100644 assets/js/ecd0154e.1b43ff83.js delete mode 100644 assets/js/ecd0154e.f2e5d890.js create mode 100644 assets/js/edb10261.1cab876a.js delete mode 100644 assets/js/edb10261.87a0b6a3.js rename assets/js/{f3b2d393.dd9463de.js => f3b2d393.f3dfe2e5.js} (96%) create mode 100644 assets/js/f564aeae.007c6dbd.js delete mode 100644 assets/js/f564aeae.7ebdc609.js rename assets/js/{f881cc1a.11f5b3c0.js => f881cc1a.c06a2035.js} (89%) rename assets/js/{fcb5ea75.49291732.js => fcb5ea75.c5d8153c.js} (81%) create mode 100644 assets/js/fd9368c3.172e512b.js delete mode 100644 assets/js/fd9368c3.cd3f9f7b.js create mode 100644 assets/js/fe4d0c3d.08defbff.js delete mode 100644 assets/js/fe4d0c3d.3a405712.js rename assets/js/{ff2c7cca.58ca14b1.js => ff2c7cca.f057c476.js} (56%) delete mode 100644 assets/js/ff6cdf17.1c6a804c.js create mode 100644 assets/js/ff6cdf17.66f64fbc.js create mode 100644 assets/js/main.2ee7034c.js rename assets/js/{main.91b2a2ce.js.LICENSE.txt => main.2ee7034c.js.LICENSE.txt} (76%) delete mode 100644 assets/js/main.91b2a2ce.js create mode 100644 assets/js/runtime~main.b0a683b9.js delete mode 100644 assets/js/runtime~main.b2d63b24.js create mode 100644 certs/Salesforce/SF Business Analyst.pdf create mode 100644 certs/Salesforce/SFMC Associate.pdf create mode 100644 docs/interaction-studio/mcp-serverside-code-context/index.html diff --git a/404.html b/404.html index 15e42aac6..bdc2a8369 100644 --- a/404.html +++ b/404.html @@ -2,21 +2,18 @@ - -Page Not Found | Mateusz Dąbrowski + +Page Not Found | Mateusz Dąbrowski - - - + + + -
-
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.

- - +
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.402ca3c1.css b/assets/css/styles.402ca3c1.css deleted file mode 100644 index dde9c29a0..000000000 --- a/assets/css/styles.402ca3c1.css +++ /dev/null @@ -1 +0,0 @@ -.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)}html[data-theme=dark] .DocSearch,html[data-theme=light] .DocSearch{--docsearch-text-color:var(--ifm-font-color-base);--docsearch-hit-color:var(--ifm-font-color-base);--docsearch-hit-active-color:var(--ifm-color-white);--docsearch-logo-color:var(--ifm-font-color-base)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.articleLink_BNeC,.close{float:right}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}: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-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-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}.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{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;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);text-rendering:optimizelegibility}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,.tabItem_LNqP{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,.tabList__CuJ{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{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}.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{list-style:none;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{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}.close{color:var(--ifm-color-black);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}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.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;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;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_S0QG>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q>:last-child,.footer__items,.tabItem_Ymn6>:last-child{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{list-style:none;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;left:0;top:0;visibility:hidden}.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)}.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{grid-gap:var(--ifm-spacing-horizontal);display:grid;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;--ifm-color-primary:#da4e55;--ifm-color-tertiary:#1d73c9;--ifm-background-surface-color:#18191a;--ifm-background-color:#212121;--ifm-code-background:#333437;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#1d73c9;--ifm-color-secondary:#f6b355;--ifm-color-tertiary:#da4e55;--ifm-color-gray:#212121;--ifm-color-black:#18191a;--ifm-color-white:#fff;--ifm-code-background:#f6f7f8;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}#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}.react-toggle{margin-left:1rem}.header-github-link:hover,.header-linkedin-link:hover,.header-salesforce-link:hover{opacity:.6}.header-linkedin-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 516 516'%3E%3Cpath d='M150.65 100.682c0 27.992-22.508 50.683-50.273 50.683-27.765 0-50.273-22.691-50.273-50.683C50.104 72.691 72.612 50 100.377 50c27.766 0 50.273 22.691 50.273 50.682zm-7.356 86.651H58.277V462h85.017V187.333zm135.901 0h-81.541V462h81.541V317.819c0-38.624 17.779-61.615 51.807-61.615 31.268 0 46.289 22.071 46.289 61.615V462h84.605V288.085c0-73.571-41.689-109.131-99.934-109.131s-82.768 45.369-82.768 45.369v-36.99z'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-linkedin-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 516 516'%3E%3Cpath fill='%23fff' d='M150.65 100.682c0 27.992-22.508 50.683-50.273 50.683-27.765 0-50.273-22.691-50.273-50.683C50.104 72.691 72.612 50 100.377 50c27.766 0 50.273 22.691 50.273 50.682zm-7.356 86.651H58.277V462h85.017V187.333zm135.901 0h-81.541V462h81.541V317.819c0-38.624 17.779-61.615 51.807-61.615 31.268 0 46.289 22.071 46.289 61.615V462h84.605V288.085c0-73.571-41.689-109.131-99.934-109.131s-82.768 45.369-82.768 45.369v-36.99z'/%3E%3C/svg%3E") no-repeat}.header-github-link{padding-right:16px}.header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat}.header-salesforce-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 50 50' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14 8C8.484 8 4 12.484 4 18c0 .992.148 1.973.441 2.926A8.969 8.969 0 0 0 1 28c0 5.266 4.586 9.516 9.922 8.953C12.418 40 15.57 42 19 42c3.21 0 6.16-1.723 7.766-4.457A8.318 8.318 0 0 0 29.5 38a8.432 8.432 0 0 0 7.25-4.078c.43.055.84.078 1.25.078 6.066 0 11-4.934 11-11s-4.934-11-11-11c-1.223 0-2.418.2-3.563.594A8.522 8.522 0 0 0 27.5 9a8.39 8.39 0 0 0-5.953 2.441A9.977 9.977 0 0 0 14 8zm2.113 11.8h.711c.153 0 .274.126.274.282v5.836c0 .16-.121.281-.274.281h-.71a.274.274 0 0 1-.274-.281v-5.836c0-.156.12-.281.273-.281zm12.465.114c.145 0 .27.008.379.027.105.02.188.04.277.067l.008.004c.094.039.137.125.102.218l-.203.563c-.028.066-.082.148-.239.098-.023-.004-.058-.016-.125-.032-.035-.004-.113-.015-.199-.015a.857.857 0 0 0-.258.035.49.49 0 0 0-.183.117.701.701 0 0 0-.164.242 3.613 3.613 0 0 0-.133.657h.734c.063 0 .113.02.145.058.023.024.05.07.043.14l-.106.56c-.015.124-.113.16-.187.16h-.79l-.585 3.316a5.72 5.72 0 0 1-.239.918 1.916 1.916 0 0 1-.367.625c-.16.176-.34.3-.535.371-.195.07-.426.105-.687.105-.13 0-.258-.003-.41-.039a1.925 1.925 0 0 1-.258-.074.182.182 0 0 1-.102-.234c.02-.051.18-.485.2-.543a.172.172 0 0 1 .226-.102c.047.02.074.032.125.043.058.008.137.02.195.02a.916.916 0 0 0 .285-.04.377.377 0 0 0 .192-.152 1.2 1.2 0 0 0 .172-.355c.058-.156.109-.371.156-.64l.578-3.22h-.469c-.066 0-.117-.019-.152-.058a.196.196 0 0 1-.035-.145l.097-.554c.028-.121.137-.157.196-.16h.515l.035-.282c.098-.554.286-.98.563-1.265.29-.285.691-.434 1.203-.434zM16.824 20c.043 0 .074.035.074.082 0-.047-.03-.082-.074-.082zm-7.363 1.797.094.004h.004c.511 0 1.043.129 1.449.36.129.07.187.214.133.347-.016.043-.176.433-.192.476a.265.265 0 0 1-.246.172c-.078 0-.14-.035-.156-.043a2.734 2.734 0 0 0-1.11-.258c-.234 0-.398.09-.398.235 0 .137.402.258.727.351l.082.028c.496.144 1.425.414 1.425 1.324 0 .855-.68 1.406-1.73 1.406-.566 0-1.016-.097-1.469-.32l-.05-.024c-.079-.043-.153-.082-.254-.152a.257.257 0 0 1-.07-.312l.183-.473a.27.27 0 0 1 .258-.188.31.31 0 0 1 .152.04l.066.043.094.046c.336.2.711.297 1.113.297.278 0 .465-.11.465-.285 0-.144-.37-.246-.703-.34l-.094-.027c-.504-.133-1.437-.379-1.437-1.332 0-.809.683-1.375 1.664-1.375zm14.457 0h.004c.512 0 1.039.133 1.45.36a.28.28 0 0 1 .132.347c-.016.047-.176.433-.192.48a.276.276 0 0 1-.25.168.357.357 0 0 1-.156-.039 2.716 2.716 0 0 0-1.105-.258c-.238 0-.403.09-.403.235 0 .137.407.254.727.351l.082.028c.496.144 1.43.414 1.43 1.324 0 .855-.68 1.406-1.73 1.406-.567 0-1.02-.097-1.47-.32l-.054-.024c-.078-.043-.153-.082-.254-.152-.094-.078-.117-.195-.067-.312l.184-.47a.264.264 0 0 1 .258-.187c.055 0 .113.012.183.055.036.023.07.043.125.074.34.196.715.293 1.118.293.277 0 .465-.105.465-.281 0-.145-.375-.25-.704-.344l-.097-.027c-.5-.133-1.438-.379-1.438-1.332 0-.809.688-1.371 1.668-1.371zm14.004.004c.23 0 .441.012.621.039.191.023.45.09.566.133a.274.274 0 0 1 .16.14l.04.125-.032.078c-.054.145-.093.25-.14.368l-.055.132a.27.27 0 0 1-.254.184l-.05-.004-.028-.012a2.699 2.699 0 0 0-.777-.097c-.328 0-.563.09-.72.281-.171.21-.257.484-.257.836 0 .383.094.68.277.855.18.168.434.254.762.254.145 0 .281-.008.403-.023.101-.016.199-.043.328-.09l.062-.016h.035c.121 0 .219.07.258.176l.191.492c.063.157-.023.293-.152.352a3.679 3.679 0 0 1-1.18.195c-.742 0-1.312-.203-1.699-.605-.386-.395-.582-.93-.582-1.59 0-.305.047-.594.14-.852.095-.273.24-.507.427-.707.191-.199.43-.36.703-.472.277-.114.597-.172.953-.172zm-24.356.097c.559 0 .993.125 1.29.368.304.246.46.64.46 1.168v2.257a.17.17 0 0 1-.132.18s-.102.024-.192.043c-.086.02-.406.078-.676.121-.273.043-.55.063-.828.063-.265 0-.508-.02-.722-.067a1.55 1.55 0 0 1-.579-.234 1.105 1.105 0 0 1-.382-.422 1.287 1.287 0 0 1-.133-.61c0-.234.05-.44.156-.62.102-.176.242-.325.418-.442.172-.113.367-.2.586-.25.215-.055.445-.082.684-.082.171 0 .312.004.421.012 0 0 .149.012.333.035-.004-.313-.07-.426-.176-.5-.133-.094-.336-.14-.606-.14h-.004c-.05 0-.644.003-1.109.238-.027.02-.059.027-.059.027-.074.023-.175 0-.21-.102l-.188-.468a.172.172 0 0 1 .066-.223c.243-.176.829-.281.856-.285a4.74 4.74 0 0 1 .726-.067zm6.278.004c.273 0 .554.051.8.149.18.07.356.195.54.383.128.128.3.382.367.617.14.465.113.887.086 1.094a.19.19 0 0 1-.184.168l-2.558-.004c.027.296.117.503.273.648.187.172.477.266.844.266h.011c.551 0 .809-.09.997-.16l.054-.016c.078-.027.188-.004.227.098l.176.453c.046.105.02.199-.07.246-.188.097-.614.254-1.391.258h-.012c-.375 0-.707-.051-.988-.153a1.884 1.884 0 0 1-.707-.433 1.74 1.74 0 0 1-.41-.668 2.492 2.492 0 0 1-.13-.82c0-.294.044-.571.122-.825a1.9 1.9 0 0 1 .382-.676 1.88 1.88 0 0 1 .649-.46c.258-.11.566-.165.922-.165zm10.812 0c.332 0 .633.055.887.164.254.11.469.262.64.45.169.191.297.418.38.672.078.253.12.527.12.816 0 .289-.042.562-.12.812a1.83 1.83 0 0 1-.38.672c-.175.192-.39.344-.64.45-.258.109-.555.16-.887.16-.332 0-.629-.051-.883-.16a1.759 1.759 0 0 1-1.02-1.122 2.723 2.723 0 0 1-.12-.812c0-.29.043-.563.12-.817a1.84 1.84 0 0 1 .38-.671 1.81 1.81 0 0 1 .637-.45c.257-.109.554-.164.886-.164zm10.7 0c.273 0 .55.051.8.149.176.074.352.195.535.383.133.128.301.382.371.617.149.492.106.933.079 1.101a.176.176 0 0 1-.172.16l-2.563-.003c.028.296.114.503.27.644.187.176.48.266.844.266h.011c.555 0 .813-.09 1-.157l.055-.015a.178.178 0 0 1 .227.098l.171.453c.047.101.024.195-.066.246-.188.093-.613.254-1.39.254h-.012c-.38 0-.711-.047-.989-.149a1.932 1.932 0 0 1-.71-.433 1.773 1.773 0 0 1-.41-.672 2.558 2.558 0 0 1-.126-.817c0-.293.043-.57.121-.824.082-.254.211-.484.38-.676a1.88 1.88 0 0 1 .652-.46c.254-.11.562-.165.921-.165zm-6.075 0c.18.012.414.059.473.082.078.024.137.11.105.215v.004c-.027.067-.156.422-.203.535a.205.205 0 0 1-.203.137 1.235 1.235 0 0 0-.61.008.736.736 0 0 0-.292.168.852.852 0 0 0-.207.336c-.051.14-.082.375-.082.633v1.902a.18.18 0 0 1-.184.176h-.7a.178.178 0 0 1-.179-.176v-3.809c0-.097.078-.175.176-.175h.684c.097 0 .175.078.175.175v.082c.094-.066.2-.129.313-.18.168-.07.367-.132.734-.113zM9.56 22zm10.222.754c-.308 0-.531.105-.683.32a1.17 1.17 0 0 0-.176.422l1.672.004c-.028-.188-.074-.324-.149-.426-.156-.222-.363-.32-.664-.32zm21.508 0c-.309 0-.531.105-.68.32-.082.11-.14.25-.175.422l1.668.004a.91.91 0 0 0-.149-.426c-.156-.222-.363-.32-.664-.32zm-10.633.016c-.316 0-.535.097-.683.304-.149.215-.227.528-.227.93s.078.719.23.933c.145.211.364.31.68.31.32 0 .54-.099.688-.31.156-.218.234-.53.234-.933 0-.402-.078-.715-.234-.93-.149-.207-.367-.304-.688-.304zm8.149.027h.023-.023zm-28.04.11a.075.075 0 0 1-.074.046h.012c.024 0 .047-.012.063-.047zm14.36 0c-.016.038-.043.046-.07.046h.008c.023 0 .05-.012.062-.047zm-2.625.784zm-8.887.5c-.363 0-.57.094-.644.137l-.043.027c-.13.086-.192.211-.192.395 0 .117.024.207.063.266.031.043.039.054.133.12l.004.005c.015.011.234.144.71.12.262-.015.504-.05.626-.073v-.954c-.122-.011-.364-.039-.625-.043zm25.25.993c-.02 0-.031.003-.031.003h.031v-.003zm-21.965.734c0 .047-.03.082-.074.082.043 0 .074-.035.074-.082z'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-salesforce-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 50 50' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M14 8C8.484 8 4 12.484 4 18c0 .992.148 1.973.441 2.926A8.969 8.969 0 0 0 1 28c0 5.266 4.586 9.516 9.922 8.953C12.418 40 15.57 42 19 42c3.21 0 6.16-1.723 7.766-4.457A8.318 8.318 0 0 0 29.5 38a8.432 8.432 0 0 0 7.25-4.078c.43.055.84.078 1.25.078 6.066 0 11-4.934 11-11s-4.934-11-11-11c-1.223 0-2.418.2-3.563.594A8.522 8.522 0 0 0 27.5 9a8.39 8.39 0 0 0-5.953 2.441A9.977 9.977 0 0 0 14 8zm2.113 11.8h.711c.153 0 .274.126.274.282v5.836c0 .16-.121.281-.274.281h-.71a.274.274 0 0 1-.274-.281v-5.836c0-.156.12-.281.273-.281zm12.465.114c.145 0 .27.008.379.027.105.02.188.04.277.067l.008.004c.094.039.137.125.102.218l-.203.563c-.028.066-.082.148-.239.098-.023-.004-.058-.016-.125-.032-.035-.004-.113-.015-.199-.015a.857.857 0 0 0-.258.035.49.49 0 0 0-.183.117.701.701 0 0 0-.164.242 3.613 3.613 0 0 0-.133.657h.734c.063 0 .113.02.145.058.023.024.05.07.043.14l-.106.56c-.015.124-.113.16-.187.16h-.79l-.585 3.316a5.72 5.72 0 0 1-.239.918 1.916 1.916 0 0 1-.367.625c-.16.176-.34.3-.535.371-.195.07-.426.105-.687.105-.13 0-.258-.003-.41-.039a1.925 1.925 0 0 1-.258-.074.182.182 0 0 1-.102-.234c.02-.051.18-.485.2-.543a.172.172 0 0 1 .226-.102c.047.02.074.032.125.043.058.008.137.02.195.02a.916.916 0 0 0 .285-.04.377.377 0 0 0 .192-.152 1.2 1.2 0 0 0 .172-.355c.058-.156.109-.371.156-.64l.578-3.22h-.469c-.066 0-.117-.019-.152-.058a.196.196 0 0 1-.035-.145l.097-.554c.028-.121.137-.157.196-.16h.515l.035-.282c.098-.554.286-.98.563-1.265.29-.285.691-.434 1.203-.434zM16.824 20c.043 0 .074.035.074.082 0-.047-.03-.082-.074-.082zm-7.363 1.797.094.004h.004c.511 0 1.043.129 1.449.36.129.07.187.214.133.347-.016.043-.176.433-.192.476a.265.265 0 0 1-.246.172c-.078 0-.14-.035-.156-.043a2.734 2.734 0 0 0-1.11-.258c-.234 0-.398.09-.398.235 0 .137.402.258.727.351l.082.028c.496.144 1.425.414 1.425 1.324 0 .855-.68 1.406-1.73 1.406-.566 0-1.016-.097-1.469-.32l-.05-.024c-.079-.043-.153-.082-.254-.152a.257.257 0 0 1-.07-.312l.183-.473a.27.27 0 0 1 .258-.188.31.31 0 0 1 .152.04l.066.043.094.046c.336.2.711.297 1.113.297.278 0 .465-.11.465-.285 0-.144-.37-.246-.703-.34l-.094-.027c-.504-.133-1.437-.379-1.437-1.332 0-.809.683-1.375 1.664-1.375zm14.457 0h.004c.512 0 1.039.133 1.45.36a.28.28 0 0 1 .132.347c-.016.047-.176.433-.192.48a.276.276 0 0 1-.25.168.357.357 0 0 1-.156-.039 2.716 2.716 0 0 0-1.105-.258c-.238 0-.403.09-.403.235 0 .137.407.254.727.351l.082.028c.496.144 1.43.414 1.43 1.324 0 .855-.68 1.406-1.73 1.406-.567 0-1.02-.097-1.47-.32l-.054-.024c-.078-.043-.153-.082-.254-.152-.094-.078-.117-.195-.067-.312l.184-.47a.264.264 0 0 1 .258-.187c.055 0 .113.012.183.055.036.023.07.043.125.074.34.196.715.293 1.118.293.277 0 .465-.105.465-.281 0-.145-.375-.25-.704-.344l-.097-.027c-.5-.133-1.438-.379-1.438-1.332 0-.809.688-1.371 1.668-1.371zm14.004.004c.23 0 .441.012.621.039.191.023.45.09.566.133a.274.274 0 0 1 .16.14l.04.125-.032.078c-.054.145-.093.25-.14.368l-.055.132a.27.27 0 0 1-.254.184l-.05-.004-.028-.012a2.699 2.699 0 0 0-.777-.097c-.328 0-.563.09-.72.281-.171.21-.257.484-.257.836 0 .383.094.68.277.855.18.168.434.254.762.254.145 0 .281-.008.403-.023.101-.016.199-.043.328-.09l.062-.016h.035c.121 0 .219.07.258.176l.191.492c.063.157-.023.293-.152.352a3.679 3.679 0 0 1-1.18.195c-.742 0-1.312-.203-1.699-.605-.386-.395-.582-.93-.582-1.59 0-.305.047-.594.14-.852.095-.273.24-.507.427-.707.191-.199.43-.36.703-.472.277-.114.597-.172.953-.172zm-24.356.097c.559 0 .993.125 1.29.368.304.246.46.64.46 1.168v2.257a.17.17 0 0 1-.132.18s-.102.024-.192.043c-.086.02-.406.078-.676.121-.273.043-.55.063-.828.063-.265 0-.508-.02-.722-.067a1.55 1.55 0 0 1-.579-.234 1.105 1.105 0 0 1-.382-.422 1.287 1.287 0 0 1-.133-.61c0-.234.05-.44.156-.62.102-.176.242-.325.418-.442.172-.113.367-.2.586-.25.215-.055.445-.082.684-.082.171 0 .312.004.421.012 0 0 .149.012.333.035-.004-.313-.07-.426-.176-.5-.133-.094-.336-.14-.606-.14h-.004c-.05 0-.644.003-1.109.238-.027.02-.059.027-.059.027-.074.023-.175 0-.21-.102l-.188-.468a.172.172 0 0 1 .066-.223c.243-.176.829-.281.856-.285a4.74 4.74 0 0 1 .726-.067zm6.278.004c.273 0 .554.051.8.149.18.07.356.195.54.383.128.128.3.382.367.617.14.465.113.887.086 1.094a.19.19 0 0 1-.184.168l-2.558-.004c.027.296.117.503.273.648.187.172.477.266.844.266h.011c.551 0 .809-.09.997-.16l.054-.016c.078-.027.188-.004.227.098l.176.453c.046.105.02.199-.07.246-.188.097-.614.254-1.391.258h-.012c-.375 0-.707-.051-.988-.153a1.884 1.884 0 0 1-.707-.433 1.74 1.74 0 0 1-.41-.668 2.492 2.492 0 0 1-.13-.82c0-.294.044-.571.122-.825a1.9 1.9 0 0 1 .382-.676 1.88 1.88 0 0 1 .649-.46c.258-.11.566-.165.922-.165zm10.812 0c.332 0 .633.055.887.164.254.11.469.262.64.45.169.191.297.418.38.672.078.253.12.527.12.816 0 .289-.042.562-.12.812a1.83 1.83 0 0 1-.38.672c-.175.192-.39.344-.64.45-.258.109-.555.16-.887.16-.332 0-.629-.051-.883-.16a1.759 1.759 0 0 1-1.02-1.122 2.723 2.723 0 0 1-.12-.812c0-.29.043-.563.12-.817a1.84 1.84 0 0 1 .38-.671 1.81 1.81 0 0 1 .637-.45c.257-.109.554-.164.886-.164zm10.7 0c.273 0 .55.051.8.149.176.074.352.195.535.383.133.128.301.382.371.617.149.492.106.933.079 1.101a.176.176 0 0 1-.172.16l-2.563-.003c.028.296.114.503.27.644.187.176.48.266.844.266h.011c.555 0 .813-.09 1-.157l.055-.015a.178.178 0 0 1 .227.098l.171.453c.047.101.024.195-.066.246-.188.093-.613.254-1.39.254h-.012c-.38 0-.711-.047-.989-.149a1.932 1.932 0 0 1-.71-.433 1.773 1.773 0 0 1-.41-.672 2.558 2.558 0 0 1-.126-.817c0-.293.043-.57.121-.824.082-.254.211-.484.38-.676a1.88 1.88 0 0 1 .652-.46c.254-.11.562-.165.921-.165zm-6.075 0c.18.012.414.059.473.082.078.024.137.11.105.215v.004c-.027.067-.156.422-.203.535a.205.205 0 0 1-.203.137 1.235 1.235 0 0 0-.61.008.736.736 0 0 0-.292.168.852.852 0 0 0-.207.336c-.051.14-.082.375-.082.633v1.902a.18.18 0 0 1-.184.176h-.7a.178.178 0 0 1-.179-.176v-3.809c0-.097.078-.175.176-.175h.684c.097 0 .175.078.175.175v.082c.094-.066.2-.129.313-.18.168-.07.367-.132.734-.113zM9.56 22zm10.222.754c-.308 0-.531.105-.683.32a1.17 1.17 0 0 0-.176.422l1.672.004c-.028-.188-.074-.324-.149-.426-.156-.222-.363-.32-.664-.32zm21.508 0c-.309 0-.531.105-.68.32-.082.11-.14.25-.175.422l1.668.004a.91.91 0 0 0-.149-.426c-.156-.222-.363-.32-.664-.32zm-10.633.016c-.316 0-.535.097-.683.304-.149.215-.227.528-.227.93s.078.719.23.933c.145.211.364.31.68.31.32 0 .54-.099.688-.31.156-.218.234-.53.234-.933 0-.402-.078-.715-.234-.93-.149-.207-.367-.304-.688-.304zm8.149.027h.023-.023zm-28.04.11a.075.075 0 0 1-.074.046h.012c.024 0 .047-.012.063-.047zm14.36 0c-.016.038-.043.046-.07.046h.008c.023 0 .05-.012.062-.047zm-2.625.784zm-8.887.5c-.363 0-.57.094-.644.137l-.043.027c-.13.086-.192.211-.192.395 0 .117.024.207.063.266.031.043.039.054.133.12l.004.005c.015.011.234.144.71.12.262-.015.504-.05.626-.073v-.954c-.122-.011-.364-.039-.625-.043zm25.25.993c-.02 0-.031.003-.031.003h.031v-.003zm-21.965.734c0 .047-.03.082-.074.082.043 0 .074-.035.074-.082z'/%3E%3C/svg%3E") no-repeat}.footer{background-color:var(--ifm-color-black)}.footer__title,.heroCodeVariable_DdG0,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5{color:var(--ifm-color-secondary)}.footer__link-item,html[data-theme=dark] article header>h1{color:var(--ifm-color-white)}.navbar__item>.dropdown__menu a.navbar__link--active{color:var(--ifm-navbar-link-color);opacity:.85}.navbar__item>.dropdown__menu a.dropdown__link:hover{color:var(--ifm-navbar-link-hover-color);opacity:1}ul>li>ul a.menu__link{font-size:.9rem;opacity:.85}article{margin:0 auto;max-width:800px}.articleTitle_Qstm,.heroCodeValue_WuUN,.heroProjectKeywords_uRRc,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma,article header>h1{color:var(--ifm-color-primary)}.theme-code-block-highlighted-line{--docusaurus-highlighted-code-line-bg:#f6b35533;font-weight:700;margin:0 calc(var(--ifm-pre-padding)*-1) 0 calc(var(--ifm-pre-padding)*-1.3)}html[data-theme=light] .DocSearch{--docsearch-muted-color:var(--ifm-font-color-base);--docsearch-container-background:#5e6470b3;--docsearch-modal-background:var(--ifm-color-secondary-lighter);--docsearch-searchbox-background:var(--ifm-color-background-color);--docsearch-searchbox-focus-background:var(--ifm-color-white);--docsearch-hit-background:var(--ifm-color-white);--docsearch-footer-background:var(--ifm-color-white)}html[data-theme=dark] .DocSearch{--docsearch-muted-color:var(--ifm-color-secondary-darkest);--docsearch-container-background:#2f3745b3;--docsearch-modal-background:var(--ifm-background-color);--docsearch-searchbox-background:var(--ifm-background-color);--docsearch-searchbox-focus-background:var(--ifm-color-black);--docsearch-hit-background:var(--ifm-color-emphasis-100);--docsearch-footer-background:var(--ifm-background-surface-color);--docsearch-key-gradient:linear-gradient(-26.5deg,var(--ifm-color-emphasis-200) 0%,var(--ifm-color-emphasis-100) 100%)}.video--container{padding-bottom:56.25%;position:relative}.video--container iframe{height:100%;left:0;position:absolute;top:0;width:100%}.video{aspect-ratio:16/9;width:100%}.form--container{background-color:var(--ifm-color-white);border-radius:10px;position:relative}.form--container iframe{height:600px;left:0;position:absolute;top:0;width:100%}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_b6E3,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.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;text-decoration:underline}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}.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)}.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] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA,html:not([data-theme]) .themedComponent--light_NU7w{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.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}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.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%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.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)}.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}.lastUpdated_vwxv{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}.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)}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}.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)}.hero_syme,html[data-theme=light] .articles_L71A{background-color:#212121}.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}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.hero_syme{padding:48px}.heroInner_VWeJ{margin:0 auto;max-width:1100px;padding:0 20px}.heroProjectTagline_EkV5{color:#fff;font-size:60px;margin:0;text-align:center}.heroProjectSubTagline_WKiD{color:#fff;font-family:Courier,monospace;font-size:44px;margin:0;text-align:center}.heroCodeFunction_kPM9,html[data-theme=light] .articlesHeading_izBD{color:var(--ifm-color-tertiary)}.heroCodeSymbols_NdyX{color:#fff}.articles_L71A,.features_keug{align-items:center;display:flex;padding:2rem 0;width:100%}.featureImage_yA8i{height:150px;margin:0 auto;max-width:60%;padding-top:20px}.articlesHeading_izBD,.featureHeading_TLGJ{font-family:Courier,monospace;font-size:var(--ifm-h3-font-size);padding-top:1rem;text-align:center;color:var(--ifm-color-primary);text-transform:uppercase}.articlesHeading_izBD:before,.featureHeading_TLGJ:before{content:"<"}.articlesHeading_izBD:after,.articlesHeading_izBD:before,.featureHeading_TLGJ:after,.featureHeading_TLGJ:before{color:var(--ifm-color-secondary);font-family:Courier,monospace}.articlesHeading_izBD:after,.featureHeading_TLGJ:after{content:"/>"}.articlesHeading_izBD{padding-bottom:2rem}.articleCard_oNRo{margin-bottom:2rem}.articleTag_W46I{color:var(--ifm-color-secondary);font-size:var(--ifm-h5-font-size)}.buttons_pzbO{align-items:center;display:flex;justify-content:center}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}#leadText_qzwo,.cardTitle_rnsV{font-size:1.2rem}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands li,.DocSearch-Commands-Key{align-items:center;display:flex}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}#leadText_qzwo{color:var(--ifm-color-primary);margin:12px 0 6px}.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}.cardDescription_PWke{font-size:.8rem}.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:"#"}.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{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;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}.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;list-style:none;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)}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem;text-transform:uppercase}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.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)}@media only screen and (min-width:768px){article header>h1{font-size:7rem!important}.markdown>h2{font-size:2.5rem!important}.markdown>ol,.markdown>p,.markdown>ul,div[role=tabpanel] ol,div[role=tabpanel] p,div[role=tabpanel] ul{font-size:20px}div[role=tabpanel] .admonition p{font-size:16px}.form--container{padding-bottom:110%}.form--container iframe{height:100%}#leadText_qzwo{font-size:1.5rem}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.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_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_: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_m80_{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_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{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_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media only screen and (min-width:997px){.markdown>.admonition-tip{display:none}}@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}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media only screen and (max-width:768px){.form--container{height:600px}.hero_syme{padding-left:20px;padding-right:20px}html[data-theme=dark] .hero_syme{padding-bottom:0}.heroInner_VWeJ{padding:0}.heroProjectTagline_EkV5{font-size:42px;text-align:center}.heroProjectSubTagline_WKiD{font-size:32px}}@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}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{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 screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@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/css/styles.b3b8a01d.css b/assets/css/styles.b3b8a01d.css new file mode 100644 index 000000000..5d2d8f725 --- /dev/null +++ b/assets/css/styles.b3b8a01d.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,.hash-link{-webkit-user-select:none}.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)}html[data-theme=dark] .DocSearch,html[data-theme=light] .DocSearch{--docsearch-text-color:var(--ifm-font-color-base);--docsearch-hit-color:var(--ifm-font-color-base);--docsearch-hit-active-color:var(--ifm-color-white);--docsearch-logo-color:var(--ifm-font-color-base)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}: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-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-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}.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{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;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);text-rendering:optimizelegibility}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,.tabItem_LNqP{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,.tabList__CuJ{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{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{list-style:none;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{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;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}.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}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.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;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;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,.tabItem_Ymn6>:last-child{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{list-style:none;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;left:0;top:0;visibility:hidden}.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;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.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)}.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{-webkit-appearance:none;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{grid-gap:var(--ifm-spacing-horizontal);display:grid;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;--ifm-color-primary:#da4e55;--ifm-color-tertiary:#1d73c9;--ifm-background-surface-color:#18191a;--ifm-background-color:#212121;--ifm-code-background:#333437;--docsearch-text-color:#f5f6f7;--docsearch-container-background:#090a11cc;--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 #494c6a80,0 -4px 8px 0 #0003;--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#1d73c9;--ifm-color-secondary:#f6b355;--ifm-color-tertiary:#da4e55;--ifm-color-gray:#212121;--ifm-color-black:#18191a;--ifm-color-white:#fff;--ifm-code-background:#f6f7f8;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:#656c85cc;--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px #1e235a66;--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 #45629b1f;--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}#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}.react-toggle{margin-left:1rem}.header-github-link:hover,.header-linkedin-link:hover,.header-salesforce-link:hover{opacity:.6}.header-linkedin-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 516 516'%3E%3Cpath d='M150.65 100.682c0 27.992-22.508 50.683-50.273 50.683-27.765 0-50.273-22.691-50.273-50.683C50.104 72.691 72.612 50 100.377 50c27.766 0 50.273 22.691 50.273 50.682zm-7.356 86.651H58.277V462h85.017V187.333zm135.901 0h-81.541V462h81.541V317.819c0-38.624 17.779-61.615 51.807-61.615 31.268 0 46.289 22.071 46.289 61.615V462h84.605V288.085c0-73.571-41.689-109.131-99.934-109.131s-82.768 45.369-82.768 45.369v-36.99z'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-linkedin-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 516 516'%3E%3Cpath fill='%23fff' d='M150.65 100.682c0 27.992-22.508 50.683-50.273 50.683-27.765 0-50.273-22.691-50.273-50.683C50.104 72.691 72.612 50 100.377 50c27.766 0 50.273 22.691 50.273 50.682zm-7.356 86.651H58.277V462h85.017V187.333zm135.901 0h-81.541V462h81.541V317.819c0-38.624 17.779-61.615 51.807-61.615 31.268 0 46.289 22.071 46.289 61.615V462h84.605V288.085c0-73.571-41.689-109.131-99.934-109.131s-82.768 45.369-82.768 45.369v-36.99z'/%3E%3C/svg%3E") no-repeat}.header-github-link{padding-right:16px}.header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat}.header-salesforce-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 50 50' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14 8C8.484 8 4 12.484 4 18c0 .992.148 1.973.441 2.926A8.969 8.969 0 0 0 1 28c0 5.266 4.586 9.516 9.922 8.953C12.418 40 15.57 42 19 42c3.21 0 6.16-1.723 7.766-4.457A8.318 8.318 0 0 0 29.5 38a8.432 8.432 0 0 0 7.25-4.078c.43.055.84.078 1.25.078 6.066 0 11-4.934 11-11s-4.934-11-11-11c-1.223 0-2.418.2-3.563.594A8.522 8.522 0 0 0 27.5 9a8.39 8.39 0 0 0-5.953 2.441A9.977 9.977 0 0 0 14 8zm2.113 11.8h.711c.153 0 .274.126.274.282v5.836c0 .16-.121.281-.274.281h-.71a.274.274 0 0 1-.274-.281v-5.836c0-.156.12-.281.273-.281zm12.465.114c.145 0 .27.008.379.027.105.02.188.04.277.067l.008.004c.094.039.137.125.102.218l-.203.563c-.028.066-.082.148-.239.098-.023-.004-.058-.016-.125-.032-.035-.004-.113-.015-.199-.015a.857.857 0 0 0-.258.035.49.49 0 0 0-.183.117.701.701 0 0 0-.164.242 3.613 3.613 0 0 0-.133.657h.734c.063 0 .113.02.145.058.023.024.05.07.043.14l-.106.56c-.015.124-.113.16-.187.16h-.79l-.585 3.316a5.72 5.72 0 0 1-.239.918 1.916 1.916 0 0 1-.367.625c-.16.176-.34.3-.535.371-.195.07-.426.105-.687.105-.13 0-.258-.003-.41-.039a1.925 1.925 0 0 1-.258-.074.182.182 0 0 1-.102-.234c.02-.051.18-.485.2-.543a.172.172 0 0 1 .226-.102c.047.02.074.032.125.043.058.008.137.02.195.02a.916.916 0 0 0 .285-.04.377.377 0 0 0 .192-.152 1.2 1.2 0 0 0 .172-.355c.058-.156.109-.371.156-.64l.578-3.22h-.469c-.066 0-.117-.019-.152-.058a.196.196 0 0 1-.035-.145l.097-.554c.028-.121.137-.157.196-.16h.515l.035-.282c.098-.554.286-.98.563-1.265.29-.285.691-.434 1.203-.434zM16.824 20c.043 0 .074.035.074.082 0-.047-.03-.082-.074-.082zm-7.363 1.797.094.004h.004c.511 0 1.043.129 1.449.36.129.07.187.214.133.347-.016.043-.176.433-.192.476a.265.265 0 0 1-.246.172c-.078 0-.14-.035-.156-.043a2.734 2.734 0 0 0-1.11-.258c-.234 0-.398.09-.398.235 0 .137.402.258.727.351l.082.028c.496.144 1.425.414 1.425 1.324 0 .855-.68 1.406-1.73 1.406-.566 0-1.016-.097-1.469-.32l-.05-.024c-.079-.043-.153-.082-.254-.152a.257.257 0 0 1-.07-.312l.183-.473a.27.27 0 0 1 .258-.188.31.31 0 0 1 .152.04l.066.043.094.046c.336.2.711.297 1.113.297.278 0 .465-.11.465-.285 0-.144-.37-.246-.703-.34l-.094-.027c-.504-.133-1.437-.379-1.437-1.332 0-.809.683-1.375 1.664-1.375zm14.457 0h.004c.512 0 1.039.133 1.45.36a.28.28 0 0 1 .132.347c-.016.047-.176.433-.192.48a.276.276 0 0 1-.25.168.357.357 0 0 1-.156-.039 2.716 2.716 0 0 0-1.105-.258c-.238 0-.403.09-.403.235 0 .137.407.254.727.351l.082.028c.496.144 1.43.414 1.43 1.324 0 .855-.68 1.406-1.73 1.406-.567 0-1.02-.097-1.47-.32l-.054-.024c-.078-.043-.153-.082-.254-.152-.094-.078-.117-.195-.067-.312l.184-.47a.264.264 0 0 1 .258-.187c.055 0 .113.012.183.055.036.023.07.043.125.074.34.196.715.293 1.118.293.277 0 .465-.105.465-.281 0-.145-.375-.25-.704-.344l-.097-.027c-.5-.133-1.438-.379-1.438-1.332 0-.809.688-1.371 1.668-1.371zm14.004.004c.23 0 .441.012.621.039.191.023.45.09.566.133a.274.274 0 0 1 .16.14l.04.125-.032.078c-.054.145-.093.25-.14.368l-.055.132a.27.27 0 0 1-.254.184l-.05-.004-.028-.012a2.699 2.699 0 0 0-.777-.097c-.328 0-.563.09-.72.281-.171.21-.257.484-.257.836 0 .383.094.68.277.855.18.168.434.254.762.254.145 0 .281-.008.403-.023.101-.016.199-.043.328-.09l.062-.016h.035c.121 0 .219.07.258.176l.191.492c.063.157-.023.293-.152.352a3.679 3.679 0 0 1-1.18.195c-.742 0-1.312-.203-1.699-.605-.386-.395-.582-.93-.582-1.59 0-.305.047-.594.14-.852.095-.273.24-.507.427-.707.191-.199.43-.36.703-.472.277-.114.597-.172.953-.172zm-24.356.097c.559 0 .993.125 1.29.368.304.246.46.64.46 1.168v2.257a.17.17 0 0 1-.132.18s-.102.024-.192.043c-.086.02-.406.078-.676.121-.273.043-.55.063-.828.063-.265 0-.508-.02-.722-.067a1.55 1.55 0 0 1-.579-.234 1.105 1.105 0 0 1-.382-.422 1.287 1.287 0 0 1-.133-.61c0-.234.05-.44.156-.62.102-.176.242-.325.418-.442.172-.113.367-.2.586-.25.215-.055.445-.082.684-.082.171 0 .312.004.421.012 0 0 .149.012.333.035-.004-.313-.07-.426-.176-.5-.133-.094-.336-.14-.606-.14h-.004c-.05 0-.644.003-1.109.238-.027.02-.059.027-.059.027-.074.023-.175 0-.21-.102l-.188-.468a.172.172 0 0 1 .066-.223c.243-.176.829-.281.856-.285a4.74 4.74 0 0 1 .726-.067zm6.278.004c.273 0 .554.051.8.149.18.07.356.195.54.383.128.128.3.382.367.617.14.465.113.887.086 1.094a.19.19 0 0 1-.184.168l-2.558-.004c.027.296.117.503.273.648.187.172.477.266.844.266h.011c.551 0 .809-.09.997-.16l.054-.016c.078-.027.188-.004.227.098l.176.453c.046.105.02.199-.07.246-.188.097-.614.254-1.391.258h-.012c-.375 0-.707-.051-.988-.153a1.884 1.884 0 0 1-.707-.433 1.74 1.74 0 0 1-.41-.668 2.492 2.492 0 0 1-.13-.82c0-.294.044-.571.122-.825a1.9 1.9 0 0 1 .382-.676 1.88 1.88 0 0 1 .649-.46c.258-.11.566-.165.922-.165zm10.812 0c.332 0 .633.055.887.164.254.11.469.262.64.45.169.191.297.418.38.672.078.253.12.527.12.816 0 .289-.042.562-.12.812a1.83 1.83 0 0 1-.38.672c-.175.192-.39.344-.64.45-.258.109-.555.16-.887.16-.332 0-.629-.051-.883-.16a1.759 1.759 0 0 1-1.02-1.122 2.723 2.723 0 0 1-.12-.812c0-.29.043-.563.12-.817a1.84 1.84 0 0 1 .38-.671 1.81 1.81 0 0 1 .637-.45c.257-.109.554-.164.886-.164zm10.7 0c.273 0 .55.051.8.149.176.074.352.195.535.383.133.128.301.382.371.617.149.492.106.933.079 1.101a.176.176 0 0 1-.172.16l-2.563-.003c.028.296.114.503.27.644.187.176.48.266.844.266h.011c.555 0 .813-.09 1-.157l.055-.015a.178.178 0 0 1 .227.098l.171.453c.047.101.024.195-.066.246-.188.093-.613.254-1.39.254h-.012c-.38 0-.711-.047-.989-.149a1.932 1.932 0 0 1-.71-.433 1.773 1.773 0 0 1-.41-.672 2.558 2.558 0 0 1-.126-.817c0-.293.043-.57.121-.824.082-.254.211-.484.38-.676a1.88 1.88 0 0 1 .652-.46c.254-.11.562-.165.921-.165zm-6.075 0c.18.012.414.059.473.082.078.024.137.11.105.215v.004c-.027.067-.156.422-.203.535a.205.205 0 0 1-.203.137 1.235 1.235 0 0 0-.61.008.736.736 0 0 0-.292.168.852.852 0 0 0-.207.336c-.051.14-.082.375-.082.633v1.902a.18.18 0 0 1-.184.176h-.7a.178.178 0 0 1-.179-.176v-3.809c0-.097.078-.175.176-.175h.684c.097 0 .175.078.175.175v.082c.094-.066.2-.129.313-.18.168-.07.367-.132.734-.113zM9.56 22zm10.222.754c-.308 0-.531.105-.683.32a1.17 1.17 0 0 0-.176.422l1.672.004c-.028-.188-.074-.324-.149-.426-.156-.222-.363-.32-.664-.32zm21.508 0c-.309 0-.531.105-.68.32-.082.11-.14.25-.175.422l1.668.004a.91.91 0 0 0-.149-.426c-.156-.222-.363-.32-.664-.32zm-10.633.016c-.316 0-.535.097-.683.304-.149.215-.227.528-.227.93s.078.719.23.933c.145.211.364.31.68.31.32 0 .54-.099.688-.31.156-.218.234-.53.234-.933 0-.402-.078-.715-.234-.93-.149-.207-.367-.304-.688-.304zm8.149.027h.023-.023zm-28.04.11a.075.075 0 0 1-.074.046h.012c.024 0 .047-.012.063-.047zm14.36 0c-.016.038-.043.046-.07.046h.008c.023 0 .05-.012.062-.047zm-2.625.784zm-8.887.5c-.363 0-.57.094-.644.137l-.043.027c-.13.086-.192.211-.192.395 0 .117.024.207.063.266.031.043.039.054.133.12l.004.005c.015.011.234.144.71.12.262-.015.504-.05.626-.073v-.954c-.122-.011-.364-.039-.625-.043zm25.25.993c-.02 0-.031.003-.031.003h.031v-.003zm-21.965.734c0 .047-.03.082-.074.082.043 0 .074-.035.074-.082z'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-salesforce-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 50 50' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23fff' d='M14 8C8.484 8 4 12.484 4 18c0 .992.148 1.973.441 2.926A8.969 8.969 0 0 0 1 28c0 5.266 4.586 9.516 9.922 8.953C12.418 40 15.57 42 19 42c3.21 0 6.16-1.723 7.766-4.457A8.318 8.318 0 0 0 29.5 38a8.432 8.432 0 0 0 7.25-4.078c.43.055.84.078 1.25.078 6.066 0 11-4.934 11-11s-4.934-11-11-11c-1.223 0-2.418.2-3.563.594A8.522 8.522 0 0 0 27.5 9a8.39 8.39 0 0 0-5.953 2.441A9.977 9.977 0 0 0 14 8zm2.113 11.8h.711c.153 0 .274.126.274.282v5.836c0 .16-.121.281-.274.281h-.71a.274.274 0 0 1-.274-.281v-5.836c0-.156.12-.281.273-.281zm12.465.114c.145 0 .27.008.379.027.105.02.188.04.277.067l.008.004c.094.039.137.125.102.218l-.203.563c-.028.066-.082.148-.239.098-.023-.004-.058-.016-.125-.032-.035-.004-.113-.015-.199-.015a.857.857 0 0 0-.258.035.49.49 0 0 0-.183.117.701.701 0 0 0-.164.242 3.613 3.613 0 0 0-.133.657h.734c.063 0 .113.02.145.058.023.024.05.07.043.14l-.106.56c-.015.124-.113.16-.187.16h-.79l-.585 3.316a5.72 5.72 0 0 1-.239.918 1.916 1.916 0 0 1-.367.625c-.16.176-.34.3-.535.371-.195.07-.426.105-.687.105-.13 0-.258-.003-.41-.039a1.925 1.925 0 0 1-.258-.074.182.182 0 0 1-.102-.234c.02-.051.18-.485.2-.543a.172.172 0 0 1 .226-.102c.047.02.074.032.125.043.058.008.137.02.195.02a.916.916 0 0 0 .285-.04.377.377 0 0 0 .192-.152 1.2 1.2 0 0 0 .172-.355c.058-.156.109-.371.156-.64l.578-3.22h-.469c-.066 0-.117-.019-.152-.058a.196.196 0 0 1-.035-.145l.097-.554c.028-.121.137-.157.196-.16h.515l.035-.282c.098-.554.286-.98.563-1.265.29-.285.691-.434 1.203-.434zM16.824 20c.043 0 .074.035.074.082 0-.047-.03-.082-.074-.082zm-7.363 1.797.094.004h.004c.511 0 1.043.129 1.449.36.129.07.187.214.133.347-.016.043-.176.433-.192.476a.265.265 0 0 1-.246.172c-.078 0-.14-.035-.156-.043a2.734 2.734 0 0 0-1.11-.258c-.234 0-.398.09-.398.235 0 .137.402.258.727.351l.082.028c.496.144 1.425.414 1.425 1.324 0 .855-.68 1.406-1.73 1.406-.566 0-1.016-.097-1.469-.32l-.05-.024c-.079-.043-.153-.082-.254-.152a.257.257 0 0 1-.07-.312l.183-.473a.27.27 0 0 1 .258-.188.31.31 0 0 1 .152.04l.066.043.094.046c.336.2.711.297 1.113.297.278 0 .465-.11.465-.285 0-.144-.37-.246-.703-.34l-.094-.027c-.504-.133-1.437-.379-1.437-1.332 0-.809.683-1.375 1.664-1.375zm14.457 0h.004c.512 0 1.039.133 1.45.36a.28.28 0 0 1 .132.347c-.016.047-.176.433-.192.48a.276.276 0 0 1-.25.168.357.357 0 0 1-.156-.039 2.716 2.716 0 0 0-1.105-.258c-.238 0-.403.09-.403.235 0 .137.407.254.727.351l.082.028c.496.144 1.43.414 1.43 1.324 0 .855-.68 1.406-1.73 1.406-.567 0-1.02-.097-1.47-.32l-.054-.024c-.078-.043-.153-.082-.254-.152-.094-.078-.117-.195-.067-.312l.184-.47a.264.264 0 0 1 .258-.187c.055 0 .113.012.183.055.036.023.07.043.125.074.34.196.715.293 1.118.293.277 0 .465-.105.465-.281 0-.145-.375-.25-.704-.344l-.097-.027c-.5-.133-1.438-.379-1.438-1.332 0-.809.688-1.371 1.668-1.371zm14.004.004c.23 0 .441.012.621.039.191.023.45.09.566.133a.274.274 0 0 1 .16.14l.04.125-.032.078c-.054.145-.093.25-.14.368l-.055.132a.27.27 0 0 1-.254.184l-.05-.004-.028-.012a2.699 2.699 0 0 0-.777-.097c-.328 0-.563.09-.72.281-.171.21-.257.484-.257.836 0 .383.094.68.277.855.18.168.434.254.762.254.145 0 .281-.008.403-.023.101-.016.199-.043.328-.09l.062-.016h.035c.121 0 .219.07.258.176l.191.492c.063.157-.023.293-.152.352a3.679 3.679 0 0 1-1.18.195c-.742 0-1.312-.203-1.699-.605-.386-.395-.582-.93-.582-1.59 0-.305.047-.594.14-.852.095-.273.24-.507.427-.707.191-.199.43-.36.703-.472.277-.114.597-.172.953-.172zm-24.356.097c.559 0 .993.125 1.29.368.304.246.46.64.46 1.168v2.257a.17.17 0 0 1-.132.18s-.102.024-.192.043c-.086.02-.406.078-.676.121-.273.043-.55.063-.828.063-.265 0-.508-.02-.722-.067a1.55 1.55 0 0 1-.579-.234 1.105 1.105 0 0 1-.382-.422 1.287 1.287 0 0 1-.133-.61c0-.234.05-.44.156-.62.102-.176.242-.325.418-.442.172-.113.367-.2.586-.25.215-.055.445-.082.684-.082.171 0 .312.004.421.012 0 0 .149.012.333.035-.004-.313-.07-.426-.176-.5-.133-.094-.336-.14-.606-.14h-.004c-.05 0-.644.003-1.109.238-.027.02-.059.027-.059.027-.074.023-.175 0-.21-.102l-.188-.468a.172.172 0 0 1 .066-.223c.243-.176.829-.281.856-.285a4.74 4.74 0 0 1 .726-.067zm6.278.004c.273 0 .554.051.8.149.18.07.356.195.54.383.128.128.3.382.367.617.14.465.113.887.086 1.094a.19.19 0 0 1-.184.168l-2.558-.004c.027.296.117.503.273.648.187.172.477.266.844.266h.011c.551 0 .809-.09.997-.16l.054-.016c.078-.027.188-.004.227.098l.176.453c.046.105.02.199-.07.246-.188.097-.614.254-1.391.258h-.012c-.375 0-.707-.051-.988-.153a1.884 1.884 0 0 1-.707-.433 1.74 1.74 0 0 1-.41-.668 2.492 2.492 0 0 1-.13-.82c0-.294.044-.571.122-.825a1.9 1.9 0 0 1 .382-.676 1.88 1.88 0 0 1 .649-.46c.258-.11.566-.165.922-.165zm10.812 0c.332 0 .633.055.887.164.254.11.469.262.64.45.169.191.297.418.38.672.078.253.12.527.12.816 0 .289-.042.562-.12.812a1.83 1.83 0 0 1-.38.672c-.175.192-.39.344-.64.45-.258.109-.555.16-.887.16-.332 0-.629-.051-.883-.16a1.759 1.759 0 0 1-1.02-1.122 2.723 2.723 0 0 1-.12-.812c0-.29.043-.563.12-.817a1.84 1.84 0 0 1 .38-.671 1.81 1.81 0 0 1 .637-.45c.257-.109.554-.164.886-.164zm10.7 0c.273 0 .55.051.8.149.176.074.352.195.535.383.133.128.301.382.371.617.149.492.106.933.079 1.101a.176.176 0 0 1-.172.16l-2.563-.003c.028.296.114.503.27.644.187.176.48.266.844.266h.011c.555 0 .813-.09 1-.157l.055-.015a.178.178 0 0 1 .227.098l.171.453c.047.101.024.195-.066.246-.188.093-.613.254-1.39.254h-.012c-.38 0-.711-.047-.989-.149a1.932 1.932 0 0 1-.71-.433 1.773 1.773 0 0 1-.41-.672 2.558 2.558 0 0 1-.126-.817c0-.293.043-.57.121-.824.082-.254.211-.484.38-.676a1.88 1.88 0 0 1 .652-.46c.254-.11.562-.165.921-.165zm-6.075 0c.18.012.414.059.473.082.078.024.137.11.105.215v.004c-.027.067-.156.422-.203.535a.205.205 0 0 1-.203.137 1.235 1.235 0 0 0-.61.008.736.736 0 0 0-.292.168.852.852 0 0 0-.207.336c-.051.14-.082.375-.082.633v1.902a.18.18 0 0 1-.184.176h-.7a.178.178 0 0 1-.179-.176v-3.809c0-.097.078-.175.176-.175h.684c.097 0 .175.078.175.175v.082c.094-.066.2-.129.313-.18.168-.07.367-.132.734-.113zM9.56 22zm10.222.754c-.308 0-.531.105-.683.32a1.17 1.17 0 0 0-.176.422l1.672.004c-.028-.188-.074-.324-.149-.426-.156-.222-.363-.32-.664-.32zm21.508 0c-.309 0-.531.105-.68.32-.082.11-.14.25-.175.422l1.668.004a.91.91 0 0 0-.149-.426c-.156-.222-.363-.32-.664-.32zm-10.633.016c-.316 0-.535.097-.683.304-.149.215-.227.528-.227.93s.078.719.23.933c.145.211.364.31.68.31.32 0 .54-.099.688-.31.156-.218.234-.53.234-.933 0-.402-.078-.715-.234-.93-.149-.207-.367-.304-.688-.304zm8.149.027h.023-.023zm-28.04.11a.075.075 0 0 1-.074.046h.012c.024 0 .047-.012.063-.047zm14.36 0c-.016.038-.043.046-.07.046h.008c.023 0 .05-.012.062-.047zm-2.625.784zm-8.887.5c-.363 0-.57.094-.644.137l-.043.027c-.13.086-.192.211-.192.395 0 .117.024.207.063.266.031.043.039.054.133.12l.004.005c.015.011.234.144.71.12.262-.015.504-.05.626-.073v-.954c-.122-.011-.364-.039-.625-.043zm25.25.993c-.02 0-.031.003-.031.003h.031v-.003zm-21.965.734c0 .047-.03.082-.074.082.043 0 .074-.035.074-.082z'/%3E%3C/svg%3E") no-repeat}.footer{background-color:var(--ifm-color-black)}.footer__title,.heroCodeVariable_DdG0,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5{color:var(--ifm-color-secondary)}.footer__link-item,html[data-theme=dark] article header>h1{color:var(--ifm-color-white)}.navbar__item>.dropdown__menu a.navbar__link--active{color:var(--ifm-navbar-link-color);opacity:.85}.navbar__item>.dropdown__menu a.dropdown__link:hover{color:var(--ifm-navbar-link-hover-color);opacity:1}ul>li>ul a.menu__link{font-size:.9rem;opacity:.85}article{margin:0 auto;max-width:800px}.articleTitle_Qstm,.heroCodeValue_WuUN,.heroProjectKeywords_uRRc,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma,article header>h1{color:var(--ifm-color-primary)}.theme-code-block-highlighted-line{--docusaurus-highlighted-code-line-bg:#f6b35533;font-weight:700;margin:0 calc(var(--ifm-pre-padding)*-1) 0 calc(var(--ifm-pre-padding)*-1.3)}html[data-theme=light] .DocSearch{--docsearch-muted-color:var(--ifm-font-color-base);--docsearch-container-background:#5e6470b3;--docsearch-modal-background:var(--ifm-color-secondary-lighter);--docsearch-searchbox-background:var(--ifm-color-background-color);--docsearch-searchbox-focus-background:var(--ifm-color-white);--docsearch-hit-background:var(--ifm-color-white);--docsearch-footer-background:var(--ifm-color-white)}html[data-theme=dark] .DocSearch{--docsearch-muted-color:var(--ifm-color-secondary-darkest);--docsearch-container-background:#2f3745b3;--docsearch-modal-background:var(--ifm-background-color);--docsearch-searchbox-background:var(--ifm-background-color);--docsearch-searchbox-focus-background:var(--ifm-color-black);--docsearch-hit-background:var(--ifm-color-emphasis-100);--docsearch-footer-background:var(--ifm-background-surface-color);--docsearch-key-gradient:linear-gradient(-26.5deg,var(--ifm-color-emphasis-200) 0%,var(--ifm-color-emphasis-100) 100%)}.video--container{padding-bottom:56.25%;position:relative}.video--container iframe{height:100%;left:0;position:absolute;top:0;width:100%}.video{aspect-ratio:16/9;width:100%}.form--container{background-color:var(--ifm-color-white);border-radius:10px;position:relative}.form--container iframe{height:600px;left:0;position:absolute;top:0;width:100%}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.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;text-decoration:underline}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}.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)}.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}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_Bca1:not(:has(>*)){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}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.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);user-select:none}.hash-link:before{content:"#"}.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%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.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)}.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}.lastUpdated_vwxv{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}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.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}.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)}.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{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;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}.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;list-style:none;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)}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.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{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{--ifm-breadcrumb-separator-size-multiplier:1;color:var(--ifm-color-content-secondary);font-size:.8rem}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:#ffd78e40;color:var(--docsearch-hit-color);padding:.09em 0}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 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)}.hero_syme,html[data-theme=light] .articles_L71A{background-color:#212121}.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}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.hero_syme{padding:48px}.heroInner_VWeJ{margin:0 auto;max-width:1100px;padding:0 20px}.heroProjectTagline_EkV5{color:#fff;font-size:60px;margin:0;text-align:center}.heroProjectSubTagline_WKiD{color:#fff;font-family:Courier,monospace;font-size:44px;margin:0;text-align:center}.heroCodeFunction_kPM9,html[data-theme=light] .articlesHeading_izBD{color:var(--ifm-color-tertiary)}.heroCodeSymbols_NdyX{color:#fff}.articles_L71A,.features_keug{align-items:center;display:flex;padding:2rem 0;width:100%}.featureImage_yA8i{height:150px;margin:0 auto;max-width:60%;padding-top:20px}.articlesHeading_izBD,.featureHeading_TLGJ{font-family:Courier,monospace;font-size:var(--ifm-h3-font-size);padding-top:1rem;text-transform:uppercase;text-align:center;color:var(--ifm-color-primary)}.articlesHeading_izBD:before,.featureHeading_TLGJ:before{content:"<"}.articlesHeading_izBD:after,.articlesHeading_izBD:before,.featureHeading_TLGJ:after,.featureHeading_TLGJ:before{color:var(--ifm-color-secondary);font-family:Courier,monospace}.articlesHeading_izBD:after,.featureHeading_TLGJ:after{content:"/>"}.articlesHeading_izBD{padding-bottom:2rem}.articleCard_oNRo{margin-bottom:2rem}.articleTag_W46I{color:var(--ifm-color-secondary);font-size:var(--ifm-h5-font-size)}.articleLink_BNeC{float:right}.buttons_pzbO{align-items:center;display:flex;justify-content:center}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:#0000;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;border:0;cursor:pointer}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:#0000}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}#leadText_qzwo,.cardTitle_rnsV{font-size:1.2rem}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}.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}#leadText_qzwo{color:var(--ifm-color-primary);margin:12px 0 6px}.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}.cardDescription_PWke{font-size:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}@media only screen and (min-width:768px){article header>h1{font-size:7rem!important}.markdown>h2{font-size:2.5rem!important}.markdown>ol,.markdown>p,.markdown>ul,div[role=tabpanel] ol,div[role=tabpanel] p,div[role=tabpanel] ul{font-size:20px}div[role=tabpanel] .admonition p{font-size:16px}.form--container{padding-bottom:120%}.form--container iframe{height:100%}#leadText_qzwo{font-size:1.5rem}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.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);-webkit-clip-path:inset(0);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}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media only screen and (min-width:997px){.markdown>.admonition-tip{display:none}}@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}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}}@media only screen and (max-width:768px){.form--container{height:600px}.hero_syme{padding-left:20px;padding-right:20px}html[data-theme=dark] .hero_syme{padding-bottom:0}.heroInner_VWeJ{padding:0}.heroProjectTagline_EkV5{font-size:42px;text-align:center}.heroProjectSubTagline_WKiD{font-size:32px}}@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}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{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 screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width);animation:none;-webkit-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}@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/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png b/assets/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png deleted file mode 100644 index 254cdda6d3171d435a0622a0c617b18b98c65bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62068 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 D6mXV5 literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png b/assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png deleted file mode 100644 index b3fa5d9057e63112949f9e0eb77315a4173b0c9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51880 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

    X?v*d2%!7me4IGHE9g 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 J3hpA`{6C*vE9U?J diff --git a/assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png b/assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1edeed4025d04aaacdb546c34f0c242be8d286 GIT binary patch literal 48223 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 nJ|cgvye1|b17kYbli~AVU8OLlkG9 literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png b/assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png deleted file mode 100644 index bd73d9a088a599d561ad8e76e0f6107447796402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108967 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 diff --git a/assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png b/assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png new file mode 100644 index 0000000000000000000000000000000000000000..428709dd0e94ec0f88c09280f0af697cc1944fc3 GIT binary patch literal 106010 zcmd42WmH?y7Bw0u?(Xg`#a)Y(V#VEx6nA%bDDLj=?!}6`yF0-hzHsmT-uwT4y)lxJ zoaE%}wf9+jtu^PG2~&`hM1;eG0{{Ss(o*6-0RV7c(31rQ3iJsU^olCz1=dzd!vO$* zNB?|+0n##X000tzw77_}YsOh7q^pW))5FVptIKUuVU_aWopVv_b?1=7Ge zBdL^~3oHc%g~)DJEDE*6+WP*7fW>(|GIat#8diMa(oNU?*QLwq_SuKVGX{hR3g{8Y zG@vB!4*kD_p$Hh^|9u?%|M}fY!l21uepY>}aUd}nxWa!%p%&dW(yq^~MMXr6B7@-w z1^j3DT-j19h!cFg^vFSCgS32=%dD8-sWATBD1opV_4$GZXmzrY;6MFvqH+)~My(jSx%ZLKe3cy+Lo zvT#Fu=$=>i;yxX`gV@Alh)=nI48nf@7>HuJce4&YTHi$v>lA8l0ZNz)E*XyYa?4`+ zsoxMJv@UpvnVuy>v@oElo)bmojI7tAQj&KMR!FY`&mL_%M*A26)sa^N9`$0eD!0Ds z!sGaE(40B0dy6S-cJNv0C`GA<8{j}yXUYwN%Md-J`#uM9PvEtgUI#}n^5qW%;Ro1v zSJOOVU0h;+HA#amMdWGH*%-?G$M!AQPfz5H1TgTo zfj!OM*&1y~z1rnr>n^H;{X=^gW3jPp(PPMwh@CecB)4c}q)SfI--sMP;(UJxXDM%i zB6k_c{a7$lw+Ziqb`S-=N)bDMyqnY!>k?uIx==s&-2i`V<$=-h59Za<>8;c7@)4>6 zIKwc_N+hL4IIRZ;NZ8MyME{cU?!&-F2>%j?sGE&b(5mcbKyjoKhxqh{bEGI&dck(o z)QCvM`UwID6Pw=pU2C&}RSTn6;KQZ=A1%%D3j5~!nGS`ETCCQ4s*+W6Kgb)-{MD8N z$eas;6R{B#XM_>S>O?N!Xzu&tIE9cl5BC>aF0thxuo7;Iz!lpNs@1bGM{cl^Hj%Kt zSAq=g-N36+=bZ@HcHrV4XyA(?HL!h}ns5K{{3!nMZwdLM{;jV1_=+E9`U5FH147i@ zi4UF~GW@5p@_?jPOYsX$qXg?(k-6aQ$D4vvSFcw>`YngQUNyb@M5@B$&v&hgG<*yA zLC`NbcHKN!jLVVMMt_(57c&3_ii=ajV$B!&ZcblJh{J}0bd{5N;;-O zB#jhBm&K{t%TPN|xeG8yB*Xt7u6(Y}FDm&g%eT|%!{CO+Wmlf1$q=Geg1 zO%o>z|1#n*m}i&kOOw%9UL_17?DmROnU?zJz0cytLsjv1BZq6o%hz}DVZY!Qm@&TB z1e0WSquAPbVZuobGMA`v27hnn)khqWPs!Q41#C6oCRMC}%)Vd-_|(ul`us93;jiwl z1>284C~-V44i$PnHSJ&)lZah}k5&-%ctu3n1Behaf7Z1a86{ET~tX5z|) zhY}cR_0;MWxefC;{K8@s+tBM2=g% zed~FWsvOK}0Uh=7-}zbwNBEW9B1H@1Ip}nT!I!WT1MTQ<4P?=VVDoLhWu*DMu8ed9vdf}s z2W!YJW`2dIXVX@W^pH6d-t*sxf0gU)2YHt`UIctU+~AjTJYibI{k;jU(CLrpRP*62 z)b_9$q*ipQ{+iVSV2k?UC4*ccY@qp!u?dg&FOoXjer%BA=Sa`LFWdyNkq1B|sTnkg265-y^%y)yM>* zoiDp(*!R-e2m1m%Q(&%e7zZ2KRdC*rNY9ixP0VD2zV@o=<3XN8x|?&pHLCjXLcVj1;fb?=$bK@(U6)U@^-g4r=0lRU+bz2g)KnX-b7vskIf+w%#Xt$17)cOY%ulXQkb4we{)bqWoh^M zhxo(JYh5Blf4!*Dx1EyO+cx-u2Yzm?YvPnaDE&GgLO)*ua6rf(xny&PYGWPXszl$P zu715alK!2bQyoA|UMAJ*xlgxo(hYAj)<#;jsj2}^%g2qgKBzrZ(~2alllWZglaZ_h zn)lJjnj}EgZF~XCOSj4bGGi-baS(Esc(#gc)Q;tZ>E0ySuJMpzZgJi$*`^UN*P)@O z9JrU8kFq!laaFXyzjG`5huxLpL}oONVHNkc8kR7JTxD(%_?NEL;KL!eU8{*lD}1$M z`uI2CjJQxo3GVIVT`6N@L*tiZ8;2Lp`54GstpMlU>qPpI*7N==1WHFE~d+JKibiJ%eb$uuX|U&xYWBUhVwQ138xYHK41my=#BOPs|yVtn-4DA z*-D%A0UN2P!@K9WBM$3}W>XH~GM-l9LNU$7&~!$@5}vYZNyS4p7DTh!%IykXmlsdO zZ@|Mip2?WbXc31dvr6C0hlj||y6O)^&dd>*W;sz~;LF>b@T+sUP@6o$V7G~mq z88FK)_<4nDR8Rr%v-j}X{d~&gos*r!Wl^{Pj{PTt55>D#EacP_K_V(wVpJ%=Gcp@} zJSelvo_gs05B!bd;tToJ-LtX}mL6DG;p;X%P5HOq#)S4V=F>)A6j`{Z5vD^=JIVQ8 z33;<=PVG?-1Jx2QTRuaNKno$_<0vpbBi8pR##h4xWZjgbA;uLm{OTX~L$gL+z`;2{ z2TL#Z`ry;fa&6aZN|U_9t9c~yaIz1hsF#70YRwYxtxTlpThN zHvIgMNc1(Saz-Q9VUs@F+-9M>Vb9f*dku_P9==y=me^|AU zY-a-Btcdz$v2J4mZLpDwadtiCU+RUSn;~3f;G=F6HMl^Zn&P;JrJK43-HG@|YNA~9 zr!Hni^I#1QK`S%Sq&)C%G5z1#VOGfQRLnp>&`KQWg9o35iDjSHy1LZ~nPmPL6wJ1~ z-5?4`rhdBeZcN3rRi()y-u91bkG|ols=iz^u>ysO++7%9oxg!<+N}2;Cc7zmNYPIR zTRARBOo6|YEOEN4@!4GUz@&5p;UZ$KnjtmH7s-v5%?l#ad|Pyj7~av8o2v)!WbAyK zEunL$1oCAefWnsU%eD*q8|@|wckvY_0Mu4&K~}mOt*~DCJI#qxD3?}C^``fom?$M z3ODhuOsoW_!PU8c*ZGXpxoPW0KVIBG3Cuw-kq+rU_ME zIn8jw^bNCim>kvg@=vtTm|}&$QVb;-ODV>m-}{dPG&T^F$p+PGoLP9bnUGtBM`X^3 z$jgKw*J%$GZw)tT;hf$`lV?+(ZsUTewM(Q+uvdERez;s}+ZA zGmCXg{_L39REQJ#Pe!ByNN>%rb3A$%np`vq0~Sn7NNYFs2L>#r+e?9LjR%Ld0+Ek4 zsWI6m(7ZP5-OluY)Rpfk@*hOZa&VS>tOdK^U8%a!TM0iS1zh1bGrteE1T^P#v&P9z z7yI9^JeiRd5zF@{TaeYP(I!^<-AquBlT{+TOH&dINs8Jwn_^|*?S)y?4z!@@1QtK* z{!RG;%RuqL&zw>jY`2U_AS4w=MFC)zz^J27g(w_vGV2g5Ja5aWp>#6A(Is{#z-IQi zDowh#1?|DUU36dPlAI*#sxP2&f%vn&y3U$4hbL)__3#cv_U5BR>CPhXoNu#(WRTe#w@&7C-Dc)NtA{S-Td(T1+csm z<&sMHEkesIl(ZND*qL$z9|*wyau8+#A+;u`cQ*-?x`@kuz(O2+N*rI;w4|lHQNO1} zPZ&|H0Ky-3PXsu5zP#GDHkt5lYAV3LjPg@|W#W*a&7N!t!aj>xvDJ!4wt;uWN+C3V z$yfWDJ#9L8HoA}Ni!qWaXtOpRxZZz-47U@3d)p72kiBc9X*&IjJK-$v3gFZ+2w16DV}u`~j_A|xx}v%sHE$eU*xw^_x<;Ug!3&wAWs4Q`fwgzJ z5OLFI!K33CM>XqWqIoB31yIOj(Oq0{l$Dh=EC~AR<|kaNXzu&-w7PCJ_DU}6EMr~y zxWuTH25%~V5W|S0{iYbEkprf(3NoxEkWIg9^QTn=G0R^M;m^ME1SCUM%A9uaFUK4f z+Osrl;Ll=2kareolKf`U{K&)wb2X`u$B*dd3nNih_c)pn6An1Qjsay)5`Lr;iz#(A zzrnWe=fYm6m*3_a5oszb4rA$@64VyCq&KVz9(%*Tvn#7^v=`fm86`7Cz6?W#hO3Y zrp%yPtP}5Cc^ww_O~q`dm}S#8&A6^0&8hv?T>Er3Q8kgqdnZ3MW{}sFiAKLCsVV1l zbR5&rD(-A^+AN2;yaNR{UVt*5g{IMV@h02AX{At^mVrxR0XHOOB%S~e&?1fiP;Ae? zd0+kx#Ct1@CX|KP&>7vZn7DXYMjD_0S-u&A8ou|_=l6G*E&{8Vw7NX1McGfxxRL}S zvtm*zuR?Z1;5RPEtHxune9J;Zqoe*Nq~1)sY|-4}^W%9rNo0%Uv$#IG-V%R>BKG<1 zJK4oL*ex{sH+$m+=koQP`0=H?yD!h!qQ?6MspD%Otj&a3IvPtQW>~e{{h=K3-iTLR zr;iH!UJRPA5odmpHblmvl8oQX?2+7Nv|u(SQl4OXVq}wkmhC8QaR6nb2dT$O-R{<9@V_Vat1cHq zYVIZs&sDk)5{h=x@ehQVOgo7pL*B{=BpRnBPWY5+9qeIfT;SZlcim2g%8%P+$ihde z6!L zTC+|RkabGddN%qJA=Y??@?CZkj|~{HeD~xi%W>~6Df^U0S{}>LeVn|u^?uvk-&ViK z7>O~er_(60>PqlCi^D@$#g75OECzw>@ajbg;8!r|!WJU6zS?3nqi|Ogy{hP*DSza60T3jxogT(n zW!3X4Ny0WeSRL$?Eh^x^<61%W-MHY96{uG`ITrZBop4_9g2Z}-eDFWT{?{!-%#30> zLc?fky6ZiaTgqUM4?(%wm&{c4;P=U2f!W64019lDN*T{OvJ9>EeT+pij&8jBQ{IQsS_L6x~(T-!i5Cp(~+l$RQ<9pU*bH;n=ji|#6Rf=u# zx9#Dw7sqS#Dca2jrTYv}A0B~R#1^C4J@03#KEH=)Gq^8vTjdD%(CI!ShU*DFzM_)k zVD>?BZdZ5Xo$R;73lGO?RX#sp24Yl6iM8;z@lI$)`Sn(qw&V?m))Oesrl|^kH4fb3 z3muo5iZZ{4OY86DCmI%0f}9$~a?2qH_mxFWwWlyWFS)glh6m5&XJr)0#xgqq6)>rb z&4RV>&c$&s1@E2MWN=G6ocH?R5fx6@vkHoo0c#iCfI%C((wfx zXUW+h>O~gVp0XA9AN+Bls2;l-p6{Sax;aJbz!CpLU=3boV$&pID_!XeN~T6{U#zZ8 zDS(3YZRM8b)q2=kd^7SbzgJIjww@g<2*k_? z1DhsL2G85#bMst1j&HKBrUp2I8aRWaJ`E%Z$xowWBpJvPrhZEnP85P#XweD$g~Cn& z6Yq??iT<1N@O=hRSHZw&dXbMx*2kd?l-JEO{aZ~;KiR5dsR@;xvu?hm!0rjSzM+T< z%bU#`v8(+VTTd1)3umy`|*{ZFpcM7L|Vqcr1gL#sG(_QoO>pT|G)z zYa&ApsJ!nrw_r!$`gYZH?{4g{M#TE?18(SjevV_y{0A%2BOP{Xg>80)g7)BtE>>`q z_3LZPSmh1iqE6K7u7t$JEr|5E=(Y0Mi+! zrI?UBu$qYH`?*=Q@;6pZ38nkwphSSRao}I70Y)VGkzI!$4KI*rdrSOMSX)sWyhk2)-?lQ3ax3g{k1UJ926J|QQ zfl0Cr)=nd<_v4eWeAdh5Cgg4qYM1NC4qSw`VP6+Shu}oaX7TxS)5lkG7#sQ9A^B&W zp%R^NB(tLva0MM^PC7Inybi+ZCKeclNvyQvxQG4arm1c&zZ@(9b^1@ zJI1DDr@O#zIFH7jvk2lsThXp5c_%9fzf|>O7+oA=VEN?V5AA+n1^3YM6Z@nRkBM3j z-Ti1fP)q_6A42_JZ-Mr50Q$g-wotPS5XJ4sqDjd??eCm&pmxMazB=f)Ql{1W9cD=f zn|iWN1nvLrf2YzSM}FF`p}Yoh5;X&HS@9h43w99}8-O`@{F}FQ^vM-6J zR2O=n^uEoSvte_P{bTTk+zYs(E_AV~_0z4GBi+Um7M>DK;`V(2|9f4@iM7CXcEq9N zV@+bzJJCFj8I2=daRF9q;Rp%*8r$CvTRM^$0gu#g9BX7%4RuJwW3by++N~P>7b|0V z=D)BPN%BjAAO0l0t&Zt;aBL96YN&vq((XM~jTyNN)wGWc!h89q6N5l{c-aaRhS~z@ zmMX2pW%QvH%C~)|mA8DWKZ#dA^oewF&m+3W;Up|gf=u{yv;pR;ee=rtQyGk|-WkbF zh*}Y&JwI-D&$R2}{`DjT~8QvDe#in3Jb3qgLIWcDwJ4Jz_5=1Ts zxa~&RFGu`~02k_~-Bg2(C2x%@3DhsmgIlQvf}lp1Pz1ROpbV==5Q)`toNp_2+~7jIbMe5Z&6nl+4BF!>gv~=Tx3CAY-MpC(rt__dFC((%w&O$xGsXGSn>f=?t z`y!M2nz1(DO>hR;9ubbMsB@t!D>-LHaiF|?Ss!q<21DHP4TDpoS_WQt-AO*fZgBKV zOwP+0K7+m{*5&=*19j&wkX`N25Lc!rtq*q)0>6In^}}P^ z(43Y_<5FUVL&jD_z{^n?EzUDob|=7kG$U|_&>FJk*F5`yqN2Cf8YcYKqt}Q7TET*| zqOI+uu)g7MbYy&ipV@KqSF4z)u4R`_mh)p*1(|l|-vMQ+J#nuDo@~x+x)}s>eeNy~ zsKK-8KC-oQ>vmk5qkYcZU0n}pAKsn*m%5i-mz#&3(8xYm)69sx(E=fIzpG+?eSD(D z7-$s~M*c+qVs|~$h~>KaQrEIcCrf9Uq1f~9XPZy4p6aXLcGUtpxtrt%CO8O%j(rHB zJ20A=VY%!FtZk(&z6!l5LgoZaj_mwjEkL>ipzQL`G!*V{ZGi)zz+Q_lL!gJC0UD<&K1w*M2LcO(OOHlLJxuQbnzMgf&1@*2PU9HlBJ#Lb2JieTvL_aBM zc=AFD9UsEZI&nRvB(!FG%Kmkx2B`S`)c6Ug|L5%Lo##_-2-f~eviNi+)v;zHG?CQ~ zl&XsQL;|lkU{Z!sUUICC%rRF3#?6sL z+oSoOjY*<~+GB5!Bm;mMey-V(^uaT*m2Rx`yrnovRS6yJuNu&_@Tq7Db7&mOYAJC- z39Sh{RpOX+FrMB8)%Q5}+M|ZpT!}u?6XoV=!6_g^oeqH=7hxA(1iF)WVw+riT}=hF(SU4o9EIdf4M(}3c2IH+wek_@19Q+DN3@6YP0#UNBXKogPt zy|F}^B>tXytNX>n@P3*iusErgx+{>;x;~of>a>hc<+vx8!jGTrb^|N_VJNZ0 z5JPp&;oe5ojyb<>w=<0-T50|30$0nr7!P4|4y~8?JpoGZm*~yTxi-OOg(bMES z4UA;mhKLJ4ao3Ju+R+RGC0`Ns@3^LrN;|NviIa+zy(>@?oJAG-BS=hDE%C5#6lTfb zv4_*4iL$H6TdiFo%W3m*ZN54#X3y_(Fg?kC7fA%Zy&;qB$b;%N*Nzgh$Z#?tV{gbC zj)551lf1%(+k6kfR*!$*rLcO}W_UXU7n0db@;Or5%lJ6iTO(ygI#?%&Xm-|*p@xCqkj>QHDBW~Tr-O^lIA*4X%&SA4ho+3mVcx#H+EEu(sASkapg%K$x_OG$Ux z{{((Y&;-#0X)bKaLw0mk_{vHLVV`9n6QpVW^t9vYjQRh5-Eb`w&=w<44$6HR=HPR- z0f%q7$xX|fMvP)8G4r}y+M!x4YT+A=Qq=YV&VDm^oCG)aY@;FY$wVD{DH3gbS;*)f z$NlG%ffeX8QFuXFt6i?JxQ-vM=(itDd*)oUGeH4UIy*c@E^WC^E+S*+HA)5hH1Q*79gdZ4zSV@a^9!rLqipq*ZRvKte6uOeH328@yfn;AJ^exVuHHS09h_|7 zHsdhnc2PYOJQ%ENUJHo)Tod>oI1NNqRaLSRnV;Lg0ejByAF@M8o0`G?0>dmC9{%O_ zpEbPWCS=f1Ki}s73WnGjaIYrA9eIR_=WEAHc|>< zL<&`Nx{I`bm^LA8@N`|^xm;@1i(ZX1D0HwKK`>BPOL|8BoGsC1@cG=v&|A^?>br*X zFzGL_X(4Dq$hGIs9--|Xa8)L7T;(sG-B!~tE-tSm*scykz#RL|nD1xKFknmKeq5X+ z>@+Zc53L6HzPRiJv8n;D6ZD&WI|cX%Y$o9bR_jHV2v-&YDr46yxE`+%1e;g{Cl*Zt zw+CRoU4H{{J^5#l_>i(hrE}5XNt1*=ix7dF@Whs}?-LW9SUQoXtOG4rN|C@h`%3&< z-3LZ{d?nFP8_|Er5Euf*{-erp!3X)DSIZ<^Hb|V_55Of1ZwfIy67wv zb)udBNF_nxS7^5~qpx&Njqux$YejOhj-+)F=3DOhD815!yvq~c?ab3oJ(0B& zii^M*2;vS_MwrQ{E6Z6c+FiP~DBB^2zf4;}ejptTX}dnV9eUF_PjE)$>UmLJ%cp;= z(Zi>lY)u_UZp7-0v&$WEKlNs2B1Q@#$;oJWQ3sN>O6AGg;%%^1Y}XMV~}$0xSj=ZGW~ zIb#>O9^W%i>LWOXE=0T+wmA6MXZa?pJu~->A2T*2`}QI5Ut79t^joMr6ET-D2KAw8 zt!)8b*ySXwh=|*{m=-Kw20*zv_g&Mhq+CLG!RqlDdb=eb-RdJVzUeQ4Oe#m!e6E(mp;rYqQyTb*a2lTeCPJ+ zuhL`Lpaq~5uwW7)MOi(LFxXPX;GziAQ9d`cCJutGF?8Na0A#?<)FbKVIt z!|w&8%0gJe3*Z@wXL&Ir3-%!%GFAgg>K5QiF%PY8nrQJ|u6rS>n3sGk5L`&zoEn%H zPsxYPxt-f03Lh4Y8XHUfUV2> zX?Lb4k0h*+7nk~j1NxZb7 z54;bhTf+Ly>lcfoq*ts}^frLdwDo7}`-qBmewoZ&<<H;SPuTOn%Eq!-X{J1qpcuqm}BJw|}eqS@%%Y zx&Ot%e>waJuWF8=05_b@T;o>pfYpvl0oC^xCdKgn>qP;8iT%8S)<;Z%ubqh+0E;Hn zF#ha5J~anpekvlVp{X0Dh;Bkguhxpvc!y}!CR_NBd0N z<~4zH53-A!zqpPr$~9K*n%sW@uR}WOT5q5m&6KnTK}_$TvmzBe>S?icPP49T#Ex0i zz-Q!H?Y&^CIqudkx;$r1h0g(d-^lGAX8m-RoN2{8G9#74?G?1~#LRBVL}s9N^}X+dvS z(E_}YSdVJSz?ma~1}-%tn#Jr{+5K437~lE-F_ro?>ac6=FYpxS=47-5LG0Ywd52E- z-<2kba?mFSlEDt@;N^a|KL1!el=I-TfAj93iLCUUbC2G6hpDrlaaTg71@-tLspGH8 zNp;WO-)AF9ZkGwhtMtCZDU!mIbjlBjs|wqTA+MD+O(?~Qv^78irE}mq7`Dt}aqw!{hOF_!3oe6?D`-{J=q#aC@as}AR}w!HY@91yvETTz^79*yCb{!mGTGJaQxnh^_qWLsBzz4Sg3h@~HAaODD_JCs7<7lKl1Z9$WrAxw} z*IN`DD`o@x(K51#wn&9ID62_nbRWr=O;ZO1Z_b|h)kQ1k(XI1XTT1$^yjj|_EK0TN z-ZYp>3$;aF$(^LYf&eXEK|QoVEZGscqB^!i|C_5FDLrR4X2Hz9D!p*GS5Ikf7ZpWR zutywJFd9%!f?;e1lu476)sX$UIdJuH?vz+#I=uhwla3k4HS}UPhOcpC7JHO?2;$MM z+$mzE0C6PO(-eNOB@`t@BpS13gob}12O#KLR?6I;qe!o6w!N zsr3(m#X8`v0<$MKbKv?6UBmk%w41@>ge#UU#;T+=!JNY*sI8sSBIKvj>`_f?Z8U%4 z#?c1z8!|jX9W(gXa{di)(AB2^TlFtxg)gLOOd_hMWy2DXFdRSaK;;ik&(Qw_*k&47 zER-e)8${5>Q{WTMg*d!rSCadRB?xeKW6a6lkOw;csFUYP{X@D{Z(hfRB`b@OG}b3r z`?>@!85H}^%hG~)d_nX(6e&$pv^e@al=89zBYZc`-oIM+J#Z=z&8+cj<}?Z4#{OrB zo+xd5rF3kZ)1|MebNp^z3SXUE7poktKs`{o&N+P&`N6>MW#bG*?p+~whGoyZD5VpT z>30i(3Pg7x8WZ%*nJw|Fl?jWvIsO)brmr5-wSQyg%(e`p=-Xs#uJ$M}wz-ZO^s7B| z`*;}yeSGr&s^Ezt=@MwbcDtdq58J#!I6o7fAigmw5QS1)*^Jj8r!uTxiBqjsDc&qM zDT0(!=ZECw_%t_hUW-|`wtGOO&18(SIqc7AGqjjnyaDhwNxG{inaQFZ+8g?mJn6n1 z<)Gj}33co6KBWb)FUfBVAos z;gmq0@A`=H5DPWAh6!n6_GD{ri@f?eS0@0Q~1 z=~$n77%gvx=h|FhdAq`1&`=7G4f~utI4%`&aqC!^c+$gB`F2_MUeudH-3K>G1 zTQ0GhEJnJH?rDqCg7TdQYT%lTD(AA2ORZR>*L*fF|(&g`K#UBC_E$1oJZ6=9Jc$9K}k%sJ77! z0rneCRAb~cbfGn99YyyCPoa#xjn%0O8@5wAM(uRLkKQLU34%?5YWG)05eR*Hl>ct@ zm@H^m-1Ub`T7VX}>2AP=ht%obThm+5-33|`<4SjkdKHiO|1&g+Uu0gpBSiX=;MLoUA%LtVJ{NMC=lFJ16>kDWoulcg@D-e7E$nH0f*SDDx@c8it6&Sh4}xTlG(i#{P6L{ z@%~myG*$tf*HRFuhy76fUz-V0eHq0uU7KfTuPXg0-(O?oL8A;(U4BxWpi7wkXOz9^ zO<1MwzuE8au%55rj~pDZ;-6&^2y=bfS|WNmH68z`IZ5#CCsdJ)a9*}3pnqnSBj>b& z4|EnUIvGFH(Jo+(f|qf8{T0&yxa1;fW|W5RNd^Haa`YnoQ5?`W%wmke8H<4zEbvaRB&EXKpvZ2ADXU=o{a~vo1V%)yK^> z5=)csOhSz6iAwpEA>>0;g{`wqj2Cs{KJH-%i3O31P6A$2c)t0)+zvQpK%l+=4VLaf zYM#uRp?2T5pi+;5f>y~u&lNgh*NLBq|IV?gV5!A{X?=Q&TAPpE!FAVvG2mtQnm|rx zfniY-+A~4^K4TwVV{}TDp>5!|#pn*RUKXP?8d(1%k}`3r z*@iiq;j8F0?3bRuP*K*LJ(T!!?J3(cX+$-80>rFg$7xQKf;HrM+Lsb@T;Rz9U$$yo zDe_$I0sIV8N7jG85UEOS6o-u8JonE3MR#hbQH2paCjX=~c*p>k)DYYY)u{7MJz;Ee zOFWx!kkkkok1E_6`L7+AbQ4;+XC0X4I+nf>Nx-$75ZQ8Ul4n(@$=N9d=7n4&;rs)W zs_^cqbl9buUvS`Dr(hSVC0+V|7gMXa^jxSdumW*I5NoWwg}8M(pa#UG!0UA5pm+fz zcU6nwZ|m(Y+e?OG%2{k80qKl-rt6A_<^h_fY}{2WJ*v=rzYb{|g--WBK!BAHYh72?;k|8jzE{077a(ePbHE^a;ML1sW*i!$CRv4j?P8Vpf~I; znV`m1W8rd1W>LAs+&*+yHK%>4sfIrnOQT*Db4kcaBG4Rqh>C6SA|ZXGQ02B2#l6Iw z?!Uz-pmCmT;)fFSLk&;Vi|YaDob^Ki9q{WUw%8A+OLh8y zxQEl)nsUdshp5~z8gA2|wuq*ZcKz_1(YqR_8}|YeEc3%8d$e=-{WO}z4DD8D3#^@) zm8_m`4p=S^XfG}iJ>O03Q8me(P30{!gb>ucM03VyV9CyT7OE@ikR)TW`?DZThJ~tH z9#zV{9Tv4-#3t9Vj7_6#^>b10&(=fwX6Uk%-echXrxa1ZN&?)Cq$X+o1J-%DnP$Z@ z>tRorR|FMc)~skt990=0VLjaYtT#xsuMtpWMEJxSuYYnc@+8YFeO<Z*C{vwQC~ z{IDinIx>kUa~R}q8b;xBITO~kgPg2}`?38mPiv5pcbk*5GUdx8;wHHDxYqrpOJ_N= z`j?9&7`sO-{G=ZTHDFGBefcfAyp1^cyic){kw6HLU2sCM^V>U;crwQ zLzA<}og2e^)`2?kR<j5a|B$ zpJ9_QbF@jFzx3t`qeFwdP=&ES3cHJ-CVP~qFnJ+^BjWPxdd$wJzlz-qYDik?-a)Od8#y$ z1jhV9LQznZ+fj8f!Bc9Zf0{$mfT;uGH8uVE@~jPZXJ}y@k9wI1M;<*fxPsd&#VFvy z<#7!!MI8wE-0=1dXehOk&1tnEJ_@RYfBySVb{wG_ z-I|15%|VGrNLpi=yY7SKOj3T(TS+V9eFZ?YiL-Uh^_=P4;*%dUy9uHxG;A#K_#lUn zh$ZcvtK9AP+C|OS+6n;5549a-SjB{ywWfA9dqiwIJr@gY0YnQw6&(D;{V=Pn*?s@E z4M<6;jtqoy)L2zFL^an(ZoTqtQrv?l)Ae?RcWZd$Ba z`^U>i_YCUvo1L1vX4sdPhn@bfN(p>vbo)9)wM#bFKHBjRs^{YShLJU z9ycK+i?nRr0BDzs0h7~r+m}JWv_RA!L(4FB2mFGxWs*X4WZo`zcT3B#lB~fNV3Z)| zGE)ClfMl#zUIJd+Wb_o4BQ02o)-x$7B|g$=Qjd}B?g`gwa46l?O|~(3vEy5 zz7r$2p+-c>P;t>-Ubno*luPR?^0^z{#IXXAU>2pp(0QKmg>9vo4wad*}( z(*t9j_%y9iPbU|(MMI)-HxH`1`vhK8!#NujcUwQk%RQm6qJ~qv*ZByO9`6@WTkKC`z=) zzG*3Qr)}-oqn~YbqCb7x_e9tsvs}JY74q3LTsP?^I#jzAU5BifOuBk13Gx|M6|mG5 z#3cQ5HNq-Y3&hG*mrE4vI@Dn@SbY_g5-O-}u&|_F)apEFkZ&DAtntX@kjvr;Dbs8` z@?31qEXS(&J0xc`i7oKQz&wgu>6DtOY2}WkQKGFD)7jJ5*P-g-{6di4QJc3AFoy|F zxzDjwZ^|6a#PMx;nNL74`xbFKE6*2Ae60edONSUg`Ns~H%E%RH{X(3s&=);L^}Ed= z(C%qOb7o54Lc5Fh4W%Gf^0oq5@0sfQbMvVcb7`^37dD|kh}DeVN@gdp+V5<2jCx2h zo#cB4KBlDgnVJY3Jgox2&K4M^lOm?AgqAfFyW^{&AdDiiU}tzPWcxQkin$@!G!63k zVQ~CA#w~23AMW}FTfc0%|I-qvlS_vvB2xS5%%plt6zM8p zv^GQG&Tj{=1&w2e=K>rj3RdTEM7SQAXA;Z2xgp~x;sv$0KiHJ#Id|qXOwTmUB06@J z&o{A*d71RuL~Iqj>AU+anALL!HExy$;N~YDG!}xsceAq%3FsD!WYU=Hc;s*AQC3x4 z4zSABhJA0vp@p`!p`VIM!LZciBqY`PcOtnkcmEsGTn@tCB_`~fH)rTQEEV&Z`q}j* zj-mQhYy2wjY4m1BOUeVZqF+V-R|`-bM8-1M5BD3Z$@ZlV`~G63IzzP<98O0EKnIIH z(zW(|+^~1ARhk%)=|G6)QZ%o6Lgfik4m>jJW=cn*n6zW%RmUYdLrHa5sFESxZ4K?4 zDQ(fI95&3k_F-kLQy&^+F=Hc_`#AwM!yliOx_|C%dCFQ$gX>VoA$PS7c0$~`wqlt@ z!33Ev6V5Sae^9n2bwTC*iQV23?3tcnfIqrKhW?dN{~J1{|KUYKgq@B>DC7NUY?jXO z(Aqp-=n<7WM9{at-p3SyRVXMm))mqGtF4N{Y4urutaKBvtbxkX+D0i+M0)ERq? z{^F$*C9fniTa|vT%xI3PXMe+1rR-T=2CQWr(;!;0s9NtdT6;OoolzS^Tl-ert*Vx+ z6Amm9JmW(K0~5ng4kg(ofo~2|O-GA9LiAz`1QrO|b*dF$RU;)WrieWFSda-*HEy%+ z1&7Y-eRXZBIa;O5HG1_hYKsrz0p&a{8)lbGn;})Cht^RkneIz0J`h#Ufo0H}`&C@I zL~H|+L_+(a>+lQ;u6@2AF)rfUF3hAbTw2y5Zf3Qx_ZNJjGvS(o2XY2)^V;2&GODCo z^a2#AtDKk5g#{=^GX3`~;%AG`p|fmV&;iDp|_ z`DNJVUi|Mg2Xh{gbdFQC8w;1v6tqy!khMteHZ>%o=&8t&n?4vC@%1D|J*X zcU4YSTsJP|uq6u5SfcSF^^3Ja&~^*N9k4+1VM~1QsR0fzHUq9&qt3+&$%if2B1pgL zOV3&2>z)Q!JH>?OPCa7DuTwC%iIE{@3^xX@ShL_vI%J8YLl(R}whG>LgQ(;hayDEp zX7j=kxau8z$3@shM1kV&)nt6SUcpwb<=9J8%dvBa0rj&=pOHql-Y7k5gyTz%v3vLK zCN<=`f)Lad`|-(H*tlvwu5IkaNfcDev9nxn_5U~}h|u?gzr7wdEuXRvD?@hw~Z{CPy8V9M}o`P61S&+hm0jFkurV?;`B@qXJGzAOPbE}I75qj3pIL; ztbF`eu_neDnj>lGXcRg+BV*ONrXtYjj)=_Nu?Lx}*CWortf?hZcR%j75E@w^dE_{x z&tHU$1xt{za4By~JudBjX!lKL{d>*doE6Z}91a$J5tpV34eFqu58=tuVFjR?@p;83 z6!wcpBl>&lt!s#(eT?w=HzXEKS%{jO7-IHFMF1|JV1oWuMi^jYgpJcpQSWNqyrsb124!cA zaBPVowr}5#{Nk<=46GhsT23h(?AGJL%3i2FZ=%$4>_kGK$@M;`X&vZhi6Dm_*sypC z{6k}!oR7{;Bj_8(@xmo+U(gpB2ivBPZ+jUWZsJ7WQ#Qys(hIv6SmE&Tv(Oj=J7ma* z`Xl||uKnEUdjWdDIRx^z1XM~}>jd+fMHb$5?#st|XEb&i` z03_=kEgST`1^QVVv2Y{-XkcIna}y)B7ET{-j8DHbK-LK>SeqHKkc{4EfxmsE52rQe zaNA&p_x@vm;O{NCUvP6mwwf#j?pEC5YTcqK2#r!>K{~Fb;GxR9_=aKq{E^&Vi>#ql z&TZS*wLJ{_43wQG>u+!5A2-0R1(X?1HRP1@)7h@K649X?6NNh1+ik$vW%{VUV8%%k zW#^iPb#%s|b_pU&r~8_o*tB*j5;WyvI+FEQ-OsYRI@ph#hy)Tq_p$!P>KUWt@-;Nn z)F5^I6c%flYd7*7d3z7yR-ZvA_PB!7iPKn+mCWfZ}d^@>W+$tn=DXczUaXs zvZ1<~*CTP4wZR@`egP=G>Z#q|f)l6tIHEuK8kx&hqxhl+AFnEQ?>=7?n;6~G2zKM9 zprls$GUzCu3!(kcVFaM^#iz_27L@|K6|>>LS)W}dT;AnALO_k(qnJH?eM4B78ezp` zQ~c)(LyqUeH5)7#Yr>+uqVsH=nTsjj?osA^^z( zczU@RGLBpEax_Tv4e4#f+a=55%1Nd`pbd^JH^)bx8z6SS1#HcYuxx?}oY$G-!_V|F ztd9{U3^InLnGstl>A0G+Y$=H;N)0*6a^ADZ21k#dzN>~@W2ega+_Uchjx94q$r)ob zx<6XsrzQfmcOgg#O^q%VxV&B;4(pd9J}I-)T<^P&gT(&k#iJ3kyBEhpw)gTbZC5VF z21)z$v2D>{E*GP19oPXZKI%SthlFFlzBz6;m;6Bj$Iu+NZ2F_2yaEL$&mj7X9xMRk z^vzI{nudyyFr-eI$@68d*?{QJzC~?zE{mI#dHyXOG%4;(>lb~Z{pF0*wq zd$SU^S9tb3Z-;)g(>`Y`U(K)Qe7_rYxp^o!dHRR(iFa86sV?Ad6Kg~zCiA+T;X6Qh zymSZws0{+Is>AV9XR&*cHL?!t^Oxhp+!PeosWr~7GGmJ!C2;JRV~VN6jM(y*bIKBa z+sHL+2pe-FOd3q0&>Hhb8{_>?43K!(5~KPXvFn)T8#BNdi^nShkYWJOuQtQ1ktS@t zBjMQJ#)#*k3_o%+)4CKRNZTa=NY+9tGb1b-Z-T(>7Wm_b`nYCqj`X9Ja9wAHoRdl- zO2xy70#_SudF8pWC+t_xM^wUX-I{3kr|J<`vTrxLK*?NG^Vg(R`F*psF3* z@E>M>NEDC-j6Tbh=(J-|KR7zOYh8mKK@>EHy6^cV71*_N2Tm+ALD?BY?vSHi?;l&f zsUr>kk#|msN2V}`s`I8ew?ZG=HgDiAH+;_O+jpx-+CSp#i8HwPr5;k7tNTapUjuU_ z_8ZL0=k4CdF4kLCec3Haf~z9(CQ>HNpqmcT7cE1~mwKp4N=C8EMRwuV=H?-LgFT`@ z{RRn^eOQQ*KqGEXorRnK_z#NRFQK8VjKyP3S~`oc=>L4F2sf%r*mn>MLl&4He~Fru zRJH;}zV|QW?b(mI!a}5snZ%-ywq11284VQ`C<_Q;VHi*C?7lTXk&_D=s;W_P%@d`b zUc9Z+YhJuxWxfHZNlr!7N1r3H{}8rZ<{dbUsDFOK;*==8?#=VuFR6uu^lft+T=-HC z9`08<{QrO9$rVfF=I;|Sqv#r{15;AV|M zwnl7~q>SN#)<&E}LUDo*6X&Gd5XnVoi}ZtfaG2Kzju$*QQ9>y!+t4bp{Um-((k9jG zT~S?+qbJU=P|rI~V&9g_;xt^e;_KJwZhg;l)SNh|xR2$JYC5WQ9Upex`_1`dZv49Y z(qyjlR@!54xM`pvUwxYvWt{+*h*{Qld3&OB`nm>Xh=jn)-9ZX;LYCx z?v|VsL0S3~mO-(9>L6>rZkeW*T(gJyu6V51T2p=CUeyZtd&*t8_SDUW!XBb`_Q1vk zBjM>EuAadk{hiwu|L2vjA0>u!|FSg*`MTHrvwt-S5>>a7P#GD;*|*W3e1!yyJ{+r8 z;&BDH`VZxOOq;ieU8QwJ#V9&|f#U<~3yY9#=YW{czEuR^H~K8(h}6k5aPtF208(5Y z&0U+3iJ}Xx?2@HYEhGSwhL1*LT`jWK+adbnuTY(ogc3IoME&bCb|2Rj6ter7+_|M* zKAfnMHh&RPr_O5P0xr4e!7k^>e|&_9KfK4*L?YX63%h-*lT&c>!_U}4$pUcyVMKlO z1q#nO^K#|Ep^EF5VhitM0ZcNpLEzW=IJ9B2a?V8n3Y|p&DmA|-!xgyTb`9GW4MOrh z#p>76An+=UP`Yk!j`#x>{H4pWbk0`r+h&2t-4^_X8?oCG*X+zubVe!ET;gbntM(SS zYG=;dqximr1C|KiX@Q%2EjXk2ik&%I^k_Tu*mJY8Y`}I4MD4MF|27N6?ziOE-8Pt` z*iqT8?^X+h@3LUwN%a6PtTTt}dUJMD)3#e0 zr}rx>E1O(bdR|*w%h!}%Q(biGV|BR)U(2TJH@A%X*@;cgz~*&JaCL*elJR-LMq9J- zs=Yb3%r=F`Msq&@lrW=a%_?=(lxwS62-U~@`uQKePV3vvFva?*CQV8K@tit8Fx1D2 z74D8TN_|~@T&1&&`ntMJwcevvxa;f-?Hgs0Z<}q(@uzjJP3Nc2XV^{)Y@eeXJCzu! zzMxnGZ|=~8!(yr-7p%FMcWUN6h`PEu?RD1{Qm?Aw*VXH$io=J!?&`9->)vY_bsx#H zPhy{HIp$O0b~jt@)m`jp36D)?`~!>PY)`K=!?C4ih}&n$B9N~C-RD@f5OOyEIn|YV z?`xnt?s=_sJ}121-PhW=mDgHR_G#||Q*4-Ssx2`^ud6>+Z|H5&MR@PVk@6l&L_c}l5+BbKt)xV{6b=W(37F+V} zTT_q36It!nD{k1T_*?9HB{wa(cT*=#V+&h-NeRD3);FTa#f`-mSpdl`n>b_?izm+X z9W;VPV#SR}u~Vpwj7DR9 zJ(5RHM3$Wc?|1&OlPn^Ml(CbMwcef|XRKI@+MFB|yLlk?K8YYSsFO-i|H19uBS<#8hy zxpsEDifxMqAZZ_EeA@6$kIoOd+bKr#n;r%j(a#9q^fcgD%eeg(ESTwfsOOWe0f{N~ znv%s#eOw{YP?BqSv8`<**?V(r?s)^!HM?tN{? zO7@E?5U^z>x54YokhC0$xRIXb!vqt)9izmzPD;+d^)#xWQmK%>S*phGCNcLkX-s8% z)3~=;UQ@vqYkX#y*|zdE-IZy6Da5`r4J=;24x;EL?*^;fvj{Ldh z+>jqgBwN2A@3dZtlP}REYFXgME%J#sLRMk`R~i6 zYGaGM3>AqqUc8LTRX$uDTpPb1j{}3*^H{NbHJ)YW;QqLu`Yi&HNpqpA7GcwV!IOr@ zce0zn$B7|G0HqW7#F@+3wrn!;cR5Qp^7MC00;liF9)aGU_tzrM>g};Sne*Rmyg#ys zK<*qOKiylmW%+K8{3RQYL~n0_t>@}p7TQJ^6-p#)uy2(DyTiiptp0^}PxiLS3rz%s zYuB#9$;k<4&YXc#sYFUj3K|+3;N#rqPFk1;Yiq6+Qb zr)Y3~r-9E8@~9Fq^fIckXo{9|F=>)L7i{1PZZD%0axbRObIn|J?QT$G*>o*D3@VoW zktbQ%YaF>k$ApUtdUCcC=`bVUcOAAb&~gC}NdskXrGgzZO5#jdJXOQLGkL5UCj$*k z09OC3#rB0dmir;%LIp&0T$gtlIrLBDbL)I97EjZn_Mi!ir)fA%feMGbOltNj6KPmE zOT&7SIAuoIavfKbv$r_I;*BD?m|S;U3~kTSH49l;S$%F>w&n3tXArVG8in_Z(bm@fa!Nu z-zb-sQZ&eB>*r|Md$wwpB-=#i3F&Q49jC^XP$QE<7Fy46XEArOH7#^*(6;D1WE+x& zB3m5Vq-TOw8E@hg5VAEX1LV=Uk>ieybG6toSIdNs>^6108cz>O-aL|lnmks6Z40zm zI9bcK^O>#11Wz^F)x)Sp`W8LgkbaMHj42Hz!AH+|!=yzjlU(V3L1W>`mEpUV8L=<% zAX?jLZ2P_*`?LMNefyx*YH{k+DU2RH8u#wq!-EG8uypBCgolT-N3g1@3hUOb!>_;o zio=Hw^Y`TMA31sw{yRcZP*{ZacIh+QdEm~2QtWoqqeAzZ?jJS_RodPed z%nW`0y0OxkQLNM>)@vdjR6ZJ{`B&g$!jK|>^3%(Kq(dz4LV9;x@i_>jh@Qf2C-{Mo zC?*1Fz1q9ICe-|@&*U(YZTq(#zh@zbgQ0QOBzp>S-ErQ}3ES2zz>}x-{XQkib|Vka zfBn~g;rHKv=lA3xm@r`iOePcN%$b8rmoDLxPd;H!VRUr#OX0)bwxo09$EmaNpMM?( zjcGgx${Py~~LwUMilEi86U*h`1}1Dy*ET<>DM_t#>cV zh_by>J3X3^$2hB)IGqSEa2~9uEp0QRjlFYMgC*Vn*0le9mSQ|diKgJC0-Jn{eNspjKu zkaNP0n0cGdE-IEG>fKA4_dVAG&k~dfSfs~^(--=+cW*nbTD1y)`qQ7VZJU%g<>~3k zWRD&Me0_cSVc;)+`3rXK+J*i5_rLNS+Mkq)|M$P2;~OUpCeNIQ;Lu21zj@nA8ag_= z5g8te1FN0Tk*1f(zKv&JCV+ITqnwpI&SV23MuER+QI}+5`6MdVqOh=Dr^f6bH0+6U zb5mi;SQQgI%C{}rW8~tiF)k`5(xFRr{2)P6Ok_72S4zeB+m{MNdg~D3t>e63s_G|_ z_m_Vv5Whx`DPuL<^@nu&NWYWpMWOillQbCijRF<%CMJ)h1xmz?@{0fW3k4po8kzW!S2u2r4zngm+o$uHZJlSvvt)P9AEt9wzK`?}i07W+ z9zd26S?k9jIB>f}0^iURL>^$e=0ih6`Mud}<_Em5zWRzE_Q*T@>8GC}EG!HM4jkxV z>xBKu_>WIM$M7*4O#gWSLPDc(>B@DqwYBlz@0OGy+(m~a>q%iDU9W7tD%`BlH&-*5EZzy8A7@;b8Ev+a8H+ID~BVvoMI|0-`O2|{a3h*p_! z{cd3oy9fx_6#|K!Zkw#==qU}u`tLAZ$bI1D9iKNze zzKg%Z2H!A5$L_=K$d_$HHVX;~$HPaDap}@U3?Dum6%`ezt*wQtt1EkciRed0MzR-> z9uB5VnS!98ARJ1|!mi!Xi0EbO=sodRynHRb9I3$Y(JFlQl@tCpY&5~W%ri>v|{>7duD*+WO)qp>FP zO_lm78}&R!MX@ISjELUsAJoHs9+v}BqF!$+xD9G*OM6m}->BiZ8H z(d24af{@b^2$D~P<*dv^icZ^AWOk5%sE?$YR zMk?_2C^i1^r4#=C#VCCFtpXn7CLv&FC}IwzAWmUGnm*C{s8*_4z$1TK#1mBE<^xHS|`d?hl@A!-)a68_&71-2;l9)a_n4c z1~T<%%OK&`!SVhrpP|L(UrFd$$^&b$$?3Dbu@d>9Vt|}&2KLg>WK5GXg>mS66waeu zGzvFTC~2&_ioHG*E~0#%b2|-E{#U9L%ApV+7klKHkso1X&kcDBh*Zd7Lb~A}T(9Se zowiB8P1|@^&nJhaDO8l_h2m%xex5lUTJw)^R+-?Y^@OX&!?Ji{jKYXAl18Yl#js(+ zke@HzP!=s(gt>F)a>99fdOEINy~>jTg@;Cu8U>#XTQJJi&})0r;-dC|Lgxi%l{>y3 zrNXdpT=BOrM&Tb{j)9xT19Rpt!Tyvi_-|c{`w`B-;qP7&`lSZ|^4w6^%+*bWnu8`D z%hn8cCIlPiyVd{zAOJ~3K~&T|<%&cEOVQl2^HCcJSwyv zd3KJ_`X@-(Tg72wD*?=L=Olab&Yaz0V7r|TGT?cV3G*kZG51G_h{mpx2p#DcR=ZU|x zw3O{WdGcf?_(b|C?3bIH3x9uq_6Cj_GX|5V&%r3SzU{8md0~VTdA*cO3jX@VNDLpN z#`qs+VrOV1BIA+}zeWulaYs`hV&1kP;Nhbb2wS0J^3-|41KlS**b7W!J?vX0ZbnF< zbjlH=?+}T;9U+m!zkI1cw6~sZMdXaGFSA~S;{j4wor*}v))eyn3!OiH2HcG_;#81< zEAgpcIGq<{3sMFkVt6~!2%}Dg*>nz^^}wkhNyweZKAjijZ68;Jw0L`o08*Hk9tvrnMvPYCdYF__@MOOUajPXU`u;@Wtq-wOA$-^ar~Flz zG;KDN`mu1;m|wDs?c%2KgtO8eS-D4W`SK-v{q@&YZ$5ea$@WC_&z(ERwxe3VV~&ut%XEmp;al1s_x`1@FSUm2@w<{o?kI%ELcGo@o8KhD*^d`;EY@H;h7cg)uaFDe=iLB~K`&aYpuLkoPEl zt)9utU%#Y@!@%U?|Ar~BWu6wB=V{p!a5+?(^xxJ4O2rV7gb5Y2~U$q>bqueb@;-@ewwd14wEDG&W4i-)PL=Z{bo5F)c5{c}~AzJ_vz!MTrTq3M6A#=aiEYg{T_vGiDc4#kmrWTJ=v5($@BoCQ7hS_S9?(M zRMGwrkuhkMaB)+ySBpr*6p|`BVMdg<4xfCX;3{$=y;M;?d7OsN&)x)3mb4*aQ@u}# zz$NZDaq4`(_U>&b%KIXZ4|)IO_eA!H2$YwXvuAMArcGGAdNt>W_O)I4+TWL$jQ{%c zKQY?XfElxY;~dc2ckZI2L%Ltkx8nE3A#t@ET2gfA>ebFq&dZ}B5F$%7o;3cy{;0vU z@fz&+(ergeb|X?v4^6aQ+9m^!C*@tntdu-(sg$>O%#56Edi;5qf*%-c&n!h(K4g#VCkZEt6p)AcPoI+~QOhkM zY5%BrDd>0U9HVo|Y*1k&KLi;0oFH;Y1d}vM|NAqA^c@?%ROuz7k>c% z{eQ#wA@Jw9i?BOl53XLn#p(fsI|B^?6H!tdS(up$JV?@|Xu@R9k)z7q%5|H#K;zLC zUp)2?LfLPNxfp{AIm#9;mb!6RDt{kt+KSS-3s_sQz*&t4lV|ewNQ9XrSy;1A`y%X0 z1oOV<_jtT5fV+NBp$QW#Ik(T!KUfa=()!f3g93&8C@sL{IuVdD^+jO_9zF4eluaMo+kk!8YD7Jq=kOBF2%$Ikt!9_HtRVwT|hE1 z{zmpxoC`Mcq<@%_|8vc6%2!O(Z zIfsv-?)meVz9*kUHFb>$3k}A>bsDs$zQ_xca{)Un6Ezh;ESjca;!Scqa!8&gTJplu z1WtKjM4ajK>O>Py*uPKJAZb0xr?{g#Q+fzk^|OYC}0m915i%|bxP8{;!u!y#o_ zpC;nuje1_lHWZ2`PZJSJ+D9TLbY9UuQlDsApU#``6*>+nljo84ksc)YSeEJ7>qMlL za_ycanOOFNLYL&3x)N$Y;37$HlFm!oht2bJ9EOw&0@&VGvhR*F{tE7rbGxwAMl860 zo4@K|;B}X2e>OjJ_5z|}_pwL0!$vklUWep3=oj*ipT*8qlTaMhQ{IWS8PnbI^q`5u z<0O?r#G0;0>cEq}SW3djwOQeu6d1EPTOW|I>g<9_5L)Q>J{LxsJ?v=`grb$+CYA4qIN z{hU8c)&4o2coe5Xi1%0|r)HtO^VN19tm~c6D~qj~!?_FG){SIWN~ZmS%C#GKTWuAUXelT}dsQ`RV&d>{vy`ve zT2jgcj=XnI52o;E)IT_X_-O9yOVTl|MGsh7rn{{TRl#ABhmgE_MAS^*q3P;1v_G!m z7Hy>S*L3X$?iszLHgT?67K@fUhLAi9Rq(c!mi5dpw0QPN?uLpuYGU_sR}(4-sa(4e zk2Y_Yh?_#kmA|yj0)UI+2MefLwX-dSW1aF#%O*%E^Ptx{iy+)G;X|auVR&iK{ zLQGT?KobRd0x8j)CL{{ok;jj`eH7{=FU60ZDh>xxD321?$%833-I;!xvZ zGdf7Nf^q`$+`07}g$OBx**n4iO=Vzigt)?Y)z3I{>9#zo1MV8oTcSm-9JHP2Z72M} zkb#lkA31pe{wsdM{cwr+(?loRlI1t35;RXbMpA^#5T4;2hpC4O=wX&9CR%5q1@5-ocs z={zEvQ*N6qNz{A$@;=MCqqez!RYrT+|?6hc9H9dI~|)_*i9^Xsj*cL}SNNDmLrUwSUCV$f1AEr%N)ulsnm% zttF|Rmt}s~))x6F`8<@Rg>2=V=zCqXPPRLuR_a*3hP=>jZc6t4(|!@Lvr0k9wodPP z-oCW2O!jH}CY_YKR({X2nGm|Ik_)!(GgGpjnQ!~n!c(bRi z;@)(5Oyy^e_{5k-1W5-^SDF0jZm?GyDUewLcaUPS6DLi|PTLMT){!6B5`FmfCkitb2#v_jrNpr|Idj1Y; zg-Jrt6rLsWNV!<#MIgBlCl@8la>z;J0q? zJ{l|`Xj@_6(#j_Y^4);kEpF({&~unemenD`L&RN{+_83qu*m$#i*1;%ul0L>-j}CU z{=JukrBixtLq6B!eWS(J!({tA^qOo-V&i+)=-DfsxK{FL$s*RaMM}MkVyxoEEN(67 z$z9*+0>72haq9eaX)L>>v3^qwmfd@c1NUohzJGM1t)m}|a4*8NF&wXMmv+?TE8*UvjT z5I*;}R|`QC5p&hB$BfWYa1S*xd+=b=4A#XXPag>>Q@`AjnR8I~+fwcuToo9M*0OSL z755}677wQV%p%b(g+<(Zm$dr`)ccq7?7~+ zH1#Jg^c*jF42vJISFx?UlD(GH(yqOxmOGyi(d>No3>`I3Q5_P7j@nw@C+oiUu@qW_ zp#6mqw1A@#K!WWPCv~;h>Awvb8u+hN)rg>ip~8|&EeWE*|U^whNnT2=C~AU#D9LK z;G}cXq9gClnVkmC1EgHAn3Xy_Jz&CNUjrwxQ$8S(S_(5$z7mC^xBz5;q2Cv+;Jol4 zO36ey^YCdKub+JhgOZ3Wp{)Z*O3lG8@9*$1P6gz8aY4&qNaPHKMe_QZIURt!zm!8Z zP>CWs@9F$+O*Pv;@SBLeGht05oktH`3s%5)%^aM+dRHF6R|l%;=_-eR zNuZg$bJTmcbm09Dp^4sHg(I>zCsARwp2vDzV?aC}^lGwgTaA6ynb_<9@g^f|gH2 z?$NWB5tBMF*t@+OTiOx3XCES#>rt1el)Qn1Q4Rl^hsB|0YuoQp`?uy44H8znVb`u; z)IRUozHO*N^6&yliOIDfKA+aT=2zB3U>8{3(0us84Qf`~g&~^Z`1% zP`-2}d*4cC%;sD>@&L9ye1xJYGtv5>l)ZE1E7qXl)EVw1Lf$sIE^78B;LZpq?h{LS|MMwo;^NWO+`?hu zj_PVI6uCX@8`Q+cal1OoPwa~TQa)w5!2_wI+>n!d)Gp2kfuRSxAb`?#yRA<+x9^q0 zZ^Kf~f$7dNN_j)CAWTI1sL+Bmx#<1%-9{!{^dwG6JKdSB$jji=tfWL zQgOiRdI8&Z0;t}nz;16d5)uzuD*y-D2X-jK*8AJo+K%YhJ%}amX(9>wl73wO#NQDY zNer6Ez5%(LT@ko-4T{Ph^Z2|fv~Ew33q%NKF5Q6d${Dy7LTMjTrxQmZ{%@Ag>w)43 zR|KsfvVY3bC+Y3;Z{H{6eLQ*TDx%%=ELn259|BnP{Ur9B5gDRfx%xBb_uPRB z{gLCi{n>CX9_ego?AHTG<5;ROB3xs}?fb>NkB)E;5O}|^8v-ap-hNYSC-&@1MED8= zY7)p(@ak}poODgExnHOy48vm16dLMv^ObZ0rI4`g-+4Q|`U&&rS(eW&Aty@aZn6C> z%j6~H|4EO1_C}F%Q2n1a);ZTUESeg zNyvAcknpP(xx>e!y$XbSdmu461Fe>>TQtEq8e|e!UDt%*;GIZVt40eKfelVqprO9l z%DZH4bVK0w4JfvH_U$LFL*CEEjt&G&pN)I6HeWv>U?NskfgyO7mVsw!SsV_gYT5_0 z=5kR+(YPO_p1TxER_IVVX90Weh{zF9eB>L*MH7!UZ(}bW7k()9973i(zR$CB@o@cS z6ex8sBvmDNMlvVZYgiFS4R-?qTbhg;I^|0ezWG`xupf4y_^>ULkD(80Hxocgk$M< zF5M`A@7j5|9Axnn^dlD|7ZK3w9>oCt^xw5jGVjqZ*e2=wrS03SV_T)!Gm-n{f&_Va zT`yqPDa`i7^8*?VF-JzlpuVwnP?ErhGHm5yDEt)`x(f+wG-yuNzN8`NNDG}uZ5A!Z zv;Jb zTK+wiLF)ZW-(|sP^^3elS+v?!!$gxSddY)HJ%VX{60K$#8Fwy}k)>bwcxYeyXa`qd z3IC>zbVK64o~`)=1RS0K_6`x&)-_{S$WH8EqvBi{%9-iiQNo@VCOAX{a?QvOrHapK zIC1WZJQ8-F@ApQNiDd%JK6(m%%O|2Z(v`hqlqBycL{RP%OW(2ZSO{MS~hkrGvjd_c>~Gbl0Kt7FEZJ$OH{FEKRR|V8e1GFtYAtoxnIeZ;m5YQad@1<U(H z@wzPUB8hN20^~f^D|hZ;r`jDA6jl{v@2ve_61r9|3Wym+rf(MVVZQW8F+u{Ud86*w4AxsLmNQ8CXJW;bxfzV~{ zh(DMLOEkzr2n1fXxAcEQO9x`&;t{q~i>Lb~4Y{EnB9tpWk)=n@CTI9<@j-D#ZIAO< zpwFwE|2=a#A6r+D)cCN=UIU?k9xum)VK4X94LX9Fr zAG&~I={NLCLfSXSD6xL>EYvnjkpXd!5O^0jECGBWEZc#-@dpsL+=SYMp{pTB9)VU% zIOvS86a0J@;%32vk2?43ZM?q(>XNX1^&DK;K?Ne_AxR2swHzPEDG51-41JXCRA;@ntN*}%;`;LB%%l0~T z+(6(-T?;~X1|ea!60L`HoC_-V zT^%~PUnX1#biuaO^Ks?Yea8*|y{96utRtu4zia}EEpjnKB^Okde@jxuZA8{al8Z5L zc>P1$yDdW^`=@4q|m5%>Gk2mFW^8jm7_ zC(2X?>=>y)tVQ!rW09zi;8Cc@i z7Y_>|DsbRMK1K?KQ;Rn`{t|@_so%I@-K1H#eD|L9+z}8MOng)XP=>sZEgjuBlz9Xp z-s4doL!{u3)sU0qT_m;t+${*^2_5d(kE3CJ9+#EmgZl&FoU)O(=ZLW&+Z*ivGU zj*E_uj`M-ai0fliNFA-f_V0c`d|U!*n}iOiz#oT?k^uIeB=QT(5V&atj&5~DSB69i z278j=+^=j8RL83j?(Knt$*E{+>$0mcvv#h;@u5JQgXD zdyt!!g~LaVSrW74_XOKE`yj}ROHQf`) zcE`B@7i{-gh+A^SrvtV2vPa0R18I8AJ5H71lW;HGjf--q3(MOOf2)>bo);ePRUvq} zCz1|j*pPi;@3*nj$L{eGUO$2N1wjC9Am`vcscS%ZSQz5h=+Ka45tcpl7Ha=F?zp+j z4LjCM$MG|ldD}wNd1#796DbHr~Om5mnvh9gTSqs0>~^j2#G^Qy zE^^ry*DI1Uvk;AZ>#J9cemr zWcBSSu;zZ{n(-jg6+z3#A|vPMizIO21+oj`PjWHIsX5r?Jr)o5NUh}hBLs9FP=}G$ zR4opyaYIOuFCIUsvu;m3)7!^2e&g-~1Z-S_Q@$=hHWh*O{h&wZ0d)`}&;IpbXZWt1 ziSw5&@-D)QBOoAPXAlJNwKJEa@xF6k654e#UU`~LQC zxX;Gy?Ci`rXWzQi9_)3(_tp$%bF3vgBw3`Ic_SWN1ywLhdaE_D5)(n|l$SS!M)K%(K9MlN$Hs;epI6esNtUx!6fo`A(z{37Y zUGC162_mu`aX<9R|D2rED|k(96t=NRd!{JUeEUG{4V?(%5T9_an7RW3(@>g*L2_O* zZr7HYJJy53A%T#v&vTCvJ5}@Vli21jp)XnAoxv_bzS@&R?iU0OQrgY%?e!mXU+H0A z(v(HOvkh819y=>|=;*cD2v9sCBgzjbljkxr0)Zn7TRZ)zI2Td`iQTHPIazo+y9>UR z{aqt>uEe_m7dQ4WjxVvua7cwHJb1-Y58n}&1K0>A&&9@PRZXfs)Kp1(S+Rku*tbtu zP#nTe>jH8}JD?W#{4c7$7h4iGhQ;<3qX>28b*+}jUU<9YYD#%X?p{WA5km1wLJ=P@px zZ#7CoPQHx*%p>#6ECr$;iGplI44A*Mc?>5o7=eeFH&V7!HGB;#I z$WP~XIw3@L3zq$*!WnT9k={gdgl+x6NC=8+5u|KQ+TYwVT|!}p)7Rvu?ihOd`s_QU znLG(8t0B|~JfuGvA!xqxINyBep#vdf(gR9;4 zJW2wzYu2JWsfMd^O?K|wKa6;MKtcJ{ABOz+x;GqO=X1ySTM#r9fVI>T7#K(;ir&i& zq4;oqe!e)md-fQ!3?#^?U_R0!4nwXyO=Ny9t4^!%m6w-y{`*IeoG0WLJuUS7VZK!P@LmGq&vc$8O@!ygdR>yZDBKy* z&0UAh0^>vuKc4X0168$QNBCv;Gb#XG4@pnQTdX#WdHj30mu~F8;~qBoZ^a3K74O?e z2XLeT&n*FFtdJNG+}zy6{2m`TIXRa*y+13X(kW$cyZ_oZ=}EAcHX>_S`Cw^jnJwUr ziGhKkQ)>cgV{5yzXf_;oQ1bKVw2lktyj7;xhm44>YWClAlKr+DpZ1G_& zXCxoMVFGWT`uHk~0K?q`78ZhhYk#1>zt(D&5{x=i%;vl+LF?P|_QbRZ1i4rdVg)AC z7@`Rx&!KkQlpgA(N|JVVA1$V`qY@I(!BD>j2ie%E6VCkr0Cf{RQr)|4_L;(xx2x;t zx3~Kqv*p?^^z`(BdR0>9=G0vFt1v~gk~u7J#C2q^#GR~ z($gdC|9sBv|2lvsylwn;VC-~vqDc$!_s`@WG5Za~*bW7|=&~@Ro2RF=pPyjF+uQ5b zJBg5xkiiErG>Cl^Qf>$0YJ;}^Q)H;44D_YCf95F$m}drrQVw5OV_&|)mt2MsL{W*6 zYv!J@nmr6gjJiW#8FX5$XnJs!{2(DArGv=>FWGq4ndt{NLqis)$f4p8*Ah$sa5IZx z+vc7tWF{-wSiEjp#b4-R@Sxp$wH1>me zSf>G}wHs`=mlsmtn)&|M!1B5IGtbk+JfF*|73g11Wjz*U%q@ zeMi2Yu%h<7@Yr(=y>mbZyqZ#LJYBMR?tGf~{><n`Ge(ef zL=!@&SnnMQN?Noi#fOjo`(w6S;4}O_5amd%B~7VYF_h?l)%|OrK=MGxponNOaFZ@iXjWcrYq}&jOkW{l9HN9(W%^x~*@?+>L(`jA7RJus`ouYj@C2dirlH|JnylV5^5G zAPfFs(TVQyV@IOO=6JZxD{|g{kR9KGg~Uexui>u(<3ypr>I{Wucvw56x}L^xaGLii zd>X}iGYAd%w+{c7f)AJ+@e!DsvQ`)>L$`;XX{qh|l1ihej{nV0V6RFTFj9ofZFe^} zld%c!hiPFnaSIP4G;e&!;pQIl$A9Jy1^#F6P&sLAPBJ>w-7kwMXiQ|+Akh!R{PztV zYe`!x8?h`q$2k8wR%-@yAD1`K&@id=@}jd3_PKZ3p>P z5&QMO;Vx4FJ&Zxxe)_{@en2WNk&hth3j9*GTq6eN!h(|bAA zK{`?iaaaBtIstJovi`J@p*m5anJIeHD#@=zB!RV>p*VlXxttXS}is;cJj8ukqZ zSoNsSJODY-PaAyFZ0S>P_*~DO*!zd$2JXA_=RsJ1rqZ3kHrpF5Ny7hZt2Y6#tS)l8 zTkQodaxZD}B;OP(`GrEJHTCaT&*V^DvXEh6QP}&JF5#Ea);u0h^^ML26x`;>g7l$T zxqcrY$A@-Ai<#EqNBvKF?KX4vg2JgeO*;Z zQ@D3QksSNDS%B)6YJ`;?12(tP+?2_eNVGkG+SAEOtJ_}gL5sxK2NSP@6(cg}f@b1M zdTQWEexSOZ#S+n{RM}b&D$5WAE~3(}qA2a~M|Y=7pHp_H!YD_ahr>j)AD%uArs_-1 zjl`_?qQU8x=O!Okn`Yg+t)sd_yG#(z`O#(RyNKpdm!Y@!lK?mqp3(&J$akV;8B*5q zChKSK(hycwRfF*^F|TA`$Z%L>oRE!^ukC5Z->NF{wzGSX6U(=-s=4Q{Zw_9C4`EyHf~?ha=W4))CEI-tb z;NG0|;xJd@g%hG{aV!L)=)CceuCw0RK;sg%^OShvu#z1faD^38z(WimwDZ#gzu>6= zF+Y7G@Wn>F{g1j4l7n!NgIOf)*1XM$X?x@#Z)5ov*NN7SH5^E$(%qxX${Qu5thIG+ z2i$a%fuG(o1UtcMsgNab%GgH}t(ES>UGa7d`I44tBl$z2*%(vHJkEqu8=cHKeBuvA zOyuNjx7VuZB5Pvt5ex3i1pD#(?n#~Uo{Qs@J(n>sYVPdG!ED+v)!E;QN?FGE1*nH- zbID`#s4rdU|FU^h<44R{MVS%$`l;Sjbq(us$rHVtS>SneZJXLCEi%2OKC~@;m~7#b;6^8YOwQ z;p|ShkQ6W7Q$&h5s)-PWOpX!`R%uXD3P4R0t%dLFtfnWlP+wvmUB;xiS6eC17mSO6 zg^Rn6eQhVncOCnGLD1P5e@0vS8za2>!gAW=eT?M0e%pFk_$5A_+}{tY&ol&n4BN-< zX%Pi}zM+I2`yLSzGN>g`981L8_=Ip3orEN&%l5WRd9Hx}kYD!j92zqyopYbsar+<# z>EZb$T7C)HYbz{#eQmTOo5vF;sPe}S>S)KlcXvbQxJhzvxOfWkNf;d>p+pt9w|mf> zquEVodM!Q(er)ORuAlM&zk5J1j8roCrE8JMYZ?<1texp}Gq*tDxdj|YwP-xlko)^S z^1JU%FO)FV#*v@>r$m~gx>&`-5N^p~&rpg5*wKCuG65NC3Ey2&ju!V-><_*$Kew4h z_9*jWrcdsiY#Xh3%B1ee$2vZM#bBjL2uP2{*tV~5@nG!0LtXHxS|GGA+vE6P zUzQ~CCSpl|$ zZ}wkL)9draTQss=GW18f-Mqt~dMoV*R-%Y+>&Zt6asyRWh$JX3%PvcCD#d7?VqvPG zep?)@wG-P>>Qsj4+YM33YeGmZzy~PuOy-oZt3sa)SxmPaATwAu8ABWr8dY#CKU;| zdhlt8y+G?8y_^BLwNnb{Ij)L2+hGq44MA6#T~^~#?F(#jjnlpz1xA;LnOsf~br6ov zXUd%4BLXhj!y4;EKolm#2xXP(c?{(em))!6nB-a42ri7C)>i0bw*K8zu#_YugT=4u zXQ7%nyp}v%tuU7`@0_QX6vN=B^S5uvn_g7ttsfq(&TL$ccysq@^S}@eM6s(JCcED? zfkxAoVa?Rf}BA6Lss?W-FUs5Ip7W^J2mFvk%&SM_HZw&2*Vb~e zaP65a!OSco-?lbGQt*d3%|z@Q-X2YWlaK_BMB(&4=B5uL(rR3ME-=kQJOC+rrI^$! zjeNu~TM2(z)#4iRAkp6y4WOgU?3xVxJ?Ya}(xX#z?_n$rm8CA&nh=CU*j$w{wlHyX z9bktO=pvIc;=hS2X-*CAj?I7;7BX*`jbH-NV>OaK}wt%E?!JtNFy;6Q@N?SwSlu8=+n*>Bd{qOue zrPJ1ikDkZxQy)AB0gAg@X0CBET`f~`GgA~)%MY|pOx?wVO5rl87eW$BDk_!d&J`PY z>41}#^P}sdQP;E8orsh>fI2r<@HvLh$JgtID+4)CUxOgmzW)(I8|J5eFRUWifV}^( z>_7lztrq1_s=ZLh>wS|KTVX@ofrkNuCxHF?$M4Z`{=&eZ9%K;nUx<{;cRznZa<05n z_}0Fezni=$-ptPeM|6EhkArIeyU08qgWH2h71y%=6`!g8%^J$&B73#PxnAC6F4vlo$?t>Yc<{o zR=jVs5($h0G}S)dKKaoP2tZ(o zBQekWPd*rhjGA$l37P~qWFf)jAORretNWT1K<;5Ux0jm%)0+ZsFKShSvtKKtmYY4Z zG8Yt|*fqd4`2Mp1kXZU zr6aE)1=BMd>Nl8u>z^RdB3xq~5eH>?c zJ5j^VNb&Ht&_k8QXK)s zkQ!+Q-eUee5N9`O`Jie5ba=d$X&*HT2=QG&0Wxnz4;6liP9DZ-lN!Z8vrN=52~mlK z@#mB7z}oX29m-I9I1w1&vUVC zG^ZU@LTp0!#)QkjXT(FFeCjzA{!Th_!DsrG_Pxa*4-u%ZYMAvFSS+!sPDeMfBdAsH z)q^q3vmo!Rb1Mb1?1vQ=jSntsy0N|9F|%VK8?gleQo#MrSLTB^l+`J4t*MmS2D^`} zoP~qkp!w=MRo>H9{k5R*O$V(kaR7wAlSe7!iats!nOT1(iIneKER-i@>=_1i68Dg9 z6iJLb5Y!Iz-NDfY?&DA=;dP4*Q|!%)s^ROPvd`aJyqi!2Rx>`l{(x2bUiV~);(w*# zjF1tnx+zs3iYyn2z3*N4Q7VXpsax7-ioH?x=XQ>uc(d8o(z7s9^9{>2JnENwIc1G= z_4S zayFM4Kq8+A_oNDJ9-afh4{>gSYD-KQM=h{uc|g&216jh{G5g%ZCmGsji|h;j(WU%a z!c=+xob=V&{v^q#gs&3v-|6CU?wo!&m%Q7@IP5zg#o%|JxIX1o_S|PaQ7_-z+r@yM zD&Q_JJ?*yEw4&D>);w~?{4UDAaqEh`CZ(t(OIFLUkQVMa78%SCqhW`(^(}!2<8r#q z2~P3M9;(63ep}D&Y3Hv=D9_gdqo06Z9$sDjZ)v*??(wXSIZB zLs-4<%=^vvW|>lq^&>3`W|0>PcD#JZ36zu7u5L{}<(7OcblbdK*Bm(cQv5zTARW_p zlR5QGY~Hi=v~Xx3R)5y(`V*2M-BmXZp+MECN*33X5yk6|^XpObB@41gkYJqX4WnL5 zDVN+ZTc9(gY{sV?0>mjoVt)7L;a6QC@zV=bVSmK=+`f8$kdsEM zo||+V-jKnb2xTogv)&Ff};T`7_>bLWJU`%;@hg3o$zqpG@sHy5!elW zyC(eRs%^GcqxYNG$+D2r`k~G2(3AwqKY3)gUsjL$=_ts|Lc;sB_DglzQmUZprH??d zw+u`W$3B#{@^Dl``g8V-F}(N2)05A7t24Acu3udQ8X2XqaL=%hUt-u>^J9gp_#3Hv zugo-W9QkDweN-WO5B0g2nIHF9C?K1Y9U@!cK?thPRG4b*=hLUWZXT?ynT}F%pFfP4 z1f+99R z|2*8M?8TyU=A7zZbH{|_%Bzlg@r;wlL8kXEBo^Pa%?5~>@yM>h^(A9htqXb*l9JBV z`&mX2H_O^uTHspNE*1uc<1am%;Pd#adr5r6Ll$H4`nkZlplIP!K_|~|n3|##FR$Pe z8*D#eL|7z}_gEQ%E*1{|2#}95Q(}iBX$%xMGm@fFtL1Hf4m;BN{rAAQ?|J}FOl%;t z!K%{w0zNSqjDs)_|y^hr*7_W|A51*(CSRWs8qz> zt4cZvF@F=9pa@$=PBwjLT@B-3hSCH`9;QX-TOT~EFkKn4=*Su8$g?B=3%;inGf%;aAs$D9~2Z~OV<}#OWEg8<9$}aq_0`p+(cz%WgQ$GyaM?sQirH$ zYKHx>uJKbr^wadparM zk#A~eOfi$}S|zWEn05B39BzzRiH)mIYrbFcG`(RUg0*;b6r!X2_bA!d_7y%MqpdJK zFZ=}q18QNbMsu%v^Vu*6pqQK)AG36+JLGLbVet693#j4^eIp3j-8D7J&dzpv2HU@_ z6-me2oh^jj+_(t%J>Ami3)j?Kezwmacd3!#PY7OTM@qrOAhhyQFPAdOn$_v#IkIh}wr7|>yb zM|k1iN7vs6`vrR|t^)GYrphMQ`vg|qsne%i0D^p%;j`)yJL=@4=k=Ki-}{!9Zd5&N zOlE>m)MiL^xD$fMYQq_Q4mzL9%nXu-7IFK6zKT;6u?Nsy@JhT4 ziLFdxq%T1R7eM-gj3FEwGKDTck@H5o`_-cExPj z>~zDtICE)Ec*R?om6#aHT5wt_r|}y~wrC_{-@EdFM)t&FFD0J9C`wgf&@^cC6PW2O zcp1Ur^W~R93{!)}58oDA}_GM9?FmVmf z>d_NdabX)C4F?ni(9Q$5#2BBP4=bFx!*16kG(zx_TUNi32`ps%ErR25koqkrD8 zyOXn+5(OQI(^~8=*w$27U_QQ#uybS!##`#Py?9>_G8}n5eTct zMLvlq7C%@;IkK@43%l1t700R&_t=yDP3o^GQD@hONgH(_-}T6Sf=c#P*~n6yYL$_! z&~Db{t><`5bDiv-DgdBus;0a>5fMP#4J$jBWyRfDyD*NWSDF6$I~>%P{r*r9j6*2T zSkcBI6?N1^M1cq!CGf9Ez)v3d3B$_%RK%%Qi+E#q5Q}rX;}+v4)wOtYfl6kp^y<4k zidwB{<6=2r*fHSe|8%hQ%B7xp$IuX<(3Ey>(gzZR=r>KU#^`QmNi zw>@E}gE1TpZSB3&nx3JPh05y{%RCB7%HXbG78aH>27!P#-}tSgvy=Ycx___p@_d6> z!#hOGh~wRfTJ|0QVZ`dRVg;pKq4=DbCM$(G2wo#KGUH6AQq_kI5;@8OjW2$K-$1jp z)l*7acD;8_R7i!f3Te$#^PhI!HpM4%`{6;~9!x`{M@e(UH4X$94P*5&q+agiVIvMl z#SeEY_G|0yua%xG1mEsmVO^R}G1}DP-yaR4b_Hoa=2r9pf@bv5oPD4lxJB6-W%3@D z7|xzuNGK8OJ3T5f$~{_z^ot{(ME7T@=GtvDNsZ$)c2$Gc_|O^`E^tOwpQAG~JV){K@&aRD=DKVTB()X=<-oftB_RUMp5qtY2s) z!x0FT-{CK8%^b`EGPDht12!@|NoTo046yPs&Btuzc1Ql{0s9`}6g4S0J*{#R0K zyx6O=*}yeFB$3qAoLM zwu%$?Y!)E$rd_1c<{!fW2Vm2{hXbkrTc@YS;5cM$pnGTLV?^KpWd^=W*+U27k%O)D z<1P+;E+4Y{inqe%(LK?Wp-2I+O>zbI%vv8ug;mlMe;JJf{HlzMbXMc2tUTZ7AGS-X z0cX_78y8bbV5ua_hN|L}fcSy_8j3&-MBfcr#P_zIqEQzz+%R&$(~9Rp=(&bg1R|6QUjIihnvb2jtt)HRl`+jrY?d6N1DkO*KbPrMO4c{TX`LoX1^0T2QV9r8o{F_Hbg+Wdoykl&lj|Ir>t zPj9W(K!~rSW ztFEf5_ve@|5ASa`oKk$JwY(fiL|WBDuW*J&;#2r39b%Up3oE;FMmGdw z2@I>MymC{sIa6*LmHUu@tdq5WH#?E z3B&G-YxikP)y%hgBF2u(>c7ty;0VT%{v?Pu`G|<~#T=^I%)Q2H%9nPzq;l!{?RTpd^`ZSZU!qYM0}e-u$`atc zH3ia`^yuHFjqrXG*EaSrMk)xfCAMvJ&a0jd75BVc+Vkm3SGk1*7$<3 zH!q3JV5W+A3t3thB`uQ-*xeT-;h1!(5uO6iHa;B~(hX<+M3~S%+Y3ovzvt%|Hf`ix zd@0LG$!RsItVg;$+7ge2ea}Y*!t%I0n%0)g0KX|dU#{GyGfFa%p>k~NCdndk9pMD6 z_Wv-Us^{XPqUIp>7frm&J@&dfV&C2K+?@$mwUawHTnQ;EcV$M<`MI~hlHwDwnw8Q(V8*FXdvU?G+u(@3 zyi;HXrL4My8}dDh@?5+RtI_|B8s!kwiT|}Xz^|m2luVGx11T&?v7MwDB=_c4PIPzX zDlHU<=J7q@wA9kwc?TO%u2_Vi`xyE6_g>ac@gl*OnKCx_pWj2|3bm7Za+CaCWOR$I z9G^%&F(mW0+tp+)hoh{d0 z-QJq3$pne~o+9G1>kUQ3LdPWy>YcIj|8bP5N;JIVXdK^fX^c9IXB;0IGlbIf(J<^a zs+|5KgJf|4y;7`G-vD=NAl2WRj}(BYn{-YQ2RTg6SaY+PM(gn>k-WY#YYQ@JyT zvw5*n?U(&MEJcXx*eIc}s1g%=^8~J7bZcrVsQO8Kj+1(1XC;yuz*ez)pWjf22y0fF zf3Z){m@3dGSOUqZ%li||xe|Fe02`x%f%|LN1So?Ek>yc_-Bw z6q0oJfpd6u#mDLekIAiT9;pO?iLsV{=(o%+{2mmFd6a`DoObp#+Z2a+doe0$yxr$- zouo`gwuip(mKx_Rv>y5XphlsI#cOe}mC{mTro#MXH7@S&F0pa(T>_PE3B8&cC-cVp zI3!ggiFENF85^?1K!QC^-)_RxXvJLfsbc#MzkVJujSv_z!RFy1Ku~-35=_s+GIYH+ z+_9Eb7!2GBoc>G@Z2qXL!yq6akdc=^Mg4Hh1?lNli|EzZADL=&>O@Xcw0668{&!_P z&VH>hv0f?mkA}XzG5-y-VNF!BrTQkI_8@+er&%*pM-IJ}uGo`MlczE5osyg+|Ex-6 z|E8(76d5{uFOgpsjC^28?fQ`<`Q~#HfmR&mk1eWqJ~dd`@}e+>p5IEyrQPI#=HVq~ zGtC59xA@1!p$qw@4Q#OX=*Q~~;l8ga8y41dcsLcwlQNt6mJ3eb`6UzNyF>P&WrV_! zBOypzOwzf_6Xdk;qjct))S3vQ{eReA%~Ll4Gv1I_pm-Ds@0-B2Ica5UeMUTGD)=`)s2A!rHh0ZYE0Bi&!F+ix}c?>cA;ew z>ySuDnGJ&JPPx}89ZFKz%x(PY`_e;LA|bS-hVy~Pif||}T1!8<{AR}Jsxa)}%`c?n z>3q&80iHf;J`gRK6Dq*)YP{k$diNSdS|`}~2A}++h?3_+*j{NZlI$9K(8upW>3*29 zJ4LRPVzP{ena1QurITrM6B72~nU3T)?han{D`>xZn5E0_`2?Q4*|Ao4C3_l#cYwm? zFL|x)<2Wx`uVSRdJidY9Qd^p^zboAm;4c%}CtDdvQeenV0llayrp^-cnSK}`2Lib8 z8Gp9&3TqKJjlq~(R_qlU^$jZ%no?giR~gv?z0SsJu9XRfPxQZ#9%Cjm%XS7QIP%qR zsTZzFG?-m!E4&361hEZjkMWqD&LkyR6B|-ce7q(W*b+N_m78+3whW9=e<^K26;__F z&8(%E9Au=-Bs3Ge?IfWIrB$b8(3HUZqcCGK3B~*znmGC$!6G|74jN%(P$scR;>y8} zdw0p2@Mm_BWM_JAO`=9llAx5=JN*F`bq^dGka>Q-&56-;isS1<3&JIqWt!Ik>p%W zr#~pCBayp5Og_D97RHV$Cs37gbdS?3U^+~x#O{r88Q4nO#z{j~d2(!>5KEbKWa+z3Z+8TZMj;072Bc{p|xokiCKpL+l5?;hs_1 zijov|zftH15yxL`vvOxBACjR0B(Q6NY7P}3TEc;@>di!c`QQ!Xtt8&(!3ZrSN}=XP zU+%uY*A&o2ira-vBDbILJ1@Y$#{4dn_$^fq2Q7m(2g!K$X`!(T$tD%4shpPURh8Om z&PQom#K(aK&&5+V>mIl7pF@DO9Ytr>dmaxsk0? z;kN=4mus(@sCdQDgb6>1i^wvi<_aC&)n>H{GKFEs@n(}J9nSQaA_P?=1t(|CPmcwA zah#P-jK3pirx>gG74}mRAYkEOm=|`)wwRn_lXS^E#9hDR!uuKk+R(u_mTJGxJG3Ib zbl+Mw%MCYgiE74S=`Wva8<8m9h!UFmU~@8k8ZGY>UI$Xuh0b)Ri9UXf^Qeu1Gn3{W`a~l%n2iKGT%xOw~`IFYsr3 zy(DYy)fZmuz5?t&&sAe$Gu+ht$irJBxyDN#`6H8p*^zbH7MQcA2+Xd>Y z(&kxsJ+r7+>$WySgz;tQco*Iyw-2>LGx%lg4Zmx8)Zh5|27uXHdDpF_k5DrB(QMkP z;-Y_x`0HPnIEXiVmPp@@29uz6x*w~x3vl-+)G^h7k|q{aAS)aI??IExr5p^Pa^X^! z!-rOiNSsc`?C`t&S)7=M&G3-}A~{)DbETJ;Y0j@?J204s3QLeutx;%cI*_$nbNfb1 z*171G!W=30R;)-X-3ip$FRvY7-2Da|Cr0J0wvwN=?`MH?xuQ=u`5`?f!N z$yC)&FtoL4D7BBg5@_My0dbp&tg=71q!MbDvFZ(@7rT_f- zrn)We9E>p_&A{%ML0fI&;NQfzvhx%|U1ZDLxIKLz0~JMvrho?6bbC>#2% zreV@w$Yu|SsB+y%T|wLf&_0Jqn)Z_t7(96pd-?^o_H}u}6?5 zkY(N4JS@>yCJK8DV{fD9t9DiK{pIXsLU||eKR6;`Xc$aEXN5zreCr)v&C~gXLC7Pl zj7rvZBqmLdt)X$Oq8}(KDg~QQ?PRmf;|gRTV@-{dM49vT;IbBGdsR}#U~=3jCm8TFFW+MIYDQU%Z^eWL@VU-zR_-HAV&Baq91jjhQ-@A zi3n3-cf=jL ztoc7hd44@k?CL}O;&0myEm+nC{~D;=9SG5%{&P?f$-_(0h`;VO4*{>$27|+%rDAQ> zu4Rq=xd#9kMFfeXiyXJkji338QsA=wl`=6w2iw;cavH`)fPVhGQq^USJ~0q5oD7Yt z;9oBsSvNqoh?{qkLzSD8|FdMPkMgr~#}sF8>y&ahYDo z#-L&{PPr;Q`4)VeiHVimuidK7_}FAqjjP)YhstrKoBzwPfuj{rIBsA&h%4HThxl|y z+U!J_j?=(tkn~M1(_Z(Zy?Bq}A0xtt@=*LoTqXAC zPh*WId`4D(5O*LDh)4t;8mt$OT#0LOShUs=+?pk~qDf+x6mL3|t(J=3GJa0>YnvO+ zr}OW6fw;er=`B!=?uHGHEK&ZmMHzx)Dcw#f#8x=m^&djV3yOXqciW)Vg-BoEaL=ao z^P%GDNOS*We)ypPLo6KdG|+FlOhfBeW%b5h1_l|C>gTa;HpM-nLkeNz+cSN8!wdAhF`e1HB=1+T!sLe-OPg%abWkcsWSdUM~ zZFVa+E2|e)NpN`udmGDpoP zJ%2%XcfW0X*iz1(r<9<65v3g#G@g= zN_gV$qCRV?DZ!&k1~rtF$RU zQbT-Iwj~*R;hq`nDQiR$^*?pCYJkeglxqBnO2V0tr!RMzWZPF|r48dXH3W!&w5O6t z(>}XA)6kSseGO$ICHg4_>$`Mh972Q|@Aj+uoFBAq2BhhODC7YkAr)t+iUIh8=v!7| z^As!zJc?CICH-}U23d%;cfqaf3EE?8V!I^c(tr*gOigy+#JX9+n6C$KF%kzGwTg{n zw5P1xxYVE=a_(9EBOI9WEv{K*&C{ZzfW|PUxCu!jG%WvTeRxeelo@g63&#FoQ++jQ zcd`ZLmL^lM=qCHqeZgFy$$$>F0K=(s{6Cy|I0s}3MbGUje_-RpK;%_+;P5qLbprWe z!t-(nC;*o-uqxBxXzUZkw001Bk2^hmnmmX%?Q-cE0)yg_)S%}cK{QLisXtE+UT-Gp z*b9M=txnTllj#|1=Dre^U~PGs{G1i*u~T(R@ycG_vl^eU-Ix zNWQpJp@f2leDp5z>92FXj{G~5Kh-z)t2WOj4QFI-FS6z{6u0-@+dw^q?bIn4_UtHh zYr1D=Oa>1-DstOD%OAN+FEWNOi*{1Nx~UlRKdZlz#T0>xWv-8^?XJV=@VFHHR*E`( z&%hfib%}%-VokA7K{G!lTlS9NA$HaNtJUT6mWQFEah7M9cr~2@&+{ zIj?l>u?h<*6I-Q#^urhhU3pMQ5Q0hxCL^MUXC*R}pykd{=D0^ip4%JLD*`$NnJfga zv=W8Wf;slNijxF0?C%e7yVF6WyjmPTtm@YEW6syiROd~`50$l!&Z!Fa!Ks6uaf6^_5n&uaiFVe z%Ff4j?1AS*rAYDabfO?qnPhIU<6_n8|F8gUlmg3WB{F|i{DCVvhD@XlLt`HzFHRXtIOqLR3ib|4I&Ove<`VU*W2A+ebanD(D zpA^isBD0xgmIW!i={Vp>U)xQl3ZLQW<(_5n5ljzmyAske|x5dEf!LhaM4b~ zi10H+uN@_Vjb}X5=;;H!6JvnyZ#_g2Ulv)0%OUW{mqHiO&CFS{Z*ne!Q*Ra0K z@hlVxk?z93A6E)WS^o1yw7(mhqp6X9!q3%wzP%5l}%FuaOHWt2G51Zl6 ztC+nY<7OMBAgns7`aGx-)idWekFZ)0bWsWdJ~s}cGa^0K*Uf)%C3+q;;4+o-PqRAE z@p=GF2?CybBhU5>NRIa=;zlT5+H5q!5Qsd&D>ETp1;ACsc zfM?NdHGn4c)=Ih5BKJup0HGBZv?)H>&+htJ(;l-3Iy#6>)u~6`p-JAZheZ+y9*wz+n?=KQba5^>Gs7)3-?H?-+&e4ADpwL= zkdlV`ZB|<;%@;CBs|65k%?@t4%*4tbgqhI6JbWA~A#(A-`_g=>%)e49OnIWdu^7I4 zxZtIt6?E$P*ZF$P-JspaOy;8-^U}roo{K|#uHf+B#YIvq*s(17m)C#OhnXh;OyBc- zispi;tp+vtu`IJu)uFqEBFIjySirFjcYRIj*wA8oq+D32T);7eVD9x2>cC)%*M+bk zcit(W16lg0+rAy&N9oABTzSr9+6JZBVeN^s3t5>%2&~CZE41)NsjMZ`#RLcjJfH(q zLK@!v5tQSZx(0;1??KONC1ta32~d9i6)L3#~XAs zZmMyjyCxU1aXh%khH$L= zV28^iF_$5V(3*P5@WZyx*8!QwK+Ji*6)y+-2yvgx~0tY4Vua69D8SK%&$F zzJoOK*{Ndudq!G_%yb=ntfyZ|RKk3Rx$bOc$uNeodL=J91Zm7y2}^D0~Ih z3;9;Sc04-c=C9e2Lex1mAGZ0NJiEb^5;(i{KX(Aw4Yvym2ZsQ#%Ee{0$GgHP8cC#K zw|in@9Wuy{sAGN~foo^w7!9e=gA;Kf zLN$sVoqs$M3JK5_ODF#w#zxs&temArcgc$xMMa07lX@xQ>GgI z=i8J6e4EapUiy^x&|@bAMLY!+6`A75R2)2%9S~}38G^`o)U4E%a#SAw9S!;4;gG&N zWvBE-xUviUJXh8d5Rqip%>~J7#vm`zKT0}ygW=$$g;ufSCL+#y zXrzFZf_4*5emXiokG<@9Cj+DkQ86+7VX(*#9T^z}lK`#2eyK{LCZreNI1m zu)MT19DKQ!6%`zG8TJHM0D&e0^>92({g1R@WMl;7t)vYMNZtdFXDAuc6b-uka6eb# z`h))*UVK%}|L^e^0gpduN2XdOn!=#X54vwxe|Bzdyf~Cv_N(p8E@jIuz#iZ8PWek4=Lg6C80>UdFe+h{H zoR=i9VG#F_H@)5V%WN-aJ#WkaC}A>BE`jWel&`OiqoZXW2Rb_XMwfqj4|e#BD`ktJ zqa*A6#rlX?(69J40e1F;9%0W@96qOw(LuFe|HNp#{}Mk+ zKX?$WLAjRi9D3wLL`X%m3}H|a6z2*?&i(ZNYx4e|(|V(#5bhyAs;CSPMq~fekQA4e zN|w#J{7?-7lZ;9WNrt<#R=*O2B=q766~@f&SM5 zF94hm?1-vq>PLq47dq|9Ar@MiF?=s@N4F@HgK?P-qm@_2NBW=cWd6^C9zyciCeDaT zo$XnOvq3NUkoQ^ii|zTRjZRwH_dhsV#=ryw@GWrw#s@W|$E;2ppNpnDHWO1`;f?KL zq%qUbP4^!OnXk9+^JQ8(os-D!_$((uXyI+f|JM#X0N9{-;mbqNFSuNLKC`)7Ujjg~ zFs$;_J8`g@A>f#+v$ZdpA!068wQs$XzWteVmk!~E{=YCX`p@8xVB%-R_V)L$bG=0y zztcwN7r7x?A031K_u%r92Uo-tEH2fU!`BVy_8w5K_P2cWf59P?@?S^}g`g`fHg8Qq z16A5TG^%}#;FBIF|L^MpsQ?qT&*%*ddmn6|9r2+u zvg6f}sDaY2kBt=O|HVom-a`OqCqcy1L9HI|h*$0MZ3&08Zzhh8xYNTR9z% z@+zYLa+?C^CNFmZ5*B`ZACObsc@KI+eY?)Vj)>FP z6&HVo`&~ajv#>F_{r|7bkpXm1aSCiq`5>^!_P;heL> zXBxrr{$F*BvnCE;h;E_ACn<12_jDSc&xq@%eDSV>ZjdP?*kp6vL^=Eku0HMrd!- zq6#w$As|Y`4LyCrqbVsiKZ}5szs?JLP;RW_6~O><1~*_yLL$GwmyMyUD5R_5+$qhZ zV{vFx;^2X#l%pBSdMF8mh#8m!H9hsXha6#y#vnWm=u)%i2;Zn}!pH`uqzz+}>&;W4h<5sDy+OG*wh4 z?~b)K{m37Iis$;(k{%W?xnk*d!N_};t%++L$T@}p=v5o@fEQj{awMPC(66ke#MXs! z1u+!xsQ0I>2m7f2yC_gVzks%&x+=dVgbG}y@-M;`;<`JYtS{u;?Em;zf;rK;uZWZl z!HAP=)t7#D+ALoUi3Bx=hl*qMvcJ37L%NEG8?%>^`3HCLy^~@~KJy4Ft1S^tt*eZW z4F=OsyOLK}Xb+vm%hPJ82fz0)_fVA&HHiOSVC(L#mz0=YMq?{Y&FhB#%4K)??5jQ_ z3&6Dl`t{{lU;-cXXPQl{fYYGXJ)ax>iCO{|M!@e)9sgDC=2O5}^0|Q?B zL+(jZt+v&cZMdKEz!y@*AO)UM{nS-bp76! zEk;gc&V(_#OMaNANV1c)ZYDleV7ywQrt^ZgBho9`uB$+U`U2e`Sa#zpO4T0*h(*5s z_7GibG*Z3yN5`6iXRX4?Ms}0wT`Otzdxj*}W`OC4aMLVXzU(ow`USU``*6xb%zS# z8K7xWm`qXKbM9?ppO}dWwRYLMK)Bp&;D$d;4qVubkw{zg)Iv+C@+K}A^MCrIMZL5h z18AE>|NpEO1>-?9lKh3 z`y(6I_hBAOj0eejkx_}#@40p=YP=d1o%hrvqy$p{Lit!tszGxmG*V&clL{1yeAXYrFlBpc?KVDGAjQW|&_QQC#aiTZpIL8dQFsU*H7K)2Oui8+7J zk%!P&Vifq%AwK?g_T*#Tj5}4K2N1SpEu;l*?CMBR2ecQ*g2O5WOi~S^a+N^vA8#BD_W`|Y+`mkefN?R8Qh%GpsGs@*PQTC!sN3-f=g)LazJ*E+lUt$ z6|Bzonu4TEplE!yNZbl*AHt(6X0uApmj}kidiN+cS4}HQkEHwJlFXse8EPB8ceJ5sfyg&ey{^Y|k-a$Pe6EYfkx}Wa+o7(51RsdfB zZj`fuefjx#-(wQ*26l>fU#}HAtTT8pQ@rL{(8DttA_aIZK)ZkM`x51gsbL8zfv2x*o7ni ziC5nX{RW3_@Jq_ub+HgArZ)j7MIM4s%zjygR~f`{Ex$}ZKIO*XO%Vq;daoQGX^NA-S;4z3}# z!(NQKTQFbFg|@N5bRsA3?@0-(Wk}y2!f@M9da2v?&ho~72O=b_0Hw=5(}u6wTA)*5 z0@#LyFOW>c114)&S?1owdc%8huYM~A$ih7eA^$m$432e^ zX>G(S&=0#VZkP2-2n?y;O`#0AXOFgSQa*1PU z)|{0taoGATCm__nF7^3eE{u%zr<_I187fNqtA5bXtEskXy+TcWw)E7*4h#H(A*>h; zRYH~!>omHo>zXc~v=sZIYSUK6`*B&>VrC~|Lelee^=rr zf2O^5vo-@F^JmknbmH{VLcd=yobtD|U1vX{&MzgQj@%X?1j+Lrx|kwKGU@*Yq#m?Ik2)nI*f*0C26~qaECo zzxx%~)pn9GP%ohlBe>XEttbtJ|G$VN z$uMeS@ETglb6oX{^Q0xhhK}9F zb^Msw?JW9m6SVf-*2+8VI|{c@L-~t2u!24K;mWu`C}EGcmrVl0H@JP$z}4gLjO7({ z8BXsvwtQ(`=@4JHG5_Nl7@!kHX*&GDn7RB4HKx$7ohXb@Hpcfyefwny_r?iQS=j=6 zjX8>qs8H@|c~kI_n^z3eu#giYl-yu}^qQv?uy>tYz#rA=UOrXs+&`|cH}ZGS4|H$c zEX6p9Z4Gz%XbNIA27kTdQV*yJgB5^>+&Og!^r0=l6E{WiA+$gBAFsFu=9{xLswZLs#k8Wg?_0*L4;yR zb35}%+B!TY4EI--dE=uW1D{a~hW5-;^xcJ516l(r&uS>l0ttpnza%LqhHjoGXgXOw zcQpxD*nX%bYU>naA#U*+><8hLFexho0GU$_urBjMVI_ zr!LV(;$B_;@j@8WC-0jQ*+FO?T~4hZSiZOyb@4fM<;1af+OR`?-R2w05s6!#%NK93 z>xrmbpGKek#i$tLb71z&$3MJQgZ^hGOO@*N+u=11$au=jy+5^!JZgdUm(?UeaN2L~(i;XT8v@#~~?h z)neAok99|S*~BN~cHgfaxxvPW#h*Btp!=IXZ!jdDPM{Z~R}5f(cqRnwe{j-rGA7%0 z+B_xYGnUL(Z}sqBy$O{@Swan{Ya$au0SgF8xr0^=2}uQLo55 zE^KVSPsMaiM$|euf6ict%qEiylmpf>Tm~J~@S%b2j0NouAfXBiM1O3|uJQ2kO}9_p z?`z?RCh@S=lBf@t!Ave(3%zG@!WCDS#;tn+t(d%wbO87w>+OjwtdMp5{i<<=n2B&P7WCK%CoLULZ5zj|$L-KYLfSjHy$tyc2TemrfkU?#Wvw%@vD zs1bUbF{1q!InU`++5LMkD9aVO-0N1q%0qvioRvqKm&hWrX<<)+&&pK)iFFV`kBAhG z!8kf9_3hU0wfL#^Q=g1q_h0hw)Fwsv@s6&N+Rd1b&K2hqVgaC(DT4i~!J0)spxr{U z)Z-Zc*bUY$?Ru0$ZpWn}3gv+x-f zvW9tf?%$7DqnzKe*g!LABMJr(FY@KVKKPm(kIH!VN(h=+E{%0jmzN(z$o~=Lgbsr-P5+00?WC_?>6Z-+QdUqHQGY>P;|I znC4pCLPj?XN?&wSATm49;z2DkAWnbU>EG#+Zw9 zUg(j4=fV3>etq6+GS3?5DoPP{!dQocYt6^%OpSW5F zh^RJVS%mc;k%v?DThyTtOJ+qMnks3m5UwIPBZFo-t4j7B4>}@Ft>3>JZdD)dJH&lF zN>9gP+WZiSkk|A*o43-Pw%C#VBW#pfrg~u#!sN((nY#}zFlSIx8zk0=s)*=0jh1ixlU)8)++bG(qeJ{x+(OU{WNqw2xq`sAMRG)pR;u`e{Rn zgC|(Ej#!{8eVGfqeaUiVS_pYe;bmC0?|0_rb>XkTsMCo=w8F(&KFO>S-Es_DPS8{0 zsN8)l!c&!xo}e-25FOTE(BaUHb2o)+CUDR%890R{sxmJBs$09~nCK`m%ZB|OG;7wG z8TAFOiIHw2hI237mMENk-gMD`^;Cm~N~d)`+!c@a?YaxAK3B-%>9pXJqT-y-HzbK3 z+cxDq`b><@Pm$4|d4Z8r$gwqeb|NGhv}|^0KpK<-)P>g5mVQ=}`ZGJ<9D^mrZ5aD1 z+*SM{NF@c`=H+!JfwV=OVG!?ua&v-g`19~tY*l$GDA2keWusYhbMfj;{aZsIU4Xb^ zbQ?DBm2siem4;|M9ARRoL_+XezD1aPP}o8)>!m!z1*n>PgjCtq?;Nad{@h$${?pb4 z0Hd{-zbpxmP;HBMX+6Bz!iON7R%heU`3#GE;#FjmfW9^mKmqE`z-$d+=0!7RM(Nn@ zTD0>>kvL%Hy$a$Bil=pgChnU+ri&L!*^Yy|Q_~152XQZjTm(0|NIhch*i-QYt5)VF75SUEpGpp?CFk5-{i0%Fh9T%BNIRQ^!D6_$5k z7Uui2vtov)9Ze0l2R4MpJwsiuR)JZ`abi#I>-f@JvCM%RDfzoa6eK#}jy2CFiiAc1 zU@!ZCrG$r!$9#~0Hrp^&eyeMi8UBE1^>A~o5SW0Td!<@ zKa3+GdQ`*%>VogcRt}vYF{f95Ej0DkLAs`)(5)r8);oW_qc+-5d~j|ZR0a0c2zPh? zfd(It8Wn@EtKrR_3WXB=0bTJDtM!j}Hj)e64b5U!Kt134Pw04gn8Z|(=@GA$FxV8{ zy5q%OS7tV8qU#G6S~gk2U8heHC74se7|# z&B9`Ip|Jl(HXzHS-nt(C-2qt^D1myWNZL}nO~r~WrNK6aexdvGAWxQwhD`^vNivdL zmQg*;V%NTtpmHDfL$IW$4 z=H{F38FsD@(mhx<@^YMf@@btIwc~(|o@tc45OB}_p~`XY{IF}#C~=%6w-5U3@JuwMwc9p9>JGN*d|nB!wLC`{Mm z$;=ND=|bFA$tAbyxe;^(VbRTULa{%4kd~UAHIIUf2siyPN|qVyH@`U5f&yQ=y}f*& z@7RfF{4bvydW>Zdh>WlMk4L@sJvgJqYNFy1hEm2u-RYXeha)-UZbuJw4B{!ac}Lfd zV{4Q|muD^S=I{3c4P)ZO*i$q3Ki&*I5ro%*C5t1b%dT-jkg6~akW~Cs**lkl_}1)O ziGHIHFi|U6`{(aLd5Ky*rAufe@+wjXNZ3qR@~dUNWHE`njcwmGd=_Z1Pq_EJsu11j zE7Vgd7y~WlsClmpS~1@rj6#tyWtD!FbB-xb#gJAwwwTAt>r@W}ziRd!#7FI3aVjp9 zWvxmp(S*ovthzwIi77>6Q^LjaR_auD)Ne+K1VcMH@$WihgidwhXeo+?XR}XRnbD-p z<_AhZD9kdinp==dKKX-)M6p+U&^7BGlctlRY^Ef*Q)YX&J$e<8fkg%VsC)JsXplj!;`B9Up3LvFAuyq< z@T({u@81*B{BL3I(Y+;X6Mm9oowS`5_XAcxa1=(I#!l`U1tyh0mwfO9jOv@p+g9@i zX;Hv+*Q?n5pxV|*&~|!~O3qhA#vJ`_iKn-klqXo-vp_T=?3+6$AAuu!oL1G;(W>3U z9)IuH7=^>YB4M((2V}sHo8EjGsPt^#^gbOAk^IBY{1;Ye&rAGwNV`S}V87N}>$B#d zH31f&@k}a_(u%=-UOE=kJJU%l$ijJHG)oXlRTfNv2c=_nZpCC(Z7C>Z8e2rBgB!KM z#~C-Sf)l~tGXukIe*2gc3kLTHq^DQ-^RybSTMb%NB7ygnMsIlK=_rNg6xS^rIj<(0 z0(zor7vKC(ez2Y&1Te4R231<^-hQ=*{)uxdCVPp4Tl-OWc6mGfr?C8bay0j#ITqQU z#24W)7)2GZ$NMoE&qVw!Vesc0KXeK=7@JG4quw7V+~~(;k|@D;#J=K>f^|LHae*&6 zTcxjCnC15)Mcd-!roE3Y(Atd0)AZKJHu+vOzzi~DD(~0-b*{-6_EfWtp zkNL0Alry(6x(RZ@U3~f;Q%Pd1atz$}VAPBI_Z*Vk%UFDixSc~q0*Qj$$!_<0S(D?oZy|`af z+&)kl7Q?qH-!raDY~s0xtqJsjWv(M^>jVd;R1(q{|SSN;_AQt_Bwvo+`LJQ z`(?ifhyCR}Y6jy(omjn|7f!k5Pk!4DWbWlh$=#K)*0LFe(+o)}gE{MJX`*Nbp^D5a zOjom;VxD{vid2O~(UO8Jof|$RL-6IM=Mu+bvI2djm-P9Av+#`^%#=tjsO-)aQ4i^x zTF#Hqepk)*u{A?$A$Xzq_-NDJ;uD)-qd0ovmYr!}bJu-QaU58TH%gP8w2U{y6u8`= zh{?`ZuQPzrhc{=(bB~myQ~so_^&Tnx+{>Gu_o@No3OQtnAmcW9);c0b(uLf}%=Q2w zPC5~!+KTlDiKKpSO9k1(4!0+E3^QwzhDWMah0j&mMD9DRRy5DIMwdv(x~Y|7n-8`a zC4DKvO^z6)tJzA&<>s2Q4{JE2l&Ja{N)X59hrB#K@RWq;G><>ft9 zSw+5;*q@Jk${99%e=T4z37ceobxi+*aJHs*zTHEvrKLf$SD{(v@^H0Fwtm}UXk5y& zlJ!3R^R%9qi3EOW#V)|Aqux()T<264nof7Y#Z${PTjA?PrN^d(xP}GozWP-GR}ynFAMQG));u75)s9X>k(ehXnH!HG{KiwFY$+9(2ZgrMm1e2_NgL%ovf!XR}irHol!(Zf&aY;zO_kNnqxzJ5AFcuIx zDM?PlwYgb5#QDoOm+XwL|2{n2-4Lvhb@cTW{3m|`^{qFzb?sdpZKos;{U#IrYLYO< zuvP$bvoV{vr3qW;FX!m$9En))(NigVR9deaH271091i-vrX(MgTeXlOSpV9I3EJj& zG~iQAg~`An5&DD1PRjREW!WQk^Q^dLvSX68y3Z?6rvjomKmAPILM-aZg(fC|x)g;MHFo#;3+Qc%|(4zkUx)R@2oTb2QYX*2)+3 zIwt^w-+SBZCl z97FX@KZ?3^rN5IWWuM+Ec{Kgnd)$&1*~Cl$0Bbx3tx?Z@{5b4J5%BXz97#++xXICv z-kCDB88L4zE7eXLAz{twuU*Gq!hAXz{-P!#m zdEvo%Z_Z9@35X+1NcSytnTy3g&CUHJMEle0QbyaKIM-n%tYHfBxV)yXQ4~JocGg$q z$&*pBbGgvwx5#HU+_WYpDeRAyixo{FZs2cF@&z@vhd2FPM}Mp6wCt(Mh#aP1Ukq1U+q=qqM=Laf@~2GuenlMsjov zLSm2MGl0I%L&RjlLQ@6y`T~LW^K=>&Mp@g(*_iZ`mnu6l0U<8d03(I7TZRqGy*r-K z5ufATgQ~qw(}QBA*%)aT?djQ_$XP`)4htyx_mn58$EqlT+3h(cEkNyd#~$u zWxq)7Feo}aQPSJKBS|6X#!oZ_o2Bk{9ExY<|nS0CCy)_ z3epYHxP_^4ethi7$;u#bp)C&jWo zjzg*^k>LR$G@D$;n~=>VUPi5dsCJGQiySm<=3Y67 zb8I?glwTNpw1y>tjo1hqG0N1{=?HE|S#KXmwoQlzD{rU@l zEsr<_1ckMt>lmf)k46W@66nmDrDvocE~dXOjXlrzr$FUq%fD;>B#6FJT(+%s0pG)x z{N!KF%EmlzK|_xz`LP@5==>~$R!0n!qmq=Ayt+NnL?Pxwp;yg4Fb8U#;o#!lTno2e z&Px|m=>Ak)n^_6>2P1cgV;`7z`>?goY#|m~lgW;b*ON>RYW>*Kydv8kaA*hBf`|TG zY|Y=s+*?#mtml4n8LMPbm{bO|D;~J z8b5ja_y~9ik+y)UbQ|j&R=JFVA8#xTdV;z-UXhTHGFZkheSE8e@6QGQ;N#r*cX{h; z-Vt#rN3g!cDa1Pr(|9ICDQnBYGZnS$FQsqq-q+1C{NN=AfEs&!zgCa!?5ztu&d3MU zyw71O!;2#@Z5@1dVuvTRX9Id55`rF4m0KDfet{u5F$3>U+3zf8^ zs2L65j}~;5;;{}TsOKcb0hrNWS|USVDjI3sWUK(J!5e9N0j-gJX80C=oF$fmqM4@^ zn-FoVYb|z-R6gJp@&Auly$yzW2?WE6kL><{P)} zAPtf%r!84IWz;n$rrFPoIiP)9qhkjL>DM;oDz;{A(SZS9@sFp4)$upx)r8MDeg>_s z_8%UW@~J|&vbwZCA-y+!)Lk^;J<3lr?&L{%3o6E%W%dv`o`@myq|v)yvwG&q(4g4~ z^%PRsdlWZjTvcV50QF*;@cb>EmgaUn-6)1*z+rk@53Wa3{2G%JIOZC#ro&4C;KjY2i` zU2CaJSl3zA6)hWqH}z4~G&2X1pol&cMBGB&JpVg<==a+sLZ|}<>T^8eR5^n41@KuN5i}e;v za&pl6%#&e<*WF5ZM(Z}C>=kY#z zomguS1DAp}` ziJz3`?}6zO46jRn*eI^wi(^JIJ!V$$BEW!34G^i8{i?3QB(f@JS;|8oD66NsT<_EV z0~EOdLw3pODeg{$Td~DH`6-zgCJ73#CNS>wjKQnsfj5;*YUy48$|QlX7Yk7GE?2}i z?EKt8DT4ztgv@D!k#*u{o3`5x$elTYt6;d|hj@-}t?-+|||P zy9tm5!vQh8$;-nv11qa#m<veUrH+Htf#%PPa0!PZ+8|>EY=)1W3s1gI@h|QO5I|NyTKpow(zf=^H>f zZBNPRuOoBmtgl71`XamLLD5)zol^LU#ZLYift(#YD2k8zM}N4{&-*zGlOclx)$roN zr`ey}DezA8G@e9mfAOryuv|u)U2-``5y`^tK$?1D!znc<$1Oq z{ghfy;aVUQj_+q|%t#eoZ_Goa-1Suy!d90&`4Jaj1ZGs=&GevGl6qbJ+lh`j647|1 zF5tvP_SzZV!j6nEv^mSfvpFUAQG${=#$&p~$o|Trh&-jQ|60@c#P0Hgj1LbIz0%=d z7Tu;FxSi7xaG%1ZcgEn1#eNUK_Uv`9OaBtBHcM%I(Le0ltD(L0i z-F>c4pF6v&4@-&<5ZBg)S9op#_-doxhYV4FzEYK(7ywRbx;GfD1Ytdy(HAaGP5niA z@DMl6=cX8icae7mvj;!#-5loaZOZ25B5T%VN$2{RiJYd)YOn7Ll|heY6hiG-`Bts8 zcKowFZenQEOf&g|KXxQpAHOpKj9(@ZxEucznTyhQH89bAl(*Cd<8U`V#hSfAaXwwl zsb@5Bb9ouxIPeaa`LV@mv%h6K2st=7I2Q#|@E-v)D~q@XJBovkhi7kkGoT!G|7taT z;Ce{Ah{GY3i2FC2^zD64>(vPDC$UNi51-z5(3ZcfoTsC1(R)vjc_+DZEVxMS{h|BM zvN5=8GqC5ZyKj|F@n?AqmdO`X0aIf0UI9!RHynnK2$bQY2;pjI2M%G;bWz#v8qsAj!xeCGBro3YUb*$rT zAx*5{Vg*sP$#?Cp*yv;;gG-JbS72|bt8M4oKKoj*Y%K(FM8X5!H%;xG-cV!L z`!&?!zZXJY%_& zc*Fk0Syn&CagC#5T7-fC1zvFyRaUxs24u8W z5Gzi&Faub;^csw14og#&?q%}B$ONQszLw{zZc1C&M#OzA5|u$YFd^w*HW?6pnSiG^ zL0?+Kx++l%V&_^{lO?-&?1 zkelgC0@uslD0_bUZx+`X6=h#&URx~;M(;UwUUXuh@xKdSAMwW}^F{?yW(a@IDjuuD zG~i0i8hK_|fU&M?6NJtv=L~V1cBG`@5xOz|1|bQRY@9;c+P=g{!O6-(FrtzD09ww1 z{=jNKQydy;NU3ppdPxSs0Br)Po#yp&*+W$4X2&sSy++fKG%^#MB^J7X6JE$Q0++rR z!vDM?O}AfdR9fcb-09rw|5{yM^;0$|NG!~e5Ap=y?&5(l=%L#Yj)ivoJ>G+^hY)mi z|yO+@_+>L9p~pnBeNG5xX5p$Z8# zWz=%`m*bbWxRBJ2o-N)ZP;Jm4H0fZFcXCCA2Wm?lyAbF3v>1NhX@LG5_?+h$% zkvUA4Y$`>V;VmIeQnkcuRq;rkr4j|UBEZjTPW^}-LyhkR7%aK@LxETjSe;jCIAjDanJzFG$JFeY0!fja`L9|rQa`+hbN zay=yN7M&&BAEq0dE%YH4zW<*Vpj;gbdst!r?e%$&%%GJ6@v{3bn%O?~tnf_yGLUYm z_k-sskg&gO@y|NYeK3B1!+#mEzcg7nD&lapgF&Ls0Jz5nht*sLVy?-clmg|D{5I{Z zJ;AQ}tZEKB)hwS(#HR+xd@}oS*uA0SB^>6kEDmWS;%%tu-@%s8Hiff0ZY!E9aF4|fEzKAh>l zUe~@q3cWoh1WN@MVQU`IQSFUL^wJ5BH>?}w3Kal&@JH*+Sz zm&4f>nL^T#7(?)}d72WWd=1sXQrFg-Xg=Ajz`_9bP25c$tnH;J;O=#R3*2BN25eP>;@EK_Ps_-E|wvA$&$P(WwsL%WJwUP^psXS;Q39k(C+d&(bbsps3)LH;!fhhXr`xqu2{Lkss{QKXm22W4=1`o%YsqbzOy!=kP z4x=Wn-dHe(4-ec6;(oC)MI$atf(ZP-Wfl9sPTz8#gvAnF%tbl7Se_@`@b5#OG}9&q z7<9toixE=(S*R3O#WImyzM6`XpYqh#EQ0KPqjO$zdaRXGbA8C*aHH*`+-s&q_I+G; z<+|KdQN+AYy421QiF5xFF)lFH`k_6}_9gF}G){@UwxhmVfdLC0B#yl^+zx~~$|g8C7C4{duwTl^)wU<1LshW-?zk0VacHR#aJ&aK@cPT^MfErO z?>X|&JOrldXm+HsdDoEHq+rZL8=* z)p$}#b0l8hk5Hi-tkx}|OiA$hgVLj^uEk;Zuc+wX9(z#xEm$*c2G+ZNL59*sA`s~Q zjOtD8`9dKr?ef>KpX0hc1Ls5E+SV&Co??P8q4BT_M>pJ?XdqTlaKL0 zMO(=5uw##;EPw(e2t>my3C;cp9Rx@#q(eF#G+o)f#@#l_;ztP(Nu zgE$>(0+smRSz<=6Q)q#P>8Pt#wRdjTnk}tvn5!)>2OQ7}AFNSi6UbOOr97@vVCfi0 zfW4;SKrrcaHe=uP=JP?@S|b?ZxAY*w%Jcm87Jjd|&8YPr(aYT^XX-qv+dHROSwi3H zK@io$dc$OTF2_KtQNyD}TOedsZroT46#SXn}TzVJ6~I>*OxBz zjM^2wU!+_vBf82#^H2FR0J!gFVIkf}(_$$Zn zAN%AZh7O+J;E$`fWJN~Z5dVT;Up8j@d|nNUEJE{if5uUgM`R2!55Q83qN?v#Vf~f} z(P>x+eSg%$Kx6k(jO7%Cgz+2B*#@h=rXy9zYo$8S^pCU<+WuOTG>iqJ9*O@8gM-iCD8>~2JT^(X$b)xkbyNCG0< zk}?;eUr(k~DHeB_rBA%LI6h-Y2*9&>M^aZHQdf4@ryhr^3tck5B_vXv7w;LL=bWvh&vKrPq_D-=qL`F3}4QfAK5NJU1|1R%O}ey`RoV*YI@OM5obqpEoGJCN$+yq zKD1YAH&~Ueg{KvD#9^}%)~8gUWtI~{kM0BvpX4ZdQu)Ul5{QN|S*@#6PilXR&;Qd> zqH;3h@p^JY6v!nC!u+Lv`H>C_6atF=R;e8H{VD}_)!l(> z#T|>Z4U$aph zmdLzruP)g>@jaQ598`4B1G1lp+I+Yq;=qzgk^ZOl7^Ha)XiG%w(z9Aq?YZC2AJfS< ztLnzJZXZ8%I$T!YHay%?zTm%I2^&2d=xCZHF%I9_Og_}0_~fuEQ?F9K1olKS>kWCc zbB6=`fQ;=eAi^q#pq+hT+jnPMRdw53)v?lQl^R-dX3VmWM+T zjB$n$=es1s;tTS#T=+kSG`V@dX_^Zb^BLo%Tc9h>%$bUJc0emYd%XTLV3d~@kx(6m zG+7Pj%{U9lSJTp>2lPB;8W=^``y^~VHQYt*;B(4uyz4lms2;QB%Pl*-tPu@NAPql4 z{h)Imc5?TkE)TdSPdBMg-bLojp!`hqO?yk=q9hn%g|qu^k@R$@<53%UWi1?=2Og&7 zkT@iP!@xgdTuY&KHk~AQC5^oM1j~~VK(^x;jQuniYJ5tW%}5PP`*7|HR_KXuVN8-n ziHWi@pBw<%AncYcqaNCm&d~HvPmdbh_~s>dhdLG{mH#^KvtwVkC%8U=!3Lv~&!+x4 zVSN3@=sRleCGoT=wX75}%3#<8zd~fsBOb7RwcFad@h0#Ql(dYz zxogI8$EPuFHN+|E7(iE!lHGWwcjHAf2+7Tv=+iRWx=C%2;t8ML1=h2q8kDC>f*611pE-lZ_p6PdS7HeyVW zoMEffE z8%J0%3SOb}=eDm45|11sczLyLPu9I`NeHileXQPGT_hM~@w5Yy*<6i*?N*iDXbE)> zwY4Zf*d9Qm-8TJ_H8GQbn%uJAJj|n*2n^~q5WnOnaA3uJSQndV5sSXdxqUOYI zN1OKQWR5N5?OF*`5M)Il5D&||V(X2OWzH057A}qX_tW3hJK52Q@H#!13p(rKM*{B) zgIqz@@4=R1lWy}loXrn?WHtm+tjDsIP*;xgzFTMGN(SSQlT(_z;q6YL)j*+c(}bTi zF&{Rxh!U&N9BJX&B_>XC?wdR`f}@oHebJI!xW~Wz#u%$UUMZAt`*=70dS=}-fdYvizbOyv zl)taod+dI!yORw0pkI4`ce?A6TZ9>kiT|vN)P2j{VRyY{%;MH>_=~%+cBe8{u$2!( z3CDwYe}1K082pwC_s{DLF6Rg@Z;f3SHs2ld7GhwT#oe6K)r{^j!z-HqX5nsVJTRlYbsBsH9B zO69x$egIWpvi7lIOM zN}$Ni-eE>qwwM{NjzDC^a_bepyVjFAKeha}v_{#tf$ED3#vemElyXM7=2iFFp)_bx zFb9OfuIjn=k9nVXfqD&30?c=%&zaN-h2x>ernx@rird4>lOrE4&`ausYUW8Ed8cYq z(-MI``JkbZYh!e`fcz z=4hd*_Uq5Ef4@7mn>?-aPsnG6<#l`BEw>HrT>?gMW|@2p3UxD5#!uua6%euAQrVgz z17xQP`O+@G{bX07j}*>DBucjXx7Mw7@=d01<^Wdmv+}gpIU)71p>Jg-khuyTPLp;_!O_Q1 zYIwrFiu|Kr5oL(enXJz_$y6|*gbr#SmB(gr->T)<;2C@~PAe&%KoT9i)?f~2rD2<5 zb5>fFC~sj|8@!k1#8a@b^I^{Z_o9@XZdB^7nTj1H!Lv7-g+6q`rH0|v2mso;Am=Ic zDf_1WKI47dpFn&&5h1|eb24C~l^g6iX4x;}B1tjVG2eoG{l2GTeVI0frF*)m=qV&s z12;}Yowb)B^a-!+CcK-2Kb+ZsdJiw;f(nr06wqL^g5PgGN17yGCj=es9vBT^mVe%u za~2B)q~#~G7Lr%}M0{YB2ws}c*M{hA8<;P4rA}T=@x$&lX-Kau?EK0I`H_&p#} zC=@8AF9&lykvvx1sFql4IvBS^ANZVRXRY~Ad>~k*3T64y+$h1zWA)PLWqY~Zy{(0X zLL}St>c{XVbb?!@Q>G3xbDren?Zx*@1Xz$0QZtn!TCyAI-K#}qq4mg{5Vofm62agI z%>2{1TKupO2XssGOGSp{qYtCUGxsF3NSG55iO66hHfOeQ>2gu*(6T-gJ8ggEe_w|Z zS0IUoaKxuIz=G5t4X4=*U)r|mPl0!CNC&#GCUaUECg^xtYl(rI(8BJOLWJ{8Nc1M%)& z2E)zZ1kEj=R=2x5s^mIkD+`$^f&IAHqHff&vb&$CjPGIP#?ce%kzQazb<^v+Vyo%oC|ekEPLDO6<$ z{zAZcKBZ^~kXj;@Hz-;OL^Zr0`BXFw7y~z9%&Z&;ArG3}ym5J8%!~% zNe?K5CF8~za~4y~$BBvMh>3`f?0evAo0zVsf!KU}v;#-fcDt06T~SOavG^r?fBii4 z%_^F|Y+wV8(E9fyqZYVcqV^u|=q(#$Fg+~fN6a5n+`)5urX+)JZY_B64gb8lZ#%2( z!0sTo7{NxGcJ6v({5~(5vRQ3QRMBgnH`qWwgdRfWu#CAFM|V^yD2O|wrZ&N9MY{`D z)%YQ3Uc{qRLgiSeHTjgUvCo_L7^`~LJZNW#FlxX~T-)d=>0M>|JzoQt_O+bvk;oQY ztERR$9~NHV?xF2B!*8<-({}9UrLDGRE9XW(6j*48Dk=O=s>@V${zj&EaKP!X_5A|; z$Hj!I_~bj9cM-&I%3t1RKcXrlV7<9j4M{(k7x}q4VGNjPoVJ(S_#;`gj}e5m+qJRMeNV4$z`#-FbapeUEOL8TSGqy5&JY71mb}-pe^35OXU513 z8!ke5z8#b3JeG4o7KkC%Z^n90KQj>8j9c3xV`y=|1Jr||#Wpm+2)*@T@K znKFncc)(2B+Q5VthK^t?SnM+)2p`z}Rl(*PCbv=RvO1?bykY=-?z~5XAieox>^mA^ zf~ipi*k-KDh2UCwuJZlQ=60&c;25f8y!*ryY0SI(RJ)}?sQa^re9dNlHfH$MhM4ln#zuPRYMJ_Dwv{$S zY#{YRNY;=~^EcTr{EAoe2dJzhkYh?Wx4iCP*%jA`Q6e8w4%enME@wK^EKw5tVdaqA z$zp+ibSU^;yC(D`p=uu6-3vEL&s+y(eskv}&NRN+2qFSmLAa@u_ef6gr2@G}@O`G-$ zzH@)QvQFVVR@rd*iKdsATD}RGmrih(-OmsEOB#knL!C*hgR1+$Q%!*Ao@i9gGu3y% z?7SrK8jh&~Ay?(=Ni~Z_x%O%XPF(&IeHa6Re-TYI?@!*gZc|xZJX5~DBMesfPt@lk zX}ikpTC~)~2i>p}U%Qbpol^QCJ%?2Z9I^!CCOv(R;L7M+y%L=O1nn zzA5<_9yh*ikr@7Sl)@Q?lZc8#K(?v)QBe@9+WQp!S{@1qrzeS7e1m>c71;_!zt~cI zW&s0@bqwX3&?+f7H+z6AfVAS4HKxqN`k@a&NJbIP35N^S zrA{+|I*^e{dW5uYV)r+emQ+t?45| z6}Vsr-pQF1yu8Iv!F$TU%QD~P=6KKe$(%aocMQfKOqLcfpGtr z$@NE%S6Af`adoZ_Pkw(O^)E3PAUW_}%enC{5)oKHx-A*)sc}zR>dD&2C1mBIExv1J#W5eO@OR(kKSzl}Cl3M03OUSvY#&L2)|L;Cu+5X(x{;Z30Xk zr~`J}ZUQ!fd<;kBGOp+pzzlDQ;iN;WdDs)nr4?36iCDR8f=J(xi|$N0O2n&$$1boM zYzOu;iFH0>HBQLK>>;htYfZRUJpOO2T4k1v=v4I(a3BPm`P?@ir#TGBt)H@{?p&Sr`TVZ(^ z&iYROxPkrXRZAY&J(x6}>6CjVF|K}vvIu-jIoo;j(l^8wlmTOZ&UaKXIi!V_FQC>+ z$lml_}*He$*nW?pUX7^oaX4++^?z_3O|b7S@x{?7m@Inf+L!UTmuSo1Qb& zFYG8b%l8~r-;B+PK?;uklPHsR^m6o++wXKwznCHg$Xc5EB2YHe81?FA38vRK1NCL* zhb!lC>Wf+Y>f_0)C! z$Z2Snf>a{-J^-kvu3wC#g62bZ`GwbF2LsTCrrYk)4;u*a_~Rtfro#@@itL>;rP83x zGmt3}Yid`@J-U^udVIgM|StvB+C`_NTSzFk+NI70LJkNW|#mJIw7s)&EVbjNW7nR-mXd3wBjnKZ`U z{`w;n@T=3qNyKg+7^S;XV{38J+VRNtOuNM6gj44Bjq;~*fTC8oW~MAI+1XN$MBxz# zdvu$2NU-Vs%e#4|Dm7(derq||t3-|E42okScnrb?$!=~V%*)pxcXQe5%SsPY3FcZQ zYNw6?*Z7wXGt$Tfo@M z)RjoB%$(daNi4&TY3ps3IPbE}v)?01%)vVq4S^=i-~$BR^!{7n+ALVz3_MLe8Mz<| zVR)pW3@S&uXoZm#=3U&5Ij$KhSWpgc<;aT$$;fry&xgXJiHYw~n)SvrC`j!m(u*3} zY-0wcwHmd0Go-ikfgE?j>4nKxhEfKJVLIu}*UJ&9A%Vtj@YPKQB2U_)cbyDm1YO_6 zYh6lofiRu!IAp-rje9X9eEi2ikkGp>A2nAMBX#ls#_UIbMoHgG)*((~r4|E1iK!2= zux>TdDo3nTRD9pTnHJL0C8w~<5T)bEDbaw0tYq)GFy}s>Vm8Sd@F9G3gc zpMBB+`AsYjk8heX0$h5q~*pf(Q!vVM9c1No}%7E14T~BJIN2Re- zi&t+!-?C7vfNu!fWuWb&6<8NMM3=Nym*%IJ_D6NKJ;U&!>nsK7!Em1~PwwgU7>r~7 za3*AIp+}BkYDqGP=W$o5wX|VH>#?IdvnKp#XO<%(^M=STa<)(KuXCf|=ifI|bGvte zMb8B%7ejXy)FShb2xA%+&Sdu!yHfqTRqJK6Bismv6iFomlxYYLs<&n0sJ<-`jc#hO zOMCO!uT5+~(*${mj;zZ7;{G%|W~$4!5fC4u{KSv9(hSdq3Y8~+%~6YRd(E;J{MD|? zeb+7wqw^I%6l)){e}x#@3&kNz;yHPkJRt=)f6{LBvuK8<0oJ~RkIF#6xReM^2r4?E z1~9>zt-?ZPAe&3bXlJ4Ju*1b#>zgniGl-#KS<<+VAqT&+R!=$*M-ou^J_+ul@5;SW z!72dA!go5!^wi+#4Q;RBLTXLJqG~&%&PszK+dG}g!H!rdhu!F?F!g!mxVE13IS}&` za3oHgAKKM0@;A7c}IAo)4fTs{bQuoSVd-of!=7(NDRdTYh`)zr`0dF{@G8*nIi(?C;KW zbFAyfPySrA+5fu>kZVeLrk;!ub593NNj0?hgTphOcx`xft4(L38iL$G-k~xb=Av3y z5djEiIp>7wpZI((+*31qVx0XsDMF&fR$OHMYEb$xmM)7gHHeRUDp~m$ z{7~D88Kd4m)MgS3Ea!Ky=a(!&9F{2gp2H`I!O%ZCz15Gw!r25z!9i$T4z$dhtreT= z@`MEM(150tB-)CjFAv>P?Pw!4ruEU|KYdB|!m9<@7|{lN%NZd}VvSLbmwC{#O2 zmZqIRGzo$eGNuA7d79ovLRQNV={KABFlXE{`3dOlwKhNaeN%La3d=dlJ74ohRN9?D zL`hlUr6XDy6cI^IGo~dj$xcK+99VOOeDjGTka&^_48*Q0$P@HC)1%unE*8ga+MtSGbWMzLN zYe_K^J|F0%U2D_!FY3&S_%wOVa6Pybm>_yan`+RzOr{SmN2=NkR#r>5psV%}LbYBt z9s4*xf7z}97&L?{q(`s%BhD&!4edSy3>P$nbAPu`awyiIou8DGPigL>eKA_lgOx5` zEt>G$pX+ok)mFb9ZI;zqlH`T6`Au8{*{If8+E45|1#1b%DL&>Dc>q|MY9$H{29{Rz z#3`@PfedN|507?Um(`nI5hVj2mHBp}u1#{6=IThqPe|ZGs00x!ncKTFY;xmuH0@t& z#0Y;)!;Y}+#5PLe9UT7@E>hN3*GscU00O~U8rDLnl3@&d&6vmNt+NL?7`(mEHAV*s zBJwbpGj}WfN@xN*PakbPf@ z+O6idt$&Y6j{DN*|5IQXw!5%rn(dEG9ubHZ&kfdwkMzpVjleh zZ!gh7+*C&dXPK-uct|l|)XNF-j_0@f`rEm_vL)yH{+_BGkt;-$eTb)+Z!Ss1wcmzH zJ7Xo9{NQY4??PH+<`duFo%@757TlQm!k zPhR}rsx8il2f|SXU#LKatim15=|C%;Br1%b&&eDw0Tm~oo%R-7PXc>Uu)_uy|FK9g;-lnrJr79(|?`o3m7 z$*uTNqDpPOQK`y7b(CC4@#B~c+q;6yTc`?V&o>PbS=`v+d#y9hG96D9(4YK5HDcmD z#Smx$cQAx}uA`FUb#=o`W7hZtiT_BEGq0d_pn+h)n`1;awz)6u=Y#>pA94}6oS0=b zI;n5ZMTbz`Fab<7k10329A; zC_g_qW{W#XYunHwvPq(UU)>L@Mk`yb{~bV8=V(noYeGFgAqt@j7V4dCkRuMlF%9im%Xz)`{haz*FgBclHrxdyHA%5^Hsk}?-Ax=}J;Nrq! zpoRh7cp>0N>s9lkP7lhes?i!9TKULQR&RS!E)Q9sOEbz z6O8i(qP47EP>NTvjg7PLm*-5NUz zPx^9twD<_RE9htuPz`+!Lkw3%=mL5nT+jbrs`cY2*li&FWR}?b_5X$Cl-`w5dFe=V zkeclo?AxyW5sHm^@b0zQX7k1nlsdeJ|DO(5l1;cD(X0e z?1fQa9>sEFKEV(89FbOPbrNGW=9Sc@qkb*|0R?uilT2kg6H%%f+=FE7ge*U8x7tM+ zUG@}pNR3M4dp{}48m*Or2V|BK_+rZG^eyq7LbI|jC0bwy2la7-ysalRzEeS3&v7Wy z-7?e90)JBnZZb&x5=G>e{Z?pYTuT|)86jBB@%GT_W|LKn_dp*S8xK4X-1BEezW(_B1y?NQ%_T@dW3HjC&Q6ajXa6V z%Mro8F+8)=A<1B7DUg~Uc6?X{y`!IIhC--;+S}hZb0nk3K0cs{fTfj+84Sat zRx#K7jW1^23ObCpWxNm)#UP09FU<0|oW~sDd#Ry5S8&_%7o`yU5}lGI)c zGal|2_?u#w{30AqgU1p-ZJ5UR=~JvlS!?Ok*As847|dWC4EPD8AE2Qm_pJxxf`pp> z!_C4V9}hS_+5e2lxua_iMAQqjHB;|^++_h+OIKgWKrKpQuKM}p^ZA76)L7p3 z{UbH4M*5%8!3{mzw8vz~#L6b9z-8=^BIfDH98GG~U@zeuK;y?OK^m*(*& zdS?EBF>XlX7ZW~E6nwDwmfB4J;acAA8;RP)c2l(pJV5aGgo>>|LZ))a$_-gd9r*~5 z+{bCDTn~ux;%1Y*Ofu`-S7MXsH&MOxJmx1P{qFWiPhR>Fu$lM~C<^oU4@Txg41WF~ zSxX0}qE*Tvrrn)KdTMkxL-y8|X)2dSy$jx4p9aT9iL|Hy6y&XDIZH`eG1gfbw4tF9 zq21QJkq74W8L=TryB}|qCx+m%RTxfdeir1R>0`7mPu>a%LSOg5mRPrE{GTBg)6G>( zfKQNg?vH6o$BupWBD2pB-9#{Oc-Y$!OqGA=ke{rZA-{K#8Kt!&odkf&b;6tQkoDZw zR%=d-D9wAj--EyvBqA%ZEA_idK}CKq&Qev0rI`MGHVVd?j`-q-E3$gL z7B?>Z1rO#r%3WXAP%qH@fX{{Nk4TYs=8_)1a;@(++XTuR`Y`&d^xM)wt5WKPsB4^z zk=Ru=vgoZifm)?*d=!2>gkq$JJHvbg84+d*88tmR-aKOYmIXE($)jVFyI3GW>`O0g z-X@8XGc|BxP&@C60lU22%VXtK6KWmx^TftIVtWdKU;iO)tQZ_3Yk#F&1ra}kEwa}Qf2>$eRq0yYE%9f%c=X-YPg7)poA{b zK}2dvJo^_n6kr_=l85a$x&QPYv4aFP<`!P=U9}G4)3OU+o>_2oL#c zX_G-bKLUI;^p?%>HQfPztUuz-N8&t+mpprk$q7-Atal>UtCmleNvV`c9#9k z-spUVt;JuzVyAd*!(Y~Z{NZdF*nZX3-ye>mq^cUavZA5W>eRX_IF|BK0TMIxJWNn9 z49Xa!$YD5!xQ{3}sQ$;c4GEWpi~s!k_2p)}$3^2ZDlQ0jBkbbB+4a1K@Nzzp$&n%C zFW6+WI(N=D*7gmM!{bQ)d6NGL2daVr4ghgO#a5`-jB$HE+Q??IL;Z()@>R`t|9Z^h zw#EM({(2^nl9ECNSk!6MdOz8{@KaGifl#?as|{_H>8HT4_i;>sO|U0K-~8M)%GWi@ z$jC^-vhVACuNw-VxNuKka3z`?687fueG{-mf%~{0MJQ#|;9x8jSICcFK3@>2cs2rr zrR_0bHMr8NI;@F;JOA|M=jSIh9*XIeB=HRa;Smi$@G8(7pF!-#*IR{Cjs!-tgxQ1Ho%C5BTHy#WCRGd zMGAhsJF^4}&j>5miT*c|Vm^n9wMLCvgTUI(joZ7s*&2PJjc$LEqp4hsAI~6})OUji zZnk&Q$YziNzvFm-M3(l*Oi$kz00!ak`R-{L=>2dSia{gK`Ig6S`e^_UXzIO}&(Fw+ z7#WcQ19O3j#bpCuU0nr-Z?@l#8yowXNjQQ#v#>w&0cHR~L;sYKF%5bi_J5cBkM-+p zsVaEU3JX;@jFy~S^ie%o?1`)MqU-b3no+LBUXYfI?;IymNpv;M{Zbw1zW{n^nF9EV9OWU)dWxaq!)MJlCi+{W$?(#Lf+ zje)^I!_$R7=ma2E=74Wo9%2C`x{$oQyr5btVY0a0AEj6b>H!6B!vJ>b7{K*xv1A`O zI^p#Ls070P185mK9>taY3W!3xMM%?+Kck#6f8(eOzBH(p;4qu$2}Qu!cV683Z+a<4 zD1b6RTzPfYPQEhvTyzJibfIC7?JHX4LzYs20UvcZi2DlRO;Wqw1a8acP7V&0nUN8* znROE;24l{+cOhW5GxkDVSs7?6Suf~QC4>PP^f&fn-e+C4vF?dTn1#nEHSyT+ppHCnQij`QWB@v3d7TD3wMsvm0dU zh&Z=JdY|l7Nw>NuaL((X&pY2x6g5?;Y8D4}{Fjn0+Fjqcr}DawKV<6yKW#zS+ZLA> zde?4=ckRYzc7Ko|;){g)l^pz)wKe4G`hfee3AvABm$nQKc&$0HZMTwx?)tFnc&`%e zd0)OCV|jZd8MsE<_5y`S0Ob?;|1&ww4$qK{C7i;GzV8c5im$bd7}`v&`j%v72h zEWo|~{JNX#D|8IrH>FRtkM*y0@9C}&T=sW{)Pt%@Nsxads{O8zGzf z$^5XOdo&b;51xM0Li22VSr#y8Kh^BX_v6L)gc{sB>iMRjWBcihaxW+k?XaOBC%Rqp z+P3gmw5ELqgh3|4hE`O#RF3vC{j`Axxb@tR8g7Q!+;j0L>J{Sl8XBfbze zUu`5WTRB~WhV}Rcmt5yG>Gh(`*7a%awLU~mX*}=^*l|@MSpC1rIRXTn;Az6vwm80B z>YfXE;Qkp`Gd!tZWN`)Zrk7Otn6B?FVAa^j=+&Pe*!&q!NU28*+X1U>6U01Bzx1yc zv%2f{?rG9Z&t#g|wgv$`qZZHVJkOA&Kj~=KinxW^VQkc!?BDw^@8MyG9(BDx0l$5wp)$ z3nm>SPL(Z}IZya4;p6oy3UZiaWc8GmGE>NC7%SLhUKE!=E4rwg?8(+2s4AP!P zW`&G=R$K@Ls#P6-P2|_-fh>n03}9lEq3=Ivp}06zK}V5Jl30tC&uTWi=~xQg8KLry zf~Eo+6d<1ix)#M4po(4lUxTanP8s&Xm{$@V;5mma;6s+#-W0acNu?Cz0{&};0VxGU zDX#E;-%u`<)pY-F)f)VS{_($NI_0I@|E)vtfd98Wv;Ojb5Z<86*Qg>E z{I3hjrImc36*oNyFe|K?jg0zPg_-mJdk-`Ow;n4is{?;Eq+@fJz1@Dv@~R4DbnyTC zvYjEwJodYUvCwqmiV1x{laU|}xBE`uehxN2d)>#k_yJ3Owsuw({=c4;Rx*H8^nz8F z(&gyV_qnFKBf7gAgBEa&;_pX5f=smQio~G)zc~O6tdapFxC>UImDIE}!=4?5o8{)$ z-A+HX_ZR!lT9Xs{mrA`F))|UG3 zkpImT=ti^%Is(%9+Rm<-^?O!`& zHkV}2%U?c3aMCjS0)wCb&G~=-YzqcynmonlyvR<-b>?&Y^43s|WZbAV6yRfhhC!!QoA0TMrE>Uu8F(Ny)B#BM`~mIy7h2ku;jnF_|C==)B>!(K3+S zxVNu$T^8}RKlpqqe(Z8=#zep{s`EM&K96fOQm;fBRfaYm{Oh8!#Q9v?2mj0f66705 z=(eoBMlD`op~N#P_F3c6@#U6b;0TyC7&Cc5c2?q{-DAj3!ZesOT|mE7t{X@--zld4D-F!V&}; z!+iw$WZyg5J@8`NARHK6YcNLp?)6^jhM3Aa!-V6GB2$r2PYK09t*zMB3y#^)nf>Z+ zDqnv8W<8D+k$+F-gwQOd5m4J51qae>&2O9_GjNPNhyLA8h*r|b2%OzaLn+fzLJUkK z03mgC@>`dBDiAtqgQtrXR%ut?VA+p}FT*AY8dBeCo!&b91^mIb9fgegog+sYIq9)- z;>9;x-D8bVf~=)`DTHcQo>99M8*5Br%dF zjm4*>on)mj4T6$Mulb>As@xY)Uu|lGo(n}^RW5P6r&1!vUdTQl6xP?&=x(bAi;r-= zf{zvuk!i@|f6zpz5ExW#sU>8S;<43;$16p6HIS%gvSf|zspvNIsxHO@K_GZX^+$v7~*Ej`3<;)2||v#v}5$h}+47DR;WVD)k8hd#(aRnuegaG;Kwl zG-yFiy6A^|G3Q`gRCIU8U+jt{Gg7LJP;YBFV(jt@gKjF+%JF5L5YL9#i0Hg-Z`szpI-2~lAR7fpZOO6>J>g3Y(YwBQq>9Mpu1EEtN2udgzGa?f)%;wcW zH#N^eT_|o>)<_nY9eOEneA?MoDn`SavTS+r18kgNxX3x&G4_T~dM2^f2Cf<16|8JD`M#)v|cGanGy)VazCh~cub()c&kX4QZ{IfBnR6KM-%90^i z{rhNE+TNB+ohu&wPA;kxN}GvQNXZ1D2}beB&2Ez;6I7&^`djkTgyeRxG`SFykTKwuPS)`=c42(Je;d>1ypzk zds;6bWxBif*E*oGuB~>~LNblS?p@cKk-20IhTL?ZSt^ep^rD+kT(gSCt|Ra+IEqO9 z(Wp`qTv+!gR;|VK+g^Y89;544ROZbpD8k7_x}u01mBom_Zk~~VixaE;G}bohdp1?7 zz?yEqA?C9{xIY0auG>UY(T>pziohv4qkVT^Z4xpnjU57o&;Ok%kzR*pRgXT`{`vo#l*-{m)odLszYFoDo!Qpnvjpl%$T6|IqJ*ye-(3Lb zTeQ2uZyKxX0T7+wO6Ued62(aAa&9`@eDCfYtB$j%F-f1)=Vw?E{{*4MeYx;G2ep+h zGL07-iq9o9;=u#DF1x+sD{5)!;3~>M6^OB7Ui%bN?9MgL)!SEvt)j5PcbZE`|GV<& zjhuI_qi@Y+p6ZI-Uh8{RqrrNEk;2FwQA&XE?Rzqm7dos-9{?lrvh2V7a!N-3U#P-IhTReSYR#MEOa@-<+9!c z0#T4}XRt#*c2GkTYEDy|!_cXyG|J}l+w`ia!{*^owO(L`fCa7_@j^-10#9KjN0lU? zhdQ^}s#2pBUZ($od}|$hvj#^%+5+T{J7>WnG9Mt~y!VYTm1lUF{enJ5EQ<%BqRGuG z$h%ppI)6{X!HYV0T9RUi`3K|#$(1j1^s5F*g|BO0fq0U2CC=aftZ=djqt|4leiZ3+ z*`mC`io8H`s41`+OIyKT3RK&0Ge2<7`@8$iVozL{_pS;fFt3V1J$G1LFQ#&D#e>qf zIj8o0;0*}b?iZ5z=^Hq^@p1nY0q1;)5G_YkX8qwO>!G+$phW*-V|>d>Z|})Pq+OkZgN30 zLAwnl=DxU$rLEYV?w4#gQb8M5=E#odvQGV7@M#=KwSy2T)l7)GKn+$`PGq9x10znN zmOP_}hc)}ne;{p#ga-Z{+%^5smqQ>;L$Zc}v_! zoTq8(TLIg4wI#0`80j@7&aQoQ5bC!B1e?uPeSa_2Y@r7KZ;ek6>+uOGsKH1aF~8!o z57yeWyw7}d^upV%HNMZpa-GrQC@&kowtN!A=XXbVPN6t#p)&5&(6oE6*XQ1}gy50z zn(rv)bZ({SR?Dv5Wo&~Web~pRlQ0^%1Y|`WjjcJj&@O*F#-lSxONs_c!FbZqLt3tP z$#E$9OQ)}XEqM*m=>BPi(gx-KA=T5YBZ&`kX|Lu^NEP>u{zai5WU7HO#1dL-zxZjZ zZr_=yaOSfttDWQ)Jm0z~A~M;*L6@8<-_%aI-9h5YRd5#j@3lT~=0)#_x$_2oBOdAjPY-vz8%0~x5`L#sB!GKV>x|WZE3GZpu zvf-iKFyr|+GI^3g~Qoa@lldTT%Mm~pJTM%B^94rz&m z`29UnjaRYa=f3@2TV7@-zbzH}_C@#^{Ci_I9KWfnbl7#<6GUwn!bI~}TlWhRU}4(( zN{K41gwpuKg@K;^&)uU9Y0tE8a~YU~JgKW^%!#Go^IhX-*VQLiEAzskn@v&yH5o80 zju}z>{9ocq=U2wjGCfYAz3%cw`xAxVDXin~TffM1XB>dr1#}QWV-&jkaz^5JUP$Zt zZ=f(QM##kpM5q1cAt3( z-BgGO^7P|9^W&a(J=>7PMcaI`gxLbKTBrNW{i2FRL#A3+GR8XLcq{T;8pol=t(|El z_70kWTr_-VkLW^EDI}nt7y;nB`04-hKxtI!&)~|-yCYL1xik-B?|YqYn@q5BzC;aA zLRuOuDi8mgAh)G$EmATQf8`D;&V7kD)Ux~*EZTi8w@nGEy$55|)WY8uO zR{XwW6m-JM+HQwkM?X{7Q;l~es81w3?91h%Rwx=y7Rf;VysUCJ+(aaZV|D|C+UaQR z4%|8r#Eo0yFjqSmeIOFJ4Xv@wSoYOOBjX8GS2-2c^@JKn6FER-J2*v(={3ai{2)|t zG)NeaDIP^G5T3qWnp#~lpJ|_AK<*ut2#m;m$7{M2-2b@wOu(yd@Q*f5u5DE>FnRym z(jC_xRI?(cw7`JMkj`lD=ATM;rUX#TN7QuZupPu_L~7Wb{XW(nBIpb_Jkr_K*SH+W znN^d0?u#N3Y9P1Lsg;FwZN+~^570PHyE+c;S~MES^Wak~V3S)p@B8x`S!2TNTyBOM zf(}Y;r*A?@O_tCw@oLE%S2Qo(zu7ej6~~ac0XBC9W0eFAbS=|kG&S9?yB!_DWk&<< zzhp}9ik~g`+ot86S_&<4Z=-2oL^dlR(=%JC1}gZG7WEhlq00vWt)Z{h(hfwYp2fXz zv$)zhoXOm=JRISeuMwbY$B2Y5^!4xsWq7)*W)MzLCj<$sxx#fciiBvrvuSDH3Z0iB za)8bro&IqnW(5@rd7+n z5wbr>*Yc&oLbT$$uHF53*K9|z^--wusCd5ZOdSf@?l_7X164?}JJt!~1l}+TnY|ceU6H#d z-_g89hX|m-2;!;tghF#O1cO7os&?MpU=Oc_yL#dVwwP zI}!Ix!%$b_byQsmZK9!lR!eEA>x(G47SYI0U9Kz&5zO+(6mcq>#*N z@~gQ&q%+D&MTG_d3uRlZ{UId-JUXqO+ulO&o-@km?)1>J)UPFXxo7-5xuoi)dX$zNL$|6?#h944ep3~qOu zbIhpD4V7!6dz)_VL&wj0?nn0o{`xq*eqAQAdj;aEiv8;x7SI-g4SkKs$t#rm+u)Jc zQKrmq0id{pJZk?nbq&~rk!(WjpYyW_|VYLhqr z5C6)F2_r1Hzut)t-DdpwnFSw(n$fqv3HcE=VF}yAT+zkJqVx56b`;GCLfrfrxOB}^ zD##BLMEE@Ei5_PzTt{rgWO0pxEKpw8&iL$XxtLRn0udedDR%79U4%{d#vd!V+`Rh; zN%2w0oNh!d`inaWl}Ky{;okjKbT~fF=5gO3o>Tf@SkrOux`2yCsQ4G?Jc7$5Eo4d#=rl~ zfV6NM=6@F~`=3a0pdr6~{aX(apQg2;v1aW$lvmev+a$26#zw@A{0=7rEI4aZ zv45Q<3v;Z$2{B`TLWRl*R@M^$pzcn%bp0M;7R*M$>>$+V**c{5FR^tV0NA^qNnEv@ zB!&&J;N3nZTwdiAH*fU!R{WA^N3VV+q))fubgBdY_BR9e#yha!yI{QjoBD#->FoG^uPF@g7JP|Blaaa#O?c5 zFC&hpI*>o#jyK*n24K#+_dzgwN}!j;ud z0h^m6J>Gy0UN;vwD0E=QfF+&P0y zu$oQyYKR4U$l?{cWtIQwAhW~{k=doNcAF$_NTey+dHtG8*oFGSP*i1Ev2L0Xixwu} z*8Nh?J?kEm#Iv*D=C{gIb z-l+Z(1KHhOge}|qQF%4emMzDMDK?a5m_2oypAYOy#(tJdfM4GLqx46D%JE-V(5Jr< zp>`7V7uoTbcQi(ivB7q$N!-Y12mt#Sg(Xa$5G>y< z&16W3Q_iy`N*hNy`fSN_$%WpgP+VPRK zyIqr8e$MQ-MMGdocP1v$pG3hW0X~5gQ{}1EJM0|$P9X2z=bY+JJf7oAHwb&z%9d7#G%9`0BwQH!{Lcx)vr5@jf)&443|G?#AwKocg8u;Nsj6R*8(6kxb$f(?Iq z(@p|*_MQ>N3pl29902-WKXol@bF9dk9)Q@W`M7@PakG2ZC9Odd>s~P@5(jz( z;X*sIe+k@5Y#})79;E%<8WZQs$m#F;B-$-*5Ta?7&&) zK-`!$50^%Kqk+ekOkiv5U~AXdrt5Fx{js`m(H4R|eGFKWkSw=bWdkeo8vy9bXzV?7 z5)t7eaX2ARCcdiN(C4n`;R^uY>tm8Q9|AzG;6;if*NxG`EO`BWqquRu{>Ti2fo|Yn zVE}i<+HrW1L$U`Q!6pnHU={{&r*8~kp$nrvwn&gU0pR<6O_Fhp-EIjaXHa@a8Ng;B zMq&fqXe=Ip#~Bu+g;|lhYz4}nQ$wz`L<9XjEjF)7jb4A<+Jw~Bgav({2c^|moRW%_ zlP##+XhlQO0958^;E3+_Es=JVEOiP{V)msjzoEP&DQ{v2A`3B4#El-?T8BWbBifqYHP%WE+koYhfGL*El82ga7k;Idkli@O6H< z6Kkg1a5KH>c_CYPcb&HX?Q|#3EOlb-beo)uiDQ(Np_)K#JF@+sHD0mG3B4XADM45; zVK_GLJm|UK9dGZJrpFliw%^nG_mkRMe_h_#h$Z93<77W0&e=oS%(#`<+$i6F5Ow$N zK;Bs z?TwqLyLk%@j~?Uk*6lbGXu+v>`{9gPV*^jU-(U9UIpi}Qo97C&;QWwJ&`?#4+X+cH z@!xOabU&jP2%ZVD;^ce%<@;w0!P>R-Gil%LXT+)Z`pfZTUy~iDdI!q&o#JP`1HG)` zXzBaCr?9JF6HoJrr1|^$agLlkkNHzQBELmWZv_`lyo}Q%`(iX0(Yqfr zw=JTxNC3@=R&*RadX8)ZsjuAPeI7^8=x*S9J45jKhh$^T(k{M0t)bAP5xL2Yx_k|g zG!(c6Jm~N1;=&>UB6^bA`FLKw-&p9D?+6GXdr5haY@h4mRzwEUEenS)2b=K~U6ecA zA|=A>ZOnJ!mjnllMiT-8jpAM;@X!(r`27%ENi!g3{D&yovI})uFldKBL3DI9GBPsc z@BRDtW7@Q7sI08~T|2d>&FiJjwRp~!ef;9JyNHjPg`#;uQU|-P1Bo7OT_lO5Q;}O1 z4O)zyCh?@V75gh+SL>24g_@j;2uFJuXB~|5dDHgM?WXFqrEz4qQKxXcli)PW|0 zSnvnVK-MG;X^R8$Z|kSHi-%wd@`f}kW75DAj`-Z5u&wJl561_fh*YPaA(1nHD&@{g@p3-Y{)3ymlq3`;N_xa zcrkYoUhUk2tg(}M-VA3C6s+BdH@m}-Gjl%jS8qVp=m~giqerf{FN$O0kiRxSv3QaQ zZpN{CYO6=+lv#LNRc-keVZq|CI02~sfFC@4fq+$ua6VwLlJVIFb>2)}0*)Jtw>J5l zFZ|>dPW^DPXQ6RixtXXp1G=fuO@v;XuZRApn>0;y)2AD}TK|uP1I^zSH#!ytCp=Ja z&>kU6T@f3ff@)K_809AZ?O=>C>m<>C>m^*|R6^-Mfd<(o$^Sz8#k@U*>tr z%F0+Al6c6;$@%DaP*YQb)Z?e|;L+pHT9=6Gx&}l>$6@y}XLfCpsG;#DF+j(C!)yn( zww~CeSXs^mIkDyS>=q{$QO_fs*}6J+tOG(88&Gn@g)N3u+GE2U2h17kfE|ksC_bXp zawD-$bsu*wHej@;4ikszcx?C>8pYa~K#KEpz~V^`O3~mnR~%en;7rg1J_dFJQgQ)} zBgJ@9BEal1daR!5fM-UbzjKL!txU9!=|N5`V#zxEBGMWDzd5jrk=94`Crjg8v0%KO zEzgvYM71d&?sehc&0LBl9i`{rS-@Ne3>d7zn^>j(9IdbJm^*5d9g(=o4ndnYBJb5( z(>Szbyic4sf&TsbY@&v~?f}e`+0Qjer$1asAHYFBY^c$W}oyDRrbNCq4m%PQ>)Z$R0(3oPtvi;8)@6*q42cHZoZz+*cHRNlFVs)vv8{{BN$J$=SPwKU~8 zi}A7xmr++-f|{3kc&c;3o6x<=@w{{eRT-IRtgT~VS`ZM3#_AdrM;t;;ZXSxGW7&Gh z0`K1(t4xg}!iRbxyP!}x$HWRKv{wPBih;CK=do>x8ww-sjdj01?G9?%yYowL3fw2u z?4oY&CN%$yUh_@E*f&(Y7}NV|uhFLa$u|+ByINh|{N~ddH?`08C9XT>freBkq^-5a z<_)V*S*4VcXwE~Tsd;;GF@_8og6`eBW9QDD{GO+$Cl)PQgh7J_;oP}%d}FY)vqNBD zAd3X^<>@!#HQ_h>(sK|dOr4F;uy8!h$V6RTooSwe*Cp7v+8bv!S}S5d)x&fwNl?>q zBlr8_i4MS7#o|(t;KBlk5<=d_xx&>^%fb0!%N)_YpN8wX(Xy_NIygHhWj^SAisK}A zJXsRmoOIZ}*uZXnO8y~n#TJ%hia@0LkU{eeSTW532ECSRI8wYAy}xOW0k(Epcsgs@ zdbez<1AgtR;bZ{X51OC$i(Zc%s^gfm;6(=fqlX5?v6LL7!!Nz~ilZNYgoU6=ZLCHm!=7x+twg_12h5L^c z%WX?7ziZd7WwAeY>{$ML&6+jv^76vy(W9|?^=e$dejQ!9bisxV8+gnsDk?rY_h-*v zhQI!+Cp<=sgRlPvoI8JsMT82~a@@9+%DdR2Hpzg7<4Wz$*6iTIp%q_fU8iIErSYXr zMWAVF<#I*J^+Tx(`Zh+3-QETyrkrT@c$-@RhYcHsZr!@E=p#ms9EpVs7h>SRf&4%~ zV{C74&;Lh8Mw-rRf;=>T|G5vGJ-p!Uy9TGvo=3^sQqy)GW#?eGjRW#X*fm4^kxMjl z$S4+eMF$VD^{ug{7KH&pc+hhI$}e3-U2!pmK&9LeA`ks4p+4A1(_`dapX;8LFOUu-JStYd-RP{E#(j zJnzrj#1uUEwGZAue2j|UZ?XHiVD)+w1O%~=Y^hRRb125(*Oqw=_$Gck}Tl~^vAbR$< zhwG3r@bO!RQ)ki<}_~neg_FjsW^4|99FH}jIO<{ z(Y3b?k9qgLws7(Eg5R2rNI!oG$I~w&!rrlY0+8IlgEh$Y_2>Pn&CN&ElMIt(j|5=Z z`AevNp2K2|#1`pTatV{wthS&45Bm(l^NG`VnY>l&P#hbNn!G$EA;e_}Pn^|jtH-lp zqgfCVIWy*QOkj0JCX2g=y{*_aOIE(j5o6c|{A&9yJnY^Vm3Qv41@ifXX}o;d+4Cqp zeu4!cC7Ha9PvrfkSU_?+6EEg2MCH8)sQCRh?!maC`v3qS07*naRQ=EedH!qJN|`l& zDzA$yg~f*s^Y?hOb1x^Ve3bn183Fjh!4>;#4Y+>q;aA;%h0ck^3Ba58GZDH(2b^%? zpyy9o{*1yvjny%KT5sBK*W5kRG(i6&5oaz0KVhM3dZSg>L-SKt0CEvhtv~ZX|EBYP zb{{`6@29rkH0hwx=#pl)^k-U6(M^i1sD+2L7&Y7z)8{V3ta(c@^G~MP3zlKxw7J-6 z>@`U@0TLZF-V_&TYir9c!Gi}6;^xhpxNzYD5)%_yB-q*6V(0Dym@;ENX3g`)+=V`H zbRUWCeeF0&hD0D)4F2|0Z`kQvv1wZv*80rHn@EcJ`(qaurA3w-Tf9hkHKw_uDn-e( zoIFB@k?u?Gwe9 zlB<|vQa@K;&LsLz)4Y20*9=3i{&whPrRC%QxvB3UJ&y^w;p^+_px5hhB9}hZ_`_)>JVX7AUQ?`}8va4^ntw)Z9Vt7QIs>WK0{UIh zXXf*(i6v^-hq^pf6QI~(8Xrm~*)rdNrIYlWWTakSD%-*mc*+&YYc-fKeIe#9T#lLZ zmi)>2?TyL5&BKme`*?hhA3x3ycoeQd7C}0{BO)SrqVxOw`SXa6kLUB-#>N`kLiS?H zZ}Ty4kq<_VpJp0!5`X{dIskwDu_p_{+4H=yC3GL6G)~AfxZ+WB+`l$Dwv<(8Wh3Xe zIe0!{DvA#uVHfQ)_u(i_PT_qn*bs=4m^gm@eDZH>EhO^SZBi_7^!~)@D2Y!*L*;wq z`uHKwZw>NSuSf2Z0SAOXVDz5*I%wb-ruYAug z+=o5;qw2|1yuW)Ng#lZ5JB3?!;O)_4{F=7GZs(E`Jk`5$%ppPl)BBCJwJ6xMmABha zUBd|`ZxfQ(5}7k|9^UMaK>mh6JZ?tJq$&XSivSeby8twIOB{|lg6I_*)E;$YH>UYb zf-ZO@cYy998V9H*FOYy?_nq-OP#F*27m5R< zAadipN}Qll;)J$E^QqPePChu{_K}-1ZnYCexa&B9A#|yu$sPDXu)4GOdlYJibxS89 zC$F$YE^Y|Cc!s<{(Ke%1qB6cDWW*RdGqG61<-t1`i+d6JPZH* z&+aTThI>s$aL69~e(Mg(%N5rlxhgj-9DzLU=tAXvK3DS^9cw zxZb0BY-xMfL!9wT9}TuHG;n(_-)VY2zLcafeyEb9LGETM{XuR0=qBICO3Rs`BiwY* zYLpCbavzg*lEjEkr`#w>NKy^S9{n{eR>@sV!juHwEH6DLrO^8K`xw~rNExOy_Ed#eiBDvO38T2bO7&l9Ga|npzYT7UI?GH~)6ZFL;Hjs%lhLR>0ri9~l{n z^@aYYWDpu-`Ylj=AjOW&m@xwf!oyKiT!O+^uTfC=8l~^v;kP-9@n1i5!vGrtMvk3| zouT`1|G^_(H}STt3Y*s~!}TC*x|NPC&ah&CTV%X{>1;_54<20Hb3P@Yf%Eu@%tX;EBb{{c-HXY2+JY(jI2#V6Tng-&+95 z{cCSP=7_PV&dxz$aEOu>Yh}ytkqbB1caAMoZVX#aR?6w*edV8dX0A{&ahRk zC^DMexJBWSs4pw$IKrBOLe!VOV=E$wu-d{`EHE=1-C1xJ?F;8j-FK(Xp!U^k7Jrn; zK{12XS=|>|I{5DN zITn_0lTuLswv<1o^_N|^#NX@vgGZbI^Q5@~Q160$_RhHZ@X1HlT|sDf0??e~<7W}< zJsi2=cAOBvu0gZbP82xbt)GUcq;*dG9$maCD4&|M-`VZVrCQ#_D;Imp#C>tlnLob} z?8Gh}5_m&gbQtBXL()1&&a6DR!jUWgbAR7G&YT!P7izVrbN@*WHm_QQ%R#oB#cW;!PQBsM@udU_y0KDO zo+GOqO@fVX#AG=m_bDY|Pnk|Y>NJkb7xEOy{z5IcJI z53|P>?~yom`jRo{w)Mu_{I^4|)dvFe_Xx5qZQdG!hmRif_$UYG3*S&@EhqO-9Z!nQ+~?zniX@%pFecB=Xg>o6SHrbBc2^} z0nWL@)>g|cA?Z5RdbJJRQFKVliC%|dlTh1=T>+b3C+J#lK9=g|$*E~v)Jkt7phuc&$wQm3~qSlIusekn8T-9XWqs$_hFn7Ojby871O#o`}k8e z0*(7c^Q+})sPxQJy|PVOx4CQkiLC=?DVL>Rz>9f{@$U2)j`hoM8_wG!S2J&u_M5iZ zoLYbeH$2xmA;N70p1sKZ==>6db}InY{-znv^RRV;4^FPPM&mK1<(pbxZ|X=Le5UHz z?Z%b;Pbis~WC_w~w3s}cYWUf6wSQV>sH+aPwiN8I;~N6SQqg+oLcf-3^PN&G2Wp{V z#eJy3^_@=ax}zAaSJAHA-ieY5D1m_5z$LGDWRXF!T2%1aL968i19A(J*r4QuA+Aci z+WzIrjh)<6bmJgv5?KZ)&Wr>Fxr=C<^f~nyre&$fbflkwEgEyjDV7NmhK12CI7fo- zv^y81rR9!pAPWN}0=OghfGx*TQee2!Ip9ORu9i%nst?z+R+xDPsCjKbb*inUgb!s| zH3N~RrpuI7)*#|wB*KeO|56^EtT9*3OAGWRJ|EehXxX8N;!@Xv4g6c zj@{%`%EMR!gai~@im6OXsv^Lf-ehSxE*Eo5DHhG*f`om_2N$B6Ib5x7-}paU6Dd2_ zXmwWCMf;~_2a~uwvc{2~$Q<~ty7F)8u79MuxbDJItDUQ&}T7v}> z9Qc8at|2s5C2_9oDIlwFUX%;BgCh$s_4cN)0g6TC-%OfP=4Zup2fjXhNpIjk2)_jS zT_`Q$E(Z=qp#MDFeVC;jS7W)IwmiSpu~n7_pWCW6Q2jmdc-JZO<-RFG_>j>oR7kKi zs}7(lvYH4kvgj2bj%5p;S}TtVJyWdRo3L<{kyXxEyqOX({?vk|CRmskj^^UiZfp^x z&uLx!`p@>!_&JHu&t~l!g(g}1$}e0-?aN%efBb|?*>HInRhXIy;AR~oM>jmPb3oX* z$tWys2Zg}}i^C!Xp!pB^eN6)gG>0y8!>cGAaN3g_y7#iuuvPBjHb)j*bb+QDCRtJ_ zR*Y_@Xb@y&_cjpQ04apybL z0XDW;c*El-vXDv(XqvojlQ z5V&qR9%tr$as9T|=EDu;^Pj8xc>VTc1o_Rx&27fQ-^ogCIMwCJZv9UbXjVTnuNA4@ zY)x)?vrq!_x{sf_*{W`N^YwggQcHuVAqVExxu)~b?>% zAAH7cxUX*1`B5}YV4G#GmIEIuuh75PpvE`M7Tf!Pg zj_usMz`)5nkM}EW9Vvu>tiF`xP1hQ-2zTpm6ne&o0BRXY+q}6;DI@eXZQ(eA_2aZS73T#&kzYfYPah+@=&)#p3F!JI)3=;^*G>>{26F;%}pMe9LGB?l3@B1zOh5PJ;mI75uw9yClilmlfg6?dB#7)nW5o z2d;G&xzb>=Q0?_LVA@DM>eJj&eng8s%bal_@(?Pk>p$wY&|XmL!~sR6l?d6f4RNcq zs7h>I7ojCgoN$n)SoFBoq|vI_T=Az^fn0E9iw!pUFTmZ$&%de*$oIljE~udqaf!#U zW0?nDMJaV4zqIH(328S+EuR;Z1VYwUdf=nvn<1_`uIor{UvlS?0HmVsWEtc(jpy7r zwwU5L$%5aluZGV#dZ45SH+o2<@QnTgHCQ`K&kvmx4)P|(l|u%8GG>3%n3B-H7UG19 zTb1yEFHQd7V~|WPepl{+9U-{RgmjnLlm~v`1zOTEYFP^=HmVpI+6fvDgxh@S0g$y3^ulQm_Aa2 zlYuVWmWjj_U7YD6O&4eqV02NZCw#K*(Z!kKa>&9)$s_A#I4K@S@_7E6z;3UmQmd|5_c3^ zMB_J%UvR5TbkeeMdjE+2=Cy_6tA#e!QWhU$Ay<~1gp zTLVvBhC1Su#_ABU!U+c>4&q&2jeyk-f`ZL(9`-A7yA8HB8` zWbG%*Ia%w;`nPP#hcF8|S4rg2gBP9KwZ~jJHk0Cs$xl~45{DFb}m5FLk|+zWL^_CZQ6((rjpAt2;MSTwP z5xOG?`Nnu&WxOqSz}4&akpodUIlvCt6bsi{Lh5tk>U)d4FWvtZP83i1!qFY6R(3d= zochu67K9EX0Gn>>!J`ax9bmwsX+!ZMf-HJ&Z0YOKSHp=Lv&Sk)0uzSoSp2cO=a^DP zgoGKz=}}NOb%3C!atiRLr+iyGW$HP=o?Sp8iybl8M#FJH)YP4BA~!;uxNj)Ai4A%U z-z3QWOA}cX>3_21&~_*>gZ?J>G{y5#mM&Qzwl6YZ;&4TgY%s)Gi|Fv(cvbRoLEiR^x$u8cP=b)4 z4M?uFQ6tKUpqx?!{eQH+)a3xVdMj(2%gJq|_3BFx7H zB{6!gYuJ+UCfEM?tGbi66yjk@BTSZ9Nv^(&D1^38|wZYK|T zsvvn&UV)&ICg0W zA8Eo+w|eUq({HJjqmVi#e1nYhTWv6f?I zm_34h#^U&?^QLki?L`Q*lt#1fMpo^;d-mY4pC0cM44eeP2|>*eQRao;oA&!{+M?~F zdCiKvlXdXQb|*xwbY#mQb!7R}dYX0z`KX_8LQ4`ol*FFGC=GTk_rT$}qo}B=Z@=Sh zye5Th4Z&F}J7l*;9AGD(==kM0dElg#9m02oDTlc|{x*c~PP-L=9Q*t%gQ z($?AF)gec`iB)O_suy9!(&voaNTnuV)0>BR4`B1I9OmfZL~*PO z?uI(E1(O7hdB+g4dc8Pchmhq%k$5z%MMYmb0w2o7)Z$>|A?#i5gpz0_VW6YAg!zFX z)g28fj!0W)hoFuA$j&P=9f!^^;{3a&PyhgD&R;|D^09cd%bG20nhzB}z!05+`|SXI-A!?B47UFL$4=s$LpAnV(wYQ0&~q}&9Q8;#mel!ZVF zm3MJQ`bKL6_%Fo6jF)CE-_CX7D>p;sJ72x|2pg77!QJgtLynGF+w_(F_EtZ#0=eUL zlm^=uJ0T`6vBO*aK8JY?Iw}{leam_rU1N><6i3t_`+TqP);=%Qgq_wFfNJ|kO6(~= zqCW2_ixV+c5^lpNL~%*PoKQHN1hS=T9r zKvT>+N`!{)MAQl$D&zHNpw@xyWSl=GG^&qMqK7jsY_>tr+C{jn7WuW%av$G%yld(j z5SNsOojya6bHI*;a$5+qZ*`tmQF)gWuDH9y2Ah4RApP=f<2UX&wHMnAB&sHpn1#F?~*BJYE-pURk8v@1pCww&>MgXcPqCmNLUc7z}0p1hv zAjB9q)XGig+d}v$RzFWvC+Tr`g%&$^hM>5#()8U#2>f|RiNKAkki5zU4Jl4sKkaKe zN_-O`Kw_U_zfQX0euy@7k~2-M3nQpvbq7`QHQa2nE@q-)z*QQE&P@1 z54DK%Kz5idwk#QjqiJVN->##Mx2flM)^n`ayCcWg-&ZVs&3FCM@yfI_V2$%IWaby} z@s#_4@HKQe0jQ$xNB)~q?AW>)NBlLYN_0TIg<1nm)&5VoAtTfV!9HF%m44OqlqV;8 z^TxZbo?L{-uxq&|^1>AtVWowN0;)vqeS0df8s?A*QuxrN58Zn60NDT+&68FT82 zv4x7D2U~LzMNJFJ#e9#%p2k#1oLFyztpO|XEW6P7eJta;*_NnDd-2J~uzP?V@~J(V zxO$r>01a-)b8yA>ff^h=dDf!twL<%)!wNw2eIXHb{LEzpFCUGpeQFIk%Mk@61gP#; zZL%X$)@iY2(|TkVl$gFlV@GobeS-v%hZ(sDTDw%~C}CkPLM6u2Smc+=yDT4#)RPyX zBz3DjlV!|XV*M>HtH$o#yK%_R0Tppd*hh29#eA#rR{A!3Apf8Sp+267jX#QN#lvq= z*UUDDggby;J9ZKwR=k)Ef_>r5(%mf+_+lsv2-0 zG8UoUjwp@Ma(%V$=_0H&wf6EvL#h*wud_km27hGbnw57E;rE5*Vw5pIb^ZndyvO6o zZX4jFJKiUMUyDCoU#cmK|AZ^92H9Z!%6Yi`D7({+x9ZWL=7oW40}$P75DFEY7DurWC zNDr{ard5k@=TQ#tV`sZ5v=!=cym;e2Hv3M)?^_20X)c@@{;frU+O>p!Z-oc#uxpts zBBB%U-e?ArF>k%`&M7ECV8B|WuCYaJl7YLZe2a21pE}2Byx+xYabUR?VSB?+Ql|86 z?#$z@e)qEKYHZ#Rh_HS($k8}*f`hn(m3Tij;p4fT0lWIyAb4vCs*T63^Zs&#)}~Vl zK=YbnR9-_V7ejGF%2WEcC?8_V_&ni(w=p_|EqBC$h(p}}RM|&4z1zY?NabR7>xTd{D;{`kh_bVvWuIb8+i|THdAeS%KOLI*g`R&<1cU=yva+co}Zb zR(5{S`$oc#63$5cJ=kfBpcPYa_VR6$^-Iq2kBfZAB&Hxh?}jT@cE~fhafa|ygPTbR zJ?R7!e@}9SJG%4tr-Ip+t?aPD(E~|or}#LL+gGj?LTl2g1fYs~61^?2LD;?s9Plxq zELI1!ae|1_UP?*yxVg<58-1qX+O0>%eUg*AO~>0f=F~TN(^4;Fkc%*l1VP(cf0gns z9w^5l5|HmzBPa{)@&M_b2&a;wN=9;i+-Al}~&L0bax zszfdCBIEt3u_7L1Wn<%#6$rJ_v+$w5!7r)ios$Q$Df_j9PFarb{QX`!xwGiYv~$2E zD)VCNfS{FY@#JORN5@GJT9ZyG0Gl?QKX>USw)jrMgI#vOaX0QL(b_i&S|1fDu1YW< zZj~OPJGbLiahb9&Qs?d4SObl}*Q}SX5WHy(j<45p;teI>w6=>-spaU-BJ)wGJ%W5E zA^q}AXdQRmP<#HiMPg6(K6`}tj>OU9r_B<3 zq;}_@j#FbJY8o1F`Q~lx@F6Cpp#T6KJV``BR9lPC;bRbO(B(0-1)f4q8 z&N#Kv9>JUZk&*M-xP2M#=8u!{HGsU*cer@N!(AtOq{6yT)Q;Hi}=ZjMT8h)y;O>J4zc_q<9aR(JdYO&YX6VY); zQDeL_h!yDjql5)2<3R~H`y(O|zS0?`W~~ETBK*sZi5?B9&NvgGLEu^+WaJo&{EF4j zf<&NFhc4~xRcu{87MWr8e4bJf_Lhvd(zlti_+9b)Hal!tH3zpJW*WC69b8&ttW04# z9bF93y~p^Q5#c9%OGE&E#!^6H?eLK#gf4f(n}IObPw-baAXbll!y2c#*TS(;-VqK5;DD|>TDi`~my5gVU`sv5;QE*Esm zL$%Dk$S=aSz;#GjYyTk@G_je9JycpIPLIeH2JGIm7bRs?ou;FQAP5};5rCgSdGb_l z;P)P9VUzy?Tnx1NQx_ozfs;EZ%>%`UHQ3{AK-8hbs4&)fqabh*1D5O(R>r%e>^=7E z*^NkF9o|#9m_Nx3XR*(<99?iF&<30Q=Hkwy=gK-8B+h zoP$vmDApmG$o*H9Ox6C~aet>BHm{hD^VjYg*CTbm+FL9r{d@A<6$CBw;=~>5C{da0 zuCx|Y$2`$ZsU;ZifCyg$!uIV)sabg!5&P{c?Bj7}J~ppjf(wCmXyn#`N)njq9Ov>b zl-T2hgw8<-n)Y~VVP)yb}?BdcGUEB_9HR!qjl zYqxoR3Epm>G#JfxR4(RVWHiEjTu>5CtpnXro8pGL6pH6{#mfWs*y=qDDJRlV$Msz# zSYHr?_KOI>mX?btE<@Pforv~xLgqd_3J<&DQjiAQ{U+md`X%l_pw#`6SfGyKB5Xv; z@l)90I|?_q+v9DVD{{geaCnt7LPLU)|Js<6G=d*pYKc3|j@H`UFD+oe+M+9ICP~Cd9^^LgqC=;vwSHjK70ZB)X;dP0)gE|`K z*5Bv3uMrt_2qRqWvDR-H?mo)m-+@?xIu>ei_~Oz^oIZB}^JY!Mupyqf_WM0l)v7fl z<>5{cg!YdJz!pLm|Jqt5)+_o*BCPCPQB_@|d{$p4v0ojyqeM+jEj&g}MNE7O|6N~S zCt{!jLdhJe$n){vh;^H`{o#E<5QO%Q2*59(&L{|CjwE8R#u;VhO3a@G{&#T8Z*486 z&X|v+2b}sjbCuuPHbZpKSU}=$NSIa$xW-95@)wuVuUiLFh<`0Q`bv5LEz1$0oqa z))5tz?@gZz9S`$yU9({ePMtZ=uj}f><=>H@^ZNSr>&VVl3b(&{^$O|f=S>fIDsr9+ zg3u8V0r&-|0xngw{d?U<+;#ckbLlXlST038WFB zyLaQ#61l>#K3_A2QYvB zd=`ciCQQKCv12iG=une|Py|8y9`Cnr-(vFQ$=I`J4@Qq3&FA@~Nt5^-*X#8x5Pf}p z`8PnwcngBio)H1qLILRJ=7td?M(|CaUSGX>mEDA%o}PTum_2*8X?_ub?Gts}a&mGo ze*AdE#>TSX3knK?zrR1i!oo0Q$Pk`q&YU?|zkWTx7D3Ry$Gfbo3?3dHxOwv?k9EI( z{n#Q%=Hg4PqZ*On54kRZh!^On~ z>FMdHs;XkE;N!=SKUz*`U#K_r+}vDt`4txz!_UtTKmGI*yMgI-Zt z1t1Cg%a<>+CI9E2e}=QOGfGNI_~CBq)TwZCazb2O9M3P~EeJw;Mg(9pP%rdbw{C@x zj}NF)vnL)teE89FLi-d1`T6-Q^xnODhv(0qWw`rDvB*Ysyo=q%8G9iBmyZOjNF9Vwrvv^a0h|1KPlc%&HAR-Bm~Tp zKq@MfBH%*DrKy`&+`fV!bOb~IwgAfhrP3hkO@MCxYFjvRACap_==d~^{SraYu^#r+ z@ie#Sss+Kt$}0#$M?nN&E6`L7h#=^gu;{ORkGfi=E}V>W$3-36tJiPh!J{W1y(b8Q z&=C*;*aDi0yRx!!Dct0hQ7VxI@!mv<4NvdJQM{QF!$DDgQ0j z-j0vggx_%N_$hu}UoTnxf*^DpL;!w;0E~%Cf{oq{MMWie{pJk{3t!>YtJgAhpkqK| z`lhG|_wGN$v{?%=WyX9I7r#YOQ8C`UDdzuW>Nv;X&6^^Wl)Ob&b`BPL`(ebGDX1{^ z`WC@22tr3f1mIV?fV=gvfwQL<>>WIycOD9zlT01$80cMwVStSR-TT_Y$zwD;MvRB+ zkTGx@I##9*cnsW!je~>R2>AMMKz>0XpX(z21VQL%hyeTw0hpAMhQIyT3yZw{aO37} zT)S~orVe-vu3rD0GeKYE=HW@kGdzBhfhSL&$<#rQ0lD~J=H~M`&Iw+vd(9ODL9hr! z0Dh$lc%ZEl-j$W}-(n>YgvDKHI9pw`j+n(v4K-G2sTe}38Y+~c+ET67Ok+q(O*PMB z%@x$p_A^usMG-?yUlCJKK0>LnXr<=)BLpG$pwDyv+rD0S!(-@sr!|@kbL7i;$ijXv@&#{F{X`S=^{#{}7-6r2LCS(^Li0ILodvYocRw!>gXXs~U{p{uCWnc9O zpVePlNfvpB8PnwH!(HTSlgp>w010PfR&r18jNE1%7!OMy*ReRN4aMGAFh-UoD&*KQ4GP!#v zauNP)4b=pd^jb9Rsst~=V)Q@l@D|;4l`PXXXrcjAs>MRMej5-1Ti5P(Syf^E}b*6&haddD9D^dh> zDnDX+4Cph+{Sx?8M2;JpYJ98%FAOZ{J8>gi80hWr`b z++6bMvzYW^_L0KkAnthPZ|eZ_*wg!>YL#2u0VkQ^yq2yLZ)REu@sXYVj2~~b^k)w5_v4|NP~K8JFj*R?sq53(jyb#2U*-Vo6{fENkYH$O8S#cF%H^o; zEfAXKr1)>M@7>I>@}SbYBl3J%eCD(POch<|rqU<&oSypW=-G`sYTjf(hvJn3Xjwcr zY}<2KsysTUzOYmbBNc*|U9gjtRUYA;?sW0D*+*ug`Xl z<0D;*3*}EdM$pU4%S}j;nJpPszqiR&Zt*1yC}FOpg`Lf@JU~qRLoFUiIRDmkydFrB zi;L5@$@9Y2f0a*8OM68M*UY@(ae`5|s|2c$I$)zIkFp~>my~&IVjG#ez!NkwTayXTwV~)D ztvePXw@^7f8|X=%jt?mvMRf2}^UzG4r9$KOp4l}n&NL~RnD?f+hOe%Idf;miC*UZt zQvocS>SUZc%zO4uV~F+321rKroXm|aaiFL^N%B$YL}*FL6%!}R{puY^23t;Q`0~5+ z9b$zx6`g6A$v3g`vYx|QR}~d!XVaXNI60!DQ8|bQ1I(l!Qzd(acO{G^C z0gd98vA*f9M^7_;JvYFb&jRDlfwsbE;3#%=Rs3jxTiirjAKLb}%|WLxkri2dHq<%@ zKtj4Y`CpFRmpYX-IQ#CWR?B|8g)qTSJdsZ$xj>7)1 zY5RJ1+Of`=$5ii64d~)3IH`8a0~PkX=2LO8hMpe1Ib|%c4S2IoC}5TtD-XZuwtPo< zI=%U3XEoGw0~ueY;=LV+#96{!Tm-*(30Oqq4_=vz1J&2Q$}enQ#q(Ot&plbq=k4z6 z)$#6!)Pf56RboGUKyYQ_&INuG)7oRG7j*YrW<)4)$Wz%0QQ`KNAGnXDk!T4wy#qNI4#?YSP6O(q0K@GEgB z$@*S4-z{40{a_zlam}~QmZ(&^IRlDVp-WWD_iZVg^r;qJ9U0x7418STJ~sJoFWF*5 z%N9SH(0nR|EHjW%)lG}G`$GZ0uQ-3zg87tyNTb&{LrcVxA_rO2_gZH{*89LHcDW)^ z##qdZ>vU(x(Et;fSRjL3xpL@$qs|8qD8rpx7*yz$>_+;P(QKifbX-`9@JIEuCRMDB z=t%5qZV%NKF(wS3S(aQ&26&Y}wKL?%5n|){91Qv7DgiQHF_{5KVsMG@#me2uOzk%? zpI8Z7B1;yWW~u(o=f5$Hg8r^QqZ5U0^VO?+(?0wAM&%zLE=?tDx)GDnuy$JOQH~*0ep3X!zto_?Ei)cs83s1qvqct zXb%vkIv5PUikJmmqkif3!$MywRCGW*JMs9VuL`>^XMj%4QPGAAnj+3dM1!D@3M;H{ zbm@HL%Gvd?)-G=^WF1Bqp&(uFzeWR&@No}F8_rLNSJZt3-agxOV#GQ1&|=P<(g$8S?v9(kW<%`QRCO8CdNJZ*&i9qIM~ zk5HQR_Rbd~@xjk4bF*)iL!_EDo5M!yT zV;fo%c1T*zjH-eF1;D-f+d0EVamP95~ z_z4_pZ=ywQ&e{v^uA{VW&3lx~C^>v%tYtOwNj_u|+-d}p-!ftRd^sInV1vvX(LH+` z?y^_X^*b7ak7x)?Ok+O6appr)4SOKukc{w(pJKSrs)Lh*$5bmjYv&e6d&{ps5p2%Dx)cIPT8EVoms2OO$>t1ZFd)!l!<;d!gO86 z>P0}^eSD$2k^cPl^925D=d`idv6=-?VV_0IifQ!?*5FT+M8cS!Jdjx!Yt14g|5hcQ z^)rg?KCIh6yWQmpMxloUX?%=W{)hTaU3aupTnd%QNu;B>z!|E~NulI9EJ_+>u{3Ql zHa5nSu#)xOM?TUr)ox3-*NGZ>SIDCw$1NkRw$DBe&P-4g6l_!kV$YLi$cI9@7++p) zY0Eh|DfA5I6I^qI+wSHp!5~wSmW;CwMuhD*moQ{VTidqkO5yn}b=+=w_}VcZkA@s| zr)yO0-v3hnWlyNW7{#E&VW*}V@{2**x+!eyHBtn&&m&izT}}O>Ct)9`>u)>iu{iAp zket@as8nGO)wQdT-h_XkQ0s<%&JA&{Gry{w0V36?bNQox&*`9Y5;3GazI!=pxFEkn z<`G*`>iCaD=QpEv*~lO`>)w9BF~$y-Pe@Hm!^5?%(u}L*0V@s*{nm&ly4#TgG2y+e zSg?}!ETc4o02^;aT+eOB5hYvV;@3AYBy5yTG(##Vn!LAR+2G7ywtyxt#{zCv_{ssD zL%(I)%7tW|acq3Xp~n>5@p{JV?UdJdi`Io3I@F?33sp+Piiuj&MeYw^&Lf&8P8M5- zYbxU6f!Gn3r$K`98|ndW1%;Yb|D!{LCYZx4BbP2U^-Jh_?Z!mB_1`QV z`|%lm=A-2^c90A7XbgFn);;z%_v-)_!K!m8sLzozf0DIfx5z)^4=O<^N%@Hvh9_Pv z3mE;lK%huWNSxz=zfcfLhshZUfPNFimKrmc(N%~%q|69tO+jXh|XQ`cH z^vy)}TeCq?CY^U%ZC*wHC~FsSMzM)$JHOiN>hjP7dm{1zLP zv*$L*sstU;sJJ0wdJScOI3!uWJINST8kCx;c?gF^iauYG*QvX2@_VfdoUt2m=}(BA zJ46pJM|CNXOYi8hm3(>KA%Mjt8yY#1#%DjSKO*+BOt~*e+Yej)#yz`UqOOZb=-^9B z&LtS8OMPd^pL^CI=nx)1|6s(`o*i)&XEze^ zCn~NDMmh)&6w=WPn27>DUp zx7g&!WM!&e3jCC7o&3?KX|C^JGpTV-qiWC6h%Ysi- zal`;LWg3H?#ZQfm5wmoxPT9SuH-+z}A@qc<9x$goa&x`_3R!bz%D7-vR9w72eN*~W zmcVl{F)@+Iugrab{2wOs65WdKVgIhs14;5+w9BSBM@yGkDX`28uuQ*7Iw0!M_1=hw zV>Flnde02xwnHCC@>8-8d#XkU+|_)v8;?q?I}6cR;@Lv40A8WHSEgfpCtg?8pYf~2 zGr6ESn9@6cFpw*+?WaArCuns>{Xy{@p@_GRleUt;)|Qhg0KQYja>hYYiwTKgG3sZn u%+8`GVLIpNKcpb?Uey2dCn`_rUKlp=ym!9@Lt#VD9@c#f#*JSSi literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png b/assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png new file mode 100644 index 0000000000000000000000000000000000000000..ec72f326f2a2d692d6546327fed7adf521e9900f GIT binary patch literal 77013 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%0AC`N0&6?wV`aLYI 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 literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png b/assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png deleted file mode 100644 index 9945b639174b36d989eef46ef2ed3a13a9e61f04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77665 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 z 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 VtHd>;%f(11Q}vz&kv@ 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 diff --git a/assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png b/assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png deleted file mode 100644 index 1a852b44180ffa1d7032789d7032b6f04a1ced64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82502 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 !YKS(%c%zZhZw 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 *xAV;1P)y#Uz_ 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 AW3#e?I9X)W18@@^qizJWFDP1ge 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�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 ZijelF{{d&_-Z=mO literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png b/assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png deleted file mode 100644 index f47949f32e9b1031d876d357d25b55521b48ca43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65951 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 ZuyzlLZ_V|%4gt_VxmU{4<&s8${|B@{a&rIx literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png b/assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png deleted file mode 100644 index b1f36802f8fe120628d2fe15070f90f7eba625f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239149 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

    (PL*Eo{0_ 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 diff --git a/assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png b/assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png new file mode 100644 index 0000000000000000000000000000000000000000..964d6a3bec226ab47683e1daaeb7995b841dad10 GIT binary patch literal 235925 zcmZttWmp_hvo#F&Fbu9CxI=;`xVr>`dxB?x;2zuucL>4VEw~eO2$taPPH=aJmvi6G zIp3e}M_=u|yLVUB-c@U@Fcl>kOf(WS001y$KT4?q00ImEAQUJ_FGr4$V3{u~RQr$G zjsSp;_dg2=NKGdK04hLMN?gM&{Xiet4PSHKC8DLGSx!bH+-6Guv9Z#&_MoB-#H5yg zO+W>Dl~1@!ZZWQr3cD~sl>K#G=sJ#)^Cthhw8!()_M>UL=l1eqAfg02|H}EGbAjyteTFO;4+13ozsuxEk{N*F|JRu6I9v)O_CL-3rzs@5 z|Nl){tg5N1iuV+3YUt^xS}-$~7RL$n52Po>cntJ2B{`bO6E%vH--vi|?>|CtaT zF2JxFj9xA4?hZ*v{5)wAi>dT~uSmjnjx4M2H%HrZc%l`YWPaph({;Vu!aDlC!|8E$ zzcf!zl>H4;RN=7%dDyhT7G;yvgo{3v{G#T5^?0GT-!7N;3?$X}grX0rM-;2dQFk6=VDGlwPM>8bJ3CfO;YEq< z%GdLLzfwP|h@0H73>R!xl$;2JcZZovSrIOCFAH z9UdN_1^M1%;>Yyg)n2BN-7FyW(}DN#>hf_~P|W>7yl7y!8uT`V32FB zPKJ?S(W`~IWq~ynZzkqu8O~~x|IS#`e5w7_X-yCphVb~f`}-GP|B#$y4AGq&@vr}Q z=?{U7z}q}FrqK71*2?@xhZgtd*p?!LnGi3pKvv<=zBD@PN@{clILD2r9N9I+rjoU? z)l#9#gdsNo^O*Dg+&8+kq^uqxPS=2kh(7o2dsrt_kPuz4D7$RB%WF3$=c&%BOCvX+ zQr+(wG55@>{Twd^LX9s)qnhpf7{eaPr;@R=!nCDTQT z+zc5Af*@+O(4iLxRIC^0#n+z+%RSeSCY0U4+EYamQZd?i04JS%YQaCTqZl6UI&6>4 zm0>!V==sOMQ*>idI(Vsg6-vm&H=BTl<&=9?#@BMi@M{Rb!NU69eSXSiG;U|b(7I15;A;QoeHjluFR6lQ|B zTz5(O2ZpQmmH!)=^QUtI@_qzT$$c5kQ9}q@wL^oCO#8U{T)YQD}xzwiouAgf=Q_$cn#XSg%E2J!Q#V_cPx1zDG%g&WlGsk79rH3F9_EuHiJGsxHifB{DCApRkv zm7|dD3M8iV8FS0`xI5%@2{?OvW_^SsPH9u~&7~rv-v7oMZLeJ$n@uaYDF4ilUZ^NKbntNw!{>}74f)o|-iIJ@%tcN{%21db5qS*$-IEw-59e`Z2FGIeY3Z6Wz>NeLMb)X^uP8pbuM%CpLYiX zUcJ4P4y=|(D=b}c%1$rWXE2jD>z`i?>Th(;r)BO_lXpWD1lh!OI6^@MW$5$_zQ@QU zC<`k=->#f#1tw#8DpL*2fbRu*Y3Fk5*R}mK(GaO6PeGMfi=TStJ=Sr^%Iq+Q%_GoJ z2u>_`=^J1sA2cqy7?@_Sa}r_)gh!)x%w^_VJ>-@U#KPXFCCdiM+}CV`L_rSv%cy2M z!`I1LHWC&Q00wCH%7NmDQ>J`OQwa0P=cLG@(xCaM(>wy&#~o4cLUo;S$dO%wc>Y>A z?#0@rq~)7pi{V0o@t_MDxsi9(qSBkgWp7e#Vz1ho>imDygzsAGP+xCMA>^m3<>pf$ zz~f)uek}Iv%Bi4rN#Cud8U5!1mXq~@nxzO!GkaI})_<3J3w6aYx z6A4(DXw>CZiR+~P4O>` z)L;s?j8K3+yxu28vFk16l z94H&(D2r7~Hp=sOONFj~;+k$wkj5!ehEI6X1oLpYUU%Pj^YwVPRMn(MxcHe}D_bl}THpqCpm8{oD#8|I06hBXJ2Y)E> zCk_5%v_C-kWA{mX`69G5D3fTvFOm{~#;ws=3JpprhNSJrsuDaspR)Trusm93^A3r) z{jEqBuu2m7?rMPFBeutg?Q7fhZ)yAZBfv028Jn#9PCB_{$z0S!;h4Uz<omFho5LByur}65$8o8k@)iGf=-x>u=Lz z9PxV$AU9Y(?fi%)v+!94uD;`1d?f?VspMZgQib>IEsKc4P5#Ly`XpLyK|3 z;v3)(^_Lr6e$0%j&{Pb8znzh#=Qlx|l7d~+TXf(G4^sM3+Q8I{S#hiOdCP5BUj9=! zEU~r(GU-xBS?lc<0@v{?zuVrXo;0?>z+7@m^qW1VLsV0rJ*E0{V=lU^6Iu2Bw#@X6 zeo{0w$9Gp9+z(M9sYGr(B$l~hEk_Cf!{MB{oXO~-60)yK)`+lEnE&wh_%O_=rrXN9 zU{>@kCIlb|wgOJ1+>p2_cZ`dEdoT997#v3KUuIVv^84?Hj|U^ZG2uqsLz6t}9NQP= zoB#u>p*z36J-Ix)UAw#kxuB}veT-Ygifl`Y=Lm* z>oXhND7V?SD#qE0e_V}r`p}fqvGHf-UUHjUpXNm3v@H|_-d%azVkW5a3&lv}#MaCI zf_;_K*L%kf^;=pYkS8fphWid-7^aC?$ZM{%3`W=P zmvDTI$tbF8kK~D`H__B=+-SGbugv@ShwA?M;%cTC@$Dr(khp_EwG4|PkeT;uY8Yj~ zIL|B6S5p1$`dD&cPv38>tha=I-3?`W*S}fYn4-Q<0POV z2E;IKm1FPdt%z$FWX~}$0d5nZY!^woVf_zL_mnw2#^6$u=hWup-N(1F7n{3Z=hu9L z=njOGN4yB&Ote+6ZOA6`4twv;-ki-1BZhw*G|saIq}hmjH|8U!=_D8>_qv|TM5a5? zQF{2HG^*3b^pNq}3yIV!W@HpX%Ej=5jFkNiQ5? zO|<+IdJEKK+F$1(2j7hD*zgDnw*F|{4YYR=XMA*!!vRYRIaWE}cgXt1t82|wl=HA8 z<^2`60Z}Pc7FP%7{Cp}l#L=dIM*R~2#=OHhgs410Exs1ah9}Hx1Xx;G{ZO6Yuu@~X zRwSP+$X`Pc8>1)39?35RD_ljBK|#ntoUoK@YT+m;E42hj-MzG@pa!>uPGA1sUKTtx;Z z&6C6Q8q5bJ^(;Y;I2no`3O3^t)g^qha0jIipvbzND4un!+?0lT*@Uu>|SVBauBKXEh1XP%sF z_~G?lx?TzmHHfKE4ENZ@2Ymw#0(XFrg94s6C1)y<{asaQP|OE?C=putz^;lGlCpsJ zbl&>e#qLb>wclb6h<3vbvw1Jd{fkvsU>fadoNY~4} zO|u(!Lg~txd7?w2jLuF^O|?(rJpu!e@8`$bITve$W<=STPjnSO%t~3d&cge5TVTvw zM)E>!EpL7pq~OW1j$jqcY=x*_v*uYGt;xTR(^KJ(F?$DO!&qDIt4t1_OfVi@ZHXSu zY>B+r>*CI4P2F1Y$BrT<-jZoD;EI|Vi`bx0Kj z!4+Efa>*a!Lz?@J6;>NM1n47|bzY0Vbffd+C&nk-3wLrre2j}JbEN>DInpL%uqo=X_#zt)}SB=+3p8a!F%=Hwc+^24!l}l z{GQLU6lu+fF#NakoZ9wua$qm%D`jBydAaaFQs!bn12`!}5Hn1}q7ah6zMPdR7nVp# z_=ct-ZKbe$`iF&yW9M=?QViVa_Yj1-XC|ren_) z`(hEZd81BOOqACnDbyIw@zF%ar3MZ`H8eF7!7wep#|z=+DXp02Lz*y6Ch-a1bhh17j|2ZN z>*#G)JeO!bY@2wVMzWH347$;5oLU?;?hJU&E24iwD2O))yctpv_=dUq5LE3XEu)2r z&^qE}j^9U*lG$FI9p3kakV99k1DgD$w?5rLPpjYDX@60+-B7-B8&B^_nkB%E(2Ue) zz_tnK1*1#jE@mlrL~cDvQ08E&@jmk^c+&MA%R#?e&e(YnH(>#yk(9k0O(W9g*MyO$ znb}S)Jj@nufQr#0Ip$FQ7MQsf7KH?vn1sAUIA1CLmIZZ-1ErR8TOz>!^gU}Mhwod) z5~qq4Xt?`1*z*c|Z^cz$d~R5{m`mT&HsS7?4lG8juvA!?O$Y8M;+f*}1u*;y@UW%I zU@~?QW}c(~Szr{=i8IUbezQRM(cYo#m;3xPJB&iDC`sUft;uf=z>!K}Ko{3t(RrOobFzaHuw~X#Y#T9Vf z*1_fPNAoq~GslAF+8weFd7mK-TlE$};#lm7f`_9apE4p*DCmH#O0w{%1zu|P$K{z> z2pUiVGDj3Nj~-bILxr8IXwgw3uj-P6L!YGe;Dy4jqcgg7WTA4HdcGf!=$QczddR!+@au6X|HXJJD0$qkG0#k0)O$%jk?tRoKRA=I z?f}xA%WGb(t^kML6+<~$9oYK*CPPP%%59{|9&r?J0<&dkDv3f`aPiT-lg|J8RUa>@ z?fTPgREVhHdbR}haxJfp0E&#@v|`IN~vGM#1)aLo>8 z{M#hon-GklPXz3CQj6#;Z9LrSI4q6EXD^v!_je_)-PyFNYYO(3-6P$Z+gy(JfA@^! z7^QPyn*Tc8`yPTo`X0=1OsWMZ04rX^mr@Fgj3;FhS>(9TKJ4)GQVMjGVr!-!C~toF zTwim!-P!=Cz%#9T3ESD2Qim@o#Mtdxm8;1`s*Ru51-v9wE8Ar)tfqAbRKMYYvWtn& zYb!^6kys11@(?b)Iy41+g${mt_wC_f%ugZMd_&;8YHFbjU_zNx58kWryXkcQ-IX;(4+JKgFMlDC9f`)y-lAn8yCL|w^#$u>>u>h;9nmuH zSL1YNs@Bqb?3Wy_Q>ar+F&Ll!(=g!U>U{@ZkQ0aEq4Z+=H^2@D{xGk}Ub*5S+&l;5 z5MR{#7zp_pB8X)W4Oae(|Ni+vv$=G}A~SN-7Er@z`ojfGV+XuP9Q>!BpB z@}4l!e0_{eCD}6SGHHQmG%lkeYE@0leHA-55KCaXfzwJVUOeXdgqq4OJbdr=;k9tK z;M1x|_7N|k^od(|50iq{3FV&jN}d+>UkgB627vyjnf7inl?%qiI0sKImB5L@&Y^!{#@5y*|{0Ss>`V^L?=1XJy4{?L&C?lzcy(+Q~@R60F*RJlmnktME~knN=(-nCtG(^5i#@} zL;=?4Ex(yJHtAX81`^%w&bfvRux$b{sjx@$xIJ@=dT(ogT7LN`u*9j-V#*ddxQfB6 zYO6{N76YY19{`$8rH^e>B{1!_Bh#F%3criJ)q?n}a?G24tg5H*MO~oTmEgk(f*&F2 zfmA+7TorSJI8X-%hM~Zn$yzn6!+#})e!Y&9`rT0P~Ifu{&_ zs=yAE6LrL_R2UjmNRZT%F@}nmjXeaIOQd}`jD|2p;{m}UA=6?N=>CxH1@x}+RSmJ} zU7{%BSYsPNrA2w?oWA$2mJxmY7Ua~4rL8t5E>BgB%DxQR8JczNjK=NpC&6;raV(C_ z(Y#%0WwXi>F9j{Ehe%s0yv>YQOB>d)VWfsK3sy$1H^U_m?9pJFEYL1Q*x7@a=Sew# z)F)rxl<5q)!up~gw~m+BjCDQduM!A0wfl;6z+#V}K@qRWAKUM8<5@qco-GDBb@oIV zt=xy^uAP9=Id4S#Ie1*#N||ACQX)FLQ!i@D97sx-Quv}ZeM z_P&V(aFop+QyS%BCw|bOPi!QVIdP34-*&Tyr~~4m5h=}RL@X4u;u!yS-3t!HF?7Xe zF_)(X;@X0!Rb~+K4JF*}IDL6w%ERvs1>rsd6QOrUqz96|?0^^>ESX4xb(8&M@1}=% zIYa=ei~{1c|9m|$X{C?R#z7zHQz>Z8!uKs~AfQ>dg4~)avL>h9&z03Wgo_wDKkSvI(a3WCIT%UQ_zY_|~|EnxH zWBUu91gcgAlR01oO3ZmTzb5))&$!?(sft4TDgQ;e9f>FQfC%xZ;W`x*b#SS}EJ!Qk zO$7v?26(j&U=CJA0XXcJ3`~sMveN0~%LcD)ot^vyzWIilMuR{L^oM{W5)P_*M0c5y zAT%vgS1zeGyrf$;Qo*4DrX7w8NJOl%EK$Glh>H9g*U5*WD?2vL@TzJJB(`rc<1*LiQ~nNk zJ&J_A%*om+HCEZtMbTDvG^N>^0Hb_5o=wR$@W~*SAb>pCz612yeFV9WYP05>kTpr4 zf(}jf1_v(;aS)k<#qklG+2|m%`&96EZ>Xq~gp6x$1+}=UtiE>{ro48M)wO_&Y<1>{ zTnLxKn0LNv5WF=ds6|78p()WoA(j6UPxc7!RT5#$eA$2=DmYYtZ8gURr4ykK7uM-$ z5p=QG4VYeLd;Erx#OBxMY|ooxHK1#IDV)#Z11P#=7*9|ks-)V8UHfF7utQ9_?I-v@ zcP^p0qoeJft5BTciZvFnAKssr;pw`?lc9dEJyuA#?cgZp#~rgyQxY0;6@ocf9ukKH zqk#zn^g^`1vHYF8&bbsC1KM0#o6$^j0JPO|=3(qZ>3fdRhx=`63<>Ij7ZlFT*Is0v z28x!#SGQm7-XdY2$(Igp(F- zBoA@wRl%x%0#pkMdwurBblqr(-(99^O8L$M6KDPHuU<9aT(6G^1Te1u0gM*?x>7D^ z`{SEWQR%RMnoUOB3rHeINMBV;Ab%TWBI=pVO5K8tVJJ-Zl#W0xky!uYpAA`kx$1~3d#|<^3l09!IO)!?65|O;{2f&nj$Qv_<1Lhv4 zUVyT66?eK?=TIX4@xMR#?7Bmny<5o z@$r2PlvV!ri^+&|KEp$Qt*(c~N&!bS6d(VZ+*S+D6b=N%o<(K>IDIs=L|<2b^&+5B zL7*70S1ZI$QEZ$Ond<03(~`2|6BIy!3iKw$gyhM@aL-SBD`H$45DvIhjgkRUIR>*F zB$^6UzHvRcb|}B{1-U{o-z@vi-uY|K440FG88SPns_{JK<0D*Gw5!Z-vDfrw4U}ES zL9_VWjkrMgyEjCO{|<~=c>3v+XSeAP&3WRQB?mkzzqVXyXMwtus|Q{WPJ8M{PN|}p z7)EklwNyW=Qo`QvbtR)l1)bi-a|r=jq`zzdK38f^--LsQNZk-+hOP3e*Oz;wFH;0L z()}X%%DXzyzk6NrM|zf`UddLXZhdqB4KK74d5`IxUt1UjyW2`9`n6vU-PQWk`nrWn z5FoCSf-t)#F~g7vbk?b;nEK{I-fPyR1h$Y2S%q>Bk{~JMZ6rJ@X6MB#W=0QI*}d@im}Bj?o`p zoYsei^o|<>Ll}h1)j9t_)~YdO)6GHtlIVD{)U<-DC6_YX-({M_-@V57-m~t}m2mnB*OH8SbD$RcSf0LL$qS4BonD}F6)<8U%`pj|oF6WMZ*I8z)(z!wb&Nj#!0z{}e$ zrcXF$jKL_!-eH=3rmyn6Z%LMuDV1J^tk}k8@xLp1PxqW%hE1Sb zyU*ddmi1!&CIc(!zfwZ;)+R-=PmKjRu{*Y;`%&)(==<#^z-$%d#NPr8Jl<7r-!s*l zy^h*_fL7A;1eqgGp7vga@%^CcH3O{QYjpe&B+&`xCD1s!ejY+M8!^2QZGSe=!4YgH zu2hy424EJ{8dV*5_+-1{kdPLuh1ksaj!N1DDIa53Ynu<5apZ|ymi!;l$u`ln}~Pq3sXK>!ctN95TaJT3$=b7bfS{o^(Y zfQv%%(}m5&2+Zdkb98xN-?7$%Zbr=axAQ8c)^Ep=Pr-1u@Rj9K4&A5Ab!(WpZiiJ? zuNl_;l$#nQF8MFwVxFV5;5vBWCz%?gVd_+cd$SfE=cnNVq#=++8=>#xQI;+77Z1244|W& z83-UD8jORHsGieoMBxJdsLaI>AX1*O%5({byM|Aw(+~9Fk2Bm5F&dZnSAok(6 z!JlwYcEIXh=zI9R6u+v0xU6;$m(hT>m5NKT3NEsS^=ZW>qERbdR#Pd)L-JpI&&CAyg>HGq{*KWY-{p6LM5&IBtoN%& ze&+tdny+7&izo4~K5W=AOCK zT$SKp{VUuVDOw7XWm}M0S&PfMia7pp7@m`N*Ax}dKc`y%P;4t0dSUY?FDy)jr&tLG zhv2?^PcMU!t0wsB=NDr^t{98r_A5mFoX=aqHO;2wW*iGbhFOo!vl{T)&(>R>`2h40 zZ$l+AOdkQuN?UAj($%|+yDVfZ7Fa%owgU%s8{9b5aCCpMk@Za`1!9R}u}GI7ok+ek zw3{#WRiOCCm%8IuU9JNeZ52aww;#ryF2A)w#|dA_#hdc4IFFXa~-MmV88}2;)sEXPx2%o zeK6W!+T^ZVqLbM*N!Qn%{K>8MB1ZRy{%{dmXcrKHilnBc){B88Lj6+6KXdM!lOoeq z!5;4Uih0~aU{5k8%=v36pw6Z7+tgl&D_c!^E23`t?b`IoE56<*5-$4h(*3CU%Ml9W ze>A#AI0&@vauJSS0a(91sRq#jY8V7YnQ1Iko8D<$9QFbh7!pb&SxQ!GOQryCKTe?p zqx4aK#e+k{vRGPG=!Eug{R`;~;0Qj@7gkQ;r=+Vg+EUb6As8oH`VS>sj8p=g`K0%z z^JiqVFd^%^)wviB08v!bKK8xIYfh>UfAF6J$*}e!dGg+w$90qUn9N8)tPdO`shcQ3 zOJw5EGD>%^BzVc;bf%Ii+d$^H$Cs{H$g`~exXk|yxJ|%%H@^%ic0J3Rraq|2S^+b^ z|EW;+%IY9>32%V`87&J{pN;e7rZJ8qzV(o)BMCB$02_)pe4K;4Lug-~pNUdQ)}LYL z>{P_PSjax*lGb@T_!pIDL8N}YskRFqnbwj?!v7bHp#mNa`HMoWQ}rVdC8Lh4!%@+^ekoTS^u9YrYYDEnzgimLaLnK-%E!#(GNbARbiiG$9QvrR-yBDi&w8Yb9HBFKj;aHmp5XU~Nq=!8fS*sq^1@Dlq&n zb&MA%nC)&qXT-K)hp~NH&!#<;5fEhi$wzS5=S|Ru! z><4Azq&L+L=0b67oY*K4QKt$S+Q2IQ?bCNBxv>qss5_oapXHT^EwXm=dS!_^pE5C! z$9E%4|CP{;J|@ghgem;N6iBKEU@O1X;i^jzn^YnW7kX!I^|O`~oifzy;xAUG^@=uG zMTx`3&8LsINS)P0G}Wong}BAtD%kUwxBd>Bt z5d`@ONBuK=nLF5CB4M;8514!m#+@b3iOGJF(5^W{qLOaH{Bxs^szfY?is*e;SG4q~ zs`f=ZyWvNsD_^WQ2u77j>_vDl_K9#0ogIe9LbhtdbZY|9`qLe~+7HN*sX-!hGV?xt zLzfI{KIk?v__xRjkI1_Ga&c}n{pZh#pLl@IRSvG{o%CmRr7~T&Jw@b8wLQ&Fhe+vz+ThDf>@2#%Y@*D!n839vrJk zaj15dGNfX8f7-#+#H~&LnnBY}X-Z+dC^(Uee=CPkHx49w9XC05yxy}afxdzydgN0M z6Wvv<*Su9IL*DLH(qtcMS0po$jdsstd%)PQa=vLNZf71tWX72OhncMmUbH4T-$4Asmlz zy9|#+!Eu|B1+?=6B#99+Rg`1u*)b;Bb`P*xe-9d~6XMk(;2?$uH}iB)qi>pr7H3A-?9J8--y19j0h z-|k0)5royI7z@x*@4S>?YGM;nD)28|G14&ned7Bte16e?z-H=@>`m$SSI@Wu9xQ%| zEXZLPNVd_3$_C;Lbw$|4d>hzLNssJ+V>qE5B^+?x^#Zk|)c^KGuSGN_)~Z|ctvY=H z{jI&H%Yi40SMNepHOj+ zKn(zjVQ3_useL>wa@i$1#&d8fMy--yqNJE*cogKf_o;Sn0w5d~eVy95M##nwLNPp% zxg`qBu>>uI%3{RPs8t%S2Q;IeP5(w|po}L9fJ)=+(fpI3aPRp#F;^$iupz0-1{keM zlGU}`dyd804_TpFnpT4l15jw~rS@dVXM=5{^V;`~lTBXZ+#UTux!VNnct%Ct>C(YH$IcP(d;PqMtDhB!*-l zDrsX0n(%vnZrHSGq^X_j);9{zb74{0fh=_AWBnx`D1huIfLf}f`s*n_CW-qyGi)8H z^7V2^f`}OYWC?UxMFgn}e*UY>2O<`r1ECtRNh|dCa91Ka2D?e=Lg83*M@iDImjXk3 z1}KvP=P`6@7TWv^zfGzN^pSf+z>;Z|49n*9TqN@%ZaMR!_GKOMWNkOB$iDg;unP`F6htX>h+Lk29>z3Y-9Z5|=70wB4dp20XE8}S-_AY; z8^x|y>_01%x;d|OVEIfN)(t~EY;MkPrR(hr8g?v?NEs!Wi;h-M>q?nS6);xpW*#g4 zdh>Y536@KmnZL*;)O_=Y0V*jZvqoa(;#2qw7EeV2HeXNAh2p@Q#D~H)nP%U+Em2?$ zRsH;^yuVy$$AV()jHD$}TzY34YEngKhz^Bfi7&Fk>sPcgcpF7pnlZ&DJ=$h8dk-x-UepLa-GBM(UjHl2`Q%jqC5(O+^cx_haxjAmc#ixQ!~`(Q2-EqqbAysni*0iJKlpp{Svb8U z)Gs6vD;MV%+WoJHAU&R}0$RhAG7{+<2uvm&eHC#FS9(JQ3>Gt_gyYvBm)%jP%(W-b zv)0nvCQTL7rer>`z@~mdmrco<;P5e`Vq$8l_ET9C)(^9f)?7v3(zDshQ{?{@%^jEw_$z{ZCy1VOG(le)+`G@ z{fGE5!1!Ly7$e~^>px12l3ki(9hc1BAZh19NP#99ZA43|^*2kKn9VZYsj{2?udy5d zblw7O*25J!g@+w+gsRSHz=sdtW50zN9JGY$G(oB*{k_S=@PyeW``&L+BntsVFvcqF zYi#yYda)nfJ(34v#ZnGsf%+gEPge)Tg`a>HO(L-ncFYG;%VA=VTL$#94B%~`tvH!T zbX$l52|^|xUDg(Pm}3>TrD?H?Dn)xheY{)HtGvo0(QS^H+QN~W{HCNOOn71G^mEeIV)D!_Tfbm7 zo2aYS#;p{Rw`cm%+@@%;F8qlFCB8%dq49Y)hqW)|Om_T79+&TdD;5y%`yyvC{{j`b z&74w*A^QcsB~MB2>mx^zE8+?vn>|ZO*Bt!i+reE>quAoGa(cqD+}M>ay)a}^H&kUa z!+WrBkRd0V(xY%--IzbtNVnj#(J&M**YZ$dPa^mAV(u_YX~nJZdnH8){8Yex&@UU~ zZk{u!)ya`FFAk4P$W^OiH0gy7_PI!X$4P@n{~bep7k`K(hehcc36sqz;8CC!PvLT; z^v1{*0hpYGQ~Nz#e7(lMDE1^OeVb7b)G`*e5$HEWy54n=!{+mf;m&l@o!$xxUHP^??H-n&q_yDcgzaqy+|sH%KHySF73@2p6D zjI9<&(tPF*xyaG}W|y_9S+b8xMcw!=u+RTmcKX7~>hZNWMVuaXfJf`STQMv;sv=xi z!M)R}CuvChXs8D)UH-+MyhI<00YU&GrQ0JRVUgdzZCZ+w2>%CDuO~4o^i@JFG?9tp zb0Uwv-@l=17pa?=&Aj)t%Gw!d5fxUH$6EN}*@gs5Crqxa^_NyKkWfUL6AW0yz+o69 zHhSjg@WwQq$Pi7voR!|^wcYT{Nf-T(JW^H>fZh}cd04;5xcK{H#G@AIgtHpJRk|K; zV*O_A^d5^hsa}|gIh#1V^MC!q?q}kmmcoMy*x2k7`)sut`y&|orUr~NGaku7nJ;_yPdus%_6J#g$m7ft zlCw{gz)8#o0&!r}w4=Wuf*7nRsW6zWX}?3-u_91mK344d;vzQ$DQ)L@5xjG$ZFq4l z+j+60!nw54mzIikQcd^c#?9f)<1#J0;+?r5Y~8N!W+E=nt3=kqkm2dC(i7a0nnERr&eIJOVyb2f#pej7(wDs{CG+P)}HFV%VmT%GdO&Z-p|3%wH6AmK{|7!}|^}&TsNskjQ7c zowa!t1L=xsX$$at+-I#`OEZ`ZY(Pn#CgmO1wEi(D`!pxD%^aV5w?1x;akhBLHd}+0 z_oDPgjIg*VKi_B;GyTkTnfBkP{1!kQ2p&PcyBqy}sWXlUVprKm2n4-BnB_+hW3)QC z)B3c6br za8ckBTg4Vom4pSnbNGDQ3@1}svd9|xh)_;zQozanGjSyqZ}{-xKA*~}c|j2OVMzmE zI8Zlm5oi-$b-bFj;p}}be9;CRAWcs-}DVS+Fk3}4&@B( zzKVYxukKJ{7EE* zTqSaK$aLLw;GkK6AL1<^36SW!JDy7wi>4gUk0fl!pzjXNa zWomH=?!K(-#%GpoGJpEHLQ42|S!L?eq2rgKU#|Ua4ldrV;pWS3_*15BRhRTro}JuQ z>_h3tNm?c|dlCI3G*j{x3^VSW02K_KsLK7GbsYJecJ^=1h~<#9?U`$;_o65raxFQP z^?fQPmo|tBApSb^_bbw;ssYI}B;a?^(u3ApG}bR>ShVVx01kA77<@ze`HM^M%|;X8 z;pjrt#={(Gb5Zr8RAu<^#?t+FPBa8)tqcaLMv{0);S|idJDC)jUN-h0LHo0YhHr-E zd}Hrr`q@O(5R5y`(Bb7({xf2@pnA$F5ANE^OQ}&;+B&|CReNvxXzW%Y>cbkptf{X2!^|_58~2G#h%W$h~4>n z=f2TxhjNk?MPu*c#7n_UIqJ;B18WL0;^4SHZK0I&5KR|3a-mqnjMdN zX-uLD^R@ku`sa~XxefFFqMUu7rP?=Fe1xJDGK(&KJ~6J?-e^zBguWyuB@27zdmYq? zcNH@{UdJz5rs;I02Epl5ewjNFvd_1R4D&~>A4HREBR-~GhkUgsMfSn(V?--DZu!`# z9(nsMLau)8Kca6 zDHl3HWC*W`K`*eSQI**&&NeG``SmUToy&` zc%Ugjk@%P5&#Y3Qnd+x@f+AMIj`$}Y>QG|%lT{rXTlBHCPW09w!gs!PQqqrH(;-BG z;F%tdw9x%P{eP^UZsXw_vR)WuQdA<LLJ9ywHs;o5`&_ z_ZKzo_ZJ=rW8ZfjKhX$^1O7-7?9*IPmlSC_R^_7^4#?A<)K@Wy_j_5_m+OOUQNflk z=np46P5qL;f+1@Af9T0R^L-JA2Ag_b&$4#Psl^MG{~u3h8P(Pkt^JeW#i6)E3$!>C zw?NR+0u^X*m*Vac9Eul;JG4;Ti@QT{cZcF`L2mxg>^XZs&o7Im zQ`wW@ZvxHnkvfZvc32a4j0kteat#PwUT&Hv22n}s;cyz7UxKtQ_(hfqN>F{sOLN*a??$aiRr z?Ar|;9(@#Gw;qKWHF&+tjhz{iQ7Z{zZ=b-v(rL)HjEw$mdF>TU8=7r3}D^TuW_)`k=@fB zC+{A|*a~#wn?rQ=X_zj{_kwl|vb5URSEQ>~dae#?lMQiF{jA=u zzh{=2VVWvozYcN12f=$g`AUY#>}dUTR##XsK4nggO?ubYUh0zk6HLyDL8pt}8jK>JBoFX9hK1{ZfOrXbG8!)#K?U)O#LT_Ve`+09#5~wRF-9-OL z4;%Wk6L{`h7wozn%*X9xV+CN03ta6)OWC{vWM;5oiVaDS+;e(^X#}tNn=RSM9|_BvOTZ z1;JW)0%JVl#C^&uY?BT#$tiem#?<2u=f3;s`LKtn)d4!J6Xd$+aNIUxzsw?J`gc|x z)Ew6RNxYWq#LGL_AVrdvoDZ5z+VoNv>@=bnW^%mNd$CeSErF-ZfvLJwkSXY0H(Prm zYav>__UelyWi@BQr~39%f<4o~a=!qaJ2~kM`Yv3^2@`bap62vvlx#fXQ>@0lsP0IC z1Iv1c77oDwii2ayI%}YRed9e!FV`8=3uSYF+N~cuy>?31UERhf#{a zKd7T74)`tcfbIq2)Y;tCPme{z!++h<#+W8yv=Sz5C0M|l+FqElvo))IL0N-iu`slZ zlut-XGF#kyW*E+s=qYslP{J2|)QpVc8eJSU{nL8xrZ zf55$plD2$5D>VPi0mK;I!Sp{V$wl&Daaltzf0C$c3FjpQyrvKc2HrL4apAvK7cv&( zn&CR=!8(5@q++&w{Ggpta(?K6!hZI?12%b}&Rs zjArR;c22~)(eP-Zp0|>>1j1jJ@&fIlcIK@|<+X=L(~2qbm7vvR{gVY@`?D9Z9Nd7g z$;tO9`MKj+mNgU1$&~n;&3wVtla(K<)@VMfNSbO<1PJXX+IvwzZQzApyOkYldbd!m zZ(3SyHs`WD8fh=)jxq$#zHJTj^LjLz0w68l)=15OAod@QdLD?nXeb{5};?qj8qvEqu4YTU; z*hKUfu=}(Cr1p46J5`xz<%i!Dkd8h{Gk){)lFzPcUotsVtSKIJc;GWTHwj52c=+Wj zTJAZOUxVz^77l%brn*%kE{qc1@dnbntln5-Y1X6vC|bFy3=w={gTT6 zjS|9tWaq3UF+YeKCYxG);Ru@amW@~YOO>e!@s;-MxtVZ00u|G`SmEChId@pjS8)B# zMu8BzmCoaqZvBk+ewjSnE%yPYfEk1yqH5k(GAHdH@M`bf3mOTp_{Y=neW%?~!pF!b zTOBHCR$lga&aPfnAAw2zEj*sl`26D%RCp51fD4T!OhsL;;(cs6FR3`B5Jv!W?DRNU zRq|`kZ5gt(I-(b!%fmOt2S=JNch4Wlej`%MT>{-K4TPHiyzuuZ2{%wP8%49WtHQ9D z-&revr|EWq1OX+>gh#y`*U&jEN18@z^ho;`W@&c%yaaYqkX7fUqwC4g@>6vs(1B0PQ9&4787CeXRFJIDt=mqcLHwtqX$s3e{-iG z9GB5QyT=Sv8|FwE1BY0Og8f|$q!u=A{unEx>B1OBqp|4`0XHeKO_@H5Q?%M=MG;Rz zo5krsQJ)vIUXlG)J?|*u%beHG^9t?F{;KR=HSae>(f%GQr=+6Fm!KWcwf@%c!RpoB zpPKHO1Lx&)hDI@{9AR2_-VGeB)+0T+Puhh&QPZTrfC~8t9nN3l zGEJeR)s!(an}zkSDykv@YGx12)?&2D-4F0bNGtVpGNU}kj|2aY66n{@N9Mn8gvBR) zJsvW=w-HH&ZnP+6Md`_$c^@=$1`DKoEJ>!+O`|RT+&07DmJow?_)*UOC70K}_^9N0 z_`oZk+$2G6FE{nJZ)<;?4G!|~04M4IkuJQLOuze&5>F2570zP(&oVw7K=ro^YrBRF zUkk*)I@YQ8vFZ9L_N^t&_L4N1+>*EFx|6@_=X2H7dTR6_MGaY(WBaeT^8vUsfs0*H z&P%Tx7C>2;aNNn1KNIkeZED*0!WJvP$+pNsJ^s1WDpsX7eF9?&$^e+Q(z9xy&-&}n z6ZXQ7t%>N)TULpOPkJViXH=eFE;^0 zJnag?Ktvr`v!7FHrAiSg|*>72WLEhTg#^?mym$=uOB>FR`eV1$YCo(|4L-)xMu6i&lX$-6Sr~Q~BbsIof_0^j&qNS;YxH6i|4Oiw#w=J%RWu(>HhB%{9J(qom zenVHtGWApv4g*-LnToQi#~)L`kXyX+U>_Mtl)!c3YqCrsvg014h<2P|>2XklBA_K| z0@3;IKO<7}bkD5H(A}%kuR%kP>%x$^x}6N3IhSLsysWwi=yKavEbqW>n9_spdXpe& zaGb9+=Yo7r`T)ABqME(zZGEBLqoic3@-n~CY|0&@D-KW{?u*7% zw>$q1z3E^+*dX~pZ5F2%VAG;*s}}~XYa;|Wqsn(hYN^p9jQb|UT!$H7Yi3= zw=ctgqmEjHT%A`?nnUQa{}!N_fZ$=*)j-=03p$TJc$d!~Qju=OyZ8=6`i(O;Dug8N z(N^pYz6zkx`{-q9fEuFY?iE2-q_R|-zEMd_T?mTk5lND3w8PnxMns9AR{v;0+i-iL zr<1^&33&uYd(Qm?vcv*uK}?}Wqca8hzwjh0$s#bNak3>*o8bK$Mrk98wY=2Kd{~kU zPt&NtTfTOS^<<#DqsC$+FQ`ndX`zB2LxIlJFkx<1?<4IxUJh-N^y*?Z)d;doj`ii) zzhryR^bW>#kJGe7B&jlpI7${1W=I`!4L-(L!Jt8vkmP~?)d32~kSc+BLe>p_R%3az-5o&jMP^k@+?eH^DawA4su zirjHskry8PqbQA)KSwIk)%{n}A*IG6;)EBTED6EF%AglBhNBu zjz@?Y;EILA%u??U`hWp?|H?L}wRzA`n}oEi*#Vt!LYZy3U}AvBhm{b$G=s|nBqPM_ zOy1YPcLQl@=<&BJ+G8mzNP86IifE4$`iptvX(J6>3mEOXM^*Nv3C@bR8p!sN;4 zx2nngS6dsPi?+h{w6!0?*^?b;F6Hw+)FF1#;PFV4wK<67>YV(OKj9k*QJ0y+qmgSG z?}!~VgCt~quI%z%HUa|yBh#lPZ0oUnRg4~*sV8JEa4?uZ#_$NSUT-rB-s4H%F^t~C< zhe-*5;6fxntknY6$pJ1a-z4g;CnJ9keY+`u07pG_jIs@Cw=A)5_?kkyvjxk!hU#!| zbyX2x(z0!ZmjxLKFWUN$l7q3ZKK5EQVWN!x;5Eeoq0P8i{e@sT_7)6u%b7^U=k#5e zmGrz=sCq*iE`P>YwBoBElGCK5`EVaeMHJcsZ0|pRx&F>$gf5_yWWk9ivD?B{n*s5! z^)Fri4O?IXH7?0thiXw9jbd~*y8mg`5nNF0`54G?|LJur@t$7zTnUiwKBfCz8OYj2 za+NP7qmNtS12qrXiDx&oxwQ6_M8W5pK>6$6SU`NGLGR@?MSBCvx2t#lpk;~}8?*g- zHtuvXVz*(F3Y11@h4bqYC=d!Q*N0n|RAY}^@nxdLl-UHZJ$Q;ShVOTXkHhQ0aDERt zoQNhpuc)P9iC`nyZ#Fv?Ucb`B%|a7HhRCzY9N7G*Zm~k}grevzLyf%c=3}_IdnRJV zQFmr*4z2Lem^V*mExj@#E)^+4^~}FDzm=Eft*5R)DIUGvNX8XP97O1|vHA;z7EsZS zQ+VLWVD?PLV7ptfn0xh((mHBK=`8ElZ+|kY+*L3~|D)A0MUHr~dJDSN=?hwXJ1n^F zW{5--S4Yh8r)4^kY*p^H6W9O3rC}s#5J_NpjZIg zPPM+noknto^j^96M%e?FC;eGXq zWM1x@_MN{fWWyxqz5v}FR%n7DbNHi7@RUQ`kQAYz@QM*zbRhl_vP-kU7bqL@!P`PR z{@|q5&_va~8OG{mG=2a@E1y9Fp6^f!5RW#eja^Mi?mmD?(n`?-+QinS>~lWg=tp)n z0QE`oCFo2CVF?581pcLNbt^q*HZ15!hhx5{?H-%;4J%qnbTu&u=x+0=))VNU@4=V!|zdu6CN#3 zPVU86aCzWOMsYD9jA<00`sTzYs@}>m>(2Ne#ht9Hisde46PN8@tb9F}YvX8x*iHrt z>PNJHTbsT@e)KkL6E;57%IJt#KUAp-LM?(z1(hoVZ?MnfZ<1~cCVf#e=fcrsiFc57 z`f)SwcQwc*(;kkWU~6lKjyva;FqJDODh$Yl0t6tq`7u;PpWmOhg2W#Ac)%J|sQ{yP^P((Mxg)@4GCFbo2`<&4H{YyAD*!M(EaK@NOylVS zc=Obt^KVeqK7h1Qwh#``>GQsJ`eaM8Lx5fmuHC}Ao!X(TVGW!yq($fK!$*xa%O6{JF)%EW=(Ro zlZuK8x=)=tY6JT0gR`w|L(%@%JN;~q5^8@Hl+|XTegPL~j1mQfdigP3TtG3-S1Sh) zMoCW%{b)@^wB_q(0Hq!(8bH;A+z&vit0(aGt!@gI^qzHhL;2Ss&m;4#G91-KM zmAgF($gNC01KD{JM`zdVb_eF&QXoX#%-}o8F%0BSMAQ=tdOr0gO^CYFntY!R45?@& z-j3cMn~Ev-+i>k%b;oH3F1hgBbASH=u|J9mM#x!(nYBGryN!8o_7zFWK*G!-OqoI} z+sPv@b7ATK0`o*ca5bd(jRWZ7`9%FuzJDi-PeZ+?1b~#6Fk(RY$RU&n1+a?f6^4We zyJ)9%oTrW!iQVKD*aih&Hw!5L{*9aEMd{BqGl?a`Jmg9yuL+`=k5&~Mp69Y|_qm8h z;(K=9(CQ&g9Y=2&^7D(H0UgssF4YAXBUGdWhVmAkJvCfzWCnNi+o;cgX17LFB zZYt=ZyJLNor4Bf`|G}u~e$N}A3j89}v&0ru*g;}hW}2IKxBf8{KjOaY`?-o;U;I&a zUKr?IiMp!lA?V^;vNw3~2LtZXcL&2G!W~5=vG~K4BlL$0SkTwe3MiL*%Ag#w_VjJ3 zy$Q;q%W%Cm%L=k$3XOGhbye{&av_fc6PVk#EoL`Gg;yKnYQ6uxm{{OD*;AF4zNxLr z;4Wtp*E{V<4IRUDpa8DUa>!WFHOTsadi0BODZ_f5ga}<{q>I+@;N!*S4%tmwWbQBnu#;f*IJe z4V>_$n#E@ww{VC&_TN?&&Eo$(0p4nwhQ z2=6CS-9AeJhR7o8y`^7KSYMl$+eM)$I|Hg|Lfm0YUEla4dbo*E7=&jq)!V88U|kz{ z(N)}es~SWpD5Q|}G^zp&gr>T(fwFk4qE62*_<_~sEGJxGZ+R3jR2UFJYWc;UtxzzrOZM2C4^z247hy~aM z!V52VGBbXmd5Azka3DzaxBr7|O1t!u3rPg+WTF0wx^LNUzm-(F;X@gh@1K{7p*@(O zs1J&_#V+UyRK+{jQ;!pO`U9?%2s~ke_;!H!;6)O&Ad~R3CTaxZ=j#7tCZ{;OJ`2Li zQXvwcx`4guQ<~{zvP03RcK#M2MWZ?crqJ4U7rO`i{vSX+81BrDgnIwR1HO@w9{{q} zp<&qi{Yfn3bG$O>pFzM+TH|}be02RH*_|lZ0)@?hf_>G#N10v(CDfyX_`C=m4)ubO zSQh7t0IcXwWk`2lIgh~?FhAw%*Miv1+~Qp#1^uf5pl9tB))BGze?{zK7f@=@#H1^v zet^`U&7hEAHys1Ck+1(=SXcr3U|?Od3*#;SNgX%%aane<*lF*_0?Vu#3*=()w*V%$S~qnt-t8=_D}dL0+tP2xXYR^1;( zunRWKf#$>B2{)~T;nEMt22*V`$D1L+O|-qq#^)%=CliLy;`R!8&E5Jizv(xwQ6>z# ze*&L>6o3oj0W>SgvLQqi@eo|A&+;A1_{B*DlGkW?j>9^$&7jW|nN{uxeiH7zy;kOg zWZs#`QyjM}|DfESkZ{JsCL2*v1EBk8Vq?KE&6UjEw>hUun2Gpf#hS?7zwC7C6{#`v zYP~Gs#3m6aN(Mj7vpX;f3U`k#$R^rQ)!FW`|sCe;A3t0 zy1Ww$nUH^0%ReOBNwoX+Z7IeuV_i?;ub|Pu!=2e>B5wv9)33?2cgRP+RHpwwyA|A% z+E1JCX48!Fz-Ijf^Sth;rNU=`^!g`kij%&2;QROacjxL;^Wa84qX@BgR)om1`Q*l( z^2R*8?S#zmG{du4>=7Xo6L80Ggsj0D5#kDqGjpIRL2MrKtlIPeRzaY zf`Ks1-J_4>uPz}oc8&#^>Rttt)S$mnxl)Y;ltjSxU`guVVup(v072F7^#v1*v8-hF zS560=eZ$FEilq7Y?>A)B83Pc^@V@_F-e_NwWJ@yAExh@i34_*Gd8Ogu>MyI zpsUWTawJGi3M8zugOBGM8`6GdI*I>PCbX-C%;oqeRQ#GCigXVY!X1ec6 zW7lnWQXkE$Q-EEc4^ti#7;T`M{|D>pJEqNF3T~&iu-TBFt7Qv-wYSYrc9vz4si5KI zn{aKq@m~xG)V9$}RR7v2Ne}lU(P52rT5{B=>d`?*>3*-P!gLy9a*%PVJ0%0>#jLA2 z%fZ&_J7X^iiw>Yei^{_0Z-BZ{Q2Sp0CevZ3ZMpB?;Qf(2pQZ16D!|J#%?*kU=hZp% zB+_G@SJ=+J)$0-bfl+)w=nnMYeK(Y*(80h8^+lTm@$qjr8#VxT4cJ}j;x@Holi8os zm!AjdtRi)Ce1J6EHG+v#FVn=Xdzh%)xu{?W@Nd@gVvUtzn3XMuAIjZSzMd@be{i$U zBb7EuN>1*{bUx2Rczo6Ex2wFFnIw27k!hw=CnX!Xzk3`Adeahl*bZEsnoi?ldtyp= zHi^Bjf(D*rB9H5@i%NV0(4xbG+9}eE=#Pi7%~bRZ(0;!DP5cY0 zZpAN(=&r`JM#@dNdz`bak&UA*3F>QWe-5{5-O~Tvy-5K|=|r!slAvF!R+x8zbA9?x zEOGkC`CN`RydNe`4NsQP^a&22g90x=0{Tp>!*m7M5NMKgFE@7$8vH65VgbR#n%Aq!#AH`kB>>Z0LLW0ns}ODn+50%C|+N0p9+AF`&?ka zc|#<|r06qnFR-cUV`$LVf=12UfzA=_QeO&;IX+6`dJ3_} zO|&RB_mIPhF9{$$Ucc*nI}ZB!y_(i>xO9PO0#l6E4+(Gud4Lt0XcqJh8dZ(WkVLRb z9f2Tqq-@Ovz7q{An1JhjfVz{It6_x!fr>RxPaC0tcu8+kbCaP4c2Q^~!n5j{3$n^* z^LWwtWOgi`n_D-1v7)i>Q+M9#dX#eOU^+Y`?08lY?bt?6Ctt2OputE~d-Xa8#Sm?_nHd0Dn{ z^Qb<2hQ?|jHrY2(*#j`LeHoDo_{*XpPeEWX$Hu3t^57*&M|SGx{fl%0dqU~osfr5^ z0pl3c$VY)^((YstenZ+zC1E3-l`3I`C^yF=C4y2Pd@1~=h)CZXKQT@d@`DY2$_QKx z^5KoQI%&yfn$m4-Mm_n+PF-tN^Nr&6-Zl0{M`oV*Z`w3MtT7JtLxW}QGEO~bk5fNJ z@yW=Y@As_CU+++_-?ks7)oTR#D-iXSy#PTzKtU&vprzuuUy>JV4S{OK3_w9N3U)Z> zuVM>qo4f@K+uVYYt5Xbtd8@U~Bj4p`FW~yRB8nYLp+Lct{y%S@WiMs#QK}``$BA{1 ziQXWDa(Bk>SwR4O*>NGu`Xbt|5N+wHrKk~JY$nt$cmNlL((sv7zRm{6JO<3QSTj8g z@>ve)RtXXVC8R@RXe@Oz6*e>ZhRlL?mAKQWJ3+c*=KL6;%^Bp7bK4mEcauEJ5bfQQu5RxP7_m-0MuXnlrE*Vq z-o9V{nNeLeAf?8XiGAA@Z+Z9-`wZErI|A&Q{qKD>jKdp<%uUkI{Q}|J&f7 z*66Jxh1=ZIAvW@r^`$CfFTgGB?5o`3wXv7avY>{YROnd;l3zEvFuUqN&tludg<9k# z=M)b^4%c(Ktud_4?4F@P;-y|mkN}VePyav+IKg6O!@Fnf@X+W0{;`ry0_E9R>0l9f zy8O{vE1O4Y)pVLc(F?;}Rfm__q;{>gZ*QHAL0mjhxoZRz4RC1Mv1b+jnDw#sR&Ot- z(AV4L*R?mgJCr4DRa=ejlJ2Nm^}K^e2-VwcBT_2hsxX9Vo@OV1 zOQf zNT#30%+3TnkeBx98r$-=lSRHzWvW_*k`N~Vv|p4Dt#%SsXprxq zFhM7bgomHn_m2x_)?7;P0hZ?(s}J0?9=G6>i;O*}_CrOWCHVEZM6ffCvFOu2_C7mjA4l44gk=_DO+!PN+0-hh)Dt6Hk7K*=`gaiy&ioBX{b`@W`LJA)$mYh@Ptt8AHaway9_+8*4=!fC zS%A>=9Bdnwm~UW^PZB(SU9LgNx}3GcWpE^Q>}<~BD}6e9B%L4%z65_>b1Rp#5cD=j zqRUQ(85VB5>~-wK%eSX*|9#D9+5BbJ(p_)0iXb4Zk)-IIk17WZ!&NOR>yXuLmvLz#4jLU|k;|N@jN!G9!@8 z<7dOfN$k5(tcH29f@?_wc>$$ICznkf%dp>xWjpYZtwgKT`*5y8<}Vi(Kb-60$QvKr z_MyI)BCp)rpsvI|*`D3HL`ICJ!R7- zIW;2i+2~P6Wu!3yl9Od!Kwa*Q8!HjUy^NuTo zEb{8dm>!IEl!RMY^iR*5j*jy@`?L??lXQ8b+lSkNqt0e-k_Y(v%#cphHUcHqO1ObH z2)0Jf8dKamjyRMwG1`@3r~7ti5el`UW;fb}7F$jRS;C|8N5#?h`zu^*i(a6@LRxf) z%YhuhW0X#pvlJuFg7$))oDgqQxmTHS%VygRZ4%S`QaH?ui$a2R!WF)NDlWWoh%5^{ zXt79!xJmPP$F>F&_14Q%d1cDo(F8gwr`C-22xl2dHPMMr4CJ%(k=?aS_ zvk|q`Tq~Z@F2iCU2V^GuI>iG$U#-{;YV4Sy>1msJRY17RytQFW$CQ=n3%4XkMb$8+ z&h&u0`pUX*tqNI91X%~s$F|%1XVZ&N=JNIXi(@LEM5lZzZ_YcGJr%qGv5xDofvzv! zeiQlBtHsust0lf<(#Kyu+<3l6p@-n{@92*~BgFu^HWYpEsGsE@^VTzP+dA6*a{#s6 zWZ5wRfj64bx&bCRXy}WYk(8Wohlk-#D;&69hiC~0+zE17uf8C8?mk^nJgrP` zs%O2S&B7(x?Fhs$h6{~i8CN-hzp`Ti-)w4&*#jkI`V!EbvLzDu6Y|s_SoN&y8Yw!& z7K1$(?$RhkcTens&+aNM<~=r_^?GEd!*+evdZv6wPfO@5;d!VJA?3d%8a~waq`aq6 zrraJ=(LkZs&J9fsD5itWFj|LAbVP6ph-C7UK7IClYw^NL!id zudGUMto4jvvuRJ*9omRGbhER4UJ?J`SqwbyRKtbKvvJl9mLNh)@qx9EvU3To4xR#2 zzi_Dx?^f5TxsSPNs*3s91At`TW2BYpW!ev#QPdv@bclG z1Y97rc<$Qgbv|}aA`hl|weMk7f=JY&&L9e?txE{r&@vIvuk!R&=AM@5{n1ftWG_Z2 zLmXMjR1b&9Fpv8*BA$*)vVLi;Kpe*cP^4)9XHPS%{!sesMO=WRAG8wpLzyzeF=7Vq za83WP^RbVyr{U`1*W`r|gv-Y>W~8Fz1LnMks*?kKfp z^0L3H+mX8CR-HYr6TN+R3>8Qnu!xgmtGVONte!*#=i@G9nUbWZP`3NAc< zm~`6XFA2n^zD`q@wjB|dAx_B13+D$3*0vzw6tLYPa95di9(8VDSEOc!(0N$~w%?jB z?ta451LbQ=;crF#7KeB~kMq8I{yr?yJr=uOGHYlvuh$1uBkG4{_1go~N_xO=Jsu3k z0v24A+-ts~;Wwk=B_iz+>q_Z1bgtuWE49$6gXL-)^HZ0G*C&Xdz0fg}$th@p{q7D= zDWWv@%WO?}ePFn}xX#u(sa3d(cGi27sn1{U@eq4^hzT50|^0uGl5-qKWgyy-xa%X`d!BW9qCvZ*P%_dx~HwpxN6=~=L`Z=wwC)l zL8{F6*!Hb(1_6(0s1Y=c(gS*eL&vM@tMwPoXb2(mp1o zv%=p*BFf!r$As>ETh+CvNvu+;28NT)*sh&1-t8Y+|9cF{$O~DJpP;#xe2XtO9u`IW z>CqVki7jvrZMCP0j$J(S)rG0Fx;rvyU8`E4_T#W>mxSYO)Ia%HGMQO0#e$Nn#iC9! z6<&N(#R4?h;r#ppZ{O{|KcwB4j&_a6N6d>W9$!7xsRNY?FD!1yTMt8p<$cYnpP&(R z1EutHP}|)A>}#${quA_1V!q9hAmoLNu>i{P>E`I*NF=G+&41qYZC2yFnDRNFPtyrWe1kDUZ#*WZA7U$*;rbzMImtq<(fECX=I(2OzU3n*$j~w&;SGoJmN8PZ6z3+{mG(;Q#xeOin5~93H)G!82jA`iUg} zYg^3P-LHy%0MXySek;6!0;RH;! z*>CP*z1D2bP%m4WEw1I?7Z^MHVY$0-Y<9l!D`Vs`qqF~0en4r6!tF&_ZIvumip%#j;f;h z%ACFo8l|iIHx4%UfnH?zsF72B#BX|CioF6Xwq5D9l*Oj*?^)g7Zc~_C zB8a|gU-)#hWS0DmDbxGWn>Ci5lt-(6Fudd0KjEZXHtI4H4PdG9*LUk>Vy|W^>NZxpCjK_d>&tuGG7RsPgmTQ;RDVtY_=^$5&0pwe9?E)yM^aC zf;LI@lOi_aC*S@A>aYxY?ulS*xY-?gMzJ%Doc`Dp{;05ACF(y@v&`c)(^BeOn#wh_ z2%T12Cz8!EE$XQOo&j>yKolh#X`4CN5|&wj0gz35v!6E$PE5J~Fw%*eI(+>eZdvllXu#LG$f9}2p$5HYd=>V> z;wupl0l<(^z)uU53S99N^I0|X77MubxQ9^>>SERfIL7r=tiL>Kw2ZjE?S$v1H?hoo zx7>N5OmA;<6R5o)$#NX~l5{`&I0YE>-Fjh$*(eZAzY`qYU-Q6sMyo}bBu}1oG4na* z`o!>zR;Q=;Dg#!sw>34N*{4+z)+GO|&(n&+9iNL)Z>oKMC%@PE^Y(A-7<+^QJz-9PZ#McpLVDX<}T9bq>q+9_0=1&3JcQ zCA(SI;jg>-Y7h_pYs#PO89Z5s!m5eo+hm17*yiaZ43OzPBkOmyF+0(Y$g~Ta9`f|p zS>neQjrH!I*mPA(?X4WpxDc3PcYA9xKJ1yci15YK41o0iV02*r2dy1q-MC+$N<*%# ziVKP}-C338+@Q~VWz9U(#GCU15(oDHbl5onxm_3)CrY%sp<55N+lm&kmnG}CiI?M1 zzM10~=7E1I*xu>wONeWum?Y=h6&il4T)ZaCbs&A!EgmW+(1Ld*yVRdiGTfd(Q?wmR zAsc1#&}Ug%B>7ItUajV( zwi*>+0+3osSwRdS@;ZGbH_Q0Ls&_d&8DTCYQllGb3#5rlLdDUk>5#EnmxcQ5)F^GSi5;sNmJ%#8F}QYBbu4pdANwoT)y^8r zU{O>ASy&X+z~`t)_S?BxE`kYkHcI`-l58OX0WniMl+B*+MvAtzIA@d_b#wNc^TKny zf;w@h?43n4TP{NT4I#1quG8r z*dW8x^ttetR;A&~fc}JV%au3~zg3?fGPjZb?}9`chnpO}4^{%Svy?w*I=gd92-eGl z-$%Vv!B}O-=bj4CUSQ$Q68h4buOF#2%G#!%SbRB~4HWRjt-0tvg6mZaJg(n3lzQn% z5kV9DxqG?FV5`Ga0Hjvi#i$NNVG0Xwi2>6d8QbK{AolY4qWm4j5-$9&cz038q4aRX za&2BjH(hcSW4{Yw5Si<~yzNfe>ugPtTWpG>@~=rC%4DQsVX+xuiTs8Ma<*<*$OVKb zDwo&XMo2;ngX~(ht^VIcmh+`(5qTTf=;!ZV_x`5kBX7R`W=me-XCALq1+(xhcO>fC zcwN~rd(q#bflf$GxQo{{8wI?qid7s=G>vV$=Rw(m!_vL%q(W&7#|xx>#*KmW6v6kF1S20sLsC} zJ%YwL&Kl)gHT>HiQ0>M6i`5GWbkZ%Zh8<+oX3){cu06N3(p2IA%!dYD*N`oxHerz& zUm2f73Hcwg2g~P?2JU~&WdIp0dce%Egh;f-u`y!i(|djBkjd!7nj;mEq2G_=o1(Ka z{m_&@O>s_&%&eN<{x8}|0G-7CiUW5h!Y%-EXgV3j$V|_u&Xph*f(?$zDKV#Q{DyA~ z`N#=fxn1%z3bF^GSODtTN3hnJejVuQ*=O~Bn6ePhwIw^yb?Rl~Q0(;=5T#~|(xwXe zSB3vJmdT~0CHdBDL1To=qx0!94Xd`r| z-?6d=d& z;RSM2*O+~H0JlgqxKQh!k+B}mVCEXQw;}n+Qs>i1sL6$AfBl{gnspBhL{>gecG8`o zD$z^MS@UT|m=Rku6S@Ip)h29XygW`)*VLT=0FiIYco`#WvIEY4&lT6|psk16Cn zT5PKcSCIR+g`U}%RvJOJ(vp69@s7z7*_P8gK|3Z*AYkwb#+wgHQ*hEKUc89P`4eIE zb@y>hC}C|+@6j-6Tx6OH?*W`(6b5=8mQwS7F~W}(=!r>%h1!Dvz?vDA)Jn z$LVWoOP@tVY@)}%kUA7Phv8bI<*yYO8UbRFo9HicwdnvKm>`g`WB_ZvuphVV7SyC` zoExC9e(@0oQq{nm!!6aB(HPqtv!p-=));NA$hdpXGnSu=`QpM&=GH)}S~|BdBuBc| zaY{6S9}^vNCL*)}tG`DBWOKGlLs1}2_&V$<4T~OA0Ymk%rH#F537E<5Hfv(5vMMwN4kNuL1>(;0A$J1!v zQSa-e8RL^6$D4(f#~#P}^I=h2bK2__UrAeJR5K&lmxO=*xEllTp}I1@ZJS+oLOT%3 z$Ge!Pvk#mNI4}@=H*!&+wu8YQl~bCyZ;~!}o(FD9Xkyt*7+&+X6EjL{HnEp~$JwC< z4TuxwqfjNX5sQ!Ii4&6s#Td;+oW1f`ih3fdwDB9Jg){T3({Qdj2SnZl_6Tbd^9~79 zw5f@Vfa@c%;0vX=fHMyL^kRgf%y;Dx_!R#ebb{+tV^FvZha4dYK1+7&e%8vT=BpW3pu^G8inE~pFdkt8BvQi5sw~y=mN7gZ~~L0 z1rw<#HET||5Sl;vjlSjKLc#{LXq>)`E)Aw7=3EM-zCN^&~rbL`6yGQUSe4OuypLxOCKt% zPj`S_#IpU(u?u1E)fDV~ag&rQ@e7IW&;=$->PPiROU26K?lUOQX3`i`G)RSqW_fab zv~_uJU*n^92F!FLhrXC>pe>6kxZ;y)x)>)bE}8w9*5;y6gxAis=2ejnMogmv^{Dk6 z*ywiHN)7U>J$|XX$0t~cceGt*YOJ$v_ttV)2deVVOX<73+>HoawB@tD@oyAz*6&sq z-6iY>iL5O3NtW7FK(m=^VJSs|X2`CLp(cy_M*#=xRPxX#%OMf?3>q9g&y!&0+96Bu zO^^0?YSWGj+F?k`z^|##m2lY{(rn}s0&v@YS_^ZfIyoj%PsA zCEQ_n{a0{hw3p6zsO@@8o^I?L2^%X5OUO<%4-Z{*FZAWhmlxwoT&GPE_a{)zN@J{O z3No@@c*xAJ_o;IK{{6#A?F_~>8eG}zkGs9;@9)P6!3~0hfvijbbEg1Ej6{P*)-siC z(eg{=St>TbfRP#S1u}<9wVAs_OzAz}Ozf&z0w0yZ^)Bx}kP2RtoaqQl4PQcs@MsS{ z4lCipHakG{iy`F$|3lkbzf~1&-@}_$TDn68=@5|aP(Zr7q#F+1pmc+TG>CL}cS(15 zcXMdI+xxlq{SV&X;Cc3Q_Fi-49CM7ZvY1awY59Dn21Pqe5hc+y5x?CIO|S(Tm+e&N z21quJvu>#%iaJYzNz+5SRpo9T0SlpTt!A3g8Y23^-tphG+%SmZGFbV3ESr_i@OkEj+e~28y1i@Wo0bGro4Fl##eXC`Hj~itwqb%PxbPzNvJi=r;w_KNaxSv~qx_YtHsMSGey@ENLcRyX2-p0p_U5TnMYP-HMU(@R!ZA`M% z0Y}&$jO3|%J%aFk{e@n)GQOb#&%d^w{Y_L|dDv?go}7dSxJ^@4hNj{eLd%E`s5S_B zmRqEs{D!qn+nIVNT7H1}bc2mA!dwag=pPihr`>6pHS1Ry}P~!w*W-GEy!(->g?g?e4*SuV25W zX7AMG^lG$_e;HyM9kca$(2Cp+SaID%t7R7{?=?W@*+DOdK3MO`XL+fzR`nB~8HVSEI|R zY=&pHe~+HelM~U$Z?6PxUQW7t~?Y zdWlnQ#1+@{xYMP`1&wwdYDKuUbld*ga;5eSGwPq}K(rAZ_O!O+#=!_I)8NNq4|7k_ zF>9(@MdHK5#;>I^UCIpawCExl*d7hgMF;d8|I)bSxC_w(+W4N@AlPSx^9HZo4-V;< ze&8)<{WpV-fS;(a#T|u+m|gY3`vFY^GnJ8~yp<{#s%-VXD9FgJdi6g|N7IMP`0w{} zjv^7Fk5}6=7z6Cc;R?@)^kqeHZvs;A&Rqc}fG`s+Gswt5d#|K!#c=QYAiiTDuj@>) zh85*^{j{U00_^L9>97}!LGnnr!R=%=Q`b^EIA-1EB=?)6ffKtW@ zYv3YsbWIPf)%?aV#X+j^K_TpVt#&Zcxlci5; z)FyFmJgj{T)FRSH0v_%U%VebAw?mE>Y9ME8!ib7O^u0iLZf@?l-tz@M8Jq~By`mzP zphWoF;%Ha$+Ly=Cm#xcgZ38E<9k%aDLI8yj)-EavMLX8a7qI{OnbV~#>JN6%{Ak-? zh@ILq8noJbUfYR$B@=?1q1H2|?UHSeAaF;m{MMnlV|e^>SZGp2h$W;yEOrqhpvstp z`YY}n`sa^-7|+9qjoP`t>TL(Xj=fHe&hnSo*NL>ll5b}m-#S>6;sZk6G6!2YRefdl zshYbssbyq~Lv%Ahk{M*>?7KQIt4pHs@YUgtn5EukBftP*xKvMY?A4t5)l@grTK)>@ zI(j4$<^9vEe|e_t8_>}%Y=!rO<9UA zbTe<7ac*fjQ@lQV?yY`SSyeR;`wIAejfNTA7u+;iYCxiuXw@MA$g97m^d&MxrmQz` z@)C;A_mh&AzH8ya)9%77j`~8;Vb3a{J;PIU*8*MH{Dy&6<~xRh&%|;@se$01LL?M= z`S}7#=uLuemTt$^TD;3{46y6kgUpka8qTK*trdHsK=GO*kUA`bD+i; zCy`TlKTgPvXnI|gUxInfCHzQd`qQYRYlZu;uYgdRQBT+sHo=Slw3VE|3eM;bcBUl& zWoV^2m9bcQc?q(=F`{C%+{356*c;<9S{H~rgXLj9#Gj8}{)SVd=yNp)4t=t40HzXz znvoKOzO{(>^0g;Nj>4tFz_vY{@CJ&!*QansXSMgu#@BWAWAj><`k{q?D*lzy@DWlX zsJ;-b?cW`0)EAj74+f(T*kHv{v}5>ozER)vML&$sL81$fBJGyl+M)fc5Qg3LVy*#3<`{ z3WdVO+Ietk#I^A4i7?$a#|J?BB~53Dl8;esTM~k?(KR! zBeR5J4#ABY=-BZ+`P3&lkqQlAuoS>xT=sf5N@Ug`f^yq0kQSd}1}CJ37A=gLeUWK; zy?494aw@3gOKGTl`zDWi6oDg#Kg5>B-hXcA2<4KrDN6WyLnY_v%*YTR3&9?L&Aqe_ zzpbn|;Bsd+)@)M<`NSS88@=V9BsDZ#er8XYC6nQxLHSvjc@p{W*{^wVDlCraCGock zgD^s9e)k_L&0{Fe7c9$?H#M3J_lECR8hQN8T*df>>VuFl$h2)`TE<4+-Y2yb} z=FC>NqJ@7|nLc_$e zck+Va+T|^O)%tf#7jhnNSikZ$ATRpKIORalXkgWi7$^|6dq%W|u^5q_0e0_H_k>T~ z5=ZKC_!fFQ8Zv7Wba*SlVb6&e)mu$c_uON^XP+fe$v$yt)84gtV;(H)2(^awBv|c! z@yqk&U9{!xt07Vl#GD@i!R&z+A3QDkm?!HSuTon^u=-Uc-wm7T)TQ3<+Y`t{7MwEq zWDgU<69YG2J$L2k8t%3J++&31=iWBPy}?iOE`Sk&o-Y#&&E`Wz<~mg8Cy|cIV~oGA zxOU=?ysp2mv2;594~hFk_k@&iZ5CLG~x8 z8ePxdnx18Mhn>`B8SUC>zqbPJ0o5X|&4 z2h;a@{10KS2C$wG0R;% z`|wQjQG(A&dT>MLnZ&Gy@J}Z$ZJV2&v@<$x}L&Y+scKq zJ^C|+0|*G-488&o;$gWIrigSzASBsPlACbSZ_c67i}!a{X1r(4}fEjst!M10XM^6?FNUlK~T;PEAl4el?z8^b!Mio z$K6OWTae`|LqVLd^pD2KQ7A>*y%EF(av1`K|DaUG8lgV3fI!`b8ut%+rYL-11Vb@7 zPyn$ZlBM6lJrBdS-d)!)S~B|65w1oi5f=e1COsZF=W<*9^^s z3_|_9TW2j0IA&H)3wN-X_Vx!!SyWpkBDY7u#r9BpbF^jG@ZJXLPjEw?j{!64D zx8%w4D#0O7+7goYdk4L7UXFbnaQ~o(6?$(@A&X(Nd~xA$G90Gcis_4dhOp+p=KSLa z2JG(+DJ0i`F$8#3u2&izc5g(>TVaTtBv^LPTv+e#EhsDCfmii#UqNfs1WNno$Gb-! zEN+%hLMQ(c{<%5zS_+XbX8_5})YREaOgQY^_Y^LA`Y@fLa@Ee*V7EOnT$pxM>I{D( zXvYub%gdZXW=qwn8teISWwtgrH#u926+6SB#fk&c!sOL-D{gybwp063$-a;GquFPb z)*W$6ZFnUEV|g=bUJPd8h-A?(*Xi0tp(3U|(TwyGPDeucs1W!8nT_*tbo3vwX+vX5LUv4HB6Q{ol1 zmW_X`7gXxsSueAuI z11+abm;i%{FCv8~#$peDznT{skgrv*Bap2h^{{4=Uo#}Be`a6m9hG{B7`vIM7U89c zim8mbr+&|HNBR>@(4-1zPx}V9cG37J+Gt=B+zyB6u8it z(|d9DW{zpn#2{*|FT3+3MTi#NZ1!KV^;&AbM0U3|%QEm;W|~(z98gM^PJbtTn|Ipj zms!(j4=A?>aEUq}cW(4-LUw0Nmu^tYL!O$MbhQwL)#2=ididv5j%Wu_f2kdBs?Ty? zJ(d|i70;HIT22VyC_FW{UNE1U=PMQZ~!$A~5;oO6txi5$m$|9fo1 zzFVMRm6$?>v9ou%SR7$*{jpz|E6b3nuu9;B^;NX$TiLr5RjopsSHSh5w?ipudxBCi zhY%*e9b6x)=5KRL1LN28mlJbz<{+6z3#?JkVpN0^B7afaPhW2vxh%U}&@pbl*KMOl zS>qVeqL69kMZQd{& zGCW@Hse9rflqvHk&GW^Ps}ZfW!~N8d5p4OkTAw?y@{dmrvm0g zIusau8D9hR;a;U>)vwpuKfOr)9N;PAcccFleL7))Nbs%Na5H@LNL}{3ulUeueddlM zjb4MqInm7|VdX!n!Z~-$Xf6gG`{%X?<0FfeII~TSq-~wzeFzFayixd#FJ(0Y;k6MQHnbC1FIVW;p@X$5J zyW}=PGaMdnIIzA*TgCPs@h0a+eu&|(3Uk+!CD96i>Af+2f}MT8SWm4nP7=4r+d^eV z8c-Vc)C{X$thJYV5j&uiVEo>XK$00OM$=3xC3J;w)<@niAbuKR?1khZEx!X-+PCik z0+@1YfaYEW#ty37)iWR02eD4+e~tb~8DS+CX)fw)>4M;qtn-iK(||GbvBMWSo}4vj ztKb3xd|yxaSK%XbcXypG9;}mfrtAC7cET6n-+8EZ5VZxq?B>}^*n;GhYw{Sz4>6Q* zmt|=POJ7)hsT^@Li8RW19`F-{p{;}AHhwTdez13T$=dMa)u*WKJeJ@?8R%c#xG zJhGrNM=b6zP%G87MHK{Oa+aIax84=_Z60vL{5jXvHfl~M6-}RTLu+Gt8?*Q4%YVz% z$}V_zJbg(OhmgrL_u4nj5fk9SN-ISeex&;gV;Xe3lF?b$B0N4 zT{lKEDYr|maEma3VQ=r(=t*GPzG0X8y9GBBi^H(}cCiivt{@L0aK}W7?5k-u5l$5u zxf@u);sb2Q<`K5)EVfa6Hqe9n>v48%$8getkW^yC0+hN^$@>Q~I`r0PomVzGgOj{3 zcE!&toJ(T1l(q)I#M9_zIKUG1Y(?O|bHizME_NO8t^anpQUtOA>ge-ep|R(aHOAF3 z*=YZgu3 zMj6cqEdGFOgSGMzsT20jOTDGIQS8|QU4We-*lxebGTVqx`sWV?Eo6JI*=BNhpVqTda+r_MhIB^tM3XBp@U@+FD!&fG`XbJ8 zd%HzE67}2jEeo5hLj4}7IYF{uI$NyUBVMBQnb!~av@s9hJp4dlOp?L?C}+@W@UcH; z$;+-A@UR!W8$L8uS1pQ)Iqej{r8n0w1v!|6|7-Fzl5ZqPk)zqud8z%4AqsD?GYzse zz7ERC&lGa(L^AR&-UIOXgAqDwDPkc z0#KQ3VOc~vUuWVRmc^=L4kGPwWRCcn`$q465gu#i+n%Rhg8jXA@o9agF~OUeTdk!? z`?wihGBwR|qz~DbN7QY!I@2f_Iy`P{QNrcSuF>)Pv#I(!N4M|W3%!*;XBuZ_DhTkL zQuPUd?^JRcB0qmd8@y5N`)M0(x%&-dK4yIkErAA5xru?Cx4{1~Jg#y55u-C7k$7Y& zbW29i$~?dXQl17lz<9YPM`$6VvAr+{urNQ@T8o@{_Zs#6omF-~gv*>h*eluYywVZ) zYv*q`Xy^9!M#dPiPh+VcXy;_0Qn2}hGN<`!o)nc)fHMF!bD_rTZQs|6<{BrtKB;Wt z;KR_nPqU>3Fl!Q?tChP1Gz!jCkj<}0+VwWmHRmL{R>_Ieu&Jm zV6w{5@V|z(Nm1^V0|Z@}_;>&(Mje2U#YRn7hNR`7Us8k(48IRvCYjCK7={$Y(m2_m z`Ybq=w0CG+nUvfIa8AP#a0yG#Mqs*;YKM(hJpQ0~1&`zKBqo}F**8DAAd-+Wl+bBM z92L+xaYsm3q}dc7QG*IA1Q?Q*N0ib!!BU9wmTLIFj?I6-hhV6aJ&a7NA&upCxb9^jF^FOwk8Y3JwvTw>~j#q$;i;*bI z7{G?ZG$Tn-SjH5qtXL2KI#l>w2w*IX(@bb%UX*f04NGCM;)c$&Rnb6k(V9$IDn+_z z8gkxLzuNyDvEA7y+VSw?hZ;csr=)NK>r!P+EtOo6^?sEVBfAlDmj-Ccx3H{@0&v3j z9sf`VNax22GOmR2RY?7wwY_rbq~8*=-n=7v66|*v%)}s^via5&>A`Zu zj*x)Opf}0L2u8oe*@d_DRVxyMk;9)lXM@>7ICT%5m`6V*#xLj{ExAhzUw#V{k{B;< zb;oZr!yDpLk%8HT14y?9ia|-%0YW={9)m`8E27miHJlI*`=>BE$4>{Bs6TejQ8}5h z5d2}z(x_pCzR?xEN7-%_Gbe&RYb1p0xUA)=4Uc*_2lXHnOZ6pfyV#*c;lRhz5P0ft zjnLHWY(wdwt^b(9#3;a}#E}KoXixHRWLcWmutJ;Z=Wci0rwwT}>tjam zd{mMPi3_m3?7WcOV_yPwuE2O!{O^QPNDMR~Aj5-E+rpwmljkic6i#VsnY8|2mq*H<%i3KVpT31CLP%2NDr?cQpNcHPwZ= z+1#MBeh=7|CXIhF)c>v%=$RBoah%-;i)EW2_{wLrGLIeCt;$-1w0VbD7Q-o5ur|VJ zLNlK2KZ0VE6;5l{-#HX}Gh?nAPX#v>0R0L4UH8V{ZnGIe@0_CoKtKQ)NK{B7I`=Cl zS)L*g+T==yt5V*@I)OEWwD*T>8vZ@upB!+s^9y~m^f8o#Z*_~}FvC&j`0Y%&H+TnD z&`%shw{O@F%hRZhcFAv3G&^*7KKKGR{`bh7Zvog&l{^e1azMkIsE?$xGaQYuAFTc% z15R~`^1#-EdFa8o)&8%}?I40R6)ZIEMexK=*vCfUvu%k+hYJE=zj6@9 zWMIV|6a(;rVt~;PezU_h=oCw_ODdZd|AY=hKCxkhoVY+|Zb+?(i5l{IV2hfi8#Z*# z;kyyA#18L}Eo>`&lm`7%>%Y0uv-dX(h03u+aH=j$ZN8Dl+VD|1*A4Y{Q`MrS-nY6T zz4uq=#E<)k#z69sHqWG#tpbQf9`iOe-DzRK9{Zrb(83f@%%VS z%}uemI*L$I)fyr`-exIdG1fm**ZGXA)c>QR%4q&$sO66KLzabH9%HjQbNzrE4nhVf z8?qn-@+r?65_NMHyI~350Jl&rn_PQrl_-@mwdXyF>SCDNm@KG%b+X(}jB5&7}id+9D4;ZmY0$;cq6FidA7cl+xXG+Due0aBNf> zHPo^6`sK=Wd}e4OFS*?5MsO6+Y50?R&6OV&Ojh;iT~CB>96eghJu8o&bG|*T(6csl zi8#m7Ubxb@^M}zil?AKk`l+)vV3KL#1tk4r_LC!~3OEf@wAqN9JOCBP;3nP}0nn~%X5)!DyF_SlWvG?is4pMEyDCK36#z~y z@ZoZ;>WvMuiSQ}@+HA334u)trOT-F_WhWr`M$Z;Kvkd*>k9xjJY*R>iIL$#?s5YI$AC<18|Qjir(PSbu!LIpg;9rbV*#YvD?&>ceY(9KDx=4rNL^8z z(DMqC9ZeS$nlu53fv_QO$*AEqIt{Eg$}yL4tq)y2RCfm@artI|u`7iG0y+?KK>1TqTW!Br<*;pEYtKjjeF$5(3`%EM@+ z`x>(JDrWUi{*<$q6@@M6B#1%o&~>Js;}EH3w&O&ho^1SKR!zl5gf>8|#8Esssl6ri zvYf0ByrF?xcJEG4@EiP6T~fe^op=!1HwL5U{^xB5)yaE2->fqfo0nq%Rcb(HGH<4h?Ykqj6Gi=i3>2f?T7nZ<~7ep47 zee_6G?Q!a7;zG9QeDo*mXJJ8edq%#w@@!(H5aoI>1WB`F$Krv*>{%_Kn;OXBiE<-# zY@oB#Dysvh>^NW+fn;SfVKY%F8bm9Qi?7p=ZD{uE_>O(jEle{O6|kUD7mw}yIoI$; z{W7Rj9J?&YNr00NAMT3CvIMMoTvh`XX0Y-cdBd9u72*#V@$wG6Y~Sj5hi-fSq%YRk z4C88w|3^{BVFXx>;I(hW2E-?=^uY`H(f+q40Lt~80DUZAj1u^7;bL177<>D_nn8&$ zsBr{$Sg@i2el8joQ2hnO_5M{j6fC2GOmPqr`_B()2EYT1SpOto;Qv!Z?*X$Iu+;VM z!R#3d7@;t*?Dn4rYY;(g*`Z#nKFgMf2Qn$k)L`_-51b$`qH^P1$2kRFyJ9@v8}9{~Ln!{+ zC7@&g&Ah$Iv*8z(qKD(-D)A}mD|b*i^RJKc!I!aw6W`_--|qGXFDJ-_ua5_7HycBT=nX{|DKte0M9hNuX-1ay7^@%0DHH9OJ z#HOYV0&mXk@1mzSx@lTywv?n0&za5UhDVkEps&F*e!X%Fn$BzU1swV~w z7^P28nc6=Za21+haag`a3aIXN#4TBsG(zN)>sfWC(u@(VePnNpO_8c?R({@BPnA_p zlA`Z($zshw|Gm+bcjtBSx#lkH6lPOEy%jvAke)I89Fd0#%jgnKtDnHlZlGp&;%Ew# zqC^mK$D@<+cb&#PtQ}Y~oV_88Jp@Ci$p~yY_a$0tvu_{Tn$JX=Rc?33_-G*d zj4fUUZ~}n7uj+55o}vHfbET zdgIEWpvRV=$=CqAFrY`IF z!??Jw{Nuj!Ehad)HAw+FwP56})z-SyUe8B7>$Ihx%bqvl`&P%VpT_EJd_m|2^#bp` z(sMq|FBWgqG%lr{O-Vzc%db~+%~jteFuWt2zp|bLJVFWwEa$w|XutePeKUSFZ;HKl zbvMYDzJvs0K9*nD`1RD2C3xZKlC|;lxwev{gJ|icJ>Y5&n{+=Y!yCQv6FBUhid2Bi zgU!Pad5fO~M~1U$pRn`k*doouT?zwJ%F;1B4-vmK$0o{FSMvTGJ(4nd5ELC$v)wVe zWz?q({krcx61@HRoaaWe=*CUVnz3BKleZ3qp(qbL4X{z>$w7%Yd0{A7C=cjM5Tm4e zYC7A`Kfme|eEPA#e+%&6>TAva(nnjU@rXWYf|4~pwANOi3Ym{xn=`>yZ$R-=%6{7H z+)01U%a6HYE}yg75uG&&9idm+A(l2%bmomx1Bvo^SJ^@?98!C!XU zC7r6Z*0PxV6JaG&jff#|OY!uS;4^kbSmob}$`Q7zRiPfJN6yLa z%L(Nk7aN@RvU>;hjeJwXEYj;rWSu;fEP>`0PkI}P;{FwGm3q21^Im+^ZVyl&o} z@frI~J2_lG^d;dM+Pe*%>MVSTisf@BZKL;-wDe>9?5d4iTALU+$McTXbq188#nN-v;T~PR|HB0T43N^R`25j*{v6hUl0E*wSc z^ntBN(Wj%|<4+F?=T}T(ZJEu3*G>0Cuzn-{sHMd94xS%~_^mK;$qVHjW3xMCt|&Ly z2Ajh7UrHT^kFkWNz(*i=kOgiGx9uO zL`^S?kj>}!xa2bJ?)eBLQ;8uhSo%*~$UcORHXxGPc&tLTG40FW%(&O)koP<>pIr8& zCV9oi^JiCbvl$nIrRT%6)TfAGR7bH@=QLD z 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%0DW@TouXmLm!6%=Ely`L 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 ciBsPaJ^b6(ALb?g90a`7RJBwpm8{ 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

    }>j3y4C}^HjPaUa);jasQAIc^&-sPt? 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

    qVzvB%4^hILmNO1KE%kprte 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�A;YF$*91j@TQHT7ecXv}CwYMH!}@+(%qfdj42WqY&quY{t zn4AwsMGX=Hsp=0haGE_?jo)pTL%P;3nSO)OKu*}f@Sg?-DzC&h0(aaF@$!u5I*3PEW(EM*;xkf-V9V8L<-ywa#q=+OO zmx(JS17lo=x-D%=0nD$emaU}YxRl=?cY`M9k8e(Pq5fF!u#uzUWb;@s{l*2XQ?bnqhm z!wInO|5URFnCN#_@dgX&yYFl*2DhyDez!6#MaWrdtV)cQZ6~T?gt{{_!tEEn%W-dU zo7?O~h(y~x)^qW68?+me&RIA-h5l}X&Cp6>a697PI^tybo7jZMZuKI{2WqS zCTJ+D9iQrHZ}hkMP1>WuY@QKdG9AtqQnAvxxd9lt{+N>U^sp_g))?CZKZeBlc=b|mDn^a(@_D6z8DQTkU6%fk7f@qpVXeIB$} zNo{#_Lm9fFfb8+T=@26N@vOwv$i%G!vebmKvG@2*T*CTYUw^9Kiw}CJ24+>Sw@9%pLSi(`$LvH?`@ZpMI(V*&oTE>%d+v3pB9Ju1yI zugtF|6SqJ8f)qbMsjn8zl?N4tmFutJUj|hf;onceT{ zeS`sp4~?5aR|p&@o7b_62TBSYYw*Gj5iJ69VOXo)&{D?o&kH!P)ZN)#LPT8S6jhs!QU{Xr z?D5X2>TeV-h9e~Ybx0$5H%`_l_%1p)<7Ooh)V!SNmfy#vd-@{9ewd_Q!!}o5WM41V zYpHlv8xN&}1`D*eC5(-UTsYiT9>`p2M869ptEEvn<>SVgh7HA5MUgw|j%HRUl@uk* zC+5nGwY}V(^+l0dLc@{j8?UgNv^~$GpBM{vcAo4kB`it>#Z19<3ri+TF4hOC@ zztKGk`QQ#4w+x7!wO?mXHOhxHc=ns?vxQWYzKvQBrE#ZXMfIB*DJU)BCQQ$*9kz;X zFp|v(`!%lrBPV$`Za~+T^qsuSwpS@y`x9w~-ZYjd;C8CpJaL&qc#-O@)3TN5^CJ&& z%TS5dKP0WP!~c4}@!Ng1A$7I}eRXmEgibYb0+wze&OD}0*5TYFfECbuQ}jGq@vPBL zlduk~aV|I9c_uY{y?+OE5EM~rfwE5nrimfDvNwFN{&f%rVk+&TA(2jHEGPh@7#%Gp zD-;yJ+7x5?(6!R#iG(xt)A#iGc0loQSb?D?TNKIlns^c_5l?b=mSQO2^`}K7v1!}r z$uNjO*1cV~La=77yUd*2zK<{hdi;3H={i8d{+e�#< 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�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\hi-l%? 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

    ` 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 Sp`EP&zg;%7F|9MXb?-kbqTQ$f diff --git a/assets/ideal-img/article-image-sfmc-debugging-email-sends.f5cc312.1030.png b/assets/ideal-img/article-image-sfmc-debugging-email-sends.f5cc312.1030.png new file mode 100644 index 0000000000000000000000000000000000000000..f0bf15b7f5740dd956fdceb5071b656bc847e75b GIT binary patch literal 448671 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

  1. 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

    =yw2g2|64g(Jqb?d*|5ezTtl;U(mK~?-Z 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 z%0A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�TyVZ!kctEP@7lrS* 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

    L2~fB`9bQk-XjC!p0%P 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

    +Re)nOl;PcH8SL9>8%odR$)u|l&a(j0 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

    _88H2D6#f;4<3>_tq!PC+ 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

    ac5j4Ef67>oECty}nPfHzRHq6Am%Ll0etK?+R_e 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Ň_L(yem(cnUR6i%xiUscZV%M&GOg) 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

    #Z-?GgooPez&In39J=khrM62>vK%3;C)8*V|bqN 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 diff --git a/assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png b/assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png new file mode 100644 index 0000000000000000000000000000000000000000..6f702f6f7bada9da8d7e037ce139dc52ebaace61 GIT binary patch literal 558545 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
    4?`=_GCrV^KRB9sa5BYO^bPy-E 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€SC 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%0AT9f$^l|spdG;oeb?OQe}18vo6BsM{m_eW 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ͪI@H-|qiAIGuRDODACs61AK9;>fg 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png b/assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png deleted file mode 100644 index 5c6379f1815bee8596a42dcf2fdab4c8f2239237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582526 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�~lArMOltEOXP{6I8J{ZKKz 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

    e1_ewzA)UOG` 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

    9^c%Ckpy|)^z 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%0A9-&avqRM|#H-`-vv`l83tWPqY0 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 z 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%0AjQ<_akX%z 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

    fJ}i}eY-P1bq*T#o^HV!mc0uJz6i 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ⅇ2VE^NxIw{bhf+NlH%+=P~N!P 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

    lD$R&DBF}>If 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


    IqkAPhYx0codyT^ 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

    lCz( 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�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

    a58%&Zw4ADyjfo}3tV?7!U7 zhT<4E&SiWxLDXhwmmM0yD}ddgKe36BRyQ**+Zn|@X5-4(jZ<=~E}1(KrX+u8cBXBu zTiIbsRx{qO&ebW2>Fc(0)n$5SP5!bmMkc zq1QAq)jFbVJn)e=boq8tVM6qp;^x!)a)q%m4|--HA)r}tF^q_y>Rew7#_*u8SLRBv zfP`bj(fi$%y|rE8QHj%zDl)i->fZd%aPmQhz|t~UEWtk4!8s#pm}#9w8Us;AV{eeh zN9IdSrJAOCF=1sTI>;uViYLW25`8oTq8f(}>OSCP*Z-0+hBqnPKvp;P~#SoD6ON zf#~&XsWtGg#gB4r7?xKmBCH?Jz$E9U7(3W*fVb~)LIF#Nt;qZCjQl90T_at5uq+xb z6vvIV@m4+A0F+1fz7}R1@7XBF^U@9;Ndpx?3M}8OOv6a^R9&T2`+sKYbVL6LM6P)9e=WIS5yrD_@Z8D~oJ% z^=cDIaQAhcl`13c#pLFxnHGT7q9Vm0 z$ZYrKrirN|QzK4>*c=zz+M+Vb7zPrML1cyV*nF5qhUNVXx-1x(cr2KSAanPjp#wv&pv?$$1eQwFRdaK5HYyVf zEJQ>^AWIz!zVw!CGEi5u^s|xf5xv@Hkh6`QCNGf&e4>mw72o%!hMV`7ry8gs;X+{ zuA^D3DM?9_s*Y{-bPZA$7PNZlE{87C7BoW>B~~gsa>MxIzf4Bv67b+)59*5iIea9G zUttsT+x)BjFz6#!k4%6(TF;($M@->;lOKR&#nuArcTv}!YuI?+Q4w?Q;F=MGgNN!s zDBXSAH%|BtYUo^Z3yH}HHBf^6y(sCA7o_F!Zw3xCQw-@iO-p8nHE}r^WWs2)77d3* zI*=d6A&Gh42LQ0$P6`!P;0>yh(EPu;)OQkeg#WF7#gR4z{ogiHsAy&^nEzX+mBb8# z`#*hQ1w&*Jx5R(r{PzNphXDD1>xnes|DQiX*FXM-5E&9qt8l_20)RbovdS{`QYPR3 E2Ql6c5C8xG diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join-reversed.b324a8b.1030.png b/assets/ideal-img/article-image-sql-join-inner-left-join-reversed.b324a8b.1030.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba3ab8a1d7e36a55fb72b5bdf009869f3f2752c GIT binary patch literal 156815 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 z z^cnC0*CbnIaN?8PG3t1q^>6PIEFZ9eWu^)4|D!i0T-HUKgqiPq01p6#uHvRZ@^q4keAdpAab8BWjoc5sraMy zjPgy4Pyrf?g#Yg8mq65oTe-4|OP$aT2Hq%+^b`U}Dnms=oxqcUQ0)f392N#er*LaR zad-H*;&NLLP00|jRZudzxK4Hqm589&*&Y9HWGbf}onWiOy-_ht-FE8mXMS@58nC^% z=PIJ*`~F~7GoRfLxgFS}1H$8F4^LY!v^1t3Wjos}Ci6e%exbNth22-9h`G|zo|VNn;gNA-c77IB zGWUa{o+tcd>8c`cC85vH1}p87{R8vkCn`c3s}`V=avB*J8G+Sd;w1+4hSI<*EGU+} zXO_Uf9QT{bFvDev2HfFuLjf#2q=g_bznd$|uB||-B zur3a{*>?xW3&+&o9t&M(?=~kjS8dpavdzQ#-@E%uJO4>1iO2PCcrd@szTdwOCF`p; zwN!CNe+_Ne z!`TRLezq4AP;YcEL4or^AtwH!1;C!zAd^t#c<_(T(ez$N91efu-^9bm2ua(0@&zNH zBvG`KO#eof5Z?p1p4Z}RCGeIgUAe<41VhGUY-ZsOhD#|j8Nr$g`WKqN&-pb&)%Cny z_&&VtjB-(rU#3z}E{-byNEM1xnFuQh<3OQ`V$a9MisPl9}jHDcz_HY(6tP?Thry zGk!ozCkAIcsdzi4vKm48I;z%DjRsl&i+ zC!ZEBPJ)KUsmIZtSFG}$-dYo0z=O$Zk!zoWn!q~oh0g-q}Zf}LnxwH8fAaFBdR2sxnmVg?P~ zwb^$lL%Z$Wb<1`BeLrE=<1eM=nq&`60XxX3i+^iHNsSZ}yd*47%iuj`>(7)EeY=c6 zr8JYOxh_l|K>E~E^HKl6t-hu{#lp7vnnEama0x>!_JNfon@P8-^RJ_#<$&ibx;2?_ zV&4

    n8?P61PVH#6sc^-#}Oe8_@{bu3qMmi_363xnYD#dV{5Gs%)HoyhAdXt6fp z8)6lA5}4snSsC--c9W!dB6$!_l4wudQ`!3b%ZO{E^PKDX)MY3Q2?F+qJf}AJfg*%!g8Uu_{7!bn=DJfQE%e)}Qd__CG!-Pqr zX|a$9Uc7{P&*~PG1CZqE4g3TyvWK@fdniJoFgHskIe!eziUVJ1-K4sF1#%8ybV09z zcVl!w2H4hR^3tvM8)-wN`s_TO=<|Ea{Rb!2{PX9n_p|%YOL|0h#&{aF^_$&B>ubfH z&T@C)h+dnJWQkSS39wDGr0g$hm-mKyRdiZ>1mwNFy}*X!&X)iqM@6;SzykOFd-pA~ z{`oCZ_(C7f3m?3&pJJZ)gKB59XUpIzwDtr&jIvx*26ppeX8oDK_girB$Ut|L#?$NU zMDG=X2q%`y#WtKE>6d_Wnw+BRmfb@(J&V>A1x1K#Z2{loma?8`kEomg>f^+%KSnYR z^VQCKvvwfYcEfCEfZOV=VjX+Zlh>y#dA_}dk=5k4)>foob*%-;RnVu#Tz^ImURzBa zlOHH29zrJ?m3BTPw@3DF6s-!JDKqKn&<8&~bHke-@3How9-l{AzW*)cbhL^iK`^q0 zKmB4<99#gVA6(wd6%-5`B-%iM$Zh4LdcTjdsqo{PKd{u_}eF&Ze$3B4b5s zN?Q~QQG1n3dsm-;(AV=$sB20UCtFz;eJ}{{Jwh3UE~%l)RseiiC!!Ks8WQ^Z<@6Ai zD-VyLRRayl(1e2ET2?0SuND*Ye(2oX-NAvg0TTX~=~!!3bhxJNu*)gQq{dd6E+sMs zV+ix3{T^;S&;9fJ^?~TddCsrE<;)YWTU61H=!jx{aiho8ne#TJv6e!dd_U65?778Zdx!2M;LV2iy>M9V z$^Yd;bnW}jUnfiY*8_BRjR@V&`EZ{YSUB;w_&#ZQ{u1MM;u?Twbi408(Q%2f(Uc+? zEQx-s6Pm4%-Iq9Aq$iCB^Cbo{4GaC~&z;X(HK`&K^j$O_gYQ`n#q6>~Sp-2LO`A)K zMns*?B{)IgGfvtN7$ZBtWtnd|y-3R#Z}9;8{`>>UhX}2F6>UE#smaV})@|RsTT1cz@ZzC%2H7UOZ*d+}M_s?DX)vF*~M5^FrSyu2{M!5o+Pwxvn4@kB z-X#~2TTq|Gwc=#LER>K(G-T$!WG*`|7Oyg{0gJ^^7X1P6l|~${Kxd%U+QY+bT!Min zh{^{_s6Lr2#UQ!fNF#Uuru>=835NO-F_x#6LhX!!sd&TA;_ohZC^TE0(E6m*@S)16 zGDW9R+!u=kTDybw(a?#c25m%*3))Ey%{tZ!UyHjt)4v<74Cy@e8;=ZpvN;6<%l|)r zCNt~Uo)+$viz`?0`rf%P>Q9bMFyCmh9Z1D&llg+a`6~L~Tu}aMO}`0O+~mOCiMCRs^8&+Xu5FSAftf8s zs1g1?BW!yLaEfz8m;7MqGU5>9lsxBb)1#={X{c;#h7qJ)I?SiCSB)oJMT*e1-x9FS z`K4jj7eBLGS)~+`jnZdVMKuCN6uEzYK8QzvcawJANC&S*DmC?}&iQ%4a`e+`D(ZV_%8lp3>(x5} zTwB1qWVxgjWpgTIU5lrnsA=UlQfM^Lh~q4eD!?hcjFzJ#rCr5m_1|+R_pg;%hkC#6 zc-+V%Qq6KF{v7cUbE_k9d6oMIm;?9u)z)tDC+;idk9|BHw8mBO3n|NxW4Kf^us3-6 zRMNd1A5aDfe0?PuCNyTnlyeR9v%wCIgarCBa@$KGGUz7w`` zXYuEbJH|Ebb3i8wyoJdjli|ekr2AMytha7gD`F)V=6m48Nl~ z#_I&)oNNqCe@s6zzU1J9USsc%u47!<6Frhu|hffK>?@mfXRhpNJD2e2?i-7!0ScjMAgFVvhsl1DFyX!qdZW z9>s8_davDxRE#j9T7LGkCp0wQsu;bfYes5>-yyh-4^iu(M}8w)-6#Mkwq54mwBB!n zfG$&dzimNd-kTUnE;c?FBdxPc=I}YNqxIOD=V`ZOj_L{FT2EA!!pGDyBo(wbyNYUX z%v;jJ0!P$*?6Qt3_MdocyZFY85T~fMq*61ndVvViz*jKt{dq$}jg-@8wDSbx#}kVT zbKR&Y@ACnlC+!YIr)FPvkNz;w{7tXqFto^}mRZFn@*Y$WpVB=RR04DdC`JWNA zJTAQP;5U5B-z?KlT*UHyX&saHmf&jyRz@}%$&aFb^uHQTyrPV+z(2iFw~JLGht7jT z1I4Fe@nASP9{TT#yDyjvZZH6szVLzTy@A}R1RK#_h0I9}4IS9?BfEj#ai*KtZZB@` zS&EFwc|L*BXB`5wR&n|bJ^(ty-t{}iH?o}7(Arj2?-nS8+)U|f-X3ER3ciT}5nBSa zLtU;^m<`)BN72BSt;VIhcX=fw$dr#~rVNM~0$Q7Nwa(!2t*C#fA*tZ+g^lp^ zA22suyUUI#Fr-eOGFB-5EUSJS33}1%n9L>Lg4Ue4l_8Bd{2kbFJk?}LH!^Ui2(2dC z_^EzeBTz6E8@uQ$Td_dn-4Al*i7PffcGijot?M9Ju}X z-c2Bv-dWn`I{GB1hsS>HFTHYiQb6OIYYd7z-+moF47|szdG8B_%R-r2*Fk}OKnFh5 z(!Y|5aKlN)iSLtx3k%r2=Y)coxud4-85z1&=}L=VOg+%zI_>+(oN}WMEG~aYY3o2= z-r64uc*XiP^&}P!OhrSly#JOz8&zg_dgezh6qtyHP+)=zI&3}i1!K>sXnS50oMlmy z#g!+Zy#t}SX!I?pW8g;ILxB8C1@9+(lw44N6=FJAAlU85$Dqx#m=*JAeDa^4wBiF_ka${*H&~KRilYfDxC}haNt-c1Z6Pj z(hLRbgfAB#4DsPk`dp zjECi1zVyxlCesXC7toJ|;-sZ{@1~#z<^E7P`qA@9W{sDttC5`KCM|3{yf))RO_kV()6%$T=x9Ri!4`ClYZW&F8s%9Oz$J; zgg!lZlp`%?Avmgf9o0l=O{O=LE%<8JzSdGGO`Ep!*`7DE>vtmI1tWqT*VW4F?C_|ISXNH*pA$oaKjjGp8^=eWE=yZKdXFwEJKlyo+$tlhe4 zNvvBBzQRf&2MpeI!y+z>Y_42rvOFCfwPz??bnS&?Q6p$+=eSYG#E~?13kesgO_kWo zo-7{kmqBros4y}>POd(#mL#1%xG3*sw^b!k^u9wa&szRTObDkYq(AtxR*620g(HcB z^tbD{%~9lm$!%cWI7v|n-9(x|6CG1piY)KPbyuNaa*5u+KM%NVeDc3Ds0r|Ek!%%h zelY}bzP4m~O2|4A0k`A^i5yxI(W=YI+QE-#PpKvYM(=By5npRb4Jh{{jL~qZu$W%< zLT24V5D0J63+-XO>_Ms8THd7ZKI*6r@JAbYq?sxg-)|szI{e0$6r9jq>itCvx_{{@ zL@Yz{MD)^RLjU6X4fSh}48RL=*p9~zD^5aq5+Z%k!`-+bYFr-7ssS#q43b|)EI9X#OJqWzGy2Xb zIJcrVD1u;y+upi881gH6@!QS&wjM{^GZD)t?(}M+ctRg&VB`+zQ39npZG=1y3n(Es z=Aaj3(I)n)$2$nRO z>_oa**p!y?BsAZ)7<<%hQC|gY`A57SO1J`k3Z1G&j$h=Ot$43-xI&UmPQ zERAj~Oj-LCV2}^)uNm$RCQ}02urCjnRug+l-|o~0gqkPdO~fUP<+J7%xI`cfhbD>f8voOpqz#pH%c6${}SVGDru+0WVikVyg9**I=kj= zz~IMLb$VVsm02;4vQVAfae3No zRf3-QXLnw8f~MU{s4ja@hKxQAEt09};hAmuS!_*f`8y3M06&uJBbT?MHUl zQehyG;c^B{KU3;EVr-~CffLa>HmV6?*0m-+X6NPY;BhuS+AuQxkhjnUQR@nBkQx^& zqG6O{AI=2A9hm*0J1z=D0G*RZzRXV9*0YQ}p_5?r0mcEzpugW?Xy|Ay7M3QLkqh3A z+2@u_66#L!pz4tSlSAKL`;H7?w;ai2R9KwujcDw1wyd{>!6on8Sg0p9Wg$i66noGw zXOyVCy@ z?Ab_Er(0PxV`RH>oaA|zextxaOHhS2!1Dq$w6B&NTclF*)S#JGC5Rl7&&Z6WoXVkh zj#t39B%e6{>OH){m?BVFBu{uPnS*Q12nk^~$X1VzDDmSsc}M%T$@Jb?&z|@>Q8Kp#ICsbPKsjOzUdvo!>kfSH;MKO zwEL$I$m#8Knpv|i@C9orDHU?+&dyM3m*pLWmiA#fYl65ug)6q^NFZGR^60Ank#Krn1Fv|`gdg2Rkfzeu6E&v4)|57dZ_ba0)-+Smg?~S8 z2R}U8qvi{YEF*cP5W3{Y%bia$d}DI5D*tLRy9ATB1*OTP(wa%F?S|%5E5`e4o65M_Sw1<+aZwP$$k#ghBk5?T z4Vk0{!r!7M)IMgs5~;{zU%n|QsYn$5BFqc|nTc~Y8h&miF*B!BME%yrLru%g{vwe( z0iKjN_k+)&L+KPZzo5tDfI^Ep2XFVM8QzH+0{LCBHOb`#!>LySvWv zL~WvXGL1&%Sjg18eevUsh3zC=DhwR8MDpc8Ios#{PUwx#RSla&%-m%C+kaF-LJQJL zW{UTSsXXE%WQQVrVnSUD%dKX+pwnIR4O!6=9N>Ve)d_PN_U2&d^v@(nB*qgz`UWWiG_(XIbU-ti_%yV%^P)ed?-`ii3IihI zQt)kZKN4q`R2Y6V4@R-URD?`R>$`6dO`L5>zmJm-{Ricl21wpj+jdw159iWdrA^;*}V}UqCJ%IVlx2>ZCv0N*ri%tHa zzOl=ucw$ESZ$w-pxBKz-Y^eWZ{2Bpd<9wEypBv9i3HhYgh(bbet~zSPD2YoIxtaUt zFtTuOP&uBW4TVzeuV25Q;*o*Q!~LVRt%jM6)U1q8UcjTJWv1q)gY3}jv#q#mZdU}C zp#DS1x7SVSs>dA?)EpH_Q)-{z&I1N|iRp_vbr1LX2A5wuqQ);SFagCrAyf5XyZiwm zk)-rc%d%Im7&&&h=b+yk-$~jv-+yMYas!%)X|9VZ~Cu%QDJheay z8n-2tP2tX0 z5DUiDx&xCNa2%3rV8+zU%Z{;+x=*6jRm#58`6uh@)!m!T>v=zsT4QsP@!L0%j_`)o zzrdS#?qkNt5PExPz@^SLxxW%o>YdJ&Ra+dNAq~)l3j@Fi7T_vcA!k(oio+A6G(n-d z27o-@O5Dm`--HwDtSE@YwxE4uTuGy)hEuE#8CXaCFc%Qbj`+7dEEXIfGBlw-_mMl) z4KI^)c$Z0%GfioHEC<@jyQ4D;uxJ!M&IMlyenr%sQTg_|s;EFNB60r93JB)>xS*yK zj<-uRGH;!Eo=|Wa3?vAI#*sl+O2eIk-bNG4vbm>0Uos88f7J;z^GYErqyen}vIPW;s_7+( zw1SWIpS3(-3e?^nVY+thRM(H0;I3ta#Nid-oE%6Iuz{l zP1%E}rpA`+>_!vns;4{ocn_~jOCZ~3gk~zSE;2G2n3}%M_I{7GA!Ft0oGq2zF01jh zC7bk>op{;TKbn{95dr`==lz$wfKxgTg1*s-m@wdyBPc?*izgJx`jRMbdP>rR%ob@U zy#ui#QKUmfA9o_xk>n9@V>dTbHvjDejTxDu@pRH2=3t%)4fZp`q9wn&gLfx^48sh!r;ly1sw1z59NwMSs?_NI8L=xiAU#VT7QEo3Gl2#A zLiDMn6UEK52JHPYu)+|%Y<#;B`8HjLVGsZiW8v<()xis4t-<>&PD-P z(~r=x%1Y8lM1!w+)YQYt8d{#QGoPfWbvp%4;A=@P6%}nu{;@jzMZI&koGny5CzV;U zF_$b(wrHq_k28%dN`p2o$Hk2%4h-p#rz;VWs@Xu%oytYf za9;Fi*A-i7BrmWDZ6vZ$x75K;2EW7%-V;({CQ_WPlEmivr-o}qfqSl)0*yO-B812f)ON;cY*(na(PZkL__OP>G zaWUPBxR~)CeRIStLlAu0+fe#gmfMWV$}7*2mVv+9NK}UQWK?#5=xm;8<#a4`st}zd z&#X!b{>yH$a!xLH-iK)W-Wiz#k+c(gzvw2$UOkL{z1@azx9l_Gdp17=J?|qC+wMHB}NZS0xh-~roPYerIodq9>zG^tW z`_yR(q)n1j{CSDeG!3G`a%Q;f*dp1W6!Fp4ESVX0O^!R&X)|h+r-CJ0%^y(0WMnjP<5D|s+e4hE>naYgK)8ylnPu#bYUCQ#jH{5 zBgBD{&6;F-__6Wv>Thw`n5lJklxQ9Jv!v5WtPg+a1q^vCR%_shlSt(O(~wz@#$bv= z*Z~w>P?#6X`iJau@(?Yih^0>`9r}isr5(q`UzaFZyXX4VIGC&cWbP&4NVT#?zK7S$ zO4GmqXr1)awwRyzBjQE44kM)5=uUdewX8Eb_U)Ft2w=}SPG(9g(KMG_Qj`g0M?5jP zD5_&10lcF{hgBspL28vC>>QX6GoKCQq(sd#IohueJwzY^v#`xSq+j@aO=p;Rth@VjyL zoyVN^od!KZz(@!}gy6q9k|Qamk_*|6$D4oJ6J=a>3j{~C26>a7#_zD$`^byI0g1rx zFLz&~QZc23o(IYK)ey(gna-KtwU-hbG%c2Xtsvye5s@c%`9CfIuKRBB*N&?veMB-0 zLy9yd&f7yxDEQM)5j;TPoAPp1wVJ4fpO{tK_!f6Ftzps`3a}iA5F`JDg`^Sa2VILs z3JduXXg+9Jg29+(l_)crdK3F@BJ0$TIJGP6XGZafi5g2G8YXSsCbJYv)+H~s&eEwG zAAH!6kB-|luBW_z*l#;hA*;)l8V2FS(Ufq&DnLRqLJRyB50o_YGqJB~pq)BCw0r@i z=`T)xwLrZfjqU{99Wm9jcX5oYAPKZewCSDSTO)~~H~-%CO(R6d#@V1APw{w0ugiez ziDL+$1!~sHAjHl|rA56gjjs?5z=osR2#m;!_Xr4bpbQjjHUMFugT3Z!JAqb2Y-nBt z0{EHF-|X~NTS1GdSp3;g0lmF$>rJ?kJUa5<9M++(U0v4$iRJ?U-qSGP+VWI2R3rTt z25OP7u9M9z5I<{qUO#2rtnuE+JT|vWBgIwOZRbnRpx!Augj2HBi1@VmFq8; z%z$6Yd4{TuaNd?@>W(#=D1r$3;kqcU5q92V9O9J7)gX5 zMZFZ5&JgxKNOygHJ66QkQewi>lW-Z9vEA_`&>5f|0-SA!iCQ!**SB@@pV{KgGq?^c z8&1#5Un?k;)Ff{^*`<~R;!=qK&}iq*^l&y9kndlofj6Nqo%iNKPS~jxYlXrvyW0vU zH8{4H(1wsMMZ_l4!Uv2QvZ-_l0X7*IwixA&-KHBh4D8IZazTdCvw2f<>3WjxmsF(B zrP*0{7zH5zw~b%qF=vNK$v(&ELQ~gOIa?-()o^dL2zE`MYUM3*i8J=$($i55PfSQd z&5WaaUP493+kxZe3-fSR#~8sD?An->;wW6t>fPkyh>^)5y{!~47OpH7*k}&&cZM#( zuhOk)R7ypZivN!tF~A+3TIZl++e+DM%yjd8YFg4s(Nh7v!=vMaxujyCu=U$5^Hu03 zK@C0sIcfOW#>%4oK+qA#HSuag`v8W`HqV}B*1LulipW=DA7G|H`iKVbexhgu2dd#> zuemietMO178z0>P8l)5pc4@VL_?U7OwwG4xz#+CS3QhE=ZQ?6oA|{vp$KJHrJZXlf zGx?*Veu*A9DT;(`*^zakq=EUEyd-;7Ynz{^aTm46!>v~rWt97puZ-- zv*yzWN(JQFBWX6du>;n|_?KMxs`r<;YPcbhn4+C^a;X_$)Kde&(ni>1&o3yzUvyyz z-)R_~xZt4CVl;XhlUB!9UWA#cOfIV^KHA6%C3K2e2|0RV)iHf3sD^L*!#d~w#F2~J z-iT}Y8^$;V6uxT9q*2sn0QVyjpA-1208q+shttwG?L!^DcEX#SsZHpH1SjSUp|#dO zN_l!dZ@h-OH#ooTAyQ34{2{MS@#jo*l?i1Vjnf(Oo(y1YxfRJ-CE*Z1wD3&3fn$1| zR@zPm#$U$H(1TbY5+pcub1BL0*A({R5Co_fzuz#|0M0F0rzXdGjgM&GDxrKM&rwkh z1Z@pkxVK~8WavQC{Ow3-Nm|_W462qQsxo+!M2&jelhB(dPY?OXg7$%BBsi=p;cFu6 z`}5-SU5p&NZQYUo$>4G&f3jvd99WQZXhI3FL3*OPX#YVh`ko|7c|ZrLA>nOpV+w>$ z`Fsi2!e^22i%hHxn=Eb*9gy{3QbP%Vr6a>77_U=I{1nb~%&5-0IHi69xvQW5s6 z78>fIQc?O8hw!rM{cUft6!MQQj(;cNCUm8-Wzz;N`m}^Vv%PtF>*HQB1Fm760*zd$W3-Zr zG_>&NZX1fJ3AtYc=23O+1A40I(v$jMOK+0Q0YLmCGc0}SpP0DF(_Ly?)xeMpOjF8L zCEmtm09$Ay9Q%HgtjJ&xD5ci3LHLbFf+@qoY#@6!kS?qb|L9v?atzzv4Aw}WGo=#lB8sqE_t>NKQ zcTe01x~NqdTHn5?KtE7@+YwvY*`Z2D7Gz2=Jw%6q7)vxx-9#e<1o66B3V(iZFUG8? z0~TN?xNWY=fxVO*c<1ORWQU~@ffPapBPNt8=b`UulHzP=S3wa2PPE}QJXKM)p;SO! z7Sr0=2c0!x`Pjog^>N}zSai_>7(o8!x!=WZH0evpdIFI84xWRm}VFOJN%mcdQ+ zqx(UahyQ(0<418(f5>(HhsqL8T#|@8_i->IAWXhOfv5#`Pn#J1eiL=bg%1-q+(YIB zYxZf#i`=X2og9AYB#> zL7KDRB4a*c*>7?GBLzEuSZ?uE2BATDcn!jIq+6LiS7>5RC^b9`{Du<=jTW2`sk+bP z_S23f{y#NmtyDzEakZhDXvhUOX#hKM#YE{GW4eKBS0fFFR>)1LcvoXv6(Rr}ZzK?# z6oGHQKS=debh}iV`SQw@y#yhJA;78-_qikT7N$K6brT8%;x?pdN(NINsESxP&=3a; zf#e<8L=6dYjY4=Rh5xd)GU#kZu2&q?uRvwVXr$L-nTY(UjeXAB-L*=NrnPPC^8NR7 zXgUwg`fq$v)IS5#FM_@y*ZyxRzX%{h0acYu8K8Y6}Aq}L1(!Qm0P3Oo8UWAHvVU=CDfa zFG^?#`fy-@4&Ag_8L@Sltei7-RTPdsCB#wFr0QzMXc#B z-(4VdGdnwru&pS7dvBO<>zQ1wW%0ofQAo~-*B$%k;Kq?(*;^3O-K&EmZ{Av#k2@l( ztIY+47};H}rBD5Bs5Xj&9$NBj)|Wb&u)e(ZW7uqWN@ml9qoZ6X79>5S0z#j=6CxT* zPLF!g9#R+90z-wLJXLS$+2~xLY!}eygFeK?k)U`sN4(8p0xHJFPW^ngy^8YU>hg%+ zh4%LLl5)s;>_anc%lHa=N;Thh(sp9w7#2Nmq)+ZY65(EiC?_D^%NAYRqKfX@zy8HR z%||@XfN7T6j!ux-OhCy#s~T&brceN2FS_u@BjIc!&g-MSIN{4&l5>bmUik06J}6S8 z_A9?$1!Yyq;lmP7KM2*WYM9FI}9}+-B{A_V90tp&PRnH)m_9nhK7TY2zp;N1%Da7 z9qPX&*W~p}$Qj}_2aBms@=^kkPhsT!L-^g)IYqDwMp$Li03Ly?`pmEzs|(XwyVS)n z5$aL%KlDBg#s7%AHRDP^ucmcg+Fl>3e+-*WnC)H4p&z!;eAP$?*D))~ClpJQ8^2%S zPDb9Crd@R;j6m7v{$C&W>&GO>Ve6;O1VG$>7@pOr!Oi|$KbC4Jpa^S>4OA&CoSPpjR&w`$s6e$2M}Y_lpKvpew_h-g)>jkh-x=Zoa^V(jS_Ac%+2W5- z_0|y*MSU>F)$oYWmTcGX~}uIb3k~p@!1e zB8sktGF~59c?g0_Bgg-Qe5rdkrL+~gMIsv;w`%M{ti`t|$LvwzZT!St!l8>6sEXtq z4dKN;721`lpd;cHGKKPj?FPo<**W}YgEG;Qob*QLW?sQ@5xP_p%?=n|8 zv`Kiq3Uv)L*u`OvhZ9oJ2kszXXx{(KB1{y7^(U;yeb7QI(eysx7dgefLmt#ShSjd$ zXVBOh#c5|e+=KGo;oawxX2Bl(;{v-a*MWck*lTY;G4ox<%N5T#wW$l}U)9ti-geau zVe|;6zkr@g=RO3YmV9Y1nw<^FVt|9~k-888I3>viM^sfyO0mYrl60_og{T@*OI6IW zc1A*a`uZ@9)T^{U0A`kT>LHYpogGfMuA#ASN@5SIv*1Zz7rE}@%(a1|RrKf3b~-}~i?7{AH^4B{bLm!E_6 z*OeG0Z@cdQTg(sw#mtbL;5JGFXgjk##(^Kbd+ zD|;)rt)#bdR#0Z){;pfYH#gcqBca1@IEN$S7Gg|Y#d|C5cfiK7am1uu9Vv@J7A>`Q z9!y28n^2x;Bw2ykL>@|3CPNq9t({mVPQILy_4^4=B4BX-LBjZVlGI~85QhlM7M@%*QCwo7oB1v$ zEW?zF2Vjlqw>@1kYRk)Mt8|rcb$MZzG~%?4V$zuw3!h-`IH=+I(m)Xh!4XeqtOC0w zRa+8`=4;+9G4neb4m3vnv5;1oge8s(JfB}elDd5?Rk6_K$b**_q6kjYKxEHS+ z|DK$l%37u(0%HxyIF7vq#H(9Yh3*GtQU_1o_yW8rjmv#+g;WKga4EtH`qLPWX)mARQoH&OktGD!!rle7|MPd{D*J5q5kX7c&8nHFv`x1L)J49 zu3_g~kW!w-FJei78z_r|d-;-+7k0vbha>%GqhiEk-06yTrx(3Qw9UULI(;jiBRyuibrFk_OyP5r`{tLuv@ zKNDiP+?Ew392u}v7ahx0N~!FNi->WmLm2${1$9vd-v0BFBvaa-e?R|0<$-U_PwMLH zAto6|!qLc?&}}yOvGEQ%L2r1<)QBYJ5JaAWH(U(zu~K9^1l$WOP^&@9a%rmo zg5a-zl7p(}-_G@~&Sw^AN}IK&jH^&dEWz9gv(wX(dT^EO$=wyY^(R=cezgg!TZaYQWRH#Ud z+hRlsZ`$)!{ufcR`U7@FY_Gr|-r&}t`4KU6Ve#1|+ta^KO+pbO$PYB8luAmWQ~SsR z2ztgVYimMRZUG2dBhFy;jG6*N19|+p1%9;{)1OhCz*HgaAnfr!aIp&{9Ym)$4gVv8 zl5v1n5lra3C`FgC{Vy6X+tsP3?wrVL#$Q9b07F%duBW!PCt|9R3La+1dTcB?JssB6 z9;53%nRGiEvfzian8j`tfID75A&b!|Aybp+F5fE&?;Er*$^Z9unle-`HhSRf?rp=l8TZKYV zz-_Su<3m?eRDY-SOq5=S-2S>bNn5M^yd)?IsIEH;^iu{z4b3$N6UgedAqBOAg9EOC z!m5RRWybZGOgC5|bEffS!h}C>@y<<|>hp>+;DN`Y#P@TW5?Us$2L9q9{w6E z)LboBz4|U&)v|fhvOf?z>~n0bWM*OXcLpsoJ#ud$J-l{fcghTjE~`aloZ5@Sp|D!D zD4w6grtl@rhTQV3g1Mz zI84#fbo`a@nyMvXN9xdR*7Jw6{5%)na{RO3QdR&QBFP(;BU(3hW3p;AOU6s^8@MjA z=7QF)$C}ty&{7Q$dyL4OumAK6X5p{@3;N@;mXMtd^6=rQq59K>$uNZSBWqvo@coIC z_;uZxNkgsRu}22mxLwBBZ-@`P8#dfukXxrYegBtIvvT-mT&DkRJo;lq=rBA&`s6BS zbzL?UlzWwF`1wIk1W=_>V-jR3=a{WOL;Wi(Q-?!a!XKJG*9NQtdYvO6_(TFm3)|`4 z1MVQRG`=<1{29S)!U<-M1RGKLRC5%}BwuAArzJrFRA-_|io{8_w?o-}|GBfv#^yFH zxJHF2)G_lN#`EvybgFvHRMkzmnRttFD@=MKMb4fkUsR17U4q_5?k(s3g{2D> z+_9Spy!H<^(p*dL8@-J3{+MMbw*b)K=-{Wr-&Sg|KV?B;^~MYhPZeag42XcyoteKs z^I=0W21q}{&eGD3o=-%?hi(lq5s=^o2U50SJ zMlZ9XGS|PP*AlUWvGCjIm?A}UWbS<)r3(%t^7m{U20NEV zR^g16f*N|Nq6yH$y=uMR4uh5esexRlRs-iD#K>%-id8w+jpqK zHaQ2?8_|$6pcJE|%4jm&c#U^c!G;2w`CTYgL~14#12wT^eIBL|u}XaQ8%$RKA%mO5 zMgb^cJ3b#Va-E~vD%%#|yZXNQZzneM;IN0;1gO7{MW(*2gn(mxSanAjAqs~wc#W6* zzNL+VkB>lJUVfloL`y(pYbxaDWtr|Tnoin#g_?q?FD1RqfQ8Sj_-|`tj?xvL2HRZ` zY8p7TIwR@LT6?bApajsNwviX&uvF2(mb8u9R#6GWA8apwkQnCPdIGC>3=5GCzEAaD z+H12#`-(jhMKV)GBYmX`v4eOePoLn4T~#H8soOQZ!@<bI|3k}_Y8D(h5 z+58PxcP6Gm1Sq|A2o%;L^nmK-{&XqmHD2=s=iBAz=qPz=q^gQ(K`1?MMek{X{q3}9 zRvx7JwC!gd%7HevXhO_hvbg)H4-x-I+!y6Q2xSEc=LtwTM2W)77%Uql{~(xbpjiA= zpw+py7t!`+tU@{jq-pacKMCMgj}0n5&4SfRM>)esM2BW!i!q{P&A4=aoe%`NacVok zRCjMcamx;v*+Lg8BN9i3yBSkY_P%1EB_++P>+b54nVf=ts-Yy{k0FO4r}4b$6QI`t zedRz1!w&+EDEQ9J%^+VsjTk`JQZa+q)+rZ5-H5FCYX~61cn?9YSqoM$EEL`Rye42L zhgLHQq*jRdUU0aH602XMfjdWu@FQKR!QtEdbu2YjyHMW8mTwJEEzTbS?E?L84vWKd zRZeZYlTO8ptsEJ09Qpabs-G@iGl)IAbR?;VOPT{dkec8gO@#15_OK#?o3wWM2~d<3 zsI&T_#C_ZFr-UA+ZEjE~k$QThkWZRa^O$`O23CLIoe$m}Kpt9`QgCzs7xxGG$X?wu zrljsmgo%k+Xn$E~Rc8_4r*1}GU4*NP$1>Ra#g1w<#lyxQ?ywUBD9o!JUp|7NqoDt0 zQP%v7y_e)&?|Lmyt*Vx$Am@(>`<;D^%P9Ss|q`DbRq~ zyg*RFZ08Vx4PEtT|g*!Diia(W`UJpZcBc^SLkDfn3(&j zYD*HSpr4wC&yirslEd_ZlkDp~lTf=8Qn4N)@OA}SqTea&c#13XseGo|E;A0u%CKk#H_qv%(-i+%mP^+gmF zkfXH0I+bGLTLk{uBpAR95nC*nSPbETn#tZ45hx@+eqnL%D^82C&vnbhblgJps^ zqDSKDc~(?jZS5XmMS36xXYWP{Y5pOcy>64z2zgkxUx~HND0gn zz0T9A_w$On&t?UHsv>14p!i%MR>eO?G?|EJhcEP~oikx8FsP_6pp^BRdeNEJ53XXu z#DJ@Fj#%>7r7`=a4)RxJAu4E3`pg0mZzL*zl=@T!k#}JV*hs&$9M33;qPQg%3Y0c6 z`YS#e4Q*-~`P{tA$4)&T{~bWcW^qbT5&xQj0ixi##*C%aQPdzE^l#S{U-^B;K!)T@ZqNwH|Kq`C&lf_=W7Z=5`ttHE z`A}@Hm~^w%05gDm;OU6t`sWYmic@Ql;VKJrB~|B>m{I0;+MaI4%P@h5$u(}uKgWOE z!y+(10^cw#g?)&t&Uq94j%gk8Nyi!jTTSSeL5KN!{2usu>oP5Yp2TsBL|$7)vNSgm zh-40Yz34urU8JQ9kGpK=MzY9Hu=>1OWpJvhIiN~~UYE@gw)FfF!*oEttf7?vFUx>T z65@VD-3#amwS<}*kXZ{_1EB!o`wX2DN2*=qbXQLf-SlgO>isWeFQD@pE&BB7+gaoK zZ{J3gzj*=UzQ{UfyLC+BO>*F{38UT25X>@GN_Fk1{QiA(DY&17De@{B29zhQOj5`W z&FvrX@ZuWQ^HjnV7y#=J#tv#&ACeo7sQCOO;@@A#b;>U#uXzKoz#Du=jod)mxVHQ3 ziv0VL^hpsmf}Ww@=;E7IYETA`-UF<~@!`K?VRIS<^+6!#cszM&LHP4;IxTBsr%k;o z$@gzx*vw4Ii?tplO?E}N?pWWYP*Mm3o^p~vz=UiWYu7Ona-R;Eo|FVYJSu@PdOk4Z$=`M*GOCeX{voG(#IusG&+6r&bC-Tf_Mm6F+ z6W`h$>V|a0Y1A|j1qqrUn)P3sy(Z53W0Ps|T6k?LkEQjy78$@KUj@hz5f=lWScix)C7 z4-X|36$nT+BznYWqR0=boo~UzoYGvec)+M;UC*as(x2!EqX(oaSv%9%Ab}XS&=T4+ z$hUH1N(Ny_$-ob(B}5y$0U}1Y|7cGBjD+FUUj|gO&;MZEWFNu2rWo45hK3Wf^PeHL zQNy+`L*6}hW>uZamo^r<90*%{CgLA4tiHWFSBOX9m=TlT$yuQv6(evy89HMYo9GqH|>6l+6nZKaCK;A^V* zG_ZCQVQ2i6wL}ep%bVuJU2%w~_hM{DF{I8K*EQ+r?i3Huw#F4Mf62g97rTQ>1W;SR z+o9lXD!$UEUv?Q(FN!|D0*NV&PZYIUZ?-_)7ghOp66FhInqY&#u!tL&SaBs2au`At zUPaAhJH)#97r-uw5G&k_47Ch^D%9PY26WxAjE*!(5|}n|xy#5urE6xPiKR{z-VzM^ zzF$?upTyAV8~-j$hfsCu@r4JN;pE5vB!^=pY(7nnx&kn+RRC01At5;v!Q7^YjP~T- znIl5vCj**3%#Z`kBvMAGX1H9DkH0 zS^i2u1AF(NDAVV)U~M**^=$_d#^wV-&vA?3#KKi!qqFhq?>wH46yilUE7Y@+Hi?o# zCbNuI_3i)mq|vE26Od+gni?6(>PYvOZyFww;aeyn%#X+=43%s-@1YnV-zGiuu%_#P zk~8p~{PA9FOgJ6S;IWXiD^l<-_URCpN5SL0>GH=dN~e5s%M-;PHm^RiW&rx(-_l0QO<*{>%&d zjHV@O|BQ_NgIAGAl00-bFAq$+6(UfJ@Bc|=R97|byEd?{jIMxq3mv$sfM<;>`4-4DQlS~M2029c8}|rRhvEq zPp=&6m3NgpA8YdcxDOajfxVFt2vPHRR_29<(s8#L1G`trP}IM`=pdoohZG6JY!?-` zRnlZgj!O7vn6Uf#{pVL^V&D`N(Af(7yxqzTNHZxCBMT>(MFH&eVoAiv5sM@6B~#Mr z))qbBnk_E$6yO}3E#<4E_P39SX+mwqFzJ)5|GG8-Xdw#9tQxL-Wu!ug?dduQeLP>> zqs&U$E6`=l7$#9Jxw2w1Y@#$LY-0IlBEda_l8j&D3KkEVz6Oe^`3c_D8;E^mqP;)4#tU0g77Gmzt5Rp%wAvzN&Dq&aL*a7Hn<2Ha(Dj=thbC?E(CRNmr@D_V^F1}7oP=$DN@QkYE>x&% z>&4nw@fd%bj~npEu=(r*h4Wz`ZR{_kiBQ82ymBKfkemOT%A`d`P8M=| zgie^UWA71a7s-Sj4xo&$IL8l_NR2%@_~dH;RaSkc9<}c=2+;1Mk9`TfO26La_lN$j zu4?n|7FkdI>L5{8-dHWfKbllYNI4QrO7&93sglVwsuD<~w(MF`YHea+VR4XWro;Ge zzwUPNj^peM8J&ivu%d~yG%i==qwsHWPUnDlH9yr zRs=9ztYJ&-&#Ob9&a`W^tCcR31GkOZWe~Ok3Z;s=1(+IxFne}D`WJ`L@zIcj3dgay z=xod)y)f6;{|9hS0l@HScv>9@MNGKAk_AHh^o)T|1T!7pUaM>I9_iVm=p3xz9!*(v z^|3IpD1C`qtg?c`mUzuzJ-m|>&$=DksyJ=(UZGCx_jt2CKVHn9>28m?86Cjq2e_7D zqLAf>{5xVEulpC*M3la}dTiR$2RX$9I_h+H@GwzMfdV+L&$A0V5Y0S9MZ>--RT?&5 zc>x2P_hTb793#%-;iu1tcdm)#sbc;Iv=8{?-yh!qM=?x zzdB<6wO9z+*A8^HlDd)f;;onfUc%zZI4Ju+8_c-PI;MhhENJ!t`;p{iERnK0$IkS@ zMxe;VJP7I=>y-lWsbp*s?buYc!r>0^HD`FOL0wH*78WfpMLHcU~ql zpt(KCdo}xj&?kZ~vJ+uRG;w!uIM_DD>1`ztAp7D2-DnWr1b8&1=9pZ^7cJ`W>|QN6 z``$#(rKIL~N)m_tt)Hr3V2)6$l@jeFWHD#Z>N;=OR6mv{GwFrul7N5e{h8_nTJ8zbR3gOOKPXgELeL>Hc_Qd-eSZ1T*0y`qyoAJP} z85fuR2NLY|jv4(S9Jmwe3+xoMX!9GC2aj?2wSwjfd`rN#Z}kMNGQ~fkvAqj^k=nAq z9G$I?Ebgp1zfg)gysL-AC?3wJJedLdX}5S6(2IVvr!iZI+q%&2bPUAi;1%|-)q+&KISmK*FE2YP3lcRIuL(ZqI>c`vc0|7 zL{wX-<)LM^o_p=Hpl`O9hI)=?ggD*G;?|-eY)tQn$^UN8%%FH9Ajq_S6Iq-U!W8XC zd`Y6RvbAt~fRVM90N9cekRNWtdp49>kG$8kSU(0|){6 zf!~RZd2{9zhd*OLmx`J1>S00MyD8*G?Jc_70G?|uFVz3OlZs0kK>7XJQqeMUYE#Cd zjRf<-oFbQEvV*}Q_C$Je@`d*g;)8!!U9ii-p=HzRc!Fa}a|fS=BN6H;#7u7GQiR)J zWxF0Jo^wd-nwr`5>W3_Pj9SQBiX6bAacS}hn*yPuK@BkoP;$vmjP%16;#5@}oQdvt zTxvhAgMA42OkrJD5S^_l5+LuB^CUM%m=c>kIrokIK^vl?C-khmR@$nkb2^4XSkQ)c z+)0B}dxs~H%Gc5>XK^*(m9updMV(tS z7@p6u4~vt)O&C27pd`y$|$sk!K7G&!*dKyL7h zx*Hpj_m5*KO0IRZ_dYFYDU{jp!E4(htKqd3lx>MQ9HQt3+#+i%`ZKC^gPKGM-5=;` zBsnVSxgi*|(C)Z9@G&mz?DNK&DB5Ro^BWWPlAqfLV|ln?(3F*ztD4wtZ7BFPwBdj; zx0+JE9ogj3CzX9S9!C0-)6Rhu5E*!7gq!qEo`;cIu?)-Jkx6^)ol&SY&1 zx0QW*03BR<&bE^W-(peG-u?x0AR3Guruc$!R&b>qO?e+$H3QD}-NNH@Az8xc2ISE1 z(+b&miS~LTYYj=bu!72lgnV)1!4mSTTbf_GtJJAw4-g0{#mn>^-py1+Gg` z9q9qT5dZRTdiZ#e!M*r|+hNoS*$@+UzD{Zg%ZhSt3Af>P`~sSCPwuL;8nM4G%rbtr zIP^k-g>zHK$Y2EVa!86#HipB{ts&GwKwffab_`NyXP0*^yqQQwrT6QTNOGx}nMq`e zNDFs2A7Nd!^&;!g3`x{nU+7kAwn~o$j=AWJIVKN$k_j$lYG?B&!=bsXMa$~MUPn62 zFE7xNstYGo6}zv@=k*4N0;ktGqU2u%85t8v^5K=WdA;a~3uAAjtph02@f9>J&4x>i zwik(9?D5MU&5AgZ5x__z6ZFw&;QX%Ou2yPkiK5naXm$QviCA0v&r{JHJa<@_7?`-U z&gvNpv4d;;Bv_y!J=@yF9D?fFF^wM7w=+cSvXcIvQ%Ig;-*3x!0?$$ZmeSuT>OxDA z$v@><&0$ii$iSydkZ|U0g64R4!rwNU;gJyckC$y)NAW|8T76_c#&(lAL{;j=)sF^1<~ zm9Y`?f~rj!cx2lWU!{-h^SuFG?y^@d(_s7ztYkWa08z-nw}0y!N#HE7Xz|ErFhJRU z?u3O7 zkx_mTgv!OiL2m2zMh^{I!2${W#&Q1UA*rm4R*xf!4A043Rai!-h#){C9TUhQS}@jb z6yL_dE!}>w6M#mbEEu+EX|K{{!EGM;Ny}ymnn{TBY3D0CR*5xYBE9!H57liyMM+Mx zw5AU~tW5|jQj-y+rxG3f$z!wvO|YN;-l0i68yRm3U4%=v5G6cq6~{EsXj_Wn%}5{L zicCgqnsosSC*m#GNage9(9d5W@2H8B>YDvm*+j`f`K4#&9d#!^!9hw&XeUI@tbhL; z9PEOBbP2pvb9ZBK7*@N&4gf*6o1buy4mNUykRBhmrT_I>tBmSG+av3-B;kT1>` ztSIHq(rb=P35|D-r-e^#tB`-kvWa)7j9!l|a zXuG{@<=s_4!;DyLnYjqNu48ASp9yW80BM|p7@KbG5&`GYPF6IV8-9H(od`G#=cr% zo!&@ypEB!p_T}p-)%Oq;t!P*+vU1TbL*9w%mKoB?K0>qF_A04a;qKCO z)V((xm_a{A8Hm7{w>grBOyw;xgb~@qu+|n71U?x zT6W&z*H<6deAClF?%vwkt8HU2MqUu*ArBhkB>~-%fdOKSS07ihefP3xXca?VE+4-jgF?$aNS!%?b8uF zvYcjg&p9nh_I3+K2Eo%$US7VwL+|S@Pu;gXi=LN~Bb&?$=;+~DR+yhGjFSUa(Hp1d z;#%o9@2U46NrPUyt_Sw+383L%il~`U@FtmJONETN;b{W%dYSIb;i|bS$LX8j4!{Z%)`H*7=+} zM83%~SQ{%C1Q#TRsNykJXZSff*dck5#)yI`bdGw%E-2@Ru`8v8{$wAqqGL| zHU$%tVx2Kem^)rX1lf5a?5%v%NkLO6tN7dqxR^Rb0~_Swnq4+9%Tuf5_HVee~p(f8uiyp2!b-5=k-I*SG;9=y#t!=WrCHdwBu>@R1 z|F034tJ&|7NcW*ULYO@x6B$)%9I7H&&{9PO4gu#d^B+rn5ggPiwH6!_`8Xl>&caltW&SBQjz>N9tYMdm#8SHp=}8Wtj;Af9J2+{d{_;F(#z@eVq(0N zX2Nst)p4;&>Q+V4)8n5a;hp5|J~pgx{4W(tE;b|fQR3Z3Ro{wI6|hwrMk59Opi3*( zXTLKW&^Fl6SZCrm`9Qh6q77W;KJGf-VR!rcClcU|fnyOsx89|hn%cp+OU>|d=4Kt) zqPvX;k)Qpc!oYbpvhh}8CPkDnQz$ln1oNYUPideef)rA$O%-Y_T%;5o(35g5(cLfT z#guYI%ksZuHMvn!b`~zk1kLcQoq8|pYQeIip{e%rhai}lpo(@@c4RJfzEoAwuyrUn zn-l^BCPKmmU8C<+E$$Zd1_@8A0y6$~ysp|c;xvvqWQL{|yb}yL$|jC_W1~KhDT9Ac z5S2WbeH>6Yc!j`+ct%o_QR?(@G16|T7*Y>D#a=P=cp3Q?(9%8bJ{nA^H)uD!ZLt`r zb!|X#bxC$8NYKw`d>nytE1S58h=&%I`r z+!`3=!=C2Z+WDDw3!TL(elXpcfpo$7JS)@>F9rKgvMp)UHwfUWv|l|vvxqEpco~C^LTd`EX+DrgM2Oz__ZCEcx)Q0g3m4-sL^G2k6w zNz=nPl+|SXip_hQRHa~ndFA7t{A4-bnWSk)dx!@7F&$*hivl)euH_t zLfJWy0B8Cn;b-Itxcm^;b5HC~#v#!(OuCu*BJo9+hc}oYMkE5gU^ccu6`A7j;d=U! zm4q@W2@wPY_`09L%RO)jH?v(T-ag{F8IgY%IbsRjLG;;TxWkwPP-#26fvIq$j(_FU z)G#bmR&i+^_&ph$o6xb);kmesTrO!3pb>g7of1H*_2Txn49f@zDxKcsdk;Sn{@w?S z<|LI?>-4vHPRM~KI>XuJ%q`btbyzSelFa3Gj2pdZ5J~kxzYhcw?zfO+gk6!tO!wxk zEQ;cZ<;AseS#TQAJtz60xuopvpLL~XS)z(oERHFuXmLfid$(TZ*Axdfpe3-mD$Mv6 zl@h;A(ifmST3Et4}6g*u#^ zVVww^SLf{N9u(h2mqb~l^KB2R(wvCLNW+d|Cz&bhCu|bU{1Q^BrR9J1hs|3Uon3?w zs@YQCaPs)jLr;CmEG#+Yw_N2VBTiFN((d&E2u?uYbKo6;pOHVw0vxL7!y(JI0hX-n z!xKMWbt=E(L?+DA&4r%HSvqOFa}F02Zhi3gdTW$qoYM2Q1}~E*&bguUhabCM7tlGm zIp`RevE3;eT*r9MQ6t!nlPCmu+MP=EG@gVA*FKfYCSv6W3c-`Z)FrP^F3>`|Cm6$g zIU$ojVOAEvCu$>q%ChefXqlQ~31M0g`n*Df{ry%dK1$=ILt#7&3+&CHim6HbpC{(& zq@8IcqGLc}%DE;Kqh4W5h?JDNIf+*=smNJrhz6Cos6uY{9p285H~mjf?GQ1x|J|F} zo=t_gxS*}At=&`82#U9iVTebOeV`3uH1wzZ%cl1C6VJ(lma)ncZvIWl>@*T}od0Or zcmG|4GmoxoViP6vP=;+vIi}quhFQArf{@U&HK5c|;)odWe_Vh)uT7lu=O+VH5$K@3 zEsZYCRvVg0;O6n36*um;&p=J)mG*$$^h-z;pAa+$iIB76MpHOVu?Ht-j?J^>i2QIs=Jvm!D96NHauQt*B6LI`IWfwQ8dc zOf;E(NDhjA;@@RbplL!}RLZfs(59m;tZu>#(NJ5Mr$2?w*e&BWE%y_usV!b2vOklJ zZ4p$DDv6X)YA)aO#iN4@eQBqlS%!mg5v`br6w?;PjQP6|ZlHCaUo|^y!5u|pb+;3x zz(#{!CjD&9s9nGT`$B9BIX`O5U#D>-a-8@*8@#=beUiei0HtCpQj%X%2$UM|ws0g0 zg1D(1WAY}~wT+up2q#G4_;6)Q0K~pqs3Ico109Ty&J(gDJ6LO3S*gY_xAK(3ebhd1 zp2A~E$m}!4RG_3RE$2WS91^_i@D=U#fNuBp-85A21Jmr0Smfw$d53VH&x%wC8vQdE z(?x{DA~Mo2F00f&LvWrY+kfe6nt%UwI?r2ZoO_MW(9__UVMx^qk!ri8z+(PpT*X@i z`puoa^V^B}dOrV1sbJ#X-Z)_N;^>JATUC{TT<~g{MPL%w&R~r>-yGXI!KK&o8?S(x zAC@6+JF?|l(8q%LRuk*U2!{9jRYf$Sgt{H}3!+-aCwxt7Igi)ha- zx+p+j)jp{PjIs>~vsoxXb$_=pVAa#A=$^3$SvY`NT&SAGRcgk4cs!?f?a}%jXKgj< zU|~HJ(h-G!l1U{$J7%k&oIckuLCT}8z88G>>ouX#o5*#|N%VHogI>Q)iW24h9ls?; zt024y8NNo5*c4$JWr*C&@-Od(DXj}(w8=t&T2LQrgwH7>cD+vgzt-%6&703^KQ1K} zn^`Fzij@o9oyFSH(PF|{tEXJ@L^9t|!aLVgnV>D%>n=gxd3-DPFe2q;c0DLJN8ytd z^N>`Ab_j!Z%OA`1Khx#cU1 zg`*!7j6F}0#fV-Ct8Q48bh`NKiR&`Dw@Lr()EIF8n_%ZLqcgvC9kn>CQE9gWxvn{i z9v#so{<{~Z?s=hIjL#QK8^n1YpqM{CZk|On6*leLGP|kfS8)@X)+j#J)v5;}M=vfz zC8~M5VPWd#_wP&*3177!d<)KQrV18h=;}wxOnj%8MGm87#^kr;%5pPX$jlGgF0w#Q zD|5~Ik_g>WS&q_MV=F@B|I)QA$Bu#*t^WC~kDK@V1B48{YA!acraL)ia8JkKK*&8L z_V*i4x3K(jyg^WKL2O(Ik3jawcE){)HGx0bnrR3{>-M6nfH*|~&4t>qh=x0t27B{) zv)^wIIg50um^=<{IQORgeGDAj??DCR+g<|1Umzotg~NXOUc2cJkB7`rm_7!SIR1pe z!Dz_NmpFZ?tFWJuiA8f?JZ^%k?$^%0)abXVTgF~t*S9!ksEyV&4T7_l-4CH7D7QyYFpe)Ue6l)8h{aDT4`iGL;Y!PqqJz6t zNl2g#&G56-s21`FhPdCbN60uTAJa!ZN;*Fjk}pEsk+I8M8N{u%h|?jssHF>dSfJ0? zz8t=EQmu?&s2(d(oII&Q=L>>wnvc;hcc(W{E!kacCT6VJrPV3>TZ;Qzv-(^mGU7ZKGE|6dhzn2BPE(r#G}L8 z<`bhCrb!0J2)qCa0i=c=cMr{yADPvxlc7-gjMC|Y0yU;pf|RJd3qng3F*a?v>sm-f zfytAP*TB#UN?u*vjk^aJ4-KZFN1@{SJ!-V`?N4Vy{CSxZ0?^ z)g!442?HklB0p-=Cr3NIxT6C90VZr*Szg>g0-EXN_4##ZX%4Thj>TEn8m|0cZ0~-< z+WF-P>$Cq8Mvm|k`fS9PARsx*+51t5H2QHn;?HZu^YuM{-{UyO=X^n!uw0=no0->_ z!JQqly#WfDs3_4W4y2bNvleW;;{0Ku^HTc*4%&|FenBc#*5g;UD-iO2m;~;;m2XK~ z8bZ!dj-ZYDqRxczDPH8~Fd{L)rDVKvNf793#7-)c1?dm^KP!<+uQLqoethh6%e|!w zyG?o#Gk%S9cb2G1N4panRKduH?@k(10Rq?A3Lvk(#6zbj-Xg3nsqzaMFrmKAY~uqCONBql{O5>|38>RcD_Fd?CMdvE1M7kx-b z&EK914qHqfmuVQueNC;8t8*)aXvWv}K|4d={XL>;y3|UkkRgaSoBw5wsKC=nQsc`p z&{lIB=>sb0iSW0>AbmK)9=_?LiMU}SiMYCNg z6FVoDZ5SA>!aU*_iBcy&v8d7mpoy#;}u$dFLw3IZ;@u~AH%gO)-r>r{lxU@CO zZ|g;(_;R|i8c8C$bt{B9tjyx_0gz`+ZYsH@Vqt0%_Nuv+5|wI%Egj_peM>KzjD=c@ zKAK|HYNGkcF{{C1_i0t^Qq0xQPacaM7J=y#o&3FZr}it0PoBT}u!j25IpC@9UXcd- z-O-=ru8S-DtyK{KW7I-zt3nR>Jgf~*vc<&x53VX9;S z=oUQe!txemP^zXM%OZ3}KwYB`13bNPwqV`kBLx=7w6}Mhl^(sF54h_0LtQw!i$HK% zXzMfiG6xN6%&U+}5XTaT<}{(Oc!pXLCDRTD9d<7^o@A6AX9NVugUa#Kdf*NYa~dZyheLt;{gEMK!e9pA$88ajI(jaXegl@Ft;e+UyCZ7fTZ`!rm z+FP(8N%Pifw$FV)&)NiO@82R#e?104WRa3<#LLU|zZE&gHs}%?kbU`5v9wr=D^QQ) zq<7Hg*o(S^y;n`hz4~nUA2{gFMOjod?T2hSsNm9EU5#{ASNAXHH`k?iyOj0jF49)_ z?9LRFU${$~gd+)yhStE)2u`h|qm{j6h6R9{Qzg^o^%jC9lV2FC>*Z@}@b^il)A>Zm z6{l-yW2A=$64z!-0?hf^w{@EBsbdVeJA_xR>{^lkwZ@S=7|BNZV1+vcrxh~7& zV13Wu#PG2>K%ClqKv>YH zcJoN^*EGoU{XmI}tC6I*k=;$Mor9E%xC90@gA)inMO5Gh`HX*pii+~$Vlovse6=Q* z(Wbij$#NJ=l$4Ub7rF}QptKVObRr~61!P(nc5;!$a5C(z+3GS}@b-2^MGcoe)nMq% za%TV3P>8RxTMUC}m7X6;j48o!S`&)Bn`;LZWN9?g1vXFiob22hgfc6OF^;{~ZW{9( znLoMxzUSd?b21!-c&6?A4VMJu!){dt8%ZXj|&(SZCUzPdTj5G6=(@o;@E$o&>}nZ z8fLW+T*D0t%S`=4Ai#E|n^t03em#B9%32!_sZLd{#^#aH85r_ptM!kad)P2DhKm*U z-`q58yr9!MbWY5z{2PP`L!@~7LI4`X>L{&)0 zBFnu8h@h$Qe)0tTn$<`L6eP&|3{m6$r5ThNW@amU@r;HIH8WZ30=-O{rrJ7?lM$*X zs%=Yb?qEl2PL-#q8K#(+IE)H>mqUJYPcg^|5$0QS!EyaOL56<5+wh5-9gL?QgaAVV zFy@`H+)`9j96bKt7fO-fWakuK-HdgP3=e1Tl&kNPOB!qAw3omCKG)+WPs0UFbOZ&3 z*lEtp!wexkM~6o!_&zCE=o?0Oc93SmW$hMG@hO;&v&cD0i1O~{FiSGIoBX`#^Jv`<0j7#RKlrJ zJ&BuGZ;uS+pQ@P-ZN#VN->VQeoq&FyQi*cWG4GurpFn%tUNX-%Oh=nli)1?3i!8A6 z`}d98V}|;eSz)}YI4vN%cR2SHE0@-^BSbVehpFTr+euWgQ74Fth+!fmB>Ha;Q1)^1 z(ZDon>u4Z{OEV7)ho;`@ne9U~v^2iJgbVT^;*i9TaS zZciSoM>!qi0d(Vk1@{{5BE>6NwFv(`Ixm1g?p|EPw(VoqrQ_J2Pd2)h(cjN9>${xY zz{M7G@^xT(wweFB``vzk*SE_pm_0jGI=(u^tlPf$xT!{m$NTMDA_MtFw7-(iwog|F zk$_p0YcP{R2q!#!IxY3?HQEQvX6!UUh~Is0Ww_L`731y0S3gjG?=9{8LKIlnZ+6fA z&<*i|tB((&!KLQn3giRqN)+>jHlg#hch?6y=Z+1zo8H$sHZ)L2KoGi z*W=`MGFj8@$DHQLQajjDyH;3PfKGaKb#i{rsgE@nYWO`YJdA=jZ&;rw^bhBZX%DvN zWT5q@Bz7fQSVBUVkL$pAUQ`mO%}tt`EKg!@b3JsDkmaC$0!~=`7?kYq@}<*@I}EkS zw=RT`6y_!W2y;WW?QOT3!Uu>j{6XmpkqS(v+U6;hXJ=>8qyL~(mB`Ik(|2j>g+OKO zP6XRy0~KXf7U7}$uV0=Zmt`l2Q%SQ2=t|~LH8iOpQtTihQn%A%6YHQ0A7A`;Y)JRY=(g9EXh`%b3@GZG$4X5E za>6)49n2=FxnturEA_*JSujA3B+f7Y-~-&Q{WBbF4mrT2tyu#;{5t4QNg%=EKXRzf z>YQtfZHLEy8ZF7`c4>|?Boxk?H55eVZ>=})Imx-X?(APKh?RJoJzPb;D_M<=P=uZh z!vLECQNilj?av>Ki%X&65KDXUQTgX@>ellzDt0Z4;RfZ>=1zI+t!kboQTR_&`5&?I z#(|)dt37w^%zs>N&Ilh_S$x$dW%h-CRAF%~9a@j@@DWsdr9hr-I5@==bm{rtp^cnL z_!{v)w}R^yIkHZ_tpQ)$~ORr|C;wEf{PE%4G5tFAYv|n@%>|VpO}?91 z`0H$MQ7@RizNZ2Hc;&a0LyAD+{Hyy0-w7kbZv_|@a4w|4n7hxrgSiq*=hX7xF&8=j zbm^ed!@s&>4F`pZ@>6nP5~!;3=>MTvQ%s`j@Y&#K&;2}Ls|8(mDJco0r(XcPk?ge^ z)75y0>$h~H(faEiJhZn{$cxR+)ZDQJ!U+l*v)w%7x9FWe$6wwt`Z~{9hYsd=m3=v07v7 zQP5T)%s*pfFufGBrDF{dy`2z6mL9BV^XMq#j^5q!BqsV^0>7+CnT2~Raf_>&Xa0Po z5*qwq>W>o-e1i}0Ud#8oKCf6Xq&RP#_kHH?jCYRnTUsmh&wzy-()V8KKb@q?PV;wo zaTpu-4Rq%s-QId_4qGsug?knU_yN8yUC|_(cV)%wOwnUZ4%ewDcGG3>G#IpFavl4! z6Fq6}S62NLh|vpGQL2EtwovqD_apS`)%zFM4&5LO6;f?2Cg)^<1IXd=1Zy<3an%dHjAjFQ5M$%pxV7FalN<%jA$yxEERY74wJM`@ZZcp{Qxy zPlgk3uK;hvW>Aq$uCmGB2OSU?qa*uueAgr6_5DaKo-R4qJoRD-4NLElLL?L>rjECD{ERcH~*Ph z5KO%5L-%=g$*f#IUMuv?lJfP5n@i+ll#`=K6#fmw&|XTfiF+_@4E= z{VWjpty#I}d{1s_>R^UZSjgIe_T{HskT+Dg-DH6n;JfQDNADz^(FTRM!6WB_@{K0F z|M`Zx<@>UI8TFT!h1r~%jKrRl_2+N6Zk>HwPfyQf^HZZK3AQ@!sHKHyO(X)Np22zM z9iRZlmhap)PJMmk$7E{9X=XndZ+Ft(VQk^oqa}=sn+f3dZQJ*@9h%t0FvW?1iWF`4 zYv-lGc3MNNqO6(eRcQB%5r{d)acG}?XHb29(VDD4B1(yzsj0{wjO|Kh1 z3V0&TyuE3)n!yr%O&bDtmPi9DNBWoYy>+zQ*Dm18(C_&q*N>pnpB}Q*q5sQ+-unpE z@BSTs{o^Rr%Vk(%lBsn8E86AU#uW4|ukP&T27BEb_dhFyAKU`$C5s0S7xyHaVIb!! zzPldRsC783pnA*0~JPPcClg;5xIRR{6Zic zr9e1PC=8s{1`CZ)Qv=g*q2Kkt6PGrdPr{O@|2jtwd=-Hi6Gl*q25W4M`8A%ECOqdY z2*}{DeRCa-fSzIwmiIvVm!|y*!t*}c?dO-U?CwUo^A{TMc>{nNP5ve4#_jh`BRRhfNunMrE4zPs?eJT(y_aLuho)4;P&v9g@J+T98nXGp z=kO&k2-zS2GUw6l^JK?&J}Y-x>|dfoXSg)ztlvMLM0B3Nfwx0)a{*ZJqu&%utV&e zr1!k*Fpzrj#G5~$U~Cvo5EY*&X+quV*D9})J`KX#odr^aKs`i6N^5PZpOG~Yu)o@B z8{8Mb-)RhvJjBl9C3Zt55_Btvix)xsbtd^+X3mH>>ANjp6t1S&CY{ENJ=rsZkPJdXQ>pX9u49eU|U_%Q0YjjY9%YU2KPwt9foiTW<smzIMBPH`*yU7}bsjSFhdem%aMHZ#K?agBfd8jOhLcY|kPR$_TFe zkwuj*4M%Yb;!J|sexXn1XZybva)*|}tE&fz{U5zz2w7$bD1*W@+I8azvJfJ+_Ooi2B1eFi?%d42$9;zAkHC<@>eH*nRyJ)6KSeyByiAQ4T>R#ca4 zV^(d&_9F_^*btP<*VmWlp|tGxx`nhlUKj&iCjCClS2t5nkfrC<5F4K-t3`?f$TogV zkLoiBPtCG=P@d|LG;L$$WJM08((9Ku;S zDtMZM@6GlL^ABNe>3UTRAlZ7A(=9W7f3(;4u3boIqC>i}tH0-gan{AiB#2-uLt|EN zz1^NKFydR{w8h*Wi$@n2!$B%CF~#BeIK{?+8f(Vp`}7jkDJbADNBz_GNzkoApd+Kk z3H*8poq$0a^B|RJw~w4|G|j^lrYHf{-z`cK?Xw5OJWjuQ|E+ERF|ZTNbuX5N1}c-S zheeA~2pj4KfKfQ) z|HxLJD%0$xYDj-gWb9Pg(tZ>p_!aiPVeR;yoA*5bVS9a?;kwHNu7@&Rm(a_$E7y+C zH4nzv233W2?y zd1HE^SwfVs4l$sf&DgRu5JY8Z$!jMTPutjV^tAL1s7)2Sn5LFXKgycH0aR-GDg8}w zj+p0l8?YKqK<|=mtC}+91f-|7u43ms(?ncYGx**wYd<1c<>f*Dm%K{o)ul<$PJ;;~IOjVwbJ0?x zOm$7fmB%MUh4;CO%d7k5#IDs?Uyov*x;aQ`&2<fjw)TifvFuB)?^{Uvvaeq zz#q8vmqG)tGjk&NzC=0ul+mdxE5EAc5G|>w+}zz^FEO6ezvMfcWs5R1XWGEiVcMa_ zq&G)Wf4h~`GkxTVVJQI-k9p|&o{-%wS7fNkaRQtXD_OcsbQBtyFlz@fa@#uc4`}89 z<+guJH(l_+SOeIfoy6Go-w`YG1ZgNAr#%!@B(noGTam3+rx}d_N8DQrFFvkgZV-{>1+T0i3m0!P;aQHuz$cm-p@G&&n={zS6+k_DCYL z;34ei%fSdty1O-KVzXk#StTIU^_w8t#{Xsvzwz=Wu_>pW!ILb>wwOsG6zrK ztk>U9Nu=tD6X)%KwI)LYtNcCD(J$0Fiu0mn5D*#oE{O#}E?45_m-%bFgFR^RHTtYH z3Zr$C^fY6Y3bm{ydABqCpV8WWIq^5jpn`&mkF6+~NIs@kpBGD}vN8kR$|zdKss*ig zv*NlezQ4w^gM%?*$c^7iH;jkN$r_oS{#_{XXAo@2cA`*1e6@zF#!5D_&`}_GGIAQC zgh&iI!pGyGVgtCtv^i6I`=>yYkA$YpCN0NsL$Bv1yd4y*w(p-rPUEl); zxNWT;+?^#7Fh9O*-*!JGB#0v&N-23H5AZ)F^mLNIO1D(@@23}(B1GtWt95j4yXd>( z>kvzClH!Yr-8e0MNc#Ppb3A>wRQMg{u0C-}ekVL+juu_U$fAcQJotN-adxZg0SH&Q z%KdxtdcPaT)tx-uYO&!sWVW_cp0;agY3!FCY4!RNbp@*A$b7i3?n+>Z(3dwGy>f<2KgM9H_D_RR;B-UV(~dbdseA0V>iE?9MdS z6>@j{*E2G|$4y%p54VFEUY_(ccVUq11L6UDFd?5W4u{E=UmExy0|iX=K{q^n2@a4v zy!XQc$7jwMV`Gir5~uNQuBR~g?UKvq**xWV>|K4*q86cF6@>>Ae;r+Q=qv4)+?ic% ze?OJPg(`)Ih$Ecqn4#jy?wZE(wl6Hez#_Ijrl7Y8%Z<%m<`F>n_?U=Dl7?jz-eg$4 z$lyqMNhr|rWG?r`$iPYM>#TAH_a#rm2>M*PD`Zm~q&uZv;}VkX{LQ^fb&Az-r1OLea#aX7YPv~N?QM6J%kdm$U_5}F#+N4!3j|ClCf@ABRX-p z!R=goESO&H1OfdiutHH(<4i zrJWuD5Hz-16iS|km9k6v{6lHeuTw7y#4}BQ^fF53&s9%%rgNGjcNFrED*LU*S5;er z1-ms)Se8lwqF;8o;F_m$jE_`RylKx>7f3#Tr9cdc>l`lgP%_EbAj%f1Qc?UE8&35% zc+b6rS8WG=h%&=ZyQ;*rA&qb3NfXE{>?^8q6kBoUxajN<&8cM6fiS zZ^IM`Av*RniG4GC&f*NsaaFDUd%j9LFE7i+x|tjmMUh$f+A~rB@fSfRp(NOQgoGR? z$Ah9mw7vb|;lxYoQvcaazW&&pYMA{{(H3ncx!lAqr~r;sTy^EfD>H8DoTAN+oBboM z=tyj~3@;bqZjqAgP2=Rv67yLBl1;0VCO14Nj`11+S0!Y!$bK9Y{?+9WzVA>`o5vXK zm{iQYryJ|esMdhk0(3dj+Z1d4tg^mtOo#Oz;zJ_n48~vLBTH7K^B|gGF6=7%q z-t3?P=hKseeX5&_8NIzN7aBV7$RtdzZ|n?qOnTXmyx_@AX370(o~E1@EssUgFtZpM zUIIryJOmR6(^tK;b8v_N=AgF!xlATDv0Rz~5k;oEIp-{1M4$9-qSv^!xWWM>| zLRmeg)};bdrzK%cao1q@%==rbb$KKA1617%$A11owmwkBn^XLDlC2hdRH*YwDsv8Z25*Wp{~=9GFV&a5!79vz36#I`rq0oP zBsIcL=rVE+gcl#BbpEAFg9fDD&_j)vr1W|UIVfvi|i?(Y4gqc9*vD)$c_is`mbN|P*O5EkRza9r;Y8}vV+`;jfo|tdjd#3JFjwU9a z8Uzsi8B0X6ILxqgaXK`>{5I8vx(=*B*>Dfl;4qH+GRMc;yF442Do;Zq6W+WxA{*2E z{ZQi5+2YpW>t(W)1ZT@&tFS&)of(e^hgDiNPy;E70KBY!R;pyrxEc@Dad^B#L%D>d zgQ>J-agdA+En-bjZNnH6gJP^IARuUD{(7nGKg|CccNz{x+j1d^<+|8iFNi*DHb=w> zvh_2=Io;ii?y&E6dI-+bjt*!WZ(P%!LJ;BI)=_f;04OLdivn z1oKyc1uOsK4nuDbu}Hp5*#t$8%x>b>>MM*2L(Ii>bbR`-g*98-U~7M$XJc<4{woxm zcY3)^n~82LgcQ;ZNE&wWkT5hX1R@J-n0&Su|B9U4!~)%0mB~gHFNA>!^*WgvbzN{x zDyko=yu?w#$#@)_hJFZ`^>)Kd$mM%u;1M;!0<@p+Pa9WgfbT`wO}CAvSLV@zD_y#;hhNJGBAz zIPXAYtqJ9dL!t*|gEQTWG z$|5J{!TI?l;74%{$wyQh`?oj1kS~r~ecUJzi=Z&j3u1R&HBJ{PpqRsnev{l*coqxiYFKH@;1RNJ z)NDfMh+ChBg`}N##EMTs_1TEo4>6*I%b3~+9!fOBxaF*6qg6*<$Igwt1RTsem4ZMI zH0@#k=b(VQ?M25IvN&-VZB0Yxn0(cw2XIsSI~2^cF=3c~qg9z#T5m-QN43J`+Fsf@ zI!5;P3h2bjFe@`PEG=e{j2-V&nnS0wq0DTLQA#%}nEjpwH!&)aj~9GV@7QaF4c)nz zzx;-{_GO$*;wU;u0DbAx2}*!hSsf_-scY0ji4a5htdk=eLbg#%0lvYz~3DNktD-o^_e zL_~zXH!W-ls}FCGiJp+$hO8-WDK3!l*v2>3wkZmLd7PmyNJ= zih@!g#yuNzzkxXJK$mcWH`*rOe8m;h{d~qm1y6YgVdmhB+CLJ-LC}vMoS4ChTOTlO zk~CG<24`hS$xj6r@It&*+(#iyyPw0O`0F7KE^tp>cMB(&b|s*I5qG3nq@7LhpF zJ&Sy#+EEH8CnsTD+g#vz#TuPuZOviRglg4^Tb03OFu98HHIjEV>L`aIYi-4;tPPD6 z2_7mT4bFW?!GZZj{Y8l&VLujLbR6_ftw8CqFVtT4Kv_5z=rBESw~hrej3c!k`ePM* zJ?{IqRd`C3dXatq#1igy_)GIA0#3;-b_v14{Xeu8!kw_T7p{`yr*USz4C@ZP3lb=~ zpE|!*h8A{+dQ1F^M+c?iHbxDn78mzwlwdgQjWvvm_xGbHSV|%!fEB}^O){V5^4Q|N zVEp_^^f2ni8q0mm$y1;}wg&;(NJquqqv<<8V#nj>ysAm}s2`wp6Y9}3>KSUp& zza5tU{QP@*ax|?j__Ru^A8fd$GOVbv2*tz0!^#$2TLV4>2M10!crZ`#wKbI`{`Dk5 zj>dMc2#)KLaU>bN5d5xsp12cI6!n4`=LLg#A-*KSc*{@N{dgp3KRo(7VEJYfe&%4j zNWT?n^SHWLyAf)51+RJ^S z;|IScWTlPw7Rq5Pr*7$FN>-W~r{RACvS&qUX@Cg;bWoaL-PKg{GDl$vH4MM6FUTJa z^FW`XN3k=UWaGSp((i(X!a*P{R<}@jKSE%X+vObsrJvx-S<%$5;qX2h^c}fTGBq_T zCu?9iYZ=VBrWLU@@y3WXND6dj>go6Ug-J_3H<|x>3@#P!?_Z{-s3#YZunT?j2O#Db zp#-`%&}*v7z;4*kYMPq4GwQ}e^!E39J@bFzp{c0UEGs*ns!5>f6N%gSf$i|*&Yvb^ zrNXMa`Nkw9XHKe_jWtvgR<;o(fkSDUx&3vGDvs}lHK1pDqkRZ7+m)h?BG3F;SARs&3Z;OCVh7dhYe~7@rA;LRI3Hcl${{d$TDQtdWT4InWtf)9LHl97BYCKdkdc;%7 z$P@|GY4M?>gMpD&= z^tH0$)aHqz4}--D^r(&3lM3an#^gVmoX2I~Ivz&#`~XHQ3Vhulhch_2U2-NtvmESU z(L3;2+`F;+w1~VI*YkDTVO5eD(xn4U9C-{%Z+p87K1Ut^6TR z=lu+5!LzdR-d#)vK#ZG z1uP1Iynjf}CRdle>&rj*?8RJ0-UChI`oZs8{2B~cF%3f}vGMWogTvFYuna1p*w&31 zKzpqKHrDiwqt^@@&Ubn~9Q^!t zoLu1yMkYpWH(vL$(ZMu_pgMx@2$+HIbXA#k8BO2_BBAUp)tt;UO3in$am%Zd(BnNA z%W&|bi9g%Bkb)!&q zK+D&sa2BnyF{tGfBAP{hgz1FO@LgX1`**N;9TO)9%g3P;TTjP=^(;`tBjHO>D>FKG zrLmAR-xdY>y;~VOo{k1yTS#cC{Bx%2NkSxOBKV&;ozmNYVe#J&1c|5k`(PHspFUPr zQNF}7x&EJL!+oe=Lv#NOiVaVF{aV92+^Zn`Kha=Hm*?pd8a)u zcKD31iSUfsfYOla@ zgrb8%Nu^#p%qn94IO&k7NNi{CpB2^6l+clXc7*DG8D3p+TUw6CG-AY~R5oTnH;2o> z&1aRcuNRTLLPc@144rU!lv|qN_`13BWMI~?v0&A?{?#`CmE_~Yz{Jj-5j6&Gib>au z78VR7q_gT(m>-&S16kpD`7*wEw7Ckhid?y&Ls(!e^ZMcY>r^ax4e-O!il*Ea@DlKf zIlY#gx$JTgO%b4<_vwCHPcDMj-nAe=G$V9;PCdsQp(UReerC%3_uprBOK5iDZ=6%I z5|-5kYwkj6+97^U?_f1`^}+8v!fJwPbI1&XWfS^=O)b&*%%M@pFModvSEa0mH!EWx z{&n}9JOTsBW8|EtJuzEbF$5`1L&JXq;Q*IgPdT@p)xrI$+}r*mRp~W9V>~yU)k|Sz z*@f@Yh{-WbQY>pm!1y5_C&}IfL3LO^3-6jUj!`aNCO4L@ap6w7C6AaR;iN#>?Kv^K zu&N&UkT5^1V?MI-&bfK5oRSg?f`%kFPbD=qcba1tC`S@9*a~K(>tx;V4)uG9&B*d4 ze7#8O6phnR-h=sfZbW7~7Z5W98Vg9R=A?)oWl|Fops!VIY<%fEzlDxe*Whgnb(xo! zC2XXG0u)W*CW|=j!K~q9!5R}NBC(WHLh<|jWTxygU{Ep{SQM7PKZ6v5$;!DjD=jS_ z5-k=EY?W}MZ2(R{YKW5+k9u;mzTm;QHdiv^L|<84l$@SW(8Yv*lnK z%GslykN9k@)j6$QvGM7|L==feEr=}^p2MOmHwP)2!}T=|0Reli>kt+J3p2-XM+}*s zNYQO9m;S%-aNGNm=(vQ4{%&X{=Hwl7@1)!t5CQG_Q#8zOR}Upkn0;(xcyum4KED0E zv#^j-GY=Utotoo2%N@SGlcb^NqEbU#qN+$9`|Gw9N;(iZpfXZ-MpeOcjC5; z?D_O-_69ysgvDEdi-V&v$yQs3_re;+W#FEhy%5;k$i!s->@p6>{QCdH>`Z|NNSJGX#A6iQ zgW4QR&~9qerf+u2fw;T11H_)l$`=q2Qi~r0DB3cEvgT z?R>nvdwXXv>UMemEp_Y(nFAI%h4ZA1tZeMY78++eurdwO;$8#~A3rou7-Y!LpT{-m zuXD5mBo_35cQTC$FqcrFbpDGGogzxRr+kHWz<(KikIvrb+>QlVasDcMd5w_)pXsc z$`ErJ4+`T1Xl&?i&lCnV-60b8R1N*1AKITs2PQ_z(hAt{&ui+ zGB)nItX4V**Q|b7N{>rRN5Zlu4P*=xeO19TR{d{&E$Z|hle|%9D@(pt;Zb+>l0RRU{O%X0$-$6VWPDr zkaP-xT6M0h-1EbR189t0>Hb)7K=bnLUmk>v%quyVQ@7O7C#tWqA6=S{%}hv*$^R_h zL}4L;{)68o*|6P*=ZmQWbZZX#vpJER6di|S$ZWhUWH`JrCNr;UK?qj~m?Y)@G6Qy2 z`C_PM)s0tJI9Bs(2FjPx`B(F)Py6i!bfe)#4_}#EKbZ?5dcG*TQzE@;wCusCm&@EBgj1~eVT^& z`6@MT&u4l#IQW^9L}ueQdMT-71hkcsiHJ&7vIzTK@EmBh5-x*!Q9UPSjJi4zaowz$ zTNwI-inM1jbO)SH<=`*6QJ4Be@#{RSk60(KA;y?A7P7lk!Had>8 z3H)p;(Ef)}68;%PMm9T4$h@E57K%77tiDUsU3?V)Vt>#=f@z^Qm&(SI73O|AO-Csn++)Ll&OOTry`tHn_KxCOPoDLWSIN?G&WKG|F{4Yk2>^;`m0IC6p|vt zetzEI%WG?voQ`3z&FZOZ1M_<%na%I2)3Y{+l2PGB)yH?!iyhKJq5Qpj=U4Fo!MSZ& zEF_>}-b)~kS%D3T;oXLllGAU>hrTMUiWFY3o5$@E#69{@$U-Q{tU1 zI2ro-v06M}Jp=URPg^W2$;qai?FbtytCn@2AlIB0A04St8`l{hF-NHj%`a1}pWStJ z3OUsxk3eaPW*}Mgo1ee8r(UL~EdP#R`{ePE&1YdaNN`jhDezON(-ZiVgwo|b>(bjoOIFFnI zR$XBk@}h5J6tA!;&>L#9Q@|<8%JNtZQgWt_f_ju&*qx$SJQEnooa0wl$aqOm80+c? zFe%VWgP4u6O{s8sSb&!P*2zP{(;L#(WnKqu6TFQgL)-^_CS2U9tzFX31dNi3^3O>$ zv+)q)GhcI4lTqL`LCeO5ijvH0ep_&E#2%UdX;+UQl3aON#lx5sjP74<7NrgTsQ&=} zuV}cshYCbK@oU4!s$==r=|1-!>A($Pgru^x!g0Xgys?G1)g5I&Q%OpsF6%dre{jO9 zLac+hFk%R9_))>I!#tYAbmM`*C!JTA>wWaUd+}rttBcxCpcM7{+d`QX4FMlj2b!&E z!PnQv01kNeg1Yu+ApX#2hnc!MqK9arNxgubz8Mj+mmZJ#Wn)?y#_lBU7PrxHj%RfB>oGhhxSQo~K!=^5udW(Kl-C&OlEGghI3RwNa zWs!Jw^rp;JeKyBu{sHAvZjJ!dQlWtB53ELc=~oQ{LOU@1{=Y!Py8;68IluE*m}}F5 zqC)UJXyeNu%zk+1Yq{6tH52u7gtQZe<{Fz{)n$MM@=!i9fD@ zoLmjYhwY(H?>}A&WIQ=0=HN-gOYfC48*A>&&X3L@4jSy7RWHKyRznhn;mup2USB{{ zVPh{OI2Ektp@EYNc07B9JF9-*D4Ol{7tWg8^|wqJDD-DWgKla8KEw6=0t?}g1C>G~ z1!+ftxkT5a0@Bw^Q3NHLK~GQ1;;zx2G~w^gUG><&&6J3+CZg|r8SDwPX`k1d$SqsO zMQE#Y+~7bD=QqHv}439PWLSHb@XVystbu6WGODn!%_Ux4 zNJb3PVR3`vDP2dW!569xt*G0Vd3&8)pe+#+s$@k4y&6J$$9{ z&N(b1QuY}{m6}4Jtyk3alrbh>@7(0lj)q!nAek%$%=cf~zI3Uxsxl+PiDgVSH|upN zi?K@+ldj}=em9vz!Lv_8T50+I@o?m5QKmgDhr_i3V>h#rh-rWDBt={yE9FsGP7sgg z$v=L7NbUto-oUx_5;Jg=3pXF@3h8k@_Yb6wt>Xo+mKIofQv=wq4J&;e$I#A;0AsX&4E+(?4PtY=IF`EO?P4CHWH7V0tRsk3a_{0%w+dZ z?h_py3fu9|I0w(XdHciQT6H=3XD_G6Gv(#w)qkj8@Y+nzQ{?!R8ADRumGE(Q@cilzRbX8hci(_=>Im_A~dDd&XcD*uO#O9~*J})vB zq2skdn>fy`B;}yxDl1If$$+$?GfCT$)bEj{)rO|@3_ zw5#ac&q?)D;atQ!R8*YW%G5bpasK%HzkCg4(D15;Zvl_MmduM+5p2{j47IiReVH*O zcJ`lnd3j=be*AXh3B~jb`eVEn-ofw4cB)%u8^W6HIO4!M@gX9VptE(YxcGSMKU<=D z9>xQo284M!L%)=_z1X|p6D2(l8_yUC1bBiX1c&wJyF?TvEHdt#%&5Sc<9Gv1W*b#) zDNAej(OI@#YN$%O@2u3YOJpU?TMOrxZ^u#dz4*)V6@6ZO87q<9dz&rg2P#f9QMCC< z$Ni{#z@5!aP2{Ay#+Tvc74nSKV739nyf&ib2G-;6`a@v6w9xJ(`FQALu9mX(!U*tevFnVr35-?xH# zYSsAbb7p4d2Zw;ZST|5W^$$A-KAlmmy^2lI!N1i}g&oH>antt;FMolQUnOSdtXxcv z`7G6A3gR1rHHG~N2?{J!ZX0$@%%g47q$o~Xldqleq=y0PW`1*bl-Lm6-3w|;K}OyB ze;~iY)yy58-e#bCo4q|yy&kT-n-=(QtNuQWP8LRl&QUy132rUv%~<*lfUlYF>%U+` z$P%g3C^4`y%) zh=F1;|HXZ~lFB+rl{Z4%K?%MlxJy$1but|9HG{}=-({^g@z8U{2T5(k;`0OWHJt7; zd#!A`DAe9U%YcWhmm592V`}i>CxE1v8C|l9dsyIb2R+ZLbg)O$Uj#A^28KdRlu-N+ z5BI3*=l&{!-COE0LC>!I+ndv0d$gk5UUTr1k2311XVdt6jH`~Wp;b@2W3#T^YR~D_ z)nS#a$pl4|;s_#oz3j)pdJORmgPKCg^51LAs{_|gBwM&)86jY};Lh}Bg!tzk*<-o- z+g41p5~b6Kx!Vy_RWda-I04RhTrWhrtLa6Jfk=UVmOs89GTp84b&@c@ejg}*9s@G= zUmRwCY8AJ)^M-;3)eCAerFy|Z_bdF&WpuX{aE1WBC!ZEh9qmcu_Uff z@#lW)zhC9IW>{zCrUDBR@Kp*6QxwvnsJ>2Zrh8qUqrLlRKav^ysR|&l@wIfG*oav3 zBg0?&tWrpDKROC(Vg3~FF|JZx=Z&Z9&yL(Je?CkI!UFmWsAGz_7Eza_1GaSbg+Fz! z!eC&y`qrb`_PxDlB9}hygyz;vt)|ui({syH7wpY2NKovD15X=X`(lMRL``I1_1!hY zPLexyD&V#tSvdt6>J34r<4!~9;l)*Wup}0QwNU@2(TlRbWyUX~NHYDTGc+~oTmx5v zYfCQq{f;3)Hu-o_@GRVzs1=21s@E}KI#Oz#AMW4k8#J;LPUYkiViK@I^#L!E%4zxG z?t0A)4M8ObChJ!oG=P0ADVY#466QaR9HD!Qaa{6-d2J;oVvx|o7R{3-d!IcECI;iV zzL^Y|P+2s$PuO^?0tG9~6sbE*0;-3(ubQ57GO`1OVr~cUiYpUG+rM|Y65iD863y^O zG~+&ImxLOlUUqbWYurYO(DPhQ@JZ6K&0Y9133!gx`CQ0{#L3daC=Nn@ACZBSrwAv_u3$F1Qe<>j; z;Y3Oy?jyj);QG5t2P|g!$GPx}I;5qm(sT-9z}vzI{m^m5@V>CKGYb|ysLqT5hPkEb zS6q|tPg7Gek>R1emJOwxjB9ilH9h|)a9xMTAr{Es&r&nPPIXDi@vi3{S~%*d*|EU5 z;mJxE2&Blgwx*GwkRX_vooj8{roN`T^0dxY&mx+B5F$7*559YNcor_(4C4zg*ZSt; zp@G(ZPM{C0KJ1j_{t9?)mg#w!->iBYE@15WJ|WOH2AG@Fr$HQX;a9$daeUVIQ$X+X zZpIl>Jju`uJ@s2B!FtG5Dqj>DaM7Uqs^XC7lfl1EfSbSWeNim>+-3~Rdku5BDlc2e zb!2KPOiPr=0J($sO?O6Ck&YCFA1Ca14x>z^kJ9IZd^fZsle}b@$;S|SR{;5##?86$ zU6%%78JNCXH^hRNE38421z)5X1PnnzC&NZFdOdgFf;7~cY?f<&ovhcKQtSJB7V){j;fx*LA2ycUW z+P1CI1Zz=46wJ9%Qf69MW0y~Ku7!8T*epE$dX7a+IkSM8etcX9Hw3FF2_=-izCL~* zbWF)5(x*^60epIT`rxt0uz9;|^s1X^>WJd%i0x-jP?ogl&-$n-R=SwwK_uvqkPtJ_ zsXr*|XWw+bsSMaqea}5V5V8QR+_2wkh4|I4U+A(;GT+J2GIzvtcmiR%(5Iuad%ks? zyDZk!6VmMALDk4u6Rz6B0Lzz5k_zi7OC_nB;QoN$1cv@~NNc@HOmuILKVGd%8$;$E z4E&ji8A2Z}Ho;OpPiSbIU!PgX@JX7DRUqJ8ISR*u9-%tk6Trwd@Ur0z{krgOdMZ%z ze??G*ob%jvj#nS~Ap0?(J9cqk1HJ=W&+cMK0QYi;-?y`1om_s1g|F7(X_8ql78P*d zxsWlFl{C(y6;l&^sROt8>hn!@RtFqoKk!yJTbw`Z^IS3S>l9ScBe8;Jk6cS1!I(I`FY5=yf|bTD>(yCeFbO4svZI48=dI z@qGF?4JL?0YPfW?bf^SqV3NW`kGxk5bT6$@2XkNaXj-c6N5BbSH_tFwO-)PMSy9`8 z21iB5r%#4#;I9IR=wg~)SYaY0B}V#39h%Ah;D*JdQnBpMkR~aR%cXDMG&a}j_lf?w z3|hzmwkj>mg2cEZ)@0PfJfZ$a{kQmO2pzlVR&?U}Z^qfz~7 zJPn8~T+N#F9kB1IBf_L&LpgDau@p5?VfFFxQ4>>d)4(Zm1X2Btep9x97k!7!LjU(S zfqgnaPulWJpcne=7Laav;Yah4SEDNcmC;lA7D-@FigUyvANxkE`Fi8r@~-ijt$nMQ zsA1x@spWkvBh-z{>}upP>$FZzZ~Z!=NPD{)3Mn`&BqAytgYOB^w#TqLE2=XCQ4oEB z$`S$<{0FXx#CVaNIr8Y=ox6yX%5et_G2kiB*luEN^5Wp@$4lqt$l2`%#PFFD7c4kF zq>X}2cUO1WpMm{aXgX=>Q78F$2pU(8KfKyIslgj)d2ij7X3ce3bfFjuTS(AbgM-x6 zv_rq!nQFX++?A@SeenTvZ#!l;YQPHuYqNcxa((FAHF~v7>Ujt`>s=@zBTS@#<=+5C#@HrfY~c|jOpNT3 znJgokj0}+}>qJC|QdzP*F~~ZaY>&nkMlyCILdKpgqNwajh3qZ7-*%PC&IX~R@`FzfOeQp^**Gk07UrJK%w$XPPEiJ8}S9eOk9IvyM_(=KjuH}4O>s|nl z?D~!PWR4^bZ{gixKC5A^x;OxrYOWS6MLOP(U{Aeb)S~aA>n`RT=zpsB6rA;9a{v~z zGC+R3!c`~YVQ9h++F`vh;w>DQd4mokN5*vNttF|6K*F;}l*4%5C z9Pr=U4y5ISz!Z ztU2B<@AZhSB95||FRu$P$;u8xSd@ozt@tHoOOaale&{{Rz3OWkOjerh_`^jAl7TJ< z>IJQ>t#g8fwEd3t?zmV(qt^rD5%*&Y1aP$FaNYj{c@A!b@!~+ zlRmh-jxSur3m=x8#CZQK$y~oF{6J8vES`d%YLCA_;b=B z>p8P_Uq0jQsv}hQyCFP$AgAjK6)Y=>XUyTUfz8dDO>9y^^8IP@>6mv(jNMy~B8Fog zkPyMgE)|3I-u=3*(Oh+ilsBa8b4A)Q(EU3#<2F~%(+fHkyA}cgj3ro6QL)kt(qUZ& zBF=Fg3P`$PYimnhSr_g)GjpArSHW0;tFyEe5F8dJP-hDq4SOYm?Wd+VqwWQp_&hgW z*~(Tprd7s&E+>VEqHs!2!C~T*3$qasCqe+u;^_qwk*XSoH9N20O)$V9Ra`3JEyLH5 zplg-!65hwOsU=90CjRVc-I6SXjRjWp<>mrH5f&so6wmIIKY;`Tt@o+|0u&O56n|k` zu4Mck@PzYP(>RBWjgq%#cy1)2C~dOJ&&lQ--ZEJap`4=|=4Wg7BB)~5#+R??TDy{6 zi7`=WbqKrQ0eX{+;W(l0xe7`{@qdk3>o<8fHHnrC+HwdnV(62fbP zud1pV2jsB*?oFoj&g*ukY2C{E$?9sk6?Mb?DV5YB$O%)Ao)=}6d9RUG$W^0-4IPca z)1#fu#VU!f7~Q{T*RR0eylRx1L~^X}oY&HN0_@z2OUS#$c{b`r;DeF~MZ<+kJhS??ygvD7hrM*>lF)mp^GFV%y9e?Zz9z z->y)mNlujBbOdhOv<)EvuJ4PT*quYFAMcu&m~bq20X1gZT@*3yT5`<%&S z<}m{`_wWhvR6j0hAKMdn%X1c1KIIv9Pa?~{;DB(l>-apwjT(%O(0p@!JHX4G+13IN zQqOiyBtja8RwfgC3vEXZ1p{?vo(l_cC&Qhuej`DZv0tEwwZO4lzv>g&Zejb6@-7jq z2HIB35H;@%74uQo&>GV>s=xU2dW3VX(b76Uk_NE;e{nB9Vk<$2#DdyqHnyX)9UU{w z$r&g=P{W4A7Z#tHUYVa)e6<{DPsp$m*43rtN^>x!Ra6b7W>QnpkI8D3Kt3y}m+WSv zO$R#{W=q?Xs;^%+Jhe4LvH+kp(Re+zD#$x}!W&9Pl!spWW^vk#0^ict@5bXyOj86< zERbKlKq`UI-8X1)^W0!lh~v_aZ#FQqP;IQLpp^=2ettn=M2x5YonZZ_iW>%N8smY| zhQsn(>9!C-Z;1g><@ln+YtzqHVlVWu^}MDT5!EQQbqR9L{D)gmGI}jXohR0fnFT|r zkXm0p?EPwPTF5u4ukYpU)4BVS+up$*wQP8r5K^e|agclv{9Ad{c=cY8blntg&T5eNboQqbDQwMd_7*w ztGmbSa%dw&ue1=IpLLC6VAF2083Pad&0ZAvY)%r7Ubnr-w|Mbl5yQ3Yv532N?XnsQ zbCxXrT~zF-hDFm9_z-{8sOx<#B+hn}Hv9JNI2p_-)hsJG1h8aO8+sq*+o49Xjwx8IYmM7sU z4f&l(2aE2%q;_UnY9}X=fFh-z8(l3*Mo1vteM7p94*TN~2M35`X^OGKD@%v)MLDAY zUQ@0z-$XoTfnrZh2Y# zqSIa*gNcJcGnw4uGfJUGZf}Fz#g2ygsUS5x6Az4MeoOtle*{2XH*imOWx0c9{p$fh zFHh^DBvCPH4%J?T-G?jAmy8=YT+kcHw;xqPhbY}K!o^e4XpQ2A1@i&>xvEz;IoG)P`Zh??{cnBI zaS!6+OzyfV;K^kAlR}BJX9pxCWsS=VKVw@#Ff#(`Xz}i?7Kts(#mA@K2(Mcy{wrhjooGt&yQy7&V|HtRb5EFeZ!V37>~did*_I(h zmrtL%mzSITRF@JSN@`IZqWM9+50S0F}_o2nlVh*baXK$VJHqL5id_pdv z(ACwcd5=^;M1BGN&`>&fw4%0|&b5`4Dev_(rGg13hyWesQ>od}i43*)++RH(_Vg|?03Bd@SuyWfb#(<= z;OwcBTG0zdMH@{dpD8<-XUWW|VixVt&ZjXVB011~QB{|H!EbSO@k8UPy>mL<8GHck#Qlmc%c!1-=N0Y|{>zelgJc`T>dKj;57CcBL$S6LE5*GOcL{DSUWyfWin~LwLU4C?w-79l z@Z@*D&;9)W?o1{#nVfUkUVF~&e!f3Gs4EgZefbms01zoF$$bIA_) zQ${n>Z5~Ezr&C4u?*2EfH^P$6`2TAoPbI%BV6y(NmFco#ro{b!Ha;AOXDsu7jZc<2 z;Qx&w`~d*|-x2Tl{(len4Gd680u7+JztllFzc!7dD7g*49yOlRKQ^|FnfRIf`G7O| zte}*nTZ~P^FeB+nH9`}(6FO&hvwPs+1r1g0h%tlA>4YH$8Ls2cGi#8H8fPZRk^%au zXurHO#NF=+Bh~A9FbBa598z`{29~_`$>cHxTYE{g&U`rW;`&v}gRlZs)@&XARHzrm z(2J+OyV5!Fc)TOH|HPlcHCD~f#1y7g07+yH=meU6s^e?gitt`F>;Uf z*~iU?Xf>4WteA8Meu}8qkaeB@a2IKa`O|!uqqXCPa)9C}%OtBJ7L_Dlu@fqW5h@B`1D8#FLkB$bP0Eh1%2gJ zW7Da_`?0-$U1unjuq=T;9%@Ekzb4E+M%F26H3$1V9U|WO`uXNYEcIyF2rkwSJKu@g z)>EsH0Sm5&R=>fB5+}{_M>V$|RkR*gYGg^cJILUc7_qt9eUrK+GWWOMXq-Cbag{29v&L6I>7fW4jp%W68`WBMWF3*G|zB< z@=T@6E7@D4mh28A@Re2_S4Wfycy}zzNHMwNNo_G|LvCZvWwp)g`Y}O6!ihyOrp&EU z13odaKarPrHI}ee3E}oPe7O^;n&pSE0j5n(+;kwX_3z7SN)HUY9M9sIWSy_*hZM68 zDp?ewppzQuLKE$GyJ>nEQk917%h}SwybIkA9VmpYpyhDNvB%60E8Fw+t_cyXBdTh5 zyro4*f7a)oBR~JAR}AXEy^wEyi~H^t?^$JmwH4iw65r?FPMOUsZ1^Yg*v^86G}eYB zT65B8TwfgapCv@8?Z1y3jk6v6{knd!zS#fzY;BE*R;bDlIrV7tuA=0U6DyiPv z*Q5&pO;J4{-ekDmb`x+np{Jh}zZ~W}-HMeQ9UMO!lYDGL_Awk}`ofe2O}ay@ALaZ5 zgo7oXUpMAf^E)hmfB&i^RzubFpl7WVTcp^unK|^@Z%PoyQ50Ts$Knz z_GxY;mvcXZf7_DhRQ z^nnk2--Mg3QM;$1prhOxd@A0%Vu&Y2nuGVAT`{M+w zjU;`0Cq+89&+izrq{frHD;m(pxAy0}KStajc0#a0w0rQ3z3^(n4}w?t+nWV%++zoQ zFaA-TEC8ZNsEmA_==6Rr8nO~BJN6JYZ? zq8ux6TG)QAkmPqbRM||;@Hyfx%0tqTg5h*`7hdwhf>JeQ9q4wnu^U^_wmyp3G`a?V zYGemxp(i;k?6`f;c9zq#oPVk@zqZ|mbO>e0WV2=xJ>|3*#MXCv(u0x9`@>MDEmz$N$bE$ zmTN+mZyyTi=0ACwHPyKGN#!d>eA-k|RzcC}wA~>Ack91ZA;GP7lI4Al)+Q&xwcXw8 z%C_UwV*;w?*JEO5K=H{DwH)zG-#)dbGp4D$gG(c$)*mF2yOw@my)voBGEab#7p|Pm zFJ~}|aT9PG+>U1J{q~6H$cqQ4-;V$H;1)bUwlv?X0`;O**I!~3sb_q{N}&JV3GhUR zt|cpwDswa;unyC3K=lOxn86K+(lhTerwLj(u1;HCV;jNkCJ}m{f0Y^rsd9Rx+l%!D1#m z7gxpJlINXR0!+i1;!8ju9N{vm9HUG!VuBxWoG}fAB*X%jo>l$0RquPII7PM^+}u1ez-J9%t^Sd z0fD*gXjH&ivg-Ig()pfu3GiTmik2K8U?9!f->kJU8y7s%6IPC7xVn*4W67H6SzCf$ z>}RS&rOX=ZeM7{%v8=^WhU{*iViFNW2ROA}`e%(yHuzX=2x>;c&uCW?*?o58om9+S z!$PrM@YCD)E^l>OGoRczUcPa1>ZEbao?CQVUgD5SVj}-!*2o{6_Hei4bJl+1w;glE zet34nGQ*HzGu-K{(y?JKX*HTY{HEdoo~vZAAM9&2EQMSCrGC&*Xq>@p(_;;sTy7Y` zO~;<)TSG=2uh^%*eVHX1c#W8YyrBrnqLNzMXj-hdohv)T@{^@{Nm9VF7=8p7J?!$7 zF({^Tn|qWWySpxZBGzD(wiT zb&e2+089x#Ml$&>;QUsRG#fQOCEX96)|&OrY~*ZQp6s&3S>o?U<;s zNt#Zy86|plfT&;SArh%dpmEXKc|u(?>oaBd6+-9X=7OuEt%gJASViOIUO*I<PI@A%BSc{T03-8NxV^DfQ}5~$zG6wYuIM!&Q`B(bd|xO@1g&B$v647t#@ zKkrg(G3n1ZM%1s45S@B9r3rrb%z5%j1!`Nyj(!Xp~4+OcnZadA58yU9Qx|do8Ze06EG;by;SlpAN@S(iC;_T4duBw@48ug(ugsSMZ=GQE{FRjY4 z?v=kGRm+iI+miw?v;kyX{<(8jz;am<@#)n?64B$g9>>-Fi&tpBnM3Yy`}34C+0-a} zt?5NCkM`HVe%4~&cg6HB!#t^pAzcy5iSJfg++2>z8#6_(rZw$03sgC?PHM*_1cbh~ zU(H&+p4Jx*=1Gv~jZ_ZnN_h9xinROZUuj&KrD`)pk42lJW;*wICKfyr$%m?VD%gTW zvO$fY_u+uYWX&_^4d19xj}j&YSm>?W>GHy=v0h8SyYkl4mO`vUjJxT4ylNqIB(Nhl zH_jCU2BTMqDcB645!zdEN@>hoGHp9uZtyE(`Yi0;FFI7qD7~Trb*2D@}#FuYqrd zbE8fVWcNE{!-;3DX8itqjtlO<<1xWxrAxS{_c=C!KwyI$mK#_rtsafu6IRyxK*dhJ zpwqvCc9R7v$z@}b=-aBG(6C@hQ%Zs;LNQxIL!wlz^Sf&P`q&I5aq3%cOC`Jk({Ma} zYz{Brlkzc<&(X+@?Wgw{u8>`vkVNK!@2}ls@yZc2YX>B7gT;vF7*cc-BzFD1%xix=2Cv`jLJBf7yPrjJ((tk+r?NG^d8GjNhD@L zWw!e`;3;CbC}4xx;ZRDl4ZTlMJEikjo*29u3W|ykhfC>s_f<7rq&5_top1KJsI6sd zZCR`*#20B=~^bZj+=9`fRIw#Hs`X{J^PnNUu(oRmKPvWrmQrbw0opfAHaAjKQ?Mdr| z0*&5EotBKV3_y!Jf;rpn@ovn2(aMlM{-byBd2aH&07V}|^v(;W7d`R~UJ71GFVZ}_ zj0b$n>t|~uq%-Tt5IL2faJ3_*8U8%Q$M!P_qnleG65ee30@3iTICvl%9F8cXO55V@QdTeN z=B$QJ_-gR*4_9&%X?$eoetsu2xW{&cTj;c+T2D_X)zS>_3m}EuQ9_r#g4U4Ws@4u1VQ(oX%lG+%!y+QjL$O`&LDIuU;Hk;B$=Jyn$bW zR(jD7V17abVN5_^^0kZuiNvk30JLT<{)fCa2GA_I~*f7`>@Keo4e8o>uxJZ7q3n?BvLi1-4}=aE*FM5(Dz&g=&nSzEndT!v}|Y z;UzN0-GGh}f}eO;2k@`&v*P%#e553E#*9B2qB8^DQZ{gg1hn>YPx5i0?9F<|{VCrs z8NY3A@sIvW_^|U~0%%BwmZa39!Wlq?IG-R0gAvM19>ra=FH`k`;&)LdUmve{YaNS4 z>DXVfzIX7hrh0Thvf^&uPq6xx42+hZ)?Z?MQ7K31_2aUi`+$PCw4?u$SeSgDVLDa< z;C0b20e^O_fryr@$i*%D4fs`bK~(zIW}ids@|X%+Y^%-s7l}v__%lw3{z+#f#U;RP zu9n~hR$M}dqU5Zn{9}GBmfx zx_Jr)uFW))2Psj2n3krRO`f((YWwLY$$#X37AWDVui5Fhre=M-0Ut{*ifma>?0Z$g;|oTEwr=Hb8Nq_{jy8mIW@))ds%w3xlp^(2^M`B zSe{3t_ejN6rpvA&R_}h7IhxyYMI4kuYn8r-bNulj67=L|HMbz`%EF=)%c zK0H;j%%|-mU(Q9`MPa}B*!p1hAXdM=LsQ7!+2dxHWhxnOL3k1dAx9vNH_RAdIytq< z)M-9s9#W=j5=X%t6h-(ajutNo0tr_(peUku$1%d81@aE`nTM)QlaP1I4Fh7IM7hS{ zcF2n4bHh6W2J#t?av*2%_;MC}6E^1<%V_ui^Zj+)NB4j`c! z$k<-Z_u51alQ0N{9n+Coj6q3v+KyhW_$FC@Jxu|n$W_e`e9A>Y5uyJ`?k1=c{%(gq z#1V7MNun-DjyU$?q-i(97CI;K$UbG|_=!=de%@A- zB;DsA#ad*D?YZN-2c%LN<1NamBWb?pAYb@#h<0o`76qr zUX4$EH|mcd1^@JwAH{Inln+VfM;Bh=UB7TC;{MiXt$j9jsqQaV87B*qRT$`lm0W-4 z4LjWF@o!)Z_~vniYiMkNVJ?;n`6#%ZM`-9d!<|TCcW_3wtC#qk#FoK%pE_9;E-Riq zOeYq*{|8l>oClNz^ib4#VW02JEqAtyHrY6|S;z&q+v)Zy80e-3htv80Jh7nh*(z@s z7V+rp{Q0Dc5@UIRNOa?~;KOunS(NaaPQ$C}F;d$XHiZymCXG{HvjU}+-?cnf>R&1h zu_IsfmRCF~pZLtT1!?rQqo%vTdRJBd(9-KUX4s6=1Kmy2zuM$cm*WL9>K6;hhbv)? zO1;G|*j2E}5eeC(?-O~Q^zT7gi;C3j0sN(Ub1UCrRh6Wrn-3c-Act$--GlF`c-izI z91PCOTjNRN)I3XF}Do)a50b(waCD0>r$siuoP5a!0cIQ++e z^*5=9TFHXV^p|;eK0Q?30Iu*iFjJf@jz1t#KIv6wXZRCROhEj<$p|jS&_C%ZDRS<< zDzQo-ovi(ntS7-*Kk+qac90?j`}*1pc#K}s6-X?SIGM%Y%D>nCMkcLeBw(mWLC0uB zgI~igm^-%tjBSfna&!}HS@jGgD@=JHnf(Nj$N;5SQe83;AWwVx2dg#jTsWMf{m#tf zTrh->X-dbM3PFX8a4%e`w;J`Q9LEyLKB<34@K-+kAwEg@`4Is&Hb>TV;-TK8N-!QK z?9$idE`-&(8{>Fno9#(z)f-bA83o{nvQOT`)t^IV8L!xY&WArk)sV4!ziI%;R52x4 zBP!}_@o@-VPNtFJbQMaf={7o<{P0JCCNIVzcC#t@%@HR;{uusZ zs>t1D{?Xs?)HCb>9NLDRZKVBayj=q@v&U2-#$87+M(bvh&g4HB^y-)4*6aMQlrDWl zWaj7vYW^fvB|zjT6pxvTK8|evaxlDMPK6@7lBZ#E%`>dZ^cUq_y%ui!z?UB#o=ldb z#${7ODz%IO!yNou{dGEPRpQ?-6=Q04#xFcptSBMzds?mp)PaPf2UqQ6a%JA6b)DkSQ(zFuRD=)FglrA}4(umj(&t*Z)m9 zl5Ufv20ekgaJjOmOZJ!jiL})2BN=k&3i^Wm7N}7?R^SXWeAAz*!WlrjZ@jjdewO@8 zoY)N>2=JbxR84=u9w4}EdLrdh1-GSKl#QvA<%(7Z1Omx{*7Q$tERr4>!K9R{71X4j zN-5`_0V%F8tX&5qk@R0iuWqd0dh(GI;eN8sazsF+hZ+l^rbw;m=A&0qwSoA*#+K2|Ui@4XVVtBq`Vv1a=B5emAXa z3&u|aP4J0Sa8E|Tq?k$D=z3(dbX-;X+gq7;Hu^xjvacdv1O1rD;v{e`B#{Ri3(oES zrrMMgcri)0DFCoc4t%>(Ib`QGBGS)_fi&Uy3AEieOldNyX8Cqj8~&aKk)!~9f}C7S zmiI4w9JeYCFU#9ccHUz_3hm1IoEW;JaZiwZ17+ z$U&fo35=&j{+BZU+V_7sVNhR97P&J?Lca=C3=Tdqu~^>y_f*`LgP`Uz_2NhM4T=A4 z@Rf}rZ`~VN$-;~)%%{!hp<<31R7y!G>Ts{F5UHttIY4#ifT`LNbAmQyJ}w?T@}+Zx zMf_RWGi%xcNtmda7&z{o7+=Q{ZGc5mbu4O(Ve1*UPFoxwJx|tzl`h%DPeMBt@cxvT z73ud~jK0^WHt&l9o#EnhXGbF`M>V~#B|B_`Mf?{faTq~_ z*}5Drtg96+Xs})<0I@JABGCIbbk!kP2rCjOfFokQ+p;>%#390pS=GnL?Ogq=$5^$Q z&~y?53u8OJ#U$_@u++!e74O zoxIjEPc5XUC1{NN4$^)^;s-gufKRZAghqYqmRBUD-?lU@6kCgZ$*6JSpX+-vCdcI; z8w<2Aqpl;c3!7;a|}cz}?(|jw?HFaMZC1wk~))TB*_jSukc3%Ra_MBbouy|vQWh*s_4=4F?bR5EMYY$(G3Teu)hlY^7#Kpij?=b>LaOMXi~Y4@ofGCgv^CY-szyYiXSp zHF-`RP47t!lssfw!N^qBGpTO)6;}PlEWrV3S!Q05+W}V=Pm7YTBXYqrgY*%AdfL(_ zl0DULhnsp``aH{cAb<4$b^{(=nEKtJs*Y7sltng`5OhU!btQ>)kBIsZ=eQn1)3heN z@Y+NjgG92t=KVX=b?b>ar*?fR1GoiF3MIB%Y1>HTiD{#n+aCF`B%yDY)%<&-?lfTK zx*ChrLLFm?DXzh%^)63=CMP(b>yHG>J)QGAM@Wo#y-5+aeJ~kNTjs4-7@%Zbg{jPyJu*YD?!3Sgdi-VWMH>qJ_XnX*%NCn(FQW=Vt3&P-{5i z*5b}W<}>c;iiGGxuB+CS*MXJ-VxD2ZU+HBFnd3qCsv_}})CZ<^*jA(G=vS7_Wm#}s zykt@g=NU&ueZtu9{>hsF@f*Izx3{9-T?OBEm_CS8{#ox9O7NS;dgK(3V*U6#E30p8 z=;i}MU(jdoo#);eH$;@T*IUk0|fFIcdUr?RQWtJCBoigyJ! z_ww@s)m==-K9kZy_&ZmrxgF2Yh`=9R$obJ{IPD!+ys(iMF*c=DFF_~ag4(N!HofaL zkC@KN%&d<>_c?yzpy+~E7; z=Ify!(G;jlgK{+(eEsoX=HIq=Ci-_*Wn=SyZia7bP;nba`0PC(wHnr;PoS)wzR-3{ zQvQ?Zv?YfCq(tj(XZNrM1nN6q?Ge}Rf7`hw$DK0OS_x(+0cq2|NkzH;BX2bx)*Z5y z9x>G4QEVAza*YDael>$+?;v-V>=)C-PbBCVtG&T@iF$82M{FHFA8OUYTg2X^6U&u z`MVx7Z;og6Pv2~PNOey79akygJo9syFt}hDs6~Zr^U z11E8o68^v0im481`_4&tJ#m%Jt->YS9w@52Fd~d!PqW*g+Vz^{oSC9y zMDs5Gg4ZqY^SNgxPA`~~w~q=6{fLC>jTXu3Q1_z}YMx`&C0Sg%a(Y=qBGYh=Upnfy zlGpb&jI4fs!qHj^-8C$gB>P{6<88r9qi2zSk?2S9hZB?eo&PPKAS^u+G>PN%t>3M^ z2TE@S{3wK1fWyOLPW_P!FBXSVJ#AMZ)1#WE?orx)-4HjW!121Vy~Y&Xst*WFPlF9# z+B^2EUx!neV?o{`LJ$8<~Q5bnc3mXioNo^e&EB4iC1YxvUA52KjW?bj;K%+md*;8-0N^~ zpj|lUZx_QErCOFf>l0>q))?g#?&A+4t_nwef*SN0Qw(d{|5 z3a&tj<&hE3N7+bVP(5ibuynatrLv~VIWFVitj&rwcD@bp3-^NBdwGDeFy@0z@U`ST z=L<=ugoF={AzxU$`?lFL-N6mZ5(J`xCs%@Y15`saI|&YujGJNhfK?d0dqDF|jjKrC zHt@S)R=K-lEd)90XGNVl-_a`%d`DOP>;9z5mXg5>nxm+<-%fqzXMB-x|GhSk#s@6V zu6=gN&GSjyGMgsokeQjq|I8TC2H1Q4+sw*Ps#q%Mro) zvRJ>DL7fzJ>Bf7VBxe-6d-_hk%v6TB=x$(!C=y=Kl^wrv(a-UHiG+!ANMp9>+^2X+ zj{ap#TpgK^-|leg!dXZF^9M2H?3qW-X^$Uip(Yg6y*AP4##wKIMh0DilW6fZ|7&wc z$^Dy@+7EN9NR>7Sjjk?aQu=X4`YbgVG~|nJ4qvWxB8dmf{C}%> z3J#eKex7TUR}sAEQsjX6-?XE9*4NZdrm3#yff>sYQ)BgK=+5>y-gfSvX46TQm9J|j ziz)n5a?#Y8pZBPYoZ1D~xCjCpjh8*=8fUnutLq==PwaW(`d7TI3fgM9t3*cWgrKJx zw@Qsazq;&cg97H3jn|m6kMTbr8|_kUKIib`W%Q*pryP0{Af|q%S1pB5>5G;D@L#N; zL7)nBN3gV)=92u{E2P6K$A`{b+$Y^jS?snx( z&`m;TG{evc&XV-+_^;i)lBi>7gS_m*Wf)#$wj9~|a=g>~=sTq*sAoiM@n0CXCa$8| z`Xl_Sz@W_N5{E>ug~6_?yTAvq#PDsXG=QQ(_o?1BHfin#dzQ&iaU3luz_%|K_q&(N z4R|H@fbaM|qIOi!mgP=nIm}gL7UZEj37sl)H1fB#DS})z9JPY=1#idmme*xtYFtUn zH;U3NASB`qwKUV!nhoI&|6xNNoF1d>0n=U^xgbu9>fdQIw& zH7&0s%K}Js$_fgDowhiz&kv7IMDuHmj#j?oQ!m8RWEd;|HmnXarOrUPvl)7TCYACi zI?<(=#s6TudOy+aI9cAB>0Eh&v;Y#Zb16Y*a|@OoG+JX%NrB?Spm0QEae^LaZI|j= zn8j;V57J^_LRz751E+t_uc>X(aGRDcO5*-_i>n>}i6x4`@76?Np0QZ>LITxPgF~V$ zhCay3M@2ddZCSE80IWy$njS_w}={VR(s4M48R7AT8AS%4V;);uC599+ zubL&aqpZwVo7KXZE@nN-W|vj;CDA~cdvwDCY-mtFbMXv)Rqk}6?yh?o9+^lsg8%qk z7q)cd} z;Dlr(DWV!xtq}wE+a6#dHJQ~h(q9GfaQ_isf&%4;RC0FQcD?M^CFpoDttmT`>|i8; zo^F=hCTE;qEbpJ|k%!eqHy6rm0w~)$MC;rLiqs9f0SZY&oL{)=RYx;V5N8e3m_m(@ zfH{xWjA7>{>)G#u{>Sq_mo6v@9+U}$9rg7EVw)V>)qSph~ zIr*-!kcFM#Qx7Q@B+Gg5^=u4jZDmIZAx_=iY3rFi(tdwD$4x04A&9))&x>tv4}8D^ z&6D~~#^Yu?SgQcQ$7oUmbUgGQZLLPMfDuQ=68&JD^9O0by=2z!_pVvegk<$RVQkoU zwfb1(Fi0htytBN)gHICCJ3{wv{<^Q4Q1t%jX)3MT#q$Q%bUlEEWIwU1qlmV4TUR)( zO-O`fnGL3m&@x+f?+Pzu=^CtKy%%ab2#E zZ-^d&VpW-_Ur;z4EMFJ;6uJLZx53((Cg0gHjf!eroK$CltUIw)pZ7Ll*cim~W6bYfG6D0R<;5 zM-?vR`i%`idd_Cl+A29{{IWWpPwC|WqaB)ZEow!-JGE_**w>t9+h8=7L+un?XVQ-K zAE}kZ0E5DUX_+0NYTjjHHD5oGFvQKGVWD^TT+LMvZimyaS!}u6&V$JG0oA=QT&7ht z(z=XAB4(VFt7GW(&o6wx=3$=#y9}Kh<_ek074QKGjC(e?AMG1g+!gAWkZ?YRSP4Y& z5<0LR)m5Tu<=4?zX|+T))w8m?8dkF_3XI;Lr6^9@oXms}v=v5uKORovm*mNv@lS65 zKDJtX$z2Y5B0Cu)(iPouUUNK-8=}T;xNs%_hi;wFtKV+E^@fu5HxFoNs~^Q2I45ut z*k;k^|9mj7H)~ElJ0_s5+ViVeBett;cQHQg?79|pCYrbP=kQU_>UgeaIa~+!(xp}A zyGEp)V7tWAym(}U!UerwQiqPq>@)uEM#G-wxZ1a4e~nw)`+{(l!`7Y7QfwU@Wn(2K zqFb9ydokl?HrO)^S#B^aucrNEBe>>t=?m4(9NO3t8au-B(XU^b1M?TmB%ZQwsujAr zfcr|6*3`N)#c1LH=skwb}fM! z!9>Xj%?D-W&q+VSW7d9+VQ_W2B04n{EvQW&g5HbZtOa>IB5(8=9yTMnj|&2li43tB z_u@Rts^Z{n6p%Us^BSwM%nFO4B=_hY|D;5w6A&8~Xc2T(`e^$@NbkQ4=MM+Ix&I=% zU$@fzTJ!L>IUyD@c+>p+(Y?iggIN?_?dkr{`m?eTlV?8Pqt{|Z&&?k!rejFjozu?e z@_>JFV1H*UmN>~%UEXF&udsrTd3<+qOv@Tn<+a=BrGA8l7ZgeVt3bbLe7mlN8FB{s z@YQM&K5Y8q)O-g1WA9Gy5&kys=eI*azuQqvpp&>c=<`oC!kbRzF ztiUGjfyvr`jHDIrD_z8Mq3FBqgv9Z;)fClC2>5|n(hHy&$V)`c7fq(=rRq`*P<(Zp z(Q?ly&{Kbfl~mZAT-Vaao0asyNX+aG+A{q|A@p%D^KAr+MJ-{J*zt3*y>yo{vA}i{ zG>%n9reYqVDy2OUtb~aj*B%KCPS^ZKpHzpv{PuPT5@)wo;xocO_rj(h7S*9Qx?{oo z6?4`qg1MLYs0=Z+m*sDNqR7yKLJXo}&~M6|f#*hO5^?U|hfg$Uwa7cFX%W^vvN!ki zk$z+>p92%ip$AS%9aWuIUmP?=UyJQDQ?2yk(pMvcj!zycywrvqk9JXdw;qSQt?@Q)Xo%x z1Z~_PUe%XDn!jaHyu^X1Rnt;&{_RIN$lfd0AN@~seZFA`mT!UTTl_fD96F7>H7s|R z98Gp&6-N^r3J*Z>*&bqb-Nk?ZoI@@82Y+@=O0flhaPV^OgMIz9v-+jx`7KRMq8`J8 zwH^!Ot>3x%h^C0aWjUzY*SAZrqlf$k&FHlJCkZICLw$1E_t2R8oh1>@+dHUbh!7uE znd^SVYSM0cb>o(_hda*AK^76#btWo*QrhtIs&8H>mVd>+>1WfdFfA=BeEd*w3Y8Er9AHniaLKCM3(30GXKI^>v*dDH6WWa$-Y|=q@ZrD9x-ESXdbFi3 zU=e@*NljL>vi9Txu9@w>W9`+XU>@YV&mAdjJlfYKytmV~&3R8h#_TM-s_~MZ>~a29 zFcFYta0v`lnDv?9qetg-9!JwGge?1N=FxiLH3&m3#5Wlk>asGb;=(WmmH-*O$&Xn+ zG9mdTud;M|!x2zj_<|9NU}vD!kaJ9Tkymb7BTG^JC+z16`ZN|=Zs&$(*%WdIRl69iaMuVP`a@*I;}(X9P+r#|Y`gzu7-Z;ig*?{C+^bXs_Q4!UhS#5$Hyk5weM zk2bQ+q~t<$Q5?y+KC(lu#r|~0o90!%Sf65G>*m6zG5bR$k!#$(D`9T5Ih+=*o z+giuoU%N$mLQbD{gD_%mH^385&HJC zRz~J-G+x)C_Jg(DpC@PXQw7b7X?&*2-4`7uhJU89EsL)!xh->gG~Myr)AM>w`p$2t9cdie zsuL@f7;g_*D(mMAmo{Gvk-f7)p)vD6F2;D%|B*zE=q&Dq6HBayWclq282h2qR$uCx z^aGNN3De)di8%G0%_q7HDdP*GeOZxQF?p5OKA8Mx<{W+p=ZfL_G+#4bEh?w_V4yCZ zHTQZ91=l*nug@dj6HHLXbHCTQe#zc7VQ1Kqk|?(`=}u$cloS7HAh?xIc-3z|=V!vW zgyYYX#O$U0jdw8)GM7$=7V#=V%-KgCMNQya#TT)_IDN5&xB<9oOrf> zMX*A{DlphfE<$e+N0n(Twon0ymrgNJ^k{ex_crQL7TOx{p!?)6%L#VGrRvHvVJy-g zSV19Ya>D1@=?14-VwMqNb}C4@VdZd;&vAA54om3^gfzXc#CrwE$;?@VmfAgI5%hJ= z&9hX6N7+rKc_G(94_8Hq^c(_WP#4+#RNmKQwJ1PqaaJ&sVp?Gd%yGLEvJq ztp1HR(#wjOE;%$_C^pI%d}E6vh>EC+=+40&pTi?*1zI@tX^5Hsq+W3Od}`F)tfFm} zv#i>WyrekkIk%Ovb2mDLpGY>aSbb!d&}BODgoTridRA^?K9!MQ9uD;Ja7<{qdRtUs z+=t7My64AI!k@&KUTI3y%O8SSu;u1|Ok}``cV9)J?o``xn{2?&ZQg4O$$c6HLE7Kb zcy$$6TClzWgxE>7UfU0A8GxJvU5{?0nV)CV;0ajB?suX^Oz&1=(4r(z?=uJmHAYc= zLY6LK`Gb`?Y>C()N^Fn0_9f*38IshVz}W%mJxVKx804}?q&et=6^#6%3s@Kq6~4eL zs|t2>`X1ZE<7Oj8N%P~Cvro{Xx6zC|N3$w zH{z&+u&H}s?9LbWYmX9Dl;4`i zkecR)x=Q<2^-5bZ>In_^rScmq(@t)4r{&^CFyt$395WJv*kv%8@BsZ2y6jB4ql>J;qMm#UTMvfRp$pduf>m?*d2M#jwLqg%nE}BU*w!|$5DIcj{RY7l_F^U8_ zzIjU6nfp_|TBp*mP=oF`Fe;wXmaWqipC>2|T^$)seNNUL+F=gPZ*Q14C8&KSTY|I$ zAQB2l=@LlHHMv3}41;O6OFc(XzeEC-rB@?XRPUuF{$gP#HUKsBeh-l3s%J2k9I{Ub zLj}E^)OwP{^2DMSp9L=y#&WSq zH|6$OBA)h!6nqUzq4;UDSnBXXkH&fXBC)PVQMc?p>?^vBOWF6MDHZER?`32{=WZ{8 z^_9quY4ab%psfOJGf63>9B0Ej6{S4sdj@mojegti_C(!P@Uq zjI;ie-l5eg_HZ_x7V0yd#ekG_p|H><=@$burEE+IjHY>`klv&}cQoG97r?DJ+1Q2% zOup6o@vAjA2mNpKzT;%}Xl0&-Ic1HQM`t$Zi}bL!Dm|3%Xo|ZA3iwUZMenpItWXmW zzhmoA)$}(c2=;?1Uq$MMWmISmZjzJz4Rgh6yEg10jb4=2@*|eDzaE+1OLm2$+oe-p zOeML%z>~#R;k6qlv({zn5QcGWO(V|*-x4B;Tj=}DEbs=xzBPfyW2$^s<5@H#StmLf z4OWoEX2!%}GLfO!U{c^n@Lp=LJK@`yN_kf8UZpw+H$4<`|35&t zGg{nfbIO}d0(63sG9BpdJ_+#+R(kUVTMm!+X-Zu6Gm{CX3LfmYb%3AdqrMW$dcaSv42$3?F%_K{(&9GBsuz4n+X~Q$7@@bHeVv8Wla8w<3G36v6!G)@Q|!}!S;)8HT_&ZC?BP=R6fE08!z)J@?|QcqO1sA+Rl$B8i6ZMFxx1GebHjdRzDE${8^I!jd57ejvVZ_iXx#2z*^KZ5W$}%Tl_it1_&3*$(yQp{va7lVi_#m~o-t91*S^a1 ziPyVT-PIhcX{ZsQbN);@`qW^$0ngCFEd{P5*lLB)Puvq2GSYv0>H{tN5l|QB`}S%_ zXJqsBu;(Mo5qkg>UzcfOD;r57kc<0K&Yu*l#D1a0`EIs*5Z?kaiq5GdecvI--}>uL z=^7%3j8LX3Ho6A$M&bPUL#rBoFp64t9%Wfa#z;xTMC|uZ=FH}LDFs^BnkI>+u{5kP zU>6AT#K8^|r$f`aQ$p-I=IUf=uDo_s#FA*!82g^k2{ZzGIV%-GIajSD^GUCyr>1W9 zi*2)p#9c3xL0ifEe29!kMm^#cYovwoAS-7tPU-WcH|oKf1`u_;s4O~)(=tq-vjQ_ zOE2B9gdozOG%PHs5+Vu<(yerNcQ3Vcij*jw(p}OGN_R>(cX@yA_x=ZWe_v*p*?FDU zoO7P%R9G_#GwE{9KuxAv`hX4oEH@if`K9%POpb7KL{tUb|Bvg^A5Nn){8I1uPb~Nj z?5JUKAA>%G+H7O>VZ1Jkp5%V;1(I8XIjHl~ZmZXo($#C{`B?lxwm_PEs?0G2EWHAd z$I%_ovVr(iX{yax;!{mMFi9-QBjAD3#uTm-l*erAM+TFP=XHvp(sl98@J-cG?;!u&6`>_?D% zPQ}rF5?W$xcU05X*HMWmR@89+wHo@A{@#-?0pe4U(*AXAh`3X{I|!;j&=qq_+k+L82teL}X!&-cBq zOLbD0xIHnBkzZ!-WmJ5pz%7a07nmMjO>ls=`yzt$UJ#v3|## z?Wmj%=q{SHlh~IK6ZGUjZq9=$+bWH@R~|u>(3mmou8*?R4l&NEjZg;kg2MZ;iLj~{ z-m{#|v5=i7;Cb`nJ8fd1@K;+!YvtVVyJsvf`8bnhz;H5752acVm{kwq#wY~GS0o`} zOyD3FMeI(0vXzLulO9?`E_?%rrr4>k=>l@UX>-2ZKR8WBxep|RQEIW8txmP$0a;{Y zJJ}-s;Ye@fU?=e1u7IuKpbOiIeXQ%%$>+ykqX3*1U3l`Cig7BZl|j+xgo8Bs6yw3c zAP%A~zzJF(gSP=nd=iOnxd|SXX)!TKfbu)YL@@}+6lnu~9gj==?VIdQu*Z9aGdcS0 zkVZrN^SD|=l_itY z3M9a3KA)|4UxSWk-y<3ojIadBoDF!x#yg%FEb(*f(JW*5B?A#INIqU>aIFH!J()^D z45U3k16P0y&zR$tGvW9WB|k%|=rNMtOiZ8K?&YTR7 zraCfW6dSwo=_F>754@}x(m9Yy*%ZJ9!l0c>49!{;YgubIX#ze#93vi6)x<1B3o zq4lIh@w_R`7&fmDkNr@(4*S*z5!?BsZhNvN`@Kz?V!gXVYeT=XZy|J@QE$Jn>YIa>fTNcUv?G+(C5p>D!EC5T zXr7;Y-DSTihX7)Ag@&&m806R2F8r51SU2JB3#Rt(zpRt+|mdg%3m00Ic*;tEa~q^nkBW=EShHd>j(0N z2O#9!Jf*P%tJE6rznv4dAEzdayis_Ff9(-UE3=M~^sSR-fGu%BmBX^I%++`9SCOt! zg&(7Z+yR57CL|N+sHE>M$}#YXt?gsX0M3sDIbbq4ayOw)muWDt^Lbol!>0boA@0JD zki=W~Mp?-M>4>Rnsp{6$x97U0`)-YI^kX)T9ClMQeGoAfJ(m#m;KF z9Y^r>eUEL6d7iq0?3t4N@IN}w1W_Lu$wTawOZqX=geCpahONo?udkJX(3Zeo)(e^^Jbj_@AwbKBq$Z8Ff_Jpa_2!n`S(9l1-%NW=GC&CqiLU3>)j zmzTJ3UNGzmzi`#lFVWikJ^20k2($q;+uxmEW6C(myhNoj!(p)69a$HfXnP?87`zL1 zPrlaUQl8`Qd^}J3A$ciymd0b8>ajV+UY1eWND77O6zC2ns%sF+Rd!1Xx%@&Tag{~! z7a`0!mDMtLC)iHLlloh8y_>W%2WmCFO-d29EutKswn{dpt6~N7GeXY#ktG4MMr2Cu zJT-_~^!VyBIF7lb+fg^}d@#XYYcO_W0e+*A-evSz%6Pg^l7BN8SgMgtrWTub@zYjh za4q%qe^pvNSS~s*ivhI8w7Sy0_o4TMT^sS+Q-J$4{SjhIRaImoXObWGVe{J$RqyXa z5wrJ$3t!&-7&dI=&%V}Y&9eR5+#+7#G&RqyddR=AzQbHbACC8*!>5!V9dvbD=)_Nc zg~iknh{HD+_28xO+e<@|7IS%$tx*1cw%$*@O2Xr;h@^FTsf{7>*Iuvdlr&zejn6&c zJVD%W=+nJ@2@H!q!swyor#t@}?zVodOj^tgiwox1tH!g_wMKo2FT=O-zK>D95>}Do zgBtW&oNu-Ux3{>iofQKoe#Jv#bFi;oCE9kqv#FstG@FFncT$O75!1(Do8p}pp-I;l zjbS?z^o%|@wCPShR7g_O3#;WP%r;LEpgeo>5WQq5J$`1OEKW<@CWqrIyqx6wO72tJ zKkh?)sTz_bcRx~4#P3j6hr0*%_g$4;W#^_R*tCZ-cJk4;L^^rPIBb*ttX9EJ952{h zK>6D*1>Bb(RX*E|1?*AkZ>GHB#ax{06M1FQeQBN&%8wY%^NbkBZn>)`JE60_y$od` zsgtTNY3GX8Lp92=y|FPpIn&Kn-|%xGQv1rV8d9X~MC_|xKPHE#cK4deEb3c z^#H>FOhCg9YP4`eCSxWtc5Imn!&F1m&ehJYs8?7F_IJH;d_;m^Q9oD{CqDnq3vG=2 zpm54n_T|x3OPIRJs~{7oL&`B(3m(71b1_;9891p1{^}Ob`N~j=Cs-HG?$@p6ZhSCF z%oUTF+J!vLF#B0N`)3Ry`5`IqT*FfOI0#C^-=NMNW3$Hz+hySsp=<{|=Y*SNIFh6h z@XLz9F}MCOvBPngT&2**n4O`JpmcRwQ=rg|u~ur6eI6dLHB`WIy+g!l_Hdlgqq9Ol zRQ7`RE_FW56h`ZYRIcDc!{V@{yuu2kZzs67BfOreS~ZZL#7@`(E0-ATo$z0?LGjwI zU!vo2&F2 zr$1)Mk%)vsf)m#0_2AnSeIeZLYO6lo5ttxTr#HfqyBMQ!dC7Ll8=*X!Pc;?n-)J03 zfQVTsFIb+*YDcBa8G0#eMEr^vWZDGN|Gf!z7!JCBIJ~Lc%MOx{TG&-tWYA1JW^kgh z|FJD-fS*f4E{->hd`tpN0;ke<(b^zQ>IiLx#1;{O#7nuAE@Zy~y6_4J093^^2wq?y zkoa@ztSMQ*-RD*E`dE+8ko3|#zuVr}GFh{>4i@5oZ*i1OaNRy&en=A|Iel>+_bNDK0vYqHv~Ml zBLrK87EZ%(oOyyW!r1-p+>50*1+C{{Ss;sWB|Spn-QD5#^q%+91CzdenhqzxgyDQpITBHZGaYc&v@58 z{8bokSLo}6*QA5w`QfkQVbyQ~V0K@QBB}4b+HtCUIew|d zFvx!It{fW(eOxMs>~o;YyDR7_$(Ql}C#90*N|g?r4zV&-ZAsD5sc=(+&yXeaW-;T#S}H*`p2X&->_B*SLF0_v`N#RD)d1Gkx4GVpx2a4 z9VTINatJm~eWe>3>uR;yqXEbUE*QXhDUAvK0ILF!&`g66jn(44{G5Y9aK`TH?h}k~ zAxoc2nqaJD#1BQ|xy{*HV?6rd^? zjzGhU3kZwjc{{&N^Ok8njeqjujA0(1znFqxJWurmy2TU%6GJMyP`clStdC9a9#sM= zc|gZZQVfN3#b}oUsMz2`-^be}0ch&Q<5Ng}sbBg*h*xPHF6@6)`Q|FyxKPBDs^k48 z2@b1}Z@^kCwi@}1w)LoP6)e^dS*)@U1aJP^=~qAoBmqi{NQDjQKZ@;`u%GQIW=S2s z>BEZe<}U!)Lxr>-lDe^|W{nHK=>gF+@yC3M_MZxt&tPfF|<)gHI%p$@AHuTaz zneZn)r<>0*RcGMr9*CgaRr}}vO~FLd7m7JAb5Dp{Gmv-CSz9o2b0F8;r|$3_a)l6| z%4}k6_t6j8{{k_jJp8YtI@jGW$qt>ak)?PO$`Z@DzQMSzC4TZV$v%NdC9mR!EJ;_s zhd0aSRl^|IDf+!&YZGPX&CodCbhYU-DtBug!B+9!1@}g-H3wF+eybw-@BNty8K=AP zGu&^`sMeR``-~k>5}qPkQ^mMU`*jf89oNXKFv!m4M)D=auhwnt)Vq$``=g5IY^LKq zEfhPYMcfbiN?APvJhA9p94MS$d&L_%TSzTuzF5;us2cC_sU9|o%Sd!dZV?@?ql-SZ zgy)U{4N_m1Fp?Nqz2{6fml=58IMb@}!Szu)&gW!2xxcK%`s;170%_R0VKOS**zEj;D&O+GTJGi{pFLgVb`&+(q9ztgUSA9O<4K zquh4&x~g!c9*-1~{PH;?e*6owTFI-`nd@T~H0*2UZI;~oX~1fRjTm6-okh4ek3thqHCfyoTPC8P1-BNPGu}^;bYxtWJjUnNB}O0stz09eeYQ9(1+^klxZOeCN$cZl6P0`3g`x+l_Q@$y$k` zN5?al49~S3Z3mgZW662RLFk~OX2z|cn$B#7F{R0n>icxt7A+3z|L$i8Ar%rY{`cu3 z6mrLy&WnP6guF0ST1_dija$M1nKR6=Ea-QXQV-!tuK9(66TA4P%`{8uVjbJ&b50y| zKXl$WG+K!+|`&bdM)rWz+*IB~89H5O9yj+|3i+PL{lA}u#tRf3@AE0^ zRWdLX#9Qhi>pXhG8%Hy(Wlo11j7dZUBSzG4@yMq5y&^yjo3j4nJo9QC4Qv^7i3&qy z%waNH$Bzr(jZ-mfGD3g14*E`OLgo(E11U2JT^ZIW?hRu7lcO(9%*TMg*o~}-fz_kl z+?<#BTC0R$aJqry{mY%;N_nz53QURb*t#R0Au3mKNfIdBi++_Ua0UlGM}uqi#e@+Z zbUwUBjL7wAr4cR|d<tv8&_FHsdvD$`OVmhE6z$COwgu*l;_BDwgCnBB7tkI`WJabQruwZQ+_$R?TVc80{z84^=SS;ixg2? zQ$kHdTKmaghQ}*~PfXTxm8SBWU@x2{jMvQ3h^*8hY!1wJqt9veT|QbRxa6X7ieWUB z7s$-?I_5q*35v-zDe4Bptlu)y;)&YZ0%;@WB(DR(e$Ltg?Mc8~4ke}U^kBu{mqS`nTS{Fy&dk>+62zAmE=epD*1x1{FES2gcW-NX0$E2KE-T6 z^06y>%n>iHC*CuYQ+bC7e}4bRzL%~_hL#UiQ9BGfRJ0r%!9paEbks$}O33QU>Qx%s zCDjcDvKs`18Zhno-p}|_t^6B&uM5_KF^5k?yo!GI0a|OQ+hNq@@I!SotohBI23Kcg z)BycUU^3#p)~4wZ^E!bD_&IU|%;G1zo5(%bm>9hA`t}NTBS#;`GYv&dn11WJ2_<{C zb2ZFge<5kaC1(o*Yn5Qa8ZDR=d4pj2ao^sV7^ixDtOb<(u+ZE=DZeD<_`ciQqRQD) ziF(UcW4iLpw{}ja?gmlq|SfI+bmX{Ybe1`lL(9(KL z|A2A};!T5~)$AJ$vao31E9T9?s3k^rZT@prMq~B~6x;y?f}b*1VbLX&Ki)75EYD!1 zR#aZEhl;bOH`UK1$L{%Lz*;ySICjV$Qvw-4O5F!ZP5FT)IEkwCK011(jTR)G(R9@c4+ACK{~5X2>}+CQYVO?=>+0h=YxvHZ|pLpKU;dY?V7Y^j6_K}9K2HlfWj$*W-xcH2WJZzujKJ{G;|rJ{b=dt{MHbEk z%})N?%7c)c)PfCH_Pr31q2N>gq5J=?Iyfj%TE}g%(u}9hWFne1^|Z#HZz9Jo{u55Jcb}RN;Cr+|WqhgLScXbCVx1QSV^f z>3qksJ1VCLzH2P_W2h|yX$Le!5|QVdW|>tk69e;`79>gm{B`g%7? zCW;%Lw@X{=JF7RYTckiMxmK%?6D|B(7ltj7C6UNOZhwAcO7 z_#D^Yl2-qx_(}h3J*OBR$m05yef)jXzwgg4rR8qI`{LeWi+LX zWQ_OVYoQEw?s|*eq$7)AXgDUA-9frtKB{hcIv$AONR5pEkQ~nH+s7FhU5| zj!Q=P)i@K6``T679_Ujy7V9b&pE((V!1dWx8M7Bv%e9v)4_p=c2fHsgD{O-U>K`k% z*bM5_SUCl(?1Fn7629J`>U8$uD|sUvWQ$0w{qX=$g-_6*UY6Fg zY>iGk@z*jeUG$$TI#wGo-?`pka%>uGy$`XDKdbeCnG0wKt z>(xWds?hS_kj?6%$UL0Q7>BAM48%+jCgKBJ+tJ0#DDobL@`9$&hzohG;lz3NP6zW- z8SFCL;CNx(kfL{Nz_LCp`v_C5b-g@gI|h}n;mVvR;d=Eyx9Jn-o;IPv%Jgt7T2hkf z7)wd%b`QBeVLAEs)as6|IK3{RNv?d%-ri&#hj5V+^6Ln?#vC7z>ikwopKSlzT%d#C;P?UZoF=c z5MB2^N|9;(wS>KFOw`?2GRjG?3Uc4`^hq0{mjbYN#G{p0g8corsX;hIAT4uQ&|SGM zj;%Zk0jt-=7a~J6Bec2qUW-kpf{JwOYF*eIWYZi#a3zXSXT-X+q#bYcknEn6N~vdB zefV!0gp7pjUG+LH*m{8CyJ~L?T{Q1|EFd;Qv=0x#hKQ5{wW)|5n3%{-vxU(SeGGGA z)bZH)CeQMuMjyl)?~;HM4frL7Sm!;$q{kSi-H z8QUUUcLM`F67dP2Pi|{Fy@(wo?Zjaza5Ad5jx=vcARsppwAnHrKI`}Kv*>sSdb)oG zAMxrKL7`-0smK4<3-Gk9O#u6)&CYgq6Vn?6m^*ag0I%D$CmNkCtK7PQU|F@U=+`9t zy_GcR@QruCSi}@y`ng>2@nsDPr}Q1B2-ADaYlH6hf3-tG-o2sk!^tQ4o}&oVV3l^L zjQW91_gsZ{T7v7~#UizHkd@)*fc!Y2&&byfRSx~IKtj&flSnD?uok88S$GmjC635M zB}W%V9$io8$4meV7Akgb7nEEZFcpKUp}4L|*?{D9DDBror_}*Oq$nYZ#av)BrVy#Y zC4lAgx8GnBvNm&XpQ9F)+rqhlUq@SgeXEKF=C_jB3^LV=q+5OM%Q)=-nO_LOT}dAQ z-uqdN|LA*mdF`CbAOrvG8^ z$bn(7MH@8)05yW4CVm7(lCt0o(&mGRF)BI-x>*PsjLWFr1}fcwWDYKwxw?Y(@_Sc- zIeb+eUK2-t^LHbykUEl*$<`HrlC;)4Vf_A z?;1apZ2fA#mW>u@zbW(r{&2!A|69SL>>Kwgt~UN#l27o@Q92exOXu6D3o_{4Q^L;D z@%%ruB`Aos4t<|t-GC{H3}ZFl?Wa<8rOq|F?4{9EClvEFJUDbo7|`Y%$KBTBVcmfR zE1WeCah6{vhN8K*Rdxmufb(EW<%^2)CPtqVEg$-IC1rSp@%)-#k>w!6%u_;1DUI@n zCM4)H*G|0K_Nr7@5-C^bN>CpxhpqMLhkgJ|^G-3`=TZRr17Av8JQ!@TzL3{Bnuz4$rSfIla0HA;T;1*61erPJH2$=*7Z_q9&nJw}K7*ej#yC&@uN zJ7Fz;QHhMJxZuihx&8m@h);#jG{ENd8pj&(*S=(ZDj~4@;1~BxgtBH2GH|KPBJA~v z3;vx`RDq?Z%W)!{dQNZ$c}^yh*<4dSW(su&K)HDjaLo~#8GM_aZL(W0~$r>5u<%I@rGl*cWe37YBSTsG}ccOW>^Pb=o|N~>RU$LA)bxg zR4Z^k-b7JE>$*60mK@(r77`|=CYRjnxzKa$3bdk#0 zKm+aKUXSO0EM+?%YuYl`!d8YM9`0Jy52)g4rw%zd5_ZWw3wA&8^cP5K>U&@BoMvrQ z@^49`=a%Mr`B0w+f0;?=F!C0?xGR!Ko;g+jL3eud#!ByGWBT$~Xlmq9_wk#u_&!FeaOn2O(0NM6 zIXmRYQTQ{D?RtO33oz?Q3G3Q`Y-)Q+MOO9~({7*~)%D%$LPm?yEmN)RN7xOLoEXSR z{y8L&&ZhA9d^3#yULYeKF>{)5>6t1Cl95@coln_oUF;et6(sLI;dt?D+ryagXv6ZO zbkPwR`w~tCpahDnG~3aMI@vvOnqqsURf|Xjv(l+E1m9661h4;a>{H~U%SvklS+j2V zo%eA&)?v}t7>9{M)iUSSk;e8Xr9U=X#xeoq&d#-qNMUvfIc&k?L;~58%PN!t@%8yp zha_b%aLH%4j#?l8{&AX6cHWirxpSK-(}&zDW&Jk>z+4!(uBGSIkkpfH;GLQ%-$=)2 zBW zKHMH1&DYr;4GXVDE#9)|*Z35g?{*SG{u}mz(6rDE*CO%44gPs*HJm9nqnsr^r;8-M zY^F=K#y$o#nd@X1Dy6ReH^(L0Z58`+NMOWdq%x~vMDlh>*JaN1BGu!$s&aWg#uL-% zdA*Tb)mR+mkA~HVO~N`k7FYH(4d9RWNk5y`T%!-t2hf0AkIQ0OG=jQKKL+lG``9#} zYdnF>zn;)OT_jX%Gn^r!)hOwGGfSy^b{B-GZ!-74$g>u8*|)G}3_?hHn{n5##fVk% zzvNay&T+|fTMeIU>eA`C>#xE_?%P)hMAqT^LRrno%Qe=Fv;beET0V^}5kuD<@j5QL^hu>q+9=8Z^ndL}FT^F%=d@?!jI55zKeMo*Mu zn0~cWV7t^J$ne!Oi%`;1<=?HDUN%>n>IV&Bo*l@@<{>CqBxmqUWR z0;j&7`k#U&^0mIa=%ypC^gCH}aOvbqwko#`_F`4IAW3i+e)$=bA)Z*+Ww zO7>)4SoQH?Ilodx;{3zq_--qjq>qK=G z`(!_J5@{lxtT}SdkZtXfJD-;2kDA5& z*9l7IQExpD8_a(+)>zGrZ+0A~{zYQ?)-9m`8)Uk+M$s)R%Xq}Jrh@q{(_HUB*X-Fh z$;Dsn=0kff^8q&K!Hox6_fZBId+l~KnmoTgHc1$Xi{7#pH`B%);ZwOIL z;v@Y-rER&yfyfa}1^rXao|l~X*X@f`eH8)6J?mSs-6-GLY_ptXOJ6)u^4~U;-yl@m zaz>6QbnN_-_O`wf$kL0KZc7nTUAd(1d+&T3vw`=W!tL^pt985qYOaL4 z%3URT7=v}GOEBI^#>w3xvU-xLbTcAQiL56~rV6`{G4pUHC2|n_LJATDEH~fY&S&4Xe7XEB3OwdZ~r2ftPMUHE?5cB)g zB;etBd-IuTDbvbwwAGWyBbs7+JsIAWfq$tk`~ z8fG$~f-JwcC?8hSog-hiACx*gT-*xAP)Nj$2}wBGcE5_M(Op1kl>i$`wcaFHO% z?u-t{UV*lzkc{2lNtDWGo#DIvr?tbPdnt@2XWL^g4Bqh~q2|9CG*c9|tF*mO&pGdT zDNgVBHTVSmk(fPOdaI&>*r`sA>$*87N>sY0j(xC%`kSK>HK9d2nc5CiifbfQRq6wO z*#jOZcs$nk^Ag}WnQ8TXRKk3OG|G%5`Xlx10zUkDw;awKsDnv>8@ecIxKJ<>lZ(9w zSyz=zDMW5!oa>NN5E{x_ALbD}<)Ejj4K~PRg5wiTwRXR9^nJ zD&IK!m;&z^9*#q;*n@{7%@4Bm)FEKUcpGQ5|5=p>vW2&4{6=U`D4doc_WWk)wpe4RII9m@9qPZdHl!lXsBV$ zihBc=3f(5g?IHhUWr+6bepj>gCh6SyhJ8@p4?9MjGGiweBz7ZsoUG)1jAta5!_}Xj z%z(drLwId~Iu;o=A4l;DX*uTJF7y~P1e@oKcLi5Q`p9f#}#ZeF5s z%6?ZbRMAk7`qPh=L!-r#54oYskMJ47CA~hi5>Pw!;;jX6CT}OVAS)4uK9Z9MDaJAO z$e^AaC(Vje`Vu4+M(M4^&#Qux#kSjX8vHHY93Pj?df-a-ehRUSi~v>1nsL^pGU5W0 zsmW%n^leC{VuYBW!##QGlFb0Z>eI zzS2={CzNsII=OC8^ZJr5oseB5EPEUl2gU;;1(>~FhDKsX=A ze=?$&?DzV$58`&IYe+`_14$v&`m^~`Ta*}xUmN|*wVBsmi!FP@e1FV&Y}75$WDx;m zj=gy{LV7BA`GAZz)eRO%35VI#*O3Qg!0E#i?kf=aa2_N)q3^CypWLWst4Nxk(16X0 zkSce_bnkKRkBfPPcpj0_Xu16HjI{=aFyLLa6Jp*Ow6%FxFL6tHF&OB0jg9s(7qh)( zR)))0I#9kg9;|ezuXG|SU5|SyFmCZa;rF|4qmLD+j>D;PxS)44lQp(1VZ?V{WKEtgA+?%GDbT0^Xi#Y*UH``9p>2 z-Ih^|DJj8FebK76x0vke7e`KOMvLGKzr`PVwcj)CUUref1r$Zo4a+H60EV6-DI13G zUS;G5YvsN$5Yt2Zi~$Fr{(aU%!T;SD z%6M0R1Li*zNSbj({DyDe3q983PD-XK zHymei#*cl?0|)`mpr`%7i{p$P^62HGh()oqcm<7cJx;c?k{MO#>PtPecdA> z&5l>_$gNjw=n-xhmghqVHQDo7C;*Q{aU~FB>Im;u)1U-N<-CnE2U1fs>Krgs#wwlC zXW+VV9>8CmpywJgAwEkZe0l`RxeSQ*4QbAP-O#aucF8nRfr4(KtEdY!BXfgx2P|ZohNW7(5$IO)yuNaIm`vY*_RojBiBiM1)A|wo<1&prevUv)W0?NOk zLeB-+L9*rYnFmfhVO*jVc||d-PHYLvKd@?(J;7!0k9P7jqZ3~^KDMrA%0eu1^arz7JczSq_DH8AQB*o+yUgcI61v&W~k)F0|0X z&Q!mW2x`M}?3`h@3`4r8IFFSKIc#w5i>M@tuR-M~-05w{LiEzsbp)&ePEFpVP2_&j z0eqdE;mcCxS9CI%V7^k90FmIiCLH0BEpOn9zraL)Vkxu0HvklFfQ*P#qkZ_owLGxI zBjCB4>W`f=vSlwu3 zre{bTRE7PFksn(maCYrC24pB@$}=P$dY!v{h0P}wCr$qm!E57tD&)H+>JQa$F9;#F zj`jaUKw=WqQT1`f-@K0y0~!=(R9Prsc^r;vq7mJWLD57=C~=aYd zTC5Hhd#<@oBv-aVV@+t?MdSCcz5H1Bp5UnKdyng=SRZd?R8)YFZfOB}v`65_?wV)? zCvtRbT-00jyEroX#AGOepT( ztz5pDA@#40?k|QyqtxI<#~eDysPJm+NJ_9gI2DJoo!jh79SutLIj4)%Ud%&C(Fq+e zxgh@7w;KeL|9eH?@C_Xvj&%`=`V-D)qPABcNTL(yy$?Vq5&z;uK**{B?4wNJz0o#B zgcr#lRI7+%{WaL)T057gV5h%kaFewie-uSAVJf|9PAe6<_qRsh6Xo7!b|Op={Jj*K za-u}XoJYE?4`j05qPG%CnMlOF=f0C;Baafe!Tck&V0UNnp|_!a8%82UMxV%UsQWuE zw}NGLbza_mZEk|V&#P#~Z*lAzPn3HGaz6o44%Q>0#7lE@F`!{>D@Es>=s-tDZ(C^a z7qxh-S;#IBkVm-VZF5mMrrJNVqLl%?%72J|p^~I~8V*x)H<68z}{^0SMw- ze)a|_lE#yFC{R1F-sPjiZ;DZ%;l;UN(oi-HGCVzsuoP-CoCtui^1Zc;63rycFyok? zk2@+UvsW?G3A5N6PuR(e-4EZmyUN*YllCi=$3-7(9OOIY8M%dp8g|k?8pv>7&L5~r z#qtfhL4c|_`$jWIz=!fBTdqvV4Hm|nhjm2lYCgk)omN$Gl5vB;wUEQ|ku=mEHDD?Ts*1GDLZYXO@qY_l10_4ZH@uUi`D59dy? zjwty*TY~nTMa$<2h=+FxkspoFXC(ydr9_SqWSQk0uM|r_hRmimxg~dF*De z2oM$EyFo+C%SU4_?@?Bz$T-vF=G-l=|p3l>aYBAWpjW;e_Xrf5T8iMDBG} zN354_hwgIdF@KgAX|d6?NDC#CU4#ylR?R8xd%;qu(m(Ovj?&>wU!VJ|2hh^J$4;SR zb`|{x5F3KK6YyjG1=mobC^P5gh*>09yIExd1lxhR6o(UvsP6W=?IuR@fA~TSpfa7c zDgc>njwTe4G`_F;sIoz5f3!SiTM@M(9yL9>IIRJ`Q69QXv~ciqR2WpBSFc)2=5GW= zQ{Hk~#w(|Qkm9yvYDd<@Cc>sbHQhzW6upqIoGt{Su;qYde+Ff$woj2F^DtGkSfyD;)xBg zpn3Wqj9;#XGi&Ob{zbfE<=N&sM5AbwB9X{pfgZJXlm- zDQtyG9L<(CfsNJV3`3OAq0h0XlTGp;b|BVqjLK?iHHmIei+>{fznMfXUe#=NlzfS8 zI##M>V!RXGn?KVsFKGH`or5{v`8u2B4kmhS;-ff)X#b1PT_ytg84Hmzwe4$2z~In_ zo>!$+`iTNk{+xW46K>6pg5O)2O}dV!q`n7*VTjjuG)Q593GwM7%qd z-qc~_{&7Qp`9VeB*vVflhXd& z2)UgoWkQQ0ll|M!?B6_3H^kp_k+OSvP%%AHPZ1Speco2IxU*~O9^7m`SlI0yJqRTD~8I_toP;&YH&wVapCEVH#jMP&a+@@fMSD3 z7yH?>1lBARRx90{BLiA0)x)p%XN2@l^8=@&C=m)bi#>Fr^3fu}_UK2{@43;BvKOu< z*g*I{+_bfbzb%jb^Cxag3?>JGf5~D_d}1c`^Pt7jvXCyZC+a z;H5xF(Q3u$$JAl2;L7%8o64pI$I3CZx$Q*HZvWG38|V4hOWI_kx)Eg;{vFya*K^w@ zsN0I`_=t`1{$#~m--L~6o%z1m(c-*Ks8-buMV;$mP_mUNB)yqKAbP8Lbx#FTET#WY zBs(Gcz-8}LDLtG)LuB$}+ir*HroqhSFUdI6lYnjZAC3(v<}o$GuSbO%*`eD~?~36*Gbx&Ncmx%}wy-tSb;`)6(cUuB(z z6;fhzUlGWR$KKX3-B3;QaErazigBT!W%I#5huS|aO9x_tZi{_i?;-b}XN>DcVjb=G zT9v%FT`D7^8O$bzY+g-nhtScG)RxW~Tg`AR+{}%*#ApdRn3u6ks`GsK$v#x{YI3tQ z{Z!=Q^kc!F@_oGTB76HyntSHPe;d2x?!` z*sm?#FQWg84ROi-3?bUBVxz2e?PX^c+kySE5!JX6|KlQO+SyZnnp!JSnY|SvbiZ&t zQR_WiJ6k*Q`$2ePaah`^3hjojkXG#0tk8Agz_E($LfCStu~{qu|4;QzXR*+k*2QDS z(%>cw=(gErL_}$b4hO{vC-l_U(|y?HapbJI*~O+HHRv896kkCCKDhm(n0bF|GcsK3 zZL<>Y>26lA0IU5;5ZY0w$mm;Iq9s2V%tA)cO|0e8c*^K--(4E`W{gf=ax9ydkuDPq%JABPq zC%XSp{;2z>`IkpM=R1|P%5*N*md}*YN#pUQhDGZO)kb7J*@v z{p>}m`&Mey6qAJuEmiz z%;tyKNMN?JxGL)*cVtF~VT(1(#`{}#LZp;rc0u#|zOqpa)Qh2T9m3y*<6Di*gUT%qWV2$?b@!Q8^Th&_N(Zh!n*RzK zRMsU$PN!Tv%SbxsV(eMvqK6tY`M!*l{MlV+HDBkM>-{lzZZ|!Z%8>EeXW#W;Qc^j` zbx&yP7yH>S@99&OgCY6CJZ7hjmV1#kWt;dPwiir}4IeVrl+*iB*kV;2|1OR*@}HNb zZ}qT$+KrP}ajr<9VIRB94ULoe6w@!pqN?K9Ujr6+al0NVQU~cofJemoTWAQjag*fk zGmhQ~{k|Vu|5m#oBiY!zF|W7ZcyIHEW>z_Nluc}o3&*+kw*6trX3gt-cdA;#>fG^f zarV)4*4hUGYck%piBop1est;nm*9)$;bCO6vTiV+(YslocCy6+ha=4B_oG&TErXhj zVK8U-cb2=#y!V%$t43r$nwdp7LY4C?%cH`O-iPG+qG-KBK55+vExU<4DAQbi=(ZmgQZa{|C}QEx&Qj zd+l(XUG~F+c~HgfzfARZ5(T$*IthvWUAK1I_d+^YO-x~dkbPLWTYcQ*$JquF+jaH6 zGmPa7sZhxI)s>G-UUVP9-QMkHwCwLdbo6*IXM0pvU~rtLr8xW5*g*RcBFm<^x=oZ_ck~tdLnr8N_&rV-(z=qkkDg`qCo8*I zrKua7Gs(AYL?#>LEY5b@9z|?`uEcic+UNAK4NMHRy|FX|kUr%;yPmX7x9w0_ z;axh5)$yUNkY6X!$kk$dtZ0vJOl&JSR*~syH~pON*(=SofCb%tL7z+C@R@$jOc>?Q zL<_v|H)9BYD#_SycZ2bhzkZs;!uf(N&_H!}j_FilBEAQ4Z zRGo>g&^p^u1=?wQhpPxN~XyNkt9eOTPZ=(b|Zig6`hE)y@>7! zsRf;_drl%Vy2_mu;%rr;`+X__WO8Ire)(NjHd7c=9W&~TK1Qzi$%U=abBrOe^nsoO zuI;t4$wXX_8D$$W+Ke39=MQV)Gkd>S`#E41TaMmf(n%kpw~<+U<8oxvwp(CIy^ge# z=kp94AkGO35jgtWw)e4EEX}jWbJfS+Sqv(lL9pm--C)%wJqUwt*2;7F9{b^`mx6-A#!%@00l4l0P60$p01Rs#?G}(Rhz9M@&^!0iK0Lb2menZcx&eb^(-*WAuaz1K`jz%E z-t>`rHFVE7`W}Ub(qlXzPxKM@DDLz)K_)|tHOiQG(06!)6kE*h`9B7P?}KCHmA(0N zERi9w263UEb@HQQj69><89zc@Jd0?fz>3Ou3fzz=<7lOlZ&dKO)SE>zpG69HtLn2azU zdKwk~S6hJ&#EC(ne!77%vd&l|>*^iHra1{9a>Ur`WQ5;!FGvUxo@EXf;4^e4IHP^o z4&J5mjtoeDOQUHiCGHc3W4={Mb|*(QL&0Us3wwvBw@WGK}8Q2`L1g{sxQ40PUxq zMC$Z>ar6rH0@L704|T{j`Ok?EunIrQL_IqUknViWYzi_&LBZ&b{1iG@_qWpL*aQ&p zqJZdl28#`7DF77$2m#~&42n%C5e`7g%m-40GDR3r1OP|{9kA=>wmhE;VR7bOsG_k$ zzyKOy(oJ}sxfmEB6elxH1wI5x-OLy{-HXT$0W0{J4eGNg2%~P&3Sjxc+`83M?jUP=1)0~QUha367>`Xr=g)e8kRxPO8qco8rGwo zs+TC}BlHLRy+L{@Y#ytgR|ve~8hxmf9yX7s-}LB3om?@V=u)srzu?)UFiyHrJ!7k$ za>A0}p8et2%vU`!j1z{DcF;%k8Ae+@Oy~#tin?R`l*mG;l{n=hh7>;#A^HPC4N*Wg zw9nZHTs^H2A&pc~&|P?iXg3?9>x2=R)ia=N`O*T`lo&Wy9NV^xzQ*H49dtrqe;+k;V?@}kx&`z*`p4UyW(WSZ{AAO}E zT^s{?1~u)}XG7*R1q;0E;RD!bY%A|%&qU|xH%{*;_6@s?oT0a9lj?pjpp$$in~Vke z3B82Q!EpqxH0nm36~7d<%jkODY?=w!ACjlyQ0QZH3WOW{DlTvW!Cf?3pkuG64bd0a zM#XzBIude%03sxMI5GmDMi>EyumA>TGXRbbM)_dGod>165kTE|6-5VmK|x{g_&)-J za)dyT@5f99qlp6K9t`+K3 zJd}rh><-EhLrB|D@)${E0j0*@C=UP*!A0(99}@!gmN~~Umx`U(jAB!-8<=5&!?xGViYi- z=@PclV0`t|3Z89m8qM>Sq-v(28CI$hyL!OaeJ!Vb~03?V$(C5-` z+BW(LgH8XUKh!I46F>?^2~x*9z$Zr8mS0G?T|bB`o)5lHA0da3Gz_nv8IJKoKSD|% zVoJIoBkC=oU63~nmyK7(lXqYgAqN^J#=C>(hQfpjndf~0vea1U^ zpB8i>cm&H#9(XTx%GLZQw-gU_KKh=%QSuK46fcZD?NWlLCmdln?Bg<#ZJpfM`cUP7 zu~hQpW-BPzE#yoIpgv!>IijHVk!$oGlMN++)Je~k1@Aa6s3ZSZ`PTPB-oO=Poi?FM zu{-EM>dUxm7#BP!nSm&47@Wzpk|&$QBA@CRM%OZl&^BPpkZtgSp5oo~3mDW%k@lAo zK)le{F5a#0K)V(sYK865dvu#|c zQvp(}<4qsIAr#X%HWVjLZ?6=34xoL0CPYAIBzle?1JB?gFc=TMhtQ#9Q1)&sogi%( zDm_eDy<-3w!9f9|h%u1-U-N1pJ195)&upLj?PJKC1)Q%wGX^0I1XeXdTn5nCt3rexiC|2N6Fn|z1`Wzs+5kUG^2_XHVibrR% z^ese#cVR%t@8kb~lJDE&s>+P|Y7Pq?Rsex<=QETnN{aTPoNSLJa>4VJylA^T`Yyt?8RFdaB(4Ob0o=`)EK~lwyEU6-<@LeWCEFMA@8GA5=C(e25 z2!=x^gcK%oN-U`-vWv`cpL(;wl^R+MCEo|z^b;hL_c{rny|{w!Gal$M`W}p9%t@Z- zx#~ech9PsjPy3M1Gz1CW(Ld--tq+A~GCtsl_N!-*G0`Xs?_&atk%IK_6GLYc8lKNY zigwU;@W5EuUJ{6~?t_QyL5Ar!m9<>+0NN`%X{((QLxJ4U53IOVQq7p6$J7RC6a&oJ z=T;*FniFO(c2JvuPF0&=FDyY0G#8QYBafQ5hOJOcX`#Q>Mj*yr)iZh|q#a)mw^ga3m(#Q9} zCi;s-H|j~%{?d@M9u3R8HCGQ=R)Wqm!7*~F_2+Mhv^pqw56^NEKs>qFND74b@y8!G zUP0amP8It$F6eV`gkDtw4Bj~9MKO(S(GYts$$w6H0P*Ch0MWt9m;o1r4rR|kGjI$f ziVWhTN9WjXbG$orI0TP-?HoQx!yo<89~mQnQ1O2|c^aU+;~noXY@ho99j;>(H_91- z(9j{@)v&5ABtTGfHll(>oj4m3MS{Yhek$N70X$da1Y(GpQ9%B5ro?-7CW?UCxr{s? zPa)?~>H-bz2kJ`O><}$v4FM!4Lj}?%fb_q*$(gmF6BvbEc-QqNYxGN!0Vn->Uoopc-{sp%6}_fBBn!QBN_XkbYn+@hWnrCu4}= zqb&dwuxh9Q+0hv|69WY` z?%~~ps}%R#N6sq+yh4bn3r18umw13U3l_}VWR=hDRm!xFKH&YxD)?q{29cxBFjhns zbm0Z#z{E&BcZw0}%2+U-c=Pm#OFXP#hW3MdC4lG`yt+J-&$VA5k31K>V^20QrhEVH3W>#*5~9}BD}4q7(4387^5>uF99R`A6uj{MLryp68aO| zF_sV(j6FL}FsWe-h*Y_G`1E(knf8%Q0Ko-#q8{Lmu~ct6*aEBQS!@M$A!>zPpb+*{ z`@pJYdl3=xgHB}ZoLd%AkP}WZ;WKOiHc%rV;9AKP&xc%TluGRwa&4zG*%2GfyM`z! z8KjT69~+GALoXnke2z?O+JN>KeT{q}m$aR+Q38l8Yh(dzFc#=Kdm$MZ)5#M32%fcQ zf1o>X3?R>p-%paMM)ZfCAr9&1clsPz*Bw3hT>BnQpmv73AUm3pQVan*ioFCI03yT) zuO6aJ3?F5!3EKdZStYY*T}JO*Wrv_adKgGNLH4W(ARr9PVh}3+uZh|elrPU`R)l~d zSQrJ}21XBRSLN;8l7#!1IjC#gxqKX>2jQ><4`JsW2tMu7ydet8h?yCM8HgGfeJ;vC zllYyW#!IJ(wHhktd(7PJ1ZDj`OW;vv6#4}MObE*kC1dbtA4GvXA|<|ni|~kZMJ;te zVXCJVrG&DeP$wmW6g(VypgE*Py_$9%nNa~c6s;O5j3R)iZ+Hf?Q3wj{q)$<#6cmlV z4|&7b@h-+#y_6V2`jht2?{+`sTCv9(Wvz=nn0?ZA$OHeUUuYA3t0@W?Y?MB-p@s+< zCOMt&a?xKp=Bf-SU{M!YDCyHW@NS-i!BAWgT2gN`3ZGmc#)o&Qk+Mk`*ul%C-U5gX z_2GRwL2+&sp&>aY8TKl12#8LmbOj%mtrzTmq<-`v;}3DPS6J%83hiGE5&DMjB3BSl zo(<**+47khQPmH~ubuNpfpDr$)7&TOszel=Ft+qLWSYK%-0^-U#7t};Db!2vrB2iX z15EoM@^~<{&3NZ@Oz2bIt(d0Z=}?2I6D+)$=pFPQ&!ipThw(&z=^3<;0x-$*@Eki= z2q-vg<_8pjDLc}}hUnTAo`d{q>6Jy1!PCk$m^s3v!MBb@6vB(v=L7fErPZz8} z{^%d&*GCOrPg!4%1%nW9OdOzdJWcw?A|K z?i?rkIoZ?!gF+}t@56v-u4bk@sNLjXr}t)RlP$ZMFyppg;ZAL{ixV4e^5d-EZtcso zx1O_PYGwkca%vEO#Y?epDae)qb5u|v+@ZeyE`p33!ds7Jxs`y|^2X@f=Q_nkyam*hMDZ`Z^Azr8TSzMOS-Ylr<@yRL5A!`RPs{@;F{+xs&0gWEfu zed27p^LIA@xjoZu6I}g{b2YSEUpfDF-sg6Yvo4wH;}-JJe%tB2&N}2;*@?6{`+T>) zbK=YSdp6^wpF3sD{yyF-!e-3mnIXGvU*yD)Tb=Co+vA;WU7eW8BwzOLd+pzy^po9& zo%-DE|8Dwcw|2VWem7Zg>qkCU@_|>x?d;o~bYw2!$VmX4XZ_mkal;5j`+~FtdofU^ zvER*3=)IZbJyRXCwG}(*e&>64(z!dyQ>J$AX4f;>M`xXOdUqzfl?fki?{L<2)5W%A z>W^%7)^RC^LI9ltneAuJ|GRzP39ftne>U~lsXlwDx7+jf`aZXN?zMh9y))bT??-#~ zTIWn{->EOM>BC$q_bO}7&$I2fZ0~h@hMi_%pHSdtICiT;HgdAlbN2GAZ2Nb&d$WB; zHshCVyR(()z5HK4CuC-y{*y^Q+@6;!C7XV-KhJa@#LR6Mgx$t8(>t;myS?1M({r+Y zpYwnBQr~Po%l4kV+_%^JvuXF;duY#bD~A#SE|y{`mi#TY5_HbIbJ@dMESZaw*c5Up z_C>MeYbg@IVkwqlxv%1!3GWn&Dwflxpr&x-`S&9U(Sc;`siltbJrC5rk zz)Fz--bcwMe;}LOf?_F_LM(-fpZ#k0acq0B>|ZJ3r?B+KL6jl^yho5ZR}E*YkaxSk zD5S-bPvs!+b0-V@95q4ODS_Or?%6)Cs5c6$90-2yq~E_AS;}Sn+%4kgzDkh*I*J2@UyYM_{rB&B!F2YvD*bOUAcT&mX{VJJ~1wReZ6Lr(E5f(iPY9hFdP+sO;~)v zuvGa&=JEx?;tz%;7>Y`yw$6N)d-{5NWnw%g%Zm$gC4qTztlMrx$KHX@A;_2!hFuC8tw86A_E*?Bp4{({`R<-Q?wAsV#f zR`xn+*tmULE?vAJi}Q0b9vhRMo^B%(;3pidlRzkH@Uk605vfu9G&V|GTdNEV^vh&? zLRMFn6SjBfUM{Qd?JVfaMKF#T#ytKts1gI!2_Se_C2b z7NukSv~*8hklvX~(l>WS`sc5ji{JT-|M8vHkwt0jpEmdM44%a^d3Lm}UV6H_Wo~xH z7&T`puCOeYC2KOq|zCuQ@} zq};v`H-E36jmg#JVL3nFFRN4CGBeUD!`=1L*;FHqQNJ;Gwb8J&wYSUoL|o3EyI?#Y z*|a;Kj9K2{=k8rY_NJ#MrL(g`!qHl(Qv5_(B-qp|(atex8~{H{(m8%cdZsT(-|Qvn zPs7jU1b!yZOS^@iaNDr>>pR68Y7}oEVu)gWLxT+T_sP=2yj-`AP}Oq3WH2*+(hHNN z`GrO4>mQKDh6Y3I>cZ91S|5>6q(Io?>p`~>hJG~)eXEtQ)^lceky(Ob7H)LdaU51ygn`>zCTG~x-o?`$2 zAOJ~3K~$xm^Bum+J=|-ab9zIDm)6a*+eViq(lIK&Xsda5O(-JW-CeS@xL{^~u3)s< zRxHJG(D<=&riEb4@&P|LZ>-DQ?6h>Ww;Qjw z2Vz#+F11}TL*Dw+@N+wfpPOm;8QKv)Hw=EplK6?G@N->yXD%9Y7-}0dP6>}cB#~&X zA%tg6ucmnjofx=Z{6M%?SI-#2S63UAXpK+W8iEq*Yc!Lj8)su8SEfbQ_lTe5=R4x( zLR>B_4#~_&oAk7Xr9KRP5@*p*P0z~u`i)&l@Nq2#LjZT0Z4o+JT$nQov&vs%W<(Ia z&WSTyWbgEC12VugxUeRJ^H&qs0@vC-URSN>teI!?4mE6$Lh68*ggQ|-!etm(+n5y< zda)cdcDCc^ZrY>?qeXbdTU}#}M{Vbrbj8o687qv>q2cHBhB0b*3?YP`ng;RtYoxus zO_rAy)A9*-Qs}!)7*C%$YeGulP|y&s(VluaH`gzBE=?tj4A-?eV}v#@P0Pl`DMQ%! zxq0c{t_`l_bNCxWXAGPgwrg|7VB%ryZV5>w=#%>TI*G+5Kfy4sOug#9y=q?20yn9!P}0XwSB?Q(88J_h=v>{iRIwpHEA1Lkx=WP zc!G6O9S9juyb2QcoFfU z^tOg26sVG>re;}KTuK}3qTV%r1)6` zKZywy9(U3+a7I)HY9$a1$o@mNMh#Ua(`|yXi^{6QnSOpY;WkjzQ?St2t!wgQJLC-h9AM-V(qx_p-xq;Q^?x zua^p6jhWq$H(`v#>a7GIcJNHxE7(XF|kw+fAFT zzmJPR7EA6EzxlaYiAHOsqB?By@E}$gt z<@Cz(w)Q&>*M$ogrMUjfWHf216 zcw0g>K^cpUn-!DC-H;s@;>X|Q^o7C^sqjZkXqQP7p;$t>xqzSTII{7RAcI7v$l%ILkW9%T*D~Z-J2+TGPO+R0iry z+vaAbkF78k%h4BGPMpMVYBDbVKu{`!4bnU`FC)ot(aWDGQtWI{8 zv**s6mB-q3={QP~!R2*>AHu|htIK^MsjaQu z79OUote%#-+FFU$cnx{FLwJ`^EBLvX-ZlyFSV7((m)g(9lRKJ+i1b_Q(FPRgu@{H(}nc z$#aG{k=v(a>e%7Onn)2Q#;Xp72w|61B_dMnU~%Qj6{)YQlSt4b%ki#+7w!6dGQ7Km zA6q_;1AaCXKj?!S3uXm!cXLPr)m1VUn>bc>_kn!$T4*6ZE*gy*rEZ9y0?(Rl*|VJE zbZwiN&0kIAYn<7T_OTTy_eUiX!H}Ix^@sLNt_owZOyiPjDPbUl) zd9k|a;+W!R`$TF@29o%hyeLxFJt4n+<#+PhD=*1VdyUA(sxe%4^10J69G7dGF}paK z$alK2XtvS7Bj~U8$<*}Bu`*;wRh<1{FaKmdjA_T)=_PgJzGfFD+iCG0n3I6UR@rM z#z>V!B2l?~`HHKo6!k`C{M=Z-ZdQ%r4P)!0d?9|BY)*pwCAOids2`MHm()n8xlD znp2*D_^K*pbfizFr(-fX6_eQburx$GQeX9ZIXB%YvcBjVQax&ew6BJY(D3?#ER1(Z zwYOaQ2L@B}aa?knjtW1VZc|p_HLGPwE66v;gPZqn;>>Mn9$l4}N<#9cCnUWiqcSo% zDZ}we=^YspPjx`5y=5k6P8TBOHGb9-Tgpriw}{VMZcZJ^Rl9pE31B9ddq;bllzIYY zg_227O)B^_!9B*{yH|kH7skMOgVNU8;;OiEK^TkW=1c0~nVAWR$46y+eArwQ6C*M`6PJPhPN}Kdwb7_am(Z<{j#GZ$Uh!kR<}5^9 zy(wjN1Mg<-1(h?c$s7-9h%&Pgk#?O?Q zM6qhPxz=aA>AInGF5%~ad;lM3i&ps(UO#iH!14_vp!o#8dpC5N-?VP}CeYL?-YTEj z12NZxu~?10O*WEe4i64oM#zsgf)w!KJ7Qci}n z4zgqlgR=!!S%pVxyT+2?-o&bSH`&XVl!@5tP3f7rB)>UTD{oZR7@{{4pOn7Qu@v#+ z;&(p78_3_4KEH&jE6l% zJ!S>p_}R_8^IGh8xGQ#c(;SyoQtmaY)13WT2#UN=i`y8Fjtomld6hXa!+8DjaN^{g z4C#vbw@b^Vu|8tFeoFRIq|dtS&+rEJbT&y%#VfKLYjzC@=MxFEy@7Z$qQOdOX>H5d zkk(;`d^u*Yq|$HBsV)@!jGwtJb^Y`5^Vh2+*wC8t`YG|_r+wM~8=an(Xj6-vDm`g7 zS0*H!&y%Q4#n1YJTt5?&n(A`t?(WSQ{5)`+!Pni@DW%?;#EgFR);6!-Q3EGeu2f%W z!tUx#8CY18Q&l19>}by!VJw!z#ZOCflayE2nouaYN=~oeQOoUq8!s~fI5+fMY<12{3^_+MJzr*B2MT6uBWZ7>Ricqd>TJ|}SLTIQ-0-uxxnT@=b$zEHL<#xGKm0h27xErx z=$5imB{DWPC{rx*hz+HMd$)*R`jzet95Q)=@yVD({3X&;S89~Io>!W$MojlWlbagS zs*p>UE+=JbGcWaq8-8xwSeL3QpVYJrn21U~MxETYNsFDnDQ^Zl<>eBeA#}qNaYN|b zh@bPa|Ia-`6LIru~4Nr}XPA2mCGI{;7A%XgHWO7O>s{>LW z@|xAN`8bKX0q`@nGm->sWB#pA7#+Rj+Qc;zAZjwGk!?4}8e zReHRJAlQALFUq{oiW`2`u3k+Tul{M{`O8P+<&Zo`tN@ZbjDX&OiI(`yu zVpILnvI=vkK5_HsFiBddgcH4(Eoy))&myIG&1A=A2~8=H}tr-3N{n`GcS|^i4|a%x2z#@329hTGe%C!w`dt zN>7ml<|FxAyDF#3E6f5QC4VXh`A+`K@oqKMGBZ2j;>F9J_+=!4u_2k6iA#G+RO+jK zmm-1rYQ)m=ny$^s&2tk{Rau%k{ot^T*kR!3{P}ZIa;m~?F~-qng@7L=f4?q`NM)$r zEcWOdy+88jP6EedY_{V*Oj~k-%;=DWRpM$w><{OQIQvFapLFNwKXX#uawr21(OF?2*!(xurEg)ZHojhE-f3G+dRe*1SftjUbrA7WeM`9iw*M~ zKm2523!cADDbn=sD6YRxso*vDJ&Grcr`{ zs(tnR?U)ysB!O+sVQCJ$Zaf(UW5m|x4N?}UJrMGji3H*atPV$|Hs~?l<$T*>>CO%$@XGSAR92iy+i=~M$-F0kY5V*o zKMRFIW~Y8lxXnlK+LuB+i77)ZB3aBw|dQH(fPPC*xiUN$m!``sq%W#asln1 zxmeul7zhNUwtKvwCQlP*Z%ak}ki2@zZ}#}R-vuA{x-ev9YFbWJdS$4qF11;7zT@Y1 za&_?hSi9NjWGC6oO9Dty^2Z4UWz|tLn|E$ianzv6*DEaykPHWx`|D(QXdrEDa#@iV zYH{MHr@PDSlbP?Hb9-+~j(1~)CYwByljq#(<)Fx)I|&>%8%Bq`Z^+zG-8K?<)Q0Dv zjaYo3S;FB+N;Y$O^60kcgH6)?4P6B_d5WFBC6V4)`PCa<85*D1M$8V1{JD`peh!Yu z=k(1?B=1fv2F*$0$*3`aQc~fQmF2`X4@DA~d&P;Lx!D;h^#n}9y4!}X`MP4Uf9{IBRZ=Dc{hcy76+2Y& z=SBkcXR!PgxwOzHvQ`*I%yV6kBp|t zX5JA%r+bslh|4RzX2li9Q`sjJ95rAH7LwoH^|L)~%bzCZtm+#W@z&uU(VU za*y=QTrv}=d?kMzYq-_6#8HrCzOXbkMw7?84IMi9b0dKe(f;0csq_ABoAJs=BW4>j zasq37<*7XabCCpYU-5h1oRdDduw57Cn~t|HHhO-kBrK8U4jDDayB$9HbCN)FY~19O z)VFqs-&>X@;E+>}#h-rOLCF)SgR|$L(S1yW*|#nY}VeC&*{#Lt4J~ncH$Q+#_#S z>7tLZBO`xqB#=cR-aw6Xw}g_5Lh>I!8+ZY)&B^)s0r6FN<&GoAd%y7WKrWHL$@sXG z`)gCKcNNrp1mJO88C(&llkwPC+L+~nA}`e9#Lv*+fOx|#+w%VMQ8sN4b?3xsIayNT z8h$+r^5-Ob(93qzBoI$rz(XmA=`_CZ8u?UGK-~O3Qso=2)Go@XGaTYdJTYFSO$9`%9NDN@+!v``G2NTyoM! zX{BE}JDSa+i(DXoZlPcnqzn)DO2qR!xpjUbwMled8ZZ|USReMv+Ow!W;5e$kOu4 zzT@Y}37|Hnp`qS{842g)bLi?gud-xpI5U_qy*+kC0(dm|u|omum)Y1qlU(?bzxZ*= zW4Luts;fOmp7)n+D7d8|DE*BU1r`dPk@Yh%6QaL;d&5!!}n{(blvx=JOpt ztom&qKP$g_vq}aWd+_BN0ZiMAFg7lwr%L7W(s0_U;C#F`9r)>K2}xi7{%*;3WCYM= zus(l4+G8swpC_MZU-`0KK*#uLsq*>FNfY*X7R%w{hqAe`A(dXA^h{kyrB38?=*pgm zctcInP#>0Q(C==mf_uALq&fJ8nc3&-ibmUrr9xR(XQigPB6Z&BQF#IFcdlQ* zCS@L<^gD9S^BF(7=ijT9jZ)LtCZm&6(w9S_-nGI_T zVb%PW_u__h#8%`~*{RfK&$;LM%R~YR1y4xSUm}a6jRmwIWXc$9HubHoJ-QSUCw|)7 z+7d^N7J&EMUieWrupqxZSuG=zlR1_5mkkLVo}7|X6_v6w*^^ihl83mtvkgCqTv|3* zZ)s`WH~bt40Zf5#b5lH3)zUq6KFxb^)F3HdI~!oes(1RLR902X#>VY!<610-gP$Ag z>r(Emmj1c?Uor3W{#E#+(%M=t(>b>ABjaU})cE9>3=VWjL-ilbUSFG+@;9N~jRfMo zSzcZ}5)x?R=gQ?vQs(ui_RGw7{MdW`{kE)D>e{% zjMVrm<-)~F+vGXt3833?Z=Cg8D6_A8GQx}*X9ctMh&`r75_q`By#<^53j#k|tA1}t z+sKlXSCq>nXZ=E|a-IBTSP)WIQ7`&?(uFN6PM?>xnoVBW=GqkscHK$amRuHrnaxR zb4RMG14ZxOG4}#`eSW#KnZB~GSPmXPw{G5$iYmX^n#UfOe3d!d`&SvPleX4|_hxGe6U&C+V6jJ=tCob+m5UXh0|94<}3K}-5|3fI1miEj&ZT<1uV7AZPFC27Fo~l6~T8L8(*^`xW@05 z^&2p)HIs^b#?R)ZX=`7= z1?g*x$nePMec|U&37}T8wY5cRyT%g-*5~o;E1$2eoRV8o-xHVS=4LatjB(Kec(C}X ztE-cy!P(@2_4$tQ|0>0#_AIH=C=OluJfm@qGGTd5~b~;GDUTUDpdt5&o zlbS%aY;10(Wc(m>hkNvCwP2!8dg@0-!;qW`)XLb@)YjsU93XV}Lj*Y;q&gIlp{_bJ zsVEfu$kkc7yfh@?P|#JzbBX}k6}x@wrg*A@1(Cd-&zC)J1M_QUOmE(&JGxkQ$IrF3 zt5WH!F=sR9d-D30oLx21f{N;}ba%DN)Ku))djFhWK=v^l8R?h$>eo$J$5!(BYQXG$ z&06aGGB>|)pp!=%KNrrQl}dkP+nK-ltfMtu=eK21Y3b=V=jt9;@1N5PI5aUKZN2>x z@KvOF0P`6?o0q1{q8GV7C-q^UoIZ1Io1EvI2T;8iGt*O26=^Pr@KruvX)80&Y?z~z zrY7TQV_hu!j~_PQ_SYviepdYC|BCZ<>589~@`{Qic^b(Z0%$J=IUR3H%LP1YV{;gb zLFQxa(%jOLlJSF@I4XX6dwV3*I+$Agk7(l&oSY8gL_@Na3fPdwpHKK^q7Q0fs}mj6+aIgYWVl|E%Ewmis9e93&aMN| z8#aDMhKD5B)LT&af&8_NpOu$O12Qyzd{_SNMgj-NC#1qtX%P#E+V%b0Zw6wHHL*G<#`=tE# zU~Huq+>*w=De?QO(oX)!mrDuY^z?+ZGz4U#J6KSwfic!=D8~0+lKl~(r5r0j%ppH&d&$7S1QyLqhDFT>J zBrxRxoQz3tPpfp+mKMZ9kaQ9_Befx)T)DEAF7x|PwsxPmB~|`VTKW-b6oo(l-|)9f zsHx3toSd&7K(i@yOPfh2&`qK9J%wV^T2UXVsg@fzZ|xaBhe7};H`cF<*B_F>g)IR+ zYLFDK{ZlpxWqMsa{;*uXel2b6i{;+2qkVYg(nawEA~IYcdzYmq7ArTU+!vC*-VT|Z z9Lrk*$nRrggHrE*LvEiRmphjexlH*^05y!&)f|%P>Dhe^1KapHb9z-gHT9{(2MPs0 z=;Ys?ibzNQpb3-aD*>c!odZMS_f^VW2SLhv{9K;$O zCgFxN8xm~plhKi3Gv>vGAp3`(zP?_Gv=0|V{_K|b?}pj(#_RRu)#_h&0yreoGjVB% zcw~OKzM!^)f$W}}?URQ3x_#9fHh$XL+N8cWZcZ-BcMtm3DNQ#e+BYY!SB7LXng6$6 z1W=!2@5i^7%YMdwc>zZzr^HiTElU$!1-GB(;&`XDwzlpWKL_psbOKNl*pC_{$Mfvn zHJ9sZf>7_}N)ia?Wxs20^}CkZ50FI)wjdVE{Ti?YkQ*8rrDb@&;EsQ*?HrR(jsLzD zfarbp8NBJ&kXd1z)x~!+Jm-Eql)4{adrL${+I zTq`%t%ogv^*0qtmtj|`tZkc?wg8mI?OWn;4bJ_?S#h#*BAyYHHk^$g$(a zceuDGJ|>g#QS+<`$Mg3}3Y`lW0QAWMm>PBk@T?xP~XEWFQ`wzKOW>PE1J8MBH56$t&^qg!v!e z8H`Vw00u$%zI(XWJYynmo|z(uyAZ={7J{^yg&+$BgP%L*XJR3Uy`g$e5J1YE%?$~J zBGNN`u^A{!ff6U1W4jGvn~*2Nc$7^Pk)223}ACU3Z-y(tv}-ibh^6Tbu* zi%*Osh+dN5O-#mQY;sfvM*F0DphG%(Tco)qEcJC&QWq|l+L}{R8!Sy+fs(|}np092 zDwq0NuQauU%st%OKingu@e%V(oeN+!CDzAkkdcxBjA4TZIs5&p41U=Zp0}Q;Y*P{L-Ho2dwfEg z1_veD(<9Xl4N@5lN=2ndO5b=>N`CvYl>XvZQu?1ims3CePbvHHPtA4er$3X@pZ!8g ze)%gY`OV8x`sQ0w;jNO&Kv1gd>&>&82M47G5||{FHYv=O5GFQ+j!ScQubD{5TK?|^ zc*ik;YKZ#f;-$;EM*!EaUlXrCY*r-c2?j?ElH4PG3BpJJ7{a%DOGZ|2N$=vCG{;X% zuyfduxYD=Fr1V$6mh$iYhj{+=D-!(l=Op^kk4wX|&r8cw&q(_dPf6$F@0YGepOo%L zo|MkV-X|STJSA=K`=B&E{UND+{+}iEiBF5~i!VyWH@+=pKmCQ2{_YK_@JGeh+#~g) z^U^tYNru#`xO~%)P}>8UDRgXpUs@NBKO)!GuI@MLoDhHn*Z$+(*DJd zNZ03{mA+4XKn6bkei{7O`()^&Pnc`)V^7M!$KNM?pL|NXKl_YyeDQf{`SQo5{+pkZ z$PfQb!Y_SaYTo#zL<1$#(BPM@{x%t6!HRknCzTLxg^!&cO4~~qiw#M=|4q5YO5iJn zwGz0eH7t`;)BBb_qWC$zvYc3eSOEF6il3pyL>pf|6_&2Sq0|asoA{-Xz|k=ojE$!V zAKto_p#?WIy>-ujO#Gkwf>eC{o95ZP z15(L5c{gO34G`Blx$iavi!%-ytFk0WpQa`Pxv_$0(i+7 zuv!^eNi4xXT41DyS?$jc%dn-@K}jE>+|}FCzjR%i3lT z*nDsHohQt_QxBeyiFdwNhTr|DbUpe$X?XU-QvLZaO4;{+D5bBxDV5P?<1Or-zhcNJ zUP!!ywr4QCUlU#%Pq0odoIjf;1I2Rh_*qRFu%li9yp8N15O&mnky~2k@yWqY{7jW2tK* zdD)-wovEZvO4y>rv!<~_51ugZfEd<%>T^>5jc-ZGZ+Sx7;Ac^KnLtfW=N`_M^+ak_H+xwsygrGI4Y-DP)zddRF)SUu%@PfkO3iP7Xb4}| z=bw|Y=O34uXC9UXNFG0*eMIJ-dsJpW^q9=-)5WuRrXh;Scg;R?LdHM*nDl)5X=(WS zXAB7qSG^&vo%J#t8%%iyQ@Mi{5sXj9q%K$@m*#u-ycLYSF{~~i$#nx}djKZ~o29q6 zFHQFEr|2`rV`IrJU~&mRR}U0FBg@yNBYs|9Evu1%7(^*O~oK%$lOksekU7Z$h(bK z5ij9056jTU-Y3mp{=nK zPPQnM9U4!wL5Vt1x2`8XAl0AyqMZEsFQp<7kjDN2(-zu9+i2t9L|nX8RdQi|Ae9HW zXZ+k)N-V-U1|C7e+`1Wbe6U&i`ucN^08UL#h`*sLwF&1zc?|f;Q9lq7JbVg9^;Ymd z$RDebfBtGo>U;Y=8_P`mZppyXb%_p5OG#;^lz;u3()jd;WXzDhgokf3MfltScR!%J z7eE3={!cg=FC^Za&BN+*rlDuq)-o0GTcR0O-cnGQE>@yF` z;3wWM_22lc1Yi44X>6{Mk)&5JPX6N5xHN<-WO=;B>;<@+!Lbd~&GQo`6x0$am%bLi zF=V&S$Bj|DeIcH^Ml87qWOb@Xnwy*UO>gKky1Toiwku|~6*}n2lWl*t;b-=;sY9qE zCck;B%50m3mwP|)qqb)ZoDMF@YZWyz5|7L9cwG7?;u7iXl#?e+WzG2!zoBAgb3s#2Xlj8CD1b_8isf|?1;7Fg$&Cf_v#3PHNjVS_{&1yzt1lBo$XI*~s{jbY^{_vY3a?U(M zZZ3&ztfu8e<&qK8&7jZB^h#r6Lz?XGhyCg7?2x*iiPR?02ZbMSVDNJ~VSo56cILLR zdy1dAt0FJGQ7O-U^i#5OON?#WubnY${4i0g?Vp!7Jz*K0o|a&1o4ozI--+*qFG=sC z?>BjOYI`zz`HuL?WP|vh$v-4A_1IHV^}>tt_N%W-u(ef&r)R|H56E)7JC#C_EeVtx ziz0GezVhN{60U80zW=kA<)1(O zMfuWKzia;X*7wQ}e)&6@zb5jd|9VZlbv@EDvMBF-=!AUvTR)KJKlyp%(O}o~`>C5- zo*$v!!KLel_`UU;S0(s~Ps{Lo9y8>L@NT9&ilYWzCLr3gGk`ex&|@Z49e>veY5u^o zQu5vZDOC*}Qc>3~@riLW_8S`;DS0Ro!F$6`zc~eD+R|W<1L?C6Zzgxel4{N7r!QbGnej*1UhXG&W?#Q8`3zkBELLYDW_ilgZMu4f()K` zGHH7rNwYl%9bMX28|1K+w1qYeop?fgpM60}-gr}9D=C$8v;87B!OzxSfNn%^(>hJ# z7eD&8eDmMGAdf%tZt<1A%Ki&dRq~2_<`W+_*wRH=If&3v>5=z6{k)tPkq><6VDg^=29Fr85~b4 z5);0D@PxE}@Hu(yTi=mreZAb#eITu)X^JFp@A&EK?U6{w!4N=Q5T(WnTr~90h_A8V zcrna`>N8)Gvv)<_``G)XG}t2H&T;vN|M7oG^U#7Ji(mZr@5t;`@N@aT@q>O~8>Erd zn^N5|EU*3IN7DW;AC)P>yw5x=v(M$0r*A*VAfFpg<}(jV_vfFJ%Ab5ydYdYZ$IiJS zw9^0?@^@=ldYh}|;rF~t)>cO3lmGmz{NcAhF~2|Y=zHYCe7}76>o3Z0e*S&q6(p>c zOGZoyAbDH$b+u`-zaRDoqsR$G2SETe?2G;Q;V*wL|Ia@@D6Jz);%n$LpZ&|%zi+PP z8zTSsuJ=f^J1!-GX8FJWzjqok_~ZvaEZ_a{ODX$vFYizNp4>NmI#LQ3rUKndLzh65&CSUs8$E56ymyB1?4hQEF0bGuENlQyh?h!y%VcF*Z?{^Ze zZA9>3Jo4lR<-0$5$;`T5KIxO^KluW|5c$OC|J4||*3o4X!dkv5#zXip39#o9VXnO> zh;7O8xcpadN!!#}Ia%Qo&lg{m!4r=siJ!IN=@`to_DTdbS7YwMht2A($m?%N(C?S{ zX61jkoLHlSpH9)s8U~*nw{>2Xr$)o(@$KNp_tnS7t`N#kF z|CHao^dtHFr#~V;BP_hJnwth}ZBEY4_DN&I{)d1&I@+baXX_l`gTT-5^15`z&&ub& z{7rfMsb}R^e<+uw8zNu*-cO9@k8tnfA9zmc`)A~JPt-)Iu8A0&eeAO@n$R#4sQZ~X z5pn8WxGLq*W-0ypH>KyX_iuALS127mw<#GuHWq-X2>fOB{Nf)WEr9FX{`J^=y|&-tG7KHu}E z8chk*`8Q##QevDiG7@_uHE}zHpN}uRfuFv)$kxk+w_k%=b_2?yD_FnoX5HqWvofz04%1V(ok3nfyT-S~h0%YS9I?%c(%nLdj5oGz<@HJUyse#i(0NDm=0Ka_yDPB3YpTz*~d@&1U#aH2~ zE<;x4dR9`#-)Llt`a)|9t|S2rG*!c5v5JoX`n>IsS6G&%j0I;vJbhD4&D*~B5OYf% zJNX9cymy&V%iO#TCtiOCFYY>k9JwAfZ39dtJpS6-O#LIkQoIwFt+k+?S8x!`Jrgjs z_Tt9PJd__giZ%*RUAJ*n6Ti7YNQBp(z8S454ba(zNB#hO)fUJK3en{8%vu{MC2)Qr z6lIiHvs^A<3ZdwqMs`URw(U8H1IJD>)sNzu)HN+EUg_kU7nr+>5~wQb+8L%^dhIP_ zZQIRaXepzyeo^=dsph)oE?ocZ8npWkqMb@VJeL9ImYtBDe+T|OGXyZvgl)NrAd%gM z!!M#!SA>TxW=u63;j1b{MbXdjH|iM)q>H|=LLs)~D)}C%i8flX2q3wz78=7eANymktAobcxQzIDz(SD7yF_aEz9X+N zC7lwaNQ79IwvmxQ!jG|`6U7y^$lS7xd87z$s-$97rGy^{=7?w&EWv$A-4Sr!&=bb2S*V-)yK_vh1RHP+6HGKl3? z7qUP4m}OUy;aY3p6M~R}aw#*bLvO&eKY)>zRz?CxTiZ}2D}hF<#pL8$2AYB!#55{SNf?0hTe(vgmJ(vyBwFx1#Z5Zt7vikGa+siXRrQG{W#HHQ11Q z{sNqtTSLZ+GX1D^ROXA2zWWY*`{rM(FX;*3u8nXV--%o15==B1FygAjw8w-&hZfbv zzrt2oz`IPNjTk+4H|S&}kAHl;8v`A74Bu*uC@d`&6@%{uJQ9GuL7~FOWp2^)=TiqTI!lpUzO?hom8&6pQ;*MJCz|yJNQ;Wl+utA4C7c>Fg9C9_XOMMQS&mk4vq;%2{DdBhiJzV^ z9uM=u4|ktaE^7VvkzG^*#nIzT^`p#qA%2?EwxIakb7(uTb=4CAMZEI))wG2s!v9i~x1Pg~Bx^0NEGu-Rwd7Ryv&*q80Wn#w!l(t6Py!bI38)r67 zYuWa&`_E;f_>)gCV6VcsQ-={p6`RA3Dm-d5p~qAXY4$a^?FP2yqRYfYZ>$)8!sJlA z_@UzOK{zcMcs#A*BY;DL4^S*uqaj=>V!7flg!dz|qXdt|nhP~v6l`m0AHcQC*Pz?A zm#KdIB3y&uYZb&`P>*8UzQefP)Qm~5j}bs3e~bvWwgG`4Zo3*F%g^Us!a_H2$|W3o z14aFnSu^`(ETm3J7|V$t&LC3A1SuESe)<`v7kAC6nzuc_5t4K7!gF{V{NXsjRjmN- z+YJAXbTqv65+1m97qI4&3bjT^PMv1L1GjN% zP2$YncoD#+bsHi5?pqAI3>XcQzfq@-&0%{LCL2PJtMhNL1d$NA3%OB~8$Ur<^=0Vr z2gFAJCnv^HqEz!iuFE08FV~zUyZ20>((T8!ufGkud^6Xy>K91>H>2&DbXZQD!oAj3 zOooXcM*?XQ37qcmW1`&)wM2qyi)Ge&Ns++F<1sum2&qy7SLaBC;++gLmfK3@XvK|B zK1F@z7IdtOjUN`z^IQf>&c22E<9k@2-L*gfJGQ5z{)5*r)TGB)Llq-_90{aJE@6rb z9Imf`zVK%>)+i$iMvKu%J=uVTT)-Ax83Mu1xDh}OKX+~qKw4J8N^>oT0I{6diBK2A zUZwS!#N+ z;D>Wz8?*}a^$#q_o3`u(kozKKDh-Q|AUQml02pn&%IZAGzVHDW(?T6F*v^X@Wv|hl z7eDD3(6M-GJ!}^~#IWCwaRK=g62Z~%EyV_!6-sC;Ld9Qcq>@7-@k3*JdJ3gV6)V$1 zBrqxQL&;LNCQw>kkG!|uM$7t5Gs;EO#);49dnO&qldr>i>Igb_rmyNm5ca$FZH9MS z8r5B#K>uYnBTd5aI>4pr98JD|?Hfhhq2B*GVc zpK}Sj%Zni^%Ej0~3+o-6Y$P!BJ-tlD)RvcGcz8rS1W;(utEzM`xB`5@tJpypi~Pwg zE@r%#?9PI1Q{WSVkO*MYQ|n>>_Ipfrbz`hG6#FNf(S(rV0__?t%F4?4MVlglvo}yG zwU#9<%{N;x(KFh$MePua^)?i}_BxCAqq>-nGhSreI-W^G#nD%wd*c;!?O6Q;(7$gp zTDPacbL|^UwpC-)Rmm%V(Ik-FckA%bV}et04HiuOIJ|+!j70;r$m!5F%UrVCRFa+50jz@4;u{3 z<;%H$xfwwM?I9A_R#AfD{A>*MHqVLy6g!5vDga~s9;nL|c=+&fbff6fQU){I_~1?FPC83yp0c;NO_$iuNQPoI-X63;`pm*&?zwO(leD$7y}qh z0!PDffe#yv@aq(i|K*9PE-mbMF#1Hk; zR_bd*_!032D%$N!%Acgl0@=$%{$?k8Ja$9z{6@I4wnO^fxm8^Y(6=|70la%7Tt~N| z$0WmKvvF4Z-&`bcgd>5fY?#9&Fj8F;y8#QJa}j+^7g`HYUELsh0YaGYK{0r=R4l)QBgowf>A15oJpjYR@S!hahg66l^Gfg^pMFbNbtepvkCXb^2K zBW$$`s{yzoE?~}h-@kVk#R?589U;~oSoH3T$e*Idje;|8z`O3r%EelpGc}kpP_ySC zZq>UmC3{&<{i*o2n#S&+Q@EG}aP78rL(aMLXj`{&7Wqpw=@QkXV?r0Fr#Ha* z<~a=cIxrEH{rfl)I3^^4on0&@u%fb(Uq5S=1PXuq#P~R5@^U!lQE)ktSuCLBv#AD(!fFDNy=OTd)#WmRV zl8DxEVsvHA6oK|buaTp-uRrcC;K)*BD!95rF|=aD4}VL^DqSPEktcz1`))qwFGcL2w0ZhU$J>_7dC$UK~mQnI{1pjiCe*39OSBqC!=|$`eJ`2ow{3h@=kpHbSjZhC`H}YWN%)kf}Be=UUcj38iB3j9H%JD-}Rf|p!;Rzm=1O_ zA~zrMH&=Erm55PEBxr7FiC9Bxk^qK(yVL1FxzQ=QI3{7-5(TYSxA)`vSKpwCHU?3f zrvTW2#<1Z}K-PB!LknVvMLP%!b`k5z#+ej4c%Xjb>C=S1$@bE202$ zUuf{beMm}G5gkDi4Z=w2eTcaTZsZoSbo)@yZ7Sw(ejPwEVA*#VeGP6*c|-Ak^Hl(2 zk-!PBkJS;Rjv;*m18bH93h~q5*9(b4yR1F6mx3SaQb2`juU)>*ilnnTnTsHQ(Il|- z`Aw`NNb}+Cd>r7aB7pls@qf;@j^UoGg6{yb6cR{v0tcO1)-mKkw@Y+=fQ20l9Mx(x zHZ{jR0fZaedjU~_f-tfV zD($|CD$P(GILr!drs6K13_y0DcBxNofc3+VF&YSBd;#v?xkw-ti>8ht1NAOQB@#?c zPxEU@c)Qw1L=5D^X_P9;QR}@cia6Tnqz@|hlBdw1YS+G5aZ5{b?>v)+vR7Y+`SdY# zuA+K?{O{Pe8SUHC(D36$jJKE<|0CRKi&xIq(&WQL)@8!@XCICLT~o{_Y0rp;4=rHO5!y2G;3x&^djgh(i}{peU|4 zTT;q;V@G?Q5>2$k-hPx^<+4{#qfxJXZ2iB5lE7hm6>AySqLD!*m#}aJF>Rpe``l`` zp=t@?6DzI&-n)B;xq*d&?1=zjwCk!i@Br6;_>r}EOYOcEZlEo!{7XGw{$;TWU`!Gi z2%;c9R%OZ?wl z^=M^k11~^`V)GO(H&*iUt9;yFD&u#)*M=-Kt>1)#ufGnLe|dcUzxfeB-K?aLs-he; z)agYN56Fd2SoLLSZSy7v0pz}1xk?RlQ#ag#SipoCFsioR6LMWqkHt{ErPS_gKE|2d zPumO+xqmX@RV;5F?|b{F)NpuI3S;j68aTQbieTZMPHZ2A-u} z6v|-Px}B*PadlmVTP~6txcrsVFrGQiw}ngQY~We$-@kkk;r@*W0pxBc8uhqar$S}% zuPo!1>lBg*B_qQ9JLrR2DZ~8-gR|H9GT~=(VgkjbN;v!vBGz%DH%~Xe_zIr&Gn=QB z=jqAU1|Ju{C;1Op3E|L7jQUMpG)s;1_nI`2BZRMK-W7`?ulH3lZ7B zOC^7?;sL2=ut$>{st=ezSFq51)zfA}r2x;%NdSfTsWzJr#h=@sNkjE3ui;*6 z8zu#1T;f3hqmx3&6|5v(PTa?h?|wk@`c2ECUbIAo z8Wg{E4$hbNBDgDgi$e1;jQcjDV|zNBAD+fglb$dB94`VG?Fy#SFb2sl80e@?NLH{= zxgb}Xu|kdxe_&bNzp?N$(BFrmQWc*~zmglM+2Vr_lGA5d8IyQ#o>uGRH-*n{gd_6> z6kqxoW3CzU7cT-h8iNFC3bNsCvL=KC&fq6R04r27-0JO{wZ2750BH!D+pDYHGrO=A z0$~IIsa2K12K9l%@yS|TgTQRE}kkNBY@3D+^Q~xQF)ywfGg<+7P@|iZZ)DzDW`~ri1odaVMr!-=ZY6q zpAjF1!s5dfxKiT7g02Ihu#iylhy2(puxm^4Fr56sNL!r9-)M}i;QnegN{ezMHcu;# zpCLbP2OLnV%44o=Q4&BJ!Y@g^feU3yGziMUtP}xcu@{{quy))<_Ge$BRnX@*MgHao zK$71{k*VHy7`?8BxFvtgCo9-eRt}eYCUBfvTWhU1a8apxWmOD8>=G4xHn#R6@4^SH z2lR5rEeVrBXzdle_a2&#Y)2polR;+GzfkQz$6Lp6w?2N!AMGP5U1pi z(RpMAQ-Nr+G!ON*sufKLiB``|m2$MT&-DIX>{xLENJE&CUs>B4uFSstAdFToiqr<^ zcJ5_?q^a18#kGE`{mU$iBTe>?#cxRxm)WT@E#d2ul&CMWrIwU!7V*BVZxR>R;5 zu+~v4v5DfsCPJ}G6UdX5vDhW=O2jVlH38F6b@*kd&b^+LDquwGx1AYi&iOMYTbD=u zi{%Dp2_d!R(3f1sbd<8N66yujBOD)SfudB3NkQwkmB4SbQX*F3jOE8zsw0?`X`ZpRQDP*i(hx;}yN(-_vemgRuYGu^(4h;6V zp;XAZRlOwqtSAAbA^fs;ZV#Y9rsQRKt{>uZ1CTPWs=Wiq{pe$~2`a9qc3%rr|90(1 zx7~s1u=*FT<-78Qvrp)x2rRV!csNg*@EqQjR3%}A>R(`I1{`M&pV{8lisCZeiX>A-tA8aXdn)v33F;rUnaun8YuvS0F01-C8Y33) zVWSbY(gN76E7K+}8b8%l3V2#ty~Y--5W>DmfQ6c zp#mN{jpCY1^(RR27?GSHm&P1*~rBS@ycL!uPdz4k7!`e_{3OQtIC#)W2slpg8g}EGj7;y5d**Wpsfmpu8{# z6L;E{RRxUhnscwy#jAfyiTz6$0gTljIKQ|QuC5VY0bEW1aBjfV0S*uVH^{*KN^1#}xx zEz5`7PQ{^TGJ=;CKchkD)FtrxIwIEaQbxiEpzsISYHFa+)iNpGxeOqTmfvLt8!Gl3 zV41(neU%EneKPrrX#19d`rLfh_HCuqzi1V3((A)LcO%N=@->+eEX0pNuZP+a&Zu8z z{50K~M3G7dk8NtR z6HNy6Ta_>?Z!B9zurO1SKI2Zn8CUfpek!_}Wz>^rXgR!4!pvV+_ZV`n-h?ZCrsGs9 z^k`w3zmijDP+zIw+rF)Y`ZpS-0*=>HMz9KHvI3@TFDHJux_{lRHBhNkam7zU2p|pN zm!F=Vf<#&ZTl;N3D>$AY6avuEHH@5}enI2JbxSEMA6xqhi@$-d3-ZBK*ai?=b{Y+RPQfAduVxfXHNvft1zs0+9(1}t2+ zOsyzJS9eds)xYR2LR66=Us8&OuF(iDRDAI>$YN(J8-pl5^9HN?mufn&K)kQZgk|e4 z6korBiDjz$H@W~7kUEc46y+e;S{usCtQF`L!te%T2Wx$ddfE4dlll3Cns&sf52!^_Ttf2ZAtpZMW_z|qJp|YZa zUrTFM1#EIR@B!`1qN0c0R|;zbRELfxtaL?)aBkw=z^<(A$ouF6c&VsznEZ(;DMYAD zlB?Qzd?&h0GQR7_N~(X+Dj*TS4qXxKI!WB!z>%)sAX*%H==A!CHJeDBM&qZh)`rpw zE1LVJ7f1*Iz1GLg%iPuZR)VO?;Hp5KV<4=zG- zfcA<~=+vcrVd!`gz#05>!fDaKT4ReleiB9iV}Y=;vVyhfiKh|ccXMF?<`*kq%X*Oy zUQYq=3FI#-@uTLapD`KiWUk+_1du-=0c5V=b|1>6G7Jt4@oQ==5WrYUU|CribPjLG zl@)LNkOJ5)?iN`>h|u*LO8m$~WA+a#n)vZJ z0?6V4U6nA%e#6*+C&HB#H`niA2S$3EAd?nhVj?nOE71fn`a8%Y z#1Hw=6EIQPmlaI>7<~)@WcTe=P!{H3xPO`OGvvqJU_DApWV4Exq@c^I0CEx9`Zi@0<9|?yq=7+WtQtV4aSqN<4#K}-|{UH>Ys3OZs0n#1`Ulf zMP=6#0TkX+LRDU&6wW{-ZsLI-O8zjl^`Y?m1$deJDzW&9ZV^{_?mTKv9zy4ibWxB% zUzF>&V|yCx7tdg@QIBzsfUU6mcdld*yW$!Gje1@MT#5mUY*ydS0^~JH3A{ePXw<*C z1PDr~$}K8EL-$x*UBO)2w{m+6l*e99d7l>H`n7J^iNedjvXU>O0@rV12%s(^8N@8h zho{~Y(H<^tuHPYY{T8Cz86LUf2n*!H9?cK*C(Vu~b0nK+@-MLZeoTMqNlGep))AHHz%REtOq1i6A6Hf}@CM<1f~;0t_hz(kTjVb*V8XC@r4>_xY^l=b6Hl3zB!GM5Xfy#0jFydd58#r?F)CP=q z!m3xoR$I4h_(?bcj0Hlgr5Ys_7I@+S!UzBsm4*SB%D$Q}04eL&xh@m-?A(N8{m#n` z?DatP3{jD0C4~LWpVaVMsna zkIr2gGjV_kAb}Bae|t8;y)O$bvdam{`kjv(n7)&-Dw@4kGW%Z&U8yd0?8KRP*z>3>2Jx1NMrje!mGMf1@$n zz-2|b7+InlIJ)FZpsAXL^~|+SR~-Qi{kYI$3Wb8TiEHkgT(l93h`$IvKwc{TVqwZk z+GaF8y#eOWzr?6Nz-s-8!SyR7ft(wdY65y%XR4!%$;d4Ch&HT`9zH~|R0g9fz?8cP zBen?qu+BNYJ1F?z;)>V)TWCC>^3~U&I(KGPJfJTD ziU(XI3FNYWo4UuKZRkMhE2o(Im&^W5G z4i<@@aQ1ImZ4=55&or)Y5u;)djt4Ay`#emqzl84XX|u9}SBm^`C12`3dovXG7gd5K z(d1940#193@KqI|-Y8vEHn5QV(JhNxk`lLUmWkwwST zGW_&TqF7^$sGTVm{D_tO(RIeSZ7&M1U5<$R6NCCUDo_DA0_f4mV9}RHw1!&@en>%l zc)uMbl6>^`_ANVpL_+{$fslFy=j2OZ@3TnZHx~h%@cJ;+?14%y$8-`Ho0Y;(cULEJ3Z$s-9A1ZI3K~$-vaMrsb)}q+MGGc{NP_N)ziJY~G6XIqe_+g5B&lvKq z<-nCDp704VlRvW2wOQMd{pTNWx2_TsVWmw>70{20 z(oziExif1mt(6fAKdmhuP7q7Z zLKT75v198lWPf}SO-HsPxHDr}NZ>5;w=)Cw6T1=ANigLxiJJUzlZykSaxh&U6CVdS zfASZ~ShSl}sI07-wGNYk{BcA0ojLr}SS=`0R)sR_7eE5J@S_U1AEhT>i|GE5Xsn2p z{JGP&;QA+@!e>^^YW2pIUlH3J4tE7HNb?YAu`v~o;s6&!{>FkZSIS|ow#*7+T2B0k zjsVVO#G0ELLnN@9BY}@k4B;Mc>>7oktrya>Z?R0lRQ%uL$)9EG4m6dk@UU~H*t0PC zLu`{Hrc|D$&18nfYUS5WG8vxbHewEY9STa+^Cp490QQQ;02C))!G2$oHNXD}EA*RU&_lME*Yh z1Z}4BP{yxaNdCm9{*4Oa0I43JLs^7+TU9s?aBc;CHu>vBb(I2!aJi(F+&qbr0M2E^ znj77W1QNhlOyCo;gZTh%?j zaXYOfe(ZI%ObH}+@Vqurg8F||T>ZcBx@k=!5?H%!FC&4CM|Z}}9UPtTLFA8=zmAH0 zzTC?wkt`9DzgYDE>naQ8%mfxbCNy4kCe^ATe~%-9W|NUAf#eR3-bBrXpT^!v*5cH< zc_w~V%=k$NM%QJcA!92ef33#kA%CL+5=d>~e3fz-D-?4UgpS4!OPCrB!c-}T-e8=y z-c|xXq9uTH8L_q&4~q$Oblhjz!E=>};dfxYlaN(eV0>{$Dg!IJ!w21l6F$s4_A?yV&SKu-pMvmlo&$U!SlfnC4kfqaSI@R(d3UMe4N^kfUYR1$e)k|jyLLY->#lB5hS8Wt-yGZ z+p0>ZkGbZOeZ(Sxwi+w)OVlheghG<$5+P>d&&QE}vjDCQn?xHwyVBTX1Xz&mYu~gD z*T4J{Ub8Cc$lqxAdvb{&8hH`Rf`2T2?uN2`$yHogE=9G)ny|15Q4_$qj94(>XW7A2 zB8ChU8L?Y5cz9KF7hW-0jV#r zwzL!v1bu_j#hbsd8#llI z6FM!Lq$Gc%;qOXGAP;IQpqA!i{7x$##c=iV_@NlVyKN{dEri`sKWlxhBz{Cs0HY5G zXT)v~^rN6qf~vYU)-i<0-YiL;=B;t$UA~S6!47P#0+8KjF5ggxk7go&r{6%A-N9%3 zvY5XlB7fX>9i=$HjsWxu1#b2Bt~x^$ZxYzk-O1_%8XE$vV+bi3vGC*Q9zovsKce~h znFjXBXmrTnP_|&gukOns4zPL!$9R1h6LX z0EHJnL7T`Es8$Mx-0$~4n-0z1!^ppU3Abx2Fcp>Un=IsSR9Ftise`&G7x#N+GJ$6$ zON|9_zpDWgS!&vWTX zXTX*Ne4*aH8{vE|1LjWv=0F+0KF1wT3nNZkwy&5IKAxNj+zCrrIlLVm5$hy1VsD~` z1|P7FA*^j&-xMFW6p=w697N%#U!d*Tw4_X+nx%R_zmXBalGopa?EQD(+n2>>2*)CV zvs6Ng_uG|;#yuP1{P7|lxOJ?*Z!%>2&P@PkGJ$JLucFsm6Ojqb$NPJj-88A~@A0+QyV6`EW zkpRZRLF9?35l^O$CJ_((SL$9->( z06NQVAlPi=2_RD~hB}zrijqC3Md$GF$Si!VX7cwq{7g+wLakP#xLglc*C_82jwk_h z>UF*ZOfupp9+;y^E?)=L=Y0P|Sk*F2x%A9+n(X9ngzE?rE(H^8t>sI>a4ug`1S!*3 zrBY#HVlrY4ace6PBdG{rEO!HU*gAY(g>WqRBzv8B!5Bz_$UxWqfQTJeJHLXMF1aOE|DQ6Tw}XtcUO{)o=I4kjwYN zNpu>DG1+3qn5!!3$zL=9Y*gjITVKHlV8~_F$y`=trA4qb!T+I`9zs z)?1LiK{WtZKLBGHIi~tOlLlMH7FfUg9=Dr4EZ#3V(>GbkpO6G{wE$~sLWU|u02hXz z!3X!DRF-Ix_;^eC7p&gxt=v|kI*5@}taqO_-S;zkY6N)uC5K0O`T94e}&ZmB>Y6Lx7O9*5?&v23D@k{hy3?0Ky~g6 zdeSeMC?E|rH~Lf%h5 zqJ`D>Gpq`i@2G(Iao?Y^m&pZeR}{fhZ^CWA1Etae*lO$eb&=?Jzg0&7AE#zajE|w( zXv9^i9P*Q=5%}YJw4`r|O_o+0@q2zF%kZ`A+z0#RtGL_Rx++z_SOm~-vBG2uRa8$A zz=h+7yFW5K1cOe8%MuyXM~@@$)P_}spO~(yb(v^ipM}b!Cy;yYZKz*6ik6%oFy3Nf zg_1|=SBL5+{O+9lmxwLes?lC0K|%HmPXM2^8*B4-An()9VBfX}O;2rL8L&i>VlCig1|LWK zJWp*v&6e$``TARQ+Z`;{Z?fGRQvH&wzTaX9V4%hZgTcVgeTo3iA3Jm5r=htCg&%wb z$Ce#zZP6NAb@)jO7euFx(^DHzm-QlQE?t4Hq7r3AxoFeLFyXGkLywVH%aV-;8&#r;3tPnSU`xTW{GliW~s^8M^Q(ISyOW%IS5ATZ!@IIHx3|Gz89jN*2OLUmc%-uWP;a}CNUrGU7e*E}@L73GV^wii;{n00|WxdGO z8m+lifu9YVS%Mf{6Rg{I!}iU02-s>d83+O$e%x}@qoSk~%KV$~R7x@CuEHaak#)}C zh@e=>;9R7SZl{_J?04L*Q=?j*hmyP;G#SlsSLxw&hJw|n1s!$7X1K&SgvW_HcAnN& z)M>S7v)fVd%de2Vd=hn;TUkgFk*1LPELf8w#89m7MoMNIxq9h3ur3qE7j~lH+<7RA ziV$?U@TkL&NB#i1YieQ4$%XFfC3L7I7^~MY!bFN0DQ6s+5>By^z7fIXzVl>*krCQ{ zQyFZzSE0Rp8GeHac8wOEmX@T!&#EGT+z=k{TYY`dmCAvxZj1(k2w1GJefK>qdk(Vr zxVC4~&`v?&A~a^PfX8Y{ky^2S6HD%BcqR?jUHf7C`aAfmt1(8z&mV{&e#uzdZ?Ob0 z6$2O_{BQ)YBM?BfvJB|H#mWZx3`W#^`8BLN_rXoriNMbsVF@B5eH?z;o=$`7*>qU; z9Y*aBKcdrS!$jxI#)(vO>M;#}0KN4M(8(20r_lgiJs55GqQPQ? z^x8EPoqY@Dtvk^ATqes9ZWpN0iB<+%9z*)*@8ks_C9`q;CTMpbK*2{JLnW0W=xV^j z4nL-S9jqz?!%v5wg&*Cr)uB4S0F_rRp{XPn4{RDn1c^v-F?6vA*Gdz@kyxaUEA;Hr zhsmoBL9G<#8<$aa?HXDtszPPRZuP>h)uO4nIce~-DhVJB?!fmA44_J`V2hI4oDn&q zi~OzndN{9Mhvk*mP?xcVsT%Firn4BJXfn7`JF~eyZ^me4vG3@4YCY`fn_)R|3eL+{ z(c^GpoD7#gfbp>5S_`UQECSeOHp80A0$%dq+b(u>!BkepF6=~#*cuCVqPxxx`>(&j z^3p4?r)4qsFez!&VMe_8*~IX}+`O4vVL5dM^*6H7>uSJcXV;8k9+f0D+7>2)fgtWS zHp8Z=fTAD|Rni>z45h3H^rJ8tq*ywRa4k0>qyo+y>5C?R+~*VNwwqcM0rsW3NC(v z@`Fd=$k@ufQbIB~D``=Xv=mPq#rlj0>$*%>HgALMl~XAE(+@DJ)#z((#-ok^ zroAEJC$u+XQAF@geFN+zrKr4e8P=Su=&X=oluD=w$)JFAMY~<&NeD-xvXEmbeVmJT zqQQXM=5jO?XQS%MC75#a5HMRX;p+%>(F)_ordFf1eWt^Q*vG0TfcNg-M}=IDNv|(N zhQb$kx}Z~h+`YDTv}-Gvf@V2*42}((SONu82B~WKV+>lv4sHG7fHw+Hd{@Z)Fu8w0kiv#7~U6n8N?lZ>Q@B5y7!GFWN0ORF#%OS&#!$X&!vW zQVi8sFtSC2aH=V!4hmJcSY$9ZQH=d~tmltJ5kBtoCmMAas8yjsD}h#$gR;T`)M&Km zs}CtP{$_fh6 zY^%jEZ5{;81Q=GHgdblA9tArw($WT>-UxGU9;&YXhPwRgj0_IdRWR4;6p=2MAtKRY zE_E=rav1yZ(HM^p+d0CiV=CXI+sG?@{U#+EWw|h1{|&n9*U?a>!X1~Jkv`^W3;!-= zfBXTM%gPZ51|!yhn8&IofFq-$(8%R67bacwC&&l{f=odhXlz1jnF_Vve$Ujk+N^EN zMMR1lBZOfvMv%fMs2z_}CAb+fR$+yY(&wK^W1mSbYWfb=<0nz~)wgI-ma*^1;`;(Y zmfSIy;Yu_qOK2w$fdro#OT*9I`}a{PmxoA_5IbS~&>EZ$cCt0u*WiXnu7K^UZ(w=p zRn%>Kfvw?4{A9%yKdnNtM+%<+KZM=dE!$xwmH)dR*rti!DEvejE#dl# zHe_`Fp+7{T9yGVWW45qRld{4*R2Ju=UM)elMac-^R8z?H`Y=oiiKImn!-dRIw+`ct z)Pin?>^=0*`|6m==QWhVs>p|`ClMvOIwu`|rX+Q{8&OkLh0^OcSpQ%mT!t5S!I{395kewkq!4nXkl`r8 zmSjcD5TT2n0=q-qq1JC=O#Ak7r4-q~hp%uIKLwfowioX5^<%NaJeN7uawt4XR zG2S*ixiA_(a}hy?pFn`&@V>hVt(7|FBCfi61=ZPC&|I2_UW1$w!pVk^3dcxcgMq~l z&Qk2SX^$~uD2ntR<1PbF_K0*+i5g1g@Tnz?km|4f2E)ypa4E{rTj#)pH$+~E#B#q| zh#yh_DNLlduPY}h{eoNZ!kFYJP2{iYCp{wTl?gnsES}L$%Cpe2P#P+^a=$U4JPzAG-4vGSWb6@2)xj6MHn#FOFIaIT!HRe zJxOE0#5%ZRcYkmYnv#-G2vYP0N`N1_ou+fu5n%4p0Z$7WYidxXP@v@U6%>8^DN0Vg z4)y*cFuu5pg)LDGUJH@IXVc+(Hk}c;Cru)eMDkcD#Pb{BBFtoNg>J`QC=b5`>6`CB z^3^v`=H$Sv(ZcI=Vz50#ZkYQzyjFypho#_$i7;LtQ`Be$Cr9qkv zYwlI(uU&@z<_*{+#b~S2 z##R=eM`X_Vd?uS@^z0k57-;D^w(Wai+kb?;mfpkh&3CB3dL8YwQ?Icx@;Md^V!Eq~ zeFskI8=Z$*u@)!q0`>=BP>=z;#jkJbuI<3l(5CGC`*3{wJzUps z!mF)7m#r4}>AR6iPNa`weq-P#mRhmUH5XyT!;}6-?(q=m@-sr%?WkuNwl!)kDoaYB zk`zHz6jJC&Ei{zm!6Gk!O<922vO<<*;wUdfU3nqj?a-b^8g-TKY zb+H5ng%XZR9oj85xb1FYDj!Eir+lIF^`ze|G+-5_rMPo1RKF~RpQYI!8sifa&?poU z0>o_m2sRYqb4BfFkez)K@|RCS zdGuwJ9XbZpfg@1wJp}c>LnuFR1Z4-0LUHV6l)QQxvNzsF@%tY_^2L`Z`Q=xr@(W-n zD}&owgMiD0!FDerJoMS*swVvK;U96pPE7oSuN%xGN9&i7t^gy1J+?ZuR#d@JDu+2Q z4~CmJpuc_6D(8v`S8y`;^{H$&Q7Cs`Ds}KyRKlyN zfLE=7Ppx63k&KhCvWh*YyS5Iuo158d={+X8y4ZV?LP4KFpGBW3jO!DAw?q>zu}$vy z5W&}$%Gs`)TLY=F1pI`LUxh}4fqED327cT*mo@`dno+v7oZT^;-e zBg2SSOZd^o#1Er(BZ6y$5sos)yiD8E{g^A>^5|t9wSAuwXP1qh6dbjZNmfloUr=F))C>;+Yt(l z5X8161V7>5P3k(4QHoCu#oYzjCTFO*g~j6CsCjbM#|sdP#Scdad9|!9Yuk@!LarO!^XR>M z>g=ehtcp1IVjruP018h672~W`YuE*qbJN6gaS9FG=o4nNkxDe!l6~?3^mU-$S(Nl9<2O(#{49Q*&UNh&5;>tko)5uW%5{T#A0j86wp!@*`lP90mMj}6 zyTgG-oqj@Z;_1fTg^g7a&sjS$+6HID?+*J|+`>RxJUf!JUB7u`#GiOPPC>J86ktIH?(@ zV?d<{!T_X-`>7Hz@y8EkwP{OBS(a}qBw_Vom%~qWSvh=ue^R-ylA@H-y?fA>ltyF% zC;FVHW_*qTub}(e+!&j8tW5DXY5` zeeP3Z@%W+f@X;d{8%8l=TqbY|KdZ}tQCuOFun;CtrSKC+{3w)o(A2zU@WXY|S$XxZ9xY!5o@kD>; zo)(l-$Cp$B$g<$aXf&e3VqH)oh*+l(FLTucTub;N@<&;!>asHayeEqROQu9BzqMw~ z;AbQp!@3smGu`1wu*Q~@@w2O%0MZaPwKq|Q+bSS{!Uf3coJG}VV?|v%yV&H6*lL{7 z0qnY}s-y#;*azR#-s53?E>}w&Aou-QZ{sK<#qiVJ!wQS91^f^xX*ZiA;%8GM&iH9* zS(W&C7z;lXQqXgY{cWj9W62W#SF29W@S{~t0EIhQiUTY!DGAjj6JdFkX!T*P|5HIx z;jSxSu`<^j_ZSz@ZI;SlEh*)V7&p1sbDv57rzzaUasQ8gZZZKdMF8WAAL^;CmX$=r z0VXqkxYzirEv(435I|<3Ez-Sr1vZ8_&VO~f*rbH|(GCEYRhyxq@ zf4FuL`uc&cZuU4Wyge_xz(^qO-DiKN%IUa!4~lEoQ2gs9wiBcGA)`j`L$7CU@Yc4_ zWAuK#eN089$4C*O*U;zF-#C{=qL0gb07xVy*#Ic^Av~7q@^ajEHSh&(#kMZE??lQs zt!ExTon7qjgdy|~@c)0%*o2*%H?!C*+`hwy5)giJ|NJ8~Ik`*;B!fhl;qb$h4el{| zzgxZRwftk=S;-7rGZm}s>SnvQ>)(Bc zydQsJMv&f<9;?hRU>7QSZoARMz$i8;UwFLeSkc9mJKxC$!eqfuox{%R0g5qdk$fM43{c9n{5`kqOolT z1H)m?4}XTwWM()ch2!$qU$c!C89sU~J!X^?qu1_0_V+)q){bH%fx_?!DpFioSs9`J zrSKEK!Qsc@bfTV)vxxCS>)2VY3T=eCd)TJQQC`k)&{JE7%U^vB7uD3g)ysqj!Vhhf zO0QgHuc!57DlSGvZXWs^PE2|`7_n>7>ETqV7=8#>gdew7%ZMW3k6ue^A=y5gT+VQl z{lgFFcRC;2fhdv3Yc#B$H&j-kPEbB6nZ}wRfZWAwaA*kSGFhlMsK{h^e)rVZk5>*J zgf=%1-+k~QY;px&-hTj%+6r7a{W>mv`4!$hc?yzWegy_@BV*kAyU_%)}ZL;U-0J3C-C~QW9+rmul4z- zp2E@Hd)V`S{o)JuIFZjpAEW5W0nnkXfYaq-=Q!oQT0Z;?+_?>ntRzA~7ZrZOv3m!$ zZ)YU#legc7ORdJ?ox2!mqcu*X?959qp(?+CZLXgFw|~Re?_I$0ef#mwtFJOlnTw@( zAtMv#UwbX2kOw>2d!9OS1fRbB4z_Q~Vwj>33)*}U&Mv<3CQ}hJ+cy08@h41quPG_T@Bita7*?P8!ylk4 zC=7YAL==lVCOCIg{)MiIx9{AUb-t5ftQi6*bOSH6Eze3#B3T5OUq1f=f4=xJUd-Hx z&(EF12WQU0R4m1FfBYl#g+=)2>>Jqk;x_i&7cw*1PK=a}^-n*|c4>Gp$bfV5&|#)@ z&~EMZqsLHk`3eQ2AZx=0rcjVkD!pQtC%y%DrfREpNiy0-_*pRwF#^v>6 zFEMOvTEBs__u6S@ z07EX}+t|Ko6AFL+g~jHQqW+{Fag^PL*YgCDg@#gs8ImLp>V#I0U@ zc=jw)`pBM;9r)_}d(3uZJhzUig9mr)#24q@WzXNVem&4Pz|`^0Y3b~DVQ3hC`Sde< zec=Mz{15>oQb`^u>efVdjj-2MV}tCs%Q$`XC|*5uC?r;Nbz{Rb&p=;Th(5am-LJSn@s?^PA1B)oZL8xFDii)s*+je|; z{yYN*DSV_X{PDm4cP6cCb8=CyQZd6qz#`H|5`EgU&oRlI2w-J?KHfTUf`O5M^~Uj+ zA-(h)dkv`@Watj<+=&~1`X1F%8I$tqdytB8_NC*n$V%A#=nP}Axv$8bpp9z(mP`Ol zmcil2<#wZvYpW=-T{&mKXj5}=#|}mWNuB%V{r4GpBSpa^DTXFH2c9Y&2Ae&2apOit zW+|R&@x|z*3NY;`PsBdPYqq>^eooyR8vY0<|6K~tJDHK;eG>o4<`4qo?@g*=a%HEp< zi#EN1xq?aYBU`uOnP-_&f9>0ELmsH!J|;F0c8OS#EfgDm#stYKbPj7&D!7}PBCe6i zG!{t!AJM9&f7$IrZa$18aonx&KL1>SvF2Vo6`t`Xg2MNinx2NTq=aSuiK!?jmu*D= zqWFiu`%nJ~WjAgxwSnBb1Ts?e2$a8l`4#MCmNRdsC79;S2aAO3-1QkWSjI{Z+z0LpeQDM43HPY6GcQrW-Dji2#}2`FVUJ|sXaYlA0%J-3+m z=>Pt^zhfZ||M2&J&tk!8leG7R7nm~m^JkxHG?)qwD#%w4H^x@3B@AOnj)-_`c0}HZNMm@gEnPc zViu7)!VkHB$ZdS>+wWMC3B3>Duftr;g4#7XIc$B3QNiGnr^tm}PTr7|dcLCgskT_q zq&M(Q353`FM6V56uY?U+_oRkXJS>qta?N(zYVq4wUorbY2~#v_?Gsk0>I7GlmONPW z9Kr$NkMKjTW3n#~nwpqeNWYzMNd&N|qLL++5OztKr}rYe#l`)J;n<7|x|?vN)~KR%#gMSH zd5WFr?Tah|-P;$6U+THVp7$u&$;VPel*OR;qvr=Z+559pe|p`mUiNpf9G6(?pIxJc zom}2Y48UX=Lj3d%^g|_;M#Q#>5kKrUTvCFJ30K;P);5>j%hrAvKYV5%#m#c~>F${+ z#pLVYU&EKh5a5UY##~^xLa&_=Iex0k%FyKTuydMH&sPpVRIaM5xR}4bip~BoJHz28 zT+)c}!~wA*mF9El-Lt}e%Ay6d=yq)hRVzE`;EWi-yOB%-|f^vT6>#4&Xc&Xi~JoFy_eBOb7zsG?8aL|PRWxomk`o10dmf;8z$PVrj4sa|Lqt$2< z)h?!sJa*P)4d?l!7dh}z$&rS4k8IKB`;9_U1bh?Ohy5H#=@Lxz+C%RZrvog!$lbns7iE&-nQSbPEVR^|pL*e{tc2BOOL_n%Yc_p%PY*Ow zsi+KCYRRzz-97l*muv95BWC==+jYDG zSlM_F`PP2Ck?qCbykx`QpHibee;=mHw_$pOJIG59@Smju8VqPL8bzf7rsmuL6dEzP zM3PefR(M3?N2AdoP&3ouK7}7~;#Wv8Nd2Q&EV)dUik(d`e)I-CT14iBN=@$*5~qS_ zHJPDX1?pd12;fLl6~@1Q3d+yV;CILC@Yjb-c>3e83K)LQM2`cLH`k%=rWalUQij5=*sKK3czF< z(Ft9B{rxDDNJJS6n3{9r$D~lqiv3IBXXP-&9qapp4^s9g$u>}vULQMWtEKJek_q5M zdnN8(+JMQNENpr+7ysKaJO1i`0WwYnd<2Y|&f}qMJ?gI?!`~jSo<#sjDP(ghObB~) z7?fmUM79N^<%jTSG8_*WCjuzE@R1vlI!SO%-&00R+~A`OwbEi~O1%(KEK@U=(U`)I zDDlJHQV>5CAy!Z;yj13|DDYELTg#H!QuZe~Hct+11*|nS5$AAC6Tm5dCGO{>0kVzI zTzwC}JMP3^A2Q;Zi=phy={^UBiZk&@xe2bq*YUR}>hQb6rU(KUV$q?Rf|NV*aB3Xm z`Xd-qWno;s1rG;(;pfGt&RaxXz^N&e6c@AfbYa$OO34r*00W(JJ{3ISf)6>(;{!s5~VactO{Sgm##=_zQ zg-+19T1{ogmQDbJl^B+!V@Q$#I6lXgAAI-^2MzeEgCYVo%x zUHIK0V+;Zq*~Ov%o7d2NIvw3-GBMH76p;)P?_C%Xib|PGbk*6{`i#!J@>{J?sZ{)0 zSPcM7#u1Gl>JDO7C{rqi$P=eXsa*}3i^)D_l}GF72qjcS#R8^mkht)pmC9x{9Y}Wk zES&&$R$@e&jzLK}(C{S;ZR7asLk9fyQ5&81cjxBgVY`h`%pOK)Y5ODsG!1feANU!V92q7gkbOi2Dy7M6Q`6 z2Vk;}=nb1vsYIu(mJ#(-K)X2b!`-r?>CGOwUVDOXaiN-A+B!7&br?G(;cb}r+S#R-QE222rR0ygF_$C}HW2E!T_8!%vV z*kBHGqjPR)W^|1-BWZMvw30^BNE&H$?dsmueeO$ruMf3aJ*!<^E6u#Gs%u)Kp6;HW z{`!6YyM8+J*77w1a2YLS78mv2f@9e>YTb7MwOxEE#jn4Kj?d5Q$K5KJ1q7zJvS(-0 zRBPL+2Cgy++XV#d>7_Ean>|gbM!-}tU}%Wy%*x_|DzgAN-4FA0_ns@>3wz3WFZMFb z_GfNxj_f%(9A=bI@a_uz9*efHHkg^6wfyb&GPYCzPKOl%SlTj1AGtO_zkh8teg3xh zX`=W(em~kbO=nto0F5|SP)uzXUq-P@ucVeQpHIVYzO5V+B5{i^xK$|FZ?lOjeiw;9 zcx2nl%gL*Sel5}k1g8gP{-Cd1smrw{6f7d}^zjG31*W~U3jGRyb{BuTdwM7@JBOAH z&DDiJJI|e2!-9xLeohW`b$6%a;Au+*;9T`n>ITd7TFGI0($PZ)ZC#Y;Qzjd4?wzs- z0UxI^yNiZieVuyleUMtuznEf|e4ASLT}1KgZltB@>6K${g8*F9n<*HidW))HZ5}{b zc5w6+@8S`$Ek#FPdmXF9xXK@YK>>$Lq^j{W51!Dl7FECX4dk%dR?YZfd=;EtnC(wx zRTYK3UKvE4Chp9d22a&KAJ5%v{EbqHJ6n(gSVGf|%V^qhInC8Pt^VISSFfdin$FrE zroXtQg8u#CIz<2;U#8CQ-9*tZe2v;JxP)Tgyn)ipGSxdPeyw|y7h>VfEV zI9BqRL^HPmp31&HJWo*w>aX)KP+Od1|h zT5<`0b|0)F8px;ZC@)`=4=A4W9Tb0w9_p;9pgfO9`=L^D@U(dWnDEn7=6N)gwU6d1 z4ygZMrp0Box8KrnT2cjEQ|}c0@%MuC2iKI+r|znvNnHTmOwn`Cqt<;FQrm@>QvYKI zX#tZ?tD#@*m^(EJo0y!W+{{dl{X>L^5!+eg#d%9TO3Rl>L&K`yCY8vSDlqd0g2SGf z$q!P=r`>t+H>X zO&MQP1sfNDs+Vthtc_>uz_Qq_;Od78!oj>8x4u}$ZMD$w(z3dZnn2D~zF1UmkJWxo zmk}$p*?AIZF=E><{yHlvIR{ho8jJDTJ23uM8h^?wD=Fx9D@pAl0=LC@t%$!~Y7PV_ zFF()nHxcY^810W%wA0q!&Uw%ffDkCsD0=(E-$G}cJXzV6X%nf+pACBejSm)G%&Gpo z42r`b;4*h}wGNrHMZ@5_Y@YYo2?; zpS=SsCq%Thm4%6jz-{oFx37r5ysT_$ibm5${B3;**pTn1{onYvQOup{ag4_@ipx_z z$5Z%>;@wo%kx#=SusgBl0W3mr^TrFFKZrjhKm#KFQcDB|N=qq(in_#F5h(oGEPwha z8Ym^V%cVbWg+F^2Mw?|6f$#)s?Xjdfcnic|tevkV);%Wimo9^+O%#DB7iRF-JO!fT zEbg@TS_h`7CO)BW-#a=-KZyC-?QZ)}d<3k_01;~0DXaE#2#Ac9Q&rSO*HLlvI9>i+Gu{7wT;I=kUTUEqydI;$qx19+_tntFPc_ot z-dRNtei)~U_G9#K57+T~=RMv)zjt+j_i?HoL-Y64UX8OIc(Ste8%RjFG2=C>8m~w} zA$dF=J?BM?SL(oO5LLy4s9X-YaEm1|VjBuu;T6R-m3jG8P*9*>bKy_wz{>t4dV7@$ z)%pg#PoShEox0-z>0HBT^^%c6U5P|mioeYXKvh)1llO<$meIM7*7M)577frDSC!B; zFSYRB@WOrNr}gw7k3{HYf4{zupJa8>)h{aB01$fz?aB|K;ak6GqQ`QSDOiB(Uu~m@ zGrQ>51q1Yn{YrOk0D{m69Q*d)wez~sGr7_4Y9?VvJWlqE3>rSvXh}jDjjiK$?~Jo} z#uXKAR}65+inMo(nAkQDC!C2n~Z(7z?M;#ek(_I2bKrY}q-~ zQC?x0S1a~sea8b*j%?Z4Ynr5+uX(Ct(*iInJjCMe>jw|f6Sf3>tC%{z&X~~!~(i0+N@t!;ZJ%M zh9F%Avs6@hecUXX+r((zbSY3w>UhAls`mLg>NKl1c}{1?!=?pbM&%F-yRz1!bjB6M zboaZR^h)6Xef`Np{QrxdYNRhcR?i~v&u=c*bNCe6fKgRF<%^hJ~jQ-<&H5_U-p6hmv#Bc-Ud%aYVm(Lz8Eu_2=s zZNpaS2rCf?V4hlUP7X~(TRE&L_9uzsA<@H*2X9U;l~+{g*KawE#ow0X0De$DNT0sD zn%D1sr;~a{X6YGsFa7t=4)NT-e|bv<7i&Nuo`3KV-SBD~Z+pjE9rVp-6fYrw+&_2( zD?27AyK0#FM(4;K8KpnDAw=&4kI?gZee}`mLtGT{TJd2Phjm?(97@Kta=t@j^he(f z(tYp8si0|$-VF_MVF+NXMBWY(R@c_DM+-Rx>F$!ZA|J#tMqicr`8@KPoKiftV!YA| z$@qgXCLYX3o1;ofh45z;f8e!1GvG3pn|wasnqn#K+6qz|$vnOB?rySYXH#1+#Qfm` z#Wc+g)W5Up^~1HmHNn6M*Qm2gooP(G=9?3MT44n$fKk9Q+L&=|1vGS0odG-H8M_a&owx3A};n=1sR6 zII;2S>7_(fH951g=up$jfLZvHo-o@VV>GI;u#k!!4$iIBX5Z1g$HwP#I(W=E;*{v2 ziD(NIJDgl7H8VSF>3BGv#`b5+r-IYO*6Iz37M4~X_C}n@J7@L3WcyhU<{pGrmBA-_ zBP1gsDp^An6_l5g!=eWdZ>!N*su6M3j06Vq;d>)I?s2(ja99!VlCLC4#-I85c?tvq zR{X(tUW#{7Q%QiY1={CWU9011Ec`a<0bIFwle0_IHZV=mz9|mdngtfZu+wu( z>gSGA|JWS&2}I#W=irPk^x}iF95P1!-@KZ`rwKsp7d-&AW1^Sf*wiA6&F^S3rnup#gKCx}8o6=X<$N7X}l|pZ3({ zk7lHitAun37;qRbGyoR<2u^7rwXncx6?r+i)KwW~k2*)B)O#!yLc>zdvj~4buR{>8>E+_YE#!I|@f{hHM&@KjH;R3sz z`f6(U9>a6mc;D?M4khExQdfe%TVG8re^-Qihet;(uZh^6EiMAlDsQLfm)P5f2G2jv zP;&dw;Q6fmVcK`FfoA8GAK|QC$G1#cf$3xDN+(wh)7jllC)5*_E` zVfGTdKI>7=e1*`DjqFHWV?}w+Ibll zEyoWY3%J`M{CqY$KXA|@M}v&K1SiWM<2|DRxlQ4!D)Qvo*ej;BLgBU-sz-1y^GEwG z5PtbK8;8Kh)NrrxN3azGDYRVj`~6htaBw~;1{!#78wXS7WiQztw35Pi^ZR@pJrM5f zpa(EJJVc*+uvQm@zbPDG?;e1HjzG&%y849{eWnof352&04V@vve&y}s{b5EAOy!0! zEn1J4Evr}<#F&!Bi(!Z|=Kfy-0lZ-#`CRbHgGkipXcT^K*MzO|QWHsNA2s zgG1KbX6*0Vc*e3)YL>*=ddB1#+K6Z0ChjCF! z{O#wJ=BNO26X8kx_-&PR<8Nae?nNt^@4VPTpL?j5!^GNDbvJC009=oR$j?A%*qfI} z#ZD)8bJx5Yx-l~ti#5wOlFo{J8u2vIhY{D2NIiwUKFYJ(IaD<|E{036bvO}!Fpxqu zY`)t~0hgOS&uEdN8M5{GvzmqVFGO5c#v4 z%BiqPng18z-M7?MG6)Al@Zo=-+#lA3>Syjz@&Rvoqn)l*+tX}?06ZB(rj5vgp%CS( zL`3qcCI&efJl?g63|2%uRZ=D++{$qjgN0m02vRm$@h+Zwvc9N@{0;{d_ zPiDA;fP(Gf&vA8L)Y8&Y<`2B;z11~(t{^v-?u>6af0A*>d>kWxa2^;m)fE(y&*7k= z!a|C5bnswM_#@aZSmlnIoe}Mw9aLOYL|zO=d_LyTOk0fk0~@qx6oj$%{c~8I{891G$K7d8d z3r~Co#Usd3gqW=EoM3MxatDD+f6>GqN}QY4uW%~`;E4>G@fZ+N?VX)e8VHcr>7<~? zL#<^&4ihgR*P**dADyvLGmOwQ;+!loHIZjFR*P|^f=co7b#vGBM7WBl%_(p?S@hL6 zG^`qN0V4ba+l}=GQd2WC)EbLXNpUgrCzO{*v0#X&OaouE0hP`lgIL=Te_|H=Q7aHN zFFE>;!8-|0x!>WWLcgCqm*dA)^8188f}MbQKyJk$H0N(=Yg0Jna#5MbL($Sw9=Jdd zqQFlXSgAaUcdZ%>>3q`c3pm0&S>cK~=NoPtjN_d_x#RZtx`7f{M%)lHW`_%iQ+eU{C$Gp^n~S!sYlNInK^In(seFP&N2V~ z)Buy>>$8nPeDaFr0t;1?>ko9M8rMHkKQ7PV)nWVPZw@!x%1f^oJ1y_7$zT@c*|h!9 z48MAHU6p@j~foT5*X1C~l`>8jChPo2&Dz~8cZ&+qF` z{WV>=x+7k&-r=g}Ixv5c(yDdq(){gKRh;#G(`w&zmu2E=*dP;MQ zTguit?MbRG>txt+>buuB=C#{>H@)qBeR|pVNxA8E^L`eqTj_tUE8_}_b1a?_aX;*9 z(Sq}Vib??~Tx?u=<#&`#vQ_cWrVXw$xI~MEk{McN0;gb)HkIya|Nm89?m_NH z$z;CyS9hvB?n@A_WMH)xSF@WKcze=gslG(jF4m^K?{04Rl$Rsga~x!x(Il(jZMXPl ze%mQM$M7YaU_&*-NtpD~JZ1aTgcZ%p`IQL^b<#@-e46P_zF1tJTv*8l=e}4a*4`*h4xe>tt1fH&bF6*2UngBmT&Cmb< diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png b/assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png new file mode 100644 index 0000000000000000000000000000000000000000..c3eb5e79d95beea4b3e6fb62c6aabd9a36120c42 GIT binary patch literal 76249 zcmbrlbyU;u|Hlo2gn)pkbf;1RN{&WCN<;+&MwbYa9Al&)AuTbGE)fw>ItBwlx@!{K zl+F!CO!}UFzQ1$sfA4d@&e>U<_j`NqdSBP8o{uZ`v5^klHMVOcBqVftx>`?2NUnsD zkdSIpQ4l}*Y=I~tK2g8cweTS!p<(*_ASL;b!$LyBL!zgp{xl$G8%5dV@i1NZwaXkU z^rOp**80}^X}8+UTaWuqibQy>+%4j{c9$oU# zudsa_a)`b(2i1-W#k>M!a)AAOGYrTagdyhd*^cGdO&EEC~M z{(w!YuTGjq_ExLJ)6rbl63cd{9Pb8Tko5O_=TCp@X ze>4a`BtyO_ogYl?QTClKEw?v_Op%H%hQa z^B`_Zf=bC!-d0s>Rh{2N)|aaDz|M!v)>E9mW9q2(Q|$ctUQ%ezN~2s$|OO(=VE)Yj^?ydP}%fb$)*$r}@2P?`` zMh8DIn6p(mRAnPtQ8z7mfa#bp?`UQ7<@8~$PSqWs&E-ZVY*TU2<)F>Qgtd3SU@_ik zrZ>SYFY6_D_26r4^IBrwRVVr1kxcL45&DvCzW1Z14h`AX@d^Bo3p}fE zbnL;MKA)4!c3BhFC&-ZI)wi&al<+`FtREt@AcUr1#FQ_relK)>9z9c8GjJCL#hjwC zC|n4*aq5Y_pUuexOdCO<(~8ett7<>lGzmQR7*!^0KezJwfj!5ChBodr%==4*?8UWW zE{+;&0T`S)6xRlBJU^OGsw(9_R5I|G>ZLo-+h@o8(QX`7IZYe+Q^efn>d52HkK`sf zyCm7Z^^kk9@yTP>TMJAgQd^C%) z#GK4n3_J_f*+n0ZfD>sAC;0N^+BOV}8#o4vje5^<0li8s^Pa7hr^GouPP{3B5d>p_ z`5>Jkn6>|`XD=ss8%<~@_zjBH8W4_0Lqh~wc`f4I%L?(=QF2)Z5ihEiXFxKF=Ox0* z5Y)>z1nyN#u9TR!sX;C&-uq=iea zz4_^=(NxCL#DGj$Uf?F#iK964vj0v!GEXp}&{t(YYt&abFTnoTNQG+bv1-nv^V9PX zzK9o>dD8h_J*+58G(H1=?rwAX0{knSG6RUgVS ze))Px!VBY+fjVmhwtuNi_1vwIIKIjSXPU>uOhX2jtNCYNTCwbu;7}#}Cww!OJ=#|; z_fIi?K9||*r!}~*v4uTJ>03bluO5daoagb6Y8Sw1t&J}-cz+CgWa`4O2d!#uXuTK% zfx$K*505WrRL{N<-*&Zb(JK|TUL=EHP|#VYm&`=_?jrW2>pHILa)uFg7#&*Hx&lLB zv8~6e76Y;-%_v;+smqPyahY=Ds8L=@^%=b~ycOFKp${1p2cxD@0YhG>LyTfg+8_=Y zvXhP4300_XUHanF;*JP;4L)y7+P?7b1`qZIBe?=}!MzqP##Zg8&Q^$}q1x81>i}2n z^Y&mzaM!r%Ha34&7_#koaV*&)s&br#-3)I3iSjy%_mV)MUQdmq{3y9)i-Gt!=0CzcF`?)7M-ap1D0DzsG4>W(7w1xv>7CqK5_XITErU{Y5+d?e&M7|cAmJ2N6jm(3*Li%f0wvRbM?^+ z5u44Vuv{=2!Y`Q<6fj;l=>)Tu4V*DxQ`f)Pd}I4I9vQ)t6oEk6ga$X;oY0!m8Y#ct z1HyOTN^W1AAQ2hfZCJl*(VF+nl8z|tfo-mh8OSO)a$VHsc;M3rAgrRgJupRKj0~C9 zc4T$ZR7Kmk;H}SFKbLCc>Z6zjNGH@y8bQPI?jo-;Tiw&o9)uCXtIDvH+(EA!CmxC3 z8uhG{^W7+w4Bil{`Q3ki_H~l~Br{*C7g=cK+QH(N+7UME;)*$#(N;t~Ox`b<{yi(m z3bXaLgRgWV_Tp2;#qYp_F`s2&<(l+%MWj>tDX(VZ#>ed2$CLYWWERG^4H#IQYf!ck zbnh-wt5sgW%t9vm{bE#JmIXwgS1)Yz)?00O0cHnMr3|3!?0IdA?^w0B5356i8z+sF z(s4pYy1CHx7vfz(a@ymDZoylYn7hm7SsTi%Q+`qx)4|mlvC?|ND}ScSRHoa0(}C8} z#K@Ag`HdKa65+=O(N=vt8|;m$C*w&ON8|a$shfGe=h~~ww?TH+6fK&_R3VE&{m|Gd zBw>gt# znga-i%k&RC%SV+dUHXBxM?yA4TWXQ0uR%ISzk0Yi=5yPJ?xJSht1&1DI{v~RUD3EM z5saf8B4WFq5BkC2J}~^{PFdbe?!{ud4*A}I@y;~y<+B!=Ms!1~YilEz8E%)2 zeW!eslX66#gfj{qe}uYf`3hxShf*T`SPCJ#MM<*BH3NU>b=fAf4Bj|ZnaXX(zd*Ig zq2+Z+B+*`F*r8jdg_1eKz*X0~;WA4|N_hucamG)VdLw+OjVoSuH@@d-KGv6 zp~&_p48K})Z$F#H4n3Q}O3b<;v2Wzs>y@CDFmU6Af6wO6VDQ4Mb<5ys9LGpte;}%v zz5TP&Wxb^zl2f{C)uw)Jt#vZvMLY2$kchw$8i9H|(SrR28XmetH|vnNuV}syyHxkE zD*AN6mP3p{*?2iFA(^@|z{;Jsb)}kDC84u}EyRFaMJo}KYNJS&Wb5ookyAhOqQdt; zlU}(Fir&vNbFQXvhJ>rXb@}lnh0q~w=bR=9>DPa^CgyiH)!khh|+0uD}iFeBn7D(6t>kor(uhclmYi*+~K8FqgJ z<(b@MDE=;UNKF3Pl9>gV^;S~&23smw>7>VJ;&bqyE6z$79mAIHq$Gxqba?Qo3Bj%A zWGHf?AF|Eqez3S(1>5&0ru7rR2jP#o2qMM4m_I#o8Fj%)ReNgf`1ESAm8lB=-+*Lj zRN6v)`W9fC>IjLrIK+$L3ju%zS`RpC&T%P0PQvXaA;7%v@qCYHO3mag??JqC)ugGn z9W4wPxMANkO>MDTeyZ>IvLaGC_)izNgx^nxB;^6W6`c=h&*rrW48EysftzgSBQ^Fr zS%3cYsscAlY|2H8`bNZK>pYzYRU10s3 zsArx`j8qm#;eIvN08B}xbzfSJSOU^R<7mK5>5;FYMf&B6WGH0Ah5JtjGbx<#t5#6V z(ap|$#PdjE66(h#@g@{*Dd3!|zDB6J;*jJW(!U%0|;QmY?d+I^N&+m{&S9IJk80&)>&Q=;s-HsS^&l7MIiG?TF%;%oIGXoQ2`|D=^ z-|Uz<>x&fQG#m_z567MjqaTMLPCr+)Dvcrvl(qyVcRbIB<5zGMN9bxL_k=@juFh?{ zi0qKFNunpQk;V_8PFhucUA}w`1WyA`hcrHNJzmbjx1SZ~Z;x2u(ot=*Mw9$uFf801 zjQ*I-{NzCkmu1lW4(hlXUDWEhX3f28d31^bpY9MHndhYSSp#_Z=VkBh5pBzo97kWQ zcJ-Z6v|oQIDy!nlwDn>0xpT%+1Mw;`KdqaF<8P&vgwj(^pJe-*1)Z77NQ`dVnBn$I zv2e4tcBQqIY~RL=>^h)=q~?hjv}6Qv{-^^PuN5y)@W>3aaE^7# zbX2u$e&+xFWc0P43b~QXR5>kh?+r`ZcElCV$CPq?=2hvyiF-fKcB56rqV744shvk~ zpA`hT02a{%2hCz40P@3x7s<*hx~W zSv?1gkM?+y>B&B|Q}hP(NO$lGFPFEe9`_q(kSfTSMRkd_OTgCBkvQ58pZwE>@$Fe2 z7i#AIZwL9o&oGx4gt*`9Tkjfl1nSAGpTZbeJqBDUCuCU$Q>#kOXzyu$3NnVyO}=xv z&OlA3bdQ|1={({3gbl=9bot77{B?KD8uf_{2gm13Y9(a|u@xZ2NbqRjOzpcpwa8!= z_0~KHVLCh-!R%x!xGw5?mcAX`U`yt)huDu2aeGL7wcSe7b38^es zzdDff5C0M`l`J)9uD?2~U&WQudPLJKXHqubq2kO@D1$l2f^{INdWO<#tQxM^*6QSB z8uae!_#lJr#trr6?ekVY=2s6iagqz0;wUHXxwargKra}E8G%l3wQME*!P35|#eYDF zBeKQ`RVNGW#Pw4pV?bhjq6hA&smLgu;~NyMS|73UK$*-rw7udDYYm16(Bay=GD(1V zEa7%FN{sxT!>&goc+I2cn2g%ikQ~?E8n7ra7t-@Q)&igT&ei3{PksMD8(yE3wT;0l z#rMW3<1U0d==N5L^VaCOCnvL89#3^W2d2tu46 zZE>B9MJL9PNj{vQAkNu__h~K~+I`Gt!1>ZXzxp6Jo1+IAq7H*?rq4+z2Hh_xu zJuTye$7^#rh;qJJL);4(NVU-Kiox_(7Jrb8Q@&M}Jb_Ime^_l2*9b zY_I@mUtFO}LdG>wEZI}b!!7LyCq_`g9*N5`j!lWnIsVV>C-lmF3#ChKM4dBJ@E7P9`)pUlSGPfWJ%HoJxfli1P3=fZyo1@eZ?DJ}OL8a!vv zE#Y>1!W}HM6U{R1ml!gjTEQRo*vbAS$3)M>67R#D1cgoJU6qfVrKK0McT-vR0mKWLMGJtE=qvDyQo0v4!I7Vd5E*7NwT9;s3o1C6c6WvVy{2;uY{SZsN{^M;y!d0z^i&+q~rd^qG`-MH{1!(5?By1URkZq;&=$G9EJwdHV(vLz6U4RP zv*Ra2^$ROQ{mUR1ftSe_)!#T0f5FwhwWvRUuW3v4$tBTHytR^0RsrmhcHIyOnG9z! z(vF7>bo8moBwHMPB0OXb*j%|DmCNg$6h86G;%@Ltx|5nuzL6!nU(Z-rcZ@V3KI3v2 z9Sj3IuPc5H9|`O3qoe?HKD7YA1huvFq8~QVhA7t5=*oe{SWAde=`$R-IRNdHNt5f8 zc4c*aFNc4-OP*29a`&`}MRDV^+4&+(1e3iP!fQ2TCB5-Px`jgGm<`b1Nh^OSZR?C+ z()^ecFZ4v%IIs0WMY%gRoX|Qer+H=Wq2&xHP@8K&U$_q3CQL!<$iTwUJ44vQz$(8obLCza#&2X-qql}R{)C?mxQzG+_db4K7C~egLO~_HqFG6Pr+9l z_+Vw+Xpg5i;KyWT_4{mDJNf#n%G4%8{6I#v^`hv_Xp#x~m439UAHT8pV2Lo7$4P3< zj6?i4@^zc%951UCtPAHIGi3Jw)y4oFDjo=uJXt~j(Z|F(b_5U4s5)E;NUTeecC^=C z4fBmM=rPTUeYQht05P=RQiis>(;xF9Q<__P_^lh8r6?`bY2%s0c2{2rtpF~lG<|Qy zrboplOGy{B>N0z0>V1v1=#lX-1|KknLRt+J4T22J)ezOxK`7zF+<=pgrX>rHh;5en zDT^0#)Lx_dUTV>`oI2+LqUn`+U)OeQ9MVsxEmX!`6bp?U9ju;md3>hpr%Mx*JaPq( zesYfyA7ecn$JIT1{*9rdBo)w~fbE^N^)8{sJDD16E9dX%@P=7D;OEx5>2(mlCm||B zlSaY?)!;RW={f#esP31Nz3atISi5|=%j4ho%Y)c>S^!V#sY*BsLrFAAQsC~0lLY)k zS1$7~3%4iWq6D9<9Cp;n>(h9?F`9a#@(z>)jIQ5yhp)z+f{{Th?oK%CBN}uZiD&yW zFjmxN()uKi-X8|v3P!DPpO}L&2FB+Rd|@(eF`DGNb7a@IN6g(47^x{Ff8~5T+pM)> z*CDB%+uHwIMVroPq5^L2c;pbT#AV89HEJMEQsSB?Nns`hzl&>ctfhrzzHIvA0>4?o>9|Q&4nfTfxd3PadW!dhSTfEI-~qy6MgtwkSM?- z%5tr`;V9(_L%Q!2oD@<5DLTCRkH$$U&?@3RooZR(bGXe9S)l`t1+X$Fj&3=9bK8vk zQawM75f(pk@d)=&`T}Xofz%A@XmuNO3QQdqZXyhMpMrx60H`wxHg0rPa_v1$@t_4n zFrgmnL`d_;k4=J{>;W}|`1bPR&fLOD?i2lkWqW!K$lUFY2u)C}Txw^7Kqc*F?=BDP zL6cB|(7gdeoU*17;EwH+v<6dg=7NXA?yDy$i?)fWZkp|xLr3x?JnWNRXNW>P z7g6d~8;^u?=j70NimLcOYoQlw6TrEYS9oW!-1pk}cmkXH5b*IbMw$2X;e75%Q^I9W zTVRbFe9*CrrJS}$$T6C^(GwQvw(umV!I8v1kJ+$i<8GUJ{9nZbMxCcppxpoPTv~gA z5I^mkDZ%p$TN-g-)Ebb=DgFENR!+_5ifozFI{h|Y7*O&H%H`%VF9!sM{P>_ja0HRtczMN<4zp&HqbJl}iFH!kN9 z=kqbTqs&)a-3Y@VC=V$B+g($J%iF4!B*%W2^DqMfo3TB6KzIe%M#>@I`-o(OCk#6Dh(xs&1V&fbsPZ)dd%oSr zRsM!(ket?<k_U{%KUm=8(9wn{!Y@Cy1p}Jl>#n)|C4XP9- zze$r?z{{xIuVMvX@b)>i%%2gkgarn!QNc7l=SV85%mg;a0Q~^k8*H5&Yk`-;x?~ld zkB`Mfr5Pt4q0Sba2}08h+$?;~#u3zg? zvJ@A6AM8vd-QGWhHxHx;%D5#%<9!U{CuKK#`}D~4blxvMpoqL_Q6$r>6B=vQViYIg z8cLCc=6jhZmlf0Aj6B?~&@u;Tu5DQRmd)q~hBb{_N4>BaQw>ha=@XG`TCdm(;zdDN z-+mLI-$;ItEA^YFSIuJbsJ<*MC_$X6R3)!5(NLuJzOb_2dSh&h%TS@}KyD?+TqF0s zMCyw`W==Vk%)TqAfn{SGjT>n+ys=ed^v4H{k9M_OW`9P?M@l)xVp*c`-c(tKn6vob za#cM`&r^}FW?x^*H;>f@kRI-diQ?}+9POXER9o$*v3m+~60pJF`xSuTz4+Fi_WKj{_Z2FU2j-{g&Hhpm4_~_-No1aw|opNGnr&F-C zmYd0nlXo0q_2PqWyw}S;)U0`jG|#Q~c}{DvUULB4O7+T6fdJ>1A8O&BP)Luv9Ns#d zs*a~Q(6kwp|Kc$%MgF>|DZ+ z0a}(8_6KT~AldCzt&2=DC;NgROmpjUu8a^F913`;LT&m4c;y>nXOR_(z_spIjfcoe zhUa|yuHRxAA{9XkA^qXKsvPU1Ai?(C0AghVyfXW#bqg=ra_WgFX6S^1+E;LrHUZR* zsl%;MP;>ouZ|h}M>z(Z{lHuF;CzU)AXpts7hT0ZF?HJ8EUoCXk^qid!JbEbeoEtvA zExxFamg*WD_K9AP`iT;K-y@XGY`hu&W>};PWoCoQ-4aYr8g4Sq9!g$gZrQhyaj4#< zQSsN6$Q* z2{O)vv9}W<7E3j))O6DkD(>YqR@azc9nREL(|2DvxDqoa(KvMQ+IlZ`H0`UPZsM-g z5fiZK(7#yl7ed9M-(*N#3TqVl`yEOU7YKURciI~r4#80po5{d$O71&!EwwX1gp$Kb z{UeA*Q2^G+#(5e)^93&61#H-gCs1PBR%U8~wujeZ0bu|z^Q+_4S-vn>s4Ia_AIdlS zV&4g+Ac+aMDa=@o6zEKomou~oC z?=TQ9c0eeFEzm;l37i@BGj2bPWaJYD!(X^&SpTBAR_-gXC3`(GDkSinYR~V*`TB() zP?M0XV-2%LqXNF`q1t53RGmE*pSKH#xo6h59 z1~2>aR#5DT3RM9Yzp$d!cipJDP4f`A_V?ANsTi#?=Y=B}!e5Rn)E+z;tBUnh{H-Gx zyh81%ypps+cz@|7>@UX=yuH4Xc8Y5*gA>JR$d>?O^F_=F^P=sW(yaw(S3+s~5y!RF zFL}k@W!s@A`o}1ATdO3(`?fc9-#7$~`qRa9f#$+o+Ch##_U+fn3|LO`;s%UAg01gI z6pSX049OC~9rK%Z8$ze&w`XPpG`kkVyd0q+%k%e=OrZTe=NGn<`4rx*2<~5j(#=Lv zsM&}7VRUiIn-*t5SDhH$`lDtQ^jU}ARw;o%6t~m_levi~ePwU?=zJyBW z-2MLr6#c&mB)bNxUypePy-3|p!^L`o^K;=_noH65B;?l?dfv!CD6nG*wr0D=&?eGz z-~AuLWbOzE^Ak9}sJ|f08iLi?ejh&+`#;d>Hro{z{7TrN&E*MlW!EzlvdrO)OFks3 z7S*-MC8kCSr5uhsUk^BLjqF#L&g5-B{?wets*6C_YB?+R;sy8{0+?jNLosQKD>F3p-l>#+d$2i)5_p} z^v~&@Ga}xyr9xC~6XExDIQ^a;w~uSH`?ccQq5VlNHxlI+W3b9Ni1A;I_|~Z4t~Qo< z{M&+%4SgH7(&G5PNDW~E)?W9QMQR}qBOJP>gt5TVS^TAj9;pzksorb64*_<6J9ucK zN)P_4Dd|MgD`Z?`6VasivK+5FNZ*R-?{C+R=9L2JOp!V*pRD^iLiV#UzQpUsk_k~f zz_UyKmT296;>*|aCu=n5V*qrchHU5eU(AQl(AZW9?NvgL@6?W}R960@@jh~sE{AJ& zGjuXkA>peJP|+#}g`SNle^G?x8z>QrQQ~{3%Vr;W7DOBq>=6o#!HR<*`h;9ukV{5g z^keAq5m7+X7|=K|Qa+qoycO?){|llWW4ZEp2dDmmD1-HMatmLRucDjN^dYQ4YPOxA zzKwAmZfjjOJmp`CY|q!ZoDrgn?(6&=%?-?;PO($dZ9m@u!En)Bfv$}McPo4mm*==v zGJ3#QD@%|1>6WD=)%F0*Q?9P4e#SPnfjY+b!9A=lY3>K^ZHF_W-8(((pq!P97npUC zBAYF85T;)^->T{_ktBi)2t*v!SKnG}8d2Qx{VNHQP5g%S=)f)S zTo<9d{=cH+57TItS1lVKSJ*USO7P!_RdncGWb%X4?oDYPTFY18ez?-x;oDX+EL-H- z_Y#V?RR46+58(Z&DCsdorm0PXEg66=7Gr-Qp&jI2eW&L8X*3`zNLEAYftJx6^S8hB z1yEP@eMWgb8f_n0HJyY+*76d}A>K)_{VR*ipRE98WTgw|t{Ch8>e~)@lrT z-6Mkb2KEj}__^qLaC1al?`e$LfP;l35YgCvSXqpN$Lg-QmF3Fvy*rWz`b|HpO-k4-*=MNT)u*{Hf|NcG9*@9MTDNCJ7d{C+*!#?E!h0-6Q?rK3b=g8Hu?4F;~ z28@}aBo2EDm@#%aMXN{*)hSGrq`Y&%;*rCH!WmBKNox!YbqwFdhF_dK6bMMa0%cth zS01&b(EgPc0oD!SCDV;|>P`whTXM26Ifh&^#04ZWs39ui5as&(H%&Et->9tYSaI0^ zT`yA`8yb40wL)|oVwz6_KGoVxb7?3JRt(P52}uiGo5M_mTK^v<%Srh)#9dZu|0J|i zc}c^kTX+BC-YTyht=D-EZfy0!i~W4RABV4`1FLEc6Uq&WfxX}jR$i(!r0`&tk%*9tA;{t=FQZwgg z9|J2xHM9njp{9tCrVM~tzW+qEjm_M$1~Ov4=>QBLhmw*GU?8xQ~8Am8pF!LX$xv*GK` zNLxaZfA;3Mk57e|PquBHPb{}c(u)~Q}u*Cthtl(kp4 zONfBKuOAS4rblN^w{8nO(PGV1{`S#{=OneVW`SV>du!u|oDI>gUoVJVk$LkVmczdz4J?N{kKm5j@jG z)^HZl8zcFFyVS~O_<;^6 zW3rN?S=iCoFsHYa_x93XMid|H^@0NQFZam=adoh~Ag3T5+@QU(aj}KCa97Ajmb3mv zSl+=_|2BmhH$PWo{DF=Vsg+0Za3W#WkTaKZ5J1bQ*ICT?BO0*GEBN*PfwIZoFWuAe zq!3?T{WlNSx*0ZN=3$wjB*>71c6h{(>wkj}kSg;}kOH*Hm?Zbj`;JZ{@_sk|&0jz7 ztqn#Q@CrxYM5AzEAW<P`l%9yPG}Nhm(dzEIBY-zB&{l8Zv|!%-{;pW~C>JjTNV@;S+8`c& zRsD8qS^pb6b@zE{{#l9DJP{pxq|~h>k2Ul`t2(mB5)3xiExwU%tZOZQ`^UfAneBfHTy3T&p9vFN$O;fJ%J^;z^_11IqLKa)nbYcu#(Qpm$O;&TM=M$V* zuGDl4@XsT19!Y?g!DRVP%7dSbi8|w>u}$W-^@oCaJUn@c`vV(1NzjF*M+GmFk6yS} zJ~R45%P1EzgojZgvJR7j`w&~hyTKGo=$W@aoj+r_cIZOf;ZDJAH z5Vw&={WDUM@RXus)y5oRp+|+x<-DQO=?R(gqgK_#vGDm}`gST>X zZC5fuM9%49l@QOemFncbtn912T^@rPd358>ZWq1e{8KvC)n%Mxw6OAq-dh1NBF4_2bn8myQYTBWfYe}U zMp5pyH)40p5>wdu!uDp$%l1Q49-viRZYq)fpynr)exrL;_40U>rqBnZ%Usm3*Tc^I zWJm@EAhOB%w~d`gtSP+9CmVArfg>8)FTEEZ>E3-)V$i|#DG?AxW&A5>Ia$k3JyK(r z!JZsuMw>NMN$?}aHqgrx* zid?;lWz&BX!>h}RKkQHiAn*f!ca(N%u=dB~n`Gr}J9<$rQT?Qh;FKHa?=D2d_(z=6 zB~S5?=G#7nyL2WF>x{bkpCQe~2ug->$01H*LZ6OG%{KS4lO+*39rSa$7W*v;YmyZB zbkFEYG3b(I;skRsA1W%~5<|k5m|;g6tJxAjU@+to%;R^vnjx~}M2?oxM*vm&EqZjh z-&n2bBuxMwV=Fd?jEnH6rZY3g_arG)5r){b11x;yq%#L2I| zEo>lP_&Wo>%G>9`$!mzE#jT>HQo6jGlHt3Ndn3D5dkgnkGMG~ofC>bD<-UAoH8JY_ zcM!5nDe!eE`og+kZax=yY(|js7A=xNK$~lpR;o6CI2hmplsM;R+2r?(iua+ds7j_!y_`nm_f0aA!sPQJX;Hp00AY4`Ex7gR?)QqTSy~%eyx;wbZ#)_lZzf3 zt3OIbXDktYn?fr{U5pe7{3&)CHN<~(aaWGs=g9ba+dAu*H^{&Vt+Na7`{Aqlyv(WZi$8YySIx1$>lfV z%gL=rf`hN5W7dSSSg!#VMvILpwoZliB@Sb^9|xYF_Dq9v40=#XX@u{Qh2DpHc&*Xv zjECiY|MOyA9ah3&dqW3gj7aqa&G(z`=eXl3_1OL394{lPn_M{`w*O!b0~L_a{&vkr=tw!yboqTwV`SdL#I*4(sF8CI$OZQYW$3o~QyAfNj3NxB}uzN@Yac(N(UesYZO+K31 z`!W29BE6}xYZ;U30n<6p;s8gQnNw)xZ&X(=u6j|Z1K$|$PjLk8cCLJA3K;3WW%F1} zGr4M#j|HqAL*{kZ{hJA6EW)_)nT)>Fc3c5ro{LId+GbD_j+3vt{@WnT$>ov{JisH% zOZBz#RWBFx6|e3xADX*pJ06q9&e5gQqp%^M(;8m09P~>?9gk2vN&eCF`a# sV16 zsp`q@T#8cc!IV-w)0(dymL(qSCxD+>{phxtx{X)wlV)VN9QUhXvK-$Kn2Un@47^)| zm~#$N0xB+qqUFdyryAnn^6EoWWvVWD>x$~ zqmEZP6sz|$bNmea9R-wu3Jibdk0+=~*6K-X^g$e&EXh*J8ml=bbaP!LY9}$!EA~nQ zj|;qrnV@M@JrdZ;FdYD$PD*^qtlqJ4t!TT1?UzR)^0il})Te(d=fe%Ps0N|1c=^R> za(vUhWZDN)y!IWz@CUqZeK+}AiAm_~8}-B%$?Zj1&tsNkO2XUMfAg180F|vS3C5bPew*;8niSu3BNXe6y|89WJ=wMVTA#pQBaOk_lva4&z z*XkH?4J3Z)-YN$gb*Vj1xu-L{7t{O^jjePt2{khU-iw^N!!z4zhRF{6)L3fn0b4po zAAFQcFMY~={FZ91j;;(ro6Gkex2#6Va97}w!s0D0S_lK

    G?Acl$mw;?EC_fkg`; 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 BQ2zh` literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join.9dcc67e.1030.png b/assets/ideal-img/article-image-sql-join-inner-left-join.9dcc67e.1030.png deleted file mode 100644 index 9783385cd62ce77cb9ab728ed26538dfde88c446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152916 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 ~!j@FlajlSpB~XsrhEpIW$( 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 S#|Yfpr6{W=Qzva2_WuCK>^c|# diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join.f8ce751.1030.png b/assets/ideal-img/article-image-sql-join-inner-left-join.f8ce751.1030.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8a645215fb32c42fdecf0f064687cded575641 GIT binary patch literal 146107 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

    WtQccZrVI`5L((L5ycA55?<7;+&w-bgJC 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%0D_X^|^I*>y*=#{%E)PKvp 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 O_$bP$%9hI*2me3p*M(64 literal 0 HcmV?d00001 diff --git a/assets/js/05bf1b0a.edf8973f.js b/assets/js/05bf1b0a.13876b19.js similarity index 92% rename from assets/js/05bf1b0a.edf8973f.js rename to assets/js/05bf1b0a.13876b19.js index c40854d04..4d855504d 100644 --- a/assets/js/05bf1b0a.edf8973f.js +++ b/assets/js/05bf1b0a.13876b19.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3877],{1071:t=>{t.exports=JSON.parse('{"label":"Data Management","permalink":"/docs/tags/data-management","allTagsPath":"/docs/tags","count":3,"items":[{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3877],{1071:t=>{t.exports=JSON.parse('{"label":"Data Management","permalink":"/docs/tags/data-management","allTagsPath":"/docs/tags","count":3,"items":[{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/06bea203.01f84522.js b/assets/js/06bea203.01f84522.js deleted file mode 100644 index e73c4b93a..000000000 --- a/assets/js/06bea203.01f84522.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8845],{4137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),d=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=d(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=d(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},c),{},{components:a})):n.createElement(g,i({ref:t},c))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var d=2;d{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=a(7462),o=(a(7294),a(4137)),r=a(1872);const i={id:"privacy",title:"Privacy",description:"Legal stuff. Short and simple"},l=void 0,s={unversionedId:"privacy",id:"privacy",title:"Privacy",description:"Legal stuff. Short and simple",source:"@site/sites/privacy.mdx",sourceDirName:".",slug:"/privacy",permalink:"/sites/privacy",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/privacy.mdx",tags:[],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1616337447,formattedLastUpdatedAt:"Mar 21, 2021",frontMatter:{id:"privacy",title:"Privacy",description:"Legal stuff. Short and simple"}},d={},c=[{value:"TL;DR",id:"tldr",level:2},{value:"Cookies",id:"cookies",level:2},{value:"Google Analytics",id:"google-analytics",level:3},{value:"Cloudflare",id:"cloudflare",level:3},{value:"Data processing",id:"data-processing",level:2},{value:"Changes",id:"changes",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(r.m,{content:"Legal stuff. Short and simple.",mdxType:"LeadText"}),(0,o.kt)("h2",{id:"tldr"},"TL;DR"),(0,o.kt)("p",null,"I do not collect your personal data and do not share any information with third parties except for non-personally identifiable, aggregated data used by ",(0,o.kt)("a",{parentName:"p",href:"https://www.google.com/analytics/"},"Google Analytics Solutions")," and ",(0,o.kt)("a",{parentName:"p",href:"https://www.cloudflare.com/"},"Cloudflare"),"."),(0,o.kt)("h2",{id:"cookies"},"Cookies"),(0,o.kt)("p",null,"Cookies are a small text file that is placed on your computer by websites that you visit. They are widely used to make websites work and provide analytical data to the owner of the site. I'm using cookies from two different sources: ",(0,o.kt)("a",{parentName:"p",href:"https://www.google.com/analytics/"},"Google Analytics Solutions")," and ",(0,o.kt)("a",{parentName:"p",href:"https://www.cloudflare.com/"},"Cloudflare"),"."),(0,o.kt)("admonition",{title:"Check yourself",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"You can check what cookies are in use on any page and what are their values by going to Developer Tools in your browser, navigating to Console tab, writing ",(0,o.kt)("inlineCode",{parentName:"p"},"document.cookies")," and confirming with Enter. Many browsers also have a more detailed view in the Developer Tools. For example, Safari will show you more information about Cookies in the Storage tab.")),(0,o.kt)("h3",{id:"google-analytics"},"Google Analytics"),(0,o.kt)("p",null,"Google Analytics is a web analytics service that tracks and reports website traffic."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Cookie Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Expiration"),(0,o.kt)("th",{parentName:"tr",align:null},"Purpose"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"_ga"),(0,o.kt)("td",{parentName:"tr",align:null},"2 years"),(0,o.kt)("td",{parentName:"tr",align:null},"This cookie uses a random number and a timestamp combination to create a unique and anonymous identifier of each visitor")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"_gid"),(0,o.kt)("td",{parentName:"tr",align:null},"24 hours"),(0,o.kt)("td",{parentName:"tr",align:null},"This cookie works just like the one above but is focused on mapping visitor behaviour on the website")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"_gat"),(0,o.kt)("td",{parentName:"tr",align:null},"1 minute"),(0,o.kt)("td",{parentName:"tr",align:null},"This cookie throttles request rate to Google Analytics server")))),(0,o.kt)("p",null,"To further protect your privacy, I am not sharing visitor IP with Google Analytics and have Google Advertising Features switched off."),(0,o.kt)("h3",{id:"cloudflare"},"Cloudflare"),(0,o.kt)("p",null,"Cloudflare is service providing security and protection for websites."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Cookie Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Expiration"),(0,o.kt)("th",{parentName:"tr",align:null},"Purpose"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"_cfduid"),(0,o.kt)("td",{parentName:"tr",align:null},"11 days"),(0,o.kt)("td",{parentName:"tr",align:null},"This cookie collects anonymised (one-way hashed) visitor IP addresses to detect malicious ones and minimise blocking legitimate users.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"_cf_bm"),(0,o.kt)("td",{parentName:"tr",align:null},"30 minutes"),(0,o.kt)("td",{parentName:"tr",align:null},"This cookie detects behaviour anomalies to identify and mitigate automated bad bot traffic")))),(0,o.kt)("h2",{id:"data-processing"},"Data processing"),(0,o.kt)("p",null,"I only collect general information such as pages visited, time spent on pages, heat-map of activity on the site, information about the browser, country where you are located, etc. The data collected is used in the aggregated form to improve this website and spot trends without possibility to identify individuals."),(0,o.kt)("p",null,"Anonymised information mentioned above is aggregated and stored in a central database provided by ",(0,o.kt)("a",{parentName:"p",href:"https://www.google.com/analytics/"},"Google Analytics Solutions"),". It is erased on a regular, rolling basis (after 26 months of inactivity)."),(0,o.kt)("p",null,"Additionally, if you want to stop even this level of processing, most web browsers allow control over most cookies through the browser settings. You may delete the cookies or let them expire. You can also opt-out Google tracking across all websites by downloading the Google Analytics opt-out ",(0,o.kt)("a",{parentName:"p",href:"https://tools.google.com/dlpage/gaoptout"},"browser add-on"),". If you have any additional questions regarding data processing on this website, feel free to ",(0,o.kt)("a",{parentName:"p",href:"mailto:legal@mateuszdabrowski.pl"},"send me an e","\u2011","mail"),"."),(0,o.kt)("h2",{id:"changes"},"Changes"),(0,o.kt)("p",null,"I may occasionally update this Privacy Policy to add information about new tools used on the website that may have access to aggregated data."))}m.isMDXComponent=!0},1872:(e,t,a)=>{a.d(t,{m:()=>r});var n=a(7294);const o="leadText_qzwo",r=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:o},t))}}}]); \ No newline at end of file diff --git a/assets/js/06bea203.bb59e779.js b/assets/js/06bea203.bb59e779.js new file mode 100644 index 000000000..6897a1508 --- /dev/null +++ b/assets/js/06bea203.bb59e779.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8845],{6025:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>d,toc:()=>c});var i=o(5893),s=o(1151),a=o(1872);const n={id:"privacy",title:"Privacy",description:"Legal stuff. Short and simple"},r=void 0,d={id:"privacy",title:"Privacy",description:"Legal stuff. Short and simple",source:"@site/sites/privacy.mdx",sourceDirName:".",slug:"/privacy",permalink:"/sites/privacy",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/privacy.mdx",tags:[],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1616337447,formattedLastUpdatedAt:"Mar 21, 2021",frontMatter:{id:"privacy",title:"Privacy",description:"Legal stuff. Short and simple"}},l={},c=[{value:"TL;DR",id:"tldr",level:2},{value:"Cookies",id:"cookies",level:2},{value:"Google Analytics",id:"google-analytics",level:3},{value:"Cloudflare",id:"cloudflare",level:3},{value:"Data processing",id:"data-processing",level:2},{value:"Changes",id:"changes",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.m,{content:"Legal stuff. Short and simple."}),"\n",(0,i.jsx)(t.h2,{id:"tldr",children:"TL;DR"}),"\n",(0,i.jsxs)(t.p,{children:["I do not collect your personal data and do not share any information with third parties except for non-personally identifiable, aggregated data used by ",(0,i.jsx)(t.a,{href:"https://www.google.com/analytics/",children:"Google Analytics Solutions"})," and ",(0,i.jsx)(t.a,{href:"https://www.cloudflare.com/",children:"Cloudflare"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"cookies",children:"Cookies"}),"\n",(0,i.jsxs)(t.p,{children:["Cookies are a small text file that is placed on your computer by websites that you visit. They are widely used to make websites work and provide analytical data to the owner of the site. I'm using cookies from two different sources: ",(0,i.jsx)(t.a,{href:"https://www.google.com/analytics/",children:"Google Analytics Solutions"})," and ",(0,i.jsx)(t.a,{href:"https://www.cloudflare.com/",children:"Cloudflare"}),"."]}),"\n",(0,i.jsx)(t.admonition,{title:"Check yourself",type:"note",children:(0,i.jsxs)(t.p,{children:["You can check what cookies are in use on any page and what are their values by going to Developer Tools in your browser, navigating to Console tab, writing ",(0,i.jsx)(t.code,{children:"document.cookies"})," and confirming with Enter. Many browsers also have a more detailed view in the Developer Tools. For example, Safari will show you more information about Cookies in the Storage tab."]})}),"\n",(0,i.jsx)(t.h3,{id:"google-analytics",children:"Google Analytics"}),"\n",(0,i.jsx)(t.p,{children:"Google Analytics is a web analytics service that tracks and reports website traffic."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Cookie Name"}),(0,i.jsx)(t.th,{children:"Expiration"}),(0,i.jsx)(t.th,{children:"Purpose"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"_ga"}),(0,i.jsx)(t.td,{children:"2 years"}),(0,i.jsx)(t.td,{children:"This cookie uses a random number and a timestamp combination to create a unique and anonymous identifier of each visitor"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"_gid"}),(0,i.jsx)(t.td,{children:"24 hours"}),(0,i.jsx)(t.td,{children:"This cookie works just like the one above but is focused on mapping visitor behaviour on the website"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"_gat"}),(0,i.jsx)(t.td,{children:"1 minute"}),(0,i.jsx)(t.td,{children:"This cookie throttles request rate to Google Analytics server"})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"To further protect your privacy, I am not sharing visitor IP with Google Analytics and have Google Advertising Features switched off."}),"\n",(0,i.jsx)(t.h3,{id:"cloudflare",children:"Cloudflare"}),"\n",(0,i.jsx)(t.p,{children:"Cloudflare is service providing security and protection for websites."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Cookie Name"}),(0,i.jsx)(t.th,{children:"Expiration"}),(0,i.jsx)(t.th,{children:"Purpose"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"_cfduid"}),(0,i.jsx)(t.td,{children:"11 days"}),(0,i.jsx)(t.td,{children:"This cookie collects anonymised (one-way hashed) visitor IP addresses to detect malicious ones and minimise blocking legitimate users."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"_cf_bm"}),(0,i.jsx)(t.td,{children:"30 minutes"}),(0,i.jsx)(t.td,{children:"This cookie detects behaviour anomalies to identify and mitigate automated bad bot traffic"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"data-processing",children:"Data processing"}),"\n",(0,i.jsx)(t.p,{children:"I only collect general information such as pages visited, time spent on pages, heat-map of activity on the site, information about the browser, country where you are located, etc. The data collected is used in the aggregated form to improve this website and spot trends without possibility to identify individuals."}),"\n",(0,i.jsxs)(t.p,{children:["Anonymised information mentioned above is aggregated and stored in a central database provided by ",(0,i.jsx)(t.a,{href:"https://www.google.com/analytics/",children:"Google Analytics Solutions"}),". It is erased on a regular, rolling basis (after 26 months of inactivity)."]}),"\n",(0,i.jsxs)(t.p,{children:["Additionally, if you want to stop even this level of processing, most web browsers allow control over most cookies through the browser settings. You may delete the cookies or let them expire. You can also opt-out Google tracking across all websites by downloading the Google Analytics opt-out ",(0,i.jsx)(t.a,{href:"https://tools.google.com/dlpage/gaoptout",children:"browser add-on"}),". If you have any additional questions regarding data processing on this website, feel free to ",(0,i.jsx)(t.a,{href:"mailto:legal@mateuszdabrowski.pl",children:"send me an e\u2011mail"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"changes",children:"Changes"}),"\n",(0,i.jsx)(t.p,{children:"I may occasionally update this Privacy Policy to add information about new tools used on the website that may have access to aggregated data."})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,t,o)=>{o.d(t,{m:()=>a});o(7294);const i="leadText_qzwo";var s=o(5893);const a=e=>{let{content:t}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:i,children:t})})}},1151:(e,t,o)=>{o.d(t,{Z:()=>r,a:()=>n});var i=o(7294);const s={},a=i.createContext(s);function n(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:n(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/09792c4b.6060a3e7.js b/assets/js/09792c4b.060c4844.js similarity index 89% rename from assets/js/09792c4b.6060a3e7.js rename to assets/js/09792c4b.060c4844.js index 19ffe4834..3f11ec639 100644 --- a/assets/js/09792c4b.6060a3e7.js +++ b/assets/js/09792c4b.060c4844.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6606],{2521:e=>{e.exports=JSON.parse('{"label":"AppExchange","permalink":"/docs/tags/app-exchange","allTagsPath":"/docs/tags","count":2,"items":[{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","permalink":"/docs/config/sfmc-appexchange-solutions"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6606],{2521:e=>{e.exports=JSON.parse('{"label":"AppExchange","permalink":"/docs/tags/app-exchange","allTagsPath":"/docs/tags","count":2,"items":[{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","permalink":"/docs/config/sfmc-appexchange-solutions"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/0ae20921.4f282c77.js b/assets/js/0ae20921.4f282c77.js new file mode 100644 index 000000000..538b21bb7 --- /dev/null +++ b/assets/js/0ae20921.4f282c77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[130],{2250:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var i=n(5893),o=n(1151),s=n(1872);const a={id:"sfmc-contact-deletion",title:"SFMC Contact Deletion",sidebar_label:"Contact Deletion Process",description:"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.",image:"img/og/og-image-sfmc-contact-deletion.png",tags:["Marketing Cloud","Snippet","SSJS","SQL","Data Extensions","Data Management"],toc_max_heading_level:4},l=void 0,r={id:"config/sfmc-contact-deletion",title:"SFMC Contact Deletion",description:"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.",source:"@site/docs/config/sfmc-contact-deletion.mdx",sourceDirName:"config",slug:"/config/sfmc-contact-deletion",permalink:"/docs/config/sfmc-contact-deletion",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-contact-deletion.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Data Management",permalink:"/docs/tags/data-management"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1696677943,formattedLastUpdatedAt:"Oct 7, 2023",frontMatter:{id:"sfmc-contact-deletion",title:"SFMC Contact Deletion",sidebar_label:"Contact Deletion Process",description:"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.",image:"img/og/og-image-sfmc-contact-deletion.png",tags:["Marketing Cloud","Snippet","SSJS","SQL","Data Extensions","Data Management"],toc_max_heading_level:4},sidebar:"docs",previous:{title:"Power of Code Resources",permalink:"/docs/config/sfmc-code-resource"},next:{title:"Enhanced Send Log",permalink:"/docs/config/sfmc-enhanced-send-log"}},c={},d=[{value:"Outline",id:"outline",level:2},{value:"Contact Deletion in SFMC",id:"contact-deletion-in-sfmc",level:2},{value:"Enable Contact Deletion",id:"enable-contact-deletion",level:3},{value:"Manual Contact Deletion",id:"manual-contact-deletion",level:3},{value:"Delete contacts from All Contacts",id:"delete-contacts-from-all-contacts",level:4},{value:"Delete all contacts from List or Data Extension",id:"delete-all-contacts-from-list-or-data-extension",level:4},{value:"SFMC API Contact Deletion",id:"sfmc-api-contact-deletion",level:3},{value:"Contact Deletion by Contact ID",id:"contact-deletion-by-contact-id",level:4},{value:"Contact Deletion by Contact Key",id:"contact-deletion-by-contact-key",level:4},{value:"Contact Deletion using Data Extension",id:"contact-deletion-using-data-extension",level:4},{value:"Contact Deletion with Automation Studio",id:"contact-deletion-with-automation-studio",level:3},{value:"Contact Deletion Pending Data Extension",id:"contact-deletion-pending-data-extension",level:4},{value:"Contact Deletion Script Activity",id:"contact-deletion-script-activity",level:4},{value:"Monitor Contact Deletion Process",id:"monitor-contact-deletion-process",level:3},{value:"Which contacts should you delete?",id:"which-contacts-should-you-delete",level:2},{value:"Contacts deleted in Salesforce CRM",id:"contacts-deleted-in-salesforce-crm",level:3},{value:"Leads and Users deleted or filtered in Salesforce CRM",id:"leads-and-users-deleted-or-filtered-in-salesforce-crm",level:3},{value:"Contactless Contacts",id:"contactless-contacts",level:3},{value:"Zombie Contacts",id:"zombie-contacts",level:3},{value:"Contact Deletion Archive",id:"contact-deletion-archive",level:2},{value:"Contact Deletion Archive Data Extension",id:"contact-deletion-archive-data-extension",level:3},{value:"Contact Deletion Archive Query Activity",id:"contact-deletion-archive-query-activity",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.m,{content:"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it."}),"\n",(0,i.jsx)(t.h2,{id:"outline",children:"Outline"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"#contact-deletion-in-sfmc",children:"Learn everything about SFMC Contact Deletion Process"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"#which-contacts-should-you-delete",children:"Check out sample segments just waiting to be deleted"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"#contact-deletion-archive",children:"Create privacy-focused Contact Deletion Archive"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"contact-deletion-in-sfmc",children:"Contact Deletion in SFMC"}),"\n",(0,i.jsx)(t.p,{children:"Salesforce Marketing Cloud makes Contact Deletion not only easy but also powerful. The out-of-the-box solution does most of the heavy lifting, leaving us the decision of who and when should be deleted from our platform."}),"\n",(0,i.jsx)(t.p,{children:"But before we start the cleanup, let's see why we should do it in the first place. It's not easy to get new opted-in Contacts, so we shouldn't take removal lightly. However, there are multiple good reasons to do that:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Compliance"}),": Many legal systems (like European GDPR) allow subscribers to request contact deletion."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Licensing"}),": A marketing Cloud licence allows you to store a limited number of Contacts."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Performance"}),": The more Contacts you have, the slower will be your Journeys and Automations."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Cost"}),": Sending to dead Contacts means burning SuperMessages without any value in return."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Deliverability"}),": Sending to dead or bad quality Contacts hurts your email deliverability and inbox placement."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Analytics"}),": Bad quality data negatively impacts the quality of your analytics, making it harder to make the right decisions."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Once we know why we should delete, it's time to see what exactly is the built-in SFMC Contact Deletion process doing behind the scenes:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["It manages ",(0,i.jsx)(t.strong,{children:"supression period for contacts"})," requested for deletion:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Suppression in ",(0,i.jsx)(t.strong,{children:"Contact Builder"})," hides the contacts and blocks the possibility to create a new one with the same Contact Key."]}),"\n",(0,i.jsxs)(t.li,{children:["Suppression in ",(0,i.jsx)(t.strong,{children:"Email Studio"})," hides the contacts and blocks them from receiving Emails or interacting with Triggered Sends."]}),"\n",(0,i.jsxs)(t.li,{children:["Suppression in ",(0,i.jsx)(t.strong,{children:"Journey Builder"})," blocks the contacts from entering Journeys and Automations."]}),"\n",(0,i.jsxs)(t.li,{children:["Suppression in ",(0,i.jsx)(t.strong,{children:"Mobile Studio"})," (MobileConnect, MobilePush, GroupConnect) hides the contacts and blocks them from receiving any communication and doing any interactions (exception - block requests are still processed)."]}),"\n",(0,i.jsxs)(t.li,{children:["Suppression in ",(0,i.jsx)(t.strong,{children:"Einstein"})," hides the contacts and blocks both Recommendations and Analytics."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["After the suppression period, it ",(0,i.jsx)(t.strong,{children:"deletes contacts"})," from:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Sendable Data Extensions"}),"\n",(0,i.jsx)(t.li,{children:"Populations"}),"\n",(0,i.jsx)(t.li,{children:"Lists"}),"\n",(0,i.jsx)(t.li,{children:"Groups"}),"\n",(0,i.jsx)(t.li,{children:"Journeys"}),"\n",(0,i.jsx)(t.li,{children:"Automations"}),"\n",(0,i.jsx)(t.li,{children:"Einstein"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"As you can see, a lot out-of-the-box. But what is the purpose of the suppression period when we just want to delete some contacts?"}),"\n",(0,i.jsxs)(t.p,{children:["Contact Deletion is irreversible. Once we remove the contact, it is deleted for good, and there is no option to bring it back. Sure, you can add it again, but it won't have any past data. So, if you are not confident in your Contact Deletion process, you might ",(0,i.jsx)(t.a,{href:"#enable-contact-deletion",children:"configure suppression period"})," to have some time for reflection. That's why it is there by default (currently at two days). If you find a mistake during that period, put a Support ticket as soon as possible with high priority."]}),"\n",(0,i.jsx)(t.p,{children:"There is also a second reason for the suppression period. Depending on the parallel processes run in your Marketing Cloud, the number of contacts requested for deletion, as well as the volume of data in the system, SFMC Contact Deletion can be a very time-consuming process. Suppression makes sure that even if it takes longer than you would like, the Contact will not get any unwanted communication."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"Few places are not targeted by the out-of-the-box Marketing Cloud Contact Deletion process:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Non-Sendable Data Extensions \xbb ",(0,i.jsx)(t.em,{children:"Can be removed with either retention or heavy custom scripting"})]}),"\n",(0,i.jsxs)(t.li,{children:["Synchronized Data Extensions \xbb ",(0,i.jsx)(t.em,{children:"Can be removed in the source system"})]}),"\n",(0,i.jsxs)(t.li,{children:["Triggered Send Lists \xbb ",(0,i.jsxs)(t.em,{children:["Can be removed using ",(0,i.jsx)(t.a,{href:"#sfmc-api-contact-deletion",children:"API method"})]})]}),"\n"]}),(0,i.jsx)(t.p,{children:"It also ignores any data that is not connected to the deleted contact by Contact Key / Subscriber Key / Contact ID, so be sure to have a proper deduplication process in place for compliance."})]}),"\n",(0,i.jsx)(t.h3,{id:"enable-contact-deletion",children:"Enable Contact Deletion"}),"\n",(0,i.jsx)(t.p,{children:"To use the Contact Deletion Process in Salesforce Marketing Cloud, you must enable it first. To do this, you need to have a Marketing Cloud Administrator role."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Go to parent Business Unit."}),"\n",(0,i.jsx)(t.li,{children:"Go to Audience Builder \xbb Contact Builder."}),"\n",(0,i.jsx)(t.li,{children:"Click Contacts Configuration in the top menu."}),"\n",(0,i.jsx)(t.li,{children:"Enable the process in the Contact Delete section."}),"\n",(0,i.jsx)(t.li,{children:"Configure suppression period by clicking Manage Settings (default is two days)."}),"\n",(0,i.jsx)(t.li,{children:"Save."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"If you want the Contact Deletion process to trigger automatically after starting it, set the suppression period to 0 days. It will be added to the processing queue instantly after the request."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"For the most popular SFMC tenant type - Enterprise 2.0 - the deletion must happen at the parent level and automatically apply across all Business Units."}),(0,i.jsxs)(t.p,{children:["If you have a different tenant type, check the official ",(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_cab_contact_deletion.htm&type=5",children:"documentation"}),"."]})]}),"\n",(0,i.jsx)(t.h3,{id:"manual-contact-deletion",children:"Manual Contact Deletion"}),"\n",(0,i.jsxs)(t.p,{children:["Once the Contact Deletion is ",(0,i.jsx)(t.a,{href:"#enable-contact-deletion",children:"enabled and configured"}),", you can start cleaning. The easiest way is to leverage manual deletion options available in the Contact Builder."]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["Manual Contact Deletion in Email Studio will remove the contact only from Email Studio. To trigger the Contact Deletion Process, you must leverage Contact Builder or ",(0,i.jsx)(t.a,{href:"#sfmc-api-contact-deletion",children:"API method"}),"."]})}),"\n",(0,i.jsx)(t.h4,{id:"delete-contacts-from-all-contacts",children:"Delete contacts from All Contacts"}),"\n",(0,i.jsx)(t.p,{children:"This method is best if you have just a few contacts you want to delete. It's simple, it's fast, it's constrained."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Go to parent Business Unit."}),"\n",(0,i.jsx)(t.li,{children:"Go to Audience Builder \xbb Contact Builder."}),"\n",(0,i.jsx)(t.li,{children:"Click All Contacts in the top menu."}),"\n",(0,i.jsx)(t.li,{children:"Find a contact(s) you want to delete and click checkboxes next to them."}),"\n",(0,i.jsx)(t.li,{children:"Click the trash icon and select Delete selected contacts."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Using this method, you can delete multiple contacts, but only from a single page of results. If you navigate to the next page of results, previously checked contacts will no longer be part of your selection."}),"\n",(0,i.jsx)(t.p,{children:"If you want to remove more contacts, leverage the Data Extension method shared below."}),"\n",(0,i.jsx)(t.h4,{id:"delete-all-contacts-from-list-or-data-extension",children:"Delete all contacts from List or Data Extension"}),"\n",(0,i.jsxs)(t.p,{children:["This method will be better if you want to remove a significant number of contacts once but don't want the hassle of the most potent ",(0,i.jsx)(t.a,{href:"#sfmc-api-contact-deletion",children:"API method"}),"."]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Go to parent Business Unit."}),"\n",(0,i.jsx)(t.li,{children:"Go to Audience Builder \xbb Contact Builder."}),"\n",(0,i.jsx)(t.li,{children:"Click All Contacts in the top menu."}),"\n",(0,i.jsx)(t.li,{children:"Without selecting any contact, click the trash icon."}),"\n",(0,i.jsx)(t.li,{children:"Click Delete contacts from list / data extension depending on your needs."}),"\n",(0,i.jsx)(t.li,{children:"Select the Sendable Data Extension used for the Contact Deletion process."}),"\n",(0,i.jsx)(t.li,{children:"Decide whether the Data Extension itself should stay in the system after SFMC deletes the contacts."}),"\n",(0,i.jsx)(t.li,{children:"Click Delete Contacts."}),"\n",(0,i.jsx)(t.li,{children:"Review and confirm by clicking Delete."}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["This method allows you to delete up to one million contacts per operation. If you want to remove more than that, you will have to run the above steps multiple times or leverage ",(0,i.jsx)(t.a,{href:"#contact-deletion-with-automation-studio",children:"contact deletion automation"}),"."]})}),"\n",(0,i.jsx)(t.h3,{id:"sfmc-api-contact-deletion",children:"SFMC API Contact Deletion"}),"\n",(0,i.jsx)(t.p,{children:"Previous methods are nice, but they require manual triggering in the Salesforce Marketing cloud each time you run the Contact Deletion Process. There are, however, many use cases where you might want to trigger it automatically - for example, from a different system responsible for managing privacy."}),"\n",(0,i.jsx)(t.p,{children:"Thankfully, SFMC offers a solution for that as well with REST API. To implement it:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Create authentication endpoint with correct permissions with Installed Package","\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Go to Setup in Parent Business Unit."}),"\n",(0,i.jsx)(t.li,{children:"Within the Platform Tools section, roll out Apps and click Installed Packages."}),"\n",(0,i.jsx)(t.li,{children:"Click New in the top right."}),"\n",(0,i.jsx)(t.li,{children:"Provide a meaningful name and description for your Installed Package."}),"\n",(0,i.jsx)(t.li,{children:"Add Component - API Integration."}),"\n",(0,i.jsx)(t.li,{children:"Select the Server-to-Server integration type."}),"\n",(0,i.jsx)(t.li,{children:"Select Read and Write for List and Subscribers within the Contacts section. Write is needed for Deletion. Read - for checking the deletion status."}),"\n",(0,i.jsx)(t.li,{children:"Click Save."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Copy Client Id, Client Secret and Client Base (the unique string in either of the API URIs that is between ",(0,i.jsx)(t.code,{children:"https://"})," and API type)."]}),"\n",(0,i.jsxs)(t.li,{children:["Leverage the contact deletion endpoint in the solution of your choice: ",(0,i.jsx)(t.code,{children:"https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"This single endpoint will allow you to trigger the Contact Deletion process in three ways by adding a query string at the end. All scenarios will use the same Method, Content-Type and Authorization, but the endpoint and payload will be different:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Method: POST"}),"\n",(0,i.jsx)(t.li,{children:"Content-Type: application/json"}),"\n",(0,i.jsx)(t.li,{children:"Authorization: Bearer TOKEN"}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"contact-deletion-by-contact-id",children:"Contact Deletion by Contact ID"}),"\n",(0,i.jsxs)(t.p,{children:["Endpoint: ",(0,i.jsx)(t.code,{children:"https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=ids"})]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Delete by Contact ID Payload"',children:'{\n "values": [1111111, 22222222],\n "deleteOperationType": "ContactAndAttributes"\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["This endpoint's ",(0,i.jsx)(t.code,{children:"values"})," is an array of Contact IDs (integers)."]}),"\n",(0,i.jsx)(t.h4,{id:"contact-deletion-by-contact-key",children:"Contact Deletion by Contact Key"}),"\n",(0,i.jsxs)(t.p,{children:["Endpoint: ",(0,i.jsx)(t.code,{children:"https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=keys"})]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Delete by Contact Key Payload"',children:'{\n "values": ["A1B2C3D4", "E5F6G7H8"],\n "deleteOperationType": "ContactAndAttributes"\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["This endpoint's ",(0,i.jsx)(t.code,{children:"values"})," is an array of Contact Keys (strings)."]}),"\n",(0,i.jsx)(t.h4,{id:"contact-deletion-using-data-extension",children:"Contact Deletion using Data Extension"}),"\n",(0,i.jsxs)(t.p,{children:["Endpoint: ",(0,i.jsx)(t.code,{children:"https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=listReference"})]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Delete using Data Extension Payload"',children:'{\n "deleteOperationType": "ContactAndAttributes",\n "targetList": {\n "listType": { "listTypeID": 3 },\n "listKey": "contactDeletionDEKey"\n },\n "deleteListWhenCompleted": false,\n "deleteListContentsWhenCompleted": true\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"In this endpoint, you have control over three values:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"listKey"}),": the external key of the Data Extension you use for the Contact Deletion process."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"deleteListWhenCompleted"}),": when ",(0,i.jsx)(t.code,{children:"true"}),", it will delete the Data Extension during the Contact Deletion process."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"deleteListContentsWhenCompleted"}),": when ",(0,i.jsx)(t.code,{children:"true"})," it will delete records from the Data Extensions during Contact Deletion process."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"contact-deletion-with-automation-studio",children:"Contact Deletion with Automation Studio"}),"\n",(0,i.jsxs)(t.p,{children:["With the ",(0,i.jsx)(t.a,{href:"#sfmc-api-contact-deletion",children:"API Contact Deletion"})," we are not limited to external triggers. We can also leverage AMPScript or SSJS to trigger it directly from Marketing Cloud."]}),"\n",(0,i.jsx)(t.p,{children:"The most popular use case is a Contact Deletion Automation scheduled to clean up the database regularly. It's a great idea to keep your SFMC instance clean without much of a hassle."}),"\n",(0,i.jsx)(t.p,{children:"My recommended approach is to create a dedicated Pending Contact Deletion Shared Data Extension that will store records to be deleted along with some context and remove its content nightly with the Script Activity."}),"\n",(0,i.jsx)(t.h4,{id:"contact-deletion-pending-data-extension",children:"Contact Deletion Pending Data Extension"}),"\n",(0,i.jsx)(t.p,{children:"If you want to capture contacts-to-be-deleted from multiple Business Units, make it Shared Data Extension."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"DataType"}),(0,i.jsx)(t.th,{children:"Default Value"}),(0,i.jsx)(t.th,{children:"Length"}),(0,i.jsx)(t.th,{children:"Nullable"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"\ud83d\udd11 SubscriberKey"}),(0,i.jsx)(t.td,{children:"Text"}),(0,i.jsx)(t.td,{}),(0,i.jsx)(t.td,{children:"18"}),(0,i.jsx)(t.td,{children:"No"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"DeletionReason"}),(0,i.jsx)(t.td,{children:"Text"}),(0,i.jsx)(t.td,{}),(0,i.jsx)(t.td,{children:"50"}),(0,i.jsx)(t.td,{children:"Yes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"DeletionDate"}),(0,i.jsx)(t.td,{children:"Date"}),(0,i.jsx)(t.td,{children:"Current date"}),(0,i.jsx)(t.td,{}),(0,i.jsx)(t.td,{children:"Yes"})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:["External Key: ",(0,i.jsx)(t.code,{children:"contact-deletion-pending-de"}),"\nSendable: ",(0,i.jsx)(t.code,{children:"true"})]}),"\n",(0,i.jsxs)(t.p,{children:["You don't need anything but the Subscriber Key for essential contact deletion. However, I prefer to add a bit more context that I can leverage in the ",(0,i.jsx)(t.a,{href:"#contact-deletion-archive",children:"Contact Deletion archive"})," described later in this article."]}),"\n",(0,i.jsx)(t.h4,{id:"contact-deletion-script-activity",children:"Contact Deletion Script Activity"}),"\n",(0,i.jsxs)(t.p,{children:["Below you can find ready-to-use SSJS snippet for Script Activity. Change ",(0,i.jsx)(t.code,{children:"clientSecret"}),", ",(0,i.jsx)(t.code,{children:"clientID"})," and ",(0,i.jsx)(t.code,{children:"clientBase"})," variables to data you saved during ",(0,i.jsx)(t.a,{href:"#sfmc-api-contact-deletion",children:"Installed Package configuration"}),". If needed, change also the ",(0,i.jsx)(t.code,{children:"contactDeletionDEKey"}),", ",(0,i.jsx)(t.code,{children:"errorDE"})," and ",(0,i.jsx)(t.code,{children:"automationName"})," variables to reflect your configuration."]}),"\n",(0,i.jsxs)(t.p,{children:["To learn more about ",(0,i.jsx)(t.code,{children:"errorDE"})," check my ",(0,i.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs#error-logging",children:"debugging guide"}),". You will find there also details about ",(0,i.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs#error-handler-function",children:"helper functions"})," from the script."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'title="Contact Deletion Script Activity SSJS Snippet"',children:" + * ^ + * ``` + * + * @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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (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; + } +}; + + + +/***/ }), + +/***/ 52494: +/***/ ((__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 */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ k: () => (/* binding */ addEdgeMarkers), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33183); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_04fb0060_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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "
    "); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_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_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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 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_04fb0060_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_04fb0060_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 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 = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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 */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + 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_04fb0060_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); + } + 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_04fb0060_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 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + 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 */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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, boundryNode) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + 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); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("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 */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_04fb0060_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, "\\)"); + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 74852: +/***/ ((__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__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(52494); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(33183); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + 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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_04fb0060_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_04fb0060_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) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_04fb0060_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 */ .c(clusterGraph)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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_04fb0060_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); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + 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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_04fb0060_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) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_04fb0060_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)); + const newEl = o.elem; + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_5ec2587c_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_04fb0060_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + await recursiveRender(elem, graph, diagramtype, id); +}; + + + +/***/ }), + +/***/ 42924: +/***/ ((__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__(64218); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + this.parseMember(sanitizedInput); + } + getDisplayDetails() { + let displayText = this.visibility + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.id); + if (this.memberType === "method") { + displayText += `(${(0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.parameters.trim())})`; + if (this.returnType) { + displayText += " : " + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.v)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const splitClassNameAndType = function(_id) { + const id = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const { className, type } = splitClassNameAndType(id); + if (Object.hasOwn(classes, className)) { + return; + } + const name = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relation.relationTitle2 = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const config = (0,_mermaid_04fb0060_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_04fb0060_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 */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.r, + 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/1765.bbf8e0e8.js b/assets/js/1765.bbf8e0e8.js deleted file mode 100644 index 584255a15..000000000 --- a/assets/js/1765.bbf8e0e8.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 1765.bbf8e0e8.js.LICENSE.txt */ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1765],{5303:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(895));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign||function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(895));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign||function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(895));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign||function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(895));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign||function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(5697));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){var t=e.size,n=void 0===t?24:t,o=e.fill,i=void 0===o?"#000":o,a=e.className,s=e.path;return r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",className:a},r.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),r.default.createElement("path",{fill:i,d:s}))};a.propTypes={size:o.default.number,fill:o.default.string,className:o.default.string,path:o.default.string.isRequired};var s=a;t.default=s},1609:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=d();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(7294)),o=u(n(5697)),i=n(3824),a=u(n(183)),s=n(5473),l=n(5756),c=n(6568);function u(e){return e&&e.__esModule?e:{default:e}}function d(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return d=function(){return e},e}function f(){return f=Object.assign||function(e){for(var t=1;t1?(0,c.guessMaxImageWidth)(n.state.dimensions):0,supportsWebp:c.supportsWebp}),t=n.props.getUrl,r=t?t(e):e.src,o=n.props.shouldAutoDownload(function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var r=s(n(7294)),o=s(n(1609)),i=s(n(4490)),a=s(n(663));function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u=function(e){return r.default.createElement(o.default,e)};u.defaultProps=function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=l();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(7294)),o=s(n(5697)),i=s(n(5776)),a=n(5473);function s(e){return e&&e.__esModule?e:{default:e}}function l(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return l=function(){return e},e}function c(){return c=Object.assign||function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;t.default=function(){for(var e,t=[],n=arguments.length,r=new Array(n),o=0;o1?t.join(" "):t[0],style:e}}},5473:(e,t)=>{t.__esModule=!0,t.loadStates=t.icons=void 0;var n="loading",r="loaded",o="error",i={load:"load",loading:n,loaded:r,error:o,noicon:"noicon",offline:"offline"};t.icons=i;var a={initial:"initial",loading:n,loaded:r,error:o};t.loadStates=a},6568:(e,t)=>{t.__esModule=!0,t.fallbackParams=t.selectSrc=t.supportsWebp=t.bytesToSize=t.guessMaxImageWidth=t.nativeConnection=t.ssr=void 0;var n="undefined"==typeof window||"ReactSnap"===window.navigator.userAgent;t.ssr=n;var r=!n&&!!window.navigator.connection;t.nativeConnection=r;t.guessMaxImageWidth=function(e,t){if(n)return 0;t||(t=window);var r,o=e.width,i=t.screen,a=i.width,s=i.height,l=document.documentElement,c=t.innerWidth||l.clientWidth,u=t.innerHeight||l.clientHeight,d=t.devicePixelRatio||1;if(a>c){var f=document.getElementsByTagName("body")[0],p=c-o;r=(f.clientHeight>u||f.clientHeight>s)&&p<=15?a-p:o/c*a}else r=o;return r*d};t.bytesToSize=function(e){var t=["Bytes","KB","MB","GB","TB"];if(0===e)return"n/a";var n=parseInt(Math.floor(Math.log(e)/Math.log(1024)),10);return 0===n?e+" "+t[n]:(e/Math.pow(1024,n)).toFixed(1)+" "+t[n]};var o=function(){if(n)return!1;var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))&&0===e.toDataURL("image/webp").indexOf("data:image/webp")}();t.supportsWebp=o;var i=function(e){return"webp"===e.format||e.src&&e.src.match(/\.webp($|\?.*)/i)};t.selectSrc=function(e){var t,n,r=e.srcSet,o=e.maxImageWidth,a=e.supportsWebp;if(0===r.length)throw new Error("Need at least one item in srcSet");if(a)0===(t=r.filter(i)).length&&(t=r);else if(0===(t=r.filter((function(e){return!i(e)}))).length)throw new Error("Need at least one supported format item in srcSet");var s=t.filter((function(e){return e.width>=o}));return 0===s.length?(s=t,n=Math.max.apply(null,s.map((function(e){return e.width})))):n=Math.min.apply(null,s.map((function(e){return e.width}))),t.filter((function(e){return e.width===n}))[0]};t.fallbackParams=function(e){var t=e.srcSet,r=e.getUrl;if(!n)return{};var o=t.filter((function(e){return!i(e)})),a=o[0];return{nsSrcSet:o.map((function(e){return(r?r(e):e.src)+" "+e.width+"w"})).join(","),nsSrc:r?r(a):a.src,ssr:n}}},4490:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r,o=c(n(5303)),i=c(n(4442)),a=c(n(2266)),s=c(n(6818)),l=n(5473);function c(e){return e&&e.__esModule?e:{default:e}}var u=l.icons.load,d=l.icons.loading,f=l.icons.loaded,p=l.icons.error,h=l.icons.noicon,v=l.icons.offline,g=((r={})[u]=o.default,r[d]=s.default,r[f]=null,r[p]=a.default,r[h]=null,r[v]=i.default,r);t.default=g},5756:(e,t,n)=>{t.__esModule=!0,t.xhrLoader=t.imageLoader=t.timeout=t.combineCancel=void 0;var r=n(3646);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.combineCancel=function(e,t){if(!t)return e;var n=e.then((function(e){return e}),(function(e){return e}));return n.cancel=function(){e.cancel(),t.cancel()},n};t.timeout=function(e){var t,n=new Promise((function(n){t=setTimeout(n,e)}));return n.cancel=function(){clearTimeout(t),t=void 0},n};var a=function(e){var t=new Image,n=new Promise((function(n,r){t.onload=n,t.onabort=t.onerror=function(){return r({})},t.src=e}));return n.cancel=function(){if(!t)throw new Error("Already canceled");t.onload=t.onabort=t.onerror=void 0,t.src="",t=void 0},n};t.imageLoader=a;t.xhrLoader=function(e,t){var n=new r.UnfetchAbortController,s=n.signal,l=new Promise((function(n,l){return(0,r.unfetch)(e,function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;t.default={placeholder:{backgroundSize:"cover",backgroundRepeat:"no-repeat",position:"relative"},img:{width:"100%",height:"auto",maxWidth:"100%",marginBottom:"-4px"},icon:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",textAlign:"center"},noscript:{position:"absolute",top:0,left:0}}},3646:(e,t)=>{t.__esModule=!0,t.unfetch=t.UnfetchAbortController=void 0;t.UnfetchAbortController=function(){var e=this;this.signal={onabort:function(){}},this.abort=function(){return e.signal.onabort()}};t.unfetch=function(e,t){return t=t||{},new Promise((function(n,r){var o=new XMLHttpRequest;for(var i in o.open(t.method||"get",e,!0),t.headers)o.setRequestHeader(i,t.headers[i]);function a(){var e,t=[],n=[],r={};return o.getAllResponseHeaders().replace(/^(.*?):\s*?([\s\S]*?)$/gm,(function(o,i,a){t.push(i=i.toLowerCase()),n.push([i,a]),e=r[i],r[i]=e?e+","+a:a})),{ok:2==(o.status/100|0),status:o.status,statusText:o.statusText,url:o.responseURL,clone:a,text:function(){return Promise.resolve(o.responseText)},json:function(){return Promise.resolve(o.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([o.response]))},headers:{keys:function(){return t},entries:function(){return n},get:function(e){return r[e.toLowerCase()]},has:function(e){return e.toLowerCase()in r}}}}o.withCredentials="include"===t.credentials,o.onload=function(){n(a())},o.onerror=r,t.signal&&(t.signal.onabort=function(){o.onerror=o.onload=void 0,o.abort()}),o.send(t.body)}))}},1065:(e,t,n)=>{var r;t.Z=void 0;var o=((r=n(7474))&&r.__esModule?r:{default:r}).default;t.Z=o},4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=c(n),p=o,h=d["".concat(l,".").concat(p)]||d[p]||f[p]||i;return n?r.createElement(h,a(a({ref:t},u),{},{components:n})):r.createElement(h,a({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{n.d(t,{Z:()=>l});var r=n(7462),o=n(7294),i=n(1065),a=n(7325);function s(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,a.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:n}=e,r=n?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const n=Math.floor(Math.log(e)/Math.log(1024));return 0===n?`${e} ${t[n]}`:`${(e/1024**n).toFixed(1)} ${t[n]}`}(n)})`:"";return(0,a.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:r})}case"offline":return(0,a.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,a.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,a.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function l(e){const{img:t,...n}=e;return"string"==typeof t||"default"in t?o.createElement("img",(0,r.Z)({src:"string"==typeof t?t:t.default},n)):o.createElement(i.Z,(0,r.Z)({},n,{height:t.src.height??100,width:t.src.width??100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>({...e,src:e.path}))),getMessage:s}))}},3824:(e,t,n)=>{n.r(t),n.d(t,{Waypoint:()=>j});var r=n(5068),o=!("undefined"==typeof window||!window.document||!window.document.createElement);var i=void 0;function a(){return void 0===i&&(i=function(){if(!o)return!1;if(!window.addEventListener||!window.removeEventListener||!Object.defineProperty)return!1;var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t)}catch(r){}return e}()),i}function s(e){e.handlers===e.nextHandlers&&(e.nextHandlers=e.handlers.slice())}function l(e){this.target=e,this.events={}}l.prototype.getEventHandlers=function(e,t){var n,r=String(e)+" "+String((n=t)?!0===n?100:(n.capture<<0)+(n.passive<<1)+(n.once<<2):0);return this.events[r]||(this.events[r]={handlers:[],handleEvent:void 0},this.events[r].nextHandlers=this.events[r].handlers),this.events[r]},l.prototype.handleEvent=function(e,t,n){var r=this.getEventHandlers(e,t);r.handlers=r.nextHandlers,r.handlers.forEach((function(e){e&&e(n)}))},l.prototype.add=function(e,t,n){var r=this,o=this.getEventHandlers(e,n);s(o),0===o.nextHandlers.length&&(o.handleEvent=this.handleEvent.bind(this,e,n),this.target.addEventListener(e,o.handleEvent,n)),o.nextHandlers.push(t);var i=!0;return function(){if(i){i=!1,s(o);var a=o.nextHandlers.indexOf(t);o.nextHandlers.splice(a,1),0===o.nextHandlers.length&&(r.target&&r.target.removeEventListener(e,o.handleEvent,n),o.handleEvent=void 0)}}};var c="__consolidated_events_handlers__";function u(e,t,n,r){e[c]||(e[c]=new l(e));var o=function(e){if(e)return a()?e:!!e.capture}(r);return e[c].add(t,n,o)}var d=n(7294),f=n(5834);function p(e,t){var n,r=(n=e,!isNaN(parseFloat(n))&&isFinite(n)?parseFloat(n):"px"===n.slice(-2)?parseFloat(n.slice(0,-2)):void 0);if("number"==typeof r)return r;var o=function(e){if("%"===e.slice(-1))return parseFloat(e.slice(0,-1))/100}(e);return"number"==typeof o?o*t:void 0}var h="above",v="inside",g="below",m="invisible";function w(e){return"string"==typeof e.type}var b;var y=[];function O(e){y.push(e),b||(b=setTimeout((function(){var e;for(b=null;e=y.shift();)e()}),0));var t=!0;return function(){if(t){t=!1;var n=y.indexOf(e);-1!==n&&(y.splice(n,1),!y.length&&b&&(clearTimeout(b),b=null))}}}var S="undefined"!=typeof window,E={debug:!1,scrollableAncestor:void 0,children:void 0,topOffset:"0px",bottomOffset:"0px",horizontal:!1,onEnter:function(){},onLeave:function(){},onPositionChange:function(){},fireOnRapidScroll:!0},j=function(e){function t(t){var n;return(n=e.call(this,t)||this).refElement=function(e){n._ref=e},n}(0,r.Z)(t,e);var o=t.prototype;return o.componentDidMount=function(){var e=this;S&&(this.cancelOnNextTick=O((function(){e.cancelOnNextTick=null;var t=e.props,n=t.children;t.debug;!function(e,t){if(e&&!w(e)&&!t)throw new Error(" needs a DOM element to compute boundaries. The child you passed is neither a DOM element (e.g.
    ) nor does it use the innerRef prop.\n\nSee https://goo.gl/LrBNgw for more info.")}(n,e._ref),e._handleScroll=e._handleScroll.bind(e),e.scrollableAncestor=e._findScrollableAncestor(),e.scrollEventListenerUnsubscribe=u(e.scrollableAncestor,"scroll",e._handleScroll,{passive:!0}),e.resizeEventListenerUnsubscribe=u(window,"resize",e._handleScroll,{passive:!0}),e._handleScroll(null)})))},o.componentDidUpdate=function(){var e=this;S&&this.scrollableAncestor&&(this.cancelOnNextTick||(this.cancelOnNextTick=O((function(){e.cancelOnNextTick=null,e._handleScroll(null)}))))},o.componentWillUnmount=function(){S&&(this.scrollEventListenerUnsubscribe&&this.scrollEventListenerUnsubscribe(),this.resizeEventListenerUnsubscribe&&this.resizeEventListenerUnsubscribe(),this.cancelOnNextTick&&this.cancelOnNextTick())},o._findScrollableAncestor=function(){var e=this.props,t=e.horizontal,r=e.scrollableAncestor;if(r)return function(e){return"window"===e?n.g.window:e}(r);for(var o=this._ref;o.parentNode;){if((o=o.parentNode)===document.body)return window;var i=window.getComputedStyle(o),a=(t?i.getPropertyValue("overflow-x"):i.getPropertyValue("overflow-y"))||i.getPropertyValue("overflow");if("auto"===a||"scroll"===a||"overlay"===a)return o}return window},o._handleScroll=function(e){if(this._ref){var t=this._getBounds(),n=function(e){return e.viewportBottom-e.viewportTop==0?m:e.viewportTop<=e.waypointTop&&e.waypointTop<=e.viewportBottom||e.viewportTop<=e.waypointBottom&&e.waypointBottom<=e.viewportBottom||e.waypointTop<=e.viewportTop&&e.viewportBottom<=e.waypointBottom?v:e.viewportBottom{var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),g=Symbol.for("react.offscreen");function m(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case i:case s:case a:case f:case p:return e;default:switch(e=e&&e.$$typeof){case u:case c:case d:case v:case h:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.isForwardRef=function(e){return m(e)===d}},5834:(e,t,n)=>{e.exports=n(5058)}}]); \ No newline at end of file diff --git a/assets/js/177.0cf72559.js b/assets/js/177.0cf72559.js new file mode 100644 index 000000000..409d12c15 --- /dev/null +++ b/assets/js/177.0cf72559.js @@ -0,0 +1,3439 @@ +"use strict"; +exports.id = 177; +exports.ids = [177]; +exports.modules = { + +/***/ 93177: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(72015); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + +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, 13], $V7 = [1, 14], $V8 = [1, 16], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 24], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 35], $Vn = [1, 36], $Vo = [1, 37], $Vp = [1, 38], $Vq = [1, 39], $Vr = [1, 41], $Vs = [1, 42], $Vt = [1, 43], $Vu = [1, 44], $Vv = [1, 45], $Vw = [1, 46], $Vx = [1, 4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $Vy = [4, 5, 16, 50, 52, 53], $Vz = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VA = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VB = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 48, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VC = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VD = [68, 69, 70], $VE = [1, 120]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "box_section": 10, "box_line": 11, "participant_statement": 12, "create": 13, "box": 14, "restOfLine": 15, "end": 16, "signal": 17, "autonumber": 18, "NUM": 19, "off": 20, "activate": 21, "actor": 22, "deactivate": 23, "note_statement": 24, "links_statement": 25, "link_statement": 26, "properties_statement": 27, "details_statement": 28, "title": 29, "legacy_title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "loop": 36, "rect": 37, "opt": 38, "alt": 39, "else_sections": 40, "par": 41, "par_sections": 42, "par_over": 43, "critical": 44, "option_sections": 45, "break": 46, "option": 47, "and": 48, "else": 49, "participant": 50, "AS": 51, "participant_actor": 52, "destroy": 53, "note": 54, "placement": 55, "text2": 56, "over": 57, "actor_pair": 58, "links": 59, "link": 60, "properties": 61, "details": 62, "spaceList": 63, ",": 64, "left_of": 65, "right_of": 66, "signaltype": 67, "+": 68, "-": 69, "ACTOR": 70, "SOLID_OPEN_ARROW": 71, "DOTTED_OPEN_ARROW": 72, "SOLID_ARROW": 73, "DOTTED_ARROW": 74, "SOLID_CROSS": 75, "DOTTED_CROSS": 76, "SOLID_POINT": 77, "DOTTED_POINT": 78, "TXT": 79, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 6: "SD", 13: "create", 14: "box", 15: "restOfLine", 16: "end", 18: "autonumber", 19: "NUM", 20: "off", 21: "activate", 23: "deactivate", 29: "title", 30: "legacy_title", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 36: "loop", 37: "rect", 38: "opt", 39: "alt", 41: "par", 43: "par_over", 44: "critical", 46: "break", 47: "option", 48: "and", 49: "else", 50: "participant", 51: "AS", 52: "participant_actor", 53: "destroy", 54: "note", 57: "over", 59: "links", 60: "link", 61: "properties", 62: "details", 64: ",", 65: "left_of", 66: "right_of", 68: "+", 69: "-", 70: "ACTOR", 71: "SOLID_OPEN_ARROW", 72: "DOTTED_OPEN_ARROW", 73: "SOLID_ARROW", 74: "DOTTED_ARROW", 75: "SOLID_CROSS", 76: "DOTTED_CROSS", 77: "SOLID_POINT", 78: "DOTTED_POINT", 79: "TXT" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [10, 0], [10, 2], [11, 2], [11, 1], [11, 1], [9, 1], [9, 2], [9, 4], [9, 2], [9, 4], [9, 3], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [45, 1], [45, 4], [42, 1], [42, 4], [40, 1], [40, 4], [12, 5], [12, 3], [12, 5], [12, 3], [12, 3], [24, 4], [24, 4], [25, 3], [26, 3], [27, 3], [28, 3], [63, 2], [63, 1], [58, 3], [58, 1], [55, 1], [55, 1], [17, 5], [17, 5], [17, 4], [22, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [56, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.apply($$[$0]); + return $$[$0]; + case 4: + case 9: + this.$ = []; + break; + case 5: + case 10: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 6: + case 7: + case 11: + case 12: + this.$ = $$[$0]; + break; + case 8: + case 13: + this.$ = []; + break; + case 15: + $$[$0].type = "createParticipant"; + this.$ = $$[$0]; + break; + case 16: + $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); + $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); + this.$ = $$[$0 - 1]; + break; + case 18: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 19: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 20: + this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 21: + this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 22: + this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }; + break; + case 23: + this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] }; + break; + case 29: + yy.setDiagramTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 30: + yy.setDiagramTitle($$[$0].substring(7)); + this.$ = $$[$0].substring(7); + break; + case 31: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 32: + case 33: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 34: + $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START }); + $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END }); + this.$ = $$[$0 - 1]; + break; + case 35: + $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START }); + $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END }); + this.$ = $$[$0 - 1]; + break; + case 36: + $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START }); + $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END }); + this.$ = $$[$0 - 1]; + break; + case 37: + $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START }); + $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END }); + this.$ = $$[$0 - 1]; + break; + case 38: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 39: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 40: + $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START }); + $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END }); + this.$ = $$[$0 - 1]; + break; + case 41: + $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START }); + $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END }); + this.$ = $$[$0 - 1]; + break; + case 43: + this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); + break; + case 45: + this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); + break; + case 47: + this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); + break; + case 48: + $$[$0 - 3].draw = "participant"; + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 49: + $$[$0 - 1].draw = "participant"; + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 50: + $$[$0 - 3].draw = "actor"; + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 51: + $$[$0 - 1].draw = "actor"; + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 52: + $$[$0 - 1].type = "destroyParticipant"; + this.$ = $$[$0 - 1]; + break; + case 53: + this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 54: + $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); + $$[$0 - 2][0] = $$[$0 - 2][0].actor; + $$[$0 - 2][1] = $$[$0 - 2][1].actor; + this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }]; + break; + case 55: + this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 56: + this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 57: + this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 58: + this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 61: + this.$ = [$$[$0 - 2], $$[$0]]; + break; + case 62: + this.$ = $$[$0]; + break; + case 63: + this.$ = yy.PLACEMENT.LEFTOF; + break; + case 64: + this.$ = yy.PLACEMENT.RIGHTOF; + break; + case 65: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true }, + { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] } + ]; + break; + case 66: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, + { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] } + ]; + break; + case 67: + this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; + break; + case 68: + this.$ = { type: "addParticipant", actor: $$[$0] }; + break; + case 69: + this.$ = yy.LINETYPE.SOLID_OPEN; + break; + case 70: + this.$ = yy.LINETYPE.DOTTED_OPEN; + break; + case 71: + this.$ = yy.LINETYPE.SOLID; + break; + case 72: + this.$ = yy.LINETYPE.DOTTED; + break; + case 73: + this.$ = yy.LINETYPE.SOLID_CROSS; + break; + case 74: + this.$ = yy.LINETYPE.DOTTED_CROSS; + break; + case 75: + this.$ = yy.LINETYPE.SOLID_POINT; + break; + case 76: + this.$ = yy.LINETYPE.DOTTED_POINT; + break; + case 77: + this.$ = yy.parseMessage($$[$0].trim().substring(1)); + 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, 13, 14, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o($Vx, [2, 5]), { 9: 47, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o($Vx, [2, 7]), o($Vx, [2, 8]), o($Vx, [2, 14]), { 12: 48, 50: $Vo, 52: $Vp, 53: $Vq }, { 15: [1, 49] }, { 5: [1, 50] }, { 5: [1, 53], 19: [1, 51], 20: [1, 52] }, { 22: 54, 70: $Vw }, { 22: 55, 70: $Vw }, { 5: [1, 56] }, { 5: [1, 57] }, { 5: [1, 58] }, { 5: [1, 59] }, { 5: [1, 60] }, o($Vx, [2, 29]), o($Vx, [2, 30]), { 32: [1, 61] }, { 34: [1, 62] }, o($Vx, [2, 33]), { 15: [1, 63] }, { 15: [1, 64] }, { 15: [1, 65] }, { 15: [1, 66] }, { 15: [1, 67] }, { 15: [1, 68] }, { 15: [1, 69] }, { 15: [1, 70] }, { 22: 71, 70: $Vw }, { 22: 72, 70: $Vw }, { 22: 73, 70: $Vw }, { 67: 74, 71: [1, 75], 72: [1, 76], 73: [1, 77], 74: [1, 78], 75: [1, 79], 76: [1, 80], 77: [1, 81], 78: [1, 82] }, { 55: 83, 57: [1, 84], 65: [1, 85], 66: [1, 86] }, { 22: 87, 70: $Vw }, { 22: 88, 70: $Vw }, { 22: 89, 70: $Vw }, { 22: 90, 70: $Vw }, o([5, 51, 64, 71, 72, 73, 74, 75, 76, 77, 78, 79], [2, 68]), o($Vx, [2, 6]), o($Vx, [2, 15]), o($Vy, [2, 9], { 10: 91 }), o($Vx, [2, 17]), { 5: [1, 93], 19: [1, 92] }, { 5: [1, 94] }, o($Vx, [2, 21]), { 5: [1, 95] }, { 5: [1, 96] }, o($Vx, [2, 24]), o($Vx, [2, 25]), o($Vx, [2, 26]), o($Vx, [2, 27]), o($Vx, [2, 28]), o($Vx, [2, 31]), o($Vx, [2, 32]), o($Vz, $V3, { 7: 97 }), o($Vz, $V3, { 7: 98 }), o($Vz, $V3, { 7: 99 }), o($VA, $V3, { 40: 100, 7: 101 }), o($VB, $V3, { 42: 102, 7: 103 }), o($VB, $V3, { 7: 103, 42: 104 }), o($VC, $V3, { 45: 105, 7: 106 }), o($Vz, $V3, { 7: 107 }), { 5: [1, 109], 51: [1, 108] }, { 5: [1, 111], 51: [1, 110] }, { 5: [1, 112] }, { 22: 115, 68: [1, 113], 69: [1, 114], 70: $Vw }, o($VD, [2, 69]), o($VD, [2, 70]), o($VD, [2, 71]), o($VD, [2, 72]), o($VD, [2, 73]), o($VD, [2, 74]), o($VD, [2, 75]), o($VD, [2, 76]), { 22: 116, 70: $Vw }, { 22: 118, 58: 117, 70: $Vw }, { 70: [2, 63] }, { 70: [2, 64] }, { 56: 119, 79: $VE }, { 56: 121, 79: $VE }, { 56: 122, 79: $VE }, { 56: 123, 79: $VE }, { 4: [1, 126], 5: [1, 128], 11: 125, 12: 127, 16: [1, 124], 50: $Vo, 52: $Vp, 53: $Vq }, { 5: [1, 129] }, o($Vx, [2, 19]), o($Vx, [2, 20]), o($Vx, [2, 22]), o($Vx, [2, 23]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 130], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 131], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 132], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 133] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 46], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 49: [1, 134], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 135] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 44], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 48: [1, 136], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 137] }, { 16: [1, 138] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 42], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 47: [1, 139], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 140], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 15: [1, 141] }, o($Vx, [2, 49]), { 15: [1, 142] }, o($Vx, [2, 51]), o($Vx, [2, 52]), { 22: 143, 70: $Vw }, { 22: 144, 70: $Vw }, { 56: 145, 79: $VE }, { 56: 146, 79: $VE }, { 56: 147, 79: $VE }, { 64: [1, 148], 79: [2, 62] }, { 5: [2, 55] }, { 5: [2, 77] }, { 5: [2, 56] }, { 5: [2, 57] }, { 5: [2, 58] }, o($Vx, [2, 16]), o($Vy, [2, 10]), { 12: 149, 50: $Vo, 52: $Vp, 53: $Vq }, o($Vy, [2, 12]), o($Vy, [2, 13]), o($Vx, [2, 18]), o($Vx, [2, 34]), o($Vx, [2, 35]), o($Vx, [2, 36]), o($Vx, [2, 37]), { 15: [1, 150] }, o($Vx, [2, 38]), { 15: [1, 151] }, o($Vx, [2, 39]), o($Vx, [2, 40]), { 15: [1, 152] }, o($Vx, [2, 41]), { 5: [1, 153] }, { 5: [1, 154] }, { 56: 155, 79: $VE }, { 56: 156, 79: $VE }, { 5: [2, 67] }, { 5: [2, 53] }, { 5: [2, 54] }, { 22: 157, 70: $Vw }, o($Vy, [2, 11]), o($VA, $V3, { 7: 101, 40: 158 }), o($VB, $V3, { 7: 103, 42: 159 }), o($VC, $V3, { 7: 106, 45: 160 }), o($Vx, [2, 48]), o($Vx, [2, 50]), { 5: [2, 65] }, { 5: [2, 66] }, { 79: [2, 61] }, { 16: [2, 47] }, { 16: [2, 45] }, { 16: [2, 43] }], + defaultActions: { 5: [2, 1], 6: [2, 2], 85: [2, 63], 86: [2, 64], 119: [2, 55], 120: [2, 77], 121: [2, 56], 122: [2, 57], 123: [2, 58], 145: [2, 67], 146: [2, 53], 147: [2, 54], 155: [2, 65], 156: [2, 66], 157: [2, 61], 158: [2, 47], 159: [2, 45], 160: [2, 43] }, + 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, state2, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state2 = stack[stack.length - 1]; + if (this.defaultActions[state2]) { + action = this.defaultActions[state2]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state2] && table[state2][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state2]) { + 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: " + state2 + ", 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 5; + case 1: + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + break; + case 6: + return 19; + case 7: + this.begin("LINE"); + return 14; + case 8: + this.begin("ID"); + return 50; + case 9: + this.begin("ID"); + return 52; + case 10: + return 13; + case 11: + this.begin("ID"); + return 53; + case 12: + yy_.yytext = yy_.yytext.trim(); + this.begin("ALIAS"); + return 70; + case 13: + this.popState(); + this.popState(); + this.begin("LINE"); + return 51; + case 14: + this.popState(); + this.popState(); + return 5; + case 15: + this.begin("LINE"); + return 36; + case 16: + this.begin("LINE"); + return 37; + case 17: + this.begin("LINE"); + return 38; + case 18: + this.begin("LINE"); + return 39; + case 19: + this.begin("LINE"); + return 49; + case 20: + this.begin("LINE"); + return 41; + case 21: + this.begin("LINE"); + return 43; + case 22: + this.begin("LINE"); + return 48; + case 23: + this.begin("LINE"); + return 44; + case 24: + this.begin("LINE"); + return 47; + case 25: + this.begin("LINE"); + return 46; + case 26: + this.popState(); + return 15; + case 27: + return 16; + case 28: + return 65; + case 29: + return 66; + case 30: + return 59; + case 31: + return 60; + case 32: + return 61; + case 33: + return 62; + case 34: + return 57; + case 35: + return 54; + case 36: + this.begin("ID"); + return 21; + case 37: + this.begin("ID"); + return 23; + case 38: + return 29; + case 39: + return 30; + case 40: + this.begin("acc_title"); + return 31; + case 41: + this.popState(); + return "acc_title_value"; + case 42: + this.begin("acc_descr"); + return 33; + case 43: + this.popState(); + return "acc_descr_value"; + case 44: + this.begin("acc_descr_multiline"); + break; + case 45: + this.popState(); + break; + case 46: + return "acc_descr_multiline_value"; + case 47: + return 6; + case 48: + return 18; + case 49: + return 20; + case 50: + return 64; + case 51: + return 5; + case 52: + yy_.yytext = yy_.yytext.trim(); + return 70; + case 53: + return 73; + case 54: + return 74; + case 55: + return 71; + case 56: + return 72; + case 57: + return 75; + case 58: + return 76; + case 59: + return 77; + case 60: + return 78; + case 61: + return 79; + case 62: + return 68; + case 63: + return 69; + case 64: + return 5; + case 65: + return "INVALID"; + } + }, + rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:par_over\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/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, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [45, 46], "inclusive": false }, "acc_descr": { "rules": [43], "inclusive": false }, "acc_title": { "rules": [41], "inclusive": false }, "ID": { "rules": [2, 3, 12], "inclusive": false }, "ALIAS": { "rules": [2, 3, 13, 14], "inclusive": false }, "LINE": { "rules": [2, 3, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65], "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; +class ImperativeState { + /** + * @param init - Function that creates the default state. + */ + constructor(init) { + this.init = init; + this.records = this.init(); + } + reset() { + this.records = this.init(); + } +} +const state = new ImperativeState(() => ({ + prevActor: void 0, + actors: {}, + createdActors: {}, + destroyedActors: {}, + boxes: [], + messages: [], + notes: [], + sequenceNumbersEnabled: false, + wrapEnabled: void 0, + currentBox: void 0, + lastCreated: void 0, + lastDestroyed: void 0 +})); +const addBox = function(data) { + state.records.boxes.push({ + name: data.text, + wrap: data.wrap === void 0 && autoWrap() || !!data.wrap, + fill: data.color, + actorKeys: [] + }); + state.records.currentBox = state.records.boxes.slice(-1)[0]; +}; +const addActor = function(id, name, description, type) { + let assignedBox = state.records.currentBox; + const old = state.records.actors[id]; + if (old) { + if (state.records.currentBox && old.box && state.records.currentBox !== old.box) { + throw new Error( + "A same participant should only be defined in one Box: " + old.name + " can't be in '" + old.box.name + "' and in '" + state.records.currentBox.name + "' at the same time." + ); + } + assignedBox = old.box ? old.box : state.records.currentBox; + old.box = assignedBox; + if (old && name === old.name && description == null) { + return; + } + } + if (description == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + if (type == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + state.records.actors[id] = { + box: assignedBox, + name, + description: description.text, + wrap: description.wrap === void 0 && autoWrap() || !!description.wrap, + prevActor: state.records.prevActor, + links: {}, + properties: {}, + actorCnt: null, + rectData: null, + type: type || "participant" + }; + if (state.records.prevActor && state.records.actors[state.records.prevActor]) { + state.records.actors[state.records.prevActor].nextActor = id; + } + if (state.records.currentBox) { + state.records.currentBox.actorKeys.push(id); + } + state.records.prevActor = id; +}; +const activationCount = (part) => { + let i; + let count = 0; + for (i = 0; i < state.records.messages.length; i++) { + if (state.records.messages[i].type === LINETYPE.ACTIVE_START && state.records.messages[i].from.actor === part) { + count++; + } + if (state.records.messages[i].type === LINETYPE.ACTIVE_END && state.records.messages[i].from.actor === part) { + count--; + } + } + return count; +}; +const addMessage = function(idFrom, idTo, message, answer) { + state.records.messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + answer + }); +}; +const addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType, activate = false) { + if (messageType === LINETYPE.ACTIVE_END) { + const cnt = activationCount(idFrom.actor); + if (cnt < 1) { + let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")"); + error.hash = { + text: "->>-", + token: "->>-", + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["'ACTIVE_PARTICIPANT'"] + }; + throw error; + } + } + state.records.messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: messageType, + activate + }); + return true; +}; +const hasAtLeastOneBox = function() { + return state.records.boxes.length > 0; +}; +const hasAtLeastOneBoxWithTitle = function() { + return state.records.boxes.some((b) => b.name); +}; +const getMessages = function() { + return state.records.messages; +}; +const getBoxes = function() { + return state.records.boxes; +}; +const getActors = function() { + return state.records.actors; +}; +const getCreatedActors = function() { + return state.records.createdActors; +}; +const getDestroyedActors = function() { + return state.records.destroyedActors; +}; +const getActor = function(id) { + return state.records.actors[id]; +}; +const getActorKeys = function() { + return Object.keys(state.records.actors); +}; +const enableSequenceNumbers = function() { + state.records.sequenceNumbersEnabled = true; +}; +const disableSequenceNumbers = function() { + state.records.sequenceNumbersEnabled = false; +}; +const showSequenceNumbers = () => state.records.sequenceNumbersEnabled; +const setWrap = function(wrapSetting) { + state.records.wrapEnabled = wrapSetting; +}; +const autoWrap = () => { + if (state.records.wrapEnabled !== void 0) { + return state.records.wrapEnabled; + } + return (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence.wrap; +}; +const clear = function() { + state.reset(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const parseMessage = function(str) { + const _str = str.trim(); + const message = { + text: _str.replace(/^:?(?:no)?wrap:/, "").trim(), + wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0 + }; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("parseMessage:", message); + return message; +}; +const parseBoxData = function(str) { + const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/); + let color = match != null && match[1] ? match[1].trim() : "transparent"; + let title = match != null && match[2] ? match[2].trim() : void 0; + if (window && window.CSS) { + if (!window.CSS.supports("color", color)) { + color = "transparent"; + title = str.trim(); + } + } else { + const style = new Option().style; + style.color = color; + if (style.color !== color) { + color = "transparent"; + title = str.trim(); + } + } + return { + color, + text: title !== void 0 ? (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(title.replace(/^:?(?:no)?wrap:/, ""), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : void 0, + wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0 + }; +}; +const 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, + AUTONUMBER: 26, + CRITICAL_START: 27, + CRITICAL_OPTION: 28, + CRITICAL_END: 29, + BREAK_START: 30, + BREAK_END: 31, + PAR_OVER_START: 32 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const addNote = function(actor, placement, message) { + const note = { + actor, + placement, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap + }; + const actors = [].concat(actor, actor); + state.records.notes.push(note); + state.records.messages.push({ + from: actors[0], + to: actors[1], + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: LINETYPE.NOTE, + placement + }); +}; +const addLinks = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + const links = JSON.parse(sanitizedText); + insertLinks(actor, links); + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); + } +}; +const addALink = function(actorId, text) { + const actor = getActor(actorId); + try { + const links = {}; + let sanitizedText = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + var sep = sanitizedText.indexOf("@"); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + var label = sanitizedText.slice(0, sep - 1).trim(); + var link = sanitizedText.slice(sep + 1).trim(); + links[label] = link; + insertLinks(actor, links); + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); + } +}; +function insertLinks(actor, links) { + if (actor.links == null) { + actor.links = links; + } else { + for (let key in links) { + actor.links[key] = links[key]; + } + } +} +const addProperties = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const properties = JSON.parse(sanitizedText); + insertProperties(actor, properties); + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor properties text", e); + } +}; +function insertProperties(actor, properties) { + if (actor.properties == null) { + actor.properties = properties; + } else { + for (let key in properties) { + actor.properties[key] = properties[key]; + } + } +} +function boxEnd() { + state.records.currentBox = void 0; +} +const addDetails = function(actorId, text) { + const actor = getActor(actorId); + const elem = document.getElementById(text.text); + try { + const text2 = elem.innerHTML; + const details = JSON.parse(text2); + if (details["properties"]) { + insertProperties(actor, details["properties"]); + } + if (details["links"]) { + insertLinks(actor, details["links"]); + } + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor details text", e); + } +}; +const getActorProperty = function(actor, key) { + if (actor !== void 0 && actor.properties !== void 0) { + return actor.properties[key]; + } + return void 0; +}; +const apply = function(param) { + if (Array.isArray(param)) { + param.forEach(function(item) { + apply(item); + }); + } else { + switch (param.type) { + case "sequenceIndex": + state.records.messages.push({ + from: void 0, + to: void 0, + message: { + start: param.sequenceIndex, + step: param.sequenceIndexStep, + visible: param.sequenceVisible + }, + wrap: false, + type: param.signalType + }); + break; + case "addParticipant": + addActor(param.actor, param.actor, param.description, param.draw); + break; + case "createParticipant": + if (state.records.actors[param.actor]) { + throw new Error( + "It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior" + ); + } + state.records.lastCreated = param.actor; + addActor(param.actor, param.actor, param.description, param.draw); + state.records.createdActors[param.actor] = state.records.messages.length; + break; + case "destroyParticipant": + state.records.lastDestroyed = param.actor; + state.records.destroyedActors[param.actor] = state.records.messages.length; + break; + case "activeStart": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "activeEnd": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "addNote": + addNote(param.actor, param.placement, param.text); + break; + case "addLinks": + addLinks(param.actor, param.text); + break; + case "addALink": + addALink(param.actor, param.text); + break; + case "addProperties": + addProperties(param.actor, param.text); + break; + case "addDetails": + addDetails(param.actor, param.text); + break; + case "addMessage": + if (state.records.lastCreated) { + if (param.to !== state.records.lastCreated) { + throw new Error( + "The created participant " + state.records.lastCreated + " does not have an associated creating message after its declaration. Please check the sequence diagram." + ); + } else { + state.records.lastCreated = void 0; + } + } else if (state.records.lastDestroyed) { + if (param.to !== state.records.lastDestroyed && param.from !== state.records.lastDestroyed) { + throw new Error( + "The destroyed participant " + state.records.lastDestroyed + " does not have an associated destroying message after its declaration. Please check the sequence diagram." + ); + } else { + state.records.lastDestroyed = void 0; + } + } + addSignal(param.from, param.to, param.msg, param.signalType, param.activate); + break; + case "boxStart": + addBox(param.boxData); + break; + case "boxEnd": + boxEnd(); + break; + case "loopStart": + addSignal(void 0, void 0, param.loopText, param.signalType); + break; + case "loopEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "rectStart": + addSignal(void 0, void 0, param.color, param.signalType); + break; + case "rectEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "optStart": + addSignal(void 0, void 0, param.optText, param.signalType); + break; + case "optEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "altStart": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "else": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "altEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "setAccTitle": + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s)(param.text); + break; + case "parStart": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "and": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "parEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "criticalStart": + addSignal(void 0, void 0, param.criticalText, param.signalType); + break; + case "option": + addSignal(void 0, void 0, param.optionText, param.signalType); + break; + case "criticalEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "breakStart": + addSignal(void 0, void 0, param.breakText, param.signalType); + break; + case "breakEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + } + } +}; +const db = { + addActor, + addMessage, + addSignal, + addLinks, + addDetails, + addProperties, + autoWrap, + setWrap, + enableSequenceNumbers, + disableSequenceNumbers, + showSequenceNumbers, + getMessages, + getActors, + getCreatedActors, + getDestroyedActors, + getActor, + getActorKeys, + getActorProperty, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.g, + getBoxes, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.r, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.q, + getConfig: () => (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence, + clear, + parseMessage, + parseBoxData, + LINETYPE, + ARROWTYPE, + PLACEMENT, + addNote, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s, + apply, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.a, + hasAtLeastOneBox, + hasAtLeastOneBoxWithTitle +}; +const getStyles = (options) => `.actor { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + + text.actor > tspan { + fill: ${options.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${options.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${options.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${options.signalColor}; + } + + #arrowhead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .sequenceNumber { + fill: ${options.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${options.signalColor}; + } + + #crosshead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .messageText { + fill: ${options.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${options.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${options.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${options.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation1 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation2 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${options.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + .actor-man circle, line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + stroke-width: 2px; + } +`; +const styles = getStyles; +const ACTOR_TYPE_WIDTH = 18 * 2; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const addPopupInteraction = (id, actorCnt2) => { + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.F)(() => { + const arr = document.querySelectorAll(id); + if (arr.length === 0) { + return; + } + arr[0].addEventListener("mouseover", function() { + popupMenuUpFunc("actor" + actorCnt2 + "_popup"); + }); + arr[0].addEventListener("mouseout", function() { + popupMenuDownFunc("actor" + actorCnt2 + "_popup"); + }); + }); +}; +const drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) { + if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) { + return { height: 0, width: 0 }; + } + const links = actor.links; + const actorCnt2 = actor.actorCnt; + const rectData = actor.rectData; + var displayValue = "none"; + if (forceMenus) { + displayValue = "block !important"; + } + const g = elem.append("g"); + g.attr("id", "actor" + actorCnt2 + "_popup"); + g.attr("class", "actorPopupMenu"); + g.attr("display", displayValue); + addPopupInteraction("#actor" + actorCnt2 + "_popup", actorCnt2); + var actorClass = ""; + if (rectData.class !== void 0) { + actorClass = " " + rectData.class; + } + let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; + const rectElem = g.append("rect"); + rectElem.attr("class", "actorPopupMenuPanel" + actorClass); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.height); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", menuWidth); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (links != null) { + var linkY = 20; + for (let key in links) { + var linkElem = g.append("a"); + var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(links[key]); + linkElem.attr("xlink:href", sanitizedLink); + linkElem.attr("target", "_blank"); + _drawMenuItemTextCandidateFunc(textAttrs)( + key, + linkElem, + rectData.x + 10, + rectData.height + linkY, + menuWidth, + 20, + { class: "actor" }, + textAttrs + ); + linkY += 30; + } + } + rectElem.attr("height", linkY); + return { height: rectData.height + linkY, width: menuWidth }; +}; +const popupMenu = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'block'; }"; +}; +const popdownMenu = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'none'; }"; +}; +const popupMenuUpFunc = function(popupId) { + var pu = document.getElementById(popupId); + if (pu != null) { + pu.style.display = "block"; + } +}; +const popupMenuDownFunc = function(popupId) { + var pu = document.getElementById(popupId); + if (pu != null) { + pu.style.display = "none"; + } +}; +const drawText = function(elem, textData) { + let prevTextHeight = 0; + let textHeight = 0; + const lines = textData.text.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + const [_textFontSize, _textFontSizePx] = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.C)(textData.fontSize); + let textElems = []; + let dy = 0; + let yfunc = () => textData.y; + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + switch (textData.valign) { + case "top": + case "start": + yfunc = () => Math.round(textData.y + textData.textMargin); + break; + case "middle": + case "center": + yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); + break; + case "bottom": + case "end": + yfunc = () => Math.round( + textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin + ); + break; + } + } + if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) { + switch (textData.anchor) { + case "left": + case "start": + textData.x = Math.round(textData.x + textData.textMargin); + textData.anchor = "start"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "middle": + case "center": + textData.x = Math.round(textData.x + textData.width / 2); + textData.anchor = "middle"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "right": + case "end": + textData.x = Math.round(textData.x + textData.width - textData.textMargin); + textData.anchor = "end"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + } + } + for (let [i, line] of lines.entries()) { + if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) { + dy = i * _textFontSize; + } + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", yfunc()); + if (textData.anchor !== void 0) { + textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline); + } + if (textData.fontFamily !== void 0) { + textElem.style("font-family", textData.fontFamily); + } + if (_textFontSizePx !== void 0) { + textElem.style("font-size", _textFontSizePx); + } + if (textData.fontWeight !== void 0) { + textElem.style("font-weight", textData.fontWeight); + } + if (textData.fill !== void 0) { + textElem.attr("fill", textData.fill); + } + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + if (textData.dy !== void 0) { + textElem.attr("dy", textData.dy); + } else if (dy !== 0) { + textElem.attr("dy", dy); + } + const text = line || _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.Z; + if (textData.tspan) { + const span = textElem.append("tspan"); + span.attr("x", textData.x); + if (textData.fill !== void 0) { + span.attr("fill", textData.fill); + } + span.text(text); + } else { + textElem.text(text); + } + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + textHeight += (textElem._groups || textElem)[0][0].getBBox().height; + prevTextHeight = textHeight; + } + textElems.push(textElem); + } + return textElems; +}; +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, txtObject.width, txtObject.height, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.height / 2; + drawText(elem, txtObject); + return polygon; +}; +let actorCnt = -1; +const fixLifeLineHeights = (diagram2, actors, actorKeys, conf2) => { + if (!diagram2.select) { + return; + } + actorKeys.forEach((actorKey) => { + const actor = actors[actorKey]; + const actorDOM = diagram2.select("#actor" + actor.actorCnt); + if (!conf2.mirrorActors && actor.stopy) { + actorDOM.attr("y2", actor.stopy + actor.height / 2); + } else if (conf2.mirrorActors) { + actorDOM.attr("y2", actor.stopy); + } + }); +}; +const drawActorTypeParticipant = function(elem, actor, conf2, isFooter) { + const actorY = isFooter ? actor.stopy : actor.starty; + const center = actor.x + actor.width / 2; + const centerY = actorY + 5; + const boxpluslineGroup = elem.append("g").lower(); + var g = boxpluslineGroup; + if (!isFooter) { + actorCnt++; + g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); + g = boxpluslineGroup.append("g"); + actor.actorCnt = actorCnt; + if (actor.links != null) { + g.attr("id", "root-" + actorCnt); + addPopupInteraction("#root-" + actorCnt, actorCnt); + } + } + const rect = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + var cssclass = "actor"; + if (actor.properties != null && actor.properties["class"]) { + cssclass = actor.properties["class"]; + } else { + rect.fill = "#eaeaea"; + } + rect.x = actor.x; + rect.y = actorY; + rect.width = actor.width; + rect.height = actor.height; + rect.class = cssclass; + rect.rx = 3; + rect.ry = 3; + const rectElem = drawRect(g, rect); + actor.rectData = rect; + if (actor.properties != null && actor.properties["icon"]) { + const iconSrc = actor.properties["icon"].trim(); + if (iconSrc.charAt(0) === "@") { + (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.b)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1)); + } else { + (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.c)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc); + } + } + _drawTextCandidateFunc(conf2)( + actor.description, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + let height = actor.height; + if (rectElem.node) { + const bounds2 = rectElem.node().getBBox(); + actor.height = bounds2.height; + height = bounds2.height; + } + return height; +}; +const drawActorTypeActor = function(elem, actor, conf2, isFooter) { + const actorY = isFooter ? actor.stopy : actor.starty; + const center = actor.x + actor.width / 2; + const centerY = actorY + 80; + elem.lower(); + if (!isFooter) { + actorCnt++; + elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); + actor.actorCnt = actorCnt; + } + const actElem = elem.append("g"); + actElem.attr("class", "actor-man"); + const rect = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = actor.x; + rect.y = actorY; + rect.fill = "#eaeaea"; + rect.width = actor.width; + rect.height = actor.height; + rect.class = "actor"; + rect.rx = 3; + rect.ry = 3; + actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actorY + 25).attr("x2", center).attr("y2", actorY + 45); + actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33); + actElem.append("line").attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center).attr("y2", actorY + 45); + actElem.append("line").attr("x1", center).attr("y1", actorY + 45).attr("x2", center + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60); + const circle = actElem.append("circle"); + circle.attr("cx", actor.x + actor.width / 2); + circle.attr("cy", actorY + 10); + circle.attr("r", 15); + circle.attr("width", actor.width); + circle.attr("height", actor.height); + const bounds2 = actElem.node().getBBox(); + actor.height = bounds2.height; + _drawTextCandidateFunc(conf2)( + actor.description, + actElem, + rect.x, + rect.y + 35, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + return actor.height; +}; +const drawActor = function(elem, actor, conf2, isFooter) { + switch (actor.type) { + case "actor": + return drawActorTypeActor(elem, actor, conf2, isFooter); + case "participant": + return drawActorTypeParticipant(elem, actor, conf2, isFooter); + } +}; +const drawBox = function(elem, box, conf2) { + const boxplustextGroup = elem.append("g"); + const g = boxplustextGroup; + drawBackgroundRect(g, box); + if (box.name) { + _drawTextCandidateFunc(conf2)( + box.name, + g, + box.x, + box.y + (box.textMaxHeight || 0) / 2, + box.width, + 0, + { class: "text" }, + conf2 + ); + } + g.lower(); +}; +const anchorElement = function(elem) { + return elem.append("g"); +}; +const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) { + const rect = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + const g = bounds2.anchored; + rect.x = bounds2.startx; + rect.y = bounds2.starty; + rect.class = "activation" + actorActivations2 % 3; + rect.width = bounds2.stopx - bounds2.startx; + rect.height = verticalPos - bounds2.starty; + drawRect(g, rect); +}; +const drawLoop = function(elem, loopModel, labelText, conf2) { + const { + boxMargin, + boxTextMargin, + labelBoxHeight, + labelBoxWidth, + messageFontFamily: fontFamily, + messageFontSize: fontSize, + messageFontWeight: fontWeight + } = conf2; + const g = elem.append("g"); + const drawLoopLine = function(startx, starty, stopx, stopy) { + return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine"); + }; + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); + drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); + if (loopModel.sections !== void 0) { + loopModel.sections.forEach(function(item) { + drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( + "stroke-dasharray", + "3, 3" + ); + }); + } + let txt = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + txt.text = labelText; + txt.x = loopModel.startx; + txt.y = loopModel.starty; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.width = labelBoxWidth || 50; + txt.height = labelBoxHeight || 20; + txt.textMargin = boxTextMargin; + txt.class = "labelText"; + drawLabel(g, txt); + txt = getTextObj(); + txt.text = loopModel.title; + txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.starty + boxMargin + boxTextMargin; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.textMargin = boxTextMargin; + txt.class = "loopText"; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = true; + let textElem = drawText(g, txt); + if (loopModel.sectionTitles !== void 0) { + loopModel.sectionTitles.forEach(function(item, idx) { + if (item.message) { + txt.text = item.message; + txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; + txt.class = "loopText"; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = loopModel.wrap; + textElem = drawText(g, txt); + let sectionHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); + } + }); + } + loopModel.height = Math.round(loopModel.stopy - loopModel.starty); + return g; +}; +const drawBackgroundRect = function(elem, bounds2) { + (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); +}; +const insertDatabaseIcon = function(elem) { + elem.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" + ); +}; +const insertComputerIcon = function(elem) { + elem.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" + ); +}; +const insertClockIcon = function(elem) { + elem.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" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 7.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"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 15.5).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 insertSequenceNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 4.5); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7"); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + anchor: void 0, + style: "#666", + width: void 0, + height: void 0, + textMargin: 0, + rx: 0, + ry: 0, + tspan: true, + valign: void 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + fill: "#EDF2AE", + stroke: "#666", + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const [_actorFontSize, _actorFontSizePx] = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.C)(actorFontSize); + const lines = content.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + 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 s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const _drawMenuItemTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const lines = content.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x).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 s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawText, + drawLabel, + drawActor, + drawBox, + drawPopup, + anchorElement, + drawActivation, + drawLoop, + drawBackgroundRect, + insertArrowHead, + insertArrowFilledHead, + insertSequenceNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon, + getTextObj, + getNoteRect, + popupMenu, + popdownMenu, + fixLifeLineHeights, + sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm +}; +let conf = {}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + activations: [], + models: { + getHeight: function() { + return Math.max.apply( + null, + this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) + ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)); + }, + clear: function() { + this.actors = []; + this.boxes = []; + this.loops = []; + this.messages = []; + this.notes = []; + }, + addBox: function(boxModel) { + this.boxes.push(boxModel); + }, + addActor: function(actorModel) { + this.actors.push(actorModel); + }, + addLoop: function(loopModel) { + this.loops.push(loopModel); + }, + addMessage: function(msgModel) { + this.messages.push(msgModel); + }, + addNote: function(noteModel) { + this.notes.push(noteModel); + }, + lastActor: function() { + return this.actors[this.actors.length - 1]; + }, + lastLoop: function() { + return this.loops[this.loops.length - 1]; + }, + lastMessage: function() { + return this.messages[this.messages.length - 1]; + }, + lastNote: function() { + return this.notes[this.notes.length - 1]; + }, + actors: [], + boxes: [], + loops: [], + messages: [], + notes: [] + }, + init: function() { + this.sequenceItems = []; + this.activations = []; + this.models.clear(); + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + setConf((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + }, + 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 _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 * conf.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + this.activations.forEach(updateFn("activation")); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(startx, stopx); + const _stopx = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(startx, stopx); + const _starty = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(starty, stopy); + const _stopy = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(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); + }, + newActivation: function(message, diagram2, actors) { + const actorRect = actors[message.from.actor]; + const stackedSize = actorActivations(message.from.actor).length || 0; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + this.activations.push({ + startx: x, + starty: this.verticalPos + 2, + stopx: x + conf.activationWidth, + stopy: void 0, + actor: message.from.actor, + anchored: svgDraw.anchorElement(diagram2) + }); + }, + endActivation: function(message) { + const lastActorActivationIdx = this.activations.map(function(activation) { + return activation.actor; + }).lastIndexOf(message.from.actor); + return this.activations.splice(lastActorActivationIdx, 1)[0]; + }, + createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + return { + startx: void 0, + starty: this.verticalPos, + stopx: void 0, + stopy: void 0, + title: title.message, + wrap: title.wrap, + width: title.width, + height: 0, + fill + }; + }, + newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + this.sequenceItems.push(this.createLoop(title, fill)); + }, + endLoop: function() { + return this.sequenceItems.pop(); + }, + isLoopOverlap: function() { + return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false; + }, + addSectionToLoop: function(message) { + const loop = this.sequenceItems.pop(); + loop.sections = loop.sections || []; + loop.sectionTitles = loop.sectionTitles || []; + loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); + loop.sectionTitles.push(message); + this.sequenceItems.push(loop); + }, + saveVerticalPos: function() { + if (this.isLoopOverlap()) { + this.savedVerticalPos = this.verticalPos; + } + }, + resetVerticalPos: function() { + if (this.isLoopOverlap()) { + this.verticalPos = this.savedVerticalPos; + } + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(this.data.stopy, this.verticalPos); + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return { bounds: this.data, models: this.models }; + } +}; +const drawNote = function(elem, noteModel) { + bounds.bumpVerticalPos(conf.boxMargin); + noteModel.height = conf.boxMargin; + noteModel.starty = bounds.getVerticalPos(); + const rect = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = noteModel.startx; + rect.y = noteModel.starty; + rect.width = noteModel.width || conf.width; + rect.class = "note"; + const g = elem.append("g"); + const rectElem = svgDraw.drawRect(g, rect); + const textObj = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + textObj.x = noteModel.startx; + textObj.y = noteModel.starty; + textObj.width = rect.width; + textObj.dy = "1em"; + textObj.text = noteModel.message; + textObj.class = "noteText"; + textObj.fontFamily = conf.noteFontFamily; + textObj.fontSize = conf.noteFontSize; + textObj.fontWeight = conf.noteFontWeight; + textObj.anchor = conf.noteAlign; + textObj.textMargin = conf.noteMargin; + textObj.valign = "center"; + const textElem = drawText(g, textObj); + const textHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + rectElem.attr("height", textHeight + 2 * conf.noteMargin); + noteModel.height += textHeight + 2 * conf.noteMargin; + bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); + noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; + noteModel.stopx = noteModel.startx + rect.width; + bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); + bounds.models.addNote(noteModel); +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +const noteFont = (cnf) => { + return { + fontFamily: cnf.noteFontFamily, + fontSize: cnf.noteFontSize, + fontWeight: cnf.noteFontWeight + }; +}; +const actorFont = (cnf) => { + return { + fontFamily: cnf.actorFontFamily, + fontSize: cnf.actorFontSize, + fontWeight: cnf.actorFontWeight + }; +}; +function boundMessage(_diagram, msgModel) { + bounds.bumpVerticalPos(10); + const { startx, stopx, message } = msgModel; + const lines = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.splitBreaks(message).length; + const textDims = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); + const lineHeight = textDims.height / lines; + msgModel.height += lineHeight; + bounds.bumpVerticalPos(lineHeight); + let lineStartY; + let totalOffset = textDims.height - 10; + const textWidth = textDims.width; + if (startx === stopx) { + lineStartY = bounds.getVerticalPos() + totalOffset; + if (!conf.rightAngles) { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + } + totalOffset += 30; + const dx = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textWidth / 2, conf.width / 2); + bounds.insert( + startx - dx, + bounds.getVerticalPos() - 10 + totalOffset, + stopx + dx, + bounds.getVerticalPos() + 30 + totalOffset + ); + } else { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + bounds.insert(startx, lineStartY - 10, stopx, lineStartY); + } + bounds.bumpVerticalPos(totalOffset); + msgModel.height += totalOffset; + msgModel.stopy = msgModel.starty + msgModel.height; + bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); + return lineStartY; +} +const drawMessage = function(diagram2, msgModel, lineStartY, diagObj) { + const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; + const textDims = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); + const textObj = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + textObj.x = startx; + textObj.y = starty + 10; + textObj.width = stopx - startx; + textObj.class = "messageText"; + textObj.dy = "1em"; + textObj.text = message; + textObj.fontFamily = conf.messageFontFamily; + textObj.fontSize = conf.messageFontSize; + textObj.fontWeight = conf.messageFontWeight; + textObj.anchor = conf.messageAlign; + textObj.valign = "center"; + textObj.textMargin = conf.wrapPadding; + textObj.tspan = false; + drawText(diagram2, textObj); + const textWidth = textDims.width; + let line; + if (startx === stopx) { + if (conf.rightAngles) { + line = diagram2.append("path").attr( + "d", + `M ${startx},${lineStartY} H ${startx + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` + ); + } else { + line = diagram2.append("path").attr( + "d", + "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) + ); + } + } else { + line = diagram2.append("line"); + line.attr("x1", startx); + line.attr("y1", lineStartY); + line.attr("x2", stopx); + line.attr("y2", lineStartY); + } + if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) { + line.style("stroke-dasharray", "3, 3"); + line.attr("class", "messageLine1"); + } else { + line.attr("class", "messageLine0"); + } + 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, "\\)"); + } + line.attr("stroke-width", 2); + line.attr("stroke", "none"); + line.style("fill", "none"); + if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { + line.attr("marker-end", "url(" + url + "#filled-head)"); + } + if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { + line.attr("marker-end", "url(" + url + "#crosshead)"); + } + if (sequenceVisible || conf.showSequenceNumbers) { + line.attr("marker-start", "url(" + url + "#sequencenumber)"); + diagram2.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); + } +}; +const addActorRenderingData = function(diagram2, actors, createdActors, actorKeys, verticalPos, messages, isFooter) { + let prevWidth = 0; + let prevMargin = 0; + let prevBox = void 0; + let maxHeight = 0; + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + const box = actor.box; + if (prevBox && prevBox != box) { + if (!isFooter) { + bounds.models.addBox(prevBox); + } + prevMargin += conf.boxMargin + prevBox.margin; + } + if (box && box != prevBox) { + if (!isFooter) { + box.x = prevWidth + prevMargin; + box.y = verticalPos; + } + prevMargin += box.margin; + } + actor.width = actor.width || conf.width; + actor.height = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actor.height || conf.height, conf.height); + actor.margin = actor.margin || conf.actorMargin; + maxHeight = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); + if (createdActors[actor.name]) { + prevMargin += actor.width / 2; + } + actor.x = prevWidth + prevMargin; + actor.starty = bounds.getVerticalPos(); + bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); + prevWidth += actor.width + prevMargin; + if (actor.box) { + actor.box.width = prevWidth + box.margin - actor.box.x; + } + prevMargin = actor.margin; + prevBox = actor.box; + bounds.models.addActor(actor); + } + if (prevBox && !isFooter) { + bounds.models.addBox(prevBox); + } + bounds.bumpVerticalPos(maxHeight); +}; +const drawActors = function(diagram2, actors, actorKeys, isFooter) { + if (!isFooter) { + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + svgDraw.drawActor(diagram2, actor, conf, false); + } + } else { + let maxHeight = 0; + bounds.bumpVerticalPos(conf.boxMargin * 2); + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + if (!actor.stopy) { + actor.stopy = bounds.getVerticalPos(); + } + const height = svgDraw.drawActor(diagram2, actor, conf, true); + maxHeight = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, height); + } + bounds.bumpVerticalPos(maxHeight + conf.boxMargin); + } +}; +const drawActorsPopup = function(diagram2, actors, actorKeys, doc) { + let maxHeight = 0; + let maxWidth = 0; + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + const minMenuWidth = getRequiredPopupWidth(actor); + const menuDimensions = svgDraw.drawPopup( + diagram2, + actor, + minMenuWidth, + conf, + conf.forceMenus, + doc + ); + if (menuDimensions.height > maxHeight) { + maxHeight = menuDimensions.height; + } + if (menuDimensions.width + actor.x > maxWidth) { + maxWidth = menuDimensions.width + actor.x; + } + } + return { maxHeight, maxWidth }; +}; +const setConf = function(cnf) { + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); + if (cnf.fontFamily) { + conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const actorActivations = function(actor) { + return bounds.activations.filter(function(activation) { + return activation.actor === actor; + }); +}; +const activationBounds = function(actor, actors) { + const actorObj = actors[actor]; + const activations = actorActivations(actor); + const left = activations.reduce(function(acc, activation) { + return _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(acc, activation.startx); + }, actorObj.x + actorObj.width / 2 - 1); + const right = activations.reduce(function(acc, activation) { + return _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(acc, activation.stopx); + }, actorObj.x + actorObj.width / 2 + 1); + return [left, right]; +}; +function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { + bounds.bumpVerticalPos(preMargin); + let heightAdjust = postMargin; + if (msg.id && msg.message && loopWidths[msg.id]) { + const loopWidth = loopWidths[msg.id].width; + const textConf = messageFont(conf); + msg.message = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); + msg.width = loopWidth; + msg.wrap = true; + const textDims = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, textConf); + const totalOffset = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textDims.height, conf.labelBoxHeight); + heightAdjust = postMargin + totalOffset; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`${totalOffset} - ${msg.message}`); + } + addLoopFn(msg); + bounds.bumpVerticalPos(heightAdjust); +} +function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors, createdActors, destroyedActors) { + function receiverAdjustment(actor, adjustment) { + if (actor.x < actors[msg.from].x) { + bounds.insert( + msgModel.stopx - adjustment, + msgModel.starty, + msgModel.startx, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.stopx = msgModel.stopx + adjustment; + } else { + bounds.insert( + msgModel.startx, + msgModel.starty, + msgModel.stopx + adjustment, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.stopx = msgModel.stopx - adjustment; + } + } + function senderAdjustment(actor, adjustment) { + if (actor.x < actors[msg.to].x) { + bounds.insert( + msgModel.startx - adjustment, + msgModel.starty, + msgModel.stopx, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.startx = msgModel.startx + adjustment; + } else { + bounds.insert( + msgModel.stopx, + msgModel.starty, + msgModel.startx + adjustment, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.startx = msgModel.startx - adjustment; + } + } + if (createdActors[msg.to] == index) { + const actor = actors[msg.to]; + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; + receiverAdjustment(actor, adjustment); + actor.starty = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } else if (destroyedActors[msg.from] == index) { + const actor = actors[msg.from]; + if (conf.mirrorActors) { + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2; + senderAdjustment(actor, adjustment); + } + actor.stopy = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } else if (destroyedActors[msg.to] == index) { + const actor = actors[msg.to]; + if (conf.mirrorActors) { + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; + receiverAdjustment(actor, adjustment); + } + actor.stopy = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } +} +const draw = function(_text, id, _version, diagObj) { + const { securityLevel, sequence } = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + conf = sequence; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + bounds.init(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(diagObj.db); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + const actors = diagObj.db.getActors(); + const createdActors = diagObj.db.getCreatedActors(); + const destroyedActors = diagObj.db.getDestroyedActors(); + const boxes = diagObj.db.getBoxes(); + let actorKeys = diagObj.db.getActorKeys(); + const messages = diagObj.db.getMessages(); + const title = diagObj.db.getDiagramTitle(); + const hasBoxes = diagObj.db.hasAtLeastOneBox(); + const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); + const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages, diagObj); + conf.height = calculateActorMargins(actors, maxMessageWidthPerActor, boxes); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + if (hasBoxTitles) { + bounds.bumpVerticalPos(boxes[0].textMaxHeight); + } + } + if (conf.hideUnusedParticipants === true) { + const newActors = /* @__PURE__ */ new Set(); + messages.forEach((message) => { + newActors.add(message.from); + newActors.add(message.to); + }); + actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); + } + addActorRenderingData(diagram2, actors, createdActors, actorKeys, 0, messages, false); + const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + svgDraw.insertSequenceNumber(diagram2); + function activeEnd(msg, verticalPos) { + const activationData = bounds.endActivation(msg); + if (activationData.starty + 18 > verticalPos) { + activationData.starty = verticalPos - 6; + verticalPos += 12; + } + svgDraw.drawActivation( + diagram2, + activationData, + verticalPos, + conf, + actorActivations(msg.from.actor).length + ); + bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); + } + let sequenceIndex = 1; + let sequenceIndexStep = 1; + const messagesToDraw = []; + const backgrounds = []; + messages.forEach(function(msg, index) { + let loopModel, noteModel, msgModel; + switch (msg.type) { + case diagObj.db.LINETYPE.NOTE: + bounds.resetVerticalPos(); + noteModel = msg.noteModel; + drawNote(diagram2, noteModel); + break; + case diagObj.db.LINETYPE.ACTIVE_START: + bounds.newActivation(msg, diagram2, actors); + break; + case diagObj.db.LINETYPE.ACTIVE_END: + activeEnd(msg, bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.LOOP_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.LOOP_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "loop", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.RECT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin, + (message) => bounds.newLoop(void 0, message.message) + ); + break; + case diagObj.db.LINETYPE.RECT_END: + loopModel = bounds.endLoop(); + backgrounds.push(loopModel); + bounds.models.addLoop(loopModel); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.OPT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.OPT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "opt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.ALT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "alt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + bounds.saveVerticalPos(); + break; + case diagObj.db.LINETYPE.PAR_AND: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.PAR_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "par", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.AUTONUMBER: + sequenceIndex = msg.message.start || sequenceIndex; + sequenceIndexStep = msg.message.step || sequenceIndexStep; + if (msg.message.visible) { + diagObj.db.enableSequenceNumbers(); + } else { + diagObj.db.disableSequenceNumbers(); + } + break; + case diagObj.db.LINETYPE.CRITICAL_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_OPTION: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "critical", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.BREAK_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.BREAK_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "break", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + default: + try { + msgModel = msg.msgModel; + msgModel.starty = bounds.getVerticalPos(); + msgModel.sequenceIndex = sequenceIndex; + msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); + const lineStartY = boundMessage(diagram2, msgModel); + adjustCreatedDestroyedData( + msg, + msgModel, + lineStartY, + index, + actors, + createdActors, + destroyedActors + ); + messagesToDraw.push({ messageModel: msgModel, lineStartY }); + bounds.models.addMessage(msgModel); + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while drawing message", e); + } + } + if ([ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + sequenceIndex = sequenceIndex + sequenceIndexStep; + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("createdActors", createdActors); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("destroyedActors", destroyedActors); + drawActors(diagram2, actors, actorKeys, false); + messagesToDraw.forEach((e) => drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj)); + if (conf.mirrorActors) { + drawActors(diagram2, actors, actorKeys, true); + } + backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram2, e)); + fixLifeLineHeights(diagram2, actors, actorKeys, conf); + bounds.models.boxes.forEach(function(box2) { + box2.height = bounds.getVerticalPos() - box2.y; + bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height); + box2.startx = box2.x; + box2.starty = box2.y; + box2.stopx = box2.startx + box2.width; + box2.stopy = box2.starty + box2.height; + box2.stroke = "rgb(0,0,0, 0.5)"; + svgDraw.drawBox(diagram2, box2, conf); + }); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + } + const requiredBoxSize = drawActorsPopup(diagram2, actors, actorKeys, doc); + const { bounds: box } = bounds.getBounds(); + let boxHeight = box.stopy - box.starty; + if (boxHeight < requiredBoxSize.maxHeight) { + boxHeight = requiredBoxSize.maxHeight; + } + let height = boxHeight + 2 * conf.diagramMarginY; + if (conf.mirrorActors) { + height = height - conf.boxMargin + conf.bottomMarginAdj; + } + let boxWidth = box.stopx - box.startx; + if (boxWidth < requiredBoxSize.maxWidth) { + boxWidth = requiredBoxSize.maxWidth; + } + const width = boxWidth + 2 * conf.diagramMarginX; + if (title) { + diagram2.append("text").text(title).attr("x", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr("y", -25); + } + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title ? 40 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, bounds.models); +}; +function getMaxMessageWidthPerActor(actors, messages, diagObj) { + const maxMessageWidthPerActor = {}; + messages.forEach(function(msg) { + if (actors[msg.to] && actors[msg.from]) { + const actor = actors[msg.to]; + if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { + return; + } + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { + return; + } + const isNote = msg.placement !== void 0; + const isMessage = !isNote; + const textFont = isNote ? noteFont(conf) : messageFont(conf); + const wrappedMessage = msg.wrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; + const messageDimensions = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(wrappedMessage, textFont); + const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; + if (isMessage && msg.from === actor.nextActor) { + maxMessageWidthPerActor[msg.to] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth + ); + } else if (isMessage && msg.from === actor.prevActor) { + maxMessageWidthPerActor[msg.from] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (isMessage && msg.from === msg.to) { + maxMessageWidthPerActor[msg.from] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + maxMessageWidthPerActor[msg.to] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth / 2 + ); + } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + maxMessageWidthPerActor[msg.from] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + maxMessageWidthPerActor[actor.prevActor] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { + if (actor.prevActor) { + maxMessageWidthPerActor[actor.prevActor] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth / 2 + ); + } + if (actor.nextActor) { + maxMessageWidthPerActor[msg.from] = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + } + } + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor); + return maxMessageWidthPerActor; +} +const getRequiredPopupWidth = function(actor) { + let requiredPopupWidth = 0; + const textFont = actorFont(conf); + for (const key in actor.links) { + const labelDimensions = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(key, textFont); + const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; + if (requiredPopupWidth < labelWidth) { + requiredPopupWidth = labelWidth; + } + } + return requiredPopupWidth; +}; +function calculateActorMargins(actors, actorToMessageWidth, boxes) { + let maxHeight = 0; + Object.keys(actors).forEach((prop) => { + const actor = actors[prop]; + if (actor.wrap) { + actor.description = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + actor.description, + conf.width - 2 * conf.wrapPadding, + actorFont(conf) + ); + } + const actDims = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(actor.description, actorFont(conf)); + actor.width = actor.wrap ? conf.width : _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); + actor.height = actor.wrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actDims.height, conf.height) : conf.height; + maxHeight = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); + }); + for (const actorKey in actorToMessageWidth) { + const actor = actors[actorKey]; + if (!actor) { + continue; + } + const nextActor = actors[actor.nextActor]; + if (!nextActor) { + const messageWidth2 = actorToMessageWidth[actorKey]; + const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2; + actor.margin = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth2, conf.actorMargin); + continue; + } + const messageWidth = actorToMessageWidth[actorKey]; + const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; + actor.margin = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth, conf.actorMargin); + } + let maxBoxHeight = 0; + boxes.forEach((box) => { + const textFont = messageFont(conf); + let totalWidth = box.actorKeys.reduce((total, aKey) => { + return total += actors[aKey].width + (actors[aKey].margin || 0); + }, 0); + totalWidth -= 2 * conf.boxTextMargin; + if (box.wrap) { + box.name = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); + } + const boxMsgDimensions = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(box.name, textFont); + maxBoxHeight = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boxMsgDimensions.height, maxBoxHeight); + const minWidth = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); + box.margin = conf.boxTextMargin; + if (totalWidth < minWidth) { + const missing = (minWidth - totalWidth) / 2; + box.margin += missing; + } + }); + boxes.forEach((box) => box.textMaxHeight = maxBoxHeight); + return _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, conf.height); +} +const buildNoteModel = function(msg, actors, diagObj) { + const startx = actors[msg.from].x; + const stopx = actors[msg.to].x; + const shouldWrap = msg.wrap && msg.message; + let textDimensions = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( + shouldWrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, + noteFont(conf) + ); + const noteModel = { + width: shouldWrap ? conf.width : _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin), + height: 0, + startx: actors[msg.from].x, + stopx: 0, + starty: 0, + stopy: 0, + message: msg.message + }; + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + noteModel.width = shouldWrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width) : _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors[msg.from].width / 2 + actors[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2; + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + noteModel.width = shouldWrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) : _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors[msg.from].width / 2 + actors[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2; + } else if (msg.to === msg.from) { + textDimensions = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( + shouldWrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors[msg.from].width), + noteFont(conf) + ) : msg.message, + noteFont(conf) + ); + noteModel.width = shouldWrap ? _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors[msg.from].width) : _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors[msg.from].width, + conf.width, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2; + } else { + noteModel.width = Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) + conf.actorMargin; + noteModel.startx = startx < stopx ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2; + } + if (shouldWrap) { + noteModel.message = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + noteModel.width - 2 * conf.wrapPadding, + noteFont(conf) + ); + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` + ); + return noteModel; +}; +const buildMessageModel = function(msg, actors, diagObj) { + if (![ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + return {}; + } + const [fromLeft, fromRight] = activationBounds(msg.from, actors); + const [toLeft, toRight] = activationBounds(msg.to, actors); + const isArrowToRight = fromLeft <= toLeft; + const startx = isArrowToRight ? fromRight : fromLeft; + let stopx = isArrowToRight ? toLeft : toRight; + const isArrowToActivation = Math.abs(toLeft - toRight) > 2; + const adjustValue = (value) => { + return isArrowToRight ? -value : value; + }; + if (msg.from === msg.to) { + stopx = startx; + } else { + if (msg.activate && !isArrowToActivation) { + stopx += adjustValue(conf.activationWidth / 2 - 1); + } + if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) { + stopx += adjustValue(3); + } + } + const allBounds = [fromLeft, fromRight, toLeft, toRight]; + const boundedWidth = Math.abs(startx - stopx); + if (msg.wrap && msg.message) { + msg.message = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width), + messageFont(conf) + ); + } + const msgDims = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, messageFont(conf)); + return { + width: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, + boundedWidth + 2 * conf.wrapPadding, + conf.width + ), + height: 0, + startx, + stopx, + starty: 0, + stopy: 0, + message: msg.message, + type: msg.type, + wrap: msg.wrap, + fromBounds: Math.min.apply(null, allBounds), + toBounds: Math.max.apply(null, allBounds) + }; +}; +const calculateLoopBounds = function(messages, actors, _maxWidthPerActor, diagObj) { + const loops = {}; + const stack = []; + let current, noteModel, msgModel; + messages.forEach(function(msg) { + msg.id = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.random({ length: 10 }); + switch (msg.type) { + case diagObj.db.LINETYPE.LOOP_START: + case diagObj.db.LINETYPE.ALT_START: + case diagObj.db.LINETYPE.OPT_START: + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + case diagObj.db.LINETYPE.CRITICAL_START: + case diagObj.db.LINETYPE.BREAK_START: + stack.push({ + id: msg.id, + msg: msg.message, + from: Number.MAX_SAFE_INTEGER, + to: Number.MIN_SAFE_INTEGER, + width: 0 + }); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + case diagObj.db.LINETYPE.PAR_AND: + case diagObj.db.LINETYPE.CRITICAL_OPTION: + if (msg.message) { + current = stack.pop(); + loops[current.id] = current; + loops[msg.id] = current; + stack.push(current); + } + break; + case diagObj.db.LINETYPE.LOOP_END: + case diagObj.db.LINETYPE.ALT_END: + case diagObj.db.LINETYPE.OPT_END: + case diagObj.db.LINETYPE.PAR_END: + case diagObj.db.LINETYPE.CRITICAL_END: + case diagObj.db.LINETYPE.BREAK_END: + current = stack.pop(); + loops[current.id] = current; + break; + case diagObj.db.LINETYPE.ACTIVE_START: + { + const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor]; + const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + const toAdd = { + startx: x, + stopx: x + conf.activationWidth, + actor: msg.from.actor, + enabled: true + }; + bounds.activations.push(toAdd); + } + break; + case diagObj.db.LINETYPE.ACTIVE_END: + { + const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor); + delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; + } + break; + } + const isNote = msg.placement !== void 0; + if (isNote) { + noteModel = buildNoteModel(msg, actors, diagObj); + msg.noteModel = noteModel; + stack.forEach((stk) => { + current = stk; + current.from = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(current.from, noteModel.startx); + current.to = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.to, noteModel.startx + noteModel.width); + current.width = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; + }); + } else { + msgModel = buildMessageModel(msg, actors, diagObj); + msg.msgModel = msgModel; + if (msgModel.startx && msgModel.stopx && stack.length > 0) { + stack.forEach((stk) => { + current = stk; + if (msgModel.startx === msgModel.stopx) { + const from = actors[msg.from]; + const to = actors[msg.to]; + current.from = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin( + from.x - msgModel.width / 2, + from.x - from.width / 2, + current.from + ); + current.to = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + to.x + msgModel.width / 2, + to.x + from.width / 2, + current.to + ); + current.width = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth; + } else { + current.from = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(msgModel.startx, current.from); + current.to = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(msgModel.stopx, current.to); + current.width = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, msgModel.width) - conf.labelBoxWidth; + } + }); + } + } + }); + bounds.activations = []; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Loop type widths:", loops); + return loops; +}; +const renderer = { + bounds, + drawActors, + drawActorsPopup, + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: ({ wrap }) => { + db.setWrap(wrap); + } +}; + + + +/***/ }), + +/***/ 72015: +/***/ ((__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__(17967); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.H, " "); + 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 */ .Nm)(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 */ .Nm)(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/17896441.7cdefb8f.js b/assets/js/17896441.7cdefb8f.js new file mode 100644 index 000000000..42818858c --- /dev/null +++ b/assets/js/17896441.7cdefb8f.js @@ -0,0 +1,2 @@ +/*! For license information please see 17896441.7cdefb8f.js.LICENSE.txt */ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7918],{7967:(t,e)=>{"use strict";e.Nm=e.Rq=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,s=/^.+(:|:)/gim,a=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;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.Rq;if(function(t){return a.indexOf(t[0])>-1}(c))return c;var h=c.match(s);if(!h)return c;var u=h[0];return i.test(u)?e.Rq:c}},9114:(t,e,i)=>{"use strict";i.d(e,{Z:()=>L});var r=i(7294),n=i(5893);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)),s=i?.props.children;return{mdxAdmonitionTitle:s,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 s=i(512),a=i(7325),l=i(3702);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,s.Z)(l.k.common.admonition,l.k.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:s}=t;return(0,n.jsxs)(h,{type:e,className:s,children:[(0,n.jsx)(u,{title:r,icon:i}),(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)(a.Z,{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,s.Z)("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)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(t){return(0,n.jsx)(f,{...x,...t,className:(0,s.Z)("alert alert--success",t.className),children:t.children})}function C(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)(C,{}),title:(0,n.jsx)(a.Z,{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,s.Z)("alert alert--info",t.className),children:t.children})}function k(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 T={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function w(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 S={icon:(0,n.jsx)(w,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const B={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const F={...{note:m,tip:b,info:v,warning:function(t){return(0,n.jsx)(f,{...T,...t,className:(0,s.Z)("alert alert--warning",t.className),children:t.children})},danger:function(t){return(0,n.jsx)(f,{...S,...t,className:(0,s.Z)("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)(b,{title:"success",...t}),caution:function(t){return(0,n.jsx)(f,{...B,...t,className:(0,s.Z)("alert alert--warning",t.className),children:t.children})}}};function L(t){const e=o(t),i=(r=e.type,F[r]||(console.warn(`No admonition component found for admonition type "${r}". Using Info as fallback.`),F.info));var r;return(0,n.jsx)(i,{...e})}},6086:(t,e,i)=>{"use strict";i.d(e,{Z:()=>y});i(7294);var r=i(512),n=i(3702),o=i(8259),s=i(9003),a=i(4791),l=i(7325),c=i(9524),h=i(5893);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.Z)("/");return(0,h.jsx)("li",{className:"breadcrumbs__item",children:(0,h.jsx)(a.Z,{"aria-label":(0,l.I)({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)(a.Z,{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.Z)("breadcrumbs__item",{"breadcrumbs__item--active":i}),children:[e,(0,h.jsx)("meta",{itemProp:"position",content:String(n+1)})]})}function y(){const t=(0,o.s1)(),e=(0,s.Ns)();return t?(0,h.jsx)("nav",{className:(0,r.Z)(n.k.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,l.I)({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}},7741:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>ue});var r=i(7294),n=i(9488),o=i(3768),s=i(5893);const a=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,s.jsx)(a.Provider,{value:n,children:e})}function c(){const t=(0,r.useContext)(a);if(null===t)throw new o.i6("DocProvider");return t}function h(){const{metadata:t,frontMatter:e,assets:i}=c();return(0,s.jsx)(n.d,{title:t.title,description:t.description,keywords:e.keywords,image:i.image??e.image})}var u=i(512),d=i(3488),f=i(9473);function p(){const{metadata:t}=c();return(0,s.jsx)(f.Z,{previous:t.previous,next:t.next})}var g=i(5350),m=i(4617),y=i(3702),x=i(7325);function b(t){let{lastUpdatedAt:e,formattedLastUpdatedAt:i}=t;return(0,s.jsx)(x.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,s.jsx)("b",{children:(0,s.jsx)("time",{dateTime:new Date(1e3*e).toISOString(),children:i})})},children:" on {date}"})}function C(t){let{lastUpdatedBy:e}=t;return(0,s.jsx)(x.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,s.jsx)("b",{children:e})},children:" by {user}"})}function _(t){let{lastUpdatedAt:e,formattedLastUpdatedAt:i,lastUpdatedBy:r}=t;return(0,s.jsxs)("span",{className:y.k.common.lastUpdated,children:[(0,s.jsx)(x.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e&&i?(0,s.jsx)(b,{lastUpdatedAt:e,formattedLastUpdatedAt:i}):"",byUser:r?(0,s.jsx)(C,{lastUpdatedBy:r}):""},children:"Last updated{atDate}{byUser}"}),!1]})}var v=i(4791);const k={iconEdit:"iconEdit_Z9Sw"};function T(t){let{className:e,...i}=t;return(0,s.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(k.iconEdit,e),"aria-hidden":"true",...i,children:(0,s.jsx)("g",{children:(0,s.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 w(t){let{editUrl:e}=t;return(0,s.jsxs)(v.Z,{to:e,className:y.k.common.editThisPage,children:[(0,s.jsx)(T,{}),(0,s.jsx)(x.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var S=i(3852);const B={tags:"tags_jXut",tag:"tag_QGVx"};function F(t){let{tags:e}=t;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("b",{children:(0,s.jsx)(x.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,s.jsx)("ul",{className:(0,u.Z)(B.tags,"padding--none","margin-left--sm"),children:e.map((t=>{let{label:e,permalink:i}=t;return(0,s.jsx)("li",{className:B.tag,children:(0,s.jsx)(S.Z,{label:e,permalink:i})},i)}))})]})}const L={lastUpdated:"lastUpdated_vwxv"};function A(t){return(0,s.jsx)("div",{className:(0,u.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,s.jsx)("div",{className:"col",children:(0,s.jsx)(F,{...t})})})}function M(t){let{editUrl:e,lastUpdatedAt:i,lastUpdatedBy:r,formattedLastUpdatedAt:n}=t;return(0,s.jsxs)("div",{className:(0,u.Z)(y.k.docs.docFooterEditMetaRow,"row"),children:[(0,s.jsx)("div",{className:"col",children:e&&(0,s.jsx)(w,{editUrl:e})}),(0,s.jsx)("div",{className:(0,u.Z)("col",L.lastUpdated),children:(i||r)&&(0,s.jsx)(_,{lastUpdatedAt:i,formattedLastUpdatedAt:n,lastUpdatedBy:r})})]})}function E(){const{metadata:t}=c(),{editUrl:e,lastUpdatedAt:i,formattedLastUpdatedAt:r,lastUpdatedBy:n,tags:o}=t,a=o.length>0,l=!!(e||i||n);return a||l?(0,s.jsxs)("footer",{className:(0,u.Z)(y.k.docs.docFooter,"docusaurus-mt-lg"),children:[a&&(0,s.jsx)(A,{tags:o}),l&&(0,s.jsx)(M,{editUrl:e,lastUpdatedAt:i,lastUpdatedBy:n,formattedLastUpdatedAt:r})]}):null}var N=i(4639),Z=i(107);function j(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 O(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:r}=t;return e.flatMap((t=>{const e=O({toc:t.children,minHeadingLevel:i,maxHeadingLevel:r});return function(t){return t.level>=i&&t.level<=r}(t)?[{...t,children:e}]:e}))}function I(t){const e=t.getBoundingClientRect();return e.top===e.bottom?I(t.parentNode):e}function D(t,e){let{anchorTopOffset:i}=e;const r=t.find((t=>I(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 $(t){const e=(0,r.useRef)(void 0),i=q();(0,r.useEffect)((()=>{if(!t)return()=>{};const{linkClassName:r,linkActiveClassName:n,minHeadingLevel:o,maxHeadingLevel:s}=t;function a(){const t=function(t){return Array.from(document.getElementsByClassName(t))}(r),a=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:s}),l=D(a,{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",a),document.addEventListener("resize",a),a(),()=>{document.removeEventListener("scroll",a),document.removeEventListener("resize",a)}}),[t,i])}function z(t){let{toc:e,className:i,linkClassName:r,isChild:n}=t;return e.length?(0,s.jsx)("ul",{className:n?void 0:i,children:e.map((t=>(0,s.jsxs)("li",{children:[(0,s.jsx)(v.Z,{to:`#${t.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,s.jsx)(z,{isChild:!0,toc:t.children,className:i,linkClassName:r})]},t.id)))}):null}const P=r.memo(z);function R(t){let{toc:e,className:i="table-of-contents table-of-contents__left-border",linkClassName:n="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:a,maxHeadingLevel:l,...c}=t;const h=(0,Z.L)(),u=a??h.tableOfContents.minHeadingLevel,d=l??h.tableOfContents.maxHeadingLevel,f=function(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:n}=t;return(0,r.useMemo)((()=>O({toc:j(e),minHeadingLevel:i,maxHeadingLevel:n})),[e,i,n])}({toc:e,minHeadingLevel:u,maxHeadingLevel:d});return $((0,r.useMemo)((()=>{if(n&&o)return{linkClassName:n,linkActiveClassName:o,minHeadingLevel:u,maxHeadingLevel:d}}),[n,o,u,d])),(0,s.jsx)(P,{toc:f,className:i,linkClassName:n,...c})}const H={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function W(t){let{collapsed:e,...i}=t;return(0,s.jsx)("button",{type:"button",...i,className:(0,u.Z)("clean-btn",H.tocCollapsibleButton,!e&&H.tocCollapsibleButtonExpanded,i.className),children:(0,s.jsx)(x.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const U={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function Y(t){let{toc:e,className:i,minHeadingLevel:r,maxHeadingLevel:n}=t;const{collapsed:o,toggleCollapsed:a}=(0,N.u)({initialState:!0});return(0,s.jsxs)("div",{className:(0,u.Z)(U.tocCollapsible,!o&&U.tocCollapsibleExpanded,i),children:[(0,s.jsx)(W,{collapsed:o,onClick:a}),(0,s.jsx)(N.z,{lazy:!0,className:U.tocCollapsibleContent,collapsed:o,children:(0,s.jsx)(R,{toc:e,minHeadingLevel:r,maxHeadingLevel:n})})]})}const V={tocMobile:"tocMobile_ITEo"};function G(){const{toc:t,frontMatter:e}=c();return(0,s.jsx)(Y,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,u.Z)(y.k.docs.docTocMobile,V.tocMobile)})}const X={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},J="table-of-contents__link toc-highlight",Q="table-of-contents__link--active";function K(t){let{className:e,...i}=t;return(0,s.jsx)("div",{className:(0,u.Z)(X.tableOfContents,"thin-scrollbar",e),children:(0,s.jsx)(R,{...i,linkClassName:J,linkActiveClassName:Q})})}function tt(){const{toc:t,frontMatter:e}=c();return(0,s.jsx)(K,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:y.k.docs.docTocDesktop})}var et=i(3899),it=i(1151),rt=i(1514),nt=i(1048),ot=i(9200);function st(){const{prism:t}=(0,Z.L)(),{colorMode:e}=(0,ot.I)(),i=t.theme,r=t.darkTheme||i;return"dark"===e?r:i}var at=i(7594),lt=i.n(at);const ct=/title=(?["'])(?.*?)\1/,ht=/\{(?<range>[\d,-]+)\}/,ut={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},dt={...ut,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},ft=Object.keys(ut);function pt(t,e){const i=t.map((t=>{const{start:i,end:r}=dt[t];return`(?:${i}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${i})\\s*$`)}function gt(t,e){let i=t.replace(/\n$/,"");const{language:r,magicComments:n,metastring:o}=e;if(o&&ht.test(o)){const t=o.match(ht).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=n[0].className,r=lt()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:i}}if(void 0===r)return{lineClassNames:{},code:i};const s=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return pt(["js","jsBlock"],e);case"jsx":case"tsx":return pt(["js","jsBlock","jsx"],e);case"html":return pt(["js","jsBlock","html"],e);case"python":case"py":case"bash":return pt(["bash"],e);case"markdown":case"md":return pt(["html","jsx","bash"],e);case"tex":case"latex":case"matlab":return pt(["tex"],e);case"lua":case"haskell":case"sql":return pt(["lua"],e);case"wasm":return pt(["wasm"],e);case"vb":case"vba":case"visual-basic":return pt(["vb","rem"],e);case"vbnet":return pt(["vbnet","rem"],e);case"batch":return pt(["rem"],e);case"basic":return pt(["rem","f90"],e);case"fsharp":return pt(["js","ml"],e);case"ocaml":case"sml":return pt(["ml"],e);case"fortran":return pt(["f90"],e);case"cobol":return pt(["cobol"],e);default:return pt(ft,e)}}(r,n),a=i.split("\n"),l=Object.fromEntries(n.map((t=>[t.className,{start:0,range:""}]))),c=Object.fromEntries(n.filter((t=>t.line)).map((t=>{let{className:e,line:i}=t;return[i,e]}))),h=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.start,e]}))),u=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.end,e]})));for(let f=0;f<a.length;){const t=a[f].match(s);if(!t){f+=1;continue}const e=t.slice(1).find((t=>void 0!==t));c[e]?l[c[e]].range+=`${f},`:h[e]?l[h[e]].start=f:u[e]&&(l[u[e]].range+=`${l[u[e]].start}-${f-1},`),a.splice(f,1)}i=a.join("\n");const d={};return Object.entries(l).forEach((t=>{let[e,{range:i}]=t;lt()(i).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:i}}const mt={codeBlockContainer:"codeBlockContainer_Ckt0"};function yt(t){let{as:e,...i}=t;const r=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},i={};return Object.entries(t.plain).forEach((t=>{let[r,n]=t;const o=e[r];o&&"string"==typeof n&&(i[o]=n)})),i}(st());return(0,s.jsx)(e,{...i,style:r,className:(0,u.Z)(i.className,mt.codeBlockContainer,y.k.common.codeBlock)})}const xt={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function bt(t){let{children:e,className:i}=t;return(0,s.jsx)(yt,{as:"pre",tabIndex:0,className:(0,u.Z)(xt.codeBlockStandalone,"thin-scrollbar",i),children:(0,s.jsx)("code",{className:xt.codeBlockLines,children:e})})}const Ct={attributes:!0,characterData:!0,childList:!0,subtree:!0};function _t(t,e){const[i,n]=(0,r.useState)(),s=(0,r.useCallback)((()=>{n(t.current?.closest("[role=tabpanel][hidden]"))}),[t,n]);(0,r.useEffect)((()=>{s()}),[s]),function(t,e,i){void 0===i&&(i=Ct);const n=(0,o.zX)(e),s=(0,o.Ql)(i);(0,r.useEffect)((()=>{const e=new MutationObserver(n);return t&&e.observe(t,s),()=>e.disconnect()}),[t,n,s])}(i,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var vt=i(2573);const kt={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function Tt(t){let{line:e,classNames:i,showLineNumbers:r,getLineProps:n,getTokenProps:o}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=n({line:e,className:(0,u.Z)(i,r&&kt.codeLine)}),l=e.map(((t,e)=>(0,s.jsx)("span",{...o({token:t,key:e})},e)));return(0,s.jsxs)("span",{...a,children:[r?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:kt.codeLineNumber}),(0,s.jsx)("span",{className:kt.codeLineContent,children:l})]}):l,(0,s.jsx)("br",{})]})}function wt(t){return(0,s.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,s.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function St(t){return(0,s.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,s.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const Bt={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Ft(t){let{code:e,className:i}=t;const[n,o]=(0,r.useState)(!1),a=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(t,e){let{target:i=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const o=document.getSelection(),s=o.rangeCount>0&&o.getRangeAt(0);i.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let a=!1;try{a=document.execCommand("copy")}catch{}r.remove(),s&&(o.removeAllRanges(),o.addRange(s)),n&&n.focus()}(e),o(!0),a.current=window.setTimeout((()=>{o(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,s.jsx)("button",{type:"button","aria-label":n?(0,x.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,x.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,x.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",i,Bt.copyButton,n&&Bt.copyButtonCopied),onClick:l,children:(0,s.jsxs)("span",{className:Bt.copyButtonIcons,"aria-hidden":"true",children:[(0,s.jsx)(wt,{className:Bt.copyButtonIcon}),(0,s.jsx)(St,{className:Bt.copyButtonSuccessIcon})]})})}function Lt(t){return(0,s.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,s.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const At={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Mt(t){let{className:e,onClick:i,isEnabled:r}=t;const n=(0,x.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,s.jsx)("button",{type:"button",onClick:i,className:(0,u.Z)("clean-btn",e,r&&At.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,s.jsx)(Lt,{className:At.wordWrapButtonIcon,"aria-hidden":"true"})})}function Et(t){let{children:e,className:i="",metastring:n,title:o,showLineNumbers:a,language:l}=t;const{prism:{defaultLanguage:c,magicComments:h}}=(0,Z.L)(),d=function(t){return t?.toLowerCase()}(l??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(i)??c),f=st(),p=function(){const[t,e]=(0,r.useState)(!1),[i,n]=(0,r.useState)(!1),o=(0,r.useRef)(null),s=(0,r.useCallback)((()=>{const i=o.current.querySelector("code");t?i.removeAttribute("style"):(i.style.whiteSpace="pre-wrap",i.style.overflowWrap="anywhere"),e((t=>!t))}),[o,t]),a=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=o.current,i=t>e||o.current.querySelector("code").hasAttribute("style");n(i)}),[o]);return _t(o,a),(0,r.useEffect)((()=>{a()}),[t,a]),(0,r.useEffect)((()=>(window.addEventListener("resize",a,{passive:!0}),()=>{window.removeEventListener("resize",a)})),[a]),{codeBlockRef:o,isEnabled:t,isCodeScrollable:i,toggle:s}}(),g=function(t){return t?.match(ct)?.groups.title??""}(n)||o,{lineClassNames:m,code:y}=gt(e,{metastring:n,language:d,magicComments:h}),x=a??function(t){return Boolean(t?.includes("showLineNumbers"))}(n);return(0,s.jsxs)(yt,{as:"div",className:(0,u.Z)(i,d&&!i.includes(`language-${d}`)&&`language-${d}`),children:[g&&(0,s.jsx)("div",{className:xt.codeBlockTitle,children:g}),(0,s.jsxs)("div",{className:xt.codeBlockContent,children:[(0,s.jsx)(vt.y$,{theme:f,code:y,language:d??"text",children:t=>{let{className:e,style:i,tokens:r,getLineProps:n,getTokenProps:o}=t;return(0,s.jsx)("pre",{tabIndex:0,ref:p.codeBlockRef,className:(0,u.Z)(e,xt.codeBlock,"thin-scrollbar"),style:i,children:(0,s.jsx)("code",{className:(0,u.Z)(xt.codeBlockLines,x&&xt.codeBlockLinesWithNumbering),children:r.map(((t,e)=>(0,s.jsx)(Tt,{line:t,getLineProps:n,getTokenProps:o,classNames:m[e],showLineNumbers:x},e)))})})}}),(0,s.jsxs)("div",{className:xt.buttonGroup,children:[(p.isEnabled||p.isCodeScrollable)&&(0,s.jsx)(Mt,{className:xt.codeButton,onClick:()=>p.toggle(),isEnabled:p.isEnabled}),(0,s.jsx)(Ft,{className:xt.codeButton,code:y})]})]})]})}function Nt(t){let{children:e,...i}=t;const n=(0,nt.Z)(),o=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),a="string"==typeof o?Et:bt;return(0,s.jsx)(a,{...i,children:o},String(n))}function Zt(t){return(0,s.jsx)("code",{...t})}var jt=i(168);const Ot={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function It(t){return!!t&&("SUMMARY"===t.tagName||It(t.parentElement))}function Dt(t,e){return!!t&&(t===e||Dt(t.parentElement,e))}function qt(t){let{summary:e,children:i,...n}=t;(0,jt.Z)().collectAnchor(n.id);const o=(0,nt.Z)(),a=(0,r.useRef)(null),{collapsed:l,setCollapsed:c}=(0,N.u)({initialState:!n.open}),[h,d]=(0,r.useState)(n.open),f=r.isValidElement(e)?e:(0,s.jsx)("summary",{children:e??"Details"});return(0,s.jsxs)("details",{...n,ref:a,open:h,"data-collapsed":l,className:(0,u.Z)(Ot.details,o&&Ot.isBrowser,n.className),onMouseDown:t=>{It(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;It(e)&&Dt(e,a.current)&&(t.preventDefault(),l?(c(!1),d(!0)):c(!0))},children:[f,(0,s.jsx)(N.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{c(t),d(!t)},children:(0,s.jsx)("div",{className:Ot.collapsibleContent,children:i})})]})}const $t={details:"details_b_Ee"},zt="alert alert--info";function Pt(t){let{...e}=t;return(0,s.jsx)(qt,{...e,className:(0,u.Z)(zt,$t.details,e.className)})}function Rt(t){const e=r.Children.toArray(t.children),i=e.find((t=>r.isValidElement(t)&&"summary"===t.type)),n=(0,s.jsx)(s.Fragment,{children:e.filter((t=>t!==i))});return(0,s.jsx)(Pt,{...t,summary:i,children:n})}function Ht(t){return(0,s.jsx)(et.Z,{...t})}const Wt={containsTaskList:"containsTaskList_mC6p"};function Ut(t){if(void 0!==t)return(0,u.Z)(t,t?.includes("contains-task-list")&&Wt.containsTaskList)}const Yt={img:"img_ev3q"};var Vt=i(9114),Gt=i(3256),Xt=i(2303),Jt=i(6365);const Qt="docusaurus-mermaid-container";function Kt(){const{colorMode:t}=(0,ot.I)(),e=(0,Z.L)().mermaid,i=e.theme[t],{options:n}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...n,theme:i})),[i,n])}function te(t){let{text:e,config:i}=t;const[n,o]=(0,r.useState)(null),s=(0,r.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,a=Kt(),l=i??a;return(0,r.useEffect)((()=>{(async function(t){let{id:e,text:i,config:r}=t;Jt.L.mermaidAPI.initialize(r);try{return await Jt.L.render(e,i)}catch(n){throw document.querySelector(`#d${e}`)?.remove(),n}})({id:s,text:e,config:l}).then(o).catch((t=>{o((()=>{throw t}))}))}),[s,e,l]),n}const ee={container:"container_lyt7"};function ie(t){let{renderResult:e}=t;const i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const t=i.current;e.bindFunctions?.(t)}),[e]),(0,s.jsx)("div",{ref:i,className:`${Qt} ${ee.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function re(t){let{value:e}=t;const i=te({text:e});return null===i?null:(0,s.jsx)(ie,{renderResult:i})}const ne={Head:rt.Z,details:Rt,Details:Rt,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,s.jsx)(Zt,{...t}):(0,s.jsx)(Nt,{...t})},a:function(t){return(0,s.jsx)(v.Z,{...t})},pre:function(t){return(0,s.jsx)(s.Fragment,{children:t.children})},ul:function(t){return(0,s.jsx)("ul",{...t,className:Ut(t.className)})},li:function(t){return(0,jt.Z)().collectAnchor(t.id),(0,s.jsx)("li",{...t})},img:function(t){return(0,s.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,u.Z)(e,Yt.img))});var e},h1:t=>(0,s.jsx)(Ht,{as:"h1",...t}),h2:t=>(0,s.jsx)(Ht,{as:"h2",...t}),h3:t=>(0,s.jsx)(Ht,{as:"h3",...t}),h4:t=>(0,s.jsx)(Ht,{as:"h4",...t}),h5:t=>(0,s.jsx)(Ht,{as:"h5",...t}),h6:t=>(0,s.jsx)(Ht,{as:"h6",...t}),admonition:Vt.Z,mermaid:function(t){return(0,s.jsx)(Gt.Z,{fallback:t=>(0,s.jsx)(Xt.Ac,{...t}),children:(0,s.jsx)(re,{...t})})}};function oe(t){let{children:e}=t;return(0,s.jsx)(it.Z,{components:ne,children:e})}function se(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,s.jsxs)("div",{className:(0,u.Z)(y.k.docs.docMarkdown,"markdown"),children:[i&&(0,s.jsx)("header",{children:(0,s.jsx)(et.Z,{as:"h1",children:i})}),(0,s.jsx)(oe,{children:e})]})}var ae=i(6086),le=i(9501);const ce={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function he(t){let{children:e}=t;const i=function(){const{frontMatter:t,toc:e}=c(),i=(0,d.i)(),r=t.hide_table_of_contents,n=!r&&e.length>0;return{hidden:r,mobile:n?(0,s.jsx)(G,{}):void 0,desktop:!n||"desktop"!==i&&"ssr"!==i?void 0:(0,s.jsx)(tt,{})}}(),{metadata:{unlisted:r}}=c();return(0,s.jsxs)("div",{className:"row",children:[(0,s.jsxs)("div",{className:(0,u.Z)("col",!i.hidden&&ce.docItemCol),children:[r&&(0,s.jsx)(le.Z,{}),(0,s.jsx)(g.Z,{}),(0,s.jsxs)("div",{className:ce.docItemContainer,children:[(0,s.jsxs)("article",{children:[(0,s.jsx)(ae.Z,{}),(0,s.jsx)(m.Z,{}),i.mobile,(0,s.jsx)(se,{children:e}),(0,s.jsx)(E,{})]}),(0,s.jsx)(p,{})]})]}),i.desktop&&(0,s.jsx)("div",{className:"col col--3",children:i.desktop})]})}function ue(t){const e=`docs-doc-id-${t.content.metadata.id}`,i=t.content;return(0,s.jsx)(l,{content:t.content,children:(0,s.jsxs)(n.FG,{className:e,children:[(0,s.jsx)(h,{}),(0,s.jsx)(he,{children:(0,s.jsx)(i,{})})]})})}},9473:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});i(7294);var r=i(7325),n=i(512),o=i(4791),s=i(5893);function a(t){const{permalink:e,title:i,subLabel:r,isNext:a}=t;return(0,s.jsxs)(o.Z,{className:(0,n.Z)("pagination-nav__link",a?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[r&&(0,s.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,s.jsx)("div",{className:"pagination-nav__label",children:i})]})}function l(t){const{previous:e,next:i}=t;return(0,s.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[e&&(0,s.jsx)(a,{...e,subLabel:(0,s.jsx)(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),i&&(0,s.jsx)(a,{...i,subLabel:(0,s.jsx)(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4617:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});i(7294);var r=i(512),n=i(7325),o=i(3702),s=i(8801),a=i(5893);function l(t){let{className:e}=t;const i=(0,s.E)();return i.badge?(0,a.jsx)("span",{className:(0,r.Z)(e,o.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,a.jsx)(n.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:i.label},children:"Version: {versionLabel}"})}):null}},5350:(t,e,i)=>{"use strict";i.d(e,{Z:()=>m});i(7294);var r=i(512),n=i(9962),o=i(4791),s=i(7325),a=i(9871),l=i(3702),c=i(6409),h=i(8801),u=i(5893);const d={unreleased:function(t){let{siteTitle:e,versionMetadata:i}=t;return(0,u.jsx)(s.Z,{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)(s.Z,{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)(s.Z,{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.Z,{to:i,onClick:r,children:(0,u.jsx)(s.Z,{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.Z)(),{pluginId:s}=(0,a.gA)({failfast:!0}),{savePreferredVersionName:h}=(0,c.J)(s),{latestDocSuggestion:d,latestVersionSuggestion:g}=(0,a.Jo)(s),m=d??(y=g).docs.find((t=>t.id===y.mainDocId));var y;return(0,u.jsxs)("div",{className:(0,r.Z)(e,l.k.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.E)();return i.banner?(0,u.jsx)(g,{className:e,versionMetadata:i}):null}},3852:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});i(7294);var r=i(512),n=i(4791);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var s=i(5893);function a(t){let{permalink:e,label:i,count:a}=t;return(0,s.jsxs)(n.Z,{href:e,className:(0,r.Z)(o.tag,a?o.tagWithCount:o.tagRegular),children:[i,a&&(0,s.jsx)("span",{children:a})]})}},9501:(t,e,i)=>{"use strict";i.d(e,{Z:()=>f});i(7294);var r=i(512),n=i(7325),o=i(1514),s=i(5893);function a(){return(0,s.jsx)(n.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,s.jsx)(n.Z,{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,s.jsx)(o.Z,{children:(0,s.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var h=i(3702),u=i(9114);function d(t){let{className:e}=t;return(0,s.jsx)(u.Z,{type:"caution",title:(0,s.jsx)(a,{}),className:(0,r.Z)(e,h.k.common.unlistedBanner),children:(0,s.jsx)(l,{})})}function f(t){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c,{}),(0,s.jsx)(d,{...t})]})}},7484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",s="hour",a="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()<i.date())return-t(i,e);var r=12*(i.year()-e.year())+(i.month()-e.month()),n=e.clone().add(r,c),o=i-n<0,s=e.clone().add(r+(o?-1:1),c);return+(-(r+(i-n)/(o?n-s:s-n))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:u,w:l,d:a,D:d,h:s,m:o,s:n,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",C={};C[b]=m;var _="$isDayjsObject",v=function(t){return t instanceof S||!(!t||!t[_])},k=function t(e,i,r){var n;if(!e)return b;if("string"==typeof e){var o=e.toLowerCase();C[o]&&(n=o),i&&(C[o]=i,n=o);var s=e.split("-");if(!n&&s.length>1)return t(s[0])}else{var a=e.name;C[a]=e,n=a}return!r&&n&&(b=n),n||!r&&b},T=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new S(i)},w=x;w.l=k,w.i=v,w.w=function(t,e){return T(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var S=function(){function m(t){this.$L=k(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(w.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 w},y.isValid=function(){return!(this.$d.toString()===f)},y.isSame=function(t,e){var i=T(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return T(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<T(t)},y.$g=function(t,e,i){return w.u(t)?this[e]:this.set(i,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var i=this,r=!!w.u(e)||e,h=w.p(t),f=function(t,e){var n=w.w(i.$u?Date.UTC(i.$y,e,t):new Date(i.$y,e,t),i);return r?n:n.endOf(a)},p=function(t,e){return w.w(i.toDate()[t].apply(i.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),i)},g=this.$W,m=this.$M,y=this.$D,x="set"+(this.$u?"UTC":"");switch(h){case u:return r?f(1,0):f(31,11);case c:return r?f(1,m):f(0,m+1);case l:var b=this.$locale().weekStart||0,C=(g<b?g+7:g)-b;return f(r?y-C:y+(6-C),m);case a:case d:return p(x+"Hours",0);case s:return p(x+"Minutes",1);case o:return p(x+"Seconds",2);case n:return p(x+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var i,l=w.p(t),h="set"+(this.$u?"UTC":""),f=(i={},i[a]=h+"Date",i[d]=h+"Date",i[c]=h+"Month",i[u]=h+"FullYear",i[s]=h+"Hours",i[o]=h+"Minutes",i[n]=h+"Seconds",i[r]=h+"Milliseconds",i)[l],p=l===a?this.$D+(e-this.$W):e;if(l===c||l===u){var g=this.clone().set(d,1);g.$d[f](p),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](p);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[w.p(t)]()},y.add=function(r,h){var d,f=this;r=Number(r);var p=w.p(h),g=function(t){var e=T(f);return w.w(e.date(e.date()+Math.round(t*r)),f)};if(p===c)return this.set(c,this.$M+r);if(p===u)return this.set(u,this.$y+r);if(p===a)return g(1);if(p===l)return g(7);var m=(d={},d[o]=e,d[s]=i,d[n]=t,d)[p]||1,y=this.$d.getTime()+r*m;return w.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return i.invalidDate||f;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=w.z(this),o=this.$H,s=this.$m,a=this.$M,l=i.weekdays,c=i.months,h=i.meridiem,u=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},d=function(t){return w.s(o%12||12,t,"0")},p=h||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return w.s(e.$y,4,"0");case"M":return a+1;case"MM":return w.s(a+1,2,"0");case"MMM":return u(i.monthsShort,a,c,3);case"MMMM":return u(c,a);case"D":return e.$D;case"DD":return w.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(i.weekdaysMin,e.$W,l,2);case"ddd":return u(i.weekdaysShort,e.$W,l,3);case"dddd":return l[e.$W];case"H":return String(o);case"HH":return w.s(o,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return p(o,s,!0);case"A":return p(o,s,!1);case"m":return String(s);case"mm":return w.s(s,2,"0");case"s":return String(e.$s);case"ss":return w.s(e.$s,2,"0");case"SSS":return w.s(e.$ms,3,"0");case"Z":return n}return null}(t)||n.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,d,f){var p,g=this,m=w.p(d),y=T(r),x=(y.utcOffset()-this.utcOffset())*e,b=this-y,C=function(){return w.m(g,y)};switch(m){case u:p=C()/12;break;case c:p=C();break;case h:p=C()/3;break;case l:p=(b-x)/6048e5;break;case a:p=(b-x)/864e5;break;case s:p=b/i;break;case o:p=b/e;break;case n:p=b/t;break;default:p=b}return f?p:w.a(p)},y.daysInMonth=function(){return this.endOf(c).$D},y.$locale=function(){return C[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var i=this.clone(),r=k(t,e,!0);return r&&(i.$L=r),i},y.clone=function(){return w.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},m}(),B=S.prototype;return T.prototype=B,[["$ms",r],["$s",n],["$m",o],["$H",s],["$W",a],["$M",c],["$y",u],["$D",d]].forEach((function(t){B[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),T.extend=function(t,e){return t.$i||(t(e,S,T),t.$i=!0),T},T.locale=k,T.isDayjs=v,T.unix=function(t){return T(1e3*t)},T.en=C[b],T.Ls=C,T.p={},T}()},7856:function(t){t.exports=function(){"use strict";const{entries:t,setPrototypeOf:e,isFrozen:i,getPrototypeOf:r,getOwnPropertyDescriptor:n}=Object;let{freeze:o,seal:s,create:a}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(t){return t}),s||(s=function(t){return t}),l||(l=function(t,e,i){return t.apply(e,i)}),c||(c=function(t,e){return new t(...e)});const h=_(Array.prototype.forEach),u=_(Array.prototype.pop),d=_(Array.prototype.push),f=_(String.prototype.toLowerCase),p=_(String.prototype.toString),g=_(String.prototype.match),m=_(String.prototype.replace),y=_(String.prototype.indexOf),x=_(String.prototype.trim),b=_(RegExp.prototype.test),C=v(TypeError);function _(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return l(t,e,r)}}function v(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return c(t,i)}}function k(t,r){let n=arguments.length>2&&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 T(t){for(let e=0;e<t.length;e++)void 0===n(t,e)&&(t[e]=null);return t}function w(e){const i=a(null);for(const[r,o]of t(e))void 0!==n(e,r)&&(Array.isArray(o)?i[r]=T(o):o&&"object"==typeof o&&o.constructor===Object?i[r]=w(o):i[r]=o);return i}function S(t,e){for(;null!==t;){const i=n(t,e);if(i){if(i.get)return _(i.get);if("function"==typeof i.value)return _(i.value)}t=r(t)}function i(t){return console.warn("fallback value for",t),null}return i}const B=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),F=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),L=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),A=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),M=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),E=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),N=o(["#text"]),Z=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),j=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),O=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),I=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),D=s(/\{\{[\w\W]*|[\w\W]*\}\}/gm),q=s(/<%[\w\W]*|[\w\W]*%>/gm),$=s(/\${[\w\W]*}/gm),z=s(/^data-[\-\w.\u00B7-\uFFFF]/),P=s(/^aria-[\-\w]+$/),R=s(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=s(/^(?:\w+script|data):/i),W=s(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),U=s(/^html$/i);var Y=Object.freeze({__proto__:null,MUSTACHE_EXPR:D,ERB_EXPR:q,TMPLIT_EXPR:$,DATA_ATTR:z,ARIA_ATTR:P,IS_ALLOWED_URI:R,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:W,DOCTYPE_NAME:U});const V=function(){return"undefined"==typeof window?null:window},G=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 X(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V();const i=t=>X(t);if(i.version="3.0.8",i.removed=[],!e||!e.document||9!==e.document.nodeType)return i.isSupported=!1,i;let{document:r}=e;const n=r,s=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:_,Element:v,NodeFilter:T,NamedNodeMap:D=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:q,DOMParser:$,trustedTypes:z}=e,P=v.prototype,H=S(P,"cloneNode"),W=S(P,"nextSibling"),J=S(P,"childNodes"),Q=S(P,"parentNode");if("function"==typeof c){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let K,tt="";const{implementation:et,createNodeIterator:it,createDocumentFragment:rt,getElementsByTagName:nt}=r,{importNode:ot}=n;let st={};i.isSupported="function"==typeof t&&"function"==typeof Q&&et&&void 0!==et.createHTMLDocument;const{MUSTACHE_EXPR:at,ERB_EXPR:lt,TMPLIT_EXPR:ct,DATA_ATTR:ht,ARIA_ATTR:ut,IS_SCRIPT_OR_DATA:dt,ATTR_WHITESPACE:ft}=Y;let{IS_ALLOWED_URI:pt}=Y,gt=null;const mt=k({},[...B,...F,...L,...M,...N]);let yt=null;const xt=k({},[...Z,...j,...O,...I]);let bt=Object.seal(a(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}})),Ct=null,_t=null,vt=!0,kt=!0,Tt=!1,wt=!0,St=!1,Bt=!1,Ft=!1,Lt=!1,At=!1,Mt=!1,Et=!1,Nt=!0,Zt=!1;const jt="user-content-";let Ot=!0,It=!1,Dt={},qt=null;const $t=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 zt=null;const Pt=k({},["audio","video","img","source","image","track"]);let Rt=null;const Ht=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Wt="http://www.w3.org/1998/Math/MathML",Ut="http://www.w3.org/2000/svg",Yt="http://www.w3.org/1999/xhtml";let Vt=Yt,Gt=!1,Xt=null;const Jt=k({},[Wt,Ut,Yt],p);let Qt=null;const Kt=["application/xhtml+xml","text/html"],te="text/html";let ee=null,ie=null;const re=r.createElement("form"),ne=function(t){return t instanceof RegExp||t instanceof Function},oe=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ie||ie!==t){if(t&&"object"==typeof t||(t={}),t=w(t),Qt=-1===Kt.indexOf(t.PARSER_MEDIA_TYPE)?te:t.PARSER_MEDIA_TYPE,ee="application/xhtml+xml"===Qt?p:f,gt="ALLOWED_TAGS"in t?k({},t.ALLOWED_TAGS,ee):mt,yt="ALLOWED_ATTR"in t?k({},t.ALLOWED_ATTR,ee):xt,Xt="ALLOWED_NAMESPACES"in t?k({},t.ALLOWED_NAMESPACES,p):Jt,Rt="ADD_URI_SAFE_ATTR"in t?k(w(Ht),t.ADD_URI_SAFE_ATTR,ee):Ht,zt="ADD_DATA_URI_TAGS"in t?k(w(Pt),t.ADD_DATA_URI_TAGS,ee):Pt,qt="FORBID_CONTENTS"in t?k({},t.FORBID_CONTENTS,ee):$t,Ct="FORBID_TAGS"in t?k({},t.FORBID_TAGS,ee):{},_t="FORBID_ATTR"in t?k({},t.FORBID_ATTR,ee):{},Dt="USE_PROFILES"in t&&t.USE_PROFILES,vt=!1!==t.ALLOW_ARIA_ATTR,kt=!1!==t.ALLOW_DATA_ATTR,Tt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,wt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,St=t.SAFE_FOR_TEMPLATES||!1,Bt=t.WHOLE_DOCUMENT||!1,At=t.RETURN_DOM||!1,Mt=t.RETURN_DOM_FRAGMENT||!1,Et=t.RETURN_TRUSTED_TYPE||!1,Lt=t.FORCE_BODY||!1,Nt=!1!==t.SANITIZE_DOM,Zt=t.SANITIZE_NAMED_PROPS||!1,Ot=!1!==t.KEEP_CONTENT,It=t.IN_PLACE||!1,pt=t.ALLOWED_URI_REGEXP||R,Vt=t.NAMESPACE||Yt,bt=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(bt.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(bt.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(bt.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),St&&(kt=!1),Mt&&(At=!0),Dt&&(gt=k({},N),yt=[],!0===Dt.html&&(k(gt,B),k(yt,Z)),!0===Dt.svg&&(k(gt,F),k(yt,j),k(yt,I)),!0===Dt.svgFilters&&(k(gt,L),k(yt,j),k(yt,I)),!0===Dt.mathMl&&(k(gt,M),k(yt,O),k(yt,I))),t.ADD_TAGS&&(gt===mt&&(gt=w(gt)),k(gt,t.ADD_TAGS,ee)),t.ADD_ATTR&&(yt===xt&&(yt=w(yt)),k(yt,t.ADD_ATTR,ee)),t.ADD_URI_SAFE_ATTR&&k(Rt,t.ADD_URI_SAFE_ATTR,ee),t.FORBID_CONTENTS&&(qt===$t&&(qt=w(qt)),k(qt,t.FORBID_CONTENTS,ee)),Ot&&(gt["#text"]=!0),Bt&&k(gt,["html","head","body"]),gt.table&&(k(gt,["tbody"]),delete Ct.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw C('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw C('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');K=t.TRUSTED_TYPES_POLICY,tt=K.createHTML("")}else void 0===K&&(K=G(z,s)),null!==K&&"string"==typeof tt&&(tt=K.createHTML(""));o&&o(t),ie=t}},se=k({},["mi","mo","mn","ms","mtext"]),ae=k({},["foreignobject","desc","title","annotation-xml"]),le=k({},["title","style","font","a","script"]),ce=k({},[...F,...L,...A]),he=k({},[...M,...E]),ue=function(t){let e=Q(t);e&&e.tagName||(e={namespaceURI:Vt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!Xt[t.namespaceURI]&&(t.namespaceURI===Ut?e.namespaceURI===Yt?"svg"===i:e.namespaceURI===Wt?"svg"===i&&("annotation-xml"===r||se[r]):Boolean(ce[i]):t.namespaceURI===Wt?e.namespaceURI===Yt?"math"===i:e.namespaceURI===Ut?"math"===i&&ae[r]:Boolean(he[i]):t.namespaceURI===Yt?!(e.namespaceURI===Ut&&!ae[r])&&!(e.namespaceURI===Wt&&!se[r])&&!he[i]&&(le[i]||!ce[i]):!("application/xhtml+xml"!==Qt||!Xt[t.namespaceURI]))},de=function(t){d(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){t.remove()}},fe=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&&!yt[t])if(At||Mt)try{de(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},pe=function(t){let e=null,i=null;if(Lt)t="<remove></remove>"+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===Qt&&Vt===Yt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");const n=K?K.createHTML(t):t;if(Vt===Yt)try{e=(new $).parseFromString(n,Qt)}catch(s){}if(!e||!e.documentElement){e=et.createDocument(Vt,"template",null);try{e.documentElement.innerHTML=Gt?tt:n}catch(s){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Vt===Yt?nt.call(e,Bt?"html":"body")[0]:Bt?e.documentElement:o},ge=function(t){return it.call(t.ownerDocument||t,t,T.SHOW_ELEMENT|T.SHOW_COMMENT|T.SHOW_TEXT,null)},me=function(t){return t instanceof q&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof D)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ye=function(t){return"function"==typeof _&&t instanceof _},xe=function(t,e,r){st[t]&&h(st[t],(t=>{t.call(i,e,r,ie)}))},be=function(t){let e=null;if(xe("beforeSanitizeElements",t,null),me(t))return de(t),!0;const r=ee(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:r,allowedTags:gt}),t.hasChildNodes()&&!ye(t.firstElementChild)&&b(/<[/\w]/g,t.innerHTML)&&b(/<[/\w]/g,t.textContent))return de(t),!0;if(!gt[r]||Ct[r]){if(!Ct[r]&&_e(r)){if(bt.tagNameCheck instanceof RegExp&&b(bt.tagNameCheck,r))return!1;if(bt.tagNameCheck instanceof Function&&bt.tagNameCheck(r))return!1}if(Ot&&!qt[r]){const e=Q(t)||t.parentNode,i=J(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r)e.insertBefore(H(i[r],!0),W(t))}return de(t),!0}return t instanceof v&&!ue(t)?(de(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!b(/<\/no(script|embed|frames)/i,t.innerHTML)?(St&&3===t.nodeType&&(e=t.textContent,h([at,lt,ct],(t=>{e=m(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),xe("afterSanitizeElements",t,null),!1):(de(t),!0)},Ce=function(t,e,i){if(Nt&&("id"===e||"name"===e)&&(i in r||i in re))return!1;if(kt&&!_t[e]&&b(ht,e));else if(vt&&b(ut,e));else if(!yt[e]||_t[e]){if(!(_e(t)&&(bt.tagNameCheck instanceof RegExp&&b(bt.tagNameCheck,t)||bt.tagNameCheck instanceof Function&&bt.tagNameCheck(t))&&(bt.attributeNameCheck instanceof RegExp&&b(bt.attributeNameCheck,e)||bt.attributeNameCheck instanceof Function&&bt.attributeNameCheck(e))||"is"===e&&bt.allowCustomizedBuiltInElements&&(bt.tagNameCheck instanceof RegExp&&b(bt.tagNameCheck,i)||bt.tagNameCheck instanceof Function&&bt.tagNameCheck(i))))return!1}else if(Rt[e]);else if(b(pt,m(i,ft,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==y(i,"data:")||!zt[t])if(Tt&&!b(dt,m(i,ft,"")));else if(i)return!1;return!0},_e=function(t){return t.indexOf("-")>0},ve=function(t){xe("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:yt};let n=e.length;for(;n--;){const s=e[n],{name:a,namespaceURI:l,value:c}=s,d=ee(a);let f="value"===a?c:x(c);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,xe("uponSanitizeAttribute",t,r),f=r.attrValue,r.forceKeepAttr)continue;if(fe(a,t),!r.keepAttr)continue;if(!wt&&b(/\/>/i,f)){fe(a,t);continue}St&&h([at,lt,ct],(t=>{f=m(f,t," ")}));const p=ee(t.nodeName);if(Ce(p,d,f)){if(!Zt||"id"!==d&&"name"!==d||(fe(a,t),f=jt+f),K&&"object"==typeof z&&"function"==typeof z.getAttributeType)if(l);else switch(z.getAttributeType(p,d)){case"TrustedHTML":f=K.createHTML(f);break;case"TrustedScriptURL":f=K.createScriptURL(f)}try{l?t.setAttributeNS(l,a,f):t.setAttribute(a,f),u(i.removed)}catch(o){}}}xe("afterSanitizeAttributes",t,null)},ke=function t(e){let i=null;const r=ge(e);for(xe("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)xe("uponSanitizeShadowNode",i,null),be(i)||(i.content instanceof l&&t(i.content),ve(i));xe("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,s=null,a=null;if(Gt=!t,Gt&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ye(t)){if("function"!=typeof t.toString)throw C("toString is not a function");if("string"!=typeof(t=t.toString()))throw C("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Ft||oe(e),i.removed=[],"string"==typeof t&&(It=!1),It){if(t.nodeName){const e=ee(t.nodeName);if(!gt[e]||Ct[e])throw C("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof _)r=pe("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!At&&!St&&!Bt&&-1===t.indexOf("<"))return K&&Et?K.createHTML(t):t;if(r=pe(t),!r)return At?null:Et?tt:""}r&&Lt&&de(r.firstChild);const c=ge(It?t:r);for(;s=c.nextNode();)be(s)||(s.content instanceof l&&ke(s.content),ve(s));if(It)return t;if(At){if(Mt)for(a=rt.call(r.ownerDocument);r.firstChild;)a.appendChild(r.firstChild);else a=r;return(yt.shadowroot||yt.shadowrootmode)&&(a=ot.call(n,a,!0)),a}let u=Bt?r.outerHTML:r.innerHTML;return Bt&>["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&b(U,r.ownerDocument.doctype.name)&&(u="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+u),St&&h([at,lt,ct],(t=>{u=m(u,t," ")})),K&&Et?K.createHTML(u):u},i.setConfig=function(){oe(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},i.clearConfig=function(){ie=null,Ft=!1},i.isValidAttribute=function(t,e,i){ie||oe({});const r=ee(t),n=ee(e);return Ce(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(st[t]=st[t]||[],d(st[t],e))},i.removeHook=function(t){if(st[t])return u(st[t])},i.removeHooks=function(t){st[t]&&(st[t]=[])},i.removeAllHooks=function(){st={}},i}return X()}()},7594:(t,e)=>{function i(t){let e,i=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))i.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,n,o]=e;if(r&&o){r=parseInt(r),o=parseInt(o);const t=r<o?1:-1;"-"!==n&&".."!==n&&"\u2025"!==n||(o+=t);for(let e=r;e!==o;e+=t)i.push(e)}}return i}e.default=i,t.exports=i},8464:(t,e,i)=>{"use strict";function r(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var n=r.reduce((function(t,e){var i=e.match(/\n([\t ]+|(?!\s).)/g);return i?t.concat(i.map((function(t){var e,i;return null!==(i=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==i?i:0}))):t}),[]);if(n.length){var o=new RegExp("\n[\t ]{"+Math.min.apply(Math,n)+"}","g");r=r.map((function(t){return t.replace(o,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var s=r[0];return e.forEach((function(t,e){var i=s.match(/(?:^|\n)( *)$/),n=i?i[1]:"",o=t;"string"==typeof t&&t.includes("\n")&&(o=String(t).split("\n").map((function(t,e){return 0===e?t:""+n+t})).join("\n")),s+=o+r[e+1]})),s}i.d(e,{Z:()=>r})},1151:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a,a:()=>s});var r=i(7294);const n={},o=r.createContext(n);function s(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:s(t.components),r.createElement(o.Provider,{value:e},t.children)}},4218:(t,e,i)=>{"use strict";function r(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 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,{Nb1:()=>ca,LLu:()=>x,F5q:()=>y,$0Z:()=>va,Dts:()=>Ta,WQY:()=>Sa,qpX:()=>Fa,u93:()=>La,tFB:()=>Ma,YY7:()=>Za,OvA:()=>Oa,dCK:()=>Da,zgE:()=>za,fGX:()=>Ra,$m7:()=>Wa,c_6:()=>da,fxm:()=>Ya,FdL:()=>el,ak_:()=>il,SxZ:()=>ol,eA_:()=>al,jsv:()=>cl,iJ:()=>ll,JHv:()=>pr,jvg:()=>ga,Fp7:()=>r,VV$:()=>n,ve8:()=>xa,tiA:()=>kr,BYU:()=>mn,PKp:()=>vr,Xf:()=>Ns,K2I:()=>Zs,Ys:()=>js,td_:()=>Os,YPS:()=>Yi,rr1:()=>Nn,i$Z:()=>uo,y2j:()=>Pn,WQD:()=>Mn,U8T:()=>Bn,Z_i:()=>Ln,Ox9:()=>Dn,F0B:()=>Qn,LqH:()=>Rn,S1K:()=>Fn,Zyz:()=>In,Igq:()=>zn,YDX:()=>qn,EFj:()=>$n});var s=1,a=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,b="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,C=t===s||t===c?-1:1,_=t===c||t===a?"x":"y",v=t===s||t===l?u:d;function k(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,T=Math.max(m,0)+x,w=e.range(),S=+w[0]+b,B=+w[w.length-1]+b,F=(e.bandwidth?p:f)(e.copy(),b),L=u.selection?u.selection():u,A=L.selectAll(".domain").data([null]),M=L.selectAll(".tick").data(d,e).order(),E=M.exit(),N=M.enter().append("g").attr("class","tick"),Z=M.select("line"),j=M.select("text");A=A.merge(A.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(N),Z=Z.merge(N.append("line").attr("stroke","currentColor").attr(_+"2",C*m)),j=j.merge(N.append("text").attr("fill","currentColor").attr(_,C*T).attr("dy",t===s?"0em":t===l?"0.71em":"0.32em")),u!==L&&(A=A.transition(u),M=M.transition(u),Z=Z.transition(u),j=j.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=F(t))?v(t+b):this.getAttribute("transform")})),N.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:F(t))+b)}))),E.remove(),A.attr("d",t===c||t===a?y?"M"+C*y+","+S+"H"+b+"V"+B+"H"+C*y:"M"+b+","+S+"V"+B:y?"M"+S+","+C*y+"V"+b+"H"+B+"V"+C*y:"M"+S+","+b+"H"+B),M.attr("opacity",1).attr("transform",(function(t){return v(F(t)+b)})),Z.attr(_+"2",C*m),j.attr(_,C*T).text(k),L.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===a?"start":t===c?"end":"middle"),L.each((function(){this.__axis=F}))}return k.scale=function(t){return arguments.length?(e=t,k):e},k.ticks=function(){return i=Array.from(arguments),k},k.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),k):i.slice()},k.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),k):r&&r.slice()},k.tickFormat=function(t){return arguments.length?(n=t,k):n},k.tickSize=function(t){return arguments.length?(m=y=+t,k):m},k.tickSizeInner=function(t){return arguments.length?(m=+t,k):m},k.tickSizeOuter=function(t){return arguments.length?(y=+t,k):y},k.tickPadding=function(t){return arguments.length?(x=+t,k):x},k.offset=function(t){return arguments.length?(b=+t,k):b},k}function y(t){return m(s,t)}function x(t){return m(l,t)}function b(){}function C(t){return null==t?b:function(){return this.querySelector(t)}}function _(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function k(t){return null==t?v:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function w(t){return function(e){return e.matches(t)}}var S=Array.prototype.find;function B(){return this.firstElementChild}var F=Array.prototype.filter;function L(){return Array.from(this.children)}function A(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 s,a=0,l=e.length,c=o.length;a<c;++a)(s=e[a])?(s.__data__=o[a],r[a]=s):i[a]=new M(t,o[a]);for(;a<l;++a)(s=e[a])&&(n[a]=s)}function N(t,e,i,r,n,o,s){var a,l,c,h=new Map,u=e.length,d=o.length,f=new Array(u);for(a=0;a<u;++a)(l=e[a])&&(f[a]=c=s.call(l,l.__data__,a,e)+"",h.has(c)?n[a]=l:h.set(c,l));for(a=0;a<d;++a)c=s.call(t,o[a],a,o)+"",(l=h.get(c))?(r[a]=l,l.__data__=o[a],h.delete(c)):i[a]=new M(t,o[a]);for(a=0;a<u;++a)(l=e[a])&&h.get(f[a])===l&&(n[a]=l)}function Z(t){return t.__data__}function j(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function O(t,e){return t<e?-1:t>e?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 I="http://www.w3.org/1999/xhtml";const D={svg:"http://www.w3.org/2000/svg",xhtml:I,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function q(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),D.hasOwnProperty(e)?{space:D[e],local:t}:t}function $(t){return function(){this.removeAttribute(t)}}function z(t){return function(){this.removeAttributeNS(t.space,t.local)}}function P(t,e){return function(){this.setAttribute(t,e)}}function R(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 U(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Y(t){return function(){this.style.removeProperty(t)}}function V(t,e,i){return function(){this.style.setProperty(t,e,i)}}function G(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function X(t,e){return t.style.getPropertyValue(e)||U(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<n;)i.add(e[r])}function nt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.remove(e[r])}function ot(t){return function(){rt(this,t)}}function st(t){return function(){nt(this,t)}}function at(t,e){return function(){(e.apply(this,arguments)?rt:nt)(this,t)}}function lt(){this.textContent=""}function ct(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function ft(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function pt(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mt(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===I&&e.documentElement.namespaceURI===I?e.createElement(t):e.createElementNS(i,t)}}function yt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function xt(t){var e=q(t);return(e.local?yt:mt)(e)}function bt(){return null}function Ct(){var t=this.parentNode;t&&t.removeChild(this)}function _t(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return function(){var e=this.__on;if(e){for(var i,r=0,n=-1,o=e.length;r<o;++r)i=e[r],t.type&&i.type!==t.type||i.name!==t.name?e[++n]=i:this.removeEventListener(i.type,i.listener,i.options);++n?e.length=n:delete this.__on}}}function Tt(t,e,i){return function(){var r,n=this.__on,o=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(n)for(var s=0,a=n.length;s<a;++s)if((r=n[s]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=i),void(r.value=e);this.addEventListener(t.type,o,i),r={type:t.type,name:t.name,value:e,listener:o,options:i},n?n.push(r):this.__on=[r]}}function wt(t,e,i){var r=U(t),n=r.CustomEvent;"function"==typeof n?n=new n(e,i):(n=r.document.createEvent("Event"),i?(n.initEvent(e,i.bubbles,i.cancelable),n.detail=i.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function St(t,e){return function(){return wt(this,t,e)}}function Bt(t,e){return function(){return wt(this,t,e.apply(this,arguments))}}it.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Ft=[null];function Lt(t,e){this._groups=t,this._parents=e}function At(){return new Lt([[document.documentElement]],Ft)}Lt.prototype=At.prototype={constructor:Lt,select:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,s,a=e[n],l=a.length,c=r[n]=new Array(l),h=0;h<l;++h)(o=a[h])&&(s=t.call(o,o.__data__,h,a))&&("__data__"in o&&(s.__data__=o.__data__),c[h]=s);return new Lt(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return _(t.apply(this,arguments))}}(t):k(t);for(var e=this._groups,i=e.length,r=[],n=[],o=0;o<i;++o)for(var s,a=e[o],l=a.length,c=0;c<l;++c)(s=a[c])&&(r.push(t.call(s,s.__data__,c,a)),n.push(s));return new Lt(r,n)},selectChild:function(t){return this.select(null==t?B:function(t){return function(){return S.call(this.children,t)}}("function"==typeof t?t:w(t)))},selectChildren:function(t){return this.selectAll(null==t?L:function(t){return function(){return F.call(this.children,t)}}("function"==typeof t?t:w(t)))},filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,s=e[n],a=s.length,l=r[n]=[],c=0;c<a;++c)(o=s[c])&&t.call(o,o.__data__,c,s)&&l.push(o);return new Lt(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,Z);var i,r=e?N:E,n=this._parents,o=this._groups;"function"!=typeof t&&(i=t,t=function(){return i});for(var s=o.length,a=new Array(s),l=new Array(s),c=new Array(s),h=0;h<s;++h){var u=n[h],d=o[h],f=d.length,p=j(t.call(u,u&&u.__data__,h,n)),g=p.length,m=l[h]=new Array(g),y=a[h]=new Array(g);r(u,d,m,y,c[h]=new Array(f),p,e);for(var x,b,C=0,_=0;C<g;++C)if(x=m[C]){for(C>=_&&(_=C+1);!(b=y[_])&&++_<g;);x._next=b||null}}return(a=new Lt(a,n))._enter=l,a._exit=c,a},enter:function(){return new Lt(this._enter||this._groups.map(A),this._parents)},exit:function(){return new Lt(this._exit||this._groups.map(A),this._parents)},join:function(t,e,i){var r=this.enter(),n=this,o=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(n=e(n))&&(n=n.selection()),null==i?o.remove():i(o),r&&n?r.merge(n).order():n},merge:function(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,s=Math.min(n,o),a=new Array(n),l=0;l<s;++l)for(var c,h=i[l],u=r[l],d=h.length,f=a[l]=new Array(d),p=0;p<d;++p)(c=h[p]||u[p])&&(f[p]=c);for(;l<n;++l)a[l]=i[l];return new Lt(a,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,i=t.length;++e<i;)for(var r,n=t[e],o=n.length-1,s=n[o];--o>=0;)(r=n[o])&&(s&&4^r.compareDocumentPosition(s)&&s.parentNode.insertBefore(r,s),s=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=O);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o<r;++o){for(var s,a=i[o],l=a.length,c=n[o]=new Array(l),h=0;h<l;++h)(s=a[h])&&(c[h]=s);c.sort(e)}return new Lt(n,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r=t[e],n=0,o=r.length;n<o;++n){var s=r[n];if(s)return s}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,i=0,r=e.length;i<r;++i)for(var n,o=e[i],s=0,a=o.length;s<a;++s)(n=o[s])&&t.call(n,n.__data__,s,o);return this},attr:function(t,e){var i=q(t);if(arguments.length<2){var r=this.node();return i.local?r.getAttributeNS(i.space,i.local):r.getAttribute(i)}return this.each((null==e?i.local?z:$:"function"==typeof e?i.local?W:H:i.local?R:P)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?Y:"function"==typeof e?G:V)(t,e,null==i?"":i)):X(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<o;)if(!r.contains(i[n]))return!1;return!0}return this.each(("function"==typeof e?at:e?ot:st)(i,e))},text:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ht:ct)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?ft:dt)(t)):this.node().innerHTML},raise:function(){return this.each(pt)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:xt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:xt(t),r=null==e?bt:"function"==typeof e?e:C(e);return this.select((function(){return this.insertBefore(i.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Ct)},clone:function(t){return this.select(t?vt:_t)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,i){var r,n,o=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),s=o.length;if(!(arguments.length<2)){for(a=e?Tt:kt,r=0;r<s;++r)this.each(a(o[r],e,i));return this}var a=this.node().__on;if(a)for(var l,c=0,h=a.length;c<h;++c)for(r=0,l=a[c];r<s;++r)if((n=o[r]).type===l.type&&n.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?Bt:St)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r,n=t[e],o=0,s=n.length;o<s;++o)(r=n[o])&&(yield r)}};const Mt=At;var Et={value:()=>{}};function Nt(){for(var t,e=0,i=arguments.length,r={};e<i;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Zt(r)}function Zt(t){this._=t}function jt(t,e){for(var i,r=0,n=t.length;r<n;++r)if((i=t[r]).name===e)return i.value}function Ot(t,e,i){for(var r=0,n=t.length;r<n;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=i&&t.push({name:e,value:i}),t}Zt.prototype=Nt.prototype={constructor:Zt,on:function(t,e){var i,r,n=this._,o=(r=n,(t+"").trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=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}}))),s=-1,a=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++s<a;)if(i=(t=o[s]).type)n[i]=Ot(n[i],t.name,e);else if(null==e)for(i in n)n[i]=Ot(n[i],t.name,null);return this}for(;++s<a;)if((i=(t=o[s]).type)&&(i=jt(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new Zt(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var i,r,n=new Array(i),o=0;o<i;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,i=(r=this._[t]).length;o<i;++o)r[o].value.apply(e,n)},apply:function(t,e,i){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],n=0,o=r.length;n<o;++n)r[n].value.apply(e,i)}};const It=Nt;var Dt,qt,$t=0,zt=0,Pt=0,Rt=1e3,Ht=0,Wt=0,Ut=0,Yt="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Wt||(Vt(Xt),Wt=Yt.now()+Ut)}function Xt(){Wt=0}function Jt(){this._call=this._time=this._next=null}function Qt(t,e,i){var r=new Jt;return r.restart(t,e,i),r}function Kt(){Wt=(Ht=Yt.now())+Ut,$t=zt=0;try{!function(){Gt(),++$t;for(var t,e=Dt;e;)(t=Wt-e._time)>=0&&e._call.call(void 0,t),e=e._next;--$t}()}finally{$t=0,function(){var t,e,i=Dt,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:Dt=e);qt=t,ee(r)}(),Wt=0}}function te(){var t=Yt.now(),e=t-Ht;e>Rt&&(Ut-=e,Ht=t)}function ee(t){$t||(zt&&(zt=clearTimeout(zt)),t-Wt>24?(t<1/0&&(zt=setTimeout(Kt,t-Yt.now()-Ut)),Pt&&(Pt=clearInterval(Pt))):(Pt||(Ht=Yt.now(),Pt=setInterval(te,Rt)),$t=1,Vt(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?Gt():+i)+(null==e?0:+e),this._next||qt===this||(qt?qt._next=this:Dt=this,qt=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=It("start","end","cancel","interrupt"),ne=[],oe=0,se=1,ae=2,le=3,ce=4,he=5,ue=6;function de(t,e,i,r,n,o){var s=t.__transition;if(s){if(i in s)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=se,i.timer.restart(s,i.delay,i.time),i.delay<=t&&s(t-i.delay)}function s(o){var c,h,u,d;if(i.state!==se)return l();for(c in n)if((d=n[c]).name===i.name){if(d.state===le)return ie(s);d.state===ce?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[c]):+c<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete n[c])}if(ie((function(){i.state===le&&(i.state=ce,i.timer.restart(a,i.delay,i.time),a(o))})),i.state=ae,i.on.call("start",t,t.__data__,i.index,i.group),i.state===ae){for(i.state=le,r=new Array(u=i.tween.length),c=0,h=-1;c<u;++c)(d=i.tween[c].value.call(t,t.__data__,i.index,i.group))&&(r[++h]=d);r.length=h+1}}function a(e){for(var n=e<i.duration?i.ease.call(null,e/i.duration):(i.timer.restart(l),i.state=he,1),o=-1,s=r.length;++o<s;)r[o].call(t,n);i.state===he&&(i.on.call("end",t,t.__data__,i.index,i.group),l())}function l(){for(var r in i.state=ue,i.timer.stop(),delete n[e],n)return;delete t.__transition}n[e]=i,i.timer=Qt(o,0,i.time)}(t,i,{name:e,index:r,group:n,on:re,tween:ne,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:oe})}function fe(t,e){var i=ge(t,e);if(i.state>oe)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,be={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Ce(t,e,i,r,n,o){var s,a,l;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(a=Math.sqrt(i*i+r*r))&&(i/=a,r/=a,l/=a),t*r<e*i&&(t=-t,e=-e,l=-l,s=-s),{translateX:n,translateY:o,rotate:Math.atan2(e,t)*xe,skewX:Math.atan(l)*xe,scaleX:s,scaleY:a}}function _e(t,e,i,r){function n(t){return t.length?t.pop()+" ":""}return function(o,s){var a=[],l=[];return o=t(o),s=t(s),function(t,r,n,o,s,a){if(t!==n||r!==o){var l=s.push("translate(",null,e,null,i);a.push({i:l-4,x:me(t,n)},{i:l-2,x:me(r,o)})}else(n||o)&&s.push("translate("+n+e+o+i)}(o.translateX,o.translateY,s.translateX,s.translateY,a,l),function(t,e,i,o){t!==e?(t-e>180?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,s.rotate,a,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,s.skewX,a,l),function(t,e,i,r,o,s){if(t!==i||e!==r){var a=o.push(n(o)+"scale(",null,",",null,")");s.push({i:a-4,x:me(t,i)},{i:a-2,x:me(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,s.scaleX,s.scaleY,a,l),o=s=null,function(t){for(var e,i=-1,r=l.length;++i<r;)a[(e=l[i]).i]=e.x(t);return a.join("")}}}var ve=_e((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?be:Ce(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),ke=_e((function(t){return null==t?be:(ye||(ye=document.createElementNS("http://www.w3.org/2000/svg","g")),ye.setAttribute("transform",t),(t=ye.transform.baseVal.consolidate())?Ce((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):be)}),", ",")",")");function Te(t,e){var i,r;return function(){var n=pe(this,t),o=n.tween;if(o!==i)for(var s=0,a=(r=i=o).length;s<a;++s)if(r[s].name===e){(r=r.slice()).splice(s,1);break}n.tween=r}}function we(t,e,i){var r,n;if("function"!=typeof i)throw new Error;return function(){var o=pe(this,t),s=o.tween;if(s!==r){n=(r=s).slice();for(var a={name:e,value:i},l=0,c=n.length;l<c;++l)if(n[l].name===e){n[l]=a;break}l===c&&n.push(a)}o.tween=n}}function Se(t,e,i){var r=t._id;return t.each((function(){var t=pe(this,r);(t.value||(t.value={}))[e]=i.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Be(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Fe(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Le(){}var Ae=.7,Me=1/Ae,Ee="\\s*([+-]?\\d+)\\s*",Ne="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ze="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",je=/^#([0-9a-f]{3,8})$/,Oe=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),Ie=new RegExp(`^rgb\\(${Ze},${Ze},${Ze}\\)$`),De=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Ne}\\)$`),qe=new RegExp(`^rgba\\(${Ze},${Ze},${Ze},${Ne}\\)$`),$e=new RegExp(`^hsl\\(${Ne},${Ze},${Ze}\\)$`),ze=new RegExp(`^hsla\\(${Ne},${Ze},${Ze},${Ne}\\)$`),Pe={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Re(){return this.rgb().formatHex()}function He(){return this.rgb().formatRgb()}function We(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=je.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?Ue(e):3===i?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ye(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ye(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=Oe.exec(t))?new Xe(e[1],e[2],e[3],1):(e=Ie.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=De.exec(t))?Ye(e[1],e[2],e[3],e[4]):(e=qe.exec(t))?Ye(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=$e.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=ze.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Pe.hasOwnProperty(t)?Ue(Pe[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function Ue(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function Ye(t,e,i,r){return r<=0&&(t=e=i=NaN),new Xe(t,e,i,r)}function Ve(t){return t instanceof Le||(t=We(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,i,r){return 1===arguments.length?Ve(t):new Xe(t,e,i,null==r?1:r)}function Xe(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 Le||(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),s=NaN,a=o-n,l=(o+n)/2;return a?(s=e===o?(i-r)/a+6*(i<r):i===o?(r-e)/a+2:(e-i)/a+4,a/=l<.5?o+n:2-o-n,s*=60):a=l>0&&l<1?0:s,new ni(s,a,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 si(t){return Math.max(0,Math.min(1,t||0))}function ai(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,s=o*t;return((1-3*t+3*o-s)*e+(4-6*o+3*s)*i+(1+3*t+3*o-3*s)*r+s*n)/6}Be(Le,We,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Re,formatHex:Re,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:He,toString:He}),Be(Xe,Ge,Fe(Le,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Ae:Math.pow(Ae,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(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})),Be(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Fe(Le,{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?Ae:Math.pow(Ae,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 Xe(ai(t>=240?t-240:t+120,n,r),ai(t,n,r),ai(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),si(this.s),si(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*si(this.s)}%, ${100*si(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=Ge(t)).r,(e=Ge(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),s=di(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=s(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),s=new Array(n),a=new Array(n);for(i=0;i<n;++i)r=Ge(e[i]),o[i]=r.r||0,s[i]=r.g||0,a[i]=r.b||0;return o=t(o),s=t(s),a=t(a),r.opacity=1,function(t){return r.r=o(t),r.g=s(t),r.b=a(t),r+""}}}pi((function(t){var e=t.length-1;return function(i){var r=i<=0?i=0:i>=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],s=r>0?t[r-1]:2*n-o,a=r<e-1?t[r+2]:2*o-n;return li((i-r/e)*e,s,n,o,a)}})),pi((function(t){var e=t.length;return function(i){var r=Math.floor(((i%=1)<0?++i:i)*e),n=t[(r+e-1)%e],o=t[r%e],s=t[(r+1)%e],a=t[(r+2)%e];return li((i-r/e)*e,n,o,s,a)}}));var gi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mi=new RegExp(gi.source,"g");function yi(t,e){var i,r,n,o=gi.lastIndex=mi.lastIndex=0,s=-1,a=[],l=[];for(t+="",e+="";(i=gi.exec(t))&&(r=mi.exec(e));)(n=r.index)>o&&(n=e.slice(o,n),a[s]?a[s]+=n:a[++s]=n),(i=i[0])===(r=r[0])?a[s]?a[s]+=r:a[++s]=r:(a[++s]=null,l.push({i:s,x:me(i,r)})),o=mi.lastIndex;return o<e.length&&(n=e.slice(o),a[s]?a[s]+=n:a[++s]=n),a.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var i,r=0;r<e;++r)a[(i=l[r]).i]=i.x(t);return a.join("")})}function xi(t,e){var i;return("number"==typeof e?me:e instanceof We?fi:(i=We(e))?(e=i,fi):yi)(t,e)}function bi(t){return function(){this.removeAttribute(t)}}function Ci(t){return function(){this.removeAttributeNS(t.space,t.local)}}function _i(t,e,i){var r,n,o=i+"";return function(){var s=this.getAttribute(t);return s===o?null:s===r?n:n=e(r=s,i)}}function vi(t,e,i){var r,n,o=i+"";return function(){var s=this.getAttributeNS(t.space,t.local);return s===o?null:s===r?n:n=e(r=s,i)}}function ki(t,e,i){var r,n,o;return function(){var s,a,l=i(this);if(null!=l)return(s=this.getAttribute(t))===(a=l+"")?null:s===r&&a===n?o:(n=a,o=e(r=s,l));this.removeAttribute(t)}}function Ti(t,e,i){var r,n,o;return function(){var s,a,l=i(this);if(null!=l)return(s=this.getAttributeNS(t.space,t.local))===(a=l+"")?null:s===r&&a===n?o:(n=a,o=e(r=s,l));this.removeAttributeNS(t.space,t.local)}}function wi(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttributeNS(t.space,t.local,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Si(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttribute(t,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Bi(t,e){return function(){fe(this,t).delay=+e.apply(this,arguments)}}function Fi(t,e){return e=+e,function(){fe(this,t).delay=e}}function Li(t,e){return function(){pe(this,t).duration=+e.apply(this,arguments)}}function Ai(t,e){return e=+e,function(){pe(this,t).duration=e}}var Mi=Mt.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Ni=0;function Zi(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function ji(){return++Ni}var Oi=Mt.prototype;Zi.prototype=function(t){return Mt().transition(t)}.prototype={constructor:Zi,select:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=C(t));for(var r=this._groups,n=r.length,o=new Array(n),s=0;s<n;++s)for(var a,l,c=r[s],h=c.length,u=o[s]=new Array(h),d=0;d<h;++d)(a=c[d])&&(l=t.call(a,a.__data__,d,c))&&("__data__"in a&&(l.__data__=a.__data__),u[d]=l,de(u[d],e,i,d,u,ge(a,i)));return new Zi(o,this._parents,e,i)},selectAll:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=k(t));for(var r=this._groups,n=r.length,o=[],s=[],a=0;a<n;++a)for(var l,c=r[a],h=c.length,u=0;u<h;++u)if(l=c[u]){for(var d,f=t.call(l,l.__data__,u,c),p=ge(l,i),g=0,m=f.length;g<m;++g)(d=f[g])&&de(d,e,i,g,f,p);o.push(f),s.push(l)}return new Zi(o,s,e,i)},selectChild:Oi.selectChild,selectChildren:Oi.selectChildren,filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,s=e[n],a=s.length,l=r[n]=[],c=0;c<a;++c)(o=s[c])&&t.call(o,o.__data__,c,s)&&l.push(o);return new Zi(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,i=t._groups,r=e.length,n=i.length,o=Math.min(r,n),s=new Array(r),a=0;a<o;++a)for(var l,c=e[a],h=i[a],u=c.length,d=s[a]=new Array(u),f=0;f<u;++f)(l=c[f]||h[f])&&(d[f]=l);for(;a<r;++a)s[a]=e[a];return new Zi(s,this._parents,this._name,this._id)},selection:function(){return new Mi(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=ji(),r=this._groups,n=r.length,o=0;o<n;++o)for(var s,a=r[o],l=a.length,c=0;c<l;++c)if(s=a[c]){var h=ge(s,e);de(s,t,i,c,a,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Zi(r,this._parents,t,i)},call:Oi.call,nodes:Oi.nodes,node:Oi.node,size:Oi.size,empty:Oi.empty,each:Oi.each,on:function(t,e){var i=this._id;return arguments.length<2?ge(this.node(),i).on.on(t):this.each(function(t,e,i){var r,n,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?fe:pe;return function(){var s=o(this,t),a=s.on;a!==r&&(n=(r=a).copy()).on(e,i),s.on=n}}(i,t,e))},attr:function(t,e){var i=q(t),r="transform"===i?ke:xi;return this.attrTween(t,"function"==typeof e?(i.local?Ti:ki)(i,r,Se(this,"attr."+t,e)):null==e?(i.local?Ci:bi)(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=q(t);return this.tween(i,(r.local?wi:Si)(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=X(this,t),s=(this.style.removeProperty(t),X(this,t));return o===s?null:o===i&&s===r?n:n=e(i=o,r=s)}}(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 s=X(this,t),a=i(this),l=a+"";return null==a&&(this.style.removeProperty(t),l=a=X(this,t)),s===l?null:s===r&&l===n?o:(n=l,o=e(r=s,a))}}(t,r,Se(this,"style."+t,e))).each(function(t,e){var i,r,n,o,s="style."+e,a="end."+s;return function(){var l=pe(this,t),c=l.on,h=null==l.value[s]?o||(o=Ei(e)):void 0;c===i&&n===h||(r=(i=c).copy()).on(a,n=h),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var s=X(this,t);return s===o?null:s===r?n:n=e(r=s,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}}(Se(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,s=n.length;o<s;++o)if((r=n[o]).name===t)return r.value;return null}return this.each((null==e?Te:we)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bi:Fi)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Li:Ai)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){pe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if("function"!=typeof i)throw new Error;pe(this,t).ease=i}}(this._id,t))},end:function(){var t,e,i=this,r=i._id,n=i.size();return new Promise((function(o,s){var a={value:s},l={value:function(){0==--n&&o()}};i.each((function(){var i=pe(this,r),n=i.on;n!==t&&((e=(t=n).copy())._.cancel.push(a),e._.interrupt.push(a),e._.end.push(l)),i.on=e})),0===n&&o()}))},[Symbol.iterator]:Oi[Symbol.iterator]};var Ii={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Di(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}Mt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var i,r,n,o=t.__transition,s=!0;if(o){for(n in e=null==e?null:e+"",o)(i=o[n]).name===e?(r=i.state>ae&&i.state<he,i.state=ue,i.timer.stop(),i.on.call(r?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[n]):s=!1;s&&delete t.__transition}}(this,t)}))},Mt.prototype.transition=function(t){var e,i;t instanceof Zi?(e=t._id,t=t._name):(e=ji(),(i=Ii).time=Gt(),t=null==t?null:t+"");for(var r=this._groups,n=r.length,o=0;o<n;++o)for(var s,a=r[o],l=a.length,c=0;c<l;++c)(s=a[c])&&de(s,t,e,c,a,i||Di(s,e));return new Zi(r,this._parents,t,e)};const{abs:qi,max:$i,min:zi}=Math;function Pi(t){return[+t[0],+t[1]]}function Ri(t){return[Pi(t[0]),Pi(t[1])]}["w","e"].map(Hi),["n","s"].map(Hi),["n","w","e","s","nw","ne","sw","se"].map(Hi);function Hi(t){return{type:t}}function Wi(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Ui(t){return(e,i)=>function(t,e){return fetch(t,e).then(Wi)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Ui("application/xml");Ui("text/html");var Yi=Ui("image/svg+xml");const Vi=Math.PI/180,Gi=180/Math.PI,Xi=.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 Xe||(t=Ve(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),s=or((.2225045*r+.7168786*n+.0606169*o)/Ji);return r===n&&n===o?e=i=s:(e=or((.4360747*r+.3850649*n+.1430804*o)/Xi),i=or((.0139322*r+.0971045*n+.7141733*o)/Qi)),new nr(116*s-16,500*(e-s),200*(s-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 sr(t){return t>tr?t*t*t:er*(t-Ki)}function ar(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,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Gi;return new ur(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function hr(t,e,i,r){return 1===arguments.length?cr(t):new ur(t,e,i,null==r?1:r)}function ur(t,e,i,r){this.h=+t,this.c=+e,this.l=+i,this.opacity=+r}function dr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Vi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,i){var r=t((e=hr(e)).h,(i=hr(i)).h),n=di(e.c,i.c),o=di(e.l,i.l),s=di(e.opacity,i.opacity);return function(t){return e.h=r(t),e.c=n(t),e.l=o(t),e.opacity=s(t),e+""}}}Be(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Fe(Le,{brighter(t){return new nr(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new nr(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new Xe(ar(3.1338561*(e=Xi*sr(e))-1.6168667*(t=Ji*sr(t))-.4906146*(i=Qi*sr(i))),ar(-.9787684*e+1.9161415*t+.033454*i),ar(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),Be(ur,hr,Fe(Le,{brighter(t){return new ur(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new ur(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return dr(this).rgb()}}));const pr=fr((function(t,e){var i=e-t;return i?hi(t,i>180||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=Cr){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(br(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 br({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function Cr(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 kr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,s=1,a=!1,l=0,c=0,h=.5;function u(){var i=r().length,u=s<o,d=u?s:o,f=u?o:s;t=(f-d)/Math.max(1,i-l+2*c),a&&(t=Math.floor(t)),d+=(f-d-t*(i-l))*h,e=t*(1-l),a&&(d=Math.round(d),e=Math.round(e));var p=function(t,e,i){t=+t,e=+e,i=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+i;for(var r=-1,n=0|Math.max(0,Math.ceil((e-t)/i)),o=new Array(n);++r<n;)o[r]=t+r*i;return o}(i).map((function(e){return d+t*e}));return n(u?p.reverse():p)}return delete i.unknown,i.domain=function(t){return arguments.length?(r(t),u()):r()},i.range=function(t){return arguments.length?([o,s]=t,o=+o,s=+s,u()):[o,s]},i.rangeRound=function(t){return[o,s]=t,o=+o,s=+s,a=!0,u()},i.bandwidth=function(){return e},i.step=function(){return t},i.round=function(t){return arguments.length?(a=!!t,u()):a},i.padding=function(t){return arguments.length?(l=Math.min(1,c=+t),u()):l},i.paddingInner=function(t){return arguments.length?(l=Math.min(1,t),u()):l},i.paddingOuter=function(t){return arguments.length?(c=+t,u()):c},i.align=function(t){return arguments.length?(h=Math.max(0,Math.min(1,t)),u()):h},i.copy=function(){return kr(r(),[o,s]).round(a).paddingInner(l).paddingOuter(c).align(h)},gr.apply(u(),arguments)}const Tr=Math.sqrt(50),wr=Math.sqrt(10),Sr=Math.sqrt(2);function Br(t,e,i){const r=(e-t)/Math.max(0,i),n=Math.floor(Math.log10(r)),o=r/Math.pow(10,n),s=o>=Tr?10:o>=wr?5:o>=Sr?2:1;let a,l,c;return n<0?(c=Math.pow(10,-n)/s,a=Math.round(t*c),l=Math.round(e*c),a/c<t&&++a,l/c>e&&--l,c=-c):(c=Math.pow(10,n)*s,a=Math.round(t/c),l=Math.round(e/c),a*c<t&&++a,l*c>e&&--l),l<a&&.5<=i&&i<2?Br(t,e,2*i):[a,l,c]}function Fr(t,e,i){return Br(t=+t,e=+e,i=+i)[2]}function Lr(t,e,i){i=+i;const r=(e=+e)<(t=+t),n=r?Fr(e,t,i):Fr(t,e,i);return(r?-1:1)*(n<0?1/-n:n)}function Ar(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Er(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<0?n=e+1:o=e}while(n<o)}return n}return 2!==t.length?(e=Ar,i=(e,i)=>Ar(t(e),i),r=(e,i)=>t(e)-i):(e=t===Ar||t===Mr?t:Nr,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const s=n(t,e,i,o-1);return s>i&&r(t[s-1],e)>-r(t[s],e)?s-1:s},right:function(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<=0?n=e+1:o=e}while(n<o)}return n}}}function Nr(){return 0}const Zr=Er(Ar),jr=Zr.right,Or=(Zr.left,Er((function(t){return null===t?NaN:+t})).center,jr);function Ir(t,e){var i,r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),s=new Array(r);for(i=0;i<n;++i)o[i]=zr(t[i],e[i]);for(;i<r;++i)s[i]=e[i];return function(t){for(i=0;i<n;++i)s[i]=o[i](t);return s}}function Dr(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function qr(t,e){var i,r={},n={};for(i in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)i in t?r[i]=zr(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function $r(t,e){e||(e=[]);var i,r=t?Math.min(e.length,t.length):0,n=e.slice();return function(o){for(i=0;i<r;++i)n[i]=t[i]*(1-o)+e[i]*o;return n}}function zr(t,e){var i,r,n=typeof e;return null==e||"boolean"===n?ci(e):("number"===n?me:"string"===n?(i=We(e))?(e=i,fi):yi:e instanceof We?fi:e instanceof Date?Dr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Ir:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?qr:me:$r))(t,e)}function Pr(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Rr(t){return+t}var Hr=[0,1];function Wr(t){return t}function Ur(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function Yr(t,e,i){var r=t[0],n=t[1],o=e[0],s=e[1];return n<r?(r=Ur(n,r),o=i(s,o)):(r=Ur(r,n),o=i(o,s)),function(t){return o(r(t))}}function Vr(t,e,i){var r=Math.min(t.length,e.length)-1,n=new Array(r),o=new Array(r),s=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<r;)n[s]=Ur(t[s],t[s+1]),o[s]=i(e[s],e[s+1]);return function(e){var i=Or(t,e,1,r)-1;return o[i](n[i](e))}}function Gr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Xr(){var t,e,i,r,n,o,s=Hr,a=Hr,l=zr,c=Wr;function h(){var t,e,i,l=Math.min(s.length,a.length);return c!==Wr&&(t=s[0],e=s[l-1],t>e&&(i=t,t=e,e=i),c=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Vr:Yr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(s.map(t),a,l)))(t(c(e)))}return u.invert=function(i){return c(e((o||(o=r(a,s.map(t),me)))(i)))},u.domain=function(t){return arguments.length?(s=Array.from(t,Rr),h()):s.slice()},u.range=function(t){return arguments.length?(a=Array.from(t),h()):a.slice()},u.rangeRound=function(t){return a=Array.from(t),l=Pr,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 Xr()(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 sn={"%":(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,s=r.length;return o===s?r:o>s?r+new Array(o-s+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 an(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?an:(e=un.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],s=0,a=e[0],l=0;n>0&&a>0&&(l+a+1>r&&(a=Math.max(1,r-l)),o.push(t.substring(n-=a,n+a)),!((l+=a+1)>r));)a=e[s=(s+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",s=void 0===t.decimal?".":t.decimal+"",a=void 0===t.numerals?an: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"):sn[x]||(void 0===m&&(m=12),y=!0,x="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var b="$"===d?n:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",C="$"===d?o:/[%p]/.test(x)?l:"",_=sn[x],v=/[defgprs%]/.test(x);function k(t){var n,o,l,d=b,k=C;if("c"===x)k=_(t)+k,t="";else{var T=(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;r<i;++r)switch(t[r]){case".":n=e=r;break;case"0":0===n&&(n=r),e=r;break;default:if(!+t[r])break t;n>0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==u&&(T=!1),d=(T?"("===u?u:c:"-"===u||"("===u?"":u)+d,k=("s"===x?dn[8+Qr/3]:"")+k+(T&&"("===u?")":""),v)for(n=-1,o=t.length;++n<o;)if(48>(l=t.charCodeAt(n))||l>57){k=(46===l?s+t.slice(n+1):t.slice(n))+k,t=t.slice(0,n);break}}g&&!f&&(t=r(t,1/0));var w=d.length+t.length+k.length,S=w<p?new Array(p-w+1).join(e):"";switch(g&&f&&(t=r(S+t,S.length?p-k.length:1/0),S=""),i){case"<":t=d+t+k+S;break;case"=":t=d+S+t+k;break;case"^":t=S.slice(0,w=S.length>>1)+d+t+k+S.slice(w);break;default:t=S+d+t+k}return a(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}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=Lr(t,e,i);switch((r=tn(null==r?",f":r)).type){case"s":var s=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,s))||(r.precision=n),hn(r,s);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<t,[n,o,s]=r?Br(e,t,i):Br(t,e,i);if(!(o>=n))return[];const a=o-n+1,l=new Array(a);if(r)if(s<0)for(let c=0;c<a;++c)l[c]=(o-c)/-s;else for(let c=0;c<a;++c)l[c]=(o-c)*s;else if(s<0)for(let c=0;c<a;++c)l[c]=(n+c)/-s;else for(let c=0;c<a;++c)l[c]=(n+c)*s;return l}(i[0],i[i.length-1],null==t?10:t)},t.tickFormat=function(t,i){var r=e();return pn(r[0],r[r.length-1],null==t?10:t,i)},t.nice=function(i){null==i&&(i=10);var r,n,o=e(),s=0,a=o.length-1,l=o[s],c=o[a],h=10;for(c<l&&(n=l,l=c,c=n,n=s,s=a,a=n);h-- >0;){if((n=Fr(l,c,i))===r)return o[s]=l,o[a]=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 Gr(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,bn=36e5,Cn=864e5,_n=6048e5,vn=2592e6,kn=31536e6,Tn=new Date,wn=new Date;function Sn(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<i-t?e:i},n.offset=(t,i)=>(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const s=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i<r&&o>0))return s;let a;do{s.push(a=new Date(+i)),e(i,o),t(i)}while(a<i&&i<r);return s},n.filter=i=>Sn((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)=>(Tn.setTime(+e),wn.setTime(+r),t(Tn),t(wn),Math.floor(i(Tn,wn))),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 Bn=Sn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Bn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Sn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Bn:null);Bn.range;const Fn=Sn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),Ln=(Fn.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getMinutes()))),An=(Ln.range,Sn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCMinutes()))),Mn=(An.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*xn)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getHours()))),En=(Mn.range,Sn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getUTCHours()))),Nn=(En.range,Sn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/Cn),(t=>t.getDate()-1))),Zn=(Nn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCDate()-1))),jn=(Zn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>Math.floor(t/Cn))));jn.range;function On(t){return Sn((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 In=On(0),Dn=On(1),qn=On(2),$n=On(3),zn=On(4),Pn=On(5),Rn=On(6);In.range,Dn.range,qn.range,$n.range,zn.range,Pn.range,Rn.range;function Hn(t){return Sn((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),Un=Hn(1),Yn=Hn(2),Vn=Hn(3),Gn=Hn(4),Xn=Hn(5),Jn=Hn(6),Qn=(Wn.range,Un.range,Yn.range,Vn.range,Gn.range,Xn.range,Jn.range,Sn((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,Sn((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,Sn((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?Sn((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=Sn((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?Sn((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 s=[[Fn,1,yn],[Fn,5,5e3],[Fn,15,15e3],[Fn,30,3e4],[o,1,xn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,bn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,Cn],[r,2,1728e5],[i,1,_n],[e,1,vn],[e,3,7776e6],[t,1,kn]];function a(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(s,n);if(o===s.length)return t.every(Lr(e/kn,i/kn,r));if(0===o)return Bn.every(Math.max(Lr(e,i,r),1));const[a,l]=s[n/s[o-1][2]<s[o][2]/n?o-1:o];return a.every(l)}return[function(t,e,i){const r=e<t;r&&([t,e]=[e,t]);const n=i&&"function"==typeof i.range?i:a(t,e,i),o=n?n.range(t,+e+1):[];return r?o.reverse():o},a]}const[ro,no]=io(eo,Kn,Wn,jn,En,An),[oo,so]=io(to,Qn,In,Nn,Mn,Ln);function ao(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function lo(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function co(t,e,i){return{y:t,m:e,d:i,H:0,M:0,S:0,L:0}}var ho,uo,fo={"-":"",_:" ",0:"0"},po=/^\s*\d+/,go=/^%/,mo=/[\\^$*+?|[\]().{}]/g;function yo(t,e,i){var r=t<0?"-":"",n=(r?-t:t)+"",o=n.length;return r+(o<i?new Array(i-o+1).join(e)+n:n)}function xo(t){return t.replace(mo,"\\$&")}function bo(t){return new RegExp("^(?:"+t.map(xo).join("|")+")","i")}function Co(t){return new Map(t.map(((t,e)=>[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 ko(t,e,i){var r=po.exec(e.slice(i,i+2));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.V=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function Bo(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 Fo(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 Lo(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 Ao(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 Zo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function Io(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 Do(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function qo(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function $o(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function zo(t,e){return yo(t.getDate(),e,2)}function Po(t,e){return yo(t.getHours(),e,2)}function Ro(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 Uo(t,e){return Wo(t,e)+"000"}function Yo(t,e){return yo(t.getMonth()+1,e,2)}function Vo(t,e){return yo(t.getMinutes(),e,2)}function Go(t,e){return yo(t.getSeconds(),e,2)}function Xo(t){var e=t.getDay();return 0===e?7:e}function Jo(t,e){return yo(In.count(to(t)-1,t),e,2)}function Qo(t){var e=t.getDay();return e>=4||0===e?zn(t):zn.ceil(t)}function Ko(t,e){return t=Qo(t),yo(zn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ts(t){return t.getDay()}function es(t,e){return yo(Dn.count(to(t)-1,t),e,2)}function is(t,e){return yo(t.getFullYear()%100,e,2)}function rs(t,e){return yo((t=Qo(t)).getFullYear()%100,e,2)}function ns(t,e){return yo(t.getFullYear()%1e4,e,4)}function os(t,e){var i=t.getDay();return yo((t=i>=4||0===i?zn(t):zn.ceil(t)).getFullYear()%1e4,e,4)}function ss(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+yo(e/60|0,"0",2)+yo(e%60,"0",2)}function as(t,e){return yo(t.getUTCDate(),e,2)}function ls(t,e){return yo(t.getUTCHours(),e,2)}function cs(t,e){return yo(t.getUTCHours()%12||12,e,2)}function hs(t,e){return yo(1+Zn.count(eo(t),t),e,3)}function us(t,e){return yo(t.getUTCMilliseconds(),e,3)}function ds(t,e){return us(t,e)+"000"}function fs(t,e){return yo(t.getUTCMonth()+1,e,2)}function ps(t,e){return yo(t.getUTCMinutes(),e,2)}function gs(t,e){return yo(t.getUTCSeconds(),e,2)}function ms(t){var e=t.getUTCDay();return 0===e?7:e}function ys(t,e){return yo(Wn.count(eo(t)-1,t),e,2)}function xs(t){var e=t.getUTCDay();return e>=4||0===e?Gn(t):Gn.ceil(t)}function bs(t,e){return t=xs(t),yo(Gn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function Cs(t){return t.getUTCDay()}function _s(t,e){return yo(Un.count(eo(t)-1,t),e,2)}function vs(t,e){return yo(t.getUTCFullYear()%100,e,2)}function ks(t,e){return yo((t=xs(t)).getUTCFullYear()%100,e,2)}function Ts(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function ws(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Gn(t):Gn.ceil(t)).getUTCFullYear()%1e4,e,4)}function Ss(){return"+0000"}function Bs(){return"%"}function Fs(t){return+t}function Ls(t){return Math.floor(+t/1e3)}function As(t){return new Date(t)}function Ms(t){return t instanceof Date?+t:+new Date(+t)}function Es(t,e,i,r,n,o,s,a,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"),b=c("%B"),C=c("%Y");function _(t){return(l(t)<t?f:a(t)<t?p:s(t)<t?g:o(t)<t?m:r(t)<t?n(t)<t?y:x:i(t)<t?b:C)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ms)):d().map(As)},h.ticks=function(e){var i=d();return t(i[0],i[i.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?_:c(e)},h.nice=function(t){var i=d();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?d(function(t,e){var i,r=0,n=(t=t.slice()).length-1,o=t[r],s=t[n];return s<o&&(i=r,r=n,n=i,i=o,o=s,s=i),t[r]=e.floor(o),t[n]=e.ceil(s),t}(i,t)):h},h.copy=function(){return Gr(h,Es(t,e,i,r,n,o,s,a,l,c))},h}function Ns(){return gr.apply(Es(oo,so,to,Qn,In,Nn,Mn,Ln,Fn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ho=function(t){var e=t.dateTime,i=t.date,r=t.time,n=t.periods,o=t.days,s=t.shortDays,a=t.months,l=t.shortMonths,c=bo(n),h=Co(n),u=bo(o),d=Co(o),f=bo(s),p=Co(s),g=bo(a),m=Co(a),y=bo(l),x=Co(l),b={a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return a[t.getMonth()]},c:null,d:zo,e:zo,f:Uo,g:rs,G:os,H:Po,I:Ro,j:Ho,L:Wo,m:Yo,M:Vo,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Fs,s:Ls,S:Go,u:Xo,U:Jo,V:Ko,w:ts,W:es,x:null,X:null,y:is,Y:ns,Z:ss,"%":Bs},C={a:function(t){return s[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return a[t.getUTCMonth()]},c:null,d:as,e:as,f:ds,g:ks,G:ws,H:ls,I:cs,j:hs,L:us,m:fs,M:ps,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Fs,s:Ls,S:gs,u:ms,U:ys,V:bs,w:Cs,W:_s,x:null,X:null,y:vs,Y:Ts,Z:Ss,"%":Bs},_={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 T(t,e,i,r)},d:Mo,e:Mo,f:Io,g:Bo,G:So,H:No,I:No,j:Eo,L:Oo,m:Ao,M:Zo,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:Lo,Q:qo,s:$o,S:jo,u:vo,U:ko,V:To,w:_o,W:wo,x:function(t,e,r){return T(t,i,e,r)},X:function(t,e,i){return T(t,r,e,i)},y:Bo,Y:So,Z:Fo,"%":Do};function v(t,e){return function(i){var r,n,o,s=[],a=-1,l=0,c=t.length;for(i instanceof Date||(i=new Date(+i));++a<c;)37===t.charCodeAt(a)&&(s.push(t.slice(l,a)),null!=(n=fo[r=t.charAt(++a)])?r=t.charAt(++a):n="e"===r?" ":"0",(o=e[r])&&(r=o(i,n)),s.push(r),l=a+1);return s.push(t.slice(l,a)),s.join("")}}function k(t,e){return function(i){var r,n,o=co(1900,void 0,1);if(T(o,t,i+="",0)!=i.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(e&&!("Z"in o)&&(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)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?Un.ceil(r):Un(r),r=Zn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=ao(co(o.y,0,1))).getDay(),r=n>4||0===n?Dn.ceil(r):Dn(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():ao(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)):ao(o)}}function T(t,e,i,r){for(var n,o,s=0,a=e.length,l=i.length;s<a;){if(r>=l)return-1;if(37===(n=e.charCodeAt(s++))){if(n=e.charAt(s++),!(o=_[n in fo?e.charAt(s++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return b.x=v(i,b),b.X=v(r,b),b.c=v(e,b),C.x=v(i,C),C.X=v(r,C),C.c=v(e,C),{format:function(t){var e=v(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",C);return e.toString=function(){return t},e},utcParse:function(t){var e=k(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 Zs=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r<e;)i[r]="#"+t.slice(6*r,6*++r);return i}("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function js(t){return"string"==typeof t?new Lt([[document.querySelector(t)]],[document.documentElement]):new Lt([[t]],Ft)}function Os(t){return"string"==typeof t?new Lt([document.querySelectorAll(t)],[document.documentElement]):new Lt([_(t)],Ft)}function Is(t){return function(){return t}}const Ds=Math.abs,qs=Math.atan2,$s=Math.cos,zs=Math.max,Ps=Math.min,Rs=Math.sin,Hs=Math.sqrt,Ws=1e-12,Us=Math.PI,Ys=Us/2,Vs=2*Us;function Gs(t){return t>=1?Ys:t<=-1?-Ys:Math.asin(t)}const Xs=Math.PI,Js=2*Xs,Qs=1e-6,Ks=Js-Qs;function ta(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class ea{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ta:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ta;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*i)/i+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,i,r){this._append`Q${+t},${+e},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,e,i,r,n,o){this._append`C${+t},${+e},${+i},${+r},${this._x1=+n},${this._y1=+o}`}arcTo(t,e,i,r,n){if(t=+t,e=+e,i=+i,r=+r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=this._x1,s=this._y1,a=i-t,l=r-e,c=o-t,h=s-e,u=c*c+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Qs)if(Math.abs(h*a-l*c)>Qs&&n){let d=i-o,f=r-s,p=a*a+l*l,g=d*d+f*f,m=Math.sqrt(p),y=Math.sqrt(u),x=n*Math.tan((Xs-Math.acos((p+u-g)/(2*m*y)))/2),b=x/y,C=x/m;Math.abs(b-1)>Qs&&this._append`L${t+b*c},${e+b*h}`,this._append`A${n},${n},0,0,${+(h*d>c*f)},${this._x1=t+C*a},${this._y1=e+C*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 s=i*Math.cos(r),a=i*Math.sin(r),l=t+s,c=e+a,h=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Qs||Math.abs(this._y1-c)>Qs)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Js+Js),u>Ks?this._append`A${i},${i},0,1,${h},${t-s},${e-a}A${i},${i},0,1,${h},${this._x1=l},${this._y1=c}`:u>Qs&&this._append`A${i},${i},0,${+(u>=Xs)},${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 ia(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 ea(e)}function ra(t){return t.innerRadius}function na(t){return t.outerRadius}function oa(t){return t.startAngle}function sa(t){return t.endAngle}function aa(t){return t&&t.padAngle}function la(t,e,i,r,n,o,s){var a=t-i,l=e-r,c=(s?o:-o)/Hs(a*a+l*l),h=c*l,u=-c*a,d=t+h,f=e+u,p=i+h,g=r+u,m=(d+p)/2,y=(f+g)/2,x=p-d,b=g-f,C=x*x+b*b,_=n-o,v=d*g-p*f,k=(b<0?-1:1)*Hs(zs(0,_*_*C-v*v)),T=(v*b-x*k)/C,w=(-v*x-b*k)/C,S=(v*b+x*k)/C,B=(-v*x+b*k)/C,F=T-m,L=w-y,A=S-m,M=B-y;return F*F+L*L>A*A+M*M&&(T=S,w=B),{cx:T,cy:w,x01:-h,y01:-u,x11:T*(n/_-1),y11:w*(n/_-1)}}function ca(){var t=ra,e=na,i=Is(0),r=null,n=oa,o=sa,s=aa,a=null,l=ia(c);function c(){var c,h,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Ys,g=o.apply(this,arguments)-Ys,m=Ds(g-p),y=g>p;if(a||(a=c=l()),f<d&&(h=f,f=d,d=h),f>Ws)if(m>Vs-Ws)a.moveTo(f*$s(p),f*Rs(p)),a.arc(0,0,f,p,g,!y),d>Ws&&(a.moveTo(d*$s(g),d*Rs(g)),a.arc(0,0,d,g,p,y));else{var x,b,C=p,_=g,v=p,k=g,T=m,w=m,S=s.apply(this,arguments)/2,B=S>Ws&&(r?+r.apply(this,arguments):Hs(d*d+f*f)),F=Ps(Ds(f-d)/2,+i.apply(this,arguments)),L=F,A=F;if(B>Ws){var M=Gs(B/d*Rs(S)),E=Gs(B/f*Rs(S));(T-=2*M)>Ws?(v+=M*=y?1:-1,k-=M):(T=0,v=k=(p+g)/2),(w-=2*E)>Ws?(C+=E*=y?1:-1,_-=E):(w=0,C=_=(p+g)/2)}var N=f*$s(C),Z=f*Rs(C),j=d*$s(k),O=d*Rs(k);if(F>Ws){var I,D=f*$s(_),q=f*Rs(_),$=d*$s(v),z=d*Rs(v);if(m<Us)if(I=function(t,e,i,r,n,o,s,a){var l=i-t,c=r-e,h=s-n,u=a-o,d=u*l-h*c;if(!(d*d<Ws))return[t+(d=(h*(e-o)-u*(t-n))/d)*l,e+d*c]}(N,Z,$,z,D,q,j,O)){var P=N-I[0],R=Z-I[1],H=D-I[0],W=q-I[1],U=1/Rs(((u=(P*H+R*W)/(Hs(P*P+R*R)*Hs(H*H+W*W)))>1?0:u<-1?Us:Math.acos(u))/2),Y=Hs(I[0]*I[0]+I[1]*I[1]);L=Ps(F,(d-Y)/(U-1)),A=Ps(F,(f-Y)/(U+1))}else L=A=0}w>Ws?A>Ws?(x=la($,z,N,Z,f,A,y),b=la(D,q,j,O,f,A,y),a.moveTo(x.cx+x.x01,x.cy+x.y01),A<F?a.arc(x.cx,x.cy,A,qs(x.y01,x.x01),qs(b.y01,b.x01),!y):(a.arc(x.cx,x.cy,A,qs(x.y01,x.x01),qs(x.y11,x.x11),!y),a.arc(0,0,f,qs(x.cy+x.y11,x.cx+x.x11),qs(b.cy+b.y11,b.cx+b.x11),!y),a.arc(b.cx,b.cy,A,qs(b.y11,b.x11),qs(b.y01,b.x01),!y))):(a.moveTo(N,Z),a.arc(0,0,f,C,_,!y)):a.moveTo(N,Z),d>Ws&&T>Ws?L>Ws?(x=la(j,O,D,q,d,-L,y),b=la(N,Z,$,z,d,-L,y),a.lineTo(x.cx+x.x01,x.cy+x.y01),L<F?a.arc(x.cx,x.cy,L,qs(x.y01,x.x01),qs(b.y01,b.x01),!y):(a.arc(x.cx,x.cy,L,qs(x.y01,x.x01),qs(x.y11,x.x11),!y),a.arc(0,0,d,qs(x.cy+x.y11,x.cx+x.x11),qs(b.cy+b.y11,b.cx+b.x11),y),a.arc(b.cx,b.cy,L,qs(b.y11,b.x11),qs(b.y01,b.x01),!y))):a.arc(0,0,d,k,v,y):a.lineTo(j,O)}else a.moveTo(0,0);if(a.closePath(),c)return a=null,c+""||null}return c.centroid=function(){var i=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+n.apply(this,arguments)+ +o.apply(this,arguments))/2-Us/2;return[$s(r)*i,Rs(r)*i]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Is(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Is(+t),c):e},c.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:Is(+t),c):i},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Is(+t),c):r},c.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Is(+t),c):n},c.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:Is(+t),c):o},c.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:Is(+t),c):s},c.context=function(t){return arguments.length?(a=null==t?null:t,c):a},c}ea.prototype;Array.prototype.slice;function ha(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ua(t){this._context=t}function da(t){return new ua(t)}function fa(t){return t[0]}function pa(t){return t[1]}function ga(t,e){var i=Is(!0),r=null,n=da,o=null,s=ia(a);function a(a){var l,c,h,u=(a=ha(a)).length,d=!1;for(null==r&&(o=n(h=s())),l=0;l<=u;++l)!(l<u&&i(c=a[l],l,a))===d&&((d=!d)?o.lineStart():o.lineEnd()),d&&o.point(+t(c,l,a),+e(c,l,a));if(h)return o=null,h+""||null}return t="function"==typeof t?t:void 0===t?fa:Is(t),e="function"==typeof e?e:void 0===e?pa:Is(e),a.x=function(e){return arguments.length?(t="function"==typeof e?e:Is(+e),a):t},a.y=function(t){return arguments.length?(e="function"==typeof t?t:Is(+t),a):e},a.defined=function(t){return arguments.length?(i="function"==typeof t?t:Is(!!t),a):i},a.curve=function(t){return arguments.length?(n=t,null!=r&&(o=n(r)),a):n},a.context=function(t){return arguments.length?(null==t?r=o=null:o=n(r=t),a):r},a}function ma(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ya(t){return t}function xa(){var t=ya,e=ma,i=null,r=Is(0),n=Is(Vs),o=Is(0);function s(s){var a,l,c,h,u,d=(s=ha(s)).length,f=0,p=new Array(d),g=new Array(d),m=+r.apply(this,arguments),y=Math.min(Vs,Math.max(-Vs,n.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,o.apply(this,arguments)),b=x*(y<0?-1:1);for(a=0;a<d;++a)(u=g[p[a]=a]=+t(s[a],a,s))>0&&(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(s[t],s[e])})),a=0,c=f?(y-d*b)/f:0;a<d;++a,m=h)l=p[a],h=m+((u=g[l])>0?u*c:0)+b,g[l]={data:s[l],index:a,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:Is(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,i=null,s):e},s.sort=function(t){return arguments.length?(i=t,e=null,s):i},s.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Is(+t),s):r},s.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:Is(+t),s):n},s.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Is(+t),s):o},s}function ba(){}function Ca(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 _a(t){this._context=t}function va(t){return new _a(t)}function ka(t){this._context=t}function Ta(t){return new ka(t)}function wa(t){this._context=t}function Sa(t){return new wa(t)}ua.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)}}},_a.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:Ca(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:Ca(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ka.prototype={areaStart:ba,areaEnd:ba,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:Ca(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},wa.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:Ca(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Ba{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 Fa(t){return new Ba(t,!0)}function La(t){return new Ba(t,!1)}function Aa(t,e){this._basis=new _a(t),this._beta=e}Aa.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],s=t[i]-n,a=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*s),this._beta*e[l]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ma=function t(e){function i(t){return 1===e?new _a(t):new Aa(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Ea(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 Na(t,e){this._context=t,this._k=(1-e)/6}Na.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:Ea(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:Ea(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 Za=function t(e){function i(t){return new Na(t,e)}return i.tension=function(e){return t(+e)},i}(0);function ja(t,e){this._context=t,this._k=(1-e)/6}ja.prototype={areaStart:ba,areaEnd:ba,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:Ea(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 Oa=function t(e){function i(t){return new ja(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ia(t,e){this._context=t,this._k=(1-e)/6}Ia.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:Ea(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 Da=function t(e){function i(t){return new Ia(t,e)}return i.tension=function(e){return t(+e)},i}(0);function qa(t,e,i){var r=t._x1,n=t._y1,o=t._x2,s=t._y2;if(t._l01_a>Ws){var a=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*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Ws){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,s=(s*c+t._y1*t._l23_2a-i*t._l12_2a)/h}t._context.bezierCurveTo(r,n,o,s,t._x2,t._y2)}function $a(t,e){this._context=t,this._alpha=e}$a.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:qa(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 za=function t(e){function i(t){return e?new $a(t,e):new Na(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Pa(t,e){this._context=t,this._alpha=e}Pa.prototype={areaStart:ba,areaEnd:ba,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:qa(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 Ra=function t(e){function i(t){return e?new Pa(t,e):new ja(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ha(t,e){this._context=t,this._alpha=e}Ha.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:qa(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 Wa=function t(e){function i(t){return e?new Ha(t,e):new Ia(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ua(t){this._context=t}function Ya(t){return new Ua(t)}function Va(t){return t<0?-1:1}function Ga(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),s=(i-t._y1)/(n||r<0&&-0),a=(o*n+s*r)/(r+n);return(Va(o)+Va(s))*Math.min(Math.abs(o),Math.abs(s),.5*Math.abs(a))||0}function Xa(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Ja(t,e,i){var r=t._x0,n=t._y0,o=t._x1,s=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,n+a*e,o-a,s-a*i,o,s)}function Qa(t){this._context=t}function Ka(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Qa(t)}function il(t){return new Ka(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),s=new Array(r);for(n[0]=0,o[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)n[e]=1,o[e]=4,s[e]=4*t[e]+2*t[e+1];for(n[r-1]=2,o[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)i=n[e]/o[e-1],o[e]-=i,s[e]-=i*s[e-1];for(n[r-1]=s[r-1]/o[r-1],e=r-2;e>=0;--e)n[e]=(s[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-n[e+1];return[n,o]}function ol(t){return new rl(t)}function sl(t,e){this._context=t,this._t=e}function al(t){return new sl(t,.5)}function ll(t){return new sl(t,0)}function cl(t){return new sl(t,1)}function hl(t,e,i){this.k=t,this.x=e,this.y=i}Ua.prototype={areaStart:ba,areaEnd:ba,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Qa.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ja(this,this._t0,Xa(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){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,Ja(this,Xa(this,i=Ga(this,t,e)),i);break;default:Ja(this,this._t0,i=Ga(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Ka.prototype=Object.create(Qa.prototype)).point=function(t,e){Qa.prototype.point.call(this,e,t)},tl.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}},rl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===i)this._context.lineTo(t[1],e[1]);else for(var r=nl(t),n=nl(e),o=0,s=1;s<i;++o,++s)this._context.bezierCurveTo(r[0][o],n[0][o],r[1][o],n[1][o],t[s],e[s]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},sl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=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},1883:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(1691),n=i(2142);const o=class{constructor(){this.type=n.w.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.w.ALL}is(t){return this.type===t}};const s=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.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.w.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")},1610:(t,e,i)=>{"use strict";i.d(e,{Z:()=>g});var r=i(1883),n=i(2142);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),s=i.length,a=s%4==0,l=s>4,c=l?1:17,h=l?8:4,u=a?0:-1,d=l?255:15;return r.Z.set({r:(n>>h*(u+3)&d)*c,g:(n>>h*(u+2)&d)*c,b:(n>>h*(u+1)&d)*c,a:a?(n&d)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}${n.Q[Math.round(255*o)]}`:`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}`}},s=o;var a=i(1691);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 a.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return a.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return a.Z.channel.clamp.h(360*parseFloat(t))}}return a.Z.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,s,c,h]=i;return r.Z.set({h:l._hue2deg(n),s:a.Z.channel.clamp.s(parseFloat(o)),l:a.Z.channel.clamp.l(parseFloat(s)),a:c?a.Z.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(${a.Z.lang.round(e)}, ${a.Z.lang.round(i)}%, ${a.Z.lang.round(r)}%, ${n})`:`hsl(${a.Z.lang.round(e)}, ${a.Z.lang.round(i)}%, ${a.Z.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 s.parse(e)},stringify:t=>{const e=s.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,s,l,c,h,u,f]=i;return r.Z.set({r:a.Z.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:a.Z.channel.clamp.g(l?2.55*parseFloat(s):parseFloat(s)),b:a.Z.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?a.Z.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(${a.Z.lang.round(e)}, ${a.Z.lang.round(i)}, ${a.Z.lang.round(r)}, ${a.Z.lang.round(n)})`:`rgb(${a.Z.lang.round(e)}, ${a.Z.lang.round(i)}, ${a.Z.lang.round(r)})`}},f=d,p={format:{keyword:h,hex:s,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=s.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.w.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):s.stringify(t)},g=p},2142:(t,e,i)=>{"use strict";i.d(e,{Q:()=>n,w:()=>o});var r=i(1691);const n={};for(let s=0;s<=255;s++)n[s]=r.Z.unit.dec2hex(s);const o={ALL:0,RGB:1,HSL:2}},6174:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(1691),n=i(1610);const o=(t,e,i)=>{const o=n.Z.parse(t),s=o[e],a=r.Z.channel.clamp[e](s+i);return s!==a&&(o[e]=a),n.Z.stringify(o)}},3438:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(1691),n=i(1610);const o=(t,e)=>{const i=n.Z.parse(t);for(const n in e)i[n]=r.Z.channel.clamp[n](e[n]);return n.Z.stringify(i)}},7201:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(6174);const n=(t,e)=>(0,r.Z)(t,"l",-e)},1619:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(1691),n=i(1610);const o=t=>{const{r:e,g:i,b:o}=n.Z.parse(t),s=.2126*r.Z.channel.toLinear(e)+.7152*r.Z.channel.toLinear(i)+.0722*r.Z.channel.toLinear(o);return r.Z.lang.round(s)},s=t=>o(t)>=.5,a=t=>!s(t)},2281:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(6174);const n=(t,e)=>(0,r.Z)(t,"l",e)},1117:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(1691),n=i(1883),o=i(1610),s=i(3438);const a=(t,e,i=0,a=1)=>{if("number"!=typeof t)return(0,s.Z)(t,{a:e});const l=n.Z.set({r:r.Z.channel.clamp.r(t),g:r.Z.channel.clamp.g(e),b:r.Z.channel.clamp.b(i),a:r.Z.channel.clamp.a(a)});return o.Z.stringify(l)}},1691:(t,e,i)=>{"use strict";i.d(e,{Z:()=>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,s=2*i-o;switch(n){case"r":return 255*r.hue2rgb(s,o,t+1/3);case"g":return 255*r.hue2rgb(s,o,t);case"b":return 255*r.hue2rgb(s,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),s=(n+o)/2;if("l"===r)return 100*s;if(n===o)return 0;const a=n-o;if("s"===r)return 100*(s>.5?a/(2-n-o):a/(n+o));switch(n){case t:return 60*((e-i)/a+(e<i?6:0));case e:return 60*((i-t)/a+2);case i:return 60*((t-e)/a+4);default:return-1}}},n={channel:r,lang:{clamp:(t,e,i)=>e>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}`}}}},7308:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(9651);const o=function(t,e){for(var i=t.length;i--;)if((0,n.Z)(t[i][0],e))return i;return-1};var s=Array.prototype.splice;const a=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():s.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<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=a,u.prototype.get=l,u.prototype.has=c,u.prototype.set=h;const d=u},6183:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(2508),n=i(6092);const o=(0,r.Z)(n.Z,"Map")},7834:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});const r=(0,i(2508).Z)(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 s=Object.prototype.hasOwnProperty;const a=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return s.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<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=c,u.prototype.set=h;const d=u;var f=i(7308),p=i(6183);const g=function(){this.size=0,this.__data__={hash:new d,map:new(p.Z||f.Z),string:new d}};const m=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const y=function(t,e){var i=t.__data__;return m(e)?i["string"==typeof e?"string":"hash"]:i.map};const x=function(t){var e=y(this,t).delete(t);return this.size-=e?1:0,e};const b=function(t){return y(this,t).get(t)};const C=function(t){return y(this,t).has(t)};const _=function(t,e){var i=y(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this};function v(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}v.prototype.clear=g,v.prototype.delete=x,v.prototype.get=b,v.prototype.has=C,v.prototype.set=_;const k=v},3203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(2508),n=i(6092);const o=(0,r.Z)(n.Z,"Set")},1667:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(7308);const n=function(){this.__data__=new r.Z,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const s=function(t){return this.__data__.get(t)};const a=function(t){return this.__data__.has(t)};var l=i(6183),c=i(7834);const h=function(t,e){var i=this.__data__;if(i instanceof r.Z){var n=i.__data__;if(!l.Z||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new c.Z(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.Z(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=s,u.prototype.has=a,u.prototype.set=h;const d=u},7685:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(6092).Z.Symbol},4073:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(6092).Z.Uint8Array},7668:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});const r=function(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r};var n=i(9169),o=i(7771),s=i(7008),a=i(6009),l=i(8843),c=Object.prototype.hasOwnProperty;const h=function(t,e){var i=(0,o.Z)(t),h=!i&&(0,n.Z)(t),u=!i&&!h&&(0,s.Z)(t),d=!i&&!h&&!u&&(0,l.Z)(t),f=i||h||u||d,p=f?r(t.length,String):[],g=p.length;for(var m in t)!e&&!c.call(t,m)||f&&("length"==m||u&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||(0,a.Z)(m,g))||p.push(m);return p}},2954:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(4752),n=i(9651),o=Object.prototype.hasOwnProperty;const s=function(t,e,i){var s=t[e];o.call(t,e)&&(0,n.Z)(s,i)&&(void 0!==i||e in t)||(0,r.Z)(t,e,i)}},4752:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(7904);const n=function(t,e,i){"__proto__"==e&&r.Z?(0,r.Z)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},1395:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),s=r(e),a=s.length;a--;){var l=s[t?a:++n];if(!1===i(o[l],l,o))break}return e}}()},3589:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(7685),n=Object.prototype,o=n.hasOwnProperty,s=n.toString,a=r.Z?r.Z.toStringTag:void 0;const l=function(t){var e=o.call(t,a),i=t[a];try{t[a]=void 0;var r=!0}catch(l){}var n=s.call(t);return r&&(e?t[a]=i:delete t[a]),n};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=r.Z?r.Z.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)}},5154:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(2764);const n=(0,i(1851).Z)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const s=function(t){if(!(0,r.Z)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},9581:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(9203),n=i(1211),o=i(7227);const s=function(t,e){return(0,o.Z)((0,n.Z)(t,e,r.Z),t+"")}},1162:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},1884:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(4073);const n=function(t){var e=new t.constructor(t.byteLength);return new r.Z(e).set(new r.Z(t)),e}},1050:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(6092),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,s=o&&o.exports===n?r.Z.Buffer:void 0,a=s?s.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=a?a(i):new t.constructor(i);return t.copy(r),r}},2701:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(1884);const n=function(t,e){var i=e?(0,r.Z)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},7215:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i<r;)e[i]=t[i];return e}},1899:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(2954),n=i(4752);const o=function(t,e,i,o){var s=!i;i||(i={});for(var a=-1,l=e.length;++a<l;){var c=e[a],h=o?o(i[c],t[c],c,i,t):void 0;void 0===h&&(h=t[c]),s?(0,n.Z)(i,c,h):(0,r.Z)(i,c,h)}return i}},7904:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(2508);const n=function(){try{var t=(0,r.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},3413:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},2508:(t,e,i)=>{"use strict";i.d(e,{Z:()=>x});var r=i(3234);const n=i(6092).Z["__core-js_shared__"];var o,s=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const a=function(t){return!!s&&s in t};var l=i(7226),c=i(19),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.Z)(t)||a(t))&&((0,r.Z)(t)?g:h).test((0,c.Z)(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}},2513:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=(0,i(1851).Z)(Object.getPrototypeOf,Object)},3970:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});var r=i(2508),n=i(6092);const o=(0,r.Z)(n.Z,"DataView");var s=i(6183);const a=(0,r.Z)(n.Z,"Promise");var l=i(3203);const c=(0,r.Z)(n.Z,"WeakMap");var h=i(3589),u=i(19),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.Z)(o),x=(0,u.Z)(s.Z),b=(0,u.Z)(a),C=(0,u.Z)(l.Z),_=(0,u.Z)(c),v=h.Z;(o&&v(new o(new ArrayBuffer(1)))!=m||s.Z&&v(new s.Z)!=d||a&&v(a.resolve())!=f||l.Z&&v(new l.Z)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.Z)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.Z)(i):"";if(r)switch(r){case y:return m;case x:return d;case b:return f;case C:return p;case _:return g}return e});const k=v},3658:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(7226),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.Z)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var s=i(2513),a=i(2764);const l=function(t){return"function"!=typeof t.constructor||(0,a.Z)(t)?{}:o((0,s.Z)(t))}},6009:(t,e,i)=>{"use strict";i.d(e,{Z:()=>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<e}},439:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(9651),n=i(585),o=i(6009),s=i(7226);const a=function(t,e,i){if(!(0,s.Z)(i))return!1;var a=typeof e;return!!("number"==a?(0,n.Z)(i)&&(0,o.Z)(e,i.length):"string"==a&&e in i)&&(0,r.Z)(i[e],t)}},2764:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},8351:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(3413),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,s=o&&o.exports===n&&r.Z.process;const a=function(){try{var t=o&&o.require&&o.require("util").types;return t||s&&s.binding&&s.binding("util")}catch(e){}}()},1851:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},1211:(t,e,i)=>{"use strict";i.d(e,{Z:()=>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,s=-1,a=n(o.length-e,0),l=Array(a);++s<a;)l[s]=o[e+s];s=-1;for(var c=Array(e+1);++s<e;)c[s]=o[s];return c[e]=i(l),r(t,this,c)}}},6092:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(3413),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.Z||n||Function("return this")()},7227:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(2002),n=i(7904),o=i(9203);const s=n.Z?function(t,e){return(0,n.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:o.Z;var a=Date.now;const l=function(t){var e=0,i=0;return function(){var r=a(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(s)},19:(t,e,i)=>{"use strict";i.d(e,{Z:()=>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""}},2002:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(){return t}}},9651:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},9203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return t}},9169:(t,e,i)=>{"use strict";i.d(e,{Z:()=>c});var r=i(3589),n=i(8533);const o=function(t){return(0,n.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var s=Object.prototype,a=s.hasOwnProperty,l=s.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.Z)(t)&&a.call(t,"callee")&&!l.call(t,"callee")}},7771:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=Array.isArray},585:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(3234),n=i(1656);const o=function(t){return null!=t&&(0,n.Z)(t.length)&&!(0,r.Z)(t)}},836:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(585),n=i(8533);const o=function(t){return(0,n.Z)(t)&&(0,r.Z)(t)}},7008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(6092);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=o&&"object"==typeof module&&module&&!module.nodeType&&module,a=s&&s.exports===o?r.Z.Buffer:void 0;const l=(a?a.isBuffer:void 0)||n},9697:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(5154),n=i(3970),o=i(9169),s=i(7771),a=i(585),l=i(7008),c=i(2764),h=i(8843),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,a.Z)(t)&&((0,s.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.Z)(t)||(0,h.Z)(t)||(0,o.Z)(t)))return!t.length;var e=(0,n.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.Z)(t))return!(0,r.Z)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},3234:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(3589),n=i(7226);const o=function(t){if(!(0,n.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},7226:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},8533:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},7514:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(3589),n=i(2513),o=i(8533),s=Function.prototype,a=Object.prototype,l=s.toString,c=a.hasOwnProperty,h=l.call(Object);const u=function(t){if(!(0,o.Z)(t)||"[object Object]"!=(0,r.Z)(t))return!1;var e=(0,n.Z)(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}},8843:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(3589),n=i(1656),o=i(8533),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1;const a=function(t){return(0,o.Z)(t)&&(0,n.Z)(t.length)&&!!s[(0,r.Z)(t)]};var l=i(1162),c=i(8351),h=c.Z&&c.Z.isTypedArray;const u=h?(0,l.Z)(h):a},5733:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});var r=i(7668),n=i(7226),o=i(2764);const s=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var a=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.Z)(t))return s(t);var e=(0,o.Z)(t),i=[];for(var r in t)("constructor"!=r||!e&&a.call(t,r))&&i.push(r);return i};var c=i(585);const h=function(t){return(0,c.Z)(t)?(0,r.Z)(t,!0):l(t)}},2454:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(7834);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 s=t.apply(this,r);return i.cache=o.set(n,s)||o,s};return i.cache=new(n.Cache||r.Z),i}n.Cache=r.Z;const o=n},9236:(t,e,i)=>{"use strict";i.d(e,{Z:()=>F});var r=i(1667),n=i(4752),o=i(9651);const s=function(t,e,i){(void 0!==i&&!(0,o.Z)(t[e],i)||void 0===i&&!(e in t))&&(0,n.Z)(t,e,i)};var a=i(1395),l=i(1050),c=i(2701),h=i(7215),u=i(3658),d=i(9169),f=i(7771),p=i(836),g=i(7008),m=i(3234),y=i(7226),x=i(7514),b=i(8843);const C=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var _=i(1899),v=i(5733);const k=function(t){return(0,_.Z)(t,(0,v.Z)(t))};const T=function(t,e,i,r,n,o,a){var _=C(t,i),v=C(e,i),T=a.get(v);if(T)s(t,i,T);else{var w=o?o(_,v,i+"",t,e,a):void 0,S=void 0===w;if(S){var B=(0,f.Z)(v),F=!B&&(0,g.Z)(v),L=!B&&!F&&(0,b.Z)(v);w=v,B||F||L?(0,f.Z)(_)?w=_:(0,p.Z)(_)?w=(0,h.Z)(_):F?(S=!1,w=(0,l.Z)(v,!0)):L?(S=!1,w=(0,c.Z)(v,!0)):w=[]:(0,x.Z)(v)||(0,d.Z)(v)?(w=_,(0,d.Z)(_)?w=k(_):(0,y.Z)(_)&&!(0,m.Z)(_)||(w=(0,u.Z)(v))):S=!1}S&&(a.set(v,w),n(w,v,r,o,a),a.delete(v)),s(t,i,w)}};const w=function t(e,i,n,o,l){e!==i&&(0,a.Z)(i,(function(a,c){if(l||(l=new r.Z),(0,y.Z)(a))T(e,i,c,n,t,o,l);else{var h=o?o(C(e,c),a,c+"",e,i,l):void 0;void 0===h&&(h=a),s(e,c,h)}}),v.Z)};var S=i(9581),B=i(439);const F=function(t){return(0,S.Z)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,s=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,s&&(0,B.Z)(i[0],i[1],s)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var a=i[r];a&&t(e,a,r,o)}return e}))}((function(t,e,i){w(t,e,i)}))},6365:(t,e,i)=>{"use strict";i.d(e,{A:()=>Ot,B:()=>me,C:()=>ge,D:()=>Ft,E:()=>Fe,F:()=>ir,G:()=>oe,H:()=>ht,I:()=>Ei,J:()=>xe,K:()=>Bi,L:()=>io,Z:()=>Gt,a:()=>Ti,b:()=>ki,c:()=>Ai,d:()=>ft,e:()=>_t,f:()=>Vt,g:()=>vi,h:()=>ue,i:()=>di,j:()=>he,k:()=>re,l:()=>at,m:()=>mt,n:()=>Kt,o:()=>fi,p:()=>Mi,q:()=>wi,r:()=>Si,s:()=>_i,t:()=>Ci,u:()=>ye,v:()=>yt,w:()=>le,x:()=>se,y:()=>Zi,z:()=>qi});var r=i(8464),n=i(7484),o=i(7967),s=i(4218),a=i(7856),l=i(1610),c=i(3438);const h=(t,e)=>{const i=l.Z.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,c.Z)(t,r)};var u=i(1117);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:s}=l.Z.parse(t),{r:a,g:c,b:h,a:d}=l.Z.parse(e),f=i/100,p=2*f-1,g=s-d,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m,x=r*m+a*y,b=n*m+c*y,C=o*m+h*y,_=s*f+d*(1-f);return(0,u.Z)(x,b,C,_)},f=(t,e=100)=>{const i=l.Z.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(7201),g=i(2281),m=i(1619),y=i(2454),x=i(9236),b="comm",C="rule",_="decl",v=Math.abs,k=String.fromCharCode;Object.assign;function T(t){return t.trim()}function w(t,e,i){return t.replace(e,i)}function S(t,e,i){return t.indexOf(e,i)}function B(t,e){return 0|t.charCodeAt(e)}function F(t,e,i){return t.slice(e,i)}function L(t){return t.length}function A(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r<t.length;r++)i+=e(t[r],r,t,e)||"";return i}function E(t,e,i,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case _:return t.return=t.return||t.value;case b:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case C:if(!L(t.value=t.props.join(",")))return""}return L(i=M(t.children,r))?t.return=t.value+"{"+i+"}":""}var N=1,Z=1,j=0,O=0,I=0,D="";function q(t,e,i,r,n,o,s,a){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:N,column:Z,length:s,return:"",siblings:a}}function $(){return I=O>0?B(D,--O):0,Z--,10===I&&(Z=1,N--),I}function z(){return I=O<j?B(D,O++):0,Z++,10===I&&(Z=1,N++),I}function P(){return B(D,O)}function R(){return O}function H(t,e){return F(D,t,e)}function W(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function U(t){return N=Z=1,j=L(D=t),O=0,[]}function Y(t){return D="",t}function V(t){return T(H(O-1,J(91===t?t+2:40===t?t+1:t)))}function G(t){for(;(I=P())&&I<33;)z();return W(t)>2||W(I)>3?"":" "}function X(t,e){for(;--e&&z()&&!(I<48||I>102||I>57&&I<65||I>70&&I<97););return H(t,R()+(e<6&&32==P()&&32==z()))}function J(t){for(;z();)switch(I){case t:return O;case 34:case 39:34!==t&&39!==t&&J(I);break;case 40:41===t&&J(t);break;case 92:z()}return O}function Q(t,e){for(;z()&&t+I!==57&&(t+I!==84||47!==P()););return"/*"+H(e,O-1)+"*"+k(47===t?t:z())}function K(t){for(;!W(P());)z();return H(t,O)}function tt(t){return Y(et("",null,null,null,[""],t=U(t),0,[0],t))}function et(t,e,i,r,n,o,s,a,l){for(var c=0,h=0,u=s,d=0,f=0,p=0,g=1,m=1,y=1,x=0,b="",C=n,_=o,T=r,F=b;m;)switch(p=x,x=z()){case 40:if(108!=p&&58==B(F,u-1)){-1!=S(F+=w(V(x),"&","&\f"),"&\f",v(c?a[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:F+=V(x);break;case 9:case 10:case 13:case 32:F+=G(p);break;case 92:F+=X(R()-1,7);continue;case 47:switch(P()){case 42:case 47:A(rt(Q(z(),R()),e,i,l),l);break;default:F+="/"}break;case 123*g:a[c++]=L(F)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(F=w(F,/\f/g,"")),f>0&&L(F)-u&&A(f>32?nt(F+";",r,i,u-1,l):nt(w(F," ","")+";",r,i,u-2,l),l);break;case 59:F+=";";default:if(A(T=it(F,e,i,c,h,n,a,b,C=[],_=[],u,o),o),123===x)if(0===h)et(F,e,T,T,C,o,u,a,_);else switch(99===d&&110===B(F,3)?100:d){case 100:case 108:case 109:case 115:et(t,T,T,r&&A(it(t,T,T,0,0,n,a,b,n,C=[],u,_),_),n,_,u,a,r?C:_);break;default:et(F,T,T,T,[""],_,0,a,_)}}c=h=f=0,g=y=1,b=F="",u=s;break;case 58:u=1+L(F),f=p;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==$())continue;switch(F+=k(x),x*g){case 38:y=h>0?1:(F+="\f",-1);break;case 44:a[c++]=(L(F)-1)*y,y=1;break;case 64:45===P()&&(F+=V(z())),d=P(),h=u=L(b=F+=K(R())),x++;break;case 45:45===p&&2==L(F)&&(g=0)}}return o}function it(t,e,i,r,n,o,s,a,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;g<r;++g)for(var x=0,b=F(t,d+1,d=v(m=s[g])),_=t;x<p;++x)(_=T(m>0?f[x]+" "+b:w(b,/&\f/g,f[x])))&&(l[y++]=_);return q(t,e,i,0===n?C:a,l,c,h,u)}function rt(t,e,i,r){return q(t,e,i,b,k(I),F(t,2,-2),0,r)}function nt(t,e,i,r,n){return q(t,e,i,_,F(t,0,r),F(t,r+1,-1),r,n)}var ot=i(9697);const st={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},at={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=st.fatal;"string"==typeof t?(t=t.toLowerCase())in st&&(e=st[t]):"number"==typeof t&&(e=t),at.trace=()=>{},at.debug=()=>{},at.info=()=>{},at.warn=()=>{},at.error=()=>{},at.fatal=()=>{},e<=st.fatal&&(at.fatal=console.error?console.error.bind(console,ct("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ct("FATAL"))),e<=st.error&&(at.error=console.error?console.error.bind(console,ct("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ct("ERROR"))),e<=st.warn&&(at.warn=console.warn?console.warn.bind(console,ct("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ct("WARN"))),e<=st.info&&(at.info=console.info?console.info.bind(console,ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ct("INFO"))),e<=st.debug&&(at.debug=console.debug?console.debug.bind(console,ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("DEBUG"))),e<=st.trace&&(at.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=/<br\s*\/?>/gi,ut=t=>{const e="data-temp-href-target";a.addHook("beforeSanitizeAttributes",(t=>{"A"===t.tagName&&t.hasAttribute("target")&&t.setAttribute(e,t.getAttribute("target")||"")}));const i=a.sanitize(t);return a.addHook("afterSanitizeAttributes",(t=>{"A"===t.tagName&&t.hasAttribute(e)&&(t.setAttribute("target",t.getAttribute(e)||""),t.removeAttribute(e),"_blank"===t.getAttribute("target")&&t.setAttribute("rel","noopener"))})),i},dt=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=ut(t):"loose"!==i&&(t=(t=(t=gt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=pt(t))}return t},ft=(t,e)=>t?t=e.dompurifyConfig?a.sanitize(dt(t,e),e.dompurifyConfig).toString():a.sanitize(dt(t,e),{FORBID_TAGS:["style"]}).toString():t,pt=t=>t.replace(/#br#/g,"<br/>"),gt=t=>t.replace(ht,"#br#"),mt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),yt=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r<e.length;r++){let t=e[r];if(","===t&&r>0&&r+1<e.length){const n=e[r-1],o=e[r+1];bt(n,o)&&(t=n+","+o,r++,i.pop())}i.push(Ct(t))}return i.join("")},xt=(t,e)=>Math.max(0,t.split(e).length-1),bt=(t,e)=>{const i=xt(t,"~"),r=xt(e,"~");return 1===i&&1===r},Ct=t=>{const e=xt(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("")},_t={getRows:t=>{if(!t)return[""];return gt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:ft,sanitizeTextOrArray:(t,e)=>"string"==typeof t?ft(t,e):t.flat().map((t=>ft(t,e))),hasBreaks:t=>ht.test(t),splitBreaks:t=>t.split(ht),lineBreakRegex:ht,removeScript:ut,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:mt,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)}},vt=(t,e)=>h(t,e?{s:-40,l:10}:{s:-40,l:-10}),kt="#ffffff",Tt="#f2f2f2";let wt=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,s,a,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||vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||vt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||vt(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.Z)(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.Z)(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.Z)(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.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],75);else for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],25);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;const d=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(5+3*f)}),this["surfacePeer"+f]=this["surfacePeer"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(8+3*f)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||h(this.primaryColor,{h:64}),this.fillType3=this.fillType3||h(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||h(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||h(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||h(this.primaryColor,{h:128}),this.fillType7=this.fillType7||h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-10}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(s=this.xyChart)?void 0:s.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(a=this.xyChart)?void 0:a.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let St=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.Z)(this.primaryColor,16),this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(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.Z)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.Z)(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.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.Z)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.Z)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.Z)(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,s,a,l,c,u;this.secondBkg=(0,g.Z)(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.Z)(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.Z)(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.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10);for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-10)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(s=this.xyChart)?void 0:s.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(a=this.xyChart)?void 0:a.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,g.Z)(this.secondaryColor,20),this.git1=(0,g.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,g.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,g.Z)(this.pie4||h(this.primaryColor,{h:-30}),20),this.git4=(0,g.Z)(this.pie5||h(this.primaryColor,{h:-60}),20),this.git5=(0,g.Z)(this.pie6||h(this.primaryColor,{h:-90}),10),this.git6=(0,g.Z)(this.pie7||h(this.primaryColor,{h:60}),10),this.git7=(0,g.Z)(this.pie8||h(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,g.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,g.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Bt=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=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(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.Z)(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,s,a,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.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,l:-(7+5*d)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||f(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||f(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,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||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,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.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||h(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||h(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(s=this.xyChart)?void 0:s.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(a=this.xyChart)?void 0:a.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,p.Z)(f(this.git0),25),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};const Ft=t=>{const e=new Bt;return e.calculate(t),e};let Lt=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.Z)("#cde498",10),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(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,s,a,l,c,u;this.actorBorder=(0,p.Z)(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.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=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||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,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.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-30}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(s=this.xyChart)?void 0:s.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(a=this.xyChart)?void 0:a.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class At{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(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,s,a,l,c,u;this.secondBkg=(0,g.Z)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.Z)(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.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=(0,g.Z)(this.contrast,30),this.sectionBkgColor2=(0,g.Z)(this.contrast,30),this.taskBorderColor=(0,p.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,g.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,p.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",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||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,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});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(s=this.xyChart)?void 0:s.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(a=this.xyChart)?void 0:a.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,p.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||h(this.primaryColor,{h:-30}),this.git4=this.pie5||h(this.primaryColor,{h:-60}),this.git5=this.pie6||h(this.primaryColor,{h:-90}),this.git6=this.pie7||h(this.primaryColor,{h:60}),this.git7=this.pie8||h(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Mt={base:{getThemeVariables:t=>{const e=new wt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new St;return e.calculate(t),e}},default:{getThemeVariables:Ft},forest:{getThemeVariables:t=>{const e=new Lt;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new At;return e.calculate(t),e}}},Et={flowchart:{useMaxWidth:!0,titleTopMargin:25,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,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:""},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"],deterministicIds:!1,fontSize:16},Nt={...Et,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Mt.default.getThemeVariables(),sequence:{...Et.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:{...Et.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Et.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:{...Et.pie,useWidth:984},xyChart:{...Et.xyChart,useWidth:void 0},requirement:{...Et.requirement,useWidth:void 0},gitGraph:{...Et.gitGraph,useMaxWidth:!1},sankey:{...Et.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]),[]),jt=new Set(Zt(Nt,"")),Ot=Nt,It=t=>{if(at.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>It(t)));else{for(const e of Object.keys(t)){if(at.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!jt.has(e)||null==t[e]){at.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){at.debug("sanitizing object",e),It(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(at.debug("sanitizing css option",e),t[e]=Dt(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]="")}at.debug("After sanitization",t)}},Dt=t=>{let e=0,i=0;for(const r of t){if(e<i)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&i++}return e!==i?"{ /* ERROR: Unbalanced CSS */ }":t},qt=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,$t=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,zt=/\s*%%.*\n/gm;class Pt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Rt={},Ht=function(t,e){t=t.replace(qt,"").replace($t,"").replace(zt,"\n");for(const[i,{detector:r}]of Object.entries(Rt)){if(r(t,e))return i}throw new Pt(`No diagram type detected matching given configuration for text: ${t}`)},Wt=(...t)=>{for(const{id:e,detector:i,loader:r}of t)Ut(e,i,r)},Ut=(t,e,i)=>{Rt[t]?at.error(`Detector with key ${t} already exists`):Rt[t]={detector:e,loader:i},at.debug(`Detector with key ${t} added${i?" with loader":""}`)},Yt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Yt(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]=Yt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},Vt=Yt,Gt="\u200b",Xt={curveBasis:s.$0Z,curveBasisClosed:s.Dts,curveBasisOpen:s.WQY,curveBumpX:s.qpX,curveBumpY:s.u93,curveBundle:s.tFB,curveCardinalClosed:s.OvA,curveCardinalOpen:s.dCK,curveCardinal:s.YY7,curveCatmullRomClosed:s.fGX,curveCatmullRomOpen:s.$m7,curveCatmullRom:s.zgE,curveLinear:s.c_6,curveLinearClosed:s.fxm,curveMonotoneX:s.FdL,curveMonotoneY:s.ak_,curveNatural:s.SxZ,curveStep:s.eA_,curveStepAfter:s.jsv,curveStepBefore:s.iJ},Jt=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Qt=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${Jt.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),at.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=$t.exec(t));)if(r.index===$t.lastIndex&&$t.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 at.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function Kt(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Xt[i]??e}function te(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const ee=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},ie=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=te(n,i);if(t<r)r-=t;else{const e=r/t;if(e<=0)return i;if(e>=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:ee((1-e)*i.x+e*n.x,5),y:ee((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function re(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 ne=0;const oe=()=>(ne++,"id-"+Math.random().toString(36).substr(2,12)+"-"+ne);const se=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r<t;r++)e+=i.charAt(Math.floor(16*Math.random()));return e}(t.length),ae=function(t,e){const i=e.text.replace(_t.lineBreakRegex," "),[,r]=ge(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(i),n},le=(0,y.Z)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),_t.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,s)=>{const a=ue(`${t} `,i),l=ue(o,i);if(a>e){const{hyphenatedStrings:r,remainingWord:s}=ce(t,e,"-",i);n.push(o,...r),o=s}else l+a>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");s+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}`)),ce=(0,y.Z)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let s="";return n.forEach(((t,a)=>{const l=`${s}${t}`;if(ue(l,r)>=e){const t=a+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),s=""}else s=l})),{hyphenatedStrings:o,remainingWord:s}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function he(t,e){return de(t,e).height}function ue(t,e){return de(t,e).width}const de=(0,y.Z)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=ge(i),a=["sans-serif",r],l=t.split(_t.lineBreakRegex),c=[],h=(0,s.Ys)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const s of a){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||Gt;const a=ae(u,r).style("font-size",o).style("font-weight",n).style("font-family",s),l=(a._groups||a)[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 fe;function pe(t){return"str"in t}const ge=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 me(t,e){return(0,x.Z)({},t,e)}const ye={assignWithDepth:Vt,wrapLabel:le,calculateTextHeight:he,calculateTextWidth:ue,calculateTextDimensions:de,cleanAndMerge:me,detectInit:function(t,e){const i=Qt(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));It(t),r=Vt(r,[...t])}else r=i.args;if(!r)return;let n=Ht(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:Qt,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:Kt,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=te(t,e),e=t})),ie(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{at.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=ie(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),s={x:0,y:0};return s.x=Math.sin(o)*n+(e[0].x+r.x)/2,s.y=-Math.cos(o)*n+(e[0].y+r.y)/2,s},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);at.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=ie(r,25+t),o=10+.5*t,s=Math.atan2(r[0].y-n.y,r[0].x-n.x),a={x:0,y:0};return"start_left"===e?(a.x=Math.sin(s+Math.PI)*o+(r[0].x+n.x)/2,a.y=-Math.cos(s+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(a.x=Math.sin(s-Math.PI)*o+(r[0].x+n.x)/2-5,a.y=-Math.cos(s-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(a.x=Math.sin(s)*o+(r[0].x+n.x)/2-5,a.y=-Math.cos(s)*o+(r[0].y+n.y)/2-5):(a.x=Math.sin(s)*o+(r[0].x+n.x)/2,a.y=-Math.cos(s)*o+(r[0].y+n.y)/2),a},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Nm)(i):i},getStylesFromArray:re,generateId:oe,random:se,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let s=0;s<r;s++)if(o=o[i[s]],!o)return void at.error(`Function name: ${t} not found in window`);o[n](...e)},entityDecode:function(t){return fe=fe||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fe.innerHTML=t,unescape(fe.textContent)},insertTitle:(t,e,i,r)=>{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:ge,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},xe=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},be="10.7.0",Ce=Object.freeze(Ot);let _e,ve=Vt({},Ce),ke=[],Te=Vt({},Ce);const we=(t,e)=>{let i=Vt({},t),r={};for(const n of e)Le(n),r=Vt(r,n);if(i=Vt(i,r),r.theme&&r.theme in Mt){const t=Vt({},_e),e=Vt(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Mt&&(i.themeVariables=Mt[i.theme].getThemeVariables(e))}return Te=i,Ze(Te),Te},Se=()=>Vt({},ve),Be=t=>(Ze(t),Vt(Te,t),Fe()),Fe=()=>Vt({},Te),Le=t=>{t&&(["secure",...ve.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(at.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]&&Le(t[e])})))},Ae=t=>{It(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),ke.push(t),we(ve,ke)},Me=(t=ve)=>{ke=[],we(t,ke)},Ee={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ne={},Ze=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(Ne[e="LAZY_LOAD_DEPRECATED"]||(at.warn(Ee[e]),Ne[e]=!0)))},je={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(7973).then(i.bind(i,7973));return{id:"c4",diagram:t}}},Oe="flowchart",Ie={id:Oe,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(1644),i.e(9261),i.e(2494),i.e(4852),i.e(4641),i.e(1308)]).then(i.bind(i,1308));return{id:Oe,diagram:t}}},De="flowchart-v2",qe={id:De,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(1644),i.e(9261),i.e(2494),i.e(4852),i.e(4641),i.e(89)]).then(i.bind(i,89));return{id:De,diagram:t}}},$e={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(2005)]).then(i.bind(i,2005));return{id:"er",diagram:t}}},ze="gitGraph",Pe={id:ze,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(2491).then(i.bind(i,2491));return{id:ze,diagram:t}}},Re="gantt",He={id:Re,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(8932).then(i.bind(i,8932));return{id:Re,diagram:t}}},We="info",Ue={id:We,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(7273).then(i.bind(i,7273));return{id:We,diagram:t}}},Ye={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(2950).then(i.bind(i,2950));return{id:"pie",diagram:t}}},Ve="quadrantChart",Ge={id:Ve,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(861).then(i.bind(i,861));return{id:Ve,diagram:t}}},Xe="xychart",Je={id:Xe,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(9261),i.e(2788)]).then(i.bind(i,2788));return{id:Xe,diagram:t}}},Qe="requirement",Ke={id:Qe,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(9765)]).then(i.bind(i,9765));return{id:Qe,diagram:t}}},ti="sequence",ei={id:ti,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(3177).then(i.bind(i,3177));return{id:ti,diagram:t}}},ii="class",ri={id:ii,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(1644),i.e(2924),i.e(5364)]).then(i.bind(i,5364));return{id:ii,diagram:t}}},ni="classDiagram",oi={id:ni,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(1644),i.e(9261),i.e(2494),i.e(4852),i.e(2924),i.e(4168)]).then(i.bind(i,4168));return{id:ni,diagram:t}}},si="state",ai={id:si,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(1644),i.e(885),i.e(9277)]).then(i.bind(i,9277));return{id:si,diagram:t}}},li="stateDiagram",ci={id:li,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(1644),i.e(9261),i.e(2494),i.e(4852),i.e(885),i.e(3343)]).then(i.bind(i,3343));return{id:li,diagram:t}}},hi="journey",ui={id:hi,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(4237).then(i.bind(i,4237));return{id:hi,diagram:t}}},di=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)},fi=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,s=n.height;at.info(`SVG bounds: ${o}x${s}`,n);let a=0,l=0;at.info(`Graph bounds: ${a}x${l}`,t),a=o+2*i,l=s+2*i,at.info(`Calculated bounds: ${a}x${l}`),di(e,l,a,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},pi={},gi=(t,e,i)=>{let r="";return t in pi&&pi[t]?r=pi[t](i):at.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 mi="",yi="",xi="";const bi=t=>ft(t,Fe()),Ci=()=>{mi="",xi="",yi=""},_i=t=>{mi=bi(t).replace(/^\s+/g,"")},vi=()=>mi,ki=t=>{xi=bi(t).replace(/\n\s+/g,"\n")},Ti=()=>xi,wi=t=>{yi=bi(t)},Si=()=>yi,Bi=Object.freeze(Object.defineProperty({__proto__:null,clear:Ci,getAccDescription:Ti,getAccTitle:vi,getDiagramTitle:Si,setAccDescription:ki,setAccTitle:_i,setDiagramTitle:wi},Symbol.toStringTag,{value:"Module"})),Fi=at,Li=lt,Ai=Fe,Mi=Be,Ei=Ce,Ni=t=>ft(t,Ai()),Zi=fi,ji={},Oi=(t,e,i)=>{var r,n,o;if(ji[t])throw new Error(`Diagram ${t} already registered.`);ji[t]=e,i&&Ut(t,i),n=t,void 0!==(o=e.styles)&&(pi[n]=o),null==(r=e.injectUtils)||r.call(e,Fi,Li,Ai,Ni,Zi,Bi,(()=>{}))},Ii=t=>{if(t in ji)return ji[t];throw new Di(t)};class Di extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const qi=t=>{var e;const{securityLevel:i}=Ai();let r=(0,s.Ys)("body");if("sandbox"===i){const i=(null==(e=(0,s.Ys)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,s.Ys)(i.body)}return r.select(`#${t}`)},$i={draw:(t,e,i)=>{at.debug("renering svg for syntax error\n");const r=qi(e);r.attr("viewBox","0 0 2412 512"),di(r,100,512,!0);const n=r.append("g");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}`)}},zi=$i,Pi={db:{},renderer:$i,parser:{parser:{yy:{}},parse:()=>{}}},Ri="flowchart-elk",Hi={id:Ri,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(9261),i.e(2494),i.e(4641),i.e(194)]).then(i.bind(i,194));return{id:Ri,diagram:t}}},Wi="timeline",Ui={id:Wi,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(3304).then(i.bind(i,3304));return{id:Wi,diagram:t}}},Yi="mindmap",Vi={id:Yi,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(9261),i.e(339)]).then(i.bind(i,339));return{id:Yi,diagram:t}}},Gi="sankey",Xi={id:Gi,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(5622).then(i.bind(i,5622));return{id:Gi,diagram:t}}};let Ji=!1;const Qi=()=>{Ji||(Ji=!0,Oi("error",Pi,(t=>"error"===t.toLowerCase().trim())),Oi("---",{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("---"))),Wt(je,oi,ri,$e,He,Ue,Ye,Ke,ei,Hi,qe,Ie,Vi,Ui,Pe,ci,ai,ui,Ge,Xi,Je))};class Ki{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=Fe();try{this.type=Ht(t,i)}catch(n){this.type="error",this.detectError=n}const r=Ii(this.type);at.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=Fe();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 tr=async(t,e={})=>{const i=Ht(t,Fe());try{Ii(i)}catch(r){const t=Rt[i].loader;if(!t)throw new Pt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Oi(e,n)}return new Ki(t,e)};let er=[];const ir=t=>{er.push(t)},rr="graphics-document document";const nr=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function or(t){return null==t}var sr={isNothing:or,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:or(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;i<e;i+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var i,r,n,o;if(e)for(i=0,r=(o=Object.keys(e)).length;i<r;i+=1)t[n=o[i]]=e[n];return t}};function ar(t,e){var i="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(i+='in "'+t.mark.name+'" '),i+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(i+="\n\n"+t.mark.snippet),r+" "+i):r}function lr(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=ar(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}lr.prototype=Object.create(Error.prototype),lr.prototype.constructor=lr,lr.prototype.toString=function(t){return this.name+": "+ar(this,t)};var cr=lr;function hr(t,e,i,r,n){var o="",s="",a=Math.floor(n/2)-1;return r-e>a&&(e=r-a+(o=" ... ").length),i-r>a&&(i=r+a-(s=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+s,pos:r-e+o.length}}function ur(t,e){return sr.repeat(" ",e-t.length)+t}var dr=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=[],s=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var a,l,c="",h=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+h+3);for(a=1;a<=e.linesBefore&&!(s-a<0);a++)l=hr(t.buffer,n[s-a],o[s-a],t.position-(n[s]-n[s-a]),u),c=sr.repeat(" ",e.indent)+ur((t.line-a+1).toString(),h)+" | "+l.str+"\n"+c;for(l=hr(t.buffer,n[s],o[s],t.position,u),c+=sr.repeat(" ",e.indent)+ur((t.line+1).toString(),h)+" | "+l.str+"\n",c+=sr.repeat("-",e.indent+h+3+l.pos)+"^\n",a=1;a<=e.linesAfter&&!(s+a>=o.length);a++)l=hr(t.buffer,n[s+a],o[s+a],t.position-(n[s]-n[s+a]),u),c+=sr.repeat(" ",e.indent)+ur((t.line+a+1).toString(),h)+" | "+l.str+"\n";return c.replace(/\n$/,"")},fr=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],pr=["scalar","sequence","mapping"];var gr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===fr.indexOf(e))throw new cr('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===pr.indexOf(this.kind))throw new cr('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function mr(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 yr(t){return this.extend(t)}yr.prototype.extend=function(t){var e=[],i=[];if(t instanceof gr)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 cr("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 gr))throw new cr("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new cr("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 cr("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 gr))throw new cr("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(yr.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=mr(r,"implicit"),r.compiledExplicit=mr(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<e;t+=1)arguments[t].forEach(r);return i}(r.compiledImplicit,r.compiledExplicit),r};var xr=new yr({explicit:[new gr("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new gr("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new gr("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var br=new gr("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var Cr=new gr("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function _r(t){return 48<=t&&t<=55}function vr(t){return 48<=t&&t<=57}var kr=new gr("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=t.length,n=0,o=!1;if(!r)return!1;if("-"!==(e=t[n])&&"+"!==e||(e=t[++n]),"0"===e){if(n+1===r)return!0;if("b"===(e=t[++n])){for(n++;n<r;n++)if("_"!==(e=t[n])){if("0"!==e&&"1"!==e)return!1;o=!0}return o&&"_"!==e}if("x"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!(48<=(i=t.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&"_"!==e}if("o"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!_r(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!vr(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===e)},construct:function(t){var e,i=t,r=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(e=i[0])&&"+"!==e||("-"===e&&(r=-1),e=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===e){if("b"===i[1])return r*parseInt(i.slice(2),2);if("x"===i[1])return r*parseInt(i.slice(2),16);if("o"===i[1])return r*parseInt(i.slice(2),8)}return r*parseInt(i,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!sr.isNegativeZero(t)},represent:{binary:function(t){return 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"]}}),Tr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var wr=/^[-+]?[0-9]+e/;var Sr=new gr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!Tr.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||sr.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(sr.isNegativeZero(t))return"-0.0";return i=t.toString(10),wr.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),Br=xr.extend({implicit:[br,Cr,kr,Sr]}),Fr=Br,Lr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Ar=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 Mr=new gr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Lr.exec(t)||null!==Ar.exec(t))},construct:function(t){var e,i,r,n,o,s,a,l,c=0,h=null;if(null===(e=Lr.exec(t))&&(e=Ar.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],s=+e[5],a=+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,s,a,c)),h&&l.setTime(l.getTime()-h),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var Er=new gr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),Nr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Zr=new gr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=Nr;for(i=0;i<n;i++)if(!((e=o.indexOf(t.charAt(i)))>64)){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=Nr,s=0,a=[];for(e=0;e<n;e++)e%4==0&&e&&(a.push(s>>16&255),a.push(s>>8&255),a.push(255&s)),s=s<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(a.push(s>>16&255),a.push(s>>8&255),a.push(255&s)):18===i?(a.push(s>>10&255),a.push(s>>2&255)):12===i&&a.push(s>>4&255),new Uint8Array(a)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,s=Nr;for(e=0;e<o;e++)e%3==0&&e&&(r+=s[n>>18&63],r+=s[n>>12&63],r+=s[n>>6&63],r+=s[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=s[n>>18&63],r+=s[n>>12&63],r+=s[n>>6&63],r+=s[63&n]):2===i?(r+=s[n>>10&63],r+=s[n>>4&63],r+=s[n<<2&63],r+=s[64]):1===i&&(r+=s[n>>2&63],r+=s[n<<4&63],r+=s[64],r+=s[64]),r}}),jr=Object.prototype.hasOwnProperty,Or=Object.prototype.toString;var Ir=new gr("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,s=[],a=t;for(e=0,i=a.length;e<i;e+=1){if(r=a[e],o=!1,"[object Object]"!==Or.call(r))return!1;for(n in r)if(jr.call(r,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==s.indexOf(n))return!1;s.push(n)}return!0},construct:function(t){return null!==t?t:[]}}),Dr=Object.prototype.toString;var qr=new gr("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,s=t;for(o=new Array(s.length),e=0,i=s.length;e<i;e+=1){if(r=s[e],"[object Object]"!==Dr.call(r))return!1;if(1!==(n=Object.keys(r)).length)return!1;o[e]=[n[0],r[n[0]]]}return!0},construct:function(t){if(null===t)return[];var e,i,r,n,o,s=t;for(o=new Array(s.length),e=0,i=s.length;e<i;e+=1)r=s[e],n=Object.keys(r),o[e]=[n[0],r[n[0]]];return o}}),$r=Object.prototype.hasOwnProperty;var zr=new gr("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if($r.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),Pr=Fr.extend({implicit:[Mr,Er],explicit:[Zr,Ir,qr,zr]}),Rr=Object.prototype.hasOwnProperty,Hr=1,Wr=2,Ur=3,Yr=4,Vr=1,Gr=2,Xr=3,Jr=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Qr=/[\x85\u2028\u2029]/,Kr=/[,\[\]\{\}]/,tn=/^(?:!|!!|![a-z\-]+!)$/i,en=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function rn(t){return Object.prototype.toString.call(t)}function nn(t){return 10===t||13===t}function on(t){return 9===t||32===t}function sn(t){return 9===t||32===t||10===t||13===t}function an(t){return 44===t||91===t||93===t||123===t||125===t}function ln(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function cn(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function hn(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var un=new Array(256),dn=new Array(256),fn=0;fn<256;fn++)un[fn]=cn(fn)?1:0,dn[fn]=cn(fn);function pn(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Pr,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 gn(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=dr(i),new cr(e,i)}function mn(t,e){throw gn(t,e)}function yn(t,e){t.onWarning&&t.onWarning.call(null,gn(t,e))}var xn={YAML:function(t,e,i){var r,n,o;null!==t.version&&mn(t,"duplication of %YAML directive"),1!==i.length&&mn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&mn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&mn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&yn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&mn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],tn.test(r)||mn(t,"ill-formed tag handle (first argument) of the TAG directive"),Rr.call(t.tagMap,r)&&mn(t,'there is a previously declared suffix for "'+r+'" tag handle'),en.test(n)||mn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){mn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function bn(t,e,i,r){var n,o,s,a;if(e<i){if(a=t.input.slice(e,i),r)for(n=0,o=a.length;n<o;n+=1)9===(s=a.charCodeAt(n))||32<=s&&s<=1114111||mn(t,"expected valid JSON character");else Jr.test(a)&&mn(t,"the stream contains non-printable characters");t.result+=a}}function Cn(t,e,i,r){var n,o,s,a;for(sr.isObject(i)||mn(t,"cannot merge mappings; the provided source object is unacceptable"),s=0,a=(n=Object.keys(i)).length;s<a;s+=1)o=n[s],Rr.call(e,o)||(e[o]=i[o],r[o]=!0)}function _n(t,e,i,r,n,o,s,a,l){var c,h;if(Array.isArray(n))for(c=0,h=(n=Array.prototype.slice.call(n)).length;c<h;c+=1)Array.isArray(n[c])&&mn(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===rn(n[c])&&(n[c]="[object Object]");if("object"==typeof n&&"[object Object]"===rn(n)&&(n="[object Object]"),n=String(n),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)Cn(t,e,o[c],i);else Cn(t,e,o,i);else t.json||Rr.call(i,n)||!Rr.call(e,n)||(t.line=s||t.line,t.lineStart=a||t.lineStart,t.position=l||t.position,mn(t,"duplicated mapping key")),"__proto__"===n?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[n]=o,delete i[n];return e}function vn(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):mn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function kn(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;on(n);)9===n&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),n=t.input.charCodeAt(++t.position);if(e&&35===n)do{n=t.input.charCodeAt(++t.position)}while(10!==n&&13!==n&&0!==n);if(!nn(n))break;for(vn(t),n=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===n;)t.lineIndent++,n=t.input.charCodeAt(++t.position)}return-1!==i&&0!==r&&t.lineIndent<i&&yn(t,"deficient indentation"),r}function Tn(t){var e,i=t.position;return!(45!==(e=t.input.charCodeAt(i))&&46!==e||e!==t.input.charCodeAt(i+1)||e!==t.input.charCodeAt(i+2)||(i+=3,0!==(e=t.input.charCodeAt(i))&&!sn(e)))}function wn(t,e){1===e?t.result+=" ":e>1&&(t.result+=sr.repeat("\n",e-1))}function Sn(t,e){var i,r,n=t.tag,o=t.anchor,s=[],a=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=s),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,mn(t,"tab characters must not be used in indentation")),45===r)&&sn(t.input.charCodeAt(t.position+1));)if(a=!0,t.position++,kn(t,!0,-1)&&t.lineIndent<=e)s.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,Ln(t,e,Ur,!1,!0),s.push(t.result),kn(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)mn(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!a&&(t.tag=n,t.anchor=o,t.kind="sequence",t.result=s,!0)}function Bn(t){var e,i,r,n,o=!1,s=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&mn(t,"duplication of a tag property"),60===(n=t.input.charCodeAt(++t.position))?(o=!0,n=t.input.charCodeAt(++t.position)):33===n?(s=!0,i="!!",n=t.input.charCodeAt(++t.position)):i="!",e=t.position,o){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&62!==n);t.position<t.length?(r=t.input.slice(e,t.position),n=t.input.charCodeAt(++t.position)):mn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!sn(n);)33===n&&(s?mn(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),tn.test(i)||mn(t,"named tag handle cannot contain such characters"),s=!0,e=t.position+1)),n=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),Kr.test(r)&&mn(t,"tag suffix cannot contain flow indicator characters")}r&&!en.test(r)&&mn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(a){mn(t,"tag name is malformed: "+r)}return o?t.tag=r:Rr.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:mn(t,'undeclared tag handle "'+i+'"'),!0}function Fn(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&mn(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!sn(i)&&!an(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&mn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Ln(t,e,i,r,n){var o,s,a,l,c,h,u,d,f,p=1,g=!1,m=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=s=a=Yr===i||Ur===i,r&&kn(t,!0,-1)&&(g=!0,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)),1===p)for(;Bn(t)||Fn(t);)kn(t,!0,-1)?(g=!0,a=o,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)):a=!1;if(a&&(a=g||n),1!==p&&Yr!==i||(d=Hr===i||Wr===i?e:e+1,f=t.position-t.lineStart,1===p?a&&(Sn(t,f)||function(t,e,i){var r,n,o,s,a,l,c,h=t.tag,u=t.anchor,d={},f=Object.create(null),p=null,g=null,m=null,y=!1,x=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,mn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!sn(r)){if(s=t.line,a=t.lineStart,l=t.position,!Ln(t,i,Wr,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);on(c);)c=t.input.charCodeAt(++t.position);if(58===c)sn(c=t.input.charCodeAt(++t.position))||mn(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(_n(t,d,f,p,g,null,s,a,l),p=g=m=null),x=!0,y=!1,n=!1,p=t.tag,g=t.result;else{if(!x)return t.tag=h,t.anchor=u,!0;mn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return t.tag=h,t.anchor=u,!0;mn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(_n(t,d,f,p,g,null,s,a,l),p=g=m=null),x=!0,y=!0,n=!0):y?(y=!1,n=!0):mn(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,c=r;if((t.line===o||t.lineIndent>e)&&(y&&(s=t.line,a=t.lineStart,l=t.position),Ln(t,e,Yr,!0,n)&&(y?g=t.result:m=t.result),y||(_n(t,d,f,p,g,m,s,a,l),p=g=m=null),kn(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)mn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&_n(t,d,f,p,g,null,s,a,l),x&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),x}(t,f,d))||function(t,e){var i,r,n,o,s,a,l,c,h,u,d,f,p=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(f=t.input.charCodeAt(t.position)))s=93,c=!1,o=[];else{if(123!==f)return!1;s=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),f=t.input.charCodeAt(++t.position);0!==f;){if(kn(t,!0,e),(f=t.input.charCodeAt(t.position))===s)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=o,!0;p?44===f&&mn(t,"expected the node content, but found ','"):mn(t,"missed comma between flow collection entries"),d=null,a=l=!1,63===f&&sn(t.input.charCodeAt(t.position+1))&&(a=l=!0,t.position++,kn(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,Ln(t,e,Hr,!1,!0),u=t.tag,h=t.result,kn(t,!0,e),f=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==f||(a=!0,f=t.input.charCodeAt(++t.position),kn(t,!0,e),Ln(t,e,Hr,!1,!0),d=t.result),c?_n(t,o,y,u,h,d,i,r,n):a?o.push(_n(t,null,y,u,h,d,i,r,n)):o.push(h),kn(t,!0,e),44===(f=t.input.charCodeAt(t.position))?(p=!0,f=t.input.charCodeAt(++t.position)):p=!1}mn(t,"unexpected end of the stream within a flow collection")}(t,d)?m=!0:(s&&function(t,e){var i,r,n,o,s,a=Vr,l=!1,c=!1,h=e,u=0,d=!1;if(124===(o=t.input.charCodeAt(t.position)))r=!1;else{if(62!==o)return!1;r=!0}for(t.kind="scalar",t.result="";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)Vr===a?a=43===o?Xr:Gr:mn(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(s=o)&&s<=57?s-48:-1)>=0))break;0===n?mn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?mn(t,"repeat of an indentation width identifier"):(h=e+n-1,c=!0)}if(on(o)){do{o=t.input.charCodeAt(++t.position)}while(on(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!nn(o)&&0!==o)}for(;0!==o;){for(vn(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),nn(o))u++;else{if(t.lineIndent<h){a===Xr?t.result+=sr.repeat("\n",l?1+u:u):a===Vr&&l&&(t.result+="\n");break}for(r?on(o)?(d=!0,t.result+=sr.repeat("\n",l?1+u:u)):d?(d=!1,t.result+=sr.repeat("\n",u+1)):0===u?l&&(t.result+=" "):t.result+=sr.repeat("\n",u):t.result+=sr.repeat("\n",l?1+u:u),l=!0,c=!0,u=0,i=t.position;!nn(o)&&0!==o;)o=t.input.charCodeAt(++t.position);bn(t,i,t.position,!1)}}return!0}(t,d)||function(t,e){var i,r,n;if(39!==(i=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(i=t.input.charCodeAt(t.position));)if(39===i){if(bn(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else nn(i)?(bn(t,r,n,!0),wn(t,kn(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Tn(t)?mn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);mn(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var i,r,n,o,s,a,l;if(34!==(a=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(a=t.input.charCodeAt(t.position));){if(34===a)return bn(t,i,t.position,!0),t.position++,!0;if(92===a){if(bn(t,i,t.position,!0),nn(a=t.input.charCodeAt(++t.position)))kn(t,!1,e);else if(a<256&&un[a])t.result+=dn[a],t.position++;else if((s=120===(l=a)?2:117===l?4:85===l?8:0)>0){for(n=s,o=0;n>0;n--)(s=ln(a=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+s:mn(t,"expected hexadecimal character");t.result+=hn(o),t.position++}else mn(t,"unknown escape sequence");i=r=t.position}else nn(a)?(bn(t,i,r,!0),wn(t,kn(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Tn(t)?mn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}mn(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&&!sn(r)&&!an(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&mn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Rr.call(t.anchorMap,i)||mn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],kn(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,s,a,l,c,h,u=t.kind,d=t.result;if(sn(h=t.input.charCodeAt(t.position))||an(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)&&(sn(r=t.input.charCodeAt(t.position+1))||i&&an(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,s=!1;0!==h;){if(58===h){if(sn(r=t.input.charCodeAt(t.position+1))||i&&an(r))break}else if(35===h){if(sn(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&Tn(t)||i&&an(h))break;if(nn(h)){if(a=t.line,l=t.lineStart,c=t.lineIndent,kn(t,!1,-1),t.lineIndent>=e){s=!0,h=t.input.charCodeAt(t.position);continue}t.position=o,t.line=a,t.lineStart=l,t.lineIndent=c;break}}s&&(bn(t,n,o,!1),wn(t,t.line-a),n=o=t.position,s=!1),on(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return bn(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Hr===i)&&(m=!0,null===t.tag&&(t.tag="?")):(m=!0,null===t.tag&&null===t.anchor||mn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(m=a&&Sn(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&&mn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l<c;l+=1)if((u=t.implicitTypes[l]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Rr.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,l=0,c=(h=t.typeMap.multi[t.kind||"fallback"]).length;l<c;l+=1)if(t.tag.slice(0,h[l].tag.length)===h[l].tag){u=h[l];break}u||mn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&mn(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)):mn(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 An(t){var e,i,r,n,o=t.position,s=!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))&&(kn(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(s=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!sn(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&mn(t,"directive name must not be less than one character in length");0!==n;){for(;on(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!nn(n));break}if(nn(n))break;for(e=t.position;0!==n&&!sn(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&vn(t),Rr.call(xn,i)?xn[i](t,i,r):yn(t,'unknown document directive "'+i+'"')}kn(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,kn(t,!0,-1)):s&&mn(t,"directives end mark is expected"),Ln(t,t.lineIndent-1,Yr,!1,!0),kn(t,!0,-1),t.checkLineBreaks&&Qr.test(t.input.slice(o,t.position))&&yn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Tn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,kn(t,!0,-1)):t.position<t.length-1&&mn(t,"end of the stream or a document separator is expected")}function Mn(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var i=new pn(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,mn(i,"null byte is not allowed in input")),i.input+="\0";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)An(i);return i.documents}var En=Br,Nn={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=Mn(t,i);if("function"!=typeof e)return r;for(var n=0,o=r.length;n<o;n+=1)e(r[n])},load:function(t,e){var i=Mn(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new cr("expected a single document in the stream, but found more")}}}.load;const Zn=t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),jn=t=>{const{text:e,metadata:i}=function(t){const e=t.match(qt);if(!e)return{text:t,metadata:{}};let i=Nn(e[1],{schema:En})??{};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}},On=t=>{const e=ye.detectInit(t)??{},i=ye.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($t,"")),directive:e};var r};function In(t){const e=Zn(t),i=jn(e),r=On(i.text),n=me(i.config,r.directive);return{code:t=nr(r.text),title:i.title,config:n}}const Dn=["foreignobject"],qn=["dominant-baseline"];function $n(t){const e=In(t);return Me(),Ae(e.config??{}),e}const zn=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,Pn=(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.Z)(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.Z)(i.styles)||n.forEach((t=>{r+=zn(i.id,t,i.styles)})),(0,ot.Z)(i.textStyles)||(r+=zn(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${gi(e,n,t.themeVariables)}}`),E)},Rn=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const s=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&s.attr("xmlns:xlink",n),s.append("g"),t};function Hn(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Wn=(t,e={})=>{const{code:i}=In(t);return tr(i,e)};const Un=Object.freeze({render:async function(t,e,i){var r,n,o,l,c,h;Qi();const u=$n(e);e=u.code;const d=Fe();at.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,s.Ys)("body");const b="sandbox"===d.securityLevel,C="loose"===d.securityLevel,_=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),b){const t=Hn((0,s.Ys)(i),p);x=(0,s.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,s.Ys)(i);Rn(x,t,m,`font-family: ${_}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,s;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(s=t.getElementById(r))||s.remove()})(document,t,m,p),b){const t=Hn((0,s.Ys)("body"),p);x=(0,s.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,s.Ys)("body");Rn(x,t,m)}let v,k;try{v=await Wn(e,{title:u.title})}catch(Z){v=new Ki("error"),k=Z}const T=x.select(y).node(),w=v.type,S=T.firstChild,B=S.firstChild,F=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),L=Pn(d,w,F,f),A=document.createElement("style");A.innerHTML=L,S.insertBefore(A,B);try{await v.renderer.draw(e,t,be,v)}catch(j){throw zi.draw(e,t,be),j}!function(t,e,i,r){(function(t,e){t.attr("role",rr),""!==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"))}(w,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(at.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=xe(r),r=r.replace(/<br>/g,"<br/>"),r})(M,b,mt(d.arrowMarkerAbsolute)),b){M=((t="",e)=>{var i,r;return`<iframe style="width:100%;height:${(null==(r=null==(i=null==e?void 0:e.viewBox)?void 0:i.baseVal)?void 0:r.height)?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`})(M,x.select(y+" svg").node())}else C||(M=a.sanitize(M,{ADD_TAGS:Dn,ADD_ATTR:qn}));if(er.forEach((t=>{t()})),er=[],k)throw k;const E=b?g:y,N=(0,s.Ys)(E).node();return N&&"remove"in N&&N.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){Qi(),t=$n(t).code;try{await Wn(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Wn,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),_e=Vt({},t),(null==t?void 0:t.theme)&&t.theme in Mt?t.themeVariables=Mt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Mt.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(ve=Vt({},Ce),ve=Vt(ve,t),t.theme&&Mt[t.theme]&&(ve.themeVariables=Mt[t.theme].getThemeVariables(t.themeVariables)),we(ve,ke),ve))(t):Se();lt(i.logLevel),Qi()},getConfig:Fe,setConfig:Be,getSiteConfig:Se,updateSiteConfig:t=>(ve=Vt(ve,t),we(ve,ke),ve),reset:()=>{Me()},globalReset:()=>{Me(Ce)},defaultConfig:Ce});lt(Fe().logLevel),Me(Fe());const Yn=(t,e,i)=>{at.warn(t),pe(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}))},Vn=async function(t={querySelector:".mermaid"}){try{await Gn(t)}catch(e){if(pe(e)&&at.error(e.str),io.parseError&&io.parseError(e),!t.suppressErrors)throw at.error("Use the suppressErrors option to suppress these errors"),e}},Gn=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Un.getConfig();let o;if(at.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)}at.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(at.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Un.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const s=new ye.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let a;const l=[];for(const h of Array.from(o)){if(at.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const e=`mermaid-${s.next()}`;a=h.innerHTML,a=(0,r.Z)(ye.entityDecode(a)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=ye.detectInit(a);i&&at.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await eo(e,a,h);h.innerHTML=i,t&&await t(e),r&&r(h)}catch(c){Yn(c,l,io.parseError)}}if(l.length>0)throw l[0]},Xn=function(t){Un.initialize(t)},Jn=function(){if(io.startOnLoad){const{startOnLoad:t}=Un.getConfig();t&&io.run().catch((t=>at.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",Jn,!1);const Qn=[];let Kn=!1;const to=async()=>{if(!Kn){for(Kn=!0;Qn.length>0;){const e=Qn.shift();if(e)try{await e()}catch(t){at.error("Error executing queue",t)}}Kn=!1}},eo=(t,e,i)=>new Promise(((r,n)=>{Qn.push((()=>new Promise(((o,s)=>{Un.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;at.error("Error parsing",t),null==(e=io.parseError)||e.call(io,t),s(t),n(t)}))})))),to().catch(n)})),io={startOnLoad:!0,mermaidAPI:Un,parse:async(t,e)=>new Promise(((i,r)=>{Qn.push((()=>new Promise(((n,o)=>{Un.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;at.error("Error parsing",t),null==(e=io.parseError)||e.call(io,t),o(t),r(t)}))})))),to().catch(r)})),render:eo,init:async function(t,e,i){at.warn("mermaid.init is deprecated. Please use run instead."),t&&Xn(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await Vn(r)},run:Vn,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Wt(...t),!1===e&&await(async()=>{at.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Rt).map((async([t,{detector:e,loader:i}])=>{if(i)try{Ii(t)}catch(r){try{const{diagram:t,id:r}=await i();Oi(r,t,e)}catch(n){throw at.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Rt[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){at.error(`Failed to load ${t.length} external diagrams`);for(const e of t)at.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:Xn,parseError:void 0,contentLoaded:Jn,setParseErrorHandler:function(t){io.parseError=t},detectType:Ht}}}]); \ No newline at end of file diff --git a/assets/js/17896441.957336a6.js.LICENSE.txt b/assets/js/17896441.7cdefb8f.js.LICENSE.txt similarity index 66% rename from assets/js/17896441.957336a6.js.LICENSE.txt rename to assets/js/17896441.7cdefb8f.js.LICENSE.txt index f253ee25a..d94f8a561 100644 --- a/assets/js/17896441.957336a6.js.LICENSE.txt +++ b/assets/js/17896441.7cdefb8f.js.LICENSE.txt @@ -2,7 +2,7 @@ * Wait for document loaded before starting the execution */ -/*! @license DOMPurify 2.4.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.3/LICENSE */ +/*! @license DOMPurify 3.0.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.8/LICENSE */ /*! Check if previously processed */ diff --git a/assets/js/17896441.957336a6.js b/assets/js/17896441.957336a6.js deleted file mode 100644 index 301538936..000000000 --- a/assets/js/17896441.957336a6.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 17896441.957336a6.js.LICENSE.txt */ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7918],{7967:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,i=/&(newline|tab);/gi,a=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,s=/^.+(:|:)/gim,o=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var c,l=(c=t,c.replace(a,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(i,"").replace(a,"").trim();if(!l)return e.Rq;if(function(t){return o.indexOf(t[0])>-1}(l))return l;var h=l.match(s);if(!h)return l;var u=h[0];return n.test(u)?e.Rq:l}},4137:(t,e,n)=>{"use strict";n.d(e,{Zo:()=>h,kt:()=>f});var r=n(7294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function o(t,e){if(null==t)return{};var n,r,i=function(t,e){if(null==t)return{};var n,r,i={},a=Object.keys(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r<a.length;r++)n=a[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var c=r.createContext({}),l=function(t){var e=r.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):s(s({},e),t)),n},h=function(t){var e=l(t.components);return r.createElement(c.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},p=r.forwardRef((function(t,e){var n=t.components,i=t.mdxType,a=t.originalType,c=t.parentName,h=o(t,["components","mdxType","originalType","parentName"]),u=l(n),p=i,f=u["".concat(c,".").concat(p)]||u[p]||d[p]||a;return n?r.createElement(f,s(s({ref:e},h),{},{components:n})):r.createElement(f,s({ref:e},h))}));function f(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var a=n.length,s=new Array(a);s[0]=p;var o={};for(var c in e)hasOwnProperty.call(e,c)&&(o[c]=e[c]);o.originalType=t,o[u]="string"==typeof t?t:i,s[1]=o;for(var l=2;l<a;l++)s[l]=n[l];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},3899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>b});var r=n(7462),i=n(7294),a=n(6010),s=n(3702),o=n(8259),c=n(9003),l=n(3699),h=n(7325),u=n(9524);function d(t){return i.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},t),i.createElement("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 p={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function f(){const t=(0,u.Z)("/");return i.createElement("li",{className:"breadcrumbs__item"},i.createElement(l.Z,{"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:t},i.createElement(d,{className:p.breadcrumbHomeIcon})))}const g={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function y(t){let{children:e,href:n,isLast:r}=t;const a="breadcrumbs__link";return r?i.createElement("span",{className:a,itemProp:"name"},e):n?i.createElement(l.Z,{className:a,href:n,itemProp:"item"},i.createElement("span",{itemProp:"name"},e)):i.createElement("span",{className:a},e)}function m(t){let{children:e,active:n,index:s,addMicrodata:o}=t;return i.createElement("li",(0,r.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,a.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),e,i.createElement("meta",{itemProp:"position",content:String(s+1)}))}function b(){const t=(0,o.s1)(),e=(0,c.Ns)();return t?i.createElement("nav",{className:(0,a.Z)(s.k.docs.docBreadcrumbs,g.breadcrumbsContainer),"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},i.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},e&&i.createElement(f,null),t.map(((e,n)=>{const r=n===t.length-1;return i.createElement(m,{key:n,active:r,index:n,addMicrodata:!!e.href},i.createElement(y,{href:e.href,isLast:r},e.label))})))):null}},1770:(t,e,n)=>{"use strict";n.r(e),n.d(e,{default:()=>me});var r=n(7294),i=n(9488),a=n(3768);const s=r.createContext(null);function o(t){let{children:e,content:n}=t;const i=function(t){return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,contentTitle:t.contentTitle,toc:t.toc})),[t])}(n);return r.createElement(s.Provider,{value:i},e)}function c(){const t=(0,r.useContext)(s);if(null===t)throw new a.i6("DocProvider");return t}function l(){const{metadata:t,frontMatter:e,assets:n}=c();return r.createElement(i.d,{title:t.title,description:t.description,keywords:e.keywords,image:n.image??e.image})}var h=n(6010),u=n(3488),d=n(9473);function p(){const{metadata:t}=c();return r.createElement(d.Z,{previous:t.previous,next:t.next})}var f=n(5350),g=n(4617),y=n(3702),m=n(7325);function b(t){let{lastUpdatedAt:e,formattedLastUpdatedAt:n}=t;return r.createElement(m.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:r.createElement("b",null,r.createElement("time",{dateTime:new Date(1e3*e).toISOString()},n))}}," on {date}")}function _(t){let{lastUpdatedBy:e}=t;return r.createElement(m.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:r.createElement("b",null,e)}}," by {user}")}function x(t){let{lastUpdatedAt:e,formattedLastUpdatedAt:n,lastUpdatedBy:i}=t;return r.createElement("span",{className:y.k.common.lastUpdated},r.createElement(m.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e&&n?r.createElement(b,{lastUpdatedAt:e,formattedLastUpdatedAt:n}):"",byUser:i?r.createElement(_,{lastUpdatedBy:i}):""}},"Last updated{atDate}{byUser}"),!1)}var v=n(7462);const k={iconEdit:"iconEdit_Z9Sw"};function w(t){let{className:e,...n}=t;return r.createElement("svg",(0,v.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,h.Z)(k.iconEdit,e),"aria-hidden":"true"},n),r.createElement("g",null,r.createElement("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 C(t){let{editUrl:e}=t;return r.createElement("a",{href:e,target:"_blank",rel:"noreferrer noopener",className:y.k.common.editThisPage},r.createElement(w,null),r.createElement(m.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}var E=n(3852);const T={tags:"tags_jXut",tag:"tag_QGVx"};function S(t){let{tags:e}=t;return r.createElement(r.Fragment,null,r.createElement("b",null,r.createElement(m.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),r.createElement("ul",{className:(0,h.Z)(T.tags,"padding--none","margin-left--sm")},e.map((t=>{let{label:e,permalink:n}=t;return r.createElement("li",{key:n,className:T.tag},r.createElement(E.Z,{label:e,permalink:n}))}))))}const A={lastUpdated:"lastUpdated_vwxv"};function L(t){return r.createElement("div",{className:(0,h.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm")},r.createElement("div",{className:"col"},r.createElement(S,t)))}function B(t){let{editUrl:e,lastUpdatedAt:n,lastUpdatedBy:i,formattedLastUpdatedAt:a}=t;return r.createElement("div",{className:(0,h.Z)(y.k.docs.docFooterEditMetaRow,"row")},r.createElement("div",{className:"col"},e&&r.createElement(C,{editUrl:e})),r.createElement("div",{className:(0,h.Z)("col",A.lastUpdated)},(n||i)&&r.createElement(x,{lastUpdatedAt:n,formattedLastUpdatedAt:a,lastUpdatedBy:i})))}function N(){const{metadata:t}=c(),{editUrl:e,lastUpdatedAt:n,formattedLastUpdatedAt:i,lastUpdatedBy:a,tags:s}=t,o=s.length>0,l=!!(e||n||a);return o||l?r.createElement("footer",{className:(0,h.Z)(y.k.docs.docFooter,"docusaurus-mt-lg")},o&&r.createElement(L,{tags:s}),l&&r.createElement(B,{editUrl:e,lastUpdatedAt:n,lastUpdatedBy:a,formattedLastUpdatedAt:i})):null}var D=n(4639),O=n(107);function M(t){const e=t.map((t=>({...t,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);e.forEach(((t,e)=>{const r=n.slice(2,t.level);t.parentIndex=Math.max(...r),n[t.level]=e}));const r=[];return e.forEach((t=>{const{parentIndex:n,...i}=t;n>=0?e[n].children.push(i):r.push(i)})),r}function I(t){let{toc:e,minHeadingLevel:n,maxHeadingLevel:r}=t;return e.flatMap((t=>{const e=I({toc:t.children,minHeadingLevel:n,maxHeadingLevel:r});return function(t){return t.level>=n&&t.level<=r}(t)?[{...t,children:e}]:e}))}function F(t){const e=t.getBoundingClientRect();return e.top===e.bottom?F(t.parentNode):e}function $(t,e){let{anchorTopOffset:n}=e;const r=t.find((t=>F(t).top>=n));if(r){return function(t){return t.top>0&&t.bottom<window.innerHeight/2}(F(r))?r:t[t.indexOf(r)-1]??null}return t[t.length-1]??null}function R(){const t=(0,r.useRef)(0),{navbar:{hideOnScroll:e}}=(0,O.L)();return(0,r.useEffect)((()=>{t.current=e?0:document.querySelector(".navbar").clientHeight}),[e]),t}function Z(t){const e=(0,r.useRef)(void 0),n=R();(0,r.useEffect)((()=>{if(!t)return()=>{};const{linkClassName:r,linkActiveClassName:i,minHeadingLevel:a,maxHeadingLevel:s}=t;function o(){const t=function(t){return Array.from(document.getElementsByClassName(t))}(r),o=function(t){let{minHeadingLevel:e,maxHeadingLevel:n}=t;const r=[];for(let i=e;i<=n;i+=1)r.push(`h${i}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:a,maxHeadingLevel:s}),c=$(o,{anchorTopOffset:n.current}),l=t.find((t=>c&&c.id===function(t){return decodeURIComponent(t.href.substring(t.href.indexOf("#")+1))}(t)));t.forEach((t=>{!function(t,n){n?(e.current&&e.current!==t&&e.current.classList.remove(i),t.classList.add(i),e.current=t):t.classList.remove(i)}(t,t===l)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[t,n])}function P(t){let{toc:e,className:n,linkClassName:i,isChild:a}=t;return e.length?r.createElement("ul",{className:a?void 0:n},e.map((t=>r.createElement("li",{key:t.id},r.createElement("a",{href:`#${t.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:t.value}}),r.createElement(P,{isChild:!0,toc:t.children,className:n,linkClassName:i}))))):null}const j=r.memo(P);function Y(t){let{toc:e,className:n="table-of-contents table-of-contents__left-border",linkClassName:i="table-of-contents__link",linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:o,...c}=t;const l=(0,O.L)(),h=s??l.tableOfContents.minHeadingLevel,u=o??l.tableOfContents.maxHeadingLevel,d=function(t){let{toc:e,minHeadingLevel:n,maxHeadingLevel:i}=t;return(0,r.useMemo)((()=>I({toc:M(e),minHeadingLevel:n,maxHeadingLevel:i})),[e,n,i])}({toc:e,minHeadingLevel:h,maxHeadingLevel:u});return Z((0,r.useMemo)((()=>{if(i&&a)return{linkClassName:i,linkActiveClassName:a,minHeadingLevel:h,maxHeadingLevel:u}}),[i,a,h,u])),r.createElement(j,(0,v.Z)({toc:d,className:n,linkClassName:i},c))}const z={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function U(t){let{collapsed:e,...n}=t;return r.createElement("button",(0,v.Z)({type:"button"},n,{className:(0,h.Z)("clean-btn",z.tocCollapsibleButton,!e&&z.tocCollapsibleButtonExpanded,n.className)}),r.createElement(m.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const W={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function H(t){let{toc:e,className:n,minHeadingLevel:i,maxHeadingLevel:a}=t;const{collapsed:s,toggleCollapsed:o}=(0,D.u)({initialState:!0});return r.createElement("div",{className:(0,h.Z)(W.tocCollapsible,!s&&W.tocCollapsibleExpanded,n)},r.createElement(U,{collapsed:s,onClick:o}),r.createElement(D.z,{lazy:!0,className:W.tocCollapsibleContent,collapsed:s},r.createElement(Y,{toc:e,minHeadingLevel:i,maxHeadingLevel:a})))}const q={tocMobile:"tocMobile_ITEo"};function V(){const{toc:t,frontMatter:e}=c();return r.createElement(H,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,h.Z)(y.k.docs.docTocMobile,q.tocMobile)})}const G={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},X="table-of-contents__link toc-highlight",Q="table-of-contents__link--active";function K(t){let{className:e,...n}=t;return r.createElement("div",{className:(0,h.Z)(G.tableOfContents,"thin-scrollbar",e)},r.createElement(Y,(0,v.Z)({},n,{linkClassName:X,linkActiveClassName:Q})))}function J(){const{toc:t,frontMatter:e}=c();return r.createElement(K,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:y.k.docs.docTocDesktop})}var tt=n(8207),et=n(4137),nt=n(1514);var rt=n(1048),it=n(9200);function at(){const{prism:t}=(0,O.L)(),{colorMode:e}=(0,it.I)(),n=t.theme,r=t.darkTheme||n;return"dark"===e?r:n}var st=n(7594),ot=n.n(st);const ct=/title=(?<quote>["'])(?<title>.*?)\1/,lt=/\{(?<range>[\d,-]+)\}/,ht={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function ut(t,e){const n=t.map((t=>{const{start:n,end:r}=ht[t];return`(?:${n}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function dt(t,e){let n=t.replace(/\n$/,"");const{language:r,magicComments:i,metastring:a}=e;if(a&<.test(a)){const t=a.match(lt).groups.range;if(0===i.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=i[0].className,r=ot()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const s=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return ut(["js","jsBlock"],e);case"jsx":case"tsx":return ut(["js","jsBlock","jsx"],e);case"html":return ut(["js","jsBlock","html"],e);case"python":case"py":case"bash":return ut(["bash"],e);case"markdown":case"md":return ut(["html","jsx","bash"],e);default:return ut(Object.keys(ht),e)}}(r,i),o=n.split("\n"),c=Object.fromEntries(i.map((t=>[t.className,{start:0,range:""}]))),l=Object.fromEntries(i.filter((t=>t.line)).map((t=>{let{className:e,line:n}=t;return[n,e]}))),h=Object.fromEntries(i.filter((t=>t.block)).map((t=>{let{className:e,block:n}=t;return[n.start,e]}))),u=Object.fromEntries(i.filter((t=>t.block)).map((t=>{let{className:e,block:n}=t;return[n.end,e]})));for(let p=0;p<o.length;){const t=o[p].match(s);if(!t){p+=1;continue}const e=t.slice(1).find((t=>void 0!==t));l[e]?c[l[e]].range+=`${p},`:h[e]?c[h[e]].start=p:u[e]&&(c[u[e]].range+=`${c[u[e]].start}-${p-1},`),o.splice(p,1)}n=o.join("\n");const d={};return Object.entries(c).forEach((t=>{let[e,{range:n}]=t;ot()(n).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:n}}const pt={codeBlockContainer:"codeBlockContainer_Ckt0"};function ft(t){let{as:e,...n}=t;const i=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(t.plain).forEach((t=>{let[r,i]=t;const a=e[r];a&&"string"==typeof i&&(n[a]=i)})),n}(at());return r.createElement(e,(0,v.Z)({},n,{style:i,className:(0,h.Z)(n.className,pt.codeBlockContainer,y.k.common.codeBlock)}))}const gt={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function yt(t){let{children:e,className:n}=t;return r.createElement(ft,{as:"pre",tabIndex:0,className:(0,h.Z)(gt.codeBlockStandalone,"thin-scrollbar",n)},r.createElement("code",{className:gt.codeBlockLines},e))}const mt={attributes:!0,characterData:!0,childList:!0,subtree:!0};function bt(t,e){const[n,i]=(0,r.useState)(),s=(0,r.useCallback)((()=>{i(t.current?.closest("[role=tabpanel][hidden]"))}),[t,i]);(0,r.useEffect)((()=>{s()}),[s]),function(t,e,n){void 0===n&&(n=mt);const i=(0,a.zX)(e),s=(0,a.Ql)(n);(0,r.useEffect)((()=>{const e=new MutationObserver(i);return t&&e.observe(t,s),()=>e.disconnect()}),[t,i,s])}(n,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),s())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const _t={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var xt={Prism:n(7410).Z,theme:_t};function vt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function kt(){return kt=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},kt.apply(this,arguments)}var wt=/\r\n|\r|\n/,Ct=function(t){0===t.length?t.push({types:["plain"],content:"\n",empty:!0}):1===t.length&&""===t[0].content&&(t[0].content="\n",t[0].empty=!0)},Et=function(t,e){var n=t.length;return n>0&&t[n-1]===e?t:t.concat(e)};function Tt(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&-1===e.indexOf(r)&&(n[r]=t[r]);return n}var St=function(t){function e(){for(var e=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];t.apply(this,n),vt(this,"getThemeDict",(function(t){if(void 0!==e.themeDict&&t.theme===e.prevTheme&&t.language===e.prevLanguage)return e.themeDict;e.prevTheme=t.theme,e.prevLanguage=t.language;var n=t.theme?function(t,e){var n=t.plain,r=Object.create(null),i=t.styles.reduce((function(t,n){var r=n.languages,i=n.style;return r&&!r.includes(e)||n.types.forEach((function(e){var n=kt({},t[e],i);t[e]=n})),t}),r);return i.root=n,i.plain=kt({},n,{backgroundColor:null}),i}(t.theme,t.language):void 0;return e.themeDict=n})),vt(this,"getLineProps",(function(t){var n=t.key,r=t.className,i=t.style,a=kt({},Tt(t,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),s=e.getThemeDict(e.props);return void 0!==s&&(a.style=s.plain),void 0!==i&&(a.style=void 0!==a.style?kt({},a.style,i):i),void 0!==n&&(a.key=n),r&&(a.className+=" "+r),a})),vt(this,"getStyleForToken",(function(t){var n=t.types,r=t.empty,i=n.length,a=e.getThemeDict(e.props);if(void 0!==a){if(1===i&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===i&&!r)return a[n[0]];var s=r?{display:"inline-block"}:{},o=n.map((function(t){return a[t]}));return Object.assign.apply(Object,[s].concat(o))}})),vt(this,"getTokenProps",(function(t){var n=t.key,r=t.className,i=t.style,a=t.token,s=kt({},Tt(t,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:e.getStyleForToken(a),key:void 0});return void 0!==i&&(s.style=void 0!==s.style?kt({},s.style,i):i),void 0!==n&&(s.key=n),r&&(s.className+=" "+r),s})),vt(this,"tokenize",(function(t,e,n,r){var i={code:e,grammar:n,language:r,tokens:[]};t.hooks.run("before-tokenize",i);var a=i.tokens=t.tokenize(i.code,i.grammar,i.language);return t.hooks.run("after-tokenize",i),a}))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.render=function(){var t=this.props,e=t.Prism,n=t.language,r=t.code,i=t.children,a=this.getThemeDict(this.props),s=e.languages[n];return i({tokens:function(t){for(var e=[[]],n=[t],r=[0],i=[t.length],a=0,s=0,o=[],c=[o];s>-1;){for(;(a=r[s]++)<i[s];){var l=void 0,h=e[s],u=n[s][a];if("string"==typeof u?(h=s>0?h:["plain"],l=u):(h=Et(h,u.type),u.alias&&(h=Et(h,u.alias)),l=u.content),"string"==typeof l){var d=l.split(wt),p=d.length;o.push({types:h,content:d[0]});for(var f=1;f<p;f++)Ct(o),c.push(o=[]),o.push({types:h,content:d[f]})}else s++,e.push(h),n.push(l),r.push(0),i.push(l.length)}s--,e.pop(),n.pop(),r.pop(),i.pop()}return Ct(o),c}(void 0!==s?this.tokenize(e,r,s,n):[r]),className:"prism-code language-"+n,style:void 0!==a?a.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},e}(r.Component);const At=St,Lt={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function Bt(t){let{line:e,classNames:n,showLineNumbers:i,getLineProps:a,getTokenProps:s}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const o=a({line:e,className:(0,h.Z)(n,i&&Lt.codeLine)}),c=e.map(((t,e)=>r.createElement("span",(0,v.Z)({key:e},s({token:t,key:e})))));return r.createElement("span",o,i?r.createElement(r.Fragment,null,r.createElement("span",{className:Lt.codeLineNumber}),r.createElement("span",{className:Lt.codeLineContent},c)):c,r.createElement("br",null))}function Nt(t){return r.createElement("svg",(0,v.Z)({viewBox:"0 0 24 24"},t),r.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function Dt(t){return r.createElement("svg",(0,v.Z)({viewBox:"0 0 24 24"},t),r.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const Ot={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Mt(t){let{code:e,className:n}=t;const[i,a]=(0,r.useState)(!1),s=(0,r.useRef)(void 0),o=(0,r.useCallback)((()=>{!function(t,e){let{target:n=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),i=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const a=document.getSelection(),s=a.rangeCount>0&&a.getRangeAt(0);n.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let o=!1;try{o=document.execCommand("copy")}catch{}r.remove(),s&&(a.removeAllRanges(),a.addRange(s)),i&&i.focus()}(e),a(!0),s.current=window.setTimeout((()=>{a(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),r.createElement("button",{type:"button","aria-label":i?(0,m.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,m.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,m.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,h.Z)("clean-btn",n,Ot.copyButton,i&&Ot.copyButtonCopied),onClick:o},r.createElement("span",{className:Ot.copyButtonIcons,"aria-hidden":"true"},r.createElement(Nt,{className:Ot.copyButtonIcon}),r.createElement(Dt,{className:Ot.copyButtonSuccessIcon})))}function It(t){return r.createElement("svg",(0,v.Z)({viewBox:"0 0 24 24"},t),r.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const Ft={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function $t(t){let{className:e,onClick:n,isEnabled:i}=t;const a=(0,m.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return r.createElement("button",{type:"button",onClick:n,className:(0,h.Z)("clean-btn",e,i&&Ft.wordWrapButtonEnabled),"aria-label":a,title:a},r.createElement(It,{className:Ft.wordWrapButtonIcon,"aria-hidden":"true"}))}function Rt(t){let{children:e,className:n="",metastring:i,title:a,showLineNumbers:s,language:o}=t;const{prism:{defaultLanguage:c,magicComments:l}}=(0,O.L)(),u=o??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(n)??c,d=at(),p=function(){const[t,e]=(0,r.useState)(!1),[n,i]=(0,r.useState)(!1),a=(0,r.useRef)(null),s=(0,r.useCallback)((()=>{const n=a.current.querySelector("code");t?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),e((t=>!t))}),[a,t]),o=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=a.current,n=t>e||a.current.querySelector("code").hasAttribute("style");i(n)}),[a]);return bt(a,o),(0,r.useEffect)((()=>{o()}),[t,o]),(0,r.useEffect)((()=>(window.addEventListener("resize",o,{passive:!0}),()=>{window.removeEventListener("resize",o)})),[o]),{codeBlockRef:a,isEnabled:t,isCodeScrollable:n,toggle:s}}(),f=function(t){return t?.match(ct)?.groups.title??""}(i)||a,{lineClassNames:g,code:y}=dt(e,{metastring:i,language:u,magicComments:l}),m=s??function(t){return Boolean(t?.includes("showLineNumbers"))}(i);return r.createElement(ft,{as:"div",className:(0,h.Z)(n,u&&!n.includes(`language-${u}`)&&`language-${u}`)},f&&r.createElement("div",{className:gt.codeBlockTitle},f),r.createElement("div",{className:gt.codeBlockContent},r.createElement(At,(0,v.Z)({},xt,{theme:d,code:y,language:u??"text"}),(t=>{let{className:e,tokens:n,getLineProps:i,getTokenProps:a}=t;return r.createElement("pre",{tabIndex:0,ref:p.codeBlockRef,className:(0,h.Z)(e,gt.codeBlock,"thin-scrollbar")},r.createElement("code",{className:(0,h.Z)(gt.codeBlockLines,m&>.codeBlockLinesWithNumbering)},n.map(((t,e)=>r.createElement(Bt,{key:e,line:t,getLineProps:i,getTokenProps:a,classNames:g[e],showLineNumbers:m})))))})),r.createElement("div",{className:gt.buttonGroup},(p.isEnabled||p.isCodeScrollable)&&r.createElement($t,{className:gt.codeButton,onClick:()=>p.toggle(),isEnabled:p.isEnabled}),r.createElement(Mt,{className:gt.codeButton,code:y}))))}function Zt(t){let{children:e,...n}=t;const i=(0,rt.Z)(),a=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),s="string"==typeof a?Rt:yt;return r.createElement(s,(0,v.Z)({key:String(i)},n),a)}var Pt=n(3699);const jt={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function Yt(t){return!!t&&("SUMMARY"===t.tagName||Yt(t.parentElement))}function zt(t,e){return!!t&&(t===e||zt(t.parentElement,e))}function Ut(t){let{summary:e,children:n,...i}=t;const a=(0,rt.Z)(),s=(0,r.useRef)(null),{collapsed:o,setCollapsed:c}=(0,D.u)({initialState:!i.open}),[l,u]=(0,r.useState)(i.open),d=r.isValidElement(e)?e:r.createElement("summary",null,e??"Details");return r.createElement("details",(0,v.Z)({},i,{ref:s,open:l,"data-collapsed":o,className:(0,h.Z)(jt.details,a&&jt.isBrowser,i.className),onMouseDown:t=>{Yt(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;Yt(e)&&zt(e,s.current)&&(t.preventDefault(),o?(c(!1),u(!0)):c(!0))}}),d,r.createElement(D.z,{lazy:!1,collapsed:o,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{c(t),u(!t)}},r.createElement("div",{className:jt.collapsibleContent},n)))}const Wt={details:"details_b_Ee"},Ht="alert alert--info";function qt(t){let{...e}=t;return r.createElement(Ut,(0,v.Z)({},e,{className:(0,h.Z)(Ht,Wt.details,e.className)}))}function Vt(t){return r.createElement(tt.Z,t)}const Gt={containsTaskList:"containsTaskList_mC6p"};function Xt(t){if(void 0!==t)return(0,h.Z)(t,t?.includes("contains-task-list")&&Gt.containsTaskList)}const Qt={img:"img_ev3q"};const Kt="admonition_LlT9",Jt="admonitionHeading_tbUL",te="admonitionIcon_kALy",ee="admonitionContent_S0QG";const ne={note:{infimaClassName:"secondary",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("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"}))},label:r.createElement(m.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("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"}))},label:r.createElement(m.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 12 16"},r.createElement("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"}))},label:r.createElement(m.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 14 16"},r.createElement("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"}))},label:r.createElement(m.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return r.createElement("svg",{viewBox:"0 0 16 16"},r.createElement("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"}))},label:r.createElement(m.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},re={secondary:"note",important:"info",success:"tip",warning:"danger"};function ie(t){const{mdxAdmonitionTitle:e,rest:n}=function(t){const e=r.Children.toArray(t),n=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.props?.mdxType)),i=r.createElement(r.Fragment,null,e.filter((t=>t!==n)));return{mdxAdmonitionTitle:n,rest:i}}(t.children);return{...t,title:t.title??e,children:n}}function ae(t){let{children:e,fallback:n}=t;return(0,rt.Z)()?r.createElement(r.Fragment,null,e?.()):n??null}var se=n(6432);const oe="docusaurus-mermaid-container";function ce(){const{colorMode:t}=(0,it.I)(),e=(0,O.L)().mermaid,n=e.theme[t],{options:i}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...i,theme:n})),[n,i])}const le={container:"container_lyt7"};function he(t){let{value:e}=t;const n=function(t,e){const n=ce(),i=e??n;return(0,r.useMemo)((()=>{se.o.mermaidAPI.initialize(i);const e=`mermaid-svg-${Math.round(1e7*Math.random())}`;return se.o.render(e,t)}),[t,i])}(e);return r.createElement("div",{className:`${oe} ${le.container}`,dangerouslySetInnerHTML:{__html:n}})}const ue={head:function(t){const e=r.Children.map(t.children,(t=>r.isValidElement(t)?function(t){if(t.props?.mdxType&&t.props.originalType){const{mdxType:e,originalType:n,...i}=t.props;return r.createElement(t.props.originalType,i)}return t}(t):t));return r.createElement(nt.Z,t,e)},code:function(t){const e=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")||(0,r.isValidElement)(t)&&e.includes(t.props?.mdxType)))?r.createElement("code",t):r.createElement(Zt,t)},a:function(t){return r.createElement(Pt.Z,t)},pre:function(t){return r.createElement(Zt,(0,r.isValidElement)(t.children)&&"code"===t.children.props?.originalType?t.children.props:{...t})},details:function(t){const e=r.Children.toArray(t.children),n=e.find((t=>r.isValidElement(t)&&"summary"===t.props?.mdxType)),i=r.createElement(r.Fragment,null,e.filter((t=>t!==n)));return r.createElement(qt,(0,v.Z)({},t,{summary:n}),i)},ul:function(t){return r.createElement("ul",(0,v.Z)({},t,{className:Xt(t.className)}))},img:function(t){return r.createElement("img",(0,v.Z)({loading:"lazy"},t,{className:(e=t.className,(0,h.Z)(e,Qt.img))}));var e},h1:t=>r.createElement(Vt,(0,v.Z)({as:"h1"},t)),h2:t=>r.createElement(Vt,(0,v.Z)({as:"h2"},t)),h3:t=>r.createElement(Vt,(0,v.Z)({as:"h3"},t)),h4:t=>r.createElement(Vt,(0,v.Z)({as:"h4"},t)),h5:t=>r.createElement(Vt,(0,v.Z)({as:"h5"},t)),h6:t=>r.createElement(Vt,(0,v.Z)({as:"h6"},t)),admonition:function(t){const{children:e,type:n,title:i,icon:a}=ie(t),s=function(t){const e=re[t]??t,n=ne[e];return n||(console.warn(`No admonition config found for admonition type "${e}". Using Info as fallback.`),ne.info)}(n),o=i??s.label,{iconComponent:c}=s,l=a??r.createElement(c,null);return r.createElement("div",{className:(0,h.Z)(y.k.common.admonition,y.k.common.admonitionType(t.type),"alert",`alert--${s.infimaClassName}`,Kt)},r.createElement("div",{className:Jt},r.createElement("span",{className:te},l),o),r.createElement("div",{className:ee},e))},mermaid:function(t){return r.createElement(ae,null,(()=>r.createElement(he,t)))}};function de(t){let{children:e}=t;return r.createElement(et.Zo,{components:ue},e)}function pe(t){let{children:e}=t;const n=function(){const{metadata:t,frontMatter:e,contentTitle:n}=c();return e.hide_title||void 0!==n?null:t.title}();return r.createElement("div",{className:(0,h.Z)(y.k.docs.docMarkdown,"markdown")},n&&r.createElement("header",null,r.createElement(tt.Z,{as:"h1"},n)),r.createElement(de,null,e))}var fe=n(3899);const ge={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ye(t){let{children:e}=t;const n=function(){const{frontMatter:t,toc:e}=c(),n=(0,u.i)(),i=t.hide_table_of_contents,a=!i&&e.length>0;return{hidden:i,mobile:a?r.createElement(V,null):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:r.createElement(J,null)}}();return r.createElement("div",{className:"row"},r.createElement("div",{className:(0,h.Z)("col",!n.hidden&&ge.docItemCol)},r.createElement(f.Z,null),r.createElement("div",{className:ge.docItemContainer},r.createElement("article",null,r.createElement(fe.Z,null),r.createElement(g.Z,null),n.mobile,r.createElement(pe,null,e),r.createElement(N,null)),r.createElement(p,null))),n.desktop&&r.createElement("div",{className:"col col--3"},n.desktop))}function me(t){const e=`docs-doc-id-${t.content.metadata.unversionedId}`,n=t.content;return r.createElement(o,{content:t.content},r.createElement(i.FG,{className:e},r.createElement(l,null),r.createElement(ye,null,r.createElement(n,null))))}},9473:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(7462),i=n(7294),a=n(7325),s=n(6010),o=n(3699);function c(t){const{permalink:e,title:n,subLabel:r,isNext:a}=t;return i.createElement(o.Z,{className:(0,s.Z)("pagination-nav__link",a?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e},r&&i.createElement("div",{className:"pagination-nav__sublabel"},r),i.createElement("div",{className:"pagination-nav__label"},n))}function l(t){const{previous:e,next:n}=t;return i.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,a.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},e&&i.createElement(c,(0,r.Z)({},e,{subLabel:i.createElement(a.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&i.createElement(c,(0,r.Z)({},n,{subLabel:i.createElement(a.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}},4617:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7294),i=n(6010),a=n(7325),s=n(3702),o=n(8801);function c(t){let{className:e}=t;const n=(0,o.E)();return n.badge?r.createElement("span",{className:(0,i.Z)(e,s.k.docs.docVersionBadge,"badge badge--secondary")},r.createElement(a.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}},5350:(t,e,n)=>{"use strict";n.d(e,{Z:()=>y});var r=n(7294),i=n(6010),a=n(9962),s=n(3699),o=n(7325),c=n(9871),l=n(3702),h=n(6409),u=n(8801);const d={unreleased:function(t){let{siteTitle:e,versionMetadata:n}=t;return r.createElement(o.Z,{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:r.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(t){let{siteTitle:e,versionMetadata:n}=t;return r.createElement(o.Z,{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:r.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function p(t){const e=d[t.versionMetadata.banner];return r.createElement(e,t)}function f(t){let{versionLabel:e,to:n,onClick:i}=t;return r.createElement(o.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:r.createElement("b",null,r.createElement(s.Z,{to:n,onClick:i},r.createElement(o.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function g(t){let{className:e,versionMetadata:n}=t;const{siteConfig:{title:s}}=(0,a.Z)(),{pluginId:o}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:u}=(0,h.J)(o),{latestDocSuggestion:d,latestVersionSuggestion:g}=(0,c.Jo)(o),y=d??(m=g).docs.find((t=>t.id===m.mainDocId));var m;return r.createElement("div",{className:(0,i.Z)(e,l.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},r.createElement("div",null,r.createElement(p,{siteTitle:s,versionMetadata:n})),r.createElement("div",{className:"margin-top--md"},r.createElement(f,{versionLabel:g.label,to:y.path,onClick:()=>u(g.name)})))}function y(t){let{className:e}=t;const n=(0,u.E)();return n.banner?r.createElement(g,{className:e,versionMetadata:n}):null}},8207:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(7462),i=n(7294),a=n(6010),s=n(7325),o=n(107),c=n(3699);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function h(t){let{as:e,id:n,...h}=t;const{navbar:{hideOnScroll:u}}=(0,o.L)();if("h1"===e||!n)return i.createElement(e,(0,r.Z)({},h,{id:void 0}));const d=(0,s.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof h.children?h.children:n});return i.createElement(e,(0,r.Z)({},h,{className:(0,a.Z)("anchor",u?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,h.className),id:n}),h.children,i.createElement(c.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d},"\u200b"))}},3852:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7294),i=n(6010),a=n(3699);const s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function o(t){let{permalink:e,label:n,count:o}=t;return r.createElement(a.Z,{href:e,className:(0,i.Z)(s.tag,o?s.tagWithCount:s.tagRegular)},n,o&&r.createElement("span",null,o))}},7484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",a="minute",s="hour",o="day",c="week",l="month",h="quarter",u="year",d="date",p="Invalid Date",f=/^(\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,y={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"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},b={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,l),a=n-i<0,s=e.clone().add(r+(a?-1:1),l);return+(-(r+(n-i)/(a?i-s:s-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:l,y:u,w:c,d:o,D:d,h:s,m:a,s:i,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},_="en",x={};x[_]=y;var v="$isDayjsObject",k=function(t){return t instanceof T||!(!t||!t[v])},w=function t(e,n,r){var i;if(!e)return _;if("string"==typeof e){var a=e.toLowerCase();x[a]&&(i=a),n&&(x[a]=n,i=a);var s=e.split("-");if(!i&&s.length>1)return t(s[0])}else{var o=e.name;x[o]=e,i=o}return!r&&i&&(_=i),i||!r&&_},C=function(t,e){if(k(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new T(n)},E=b;E.l=w,E.i=k,E.w=function(t,e){return C(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var T=function(){function y(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[v]=!0}var m=y.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(E.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(f);if(r){var i=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(e)}(t),this.init()},m.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()},m.$utils=function(){return E},m.isValid=function(){return!(this.$d.toString()===p)},m.isSame=function(t,e){var n=C(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return C(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<C(t)},m.$g=function(t,e,n){return E.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!E.u(e)||e,h=E.p(t),p=function(t,e){var i=E.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(o)},f=function(t,e){return E.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},g=this.$W,y=this.$M,m=this.$D,b="set"+(this.$u?"UTC":"");switch(h){case u:return r?p(1,0):p(31,11);case l:return r?p(1,y):p(0,y+1);case c:var _=this.$locale().weekStart||0,x=(g<_?g+7:g)-_;return p(r?m-x:m+(6-x),y);case o:case d:return f(b+"Hours",0);case s:return f(b+"Minutes",1);case a:return f(b+"Seconds",2);case i:return f(b+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,c=E.p(t),h="set"+(this.$u?"UTC":""),p=(n={},n[o]=h+"Date",n[d]=h+"Date",n[l]=h+"Month",n[u]=h+"FullYear",n[s]=h+"Hours",n[a]=h+"Minutes",n[i]=h+"Seconds",n[r]=h+"Milliseconds",n)[c],f=c===o?this.$D+(e-this.$W):e;if(c===l||c===u){var g=this.clone().set(d,1);g.$d[p](f),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else p&&this.$d[p](f);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[E.p(t)]()},m.add=function(r,h){var d,p=this;r=Number(r);var f=E.p(h),g=function(t){var e=C(p);return E.w(e.date(e.date()+Math.round(t*r)),p)};if(f===l)return this.set(l,this.$M+r);if(f===u)return this.set(u,this.$y+r);if(f===o)return g(1);if(f===c)return g(7);var y=(d={},d[a]=e,d[s]=n,d[i]=t,d)[f]||1,m=this.$d.getTime()+r*y;return E.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=E.z(this),a=this.$H,s=this.$m,o=this.$M,c=n.weekdays,l=n.months,h=n.meridiem,u=function(t,n,i,a){return t&&(t[n]||t(e,r))||i[n].slice(0,a)},d=function(t){return E.s(a%12||12,t,"0")},f=h||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return E.s(e.$y,4,"0");case"M":return o+1;case"MM":return E.s(o+1,2,"0");case"MMM":return u(n.monthsShort,o,l,3);case"MMMM":return u(l,o);case"D":return e.$D;case"DD":return E.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(n.weekdaysMin,e.$W,c,2);case"ddd":return u(n.weekdaysShort,e.$W,c,3);case"dddd":return c[e.$W];case"H":return String(a);case"HH":return E.s(a,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return f(a,s,!0);case"A":return f(a,s,!1);case"m":return String(s);case"mm":return E.s(s,2,"0");case"s":return String(e.$s);case"ss":return E.s(e.$s,2,"0");case"SSS":return E.s(e.$ms,3,"0");case"Z":return i}return null}(t)||i.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,p){var f,g=this,y=E.p(d),m=C(r),b=(m.utcOffset()-this.utcOffset())*e,_=this-m,x=function(){return E.m(g,m)};switch(y){case u:f=x()/12;break;case l:f=x();break;case h:f=x()/3;break;case c:f=(_-b)/6048e5;break;case o:f=(_-b)/864e5;break;case s:f=_/n;break;case a:f=_/e;break;case i:f=_/t;break;default:f=_}return p?f:E.a(f)},m.daysInMonth=function(){return this.endOf(l).$D},m.$locale=function(){return x[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return E.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},y}(),S=T.prototype;return C.prototype=S,[["$ms",r],["$s",i],["$m",a],["$H",s],["$W",o],["$M",l],["$y",u],["$D",d]].forEach((function(t){S[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),C.extend=function(t,e){return t.$i||(t(e,T,C),t.$i=!0),C},C.locale=w,C.isDayjs=k,C.unix=function(t){return C(1e3*t)},C.en=x[_],C.Ls=x,C.p={},C}()},8734:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,r=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return r.bind(this)(t);var i=this.$utils(),a=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return i.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return i.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return i.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return r.bind(this)(a)}}}()},285:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,a={},s=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=a[t];return e&&(e.indexOf?e:e.s.concat(e.f))},h=function(t,e){var n,r=a.meridiem;if(r){for(var i=1;i<=24;i+=1)if(t.indexOf(r(i,0,e))>-1){n=i>12;break}}else n=t===(e?"pm":"PM");return n},u={A:[i,function(t){this.afternoon=h(t,!1)}],a:[i,function(t){this.afternoon=h(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[r,o("seconds")],ss:[r,o("seconds")],m:[r,o("minutes")],mm:[r,o("minutes")],H:[r,o("hours")],h:[r,o("hours")],HH:[r,o("hours")],hh:[r,o("hours")],D:[r,o("day")],DD:[n,o("day")],Do:[i,function(t){var e=a.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var r=1;r<=31;r+=1)e(r).replace(/\[|\]/g,"")===t&&(this.day=r)}],M:[r,o("month")],MM:[n,o("month")],MMM:[i,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=s(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function d(n){var r,i;r=n,i=a&&a.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,r){var a=r&&r.toUpperCase();return n||i[r]||t[r]||i[a].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=s.length,c=0;c<o;c+=1){var l=s[c],h=u[l],d=h&&h[0],p=h&&h[1];s[c]=p?{regex:d,parser:p}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,r=0;n<o;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var a=i.regex,c=i.parser,l=t.slice(r),h=a.exec(l)[0];c.call(e,h),t=t.replace(h,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(s=t.parseTwoDigitYear);var r=e.prototype,i=r.parse;r.parse=function(t){var e=t.date,r=t.utc,s=t.args;this.$u=r;var o=s[1];if("string"==typeof o){var c=!0===s[2],l=!0===s[3],h=c||l,u=s[2];l&&(u=s[2]),a=this.$locale(),!c&&u&&(a=n.Ls[u]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var r=d(e)(t),i=r.year,a=r.month,s=r.day,o=r.hours,c=r.minutes,l=r.seconds,h=r.milliseconds,u=r.zone,p=new Date,f=s||(i||a?1:p.getDate()),g=i||p.getFullYear(),y=0;i&&!a||(y=a>0?a-1:p.getMonth());var m=o||0,b=c||0,_=l||0,x=h||0;return u?new Date(Date.UTC(g,y,f,m,b,_,x+60*u.offset*1e3)):n?new Date(Date.UTC(g,y,f,m,b,_,x)):new Date(g,y,f,m,b,_,x)}catch(t){return new Date("")}}(e,o,r),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),h&&e!=this.format(o)&&(this.$d=new Date("")),a={}}else if(o instanceof Array)for(var p=o.length,f=1;f<=p;f+=1){s[1]=o[f-1];var g=n.apply(this,s);if(g.isValid()){this.$d=g.$d,this.$L=g.$L,this.init();break}f===p&&(this.$d=new Date(""))}else i.call(this,t)}}}()},9542:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,r){var i=function(e){return e.add(4-e.isoWeekday(),t)},a=n.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,a,s,o=i(this),c=(n=this.isoWeekYear(),s=4-(a=(this.$u?r.utc:r)().year(n).startOf("year")).isoWeekday(),a.isoWeekday()>4&&(s+=7),a.add(s,t));return o.diff(c,"week")+1},a.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var s=a.startOf;a.startOf=function(t,e){var n=this.$utils(),r=!!n.u(e)||e;return"isoweek"===n.p(t)?r?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(t,e)}}}()},7856:function(t){t.exports=function(){"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,n){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function r(t,i,a){return r=n()?Reflect.construct:function(t,n,r){var i=[null];i.push.apply(i,n);var a=new(Function.bind.apply(t,i));return r&&e(a,r.prototype),a},r.apply(null,arguments)}function i(t){return a(t)||s(t)||o(t)||l()}function a(t){if(Array.isArray(t))return c(t)}function s(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function o(t,e){if(t){if("string"==typeof t)return c(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var h=Object.hasOwnProperty,u=Object.setPrototypeOf,d=Object.isFrozen,p=Object.getPrototypeOf,f=Object.getOwnPropertyDescriptor,g=Object.freeze,y=Object.seal,m=Object.create,b="undefined"!=typeof Reflect&&Reflect,_=b.apply,x=b.construct;_||(_=function(t,e,n){return t.apply(e,n)}),g||(g=function(t){return t}),y||(y=function(t){return t}),x||(x=function(t,e){return r(t,i(e))});var v=D(Array.prototype.forEach),k=D(Array.prototype.pop),w=D(Array.prototype.push),C=D(String.prototype.toLowerCase),E=D(String.prototype.toString),T=D(String.prototype.match),S=D(String.prototype.replace),A=D(String.prototype.indexOf),L=D(String.prototype.trim),B=D(RegExp.prototype.test),N=O(TypeError);function D(t){return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return _(t,e,r)}}function O(t){return function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return x(t,n)}}function M(t,e,n){n=n||C,u&&u(t,null);for(var r=e.length;r--;){var i=e[r];if("string"==typeof i){var a=n(i);a!==i&&(d(e)||(e[r]=a),i=a)}t[i]=!0}return t}function I(t){var e,n=m(null);for(e in t)!0===_(h,t,[e])&&(n[e]=t[e]);return n}function F(t,e){for(;null!==t;){var n=f(t,e);if(n){if(n.get)return D(n.get);if("function"==typeof n.value)return D(n.value)}t=p(t)}function r(t){return console.warn("fallback value for",t),null}return r}var $=g(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),R=g(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Z=g(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),P=g(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),j=g(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),Y=g(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),z=g(["#text"]),U=g(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),W=g(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),H=g(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),q=g(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),V=y(/\{\{[\w\W]*|[\w\W]*\}\}/gm),G=y(/<%[\w\W]*|[\w\W]*%>/gm),X=y(/\${[\w\W]*}/gm),Q=y(/^data-[\-\w.\u00B7-\uFFFF]/),K=y(/^aria-[\-\w]+$/),J=y(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),tt=y(/^(?:\w+script|data):/i),et=y(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),nt=y(/^html$/i),rt=function(){return"undefined"==typeof window?null:window},it=function(e,n){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var r=null,i="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(i)&&(r=n.currentScript.getAttribute(i));var a="dompurify"+(r?"#"+r:"");try{return e.createPolicy(a,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(s){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};function at(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:rt(),n=function(t){return at(t)};if(n.version="2.4.3",n.removed=[],!e||!e.document||9!==e.document.nodeType)return n.isSupported=!1,n;var r=e.document,a=e.document,s=e.DocumentFragment,o=e.HTMLTemplateElement,c=e.Node,l=e.Element,h=e.NodeFilter,u=e.NamedNodeMap,d=void 0===u?e.NamedNodeMap||e.MozNamedAttrMap:u,p=e.HTMLFormElement,f=e.DOMParser,y=e.trustedTypes,m=l.prototype,b=F(m,"cloneNode"),_=F(m,"nextSibling"),x=F(m,"childNodes"),D=F(m,"parentNode");if("function"==typeof o){var O=a.createElement("template");O.content&&O.content.ownerDocument&&(a=O.content.ownerDocument)}var st=it(y,r),ot=st?st.createHTML(""):"",ct=a,lt=ct.implementation,ht=ct.createNodeIterator,ut=ct.createDocumentFragment,dt=ct.getElementsByTagName,pt=r.importNode,ft={};try{ft=I(a).documentMode?a.documentMode:{}}catch(De){}var gt={};n.isSupported="function"==typeof D&<&&void 0!==lt.createHTMLDocument&&9!==ft;var yt,mt,bt=V,_t=G,xt=X,vt=Q,kt=K,wt=tt,Ct=et,Et=J,Tt=null,St=M({},[].concat(i($),i(R),i(Z),i(j),i(z))),At=null,Lt=M({},[].concat(i(U),i(W),i(H),i(q))),Bt=Object.seal(Object.create(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}})),Nt=null,Dt=null,Ot=!0,Mt=!0,It=!1,Ft=!1,$t=!1,Rt=!1,Zt=!1,Pt=!1,jt=!1,Yt=!1,zt=!0,Ut=!1,Wt="user-content-",Ht=!0,qt=!1,Vt={},Gt=null,Xt=M({},["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"]),Qt=null,Kt=M({},["audio","video","img","source","image","track"]),Jt=null,te=M({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ee="http://www.w3.org/1998/Math/MathML",ne="http://www.w3.org/2000/svg",re="http://www.w3.org/1999/xhtml",ie=re,ae=!1,se=null,oe=M({},[ee,ne,re],E),ce=["application/xhtml+xml","text/html"],le="text/html",he=null,ue=a.createElement("form"),de=function(t){return t instanceof RegExp||t instanceof Function},pe=function(e){he&&he===e||(e&&"object"===t(e)||(e={}),e=I(e),yt=yt=-1===ce.indexOf(e.PARSER_MEDIA_TYPE)?le:e.PARSER_MEDIA_TYPE,mt="application/xhtml+xml"===yt?E:C,Tt="ALLOWED_TAGS"in e?M({},e.ALLOWED_TAGS,mt):St,At="ALLOWED_ATTR"in e?M({},e.ALLOWED_ATTR,mt):Lt,se="ALLOWED_NAMESPACES"in e?M({},e.ALLOWED_NAMESPACES,E):oe,Jt="ADD_URI_SAFE_ATTR"in e?M(I(te),e.ADD_URI_SAFE_ATTR,mt):te,Qt="ADD_DATA_URI_TAGS"in e?M(I(Kt),e.ADD_DATA_URI_TAGS,mt):Kt,Gt="FORBID_CONTENTS"in e?M({},e.FORBID_CONTENTS,mt):Xt,Nt="FORBID_TAGS"in e?M({},e.FORBID_TAGS,mt):{},Dt="FORBID_ATTR"in e?M({},e.FORBID_ATTR,mt):{},Vt="USE_PROFILES"in e&&e.USE_PROFILES,Ot=!1!==e.ALLOW_ARIA_ATTR,Mt=!1!==e.ALLOW_DATA_ATTR,It=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ft=e.SAFE_FOR_TEMPLATES||!1,$t=e.WHOLE_DOCUMENT||!1,Pt=e.RETURN_DOM||!1,jt=e.RETURN_DOM_FRAGMENT||!1,Yt=e.RETURN_TRUSTED_TYPE||!1,Zt=e.FORCE_BODY||!1,zt=!1!==e.SANITIZE_DOM,Ut=e.SANITIZE_NAMED_PROPS||!1,Ht=!1!==e.KEEP_CONTENT,qt=e.IN_PLACE||!1,Et=e.ALLOWED_URI_REGEXP||Et,ie=e.NAMESPACE||re,e.CUSTOM_ELEMENT_HANDLING&&de(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Bt.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&de(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Bt.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Bt.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ft&&(Mt=!1),jt&&(Pt=!0),Vt&&(Tt=M({},i(z)),At=[],!0===Vt.html&&(M(Tt,$),M(At,U)),!0===Vt.svg&&(M(Tt,R),M(At,W),M(At,q)),!0===Vt.svgFilters&&(M(Tt,Z),M(At,W),M(At,q)),!0===Vt.mathMl&&(M(Tt,j),M(At,H),M(At,q))),e.ADD_TAGS&&(Tt===St&&(Tt=I(Tt)),M(Tt,e.ADD_TAGS,mt)),e.ADD_ATTR&&(At===Lt&&(At=I(At)),M(At,e.ADD_ATTR,mt)),e.ADD_URI_SAFE_ATTR&&M(Jt,e.ADD_URI_SAFE_ATTR,mt),e.FORBID_CONTENTS&&(Gt===Xt&&(Gt=I(Gt)),M(Gt,e.FORBID_CONTENTS,mt)),Ht&&(Tt["#text"]=!0),$t&&M(Tt,["html","head","body"]),Tt.table&&(M(Tt,["tbody"]),delete Nt.tbody),g&&g(e),he=e)},fe=M({},["mi","mo","mn","ms","mtext"]),ge=M({},["foreignobject","desc","title","annotation-xml"]),ye=M({},["title","style","font","a","script"]),me=M({},R);M(me,Z),M(me,P);var be=M({},j);M(be,Y);var _e=function(t){var e=D(t);e&&e.tagName||(e={namespaceURI:ie,tagName:"template"});var n=C(t.tagName),r=C(e.tagName);return!!se[t.namespaceURI]&&(t.namespaceURI===ne?e.namespaceURI===re?"svg"===n:e.namespaceURI===ee?"svg"===n&&("annotation-xml"===r||fe[r]):Boolean(me[n]):t.namespaceURI===ee?e.namespaceURI===re?"math"===n:e.namespaceURI===ne?"math"===n&&ge[r]:Boolean(be[n]):t.namespaceURI===re?!(e.namespaceURI===ne&&!ge[r])&&!(e.namespaceURI===ee&&!fe[r])&&!be[n]&&(ye[n]||!me[n]):!("application/xhtml+xml"!==yt||!se[t.namespaceURI]))},xe=function(t){w(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(De){try{t.outerHTML=ot}catch(De){t.remove()}}},ve=function(t,e){try{w(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(De){w(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!At[t])if(Pt||jt)try{xe(e)}catch(De){}else try{e.setAttribute(t,"")}catch(De){}},ke=function(t){var e,n;if(Zt)t="<remove></remove>"+t;else{var r=T(t,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===yt&&ie===re&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var i=st?st.createHTML(t):t;if(ie===re)try{e=(new f).parseFromString(i,yt)}catch(De){}if(!e||!e.documentElement){e=lt.createDocument(ie,"template",null);try{e.documentElement.innerHTML=ae?ot:i}catch(De){}}var s=e.body||e.documentElement;return t&&n&&s.insertBefore(a.createTextNode(n),s.childNodes[0]||null),ie===re?dt.call(e,$t?"html":"body")[0]:$t?e.documentElement:s},we=function(t){return ht.call(t.ownerDocument||t,t,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT,null,!1)},Ce=function(t){return t instanceof p&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof d)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},Ee=function(e){return"object"===t(c)?e instanceof c:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},Te=function(t,e,r){gt[t]&&v(gt[t],(function(t){t.call(n,e,r,he)}))},Se=function(t){var e;if(Te("beforeSanitizeElements",t,null),Ce(t))return xe(t),!0;if(B(/[\u0080-\uFFFF]/,t.nodeName))return xe(t),!0;var r=mt(t.nodeName);if(Te("uponSanitizeElement",t,{tagName:r,allowedTags:Tt}),t.hasChildNodes()&&!Ee(t.firstElementChild)&&(!Ee(t.content)||!Ee(t.content.firstElementChild))&&B(/<[/\w]/g,t.innerHTML)&&B(/<[/\w]/g,t.textContent))return xe(t),!0;if("select"===r&&B(/<template/i,t.innerHTML))return xe(t),!0;if(!Tt[r]||Nt[r]){if(!Nt[r]&&Le(r)){if(Bt.tagNameCheck instanceof RegExp&&B(Bt.tagNameCheck,r))return!1;if(Bt.tagNameCheck instanceof Function&&Bt.tagNameCheck(r))return!1}if(Ht&&!Gt[r]){var i=D(t)||t.parentNode,a=x(t)||t.childNodes;if(a&&i)for(var s=a.length-1;s>=0;--s)i.insertBefore(b(a[s],!0),_(t))}return xe(t),!0}return t instanceof l&&!_e(t)?(xe(t),!0):"noscript"!==r&&"noembed"!==r||!B(/<\/no(script|embed)/i,t.innerHTML)?(Ft&&3===t.nodeType&&(e=t.textContent,e=S(e,bt," "),e=S(e,_t," "),e=S(e,xt," "),t.textContent!==e&&(w(n.removed,{element:t.cloneNode()}),t.textContent=e)),Te("afterSanitizeElements",t,null),!1):(xe(t),!0)},Ae=function(t,e,n){if(zt&&("id"===e||"name"===e)&&(n in a||n in ue))return!1;if(Mt&&!Dt[e]&&B(vt,e));else if(Ot&&B(kt,e));else if(!At[e]||Dt[e]){if(!(Le(t)&&(Bt.tagNameCheck instanceof RegExp&&B(Bt.tagNameCheck,t)||Bt.tagNameCheck instanceof Function&&Bt.tagNameCheck(t))&&(Bt.attributeNameCheck instanceof RegExp&&B(Bt.attributeNameCheck,e)||Bt.attributeNameCheck instanceof Function&&Bt.attributeNameCheck(e))||"is"===e&&Bt.allowCustomizedBuiltInElements&&(Bt.tagNameCheck instanceof RegExp&&B(Bt.tagNameCheck,n)||Bt.tagNameCheck instanceof Function&&Bt.tagNameCheck(n))))return!1}else if(Jt[e]);else if(B(Et,S(n,Ct,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==A(n,"data:")||!Qt[t])if(It&&!B(wt,S(n,Ct,"")));else if(n)return!1;return!0},Le=function(t){return t.indexOf("-")>0},Be=function(e){var r,i,a,s;Te("beforeSanitizeAttributes",e,null);var o=e.attributes;if(o){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:At};for(s=o.length;s--;){var l=r=o[s],h=l.name,u=l.namespaceURI;if(i="value"===h?r.value:L(r.value),a=mt(h),c.attrName=a,c.attrValue=i,c.keepAttr=!0,c.forceKeepAttr=void 0,Te("uponSanitizeAttribute",e,c),i=c.attrValue,!c.forceKeepAttr&&(ve(h,e),c.keepAttr))if(B(/\/>/i,i))ve(h,e);else{Ft&&(i=S(i,bt," "),i=S(i,_t," "),i=S(i,xt," "));var d=mt(e.nodeName);if(Ae(d,a,i)){if(!Ut||"id"!==a&&"name"!==a||(ve(h,e),i=Wt+i),st&&"object"===t(y)&&"function"==typeof y.getAttributeType)if(u);else switch(y.getAttributeType(d,a)){case"TrustedHTML":i=st.createHTML(i);break;case"TrustedScriptURL":i=st.createScriptURL(i)}try{u?e.setAttributeNS(u,h,i):e.setAttribute(h,i),k(n.removed)}catch(De){}}}}Te("afterSanitizeAttributes",e,null)}},Ne=function t(e){var n,r=we(e);for(Te("beforeSanitizeShadowDOM",e,null);n=r.nextNode();)Te("uponSanitizeShadowNode",n,null),Se(n)||(n.content instanceof s&&t(n.content),Be(n));Te("afterSanitizeShadowDOM",e,null)};return n.sanitize=function(i){var a,o,l,h,u,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ae=!i)&&(i="\x3c!--\x3e"),"string"!=typeof i&&!Ee(i)){if("function"!=typeof i.toString)throw N("toString is not a function");if("string"!=typeof(i=i.toString()))throw N("dirty is not a string, aborting")}if(!n.isSupported){if("object"===t(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof i)return e.toStaticHTML(i);if(Ee(i))return e.toStaticHTML(i.outerHTML)}return i}if(Rt||pe(d),n.removed=[],"string"==typeof i&&(qt=!1),qt){if(i.nodeName){var p=mt(i.nodeName);if(!Tt[p]||Nt[p])throw N("root node is forbidden and cannot be sanitized in-place")}}else if(i instanceof c)1===(o=(a=ke("\x3c!----\x3e")).ownerDocument.importNode(i,!0)).nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?a=o:a.appendChild(o);else{if(!Pt&&!Ft&&!$t&&-1===i.indexOf("<"))return st&&Yt?st.createHTML(i):i;if(!(a=ke(i)))return Pt?null:Yt?ot:""}a&&Zt&&xe(a.firstChild);for(var f=we(qt?i:a);l=f.nextNode();)3===l.nodeType&&l===h||Se(l)||(l.content instanceof s&&Ne(l.content),Be(l),h=l);if(h=null,qt)return i;if(Pt){if(jt)for(u=ut.call(a.ownerDocument);a.firstChild;)u.appendChild(a.firstChild);else u=a;return At.shadowroot&&(u=pt.call(r,u,!0)),u}var g=$t?a.outerHTML:a.innerHTML;return $t&&Tt["!doctype"]&&a.ownerDocument&&a.ownerDocument.doctype&&a.ownerDocument.doctype.name&&B(nt,a.ownerDocument.doctype.name)&&(g="<!DOCTYPE "+a.ownerDocument.doctype.name+">\n"+g),Ft&&(g=S(g,bt," "),g=S(g,_t," "),g=S(g,xt," ")),st&&Yt?st.createHTML(g):g},n.setConfig=function(t){pe(t),Rt=!0},n.clearConfig=function(){he=null,Rt=!1},n.isValidAttribute=function(t,e,n){he||pe({});var r=mt(t),i=mt(e);return Ae(r,i,n)},n.addHook=function(t,e){"function"==typeof e&&(gt[t]=gt[t]||[],w(gt[t],e))},n.removeHook=function(t){if(gt[t])return k(gt[t])},n.removeHooks=function(t){gt[t]&&(gt[t]=[])},n.removeAllHooks=function(){gt={}},n}return at()}()},6432:(t,e,n)=>{"use strict";n.d(e,{a:()=>Un,b:()=>Hs,c:()=>jt,d:()=>Yn,e:()=>Zt,f:()=>Ks,g:()=>gr,h:()=>Sc,i:()=>xs,j:()=>Xr,k:()=>Kr,l:()=>Bt,m:()=>Yr,n:()=>It,o:()=>Np,p:()=>Ao,s:()=>wr});const r=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var i=r.reduce((function(t,e){var n=e.match(/\n([\t ]+|(?!\s).)/g);return n?t.concat(n.map((function(t){var e,n;return null!==(n=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==n?n:0}))):t}),[]);if(i.length){var a=new RegExp("\n[\t ]{"+Math.min.apply(Math,i)+"}","g");r=r.map((function(t){return t.replace(a,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var s=r[0];return e.forEach((function(t,e){var n=s.match(/(?:^|\n)( *)$/),i=n?n[1]:"",a=t;"string"==typeof t&&t.includes("\n")&&(a=String(t).split("\n").map((function(t,e){return 0===e?t:""+i+t})).join("\n")),s+=a+r[e+1]})),s};var i=n(7484),a=n.n(i),s=n(7967),o=n(9373),l=n(7856),h=n.n(l),u=n(1610),d=n(1691);const p=(t,e)=>{const n=u.Z.parse(t);for(const r in e)n[r]=d.Z.channel.clamp[r](e[r]);return u.Z.stringify(n)},f=(t,e)=>{const n=u.Z.parse(t),r={};for(const i in e)e[i]&&(r[i]=n[i]+e[i]);return p(t,r)};var g=n(1883);const y=(t,e,n=0,r=1)=>{if("number"!=typeof t)return p(t,{a:e});const i=g.Z.set({r:d.Z.channel.clamp.r(t),g:d.Z.channel.clamp.g(e),b:d.Z.channel.clamp.b(n),a:d.Z.channel.clamp.a(r)});return u.Z.stringify(i)},m=(t,e,n=50)=>{const{r:r,g:i,b:a,a:s}=u.Z.parse(t),{r:o,g:c,b:l,a:h}=u.Z.parse(e),d=n/100,p=2*d-1,f=s-h,g=((p*f==-1?p:(p+f)/(1+p*f))+1)/2,m=1-g;return y(r*g+o*m,i*g+c*m,a*g+l*m,s*d+h*(1-d))},b=(t,e=100)=>{const n=u.Z.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,m(n,t,e)};var _=n(7201),x=n(5920),v=n(2454),k="comm",w="rule",C="decl",E=Math.abs,T=String.fromCharCode;Object.assign;function S(t){return t.trim()}function A(t,e,n){return t.replace(e,n)}function L(t,e){return t.indexOf(e)}function B(t,e){return 0|t.charCodeAt(e)}function N(t,e,n){return t.slice(e,n)}function D(t){return t.length}function O(t,e){return e.push(t),t}function M(t,e){for(var n="",r=0;r<t.length;r++)n+=e(t[r],r,t,e)||"";return n}function I(t,e,n,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case C:return t.return=t.return||t.value;case k:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case w:if(!D(t.value=t.props.join(",")))return""}return D(n=M(t.children,r))?t.return=t.value+"{"+n+"}":""}var F=1,$=1,R=0,Z=0,P=0,j="";function Y(t,e,n,r,i,a,s,o){return{value:t,root:e,parent:n,type:r,props:i,children:a,line:F,column:$,length:s,return:"",siblings:o}}function z(){return P=Z>0?B(j,--Z):0,$--,10===P&&($=1,F--),P}function U(){return P=Z<R?B(j,Z++):0,$++,10===P&&($=1,F++),P}function W(){return B(j,Z)}function H(){return Z}function q(t,e){return N(j,t,e)}function V(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function G(t){return F=$=1,R=D(j=t),Z=0,[]}function X(t){return j="",t}function Q(t){return S(q(Z-1,tt(91===t?t+2:40===t?t+1:t)))}function K(t){for(;(P=W())&&P<33;)U();return V(t)>2||V(P)>3?"":" "}function J(t,e){for(;--e&&U()&&!(P<48||P>102||P>57&&P<65||P>70&&P<97););return q(t,H()+(e<6&&32==W()&&32==U()))}function tt(t){for(;U();)switch(P){case t:return Z;case 34:case 39:34!==t&&39!==t&&tt(P);break;case 40:41===t&&tt(t);break;case 92:U()}return Z}function et(t,e){for(;U()&&t+P!==57&&(t+P!==84||47!==W()););return"/*"+q(e,Z-1)+"*"+T(47===t?t:U())}function nt(t){for(;!V(W());)U();return q(t,Z)}function rt(t){return X(it("",null,null,null,[""],t=G(t),0,[0],t))}function it(t,e,n,r,i,a,s,o,c){for(var l=0,h=0,u=s,d=0,p=0,f=0,g=1,y=1,m=1,b=0,_="",x=i,v=a,k=r,w=_;y;)switch(f=b,b=U()){case 40:if(108!=f&&58==B(w,u-1)){-1!=L(w+=A(Q(b),"&","&\f"),"&\f")&&(m=-1);break}case 34:case 39:case 91:w+=Q(b);break;case 9:case 10:case 13:case 32:w+=K(f);break;case 92:w+=J(H()-1,7);continue;case 47:switch(W()){case 42:case 47:O(st(et(U(),H()),e,n,c),c);break;default:w+="/"}break;case 123*g:o[l++]=D(w)*m;case 125*g:case 59:case 0:switch(b){case 0:case 125:y=0;case 59+h:-1==m&&(w=A(w,/\f/g,"")),p>0&&D(w)-u&&O(p>32?ot(w+";",r,n,u-1,c):ot(A(w," ","")+";",r,n,u-2,c),c);break;case 59:w+=";";default:if(O(k=at(w,e,n,l,h,i,o,_,x=[],v=[],u,a),a),123===b)if(0===h)it(w,e,k,k,x,a,u,o,v);else switch(99===d&&110===B(w,3)?100:d){case 100:case 108:case 109:case 115:it(t,k,k,r&&O(at(t,k,k,0,0,i,o,_,i,x=[],u,v),v),i,v,u,o,r?x:v);break;default:it(w,k,k,k,[""],v,0,o,v)}}l=h=p=0,g=m=1,_=w="",u=s;break;case 58:u=1+D(w),p=f;default:if(g<1)if(123==b)--g;else if(125==b&&0==g++&&125==z())continue;switch(w+=T(b),b*g){case 38:m=h>0?1:(w+="\f",-1);break;case 44:o[l++]=(D(w)-1)*m,m=1;break;case 64:45===W()&&(w+=Q(U())),d=W(),h=u=D(_=w+=nt(H())),b++;break;case 45:45===f&&2==D(w)&&(g=0)}}return a}function at(t,e,n,r,i,a,s,o,c,l,h,u){for(var d=i-1,p=0===i?a:[""],f=function(t){return t.length}(p),g=0,y=0,m=0;g<r;++g)for(var b=0,_=N(t,d+1,d=E(y=s[g])),x=t;b<f;++b)(x=S(y>0?p[b]+" "+_:A(_,/&\f/g,p[b])))&&(c[m++]=x);return Y(t,e,n,0===i?w:o,c,l,h,u)}function st(t,e,n,r){return Y(t,e,n,k,T(P),N(t,2,-2),0,r)}function ot(t,e,n,r,i){return Y(t,e,n,C,N(t,0,r),N(t,r+1,-1),r,i)}var ct=n(277),lt=n(5625),ht=n(9354);const ut=[];for(let c=0;c<256;++c)ut.push((c+256).toString(16).slice(1));function dt(t,e=0){return ut[t[e+0]]+ut[t[e+1]]+ut[t[e+2]]+ut[t[e+3]]+"-"+ut[t[e+4]]+ut[t[e+5]]+"-"+ut[t[e+6]]+ut[t[e+7]]+"-"+ut[t[e+8]]+ut[t[e+9]]+"-"+ut[t[e+10]]+ut[t[e+11]]+ut[t[e+12]]+ut[t[e+13]]+ut[t[e+14]]+ut[t[e+15]]}const pt=/^(?:[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 ft=function(t){return"string"==typeof t&&pt.test(t)};const gt=function(t){if(!ft(t))throw TypeError("Invalid UUID");let e;const n=new Uint8Array(16);return n[0]=(e=parseInt(t.slice(0,8),16))>>>24,n[1]=e>>>16&255,n[2]=e>>>8&255,n[3]=255&e,n[4]=(e=parseInt(t.slice(9,13),16))>>>8,n[5]=255&e,n[6]=(e=parseInt(t.slice(14,18),16))>>>8,n[7]=255&e,n[8]=(e=parseInt(t.slice(19,23),16))>>>8,n[9]=255&e,n[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,n[11]=e/4294967296&255,n[12]=e>>>24&255,n[13]=e>>>16&255,n[14]=e>>>8&255,n[15]=255&e,n};function yt(t,e,n,r){switch(t){case 0:return e&n^~e&r;case 1:case 3:return e^n^r;case 2:return e&n^e&r^n&r}}function mt(t,e){return t<<e|t>>>32-e}const bt=function(t){const e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const r=t.length/4+2,i=Math.ceil(r/16),a=new Array(i);for(let s=0;s<i;++s){const e=new Uint32Array(16);for(let n=0;n<16;++n)e[n]=t[64*s+4*n]<<24|t[64*s+4*n+1]<<16|t[64*s+4*n+2]<<8|t[64*s+4*n+3];a[s]=e}a[i-1][14]=8*(t.length-1)/Math.pow(2,32),a[i-1][14]=Math.floor(a[i-1][14]),a[i-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<i;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=a[s][e];for(let e=16;e<80;++e)t[e]=mt(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let r=n[0],i=n[1],o=n[2],c=n[3],l=n[4];for(let n=0;n<80;++n){const a=Math.floor(n/20),s=mt(r,5)+yt(a,i,o,c)+l+e[a]+t[n]>>>0;l=c,c=o,o=mt(i,30)>>>0,i=r,r=s}n[0]=n[0]+r>>>0,n[1]=n[1]+i>>>0,n[2]=n[2]+o>>>0,n[3]=n[3]+c>>>0,n[4]=n[4]+l>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]},_t=function(t,e,n){function r(t,r,i,a){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n));return e}(t)),"string"==typeof r&&(r=gt(r)),16!==(null===(s=r)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(r),o.set(t,r.length),o=n(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,i){a=a||0;for(let t=0;t<16;++t)i[a+t]=o[t];return i}return dt(o)}try{r.name=t}catch(i){}return r.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",r.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",r}("v5",80,bt),xt=_t;n(1518),n(6225);var vt=n(3349),kt=(n(3352),n(2930),n(9542)),wt=n.n(kt),Ct=n(285),Et=n.n(Ct),Tt=n(8734),St=n.n(Tt),At=n(9697);const Lt={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Bt={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},Nt=function(t="fatal"){let e=Lt.fatal;"string"==typeof t?(t=t.toLowerCase())in Lt&&(e=Lt[t]):"number"==typeof t&&(e=t),Bt.trace=()=>{},Bt.debug=()=>{},Bt.info=()=>{},Bt.warn=()=>{},Bt.error=()=>{},Bt.fatal=()=>{},e<=Lt.fatal&&(Bt.fatal=console.error?console.error.bind(console,Dt("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",Dt("FATAL"))),e<=Lt.error&&(Bt.error=console.error?console.error.bind(console,Dt("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",Dt("ERROR"))),e<=Lt.warn&&(Bt.warn=console.warn?console.warn.bind(console,Dt("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",Dt("WARN"))),e<=Lt.info&&(Bt.info=console.info?console.info.bind(console,Dt("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",Dt("INFO"))),e<=Lt.debug&&(Bt.debug=console.debug?console.debug.bind(console,Dt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",Dt("DEBUG"))),e<=Lt.trace&&(Bt.trace=console.debug?console.debug.bind(console,Dt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",Dt("TRACE")))},Dt=t=>`%c${a()().format("ss.SSS")} : ${t} : `,Ot=t=>h().sanitize(t),Mt=(t,e)=>{var n;if(!1!==(null==(n=e.flowchart)?void 0:n.htmlLabels)){const n=e.securityLevel;"antiscript"===n||"strict"===n?t=Ot(t):"loose"!==n&&(t=(t=(t=Rt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=$t(t))}return t},It=(t,e)=>t?t=e.dompurifyConfig?h().sanitize(Mt(t,e),e.dompurifyConfig).toString():h().sanitize(Mt(t,e),{FORBID_TAGS:["style"]}).toString():t,Ft=/<br\s*\/?>/gi,$t=t=>t.replace(/#br#/g,"<br/>"),Rt=t=>t.replace(Ft,"#br#"),Zt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),Pt=function(t){let e=t;if(t.split("~").length-1>=2){let t=e;do{e=t,t=e.replace(/~([^\s,:;]+)~/,"<$1>")}while(t!=e);return Pt(t)}return e},jt={getRows:t=>{if(!t)return[""];return Rt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:It,sanitizeTextOrArray:(t,e)=>"string"==typeof t?It(t,e):t.flat().map((t=>It(t,e))),hasBreaks:t=>Ft.test(t),splitBreaks:t=>t.split(Ft),lineBreakRegex:Ft,removeScript:Ot,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:Zt},Yt=(t,e)=>f(t,e?{s:-40,l:10}:{s:-40,l:-10}),zt="#ffffff",Ut="#f2f2f2";let Wt=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(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||f(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||f(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Yt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Yt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||b(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||b(this.tertiaryColor),this.lineColor=this.lineColor||b(this.background),this.textColor=this.textColor||this.primaryTextColor,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,_.Z)(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,_.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||b(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,x.Z)(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||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,_.Z)(this["cScale"+e],75);else for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=(0,_.Z)(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||b(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||(0,x.Z)(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||(0,_.Z)(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;const t=this.darkMode?-4:-1;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||f(this.mainBkg,{h:180,s:-15,l:t*(5+3*e)}),this["surfacePeer"+e]=this["surfacePeer"+e]||f(this.mainBkg,{h:180,s:-15,l:t*(8+3*e)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||f(this.primaryColor,{h:64}),this.fillType3=this.fillType3||f(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||f(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||f(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||f(this.primaryColor,{h:128}),this.fillType7=this.fillType7||f(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||f(this.primaryColor,{l:-10}),this.pie5=this.pie5||f(this.secondaryColor,{l:-10}),this.pie6=this.pie6||f(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||f(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||f(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||f(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||f(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||f(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||f(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,_.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||f(this.primaryColor,{h:-30}),this.git4=this.git4||f(this.primaryColor,{h:-60}),this.git5=this.git5||f(this.primaryColor,{h:-90}),this.git6=this.git6||f(this.primaryColor,{h:60}),this.git7=this.git7||f(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,x.Z)(this.git0,25),this.git1=(0,x.Z)(this.git1,25),this.git2=(0,x.Z)(this.git2,25),this.git3=(0,x.Z)(this.git3,25),this.git4=(0,x.Z)(this.git4,25),this.git5=(0,x.Z)(this.git5,25),this.git6=(0,x.Z)(this.git6,25),this.git7=(0,x.Z)(this.git7,25)):(this.git0=(0,_.Z)(this.git0,25),this.git1=(0,_.Z)(this.git1,25),this.git2=(0,_.Z)(this.git2,25),this.git3=(0,_.Z)(this.git3,25),this.git4=(0,_.Z)(this.git4,25),this.git5=(0,_.Z)(this.git5,25),this.git6=(0,_.Z)(this.git6,25),this.git7=(0,_.Z)(this.git7,25)),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Ht=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,x.Z)(this.primaryColor,16),this.tertiaryColor=f(this.primaryColor,{h:-160}),this.primaryBorderColor=b(this.background),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.tertiaryColor),this.lineColor=b(this.background),this.textColor=b(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,x.Z)(b("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=y(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,_.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=y(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=y(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="calculated",this.personBkg="calculated",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=(0,x.Z)(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,x.Z)(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,x.Z)(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=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(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||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||b(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScalePeer"+t]=this["cScalePeer"+t]||(0,x.Z)(this["cScale"+t],10);for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{h:30,s:-30,l:-(4*t-10)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{h:30,s:-30,l:-(4*t-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,_.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,x.Z)(this.secondaryColor,20),this.git1=(0,x.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,x.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,x.Z)(this.pie4||f(this.primaryColor,{h:-30}),20),this.git4=(0,x.Z)(this.pie5||f(this.primaryColor,{h:-60}),20),this.git5=(0,x.Z)(this.pie6||f(this.primaryColor,{h:-90}),10),this.git6=(0,x.Z)(this.pie7||f(this.primaryColor,{h:60}),10),this.git7=(0,x.Z)(this.pie8||f(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,x.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,x.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let qt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=f(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=f(this.primaryColor,{h:-160}),this.primaryBorderColor=Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.tertiaryColor),this.lineColor=b(this.background),this.textColor=b(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=y(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="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,_.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,_.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,_.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,_.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||f(this["cScale"+t],{h:180});for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{h:30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{h:30,l:-(7+5*t)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||b(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||b(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,x.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,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||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||f(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||f(this.primaryColor,{l:-10}),this.pie5=this.pie5||f(this.secondaryColor,{l:-30}),this.pie6=this.pie6||f(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||f(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||f(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||f(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||f(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||f(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||f(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||f(this.primaryColor,{h:-30}),this.git4=this.git4||f(this.primaryColor,{h:-60}),this.git5=this.git5||f(this.primaryColor,{h:-90}),this.git6=this.git6||f(this.primaryColor,{h:60}),this.git7=this.git7||f(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,x.Z)(this.git0,25),this.git1=(0,x.Z)(this.git1,25),this.git2=(0,x.Z)(this.git2,25),this.git3=(0,x.Z)(this.git3,25),this.git4=(0,x.Z)(this.git4,25),this.git5=(0,x.Z)(this.git5,25),this.git6=(0,x.Z)(this.git6,25),this.git7=(0,x.Z)(this.git7,25)):(this.git0=(0,_.Z)(this.git0,25),this.git1=(0,_.Z)(this.git1,25),this.git2=(0,_.Z)(this.git2,25),this.git3=(0,_.Z)(this.git3,25),this.git4=(0,_.Z)(this.git4,25),this.git5=(0,_.Z)(this.git5,25),this.git6=(0,_.Z)(this.git6,25),this.git7=(0,_.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,_.Z)(b(this.git0),25),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||b(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||b(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Vt=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,x.Z)("#cde498",10),this.primaryBorderColor=Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.primaryColor),this.lineColor=b(this.background),this.textColor=b(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="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||f(this.primaryColor,{h:30}),this.cScale4=this.cScale4||f(this.primaryColor,{h:60}),this.cScale5=this.cScale5||f(this.primaryColor,{h:90}),this.cScale6=this.cScale6||f(this.primaryColor,{h:120}),this.cScale7=this.cScale7||f(this.primaryColor,{h:150}),this.cScale8=this.cScale8||f(this.primaryColor,{h:210}),this.cScale9=this.cScale9||f(this.primaryColor,{h:270}),this.cScale10=this.cScale10||f(this.primaryColor,{h:300}),this.cScale11=this.cScale11||f(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,_.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,_.Z)(this.tertiaryColor,40);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScale"+t]=(0,_.Z)(this["cScale"+t],10),this["cScalePeer"+t]=this["cScalePeer"+t]||(0,_.Z)(this["cScale"+t],25);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||f(this["cScale"+t],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{h:30,s:-30,l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{h:30,s:-30,l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=(0,_.Z)(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.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=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||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||f(this.primaryColor,{l:-30}),this.pie5=this.pie5||f(this.secondaryColor,{l:-30}),this.pie6=this.pie6||f(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||f(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||f(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||f(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||f(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||f(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||f(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||f(this.primaryColor,{h:-30}),this.git4=this.git4||f(this.primaryColor,{h:-60}),this.git5=this.git5||f(this.primaryColor,{h:-90}),this.git6=this.git6||f(this.primaryColor,{h:60}),this.git7=this.git7||f(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,x.Z)(this.git0,25),this.git1=(0,x.Z)(this.git1,25),this.git2=(0,x.Z)(this.git2,25),this.git3=(0,x.Z)(this.git3,25),this.git4=(0,x.Z)(this.git4,25),this.git5=(0,x.Z)(this.git5,25),this.git6=(0,x.Z)(this.git6,25),this.git7=(0,x.Z)(this.git7,25)):(this.git0=(0,_.Z)(this.git0,25),this.git1=(0,_.Z)(this.git1,25),this.git2=(0,_.Z)(this.git2,25),this.git3=(0,_.Z)(this.git3,25),this.git4=(0,_.Z)(this.git4,25),this.git5=(0,_.Z)(this.git5,25),this.git6=(0,_.Z)(this.git6,25),this.git7=(0,_.Z)(this.git7,25)),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class Gt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,x.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=f(this.primaryColor,{h:-160}),this.primaryBorderColor=Yt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Yt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Yt(this.tertiaryColor,this.darkMode),this.primaryTextColor=b(this.primaryColor),this.secondaryTextColor=b(this.secondaryColor),this.tertiaryTextColor=b(this.tertiaryColor),this.lineColor=b(this.background),this.textColor=b(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="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=(0,x.Z)(this.contrast,55),this.border2=this.contrast,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 t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleInv"+t]=this["cScaleInv"+t]||b(this["cScale"+t]);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this.darkMode?this["cScalePeer"+t]=this["cScalePeer"+t]||(0,x.Z)(this["cScale"+t],10):this["cScalePeer"+t]=this["cScalePeer"+t]||(0,_.Z)(this["cScale"+t],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.scaleLabelColor;for(let t=0;t<5;t++)this["surface"+t]=this["surface"+t]||f(this.mainBkg,{l:-(5+5*t)}),this["surfacePeer"+t]=this["surfacePeer"+t]||f(this.mainBkg,{l:-(8+5*t)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=(0,x.Z)(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.sectionBkgColor=(0,x.Z)(this.contrast,30),this.sectionBkgColor2=(0,x.Z)(this.contrast,30),this.taskBorderColor=(0,_.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,x.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,_.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",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||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=f(this.primaryColor,{h:64}),this.fillType3=f(this.secondaryColor,{h:64}),this.fillType4=f(this.primaryColor,{h:-64}),this.fillType5=f(this.secondaryColor,{h:-64}),this.fillType6=f(this.primaryColor,{h:128}),this.fillType7=f(this.secondaryColor,{h:128});for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["pie"+t]=this["cScale"+t];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,_.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||f(this.primaryColor,{h:-30}),this.git4=this.pie5||f(this.primaryColor,{h:-60}),this.git5=this.pie6||f(this.primaryColor,{h:-90}),this.git6=this.pie7||f(this.primaryColor,{h:60}),this.git7=this.pie8||f(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||b(this.git0),this.gitInv1=this.gitInv1||b(this.git1),this.gitInv2=this.gitInv2||b(this.git2),this.gitInv3=this.gitInv3||b(this.git3),this.gitInv4=this.gitInv4||b(this.git4),this.gitInv5=this.gitInv5||b(this.git5),this.gitInv6=this.gitInv6||b(this.git6),this.gitInv7=this.gitInv7||b(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||zt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Ut}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Xt={base:{getThemeVariables:t=>{const e=new Wt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new Ht;return e.calculate(t),e}},default:{getThemeVariables:t=>{const e=new qt;return e.calculate(t),e}},forest:{getThemeVariables:t=>{const e=new Vt;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new Gt;return e.calculate(t),e}}},Qt={theme:"default",themeVariables:Xt.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},sequence:{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,useMaxWidth:!0,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,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:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",tickInterval:void 0,useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,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"]},timeline:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,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},class:{titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},state:{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,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0},requirement:{useWidth:void 0,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},gitGraph:{titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0},c4:{useWidth:void 0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,useMaxWidth:!0,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,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}},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"},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},fontSize:16};Qt.class&&(Qt.class.arrowMarkerAbsolute=Qt.arrowMarkerAbsolute),Qt.gitGraph&&(Qt.gitGraph.arrowMarkerAbsolute=Qt.arrowMarkerAbsolute);const Kt=(t,e="")=>Object.keys(t).reduce(((n,r)=>Array.isArray(t[r])?n:"object"==typeof t[r]&&null!==t[r]?[...n,e+r,...Kt(t[r],"")]:[...n,e+r]),[]),Jt=Kt(Qt,""),te=Qt;function ee(t){return null==t}var ne={isNothing:ee,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:ee(t)?[]:[t]},repeat:function(t,e){var n,r="";for(n=0;n<e;n+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var n,r,i,a;if(e)for(n=0,r=(a=Object.keys(e)).length;n<r;n+=1)t[i=a[n]]=e[i];return t}};function re(t,e){var n="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),r+" "+n):r}function ie(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=re(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}ie.prototype=Object.create(Error.prototype),ie.prototype.constructor=ie,ie.prototype.toString=function(t){return this.name+": "+re(this,t)};var ae=ie;function se(t,e,n,r,i){var a="",s="",o=Math.floor(i/2)-1;return r-e>o&&(e=r-o+(a=" ... ").length),n-r>o&&(n=r+o-(s=" ...").length),{str:a+t.slice(e,n).replace(/\t/g,"\u2192")+s,pos:r-e+a.length}}function oe(t,e){return ne.repeat(" ",e-t.length)+t}var ce=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 n,r=/\r?\n|\r|\0/g,i=[0],a=[],s=-1;n=r.exec(t.buffer);)a.push(n.index),i.push(n.index+n[0].length),t.position<=n.index&&s<0&&(s=i.length-2);s<0&&(s=i.length-1);var o,c,l="",h=Math.min(t.line+e.linesAfter,a.length).toString().length,u=e.maxLength-(e.indent+h+3);for(o=1;o<=e.linesBefore&&!(s-o<0);o++)c=se(t.buffer,i[s-o],a[s-o],t.position-(i[s]-i[s-o]),u),l=ne.repeat(" ",e.indent)+oe((t.line-o+1).toString(),h)+" | "+c.str+"\n"+l;for(c=se(t.buffer,i[s],a[s],t.position,u),l+=ne.repeat(" ",e.indent)+oe((t.line+1).toString(),h)+" | "+c.str+"\n",l+=ne.repeat("-",e.indent+h+3+c.pos)+"^\n",o=1;o<=e.linesAfter&&!(s+o>=a.length);o++)c=se(t.buffer,i[s+o],a[s+o],t.position-(i[s]-i[s+o]),u),l+=ne.repeat(" ",e.indent)+oe((t.line+o+1).toString(),h)+" | "+c.str+"\n";return l.replace(/\n$/,"")},le=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],he=["scalar","sequence","mapping"];var ue=function(t,e){var n,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===le.indexOf(e))throw new ae('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=(n=e.styleAliases||null,r={},null!==n&&Object.keys(n).forEach((function(t){n[t].forEach((function(e){r[String(e)]=t}))})),r),-1===he.indexOf(this.kind))throw new ae('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function de(t,e){var n=[];return t[e].forEach((function(t){var e=n.length;n.forEach((function(n,r){n.tag===t.tag&&n.kind===t.kind&&n.multi===t.multi&&(e=r)})),n[e]=t})),n}function pe(t){return this.extend(t)}pe.prototype.extend=function(t){var e=[],n=[];if(t instanceof ue)n.push(t);else if(Array.isArray(t))n=n.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new ae("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(n=n.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof ue))throw new ae("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new ae("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 ae("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(t){if(!(t instanceof ue))throw new ae("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(pe.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=de(r,"implicit"),r.compiledExplicit=de(r,"explicit"),r.compiledTypeMap=function(){var t,e,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(n.multi[t.kind].push(t),n.multi.fallback.push(t)):n[t.kind][t.tag]=n.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return n}(r.compiledImplicit,r.compiledExplicit),r};var fe=new pe({explicit:[new ue("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new ue("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new ue("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var ge=new ue("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var ye=new ue("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function me(t){return 48<=t&&t<=55}function be(t){return 48<=t&&t<=57}var _e=new ue("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,n,r=t.length,i=0,a=!1;if(!r)return!1;if("-"!==(e=t[i])&&"+"!==e||(e=t[++i]),"0"===e){if(i+1===r)return!0;if("b"===(e=t[++i])){for(i++;i<r;i++)if("_"!==(e=t[i])){if("0"!==e&&"1"!==e)return!1;a=!0}return a&&"_"!==e}if("x"===e){for(i++;i<r;i++)if("_"!==(e=t[i])){if(!(48<=(n=t.charCodeAt(i))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;a=!0}return a&&"_"!==e}if("o"===e){for(i++;i<r;i++)if("_"!==(e=t[i])){if(!me(t.charCodeAt(i)))return!1;a=!0}return a&&"_"!==e}}if("_"===e)return!1;for(;i<r;i++)if("_"!==(e=t[i])){if(!be(t.charCodeAt(i)))return!1;a=!0}return!(!a||"_"===e)},construct:function(t){var e,n=t,r=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(e=n[0])&&"+"!==e||("-"===e&&(r=-1),e=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===e){if("b"===n[1])return r*parseInt(n.slice(2),2);if("x"===n[1])return r*parseInt(n.slice(2),16);if("o"===n[1])return r*parseInt(n.slice(2),8)}return r*parseInt(n,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!ne.isNegativeZero(t)},represent:{binary:function(t){return 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"]}}),xe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var ve=/^[-+]?[0-9]+e/;var ke=new ue("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!xe.test(t)||"_"===t[t.length-1])},construct:function(t){var e,n;return n="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:n*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||ne.isNegativeZero(t))},represent:function(t,e){var n;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(ne.isNegativeZero(t))return"-0.0";return n=t.toString(10),ve.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),we=fe.extend({implicit:[ge,ye,_e,ke]}),Ce=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Ee=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 Te=new ue("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Ce.exec(t)||null!==Ee.exec(t))},construct:function(t){var e,n,r,i,a,s,o,c,l=0,h=null;if(null===(e=Ce.exec(t))&&(e=Ee.exec(t)),null===e)throw new Error("Date resolve error");if(n=+e[1],r=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(n,r,i));if(a=+e[4],s=+e[5],o=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),c=new Date(Date.UTC(n,r,i,a,s,o,l)),h&&c.setTime(c.getTime()-h),c},instanceOf:Date,represent:function(t){return t.toISOString()}});var Se=new ue("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),Ae="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Le=new ue("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,n,r=0,i=t.length,a=Ae;for(n=0;n<i;n++)if(!((e=a.indexOf(t.charAt(n)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,n,r=t.replace(/[\r\n=]/g,""),i=r.length,a=Ae,s=0,o=[];for(e=0;e<i;e++)e%4==0&&e&&(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)),s=s<<6|a.indexOf(r.charAt(e));return 0===(n=i%4*6)?(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)):18===n?(o.push(s>>10&255),o.push(s>>2&255)):12===n&&o.push(s>>4&255),new Uint8Array(o)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,n,r="",i=0,a=t.length,s=Ae;for(e=0;e<a;e++)e%3==0&&e&&(r+=s[i>>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]),i=(i<<8)+t[e];return 0===(n=a%3)?(r+=s[i>>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]):2===n?(r+=s[i>>10&63],r+=s[i>>4&63],r+=s[i<<2&63],r+=s[64]):1===n&&(r+=s[i>>2&63],r+=s[i<<4&63],r+=s[64],r+=s[64]),r}}),Be=Object.prototype.hasOwnProperty,Ne=Object.prototype.toString;var De=new ue("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,n,r,i,a,s=[],o=t;for(e=0,n=o.length;e<n;e+=1){if(r=o[e],a=!1,"[object Object]"!==Ne.call(r))return!1;for(i in r)if(Be.call(r,i)){if(a)return!1;a=!0}if(!a)return!1;if(-1!==s.indexOf(i))return!1;s.push(i)}return!0},construct:function(t){return null!==t?t:[]}}),Oe=Object.prototype.toString;var Me=new ue("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,n,r,i,a,s=t;for(a=new Array(s.length),e=0,n=s.length;e<n;e+=1){if(r=s[e],"[object Object]"!==Oe.call(r))return!1;if(1!==(i=Object.keys(r)).length)return!1;a[e]=[i[0],r[i[0]]]}return!0},construct:function(t){if(null===t)return[];var e,n,r,i,a,s=t;for(a=new Array(s.length),e=0,n=s.length;e<n;e+=1)r=s[e],i=Object.keys(r),a[e]=[i[0],r[i[0]]];return a}}),Ie=Object.prototype.hasOwnProperty;var Fe=new ue("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,n=t;for(e in n)if(Ie.call(n,e)&&null!==n[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),$e=we.extend({implicit:[Te,Se],explicit:[Le,De,Me,Fe]}),Re=Object.prototype.hasOwnProperty,Ze=1,Pe=2,je=3,Ye=4,ze=1,Ue=2,We=3,He=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,qe=/[\x85\u2028\u2029]/,Ve=/[,\[\]\{\}]/,Ge=/^(?:!|!!|![a-z\-]+!)$/i,Xe=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Qe(t){return Object.prototype.toString.call(t)}function Ke(t){return 10===t||13===t}function Je(t){return 9===t||32===t}function tn(t){return 9===t||32===t||10===t||13===t}function en(t){return 44===t||91===t||93===t||123===t||125===t}function nn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function rn(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function an(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var sn=new Array(256),on=new Array(256),cn=0;cn<256;cn++)sn[cn]=rn(cn)?1:0,on[cn]=rn(cn);function ln(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||$e,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 hn(t,e){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=ce(n),new ae(e,n)}function un(t,e){throw hn(t,e)}function dn(t,e){t.onWarning&&t.onWarning.call(null,hn(t,e))}var pn={YAML:function(t,e,n){var r,i,a;null!==t.version&&un(t,"duplication of %YAML directive"),1!==n.length&&un(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&un(t,"ill-formed argument of the YAML directive"),i=parseInt(r[1],10),a=parseInt(r[2],10),1!==i&&un(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=a<2,1!==a&&2!==a&&dn(t,"unsupported YAML version of the document")},TAG:function(t,e,n){var r,i;2!==n.length&&un(t,"TAG directive accepts exactly two arguments"),r=n[0],i=n[1],Ge.test(r)||un(t,"ill-formed tag handle (first argument) of the TAG directive"),Re.call(t.tagMap,r)&&un(t,'there is a previously declared suffix for "'+r+'" tag handle'),Xe.test(i)||un(t,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch(a){un(t,"tag prefix is malformed: "+i)}t.tagMap[r]=i}};function fn(t,e,n,r){var i,a,s,o;if(e<n){if(o=t.input.slice(e,n),r)for(i=0,a=o.length;i<a;i+=1)9===(s=o.charCodeAt(i))||32<=s&&s<=1114111||un(t,"expected valid JSON character");else He.test(o)&&un(t,"the stream contains non-printable characters");t.result+=o}}function gn(t,e,n,r){var i,a,s,o;for(ne.isObject(n)||un(t,"cannot merge mappings; the provided source object is unacceptable"),s=0,o=(i=Object.keys(n)).length;s<o;s+=1)a=i[s],Re.call(e,a)||(e[a]=n[a],r[a]=!0)}function yn(t,e,n,r,i,a,s,o,c){var l,h;if(Array.isArray(i))for(l=0,h=(i=Array.prototype.slice.call(i)).length;l<h;l+=1)Array.isArray(i[l])&&un(t,"nested arrays are not supported inside keys"),"object"==typeof i&&"[object Object]"===Qe(i[l])&&(i[l]="[object Object]");if("object"==typeof i&&"[object Object]"===Qe(i)&&(i="[object Object]"),i=String(i),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(a))for(l=0,h=a.length;l<h;l+=1)gn(t,e,a[l],n);else gn(t,e,a,n);else t.json||Re.call(n,i)||!Re.call(e,i)||(t.line=s||t.line,t.lineStart=o||t.lineStart,t.position=c||t.position,un(t,"duplicated mapping key")),"__proto__"===i?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[i]=a,delete n[i];return e}function mn(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):un(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function bn(t,e,n){for(var r=0,i=t.input.charCodeAt(t.position);0!==i;){for(;Je(i);)9===i&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&35===i)do{i=t.input.charCodeAt(++t.position)}while(10!==i&&13!==i&&0!==i);if(!Ke(i))break;for(mn(t),i=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===i;)t.lineIndent++,i=t.input.charCodeAt(++t.position)}return-1!==n&&0!==r&&t.lineIndent<n&&dn(t,"deficient indentation"),r}function _n(t){var e,n=t.position;return!(45!==(e=t.input.charCodeAt(n))&&46!==e||e!==t.input.charCodeAt(n+1)||e!==t.input.charCodeAt(n+2)||(n+=3,0!==(e=t.input.charCodeAt(n))&&!tn(e)))}function xn(t,e){1===e?t.result+=" ":e>1&&(t.result+=ne.repeat("\n",e-1))}function vn(t,e){var n,r,i=t.tag,a=t.anchor,s=[],o=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=s),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,un(t,"tab characters must not be used in indentation")),45===r)&&tn(t.input.charCodeAt(t.position+1));)if(o=!0,t.position++,bn(t,!0,-1)&&t.lineIndent<=e)s.push(null),r=t.input.charCodeAt(t.position);else if(n=t.line,Cn(t,e,je,!1,!0),s.push(t.result),bn(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>e)&&0!==r)un(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!o&&(t.tag=i,t.anchor=a,t.kind="sequence",t.result=s,!0)}function kn(t){var e,n,r,i,a=!1,s=!1;if(33!==(i=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&un(t,"duplication of a tag property"),60===(i=t.input.charCodeAt(++t.position))?(a=!0,i=t.input.charCodeAt(++t.position)):33===i?(s=!0,n="!!",i=t.input.charCodeAt(++t.position)):n="!",e=t.position,a){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&62!==i);t.position<t.length?(r=t.input.slice(e,t.position),i=t.input.charCodeAt(++t.position)):un(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!tn(i);)33===i&&(s?un(t,"tag suffix cannot contain exclamation marks"):(n=t.input.slice(e-1,t.position+1),Ge.test(n)||un(t,"named tag handle cannot contain such characters"),s=!0,e=t.position+1)),i=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),Ve.test(r)&&un(t,"tag suffix cannot contain flow indicator characters")}r&&!Xe.test(r)&&un(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(o){un(t,"tag name is malformed: "+r)}return a?t.tag=r:Re.call(t.tagMap,n)?t.tag=t.tagMap[n]+r:"!"===n?t.tag="!"+r:"!!"===n?t.tag="tag:yaml.org,2002:"+r:un(t,'undeclared tag handle "'+n+'"'),!0}function wn(t){var e,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&un(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!tn(n)&&!en(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&un(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Cn(t,e,n,r,i){var a,s,o,c,l,h,u,d,p,f=1,g=!1,y=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=o=Ye===n||je===n,r&&bn(t,!0,-1)&&(g=!0,t.lineIndent>e?f=1:t.lineIndent===e?f=0:t.lineIndent<e&&(f=-1)),1===f)for(;kn(t)||wn(t);)bn(t,!0,-1)?(g=!0,o=a,t.lineIndent>e?f=1:t.lineIndent===e?f=0:t.lineIndent<e&&(f=-1)):o=!1;if(o&&(o=g||i),1!==f&&Ye!==n||(d=Ze===n||Pe===n?e:e+1,p=t.position-t.lineStart,1===f?o&&(vn(t,p)||function(t,e,n){var r,i,a,s,o,c,l,h=t.tag,u=t.anchor,d={},p=Object.create(null),f=null,g=null,y=null,m=!1,b=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),l=t.input.charCodeAt(t.position);0!==l;){if(m||-1===t.firstTabInLine||(t.position=t.firstTabInLine,un(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),a=t.line,63!==l&&58!==l||!tn(r)){if(s=t.line,o=t.lineStart,c=t.position,!Cn(t,n,Pe,!1,!0))break;if(t.line===a){for(l=t.input.charCodeAt(t.position);Je(l);)l=t.input.charCodeAt(++t.position);if(58===l)tn(l=t.input.charCodeAt(++t.position))||un(t,"a whitespace character is expected after the key-value separator within a block mapping"),m&&(yn(t,d,p,f,g,null,s,o,c),f=g=y=null),b=!0,m=!1,i=!1,f=t.tag,g=t.result;else{if(!b)return t.tag=h,t.anchor=u,!0;un(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!b)return t.tag=h,t.anchor=u,!0;un(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===l?(m&&(yn(t,d,p,f,g,null,s,o,c),f=g=y=null),b=!0,m=!0,i=!0):m?(m=!1,i=!0):un(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,l=r;if((t.line===a||t.lineIndent>e)&&(m&&(s=t.line,o=t.lineStart,c=t.position),Cn(t,e,Ye,!0,i)&&(m?g=t.result:y=t.result),m||(yn(t,d,p,f,g,y,s,o,c),f=g=y=null),bn(t,!0,-1),l=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&0!==l)un(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return m&&yn(t,d,p,f,g,null,s,o,c),b&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),b}(t,p,d))||function(t,e){var n,r,i,a,s,o,c,l,h,u,d,p,f=!0,g=t.tag,y=t.anchor,m=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))s=93,l=!1,a=[];else{if(123!==p)return!1;s=125,l=!0,a={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),p=t.input.charCodeAt(++t.position);0!==p;){if(bn(t,!0,e),(p=t.input.charCodeAt(t.position))===s)return t.position++,t.tag=g,t.anchor=y,t.kind=l?"mapping":"sequence",t.result=a,!0;f?44===p&&un(t,"expected the node content, but found ','"):un(t,"missed comma between flow collection entries"),d=null,o=c=!1,63===p&&tn(t.input.charCodeAt(t.position+1))&&(o=c=!0,t.position++,bn(t,!0,e)),n=t.line,r=t.lineStart,i=t.position,Cn(t,e,Ze,!1,!0),u=t.tag,h=t.result,bn(t,!0,e),p=t.input.charCodeAt(t.position),!c&&t.line!==n||58!==p||(o=!0,p=t.input.charCodeAt(++t.position),bn(t,!0,e),Cn(t,e,Ze,!1,!0),d=t.result),l?yn(t,a,m,u,h,d,n,r,i):o?a.push(yn(t,null,m,u,h,d,n,r,i)):a.push(h),bn(t,!0,e),44===(p=t.input.charCodeAt(t.position))?(f=!0,p=t.input.charCodeAt(++t.position)):f=!1}un(t,"unexpected end of the stream within a flow collection")}(t,d)?y=!0:(s&&function(t,e){var n,r,i,a,s,o=ze,c=!1,l=!1,h=e,u=0,d=!1;if(124===(a=t.input.charCodeAt(t.position)))r=!1;else{if(62!==a)return!1;r=!0}for(t.kind="scalar",t.result="";0!==a;)if(43===(a=t.input.charCodeAt(++t.position))||45===a)ze===o?o=43===a?We:Ue:un(t,"repeat of a chomping mode identifier");else{if(!((i=48<=(s=a)&&s<=57?s-48:-1)>=0))break;0===i?un(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?un(t,"repeat of an indentation width identifier"):(h=e+i-1,l=!0)}if(Je(a)){do{a=t.input.charCodeAt(++t.position)}while(Je(a));if(35===a)do{a=t.input.charCodeAt(++t.position)}while(!Ke(a)&&0!==a)}for(;0!==a;){for(mn(t),t.lineIndent=0,a=t.input.charCodeAt(t.position);(!l||t.lineIndent<h)&&32===a;)t.lineIndent++,a=t.input.charCodeAt(++t.position);if(!l&&t.lineIndent>h&&(h=t.lineIndent),Ke(a))u++;else{if(t.lineIndent<h){o===We?t.result+=ne.repeat("\n",c?1+u:u):o===ze&&c&&(t.result+="\n");break}for(r?Je(a)?(d=!0,t.result+=ne.repeat("\n",c?1+u:u)):d?(d=!1,t.result+=ne.repeat("\n",u+1)):0===u?c&&(t.result+=" "):t.result+=ne.repeat("\n",u):t.result+=ne.repeat("\n",c?1+u:u),c=!0,l=!0,u=0,n=t.position;!Ke(a)&&0!==a;)a=t.input.charCodeAt(++t.position);fn(t,n,t.position,!1)}}return!0}(t,d)||function(t,e){var n,r,i;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(fn(t,r,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,i=t.position}else Ke(n)?(fn(t,r,i,!0),xn(t,bn(t,!1,e)),r=i=t.position):t.position===t.lineStart&&_n(t)?un(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);un(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var n,r,i,a,s,o,c;if(34!==(o=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=r=t.position;0!==(o=t.input.charCodeAt(t.position));){if(34===o)return fn(t,n,t.position,!0),t.position++,!0;if(92===o){if(fn(t,n,t.position,!0),Ke(o=t.input.charCodeAt(++t.position)))bn(t,!1,e);else if(o<256&&sn[o])t.result+=on[o],t.position++;else if((s=120===(c=o)?2:117===c?4:85===c?8:0)>0){for(i=s,a=0;i>0;i--)(s=nn(o=t.input.charCodeAt(++t.position)))>=0?a=(a<<4)+s:un(t,"expected hexadecimal character");t.result+=an(a),t.position++}else un(t,"unknown escape sequence");n=r=t.position}else Ke(o)?(fn(t,n,r,!0),xn(t,bn(t,!1,e)),n=r=t.position):t.position===t.lineStart&&_n(t)?un(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}un(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?y=!0:!function(t){var e,n,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!tn(r)&&!en(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&un(t,"name of an alias node must contain at least one character"),n=t.input.slice(e,t.position),Re.call(t.anchorMap,n)||un(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],bn(t,!0,-1),!0}(t)?function(t,e,n){var r,i,a,s,o,c,l,h,u=t.kind,d=t.result;if(tn(h=t.input.charCodeAt(t.position))||en(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)&&(tn(r=t.input.charCodeAt(t.position+1))||n&&en(r)))return!1;for(t.kind="scalar",t.result="",i=a=t.position,s=!1;0!==h;){if(58===h){if(tn(r=t.input.charCodeAt(t.position+1))||n&&en(r))break}else if(35===h){if(tn(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&_n(t)||n&&en(h))break;if(Ke(h)){if(o=t.line,c=t.lineStart,l=t.lineIndent,bn(t,!1,-1),t.lineIndent>=e){s=!0,h=t.input.charCodeAt(t.position);continue}t.position=a,t.line=o,t.lineStart=c,t.lineIndent=l;break}}s&&(fn(t,i,a,!1),xn(t,t.line-o),i=a=t.position,s=!1),Je(h)||(a=t.position+1),h=t.input.charCodeAt(++t.position)}return fn(t,i,a,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Ze===n)&&(y=!0,null===t.tag&&(t.tag="?")):(y=!0,null===t.tag&&null===t.anchor||un(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===f&&(y=o&&vn(t,p))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&un(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),c=0,l=t.implicitTypes.length;c<l;c+=1)if((u=t.implicitTypes[c]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Re.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,c=0,l=(h=t.typeMap.multi[t.kind||"fallback"]).length;c<l;c+=1)if(t.tag.slice(0,h[c].tag.length)===h[c].tag){u=h[c];break}u||un(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&un(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)):un(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||y}function En(t){var e,n,r,i,a=t.position,s=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(i=t.input.charCodeAt(t.position))&&(bn(t,!0,-1),i=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==i));){for(s=!0,i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!tn(i);)i=t.input.charCodeAt(++t.position);for(r=[],(n=t.input.slice(e,t.position)).length<1&&un(t,"directive name must not be less than one character in length");0!==i;){for(;Je(i);)i=t.input.charCodeAt(++t.position);if(35===i){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&!Ke(i));break}if(Ke(i))break;for(e=t.position;0!==i&&!tn(i);)i=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==i&&mn(t),Re.call(pn,n)?pn[n](t,n,r):dn(t,'unknown document directive "'+n+'"')}bn(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,bn(t,!0,-1)):s&&un(t,"directives end mark is expected"),Cn(t,t.lineIndent-1,Ye,!1,!0),bn(t,!0,-1),t.checkLineBreaks&&qe.test(t.input.slice(a,t.position))&&dn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&_n(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,bn(t,!0,-1)):t.position<t.length-1&&un(t,"end of the stream or a document separator is expected")}function Tn(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new ln(t,e),r=t.indexOf("\0");for(-1!==r&&(n.position=r,un(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)En(n);return n.documents}var Sn=fe,An={loadAll:function(t,e,n){null!==e&&"object"==typeof e&&void 0===n&&(n=e,e=null);var r=Tn(t,n);if("function"!=typeof e)return r;for(var i=0,a=r.length;i<a;i+=1)e(r[i])},load:function(t,e){var n=Tn(t,e);if(0!==n.length){if(1===n.length)return n[0];throw new ae("expected a single document in the stream, but found more")}}}.load;const Ln=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;const Bn=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Nn=/\s*%%.*\n/gm,Dn={},On=function(t,e){t=t.replace(Ln,"").replace(Bn,"").replace(Nn,"\n");for(const[n,{detector:r}]of Object.entries(Dn)){if(r(t,e))return n}throw new Error(`No diagram type detected for text: ${t}`)},Mn=(...t)=>{for(const{id:e,detector:n,loader:r}of t)In(e,n,r)},In=(t,e,n)=>{Dn[t]?Bt.error(`Detector with key ${t} already exists`):Dn[t]={detector:e,loader:n},Bt.debug(`Detector with key ${t} added${n?" with loader":""}`)},Fn=function(t,e,n){const{depth:r,clobber:i}=Object.assign({depth:2,clobber:!1},n);return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Fn(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||r<=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]?(i||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Fn(t[n],e[n],{depth:r-1,clobber:i}))})),t)},$n=Fn,Rn={curveBasis:o.$0Z,curveBasisClosed:o.Dts,curveBasisOpen:o.WQY,curveBumpX:o.qpX,curveBumpY:o.u93,curveBundle:o.tFB,curveCardinalClosed:o.OvA,curveCardinalOpen:o.dCK,curveCardinal:o.YY7,curveCatmullRomClosed:o.fGX,curveCatmullRomOpen:o.$m7,curveCatmullRom:o.zgE,curveLinear:o.c_6,curveLinearClosed:o.fxm,curveMonotoneX:o.FdL,curveMonotoneY:o.ak_,curveNatural:o.SxZ,curveStep:o.eA_,curveStepAfter:o.jsv,curveStepBefore:o.iJ},Zn=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Pn=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,jn=function(t,e=null){try{const n=new RegExp(`[%]{2}(?![{]${Pn.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(n,"").replace(/'/gm,'"'),Bt.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const i=[];for(;null!==(r=Zn.exec(t));)if(r.index===Zn.lastIndex&&Zn.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;i.push({type:t,args:e})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return Bt.error(`ERROR: ${n.message} - Unable to parse directive\n ${null!==e?" type:"+e:""} based on the text:${t}`),{type:null,args:null}}};function Yn(t,e){if(!t)return e;const n=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Rn[n]||e}function zn(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}function Un(t){let e="",n="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?n=n+r+";":e=e+r+";");return{style:e,labelStyle:n}}let Wn=0;const Hn=()=>(Wn++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Wn);const qn=t=>function(t){let e="";const n="0123456789abcdef";for(let r=0;r<t;r++)e+=n.charAt(Math.floor(16*Math.random()));return e}(t.length),Vn=function(t,e){const n=e.text.replace(jt.lineBreakRegex," "),[,r]=ir(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",r),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class);const a=i.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.attr("fill",e.fill),a.text(n),i},Gn=(0,v.Z)(((t,e,n)=>{if(!t)return t;if(n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},n),jt.lineBreakRegex.test(t))return t;const r=t.split(" "),i=[];let a="";return r.forEach(((t,s)=>{const o=Kn(`${t} `,n),c=Kn(a,n);if(o>e){const{hyphenatedStrings:r,remainingWord:s}=Xn(t,e,"-",n);i.push(a,...r),a=s}else c+o>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");s+1===r.length&&i.push(a)})),i.filter((t=>""!==t)).join(n.joinWith)}),((t,e,n)=>`${t}${e}${n.fontSize}${n.fontWeight}${n.fontFamily}${n.joinWith}`)),Xn=(0,v.Z)(((t,e,n="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const i=[...t],a=[];let s="";return i.forEach(((t,o)=>{const c=`${s}${t}`;if(Kn(c,r)>=e){const t=o+1,e=i.length===t,r=`${c}${n}`;a.push(e?c:r),s=""}else s=c})),{hyphenatedStrings:a,remainingWord:s}}),((t,e,n="-",r)=>`${t}${e}${n}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function Qn(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),Jn(t,e).height}function Kn(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),Jn(t,e).width}const Jn=(0,v.Z)(((t,e)=>{e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e);const{fontSize:n,fontFamily:r,fontWeight:i}=e;if(!t)return{width:0,height:0};const[,a]=ir(n),s=["sans-serif",r],c=t.split(jt.lineBreakRegex),l=[],h=(0,o.Ys)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const o of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const n of c){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};r.text=n;const s=Vn(u,r).style("font-size",a).style("font-weight",i).style("font-family",o),c=(s._groups||s)[0][0].getBBox();e.width=Math.round(Math.max(e.width,c.width)),t=Math.round(c.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}l.push(e)}u.remove();return l[isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let tr;const er=t=>{if(Bt.debug("directiveSanitizer called with",t),"object"==typeof t&&(t.length?t.forEach((t=>er(t))):Object.keys(t).forEach((e=>{Bt.debug("Checking key",e),e.startsWith("__")&&(Bt.debug("sanitize deleting __ option",e),delete t[e]),e.includes("proto")&&(Bt.debug("sanitize deleting proto option",e),delete t[e]),e.includes("constr")&&(Bt.debug("sanitize deleting constr option",e),delete t[e]),e.includes("themeCSS")&&(Bt.debug("sanitizing themeCss option"),t[e]=nr(t[e])),e.includes("fontFamily")&&(Bt.debug("sanitizing fontFamily option"),t[e]=nr(t[e])),e.includes("altFontFamily")&&(Bt.debug("sanitizing altFontFamily option"),t[e]=nr(t[e])),Jt.includes(e)?"object"==typeof t[e]&&(Bt.debug("sanitize deleting object",e),er(t[e])):(Bt.debug("sanitize deleting option",e),delete t[e])}))),t.themeVariables){const e=Object.keys(t.themeVariables);for(const n of e){const e=t.themeVariables[n];e&&e.match&&!e.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[n]="")}}Bt.debug("After sanitization",t)},nr=t=>{let e=0,n=0;for(const r of t){if(e<n)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&n++}return e!==n?"{ /* ERROR: Unbalanced CSS */ }":t};function rr(t){return"str"in t}const ir=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]},ar={assignWithDepth:$n,wrapLabel:Gn,calculateTextHeight:Qn,calculateTextWidth:Kn,calculateTextDimensions:Jn,detectInit:function(t,e){const n=jn(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(n)){const t=n.map((t=>t.args));er(t),r=$n(r,[...t])}else r=n.args;if(r){let n=On(t,e);["config"].forEach((t=>{void 0!==r[t]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[t],delete r[t])}))}return r},detectDirective:jn,isSubstringInArray:function(t,e){for(const[n,r]of e.entries())if(r.match(t))return n;return-1},interpolateToCurve:Yn,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,n=0;t.forEach((t=>{n+=zn(t,e),e=t}));let r,i=n/2;return e=void 0,t.forEach((t=>{if(e&&!r){const n=zn(t,e);if(n<i)i-=n;else{const a=i/n;a<=0&&(r=e),a>=1&&(r={x:t.x,y:t.y}),a>0&&a<1&&(r={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),r}(t)},calcCardinalityPosition:(t,e,n)=>{let r;Bt.info(`our points ${JSON.stringify(e)}`),e[0]!==n&&(e=e.reverse());let i,a=25;r=void 0,e.forEach((t=>{if(r&&!i){const e=zn(t,r);if(e<a)a-=e;else{const n=a/e;n<=0&&(i=r),n>=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));const s=t?10:5,o=Math.atan2(e[0].y-i.y,e[0].x-i.x),c={x:0,y:0};return c.x=Math.sin(o)*s+(e[0].x+i.x)/2,c.y=-Math.cos(o)*s+(e[0].y+i.y)/2,c},calcTerminalLabelPosition:function(t,e,n){let r,i=JSON.parse(JSON.stringify(n));Bt.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((t=>{r=t}));let a,s=25+t;r=void 0,i.forEach((t=>{if(r&&!a){const e=zn(t,r);if(e<s)s-=e;else{const n=s/e;n<=0&&(a=r),n>=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));const o=10+.5*t,c=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(c)*o+(i[0].x+a.x)/2,l.y=-Math.cos(c)*o+(i[0].y+a.y)/2,"start_left"===e&&(l.x=Math.sin(c+Math.PI)*o+(i[0].x+a.x)/2,l.y=-Math.cos(c+Math.PI)*o+(i[0].y+a.y)/2),"end_right"===e&&(l.x=Math.sin(c-Math.PI)*o+(i[0].x+a.x)/2-5,l.y=-Math.cos(c-Math.PI)*o+(i[0].y+a.y)/2-5),"end_left"===e&&(l.x=Math.sin(c)*o+(i[0].x+a.x)/2-5,l.y=-Math.cos(c)*o+(i[0].y+a.y)/2-5),l},formatUrl:function(t,e){const n=t.trim();if(n)return"loose"!==e.securityLevel?(0,s.Nm)(n):n},getStylesFromArray:Un,generateId:Hn,random:qn,runFunc:(t,...e)=>{const n=t.split("."),r=n.length-1,i=n[r];let a=window;for(let s=0;s<r;s++)if(a=a[n[s]],!a)return;a[i](...e)},entityDecode:function(t){return tr=tr||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),tr.innerHTML=t,unescape(tr.textContent)},initIdGenerator:class{constructor(t,e){this.deterministic=t,this.seed=e,this.count=e?e.length:0}next(){return this.deterministic?this.count++:Date.now()}},directiveSanitizer:er,sanitizeCss:nr,insertTitle:(t,e,n,r)=>{if(!r)return;const i=t.node().getBBox();t.append("text").text(r).attr("x",i.x+i.width/2).attr("y",-n).attr("class",e)},parseFontSize:ir},sr="9.4.3",or=Object.freeze(te);let cr,lr=$n({},or),hr=[],ur=$n({},or);const dr=(t,e)=>{let n=$n({},t),r={};for(const i of e)yr(i),r=$n(r,i);if(n=$n(n,r),r.theme&&r.theme in Xt){const t=$n({},cr),e=$n(t.themeVariables||{},r.themeVariables);n.theme&&n.theme in Xt&&(n.themeVariables=Xt[n.theme].getThemeVariables(e))}return ur=n,vr(ur),ur},pr=()=>$n({},lr),fr=t=>(vr(t),$n(ur,t),gr()),gr=()=>$n({},ur),yr=t=>{["secure",...lr.secure??[]].forEach((e=>{void 0!==t[e]&&(Bt.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{0===e.indexOf("__")&&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]&&yr(t[e])}))},mr=t=>{t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),hr.push(t),dr(lr,hr)},br=(t=lr)=>{hr=[],dr(t,hr)};var _r=(t=>(t.LAZY_LOAD_DEPRECATED="The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",t))(_r||{});const xr={},vr=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(xr[e="LAZY_LOAD_DEPRECATED"]||(Bt.warn(_r[e]),xr[e]=!0)))},kr=function(t,e,n,r){const i=function(t,e,n){let r=new Map;return n?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,n,r);!function(t,e){for(let n of e)t.attr(n[0],n[1])}(t,i)},wr=function(t,e,n,r){const i=e.node().getBBox(),a=i.width,s=i.height;Bt.info(`SVG bounds: ${a}x${s}`,i);let o=0,c=0;Bt.info(`Graph bounds: ${o}x${c}`,t),o=a+2*n,c=s+2*n,Bt.info(`Calculated bounds: ${o}x${c}`),kr(e,c,o,r);const l=`${i.x-n} ${i.y-n} ${i.width+2*n} ${i.height+2*n}`;e.attr("viewBox",l)},Cr=t=>`g.classGroup text {\n fill: ${t.nodeBorder};\n fill: ${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: 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: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ${t.mainBkg} !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}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`,Er=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`,Tr=()=>"",Sr=t=>`.label {\n font-family: ${t.fontFamily};\n color: ${t.nodeTextColor||t.textColor};\n }\n .cluster-label text {\n fill: ${t.titleColor};\n }\n .cluster-label span {\n color: ${t.titleColor};\n }\n\n .label text,span {\n fill: ${t.nodeTextColor||t.textColor};\n color: ${t.nodeTextColor||t.textColor};\n }\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 .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${t.clusterBkg};\n stroke: ${t.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n .cluster span {\n color: ${t.titleColor};\n }\n /* .cluster div {\n color: ${t.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${t.fontFamily};\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.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: ${t.textColor};\n }\n`,Ar=t=>`\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ${t.ganttFontSize};\n // }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n // font-size: ${t.ganttFontSize};\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n // font-size: ${t.ganttFontSize};\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor} ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n`,Lr=()=>"",Br=t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`,Nr=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: 100%;\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: 100%;\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`,Dr=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,Or=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`,Mr=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\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 .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,Ir=t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,Fr={flowchart:Sr,"flowchart-v2":Sr,sequence:Dr,gantt:Ar,classDiagram:Cr,"classDiagram-v2":Cr,class:Cr,stateDiagram:Or,state:Or,info:Lr,pie:Br,er:Er,error:Tr,journey:Mr,requirement:Nr,c4:Ir},$r=(t,e,n)=>{let r="";return t in Fr&&Fr[t]?r=Fr[t](n):Bt.warn(`No theme found for ${t}`),` & {\n font-family: ${n.fontFamily};\n font-size: ${n.fontSize};\n fill: ${n.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${n.errorBkgColor};\n }\n & .error-text {\n fill: ${n.errorTextColor};\n stroke: ${n.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: ${n.lineColor};\n stroke: ${n.lineColor};\n }\n & .marker.cross {\n stroke: ${n.lineColor};\n }\n\n & svg {\n font-family: ${n.fontFamily};\n font-size: ${n.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let Rr="",Zr="",Pr="";const jr=t=>It(t,gr()),Yr=function(){Rr="",Pr="",Zr=""},zr=function(t){Rr=jr(t).replace(/^\s+/g,"")},Ur=function(){return Rr||Zr},Wr=function(t){Pr=jr(t).replace(/\n\s+/g,"\n")},Hr=function(){return Pr},qr=function(t){Zr=jr(t)},Vr=function(){return Zr},Gr={setAccTitle:zr,getAccTitle:Ur,setDiagramTitle:qr,getDiagramTitle:Vr,getAccDescription:Hr,setAccDescription:Wr,clear:Yr},Xr=Object.freeze(Object.defineProperty({__proto__:null,clear:Yr,default:Gr,getAccDescription:Hr,getAccTitle:Ur,getDiagramTitle:Vr,setAccDescription:Wr,setAccTitle:zr,setDiagramTitle:qr},Symbol.toStringTag,{value:"Module"}));let Qr={};const Kr=function(t,e,n,r){Bt.debug("parseDirective is being called",e,n,r);try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Qr={};break;case"type_directive":if(!Qr)throw new Error("currentDirective is undefined");Qr.type=e.toLowerCase();break;case"arg_directive":if(!Qr)throw new Error("currentDirective is undefined");Qr.args=JSON.parse(e);break;case"close_directive":Jr(t,Qr,r),Qr=void 0}}catch(i){Bt.error(`Error while rendering sequenceDiagram directive: ${e} jison context: ${n}`),Bt.error(i.message)}},Jr=function(t,e,n){switch(Bt.info(`Directive type=${e.type} with args:`,e.args),e.type){case"init":case"initialize":["config"].forEach((t=>{void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),Bt.info("sanitize in handleDirective",e.args),er(e.args),Bt.info("sanitize in handleDirective (done)",e.args),mr(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":Bt.warn("themeCss encountered");break;default:Bt.warn(`Unhandled directive: source: '%%{${e.type}: ${JSON.stringify(e.args?e.args:{})}}%%`,e)}},ti=Bt,ei=Nt,ni=gr,ri=t=>It(t,ni()),ii=wr,ai=(t,e,n,r)=>Kr(t,e,n,r),si={},oi=(t,e,n)=>{if(si[t])throw new Error(`Diagram ${t} already registered.`);var r,i;si[t]=e,n&&In(t,n),r=t,i=e.styles,Fr[r]=i,e.injectUtils&&e.injectUtils(ti,ei,ni,ri,ii,Xr,ai)},ci=t=>{if(t in si)return si[t];throw new Error(`Diagram ${t} not found.`)};var li=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,4],r=[1,7],i=[1,5],a=[1,9],s=[1,6],o=[2,6],c=[1,16],l=[6,8,14,20,22,24,25,27,29,32,37,40,50,55],h=[8,14,20,22,24,25,27,29,32,37,40],u=[8,13,14,20,22,24,25,27,29,32,37,40],d=[1,26],p=[6,8,14,50,55],f=[8,14,55],g=[1,53],y=[1,52],m=[8,14,30,33,35,38,55],b=[1,67],_=[1,68],x=[1,69],v=[8,14,33,35,42,55],k={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ref:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR: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,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,ID:54,";":55,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:"ID",55:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[28,1],[28,1],[4,1],[4,1],[4,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 3:return a[o];case 4:return a[o-1];case 5:return r.setDirection(a[o-3]),a[o-1];case 7:r.setOptions(a[o-1]),this.$=a[o];break;case 8:a[o-1]+=a[o],this.$=a[o-1];break;case 10:this.$=[];break;case 11:a[o-1].push(a[o]),this.$=a[o-1];break;case 12:this.$=a[o-1];break;case 17:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 22:r.checkout(a[o]);break;case 23:r.branch(a[o]);break;case 24:r.branch(a[o-2],a[o]);break;case 25:r.cherryPick(a[o],"",void 0);break;case 26:r.cherryPick(a[o-2],"",a[o]);break;case 27:case 29:r.cherryPick(a[o-2],"","");break;case 28:r.cherryPick(a[o],"",a[o-2]);break;case 30:r.merge(a[o],"","","");break;case 31:r.merge(a[o-2],a[o],"","");break;case 32:r.merge(a[o-2],"",a[o],"");break;case 33:r.merge(a[o-2],"","",a[o]);break;case 34:r.merge(a[o-4],a[o],"",a[o-2]);break;case 35:r.merge(a[o-4],"",a[o],a[o-2]);break;case 36:r.merge(a[o-4],"",a[o-2],a[o]);break;case 37:r.merge(a[o-4],a[o-2],a[o],"");break;case 38:r.merge(a[o-4],a[o-2],"",a[o]);break;case 39:r.merge(a[o-4],a[o],a[o-2],"");break;case 40:r.merge(a[o-6],a[o-4],a[o-2],a[o]);break;case 41:r.merge(a[o-6],a[o],a[o-4],a[o-2]);break;case 42:r.merge(a[o-6],a[o-4],a[o],a[o-2]);break;case 43:r.merge(a[o-6],a[o-2],a[o-4],a[o]);break;case 44:r.merge(a[o-6],a[o],a[o-2],a[o-4]);break;case 45:r.merge(a[o-6],a[o-2],a[o],a[o-4]);break;case 46:r.commit(a[o]);break;case 47:r.commit("","",r.commitType.NORMAL,a[o]);break;case 48:r.commit("","",a[o],"");break;case 49:r.commit("","",a[o],a[o-2]);break;case 50:r.commit("","",a[o-2],a[o]);break;case 51:r.commit("",a[o],r.commitType.NORMAL,"");break;case 52:r.commit("",a[o-2],r.commitType.NORMAL,a[o]);break;case 53:r.commit("",a[o],r.commitType.NORMAL,a[o-2]);break;case 54:r.commit("",a[o-2],a[o],"");break;case 55:r.commit("",a[o],a[o-2],"");break;case 56:r.commit("",a[o-4],a[o-2],a[o]);break;case 57:r.commit("",a[o-4],a[o],a[o-2]);break;case 58:r.commit("",a[o-2],a[o-4],a[o]);break;case 59:r.commit("",a[o],a[o-4],a[o-2]);break;case 60:r.commit("",a[o],a[o-2],a[o-4]);break;case 61:r.commit("",a[o-2],a[o],a[o-4]);break;case 62:r.commit(a[o],"",r.commitType.NORMAL,"");break;case 63:r.commit(a[o],"",r.commitType.NORMAL,a[o-2]);break;case 64:r.commit(a[o-2],"",r.commitType.NORMAL,a[o]);break;case 65:r.commit(a[o-2],"",a[o],"");break;case 66:r.commit(a[o],"",a[o-2],"");break;case 67:r.commit(a[o],a[o-2],r.commitType.NORMAL,"");break;case 68:r.commit(a[o-2],a[o],r.commitType.NORMAL,"");break;case 69:r.commit(a[o-4],"",a[o-2],a[o]);break;case 70:r.commit(a[o-4],"",a[o],a[o-2]);break;case 71:r.commit(a[o-2],"",a[o-4],a[o]);break;case 72:r.commit(a[o],"",a[o-4],a[o-2]);break;case 73:r.commit(a[o],"",a[o-2],a[o-4]);break;case 74:r.commit(a[o-2],"",a[o],a[o-4]);break;case 75:r.commit(a[o-4],a[o],a[o-2],"");break;case 76:r.commit(a[o-4],a[o-2],a[o],"");break;case 77:r.commit(a[o-2],a[o],a[o-4],"");break;case 78:r.commit(a[o],a[o-2],a[o-4],"");break;case 79:r.commit(a[o],a[o-4],a[o-2],"");break;case 80:r.commit(a[o-2],a[o-4],a[o],"");break;case 81:r.commit(a[o-4],a[o],r.commitType.NORMAL,a[o-2]);break;case 82:r.commit(a[o-4],a[o-2],r.commitType.NORMAL,a[o]);break;case 83:r.commit(a[o-2],a[o],r.commitType.NORMAL,a[o-4]);break;case 84:r.commit(a[o],a[o-2],r.commitType.NORMAL,a[o-4]);break;case 85:r.commit(a[o],a[o-4],r.commitType.NORMAL,a[o-2]);break;case 86:r.commit(a[o-2],a[o-4],r.commitType.NORMAL,a[o]);break;case 87:r.commit(a[o-6],a[o-4],a[o-2],a[o]);break;case 88:r.commit(a[o-6],a[o-4],a[o],a[o-2]);break;case 89:r.commit(a[o-6],a[o-2],a[o-4],a[o]);break;case 90:r.commit(a[o-6],a[o],a[o-4],a[o-2]);break;case 91:r.commit(a[o-6],a[o-2],a[o],a[o-4]);break;case 92:r.commit(a[o-6],a[o],a[o-2],a[o-4]);break;case 93:r.commit(a[o-4],a[o-6],a[o-2],a[o]);break;case 94:r.commit(a[o-4],a[o-6],a[o],a[o-2]);break;case 95:r.commit(a[o-2],a[o-6],a[o-4],a[o]);break;case 96:r.commit(a[o],a[o-6],a[o-4],a[o-2]);break;case 97:r.commit(a[o-2],a[o-6],a[o],a[o-4]);break;case 98:r.commit(a[o],a[o-6],a[o-2],a[o-4]);break;case 99:r.commit(a[o],a[o-4],a[o-2],a[o-6]);break;case 100:r.commit(a[o-2],a[o-4],a[o],a[o-6]);break;case 101:r.commit(a[o],a[o-2],a[o-4],a[o-6]);break;case 102:r.commit(a[o-2],a[o],a[o-4],a[o-6]);break;case 103:r.commit(a[o-4],a[o-2],a[o],a[o-6]);break;case 104:r.commit(a[o-4],a[o],a[o-2],a[o-6]);break;case 105:r.commit(a[o-2],a[o-4],a[o-6],a[o]);break;case 106:r.commit(a[o],a[o-4],a[o-6],a[o-2]);break;case 107:r.commit(a[o-2],a[o],a[o-6],a[o-4]);break;case 108:r.commit(a[o],a[o-2],a[o-6],a[o-4]);break;case 109:r.commit(a[o-4],a[o-2],a[o-6],a[o]);break;case 110:r.commit(a[o-4],a[o],a[o-6],a[o-2]);break;case 111:this.$="";break;case 112:this.$=a[o];break;case 113:this.$=r.commitType.NORMAL;break;case 114:this.$=r.commitType.REVERSE;break;case 115:this.$=r.commitType.HIGHLIGHT;break;case 118:r.parseDirective("%%{","open_directive");break;case 119:r.parseDirective(a[o],"type_directive");break;case 120:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 121:r.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:n,8:r,14:i,46:8,50:a,55:s},{1:[3]},{3:10,4:2,5:3,6:n,8:r,14:i,46:8,50:a,55:s},{3:11,4:2,5:3,6:n,8:r,14:i,46:8,50:a,55:s},{7:12,8:o,9:[1,13],10:[1,14],11:15,14:c},e(l,[2,124]),e(l,[2,125]),e(l,[2,126]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:o,11:15,14:c},{9:[1,21]},e(h,[2,10],{12:22,13:[1,23]}),e(u,[2,9]),{9:[1,25],48:24,53:d},e([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:o,11:15,14:c},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},e(u,[2,8]),e(p,[2,116]),{49:45,52:[1,46]},e(p,[2,121]),{1:[2,4]},{8:[1,47]},e(h,[2,11]),{4:48,8:r,14:i,55:s},e(h,[2,13]),e(f,[2,14]),e(f,[2,15]),e(f,[2,16]),{21:[1,49]},{23:[1,50]},e(f,[2,19]),e(f,[2,20]),e(f,[2,21]),{28:51,34:g,54:y},e(f,[2,111],{41:54,33:[1,57],34:[1,59],35:[1,55],38:[1,56],42:[1,58]}),{28:60,34:g,54:y},{33:[1,61],35:[1,62]},{28:63,34:g,54:y},{48:64,53:d},{53:[2,120]},{1:[2,5]},e(h,[2,12]),e(f,[2,17]),e(f,[2,18]),e(f,[2,22]),e(m,[2,122]),e(m,[2,123]),e(f,[2,46]),{34:[1,65]},{39:66,43:b,44:_,45:x},{34:[1,70]},{34:[1,71]},e(f,[2,112]),e(f,[2,30],{33:[1,72],35:[1,74],38:[1,73]}),{34:[1,75]},{34:[1,76],36:[1,77]},e(f,[2,23],{30:[1,78]}),e(p,[2,117]),e(f,[2,47],{33:[1,80],38:[1,79],42:[1,81]}),e(f,[2,48],{33:[1,83],35:[1,82],42:[1,84]}),e(v,[2,113]),e(v,[2,114]),e(v,[2,115]),e(f,[2,51],{35:[1,85],38:[1,86],42:[1,87]}),e(f,[2,62],{33:[1,90],35:[1,88],38:[1,89]}),{34:[1,91]},{39:92,43:b,44:_,45:x},{34:[1,93]},e(f,[2,25],{35:[1,94]}),{33:[1,95]},{33:[1,96]},{31:[1,97]},{39:98,43:b,44:_,45:x},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{34:[1,103]},{34:[1,104]},{39:105,43:b,44:_,45:x},{34:[1,106]},{34:[1,107]},{39:108,43:b,44:_,45:x},{34:[1,109]},e(f,[2,31],{35:[1,111],38:[1,110]}),e(f,[2,32],{33:[1,113],35:[1,112]}),e(f,[2,33],{33:[1,114],38:[1,115]}),{34:[1,116],36:[1,117]},{34:[1,118]},{34:[1,119]},e(f,[2,24]),e(f,[2,49],{33:[1,120],42:[1,121]}),e(f,[2,53],{38:[1,122],42:[1,123]}),e(f,[2,63],{33:[1,125],38:[1,124]}),e(f,[2,50],{33:[1,126],42:[1,127]}),e(f,[2,55],{35:[1,128],42:[1,129]}),e(f,[2,66],{33:[1,131],35:[1,130]}),e(f,[2,52],{38:[1,132],42:[1,133]}),e(f,[2,54],{35:[1,134],42:[1,135]}),e(f,[2,67],{35:[1,137],38:[1,136]}),e(f,[2,64],{33:[1,139],38:[1,138]}),e(f,[2,65],{33:[1,141],35:[1,140]}),e(f,[2,68],{35:[1,143],38:[1,142]}),{39:144,43:b,44:_,45:x},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{39:149,43:b,44:_,45:x},e(f,[2,26]),e(f,[2,27]),e(f,[2,28]),e(f,[2,29]),{34:[1,150]},{34:[1,151]},{39:152,43:b,44:_,45:x},{34:[1,153]},{39:154,43:b,44:_,45:x},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{34:[1,160]},{34:[1,161]},{39:162,43:b,44:_,45:x},{34:[1,163]},{34:[1,164]},{34:[1,165]},{39:166,43:b,44:_,45:x},{34:[1,167]},{39:168,43:b,44:_,45:x},{34:[1,169]},{34:[1,170]},{34:[1,171]},{39:172,43:b,44:_,45:x},{34:[1,173]},e(f,[2,37],{35:[1,174]}),e(f,[2,38],{38:[1,175]}),e(f,[2,36],{33:[1,176]}),e(f,[2,39],{35:[1,177]}),e(f,[2,34],{38:[1,178]}),e(f,[2,35],{33:[1,179]}),e(f,[2,60],{42:[1,180]}),e(f,[2,73],{33:[1,181]}),e(f,[2,61],{42:[1,182]}),e(f,[2,84],{38:[1,183]}),e(f,[2,74],{33:[1,184]}),e(f,[2,83],{38:[1,185]}),e(f,[2,59],{42:[1,186]}),e(f,[2,72],{33:[1,187]}),e(f,[2,58],{42:[1,188]}),e(f,[2,78],{35:[1,189]}),e(f,[2,71],{33:[1,190]}),e(f,[2,77],{35:[1,191]}),e(f,[2,57],{42:[1,192]}),e(f,[2,85],{38:[1,193]}),e(f,[2,56],{42:[1,194]}),e(f,[2,79],{35:[1,195]}),e(f,[2,80],{35:[1,196]}),e(f,[2,86],{38:[1,197]}),e(f,[2,70],{33:[1,198]}),e(f,[2,81],{38:[1,199]}),e(f,[2,69],{33:[1,200]}),e(f,[2,75],{35:[1,201]}),e(f,[2,76],{35:[1,202]}),e(f,[2,82],{38:[1,203]}),{34:[1,204]},{39:205,43:b,44:_,45:x},{34:[1,206]},{34:[1,207]},{39:208,43:b,44:_,45:x},{34:[1,209]},{34:[1,210]},{34:[1,211]},{34:[1,212]},{39:213,43:b,44:_,45:x},{34:[1,214]},{39:215,43:b,44:_,45:x},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{34:[1,221]},{34:[1,222]},{39:223,43:b,44:_,45:x},{34:[1,224]},{34:[1,225]},{34:[1,226]},{39:227,43:b,44:_,45:x},{34:[1,228]},{39:229,43:b,44:_,45:x},{34:[1,230]},{34:[1,231]},{34:[1,232]},{39:233,43:b,44:_,45:x},e(f,[2,40]),e(f,[2,42]),e(f,[2,41]),e(f,[2,43]),e(f,[2,45]),e(f,[2,44]),e(f,[2,101]),e(f,[2,102]),e(f,[2,99]),e(f,[2,100]),e(f,[2,104]),e(f,[2,103]),e(f,[2,108]),e(f,[2,107]),e(f,[2,106]),e(f,[2,105]),e(f,[2,110]),e(f,[2,109]),e(f,[2,98]),e(f,[2,97]),e(f,[2,96]),e(f,[2,95]),e(f,[2,93]),e(f,[2,94]),e(f,[2,92]),e(f,[2,91]),e(f,[2,90]),e(f,[2,89]),e(f,[2,87]),e(f,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},w=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 34:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 54;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\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,/^(?:#[^\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,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:BT\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:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}},t);function C(){this.yy={}}return k.lexer=w,C.prototype=k,k.Parser=C,new C}();li.parser=li;const hi=li,ui=t=>null!==t.match(/^\s*gitGraph/);let di=gr().gitGraph.mainBranchName,pi=gr().gitGraph.mainBranchOrder,fi={},gi=null,yi={};yi[di]={name:di,order:pi};let mi={};mi[di]=gi;let bi=di,_i="LR",xi=0;function vi(){return qn({length:7})}let ki={};const wi=function(t){if(t=jt.sanitizeText(t,gr()),void 0===mi[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}{bi=t;const e=mi[bi];gi=fi[e]}};function Ci(t,e,n){const r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}function Ei(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));const r=[n,e.id,e.seq];for(let i in mi)mi[i]===e.id&&r.push(i);if(Bt.debug(r.join(" ")),e.parents&&2==e.parents.length){const n=fi[e.parents[0]];Ci(t,e,n),t.push(fi[e.parents[1]])}else{if(0==e.parents.length)return;{const n=fi[e.parents];Ci(t,e,n)}}Ei(t=function(t,e){const n=Object.create(null);return t.reduce(((t,r)=>{const i=e(r);return n[i]||(n[i]=!0,t.push(r)),t}),[])}(t,(t=>t.id)))}const Ti=function(){const t=Object.keys(fi).map((function(t){return fi[t]}));return t.forEach((function(t){Bt.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},Si={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},Ai={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().gitGraph,setDirection:function(t){_i=t},setOptions:function(t){Bt.debug("options str",t),t=(t=t&&t.trim())||"{}";try{ki=JSON.parse(t)}catch(e){Bt.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return ki},commit:function(t,e,n,r){Bt.debug("Entering commit:",t,e,n,r),e=jt.sanitizeText(e,gr()),t=jt.sanitizeText(t,gr()),r=jt.sanitizeText(r,gr());const i={id:e||xi+"-"+vi(),message:t,seq:xi++,type:n||Si.NORMAL,tag:r||"",parents:null==gi?[]:[gi.id],branch:bi};gi=i,fi[i.id]=i,mi[bi]=i.id,Bt.debug("in pushCommit "+i.id)},branch:function(t,e){if(t=jt.sanitizeText(t,gr()),void 0!==mi[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}mi[t]=null!=gi?gi.id:null,yi[t]={name:t,order:e?parseInt(e,10):null},wi(t),Bt.debug("in createBranch")},merge:function(t,e,n,r){t=jt.sanitizeText(t,gr()),e=jt.sanitizeText(e,gr());const i=fi[mi[bi]],a=fi[mi[t]];if(bi===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===i||!i){let e=new Error('Incorrect usage of "merge". Current branch ('+bi+")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===mi[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===a||!a){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(i===a){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!==fi[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+n+r,token:"merge "+t+e+n+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+n+" "+r]},i}const s={id:e||xi+"-"+vi(),message:"merged branch "+t+" into "+bi,seq:xi++,parents:[null==gi?null:gi.id,mi[t]],branch:bi,type:Si.MERGE,customType:n,customId:!!e,tag:r||""};gi=s,fi[s.id]=s,mi[bi]=s.id,Bt.debug(mi),Bt.debug("in mergeBranch")},cherryPick:function(t,e,n){if(Bt.debug("Entering cherryPick:",t,e,n),t=jt.sanitizeText(t,gr()),e=jt.sanitizeText(e,gr()),n=jt.sanitizeText(n,gr()),!t||void 0===fi[t]){let n=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw n.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"]},n}let r=fi[t],i=r.branch;if(r.type===Si.MERGE){let n=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw n.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"]},n}if(!e||void 0===fi[e]){if(i===bi){let n=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw n.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"]},n}const a=fi[mi[bi]];if(void 0===a||!a){let n=new Error('Incorrect usage of "cherry-pick". Current branch ('+bi+")has no commits");throw n.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"]},n}const s={id:xi+"-"+vi(),message:"cherry-picked "+r+" into "+bi,seq:xi++,parents:[null==gi?null:gi.id,r.id],branch:bi,type:Si.CHERRY_PICK,tag:n??"cherry-pick:"+r.id};gi=s,fi[s.id]=s,mi[bi]=s.id,Bt.debug(mi),Bt.debug("in cherryPick")}},checkout:wi,prettyPrint:function(){Bt.debug(fi);Ei([Ti()[0]])},clear:function(){fi={},gi=null;let t=gr().gitGraph.mainBranchName,e=gr().gitGraph.mainBranchOrder;mi={},mi[t]=null,yi={},yi[t]={name:t,order:e},bi=t,xi=0,Yr()},getBranchesAsObjArray:function(){const t=Object.values(yi).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})));return t},getBranches:function(){return mi},getCommits:function(){return fi},getCommitsArray:Ti,getCurrentBranch:function(){return bi},getDirection:function(){return _i},getHead:function(){return gi},setAccTitle:zr,getAccTitle:Ur,getAccDescription:Hr,setAccDescription:Wr,setDiagramTitle:qr,getDiagramTitle:Vr,commitType:Si};let Li={};const Bi=0,Ni=1,Di=2,Oi=3,Mi=4;let Ii={},Fi={},$i=[],Ri=0;const Zi=(t,e,n)=>{const r=ni().gitGraph,i=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels");let s=0;Object.keys(e).sort(((t,n)=>e[t].seq-e[n].seq)).forEach((t=>{const o=e[t],c=Ii[o.branch].pos,l=s+10;if(n){let t,e=void 0!==o.customType&&""!==o.customType?o.customType:o.type;switch(e){case Bi:t="commit-normal";break;case Ni:t="commit-reverse";break;case Di:t="commit-highlight";break;case Oi:t="commit-merge";break;case Mi:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===Di){const e=i.append("rect");e.attr("x",l-10),e.attr("y",c-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${o.id} commit-highlight${Ii[o.branch].index%8} ${t}-outer`),i.append("rect").attr("x",l-6).attr("y",c-6).attr("height",12).attr("width",12).attr("class",`commit ${o.id} commit${Ii[o.branch].index%8} ${t}-inner`)}else if(e===Mi)i.append("circle").attr("cx",l).attr("cy",c).attr("r",10).attr("class",`commit ${o.id} ${t}`),i.append("circle").attr("cx",l-3).attr("cy",c+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${o.id} ${t}`),i.append("circle").attr("cx",l+3).attr("cy",c+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${o.id} ${t}`),i.append("line").attr("x1",l+3).attr("y1",c+1).attr("x2",l).attr("y2",c-5).attr("stroke","#fff").attr("class",`commit ${o.id} ${t}`),i.append("line").attr("x1",l-3).attr("y1",c+1).attr("x2",l).attr("y2",c-5).attr("stroke","#fff").attr("class",`commit ${o.id} ${t}`);else{const n=i.append("circle");if(n.attr("cx",l),n.attr("cy",c),n.attr("r",o.type===Oi?9:10),n.attr("class",`commit ${o.id} commit${Ii[o.branch].index%8}`),e===Oi){const e=i.append("circle");e.attr("cx",l),e.attr("cy",c),e.attr("r",6),e.attr("class",`commit ${t} ${o.id} commit${Ii[o.branch].index%8}`)}if(e===Ni){i.append("path").attr("d",`M ${l-5},${c-5}L${l+5},${c+5}M${l-5},${c+5}L${l+5},${c-5}`).attr("class",`commit ${t} ${o.id} commit${Ii[o.branch].index%8}`)}}}if(Fi[o.id]={x:s+10,y:c},n){const t=4,e=2;if(o.type!==Mi&&(o.customId&&o.type===Oi||o.type!==Oi)&&r.showCommitLabel){const t=a.append("g"),n=t.insert("rect").attr("class","commit-label-bkg"),i=t.append("text").attr("x",s).attr("y",c+25).attr("class","commit-label").text(o.id);let l=i.node().getBBox();if(n.attr("x",s+10-l.width/2-e).attr("y",c+13.5).attr("width",l.width+2*e).attr("height",l.height+2*e),i.attr("x",s+10-l.width/2),r.rotateCommitLabel){let e=-7.5-(l.width+10)/25*9.5,n=10+l.width/25*8.5;t.attr("transform","translate("+e+", "+n+") rotate("+"-45, "+s+", "+c+")")}}if(o.tag){const n=a.insert("polygon"),r=a.append("circle"),i=a.append("text").attr("y",c-16).attr("class","tag-label").text(o.tag);let l=i.node().getBBox();i.attr("x",s+10-l.width/2);const h=l.height/2,u=c-19.2;n.attr("class","tag-label-bkg").attr("points",`\n ${s-l.width/2-t/2},${u+e}\n ${s-l.width/2-t/2},${u-e}\n ${s+10-l.width/2-t},${u-h-e}\n ${s+10+l.width/2+t},${u-h-e}\n ${s+10+l.width/2+t},${u+h+e}\n ${s+10-l.width/2-t},${u+h+e}`),r.attr("cx",s-l.width/2+t/2).attr("cy",u).attr("r",1.5).attr("class","tag-hole")}}s+=50,s>Ri&&(Ri=s)}))},Pi=(t,e,n=0)=>{const r=t+Math.abs(t-e)/2;if(n>5)return r;if($i.every((t=>Math.abs(t-r)>=10)))return $i.push(r),r;const i=Math.abs(t-e);return Pi(t,e-i/5,n+1)},ji=(t,e,n,r)=>{const i=Fi[e.id],a=Fi[n.id],s=((t,e,n)=>Object.keys(n).filter((r=>n[r].branch===e.branch&&n[r].seq>t.seq&&n[r].seq<e.seq)).length>0)(e,n,r);let o,c="",l="",h=0,u=0,d=Ii[n.branch].index;if(s){c="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,u=10,d=Ii[n.branch].index;const t=i.y<a.y?Pi(i.y,a.y):Pi(a.y,i.y);o=i.y<a.y?`M ${i.x} ${i.y} L ${i.x} ${t-h} ${c} ${i.x+u} ${t} L ${a.x-h} ${t} ${l} ${a.x} ${t+u} L ${a.x} ${a.y}`:`M ${i.x} ${i.y} L ${i.x} ${t+h} ${l} ${i.x+u} ${t} L ${a.x-h} ${t} ${c} ${a.x} ${t-u} L ${a.x} ${a.y}`}else i.y<a.y&&(c="A 20 20, 0, 0, 0,",h=20,u=20,d=Ii[n.branch].index,o=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${c} ${i.x+u} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(c="A 20 20, 0, 0, 0,",h=20,u=20,d=Ii[e.branch].index,o=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${c} ${a.x} ${i.y-u} L ${a.x} ${a.y}`),i.y===a.y&&(d=Ii[e.branch].index,o=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${c} ${i.x+u} ${a.y} L ${a.x} ${a.y}`);t.append("path").attr("d",o).attr("class","arrow arrow"+d%8)},Yi=(t,e)=>{const n=ni().gitGraph,r=t.append("g");e.forEach(((t,e)=>{const i=e%8,a=Ii[t.name].pos,s=r.append("line");s.attr("x1",0),s.attr("y1",a),s.attr("x2",Ri),s.attr("y2",a),s.attr("class","branch branch"+i),$i.push(a);const o=(t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let n=[];n="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const r of n){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=r.trim(),e.appendChild(t)}return e})(t.name),c=r.insert("rect"),l=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);l.node().appendChild(o);let h=o.getBBox();c.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-h.width-4-(!0===n.rotateCommitLabel?30:0)).attr("y",-h.height/2+8).attr("width",h.width+18).attr("height",h.height+4),l.attr("transform","translate("+(-h.width-14-(!0===n.rotateCommitLabel?30:0))+", "+(a-h.height/2-1)+")"),c.attr("transform","translate(-19, "+(a-h.height/2)+")")}))},zi={draw:function(t,e,n,r){Ii={},Fi={},Li={},Ri=0,$i=[];const i=ni(),a=i.gitGraph;Bt.debug("in gitgraph renderer",t+"\n","id:",e,n),Li=r.db.getCommits();const s=r.db.getBranchesAsObjArray();let c=0;s.forEach(((t,e)=>{Ii[t.name]={pos:c,index:e},c+=50+(a.rotateCommitLabel?40:0)}));const l=(0,o.Ys)(`[id="${e}"]`);Zi(l,Li,!1),a.showBranches&&Yi(l,s),((t,e)=>{const n=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const r=e[t];r.parents&&r.parents.length>0&&r.parents.forEach((t=>{ji(n,e[t],r,e)}))}))})(l,Li),Zi(l,Li,!0),ar.insertTitle(l,"gitTitleText",a.titleTopMargin,r.db.getDiagramTitle()),ii(void 0,l,a.diagramPadding,a.useMaxWidth??i.useMaxWidth)}},Ui=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 }\n`;var Wi=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,6],r=[1,7],i=[1,8],a=[1,9],s=[1,16],o=[1,11],l=[1,12],h=[1,13],u=[1,14],d=[1,15],p=[1,27],f=[1,33],g=[1,34],y=[1,35],m=[1,36],b=[1,37],_=[1,72],x=[1,73],v=[1,74],k=[1,75],w=[1,76],C=[1,77],E=[1,78],T=[1,38],S=[1,39],A=[1,40],L=[1,41],B=[1,42],N=[1,43],D=[1,44],O=[1,45],M=[1,46],I=[1,47],F=[1,48],$=[1,49],R=[1,50],Z=[1,51],P=[1,52],j=[1,53],Y=[1,54],z=[1,55],U=[1,56],W=[1,57],H=[1,59],q=[1,60],V=[1,61],G=[1,62],X=[1,63],Q=[1,64],K=[1,65],J=[1,66],tt=[1,67],et=[1,68],nt=[1,69],rt=[24,52],it=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],at=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],st=[1,94],ot=[1,95],ct=[1,96],lt=[1,97],ht=[15,24,52],ut=[7,8,9,10,18,22,25,26,27,28],dt=[15,24,43,52],pt=[15,24,43,52,86,87,89,90],ft=[15,43],gt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],yt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:r.setDirection("TB");break;case 5:r.setDirection("BT");break;case 6:r.setDirection("RL");break;case 7:r.setDirection("LR");break;case 11:r.parseDirective("%%{","open_directive");break;case 12:break;case 13:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 14:r.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:r.setC4Type(a[o-3]);break;case 26:r.setTitle(a[o].substring(6)),this.$=a[o].substring(6);break;case 27:r.setAccDescription(a[o].substring(15)),this.$=a[o].substring(15);break;case 28:this.$=a[o].trim(),r.setTitle(this.$);break;case 29:case 30:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 35:case 36:a[o].splice(2,0,"ENTERPRISE"),r.addPersonOrSystemBoundary(...a[o]),this.$=a[o];break;case 37:r.addPersonOrSystemBoundary(...a[o]),this.$=a[o];break;case 38:a[o].splice(2,0,"CONTAINER"),r.addContainerBoundary(...a[o]),this.$=a[o];break;case 39:r.addDeploymentNode("node",...a[o]),this.$=a[o];break;case 40:r.addDeploymentNode("nodeL",...a[o]),this.$=a[o];break;case 41:r.addDeploymentNode("nodeR",...a[o]),this.$=a[o];break;case 42:r.popBoundaryParseStack();break;case 46:r.addPersonOrSystem("person",...a[o]),this.$=a[o];break;case 47:r.addPersonOrSystem("external_person",...a[o]),this.$=a[o];break;case 48:r.addPersonOrSystem("system",...a[o]),this.$=a[o];break;case 49:r.addPersonOrSystem("system_db",...a[o]),this.$=a[o];break;case 50:r.addPersonOrSystem("system_queue",...a[o]),this.$=a[o];break;case 51:r.addPersonOrSystem("external_system",...a[o]),this.$=a[o];break;case 52:r.addPersonOrSystem("external_system_db",...a[o]),this.$=a[o];break;case 53:r.addPersonOrSystem("external_system_queue",...a[o]),this.$=a[o];break;case 54:r.addContainer("container",...a[o]),this.$=a[o];break;case 55:r.addContainer("container_db",...a[o]),this.$=a[o];break;case 56:r.addContainer("container_queue",...a[o]),this.$=a[o];break;case 57:r.addContainer("external_container",...a[o]),this.$=a[o];break;case 58:r.addContainer("external_container_db",...a[o]),this.$=a[o];break;case 59:r.addContainer("external_container_queue",...a[o]),this.$=a[o];break;case 60:r.addComponent("component",...a[o]),this.$=a[o];break;case 61:r.addComponent("component_db",...a[o]),this.$=a[o];break;case 62:r.addComponent("component_queue",...a[o]),this.$=a[o];break;case 63:r.addComponent("external_component",...a[o]),this.$=a[o];break;case 64:r.addComponent("external_component_db",...a[o]),this.$=a[o];break;case 65:r.addComponent("external_component_queue",...a[o]),this.$=a[o];break;case 67:r.addRel("rel",...a[o]),this.$=a[o];break;case 68:r.addRel("birel",...a[o]),this.$=a[o];break;case 69:r.addRel("rel_u",...a[o]),this.$=a[o];break;case 70:r.addRel("rel_d",...a[o]),this.$=a[o];break;case 71:r.addRel("rel_l",...a[o]),this.$=a[o];break;case 72:r.addRel("rel_r",...a[o]),this.$=a[o];break;case 73:r.addRel("rel_b",...a[o]),this.$=a[o];break;case 74:a[o].splice(0,1),r.addRel("rel",...a[o]),this.$=a[o];break;case 75:r.updateElStyle("update_el_style",...a[o]),this.$=a[o];break;case 76:r.updateRelStyle("update_rel_style",...a[o]),this.$=a[o];break;case 77:r.updateLayoutConfig("update_layout_config",...a[o]),this.$=a[o];break;case 78:this.$=[a[o]];break;case 79:a[o].unshift(a[o-1]),this.$=a[o];break;case 80:case 82:this.$=a[o].trim();break;case 81:let t={};t[a[o-1].trim()]=a[o].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:n,8:r,9:i,10:a,11:5,12:10,18:s,22:o,25:l,26:h,27:u,28:d},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:n,8:r,9:i,10:a,11:5,12:10,18:s,22:o,25:l,26:h,27:u,28:d},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:p},e([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:E,53:32,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:79,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:E,53:32,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:80,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:E,53:32,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:81,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:E,53:32,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{23:82,29:29,30:30,31:31,32:f,33:g,34:y,36:m,38:b,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:E,53:32,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},e(rt,[2,20],{53:32,39:58,40:70,42:71,30:87,44:_,46:x,47:v,48:k,49:w,50:C,51:E,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt}),e(rt,[2,21]),e(it,[2,23],{15:[1,88]}),e(rt,[2,43],{15:[1,89]}),e(at,[2,26]),e(at,[2,27]),{35:[1,90]},{37:[1,91]},e(at,[2,30]),{45:92,85:93,86:st,87:ot,89:ct,90:lt},{45:98,85:93,86:st,87:ot,89:ct,90:lt},{45:99,85:93,86:st,87:ot,89:ct,90:lt},{45:100,85:93,86:st,87:ot,89:ct,90:lt},{45:101,85:93,86:st,87:ot,89:ct,90:lt},{45:102,85:93,86:st,87:ot,89:ct,90:lt},{45:103,85:93,86:st,87:ot,89:ct,90:lt},{45:104,85:93,86:st,87:ot,89:ct,90:lt},{45:105,85:93,86:st,87:ot,89:ct,90:lt},{45:106,85:93,86:st,87:ot,89:ct,90:lt},{45:107,85:93,86:st,87:ot,89:ct,90:lt},{45:108,85:93,86:st,87:ot,89:ct,90:lt},{45:109,85:93,86:st,87:ot,89:ct,90:lt},{45:110,85:93,86:st,87:ot,89:ct,90:lt},{45:111,85:93,86:st,87:ot,89:ct,90:lt},{45:112,85:93,86:st,87:ot,89:ct,90:lt},{45:113,85:93,86:st,87:ot,89:ct,90:lt},{45:114,85:93,86:st,87:ot,89:ct,90:lt},{45:115,85:93,86:st,87:ot,89:ct,90:lt},{45:116,85:93,86:st,87:ot,89:ct,90:lt},e(ht,[2,66]),{45:117,85:93,86:st,87:ot,89:ct,90:lt},{45:118,85:93,86:st,87:ot,89:ct,90:lt},{45:119,85:93,86:st,87:ot,89:ct,90:lt},{45:120,85:93,86:st,87:ot,89:ct,90:lt},{45:121,85:93,86:st,87:ot,89:ct,90:lt},{45:122,85:93,86:st,87:ot,89:ct,90:lt},{45:123,85:93,86:st,87:ot,89:ct,90:lt},{45:124,85:93,86:st,87:ot,89:ct,90:lt},{45:125,85:93,86:st,87:ot,89:ct,90:lt},{45:126,85:93,86:st,87:ot,89:ct,90:lt},{45:127,85:93,86:st,87:ot,89:ct,90:lt},{30:128,39:58,40:70,42:71,44:_,46:x,47:v,48:k,49:w,50:C,51:E,53:32,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt},{15:[1,130],43:[1,129]},{45:131,85:93,86:st,87:ot,89:ct,90:lt},{45:132,85:93,86:st,87:ot,89:ct,90:lt},{45:133,85:93,86:st,87:ot,89:ct,90:lt},{45:134,85:93,86:st,87:ot,89:ct,90:lt},{45:135,85:93,86:st,87:ot,89:ct,90:lt},{45:136,85:93,86:st,87:ot,89:ct,90:lt},{45:137,85:93,86:st,87:ot,89:ct,90:lt},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},e(ut,[2,9]),{14:142,21:p},{21:[2,13]},{1:[2,15]},e(rt,[2,22]),e(it,[2,24],{31:31,29:143,32:f,33:g,34:y,36:m,38:b}),e(rt,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:f,33:g,34:y,36:m,38:b,44:_,46:x,47:v,48:k,49:w,50:C,51:E,54:T,55:S,56:A,57:L,58:B,59:N,60:D,61:O,62:M,63:I,64:F,65:$,66:R,67:Z,68:P,69:j,70:Y,71:z,72:U,73:W,74:H,75:q,76:V,77:G,78:X,79:Q,80:K,81:J,82:tt,83:et,84:nt}),e(at,[2,28]),e(at,[2,29]),e(ht,[2,46]),e(dt,[2,78],{85:93,45:145,86:st,87:ot,89:ct,90:lt}),e(pt,[2,80]),{88:[1,146]},e(pt,[2,82]),e(pt,[2,83]),e(ht,[2,47]),e(ht,[2,48]),e(ht,[2,49]),e(ht,[2,50]),e(ht,[2,51]),e(ht,[2,52]),e(ht,[2,53]),e(ht,[2,54]),e(ht,[2,55]),e(ht,[2,56]),e(ht,[2,57]),e(ht,[2,58]),e(ht,[2,59]),e(ht,[2,60]),e(ht,[2,61]),e(ht,[2,62]),e(ht,[2,63]),e(ht,[2,64]),e(ht,[2,65]),e(ht,[2,67]),e(ht,[2,68]),e(ht,[2,69]),e(ht,[2,70]),e(ht,[2,71]),e(ht,[2,72]),e(ht,[2,73]),e(ht,[2,74]),e(ht,[2,75]),e(ht,[2,76]),e(ht,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},e(ft,[2,35]),e(ft,[2,36]),e(ft,[2,37]),e(ft,[2,38]),e(ft,[2,39]),e(ft,[2,40]),e(ft,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},e(it,[2,25]),e(rt,[2,45]),e(dt,[2,79]),e(pt,[2,81]),e(ht,[2,31]),e(ht,[2,42]),e(gt,[2,32]),e(gt,[2,33],{15:[1,152]}),e(ut,[2,10]),e(gt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},mt=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 78:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:case 75:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:case 58:return this.begin("rel_u"),76;case 59:case 60:return this.begin("rel_d"),77;case 61:case 62:return this.begin("rel_l"),78;case 63:case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:case 84:this.popState(),this.popState();break;case 74:case 76:return 90;case 77:this.begin("string");break;case 79:case 85:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\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:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,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,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}},t);function bt(){this.yy={}}return yt.lexer=mt,bt.prototype=yt,yt.Parser=bt,new bt}();Wi.parser=Wi;const Hi=Wi,qi=t=>null!==t.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/);let Vi=[],Gi=[""],Xi="global",Qi="",Ki=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Ji=[],ta="",ea=!1,na=4,ra=2;var ia;const aa=function(t){return null==t?Vi:Vi.filter((e=>e.parentBoundary===t))},sa=function(){return ea},oa={addPersonOrSystem:function(t,e,n,r,i,a,s){if(null===e||null===n)return;let o={};const c=Vi.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,Vi.push(o)),o.label=null==n?{text:""}:{text:n},null==r)o.descr={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]={text:e}}else o.descr={text:r};if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]=e}else o.sprite=i;if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]=e}else o.tags=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.link=s;o.typeC4Shape={text:t},o.parentBoundary=Xi,o.wrap=sa()},addPersonOrSystemBoundary:function(t,e,n,r,i){if(null===t||null===e)return;let a={};const s=Ki.find((e=>e.alias===t));if(s&&t===s.alias?a=s:(a.alias=t,Ki.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];a[t]={text:e}}else a.type={text:n};if("object"==typeof r){let[t,e]=Object.entries(r)[0];a[t]=e}else a.tags=r;if("object"==typeof i){let[t,e]=Object.entries(i)[0];a[t]=e}else a.link=i;a.parentBoundary=Xi,a.wrap=sa(),Qi=Xi,Xi=t,Gi.push(Qi)},addContainer:function(t,e,n,r,i,a,s,o){if(null===e||null===n)return;let c={};const l=Vi.find((t=>t.alias===e));if(l&&e===l.alias?c=l:(c.alias=e,Vi.push(c)),c.label=null==n?{text:""}:{text:n},null==r)c.techn={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.techn={text:r};if(null==i)c.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.descr={text:i};if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]=e}else c.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=sa(),c.typeC4Shape={text:t},c.parentBoundary=Xi},addContainerBoundary:function(t,e,n,r,i){if(null===t||null===e)return;let a={};const s=Ki.find((e=>e.alias===t));if(s&&t===s.alias?a=s:(a.alias=t,Ki.push(a)),a.label=null==e?{text:""}:{text:e},null==n)a.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];a[t]={text:e}}else a.type={text:n};if("object"==typeof r){let[t,e]=Object.entries(r)[0];a[t]=e}else a.tags=r;if("object"==typeof i){let[t,e]=Object.entries(i)[0];a[t]=e}else a.link=i;a.parentBoundary=Xi,a.wrap=sa(),Qi=Xi,Xi=t,Gi.push(Qi)},addComponent:function(t,e,n,r,i,a,s,o){if(null===e||null===n)return;let c={};const l=Vi.find((t=>t.alias===e));if(l&&e===l.alias?c=l:(c.alias=e,Vi.push(c)),c.label=null==n?{text:""}:{text:n},null==r)c.techn={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.techn={text:r};if(null==i)c.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.descr={text:i};if("object"==typeof a){let[t,e]=Object.entries(a)[0];c[t]=e}else c.sprite=a;if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=sa(),c.typeC4Shape={text:t},c.parentBoundary=Xi},addDeploymentNode:function(t,e,n,r,i,a,s,o){if(null===e||null===n)return;let c={};const l=Ki.find((t=>t.alias===e));if(l&&e===l.alias?c=l:(c.alias=e,Ki.push(c)),c.label=null==n?{text:""}:{text:n},null==r)c.type={text:"node"};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.type={text:r};if(null==i)c.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.tags=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.nodeType=t,c.parentBoundary=Xi,c.wrap=sa(),Qi=Xi,Xi=e,Gi.push(Qi)},popBoundaryParseStack:function(){Xi=Qi,Gi.pop(),Qi=Gi.pop(),Gi.push(Qi)},addRel:function(t,e,n,r,i,a,s,o,c){if(null==t||null==e||null==n||null==r)return;let l={};const h=Ji.find((t=>t.from===e&&t.to===n));if(h?l=h:Ji.push(l),l.type=t,l.from=e,l.to=n,l.label={text:r},null==i)l.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]={text:e}}else l.techn={text:i};if(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 s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.sprite=s;if("object"==typeof o){let[t,e]=Object.entries(o)[0];l[t]=e}else l.tags=o;if("object"==typeof c){let[t,e]=Object.entries(c)[0];l[t]=e}else l.link=c;l.wrap=sa()},updateElStyle:function(t,e,n,r,i,a,s,o,c,l,h){let u=Vi.find((t=>t.alias===e));if(void 0!==u||(u=Ki.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!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];u[t]=e}else u.fontColor=r;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.borderColor=i;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.shadowing=a;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];u[t]=e}else u.shape=s;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];u[t]=e}else u.sprite=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];u[t]=e}else u.techn=c;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];u[t]=e}else u.legendText=l;if(null!=h)if("object"==typeof h){let[t,e]=Object.entries(h)[0];u[t]=e}else u.legendSprite=h}},updateRelStyle:function(t,e,n,r,i,a,s){const o=Ji.find((t=>t.from===e&&t.to===n));if(void 0!==o){if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.textColor=r;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]=e}else o.lineColor=i;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]=parseInt(e)}else o.offsetX=parseInt(a);if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=parseInt(e)}else o.offsetY=parseInt(s)}},updateLayoutConfig:function(t,e,n){let r=na,i=ra;if("object"==typeof e){const t=Object.values(e)[0];r=parseInt(t)}else r=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];i=parseInt(t)}else i=parseInt(n);r>=1&&(na=r),i>=1&&(ra=i)},autoWrap:sa,setWrap:function(t){ea=t},getC4ShapeArray:aa,getC4Shape:function(t){return Vi.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(aa(t))},getBoundarys:function(t){return null==t?Ki:Ki.filter((e=>e.parentBoundary===t))},getCurrentBoundaryParse:function(){return Xi},getParentBoundaryParse:function(){return Qi},getRels:function(){return Ji},getTitle:function(){return ta},getC4Type:function(){return ia},getC4ShapeInRow:function(){return na},getC4BoundaryInRow:function(){return ra},setAccTitle:zr,getAccTitle:Ur,getAccDescription:Hr,setAccDescription:Wr,parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().c4,clear:function(){Vi=[],Ki=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Qi="",Xi="global",Gi=[""],Ji=[],Gi=[""],ta="",ea=!1,na=4,ra=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=It(t,gr());ta=e},setC4Type:function(t){let e=It(t,gr());ia=e}},ca=function(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),n.attr("rx",e.rx),n.attr("ry",e.ry),"undefined"!==e.attrs&&null!==e.attrs)for(let r in e.attrs)n.attr(r,e.attrs[r]);return"undefined"!==e.class&&n.attr("class",e.class),n},la=function(t,e,n,r,i,a){const o=t.append("image");o.attr("width",e),o.attr("height",n),o.attr("x",r),o.attr("y",i);let c=a.startsWith("data:image/png;base64")?a:(0,s.Nm)(a);o.attr("xlink:href",c)},ha=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},ua=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),da=function(){function t(t,e,n,i,a,s,o){r(e.append("text").attr("x",n+a/2).attr("y",i+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,a,s,o,c){const{fontSize:l,fontFamily:h,fontWeight:u}=c,d=t.split(jt.lineBreakRegex);for(let p=0;p<d.length;p++){const t=p*l-l*(d.length-1)/2,s=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",l).style("font-weight",u).style("font-family",h);s.append("tspan").attr("dy",t).text(d[p]).attr("alignment-baseline","mathematical"),r(s,o)}}function n(t,n,i,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,i,a,s,0,c,l),r(u,c)}function r(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),pa=function(t,e,n){const r=t.append("g");let i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",o={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(o={"stroke-width":1});let c={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:o};ca(r,c);let l=n.boundaryFont();l.fontWeight="bold",l.fontSize=l.fontSize+2,l.fontColor=s,da(n)(e.label.text,r,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},l),e.type&&""!==e.type.text&&(l=n.boundaryFont(),l.fontColor=s,da(n)(e.type.text,r,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},l)),e.descr&&""!==e.descr.text&&(l=n.boundaryFont(),l.fontSize=l.fontSize-2,l.fontColor=s,da(n)(e.descr.text,r,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},l))},fa=function(t,e,n){var r;let i=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],a=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],s=e.fontColor?e.fontColor:"#FFFFFF",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const c=t.append("g");c.attr("class","person-man");const l=ha();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":l.x=e.x,l.y=e.y,l.fill=i,l.width=e.width,l.height=e.height,l.stroke=a,l.rx=2.5,l.ry=2.5,l.attrs={"stroke-width":.5},ca(c,l);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",a).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let h=ua(n,e.typeC4Shape.text);switch(c.append("text").attr("fill",s).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":la(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=s,da(n)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:s},u),u=n[e.typeC4Shape.text+"Font"](),u.fontColor=s,e.techn&&""!==(null==(r=e.techn)?void 0:r.text)?da(n)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:s,"font-style":"italic"},u):e.type&&""!==e.type.text&&da(n)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:s,"font-style":"italic"},u),e.descr&&""!==e.descr.text&&(u=n.personFont(),u.fontColor=s,da(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:s},u)),e.height},ga=(t,e,n)=>{const r=t.append("g");let i=0;for(let a of e){let t=a.textColor?a.textColor:"#444444",e=a.lineColor?a.lineColor:"#444444",s=a.offsetX?parseInt(a.offsetX):0,o=a.offsetY?parseInt(a.offsetY):0,c="";if(0===i){let t=r.append("line");t.attr("x1",a.startPoint.x),t.attr("y1",a.startPoint.y),t.attr("x2",a.endPoint.x),t.attr("y2",a.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==a.type&&t.attr("marker-end","url("+c+"#arrowhead)"),"birel"!==a.type&&"rel_b"!==a.type||t.attr("marker-start","url("+c+"#arrowend)"),i=-1}else{let t=r.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),"rel_b"!==a.type&&t.attr("marker-end","url("+c+"#arrowhead)"),"birel"!==a.type&&"rel_b"!==a.type||t.attr("marker-start","url("+c+"#arrowend)")}let l=n.messageFont();da(n)(a.label.text,r,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+s,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+o,a.label.width,a.label.height,{fill:t},l),a.techn&&""!==a.techn.text&&(l=n.messageFont(),da(n)("["+a.techn.text+"]",r,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+s,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+n.messageFontSize+5+o,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:t,"font-style":"italic"},l))}},ya=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")},ma=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")},ba=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")},_a=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")},xa=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")},va=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")},ka=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")};s.Nm;let wa=0,Ca=0,Ea=4,Ta=2;Wi.yy=oa;let Sa={};class Aa{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,La(t.db.getConfig())}setData(t,e,n,r){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=r}updateVal(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(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,r=this.nextData.starty+2*t.margin,i=r+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>Ea)&&(e=this.nextData.startx+t.margin+Sa.nextLinePaddingX,r=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=r+t.height,this.nextData.cnt=1),t.x=e,t.y=r,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",r,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",r,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},La(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const La=function(t){$n(Sa,t),t.fontFamily&&(Sa.personFontFamily=Sa.systemFontFamily=Sa.messageFontFamily=t.fontFamily),t.fontSize&&(Sa.personFontSize=Sa.systemFontSize=Sa.messageFontSize=t.fontSize),t.fontWeight&&(Sa.personFontWeight=Sa.systemFontWeight=Sa.messageFontWeight=t.fontWeight)},Ba=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),Na=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function Da(t,e,n,r,i){if(!e[t].width)if(n)e[t].text=Gn(e[t].text,i,r),e[t].textLines=e[t].text.split(jt.lineBreakRegex).length,e[t].width=i,e[t].height=Qn(e[t].text,r);else{let n=e[t].text.split(jt.lineBreakRegex);e[t].textLines=n.length;let i=0;e[t].height=0,e[t].width=0;for(const a of n)e[t].width=Math.max(Kn(a,r),e[t].width),i=Qn(a,r),e[t].height=e[t].height+i}}const Oa=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=Sa.c4ShapeMargin-35;let r=e.wrap&&Sa.wrap,i=Na(Sa);i.fontSize=i.fontSize+2,i.fontWeight="bold",Da("label",e,r,i,Kn(e.label.text,i)),pa(t,e,Sa)},Ma=function(t,e,n,r){let i=0;for(const a of r){i=0;const r=n[a];let s=Ba(Sa,r.typeC4Shape.text);switch(s.fontSize=s.fontSize-2,r.typeC4Shape.width=Kn("<<"+r.typeC4Shape.text+">>",s),r.typeC4Shape.height=s.fontSize+2,r.typeC4Shape.Y=Sa.c4ShapePadding,i=r.typeC4Shape.Y+r.typeC4Shape.height-4,r.image={width:0,height:0,Y:0},r.typeC4Shape.text){case"person":case"external_person":r.image.width=48,r.image.height=48,r.image.Y=i,i=r.image.Y+r.image.height}r.sprite&&(r.image.width=48,r.image.height=48,r.image.Y=i,i=r.image.Y+r.image.height);let o=r.wrap&&Sa.wrap,c=Sa.width-2*Sa.c4ShapePadding,l=Ba(Sa,r.typeC4Shape.text);if(l.fontSize=l.fontSize+2,l.fontWeight="bold",Da("label",r,o,l,c),r.label.Y=i+8,i=r.label.Y+r.label.height,r.type&&""!==r.type.text){r.type.text="["+r.type.text+"]",Da("type",r,o,Ba(Sa,r.typeC4Shape.text),c),r.type.Y=i+5,i=r.type.Y+r.type.height}else if(r.techn&&""!==r.techn.text){r.techn.text="["+r.techn.text+"]",Da("techn",r,o,Ba(Sa,r.techn.text),c),r.techn.Y=i+5,i=r.techn.Y+r.techn.height}let h=i,u=r.label.width;if(r.descr&&""!==r.descr.text){Da("descr",r,o,Ba(Sa,r.typeC4Shape.text),c),r.descr.Y=i+20,i=r.descr.Y+r.descr.height,u=Math.max(r.label.width,r.descr.width),h=i-5*r.descr.textLines}u+=Sa.c4ShapePadding,r.width=Math.max(r.width||Sa.width,u,Sa.width),r.height=Math.max(r.height||Sa.height,h,Sa.height),r.margin=r.margin||Sa.c4ShapeMargin,t.insert(r),fa(e,r,Sa)}t.bumpLastMargin(Sa.c4ShapeMargin)};class Ia{constructor(t,e){this.x=t,this.y=e}}let Fa=function(t,e){let n=t.x,r=t.y,i=e.x,a=e.y,s=n+t.width/2,o=r+t.height/2,c=Math.abs(n-i),l=Math.abs(r-a),h=l/c,u=t.height/t.width,d=null;return r==a&&n<i?d=new Ia(n+t.width,o):r==a&&n>i?d=new Ia(n,o):n==i&&r<a?d=new Ia(s,r+t.height):n==i&&r>a&&(d=new Ia(s,r)),n>i&&r<a?d=u>=h?new Ia(n,o+h*t.width/2):new Ia(s-c/l*t.height/2,r+t.height):n<i&&r<a?d=u>=h?new Ia(n+t.width,o+h*t.width/2):new Ia(s+c/l*t.height/2,r+t.height):n<i&&r>a?d=u>=h?new Ia(n+t.width,o-h*t.width/2):new Ia(s+t.height/2*c/l,r):n>i&&r>a&&(d=u>=h?new Ia(n,o-t.width/2*h):new Ia(s-t.height/2*c/l,r)),d},$a=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let r=Fa(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:r,endPoint:Fa(e,n)}};function Ra(t,e,n,r,i){let a=new Aa(i);a.data.widthLimit=n.data.widthLimit/Math.min(Ta,r.length);for(let[s,o]of r.entries()){let r=0;o.image={width:0,height:0,Y:0},o.sprite&&(o.image.width=48,o.image.height=48,o.image.Y=r,r=o.image.Y+o.image.height);let c=o.wrap&&Sa.wrap,l=Na(Sa);if(l.fontSize=l.fontSize+2,l.fontWeight="bold",Da("label",o,c,l,a.data.widthLimit),o.label.Y=r+8,r=o.label.Y+o.label.height,o.type&&""!==o.type.text){o.type.text="["+o.type.text+"]",Da("type",o,c,Na(Sa),a.data.widthLimit),o.type.Y=r+5,r=o.type.Y+o.type.height}if(o.descr&&""!==o.descr.text){let t=Na(Sa);t.fontSize=t.fontSize-2,Da("descr",o,c,t,a.data.widthLimit),o.descr.Y=r+20,r=o.descr.Y+o.descr.height}if(0==s||s%Ta==0){let t=n.data.startx+Sa.diagramMarginX,e=n.data.stopy+Sa.diagramMarginY+r;a.setData(t,t,e,e)}else{let t=a.data.stopx!==a.data.startx?a.data.stopx+Sa.diagramMarginX:a.data.startx,e=a.data.starty;a.setData(t,t,e,e)}a.name=o.alias;let h=i.db.getC4ShapeArray(o.alias),u=i.db.getC4ShapeKeys(o.alias);u.length>0&&Ma(a,t,h,u),e=o.alias;let d=i.db.getBoundarys(e);d.length>0&&Ra(t,e,a,d,i),"global"!==o.alias&&Oa(t,o,a),n.data.stopy=Math.max(a.data.stopy+Sa.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(a.data.stopx+Sa.c4ShapeMargin,n.data.stopx),wa=Math.max(wa,n.data.stopx),Ca=Math.max(Ca,n.data.stopy)}}const Za={drawPersonOrSystemArray:Ma,drawBoundary:Oa,setConf:La,draw:function(t,e,n,r){Sa=gr().c4;const i=gr().securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s="sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body");let c=r.db;r.db.setWrap(Sa.wrap),Ea=c.getC4ShapeInRow(),Ta=c.getC4BoundaryInRow(),Bt.debug(`C:${JSON.stringify(Sa,null,2)}`);const l="sandbox"===i?s.select(`[id="${e}"]`):(0,o.Ys)(`[id="${e}"]`);va(l),xa(l),ka(l);let h=new Aa(r);h.setData(Sa.diagramMarginX,Sa.diagramMarginX,Sa.diagramMarginY,Sa.diagramMarginY),h.data.widthLimit=screen.availWidth,wa=Sa.diagramMarginX,Ca=Sa.diagramMarginY;const u=r.db.getTitle();Ra(l,"",h,r.db.getBoundarys(""),r),ya(l),ma(l),_a(l),ba(l),function(t,e,n,r){let i=0;for(let s of e){i+=1;let t=s.wrap&&Sa.wrap,e={fontFamily:(a=Sa).messageFontFamily,fontSize:a.messageFontSize,fontWeight:a.messageFontWeight};"C4Dynamic"===r.db.getC4Type()&&(s.label.text=i+": "+s.label.text);let o=Kn(s.label.text,e);Da("label",s,t,e,o),s.techn&&""!==s.techn.text&&(o=Kn(s.techn.text,e),Da("techn",s,t,e,o)),s.descr&&""!==s.descr.text&&(o=Kn(s.descr.text,e),Da("descr",s,t,e,o));let c=n(s.from),l=n(s.to),h=$a(c,l);s.startPoint=h.startPoint,s.endPoint=h.endPoint}var a;ga(t,e,Sa)}(l,r.db.getRels(),r.db.getC4Shape,r),h.data.stopx=wa,h.data.stopy=Ca;const d=h.data;let p=d.stopy-d.starty+2*Sa.diagramMarginY;const f=d.stopx-d.startx+2*Sa.diagramMarginX;u&&l.append("text").text(u).attr("x",(d.stopx-d.startx)/2-4*Sa.diagramMarginX).attr("y",d.starty+Sa.diagramMarginY),kr(l,p,f,Sa.useMaxWidth);const g=u?60:0;l.attr("viewBox",d.startx-Sa.diagramMarginX+" -"+(Sa.diagramMarginY+g)+" "+f+" "+(p+g)),Bt.debug("models:",d)}};var Pa=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,3],r=[1,7],i=[1,8],a=[1,9],s=[1,10],o=[1,13],c=[1,12],l=[1,16,25],h=[1,20],u=[1,32],d=[1,33],p=[1,34],f=[1,36],g=[1,39],y=[1,37],m=[1,38],b=[1,44],_=[1,45],x=[1,40],v=[1,41],k=[1,42],w=[1,43],C=[1,48],E=[1,49],T=[1,50],S=[1,51],A=[16,25],L=[1,65],B=[1,66],N=[1,67],D=[1,68],O=[1,69],M=[1,70],I=[1,71],F=[1,80],$=[16,25,32,45,46,54,60,61,62,63,64,65,66,71,73],R=[16,25,30,32,45,46,50,54,60,61,62,63,64,65,66,71,73,88,89,90,91],Z=[5,8,9,10,11,16,19,23,25],P=[54,88,89,90,91],j=[54,65,66,88,89,90,91],Y=[54,60,61,62,63,64,88,89,90,91],z=[16,25,32],U=[1,107],W={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statments:5,direction:6,directive:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,statements:24,EOF:25,statement:26,className:27,alphaNumToken:28,classLiteralName:29,GENERICTYPE:30,relationStatement:31,LABEL:32,classStatement:33,methodStatement:34,annotationStatement:35,clickStatement:36,cssClassStatement:37,noteStatement:38,acc_title:39,acc_title_value:40,acc_descr:41,acc_descr_value:42,acc_descr_multiline_value:43,CLASS:44,STYLE_SEPARATOR:45,STRUCT_START:46,members:47,STRUCT_STOP:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,STR:54,NOTE_FOR:55,noteText:56,NOTE:57,relationType:58,lineType: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,CSSCLASS:74,commentToken:75,textToken:76,graphCodeTokens:77,textNoTagsToken:78,TAGSTART:79,TAGEND:80,"==":81,"--":82,PCT:83,DEFAULT:84,SPACE:85,MINUS:86,keywords:87,UNICODE_TEXT:88,NUM:89,ALPHA:90,BQUOTE_STR:91,$accept:0,$end:1},terminals_:{2:"error",5:"statments",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",25:"EOF",30:"GENERICTYPE",32:"LABEL",39:"acc_title",40:"acc_title_value",41:"acc_descr",42:"acc_descr_value",43:"acc_descr_multiline_value",44:"CLASS",45:"STYLE_SEPARATOR",46:"STRUCT_START",48:"STRUCT_STOP",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"STR",55:"NOTE_FOR",57:"NOTE",60:"AGGREGATION",61:"EXTENSION",62:"COMPOSITION",63:"DEPENDENCY",64:"LOLLIPOP",65:"LINE",66:"DOTTED_LINE",67:"CALLBACK",68:"LINK",69:"LINK_TARGET",70:"CLICK",71:"CALLBACK_NAME",72:"CALLBACK_ARGS",73:"HREF",74:"CSSCLASS",77:"graphCodeTokens",79:"TAGSTART",80:"TAGEND",81:"==",82:"--",83:"PCT",84:"DEFAULT",85:"SPACE",86:"MINUS",87:"keywords",88:"UNICODE_TEXT",89:"NUM",90:"ALPHA",91:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,1],[27,1],[27,2],[27,2],[27,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[33,2],[33,4],[33,5],[33,7],[35,4],[47,1],[47,2],[34,1],[34,2],[34,1],[34,1],[31,3],[31,4],[31,4],[31,5],[38,3],[38,2],[53,3],[53,2],[53,2],[53,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[36,3],[36,4],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[37,3],[75,1],[75,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[76,1],[78,1],[78,1],[78,1],[78,1],[28,1],[28,1],[28,1],[29,1],[56,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 5:r.setDirection("TB");break;case 6:r.setDirection("BT");break;case 7:r.setDirection("RL");break;case 8:r.setDirection("LR");break;case 12:r.parseDirective("%%{","open_directive");break;case 13:r.parseDirective(a[o],"type_directive");break;case 14:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 15:r.parseDirective("}%%","close_directive","class");break;case 20:case 21:this.$=a[o];break;case 22:this.$=a[o-1]+a[o];break;case 23:case 24:this.$=a[o-1]+"~"+a[o];break;case 25:r.addRelation(a[o]);break;case 26:a[o-1].title=r.cleanupLabel(a[o]),r.addRelation(a[o-1]);break;case 35:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 36:case 37:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 38:r.addClass(a[o]);break;case 39:r.addClass(a[o-2]),r.setCssClass(a[o-2],a[o]);break;case 40:r.addClass(a[o-3]),r.addMembers(a[o-3],a[o-1]);break;case 41:r.addClass(a[o-5]),r.setCssClass(a[o-5],a[o-3]),r.addMembers(a[o-5],a[o-1]);break;case 42:r.addAnnotation(a[o],a[o-2]);break;case 43:this.$=[a[o]];break;case 44:a[o].push(a[o-1]),this.$=a[o];break;case 45:case 47:case 48:break;case 46:r.addMember(a[o-1],r.cleanupLabel(a[o]));break;case 49:this.$={id1:a[o-2],id2:a[o],relation:a[o-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:a[o-3],id2:a[o],relation:a[o-1],relationTitle1:a[o-2],relationTitle2:"none"};break;case 51:this.$={id1:a[o-3],id2:a[o],relation:a[o-2],relationTitle1:"none",relationTitle2:a[o-1]};break;case 52:this.$={id1:a[o-4],id2:a[o],relation:a[o-2],relationTitle1:a[o-3],relationTitle2:a[o-1]};break;case 53:r.addNote(a[o],a[o-1]);break;case 54:r.addNote(a[o]);break;case 55:this.$={type1:a[o-2],type2:a[o],lineType:a[o-1]};break;case 56:this.$={type1:"none",type2:a[o],lineType:a[o-1]};break;case 57:this.$={type1:a[o-1],type2:"none",lineType:a[o]};break;case 58:this.$={type1:"none",type2:"none",lineType:a[o]};break;case 59:this.$=r.relationType.AGGREGATION;break;case 60:this.$=r.relationType.EXTENSION;break;case 61:this.$=r.relationType.COMPOSITION;break;case 62:this.$=r.relationType.DEPENDENCY;break;case 63:this.$=r.relationType.LOLLIPOP;break;case 64:this.$=r.lineType.LINE;break;case 65:this.$=r.lineType.DOTTED_LINE;break;case 66:case 72:this.$=a[o-2],r.setClickEvent(a[o-1],a[o]);break;case 67:case 73:this.$=a[o-3],r.setClickEvent(a[o-2],a[o-1]),r.setTooltip(a[o-2],a[o]);break;case 68:case 76:this.$=a[o-2],r.setLink(a[o-1],a[o]);break;case 69:case 77:this.$=a[o-3],r.setLink(a[o-2],a[o-1],a[o]);break;case 70:case 78:this.$=a[o-3],r.setLink(a[o-2],a[o-1]),r.setTooltip(a[o-2],a[o]);break;case 71:case 79:this.$=a[o-4],r.setLink(a[o-3],a[o-2],a[o]),r.setTooltip(a[o-3],a[o-1]);break;case 74:this.$=a[o-3],r.setClickEvent(a[o-2],a[o-1],a[o]);break;case 75:this.$=a[o-4],r.setClickEvent(a[o-3],a[o-2],a[o-1]),r.setTooltip(a[o-3],a[o]);break;case 80:r.setCssClass(a[o-1],a[o])}},table:[{3:1,4:2,5:n,6:4,7:5,8:r,9:i,10:a,11:s,12:6,13:11,19:o,23:c},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:n,6:4,7:5,8:r,9:i,10:a,11:s,12:6,13:11,19:o,23:c},{1:[2,9]},e(l,[2,5]),e(l,[2,6]),e(l,[2,7]),e(l,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:h},e([17,22],[2,13]),{6:31,7:30,8:r,9:i,10:a,11:s,13:11,19:o,24:21,26:22,27:35,28:46,29:47,31:23,33:24,34:25,35:26,36:27,37:28,38:29,39:u,41:d,43:p,44:f,49:g,51:y,52:m,55:b,57:_,67:x,68:v,70:k,74:w,88:C,89:E,90:T,91:S},{16:[1,52]},{18:53,21:[1,54]},{16:[2,15]},{25:[1,55]},{16:[1,56],25:[2,17]},e(A,[2,25],{32:[1,57]}),e(A,[2,27]),e(A,[2,28]),e(A,[2,29]),e(A,[2,30]),e(A,[2,31]),e(A,[2,32]),e(A,[2,33]),e(A,[2,34]),{40:[1,58]},{42:[1,59]},e(A,[2,37]),e(A,[2,45],{53:60,58:63,59:64,32:[1,62],54:[1,61],60:L,61:B,62:N,63:D,64:O,65:M,66:I}),{27:72,28:46,29:47,88:C,89:E,90:T,91:S},e(A,[2,47]),e(A,[2,48]),{28:73,88:C,89:E,90:T},{27:74,28:46,29:47,88:C,89:E,90:T,91:S},{27:75,28:46,29:47,88:C,89:E,90:T,91:S},{27:76,28:46,29:47,88:C,89:E,90:T,91:S},{54:[1,77]},{27:78,28:46,29:47,88:C,89:E,90:T,91:S},{54:F,56:79},e($,[2,20],{28:46,29:47,27:81,30:[1,82],88:C,89:E,90:T,91:S}),e($,[2,21],{30:[1,83]}),e(R,[2,94]),e(R,[2,95]),e(R,[2,96]),e([16,25,30,32,45,46,54,60,61,62,63,64,65,66,71,73],[2,97]),e(Z,[2,10]),{15:84,22:h},{22:[2,14]},{1:[2,16]},{6:31,7:30,8:r,9:i,10:a,11:s,13:11,19:o,24:85,25:[2,18],26:22,27:35,28:46,29:47,31:23,33:24,34:25,35:26,36:27,37:28,38:29,39:u,41:d,43:p,44:f,49:g,51:y,52:m,55:b,57:_,67:x,68:v,70:k,74:w,88:C,89:E,90:T,91:S},e(A,[2,26]),e(A,[2,35]),e(A,[2,36]),{27:86,28:46,29:47,54:[1,87],88:C,89:E,90:T,91:S},{53:88,58:63,59:64,60:L,61:B,62:N,63:D,64:O,65:M,66:I},e(A,[2,46]),{59:89,65:M,66:I},e(P,[2,58],{58:90,60:L,61:B,62:N,63:D,64:O}),e(j,[2,59]),e(j,[2,60]),e(j,[2,61]),e(j,[2,62]),e(j,[2,63]),e(Y,[2,64]),e(Y,[2,65]),e(A,[2,38],{45:[1,91],46:[1,92]}),{50:[1,93]},{54:[1,94]},{54:[1,95]},{71:[1,96],73:[1,97]},{28:98,88:C,89:E,90:T},{54:F,56:99},e(A,[2,54]),e(A,[2,98]),e($,[2,22]),e($,[2,23]),e($,[2,24]),{16:[1,100]},{25:[2,19]},e(z,[2,49]),{27:101,28:46,29:47,88:C,89:E,90:T,91:S},{27:102,28:46,29:47,54:[1,103],88:C,89:E,90:T,91:S},e(P,[2,57],{58:104,60:L,61:B,62:N,63:D,64:O}),e(P,[2,56]),{28:105,88:C,89:E,90:T},{47:106,51:U},{27:108,28:46,29:47,88:C,89:E,90:T,91:S},e(A,[2,66],{54:[1,109]}),e(A,[2,68],{54:[1,111],69:[1,110]}),e(A,[2,72],{54:[1,112],72:[1,113]}),e(A,[2,76],{54:[1,115],69:[1,114]}),e(A,[2,80]),e(A,[2,53]),e(Z,[2,11]),e(z,[2,51]),e(z,[2,50]),{27:116,28:46,29:47,88:C,89:E,90:T,91:S},e(P,[2,55]),e(A,[2,39],{46:[1,117]}),{48:[1,118]},{47:119,48:[2,43],51:U},e(A,[2,42]),e(A,[2,67]),e(A,[2,69]),e(A,[2,70],{69:[1,120]}),e(A,[2,73]),e(A,[2,74],{54:[1,121]}),e(A,[2,77]),e(A,[2,78],{69:[1,122]}),e(z,[2,52]),{47:123,51:U},e(A,[2,40]),{48:[2,44]},e(A,[2,71]),e(A,[2,75]),e(A,[2,79]),{48:[1,124]},e(A,[2,41])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],54:[2,14],55:[2,16],85:[2,19],119:[2,44]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},H=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 27:break;case 11:return this.begin("acc_title"),39;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),41;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 39:case 42:case 45:case 48:case 51:case 54:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 20:case 21:return 23;case 22:return this.begin("struct"),46;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),48;case 28:return"MEMBER";case 29:return 44;case 30:return 74;case 31:return 67;case 32:return 68;case 33:return 70;case 34:return 55;case 35:return 57;case 36:return 49;case 37:return 50;case 38:this.begin("generic");break;case 40:return"GENERICTYPE";case 41:this.begin("string");break;case 43:return"STR";case 44:this.begin("bqstring");break;case 46:return"BQUOTE_STR";case 47:this.begin("href");break;case 49:return 73;case 50:this.begin("callback_name");break;case 52:this.popState(),this.begin("callback_args");break;case 53:return 71;case 55:return 72;case 56:case 57:case 58:case 59:return 69;case 60:case 61:return 61;case 62:case 63:return 63;case 64:return 62;case 65:return 60;case 66:return 64;case 67:return 65;case 68:return 66;case 69:return 32;case 70:return 45;case 71:return 86;case 72:return"DOT";case 73:return"PLUS";case 74:return 83;case 75:case 76:return"EQUALS";case 77:return 90;case 78:return"PUNCTUATION";case 79:return 89;case 80:return 88;case 81:return 85;case 82:return 25}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\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)/,/^(?:[{])/,/^(?:\[\*\])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_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)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[54,55],inclusive:!1},callback_name:{rules:[51,52,53],inclusive:!1},href:{rules:[48,49],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[39,40],inclusive:!1},bqstring:{rules:[45,46],inclusive:!1},string:{rules:[42,43],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,37,38,41,44,47,50,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82],inclusive:!0}}},t);function q(){this.yy={}}return W.lexer=H,q.prototype=W,W.Parser=q,new q}();Pa.parser=Pa;const ja=Pa,Ya=(t,e)=>{var n;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.class)?void 0:n.defaultRenderer)&&null!==t.match(/^\s*classDiagram/)},za=(t,e)=>{var n;return null!==t.match(/^\s*classDiagram/)&&"dagre-wrapper"===(null==(n=null==e?void 0:e.class)?void 0:n.defaultRenderer)||null!==t.match(/^\s*classDiagram-v2/)},Ua="classid-";let Wa=[],Ha={},qa=[],Va=0,Ga=[];const Xa=t=>jt.sanitizeText(t,gr()),Qa=function(t){let e="",n=t;if(t.indexOf("~")>0){let r=t.split("~");n=r[0],e=jt.sanitizeText(r[1],gr())}return{className:n,type:e}},Ka=function(t){let e=Qa(t);void 0===Ha[e.className]&&(Ha[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:Ua+e.className+"-"+Va},Va++)},Ja=function(t){const e=Object.keys(Ha);for(const n of e)if(Ha[n].id===t)return Ha[n].domId},ts=function(t,e){const n=Qa(t).className,r=Ha[n];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?r.annotations.push(Xa(t.substring(2,t.length-2))):t.indexOf(")")>0?r.methods.push(Xa(t)):t&&r.members.push(Xa(t))}},es=function(t,e){t.split(",").forEach((function(t){let n=t;t[0].match(/\d/)&&(n=Ua+n),void 0!==Ha[n]&&Ha[n].cssClasses.push(e)}))},ns=function(t,e,n){const r=gr();let i=t,a=Ja(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==Ha[i]){let t=[];if("string"==typeof n){t=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let e=0;e<t.length;e++){let n=t[e].trim();'"'===n.charAt(0)&&'"'===n.charAt(n.length-1)&&(n=n.substr(1,n.length-2)),t[e]=n}}0===t.length&&t.push(a),Ga.push((function(){const n=document.querySelector(`[id="${a}"]`);null!==n&&n.addEventListener("click",(function(){ar.runFunc(e,...t)}),!1)}))}},rs=function(t){let e=(0,o.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,o.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,o.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,o.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,o.Ys)(this).classed("hover",!1)}))};Ga.push(rs);let is="TB";const as={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},setAccTitle:zr,getAccTitle:Ur,getAccDescription:Hr,setAccDescription:Wr,getConfig:()=>gr().class,addClass:Ka,bindFunctions:function(t){Ga.forEach((function(e){e(t)}))},clear:function(){Wa=[],Ha={},qa=[],Ga=[],Ga.push(rs),Yr()},getClass:function(t){return Ha[t]},getClasses:function(){return Ha},getNotes:function(){return qa},addAnnotation:function(t,e){const n=Qa(t).className;Ha[n].annotations.push(e)},addNote:function(t,e){const n={id:`note${qa.length}`,class:e,text:t};qa.push(n)},getRelations:function(){return Wa},addRelation:function(t){Bt.debug("Adding relation: "+JSON.stringify(t)),Ka(t.id1),Ka(t.id2),t.id1=Qa(t.id1).className,t.id2=Qa(t.id2).className,t.relationTitle1=jt.sanitizeText(t.relationTitle1.trim(),gr()),t.relationTitle2=jt.sanitizeText(t.relationTitle2.trim(),gr()),Wa.push(t)},getDirection:()=>is,setDirection:t=>{is=t},addMember:ts,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>ts(t,e))))},cleanupLabel:function(t){return":"===t.substring(0,1)?jt.sanitizeText(t.substr(1).trim(),gr()):Xa(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){ns(t,e,n),Ha[t].haveCallback=!0})),es(t,"clickable")},setCssClass:es,setLink:function(t,e,n){const r=gr();t.split(",").forEach((function(t){let i=t;t[0].match(/\d/)&&(i=Ua+i),void 0!==Ha[i]&&(Ha[i].link=ar.formatUrl(e,r),"sandbox"===r.securityLevel?Ha[i].linkTarget="_top":Ha[i].linkTarget="string"==typeof n?Xa(n):"_blank")})),es(t,"clickable")},getTooltip:function(t){return Ha[t].tooltip},setTooltip:function(t,e){const n=gr();t.split(",").forEach((function(t){void 0!==e&&(Ha[t].tooltip=jt.sanitizeText(e,n))}))},lookUpDomId:Ja,setDiagramTitle:qr,getDiagramTitle:Vr};let ss=0;const os=function(t){let e=t.match(/^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/),n=t.match(/^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/);return e&&!n?cs(e):n?ls(n):hs(t)},cs=function(t){let e="",n="";try{let r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?Pt(t[3].trim()):"",s=t[4]?t[4].trim():"",o=t[5]?t[5].trim():"";n=r+i+a+" "+s,e=ds(o)}catch(r){n=t}return{displayText:n,cssStyle:e}},ls=function(t){let e="",n="";try{let r=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?Pt(t[3].trim()):"",s=t[4]?t[4].trim():"";n=r+i+"("+a+")"+(t[5]?" : "+Pt(t[5]).trim():""),e=ds(s)}catch(r){n=t}return{displayText:n,cssStyle:e}},hs=function(t){let e="",n="",r="",i=t.indexOf("("),a=t.indexOf(")");if(i>1&&a>i&&a<=t.length){let s="",o="",c=t.substring(0,1);c.match(/\w/)?o=t.substring(0,i).trim():(c.match(/[#+~-]/)&&(s=c),o=t.substring(1,i).trim());const l=t.substring(i+1,a);t.substring(a+1,1),n=ds(t.substring(a+1,a+2)),e=s+o+"("+Pt(l.trim())+")",a<t.length&&(r=t.substring(a+2).trim(),""!==r&&(r=" : "+Pt(r),e+=r))}else e=Pt(t);return{displayText:e,cssStyle:n}},us=function(t,e,n,r){let i=os(e);const a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},ds=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},ps=function(t,e,n,r){Bt.debug("Rendering class ",e,n);const i=e.id,a={id:i,label:e.id,width:0,height:0},s=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let o;o=e.link?s.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=o.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",n.textHeight),c=!1}));let l=e.id;void 0!==e.type&&""!==e.type&&(l+="<"+e.type+">");const h=o.append("tspan").text(l).attr("class","title");c||h.attr("dy",n.textHeight);const u=o.node().getBBox().height,d=s.append("line").attr("x1",0).attr("y1",n.padding+u+n.dividerMargin/2).attr("y2",n.padding+u+n.dividerMargin/2),p=s.append("text").attr("x",n.padding).attr("y",u+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(t){us(p,t,c,n),c=!1}));const f=p.node().getBBox(),g=s.append("line").attr("x1",0).attr("y1",n.padding+u+n.dividerMargin+f.height).attr("y2",n.padding+u+n.dividerMargin+f.height),y=s.append("text").attr("x",n.padding).attr("y",u+2*n.dividerMargin+f.height+n.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(t){us(y,t,c,n),c=!1}));const m=s.node().getBBox();var b=" ";e.cssClasses.length>0&&(b+=e.cssClasses.join(" "));const _=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*n.padding).attr("height",m.height+n.padding+.5*n.dividerMargin).attr("class",b).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(_-t.getBBox().width)/2)})),e.tooltip&&o.insert("title").text(e.tooltip),d.attr("x2",_),g.attr("x2",_),a.width=_,a.height=m.height+n.padding+.5*n.dividerMargin,a},fs=function(t,e,n,r,i){const a=function(t){switch(t){case i.db.relationType.AGGREGATION:return"aggregation";case i.db.relationType.EXTENSION:return"extension";case i.db.relationType.COMPOSITION:return"composition";case i.db.relationType.DEPENDENCY:return"dependency";case i.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const s=e.points,c=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),l=t.append("path").attr("d",c(s)).attr("id","edge"+ss).attr("class","relation");let h,u,d="";r.arrowMarkerAbsolute&&(d=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,d=d.replace(/\(/g,"\\("),d=d.replace(/\)/g,"\\)")),1==n.relation.lineType&&l.attr("class","relation dashed-line"),10==n.relation.lineType&&l.attr("class","relation dotted-line"),"none"!==n.relation.type1&&l.attr("marker-start","url("+d+"#"+a(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&l.attr("marker-end","url("+d+"#"+a(n.relation.type2)+"End)");const p=e.points.length;let f,g,y,m,b=ar.calcLabelPosition(e.points);if(h=b.x,u=b.y,p%2!=0&&p>1){let t=ar.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),r=ar.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[p-1]);Bt.debug("cardinality_1_point "+JSON.stringify(t)),Bt.debug("cardinality_2_point "+JSON.stringify(r)),f=t.x,g=t.y,y=r.x,m=r.y}if(void 0!==n.title){const e=t.append("g").attr("class","classLabel"),i=e.append("text").attr("class","label").attr("x",h).attr("y",u).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=i;const a=i.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",a.x-r.padding/2).attr("y",a.y-r.padding/2).attr("width",a.width+r.padding).attr("height",a.height+r.padding)}if(Bt.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",f).attr("y",g).attr("fill","black").attr("font-size","6").text(n.relationTitle1)}if(void 0!==n.relationTitle2&&"none"!==n.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",m).attr("fill","black").attr("font-size","6").text(n.relationTitle2)}ss++},gs=function(t,e,n,r){Bt.debug("Rendering note ",e,n);const i=e.id,a={id:i,text:e.text,width:0,height:0},s=t.append("g").attr("id",i).attr("class","classGroup");let o=s.append("text").attr("y",n.textHeight+n.padding).attr("x",0);const c=JSON.parse(`"${e.text}"`).split("\n");c.forEach((function(t){Bt.debug(`Adding line: ${t}`),o.append("tspan").text(t).attr("class","title").attr("dy",n.textHeight)}));const l=s.node().getBBox(),h=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",l.width+2*n.padding).attr("height",l.height+c.length*n.textHeight+n.padding+.5*n.dividerMargin).node().getBBox().width;return o.node().childNodes.forEach((function(t){t.setAttribute("x",(h-t.getBBox().width)/2)})),a.width=h,a.height=l.height+c.length*n.textHeight+n.padding+.5*n.dividerMargin,a};let ys={};const ms=function(t){const e=Object.entries(ys).find((e=>e[1].label===t));if(e)return e[0]},bs={draw:function(t,e,n,r){const i=gr().class;ys={},Bt.info("Rendering diagram "+t);const a=gr().securityLevel;let s;"sandbox"===a&&(s=(0,o.Ys)("#i"+e));const c="sandbox"===a?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body"),l=c.select(`[id='${e}']`);var h;(h=l).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"),h.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"),h.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"),h.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"),h.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"),h.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"),h.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"),h.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 u=new lt.k({multigraph:!0});u.setGraph({isMultiGraph:!0}),u.setDefaultEdgeLabel((function(){return{}}));const d=r.db.getClasses(),p=Object.keys(d);for(const o of p){const t=d[o],e=ps(l,t,i,r);ys[e.id]=e,u.setNode(e.id,e),Bt.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){Bt.info("tjoho"+ms(t.id1)+ms(t.id2)+JSON.stringify(t)),u.setEdge(ms(t.id1),ms(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){Bt.debug(`Adding note: ${JSON.stringify(t)}`);const e=gs(l,t,i,r);ys[e.id]=e,u.setNode(e.id,e),t.class&&t.class in d&&u.setEdge(t.id,ms(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,ct.bK)(u),u.nodes().forEach((function(t){void 0!==t&&void 0!==u.node(t)&&(Bt.debug("Node "+t+": "+JSON.stringify(u.node(t))),c.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(u.node(t).x-u.node(t).width/2)+","+(u.node(t).y-u.node(t).height/2)+" )"))})),u.edges().forEach((function(t){void 0!==t&&void 0!==u.edge(t)&&(Bt.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(u.edge(t))),fs(l,u.edge(t),u.edge(t).relation,i,r))}));const f=l.node().getBBox(),g=f.width+40,y=f.height+40;kr(l,y,g,i.useMaxWidth);const m=`${f.x-20} ${f.y-20} ${g} ${y}`;Bt.debug(`viewBox ${m}`),l.attr("viewBox",m)}},_s={extension:(t,e,n)=>{Bt.trace("Making markers for ",n),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).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"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).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")},composition:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).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",e+"-compositionEnd").attr("class","marker composition "+e).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")},aggregation:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).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",e+"-aggregationEnd").attr("class","marker aggregation "+e).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")},dependency:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).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"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).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")},lollipop:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(t,e)=>{t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 12 20").attr("refX",10).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"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).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")},circle:(t,e)=>{t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).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")},cross:(t,e)=>{t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).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"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).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")},barb:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-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")}},xs=(t,e,n,r)=>{e.forEach((e=>{_s[e](t,n,r)}))};const vs=(t,e,n,r)=>{let i=t||"";if("object"==typeof i&&(i=i[0]),Zt(gr().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Bt.info("vertexText"+i);let t=function(t){const e=(0,o.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),n=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var a,s;return n.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),a=n,(s=t.labelStyle)&&a.attr("style",s),n.style("display","inline-block"),n.style("white-space","nowrap"),n.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:r,label:gp(i).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let r=[];r="string"==typeof i?i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?i:[];for(const e of r){const r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),n?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},ks=(t,e,n,r)=>{let i;i=n||"node default";const a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",e.labelStyle);let c;c=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const l=s.node().appendChild(vs(It(gp(c),gr()),e.labelStyle,!1,r));let h=l.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=l.children[0],e=(0,o.Ys)(l);h=t.getBoundingClientRect(),e.attr("width",h.width),e.attr("height",h.height)}const u=e.padding/2;return s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),{shapeSvg:a,bbox:h,halfPadding:u,label:s}},ws=(t,e)=>{const n=e.node().getBBox();t.width=n.width,t.height=n.height};function Cs(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+n/2+")")}let Es={},Ts={},Ss={};const As=(t,e)=>(Bt.trace("In isDecendant",e," ",t," = ",Ts[e].includes(t)),!!Ts[e].includes(t)),Ls=(t,e,n,r)=>{Bt.warn("Copying children of ",t,"root",r,"data",e.node(t),r);const i=e.children(t)||[];t!==r&&i.push(t),Bt.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach((i=>{if(e.children(i).length>0)Ls(i,e,n,r);else{const a=e.node(i);Bt.info("cp ",i," to ",r," with parent ",t),n.setNode(i,a),r!==e.parent(i)&&(Bt.warn("Setting parent",i,e.parent(i)),n.setParent(i,e.parent(i))),t!==r&&i!==t?(Bt.debug("Setting parent",i,t),n.setParent(i,t)):(Bt.info("In copy ",t,"root",r,"data",e.node(t),r),Bt.debug("Not Setting parent for node=",i,"cluster!==rootId",t!==r,"node!==clusterId",i!==t));const s=e.edges(i);Bt.debug("Copying Edges",s),s.forEach((i=>{Bt.info("Edge",i);const a=e.edge(i.v,i.w,i.name);Bt.info("Edge data",a,r);try{((t,e)=>(Bt.info("Decendants of ",e," is ",Ts[e]),Bt.info("Edge is ",t),t.v!==e&&t.w!==e&&(Ts[e]?Ts[e].includes(t.v)||As(t.v,e)||As(t.w,e)||Ts[e].includes(t.w):(Bt.debug("Tilt, ",e,",not in decendants"),!1))))(i,r)?(Bt.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),Bt.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):Bt.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",t)}catch(s){Bt.error(s)}}))}Bt.debug("Removing node",i),e.removeNode(i)}))},Bs=(t,e)=>{const n=e.children(t);let r=[...n];for(const i of n)Ss[i]=t,r=[...r,...Bs(i,e)];return r},Ns=(t,e)=>{Bt.trace("Searching",t);const n=e.children(t);if(Bt.trace("Searching children of id ",t,n),n.length<1)return Bt.trace("This is a valid node",t),t;for(const r of n){const n=Ns(r,e);if(n)return Bt.trace("Found replacement for",t," => ",n),n}},Ds=t=>Es[t]&&Es[t].externalConnections&&Es[t]?Es[t].id:t,Os=(t,e)=>{if(Bt.warn("extractor - ",e,ht.c(t),t.children("D")),e>10)return void Bt.error("Bailing out");let n=t.nodes(),r=!1;for(const i of n){const e=t.children(i);r=r||e.length>0}if(r){Bt.debug("Nodes = ",n,e);for(const r of n)if(Bt.debug("Extracting node",r,Es,Es[r]&&!Es[r].externalConnections,!t.parent(r),t.node(r),t.children("D")," Depth ",e),Es[r])if(!Es[r].externalConnections&&t.children(r)&&t.children(r).length>0){Bt.warn("Cluster without external connections, without a parent and with children",r,e);let n="TB"===t.graph().rankdir?"LR":"TB";Es[r]&&Es[r].clusterData&&Es[r].clusterData.dir&&(n=Es[r].clusterData.dir,Bt.warn("Fixing dir",Es[r].clusterData.dir,n));const i=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));Bt.warn("Old graph before copy",ht.c(t)),Ls(r,t,i,r),t.setNode(r,{clusterNode:!0,id:r,clusterData:Es[r].clusterData,labelText:Es[r].labelText,graph:i}),Bt.warn("New graph after copy node: (",r,")",ht.c(i)),Bt.debug("Old graph after copy",ht.c(t))}else Bt.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!Es[r].externalConnections," no parent: ",!t.parent(r)," children ",t.children(r)&&t.children(r).length>0,t.children("D"),e),Bt.debug(Es);else Bt.debug("Not a cluster",r,e);n=t.nodes(),Bt.warn("New list of nodes",n);for(const r of n){const n=t.node(r);Bt.warn(" Now next level",r,n),n.clusterNode&&Os(n.graph,e+1)}}else Bt.debug("Done, no node has children",t.nodes())},Ms=(t,e)=>{if(0===e.length)return[];let n=Object.assign(e);return e.forEach((e=>{const r=t.children(e),i=Ms(t,r);n=[...n,...i]})),n};function Is(t,e,n,r){var i=t.x,a=t.y,s=i-r.x,o=a-r.y,c=Math.sqrt(e*e*o*o+n*n*s*s),l=Math.abs(e*n*s/c);r.x<i&&(l=-l);var h=Math.abs(e*n*o/c);return r.y<a&&(h=-h),{x:i+l,y:a+h}}function Fs(t,e,n,r){var i,a,s,o,c,l,h,u,d,p,f,g,y;if(i=e.y-t.y,s=t.x-e.x,c=e.x*t.y-t.x*e.y,d=i*n.x+s*n.y+c,p=i*r.x+s*r.y+c,!(0!==d&&0!==p&&$s(d,p)||(a=r.y-n.y,o=n.x-r.x,l=r.x*n.y-n.x*r.y,h=a*t.x+o*t.y+l,u=a*e.x+o*e.y+l,0!==h&&0!==u&&$s(h,u)||0==(f=i*o-a*s))))return g=Math.abs(f/2),{x:(y=s*l-o*c)<0?(y-g)/f:(y+g)/f,y:(y=a*c-i*l)<0?(y-g)/f:(y+g)/f}}function $s(t,e){return t*e>0}const Rs=(t,e)=>{var n,r,i=t.x,a=t.y,s=e.x-i,o=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(o)*c>Math.abs(s)*l?(o<0&&(l=-l),n=0===o?0:l*s/o,r=l):(s<0&&(c=-c),n=c,r=0===s?0:c*o/s),{x:i+n,y:a+r}},Zs={node:function(t,e){return t.intersect(e)},circle:function(t,e,n){return Is(t,e,e,n)},ellipse:Is,polygon:function(t,e,n){var r=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),o=Math.min(o,t.y)})):(s=Math.min(s,e.x),o=Math.min(o,e.y));for(var c=r-t.width/2-s,l=i-t.height/2-o,h=0;h<e.length;h++){var u=e[h],d=e[h<e.length-1?h+1:0],p=Fs(t,n,{x:c+u.x,y:l+u.y},{x:c+d.x,y:l+d.y});p&&a.push(p)}return a.length?(a.length>1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),s=e.x-n.x,o=e.y-n.y,c=Math.sqrt(s*s+o*o);return a<c?-1:a===c?0:1})),a[0]):t},rect:Rs},Ps=(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=ks(t,e,"node "+e.classes,!0);Bt.info("Classes = ",e.classes);const a=n.insert("rect",":first-child");return a.attr("rx",e.rx).attr("ry",e.ry).attr("x",-r.width/2-i).attr("y",-r.height/2-i).attr("width",r.width+e.padding).attr("height",r.height+e.padding),ws(e,a),e.intersect=function(t){return Zs.rect(e,t)},n},js=(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding+(r.height+e.padding),a=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];Bt.info("Question main (Circle)");const s=Cs(n,i,i,a);return s.attr("style",e.style),ws(e,s),e.intersect=function(t){return Bt.warn("Intersect called"),Zs.polygon(e,a,t)},n};function Ys(t,e,n,r){const i=[],a=t=>{i.push(t,0)},s=t=>{i.push(0,t)};e.includes("t")?(Bt.debug("add top border"),a(n)):s(n),e.includes("r")?(Bt.debug("add right border"),a(r)):s(r),e.includes("b")?(Bt.debug("add bottom border"),a(n)):s(n),e.includes("l")?(Bt.debug("add left border"),a(r)):s(r),t.attr("stroke-dasharray",i.join(" "))}const zs=(t,e,n)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let i=70,a=10;"LR"===n&&(i=10,a=70);const s=r.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return ws(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Zs.rect(e,t)},r},Us={rhombus:js,question:js,rect:(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=ks(t,e,"node "+e.classes,!0);Bt.trace("Classes = ",e.classes);const a=n.insert("rect",":first-child"),s=r.width+e.padding,o=r.height+e.padding;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-r.width/2-i).attr("y",-r.height/2-i).attr("width",s).attr("height",o),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(Ys(a,e.props.borders,s,o),t.delete("borders")),t.forEach((t=>{Bt.warn(`Unknown node property ${t}`)}))}return ws(e,a),e.intersect=function(t){return Zs.rect(e,t)},n},labelRect:(t,e)=>{const{shapeSvg:n}=ks(t,e,"label",!0);Bt.trace("Classes = ",e.classes);const r=n.insert("rect",":first-child");if(r.attr("width",0).attr("height",0),n.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(Ys(r,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{Bt.warn(`Unknown node property ${t}`)}))}return ws(e,r),e.intersect=function(t){return Zs.rect(e,t)},n},rectWithTitle:(t,e)=>{let n;n=e.classes?"node "+e.classes:"node default";const r=t.insert("g").attr("class",n).attr("id",e.domId||e.id),i=r.insert("rect",":first-child"),a=r.insert("line"),s=r.insert("g").attr("class","label"),c=e.labelText.flat?e.labelText.flat():e.labelText;let l="";l="object"==typeof c?c[0]:c,Bt.info("Label text abc79",l,c,"object"==typeof c);const h=s.node().appendChild(vs(l,e.labelStyle,!0,!0));let u={width:0,height:0};if(Zt(gr().flowchart.htmlLabels)){const t=h.children[0],e=(0,o.Ys)(h);u=t.getBoundingClientRect(),e.attr("width",u.width),e.attr("height",u.height)}Bt.info("Text 2",c);const d=c.slice(1,c.length);let p=h.getBBox();const f=s.node().appendChild(vs(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(Zt(gr().flowchart.htmlLabels)){const t=f.children[0],e=(0,o.Ys)(f);u=t.getBoundingClientRect(),e.attr("width",u.width),e.attr("height",u.height)}const g=e.padding/2;return(0,o.Ys)(f).attr("transform","translate( "+(u.width>p.width?0:(p.width-u.width)/2)+", "+(p.height+g+5)+")"),(0,o.Ys)(h).attr("transform","translate( "+(u.width<p.width?0:-(p.width-u.width)/2)+", 0)"),u=s.node().getBBox(),s.attr("transform","translate("+-u.width/2+", "+(-u.height/2-g+3)+")"),i.attr("class","outer title-state").attr("x",-u.width/2-g).attr("y",-u.height/2-g).attr("width",u.width+e.padding).attr("height",u.height+e.padding),a.attr("class","divider").attr("x1",-u.width/2-g).attr("x2",u.width/2+g).attr("y1",-u.height/2-g+p.height+g).attr("y2",-u.height/2-g+p.height+g),ws(e,i),e.intersect=function(t){return Zs.rect(e,t)},r},choice:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return n.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return Zs.circle(e,14,t)},n},circle:(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=ks(t,e,void 0,!0),a=n.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",r.width/2+i).attr("width",r.width+e.padding).attr("height",r.height+e.padding),Bt.info("Circle main"),ws(e,a),e.intersect=function(t){return Bt.info("Circle intersect",e,r.width/2+i,t),Zs.circle(e,r.width/2+i,t)},n},doublecircle:(t,e)=>{const{shapeSvg:n,bbox:r,halfPadding:i}=ks(t,e,void 0,!0),a=n.insert("g",":first-child"),s=a.insert("circle"),o=a.insert("circle");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",r.width/2+i+5).attr("width",r.width+e.padding+10).attr("height",r.height+e.padding+10),o.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",r.width/2+i).attr("width",r.width+e.padding).attr("height",r.height+e.padding),Bt.info("DoubleCircle main"),ws(e,s),e.intersect=function(t){return Bt.info("DoubleCircle intersect",e,r.width/2+i+5,t),Zs.circle(e,r.width/2+i+5,t)},n},stadium:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.height+e.padding,a=r.width+i/4+e.padding,s=n.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return ws(e,s),e.intersect=function(t){return Zs.rect(e,t)},n},hexagon:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.height+e.padding,a=i/4,s=r.width+2*a+e.padding,o=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-i/2},{x:s-a,y:-i},{x:a,y:-i},{x:0,y:-i/2}],c=Cs(n,s,i,o);return c.attr("style",e.style),ws(e,c),e.intersect=function(t){return Zs.polygon(e,o,t)},n},rect_left_inv_arrow:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Cs(n,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(t){return Zs.polygon(e,s,t)},n},lean_right:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],o=Cs(n,i,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},lean_left:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],o=Cs(n,i,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},trapezoid:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],o=Cs(n,i,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},inv_trapezoid:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],o=Cs(n,i,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},rect_right_inv_arrow:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],o=Cs(n,i,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},cylinder:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=i/2,s=a/(2.5+i/50),o=r.height+s+e.padding,c="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+o+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-o,l=n.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",c).attr("transform","translate("+-i/2+","+-(o/2+s)+")");return ws(e,l),e.intersect=function(t){const n=Zs.rect(e,t),r=n.x-e.x;if(0!=a&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(n.y-e.y)>e.height/2-s)){let i=s*s*(1-r*r/(a*a));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},n},start:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ws(e,r),e.intersect=function(t){return Zs.circle(e,7,t)},n},end:(t,e)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ws(e,i),e.intersect=function(t){return Zs.circle(e,7,t)},n},note:Ps,subroutine:(t,e)=>{const{shapeSvg:n,bbox:r}=ks(t,e,void 0,!0),i=r.width+e.padding,a=r.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],o=Cs(n,i,a,s);return o.attr("style",e.style),ws(e,o),e.intersect=function(t){return Zs.polygon(e,s,t)},n},fork:zs,join:zs,class_box:(t,e)=>{const n=e.padding/2;let r;r=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",r).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),s=i.insert("line"),c=i.insert("line");let l=0,h=4;const u=i.insert("g").attr("class","label");let d=0;const p=e.classData.annotations&&e.classData.annotations[0],f=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",g=u.node().appendChild(vs(f,e.labelStyle,!0,!0));let y=g.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=g.children[0],e=(0,o.Ys)(g);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}e.classData.annotations[0]&&(h+=y.height+4,l+=y.width);let m=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(gr().flowchart.htmlLabels?m+="<"+e.classData.type+">":m+="<"+e.classData.type+">");const b=u.node().appendChild(vs(m,e.labelStyle,!0,!0));(0,o.Ys)(b).attr("class","classTitle");let _=b.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=b.children[0],e=(0,o.Ys)(b);_=t.getBoundingClientRect(),e.attr("width",_.width),e.attr("height",_.height)}h+=_.height+4,_.width>l&&(l=_.width);const x=[];e.classData.members.forEach((t=>{const n=os(t);let r=n.displayText;gr().flowchart.htmlLabels&&(r=r.replace(/</g,"<").replace(/>/g,">"));const i=u.node().appendChild(vs(r,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0));let a=i.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=i.children[0],e=(0,o.Ys)(i);a=t.getBoundingClientRect(),e.attr("width",a.width),e.attr("height",a.height)}a.width>l&&(l=a.width),h+=a.height+4,x.push(i)})),h+=8;const v=[];if(e.classData.methods.forEach((t=>{const n=os(t);let r=n.displayText;gr().flowchart.htmlLabels&&(r=r.replace(/</g,"<").replace(/>/g,">"));const i=u.node().appendChild(vs(r,n.cssStyle?n.cssStyle:e.labelStyle,!0,!0));let a=i.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=i.children[0],e=(0,o.Ys)(i);a=t.getBoundingClientRect(),e.attr("width",a.width),e.attr("height",a.height)}a.width>l&&(l=a.width),h+=a.height+4,v.push(i)})),h+=8,p){let t=(l-y.width)/2;(0,o.Ys)(g).attr("transform","translate( "+(-1*l/2+t)+", "+-1*h/2+")"),d=y.height+4}let k=(l-_.width)/2;return(0,o.Ys)(b).attr("transform","translate( "+(-1*l/2+k)+", "+(-1*h/2+d)+")"),d+=_.height+4,s.attr("class","divider").attr("x1",-l/2-n).attr("x2",l/2+n).attr("y1",-h/2-n+8+d).attr("y2",-h/2-n+8+d),d+=8,x.forEach((t=>{(0,o.Ys)(t).attr("transform","translate( "+-l/2+", "+(-1*h/2+d+4)+")"),d+=_.height+4})),d+=8,c.attr("class","divider").attr("x1",-l/2-n).attr("x2",l/2+n).attr("y1",-h/2-n+8+d).attr("y2",-h/2-n+8+d),d+=8,v.forEach((t=>{(0,o.Ys)(t).attr("transform","translate( "+-l/2+", "+(-1*h/2+d)+")"),d+=_.height+4})),a.attr("class","outer title-state").attr("x",-l/2-n).attr("y",-h/2-n).attr("width",l+e.padding).attr("height",h+e.padding),ws(e,a),e.intersect=function(t){return Zs.rect(e,t)},i}};let Ws={};const Hs=(t,e,n)=>{let r,i;if(e.link){let a;"sandbox"===gr().securityLevel?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=Us[e.shape](r,e,n)}else i=Us[e.shape](t,e,n),r=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),Ws[e.id]=r,e.haveCallback&&Ws[e.id].attr("class",Ws[e.id].attr("class")+" clickable"),r},qs=t=>{const e=Ws[t.id];Bt.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},Vs={rect:(t,e)=>{Bt.trace("Creating subgraph rect for ",e.id,e);const n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(vs(e.labelText,e.labelStyle,void 0,!0));let s=a.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=a.children[0],e=(0,o.Ys)(a);s=t.getBoundingClientRect(),e.attr("width",s.width),e.attr("height",s.height)}const c=0*e.padding,l=c/2,h=e.width<=s.width+c?s.width+c:e.width;e.width<=s.width+c?e.diff=(s.width-e.width)/2-e.padding/2:e.diff=-e.padding/2,Bt.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-h/2).attr("y",e.y-e.height/2-l).attr("width",h).attr("height",e.height+c),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2)+")");const u=r.node().getBBox();return e.width=u.width,e.height=u.height,e.intersect=function(t){return Rs(e,t)},n},roundedWithTitle:(t,e)=>{const n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),s=i.node().appendChild(vs(e.labelText,e.labelStyle,void 0,!0));let c=s.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=s.children[0],e=(0,o.Ys)(s);c=t.getBoundingClientRect(),e.attr("width",c.width),e.attr("height",c.height)}c=s.getBBox();const l=0*e.padding,h=l/2,u=e.width<=c.width+e.padding?c.width+e.padding:e.width;e.width<=c.width+e.padding?e.diff=(c.width+0*e.padding-e.width)/2:e.diff=-e.padding/2,r.attr("class","outer").attr("x",e.x-u/2-h).attr("y",e.y-e.height/2-h).attr("width",u+l).attr("height",e.height+l),a.attr("class","inner").attr("x",e.x-u/2-h).attr("y",e.y-e.height/2-h+c.height-1).attr("width",u+l).attr("height",e.height+l-c.height-3),i.attr("transform","translate("+(e.x-c.width/2)+", "+(e.y-e.height/2-e.padding/3+(Zt(gr().flowchart.htmlLabels)?5:3))+")");const d=r.node().getBBox();return e.height=d.height,e.intersect=function(t){return Rs(e,t)},n},noteGroup:(t,e)=>{const n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");const s=r.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(t){return Rs(e,t)},n},divider:(t,e)=>{const n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);const s=r.node().getBBox();return e.width=s.width,e.height=s.height,e.diff=-e.padding/2,e.intersect=function(t){return Rs(e,t)},n}};let Gs={};let Xs={},Qs={};const Ks=(t,e)=>{const n=vs(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);let a,s=n.getBBox();if(Zt(gr().flowchart.htmlLabels)){const t=n.children[0],e=(0,o.Ys)(n);s=t.getBoundingClientRect(),e.attr("width",s.width),e.attr("height",s.height)}if(i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Xs[e.id]=r,e.width=s.width,e.height=s.height,e.startLabelLeft){const n=vs(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].startLeft=r,Js(a,e.startLabelLeft)}if(e.startLabelRight){const n=vs(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=r.node().appendChild(n),i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].startRight=r,Js(a,e.startLabelRight)}if(e.endLabelLeft){const n=vs(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),r.node().appendChild(n),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].endLeft=r,Js(a,e.endLabelLeft)}if(e.endLabelRight){const n=vs(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),i=r.insert("g").attr("class","inner");a=i.node().appendChild(n);const s=n.getBBox();i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),r.node().appendChild(n),Qs[e.id]||(Qs[e.id]={}),Qs[e.id].endRight=r,Js(a,e.endLabelRight)}return n};function Js(t,e){gr().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const to=(t,e)=>{Bt.warn("abc88 cutPathAtIntersect",t,e);let n=[],r=t[0],i=!1;return t.forEach((t=>{if(Bt.info("abc88 checking point",t,e),((t,e)=>{const n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),s=t.width/2,o=t.height/2;return i>=s||a>=o})(e,t)||i)Bt.warn("abc88 outside",t,r),r=t,i||n.push(t);else{const a=((t,e,n)=>{Bt.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(n)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const r=t.x,i=t.y,a=Math.abs(r-n.x),s=t.width/2;let o=n.x<e.x?s-a:s+a;const c=t.height/2,l=Math.abs(e.y-n.y),h=Math.abs(e.x-n.x);if(Math.abs(i-e.y)*s>Math.abs(r-e.x)*c){let t=n.y<e.y?e.y-c-i:i-c-e.y;o=h*t/l;const r={x:n.x<e.x?n.x+o:n.x-h+o,y:n.y<e.y?n.y+l-t:n.y-l+t};return 0===o&&(r.x=e.x,r.y=e.y),0===h&&(r.x=e.x),0===l&&(r.y=e.y),Bt.warn(`abc89 topp/bott calc, Q ${l}, q ${t}, R ${h}, r ${o}`,r),r}{o=n.x<e.x?e.x-s-r:r-s-e.x;let t=l*o/h,i=n.x<e.x?n.x+h-o:n.x-h+o,a=n.y<e.y?n.y+t:n.y-t;return Bt.warn(`sides calc abc89, Q ${l}, q ${t}, R ${h}, r ${o}`,{_x:i,_y:a}),0===o&&(i=e.x,a=e.y),0===h&&(i=e.x),0===l&&(a=e.y),{x:i,y:a}}})(e,r,t);Bt.warn("abc88 inside",t,r,a),Bt.warn("abc88 intersection",a);let s=!1;n.forEach((t=>{s=s||t.x===a.x&&t.y===a.y})),n.some((t=>t.x===a.x&&t.y===a.y))?Bt.warn("abc88 no intersect",a,n):n.push(a),i=!0}})),Bt.warn("abc88 returning points",n),n},eo=(t,e,n,r)=>{Bt.info("Graph in recursive render: XXX",ht.c(e),r);const i=e.graph().rankdir;Bt.trace("Dir in recursive render - dir:",i);const a=t.insert("g").attr("class","root");e.nodes()?Bt.info("Recursive render XXX",e.nodes()):Bt.info("No nodes found for",e),e.edges().length>0&&Bt.trace("Recursive edges",e.edge(e.edges()[0]));const s=a.insert("g").attr("class","clusters"),c=a.insert("g").attr("class","edgePaths"),l=a.insert("g").attr("class","edgeLabels"),h=a.insert("g").attr("class","nodes");e.nodes().forEach((function(t){const a=e.node(t);if(void 0!==r){const n=JSON.parse(JSON.stringify(r.clusterData));Bt.info("Setting data for cluster XXX (",t,") ",n,r),e.setNode(r.id,n),e.parent(t)||(Bt.trace("Setting parent",t,r.id),e.setParent(t,r.id,n))}if(Bt.info("(Insert) Node XXX"+t+": "+JSON.stringify(e.node(t))),a&&a.clusterNode){Bt.info("Cluster identified",t,a.width,e.node(t));const r=eo(h,a.graph,n,e.node(t)),i=r.elem;ws(a,i),a.diff=r.diff||0,Bt.info("Node bounds (abc123)",t,a,a.width,a.x,a.y),((t,e)=>{Ws[e.id]=t})(i,a),Bt.warn("Recursive render complete ",i,a)}else e.children(t).length>0?(Bt.info("Cluster - the non recursive path XXX",t,a.id,a,e),Bt.info(Ns(a.id,e)),Es[a.id]={id:Ns(a.id,e),node:a}):(Bt.info("Node - the non recursive path",t,a.id,a),Hs(h,e.node(t),i))})),e.edges().forEach((function(t){const n=e.edge(t.v,t.w,t.name);Bt.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),Bt.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(e.edge(t))),Bt.info("Fix",Es,"ids:",t.v,t.w,"Translateing: ",Es[t.v],Es[t.w]),Ks(l,n)})),e.edges().forEach((function(t){Bt.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),Bt.info("#############################################"),Bt.info("### Layout ###"),Bt.info("#############################################"),Bt.info(e),(0,ct.bK)(e),Bt.info("Graph after layout:",ht.c(e));let u=0;return(t=>Ms(t,t.children()))(e).forEach((function(t){const n=e.node(t);Bt.info("Position "+t+": "+JSON.stringify(e.node(t))),Bt.info("Position "+t+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?qs(n):e.children(t).length>0?(((t,e)=>{Bt.trace("Inserting cluster");const n=e.shape||"rect";Gs[e.id]=Vs[n](t,e)})(s,n),Es[n.id].node=n):qs(n)})),e.edges().forEach((function(t){const r=e.edge(t);Bt.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(r),r);const i=function(t,e,n,r,i,a){let s=n.points,c=!1;const l=a.node(e.v);var h=a.node(e.w);Bt.info("abc88 InsertEdge: ",n),h.intersect&&l.intersect&&(s=s.slice(1,n.points.length-1),s.unshift(l.intersect(s[0])),Bt.info("Last point",s[s.length-1],h,h.intersect(s[s.length-1])),s.push(h.intersect(s[s.length-1]))),n.toCluster&&(Bt.info("to cluster abc88",r[n.toCluster]),s=to(n.points,r[n.toCluster].node),c=!0),n.fromCluster&&(Bt.info("from cluster abc88",r[n.fromCluster]),s=to(s.reverse(),r[n.fromCluster].node).reverse(),c=!0);const u=s.filter((t=>!Number.isNaN(t.y)));let d;d=("graph"===i||"flowchart"===i)&&n.curve||o.$0Z;const p=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d);let f;switch(n.thickness){case"normal":f="edge-thickness-normal";break;case"thick":f="edge-thickness-thick";break;default:f=""}switch(n.pattern){case"solid":f+=" edge-pattern-solid";break;case"dotted":f+=" edge-pattern-dotted";break;case"dashed":f+=" edge-pattern-dashed"}const g=t.append("path").attr("d",p(u)).attr("id",n.id).attr("class"," "+f+(n.classes?" "+n.classes:"")).attr("style",n.style);let y="";switch((gr().flowchart.arrowMarkerAbsolute||gr().state.arrowMarkerAbsolute)&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),Bt.info("arrowTypeStart",n.arrowTypeStart),Bt.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":g.attr("marker-start","url("+y+"#"+i+"-crossStart)");break;case"arrow_point":g.attr("marker-start","url("+y+"#"+i+"-pointStart)");break;case"arrow_barb":g.attr("marker-start","url("+y+"#"+i+"-barbStart)");break;case"arrow_circle":g.attr("marker-start","url("+y+"#"+i+"-circleStart)");break;case"aggregation":g.attr("marker-start","url("+y+"#"+i+"-aggregationStart)");break;case"extension":g.attr("marker-start","url("+y+"#"+i+"-extensionStart)");break;case"composition":g.attr("marker-start","url("+y+"#"+i+"-compositionStart)");break;case"dependency":g.attr("marker-start","url("+y+"#"+i+"-dependencyStart)");break;case"lollipop":g.attr("marker-start","url("+y+"#"+i+"-lollipopStart)")}switch(n.arrowTypeEnd){case"arrow_cross":g.attr("marker-end","url("+y+"#"+i+"-crossEnd)");break;case"arrow_point":g.attr("marker-end","url("+y+"#"+i+"-pointEnd)");break;case"arrow_barb":g.attr("marker-end","url("+y+"#"+i+"-barbEnd)");break;case"arrow_circle":g.attr("marker-end","url("+y+"#"+i+"-circleEnd)");break;case"aggregation":g.attr("marker-end","url("+y+"#"+i+"-aggregationEnd)");break;case"extension":g.attr("marker-end","url("+y+"#"+i+"-extensionEnd)");break;case"composition":g.attr("marker-end","url("+y+"#"+i+"-compositionEnd)");break;case"dependency":g.attr("marker-end","url("+y+"#"+i+"-dependencyEnd)");break;case"lollipop":g.attr("marker-end","url("+y+"#"+i+"-lollipopEnd)")}let m={};return c&&(m.updatedPath=s),m.originalPath=n.points,m}(c,t,r,Es,n,e);((t,e)=>{Bt.info("Moving label abc78 ",t.id,t.label,Xs[t.id]);let n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const r=Xs[t.id];let i=t.x,a=t.y;if(n){const r=ar.calcLabelPosition(n);Bt.info("Moving label "+t.label+" from (",i,",",a,") to (",r.x,",",r.y,") abc78"),e.updatedPath&&(i=r.x,a=r.y)}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){const e=Qs[t.id].startLeft;let r=t.x,i=t.y;if(n){const e=ar.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}if(t.startLabelRight){const e=Qs[t.id].startRight;let r=t.x,i=t.y;if(n){const e=ar.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}if(t.endLabelLeft){const e=Qs[t.id].endLeft;let r=t.x,i=t.y;if(n){const e=ar.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}if(t.endLabelRight){const e=Qs[t.id].endRight;let r=t.x,i=t.y;if(n){const e=ar.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",n);r=e.x,i=e.y}e.attr("transform","translate("+r+", "+i+")")}})(r,i)})),e.nodes().forEach((function(t){const n=e.node(t);Bt.info(t,n.type,n.diff),"group"===n.type&&(u=n.diff)})),{elem:a,diff:u}},no=(t,e,n,r,i)=>{xs(t,n,r,i),Ws={},Xs={},Qs={},Gs={},Ts={},Ss={},Es={},Bt.warn("Graph at first:",ht.c(e)),((t,e)=>{!t||e>10?Bt.debug("Opting out, no graph "):(Bt.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(Bt.warn("Cluster identified",e," Replacement id in edges: ",Ns(e,t)),Ts[e]=Bs(e,t),Es[e]={id:Ns(e,t),clusterData:t.node(e)})})),t.nodes().forEach((function(e){const n=t.children(e),r=t.edges();n.length>0?(Bt.debug("Cluster identified",e,Ts),r.forEach((t=>{t.v!==e&&t.w!==e&&As(t.v,e)^As(t.w,e)&&(Bt.warn("Edge: ",t," leaves cluster ",e),Bt.warn("Decendants of XXX ",e,": ",Ts[e]),Es[e].externalConnections=!0)}))):Bt.debug("Not a cluster ",e,Ts)})),t.edges().forEach((function(e){const n=t.edge(e);Bt.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),Bt.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));let r=e.v,i=e.w;if(Bt.warn("Fix XXX",Es,"ids:",e.v,e.w,"Translating: ",Es[e.v]," --- ",Es[e.w]),Es[e.v]&&Es[e.w]&&Es[e.v]===Es[e.w]){Bt.warn("Fixing and trixing link to self - removing XXX",e.v,e.w,e.name),Bt.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=Ds(e.v),i=Ds(e.w),t.removeEdge(e.v,e.w,e.name);const a=e.w+"---"+e.v;t.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const s=JSON.parse(JSON.stringify(n)),o=JSON.parse(JSON.stringify(n));s.label="",s.arrowTypeEnd="none",o.label="",s.fromCluster=e.v,o.toCluster=e.v,t.setEdge(r,a,s,e.name+"-cyclic-special"),t.setEdge(a,i,o,e.name+"-cyclic-special")}else(Es[e.v]||Es[e.w])&&(Bt.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=Ds(e.v),i=Ds(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),Bt.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),Bt.warn("Adjusted Graph",ht.c(t)),Os(t,0),Bt.trace(Es))})(e),Bt.warn("Graph after:",ht.c(e)),eo(t,e,r)},ro=t=>jt.sanitizeText(t,gr());let io={dividerMargin:10,padding:5,textHeight:10};function ao(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const so={setConf:function(t){Object.keys(t).forEach((function(e){io[e]=t[e]}))},draw:function(t,e,n,r){Bt.info("Drawing class - ",e);const i=gr().flowchart,a=gr().securityLevel;Bt.info("config:",i);const s=i.nodeSpacing||50,c=i.rankSpacing||50,l=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:r.db.getDirection(),nodesep:s,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=r.db.getClasses(),u=r.db.getRelations(),d=r.db.getNotes();let p;Bt.info(u),function(t,e,n,r){const i=Object.keys(t);Bt.info("keys:",i),Bt.info(t),i.forEach((function(n){const i=t[n];let a="";i.cssClasses.length>0&&(a=a+" "+i.cssClasses.join(" "));const s={labelStyle:""};let o=void 0!==i.text?i.text:i.id,c="";i.type,c="class_box",e.setNode(i.id,{labelStyle:s.labelStyle,shape:c,labelText:ro(o),classData:i,rx:0,ry:0,class:a,style:s.style,id:i.id,domId:i.domId,tooltip:r.db.getTooltip(i.id)||"",haveCallback:i.haveCallback,link:i.link,width:"group"===i.type?500:void 0,type:i.type,padding:gr().flowchart.padding}),Bt.info("setNode",{labelStyle:s.labelStyle,shape:c,labelText:o,rx:0,ry:0,class:a,style:s.style,id:i.id,width:"group"===i.type?500:void 0,type:i.type,padding:gr().flowchart.padding})}))}(h,l,0,r),function(t,e){const n=gr().flowchart;let r=0;t.forEach((function(i){r++;const a={classes:"relation"};a.pattern=1==i.relation.lineType?"dashed":"solid",a.id="id"+r,"arrow_open"===i.type?a.arrowhead="none":a.arrowhead="normal",Bt.info(a,i),a.startLabelRight="none"===i.relationTitle1?"":i.relationTitle1,a.endLabelLeft="none"===i.relationTitle2?"":i.relationTitle2,a.arrowTypeStart=ao(i.relation.type1),a.arrowTypeEnd=ao(i.relation.type2);let s="",c="";if(void 0!==i.style){const t=Un(i.style);s=t.style,c=t.labelStyle}else s="fill:none";a.style=s,a.labelStyle=c,void 0!==i.interpolate?a.curve=Yn(i.interpolate,o.c_6):void 0!==t.defaultInterpolate?a.curve=Yn(t.defaultInterpolate,o.c_6):a.curve=Yn(n.curve,o.c_6),i.text=i.title,void 0===i.text?void 0!==i.style&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",a.labelpos="c",gr().flowchart.htmlLabels?(a.labelType="html",a.label='<span class="edgeLabel">'+i.text+"</span>"):(a.labelType="text",a.label=i.text.replace(jt.lineBreakRegex,"\n"),void 0===i.style&&(a.style=a.style||"stroke: #333; stroke-width: 1.5px;fill:none"),a.labelStyle=a.labelStyle.replace("color:","fill:"))),e.setEdge(i.id1,i.id2,a,r)}))}(u,l),function(t,e,n,r){Bt.info(t),t.forEach((function(t,i){const a=t,s="",c="";let l=a.text,h="note";if(e.setNode(a.id,{labelStyle:s,shape:h,labelText:ro(l),noteData:a,rx:0,ry:0,class:"",style:c,id:a.id,domId:a.id,tooltip:"",type:"note",padding:gr().flowchart.padding}),Bt.info("setNode",{labelStyle:s,shape:h,labelText:l,rx:0,ry:0,style:c,id:a.id,type:"note",padding:gr().flowchart.padding}),!a.class||!(a.class in r))return;const u=n+i,d={classes:"relation",pattern:"dotted"};d.id=`edgeNote${u}`,d.arrowhead="none",Bt.info(`Note edge: ${JSON.stringify(d)}, ${JSON.stringify(a)}`),d.startLabelRight="",d.endLabelLeft="",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.style="fill:none",d.labelStyle="",d.curve=Yn(io.curve,o.c_6),e.setEdge(a.id,a.class,d,u)}))}(d,l,u.length+1,h),"sandbox"===a&&(p=(0,o.Ys)("#i"+e));const f="sandbox"===a?(0,o.Ys)(p.nodes()[0].contentDocument.body):(0,o.Ys)("body"),g=f.select(`[id="${e}"]`),y=f.select("#"+e+" g");if(no(y,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),ar.insertTitle(g,"classTitleText",i.titleTopMargin,r.db.getDiagramTitle()),wr(l,g,i.diagramPadding,i.useMaxWidth),!i.htmlLabels){const t="sandbox"===a?p.nodes()[0].contentDocument:document,n=t.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const e of n){const n=e.getBBox(),r=t.createElementNS("http://www.w3.org/2000/svg","rect");r.setAttribute("rx",0),r.setAttribute("ry",0),r.setAttribute("width",n.width),r.setAttribute("height",n.height),e.insertBefore(r,e.firstChild)}}}};var oo=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,5],i=[6,9,11,23,25,27,29,30,31,51],a=[1,17],s=[1,18],o=[1,19],c=[1,20],l=[1,21],h=[1,22],u=[1,25],d=[1,30],p=[1,31],f=[1,32],g=[1,33],y=[6,9,11,15,20,23,25,27,29,30,31,44,45,46,47,51],m=[1,45],b=[30,31,48,49],_=[4,6,9,11,23,25,27,29,30,31,51],x=[44,45,46,47],v=[22,37],k=[1,65],w=[1,64],C=[22,37,39,41],E={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyTypeList:35,attributeComment:36,ATTRIBUTE_WORD:37,attributeKeyType:38,COMMA:39,ATTRIBUTE_KEY:40,COMMENT:41,cardinality:42,relType:43,ZERO_OR_ONE:44,ZERO_OR_MORE:45,ONE_OR_MORE:46,ONLY_ONE:47,NON_IDENTIFYING:48,IDENTIFYING:49,WORD:50,open_directive:51,type_directive:52,arg_directive:53,close_directive:54,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",39:"COMMA",40:"ATTRIBUTE_KEY",41:"COMMENT",44:"ZERO_OR_ONE",45:"ZERO_OR_MORE",46:"ONE_OR_MORE",47:"ONLY_ONE",48:"NON_IDENTIFYING",49:"IDENTIFYING",50:"WORD",51:"open_directive",52:"type_directive",53:"arg_directive",54:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[35,3],[38,1],[36,1],[18,3],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:case 20:case 43:case 28:case 29:case 32:this.$=a[o];break;case 12:r.addEntity(a[o-4]),r.addEntity(a[o-2]),r.addRelationship(a[o-4],a[o],a[o-2],a[o-3]);break;case 13:r.addEntity(a[o-3]),r.addAttributes(a[o-3],a[o-1]);break;case 14:r.addEntity(a[o-2]);break;case 15:r.addEntity(a[o]);break;case 16:case 17:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 21:case 41:case 42:case 33:this.$=a[o].replace(/"/g,"");break;case 22:case 30:this.$=[a[o]];break;case 23:a[o].push(a[o-1]),this.$=a[o];break;case 24:this.$={attributeType:a[o-1],attributeName:a[o]};break;case 25:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeKeyTypeList:a[o]};break;case 26:this.$={attributeType:a[o-2],attributeName:a[o-1],attributeComment:a[o]};break;case 27:this.$={attributeType:a[o-3],attributeName:a[o-2],attributeKeyTypeList:a[o-1],attributeComment:a[o]};break;case 31:a[o-2].push(a[o]),this.$=a[o-2];break;case 34:this.$={cardA:a[o],relType:a[o-1],cardB:a[o-2]};break;case 35:this.$=r.Cardinality.ZERO_OR_ONE;break;case 36:this.$=r.Cardinality.ZERO_OR_MORE;break;case 37:this.$=r.Cardinality.ONE_OR_MORE;break;case 38:this.$=r.Cardinality.ONLY_ONE;break;case 39:this.$=r.Identification.NON_IDENTIFYING;break;case 40:this.$=r.Identification.IDENTIFYING;break;case 44:r.parseDirective("%%{","open_directive");break;case 45:r.parseDirective(a[o],"type_directive");break;case 46:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 47:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:n,7:3,12:4,51:r},{1:[3]},e(i,[2,3],{5:6}),{3:7,4:n,7:3,12:4,51:r},{13:8,52:[1,9]},{52:[2,44]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:a,25:s,27:o,29:c,30:l,31:h,51:r},{1:[2,2]},{14:23,15:[1,24],54:u},e([15,54],[2,45]),e(i,[2,8],{1:[2,1]}),e(i,[2,4]),{7:15,10:26,12:4,17:16,23:a,25:s,27:o,29:c,30:l,31:h,51:r},e(i,[2,6]),e(i,[2,7]),e(i,[2,11]),e(i,[2,15],{18:27,42:29,20:[1,28],44:d,45:p,46:f,47:g}),{24:[1,34]},{26:[1,35]},{28:[1,36]},e(i,[2,19]),e(y,[2,20]),e(y,[2,21]),{11:[1,37]},{16:38,53:[1,39]},{11:[2,47]},e(i,[2,5]),{17:40,30:l,31:h},{21:41,22:[1,42],32:43,33:44,37:m},{43:46,48:[1,47],49:[1,48]},e(b,[2,35]),e(b,[2,36]),e(b,[2,37]),e(b,[2,38]),e(i,[2,16]),e(i,[2,17]),e(i,[2,18]),e(_,[2,9]),{14:49,54:u},{54:[2,46]},{15:[1,50]},{22:[1,51]},e(i,[2,14]),{21:52,22:[2,22],32:43,33:44,37:m},{34:53,37:[1,54]},{37:[2,28]},{42:55,44:d,45:p,46:f,47:g},e(x,[2,39]),e(x,[2,40]),{11:[1,56]},{19:57,30:[1,60],31:[1,59],50:[1,58]},e(i,[2,13]),{22:[2,23]},e(v,[2,24],{35:61,36:62,38:63,40:k,41:w}),e([22,37,40,41],[2,29]),e([30,31],[2,34]),e(_,[2,10]),e(i,[2,12]),e(i,[2,41]),e(i,[2,42]),e(i,[2,43]),e(v,[2,25],{36:66,39:[1,67],41:w}),e(v,[2,26]),e(C,[2,30]),e(v,[2,33]),e(C,[2,32]),e(v,[2,27]),{38:68,40:k},e(C,[2,31])],defaultActions:{5:[2,44],7:[2,2],25:[2,47],39:[2,46],45:[2,28],52:[2,23]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},T=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;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 this.begin("open_directive"),51;case 8:return this.begin("type_directive"),52;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),54;case 11:return 53;case 12:case 13:case 15:case 22:case 27:break;case 14:return 11;case 16:return 9;case 17:return 31;case 18:return 50;case 19:return 4;case 20:return this.begin("block"),20;case 21:return 39;case 23:return 40;case 24:case 25:return 37;case 26:return 41;case 28:return this.popState(),22;case 29:case 58:return e.yytext[0];case 30:case 34:case 35:case 48:return 44;case 31:case 32:case 33:case 41:case 43:case 50:return 46;case 36:case 37:case 38:case 39:case 40:case 42:case 49:return 45;case 44:case 45:case 46:case 47:return 47;case 51:case 54:case 55:case 56:return 48;case 52:case 53:return 49;case 57:return 30;case 59:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/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,/^(?: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,/^(?:\.\.)/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},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[21,22,23,24,25,26,27,28,29],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,19,20,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],inclusive:!0}}},t);function S(){this.yy={}}return E.lexer=T,S.prototype=E,E.Parser=S,new S}();oo.parser=oo;const co=oo,lo=t=>null!==t.match(/^\s*erDiagram/);let ho={},uo=[];const po=function(t){return void 0===ho[t]&&(ho[t]={attributes:[]},Bt.info("Added new entity :",t)),ho[t]},fo={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().er,addEntity:po,addAttributes:function(t,e){let n,r=po(t);for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),Bt.debug("Added attribute ",e[n].attributeName)},getEntities:()=>ho,addRelationship:function(t,e,n,r){let i={entityA:t,roleA:e,entityB:n,relSpec:r};uo.push(i),Bt.debug("Added new relationship :",i)},getRelationships:()=>uo,clear:function(){ho={},uo=[],Yr()},setAccTitle:zr,getAccTitle:Ur,setAccDescription:Wr,getAccDescription:Hr,setDiagramTitle:qr,getDiagramTitle:Vr},go={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"},yo=go,mo=function(t,e){let n;t.append("defs").append("marker").attr("id",go.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",go.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"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",go.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",go.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"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),n=t.append("defs").append("marker").attr("id",go.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),n.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},bo=/[^\dA-Za-z](\W)*/g;let _o={},xo=new Map;const vo=function(t,e,n){let r;return Object.keys(e).forEach((function(i){const a=function(t="",e=""){const n=t.replace(bo,"");return`${Eo(e)}${Eo(n)}${xt(t,Co)}`}(i,"entity");xo.set(i,a);const s=t.append("g").attr("id",a);r=void 0===r?a:r;const o="text-"+a,c=s.append("text").classed("er entityLabel",!0).attr("id",o).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",gr().fontFamily).style("font-size",_o.fontSize+"px").text(i),{width:l,height:h}=((t,e,n)=>{const r=_o.entityPadding/3,i=_o.entityPadding/3,a=.85*_o.fontSize,s=e.node().getBBox(),o=[];let c=!1,l=!1,h=0,u=0,d=0,p=0,f=s.height+2*r,g=1;n.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(c=!0),void 0!==t.attributeComment&&(l=!0)})),n.forEach((n=>{const i=`${e.node().id}-attr-${g}`;let s=0;const y=Pt(n.attributeType),m=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gr().fontFamily).style("font-size",a+"px").text(y),b=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gr().fontFamily).style("font-size",a+"px").text(n.attributeName),_={};_.tn=m,_.nn=b;const x=m.node().getBBox(),v=b.node().getBBox();if(h=Math.max(h,x.width),u=Math.max(u,v.width),s=Math.max(x.height,v.height),c){const e=void 0!==n.attributeKeyTypeList?n.attributeKeyTypeList.join(","):"",r=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gr().fontFamily).style("font-size",a+"px").text(e);_.kn=r;const o=r.node().getBBox();d=Math.max(d,o.width),s=Math.max(s,o.height)}if(l){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${i}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",gr().fontFamily).style("font-size",a+"px").text(n.attributeComment||"");_.cn=e;const r=e.node().getBBox();p=Math.max(p,r.width),s=Math.max(s,r.height)}_.height=s,o.push(_),f+=s+2*r,g+=1}));let y=4;c&&(y+=2),l&&(y+=2);const m=h+u+d+p,b={width:Math.max(_o.minEntityWidth,Math.max(s.width+2*_o.entityPadding,m+i*y)),height:n.length>0?f:Math.max(_o.minEntityHeight,s.height+2*_o.entityPadding)};if(n.length>0){const n=Math.max(0,(b.width-m-i*y)/(y/2));e.attr("transform","translate("+b.width/2+","+(r+s.height/2)+")");let a=s.height+2*r,f="attributeBoxOdd";o.forEach((e=>{const s=a+r+e.height/2;e.tn.attr("transform","translate("+i+","+s+")");const o=t.insert("rect","#"+e.tn.node().id).classed(`er ${f}`,!0).attr("x",0).attr("y",a).attr("width",h+2*i+n).attr("height",e.height+2*r),g=parseFloat(o.attr("x"))+parseFloat(o.attr("width"));e.nn.attr("transform","translate("+(g+i)+","+s+")");const y=t.insert("rect","#"+e.nn.node().id).classed(`er ${f}`,!0).attr("x",g).attr("y",a).attr("width",u+2*i+n).attr("height",e.height+2*r);let m=parseFloat(y.attr("x"))+parseFloat(y.attr("width"));if(c){e.kn.attr("transform","translate("+(m+i)+","+s+")");const o=t.insert("rect","#"+e.kn.node().id).classed(`er ${f}`,!0).attr("x",m).attr("y",a).attr("width",d+2*i+n).attr("height",e.height+2*r);m=parseFloat(o.attr("x"))+parseFloat(o.attr("width"))}l&&(e.cn.attr("transform","translate("+(m+i)+","+s+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${f}`,"true").attr("x",m).attr("y",a).attr("width",p+2*i+n).attr("height",e.height+2*r)),a+=e.height+2*r,f="attributeBoxOdd"===f?"attributeBoxEven":"attributeBoxOdd"}))}else b.height=Math.max(_o.minEntityHeight,f),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b})(s,c,e[i].attributes),u=s.insert("rect","#"+o).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",l).attr("height",h).node().getBBox();n.setNode(a,{width:u.width,height:u.height,shape:"rect",id:a})})),r},ko=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let wo=0;const Co="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function Eo(t=""){return t.length>0?`${t}-`:""}const To={setConf:function(t){const e=Object.keys(t);for(const n of e)_o[n]=t[n]},draw:function(t,e,n,r){_o=gr().er,Bt.info("Drawing ER diagram");const i=gr().securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s=("sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select(`[id='${e}']`);let c;mo(s,_o),c=new lt.k({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:_o.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const l=vo(s,r.db.getEntities(),c),h=function(t,e){return t.forEach((function(t){e.setEdge(xo.get(t.entityA),xo.get(t.entityB),{relationship:t},ko(t))})),t}(r.db.getRelationships(),c);var u,d;(0,ct.bK)(c),u=s,(d=c).nodes().forEach((function(t){void 0!==t&&void 0!==d.node(t)&&u.select("#"+t).attr("transform","translate("+(d.node(t).x-d.node(t).width/2)+","+(d.node(t).y-d.node(t).height/2)+" )")})),h.forEach((function(t){!function(t,e,n,r,i){wo++;const a=n.edge(xo.get(e.entityA),xo.get(e.entityB),ko(e)),s=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),c=t.insert("path","#"+r).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",_o.stroke).style("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&c.attr("stroke-dasharray","8,8");let l="";switch(_o.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:c.attr("marker-end","url("+l+"#"+yo.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:c.attr("marker-end","url("+l+"#"+yo.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:c.attr("marker-end","url("+l+"#"+yo.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:c.attr("marker-end","url("+l+"#"+yo.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:c.attr("marker-start","url("+l+"#"+yo.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:c.attr("marker-start","url("+l+"#"+yo.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:c.attr("marker-start","url("+l+"#"+yo.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:c.attr("marker-start","url("+l+"#"+yo.ONLY_ONE_START+")")}const h=c.node().getTotalLength(),u=c.node().getPointAtLength(.5*h),d="rel"+wo,p=t.append("text").classed("er relationshipLabel",!0).attr("id",d).attr("x",u.x).attr("y",u.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",gr().fontFamily).style("font-size",_o.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+d).classed("er relationshipLabelBox",!0).attr("x",u.x-p.width/2).attr("y",u.y-p.height/2).attr("width",p.width).attr("height",p.height)}(s,t,c,l,r)}));const p=_o.diagramPadding;ar.insertTitle(s,"entityTitleText",_o.titleTopMargin,r.db.getDiagramTitle());const f=s.node().getBBox(),g=f.width+2*p,y=f.height+2*p;kr(s,y,g,_o.useMaxWidth),s.attr("viewBox",`${f.x-p} ${f.y-p} ${g} ${y}`)}};var So=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,9],r=[1,7],i=[1,6],a=[1,8],s=[1,20,21,22,23,38,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],o=[2,10],c=[1,20],l=[1,21],h=[1,22],u=[1,23],d=[1,30],p=[1,32],f=[1,33],g=[1,34],y=[1,62],m=[1,48],b=[1,52],_=[1,36],x=[1,37],v=[1,38],k=[1,39],w=[1,40],C=[1,56],E=[1,63],T=[1,51],S=[1,53],A=[1,55],L=[1,59],B=[1,60],N=[1,41],D=[1,42],O=[1,43],M=[1,44],I=[1,61],F=[1,50],$=[1,54],R=[1,57],Z=[1,58],P=[1,49],j=[1,66],Y=[1,71],z=[1,20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],U=[1,75],W=[1,74],H=[1,76],q=[20,21,23,81,82],V=[1,99],G=[1,104],X=[1,107],Q=[1,108],K=[1,101],J=[1,106],tt=[1,109],et=[1,102],nt=[1,114],rt=[1,113],it=[1,103],at=[1,105],st=[1,110],ot=[1,111],ct=[1,112],lt=[1,115],ht=[20,21,22,23,81,82],ut=[20,21,22,23,53,81,82],dt=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],pt=[20,21,23],ft=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],gt=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],yt=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],mt=[1,149],bt=[1,157],_t=[1,158],xt=[1,159],vt=[1,160],kt=[1,144],wt=[1,145],Ct=[1,141],Et=[1,152],Tt=[1,153],St=[1,154],At=[1,155],Lt=[1,156],Bt=[1,161],Nt=[1,162],Dt=[1,147],Ot=[1,150],Mt=[1,146],It=[1,143],Ft=[20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$t=[1,165],Rt=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],Zt=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,86,87,88,89,90,91,92,95,105,106,109,111,112,113,114,122,123,124,125,126,127],Pt=[12,21,22,24],jt=[22,106],Yt=[1,250],zt=[1,245],Ut=[1,246],Wt=[1,254],Ht=[1,251],qt=[1,248],Vt=[1,247],Gt=[1,249],Xt=[1,252],Qt=[1,253],Kt=[1,255],Jt=[1,273],te=[20,21,23,106],ee=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113],ne={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,vertex:51,AMP:52,STYLE_SEPARATOR:53,idString:54,DOUBLECIRCLESTART:55,DOUBLECIRCLEEND:56,PS:57,PE:58,"(-":59,"-)":60,STADIUMSTART:61,STADIUMEND:62,SUBROUTINESTART:63,SUBROUTINEEND:64,VERTEX_WITH_PROPS_START:65,ALPHA:66,COLON:67,PIPE:68,CYLINDERSTART:69,CYLINDEREND:70,DIAMOND_START:71,DIAMOND_STOP:72,TAGEND:73,TRAPSTART:74,TRAPEND:75,INVTRAPSTART:76,INVTRAPEND:77,linkStatement:78,arrowText:79,TESTSTR:80,START_LINK:81,LINK:82,textToken:83,STR:84,keywords:85,STYLE:86,LINKSTYLE:87,CLASSDEF:88,CLASS:89,CLICK:90,DOWN:91,UP:92,textNoTags:93,textNoTagsToken:94,DEFAULT:95,stylesOpt:96,alphaNum:97,CALLBACKNAME:98,CALLBACKARGS:99,HREF:100,LINK_TARGET:101,HEX:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,MINUS:109,UNIT:110,BRKT:111,DOT:112,PCT:113,TAGSTART:114,alphaNumToken:115,idStringToken:116,alphaNumStatement:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,PUNCTUATION:122,UNICODE_TEXT:123,PLUS:124,EQUALS:125,MULT:126,UNDERSCORE:127,graphCodeTokens:128,ARROW_CROSS:129,ARROW_POINT:130,ARROW_CIRCLE:131,ARROW_OPEN:132,QUOTE:133,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",53:"STYLE_SEPARATOR",55:"DOUBLECIRCLESTART",56:"DOUBLECIRCLEEND",57:"PS",58:"PE",59:"(-",60:"-)",61:"STADIUMSTART",62:"STADIUMEND",63:"SUBROUTINESTART",64:"SUBROUTINEEND",65:"VERTEX_WITH_PROPS_START",66:"ALPHA",67:"COLON",68:"PIPE",69:"CYLINDERSTART",70:"CYLINDEREND",71:"DIAMOND_START",72:"DIAMOND_STOP",73:"TAGEND",74:"TRAPSTART",75:"TRAPEND",76:"INVTRAPSTART",77:"INVTRAPEND",80:"TESTSTR",81:"START_LINK",82:"LINK",84:"STR",86:"STYLE",87:"LINKSTYLE",88:"CLASSDEF",89:"CLASS",90:"CLICK",91:"DOWN",92:"UP",95:"DEFAULT",98:"CALLBACKNAME",99:"CALLBACKARGS",100:"HREF",101:"LINK_TARGET",102:"HEX",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"MINUS",110:"UNIT",111:"BRKT",112:"DOT",113:"PCT",114:"TAGSTART",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr",122:"PUNCTUATION",123:"UNICODE_TEXT",124:"PLUS",125:"EQUALS",126:"MULT",127:"UNDERSCORE",129:"ARROW_CROSS",130:"ARROW_POINT",131:"ARROW_CIRCLE",132:"ARROW_OPEN",133:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[93,1],[93,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[103,1],[103,3],[96,1],[96,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[94,1],[94,1],[94,1],[94,1],[54,1],[54,2],[97,1],[97,2],[117,1],[117,1],[117,1],[117,1],[43,1],[43,1],[43,1],[43,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[o],"type_directive");break;case 7:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:(!Array.isArray(a[o])||a[o].length>0)&&a[o-1].push(a[o]),this.$=a[o-1];break;case 12:case 82:case 84:case 96:case 152:case 154:case 155:case 78:case 150:this.$=a[o];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[o-1]),this.$=a[o-1];break;case 35:this.$=a[o-1].nodes;break;case 41:this.$=r.addSubGraph(a[o-6],a[o-1],a[o-4]);break;case 42:this.$=r.addSubGraph(a[o-3],a[o-1],a[o-3]);break;case 43:this.$=r.addSubGraph(void 0,a[o-1],void 0);break;case 45:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 46:case 47:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 51:r.addLink(a[o-2].stmt,a[o],a[o-1]),this.$={stmt:a[o],nodes:a[o].concat(a[o-2].nodes)};break;case 52:r.addLink(a[o-3].stmt,a[o-1],a[o-2]),this.$={stmt:a[o-1],nodes:a[o-1].concat(a[o-3].nodes)};break;case 53:this.$={stmt:a[o-1],nodes:a[o-1]};break;case 54:this.$={stmt:a[o],nodes:a[o]};break;case 55:case 123:case 125:this.$=[a[o]];break;case 56:this.$=a[o-4].concat(a[o]);break;case 57:this.$=[a[o-2]],r.setClass(a[o-2],a[o]);break;case 58:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"square");break;case 59:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"doublecircle");break;case 60:this.$=a[o-5],r.addVertex(a[o-5],a[o-2],"circle");break;case 61:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"ellipse");break;case 62:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"stadium");break;case 63:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"subroutine");break;case 64:this.$=a[o-7],r.addVertex(a[o-7],a[o-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[o-5],a[o-3]]]));break;case 65:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"cylinder");break;case 66:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"round");break;case 67:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"diamond");break;case 68:this.$=a[o-5],r.addVertex(a[o-5],a[o-2],"hexagon");break;case 69:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"odd");break;case 70:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"trapezoid");break;case 71:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"inv_trapezoid");break;case 72:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"lean_right");break;case 73:this.$=a[o-3],r.addVertex(a[o-3],a[o-1],"lean_left");break;case 74:this.$=a[o],r.addVertex(a[o]);break;case 75:a[o-1].text=a[o],this.$=a[o-1];break;case 76:case 77:a[o-2].text=a[o-1],this.$=a[o-2];break;case 79:var c=r.destructLink(a[o],a[o-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[o-1]};break;case 80:c=r.destructLink(a[o]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 81:this.$=a[o-1];break;case 83:case 97:case 153:case 151:this.$=a[o-1]+""+a[o];break;case 98:case 99:this.$=a[o-4],r.addClass(a[o-2],a[o]);break;case 100:this.$=a[o-4],r.setClass(a[o-2],a[o]);break;case 101:case 109:this.$=a[o-1],r.setClickEvent(a[o-1],a[o]);break;case 102:case 110:this.$=a[o-3],r.setClickEvent(a[o-3],a[o-2]),r.setTooltip(a[o-3],a[o]);break;case 103:this.$=a[o-2],r.setClickEvent(a[o-2],a[o-1],a[o]);break;case 104:this.$=a[o-4],r.setClickEvent(a[o-4],a[o-3],a[o-2]),r.setTooltip(a[o-4],a[o]);break;case 105:case 111:this.$=a[o-1],r.setLink(a[o-1],a[o]);break;case 106:case 112:this.$=a[o-3],r.setLink(a[o-3],a[o-2]),r.setTooltip(a[o-3],a[o]);break;case 107:case 113:this.$=a[o-3],r.setLink(a[o-3],a[o-2],a[o]);break;case 108:case 114:this.$=a[o-5],r.setLink(a[o-5],a[o-4],a[o]),r.setTooltip(a[o-5],a[o-2]);break;case 115:this.$=a[o-4],r.addVertex(a[o-2],void 0,void 0,a[o]);break;case 116:case 118:this.$=a[o-4],r.updateLink(a[o-2],a[o]);break;case 117:this.$=a[o-4],r.updateLink([a[o-2]],a[o]);break;case 119:this.$=a[o-8],r.updateLinkInterpolate([a[o-6]],a[o-2]),r.updateLink([a[o-6]],a[o]);break;case 120:this.$=a[o-8],r.updateLinkInterpolate(a[o-6],a[o-2]),r.updateLink(a[o-6],a[o]);break;case 121:this.$=a[o-6],r.updateLinkInterpolate([a[o-4]],a[o]);break;case 122:this.$=a[o-6],r.updateLinkInterpolate(a[o-4],a[o]);break;case 124:case 126:a[o-2].push(a[o]),this.$=a[o-2];break;case 128:this.$=a[o-1]+a[o];break;case 156:this.$="v";break;case 157:this.$="-";break;case 158:this.$={stmt:"dir",value:"TB"};break;case 159:this.$={stmt:"dir",value:"BT"};break;case 160:this.$={stmt:"dir",value:"RL"};break;case 161:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:n,16:4,21:r,22:i,24:a},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:n,16:4,21:r,22:i,24:a},e(s,o,{17:11}),{7:12,13:[1,13]},{16:14,21:r,22:i,24:a},{16:15,21:r,22:i,24:a},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},{8:64,10:[1,65],15:j},e([10,15],[2,6]),e(s,[2,17]),e(s,[2,18]),e(s,[2,19]),{20:[1,68],21:[1,69],22:Y,27:67,30:70},e(z,[2,11]),e(z,[2,12]),e(z,[2,13]),e(z,[2,14]),e(z,[2,15]),e(z,[2,16]),{9:72,20:U,21:W,23:H,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:U,21:W,23:H},{9:81,20:U,21:W,23:H},{9:82,20:U,21:W,23:H},{9:83,20:U,21:W,23:H},{9:84,20:U,21:W,23:H},{9:86,20:U,21:W,22:[1,85],23:H},e(z,[2,44]),{45:[1,87]},{47:[1,88]},e(z,[2,47]),e(q,[2,54],{30:89,22:Y}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:V,52:G,66:X,67:Q,84:[1,97],91:K,97:96,98:[1,94],100:[1,95],105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(z,[2,158]),e(z,[2,159]),e(z,[2,160]),e(z,[2,161]),e(ht,[2,55],{53:[1,116]}),e(ut,[2,74],{116:129,40:[1,117],52:y,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:m,67:b,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:C,95:E,105:T,106:S,109:A,111:L,112:B,122:I,123:F,124:$,125:R,126:Z,127:P}),e(dt,[2,150]),e(dt,[2,175]),e(dt,[2,176]),e(dt,[2,177]),e(dt,[2,178]),e(dt,[2,179]),e(dt,[2,180]),e(dt,[2,181]),e(dt,[2,182]),e(dt,[2,183]),e(dt,[2,184]),e(dt,[2,185]),e(dt,[2,186]),e(dt,[2,187]),e(dt,[2,188]),e(dt,[2,189]),e(dt,[2,190]),{9:130,20:U,21:W,23:H},{11:131,14:[1,132]},e(pt,[2,8]),e(s,[2,20]),e(s,[2,26]),e(s,[2,27]),{21:[1,133]},e(ft,[2,34],{30:134,22:Y}),e(z,[2,35]),{50:135,51:45,52:y,54:46,66:m,67:b,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,122:I,123:F,124:$,125:R,126:Z,127:P},e(gt,[2,48]),e(gt,[2,49]),e(gt,[2,50]),e(yt,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:mt,24:bt,26:_t,38:xt,39:139,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),e(z,[2,36]),e(z,[2,37]),e(z,[2,38]),e(z,[2,39]),e(z,[2,40]),{22:mt,24:bt,26:_t,38:xt,39:163,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(Ft,o,{17:164}),e(z,[2,45]),e(z,[2,46]),e(q,[2,53],{52:$t}),{26:V,52:G,66:X,67:Q,91:K,97:166,102:[1,167],105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},{95:[1,168],103:169,105:[1,170]},{26:V,52:G,66:X,67:Q,91:K,95:[1,171],97:172,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},{26:V,52:G,66:X,67:Q,91:K,97:173,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(pt,[2,101],{22:[1,174],99:[1,175]}),e(pt,[2,105],{22:[1,176]}),e(pt,[2,109],{115:100,117:178,22:[1,177],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:ct,127:lt}),e(pt,[2,111],{22:[1,179]}),e(Rt,[2,152]),e(Rt,[2,154]),e(Rt,[2,155]),e(Rt,[2,156]),e(Rt,[2,157]),e(Zt,[2,162]),e(Zt,[2,163]),e(Zt,[2,164]),e(Zt,[2,165]),e(Zt,[2,166]),e(Zt,[2,167]),e(Zt,[2,168]),e(Zt,[2,169]),e(Zt,[2,170]),e(Zt,[2,171]),e(Zt,[2,172]),e(Zt,[2,173]),e(Zt,[2,174]),{52:y,54:180,66:m,67:b,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,122:I,123:F,124:$,125:R,126:Z,127:P},{22:mt,24:bt,26:_t,38:xt,39:181,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:182,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:184,42:vt,52:G,57:[1,183],66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:185,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:186,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:187,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{66:[1,188]},{22:mt,24:bt,26:_t,38:xt,39:189,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:190,42:vt,52:G,66:X,67:Q,71:[1,191],73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:192,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:193,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:194,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(dt,[2,151]),e(Pt,[2,3]),{8:195,15:j},{15:[2,7]},e(s,[2,28]),e(ft,[2,33]),e(q,[2,51],{30:196,22:Y}),e(yt,[2,75],{22:[1,197]}),{22:[1,198]},{22:mt,24:bt,26:_t,38:xt,39:199,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,73:kt,81:wt,82:[1,200],83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(Zt,[2,82]),e(Zt,[2,84]),e(Zt,[2,140]),e(Zt,[2,141]),e(Zt,[2,142]),e(Zt,[2,143]),e(Zt,[2,144]),e(Zt,[2,145]),e(Zt,[2,146]),e(Zt,[2,147]),e(Zt,[2,148]),e(Zt,[2,149]),e(Zt,[2,85]),e(Zt,[2,86]),e(Zt,[2,87]),e(Zt,[2,88]),e(Zt,[2,89]),e(Zt,[2,90]),e(Zt,[2,91]),e(Zt,[2,92]),e(Zt,[2,93]),e(Zt,[2,94]),e(Zt,[2,95]),{9:203,20:U,21:W,22:mt,23:H,24:bt,26:_t,38:xt,40:[1,202],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,204],43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},{22:Y,30:205},{22:[1,206],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:178,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},e(jt,[2,123]),{22:[1,211]},{22:[1,212],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:178,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:[1,213],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:178,122:it,123:at,124:st,125:ot,126:ct,127:lt},{84:[1,214]},e(pt,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},e(Rt,[2,153]),{84:[1,219],101:[1,220]},e(ht,[2,57],{116:129,52:y,66:m,67:b,91:C,95:E,105:T,106:S,109:A,111:L,112:B,122:I,123:F,124:$,125:R,126:Z,127:P}),{22:mt,24:bt,26:_t,38:xt,41:[1,221],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,56:[1,222],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:223,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,58:[1,224],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,60:[1,225],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,62:[1,226],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,64:[1,227],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{67:[1,228]},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,70:[1,229],73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,72:[1,230],73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,39:231,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,41:[1,232],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,73:kt,75:[1,233],77:[1,234],81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,73:kt,75:[1,236],77:[1,235],81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{9:237,20:U,21:W,23:H},e(q,[2,52],{52:$t}),e(yt,[2,77]),e(yt,[2,76]),{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,68:[1,238],73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(yt,[2,79]),e(Zt,[2,83]),{22:mt,24:bt,26:_t,38:xt,39:239,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(Ft,o,{17:240}),e(z,[2,43]),{51:241,52:y,54:46,66:m,67:b,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,122:I,123:F,124:$,125:R,126:Z,127:P},{22:Yt,66:zt,67:Ut,86:Wt,96:242,102:Ht,105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:256,102:Ht,105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:257,102:Ht,104:[1,258],105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:259,102:Ht,104:[1,260],105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{105:[1,261]},{22:Yt,66:zt,67:Ut,86:Wt,96:262,102:Ht,105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:263,102:Ht,105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{26:V,52:G,66:X,67:Q,91:K,97:264,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(pt,[2,102]),{84:[1,265]},e(pt,[2,106],{22:[1,266]}),e(pt,[2,107]),e(pt,[2,110]),e(pt,[2,112],{22:[1,267]}),e(pt,[2,113]),e(ut,[2,58]),e(ut,[2,59]),{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,58:[1,268],66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(ut,[2,66]),e(ut,[2,61]),e(ut,[2,62]),e(ut,[2,63]),{66:[1,269]},e(ut,[2,65]),e(ut,[2,67]),{22:mt,24:bt,26:_t,38:xt,42:vt,52:G,66:X,67:Q,72:[1,270],73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(ut,[2,69]),e(ut,[2,70]),e(ut,[2,72]),e(ut,[2,71]),e(ut,[2,73]),e(Pt,[2,4]),e([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:mt,24:bt,26:_t,38:xt,41:[1,271],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,272],43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},e(ht,[2,56]),e(pt,[2,115],{106:Jt}),e(te,[2,125],{108:274,22:Yt,66:zt,67:Ut,86:Wt,102:Ht,105:qt,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt}),e(ee,[2,127]),e(ee,[2,129]),e(ee,[2,130]),e(ee,[2,131]),e(ee,[2,132]),e(ee,[2,133]),e(ee,[2,134]),e(ee,[2,135]),e(ee,[2,136]),e(ee,[2,137]),e(ee,[2,138]),e(ee,[2,139]),e(pt,[2,116],{106:Jt}),e(pt,[2,117],{106:Jt}),{22:[1,275]},e(pt,[2,118],{106:Jt}),{22:[1,276]},e(jt,[2,124]),e(pt,[2,98],{106:Jt}),e(pt,[2,99],{106:Jt}),e(pt,[2,100],{115:100,117:178,26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:ct,127:lt}),e(pt,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:U,21:W,23:H},e(z,[2,42]),{22:Yt,66:zt,67:Ut,86:Wt,102:Ht,105:qt,107:283,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},e(ee,[2,128]),{26:V,52:G,66:X,67:Q,91:K,97:284,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},{26:V,52:G,66:X,67:Q,91:K,97:285,105:J,106:tt,109:et,111:nt,112:rt,115:100,117:98,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(pt,[2,108]),e(pt,[2,114]),e(ut,[2,60]),{22:mt,24:bt,26:_t,38:xt,39:286,42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:140,84:Ct,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},e(ut,[2,68]),e(Ft,o,{17:287}),e(te,[2,126],{108:274,22:Yt,66:zt,67:Ut,86:Wt,102:Ht,105:qt,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt}),e(pt,[2,121],{115:100,117:178,22:[1,288],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:ct,127:lt}),e(pt,[2,122],{115:100,117:178,22:[1,289],26:V,52:G,66:X,67:Q,91:K,105:J,106:tt,109:et,111:nt,112:rt,122:it,123:at,124:st,125:ot,126:ct,127:lt}),{22:mt,24:bt,26:_t,38:xt,41:[1,290],42:vt,52:G,66:X,67:Q,73:kt,81:wt,83:201,85:151,86:Et,87:Tt,88:St,89:At,90:Lt,91:Bt,92:Nt,94:142,95:Dt,105:J,106:tt,109:Ot,111:nt,112:rt,113:Mt,114:It,115:148,122:it,123:at,124:st,125:ot,126:ct,127:lt},{18:18,19:19,20:c,21:l,22:h,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,291],43:31,44:p,46:f,48:g,50:35,51:45,52:y,54:46,66:m,67:b,86:_,87:x,88:v,89:k,90:w,91:C,95:E,105:T,106:S,109:A,111:L,112:B,116:47,118:N,119:D,120:O,121:M,122:I,123:F,124:$,125:R,126:Z,127:P},{22:Yt,66:zt,67:Ut,86:Wt,96:292,102:Ht,105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},{22:Yt,66:zt,67:Ut,86:Wt,96:293,102:Ht,105:qt,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Qt,113:Kt},e(ut,[2,64]),e(z,[2,41]),e(pt,[2,119],{106:Jt}),e(pt,[2,120],{106:Jt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},re=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:return this.begin("acc_title"),44;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),46;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:case 24:case 27:case 30:case 33:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"STR";case 17:return 86;case 18:return 95;case 19:return 87;case 20:return 104;case 21:return 88;case 22:return 89;case 23:this.begin("href");break;case 25:return 100;case 26:this.begin("callbackname");break;case 28:this.popState(),this.begin("callbackargs");break;case 29:return 98;case 31:return 99;case 32:this.begin("click");break;case 34:return 90;case 35:case 36:case 37:return t.lex.firstGraph()&&this.begin("dir"),24;case 38:return 38;case 39:return 42;case 40:case 41:case 42:case 43:return 101;case 44:return this.popState(),25;case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:return this.popState(),26;case 55:return 118;case 56:return 119;case 57:return 120;case 58:return 121;case 59:return 105;case 60:return 111;case 61:return 53;case 62:return 67;case 63:return 52;case 64:return 20;case 65:return 106;case 66:return 126;case 67:case 68:case 69:return 82;case 70:case 71:case 72:return 81;case 73:return 59;case 74:return 60;case 75:return 61;case 76:return 62;case 77:return 63;case 78:return 64;case 79:return 65;case 80:return 69;case 81:return 70;case 82:return 55;case 83:return 56;case 84:return 109;case 85:return 112;case 86:return 127;case 87:return 124;case 88:return 113;case 89:case 90:return 125;case 91:return 114;case 92:return 73;case 93:return 92;case 94:return"SEP";case 95:return 91;case 96:return 66;case 97:return 75;case 98:return 74;case 99:return 77;case 100:return 76;case 101:return 122;case 102:return 123;case 103:return 68;case 104:return 57;case 105:return 58;case 106:return 40;case 107:return 41;case 108:return 71;case 109:return 72;case 110:return 133;case 111:return 21;case 112:return 22;case 113:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\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<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\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:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[30,31],inclusive:!1},callbackname:{rules:[27,28,29],inclusive:!1},href:{rules:[24,25],inclusive:!1},click:{rules:[33,34],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[44,45,46,47,48,49,50,51,52,53,54],inclusive:!1},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,5,6,7,9,11,14,17,18,19,20,21,22,23,26,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,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,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113],inclusive:!0}}},t);function ie(){this.yy={}}return ne.lexer=re,ie.prototype=ne,ne.Parser=ie,new ie}();So.parser=So;const Ao=So,Lo=(t,e)=>{var n,r;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)&&("elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&null!==t.match(/^\s*graph/))},Bo=(t,e)=>{var n,r;return"dagre-d3"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer)&&("elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(null!==t.match(/^\s*graph/)||null!==t.match(/^\s*flowchart/)))};let No,Do,Oo=0,Mo=gr(),Io={},Fo=[],$o={},Ro=[],Zo={},Po={},jo=0,Yo=!0,zo=[];const Uo=t=>jt.sanitizeText(t,Mo),Wo=function(t,e,n){Cp.parseDirective(this,t,e,n)},Ho=function(t){const e=Object.keys(Io);for(const n of e)if(Io[n].id===t)return Io[n].domId;return t},qo=function(t,e,n,r,i,a,s={}){let o,c=t;void 0!==c&&0!==c.trim().length&&(void 0===Io[c]&&(Io[c]={id:c,domId:"flowchart-"+c+"-"+Oo,styles:[],classes:[]}),Oo++,void 0!==e?(Mo=gr(),o=Uo(e.trim()),'"'===o[0]&&'"'===o[o.length-1]&&(o=o.substring(1,o.length-1)),Io[c].text=o):void 0===Io[c].text&&(Io[c].text=t),void 0!==n&&(Io[c].type=n),null!=r&&r.forEach((function(t){Io[c].styles.push(t)})),null!=i&&i.forEach((function(t){Io[c].classes.push(t)})),void 0!==a&&(Io[c].dir=a),void 0===Io[c].props?Io[c].props=s:void 0!==s&&Object.assign(Io[c].props,s))},Vo=function(t,e,n,r){const i={start:t,end:e,type:void 0,text:""};void 0!==(r=n.text)&&(i.text=Uo(r.trim()),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==n&&(i.type=n.type,i.stroke=n.stroke,i.length=n.length),Fo.push(i)},Go=function(t,e,n,r){let i,a;for(i=0;i<t.length;i++)for(a=0;a<e.length;a++)Vo(t[i],e[a],n,r)},Xo=function(t,e){t.forEach((function(t){"default"===t?Fo.defaultInterpolate=e:Fo[t].interpolate=e}))},Qo=function(t,e){t.forEach((function(t){"default"===t?Fo.defaultStyle=e:(-1===ar.isSubstringInArray("fill",e)&&e.push("fill:none"),Fo[t].style=e)}))},Ko=function(t,e){void 0===$o[t]&&($o[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const n=e.replace("fill","bgFill").replace("color","fill");$o[t].textStyles.push(n)}$o[t].styles.push(e)}))},Jo=function(t){No=t,No.match(/.*</)&&(No="RL"),No.match(/.*\^/)&&(No="BT"),No.match(/.*>/)&&(No="LR"),No.match(/.*v/)&&(No="TB"),"TD"===No&&(No="TB")},tc=function(t,e){t.split(",").forEach((function(t){let n=t;void 0!==Io[n]&&Io[n].classes.push(e),void 0!==Zo[n]&&Zo[n].classes.push(e)}))},ec=function(t,e,n){t.split(",").forEach((function(t){void 0!==Io[t]&&(Io[t].link=ar.formatUrl(e,Mo),Io[t].linkTarget=n)})),tc(t,"clickable")},nc=function(t){return Po[t]},rc=function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){let r=Ho(t);if("loose"!==gr().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==Io[t]&&(Io[t].haveCallback=!0,zo.push((function(){const t=document.querySelector(`[id="${r}"]`);null!==t&&t.addEventListener("click",(function(){ar.runFunc(e,...i)}),!1)})))}(t,e,n)})),tc(t,"clickable")},ic=function(t){zo.forEach((function(e){e(t)}))},ac=function(){return No.trim()},sc=function(){return Io},oc=function(){return Fo},cc=function(){return $o},lc=function(t){let e=(0,o.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,o.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,o.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,o.Ys)(this);if(null===t.attr("title"))return;const n=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+n.left+(n.right-n.left)/2+"px").style("top",window.scrollY+n.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,o.Ys)(this).classed("hover",!1)}))};zo.push(lc);const hc=function(t="gen-1"){Io={},$o={},Fo=[],zo=[lc],Ro=[],Zo={},jo=0,Po=[],Yo=!0,Do=t,Yr()},uc=t=>{Do=t||"gen-2"},dc=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},pc=function(t,e,n){let r=t.trim(),i=n;t===n&&n.match(/\s/)&&(r=void 0);let a=[];const{nodeList:s,dir:o}=function(t){const e={boolean:{},number:{},string:{}},n=[];let r;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(r=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!n.includes(t)&&n.push(t))})),dir:r}}(a.concat.apply(a,e));if(a=s,"gen-1"===Do)for(let l=0;l<a.length;l++)a[l]=Ho(a[l]);r=r||"subGraph"+jo,i=i||"",i=Uo(i),jo+=1;const c={id:r,nodes:a,title:i.trim(),classes:[],dir:o};return Bt.info("Adding",c.id,c.nodes,c.dir),c.nodes=Cc(c,Ro).nodes,Ro.push(c),Zo[r]=c,r},fc=function(t){for(const[e,n]of Ro.entries())if(n.id===t)return e;return-1};let gc=-1;const yc=[],mc=function(t,e){const n=Ro[e].nodes;if(gc+=1,gc>2e3)return;if(yc[gc]=e,Ro[e].id===t)return{result:!0,count:0};let r=0,i=1;for(;r<n.length;){const e=fc(n[r]);if(e>=0){const n=mc(t,e);if(n.result)return{result:!0,count:i+n.count};i+=n.count}r+=1}return{result:!1,count:i}},bc=function(t){return yc[t]},_c=function(){gc=-1,Ro.length>0&&mc("none",Ro.length-1)},xc=function(){return Ro},vc=()=>!!Yo&&(Yo=!1,!0),kc=(t,e)=>{const n=(t=>{const e=t.trim();let n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}let i="normal",a=n.length-1;"="===n[0]&&(i="thick");let s=((t,e)=>{const n=e.length;let r=0;for(let i=0;i<n;++i)e[i]===t&&++r;return r})(".",n);return s&&(i="dotted",a=s),{type:r,stroke:i,length:a}})(t);let r;if(e){if(r=(t=>{let e=t.trim(),n="arrow_open";switch(e[0]){case"<":n="arrow_point",e=e.slice(1);break;case"x":n="arrow_cross",e=e.slice(1);break;case"o":n="arrow_circle",e=e.slice(1)}let r="normal";return e.includes("=")&&(r="thick"),e.includes(".")&&(r="dotted"),{type:n,stroke:r}})(e),r.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===r.type)r.type=n.type;else{if(r.type!==n.type)return{type:"INVALID",stroke:"INVALID"};r.type="double_"+r.type}return"double_arrow"===r.type&&(r.type="double_arrow_point"),r.length=n.length,r}return n},wc=(t,e)=>{let n=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(n=!0)})),n},Cc=(t,e)=>{const n=[];return t.nodes.forEach(((r,i)=>{wc(e,r)||n.push(t.nodes[i])})),{nodes:n}},Ec={firstGraph:vc},Tc={parseDirective:Wo,defaultConfig:()=>or.flowchart,setAccTitle:zr,getAccTitle:Ur,getAccDescription:Hr,setAccDescription:Wr,addVertex:qo,lookUpDomId:Ho,addLink:Go,updateLinkInterpolate:Xo,updateLink:Qo,addClass:Ko,setDirection:Jo,setClass:tc,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(Po["gen-1"===Do?Ho(t):t]=Uo(e))}))},getTooltip:nc,setClickEvent:rc,setLink:ec,bindFunctions:ic,getDirection:ac,getVertices:sc,getEdges:oc,getClasses:cc,clear:hc,setGen:uc,defaultStyle:dc,addSubGraph:pc,getDepthFirstPos:bc,indexNodes:_c,getSubGraphs:xc,destructLink:kc,lex:Ec,exists:wc,makeUniq:Cc,setDiagramTitle:qr,getDiagramTitle:Vr},Sc=Object.freeze(Object.defineProperty({__proto__:null,addClass:Ko,addLink:Go,addSingleLink:Vo,addSubGraph:pc,addVertex:qo,bindFunctions:ic,clear:hc,default:Tc,defaultStyle:dc,destructLink:kc,firstGraph:vc,getClasses:cc,getDepthFirstPos:bc,getDirection:ac,getEdges:oc,getSubGraphs:xc,getTooltip:nc,getVertices:sc,indexNodes:_c,lex:Ec,lookUpDomId:Ho,parseDirective:Wo,setClass:tc,setClickEvent:rc,setDirection:Jo,setGen:uc,setLink:ec,updateLink:Qo,updateLinkInterpolate:Xo},Symbol.toStringTag,{value:"Module"}));const Ac={},Lc=function(t){const e=Object.keys(t);for(const n of e)Ac[n]=t[n]},Bc={},Nc=function(t,e,n,r,i,a){const s=r.select(`[id="${n}"]`);Object.keys(t).forEach((function(n){const r=t[n];let o="default";r.classes.length>0&&(o=r.classes.join(" "));const c=Un(r.styles);let l,h=void 0!==r.text?r.text:r.id;if(Zt(gr().flowchart.htmlLabels)){const t={label:h.replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`))};l=(0,vt.a)(s,t).node(),l.parentNode.removeChild(l)}else{const t=i.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",c.labelStyle.replace("color:","fill:"));const e=h.split(jt.lineBreakRegex);for(const n of e){const e=i.createElementNS("http://www.w3.org/2000/svg","tspan");e.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),e.setAttribute("dy","1em"),e.setAttribute("x","1"),e.textContent=n,t.appendChild(e)}l=t}let u=0,d="";switch(r.type){case"round":u=5,d="rect";break;case"square":case"group":default:d="rect";break;case"diamond":d="question";break;case"hexagon":d="hexagon";break;case"odd":case"odd_right":d="rect_left_inv_arrow";break;case"lean_right":d="lean_right";break;case"lean_left":d="lean_left";break;case"trapezoid":d="trapezoid";break;case"inv_trapezoid":d="inv_trapezoid";break;case"circle":d="circle";break;case"ellipse":d="ellipse";break;case"stadium":d="stadium";break;case"subroutine":d="subroutine";break;case"cylinder":d="cylinder";break;case"doublecircle":d="doublecircle"}e.setNode(r.id,{labelStyle:c.labelStyle,shape:d,labelText:h,rx:u,ry:u,class:o,style:c.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:gr().flowchart.padding}),Bt.info("setNode",{labelStyle:c.labelStyle,shape:d,labelText:h,rx:u,ry:u,class:o,style:c.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:gr().flowchart.padding})}))},Dc=function(t,e,n){Bt.info("abc78 edges = ",t);let r,i,a=0,s={};if(void 0!==t.defaultStyle){const e=Un(t.defaultStyle);r=e.style,i=e.labelStyle}t.forEach((function(n){a++;var c="L-"+n.start+"-"+n.end;void 0===s[c]?(s[c]=0,Bt.info("abc78 new entry",c,s[c])):(s[c]++,Bt.info("abc78 new entry",c,s[c]));let l=c+"-"+s[c];Bt.info("abc78 new link id to be used is",c,l,s[c]);var h="LS-"+n.start,u="LE-"+n.end;const d={style:"",labelStyle:""};switch(d.minlen=n.length||1,"arrow_open"===n.type?d.arrowhead="none":d.arrowhead="normal",d.arrowTypeStart="arrow_open",d.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":d.arrowTypeStart="arrow_cross";case"arrow_cross":d.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":d.arrowTypeStart="arrow_point";case"arrow_point":d.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":d.arrowTypeStart="arrow_circle";case"arrow_circle":d.arrowTypeEnd="arrow_circle"}let p="",f="";switch(n.stroke){case"normal":p="fill:none;",void 0!==r&&(p=r),void 0!==i&&(f=i),d.thickness="normal",d.pattern="solid";break;case"dotted":d.thickness="normal",d.pattern="dotted",d.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":d.thickness="thick",d.pattern="solid",d.style="stroke-width: 3.5px;fill:none;"}if(void 0!==n.style){const t=Un(n.style);p=t.style,f=t.labelStyle}d.style=d.style+=p,d.labelStyle=d.labelStyle+=f,void 0!==n.interpolate?d.curve=Yn(n.interpolate,o.c_6):void 0!==t.defaultInterpolate?d.curve=Yn(t.defaultInterpolate,o.c_6):d.curve=Yn(Bc.curve,o.c_6),void 0===n.text?void 0!==n.style&&(d.arrowheadStyle="fill: #333"):(d.arrowheadStyle="fill: #333",d.labelpos="c"),d.labelType="text",d.label=n.text.replace(jt.lineBreakRegex,"\n"),void 0===n.style&&(d.style=d.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),d.labelStyle=d.labelStyle.replace("color:","fill:"),d.id=l,d.classes="flowchart-link "+h+" "+u,e.setEdge(n.start,n.end,d,a)}))},Oc={setConf:function(t){const e=Object.keys(t);for(const n of e)Bc[n]=t[n]},addVertices:Nc,addEdges:Dc,getClasses:function(t,e){Bt.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch(n){return}},draw:function(t,e,n,r){Bt.info("Drawing flowchart"),r.db.clear(),Tc.setGen("gen-2"),r.parser.parse(t);let i=r.db.getDirection();void 0===i&&(i="TD");const{securityLevel:a,flowchart:s}=gr(),c=s.nodeSpacing||50,l=s.rankSpacing||50;let h;"sandbox"===a&&(h=(0,o.Ys)("#i"+e));const u="sandbox"===a?(0,o.Ys)(h.nodes()[0].contentDocument.body):(0,o.Ys)("body"),d="sandbox"===a?h.nodes()[0].contentDocument:document,p=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:c,ranksep:l,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let f;const g=r.db.getSubGraphs();Bt.info("Subgraphs - ",g);for(let o=g.length-1;o>=0;o--)f=g[o],Bt.info("Subgraph - ",f),r.db.addVertex(f.id,f.title,"group",void 0,f.classes,f.dir);const y=r.db.getVertices(),m=r.db.getEdges();Bt.info("Edges",m);let b=0;for(b=g.length-1;b>=0;b--){f=g[b],(0,o.td_)("cluster").append("text");for(let t=0;t<f.nodes.length;t++)Bt.info("Setting up subgraphs",f.nodes[t],f.id),p.setParent(f.nodes[t],f.id)}Nc(y,p,e,u,d,r),Dc(m,p);const _=u.select(`[id="${e}"]`),x=u.select("#"+e+" g");if(no(x,p,["point","circle","cross"],"flowchart",e),ar.insertTitle(_,"flowchartTitleText",s.titleTopMargin,r.db.getDiagramTitle()),wr(p,_,s.diagramPadding,s.useMaxWidth),r.db.indexNodes("subGraph"+b),!s.htmlLabels){const t=d.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const e of t){const t=e.getBBox(),n=d.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",t.width),n.setAttribute("height",t.height),e.insertBefore(n,e.firstChild)}}Object.keys(y).forEach((function(t){const n=y[t];if(n.link){const r=(0,o.Ys)("#"+e+' [id="'+t+'"]');if(r){const t=d.createElementNS("http://www.w3.org/2000/svg","a");t.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),t.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),t.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===a?t.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&t.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const e=r.insert((function(){return t}),":first-child"),i=r.select(".label-container");i&&e.append((function(){return i.node()}));const s=r.select(".label");s&&e.append((function(){return s.node()}))}}}))}};var Mc=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,3],r=[1,5],i=[7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],a=[1,15],s=[1,16],o=[1,17],c=[1,18],l=[1,19],h=[1,20],u=[1,21],d=[1,22],p=[1,23],f=[1,24],g=[1,25],y=[1,26],m=[1,27],b=[1,29],_=[1,31],x=[1,34],v=[5,7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],k={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,tickInterval:16,excludes:17,includes:18,todayMarker:19,title:20,acc_title:21,acc_title_value:22,acc_descr:23,acc_descr_value:24,acc_descr_multiline_value:25,section:26,clickStatement:27,taskTxt:28,taskData:29,openDirective:30,typeDirective:31,closeDirective:32,":":33,argDirective:34,click:35,callbackname:36,callbackargs:37,href:38,clickStatementDebug:39,open_directive:40,type_directive:41,arg_directive:42,close_directive:43,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"tickInterval",17:"excludes",18:"includes",19:"todayMarker",20:"title",21:"acc_title",22:"acc_title_value",23:"acc_descr",24:"acc_descr_value",25:"acc_descr_multiline_value",26:"section",28:"taskTxt",29:"taskData",33:":",35:"click",36:"callbackname",37:"callbackargs",38:"href",40:"open_directive",41:"type_directive",42:"arg_directive",43:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[27,2],[27,3],[27,3],[27,4],[27,3],[27,4],[27,2],[39,2],[39,3],[39,3],[39,4],[39,3],[39,4],[39,2],[30,1],[31,1],[34,1],[32,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 2:return a[o-1];case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:this.$=a[o];break;case 9:r.setDateFormat(a[o].substr(11)),this.$=a[o].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[o].substr(18);break;case 11:r.TopAxis(),this.$=a[o].substr(8);break;case 12:r.setAxisFormat(a[o].substr(11)),this.$=a[o].substr(11);break;case 13:r.setTickInterval(a[o].substr(13)),this.$=a[o].substr(13);break;case 14:r.setExcludes(a[o].substr(9)),this.$=a[o].substr(9);break;case 15:r.setIncludes(a[o].substr(9)),this.$=a[o].substr(9);break;case 16:r.setTodayMarker(a[o].substr(12)),this.$=a[o].substr(12);break;case 17:r.setDiagramTitle(a[o].substr(6)),this.$=a[o].substr(6);break;case 18:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 19:case 20:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 21:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 23:r.addTask(a[o-1],a[o]),this.$="task";break;case 27:this.$=a[o-1],r.setClickEvent(a[o-1],a[o],null);break;case 28:this.$=a[o-2],r.setClickEvent(a[o-2],a[o-1],a[o]);break;case 29:this.$=a[o-2],r.setClickEvent(a[o-2],a[o-1],null),r.setLink(a[o-2],a[o]);break;case 30:this.$=a[o-3],r.setClickEvent(a[o-3],a[o-2],a[o-1]),r.setLink(a[o-3],a[o]);break;case 31:this.$=a[o-2],r.setClickEvent(a[o-2],a[o],null),r.setLink(a[o-2],a[o-1]);break;case 32:this.$=a[o-3],r.setClickEvent(a[o-3],a[o-1],a[o]),r.setLink(a[o-3],a[o-2]);break;case 33:this.$=a[o-1],r.setLink(a[o-1],a[o]);break;case 34:case 40:this.$=a[o-1]+" "+a[o];break;case 35:case 36:case 38:this.$=a[o-2]+" "+a[o-1]+" "+a[o];break;case 37:case 39:this.$=a[o-3]+" "+a[o-2]+" "+a[o-1]+" "+a[o];break;case 41:r.parseDirective("%%{","open_directive");break;case 42:r.parseDirective(a[o],"type_directive");break;case 43:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 44:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:n,30:4,40:r},{1:[3]},{3:6,4:2,5:n,30:4,40:r},e(i,[2,3],{6:7}),{31:8,41:[1,9]},{41:[2,41]},{1:[2,1]},{4:30,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:a,13:s,14:o,15:c,16:l,17:h,18:u,19:d,20:p,21:f,23:g,25:y,26:m,27:28,28:b,30:4,35:_,40:r},{32:32,33:[1,33],43:x},e([33,43],[2,42]),e(i,[2,8],{1:[2,2]}),e(i,[2,4]),{4:30,10:35,12:a,13:s,14:o,15:c,16:l,17:h,18:u,19:d,20:p,21:f,23:g,25:y,26:m,27:28,28:b,30:4,35:_,40:r},e(i,[2,6]),e(i,[2,7]),e(i,[2,9]),e(i,[2,10]),e(i,[2,11]),e(i,[2,12]),e(i,[2,13]),e(i,[2,14]),e(i,[2,15]),e(i,[2,16]),e(i,[2,17]),{22:[1,36]},{24:[1,37]},e(i,[2,20]),e(i,[2,21]),e(i,[2,22]),{29:[1,38]},e(i,[2,24]),{36:[1,39],38:[1,40]},{11:[1,41]},{34:42,42:[1,43]},{11:[2,44]},e(i,[2,5]),e(i,[2,18]),e(i,[2,19]),e(i,[2,23]),e(i,[2,27],{37:[1,44],38:[1,45]}),e(i,[2,33],{36:[1,46]}),e(v,[2,25]),{32:47,43:x},{43:[2,43]},e(i,[2,28],{38:[1,48]}),e(i,[2,29]),e(i,[2,31],{37:[1,49]}),{11:[1,50]},e(i,[2,30]),e(i,[2,32]),e(v,[2,26])],defaultActions:{5:[2,41],6:[2,1],34:[2,44],43:[2,43]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},w=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),40;case 1:return this.begin("type_directive"),41;case 2:return this.popState(),this.begin("arg_directive"),33;case 3:return this.popState(),this.popState(),43;case 4:return 42;case 5:return this.begin("acc_title"),21;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),23;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 38;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 36;case 27:return 37;case 28:this.begin("click");break;case 30:return 35;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 16;case 37:return 18;case 38:return 17;case 39:return 19;case 40:return"date";case 41:return 20;case 42:return"accDescription";case 43:return 26;case 44:return 28;case 45:return 29;case 46:return 33;case 47:return 7;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}},t);function C(){this.yy={}}return k.lexer=w,C.prototype=k,k.Parser=C,new C}();Mc.parser=Mc;const Ic=Mc,Fc=t=>null!==t.match(/^\s*gantt/);a().extend(wt()),a().extend(Et()),a().extend(St());let $c,Rc="",Zc="",Pc="",jc=[],Yc=[],zc={},Uc=[],Wc=[],Hc="";const qc=["active","done","crit","milestone"];let Vc=[],Gc=!1,Xc=!1,Qc=0;const Kc=function(t,e,n,r){return!r.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},Jc=function(t,e,n,r){if(!n.length||t.manualEndTime)return;let i,s;i=t.startTime instanceof Date?a()(t.startTime):a()(t.startTime,e,!0),i=i.add(1,"d"),s=t.endTime instanceof Date?a()(t.endTime):a()(t.endTime,e,!0);const[o,c]=tl(i,s,e,n,r);t.endTime=o.toDate(),t.renderEndTime=c},tl=function(t,e,n,r,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=Kc(t,n,r,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},el=function(t,e,n){n=n.trim();const r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){let t=null;if(r[1].split(" ").forEach((function(e){let n=hl(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let i=a()(n,e.trim(),!0);if(i.isValid())return i.toDate();{Bt.debug("Invalid date:"+n),Bt.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime()))throw new Error("Invalid date:"+n);return t}},nl=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},rl=function(t,e,n,r=!1){n=n.trim();let i=a()(n,e.trim(),!0);if(i.isValid())return r&&(i=i.add(1,"d")),i.toDate();let s=a()(t);const[o,c]=nl(n);if(!Number.isNaN(o)){const t=s.add(o,c);t.isValid()&&(s=t)}return s.toDate()};let il=0;const al=function(t){return void 0===t?(il+=1,"task"+il):t};let sl,ol,cl=[];const ll={},hl=function(t){const e=ll[t];return cl[e]},ul=function(){const t=function(t){const e=cl[t];let n="";switch(cl[t].raw.startTime.type){case"prevTaskEnd":{const t=hl(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=el(0,Rc,cl[t].raw.startTime.startData),n&&(cl[t].startTime=n)}return cl[t].startTime&&(cl[t].endTime=rl(cl[t].startTime,Rc,cl[t].raw.endTime.data,Gc),cl[t].endTime&&(cl[t].processed=!0,cl[t].manualEndTime=a()(cl[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Jc(cl[t],Rc,Yc,jc))),cl[t].processed};let e=!0;for(const[n,r]of cl.entries())t(n),e=e&&r.processed;return e},dl=function(t,e){t.split(",").forEach((function(t){let n=hl(t);void 0!==n&&n.classes.push(e)}))},pl=function(t,e){Vc.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},fl={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().gantt,clear:function(){Uc=[],Wc=[],Hc="",Vc=[],il=0,sl=void 0,ol=void 0,cl=[],Rc="",Zc="",$c=void 0,Pc="",jc=[],Yc=[],Gc=!1,Xc=!1,Qc=0,zc={},Yr()},setDateFormat:function(t){Rc=t},getDateFormat:function(){return Rc},enableInclusiveEndDates:function(){Gc=!0},endDatesAreInclusive:function(){return Gc},enableTopAxis:function(){Xc=!0},topAxisEnabled:function(){return Xc},setAxisFormat:function(t){Zc=t},getAxisFormat:function(){return Zc},setTickInterval:function(t){$c=t},getTickInterval:function(){return $c},setTodayMarker:function(t){Pc=t},getTodayMarker:function(){return Pc},setAccTitle:zr,getAccTitle:Ur,setDiagramTitle:qr,getDiagramTitle:Vr,setAccDescription:Wr,getAccDescription:Hr,addSection:function(t){Hc=t,Uc.push(t)},getSections:function(){return Uc},getTasks:function(){let t=ul();let e=0;for(;!t&&e<10;)t=ul(),e++;return Wc=cl,Wc},addTask:function(t,e){const n={section:Hc,type:Hc,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},r=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const r=n.split(","),i={};gl(r,i,qc);for(let a=0;a<r.length;a++)r[a]=r[a].trim();switch(r.length){case 1:i.id=al(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:r[0]};break;case 2:i.id=al(),i.startTime={type:"getStartDate",startData:r[0]},i.endTime={data:r[1]};break;case 3:i.id=al(r[0]),i.startTime={type:"getStartDate",startData:r[1]},i.endTime={data:r[2]}}return i}(ol,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=ol,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,n.order=Qc,Qc++;const i=cl.push(n);ol=n.id,ll[n.id]=i-1},findTaskById:hl,addTaskOrg:function(t,e){const n={section:Hc,type:Hc,description:t,task:t,classes:[]},r=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const r=n.split(","),i={};gl(r,i,qc);for(let a=0;a<r.length;a++)r[a]=r[a].trim();let s="";switch(r.length){case 1:i.id=al(),i.startTime=t.endTime,s=r[0];break;case 2:i.id=al(),i.startTime=el(0,Rc,r[0]),s=r[1];break;case 3:i.id=al(r[0]),i.startTime=el(0,Rc,r[1]),s=r[2]}return s&&(i.endTime=rl(i.startTime,Rc,s,Gc),i.manualEndTime=a()(s,"YYYY-MM-DD",!0).isValid(),Jc(i,Rc,Yc,jc)),i}(sl,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,sl=n,Wc.push(n)},setIncludes:function(t){jc=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return jc},setExcludes:function(t){Yc=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return Yc},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==gr().securityLevel)return;if(void 0===e)return;let r=[];if("string"==typeof n){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<r.length;t++){let e=r[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),r[t]=e}}0===r.length&&r.push(t),void 0!==hl(t)&&pl(t,(()=>{ar.runFunc(e,...r)}))}(t,e,n)})),dl(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==gr().securityLevel&&(n=(0,s.Nm)(e)),t.split(",").forEach((function(t){void 0!==hl(t)&&(pl(t,(()=>{window.open(n,"_self")})),zc[t]=n)})),dl(t,"clickable")},getLinks:function(){return zc},bindFunctions:function(t){Vc.forEach((function(e){e(t)}))},parseDuration:nl,isInvalidDate:Kc};function gl(t,e,n){let r=!0;for(;r;)r=!1,n.forEach((function(n){const i=new RegExp("^\\s*"+n+"\\s*$");t[0].match(i)&&(e[n]=!0,t.shift(1),r=!0)}))}let yl;const ml={setConf:function(){Bt.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,r){const i=gr().gantt,s=gr().securityLevel;let c;"sandbox"===s&&(c=(0,o.Ys)("#i"+e));const l="sandbox"===s?(0,o.Ys)(c.nodes()[0].contentDocument.body):(0,o.Ys)("body"),h="sandbox"===s?c.nodes()[0].contentDocument:document,u=h.getElementById(e);yl=u.parentElement.offsetWidth,void 0===yl&&(yl=1200),void 0!==i.useWidth&&(yl=i.useWidth);const d=r.db.getTasks(),p=d.length*(i.barHeight+i.barGap)+2*i.topPadding;u.setAttribute("viewBox","0 0 "+yl+" "+p);const f=l.select(`[id="${e}"]`),g=(0,o.Xf)().domain([(0,o.VV$)(d,(function(t){return t.startTime})),(0,o.Fp7)(d,(function(t){return t.endTime}))]).rangeRound([0,yl-i.leftPadding-i.rightPadding]);let y=[];for(const a of d)y.push(a.type);const m=y;function b(t,e){return function(t){let e=t.length;const n={};for(;e;)n[t[--e]]=(n[t[e]]||0)+1;return n}(e)[t]||0}y=function(t){const e={},n=[];for(let r=0,i=t.length;r<i;++r)Object.prototype.hasOwnProperty.call(e,t[r])||(e[t[r]]=!0,n.push(t[r]));return n}(y),d.sort((function(t,e){const n=t.startTime,r=e.startTime;let i=0;return n>r?i=1:n<r&&(i=-1),i})),function(t,n,s){const c=i.barHeight,l=c+i.barGap,u=i.topPadding,d=i.leftPadding;(0,o.BYU)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(o.JHv);(function(t,e,n,s,o,c,l,h){const u=c.reduce(((t,{startTime:e})=>t?Math.min(t,e):e),0),d=c.reduce(((t,{endTime:e})=>t?Math.max(t,e):e),0),p=r.db.getDateFormat();if(!u||!d)return;const y=[];let m=null,b=a()(u);for(;b.valueOf()<=d;)r.db.isInvalidDate(b,p,l,h)?m?m.end=b:m={start:b,end:b}:m&&(y.push(m),m=null),b=b.add(1,"d");f.append("g").selectAll("rect").data(y).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",i.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return g(e)-g(t.start)})).attr("height",o-e-i.gridLineStartPadding).attr("transform-origin",(function(e,r){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(r*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(l,u,d,0,s,t,r.db.getExcludes(),r.db.getIncludes()),function(t,e,n,a){let s=(0,o.LLu)(g).tickSize(-a+e+i.gridLineStartPadding).tickFormat((0,o.i$Z)(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));const c=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(r.db.getTickInterval()||i.tickInterval);if(null!==c){const t=c[1];switch(c[2]){case"minute":s.ticks(o.Z_i.every(t));break;case"hour":s.ticks(o.WQD.every(t));break;case"day":s.ticks(o.rr1.every(t));break;case"week":s.ticks(o.NGh.every(t));break;case"month":s.ticks(o.F0B.every(t))}}if(f.append("g").attr("class","grid").attr("transform","translate("+t+", "+(a-50)+")").call(s).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),r.db.topAxisEnabled()||i.topAxis){let n=(0,o.F5q)(g).tickSize(-a+e+i.gridLineStartPadding).tickFormat((0,o.i$Z)(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(null!==c){const t=c[1];switch(c[2]){case"minute":n.ticks(o.Z_i.every(t));break;case"hour":n.ticks(o.WQD.every(t));break;case"day":n.ticks(o.rr1.every(t));break;case"week":n.ticks(o.NGh.every(t));break;case"month":n.ticks(o.F0B.every(t))}}f.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(d,u,0,s),function(t,n,a,s,c,l,h){f.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+a-2})).attr("width",(function(){return h-i.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of y.entries())if(t.type===n)return"section section"+e%i.numberSectionStyles;return"section section0"}));const u=f.append("g").selectAll("rect").data(t).enter(),d=r.db.getLinks();u.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+s+.5*(g(t.endTime)-g(t.startTime))-.5*c:g(t.startTime)+s})).attr("y",(function(t,e){return t.order*n+a})).attr("width",(function(t){return t.milestone?c:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",c).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+s+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+a+.5*c).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let r=0;for(const[s,o]of y.entries())t.type===o&&(r=s%i.numberSectionStyles);let a="";return t.active?t.crit?a+=" activeCrit":a=" active":t.done?a=t.crit?" doneCrit":" done":t.crit&&(a+=" crit"),0===a.length&&(a=" task"),t.milestone&&(a=" milestone "+a),a+=r,a+=" "+n,e+a})),u.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",i.fontSize).attr("x",(function(t){let e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*c),t.milestone&&(n=e+c);const r=this.getBBox().width;return r>n-e?n+r+1.5*i.leftPadding>h?e+s-5:n+s+5:(n-e)/2+e+s})).attr("y",(function(t,e){return t.order*n+i.barHeight/2+(i.fontSize/2-2)+a})).attr("text-height",c).attr("class",(function(t){const e=g(t.startTime);let n=g(t.endTime);t.milestone&&(n=e+c);const r=this.getBBox().width;let a="";t.classes.length>0&&(a=t.classes.join(" "));let s=0;for(const[c,l]of y.entries())t.type===l&&(s=c%i.numberSectionStyles);let o="";return t.active&&(o=t.crit?"activeCritText"+s:"activeText"+s),t.done?o=t.crit?o+" doneCritText"+s:o+" doneText"+s:t.crit&&(o=o+" critText"+s),t.milestone&&(o+=" milestoneText"),r>n-e?n+r+1.5*i.leftPadding>h?a+" taskTextOutsideLeft taskTextOutside"+s+" "+o:a+" taskTextOutsideRight taskTextOutside"+s+" "+o+" width-"+r:a+" taskText taskText"+s+" "+o+" width-"+r}));if("sandbox"===gr().securityLevel){let t;t=(0,o.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;u.filter((function(t){return void 0!==d[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),r=n.querySelector("#"+t.id+"-text");const i=e.parentNode;var a=n.createElement("a");a.setAttribute("xlink:href",d[t.id]),a.setAttribute("target","_top"),i.appendChild(a),a.appendChild(e),a.appendChild(r)}))}}(t,l,u,d,c,0,n),function(t,e){const n=[];let r=0;for(const[i,a]of y.entries())n[i]=[a,b(a,m)];f.append("g").selectAll("text").data(n).enter().append((function(t){const e=t[0].split(jt.lineBreakRegex),n=-(e.length-1)/2,r=h.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("dy",n+"em");for(const[i,a]of e.entries()){const t=h.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),i>0&&t.setAttribute("dy","1em"),t.textContent=a,r.appendChild(t)}return r})).attr("x",10).attr("y",(function(i,a){if(!(a>0))return i[1]*t/2+e;for(let s=0;s<a;s++)return r+=n[a-1][1],i[1]*t/2+r*t+e})).attr("font-size",i.sectionFontSize).attr("font-size",i.sectionFontSize).attr("class",(function(t){for(const[e,n]of y.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%i.numberSectionStyles;return"sectionTitle"}))}(l,u),function(t,e,n,a){const s=r.db.getTodayMarker();if("off"===s)return;const o=f.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",i.titleTopMargin).attr("y2",a-i.titleTopMargin).attr("class","today"),""!==s&&l.attr("style",s.replace(/,/g,";"))}(d,0,0,s)}(d,yl,p),kr(f,p,yl,i.useMaxWidth),f.append("text").text(r.db.getDiagramTitle()).attr("x",yl/2).attr("y",i.titleTopMargin).attr("class","titleText")}};var bl=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,9,10],r={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,e,n,r,i,a,s){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},e(n,[2,3]),e(n,[2,4]),e(n,[2,5]),e(n,[2,6])],defaultActions:{4:[2,1]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},i=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){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}}},t);function a(){this.yy={}}return r.lexer=i,a.prototype=r,r.Parser=a,new a}();bl.parser=bl;const _l=bl;var xl="",vl=!1;const kl={setMessage:t=>{Bt.debug("Setting message to: "+t),xl=t},getMessage:()=>xl,setInfo:t=>{vl=t},getInfo:()=>vl,clear:Yr},wl={draw:(t,e,n)=>{try{Bt.debug("Rendering info diagram\n"+t);const r=gr().securityLevel;let i;"sandbox"===r&&(i=(0,o.Ys)("#i"+e));const a=("sandbox"===r?(0,o.Ys)(i.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select("#"+e);a.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),a.attr("height",100),a.attr("width",400)}catch(r){Bt.error("Error while rendering info diagram"),Bt.error(r.message)}}},Cl=t=>null!==t.match(/^\s*info/);var El=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,4],r=[1,5],i=[1,6],a=[1,7],s=[1,9],o=[1,11,13,15,17,19,20,26,27,28,29],c=[2,5],l=[1,6,11,13,15,17,19,20,26,27,28,29],h=[26,27,28],u=[2,8],d=[1,18],p=[1,19],f=[1,20],g=[1,21],y=[1,22],m=[1,23],b=[1,28],_=[6,26,27,28,29],x={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value: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,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",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",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[o-1];break;case 9:r.addSection(a[o-1],r.cleanupValue(a[o]));break;case 10:this.$=a[o].trim(),r.setDiagramTitle(this.$);break;case 11:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 12:case 13:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 14:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 21:r.parseDirective("%%{","open_directive");break;case 22:r.parseDirective(a[o],"type_directive");break;case 23:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 24:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:n,21:8,26:r,27:i,28:a,29:s},{1:[3]},{3:10,4:2,5:3,6:n,21:8,26:r,27:i,28:a,29:s},{3:11,4:2,5:3,6:n,21:8,26:r,27:i,28:a,29:s},e(o,c,{7:12,8:[1,13]}),e(l,[2,18]),e(l,[2,19]),e(l,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},e(h,u,{21:8,9:16,10:17,5:24,1:[2,3],11:d,13:p,15:f,17:g,19:y,20:m,29:s}),e(o,c,{7:25}),{23:26,24:[1,27],32:b},e([24,32],[2,22]),e(o,[2,6]),{4:29,26:r,27:i,28:a},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},e(h,[2,13]),e(h,[2,14]),e(h,[2,15]),e(h,u,{21:8,9:16,10:17,5:24,1:[2,4],11:d,13:p,15:f,17:g,19:y,20:m,29:s}),e(_,[2,16]),{25:34,31:[1,35]},e(_,[2,24]),e(o,[2,7]),e(h,[2,9]),e(h,[2,10]),e(h,[2,11]),e(h,[2,12]),{23:36,32:b},{32:[2,23]},e(_,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},v=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/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,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}},t);function k(){this.yy={}}return x.lexer=v,k.prototype=x,x.Parser=k,new k}();El.parser=El;const Tl=El,Sl=t=>null!==t.match(/^\s*pie/)||null!==t.match(/^\s*bar/);let Al={},Ll=!1;const Bl={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().pie,addSection:function(t,e){t=jt.sanitizeText(t,gr()),void 0===Al[t]&&(Al[t]=e,Bt.debug("Added new section :",t))},getSections:()=>Al,cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){Al={},Ll=!1,Yr()},setAccTitle:zr,getAccTitle:Ur,setDiagramTitle:qr,getDiagramTitle:Vr,setShowData:function(t){Ll=t},getShowData:function(){return Ll},getAccDescription:Hr,setAccDescription:Wr};let Nl,Dl=gr();const Ol=450,Ml={draw:(t,e,n,r)=>{try{Dl=gr(),Bt.debug("Rendering info diagram\n"+t);const n=gr().securityLevel;let y;"sandbox"===n&&(y=(0,o.Ys)("#i"+e));const m="sandbox"===n?(0,o.Ys)(y.nodes()[0].contentDocument.body):(0,o.Ys)("body"),b="sandbox"===n?y.nodes()[0].contentDocument:document;r.db.clear(),r.parser.parse(t),Bt.debug("Parsed info diagram");const _=b.getElementById(e);Nl=_.parentElement.offsetWidth,void 0===Nl&&(Nl=1200),void 0!==Dl.useWidth&&(Nl=Dl.useWidth),void 0!==Dl.pie.useWidth&&(Nl=Dl.pie.useWidth);const x=m.select("#"+e);kr(x,Ol,Nl,Dl.pie.useMaxWidth),_.setAttribute("viewBox","0 0 "+Nl+" "+Ol);var i=18,a=Math.min(Nl,Ol)/2-40,s=x.append("g").attr("transform","translate("+Nl/2+",225)"),c=r.db.getSections(),l=0;Object.keys(c).forEach((function(t){l+=c[t]}));const v=Dl.themeVariables;var h=[v.pie1,v.pie2,v.pie3,v.pie4,v.pie5,v.pie6,v.pie7,v.pie8,v.pie9,v.pie10,v.pie11,v.pie12],u=(0,o.PKp)().range(h),d=Object.entries(c).map((function(t,e){return{order:e,name:t[0],value:t[1]}})),p=(0,o.ve8)().value((function(t){return t.value})).sort((function(t,e){return t.order-e.order}))(d),f=(0,o.Nb1)().innerRadius(0).outerRadius(a);s.selectAll("mySlices").data(p).enter().append("path").attr("d",f).attr("fill",(function(t){return u(t.data.name)})).attr("class","pieCircle"),s.selectAll("mySlices").data(p).enter().append("text").text((function(t){return(t.data.value/l*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+f.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),s.append("text").text(r.db.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var g=s.selectAll(".legend").data(u.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*u.domain().length/2)+")"}));g.append("rect").attr("width",i).attr("height",i).style("fill",u).style("stroke",u),g.data(p).append("text").attr("x",22).attr("y",14).text((function(t){return r.db.getShowData()||Dl.showData||Dl.pie.showData?t.data.name+" ["+t.data.value+"]":t.data.name}))}catch(y){Bt.error("Error while rendering info diagram"),Bt.error(y)}}};var Il=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,3],r=[1,5],i=[1,6],a=[1,7],s=[1,8],o=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],c=[1,22],l=[2,13],h=[1,26],u=[1,27],d=[1,28],p=[1,29],f=[1,30],g=[1,31],y=[1,24],m=[1,32],b=[1,33],_=[1,36],x=[71,72],v=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],k=[1,56],w=[1,57],C=[1,58],E=[1,59],T=[1,60],S=[1,61],A=[1,62],L=[62,63],B=[1,74],N=[1,70],D=[1,71],O=[1,72],M=[1,73],I=[1,75],F=[1,79],$=[1,80],R=[1,77],Z=[1,78],P=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],j={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 6:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 7:case 8:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 9:r.parseDirective("%%{","open_directive");break;case 10:r.parseDirective(a[o],"type_directive");break;case 11:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 12:r.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:r.addRequirement(a[o-3],a[o-4]);break;case 20:r.setNewReqId(a[o-2]);break;case 21:r.setNewReqText(a[o-2]);break;case 22:r.setNewReqRisk(a[o-2]);break;case 23:r.setNewReqVerifyMethod(a[o-2]);break;case 26:this.$=r.RequirementType.REQUIREMENT;break;case 27:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=r.RiskLevel.LOW_RISK;break;case 33:this.$=r.RiskLevel.MED_RISK;break;case 34:this.$=r.RiskLevel.HIGH_RISK;break;case 35:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=r.VerifyType.VERIFY_TEST;break;case 39:r.addElement(a[o-3]);break;case 40:r.setNewElementType(a[o-2]);break;case 41:r.setNewElementDocRef(a[o-2]);break;case 44:r.addRelationship(a[o-2],a[o],a[o-4]);break;case 45:r.addRelationship(a[o-2],a[o-4],a[o]);break;case 46:this.$=r.Relationships.CONTAINS;break;case 47:this.$=r.Relationships.COPIES;break;case 48:this.$=r.Relationships.DERIVES;break;case 49:this.$=r.Relationships.SATISFIES;break;case 50:this.$=r.Relationships.VERIFIES;break;case 51:this.$=r.Relationships.REFINES;break;case 52:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:n,9:4,14:r,16:i,18:a,19:s},{1:[3]},{3:10,4:2,5:[1,9],6:n,9:4,14:r,16:i,18:a,19:s},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},e(o,[2,8]),{20:[2,9]},{3:16,4:2,6:n,9:4,14:r,16:i,18:a,19:s},{1:[2,2]},{4:21,5:c,7:17,8:l,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{11:34,12:[1,35],22:_},e([12,22],[2,10]),e(o,[2,6]),e(o,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:c,7:38,8:l,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:39,8:l,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:40,8:l,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:41,8:l,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{4:21,5:c,7:42,8:l,9:4,14:r,16:i,18:a,19:s,23:18,24:19,25:20,26:23,32:25,40:h,41:u,42:d,43:p,44:f,45:g,53:y,71:m,72:b},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},e(x,[2,26]),e(x,[2,27]),e(x,[2,28]),e(x,[2,29]),e(x,[2,30]),e(x,[2,31]),e(v,[2,55]),e(v,[2,56]),e(o,[2,4]),{13:51,21:[1,52]},e(o,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:k,65:w,66:C,67:E,68:T,69:S,70:A},{61:63,64:k,65:w,66:C,67:E,68:T,69:S,70:A},{11:64,22:_},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},e(L,[2,46]),e(L,[2,47]),e(L,[2,48]),e(L,[2,49]),e(L,[2,50]),e(L,[2,51]),e(L,[2,52]),{63:[1,68]},e(o,[2,5]),{5:B,29:69,30:N,33:D,35:O,37:M,39:I},{5:F,39:$,55:76,56:R,58:Z},{32:81,71:m,72:b},{32:82,71:m,72:b},e(P,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:B,29:87,30:N,33:D,35:O,37:M,39:I},e(P,[2,25]),e(P,[2,39]),{31:[1,88]},{31:[1,89]},{5:F,39:$,55:90,56:R,58:Z},e(P,[2,43]),e(P,[2,44]),e(P,[2,45]),{32:91,71:m,72:b},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},e(P,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},e(P,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:B,29:116,30:N,33:D,35:O,37:M,39:I},{5:B,29:117,30:N,33:D,35:O,37:M,39:I},{5:B,29:118,30:N,33:D,35:O,37:M,39:I},{5:B,29:119,30:N,33:D,35:O,37:M,39:I},{5:F,39:$,55:120,56:R,58:Z},{5:F,39:$,55:121,56:R,58:Z},e(P,[2,20]),e(P,[2,21]),e(P,[2,22]),e(P,[2,23]),e(P,[2,40]),e(P,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},Y=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return e.yytext=e.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/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,/^(?:(\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:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,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,55],inclusive:!0}}},t);function z(){this.yy={}}return j.lexer=Y,z.prototype=j,j.Parser=z,new z}();Il.parser=Il;const Fl=Il,$l=t=>null!==t.match(/^\s*requirement(Diagram)?/);let Rl=[],Zl={},Pl={},jl={},Yl={};const zl={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"},parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().req,addRequirement:(t,e)=>(void 0===Pl[t]&&(Pl[t]={name:t,type:e,id:Zl.id,text:Zl.text,risk:Zl.risk,verifyMethod:Zl.verifyMethod}),Zl={},Pl[t]),getRequirements:()=>Pl,setNewReqId:t=>{void 0!==Zl&&(Zl.id=t)},setNewReqText:t=>{void 0!==Zl&&(Zl.text=t)},setNewReqRisk:t=>{void 0!==Zl&&(Zl.risk=t)},setNewReqVerifyMethod:t=>{void 0!==Zl&&(Zl.verifyMethod=t)},setAccTitle:zr,getAccTitle:Ur,setAccDescription:Wr,getAccDescription:Hr,addElement:t=>(void 0===Yl[t]&&(Yl[t]={name:t,type:jl.type,docRef:jl.docRef},Bt.info("Added new requirement: ",t)),jl={},Yl[t]),getElements:()=>Yl,setNewElementType:t=>{void 0!==jl&&(jl.type=t)},setNewElementDocRef:t=>{void 0!==jl&&(jl.docRef=t)},addRelationship:(t,e,n)=>{Rl.push({type:t,src:e,dst:n})},getRelationships:()=>Rl,clear:()=>{Rl=[],Zl={},Pl={},jl={},Yl={},Yr()}},Ul={CONTAINS:"contains",ARROW:"arrow"},Wl=Ul,Hl=(t,e)=>{let n=t.append("defs").append("marker").attr("id",Ul.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");n.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),n.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),n.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",Ul.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 ql={},Vl=0;const Gl=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",ql.rect_min_width+"px").attr("height",ql.rect_min_height+"px"),Xl=(t,e,n)=>{let r=ql.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",r).attr("y",ql.rect_padding).attr("dominant-baseline","hanging"),a=0;n.forEach((t=>{0==a?i.append("tspan").attr("text-anchor","middle").attr("x",ql.rect_min_width/2).attr("dy",0).text(t):i.append("tspan").attr("text-anchor","middle").attr("x",ql.rect_min_width/2).attr("dy",.75*ql.line_height).text(t),a++}));let s=1.5*ql.rect_padding+a*ql.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",ql.rect_min_width).attr("y1",s).attr("y2",s),{titleNode:i,y:s}},Ql=(t,e,n,r)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",ql.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),a=0;let s=[];return n.forEach((t=>{let e=t.length;for(;e>30&&a<3;){let n=t.substring(0,30);e=(t=t.substring(30,t.length)).length,s[s.length]=n,a++}if(3==a){let t=s[s.length-1];s[s.length-1]=t.substring(0,t.length-4)+"..."}else s[s.length]=t;a=0})),s.forEach((t=>{i.append("tspan").attr("x",ql.rect_padding).attr("dy",ql.line_height).text(t)})),i},Kl=function(t,e,n,r,i){const a=n.edge(Jl(e.src),Jl(e.dst)),s=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})),c=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?c.attr("marker-start","url("+jt.getUrl(ql.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(c.attr("stroke-dasharray","10,7"),c.attr("marker-end","url("+jt.getUrl(ql.arrowMarkerAbsolute)+"#"+Wl.ARROW+"_line_ending)")),((t,e,n,r)=>{const i=e.node().getTotalLength(),a=e.node().getPointAtLength(.5*i),s="rel"+Vl;Vl++;const o=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-o.width/2).attr("y",a.y-o.height/2).attr("width",o.width).attr("height",o.height).attr("fill","white").attr("fill-opacity","85%")})(t,c,0,`<<${e.type}>>`)},Jl=t=>t.replace(/\s/g,"").replace(/\./g,"_"),th={draw:(t,e,n,r)=>{ql=gr().requirement,r.db.clear(),r.parser.parse(t);const i=ql.securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s=("sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body")).select(`[id='${e}']`);Hl(s,ql);const c=new lt.k({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:ql.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let l=r.db.getRequirements(),h=r.db.getElements(),u=r.db.getRelationships();var d,p,f;d=l,p=c,f=s,Object.keys(d).forEach((t=>{let e=d[t];t=Jl(t),Bt.info("Added new requirement: ",t);const n=f.append("g").attr("id",t),r=Gl(n,"req-"+t);let i=Xl(n,t+"_title",[`<<${e.type}>>`,`${e.name}`]);Ql(n,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],i.y);const a=r.node().getBBox();p.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,n)=>{Object.keys(t).forEach((r=>{let i=t[r];const a=Jl(r),s=n.append("g").attr("id",a),o="element-"+a,c=Gl(s,o);let l=Xl(s,o+"_title",["<<Element>>",`${r}`]);Ql(s,o+"_body",[`Type: ${i.type||"Not Specified"}`,`Doc Ref: ${i.docRef||"None"}`],l.y);const h=c.node().getBBox();e.setNode(a,{width:h.width,height:h.height,shape:"rect",id:a})}))})(h,c,s),((t,e)=>{t.forEach((function(t){let n=Jl(t.src),r=Jl(t.dst);e.setEdge(n,r,{relationship:t})}))})(u,c),(0,ct.bK)(c),function(t,e){e.nodes().forEach((function(n){void 0!==n&&void 0!==e.node(n)&&(t.select("#"+n),t.select("#"+n).attr("transform","translate("+(e.node(n).x-e.node(n).width/2)+","+(e.node(n).y-e.node(n).height/2)+" )"))}))}(s,c),u.forEach((function(t){Kl(s,t,c,e,r)}));const g=ql.rect_padding,y=s.node().getBBox(),m=y.width+2*g,b=y.height+2*g;kr(s,b,m,ql.useMaxWidth),s.attr("viewBox",`${y.x-g} ${y.y-g} ${m} ${b}`)}};var eh=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,3],i=[1,5],a=[1,7],s=[2,5],o=[1,15],c=[1,17],l=[1,19],h=[1,21],u=[1,22],d=[1,23],p=[1,29],f=[1,30],g=[1,31],y=[1,32],m=[1,33],b=[1,34],_=[1,35],x=[1,36],v=[1,37],k=[1,38],w=[1,39],C=[1,40],E=[1,42],T=[1,43],S=[1,45],A=[1,46],L=[1,47],B=[1,48],N=[1,49],D=[1,50],O=[1,53],M=[1,4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],I=[4,5,21,54,56],F=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],$=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,53,54,56,57,62,63,64,65,73,83],R=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,52,54,56,57,62,63,64,65,73,83],Z=[4,5,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,54,56,57,62,63,64,65,73,83],P=[71,72,73],j=[1,125],Y=[1,4,5,7,19,21,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,51,52,53,54,56,57,62,63,64,65,73,83],z={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,box_section:11,box_line:12,participant_statement:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,box:19,restOfLine:20,end:21,signal:22,autonumber:23,NUM:24,off:25,activate:26,actor:27,deactivate:28,note_statement:29,links_statement:30,link_statement:31,properties_statement:32,details_statement:33,title:34,legacy_title:35,acc_title:36,acc_title_value:37,acc_descr:38,acc_descr_value:39,acc_descr_multiline_value:40,loop:41,rect:42,opt:43,alt:44,else_sections:45,par:46,par_sections:47,critical:48,option_sections:49,break:50,option:51,and:52,else:53,participant:54,AS:55,participant_actor:56,note:57,placement:58,text2:59,over:60,actor_pair:61,links:62,link:63,properties:64,details:65,spaceList:66,",":67,left_of:68,right_of:69,signaltype:70,"+":71,"-":72,ACTOR:73,SOLID_OPEN_ARROW:74,DOTTED_OPEN_ARROW:75,SOLID_ARROW:76,DOTTED_ARROW:77,SOLID_CROSS:78,DOTTED_CROSS:79,SOLID_POINT:80,DOTTED_POINT:81,TXT:82,open_directive:83,type_directive:84,arg_directive:85,close_directive:86,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",17:":",19:"box",20:"restOfLine",21:"end",23:"autonumber",24:"NUM",25:"off",26:"activate",28:"deactivate",34:"title",35:"legacy_title",36:"acc_title",37:"acc_title_value",38:"acc_descr",39:"acc_descr_value",40:"acc_descr_multiline_value",41:"loop",42:"rect",43:"opt",44:"alt",46:"par",48:"critical",50:"break",51:"option",52:"and",53:"else",54:"participant",55:"AS",56:"participant_actor",57:"note",60:"over",62:"links",63:"link",64:"properties",65:"details",67:",",68:"left_of",69:"right_of",71:"+",72:"-",73:"ACTOR",74:"SOLID_OPEN_ARROW",75:"DOTTED_OPEN_ARROW",76:"SOLID_ARROW",77:"DOTTED_ARROW",78:"SOLID_CROSS",79:"DOTTED_CROSS",80:"SOLID_POINT",81:"DOTTED_POINT",82:"TXT",83:"open_directive",84:"type_directive",85:"arg_directive",86:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[11,0],[11,2],[12,2],[12,1],[12,1],[6,4],[6,6],[10,1],[10,4],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[49,1],[49,4],[47,1],[47,4],[45,1],[45,4],[13,5],[13,3],[13,5],[13,3],[29,4],[29,4],[30,3],[31,3],[32,3],[33,3],[66,2],[66,1],[61,3],[61,1],[58,1],[58,1],[22,5],[22,5],[22,4],[27,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[59,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:return r.apply(a[o]),a[o];case 5:case 10:case 9:case 14:this.$=[];break;case 6:case 11:a[o-1].push(a[o]),this.$=a[o-1];break;case 7:case 8:case 12:case 13:case 63:this.$=a[o];break;case 18:a[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(a[o-2])}),a[o-1].push({type:"boxEnd",boxText:a[o-2]}),this.$=a[o-1];break;case 20:this.$={type:"sequenceIndex",sequenceIndex:Number(a[o-2]),sequenceIndexStep:Number(a[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceIndex:Number(a[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 23:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 24:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[o-1]};break;case 25:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[o-1]};break;case 31:r.setDiagramTitle(a[o].substring(6)),this.$=a[o].substring(6);break;case 32:r.setDiagramTitle(a[o].substring(7)),this.$=a[o].substring(7);break;case 33:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 34:case 35:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 36:a[o-1].unshift({type:"loopStart",loopText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.LOOP_START}),a[o-1].push({type:"loopEnd",loopText:a[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[o-1];break;case 37:a[o-1].unshift({type:"rectStart",color:r.parseMessage(a[o-2]),signalType:r.LINETYPE.RECT_START}),a[o-1].push({type:"rectEnd",color:r.parseMessage(a[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[o-1];break;case 38:a[o-1].unshift({type:"optStart",optText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.OPT_START}),a[o-1].push({type:"optEnd",optText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[o-1];break;case 39:a[o-1].unshift({type:"altStart",altText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.ALT_START}),a[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[o-1];break;case 40:a[o-1].unshift({type:"parStart",parText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.PAR_START}),a[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[o-1];break;case 41:a[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.CRITICAL_START}),a[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=a[o-1];break;case 42:a[o-1].unshift({type:"breakStart",breakText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.BREAK_START}),a[o-1].push({type:"breakEnd",optText:r.parseMessage(a[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=a[o-1];break;case 45:this.$=a[o-3].concat([{type:"option",optionText:r.parseMessage(a[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},a[o]]);break;case 47:this.$=a[o-3].concat([{type:"and",parText:r.parseMessage(a[o-1]),signalType:r.LINETYPE.PAR_AND},a[o]]);break;case 49:this.$=a[o-3].concat([{type:"else",altText:r.parseMessage(a[o-1]),signalType:r.LINETYPE.ALT_ELSE},a[o]]);break;case 50:a[o-3].type="addParticipant",a[o-3].description=r.parseMessage(a[o-1]),this.$=a[o-3];break;case 51:a[o-1].type="addParticipant",this.$=a[o-1];break;case 52:a[o-3].type="addActor",a[o-3].description=r.parseMessage(a[o-1]),this.$=a[o-3];break;case 53:a[o-1].type="addActor",this.$=a[o-1];break;case 54:this.$=[a[o-1],{type:"addNote",placement:a[o-2],actor:a[o-1].actor,text:a[o]}];break;case 55:a[o-2]=[].concat(a[o-1],a[o-1]).slice(0,2),a[o-2][0]=a[o-2][0].actor,a[o-2][1]=a[o-2][1].actor,this.$=[a[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[o-2].slice(0,2),text:a[o]}];break;case 56:this.$=[a[o-1],{type:"addLinks",actor:a[o-1].actor,text:a[o]}];break;case 57:this.$=[a[o-1],{type:"addALink",actor:a[o-1].actor,text:a[o]}];break;case 58:this.$=[a[o-1],{type:"addProperties",actor:a[o-1].actor,text:a[o]}];break;case 59:this.$=[a[o-1],{type:"addDetails",actor:a[o-1].actor,text:a[o]}];break;case 62:this.$=[a[o-2],a[o]];break;case 64:this.$=r.PLACEMENT.LEFTOF;break;case 65:this.$=r.PLACEMENT.RIGHTOF;break;case 66:this.$=[a[o-4],a[o-1],{type:"addMessage",from:a[o-4].actor,to:a[o-1].actor,signalType:a[o-3],msg:a[o]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[o-1]}];break;case 67:this.$=[a[o-4],a[o-1],{type:"addMessage",from:a[o-4].actor,to:a[o-1].actor,signalType:a[o-3],msg:a[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[o-4]}];break;case 68:this.$=[a[o-3],a[o-1],{type:"addMessage",from:a[o-3].actor,to:a[o-1].actor,signalType:a[o-2],msg:a[o]}];break;case 69:this.$={type:"addParticipant",actor:a[o]};break;case 70:this.$=r.LINETYPE.SOLID_OPEN;break;case 71:this.$=r.LINETYPE.DOTTED_OPEN;break;case 72:this.$=r.LINETYPE.SOLID;break;case 73:this.$=r.LINETYPE.DOTTED;break;case 74:this.$=r.LINETYPE.SOLID_CROSS;break;case 75:this.$=r.LINETYPE.DOTTED_CROSS;break;case 76:this.$=r.LINETYPE.SOLID_POINT;break;case 77:this.$=r.LINETYPE.DOTTED_POINT;break;case 78:this.$=r.parseMessage(a[o].trim().substring(1));break;case 79:r.parseDirective("%%{","open_directive");break;case 80:r.parseDirective(a[o],"type_directive");break;case 81:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 82:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:n,5:r,6:4,7:i,14:6,83:a},{1:[3]},{3:8,4:n,5:r,6:4,7:i,14:6,83:a},{3:9,4:n,5:r,6:4,7:i,14:6,83:a},{3:10,4:n,5:r,6:4,7:i,14:6,83:a},e([1,4,5,19,23,26,28,34,35,36,38,40,41,42,43,44,46,48,50,54,56,57,62,63,64,65,73,83],s,{8:11}),{15:12,84:[1,13]},{84:[2,79]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{16:51,17:[1,52],86:O},e([17,86],[2,80]),e(M,[2,6]),{6:41,10:54,13:18,14:6,19:l,22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},e(M,[2,8]),e(M,[2,9]),e(M,[2,17]),{20:[1,55]},{5:[1,56]},{5:[1,59],24:[1,57],25:[1,58]},{27:60,73:D},{27:61,73:D},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},{5:[1,66]},e(M,[2,31]),e(M,[2,32]),{37:[1,67]},{39:[1,68]},e(M,[2,35]),{20:[1,69]},{20:[1,70]},{20:[1,71]},{20:[1,72]},{20:[1,73]},{20:[1,74]},{20:[1,75]},e(M,[2,43]),{27:76,73:D},{27:77,73:D},{70:78,74:[1,79],75:[1,80],76:[1,81],77:[1,82],78:[1,83],79:[1,84],80:[1,85],81:[1,86]},{58:87,60:[1,88],68:[1,89],69:[1,90]},{27:91,73:D},{27:92,73:D},{27:93,73:D},{27:94,73:D},e([5,55,67,74,75,76,77,78,79,80,81,82],[2,69]),{5:[1,95]},{18:96,85:[1,97]},{5:[2,82]},e(M,[2,7]),e(I,[2,10],{11:98}),e(M,[2,19]),{5:[1,100],24:[1,99]},{5:[1,101]},e(M,[2,23]),{5:[1,102]},{5:[1,103]},e(M,[2,26]),e(M,[2,27]),e(M,[2,28]),e(M,[2,29]),e(M,[2,30]),e(M,[2,33]),e(M,[2,34]),e(F,s,{8:104}),e(F,s,{8:105}),e(F,s,{8:106}),e($,s,{45:107,8:108}),e(R,s,{47:109,8:110}),e(Z,s,{49:111,8:112}),e(F,s,{8:113}),{5:[1,115],55:[1,114]},{5:[1,117],55:[1,116]},{27:120,71:[1,118],72:[1,119],73:D},e(P,[2,70]),e(P,[2,71]),e(P,[2,72]),e(P,[2,73]),e(P,[2,74]),e(P,[2,75]),e(P,[2,76]),e(P,[2,77]),{27:121,73:D},{27:123,61:122,73:D},{73:[2,64]},{73:[2,65]},{59:124,82:j},{59:126,82:j},{59:127,82:j},{59:128,82:j},e(Y,[2,15]),{16:129,86:O},{86:[2,81]},{4:[1,132],5:[1,134],12:131,13:133,21:[1,130],54:E,56:T},{5:[1,135]},e(M,[2,21]),e(M,[2,22]),e(M,[2,24]),e(M,[2,25]),{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,136],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,137],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,138],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{21:[1,139]},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[2,48],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,53:[1,140],54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{21:[1,141]},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[2,46],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,52:[1,142],54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{21:[1,143]},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[2,44],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,51:[1,144],54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{4:o,5:c,6:41,9:14,10:16,13:18,14:6,19:l,21:[1,145],22:20,23:h,26:u,27:44,28:d,29:24,30:25,31:26,32:27,33:28,34:p,35:f,36:g,38:y,40:m,41:b,42:_,43:x,44:v,46:k,48:w,50:C,54:E,56:T,57:S,62:A,63:L,64:B,65:N,73:D,83:a},{20:[1,146]},e(M,[2,51]),{20:[1,147]},e(M,[2,53]),{27:148,73:D},{27:149,73:D},{59:150,82:j},{59:151,82:j},{59:152,82:j},{67:[1,153],82:[2,63]},{5:[2,56]},{5:[2,78]},{5:[2,57]},{5:[2,58]},{5:[2,59]},{5:[1,154]},e(M,[2,18]),e(I,[2,11]),{13:155,54:E,56:T},e(I,[2,13]),e(I,[2,14]),e(M,[2,20]),e(M,[2,36]),e(M,[2,37]),e(M,[2,38]),e(M,[2,39]),{20:[1,156]},e(M,[2,40]),{20:[1,157]},e(M,[2,41]),{20:[1,158]},e(M,[2,42]),{5:[1,159]},{5:[1,160]},{59:161,82:j},{59:162,82:j},{5:[2,68]},{5:[2,54]},{5:[2,55]},{27:163,73:D},e(Y,[2,16]),e(I,[2,12]),e($,s,{8:108,45:164}),e(R,s,{8:110,47:165}),e(Z,s,{8:112,49:166}),e(M,[2,50]),e(M,[2,52]),{5:[2,66]},{5:[2,67]},{82:[2,62]},{21:[2,49]},{21:[2,47]},{21:[2,45]}],defaultActions:{7:[2,79],8:[2,1],9:[2,2],10:[2,3],53:[2,82],89:[2,64],90:[2,65],97:[2,81],124:[2,56],125:[2,78],126:[2,57],127:[2,58],128:[2,59],150:[2,68],151:[2,54],152:[2,55],161:[2,66],162:[2,67],163:[2,62],164:[2,49],165:[2,47],166:[2,45]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},U=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),83;case 1:return this.begin("type_directive"),84;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),86;case 4:return 85;case 5:case 53:case 66:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 24;case 12:return this.begin("LINE"),19;case 13:return this.begin("ID"),54;case 14:return this.begin("ID"),56;case 15:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),73;case 16:return this.popState(),this.popState(),this.begin("LINE"),55;case 17:return this.popState(),this.popState(),5;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),44;case 22:return this.begin("LINE"),53;case 23:return this.begin("LINE"),46;case 24:return this.begin("LINE"),52;case 25:return this.begin("LINE"),48;case 26:return this.begin("LINE"),51;case 27:return this.begin("LINE"),50;case 28:return this.popState(),20;case 29:return 21;case 30:return 68;case 31:return 69;case 32:return 62;case 33:return 63;case 34:return 64;case 35:return 65;case 36:return 60;case 37:return 57;case 38:return this.begin("ID"),26;case 39:return this.begin("ID"),28;case 40:return 34;case 41:return 35;case 42:return this.begin("acc_title"),36;case 43:return this.popState(),"acc_title_value";case 44:return this.begin("acc_descr"),38;case 45:return this.popState(),"acc_descr_value";case 46:this.begin("acc_descr_multiline");break;case 47:this.popState();break;case 48:return"acc_descr_multiline_value";case 49:return 7;case 50:return 23;case 51:return 25;case 52:return 67;case 54:return e.yytext=e.yytext.trim(),73;case 55:return 76;case 56:return 77;case 57:return 74;case 58:return 75;case 59:return 78;case 60:return 79;case 61:return 80;case 62:return 81;case 63:return 82;case 64:return 71;case 65:return 72;case 67:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/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,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[47,48],inclusive:!1},acc_descr:{rules:[45],inclusive:!1},acc_title:{rules:[43],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,15],inclusive:!1},ALIAS:{rules:[7,8,16,17],inclusive:!1},LINE:{rules:[7,8,28],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,14,18,19,20,21,22,23,24,25,26,27,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,46,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}},t);function W(){this.yy={}}return z.lexer=U,W.prototype=z,z.Parser=W,new W}();eh.parser=eh;const nh=eh,rh=t=>null!==t.match(/^\s*sequenceDiagram/);let ih,ah,sh,oh={},ch=[],lh=[],hh=!1;const uh=function(t,e,n,r){let i=sh;const a=oh[t];if(a){if(sh&&a.box&&sh!==a.box)throw new Error("A same participant should only be defined in one Box: "+a.name+" can't be in '"+a.box.name+"' and in '"+sh.name+"' at the same time.");if(i=a.box?a.box:sh,a.box=i,a&&e===a.name&&null==n)return}null!=n&&null!=n.text||(n={text:e,wrap:null,type:r}),null!=r&&null!=n.text||(n={text:e,wrap:null,type:r}),oh[t]={box:i,name:e,description:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,prevActor:ih,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},ih&&oh[ih]&&(oh[ih].nextActor=t),sh&&sh.actorKeys.push(t),ih=t},dh=function(t,e,n={text:void 0,wrap:void 0},r){if(r===gh.ACTIVE_END){const e=(t=>{let e,n=0;for(e=0;e<lh.length;e++)lh[e].type===gh.ACTIVE_START&&lh[e].from.actor===t&&n++,lh[e].type===gh.ACTIVE_END&&lh[e].from.actor===t&&n--;return n})(t.actor);if(e<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return lh.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,type:r}),!0},ph=function(t){return oh[t]},fh=()=>void 0!==ah?ah:gr().sequence.wrap,gh={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,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31},yh=function(t,e,n){n.text,void 0===n.wrap&&fh()||n.wrap;const r=[].concat(t,t);lh.push({from:r[0],to:r[1],message:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,type:gh.NOTE,placement:e})},mh=function(t,e){const n=ph(t);try{let t=It(e.text,gr());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");bh(n,JSON.parse(t))}catch(r){Bt.error("error while parsing actor link text",r)}};function bh(t,e){if(null==t.links)t.links=e;else for(let n in e)t.links[n]=e[n]}const _h=function(t,e){const n=ph(t);try{let t=It(e.text,gr());xh(n,JSON.parse(t))}catch(r){Bt.error("error while parsing actor properties text",r)}};function xh(t,e){if(null==t.properties)t.properties=e;else for(let n in e)t.properties[n]=e[n]}const vh=function(t,e){const n=ph(t),r=document.getElementById(e.text);try{const t=r.innerHTML,e=JSON.parse(t);e.properties&&xh(n,e.properties),e.links&&bh(n,e.links)}catch(i){Bt.error("error while parsing actor details text",i)}},kh=function(t){if(Array.isArray(t))t.forEach((function(t){kh(t)}));else switch(t.type){case"sequenceIndex":lh.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":uh(t.actor,t.actor,t.description,"participant");break;case"addActor":uh(t.actor,t.actor,t.description,"actor");break;case"activeStart":case"activeEnd":dh(t.actor,void 0,void 0,t.signalType);break;case"addNote":yh(t.actor,t.placement,t.text);break;case"addLinks":mh(t.actor,t.text);break;case"addALink":!function(t,e){const n=ph(t);try{const t={};let s=It(e.text,gr());var r=s.indexOf("@");s=s.replace(/&/g,"&"),s=s.replace(/=/g,"=");var i=s.slice(0,r-1).trim(),a=s.slice(r+1).trim();t[i]=a,bh(n,t)}catch(s){Bt.error("error while parsing actor link text",s)}}(t.actor,t.text);break;case"addProperties":_h(t.actor,t.text);break;case"addDetails":vh(t.actor,t.text);break;case"addMessage":dh(t.from,t.to,t.msg,t.signalType);break;case"boxStart":e=t.boxData,ch.push({name:e.text,wrap:void 0===e.wrap&&fh()||!!e.wrap,fill:e.color,actorKeys:[]}),sh=ch.slice(-1)[0];break;case"boxEnd":sh=void 0;break;case"loopStart":dh(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":dh(void 0,void 0,void 0,t.signalType);break;case"rectStart":dh(void 0,void 0,t.color,t.signalType);break;case"optStart":dh(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":dh(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":zr(t.text);break;case"parStart":case"and":dh(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":dh(void 0,void 0,t.criticalText,t.signalType);break;case"option":dh(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":dh(void 0,void 0,t.breakText,t.signalType)}var e},wh={addActor:uh,addMessage:function(t,e,n,r){lh.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&fh()||!!n.wrap,answer:r})},addSignal:dh,addLinks:mh,addDetails:vh,addProperties:_h,autoWrap:fh,setWrap:function(t){ah=t},enableSequenceNumbers:function(){hh=!0},disableSequenceNumbers:function(){hh=!1},showSequenceNumbers:()=>hh,getMessages:function(){return lh},getActors:function(){return oh},getActor:ph,getActorKeys:function(){return Object.keys(oh)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:Ur,getBoxes:function(){return ch},getDiagramTitle:Vr,setDiagramTitle:qr,parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().sequence,clear:function(){oh={},ch=[],lh=[],hh=!1,Yr()},parseMessage:function(t){const e=t.trim(),n={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return Bt.debug("parseMessage:",n),n},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let n=null!=e&&e[1]?e[1].trim():"transparent",r=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",n)||(n="transparent",r=t.trim());else{const e=(new Option).style;e.color=n,e.color!==n&&(n="transparent",r=t.trim())}return{color:n,text:void 0!==r?It(r.replace(/^:?(?:no)?wrap:/,""),gr()):void 0,wrap:void 0!==r?null!==r.match(/^:?wrap:/)||null===r.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:gh,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:yh,setAccTitle:zr,apply:kh,setAccDescription:Wr,getAccDescription:Hr,hasAtLeastOneBox:function(){return ch.length>0},hasAtLeastOneBoxWithTitle:function(){return ch.some((t=>t.name))}};let Ch=[];const Eh=()=>{Ch.forEach((t=>{t()})),Ch=[]},Th=function(t,e){const n=t.append("rect");return 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),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},Sh=(t,e)=>{var n;n=()=>{const n=document.querySelectorAll(t);0!==n.length&&(n[0].addEventListener("mouseover",(function(){Bh("actor"+e+"_popup")})),n[0].addEventListener("mouseout",(function(){Nh("actor"+e+"_popup")})))},Ch.push(n)},Ah=function(t,e,n,r){const i=t.append("image");i.attr("x",e),i.attr("y",n);var a=(0,s.Nm)(r);i.attr("xlink:href",a)},Lh=function(t,e,n,r){const i=t.append("use");i.attr("x",e),i.attr("y",n);var a=(0,s.Nm)(r);i.attr("xlink:href","#"+a)},Bh=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},Nh=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},Dh=function(t,e){let n=0,r=0;const i=e.text.split(jt.lineBreakRegex),[a,s]=ir(e.fontSize);let o=[],c=0,l=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":l=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":l=()=>Math.round(e.y+(n+r+e.textMargin)/2);break;case"bottom":case"end":l=()=>Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[h,u]of i.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==a&&(c=h*a);const i=t.append("text");if(i.attr("x",e.x),i.attr("y",l()),void 0!==e.anchor&&i.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&i.style("font-family",e.fontFamily),void 0!==s&&i.style("font-size",s),void 0!==e.fontWeight&&i.style("font-weight",e.fontWeight),void 0!==e.fill&&i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class),void 0!==e.dy?i.attr("dy",e.dy):0!==c&&i.attr("dy",c),e.tspan){const t=i.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(u)}else i.text(u);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(r+=(i._groups||i)[0][0].getBBox().height,n=r),o.push(i)}return o},Oh=function(t,e){const n=t.append("polygon");var r,i,a,s,o;return n.attr("points",(r=e.x,i=e.y,a=e.width,s=e.height,r+","+i+" "+(r+a)+","+i+" "+(r+a)+","+(i+s-(o=7))+" "+(r+a-1.2*o)+","+(i+s)+" "+r+","+(i+s))),n.attr("class","labelBox"),e.y=e.y+e.height/2,Dh(t,e),n};let Mh=-1;const Ih=(t,e)=>{t.selectAll&&t.selectAll(".actor-line").attr("class","200").attr("y2",e-55)},Fh=function(t,e){Th(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"}).lower()},$h=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},Rh=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Zh=function(){function t(t,e,n,i,a,s,o){r(e.append("text").attr("x",n+a/2).attr("y",i+s/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,a,s,o,c){const{actorFontSize:l,actorFontFamily:h,actorFontWeight:u}=c,[d,p]=ir(l),f=t.split(jt.lineBreakRegex);for(let g=0;g<f.length;g++){const t=g*d-d*(f.length-1)/2,c=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle").style("font-size",p).style("font-weight",u).style("font-family",h);c.append("tspan").attr("x",n+a/2).attr("dy",t).text(f[g]),c.attr("y",i+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(c,o)}}function n(t,n,i,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,i,a,s,o,c,l),r(u,c)}function r(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),Ph=function(){function t(t,e,n,i,a,s,o){r(e.append("text").attr("x",n).attr("y",i).style("text-anchor","start").text(t),o)}function e(t,e,n,i,a,s,o,c){const{actorFontSize:l,actorFontFamily:h,actorFontWeight:u}=c,d=t.split(jt.lineBreakRegex);for(let p=0;p<d.length;p++){const t=p*l-l*(d.length-1)/2,a=e.append("text").attr("x",n).attr("y",i).style("text-anchor","start").style("font-size",l).style("font-weight",u).style("font-family",h);a.append("tspan").attr("x",n).attr("dy",t).text(d[p]),a.attr("y",i+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(a,o)}}function n(t,n,i,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,i,a,0,o,c,l),r(u,c)}function r(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),jh={drawRect:Th,drawText:Dh,drawLabel:Oh,drawActor:function(t,e,n,r){switch(e.type){case"actor":return function(t,e,n,r){const i=e.x+e.width/2,a=e.y+80;r||(Mh++,t.append("line").attr("id","actor"+Mh).attr("x1",i).attr("y1",a).attr("x2",i).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));const s=t.append("g");s.attr("class","actor-man");const o=Rh();o.x=e.x,o.y=e.y,o.fill="#eaeaea",o.width=e.width,o.height=e.height,o.class="actor",o.rx=3,o.ry=3,s.append("line").attr("id","actor-man-torso"+Mh).attr("x1",i).attr("y1",e.y+25).attr("x2",i).attr("y2",e.y+45),s.append("line").attr("id","actor-man-arms"+Mh).attr("x1",i-18).attr("y1",e.y+33).attr("x2",i+18).attr("y2",e.y+33),s.append("line").attr("x1",i-18).attr("y1",e.y+60).attr("x2",i).attr("y2",e.y+45),s.append("line").attr("x1",i).attr("y1",e.y+45).attr("x2",i+16).attr("y2",e.y+60);const c=s.append("circle");c.attr("cx",e.x+e.width/2),c.attr("cy",e.y+10),c.attr("r",15),c.attr("width",e.width),c.attr("height",e.height);const l=s.node().getBBox();return e.height=l.height,Zh(n)(e.description,s,o.x,o.y+35,o.width,o.height,{class:"actor"},n),e.height}(t,e,n,r);case"participant":return function(t,e,n,r){const i=e.x+e.width/2,a=e.y+5,s=t.append("g");var o=s;r||(Mh++,o.append("line").attr("id","actor"+Mh).attr("x1",i).attr("y1",a).attr("x2",i).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"),o=s.append("g"),e.actorCnt=Mh,null!=e.links&&(o.attr("id","root-"+Mh),Sh("#root-"+Mh,Mh)));const c=Rh();var l="actor";null!=e.properties&&e.properties.class?l=e.properties.class:c.fill="#eaeaea",c.x=e.x,c.y=e.y,c.width=e.width,c.height=e.height,c.class=l,c.rx=3,c.ry=3;const h=Th(o,c);if(e.rectData=c,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?Lh(o,c.x+c.width-20,c.y+10,t.substr(1)):Ah(o,c.x+c.width-20,c.y+10,t)}Zh(n)(e.description,o,c.x,c.y,c.width,c.height,{class:"actor"},n);let u=e.height;if(h.node){const t=h.node().getBBox();e.height=t.height,u=t.height}return u}(t,e,n,r)}},drawBox:function(t,e,n){const r=t.append("g");Fh(r,e),e.name&&Zh(n)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},n),r.lower()},drawPopup:function(t,e,n,r,i){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const a=e.links,o=e.actorCnt,c=e.rectData;var l="none";i&&(l="block !important");const h=t.append("g");h.attr("id","actor"+o+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",l),Sh("#actor"+o+"_popup",o);var u="";void 0!==c.class&&(u=" "+c.class);let d=c.width>n?c.width:n;const p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+u),p.attr("x",c.x),p.attr("y",c.height),p.attr("fill",c.fill),p.attr("stroke",c.stroke),p.attr("width",d),p.attr("height",c.height),p.attr("rx",c.rx),p.attr("ry",c.ry),null!=a){var f=20;for(let t in a){var g=h.append("a"),y=(0,s.Nm)(a[t]);g.attr("xlink:href",y),g.attr("target","_blank"),Ph(r)(t,g,c.x+10,c.height+f,d,20,{class:"actor"},r),f+=30}}return p.attr("height",f),{height:c.height+f,width:d}},drawImage:Ah,drawEmbeddedImage:Lh,anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,n,r,i){const a=Rh(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=n-e.starty,Th(s,a)},drawLoop:function(t,e,n,r){const{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:o,messageFontFamily:c,messageFontSize:l,messageFontWeight:h}=r,u=t.append("g"),d=function(t,e,n,r){return u.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};d(e.startx,e.starty,e.stopx,e.starty),d(e.stopx,e.starty,e.stopx,e.stopy),d(e.startx,e.stopy,e.stopx,e.stopy),d(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){d(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let p=$h();p.text=n,p.x=e.startx,p.y=e.starty,p.fontFamily=c,p.fontSize=l,p.fontWeight=h,p.anchor="middle",p.valign="middle",p.tspan=!1,p.width=o||50,p.height=s||20,p.textMargin=a,p.class="labelText",Oh(u,p),p=$h(),p.text=e.title,p.x=e.startx+o/2+(e.stopx-e.startx)/2,p.y=e.starty+i+a,p.anchor="middle",p.valign="middle",p.textMargin=a,p.class="loopText",p.fontFamily=c,p.fontSize=l,p.fontWeight=h,p.wrap=!0;let f=Dh(u,p);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,n){if(t.message){p.text=t.message,p.x=e.startx+(e.stopx-e.startx)/2,p.y=e.sections[n].y+i+a,p.class="loopText",p.anchor="middle",p.valign="middle",p.tspan=!1,p.fontFamily=c,p.fontSize=l,p.fontWeight=h,p.wrap=e.wrap,f=Dh(u,p);let r=Math.round(f.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[n].height+=r-(i+a)}})),e.height=Math.round(e.stopy-e.starty),u},drawBackgroundRect:Fh,insertArrowHead: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")},insertArrowFilledHead: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")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon: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")},insertComputerIcon: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")},insertClockIcon: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")},getTextObj:$h,getNoteRect:Rh,popupMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},popdownMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},fixLifeLineHeights:Ih,sanitizeUrl:s.Nm};let Yh={};const zh={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Gh(gr())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){const i=this;let a=0;function s(s){return function(o){a++;const c=i.sequenceItems.length-a+1;i.updateVal(o,"starty",e-c*Yh.boxMargin,Math.min),i.updateVal(o,"stopy",r+c*Yh.boxMargin,Math.max),i.updateVal(zh.data,"startx",t-c*Yh.boxMargin,Math.min),i.updateVal(zh.data,"stopx",n+c*Yh.boxMargin,Math.max),"activation"!==s&&(i.updateVal(o,"startx",t-c*Yh.boxMargin,Math.min),i.updateVal(o,"stopx",n+c*Yh.boxMargin,Math.max),i.updateVal(zh.data,"starty",e-c*Yh.boxMargin,Math.min),i.updateVal(zh.data,"stopy",r+c*Yh.boxMargin,Math.max))}}this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,e,n,r){const i=Math.min(t,n),a=Math.max(t,n),s=Math.min(e,r),o=Math.max(e,r);this.updateVal(zh.data,"startx",i,Math.min),this.updateVal(zh.data,"starty",s,Math.min),this.updateVal(zh.data,"stopx",a,Math.max),this.updateVal(zh.data,"stopy",o,Math.max),this.updateBounds(i,s,a,o)},newActivation:function(t,e,n){const r=n[t.from.actor],i=Xh(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*Yh.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Yh.activationWidth,stopy:void 0,actor:t.from.actor,anchored:jh.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:zh.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},Uh=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),Wh=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),Hh=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const qh=function(t,e,n,r,i,a,s){if(!0===i.hideUnusedParticipants){const t=new Set;a.forEach((e=>{t.add(e.from),t.add(e.to)})),n=n.filter((e=>t.has(e)))}let o,c=0,l=0,h=0;for(const u of n){const n=e[u],i=n.box;o&&o!=i&&(s||zh.models.addBox(o),l+=Yh.boxMargin+o.margin),i&&i!=o&&(s||(i.x=c+l,i.y=r),l+=i.margin),n.width=n.width||Yh.width,n.height=Math.max(n.height||Yh.height,Yh.height),n.margin=n.margin||Yh.actorMargin,n.x=c+l,n.y=zh.getVerticalPos();const a=jh.drawActor(t,n,Yh,s);h=Math.max(h,a),zh.insert(n.x,r,n.x+n.width,n.height),c+=n.width+l,n.box&&(n.box.width=c+i.margin-n.box.x),l=n.margin,o=n.box,zh.models.addActor(n)}o&&!s&&zh.models.addBox(o),zh.bumpVerticalPos(h)},Vh=function(t,e,n,r){let i=0,a=0;for(const s of n){const n=e[s],o=Jh(n),c=jh.drawPopup(t,n,o,Yh,Yh.forceMenus,r);c.height>i&&(i=c.height),c.width+n.x>a&&(a=c.width+n.x)}return{maxHeight:i,maxWidth:a}},Gh=function(t){$n(Yh,t),t.fontFamily&&(Yh.actorFontFamily=Yh.noteFontFamily=Yh.messageFontFamily=t.fontFamily),t.fontSize&&(Yh.actorFontSize=Yh.noteFontSize=Yh.messageFontSize=t.fontSize),t.fontWeight&&(Yh.actorFontWeight=Yh.noteFontWeight=Yh.messageFontWeight=t.fontWeight)},Xh=function(t){return zh.activations.filter((function(e){return e.actor===t}))},Qh=function(t,e){const n=e[t],r=Xh(t);return[r.reduce((function(t,e){return Math.min(t,e.startx)}),n.x+n.width/2),r.reduce((function(t,e){return Math.max(t,e.stopx)}),n.x+n.width/2)]};function Kh(t,e,n,r,i){zh.bumpVerticalPos(n);let a=r;if(e.id&&e.message&&t[e.id]){const n=t[e.id].width,i=Uh(Yh);e.message=ar.wrapLabel(`[${e.message}]`,n-2*Yh.wrapPadding,i),e.width=n,e.wrap=!0;const s=ar.calculateTextDimensions(e.message,i),o=Math.max(s.height,Yh.labelBoxHeight);a=r+o,Bt.debug(`${o} - ${e.message}`)}i(e),zh.bumpVerticalPos(a)}const Jh=function(t){let e=0;const n=Hh(Yh);for(const r in t.links){const t=ar.calculateTextDimensions(r,n).width+2*Yh.wrapPadding+2*Yh.boxMargin;e<t&&(e=t)}return e};const tu=function(t,e,n,r){const i={},a=[];let s,o,c;return t.forEach((function(t){switch(t.id=ar.random({length:10}),t.type){case r.db.LINETYPE.LOOP_START:case r.db.LINETYPE.ALT_START:case r.db.LINETYPE.OPT_START:case r.db.LINETYPE.PAR_START:case r.db.LINETYPE.CRITICAL_START:case r.db.LINETYPE.BREAK_START:a.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case r.db.LINETYPE.ALT_ELSE:case r.db.LINETYPE.PAR_AND:case r.db.LINETYPE.CRITICAL_OPTION:t.message&&(s=a.pop(),i[s.id]=s,i[t.id]=s,a.push(s));break;case r.db.LINETYPE.LOOP_END:case r.db.LINETYPE.ALT_END:case r.db.LINETYPE.OPT_END:case r.db.LINETYPE.PAR_END:case r.db.LINETYPE.CRITICAL_END:case r.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case r.db.LINETYPE.ACTIVE_START:{const n=e[t.from?t.from.actor:t.to.actor],r=Xh(t.from?t.from.actor:t.to.actor).length,i=n.x+n.width/2+(r-1)*Yh.activationWidth/2,a={startx:i,stopx:i+Yh.activationWidth,actor:t.from.actor,enabled:!0};zh.activations.push(a)}break;case r.db.LINETYPE.ACTIVE_END:{const e=zh.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete zh.activations.splice(e,1)[0]}}void 0!==t.placement?(o=function(t,e,n){const r=e[t.from].x,i=e[t.to].x,a=t.wrap&&t.message;let s=ar.calculateTextDimensions(a?ar.wrapLabel(t.message,Yh.width,Wh(Yh)):t.message,Wh(Yh));const o={width:a?Yh.width:Math.max(Yh.width,s.width+2*Yh.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===n.db.PLACEMENT.RIGHTOF?(o.width=a?Math.max(Yh.width,s.width):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*Yh.noteMargin),o.startx=r+(e[t.from].width+Yh.actorMargin)/2):t.placement===n.db.PLACEMENT.LEFTOF?(o.width=a?Math.max(Yh.width,s.width+2*Yh.noteMargin):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*Yh.noteMargin),o.startx=r-o.width+(e[t.from].width-Yh.actorMargin)/2):t.to===t.from?(s=ar.calculateTextDimensions(a?ar.wrapLabel(t.message,Math.max(Yh.width,e[t.from].width),Wh(Yh)):t.message,Wh(Yh)),o.width=a?Math.max(Yh.width,e[t.from].width):Math.max(e[t.from].width,Yh.width,s.width+2*Yh.noteMargin),o.startx=r+(e[t.from].width-o.width)/2):(o.width=Math.abs(r+e[t.from].width/2-(i+e[t.to].width/2))+Yh.actorMargin,o.startx=r<i?r+e[t.from].width/2-Yh.actorMargin/2:i+e[t.to].width/2-Yh.actorMargin/2),a&&(o.message=ar.wrapLabel(t.message,o.width-2*Yh.wrapPadding,Wh(Yh))),Bt.debug(`NM:[${o.startx},${o.stopx},${o.starty},${o.stopy}:${o.width},${o.height}=${t.message}]`),o}(t,e,r),t.noteModel=o,a.forEach((t=>{s=t,s.from=Math.min(s.from,o.startx),s.to=Math.max(s.to,o.startx+o.width),s.width=Math.max(s.width,Math.abs(s.from-s.to))-Yh.labelBoxWidth}))):(c=function(t,e,n){let r=!1;if([n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(r=!0),!r)return{};const i=Qh(t.from,e),a=Qh(t.to,e),s=i[0]<=a[0]?1:0,o=i[0]<a[0]?0:1,c=[...i,...a],l=Math.abs(a[o]-i[s]);t.wrap&&t.message&&(t.message=ar.wrapLabel(t.message,Math.max(l+2*Yh.wrapPadding,Yh.width),Uh(Yh)));const h=ar.calculateTextDimensions(t.message,Uh(Yh));return{width:Math.max(t.wrap?0:h.width+2*Yh.wrapPadding,l+2*Yh.wrapPadding,Yh.width),height:0,startx:i[s],stopx:a[o],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,c),toBounds:Math.max.apply(null,c)}}(t,e,r),t.msgModel=c,c.startx&&c.stopx&&a.length>0&&a.forEach((n=>{if(s=n,c.startx===c.stopx){const n=e[t.from],r=e[t.to];s.from=Math.min(n.x-c.width/2,n.x-n.width/2,s.from),s.to=Math.max(r.x+c.width/2,r.x+n.width/2,s.to),s.width=Math.max(s.width,Math.abs(s.to-s.from))-Yh.labelBoxWidth}else s.from=Math.min(c.startx,s.from),s.to=Math.max(c.stopx,s.to),s.width=Math.max(s.width,c.width)-Yh.labelBoxWidth})))})),zh.activations=[],Bt.debug("Loop type widths:",i),i},eu={bounds:zh,drawActors:qh,drawActorsPopup:Vh,setConf:Gh,draw:function(t,e,n,r){const{securityLevel:i,sequence:a}=gr();let s;Yh=a,r.db.clear(),r.parser.parse(t),"sandbox"===i&&(s=(0,o.Ys)("#i"+e));const c="sandbox"===i?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body"),l="sandbox"===i?s.nodes()[0].contentDocument:document;zh.init(),Bt.debug(r.db);const h="sandbox"===i?c.select(`[id="${e}"]`):(0,o.Ys)(`[id="${e}"]`),u=r.db.getActors(),d=r.db.getBoxes(),p=r.db.getActorKeys(),f=r.db.getMessages(),g=r.db.getDiagramTitle(),y=r.db.hasAtLeastOneBox(),m=r.db.hasAtLeastOneBoxWithTitle(),b=function(t,e,n){const r={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const i=t[e.to];if(e.placement===n.db.PLACEMENT.LEFTOF&&!i.prevActor)return;if(e.placement===n.db.PLACEMENT.RIGHTOF&&!i.nextActor)return;const a=void 0!==e.placement,s=!a,o=a?Wh(Yh):Uh(Yh),c=e.wrap?ar.wrapLabel(e.message,Yh.width-2*Yh.wrapPadding,o):e.message,l=ar.calculateTextDimensions(c,o).width+2*Yh.wrapPadding;s&&e.from===i.nextActor?r[e.to]=Math.max(r[e.to]||0,l):s&&e.from===i.prevActor?r[e.from]=Math.max(r[e.from]||0,l):s&&e.from===e.to?(r[e.from]=Math.max(r[e.from]||0,l/2),r[e.to]=Math.max(r[e.to]||0,l/2)):e.placement===n.db.PLACEMENT.RIGHTOF?r[e.from]=Math.max(r[e.from]||0,l):e.placement===n.db.PLACEMENT.LEFTOF?r[i.prevActor]=Math.max(r[i.prevActor]||0,l):e.placement===n.db.PLACEMENT.OVER&&(i.prevActor&&(r[i.prevActor]=Math.max(r[i.prevActor]||0,l/2)),i.nextActor&&(r[e.from]=Math.max(r[e.from]||0,l/2)))}})),Bt.debug("maxMessageWidthPerActor:",r),r}(u,f,r);Yh.height=function(t,e,n){let r=0;Object.keys(t).forEach((e=>{const n=t[e];n.wrap&&(n.description=ar.wrapLabel(n.description,Yh.width-2*Yh.wrapPadding,Hh(Yh)));const i=ar.calculateTextDimensions(n.description,Hh(Yh));n.width=n.wrap?Yh.width:Math.max(Yh.width,i.width+2*Yh.wrapPadding),n.height=n.wrap?Math.max(i.height,Yh.height):Yh.height,r=Math.max(r,n.height)}));for(const a in e){const n=t[a];if(!n)continue;const r=t[n.nextActor];if(!r){const t=e[a]+Yh.actorMargin-n.width/2;n.margin=Math.max(t,Yh.actorMargin);continue}const i=e[a]+Yh.actorMargin-n.width/2-r.width/2;n.margin=Math.max(i,Yh.actorMargin)}let i=0;return n.forEach((e=>{const n=Uh(Yh);let r=e.actorKeys.reduce(((e,n)=>e+(t[n].width+(t[n].margin||0))),0);r-=2*Yh.boxTextMargin,e.wrap&&(e.name=ar.wrapLabel(e.name,r-2*Yh.wrapPadding,n));const a=ar.calculateTextDimensions(e.name,n);i=Math.max(a.height,i);const s=Math.max(r,a.width+2*Yh.wrapPadding);if(e.margin=Yh.boxTextMargin,r<s){const t=(s-r)/2;e.margin+=t}})),n.forEach((t=>t.textMaxHeight=i)),Math.max(r,Yh.height)}(u,b,d),jh.insertComputerIcon(h),jh.insertDatabaseIcon(h),jh.insertClockIcon(h),y&&(zh.bumpVerticalPos(Yh.boxMargin),m&&zh.bumpVerticalPos(d[0].textMaxHeight)),qh(h,u,p,0,Yh,f,!1);const _=tu(f,u,b,r);jh.insertArrowHead(h),jh.insertArrowCrossHead(h),jh.insertArrowFilledHead(h),jh.insertSequenceNumber(h);let x=1,v=1;const k=[];f.forEach((function(t){let e,n,i;switch(t.type){case r.db.LINETYPE.NOTE:n=t.noteModel,function(t,e){zh.bumpVerticalPos(Yh.boxMargin),e.height=Yh.boxMargin,e.starty=zh.getVerticalPos();const n=jh.getNoteRect();n.x=e.startx,n.y=e.starty,n.width=e.width||Yh.width,n.class="note";const r=t.append("g"),i=jh.drawRect(r,n),a=jh.getTextObj();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Yh.noteFontFamily,a.fontSize=Yh.noteFontSize,a.fontWeight=Yh.noteFontWeight,a.anchor=Yh.noteAlign,a.textMargin=Yh.noteMargin,a.valign="center";const s=Dh(r,a),o=Math.round(s.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));i.attr("height",o+2*Yh.noteMargin),e.height+=o+2*Yh.noteMargin,zh.bumpVerticalPos(o+2*Yh.noteMargin),e.stopy=e.starty+o+2*Yh.noteMargin,e.stopx=e.startx+n.width,zh.insert(e.startx,e.starty,e.stopx,e.stopy),zh.models.addNote(e)}(h,n);break;case r.db.LINETYPE.ACTIVE_START:zh.newActivation(t,h,u);break;case r.db.LINETYPE.ACTIVE_END:!function(t,e){const n=zh.endActivation(t);n.starty+18>e&&(n.starty=e-6,e+=12),jh.drawActivation(h,n,e,Yh,Xh(t.from.actor).length),zh.insert(n.startx,e-10,n.stopx,e)}(t,zh.getVerticalPos());break;case r.db.LINETYPE.LOOP_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case r.db.LINETYPE.LOOP_END:e=zh.endLoop(),jh.drawLoop(h,e,"loop",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case r.db.LINETYPE.RECT_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin,(t=>zh.newLoop(void 0,t.message)));break;case r.db.LINETYPE.RECT_END:e=zh.endLoop(),jh.drawBackgroundRect(h,e),zh.models.addLoop(e),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos());break;case r.db.LINETYPE.OPT_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case r.db.LINETYPE.OPT_END:e=zh.endLoop(),jh.drawLoop(h,e,"opt",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case r.db.LINETYPE.ALT_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case r.db.LINETYPE.ALT_ELSE:Kh(_,t,Yh.boxMargin+Yh.boxTextMargin,Yh.boxMargin,(t=>zh.addSectionToLoop(t)));break;case r.db.LINETYPE.ALT_END:e=zh.endLoop(),jh.drawLoop(h,e,"alt",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case r.db.LINETYPE.PAR_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case r.db.LINETYPE.PAR_AND:Kh(_,t,Yh.boxMargin+Yh.boxTextMargin,Yh.boxMargin,(t=>zh.addSectionToLoop(t)));break;case r.db.LINETYPE.PAR_END:e=zh.endLoop(),jh.drawLoop(h,e,"par",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case r.db.LINETYPE.AUTONUMBER:x=t.message.start||x,v=t.message.step||v,t.message.visible?r.db.enableSequenceNumbers():r.db.disableSequenceNumbers();break;case r.db.LINETYPE.CRITICAL_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case r.db.LINETYPE.CRITICAL_OPTION:Kh(_,t,Yh.boxMargin+Yh.boxTextMargin,Yh.boxMargin,(t=>zh.addSectionToLoop(t)));break;case r.db.LINETYPE.CRITICAL_END:e=zh.endLoop(),jh.drawLoop(h,e,"critical",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;case r.db.LINETYPE.BREAK_START:Kh(_,t,Yh.boxMargin,Yh.boxMargin+Yh.boxTextMargin,(t=>zh.newLoop(t)));break;case r.db.LINETYPE.BREAK_END:e=zh.endLoop(),jh.drawLoop(h,e,"break",Yh),zh.bumpVerticalPos(e.stopy-zh.getVerticalPos()),zh.models.addLoop(e);break;default:try{i=t.msgModel,i.starty=zh.getVerticalPos(),i.sequenceIndex=x,i.sequenceVisible=r.db.showSequenceNumbers();const e=function(t,e){zh.bumpVerticalPos(10);const{startx:n,stopx:r,message:i}=e,a=jt.splitBreaks(i).length,s=ar.calculateTextDimensions(i,Uh(Yh)),o=s.height/a;let c;e.height+=o,zh.bumpVerticalPos(o);let l=s.height-10;const h=s.width;if(n===r){c=zh.getVerticalPos()+l,Yh.rightAngles||(l+=Yh.boxMargin,c=zh.getVerticalPos()+l),l+=30;const t=Math.max(h/2,Yh.width/2);zh.insert(n-t,zh.getVerticalPos()-10+l,r+t,zh.getVerticalPos()+30+l)}else l+=Yh.boxMargin,c=zh.getVerticalPos()+l,zh.insert(n,c-10,r,c);return zh.bumpVerticalPos(l),e.height+=l,e.stopy=e.starty+e.height,zh.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),c}(0,i);k.push({messageModel:i,lineStartY:e}),zh.models.addMessage(i)}catch(a){Bt.error("error while drawing message",a)}}[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(x+=v)})),k.forEach((t=>function(t,e,n,r){const{startx:i,stopx:a,starty:s,message:o,type:c,sequenceIndex:l,sequenceVisible:h}=e,u=ar.calculateTextDimensions(o,Uh(Yh)),d=jh.getTextObj();d.x=i,d.y=s+10,d.width=a-i,d.class="messageText",d.dy="1em",d.text=o,d.fontFamily=Yh.messageFontFamily,d.fontSize=Yh.messageFontSize,d.fontWeight=Yh.messageFontWeight,d.anchor=Yh.messageAlign,d.valign="center",d.textMargin=Yh.wrapPadding,d.tspan=!1,Dh(t,d);const p=u.width;let f;i===a?f=Yh.rightAngles?t.append("path").attr("d",`M ${i},${n} H ${i+Math.max(Yh.width/2,p/2)} V ${n+25} H ${i}`):t.append("path").attr("d","M "+i+","+n+" C "+(i+60)+","+(n-10)+" "+(i+60)+","+(n+30)+" "+i+","+(n+20)):(f=t.append("line"),f.attr("x1",i),f.attr("y1",n),f.attr("x2",a),f.attr("y2",n)),c===r.db.LINETYPE.DOTTED||c===r.db.LINETYPE.DOTTED_CROSS||c===r.db.LINETYPE.DOTTED_POINT||c===r.db.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");let g="";Yh.arrowMarkerAbsolute&&(g=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,g=g.replace(/\(/g,"\\("),g=g.replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),c!==r.db.LINETYPE.SOLID&&c!==r.db.LINETYPE.DOTTED||f.attr("marker-end","url("+g+"#arrowhead)"),c!==r.db.LINETYPE.SOLID_POINT&&c!==r.db.LINETYPE.DOTTED_POINT||f.attr("marker-end","url("+g+"#filled-head)"),c!==r.db.LINETYPE.SOLID_CROSS&&c!==r.db.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+g+"#crosshead)"),(h||Yh.showSequenceNumbers)&&(f.attr("marker-start","url("+g+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",n+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(l))}(h,t.messageModel,t.lineStartY,r))),Yh.mirrorActors&&(zh.bumpVerticalPos(2*Yh.boxMargin),qh(h,u,p,zh.getVerticalPos(),Yh,f,!0),zh.bumpVerticalPos(Yh.boxMargin),Ih(h,zh.getVerticalPos())),zh.models.boxes.forEach((function(t){t.height=zh.getVerticalPos()-t.y,zh.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",jh.drawBox(h,t,Yh)})),y&&zh.bumpVerticalPos(Yh.boxMargin);const w=Vh(h,u,p,l),{bounds:C}=zh.getBounds();Bt.debug("For line height fix Querying: #"+e+" .actor-line");(0,o.td_)("#"+e+" .actor-line").attr("y2",C.stopy);let E=C.stopy-C.starty;E<w.maxHeight&&(E=w.maxHeight);let T=E+2*Yh.diagramMarginY;Yh.mirrorActors&&(T=T-Yh.boxMargin+Yh.bottomMarginAdj);let S=C.stopx-C.startx;S<w.maxWidth&&(S=w.maxWidth);const A=S+2*Yh.diagramMarginX;g&&h.append("text").text(g).attr("x",(C.stopx-C.startx)/2-2*Yh.diagramMarginX).attr("y",-25),kr(h,T,A,Yh.useMaxWidth);const L=g?40:0;h.attr("viewBox",C.startx-Yh.diagramMarginX+" -"+(Yh.diagramMarginY+L)+" "+A+" "+(T+L)),Bt.debug("models:",zh.models)}};var nu=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,3],i=[1,5],a=[1,7],s=[2,5],o=[1,15],c=[1,17],l=[1,21],h=[1,22],u=[1,23],d=[1,24],p=[1,37],f=[1,25],g=[1,26],y=[1,27],m=[1,28],b=[1,29],_=[1,32],x=[1,33],v=[1,34],k=[1,35],w=[1,36],C=[1,39],E=[1,40],T=[1,41],S=[1,42],A=[1,38],L=[1,45],B=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],N=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],D=[1,4,5,7,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],M={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,classDefStatement:11,cssClassStatement:12,idStatement: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:29,notePosition:30,NOTE_TEXT:31,direction: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,openDirective:45,typeDirective:46,closeDirective:47,":":48,argDirective:49,direction_tb:50,direction_bt:51,direction_rl:52,direction_lr:53,eol:54,";":55,EDGE_STATE:56,STYLE_SEPARATOR:57,left_of:58,right_of:59,open_directive:60,type_directive:61,arg_directive:62,close_directive:63,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",14:"DESCR",15:"--\x3e",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"class",43:"CLASSENTITY_IDS",44:"STYLECLASS",48:":",50:"direction_tb",51:"direction_bt",52:"direction_rl",53:"direction_lr",55:";",56:"EDGE_STATE",57:"STYLE_SEPARATOR",58:"left_of",59:"right_of",60:"open_directive",61:"type_directive",62:"arg_directive",63:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[11,3],[11,3],[12,3],[6,3],[6,5],[32,1],[32,1],[32,1],[32,1],[54,1],[54,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1],[45,1],[46,1],[49,1],[47,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 4:return r.setRootDoc(a[o]),a[o];case 5:this.$=[];break;case 6:"nl"!=a[o]&&(a[o-1].push(a[o]),this.$=a[o-1]);break;case 7:case 8:case 12:this.$=a[o];break;case 9:this.$="nl";break;case 13:const t=a[o-1];t.description=r.trimColon(a[o]),this.$=t;break;case 14:this.$={stmt:"relation",state1:a[o-2],state2:a[o]};break;case 15:const e=r.trimColon(a[o]);this.$={stmt:"relation",state1:a[o-3],state2:a[o-1],description:e};break;case 19:this.$={stmt:"state",id:a[o-3],type:"default",description:"",doc:a[o-1]};break;case 20:var c=a[o],l=a[o-2].trim();if(a[o].match(":")){var h=a[o].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 21:this.$={stmt:"state",id:a[o-3],type:"default",description:a[o-5],doc:a[o-1]};break;case 22:this.$={stmt:"state",id:a[o],type:"fork"};break;case 23:this.$={stmt:"state",id:a[o],type:"join"};break;case 24:this.$={stmt:"state",id:a[o],type:"choice"};break;case 25:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:a[o-1].trim(),note:{position:a[o-2].trim(),text:a[o].trim()}};break;case 30:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 31:case 32:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 33:case 34:this.$={stmt:"classDef",id:a[o-1].trim(),classes:a[o].trim()};break;case 35:this.$={stmt:"applyClass",id:a[o-1].trim(),styleClass:a[o].trim()};break;case 38:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:a[o].trim(),type:"default",description:""};break;case 46:case 47:this.$={stmt:"state",id:a[o-2].trim(),classes:[a[o].trim()],type:"default",description:""};break;case 50:r.parseDirective("%%{","open_directive");break;case 51:r.parseDirective(a[o],"type_directive");break;case 52:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 53:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:n,5:r,6:4,7:i,45:6,60:a},{1:[3]},{3:8,4:n,5:r,6:4,7:i,45:6,60:a},{3:9,4:n,5:r,6:4,7:i,45:6,60:a},{3:10,4:n,5:r,6:4,7:i,45:6,60:a},e([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,50,51,52,53,56,60],s,{8:11}),{46:12,61:[1,13]},{61:[2,50]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:c,6:30,9:14,10:16,11:18,12:19,13:20,16:l,17:h,19:u,22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:E,52:T,53:S,56:A,60:a},{47:43,48:[1,44],63:L},e([48,63],[2,51]),e(B,[2,6]),{6:30,10:46,11:18,12:19,13:20,16:l,17:h,19:u,22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:E,52:T,53:S,56:A,60:a},e(B,[2,8]),e(B,[2,9]),e(B,[2,10]),e(B,[2,11]),e(B,[2,12],{14:[1,47],15:[1,48]}),e(B,[2,16]),{18:[1,49]},e(B,[2,18],{20:[1,50]}),{23:[1,51]},e(B,[2,22]),e(B,[2,23]),e(B,[2,24]),e(B,[2,25]),{30:52,31:[1,53],58:[1,54],59:[1,55]},e(B,[2,28]),e(B,[2,29]),{34:[1,56]},{36:[1,57]},e(B,[2,32]),{39:[1,58],41:[1,59]},{43:[1,60]},e(N,[2,44],{57:[1,61]}),e(N,[2,45],{57:[1,62]}),e(B,[2,38]),e(B,[2,39]),e(B,[2,40]),e(B,[2,41]),e(D,[2,36]),{49:63,62:[1,64]},e(D,[2,53]),e(B,[2,7]),e(B,[2,13]),{13:65,24:p,56:A},e(B,[2,17]),e(O,s,{8:66}),{24:[1,67]},{24:[1,68]},{23:[1,69]},{24:[2,48]},{24:[2,49]},e(B,[2,30]),e(B,[2,31]),{40:[1,70]},{40:[1,71]},{44:[1,72]},{24:[1,73]},{24:[1,74]},{47:75,63:L},{63:[2,52]},e(B,[2,14],{14:[1,76]}),{4:o,5:c,6:30,9:14,10:16,11:18,12:19,13:20,16:l,17:h,19:u,21:[1,77],22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:E,52:T,53:S,56:A,60:a},e(B,[2,20],{20:[1,78]}),{31:[1,79]},{24:[1,80]},e(B,[2,33]),e(B,[2,34]),e(B,[2,35]),e(N,[2,46]),e(N,[2,47]),e(D,[2,37]),e(B,[2,15]),e(B,[2,19]),e(O,s,{8:81}),e(B,[2,26]),e(B,[2,27]),{4:o,5:c,6:30,9:14,10:16,11:18,12:19,13:20,16:l,17:h,19:u,21:[1,82],22:d,24:p,25:f,26:g,27:y,28:m,29:b,32:31,33:_,35:x,37:v,38:k,42:w,45:6,50:C,51:E,52:T,53:S,56:A,60:a},e(B,[2,21])],defaultActions:{7:[2,50],8:[2,1],9:[2,2],10:[2,3],54:[2,48],55:[2,49],64:[2,52]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},I=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return 41;case 1:case 44:return 50;case 2:case 45:return 51;case 3:case 46:return 52;case 4:case 47:return 53;case 5:return this.begin("open_directive"),60;case 6:return this.begin("type_directive"),61;case 7:return this.popState(),this.begin("arg_directive"),48;case 8:return this.popState(),this.popState(),63;case 9:return 62;case 10:case 11:case 13:case 14:case 15:case 16:case 56:case 58:case 64:break;case 12:case 79:return 5;case 17:case 34:return this.pushState("SCALE"),17;case 18:case 35:return 18;case 19:case 25:case 36:case 51:case 54:this.popState();break;case 20:return this.begin("acc_title"),33;case 21:return this.popState(),"acc_title_value";case 22:return this.begin("acc_descr"),35;case 23:return this.popState(),"acc_descr_value";case 24:this.begin("acc_descr_multiline");break;case 26:return"acc_descr_multiline_value";case 27:return this.pushState("CLASSDEF"),38;case 28:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 29:return this.popState(),this.pushState("CLASSDEFID"),39;case 30:return this.popState(),40;case 31:return this.pushState("CLASS"),42;case 32:return this.popState(),this.pushState("CLASS_STYLE"),43;case 33:return this.popState(),44;case 37:this.pushState("STATE");break;case 38:case 41:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 39:case 42:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),26;case 40:case 43:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),27;case 48:this.pushState("STATE_STRING");break;case 49:return this.pushState("STATE_ID"),"AS";case 50:case 66:return this.popState(),"ID";case 52:return"STATE_DESCR";case 53:return 19;case 55:return this.popState(),this.pushState("struct"),20;case 57:return this.popState(),21;case 59:return this.begin("NOTE"),29;case 60:return this.popState(),this.pushState("NOTE_ID"),58;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:this.popState(),this.pushState("FLOATING_NOTE");break;case 63:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 65:return"NOTE_TEXT";case 67:return this.popState(),this.pushState("NOTE_TEXT"),24;case 68:return this.popState(),e.yytext=e.yytext.substr(2).trim(),31;case 69:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),31;case 70:case 71:return 7;case 72:return 16;case 73:return 56;case 74:return 24;case 75:return e.yytext=e.yytext.trim(),14;case 76:return 15;case 77:return 28;case 78:return 57;case 80: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,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\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,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/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:[14,15],inclusive:!1},close_directive:{rules:[14,15],inclusive:!1},arg_directive:{rules:[8,9,14,15],inclusive:!1},type_directive:{rules:[7,8,14,15],inclusive:!1},open_directive:{rules:[6,14,15],inclusive:!1},struct:{rules:[14,15,27,31,37,44,45,46,47,56,57,58,59,73,74,75,76,77],inclusive:!1},FLOATING_NOTE_ID:{rules:[66],inclusive:!1},FLOATING_NOTE:{rules:[63,64,65],inclusive:!1},NOTE_TEXT:{rules:[68,69],inclusive:!1},NOTE_ID:{rules:[67],inclusive:!1},NOTE:{rules:[60,61,62],inclusive:!1},CLASS_STYLE:{rules:[33],inclusive:!1},CLASS:{rules:[32],inclusive:!1},CLASSDEFID:{rules:[30],inclusive:!1},CLASSDEF:{rules:[28,29],inclusive:!1},acc_descr_multiline:{rules:[25,26],inclusive:!1},acc_descr:{rules:[23],inclusive:!1},acc_title:{rules:[21],inclusive:!1},SCALE:{rules:[18,19,35,36],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[50],inclusive:!1},STATE_STRING:{rules:[51,52],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[14,15,38,39,40,41,42,43,48,49,53,54,55],inclusive:!1},ID:{rules:[14,15],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,10,11,12,13,15,16,17,20,22,24,27,31,34,37,55,59,70,71,72,73,74,75,76,78,79,80],inclusive:!0}}},t);function F(){this.yy={}}return M.lexer=I,F.prototype=M,M.Parser=F,new F}();nu.parser=nu;const ru=nu,iu=(t,e)=>{var n;return"dagre-wrapper"!==(null==(n=null==e?void 0:e.state)?void 0:n.defaultRenderer)&&null!==t.match(/^\s*stateDiagram/)},au=(t,e)=>{var n;return null!==t.match(/^\s*stateDiagram-v2/)||!(!t.match(/^\s*stateDiagram/)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.state)?void 0:n.defaultRenderer))},su="state",ou="relation",cu="default",lu="divider",hu="[*]",uu="start",du=hu,pu="color",fu="fill";let gu="LR",yu=[],mu={};let bu={root:{relations:[],states:{},documents:{}}},_u=bu.root,xu=0,vu=0;const ku=t=>JSON.parse(JSON.stringify(t)),wu=(t,e,n)=>{if(e.stmt===ou)wu(t,e.state1,!0),wu(t,e.state2,!1);else if(e.stmt===su&&("[*]"===e.id?(e.id=n?t.id+"_start":t.id+"_end",e.start=n):e.id=e.id.trim()),e.doc){const t=[];let n,r=[];for(n=0;n<e.doc.length;n++)if(e.doc[n].type===lu){const i=ku(e.doc[n]);i.doc=ku(r),t.push(i),r=[]}else r.push(e.doc[n]);if(t.length>0&&r.length>0){const n={stmt:su,id:Hn(),type:"divider",doc:ku(r)};t.push(ku(n)),e.doc=t}e.doc.forEach((t=>wu(e,t,!0)))}},Cu=function(t,e=cu,n=null,r=null,i=null,a=null,s=null,o=null){const c=null==t?void 0:t.trim();if(void 0===_u.states[c]?(Bt.info("Adding state ",c,r),_u.states[c]={id:c,descriptions:[],type:e,doc:n,note:i,classes:[],styles:[],textStyles:[]}):(_u.states[c].doc||(_u.states[c].doc=n),_u.states[c].type||(_u.states[c].type=e)),r&&(Bt.info("Setting state description",c,r),"string"==typeof r&&Bu(c,r.trim()),"object"==typeof r&&r.forEach((t=>Bu(c,t.trim())))),i&&(_u.states[c].note=i,_u.states[c].note.text=jt.sanitizeText(_u.states[c].note.text,gr())),a){Bt.info("Setting state classes",c,a);("string"==typeof a?[a]:a).forEach((t=>Du(c,t.trim())))}if(s){Bt.info("Setting state styles",c,s);("string"==typeof s?[s]:s).forEach((t=>Ou(c,t.trim())))}if(o){Bt.info("Setting state styles",c,s);("string"==typeof o?[o]:o).forEach((t=>Mu(c,t.trim())))}},Eu=function(t){bu={root:{relations:[],states:{},documents:{}}},_u=bu.root,xu=0,mu={},t||Yr()},Tu=function(t){return _u.states[t]};function Su(t=""){let e=t;return t===hu&&(xu++,e=`${uu}${xu}`),e}function Au(t="",e=cu){return t===hu?uu:e}const Lu=function(t,e,n){if("object"==typeof t)!function(t,e,n){let r=Su(t.id.trim()),i=Au(t.id.trim(),t.type),a=Su(e.id.trim()),s=Au(e.id.trim(),e.type);Cu(r,i,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),Cu(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),_u.relations.push({id1:r,id2:a,relationTitle:jt.sanitizeText(n,gr())})}(t,e,n);else{const r=Su(t.trim()),i=Au(t),a=function(t=""){let e=t;return t===du&&(xu++,e=`end${xu}`),e}(e.trim()),s=function(t="",e=cu){return t===du?"end":e}(e);Cu(r,i),Cu(a,s),_u.relations.push({id1:r,id2:a,title:jt.sanitizeText(n,gr())})}},Bu=function(t,e){const n=_u.states[t],r=e.startsWith(":")?e.replace(":","").trim():e;n.descriptions.push(jt.sanitizeText(r,gr()))},Nu=function(t,e=""){void 0===mu[t]&&(mu[t]={id:t,styles:[],textStyles:[]});const n=mu[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(pu)){const t=e.replace(fu,"bgFill").replace(pu,fu);n.textStyles.push(t)}n.styles.push(e)}))},Du=function(t,e){t.split(",").forEach((function(t){let n=Tu(t);if(void 0===n){const e=t.trim();Cu(e),n=Tu(e)}n.classes.push(e)}))},Ou=function(t,e){const n=Tu(t);void 0!==n&&n.textStyles.push(e)},Mu=function(t,e){const n=Tu(t);void 0!==n&&n.textStyles.push(e)},Iu={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().state,addState:Cu,clear:Eu,getState:Tu,getStates:function(){return _u.states},getRelations:function(){return _u.relations},getClasses:function(){return mu},getDirection:()=>gu,addRelation:Lu,getDividerId:()=>(vu++,"divider-id-"+vu),setDirection:t=>{gu=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(){Bt.info("Documents = ",bu)},getRootDoc:()=>yu,setRootDoc:t=>{Bt.info("Setting root doc",t),yu=t},getRootDocV2:()=>(wu({id:"root"},{id:"root",doc:yu},!0),{id:"root",doc:yu}),extract:t=>{let e;e=t.doc?t.doc:t,Bt.info(e),Eu(!0),Bt.info("Extract",e),e.forEach((t=>{switch(t.stmt){case su:Cu(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case ou:Lu(t.state1,t.state2,t.description);break;case"classDef":Nu(t.id.trim(),t.classes);break;case"applyClass":Du(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:Ur,setAccTitle:zr,getAccDescription:Hr,setAccDescription:Wr,addStyleClass:Nu,setCssClass:Du,addDescription:Bu,setDiagramTitle:qr,getDiagramTitle:Vr},Fu={},$u=(t,e)=>{Fu[t]=e},Ru=(t,e)=>{const n=t.append("text").attr("x",2*gr().state.padding).attr("y",gr().state.textHeight+1.3*gr().state.padding).attr("font-size",gr().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",gr().state.padding).attr("y",r+.4*gr().state.padding+gr().state.dividerMargin+gr().state.textHeight).attr("class","state-description");let a=!0,s=!0;e.descriptions.forEach((function(t){a||(!function(t,e,n){const r=t.append("tspan").attr("x",2*gr().state.padding).text(e);n||r.attr("dy",gr().state.textHeight)}(i,t,s),s=!1),a=!1}));const o=t.append("line").attr("x1",gr().state.padding).attr("y1",gr().state.padding+r+gr().state.dividerMargin/2).attr("y2",gr().state.padding+r+gr().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),l=Math.max(c.width,n.width);return o.attr("x2",l+3*gr().state.padding),t.insert("rect",":first-child").attr("x",gr().state.padding).attr("y",gr().state.padding).attr("width",l+2*gr().state.padding).attr("height",c.height+r+2*gr().state.padding).attr("rx",gr().state.radius),t},Zu=(t,e,n)=>{const r=gr().state.padding,i=2*gr().state.padding,a=t.node().getBBox(),s=a.width,o=a.x,c=t.append("text").attr("x",0).attr("y",gr().state.titleShift).attr("font-size",gr().state.fontSize).attr("class","state-title").text(e.id),l=c.node().getBBox().width+i;let h,u=Math.max(l,s);u===s&&(u+=i);const d=t.node().getBBox();e.doc,h=o-r,l>s&&(h=(s-u)/2+r),Math.abs(o-d.x)<r&&l>s&&(h=o-(l-s)/2);const p=1-gr().state.textHeight;return t.insert("rect",":first-child").attr("x",h).attr("y",p).attr("class",n?"alt-composit":"composit").attr("width",u).attr("height",d.height+gr().state.textHeight+gr().state.titleShift+1).attr("rx","0"),c.attr("x",h+r),l<=s&&c.attr("x",o+(u-i)/2-l/2+r),t.insert("rect",":first-child").attr("x",h).attr("y",gr().state.titleShift-gr().state.textHeight-gr().state.padding).attr("width",u).attr("height",3*gr().state.textHeight).attr("rx",gr().state.radius),t.insert("rect",":first-child").attr("x",h).attr("y",gr().state.titleShift-gr().state.textHeight-gr().state.padding).attr("width",u).attr("height",d.height+3+2*gr().state.textHeight).attr("rx",gr().state.radius),t},Pu=(t,e)=>{e.attr("class","state-note");const n=e.append("rect").attr("x",0).attr("y",gr().state.padding),r=e.append("g"),{textWidth:i,textHeight:a}=((t,e,n,r)=>{let i=0;const a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");const o=s.split(jt.lineBreakRegex);let c=1.25*gr().state.noteMargin;for(const l of o){const t=l.trim();if(t.length>0){const r=a.append("tspan");r.text(t),0===c&&(c+=r.node().getBBox().height),i+=c,r.attr("x",e+gr().state.noteMargin),r.attr("y",n+i+1.25*gr().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}})(t,0,0,r);return n.attr("height",a+2*gr().state.noteMargin),n.attr("width",i+2*gr().state.noteMargin),n},ju=function(t,e){const n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",gr().state.sizeUnit).attr("cx",gr().state.padding+gr().state.sizeUnit).attr("cy",gr().state.padding+gr().state.sizeUnit)})(i),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",gr().state.sizeUnit+gr().state.miniPadding).attr("cx",gr().state.padding+gr().state.sizeUnit+gr().state.miniPadding).attr("cy",gr().state.padding+gr().state.sizeUnit+gr().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",gr().state.sizeUnit).attr("cx",gr().state.padding+gr().state.sizeUnit+2).attr("cy",gr().state.padding+gr().state.sizeUnit+2)})(i),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let n=gr().state.forkWidth,r=gr().state.forkHeight;if(e.parentId){let t=n;n=r,r=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",gr().state.padding).attr("y",gr().state.padding)})(i,e),"note"===e.type&&Pu(e.note.text,i),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",gr().state.textHeight).attr("class","divider").attr("x2",2*gr().state.textHeight).attr("y1",0).attr("y2",0)})(i),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const n=t.append("text").attr("x",2*gr().state.padding).attr("y",gr().state.textHeight+2*gr().state.padding).attr("font-size",gr().state.fontSize).attr("class","state-title").text(e.id),r=n.node().getBBox();t.insert("rect",":first-child").attr("x",gr().state.padding).attr("y",gr().state.padding).attr("width",r.width+2*gr().state.padding).attr("height",r.height+2*gr().state.padding).attr("rx",gr().state.radius)})(i,e),"default"===e.type&&e.descriptions.length>0&&Ru(i,e);const a=i.node().getBBox();return r.width=a.width+2*gr().state.padding,r.height=a.height+2*gr().state.padding,$u(n,r),r};let Yu=0;let zu;const Uu={},Wu=(t,e,n,r,i,a,s)=>{const c=new lt.k({compound:!0,multigraph:!0});let l,h=!0;for(l=0;l<t.length;l++)if("relation"===t[l].stmt){h=!1;break}n?c.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:h?1:zu.edgeLengthFactor,nodeSep:h?1:50,isMultiGraph:!0}):c.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:h?1:zu.edgeLengthFactor,nodeSep:h?1:50,ranker:"tight-tree",isMultiGraph:!0}),c.setDefaultEdgeLabel((function(){return{}})),s.db.extract(t);const u=s.db.getStates(),d=s.db.getRelations(),p=Object.keys(u);for(const o of p){const t=u[o];let l;if(n&&(t.parentId=n),t.doc){let n=e.append("g").attr("id",t.id).attr("class","stateGroup");l=Wu(t.doc,n,t.id,!r,i,a,s);{n=Zu(n,t,r);let e=n.node().getBBox();l.width=e.width,l.height=e.height+zu.padding/2,Uu[t.id]={y:zu.compositTitleSize}}}else l=ju(e,t);if(t.note){const n={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},r=ju(e,n);"left of"===t.note.position?(c.setNode(l.id+"-note",r),c.setNode(l.id,l)):(c.setNode(l.id,l),c.setNode(l.id+"-note",r)),c.setParent(l.id,l.id+"-group"),c.setParent(l.id+"-note",l.id+"-group")}else c.setNode(l.id,l)}Bt.debug("Count=",c.nodeCount(),c);let f=0;d.forEach((function(t){var e;f++,Bt.debug("Setting edge",t),c.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*zu.fontSizeFactor:1),height:zu.labelHeight*jt.getRows(t.title).length,labelpos:"c"},"id"+f)})),(0,ct.bK)(c),Bt.debug("Graph after layout",c.nodes());const g=e.node();c.nodes().forEach((function(t){if(void 0!==t&&void 0!==c.node(t)){Bt.warn("Node "+t+": "+JSON.stringify(c.node(t))),i.select("#"+g.id+" #"+t).attr("transform","translate("+(c.node(t).x-c.node(t).width/2)+","+(c.node(t).y+(Uu[t]?Uu[t].y:0)-c.node(t).height/2)+" )"),i.select("#"+g.id+" #"+t).attr("data-x-shift",c.node(t).x-c.node(t).width/2);a.querySelectorAll("#"+g.id+" #"+t+" .divider").forEach((t=>{const e=t.parentElement;let n=0,r=0;e&&(e.parentElement&&(n=e.parentElement.getBBox().width),r=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(r)&&(r=0)),t.setAttribute("x1",0-r+8),t.setAttribute("x2",n-r-8)}))}else Bt.debug("No Node "+t+": "+JSON.stringify(c.node(t)))}));let y=g.getBBox();c.edges().forEach((function(t){void 0!==t&&void 0!==c.edge(t)&&(Bt.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(c.edge(t))),function(t,e,n){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const r=e.points,i=(0,o.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(o.$0Z),a=t.append("path").attr("d",i(r)).attr("id","edge"+Yu).attr("class","transition");let s="";if(gr().state.arrowMarkerAbsolute&&(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,s=s.replace(/\(/g,"\\("),s=s.replace(/\)/g,"\\)")),a.attr("marker-end","url("+s+"#"+function(t){switch(t){case Iu.relationType.AGGREGATION:return"aggregation";case Iu.relationType.EXTENSION:return"extension";case Iu.relationType.COMPOSITION:return"composition";case Iu.relationType.DEPENDENCY:return"dependency"}}(Iu.relationType.DEPENDENCY)+"End)"),void 0!==n.title){const r=t.append("g").attr("class","stateLabel"),{x:i,y:a}=ar.calcLabelPosition(e.points),s=jt.getRows(n.title);let o=0;const c=[];let l=0,h=0;for(let t=0;t<=s.length;t++){const e=r.append("text").attr("text-anchor","middle").text(s[t]).attr("x",i).attr("y",a+o),n=e.node().getBBox();if(l=Math.max(l,n.width),h=Math.min(h,n.x),Bt.info(n.x,i,a+o),0===o){const t=e.node().getBBox();o=t.height,Bt.info("Title height",o,a)}c.push(e)}let u=o*s.length;if(s.length>1){const t=(s.length-1)*o*.5;c.forEach(((e,n)=>e.attr("y",a+n*o-t))),u=o*s.length}const d=r.node().getBBox();r.insert("rect",":first-child").attr("class","box").attr("x",i-l/2-gr().state.padding/2).attr("y",a-u/2-gr().state.padding/2-3.5).attr("width",l+gr().state.padding).attr("height",u+gr().state.padding),Bt.info(d)}Yu++}(e,c.edge(t),c.edge(t).relation))})),y=g.getBBox();const m={id:n||"root",label:n||"root",width:0,height:0};return m.width=y.width+2*zu.padding,m.height=y.height+2*zu.padding,Bt.debug("Doc rendered",m,c),m},Hu={setConf:function(){},draw:function(t,e,n,r){zu=gr().state;const i=gr().securityLevel;let a;"sandbox"===i&&(a=(0,o.Ys)("#i"+e));const s="sandbox"===i?(0,o.Ys)(a.nodes()[0].contentDocument.body):(0,o.Ys)("body"),c="sandbox"===i?a.nodes()[0].contentDocument:document;Bt.debug("Rendering diagram "+t);const l=s.select(`[id='${e}']`);l.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");new lt.k({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));const h=r.db.getRootDoc();Wu(h,l,void 0,!1,s,c,r);const u=zu.padding,d=l.node().getBBox(),p=d.width+2*u,f=d.height+2*u;kr(l,f,1.75*p,zu.useMaxWidth),l.attr("viewBox",`${d.x-zu.padding} ${d.y-zu.padding} `+p+" "+f)}},qu="rect",Vu="rectWithTitle",Gu="statediagram",Xu=`${Gu}-state`,Qu="transition",Ku=`${Qu} note-edge`,Ju=`${Gu}-note`,td=`${Gu}-cluster`,ed=`${Gu}-cluster-alt`,nd="parent",rd="note",id="----",ad=`${id}${rd}`,sd=`${id}${nd}`,od="fill:none",cd="fill: #333",ld="text",hd="normal";let ud={},dd=0;function pd(t="",e=0,n="",r=id){return`state-${t}${null!==n&&n.length>0?`${r}${n}`:""}-${e}`}const fd=(t,e,n,r,i,a)=>{const s=n.id,o=null==(c=r[s])?"":c.classes?c.classes.join(" "):"";var c;if("root"!==s){let e=qu;!0===n.start&&(e="start"),!1===n.start&&(e="end"),n.type!==cu&&(e=n.type),ud[s]||(ud[s]={id:s,shape:e,description:jt.sanitizeText(s,gr()),classes:`${o} ${Xu}`});const r=ud[s];n.description&&(Array.isArray(r.description)?(r.shape=Vu,r.description.push(n.description)):r.description.length>0?(r.shape=Vu,r.description===s?r.description=[n.description]:r.description=[r.description,n.description]):(r.shape=qu,r.description=n.description),r.description=jt.sanitizeTextOrArray(r.description,gr())),1===r.description.length&&r.shape===Vu&&(r.shape=qu),!r.type&&n.doc&&(Bt.info("Setting cluster for ",s,yd(n)),r.type="group",r.dir=yd(n),r.shape=n.type===lu?"divider":"roundedWithTitle",r.classes=r.classes+" "+td+" "+(a?ed:""));const i={labelStyle:"",shape:r.shape,labelText:r.description,classes:r.classes,style:"",id:s,dir:r.dir,domId:pd(s,dd),type:r.type,padding:15};if(n.note){const e={labelStyle:"",shape:"note",labelText:n.note.text,classes:Ju,style:"",id:s+ad+"-"+dd,domId:pd(s,dd,rd),type:r.type,padding:15},a={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:r.classes,style:"",id:s+sd,domId:pd(s,dd,nd),type:"group",padding:0};dd++;const o=s+sd;t.setNode(o,a),t.setNode(e.id,e),t.setNode(s,i),t.setParent(s,o),t.setParent(e.id,o);let c=s,l=e.id;"left of"===n.note.position&&(c=e.id,l=s),t.setEdge(c,l,{arrowhead:"none",arrowType:"",style:od,labelStyle:"",classes:Ku,arrowheadStyle:cd,labelpos:"c",labelType:ld,thickness:hd})}else t.setNode(s,i)}e&&"root"!==e.id&&(Bt.trace("Setting node ",s," to be child of its parent ",e.id),t.setParent(s,e.id)),n.doc&&(Bt.trace("Adding nodes children "),gd(t,n,n.doc,r,i,!a))},gd=(t,e,n,r,i,a)=>{Bt.trace("items",n),n.forEach((n=>{switch(n.stmt){case su:case cu:fd(t,e,n,r,i,a);break;case ou:{fd(t,e,n.state1,r,i,a),fd(t,e,n.state2,r,i,a);const s={id:"edge"+dd,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:od,labelStyle:"",label:jt.sanitizeText(n.description,gr()),arrowheadStyle:cd,labelpos:"c",labelType:ld,thickness:hd,classes:Qu};t.setEdge(n.state1.id,n.state2.id,s,dd),dd++}}}))},yd=(t,e="TB")=>{let n=e;if(t.doc)for(let r=0;r<t.doc.length;r++){const e=t.doc[r];"dir"===e.stmt&&(n=e.value)}return n},md={setConf:function(t){const e=Object.keys(t);for(const n of e)t[n]},getClasses:function(t,e){Bt.trace("Extracting classes"),e.db.clear();try{return e.parser.parse(t),e.db.extract(e.db.getRootDocV2()),e.db.getClasses()}catch(n){return n}},draw:function(t,e,n,r){Bt.info("Drawing state diagram (v2)",e),ud={};let i=r.db.getDirection();void 0===i&&(i="LR");const{securityLevel:a,state:s}=gr(),c=s.nodeSpacing||50,l=s.rankSpacing||50;Bt.info(r.db.getRootDocV2()),r.db.extract(r.db.getRootDocV2()),Bt.info(r.db.getRootDocV2());const h=r.db.getStates(),u=new lt.k({multigraph:!0,compound:!0}).setGraph({rankdir:yd(r.db.getRootDocV2()),nodesep:c,ranksep:l,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let d;fd(u,void 0,r.db.getRootDocV2(),h,r.db,!0),"sandbox"===a&&(d=(0,o.Ys)("#i"+e));const p="sandbox"===a?(0,o.Ys)(d.nodes()[0].contentDocument.body):(0,o.Ys)("body"),f=p.select(`[id="${e}"]`),g=p.select("#"+e+" g");no(g,u,["barb"],Gu,e);ar.insertTitle(f,"statediagramTitleText",s.titleTopMargin,r.db.getDiagramTitle());const y=f.node().getBBox(),m=y.width+16,b=y.height+16;f.attr("class",Gu);const _=f.node().getBBox();kr(f,b,m,s.useMaxWidth);const x=`${_.x-8} ${_.y-8} ${m} ${b}`;Bt.debug(`viewBox ${x}`),f.attr("viewBox",x);const v=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const o of v){const t=o.getBBox(),e=document.createElementNS("http://www.w3.org/2000/svg",qu);e.setAttribute("rx",0),e.setAttribute("ry",0),e.setAttribute("width",t.width),e.setAttribute("height",t.height),o.insertBefore(e,o.firstChild)}}};var bd=function(){var t,e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,5],i=[6,9,11,17,18,20,22,23,24,26],a=[1,15],s=[1,16],o=[1,17],c=[1,18],l=[1,19],h=[1,20],u=[1,24],d=[4,6,9,11,17,18,20,22,23,24,26],p={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,s){var o=a.length-1;switch(i){case 1:return a[o-1];case 3:case 7:case 8:this.$=[];break;case 4:a[o-1].push(a[o]),this.$=a[o-1];break;case 5:case 6:this.$=a[o];break;case 11:r.setDiagramTitle(a[o].substr(6)),this.$=a[o].substr(6);break;case 12:this.$=a[o].trim(),r.setAccTitle(this.$);break;case 13:case 14:this.$=a[o].trim(),r.setAccDescription(this.$);break;case 15:r.addSection(a[o].substr(8)),this.$=a[o].substr(8);break;case 16:r.addTask(a[o-1],a[o]),this.$="task";break;case 18:r.parseDirective("%%{","open_directive");break;case 19:r.parseDirective(a[o],"type_directive");break;case 20:a[o]=a[o].trim().replace(/'/g,'"'),r.parseDirective(a[o],"arg_directive");break;case 21:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:n,7:3,12:4,26:r},{1:[3]},e(i,[2,3],{5:6}),{3:7,4:n,7:3,12:4,26:r},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:a,18:s,20:o,22:c,23:l,24:h,26:r},{1:[2,2]},{14:22,15:[1,23],29:u},e([15,29],[2,19]),e(i,[2,8],{1:[2,1]}),e(i,[2,4]),{7:21,10:25,12:4,17:a,18:s,20:o,22:c,23:l,24:h,26:r},e(i,[2,6]),e(i,[2,7]),e(i,[2,11]),{19:[1,26]},{21:[1,27]},e(i,[2,14]),e(i,[2,15]),{25:[1,28]},e(i,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},e(i,[2,5]),e(i,[2,12]),e(i,[2,13]),e(i,[2,16]),e(d,[2,9]),{14:32,29:u},{29:[2,20]},{11:[1,33]},e(d,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},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],r=[],i=[null],a=[],s=this.table,o="",c=0,l=0,h=a.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 f=u.yylloc;a.push(f);var g=u.options&&u.options.ranges;function y(){var t;return"number"!=typeof(t=r.pop()||u.lex()||1)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,b,_,x,v,k,w,C,E={};;){if(b=n[n.length-1],this.defaultActions[b]?_=this.defaultActions[b]:(null==m&&(m=y()),_=s[b]&&s[b][m]),void 0===_||!_.length||!_[0]){var T="";for(v in C=[],s[b])this.terminals_[v]&&v>2&&C.push("'"+this.terminals_[v]+"'");T=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:f,expected:C})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(_[0]){case 1:n.push(m),i.push(u.yytext),a.push(u.yylloc),n.push(_[1]),m=null,l=u.yyleng,o=u.yytext,c=u.yylineno,f=u.yylloc;break;case 2:if(k=this.productions_[_[1]][1],E.$=i[i.length-k],E._$={first_line:a[a.length-(k||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(k||1)].first_column,last_column:a[a.length-1].last_column},g&&(E._$.range=[a[a.length-(k||1)].range[0],a[a.length-1].range[1]]),void 0!==(x=this.performAction.apply(E,[o,l,c,d.yy,_[1],i,a].concat(h))))return x;k&&(n=n.slice(0,-1*k*2),i=i.slice(0,-1*k),a=a.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),i.push(E.$),a.push(E._$),w=s[n[n.length-2]][n[n.length-1]],n.push(w);break;case 3:return!0}}return!0}},f=(t={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 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-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,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=t[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+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 a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&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,r){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\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:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}},t);function g(){this.yy={}}return p.lexer=f,g.prototype=p,p.Parser=g,new g}();bd.parser=bd;const _d=bd,xd=t=>null!==t.match(/^\s*journey/);let vd="";const kd=[],wd=[],Cd=[],Ed=function(){let t=!0;for(const[e,n]of Cd.entries())Cd[e].processed,t=t&&n.processed;return t},Td={parseDirective:function(t,e,n){Cp.parseDirective(this,t,e,n)},getConfig:()=>gr().journey,clear:function(){kd.length=0,wd.length=0,vd="",Cd.length=0,Yr()},setDiagramTitle:qr,getDiagramTitle:Vr,setAccTitle:zr,getAccTitle:Ur,setAccDescription:Wr,getAccDescription:Hr,addSection:function(t){vd=t,kd.push(t)},getSections:function(){return kd},getTasks:function(){let t=Ed();let e=0;for(;!t&&e<100;)t=Ed(),e++;return wd.push(...Cd),wd},addTask:function(t,e){const n=e.substr(1).split(":");let r=0,i=[];1===n.length?(r=Number(n[0]),i=[]):(r=Number(n[0]),i=n[1].split(","));const a=i.map((t=>t.trim())),s={section:vd,type:vd,people:a,task:t,score:r};Cd.push(s)},addTaskOrg:function(t){const e={section:vd,type:vd,description:t,task:t,classes:[]};wd.push(e)},getActors:function(){return function(){const t=[];return wd.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},Sd=function(t,e){const n=t.append("rect");return 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),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},Ad=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},Ld=function(t,e){const n=e.text.replace(/<br\s*\/?>/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);const i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(n),r};let Bd=-1;const Nd=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},Dd=function(){function t(t,e,n,i,a,s,o,c){r(e.append("text").attr("x",n+a/2).attr("y",i+s/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,a,s,o,c,l){const{taskFontSize:h,taskFontFamily:u}=c,d=t.split(/<br\s*\/?>/gi);for(let p=0;p<d.length;p++){const t=p*h-h*(d.length-1)/2,c=e.append("text").attr("x",n+a/2).attr("y",i).attr("fill",l).style("text-anchor","middle").style("font-size",h).style("font-family",u);c.append("tspan").attr("x",n+a/2).attr("dy",t).text(d[p]),c.attr("y",i+s/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(c,o)}}function n(t,n,i,a,s,o,c,l){const h=n.append("switch"),u=h.append("foreignObject").attr("x",i).attr("y",a).attr("width",s).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");u.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,i,a,s,o,c,l),r(u,c)}function r(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}(),Od=Ad,Md=function(t,e,n){const r=t.append("g"),i=Nd();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=n.width,i.height=n.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,Sd(r,i),Dd(n)(e.text,r,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},n,e.colour)},Id=Ld,Fd=function(t,e,n){const r=e.x+n.width/2,i=t.append("g");Bd++;i.append("line").attr("id","task"+Bd).attr("x1",r).attr("y1",e.y).attr("x2",r).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,r=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const r=(0,o.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",r).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(i):e.score<3?function(t){const r=(0,o.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",r).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(i):i.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(i,{cx:r,cy:300+30*(5-e.score),score:e.score});const a=Nd();a.x=e.x,a.y=e.y,a.fill=e.fill,a.width=n.width,a.height=n.height,a.class="task task-type-"+e.num,a.rx=3,a.ry=3,Sd(i,a);let s=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,r={cx:s,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};Ad(i,r),s+=10})),Dd(n)(e.task,i,a.x,a.y,a.width,a.height,{class:"task"},n,e.colour)},$d=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")},Rd={};const Zd=gr().journey,Pd=Zd.leftMargin,jd={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(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){const i=gr().journey,a=this;let s=0;var o;this.sequenceItems.forEach((function(c){s++;const l=a.sequenceItems.length-s+1;a.updateVal(c,"starty",e-l*i.boxMargin,Math.min),a.updateVal(c,"stopy",r+l*i.boxMargin,Math.max),a.updateVal(jd.data,"startx",t-l*i.boxMargin,Math.min),a.updateVal(jd.data,"stopx",n+l*i.boxMargin,Math.max),"activation"!==o&&(a.updateVal(c,"startx",t-l*i.boxMargin,Math.min),a.updateVal(c,"stopx",n+l*i.boxMargin,Math.max),a.updateVal(jd.data,"starty",e-l*i.boxMargin,Math.min),a.updateVal(jd.data,"stopy",r+l*i.boxMargin,Math.max))}))},insert:function(t,e,n,r){const i=Math.min(t,n),a=Math.max(t,n),s=Math.min(e,r),o=Math.max(e,r);this.updateVal(jd.data,"startx",i,Math.min),this.updateVal(jd.data,"starty",s,Math.min),this.updateVal(jd.data,"stopx",a,Math.max),this.updateVal(jd.data,"stopy",o,Math.max),this.updateBounds(i,s,a,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Yd=Zd.sectionFills,zd=Zd.sectionColours,Ud=function(t,e,n){const r=gr().journey;let i="";const a=n+(2*r.height+r.diagramMarginY);let s=0,o="#CCC",c="black",l=0;for(const[h,u]of e.entries()){if(i!==u.section){o=Yd[s%Yd.length],l=s%Yd.length,c=zd[s%zd.length];const e={x:h*r.taskMargin+h*r.width+Pd,y:50,text:u.section,fill:o,num:l,colour:c};Md(t,e,r),i=u.section,s++}const e=u.people.reduce(((t,e)=>(Rd[e]&&(t[e]=Rd[e]),t)),{});u.x=h*r.taskMargin+h*r.width+Pd,u.y=a,u.width=r.diagramMarginX,u.height=r.diagramMarginY,u.colour=c,u.fill=o,u.num=l,u.actors=e,Fd(t,u,r),jd.insert(u.x,u.y,u.x+u.width+r.taskMargin,450)}},Wd={setConf:function(t){Object.keys(t).forEach((function(e){Zd[e]=t[e]}))},draw:function(t,e,n,r){const i=gr().journey;r.db.clear(),r.parser.parse(t+"\n");const a=gr().securityLevel;let s;"sandbox"===a&&(s=(0,o.Ys)("#i"+e));const c="sandbox"===a?(0,o.Ys)(s.nodes()[0].contentDocument.body):(0,o.Ys)("body");jd.init();const l=c.select("#"+e);$d(l);const h=r.db.getTasks(),u=r.db.getDiagramTitle(),d=r.db.getActors();for(const o in Rd)delete Rd[o];let p=0;d.forEach((t=>{Rd[t]={color:i.actorColours[p%i.actorColours.length],position:p},p++})),function(t){const e=gr().journey;let n=60;Object.keys(Rd).forEach((r=>{const i=Rd[r].color,a={cx:20,cy:n,r:7,fill:i,stroke:"#000",pos:Rd[r].position};Od(t,a);const s={x:40,y:n+7,fill:"#666",text:r,textMargin:5|e.boxTextMargin};Id(t,s),n+=20}))}(l),jd.insert(0,0,Pd,50*Object.keys(Rd).length),Ud(l,h,0);const f=jd.getBounds();u&&l.append("text").text(u).attr("x",Pd).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*i.diagramMarginY,y=Pd+f.stopx+2*i.diagramMarginX;kr(l,g,y,i.useMaxWidth),l.append("line").attr("x1",Pd).attr("y1",4*i.height).attr("x2",y-Pd-4).attr("y2",4*i.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=u?70:0;l.attr("viewBox",`${f.startx} -25 ${y} ${g+m}`),l.attr("preserveAspectRatio","xMinYMin meet"),l.attr("height",g+m+25)}};let Hd={};const qd={setConf:function(t){Hd={...Hd,...t}},draw:(t,e,n)=>{try{Bt.debug("Renering svg for syntax error\n");const t=(0,o.Ys)("#"+e),r=t.append("g");r.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"),r.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"),r.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"),r.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"),r.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"),r.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"),r.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),r.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+n),t.attr("height",100),t.attr("width",500),t.attr("viewBox","768 0 912 512")}catch(i){Bt.error("Error while rendering info diagram"),Bt.error((r=i)instanceof Error?r.message:String(r))}var r}},Vd="flowchart-elk",Gd={id:Vd,detector:(t,e)=>{var n;return!!(t.match(/^\s*flowchart-elk/)||t.match(/^\s*flowchart|graph/)&&"elk"===(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))},loader:async()=>{const{diagram:t}=await n.e(9487).then(n.bind(n,9487));return{id:Vd,diagram:t}}},Xd="timeline",Qd={id:Xd,detector:t=>null!==t.match(/^\s*timeline/),loader:async()=>{const{diagram:t}=await n.e(6316).then(n.bind(n,6316));return{id:Xd,diagram:t}}},Kd="mindmap",Jd={id:Kd,detector:t=>null!==t.match(/^\s*mindmap/),loader:async()=>{const{diagram:t}=await n.e(7724).then(n.bind(n,7724));return{id:Kd,diagram:t}}};let tp=!1;const ep=()=>{tp||(tp=!0,Mn(Gd,Qd,Jd),oi("error",{db:{clear:()=>{}},styles:Tr,renderer:qd,parser:{parser:{yy:{}},parse:()=>{}},init:()=>{}},(t=>"error"===t.toLowerCase().trim())),oi("---",{db:{clear:()=>{}},styles:Tr,renderer:qd,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 unindented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),oi("c4",{parser:Hi,db:oa,renderer:Za,styles:Ir,init:t=>{Za.setConf(t.c4)}},qi),oi("class",{parser:ja,db:as,renderer:bs,styles:Cr,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,as.clear()}},Ya),oi("classDiagram",{parser:ja,db:as,renderer:so,styles:Cr,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,as.clear()}},za),oi("er",{parser:co,db:fo,renderer:To,styles:Er},lo),oi("gantt",{parser:Ic,db:fl,renderer:ml,styles:Ar},Fc),oi("info",{parser:_l,db:kl,renderer:wl,styles:Lr},Cl),oi("pie",{parser:Tl,db:Bl,renderer:Ml,styles:Br},Sl),oi("requirement",{parser:Fl,db:zl,renderer:th,styles:Nr},$l),oi("sequence",{parser:nh,db:wh,renderer:eu,styles:Dr,init:t=>{if(t.sequence||(t.sequence={}),t.sequence.arrowMarkerAbsolute=t.arrowMarkerAbsolute,"sequenceDiagram"in t)throw new Error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.");wh.setWrap(t.wrap),eu.setConf(t.sequence)}},rh),oi("state",{parser:ru,db:Iu,renderer:Hu,styles:Or,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Iu.clear()}},iu),oi("stateDiagram",{parser:ru,db:Iu,renderer:md,styles:Or,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Iu.clear()}},au),oi("journey",{parser:_d,db:Td,renderer:Wd,styles:Mr,init:t=>{Wd.setConf(t.journey),Td.clear()}},xd),oi("flowchart",{parser:Ao,db:Tc,renderer:Oc,styles:Sr,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Lc(t.flowchart),Tc.clear(),Tc.setGen("gen-1")}},Lo),oi("flowchart-v2",{parser:Ao,db:Tc,renderer:Oc,styles:Sr,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,fr({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),Oc.setConf(t.flowchart),Tc.clear(),Tc.setGen("gen-2")}},Bo),oi("gitGraph",{parser:hi,db:Ai,renderer:zi,styles:Ui},ui))};class np{constructor(t,e){var n,r;this.txt=t,this.type="graph",this.detectTypeFailed=!1;const i=gr();this.txt=t;try{this.type=On(t,i)}catch(o){this.handleError(o,e),this.type="error",this.detectTypeFailed=!0}const a=ci(this.type);Bt.debug("Type "+this.type),this.db=a.db,null==(r=(n=this.db).clear)||r.call(n),this.renderer=a.renderer,this.parser=a.parser;const s=this.parser.parse.bind(this.parser);this.parser.parse=t=>s(function(t,e){var n;const r=t.match(Ln);if(r){const i=An(r[1],{schema:Sn});return(null==i?void 0:i.title)&&(null==(n=e.setDiagramTitle)||n.call(e,i.title)),t.slice(r[0].length)}return t}(t,this.db)),this.parser.parser.yy=this.db,a.init&&(a.init(i),Bt.info("Initialized diagram "+this.type,i)),this.txt+="\n",this.parse(this.txt,e)}parse(t,e){var n,r;if(this.detectTypeFailed)return!1;try{return t+="\n",null==(r=(n=this.db).clear)||r.call(n),this.parser.parse(t),!0}catch(i){this.handleError(i,e)}return!1}handleError(t,e){if(void 0===e)throw t;rr(t)?e(t.str,t.hash):e(t)}getParser(){return this.parser}getType(){return this.type}}const rp=(t,e)=>{const n=On(t,gr());try{ci(n)}catch(r){const i=Dn[n].loader;if(!i)throw new Error(`Diagram ${n} not found.`);return i().then((({diagram:r})=>(oi(n,r,void 0),new np(t,e))))}return new np(t,e)},ip=np,ap="graphics-document document";const sp=["graph","flowchart","flowchart-v2","stateDiagram","stateDiagram-v2"],op="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",cp="sandbox",lp="loose",hp="http://www.w3.org/1999/xlink",up="http://www.w3.org/1999/xhtml",dp=["foreignobject"],pp=["dominant-baseline"];const fp=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},gp=function(t){let e=t;return e=e.replace(/\ufb02\xb0\xb0/g,"&#"),e=e.replace(/\ufb02\xb0/g,"&"),e=e.replace(/\xb6\xdf/g,";"),e},yp=(t,e,n=[])=>`\n.${t} ${e} { ${n.join(" !important; ")} !important; }`,mp=(t,e,n,r)=>{const i=((t,e,n={})=>{var r;let i="";if(void 0!==t.themeCSS&&(i+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(i+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(i+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,At.Z)(n)&&sp.includes(e)){const e=t.htmlLabels||(null==(r=t.flowchart)?void 0:r.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in n){const r=n[t];(0,At.Z)(r.styles)||e.forEach((t=>{i+=yp(r.id,t,r.styles)})),(0,At.Z)(r.textStyles)||(i+=yp(r.id,"tspan",r.textStyles))}}return i})(t,e,n);return M(rt(`${r}{${$r(e,i,t.themeVariables)}}`),I)},bp=(t="",e,n)=>{let r=t;return n||e||(r=r.replace(/marker-end="url\(.*?#/g,'marker-end="url(#')),r=gp(r),r=r.replace(/<br>/g,"<br/>"),r},_p=(t="",e)=>`<iframe style="width:100%;height:${e?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`,xp=(t,e,n,r,i)=>{const a=t.append("div");a.attr("id",n),r&&a.attr("style",r);const s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return i&&s.attr("xmlns:xlink",i),s.append("g"),t};function vp(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const kp=(t,e,n,r)=>{var i,a,s;null==(i=t.getElementById(e))||i.remove(),null==(a=t.getElementById(n))||a.remove(),null==(s=t.getElementById(r))||s.remove()};function wp(t,e,n,r){var i,a;a=t,(i=e).attr("role",ap),(0,At.Z)(a)||i.attr("aria-roledescription",a),function(t,e,n,r){if(void 0!==t.insert&&(e||n)){if(n){const e="chart-desc-"+r;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(n)}if(e){const n="chart-title-"+r;t.attr("aria-labelledby",n),t.insert("title",":first-child").attr("id",n).text(e)}}}(e,n,r,e.attr("id"))}const Cp=Object.freeze({render:function(t,e,n,r){var i,a,s,c;ep(),br();const l=ar.detectInit(e);l&&(er(l),mr(l));const u=gr();Bt.debug(u),e.length>((null==u?void 0:u.maxTextSize)??5e4)&&(e=op),e=e.replace(/\r\n?/g,"\n");const d="#"+t,p="i"+t,f="#"+p,g="d"+t,y="#"+g;let m=(0,o.Ys)("body");const b=u.securityLevel===cp,_=u.securityLevel===lp,x=u.fontFamily;if(void 0!==r){if(r&&(r.innerHTML=""),b){const t=vp((0,o.Ys)(r),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)(r);xp(m,t,g,`font-family: ${x}`,hp)}else{if(kp(document,t,g,p),b){const t=vp((0,o.Ys)("body"),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)("body");xp(m,t,g)}let v,k;e=fp(e);try{if(v=rp(e),"then"in v)throw new Error("Diagram is a promise. Use renderAsync.")}catch(O){v=new ip("error"),k=O}const w=m.select(y).node(),C=v.type,E=w.firstChild,T=E.firstChild,S=sp.includes(C)?v.renderer.getClasses(e,v):{},A=mp(u,C,S,d),L=document.createElement("style");L.innerHTML=A,E.insertBefore(L,T);try{v.renderer.draw(e,t,sr,v)}catch(M){throw qd.draw(e,t,sr),M}wp(C,m.select(`${y} svg`),null==(a=(i=v.db).getAccTitle)?void 0:a.call(i),null==(c=(s=v.db).getAccDescription)?void 0:c.call(s)),m.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",up);let B=m.select(y).node().innerHTML;if(Bt.debug("config.arrowMarkerAbsolute",u.arrowMarkerAbsolute),B=bp(B,b,Zt(u.arrowMarkerAbsolute)),b){const t=m.select(y+" svg").node();B=_p(B,t)}else _||(B=h().sanitize(B,{ADD_TAGS:dp,ADD_ATTR:pp}));if(void 0!==n)switch(C){case"flowchart":case"flowchart-v2":n(B,Tc.bindFunctions);break;case"gantt":n(B,fl.bindFunctions);break;case"class":case"classDiagram":n(B,as.bindFunctions);break;default:n(B)}else Bt.debug("CB = undefined!");Eh();const N=b?f:y,D=(0,o.Ys)(N).node();if(D&&"remove"in D&&D.remove(),k)throw k;return B},renderAsync:async function(t,e,n,r){var i,a,s,c;ep(),br();const l=ar.detectInit(e);l&&(er(l),mr(l));const u=gr();Bt.debug(u),e.length>((null==u?void 0:u.maxTextSize)??5e4)&&(e=op),e=e.replace(/\r\n?/g,"\n");const d="#"+t,p="i"+t,f="#"+p,g="d"+t,y="#"+g;let m=(0,o.Ys)("body");const b=u.securityLevel===cp,_=u.securityLevel===lp,x=u.fontFamily;if(void 0!==r){if(r&&(r.innerHTML=""),b){const t=vp((0,o.Ys)(r),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)(r);xp(m,t,g,`font-family: ${x}`,hp)}else{if(kp(document,t,g,p),b){const t=vp((0,o.Ys)("body"),p);m=(0,o.Ys)(t.nodes()[0].contentDocument.body),m.node().style.margin=0}else m=(0,o.Ys)("body");xp(m,t,g)}let v,k;e=fp(e);try{v=await rp(e)}catch(O){v=new ip("error"),k=O}const w=m.select(y).node(),C=v.type,E=w.firstChild,T=E.firstChild,S=sp.includes(C)?v.renderer.getClasses(e,v):{},A=mp(u,C,S,d),L=document.createElement("style");L.innerHTML=A,E.insertBefore(L,T);try{await v.renderer.draw(e,t,sr,v)}catch(M){throw qd.draw(e,t,sr),M}wp(C,m.select(`${y} svg`),null==(a=(i=v.db).getAccTitle)?void 0:a.call(i),null==(c=(s=v.db).getAccDescription)?void 0:c.call(s)),m.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",up);let B=m.select(y).node().innerHTML;if(Bt.debug("config.arrowMarkerAbsolute",u.arrowMarkerAbsolute),B=bp(B,b,Zt(u.arrowMarkerAbsolute)),b){const t=m.select(y+" svg").node();B=_p(B,t)}else _||(B=h().sanitize(B,{ADD_TAGS:dp,ADD_ATTR:pp}));if(void 0!==n)switch(C){case"flowchart":case"flowchart-v2":n(B,Tc.bindFunctions);break;case"gantt":n(B,fl.bindFunctions);break;case"class":case"classDiagram":n(B,as.bindFunctions);break;default:n(B)}else Bt.debug("CB = undefined!");Eh();const N=b?f:y,D=(0,o.Ys)(N).node();if(D&&"remove"in D&&D.remove(),k)throw k;return B},parse:function(t,e){return ep(),new ip(t,e).parse(t,e)},parseAsync:async function(t,e){return ep(),(await rp(t,e)).parse(t,e)},parseDirective:Kr,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),cr=$n({},t),(null==t?void 0:t.theme)&&t.theme in Xt?t.themeVariables=Xt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Xt.default.getThemeVariables(t.themeVariables));const n="object"==typeof t?(t=>(lr=$n({},or),lr=$n(lr,t),t.theme&&Xt[t.theme]&&(lr.themeVariables=Xt[t.theme].getThemeVariables(t.themeVariables)),dr(lr,hr),lr))(t):pr();Nt(n.logLevel),ep()},getConfig:gr,setConfig:fr,getSiteConfig:pr,updateSiteConfig:t=>(lr=$n(lr,t),dr(lr,hr),lr),reset:()=>{br()},globalReset:()=>{br(or)},defaultConfig:or});Nt(gr().logLevel),br(gr());const Ep=(t,e,n)=>{Bt.warn(t),rr(t)?(n&&n(t.str,t.hash),e.push({...t,message:t.str,error:t})):(n&&n(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Tp=async function(t,e,n){const i=Cp.getConfig();let a;if(t&&(Np.sequenceConfig=t),Bt.debug((n?"":"No ")+"Callback function found"),void 0===e)a=document.querySelectorAll(".mermaid");else if("string"==typeof e)a=document.querySelectorAll(e);else if(e instanceof HTMLElement)a=[e];else{if(!(e instanceof NodeList))throw new Error("Invalid argument nodes for mermaid.init");a=e}Bt.debug(`Found ${a.length} diagrams`),void 0!==(null==t?void 0:t.startOnLoad)&&(Bt.debug("Start On Load: "+(null==t?void 0:t.startOnLoad)),Cp.updateSiteConfig({startOnLoad:null==t?void 0:t.startOnLoad}));const s=new ar.initIdGenerator(i.deterministicIds,i.deterministicIDSeed);let o;const c=[];for(const h of Array.from(a)){if(Bt.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const t=`mermaid-${s.next()}`;o=h.innerHTML,o=r(ar.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,"<br/>");const e=ar.detectInit(o);e&&Bt.debug("Detected early reinit: ",e);try{await Cp.renderAsync(t,o,((e,r)=>{h.innerHTML=e,void 0!==n&&n(t),r&&r(h)}),h)}catch(l){Ep(l,c,Np.parseError)}}if(c.length>0)throw c[0]},Sp=function(){if(Np.startOnLoad){const{startOnLoad:t}=Cp.getConfig();t&&Np.init().catch((t=>Bt.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",Sp,!1);const Ap=[];let Lp=!1;const Bp=async()=>{if(!Lp){for(Lp=!0;Ap.length>0;){const e=Ap.shift();if(e)try{await e()}catch(t){Bt.error("Error executing queue",t)}}Lp=!1}},Np={startOnLoad:!0,diagrams:{},mermaidAPI:Cp,parse:t=>Cp.parse(t,Np.parseError),parseAsync:t=>new Promise(((e,n)=>{Ap.push((()=>new Promise(((r,i)=>{Cp.parseAsync(t,Np.parseError).then((t=>{r(t),e(t)}),(t=>{Bt.error("Error parsing",t),i(t),n(t)}))})))),Bp().catch(n)})),render:Cp.render,renderAsync:(t,e,n,r)=>new Promise(((i,a)=>{Ap.push((()=>new Promise(((s,o)=>{Cp.renderAsync(t,e,n,r).then((t=>{s(t),i(t)}),(t=>{Bt.error("Error parsing",t),o(t),a(t)}))})))),Bp().catch(a)})),init:async function(t,e,n){try{await Tp(t,e,n)}catch(r){Bt.warn("Syntax Error rendering"),rr(r)&&Bt.warn(r.str),Np.parseError&&Np.parseError(r)}},initThrowsErrors:function(t,e,n){const i=Cp.getConfig();let a;if(t&&(Np.sequenceConfig=t),Bt.debug((n?"":"No ")+"Callback function found"),void 0===e)a=document.querySelectorAll(".mermaid");else if("string"==typeof e)a=document.querySelectorAll(e);else if(e instanceof HTMLElement)a=[e];else{if(!(e instanceof NodeList))throw new Error("Invalid argument nodes for mermaid.init");a=e}Bt.debug(`Found ${a.length} diagrams`),void 0!==(null==t?void 0:t.startOnLoad)&&(Bt.debug("Start On Load: "+(null==t?void 0:t.startOnLoad)),Cp.updateSiteConfig({startOnLoad:null==t?void 0:t.startOnLoad}));const s=new ar.initIdGenerator(i.deterministicIds,i.deterministicIDSeed);let o;const c=[];for(const h of Array.from(a)){if(Bt.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const t=`mermaid-${s.next()}`;o=h.innerHTML,o=r(ar.entityDecode(o)).trim().replace(/<br\s*\/?>/gi,"<br/>");const e=ar.detectInit(o);e&&Bt.debug("Detected early reinit: ",e);try{Cp.render(t,o,((e,r)=>{h.innerHTML=e,void 0!==n&&n(t),r&&r(h)}),h)}catch(l){Ep(l,c,Np.parseError)}}if(c.length>0)throw c[0]},initThrowsErrorsAsync:Tp,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{e?Mn(...t):await(async(...t)=>{Bt.debug(`Loading ${t.length} external diagrams`);const e=(await Promise.allSettled(t.map((async({id:t,detector:e,loader:n})=>{const{diagram:r}=await n();oi(t,r,e)})))).filter((t=>"rejected"===t.status));if(e.length>0){Bt.error(`Failed to load ${e.length} external diagrams`);for(const t of e)Bt.error(t);throw new Error(`Failed to load ${e.length} external diagrams`)}})(...t)},initialize:function(t){Cp.initialize(t)},parseError:void 0,contentLoaded:Sp,setParseErrorHandler:function(t){Np.parseError=t}}},7594:(t,e)=>{function n(t){let e,n=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,i,a]=e;if(r&&a){r=parseInt(r),a=parseInt(a);const t=r<a?1:-1;"-"!==i&&".."!==i&&"\u2025"!==i||(a+=t);for(let e=r;e!==a;e+=t)n.push(e)}}return n}e.default=n,t.exports=n},9373:(t,e,n)=>{"use strict";function r(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n<r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n<i||void 0===n&&i>=i)&&(n=i)}return n}function i(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function a(t){return t}n.d(e,{Nb1:()=>so,LLu:()=>b,F5q:()=>m,$0Z:()=>xo,Dts:()=>ko,WQY:()=>Co,qpX:()=>To,u93:()=>So,tFB:()=>Lo,YY7:()=>Do,OvA:()=>Mo,dCK:()=>Fo,zgE:()=>Zo,fGX:()=>jo,$m7:()=>zo,c_6:()=>lo,fxm:()=>Wo,FdL:()=>Jo,ak_:()=>tc,SxZ:()=>rc,eA_:()=>ac,jsv:()=>oc,iJ:()=>sc,JHv:()=>gr,jvg:()=>po,Fp7:()=>r,VV$:()=>i,ve8:()=>yo,BYU:()=>ci,PKp:()=>gi,Xf:()=>Ns,Ys:()=>Ds,td_:()=>Os,YPS:()=>Vn,rr1:()=>Di,i$Z:()=>ha,WQD:()=>Bi,Z_i:()=>Ai,F0B:()=>Qi,NGh:()=>Fi});var s=1,o=2,c=3,l=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function p(t){return e=>+t(e)}function f(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function g(){return!this.__axis}function y(t,e){var n=[],r=null,i=null,y=6,m=6,b=3,_="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,x=t===s||t===l?-1:1,v=t===l||t===o?"x":"y",k=t===s||t===c?u:d;function w(u){var d=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,w=null==i?e.tickFormat?e.tickFormat.apply(e,n):a:i,C=Math.max(y,0)+b,E=e.range(),T=+E[0]+_,S=+E[E.length-1]+_,A=(e.bandwidth?f:p)(e.copy(),_),L=u.selection?u.selection():u,B=L.selectAll(".domain").data([null]),N=L.selectAll(".tick").data(d,e).order(),D=N.exit(),O=N.enter().append("g").attr("class","tick"),M=N.select("line"),I=N.select("text");B=B.merge(B.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),N=N.merge(O),M=M.merge(O.append("line").attr("stroke","currentColor").attr(v+"2",x*y)),I=I.merge(O.append("text").attr("fill","currentColor").attr(v,x*C).attr("dy",t===s?"0em":t===c?"0.71em":"0.32em")),u!==L&&(B=B.transition(u),N=N.transition(u),M=M.transition(u),I=I.transition(u),D=D.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=A(t))?k(t+_):this.getAttribute("transform")})),O.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return k((e&&isFinite(e=e(t))?e:A(t))+_)}))),D.remove(),B.attr("d",t===l||t===o?m?"M"+x*m+","+T+"H"+_+"V"+S+"H"+x*m:"M"+_+","+T+"V"+S:m?"M"+T+","+x*m+"V"+_+"H"+S+"V"+x*m:"M"+T+","+_+"H"+S),N.attr("opacity",1).attr("transform",(function(t){return k(A(t)+_)})),M.attr(v+"2",x*y),I.attr(v,x*C).text(w),L.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===o?"start":t===l?"end":"middle"),L.each((function(){this.__axis=A}))}return w.scale=function(t){return arguments.length?(e=t,w):e},w.ticks=function(){return n=Array.from(arguments),w},w.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),w):n.slice()},w.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),w):r&&r.slice()},w.tickFormat=function(t){return arguments.length?(i=t,w):i},w.tickSize=function(t){return arguments.length?(y=m=+t,w):y},w.tickSizeInner=function(t){return arguments.length?(y=+t,w):y},w.tickSizeOuter=function(t){return arguments.length?(m=+t,w):m},w.tickPadding=function(t){return arguments.length?(b=+t,w):b},w.offset=function(t){return arguments.length?(_=+t,w):_},w}function m(t){return y(s,t)}function b(t){return y(c,t)}function _(){}function x(t){return null==t?_:function(){return this.querySelector(t)}}function v(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function k(){return[]}function w(t){return null==t?k:function(){return this.querySelectorAll(t)}}function C(t){return function(){return this.matches(t)}}function E(t){return function(e){return e.matches(t)}}var T=Array.prototype.find;function S(){return this.firstElementChild}var A=Array.prototype.filter;function L(){return Array.from(this.children)}function B(t){return new Array(t.length)}function N(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function D(t,e,n,r,i,a){for(var s,o=0,c=e.length,l=a.length;o<l;++o)(s=e[o])?(s.__data__=a[o],r[o]=s):n[o]=new N(t,a[o]);for(;o<c;++o)(s=e[o])&&(i[o]=s)}function O(t,e,n,r,i,a,s){var o,c,l,h=new Map,u=e.length,d=a.length,p=new Array(u);for(o=0;o<u;++o)(c=e[o])&&(p[o]=l=s.call(c,c.__data__,o,e)+"",h.has(l)?i[o]=c:h.set(l,c));for(o=0;o<d;++o)l=s.call(t,a[o],o,a)+"",(c=h.get(l))?(r[o]=c,c.__data__=a[o],h.delete(l)):n[o]=new N(t,a[o]);for(o=0;o<u;++o)(c=e[o])&&h.get(p[o])===c&&(i[o]=c)}function M(t){return t.__data__}function I(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function F(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}N.prototype={constructor:N,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 $="http://www.w3.org/1999/xhtml";const R={svg:"http://www.w3.org/2000/svg",xhtml:$,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Z(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),R.hasOwnProperty(e)?{space:R[e],local:t}:t}function P(t){return function(){this.removeAttribute(t)}}function j(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Y(t,e){return function(){this.setAttribute(t,e)}}function z(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function U(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function W(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function H(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function q(t){return function(){this.style.removeProperty(t)}}function V(t,e,n){return function(){this.style.setProperty(t,e,n)}}function G(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function X(t,e){return t.style.getPropertyValue(e)||H(t).getComputedStyle(t,null).getPropertyValue(e)}function Q(t){return function(){delete this[t]}}function K(t,e){return function(){this[t]=e}}function J(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new nt(t)}function nt(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var n=et(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function it(t,e){for(var n=et(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function at(t){return function(){rt(this,t)}}function st(t){return function(){it(this,t)}}function ot(t,e){return function(){(e.apply(this,arguments)?rt:it)(this,t)}}function ct(){this.textContent=""}function lt(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function pt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function ft(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function yt(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===$&&e.documentElement.namespaceURI===$?e.createElement(t):e.createElementNS(n,t)}}function mt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function bt(t){var e=Z(t);return(e.local?mt:yt)(e)}function _t(){return null}function xt(){var t=this.parentNode;t&&t.removeChild(this)}function vt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function wt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.options);++i?e.length=i:delete this.__on}}}function Ct(t,e,n){return function(){var r,i=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(i)for(var s=0,o=i.length;s<o;++s)if((r=i[s]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=a,r.options=n),void(r.value=e);this.addEventListener(t.type,a,n),r={type:t.type,name:t.name,value:e,listener:a,options:n},i?i.push(r):this.__on=[r]}}function Et(t,e,n){var r=H(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function Tt(t,e){return function(){return Et(this,t,e)}}function St(t,e){return function(){return Et(this,t,e.apply(this,arguments))}}nt.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var At=[null];function Lt(t,e){this._groups=t,this._parents=e}function Bt(){return new Lt([[document.documentElement]],At)}Lt.prototype=Bt.prototype={constructor:Lt,select:function(t){"function"!=typeof t&&(t=x(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,s,o=e[i],c=o.length,l=r[i]=new Array(c),h=0;h<c;++h)(a=o[h])&&(s=t.call(a,a.__data__,h,o))&&("__data__"in a&&(s.__data__=a.__data__),l[h]=s);return new Lt(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return v(t.apply(this,arguments))}}(t):w(t);for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var s,o=e[a],c=o.length,l=0;l<c;++l)(s=o[l])&&(r.push(t.call(s,s.__data__,l,o)),i.push(s));return new Lt(r,i)},selectChild:function(t){return this.select(null==t?S:function(t){return function(){return T.call(this.children,t)}}("function"==typeof t?t:E(t)))},selectChildren:function(t){return this.selectAll(null==t?L:function(t){return function(){return A.call(this.children,t)}}("function"==typeof t?t:E(t)))},filter:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,s=e[i],o=s.length,c=r[i]=[],l=0;l<o;++l)(a=s[l])&&t.call(a,a.__data__,l,s)&&c.push(a);return new Lt(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,M);var n,r=e?O:D,i=this._parents,a=this._groups;"function"!=typeof t&&(n=t,t=function(){return n});for(var s=a.length,o=new Array(s),c=new Array(s),l=new Array(s),h=0;h<s;++h){var u=i[h],d=a[h],p=d.length,f=I(t.call(u,u&&u.__data__,h,i)),g=f.length,y=c[h]=new Array(g),m=o[h]=new Array(g);r(u,d,y,m,l[h]=new Array(p),f,e);for(var b,_,x=0,v=0;x<g;++x)if(b=y[x]){for(x>=v&&(v=x+1);!(_=m[v])&&++v<g;);b._next=_||null}}return(o=new Lt(o,i))._enter=c,o._exit=l,o},enter:function(){return new Lt(this._enter||this._groups.map(B),this._parents)},exit:function(){return new Lt(this._exit||this._groups.map(B),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(i=e(i))&&(i=i.selection()),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,a=r.length,s=Math.min(i,a),o=new Array(i),c=0;c<s;++c)for(var l,h=n[c],u=r[c],d=h.length,p=o[c]=new Array(d),f=0;f<d;++f)(l=h[f]||u[f])&&(p[f]=l);for(;c<i;++c)o[c]=n[c];return new Lt(o,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,s=i[a];--a>=0;)(r=i[a])&&(s&&4^r.compareDocumentPosition(s)&&s.parentNode.insertBefore(r,s),s=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=F);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var s,o=n[a],c=o.length,l=i[a]=new Array(c),h=0;h<c;++h)(s=o[h])&&(l[h]=s);l.sort(e)}return new Lt(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var s=r[i];if(s)return s}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],s=0,o=a.length;s<o;++s)(i=a[s])&&t.call(i,i.__data__,s,a);return this},attr:function(t,e){var n=Z(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?j:P:"function"==typeof e?n.local?W:U:n.local?z:Y)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?q:"function"==typeof e?G:V)(t,e,null==n?"":n)):X(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Q:"function"==typeof e?J:K)(t,e)):this.node()[t]},classed:function(t,e){var n=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?ot:e?at:st)(n,e))},text:function(t){return arguments.length?this.each(null==t?ct:("function"==typeof t?ht:lt)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?pt:dt)(t)):this.node().innerHTML},raise:function(){return this.each(ft)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:bt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:bt(t),r=null==e?_t:"function"==typeof e?e:x(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(xt)},clone:function(t){return this.select(t?kt:vt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}(t+""),s=a.length;if(!(arguments.length<2)){for(o=e?Ct:wt,r=0;r<s;++r)this.each(o(a[r],e,n));return this}var o=this.node().__on;if(o)for(var c,l=0,h=o.length;l<h;++l)for(r=0,c=o[l];r<s;++r)if((i=a[r]).type===c.type&&i.name===c.name)return c.value},dispatch:function(t,e){return this.each(("function"==typeof e?St:Tt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,i=t[e],a=0,s=i.length;a<s;++a)(r=i[a])&&(yield r)}};const Nt=Bt;var Dt={value:()=>{}};function Ot(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Mt(r)}function Mt(t){this._=t}function It(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function Ft(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=Dt,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}Mt.prototype=Ot.prototype={constructor:Mt,on:function(t,e){var n,r,i=this._,a=(r=i,(t+"").trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),s=-1,o=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++s<o;)if(n=(t=a[s]).type)i[n]=Ft(i[n],t.name,e);else if(null==e)for(n in i)i[n]=Ft(i[n],t.name,null);return this}for(;++s<o;)if((n=(t=a[s]).type)&&(n=It(i[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new Mt(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};const $t=Ot;var Rt,Zt,Pt=0,jt=0,Yt=0,zt=1e3,Ut=0,Wt=0,Ht=0,qt="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Wt||(Vt(Xt),Wt=qt.now()+Ht)}function Xt(){Wt=0}function Qt(){this._call=this._time=this._next=null}function Kt(t,e,n){var r=new Qt;return r.restart(t,e,n),r}function Jt(){Wt=(Ut=qt.now())+Ht,Pt=jt=0;try{!function(){Gt(),++Pt;for(var t,e=Rt;e;)(t=Wt-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Pt}()}finally{Pt=0,function(){var t,e,n=Rt,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Rt=e);Zt=t,ee(r)}(),Wt=0}}function te(){var t=qt.now(),e=t-Ut;e>zt&&(Ht-=e,Ut=t)}function ee(t){Pt||(jt&&(jt=clearTimeout(jt)),t-Wt>24?(t<1/0&&(jt=setTimeout(Jt,t-qt.now()-Ht)),Yt&&(Yt=clearInterval(Yt))):(Yt||(Ut=qt.now(),Yt=setInterval(te,zt)),Pt=1,Vt(Jt)))}function ne(t,e,n){var r=new Qt;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Qt.prototype=Kt.prototype={constructor:Qt,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Gt():+n)+(null==e?0:+e),this._next||Zt===this||(Zt?Zt._next=this:Rt=this,Zt=this),this._call=t,this._time=n,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=$t("start","end","cancel","interrupt"),ie=[],ae=0,se=1,oe=2,ce=3,le=4,he=5,ue=6;function de(t,e,n,r,i,a){var s=t.__transition;if(s){if(n in s)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(t){n.state=se,n.timer.restart(s,n.delay,n.time),n.delay<=t&&s(t-n.delay)}function s(a){var l,h,u,d;if(n.state!==se)return c();for(l in i)if((d=i[l]).name===n.name){if(d.state===ce)return ne(s);d.state===le?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[l]):+l<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete i[l])}if(ne((function(){n.state===ce&&(n.state=le,n.timer.restart(o,n.delay,n.time),o(a))})),n.state=oe,n.on.call("start",t,t.__data__,n.index,n.group),n.state===oe){for(n.state=ce,r=new Array(u=n.tween.length),l=0,h=-1;l<u;++l)(d=n.tween[l].value.call(t,t.__data__,n.index,n.group))&&(r[++h]=d);r.length=h+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(c),n.state=he,1),a=-1,s=r.length;++a<s;)r[a].call(t,i);n.state===he&&(n.on.call("end",t,t.__data__,n.index,n.group),c())}function c(){for(var r in n.state=ue,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Kt(a,0,n.time)}(t,n,{name:e,index:r,group:i,on:re,tween:ie,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:ae})}function pe(t,e){var n=ge(t,e);if(n.state>ae)throw new Error("too late; already scheduled");return n}function fe(t,e){var n=ge(t,e);if(n.state>ce)throw new Error("too late; already running");return n}function ge(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function ye(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var me,be=180/Math.PI,_e={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function xe(t,e,n,r,i,a){var s,o,c;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(o=Math.sqrt(n*n+r*r))&&(n/=o,r/=o,c/=o),t*r<e*n&&(t=-t,e=-e,c=-c,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*be,skewX:Math.atan(c)*be,scaleX:s,scaleY:o}}function ve(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,s){var o=[],c=[];return a=t(a),s=t(s),function(t,r,i,a,s,o){if(t!==i||r!==a){var c=s.push("translate(",null,e,null,n);o.push({i:c-4,x:ye(t,i)},{i:c-2,x:ye(r,a)})}else(i||a)&&s.push("translate("+i+e+a+n)}(a.translateX,a.translateY,s.translateX,s.translateY,o,c),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:ye(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,s.rotate,o,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:ye(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,s.skewX,o,c),function(t,e,n,r,a,s){if(t!==n||e!==r){var o=a.push(i(a)+"scale(",null,",",null,")");s.push({i:o-4,x:ye(t,n)},{i:o-2,x:ye(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,s.scaleX,s.scaleY,o,c),a=s=null,function(t){for(var e,n=-1,r=c.length;++n<r;)o[(e=c[n]).i]=e.x(t);return o.join("")}}}var ke=ve((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?_e:xe(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),we=ve((function(t){return null==t?_e:(me||(me=document.createElementNS("http://www.w3.org/2000/svg","g")),me.setAttribute("transform",t),(t=me.transform.baseVal.consolidate())?xe((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):_e)}),", ",")",")");function Ce(t,e){var n,r;return function(){var i=fe(this,t),a=i.tween;if(a!==n)for(var s=0,o=(r=n=a).length;s<o;++s)if(r[s].name===e){(r=r.slice()).splice(s,1);break}i.tween=r}}function Ee(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=fe(this,t),s=a.tween;if(s!==r){i=(r=s).slice();for(var o={name:e,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===e){i[c]=o;break}c===l&&i.push(o)}a.tween=i}}function Te(t,e,n){var r=t._id;return t.each((function(){var t=fe(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Se(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Ae(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Le(){}var Be=.7,Ne=1/Be,De="\\s*([+-]?\\d+)\\s*",Oe="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Me="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Ie=/^#([0-9a-f]{3,8})$/,Fe=new RegExp(`^rgb\\(${De},${De},${De}\\)$`),$e=new RegExp(`^rgb\\(${Me},${Me},${Me}\\)$`),Re=new RegExp(`^rgba\\(${De},${De},${De},${Oe}\\)$`),Ze=new RegExp(`^rgba\\(${Me},${Me},${Me},${Oe}\\)$`),Pe=new RegExp(`^hsl\\(${Oe},${Me},${Me}\\)$`),je=new RegExp(`^hsla\\(${Oe},${Me},${Me},${Oe}\\)$`),Ye={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function ze(){return this.rgb().formatHex()}function Ue(){return this.rgb().formatRgb()}function We(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=Ie.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?He(e):3===n?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?qe(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?qe(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=Fe.exec(t))?new Xe(e[1],e[2],e[3],1):(e=$e.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Re.exec(t))?qe(e[1],e[2],e[3],e[4]):(e=Ze.exec(t))?qe(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Pe.exec(t))?nn(e[1],e[2]/100,e[3]/100,1):(e=je.exec(t))?nn(e[1],e[2]/100,e[3]/100,e[4]):Ye.hasOwnProperty(t)?He(Ye[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function He(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function qe(t,e,n,r){return r<=0&&(t=e=n=NaN),new Xe(t,e,n,r)}function Ve(t){return t instanceof Le||(t=We(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,n,r){return 1===arguments.length?Ve(t):new Xe(t,e,n,null==r?1:r)}function Xe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Qe(){return`#${en(this.r)}${en(this.g)}${en(this.b)}`}function Ke(){const t=Je(this.opacity);return`${1===t?"rgb(":"rgba("}${tn(this.r)}, ${tn(this.g)}, ${tn(this.b)}${1===t?")":`, ${t})`}`}function Je(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function tn(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function en(t){return((t=tn(t))<16?"0":"")+t.toString(16)}function nn(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new an(t,e,n,r)}function rn(t){if(t instanceof an)return new an(t.h,t.s,t.l,t.opacity);if(t instanceof Le||(t=We(t)),!t)return new an;if(t instanceof an)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),s=NaN,o=a-i,c=(a+i)/2;return o?(s=e===a?(n-r)/o+6*(n<r):n===a?(r-e)/o+2:(e-n)/o+4,o/=c<.5?a+i:2-a-i,s*=60):o=c>0&&c<1?0:s,new an(s,o,c,t.opacity)}function an(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function sn(t){return(t=(t||0)%360)<0?t+360:t}function on(t){return Math.max(0,Math.min(1,t||0))}function cn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function ln(t,e,n,r,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*n+(1+3*t+3*a-3*s)*r+s*i)/6}Se(Le,We,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ze,formatHex:ze,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return rn(this).formatHsl()},formatRgb:Ue,toString:Ue}),Se(Xe,Ge,Ae(Le,{brighter(t){return t=null==t?Ne:Math.pow(Ne,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Be:Math.pow(Be,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(tn(this.r),tn(this.g),tn(this.b),Je(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:Qe,formatHex:Qe,formatHex8:function(){return`#${en(this.r)}${en(this.g)}${en(this.b)}${en(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Ke,toString:Ke})),Se(an,(function(t,e,n,r){return 1===arguments.length?rn(t):new an(t,e,n,null==r?1:r)}),Ae(Le,{brighter(t){return t=null==t?Ne:Math.pow(Ne,t),new an(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Be:Math.pow(Be,t),new an(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,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Xe(cn(t>=240?t-240:t+120,i,r),cn(t,i,r),cn(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new an(sn(this.h),on(this.s),on(this.l),Je(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=Je(this.opacity);return`${1===t?"hsl(":"hsla("}${sn(this.h)}, ${100*on(this.s)}%, ${100*on(this.l)}%${1===t?")":`, ${t})`}`}}));const hn=t=>()=>t;function un(t,e){return function(n){return t+n*e}}function dn(t){return 1==(t=+t)?pn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):hn(isNaN(e)?n:e)}}function pn(t,e){var n=e-t;return n?un(t,n):hn(isNaN(t)?e:t)}const fn=function t(e){var n=dn(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),s=pn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=s(e),t+""}}return r.gamma=t,r}(1);function gn(t){return function(e){var n,r,i=e.length,a=new Array(i),s=new Array(i),o=new Array(i);for(n=0;n<i;++n)r=Ge(e[n]),a[n]=r.r||0,s[n]=r.g||0,o[n]=r.b||0;return a=t(a),s=t(s),o=t(o),r.opacity=1,function(t){return r.r=a(t),r.g=s(t),r.b=o(t),r+""}}}gn((function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],s=r>0?t[r-1]:2*i-a,o=r<e-1?t[r+2]:2*a-i;return ln((n-r/e)*e,s,i,a,o)}})),gn((function(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],a=t[r%e],s=t[(r+1)%e],o=t[(r+2)%e];return ln((n-r/e)*e,i,a,s,o)}}));var yn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mn=new RegExp(yn.source,"g");function bn(t,e){var n,r,i,a=yn.lastIndex=mn.lastIndex=0,s=-1,o=[],c=[];for(t+="",e+="";(n=yn.exec(t))&&(r=mn.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),o[s]?o[s]+=i:o[++s]=i),(n=n[0])===(r=r[0])?o[s]?o[s]+=r:o[++s]=r:(o[++s]=null,c.push({i:s,x:ye(n,r)})),a=mn.lastIndex;return a<e.length&&(i=e.slice(a),o[s]?o[s]+=i:o[++s]=i),o.length<2?c[0]?function(t){return function(e){return t(e)+""}}(c[0].x):function(t){return function(){return t}}(e):(e=c.length,function(t){for(var n,r=0;r<e;++r)o[(n=c[r]).i]=n.x(t);return o.join("")})}function _n(t,e){var n;return("number"==typeof e?ye:e instanceof We?fn:(n=We(e))?(e=n,fn):bn)(t,e)}function xn(t){return function(){this.removeAttribute(t)}}function vn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function kn(t,e,n){var r,i,a=n+"";return function(){var s=this.getAttribute(t);return s===a?null:s===r?i:i=e(r=s,n)}}function wn(t,e,n){var r,i,a=n+"";return function(){var s=this.getAttributeNS(t.space,t.local);return s===a?null:s===r?i:i=e(r=s,n)}}function Cn(t,e,n){var r,i,a;return function(){var s,o,c=n(this);if(null!=c)return(s=this.getAttribute(t))===(o=c+"")?null:s===r&&o===i?a:(i=o,a=e(r=s,c));this.removeAttribute(t)}}function En(t,e,n){var r,i,a;return function(){var s,o,c=n(this);if(null!=c)return(s=this.getAttributeNS(t.space,t.local))===(o=c+"")?null:s===r&&o===i?a:(i=o,a=e(r=s,c));this.removeAttributeNS(t.space,t.local)}}function Tn(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}(t,i)),n}return i._value=e,i}function Sn(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}(t,i)),n}return i._value=e,i}function An(t,e){return function(){pe(this,t).delay=+e.apply(this,arguments)}}function Ln(t,e){return e=+e,function(){pe(this,t).delay=e}}function Bn(t,e){return function(){fe(this,t).duration=+e.apply(this,arguments)}}function Nn(t,e){return e=+e,function(){fe(this,t).duration=e}}var Dn=Nt.prototype.constructor;function On(t){return function(){this.style.removeProperty(t)}}var Mn=0;function In(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Fn(){return++Mn}var $n=Nt.prototype;In.prototype=function(t){return Nt().transition(t)}.prototype={constructor:In,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=x(t));for(var r=this._groups,i=r.length,a=new Array(i),s=0;s<i;++s)for(var o,c,l=r[s],h=l.length,u=a[s]=new Array(h),d=0;d<h;++d)(o=l[d])&&(c=t.call(o,o.__data__,d,l))&&("__data__"in o&&(c.__data__=o.__data__),u[d]=c,de(u[d],e,n,d,u,ge(o,n)));return new In(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=w(t));for(var r=this._groups,i=r.length,a=[],s=[],o=0;o<i;++o)for(var c,l=r[o],h=l.length,u=0;u<h;++u)if(c=l[u]){for(var d,p=t.call(c,c.__data__,u,l),f=ge(c,n),g=0,y=p.length;g<y;++g)(d=p[g])&&de(d,e,n,g,p,f);a.push(p),s.push(c)}return new In(a,s,e,n)},selectChild:$n.selectChild,selectChildren:$n.selectChildren,filter:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,s=e[i],o=s.length,c=r[i]=[],l=0;l<o;++l)(a=s[l])&&t.call(a,a.__data__,l,s)&&c.push(a);return new In(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),s=new Array(r),o=0;o<a;++o)for(var c,l=e[o],h=n[o],u=l.length,d=s[o]=new Array(u),p=0;p<u;++p)(c=l[p]||h[p])&&(d[p]=c);for(;o<r;++o)s[o]=e[o];return new In(s,this._parents,this._name,this._id)},selection:function(){return new Dn(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Fn(),r=this._groups,i=r.length,a=0;a<i;++a)for(var s,o=r[a],c=o.length,l=0;l<c;++l)if(s=o[l]){var h=ge(s,e);de(s,t,n,l,o,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new In(r,this._parents,t,n)},call:$n.call,nodes:$n.nodes,node:$n.node,size:$n.size,empty:$n.empty,each:$n.each,on:function(t,e){var n=this._id;return arguments.length<2?ge(this.node(),n).on.on(t):this.each(function(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?pe:fe;return function(){var s=a(this,t),o=s.on;o!==r&&(i=(r=o).copy()).on(e,n),s.on=i}}(n,t,e))},attr:function(t,e){var n=Z(t),r="transform"===n?we:_n;return this.attrTween(t,"function"==typeof e?(n.local?En:Cn)(n,r,Te(this,"attr."+t,e)):null==e?(n.local?vn:xn)(n):(n.local?wn:kn)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=Z(t);return this.tween(n,(r.local?Tn:Sn)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?ke:_n;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=X(this,t),s=(this.style.removeProperty(t),X(this,t));return a===s?null:a===n&&s===r?i:i=e(n=a,r=s)}}(t,r)).on("end.style."+t,On(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var s=X(this,t),o=n(this),c=o+"";return null==o&&(this.style.removeProperty(t),c=o=X(this,t)),s===c?null:s===r&&c===i?a:(i=c,a=e(r=s,o))}}(t,r,Te(this,"style."+t,e))).each(function(t,e){var n,r,i,a,s="style."+e,o="end."+s;return function(){var c=fe(this,t),l=c.on,h=null==c.value[s]?a||(a=On(e)):void 0;l===n&&i===h||(r=(n=l).copy()).on(o,i=h),c.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var s=X(this,t);return s===a?null:s===r?i:i=e(r=s,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){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,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&function(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}(t,a,n)),r}return a._value=e,a}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Te(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,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=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 n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=ge(this.node(),n).tween,a=0,s=i.length;a<s;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?Ce:Ee)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?An:Ln)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bn:Nn)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){fe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;fe(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,s){var o={value:s},c={value:function(){0==--i&&a()}};n.each((function(){var n=fe(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(c)),n.on=e})),0===i&&a()}))},[Symbol.iterator]:$n[Symbol.iterator]};var Rn={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Zn(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}Nt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,i,a=t.__transition,s=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>oe&&n.state<he,n.state=ue,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):s=!1;s&&delete t.__transition}}(this,t)}))},Nt.prototype.transition=function(t){var e,n;t instanceof In?(e=t._id,t=t._name):(e=Fn(),(n=Rn).time=Gt(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var s,o=r[a],c=o.length,l=0;l<c;++l)(s=o[l])&&de(s,t,e,l,o,n||Zn(s,e));return new In(r,this._parents,t,e)};const{abs:Pn,max:jn,min:Yn}=Math;function zn(t){return[+t[0],+t[1]]}function Un(t){return[zn(t[0]),zn(t[1])]}["w","e"].map(Wn),["n","s"].map(Wn),["n","w","e","s","nw","ne","sw","se"].map(Wn);function Wn(t){return{type:t}}function Hn(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function qn(t){return(e,n)=>function(t,e){return fetch(t,e).then(Hn)}(e,n).then((e=>(new DOMParser).parseFromString(e,t)))}qn("application/xml");qn("text/html");var Vn=qn("image/svg+xml");const Gn=Math.PI/180,Xn=180/Math.PI,Qn=.96422,Kn=1,Jn=.82521,tr=4/29,er=6/29,nr=3*er*er,rr=er*er*er;function ir(t){if(t instanceof ar)return new ar(t.l,t.a,t.b,t.opacity);if(t instanceof dr)return pr(t);t instanceof Xe||(t=Ve(t));var e,n,r=lr(t.r),i=lr(t.g),a=lr(t.b),s=sr((.2225045*r+.7168786*i+.0606169*a)/Kn);return r===i&&i===a?e=n=s:(e=sr((.4360747*r+.3850649*i+.1430804*a)/Qn),n=sr((.0139322*r+.0971045*i+.7141733*a)/Jn)),new ar(116*s-16,500*(e-s),200*(s-n),t.opacity)}function ar(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function sr(t){return t>rr?Math.pow(t,1/3):t/nr+tr}function or(t){return t>er?t*t*t:nr*(t-tr)}function cr(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 hr(t){if(t instanceof dr)return new dr(t.h,t.c,t.l,t.opacity);if(t instanceof ar||(t=ir(t)),0===t.a&&0===t.b)return new dr(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Xn;return new dr(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function ur(t,e,n,r){return 1===arguments.length?hr(t):new dr(t,e,n,null==r?1:r)}function dr(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function pr(t){if(isNaN(t.h))return new ar(t.l,0,0,t.opacity);var e=t.h*Gn;return new ar(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,n){var r=t((e=ur(e)).h,(n=ur(n)).h),i=pn(e.c,n.c),a=pn(e.l,n.l),s=pn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=s(t),e+""}}}Se(ar,(function(t,e,n,r){return 1===arguments.length?ir(t):new ar(t,e,n,null==r?1:r)}),Ae(Le,{brighter(t){return new ar(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new ar(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Xe(cr(3.1338561*(e=Qn*or(e))-1.6168667*(t=Kn*or(t))-.4906146*(n=Jn*or(n))),cr(-.9787684*e+1.9161415*t+.033454*n),cr(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),Se(dr,ur,Ae(Le,{brighter(t){return new dr(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new dr(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return pr(this).rgb()}}));const gr=fr((function(t,e){var n=e-t;return n?un(t,n>180||n<-180?n-360*Math.round(n/360):n):hn(isNaN(t)?e:t)}));fr(pn);const yr=Math.sqrt(50),mr=Math.sqrt(10),br=Math.sqrt(2);function _r(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/Math.pow(10,i),s=a>=yr?10:a>=mr?5:a>=br?2:1;let o,c,l;return i<0?(l=Math.pow(10,-i)/s,o=Math.round(t*l),c=Math.round(e*l),o/l<t&&++o,c/l>e&&--c,l=-l):(l=Math.pow(10,i)*s,o=Math.round(t/l),c=Math.round(e/l),o*l<t&&++o,c*l>e&&--c),c<o&&.5<=n&&n<2?_r(t,e,2*n):[o,c,l]}function xr(t,e,n){return _r(t=+t,e=+e,n=+n)[2]}function vr(t,e,n){n=+n;const r=(e=+e)<(t=+t),i=r?xr(e,t,n):xr(t,e,n);return(r?-1:1)*(i<0?1/-i:i)}function kr(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function wr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Cr(t){let e,n,r;function i(t,r,i=0,a=t.length){if(i<a){if(0!==e(r,r))return a;do{const e=i+a>>>1;n(t[e],r)<0?i=e+1:a=e}while(i<a)}return i}return 2!==t.length?(e=kr,n=(e,n)=>kr(t(e),n),r=(e,n)=>t(e)-n):(e=t===kr||t===wr?t:Er,n=t,r=t),{left:i,center:function(t,e,n=0,a=t.length){const s=i(t,e,n,a-1);return s>n&&r(t[s-1],e)>-r(t[s],e)?s-1:s},right:function(t,r,i=0,a=t.length){if(i<a){if(0!==e(r,r))return a;do{const e=i+a>>>1;n(t[e],r)<=0?i=e+1:a=e}while(i<a)}return i}}}function Er(){return 0}const Tr=Cr(kr),Sr=Tr.right,Ar=(Tr.left,Cr((function(t){return null===t?NaN:+t})).center,Sr);function Lr(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),s=new Array(r);for(n=0;n<i;++n)a[n]=Or(t[n],e[n]);for(;n<r;++n)s[n]=e[n];return function(t){for(n=0;n<i;++n)s[n]=a[n](t);return s}}function Br(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Nr(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=Or(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}function Dr(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function Or(t,e){var n,r,i=typeof e;return null==e||"boolean"===i?hn(e):("number"===i?ye:"string"===i?(n=We(e))?(e=n,fn):bn:e instanceof We?fn:e instanceof Date?Br:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Lr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Nr:ye:Dr))(t,e)}function Mr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function Ir(t){return+t}var Fr=[0,1];function $r(t){return t}function Rr(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:(n=isNaN(e)?NaN:.5,function(){return n});var n}function Zr(t,e,n){var r=t[0],i=t[1],a=e[0],s=e[1];return i<r?(r=Rr(i,r),a=n(s,a)):(r=Rr(r,i),a=n(a,s)),function(t){return a(r(t))}}function Pr(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),s=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<r;)i[s]=Rr(t[s],t[s+1]),a[s]=n(e[s],e[s+1]);return function(e){var n=Ar(t,e,1,r)-1;return a[n](i[n](e))}}function jr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Yr(){var t,e,n,r,i,a,s=Fr,o=Fr,c=Or,l=$r;function h(){var t,e,n,c=Math.min(s.length,o.length);return l!==$r&&(t=s[0],e=s[c-1],t>e&&(n=t,t=e,e=n),l=function(n){return Math.max(t,Math.min(e,n))}),r=c>2?Pr:Zr,i=a=null,u}function u(e){return null==e||isNaN(e=+e)?n:(i||(i=r(s.map(t),o,c)))(t(l(e)))}return u.invert=function(n){return l(e((a||(a=r(o,s.map(t),ye)))(n)))},u.domain=function(t){return arguments.length?(s=Array.from(t,Ir),h()):s.slice()},u.range=function(t){return arguments.length?(o=Array.from(t),h()):o.slice()},u.rangeRound=function(t){return o=Array.from(t),c=Mr,h()},u.clamp=function(t){return arguments.length?(l=!!t||$r,h()):l!==$r},u.interpolate=function(t){return arguments.length?(c=t,h()):c},u.unknown=function(t){return arguments.length?(n=t,u):n},function(n,r){return t=n,e=r,h()}}function zr(){return Yr()($r,$r)}function Ur(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}var Wr,Hr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function qr(t){if(!(e=Hr.exec(t)))throw new Error("invalid format: "+t);var e;return new Vr({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 Vr(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 Gr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Xr(t){return(t=Gr(Math.abs(t)))?t[1]:NaN}function Qr(t,e){var n=Gr(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}qr.prototype=Vr.prototype,Vr.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 Kr={"%":(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)=>Qr(100*t,e),r:Qr,s:function(t,e){var n=Gr(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Wr=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,s=r.length;return a===s?r:a>s?r+new Array(a-s+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Gr(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Jr(t){return t}var ti,ei,ni,ri=Array.prototype.map,ii=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function ai(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Jr:(e=ri.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],s=0,o=e[0],c=0;i>0&&o>0&&(c+o+1>r&&(o=Math.max(1,r-c)),a.push(t.substring(i-=o,i+o)),!((c+=o+1)>r));)o=e[s=(s+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",s=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?Jr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(ri.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=qr(t)).fill,n=t.align,u=t.sign,d=t.symbol,p=t.zero,f=t.width,g=t.comma,y=t.precision,m=t.trim,b=t.type;"n"===b?(g=!0,b="g"):Kr[b]||(void 0===y&&(y=12),m=!0,b="g"),(p||"0"===e&&"="===n)&&(p=!0,e="0",n="=");var _="$"===d?i:"#"===d&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",x="$"===d?a:/[%p]/.test(b)?c:"",v=Kr[b],k=/[defgprs%]/.test(b);function w(t){var i,a,c,d=_,w=x;if("c"===b)w=v(t)+w,t="";else{var C=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:v(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),C&&0==+t&&"+"!==u&&(C=!1),d=(C?"("===u?u:l:"-"===u||"("===u?"":u)+d,w=("s"===b?ii[8+Wr/3]:"")+w+(C&&"("===u?")":""),k)for(i=-1,a=t.length;++i<a;)if(48>(c=t.charCodeAt(i))||c>57){w=(46===c?s+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}g&&!p&&(t=r(t,1/0));var E=d.length+t.length+w.length,T=E<f?new Array(f-E+1).join(e):"";switch(g&&p&&(t=r(T+t,T.length?f-w.length:1/0),T=""),n){case"<":t=d+t+w+T;break;case"=":t=d+T+t+w;break;case"^":t=T.slice(0,E=T.length>>1)+d+t+w+T.slice(E);break;default:t=T+d+t+w}return o(t)}return y=void 0===y?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),w.toString=function(){return t+""},w}return{format:u,formatPrefix:function(t,e){var n=u(((t=qr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Xr(e)/3))),i=Math.pow(10,-r),a=ii[8+r/3];return function(t){return n(i*t)+a}}}}function si(t,e,n,r){var i,a=vr(t,e,n);switch((r=qr(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Xr(e)/3)))-Xr(Math.abs(t)))}(a,s))||(r.precision=i),ni(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Xr(e)-Xr(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-Xr(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return ei(r)}function oi(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[i,a,s]=r?_r(e,t,n):_r(t,e,n);if(!(a>=i))return[];const o=a-i+1,c=new Array(o);if(r)if(s<0)for(let l=0;l<o;++l)c[l]=(a-l)/-s;else for(let l=0;l<o;++l)c[l]=(a-l)*s;else if(s<0)for(let l=0;l<o;++l)c[l]=(i+l)/-s;else for(let l=0;l<o;++l)c[l]=(i+l)*s;return c}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return si(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,a=e(),s=0,o=a.length-1,c=a[s],l=a[o],h=10;for(l<c&&(i=c,c=l,l=i,i=s,s=o,o=i);h-- >0;){if((i=xr(c,l,n))===r)return a[s]=c,a[o]=l,e(a);if(i>0)c=Math.floor(c/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function ci(){var t=zr();return t.copy=function(){return jr(t,ci())},Ur.apply(t,arguments),oi(t)}ti=ai({thousands:",",grouping:[3],currency:["$",""]}),ei=ti.format,ni=ti.formatPrefix;class li extends Map{constructor(t,e=pi){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(hi(this,t))}has(t){return super.has(hi(this,t))}set(t,e){return super.set(ui(this,t),e)}delete(t){return super.delete(di(this,t))}}function hi({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function ui({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function di({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function pi(t){return null!==t&&"object"==typeof t?t.valueOf():t}const fi=Symbol("implicit");function gi(){var t=new li,e=[],n=[],r=fi;function i(i){let a=t.get(i);if(void 0===a){if(r!==fi)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new li;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return gi(e,n).unknown(r)},Ur.apply(i,arguments),i}const yi=1e3,mi=6e4,bi=36e5,_i=864e5,xi=6048e5,vi=2592e6,ki=31536e6,wi=new Date,Ci=new Date;function Ei(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return s;let o;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return s},i.filter=n=>Ei((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(wi.setTime(+e),Ci.setTime(+r),t(wi),t(Ci),Math.floor(n(wi,Ci))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const Ti=Ei((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Ti.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Ei((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):Ti:null);Ti.range;const Si=Ei((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getUTCSeconds())),Ai=(Si.range,Ei((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yi)}),((t,e)=>{t.setTime(+t+e*mi)}),((t,e)=>(e-t)/mi),(t=>t.getMinutes()))),Li=(Ai.range,Ei((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*mi)}),((t,e)=>(e-t)/mi),(t=>t.getUTCMinutes()))),Bi=(Li.range,Ei((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yi-t.getMinutes()*mi)}),((t,e)=>{t.setTime(+t+e*bi)}),((t,e)=>(e-t)/bi),(t=>t.getHours()))),Ni=(Bi.range,Ei((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*bi)}),((t,e)=>(e-t)/bi),(t=>t.getUTCHours()))),Di=(Ni.range,Ei((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*mi)/_i),(t=>t.getDate()-1))),Oi=(Di.range,Ei((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/_i),(t=>t.getUTCDate()-1))),Mi=(Oi.range,Ei((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/_i),(t=>Math.floor(t/_i))));Mi.range;function Ii(t){return Ei((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())*mi)/xi))}const Fi=Ii(0),$i=Ii(1),Ri=Ii(2),Zi=Ii(3),Pi=Ii(4),ji=Ii(5),Yi=Ii(6);Fi.range,$i.range,Ri.range,Zi.range,Pi.range,ji.range,Yi.range;function zi(t){return Ei((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)/xi))}const Ui=zi(0),Wi=zi(1),Hi=zi(2),qi=zi(3),Vi=zi(4),Gi=zi(5),Xi=zi(6),Qi=(Ui.range,Wi.range,Hi.range,qi.range,Vi.range,Gi.range,Xi.range,Ei((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()))),Ki=(Qi.range,Ei((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()))),Ji=(Ki.range,Ei((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())));Ji.every=t=>isFinite(t=Math.floor(t))&&t>0?Ei((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null;Ji.range;const ta=Ei((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()));ta.every=t=>isFinite(t=Math.floor(t))&&t>0?Ei((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null;ta.range;function ea(t,e,n,r,i,a){const s=[[Si,1,yi],[Si,5,5e3],[Si,15,15e3],[Si,30,3e4],[a,1,mi],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,bi],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,_i],[r,2,1728e5],[n,1,xi],[e,1,vi],[e,3,7776e6],[t,1,ki]];function o(e,n,r){const i=Math.abs(n-e)/r,a=Cr((([,,t])=>t)).right(s,i);if(a===s.length)return t.every(vr(e/ki,n/ki,r));if(0===a)return Ti.every(Math.max(vr(e,n,r),1));const[o,c]=s[i/s[a-1][2]<s[a][2]/i?a-1:a];return o.every(c)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const i=n&&"function"==typeof n.range?n:o(t,e,n),a=i?i.range(t,+e+1):[];return r?a.reverse():a},o]}const[na,ra]=ea(ta,Ki,Ui,Mi,Ni,Li),[ia,aa]=ea(Ji,Qi,Fi,Di,Bi,Ai);function sa(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function oa(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ca(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var la,ha,ua={"-":"",_:" ",0:"0"},da=/^\s*\d+/,pa=/^%/,fa=/[\\^$*+?|[\]().{}]/g;function ga(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function ya(t){return t.replace(fa,"\\$&")}function ma(t){return new RegExp("^(?:"+t.map(ya).join("|")+")","i")}function ba(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function _a(t,e,n){var r=da.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function xa(t,e,n){var r=da.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function va(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function ka(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function wa(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Ca(t,e,n){var r=da.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ea(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ta(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Sa(t,e,n){var r=da.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Aa(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function La(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Ba(t,e,n){var r=da.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Na(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Da(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Oa(t,e,n){var r=da.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Ma(t,e,n){var r=da.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ia(t,e,n){var r=da.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Fa(t,e,n){var r=pa.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function $a(t,e,n){var r=da.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Ra(t,e,n){var r=da.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Za(t,e){return ga(t.getDate(),e,2)}function Pa(t,e){return ga(t.getHours(),e,2)}function ja(t,e){return ga(t.getHours()%12||12,e,2)}function Ya(t,e){return ga(1+Di.count(Ji(t),t),e,3)}function za(t,e){return ga(t.getMilliseconds(),e,3)}function Ua(t,e){return za(t,e)+"000"}function Wa(t,e){return ga(t.getMonth()+1,e,2)}function Ha(t,e){return ga(t.getMinutes(),e,2)}function qa(t,e){return ga(t.getSeconds(),e,2)}function Va(t){var e=t.getDay();return 0===e?7:e}function Ga(t,e){return ga(Fi.count(Ji(t)-1,t),e,2)}function Xa(t){var e=t.getDay();return e>=4||0===e?Pi(t):Pi.ceil(t)}function Qa(t,e){return t=Xa(t),ga(Pi.count(Ji(t),t)+(4===Ji(t).getDay()),e,2)}function Ka(t){return t.getDay()}function Ja(t,e){return ga($i.count(Ji(t)-1,t),e,2)}function ts(t,e){return ga(t.getFullYear()%100,e,2)}function es(t,e){return ga((t=Xa(t)).getFullYear()%100,e,2)}function ns(t,e){return ga(t.getFullYear()%1e4,e,4)}function rs(t,e){var n=t.getDay();return ga((t=n>=4||0===n?Pi(t):Pi.ceil(t)).getFullYear()%1e4,e,4)}function is(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ga(e/60|0,"0",2)+ga(e%60,"0",2)}function as(t,e){return ga(t.getUTCDate(),e,2)}function ss(t,e){return ga(t.getUTCHours(),e,2)}function os(t,e){return ga(t.getUTCHours()%12||12,e,2)}function cs(t,e){return ga(1+Oi.count(ta(t),t),e,3)}function ls(t,e){return ga(t.getUTCMilliseconds(),e,3)}function hs(t,e){return ls(t,e)+"000"}function us(t,e){return ga(t.getUTCMonth()+1,e,2)}function ds(t,e){return ga(t.getUTCMinutes(),e,2)}function ps(t,e){return ga(t.getUTCSeconds(),e,2)}function fs(t){var e=t.getUTCDay();return 0===e?7:e}function gs(t,e){return ga(Ui.count(ta(t)-1,t),e,2)}function ys(t){var e=t.getUTCDay();return e>=4||0===e?Vi(t):Vi.ceil(t)}function ms(t,e){return t=ys(t),ga(Vi.count(ta(t),t)+(4===ta(t).getUTCDay()),e,2)}function bs(t){return t.getUTCDay()}function _s(t,e){return ga(Wi.count(ta(t)-1,t),e,2)}function xs(t,e){return ga(t.getUTCFullYear()%100,e,2)}function vs(t,e){return ga((t=ys(t)).getUTCFullYear()%100,e,2)}function ks(t,e){return ga(t.getUTCFullYear()%1e4,e,4)}function ws(t,e){var n=t.getUTCDay();return ga((t=n>=4||0===n?Vi(t):Vi.ceil(t)).getUTCFullYear()%1e4,e,4)}function Cs(){return"+0000"}function Es(){return"%"}function Ts(t){return+t}function Ss(t){return Math.floor(+t/1e3)}function As(t){return new Date(t)}function Ls(t){return t instanceof Date?+t:+new Date(+t)}function Bs(t,e,n,r,i,a,s,o,c,l){var h=zr(),u=h.invert,d=h.domain,p=l(".%L"),f=l(":%S"),g=l("%I:%M"),y=l("%I %p"),m=l("%a %d"),b=l("%b %d"),_=l("%B"),x=l("%Y");function v(t){return(c(t)<t?p:o(t)<t?f:s(t)<t?g:a(t)<t?y:r(t)<t?i(t)<t?m:b:n(t)<t?_:x)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ls)):d().map(As)},h.ticks=function(e){var n=d();return t(n[0],n[n.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?v:l(e)},h.nice=function(t){var n=d();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?d(function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],s=t[i];return s<a&&(n=r,r=i,i=n,n=a,a=s,s=n),t[r]=e.floor(a),t[i]=e.ceil(s),t}(n,t)):h},h.copy=function(){return jr(h,Bs(t,e,n,r,i,a,s,o,c,l))},h}function Ns(){return Ur.apply(Bs(ia,aa,Ji,Qi,Fi,Di,Bi,Ai,Si,ha).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Ds(t){return"string"==typeof t?new Lt([[document.querySelector(t)]],[document.documentElement]):new Lt([[t]],At)}function Os(t){return"string"==typeof t?new Lt([document.querySelectorAll(t)],[document.documentElement]):new Lt([v(t)],At)}function Ms(t){return function(){return t}}!function(t){la=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,s=t.shortDays,o=t.months,c=t.shortMonths,l=ma(i),h=ba(i),u=ma(a),d=ba(a),p=ma(s),f=ba(s),g=ma(o),y=ba(o),m=ma(c),b=ba(c),_={a:function(t){return s[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:Za,e:Za,f:Ua,g:es,G:rs,H:Pa,I:ja,j:Ya,L:za,m:Wa,M:Ha,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ts,s:Ss,S:qa,u:Va,U:Ga,V:Qa,w:Ka,W:Ja,x:null,X:null,y:ts,Y:ns,Z:is,"%":Es},x={a:function(t){return s[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:as,e:as,f:hs,g:vs,G:ws,H:ss,I:os,j:cs,L:ls,m:us,M:ds,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ts,s:Ss,S:ps,u:fs,U:gs,V:ms,w:bs,W:_s,x:null,X:null,y:xs,Y:ks,Z:Cs,"%":Es},v={a:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.w=f.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.w=d.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=b.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return C(t,e,n,r)},d:La,e:La,f:Ia,g:Ea,G:Ca,H:Na,I:Na,j:Ba,L:Ma,m:Aa,M:Da,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=h.get(r[0].toLowerCase()),n+r[0].length):-1},q:Sa,Q:$a,s:Ra,S:Oa,u:xa,U:va,V:ka,w:_a,W:wa,x:function(t,e,r){return C(t,n,e,r)},X:function(t,e,n){return C(t,r,e,n)},y:Ea,Y:Ca,Z:Ta,"%":Fa};function k(t,e){return function(n){var r,i,a,s=[],o=-1,c=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++o<l;)37===t.charCodeAt(o)&&(s.push(t.slice(c,o)),null!=(i=ua[r=t.charAt(++o)])?r=t.charAt(++o):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),s.push(r),c=o+1);return s.push(t.slice(c,o)),s.join("")}}function w(t,e){return function(n){var r,i,a=ca(1900,void 0,1);if(C(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=oa(ca(a.y,0,1))).getUTCDay(),r=i>4||0===i?Wi.ceil(r):Wi(r),r=Oi.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=sa(ca(a.y,0,1))).getDay(),r=i>4||0===i?$i.ceil(r):$i(r),r=Di.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?oa(ca(a.y,0,1)).getUTCDay():sa(ca(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,oa(a)):sa(a)}}function C(t,e,n,r){for(var i,a,s=0,o=e.length,c=n.length;s<o;){if(r>=c)return-1;if(37===(i=e.charCodeAt(s++))){if(i=e.charAt(s++),!(a=v[i in ua?e.charAt(s++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=k(n,_),_.X=k(r,_),_.c=k(e,_),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}(t),ha=la.format,la.parse,la.utcFormat,la.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 Is=Math.abs,Fs=Math.atan2,$s=Math.cos,Rs=Math.max,Zs=Math.min,Ps=Math.sin,js=Math.sqrt,Ys=1e-12,zs=Math.PI,Us=zs/2,Ws=2*zs;function Hs(t){return t>=1?Us:t<=-1?-Us:Math.asin(t)}const qs=Math.PI,Vs=2*qs,Gs=1e-6,Xs=Vs-Gs;function Qs(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class Ks{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Qs:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Qs;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*n)/n+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,n,r){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+r}`}bezierCurveTo(t,e,n,r,i,a){this._append`C${+t},${+e},${+n},${+r},${this._x1=+i},${this._y1=+a}`}arcTo(t,e,n,r,i){if(t=+t,e=+e,n=+n,r=+r,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=this._x1,s=this._y1,o=n-t,c=r-e,l=a-t,h=s-e,u=l*l+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Gs)if(Math.abs(h*o-c*l)>Gs&&i){let d=n-a,p=r-s,f=o*o+c*c,g=d*d+p*p,y=Math.sqrt(f),m=Math.sqrt(u),b=i*Math.tan((qs-Math.acos((f+u-g)/(2*y*m)))/2),_=b/m,x=b/y;Math.abs(_-1)>Gs&&this._append`L${t+_*l},${e+_*h}`,this._append`A${i},${i},0,0,${+(h*d>l*p)},${this._x1=t+x*o},${this._y1=e+x*c}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(r),o=n*Math.sin(r),c=t+s,l=e+o,h=1^a,u=a?r-i:i-r;null===this._x1?this._append`M${c},${l}`:(Math.abs(this._x1-c)>Gs||Math.abs(this._y1-l)>Gs)&&this._append`L${c},${l}`,n&&(u<0&&(u=u%Vs+Vs),u>Xs?this._append`A${n},${n},0,1,${h},${t-s},${e-o}A${n},${n},0,1,${h},${this._x1=c},${this._y1=l}`:u>Gs&&this._append`A${n},${n},0,${+(u>=qs)},${h},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Js(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Ks(e)}function to(t){return t.innerRadius}function eo(t){return t.outerRadius}function no(t){return t.startAngle}function ro(t){return t.endAngle}function io(t){return t&&t.padAngle}function ao(t,e,n,r,i,a,s){var o=t-n,c=e-r,l=(s?a:-a)/js(o*o+c*c),h=l*c,u=-l*o,d=t+h,p=e+u,f=n+h,g=r+u,y=(d+f)/2,m=(p+g)/2,b=f-d,_=g-p,x=b*b+_*_,v=i-a,k=d*g-f*p,w=(_<0?-1:1)*js(Rs(0,v*v*x-k*k)),C=(k*_-b*w)/x,E=(-k*b-_*w)/x,T=(k*_+b*w)/x,S=(-k*b+_*w)/x,A=C-y,L=E-m,B=T-y,N=S-m;return A*A+L*L>B*B+N*N&&(C=T,E=S),{cx:C,cy:E,x01:-h,y01:-u,x11:C*(i/v-1),y11:E*(i/v-1)}}function so(){var t=to,e=eo,n=Ms(0),r=null,i=no,a=ro,s=io,o=null,c=Js(l);function l(){var l,h,u,d=+t.apply(this,arguments),p=+e.apply(this,arguments),f=i.apply(this,arguments)-Us,g=a.apply(this,arguments)-Us,y=Is(g-f),m=g>f;if(o||(o=l=c()),p<d&&(h=p,p=d,d=h),p>Ys)if(y>Ws-Ys)o.moveTo(p*$s(f),p*Ps(f)),o.arc(0,0,p,f,g,!m),d>Ys&&(o.moveTo(d*$s(g),d*Ps(g)),o.arc(0,0,d,g,f,m));else{var b,_,x=f,v=g,k=f,w=g,C=y,E=y,T=s.apply(this,arguments)/2,S=T>Ys&&(r?+r.apply(this,arguments):js(d*d+p*p)),A=Zs(Is(p-d)/2,+n.apply(this,arguments)),L=A,B=A;if(S>Ys){var N=Hs(S/d*Ps(T)),D=Hs(S/p*Ps(T));(C-=2*N)>Ys?(k+=N*=m?1:-1,w-=N):(C=0,k=w=(f+g)/2),(E-=2*D)>Ys?(x+=D*=m?1:-1,v-=D):(E=0,x=v=(f+g)/2)}var O=p*$s(x),M=p*Ps(x),I=d*$s(w),F=d*Ps(w);if(A>Ys){var $,R=p*$s(v),Z=p*Ps(v),P=d*$s(k),j=d*Ps(k);if(y<zs)if($=function(t,e,n,r,i,a,s,o){var c=n-t,l=r-e,h=s-i,u=o-a,d=u*c-h*l;if(!(d*d<Ys))return[t+(d=(h*(e-a)-u*(t-i))/d)*c,e+d*l]}(O,M,P,j,R,Z,I,F)){var Y=O-$[0],z=M-$[1],U=R-$[0],W=Z-$[1],H=1/Ps(((u=(Y*U+z*W)/(js(Y*Y+z*z)*js(U*U+W*W)))>1?0:u<-1?zs:Math.acos(u))/2),q=js($[0]*$[0]+$[1]*$[1]);L=Zs(A,(d-q)/(H-1)),B=Zs(A,(p-q)/(H+1))}else L=B=0}E>Ys?B>Ys?(b=ao(P,j,O,M,p,B,m),_=ao(R,Z,I,F,p,B,m),o.moveTo(b.cx+b.x01,b.cy+b.y01),B<A?o.arc(b.cx,b.cy,B,Fs(b.y01,b.x01),Fs(_.y01,_.x01),!m):(o.arc(b.cx,b.cy,B,Fs(b.y01,b.x01),Fs(b.y11,b.x11),!m),o.arc(0,0,p,Fs(b.cy+b.y11,b.cx+b.x11),Fs(_.cy+_.y11,_.cx+_.x11),!m),o.arc(_.cx,_.cy,B,Fs(_.y11,_.x11),Fs(_.y01,_.x01),!m))):(o.moveTo(O,M),o.arc(0,0,p,x,v,!m)):o.moveTo(O,M),d>Ys&&C>Ys?L>Ys?(b=ao(I,F,R,Z,d,-L,m),_=ao(O,M,P,j,d,-L,m),o.lineTo(b.cx+b.x01,b.cy+b.y01),L<A?o.arc(b.cx,b.cy,L,Fs(b.y01,b.x01),Fs(_.y01,_.x01),!m):(o.arc(b.cx,b.cy,L,Fs(b.y01,b.x01),Fs(b.y11,b.x11),!m),o.arc(0,0,d,Fs(b.cy+b.y11,b.cx+b.x11),Fs(_.cy+_.y11,_.cx+_.x11),m),o.arc(_.cx,_.cy,L,Fs(_.y11,_.x11),Fs(_.y01,_.x01),!m))):o.arc(0,0,d,w,k,m):o.lineTo(I,F)}else o.moveTo(0,0);if(o.closePath(),l)return o=null,l+""||null}return l.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-zs/2;return[$s(r)*n,Ps(r)*n]},l.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Ms(+e),l):t},l.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Ms(+t),l):e},l.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Ms(+t),l):n},l.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Ms(+t),l):r},l.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ms(+t),l):i},l.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ms(+t),l):a},l.padAngle=function(t){return arguments.length?(s="function"==typeof t?t:Ms(+t),l):s},l.context=function(t){return arguments.length?(o=null==t?null:t,l):o},l}Ks.prototype;Array.prototype.slice;function oo(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function co(t){this._context=t}function lo(t){return new co(t)}function ho(t){return t[0]}function uo(t){return t[1]}function po(t,e){var n=Ms(!0),r=null,i=lo,a=null,s=Js(o);function o(o){var c,l,h,u=(o=oo(o)).length,d=!1;for(null==r&&(a=i(h=s())),c=0;c<=u;++c)!(c<u&&n(l=o[c],c,o))===d&&((d=!d)?a.lineStart():a.lineEnd()),d&&a.point(+t(l,c,o),+e(l,c,o));if(h)return a=null,h+""||null}return t="function"==typeof t?t:void 0===t?ho:Ms(t),e="function"==typeof e?e:void 0===e?uo:Ms(e),o.x=function(e){return arguments.length?(t="function"==typeof e?e:Ms(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:Ms(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:Ms(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o}function fo(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function go(t){return t}function yo(){var t=go,e=fo,n=null,r=Ms(0),i=Ms(Ws),a=Ms(0);function s(s){var o,c,l,h,u,d=(s=oo(s)).length,p=0,f=new Array(d),g=new Array(d),y=+r.apply(this,arguments),m=Math.min(Ws,Math.max(-Ws,i.apply(this,arguments)-y)),b=Math.min(Math.abs(m)/d,a.apply(this,arguments)),_=b*(m<0?-1:1);for(o=0;o<d;++o)(u=g[f[o]=o]=+t(s[o],o,s))>0&&(p+=u);for(null!=e?f.sort((function(t,n){return e(g[t],g[n])})):null!=n&&f.sort((function(t,e){return n(s[t],s[e])})),o=0,l=p?(m-d*_)/p:0;o<d;++o,y=h)c=f[o],h=y+((u=g[c])>0?u*l:0)+_,g[c]={data:s[c],index:o,value:u,startAngle:y,endAngle:h,padAngle:b};return g}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:Ms(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ms(+t),s):r},s.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ms(+t),s):i},s.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ms(+t),s):a},s}function mo(){}function bo(t,e,n){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+n)/6)}function _o(t){this._context=t}function xo(t){return new _o(t)}function vo(t){this._context=t}function ko(t){return new vo(t)}function wo(t){this._context=t}function Co(t){return new wo(t)}co.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)}}},_o.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:bo(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:bo(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},vo.prototype={areaStart:mo,areaEnd:mo,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:bo(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},wo.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 n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:bo(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Eo{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 To(t){return new Eo(t,!0)}function So(t){return new Eo(t,!1)}function Ao(t,e){this._basis=new _o(t),this._beta=e}Ao.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],s=t[n]-i,o=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*s),this._beta*e[c]+(1-this._beta)*(a+r*o));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Lo=function t(e){function n(t){return 1===e?new _o(t):new Ao(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Bo(t,e,n){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-n),t._x2,t._y2)}function No(t,e){this._context=t,this._k=(1-e)/6}No.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:Bo(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:Bo(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 Do=function t(e){function n(t){return new No(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Oo(t,e){this._context=t,this._k=(1-e)/6}Oo.prototype={areaStart:mo,areaEnd:mo,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:Bo(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 Mo=function t(e){function n(t){return new Oo(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Io(t,e){this._context=t,this._k=(1-e)/6}Io.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:Bo(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 Fo=function t(e){function n(t){return new Io(t,e)}return n.tension=function(e){return t(+e)},n}(0);function $o(t,e,n){var r=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Ys){var o=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*o-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*o-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>Ys){var l=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);a=(a*l+t._x1*t._l23_2a-e*t._l12_2a)/h,s=(s*l+t._y1*t._l23_2a-n*t._l12_2a)/h}t._context.bezierCurveTo(r,i,a,s,t._x2,t._y2)}function Ro(t,e){this._context=t,this._alpha=e}Ro.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 n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+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:$o(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 Zo=function t(e){function n(t){return e?new Ro(t,e):new No(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Po(t,e){this._context=t,this._alpha=e}Po.prototype={areaStart:mo,areaEnd:mo,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 n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+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:$o(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 jo=function t(e){function n(t){return e?new Po(t,e):new Oo(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Yo(t,e){this._context=t,this._alpha=e}Yo.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 n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+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:$o(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 zo=function t(e){function n(t){return e?new Yo(t,e):new Io(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Uo(t){this._context=t}function Wo(t){return new Uo(t)}function Ho(t){return t<0?-1:1}function qo(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),s=(n-t._y1)/(i||r<0&&-0),o=(a*i+s*r)/(r+i);return(Ho(a)+Ho(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(o))||0}function Vo(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Go(t,e,n){var r=t._x0,i=t._y0,a=t._x1,s=t._y1,o=(a-r)/3;t._context.bezierCurveTo(r+o,i+o*e,a-o,s-o*n,a,s)}function Xo(t){this._context=t}function Qo(t){this._context=new Ko(t)}function Ko(t){this._context=t}function Jo(t){return new Xo(t)}function tc(t){return new Qo(t)}function ec(t){this._context=t}function nc(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function rc(t){return new ec(t)}function ic(t,e){this._context=t,this._t=e}function ac(t){return new ic(t,.5)}function sc(t){return new ic(t,0)}function oc(t){return new ic(t,1)}function cc(t,e,n){this.k=t,this.x=e,this.y=n}Uo.prototype={areaStart:mo,areaEnd:mo,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Xo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Go(this,this._t0,Vo(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){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,Go(this,Vo(this,n=qo(this,t,e)),n);break;default:Go(this,this._t0,n=qo(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(Qo.prototype=Object.create(Xo.prototype)).point=function(t,e){Xo.prototype.point.call(this,e,t)},Ko.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,a){this._context.bezierCurveTo(e,t,r,n,a,i)}},ec.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=nc(t),i=nc(e),a=0,s=1;s<n;++a,++s)this._context.bezierCurveTo(r[0][a],i[0][a],r[1][a],i[1][a],t[s],e[s]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},ic.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=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 n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}},cc.prototype={constructor:cc,scale:function(t){return 1===t?this:new cc(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new cc(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 cc(1,0,0);cc.prototype},3352:(t,e,n)=>{"use strict";function r(t,e,n,r){var a,s,o,c,l,h,u,d,p,f,g,y,m;if(a=e.y-t.y,o=t.x-e.x,l=e.x*t.y-t.x*e.y,p=a*n.x+o*n.y+l,f=a*r.x+o*r.y+l,!(0!==p&&0!==f&&i(p,f)||(s=r.y-n.y,c=n.x-r.x,h=r.x*n.y-n.x*r.y,u=s*t.x+c*t.y+h,d=s*e.x+c*e.y+h,0!==u&&0!==d&&i(u,d)||0==(g=a*c-s*o))))return y=Math.abs(g/2),{x:(m=o*h-c*l)<0?(m-y)/g:(m+y)/g,y:(m=s*l-a*h)<0?(m-y)/g:(m+y)/g}}function i(t,e){return t*e>0}function a(t,e,n){var i=t.x,a=t.y,s=[],o=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;e.forEach((function(t){o=Math.min(o,t.x),c=Math.min(c,t.y)}));for(var l=i-t.width/2-o,h=a-t.height/2-c,u=0;u<e.length;u++){var d=e[u],p=e[u<e.length-1?u+1:0],f=r(t,n,{x:l+d.x,y:h+d.y},{x:l+p.x,y:h+p.y});f&&s.push(f)}return s.length?(s.length>1&&s.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),s=e.x-n.x,o=e.y-n.y,c=Math.sqrt(s*s+o*o);return a<c?-1:a===c?0:1})),s[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}n.d(e,{A:()=>a})},2930:(t,e,n)=>{"use strict";function r(t,e){var n,r,i=t.x,a=t.y,s=e.x-i,o=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(o)*c>Math.abs(s)*l?(o<0&&(l=-l),n=0===o?0:l*s/o,r=l):(s<0&&(c=-c),n=c,r=0===s?0:c*o/s),{x:i+n,y:a+r}}n.d(e,{q:()=>r})},3349:(t,e,n)=>{"use strict";n.d(e,{a:()=>i});var r=n(6225);function i(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert((function(){return a}));break;default:i.html(a)}r.bg(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var s=i.node().getBoundingClientRect();return n.attr("width",s.width).attr("height",s.height),n}},6225:(t,e,n)=>{"use strict";n.d(e,{$p:()=>h,O1:()=>s,WR:()=>u,bF:()=>a,bg:()=>l});var r=n(7514),i=n(3234);function a(t,e){return!!t.children(e).length}function s(t){return c(t.v)+":"+c(t.w)+":"+c(t.name)}var o=/:/g;function c(t){return t?String(t).replace(o,"\\:"):""}function l(t,e){e&&t.attr("style",e)}function h(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))}function u(t,e){var n=e.graph();if(r.Z(n)){var a=n.transition;if(i.Z(a))return a(t)}return t}},277:(t,e,n)=>{"use strict";n.d(e,{bK:()=>Ge});var r=n(870),i=n(6749),a=n(7452),s=n(2002),o=n(7961),c=n(3836),l=n(4379),h=n(5625);class u{constructor(){var t={};t._next=t._prev=t,this._sentinel=t}dequeue(){var t=this._sentinel,e=t._prev;if(e!==t)return d(e),e}enqueue(t){var e=this._sentinel;t._prev&&t._next&&d(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e}toString(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,p)),n=n._prev;return"["+t.join(", ")+"]"}}function d(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function p(t,e){if("_next"!==t&&"_prev"!==t)return e}var f=s.Z(1);function g(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new h.k,i=0,a=0;r.Z(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),r.Z(t.edges(),(function(t){var r=n.edge(t.v,t.w)||0,s=e(t),o=r+s;n.setEdge(t.v,t.w,o),a=Math.max(a,n.node(t.v).out+=s),i=Math.max(i,n.node(t.w).in+=s)}));var s=l.Z(a+i+3).map((function(){return new u})),o=i+1;return r.Z(n.nodes(),(function(t){m(s,o,n.node(t))})),{graph:n,buckets:s,zeroIdx:o}}(t,e||f),i=function(t,e,n){var r,i=[],a=e[e.length-1],s=e[0];for(;t.nodeCount();){for(;r=s.dequeue();)y(t,e,n,r);for(;r=a.dequeue();)y(t,e,n,r);if(t.nodeCount())for(var o=e.length-2;o>0;--o)if(r=e[o].dequeue()){i=i.concat(y(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return o.Z(c.Z(i,(function(e){return t.outEdges(e.v,e.w)})))}function y(t,e,n,i,a){var s=a?[]:void 0;return r.Z(t.inEdges(i.v),(function(r){var i=t.edge(r),o=t.node(r.v);a&&s.push({v:r.v,w:r.w}),o.out-=i,m(e,n,o)})),r.Z(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,s=t.node(a);s.in-=i,m(e,n,s)})),t.removeNode(i.v),s}function m(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}function b(t){var e="greedy"===t.graph().acyclicer?g(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},i={};function s(o){a.Z(i,o)||(i[o]=!0,n[o]=!0,r.Z(t.outEdges(o),(function(t){a.Z(n,t.w)?e.push(t):s(t.w)})),delete n[o])}return r.Z(t.nodes(),s),e}(t);r.Z(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,i.Z("rev"))}))}var _=n(1667),x=n(4752),v=n(9651);const k=function(t,e,n){(void 0!==n&&!(0,v.Z)(t[e],n)||void 0===n&&!(e in t))&&(0,x.Z)(t,e,n)};var w=n(1395),C=n(1050),E=n(2701),T=n(7215),S=n(3658),A=n(9169),L=n(7771),B=n(836),N=n(7008),D=n(3234),O=n(7226),M=n(7514),I=n(8843);const F=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var $=n(1899),R=n(5733);const Z=function(t){return(0,$.Z)(t,(0,R.Z)(t))};const P=function(t,e,n,r,i,a,s){var o=F(t,n),c=F(e,n),l=s.get(c);if(l)k(t,n,l);else{var h=a?a(o,c,n+"",t,e,s):void 0,u=void 0===h;if(u){var d=(0,L.Z)(c),p=!d&&(0,N.Z)(c),f=!d&&!p&&(0,I.Z)(c);h=c,d||p||f?(0,L.Z)(o)?h=o:(0,B.Z)(o)?h=(0,T.Z)(o):p?(u=!1,h=(0,C.Z)(c,!0)):f?(u=!1,h=(0,E.Z)(c,!0)):h=[]:(0,M.Z)(c)||(0,A.Z)(c)?(h=o,(0,A.Z)(o)?h=Z(o):(0,O.Z)(o)&&!(0,D.Z)(o)||(h=(0,S.Z)(c))):u=!1}u&&(s.set(c,h),i(h,c,r,a,s),s.delete(c)),k(t,n,h)}};const j=function t(e,n,r,i,a){e!==n&&(0,w.Z)(n,(function(s,o){if(a||(a=new _.Z),(0,O.Z)(s))P(e,n,o,r,t,i,a);else{var c=i?i(F(e,o),s,o+"",e,n,a):void 0;void 0===c&&(c=s),k(e,o,c)}}),R.Z)};var Y=n(9581),z=n(439);const U=function(t){return(0,Y.Z)((function(e,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(i--,a):void 0,s&&(0,z.Z)(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++r<i;){var o=n[r];o&&t(e,o,r,a)}return e}))}((function(t,e,n){j(t,e,n)}));var W=n(1666),H=n(3688),q=n(2714);const V=function(t,e,n){for(var r=-1,i=t.length;++r<i;){var a=t[r],s=e(a);if(null!=s&&(void 0===o?s==s&&!(0,q.Z)(s):n(s,o)))var o=s,c=a}return c};const G=function(t,e){return t>e};var X=n(9203);const Q=function(t){return t&&t.length?V(t,X.Z,G):void 0};const K=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0};var J=n(2693),tt=n(4765);const et=function(t,e){var n={};return e=(0,tt.Z)(e,3),(0,J.Z)(t,(function(t,r,i){(0,x.Z)(n,r,e(t,r,i))})),n};var nt=n(9360);const rt=function(t,e){return t<e};const it=function(t){return t&&t.length?V(t,X.Z,rt):void 0};var at=n(6092);const st=function(){return at.Z.Date.now()};function ot(t,e,n,r){var a;do{a=i.Z(r)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function ct(t){var e=new h.k({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.Z(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.Z(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e}function lt(t,e){var n,r,i=t.x,a=t.y,s=e.x-i,o=e.y-a,c=t.width/2,l=t.height/2;if(!s&&!o)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(o)*c>Math.abs(s)*l?(o<0&&(l=-l),n=l*s/o,r=l):(s<0&&(c=-c),n=c,r=c*o/s),{x:i+n,y:a+r}}function ht(t){var e=c.Z(l.Z(dt(t)+1),(function(){return[]}));return r.Z(t.nodes(),(function(n){var r=t.node(n),i=r.rank;nt.Z(i)||(e[i][r.order]=n)})),e}function ut(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),ot(t,"border",i,e)}function dt(t){return Q(c.Z(t.nodes(),(function(e){var n=t.node(e).rank;if(!nt.Z(n))return n})))}function pt(t,e){var n=st();try{return e()}finally{console.log(t+" time: "+(st()-n)+"ms")}}function ft(t,e){return e()}function gt(t,e,n,r,i,a){var s={width:0,height:0,rank:a,borderType:e},o=i[e][a-1],c=ot(t,"border",s,n);i[e][a]=c,t.setParent(c,r),o&&t.setEdge(o,c,{weight:1})}function yt(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){r.Z(t.nodes(),(function(e){_t(t.node(e))})),r.Z(t.edges(),(function(e){var n=t.edge(e);r.Z(n.points,_t),a.Z(n,"y")&&_t(n)}))}(t),"lr"!==e&&"rl"!==e||(!function(t){r.Z(t.nodes(),(function(e){xt(t.node(e))})),r.Z(t.edges(),(function(e){var n=t.edge(e);r.Z(n.points,xt),a.Z(n,"x")&&xt(n)}))}(t),mt(t))}function mt(t){r.Z(t.nodes(),(function(e){bt(t.node(e))})),r.Z(t.edges(),(function(e){bt(t.edge(e))}))}function bt(t){var e=t.width;t.width=t.height,t.height=e}function _t(t){t.y=-t.y}function xt(t){var e=t.x;t.x=t.y,t.y=e}function vt(t){t.graph().dummyChains=[],r.Z(t.edges(),(function(e){!function(t,e){var n,r,i,a=e.v,s=t.node(a).rank,o=e.w,c=t.node(o).rank,l=e.name,h=t.edge(e),u=h.labelRank;if(c===s+1)return;for(t.removeEdge(e),i=0,++s;s<c;++i,++s)h.points=[],n=ot(t,"edge",r={width:0,height:0,edgeLabel:h,edgeObj:e,rank:s},"_d"),s===u&&(r.width=h.width,r.height=h.height,r.dummy="edge-label",r.labelpos=h.labelpos),t.setEdge(a,n,{weight:h.weight},l),0===i&&t.graph().dummyChains.push(n),a=n;t.setEdge(a,o,{weight:h.weight},l)}(t,e)}))}const kt=function(t,e){return t&&t.length?V(t,(0,tt.Z)(e,2),rt):void 0};function wt(t){var e={};r.Z(t.sources(),(function n(r){var i=t.node(r);if(a.Z(e,r))return i.rank;e[r]=!0;var s=it(c.Z(t.outEdges(r),(function(e){return n(e.w)-t.edge(e).minlen})));return s!==Number.POSITIVE_INFINITY&&null!=s||(s=0),i.rank=s}))}function Ct(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}function Et(t){var e,n,r=new h.k({directed:!1}),i=t.nodes()[0],a=t.nodeCount();for(r.setNode(i,{});Tt(r,t)<a;)e=St(r,t),n=r.hasNode(e.v)?Ct(t,e):-Ct(t,e),At(r,t,n);return r}function Tt(t,e){return r.Z(t.nodes(),(function n(i){r.Z(e.nodeEdges(i),(function(r){var a=r.v,s=i===a?r.w:a;t.hasNode(s)||Ct(e,r)||(t.setNode(s,{}),t.setEdge(i,s,{}),n(s))}))})),t.nodeCount()}function St(t,e){return kt(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return Ct(e,n)}))}function At(t,e,n){r.Z(t.nodes(),(function(t){e.node(t).rank+=n}))}var Lt=n(585),Bt=n(7179);const Nt=function(t){return function(e,n,r){var i=Object(e);if(!(0,Lt.Z)(e)){var a=(0,tt.Z)(n,3);e=(0,Bt.Z)(e),n=function(t){return a(i[t],t,i)}}var s=t(e,n,r);return s>-1?i[a?e[s]:s]:void 0}};var Dt=n(1692),Ot=n(4099);const Mt=function(t){var e=(0,Ot.Z)(t),n=e%1;return e==e?n?e-n:e:0};var It=Math.max;const Ft=Nt((function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Mt(n);return i<0&&(i=It(r+i,0)),(0,Dt.Z)(t,(0,tt.Z)(e,3),i)}));var $t=n(3445);s.Z(1);s.Z(1);n(5154),n(3970),n(3589),n(8533);(0,n(4193).Z)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Rt="\\ud800-\\udfff",Zt="["+Rt+"]",Pt="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",jt="\\ud83c[\\udffb-\\udfff]",Yt="[^"+Rt+"]",zt="(?:\\ud83c[\\udde6-\\uddff]){2}",Ut="[\\ud800-\\udbff][\\udc00-\\udfff]",Wt="(?:"+Pt+"|"+jt+")"+"?",Ht="[\\ufe0e\\ufe0f]?",qt=Ht+Wt+("(?:\\u200d(?:"+[Yt,zt,Ut].join("|")+")"+Ht+Wt+")*"),Vt="(?:"+[Yt+Pt+"?",Pt,zt,Ut,Zt].join("|")+")";RegExp(jt+"(?="+jt+")|"+Vt+qt,"g");function Gt(){}function Xt(t,e,n){L.Z(e)||(e=[e]);var i=(t.isDirected()?t.successors:t.neighbors).bind(t),a=[],s={};return r.Z(e,(function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);Qt(t,e,"post"===n,s,i,a)})),a}function Qt(t,e,n,i,s,o){a.Z(i,e)||(i[e]=!0,n||o.push(e),r.Z(s(e),(function(e){Qt(t,e,n,i,s,o)})),n&&o.push(e))}Gt.prototype=new Error;n(2544);function Kt(t){t=function(t){var e=(new h.k).setGraph(t.graph());return r.Z(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.Z(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e}(t),wt(t);var e,n=Et(t);for(ee(n),Jt(n,t);e=re(n);)ae(n,t,e,ie(n,t,e))}function Jt(t,e){var n=function(t,e){return Xt(t,e,"post")}(t,t.nodes());n=n.slice(0,n.length-1),r.Z(n,(function(n){!function(t,e,n){var r=t.node(n),i=r.parent;t.edge(n,i).cutvalue=te(t,e,n)}(t,e,n)}))}function te(t,e,n){var i=t.node(n).parent,a=!0,s=e.edge(n,i),o=0;return s||(a=!1,s=e.edge(i,n)),o=s.weight,r.Z(e.nodeEdges(n),(function(r){var s,c,l=r.v===n,h=l?r.w:r.v;if(h!==i){var u=l===a,d=e.edge(r).weight;if(o+=u?d:-d,s=n,c=h,t.hasEdge(s,c)){var p=t.edge(n,h).cutvalue;o+=u?-p:p}}})),o}function ee(t,e){arguments.length<2&&(e=t.nodes()[0]),ne(t,{},1,e)}function ne(t,e,n,i,s){var o=n,c=t.node(i);return e[i]=!0,r.Z(t.neighbors(i),(function(r){a.Z(e,r)||(n=ne(t,e,n,r,i))})),c.low=o,c.lim=n++,s?c.parent=s:delete c.parent,n}function re(t){return Ft(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function ie(t,e,n){var r=n.v,i=n.w;e.hasEdge(r,i)||(r=n.w,i=n.v);var a=t.node(r),s=t.node(i),o=a,c=!1;a.lim>s.lim&&(o=s,c=!0);var l=$t.Z(e.edges(),(function(e){return c===se(t,t.node(e.v),o)&&c!==se(t,t.node(e.w),o)}));return kt(l,(function(t){return Ct(e,t)}))}function ae(t,e,n,i){var a=n.v,s=n.w;t.removeEdge(a,s),t.setEdge(i.v,i.w,{}),ee(t),Jt(t,e),function(t,e){var n=Ft(t.nodes(),(function(t){return!e.node(t).parent})),i=function(t,e){return Xt(t,e,"pre")}(t,n);i=i.slice(1),r.Z(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function se(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}function oe(t){switch(t.graph().ranker){case"network-simplex":default:le(t);break;case"tight-tree":!function(t){wt(t),Et(t)}(t);break;case"longest-path":ce(t)}}Kt.initLowLimValues=ee,Kt.initCutValues=Jt,Kt.calcCutValue=te,Kt.leaveEdge=re,Kt.enterEdge=ie,Kt.exchangeEdges=ae;var ce=wt;function le(t){Kt(t)}var he=n(4148),ue=n(2344);function de(t){var e=ot(t,"root",{},"_root"),n=function(t){var e={};function n(i,a){var s=t.children(i);s&&s.length&&r.Z(s,(function(t){n(t,a+1)})),e[i]=a}return r.Z(t.children(),(function(t){n(t,1)})),e}(t),i=Q(he.Z(n))-1,a=2*i+1;t.graph().nestingRoot=e,r.Z(t.edges(),(function(e){t.edge(e).minlen*=a}));var s=function(t){return ue.Z(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;r.Z(t.children(),(function(r){pe(t,e,a,s,i,n,r)})),t.graph().nodeRankFactor=a}function pe(t,e,n,i,a,s,o){var c=t.children(o);if(c.length){var l=ut(t,"_bt"),h=ut(t,"_bb"),u=t.node(o);t.setParent(l,o),u.borderTop=l,t.setParent(h,o),u.borderBottom=h,r.Z(c,(function(r){pe(t,e,n,i,a,s,r);var c=t.node(r),u=c.borderTop?c.borderTop:r,d=c.borderBottom?c.borderBottom:r,p=c.borderTop?i:2*i,f=u!==d?1:a-s[o]+1;t.setEdge(l,u,{weight:p,minlen:f,nestingEdge:!0}),t.setEdge(d,h,{weight:p,minlen:f,nestingEdge:!0})})),t.parent(o)||t.setEdge(e,l,{weight:0,minlen:a+s[o]})}else o!==e&&t.setEdge(e,o,{weight:0,minlen:n})}var fe=n(8451);const ge=function(t){return(0,fe.Z)(t,5)};function ye(t,e,n){var s=function(t){var e;for(;t.hasNode(e=i.Z("_root")););return e}(t),o=new h.k({compound:!0}).setGraph({root:s}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.Z(t.nodes(),(function(i){var c=t.node(i),l=t.parent(i);(c.rank===e||c.minRank<=e&&e<=c.maxRank)&&(o.setNode(i),o.setParent(i,l||s),r.Z(t[n](i),(function(e){var n=e.v===i?e.w:e.v,r=o.edge(n,i),a=nt.Z(r)?0:r.weight;o.setEdge(n,i,{weight:t.edge(e).weight+a})})),a.Z(c,"minRank")&&o.setNode(i,{borderLeft:c.borderLeft[e],borderRight:c.borderRight[e]}))})),o}var me=n(2954);const be=function(t,e,n){for(var r=-1,i=t.length,a=e.length,s={};++r<i;){var o=r<a?e[r]:void 0;n(s,t[r],o)}return s};const _e=function(t,e){return be(t||[],e||[],me.Z)};var xe=n(3779),ve=n(4073),ke=n(3317),we=n(1018);const Ce=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t};var Ee=n(1162);const Te=function(t,e){if(t!==e){var n=void 0!==t,r=null===t,i=t==t,a=(0,q.Z)(t),s=void 0!==e,o=null===e,c=e==e,l=(0,q.Z)(e);if(!o&&!l&&!a&&t>e||a&&s&&c&&!o&&!l||r&&s&&c||!n&&c||!i)return 1;if(!r&&!a&&!l&&t<e||l&&n&&i&&!r&&!a||o&&n&&i||!s&&i||!c)return-1}return 0};const Se=function(t,e,n){for(var r=-1,i=t.criteria,a=e.criteria,s=i.length,o=n.length;++r<s;){var c=Te(i[r],a[r]);if(c)return r>=o?c:c*("desc"==n[r]?-1:1)}return t.index-e.index};const Ae=function(t,e,n){e=e.length?(0,ve.Z)(e,(function(t){return(0,L.Z)(t)?function(e){return(0,ke.Z)(e,1===t.length?t[0]:t)}:t})):[X.Z];var r=-1;e=(0,ve.Z)(e,(0,Ee.Z)(tt.Z));var i=(0,we.Z)(t,(function(t,n,i){return{criteria:(0,ve.Z)(e,(function(e){return e(t)})),index:++r,value:t}}));return Ce(i,(function(t,e){return Se(t,e,n)}))};const Le=(0,Y.Z)((function(t,e){if(null==t)return[];var n=e.length;return n>1&&(0,z.Z)(t,e[0],e[1])?e=[]:n>2&&(0,z.Z)(e[0],e[1],e[2])&&(e=[e[0]]),Ae(t,(0,xe.Z)(e,1),[])}));function Be(t,e){for(var n=0,r=1;r<e.length;++r)n+=Ne(t,e[r-1],e[r]);return n}function Ne(t,e,n){for(var i=_e(n,c.Z(n,(function(t,e){return e}))),a=o.Z(c.Z(e,(function(e){return Le(c.Z(t.outEdges(e),(function(e){return{pos:i[e.w],weight:t.edge(e).weight}})),"pos")}))),s=1;s<n.length;)s<<=1;var l=2*s-1;s-=1;var h=c.Z(new Array(l),(function(){return 0})),u=0;return r.Z(a.forEach((function(t){var e=t.pos+s;h[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=h[e+1]),h[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}function De(t,e){var n={};return r.Z(t,(function(t,e){var r=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};nt.Z(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)})),r.Z(e.edges(),(function(t){var e=n[t.v],r=n[t.w];nt.Z(e)||nt.Z(r)||(r.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){e.merged||(nt.Z(e.barycenter)||nt.Z(t.barycenter)||e.barycenter>=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.Z(a.in.reverse(),n(a)),r.Z(a.out,i(a))}return c.Z($t.Z(e,(function(t){return!t.merged})),(function(t){return W.Z(t,["vs","i","barycenter","weight"])}))}($t.Z(n,(function(t){return!t.indegree})))}function Oe(t,e){var n,i=function(t,e){var n={lhs:[],rhs:[]};return r.Z(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n}(t,(function(t){return a.Z(t,"barycenter")})),s=i.lhs,c=Le(i.rhs,(function(t){return-t.i})),l=[],h=0,u=0,d=0;s.sort((n=!!e,function(t,e){return t.barycenter<e.barycenter?-1:t.barycenter>e.barycenter?1:n?e.i-t.i:t.i-e.i})),d=Me(l,c,d),r.Z(s,(function(t){d+=t.vs.length,l.push(t.vs),h+=t.barycenter*t.weight,u+=t.weight,d=Me(l,c,d)}));var p={vs:o.Z(l)};return u&&(p.barycenter=h/u,p.weight=u),p}function Me(t,e,n){for(var r;e.length&&(r=K(e)).i<=n;)e.pop(),t.push(r.vs),n++;return n}function Ie(t,e,n,i){var s=t.children(e),l=t.node(e),h=l?l.borderLeft:void 0,u=l?l.borderRight:void 0,d={};h&&(s=$t.Z(s,(function(t){return t!==h&&t!==u})));var p=function(t,e){return c.Z(e,(function(e){var n=t.inEdges(e);if(n.length){var r=ue.Z(n,(function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}}))}(t,s);r.Z(p,(function(e){if(t.children(e.v).length){var r=Ie(t,e.v,n,i);d[e.v]=r,a.Z(r,"barycenter")&&(s=e,o=r,nt.Z(s.barycenter)?(s.barycenter=o.barycenter,s.weight=o.weight):(s.barycenter=(s.barycenter*s.weight+o.barycenter*o.weight)/(s.weight+o.weight),s.weight+=o.weight))}var s,o}));var f=De(p,n);!function(t,e){r.Z(t,(function(t){t.vs=o.Z(t.vs.map((function(t){return e[t]?e[t].vs:t})))}))}(f,d);var g=Oe(f,i);if(h&&(g.vs=o.Z([h,g.vs,u]),t.predecessors(h).length)){var y=t.node(t.predecessors(h)[0]),m=t.node(t.predecessors(u)[0]);a.Z(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+y.order+m.order)/(g.weight+2),g.weight+=2}return g}function Fe(t){var e=dt(t),n=$e(t,l.Z(1,e+1),"inEdges"),i=$e(t,l.Z(e-1,-1,-1),"outEdges"),s=function(t){var e={},n=$t.Z(t.nodes(),(function(e){return!t.children(e).length})),i=Q(c.Z(n,(function(e){return t.node(e).rank}))),s=c.Z(l.Z(i+1),(function(){return[]})),o=Le(n,(function(e){return t.node(e).rank}));return r.Z(o,(function n(i){if(!a.Z(e,i)){e[i]=!0;var o=t.node(i);s[o.rank].push(i),r.Z(t.successors(i),n)}})),s}(t);Ze(t,s);for(var o,h=Number.POSITIVE_INFINITY,u=0,d=0;d<4;++u,++d){Re(u%2?n:i,u%4>=2);var p=Be(t,s=ht(t));p<h&&(d=0,o=ge(s),h=p)}Ze(t,o)}function $e(t,e,n){return c.Z(e,(function(e){return ye(t,e,n)}))}function Re(t,e){var n=new h.k;r.Z(t,(function(t){var i=t.graph().root,a=Ie(t,i,n,e);r.Z(a.vs,(function(e,n){t.node(e).order=n})),function(t,e,n){var i,a={};r.Z(n,(function(n){for(var r,s,o=t.parent(n);o;){if((r=t.parent(o))?(s=a[r],a[r]=o):(s=i,i=o),s&&s!==o)return void e.setEdge(s,o);o=r}}))}(t,n,a.vs)}))}function Ze(t,e){r.Z(e,(function(e){r.Z(e,(function(e,n){t.node(e).order=n}))}))}function Pe(t){var e=function(t){var e={},n=0;function i(a){var s=n;r.Z(t.children(a),i),e[a]={low:s,lim:n++}}return r.Z(t.children(),i),e}(t);r.Z(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,s=[],o=[],c=Math.min(e[n].low,e[r].low),l=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),s.push(i)}while(i&&(e[i].low>c||l>e[i].lim));a=i,i=r;for(;(i=t.parent(i))!==a;)o.push(i);return{path:s.concat(o.reverse()),lca:a}}(t,e,i.v,i.w),s=a.path,o=a.lca,c=0,l=s[c],h=!0;n!==i.w;){if(r=t.node(n),h){for(;(l=s[c])!==o&&t.node(l).maxRank<r.rank;)c++;l===o&&(h=!1)}if(!h){for(;c<s.length-1&&t.node(l=s[c+1]).minRank<=r.rank;)c++;l=s[c]}t.setParent(n,l),n=t.successors(n)[0]}}))}var je=n(8882);const Ye=function(t,e){return null==t?t:(0,w.Z)(t,(0,je.Z)(e),R.Z)};function ze(t,e){var n={};return ue.Z(e,(function(e,i){var a=0,s=0,o=e.length,c=K(i);return r.Z(i,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return Ft(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),u=h?t.node(h).order:o;(h||e===c)&&(r.Z(i.slice(s,l+1),(function(e){r.Z(t.predecessors(e),(function(r){var i=t.node(r),s=i.order;!(s<a||u<s)||i.dummy&&t.node(e).dummy||Ue(n,r,e)}))})),s=l+1,a=u)})),i})),n}function Ue(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function We(t,e,n){if(e>n){var r=e;e=n,n=r}return a.Z(t[e],n)}function He(t,e,n,i,s){var o={},c=function(t,e,n,i){var s=new h.k,o=t.graph(),c=function(t,e,n){return function(r,i,s){var o,c=r.node(i),l=r.node(s),h=0;if(h+=c.width/2,a.Z(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":o=-c.width/2;break;case"r":o=c.width/2}if(o&&(h+=n?o:-o),o=0,h+=(c.dummy?e:t)/2,h+=(l.dummy?e:t)/2,h+=l.width/2,a.Z(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":o=l.width/2;break;case"r":o=-l.width/2}return o&&(h+=n?o:-o),o=0,h}}(o.nodesep,o.edgesep,i);return r.Z(e,(function(e){var i;r.Z(e,(function(e){var r=n[e];if(s.setNode(r),i){var a=n[i],o=s.edge(a,r);s.setEdge(a,r,Math.max(c(t,e,i),o||0))}i=e}))})),s}(t,e,n,s),l=s?"borderLeft":"borderRight";function u(t,e){for(var n=c.nodes(),r=n.pop(),i={};r;)i[r]?t(r):(i[r]=!0,n.push(r),n=n.concat(e(r))),r=n.pop()}return u((function(t){o[t]=c.inEdges(t).reduce((function(t,e){return Math.max(t,o[e.v]+c.edge(e))}),0)}),c.predecessors.bind(c)),u((function(e){var n=c.outEdges(e).reduce((function(t,e){return Math.min(t,o[e.w]-c.edge(e))}),Number.POSITIVE_INFINITY),r=t.node(e);n!==Number.POSITIVE_INFINITY&&r.borderType!==l&&(o[e]=Math.max(o[e],n))}),c.successors.bind(c)),r.Z(i,(function(t){o[t]=o[n[t]]})),o}function qe(t){var e,n=ht(t),i=U(ze(t,n),function(t,e){var n={};function i(e,i,a,s,o){var c;r.Z(l.Z(i,a),(function(i){c=e[i],t.node(c).dummy&&r.Z(t.predecessors(c),(function(e){var r=t.node(e);r.dummy&&(r.order<s||r.order>o)&&Ue(n,e,c)}))}))}return ue.Z(e,(function(e,n){var a,s=-1,o=0;return r.Z(n,(function(r,c){if("border"===t.node(r).dummy){var l=t.predecessors(r);l.length&&(a=t.node(l[0]).order,i(n,o,c,s,a),o=c,s=a)}i(n,o,n.length,a,e.length)})),n})),n}(t,n)),a={};r.Z(["u","d"],(function(s){e="u"===s?n:he.Z(n).reverse(),r.Z(["l","r"],(function(n){"r"===n&&(e=c.Z(e,(function(t){return he.Z(t).reverse()})));var o=("u"===s?t.predecessors:t.successors).bind(t),l=function(t,e,n,i){var a={},s={},o={};return r.Z(e,(function(t){r.Z(t,(function(t,e){a[t]=t,s[t]=t,o[t]=e}))})),r.Z(e,(function(t){var e=-1;r.Z(t,(function(t){var r=i(t);if(r.length){r=Le(r,(function(t){return o[t]}));for(var c=(r.length-1)/2,l=Math.floor(c),h=Math.ceil(c);l<=h;++l){var u=r[l];s[t]===t&&e<o[u]&&!We(n,t,u)&&(s[u]=t,s[t]=a[t]=a[u],e=o[u])}}}))})),{root:a,align:s}}(0,e,i,o),h=He(t,e,l.root,l.align,"r"===n);"r"===n&&(h=et(h,(function(t){return-t}))),a[s+n]=h}))}));var s=function(t,e){return kt(he.Z(e),(function(e){var n=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY;return Ye(e,(function(e,i){var a=function(t,e){return t.node(e).width}(t,i)/2;n=Math.max(e+a,n),r=Math.min(e-a,r)})),n-r}))}(t,a);return function(t,e){var n=he.Z(e),i=it(n),a=Q(n);r.Z(["u","d"],(function(n){r.Z(["l","r"],(function(r){var s,o=n+r,c=t[o];if(c!==e){var l=he.Z(c);(s="l"===r?i-it(l):a-Q(l))&&(t[o]=et(c,(function(t){return t+s})))}}))}))}(a,s),function(t,e){return et(t.ul,(function(n,r){if(e)return t[e.toLowerCase()][r];var i=Le(c.Z(t,r));return(i[1]+i[2])/2}))}(a,t.graph().align)}function Ve(t){(function(t){var e=ht(t),n=t.graph().ranksep,i=0;r.Z(e,(function(e){var a=Q(c.Z(e,(function(e){return t.node(e).height})));r.Z(e,(function(e){t.node(e).y=i+a/2})),i+=a+n}))})(t=ct(t)),r.Z(qe(t),(function(e,n){t.node(n).x=e}))}function Ge(t,e){var n=e&&e.debugTiming?pt:ft;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new h.k({multigraph:!0,compound:!0}),n=sn(t.graph());return e.setGraph(U({},Qe,an(n,Xe),W.Z(n,Ke))),r.Z(t.nodes(),(function(n){var r=sn(t.node(n));e.setNode(n,H.Z(an(r,Je),tn)),e.setParent(n,t.parent(n))})),r.Z(t.edges(),(function(n){var r=sn(t.edge(n));e.setEdge(n,U({},nn,an(r,en),W.Z(r,rn)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.Z(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.Z(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){b(t)})),e(" nestingGraph.run",(function(){de(t)})),e(" rank",(function(){oe(ct(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.Z(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};ot(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){!function(t){var e=it(c.Z(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.Z(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.Z(n,(function(e,n){nt.Z(e)&&n%a!=0?--i:i&&r.Z(e,(function(e){t.node(e).rank+=i}))}))}(t)})),e(" nestingGraph.cleanup",(function(){!function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,r.Z(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}(t)})),e(" normalizeRanks",(function(){!function(t){var e=it(c.Z(t.nodes(),(function(e){return t.node(e).rank})));r.Z(t.nodes(),(function(n){var r=t.node(n);a.Z(r,"rank")&&(r.rank-=e)}))}(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.Z(t.nodes(),(function(n){var r=t.node(n);r.borderTop&&(r.minRank=t.node(r.borderTop).rank,r.maxRank=t.node(r.borderBottom).rank,e=Q(e,r.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.Z(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){vt(t)})),e(" parentDummyChains",(function(){Pe(t)})),e(" addBorderSegments",(function(){!function(t){r.Z(t.children(),(function e(n){var i=t.children(n),s=t.node(n);if(i.length&&r.Z(i,e),a.Z(s,"minRank")){s.borderLeft=[],s.borderRight=[];for(var o=s.minRank,c=s.maxRank+1;o<c;++o)gt(t,"borderLeft","_bl",n,s,o),gt(t,"borderRight","_br",n,s,o)}}))}(t)})),e(" order",(function(){Fe(t)})),e(" insertSelfEdges",(function(){!function(t){var e=ht(t);r.Z(e,(function(e){var n=0;r.Z(e,(function(e,i){var a=t.node(e);a.order=i+n,r.Z(a.selfEdges,(function(e){ot(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){!function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||mt(t)}(t)})),e(" position",(function(){Ve(t)})),e(" positionSelfEdges",(function(){!function(t){r.Z(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,s=n.x-i,o=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*s/3,y:a-o},{x:i+5*s/6,y:a-o},{x:i+s,y:a},{x:i+5*s/6,y:a+o},{x:i+2*s/3,y:a+o}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.Z(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),r=t.node(n.borderTop),i=t.node(n.borderBottom),a=t.node(K(n.borderLeft)),s=t.node(K(n.borderRight));n.width=Math.abs(s.x-a.x),n.height=Math.abs(i.y-r.y),n.x=a.x+n.width/2,n.y=r.y+n.height/2}})),r.Z(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){!function(t){r.Z(t.graph().dummyChains,(function(e){var n,r=t.node(e),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)n=t.successors(e)[0],t.removeNode(e),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),e=n,r=t.node(e)}))}(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.Z(t.edges(),(function(e){var n=t.edge(e);if(a.Z(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){yt(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,s=0,o=t.graph(),c=o.marginx||0,l=o.marginy||0;function h(t){var r=t.x,a=t.y,o=t.width,c=t.height;e=Math.min(e,r-o/2),n=Math.max(n,r+o/2),i=Math.min(i,a-c/2),s=Math.max(s,a+c/2)}r.Z(t.nodes(),(function(e){h(t.node(e))})),r.Z(t.edges(),(function(e){var n=t.edge(e);a.Z(n,"x")&&h(n)})),e-=c,i-=l,r.Z(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.Z(t.edges(),(function(n){var s=t.edge(n);r.Z(s.points,(function(t){t.x-=e,t.y-=i})),a.Z(s,"x")&&(s.x-=e),a.Z(s,"y")&&(s.y-=i)})),o.width=n-e+c,o.height=s-i+l}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.Z(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),s=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=s,r=a),i.points.unshift(lt(a,n)),i.points.push(lt(s,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.Z(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){!function(t){r.Z(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}}))}(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.Z(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.Z(t.edges(),(function(n){var r=t.edge(n),i=e.edge(n);r.points=i.points,a.Z(i,"x")&&(r.x=i.x,r.y=i.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))}var Xe=["nodesep","edgesep","ranksep","marginx","marginy"],Qe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},Ke=["acyclicer","ranker","rankdir","align"],Je=["width","height"],tn={width:0,height:0},en=["minlen","weight","width","height","labeloffset"],nn={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},rn=["labelpos"];function an(t,e){return et(W.Z(t,e),Number)}function sn(t){var e={};return r.Z(t,(function(t,n){e[n.toLowerCase()]=t})),e}},2544:(t,e,n)=>{"use strict";n.d(e,{k:()=>M});var r=n(7452),i=n(2002),a=n(3234),s=n(7179),o=n(3445),c=n(9697),l=n(870),h=n(9360),u=n(3779),d=n(9581),p=n(3001),f=n(1692);const g=function(t){return t!=t};const y=function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1};const m=function(t,e,n){return e==e?y(t,e,n):(0,f.Z)(t,g,n)};const b=function(t,e){return!!(null==t?0:t.length)&&m(t,e,0)>-1};const _=function(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1};var x=n(9548),v=n(3203);const k=function(){};var w=n(6545),C=v.Z&&1/(0,w.Z)(new v.Z([,-0]))[1]==1/0?function(t){return new v.Z(t)}:k;const E=C;const T=function(t,e,n){var r=-1,i=b,a=t.length,s=!0,o=[],c=o;if(n)s=!1,i=_;else if(a>=200){var l=e?null:E(t);if(l)return(0,w.Z)(l);s=!1,i=x.Z,c=new p.Z}else c=e?[]:o;t:for(;++r<a;){var h=t[r],u=e?e(h):h;if(h=n||0!==h?h:0,s&&u==u){for(var d=c.length;d--;)if(c[d]===u)continue t;e&&c.push(u),o.push(h)}else i(c,u,n)||(c!==o&&c.push(u),o.push(h))}return o};var S=n(836);const A=(0,d.Z)((function(t){return T((0,u.Z)(t,1,S.Z,!0))}));var L=n(4148),B=n(2344),N="\0",D="\0",O="\x01";class M{constructor(t={}){this._isDirected=!r.Z(t,"directed")||t.directed,this._isMultigraph=!!r.Z(t,"multigraph")&&t.multigraph,this._isCompound=!!r.Z(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=i.Z(void 0),this._defaultEdgeLabelFn=i.Z(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[D]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(t){return this._label=t,this}graph(){return this._label}setDefaultNodeLabel(t){return a.Z(t)||(t=i.Z(t)),this._defaultNodeLabelFn=t,this}nodeCount(){return this._nodeCount}nodes(){return s.Z(this._nodes)}sources(){var t=this;return o.Z(this.nodes(),(function(e){return c.Z(t._in[e])}))}sinks(){var t=this;return o.Z(this.nodes(),(function(e){return c.Z(t._out[e])}))}setNodes(t,e){var n=arguments,r=this;return l.Z(t,(function(t){n.length>1?r.setNode(t,e):r.setNode(t)})),this}setNode(t,e){return r.Z(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]=D,this._children[t]={},this._children[D][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.Z(this._nodes,t)}removeNode(t){var e=this;if(r.Z(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],l.Z(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),l.Z(s.Z(this._in[t]),n),delete this._in[t],delete this._preds[t],l.Z(s.Z(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(h.Z(e))e=D;else{for(var n=e+="";!h.Z(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!==D)return e}}children(t){if(h.Z(t)&&(t=D),this._isCompound){var e=this._children[t];if(e)return s.Z(e)}else{if(t===D)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.Z(e)}successors(t){var e=this._sucs[t];if(e)return s.Z(e)}neighbors(t){var e=this.predecessors(t);if(e)return A(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;l.Z(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),l.Z(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var r={};function i(t){var a=n.parent(t);return void 0===a||e.hasNode(a)?(r[t]=a,a):a in r?r[a]:i(a)}return this._isCompound&&l.Z(e.nodes(),(function(t){e.setParent(t,i(t))})),e}setDefaultEdgeLabel(t){return a.Z(t)||(t=i.Z(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return L.Z(this._edgeObjs)}setPath(t,e){var n=this,r=arguments;return B.Z(t,(function(t,i){return r.length>1?n.setEdge(t,i,e):n.setEdge(t,i),i})),this}setEdge(){var t,e,n,i,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(i=arguments[1],a=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),t=""+t,e=""+e,h.Z(n)||(n=""+n);var o=$(this._isDirected,t,e,n);if(r.Z(this._edgeLabels,o))return a&&(this._edgeLabels[o]=i),this;if(!h.Z(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[o]=a?i:this._defaultEdgeLabelFn(t,e,n);var c=function(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var s=i;i=a,a=s}var o={v:i,w:a};r&&(o.name=r);return o}(this._isDirected,t,e,n);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[o]=c,I(this._preds[e],t),I(this._sucs[t],e),this._in[e][o]=c,this._out[t][o]=c,this._edgeCount++,this}edge(t,e,n){var r=1===arguments.length?R(this._isDirected,arguments[0]):$(this._isDirected,t,e,n);return this._edgeLabels[r]}hasEdge(t,e,n){var i=1===arguments.length?R(this._isDirected,arguments[0]):$(this._isDirected,t,e,n);return r.Z(this._edgeLabels,i)}removeEdge(t,e,n){var r=1===arguments.length?R(this._isDirected,arguments[0]):$(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],F(this._preds[e],t),F(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=L.Z(n);return e?o.Z(r,(function(t){return t.v===e})):r}}outEdges(t,e){var n=this._out[t];if(n){var r=L.Z(n);return e?o.Z(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 I(t,e){t[e]?t[e]++:t[e]=1}function F(t,e){--t[e]||delete t[e]}function $(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var s=i;i=a,a=s}return i+O+a+O+(h.Z(r)?N:r)}function R(t,e){return $(t,e.v,e.w,e.name)}M.prototype._nodeCount=0,M.prototype._edgeCount=0},5625:(t,e,n)=>{"use strict";n.d(e,{k:()=>r.k});var r=n(2544)},9354:(t,e,n)=>{"use strict";n.d(e,{c:()=>o});var r=n(9360),i=n(8451);const a=function(t){return(0,i.Z)(t,4)};var s=n(3836);n(2544);function o(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:c(t),edges:l(t)};return r.Z(t.graph())||(e.value=a(t.graph())),e}function c(t){return s.Z(t.nodes(),(function(e){var n=t.node(e),i=t.parent(e),a={v:e};return r.Z(n)||(a.value=n),r.Z(i)||(a.parent=i),a}))}function l(t){return s.Z(t.edges(),(function(e){var n=t.edge(e),i={v:e.v,w:e.w};return r.Z(e.name)||(i.name=e.name),r.Z(n)||(i.value=n),i}))}},1518:(t,e,n)=>{"use strict";n.d(e,{sY:()=>E});var r=n(9373),i=n(7452),a=n(3688),s=n(870),o=n(277),c=n(6225),l={normal:function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");c.bg(i,n[r+"Style"]),n[r+"Class"]&&i.attr("class",n[r+"Class"])},vee:function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");c.bg(i,n[r+"Style"]),n[r+"Class"]&&i.attr("class",n[r+"Class"])},undirected:function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");c.bg(i,n[r+"Style"]),n[r+"Class"]&&i.attr("class",n[r+"Class"])}};var h=n(3349);function u(t,e,n){var r=e.label,i=t.append("g");"svg"===e.labelType?function(t,e){var n=t;n.node().appendChild(e.label),c.bg(n,e.labelStyle)}(i,e):"string"!=typeof r||"html"===e.labelType?(0,h.a)(i,e):function(t,e){for(var n=t.append("text"),r=function(t){for(var e,n="",r=!1,i=0;i<t.length;++i)e=t[i],r?(n+="n"===e?"\n":e,r=!1):"\\"===e?r=!0:n+=e;return n}(e.label).split("\n"),i=0;i<r.length;i++)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(r[i]);c.bg(n,e.labelStyle)}(i,e);var a,s=i.node().getBBox();switch(n){case"top":a=-e.height/2;break;case"bottom":a=e.height/2-s.height;break;default:a=-s.height/2}return i.attr("transform","translate("+-s.width/2+","+a+")"),i}var d=function(t,e){var n=e.nodes().filter((function(t){return c.bF(e,t)})),i=t.selectAll("g.cluster").data(n,(function(t){return t}));c.WR(i.exit(),e).style("opacity",0).remove();var a=i.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0).each((function(t){var n=e.node(t),i=r.Ys(this);r.Ys(this).append("rect"),u(i.append("g").attr("class","label"),n,n.clusterLabelPos)}));return i=i.merge(a),(i=c.WR(i,e).style("opacity",1)).selectAll("rect").each((function(t){var n=e.node(t),i=r.Ys(this);c.bg(i,n.style)})),i};let p=function(t,e){var n,a=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return c.O1(t)})).classed("update",!0);return a.exit().remove(),a.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(a=t.selectAll("g.edgeLabel")).each((function(t){var n=r.Ys(this);n.select(".label").remove();var a=e.edge(t),s=u(n,e.edge(t),0).classed("label",!0),o=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),i.Z(a,"width")||(a.width=o.width),i.Z(a,"height")||(a.height=o.height)})),n=a.exit?a.exit():a.selectAll(null),c.WR(n,e).style("opacity",0).remove(),a};var f=n(6749),g=n(4379);function y(t,e){return t.intersect(e)}var m=function(t,e,n){var i=t.selectAll("g.edgePath").data(e.edges(),(function(t){return c.O1(t)})).classed("update",!0),a=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),r=e.node(t.v).elem;return b(n,g.Z(n.points.length).map((function(){return e=(t=r).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(i,e);!function(t,e){var n=t.exit();c.WR(n,e).style("opacity",0).remove()}(i,e);var s=void 0!==i.merge?i.merge(a):i;return c.WR(s,e).style("opacity",1),s.each((function(t){var n=r.Ys(this),i=e.edge(t);i.elem=this,i.id&&n.attr("id",i.id),c.$p(n,i.class,(n.classed("update")?"update ":"")+"edgePath")})),s.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=f.Z("arrowhead");var i=r.Ys(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");c.WR(i,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),i=t.node(e.w),a=n.points.slice(1,n.points.length-1);return a.unshift(y(r,a[0])),a.push(y(i,a[a.length-1])),b(n,a)}(e,t)})),c.bg(i,n.style)})),s.selectAll("defs *").remove(),s.selectAll("defs").each((function(t){var i=e.edge(t);(0,n[i.arrowhead])(r.Ys(this),i.arrowheadId,i,"arrowhead")})),s};function b(t,e){var n=(r.jvg||r.YPS.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}var _=n(1666),x=function(t,e,n){var a,s=e.nodes().filter((function(t){return!c.bF(e,t)})),o=t.selectAll("g.node").data(s,(function(t){return t})).classed("update",!0);return o.exit().remove(),o.enter().append("g").attr("class","node").style("opacity",0),(o=t.selectAll("g.node")).each((function(t){var a=e.node(t),s=r.Ys(this);c.$p(s,a.class,(s.classed("update")?"update ":"")+"node"),s.select("g.label").remove();var o=s.append("g").attr("class","label"),l=u(o,a),h=n[a.shape],d=_.Z(l.node().getBBox(),"width","height");a.elem=this,a.id&&s.attr("id",a.id),a.labelId&&o.attr("id",a.labelId),i.Z(a,"width")&&(d.width=a.width),i.Z(a,"height")&&(d.height=a.height),d.width+=a.paddingLeft+a.paddingRight,d.height+=a.paddingTop+a.paddingBottom,o.attr("transform","translate("+(a.paddingLeft-a.paddingRight)/2+","+(a.paddingTop-a.paddingBottom)/2+")");var p=r.Ys(this);p.select(".label-container").remove();var f=h(p,d,a).classed("label-container",!0);c.bg(f,a.style);var g=f.node().getBBox();a.width=g.width,a.height=g.height})),a=o.exit?o.exit():o.selectAll(null),c.WR(a,e).style("opacity",0).remove(),o};function v(t,e,n,r){var i=t.x,a=t.y,s=i-r.x,o=a-r.y,c=Math.sqrt(e*e*o*o+n*n*s*s),l=Math.abs(e*n*s/c);r.x<i&&(l=-l);var h=Math.abs(e*n*o/c);return r.y<a&&(h=-h),{x:i+l,y:a+h}}var k=n(3352),w=n(2930),C={rect:function(t,e,n){var r=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return(0,w.q)(n,t)},r},ellipse:function(t,e,n){var r=e.width/2,i=e.height/2,a=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",i);return n.intersect=function(t){return v(n,r,i,t)},a},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return function(t,e,n){return v(t,e,e,n)}(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return(0,k.A)(n,a,t)},s}};function E(){var t=function(t,e){!function(t){t.nodes().forEach((function(e){var n=t.node(e);i.Z(n,"label")||t.children(e).length||(n.label=e),i.Z(n,"paddingX")&&a.Z(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),i.Z(n,"paddingY")&&a.Z(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),i.Z(n,"padding")&&a.Z(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),a.Z(n,T),s.Z(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),i.Z(n,"width")&&(n._prevWidth=n.width),i.Z(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);i.Z(n,"label")||(n.label=""),a.Z(n,S)}))}(e);var n=A(t,"output"),h=A(n,"clusters"),u=A(n,"edgePaths"),f=p(A(n,"edgeLabels"),e),g=x(A(n,"nodes"),e,C);(0,o.bK)(e),function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!r.Ys(this).classed("update")})).attr("transform",n),c.WR(t,e).style("opacity",1).attr("transform",n)}(g,e),function(t,e){function n(t){var n=e.edge(t);return i.Z(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!r.Ys(this).classed("update")})).attr("transform",n),c.WR(t,e).style("opacity",1).attr("transform",n)}(f,e),m(u,e,l),function(t,e){var n=t.filter((function(){return!r.Ys(this).classed("update")}));function i(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",i),c.WR(t,e).style("opacity",1).attr("transform",i),c.WR(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}(d(h,e),e),function(t){s.Z(t.nodes(),(function(e){var n=t.node(e);i.Z(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,i.Z(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(e)};return t.createNodes=function(e){return arguments.length?(function(t){x=t}(e),t):x},t.createClusters=function(e){return arguments.length?(function(t){d=t}(e),t):d},t.createEdgeLabels=function(e){return arguments.length?(function(t){p=t}(e),t):p},t.createEdgePaths=function(e){return arguments.length?(function(t){m=t}(e),t):m},t.shapes=function(e){return arguments.length?(function(t){C=t}(e),t):C},t.arrows=function(e){return arguments.length?(function(t){l=t}(e),t):l},t}var T={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},S={arrowhead:"normal",curve:r.c_6};function A(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}n(5625)},1883:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(1691),i=n(2142);const a=class{constructor(){this.type=i.w.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=i.w.ALL}is(t){return this.type===t}};const s=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:n,l:i}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===n&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===i&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:n,b:i}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===n&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===i&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(i.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(i.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(i.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(i.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(i.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(i.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(i.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(i.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(i.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(i.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(i.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(i.w.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")},1610:(t,e,n)=>{"use strict";n.d(e,{Z:()=>g});var r=n(1883),i=n(2142);const a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(a.re);if(!e)return;const n=e[1],i=parseInt(n,16),s=n.length,o=s%4==0,c=s>4,l=c?1:17,h=c?8:4,u=o?0:-1,d=c?255:15;return r.Z.set({r:(i>>h*(u+3)&d)*l,g:(i>>h*(u+2)&d)*l,b:(i>>h*(u+1)&d)*l,a:o?(i&d)*l/255:1},t)},stringify:t=>{const{r:e,g:n,b:r,a:a}=t;return a<1?`#${i.Q[Math.round(e)]}${i.Q[Math.round(n)]}${i.Q[Math.round(r)]}${i.Q[Math.round(255*a)]}`:`#${i.Q[Math.round(e)]}${i.Q[Math.round(n)]}${i.Q[Math.round(r)]}`}},s=a;var o=n(1691);const c={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(c.hueRe);if(e){const[,t,n]=e;switch(n){case"grad":return o.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return o.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return o.Z.channel.clamp.h(360*parseFloat(t))}}return o.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const n=t.match(c.re);if(!n)return;const[,i,a,s,l,h]=n;return r.Z.set({h:c._hue2deg(i),s:o.Z.channel.clamp.s(parseFloat(a)),l:o.Z.channel.clamp.l(parseFloat(s)),a:l?o.Z.channel.clamp.a(h?parseFloat(l)/100:parseFloat(l)):1},t)},stringify:t=>{const{h:e,s:n,l:r,a:i}=t;return i<1?`hsla(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}%, ${o.Z.lang.round(r)}%, ${i})`:`hsl(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}%, ${o.Z.lang.round(r)}%)`}},l=c,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 s.parse(e)},stringify:t=>{const e=s.stringify(t);for(const n in h.colors)if(h.colors[n]===e)return n}},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 n=t.match(d.re);if(!n)return;const[,i,a,s,c,l,h,u,p]=n;return r.Z.set({r:o.Z.channel.clamp.r(a?2.55*parseFloat(i):parseFloat(i)),g:o.Z.channel.clamp.g(c?2.55*parseFloat(s):parseFloat(s)),b:o.Z.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:u?o.Z.channel.clamp.a(p?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:n,b:r,a:i}=t;return i<1?`rgba(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}, ${o.Z.lang.round(r)}, ${o.Z.lang.round(i)})`:`rgb(${o.Z.lang.round(e)}, ${o.Z.lang.round(n)}, ${o.Z.lang.round(r)})`}},p=d,f={format:{keyword:h,hex:s,rgb:d,rgba:d,hsl:c,hsla:c},parse:t=>{if("string"!=typeof t)return t;const e=s.parse(t)||p.parse(t)||l.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(i.w.HSL)||void 0===t.data.r?l.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?p.stringify(t):s.stringify(t)},g=f},2142:(t,e,n)=>{"use strict";n.d(e,{Q:()=>i,w:()=>a});var r=n(1691);const i={};for(let s=0;s<=255;s++)i[s]=r.Z.unit.dec2hex(s);const a={ALL:0,RGB:1,HSL:2}},1506:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(1691),i=n(1610);const a=(t,e,n)=>{const a=i.Z.parse(t),s=a[e],o=r.Z.channel.clamp[e](s+n);return s!==o&&(a[e]=o),i.Z.stringify(a)}},7201:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(1506);const i=(t,e)=>(0,r.Z)(t,"l",-e)},5920:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(1506);const i=(t,e)=>(0,r.Z)(t,"l",e)},1691:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});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,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),hsl2rgb:({h:t,s:e,l:n},i)=>{if(!e)return 2.55*n;t/=360,e/=100;const a=(n/=100)<.5?n*(1+e):n+e-n*e,s=2*n-a;switch(i){case"r":return 255*r.hue2rgb(s,a,t+1/3);case"g":return 255*r.hue2rgb(s,a,t);case"b":return 255*r.hue2rgb(s,a,t-1/3)}},rgb2hsl:({r:t,g:e,b:n},r)=>{t/=255,e/=255,n/=255;const i=Math.max(t,e,n),a=Math.min(t,e,n),s=(i+a)/2;if("l"===r)return 100*s;if(i===a)return 0;const o=i-a;if("s"===r)return 100*(s>.5?o/(2-i-a):o/(i+a));switch(i){case t:return 60*((e-n)/o+(e<n?6:0));case e:return 60*((n-t)/o+2);case n:return 60*((t-e)/o+4);default:return-1}}},i={channel:r,lang:{clamp:(t,e,n)=>e>n?Math.min(e,Math.max(n,t)):Math.min(n,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}`}}}},7308:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});const r=function(){this.__data__=[],this.size=0};var i=n(9651);const a=function(t,e){for(var n=t.length;n--;)if((0,i.Z)(t[n][0],e))return n;return-1};var s=Array.prototype.splice;const o=function(t){var e=this.__data__,n=a(e,t);return!(n<0)&&(n==e.length-1?e.pop():s.call(e,n,1),--this.size,!0)};const c=function(t){var e=this.__data__,n=a(e,t);return n<0?void 0:e[n][1]};const l=function(t){return a(this.__data__,t)>-1};const h=function(t,e){var n=this.__data__,r=a(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=o,u.prototype.get=c,u.prototype.has=l,u.prototype.set=h;const d=u},6183:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2508),i=n(6092);const a=(0,r.Z)(i.Z,"Map")},7834:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});const r=(0,n(2508).Z)(Object,"create");const i=function(){this.__data__=r?r(null):{},this.size=0};const a=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var s=Object.prototype.hasOwnProperty;const o=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return s.call(e,t)?e[t]:void 0};var c=Object.prototype.hasOwnProperty;const l=function(t){var e=this.__data__;return r?void 0!==e[t]:c.call(e,t)};const h=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=l,u.prototype.set=h;const d=u;var p=n(7308),f=n(6183);const g=function(){this.size=0,this.__data__={hash:new d,map:new(f.Z||p.Z),string:new d}};const y=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const m=function(t,e){var n=t.__data__;return y(e)?n["string"==typeof e?"string":"hash"]:n.map};const b=function(t){var e=m(this,t).delete(t);return this.size-=e?1:0,e};const _=function(t){return m(this,t).get(t)};const x=function(t){return m(this,t).has(t)};const v=function(t,e){var n=m(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this};function k(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}k.prototype.clear=g,k.prototype.delete=b,k.prototype.get=_,k.prototype.has=x,k.prototype.set=v;const w=k},3203:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2508),i=n(6092);const a=(0,r.Z)(i.Z,"Set")},3001:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7834);const i=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const a=function(t){return this.__data__.has(t)};function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r.Z;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=i,s.prototype.has=a;const o=s},1667:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var r=n(7308);const i=function(){this.__data__=new r.Z,this.size=0};const a=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n};const s=function(t){return this.__data__.get(t)};const o=function(t){return this.__data__.has(t)};var c=n(6183),l=n(7834);const h=function(t,e){var n=this.__data__;if(n instanceof r.Z){var i=n.__data__;if(!c.Z||i.length<199)return i.push([t,e]),this.size=++n.size,this;n=this.__data__=new l.Z(i)}return n.set(t,e),this.size=n.size,this};function u(t){var e=this.__data__=new r.Z(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=s,u.prototype.has=o,u.prototype.set=h;const d=u},7685:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=n(6092).Z.Symbol},7623:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=n(6092).Z.Uint8Array},6579:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},8774:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var s=t[n];e(s,n,t)&&(a[i++]=s)}return a}},7668:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});const r=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r};var i=n(9169),a=n(7771),s=n(7008),o=n(6009),c=n(8843),l=Object.prototype.hasOwnProperty;const h=function(t,e){var n=(0,a.Z)(t),h=!n&&(0,i.Z)(t),u=!n&&!h&&(0,s.Z)(t),d=!n&&!h&&!u&&(0,c.Z)(t),p=n||h||u||d,f=p?r(t.length,String):[],g=f.length;for(var y in t)!e&&!l.call(t,y)||p&&("length"==y||u&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||(0,o.Z)(y,g))||f.push(y);return f}},4073:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},8694:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},2954:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(4752),i=n(9651),a=Object.prototype.hasOwnProperty;const s=function(t,e,n){var s=t[e];a.call(t,e)&&(0,i.Z)(s,n)&&(void 0!==n||e in t)||(0,r.Z)(t,e,n)}},4752:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7904);const i=function(t,e,n){"__proto__"==e&&r.Z?(0,r.Z)(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},8451:(t,e,n)=>{"use strict";n.d(e,{Z:()=>J});var r=n(1667),i=n(6579),a=n(2954),s=n(1899),o=n(7179);const c=function(t,e){return t&&(0,s.Z)(e,(0,o.Z)(e),t)};var l=n(5733);const h=function(t,e){return t&&(0,s.Z)(e,(0,l.Z)(e),t)};var u=n(1050),d=n(7215),p=n(5695);const f=function(t,e){return(0,s.Z)(t,(0,p.Z)(t),e)};var g=n(8694),y=n(2513),m=n(532);const b=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,g.Z)(e,(0,p.Z)(t)),t=(0,y.Z)(t);return e}:m.Z;const _=function(t,e){return(0,s.Z)(t,b(t),e)};var x=n(1808),v=n(3327);const k=function(t){return(0,v.Z)(t,l.Z,b)};var w=n(3970),C=Object.prototype.hasOwnProperty;const E=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&C.call(t,"index")&&(n.index=t.index,n.input=t.input),n};var T=n(1884);const S=function(t,e){var n=e?(0,T.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)};var A=/\w*$/;const L=function(t){var e=new t.constructor(t.source,A.exec(t));return e.lastIndex=t.lastIndex,e};var B=n(7685),N=B.Z?B.Z.prototype:void 0,D=N?N.valueOf:void 0;const O=function(t){return D?Object(D.call(t)):{}};var M=n(2701);const I=function(t,e,n){var r=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,T.Z)(t);case"[object Boolean]":case"[object Date]":return new r(+t);case"[object DataView]":return S(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,M.Z)(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 L(t);case"[object Symbol]":return O(t)}};var F=n(3658),$=n(7771),R=n(7008),Z=n(8533);const P=function(t){return(0,Z.Z)(t)&&"[object Map]"==(0,w.Z)(t)};var j=n(1162),Y=n(8351),z=Y.Z&&Y.Z.isMap;const U=z?(0,j.Z)(z):P;var W=n(7226);const H=function(t){return(0,Z.Z)(t)&&"[object Set]"==(0,w.Z)(t)};var q=Y.Z&&Y.Z.isSet;const V=q?(0,j.Z)(q):H;var G="[object Arguments]",X="[object Function]",Q="[object Object]",K={};K[G]=K["[object Array]"]=K["[object ArrayBuffer]"]=K["[object DataView]"]=K["[object Boolean]"]=K["[object Date]"]=K["[object Float32Array]"]=K["[object Float64Array]"]=K["[object Int8Array]"]=K["[object Int16Array]"]=K["[object Int32Array]"]=K["[object Map]"]=K["[object Number]"]=K[Q]=K["[object RegExp]"]=K["[object Set]"]=K["[object String]"]=K["[object Symbol]"]=K["[object Uint8Array]"]=K["[object Uint8ClampedArray]"]=K["[object Uint16Array]"]=K["[object Uint32Array]"]=!0,K["[object Error]"]=K[X]=K["[object WeakMap]"]=!1;const J=function t(e,n,s,p,g,y){var m,b=1&n,v=2&n,C=4&n;if(s&&(m=g?s(e,p,g,y):s(e)),void 0!==m)return m;if(!(0,W.Z)(e))return e;var T=(0,$.Z)(e);if(T){if(m=E(e),!b)return(0,d.Z)(e,m)}else{var S=(0,w.Z)(e),A=S==X||"[object GeneratorFunction]"==S;if((0,R.Z)(e))return(0,u.Z)(e,b);if(S==Q||S==G||A&&!g){if(m=v||A?{}:(0,F.Z)(e),!b)return v?_(e,h(m,e)):f(e,c(m,e))}else{if(!K[S])return g?e:{};m=I(e,S,b)}}y||(y=new r.Z);var L=y.get(e);if(L)return L;y.set(e,m),V(e)?e.forEach((function(r){m.add(t(r,n,s,r,e,y))})):U(e)&&e.forEach((function(r,i){m.set(i,t(r,n,s,i,e,y))}));var B=C?v?k:x.Z:v?l.Z:o.Z,N=T?void 0:B(e);return(0,i.Z)(N||e,(function(r,i){N&&(r=e[i=r]),(0,a.Z)(m,i,t(r,n,s,i,e,y))})),m}},9811:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2693),i=n(585);const a=function(t,e){return function(n,r){if(null==n)return n;if(!(0,i.Z)(n))return t(n,r);for(var a=n.length,s=e?a:-1,o=Object(n);(e?s--:++s<a)&&!1!==r(o[s],s,o););return n}}(r.Z)},1692:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e,n,r){for(var i=t.length,a=n+(r?1:-1);r?a--:++a<i;)if(e(t[a],a,t))return a;return-1}},3779:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(8694),i=n(7685),a=n(9169),s=n(7771),o=i.Z?i.Z.isConcatSpreadable:void 0;const c=function(t){return(0,s.Z)(t)||(0,a.Z)(t)||!!(o&&t&&t[o])};const l=function t(e,n,i,a,s){var o=-1,l=e.length;for(i||(i=c),s||(s=[]);++o<l;){var h=e[o];n>0&&i(h)?n>1?t(h,n-1,i,a,s):(0,r.Z)(s,h):a||(s[s.length]=h)}return s}},1395:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(e,n,r){for(var i=-1,a=Object(e),s=r(e),o=s.length;o--;){var c=s[t?o:++i];if(!1===n(a[c],c,a))break}return e}}()},2693:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(1395),i=n(7179);const a=function(t,e){return t&&(0,r.Z)(t,e,i.Z)}},3317:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2823),i=n(2281);const a=function(t,e){for(var n=0,a=(e=(0,r.Z)(e,t)).length;null!=t&&n<a;)t=t[(0,i.Z)(e[n++])];return n&&n==a?t:void 0}},3327:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(8694),i=n(7771);const a=function(t,e,n){var a=e(t);return(0,i.Z)(t)?a:(0,r.Z)(a,n(t))}},3589:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var r=n(7685),i=Object.prototype,a=i.hasOwnProperty,s=i.toString,o=r.Z?r.Z.toStringTag:void 0;const c=function(t){var e=a.call(t,o),n=t[o];try{t[o]=void 0;var r=!0}catch(c){}var i=s.call(t);return r&&(e?t[o]=n:delete t[o]),i};var l=Object.prototype.toString;const h=function(t){return l.call(t)};var u=r.Z?r.Z.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?c(t):h(t)}},4765:(t,e,n)=>{"use strict";n.d(e,{Z:()=>q});var r=n(1667),i=n(3001);const a=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1};var s=n(9548);const o=function(t,e,n,r,o,c){var l=1&n,h=t.length,u=e.length;if(h!=u&&!(l&&u>h))return!1;var d=c.get(t),p=c.get(e);if(d&&p)return d==e&&p==t;var f=-1,g=!0,y=2&n?new i.Z:void 0;for(c.set(t,e),c.set(e,t);++f<h;){var m=t[f],b=e[f];if(r)var _=l?r(b,m,f,e,t,c):r(m,b,f,t,e,c);if(void 0!==_){if(_)continue;g=!1;break}if(y){if(!a(e,(function(t,e){if(!(0,s.Z)(y,e)&&(m===t||o(m,t,n,r,c)))return y.push(e)}))){g=!1;break}}else if(m!==b&&!o(m,b,n,r,c)){g=!1;break}}return c.delete(t),c.delete(e),g};var c=n(7685),l=n(7623),h=n(9651);const u=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n};var d=n(6545),p=c.Z?c.Z.prototype:void 0,f=p?p.valueOf:void 0;const g=function(t,e,n,r,i,a,s){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!a(new l.Z(t),new l.Z(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,h.Z)(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var c=u;case"[object Set]":var p=1&r;if(c||(c=d.Z),t.size!=e.size&&!p)return!1;var g=s.get(t);if(g)return g==e;r|=2,s.set(t,e);var y=o(c(t),c(e),r,i,a,s);return s.delete(t),y;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1};var y=n(1808),m=Object.prototype.hasOwnProperty;const b=function(t,e,n,r,i,a){var s=1&n,o=(0,y.Z)(t),c=o.length;if(c!=(0,y.Z)(e).length&&!s)return!1;for(var l=c;l--;){var h=o[l];if(!(s?h in e:m.call(e,h)))return!1}var u=a.get(t),d=a.get(e);if(u&&d)return u==e&&d==t;var p=!0;a.set(t,e),a.set(e,t);for(var f=s;++l<c;){var g=t[h=o[l]],b=e[h];if(r)var _=s?r(b,g,h,e,t,a):r(g,b,h,t,e,a);if(!(void 0===_?g===b||i(g,b,n,r,a):_)){p=!1;break}f||(f="constructor"==h)}if(p&&!f){var x=t.constructor,v=e.constructor;x==v||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof v&&v instanceof v||(p=!1)}return a.delete(t),a.delete(e),p};var _=n(3970),x=n(7771),v=n(7008),k=n(8843),w="[object Arguments]",C="[object Array]",E="[object Object]",T=Object.prototype.hasOwnProperty;const S=function(t,e,n,i,a,s){var c=(0,x.Z)(t),l=(0,x.Z)(e),h=c?C:(0,_.Z)(t),u=l?C:(0,_.Z)(e),d=(h=h==w?E:h)==E,p=(u=u==w?E:u)==E,f=h==u;if(f&&(0,v.Z)(t)){if(!(0,v.Z)(e))return!1;c=!0,d=!1}if(f&&!d)return s||(s=new r.Z),c||(0,k.Z)(t)?o(t,e,n,i,a,s):g(t,e,h,n,i,a,s);if(!(1&n)){var y=d&&T.call(t,"__wrapped__"),m=p&&T.call(e,"__wrapped__");if(y||m){var S=y?t.value():t,A=m?e.value():e;return s||(s=new r.Z),a(S,A,n,i,s)}}return!!f&&(s||(s=new r.Z),b(t,e,n,i,a,s))};var A=n(8533);const L=function t(e,n,r,i,a){return e===n||(null==e||null==n||!(0,A.Z)(e)&&!(0,A.Z)(n)?e!=e&&n!=n:S(e,n,r,i,t,a))};const B=function(t,e,n,i){var a=n.length,s=a,o=!i;if(null==t)return!s;for(t=Object(t);a--;){var c=n[a];if(o&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++a<s;){var l=(c=n[a])[0],h=t[l],u=c[1];if(o&&c[2]){if(void 0===h&&!(l in t))return!1}else{var d=new r.Z;if(i)var p=i(h,u,l,t,e,d);if(!(void 0===p?L(u,h,3,i,d):p))return!1}}return!0};var N=n(7226);const D=function(t){return t==t&&!(0,N.Z)(t)};var O=n(7179);const M=function(t){for(var e=(0,O.Z)(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,D(i)]}return e};const I=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}};const F=function(t){var e=M(t);return 1==e.length&&e[0][2]?I(e[0][0],e[0][1]):function(n){return n===t||B(n,t,e)}};var $=n(3317);const R=function(t,e,n){var r=null==t?void 0:(0,$.Z)(t,e);return void 0===r?n:r};var Z=n(5487),P=n(9365),j=n(2281);const Y=function(t,e){return(0,P.Z)(t)&&D(e)?I((0,j.Z)(t),e):function(n){var r=R(n,t);return void 0===r&&r===e?(0,Z.Z)(n,t):L(e,r,3)}};var z=n(9203),U=n(4193);const W=function(t){return function(e){return(0,$.Z)(e,t)}};const H=function(t){return(0,P.Z)(t)?(0,U.Z)((0,j.Z)(t)):W(t)};const q=function(t){return"function"==typeof t?t:null==t?z.Z:"object"==typeof t?(0,x.Z)(t)?Y(t[0],t[1]):F(t):H(t)}},5154:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(2764);const i=(0,n(1851).Z)(Object.keys,Object);var a=Object.prototype.hasOwnProperty;const s=function(t){if(!(0,r.Z)(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},1018:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(9811),i=n(585);const a=function(t,e){var n=-1,a=(0,i.Z)(t)?Array(t.length):[];return(0,r.Z)(t,(function(t,r,i){a[++n]=e(t,r,i)})),a}},4193:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(e){return null==e?void 0:e[t]}}},9581:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(9203),i=n(1211),a=n(7227);const s=function(t,e){return(0,a.Z)((0,i.Z)(t,e,r.Z),t+"")}},1162:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},9548:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){return t.has(e)}},8882:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(9203);const i=function(t){return"function"==typeof t?t:r.Z}},2823:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(7771),i=n(9365),a=n(2454);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g;const c=function(t){var e=(0,a.Z)(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,i){e.push(r?i.replace(o,"$1"):n||t)})),e}));var l=n(751);const h=function(t,e){return(0,r.Z)(t)?t:(0,i.Z)(t,e)?[t]:c((0,l.Z)(t))}},1884:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7623);const i=function(t){var e=new t.constructor(t.byteLength);return new r.Z(e).set(new r.Z(t)),e}},1050:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(6092),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===i?r.Z.Buffer:void 0,o=s?s.allocUnsafe:void 0;const c=function(t,e){if(e)return t.slice();var n=t.length,r=o?o(n):new t.constructor(n);return t.copy(r),r}},2701:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(1884);const i=function(t,e){var n=e?(0,r.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},7215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},1899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2954),i=n(4752);const a=function(t,e,n,a){var s=!n;n||(n={});for(var o=-1,c=e.length;++o<c;){var l=e[o],h=a?a(n[l],t[l],l,n,t):void 0;void 0===h&&(h=t[l]),s?(0,i.Z)(n,l,h):(0,r.Z)(n,l,h)}return n}},7904:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(2508);const i=function(){try{var t=(0,r.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},3413:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},1808:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(3327),i=n(5695),a=n(7179);const s=function(t){return(0,r.Z)(t,a.Z,i.Z)}},2508:(t,e,n)=>{"use strict";n.d(e,{Z:()=>b});var r=n(3234);const i=n(6092).Z["__core-js_shared__"];var a,s=(a=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";const o=function(t){return!!s&&s in t};var c=n(7226),l=n(19),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,p=u.toString,f=d.hasOwnProperty,g=RegExp("^"+p.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const y=function(t){return!(!(0,c.Z)(t)||o(t))&&((0,r.Z)(t)?g:h).test((0,l.Z)(t))};const m=function(t,e){return null==t?void 0:t[e]};const b=function(t,e){var n=m(t,e);return y(n)?n:void 0}},2513:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=(0,n(1851).Z)(Object.getPrototypeOf,Object)},5695:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(8774),i=n(532),a=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const o=s?function(t){return null==t?[]:(t=Object(t),(0,r.Z)(s(t),(function(e){return a.call(t,e)})))}:i.Z},3970:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});var r=n(2508),i=n(6092);const a=(0,r.Z)(i.Z,"DataView");var s=n(6183);const o=(0,r.Z)(i.Z,"Promise");var c=n(3203);const l=(0,r.Z)(i.Z,"WeakMap");var h=n(3589),u=n(19),d="[object Map]",p="[object Promise]",f="[object Set]",g="[object WeakMap]",y="[object DataView]",m=(0,u.Z)(a),b=(0,u.Z)(s.Z),_=(0,u.Z)(o),x=(0,u.Z)(c.Z),v=(0,u.Z)(l),k=h.Z;(a&&k(new a(new ArrayBuffer(1)))!=y||s.Z&&k(new s.Z)!=d||o&&k(o.resolve())!=p||c.Z&&k(new c.Z)!=f||l&&k(new l)!=g)&&(k=function(t){var e=(0,h.Z)(t),n="[object Object]"==e?t.constructor:void 0,r=n?(0,u.Z)(n):"";if(r)switch(r){case m:return y;case b:return d;case _:return p;case x:return f;case v:return g}return e});const w=k},6174:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(2823),i=n(9169),a=n(7771),s=n(6009),o=n(1656),c=n(2281);const l=function(t,e,n){for(var l=-1,h=(e=(0,r.Z)(e,t)).length,u=!1;++l<h;){var d=(0,c.Z)(e[l]);if(!(u=null!=t&&n(t,d)))break;t=t[d]}return u||++l!=h?u:!!(h=null==t?0:t.length)&&(0,o.Z)(h)&&(0,s.Z)(d,h)&&((0,a.Z)(t)||(0,i.Z)(t))}},3658:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7226),i=Object.create;const a=function(){function t(){}return function(e){if(!(0,r.Z)(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();var s=n(2513),o=n(2764);const c=function(t){return"function"!=typeof t.constructor||(0,o.Z)(t)?{}:a((0,s.Z)(t))}},6009:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=/^(?:0|[1-9]\d*)$/;const i=function(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&r.test(t))&&t>-1&&t%1==0&&t<e}},439:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(9651),i=n(585),a=n(6009),s=n(7226);const o=function(t,e,n){if(!(0,s.Z)(n))return!1;var o=typeof e;return!!("number"==o?(0,i.Z)(n)&&(0,a.Z)(e,n.length):"string"==o&&e in n)&&(0,r.Z)(n[e],t)}},9365:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7771),i=n(2714),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const o=function(t,e){if((0,r.Z)(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!(0,i.Z)(t))||(s.test(t)||!a.test(t)||null!=e&&t in Object(e))}},2764:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=Object.prototype;const i=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},8351:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3413),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===i&&r.Z.process;const o=function(){try{var t=a&&a.require&&a.require("util").types;return t||s&&s.binding&&s.binding("util")}catch(e){}}()},1851:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){return function(n){return t(e(n))}}},1211:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const r=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)};var i=Math.max;const a=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,s=-1,o=i(a.length-e,0),c=Array(o);++s<o;)c[s]=a[e+s];s=-1;for(var l=Array(e+1);++s<e;)l[s]=a[s];return l[e]=n(c),r(t,this,l)}}},6092:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(3413),i="object"==typeof self&&self&&self.Object===Object&&self;const a=r.Z||i||Function("return this")()},6545:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},7227:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(2002),i=n(7904),a=n(9203);const s=i.Z?function(t,e){return(0,i.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:a.Z;var o=Date.now;const c=function(t){var e=0,n=0;return function(){var r=o(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(s)},2281:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(2714);const i=function(t){if("string"==typeof t||(0,r.Z)(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},19:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=Function.prototype.toString;const i=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},2002:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return function(){return t}}},3688:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(9581),i=n(9651),a=n(439),s=n(5733),o=Object.prototype,c=o.hasOwnProperty;const l=(0,r.Z)((function(t,e){t=Object(t);var n=-1,r=e.length,l=r>2?e[2]:void 0;for(l&&(0,a.Z)(e[0],e[1],l)&&(r=1);++n<r;)for(var h=e[n],u=(0,s.Z)(h),d=-1,p=u.length;++d<p;){var f=u[d],g=t[f];(void 0===g||(0,i.Z)(g,o[f])&&!c.call(t,f))&&(t[f]=h[f])}return t}))},9651:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},3445:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(8774),i=n(9811);const a=function(t,e){var n=[];return(0,i.Z)(t,(function(t,r,i){e(t,r,i)&&n.push(t)})),n};var s=n(4765),o=n(7771);const c=function(t,e){return((0,o.Z)(t)?r.Z:a)(t,(0,s.Z)(e,3))}},7961:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(3779);const i=function(t){return(null==t?0:t.length)?(0,r.Z)(t,1):[]}},870:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(6579),i=n(9811),a=n(8882),s=n(7771);const o=function(t,e){return((0,s.Z)(t)?r.Z:i.Z)(t,(0,a.Z)(e))}},7452:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=Object.prototype.hasOwnProperty;const i=function(t,e){return null!=t&&r.call(t,e)};var a=n(6174);const s=function(t,e){return null!=t&&(0,a.Z)(t,e,i)}},5487:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});const r=function(t,e){return null!=t&&e in Object(t)};var i=n(6174);const a=function(t,e){return null!=t&&(0,i.Z)(t,e,r)}},9203:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return t}},9169:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(3589),i=n(8533);const a=function(t){return(0,i.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var s=Object.prototype,o=s.hasOwnProperty,c=s.propertyIsEnumerable;const l=a(function(){return arguments}())?a:function(t){return(0,i.Z)(t)&&o.call(t,"callee")&&!c.call(t,"callee")}},7771:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=Array.isArray},585:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(3234),i=n(1656);const a=function(t){return null!=t&&(0,i.Z)(t.length)&&!(0,r.Z)(t)}},836:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(585),i=n(8533);const a=function(t){return(0,i.Z)(t)&&(0,r.Z)(t)}},7008:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(6092);const i=function(){return!1};var a="object"==typeof exports&&exports&&!exports.nodeType&&exports,s=a&&"object"==typeof module&&module&&!module.nodeType&&module,o=s&&s.exports===a?r.Z.Buffer:void 0;const c=(o?o.isBuffer:void 0)||i},9697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>d});var r=n(5154),i=n(3970),a=n(9169),s=n(7771),o=n(585),c=n(7008),l=n(2764),h=n(8843),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,o.Z)(t)&&((0,s.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,c.Z)(t)||(0,h.Z)(t)||(0,a.Z)(t)))return!t.length;var e=(0,i.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,l.Z)(t))return!(0,r.Z)(t).length;for(var n in t)if(u.call(t,n))return!1;return!0}},3234:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(3589),i=n(7226);const a=function(t){if(!(0,i.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},7226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},8533:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},7514:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(3589),i=n(2513),a=n(8533),s=Function.prototype,o=Object.prototype,c=s.toString,l=o.hasOwnProperty,h=c.call(Object);const u=function(t){if(!(0,a.Z)(t)||"[object Object]"!=(0,r.Z)(t))return!1;var e=(0,i.Z)(t);if(null===e)return!0;var n=l.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==h}},2714:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(3589),i=n(8533);const a=function(t){return"symbol"==typeof t||(0,i.Z)(t)&&"[object Symbol]"==(0,r.Z)(t)}},8843:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(3589),i=n(1656),a=n(8533),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1;const o=function(t){return(0,a.Z)(t)&&(0,i.Z)(t.length)&&!!s[(0,r.Z)(t)]};var c=n(1162),l=n(8351),h=l.Z&&l.Z.isTypedArray;const u=h?(0,c.Z)(h):o},9360:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(t){return void 0===t}},7179:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7668),i=n(5154),a=n(585);const s=function(t){return(0,a.Z)(t)?(0,r.Z)(t):(0,i.Z)(t)}},5733:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(7668),i=n(7226),a=n(2764);const s=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e};var o=Object.prototype.hasOwnProperty;const c=function(t){if(!(0,i.Z)(t))return s(t);var e=(0,a.Z)(t),n=[];for(var r in t)("constructor"!=r||!e&&o.call(t,r))&&n.push(r);return n};var l=n(585);const h=function(t){return(0,l.Z)(t)?(0,r.Z)(t,!0):c(t)}},3836:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(4073),i=n(4765),a=n(1018),s=n(7771);const o=function(t,e){return((0,s.Z)(t)?r.Z:a.Z)(t,(0,i.Z)(e,3))}},2454:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7834);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var s=t.apply(this,r);return n.cache=a.set(i,s)||a,s};return n.cache=new(i.Cache||r.Z),n}i.Cache=r.Z;const a=i},1666:(t,e,n)=>{"use strict";n.d(e,{Z:()=>y});var r=n(3317),i=n(2954),a=n(2823),s=n(6009),o=n(7226),c=n(2281);const l=function(t,e,n,r){if(!(0,o.Z)(t))return t;for(var l=-1,h=(e=(0,a.Z)(e,t)).length,u=h-1,d=t;null!=d&&++l<h;){var p=(0,c.Z)(e[l]),f=n;if("__proto__"===p||"constructor"===p||"prototype"===p)return t;if(l!=u){var g=d[p];void 0===(f=r?r(g,p,d):void 0)&&(f=(0,o.Z)(g)?g:(0,s.Z)(e[l+1])?[]:{})}(0,i.Z)(d,p,f),d=d[p]}return t};const h=function(t,e,n){for(var i=-1,s=e.length,o={};++i<s;){var c=e[i],h=(0,r.Z)(t,c);n(h,c)&&l(o,(0,a.Z)(c,t),h)}return o};var u=n(5487);const d=function(t,e){return h(t,e,(function(e,n){return(0,u.Z)(t,n)}))};var p=n(7961),f=n(1211),g=n(7227);const y=function(t){return(0,g.Z)((0,f.Z)(t,void 0,p.Z),t+"")}((function(t,e){return null==t?{}:d(t,e)}))},4379:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=Math.ceil,i=Math.max;const a=function(t,e,n,a){for(var s=-1,o=i(r((e-t)/(n||1)),0),c=Array(o);o--;)c[a?o:++s]=t,t+=n;return c};var s=n(439),o=n(4099);const c=function(t){return function(e,n,r){return r&&"number"!=typeof r&&(0,s.Z)(e,n,r)&&(n=r=void 0),e=(0,o.Z)(e),void 0===n?(n=e,e=0):n=(0,o.Z)(n),r=void 0===r?e<n?1:-1:(0,o.Z)(r),a(e,n,r,t)}}()},2344:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});const r=function(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n};var i=n(9811),a=n(4765);const s=function(t,e,n,r,i){return i(t,(function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)})),n};var o=n(7771);const c=function(t,e,n){var c=(0,o.Z)(t)?r:s,l=arguments.length<3;return c(t,(0,a.Z)(e,4),n,l,i.Z)}},532:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});const r=function(){return[]}},4099:(t,e,n)=>{"use strict";n.d(e,{Z:()=>g});var r=/\s/;const i=function(t){for(var e=t.length;e--&&r.test(t.charAt(e)););return e};var a=/^\s+/;const s=function(t){return t?t.slice(0,i(t)+1).replace(a,""):t};var o=n(7226),c=n(2714),l=/^[-+]0x[0-9a-f]+$/i,h=/^0b[01]+$/i,u=/^0o[0-7]+$/i,d=parseInt;const p=function(t){if("number"==typeof t)return t;if((0,c.Z)(t))return NaN;if((0,o.Z)(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=(0,o.Z)(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=s(t);var n=h.test(t);return n||u.test(t)?d(t.slice(2),n?2:8):l.test(t)?NaN:+t};var f=1/0;const g=function(t){return t?(t=p(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},751:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(7685),i=n(4073),a=n(7771),s=n(2714),o=r.Z?r.Z.prototype:void 0,c=o?o.toString:void 0;const l=function t(e){if("string"==typeof e)return e;if((0,a.Z)(e))return(0,i.Z)(e,t)+"";if((0,s.Z)(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-Infinity?"-0":n};const h=function(t){return null==t?"":l(t)}},6749:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(751),i=0;const a=function(t){var e=++i;return(0,r.Z)(t)+e}},4148:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(4073);const i=function(t,e){return(0,r.Z)(e,(function(e){return t[e]}))};var a=n(7179);const s=function(t){return null==t?[]:i(t,(0,a.Z)(t))}}}]); \ No newline at end of file diff --git a/assets/js/1843ef45.001f1829.js b/assets/js/1843ef45.001f1829.js deleted file mode 100644 index fc1eeba31..000000000 --- a/assets/js/1843ef45.001f1829.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2050],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(n),d=i,h=m["".concat(l,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(h,r(r({ref:t},u),{},{components:n})):a.createElement(h,r({ref:t},u))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var c=2;c<o;c++)r[c]=n[c];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>o});var a=n(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},5088:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=n(7462),i=(n(7294),n(4137)),o=n(1872);const r={id:"js-if-and-switch",title:"JS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of JavaScript flow control.",image:"img/og/og-image-js-if-and-switch.png",tags:["JavaScript"]},s=void 0,l={unversionedId:"js/js-if-and-switch",id:"js/js-if-and-switch",title:"JS If & Switch",description:"Deep dive into the two pillars of JavaScript flow control.",source:"@site/docs/js/js-if-and-switch.mdx",sourceDirName:"js",slug:"/js/js-if-and-switch",permalink:"/docs/js/js-if-and-switch",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/js-if-and-switch.mdx",tags:[{label:"JavaScript",permalink:"/docs/tags/java-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1630274625,formattedLastUpdatedAt:"Aug 29, 2021",frontMatter:{id:"js-if-and-switch",title:"JS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of JavaScript flow control.",image:"img/og/og-image-js-if-and-switch.png",tags:["JavaScript"]},sidebar:"docs",previous:{title:"JavaScript",permalink:"/docs/category/javascript"},next:{title:"Loops",permalink:"/docs/js/js-loops"}},c={},u=[{value:"If Statements",id:"if-statements",level:2},{value:"And, Or, Brackets",id:"and-or-brackets",level:3},{value:"Boolean evaluation",id:"boolean-evaluation",level:3},{value:"Flip Booleans with Bang",id:"flip-booleans-with-bang",level:3},{value:"If Shorthand",id:"if-shorthand",level:3},{value:"Ternary",id:"ternary",level:2},{value:"Shortcircuiting",id:"shortcircuiting",level:2},{value:"Shortcircuiting OR",id:"shortcircuiting-or",level:3},{value:"Shortcircuiting AND",id:"shortcircuiting-and",level:3},{value:"Switch Statement",id:"switch-statement",level:2}],m={toc:u},p="wrapper";function d(e){let{components:t,...n}=e;return(0,i.kt)(p,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(o.m,{content:"Deep dive into the two pillars of JavaScript flow control",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"if-statements"},"If Statements"),(0,i.kt)("p",null,"The most popular way of handling conditional logic is with the ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2} title="Create a segment of customers that made more than two purchases"',"{2}":!0,title:'"Create',a:!0,segment:!0,of:!0,customers:!0,that:!0,made:!0,more:!0,than:!0,two:!0,'purchases"':!0},"for (let customer of customers) {\n if (customer.purchases > 2) {\n marketingSegment.push(customer.email);\n }\n}\n")),(0,i.kt)("p",null,"Basic ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," can be extended by adding optional ",(0,i.kt)("inlineCode",{parentName:"p"},"else if")," for an additional condition with the different outcome or optional ",(0,i.kt)("inlineCode",{parentName:"p"},"else")," for all scenarios not caught by above conditions."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2,4,6} title="Create multiple segments for different levels of customers"',"{2,4,6}":!0,title:'"Create',multiple:!0,segments:!0,for:!0,different:!0,levels:!0,of:!0,'customers"':!0},"for (let customer of customers) {\n if (customer.purchases > 10) {\n goldCustomerSegment.push(customer.email);\n } else if (customer.purchases > 5) {\n silverCustomerSegment.push(customer.email);\n } else {\n bronzeCustomerSegment.push(customer.email);\n }\n}\n")),(0,i.kt)("h3",{id:"and-or-brackets"},"And, Or, Brackets"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement is even more powerful if you enhance your conditions with the ORs (",(0,i.kt)("inlineCode",{parentName:"p"},"||"),"), ANDs (",(0,i.kt)("inlineCode",{parentName:"p"},"&&"),") and brackets:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2,4} title="Split customers into two segments depending on a condition group"',"{2,4}":!0,title:'"Split',customers:!0,into:!0,two:!0,segments:!0,depending:!0,on:!0,a:!0,condition:!0,'group"':!0},"for (let customer of customers) {\n if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {\n reengagementCampaignSegment.push(customer);\n } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {\n upsellCampaignSegment.push(customer);\n }\n}\n")),(0,i.kt)("h3",{id:"boolean-evaluation"},"Boolean evaluation"),(0,i.kt)("p",null,"You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="If the customer has domain of your competiton, add him to blocklist"',"{3}":!0,title:'"If',the:!0,customer:!0,has:!0,domain:!0,of:!0,your:!0,"competiton,":!0,add:!0,him:!0,to:!0,'blocklist"':!0},"for (let customer of customers) {\n const competitionUser = customer.email.includes('@competition.com');\n if (competitionUser) { // if comptetitionUser is true, block will be exectuted\n blocklist.push(customer);\n }\n}\n")),(0,i.kt)("h3",{id:"flip-booleans-with-bang"},"Flip Booleans with Bang"),(0,i.kt)("p",null,"Bang symbol (",(0,i.kt)("inlineCode",{parentName:"p"},"!"),") can be used to flip the value of a boolean:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="If the customer does not have competition domain in email, add him to campaign"',"{3}":!0,title:'"If',the:!0,customer:!0,does:!0,not:!0,have:!0,competition:!0,domain:!0,in:!0,"email,":!0,add:!0,him:!0,to:!0,'campaign"':!0},"for (let customer of customers) {\n const competitionUser = customer.email.includes('@competition.com');\n if (!competitionUser) { // if not competition user, execute content\n campaignSegment.push(customer);\n }\n}\n")),(0,i.kt)("p",null,"Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean."),(0,i.kt)("p",null,"Falsy values in JavaScript are: ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"0"),", empty string ",(0,i.kt)("inlineCode",{parentName:"p"},'""'),", ",(0,i.kt)("inlineCode",{parentName:"p"},"null"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"undefined"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"NaN"),".\nAll other possible values are considered truthy."),(0,i.kt)("p",null,"This is very useful, as it allows you to leverage boolean evaluation on truthy values:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="Applies either personalized name or default value"',"{3}":!0,title:'"Applies',either:!0,personalized:!0,name:!0,or:!0,default:!0,'value"':!0},"for (let customer of customers) {\n let helloPersonalization;\n if (customer.firstName) { // if customer.firstName has characters, it is truthy\n helloPersonalization = customer.firstName;\n } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy\n helloPersonalization = 'Valued Customer';\n }\n}\n")),(0,i.kt)("p",null,'To make it clear - above code is very "dirty" and can be written much better (for example without ',(0,i.kt)("inlineCode",{parentName:"p"},"else if")," by applying default value on variable initialization). You will find an example of how to write it better later."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can level up the use of this feature by leveraging double bang ",(0,i.kt)("inlineCode",{parentName:"p"},"!!")," to convert truthy/falsy value into an (appropriate) boolean."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true"',title:'"If',optInDate:!0,has:!0,any:!0,value:!0,"(is":!0,not:!0,"empty)":!0,the:!0,isOptedIn:!0,variable:!0,will:!0,evaluate:!0,to:!0,'true"':!0},"const isOptedIn = !!optInDate;\n"))),(0,i.kt)("h3",{id:"if-shorthand"},"If Shorthand"),(0,i.kt)("p",null,"For simple, one-line ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statements, there is also a one-line shorthand:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If the customer is opted in, send an email"',title:'"If',the:!0,customer:!0,is:!0,opted:!0,"in,":!0,send:!0,an:!0,'email"':!0},"if (isOptedIn) sendEmail(emailAddress, emailID);\n")),(0,i.kt)("p",null,"You could probably use simple ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statements for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out."),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"ternary"},"Ternary"),(0,i.kt)("p",null,"If a simple ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{2-7} title=\"Dirty if statement using basic 'if'\"","{2-7}":!0,title:'"Dirty',if:!0,statement:!0,using:!0,basic:!0,"'if'\"":!0},"for (let customer of customers) {\n let helloPersonalization = 'Hello ';\n if (customer.firstName) {\n helloPersonalization += customer.firstName;\n } else if (!customer.firstName) {\n helloPersonalization += 'Valued Customer';\n }\n}\n")),(0,i.kt)("p",null,"we can use a clean ternary:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2} title="Same logic changed to a clean ternary"',"{2}":!0,title:'"Same',logic:!0,changed:!0,to:!0,a:!0,clean:!0,'ternary"':!0},"for (let customer of customers) {\n let helloPersonalization = customer.firstName ? 'Hello ' + customer.firstName : 'Hello Valued Customer';\n}\n")),(0,i.kt)("p",null,"Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: ",(0,i.kt)("inlineCode",{parentName:"p"},"variable = condition ? valueIfTrue : valueIfFalse;"),". So in the example above, if the ",(0,i.kt)("inlineCode",{parentName:"p"},"customer.firstName")," is not empty (is truthy), it will be pushed as the value of ",(0,i.kt)("inlineCode",{parentName:"p"},"helloPersonalization"),". If it is empty, the default value will be assigned instead."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ternary has more uses not than just the standard ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement. It is awesome text customization with interpolation:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Fill in the sentence with different words depending on boolean value of isOptedIn"',title:'"Fill',in:!0,the:!0,sentence:!0,with:!0,different:!0,words:!0,depending:!0,on:!0,boolean:!0,value:!0,of:!0,'isOptedIn"':!0},"const optInStatusMessage = `You are ${isOptedIn ? 'opted in' : 'not opted in'}`;\n")),(0,i.kt)("p",{parentName:"admonition"},"Ternaries are not limited to variables and strings. They can also run functions:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If isLoggedIn is false, the redirectToLogInPage function will be executed"',title:'"If',isLoggedIn:!0,is:!0,"false,":!0,the:!0,redirectToLogInPage:!0,function:!0,will:!0,be:!0,'executed"':!0},"!isLoggedIn ? redirectToLogInPage() : null;\n"))),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"shortcircuiting"},"Shortcircuiting"),(0,i.kt)("p",null,"We already covered using OR ",(0,i.kt)("inlineCode",{parentName:"p"},"||")," + AND ",(0,i.kt)("inlineCode",{parentName:"p"},"&&")," operators. But by using them correctly, you can optimize the speed of your scripts greatly."),(0,i.kt)("h3",{id:"shortcircuiting-or"},"Shortcircuiting OR"),(0,i.kt)("p",null,"OR evaluates to ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," if ",(0,i.kt)("em",{parentName:"p"},"at least one")," value is equal to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"If the left side of the OR evaluates to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),", we know for sure that the whole statement is ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),". Checking the value of the right side is not needed. And JavaScript knows this too."),(0,i.kt)("p",null,"Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",2020:!0,className:"language-js",metastring:'{2} title="If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign"',"{2}":!0,title:'"If',last:!0,purchase:!0,was:!0,before:!0,or:!0,a:!0,very:!0,complex:!0,check:!0,requiring:!0,calls:!0,to:!0,eCommerce:!0,API:!0,evaluates:!0,"false,":!0,filter:!0,out:!0,the:!0,customer:!0,from:!0,'campaign"':!0},"for (let customer of customers) {\n if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {\n exclusionSegment.push(customer)\n }\n}\n")),(0,i.kt)("p",null,"Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the ",(0,i.kt)("inlineCode",{parentName:"p"},"lastPurchaseDate")," is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish."),(0,i.kt)("h3",{id:"shortcircuiting-and"},"Shortcircuiting AND"),(0,i.kt)("p",null,"Similar logic can be applied to AND operator. ",(0,i.kt)("inlineCode",{parentName:"p"},"&&")," evaluates to ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," only if ",(0,i.kt)("em",{parentName:"p"},"both sides")," are ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),". If we have a more straightforward condition or we suspect it might frequently evaluate to ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),", we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1} title="If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid"',"{1}":!0,title:'"If',the:!0,email:!0,provided:!0,for:!0,login:!0,is:!0,in:!0,correct:!0,"format,":!0,check:!0,if:!0,password:!0,has:!0,required:!0,"length.":!0,Once:!0,"validated,":!0,this:!0,and:!0,are:!0,matching:!0,pair:!0,a:!0,"user.":!0,Only:!0,then:!0,consider:!0,to:!0,be:!0,'valid"':!0},"if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {\n const isLoggedIn = true;\n}\n")),(0,i.kt)("p",null,"In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Using shortcircuit is a quite popular pattern, especially for managing user interface components:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If the user is not an admin, shortcircuit and don\'t render the AdminBar component"',title:'"If',the:!0,user:!0,is:!0,not:!0,an:!0,"admin,":!0,shortcircuit:!0,and:!0,"don't":!0,render:!0,AdminBar:!0,'component"':!0},"isAdmin && showAdminBar()\n"))),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"switch-statement"},"Switch Statement"),(0,i.kt)("p",null,"Sometimes you have many options for a single condition. You could write it with a simple ",(0,i.kt)("inlineCode",{parentName:"p"},"if"),", but the ",(0,i.kt)("inlineCode",{parentName:"p"},"switch")," might be much more readable than a long list of ",(0,i.kt)("inlineCode",{parentName:"p"},"else if")," statements with nearly identical conditions."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Return the error type based on the code"',title:'"Return',the:!0,error:!0,type:!0,based:!0,on:!0,'code"':!0},"function errorDescription(error) {\n switch (error.code) {\n case 400:\n return 'Bad Request';\n case 401:\n return 'Unauthorized';\n case 403:\n return 'Forbidden';\n case 404:\n return 'Not Found'\n default:\n return 'Unknown Error';\n }\n}\n")),(0,i.kt)("p",null,"Some things to remember when working with a ",(0,i.kt)("inlineCode",{parentName:"p"},"switch"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If multiple cases fulfil the condition, a ",(0,i.kt)("inlineCode",{parentName:"li"},"switch")," will execute the first from the top."),(0,i.kt)("li",{parentName:"ul"},"You can assign multiple cases to the same code block:")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3-5,8-9} title="Return either sum or difference of two values (sum by default)"',"{3-5,8-9}":!0,title:'"Return',either:!0,sum:!0,or:!0,difference:!0,of:!0,two:!0,values:!0,"(sum":!0,by:!0,'default)"':!0},"let outcome;\nswitch (a, operation, b) {\n default:\n case '+':\n case 'plus':\n outcome = a + b;\n break;\n case '-':\n case 'minus':\n outcome = a - b;\n break;\n}\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Use either ",(0,i.kt)("inlineCode",{parentName:"li"},"break")," statement to end each case or use the ",(0,i.kt)("inlineCode",{parentName:"li"},"return")," statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen."),(0,i.kt)("li",{parentName:"ul"},"Always use ",(0,i.kt)("inlineCode",{parentName:"li"},"default")," statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered."),(0,i.kt)("li",{parentName:"ul"},"Cases in a ",(0,i.kt)("inlineCode",{parentName:"li"},"switch")," are using strict comparison (",(0,i.kt)("inlineCode",{parentName:"li"},"==="),") for evaluation, so the provided value must match the case not only by value but also by type. A string value of ",(0,i.kt)("inlineCode",{parentName:"li"},"'0'")," won't trigger an integer ",(0,i.kt)("inlineCode",{parentName:"li"},"0")," case.")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"By default, the switch statement is a single block for the scope. If you, however, want to declare variables of the same name in different cases, you can do it by adding parentheses:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{4,7,9,12} title=\"Despite 'outcome' variable being initialized twice with 'let', it will not drop an error because of two different block scopes\"","{4,7,9,12}":!0,title:'"Despite',"'outcome'":!0,variable:!0,being:!0,initialized:!0,twice:!0,with:!0,"'let',":!0,it:!0,will:!0,not:!0,drop:!0,an:!0,error:!0,because:!0,of:!0,two:!0,different:!0,block:!0,'scopes"':!0},"switch (a, operation, b) {\n default:\n case '+':\n case 'plus': {\n let outcome = a + b;\n break;\n }\n case '-':\n case 'minus': {\n let outcome = a - b;\n break;\n }\n}\n"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1843ef45.4145bf52.js b/assets/js/1843ef45.4145bf52.js new file mode 100644 index 000000000..409b5e8e3 --- /dev/null +++ b/assets/js/1843ef45.4145bf52.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2050],{6339:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var s=n(5893),i=n(1151),o=n(1872);const a={id:"js-if-and-switch",title:"JS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of JavaScript flow control.",image:"img/og/og-image-js-if-and-switch.png",tags:["JavaScript"]},r=void 0,l={id:"js/js-if-and-switch",title:"JS If & Switch",description:"Deep dive into the two pillars of JavaScript flow control.",source:"@site/docs/js/js-if-and-switch.mdx",sourceDirName:"js",slug:"/js/js-if-and-switch",permalink:"/docs/js/js-if-and-switch",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/js-if-and-switch.mdx",tags:[{label:"JavaScript",permalink:"/docs/tags/java-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1630274625,formattedLastUpdatedAt:"Aug 29, 2021",frontMatter:{id:"js-if-and-switch",title:"JS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of JavaScript flow control.",image:"img/og/og-image-js-if-and-switch.png",tags:["JavaScript"]},sidebar:"docs",previous:{title:"JavaScript",permalink:"/docs/category/javascript"},next:{title:"Loops",permalink:"/docs/js/js-loops"}},c={},d=[{value:"If Statements",id:"if-statements",level:2},{value:"And, Or, Brackets",id:"and-or-brackets",level:3},{value:"Boolean evaluation",id:"boolean-evaluation",level:3},{value:"Flip Booleans with Bang",id:"flip-booleans-with-bang",level:3},{value:"If Shorthand",id:"if-shorthand",level:3},{value:"Ternary",id:"ternary",level:2},{value:"Shortcircuiting",id:"shortcircuiting",level:2},{value:"Shortcircuiting OR",id:"shortcircuiting-or",level:3},{value:"Shortcircuiting AND",id:"shortcircuiting-and",level:3},{value:"Switch Statement",id:"switch-statement",level:2}];function h(e){const t={admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.m,{content:"Deep dive into the two pillars of JavaScript flow control"}),"\n",(0,s.jsx)(t.h2,{id:"if-statements",children:"If Statements"}),"\n",(0,s.jsxs)(t.p,{children:["The most popular way of handling conditional logic is with the ",(0,s.jsx)(t.code,{children:"if"})," statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{2} title="Create a segment of customers that made more than two purchases"',children:"for (let customer of customers) {\n if (customer.purchases > 2) {\n marketingSegment.push(customer.email);\n }\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Basic ",(0,s.jsx)(t.code,{children:"if"})," can be extended by adding optional ",(0,s.jsx)(t.code,{children:"else if"})," for an additional condition with the different outcome or optional ",(0,s.jsx)(t.code,{children:"else"})," for all scenarios not caught by above conditions."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{2,4,6} title="Create multiple segments for different levels of customers"',children:"for (let customer of customers) {\n if (customer.purchases > 10) {\n goldCustomerSegment.push(customer.email);\n } else if (customer.purchases > 5) {\n silverCustomerSegment.push(customer.email);\n } else {\n bronzeCustomerSegment.push(customer.email);\n }\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"and-or-brackets",children:"And, Or, Brackets"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"if"})," statement is even more powerful if you enhance your conditions with the ORs (",(0,s.jsx)(t.code,{children:"||"}),"), ANDs (",(0,s.jsx)(t.code,{children:"&&"}),") and brackets:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{2,4} title="Split customers into two segments depending on a condition group"',children:"for (let customer of customers) {\n if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {\n reengagementCampaignSegment.push(customer);\n } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {\n upsellCampaignSegment.push(customer);\n }\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"boolean-evaluation",children:"Boolean evaluation"}),"\n",(0,s.jsx)(t.p,{children:"You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{3} title="If the customer has domain of your competiton, add him to blocklist"',children:"for (let customer of customers) {\n const competitionUser = customer.email.includes('@competition.com');\n if (competitionUser) { // if comptetitionUser is true, block will be exectuted\n blocklist.push(customer);\n }\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"flip-booleans-with-bang",children:"Flip Booleans with Bang"}),"\n",(0,s.jsxs)(t.p,{children:["Bang symbol (",(0,s.jsx)(t.code,{children:"!"}),") can be used to flip the value of a boolean:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{3} title="If the customer does not have competition domain in email, add him to campaign"',children:"for (let customer of customers) {\n const competitionUser = customer.email.includes('@competition.com');\n if (!competitionUser) { // if not competition user, execute content\n campaignSegment.push(customer);\n }\n}\n"})}),"\n",(0,s.jsx)(t.p,{children:"Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean."}),"\n",(0,s.jsxs)(t.p,{children:["Falsy values in JavaScript are: ",(0,s.jsx)(t.code,{children:"false"}),", ",(0,s.jsx)(t.code,{children:"0"}),", empty string ",(0,s.jsx)(t.code,{children:'""'}),", ",(0,s.jsx)(t.code,{children:"null"}),", ",(0,s.jsx)(t.code,{children:"undefined"}),", ",(0,s.jsx)(t.code,{children:"NaN"}),".\nAll other possible values are considered truthy."]}),"\n",(0,s.jsx)(t.p,{children:"This is very useful, as it allows you to leverage boolean evaluation on truthy values:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{3} title="Applies either personalized name or default value"',children:"for (let customer of customers) {\n let helloPersonalization;\n if (customer.firstName) { // if customer.firstName has characters, it is truthy\n helloPersonalization = customer.firstName;\n } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy\n helloPersonalization = 'Valued Customer';\n }\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:['To make it clear - above code is very "dirty" and can be written much better (for example without ',(0,s.jsx)(t.code,{children:"else if"})," by applying default value on variable initialization). You will find an example of how to write it better later."]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["You can level up the use of this feature by leveraging double bang ",(0,s.jsx)(t.code,{children:"!!"})," to convert truthy/falsy value into an (appropriate) boolean."]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true"',children:"const isOptedIn = !!optInDate;\n"})})]}),"\n",(0,s.jsx)(t.h3,{id:"if-shorthand",children:"If Shorthand"}),"\n",(0,s.jsxs)(t.p,{children:["For simple, one-line ",(0,s.jsx)(t.code,{children:"if"})," statements, there is also a one-line shorthand:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="If the customer is opted in, send an email"',children:"if (isOptedIn) sendEmail(emailAddress, emailID);\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You could probably use simple ",(0,s.jsx)(t.code,{children:"if"})," statements for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out."]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.h2,{id:"ternary",children:"Ternary"}),"\n",(0,s.jsxs)(t.p,{children:["If a simple ",(0,s.jsx)(t.code,{children:"if"})," statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:"{2-7} title=\"Dirty if statement using basic 'if'\"",children:"for (let customer of customers) {\n let helloPersonalization = 'Hello ';\n if (customer.firstName) {\n helloPersonalization += customer.firstName;\n } else if (!customer.firstName) {\n helloPersonalization += 'Valued Customer';\n }\n}\n"})}),"\n",(0,s.jsx)(t.p,{children:"we can use a clean ternary:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{2} title="Same logic changed to a clean ternary"',children:"for (let customer of customers) {\n let helloPersonalization = customer.firstName ? 'Hello ' + customer.firstName : 'Hello Valued Customer';\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: ",(0,s.jsx)(t.code,{children:"variable = condition ? valueIfTrue : valueIfFalse;"}),". So in the example above, if the ",(0,s.jsx)(t.code,{children:"customer.firstName"})," is not empty (is truthy), it will be pushed as the value of ",(0,s.jsx)(t.code,{children:"helloPersonalization"}),". If it is empty, the default value will be assigned instead."]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["The ternary has more uses not than just the standard ",(0,s.jsx)(t.code,{children:"if"})," statement. It is awesome text customization with interpolation:"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Fill in the sentence with different words depending on boolean value of isOptedIn"',children:"const optInStatusMessage = `You are ${isOptedIn ? 'opted in' : 'not opted in'}`;\n"})}),(0,s.jsx)(t.p,{children:"Ternaries are not limited to variables and strings. They can also run functions:"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="If isLoggedIn is false, the redirectToLogInPage function will be executed"',children:"!isLoggedIn ? redirectToLogInPage() : null;\n"})})]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.h2,{id:"shortcircuiting",children:"Shortcircuiting"}),"\n",(0,s.jsxs)(t.p,{children:["We already covered using OR ",(0,s.jsx)(t.code,{children:"||"})," + AND ",(0,s.jsx)(t.code,{children:"&&"})," operators. But by using them correctly, you can optimize the speed of your scripts greatly."]}),"\n",(0,s.jsx)(t.h3,{id:"shortcircuiting-or",children:"Shortcircuiting OR"}),"\n",(0,s.jsxs)(t.p,{children:["OR evaluates to ",(0,s.jsx)(t.code,{children:"true"})," if ",(0,s.jsx)(t.em,{children:"at least one"})," value is equal to ",(0,s.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["If the left side of the OR evaluates to ",(0,s.jsx)(t.code,{children:"true"}),", we know for sure that the whole statement is ",(0,s.jsx)(t.code,{children:"true"}),". Checking the value of the right side is not needed. And JavaScript knows this too."]}),"\n",(0,s.jsx)(t.p,{children:"Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{2} title="If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign"',children:"for (let customer of customers) {\n if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {\n exclusionSegment.push(customer)\n }\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the ",(0,s.jsx)(t.code,{children:"lastPurchaseDate"})," is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish."]}),"\n",(0,s.jsx)(t.h3,{id:"shortcircuiting-and",children:"Shortcircuiting AND"}),"\n",(0,s.jsxs)(t.p,{children:["Similar logic can be applied to AND operator. ",(0,s.jsx)(t.code,{children:"&&"})," evaluates to ",(0,s.jsx)(t.code,{children:"true"})," only if ",(0,s.jsx)(t.em,{children:"both sides"})," are ",(0,s.jsx)(t.code,{children:"true"}),". If we have a more straightforward condition or we suspect it might frequently evaluate to ",(0,s.jsx)(t.code,{children:"false"}),", we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{1} title="If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid"',children:"if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {\n const isLoggedIn = true;\n}\n"})}),"\n",(0,s.jsx)(t.p,{children:"In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password."}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsx)(t.p,{children:"Using shortcircuit is a quite popular pattern, especially for managing user interface components:"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="If the user is not an admin, shortcircuit and don\'t render the AdminBar component"',children:"isAdmin && showAdminBar()\n"})})]}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.h2,{id:"switch-statement",children:"Switch Statement"}),"\n",(0,s.jsxs)(t.p,{children:["Sometimes you have many options for a single condition. You could write it with a simple ",(0,s.jsx)(t.code,{children:"if"}),", but the ",(0,s.jsx)(t.code,{children:"switch"})," might be much more readable than a long list of ",(0,s.jsx)(t.code,{children:"else if"})," statements with nearly identical conditions."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Return the error type based on the code"',children:"function errorDescription(error) {\n switch (error.code) {\n case 400:\n return 'Bad Request';\n case 401:\n return 'Unauthorized';\n case 403:\n return 'Forbidden';\n case 404:\n return 'Not Found'\n default:\n return 'Unknown Error';\n }\n}\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Some things to remember when working with a ",(0,s.jsx)(t.code,{children:"switch"}),":"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["If multiple cases fulfil the condition, a ",(0,s.jsx)(t.code,{children:"switch"})," will execute the first from the top."]}),"\n",(0,s.jsx)(t.li,{children:"You can assign multiple cases to the same code block:"}),"\n"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{3-5,8-9} title="Return either sum or difference of two values (sum by default)"',children:"let outcome;\nswitch (a, operation, b) {\n default:\n case '+':\n case 'plus':\n outcome = a + b;\n break;\n case '-':\n case 'minus':\n outcome = a - b;\n break;\n}\n"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Use either ",(0,s.jsx)(t.code,{children:"break"})," statement to end each case or use the ",(0,s.jsx)(t.code,{children:"return"})," statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen."]}),"\n",(0,s.jsxs)(t.li,{children:["Always use ",(0,s.jsx)(t.code,{children:"default"})," statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered."]}),"\n",(0,s.jsxs)(t.li,{children:["Cases in a ",(0,s.jsx)(t.code,{children:"switch"})," are using strict comparison (",(0,s.jsx)(t.code,{children:"==="}),") for evaluation, so the provided value must match the case not only by value but also by type. A string value of ",(0,s.jsx)(t.code,{children:"'0'"})," won't trigger an integer ",(0,s.jsx)(t.code,{children:"0"})," case."]}),"\n"]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsx)(t.p,{children:"By default, the switch statement is a single block for the scope. If you, however, want to declare variables of the same name in different cases, you can do it by adding parentheses:"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:"{4,7,9,12} title=\"Despite 'outcome' variable being initialized twice with 'let', it will not drop an error because of two different block scopes\"",children:"switch (a, operation, b) {\n default:\n case '+':\n case 'plus': {\n let outcome = a + b;\n break;\n }\n case '-':\n case 'minus': {\n let outcome = a - b;\n break;\n }\n}\n"})})]})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>o});n(7294);const s="leadText_qzwo";var i=n(5893);const o=e=>{let{content:t}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:s,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var s=n(7294);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/18f12793.9100f5f4.js b/assets/js/18f12793.9100f5f4.js new file mode 100644 index 000000000..456d9e13f --- /dev/null +++ b/assets/js/18f12793.9100f5f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4799],{4785:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var i=n(5893),o=n(1151),a=n(1872);const s={id:"sfmc-sql-debugging-value-length",title:"SFMC SQL Debugging Value Length",sidebar_label:"Debugging Value Length",description:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",image:"img/og/og-image-sql-debugging-value-length.png",tags:["Marketing Cloud","SQL","Snippet","Data Extensions","Debugging","Automation"]},l=void 0,r={id:"sql/snippets/sfmc-sql-debugging-value-length",title:"SFMC SQL Debugging Value Length",description:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",source:"@site/docs/sql/snippets/sfmc-sql-debugging-value-length.mdx",sourceDirName:"sql/snippets",slug:"/sql/snippets/sfmc-sql-debugging-value-length",permalink:"/docs/sql/snippets/sfmc-sql-debugging-value-length",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/snippets/sfmc-sql-debugging-value-length.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Automation",permalink:"/docs/tags/automation"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-debugging-value-length",title:"SFMC SQL Debugging Value Length",sidebar_label:"Debugging Value Length",description:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",image:"img/og/og-image-sql-debugging-value-length.png",tags:["Marketing Cloud","SQL","Snippet","Data Extensions","Debugging","Automation"]},sidebar:"snippets",previous:{title:"Debugging Email Sends",permalink:"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},next:{title:"MC Personalization Snippets",permalink:"/docs/category/mc-personalization-snippets"}},c={},h=[{value:"Problem with recommended Data Extension total field length",id:"problem-with-recommended-data-extension-total-field-length",level:2},{value:"Short Term Solution",id:"short-term-solution",level:2},{value:"Discovery with MAX LEN",id:"discovery-with-max-len",level:3},{value:"Debugging with MAX LEN",id:"debugging-with-max-len",level:3},{value:"Basic Long Term Solution",id:"basic-long-term-solution",level:2},{value:"Options",id:"options",level:2},{value:"Show fields with too long value",id:"show-fields-with-too-long-value",level:3},{value:"Extended length information",id:"extended-length-information",level:3},{value:"Fully-fledged Long Term Solution",id:"fully-fledged-long-term-solution",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.m,{content:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL."}),"\n",(0,i.jsx)(t.h2,{id:"problem-with-recommended-data-extension-total-field-length",children:"Problem with recommended Data Extension total field length"}),"\n",(0,i.jsx)(t.p,{children:"Working with Marketing Cloud (or any other Marketing Automation Platform) is always the dance between optimisation and flexibility. It is easily visible when working with SFMC Data Extensions."}),"\n",(0,i.jsx)(t.p,{children:"On the one hand, limiting the maximum field length is a must-have best practice. Salesforce recommends keeping the total sum of all fields length under 4000 characters. For many use cases, a tiny number. But if you want to have lean Data Extensions to query them quickly, it is the way. And in the Marketing Cloud, nearly everything is a query - even if you don't write a line of SQL."}),"\n",(0,i.jsx)(t.p,{children:"On the other hand, it might be tough to limit your Data Extension so much in real-life scenarios. Especially when you are bringing data from other systems. Example? Salesforce CRM integration through Marketing Cloud Connect. The picklist fields from CRM come to Synchronized Data Extensions as 255 character text fields - even if they have only one-digit values associated with it. Select a few such picklists to be available in Marketing Cloud, and you hit the Data Extension character length limit recommended by Salesforce."}),"\n",(0,i.jsx)(t.p,{children:"What to do with that?"}),"\n",(0,i.jsxs)(t.p,{children:["Limit the maximum length of those picklists in the Marketing Cloud Data Extension you use for campaigns. You are sure that your Gender field will always have one character value (",(0,i.jsx)(t.code,{children:"F"}),"/",(0,i.jsx)(t.code,{children:"M"}),"/",(0,i.jsx)(t.code,{children:"O"}),"/",(0,i.jsx)(t.code,{children:"U"}),")? Make the maximum length equal to 1. It is an excellent way to trim unneeded length, but sometimes, you might be surprised, especially with less obvious picklists, like a job title. Similar issues might also come from standard text fields."]}),"\n",(0,i.jsx)(t.p,{children:"Once you build your standard Data Extension with those optimisations in mind, it is time to pull the data from Synchronized Data Extensions."}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"I'm mentioning the Marketing Cloud Connect Synchronized Data Extensions, but you can also leverage it for FTP-based data uploads. The solution will require additional intermediate Data Extension with generous field lengths in place of Marketing Cloud Connect Synchronized Data Extension. Rest will be the same."})}),"\n",(0,i.jsx)(t.p,{children:"All good, until one of the values, exceed the maximum length you set for its field. The Automation crashes with a cryptic error that tells you nothing and can push you for a long crusade to find the culprit. What now?"}),"\n",(0,i.jsx)(t.h2,{id:"short-term-solution",children:"Short Term Solution"}),"\n",(0,i.jsxs)(t.p,{children:["You can make quick manual check with a simple SQL query. Open your ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-basics#query-studio",children:"Query Studio"})," and copy-paste the below code:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",metastring:'title="Sample maximum length checking query on Contact object Synchronized Data Extension"',children:"SELECT\n MAX(LEN(c.Id)) AS SubscriberKey\n , MAX(LEN(c.FirstName)) AS FirstName\n , MAX(LEN(c.LastName)) AS LastName\n , MAX(LEN(c.Email)) AS EmailAddress\n , MAX(LEN(c.JobTitle__c)) AS CurrentRole\n , MAX(LEN(c.Industry__c)) AS Industry\nFROM Contact_Salesforce AS c\n"})}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["If you are running those queries from the child Business Unit, add ",(0,i.jsx)(t.code,{children:"Ent."})," prefix to Synchronized Data Extension names, as those are stored on the parent level."]})}),"\n",(0,i.jsxs)(t.p,{children:["This query will output one row of data with the current maximum length of the values that you have in your Synchronized Data Extension for the selected fields. It uses ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-numeric-functions#min-and-max",children:(0,i.jsx)(t.code,{children:"MAX"})})," function on the ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-string-functions#len",children:(0,i.jsx)(t.code,{children:"LEN"})})," outcome to find the single maximum length available across all records. It has two great uses:"]}),"\n",(0,i.jsx)(t.h3,{id:"discovery-with-max-len",children:"Discovery with MAX LEN"}),"\n",(0,i.jsx)(t.p,{children:"You can use it even before configuring the Data Extension and Profile Attributes to analyse your real-life data."}),"\n",(0,i.jsx)(t.p,{children:"For example, if out of your whole database, the longest First Name is 33 characters, you will probably be just fine with a maximum length of 40 on this field. If a picklist field returns you 5 with this query - you won't need the default 255 characters."}),"\n",(0,i.jsx)(t.p,{children:"Of course, as mentioned above, the values might get longer in the future. But as Marketing Cloud allows you to change maximum field length up but not down, it might be a good idea to try as low as reasonable and leave space for growth."}),"\n",(0,i.jsx)(t.h3,{id:"debugging-with-max-len",children:"Debugging with MAX LEN"}),"\n",(0,i.jsxs)(t.p,{children:["The second use of the above snippet is quick debugging when an error occurs. Execute it in ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-basics#query-studio",children:"Query Studio"})," and compare against the column lengths you set up in your Data Extension. If you see in Query Studio any value longer than the maximum you set up in Data Extension - you found a culprit."]}),"\n",(0,i.jsx)(t.p,{children:"Now you can look in the data source and check whether this longer-than-expected value is correct. If yes, it is time to update your maximum length in the Data Extension and Profile Attribute configuration."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"In most cases, the field length of 255 should be more than enough. But if you need it, Marketing Cloud allows you to go up to 4000 characters per field."}),(0,i.jsxs)(t.p,{children:["4000 characters length is an instant way of getting over the recommended limit, but it might be useful for logging Data Extensions that you won't query in the future. For example, if you want to save ",(0,i.jsxs)(t.a,{href:"/docs/config/sfmc-system-data-views#_bounce",children:[(0,i.jsx)(t.code,{children:"_Bounce"})," Data View"]})," to standard Data Extension, ",(0,i.jsx)(t.code,{children:"SMTPBounceReason"})," might use such a long field."]}),(0,i.jsxs)(t.p,{children:["If you need more, there is a trick reported by ",(0,i.jsx)(t.a,{href:"https://salesforce.stackexchange.com/questions/154402/data-extension-maximum-characters-of-text-field/154403",children:"Markus Slabina"}),". Use Email Studio to add a new field and make the length empty. Save. It will create a ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-conversion-functions#data-types",children:(0,i.jsx)(t.code,{children:"nvarchar(max)"})})," field that allows absurdly long data to be stored."]}),(0,i.jsx)(t.p,{children:"Remember that:"}),(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"It works only in Email Studio - Contact Builder won't work"}),"\n",(0,i.jsx)(t.li,{children:"It is a workaround and might disappear at any moment"}),"\n",(0,i.jsx)(t.li,{children:"You shouldn't use it unless there is no other option"}),"\n"]})]}),"\n",(0,i.jsx)(t.h2,{id:"basic-long-term-solution",children:"Basic Long Term Solution"}),"\n",(0,i.jsx)(t.p,{children:"The snippet above is nice but suitable only for short term manual checks. And you don't want to perform manual checks for the long term. If you wonder whether there is a way to automate it nicely, you are here for a treat."}),"\n",(0,i.jsx)(t.p,{children:"Yes, you can automate such validation by using two additional Activities."}),"\n",(0,i.jsx)(t.p,{children:"Go to the Automation that takes care of moving the data from Synchronized Data Extension do Standard Data Extension and Profile Attributes. Before the Activities that are transfering the data, add a SQL Query Activity. In it, paste the below code:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",metastring:'title="Basic field length checking query"',children:"SELECT\n c.Id AS ContactID\n , LEN(c.Id) AS SubscriberKey\n , LEN(c.FirstName) AS FirstName\n , LEN(c.LastName) AS LastName\n , LEN(c.Email) AS EmailAddress\n , LEN(c.JobTitle__c) AS JobTitle\n , LEN(c.Industry__c) AS Industry\nFROM Contact_Salesforce AS c\nWHERE\n 18 - LEN(c.Id) < 0\n OR 40 - LEN(c.FirstName) < 0\n OR 80 - LEN(c.LastName) < 0\n OR 254 - LEN(c.Email) < 0\n OR 80 - LEN(c.JobTitle__c) < 0\n OR 40 - LEN(c.Industry__c) < 0\n"})}),"\n",(0,i.jsx)(t.p,{children:"Of course, you will want to adapt it to your needs. Change the fields along with their names and lengths. Select the right Synchronized Data Extension. How? Let's dive in what this code does so that you can make it your own."}),"\n",(0,i.jsxs)(t.p,{children:["The first field we ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(t.code,{children:"SELECT"})})," is the Unique Identifier (Contact ID / Subscriber Key or other based on the specific object you are validating). It is useful to quickly know which record(s) should you checked when some values lengths exceed the expectations."]}),"\n",(0,i.jsxs)(t.p,{children:["After that, you can see the standard ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-from",children:(0,i.jsx)(t.code,{children:"FROM"})})," statement. You can, of course, ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(t.code,{children:"JOIN"})})," additional data sources."]}),"\n",(0,i.jsxs)(t.p,{children:["Finally, there is a ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(t.code,{children:"WHERE"})})," statement. In it, we are checking whether at least one field on each record has a value longer than expected. To adapt it - change the number on the left to the length of the field you set up in the target Data Extension / Profile Attribute."]}),"\n",(0,i.jsx)(t.p,{children:"This SQL Query Activity should output the rows to a technical Value Length Data Extension with all the same columns as the target Data Extension / Profile Attributes list. However, it can have much shorter max lengths for the columns, as all fields but the Unique Identifier one will output only the field's length (up to 4 digits). Configure the SQL Activity to Overwrite the technical Data Extension and always have the latest state data."}),"\n",(0,i.jsx)(t.p,{children:"Right after this SQL Query Activity add Verification Activity and configure it to check the technical Data Extension mentioned above. If there is any row in it - it should stop the whole Automation and send an alert email to the Marketing Cloud administrator."}),"\n",(0,i.jsx)(t.p,{children:"To sum up, sample Automation could look like this:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"SQL Query Activity with the Debugging Value Length query"}),"\n",(0,i.jsx)(t.li,{children:"Verification Activity that checks Value Length Data Extension"}),"\n",(0,i.jsx)(t.li,{children:"SQL Query Activity that moves data from Synchronized Data Extension to target Data Extension"}),"\n",(0,i.jsx)(t.li,{children:"Export Activity"}),"\n",(0,i.jsx)(t.li,{children:"Transfer Activity"}),"\n",(0,i.jsx)(t.li,{children:"Import Activity"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The last three Activities above are the classic ETL group for updating the All Subscribers and Profile Attributes."}),"\n",(0,i.jsx)(t.p,{children:"Such setup won't silently crash your Automation whenever there is a single value longer than expected. It will stop the Automation before the crash, inform the administrator that there is an issue and provide Unique Identifiers of records leading to that error for an easy check. Neat, right? Well, it can be even better."}),"\n",(0,i.jsx)(t.h2,{id:"options",children:"Options"}),"\n",(0,i.jsx)(t.p,{children:"The basic version above is already lovely, but we can make a few improvements to make the administrator's life even easier."}),"\n",(0,i.jsx)(t.h3,{id:"show-fields-with-too-long-value",children:"Show fields with too long value"}),"\n",(0,i.jsx)(t.p,{children:"Previously shown query will show the problematic record, but it will display all field lengths for it. The administrator will still have to compare the lengths to find which one is the issue's source."}),"\n",(0,i.jsxs)(t.p,{children:["However, we already are coding the expected field length in the ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-from",children:(0,i.jsx)(t.code,{children:"FROM"})})," part of the query. Why not use it to make life easier?"]}),"\n",(0,i.jsxs)(t.p,{children:["Let's change the ",(0,i.jsx)(t.code,{children:"LEN(c.Id) AS [Subscriber Key],"})," in the ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(t.code,{children:"SELECT"})})," statement part to something a bit more interesting:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",metastring:'title="Use CASE to display only the problematic fields"',children:"CASE\n WHEN 18 - LEN(c.Id) < 0\n THEN LEN(c.Id)\nEND AS SubscriberKey\n"})}),"\n",(0,i.jsxs)(t.p,{children:["As you can see, we changed a simple line to a more complex ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-case#conditional-values-with-case",children:(0,i.jsx)(t.code,{children:"CASE"})})," statement. There is a good reason for it. Thanks to it, the query will evaluate each field against the expected length and in the Value Length Data Extension display information only for the problematic values."]}),"\n",(0,i.jsx)(t.p,{children:"The administrator will no longer have to compare each field with configured maximum - he will see it directly in the Data Extension, which saves time and limits the errors."}),"\n",(0,i.jsx)(t.h3,{id:"extended-length-information",children:"Extended length information"}),"\n",(0,i.jsxs)(t.p,{children:["We can go even further with this approach and add a bit more data to the output for those problematic fields by making few calculations in ",(0,i.jsx)(t.code,{children:"THEN"})," part of the ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-case#conditional-values-with-case",children:(0,i.jsx)(t.code,{children:"CASE"})})," statement."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",metastring:'{3} title="Let the code do the work"',children:"CASE\n WHEN 18 - LEN(c.Id) < 0\n THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')\nEND AS SubscriberKey\n"})}),"\n",(0,i.jsx)(t.p,{children:"Here, apart from the problematic field's length, we are also showing how much it exceeds the current configuration."}),"\n",(0,i.jsxs)(t.p,{children:["For example, if we expect the First Name to be under 40 characters and one record comes with 46 characters, the previous solution would output ",(0,i.jsx)(t.code,{children:"46"}),". This extended one will be a bit more verbose by showing ",(0,i.jsx)(t.code,{children:"46 (6 over limit)"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Remember that if you implement this option, it will impact the output length in your technical Data Extension. 4 characters will be no longer enough. 22, however, will work like a charm."}),"\n",(0,i.jsx)(t.h2,{id:"fully-fledged-long-term-solution",children:"Fully-fledged Long Term Solution"}),"\n",(0,i.jsxs)(t.p,{children:["After applying both of the above options to the ",(0,i.jsx)(t.a,{href:"#basic-long-term-solution",children:"Basic SQL Snippet"}),", it looks like this:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"SELECT\n c.Id AS ContactID\n , CASE\n WHEN 18 - LEN(c.Id) < 0\n THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')\n END AS SubscriberKey\n , CASE\n WHEN 40 - LEN(c.FirstName) < 0\n THEN CONCAT(LEN(c.FirstName), '(', LEN(c.FirstName) - 40, ' over limit)')\n END AS FirstName\n , CASE\n WHEN 80 - LEN(c.LastName) < 0\n THEN CONCAT(LEN(c.LastName), '(', LEN(c.LastName) - 80, ' over limit)')\n END AS LastName\n , CASE\n WHEN 254 - LEN(c.Email) < 0\n THEN CONCAT(LEN(c.Email), '(', LEN(c.Email) - 254, ' over limit)')\n END AS EmailAddress\n , CASE\n WHEN 80 - LEN(c.JobTitle__c) < 0\n THEN CONCAT(LEN(c.JobTitle__c), '(', LEN(c.JobTitle__c) - 80, ' over limit)')\n END AS JobTitle\n , CASE\n WHEN 40 - LEN(c.Industry__c) < 0\n THEN CONCAT(LEN(c.Industry__c), '(', LEN(c.Industry__c) - 40, ' over limit)')\n END AS Industry\nFROM Contact_Salesforce AS c\nWHERE\n 18 - LEN(c.Id) < 0\n OR 40 - LEN(c.FirstName) < 0\n OR 80 - LEN(c.LastName) < 0\n OR 254 - LEN(c.Email) < 0\n OR 80 - LEN(c.JobTitle__c) < 0\n OR 40 - LEN(c.Industry__c) < 0\n"})})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>a});n(7294);const i="leadText_qzwo";var o=n(5893);const a=e=>{let{content:t}=e;return(0,o.jsx)(o.Fragment,{children:(0,o.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>s});var i=n(7294);const o={},a=i.createContext(o);function s(e){const t=i.useContext(a);return i.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(o):e.components||o:s(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/18f12793.eca4f6de.js b/assets/js/18f12793.eca4f6de.js deleted file mode 100644 index 19ba7fe54..000000000 --- a/assets/js/18f12793.eca4f6de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4799],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>p});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),d=u(n),m=i,p=d["".concat(s,".").concat(m)]||d[m]||h[m]||o;return n?a.createElement(p,l(l({ref:t},c),{},{components:n})):a.createElement(p,l({ref:t},c))}));function p(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=m;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[d]="string"==typeof e?e:i,l[1]=r;for(var u=2;u<o;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>o});var a=n(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},1944:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var a=n(7462),i=(n(7294),n(4137)),o=n(1872);const l={id:"sfmc-sql-debugging-value-length",title:"SFMC SQL Debugging Value Length",sidebar_label:"Debugging Value Length",description:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",image:"img/og/og-image-sql-debugging-value-length.png",tags:["Marketing Cloud","SQL","Snippet","Data Extensions","Debugging","Automation"]},r=void 0,s={unversionedId:"sql/snippets/sfmc-sql-debugging-value-length",id:"sql/snippets/sfmc-sql-debugging-value-length",title:"SFMC SQL Debugging Value Length",description:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",source:"@site/docs/sql/snippets/sfmc-sql-debugging-value-length.mdx",sourceDirName:"sql/snippets",slug:"/sql/snippets/sfmc-sql-debugging-value-length",permalink:"/docs/sql/snippets/sfmc-sql-debugging-value-length",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/snippets/sfmc-sql-debugging-value-length.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Automation",permalink:"/docs/tags/automation"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-debugging-value-length",title:"SFMC SQL Debugging Value Length",sidebar_label:"Debugging Value Length",description:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",image:"img/og/og-image-sql-debugging-value-length.png",tags:["Marketing Cloud","SQL","Snippet","Data Extensions","Debugging","Automation"]},sidebar:"snippets",previous:{title:"Debugging Email Sends",permalink:"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},next:{title:"MC Personalization Snippets",permalink:"/docs/category/mc-personalization-snippets"}},u={},c=[{value:"Problem with recommended Data Extension total field length",id:"problem-with-recommended-data-extension-total-field-length",level:2},{value:"Short Term Solution",id:"short-term-solution",level:2},{value:"Discovery with MAX LEN",id:"discovery-with-max-len",level:3},{value:"Debugging with MAX LEN",id:"debugging-with-max-len",level:3},{value:"Basic Long Term Solution",id:"basic-long-term-solution",level:2},{value:"Options",id:"options",level:2},{value:"Show fields with too long value",id:"show-fields-with-too-long-value",level:3},{value:"Extended length information",id:"extended-length-information",level:3},{value:"Fully-fledged Long Term Solution",id:"fully-fledged-long-term-solution",level:2}],d={toc:c},h="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(h,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(o.m,{content:"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"problem-with-recommended-data-extension-total-field-length"},"Problem with recommended Data Extension total field length"),(0,i.kt)("p",null,"Working with Marketing Cloud (or any other Marketing Automation Platform) is always the dance between optimisation and flexibility. It is easily visible when working with SFMC Data Extensions."),(0,i.kt)("p",null,"On the one hand, limiting the maximum field length is a must-have best practice. Salesforce recommends keeping the total sum of all fields length under 4000 characters. For many use cases, a tiny number. But if you want to have lean Data Extensions to query them quickly, it is the way. And in the Marketing Cloud, nearly everything is a query - even if you don't write a line of SQL."),(0,i.kt)("p",null,"On the other hand, it might be tough to limit your Data Extension so much in real-life scenarios. Especially when you are bringing data from other systems. Example? Salesforce CRM integration through Marketing Cloud Connect. The picklist fields from CRM come to Synchronized Data Extensions as 255 character text fields - even if they have only one-digit values associated with it. Select a few such picklists to be available in Marketing Cloud, and you hit the Data Extension character length limit recommended by Salesforce."),(0,i.kt)("p",null,"What to do with that?"),(0,i.kt)("p",null,"Limit the maximum length of those picklists in the Marketing Cloud Data Extension you use for campaigns. You are sure that your Gender field will always have one character value (",(0,i.kt)("inlineCode",{parentName:"p"},"F"),"/",(0,i.kt)("inlineCode",{parentName:"p"},"M"),"/",(0,i.kt)("inlineCode",{parentName:"p"},"O"),"/",(0,i.kt)("inlineCode",{parentName:"p"},"U"),")? Make the maximum length equal to 1. It is an excellent way to trim unneeded length, but sometimes, you might be surprised, especially with less obvious picklists, like a job title. Similar issues might also come from standard text fields."),(0,i.kt)("p",null,"Once you build your standard Data Extension with those optimisations in mind, it is time to pull the data from Synchronized Data Extensions."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"I'm mentioning the Marketing Cloud Connect Synchronized Data Extensions, but you can also leverage it for FTP-based data uploads. The solution will require additional intermediate Data Extension with generous field lengths in place of Marketing Cloud Connect Synchronized Data Extension. Rest will be the same.")),(0,i.kt)("p",null,"All good, until one of the values, exceed the maximum length you set for its field. The Automation crashes with a cryptic error that tells you nothing and can push you for a long crusade to find the culprit. What now?"),(0,i.kt)("h2",{id:"short-term-solution"},"Short Term Solution"),(0,i.kt)("p",null,"You can make quick manual check with a simple SQL query. Open your ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics#query-studio"},"Query Studio")," and copy-paste the below code:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Sample maximum length checking query on Contact object Synchronized Data Extension"',title:'"Sample',maximum:!0,length:!0,checking:!0,query:!0,on:!0,Contact:!0,object:!0,Synchronized:!0,Data:!0,'Extension"':!0},"SELECT\n MAX(LEN(c.Id)) AS SubscriberKey\n , MAX(LEN(c.FirstName)) AS FirstName\n , MAX(LEN(c.LastName)) AS LastName\n , MAX(LEN(c.Email)) AS EmailAddress\n , MAX(LEN(c.JobTitle__c)) AS CurrentRole\n , MAX(LEN(c.Industry__c)) AS Industry\nFROM Contact_Salesforce AS c\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you are running those queries from the child Business Unit, add ",(0,i.kt)("inlineCode",{parentName:"p"},"Ent.")," prefix to Synchronized Data Extension names, as those are stored on the parent level.")),(0,i.kt)("p",null,"This query will output one row of data with the current maximum length of the values that you have in your Synchronized Data Extension for the selected fields. It uses ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-numeric-functions#min-and-max"},(0,i.kt)("inlineCode",{parentName:"a"},"MAX"))," function on the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions#len"},(0,i.kt)("inlineCode",{parentName:"a"},"LEN"))," outcome to find the single maximum length available across all records. It has two great uses:"),(0,i.kt)("h3",{id:"discovery-with-max-len"},"Discovery with MAX LEN"),(0,i.kt)("p",null,"You can use it even before configuring the Data Extension and Profile Attributes to analyse your real-life data."),(0,i.kt)("p",null,"For example, if out of your whole database, the longest First Name is 33 characters, you will probably be just fine with a maximum length of 40 on this field. If a picklist field returns you 5 with this query - you won't need the default 255 characters."),(0,i.kt)("p",null,"Of course, as mentioned above, the values might get longer in the future. But as Marketing Cloud allows you to change maximum field length up but not down, it might be a good idea to try as low as reasonable and leave space for growth."),(0,i.kt)("h3",{id:"debugging-with-max-len"},"Debugging with MAX LEN"),(0,i.kt)("p",null,"The second use of the above snippet is quick debugging when an error occurs. Execute it in ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics#query-studio"},"Query Studio")," and compare against the column lengths you set up in your Data Extension. If you see in Query Studio any value longer than the maximum you set up in Data Extension - you found a culprit."),(0,i.kt)("p",null,"Now you can look in the data source and check whether this longer-than-expected value is correct. If yes, it is time to update your maximum length in the Data Extension and Profile Attribute configuration."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"In most cases, the field length of 255 should be more than enough. But if you need it, Marketing Cloud allows you to go up to 4000 characters per field."),(0,i.kt)("p",{parentName:"admonition"},"4000 characters length is an instant way of getting over the recommended limit, but it might be useful for logging Data Extensions that you won't query in the future. For example, if you want to save ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#_bounce"},(0,i.kt)("inlineCode",{parentName:"a"},"_Bounce")," Data View")," to standard Data Extension, ",(0,i.kt)("inlineCode",{parentName:"p"},"SMTPBounceReason")," might use such a long field."),(0,i.kt)("p",{parentName:"admonition"},"If you need more, there is a trick reported by ",(0,i.kt)("a",{parentName:"p",href:"https://salesforce.stackexchange.com/questions/154402/data-extension-maximum-characters-of-text-field/154403"},"Markus Slabina"),". Use Email Studio to add a new field and make the length empty. Save. It will create a ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#data-types"},(0,i.kt)("inlineCode",{parentName:"a"},"nvarchar(max)"))," field that allows absurdly long data to be stored."),(0,i.kt)("p",{parentName:"admonition"},"Remember that:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"It works only in Email Studio - Contact Builder won't work"),(0,i.kt)("li",{parentName:"ol"},"It is a workaround and might disappear at any moment"),(0,i.kt)("li",{parentName:"ol"},"You shouldn't use it unless there is no other option"))),(0,i.kt)("h2",{id:"basic-long-term-solution"},"Basic Long Term Solution"),(0,i.kt)("p",null,"The snippet above is nice but suitable only for short term manual checks. And you don't want to perform manual checks for the long term. If you wonder whether there is a way to automate it nicely, you are here for a treat."),(0,i.kt)("p",null,"Yes, you can automate such validation by using two additional Activities."),(0,i.kt)("p",null,"Go to the Automation that takes care of moving the data from Synchronized Data Extension do Standard Data Extension and Profile Attributes. Before the Activities that are transfering the data, add a SQL Query Activity. In it, paste the below code:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Basic field length checking query"',title:'"Basic',field:!0,length:!0,checking:!0,'query"':!0},"SELECT\n c.Id AS ContactID\n , LEN(c.Id) AS SubscriberKey\n , LEN(c.FirstName) AS FirstName\n , LEN(c.LastName) AS LastName\n , LEN(c.Email) AS EmailAddress\n , LEN(c.JobTitle__c) AS JobTitle\n , LEN(c.Industry__c) AS Industry\nFROM Contact_Salesforce AS c\nWHERE\n 18 - LEN(c.Id) < 0\n OR 40 - LEN(c.FirstName) < 0\n OR 80 - LEN(c.LastName) < 0\n OR 254 - LEN(c.Email) < 0\n OR 80 - LEN(c.JobTitle__c) < 0\n OR 40 - LEN(c.Industry__c) < 0\n")),(0,i.kt)("p",null,"Of course, you will want to adapt it to your needs. Change the fields along with their names and lengths. Select the right Synchronized Data Extension. How? Let's dive in what this code does so that you can make it your own."),(0,i.kt)("p",null,"The first field we ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))," is the Unique Identifier (Contact ID / Subscriber Key or other based on the specific object you are validating). It is useful to quickly know which record(s) should you checked when some values lengths exceed the expectations."),(0,i.kt)("p",null,"After that, you can see the standard ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,i.kt)("inlineCode",{parentName:"a"},"FROM"))," statement. You can, of course, ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," additional data sources."),(0,i.kt)("p",null,"Finally, there is a ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE"))," statement. In it, we are checking whether at least one field on each record has a value longer than expected. To adapt it - change the number on the left to the length of the field you set up in the target Data Extension / Profile Attribute."),(0,i.kt)("p",null,"This SQL Query Activity should output the rows to a technical Value Length Data Extension with all the same columns as the target Data Extension / Profile Attributes list. However, it can have much shorter max lengths for the columns, as all fields but the Unique Identifier one will output only the field's length (up to 4 digits). Configure the SQL Activity to Overwrite the technical Data Extension and always have the latest state data."),(0,i.kt)("p",null,"Right after this SQL Query Activity add Verification Activity and configure it to check the technical Data Extension mentioned above. If there is any row in it - it should stop the whole Automation and send an alert email to the Marketing Cloud administrator."),(0,i.kt)("p",null,"To sum up, sample Automation could look like this:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"SQL Query Activity with the Debugging Value Length query"),(0,i.kt)("li",{parentName:"ol"},"Verification Activity that checks Value Length Data Extension"),(0,i.kt)("li",{parentName:"ol"},"SQL Query Activity that moves data from Synchronized Data Extension to target Data Extension"),(0,i.kt)("li",{parentName:"ol"},"Export Activity"),(0,i.kt)("li",{parentName:"ol"},"Transfer Activity"),(0,i.kt)("li",{parentName:"ol"},"Import Activity")),(0,i.kt)("p",null,"The last three Activities above are the classic ETL group for updating the All Subscribers and Profile Attributes."),(0,i.kt)("p",null,"Such setup won't silently crash your Automation whenever there is a single value longer than expected. It will stop the Automation before the crash, inform the administrator that there is an issue and provide Unique Identifiers of records leading to that error for an easy check. Neat, right? Well, it can be even better."),(0,i.kt)("h2",{id:"options"},"Options"),(0,i.kt)("p",null,"The basic version above is already lovely, but we can make a few improvements to make the administrator's life even easier."),(0,i.kt)("h3",{id:"show-fields-with-too-long-value"},"Show fields with too long value"),(0,i.kt)("p",null,"Previously shown query will show the problematic record, but it will display all field lengths for it. The administrator will still have to compare the lengths to find which one is the issue's source."),(0,i.kt)("p",null,"However, we already are coding the expected field length in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,i.kt)("inlineCode",{parentName:"a"},"FROM"))," part of the query. Why not use it to make life easier?"),(0,i.kt)("p",null,"Let's change the ",(0,i.kt)("inlineCode",{parentName:"p"},"LEN(c.Id) AS [Subscriber Key],")," in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))," statement part to something a bit more interesting:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Use CASE to display only the problematic fields"',title:'"Use',CASE:!0,to:!0,display:!0,only:!0,the:!0,problematic:!0,'fields"':!0},"CASE\n WHEN 18 - LEN(c.Id) < 0\n THEN LEN(c.Id)\nEND AS SubscriberKey\n")),(0,i.kt)("p",null,"As you can see, we changed a simple line to a more complex ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#conditional-values-with-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE"))," statement. There is a good reason for it. Thanks to it, the query will evaluate each field against the expected length and in the Value Length Data Extension display information only for the problematic values."),(0,i.kt)("p",null,"The administrator will no longer have to compare each field with configured maximum - he will see it directly in the Data Extension, which saves time and limits the errors."),(0,i.kt)("h3",{id:"extended-length-information"},"Extended length information"),(0,i.kt)("p",null,"We can go even further with this approach and add a bit more data to the output for those problematic fields by making few calculations in ",(0,i.kt)("inlineCode",{parentName:"p"},"THEN")," part of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#conditional-values-with-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE"))," statement."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Let the code do the work"',"{3}":!0,title:'"Let',the:!0,code:!0,do:!0,'work"':!0},"CASE\n WHEN 18 - LEN(c.Id) < 0\n THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')\nEND AS SubscriberKey\n")),(0,i.kt)("p",null,"Here, apart from the problematic field's length, we are also showing how much it exceeds the current configuration."),(0,i.kt)("p",null,"For example, if we expect the First Name to be under 40 characters and one record comes with 46 characters, the previous solution would output ",(0,i.kt)("inlineCode",{parentName:"p"},"46"),". This extended one will be a bit more verbose by showing ",(0,i.kt)("inlineCode",{parentName:"p"},"46 (6 over limit)"),"."),(0,i.kt)("p",null,"Remember that if you implement this option, it will impact the output length in your technical Data Extension. 4 characters will be no longer enough. 22, however, will work like a charm."),(0,i.kt)("h2",{id:"fully-fledged-long-term-solution"},"Fully-fledged Long Term Solution"),(0,i.kt)("p",null,"After applying both of the above options to the ",(0,i.kt)("a",{parentName:"p",href:"#basic-long-term-solution"},"Basic SQL Snippet"),", it looks like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n c.Id AS ContactID\n , CASE\n WHEN 18 - LEN(c.Id) < 0\n THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')\n END AS SubscriberKey\n , CASE\n WHEN 40 - LEN(c.FirstName) < 0\n THEN CONCAT(LEN(c.FirstName), '(', LEN(c.FirstName) - 40, ' over limit)')\n END AS FirstName\n , CASE\n WHEN 80 - LEN(c.LastName) < 0\n THEN CONCAT(LEN(c.LastName), '(', LEN(c.LastName) - 80, ' over limit)')\n END AS LastName\n , CASE\n WHEN 254 - LEN(c.Email) < 0\n THEN CONCAT(LEN(c.Email), '(', LEN(c.Email) - 254, ' over limit)')\n END AS EmailAddress\n , CASE\n WHEN 80 - LEN(c.JobTitle__c) < 0\n THEN CONCAT(LEN(c.JobTitle__c), '(', LEN(c.JobTitle__c) - 80, ' over limit)')\n END AS JobTitle\n , CASE\n WHEN 40 - LEN(c.Industry__c) < 0\n THEN CONCAT(LEN(c.Industry__c), '(', LEN(c.Industry__c) - 40, ' over limit)')\n END AS Industry\nFROM Contact_Salesforce AS c\nWHERE\n 18 - LEN(c.Id) < 0\n OR 40 - LEN(c.FirstName) < 0\n OR 80 - LEN(c.LastName) < 0\n OR 254 - LEN(c.Email) < 0\n OR 80 - LEN(c.JobTitle__c) < 0\n OR 40 - LEN(c.Industry__c) < 0\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/194.c8a2b0ef.js b/assets/js/194.c8a2b0ef.js new file mode 100644 index 000000000..92ca3dff7 --- /dev/null +++ b/assets/js/194.c8a2b0ef.js @@ -0,0 +1,23670 @@ +exports.id = 194; +exports.ids = [194]; +exports.modules = { + +/***/ 17295: +/***/ ((module) => { + +(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +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"); } } + +/******************************************************************************* + * Copyright (c) 2017 Kiel University and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = function () { + function ELK() { + var _this = this; + + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, + _ref2$logging = _ref2.logging, + logging = _ref2$logging === undefined ? false : _ref2$logging, + _ref2$measureExecutio = _ref2.measureExecutionTime, + measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + layoutOptions: layoutOptions, + options: { + logging: logging, + measureExecutionTime: measureExecutionTime + } + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + self.convertGwtStyleError(err); + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }, { + key: 'convertGwtStyleError', + value: function convertGwtStyleError(err) { + if (!err) { + return; + } + // Somewhat flatten the way GWT stores nested exception(s) + var javaException = err['__java$exception']; + if (javaException) { + // Note that the property name of the nested exception is different + // in the non-minified ('cause') and the minified (not deterministic) version. + // Hence, the version below only works for the non-minified version. + // However, as the minified stack trace is not of much use anyway, one + // should switch the used version for debugging in such a case. + if (javaException.cause && javaException.cause.backingJsObject) { + err.cause = javaException.cause.backingJsObject; + this.convertGwtStyleError(err.cause); + } + delete err['__java$exception']; + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- +var g, i, o; + +// -------------- GENERATED CODE -------------- +function nb(){} +function xb(){} +function Fd(){} +function hh(){} +function lq(){} +function Nq(){} +function ir(){} +function Ws(){} +function Zw(){} +function jx(){} +function rx(){} +function sx(){} +function My(){} +function bA(){} +function mA(){} +function tA(){} +function aB(){} +function dB(){} +function jB(){} +function dC(){} +function keb(){} +function geb(){} +function oeb(){} +function iob(){} +function Job(){} +function Rob(){} +function apb(){} +function ipb(){} +function nrb(){} +function wrb(){} +function Brb(){} +function Prb(){} +function ltb(){} +function svb(){} +function xvb(){} +function zvb(){} +function $xb(){} +function Gzb(){} +function NAb(){} +function VAb(){} +function rBb(){} +function RBb(){} +function TBb(){} +function XBb(){} +function ZBb(){} +function _Bb(){} +function bCb(){} +function dCb(){} +function fCb(){} +function jCb(){} +function rCb(){} +function uCb(){} +function wCb(){} +function yCb(){} +function ACb(){} +function ECb(){} +function FEb(){} +function IEb(){} +function KEb(){} +function MEb(){} +function gFb(){} +function FFb(){} +function JFb(){} +function xGb(){} +function AGb(){} +function YGb(){} +function oHb(){} +function tHb(){} +function xHb(){} +function pIb(){} +function BJb(){} +function kLb(){} +function mLb(){} +function oLb(){} +function qLb(){} +function FLb(){} +function JLb(){} +function KMb(){} +function MMb(){} +function OMb(){} +function YMb(){} +function MNb(){} +function ONb(){} +function aOb(){} +function eOb(){} +function xOb(){} +function BOb(){} +function DOb(){} +function FOb(){} +function IOb(){} +function MOb(){} +function POb(){} +function UOb(){} +function ZOb(){} +function cPb(){} +function gPb(){} +function nPb(){} +function qPb(){} +function tPb(){} +function wPb(){} +function CPb(){} +function qQb(){} +function GQb(){} +function bRb(){} +function gRb(){} +function kRb(){} +function pRb(){} +function wRb(){} +function xSb(){} +function TSb(){} +function VSb(){} +function XSb(){} +function ZSb(){} +function _Sb(){} +function tTb(){} +function DTb(){} +function FTb(){} +function FXb(){} +function hXb(){} +function hWb(){} +function mWb(){} +function CVb(){} +function XXb(){} +function $Xb(){} +function bYb(){} +function lYb(){} +function FYb(){} +function XYb(){} +function aZb(){} +function SZb(){} +function ZZb(){} +function Z_b(){} +function j_b(){} +function j$b(){} +function b$b(){} +function f$b(){} +function n$b(){} +function K_b(){} +function V_b(){} +function b0b(){} +function l0b(){} +function X1b(){} +function _1b(){} +function x3b(){} +function r4b(){} +function w4b(){} +function A4b(){} +function E4b(){} +function I4b(){} +function M4b(){} +function o5b(){} +function q5b(){} +function w5b(){} +function A5b(){} +function E5b(){} +function h6b(){} +function j6b(){} +function l6b(){} +function q6b(){} +function v6b(){} +function y6b(){} +function G6b(){} +function K6b(){} +function N6b(){} +function P6b(){} +function R6b(){} +function b7b(){} +function f7b(){} +function j7b(){} +function n7b(){} +function C7b(){} +function H7b(){} +function J7b(){} +function L7b(){} +function N7b(){} +function P7b(){} +function a8b(){} +function c8b(){} +function e8b(){} +function g8b(){} +function i8b(){} +function m8b(){} +function Z8b(){} +function f9b(){} +function i9b(){} +function o9b(){} +function C9b(){} +function F9b(){} +function K9b(){} +function Q9b(){} +function aac(){} +function bac(){} +function eac(){} +function mac(){} +function pac(){} +function rac(){} +function tac(){} +function xac(){} +function Aac(){} +function Dac(){} +function Iac(){} +function Oac(){} +function Uac(){} +function Ucc(){} +function scc(){} +function ycc(){} +function Acc(){} +function Ccc(){} +function Ncc(){} +function Wcc(){} +function ydc(){} +function Adc(){} +function Gdc(){} +function Ldc(){} +function Zdc(){} +function fec(){} +function Dec(){} +function Gec(){} +function Kec(){} +function efc(){} +function jfc(){} +function nfc(){} +function Bfc(){} +function Ifc(){} +function Lfc(){} +function Rfc(){} +function Ufc(){} +function Zfc(){} +function cgc(){} +function egc(){} +function ggc(){} +function igc(){} +function kgc(){} +function Dgc(){} +function Hgc(){} +function Lgc(){} +function Ngc(){} +function Pgc(){} +function Vgc(){} +function Ygc(){} +function chc(){} +function ehc(){} +function ghc(){} +function ihc(){} +function mhc(){} +function rhc(){} +function uhc(){} +function whc(){} +function yhc(){} +function Ahc(){} +function Chc(){} +function Ghc(){} +function Nhc(){} +function Phc(){} +function Rhc(){} +function Thc(){} +function $hc(){} +function aic(){} +function cic(){} +function eic(){} +function jic(){} +function nic(){} +function pic(){} +function ric(){} +function vic(){} +function yic(){} +function Dic(){} +function Ric(){} +function Zic(){} +function bjc(){} +function djc(){} +function jjc(){} +function njc(){} +function rjc(){} +function tjc(){} +function zjc(){} +function Djc(){} +function Fjc(){} +function Ljc(){} +function Pjc(){} +function Rjc(){} +function fkc(){} +function Kkc(){} +function Mkc(){} +function Okc(){} +function Qkc(){} +function Skc(){} +function Ukc(){} +function Wkc(){} +function clc(){} +function elc(){} +function klc(){} +function mlc(){} +function olc(){} +function qlc(){} +function wlc(){} +function ylc(){} +function Alc(){} +function Jlc(){} +function Joc(){} +function poc(){} +function roc(){} +function toc(){} +function voc(){} +function Boc(){} +function Foc(){} +function Hoc(){} +function Loc(){} +function Noc(){} +function Poc(){} +function qnc(){} +function unc(){} +function upc(){} +function kpc(){} +function mpc(){} +function opc(){} +function qpc(){} +function ypc(){} +function Cpc(){} +function Mpc(){} +function Qpc(){} +function dqc(){} +function jqc(){} +function Aqc(){} +function Eqc(){} +function Gqc(){} +function Sqc(){} +function arc(){} +function lrc(){} +function zrc(){} +function Hrc(){} +function bsc(){} +function dsc(){} +function fsc(){} +function ksc(){} +function msc(){} +function Asc(){} +function Csc(){} +function Esc(){} +function Ksc(){} +function Nsc(){} +function Ssc(){} +function CCc(){} +function tGc(){} +function aHc(){} +function gHc(){} +function nIc(){} +function PJc(){} +function XKc(){} +function fLc(){} +function hLc(){} +function lLc(){} +function eNc(){} +function IOc(){} +function MOc(){} +function WOc(){} +function YOc(){} +function $Oc(){} +function cPc(){} +function iPc(){} +function mPc(){} +function oPc(){} +function qPc(){} +function sPc(){} +function wPc(){} +function APc(){} +function FPc(){} +function HPc(){} +function NPc(){} +function PPc(){} +function TPc(){} +function VPc(){} +function ZPc(){} +function _Pc(){} +function bQc(){} +function dQc(){} +function SQc(){} +function hRc(){} +function HRc(){} +function HSc(){} +function pSc(){} +function xSc(){} +function zSc(){} +function BSc(){} +function DSc(){} +function FSc(){} +function CTc(){} +function ITc(){} +function KTc(){} +function MTc(){} +function XTc(){} +function ZTc(){} +function jVc(){} +function lVc(){} +function zVc(){} +function IVc(){} +function KVc(){} +function KWc(){} +function uWc(){} +function xWc(){} +function AWc(){} +function QWc(){} +function UWc(){} +function qXc(){} +function KXc(){} +function OXc(){} +function SXc(){} +function $Xc(){} +function mYc(){} +function rYc(){} +function zYc(){} +function DYc(){} +function FYc(){} +function HYc(){} +function JYc(){} +function cZc(){} +function gZc(){} +function iZc(){} +function pZc(){} +function tZc(){} +function vZc(){} +function AZc(){} +function GZc(){} +function l_c(){} +function l1c(){} +function b1c(){} +function d1c(){} +function h1c(){} +function n1c(){} +function r1c(){} +function v1c(){} +function x1c(){} +function D1c(){} +function H1c(){} +function L1c(){} +function R1c(){} +function V1c(){} +function Z1c(){} +function Z0c(){} +function a0c(){} +function c0c(){} +function e0c(){} +function k0c(){} +function o0c(){} +function b2c(){} +function l2c(){} +function p2c(){} +function Y2c(){} +function _2c(){} +function A3c(){} +function F3c(){} +function I3c(){} +function K3c(){} +function M3c(){} +function Q3c(){} +function U3c(){} +function c5c(){} +function D5c(){} +function G5c(){} +function J5c(){} +function N5c(){} +function V5c(){} +function p6c(){} +function s6c(){} +function H6c(){} +function K6c(){} +function _7c(){} +function h8c(){} +function j8c(){} +function o8c(){} +function r8c(){} +function u8c(){} +function R8c(){} +function X8c(){} +function o9c(){} +function s9c(){} +function x9c(){} +function Qad(){} +function rcd(){} +function Xcd(){} +function vdd(){} +function Tdd(){} +function _dd(){} +function qed(){} +function sed(){} +function ved(){} +function Hed(){} +function Zed(){} +function bfd(){} +function ifd(){} +function Gfd(){} +function Ifd(){} +function Igd(){} +function agd(){} +function dgd(){} +function pgd(){} +function Hgd(){} +function Kgd(){} +function Mgd(){} +function Ogd(){} +function Qgd(){} +function Sgd(){} +function Ugd(){} +function Wgd(){} +function Ygd(){} +function $gd(){} +function ahd(){} +function chd(){} +function ehd(){} +function ghd(){} +function ihd(){} +function khd(){} +function mhd(){} +function ohd(){} +function qhd(){} +function shd(){} +function Shd(){} +function lkd(){} +function znd(){} +function Jpd(){} +function jrd(){} +function Mrd(){} +function Qrd(){} +function Urd(){} +function Yrd(){} +function Yud(){} +function eud(){} +function asd(){} +function Lsd(){} +function btd(){} +function dtd(){} +function jtd(){} +function otd(){} +function ztd(){} +function Xxd(){} +function $yd(){} +function rzd(){} +function Rzd(){} +function KAd(){} +function hCd(){} +function _Cd(){} +function _Sd(){} +function OSd(){} +function BDd(){} +function BId(){} +function JId(){} +function YHd(){} +function fLd(){} +function cPd(){} +function hQd(){} +function AQd(){} +function kUd(){} +function VUd(){} +function pVd(){} +function W$d(){} +function Z$d(){} +function a_d(){} +function i_d(){} +function v_d(){} +function y_d(){} +function f1d(){} +function L5d(){} +function v6d(){} +function b8d(){} +function e8d(){} +function h8d(){} +function k8d(){} +function n8d(){} +function q8d(){} +function t8d(){} +function w8d(){} +function z8d(){} +function X9d(){} +function _9d(){} +function Mae(){} +function cbe(){} +function ebe(){} +function hbe(){} +function kbe(){} +function nbe(){} +function qbe(){} +function tbe(){} +function wbe(){} +function zbe(){} +function Cbe(){} +function Fbe(){} +function Ibe(){} +function Lbe(){} +function Obe(){} +function Rbe(){} +function Ube(){} +function Xbe(){} +function $be(){} +function bce(){} +function ece(){} +function hce(){} +function kce(){} +function nce(){} +function qce(){} +function tce(){} +function wce(){} +function zce(){} +function Cce(){} +function Fce(){} +function Ice(){} +function Lce(){} +function Oce(){} +function Rce(){} +function Uce(){} +function Xce(){} +function $ce(){} +function bde(){} +function ede(){} +function hde(){} +function kde(){} +function nde(){} +function qde(){} +function tde(){} +function wde(){} +function Hie(){} +function rke(){} +function rne(){} +function Ene(){} +function Gne(){} +function Jne(){} +function Mne(){} +function Pne(){} +function Sne(){} +function Vne(){} +function Yne(){} +function _ne(){} +function yme(){} +function coe(){} +function foe(){} +function ioe(){} +function loe(){} +function ooe(){} +function roe(){} +function uoe(){} +function xoe(){} +function Aoe(){} +function Doe(){} +function Goe(){} +function Joe(){} +function Moe(){} +function Poe(){} +function Soe(){} +function Voe(){} +function Yoe(){} +function _oe(){} +function cpe(){} +function fpe(){} +function ipe(){} +function lpe(){} +function ope(){} +function rpe(){} +function upe(){} +function xpe(){} +function Ape(){} +function Dpe(){} +function Gpe(){} +function Jpe(){} +function Mpe(){} +function Ppe(){} +function Spe(){} +function Vpe(){} +function Ype(){} +function _pe(){} +function cqe(){} +function fqe(){} +function iqe(){} +function lqe(){} +function oqe(){} +function rqe(){} +function uqe(){} +function Tqe(){} +function sue(){} +function Cue(){} +function A2b(a){} +function J3d(a){} +function zl(){wb()} +function z7b(){s7b()} +function ZHb(){YHb()} +function fSb(){eSb()} +function vSb(){tSb()} +function PUb(){OUb()} +function AVb(){yVb()} +function RVb(){QVb()} +function fWb(){dWb()} +function N5b(){H5b()} +function $9b(){U9b()} +function Lcc(){Hcc()} +function pdc(){Zcc()} +function pec(){iec()} +function pGc(){nGc()} +function jGc(){gGc()} +function YGc(){SGc()} +function cGc(){_Fc()} +function NFc(){KFc()} +function xgc(){sgc()} +function xHc(){tHc()} +function pHc(){lHc()} +function IHc(){CHc()} +function XHc(){RHc()} +function boc(){Mnc()} +function yqc(){mqc()} +function Pzc(){Ozc()} +function ACc(){yCc()} +function aKc(){YJc()} +function FLc(){DLc()} +function DNc(){ANc()} +function TNc(){JNc()} +function iQc(){gQc()} +function WRc(){TRc()} +function C$c(){B$c()} +function J0c(){B0c()} +function x0c(){r0c()} +function j_c(){h_c()} +function N_c(){H_c()} +function V_c(){R_c()} +function E4c(){D4c()} +function a5c(){$4c()} +function v7c(){u7c()} +function Z7c(){X7c()} +function pcd(){ncd()} +function Lcd(){Kcd()} +function Vcd(){Tcd()} +function fUd(){TTd()} +function Bfd(){Afd()} +function jkd(){hkd()} +function vmd(){umd()} +function xnd(){vnd()} +function Hpd(){Fpd()} +function HYd(){lYd()} +function yAd(){qAd()} +function gke(){rue()} +function Yxb(a){uFb(a)} +function Yb(a){this.a=a} +function cc(a){this.a=a} +function df(a){this.a=a} +function kf(a){this.a=a} +function kj(a){this.a=a} +function qj(a){this.a=a} +function Lj(a){this.a=a} +function jh(a){this.a=a} +function th(a){this.a=a} +function Bh(a){this.a=a} +function Xh(a){this.a=a} +function Xn(a){this.a=a} +function Di(a){this.a=a} +function Ki(a){this.a=a} +function Ik(a){this.a=a} +function Qk(a){this.a=a} +function mp(a){this.a=a} +function Lp(a){this.a=a} +function iq(a){this.a=a} +function Eq(a){this.a=a} +function Vq(a){this.a=a} +function Or(a){this.a=a} +function $r(a){this.b=a} +function Aj(a){this.c=a} +function vu(a){this.a=a} +function vw(a){this.a=a} +function gw(a){this.a=a} +function lw(a){this.a=a} +function Iw(a){this.a=a} +function Nw(a){this.a=a} +function Sw(a){this.a=a} +function ex(a){this.a=a} +function fx(a){this.a=a} +function lx(a){this.a=a} +function my(a){this.a=a} +function qy(a){this.a=a} +function Oy(a){this.a=a} +function NB(a){this.a=a} +function XB(a){this.a=a} +function hC(a){this.a=a} +function vC(a){this.a=a} +function MB(){this.a=[]} +function HEb(a,b){a.a=b} +function E2b(a,b){a.a=b} +function F2b(a,b){a.b=b} +function PRb(a,b){a.b=b} +function RRb(a,b){a.b=b} +function QJb(a,b){a.j=b} +function hQb(a,b){a.g=b} +function iQb(a,b){a.i=b} +function _Tb(a,b){a.c=b} +function G2b(a,b){a.c=b} +function H2b(a,b){a.d=b} +function aUb(a,b){a.d=b} +function h3b(a,b){a.k=b} +function O3b(a,b){a.c=b} +function Tmc(a,b){a.c=b} +function Smc(a,b){a.a=b} +function DJc(a,b){a.a=b} +function EJc(a,b){a.f=b} +function NSc(a,b){a.a=b} +function OSc(a,b){a.b=b} +function PSc(a,b){a.d=b} +function QSc(a,b){a.i=b} +function RSc(a,b){a.o=b} +function SSc(a,b){a.r=b} +function yUc(a,b){a.a=b} +function zUc(a,b){a.b=b} +function q3c(a,b){a.e=b} +function r3c(a,b){a.f=b} +function s3c(a,b){a.g=b} +function Y9c(a,b){a.e=b} +function Z9c(a,b){a.f=b} +function kad(a,b){a.f=b} +function Ntd(a,b){a.a=b} +function Otd(a,b){a.b=b} +function BWd(a,b){a.n=b} +function $ee(a,b){a.a=b} +function _ee(a,b){a.c=b} +function ife(a,b){a.c=b} +function Efe(a,b){a.c=b} +function hfe(a,b){a.a=b} +function Dfe(a,b){a.a=b} +function jfe(a,b){a.d=b} +function Ffe(a,b){a.d=b} +function kfe(a,b){a.e=b} +function Gfe(a,b){a.e=b} +function lfe(a,b){a.g=b} +function Hfe(a,b){a.f=b} +function Ife(a,b){a.j=b} +function wme(a,b){a.a=b} +function Fme(a,b){a.a=b} +function xme(a,b){a.b=b} +function gmc(a){a.b=a.a} +function Lg(a){a.c=a.d.d} +function fgb(a){this.a=a} +function zgb(a){this.a=a} +function Xgb(a){this.a=a} +function Xkb(a){this.a=a} +function mkb(a){this.a=a} +function reb(a){this.a=a} +function Seb(a){this.a=a} +function bfb(a){this.a=a} +function Tfb(a){this.a=a} +function blb(a){this.a=a} +function glb(a){this.a=a} +function llb(a){this.a=a} +function Ulb(a){this.a=a} +function _lb(a){this.a=a} +function Plb(a){this.b=a} +function Ppb(a){this.b=a} +function xpb(a){this.b=a} +function mpb(a){this.a=a} +function Yqb(a){this.a=a} +function uqb(a){this.c=a} +function Anb(a){this.c=a} +function zwb(a){this.c=a} +function Dkb(a){this.d=a} +function brb(a){this.a=a} +function Frb(a){this.a=a} +function hsb(a){this.a=a} +function ctb(a){this.a=a} +function cxb(a){this.a=a} +function axb(a){this.a=a} +function exb(a){this.a=a} +function gxb(a){this.a=a} +function wub(a){this.a=a} +function zAb(a){this.a=a} +function JAb(a){this.a=a} +function LAb(a){this.a=a} +function PAb(a){this.a=a} +function VBb(a){this.a=a} +function lCb(a){this.a=a} +function nCb(a){this.a=a} +function pCb(a){this.a=a} +function CCb(a){this.a=a} +function GCb(a){this.a=a} +function bDb(a){this.a=a} +function dDb(a){this.a=a} +function fDb(a){this.a=a} +function uDb(a){this.a=a} +function $Db(a){this.a=a} +function aEb(a){this.a=a} +function eEb(a){this.a=a} +function OEb(a){this.a=a} +function SEb(a){this.a=a} +function SFb(a){this.a=a} +function HFb(a){this.a=a} +function NFb(a){this.a=a} +function WGb(a){this.a=a} +function HJb(a){this.a=a} +function PJb(a){this.a=a} +function kNb(a){this.a=a} +function tOb(a){this.a=a} +function APb(a){this.a=a} +function IQb(a){this.a=a} +function bTb(a){this.a=a} +function dTb(a){this.a=a} +function wTb(a){this.a=a} +function GWb(a){this.a=a} +function UWb(a){this.a=a} +function WWb(a){this.a=a} +function fXb(a){this.a=a} +function jXb(a){this.a=a} +function M0b(a){this.a=a} +function r1b(a){this.a=a} +function D1b(a){this.e=a} +function T3b(a){this.a=a} +function W3b(a){this.a=a} +function _3b(a){this.a=a} +function c4b(a){this.a=a} +function s5b(a){this.a=a} +function u5b(a){this.a=a} +function y5b(a){this.a=a} +function C5b(a){this.a=a} +function Q5b(a){this.a=a} +function S5b(a){this.a=a} +function U5b(a){this.a=a} +function W5b(a){this.a=a} +function l7b(a){this.a=a} +function p7b(a){this.a=a} +function k8b(a){this.a=a} +function L8b(a){this.a=a} +function Rac(a){this.a=a} +function Xac(a){this.a=a} +function $ac(a){this.a=a} +function bbc(a){this.a=a} +function Cdc(a){this.a=a} +function Edc(a){this.a=a} +function Ehc(a){this.a=a} +function khc(a){this.a=a} +function Ihc(a){this.a=a} +function qfc(a){this.a=a} +function tfc(a){this.a=a} +function Wfc(a){this.a=a} +function Fic(a){this.a=a} +function Vic(a){this.a=a} +function fjc(a){this.a=a} +function pjc(a){this.a=a} +function ckc(a){this.a=a} +function hkc(a){this.a=a} +function Ykc(a){this.a=a} +function $kc(a){this.a=a} +function alc(a){this.a=a} +function glc(a){this.a=a} +function ilc(a){this.a=a} +function slc(a){this.a=a} +function Clc(a){this.a=a} +function xoc(a){this.a=a} +function zoc(a){this.a=a} +function spc(a){this.a=a} +function Vqc(a){this.a=a} +function Xqc(a){this.a=a} +function Gsc(a){this.a=a} +function Isc(a){this.a=a} +function JGc(a){this.a=a} +function NGc(a){this.a=a} +function MHc(a){this.a=a} +function JIc(a){this.a=a} +function fJc(a){this.a=a} +function BJc(a){this.a=a} +function dJc(a){this.c=a} +function Trc(a){this.b=a} +function eKc(a){this.a=a} +function IKc(a){this.a=a} +function KKc(a){this.a=a} +function MKc(a){this.a=a} +function yLc(a){this.a=a} +function HMc(a){this.a=a} +function LMc(a){this.a=a} +function PMc(a){this.a=a} +function TMc(a){this.a=a} +function XMc(a){this.a=a} +function ZMc(a){this.a=a} +function aNc(a){this.a=a} +function jNc(a){this.a=a} +function aPc(a){this.a=a} +function gPc(a){this.a=a} +function kPc(a){this.a=a} +function yPc(a){this.a=a} +function CPc(a){this.a=a} +function JPc(a){this.a=a} +function RPc(a){this.a=a} +function XPc(a){this.a=a} +function mRc(a){this.a=a} +function xTc(a){this.a=a} +function CWc(a){this.a=a} +function EWc(a){this.a=a} +function IWc(a){this.a=a} +function OWc(a){this.a=a} +function dXc(a){this.a=a} +function gXc(a){this.a=a} +function EXc(a){this.a=a} +function WXc(a){this.a=a} +function YXc(a){this.a=a} +function aYc(a){this.a=a} +function cYc(a){this.a=a} +function eYc(a){this.a=a} +function iYc(a){this.a=a} +function i0c(a){this.a=a} +function g0c(a){this.a=a} +function P1c(a){this.a=a} +function Sad(a){this.a=a} +function Uad(a){this.a=a} +function Wad(a){this.a=a} +function Yad(a){this.a=a} +function cbd(a){this.a=a} +function ydd(a){this.a=a} +function Kdd(a){this.a=a} +function Mdd(a){this.a=a} +function _ed(a){this.a=a} +function dfd(a){this.a=a} +function Kfd(a){this.a=a} +function prd(a){this.a=a} +function $rd(a){this.a=a} +function csd(a){this.a=a} +function Usd(a){this.a=a} +function Vtd(a){this.a=a} +function wud(a){this.a=a} +function Rud(a){this.f=a} +function LEd(a){this.a=a} +function UEd(a){this.a=a} +function VEd(a){this.a=a} +function WEd(a){this.a=a} +function XEd(a){this.a=a} +function YEd(a){this.a=a} +function ZEd(a){this.a=a} +function $Ed(a){this.a=a} +function _Ed(a){this.a=a} +function aFd(a){this.a=a} +function gFd(a){this.a=a} +function iFd(a){this.a=a} +function jFd(a){this.a=a} +function kFd(a){this.a=a} +function lFd(a){this.a=a} +function nFd(a){this.a=a} +function qFd(a){this.a=a} +function wFd(a){this.a=a} +function xFd(a){this.a=a} +function zFd(a){this.a=a} +function AFd(a){this.a=a} +function BFd(a){this.a=a} +function CFd(a){this.a=a} +function DFd(a){this.a=a} +function MFd(a){this.a=a} +function OFd(a){this.a=a} +function QFd(a){this.a=a} +function SFd(a){this.a=a} +function uGd(a){this.a=a} +function QGd(a){this.a=a} +function jGd(a){this.b=a} +function YOd(a){this.a=a} +function ePd(a){this.a=a} +function kPd(a){this.a=a} +function qPd(a){this.a=a} +function IPd(a){this.a=a} +function w$d(a){this.a=a} +function e_d(a){this.a=a} +function Q_d(a){this.b=a} +function c1d(a){this.a=a} +function c2d(a){this.a=a} +function l5d(a){this.a=a} +function I9d(a){this.a=a} +function L6d(a){this.c=a} +function t7d(a){this.e=a} +function pae(a){this.a=a} +function xae(a){this.a=a} +function Zde(a){this.a=a} +function Sde(a){this.d=a} +function mee(a){this.a=a} +function uje(a){this.a=a} +function Bte(a){this.a=a} +function Wse(a){this.e=a} +function Xsd(){this.a=0} +function Tsb(){akb(this)} +function bnb(){Pmb(this)} +function cHb(){bHb(this)} +function I2b(){A2b(this)} +function s2d(){this.c=d2d} +function Prc(a,b){a.b+=b} +function Uje(a,b){b.Wb(a)} +function UC(a){return a.a} +function nC(a){return a.a} +function BC(a){return a.a} +function TB(a){return a.a} +function _B(a){return a.a} +function Adb(a){return a.e} +function gC(){return null} +function MC(){return null} +function leb(){MId();OId()} +function qMb(a){a.b.Of(a.e)} +function A$b(a){a.b=new Ri} +function A8b(a,b){a.b=b-a.b} +function x8b(a,b){a.a=b-a.a} +function ZEb(a,b){a.push(b)} +function bFb(a,b){a.sort(b)} +function Q5c(a,b){b.jd(a.a)} +function Voc(a,b){Q3b(b,a)} +function tp(a,b,c){a.Yd(c,b)} +function Ss(a,b){a.e=b;b.b=a} +function im(a){_l();this.a=a} +function xq(a){_l();this.a=a} +function Gq(a){_l();this.a=a} +function Xq(a){tm();this.a=a} +function gA(a){fA();eA.le(a)} +function vA(){vA=geb;new Tsb} +function xz(){mz.call(this)} +function Ceb(){mz.call(this)} +function ueb(){xz.call(this)} +function yeb(){xz.call(this)} +function Hfb(){xz.call(this)} +function _fb(){xz.call(this)} +function cgb(){xz.call(this)} +function Ngb(){xz.call(this)} +function jib(){xz.call(this)} +function Jrb(){xz.call(this)} +function Srb(){xz.call(this)} +function Dvb(){xz.call(this)} +function Ied(){xz.call(this)} +function R1d(){this.a=this} +function k1d(){this.Bb|=256} +function vWb(){this.b=new Et} +function aFb(a,b){a.length=b} +function dyb(a,b){Rmb(a.a,b)} +function jNb(a,b){LKb(a.c,b)} +function qRc(a,b){Ysb(a.b,b)} +function VOd(a,b){UNd(a.a,b)} +function WOd(a,b){VNd(a.a,b)} +function eZd(a,b){qvd(a.e,b)} +function Cke(a){bge(a.c,a.b)} +function uj(a,b){a.kc().Nb(b)} +function Ufb(a){this.a=Zfb(a)} +function _sb(){this.a=new Tsb} +function $Ab(){this.a=new Tsb} +function xAb(){this.a=new dzb} +function gyb(){this.a=new bnb} +function BIb(){this.a=new bnb} +function GIb(){this.a=new bnb} +function wIb(){this.a=new pIb} +function gJb(){this.a=new DIb} +function TTb(){this.a=new DTb} +function jGb(){this.a=new fGb} +function qGb(){this.a=new kGb} +function q_b(){this.a=new bnb} +function E_b(){this.a=new bnb} +function EZb(){this.a=new bnb} +function J$b(){this.a=new bnb} +function YNb(){this.d=new bnb} +function lXb(){this.a=new RWb} +function y_b(){this.a=new _sb} +function k5b(){this.a=new Tsb} +function E0b(){this.b=new Tsb} +function jHc(){this.b=new bnb} +function ZNc(){this.e=new bnb} +function ahc(){this.a=new boc} +function UQc(){this.d=new bnb} +function uRc(){tRc.call(this)} +function BRc(){tRc.call(this)} +function VOc(){bnb.call(this)} +function web(){ueb.call(this)} +function Fyb(){gyb.call(this)} +function fKb(){RJb.call(this)} +function N$b(){J$b.call(this)} +function P2b(){I2b.call(this)} +function T2b(){P2b.call(this)} +function z3b(){I2b.call(this)} +function C3b(){z3b.call(this)} +function cUc(){aUc.call(this)} +function hUc(){aUc.call(this)} +function mUc(){aUc.call(this)} +function Hdd(){Ddd.call(this)} +function ACd(){$yd.call(this)} +function PCd(){$yd.call(this)} +function Ejd(){Yub.call(this)} +function LQd(){wQd.call(this)} +function lRd(){wQd.call(this)} +function MSd(){Tsb.call(this)} +function VSd(){Tsb.call(this)} +function eTd(){Tsb.call(this)} +function mXd(){HWd.call(this)} +function i1d(){_sb.call(this)} +function A1d(){k1d.call(this)} +function q4d(){dWd.call(this)} +function O5d(){Tsb.call(this)} +function R5d(){dWd.call(this)} +function lae(){Tsb.call(this)} +function Cae(){Tsb.call(this)} +function ome(){kUd.call(this)} +function Hme(){ome.call(this)} +function Nme(){kUd.call(this)} +function Gre(){Tqe.call(this)} +function aUc(){this.a=new _sb} +function nZc(){this.a=new Tsb} +function DZc(){this.a=new bnb} +function Ddd(){this.a=new Tsb} +function Oqd(){this.a=new Yub} +function Oed(){this.j=new bnb} +function obd(){this.a=new nbd} +function wQd(){this.a=new AQd} +function R5c(){this.a=new V5c} +function wb(){wb=geb;vb=new xb} +function Wk(){Wk=geb;Vk=new Xk} +function kl(){kl=geb;jl=new ll} +function ll(){Qk.call(this,'')} +function Xk(){Qk.call(this,'')} +function Dd(a){yd.call(this,a)} +function Hd(a){yd.call(this,a)} +function xh(a){th.call(this,a)} +function $h(a){Wc.call(this,a)} +function Qi(a){Wc.call(this,a)} +function wi(a){$h.call(this,a)} +function Sp(a){$h.call(this,a)} +function Js(a){$h.call(this,a)} +function Jp(a){Xo.call(this,a)} +function Qp(a){Xo.call(this,a)} +function dq(a){ho.call(this,a)} +function Fv(a){uv.call(this,a)} +function aw(a){Tr.call(this,a)} +function cw(a){Tr.call(this,a)} +function _w(a){Tr.call(this,a)} +function Mx(a){Gn.call(this,a)} +function Nx(a){Mx.call(this,a)} +function yz(a){nz.call(this,a)} +function aC(a){yz.call(this,a)} +function uC(){vC.call(this,{})} +function cC(){cC=geb;bC=new dC} +function zs(){zs=geb;ys=new As} +function Az(){Az=geb;zz=new nb} +function $z(){$z=geb;Zz=new bA} +function $A(){$A=geb;ZA=new aB} +function Ovb(a){Kvb();this.a=a} +function FKc(a){jKc();this.a=a} +function zud(a){nud();this.f=a} +function Bud(a){nud();this.f=a} +function Cde(a){KMd();this.a=a} +function Lyb(a){a.b=null;a.c=0} +function kz(a,b){a.e=b;hz(a,b)} +function NYb(a,b){a.a=b;PYb(a)} +function cLb(a,b,c){a.a[b.g]=c} +function zsd(a,b,c){Hsd(c,a,b)} +function shc(a,b){Xmc(b.i,a.n)} +function HCc(a,b){ICc(a).Cd(b)} +function yw(a,b){a.a.ec().Mc(b)} +function ns(a,b){return a.g-b.g} +function AUb(a,b){return a*a/b} +function Heb(a){return uFb(a),a} +function Kfb(a){return uFb(a),a} +function Mfb(a){return uFb(a),a} +function JC(a){return new hC(a)} +function LC(a){return new OC(a)} +function shb(a){return uFb(a),a} +function Chb(a){return uFb(a),a} +function teb(a){yz.call(this,a)} +function veb(a){yz.call(this,a)} +function zeb(a){yz.call(this,a)} +function Aeb(a){nz.call(this,a)} +function Ifb(a){yz.call(this,a)} +function agb(a){yz.call(this,a)} +function dgb(a){yz.call(this,a)} +function Mgb(a){yz.call(this,a)} +function Ogb(a){yz.call(this,a)} +function kib(a){yz.call(this,a)} +function Jed(a){yz.call(this,a)} +function Ked(a){yz.call(this,a)} +function CDd(a){yz.call(this,a)} +function Mle(a){yz.call(this,a)} +function Lqe(a){yz.call(this,a)} +function mob(a){uFb(a);this.a=a} +function yYb(a){sYb(a);return a} +function Nnb(a){Snb(a,a.length)} +function nmb(a){return a.b==a.c} +function Vyb(a){return !!a&&a.b} +function gLb(a){return !!a&&a.k} +function hLb(a){return !!a&&a.j} +function F_b(a,b,c){a.c.Ef(b,c)} +function Ts(a,b){a.be(b);b.ae(a)} +function Fy(a){_l();this.a=Qb(a)} +function Gb(){this.a=WD(Qb(pve))} +function jc(){throw Adb(new jib)} +function jn(){throw Adb(new jib)} +function Hh(){throw Adb(new jib)} +function Xi(){throw Adb(new jib)} +function Xj(){throw Adb(new jib)} +function Yj(){throw Adb(new jib)} +function Qz(){Qz=geb;!!(fA(),eA)} +function Qhb(){reb.call(this,'')} +function Rhb(){reb.call(this,'')} +function bib(){reb.call(this,'')} +function cib(){reb.call(this,'')} +function eib(a){veb.call(this,a)} +function xeb(a){veb.call(this,a)} +function Vgb(a){agb.call(this,a)} +function Lqb(a){xpb.call(this,a)} +function Sqb(a){Lqb.call(this,a)} +function irb(a){Upb.call(this,a)} +function pc(a){qc.call(this,a,0)} +function Ri(){Si.call(this,12,3)} +function WC(a,b){return xfb(a,b)} +function cFb(a,b){return dD(a,b)} +function Reb(a,b){return a.a-b.a} +function afb(a,b){return a.a-b.a} +function Wgb(a,b){return a.a-b.a} +function pC(b,a){return a in b.a} +function Vvb(a){return a.a?a.b:0} +function cwb(a){return a.a?a.b:0} +function Fxb(a,b,c){b.Cd(a.a[c])} +function Kxb(a,b,c){b.Pe(a.a[c])} +function uKb(a,b){a.b=new sjd(b)} +function QGb(a,b){a.b=b;return a} +function RGb(a,b){a.c=b;return a} +function SGb(a,b){a.f=b;return a} +function TGb(a,b){a.g=b;return a} +function yJb(a,b){a.a=b;return a} +function zJb(a,b){a.f=b;return a} +function AJb(a,b){a.k=b;return a} +function WNb(a,b){a.a=b;return a} +function XNb(a,b){a.e=b;return a} +function BYb(a,b){a.e=b;return a} +function CYb(a,b){a.f=b;return a} +function BRb(a,b){a.b=true;a.d=b} +function WNc(a,b){return a.b-b.b} +function KSc(a,b){return a.g-b.g} +function pmc(a,b){return a?0:b-1} +function qKc(a,b){return a?0:b-1} +function pKc(a,b){return a?b-1:0} +function uVc(a,b){return a.s-b.s} +function Xed(a,b){return b.rg(a)} +function Xfd(a,b){a.b=b;return a} +function Wfd(a,b){a.a=b;return a} +function Yfd(a,b){a.c=b;return a} +function Zfd(a,b){a.d=b;return a} +function $fd(a,b){a.e=b;return a} +function _fd(a,b){a.f=b;return a} +function mgd(a,b){a.a=b;return a} +function ngd(a,b){a.b=b;return a} +function ogd(a,b){a.c=b;return a} +function Khd(a,b){a.c=b;return a} +function Jhd(a,b){a.b=b;return a} +function Lhd(a,b){a.d=b;return a} +function Mhd(a,b){a.e=b;return a} +function Nhd(a,b){a.f=b;return a} +function Ohd(a,b){a.g=b;return a} +function Phd(a,b){a.a=b;return a} +function Qhd(a,b){a.i=b;return a} +function Rhd(a,b){a.j=b;return a} +function coc(a,b){Mnc();P3b(b,a)} +function bbd(a,b,c){_ad(a.a,b,c)} +function Fjd(a){Zub.call(this,a)} +function TRb(a){SRb.call(this,a)} +function pLc(a){CIc.call(this,a)} +function ILc(a){CIc.call(this,a)} +function gLd(a){ZHd.call(this,a)} +function DPd(a){xPd.call(this,a)} +function FPd(a){xPd.call(this,a)} +function x2b(){y2b.call(this,'')} +function pjd(){this.a=0;this.b=0} +function ATc(){this.b=0;this.a=0} +function lXd(a,b){a.b=0;bWd(a,b)} +function Kqd(a,b){a.k=b;return a} +function Lqd(a,b){a.j=b;return a} +function vfe(a,b){a.c=b;a.b=true} +function Etb(){Etb=geb;Dtb=Gtb()} +function bvd(){bvd=geb;avd=OAd()} +function dvd(){dvd=geb;cvd=aCd()} +function MId(){MId=geb;LId=ygd()} +function jTd(){jTd=geb;iTd=Qae()} +function Ole(){Ole=geb;Nle=vne()} +function Qle(){Qle=geb;Ple=Cne()} +function mfb(a){return a.e&&a.e()} +function FD(a){return a.l|a.m<<22} +function Oc(a,b){return a.c._b(b)} +function En(a,b){return Wv(a.b,b)} +function Vd(a){return !a?null:a.d} +function Vv(a){return !a?null:a.g} +function $v(a){return !a?null:a.i} +function nfb(a){lfb(a);return a.o} +function Khb(a,b){a.a+=b;return a} +function Lhb(a,b){a.a+=b;return a} +function Ohb(a,b){a.a+=b;return a} +function Uhb(a,b){a.a+=b;return a} +function _wb(a,b){while(a.Bd(b));} +function atb(a){this.a=new Usb(a)} +function $tb(){throw Adb(new jib)} +function qpb(){throw Adb(new jib)} +function rpb(){throw Adb(new jib)} +function spb(){throw Adb(new jib)} +function vpb(){throw Adb(new jib)} +function Opb(){throw Adb(new jib)} +function yAb(a){this.a=new ezb(a)} +function H2c(){this.a=new Wed(s0)} +function TVc(){this.b=new Wed(H$)} +function l6c(){this.a=new Wed(V0)} +function $ad(){this.b=new Wed(I1)} +function nbd(){this.b=new Wed(I1)} +function T2c(a){this.a=0;this.b=a} +function Bib(a){tib();vib(this,a)} +function QDb(a){LCb(a);return a.a} +function dvb(a){return a.b!=a.d.c} +function AMc(a,b){return a.d[b.p]} +function ued(a,b){return ned(a,b)} +function $Eb(a,b,c){a.splice(b,c)} +function ixb(a,b){while(a.Re(b));} +function NKb(a){a.c?MKb(a):OKb(a)} +function mQd(){throw Adb(new jib)} +function nQd(){throw Adb(new jib)} +function oQd(){throw Adb(new jib)} +function pQd(){throw Adb(new jib)} +function qQd(){throw Adb(new jib)} +function rQd(){throw Adb(new jib)} +function sQd(){throw Adb(new jib)} +function tQd(){throw Adb(new jib)} +function uQd(){throw Adb(new jib)} +function vQd(){throw Adb(new jib)} +function zue(){throw Adb(new Dvb)} +function Aue(){throw Adb(new Dvb)} +function oue(a){this.a=new Dte(a)} +function Dte(a){Cte(this,a,sse())} +function cve(a){return !a||bve(a)} +function Cqe(a){return xqe[a]!=-1} +function Yz(){Nz!=0&&(Nz=0);Pz=-1} +function beb(){_db==null&&(_db=[])} +function eg(a,b){zf.call(this,a,b)} +function gg(a,b){eg.call(this,a,b)} +function Nj(a,b){this.a=a;this.b=b} +function hk(a,b){this.a=a;this.b=b} +function nk(a,b){this.a=a;this.b=b} +function pk(a,b){this.a=a;this.b=b} +function xk(a,b){this.a=a;this.b=b} +function zk(a,b){this.a=a;this.b=b} +function Kk(a,b){this.a=a;this.b=b} +function ne(a,b){this.e=a;this.d=b} +function Hf(a,b){this.b=a;this.c=b} +function cp(a,b){this.b=a;this.a=b} +function Cp(a,b){this.b=a;this.a=b} +function qr(a,b){this.b=a;this.a=b} +function Rr(a,b){this.b=a;this.a=b} +function vr(a,b){this.a=a;this.b=b} +function su(a,b){this.a=a;this.b=b} +function Hu(a,b){this.a=a;this.f=b} +function gp(a,b){this.g=a;this.i=b} +function qs(a,b){this.f=a;this.g=b} +function Gv(a,b){this.b=a;this.c=b} +function Wc(a){Lb(a.dc());this.c=a} +function Ex(a,b){this.a=a;this.b=b} +function ey(a,b){this.a=a;this.b=b} +function pv(a){this.a=RD(Qb(a),15)} +function uv(a){this.a=RD(Qb(a),15)} +function nw(a){this.a=RD(Qb(a),85)} +function rf(a){this.b=RD(Qb(a),85)} +function Tr(a){this.b=RD(Qb(a),51)} +function uB(){this.q=new $wnd.Date} +function CC(a,b){this.a=a;this.b=b} +function Bt(a,b){return Ujb(a.b,b)} +function tpb(a,b){return a.b.Hc(b)} +function upb(a,b){return a.b.Ic(b)} +function wpb(a,b){return a.b.Qc(b)} +function Pqb(a,b){return a.b.Hc(b)} +function pqb(a,b){return a.c.uc(b)} +function rqb(a,b){return pb(a.c,b)} +function Zsb(a,b){return a.a._b(b)} +function Xp(a,b){return a>b&&b<hwe} +function bkb(a){return a.f.c+a.i.c} +function IC(a){return WB(),a?VB:UB} +function Usb(a){ckb.call(this,a,0)} +function dzb(){ezb.call(this,null)} +function Osb(a){this.c=a;Lsb(this)} +function Yub(){Lub(this);Xub(this)} +function gib(){gib=geb;fib=new oeb} +function Qob(){Qob=geb;Pob=new Rob} +function Tvb(){Tvb=geb;Svb=new Xvb} +function bwb(){bwb=geb;awb=new dwb} +function SAb(){SAb=geb;RAb=new VAb} +function rDb(){NCb.call(this,null)} +function xDb(){xDb=geb;wDb=new KEb} +function FDb(a,b){LCb(a);a.a.Nb(b)} +function sAb(a,b){return a.a.Xc(b)} +function tAb(a,b){return a.a.Yc(b)} +function uAb(a,b){return a.a.$c(b)} +function vAb(a,b){return a.a._c(b)} +function JBb(a,b){return a.Gc(b),a} +function KBb(a,b){return ye(a,b),a} +function m_d(a,b){pLd(xYd(a.a),b)} +function r_d(a,b){pLd(xYd(a.a),b)} +function EBb(a,b){a.Gc(b);return a} +function hGb(a,b){a.a.f=b;return a} +function nGb(a,b){a.a.d=b;return a} +function oGb(a,b){a.a.g=b;return a} +function pGb(a,b){a.a.j=b;return a} +function sIb(a,b){a.a.a=b;return a} +function tIb(a,b){a.a.d=b;return a} +function uIb(a,b){a.a.e=b;return a} +function vIb(a,b){a.a.g=b;return a} +function fJb(a,b){a.a.f=b;return a} +function KJb(a){a.b=false;return a} +function wGb(){wGb=geb;vGb=new xGb} +function VRb(){VRb=geb;URb=new WRb} +function zXb(){zXb=geb;yXb=new FXb} +function kYb(){kYb=geb;jYb=new lYb} +function pYb(){pYb=geb;oYb=new QYb} +function NZb(){NZb=geb;MZb=new SZb} +function g0b(){g0b=geb;f0b=new l0b} +function i1b(){i1b=geb;h1b=new X1b} +function s7b(){s7b=geb;r7b=new C7b} +function H5b(){H5b=geb;G5b=new pjd} +function Hcc(){Hcc=geb;Gcc=new Ncc} +function Wjc(){Wjc=geb;Vjc=new Jlc} +function mqc(){mqc=geb;lqc=new Aqc} +function GCc(){GCc=geb;FCc=new Yrd} +function sbd(){sbd=geb;rbd=new ubd} +function Cbd(){Cbd=geb;Bbd=new Dbd} +function _cd(){_cd=geb;$cd=new cdd} +function GGc(){yGc();this.c=new Ri} +function ubd(){qs.call(this,DBe,0)} +function Mfd(a,b,c){$jb(a.d,b.f,c)} +function bNb(a,b,c,d){aNb(a,d,b,c)} +function V6b(a,b,c,d){$6b(d,a,b,c)} +function vcc(a,b,c,d){wcc(d,a,b,c)} +function Dgd(a,b){dub(a.c.c,b.b,b)} +function Cgd(a,b){dub(a.c.b,b.c,b)} +function BYc(a){return a.e.b+a.f.b} +function AYc(a){return a.e.a+a.f.a} +function N1d(a){return a.b?a.b:a.a} +function yTc(a){return (a.c+a.a)/2} +function b2d(a,b){return GA(a.a,b)} +function rfd(a,b){a.a=b.g;return a} +function hTd(){hTd=geb;gTd=new Cae} +function cTd(){cTd=geb;bTd=new eTd} +function lud(){lud=geb;kud=new Yud} +function $Sd(){$Sd=geb;ZSd=new _Sd} +function TSd(){TSd=geb;SSd=new VSd} +function YSd(){YSd=geb;XSd=new O5d} +function PRd(){PRd=geb;ORd=new Tsb} +function N2d(){N2d=geb;M2d=new Uhe} +function j3d(){j3d=geb;i3d=new Yhe} +function Gie(){Gie=geb;Fie=new Hie} +function nke(){nke=geb;mke=new rke} +function uue(){uue=geb;tue=new Cue} +function Tae(){Tae=geb;Rae=new bnb} +function _v(a){return RD(a,44).ld()} +function Akb(a){return a.b<a.d.gc()} +function meb(b,a){return a.split(b)} +function Idb(a,b){return Ddb(a,b)>0} +function Ldb(a,b){return Ddb(a,b)<0} +function Urb(a,b){return Bsb(a.a,b)} +function Beb(a,b){oz.call(this,a,b)} +function Qx(a){Px();ho.call(this,a)} +function Lnb(a,b){Pnb(a,a.length,b)} +function Mnb(a,b){Rnb(a,a.length,b)} +function Ktb(a,b){return a.a.get(b)} +function bub(a,b){return Ujb(a.e,b)} +function Zxb(a){return uFb(a),false} +function zw(a){this.a=RD(Qb(a),229)} +function $wb(a){Swb.call(this,a,21)} +function dAb(a,b){qs.call(this,a,b)} +function yBb(a,b){qs.call(this,a,b)} +function ssb(a,b){this.b=a;this.a=b} +function xlb(a,b){this.d=a;this.e=b} +function jEb(a,b){this.a=a;this.b=b} +function pEb(a,b){this.a=a;this.b=b} +function vEb(a,b){this.a=a;this.b=b} +function BEb(a,b){this.a=a;this.b=b} +function TFb(a,b){this.a=a;this.b=b} +function QEb(a,b){this.b=a;this.a=b} +function sHb(a,b){this.b=a;this.a=b} +function EHb(a,b){qs.call(this,a,b)} +function MHb(a,b){qs.call(this,a,b)} +function jIb(a,b){qs.call(this,a,b)} +function $Jb(a,b){qs.call(this,a,b)} +function FKb(a,b){qs.call(this,a,b)} +function wLb(a,b){qs.call(this,a,b)} +function nOb(a,b){qs.call(this,a,b)} +function kPb(a,b){this.b=a;this.a=b} +function JPb(a,b){qs.call(this,a,b)} +function fRb(a,b){this.b=a;this.a=b} +function JRb(a,b){qs.call(this,a,b)} +function OTb(a,b){this.b=a;this.a=b} +function UUb(a,b){qs.call(this,a,b)} +function BWb(a,b){qs.call(this,a,b)} +function tXb(a,b){qs.call(this,a,b)} +function XEb(a,b,c){a.splice(b,0,c)} +function pr(a,b,c){a.Mb(c)&&b.Cd(c)} +function lEb(a,b,c){b.Pe(a.a.Ye(c))} +function rEb(a,b,c){b.Dd(a.a.Ze(c))} +function xEb(a,b,c){b.Cd(a.a.Kb(c))} +function eYb(a,b){return Csb(a.c,b)} +function cGb(a,b){return Csb(a.e,b)} +function qZb(a,b){qs.call(this,a,b)} +function V$b(a,b){qs.call(this,a,b)} +function s3b(a,b){qs.call(this,a,b)} +function Q8b(a,b){qs.call(this,a,b)} +function icc(a,b){qs.call(this,a,b)} +function xec(a,b){qs.call(this,a,b)} +function gic(a,b){this.a=a;this.b=b} +function Xic(a,b){this.a=a;this.b=b} +function h4b(a,b){this.a=a;this.b=b} +function vjc(a,b){this.a=a;this.b=b} +function xjc(a,b){this.a=a;this.b=b} +function Hjc(a,b){this.a=a;this.b=b} +function hjc(a,b){this.b=a;this.a=b} +function Jjc(a,b){this.b=a;this.a=b} +function _Yb(a,b){this.b=a;this.a=b} +function eZb(a,b){this.c=a;this.d=b} +function Q1b(a,b){this.e=a;this.d=b} +function Tjc(a,b){this.a=a;this.b=b} +function ulc(a,b){this.a=a;this.b=b} +function Elc(a,b){this.a=a;this.b=b} +function fqc(a,b){this.b=a;this.a=b} +function smc(a,b){this.b=b;this.c=a} +function fnc(a,b){qs.call(this,a,b)} +function Cnc(a,b){qs.call(this,a,b)} +function koc(a,b){qs.call(this,a,b)} +function ktc(a,b){qs.call(this,a,b)} +function ctc(a,b){qs.call(this,a,b)} +function utc(a,b){qs.call(this,a,b)} +function Ftc(a,b){qs.call(this,a,b)} +function Rtc(a,b){qs.call(this,a,b)} +function _tc(a,b){qs.call(this,a,b)} +function iuc(a,b){qs.call(this,a,b)} +function vuc(a,b){qs.call(this,a,b)} +function Duc(a,b){qs.call(this,a,b)} +function Puc(a,b){qs.call(this,a,b)} +function _uc(a,b){qs.call(this,a,b)} +function pvc(a,b){qs.call(this,a,b)} +function yvc(a,b){qs.call(this,a,b)} +function Hvc(a,b){qs.call(this,a,b)} +function Pvc(a,b){qs.call(this,a,b)} +function dxc(a,b){qs.call(this,a,b)} +function bDc(a,b){qs.call(this,a,b)} +function nDc(a,b){qs.call(this,a,b)} +function yDc(a,b){qs.call(this,a,b)} +function LDc(a,b){qs.call(this,a,b)} +function bEc(a,b){qs.call(this,a,b)} +function lEc(a,b){qs.call(this,a,b)} +function tEc(a,b){qs.call(this,a,b)} +function CEc(a,b){qs.call(this,a,b)} +function LEc(a,b){qs.call(this,a,b)} +function UEc(a,b){qs.call(this,a,b)} +function mFc(a,b){qs.call(this,a,b)} +function vFc(a,b){qs.call(this,a,b)} +function EFc(a,b){qs.call(this,a,b)} +function SKc(a,b){qs.call(this,a,b)} +function cNc(a,b){this.b=a;this.a=b} +function tNc(a,b){qs.call(this,a,b)} +function QOc(a,b){this.a=a;this.b=b} +function ePc(a,b){this.a=a;this.b=b} +function LPc(a,b){this.a=a;this.b=b} +function xQc(a,b){qs.call(this,a,b)} +function FQc(a,b){qs.call(this,a,b)} +function MQc(a,b){this.a=a;this.b=b} +function FMc(a,b){dMc();return b!=a} +function Uvb(a){sFb(a.a);return a.b} +function qYb(a){rYb(a,a.c);return a} +function Itb(){Etb();return new Dtb} +function _ec(){Rec();this.a=new e6b} +function lSc(){dSc();this.a=new _sb} +function aRc(){WQc();this.b=new _sb} +function xRc(a,b){this.b=a;this.d=b} +function nVc(a,b){this.a=a;this.b=b} +function pVc(a,b){this.a=a;this.b=b} +function GWc(a,b){this.a=a;this.b=b} +function IXc(a,b){this.b=a;this.a=b} +function gTc(a,b){qs.call(this,a,b)} +function eVc(a,b){qs.call(this,a,b)} +function $Vc(a,b){qs.call(this,a,b)} +function XYc(a,b){qs.call(this,a,b)} +function MZc(a,b){qs.call(this,a,b)} +function t_c(a,b){qs.call(this,a,b)} +function B_c(a,b){qs.call(this,a,b)} +function z2c(a,b){qs.call(this,a,b)} +function h3c(a,b){qs.call(this,a,b)} +function $3c(a,b){qs.call(this,a,b)} +function i4c(a,b){qs.call(this,a,b)} +function l5c(a,b){qs.call(this,a,b)} +function v5c(a,b){qs.call(this,a,b)} +function g6c(a,b){qs.call(this,a,b)} +function A6c(a,b){qs.call(this,a,b)} +function a7c(a,b){qs.call(this,a,b)} +function B8c(a,b){qs.call(this,a,b)} +function d9c(a,b){qs.call(this,a,b)} +function D9c(a,b){qs.call(this,a,b)} +function tad(a,b){qs.call(this,a,b)} +function hbd(a,b){qs.call(this,a,b)} +function Nbd(a,b){qs.call(this,a,b)} +function Ybd(a,b){qs.call(this,a,b)} +function ndd(a,b){qs.call(this,a,b)} +function z1c(a,b){this.b=a;this.a=b} +function B1c(a,b){this.b=a;this.a=b} +function d2c(a,b){this.b=a;this.a=b} +function f2c(a,b){this.b=a;this.a=b} +function m9c(a,b){this.a=a;this.b=b} +function xed(a,b){this.a=a;this.b=b} +function ffd(a,b){this.a=a;this.b=b} +function rjd(a,b){this.a=a;this.b=b} +function Sjd(a,b){qs.call(this,a,b)} +function Zhd(a,b){qs.call(this,a,b)} +function lid(a,b){qs.call(this,a,b)} +function vkd(a,b){qs.call(this,a,b)} +function Gmd(a,b){qs.call(this,a,b)} +function Pmd(a,b){qs.call(this,a,b)} +function Zmd(a,b){qs.call(this,a,b)} +function jnd(a,b){qs.call(this,a,b)} +function Gnd(a,b){qs.call(this,a,b)} +function Rnd(a,b){qs.call(this,a,b)} +function eod(a,b){qs.call(this,a,b)} +function qod(a,b){qs.call(this,a,b)} +function Eod(a,b){qs.call(this,a,b)} +function Qod(a,b){qs.call(this,a,b)} +function upd(a,b){qs.call(this,a,b)} +function Rpd(a,b){qs.call(this,a,b)} +function eqd(a,b){qs.call(this,a,b)} +function nqd(a,b){qs.call(this,a,b)} +function vqd(a,b){qs.call(this,a,b)} +function Hrd(a,b){qs.call(this,a,b)} +function esd(a,b){this.a=a;this.b=b} +function gsd(a,b){this.a=a;this.b=b} +function isd(a,b){this.a=a;this.b=b} +function Osd(a,b){this.a=a;this.b=b} +function Qsd(a,b){this.a=a;this.b=b} +function Ssd(a,b){this.a=a;this.b=b} +function Ptd(a,b){this.a=a;this.b=b} +function JEd(a,b){this.a=a;this.b=b} +function KEd(a,b){this.a=a;this.b=b} +function MEd(a,b){this.a=a;this.b=b} +function NEd(a,b){this.a=a;this.b=b} +function QEd(a,b){this.a=a;this.b=b} +function REd(a,b){this.a=a;this.b=b} +function SEd(a,b){this.b=a;this.a=b} +function TEd(a,b){this.b=a;this.a=b} +function bFd(a,b){this.b=a;this.a=b} +function dFd(a,b){this.b=a;this.a=b} +function fFd(a,b){this.a=a;this.b=b} +function hFd(a,b){this.a=a;this.b=b} +function utd(a,b){qs.call(this,a,b)} +function sFd(a,b){this.a=a;this.b=b} +function uFd(a,b){this.a=a;this.b=b} +function bGd(a,b){qs.call(this,a,b)} +function uId(a,b){this.f=a;this.c=b} +function Ofd(a,b){return Csb(a.g,b)} +function Tqc(a,b){return Csb(b.b,a)} +function HPd(a,b){return QNd(a.a,b)} +function Idd(a,b){return -a.b.af(b)} +function IId(a,b){!!a&&Zjb(CId,a,b)} +function yWd(a,b){a.i=null;zWd(a,b)} +function kEd(a,b,c){pDd(b,KDd(a,c))} +function lEd(a,b,c){pDd(b,KDd(a,c))} +function mFd(a,b){vEd(a.a,RD(b,58))} +function _Mc(a,b){GMc(a.a,RD(b,12))} +function KTd(a,b){this.a=a;this.b=b} +function NTd(a,b){this.a=a;this.b=b} +function B5d(a,b){this.a=a;this.b=b} +function Z6d(a,b){this.a=a;this.b=b} +function Ble(a,b){this.a=a;this.b=b} +function afe(a,b){this.d=a;this.b=b} +function wfe(a,b){this.e=a;this.a=b} +function Eke(a,b){this.b=a;this.c=b} +function zNd(a,b){this.i=a;this.g=b} +function kZd(a,b){this.d=a;this.e=b} +function ave(a,b){eve(new dMd(a),b)} +function Dke(a){return pge(a.c,a.b)} +function Wd(a){return !a?null:a.md()} +function dE(a){return a==null?null:a} +function bE(a){return typeof a===jve} +function $D(a){return typeof a===hve} +function _D(a){return typeof a===ive} +function Gdb(a,b){return Ddb(a,b)==0} +function Jdb(a,b){return Ddb(a,b)>=0} +function Pdb(a,b){return Ddb(a,b)!=0} +function ar(a,b){return zr(a.Kc(),b)} +function Qm(a,b){return a.Rd().Xb(b)} +function kg(a){ig(a);return a.d.gc()} +function fE(a){CFb(a==null);return a} +function Mhb(a,b){a.a+=''+b;return a} +function Nhb(a,b){a.a+=''+b;return a} +function Whb(a,b){a.a+=''+b;return a} +function Yhb(a,b){a.a+=''+b;return a} +function Zhb(a,b){a.a+=''+b;return a} +function Vhb(a,b){return a.a+=''+b,a} +function Pfb(a){return ''+(uFb(a),a)} +function Vsb(a){akb(this);Ld(this,a)} +function YFc(){RFc();UFc.call(this)} +function pxb(a,b){kxb.call(this,a,b)} +function txb(a,b){kxb.call(this,a,b)} +function xxb(a,b){kxb.call(this,a,b)} +function Oub(a,b){Pub(a,b,a.c.b,a.c)} +function Nub(a,b){Pub(a,b,a.a,a.a.a)} +function Iob(a){tFb(a,0);return null} +function Xvb(){this.b=0;this.a=false} +function dwb(){this.b=0;this.a=false} +function Et(){this.b=new Usb(Sv(12))} +function pMb(){pMb=geb;oMb=ss(nMb())} +function ncc(){ncc=geb;mcc=ss(lcc())} +function aZc(){aZc=geb;_Yc=ss($Yc())} +function WA(){WA=geb;vA();VA=new Tsb} +function hjd(a){a.a=0;a.b=0;return a} +function qfd(a,b){a.a=b.g+1;return a} +function yNd(a,b){aMd.call(this,a,b)} +function lGd(a,b){kGd.call(this,a,b)} +function N$d(a,b){zNd.call(this,a,b)} +function Whe(a,b){Q2d.call(this,a,b)} +function She(a,b){Phe.call(this,a,b)} +function RRd(a,b){PRd();Zjb(ORd,a,b)} +function sB(a,b){a.q.setTime(Xdb(b))} +function Xz(a){$wnd.clearTimeout(a)} +function cr(a){return Qb(a),new Dl(a)} +function mb(a,b){return dE(a)===dE(b)} +function Mw(a,b){return a.a.a.a.cc(b)} +function qeb(a,b){return zhb(a.a,0,b)} +function SSb(a){return MSb(RD(a,74))} +function Nfb(a){return eE((uFb(a),a))} +function Ofb(a){return eE((uFb(a),a))} +function gD(a){return hD(a.l,a.m,a.h)} +function egb(a,b){return hgb(a.a,b.a)} +function ygb(a,b){return Agb(a.a,b.a)} +function Sfb(a,b){return Qfb(a.a,b.a)} +function qhb(a,b){return a.indexOf(b)} +function nOc(a,b){return a.j[b.p]==2} +function cz(a,b){return a==b?0:a?1:-1} +function AB(a){return a<10?'0'+a:''+a} +function Kdb(a){return typeof a===ive} +function oZb(a){return a==jZb||a==mZb} +function pZb(a){return a==jZb||a==kZb} +function ELb(a,b){return hgb(a.g,b.g)} +function Q4b(a){return Wmb(a.b.b,a,0)} +function Q2b(){J2b.call(this,0,0,0,0)} +function Iub(){ctb.call(this,new gub)} +function Znb(a,b){Wnb(a,0,a.length,b)} +function Eyb(a,b){Rmb(a.a,b);return b} +function Fkc(a,b){lkc();return b.a+=a} +function Hkc(a,b){lkc();return b.a+=a} +function Gkc(a,b){lkc();return b.c+=a} +function ied(a,b){Rmb(a.c,b);return a} +function Ped(a,b){ofd(a.a,b);return a} +function ttb(a){this.a=Itb();this.b=a} +function Ntb(a){this.a=Itb();this.b=a} +function sjd(a){this.a=a.a;this.b=a.b} +function Dl(a){this.a=a;zl.call(this)} +function Gl(a){this.a=a;zl.call(this)} +function Tid(){Uid.call(this,0,0,0,0)} +function vfd(a){return ofd(new ufd,a)} +function Ksd(a){return iyd(RD(a,123))} +function Mvd(a){return a.vh()&&a.wh()} +function Dod(a){return a!=zod&&a!=Aod} +function Dmd(a){return a==ymd||a==zmd} +function Emd(a){return a==Bmd||a==xmd} +function xDc(a){return a==tDc||a==sDc} +function yrc(a,b){return hgb(a.g,b.g)} +function Yfe(a,b){return new Phe(b,a)} +function Zfe(a,b){return new Phe(b,a)} +function lr(a){return Dr(a.b.Kc(),a.a)} +function IXd(a,b){yXd(a,b);zXd(a,a.D)} +function Uxd(a,b,c){Vxd(a,b);Wxd(a,c)} +function zyd(a,b,c){Cyd(a,b);Ayd(a,c)} +function Byd(a,b,c){Dyd(a,b);Eyd(a,c)} +function Gzd(a,b,c){Hzd(a,b);Izd(a,c)} +function Nzd(a,b,c){Ozd(a,b);Pzd(a,c)} +function eh(a,b,c){bh.call(this,a,b,c)} +function zId(a){uId.call(this,a,true)} +function nAb(){dAb.call(this,'Tail',3)} +function iAb(){dAb.call(this,'Head',1)} +function ejb(a){Pib();fjb.call(this,a)} +function A3b(a){J2b.call(this,a,a,a,a)} +function Pmb(a){a.c=$C(jJ,rve,1,0,5,1)} +function yRb(a){a.b&&CRb(a);return a.a} +function zRb(a){a.b&&CRb(a);return a.c} +function mBb(a,b){if(dBb){return}a.b=b} +function YCb(a,b){return a[a.length]=b} +function _Cb(a,b){return a[a.length]=b} +function l5b(a,b){return NGd(b,MCd(a))} +function m5b(a,b){return NGd(b,MCd(a))} +function DDd(a,b){return lp(Co(a.d),b)} +function EDd(a,b){return lp(Co(a.g),b)} +function FDd(a,b){return lp(Co(a.j),b)} +function mGd(a,b){kGd.call(this,a.b,b)} +function s0d(a,b){WGd(tYd(a.a),v0d(b))} +function B4d(a,b){WGd(o4d(a.a),E4d(b))} +function Asd(a,b,c){Byd(c,c.i+a,c.j+b)} +function eFc(a,b,c){bD(a.c[b.g],b.g,c)} +function zVd(a,b,c){RD(a.c,71).Gi(b,c)} +function LMd(a,b,c){bD(a,b,c);return c} +function DJb(a){Umb(a.Sf(),new HJb(a))} +function Gvb(a){return a!=null?tb(a):0} +function aOd(a){return a==null?0:tb(a)} +function iue(a){Vse();Wse.call(this,a)} +function Ug(a){this.a=a;Og.call(this,a)} +function Zy(){Zy=geb;$wnd.Math.log(2)} +function s7d(){s7d=geb;r7d=($Sd(),ZSd)} +function FRc(){FRc=geb;ERc=new Zrb(u3)} +function Hde(){Hde=geb;new Ide;new bnb} +function Ide(){new Tsb;new Tsb;new Tsb} +function yue(){throw Adb(new kib(bMe))} +function Nue(){throw Adb(new kib(bMe))} +function Bue(){throw Adb(new kib(cMe))} +function Que(){throw Adb(new kib(cMe))} +function Gp(a){this.a=a;rf.call(this,a)} +function Np(a){this.a=a;rf.call(this,a)} +function Sq(a,b){tm();this.a=a;this.b=b} +function Jh(a,b){Qb(b);Ih(a).Jc(new jx)} +function _mb(a,b){Ynb(a.c,a.c.length,b)} +function xnb(a){return a.a<a.c.c.length} +function Msb(a){return a.a<a.c.a.length} +function Wvb(a,b){return a.a?a.b:b.We()} +function hgb(a,b){return a<b?-1:a>b?1:0} +function Kgb(a,b){return Ddb(a,b)>0?a:b} +function hD(a,b,c){return {l:a,m:b,h:c}} +function Mvb(a,b){a.a!=null&&_Mc(b,a.a)} +function Lhc(a){Y0b(a,null);Z0b(a,null)} +function xkc(a,b,c){return Zjb(a.g,c,b)} +function bFc(a,b,c){return _Ec(b,c,a.c)} +function jOc(a,b,c){return Zjb(a.k,c,b)} +function pOc(a,b,c){qOc(a,b,c);return c} +function FOc(a,b){dOc();return b.n.b+=a} +function lUb(a){VTb.call(this);this.b=a} +function y2b(a){v2b.call(this);this.a=a} +function kAb(){dAb.call(this,'Range',2)} +function $Fb(a){this.b=a;this.a=new bnb} +function WQb(a){this.b=new gRb;this.a=a} +function Lub(a){a.a=new svb;a.c=new svb} +function nrc(a){a.a=new Tsb;a.d=new Tsb} +function $Sc(a){_Sc(a,null);aTc(a,null)} +function a2d(a,b){return xA(a.a,b,null)} +function Cdd(a,b){return Zjb(a.a,b.a,b)} +function ajd(a){return new rjd(a.a,a.b)} +function Pid(a){return new rjd(a.c,a.d)} +function Qid(a){return new rjd(a.c,a.d)} +function Ake(a,b){return Tfe(a.c,a.b,b)} +function ZD(a,b){return a!=null&&QD(a,b)} +function br(a,b){return Jr(a.Kc(),b)!=-1} +function Hr(a){return a.Ob()?a.Pb():null} +function _p(a){this.b=(yob(),new uqb(a))} +function zke(a){this.a=a;Tsb.call(this)} +function Uhe(){Q2d.call(this,null,null)} +function Yhe(){p3d.call(this,null,null)} +function As(){qs.call(this,'INSTANCE',0)} +function dXb(){_Wb();this.a=new Wed(UP)} +function Hhb(a){return Ihb(a,0,a.length)} +function Rv(a,b){return new ew(a.Kc(),b)} +function $sb(a,b){return a.a.Bc(b)!=null} +function hZd(a,b){sLd(a);a.Gc(RD(b,15))} +function ONd(a,b,c){a.c.bd(b,RD(c,136))} +function eOd(a,b,c){a.c.Ui(b,RD(c,136))} +function eub(a,b){if(a.c){rub(b);qub(b)}} +function oB(a,b){a.q.setHours(b);mB(a,b)} +function vTb(a,b){Zid(b,a.a.a.a,a.a.a.b)} +function tKb(a,b,c,d){bD(a.a[b.g],c.g,d)} +function oKb(a,b,c){return a.a[b.g][c.g]} +function AIc(a,b){return a.e[b.c.p][b.p]} +function TIc(a,b){return a.c[b.c.p][b.p]} +function pJc(a,b){return a.a[b.c.p][b.p]} +function mOc(a,b){return a.j[b.p]=AOc(b)} +function wAb(a,b){return a.a.Bc(b)!=null} +function wXc(a,b){return Kfb(UD(b.a))<=a} +function xXc(a,b){return Kfb(UD(b.a))>=a} +function vhd(a,b){return jhb(a.f,b.Pg())} +function cjd(a,b){return a.a*b.a+a.b*b.b} +function Wsd(a,b){return a.a<Qeb(b)?-1:1} +function gGd(a,b){return jhb(a.b,b.Pg())} +function xIc(a,b,c){return c?b!=0:b!=a-1} +function Mwb(a,b,c){a.a=b^1502;a.b=c^Mxe} +function ljd(a,b,c){a.a=b;a.b=c;return a} +function ijd(a,b){a.a*=b;a.b*=b;return a} +function Rmb(a,b){ZEb(a.c,b);return true} +function MHd(a,b,c){bD(a.g,b,c);return c} +function XZd(a,b,c){PZd.call(this,a,b,c)} +function _Zd(a,b,c){XZd.call(this,a,b,c)} +function aie(a,b,c){Kfe.call(this,a,b,c)} +function eie(a,b,c){Kfe.call(this,a,b,c)} +function gie(a,b,c){aie.call(this,a,b,c)} +function iie(a,b,c){XZd.call(this,a,b,c)} +function lie(a,b,c){_Zd.call(this,a,b,c)} +function vie(a,b,c){PZd.call(this,a,b,c)} +function zie(a,b,c){PZd.call(this,a,b,c)} +function Cie(a,b,c){vie.call(this,a,b,c)} +function ez(a){a.j=$C(mJ,Nve,319,0,0,1)} +function wmb(){this.a=$C(jJ,rve,1,8,5,1)} +function dWd(){this.Bb|=256;this.Bb|=512} +function dMd(a){this.i=a;this.f=this.i.j} +function Rue(a){this.c=a;this.a=this.c.a} +function zf(a,b){this.a=a;rf.call(this,b)} +function Eb(a,b){return Db(a,new bib,b).a} +function Lb(a){if(!a){throw Adb(new _fb)}} +function Ub(a){if(!a){throw Adb(new cgb)}} +function Txb(){Txb=geb;Txb();Sxb=new $xb} +function fke(){fke=geb;Gie();eke=new gke} +function Kvb(){Kvb=geb;Jvb=new Ovb(null)} +function OGd(a){Ivb(a,IIe);pzd(a,GGd(a))} +function mNd(a){a.a=RD(Ywd(a.b.a,4),129)} +function uNd(a){a.a=RD(Ywd(a.b.a,4),129)} +function Mg(a){a.b.Qb();--a.d.f.d;jg(a.d)} +function Zj(a){this.a=a;Aj.call(this,a.d)} +function ij(a,b){this.a=a;pc.call(this,b)} +function sj(a,b){this.a=a;pc.call(this,b)} +function Rj(a,b){this.a=a;pc.call(this,b)} +function Il(a,b){this.a=b;pc.call(this,a)} +function ap(a,b){this.a=b;Xo.call(this,a)} +function Ap(a,b){this.a=a;Xo.call(this,b)} +function Yr(a,b){this.a=b;Tr.call(this,a)} +function ew(a,b){this.a=b;Tr.call(this,a)} +function Mr(a,b){Qb(b);return new Yr(a,b)} +function ru(a,b){return new Ou(a.a,a.b,b)} +function rhb(a,b,c){return a.indexOf(b,c)} +function thb(a,b){return a.lastIndexOf(b)} +function Ghb(a){return a==null?vve:jeb(a)} +function Ez(a){return a==null?null:a.name} +function qD(a){return a.l+a.m*gxe+a.h*hxe} +function Gr(a){return dvb(a.a)?Fr(a):null} +function Shb(a){reb.call(this,(uFb(a),a))} +function dib(a){reb.call(this,(uFb(a),a))} +function dl(a){Qk.call(this,RD(Qb(a),34))} +function tl(a){Qk.call(this,RD(Qb(a),34))} +function Jub(a){ctb.call(this,new hub(a))} +function Upb(a){xpb.call(this,a);this.a=a} +function hqb(a){Ppb.call(this,a);this.a=a} +function jrb(a){Lqb.call(this,a);this.a=a} +function mz(){ez(this);gz(this);this.je()} +function Dzb(a){this.a=a;Plb.call(this,a)} +function Lvb(a){sFb(a.a!=null);return a.a} +function gGb(a,b){Rmb(b.a,a.a);return a.a} +function mGb(a,b){Rmb(b.b,a.a);return a.a} +function eJb(a,b){Rmb(b.a,a.a);return a.a} +function aib(a,b,c){peb(a,b,b,c);return a} +function EIb(a,b){++a.b;return Rmb(a.a,b)} +function FIb(a,b){++a.b;return Ymb(a.a,b)} +function NNb(a,b){return Qfb(a.c.d,b.c.d)} +function ZNb(a,b){return Qfb(a.c.c,b.c.c)} +function E9b(a,b){return Qfb(a.n.a,b.n.a)} +function B$b(a,b){return RD(Qc(a.b,b),15)} +function Jac(a,b){return a.n.b=(uFb(b),b)} +function Kac(a,b){return a.n.b=(uFb(b),b)} +function Csb(a,b){return !!b&&a.b[b.g]==b} +function k4b(a){return xnb(a.a)||xnb(a.b)} +function kFb(a){return a.$H||(a.$H=++iFb)} +function Nvb(a){return a.a!=null?a.a:null} +function uXc(a,b){return Qfb(a.e.b,b.e.b)} +function CXc(a,b){return Qfb(a.e.a,b.e.a)} +function ZEc(a,b,c){return $Ec(a,b,c,a.b)} +function aFc(a,b,c){return $Ec(a,b,c,a.c)} +function Ikc(a){lkc();return !!a&&!a.dc()} +function Yjc(){Wjc();this.b=new ckc(this)} +function tNb(){tNb=geb;sNb=new kGd(Xye,0)} +function Geb(){Geb=geb;Eeb=false;Feb=true} +function E8b(a){var b;b=a.a;a.a=a.b;a.b=b} +function Q2d(a,b){N2d();this.a=a;this.b=b} +function p3d(a,b){j3d();this.b=a;this.c=b} +function Fud(a,b){nud();this.f=b;this.d=a} +function qc(a,b){Sb(b,a);this.d=a;this.c=b} +function IXb(a,b){JXb.call(this,a,b,null)} +function Kg(a,b,c,d){yg.call(this,a,b,c,d)} +function mMd(a){this.d=a;dMd.call(this,a)} +function yMd(a){this.c=a;dMd.call(this,a)} +function BMd(a){this.c=a;mMd.call(this,a)} +function Zse(a){++Use;return new Kte(3,a)} +function ev(a){dk(a,iwe);return new cnb(a)} +function jA(a){fA();return parseInt(a)||-1} +function Fs(a){zs();return ws((Is(),Hs),a)} +function phb(a,b,c){return rhb(a,Fhb(b),c)} +function um(a,b){return new fq(a,a.gc(),b)} +function zj(a,b){return hn(a.c).Md().Xb(b)} +function hu(a,b,c){var d;d=a.fd(b);d.Rb(c)} +function tfd(a,b,c){RD(Med(a,b),21).Fc(c)} +function XOd(a,b,c){VNd(a.a,c);UNd(a.a,b)} +function aAd(a){ZD(a,158)&&RD(a,158).pi()} +function tub(a){uub.call(this,a,null,null)} +function Yvb(a){Tvb();this.b=a;this.a=true} +function ewb(a){bwb();this.b=a;this.a=true} +function Qub(a){sFb(a.b!=0);return a.a.a.c} +function Rub(a){sFb(a.b!=0);return a.c.b.c} +function Phb(a,b){peb(a,b,b+1,'');return a} +function nQb(a,b){return !!a.q&&Ujb(a.q,b)} +function vzb(a){return a.b=RD(Bkb(a.a),44)} +function os(a){return a.f!=null?a.f:''+a.g} +function ps(a){return a.f!=null?a.f:''+a.g} +function yUb(a,b){return a>0?b/(a*a):b*100} +function FUb(a,b){return a>0?b*b/a:b*b*100} +function $5b(a,b){return RD(cub(a.a,b),34)} +function doc(a,b){Mnc();return Rc(a,b.e,b)} +function NCc(a,b,c){GCc();return c.Mg(a,b)} +function L0c(a){B0c();return a.e.a+a.f.a/2} +function N0c(a,b,c){B0c();return c.e.a-a*b} +function V0c(a){B0c();return a.e.b+a.f.b/2} +function X0c(a,b,c){B0c();return c.e.b-a*b} +function _tb(a){a.d=new tub(a);a.e=new Tsb} +function x3c(){this.a=new Tp;this.b=new Tp} +function hmc(a){this.c=a;this.a=1;this.b=1} +function C$b(a){z$b();A$b(this);this.Ff(a)} +function Efd(a,b,c){Afd();a.pf(b)&&c.Cd(a)} +function Red(a,b,c){return Rmb(b,Ted(a,c))} +function Zid(a,b,c){a.a+=b;a.b+=c;return a} +function jjd(a,b,c){a.a*=b;a.b*=c;return a} +function mjd(a,b){a.a=b.a;a.b=b.b;return a} +function fjd(a){a.a=-a.a;a.b=-a.b;return a} +function njd(a,b,c){a.a-=b;a.b-=c;return a} +function Gjd(a){Yub.call(this);zjd(this,a)} +function Dbd(){qs.call(this,'GROW_TREE',0)} +function WRb(){qs.call(this,'POLYOMINO',0)} +function SVd(a,b,c){DVd.call(this,a,b,c,2)} +function r0d(a,b,c){VGd(tYd(a.a),b,v0d(c))} +function e3d(a,b){N2d();Q2d.call(this,a,b)} +function D3d(a,b){j3d();p3d.call(this,a,b)} +function F3d(a,b){j3d();D3d.call(this,a,b)} +function H3d(a,b){j3d();p3d.call(this,a,b)} +function PNd(a,b){return a.c.Fc(RD(b,136))} +function A4d(a,b,c){VGd(o4d(a.a),b,E4d(c))} +function Ard(a){this.c=a;Dyd(a,0);Eyd(a,0)} +function Z8d(a,b){s7d();N8d.call(this,a,b)} +function _8d(a,b){s7d();Z8d.call(this,a,b)} +function b9d(a,b){s7d();Z8d.call(this,a,b)} +function n9d(a,b){s7d();N8d.call(this,a,b)} +function d9d(a,b){s7d();b9d.call(this,a,b)} +function p9d(a,b){s7d();n9d.call(this,a,b)} +function v9d(a,b){s7d();N8d.call(this,a,b)} +function lge(a,b,c){return b.zl(a.e,a.c,c)} +function nge(a,b,c){return b.Al(a.e,a.c,c)} +function Wee(a,b,c){return tfe(Pee(a,b),c)} +function Age(a,b){return Vvd(a.e,RD(b,54))} +function _me(a){return a==null?null:Bqe(a)} +function dne(a){return a==null?null:Iqe(a)} +function gne(a){return a==null?null:jeb(a)} +function hne(a){return a==null?null:jeb(a)} +function TD(a){CFb(a==null||$D(a));return a} +function UD(a){CFb(a==null||_D(a));return a} +function WD(a){CFb(a==null||bE(a));return a} +function lfb(a){if(a.o!=null){return}Bfb(a)} +function lFb(a){if(!a){throw Adb(new _fb)}} +function pFb(a){if(!a){throw Adb(new yeb)}} +function sFb(a){if(!a){throw Adb(new Dvb)}} +function yFb(a){if(!a){throw Adb(new cgb)}} +function zmb(a){if(!a){throw Adb(new Jrb)}} +function jQd(){jQd=geb;iQd=new LQd;new lRd} +function u2c(){u2c=geb;t2c=new jGd('root')} +function d6d(){HWd.call(this);this.Bb|=txe} +function Pg(a,b){this.d=a;Lg(this);this.b=b} +function WCb(a,b){NCb.call(this,a);this.a=b} +function oDb(a,b){NCb.call(this,a);this.a=b} +function bh(a,b,c){lg.call(this,a,b,c,null)} +function fh(a,b,c){lg.call(this,a,b,c,null)} +function Mf(a,b){this.c=a;ne.call(this,a,b)} +function Uf(a,b){this.a=a;Mf.call(this,a,b)} +function wB(a){this.q=new $wnd.Date(Xdb(a))} +function OPb(a){if(a>8){return 0}return a+1} +function iBb(a,b){if(dBb){return}Rmb(a.a,b)} +function P5b(a,b){H5b();return n2b(b.d.i,a)} +function qdc(a,b){Zcc();return new xdc(b,a)} +function HAb(a,b,c){return a.Ne(b,c)<=0?c:b} +function IAb(a,b,c){return a.Ne(b,c)<=0?b:c} +function rgd(a,b){return RD(cub(a.b,b),143)} +function tgd(a,b){return RD(cub(a.c,b),233)} +function amc(a){return RD(Vmb(a.a,a.b),293)} +function Mid(a){return new rjd(a.c,a.d+a.a)} +function Jeb(a){return (uFb(a),a)?1231:1237} +function EPc(a){return dOc(),xDc(RD(a,203))} +function RMb(){RMb=geb;QMb=xsb((Qpd(),Ppd))} +function YQb(a,b){b.a?ZQb(a,b):wAb(a.a,b.b)} +function aJd(a,b,c){++a.j;a.tj();$Gd(a,b,c)} +function $Id(a,b,c){++a.j;a.qj(b,a.Zi(b,c))} +function B2d(a,b,c){var d;d=a.fd(b);d.Rb(c)} +function Bzd(a,b,c){c=xvd(a,b,6,c);return c} +function izd(a,b,c){c=xvd(a,b,3,c);return c} +function KCd(a,b,c){c=xvd(a,b,9,c);return c} +function SKb(a,b){Ivb(b,Pye);a.f=b;return a} +function bOd(a,b){return (b&lve)%a.d.length} +function Bke(a,b,c){return age(a.c,a.b,b,c)} +function ZLd(a,b){this.c=a;ZHd.call(this,b)} +function w0d(a,b){this.a=a;Q_d.call(this,b)} +function F4d(a,b){this.a=a;Q_d.call(this,b)} +function kGd(a,b){jGd.call(this,a);this.a=b} +function U6d(a,b){L6d.call(this,a);this.a=b} +function S9d(a,b){L6d.call(this,a);this.a=b} +function jQb(a){gQb.call(this,0,0);this.f=a} +function _hb(a,b,c){a.a+=Ihb(b,0,c);return a} +function _A(a){!a.a&&(a.a=new jB);return a.a} +function qlb(a,b){var c;c=a.e;a.e=b;return c} +function Clb(a,b){var c;c=b;return !!a.Fe(c)} +function Keb(a,b){Geb();return a==b?0:a?1:-1} +function Ikb(a,b){a.a.bd(a.b,b);++a.b;a.c=-1} +function hg(a){a.b?hg(a.b):a.f.c.zc(a.e,a.d)} +function aub(a){akb(a.e);a.d.b=a.d;a.d.a=a.d} +function VDb(a,b,c){xDb();HEb(a,b.Ve(a.a,c))} +function Xrb(a,b,c){return Wrb(a,RD(b,22),c)} +function WEb(a,b){return cFb(new Array(b),a)} +function Fgb(a){return Ydb(Udb(a,32))^Ydb(a)} +function XD(a){return String.fromCharCode(a)} +function Dz(a){return a==null?null:a.message} +function Rz(a,b,c){return a.apply(b,c);var d} +function Btb(a,b){var c;c=a[Jxe];c.call(a,b)} +function Ctb(a,b){var c;c=a[Jxe];c.call(a,b)} +function O5b(a,b){H5b();return !n2b(b.d.i,a)} +function R2b(a,b,c,d){J2b.call(this,a,b,c,d)} +function TJb(){RJb.call(this);this.a=new pjd} +function v2b(){this.n=new pjd;this.o=new pjd} +function kGb(){this.b=new pjd;this.c=new bnb} +function cUb(){this.a=new bnb;this.b=new bnb} +function kWb(){this.a=new DTb;this.b=new vWb} +function e6b(){this.b=new gub;this.a=new gub} +function jIc(){this.b=new _sb;this.a=new _sb} +function vYc(){this.b=new Tsb;this.a=new Tsb} +function fWc(){this.b=new TVc;this.a=new IVc} +function Yhc(){this.a=new yqc;this.b=new Sqc} +function lNc(){this.a=new bnb;this.d=new bnb} +function RJb(){this.n=new z3b;this.i=new Tid} +function hq(a){this.a=(dk(a,iwe),new cnb(a))} +function oq(a){this.a=(dk(a,iwe),new cnb(a))} +function tLd(a){return a<100?null:new gLd(a)} +function Lac(a,b){return a.n.a=(uFb(b),b)+10} +function Mac(a,b){return a.n.a=(uFb(b),b)+10} +function DYd(a,b){return b==a||PHd(sYd(b),a)} +function nae(a,b){return Zjb(a.a,b,'')==null} +function Hee(a,b){var c;c=b.qi(a.a);return c} +function $id(a,b){a.a+=b.a;a.b+=b.b;return a} +function ojd(a,b){a.a-=b.a;a.b-=b.b;return a} +function sfd(a){aFb(a.j.c,0);a.a=-1;return a} +function rCd(a,b,c){c=xvd(a,b,11,c);return c} +function SDd(a,b,c){c!=null&&Kzd(b,uEd(a,c))} +function TDd(a,b,c){c!=null&&Lzd(b,uEd(a,c))} +function G5d(a,b,c,d){C5d.call(this,a,b,c,d)} +function oie(a,b,c,d){C5d.call(this,a,b,c,d)} +function sie(a,b,c,d){oie.call(this,a,b,c,d)} +function Nie(a,b,c,d){Iie.call(this,a,b,c,d)} +function Pie(a,b,c,d){Iie.call(this,a,b,c,d)} +function Vie(a,b,c,d){Iie.call(this,a,b,c,d)} +function Tie(a,b,c,d){Pie.call(this,a,b,c,d)} +function $ie(a,b,c,d){Pie.call(this,a,b,c,d)} +function Yie(a,b,c,d){Vie.call(this,a,b,c,d)} +function bje(a,b,c,d){$ie.call(this,a,b,c,d)} +function Dje(a,b,c,d){wje.call(this,a,b,c,d)} +function aMd(a,b){veb.call(this,HJe+a+NIe+b)} +function Hje(a,b){return a.jk().wi().ri(a,b)} +function Ije(a,b){return a.jk().wi().ti(a,b)} +function Lfb(a,b){return uFb(a),dE(a)===dE(b)} +function lhb(a,b){return uFb(a),dE(a)===dE(b)} +function mEb(a,b){return a.b.Bd(new pEb(a,b))} +function sEb(a,b){return a.b.Bd(new vEb(a,b))} +function yEb(a,b){return a.b.Bd(new BEb(a,b))} +function Bk(a,b){return a.e=RD(a.d.Kb(b),159)} +function uhb(a,b,c){return a.lastIndexOf(b,c)} +function wWb(a,b,c){return Qfb(a[b.a],a[c.a])} +function TWb(a,b){return pQb(b,(yCc(),gAc),a)} +function Lpc(a,b){return hgb(b.a.d.p,a.a.d.p)} +function Kpc(a,b){return hgb(a.a.d.p,b.a.d.p)} +function zTc(a,b){return Qfb(a.c-a.s,b.c-b.s)} +function qWc(a,b){return Qfb(a.b.e.a,b.b.e.a)} +function sWc(a,b){return Qfb(a.c.e.a,b.c.e.a)} +function $2b(a){return !a.c?-1:Wmb(a.c.a,a,0)} +function Cod(a){return a==vod||a==xod||a==wod} +function CMd(a,b){this.c=a;nMd.call(this,a,b)} +function fq(a,b,c){this.a=a;qc.call(this,b,c)} +function YDb(a){this.c=a;xxb.call(this,Sve,0)} +function rk(a,b,c){this.c=b;this.b=c;this.a=a} +function DMc(a){dMc();this.d=a;this.a=new wmb} +function ho(a){_l();this.a=(yob(),new Lqb(a))} +function Xmc(a,b){Dmd(a.f)?Ymc(a,b):Zmc(a,b)} +function Lxb(a,b){Mxb.call(this,a,a.length,b)} +function nBb(a,b){if(dBb){return}!!b&&(a.d=b)} +function ZNd(a,b){return ZD(b,15)&&_Gd(a.c,b)} +function AVd(a,b,c){return RD(a.c,71).Wk(b,c)} +function BVd(a,b,c){return RD(a.c,71).Xk(b,c)} +function mge(a,b,c){return lge(a,RD(b,343),c)} +function oge(a,b,c){return nge(a,RD(b,343),c)} +function Ige(a,b,c){return Hge(a,RD(b,343),c)} +function Kge(a,b,c){return Jge(a,RD(b,343),c)} +function Fn(a,b){return b==null?null:Xv(a.b,b)} +function Qeb(a){return _D(a)?(uFb(a),a):a.ue()} +function Rfb(a){return !isNaN(a)&&!isFinite(a)} +function Zub(a){Lub(this);Xub(this);ye(this,a)} +function dnb(a){Pmb(this);YEb(this.c,0,a.Pc())} +function Fsb(a,b,c){this.a=a;this.b=b;this.c=c} +function Vtb(a,b,c){this.a=a;this.b=b;this.c=c} +function hvb(a,b,c){this.d=a;this.b=c;this.a=b} +function aBb(a){this.a=a;gib();Hdb(Date.now())} +function wzb(a){Ckb(a.a);Yyb(a.c,a.b);a.b=null} +function wvb(){wvb=geb;uvb=new xvb;vvb=new zvb} +function KMd(){KMd=geb;JMd=$C(jJ,rve,1,0,5,1)} +function TTd(){TTd=geb;STd=$C(jJ,rve,1,0,5,1)} +function yUd(){yUd=geb;xUd=$C(jJ,rve,1,0,5,1)} +function _l(){_l=geb;new im((yob(),yob(),vob))} +function gAb(a){cAb();return ws((qAb(),pAb),a)} +function zBb(a){xBb();return ws((CBb(),BBb),a)} +function FHb(a){DHb();return ws((IHb(),HHb),a)} +function NHb(a){LHb();return ws((QHb(),PHb),a)} +function kIb(a){iIb();return ws((nIb(),mIb),a)} +function _Jb(a){ZJb();return ws((cKb(),bKb),a)} +function GKb(a){EKb();return ws((JKb(),IKb),a)} +function xLb(a){vLb();return ws((ALb(),zLb),a)} +function mMb(a){hMb();return ws((pMb(),oMb),a)} +function oOb(a){mOb();return ws((rOb(),qOb),a)} +function KPb(a){IPb();return ws((NPb(),MPb),a)} +function KRb(a){IRb();return ws((NRb(),MRb),a)} +function XRb(a){VRb();return ws(($Rb(),ZRb),a)} +function VUb(a){TUb();return ws((YUb(),XUb),a)} +function CWb(a){AWb();return ws((FWb(),EWb),a)} +function uXb(a){sXb();return ws((xXb(),wXb),a)} +function tZb(a){nZb();return ws((wZb(),vZb),a)} +function W$b(a){U$b();return ws((Z$b(),Y$b),a)} +function Mb(a,b){if(!a){throw Adb(new agb(b))}} +function Vb(a){if(!a){throw Adb(new dgb(tve))}} +function rFb(a,b){if(a!=b){throw Adb(new Jrb)}} +function KQb(a,b,c){this.a=a;this.b=b;this.c=c} +function lRb(a,b,c){this.a=a;this.b=b;this.c=c} +function h7b(a,b,c){this.a=a;this.b=b;this.c=c} +function J0b(a,b,c){this.b=a;this.a=b;this.c=c} +function dNb(a,b,c){this.b=a;this.c=b;this.a=c} +function oac(a,b,c){this.a=a;this.b=b;this.c=c} +function F1b(a,b,c){this.e=b;this.b=a;this.d=c} +function Ecc(a,b,c){this.b=a;this.a=b;this.c=c} +function UDb(a,b,c){xDb();a.a.Yd(b,c);return b} +function CJb(a){var b;b=new BJb;b.e=a;return b} +function _Nb(a){var b;b=new YNb;b.b=a;return b} +function U9b(){U9b=geb;S9b=new bac;T9b=new eac} +function Rec(){Rec=geb;Qec=new efc;Pec=new jfc} +function lkc(){lkc=geb;jkc=new Mkc;kkc=new Okc} +function loc(a){joc();return ws((ooc(),noc),a)} +function kcc(a){hcc();return ws((ncc(),mcc),a)} +function yec(a){vec();return ws((Bec(),Aec),a)} +function gnc(a){enc();return ws((jnc(),inc),a)} +function Enc(a){Bnc();return ws((Hnc(),Gnc),a)} +function gpc(a){epc();return ws((jpc(),ipc),a)} +function dtc(a){btc();return ws((gtc(),ftc),a)} +function ltc(a){jtc();return ws((otc(),ntc),a)} +function xtc(a){stc();return ws((Atc(),ztc),a)} +function Gtc(a){Etc();return ws((Jtc(),Itc),a)} +function Utc(a){Ptc();return ws((Xtc(),Wtc),a)} +function auc(a){$tc();return ws((duc(),cuc),a)} +function avc(a){$uc();return ws((dvc(),cvc),a)} +function qvc(a){ovc();return ws((tvc(),svc),a)} +function zvc(a){xvc();return ws((Cvc(),Bvc),a)} +function Ivc(a){Gvc();return ws((Lvc(),Kvc),a)} +function Qvc(a){Ovc();return ws((Tvc(),Svc),a)} +function Quc(a){Ouc();return ws((Tuc(),Suc),a)} +function juc(a){huc();return ws((muc(),luc),a)} +function wuc(a){tuc();return ws((zuc(),yuc),a)} +function Euc(a){Cuc();return ws((Huc(),Guc),a)} +function exc(a){cxc();return ws((hxc(),gxc),a)} +function eDc(a){_Cc();return ws((hDc(),gDc),a)} +function oDc(a){lDc();return ws((rDc(),qDc),a)} +function ADc(a){wDc();return ws((DDc(),CDc),a)} +function ODc(a){JDc();return ws((RDc(),QDc),a)} +function cEc(a){aEc();return ws((fEc(),eEc),a)} +function mEc(a){kEc();return ws((pEc(),oEc),a)} +function uEc(a){sEc();return ws((xEc(),wEc),a)} +function DEc(a){BEc();return ws((GEc(),FEc),a)} +function MEc(a){KEc();return ws((PEc(),OEc),a)} +function VEc(a){TEc();return ws((YEc(),XEc),a)} +function nFc(a){lFc();return ws((qFc(),pFc),a)} +function wFc(a){uFc();return ws((zFc(),yFc),a)} +function FFc(a){DFc();return ws((IFc(),HFc),a)} +function TKc(a){RKc();return ws((WKc(),VKc),a)} +function uNc(a){sNc();return ws((xNc(),wNc),a)} +function yQc(a){wQc();return ws((BQc(),AQc),a)} +function GQc(a){EQc();return ws((JQc(),IQc),a)} +function hTc(a){fTc();return ws((kTc(),jTc),a)} +function fVc(a){dVc();return ws((iVc(),hVc),a)} +function bWc(a){YVc();return ws((eWc(),dWc),a)} +function ZYc(a){WYc();return ws((aZc(),_Yc),a)} +function NZc(a){LZc();return ws((QZc(),PZc),a)} +function u_c(a){s_c();return ws((x_c(),w_c),a)} +function C_c(a){A_c();return ws((F_c(),E_c),a)} +function C2c(a){x2c();return ws((F2c(),E2c),a)} +function j3c(a){g3c();return ws((m3c(),l3c),a)} +function j4c(a){g4c();return ws((m4c(),l4c),a)} +function _3c(a){Y3c();return ws((c4c(),b4c),a)} +function m5c(a){j5c();return ws((p5c(),o5c),a)} +function w5c(a){t5c();return ws((z5c(),y5c),a)} +function h6c(a){f6c();return ws((k6c(),j6c),a)} +function C6c(a){z6c();return ws((F6c(),E6c),a)} +function b7c(a){_6c();return ws((e7c(),d7c),a)} +function E8c(a){z8c();return ws((H8c(),G8c),a)} +function R8b(a){P8b();return ws((U8b(),T8b),a)} +function t3b(a){r3b();return ws((w3b(),v3b),a)} +function g9c(a){b9c();return ws((j9c(),i9c),a)} +function G9c(a){B9c();return ws((J9c(),I9c),a)} +function uad(a){sad();return ws((xad(),wad),a)} +function xbd(a){sbd();return ws((Abd(),zbd),a)} +function ibd(a){gbd();return ws((lbd(),kbd),a)} +function Gbd(a){Cbd();return ws((Jbd(),Ibd),a)} +function Obd(a){Mbd();return ws((Rbd(),Qbd),a)} +function Zbd(a){Xbd();return ws((acd(),_bd),a)} +function fdd(a){_cd();return ws((idd(),hdd),a)} +function qdd(a){ldd();return ws((tdd(),sdd),a)} +function $hd(a){Yhd();return ws((bid(),aid),a)} +function mid(a){kid();return ws((pid(),oid),a)} +function Tjd(a){Rjd();return ws((Wjd(),Vjd),a)} +function wkd(a){ukd();return ws((zkd(),ykd),a)} +function Hmd(a){Cmd();return ws((Kmd(),Jmd),a)} +function Qmd(a){Omd();return ws((Tmd(),Smd),a)} +function $md(a){Ymd();return ws((bnd(),and),a)} +function knd(a){ind();return ws((nnd(),mnd),a)} +function Hnd(a){Fnd();return ws((Knd(),Jnd),a)} +function Snd(a){Pnd();return ws((Vnd(),Und),a)} +function god(a){dod();return ws((jod(),iod),a)} +function rod(a){pod();return ws((uod(),tod),a)} +function Fod(a){Bod();return ws((Iod(),Hod),a)} +function Tod(a){Pod();return ws((Wod(),Vod),a)} +function wpd(a){qpd();return ws((zpd(),ypd),a)} +function Spd(a){Qpd();return ws((Vpd(),Upd),a)} +function fqd(a){dqd();return ws((iqd(),hqd),a)} +function oqd(a){mqd();return ws((rqd(),qqd),a)} +function zsc(a,b){return (uFb(a),a)+(uFb(b),b)} +function wqd(a){uqd();return ws((Eqd(),Dqd),a)} +function Ird(a){Grd();return ws((Lrd(),Krd),a)} +function vtd(a){ttd();return ws((ytd(),xtd),a)} +function dMc(){dMc=geb;bMc=(qpd(),ppd);cMc=Xod} +function uqd(){uqd=geb;sqd=new zqd;tqd=new Bqd} +function wJc(a){!a.e&&(a.e=new bnb);return a.e} +function BTc(a,b){this.c=a;this.a=b;this.b=b-a} +function g8c(a,b,c){this.a=a;this.b=b;this.c=c} +function gud(a,b,c){this.a=a;this.b=b;this.c=c} +function Wdd(a,b,c){this.a=a;this.b=b;this.c=c} +function ced(a,b,c){this.a=a;this.b=b;this.c=c} +function pFd(a,b,c){this.a=a;this.b=b;this.c=c} +function ZPd(a,b,c){this.a=a;this.b=b;this.c=c} +function g7d(a,b,c){this.e=a;this.a=b;this.c=c} +function K7d(a,b,c){s7d();C7d.call(this,a,b,c)} +function f9d(a,b,c){s7d();O8d.call(this,a,b,c)} +function r9d(a,b,c){s7d();O8d.call(this,a,b,c)} +function x9d(a,b,c){s7d();O8d.call(this,a,b,c)} +function h9d(a,b,c){s7d();f9d.call(this,a,b,c)} +function j9d(a,b,c){s7d();f9d.call(this,a,b,c)} +function l9d(a,b,c){s7d();j9d.call(this,a,b,c)} +function t9d(a,b,c){s7d();r9d.call(this,a,b,c)} +function z9d(a,b,c){s7d();x9d.call(this,a,b,c)} +function S2b(a){J2b.call(this,a.d,a.c,a.a,a.b)} +function B3b(a){J2b.call(this,a.d,a.c,a.a,a.b)} +function Og(a){this.d=a;Lg(this);this.b=ed(a.d)} +function cGd(a){aGd();return ws((fGd(),eGd),a)} +function gk(a,b){Qb(a);Qb(b);return new hk(a,b)} +function dr(a,b){Qb(a);Qb(b);return new mr(a,b)} +function hr(a,b){Qb(a);Qb(b);return new sr(a,b)} +function Dr(a,b){Qb(a);Qb(b);return new Rr(a,b)} +function Uub(a){sFb(a.b!=0);return Wub(a,a.a.a)} +function Vub(a){sFb(a.b!=0);return Wub(a,a.c.b)} +function q$d(a){!a.c&&(a.c=new X9d);return a.c} +function cv(a){var b;b=new bnb;xr(b,a);return b} +function Vx(a){var b;b=new _sb;xr(b,a);return b} +function Yx(a){var b;b=new xAb;_q(b,a);return b} +function gv(a){var b;b=new Yub;_q(b,a);return b} +function RD(a,b){CFb(a==null||QD(a,b));return a} +function Mxb(a,b,c){Axb.call(this,b,c);this.a=a} +function kB(a,b){this.c=a;this.b=b;this.a=false} +function hCb(){this.a=';,;';this.b='';this.c=''} +function $Cb(a,b,c){this.b=a;pxb.call(this,b,c)} +function uub(a,b,c){this.c=a;xlb.call(this,b,c)} +function fZb(a,b,c){eZb.call(this,a,b);this.b=c} +function YEb(a,b,c){VEb(c,0,a,b,c.length,false)} +function JYb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} +function D2b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} +function XDb(a,b){if(b){a.b=b;a.a=(LCb(b),b.a)}} +function mFb(a,b){if(!a){throw Adb(new agb(b))}} +function zFb(a,b){if(!a){throw Adb(new dgb(b))}} +function qFb(a,b){if(!a){throw Adb(new zeb(b))}} +function zqc(a,b){mqc();return hgb(a.d.p,b.d.p)} +function T0c(a,b){B0c();return Qfb(a.e.b,b.e.b)} +function U0c(a,b){B0c();return Qfb(a.e.a,b.e.a)} +function Xoc(a,b){return hgb(N3b(a.d),N3b(b.d))} +function Izb(a,b){return !!b&&Jzb(a,b.d)?b:null} +function $lc(a,b){return b==(qpd(),ppd)?a.c:a.d} +function Qdb(a){return Edb(yD(Kdb(a)?Wdb(a):a))} +function Nid(a){return new rjd(a.c+a.b,a.d+a.a)} +function GSd(a){return a!=null&&!mSd(a,aSd,bSd)} +function DSd(a,b){return (JSd(a)<<4|JSd(b))&Bwe} +function Rid(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} +function y8b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} +function B8b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} +function u6d(a,b){var c;c=a.c;t6d(a,b);return c} +function Nqd(a,b){b<0?(a.g=-1):(a.g=b);return a} +function kjd(a,b){gjd(a);a.a*=b;a.b*=b;return a} +function hrc(a,b,c){grc.call(this,b,c);this.d=a} +function PZd(a,b,c){kZd.call(this,a,b);this.c=c} +function Kfe(a,b,c){kZd.call(this,a,b);this.c=c} +function zUd(a){yUd();kUd.call(this);this.ci(a)} +function Yee(){ree();Zee.call(this,(YSd(),XSd))} +function Yse(a){Vse();++Use;return new Hte(0,a)} +function uke(){uke=geb;tke=(yob(),new mpb(eLe))} +function ux(){ux=geb;new wx((kl(),jl),(Wk(),Vk))} +function ugb(){ugb=geb;tgb=$C(bJ,Nve,17,256,0,1)} +function zUb(){this.b=Kfb(UD(iGd((yVb(),sVb))))} +function Pq(a){this.b=a;this.a=gn(this.b.a).Od()} +function mr(a,b){this.b=a;this.a=b;zl.call(this)} +function sr(a,b){this.a=a;this.b=b;zl.call(this)} +function s_d(a,b,c){this.a=a;N$d.call(this,b,c)} +function n_d(a,b,c){this.a=a;N$d.call(this,b,c)} +function sDd(a,b,c){var d;d=new OC(c);sC(a,b,d)} +function _Eb(a,b,c){var d;d=a[b];a[b]=c;return d} +function UEb(a){var b;b=a.slice();return dD(b,a)} +function SJb(a){var b;b=a.n;return a.a.b+b.d+b.a} +function PKb(a){var b;b=a.n;return a.e.b+b.d+b.a} +function QKb(a){var b;b=a.n;return a.e.a+b.b+b.c} +function rub(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} +function Mub(a,b){Pub(a,b,a.c.b,a.c);return true} +function w2b(a){if(a.a){return a.a}return R0b(a)} +function NSb(a){HSb();return JGd(a)==vCd(LGd(a))} +function OSb(a){HSb();return LGd(a)==vCd(JGd(a))} +function l_b(a,b){return k_b(a,new eZb(b.a,b.b))} +function xn(a,b){return fn(),ck(a,b),new zy(a,b)} +function fmc(a,b){return a.c<b.c?-1:a.c==b.c?0:1} +function snc(a){return a.b.c.length-a.e.c.length} +function N3b(a){return a.e.c.length-a.g.c.length} +function L3b(a){return a.e.c.length+a.g.c.length} +function Lgb(a){return a==0||isNaN(a)?a:a<0?-1:1} +function V0b(a){return !W0b(a)&&a.c.i.c==a.d.i.c} +function DOc(a){dOc();return (qpd(),apd).Hc(a.j)} +function M0c(a,b,c){B0c();return c.e.a+c.f.a+a*b} +function W0c(a,b,c){B0c();return c.e.b+c.f.b+a*b} +function SUc(a,b,c){return Zjb(a.b,RD(c.b,18),b)} +function TUc(a,b,c){return Zjb(a.b,RD(c.b,18),b)} +function oFd(a,b,c){iEd(a.a,a.b,a.c,RD(b,166),c)} +function lad(a,b,c,d){mad.call(this,a,b,c,d,0,0)} +function LUd(a){yUd();zUd.call(this,a);this.a=-1} +function Gxb(a,b){Axb.call(this,b,1040);this.a=a} +function zqd(){vqd.call(this,'COUNT_CHILDREN',0)} +function ole(a,b){Eke.call(this,a,b);this.a=this} +function ufb(a,b){var c;c=rfb(a,b);c.i=2;return c} +function cJd(a,b){var c;++a.j;c=a.Cj(b);return c} +function pfd(a,b,c){a.a=-1;tfd(a,b.g,c);return a} +function Bsd(a,b){return Rmb(a,new rjd(b.a,b.b))} +function __c(a){return R_c(),$C(Z$,NEe,39,a,0,1)} +function dj(a){return a.e.Rd().gc()*a.c.Rd().gc()} +function fk(a,b,c){return new rk(hDb(a)._e(),c,b)} +function mVd(a,b){nVd(a,b==null?null:(uFb(b),b))} +function q6d(a,b){s6d(a,b==null?null:(uFb(b),b))} +function r6d(a,b){s6d(a,b==null?null:(uFb(b),b))} +function CFb(a){if(!a){throw Adb(new Ifb(null))}} +function tt(a){if(a.c.e!=a.a){throw Adb(new Jrb)}} +function Au(a){if(a.e.c!=a.b){throw Adb(new Jrb)}} +function Ar(a){Qb(a);while(a.Ob()){a.Pb();a.Qb()}} +function Dy(a){tm();this.a=(yob(),new mpb(Qb(a)))} +function mf(a){this.c=a;this.b=this.c.d.vc().Kc()} +function hx(a){a.a.ld();RD(a.a.md(),16).gc();Hh()} +function $hb(a,b){a.a+=Ihb(b,0,b.length);return a} +function Vmb(a,b){tFb(b,a.c.length);return a.c[b]} +function kob(a,b){tFb(b,a.a.length);return a.a[b]} +function Arb(a,b){return uFb(b),Leb(b,(uFb(a),a))} +function vrb(a,b){return uFb(a),Leb(a,(uFb(b),b))} +function YC(a,b,c,d,e,f){return ZC(a,b,c,d,e,0,f)} +function GBb(a,b){return bD(b,0,tCb(b[0],Hgb(1)))} +function IBb(a,b){return Hgb(Bdb(Hgb(a.a).a,b.a))} +function tCb(a,b){return IBb(RD(a,168),RD(b,168))} +function Jgb(){Jgb=geb;Igb=$C(eJ,Nve,168,256,0,1)} +function dhb(){dhb=geb;chb=$C(lJ,Nve,191,256,0,1)} +function Zeb(){Zeb=geb;Yeb=$C(RI,Nve,222,256,0,1)} +function jfb(){jfb=geb;ifb=$C(SI,Nve,180,128,0,1)} +function KYb(){JYb(this,false,false,false,false)} +function Kub(a){ctb.call(this,new gub);ye(this,a)} +function btb(a){this.a=new Usb(a.gc());ye(this,a)} +function nsb(a){this.c=a;this.a=new Osb(this.c.a)} +function Kmc(a){this.a=a;this.c=new Tsb;Emc(this)} +function DRb(){this.d=new rjd(0,0);this.e=new _sb} +function SDb(a,b){xDb();NCb.call(this,a);this.a=b} +function J2b(a,b,c,d){A2b(this);D2b(this,a,b,c,d)} +function Uqc(a,b,c){return hgb(b.d[a.g],c.d[a.g])} +function wMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function xMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function yMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function zMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function Aad(a,b,c){return $wnd.Math.min(c/a,1/b)} +function SIc(a,b){return a?0:$wnd.Math.max(0,b-1)} +function qSd(a,b){return a==null?b==null:lhb(a,b)} +function rSd(a,b){return a==null?b==null:mhb(a,b)} +function lQb(a){return !a.q?(yob(),yob(),wob):a.q} +function _lc(a){return a.c-RD(Vmb(a.a,a.b),293).b} +function trd(a){if(a.c){return a.c.f}return a.e.b} +function urd(a){if(a.c){return a.c.g}return a.e.a} +function wsc(a,b){a.a==null&&usc(a);return a.a[b]} +function L2c(a){var b;b=R2c(a);return !b?a:L2c(b)} +function $se(a,b){Vse();++Use;return new Qte(a,b)} +function Hte(a,b){Vse();Wse.call(this,a);this.a=b} +function N8d(a,b){s7d();t7d.call(this,b);this.a=a} +function iae(a,b,c){this.a=a;XZd.call(this,b,c,2)} +function ntd(a){this.b=new Yub;this.a=a;this.c=-1} +function ds(a){qc.call(this,0,0);this.a=a;this.b=0} +function PSd(a){ZHd.call(this,a.gc());YGd(this,a)} +function jg(a){a.b?jg(a.b):a.d.dc()&&a.f.c.Bc(a.e)} +function aD(a){return Array.isArray(a)&&a.Tm===keb} +function Bsb(a,b){return ZD(b,22)&&Csb(a,RD(b,22))} +function Dsb(a,b){return ZD(b,22)&&Esb(a,RD(b,22))} +function qtb(a,b){return otb(a,b,ptb(a,a.b.Ce(b)))} +function Jtb(a,b){return !(a.a.get(b)===undefined)} +function Iwb(a){return Kwb(a,26)*Kxe+Kwb(a,27)*Lxe} +function OBb(a,b){return FBb(new jCb,new VBb(a),b)} +function Ynb(a,b,c){nFb(0,b,a.length);Wnb(a,0,b,c)} +function Qmb(a,b,c){wFb(b,a.c.length);XEb(a.c,b,c)} +function dKb(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} +function eKb(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} +function Pnb(a,b,c){var d;for(d=0;d<b;++d){a[d]=c}} +function Qnb(a,b){var c;for(c=0;c<b;++c){a[c]=-1}} +function ysb(a,b){var c;c=xsb(a);zob(c,b);return c} +function cA(a,b){!a&&(a=[]);a[a.length]=b;return a} +function RQb(a,b){$id(a.c,b);a.b.c+=b.a;a.b.d+=b.b} +function QQb(a,b){RQb(a,ojd(new rjd(b.a,b.b),a.c))} +function sOb(a,b){this.b=new Yub;this.a=a;this.c=b} +function QYb(){this.b=new aZb;this.c=new UYb(this)} +function fHb(){this.d=new tHb;this.e=new lHb(this)} +function UFc(){RFc();this.f=new Yub;this.e=new Yub} +function yOc(){dOc();this.k=new Tsb;this.d=new _sb} +function nud(){nud=geb;mud=new mGd((umd(),Gld),0)} +function cs(){cs=geb;bs=new ds($C(jJ,rve,1,0,5,1))} +function _ad(a,b,c){return Ysb(a,new TFb(b.a,c.a))} +function DGc(a,b,c){return -hgb(a.f[b.p],a.f[c.p])} +function Mic(a,b,c){Hic(c,a,1);Rmb(b,new xjc(c,a))} +function Nic(a,b,c){Iic(c,a,1);Rmb(b,new Jjc(c,a))} +function h$d(a,b,c){this.a=a;_Zd.call(this,b,c,22)} +function s5d(a,b,c){this.a=a;_Zd.call(this,b,c,14)} +function E8d(a,b,c,d){s7d();N7d.call(this,a,b,c,d)} +function L8d(a,b,c,d){s7d();N7d.call(this,a,b,c,d)} +function nfd(a,b,c){a.a=-1;tfd(a,b.g+1,c);return a} +function bCd(a,b,c){c=xvd(a,RD(b,54),7,c);return c} +function hVd(a,b,c){c=xvd(a,RD(b,54),3,c);return c} +function Ydb(a){if(Kdb(a)){return a|0}return FD(a)} +function cte(a){Vse();++Use;return new eue(10,a,0)} +function fe(a){var b;b=a.f;return !b?(a.f=a.Dc()):b} +function Ec(a){var b;b=a.i;return !b?(a.i=a.bc()):b} +function Ahe(a){if(a.e.j!=a.d){throw Adb(new Jrb)}} +function gn(a){if(a.c){return a.c}return a.c=a.Sd()} +function hn(a){if(a.d){return a.d}return a.d=a.Td()} +function Uee(a,b){return ufe(Pee(a,b))?b.zi():null} +function ed(a){return ZD(a,15)?RD(a,15).ed():a.Kc()} +function De(a){return a.Qc($C(jJ,rve,1,a.gc(),5,1))} +function aE(a){return a!=null&&cE(a)&&!(a.Tm===keb)} +function YD(a){return !Array.isArray(a)&&a.Tm===keb} +function vx(a,b){return Qb(b),a.a.Jd(b)&&!a.b.Jd(b)} +function tD(a,b){return hD(a.l&b.l,a.m&b.m,a.h&b.h)} +function zD(a,b){return hD(a.l|b.l,a.m|b.m,a.h|b.h)} +function HD(a,b){return hD(a.l^b.l,a.m^b.m,a.h^b.h)} +function Sdb(a,b){return Edb(AD(Kdb(a)?Wdb(a):a,b))} +function Tdb(a,b){return Edb(BD(Kdb(a)?Wdb(a):a,b))} +function Udb(a,b){return Edb(CD(Kdb(a)?Wdb(a):a,b))} +function Ieb(a,b){return Keb((uFb(a),a),(uFb(b),b))} +function Jfb(a,b){return Qfb((uFb(a),a),(uFb(b),b))} +function pwb(a){this.b=new cnb(11);this.a=(urb(),a)} +function is(a){this.a=(cs(),bs);this.d=RD(Qb(a),51)} +function Axb(a,b){this.c=0;this.d=a;this.b=b|64|Ove} +function kxb(a,b){this.e=a;this.d=(b&64)!=0?b|Ove:b} +function ezb(a){this.b=null;this.a=(urb(),!a?rrb:a)} +function nz(a){ez(this);this.g=a;gz(this);this.je()} +function vue(a){uue();this.a=0;this.b=a-1;this.c=1} +function yg(a,b,c,d){this.a=a;lg.call(this,a,b,c,d)} +function gEb(a,b,c){if(a.a.Mb(c)){a.b=true;b.Cd(c)}} +function Qwb(a){if(!a.d){a.d=a.b.Kc();a.c=a.b.gc()}} +function lyb(a,b){if(a<0||a>=b){throw Adb(new web)}} +function JDb(a,b){return MDb(a,(uFb(b),new JAb(b)))} +function KDb(a,b){return MDb(a,(uFb(b),new LAb(b)))} +function prc(a,b,c){return qrc(a,RD(b,12),RD(c,12))} +function q4b(a){return J3b(),RD(a,12).g.c.length!=0} +function v4b(a){return J3b(),RD(a,12).e.c.length!=0} +function sdc(a,b){Zcc();return Qfb(b.a.o.a,a.a.o.a)} +function d_d(a,b){(b.Bb&QHe)!=0&&!a.a.o&&(a.a.o=b)} +function T3c(a,b){b.Ug("General 'Rotator",1);S3c(a)} +function MCc(a,b,c){b.qf(c,Kfb(UD(Wjb(a.b,c)))*a.a)} +function yid(a,b,c){tid();return xid(a,b)&&xid(a,c)} +function Rod(a){Pod();return !a.Hc(Lod)&&!a.Hc(Nod)} +function Nrc(a){if(a.e){return Src(a.e)}return null} +function Zdb(a){if(Kdb(a)){return ''+a}return GD(a)} +function XNc(a){var b;b=a;while(b.f){b=b.f}return b} +function HBb(a,b,c){bD(b,0,tCb(b[0],c[0]));return b} +function Gpc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} +function C5d(a,b,c,d){XZd.call(this,a,b,c);this.b=d} +function N3d(a,b,c,d,e){O3d.call(this,a,b,c,d,e,-1)} +function b4d(a,b,c,d,e){c4d.call(this,a,b,c,d,e,-1)} +function Iie(a,b,c,d){PZd.call(this,a,b,c);this.b=d} +function Xde(a){uId.call(this,a,false);this.a=false} +function Bqd(){vqd.call(this,'LOOKAHEAD_LAYOUT',1)} +function nNd(a){this.b=a;mMd.call(this,a);mNd(this)} +function vNd(a){this.b=a;BMd.call(this,a);uNd(this)} +function J5d(a,b,c){this.a=a;G5d.call(this,b,c,5,6)} +function wje(a,b,c,d){this.b=a;XZd.call(this,b,c,d)} +function Tj(a,b){this.b=a;Aj.call(this,a.b);this.a=b} +function NLc(a){this.a=LLc(a.a);this.b=new dnb(a.b)} +function Fx(a,b){tm();Ex.call(this,a,Pm(new mob(b)))} +function _se(a,b){Vse();++Use;return new aue(a,b,0)} +function bte(a,b){Vse();++Use;return new aue(6,a,b)} +function Ztb(a,b){uFb(b);while(a.Ob()){b.Cd(a.Pb())}} +function Ujb(a,b){return bE(b)?Yjb(a,b):!!qtb(a.f,b)} +function O_d(a,b){return b.Vh()?Vvd(a.b,RD(b,54)):b} +function whb(a,b){return lhb(a.substr(0,b.length),b)} +function Fl(a){return new is(new Il(a.a.length,a.a))} +function Oid(a){return new rjd(a.c+a.b/2,a.d+a.a/2)} +function yD(a){return hD(~a.l&dxe,~a.m&dxe,~a.h&exe)} +function cE(a){return typeof a===gve||typeof a===kve} +function akb(a){a.f=new ttb(a);a.i=new Ntb(a);++a.g} +function Klb(a){if(!a){throw Adb(new Dvb)}return a.d} +function smb(a){var b;b=omb(a);sFb(b!=null);return b} +function tmb(a){var b;b=pmb(a);sFb(b!=null);return b} +function tv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} +function Ysb(a,b){var c;c=a.a.zc(b,a);return c==null} +function rAb(a,b){return a.a.zc(b,(Geb(),Eeb))==null} +function _nb(a){return new SDb(null,$nb(a,a.length))} +function yPb(a,b,c){return zPb(a,RD(b,42),RD(c,176))} +function Wrb(a,b,c){zsb(a.a,b);return _Eb(a.b,b.g,c)} +function fyb(a,b,c){lyb(c,a.a.c.length);$mb(a.a,c,b)} +function Knb(a,b,c,d){nFb(b,c,a.length);Onb(a,b,c,d)} +function Onb(a,b,c,d){var e;for(e=b;e<c;++e){a[e]=d}} +function Snb(a,b){var c;for(c=0;c<b;++c){a[c]=false}} +function cjb(a,b,c){Pib();this.e=a;this.d=b;this.a=c} +function DBb(a,b,c){this.c=a;this.a=b;yob();this.b=c} +function nMd(a,b){this.d=a;dMd.call(this,a);this.e=b} +function Ved(a,b,c){Ned(a,b.g,c);zsb(a.c,b);return a} +function xYb(a){vYb(a,(Cmd(),ymd));a.d=true;return a} +function Cfe(a){!a.j&&Ife(a,Dee(a.g,a.b));return a.j} +function At(a){a.a=null;a.e=null;akb(a.b);a.d=0;++a.c} +function znb(a){yFb(a.b!=-1);Xmb(a.c,a.a=a.b);a.b=-1} +function Qte(a,b){Wse.call(this,1);this.a=a;this.b=b} +function uUb(a,b){return a>0?$wnd.Math.log(a/b):-100} +function Agb(a,b){return Ddb(a,b)<0?-1:Ddb(a,b)>0?1:0} +function Dge(a,b){hZd(a,ZD(b,160)?b:RD(b,2036).Rl())} +function vFb(a,b){if(a==null){throw Adb(new Ogb(b))}} +function $nb(a,b){return jxb(b,a.length),new Gxb(a,b)} +function hsc(a,b){if(!b){return false}return ye(a,b)} +function Gs(){zs();return cD(WC(RG,1),jwe,549,0,[ys])} +function Xib(a){return a.e==0?a:new cjb(-a.e,a.d,a.a)} +function $Nb(a,b){return Qfb(a.c.c+a.c.b,b.c.c+b.c.b)} +function cvb(a,b){Pub(a.d,b,a.b.b,a.b);++a.a;a.c=null} +function JCb(a,b){!a.c?Rmb(a.b,b):JCb(a.c,b);return a} +function KB(a,b,c){var d;d=JB(a,b);LB(a,b,c);return d} +function Rnb(a,b,c){var d;for(d=0;d<b;++d){bD(a,d,c)}} +function nhb(a,b,c,d,e){while(b<c){d[e++]=ihb(a,b++)}} +function Qnc(a,b,c,d,e){Pnc(a,RD(Qc(b.k,c),15),c,d,e)} +function Nnc(a,b){FDb(GDb(a.Oc(),new voc),new xoc(b))} +function tXc(a,b){return Qfb(a.e.a+a.f.a,b.e.a+b.f.a)} +function vXc(a,b){return Qfb(a.e.b+a.f.b,b.e.b+b.f.b)} +function GOc(a){return $wnd.Math.abs(a.d.e-a.e.e)-a.a} +function ane(a){return a==oxe?mLe:a==pxe?'-INF':''+a} +function cne(a){return a==oxe?mLe:a==pxe?'-INF':''+a} +function MSb(a){HSb();return vCd(JGd(a))==vCd(LGd(a))} +function kOd(a,b,c){return RD(a.c.hd(b,RD(c,136)),44)} +function IFd(a,b){oDd(a,new OC(b.f!=null?b.f:''+b.g))} +function KFd(a,b){oDd(a,new OC(b.f!=null?b.f:''+b.g))} +function YGd(a,b){a.Si()&&(b=bHd(a,b));return a.Fi(b)} +function VVd(a,b){b=a.Yk(null,b);return UVd(a,null,b)} +function Wfe(a,b){++a.j;Tge(a,a.i,b);Vfe(a,RD(b,343))} +function UId(a){a?iz(a,(gib(),fib),''):neb((gib(),a))} +function Twb(a){this.d=(uFb(a),a);this.a=0;this.c=Sve} +function TTc(a,b){this.d=bUc(a);this.c=b;this.a=0.5*b} +function WTb(a){VTb.call(this);this.a=a;Rmb(a.a,this)} +function Zje(){gub.call(this);this.a=true;this.b=true} +function WB(){WB=geb;UB=new XB(false);VB=new XB(true)} +function Pc(a){var b;return b=a.g,!b?(a.g=new th(a)):b} +function Uc(a){var b;return b=a.k,!b?(a.k=new Bh(a)):b} +function ki(a){var b;return b=a.k,!b?(a.k=new Bh(a)):b} +function ej(a){var b;return b=a.i,!b?(a.i=new Ki(a)):b} +function bj(a){var b;b=a.f;return !b?(a.f=new Zj(a)):b} +function Fc(a){var b;b=a.j;return !b?(a.j=new Sw(a)):b} +function Co(a){var b;b=a.d;return !b?(a.d=new mp(a)):b} +function ate(a,b,c){Vse();++Use;return new Yte(a,b,c)} +function yj(a,b){Pb(b,a.c.b.c.gc());return new Nj(a,b)} +function sv(a,b){var c;c=a.a.gc();Pb(b,c);return c-1-b} +function sfb(a,b,c){var d;d=rfb(a,b);Ffb(c,d);return d} +function rfb(a,b){var c;c=new pfb;c.j=a;c.d=b;return c} +function Qb(a){if(a==null){throw Adb(new Ngb)}return a} +function OC(a){if(a==null){throw Adb(new Ngb)}this.a=a} +function XA(a){vA();this.b=new bnb;this.a=a;IA(this,a)} +function Zs(a){this.b=a;this.a=RD(Hvb(this.b.a.e),227)} +function tm(){tm=geb;_l();sm=new Kx((yob(),yob(),vob))} +function Px(){Px=geb;_l();Ox=new Qx((yob(),yob(),xob))} +function lTd(){lTd=geb;kTd=_ae();!!(JTd(),nTd)&&bbe()} +function LSc(a){a.s=NaN;a.c=NaN;MSc(a,a.e);MSc(a,a.j)} +function AYd(a){return (a.i==null&&rYd(a),a.i).length} +function wq(a,b){return RD(gn(a.a).Md().Xb(b),44).ld()} +function Wjb(a,b){return bE(b)?Xjb(a,b):Wd(qtb(a.f,b))} +function QSb(a,b){HSb();return a==JGd(b)?LGd(b):JGd(b)} +function rWb(a,b,c,d){return c==0||(c-d)/c<a.e||b>=a.g} +function bD(a,b,c){pFb(c==null||VC(a,c));return a[b]=c} +function yhb(a,b){BFb(b,a.length+1);return a.substr(b)} +function yxb(a,b){uFb(b);while(a.c<a.d){a.Se(b,a.c++)}} +function Dub(a){this.d=a;this.c=a.a.d.a;this.b=a.a.e.g} +function Ggd(a){this.c=a;this.a=new Yub;this.b=new Yub} +function R4b(a){this.c=new pjd;this.a=new bnb;this.b=a} +function fYb(a){this.b=new bnb;this.a=new bnb;this.c=a} +function Pdd(a,b,c){RD(b.b,68);Umb(b.a,new Wdd(a,c,b))} +function rdc(a,b){Zcc();return RD(Vrb(a,b.d),15).Fc(b)} +function oDd(a,b){var c;c=a.a.length;JB(a,c);LB(a,c,b)} +function eFb(a,b){var c;c=console[a];c.call(console,b)} +function _Id(a,b){var c;++a.j;c=a.Ej();a.rj(a.Zi(c,b))} +function lMc(a,b,c){var d;d=rMc(a,b,c);return kMc(a,d)} +function j2d(a){!a.d&&(a.d=new XZd(o7,a,1));return a.d} +function jVd(a){!a.a&&(a.a=new XZd(r7,a,4));return a.a} +function Jhb(a,b){a.a+=String.fromCharCode(b);return a} +function Thb(a,b){a.a+=String.fromCharCode(b);return a} +function D9d(a,b,c){this.a=a;L6d.call(this,b);this.b=c} +function Fde(a,b,c){this.a=a;MKd.call(this,8,b,null,c)} +function aue(a,b,c){Wse.call(this,a);this.a=b;this.b=c} +function O8d(a,b,c){t7d.call(this,b);this.a=a;this.b=c} +function ut(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function Zee(a){this.a=(uFb(qKe),qKe);this.b=a;new O5d} +function Trb(a){Ae(a.a);a.b=$C(jJ,rve,1,a.b.length,5,1)} +function Ckb(a){yFb(a.c!=-1);a.d.gd(a.c);a.b=a.c;a.c=-1} +function ejd(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function Jzb(a,b){return Tyb(a.c,a.f,b,a.b,a.a,a.e,a.d)} +function eyb(a,b){return lyb(b,a.a.c.length),Vmb(a.a,b)} +function Hb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)} +function O2d(a){return ZD(a,102)&&(RD(a,19).Bb&QHe)!=0} +function Fb(a){Hvb(a);return ZD(a,483)?RD(a,483):jeb(a)} +function bve(a){if(a)return a.dc();return !a.Kc().Ob()} +function kte(a){if(!Ase)return false;return Yjb(Ase,a)} +function hDb(a){if(0>=a){return new rDb}return iDb(a-1)} +function Y2b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function Zx(a){if(ZD(a,616)){return a}return new sy(a)} +function LCb(a){if(!a.c){MCb(a);a.d=true}else{LCb(a.c)}} +function ICb(a){if(!a.c){a.d=true;KCb(a)}else{a.c.$e()}} +function bHb(a){a.b=false;a.c=false;a.d=false;a.a=false} +function uMc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} +function _vd(a,b){var c;c=a.Ih(b);c>=0?a.ki(c):Tvd(a,b)} +function mtd(a,b){a.c<0||a.b.b<a.c?Oub(a.b,b):a.a.tf(b)} +function aBd(a,b){WGd((!a.a&&(a.a=new F4d(a,a)),a.a),b)} +function DQb(a,b){RQb(RD(b.b,68),a);Umb(b.a,new IQb(a))} +function Woc(a,b){return hgb(b.j.c.length,a.j.c.length)} +function oed(a,b,c){hed();return c.Lg(a,RD(b.ld(),149))} +function Hvb(a){if(a==null){throw Adb(new Ngb)}return a} +function uFb(a){if(a==null){throw Adb(new Ngb)}return a} +function uKd(a){if(a.p!=4)throw Adb(new cgb);return a.e} +function tKd(a){if(a.p!=3)throw Adb(new cgb);return a.e} +function CKd(a){if(a.p!=3)throw Adb(new cgb);return a.j} +function DKd(a){if(a.p!=4)throw Adb(new cgb);return a.j} +function wKd(a){if(a.p!=6)throw Adb(new cgb);return a.f} +function FKd(a){if(a.p!=6)throw Adb(new cgb);return a.k} +function $9d(a){!a.b&&(a.b=new pae(new lae));return a.b} +function yfe(a){a.c==-2&&Efe(a,vee(a.g,a.b));return a.c} +function vfb(a,b){var c;c=rfb('',a);c.n=b;c.i=1;return c} +function kp(a,b,c,d){gp.call(this,a,c);this.a=b;this.f=d} +function ct(a,b,c,d){gp.call(this,a,b);this.d=c;this.a=d} +function zy(a,b){_p.call(this,Gob(Qb(a),Qb(b)));this.a=b} +function ufd(){Oed.call(this);aFb(this.j.c,0);this.a=-1} +function $ae(){FBd.call(this,AKe,(jTd(),iTd));Uae(this)} +function Bne(){FBd.call(this,dLe,(Ole(),Nle));xne(this)} +function cdd(){qs.call(this,'DELAUNAY_TRIANGULATION',0)} +function Ehb(a){return String.fromCharCode.apply(null,a)} +function Zjb(a,b,c){return bE(b)?$jb(a,b,c):rtb(a.f,b,c)} +function Fob(a){yob();return !a?(urb(),urb(),trb):a.Oe()} +function Zu(a){dk(a,lwe);return dz(Bdb(Bdb(5,a),a/10|0))} +function yx(a,b){ux();return new wx(new tl(a),new dl(b))} +function fn(){fn=geb;en=new Nx(cD(WC(UK,1),Zve,44,0,[]))} +function tqb(a){!a.d&&(a.d=new xpb(a.c.Cc()));return a.d} +function qqb(a){!a.a&&(a.a=new Sqb(a.c.vc()));return a.a} +function sqb(a){!a.b&&(a.b=new Lqb(a.c.ec()));return a.b} +function qgb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function BGc(a,b){var c;c=new R4b(a);ZEb(b.c,c);return c} +function FMb(a,b){a.u.Hc((Pod(),Lod))&&DMb(a,b);HMb(a,b)} +function Fvb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)} +function Vrb(a,b){return Bsb(a.a,b)?a.b[RD(b,22).g]:null} +function YRb(){VRb();return cD(WC($O,1),jwe,488,0,[URb])} +function ybd(){sbd();return cD(WC(M1,1),jwe,489,0,[rbd])} +function Hbd(){Cbd();return cD(WC(N1,1),jwe,558,0,[Bbd])} +function gdd(){_cd();return cD(WC(V1,1),jwe,539,0,[$cd])} +function iyd(a){!a.n&&(a.n=new C5d(I4,a,1,7));return a.n} +function wCd(a){!a.c&&(a.c=new C5d(K4,a,9,9));return a.c} +function mzd(a){!a.c&&(a.c=new Yie(E4,a,5,8));return a.c} +function lzd(a){!a.b&&(a.b=new Yie(E4,a,4,7));return a.b} +function Sed(a){a.j.c.length=0;Ae(a.c);sfd(a.a);return a} +function Afe(a){a.e==fLe&&Gfe(a,Aee(a.g,a.b));return a.e} +function Bfe(a){a.f==fLe&&Hfe(a,Bee(a.g,a.b));return a.f} +function xBd(a,b,c,d){wBd(a,b,c,false);j1d(a,d);return a} +function oNd(a,b){this.b=a;nMd.call(this,a,b);mNd(this)} +function wNd(a,b){this.b=a;CMd.call(this,a,b);uNd(this)} +function Kmb(a){this.d=a;this.a=this.d.b;this.b=this.d.c} +function oy(a,b){this.b=a;this.c=b;this.a=new Osb(this.b)} +function ihb(a,b){BFb(b,a.length);return a.charCodeAt(b)} +function NDd(a,b){CGd(a,Kfb(vDd(b,'x')),Kfb(vDd(b,'y')))} +function $Dd(a,b){CGd(a,Kfb(vDd(b,'x')),Kfb(vDd(b,'y')))} +function CDb(a,b){MCb(a);return new SDb(a,new hEb(b,a.a))} +function GDb(a,b){MCb(a);return new SDb(a,new zEb(b,a.a))} +function HDb(a,b){MCb(a);return new WCb(a,new nEb(b,a.a))} +function IDb(a,b){MCb(a);return new oDb(a,new tEb(b,a.a))} +function Ty(a,b){return new Ry(RD(Qb(a),50),RD(Qb(b),50))} +function nHb(a,b){return Qfb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} +function gTb(a,b,c){c.a?Eyd(a,b.b-a.f/2):Dyd(a,b.a-a.g/2)} +function WYb(a,b){return Qfb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} +function RZb(a,b){NZb();return Qfb((uFb(a),a),(uFb(b),b))} +function wSd(a){return a!=null&&tpb(eSd,a.toLowerCase())} +function Ae(a){var b;for(b=a.Kc();b.Ob();){b.Pb();b.Qb()}} +function Ih(a){var b;b=a.b;!b&&(a.b=b=new Xh(a));return b} +function R0b(a){var b;b=Z5b(a);if(b){return b}return null} +function BSb(a,b){var c,d;c=a/b;d=eE(c);c>d&&++d;return d} +function Ck(a,b,c){var d;d=RD(a.d.Kb(c),159);!!d&&d.Nb(b)} +function Vhc(a,b,c){tqc(a.a,c);Jpc(c);Kqc(a.b,c);bqc(b,c)} +function oNc(a,b,c,d){this.a=a;this.c=b;this.b=c;this.d=d} +function ROc(a,b,c,d){this.c=a;this.b=b;this.a=c;this.d=d} +function uPc(a,b,c,d){this.c=a;this.b=b;this.d=c;this.a=d} +function Uid(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d} +function GTc(a,b,c,d){this.a=a;this.d=b;this.c=c;this.b=d} +function t1b(a,b,c,d){this.a=a;this.e=b;this.d=c;this.c=d} +function $td(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function ehb(a,b,c){this.a=ywe;this.d=a;this.b=b;this.c=c} +function fpc(a,b,c,d){qs.call(this,a,b);this.a=c;this.b=d} +function Uwb(a,b){this.d=(uFb(a),a);this.a=16449;this.c=b} +function CIc(a){this.a=new bnb;this.e=$C(kE,Nve,53,a,0,2)} +function ELc(a){a.Ug('No crossing minimization',1);a.Vg()} +function Evb(){yz.call(this,'There is no more element.')} +function OEd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function PEd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function h7d(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function x7d(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function C8d(a,b,c,d){s7d();M7d.call(this,b,c,d);this.a=a} +function J8d(a,b,c,d){s7d();M7d.call(this,b,c,d);this.a=a} +function lwd(a,b,c){var d,e;d=oSd(a);e=b.ti(c,d);return e} +function lBd(a){var b,c;c=(b=new s2d,b);l2d(c,a);return c} +function mBd(a){var b,c;c=(b=new s2d,b);p2d(c,a);return c} +function HDd(a,b){var c;c=Wjb(a.f,b);wEd(b,c);return null} +function uCd(a){!a.b&&(a.b=new C5d(G4,a,12,3));return a.b} +function VD(a){CFb(a==null||cE(a)&&!(a.Tm===keb));return a} +function gz(a){if(a.n){a.e!==rwe&&a.je();a.j=null}return a} +function Ng(a){ig(a.d);if(a.d.d!=a.c){throw Adb(new Jrb)}} +function Bkb(a){sFb(a.b<a.d.gc());return a.d.Xb(a.c=a.b++)} +function Xub(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} +function xPd(a){this.f=a;this.c=this.f.e;a.f>0&&wPd(this)} +function Vg(a,b){this.a=a;Pg.call(this,a,RD(a.d,15).fd(b))} +function lrd(a,b){return Qfb(urd(a)*trd(a),urd(b)*trd(b))} +function mrd(a,b){return Qfb(urd(a)*trd(a),urd(b)*trd(b))} +function n5b(a){return ozd(a)&&Heb(TD(Gxd(a,(yCc(),OAc))))} +function Sfc(a,b){return Rc(a,RD(mQb(b,(yCc(),tBc)),17),b)} +function lic(a,b){RD(mQb(a,(Ywc(),qwc)),15).Fc(b);return b} +function C2b(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} +function cEb(a,b,c,d){this.b=a;this.c=d;xxb.call(this,b,c)} +function Ulc(a,b,c){a.i=0;a.e=0;if(b==c){return}Qlc(a,b,c)} +function Vlc(a,b,c){a.i=0;a.e=0;if(b==c){return}Rlc(a,b,c)} +function akc(a,b,c){Wjc();return _Gb(RD(Wjb(a.e,b),529),c)} +function nd(a){var b;return b=a.f,!b?(a.f=new ne(a,a.c)):b} +function nTc(a,b){return VTc(a.j,b.s,b.c)+VTc(b.e,a.s,a.c)} +function Rrc(a,b){if(!!a.e&&!a.e.a){Prc(a.e,b);Rrc(a.e,b)}} +function Qrc(a,b){if(!!a.d&&!a.d.a){Prc(a.d,b);Qrc(a.d,b)}} +function krd(a,b){return -Qfb(urd(a)*trd(a),urd(b)*trd(b))} +function gtd(a){return RD(a.ld(),149).Pg()+':'+jeb(a.md())} +function EBd(){BBd(this,new yAd);this.wb=(lTd(),kTd);jTd()} +function G7b(a){this.b=new bnb;Tmb(this.b,this.b);this.a=a} +function WWc(a,b){new Yub;this.a=new Ejd;this.b=a;this.c=b} +function urb(){urb=geb;rrb=new wrb;srb=new wrb;trb=new Brb} +function yob(){yob=geb;vob=new Job;wob=new apb;xob=new ipb} +function FGb(){FGb=geb;CGb=new AGb;EGb=new fHb;DGb=new YGb} +function HSb(){HSb=geb;GSb=new bnb;FSb=new Tsb;ESb=new bnb} +function Rb(a,b){if(a==null){throw Adb(new Ogb(b))}return a} +function tCd(a){!a.a&&(a.a=new C5d(J4,a,10,11));return a.a} +function uYd(a){!a.q&&(a.q=new C5d(s7,a,11,10));return a.q} +function xYd(a){!a.s&&(a.s=new C5d(y7,a,21,17));return a.s} +function er(a){Qb(a);return Er(new is(Mr(a.a.Kc(),new ir)))} +function hfd(a,b){rb(a);rb(b);return ns(RD(a,22),RD(b,22))} +function qDd(a,b,c){var d,e;d=Qeb(c);e=new hC(d);sC(a,b,e)} +function d4d(a,b,c,d,e,f){c4d.call(this,a,b,c,d,e,f?-2:-1)} +function sje(a,b,c,d){kZd.call(this,b,c);this.b=a;this.a=d} +function Ry(a,b){wi.call(this,new ezb(a));this.a=a;this.b=b} +function Gu(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} +function Dkc(a){lkc();var b;b=RD(a.g,10);b.n.a=a.d.c+b.d.b} +function fA(){fA=geb;var a,b;b=!lA();a=new tA;eA=b?new mA:a} +function Hob(a){yob();return ZD(a,59)?new irb(a):new Upb(a)} +function Ux(a){return ZD(a,16)?new btb(RD(a,16)):Vx(a.Kc())} +function Vi(a){return new ij(a,a.e.Rd().gc()*a.c.Rd().gc())} +function fj(a){return new sj(a,a.e.Rd().gc()*a.c.Rd().gc())} +function Iz(a){return !!a&&!!a.hashCode?a.hashCode():kFb(a)} +function Yjb(a,b){return b==null?!!qtb(a.f,null):Jtb(a.i,b)} +function hYb(a,b){var c;c=$sb(a.a,b);c&&(b.d=null);return c} +function MGb(a,b,c){if(a.f){return a.f.ef(b,c)}return false} +function cFc(a,b,c,d){bD(a.c[b.g],c.g,d);bD(a.c[c.g],b.g,d)} +function fFc(a,b,c,d){bD(a.c[b.g],b.g,c);bD(a.b[b.g],b.g,d)} +function sXc(a,b,c){return Kfb(UD(c.a))<=a&&Kfb(UD(c.b))>=b} +function yJc(a,b){this.g=a;this.d=cD(WC(jR,1),WAe,10,0,[b])} +function lHb(a){this.c=a;this.b=new yAb(RD(Qb(new oHb),50))} +function UYb(a){this.c=a;this.b=new yAb(RD(Qb(new XYb),50))} +function $Qb(a){this.b=a;this.a=new yAb(RD(Qb(new bRb),50))} +function tRc(){this.b=new _sb;this.d=new Yub;this.e=new Fyb} +function VTb(){this.c=new pjd;this.d=new pjd;this.e=new pjd} +function a1b(){this.a=new Ejd;this.b=(dk(3,iwe),new cnb(3))} +function i7d(a,b){this.e=a;this.a=jJ;this.b=pje(b);this.c=b} +function Vid(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} +function VLd(a,b,c,d,e,f){this.a=a;NKd.call(this,b,c,d,e,f)} +function aLd(a,b,c,d,e,f){this.a=a;NKd.call(this,b,c,d,e,f)} +function fge(a,b,c,d,e,f,g){return new lle(a.e,b,c,d,e,f,g)} +function xhb(a,b,c){return c>=0&&lhb(a.substr(c,b.length),b)} +function hGd(a,b){return ZD(b,149)&&lhb(a.b,RD(b,149).Pg())} +function Tde(a,b){return a.a?b.Gh().Kc():RD(b.Gh(),71).Ii()} +function Qqb(a,b){var c;c=a.b.Qc(b);Rqb(c,a.b.gc());return c} +function Ivb(a,b){if(a==null){throw Adb(new Ogb(b))}return a} +function zYd(a){if(!a.u){yYd(a);a.u=new w0d(a,a)}return a.u} +function Kx(a){this.a=(yob(),ZD(a,59)?new irb(a):new Upb(a))} +function Uwd(a){var b;b=RD(Ywd(a,16),29);return !b?a.ii():b} +function lz(a,b){var c;c=nfb(a.Rm);return b==null?c:c+': '+b} +function zhb(a,b,c){AFb(b,c,a.length);return a.substr(b,c-b)} +function VKb(a,b){RJb.call(this);KKb(this);this.a=a;this.c=b} +function neb(a){!a?vve:lz(a,a.ie());String.fromCharCode(10)} +function Wz(a){Qz();$wnd.setTimeout(function(){throw a},0)} +function GHb(){DHb();return cD(WC(uN,1),jwe,436,0,[CHb,BHb])} +function OHb(){LHb();return cD(WC(vN,1),jwe,435,0,[JHb,KHb])} +function WUb(){TUb();return cD(WC(BP,1),jwe,432,0,[RUb,SUb])} +function S8b(){P8b();return cD(WC(vS,1),jwe,517,0,[O8b,N8b])} +function Fuc(){Cuc();return cD(WC(fX,1),jwe,487,0,[Buc,Auc])} +function buc(){$tc();return cD(WC(cX,1),jwe,428,0,[Ytc,Ztc])} +function mtc(){jtc();return cD(WC($W,1),jwe,431,0,[htc,itc])} +function vEc(){sEc();return cD(WC(xX,1),jwe,430,0,[qEc,rEc])} +function vNc(){sNc();return cD(WC(MY,1),jwe,531,0,[rNc,qNc])} +function zQc(){wQc();return cD(WC(FZ,1),jwe,523,0,[vQc,uQc])} +function HQc(){EQc();return cD(WC(GZ,1),jwe,522,0,[CQc,DQc])} +function iTc(){fTc();return cD(WC(b$,1),jwe,528,0,[eTc,dTc])} +function Rvc(){Ovc();return cD(WC(lX,1),jwe,429,0,[Mvc,Nvc])} +function F8c(){z8c();return cD(WC(l1,1),jwe,490,0,[x8c,y8c])} +function H9c(){B9c();return cD(WC(t1,1),jwe,491,0,[z9c,A9c])} +function D_c(){A_c();return cD(WC(K_,1),jwe,433,0,[z_c,y_c])} +function a4c(){Y3c();return cD(WC(H0,1),jwe,434,0,[W3c,X3c])} +function gVc(){dVc();return cD(WC(w$,1),jwe,464,0,[bVc,cVc])} +function D2c(){x2c();return cD(WC(s0,1),jwe,500,0,[v2c,w2c])} +function Pbd(){Mbd();return cD(WC(O1,1),jwe,438,0,[Lbd,Kbd])} +function rdd(){ldd();return cD(WC(W1,1),jwe,437,0,[kdd,jdd])} +function xqd(){uqd();return cD(WC(M3,1),jwe,347,0,[sqd,tqd])} +function Jvd(a,b,c,d){return c>=0?a.Uh(b,c,d):a.Ch(null,c,d)} +function ltd(a){if(a.b.b==0){return a.a.sf()}return Uub(a.b)} +function vKd(a){if(a.p!=5)throw Adb(new cgb);return Ydb(a.f)} +function EKd(a){if(a.p!=5)throw Adb(new cgb);return Ydb(a.k)} +function P$d(a){dE(a.a)===dE((lYd(),kYd))&&Q$d(a);return a.a} +function iad(a,b){a.b=b;a.c>0&&a.b>0&&(a.g=Aad(a.c,a.b,a.a))} +function jad(a,b){a.c=b;a.c>0&&a.b>0&&(a.g=Aad(a.c,a.b,a.a))} +function BUc(a,b){yUc(this,new rjd(a.a,a.b));zUc(this,gv(b))} +function Tp(){Sp.call(this,new Usb(Sv(12)));Lb(true);this.a=2} +function eue(a,b,c){Vse();Wse.call(this,a);this.b=b;this.a=c} +function C7d(a,b,c){s7d();t7d.call(this,b);this.a=a;this.b=c} +function qub(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} +function Tub(a){return a.b==0?null:(sFb(a.b!=0),Wub(a,a.a.a))} +function Xjb(a,b){return b==null?Wd(qtb(a.f,null)):Ktb(a.i,b)} +function bzb(a,b,c,d,e){return new Kzb(a,(cAb(),aAb),b,c,d,e)} +function Fnb(a,b){oFb(b);return Hnb(a,$C(kE,Pwe,28,b,15,1),b)} +function Tx(a,b){Rb(a,'set1');Rb(b,'set2');return new ey(a,b)} +function Kz(a,b){var c=Jz[a.charCodeAt(0)];return c==null?a:c} +function Xyb(a,b){var c,d;c=b;d=new Gzb;Zyb(a,c,d);return d.d} +function EMb(a,b,c,d){var e;e=new TJb;b.a[c.g]=e;Wrb(a.b,d,e)} +function SXb(a,b){var c;c=BXb(a.f,b);return $id(fjd(c),a.f.d)} +function RFb(a){var b;EJb(a.a);DJb(a.a);b=new PJb(a.a);LJb(b)} +function _Mb(a,b){$Mb(a,true);Umb(a.e.Rf(),new dNb(a,true,b))} +function PSb(a,b){HSb();return a==vCd(JGd(b))||a==vCd(LGd(b))} +function R0c(a,b){B0c();return RD(mQb(b,(h_c(),f_c)),17).a==a} +function eE(a){return Math.max(Math.min(a,lve),-2147483648)|0} +function sy(a){this.a=RD(Qb(a),277);this.b=(yob(),new jrb(a))} +function qbd(a,b,c){this.i=new bnb;this.b=a;this.g=b;this.a=c} +function had(a,b,c){this.a=new bnb;this.e=a;this.f=b;this.c=c} +function _9c(a,b,c){this.c=new bnb;this.e=a;this.f=b;this.b=c} +function TKb(a){RJb.call(this);KKb(this);this.a=a;this.c=true} +function ieb(a){function b(){} +;b.prototype=a||{};return new b} +function zfb(a){if(a.Ae()){return null}var b=a.n;return eeb[b]} +function kzd(a){if(a.Db>>16!=3)return null;return RD(a.Cb,27)} +function MCd(a){if(a.Db>>16!=9)return null;return RD(a.Cb,27)} +function Fzd(a){if(a.Db>>16!=6)return null;return RD(a.Cb,74)} +function dVc(){dVc=geb;bVc=new eVc(Nye,0);cVc=new eVc(Oye,1)} +function wQc(){wQc=geb;vQc=new xQc(Oye,0);uQc=new xQc(Nye,1)} +function EQc(){EQc=geb;CQc=new FQc(Zye,0);DQc=new FQc('UP',1)} +function Is(){Is=geb;Hs=ss((zs(),cD(WC(RG,1),jwe,549,0,[ys])))} +function Wx(a){var b;b=new atb(Sv(a.length));zob(b,a);return b} +function B2b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function qmb(a,b){if(kmb(a,b)){Jmb(a);return true}return false} +function qC(a,b){if(b==null){throw Adb(new Ngb)}return rC(a,b)} +function nB(a,b){var c;c=a.q.getHours();a.q.setDate(b);mB(a,c)} +function Xvd(a,b,c){var d;d=a.Ih(b);d>=0?a.bi(d,c):Svd(a,b,c)} +function Lvd(a,b){var c;c=a.Ih(b);return c>=0?a.Wh(c):Rvd(a,b)} +function zo(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Yd(c.g,c.i)}} +function pMc(a,b,c){var d;d=qMc(a,b,c);a.b=new _Lc(d.c.length)} +function HId(a,b,c){EId();!!a&&Zjb(DId,a,b);!!a&&Zjb(CId,a,c)} +function bfc(a,b){Rec();return Geb(),RD(b.a,17).a<a?true:false} +function afc(a,b){Rec();return Geb(),RD(b.b,17).a<a?true:false} +function R7b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} +function xCd(a){return !a.a&&(a.a=new C5d(J4,a,10,11)),a.a.i>0} +function sId(a){var b;b=a.d;b=a.bj(a.f);WGd(a,b);return b.Ob()} +function bHd(a,b){var c;c=new Kub(b);Ve(c,a);return new dnb(c)} +function qKd(a){if(a.p!=0)throw Adb(new cgb);return Pdb(a.f,0)} +function zKd(a){if(a.p!=0)throw Adb(new cgb);return Pdb(a.k,0)} +function gBd(a){if(a.Db>>16!=7)return null;return RD(a.Cb,241)} +function xXd(a){if(a.Db>>16!=6)return null;return RD(a.Cb,241)} +function dCd(a){if(a.Db>>16!=7)return null;return RD(a.Cb,167)} +function vCd(a){if(a.Db>>16!=11)return null;return RD(a.Cb,27)} +function uWd(a){if(a.Db>>16!=17)return null;return RD(a.Cb,29)} +function kVd(a){if(a.Db>>16!=3)return null;return RD(a.Cb,155)} +function BDb(a){var b;MCb(a);b=new _sb;return CDb(a,new aEb(b))} +function xfb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.ve(b))} +function qB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);mB(a,c)} +function oz(a,b){ez(this);this.f=b;this.g=a;gz(this);this.je()} +function TQb(a,b){this.a=a;this.c=ajd(this.a);this.b=new Vid(b)} +function aGb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new dnb(c))} +function s$b(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new dnb(c))} +function _Kc(a){this.a=a;this.b=$C(qY,Nve,2043,a.e.length,0,2)} +function fGb(){this.a=new Iub;this.e=new _sb;this.g=0;this.i=0} +function EId(){EId=geb;DId=new Tsb;CId=new Tsb;IId(zK,new JId)} +function KFc(){KFc=geb;JFc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} +function RFc(){RFc=geb;QFc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} +function gGc(){gGc=geb;fGc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} +function ANc(){ANc=geb;zNc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function dOc(){dOc=geb;cOc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function gQc(){gQc=geb;fQc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function WQc(){WQc=geb;VQc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function dZd(a,b,c,d,e,f){return new P3d(a.e,b,a.Lj(),c,d,e,f)} +function $jb(a,b,c){return b==null?rtb(a.f,null,c):Ltb(a.i,b,c)} +function Y0b(a,b){!!a.c&&Ymb(a.c.g,a);a.c=b;!!a.c&&Rmb(a.c.g,a)} +function g3b(a,b){!!a.c&&Ymb(a.c.a,a);a.c=b;!!a.c&&Rmb(a.c.a,a)} +function P3b(a,b){!!a.i&&Ymb(a.i.j,a);a.i=b;!!a.i&&Rmb(a.i.j,a)} +function Z0b(a,b){!!a.d&&Ymb(a.d.e,a);a.d=b;!!a.d&&Rmb(a.d.e,a)} +function _Sc(a,b){!!a.a&&Ymb(a.a.k,a);a.a=b;!!a.a&&Rmb(a.a.k,a)} +function aTc(a,b){!!a.b&&Ymb(a.b.f,a);a.b=b;!!a.b&&Rmb(a.b.f,a)} +function Odd(a,b){Pdd(a,a.b,a.c);RD(a.b.b,68);!!b&&RD(b.b,68).b} +function j2c(a,b){return Qfb(RD(a.c,65).c.e.b,RD(b.c,65).c.e.b)} +function k2c(a,b){return Qfb(RD(a.c,65).c.e.a,RD(b.c,65).c.e.a)} +function YXb(a){NXb();return Geb(),RD(a.a,86).d.e!=0?true:false} +function LXd(a,b){ZD(a.Cb,184)&&(RD(a.Cb,184).tb=null);PAd(a,b)} +function CWd(a,b){ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,b)} +function _5d(a,b){a6d(a,b);ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),2)} +function JFd(a,b){var c,d;c=b.c;d=c!=null;d&&oDd(a,new OC(b.c))} +function v0d(a){var b,c;c=(jTd(),b=new s2d,b);l2d(c,a);return c} +function E4d(a){var b,c;c=(jTd(),b=new s2d,b);l2d(c,a);return c} +function Fr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} +function nq(a,b,c){Rmb(a.a,(fn(),ck(b,c),new gp(b,c)));return a} +function rge(a,b){return nke(),wWd(b)?new ole(b,a):new Eke(b,a)} +function ojb(a){Pib();return Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a)))} +function Asb(a){var b;b=RD(UEb(a.b),9);return new Fsb(a.a,b,a.c)} +function Qw(a,b){var c;c=RD(Xv(nd(a.a),b),16);return !c?0:c.gc()} +function Zmb(a,b,c){var d;xFb(b,c,a.c.length);d=c-b;$Eb(a.c,b,d)} +function Rkb(a,b,c){xFb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} +function fgd(a){this.c=new Yub;this.b=a.b;this.d=a.c;this.a=a.a} +function qjd(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function bTc(a,b,c,d){this.c=a;this.d=d;_Sc(this,b);aTc(this,c)} +function Si(a,b){Qi.call(this,new Usb(Sv(a)));dk(b,Mve);this.a=b} +function Ryb(a,b,c){return new Kzb(a,(cAb(),_zb),null,false,b,c)} +function czb(a,b,c){return new Kzb(a,(cAb(),bAb),b,c,null,false)} +function ABb(){xBb();return cD(WC(QL,1),jwe,108,0,[uBb,vBb,wBb])} +function yLb(){vLb();return cD(WC(TN,1),jwe,471,0,[uLb,tLb,sLb])} +function HKb(){EKb();return cD(WC(MN,1),jwe,470,0,[CKb,BKb,DKb])} +function aKb(){ZJb();return cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])} +function DWb(){AWb();return cD(WC(JP,1),jwe,391,0,[yWb,xWb,zWb])} +function moc(){joc();return cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc])} +function ytc(){stc();return cD(WC(_W,1),jwe,322,0,[qtc,ptc,rtc])} +function Htc(){Etc();return cD(WC(aX,1),jwe,351,0,[Btc,Dtc,Ctc])} +function kuc(){huc();return cD(WC(dX,1),jwe,459,0,[fuc,euc,guc])} +function Avc(){xvc();return cD(WC(jX,1),jwe,298,0,[vvc,wvc,uvc])} +function Jvc(){Gvc();return cD(WC(kX,1),jwe,311,0,[Evc,Fvc,Dvc])} +function pDc(){lDc();return cD(WC(sX,1),jwe,390,0,[iDc,jDc,kDc])} +function EEc(){BEc();return cD(WC(yX,1),jwe,462,0,[AEc,yEc,zEc])} +function NEc(){KEc();return cD(WC(zX,1),jwe,387,0,[HEc,IEc,JEc])} +function WEc(){TEc();return cD(WC(AX,1),jwe,349,0,[SEc,QEc,REc])} +function oFc(){lFc();return cD(WC(CX,1),jwe,350,0,[iFc,jFc,kFc])} +function xFc(){uFc();return cD(WC(DX,1),jwe,352,0,[tFc,rFc,sFc])} +function GFc(){DFc();return cD(WC(EX,1),jwe,388,0,[BFc,CFc,AFc])} +function UKc(){RKc();return cD(WC(nY,1),jwe,463,0,[OKc,PKc,QKc])} +function K3b(a){return xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a]))} +function OZc(){LZc();return cD(WC(F_,1),jwe,392,0,[KZc,JZc,IZc])} +function H_c(){H_c=geb;G_c=nfd(new ufd,(YVc(),WVc),(WYc(),MYc))} +function A_c(){A_c=geb;z_c=new B_c('DFS',0);y_c=new B_c('BFS',1)} +function TQc(a,b,c){var d;d=new SQc;d.b=b;d.a=c;++b.b;Rmb(a.d,d)} +function NTb(a,b,c){var d;d=new sjd(c.d);$id(d,a);CGd(b,d.a,d.b)} +function Nwb(a,b){Mwb(a,Ydb(Cdb(Tdb(b,24),Pxe)),Ydb(Cdb(b,Pxe)))} +function wFb(a,b){if(a<0||a>b){throw Adb(new veb(cye+a+dye+b))}} +function tFb(a,b){if(a<0||a>=b){throw Adb(new veb(cye+a+dye+b))}} +function BFb(a,b){if(a<0||a>=b){throw Adb(new eib(cye+a+dye+b))}} +function Swb(a,b){this.b=(uFb(a),a);this.a=(b&qxe)==0?b|64|Ove:b} +function ODb(a){var b;MCb(a);b=(urb(),urb(),srb);return PDb(a,b)} +function R9c(a,b,c){var d;d=S9c(a,b,false);return d.b<=b&&d.a<=c} +function h9c(){b9c();return cD(WC(o1,1),jwe,439,0,[$8c,a9c,_8c])} +function c7c(){_6c();return cD(WC(a1,1),jwe,394,0,[Z6c,$6c,Y6c])} +function i6c(){f6c();return cD(WC(V0,1),jwe,445,0,[c6c,d6c,e6c])} +function D6c(){z6c();return cD(WC(Z0,1),jwe,455,0,[w6c,y6c,x6c])} +function k4c(){g4c();return cD(WC(I0,1),jwe,393,0,[d4c,e4c,f4c])} +function x5c(){t5c();return cD(WC(N0,1),jwe,299,0,[r5c,s5c,q5c])} +function Rmd(){Omd();return cD(WC(t3,1),jwe,278,0,[Lmd,Mmd,Nmd])} +function pqd(){mqd();return cD(WC(J3,1),jwe,280,0,[kqd,jqd,lqd])} +function Ind(){Fnd();return cD(WC(y3,1),jwe,346,0,[Dnd,Cnd,End])} +function jbd(){gbd();return cD(WC(I1,1),jwe,444,0,[dbd,ebd,fbd])} +function bv(a){Qb(a);return ZD(a,16)?new dnb(RD(a,16)):cv(a.Kc())} +function Hz(a,b){return !!a&&!!a.equals?a.equals(b):dE(a)===dE(b)} +function Cdb(a,b){return Edb(tD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function Rdb(a,b){return Edb(zD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function $db(a,b){return Edb(HD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function xs(a,b){var c;c=(uFb(a),a).g;lFb(!!c);uFb(b);return c(b)} +function rv(a,b){var c,d;d=tv(a,b);c=a.a.fd(d);return new Gv(a,c)} +function CXd(a){if(a.Db>>16!=6)return null;return RD(yvd(a),241)} +function sKd(a){if(a.p!=2)throw Adb(new cgb);return Ydb(a.f)&Bwe} +function BKd(a){if(a.p!=2)throw Adb(new cgb);return Ydb(a.k)&Bwe} +function ynb(a){sFb(a.a<a.c.c.length);a.b=a.a++;return a.c.c[a.b]} +function $Gb(a,b){a.b=a.b|b.b;a.c=a.c|b.c;a.d=a.d|b.d;a.a=a.a|b.a} +function NJb(a,b){var c;c=Kfb(UD(a.a.of((umd(),cmd))));OJb(a,b,c)} +function bjb(a,b){cjb.call(this,1,2,cD(WC(kE,1),Pwe,28,15,[a,b]))} +function Yte(a,b,c){Wse.call(this,25);this.b=a;this.a=b;this.c=c} +function xte(a){Vse();Wse.call(this,a);this.c=false;this.a=false} +function xfe(a){a.a==(ree(),qee)&&Dfe(a,see(a.g,a.b));return a.a} +function zfe(a){a.d==(ree(),qee)&&Ffe(a,wee(a.g,a.b));return a.d} +function IZb(a,b){CZb();return a.c==b.c?Qfb(b.d,a.d):Qfb(b.c,a.c)} +function GZb(a,b){CZb();return a.c==b.c?Qfb(b.d,a.d):Qfb(a.c,b.c)} +function HZb(a,b){CZb();return a.c==b.c?Qfb(a.d,b.d):Qfb(a.c,b.c)} +function JZb(a,b){CZb();return a.c==b.c?Qfb(a.d,b.d):Qfb(b.c,a.c)} +function Yrb(a,b){return Dsb(a.a,b)?_Eb(a.b,RD(b,22).g,null):null} +function Lwb(a){return Bdb(Sdb(Hdb(Kwb(a,32)),32),Hdb(Kwb(a,32)))} +function kUb(a){return a.b==null||a.b.length==0?'n_'+a.a:'n_'+a.b} +function aXc(a){return a.c==null||a.c.length==0?'n_'+a.g:'n_'+a.c} +function wYc(a,b){var c;c=a+'';while(c.length<b){c='0'+c}return c} +function vkc(a,b){var c;c=RD(Wjb(a.g,b),60);Umb(b.d,new ulc(a,c))} +function J_b(a,b){var c,d;c=l2b(a);d=l2b(b);return c<d?-1:c>d?1:0} +function Hmc(a,b){var c,d;c=Gmc(b);d=c;return RD(Wjb(a.c,d),17).a} +function CMc(a,b,c){var d;d=a.d[b.p];a.d[b.p]=a.d[c.p];a.d[c.p]=d} +function Jqd(a,b,c){var d;if(a.n&&!!b&&!!c){d=new otd;Rmb(a.e,d)}} +function gYb(a,b){Ysb(a.a,b);if(b.d){throw Adb(new yz(jye))}b.d=a} +function Had(a,b){this.a=new bnb;this.d=new bnb;this.f=a;this.c=b} +function RWb(){this.c=new dXb;this.a=new I_b;this.b=new E0b;g0b()} +function med(){hed();this.b=new Tsb;this.a=new Tsb;this.c=new bnb} +function KKd(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} +function LKd(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} +function S3d(a,b,c,d,e,f){R3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function U3d(a,b,c,d,e,f){T3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function W3d(a,b,c,d,e,f){V3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function Y3d(a,b,c,d,e,f){X3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function $3d(a,b,c,d,e,f){Z3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function a4d(a,b,c,d,e,f){_3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function f4d(a,b,c,d,e,f){e4d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function h4d(a,b,c,d,e,f){g4d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function N7d(a,b,c,d){t7d.call(this,c);this.b=a;this.c=b;this.d=d} +function mfe(a,b){this.f=a;this.a=(ree(),pee);this.c=pee;this.b=b} +function Jfe(a,b){this.g=a;this.d=(ree(),qee);this.a=qee;this.b=b} +function Gme(a,b){!a.c&&(a.c=new Uge(a,0));Fge(a.c,(nme(),fme),b)} +function Oge(a,b){return Pge(a,b,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function lB(a,b){return Agb(Hdb(a.q.getTime()),Hdb(b.q.getTime()))} +function gj(a){return fk(a.e.Rd().gc()*a.c.Rd().gc(),16,new qj(a))} +function CYd(a){return !!a.u&&tYd(a.u.a).i!=0&&!(!!a.n&&d$d(a.n))} +function p4d(a){return !!a.a&&o4d(a.a.a).i!=0&&!(!!a.b&&o5d(a.b))} +function Cxd(a,b){if(b==0){return !!a.o&&a.o.f!=0}return Kvd(a,b)} +function Cc(a,b,c){var d;d=RD(a.Zb().xc(b),16);return !!d&&d.Hc(c)} +function Gc(a,b,c){var d;d=RD(a.Zb().xc(b),16);return !!d&&d.Mc(c)} +function _yb(a,b){var c;c=1-b;a.a[c]=azb(a.a[c],c);return azb(a,b)} +function DFb(a,b){var c,d;d=Cdb(a,yxe);c=Sdb(b,32);return Rdb(c,d)} +function bGb(a,b,c){var d;d=(Qb(a),new dnb(a));_Fb(new aGb(d,b,c))} +function t$b(a,b,c){var d;d=(Qb(a),new dnb(a));r$b(new s$b(d,b,c))} +function vBd(a,b,c,d,e,f){wBd(a,b,c,f);EYd(a,d);FYd(a,e);return a} +function Xhb(a,b,c,d){a.a+=''+zhb(b==null?vve:jeb(b),c,d);return a} +function Jkb(a,b){this.a=a;Dkb.call(this,a);wFb(b,a.gc());this.b=b} +function xmb(a){this.a=$C(jJ,rve,1,mgb($wnd.Math.max(8,a))<<1,5,1)} +function t2b(a){return RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199)} +function s2b(a){return RD(anb(a,$C(WQ,VAe,18,a.c.length,0,1)),482)} +function Iyb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} +function Rib(a){while(a.d>0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function fvb(a){sFb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} +function sRc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Xub(a.d);aFb(a.e.a.c,0)} +function Z5c(a,b){var c;a.e=new R5c;c=Q2c(b);_mb(c,a.c);$5c(a,c,0)} +function zgd(a,b,c,d){var e;e=new Hgd;e.a=b;e.b=c;e.c=d;Mub(a.a,e)} +function Agd(a,b,c,d){var e;e=new Hgd;e.a=b;e.b=c;e.c=d;Mub(a.b,e)} +function Tb(a,b,c){if(a<0||b<a||b>c){throw Adb(new veb(Kb(a,b,c)))}} +function Pb(a,b){if(a<0||a>=b){throw Adb(new veb(Ib(a,b)))}return a} +function qz(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function Zjc(a){Wjc();if(ZD(a.g,10)){return RD(a.g,10)}return null} +function nx(a){if(Ih(a).dc()){return false}Jh(a,new rx);return true} +function Xdb(a){var b;if(Kdb(a)){b=a;return b==-0.?0:b}return ED(a)} +function lkb(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} +function gsb(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} +function vub(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} +function RCb(a){var b;LCb(a);b=new Prb;ixb(a.a,new fDb(b));return b} +function Vae(){var a,b,c;b=(c=(a=new s2d,a),c);Rmb(Rae,b);return b} +function mDb(a){var b;LCb(a);b=new ltb;ixb(a.a,new uDb(b));return b} +function jDb(a,b){if(a.a<=a.b){b.Dd(a.a++);return true}return false} +function xzb(a){yzb.call(this,a,(cAb(),$zb),null,false,null,false)} +function $Rb(){$Rb=geb;ZRb=ss((VRb(),cD(WC($O,1),jwe,488,0,[URb])))} +function CHc(){CHc=geb;BHc=yx(sgb(1),sgb(4));AHc=yx(sgb(1),sgb(2))} +function yXc(a,b){return new gud(b,njd(ajd(b.e),a,a),(Geb(),true))} +function fv(a){return new cnb((dk(a,lwe),dz(Bdb(Bdb(5,a),a/10|0))))} +function Wi(a){return fk(a.e.Rd().gc()*a.c.Rd().gc(),273,new kj(a))} +function u2b(a){return RD(anb(a,$C(xR,XAe,12,a.c.length,0,1)),2042)} +function COc(a){dOc();return !W0b(a)&&!(!W0b(a)&&a.c.i.c==a.d.i.c)} +function Y_c(a,b){R_c();return RD(mQb(b,(h_c(),W$c)),17).a>=a.gc()} +function q8b(a,b){w8b(b,a);y8b(a.d);y8b(RD(mQb(a,(yCc(),cBc)),214))} +function r8b(a,b){z8b(b,a);B8b(a.d);B8b(RD(mQb(a,(yCc(),cBc)),214))} +function $0b(a,b,c){!!a.d&&Ymb(a.d.e,a);a.d=b;!!a.d&&Qmb(a.d.e,c,a)} +function jPb(a,b,c){return c.f.c.length>0?yPb(a.a,b,c):yPb(a.b,b,c)} +function Uz(a,b,c){var d;d=Sz();try{return Rz(a,b,c)}finally{Vz(d)}} +function wDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=c.pe());return d} +function yDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=c.se());return d} +function xDd(a,b){var c,d;c=JB(a,b);d=null;!!c&&(d=c.se());return d} +function zDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=ADd(c));return d} +function rEd(a,b,c){var d;d=uDd(c);Do(a.g,d,b);Do(a.i,b,c);return b} +function UIc(a,b,c){this.d=new fJc(this);this.e=a;this.i=b;this.f=c} +function Mk(a,b,c,d){this.e=null;this.c=a;this.d=b;this.a=c;this.b=d} +function urc(a,b,c,d){nrc(this);this.c=a;this.e=b;this.f=c;this.b=d} +function MKd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function Vc(a,b,c,d){return ZD(c,59)?new Kg(a,b,c,d):new yg(a,b,c,d)} +function gr(a){if(ZD(a,16)){return RD(a,16).dc()}return !a.Kc().Ob()} +function Wo(a){if(a.e.g!=a.b){throw Adb(new Jrb)}return !!a.c&&a.d>0} +function evb(a){sFb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function imb(a,b){uFb(b);bD(a.a,a.c,b);a.c=a.c+1&a.a.length-1;mmb(a)} +function hmb(a,b){uFb(b);a.b=a.b-1&a.a.length-1;bD(a.a,a.b,b);mmb(a)} +function _je(a){var b;b=a.Gh();this.a=ZD(b,71)?RD(b,71).Ii():b.Kc()} +function px(a){return new Swb(Dob(RD(a.a.md(),16).gc(),a.a.ld()),16)} +function Abd(){Abd=geb;zbd=ss((sbd(),cD(WC(M1,1),jwe,489,0,[rbd])))} +function Jbd(){Jbd=geb;Ibd=ss((Cbd(),cD(WC(N1,1),jwe,558,0,[Bbd])))} +function idd(){idd=geb;hdd=ss((_cd(),cD(WC(V1,1),jwe,539,0,[$cd])))} +function X$b(){U$b();return cD(WC(CQ,1),jwe,389,0,[T$b,R$b,Q$b,S$b])} +function hAb(){cAb();return cD(WC(AL,1),jwe,303,0,[$zb,_zb,aAb,bAb])} +function LPb(){IPb();return cD(WC(DO,1),jwe,332,0,[FPb,EPb,GPb,HPb])} +function LRb(){IRb();return cD(WC(WO,1),jwe,406,0,[FRb,ERb,GRb,HRb])} +function pOb(){mOb();return cD(WC(hO,1),jwe,417,0,[lOb,iOb,jOb,kOb])} +function uZb(){nZb();return cD(WC(lQ,1),jwe,416,0,[jZb,mZb,kZb,lZb])} +function hnc(){enc();return cD(WC(LV,1),jwe,421,0,[anc,bnc,cnc,dnc])} +function zec(){vec();return cD(WC(qT,1),jwe,371,0,[uec,sec,tec,rec])} +function BDc(){wDc();return cD(WC(tX,1),jwe,203,0,[uDc,vDc,tDc,sDc])} +function nEc(){kEc();return cD(WC(wX,1),jwe,284,0,[hEc,gEc,iEc,jEc])} +function Unc(a){var b;return a.j==(qpd(),npd)&&(b=Vnc(a),Csb(b,Xod))} +function qhc(a,b){var c;c=b.a;Y0b(c,b.c.d);Z0b(c,b.d.d);Cjd(c.a,a.n)} +function _5b(a,b){var c;c=RD(cub(a.b,b),67);!c&&(c=new Yub);return c} +function $jc(a){Wjc();if(ZD(a.g,154)){return RD(a.g,154)}return null} +function gRc(a){a.a=null;a.e=null;aFb(a.b.c,0);aFb(a.f.c,0);a.c=null} +function Ovc(){Ovc=geb;Mvc=new Pvc(Kye,0);Nvc=new Pvc('TOP_LEFT',1)} +function sNc(){sNc=geb;rNc=new tNc('UPPER',0);qNc=new tNc('LOWER',1)} +function nWc(a,b){return cjd(new rjd(b.e.a+b.f.a/2,b.e.b+b.f.b/2),a)} +function wqc(a,b){return RD(Lvb(JDb(RD(Qc(a.k,b),15).Oc(),lqc)),113)} +function xqc(a,b){return RD(Lvb(KDb(RD(Qc(a.k,b),15).Oc(),lqc)),113)} +function cWc(){YVc();return cD(WC(H$,1),jwe,405,0,[UVc,VVc,WVc,XVc])} +function v_c(){s_c();return cD(WC(J_,1),jwe,353,0,[r_c,p_c,q_c,o_c])} +function n5c(){j5c();return cD(WC(M0,1),jwe,354,0,[i5c,g5c,h5c,f5c])} +function Tpd(){Qpd();return cD(WC(H3,1),jwe,386,0,[Opd,Ppd,Npd,Mpd])} +function Tnd(){Pnd();return cD(WC(z3,1),jwe,290,0,[Ond,Lnd,Mnd,Nnd])} +function _md(){Ymd();return cD(WC(u3,1),jwe,223,0,[Xmd,Vmd,Umd,Wmd])} +function Jrd(){Grd();return cD(WC(R3,1),jwe,320,0,[Frd,Crd,Erd,Drd])} +function wtd(){ttd();return cD(WC(n4,1),jwe,415,0,[qtd,rtd,ptd,std])} +function GId(a){EId();return Ujb(DId,a)?RD(Wjb(DId,a),341).Qg():null} +function Avd(a,b,c){return b<0?Rvd(a,c):RD(c,69).wk().Bk(a,a.hi(),b)} +function sEd(a,b,c){var d;d=uDd(c);Do(a.j,d,b);Zjb(a.k,b,c);return b} +function qEd(a,b,c){var d;d=uDd(c);Do(a.d,d,b);Zjb(a.e,b,c);return b} +function DGd(a){var b,c;b=(bvd(),c=new rzd,c);!!a&&pzd(b,a);return b} +function WHd(a){var b;b=a.aj(a.i);a.i>0&&hib(a.g,0,b,0,a.i);return b} +function Led(a,b){var c;for(c=a.j.c.length;c<b;c++){Rmb(a.j,a.Ng())}} +function $Ec(a,b,c,d){var e;e=d[b.g][c.g];return Kfb(UD(mQb(a.a,e)))} +function QRd(a,b){PRd();var c;c=RD(Wjb(ORd,a),57);return !c||c.fk(b)} +function rKd(a){if(a.p!=1)throw Adb(new cgb);return Ydb(a.f)<<24>>24} +function AKd(a){if(a.p!=1)throw Adb(new cgb);return Ydb(a.k)<<24>>24} +function GKd(a){if(a.p!=7)throw Adb(new cgb);return Ydb(a.k)<<16>>16} +function xKd(a){if(a.p!=7)throw Adb(new cgb);return Ydb(a.f)<<16>>16} +function Wib(a,b){if(b.e==0||a.e==0){return Oib}return Ljb(),Mjb(a,b)} +function Nd(a,b){return dE(b)===dE(a)?'(this Map)':b==null?vve:jeb(b)} +function MFb(a,b,c){return Jfb(UD(Wd(qtb(a.f,b))),UD(Wd(qtb(a.f,c))))} +function wkc(a,b,c){var d;d=RD(Wjb(a.g,c),60);Rmb(a.a.c,new Ptd(b,d))} +function Slc(a,b,c){a.i=0;a.e=0;if(b==c){return}Rlc(a,b,c);Qlc(a,b,c)} +function rTc(a,b,c,d,e){var f;f=mTc(e,c,d);Rmb(b,TSc(e,f));vTc(a,e,b)} +function Jrc(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} +function iUb(a,b){VTb.call(this);this.a=a;this.b=b;Rmb(this.a.b,this)} +function rTb(a){this.b=new Tsb;this.c=new Tsb;this.d=new Tsb;this.a=a} +function Dx(a,b){var c;c=new cib;a.Gd(c);c.a+='..';b.Hd(c);return c.a} +function Fsd(a,b){var c;c=b;while(c){Zid(a,c.i,c.j);c=vCd(c)}return a} +function pEd(a,b,c){var d;d=uDd(c);Zjb(a.b,d,b);Zjb(a.c,b,c);return b} +function Kr(a){var b;b=0;while(a.Ob()){a.Pb();b=Bdb(b,1)}return dz(b)} +function oke(a,b){nke();var c;c=RD(a,69).vk();K6d(c,b);return c.xl(b)} +function tC(d,a,b){if(b){var c=b.oe();d.a[a]=c(b)}else{delete d.a[a]}} +function tB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+Owe);mB(a,c)} +function KSd(a,b){return RD(b==null?Wd(qtb(a.f,null)):Ktb(a.i,b),288)} +function hOc(a,b){return a==(r3b(),p3b)&&b==p3b?4:a==p3b||b==p3b?8:32} +function cge(a,b,c){return dge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function jge(a,b,c){return kge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function Qge(a,b,c){return Rge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function jmb(a){if(a.b==a.c){return}a.a=$C(jJ,rve,1,8,5,1);a.b=0;a.c=0} +function Nsb(a){sFb(a.a<a.c.a.length);a.b=a.a;Lsb(a);return a.c.b[a.b]} +function tYd(a){if(!a.n){yYd(a);a.n=new h$d(a,o7,a);zYd(a)}return a.n} +function oFb(a){if(a<0){throw Adb(new Mgb('Negative array size: '+a))}} +function LB(d,a,b){if(b){var c=b.oe();b=c(b)}else{b=undefined}d.a[a]=b} +function ygc(a,b){sgc();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} +function l_d(a,b){gib();String.fromCharCode(10);return WGd(xYd(a.a),b)} +function q_d(a,b){gib();String.fromCharCode(10);return WGd(xYd(a.a),b)} +function ajb(a,b){Pib();cjb.call(this,a,1,cD(WC(kE,1),Pwe,28,15,[b]))} +function Kte(a,b){Vse();Wse.call(this,a);this.a=b;this.c=-1;this.b=-1} +function L3d(a,b,c,d){KKd.call(this,1,c,d);J3d(this);this.c=a;this.b=b} +function M3d(a,b,c,d){LKd.call(this,1,c,d);J3d(this);this.c=a;this.b=b} +function lle(a,b,c,d,e,f,g){NKd.call(this,b,d,e,f,g);this.c=a;this.a=c} +function j7d(a,b,c){this.e=a;this.a=jJ;this.b=pje(b);this.c=b;this.d=c} +function Xo(a){this.e=a;this.c=this.e.a;this.b=this.e.g;this.d=this.e.i} +function Qtb(a){this.d=a;this.b=this.d.a.entries();this.a=this.b.next()} +function N9d(a){this.c=a;this.a=RD(WVd(a),156);this.b=this.a.jk().wi()} +function gub(){Tsb.call(this);_tb(this);this.d.b=this.d;this.d.a=this.d} +function Pub(a,b,c,d){var e;e=new svb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} +function USd(a,b){var c;return c=b!=null?Xjb(a,b):Wd(qtb(a.f,b)),fE(c)} +function dTd(a,b){var c;return c=b!=null?Xjb(a,b):Wd(qtb(a.f,b)),fE(c)} +function zDb(a,b){var c;return b.b.Kb(LDb(a,b.c.Xe(),(c=new OEb(b),c)))} +function Gnb(a,b){var c;oFb(b);return c=a.slice(0,b),c.length=b,dD(c,a)} +function Rqb(a,b){var c;for(c=0;c<b;++c){bD(a,c,new brb(RD(a[c],44)))}} +function Tib(a,b){var c;for(c=a.d-1;c>=0&&a.a[c]===b[c];c--);return c<0} +function Xx(a){var b;if(a){return new Kub(a)}b=new Iub;_q(b,a);return b} +function nmc(a,b){var c,d;d=false;do{c=qmc(a,b);d=d|c}while(c);return d} +function Vz(a){a&&aA(($z(),Zz));--Nz;if(a){if(Pz!=-1){Xz(Pz);Pz=-1}}} +function Pwb(a){Hwb();Mwb(this,Ydb(Cdb(Tdb(a,24),Pxe)),Ydb(Cdb(a,Pxe)))} +function IHb(){IHb=geb;HHb=ss((DHb(),cD(WC(uN,1),jwe,436,0,[CHb,BHb])))} +function QHb(){QHb=geb;PHb=ss((LHb(),cD(WC(vN,1),jwe,435,0,[JHb,KHb])))} +function YUb(){YUb=geb;XUb=ss((TUb(),cD(WC(BP,1),jwe,432,0,[RUb,SUb])))} +function U8b(){U8b=geb;T8b=ss((P8b(),cD(WC(vS,1),jwe,517,0,[O8b,N8b])))} +function Huc(){Huc=geb;Guc=ss((Cuc(),cD(WC(fX,1),jwe,487,0,[Buc,Auc])))} +function duc(){duc=geb;cuc=ss(($tc(),cD(WC(cX,1),jwe,428,0,[Ytc,Ztc])))} +function otc(){otc=geb;ntc=ss((jtc(),cD(WC($W,1),jwe,431,0,[htc,itc])))} +function xEc(){xEc=geb;wEc=ss((sEc(),cD(WC(xX,1),jwe,430,0,[qEc,rEc])))} +function xNc(){xNc=geb;wNc=ss((sNc(),cD(WC(MY,1),jwe,531,0,[rNc,qNc])))} +function BQc(){BQc=geb;AQc=ss((wQc(),cD(WC(FZ,1),jwe,523,0,[vQc,uQc])))} +function JQc(){JQc=geb;IQc=ss((EQc(),cD(WC(GZ,1),jwe,522,0,[CQc,DQc])))} +function kTc(){kTc=geb;jTc=ss((fTc(),cD(WC(b$,1),jwe,528,0,[eTc,dTc])))} +function Tvc(){Tvc=geb;Svc=ss((Ovc(),cD(WC(lX,1),jwe,429,0,[Mvc,Nvc])))} +function iVc(){iVc=geb;hVc=ss((dVc(),cD(WC(w$,1),jwe,464,0,[bVc,cVc])))} +function c4c(){c4c=geb;b4c=ss((Y3c(),cD(WC(H0,1),jwe,434,0,[W3c,X3c])))} +function F_c(){F_c=geb;E_c=ss((A_c(),cD(WC(K_,1),jwe,433,0,[z_c,y_c])))} +function F2c(){F2c=geb;E2c=ss((x2c(),cD(WC(s0,1),jwe,500,0,[v2c,w2c])))} +function H8c(){H8c=geb;G8c=ss((z8c(),cD(WC(l1,1),jwe,490,0,[x8c,y8c])))} +function J9c(){J9c=geb;I9c=ss((B9c(),cD(WC(t1,1),jwe,491,0,[z9c,A9c])))} +function Rbd(){Rbd=geb;Qbd=ss((Mbd(),cD(WC(O1,1),jwe,438,0,[Lbd,Kbd])))} +function tdd(){tdd=geb;sdd=ss((ldd(),cD(WC(W1,1),jwe,437,0,[kdd,jdd])))} +function Eqd(){Eqd=geb;Dqd=ss((uqd(),cD(WC(M3,1),jwe,347,0,[sqd,tqd])))} +function Imd(){Cmd();return cD(WC(s3,1),jwe,88,0,[Amd,zmd,ymd,xmd,Bmd])} +function xpd(){qpd();return cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])} +function LSd(a,b,c){return RD(b==null?rtb(a.f,null,c):Ltb(a.i,b,c),288)} +function L6b(a){return (a.k==(r3b(),p3b)||a.k==m3b)&&nQb(a,(Ywc(),cwc))} +function bUb(a){return !!a.c&&!!a.d?kUb(a.c)+'->'+kUb(a.d):'e_'+kFb(a)} +function xgb(a,b){var c,d;uFb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.Cd(c)}} +function jEd(a,b){var c;c=new uC;qDd(c,'x',b.a);qDd(c,'y',b.b);oDd(a,c)} +function mEd(a,b){var c;c=new uC;qDd(c,'x',b.a);qDd(c,'y',b.b);oDd(a,c)} +function Gsd(a,b){var c;c=b;while(c){Zid(a,-c.i,-c.j);c=vCd(c)}return a} +function ZLc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} +function $mb(a,b,c){var d;d=(tFb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function uIc(a,b,c){a.a.c.length=0;yIc(a,b,c);a.a.c.length==0||rIc(a,b)} +function wo(a){a.i=0;Mnb(a.b,null);Mnb(a.c,null);a.a=null;a.e=null;++a.g} +function gBb(){gBb=geb;dBb=true;bBb=false;cBb=false;fBb=false;eBb=false} +function oBb(a){gBb();if(dBb){return}this.c=a;this.e=true;this.a=new bnb} +function kDb(a,b){this.c=0;this.b=b;txb.call(this,a,17493);this.a=this.c} +function S_b(a){P_b();A$b(this);this.a=new Yub;Q_b(this,a);Mub(this.a,a)} +function m_b(){Pmb(this);this.b=new rjd(oxe,oxe);this.a=new rjd(pxe,pxe)} +function z8c(){z8c=geb;x8c=new B8c(CBe,0);y8c=new B8c('TARGET_WIDTH',1)} +function yDb(a,b){return (MCb(a),QDb(new SDb(a,new hEb(b,a.a)))).Bd(wDb)} +function vXb(){sXb();return cD(WC(UP,1),jwe,367,0,[nXb,oXb,pXb,qXb,rXb])} +function Fnc(){Bnc();return cD(WC(TV,1),jwe,375,0,[xnc,znc,Anc,ync,wnc])} +function Vtc(){Ptc();return cD(WC(bX,1),jwe,348,0,[Ltc,Ktc,Ntc,Otc,Mtc])} +function PDc(){JDc();return cD(WC(uX,1),jwe,323,0,[IDc,FDc,GDc,EDc,HDc])} +function fxc(){cxc();return cD(WC(mX,1),jwe,171,0,[bxc,Zwc,$wc,_wc,axc])} +function k3c(){g3c();return cD(WC(x0,1),jwe,368,0,[e3c,b3c,f3c,c3c,d3c])} +function vad(){sad();return cD(WC(x1,1),jwe,373,0,[oad,nad,qad,pad,rad])} +function $bd(){Xbd();return cD(WC(P1,1),jwe,324,0,[Sbd,Tbd,Wbd,Ubd,Vbd])} +function _hd(){Yhd();return cD(WC(d3,1),jwe,170,0,[Whd,Vhd,Thd,Xhd,Uhd])} +function sod(){pod();return cD(WC(B3,1),jwe,256,0,[mod,ood,kod,lod,nod])} +function Tz(b){Qz();return function(){return Uz(b,this,arguments);var a}} +function W0b(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} +function Nfd(a,b){if(ZD(b,143)){return lhb(a.c,RD(b,143).c)}return false} +function yYd(a){if(!a.t){a.t=new w$d(a);VGd(new Cde(a),0,a.t)}return a.t} +function jNd(a){this.b=a;dMd.call(this,a);this.a=RD(Ywd(this.b.a,4),129)} +function sNd(a){this.b=a;yMd.call(this,a);this.a=RD(Ywd(this.b.a,4),129)} +function Q3d(a,b,c,d,e){OKd.call(this,b,d,e);J3d(this);this.c=a;this.b=c} +function V3d(a,b,c,d,e){KKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} +function Z3d(a,b,c,d,e){LKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} +function g4d(a,b,c,d,e){OKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} +function ugd(a,b){var c;c=RD(cub(a.d,b),23);return c?c:RD(cub(a.e,b),23)} +function Blb(a,b){var c,d;c=b.ld();d=a.Fe(c);return !!d&&Fvb(d.e,b.md())} +function me(a,b){var c;c=b.ld();return new gp(c,a.e.pc(c,RD(b.md(),16)))} +function ptb(a,b){var c;c=a.a.get(b);return c==null?$C(jJ,rve,1,0,5,1):c} +function khb(a){var b;b=a.length;return lhb(sxe.substr(sxe.length-b,b),a)} +function hs(a){if(gs(a)){a.c=a.a;return a.a.Pb()}else{throw Adb(new Dvb)}} +function $ib(a,b){if(b==0||a.e==0){return a}return b>0?tjb(a,b):qjb(a,-b)} +function Zib(a,b){if(b==0||a.e==0){return a}return b>0?qjb(a,b):tjb(a,-b)} +function Deb(a){Beb.call(this,a==null?vve:jeb(a),ZD(a,82)?RD(a,82):null)} +function Y5d(a){var b;if(!a.c){b=a.r;ZD(b,90)&&(a.c=RD(b,29))}return a.c} +function s0b(a){var b;b=new a1b;kQb(b,a);pQb(b,(yCc(),RAc),null);return b} +function lec(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(r3b(),m3b)&&c.k==m3b} +function fD(a){var b,c,d;b=a&dxe;c=a>>22&dxe;d=a<0?exe:0;return hD(b,c,d)} +function Ky(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];ICb(b)}} +function Tc(a,b){var c,d;c=RD(Yv(a.c,b),16);if(c){d=c.gc();c.$b();a.d-=d}} +function Fvd(a,b,c){var d;return d=a.Ih(b),d>=0?a.Lh(d,c,true):Qvd(a,b,c)} +function AXc(a,b,c){return Qfb(cjd(jWc(a),ajd(b.b)),cjd(jWc(a),ajd(c.b)))} +function BXc(a,b,c){return Qfb(cjd(jWc(a),ajd(b.e)),cjd(jWc(a),ajd(c.e)))} +function Kad(a,b){return $wnd.Math.min(bjd(b.a,a.d.d.c),bjd(b.b,a.d.d.c))} +function LHd(a,b){a._i(a.i+1);MHd(a,a.i,a.Zi(a.i,b));a.Mi(a.i++,b);a.Ni()} +function OHd(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.Oi(c,b);a.Ni()} +function yke(a,b,c){var d;d=new zke(a.a);Ld(d,a.a.a);rtb(d.f,b,c);a.a.a=d} +function mKb(a,b,c,d){var e;for(e=0;e<jKb;e++){dKb(a.a[e][b.g],c,d[b.g])}} +function lKb(a,b,c,d){var e;for(e=0;e<iKb;e++){eKb(a.a[b.g][e],c,d[b.g])}} +function Qc(a,b){var c;c=RD(a.c.xc(b),16);!c&&(c=a.ic(b));return a.pc(b,c)} +function vm(a){var b;b=(Qb(a),a?new dnb(a):cv(a.Kc()));Eob(b);return Pm(b)} +function dv(a){var b,c;Qb(a);b=Zu(a.length);c=new cnb(b);zob(c,a);return c} +function Hjb(a,b,c,d){var e;e=$C(kE,Pwe,28,b,15,1);Ijb(e,a,b,c,d);return e} +function Sb(a,b){if(a<0||a>b){throw Adb(new veb(Jb(a,b,'index')))}return a} +function Xmb(a,b){var c;c=(tFb(b,a.c.length),a.c[b]);$Eb(a.c,b,1);return c} +function jhb(a,b){var c,d;c=(uFb(a),a);d=(uFb(b),b);return c==d?0:c<d?-1:1} +function Orb(a){var b;b=a.e+a.f;if(isNaN(b)&&Rfb(a.d)){return a.d}return b} +function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} +function Gyb(a,b){!a.a?(a.a=new dib(a.d)):Zhb(a.a,a.b);Whb(a.a,b);return a} +function _jb(a,b){return bE(b)?b==null?stb(a.f,null):Mtb(a.i,b):stb(a.f,b)} +function nEb(a,b){pxb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} +function tEb(a,b){txb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} +function zEb(a,b){xxb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} +function M7d(a,b,c){t7d.call(this,c);this.b=a;this.c=b;this.d=(a8d(),$7d)} +function OKd(a,b,c){this.d=a;this.k=b?1:0;this.f=c?1:0;this.o=-1;this.p=0} +function l4b(a){this.c=a;this.a=new Anb(this.c.a);this.b=new Anb(this.c.b)} +function gUb(){this.e=new bnb;this.c=new bnb;this.d=new bnb;this.b=new bnb} +function DIb(){this.g=new GIb;this.b=new GIb;this.a=new bnb;this.k=new bnb} +function I_b(){this.a=new J$b;this.b=new N$b;this.d=new Z_b;this.e=new V_b} +function knc(a,b,c){this.a=a;this.c=b;this.d=c;Rmb(b.e,this);Rmb(c.b,this)} +function sIc(a,b,c){var d,e;d=0;for(e=0;e<b.length;e++){d+=a.tg(b[e],d,c)}} +function nMc(a,b){var c;c=tMc(a,b);a.b=new _Lc(c.c.length);return mMc(a,c)} +function pB(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);mB(a,c)} +function _Wc(a){var b;b=a.b;if(b.b==0){return null}return RD(ju(b,0),65).b} +function Src(a){if(a.a){if(a.e){return Src(a.e)}}else{return a}return null} +function mIc(a,b){if(a.p<b.p){return 1}else if(a.p>b.p){return -1}return 0} +function hXd(a){var b;if(!a.a){b=a.r;ZD(b,156)&&(a.a=RD(b,156))}return a.a} +function iOd(a,b,c){var d;++a.e;--a.f;d=RD(a.d[b].gd(c),136);return d.md()} +function fd(a){var b,c;b=a.ld();c=RD(a.md(),16);return gk(c.Nc(),new jh(b))} +function oae(a,b){if(Ujb(a.a,b)){_jb(a.a,b);return true}else{return false}} +function Ui(a,b,c){Pb(b,a.e.Rd().gc());Pb(c,a.c.Rd().gc());return a.a[b][c]} +function _Uc(a,b,c){this.a=a;this.b=b;this.c=c;Rmb(a.t,this);Rmb(b.i,this)} +function lg(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} +function YWc(){this.b=new Yub;this.a=new Yub;this.b=new Yub;this.a=new Yub} +function ree(){ree=geb;var a,b;pee=(jTd(),b=new k1d,b);qee=(a=new mXd,a)} +function UCb(a){var b;MCb(a);b=new $Cb(a,a.a.e,a.a.d|4);return new WCb(a,b)} +function ADb(a){var b;LCb(a);b=0;while(a.a.Bd(new MEb)){b=Bdb(b,1)}return b} +function zxb(a,b){uFb(b);if(a.c<a.d){a.Se(b,a.c++);return true}return false} +function cnb(a){Pmb(this);mFb(a>=0,'Initial capacity must not be negative')} +function rid(){rid=geb;qid=new jGd('org.eclipse.elk.labels.labelManager')} +function iec(){iec=geb;hec=new kGd('separateLayerConnections',(vec(),uec))} +function fTc(){fTc=geb;eTc=new gTc('REGULAR',0);dTc=new gTc('CRITICAL',1)} +function Mbd(){Mbd=geb;Lbd=new Nbd('FIXED',0);Kbd=new Nbd('CENTER_NODE',1)} +function jtc(){jtc=geb;htc=new ktc('QUADRATIC',0);itc=new ktc('SCANLINE',1)} +function Atc(){Atc=geb;ztc=ss((stc(),cD(WC(_W,1),jwe,322,0,[qtc,ptc,rtc])))} +function Jtc(){Jtc=geb;Itc=ss((Etc(),cD(WC(aX,1),jwe,351,0,[Btc,Dtc,Ctc])))} +function muc(){muc=geb;luc=ss((huc(),cD(WC(dX,1),jwe,459,0,[fuc,euc,guc])))} +function ooc(){ooc=geb;noc=ss((joc(),cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc])))} +function Lvc(){Lvc=geb;Kvc=ss((Gvc(),cD(WC(kX,1),jwe,311,0,[Evc,Fvc,Dvc])))} +function Cvc(){Cvc=geb;Bvc=ss((xvc(),cD(WC(jX,1),jwe,298,0,[vvc,wvc,uvc])))} +function rDc(){rDc=geb;qDc=ss((lDc(),cD(WC(sX,1),jwe,390,0,[iDc,jDc,kDc])))} +function PEc(){PEc=geb;OEc=ss((KEc(),cD(WC(zX,1),jwe,387,0,[HEc,IEc,JEc])))} +function YEc(){YEc=geb;XEc=ss((TEc(),cD(WC(AX,1),jwe,349,0,[SEc,QEc,REc])))} +function GEc(){GEc=geb;FEc=ss((BEc(),cD(WC(yX,1),jwe,462,0,[AEc,yEc,zEc])))} +function zFc(){zFc=geb;yFc=ss((uFc(),cD(WC(DX,1),jwe,352,0,[tFc,rFc,sFc])))} +function qFc(){qFc=geb;pFc=ss((lFc(),cD(WC(CX,1),jwe,350,0,[iFc,jFc,kFc])))} +function IFc(){IFc=geb;HFc=ss((DFc(),cD(WC(EX,1),jwe,388,0,[BFc,CFc,AFc])))} +function QZc(){QZc=geb;PZc=ss((LZc(),cD(WC(F_,1),jwe,392,0,[KZc,JZc,IZc])))} +function m4c(){m4c=geb;l4c=ss((g4c(),cD(WC(I0,1),jwe,393,0,[d4c,e4c,f4c])))} +function z5c(){z5c=geb;y5c=ss((t5c(),cD(WC(N0,1),jwe,299,0,[r5c,s5c,q5c])))} +function k6c(){k6c=geb;j6c=ss((f6c(),cD(WC(V0,1),jwe,445,0,[c6c,d6c,e6c])))} +function F6c(){F6c=geb;E6c=ss((z6c(),cD(WC(Z0,1),jwe,455,0,[w6c,y6c,x6c])))} +function e7c(){e7c=geb;d7c=ss((_6c(),cD(WC(a1,1),jwe,394,0,[Z6c,$6c,Y6c])))} +function j9c(){j9c=geb;i9c=ss((b9c(),cD(WC(o1,1),jwe,439,0,[$8c,a9c,_8c])))} +function WKc(){WKc=geb;VKc=ss((RKc(),cD(WC(nY,1),jwe,463,0,[OKc,PKc,QKc])))} +function JKb(){JKb=geb;IKb=ss((EKb(),cD(WC(MN,1),jwe,470,0,[CKb,BKb,DKb])))} +function cKb(){cKb=geb;bKb=ss((ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])))} +function ALb(){ALb=geb;zLb=ss((vLb(),cD(WC(TN,1),jwe,471,0,[uLb,tLb,sLb])))} +function CBb(){CBb=geb;BBb=ss((xBb(),cD(WC(QL,1),jwe,108,0,[uBb,vBb,wBb])))} +function FWb(){FWb=geb;EWb=ss((AWb(),cD(WC(JP,1),jwe,391,0,[yWb,xWb,zWb])))} +function Knd(){Knd=geb;Jnd=ss((Fnd(),cD(WC(y3,1),jwe,346,0,[Dnd,Cnd,End])))} +function lbd(){lbd=geb;kbd=ss((gbd(),cD(WC(I1,1),jwe,444,0,[dbd,ebd,fbd])))} +function Tmd(){Tmd=geb;Smd=ss((Omd(),cD(WC(t3,1),jwe,278,0,[Lmd,Mmd,Nmd])))} +function rqd(){rqd=geb;qqd=ss((mqd(),cD(WC(J3,1),jwe,280,0,[kqd,jqd,lqd])))} +function Hxd(a,b){return !a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),QNd(a.o,b)} +function HMb(a,b){var c;if(a.C){c=RD(Vrb(a.b,b),127).n;c.d=a.C.d;c.a=a.C.a}} +function F8b(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} +function cOd(a){!a.g&&(a.g=new hQd);!a.g.b&&(a.g.b=new ePd(a));return a.g.b} +function dOd(a){!a.g&&(a.g=new hQd);!a.g.c&&(a.g.c=new IPd(a));return a.g.c} +function lOd(a){!a.g&&(a.g=new hQd);!a.g.d&&(a.g.d=new kPd(a));return a.g.d} +function YNd(a){!a.g&&(a.g=new hQd);!a.g.a&&(a.g.a=new qPd(a));return a.g.a} +function B9d(a,b,c,d){!!c&&(d=c.Rh(b,BYd(c.Dh(),a.c.uk()),null,d));return d} +function C9d(a,b,c,d){!!c&&(d=c.Th(b,BYd(c.Dh(),a.c.uk()),null,d));return d} +function Cjb(a,b,c,d){var e;e=$C(kE,Pwe,28,b+1,15,1);Djb(e,a,b,c,d);return e} +function $C(a,b,c,d,e,f){var g;g=_C(e,d);e!=10&&cD(WC(a,f),b,c,e,g);return g} +function $fe(a,b,c){var d,e;e=new Phe(b,a);for(d=0;d<c;++d){Dhe(e)}return e} +function $Gd(a,b,c){var d,e;if(c!=null){for(d=0;d<b;++d){e=c[d];a.Qi(d,e)}}} +function Yyb(a,b){var c;c=new Gzb;c.c=true;c.d=b.md();return Zyb(a,b.ld(),c)} +function rB(a,b){var c;c=a.q.getHours()+(b/3600|0);a.q.setSeconds(b);mB(a,c)} +function Ct(a,b){var c,d;c=b;d=Hob(cv(new Nu(a,c)));Ar(new Nu(a,c));return d} +function Kdc(a,b){b.Ug('Label management',1);fE(mQb(a,(rid(),qid)));b.Vg()} +function wge(a,b,c,d){vge(a,b,c,kge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0))} +function BQb(a,b,c){RD(a.b,68);RD(a.b,68);RD(a.b,68);Umb(a.a,new KQb(c,b,a))} +function AFb(a,b,c){if(a<0||b>c||b<a){throw Adb(new eib(_xe+a+bye+b+Qxe+c))}} +function NCb(a){if(!a){this.c=null;this.b=new bnb}else{this.c=a;this.b=null}} +function Fzb(a,b){xlb.call(this,a,b);this.a=$C(vL,Zve,447,2,0,1);this.b=true} +function hub(a){ckb.call(this,a,0);_tb(this);this.d.b=this.d;this.d.a=this.d} +function wtb(a){this.e=a;this.b=this.e.a.entries();this.a=$C(jJ,rve,1,0,5,1)} +function _Fc(){_Fc=geb;$Fc=nfd(pfd(new ufd,(sXb(),nXb),(hcc(),Ebc)),rXb,$bc)} +function xuc(){tuc();return cD(WC(eX,1),jwe,283,0,[ouc,nuc,quc,puc,suc,ruc])} +function Ruc(){Ouc();return cD(WC(gX,1),jwe,281,0,[Luc,Kuc,Nuc,Juc,Muc,Iuc])} +function bvc(){$uc();return cD(WC(hX,1),jwe,282,0,[Yuc,Vuc,Zuc,Xuc,Wuc,Uuc])} +function etc(){btc();return cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])} +function u3b(){r3b();return cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])} +function Uod(){Pod();return cD(WC(D3,1),jwe,279,0,[Nod,Lod,Mod,Kod,Jod,Ood])} +function God(){Bod();return cD(WC(C3,1),jwe,101,0,[Aod,zod,yod,vod,xod,wod])} +function lnd(){ind();return cD(WC(v3,1),jwe,321,0,[gnd,end,hnd,cnd,fnd,dnd])} +function Ujd(){Rjd();return cD(WC(n3,1),jwe,255,0,[Ljd,Ojd,Pjd,Qjd,Mjd,Njd])} +function xkd(){ukd();return cD(WC(q3,1),jwe,297,0,[tkd,skd,rkd,pkd,okd,qkd])} +function K3d(a){var b;if(!a.a&&a.b!=-1){b=a.c.Dh();a.a=vYd(b,a.b)}return a.a} +function WGd(a,b){if(a.Si()&&a.Hc(b)){return false}else{a.Hi(b);return true}} +function RKb(a,b){Ivb(b,'Horizontal alignment cannot be null');a.b=b;return a} +function ite(a,b,c){Vse();var d;d=hte(a,b);c&&!!d&&kte(a)&&(d=null);return d} +function ZKc(a,b,c){var d;d=a.b[c.c.p][c.p];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} +function Umc(a,b,c){var d;a.d[b.g]=c;d=a.g.c;d[b.g]=$wnd.Math.max(d[b.g],c+1)} +function bjd(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} +function v$b(a,b){var c,d;for(d=b.Kc();d.Ob();){c=RD(d.Pb(),36);u$b(a,c,0,0)}} +function x$b(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);w$b(d,b,c)}} +function G0c(a){var b,c;for(c=Sub(a.a,0);c.b!=c.d.c;){b=RD(evb(c),65);H0c(b)}} +function nnc(a,b){bub(a.e,b)||dub(a.e,b,new tnc(b));return RD(cub(a.e,b),113)} +function tBb(a,b,c,d){uFb(a);uFb(b);uFb(c);uFb(d);return new DBb(a,b,new NAb)} +function DVd(a,b,c,d){this.ak();this.a=b;this.b=a;this.c=new wje(this,b,c,d)} +function O3d(a,b,c,d,e,f){MKd.call(this,b,d,e,f);J3d(this);this.c=a;this.b=c} +function c4d(a,b,c,d,e,f){MKd.call(this,b,d,e,f);J3d(this);this.c=a;this.a=c} +function Q9c(a,b){var c,d,e;e=a.r;d=a.d;c=S9c(a,b,true);return c.b!=e||c.a!=d} +function Vee(a,b,c){var d,e;e=(d=N5d(a.b,b),d);return !e?null:tfe(Pee(a,e),c)} +function _Dd(a,b,c){var d,e,f;d=qC(a,c);e=null;!!d&&(e=ADd(d));f=e;tEd(b,c,f)} +function aEd(a,b,c){var d,e,f;d=qC(a,c);e=null;!!d&&(e=ADd(d));f=e;tEd(b,c,f)} +function Evd(a,b){var c;return c=a.Ih(b),c>=0?a.Lh(c,true,true):Qvd(a,b,true)} +function gMc(a,b,c){var d;d=qMc(a,b,c);a.b=new _Lc(d.c.length);return iMc(a,d)} +function Pue(a){if(a.b<=0)throw Adb(new Dvb);--a.b;a.a-=a.c.c;return sgb(a.a)} +function PGd(a){var b;if(!a.a){throw Adb(new Evb)}b=a.a;a.a=vCd(a.a);return b} +function WDb(a){while(!a.a){if(!yEb(a.c,new $Db(a))){return false}}return true} +function Nr(a){var b;Qb(a);if(ZD(a,204)){b=RD(a,204);return b}return new Or(a)} +function Cfd(a){Afd();RD(a.of((umd(),Lld)),181).Fc((Pod(),Mod));a.qf(Kld,null)} +function Afd(){Afd=geb;xfd=new Gfd;zfd=new Ifd;yfd=yn((umd(),Kld),xfd,pld,zfd)} +function Y3c(){Y3c=geb;W3c=new $3c('LEAF_NUMBER',0);X3c=new $3c('NODE_SIZE',1)} +function YLc(a){a.a=$C(kE,Pwe,28,a.b+1,15,1);a.c=$C(kE,Pwe,28,a.b,15,1);a.d=0} +function OZb(a,b){if(a.a.Ne(b.d,a.b)>0){Rmb(a.c,new fZb(b.c,b.d,a.d));a.b=b.d}} +function NHd(a,b){if(a.g==null||b>=a.i)throw Adb(new yNd(b,a.i));return a.g[b]} +function P_d(a,b,c){gHd(a,c);if(c!=null&&!a.fk(c)){throw Adb(new yeb)}return c} +function dD(a,b){XC(b)!=10&&cD(rb(b),b.Sm,b.__elementTypeId$,XC(b),a);return a} +function Wnb(a,b,c,d){var e;d=(urb(),!d?rrb:d);e=a.slice(b,c);Xnb(e,a,b,c,-b,d)} +function zvd(a,b,c,d,e){return b<0?Qvd(a,c,d):RD(c,69).wk().yk(a,a.hi(),b,d,e)} +function J9b(a,b){return Qfb(Kfb(UD(mQb(a,(Ywc(),Jwc)))),Kfb(UD(mQb(b,Jwc))))} +function qAb(){qAb=geb;pAb=ss((cAb(),cD(WC(AL,1),jwe,303,0,[$zb,_zb,aAb,bAb])))} +function cAb(){cAb=geb;$zb=new dAb('All',0);_zb=new iAb;aAb=new kAb;bAb=new nAb} +function EKb(){EKb=geb;CKb=new FKb(Nye,0);BKb=new FKb(Kye,1);DKb=new FKb(Oye,2)} +function Zme(){Zme=geb;qAd();Wme=oxe;Vme=pxe;Yme=new Tfb(oxe);Xme=new Tfb(pxe)} +function rOb(){rOb=geb;qOb=ss((mOb(),cD(WC(hO,1),jwe,417,0,[lOb,iOb,jOb,kOb])))} +function NRb(){NRb=geb;MRb=ss((IRb(),cD(WC(WO,1),jwe,406,0,[FRb,ERb,GRb,HRb])))} +function NPb(){NPb=geb;MPb=ss((IPb(),cD(WC(DO,1),jwe,332,0,[FPb,EPb,GPb,HPb])))} +function Z$b(){Z$b=geb;Y$b=ss((U$b(),cD(WC(CQ,1),jwe,389,0,[T$b,R$b,Q$b,S$b])))} +function wZb(){wZb=geb;vZb=ss((nZb(),cD(WC(lQ,1),jwe,416,0,[jZb,mZb,kZb,lZb])))} +function jnc(){jnc=geb;inc=ss((enc(),cD(WC(LV,1),jwe,421,0,[anc,bnc,cnc,dnc])))} +function Bec(){Bec=geb;Aec=ss((vec(),cD(WC(qT,1),jwe,371,0,[uec,sec,tec,rec])))} +function DDc(){DDc=geb;CDc=ss((wDc(),cD(WC(tX,1),jwe,203,0,[uDc,vDc,tDc,sDc])))} +function pEc(){pEc=geb;oEc=ss((kEc(),cD(WC(wX,1),jwe,284,0,[hEc,gEc,iEc,jEc])))} +function Cuc(){Cuc=geb;Buc=new Duc(LAe,0);Auc=new Duc('IMPROVE_STRAIGHTNESS',1)} +function _i(a,b){var c,d;d=b/a.c.Rd().gc()|0;c=b%a.c.Rd().gc();return Ui(a,d,c)} +function iZd(a){var b;if(a.nl()){for(b=a.i-1;b>=0;--b){QHd(a,b)}}return WHd(a)} +function Nyb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function Oyb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[1]){c=b}return c} +function Hae(a){if(ZD(a,180)){return ''+RD(a,180).a}return a==null?null:jeb(a)} +function Iae(a){if(ZD(a,180)){return ''+RD(a,180).a}return a==null?null:jeb(a)} +function eGb(a,b){if(b.a){throw Adb(new yz(jye))}Ysb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function hEb(a,b){xxb.call(this,b.zd(),b.yd()&-16449);uFb(a);this.a=a;this.c=b} +function zXc(a,b){return new gud(b,Zid(ajd(b.e),b.f.a+a,b.f.b+a),(Geb(),false))} +function EMc(a,b){dMc();return Rmb(a,new Ptd(b,sgb(b.e.c.length+b.g.c.length)))} +function GMc(a,b){dMc();return Rmb(a,new Ptd(b,sgb(b.e.c.length+b.g.c.length)))} +function p5c(){p5c=geb;o5c=ss((j5c(),cD(WC(M0,1),jwe,354,0,[i5c,g5c,h5c,f5c])))} +function x_c(){x_c=geb;w_c=ss((s_c(),cD(WC(J_,1),jwe,353,0,[r_c,p_c,q_c,o_c])))} +function eWc(){eWc=geb;dWc=ss((YVc(),cD(WC(H$,1),jwe,405,0,[UVc,VVc,WVc,XVc])))} +function bnd(){bnd=geb;and=ss((Ymd(),cD(WC(u3,1),jwe,223,0,[Xmd,Vmd,Umd,Wmd])))} +function Vnd(){Vnd=geb;Und=ss((Pnd(),cD(WC(z3,1),jwe,290,0,[Ond,Lnd,Mnd,Nnd])))} +function Vpd(){Vpd=geb;Upd=ss((Qpd(),cD(WC(H3,1),jwe,386,0,[Opd,Ppd,Npd,Mpd])))} +function Lrd(){Lrd=geb;Krd=ss((Grd(),cD(WC(R3,1),jwe,320,0,[Frd,Crd,Erd,Drd])))} +function ytd(){ytd=geb;xtd=ss((ttd(),cD(WC(n4,1),jwe,415,0,[qtd,rtd,ptd,std])))} +function b9c(){b9c=geb;$8c=new d9c(iFe,0);a9c=new d9c(mEe,1);_8c=new d9c(LAe,2)} +function sBb(a,b,c,d,e){uFb(a);uFb(b);uFb(c);uFb(d);uFb(e);return new DBb(a,b,d)} +function fub(a,b){var c;c=RD(_jb(a.e,b),400);if(c){rub(c);return c.e}return null} +function Ymb(a,b){var c;c=Wmb(a,b,0);if(c==-1){return false}Xmb(a,c);return true} +function LDb(a,b,c){var d;LCb(a);d=new IEb;d.a=b;a.a.Nb(new QEb(d,c));return d.a} +function VCb(a){var b;LCb(a);b=$C(iE,vxe,28,0,15,1);ixb(a.a,new dDb(b));return b} +function yc(a){var b;if(!xc(a)){throw Adb(new Dvb)}a.e=1;b=a.d;a.d=null;return b} +function Odb(a){var b;if(Kdb(a)){b=0-a;if(!isNaN(b)){return b}}return Edb(xD(a))} +function Wmb(a,b,c){for(;c<a.c.length;++c){if(Fvb(b,a.c[c])){return c}}return -1} +function Gmc(a){var b,c;c=RD(Vmb(a.j,0),12);b=RD(mQb(c,(Ywc(),Awc)),12);return b} +function Nu(a,b){var c;this.f=a;this.b=b;c=RD(Wjb(a.b,b),260);this.c=!c?null:c.b} +function Ckc(){lkc();this.b=new Tsb;this.f=new Tsb;this.g=new Tsb;this.e=new Tsb} +function RSd(a){ez(this);this.g=!a?null:lz(a,a.ie());this.f=a;gz(this);this.je()} +function pKd(a){var b;b=a.jj();b!=null&&a.d!=-1&&RD(b,94).xh(a);!!a.i&&a.i.oj()} +function asc(a){var b;for(b=a.p+1;b<a.c.a.c.length;++b){--RD(Vmb(a.c.a,b),10).p}} +function ukb(a){yFb(!!a.c);rFb(a.f.g,a.d);a.c.Qb();a.c=null;a.b=skb(a);a.d=a.f.g} +function o4d(a){if(!a.b){a.b=new s5d(a,o7,a);!a.a&&(a.a=new F4d(a,a))}return a.b} +function Pee(a,b){var c,d;c=RD(b,690);d=c.xi();!d&&c.Ai(d=new wfe(a,b));return d} +function Qee(a,b){var c,d;c=RD(b,692);d=c.$k();!d&&c.cl(d=new Jfe(a,b));return d} +function _jc(a,b){Wjc();var c,d;c=$jc(a);d=$jc(b);return !!c&&!!d&&!Aob(c.k,d.k)} +function WFb(a,b){return Fvb(b,Vmb(a.f,0))||Fvb(b,Vmb(a.f,1))||Fvb(b,Vmb(a.f,2))} +function Med(a,b){if(b<0){throw Adb(new veb(zGe+b))}Led(a,b+1);return Vmb(a.j,b)} +function Ob(a,b,c,d){if(!a){throw Adb(new agb(hc(b,cD(WC(jJ,1),rve,1,5,[c,d]))))}} +function P3d(a,b,c,d,e,f,g){NKd.call(this,b,d,e,f,g);J3d(this);this.c=a;this.b=c} +function UA(a,b,c){var d,e;d=10;for(e=0;e<c-1;e++){b<d&&(a.a+='0',a);d*=10}a.a+=b} +function Ahb(a){var b,c;c=a.length;b=$C(hE,zwe,28,c,15,1);nhb(a,0,c,b,0);return b} +function $eb(a){Zeb();var b,c;b=a+128;c=Yeb[b];!c&&(c=Yeb[b]=new Seb(a));return c} +function Cub(a){rFb(a.d.a.e.g,a.b);sFb(a.c!=a.d.a.d);a.a=a.c;a.c=a.c.a;return a.a} +function mDc(a){switch(a.g){case 0:return lve;case 1:return -1;default:return 0;}} +function ED(a){if(uD(a,(MD(),LD))<0){return -qD(xD(a))}return a.l+a.m*gxe+a.h*hxe} +function etd(a){(!this.q?(yob(),yob(),wob):this.q).Ac(!a.q?(yob(),yob(),wob):a.q)} +function Eud(a,b){Cod(RD(RD(a.f,27).of((umd(),Hld)),101))&&lQd(wCd(RD(a.f,27)),b)} +function Gvd(a,b){var c;c=BYd(a.d,b);return c>=0?Dvd(a,c,true,true):Qvd(a,b,true)} +function Vwd(a){var b;b=SD(Ywd(a,32));if(b==null){Wwd(a);b=SD(Ywd(a,32))}return b} +function Yvd(a){var b;if(!a.Oh()){b=AYd(a.Dh())-a.ji();a.$h().Mk(b)}return a.zh()} +function zQb(a,b){yQb=new kRb;wQb=b;xQb=a;RD(xQb.b,68);BQb(xQb,yQb,null);AQb(xQb)} +function AWb(){AWb=geb;yWb=new BWb('XY',0);xWb=new BWb('X',1);zWb=new BWb('Y',2)} +function vLb(){vLb=geb;uLb=new wLb('TOP',0);tLb=new wLb(Kye,1);sLb=new wLb(Qye,2)} +function Gvc(){Gvc=geb;Evc=new Hvc(LAe,0);Fvc=new Hvc('TOP',1);Dvc=new Hvc(Qye,2)} +function sEc(){sEc=geb;qEc=new tEc('INPUT_ORDER',0);rEc=new tEc('PORT_DEGREE',1)} +function MD(){MD=geb;ID=hD(dxe,dxe,524287);JD=hD(0,0,fxe);KD=fD(1);fD(2);LD=fD(0)} +function wWd(a){var b;if(a.d!=a.r){b=WVd(a);a.e=!!b&&b.lk()==aKe;a.d=b}return a.e} +function UHd(a,b,c){var d;d=a.g[b];MHd(a,b,a.Zi(b,c));a.Ri(b,c,d);a.Ni();return d} +function dHd(a,b){var c;c=a.dd(b);if(c>=0){a.gd(c);return true}else{return false}} +function xr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} +function cub(a,b){var c;c=RD(Wjb(a.e,b),400);if(c){eub(a,c);return c.e}return null} +function iB(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function JB(d,a){var b=d.a[a];var c=(HC(),GC)[typeof b];return c?c(b):NC(typeof b)} +function EDb(a,b){var c,d;MCb(a);d=new zEb(b,a.a);c=new YDb(d);return new SDb(a,c)} +function mwb(a){var b;b=a.b.c.length==0?null:Vmb(a.b,0);b!=null&&owb(a,0);return b} +function ukc(a,b){var c,d,e;e=b.c.i;c=RD(Wjb(a.f,e),60);d=c.d.c-c.e.c;Bjd(b.a,d,0)} +function XLc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c<a.a.length){++a.a[c];c+=c&-c}} +function Ute(a,b,c,d){Vse();Wse.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} +function KA(a,b){while(b[0]<a.length&&qhb(' \t\r\n',Fhb(ihb(a,b[0])))>=0){++b[0]}} +function eEd(a,b){Dyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function fEd(a,b){Eyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function gEd(a,b){Cyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function hEd(a,b){Ayd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function oWc(a,b,c){return cjd(new rjd(c.e.a+c.f.a/2,c.e.b+c.f.b/2),a)==(uFb(b),b)} +function qge(a,b){return ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a)} +function sge(a,b){return ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a)} +function XC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function Bhb(a,b){return b==(wvb(),wvb(),vvb)?a.toLocaleLowerCase():a.toLowerCase()} +function Mu(a){if(!a.e){throw Adb(new Dvb)}a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function Lu(a){if(!a.c){throw Adb(new Dvb)}a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function Lsb(a){var b;++a.a;for(b=a.c.a.length;a.a<b;++a.a){if(a.c.b[a.a]){return}}} +function _z(a){var b,c;if(a.a){c=null;do{b=a.a;a.a=null;c=dA(b,c)}while(a.a);a.a=c}} +function aA(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=dA(b,c)}while(a.b);a.b=c}} +function eve(a,b){var c;c=0;while(a.e!=a.i.gc()){oFd(b,bMd(a),sgb(c));c!=lve&&++c}} +function Llc(a,b){var c;c=$y(a.e.c,b.e.c);if(c==0){return Qfb(a.e.d,b.e.d)}return c} +function hdc(a,b){var c,d;d=b.c;for(c=d+1;c<=b.f;c++){a.a[c]>a.a[d]&&(d=c)}return d} +function Krc(a){var b;b=RD(mQb(a,(Ywc(),Wvc)),313);if(b){return b.a==a}return false} +function Lrc(a){var b;b=RD(mQb(a,(Ywc(),Wvc)),313);if(b){return b.i==a}return false} +function xXb(){xXb=geb;wXb=ss((sXb(),cD(WC(UP,1),jwe,367,0,[nXb,oXb,pXb,qXb,rXb])))} +function Hnc(){Hnc=geb;Gnc=ss((Bnc(),cD(WC(TV,1),jwe,375,0,[xnc,znc,Anc,ync,wnc])))} +function Xtc(){Xtc=geb;Wtc=ss((Ptc(),cD(WC(bX,1),jwe,348,0,[Ltc,Ktc,Ntc,Otc,Mtc])))} +function RDc(){RDc=geb;QDc=ss((JDc(),cD(WC(uX,1),jwe,323,0,[IDc,FDc,GDc,EDc,HDc])))} +function hxc(){hxc=geb;gxc=ss((cxc(),cD(WC(mX,1),jwe,171,0,[bxc,Zwc,$wc,_wc,axc])))} +function m3c(){m3c=geb;l3c=ss((g3c(),cD(WC(x0,1),jwe,368,0,[e3c,b3c,f3c,c3c,d3c])))} +function xad(){xad=geb;wad=ss((sad(),cD(WC(x1,1),jwe,373,0,[oad,nad,qad,pad,rad])))} +function acd(){acd=geb;_bd=ss((Xbd(),cD(WC(P1,1),jwe,324,0,[Sbd,Tbd,Wbd,Ubd,Vbd])))} +function Kmd(){Kmd=geb;Jmd=ss((Cmd(),cD(WC(s3,1),jwe,88,0,[Amd,zmd,ymd,xmd,Bmd])))} +function bid(){bid=geb;aid=ss((Yhd(),cD(WC(d3,1),jwe,170,0,[Whd,Vhd,Thd,Xhd,Uhd])))} +function uod(){uod=geb;tod=ss((pod(),cD(WC(B3,1),jwe,256,0,[mod,ood,kod,lod,nod])))} +function zpd(){zpd=geb;ypd=ss((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])))} +function LHb(){LHb=geb;JHb=new MHb('BY_SIZE',0);KHb=new MHb('BY_SIZE_AND_SHAPE',1)} +function TUb(){TUb=geb;RUb=new UUb('EADES',0);SUb=new UUb('FRUCHTERMAN_REINGOLD',1)} +function $tc(){$tc=geb;Ytc=new _tc('READING_DIRECTION',0);Ztc=new _tc('ROTATION',1)} +function CZb(){CZb=geb;zZb=new ZZb;AZb=new b$b;xZb=new f$b;yZb=new j$b;BZb=new n$b} +function dGb(a){this.b=new bnb;this.a=new bnb;this.c=new bnb;this.d=new bnb;this.e=a} +function XZb(a){this.g=a;this.f=new bnb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} +function UKb(a,b,c){RJb.call(this);KKb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} +function d6b(a,b,c){var d,e;for(e=new Anb(c);e.a<e.c.c.length;){d=ynb(e);c6b(a,b,d)}} +function sC(a,b,c){var d;if(b==null){throw Adb(new Ngb)}d=qC(a,b);tC(a,b,c);return d} +function ked(a,b){var c;c=RD(Wjb(a.a,b),137);if(!c){c=new qQb;Zjb(a.a,b,c)}return c} +function vYd(a,b){var c;c=(a.i==null&&rYd(a),a.i);return b>=0&&b<c.length?c[b]:null} +function Gqd(a,b){var c;c=b>0?b-1:b;return Kqd(Lqd(Mqd(Nqd(new Oqd,c),a.n),a.j),a.k)} +function nBd(a){var b,c;c=(b=new q4d,b);WGd((!a.q&&(a.q=new C5d(s7,a,11,10)),a.q),c)} +function ofb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(lfb(a),a.o)} +function dz(a){if(Ddb(a,lve)>0){return lve}if(Ddb(a,qwe)<0){return qwe}return Ydb(a)} +function Sv(a){if(a<3){dk(a,fwe);return a+1}if(a<hwe){return eE(a/0.75+1)}return lve} +function Rwb(a,b){uFb(b);Qwb(a);if(a.d.Ob()){b.Cd(a.d.Pb());return true}return false} +function ke(a,b){var c,d;c=RD(Xv(a.d,b),16);if(!c){return null}d=b;return a.e.pc(d,c)} +function Ufe(a,b,c,d){var e;a.j=-1;oLd(a,gge(a,b,c),(nke(),e=RD(b,69).vk(),e.xl(d)))} +function Z_c(a,b){R_c();return -hgb(RD(mQb(a,(h_c(),W$c)),17).a,RD(mQb(b,W$c),17).a)} +function xo(a,b){return !!Ho(a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15))))} +function dGd(){aGd();return cD(WC(T5,1),jwe,245,0,[_Fd,YFd,ZFd,XFd,$Fd,VFd,UFd,WFd])} +function nid(){kid();return cD(WC(e3,1),jwe,285,0,[jid,cid,gid,iid,did,eid,fid,hid])} +function hpc(){epc();return cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc])} +function Kcc(a){var b;b=Kfb(UD(mQb(a,(yCc(),FAc))));if(b<0){b=0;pQb(a,FAc,b)}return b} +function Odc(a,b){var c,d;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),72);pQb(c,(Ywc(),swc),b)}} +function Oic(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);Iic(c,d,1);Rmb(b,new Xic(c,d))} +function lRc(a,b,c){var d;d=a.a.e[RD(b.a,10).p]-a.a.e[RD(c.a,10).p];return eE(Lgb(d))} +function PDb(a,b){var c;MCb(a);c=new cEb(a,a.a.zd(),a.a.yd()|4,b);return new SDb(a,c)} +function gvb(a){var b;yFb(!!a.c);b=a.c.a;Wub(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} +function iqc(a){a.a>=-0.01&&a.a<=Tye&&(a.a=0);a.b>=-0.01&&a.b<=Tye&&(a.b=0);return a} +function Hid(a){tid();var b,c;c=KEe;for(b=0;b<a.length;b++){a[b]>c&&(c=a[b])}return c} +function Zvd(a,b){var c;c=wYd(a.Dh(),b);if(!c){throw Adb(new agb(KHe+b+NHe))}return c} +function NGd(a,b){var c;c=a;while(vCd(c)){c=vCd(c);if(c==b){return true}}return false} +function ix(a,b){var c,d,e;d=b.a.ld();c=RD(b.a.md(),16).gc();for(e=0;e<c;e++){a.Cd(d)}} +function Umb(a,b){var c,d,e,f;uFb(b);for(d=a.c,e=0,f=d.length;e<f;++e){c=d[e];b.Cd(c)}} +function q0b(a,b,c,d,e,f){var g;g=s0b(d);Y0b(g,e);Z0b(g,f);Rc(a.a,d,new J0b(g,b,c.f))} +function P8c(a,b){Ixd(a,(X6c(),T6c),b.f);Ixd(a,Q6c,b.e);Ixd(a,S6c,b.d);Ixd(a,P6c,b.c)} +function grc(a,b){this.a=new Tsb;this.e=new Tsb;this.b=(lDc(),kDc);this.c=a;this.b=b} +function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(zs(),ys)} +function Wub(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} +function Esb(a,b){if(!!b&&a.b[b.g]==b){bD(a.b,b.g,null);--a.c;return true}return false} +function jxb(a,b){if(0>a||a>b){throw Adb(new xeb('fromIndex: 0, toIndex: '+a+Qxe+b))}} +function ZHd(a){if(a<0){throw Adb(new agb('Illegal Capacity: '+a))}this.g=this.aj(a)} +function _y(a,b){Zy();bz(pwe);return $wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)} +function xJc(a,b){var c,d,e,f;for(d=a.d,e=0,f=d.length;e<f;++e){c=d[e];pJc(a.g,c).a=b}} +function BIc(a,b,c){var d,e,f;e=b[c];for(d=0;d<e.length;d++){f=e[d];a.e[f.c.p][f.p]=d}} +function nqc(a){var b;for(b=0;b<a.c.length;b++){(tFb(b,a.c.length),RD(a.c[b],12)).p=b}} +function qqc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){zsb(a.b,b);b=tpd(b)}zsb(a.b,b)} +function gjd(a){var b;b=$wnd.Math.sqrt(a.a*a.a+a.b*a.b);if(b>0){a.a/=b;a.b/=b}return a} +function BXd(a){var b;if(a.w){return a.w}else{b=CXd(a);!!b&&!b.Vh()&&(a.w=b);return b}} +function l2d(a,b){var c,d;d=a.a;c=m2d(a,b,null);d!=b&&!a.e&&(c=o2d(a,b,c));!!c&&c.oj()} +function rQc(a,b,c){var d,e;d=b;do{e=Kfb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} +function heb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} +function Gae(a){var b;if(a==null){return null}else{b=RD(a,195);return sAd(b,b.length)}} +function QHd(a,b){if(a.g==null||b>=a.i)throw Adb(new yNd(b,a.i));return a.Wi(b,a.g[b])} +function Dob(a,b){yob();var c,d;d=new bnb;for(c=0;c<a;++c){ZEb(d.c,b)}return new irb(d)} +function NDb(a){MCb(a);zFb(true,'n may not be negative');return new SDb(a,new DEb(a.a))} +function KKb(a){a.b=(EKb(),BKb);a.f=(vLb(),tLb);a.d=(dk(2,iwe),new cnb(2));a.e=new pjd} +function zrd(a){this.b=(Qb(a),new dnb(a));this.a=new bnb;this.d=new bnb;this.e=new pjd} +function ZJb(){ZJb=geb;WJb=new $Jb('BEGIN',0);XJb=new $Jb(Kye,1);YJb=new $Jb('END',2)} +function Omd(){Omd=geb;Lmd=new Pmd(Kye,0);Mmd=new Pmd('HEAD',1);Nmd=new Pmd('TAIL',2)} +function R_c(){R_c=geb;Q_c=mfd(mfd(mfd(rfd(new ufd,(YVc(),VVc)),(WYc(),VYc)),OYc),SYc)} +function B0c(){B0c=geb;A0c=mfd(mfd(mfd(rfd(new ufd,(YVc(),XVc)),(WYc(),QYc)),LYc),PYc)} +function gtc(){gtc=geb;ftc=ss((btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])))} +function zuc(){zuc=geb;yuc=ss((tuc(),cD(WC(eX,1),jwe,283,0,[ouc,nuc,quc,puc,suc,ruc])))} +function Tuc(){Tuc=geb;Suc=ss((Ouc(),cD(WC(gX,1),jwe,281,0,[Luc,Kuc,Nuc,Juc,Muc,Iuc])))} +function dvc(){dvc=geb;cvc=ss(($uc(),cD(WC(hX,1),jwe,282,0,[Yuc,Vuc,Zuc,Xuc,Wuc,Uuc])))} +function w3b(){w3b=geb;v3b=ss((r3b(),cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])))} +function Wjd(){Wjd=geb;Vjd=ss((Rjd(),cD(WC(n3,1),jwe,255,0,[Ljd,Ojd,Pjd,Qjd,Mjd,Njd])))} +function zkd(){zkd=geb;ykd=ss((ukd(),cD(WC(q3,1),jwe,297,0,[tkd,skd,rkd,pkd,okd,qkd])))} +function nnd(){nnd=geb;mnd=ss((ind(),cD(WC(v3,1),jwe,321,0,[gnd,end,hnd,cnd,fnd,dnd])))} +function Iod(){Iod=geb;Hod=ss((Bod(),cD(WC(C3,1),jwe,101,0,[Aod,zod,yod,vod,xod,wod])))} +function Wod(){Wod=geb;Vod=ss((Pod(),cD(WC(D3,1),jwe,279,0,[Nod,Lod,Mod,Kod,Jod,Ood])))} +function kKb(){kKb=geb;jKb=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])).length;iKb=jKb} +function hod(){dod();return cD(WC(A3,1),jwe,95,0,[Xnd,Wnd,Znd,cod,bod,aod,$nd,_nd,Ynd])} +function eoc(a,b){Mnc();return hgb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} +function Ao(a,b){return $v(Go(a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)))))} +function rGb(a,b){return Zy(),bz(pwe),$wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)} +function Wxd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,1,c,a.b))} +function Hzd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,3,c,a.b))} +function Ayd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,3,c,a.f))} +function Cyd(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,4,c,a.g))} +function Dyd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,5,c,a.i))} +function Eyd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,6,c,a.j))} +function Ozd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,1,c,a.j))} +function Izd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,4,c,a.c))} +function Pzd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,2,c,a.k))} +function Vxd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,0,c,a.a))} +function $Vd(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,4,c,a.s))} +function bWd(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,5,c,a.t))} +function Q1d(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,2,c,a.d))} +function zXd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,5,c,b))} +function IMd(a,b){var c;c=RD(Wjb((PRd(),ORd),a),57);return c?c.gk(b):$C(jJ,rve,1,b,5,1)} +function BXb(a,b){var c;c=ojd(ajd(RD(Wjb(a.g,b),8)),Pid(RD(Wjb(a.f,b),469).b));return c} +function FGd(a,b){var c,d,e;c=(d=(bvd(),e=new hCd,e),!!b&&eCd(d,b),d);fCd(c,a);return c} +function vDd(a,b){var c,d;c=b in a.a;if(c){d=qC(a,b).re();if(d){return d.a}}return null} +function jZd(a,b,c){gHd(a,c);if(!a.kl()&&c!=null&&!a.fk(c)){throw Adb(new yeb)}return c} +function Mqd(a,b){a.n=b;if(a.n){a.f=new bnb;a.e=new bnb}else{a.f=null;a.e=null}return a} +function Ffb(a,b){var c;if(!a){return}b.n=a;var d=zfb(b);if(!d){eeb[a]=[b];return}d.Rm=b} +function SD(a){var b;CFb(a==null||Array.isArray(a)&&(b=XC(a),!(b>=14&&b<=16)));return a} +function ws(a,b){var c;uFb(b);c=a[':'+b];mFb(!!c,'Enum constant undefined: '+b);return c} +function tfb(a,b,c,d,e,f){var g;g=rfb(a,b);Ffb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} +function R3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function T3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function _3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function e4d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function X3d(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function iGb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];eGb(a.a,c)}return a} +function Al(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qb(b)}return new Gl(a)} +function ZTb(a){var b;b=ojd(ajd(a.d.d),a.c.d);wid(b,a.c.e.a,a.c.e.b);return $id(b,a.c.d)} +function $Tb(a){var b;b=ojd(ajd(a.c.d),a.d.d);wid(b,a.d.e.a,a.d.e.b);return $id(b,a.d.d)} +function iA(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||wwe} +function Hnb(a,b,c){var d,e;e=a.length;d=$wnd.Math.min(c,e);VEb(a,0,b,0,d,true);return b} +function ISb(a,b,c){var d,e;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),74);Ysb(a,RD(c.Kb(d),27))}} +function E1b(a,b){Cod(RD(mQb(RD(a.e,10),(yCc(),BBc)),101))&&(yob(),_mb(RD(a.e,10).j,b))} +function lIb(){iIb();return cD(WC(xN,1),jwe,257,0,[hIb,cIb,dIb,bIb,fIb,gIb,eIb,aIb,_Hb])} +function fDc(){_Cc();return cD(WC(rX,1),jwe,265,0,[ZCc,WCc,XCc,TCc,VCc,$Cc,YCc,SCc,UCc])} +function RKc(){RKc=geb;OKc=new SKc('BARYCENTER',0);PKc=new SKc(jBe,1);QKc=new SKc(kBe,2)} +function uFc(){uFc=geb;tFc=new vFc('NO',0);rFc=new vFc(CBe,1);sFc=new vFc('LOOK_BACK',2)} +function Etc(){Etc=geb;Btc=new Ftc('ARD',0);Dtc=new Ftc('MSD',1);Ctc=new Ftc('MANUAL',2)} +function BEc(){BEc=geb;AEc=new CEc(Sye,0);yEc=new CEc('INPUT',1);zEc=new CEc('OUTPUT',2)} +function ygd(){if(!qgd){qgd=new xgd;wgd(qgd,cD(WC(B2,1),rve,134,0,[new vmd]))}return qgd} +function bz(a){if(!(a>=0)){throw Adb(new agb('tolerance ('+a+') must be >= 0'))}return a} +function hOd(a,b){var c;if(ZD(b,44)){return a.c.Mc(b)}else{c=QNd(a,b);jOd(a,b);return c}} +function yBd(a,b,c){YVd(a,b);PAd(a,c);$Vd(a,0);bWd(a,1);aWd(a,true);_Vd(a,true);return a} +function ZGd(a,b){var c;c=a.gc();if(b<0||b>c)throw Adb(new aMd(b,c));return new CMd(a,b)} +function Cad(a,b){a.b=$wnd.Math.max(a.b,b.d);a.e+=b.r+(a.a.c.length==0?0:a.c);Rmb(a.a,b)} +function Jmb(a){yFb(a.c>=0);if(rmb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function Nc(a){var b,c;for(c=a.c.Cc().Kc();c.Ob();){b=RD(c.Pb(),16);b.$b()}a.c.$b();a.d=0} +function Zi(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Rnb(b,b.length,null)}} +function zjd(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Pub(a,c,a.c.b,a.c)}} +function St(a,b){var c,d;for(c=0,d=a.gc();c<d;++c){if(Fvb(b,a.Xb(c))){return c}}return -1} +function ogb(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} +function dk(a,b){if(a<0){throw Adb(new agb(b+' cannot be negative but was: '+a))}return a} +function deb(a,b){typeof window===gve&&typeof window['$gwt']===gve&&(window['$gwt'][a]=b)} +function lp(a,b){return Vv(Ho(a.a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)))))} +function FBb(a,b,c){return sBb(a,new CCb(b),new ECb,new GCb(c),cD(WC(QL,1),jwe,108,0,[]))} +function gqd(){dqd();return cD(WC(I3,1),jwe,264,0,[Ypd,$pd,Xpd,_pd,aqd,cqd,bqd,Zpd,Wpd])} +function wgb(){wgb=geb;vgb=cD(WC(kE,1),Pwe,28,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} +function stc(){stc=geb;qtc=new utc('LAYER_SWEEP',0);ptc=new utc(BBe,1);rtc=new utc(LAe,2)} +function nGc(){nGc=geb;mGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function yGc(){yGc=geb;xGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function SGc(){SGc=geb;RGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function lHc(){lHc=geb;kHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function tHc(){tHc=geb;sHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function RHc(){RHc=geb;QHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function YJc(){YJc=geb;XJc=nfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb,Pbc)} +function EJb(a){var b,c;for(c=new Anb(yud(a));c.a<c.c.c.length;){b=RD(ynb(c),695);b._f()}} +function aeb(){beb();var a=_db;for(var b=0;b<arguments.length;b++){a.push(arguments[b])}} +function EXb(a){zXb();this.g=new Tsb;this.f=new Tsb;this.b=new Tsb;this.c=new Tp;this.i=a} +function d1b(){this.f=new pjd;this.d=new C3b;this.c=new pjd;this.a=new bnb;this.b=new bnb} +function Cje(a,b,c,d){this.ak();this.a=b;this.b=a;this.c=null;this.c=new Dje(this,b,c,d)} +function NKd(a,b,c,d,e){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1;e||(this.o=-2-d-1)} +function HWd(){dWd.call(this);this.n=-1;this.g=null;this.i=null;this.j=null;this.Bb|=gwe} +function DEb(a){xxb.call(this,a.Ad(64)?Kgb(0,Vdb(a.zd(),1)):Sve,a.yd());this.b=1;this.a=a} +function X_c(a,b){R_c();return RD(mQb(b,(h_c(),W$c)),17).a<a.gc()&&RD(mQb(b,W$c),17).a>=0} +function Iqd(a,b){if(a.r>0&&a.c<a.r){a.c+=b;!!a.i&&a.i.d>0&&a.g!=0&&Iqd(a.i,b/a.r*a.i.d)}} +function $Cd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.c))} +function P1d(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,c,a.c))} +function jyd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.k))} +function JXd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.D))} +function Kzd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,8,c,a.f))} +function Lzd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,7,c,a.i))} +function fCd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,8,c,a.a))} +function ZCd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,c,a.b))} +function s6d(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,c,a.b))} +function t6d(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.c))} +function nVd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.d))} +function Cte(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new Gre:new Tqe;a.c=Nqe(d,a.b,a.a)} +function Gge(a,b){return qke(a.e,b)?(nke(),wWd(b)?new ole(b,a):new Eke(b,a)):new Ble(b,a)} +function iDb(a){var b,c;if(0>a){return new rDb}b=a+1;c=new kDb(b,a);return new oDb(null,c)} +function Gob(a,b){yob();var c;c=new Usb(1);bE(a)?$jb(c,a,b):rtb(c.f,a,b);return new uqb(c)} +function pQc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d>0){return RD(Vmb(c.a,d-1),10)}return null} +function TOb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c<d){return -1}if(c==d){return 0}return 1} +function Z5b(a){var b;b=mQb(a,(Ywc(),Awc));if(ZD(b,167)){return Y5b(RD(b,167))}return null} +function Wp(a){var b;a=$wnd.Math.max(a,2);b=mgb(a);if(a>b){b<<=1;return b>0?b:hwe}return b} +function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} +function djd(a,b){var c;if(ZD(b,8)){c=RD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} +function Ydd(a,b){var c;c=new kRb;RD(b.b,68);RD(b.b,68);RD(b.b,68);Umb(b.a,new ced(a,c,b))} +function gOd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);fOd(a,c.ld(),c.md())}} +function Jzd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,11,c,a.d))} +function zWd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,13,c,a.j))} +function b6d(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,21,c,a.b))} +function YAb(a,b){((gBb(),dBb)?null:b.c).length==0&&iBb(b,new rBb);$jb(a.a,dBb?null:b.c,b)} +function b9b(a,b){b.Ug('Hierarchical port constraint processing',1);c9b(a);e9b(a);b.Vg()} +function joc(){joc=geb;ioc=new koc('START',0);hoc=new koc('MIDDLE',1);goc=new koc('END',2)} +function x2c(){x2c=geb;v2c=new z2c('P1_NODE_PLACEMENT',0);w2c=new z2c('P2_EDGE_ROUTING',1)} +function JVb(){JVb=geb;HVb=new jGd(rAe);IVb=new jGd(sAe);GVb=new jGd(tAe);FVb=new jGd(uAe)} +function tkb(a){var b;rFb(a.f.g,a.d);sFb(a.b);a.c=a.a;b=RD(a.a.Pb(),44);a.b=skb(a);return b} +function P2d(a){var b;if(a.b==null){return j3d(),j3d(),i3d}b=a.ul()?a.tl():a.sl();return b} +function nwb(a,b){var c;c=b==null?-1:Wmb(a.b,b,0);if(c<0){return false}owb(a,c);return true} +function zsb(a,b){var c;uFb(b);c=b.g;if(!a.b[c]){bD(a.b,c,b);++a.c;return true}return false} +function azb(a,b){var c,d;c=1-b;d=a.a[c];a.a[c]=d.a[b];d.a[b]=a;a.b=true;d.b=false;return d} +function xRb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=RD(d.Pb(),272);a.b=true;Ysb(a.e,c);c.b=a}} +function kic(a,b){var c,d;c=RD(mQb(a,(yCc(),IBc)),8);d=RD(mQb(b,IBc),8);return Qfb(c.b,d.b)} +function SPb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=Cdb(Udb(a.n[c][f],Ydb(Sdb(e,1))),3);return d} +function lmb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d<c;e=e+1&f,++d){bD(b,d,a.a[e])}} +function owb(a,b){var c;c=Xmb(a.b,a.b.c.length-1);if(b<a.b.c.length){$mb(a.b,b,c);kwb(a,b)}} +function NQc(a,b){var c;c=RD(Wjb(a.c,b),466);if(!c){c=new UQc;c.c=b;Zjb(a.c,c.c,c)}return c} +function PUc(a,b){var c,d;d=new bnb;c=b;do{ZEb(d.c,c);c=RD(Wjb(a.k,c),18)}while(c);return d} +function rMc(a,b,c){var d;d=new bnb;sMc(a,b,d,c,true,true);a.b=new _Lc(d.c.length);return d} +function tvb(a,b){var c,d;c=a.Pc();Wnb(c,0,c.length,b);for(d=0;d<c.length;d++){a.hd(d,c[d])}} +function Bad(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),27);Dyd(b,0);Eyd(b,0)}} +function Bu(a){this.e=a;this.d=new atb(Sv(Ec(this.e).gc()));this.c=this.e.a;this.b=this.e.c} +function _Lc(a){this.b=a;this.a=$C(kE,Pwe,28,a+1,15,1);this.c=$C(kE,Pwe,28,a,15,1);this.d=0} +function frc(a,b,c){grc.call(this,b,c);this.d=$C(jR,WAe,10,a.a.c.length,0,1);anb(a.a,this.d)} +function vLc(a,b,c){UIc.call(this,a,b,c);this.a=new Tsb;this.b=new Tsb;this.d=new yLc(this)} +function Pic(a){fHb.call(this);this.b=Kfb(UD(mQb(a,(yCc(),TBc))));this.a=RD(mQb(a,yAc),223)} +function _q(a,b){var c;if(ZD(b,16)){c=RD(b,16);return a.Gc(c)}return xr(a,RD(Qb(b),20).Kc())} +function KCc(a,b){FDb(CDb(new SDb(null,new Swb(new Xkb(a.b),1)),new esd(a,b)),new isd(a,b))} +function f6b(a,b){b.Ug(iBe,1);FDb(EDb(new SDb(null,new Swb(a.b,16)),new j6b),new l6b);b.Vg()} +function tb(a){return bE(a)?ohb(a):_D(a)?Nfb(a):$D(a)?Jeb(a):YD(a)?a.Hb():aD(a)?kFb(a):Iz(a)} +function xKc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=RD(c.Pb(),219);DJc(b,new NLc(b.f))}} +function yKc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=RD(c.Pb(),219);EJc(b,new OLc(b.e))}} +function PAd(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.zb))} +function CBd(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,c,a.xb))} +function DBd(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.yb))} +function iBd(a,b){var c,d;c=(d=new mXd,d);c.n=b;WGd((!a.s&&(a.s=new C5d(y7,a,21,17)),a.s),c)} +function oBd(a,b){var c,d;d=(c=new d6d,c);d.n=b;WGd((!a.s&&(a.s=new C5d(y7,a,21,17)),a.s),d)} +function ye(a,b){var c,d,e;uFb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();c=c|a.Fc(d)}return c} +function Sx(a){var b,c,d;b=0;for(d=a.Kc();d.Ob();){c=d.Pb();b+=c!=null?tb(c):0;b=~~b}return b} +function oC(e,a){var b=e.a;var c=0;for(var d in b){b.hasOwnProperty(d)&&(a[c++]=d)}return a} +function gB(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+iB(a)} +function xib(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=ojb(Hdb(a.f))),a.c).e} +function GXd(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} +function rZb(a,b){nZb();return a==jZb&&b==mZb||a==mZb&&b==jZb||a==lZb&&b==kZb||a==kZb&&b==lZb} +function sZb(a,b){nZb();return a==jZb&&b==kZb||a==jZb&&b==lZb||a==mZb&&b==lZb||a==mZb&&b==kZb} +function zMb(a,b){return Zy(),bz(Tye),$wnd.Math.abs(0-b)<=Tye||0==b||isNaN(0)&&isNaN(b)?0:a/b} +function qsc(a,b){return Kfb(UD(Lvb(MDb(GDb(new SDb(null,new Swb(a.c.b,16)),new Isc(a)),b))))} +function tsc(a,b){return Kfb(UD(Lvb(MDb(GDb(new SDb(null,new Swb(a.c.b,16)),new Gsc(a)),b))))} +function rvc(){ovc();return cD(WC(iX,1),jwe,259,0,[fvc,hvc,ivc,jvc,kvc,lvc,nvc,evc,gvc,mvc])} +function dEc(){aEc();return cD(WC(vX,1),jwe,243,0,[$Dc,VDc,YDc,WDc,XDc,SDc,ZDc,_Dc,TDc,UDc])} +function z3c(a,b){var c;b.Ug('General Compactor',1);c=h4c(RD(Gxd(a,($4c(),I4c)),393));c.Cg(a)} +function T5c(a,b){var c,d;c=RD(Gxd(a,($4c(),P4c)),17);d=RD(Gxd(b,P4c),17);return hgb(c.a,d.a)} +function Bjd(a,b,c){var d,e;for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),8);d.a+=b;d.b+=c}return a} +function Go(a,b,c){var d;for(d=a.b[c&a.f];d;d=d.b){if(c==d.a&&Hb(b,d.g)){return d}}return null} +function Ho(a,b,c){var d;for(d=a.c[c&a.f];d;d=d.d){if(c==d.f&&Hb(b,d.i)){return d}}return null} +function sjb(a,b,c){var d,e,f;d=0;for(e=0;e<c;e++){f=b[e];a[e]=f<<1|d;d=f>>>31}d!=0&&(a[c]=d)} +function yzb(a,b,c,d,e,f){var g;this.c=a;g=new bnb;Syb(a,g,b,a.b,c,d,e,f);this.a=new Jkb(g,0)} +function _5c(){this.c=new T2c(0);this.b=new T2c(FEe);this.d=new T2c(EEe);this.a=new T2c(Gze)} +function kMb(a,b,c,d,e,f,g){qs.call(this,a,b);this.d=c;this.e=d;this.c=e;this.b=f;this.a=dv(g)} +function tBd(a,b,c,d,e,f,g,h,i,j,k,l,m){ABd(a,b,c,d,e,f,g,h,i,j,k,l,m);kXd(a,false);return a} +function H0b(a){if(a.b.c.i.k==(r3b(),m3b)){return RD(mQb(a.b.c.i,(Ywc(),Awc)),12)}return a.b.c} +function I0b(a){if(a.b.d.i.k==(r3b(),m3b)){return RD(mQb(a.b.d.i,(Ywc(),Awc)),12)}return a.b.d} +function nDb(a){var b;b=mDb(a);if(Gdb(b.a,0)){return bwb(),bwb(),awb}return bwb(),new ewb(b.b)} +function SCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(b.b)} +function TCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(b.c)} +function o8b(a){switch(a.g){case 2:return qpd(),ppd;case 4:return qpd(),Xod;default:return a;}} +function p8b(a){switch(a.g){case 1:return qpd(),npd;case 3:return qpd(),Yod;default:return a;}} +function C9c(a){switch(a.g){case 0:return new s9c;case 1:return new x9c;default:return null;}} +function Zcc(){Zcc=geb;Ycc=new kGd('edgelabelcenterednessanalysis.includelabel',(Geb(),Eeb))} +function jKc(){jKc=geb;iKc=mfd(qfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb),Pbc)} +function DLc(){DLc=geb;CLc=mfd(qfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb),Pbc)} +function lYd(){lYd=geb;iYd=new i1d;kYd=cD(WC(y7,1),lKe,179,0,[]);jYd=cD(WC(s7,1),mKe,62,0,[])} +function P8b(){P8b=geb;O8b=new Q8b('TO_INTERNAL_LTR',0);N8b=new Q8b('TO_INPUT_DIRECTION',1)} +function J3b(){J3b=geb;G3b=new r4b;E3b=new w4b;F3b=new A4b;D3b=new E4b;H3b=new I4b;I3b=new M4b} +function Cac(a,b){b.Ug(iBe,1);LJb(KJb(new PJb((i1b(),new t1b(a,false,false,new _1b)))));b.Vg()} +function M_c(a,b,c){c.Ug('DFS Treeifying phase',1);L_c(a,b);J_c(a,b);a.a=null;a.b=null;c.Vg()} +function Leb(a,b){Geb();return bE(a)?jhb(a,WD(b)):_D(a)?Jfb(a,UD(b)):$D(a)?Ieb(a,TD(b)):a.Fd(b)} +function Ld(a,b){var c,d;uFb(b);for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);a.zc(c.ld(),c.md())}} +function ege(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!cge(a,b,d.Pb())){return false}}return true} +function S6d(a,b,c,d,e){var f;if(c){f=BYd(b.Dh(),a.c);e=c.Rh(b,-1-(f==-1?d:f),null,e)}return e} +function T6d(a,b,c,d,e){var f;if(c){f=BYd(b.Dh(),a.c);e=c.Th(b,-1-(f==-1?d:f),null,e)}return e} +function Uib(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function fjb(a){uFb(a);if(a.length==0){throw Adb(new Vgb('Zero length BigInteger'))}mjb(this,a)} +function $Hd(a){this.i=a.gc();if(this.i>0){this.g=this.aj(this.i+(this.i/8|0)+1);a.Qc(this.g)}} +function dmc(a,b,c){this.g=a;this.d=b;this.e=c;this.a=new bnb;bmc(this);yob();_mb(this.a,null)} +function aad(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Rmb(a.a,b)} +function xid(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.a<c&&b.b>f&&b.b<d} +function Cjd(a,b){var c,d;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.a+=b.a;c.b+=b.b}return a} +function $cc(a){var b,c,d;d=0;for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);b.p=d;++d}} +function Tnc(a){var b,c,d;return a.j==(qpd(),Yod)&&(b=Vnc(a),c=Csb(b,Xod),d=Csb(b,ppd),d||d&&c)} +function rsd(a,b){var c;c=wsd(a);return qsd(new rjd(c.c,c.d),new rjd(c.b,c.a),a.Mf(),b,a.ag())} +function wEd(a,b){var c;c=RD(b,190);qDd(c,'x',a.i);qDd(c,'y',a.j);qDd(c,fIe,a.g);qDd(c,eIe,a.f)} +function CVd(a,b){var c;if(ZD(b,85)){RD(a.c,79).Gk();c=RD(b,85);gOd(a,c)}else{RD(a.c,79).Wb(b)}} +function Bvb(a,b){var c,d;uFb(b);for(d=a.vc().Kc();d.Ob();){c=RD(d.Pb(),44);b.Yd(c.ld(),c.md())}} +function zr(a,b){var c;Qb(b);while(a.Ob()){c=a.Pb();if(!oSc(RD(c,10))){return false}}return true} +function _Ab(){var a;if(!XAb){XAb=new $Ab;a=new oBb('');mBb(a,(SAb(),RAb));YAb(XAb,a)}return XAb} +function PBb(a,b){return sBb(new lCb(a),new nCb(b),new pCb(b),new rCb,cD(WC(QL,1),jwe,108,0,[]))} +function t5c(){t5c=geb;r5c=new v5c(LAe,0);s5c=new v5c('POLAR_COORDINATE',1);q5c=new v5c('ID',2)} +function KEc(){KEc=geb;HEc=new LEc('EQUALLY',0);IEc=new LEc(_ye,1);JEc=new LEc('NORTH_SOUTH',2)} +function OQb(){OQb=geb;MQb=new kGd('debugSVG',(Geb(),false));NQb=new kGd('overlapsExisted',true)} +function pid(){pid=geb;oid=ss((kid(),cD(WC(e3,1),jwe,285,0,[jid,cid,gid,iid,did,eid,fid,hid])))} +function fGd(){fGd=geb;eGd=ss((aGd(),cD(WC(T5,1),jwe,245,0,[_Fd,YFd,ZFd,XFd,$Fd,VFd,UFd,WFd])))} +function jpc(){jpc=geb;ipc=ss((epc(),cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc])))} +function $Yc(){WYc();return cD(WC(u_,1),jwe,262,0,[VYc,OYc,SYc,TYc,RYc,NYc,UYc,LYc,QYc,PYc,MYc])} +function $i(a,b,c){var d,e;e=RD(Fn(a.d,b),17);d=RD(Fn(a.b,c),17);return !e||!d?null:Ui(a,e.a,d.a)} +function cgd(a,b){var c;c=sgd(ygd(),a);if(c){Ixd(b,(umd(),Tld),c);return true}else{return false}} +function TMb(a){RMb();if(a.A.Hc((Qpd(),Mpd))){if(!a.B.Hc((dqd(),$pd))){return SMb(a)}}return null} +function tUb(){this.a=RD(iGd((yVb(),aVb)),17).a;this.c=Kfb(UD(iGd(rVb)));this.b=Kfb(UD(iGd(nVb)))} +function vkb(a){this.f=a;this.e=new Qtb(this.f.i);this.a=this.e;this.b=skb(this);this.d=this.f.g} +function Uge(a,b){Kfe.call(this,Ibb,a,b);this.b=this;this.a=pke(a.Dh(),vYd(this.e.Dh(),this.c))} +function bdc(a,b){var c,d;for(d=new Anb(b.b);d.a<d.c.c.length;){c=RD(ynb(d),30);a.a[c.p]=h2b(c)}} +function ofd(a,b){var c;for(c=0;c<b.j.c.length;c++){RD(Med(a,c),21).Gc(RD(Med(b,c),16))}return a} +function peb(a,b,c,d){var e;e=a.a.length;c>e?(c=e):BFb(b,c+1);a.a=zhb(a.a,0,b)+(''+d)+yhb(a.a,c)} +function ktb(a,b){a.a=Bdb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d=Bdb(a.d,b)} +function wdc(a,b){return b<a.b.gc()?RD(a.b.Xb(b),10):b==a.b.gc()?a.a:RD(Vmb(a.e,b-a.b.gc()-1),10)} +function rXc(a,b,c){return Qfb(cjd(jWc(a),new rjd(b.e.a,b.e.b)),cjd(jWc(a),new rjd(c.e.a,c.e.b)))} +function WJc(a,b,c){return a==(RKc(),QKc)?new PJc:Kwb(b,1)!=0?new ILc(c.length):new pLc(c.length)} +function qvd(a,b){var c,d,e;c=a.th();if(c!=null&&a.wh()){for(d=0,e=c.length;d<e;++d){c[d].dj(b)}}} +function QBb(a,b){var c,d,e;c=a.c.Xe();for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Yd(c,d)}return a.b.Kb(c)} +function n2b(a,b){var c,d;c=a;d=Y2b(c).e;while(d){c=d;if(c==b){return true}d=Y2b(c).e}return false} +function Edb(a){var b;b=a.h;if(b==0){return a.l+a.m*gxe}if(b==exe){return a.l+a.m*gxe-hxe}return a} +function LHc(a,b,c){var d,e;d=a.a.f[b.p];e=a.a.f[c.p];if(d<e){return -1}if(d==e){return 0}return 1} +function Wmc(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),72);Rmb(a.d,c);$mc(a,c)}} +function E6b(a,b){var c;b.Ug('Edge and layer constraint edge reversal',1);c=D6b(a);C6b(c);b.Vg()} +function m6c(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),27);Byd(c,c.i+b.b,c.j+b.d)}} +function TNd(a){var b;if(a.d==null){++a.e;a.f=0;SNd(null)}else{++a.e;b=a.d;a.d=null;a.f=0;SNd(b)}} +function Ys(a){var b;if(a.a==a.b.a){throw Adb(new Dvb)}b=a.a;a.c=b;a.a=RD(Hvb(a.a.e),227);return b} +function Ywd(a,b){var c;if((a.Db&b)!=0){c=Xwd(a,b);return c==-1?a.Eb:SD(a.Eb)[c]}else{return null}} +function jBd(a,b){var c,d;c=(d=new HYd,d);c.G=b;!a.rb&&(a.rb=new J5d(a,i7,a));WGd(a.rb,c);return c} +function kBd(a,b){var c,d;c=(d=new k1d,d);c.G=b;!a.rb&&(a.rb=new J5d(a,i7,a));WGd(a.rb,c);return c} +function wBd(a,b,c,d){ZD(a.Cb,184)&&(RD(a.Cb,184).tb=null);PAd(a,c);!!b&&HXd(a,b);d&&a.gl(true)} +function nJc(a,b){if(a.c){oJc(a,b,true);FDb(new SDb(null,new Swb(b,16)),new BJc(a))}oJc(a,b,false)} +function KRc(a){FRc();var b;if(!Urb(ERc,a)){b=new HRc;b.a=a;Xrb(ERc,a,b)}return RD(Vrb(ERc,a),645)} +function k3d(a){var b;if(a.g>1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw Adb(new Dvb)}} +function GRc(a){switch(a.a.g){case 1:return new lSc;case 3:return new VUc;default:return new WRc;}} +function fyd(a,b){switch(b){case 1:return !!a.n&&a.n.i!=0;case 2:return a.k!=null;}return Cxd(a,b)} +function Hdb(a){if(jxe<a&&a<hxe){return a<0?$wnd.Math.ceil(a):$wnd.Math.floor(a)}return Edb(vD(a))} +function hfb(a){var b;if(a<128){return jfb(),b=ifb[a],!b&&(b=ifb[a]=new bfb(a)),b}return new bfb(a)} +function PCb(b,c){var d;try{c.de()}catch(a){a=zdb(a);if(ZD(a,82)){d=a;ZEb(b.c,d)}else throw Adb(a)}} +function Wdb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=hxe;d=exe}c=eE(e/gxe);b=eE(e-c*gxe);return hD(b,c,d)} +function dy(a){var b,c,d;d=0;for(c=new Osb(a.a);c.a<c.c.a.length;){b=Nsb(c);a.b.Hc(b)&&++d}return d} +function _u(a){var b,c,d;b=1;for(d=a.Kc();d.Ob();){c=d.Pb();b=31*b+(c==null?0:tb(c));b=~~b}return b} +function kQb(a,b){var c;if(!b){return a}c=b.nf();c.dc()||(!a.q?(a.q=new Vsb(c)):Ld(a.q,c));return a} +function Mtb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{Ctb(a.a,b);--a.c;++a.b.g}return c} +function a0b(a,b){var c,d,e;c=b.p-a.p;if(c==0){d=a.f.a*a.f.b;e=b.f.a*b.f.b;return Qfb(d,e)}return c} +function Jfc(a,b){var c,d;c=a.j;d=b.j;return c!=d?c.g-d.g:a.p==b.p?0:c==(qpd(),Yod)?a.p-b.p:b.p-a.p} +function dFc(a,b,c,d,e){bD(a.c[b.g],c.g,d);bD(a.c[c.g],b.g,d);bD(a.b[b.g],c.g,e);bD(a.b[c.g],b.g,e)} +function Jyb(a,b,c){this.b=(uFb(a),a);this.d=(uFb(b),b);this.e=(uFb(c),c);this.c=this.d+(''+this.e)} +function Phe(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(nke(),RD(a,69).xk());this.k=pke(b.e.Dh(),a)} +function USc(a){this.n=new bnb;this.e=new Yub;this.j=new Yub;this.k=new bnb;this.f=new bnb;this.p=a} +function rVc(a){a.r=new _sb;a.w=new _sb;a.t=new bnb;a.i=new bnb;a.d=new _sb;a.a=new Tid;a.c=new Tsb} +function mOb(){mOb=geb;lOb=new nOb('UP',0);iOb=new nOb(Zye,1);jOb=new nOb(Nye,2);kOb=new nOb(Oye,3)} +function xvc(){xvc=geb;vvc=new yvc('ONE_SIDED',0);wvc=new yvc('TWO_SIDED',1);uvc=new yvc('OFF',2)} +function B9c(){B9c=geb;z9c=new D9c('EQUAL_BETWEEN_STRUCTURES',0);A9c=new D9c('TO_ASPECT_RATIO',1)} +function hDc(){hDc=geb;gDc=ss((_Cc(),cD(WC(rX,1),jwe,265,0,[ZCc,WCc,XCc,TCc,VCc,$Cc,YCc,SCc,UCc])))} +function iqd(){iqd=geb;hqd=ss((dqd(),cD(WC(I3,1),jwe,264,0,[Ypd,$pd,Xpd,_pd,aqd,cqd,bqd,Zpd,Wpd])))} +function jod(){jod=geb;iod=ss((dod(),cD(WC(A3,1),jwe,95,0,[Xnd,Wnd,Znd,cod,bod,aod,$nd,_nd,Ynd])))} +function nIb(){nIb=geb;mIb=ss((iIb(),cD(WC(xN,1),jwe,257,0,[hIb,cIb,dIb,bIb,fIb,gIb,eIb,aIb,_Hb])))} +function oSc(a){var b;b=RD(mQb(a,(Ywc(),hwc)),64);return a.k==(r3b(),m3b)&&(b==(qpd(),ppd)||b==Xod)} +function j0b(a,b,c){var d,e;e=RD(mQb(a,(yCc(),RAc)),75);if(e){d=new Ejd;Ajd(d,0,e);Cjd(d,c);ye(b,d)}} +function U2b(a,b,c){var d,e,f,g;g=Y2b(a);d=g.d;e=g.c;f=a.n;b&&(f.a=f.a-d.b-e.a);c&&(f.b=f.b-d.d-e.b)} +function OOb(a,b){var c,d;c=a.f.c.length;d=b.f.c.length;if(c<d){return -1}if(c==d){return 0}return 1} +function S0b(a){if(a.b.c.length!=0&&!!RD(Vmb(a.b,0),72).a){return RD(Vmb(a.b,0),72).a}return R0b(a)} +function fr(a){var b;if(a){b=a;if(b.dc()){throw Adb(new Dvb)}return b.Xb(b.gc()-1)}return Fr(a.Kc())} +function Dib(a){var b;Ddb(a,0)<0&&(a=Qdb(a));return b=Ydb(Udb(a,32)),64-(b!=0?ngb(b):ngb(Ydb(a))+32)} +function pBb(){gBb();if(dBb){return new oBb(null)}return ZAb(_Ab(),'com.google.common.base.Strings')} +function eyd(a,b,c,d){if(c==1){return !a.n&&(a.n=new C5d(I4,a,1,7)),rLd(a.n,b,d)}return Bxd(a,b,c,d)} +function eBd(a,b){var c,d;d=(c=new _9d,c);PAd(d,b);WGd((!a.A&&(a.A=new iie(z7,a,7)),a.A),d);return d} +function xEd(a,b,c){var d,e,f,g;f=null;g=b;e=wDd(g,iIe);d=new JEd(a,c);f=(LDd(d.a,d.b,e),e);return f} +function iXd(a){var b;if(!a.a||(a.Bb&1)==0&&a.a.Vh()){b=WVd(a);ZD(b,156)&&(a.a=RD(b,156))}return a.a} +function Be(a,b){var c,d;uFb(b);for(d=b.Kc();d.Ob();){c=d.Pb();if(!a.Hc(c)){return false}}return true} +function sD(a,b){var c,d,e;c=a.l+b.l;d=a.m+b.m+(c>>22);e=a.h+b.h+(d>>22);return hD(c&dxe,d&dxe,e&exe)} +function DD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return hD(c&dxe,d&dxe,e&exe)} +function Jpc(a){var b,c;Hpc(a);for(c=new Anb(a.d);c.a<c.c.c.length;){b=RD(ynb(c),105);!!b.i&&Ipc(b)}} +function zdb(a){var b;if(ZD(a,82)){return a}b=a&&a.__java$exception;if(!b){b=new Cz(a);gA(b)}return b} +function BGd(a){if(ZD(a,193)){return RD(a,123)}else if(!a){throw Adb(new Ogb(HIe))}else{return null}} +function skb(a){if(a.a.Ob()){return true}if(a.a!=a.e){return false}a.a=new wtb(a.f.f);return a.a.Ob()} +function kmb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,Imb(a))){return true}}return false} +function dHb(a,b){if(!a||!b||a==b){return false}return tGb(a.d.c,b.d.c+b.d.b)&&tGb(b.d.c,a.d.c+a.d.b)} +function Tmb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}YEb(a.c,a.c.length,c);return true} +function NBb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=RD(e.Pb(),44);a.yc(d.ld(),d.md(),c)}return a} +function $Wc(a){var b,c,d;b=new Yub;for(d=Sub(a.d,0);d.b!=d.d.c;){c=RD(evb(d),65);Mub(b,c.c)}return b} +function Pdc(a,b){var c,d;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),72);pQb(c,(Ywc(),swc),b)}} +function L9c(a,b,c){var d,e;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),27);Byd(d,d.i+b,d.j+c)}} +function Nb(a,b){if(!a){throw Adb(new agb(hc('value already present: %s',cD(WC(jJ,1),rve,1,5,[b]))))}} +function Aid(a,b,c,d,e){tid();return $wnd.Math.min(Lid(a,b,c,d,e),Lid(c,d,a,b,fjd(new rjd(e.a,e.b))))} +function Rdd(a,b,c,d){RD(c.b,68);RD(c.b,68);RD(d.b,68);RD(d.b,68);RD(d.b,68);Umb(d.a,new Wdd(a,b,d))} +function NGb(a,b){a.d==(Cmd(),ymd)||a.d==Bmd?RD(b.a,60).c.Fc(RD(b.b,60)):RD(b.b,60).c.Fc(RD(b.a,60))} +function Ued(a,b){var c;c=ev(b.a.gc());FDb(PDb(new SDb(null,new Swb(b,1)),a.i),new ffd(a,c));return c} +function fBd(a){var b,c;c=(b=new _9d,b);PAd(c,'T');WGd((!a.d&&(a.d=new iie(z7,a,11)),a.d),c);return c} +function cHd(a){var b,c,d,e;b=1;for(c=0,e=a.gc();c<e;++c){d=a.Vi(c);b=31*b+(d==null?0:tb(d))}return b} +function cj(a,b,c,d){var e;Pb(b,a.e.Rd().gc());Pb(c,a.c.Rd().gc());e=a.a[b][c];bD(a.a[b],c,d);return e} +function cD(a,b,c,d,e){e.Rm=a;e.Sm=b;e.Tm=keb;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function vec(){vec=geb;uec=new xec(LAe,0);sec=new xec(oBe,1);tec=new xec(pBe,2);rec=new xec('BOTH',3)} +function enc(){enc=geb;anc=new fnc(Kye,0);bnc=new fnc(Nye,1);cnc=new fnc(Oye,2);dnc=new fnc('TOP',3)} +function nZb(){nZb=geb;jZb=new qZb('Q1',0);mZb=new qZb('Q4',1);kZb=new qZb('Q2',2);lZb=new qZb('Q3',3)} +function DFc(){DFc=geb;BFc=new EFc('OFF',0);CFc=new EFc('SINGLE_EDGE',1);AFc=new EFc('MULTI_EDGE',2)} +function ldd(){ldd=geb;kdd=new ndd('MINIMUM_SPANNING_TREE',0);jdd=new ndd('MAXIMUM_SPANNING_TREE',1)} +function hed(){hed=geb;new jGd('org.eclipse.elk.addLayoutConfig');fed=new sed;eed=new qed;ged=new ved} +function EGd(a){var b,c;c=(bvd(),b=new Rzd,b);!!a&&WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),c);return c} +function N2c(a){var b,c,d,e;e=new bnb;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),27);b=Q2c(c);Tmb(e,b)}return e} +function Jr(a,b){var c,d;Rb(b,'predicate');for(d=0;a.Ob();d++){c=a.Pb();if(b.Lb(c)){return d}}return -1} +function xSd(a,b){var c,d;d=0;if(a<64&&a<=b){b=b<64?b:63;for(c=a;c<=b;c++){d=Rdb(d,Sdb(1,c))}}return d} +function oQc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d<c.a.c.length-1){return RD(Vmb(c.a,d+1),10)}return null} +function Bob(a){yob();var b,c,d;d=0;for(c=a.Kc();c.Ob();){b=c.Pb();d=d+(b!=null?tb(b):0);d=d|0}return d} +function wsb(a){var b,c,d;b=RD(a.e&&a.e(),9);d=(c=b.slice(),RD(dD(c,b),9));return new Fsb(b,d,b.length)} +function Bdd(a,b,c){var d;akb(a.a);Umb(c.i,new Mdd(a));d=new $Fb(RD(Wjb(a.a,b.b),68));Add(a,d,b);c.f=d} +function bgc(a){var b;X0b(a,true);b=Awe;nQb(a,(yCc(),KBc))&&(b+=RD(mQb(a,KBc),17).a);pQb(a,KBc,sgb(b))} +function hB(a){var b;b=new dB;b.a=a;b.b=fB(a);b.c=$C(qJ,Nve,2,2,6,1);b.c[0]=gB(a);b.c[1]=gB(a);return b} +function Z7b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new Uid(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} +function UQb(a,b){if(!a||!b||a==b){return false}return $y(a.b.c,b.b.c+b.b.b)<0&&$y(b.b.c,a.b.c+a.b.b)<0} +function Qnd(a){switch(a.g){case 1:return Mnd;case 2:return Lnd;case 3:return Nnd;default:return Ond;}} +function mec(a){switch(RD(mQb(a,(yCc(),UAc)),171).g){case 2:case 4:return true;default:return false;}} +function aHb(a,b,c){switch(c.g){case 2:a.b=b;break;case 1:a.c=b;break;case 4:a.d=b;break;case 3:a.a=b;}} +function Exd(a,b){switch(b){case 0:!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));a.o.c.$b();return;}$vd(a,b)} +function Mad(a,b){var c,d;c=RD(RD(Wjb(a.g,b.a),42).a,68);d=RD(RD(Wjb(a.g,b.b),42).a,68);return SQb(c,d)} +function XGd(a,b,c){var d;d=a.gc();if(b>d)throw Adb(new aMd(b,d));a.Si()&&(c=bHd(a,c));return a.Ei(b,c)} +function eQb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){PPb(a,f,g)||TPb(a,f,g,true,false)}}} +function uid(a){tid();var b,c,d;c=$C(l3,Nve,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=Cid(d,a)}return c} +function xD(a){var b,c,d;b=~a.l+1&dxe;c=~a.m+(b==0?1:0)&dxe;d=~a.h+(b==0&&c==0?1:0)&exe;return hD(b,c,d)} +function mgb(a){var b;if(a<0){return qwe}else if(a==0){return 0}else{for(b=hwe;(b&a)==0;b>>=1);return b}} +function zSd(a,b,c){if(a>=128)return false;return a<64?Pdb(Cdb(Sdb(1,a),c),0):Pdb(Cdb(Sdb(1,a-64),b),0)} +function oQb(a,b,c){return c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c)),a} +function pQb(a,b,c){c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c));return a} +function KTb(a){var b,c;c=new gUb;kQb(c,a);pQb(c,(JVb(),HVb),a);b=new Tsb;MTb(a,c,b);LTb(a,c,b);return c} +function cIc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} +function qmc(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f<d-1;f++){e=f+1;c=c|rmc(a,b,f,e)}return c} +function Emc(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Jmc(a,b,(qpd(),npd));Jmc(a,b,Yod)}} +function tvc(){tvc=geb;svc=ss((ovc(),cD(WC(iX,1),jwe,259,0,[fvc,hvc,ivc,jvc,kvc,lvc,nvc,evc,gvc,mvc])))} +function fEc(){fEc=geb;eEc=ss((aEc(),cD(WC(vX,1),jwe,243,0,[$Dc,VDc,YDc,WDc,XDc,SDc,ZDc,_Dc,TDc,UDc])))} +function huc(){huc=geb;fuc=new iuc(LAe,0);euc=new iuc('INCOMING_ONLY',1);guc=new iuc('OUTGOING_ONLY',2)} +function HC(){HC=geb;GC={'boolean':IC,'number':JC,'string':LC,'object':KC,'function':KC,'undefined':MC}} +function pfb(){++kfb;this.o=null;this.k=null;this.j=null;this.d=null;this.b=null;this.n=null;this.a=null} +function pj(a,b){this.c=a;this.d=b;this.b=this.d/this.c.c.Rd().gc()|0;this.a=this.d%this.c.c.Rd().gc()} +function R$d(a,b){this.b=a;N$d.call(this,(RD(QHd(xYd((lTd(),kTd).o),10),19),b.i),b.g);this.a=(lYd(),kYd)} +function vB(a,b,c){this.q=new $wnd.Date;this.q.setFullYear(a+Owe,b,c);this.q.setHours(0,0,0,0);mB(this,0)} +function ckb(a,b){mFb(a>=0,'Negative initial capacity');mFb(b>=0,'Non-positive load factor');akb(this)} +function iib(a,b,c,d,e){var f,g;g=a.length;f=c.length;if(b<0||d<0||e<0||b+e>g||d+e>f){throw Adb(new ueb)}} +function zob(a,b){yob();var c,d,e,f,g;g=false;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=g|a.Fc(c)}return g} +function Wyb(a,b,c){var d,e;d=new Fzb(b,c);e=new Gzb;a.b=Uyb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function omb(a){var b;b=a.a[a.b];if(b==null){return null}bD(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} +function oD(a){var b,c;c=ngb(a.h);if(c==32){b=ngb(a.m);return b==32?ngb(a.l)+32:b+20-10}else{return c-12}} +function $5d(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=WVd(a);ZD(b,90)&&(a.c=RD(b,29))}return a.c} +function OGb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.d.c=-b.d.c-b.d.b}IGb(a)} +function zYb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.g.c=-b.g.c-b.g.b}uYb(a)} +function Jmc(a,b,c){var d,e,f,g;g=aMc(b,c);f=0;for(e=g.Kc();e.Ob();){d=RD(e.Pb(),12);Zjb(a.c,d,sgb(f++))}} +function qMc(a,b,c){var d;d=new bnb;sMc(a,b,d,(qpd(),Xod),true,false);sMc(a,c,d,ppd,false,false);return d} +function xjd(a){var b,c,d,e,f;b=new pjd;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b.a+=c.a;b.b+=c.b}return b} +function CEd(a,b,c){var d,e,f,g;f=null;g=b;e=wDd(g,'labels');d=new fFd(a,c);f=(bEd(d.a,d.b,e),e);return f} +function Jee(a,b,c,d){var e;e=Ree(a,b,c,d);if(!e){e=Iee(a,c,d);if(!!e&&!Eee(a,b,e)){return null}}return e} +function Mee(a,b,c,d){var e;e=See(a,b,c,d);if(!e){e=Lee(a,c,d);if(!!e&&!Eee(a,b,e)){return null}}return e} +function Cb(a,b,c){Qb(b);if(c.Ob()){Vhb(b,Fb(c.Pb()));while(c.Ob()){Vhb(b,a.a);Vhb(b,Fb(c.Pb()))}}return b} +function Xb(a,b){var c;for(c=0;c<a.a.a.length;c++){if(!RD(kob(a.a,c),178).Lb(b)){return false}}return true} +function fB(a){var b;if(a==0){return 'Etc/GMT'}if(a<0){a=-a;b='Etc/GMT-'}else{b='Etc/GMT+'}return b+iB(a)} +function DA(a){var b;if(a.b<=0){return false}b=qhb('MLydhHmsSDkK',Fhb(ihb(a.c,0)));return b>1||b>=0&&a.b<3} +function nD(a){var b,c,d;b=~a.l+1&dxe;c=~a.m+(b==0?1:0)&dxe;d=~a.h+(b==0&&c==0?1:0)&exe;a.l=b;a.m=c;a.h=d} +function Cob(a){yob();var b,c,d;d=1;for(c=a.Kc();c.Ob();){b=c.Pb();d=31*d+(b!=null?tb(b):0);d=d|0}return d} +function kD(a,b,c,d,e){var f;f=BD(a,b);c&&nD(f);if(e){a=mD(a,b);d?(eD=xD(a)):(eD=hD(a.l,a.m,a.h))}return f} +function Qlc(a,b,c){a.g=Wlc(a,b,(qpd(),Xod),a.b);a.d=Wlc(a,c,Xod,a.b);if(a.g.c==0||a.d.c==0){return}Tlc(a)} +function Rlc(a,b,c){a.g=Wlc(a,b,(qpd(),ppd),a.j);a.d=Wlc(a,c,ppd,a.j);if(a.g.c==0||a.d.c==0){return}Tlc(a)} +function Xyd(a,b){switch(b){case 7:return !!a.e&&a.e.i!=0;case 8:return !!a.d&&a.d.i!=0;}return wyd(a,b)} +function STb(a,b){switch(b.g){case 0:ZD(a.b,641)||(a.b=new tUb);break;case 1:ZD(a.b,642)||(a.b=new zUb);}} +function tbd(a){switch(a.g){case 0:return new _dd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} +function bdd(a){switch(a.g){case 0:return new vdd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} +function LCc(a,b,c){return !QDb(CDb(new SDb(null,new Swb(a.c,16)),new PAb(new gsd(b,c)))).Bd((xDb(),wDb))} +function mWc(a,b){return cjd(jWc(RD(mQb(b,(h_c(),H$c)),88)),new rjd(a.c.e.a-a.b.e.a,a.c.e.b-a.b.e.b))<=0} +function dve(a,b){while(a.g==null&&!a.c?sId(a):a.g==null||a.i!=0&&RD(a.g[a.i-1],51).Ob()){mFd(b,tId(a))}} +function sYb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.f.$b()}NYb(a.b,a);tYb(a)} +function Ijd(a){var b,c,d;b=new Ejd;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),8);hu(b,0,new sjd(c))}return b} +function DDb(a){var b;LCb(a);b=new IEb;if(a.a.Bd(b)){return Kvb(),new Ovb(uFb(b.a))}return Kvb(),Kvb(),Jvb} +function Dxd(a,b,c){switch(b){case 0:!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));CVd(a.o,c);return;}Wvd(a,b,c)} +function bXc(a,b,c){this.g=a;this.e=new pjd;this.f=new pjd;this.d=new Yub;this.b=new Yub;this.a=b;this.c=c} +function V9c(a,b,c,d){this.b=new bnb;this.n=new bnb;this.i=d;this.j=c;this.s=a;this.t=b;this.r=0;this.d=0} +function gHd(a,b){if(!a.Li()&&b==null){throw Adb(new agb("The 'no null' constraint is violated"))}return b} +function ohb(a){var b,c;b=0;for(c=0;c<a.length;c++){b=(b<<5)-b+(BFb(c,a.length),a.charCodeAt(c))|0}return b} +function Myb(a,b){var c,d,e;e=a.b;while(e){c=a.a.Ne(b,e.d);if(c==0){return e}d=c<0?0:1;e=e.a[d]}return null} +function LBb(a,b,c){var d,e;d=(Geb(),SSb(c)?true:false);e=RD(b.xc(d),15);if(!e){e=new bnb;b.zc(d,e)}e.Fc(c)} +function q6c(a,b){var c,d;c=RD(Gxd(a,(X7c(),A7c)),17).a;d=RD(Gxd(b,A7c),17).a;return c==d?-1:c<d?-1:c>d?1:0} +function ICc(a){Rmb(a.c,(hed(),fed));if(_y(a.a,Kfb(UD(iGd((QCc(),OCc)))))){return new asd}return new csd(a)} +function fs(a){while(!a.d||!a.d.Ob()){if(!!a.b&&!nmb(a.b)){a.d=RD(smb(a.b),51)}else{return null}}return a.d} +function BVc(a){switch(a.g){case 1:return EEe;default:case 2:return 0;case 3:return Gze;case 4:return FEe;}} +function fte(){Vse();var a;if(Cse)return Cse;a=Zse(hte('M',true));a=$se(hte('M',false),a);Cse=a;return Cse} +function ttd(){ttd=geb;qtd=new utd('ELK',0);rtd=new utd('JSON',1);ptd=new utd('DOT',2);std=new utd('SVG',3)} +function TEc(){TEc=geb;SEc=new UEc('STACKED',0);QEc=new UEc('REVERSE_STACKED',1);REc=new UEc('SEQUENCED',2)} +function LZc(){LZc=geb;KZc=new MZc(LAe,0);JZc=new MZc('MIDDLE_TO_MIDDLE',1);IZc=new MZc('AVOID_OVERLAP',2)} +function sgc(){sgc=geb;qgc=new Lgc;rgc=new Ngc;pgc=new Dgc;ogc=new Pgc;ngc=new Hgc;mgc=(uFb(ngc),new nrb)} +function vnd(){vnd=geb;tnd=new A3b(15);snd=new mGd((umd(),tld),tnd);und=Qld;ond=Ekd;pnd=kld;rnd=nld;qnd=mld} +function wgd(a,b){var c,d,e,f,g;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=new Ggd(a);c.hf(g);Bgd(g)}akb(a.f)} +function xw(a,b){var c;if(b===a){return true}if(ZD(b,229)){c=RD(b,229);return pb(a.Zb(),c.Zb())}return false} +function Q_b(a,b){if(R_b(a,b)){Rc(a.b,RD(mQb(b,(Ywc(),ewc)),21),b);Mub(a.a,b);return true}else{return false}} +function u6b(a){var b,c;b=RD(mQb(a,(Ywc(),Iwc)),10);if(b){c=b.c;Ymb(c.a,b);c.a.c.length==0&&Ymb(Y2b(b).b,c)}} +function dfc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return RD(mQb(b,zwc),17).a-RD(mQb(a,zwc),17).a}return 0} +function ifc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return RD(mQb(a,zwc),17).a-RD(mQb(b,zwc),17).a}return 0} +function kBb(a){if(dBb){return $C(JL,Xxe,581,0,0,1)}return RD(anb(a.a,$C(JL,Xxe,581,a.a.c.length,0,1)),856)} +function yn(a,b,c,d){fn();return new Nx(cD(WC(UK,1),Zve,44,0,[(ck(a,b),new gp(a,b)),(ck(c,d),new gp(c,d))]))} +function bBd(a,b,c){var d,e;e=(d=new q4d,d);yBd(e,b,c);WGd((!a.q&&(a.q=new C5d(s7,a,11,10)),a.q),e);return e} +function xAd(a){var b,c,d,e;e=meb(pAd,a);c=e.length;d=$C(qJ,Nve,2,c,6,1);for(b=0;b<c;++b){d[b]=e[b]}return d} +function jwb(a,b){var c;if(b*2+1>=a.b.c.length){return}jwb(a,2*b+1);c=2*b+2;c<a.b.c.length&&jwb(a,c);kwb(a,b)} +function sKc(a,b){var c,d;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),219);if(c.e.length>0){b.Cd(c);c.i&&zKc(c)}}} +function Ejb(a,b,c){var d;for(d=c-1;d>=0&&a[d]===b[d];d--);return d<0?0:Ldb(Cdb(a[d],yxe),Cdb(b[d],yxe))?-1:1} +function it(a,b,c){var d,e;this.g=a;this.c=b;this.a=this;this.d=this;e=Wp(c);d=$C(UG,ewe,227,e,0,1);this.b=d} +function fQb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(PPb(a,f,g)){return true}}}return false} +function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=RD(d.Pb(),16);if(c.Hc(b)){return true}}return false} +function iu(a,b,c){var d,e,f,g;uFb(c);g=false;f=a.fd(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} +function NMd(a,b){var c,d;d=RD(Ywd(a.a,4),129);c=$C(d6,IJe,424,b,0,1);d!=null&&hib(d,0,c,0,d.length);return c} +function hSd(a,b){var c;c=new lSd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function Tv(a,b){var c;if(a===b){return true}else if(ZD(b,85)){c=RD(b,85);return Rx(gn(a),c.vc())}return false} +function Vjb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=RD(e.Pb(),44);if(a.Be(b,d.md())){return true}}return false} +function lmc(a,b,c){if(!a.d[b.p][c.p]){kmc(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} +function vMc(a,b){var c;if(!a||a==b||!nQb(b,(Ywc(),pwc))){return false}c=RD(mQb(b,(Ywc(),pwc)),10);return c!=a} +function Bhe(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.$l()}}} +function Che(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a._l()}}} +function bgb(a){oz.call(this,'The given string does not match the expected format for individual spacings.',a)} +function J6c(a,b){var c;b.Ug('Min Size Preprocessing',1);c=vsd(a);Ixd(a,(X6c(),U6c),c.a);Ixd(a,R6c,c.b);b.Vg()} +function Djd(a){var b,c,d;b=0;d=$C(l3,Nve,8,a.b,0,1);c=Sub(a,0);while(c.b!=c.d.c){d[b++]=RD(evb(c),8)}return d} +function Ajd(a,b,c){var d,e,f;d=new Yub;for(f=Sub(c,0);f.b!=f.d.c;){e=RD(evb(f),8);Mub(d,new sjd(e))}iu(a,b,d)} +function az(a,b){var c;c=Bdb(a,b);if(Ldb($db(a,b),0)|Jdb($db(a,c),0)){return c}return Bdb(Sve,$db(Udb(c,63),1))} +function le(a,b){var c,d;c=RD(a.d.Bc(b),16);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} +function Dyb(a){var b;b=a.a.c.length;if(b>0){return lyb(b-1,a.a.c.length),Xmb(a.a,b-1)}else{throw Adb(new Srb)}} +function nFb(a,b,c){if(a>b){throw Adb(new agb(_xe+a+aye+b))}if(a<0||b>c){throw Adb(new xeb(_xe+a+bye+b+Qxe+c))}} +function yXd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}JXd(a,b==null?null:(uFb(b),b));!!a.C&&a.hl(null)} +function JCc(a,b){var c;c=iGd((QCc(),OCc))!=null&&b.Sg()!=null?Kfb(UD(b.Sg()))/Kfb(UD(iGd(OCc))):1;Zjb(a.b,b,c)} +function $Lc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c<a.a.length){a.a[c]-=d;c+=c&-c}} +function VHd(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i<a.g.length){b=a.g;a.g=a.aj(a.i);hib(b,0,a.g,0,a.i)}} +function Ned(a,b,c){if(b<0){throw Adb(new veb(zGe+b))}if(b<a.j.c.length){$mb(a.j,b,c)}else{Led(a,b);Rmb(a.j,c)}} +function uhd(a){if(!a.a||(a.a.i&8)==0){throw Adb(new dgb('Enumeration class expected for layout option '+a.f))}} +function y1d(a){var b;b=(!a.a&&(a.a=new C5d(l7,a,9,5)),a.a);if(b.i!=0){return N1d(RD(QHd(b,0),694))}return null} +function yr(a){var b;Qb(a);Mb(true,'numberToAdvance must be nonnegative');for(b=0;b<0&&gs(a);b++){hs(a)}return b} +function eSb(){eSb=geb;bSb=(VRb(),URb);aSb=new lGd(vze,bSb);_Rb=new jGd(wze);cSb=new jGd(xze);dSb=new jGd(yze)} +function s_c(){s_c=geb;r_c=new t_c(MAe,0);p_c=new t_c(QEe,1);q_c=new t_c('FAN',2);o_c=new t_c('CONSTRAINT',3)} +function g4c(){g4c=geb;d4c=new i4c(LAe,0);e4c=new i4c('RADIAL_COMPACTION',1);f4c=new i4c('WEDGE_COMPACTION',2)} +function lFc(){lFc=geb;iFc=new mFc('CONSERVATIVE',0);jFc=new mFc('CONSERVATIVE_SOFT',1);kFc=new mFc('SLOPPY',2)} +function xBb(){xBb=geb;uBb=new yBb('CONCURRENT',0);vBb=new yBb('IDENTITY_FINISH',1);wBb=new yBb('UNORDERED',2)} +function NXb(){NXb=geb;LXb=Wx(cD(WC(s3,1),jwe,88,0,[(Cmd(),ymd),zmd]));MXb=Wx(cD(WC(s3,1),jwe,88,0,[Bmd,xmd]))} +function rb(a){return bE(a)?qJ:_D(a)?VI:$D(a)?QI:YD(a)?a.Rm:aD(a)?a.Rm:a.Rm||Array.isArray(a)&&WC(hI,1)||hI} +function Qje(a){return !a?null:(a.i&1)!=0?a==xdb?QI:a==kE?bJ:a==jE?ZI:a==iE?VI:a==lE?eJ:a==wdb?lJ:a==gE?RI:SI:a} +function CIb(a){if(a.c!=a.b.b||a.i!=a.g.b){aFb(a.a.c,0);Tmb(a.a,a.b);Tmb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} +function vmb(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;bD(a.a,b,a.a[d]);b=d}bD(a.a,a.b,null);a.b=a.b+1&c} +function umb(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;bD(a.a,b,a.a[d]);b=d}bD(a.a,a.c,null)} +function Smb(a,b,c){var d,e;wFb(b,a.c.length);d=c.Pc();e=d.length;if(e==0){return false}YEb(a.c,b,d);return true} +function otb(a,b,c){var d,e,f,g;for(e=c,f=0,g=e.length;f<g;++f){d=e[f];if(a.b.Be(b,d.ld())){return d}}return null} +function Tnb(a){var b,c,d,e,f;f=1;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=31*f+(b!=null?tb(b):0);f=f|0}return f} +function ss(a){var b,c,d,e,f;b={};for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b[':'+(c.f!=null?c.f:''+c.g)]=c}return b} +function tSd(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b<c;b++){if(!GSd(a[b]))return a[b]}return null} +function gKb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(ZD(a,127)){if(RD(a,127).a.b==0){return 0}}return a.jf()} +function hKb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(ZD(a,127)){if(RD(a,127).a.a==0){return 0}}return a.kf()} +function orc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}return 0} +function EHc(a){var b,c,d;d=0;for(c=new is(Mr(a.a.Kc(),new ir));gs(c);){b=RD(hs(c),18);b.c.i==b.d.i||++d}return d} +function Gad(a,b){var c,d,e;e=b-a.f;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),315);fad(c,c.e,c.f+e)}a.f=b} +function YVd(a,b){var c,d,e;d=a.Yk(b,null);e=null;if(b){e=(jTd(),c=new s2d,c);l2d(e,a.r)}d=XVd(a,e,d);!!d&&d.oj()} +function P0b(a,b){var c,d,e;c=a;e=0;do{if(c==b){return e}d=c.e;if(!d){throw Adb(new _fb)}c=Y2b(d);++e}while(true)} +function uRb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=RD(c.Pb(),567);e=new DSb(b,a.e,a.f);Rmb(a.g,e)}} +function DZb(a){var b;b=new XZb(a);t$b(a.a,BZb,new mob(cD(WC(wQ,1),rve,382,0,[b])));!!b.d&&Rmb(b.f,b.d);return b.f} +function M2b(a,b){var c;for(c=0;c<b.length;c++){if(a==(BFb(c,b.length),b.charCodeAt(c))){return true}}return false} +function BSd(a,b){return b<a.length&&(BFb(b,a.length),a.charCodeAt(b)!=63)&&(BFb(b,a.length),a.charCodeAt(b)!=35)} +function trc(a,b,c,d){nrc(this);this.c=$C(jR,WAe,10,a.a.c.length,0,1);this.e=b;anb(a.a,this.c);this.f=c;this.b=d} +function Cz(a){Az();ez(this);gz(this);this.e=a;hz(this,a);this.g=a==null?vve:jeb(a);this.a='';this.b=a;this.a=''} +function Pad(){this.a=new Qad;this.f=new Sad(this);this.b=new Uad(this);this.i=new Wad(this);this.e=new Yad(this)} +function Ks(){Js.call(this,new hub(Sv(16)));dk(2,Mve);this.b=2;this.a=new ct(null,null,0,null);Ss(this.a,this.a)} +function NC(a){HC();throw Adb(new aC("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function AVc(a,b,c){if($wnd.Math.abs(b-a)<DEe||$wnd.Math.abs(c-a)<DEe){return true}return b-a>DEe?a-c>DEe:c-a>DEe} +function vjd(a,b){var c;for(c=0;c<b.length;c++){if(a==(BFb(c,b.length),b.charCodeAt(c))){return true}}return false} +function HSd(a){var b,c;if(a==null)return false;for(b=0,c=a.length;b<c;b++){if(!GSd(a[b]))return false}return true} +function M8c(a,b){var c,d,e;d=false;c=b.q.d;if(b.d<a.b){e=dad(b.q,a.b);if(b.q.d>e){ead(b.q,e);d=c!=b.q.d}}return d} +function C3c(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} +function pBd(a,b){var c,d;d=Hvd(a);if(!d){!$Ad&&($Ad=new L5d);c=(gSd(),nSd(b));d=new Sde(c);WGd(d.El(),a)}return d} +function Sc(a,b){var c,d;c=RD(a.c.Bc(b),16);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} +function tKc(a,b){var c,d;d=Kwb(a.d,1)!=0;c=true;while(c){c=false;c=b.c.mg(b.e,d);c=c|DKc(a,b,d,false);d=!d}yKc(a)} +function omc(a,b,c,d){var e,f;a.a=b;f=d?0:1;a.f=(e=new mmc(a.c,a.a,c,f),new Pmc(c,a.a,e,a.e,a.b,a.c==(RKc(),PKc)))} +function Imb(a){var b;sFb(a.a!=a.b);b=a.d.a[a.a];zmb(a.b==a.d.c&&b!=null);a.c=a.a;a.a=a.a+1&a.d.a.length-1;return b} +function Vib(a){var b;if(a.c!=0){return a.c}for(b=0;b<a.a.length;b++){a.c=a.c*33+(a.a[b]&-1)}a.c=a.c*a.e;return a.c} +function Oue(a){var b;if(!(a.c.c<0?a.a>=a.c.b:a.a<=a.c.b)){throw Adb(new Dvb)}b=a.a;a.a+=a.c.c;++a.b;return sgb(b)} +function h5b(a){var b;b=new y2b(a.a);kQb(b,a);pQb(b,(Ywc(),Awc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} +function tVc(a){return (qpd(),hpd).Hc(a.j)?Kfb(UD(mQb(a,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])).b} +function ZJc(a){var b;b=vfd(XJc);RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),kvc))&&pfd(b,(sXb(),pXb),(hcc(),Ybc));return b} +function M2c(a){var b,c,d,e;e=new _sb;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),27);b=P2c(c);ye(e,b)}return e} +function hIc(a){var b,c;for(c=new Anb(a.r);c.a<c.c.c.length;){b=RD(ynb(c),10);if(a.n[b.p]<=0){return b}}return null} +function LGb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),60);if(MGb(a,d,c)){return true}}return false} +function Rcc(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=RD(f.Pb(),72);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} +function hNb(a,b,c){var d;d=new rMb(a,b);Rc(a.r,b.ag(),d);if(c&&!Rod(a.u)){d.c=new TKb(a.d);Umb(b.Rf(),new kNb(d))}} +function Ddb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a-b;if(!isNaN(c)){return c}}return uD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b)} +function Iid(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function Jid(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function Vvd(a,b){var c,d,e,f;f=(e=a?Hvd(a):null,Pje((d=b,e?e.Gl():null,d)));if(f==b){c=Hvd(a);!!c&&c.Gl()}return f} +function g2d(a,b,c){var d,e;e=a.f;a.f=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,0,e,b);!c?(c=d):c.nj(d)}return c} +function e2d(a,b,c){var d,e;e=a.b;a.b=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,3,e,b);!c?(c=d):c.nj(d)}return c} +function rAd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,1,e,b);!c?(c=d):c.nj(d)}return c} +function SNd(a){var b,c,d,e;if(a!=null){for(c=0;c<a.length;++c){b=a[c];if(b){RD(b.g,379);e=b.i;for(d=0;d<e;++d);}}}} +function Vnb(a,b,c,d,e,f,g,h){var i;i=c;while(f<g){i>=d||b<c&&h.Ne(a[b],a[i])<=0?bD(e,f++,a[b++]):bD(e,f++,a[i++])}} +function Njb(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=Pjb(e,c,d,a[0])):d==1?(e[b]=Pjb(e,a,b,c[0])):Ojb(a,c,e,b,d)} +function w9c(a,b,c){var d,e,f,g;d=c/a.gc();e=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),186);Gad(f,f.f+d*e);Dad(f,b,d);++e}} +function cad(a){var b,c,d;d=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);d=$wnd.Math.max(d,b.g)}return d} +function EKc(a){var b,c,d;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),219);b=c.c.kg()?c.f:c.a;!!b&&MLc(b,c.j)}} +function lDc(){lDc=geb;iDc=new nDc('DUMMY_NODE_OVER',0);jDc=new nDc('DUMMY_NODE_UNDER',1);kDc=new nDc('EQUAL',2)} +function mqd(){mqd=geb;kqd=new nqd('PARALLEL_NODE',0);jqd=new nqd('HIERARCHICAL_NODE',1);lqd=new nqd('ROOT_NODE',2)} +function Fnd(){Fnd=geb;Dnd=new Gnd('INHERIT',0);Cnd=new Gnd('INCLUDE_CHILDREN',1);End=new Gnd('SEPARATE_CHILDREN',2)} +function hyd(a,b){switch(b){case 1:!a.n&&(a.n=new C5d(I4,a,1,7));sLd(a.n);return;case 2:jyd(a,null);return;}Exd(a,b)} +function c9c(a){switch(a.g){case 0:return new R8c;case 1:return new o9c;case 2:return new X8c;default:return null;}} +function eq(a){_l();switch(a.c){case 0:return Px(),Ox;case 1:return new Fy(Ir(new Osb(a)));default:return new dq(a);}} +function go(a){_l();switch(a.gc()){case 0:return Px(),Ox;case 1:return new Fy(a.Kc().Pb());default:return new Qx(a);}} +function Pm(a){var b;switch(a.gc()){case 0:return sm;case 1:return new Dy(Qb(a.Xb(0)));default:b=a;return new Kx(b);}} +function sgb(a){var b,c;if(a>-129&&a<128){return ugb(),b=a+128,c=tgb[b],!c&&(c=tgb[b]=new fgb(a)),c}return new fgb(a)} +function bhb(a){var b,c;if(a>-129&&a<128){return dhb(),b=a+128,c=chb[b],!c&&(c=chb[b]=new Xgb(a)),c}return new Xgb(a)} +function M$b(a,b){var c;if(a.a.c.length>0){c=RD(Vmb(a.a,a.a.c.length-1),579);if(Q_b(c,b)){return}}Rmb(a.a,new S_b(b))} +function Ekc(a){lkc();var b,c;b=a.d.c-a.e.c;c=RD(a.g,154);Umb(c.b,new Ykc(b));Umb(c.c,new $kc(b));xgb(c.i,new alc(b))} +function Mlc(a){var b;b=new bib;b.a+='VerticalSegment ';Yhb(b,a.e);b.a+=' ';Zhb(b,Eb(new Gb,new Anb(a.k)));return b.a} +function Fmc(a,b){var c,d,e;c=0;for(e=b3b(a,b).Kc();e.Ob();){d=RD(e.Pb(),12);c+=mQb(d,(Ywc(),Iwc))!=null?1:0}return c} +function VTc(a,b,c){var d,e,f;d=0;for(f=Sub(a,0);f.b!=f.d.c;){e=Kfb(UD(evb(f)));if(e>c){break}else e>=b&&++d}return d} +function Wv(b,c){Qb(b);try{return b._b(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} +function Nk(b,c){Qb(b);try{return b.Hc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} +function Ok(b,c){Qb(b);try{return b.Mc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} +function Xv(b,c){Qb(b);try{return b.xc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return null}else throw Adb(a)}} +function Yv(b,c){Qb(b);try{return b.Bc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return null}else throw Adb(a)}} +function aMc(a,b){switch(b.g){case 2:case 1:return b3b(a,b);case 3:case 4:return hv(b3b(a,b));}return yob(),yob(),vob} +function QAd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (name: ';Nhb(b,a.zb);b.a+=')';return b.a} +function Fgd(a){var b;b=RD(cub(a.c.c,''),233);if(!b){b=new fgd(ogd(ngd(new pgd,''),'Other'));dub(a.c.c,'',b)}return b} +function hBd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,4,e,b);!c?(c=d):c.nj(d)}return c} +function ZVd(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,8,e,a.r);!c?(c=d):c.nj(d)}return c} +function q5d(a,b,c){var d,e;d=new P3d(a.e,4,13,(e=b.c,e?e:(JTd(),wTd)),null,fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function p5d(a,b,c){var d,e;d=new P3d(a.e,3,13,null,(e=b.c,e?e:(JTd(),wTd)),fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function Oee(a,b){var c,d;c=RD(b,691);d=c.el();!d&&c.fl(d=ZD(b,90)?new afe(a,RD(b,29)):new mfe(a,RD(b,156)));return d} +function KHd(a,b,c){var d;a._i(a.i+1);d=a.Zi(b,c);b!=a.i&&hib(a.g,b,a.g,b+1,a.i-b);bD(a.g,b,d);++a.i;a.Mi(b,c);a.Ni()} +function Hyb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new dib(a.d)):Zhb(a.a,a.b);Xhb(a.a,b.a,b.d.length,c)}return a} +function wib(a,b){var c;a.c=b;a.a=pjb(b);a.a<54&&(a.f=(c=b.d>1?DFb(b.a[0],b.a[1]):DFb(b.a[0],0),Xdb(b.e>0?c:Odb(c))))} +function MDb(a,b){var c;c=new IEb;if(!a.a.Bd(c)){LCb(a);return Kvb(),Kvb(),Jvb}return Kvb(),new Ovb(uFb(LDb(a,c.a,b)))} +function t9b(a,b){var c;if(a.c.length==0){return}c=RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199);Znb(c,new F9b);q9b(c,b)} +function z9b(a,b){var c;if(a.c.length==0){return}c=RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199);Znb(c,new K9b);q9b(c,b)} +function pb(a,b){return bE(a)?lhb(a,b):_D(a)?Lfb(a,b):$D(a)?(uFb(a),dE(a)===dE(b)):YD(a)?a.Fb(b):aD(a)?mb(a,b):Hz(a,b)} +function Cvd(a,b,c){if(b<0){Tvd(a,c)}else{if(!c.rk()){throw Adb(new agb(KHe+c.xe()+LHe))}RD(c,69).wk().Ek(a,a.hi(),b)}} +function xFb(a,b,c){if(a<0||b>c){throw Adb(new veb(_xe+a+bye+b+', size: '+c))}if(a>b){throw Adb(new agb(_xe+a+aye+b))}} +function oVd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (source: ';Nhb(b,a.d);b.a+=')';return b.a} +function JSd(a){if(a>=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function lMb(a){hMb();var b,c,d,e;for(c=nMb(),d=0,e=c.length;d<e;++d){b=c[d];if(Wmb(b.a,a,0)!=-1){return b}}return gMb} +function zde(a,b){var c,d,e,f;b.ej(a.a);f=RD(Ywd(a.a,8),2035);if(f!=null){for(c=f,d=0,e=c.length;d<e;++d){null.Um()}}} +function _Vd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,2,c,b))} +function EYd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,8,c,b))} +function j1d(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,8,c,b))} +function aWd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,3,c,b))} +function FYd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,9,c,b))} +function m2d(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,5,e,a.a);!c?(c=d):oKd(c,d)}return c} +function kle(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.pk();a.b=!c?BYd(a.c.Dh(),a.a):a.c.Hh(a.a.Lj(),c)}return a.c.yh(a.b,b)} +function t0d(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),29);if(dE(b)===dE(c)){return true}}return false} +function a9b(a){var b,c;b=a.k;if(b==(r3b(),m3b)){c=RD(mQb(a,(Ywc(),hwc)),64);return c==(qpd(),Yod)||c==npd}return false} +function QCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(Idb(b.a,0)?Orb(b)/Xdb(b.a):0)} +function Aib(a,b){this.e=b;this.a=Dib(a);this.a<54?(this.f=Xdb(a)):(this.c=(Pib(),Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a)))))} +function G0b(a,b,c,d,e,f){this.e=new bnb;this.f=(BEc(),AEc);Rmb(this.e,a);this.d=b;this.a=c;this.b=d;this.f=e;this.c=f} +function bQb(a,b,c){a.n=YC(lE,[Nve,rxe],[376,28],14,[c,eE($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} +function ggb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function C4d(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),142);if(dE(b)===dE(c)){return true}}return false} +function Iee(a,b,c){var d,e,f;f=(e=N5d(a.b,b),e);if(f){d=RD(tfe(Pee(a,f),''),29);if(d){return Ree(a,d,b,c)}}return null} +function Lee(a,b,c){var d,e,f;f=(e=N5d(a.b,b),e);if(f){d=RD(tfe(Pee(a,f),''),29);if(d){return See(a,d,b,c)}}return null} +function IDd(a,b){var c;c=Ao(a.i,b);if(c==null){throw Adb(new CDd('Node did not exist in input.'))}wEd(b,c);return null} +function wvd(a,b){var c;c=wYd(a,b);if(ZD(c,331)){return RD(c,35)}throw Adb(new agb(KHe+b+"' is not a valid attribute"))} +function VGd(a,b,c){var d;d=a.gc();if(b>d)throw Adb(new aMd(b,d));if(a.Si()&&a.Hc(c)){throw Adb(new agb(LIe))}a.Gi(b,c)} +function w7b(a,b){b.Ug('Sort end labels',1);FDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new H7b),new J7b),new L7b);b.Vg()} +function Cmd(){Cmd=geb;Amd=new Gmd(Sye,0);zmd=new Gmd(Oye,1);ymd=new Gmd(Nye,2);xmd=new Gmd(Zye,3);Bmd=new Gmd('UP',4)} +function gbd(){gbd=geb;dbd=new hbd('P1_STRUCTURE',0);ebd=new hbd('P2_PROCESSING_ORDER',1);fbd=new hbd('P3_EXECUTION',2)} +function r0c(){r0c=geb;q0c=mfd(mfd(rfd(mfd(mfd(rfd(pfd(new ufd,(YVc(),VVc),(WYc(),VYc)),WVc),RYc),TYc),XVc),NYc),UYc)} +function s8b(a){switch(RD(mQb(a,(Ywc(),owc)),311).g){case 1:pQb(a,owc,(Gvc(),Dvc));break;case 2:pQb(a,owc,(Gvc(),Fvc));}} +function bUc(a){switch(a){case 0:return new mUc;case 1:return new cUc;case 2:return new hUc;default:throw Adb(new _fb);}} +function Fmd(a){switch(a.g){case 2:return zmd;case 1:return ymd;case 4:return xmd;case 3:return Bmd;default:return Amd;}} +function UNb(a,b){switch(a.b.g){case 0:case 1:return b;case 2:case 3:return new Uid(b.d,0,b.a,b.b);default:return null;}} +function rpd(a){switch(a.g){case 1:return ppd;case 2:return Yod;case 3:return Xod;case 4:return npd;default:return opd;}} +function spd(a){switch(a.g){case 1:return npd;case 2:return ppd;case 3:return Yod;case 4:return Xod;default:return opd;}} +function tpd(a){switch(a.g){case 1:return Xod;case 2:return npd;case 3:return ppd;case 4:return Yod;default:return opd;}} +function cyd(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new C5d(I4,a,1,7)),a.n;case 2:return a.k;}return Axd(a,b,c,d)} +function uLd(a,b,c){var d,e;if(a.Pj()){e=a.Qj();d=SHd(a,b,c);a.Jj(a.Ij(7,sgb(c),d,b,e));return d}else{return SHd(a,b,c)}} +function VNd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.ld();c=b.Bi();d=(c&lve)%a.d.length;iOd(a,d,XNd(a,d,c,e))}} +function xWd(a,b){var c;c=(a.Bb&gwe)!=0;b?(a.Bb|=gwe):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,10,c,b))} +function DWd(a,b){var c;c=(a.Bb&qxe)!=0;b?(a.Bb|=qxe):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,12,c,b))} +function EWd(a,b){var c;c=(a.Bb&bKe)!=0;b?(a.Bb|=bKe):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,15,c,b))} +function FWd(a,b){var c;c=(a.Bb&cKe)!=0;b?(a.Bb|=cKe):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,11,c,b))} +function zKc(a){var b;if(a.g){b=a.c.kg()?a.f:a.a;BKc(b.a,a.o,true);BKc(b.a,a.o,false);pQb(a.o,(yCc(),BBc),(Bod(),vod))}} +function Orc(a){var b;if(!a.a){throw Adb(new dgb('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;Qrc(a,b);Rrc(a,b)} +function JDd(a,b){var c;c=Wjb(a.k,b);if(c==null){throw Adb(new CDd('Port did not exist in input.'))}wEd(b,c);return null} +function Jje(a){var b,c;for(c=Kje(BXd(a)).Kc();c.Ob();){b=WD(c.Pb());if(bAd(a,b)){return USd((TSd(),SSd),b)}}return null} +function qJb(a){var b,c;for(c=a.p.a.ec().Kc();c.Ob();){b=RD(c.Pb(),218);if(b.f&&a.b[b.c]<-1.0E-10){return b}}return null} +function Lr(a){var b,c;c=Thb(new bib,91);b=true;while(a.Ob()){b||(c.a+=pve,c);b=false;Yhb(c,a.Pb())}return (c.a+=']',c).a} +function o_b(a){var b,c,d;b=new bnb;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),602);Tmb(b,RD(c.Cf(),16))}return b} +function TXb(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),42);Ymb(a.b.b,c.b);hYb(RD(c.a,194),RD(c.b,86))}} +function aRb(a,b){var c;c=Qfb(a.b.c,b.b.c);if(c!=0){return c}c=Qfb(a.a.a,b.a.a);if(c!=0){return c}return Qfb(a.a.b,b.a.b)} +function Qfb(a,b){if(a<b){return -1}if(a>b){return 1}if(a==b){return a==0?Qfb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} +function pmb(a){var b;b=a.a[a.c-1&a.a.length-1];if(b==null){return null}a.c=a.c-1&a.a.length-1;bD(a.a,a.c,null);return b} +function Dqe(a){var b,c,d;d=0;c=a.length;for(b=0;b<c;b++){a[b]==32||a[b]==13||a[b]==10||a[b]==9||(a[d++]=a[b])}return d} +function Nge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);f=0;c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];g.am(d.Lk())&&++f}return f} +function tge(a,b,c){var d,e;e=ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a);for(d=0;d<c;++d){Dhe(e)}return e} +function yrd(a,b,c){var d,e;if(a.c){Isd(a.c,b,c)}else{for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),163);yrd(d,b,c)}}} +function tGd(a,b,c){var d,e;d=RD(b.of(a.a),34);e=RD(c.of(a.a),34);return d!=null&&e!=null?Leb(d,e):d!=null?-1:e!=null?1:0} +function Ce(a,b){var c,d,e;uFb(b);c=false;for(d=new Anb(a);d.a<d.c.c.length;){e=ynb(d);if(b.Hc(e)){znb(d);c=true}}return c} +function xsb(a){var b,c,d,e;c=(b=RD(mfb((d=a.Rm,e=d.f,e==WI?d:e)),9),new Fsb(b,RD(WEb(b,b.length),9),0));zsb(c,a);return c} +function i2b(a){var b,c;c=RD(mQb(a,(yCc(),rAc)),88);if(c==(Cmd(),Amd)){b=Kfb(UD(mQb(a,Tzc)));return b>=1?zmd:xmd}return c} +function Xhc(a){switch(RD(mQb(a,(yCc(),yAc)),223).g){case 1:return new jqc;case 3:return new arc;default:return new dqc;}} +function MCb(a){if(a.c){MCb(a.c)}else if(a.d){throw Adb(new dgb("Stream already terminated, can't be modified or used"))}} +function Ltb(a,b,c){var d;d=a.a.get(b);a.a.set(b,c===undefined?null:c);if(d===undefined){++a.c;++a.b.g}else{++a.d}return d} +function HHc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),10);if(Be(c,RD(Vmb(b,d.p),16))){return d}}return null} +function u0c(a,b,c){var d;d=0;!!b&&(Emd(a.a)?(d+=b.f.a/2):(d+=b.f.b/2));!!c&&(Emd(a.a)?(d+=c.f.a/2):(d+=c.f.b/2));return d} +function LWb(a,b,c){var d;d=c;!d&&(d=Nqd(new Oqd,0));d.Ug(EAe,2);y0b(a.b,b,d.eh(1));NWb(a,b,d.eh(1));h0b(b,d.eh(1));d.Vg()} +function CGd(a,b,c){var d,e;d=(bvd(),e=new Xxd,e);Vxd(d,b);Wxd(d,c);!!a&&WGd((!a.a&&(a.a=new XZd(D4,a,5)),a.a),d);return d} +function kyd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (identifier: ';Nhb(b,a.k);b.a+=')';return b.a} +function kXd(a,b){var c;c=(a.Bb&QHe)!=0;b?(a.Bb|=QHe):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,18,c,b))} +function a6d(a,b){var c;c=(a.Bb&QHe)!=0;b?(a.Bb|=QHe):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,18,c,b))} +function AWd(a,b){var c;c=(a.Bb&Ove)!=0;b?(a.Bb|=Ove):(a.Bb&=-16385);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,16,c,b))} +function c6d(a,b){var c;c=(a.Bb&txe)!=0;b?(a.Bb|=txe):(a.Bb&=-65537);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,20,c,b))} +function qse(a){var b;b=$C(hE,zwe,28,2,15,1);a-=txe;b[0]=(a>>10)+uxe&Bwe;b[1]=(a&1023)+56320&Bwe;return Ihb(b,0,b.length)} +function Zfb(a){var b;b=Neb(a);if(b>3.4028234663852886E38){return oxe}else if(b<-3.4028234663852886E38){return pxe}return b} +function Bdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a+b;if(jxe<c&&c<hxe){return c}}return Edb(sD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function Ndb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a*b;if(jxe<c&&c<hxe){return c}}return Edb(wD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function Vdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a-b;if(jxe<c&&c<hxe){return c}}return Edb(DD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function b3b(a,b){var c;a.i||V2b(a);c=RD(Vrb(a.g,b),42);return !c?(yob(),yob(),vob):new Rkb(a.j,RD(c.a,17).a,RD(c.b,17).a)} +function ZXb(a){NXb();return Geb(),IYb(RD(a.a,86).j,RD(a.b,88))||RD(a.a,86).d.e!=0&&IYb(RD(a.a,86).j,RD(a.b,88))?true:false} +function pWc(a,b){return lhb(!!b.b&&!!b.c?aXc(b.b)+'->'+aXc(b.c):'e_'+tb(b),!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))} +function rWc(a,b){return lhb(!!b.b&&!!b.c?aXc(b.b)+'->'+aXc(b.c):'e_'+tb(b),!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))} +function $y(a,b){Zy();return bz(pwe),$wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b))} +function Ymd(){Ymd=geb;Xmd=new Zmd(Sye,0);Vmd=new Zmd('POLYLINE',1);Umd=new Zmd('ORTHOGONAL',2);Wmd=new Zmd('SPLINES',3)} +function _6c(){_6c=geb;Z6c=new a7c('ASPECT_RATIO_DRIVEN',0);$6c=new a7c('MAX_SCALE_DRIVEN',1);Y6c=new a7c('AREA_DRIVEN',2)} +function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=zdb(a);if(ZD(a,606)){e=a;throw Adb(new Deb(e))}else throw Adb(a)}return c} +function Im(a){var b,c,d;for(c=0,d=a.length;c<d;c++){if(a[c]==null){throw Adb(new Ogb('at index '+c))}}b=a;return new mob(b)} +function W2b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.b)}return Qb(b),new Dl(b)} +function Z2b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.e)}return Qb(b),new Dl(b)} +function a3b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.g)}return Qb(b),new Dl(b)} +function MBb(a,b){var c,d,e;e=new Tsb;for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);Zjb(e,c.ld(),QBb(a,RD(c.md(),15)))}return e} +function Mje(a){var b,c;for(c=Nje(BXd(uWd(a))).Kc();c.Ob();){b=WD(c.Pb());if(bAd(a,b))return dTd((cTd(),bTd),b)}return null} +function Cgc(a,b){var c,d,e;e=0;for(d=RD(b.Kb(a),20).Kc();d.Ob();){c=RD(d.Pb(),18);Heb(TD(mQb(c,(Ywc(),Nwc))))||++e}return e} +function Uv(a){var b,c,d,e;b=new oq(a.Rd().gc());e=0;for(d=Nr(a.Rd().Kc());d.Ob();){c=d.Pb();nq(b,c,sgb(e++))}return sn(b.a)} +function Cvb(a,b,c,d){var e,f;uFb(d);uFb(c);e=a.xc(b);f=e==null?c:EBb(RD(e,15),RD(c,16));f==null?a.Bc(b):a.zc(b,f);return f} +function Unb(a,b,c,d){var e,f,g;for(e=b+1;e<c;++e){for(f=e;f>b&&d.Ne(a[f-1],a[f])>0;--f){g=a[f];bD(a,f,a[f-1]);bD(a,f-1,g)}}} +function Egd(a,b){var c,d,e,f,g;c=b.f;dub(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;f<g;++f){d=e[f];dub(a.c.e,d,b)}}} +function YSc(a,b){var c,d;c=Sub(a,0);while(c.b!=c.d.c){d=Mfb(UD(evb(c)));if(d==b){return}else if(d>b){fvb(c);break}}cvb(c,b)} +function Kic(a,b){var c,d,e;d=Zjc(b);e=Kfb(UD(hFc(d,(yCc(),TBc))));c=$wnd.Math.max(0,e/2-0.5);Iic(b,c,1);Rmb(a,new hjc(b,c))} +function L5c(a,b,c){var d;c.Ug('Straight Line Edge Routing',1);c.dh(b,eFe);d=RD(Gxd(b,(u2c(),t2c)),27);M5c(a,d);c.dh(b,gFe)} +function K9c(a,b){a.n.c.length==0&&Rmb(a.n,new _9c(a.s,a.t,a.i));Rmb(a.b,b);W9c(RD(Vmb(a.n,a.n.c.length-1),209),b);M9c(a,b)} +function Zrb(a){var b;this.a=(b=RD(a.e&&a.e(),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.b=$C(jJ,rve,1,this.a.a.length,5,1)} +function jeb(a){var b;if(Array.isArray(a)&&a.Tm===keb){return nfb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} +function jD(a,b){if(a.h==fxe&&a.m==0&&a.l==0){b&&(eD=hD(0,0,0));return gD((MD(),KD))}b&&(eD=hD(a.l,a.m,a.h));return hD(0,0,0)} +function _Gb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function IYb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function vyd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return cyd(a,b,c,d)} +function oIb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw Adb(new agb('Node '+b+' not part of edge '+a))}} +function Uvd(a,b){var c;c=wYd(a.Dh(),b);if(ZD(c,102)){return RD(c,19)}throw Adb(new agb(KHe+b+"' is not a valid reference"))} +function Bvd(a,b,c,d){if(b<0){Svd(a,c,d)}else{if(!c.rk()){throw Adb(new agb(KHe+c.xe()+LHe))}RD(c,69).wk().Ck(a,a.hi(),b,d)}} +function ig(a){var b;if(a.b){ig(a.b);if(a.b.d!=a.c){throw Adb(new Jrb)}}else if(a.d.dc()){b=RD(a.f.c.xc(a.e),16);!!b&&(a.d=b)}} +function VMb(a){RMb();var b,c,d,e;b=a.o.b;for(d=RD(RD(Qc(a.r,(qpd(),npd)),21),87).Kc();d.Ob();){c=RD(d.Pb(),117);e=c.e;e.b+=b}} +function SRb(a){var b,c,d;this.a=new Iub;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),16);b=new DRb;xRb(b,c);Ysb(this.a,b)}} +function fdc(a,b){var c,d,e;d=cdc(a,b);e=d[d.length-1]/2;for(c=0;c<d.length;c++){if(d[c]>=e){return b.c+c}}return b.c+b.b.gc()} +function lQd(a,b){jQd();var c,d,e,f;d=iZd(a);e=b;Wnb(d,0,d.length,e);for(c=0;c<d.length;c++){f=kQd(a,d[c],c);c!=f&&uLd(a,c,f)}} +function mSd(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++){if(zSd((BFb(d,a.length),a.charCodeAt(d)),b,c))return true}return false} +function ARb(a,b){var c,d;for(d=a.e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),272);if(Eid(b,c.d)||zid(b,c.d)){return true}}return false} +function oMc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=RD(smb(b),10);h=RD(b3b(f,d).Xb(0),12);a.d[h.p]=g++;ZEb(c.c,h)}return g} +function vKb(a,b){var c,d,e,f,g,h;d=0;c=0;for(f=b,g=0,h=f.length;g<h;++g){e=f[g];if(e>0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function FFd(a){var b,c,d,e,f;f=HFd(a);c=cve(a.c);d=!c;if(d){e=new MB;sC(f,'knownLayouters',e);b=new QFd(e);xgb(a.c,b)}return f} +function fHd(a){var b,c,d;d=new Qhb;d.a+='[';for(b=0,c=a.gc();b<c;){Nhb(d,Ghb(a.Vi(b)));++b<c&&(d.a+=pve,d)}d.a+=']';return d.a} +function kSd(a){if(a.e==null){return a}else !a.c&&(a.c=new lSd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} +function pnc(a){if(a.k!=(r3b(),p3b)){return false}return yDb(new SDb(null,new Twb(new is(Mr(a3b(a).a.Kc(),new ir)))),new qnc)} +function hv(a){var b,c;if(ZD(a,306)){c=vm(RD(a,306));b=c;return b}else return ZD(a,441)?RD(a,441).a:ZD(a,59)?new Fv(a):new uv(a)} +function FSd(a){var b;if(a==null)return true;b=a.length;return b>0&&(BFb(b-1,a.length),a.charCodeAt(b-1)==58)&&!mSd(a,aSd,bSd)} +function Sib(a,b){var c;if(dE(a)===dE(b)){return true}if(ZD(b,92)){c=RD(b,92);return a.e==c.e&&a.d==c.d&&Tib(a,c.a)}return false} +function vpd(a){qpd();switch(a.g){case 4:return Yod;case 1:return Xod;case 3:return npd;case 2:return ppd;default:return opd;}} +function jBb(a){var b,c;if(a.b){return a.b}c=dBb?null:a.d;while(c){b=dBb?null:c.b;if(b){return b}c=dBb?null:c.d}return SAb(),RAb} +function LJb(a){var b,c,d;d=Kfb(UD(a.a.of((umd(),cmd))));for(c=new Anb(a.a.Sf());c.a<c.c.c.length;){b=RD(ynb(c),695);OJb(a,b,d)}} +function jz(a){var b,c,d,e;for(b=(a.j==null&&(a.j=(fA(),e=eA.me(a),hA(e))),a.j),c=0,d=b.length;c<d;++c){String.fromCharCode(10)}} +function OXb(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),42);Rmb(a.b.b,RD(c.b,86));gYb(RD(c.a,194),RD(c.b,86))}} +function nHc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Qmb(e,0,new R4b(a.a))}g3b(b,RD(Vmb(e,e.c.length-c),30));a.b[b.p]=c} +function EOc(a,b,c,d,e){dOc();rIb(uIb(tIb(sIb(vIb(new wIb,0),e.d.e-a),b),e.d));rIb(uIb(tIb(sIb(vIb(new wIb,0),c-e.a.e),e.a),d))} +function Ted(a,b){var c;if(a.d){if(Ujb(a.b,b)){return RD(Wjb(a.b,b),47)}else{c=b.dg();Zjb(a.b,b,c);return c}}else{return b.dg()}} +function hFb(b){var c=b.e;function d(a){if(!a||a.length==0){return ''}return '\t'+a.join('\n\t')} +return c&&(c.stack||d(b[xwe]))} +function wyd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return fyd(a,b)} +function y2c(a){switch(a.g){case 0:return new D5c;case 1:return new N5c;default:throw Adb(new agb(lBe+(a.f!=null?a.f:''+a.g)));}} +function Z3c(a){switch(a.g){case 0:return new G5c;case 1:return new J5c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function h4c(a){switch(a.g){case 1:return new F3c;case 2:return new x3c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function mdd(a){switch(a.g){case 0:return new Ddd;case 1:return new Hdd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} +function Owb(){Hwb();var a,b,c;c=Gwb+++Date.now();a=eE($wnd.Math.floor(c*Nxe))&Pxe;b=eE(c-a*Oxe);this.a=a^1502;this.b=b^Mxe} +function cxc(){cxc=geb;bxc=new dxc(LAe,0);Zwc=new dxc('FIRST',1);$wc=new dxc(oBe,2);_wc=new dxc('LAST',3);axc=new dxc(pBe,4)} +function Grd(){Grd=geb;Frd=new Hrd(mEe,0);Crd=new Hrd('GROUP_DEC',1);Erd=new Hrd('GROUP_MIXED',2);Drd=new Hrd('GROUP_INC',3)} +function cEd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new wFd(a);Ozd(c.a,(uFb(e),e));f=vDd(b,'y');d=new zFd(a);Pzd(d.a,(uFb(f),f))}} +function nEd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new BFd(a);Hzd(c.a,(uFb(e),e));f=vDd(b,'y');d=new CFd(a);Izd(d.a,(uFb(f),f))}} +function Sje(a,b){var c,d,e,f;e=new cnb(b.gc());for(d=b.Kc();d.Ob();){c=d.Pb();f=Rje(a,RD(c,58));!!f&&(ZEb(e.c,f),true)}return e} +function ze(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=e.Pb();if(dE(b)===dE(d)||b!=null&&pb(b,d)){c&&e.Qb();return true}}return false} +function Y5b(a){var b,c,d;c=a.jh();if(c){b=a.Eh();if(ZD(b,167)){d=Y5b(RD(b,167));if(d!=null){return d+'.'+c}}return c}return null} +function pjb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Uib(a);if(d==a.d-1){--c;c=c|0}}b-=ngb(c);return b} +function kjb(a){var b,c,d;if(a<Nib.length){return Nib[a]}c=a>>5;b=a&31;d=$C(kE,Pwe,28,c+1,15,1);d[c]=1<<b;return new cjb(1,c+1,d)} +function eLd(a,b){var c,d;if(!b){return false}else{for(c=0;c<a.i;++c){d=RD(a.g[c],378);if(d.mj(b)){return false}}return WGd(a,b)}} +function ZId(a,b,c){var d,e;++a.j;if(c.dc()){return false}else{for(e=c.Kc();e.Ob();){d=e.Pb();a.qj(b,a.Zi(b,d));++b}return true}} +function OA(a,b,c,d){var e,f;f=c-b;if(f<3){while(f<3){a*=10;++f}}else{e=1;while(f>3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function BYd(a,b){var c,d,e;c=(a.i==null&&rYd(a),a.i);d=b.Lj();if(d!=-1){for(e=c.length;d<e;++d){if(c[d]==b){return d}}}return -1} +function T$d(a){var b,c,d,e,f;c=RD(a.g,689);for(d=a.i-1;d>=0;--d){b=c[d];for(e=0;e<d;++e){f=c[e];if(U$d(a,b,f)){THd(a,d);break}}}} +function PId(a){var b,c,d,e;b=new MB;for(e=new Ppb(a.b.Kc());e.b.Ob();){d=RD(e.b.Pb(),701);c=LFd(d);KB(b,b.a.length,c)}return b.a} +function VNb(a){var b;!a.c&&(a.c=new MNb);_mb(a.d,new aOb);SNb(a);b=LNb(a);FDb(new SDb(null,new Swb(a.d,16)),new tOb(a));return b} +function I6b(a,b){b.Ug('End label post-processing',1);FDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new N6b),new P6b),new R6b);b.Vg()} +function RCc(a){QCc();this.c=dv(cD(WC(g2,1),rve,845,0,[FCc]));this.b=new Tsb;this.a=a;Zjb(this.b,OCc,1);Umb(PCc,new $rd(this))} +function wKb(a,b,c){kKb();fKb.call(this);this.a=YC(IN,[Nve,Mye],[603,217],0,[jKb,iKb],2);this.c=new Tid;this.g=a;this.f=b;this.d=c} +function gQb(a,b){this.n=YC(lE,[Nve,rxe],[376,28],14,[b,eE($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} +function Dfd(a){Afd();if(RD(a.of((umd(),pld)),181).Hc((dqd(),bqd))){RD(a.of(Lld),181).Fc((Pod(),Ood));RD(a.of(pld),181).Mc(bqd)}} +function ndc(a){var b,c;b=a.d==(btc(),Ysc);c=jdc(a);b&&!c||!b&&c?pQb(a.a,(yCc(),Rzc),(Rjd(),Pjd)):pQb(a.a,(yCc(),Rzc),(Rjd(),Ojd))} +function QCc(){QCc=geb;GCc();OCc=(yCc(),bCc);PCc=dv(cD(WC(V5,1),kEe,149,0,[SBc,TBc,VBc,WBc,ZBc,$Bc,_Bc,aCc,dCc,fCc,UBc,XBc,cCc]))} +function RDb(a,b){var c;c=RD(zDb(a,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);return c.Qc(__c(c.gc()))} +function nXc(a,b){var c,d;d=new zAb(a.a.ad(b,true));if(d.a.gc()<=1){throw Adb(new Ngb)}c=d.a.ec().Kc();c.Pb();return RD(c.Pb(),39)} +function lQc(a,b,c){var d,e;d=Kfb(a.p[b.i.p])+Kfb(a.d[b.i.p])+b.n.b+b.a.b;e=Kfb(a.p[c.i.p])+Kfb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} +function XHd(a,b){var c;if(a.i>0){if(b.length<a.i){c=IMd(rb(b).c,a.i);b=c}hib(a.g,0,b,0,a.i)}b.length>a.i&&bD(b,a.i,null);return b} +function MXd(a){var b;if((a.Db&64)!=0)return QAd(a);b=new Shb(QAd(a));b.a+=' (instanceClassName: ';Nhb(b,a.D);b.a+=')';return b.a} +function ySd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BFb(c,a.length),a.charCodeAt(c));b<64&&(e=Rdb(e,Sdb(1,b)))}return e} +function Fjb(a,b,c){var d,e;d=Cdb(c,yxe);for(e=0;Ddb(d,0)!=0&&e<b;e++){d=Bdb(d,Cdb(a[e],yxe));a[e]=Ydb(d);d=Tdb(d,32)}return Ydb(d)} +function pge(a,b){var c,d,e,f;f=pke(a.e.Dh(),b);c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];if(f.am(d.Lk())){return false}}return true} +function QNd(a,b){var c,d,e;if(a.f>0){a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=XNd(a,e,d,b);return c!=-1}else{return false}} +function Nrb(a,b){var c,d;a.a=Bdb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d+=b;c=b-a.f;d=a.e+c;a.f=d-a.e-c;a.e=d} +function yyd(a,b){switch(b){case 3:Ayd(a,0);return;case 4:Cyd(a,0);return;case 5:Dyd(a,0);return;case 6:Eyd(a,0);return;}hyd(a,b)} +function c3b(a,b){switch(b.g){case 1:return dr(a.j,(J3b(),E3b));case 2:return dr(a.j,(J3b(),G3b));default:return yob(),yob(),vob;}} +function zm(a){tm();var b;b=a.Pc();switch(b.length){case 0:return sm;case 1:return new Dy(Qb(b[0]));default:return new Kx(Im(b));}} +function kMd(b,c){b.Xj();try{b.d.bd(b.e++,c);b.f=b.d.j;b.g=-1}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} +function a8d(){a8d=geb;$7d=new b8d;T7d=new e8d;U7d=new h8d;V7d=new k8d;W7d=new n8d;X7d=new q8d;Y7d=new t8d;Z7d=new w8d;_7d=new z8d} +function YA(a,b){WA();var c,d;c=_A(($A(),$A(),ZA));d=null;b==c&&(d=RD(Xjb(VA,a),624));if(!d){d=new XA(a);b==c&&$jb(VA,a,d)}return d} +function zDc(a){wDc();var b;(!a.q?(yob(),yob(),wob):a.q)._b((yCc(),iBc))?(b=RD(mQb(a,iBc),203)):(b=RD(mQb(Y2b(a),jBc),203));return b} +function hFc(a,b){var c,d;d=null;if(nQb(a,(yCc(),YBc))){c=RD(mQb(a,YBc),96);c.pf(b)&&(d=c.of(b))}d==null&&(d=mQb(Y2b(a),b));return d} +function Ze(a,b){var c,d,e;if(ZD(b,44)){c=RD(b,44);d=c.ld();e=Xv(a.Rc(),d);return Hb(e,c.md())&&(e!=null||a.Rc()._b(d))}return false} +function $Nd(a,b){var c,d,e;if(a.f>0){a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=WNd(a,e,d,b);if(c){return c.md()}}return null} +function qLd(a,b,c){var d,e,f;if(a.Pj()){d=a.i;f=a.Qj();KHd(a,d,b);e=a.Ij(3,null,b,d,f);!c?(c=e):c.nj(e)}else{KHd(a,a.i,b)}return c} +function f$d(a,b,c){var d,e;d=new P3d(a.e,4,10,(e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)),null,fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function e$d(a,b,c){var d,e;d=new P3d(a.e,3,10,null,(e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)),fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function SMb(a){RMb();var b;b=new sjd(RD(a.e.of((umd(),nld)),8));if(a.B.Hc((dqd(),Ypd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} +function jjb(a){Pib();var b,c;c=Ydb(a);b=Ydb(Udb(a,32));if(b!=0){return new bjb(c,b)}if(c>10||c<0){return new ajb(1,c)}return Lib[c]} +function Mdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a%b;if(jxe<c&&c<hxe){return c}}return Edb((iD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b,true),eD))} +function G8b(a,b){var c;D8b(b);c=RD(mQb(a,(yCc(),xAc)),283);!!c&&pQb(a,xAc,uuc(c));E8b(a.c);E8b(a.f);F8b(a.d);F8b(RD(mQb(a,cBc),214))} +function y7b(a){var b,c,d,e;d=t7b(a);_mb(d,r7b);e=a.d;e.c.length=0;for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),465);Tmb(e,b.b)}} +function cmc(a){var b;if(a.c==0){return}b=RD(Vmb(a.a,a.b),293);b.b==1?(++a.b,a.b<a.a.c.length&&gmc(RD(Vmb(a.a,a.b),293))):--b.b;--a.c} +function vdc(a){var b;b=a.a;do{b=RD(hs(new is(Mr(a3b(b).a.Kc(),new ir))),18).d.i;b.k==(r3b(),o3b)&&Rmb(a.e,b)}while(b.k==(r3b(),o3b))} +function RLc(a){this.e=$C(kE,Pwe,28,a.length,15,1);this.c=$C(xdb,Hye,28,a.length,16,1);this.b=$C(xdb,Hye,28,a.length,16,1);this.f=0} +function _Hc(a){var b,c;a.j=$C(iE,vxe,28,a.p.c.length,15,1);for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);a.j[b.p]=b.o.b/a.i}} +function L_c(a,b){var c,d,e,f;f=b.b.b;a.a=new Yub;a.b=$C(kE,Pwe,28,f,15,1);c=0;for(e=Sub(b.b,0);e.b!=e.d.c;){d=RD(evb(e),39);d.g=c++}} +function fad(a,b,c){var d,e,f,g;f=b-a.e;g=c-a.f;for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),172);U9c(d,d.s+f,d.t+g)}a.e=b;a.f=c} +function ose(a,b){var c,d;d=b.length;for(c=0;c<d;c+=2)rte(a,(BFb(c,b.length),b.charCodeAt(c)),(BFb(c+1,b.length),b.charCodeAt(c+1)))} +function G6c(a,b){b.Ug('Min Size Postprocessing',1);Ixd(a,(X6c(),W6c),$wnd.Math.max(Kfb(UD(Gxd(a,W6c))),Kfb(UD(Gxd(a,U6c)))));b.Vg()} +function Fpd(){Fpd=geb;Cpd=new A3b(15);Bpd=new mGd((umd(),tld),Cpd);Epd=new mGd(fmd,15);Dpd=new mGd(Sld,sgb(0));Apd=new mGd(Dkd,Yze)} +function Qpd(){Qpd=geb;Opd=new Rpd('PORTS',0);Ppd=new Rpd('PORT_LABELS',1);Npd=new Rpd('NODE_LABELS',2);Mpd=new Rpd('MINIMUM_SIZE',3)} +function f6c(){f6c=geb;c6c=new g6c('P1_WIDTH_APPROXIMATION',0);d6c=new g6c('P2_PACKING',1);e6c=new g6c('P3_WHITESPACE_ELIMINATION',2)} +function $je(a){if(a.b==null){while(a.a.Ob()){a.b=a.a.Pb();if(!RD(a.b,54).Jh()){return true}}a.b=null;return false}else{return true}} +function Pyb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ne(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function Qyb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ne(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function rmc(a,b,c,d){var e,f,g;e=false;if(Lmc(a.f,c,d)){Omc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function Nqc(a,b,c){var d,e,f,g;e=RD(Wjb(a.b,c),183);d=0;for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),113);e[f.d.p]&&++d}return d} +function lte(a,b,c){var d,e;d=RD(Xjb(wse,b),122);e=RD(Xjb(xse,b),122);if(c){$jb(wse,a,d);$jb(xse,a,e)}else{$jb(xse,a,d);$jb(wse,a,e)}} +function qjb(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=$C(kE,Pwe,28,e,15,1);rjb(d,a.a,c,b);f=new cjb(a.e,e,d);Rib(f);return f} +function zGc(a,b){var c,d,e;for(d=new is(Mr(a3b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);e=c.d.i;if(e.c==b){return false}}return true} +function _Ec(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=UD(hFc(a,d));f=UD(hFc(b,d));return $wnd.Math.max((uFb(e),e),(uFb(f),f))} +function lA(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function sGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))>0} +function uGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))<0} +function tGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))<=0} +function Efb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;c<b.length;c++){if(!b[c]||b[c]==''){continue}d+=a+b[c]}return d} +function MMd(a){var b,c;b=RD(Ywd(a.a,4),129);if(b!=null){c=$C(d6,IJe,424,b.length,0,1);hib(b,0,c,0,b.length);return c}else{return JMd}} +function kne(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} +function nne(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} +function one(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} +function vrd(a,b){var c,d,e;if(a.c){Ayd(a.c,b)}else{c=b-trd(a);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),163);vrd(d,trd(d)+c)}}} +function wrd(a,b){var c,d,e;if(a.c){Cyd(a.c,b)}else{c=b-urd(a);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),163);wrd(d,urd(d)+c)}}} +function Ihb(a,b,c){var d,e,f,g;f=b+c;AFb(b,f,a.length);g='';for(e=b;e<f;){d=$wnd.Math.min(e+10000,f);g+=Ehb(a.slice(e,d));e=d}return g} +function jMb(a){switch(a.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return true;default:return false;}} +function Ptc(){Ptc=geb;Ltc=new Rtc(CBe,0);Ktc=new Rtc(DBe,1);Ntc=new Rtc(BBe,2);Otc=new Rtc(MAe,3);Mtc=new Rtc('GREEDY_MODEL_ORDER',4)} +function kEc(){kEc=geb;hEc=new lEc(LAe,0);gEc=new lEc('NODES_AND_EDGES',1);iEc=new lEc('PREFER_EDGES',2);jEc=new lEc('PREFER_NODES',3)} +function mad(a,b,c,d,e,f){this.a=a;this.c=b;this.b=c;this.f=d;this.d=e;this.e=f;this.c>0&&this.b>0&&(this.g=Aad(this.c,this.b,this.a))} +function rC(f,a){var b=f.a;var c;a=String(a);b.hasOwnProperty(a)&&(c=b[a]);var d=(HC(),GC)[typeof c];var e=d?d(c):NC(typeof c);return e} +function uDd(a){var b,c,d;d=null;b=uIe in a.a;c=!b;if(c){throw Adb(new CDd('Every element must have an id.'))}d=tDd(qC(a,uIe));return d} +function Qqe(a){var b,c;c=Rqe(a);b=null;while(a.c==2){Mqe(a);if(!b){b=(Vse(),Vse(),++Use,new iue(2));hue(b,c);c=b}c.Jm(Rqe(a))}return c} +function jOd(a,b){var c,d,e;a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=WNd(a,e,d,b);if(c){hOd(a,c);return c.md()}else{return null}} +function Qib(a,b){if(a.e>b.e){return 1}if(a.e<b.e){return -1}if(a.d>b.d){return a.e}if(a.d<b.d){return -b.e}return a.e*Ejb(a.a,b.a,a.d)} +function dfb(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function UHc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw Adb(new agb('Input edge is not connected to the input port.'))} +function Fae(a){if(mhb(FGe,a)){return Geb(),Feb}else if(mhb(GGe,a)){return Geb(),Eeb}else{throw Adb(new agb('Expecting true or false'))}} +function jFb(a){switch(typeof(a)){case jve:return ohb(a);case ive:return Nfb(a);case hve:return Jeb(a);default:return a==null?0:kFb(a);}} +function mfd(a,b){if(a.a<0){throw Adb(new dgb('Did not call before(...) or after(...) before calling add(...).'))}tfd(a,a.a,b);return a} +function FId(a){EId();if(ZD(a,162)){return RD(Wjb(CId,zK),294).Rg(a)}if(Ujb(CId,rb(a))){return RD(Wjb(CId,rb(a)),294).Rg(a)}return null} +function Wwd(a){var b,c;if((a.Db&32)==0){c=(b=RD(Ywd(a,16),29),AYd(!b?a.ii():b)-AYd(a.ii()));c!=0&&$wd(a,32,$C(jJ,rve,1,c,5,1))}return a} +function $wd(a,b,c){var d;if((a.Db&b)!=0){if(c==null){Zwd(a,b)}else{d=Xwd(a,b);d==-1?(a.Eb=c):bD(SD(a.Eb),d,c)}}else c!=null&&Twd(a,b,c)} +function tTc(a,b,c,d){var e,f;if(b.c.length==0){return}e=pTc(c,d);f=oTc(b);FDb(PDb(new SDb(null,new Swb(f,1)),new CTc),new GTc(a,c,e,d))} +function rmb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;zmb(c<e);if(c>=f){umb(a,b);return -1}else{vmb(a,b);return 1}} +function Hvd(a){var b,c,d;d=a.Jh();if(!d){b=0;for(c=a.Ph();c;c=c.Ph()){if(++b>wxe){return c.Qh()}d=c.Jh();if(!!d||c==a){break}}}return d} +function Ue(a,b){var c;if(dE(b)===dE(a)){return true}if(!ZD(b,21)){return false}c=RD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} +function kNc(a,b){if(a.e<b.e){return -1}else if(a.e>b.e){return 1}else if(a.f<b.f){return -1}else if(a.f>b.f){return 1}return tb(a)-tb(b)} +function mhb(a,b){uFb(a);if(b==null){return false}if(lhb(a,b)){return true}return a.length==b.length&&lhb(a.toLowerCase(),b.toLowerCase())} +function Hgb(a){var b,c;if(Ddb(a,-129)>0&&Ddb(a,128)<0){return Jgb(),b=Ydb(a)+128,c=Igb[b],!c&&(c=Igb[b]=new zgb(a)),c}return new zgb(a)} +function U$b(){U$b=geb;T$b=new V$b(LAe,0);R$b=new V$b('INSIDE_PORT_SIDE_GROUPS',1);Q$b=new V$b('GROUP_MODEL_ORDER',2);S$b=new V$b(MAe,3)} +function ufe(a){var b;a.b||vfe(a,(b=Hee(a.e,a.a),!b||!lhb(GGe,$Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'qualified'))));return a.c} +function BA(a,b){var c,d;c=(BFb(b,a.length),a.charCodeAt(b));d=b+1;while(d<a.length&&(BFb(d,a.length),a.charCodeAt(d)==c)){++d}return d-b} +function dFb(a,b){(!b&&console.groupCollapsed!=null?console.groupCollapsed:console.group!=null?console.group:console.log).call(console,a)} +function EQb(a,b,c,d){d==a?(RD(c.b,68),RD(c.b,68),RD(d.b,68),RD(d.b,68).c.b):(RD(c.b,68),RD(c.b,68),RD(d.b,68),RD(d.b,68).c.b);BQb(d,b,a)} +function vRb(a){var b,c,d;b=0;for(c=new Anb(a.g);c.a<c.c.c.length;){RD(ynb(c),568);++b}d=new vQb(a.g,Kfb(a.a),a.c);vOb(d);a.g=d.b;a.d=d.a} +function Add(a,b,c){var d,e,f;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),225);d=new $Fb(RD(Wjb(a.a,e.b),68));Rmb(b.a,d);Add(a,d,e)}} +function D4d(a,b,c){var d,e,f;d=RD(QHd(o4d(a.a),b),89);f=(e=d.c,e?e:(JTd(),wTd));(f.Vh()?Vvd(a.b,RD(f,54)):f)==c?i2d(d):l2d(d,c);return f} +function cqc(a,b,c){b.b=$wnd.Math.max(b.b,-c.a);b.c=$wnd.Math.max(b.c,c.a-a.a);b.d=$wnd.Math.max(b.d,-c.b);b.a=$wnd.Math.max(b.a,c.b-a.b)} +function JXb(a,b,c){this.c=a;this.f=new bnb;this.e=new pjd;this.j=new KYb;this.n=new KYb;this.b=b;this.g=new Uid(b.c,b.d,b.b,b.a);this.a=c} +function iYb(a){var b,c,d,e;this.a=new Iub;this.d=new _sb;this.e=0;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!this.f&&(this.f=b);gYb(this,b)}} +function djb(a){Pib();if(a.length==0){this.e=0;this.d=1;this.a=cD(WC(kE,1),Pwe,28,15,[0])}else{this.e=1;this.d=a.length;this.a=a;Rib(this)}} +function dLb(a,b,c){fKb.call(this);this.a=$C(IN,Mye,217,(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])).length,0,1);this.b=a;this.d=b;this.c=c} +function zfc(a){var b,c,d,e,f,g;g=RD(mQb(a,(Ywc(),Awc)),12);pQb(g,Swc,a.i.n.b);b=s2b(a.e);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Z0b(c,g)}} +function Afc(a){var b,c,d,e,f,g;c=RD(mQb(a,(Ywc(),Awc)),12);pQb(c,Swc,a.i.n.b);b=s2b(a.g);for(e=b,f=0,g=e.length;f<g;++f){d=e[f];Y0b(d,c)}} +function dRc(a,b){WQc();var c,d;for(d=new is(Mr(W2b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(c.d.i==b||c.c.i==b){return c}}return null} +function zee(a,b){var c,d;c=b.qi(a.a);if(c){d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),GIe));if(d!=null){return d}}return b.xe()} +function Aee(a,b){var c,d;c=b.qi(a.a);if(c){d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),GIe));if(d!=null){return d}}return b.xe()} +function B7b(a,b){var c,d;c=hgb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=hgb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return hgb(b.a.d.p,a.a.d.p)} +function Wje(a,b){var c,d,e,f;for(d=0,e=b.gc();d<e;++d){c=b.Tl(d);if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0){f=b.Ul(d);f!=null&&Rje(a,RD(f,58))}}} +function KSb(a,b){var c,d,e;Rmb(GSb,a);b.Fc(a);c=RD(Wjb(FSb,a),21);if(c){for(e=c.Kc();e.Ob();){d=RD(e.Pb(),27);Wmb(GSb,d,0)!=-1||KSb(d,b)}}} +function Omc(a,b,c){var d,e;BMc(a.e,b,c,(qpd(),ppd));BMc(a.i,b,c,Xod);if(a.a){e=RD(mQb(b,(Ywc(),Awc)),12);d=RD(mQb(c,Awc),12);CMc(a.g,e,d)}} +function mJc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new yJc(a,b);if(c){a.a[d][f]=new dJc(b);e=RD(mQb(b,(Ywc(),pwc)),10);!!e&&Rc(a.d,e,b)}} +function zIc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Qfb(d,e)}} +function Sz(){var a;if(Nz!=0){a=Date.now();if(a-Oz>2000){Oz=a;Pz=$wnd.setTimeout(Yz,10)}}if(Nz++==0){_z(($z(),Zz));return true}return false} +function lBb(a,b,c){var d;(bBb?(jBb(a),true):cBb?(SAb(),true):fBb?(SAb(),true):eBb&&(SAb(),false))&&(d=new aBb(b),d.b=c,hBb(a,d),undefined)} +function oNb(a,b){var c;c=!a.A.Hc((Qpd(),Ppd))||a.q==(Bod(),wod);a.u.Hc((Pod(),Lod))?c?mNb(a,b):qNb(a,b):a.u.Hc(Nod)&&(c?nNb(a,b):rNb(a,b))} +function Bed(a){var b;if(dE(Gxd(a,(umd(),Xkd)))===dE((Fnd(),Dnd))){if(!vCd(a)){Ixd(a,Xkd,End)}else{b=RD(Gxd(vCd(a),Xkd),346);Ixd(a,Xkd,b)}}} +function _fc(a){var b,c;if(nQb(a.d.i,(yCc(),tBc))){b=RD(mQb(a.c.i,tBc),17);c=RD(mQb(a.d.i,tBc),17);return hgb(b.a,c.a)>0}else{return false}} +function g_b(a,b,c){return new Uid($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function _mc(a){var b;this.d=new bnb;this.j=new pjd;this.g=new pjd;b=a.g.b;this.f=RD(mQb(Y2b(b),(yCc(),rAc)),88);this.e=Kfb(UD(k2b(b,ZBc)))} +function onc(a){this.d=new bnb;this.e=new gub;this.c=$C(kE,Pwe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.b=a} +function $pc(a,b,c){var d;d=c[a.g][b];switch(a.g){case 1:case 3:return new rjd(0,d);case 2:case 4:return new rjd(d,0);default:return null;}} +function Ced(b,c,d){var e,f;f=RD(ltd(c.f),205);try{f.rf(b,d);mtd(c.f,f)}catch(a){a=zdb(a);if(ZD(a,103)){e=a;throw Adb(e)}else throw Adb(a)}} +function tEd(a,b,c){var d,e,f,g,h,i;d=null;h=vgd(ygd(),b);f=null;if(h){e=null;i=zhd(h,c);g=null;i!=null&&(g=a.qf(h,i));e=g;f=e}d=f;return d} +function sSd(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b<e;b++){if(zSd((BFb(b,a.length),a.charCodeAt(b)),c,d))break}return b} +function anb(a,b){var c,d;d=a.c.length;b.length<d&&(b=cFb(new Array(d),b));for(c=0;c<d;++c){bD(b,c,a.c[c])}b.length>d&&bD(b,d,null);return b} +function lob(a,b){var c,d;d=a.a.length;b.length<d&&(b=cFb(new Array(d),b));for(c=0;c<d;++c){bD(b,c,a.a[c])}b.length>d&&bD(b,d,null);return b} +function Bde(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,ZD(d,99)?RD(d,99).th():null);if(Jnb(b,c)){$wd(a.a,4,c);return}}$wd(a.a,4,RD(b,129))} +function mne(a){var b;if(a==null)return null;b=Hqe(nue(a,true));if(b==null){throw Adb(new Mle("Invalid hexBinary value: '"+a+"'"))}return b} +function wA(a,b,c){var d;if(b.a.length>0){Rmb(a.b,new kB(b.a,c));d=b.a.length;0<d?(b.a=zhb(b.a,0,0)):0>d&&(b.a+=Hhb($C(hE,zwe,28,-d,15,1)))}} +function yIb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new Anb(CIb(b));e.a<e.c.c.length;){d=RD(ynb(e),218);f=oIb(d,b);yIb(a,f,c)}} +function dub(a,b,c){var d,e,f;e=RD(Wjb(a.e,b),400);if(!e){d=new uub(a,b,c);Zjb(a.e,b,d);qub(d);return null}else{f=qlb(e,c);eub(a,e);return f}} +function r5d(a,b,c,d){var e,f,g;e=new P3d(a.e,1,13,(g=b.c,g?g:(JTd(),wTd)),(f=c.c,f?f:(JTd(),wTd)),fZd(a,b),false);!d?(d=e):d.nj(e);return d} +function nMb(){hMb();return cD(WC(XN,1),jwe,164,0,[eMb,dMb,fMb,XLb,WLb,YLb,_Lb,$Lb,ZLb,cMb,bMb,aMb,ULb,TLb,VLb,RLb,QLb,SLb,OLb,NLb,PLb,gMb])} +function jWc(a){switch(a.g){case 4:return new rjd(0,-1);case 1:return new rjd(1,0);case 2:return new rjd(-1,0);default:return new rjd(0,1);}} +function f_b(a){switch(a.g){case 1:return Cmd(),Bmd;case 4:return Cmd(),ymd;case 2:return Cmd(),zmd;case 3:return Cmd(),xmd;}return Cmd(),Amd} +function s$d(a){var b;b=a.hj(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function Yhd(){Yhd=geb;Whd=new Zhd('PARENTS',0);Vhd=new Zhd('NODES',1);Thd=new Zhd('EDGES',2);Xhd=new Zhd('PORTS',3);Uhd=new Zhd('LABELS',4)} +function AA(a,b,c){var d;d=c.q.getFullYear()-Owe+Owe;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:UA(a,d%100,2);break;default:UA(a,d,b);}} +function Sub(a,b){var c,d;wFb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c<b;++c){d=d.a}}return new hvb(a,b,d)} +function DHb(){DHb=geb;CHb=new EHb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);BHb=new EHb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} +function tnc(a){this.b=new bnb;this.e=new bnb;this.d=a;this.a=!QDb(CDb(new SDb(null,new Twb(new l4b(a.b))),new PAb(new unc))).Bd((xDb(),wDb))} +function ssc(a,b){var c,d,e,f;c=0;for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=d.o.a+d.d.c+d.d.b+a.j;c=$wnd.Math.max(c,f)}return c} +function OUc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(r3b(),p3b)||d==l3b){return}c=new is(Mr(a3b(e).a.Kc(),new ir));gs(c)&&Zjb(a.k,b,RD(hs(c),18))} +function O0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.c.e.a,a.c.e.b):RD(Qub(a.a),8)).b,(b.a.b==0?new rjd(b.c.e.a,b.c.e.b):RD(Qub(b.a),8)).b)} +function P0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.c.e.a,a.c.e.b):RD(Qub(a.a),8)).a,(b.a.b==0?new rjd(b.c.e.a,b.c.e.b):RD(Qub(b.a),8)).a)} +function S0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.b.e.a,a.b.e.b):RD(Rub(a.a),8)).a,(b.a.b==0?new rjd(b.b.e.a,b.b.e.b):RD(Rub(b.a),8)).a)} +function Q0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.b.e.a,a.b.e.b):RD(Rub(a.a),8)).b,(b.a.b==0?new rjd(b.b.e.a,b.b.e.b):RD(Rub(b.a),8)).b)} +function pod(){pod=geb;mod=new qod('DISTRIBUTED',0);ood=new qod('JUSTIFIED',1);kod=new qod('BEGIN',2);lod=new qod(Kye,3);nod=new qod('END',4)} +function Kvd(a,b){var c,d,e;d=vYd(a.Dh(),b);c=b-a.ji();return c<0?(e=a.Ih(d),e>=0?a.Wh(e):Rvd(a,d)):c<0?Rvd(a,d):RD(d,69).wk().Bk(a,a.hi(),c)} +function Fxd(a){var b,c,d;d=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o);for(c=d.c.Kc();c.e!=c.i.gc();){b=RD(c.Yj(),44);b.md()}return dOd(d)} +function iGd(a){var b;if(ZD(a.a,4)){b=FId(a.a);if(b==null){throw Adb(new dgb(HGe+a.b+"'. "+DGe+(lfb(b6),b6.k)+EGe))}return b}else{return a.a}} +function iSd(a,b){var c,d;if(a.j.length!=b.j.length)return false;for(c=0,d=a.j.length;c<d;c++){if(!lhb(a.j[c],b.j[c]))return false}return true} +function bMd(b){var c;try{c=b.i.Xb(b.e);b.Xj();b.g=b.e++;return c}catch(a){a=zdb(a);if(ZD(a,77)){b.Xj();throw Adb(new Dvb)}else throw Adb(a)}} +function xMd(b){var c;try{c=b.c.Vi(b.e);b.Xj();b.g=b.e++;return c}catch(a){a=zdb(a);if(ZD(a,77)){b.Xj();throw Adb(new Dvb)}else throw Adb(a)}} +function vSd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BFb(c,a.length),a.charCodeAt(c));b>=64&&b<128&&(e=Rdb(e,Sdb(1,b-64)))}return e} +function k2b(a,b){var c,d;d=null;if(nQb(a,(umd(),amd))){c=RD(mQb(a,amd),96);c.pf(b)&&(d=c.of(b))}d==null&&!!Y2b(a)&&(d=mQb(Y2b(a),b));return d} +function i0b(a,b){var c;c=RD(mQb(a,(yCc(),RAc)),75);if(br(b,f0b)){if(!c){c=new Ejd;pQb(a,RAc,c)}else{Xub(c)}}else !!c&&pQb(a,RAc,null);return c} +function tSb(){tSb=geb;sSb=(umd(),Yld);mSb=Ukd;hSb=Dkd;nSb=tld;qSb=(YHb(),UHb);pSb=SHb;rSb=WHb;oSb=RHb;jSb=(eSb(),aSb);iSb=_Rb;kSb=cSb;lSb=dSb} +function PZb(a){NZb();this.c=new bnb;this.d=a;switch(a.g){case 0:case 2:this.a=Fob(MZb);this.b=oxe;break;case 3:case 1:this.a=MZb;this.b=pxe;}} +function c9b(a){var b;if(!Cod(RD(mQb(a,(yCc(),BBc)),101))){return}b=a.b;d9b((tFb(0,b.c.length),RD(b.c[0],30)));d9b(RD(Vmb(b,b.c.length-1),30))} +function ohc(a,b){b.Ug('Self-Loop post-processing',1);FDb(CDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new uhc),new whc),new yhc),new Ahc);b.Vg()} +function xrd(a,b,c){var d,e;if(a.c){Dyd(a.c,a.c.i+b);Eyd(a.c,a.c.j+c)}else{for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),163);xrd(d,b,c)}}} +function ine(a){var b;if(a==null)return null;b=Aqe(nue(a,true));if(b==null){throw Adb(new Mle("Invalid base64Binary value: '"+a+"'"))}return b} +function ju(b,c){var d;d=b.fd(c);try{return d.Pb()}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't get element "+c))}else throw Adb(a)}} +function ANb(a,b){var c,d,e;c=a.o;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);d.e.a=uNb(d,c.a);d.e.b=c.b*Kfb(UD(d.b.of(sNb)))}} +function kdc(a,b){var c,d,e;e=new cnb(b.gc());for(d=b.Kc();d.Ob();){c=RD(d.Pb(),292);c.c==c.f?_cc(a,c,c.c):adc(a,c)||(ZEb(e.c,c),true)}return e} +function i3b(a){var b;b=new bib;b.a+='n';a.k!=(r3b(),p3b)&&Zhb(Zhb((b.a+='(',b),ps(a.k).toLowerCase()),')');Zhb((b.a+='_',b),X2b(a));return b.a} +function h9b(a,b){var c,d,e,f;e=a.k;c=Kfb(UD(mQb(a,(Ywc(),Jwc))));f=b.k;d=Kfb(UD(mQb(b,Jwc)));return f!=(r3b(),m3b)?-1:e!=m3b?1:c==d?0:c<d?-1:1} +function Lad(a,b){var c,d;c=RD(RD(Wjb(a.g,b.a),42).a,68);d=RD(RD(Wjb(a.g,b.b),42).a,68);return bjd(b.a,b.b)-bjd(b.a,Pid(c.b))-bjd(b.b,Pid(d.b))} +function GMb(a,b){var c;c=RD(Vrb(a.b,b),127).n;switch(b.g){case 1:a.t>=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} +function JDc(){JDc=geb;IDc=new LDc(mEe,0);FDc=new LDc(BBe,1);GDc=new LDc('LINEAR_SEGMENTS',2);EDc=new LDc('BRANDES_KOEPF',3);HDc=new LDc(lEe,4)} +function IRb(){IRb=geb;FRb=new JRb(_ye,0);ERb=new JRb(aze,1);GRb=new JRb(bze,2);HRb=new JRb(cze,3);FRb.a=false;ERb.a=true;GRb.a=false;HRb.a=true} +function IPb(){IPb=geb;FPb=new JPb(_ye,0);EPb=new JPb(aze,1);GPb=new JPb(bze,2);HPb=new JPb(cze,3);FPb.a=false;EPb.a=true;GPb.a=false;HPb.a=true} +function Ivd(a,b,c,d){var e;if(c>=0){return a.Sh(b,c,d)}else{!!a.Ph()&&(d=(e=a.Fh(),e>=0?a.Ah(d):a.Ph().Th(a,-1-e,null,d)));return a.Ch(b,c,d)}} +function Zyd(a,b){switch(b){case 7:!a.e&&(a.e=new Yie(G4,a,7,4));sLd(a.e);return;case 8:!a.d&&(a.d=new Yie(G4,a,8,5));sLd(a.d);return;}yyd(a,b)} +function Ixd(a,b,c){c==null?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),jOd(a.o,b)):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),fOd(a.o,b,c));return a} +function Aob(a,b){yob();var c,d,e,f;c=a;f=b;if(ZD(a,21)&&!ZD(b,21)){c=b;f=a}for(e=c.Kc();e.Ob();){d=e.Pb();if(f.Hc(d)){return false}}return true} +function qTc(a,b,c,d){if(b.a<d.a){return true}else if(b.a==d.a){if(b.b<d.b){return true}else if(b.b==d.b){if(a.b>c.b){return true}}}return false} +function QD(a,b){if(bE(a)){return !!PD[b]}else if(a.Sm){return !!a.Sm[b]}else if(_D(a)){return !!OD[b]}else if($D(a)){return !!ND[b]}return false} +function udc(a){var b;b=a.a;do{b=RD(hs(new is(Mr(Z2b(b).a.Kc(),new ir))),18).c.i;b.k==(r3b(),o3b)&&a.b.Fc(b)}while(b.k==(r3b(),o3b));a.b=hv(a.b)} +function UGc(a,b){var c,d,e;e=a;for(d=new is(Mr(Z2b(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);!!c.c.i.c&&(e=$wnd.Math.max(e,c.c.i.c.p))}return e} +function INb(a,b){var c,d,e;e=0;d=RD(RD(Qc(a.r,b),21),87).Kc();while(d.Ob()){c=RD(d.Pb(),117);e+=c.d.d+c.b.Mf().b+c.d.a;d.Ob()&&(e+=a.w)}return e} +function AMb(a,b){var c,d,e;e=0;d=RD(RD(Qc(a.r,b),21),87).Kc();while(d.Ob()){c=RD(d.Pb(),117);e+=c.d.b+c.b.Mf().a+c.d.c;d.Ob()&&(e+=a.w)}return e} +function O2c(a){var b,c,d,e;d=0;e=Q2c(a);if(e.c.length==0){return 1}else{for(c=new Anb(e);c.a<c.c.c.length;){b=RD(ynb(c),27);d+=O2c(b)}}return d} +function aIc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new dnb(d));for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),10);b.p=eIc(b).a}yob();_mb(a.p,new nIc)} +function UJd(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.Pj()){f=a.Qj();g=cJd(a,d);e=a.Ij(4,g,null,d,f);!c?(c=e):c.nj(e)}else{cJd(a,d)}}return c} +function rLd(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.Pj()){f=a.Qj();g=THd(a,d);e=a.Ij(4,g,null,d,f);!c?(c=e):c.nj(e)}else{THd(a,d)}}return c} +function Tje(a,b,c,d){var e,f,g;if(c.Xh(b)){nke();if(wWd(b)){e=RD(c.Mh(b),160);Wje(a,e)}else{f=(g=b,!g?null:RD(d,54).gi(g));!!f&&Uje(c.Mh(b),f)}}} +function Dvd(a,b,c,d){var e,f,g;f=vYd(a.Dh(),b);e=b-a.ji();return e<0?(g=a.Ih(f),g>=0?a.Lh(g,c,true):Qvd(a,f,c)):RD(f,69).wk().yk(a,a.hi(),e,c,d)} +function aNb(a,b,c,d){var e,f;f=b.pf((umd(),ild))?RD(b.of(ild),21):a.j;e=lMb(f);if(e==(hMb(),gMb)){return}if(c&&!jMb(e)){return}LKb(cNb(a,e,d),b)} +function Y6b(a){switch(a.g){case 1:return mOb(),lOb;case 3:return mOb(),iOb;case 2:return mOb(),kOb;case 4:return mOb(),jOb;default:return null;}} +function kmc(a,b,c){if(a.e){switch(a.b){case 1:Ulc(a.c,b,c);break;case 0:Vlc(a.c,b,c);}}else{Slc(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} +function LLc(a){var b,c;if(a==null){return null}c=$C(jR,Nve,199,a.length,0,2);for(b=0;b<c.length;b++){c[b]=RD(Gnb(a[b],a[b].length),199)}return c} +function Dhe(a){var b;if(Bhe(a)){Ahe(a);if(a.ul()){b=Bge(a.e,a.b,a.c,a.a,a.j);a.j=b}a.g=a.a;++a.a;++a.c;a.i=0;return a.j}else{throw Adb(new Dvb)}} +function YOb(a,b){var c,d,e,f;f=a.o;c=a.p;f<c?(f*=f):(c*=c);d=f+c;f=b.o;c=b.p;f<c?(f*=f):(c*=c);e=f+c;if(d<e){return -1}if(d==e){return 0}return 1} +function fZd(a,b){var c,d,e;e=RHd(a,b);if(e>=0)return e;if(a.ol()){for(d=0;d<a.i;++d){c=a.pl(RD(a.g[d],58));if(dE(c)===dE(b)){return d}}}return -1} +function eHd(a,b,c){var d,e;e=a.gc();if(b>=e)throw Adb(new aMd(b,e));if(a.Si()){d=a.dd(c);if(d>=0&&d!=b){throw Adb(new agb(LIe))}}return a.Xi(b,c)} +function wx(a,b){this.a=RD(Qb(a),253);this.b=RD(Qb(b),253);if(a.Ed(b)>0||a==(Wk(),Vk)||b==(kl(),jl)){throw Adb(new agb('Invalid range: '+Dx(a,b)))}} +function p_b(a){var b,c;this.b=new bnb;this.c=a;this.a=false;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),10);this.a=this.a|b.k==(r3b(),p3b)}} +function xIb(a,b){var c,d,e;c=eJb(new gJb,a);for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),125);rIb(uIb(tIb(vIb(sIb(new wIb,0),0),c),d))}return c} +function y0b(a,b,c){c.Ug('Compound graph preprocessor',1);a.a=new Tp;D0b(a,b,null);x0b(a,b);C0b(a);pQb(b,(Ywc(),_vc),a.a);a.a=null;akb(a.b);c.Vg()} +function aec(a,b,c){var d,e,f;for(e=new is(Mr((b?Z2b(a):a3b(a)).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);f=b?d.c.i:d.d.i;f.k==(r3b(),n3b)&&g3b(f,c)}} +function FZc(a,b){var c,d,e;b.Ug('Untreeify',1);c=RD(mQb(a,(q$c(),k$c)),15);for(e=c.Kc();e.Ob();){d=RD(e.Pb(),65);Mub(d.b.d,d);Mub(d.c.b,d)}b.Vg()} +function Znc(a){var b,c,d;for(d=RD(Qc(a.a,(Bnc(),znc)),15).Kc();d.Ob();){c=RD(d.Pb(),105);b=foc(c);Qnc(a,c,b[0],(joc(),goc),0);Qnc(a,c,b[1],ioc,1)}} +function $nc(a){var b,c,d;for(d=RD(Qc(a.a,(Bnc(),Anc)),15).Kc();d.Ob();){c=RD(d.Pb(),105);b=foc(c);Qnc(a,c,b[0],(joc(),goc),0);Qnc(a,c,b[1],ioc,1)}} +function wDc(){wDc=geb;uDc=new yDc(LAe,0);vDc=new yDc('PORT_POSITION',1);tDc=new yDc('NODE_SIZE_WHERE_SPACE_PERMITS',2);sDc=new yDc('NODE_SIZE',3)} +function z6c(){z6c=geb;w6c=new A6c('INTERACTIVE_NODE_REORDERER',0);y6c=new A6c('MIN_SIZE_PRE_PROCESSOR',1);x6c=new A6c('MIN_SIZE_POST_PROCESSOR',2)} +function Rjd(){Rjd=geb;Ljd=new Sjd('AUTOMATIC',0);Ojd=new Sjd(Nye,1);Pjd=new Sjd(Oye,2);Qjd=new Sjd('TOP',3);Mjd=new Sjd(Qye,4);Njd=new Sjd(Kye,5)} +function Pjb(a,b,c,d){Ljb();var e,f;e=0;for(f=0;f<c;f++){e=Bdb(Ndb(Cdb(b[f],yxe),Cdb(d,yxe)),Cdb(Ydb(e),yxe));a[f]=Ydb(e);e=Udb(e,32)}return Ydb(e)} +function qKb(a,b,c){var d,e;e=0;for(d=0;d<iKb;d++){e=$wnd.Math.max(e,gKb(a.a[b.g][d],c))}b==(ZJb(),XJb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.b));return e} +function Jwb(a,b){var c,d;lFb(b>0);if((b&-b)==b){return eE(b*Kwb(a,31)*4.6566128730773926E-10)}do{c=Kwb(a,31);d=c%b}while(c-d+(b-1)<0);return eE(d)} +function d2b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function Onc(a,b,c,d){var e,f;for(e=b;e<a.c.length;e++){f=(tFb(e,a.c.length),RD(a.c[e],12));if(c.Mb(f)){ZEb(d.c,f)}else{return e}}return a.c.length} +function u5c(a){switch(a.g){case 0:return null;case 1:return new _5c;case 2:return new R5c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function U9c(a,b,c){var d,e;L9c(a,b-a.s,c-a.t);for(e=new Anb(a.n);e.a<e.c.c.length;){d=RD(ynb(e),209);Y9c(d,d.e+b-a.s);Z9c(d,d.f+c-a.t)}a.s=b;a.t=c} +function AIb(a){var b,c,d,e,f;c=0;for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),125);d.d=c++}b=zIb(a);f=null;b.c.length>1&&(f=xIb(a,b));return f} +function yqd(a){var b;b=Kfb(UD(Gxd(a,(umd(),lmd))))*$wnd.Math.sqrt((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i);return new rjd(b,b/Kfb(UD(Gxd(a,kmd))))} +function Dzd(a){var b;if(!!a.f&&a.f.Vh()){b=RD(a.f,54);a.f=RD(Vvd(a,b),84);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,8,b,a.f))}return a.f} +function Ezd(a){var b;if(!!a.i&&a.i.Vh()){b=RD(a.i,54);a.i=RD(Vvd(a,b),84);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,7,b,a.i))}return a.i} +function Z5d(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=RD(Vvd(a,b),19);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,21,b,a.b))}return a.b} +function UNd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Bi();_Nd(a,a.f+1);e=(d&lve)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.dk());c.Fc(b);++a.f}} +function Mge(a,b,c){var d;if(b.tk()){return false}else if(b.Ik()!=-2){d=b.ik();return d==null?c==null:pb(d,c)}else return b.qk()==a.e.Dh()&&c==null} +function Io(){var a;dk(16,fwe);a=Wp(16);this.b=$C(XF,ewe,302,a,0,1);this.c=$C(XF,ewe,302,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} +function j3b(a){v2b.call(this);this.k=(r3b(),p3b);this.j=(dk(6,iwe),new cnb(6));this.b=(dk(2,iwe),new cnb(2));this.d=new T2b;this.f=new C3b;this.a=a} +function wgc(a){var b,c;if(a.c.length<=1){return}b=tgc(a,(qpd(),npd));vgc(a,RD(b.a,17).a,RD(b.b,17).a);c=tgc(a,ppd);vgc(a,RD(c.a,17).a,RD(c.b,17).a)} +function vHc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Qmb(e,e.c.length,new R4b(a.a))}g3b(b,(tFb(c-1,e.c.length),RD(e.c[c-1],30)));a.b[b.p]=c} +function K_c(a,b){var c,d,e;a.b[b.g]=1;for(d=Sub(b.d,0);d.b!=d.d.c;){c=RD(evb(d),65);e=c.c;a.b[e.g]==1?Mub(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):K_c(a,e)}} +function u3c(a,b,c,d){var e,f,g;e=d?RD(Qc(a.a,b),21):RD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=RD(g.Pb(),27);if(o3c(a,c,f)){return true}}return false} +function d$d(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),89);if(!!b.e||(!b.d&&(b.d=new XZd(o7,b,1)),b.d).i!=0){return true}}return false} +function o5d(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),89);if(!!b.e||(!b.d&&(b.d=new XZd(o7,b,1)),b.d).i!=0){return true}}return false} +function dIc(a){var b,c,d;b=0;for(d=new Anb(a.c.a);d.a<d.c.c.length;){c=RD(ynb(d),10);b+=Kr(new is(Mr(a3b(c).a.Kc(),new ir)))}return b/a.c.a.c.length} +function Tcd(){Tcd=geb;Scd=(Kcd(),Jcd);Qcd=new A3b(8);new mGd((umd(),tld),Qcd);new mGd(fmd,8);Rcd=Hcd;Ocd=xcd;Pcd=ycd;Ncd=new mGd(Mkd,(Geb(),false))} +function $dd(a,b,c){var d;c.Ug('Shrinking tree compaction',1);if(Heb(TD(mQb(b,(OQb(),MQb))))){Ydd(a,b.f);zQb(b.f,(d=b.c,d))}else{zQb(b.f,b.c)}c.Vg()} +function Uyd(a,b,c,d){switch(b){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),a.e;case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),a.d;}return vyd(a,b,c,d)} +function h2d(a){var b;if(!!a.a&&a.a.Vh()){b=RD(a.a,54);a.a=RD(Vvd(a,b),142);a.a!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,5,b,a.a))}return a.a} +function Xqe(a){if(a<48)return -1;if(a>102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function ck(a,b){if(a==null){throw Adb(new Ogb('null key in entry: null='+b))}else if(b==null){throw Adb(new Ogb('null value in entry: '+a+'=null'))}} +function Cr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(dE(c)===dE(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} +function aLb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[gKb(a.a[0],b),gKb(a.a[1],b),gKb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function bLb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[hKb(a.a[0],b),hKb(a.a[1],b),hKb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function vIc(a,b,c){if(!Cod(RD(mQb(b,(yCc(),BBc)),101))){uIc(a,b,e3b(b,c));uIc(a,b,e3b(b,(qpd(),npd)));uIc(a,b,e3b(b,Yod));yob();_mb(b.j,new JIc(a))}} +function sUc(a){var b,c;a.c||vUc(a);c=new Ejd;b=new Anb(a.a);ynb(b);while(b.a<b.c.c.length){Mub(c,RD(ynb(b),418).a)}sFb(c.b!=0);Wub(c,c.c.b);return c} +function O9c(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new Anb(a.n);g.a<g.c.c.length;){f=RD(ynb(g),209);X9c(f,h,d,e);++e}} +function kHb(a){var b,c,d;a.b.a.$b();a.a=$C(hN,rve,60,a.c.c.a.b.c.length,0,1);b=0;for(d=new Anb(a.c.c.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);c.f=b++}} +function TYb(a){var b,c,d;a.b.a.$b();a.a=$C(bQ,rve,86,a.c.a.a.b.c.length,0,1);b=0;for(d=new Anb(a.c.a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);c.i=b++}} +function Er(a){var b;b=yr(a);if(!gs(a)){throw Adb(new veb('position (0) must be less than the number of elements that remained ('+b+')'))}return hs(a)} +function ZCb(a,b){var c;if(!a.a){c=$C(iE,vxe,28,0,15,1);ixb(a.b.a,new bDb(c));bFb(c,heb(iob.prototype.Me,iob,[]));a.a=new Lxb(c,a.d)}return zxb(a.a,b)} +function $Pb(b,c,d){var e;try{return PPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function _Pb(b,c,d){var e;try{return QPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function aQb(b,c,d){var e;try{return RPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function J8b(a){switch(a.g){case 1:return qpd(),ppd;case 4:return qpd(),Yod;case 3:return qpd(),Xod;case 2:return qpd(),npd;default:return qpd(),opd;}} +function Imc(a,b,c){if(b.k==(r3b(),p3b)&&c.k==o3b){a.d=Fmc(b,(qpd(),npd));a.b=Fmc(b,Yod)}if(c.k==p3b&&b.k==o3b){a.d=Fmc(c,(qpd(),Yod));a.b=Fmc(c,npd)}} +function Mmc(a,b){var c,d,e;e=b3b(a,b);for(d=e.Kc();d.Ob();){c=RD(d.Pb(),12);if(mQb(c,(Ywc(),Iwc))!=null||k4b(new l4b(c.b))){return true}}return false} +function RNc(a,b,c){c.Ug('Linear segments node placement',1);a.b=RD(mQb(b,(Ywc(),Qwc)),312);SNc(a,b);NNc(a,b);KNc(a,b);QNc(a);a.a=null;a.b=null;c.Vg()} +function W9c(a,b){Dyd(b,a.e+a.d+(a.c.c.length==0?0:a.b));Eyd(b,a.f);a.a=$wnd.Math.max(a.a,b.f);a.d+=b.g+(a.c.c.length==0?0:a.b);Rmb(a.c,b);return true} +function bad(a,b,c){var d,e,f,g;g=0;d=c/a.a.c.length;for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),172);U9c(e,e.s,e.t+g*d);O9c(e,a.d-e.r+b,d);++g}} +function Cid(a,b){var c,d,e,f,g,h;e=b.length-1;g=0;h=0;for(d=0;d<=e;d++){f=b[d];c=vid(e,d)*Iid(1-a,e-d)*Iid(a,d);g+=f.a*c;h+=f.b*c}return new rjd(g,h)} +function JHd(a,b){var c,d,e,f,g;c=b.gc();a._i(a.i+c);f=b.Kc();g=a.i;a.i+=c;for(d=g;d<a.i;++d){e=f.Pb();MHd(a,d,a.Zi(d,e));a.Mi(d,e);a.Ni()}return c!=0} +function TJd(a,b,c){var d,e,f;if(a.Pj()){d=a.Ej();f=a.Qj();++a.j;a.qj(d,a.Zi(d,b));e=a.Ij(3,null,b,d,f);!c?(c=e):c.nj(e)}else{$Id(a,a.Ej(),b)}return c} +function u0d(a,b,c){var d,e,f;d=RD(QHd(tYd(a.a),b),89);f=(e=d.c,ZD(e,90)?RD(e,29):(JTd(),zTd));((f.Db&64)!=0?Vvd(a.b,f):f)==c?i2d(d):l2d(d,c);return f} +function pne(a){var b;return a==null?null:new ejb((b=nue(a,true),b.length>0&&(BFb(0,b.length),b.charCodeAt(0)==43)?(BFb(1,b.length+1),b.substr(1)):b))} +function qne(a){var b;return a==null?null:new ejb((b=nue(a,true),b.length>0&&(BFb(0,b.length),b.charCodeAt(0)==43)?(BFb(1,b.length+1),b.substr(1)):b))} +function Syb(a,b,c,d,e,f,g,h){var i,j;if(!d){return}i=d.a[0];!!i&&Syb(a,b,c,i,e,f,g,h);Tyb(a,c,d.d,e,f,g,h)&&b.Fc(d);j=d.a[1];!!j&&Syb(a,b,c,j,e,f,g,h)} +function PPb(b,c,d){try{return Gdb(SPb(b,c,d),1)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function QPb(b,c,d){try{return Gdb(SPb(b,c,d),0)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function RPb(b,c,d){try{return Gdb(SPb(b,c,d),2)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function lMd(b,c){if(b.g==-1){throw Adb(new cgb)}b.Xj();try{b.d.hd(b.g,c);b.f=b.d.j}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} +function Y7b(a){var b,c,d,e,f;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);b=0;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);e.p=b++}}} +function Ee(a,b){var c,d,e,f;f=a.gc();b.length<f&&(b=cFb(new Array(f),b));e=b;d=a.Kc();for(c=0;c<f;++c){bD(e,c,d.Pb())}b.length>f&&bD(b,f,null);return b} +function av(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c<d;c++){if(a.Xb(c)==null){return c}}}else{for(c=0;c<d;c++){if(pb(b,a.Xb(c))){return c}}}return -1} +function Jd(a,b){var c,d,e;c=b.ld();e=b.md();d=a.xc(c);if(!(dE(e)===dE(d)||e!=null&&pb(e,d))){return false}if(d==null&&!a._b(c)){return false}return true} +function mD(a,b){var c,d,e;if(b<=22){c=a.l&(1<<b)-1;d=e=0}else if(b<=44){c=a.l;d=a.m&(1<<b-22)-1;e=0}else{c=a.l;d=a.m;e=a.h&(1<<b-44)-1}return hD(c,d,e)} +function pNb(a,b){switch(b.g){case 1:return a.f.n.d+a.t;case 3:return a.f.n.a+a.t;case 2:return a.f.n.c+a.s;case 4:return a.f.n.b+a.s;default:return 0;}} +function TNb(a,b){var c,d;d=b.c;c=b.a;switch(a.b.g){case 0:c.d=a.e-d.a-d.d;break;case 1:c.d+=a.e;break;case 2:c.c=a.e-d.a-d.d;break;case 3:c.c=a.e+d.d;}} +function QRb(a,b,c,d){var e,f;this.a=b;this.c=d;e=a.a;PRb(this,new rjd(-e.c,-e.d));$id(this.b,c);f=d/2;b.a?njd(this.b,0,f):njd(this.b,f,0);Rmb(a.c,this)} +function i2c(a,b,c,d){var e;this.c=a;this.d=b;e=new Yub;Pub(e,c,e.c.b,e.c);this.a=e;this.b=RD(mQb(d,(h_c(),H$c)),88);this.e=Kfb(UD(mQb(d,$$c)));h2c(this)} +function j5c(){j5c=geb;i5c=new l5c(LAe,0);g5c=new l5c(EBe,1);h5c=new l5c('EDGE_LENGTH_BY_POSITION',2);f5c=new l5c('CROSSING_MINIMIZATION_BY_POSITION',3)} +function uEd(a,b){var c,d;c=RD(Ao(a.g,b),27);if(c){return c}d=RD(Ao(a.j,b),123);if(d){return d}throw Adb(new CDd('Referenced shape does not exist: '+b))} +function Pk(b,c){var d,e;if(ZD(c,253)){e=RD(c,253);try{d=b.Ed(e);return d==0}catch(a){a=zdb(a);if(ZD(a,212)){return false}else throw Adb(a)}}return false} +function tWb(a,b){if(a.c==b){return a.d}else if(a.d==b){return a.c}else{throw Adb(new agb("Node 'one' must be either source or target of edge 'edge'."))}} +function rRc(a,b){if(a.c.i==b){return a.d.i}else if(a.d.i==b){return a.c.i}else{throw Adb(new agb('Node '+b+' is neither source nor target of edge '+a))}} +function $gc(a,b,c){c.Ug('Self-Loop ordering',1);FDb(GDb(CDb(CDb(EDb(new SDb(null,new Swb(b.b,16)),new chc),new ehc),new ghc),new ihc),new khc(a));c.Vg()} +function Fpc(a,b){var c;switch(b.g){case 2:case 4:c=a.a;a.c.d.n.b<c.d.n.b&&(c=a.c);Gpc(a,b,(enc(),dnc),c);break;case 1:case 3:Gpc(a,b,(enc(),anc),null);}} +function Ypc(a,b,c,d,e,f){var g,h,i,j,k;g=Wpc(b,c,f);h=c==(qpd(),Yod)||c==ppd?-1:1;j=a[c.g];for(k=0;k<j.length;k++){i=j[k];i>0&&(i+=e);j[k]=g;g+=h*(i+d)}} +function vsc(a){var b,c,d;d=a.f;a.n=$C(iE,vxe,28,d,15,1);a.d=$C(iE,vxe,28,d,15,1);for(b=0;b<d;b++){c=RD(Vmb(a.c.b,b),30);a.n[b]=ssc(a,c);a.d[b]=rsc(a,c)}} +function Xwd(a,b){var c,d,e;e=0;for(d=2;d<b;d<<=1){(a.Db&d)!=0&&++e}if(e==0){for(c=b<<=1;c<=128;c<<=1){if((a.Db&c)!=0){return 0}}return -1}else{return e}} +function Sge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);f=null;c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];if(g.am(d.Lk())){!f&&(f=new YHd);WGd(f,d)}}!!f&&wLd(a,f)} +function ene(a){var b,c,d;if(!a)return null;if(a.dc())return '';d=new Qhb;for(c=a.Kc();c.Ob();){b=c.Pb();Nhb(d,WD(b));d.a+=' '}return qeb(d,d.a.length-1)} +function _C(a,b){var c=new Array(b);var d;switch(a){case 14:case 15:d=0;break;case 16:d=false;break;default:return c;}for(var e=0;e<b;++e){c[e]=d}return c} +function GGb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b()}Dmd(a.d)?(d=a.a.c):(d=a.a.d);Umb(d,new WGb(a));a.c.df(a);HGb(a)} +function oUb(a){var b,c,d,e;for(c=new Anb(a.e.c);c.a<c.c.c.length;){b=RD(ynb(c),289);for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),453);hUb(d)}YTb(b)}} +function gad(a){var b,c,d,e,f;d=0;f=0;e=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);f=$wnd.Math.max(f,b.r);d+=b.d+(e>0?a.c:0);++e}a.b=d;a.d=f} +function rKb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[qKb(a,(ZJb(),WJb),b),qKb(a,XJb,b),qKb(a,YJb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function cQb(b,c,d){var e;try{TPb(b,c+b.j,d+b.k,false,true)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function dQb(b,c,d){var e;try{TPb(b,c+b.j,d+b.k,true,false)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function u8b(a){var b;if(!nQb(a,(yCc(),dBc))){return}b=RD(mQb(a,dBc),21);if(b.Hc((dod(),Xnd))){b.Mc(Xnd);b.Fc(Znd)}else if(b.Hc(Znd)){b.Mc(Znd);b.Fc(Xnd)}} +function v8b(a){var b;if(!nQb(a,(yCc(),dBc))){return}b=RD(mQb(a,dBc),21);if(b.Hc((dod(),cod))){b.Mc(cod);b.Fc(aod)}else if(b.Hc(aod)){b.Mc(aod);b.Fc(cod)}} +function oqc(a,b,c,d){var e,f,g,h;a.a==null&&rqc(a,b);g=b.b.j.c.length;f=c.d.p;h=d.d.p;e=h-1;e<0&&(e=g-1);return f<=e?a.a[e]-a.a[f]:a.a[g-1]-a.a[f]+a.a[e]} +function Cud(a){var b,c;if(!a.b){a.b=fv(RD(a.f,27).kh().i);for(c=new dMd(RD(a.f,27).kh());c.e!=c.i.gc();){b=RD(bMd(c),135);Rmb(a.b,new Bud(b))}}return a.b} +function Dud(a){var b,c;if(!a.e){a.e=fv(wCd(RD(a.f,27)).i);for(c=new dMd(wCd(RD(a.f,27)));c.e!=c.i.gc();){b=RD(bMd(c),123);Rmb(a.e,new Rud(b))}}return a.e} +function yud(a){var b,c;if(!a.a){a.a=fv(tCd(RD(a.f,27)).i);for(c=new dMd(tCd(RD(a.f,27)));c.e!=c.i.gc();){b=RD(bMd(c),27);Rmb(a.a,new Fud(a,b))}}return a.a} +function DXd(b){var c;if(!b.C&&(b.D!=null||b.B!=null)){c=EXd(b);if(c){b.hl(c)}else{try{b.hl(null)}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}}return b.C} +function xMb(a){switch(a.q.g){case 5:uMb(a,(qpd(),Yod));uMb(a,npd);break;case 4:vMb(a,(qpd(),Yod));vMb(a,npd);break;default:wMb(a,(qpd(),Yod));wMb(a,npd);}} +function GNb(a){switch(a.q.g){case 5:DNb(a,(qpd(),Xod));DNb(a,ppd);break;case 4:ENb(a,(qpd(),Xod));ENb(a,ppd);break;default:FNb(a,(qpd(),Xod));FNb(a,ppd);}} +function G$b(a,b){var c,d,e;e=new pjd;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);w$b(c,e.a,0);e.a+=c.f.a+b;e.b=$wnd.Math.max(e.b,c.f.b)}e.b>0&&(e.b+=b);return e} +function I$b(a,b){var c,d,e;e=new pjd;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);w$b(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} +function l2b(a){var b,c,d;d=lve;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),10);nQb(b,(Ywc(),zwc))&&(d=$wnd.Math.min(d,RD(mQb(b,zwc),17).a))}return d} +function PLc(a,b){var c,d;if(b.length==0){return 0}c=lMc(a.a,b[0],(qpd(),ppd));c+=lMc(a.a,b[b.length-1],Xod);for(d=0;d<b.length;d++){c+=QLc(a,d,b)}return c} +function VUc(){HUc();this.c=new bnb;this.i=new bnb;this.e=new Iub;this.f=new Iub;this.g=new Iub;this.j=new bnb;this.a=new bnb;this.b=new Tsb;this.k=new Tsb} +function AXd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Th(a,5,t7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?a.ii():c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function kA(a){fA();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} +function pgb(a){var b;b=(wgb(),vgb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function mmb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=mgb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=WEb(a.a,c);lmb(a,b,d);a.a=b;a.b=0}else{aFb(a.a,c)}a.c=d} +function uNb(a,b){var c;c=a.b;return c.pf((umd(),Gld))?c.ag()==(qpd(),ppd)?-c.Mf().a-Kfb(UD(c.of(Gld))):b+Kfb(UD(c.of(Gld))):c.ag()==(qpd(),ppd)?-c.Mf().a:b} +function X2b(a){var b;if(a.b.c.length!=0&&!!RD(Vmb(a.b,0),72).a){return RD(Vmb(a.b,0),72).a}b=R0b(a);if(b!=null){return b}return ''+(!a.c?-1:Wmb(a.c.a,a,0))} +function M3b(a){var b;if(a.f.c.length!=0&&!!RD(Vmb(a.f,0),72).a){return RD(Vmb(a.f,0),72).a}b=R0b(a);if(b!=null){return b}return ''+(!a.i?-1:Wmb(a.i.j,a,0))} +function skc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c<a.gc();++c){d=RD(a.Xb(c),131);if(c==a.gc()-1||!d.o){return new Ptd(sgb(c),d)}}return null} +function Xrc(a,b,c){var d,e,f,g,h;f=a.c;h=c?b:a;d=c?a:b;for(e=h.p+1;e<d.p;++e){g=RD(Vmb(f.a,e),10);if(!(g.k==(r3b(),l3b)||Yrc(g))){return false}}return true} +function Ead(a){var b,c,d,e,f;f=0;e=pxe;d=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);f+=b.r+(d>0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} +function Qud(a){var b,c;if(!a.b){a.b=fv(RD(a.f,123).kh().i);for(c=new dMd(RD(a.f,123).kh());c.e!=c.i.gc();){b=RD(bMd(c),135);Rmb(a.b,new Bud(b))}}return a.b} +function aHd(a,b){var c,d,e;if(b.dc()){return jQd(),jQd(),iQd}else{c=new ZLd(a,b.gc());for(e=new dMd(a);e.e!=e.i.gc();){d=bMd(e);b.Hc(d)&&WGd(c,d)}return c}} +function Axd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),dOd(a.o))}return Dvd(a,b,c,d)} +function rBd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b<c;++b){aAd(QHd(a.rb,b))}}if(a.vb){for(b=0,c=a.vb.i;b<c;++b){aAd(QHd(a.vb,b))}}Uee((lke(),jke),a);a.Bb|=1} +function zBd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){ABd(a,b,d,null,e,f,g,h,i,j,m,true,n);a6d(a,k);ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),2);!!c&&b6d(a,c);c6d(a,l);return a} +function Jae(b){var c,d;if(b==null){return null}d=0;try{d=Oeb(b,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){c=Ahb(b);d=c[0]}else throw Adb(a)}return hfb(d)} +function Kae(b){var c,d;if(b==null){return null}d=0;try{d=Oeb(b,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){c=Ahb(b);d=c[0]}else throw Adb(a)}return hfb(d)} +function rD(a,b){var c,d,e;e=a.h-b.h;if(e<0){return false}c=a.l-b.l;d=a.m-b.m+(c>>22);e+=d>>22;if(e<0){return false}a.l=c&dxe;a.m=d&dxe;a.h=e&exe;return true} +function Tyb(a,b,c,d,e,f,g){var h,i;if(b.Te()&&(i=a.a.Ne(c,d),i<0||!e&&i==0)){return false}if(b.Ue()&&(h=a.a.Ne(c,f),h>0||!g&&h==0)){return false}return true} +function Agc(a,b){sgc();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Cgc(b,rgc)-Cgc(a,rgc);case 4:return Cgc(a,qgc)-Cgc(b,qgc);}return 0} +function uuc(a){switch(a.g){case 0:return nuc;case 1:return ouc;case 2:return puc;case 3:return quc;case 4:return ruc;case 5:return suc;default:return null;}} +function cBd(a,b,c){var d,e;d=(e=new R5d,YVd(e,b),PAd(e,c),WGd((!a.c&&(a.c=new C5d(u7,a,12,10)),a.c),e),e);$Vd(d,0);bWd(d,1);aWd(d,true);_Vd(d,true);return d} +function THd(a,b){var c,d;if(b>=a.i)throw Adb(new yNd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&hib(a.g,b+1,a.g,b,d);bD(a.g,--a.i,null);a.Qi(b,c);a.Ni();return c} +function sWd(a,b){var c,d;if(a.Db>>16==17){return a.Cb.Th(a,21,h7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?a.ii():c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function _Fb(a){var b,c,d,e;yob();_mb(a.c,a.a);for(e=new Anb(a.c);e.a<e.c.c.length;){d=ynb(e);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),693);b.bf(d)}}} +function r$b(a){var b,c,d,e;yob();_mb(a.c,a.a);for(e=new Anb(a.c);e.a<e.c.c.length;){d=ynb(e);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),382);b.bf(d)}}} +function rJb(a){var b,c,d,e,f;e=lve;f=null;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),218);if(c.d.j^c.e.j){b=c.e.e-c.d.e-c.a;if(b<e){e=b;f=c}}}return f} +function QVb(){QVb=geb;OVb=new lGd(vAe,(Geb(),false));KVb=new lGd(wAe,100);MVb=(AWb(),yWb);LVb=new lGd(xAe,MVb);NVb=new lGd(yAe,Vze);PVb=new lGd(zAe,sgb(lve))} +function Xlc(a,b,c){var d,e,f,g,h,i,j,k;j=0;for(e=a.a[b],f=0,g=e.length;f<g;++f){d=e[f];k=aMc(d,c);for(i=k.Kc();i.Ob();){h=RD(i.Pb(),12);Zjb(a.f,h,sgb(j++))}}} +function UDd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new vue(e);for(g=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);g.Ob();){f=RD(g.Pb(),17);Rc(a,b,tDd(JB(c,f.a)))}}} +function VDd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new vue(e);for(g=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);g.Ob();){f=RD(g.Pb(),17);Rc(a,b,tDd(JB(c,f.a)))}}} +function foc(a){Mnc();var b;b=RD(Ee(Ec(a.k),$C(E3,NAe,64,2,0,1)),126);Wnb(b,0,b.length,null);if(b[0]==(qpd(),Yod)&&b[1]==ppd){bD(b,0,ppd);bD(b,1,Yod)}return b} +function hMc(a,b,c){var d,e,f;e=fMc(a,b,c);f=iMc(a,e);YLc(a.b);CMc(a,b,c);yob();_mb(e,new HMc(a));d=iMc(a,e);YLc(a.b);CMc(a,c,b);return new Ptd(sgb(f),sgb(d))} +function JNc(){JNc=geb;GNc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc));HNc=new kGd('linearSegments.inputPrio',sgb(0));INc=new kGd('linearSegments.outputPrio',sgb(0))} +function YVc(){YVc=geb;UVc=new $Vc('P1_TREEIFICATION',0);VVc=new $Vc('P2_NODE_ORDERING',1);WVc=new $Vc('P3_NODE_PLACEMENT',2);XVc=new $Vc('P4_EDGE_ROUTING',3)} +function yad(a){var b,c,d,e;c=0;b=0;for(e=new dMd(a);e.e!=e.i.gc();){d=RD(bMd(e),27);c=$wnd.Math.max(d.g+d.i,c);b=$wnd.Math.max(d.f+d.j,b)}return new rjd(c,b)} +function ard(a,b){var c,d,e,f;f=0;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),27);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function Pnd(){Pnd=geb;Ond=new Rnd('UNKNOWN',0);Lnd=new Rnd('ABOVE',1);Mnd=new Rnd('BELOW',2);Nnd=new Rnd('INLINE',3);new kGd('org.eclipse.elk.labelSide',Ond)} +function RHd(a,b){var c;if(a.Yi()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return c}}}else{for(c=0;c<a.i;++c){if(dE(a.g[c])===dE(b)){return c}}}return -1} +function L0b(a,b,c){var d,e;if(b.c==(BEc(),zEc)&&c.c==yEc){return -1}else if(b.c==yEc&&c.c==zEc){return 1}d=P0b(b.a,a.a);e=P0b(c.a,a.a);return b.c==zEc?e-d:d-e} +function f3b(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw Adb(new agb('index must be >= 0 and <= layer node count'))}!!a.c&&Ymb(a.c.a,a);a.c=c;!!c&&Qmb(c.a,b,a)} +function Gac(a,b){var c,d,e;for(d=new is(Mr(W2b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);e=RD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} +function RQc(a,b){this.c=new Tsb;this.a=a;this.b=b;this.d=RD(mQb(a,(Ywc(),Qwc)),312);dE(mQb(a,(yCc(),eBc)))===dE((Cuc(),Auc))?(this.e=new BRc):(this.e=new uRc)} +function ftd(a,b){var c,d;d=null;if(a.pf((umd(),amd))){c=RD(a.of(amd),96);c.pf(b)&&(d=c.of(b))}d==null&&!!a.Tf()&&(d=a.Tf().of(b));d==null&&(d=iGd(b));return d} +function ku(b,c){var d,e;d=b.fd(c);try{e=d.Pb();d.Qb();return e}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't remove element "+c))}else throw Adb(a)}} +function GA(a,b){var c,d,e;d=new uB;e=new vB(d.q.getFullYear()-Owe,d.q.getMonth(),d.q.getDate());c=FA(a,b,e);if(c==0||c<b.length){throw Adb(new agb(b))}return e} +function iwb(a,b){var c,d,e;uFb(b);lFb(b!=a);e=a.b.c.length;for(d=b.Kc();d.Ob();){c=d.Pb();Rmb(a.b,uFb(c))}if(e!=a.b.c.length){jwb(a,0);return true}return false} +function dWb(){dWb=geb;XVb=(umd(),ald);new mGd(Pkd,(Geb(),true));$Vb=kld;_Vb=nld;aWb=pld;ZVb=ild;bWb=sld;cWb=Lld;WVb=(QVb(),OVb);UVb=LVb;VVb=NVb;YVb=PVb;TVb=KVb} +function U0b(a,b){if(b==a.c){return a.d}else if(b==a.d){return a.c}else{throw Adb(new agb("'port' must be either the source port or target port of the edge."))}} +function T6b(a,b,c){var d,e;e=a.o;d=a.d;switch(b.g){case 1:return -d.d-c;case 3:return e.b+d.a+c;case 2:return e.a+d.c+c;case 4:return -d.b-c;default:return 0;}} +function Y9b(a,b,c,d){var e,f,g,h;g3b(b,RD(d.Xb(0),30));h=d.kd(1,d.gc());for(f=RD(c.Kb(b),20).Kc();f.Ob();){e=RD(f.Pb(),18);g=e.c.i==b?e.d.i:e.c.i;Y9b(a,g,c,h)}} +function Bic(a){var b;b=new Tsb;if(nQb(a,(Ywc(),Vwc))){return RD(mQb(a,Vwc),85)}FDb(CDb(new SDb(null,new Swb(a.j,16)),new Dic),new Fic(b));pQb(a,Vwc,b);return b} +function zad(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),186);d=$wnd.Math.max(d,f.e);e+=f.b+(c>0?b:0);++c}return new rjd(d,e)} +function Czd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Th(a,6,G4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),hvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function cCd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Th(a,1,H4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),jvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function LCd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.Th(a,9,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),lvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function M1d(a,b){var c,d;if(a.Db>>16==5){return a.Cb.Th(a,9,m7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),tTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function qBd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Th(a,6,t7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),CTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function iVd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Th(a,0,p7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),mTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function IEd(){this.a=new BDd;this.g=new Io;this.j=new Io;this.b=new Tsb;this.d=new Io;this.i=new Io;this.k=new Tsb;this.c=new Tsb;this.e=new Tsb;this.f=new Tsb} +function kQd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;e<f;e++){d=QHd(a,e);if(b==null){if(d==null){return e}}else if(dE(b)===dE(d)||pb(b,d)){return e}}return -1} +function Bee(a,b){var c,d;c=b.qi(a.a);if(!c){return null}else{d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),_Ke));return lhb(aLe,d)?Uee(a,BXd(b.qk())):d}} +function Oje(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=RD(b,54).Ph();!!d&&d!=b;d=d.Ph()){if(++c>wxe){return Oje(a,d)}if(d==a){return true}}}return false} +function yNb(a){tNb();switch(a.q.g){case 5:vNb(a,(qpd(),Yod));vNb(a,npd);break;case 4:wNb(a,(qpd(),Yod));wNb(a,npd);break;default:xNb(a,(qpd(),Yod));xNb(a,npd);}} +function CNb(a){tNb();switch(a.q.g){case 5:zNb(a,(qpd(),Xod));zNb(a,ppd);break;case 4:ANb(a,(qpd(),Xod));ANb(a,ppd);break;default:BNb(a,(qpd(),Xod));BNb(a,ppd);}} +function RTb(a){var b,c;b=RD(mQb(a,(yVb(),mVb)),17);if(b){c=b.a;c==0?pQb(a,(JVb(),IVb),new Owb):pQb(a,(JVb(),IVb),new Pwb(c))}else{pQb(a,(JVb(),IVb),new Pwb(1))}} +function b2b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} +function wec(a,b){switch(a.g){case 0:return b==(cxc(),$wc)?sec:tec;case 1:return b==(cxc(),$wc)?sec:rec;case 2:return b==(cxc(),$wc)?rec:tec;default:return rec;}} +function Fad(a,b){var c,d,e;Ymb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=fFe;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);e=$wnd.Math.max(e,c.d)}a.b=e} +function jzd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Th(a,12,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),gvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function sCd(a,b){var c,d;if(a.Db>>16==11){return a.Cb.Th(a,10,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),kvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function n4d(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Th(a,11,h7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),ATd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function Q5d(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Th(a,12,s7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),DTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function WVd(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.Vh()){b=RD(a.r,54);a.r=RD(Vvd(a,b),142);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,8,b,a.r))}return a.r} +function pKb(a,b,c){var d;d=cD(WC(iE,1),vxe,28,15,[sKb(a,(ZJb(),WJb),b,c),sKb(a,XJb,b,c),sKb(a,YJb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function ddc(a,b){var c,d,e;e=kdc(a,b);if(e.c.length==0){return}_mb(e,new Gdc);c=e.c.length;for(d=0;d<c;d++){_cc(a,(tFb(d,e.c.length),RD(e.c[d],292)),gdc(a,e,d))}} +function Wnc(a){var b,c,d,e;for(e=RD(Qc(a.a,(Bnc(),wnc)),15).Kc();e.Ob();){d=RD(e.Pb(),105);for(c=Ec(d.k).Kc();c.Ob();){b=RD(c.Pb(),64);Qnc(a,d,b,(joc(),hoc),1)}}} +function Yrc(a){var b,c;if(a.k==(r3b(),o3b)){for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!W0b(b)&&a.c==T0b(b,a).c){return true}}}return false} +function hSc(a){var b,c;if(a.k==(r3b(),o3b)){for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!W0b(b)&&b.c.i.c==b.d.i.c){return true}}}return false} +function XDd(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new vue(e);for(g=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);g.Ob();){f=RD(g.Pb(),17);d=xDd(b,f.a);!!d&&AEd(a,d)}}} +function bbe(){Tae();var a,b;Xae((lTd(),kTd));Wae(kTd);rBd(kTd);d2d=(JTd(),wTd);for(b=new Anb(Rae);b.a<b.c.c.length;){a=RD(ynb(b),248);o2d(a,wTd,null)}return true} +function uD(a,b){var c,d,e,f,g,h,i,j;i=a.h>>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function YHb(){YHb=geb;XHb=(iIb(),fIb);WHb=new lGd(Aye,XHb);VHb=(LHb(),KHb);UHb=new lGd(Bye,VHb);THb=(DHb(),CHb);SHb=new lGd(Cye,THb);RHb=new lGd(Dye,(Geb(),true))} +function Iic(a,b,c){var d,e;d=b*c;if(ZD(a.g,154)){e=$jc(a);if(e.f.d){e.f.a||(a.d.a+=d+Tye)}else{a.d.d-=d+Tye;a.d.a+=d+Tye}}else if(ZD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} +function _pc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new Anb(b.d);h.a<h.c.c.length;){g=RD(ynb(h),105);f=g.i;if(!!f&&f.i==c){d=g.d[c.g];e[d]=$wnd.Math.max(e[d],f.j.b)}}} +function k9c(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new Anb(b.d);g.a<g.c.c.length;){f=RD(ynb(g),315);gad(f);d=$wnd.Math.max(d,f.b);e+=f.d+(c>0?a.b:0);++c}b.b=d;b.e=e} +function Fo(a){var b,c,d;d=a.b;if(Xp(a.i,d.length)){c=d.length*2;a.b=$C(XF,ewe,302,c,0,1);a.c=$C(XF,ewe,302,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){Bo(a,b,b)}++a.g}} +function VPb(a,b,c,d){var e,f,g,h;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;PPb(b,e,g)?aQb(a,f,h)||cQb(a,f,h):RPb(b,e,g)&&($Pb(a,f,h)||dQb(a,f,h))}}} +function k_b(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return ZEb(a.c,b),true} +function psc(a,b,c){var d;d=b.c.i;if(d.k==(r3b(),o3b)){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12))}else{pQb(a,(Ywc(),vwc),b.c);pQb(a,wwc,c.d)}} +function wid(a,b,c){tid();var d,e,f,g,h,i;g=b/2;f=c/2;d=$wnd.Math.abs(a.a);e=$wnd.Math.abs(a.b);h=1;i=1;d>g&&(h=g/d);e>f&&(i=f/e);ijd(a,$wnd.Math.min(h,i));return a} +function OAd(){qAd();var b,c;try{c=RD(M5d((YSd(),XSd),$He),2113);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new KAd} +function Qae(){qAd();var b,c;try{c=RD(M5d((YSd(),XSd),AKe),2040);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new Mae} +function vne(){Zme();var b,c;try{c=RD(M5d((YSd(),XSd),dLe),2122);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new rne} +function f2d(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,4,e,b);!c?(c=d):c.nj(d)}e!=b&&(b?(c=o2d(a,k2d(a,b),c)):(c=o2d(a,a.a,c)));return c} +function DB(){uB.call(this);this.e=-1;this.a=false;this.p=qwe;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=qwe} +function hHb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function XQb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function RYb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function _Wb(){_Wb=geb;YWb=nfd(pfd(pfd(pfd(new ufd,(sXb(),qXb),(hcc(),Dbc)),qXb,Hbc),rXb,Obc),rXb,rbc);$Wb=pfd(pfd(new ufd,qXb,hbc),qXb,sbc);ZWb=nfd(new ufd,rXb,ubc)} +function J6b(a){var b,c,d,e,f;b=RD(mQb(a,(Ywc(),cwc)),85);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=RD(d.Pb(),314);e=c.i;e.c+=f.a;e.d+=f.b;c.c?MKb(c):OKb(c)}pQb(a,cwc,null)} +function Wpc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} +function CNc(a,b,c){var d,e;c.Ug('Interactive node placement',1);a.a=RD(mQb(b,(Ywc(),Qwc)),312);for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),30);BNc(a,d)}c.Vg()} +function C5c(a){var b,c,d,e,f;d=0;e=Hze;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;A5c(a,a.d,0,0,dFe,c);f=a.b.Dg(a.d);if(f<e){d=c;e=f}}}A5c(a,a.d,0,0,dFe,d)} +function Oad(a,b){var c,d,e,f;f=new Tsb;b.e=null;b.f=null;for(d=new Anb(b.i);d.a<d.c.c.length;){c=RD(ynb(d),68);e=RD(Wjb(a.g,c.a),42);c.a=Oid(c.b);Zjb(f,c.a,e)}a.g=f} +function Dad(a,b,c){var d,e,f,g,h,i;e=b-a.e;f=e/a.d.c.length;g=0;for(i=new Anb(a.d);i.a<i.c.c.length;){h=RD(ynb(i),315);d=a.b-h.b+c;fad(h,h.e+g*f,h.f);bad(h,f,d);++g}} +function wPd(a){var b;a.f._j();if(a.b!=-1){++a.b;b=a.f.d[a.a];if(a.b<b.i){return}++a.a}for(;a.a<a.f.d.length;++a.a){b=a.f.d[a.a];if(!!b&&b.i!=0){a.b=0;return}}a.b=-1} +function Jde(a,b){var c,d,e;e=b.c.length;c=Lde(a,e==0?'':(tFb(0,b.c.length),WD(b.c[0])));for(d=1;d<e&&!!c;++d){c=RD(c,54).Zh((tFb(d,b.c.length),WD(b.c[d])))}return c} +function RIc(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),10);a.c[c.c.p][c.p].a=Iwb(a.i);a.c[c.c.p][c.p].d=Kfb(a.c[c.c.p][c.p].a);a.c[c.c.p][c.p].b=1}} +function brd(a,b){var c,d,e,f;f=0;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),163);f+=$wnd.Math.pow(urd(c)*trd(c)-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function uMb(a,b){var c,d,e,f;f=0;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);f=$wnd.Math.max(f,d.e.a+d.b.Mf().a)}c=RD(Vrb(a.b,b),127);c.n.b=0;c.a.a=f} +function DNb(a,b){var c,d,e,f;c=0;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);c=$wnd.Math.max(c,e.e.b+e.b.Mf().b)}d=RD(Vrb(a.b,b),127);d.n.d=0;d.a.b=c} +function jMc(a,b,c,d){var e,f,g;f=eMc(a,b,c,d);g=kMc(a,f);BMc(a,b,c,d);YLc(a.b);yob();_mb(f,new LMc(a));e=kMc(a,f);BMc(a,c,b,d);YLc(a.b);return new Ptd(sgb(g),sgb(e))} +function udd(a,b){var c;b.Ug('Delaunay triangulation',1);c=new bnb;Umb(a.i,new ydd(c));Heb(TD(mQb(a,(OQb(),MQb))))&&'null10bw';!a.e?(a.e=EFb(c)):ye(a.e,EFb(c));b.Vg()} +function Hsd(a,b,c){var d,e;Nzd(a,a.j+b,a.k+c);for(e=new dMd((!a.a&&(a.a=new XZd(D4,a,5)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),377);Uxd(d,d.a+b,d.b+c)}Gzd(a,a.b+b,a.c+c)} +function Vyd(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),qLd(a.e,b,d);case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),qLd(a.d,b,d);}return dyd(a,b,c,d)} +function Wyd(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),rLd(a.e,b,d);case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),rLd(a.d,b,d);}return eyd(a,b,c,d)} +function LDd(a,b,c){var d,e,f,g,h;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);e=xDd(c,g.a);!!e&&DEd(a,e,b)}}} +function fOd(a,b,c){var d,e,f,g,h;a._j();f=b==null?0:tb(b);if(a.f>0){g=(f&lve)%a.d.length;e=WNd(a,g,f,b);if(e){h=e.nd(c);return h}}d=a.ck(f,b,c);a.c.Fc(d);return null} +function Tee(a,b){var c,d,e,f;switch(Oee(a,b).Kl()){case 3:case 2:{c=mYd(b);for(e=0,f=c.i;e<f;++e){d=RD(QHd(c,e),35);if(yfe(Qee(a,d))==5){return d}}break}}return null} +function gt(a){var b,c,d,e,f;if(Xp(a.f,a.b.length)){d=$C(UG,ewe,227,a.b.length*2,0,1);a.b=d;e=d.length-1;for(c=a.a;c!=a;c=c._d()){f=RD(c,227);b=f.d&e;f.a=d[b];d[b]=f}}} +function gSc(a){var b,c;c=RD(mQb(a,(Ywc(),kwc)),21);b=vfd(ZRc);c.Hc((ovc(),lvc))&&ofd(b,aSc);c.Hc(nvc)&&ofd(b,cSc);c.Hc(evc)&&ofd(b,$Rc);c.Hc(gvc)&&ofd(b,_Rc);return b} +function Bid(a){if(a<0){throw Adb(new agb('The input must be positive'))}else return a<sid.length?Xdb(sid[a]):$wnd.Math.sqrt(dFe*a)*(Jid(a,a)/Iid(2.718281828459045,a))} +function PHd(a,b){var c;if(a.Yi()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return true}}}else{for(c=0;c<a.i;++c){if(dE(a.g[c])===dE(b)){return true}}}return false} +function Br(a,b){if(b==null){while(a.a.Ob()){if(RD(a.a.Pb(),44).md()==null){return true}}}else{while(a.a.Ob()){if(pb(b,RD(a.a.Pb(),44).md())){return true}}}return false} +function Qy(a,b){var c,d,e;if(b===a){return true}else if(ZD(b,678)){e=RD(b,2046);return Ue((d=a.g,!d?(a.g=new Di(a)):d),(c=e.g,!c?(e.g=new Di(e)):c))}else{return false}} +function hA(a){var b,c,d,e;b='gA';c='vz';e=$wnd.Math.min(a.length,5);for(d=e-1;d>=0;d--){if(lhb(a[d].d,b)||lhb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Fdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a/b;if(jxe<c&&c<hxe){return c<0?$wnd.Math.ceil(c):$wnd.Math.floor(c)}}return Edb(iD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b,false))} +function T0b(a,b){if(b==a.c.i){return a.d.i}else if(b==a.d.i){return a.c.i}else{throw Adb(new agb("'node' must either be the source node or target node of the edge."))}} +function M5b(a){var b,c,d,e;e=RD(mQb(a,(Ywc(),Zvc)),36);if(e){d=new pjd;b=Y2b(a.c.i);while(b!=e){c=b.e;b=Y2b(c);Zid($id($id(d,c.n),b.c),b.d.b,b.d.d)}return d}return G5b} +function phc(a){var b;b=RD(mQb(a,(Ywc(),Pwc)),337);FDb(EDb(new SDb(null,new Swb(b.d,16)),new Chc),new Ehc(a));FDb(CDb(new SDb(null,new Swb(b.d,16)),new Ghc),new Ihc(a))} +function Zrc(a,b){var c,d,e,f;e=b?a3b(a):Z2b(a);for(d=new is(Mr(e.a.Kc(),new ir));gs(d);){c=RD(hs(d),18);f=T0b(c,a);if(f.k==(r3b(),o3b)&&f.c!=a.c){return f}}return null} +function fIc(a){var b,c,d;for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);if(b.k!=(r3b(),p3b)){continue}d=b.o.b;a.i=$wnd.Math.min(a.i,d);a.g=$wnd.Math.max(a.g,d)}} +function OIc(a,b,c){var d,e,f;for(f=new Anb(b);f.a<f.c.c.length;){d=RD(ynb(f),10);a.c[d.c.p][d.p].e=false}for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),10);NIc(a,d,c)}} +function uTc(a,b,c){var d,e;d=VTc(b.j,c.s,c.c)+VTc(c.e,b.s,b.c);e=VTc(c.j,b.s,b.c)+VTc(b.e,c.s,c.c);if(d==e){if(d>0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} +function CVc(a){var b;b=RD(mQb(RD(ju(a.b,0),39),(h_c(),T$c)),107);pQb(a,(q$c(),SZc),new rjd(0,0));FVc(new YWc,a,b.b+b.c-Kfb(UD(mQb(a,ZZc))),b.d+b.a-Kfb(UD(mQb(a,_Zc))))} +function pDd(a,b){var c,d;d=false;if(bE(b)){d=true;oDd(a,new OC(WD(b)))}if(!d){if(ZD(b,242)){d=true;oDd(a,(c=Qeb(RD(b,242)),new hC(c)))}}if(!d){throw Adb(new Aeb(tIe))}} +function g$d(a,b,c,d){var e,f,g;e=new P3d(a.e,1,10,(g=b.c,ZD(g,90)?RD(g,29):(JTd(),zTd)),(f=c.c,ZD(f,90)?RD(f,29):(JTd(),zTd)),fZd(a,b),false);!d?(d=e):d.nj(e);return d} +function _2b(a){var b,c;switch(RD(mQb(Y2b(a),(yCc(),QAc)),429).g){case 0:b=a.n;c=a.o;return new rjd(b.a+c.a/2,b.b+c.b/2);case 1:return new sjd(a.n);default:return null;}} +function Ouc(){Ouc=geb;Luc=new Puc(LAe,0);Kuc=new Puc('LEFTUP',1);Nuc=new Puc('RIGHTUP',2);Juc=new Puc('LEFTDOWN',3);Muc=new Puc('RIGHTDOWN',4);Iuc=new Puc('BALANCED',5)} +function dKc(a,b,c){var d,e,f;d=Qfb(a.a[b.p],a.a[c.p]);if(d==0){e=RD(mQb(b,(Ywc(),qwc)),15);f=RD(mQb(c,qwc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} +function k5c(a){switch(a.g){case 1:return new K3c;case 2:return new M3c;case 3:return new I3c;case 0:return null;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function gyd(a,b,c){switch(b){case 1:!a.n&&(a.n=new C5d(I4,a,1,7));sLd(a.n);!a.n&&(a.n=new C5d(I4,a,1,7));YGd(a.n,RD(c,16));return;case 2:jyd(a,WD(c));return;}Dxd(a,b,c)} +function xyd(a,b,c){switch(b){case 3:Ayd(a,Kfb(UD(c)));return;case 4:Cyd(a,Kfb(UD(c)));return;case 5:Dyd(a,Kfb(UD(c)));return;case 6:Eyd(a,Kfb(UD(c)));return;}gyd(a,b,c)} +function dBd(a,b,c){var d,e,f;f=(d=new R5d,d);e=XVd(f,b,null);!!e&&e.oj();PAd(f,c);WGd((!a.c&&(a.c=new C5d(u7,a,12,10)),a.c),f);$Vd(f,0);bWd(f,1);aWd(f,true);_Vd(f,true)} +function M5d(a,b){var c,d,e;c=Ktb(a.i,b);if(ZD(c,241)){e=RD(c,241);e.zi()==null&&undefined;return e.wi()}else if(ZD(c,507)){d=RD(c,2037);e=d.b;return e}else{return null}} +function aj(a,b,c,d){var e,f;Qb(b);Qb(c);f=RD(Fn(a.d,b),17);Ob(!!f,'Row %s not in %s',b,a.e);e=RD(Fn(a.b,c),17);Ob(!!e,'Column %s not in %s',c,a.c);return cj(a,f.a,e.a,d)} +function ZC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=_C(h,k);d!=10&&cD(WC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i<k;++i){l[i]=ZC(a,b,c,d,e,f,g)}}return l} +function cMd(b){if(b.g==-1){throw Adb(new cgb)}b.Xj();try{b.i.gd(b.g);b.f=b.i.j;b.g<b.e&&--b.e;b.g=-1}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} +function v0b(a){var b,c,d,e;e=-1;d=0;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),249);if(b.c==(BEc(),yEc)){e=d==0?0:d-1;break}else d==a.c.length-1&&(e=d);d+=1}return e} +function $9c(a){var b,c,d,e;e=0;b=0;for(d=new Anb(a.c);d.a<d.c.c.length;){c=RD(ynb(d),27);Dyd(c,a.e+e);Eyd(c,a.f);e+=c.g+a.b;b=$wnd.Math.max(b,c.f+a.b)}a.d=e-a.b;a.a=b-a.b} +function UGb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);d=b.d.c;b.d.c=b.d.d;b.d.d=d;d=b.d.b;b.d.b=b.d.a;b.d.a=d;d=b.b.a;b.b.a=b.b.b;b.b.b=d}IGb(a)} +function DYb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=b.g.c;b.g.c=b.g.d;b.g.d=d;d=b.g.b;b.g.b=b.g.a;b.g.a=d;d=b.e.a;b.e.a=b.e.b;b.e.b=d}uYb(a)} +function pqc(a){var b,c,d,e,f;f=Ec(a.k);for(c=(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])),d=0,e=c.length;d<e;++d){b=c[d];if(b!=opd&&!f.Hc(b)){return b}}return null} +function drc(a,b){var c,d;d=RD(Nvb(DDb(CDb(new SDb(null,new Swb(b.j,16)),new lrc))),12);if(d){c=RD(Vmb(d.e,0),18);if(c){return RD(mQb(c,(Ywc(),zwc)),17).a}}return mDc(a.b)} +function FGc(a,b){var c,d,e,f;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);Nnb(a.d);for(d=new is(Mr(a3b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);CGc(a,e,c.d.i)}}} +function T9c(a,b){var c,d;Ymb(a.b,b);for(d=new Anb(a.n);d.a<d.c.c.length;){c=RD(ynb(d),209);if(Wmb(c.c,b,0)!=-1){Ymb(c.c,b);$9c(c);c.c.c.length==0&&Ymb(a.n,c);break}}N9c(a)} +function ead(a,b){var c,d,e,f,g;g=a.f;e=0;f=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);U9c(c,a.e,g);Q9c(c,b);f=$wnd.Math.max(f,c.r);g+=c.d+a.c;e=g}a.d=f;a.b=e} +function R2c(a){var b,c;c=yGd(a);if(gr(c)){return null}else{b=(Qb(c),RD(Er(new is(Mr(c.a.Kc(),new ir))),74));return AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84))}} +function vWd(a){var b;if(!a.o){b=a.uk();b?(a.o=new D9d(a,a,null)):a.al()?(a.o=new U6d(a,null)):yfe(Qee((lke(),jke),a))==1?(a.o=new N9d(a)):(a.o=new S9d(a,null))}return a.o} +function Vje(a,b,c,d){var e,f,g,h,i;if(c.Xh(b)){e=(g=b,!g?null:RD(d,54).gi(g));if(e){i=c.Mh(b);h=b.t;if(h>1||h==-1){f=RD(i,15);e.Wb(Sje(a,f))}else{e.Wb(Rje(a,RD(i,58)))}}}} +function ceb(b,c,d,e){beb();var f=_db;$moduleName=c;$moduleBase=d;ydb=e;function g(){for(var a=0;a<f.length;a++){f[a]()}} +if(b){try{fve(g)()}catch(a){b(c,a)}}else{fve(g)()}} +function a6b(a,b){var c,d,e,f;for(e=(f=(new Xkb(a.b)).a.vc().Kc(),new blb(f));e.a.Ob();){d=(c=RD(e.a.Pb(),44),RD(c.ld(),34));if(egb(b,RD(d,17))<0){return false}}return true} +function b6b(a,b){var c,d,e,f;for(e=(f=(new Xkb(a.b)).a.vc().Kc(),new blb(f));e.a.Ob();){d=(c=RD(e.a.Pb(),44),RD(c.ld(),34));if(egb(b,RD(d,17))>0){return false}}return true} +function okc(a){var b,c,d,e,f;for(d=new vkb((new mkb(a.b)).a);d.b;){c=tkb(d);b=RD(c.ld(),10);f=RD(RD(c.md(),42).a,10);e=RD(RD(c.md(),42).b,8);$id(hjd(b.n),$id(ajd(f.n),e))}} +function Roc(a){switch(RD(mQb(a.b,(yCc(),BAc)),387).g){case 1:FDb(GDb(EDb(new SDb(null,new Swb(a.d,16)),new kpc),new mpc),new opc);break;case 2:Toc(a);break;case 0:Soc(a);}} +function SVc(a,b,c){var d,e,f;d=c;!d&&(d=new Oqd);d.Ug('Layout',a.a.c.length);for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),47);if(d.$g()){return}e.Kf(b,d.eh(1))}d.Vg()} +function ukd(){ukd=geb;tkd=new vkd('V_TOP',0);skd=new vkd('V_CENTER',1);rkd=new vkd('V_BOTTOM',2);pkd=new vkd('H_LEFT',3);okd=new vkd('H_CENTER',4);qkd=new vkd('H_RIGHT',5)} +function GYd(a){var b;if((a.Db&64)!=0)return MXd(a);b=new Shb(MXd(a));b.a+=' (abstract: ';Ohb(b,(a.Bb&256)!=0);b.a+=', interface: ';Ohb(b,(a.Bb&512)!=0);b.a+=')';return b.a} +function Bz(a){var b;if(a.c==null){b=dE(a.b)===dE(zz)?null:a.b;a.d=b==null?vve:aE(b)?Ez(VD(b)):bE(b)?uwe:nfb(rb(b));a.a=a.a+': '+(aE(b)?Dz(VD(b)):b+'');a.c='('+a.d+') '+a.a}} +function Gtb(){function b(){try{return (new Map).entries().next().done}catch(a){return false}} +if(typeof Map===kve&&Map.prototype.entries&&b()){return Map}else{return Htb()}} +function tUc(a,b){var c,d,e,f;f=new Jkb(a.e,0);c=0;while(f.b<f.d.gc()){d=Kfb((sFb(f.b<f.d.gc()),UD(f.d.Xb(f.c=f.b++))));e=d-b;if(e>AEe){return c}else e>-1.0E-6&&++c}return c} +function n2d(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=Jvd(a.b,a,-4,c));!!b&&(c=Ivd(b,a,-4,c));c=e2d(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} +function q2d(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=Jvd(a.f,a,-1,c));!!b&&(c=Ivd(b,a,-1,c));c=g2d(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,b,b))} +function Lge(a,b,c,d){var e,f,g,h;if(Mvd(a.e)){e=b.Lk();h=b.md();f=c.md();g=fge(a,1,e,h,f,e.Jk()?kge(a,e,f,ZD(e,102)&&(RD(e,19).Bb&txe)!=0):-1,true);d?d.nj(g):(d=g)}return d} +function bne(a){var b,c,d;if(a==null)return null;c=RD(a,15);if(c.dc())return '';d=new Qhb;for(b=c.Kc();b.Ob();){Nhb(d,(nme(),WD(b.Pb())));d.a+=' '}return qeb(d,d.a.length-1)} +function fne(a){var b,c,d;if(a==null)return null;c=RD(a,15);if(c.dc())return '';d=new Qhb;for(b=c.Kc();b.Ob();){Nhb(d,(nme(),WD(b.Pb())));d.a+=' '}return qeb(d,d.a.length-1)} +function QIc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Jfb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} +function RVc(a,b,c){c.Ug('Tree layout',1);Sed(a.b);Ved(a.b,(YVc(),UVc),UVc);Ved(a.b,VVc,VVc);Ved(a.b,WVc,WVc);Ved(a.b,XVc,XVc);a.a=Qed(a.b,b);SVc(a,b,c.eh(1));c.Vg();return b} +function ZDd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new vue(f);for(h=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);h.Ob();){g=RD(h.Pb(),17);e=xDd(b,g.a);d=new aFd(a);$Dd(d.a,e)}}} +function oEd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new vue(f);for(h=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);h.Ob();){g=RD(h.Pb(),17);e=xDd(b,g.a);d=new LEd(a);NDd(d.a,e)}}} +function ESd(b){var c;if(b!=null&&b.length>0&&ihb(b,b.length-1)==33){try{c=nSd(zhb(b,0,b.length-1));return c.e==null}catch(a){a=zdb(a);if(!ZD(a,33))throw Adb(a)}}return false} +function u0b(a,b,c){var d,e,f;d=Y2b(b);e=i2b(d);f=new R3b;P3b(f,b);switch(c.g){case 1:Q3b(f,spd(vpd(e)));break;case 2:Q3b(f,vpd(e));}pQb(f,(yCc(),ABc),UD(mQb(a,ABc)));return f} +function jdc(a){var b,c;b=RD(hs(new is(Mr(Z2b(a.a).a.Kc(),new ir))),18);c=RD(hs(new is(Mr(a3b(a.a).a.Kc(),new ir))),18);return Heb(TD(mQb(b,(Ywc(),Nwc))))||Heb(TD(mQb(c,Nwc)))} +function Bnc(){Bnc=geb;xnc=new Cnc('ONE_SIDE',0);znc=new Cnc('TWO_SIDES_CORNER',1);Anc=new Cnc('TWO_SIDES_OPPOSING',2);ync=new Cnc('THREE_SIDES',3);wnc=new Cnc('FOUR_SIDES',4)} +function Usc(a,b){var c,d,e,f;f=new bnb;e=0;d=b.Kc();while(d.Ob()){c=sgb(RD(d.Pb(),17).a+e);while(c.a<a.f&&!wsc(a,c.a)){c=sgb(c.a+1);++e}if(c.a>=a.f){break}ZEb(f.c,c)}return f} +function iIc(a,b){var c,d,e,f,g;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);for(d=new is(Mr(Z2b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);g=c.c.i.p;a.n[g]=a.n[g]-1}}} +function fOc(a){var b,c;for(c=new Anb(a.e.b);c.a<c.c.c.length;){b=RD(ynb(c),30);wOc(a,b)}FDb(CDb(EDb(EDb(new SDb(null,new Swb(a.e.b,16)),new wPc),new TPc),new VPc),new XPc(a))} +function oKd(a,b){if(!b){return false}else{if(a.mj(b)){return false}if(!a.i){if(ZD(b,152)){a.i=RD(b,152);return true}else{a.i=new fLd;return a.i.nj(b)}}else{return a.i.nj(b)}}} +function Hge(a,b,c){var d,e,f;d=b.Lk();f=b.md();e=d.Jk()?fge(a,3,d,null,f,kge(a,d,f,ZD(d,102)&&(RD(d,19).Bb&txe)!=0),true):fge(a,1,d,d.ik(),f,-1,true);c?c.nj(e):(c=e);return c} +function $me(a){a=nue(a,true);if(lhb(FGe,a)||lhb('1',a)){return Geb(),Feb}else if(lhb(GGe,a)||lhb('0',a)){return Geb(),Eeb}throw Adb(new Mle("Invalid boolean value: '"+a+"'"))} +function Kd(a,b,c){var d,e,f;for(e=a.vc().Kc();e.Ob();){d=RD(e.Pb(),44);f=d.ld();if(dE(b)===dE(f)||b!=null&&pb(b,f)){if(c){d=new xlb(d.ld(),d.md());e.Qb()}return d}}return null} +function WMb(a){RMb();var b,c,d;if(!a.B.Hc((dqd(),Xpd))){return}d=a.f.i;b=new Vid(a.a.c);c=new z3b;c.b=b.c-d.c;c.d=b.d-d.d;c.c=d.c+d.b-(b.c+b.b);c.a=d.d+d.a-(b.d+b.a);a.e.$f(c)} +function CQb(a,b,c,d){var e,f,g;g=$wnd.Math.min(c,FQb(RD(a.b,68),b,c,d));for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),225);e!=b&&(g=$wnd.Math.min(g,CQb(e,b,g,d)))}return g} +function c1b(a){var b,c,d,e;e=$C(jR,Nve,199,a.b.c.length,0,2);d=new Jkb(a.b,0);while(d.b<d.d.gc()){b=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),30));c=d.b-1;e[c]=t2b(b.a)}return e} +function c6b(a,b,c){var d,e,f;d=RD(cub(a.a,c),34);if(d!=null){f=RD(cub(a.b,d),67);ze(f,c,true)}e=RD(cub(a.b,b),67);if(!e){e=new Yub;dub(a.b,b,e)}Pub(e,c,e.c.b,e.c);dub(a.a,c,b)} +function _6b(a,b,c,d,e){var f,g,h,i;g=XNb(WNb(_Nb(Y6b(c)),d),T6b(a,c,e));for(i=e3b(a,c).Kc();i.Ob();){h=RD(i.Pb(),12);if(b[h.p]){f=b[h.p].i;Rmb(g.d,new sOb(f,UNb(g,f)))}}VNb(g)} +function Ylc(a,b){this.f=new Tsb;this.b=new Tsb;this.j=new Tsb;this.a=a;this.c=b;this.c>0&&Xlc(this,this.c-1,(qpd(),Xod));this.c<this.a.length-1&&Xlc(this,this.c+1,(qpd(),ppd))} +function Iqc(a,b){var c,d,e,f,g;for(f=new Anb(b.d);f.a<f.c.c.length;){e=RD(ynb(f),105);g=RD(Wjb(a.c,e),118).o;for(d=new Osb(e.b);d.a<d.c.a.length;){c=RD(Nsb(d),64);Umc(e,c,g)}}} +function qJc(a){a.length>0&&a[0].length>0&&(this.c=Heb(TD(mQb(Y2b(a[0][0]),(Ywc(),rwc)))));this.a=$C(aY,Nve,2117,a.length,0,2);this.b=$C(dY,Nve,2118,a.length,0,2);this.d=new Ks} +function TOc(a){if(a.c.length==0){return false}if((tFb(0,a.c.length),RD(a.c[0],18)).c.i.k==(r3b(),o3b)){return true}return yDb(GDb(new SDb(null,new Swb(a,16)),new WOc),new YOc)} +function I5c(a,b){var c,d,e,f,g,h,i;h=Q2c(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new Anb(h);d.a<d.c.c.length;){c=RD(ynb(d),27);e+=I5c(a,c)}return $wnd.Math.max(e,g)} +function Bod(){Bod=geb;Aod=new Eod(Sye,0);zod=new Eod('FREE',1);yod=new Eod('FIXED_SIDE',2);vod=new Eod('FIXED_ORDER',3);xod=new Eod('FIXED_RATIO',4);wod=new Eod('FIXED_POS',5)} +function Cee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),bLe));for(d=1;d<(lke(),kke).length;++d){if(lhb(kke[d],e)){return d}}}return 0} +function aob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function gob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Md(a){var b,c,d;d=new Jyb(pve,'{','}');for(c=a.vc().Kc();c.Ob();){b=RD(c.Pb(),44);Gyb(d,Nd(a,b.ld())+'='+Nd(a,b.md()))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function vJb(a){var b,c,d,e;while(!nmb(a.o)){c=RD(smb(a.o),42);d=RD(c.a,125);b=RD(c.b,218);e=oIb(b,d);if(b.e==d){EIb(e.g,b);d.e=e.e+b.a}else{EIb(e.b,b);d.e=e.e-b.a}Rmb(a.e.a,d)}} +function W9b(a,b){var c,d,e;c=null;for(e=RD(b.Kb(a),20).Kc();e.Ob();){d=RD(e.Pb(),18);if(!c){c=d.c.i==a?d.d.i:d.c.i}else{if((d.c.i==a?d.d.i:d.c.i)!=c){return false}}}return true} +function UTc(a,b){var c,d,e,f,g;c=uSc(a,false,b);for(e=new Anb(c);e.a<e.c.c.length;){d=RD(ynb(e),132);d.d==0?(_Sc(d,null),aTc(d,null)):(f=d.a,g=d.b,_Sc(d,g),aTc(d,f),undefined)}} +function QUc(a){var b,c;b=new ufd;ofd(b,CUc);c=RD(mQb(a,(Ywc(),kwc)),21);c.Hc((ovc(),nvc))&&ofd(b,GUc);c.Hc(evc)&&ofd(b,DUc);c.Hc(lvc)&&ofd(b,FUc);c.Hc(gvc)&&ofd(b,EUc);return b} +function iz(a,b,c){var d,e,f,g,h;String.fromCharCode(10);jz(a);for(e=(a.k==null&&(a.k=$C(rJ,Nve,82,0,0,1)),a.k),f=0,g=e.length;f<g;++f){d=e[f];iz(d,b,'\t'+c)}h=a.f;!!h&&iz(h,b,c)} +function kec(a){var b,c,d,e;jec(a);for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);d=b.c.i==a;e=d?b.d:b.c;d?Z0b(b,null):Y0b(b,null);pQb(b,(Ywc(),Ewc),e);oec(a,e.i)}} +function aqc(a,b,c,d){var e,f;f=b.i;e=c[f.g][a.d[f.g]];switch(f.g){case 1:e-=d+b.j.b;b.g.b=e;break;case 3:e+=d;b.g.b=e;break;case 4:e-=d+b.j.a;b.g.a=e;break;case 2:e+=d;b.g.a=e;}} +function K2c(a){var b,c,d;for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);d=yGd(b);if(!gs(new is(Mr(d.a.Kc(),new ir)))){return b}}return null} +function g3c(){g3c=geb;e3c=new h3c('OVERLAP_REMOVAL',0);b3c=new h3c(iFe,1);f3c=new h3c('ROTATION',2);c3c=new h3c('GRAPH_SIZE_CALCULATION',3);d3c=new h3c('OUTGOING_EDGE_ANGLES',4)} +function aCd(){var a;if(YBd)return RD(N5d((YSd(),XSd),$He),2115);a=RD(ZD(Xjb((YSd(),XSd),$He),569)?Xjb(XSd,$He):new _Bd,569);YBd=true;ZBd(a);$Bd(a);rBd(a);$jb(XSd,$He,a);return a} +function Tge(a,b,c){var d,e;if(a.j==0)return c;e=RD(jZd(a,b,c),76);d=c.Lk();if(!d.rk()||!a.a.am(d)){throw Adb(new yz("Invalid entry feature '"+d.qk().zb+'.'+d.xe()+"'"))}return e} +function Yi(a,b){var c,d,e,f,g,h,i,j;for(h=a.a,i=0,j=h.length;i<j;++i){g=h[i];for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(dE(b)===dE(c)||b!=null&&pb(b,c)){return true}}}return false} +function yjb(a){var b,c,d;if(Ddb(a,0)>=0){c=Fdb(a,ixe);d=Mdb(a,ixe)}else{b=Udb(a,1);c=Fdb(b,500000000);d=Mdb(b,500000000);d=Bdb(Sdb(d,1),Cdb(a,1))}return Rdb(Sdb(d,32),Cdb(c,yxe))} +function fTb(a,b,c){var d,e;d=(sFb(b.b!=0),RD(Wub(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Sub(b,0);cvb(e,d);return b} +function Vpc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=$pc(g,i.d[g.g],c);e=$id(ajd(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Pub(d,h,d.c.b,d.c)} +function YNc(a,b,c){var d,e,f,g;g=Wmb(a.e,b,0);f=new ZNc;f.b=c;d=new Jkb(a.e,g);while(d.b<d.d.gc()){e=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),10));e.p=c;Rmb(f.e,e);Ckb(d)}return f} +function l8c(a,b,c,d){var e,f,g,h,i;e=null;f=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);i=g.i+g.g;if(a<g.j+g.f+d){!e?(e=g):c.i-i<c.i-f&&(e=g);f=e.i+e.g}}return !e?0:f+d} +function m8c(a,b,c,d){var e,f,g,h,i;f=null;e=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);i=g.j+g.f;if(a<g.i+g.g+d){!f?(f=g):c.j-i<c.j-e&&(f=g);e=f.j+f.f}}return !f?0:e+d} +function CA(a){var b,c,d;b=false;d=a.b.c.length;for(c=0;c<d;c++){if(DA(RD(Vmb(a.b,c),443))){if(!b&&c+1<d&&DA(RD(Vmb(a.b,c+1),443))){b=true;RD(Vmb(a.b,c),443).a=true}}else{b=false}}} +function Ijb(a,b,c,d,e){var f,g;f=0;for(g=0;g<e;g++){f=Bdb(f,Vdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<c;g++){f=Bdb(f,Cdb(b[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}} +function Rjb(a,b){Ljb();var c,d;d=(Pib(),Kib);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=Wib(d,c));c.d==1?(c=Wib(c,c)):(c=new djb(Tjb(c.a,c.d,$C(kE,Pwe,28,c.d<<1,15,1))))}d=Wib(d,c);return d} +function Hwb(){Hwb=geb;var a,b,c,d;Ewb=$C(iE,vxe,28,25,15,1);Fwb=$C(iE,vxe,28,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){Fwb[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){Ewb[a]=c;c*=0.5}} +function a5b(a){var b,c;if(Heb(TD(Gxd(a,(yCc(),NAc))))){for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);if(ozd(b)){if(Heb(TD(Gxd(b,OAc)))){return true}}}}return false} +function Qmc(a,b){var c,d,e;if(Ysb(a.f,b)){b.b=a;d=b.c;Wmb(a.j,d,0)!=-1||Rmb(a.j,d);e=b.d;Wmb(a.j,e,0)!=-1||Rmb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new _mc(a));Wmc(a.i,c)}}} +function Xpc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p<e.p?0:1}else if(tpd(d)==f){return 0}else if(rpd(d)==f){return 1}else{b=a.b;return Csb(b.b,tpd(d))?0:1}} +function Pfd(a){var b;this.d=new Tsb;this.c=a.c;this.e=a.d;this.b=a.b;this.f=new ntd(a.e);this.a=a.a;!a.f?(this.g=(b=RD(mfb(T5),9),new Fsb(b,RD(WEb(b,b.length),9),0))):(this.g=a.f)} +function GEd(a,b){var c,d,e,f,g,h;e=a;g=yDd(e,'layoutOptions');!g&&(g=yDd(e,cIe));if(g){h=g;d=null;!!h&&(d=(f=oC(h,$C(qJ,Nve,2,0,6,1)),new CC(h,f)));if(d){c=new bFd(h,b);xgb(d,c)}}} +function AGd(a){if(ZD(a,207)){return RD(a,27)}else if(ZD(a,193)){return MCd(RD(a,123))}else if(!a){throw Adb(new Ogb(HIe))}else{throw Adb(new kib('Only support nodes and ports.'))}} +function SA(a,b,c,d){if(b>=0&&lhb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return JA(a,c,d)}if(b>=0&&lhb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return JA(a,c,d)}return JA(a,c,d)} +function Zmc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.n;e.a=f;a.i==(qpd(),Yod)?(e.b=g+a.j.b-c.o.b):(e.b=g);$id(e,b);f+=c.o.a+a.e}} +function Fqd(a,b,c){if(a.b){throw Adb(new dgb('The task is already done.'))}else if(a.p!=null){return false}else{a.p=b;a.r=c;a.k&&(a.o=(gib(),Ndb(Hdb(Date.now()),Awe)));return true}} +function HFd(a){var b,c,d,e,f,g,h;h=new uC;c=a.Pg();e=c!=null;e&&sDd(h,uIe,a.Pg());d=a.xe();f=d!=null;f&&sDd(h,GIe,a.xe());b=a.Og();g=b!=null;g&&sDd(h,'description',a.Og());return h} +function UVd(a,b,c){var d,e,f;f=a.q;a.q=b;if((a.Db&4)!=0&&(a.Db&1)==0){e=new N3d(a,1,9,f,b);!c?(c=e):c.nj(e)}if(!b){!!a.r&&(c=a.Yk(null,c))}else{d=b.c;d!=a.r&&(c=a.Yk(d,c))}return c} +function gae(a,b,c){var d,e,f,g,h;c=(h=b,Ivd(h,a.e,-1-a.c,c));g=$9d(a.a);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,a.a),c)}return c} +function hae(a,b,c){var d,e,f,g,h;c=(h=b,Jvd(h,a.e,-1-a.c,c));g=$9d(a.a);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,a.a),c)}return c} +function rjb(a,b,c,d){var e,f,g;if(d==0){hib(b,0,a,c,a.length-c)}else{g=32-d;a[a.length-1]=0;for(f=a.length-1;f>c;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<<d}}for(e=0;e<c;e++){a[e]=0}} +function CMb(a){var b,c,d,e,f;b=0;c=0;for(f=a.Kc();f.Ob();){d=RD(f.Pb(),117);b=$wnd.Math.max(b,d.d.b);c=$wnd.Math.max(c,d.d.c)}for(e=a.Kc();e.Ob();){d=RD(e.Pb(),117);d.d.b=b;d.d.c=c}} +function KNb(a){var b,c,d,e,f;c=0;b=0;for(f=a.Kc();f.Ob();){d=RD(f.Pb(),117);c=$wnd.Math.max(c,d.d.d);b=$wnd.Math.max(b,d.d.a)}for(e=a.Kc();e.Ob();){d=RD(e.Pb(),117);d.d.d=c;d.d.a=b}} +function Pnc(a,b,c,d,e){var f,g;f=RD(zDb(CDb(b.Oc(),new Foc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);Eob(f);g=RD($i(a.b,c,d),15);e==0?g.cd(0,f):g.Gc(f)} +function Sdd(a,b,c){c.Ug('Grow Tree',1);a.b=b.f;if(Heb(TD(mQb(b,(OQb(),MQb))))){a.c=new kRb;Odd(a,null)}else{a.c=new kRb}a.a=false;Qdd(a,b.f);pQb(b,NQb,(Geb(),a.a?true:false));c.Vg()} +function wsd(a){var b,c,d,e;b=null;for(e=new Anb(a.Rf());e.a<e.c.c.length;){d=RD(ynb(e),187);c=new Uid(d.Lf().a,d.Lf().b,d.Mf().a,d.Mf().b);!b?(b=c):Sid(b,c)}!b&&(b=new Tid);return b} +function dyd(a,b,c,d){var e,f;if(c==1){return !a.n&&(a.n=new C5d(I4,a,1,7)),qLd(a.n,b,d)}return f=RD(vYd((e=RD(Ywd(a,16),29),!e?a.ii():e),c),69),f.wk().zk(a,Wwd(a),c-AYd(a.ii()),b,d)} +function IHd(a,b,c){var d,e,f,g,h;d=c.gc();a._i(a.i+d);h=a.i-b;h>0&&hib(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;e<d;++e){f=g.Pb();MHd(a,b,a.Zi(b,f));a.Mi(b,f);a.Ni();++b}return d!=0} +function XVd(a,b,c){var d;if(b!=a.q){!!a.q&&(c=Jvd(a.q,a,-10,c));!!b&&(c=Ivd(b,a,-10,c));c=UVd(a,b,c)}else if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,9,b,b);!c?(c=d):c.nj(d)}return c} +function ek(a,b,c,d){Mb((c&Ove)==0,'flatMap does not support SUBSIZED characteristic');Mb((c&4)==0,'flatMap does not support SORTED characteristic');Qb(a);Qb(b);return new Mk(a,b,c,d)} +function fz(a,b){vFb(b,'Cannot suppress a null exception.');mFb(b!=a,'Exception can not suppress itself.');if(a.i){return}a.k==null?(a.k=cD(WC(rJ,1),Nve,82,0,[b])):(a.k[a.k.length]=b)} +function DLb(a,b){var c;c=ELb(a.b.ag(),b.b.ag());if(c!=0){return c}switch(a.b.ag().g){case 1:case 2:return hgb(a.b.Nf(),b.b.Nf());case 3:case 4:return hgb(b.b.Nf(),a.b.Nf());}return 0} +function eUb(a){var b,c,d;d=a.e.c.length;a.a=YC(kE,[Nve,Pwe],[53,28],15,[d,d],2);for(c=new Anb(a.c);c.a<c.c.c.length;){b=RD(ynb(c),289);a.a[b.c.a][b.d.a]+=RD(mQb(b,(yVb(),lVb)),17).a}} +function sAd(a,b){var c,d,e,f,g;if(a==null){return null}else{g=$C(hE,zwe,28,2*b,15,1);for(d=0,e=0;d<b;++d){c=a[d]>>4&15;f=a[d]&15;g[e++]=oAd[c];g[e++]=oAd[f]}return Ihb(g,0,g.length)}} +function Fhb(a){var b,c;if(a>=txe){b=uxe+(a-txe>>10&1023)&Bwe;c=56320+(a-txe&1023)&Bwe;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&Bwe)}} +function UMb(a,b){RMb();var c,d,e,f;e=RD(RD(Qc(a.r,b),21),87);if(e.gc()>=2){d=RD(e.Kc().Pb(),117);c=a.u.Hc((Pod(),Kod));f=a.u.Hc(Ood);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} +function v3c(a,b,c,d,e){var f,g,h;f=w3c(a,b,c,d,e);h=false;while(!f){n3c(a,e,true);h=true;f=w3c(a,b,c,d,e)}h&&n3c(a,e,false);g=N2c(e);if(g.c.length!=0){!!a.d&&a.d.Gg(g);v3c(a,e,c,d,g)}} +function ind(){ind=geb;gnd=new jnd(LAe,0);end=new jnd('DIRECTED',1);hnd=new jnd('UNDIRECTED',2);cnd=new jnd('ASSOCIATION',3);fnd=new jnd('GENERALIZATION',4);dnd=new jnd('DEPENDENCY',5)} +function nsd(a,b){var c;if(!MCd(a)){throw Adb(new dgb(sHe))}c=MCd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} +function Jge(a,b,c){var d,e,f;d=b.Lk();f=b.md();e=d.Jk()?fge(a,4,d,f,null,kge(a,d,f,ZD(d,102)&&(RD(d,19).Bb&txe)!=0),true):fge(a,d.tk()?2:1,d,f,d.ik(),-1,true);c?c.nj(e):(c=e);return c} +function lwb(a,b){var c,d;uFb(b);d=a.b.c.length;Rmb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.Ne(Vmb(a.b,d),b)<=0){$mb(a.b,c,b);return true}$mb(a.b,c,Vmb(a.b,d))}$mb(a.b,d,b);return true} +function sKb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f<jKb;f++){e=$wnd.Math.max(e,hKb(a.a[f][b.g],d))}}else{e=hKb(a.a[c.g][b.g],d)}b==(ZJb(),XJb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.a));return e} +function Qqc(a,b){var c,d,e,f,g,h;e=a.i;f=b.i;if(!e||!f){return false}if(e.i!=f.i||e.i==(qpd(),Xod)||e.i==(qpd(),ppd)){return false}g=e.g.a;c=g+e.j.a;h=f.g.a;d=h+f.j.a;return g<=d&&c>=h} +function A8c(a){switch(a.g){case 0:return new o8c;case 1:return new u8c;default:throw Adb(new agb('No implementation is available for the width approximator '+(a.f!=null?a.f:''+a.g)));}} +function rDd(a,b,c,d){var e;e=false;if(bE(d)){e=true;sDd(b,c,WD(d))}if(!e){if($D(d)){e=true;rDd(a,b,c,d)}}if(!e){if(ZD(d,242)){e=true;qDd(b,c,RD(d,242))}}if(!e){throw Adb(new Aeb(tIe))}} +function uee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=$Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),rKe);if(e!=null){for(d=1;d<(lke(),hke).length;++d){if(lhb(hke[d],e)){return d}}}}return 0} +function vee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=$Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),rKe);if(e!=null){for(d=1;d<(lke(),ike).length;++d){if(lhb(ike[d],e)){return d}}}}return 0} +function Ve(a,b){var c,d,e,f;uFb(b);f=a.a.gc();if(f<b.gc()){for(c=a.a.ec().Kc();c.Ob();){d=c.Pb();b.Hc(d)&&c.Qb()}}else{for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Bc(d)!=null}}return f!=a.a.gc()} +function e_b(a){var b,c;c=ajd(xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])));b=a.i.d;switch(a.j.g){case 1:c.b-=b.d;break;case 2:c.a+=b.c;break;case 3:c.b+=b.a;break;case 4:c.a-=b.b;}return c} +function edc(a){var b;b=(Zcc(),RD(hs(new is(Mr(Z2b(a).a.Kc(),new ir))),18).c.i);while(b.k==(r3b(),o3b)){pQb(b,(Ywc(),twc),(Geb(),true));b=RD(hs(new is(Mr(Z2b(b).a.Kc(),new ir))),18).c.i}} +function BMc(a,b,c,d){var e,f,g,h;h=aMc(b,d);for(g=h.Kc();g.Ob();){e=RD(g.Pb(),12);a.d[e.p]=a.d[e.p]+a.c[c.p]}h=aMc(c,d);for(f=h.Kc();f.Ob();){e=RD(f.Pb(),12);a.d[e.p]=a.d[e.p]-a.c[b.p]}} +function Isd(a,b,c){var d,e;for(e=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),27);Byd(d,d.i+b,d.j+c)}xgb((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b),new Osd(b,c))} +function $yb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.Ne(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.Ne(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function zIb(a){var b,c,d,e;b=new bnb;c=$C(xdb,Hye,28,a.a.c.length,16,1);Snb(c,c.length);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),125);if(!c[d.d]){ZEb(b.c,d);yIb(a,d,c)}}return b} +function UXb(a,b){var c,d,e,f,g;e=b==1?MXb:LXb;for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),88);for(g=RD(Qc(a.f.c,c),21).Kc();g.Ob();){f=RD(g.Pb(),42);Ymb(a.b.b,f.b);Ymb(a.b.a,RD(f.b,86).d)}}} +function P9b(a,b){var c;b.Ug('Hierarchical port position processing',1);c=a.b;c.c.length>0&&O9b((tFb(0,c.c.length),RD(c.c[0],30)),a);c.c.length>1&&O9b(RD(Vmb(c,c.c.length-1),30),a);b.Vg()} +function Sod(a){Pod();var b,c;b=ysb(Lod,cD(WC(D3,1),jwe,279,0,[Nod]));if(dy(Tx(b,a))>1){return false}c=ysb(Kod,cD(WC(D3,1),jwe,279,0,[Jod,Ood]));if(dy(Tx(c,a))>1){return false}return true} +function FBd(a,b){var c;c=Xjb((YSd(),XSd),a);ZD(c,507)?$jb(XSd,a,new B5d(this,b)):$jb(XSd,a,this);BBd(this,b);if(b==(jTd(),iTd)){this.wb=RD(this,2038);RD(b,2040)}else{this.wb=(lTd(),kTd)}} +function Lae(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d<nAd.length;++d){try{return b2d(nAd[d],b)}catch(a){a=zdb(a);if(ZD(a,33)){e=a;c=e}else throw Adb(a)}}throw Adb(new RSd(c))} +function Mrb(){Mrb=geb;Krb=cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);Lrb=cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} +function qBb(a){var b,c,d;b=lhb(typeof(b),Yxe)?null:new gFb;if(!b){return}SAb();c=(d=900,d>=Awe?'error':d>=900?'warn':d>=800?'info':'log');eFb(c,a.a);!!a.b&&fFb(b,c,a.b,'Exception: ',true)} +function mQb(a,b){var c,d;d=(!a.q&&(a.q=new Tsb),Wjb(a.q,b));if(d!=null){return d}c=b.Sg();ZD(c,4)&&(c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c)),a);return c} +function sXb(){sXb=geb;nXb=new tXb('P1_CYCLE_BREAKING',0);oXb=new tXb('P2_LAYERING',1);pXb=new tXb('P3_NODE_ORDERING',2);qXb=new tXb('P4_NODE_PLACEMENT',3);rXb=new tXb('P5_EDGE_ROUTING',4)} +function KZb(a,b){CZb();var c;if(a.c==b.c){if(a.b==b.b||rZb(a.b,b.b)){c=oZb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return hgb(a.b.g,b.b.g)}else{return Qfb(a.c,b.c)}} +function E3c(a,b){var c,d,e;if(p3c(a,b)){return true}for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),27);e=R2c(c);if(o3c(a,c,e)){return true}if(C3c(a,c)-a.g<=a.a){return true}}return false} +function ncd(){ncd=geb;mcd=(Kcd(),Jcd);jcd=Fcd;icd=Dcd;gcd=zcd;hcd=Bcd;fcd=new A3b(8);ecd=new mGd((umd(),tld),fcd);kcd=new mGd(fmd,8);lcd=Hcd;bcd=ucd;ccd=wcd;dcd=new mGd(Mkd,(Geb(),false))} +function hkd(){hkd=geb;ekd=new A3b(15);dkd=new mGd((umd(),tld),ekd);gkd=new mGd(fmd,15);fkd=new mGd(Rld,sgb(0));$jd=Wkd;akd=kld;ckd=pld;Xjd=new mGd(Dkd,KGe);_jd=ald;bkd=nld;Yjd=Fkd;Zjd=Kkd} +function JGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))} +function KGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))} +function MGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))} +function LGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))} +function bJd(a,b,c){var d,e,f;++a.j;e=a.Ej();if(b>=e||b<0)throw Adb(new veb(MIe+b+NIe+e));if(c>=e||c<0)throw Adb(new veb(OIe+c+NIe+e));b!=c?(d=(f=a.Cj(c),a.qj(b,f),f)):(d=a.xj(c));return d} +function Lje(a){var b,c,d;d=a;if(a){b=0;for(c=a.Eh();c;c=c.Eh()){if(++b>wxe){return Lje(c)}d=c;if(c==a){throw Adb(new dgb('There is a cycle in the containment hierarchy of '+a))}}}return d} +function Fe(a){var b,c,d;d=new Jyb(pve,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();Gyb(d,dE(b)===dE(a)?'(this Collection)':b==null?vve:jeb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function p3c(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;c<b.gc();c++){c<b.gc()-1?(d=d|o3c(a,RD(b.Xb(c),27),RD(b.Xb(c+1),27))):(d=d|o3c(a,RD(b.Xb(c),27),RD(b.Xb(0),27)))}return d} +function wAd(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=RD(a.a,54).Th(a,4,t7,c));!!b&&(c=RD(b,54).Rh(a,4,t7,c));c=rAd(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,b,b))} +function p2d(a,b){var c;if(b!=a.e){!!a.e&&oae($9d(a.e),a);!!b&&(!b.b&&(b.b=new pae(new lae)),nae(b.b,a));c=f2d(a,b,null);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,b,b))} +function $mc(a,b){var c;c=b.o;if(Dmd(a.f)){a.j.a=$wnd.Math.max(a.j.a,c.a);a.j.b+=c.b;a.d.c.length>1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} +function Mnc(){Mnc=geb;Jnc=cD(WC(E3,1),NAe,64,0,[(qpd(),Yod),Xod,npd]);Inc=cD(WC(E3,1),NAe,64,0,[Xod,npd,ppd]);Knc=cD(WC(E3,1),NAe,64,0,[npd,ppd,Yod]);Lnc=cD(WC(E3,1),NAe,64,0,[ppd,Yod,Xod])} +function Upc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?tpd(e):rpd(e);f=$pc(e,k.d[e.g],c);j=$pc(i,k.d[i.g],c);Mub(d,$id(f,j));e=i}} +function OJc(a,b,c,d){var e,f,g,h,i;g=hMc(a.a,b,c);h=RD(g.a,17).a;f=RD(g.b,17).a;if(d){i=RD(mQb(b,(Ywc(),Iwc)),10);e=RD(mQb(c,Iwc),10);if(!!i&&!!e){Slc(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function OLc(a){var b,c,d,e,f,g,h,i,j;this.a=LLc(a);this.b=new bnb;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=new bnb;Rmb(this.b,f);for(h=b,i=0,j=h.length;i<j;++i){g=h[i];Rmb(f,new dnb(g.j))}}} +function QLc(a,b,c){var d,e,f;f=0;d=c[b];if(b<c.length-1){e=c[b+1];if(a.b[b]){f=iNc(a.d,d,e);f+=lMc(a.a,d,(qpd(),Xod));f+=lMc(a.a,e,ppd)}else{f=gMc(a.a,d,e)}}a.c[b]&&(f+=nMc(a.a,d));return f} +function r0b(a,b,c,d,e){var f,g,h,i;i=null;for(h=new Anb(d);h.a<h.c.c.length;){g=RD(ynb(h),452);if(g!=c&&Wmb(g.e,e,0)!=-1){i=g;break}}f=s0b(e);Y0b(f,c.b);Z0b(f,i.b);Rc(a.a,e,new J0b(f,b,c.f))} +function h2b(a){var b,c,d,e;if(Emd(RD(mQb(a.b,(yCc(),rAc)),88))){return 0}b=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(c.k==(r3b(),p3b)){e=c.o.a;b=$wnd.Math.max(b,e)}}return b} +function Tlc(a){while(a.g.c!=0&&a.d.c!=0){if(amc(a.g).c>amc(a.d).c){a.i+=a.g.c;cmc(a.d)}else if(amc(a.d).c>amc(a.g).c){a.e+=a.d.c;cmc(a.g)}else{a.i+=_lc(a.g);a.e+=_lc(a.d);cmc(a.g);cmc(a.d)}}} +function vTc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new bTc((fTc(),dTc),b,f,1);new bTc(dTc,f,g,1);for(e=new Anb(c);e.a<e.c.c.length;){d=RD(ynb(e),118);if(d!=f&&d!=b&&d!=g){PTc(a.a,d,b);PTc(a.a,d,g)}}} +function vVc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(b<c){a.b=0.5*(b+c);a.g=CEe*a.b+0.9*b;a.f=CEe*a.b+0.9*c}else{a.b=0.5*(b+d);a.g=CEe*a.b+0.9*d;a.f=CEe*a.b+0.9*b}} +function zZc(a){var b,c,d,e;if(a.b!=0){b=new Yub;for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),39);ye(b,$Wc(d));c=d.e;c.a=RD(mQb(d,(q$c(),o$c)),17).a;c.b=RD(mQb(d,p$c),17).a}return b}return new Yub} +function t8b(a){switch(RD(mQb(a,(yCc(),UAc)),171).g){case 1:pQb(a,UAc,(cxc(),_wc));break;case 2:pQb(a,UAc,(cxc(),axc));break;case 3:pQb(a,UAc,(cxc(),Zwc));break;case 4:pQb(a,UAc,(cxc(),$wc));}} +function Whc(a,b,c){var d;c.Ug('Self-Loop routing',1);d=Xhc(b);fE(mQb(b,(rid(),qid)));FDb(GDb(CDb(CDb(EDb(new SDb(null,new Swb(b.b,16)),new $hc),new aic),new cic),new eic),new gic(a,d));c.Vg()} +function $uc(){$uc=geb;Yuc=new _uc(LAe,0);Vuc=new _uc(Nye,1);Zuc=new _uc(Oye,2);Xuc=new _uc('LEFT_RIGHT_CONSTRAINT_LOCKING',3);Wuc=new _uc('LEFT_RIGHT_CONNECTION_LOCKING',4);Uuc=new _uc(EBe,5)} +function tWc(a,b,c){var d,e,f,g,h,i,j;h=c.a/2;f=c.b/2;d=$wnd.Math.abs(b.a-a.a);e=$wnd.Math.abs(b.b-a.b);i=1;j=1;d>h&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function I8c(a,b,c,d,e){var f,g;g=false;f=RD(Vmb(c.b,0),27);while(V8c(a,b,f,d,e)){g=true;T9c(c,f);if(c.b.c.length==0){break}f=RD(Vmb(c.b,0),27)}c.b.c.length==0&&Fad(c.j,c);g&&gad(b.q);return g} +function Eid(a,b){tid();var c,d,e,f;if(b.b<2){return false}f=Sub(b,0);c=RD(evb(f),8);d=c;while(f.b!=f.d.c){e=RD(evb(f),8);if(Did(a,d,e)){return true}d=e}if(Did(a,d,c)){return true}return false} +function Bxd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),BVd(a.o,b,d)}return f=RD(vYd((e=RD(Ywd(a,16),29),!e?a.ii():e),c),69),f.wk().Ak(a,Wwd(a),c-AYd(a.ii()),b,d)} +function BBd(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=RD(a.sb,54).Th(a,1,n7,c));!!b&&(c=RD(b,54).Rh(a,1,n7,c));c=hBd(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,b,b))} +function YDd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new ZEd(a);Hzd(c.a,(uFb(e),e));f=vDd(b,'y');d=new $Ed(a);Izd(d.a,(uFb(f),f))}else{throw Adb(new CDd('All edge sections need an end point.'))}} +function WDd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new WEd(a);Ozd(c.a,(uFb(e),e));f=vDd(b,'y');d=new XEd(a);Pzd(d.a,(uFb(f),f))}else{throw Adb(new CDd('All edge sections need a start point.'))}} +function hBb(a,b){var c,d,e,f,g,h,i;for(d=kBb(a),f=0,h=d.length;f<h;++f){qBb(b)}i=!dBb&&a.e?dBb?null:a.d:null;while(i){for(c=kBb(i),e=0,g=c.length;e<g;++e){qBb(b)}i=!dBb&&i.e?dBb?null:i.d:null}} +function aXb(a,b){var c,d;d=RD(mQb(b,(yCc(),BBc)),101);pQb(b,(Ywc(),Fwc),d);c=b.e;!!c&&(FDb(new SDb(null,new Swb(c.a,16)),new fXb(a)),FDb(EDb(new SDb(null,new Swb(c.b,16)),new hXb),new jXb(a)))} +function r3b(){r3b=geb;p3b=new s3b('NORMAL',0);o3b=new s3b('LONG_EDGE',1);m3b=new s3b('EXTERNAL_PORT',2);q3b=new s3b('NORTH_SOUTH_PORT',3);n3b=new s3b('LABEL',4);l3b=new s3b('BREAKING_POINT',5)} +function x7b(a){var b,c,d,e;b=false;if(nQb(a,(Ywc(),cwc))){c=RD(mQb(a,cwc),85);for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);if(v7b(d)){if(!b){u7b(Y2b(a));b=true}y7b(RD(c.xc(d),314))}}}} +function GFd(a){var b,c,d,e,f,g,h,i,j;j=HFd(a);c=a.e;f=c!=null;f&&sDd(j,FIe,a.e);h=a.k;g=!!h;g&&sDd(j,'type',ps(a.k));d=cve(a.j);e=!d;if(e){i=new MB;sC(j,lIe,i);b=new SFd(i);xgb(a.j,b)}return j} +function Zv(a){var b,c,d,e;e=Thb((dk(a.gc(),'size'),new cib),123);d=true;for(c=gn(a).Kc();c.Ob();){b=RD(c.Pb(),44);d||(e.a+=pve,e);d=false;Yhb(Thb(Yhb(e,b.ld()),61),b.md())}return (e.a+='}',e).a} +function AD(a,b){var c,d,e;b&=63;if(b<22){c=a.l<<b;d=a.m<<b|a.l>>22-b;e=a.h<<b|a.m>>22-b}else if(b<44){c=0;d=a.l<<b-22;e=a.m<<b-22|a.l>>44-b}else{c=0;d=0;e=a.l<<b-44}return hD(c&dxe,d&dxe,e&exe)} +function Neb(a){Meb==null&&(Meb=new RegExp('^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$'));if(!Meb.test(a)){throw Adb(new Vgb(nxe+a+'"'))}return parseFloat(a)} +function PXb(a,b){var c,d,e,f,g;e=b==1?MXb:LXb;for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),88);for(g=RD(Qc(a.f.c,c),21).Kc();g.Ob();){f=RD(g.Pb(),42);Rmb(a.b.b,RD(f.b,86));Rmb(a.b.a,RD(f.b,86).d)}}} +function rqc(a,b){var c,d,e,f;f=b.b.j;a.a=$C(kE,Pwe,28,f.c.length,15,1);e=0;for(d=0;d<f.c.length;d++){c=(tFb(d,f.c.length),RD(f.c[d],12));c.e.c.length==0&&c.g.c.length==0?(e+=1):(e+=3);a.a[d]=e}} +function tuc(){tuc=geb;ouc=new vuc('ALWAYS_UP',0);nuc=new vuc('ALWAYS_DOWN',1);quc=new vuc('DIRECTION_UP',2);puc=new vuc('DIRECTION_DOWN',3);suc=new vuc('SMART_UP',4);ruc=new vuc('SMART_DOWN',5)} +function vid(a,b){if(a<0||b<0){throw Adb(new agb('k and n must be positive'))}else if(b>a){throw Adb(new agb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:Bid(a)/(Bid(b)*Bid(a-b))} +function msd(a,b){var c,d,e,f;c=new zId(a);while(c.g==null&&!c.c?sId(c):c.g==null||c.i!=0&&RD(c.g[c.i-1],51).Ob()){f=RD(tId(c),58);if(ZD(f,167)){d=RD(f,167);for(e=0;e<b.length;e++){b[e].Kg(d)}}}} +function Fyd(a){var b;if((a.Db&64)!=0)return kyd(a);b=new Shb(kyd(a));b.a+=' (height: ';Khb(b,a.f);b.a+=', width: ';Khb(b,a.g);b.a+=', x: ';Khb(b,a.i);b.a+=', y: ';Khb(b,a.j);b.a+=')';return b.a} +function Gn(a){var b,c,d,e,f,g,h;b=new gub;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];g=Qb(c.ld());h=dub(b,g,Qb(c.md()));if(h!=null){throw Adb(new agb('duplicate key: '+g))}}this.b=(yob(),new uqb(b))} +function bob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,String.fromCharCode(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function OUb(){OUb=geb;IUb=(TUb(),SUb);HUb=new lGd(Rze,IUb);sgb(1);GUb=new lGd(Sze,sgb(300));sgb(0);LUb=new lGd(Tze,sgb(0));new Xsd;MUb=new lGd(Uze,Vze);new Xsd;JUb=new lGd(Wze,5);NUb=SUb;KUb=RUb} +function K6d(a,b){var c;if(b!=null&&!a.c.Hk().fk(b)){c=ZD(b,58)?RD(b,58).Dh().zb:nfb(rb(b));throw Adb(new Ifb(KHe+a.c.xe()+"'s type '"+a.c.Hk().xe()+"' does not permit a value of type '"+c+"'"))}} +function k0b(a,b,c){var d,e;e=new Jkb(a.b,0);while(e.b<e.d.gc()){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),72));if(dE(mQb(d,(Ywc(),Dwc)))!==dE(b)){continue}e2b(d.n,Y2b(a.c.i),c);Ckb(e);Rmb(b.b,d)}} +function Arc(a){var b,c;c=$wnd.Math.sqrt((a.k==null&&(a.k=tsc(a,new Esc)),Kfb(a.k)/(a.b*(a.g==null&&(a.g=qsc(a,new Csc)),Kfb(a.g)))));b=Ydb(Hdb($wnd.Math.round(c)));b=$wnd.Math.min(b,a.f);return b} +function sse(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=rse((BFb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw Adb(new Lqe((BFb(a,'X'.length+1),'Unknown Option: '+'X'.substr(a))));b|=c}return b} +function R3b(){J3b();v2b.call(this);this.j=(qpd(),opd);this.a=new pjd;new T2b;this.f=(dk(2,iwe),new cnb(2));this.e=(dk(4,iwe),new cnb(4));this.g=(dk(4,iwe),new cnb(4));this.b=new h4b(this.e,this.g)} +function A6b(a,b){var c,d;if(Heb(TD(mQb(b,(Ywc(),Nwc))))){return false}d=b.c.i;if(a==(cxc(),Zwc)){if(d.k==(r3b(),n3b)){return false}}c=RD(mQb(d,(yCc(),UAc)),171);if(c==$wc){return false}return true} +function B6b(a,b){var c,d;if(Heb(TD(mQb(b,(Ywc(),Nwc))))){return false}d=b.d.i;if(a==(cxc(),_wc)){if(d.k==(r3b(),n3b)){return false}}c=RD(mQb(d,(yCc(),UAc)),171);if(c==axc){return false}return true} +function a7b(a,b){var c,d,e,f,g,h,i;g=a.d;i=a.o;h=new Uid(-g.b,-g.d,g.b+i.a+g.c,g.d+i.b+g.a);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];!!c&&Sid(h,c.i)}g.b=-h.c;g.d=-h.d;g.c=h.b-g.b-i.a;g.a=h.a-g.d-i.b} +function _gc(a,b){if(b.a){switch(RD(mQb(b.b,(Ywc(),Fwc)),101).g){case 0:case 1:Roc(b);case 2:FDb(new SDb(null,new Swb(b.d,16)),new mhc);aoc(a.a,b);}}else{FDb(new SDb(null,new Swb(b.d,16)),new mhc)}} +function Xbd(){Xbd=geb;Sbd=new Ybd('CENTER_DISTANCE',0);Tbd=new Ybd('CIRCLE_UNDERLAP',1);Wbd=new Ybd('RECTANGLE_UNDERLAP',2);Ubd=new Ybd('INVERTED_OVERLAP',3);Vbd=new Ybd('MINIMUM_ROOT_DISTANCE',4)} +function Iqe(a){Gqe();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=$C(hE,zwe,28,e,15,1);for(c=0;c<d;c++){f=a[c];f<0&&(f+=256);b[c*2]=Fqe[f>>4];b[c*2+1]=Fqe[f&15]}return Ihb(b,0,b.length)} +function sn(a){fn();var b,c,d;d=a.c.length;switch(d){case 0:return en;case 1:b=RD(Ir(new Anb(a)),44);return xn(b.ld(),b.md());default:c=RD(anb(a,$C(UK,Zve,44,a.c.length,0,1)),173);return new Mx(c);}} +function KWb(a){var b,c,d,e,f,g;b=new wmb;c=new wmb;hmb(b,a);hmb(c,a);while(c.b!=c.c){e=RD(smb(c),36);for(g=new Anb(e.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.e){d=f.e;hmb(b,d);hmb(c,d)}}}return b} +function e3b(a,b){switch(b.g){case 1:return dr(a.j,(J3b(),F3b));case 2:return dr(a.j,(J3b(),D3b));case 3:return dr(a.j,(J3b(),H3b));case 4:return dr(a.j,(J3b(),I3b));default:return yob(),yob(),vob;}} +function Zlc(a,b){var c,d,e;c=$lc(b,a.e);d=RD(Wjb(a.g.f,c),17).a;e=a.a.c.length-1;if(a.a.c.length!=0&&RD(Vmb(a.a,e),293).c==d){++RD(Vmb(a.a,e),293).a;++RD(Vmb(a.a,e),293).b}else{Rmb(a.a,new hmc(d))}} +function tLc(a,b,c){var d,e;d=sLc(a,b,c);if(d!=0){return d}if(nQb(b,(Ywc(),zwc))&&nQb(c,zwc)){e=hgb(RD(mQb(b,zwc),17).a,RD(mQb(c,zwc),17).a);e<0?uLc(a,b,c):e>0&&uLc(a,c,b);return e}return rLc(a,b,c)} +function $4c(){$4c=geb;R4c=(umd(),Qld);Y4c=fmd;K4c=kld;L4c=nld;M4c=pld;J4c=ild;N4c=sld;Q4c=Lld;H4c=(D4c(),o4c);I4c=p4c;T4c=v4c;W4c=y4c;U4c=w4c;V4c=x4c;O4c=r4c;P4c=t4c;S4c=u4c;X4c=z4c;Z4c=B4c;G4c=n4c} +function P9c(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(R9c(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+1<f){c=S9c(a,e,false);if(c.b<=e&&c.a<=b){g=e;f=e}else{d=e}e=(f-d)/2+d}return g} +function Eed(a,b,c){var d;d=zed(a,b,true);Fqd(c,'Recursive Graph Layout',d);msd(b,cD(WC(j4,1),rve,536,0,[new Bfd]));Hxd(b,(umd(),Tld))||msd(b,cD(WC(j4,1),rve,536,0,[new dgd]));Fed(a,b,null,c);Hqd(c)} +function Hqd(a){var b;if(a.p==null){throw Adb(new dgb('The task has not begun yet.'))}if(!a.b){if(a.k){b=(gib(),Ndb(Hdb(Date.now()),Awe));a.q=Xdb(Vdb(b,a.o))*1.0E-9}a.c<a.r&&Iqd(a,a.r-a.c);a.b=true}} +function ssd(a){var b,c,d;d=new Ejd;Mub(d,new rjd(a.j,a.k));for(c=new dMd((!a.a&&(a.a=new XZd(D4,a,5)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),377);Mub(d,new rjd(b.a,b.b))}Mub(d,new rjd(a.b,a.c));return d} +function QDd(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new vue(i);for(k=(f.b-f.a)*f.c<0?(uue(),tue):new Rue(f);k.Ob();){j=RD(k.Pb(),17);h=xDd(e,j.a);g=new PEd(a,b,c,d);RDd(g.a,g.b,g.c,g.d,h)}}} +function Rx(b,c){var d;if(dE(b)===dE(c)){return true}if(ZD(c,21)){d=RD(c,21);try{return b.gc()==d.gc()&&b.Ic(d)}catch(a){a=zdb(a);if(ZD(a,169)||ZD(a,212)){return false}else throw Adb(a)}}return false} +function Kzb(a,b,c,d,e,f){this.c=a;switch(b.g){case 2:if(a.a.Ne(e,c)<0){throw Adb(new agb(Sxe+e+Txe+c))}break;case 1:a.a.Ne(e,e);break;case 3:a.a.Ne(c,c);}this.f=b;this.b=c;this.a=d;this.e=e;this.d=f} +function LKb(a,b){var c;Rmb(a.d,b);c=b.Mf();if(a.c){a.e.a=$wnd.Math.max(a.e.a,c.a);a.e.b+=c.b;a.d.c.length>1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function Ipc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} +function oOc(a,b,c){var d,e,f;for(e=new is(Mr(W2b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(!(!W0b(d)&&!(!W0b(d)&&d.c.i.c==d.d.i.c))){continue}f=gOc(a,d,c,new VOc);f.c.length>1&&(ZEb(b.c,f),true)}} +function _id(a,b,c,d,e){if(d<b||e<c){throw Adb(new agb('The highx must be bigger then lowx and the highy must be bigger then lowy'))}a.a<b?(a.a=b):a.a>d&&(a.a=d);a.b<c?(a.b=c):a.b>e&&(a.b=e);return a} +function LFd(a){if(ZD(a,143)){return EFd(RD(a,143))}else if(ZD(a,233)){return FFd(RD(a,233))}else if(ZD(a,23)){return GFd(RD(a,23))}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[a])))))}} +function ujb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g<d;g++){f=f&c[g]==0}if(e==0){hib(c,d,a,0,b);g=b}else{h=32-e;f=f&c[g]<<h==0;for(g=0;g<b-1;g++){a[g]=c[g+d]>>>e|c[g+d+1]<<h}a[g]=c[g+d]>>>e;++g}return f} +function ZQc(a,b,c,d){var e,f,g;if(b.k==(r3b(),o3b)){for(f=new is(Mr(Z2b(b).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);g=e.c.i.k;if(g==o3b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} +function CD(a,b){var c,d,e,f;b&=63;c=a.h&exe;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return hD(d&dxe,e&dxe,f&exe)} +function mmc(a,b,c,d){var e;this.b=d;this.e=a==(RKc(),PKc);e=b[c];this.d=YC(xdb,[Nve,Hye],[183,28],16,[e.length,e.length],2);this.a=YC(kE,[Nve,Pwe],[53,28],15,[e.length,e.length],2);this.c=new Ylc(b,c)} +function Rmc(a){var b,c,d;a.k=new Si((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,a.j.c.length);for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),113);b=c.d.j;Rc(a.k,b,c)}a.e=Dnc(Ec(a.k))} +function sVc(a,b){var c,d,e;Ysb(a.d,b);c=new zVc;Zjb(a.c,b,c);c.f=tVc(b.c);c.a=tVc(b.d);c.d=(HUc(),e=b.c.i.k,e==(r3b(),p3b)||e==l3b);c.e=(d=b.d.i.k,d==p3b||d==l3b);c.b=b.c.j==(qpd(),ppd);c.c=b.d.j==Xod} +function sJb(a){var b,c,d,e,f;f=lve;e=lve;for(d=new Anb(CIb(a));d.a<d.c.c.length;){c=RD(ynb(d),218);b=c.e.e-c.d.e;c.e==a&&b<e?(e=b):b<f&&(f=b)}e==lve&&(e=-1);f==lve&&(f=-1);return new Ptd(sgb(e),sgb(f))} +function qTb(a,b){var c,d,e;e=Hze;d=(IRb(),FRb);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(c<e){e=c;d=GRb}c=$wnd.Math.abs(a.a);if(c<e){e=c;d=HRb}c=$wnd.Math.abs(b.g-a.a);if(c<e){e=c;d=ERb}return d} +function adc(a,b){var c,d,e,f;c=b.a.o.a;f=new Rkb(Y2b(b.a).b,b.c,b.f+1);for(e=new Dkb(f);e.b<e.d.gc();){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),30));if(d.c.a>=c){_cc(a,b,d.p);return true}}return false} +function EA(a,b,c,d){var e,f,g,h,i,j;g=c.length;f=0;e=-1;j=Bhb((BFb(b,a.length+1),a.substr(b)),(wvb(),uvb));for(h=0;h<g;++h){i=c[h].length;if(i>f&&whb(j,Bhb(c[h],uvb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function gCd(a){var b;if((a.Db&64)!=0)return Fyd(a);b=new dib(FHe);!a.a||Zhb(Zhb((b.a+=' "',b),a.a),'"');Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function xge(a,b,c){var d,e,f,g,h;h=pke(a.e.Dh(),b);e=RD(a.g,124);d=0;for(g=0;g<a.i;++g){f=e[g];if(h.am(f.Lk())){if(d==c){vLd(a,g);return nke(),RD(b,69).xk()?f:f.md()}++d}}throw Adb(new veb(HJe+c+NIe+d))} +function Rqe(a){var b,c,d;b=a.c;if(b==2||b==7||b==1){return Vse(),Vse(),Ese}else{d=Pqe(a);c=null;while((b=a.c)!=2&&b!=7&&b!=1){if(!c){c=(Vse(),Vse(),++Use,new iue(1));hue(c,d);d=c}hue(c,Pqe(a))}return d}} +function Kb(a,b,c){if(a<0||a>c){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',cD(WC(jJ,1),rve,1,5,[sgb(b),sgb(a)]))} +function dA(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].Um()&&(c=cA(c,g)):g[0].Um()}catch(a){a=zdb(a);if(ZD(a,82)){d=a;Qz();Wz(ZD(d,485)?RD(d,485).ke():d)}else throw Adb(a)}}return c} +function _cc(a,b,c){var d,e,f;c!=b.c+b.b.gc()&&odc(b.a,wdc(b,c-b.c));f=b.a.c.p;a.a[f]=$wnd.Math.max(a.a[f],b.a.o.a);for(e=RD(mQb(b.a,(Ywc(),Mwc)),15).Kc();e.Ob();){d=RD(e.Pb(),72);pQb(d,Ycc,(Geb(),true))}} +function Aic(a,b){var c,d,e;e=zic(b);pQb(b,(Ywc(),xwc),e);if(e){d=lve;!!qtb(a.f,e)&&(d=RD(Wd(qtb(a.f,e)),17).a);c=RD(Vmb(b.g,0),18);Heb(TD(mQb(c,Nwc)))||Zjb(a,e,sgb($wnd.Math.min(RD(mQb(c,zwc),17).a,d)))}} +function aGc(a,b,c){var d,e,f,g,h;b.p=-1;for(h=c3b(b,(BEc(),zEc)).Kc();h.Ob();){g=RD(h.Pb(),12);for(e=new Anb(g.g);e.a<e.c.c.length;){d=RD(ynb(e),18);f=d.d.i;b!=f&&(f.p<0?c.Fc(d):f.p>0&&aGc(a,f,c))}}b.p=0} +function Ahd(a){var b;this.c=new Yub;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=RD(mfb(d3),9),new Fsb(b,RD(WEb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} +function Wb(a){var b,c,d,e;b=Thb(Zhb(new dib('Predicates.'),'and'),40);c=true;for(e=new Dkb(a);e.b<e.d.gc();){d=(sFb(e.b<e.d.gc()),e.d.Xb(e.c=e.b++));c||(b.a+=',',b);b.a+=''+d;c=false}return (b.a+=')',b).a} +function vgc(a,b,c){var d,e,f;if(c<=b+2){return}e=(c-b)/2|0;for(d=0;d<e;++d){f=(tFb(b+d,a.c.length),RD(a.c[b+d],12));$mb(a,b+d,(tFb(c-d-1,a.c.length),RD(a.c[c-d-1],12)));tFb(c-d-1,a.c.length);a.c[c-d-1]=f}} +function Nmc(a,b,c){var d,e,f,g,h,i,j,k;f=a.d.p;h=f.e;i=f.r;a.g=new DMc(i);g=a.d.o.c.p;d=g>0?h[g-1]:$C(jR,WAe,10,0,0,1);e=h[g];j=g<h.length-1?h[g+1]:$C(jR,WAe,10,0,0,1);k=b==c-1;k?pMc(a.g,e,j):pMc(a.g,d,e)} +function Vmc(a){var b;this.j=new bnb;this.f=new _sb;this.b=(b=RD(mfb(E3),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.d=$C(kE,Pwe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.g=a} +function D3c(a,b){var c,d,e;if(b.c.length!=0){c=E3c(a,b);e=false;while(!c){n3c(a,b,true);e=true;c=E3c(a,b)}e&&n3c(a,b,false);d=N2c(b);!!a.b&&a.b.Gg(d);a.a=C3c(a,(tFb(0,b.c.length),RD(b.c[0],27)));D3c(a,d)}} +function $vd(a,b){var c,d,e;d=vYd(a.Dh(),b);c=b-a.ji();if(c<0){if(!d){throw Adb(new agb(OHe+b+PHe))}else if(d.rk()){e=a.Ih(d);e>=0?a.ki(e):Tvd(a,d)}else{throw Adb(new agb(KHe+d.xe()+LHe))}}else{Cvd(a,c,d)}} +function ADd(a){var b,c;c=null;b=false;if(ZD(a,211)){b=true;c=RD(a,211).a}if(!b){if(ZD(a,263)){b=true;c=''+RD(a,263).a}}if(!b){if(ZD(a,492)){b=true;c=''+RD(a,492).a}}if(!b){throw Adb(new Aeb(tIe))}return c} +function gge(a,b,c){var d,e,f,g,h,i;i=pke(a.e.Dh(),b);d=0;h=a.i;e=RD(a.g,124);for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){if(c==d){return g}++d;h=g+1}}if(c==d){return h}else{throw Adb(new veb(HJe+c+NIe+d))}} +function ucc(a,b){var c,d,e,f;if(a.f.c.length==0){return null}else{f=new Tid;for(d=new Anb(a.f);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.o;f.b=$wnd.Math.max(f.b,e.a);f.a+=e.b}f.a+=(a.f.c.length-1)*b;return f}} +function rOc(a){var b,c,d,e;c=new Yub;ye(c,a.o);d=new Fyb;while(c.b!=0){b=RD(c.b==0?null:(sFb(c.b!=0),Wub(c,c.a.a)),515);e=iOc(a,b,true);e&&Rmb(d.a,b)}while(d.a.c.length!=0){b=RD(Dyb(d),515);iOc(a,b,false)}} +function kid(){kid=geb;jid=new lid(Sye,0);cid=new lid('BOOLEAN',1);gid=new lid('INT',2);iid=new lid('STRING',3);did=new lid('DOUBLE',4);eid=new lid('ENUM',5);fid=new lid('ENUMSET',6);hid=new lid('OBJECT',7)} +function Sid(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e<d){c=d;d=e;e=c}if(g<f){c=f;f=g;g=c}Rid(a,d,f,e-d,g-f)} +function m3d(a,b){var c,d;if(a.f){while(b.Ob()){c=RD(b.Pb(),76);d=c.Lk();if(ZD(d,102)&&(RD(d,19).Bb&QHe)!=0&&(!a.e||d.pk()!=C4||d.Lj()!=0)&&c.md()!=null){b.Ub();return true}}return false}else{return b.Ob()}} +function o3d(a,b){var c,d;if(a.f){while(b.Sb()){c=RD(b.Ub(),76);d=c.Lk();if(ZD(d,102)&&(RD(d,19).Bb&QHe)!=0&&(!a.e||d.pk()!=C4||d.Lj()!=0)&&c.md()!=null){b.Pb();return true}}return false}else{return b.Sb()}} +function lke(){lke=geb;ike=cD(WC(qJ,1),Nve,2,6,[TKe,UKe,VKe,WKe,XKe,YKe,FIe]);hke=cD(WC(qJ,1),Nve,2,6,[TKe,'empty',UKe,pKe,'elementOnly']);kke=cD(WC(qJ,1),Nve,2,6,[TKe,'preserve','replace',ZKe]);jke=new Yee} +function e2b(a,b,c){var d,e,f;if(b==c){return}d=b;do{$id(a,d.c);e=d.e;if(e){f=d.d;Zid(a,f.b,f.d);$id(a,e.n);d=Y2b(e)}}while(e);d=c;do{ojd(a,d.c);e=d.e;if(e){f=d.d;njd(a,f.b,f.d);ojd(a,e.n);d=Y2b(e)}}while(e)} +function Wlc(a,b,c,d){var e,f,g,h,i;if(d.f.c+d.i.c==0){for(g=a.a[a.c],h=0,i=g.length;h<i;++h){f=g[h];Zjb(d,f,new dmc(a,f,c))}}e=RD(Wd(qtb(d.f,b)),677);e.b=0;e.c=e.f;e.c==0||gmc(RD(Vmb(e.a,e.b),293));return e} +function btc(){btc=geb;Zsc=new ctc('MEDIAN_LAYER',0);_sc=new ctc('TAIL_LAYER',1);Ysc=new ctc('HEAD_LAYER',2);$sc=new ctc('SPACE_EFFICIENT_LAYER',3);atc=new ctc('WIDEST_LAYER',4);Xsc=new ctc('CENTER_LAYER',5)} +function WGc(a){var b,c,d,e;a.e=0;for(e=Sub(a.f,0);e.b!=e.d.c;){d=RD(evb(e),10);if(d.p>=a.d.b.c.length){b=new R4b(a.d);b.p=d.p-1;Rmb(a.d.b,b);c=new R4b(a.d);c.p=d.p;Rmb(a.d.b,c)}g3b(d,RD(Vmb(a.d.b,d.p),30))}} +function DVc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!d&&(d=new YWc);Mub(d.b,b);for(f=a.a[b.g].Kc();f.Ob();){e=RD(f.Pb(),65);e.b!=b&&DVc(a,e.b,d);e.c!=b&&DVc(a,e.c,d);Mub(d.a,e)}return d}return null} +function iMb(a){switch(a.g){case 0:case 1:case 2:return qpd(),Yod;case 3:case 4:case 5:return qpd(),npd;case 6:case 7:case 8:return qpd(),ppd;case 9:case 10:case 11:return qpd(),Xod;default:return qpd(),opd;}} +function SOc(a,b){var c;if(a.c.length==0){return false}c=zDc((tFb(0,a.c.length),RD(a.c[0],18)).c.i);dOc();if(c==(wDc(),tDc)||c==sDc){return true}return yDb(GDb(new SDb(null,new Swb(a,16)),new $Oc),new aPc(b))} +function KDd(a,b){if(ZD(b,207)){return EDd(a,RD(b,27))}else if(ZD(b,193)){return FDd(a,RD(b,123))}else if(ZD(b,451)){return DDd(a,RD(b,166))}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[b])))))}} +function Ou(a,b,c){var d,e;this.f=a;d=RD(Wjb(a.b,b),260);e=!d?0:d.a;Sb(c,e);if(c>=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++<e){Mu(this)}}else{this.c=!d?null:d.b;while(c-->0){Lu(this)}}this.b=b;this.a=null} +function iHb(a,b){var c,d;b.a?jHb(a,b):(c=RD(vAb(a.b,b.b),60),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=RD(uAb(a.b,b.b),60),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),wAb(a.b,b.b),undefined)} +function wMb(a,b){var c,d;c=RD(Vrb(a.b,b),127);if(RD(RD(Qc(a.r,b),21),87).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((Qpd(),Ppd))&&BMb(a,b);d=AMb(a,b);BLb(a,b)==(pod(),mod)&&(d+=2*a.w);c.a.a=d} +function FNb(a,b){var c,d;c=RD(Vrb(a.b,b),127);if(RD(RD(Qc(a.r,b),21),87).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((Qpd(),Ppd))&&JNb(a,b);d=INb(a,b);BLb(a,b)==(pod(),mod)&&(d+=2*a.w);c.a.b=d} +function VQb(a,b){var c,d,e,f;f=new bnb;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),68);Rmb(f,new fRb(c,true));Rmb(f,new fRb(c,false))}e=new $Qb(a);e.a.a.$b();bGb(f,a.b,new mob(cD(WC(bN,1),rve,693,0,[e])))} +function iTb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.a;n=a.b;j=b.a;o=b.b;k=c.a;p=c.b;l=d.a;q=d.b;f=i*o-n*j;g=k*q-p*l;e=(i-j)*(p-q)-(n-o)*(k-l);h=(f*(k-l)-g*(i-j))/e;m=(f*(p-q)-g*(n-o))/e;return new rjd(h,m)} +function Z6b(a,b){var c,d,e;b.Ug('End label pre-processing',1);c=Kfb(UD(mQb(a,(yCc(),VBc))));d=Kfb(UD(mQb(a,ZBc)));e=Emd(RD(mQb(a,rAc),88));FDb(EDb(new SDb(null,new Swb(a.b,16)),new f7b),new h7b(c,d,e));b.Vg()} +function LFc(a,b){var c,d,e;if(a.d[b.p]){return}a.d[b.p]=true;a.a[b.p]=true;for(d=new is(Mr(a3b(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)){continue}e=c.d.i;a.a[e.p]?Rmb(a.b,c):LFc(a,e)}a.a[b.p]=false} +function hGc(a,b,c){var d;d=0;switch(RD(mQb(b,(yCc(),UAc)),171).g){case 2:d=2*-c+a.a;++a.a;break;case 1:d=-c;break;case 3:d=c;break;case 4:d=2*c+a.b;++a.b;}nQb(b,(Ywc(),zwc))&&(d+=RD(mQb(b,zwc),17).a);return d} +function JSc(a,b,c){var d,e,f;c.zc(b,a);Rmb(a.n,b);f=a.p.zg(b);b.j==a.p.Ag()?YSc(a.e,f):YSc(a.j,f);LSc(a);for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(b),new _3b(b)])));gs(e);){d=RD(hs(e),12);c._b(d)||JSc(a,d,c)}} +function rZc(a,b,c){var d,e,f;c.Ug('Processor set neighbors',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Sub(b.b,0);while(!e&&d.b!=d.d.c){f=RD(evb(d),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(e=f)}!!e&&sZc(a,new dXc(e),c);c.Vg()} +function vsd(a){var b,c,d;c=RD(Gxd(a,(umd(),kld)),21);if(c.Hc((Qpd(),Mpd))){d=RD(Gxd(a,pld),21);b=new sjd(RD(Gxd(a,nld),8));if(d.Hc((dqd(),Ypd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}else{return new pjd}} +function nYd(a){var b,c,d;if(!a.b){d=new y_d;for(c=new yMd(qYd(a));c.e!=c.i.gc();){b=RD(xMd(c),19);(b.Bb&QHe)!=0&&WGd(d,b)}VHd(d);a.b=new N$d((RD(QHd(xYd((lTd(),kTd).o),8),19),d.i),d.g);yYd(a).b&=-9}return a.b} +function Dhb(a){var b,c,d;c=a.length;d=0;while(d<c&&(BFb(d,a.length),a.charCodeAt(d)<=32)){++d}b=c;while(b>d&&(BFb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b<c?(AFb(d,b,a.length),a.substr(d,b-d)):a} +function vqc(a,b){var c,d,e,f,g,h,i,j;i=RD(Ee(Ec(b.k),$C(E3,NAe,64,2,0,1)),126);j=b.g;c=xqc(b,i[0]);e=wqc(b,i[1]);d=oqc(a,j,c,e);f=xqc(b,i[1]);h=wqc(b,i[0]);g=oqc(a,j,f,h);if(d<=g){b.a=c;b.c=e}else{b.a=f;b.c=h}} +function Eob(a){var h;yob();var b,c,d,e,f,g;if(ZD(a,59)){for(e=0,d=a.gc()-1;e<d;++e,--d){h=a.Xb(e);a.hd(e,a.Xb(d));a.hd(d,h)}}else{b=a.ed();f=a.fd(a.gc());while(b.Tb()<f.Vb()){c=b.Pb();g=f.Ub();b.Wb(g);f.Wb(c)}}} +function lKc(a,b){var c,d,e,f,g,h;h=0;f=new wmb;hmb(f,b);while(f.b!=f.c){g=RD(smb(f),219);h+=PLc(g.d,g.e);for(e=new Anb(g.b);e.a<e.c.c.length;){d=RD(ynb(e),36);c=RD(Vmb(a.b,d.p),219);c.s||(h+=lKc(a,c))}}return h} +function QTc(a,b,c,d,e){var f,g,h,i,j;if(b){for(h=b.Kc();h.Ob();){g=RD(h.Pb(),10);for(j=d3b(g,(BEc(),zEc),c).Kc();j.Ob();){i=RD(j.Pb(),12);f=RD(Wd(qtb(e.f,i)),118);if(!f){f=new USc(a.d);ZEb(d.c,f);JSc(f,i,e)}}}}} +function wVc(a,b,c){var d,e;rVc(this);b==(dVc(),bVc)?Ysb(this.r,a.c):Ysb(this.w,a.c);c==bVc?Ysb(this.r,a.d):Ysb(this.w,a.d);sVc(this,a);d=tVc(a.c);e=tVc(a.d);vVc(this,d,e,e);this.o=(HUc(),$wnd.Math.abs(d-e)<0.2)} +function Ade(a,b,c){var d,e,f,g,h,i;h=RD(Ywd(a.a,8),2035);if(h!=null){for(e=h,f=0,g=e.length;f<g;++f){null.Um()}}d=c;if((a.a.Db&1)==0){i=new Fde(a,c,b);d.dj(i)}ZD(d,686)?RD(d,686).fj(a.a):d.cj()==a.a&&d.ej(null)} +function Cne(){var a;if(wne)return RD(N5d((YSd(),XSd),dLe),2044);Dne();a=RD(ZD(Xjb((YSd(),XSd),dLe),594)?Xjb(XSd,dLe):new Bne,594);wne=true;zne(a);Ane(a);Zjb((hTd(),gTd),a,new Ene);rBd(a);$jb(XSd,dLe,a);return a} +function NA(a,b,c,d){var e;e=EA(a,c,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe]),b);e<0&&(e=EA(a,c,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function QA(a,b,c,d){var e;e=EA(a,c,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe]),b);e<0&&(e=EA(a,c,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function rtb(a,b,c){var d,e,f,g;g=a.b.Ce(b);e=(d=a.a.get(g),d==null?$C(jJ,rve,1,0,5,1):d);if(e.length==0){a.a.set(g,e)}else{f=otb(a,b,e);if(f){return f.nd(c)}}bD(e,e.length,new xlb(b,c));++a.c;++a.b.g;return null} +function PYb(a){var b,c,d;MYb(a);d=new bnb;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);Rmb(d,new _Yb(b,true));Rmb(d,new _Yb(b,false))}TYb(a.c);t$b(d,a.b,new mob(cD(WC(wQ,1),rve,382,0,[a.c])));OYb(a)} +function eHb(a,b){var c,d,e;e=new bnb;for(d=new Anb(a.c.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);if(b.Lb(c)){Rmb(e,new sHb(c,true));Rmb(e,new sHb(c,false))}}kHb(a.e);bGb(e,a.d,new mob(cD(WC(bN,1),rve,693,0,[a.e])))} +function t7b(a){var b,c,d,e;c=new Tsb;for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);b=RD(d.of((Ywc(),dwc)),18);!!qtb(c.f,b)||Zjb(c,b,new G7b(b));Rmb(RD(Wd(qtb(c.f,b)),465).b,d)}return new dnb(new glb(c))} +function Xdc(a,b){var c,d,e,f,g;d=new xmb(a.j.c.length);c=null;for(f=new Anb(a.j);f.a<f.c.c.length;){e=RD(ynb(f),12);if(e.j!=c){d.b==d.c||Ydc(d,c,b);jmb(d);c=e.j}g=c7b(e);!!g&&(imb(d,g),true)}d.b==d.c||Ydc(d,c,b)} +function Lec(a,b){var c,d,e;d=new Jkb(a.b,0);while(d.b<d.d.gc()){c=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),72));e=RD(mQb(c,(yCc(),wAc)),278);if(e==(Omd(),Mmd)){Ckb(d);Rmb(b.b,c);nQb(c,(Ywc(),dwc))||pQb(c,dwc,a)}}} +function eIc(a){var b,c,d,e,f;b=Kr(new is(Mr(a3b(a).a.Kc(),new ir)));for(e=new is(Mr(Z2b(a).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);c=d.c.i;f=Kr(new is(Mr(a3b(c).a.Kc(),new ir)));b=$wnd.Math.max(b,f)}return sgb(b)} +function Jsd(a,b,c){var d,e,f;d=RD(Gxd(a,(umd(),Kkd)),21);e=0;f=0;b.a>c.a&&(d.Hc((ukd(),okd))?(e=(b.a-c.a)/2):d.Hc(qkd)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((ukd(),skd))?(f=(b.b-c.b)/2):d.Hc(rkd)&&(f=b.b-c.b));Isd(a,e,f)} +function ABd(a,b,c,d,e,f,g,h,i,j,k,l,m){ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,c);a.f=g;DWd(a,h);FWd(a,i);xWd(a,j);EWd(a,k);aWd(a,l);AWd(a,m);_Vd(a,true);$Vd(a,e);a.Zk(f);YVd(a,b);d!=null&&(a.i=null,zWd(a,d))} +function Jb(a,b,c){if(a<0){return hc(qve,cD(WC(jJ,1),rve,1,5,[c,sgb(a)]))}else if(b<0){throw Adb(new agb(sve+b))}else{return hc('%s (%s) must not be greater than size (%s)',cD(WC(jJ,1),rve,1,5,[c,sgb(a),sgb(b)]))}} +function Xnb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Unb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Xnb(b,a,i,j,-e,f);Xnb(b,a,j,h,-e,f);if(f.Ne(a[j-1],a[j])<=0){while(c<d){bD(b,c++,a[i++])}return}Vnb(a,i,j,h,b,c,d,f)} +function Mqc(a,b){var c,d,e,f,g,h,i;i=b.d;e=b.b.j;for(h=new Anb(i);h.a<h.c.c.length;){g=RD(ynb(h),105);f=$C(xdb,Hye,28,e.c.length,16,1);Zjb(a.b,g,f);c=g.a.d.p-1;d=g.c.d.p;while(c!=d){c=(c+1)%e.c.length;f[c]=true}}} +function rGc(a,b){nGc();if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}throw Adb(new Ked('The BF model order layer assigner requires all real nodes to have a model order.'))} +function $Gc(a,b){SGc();if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}throw Adb(new Ked('The DF model order layer assigner requires all real nodes to have a model order.'))} +function TSc(a,b){a.r=new USc(a.p);SSc(a.r,a);ye(a.r.j,a.j);Xub(a.j);Mub(a.j,b);Mub(a.r.e,b);LSc(a);LSc(a.r);while(a.f.c.length!=0){$Sc(RD(Vmb(a.f,0),132))}while(a.k.c.length!=0){$Sc(RD(Vmb(a.k,0),132))}return a.r} +function Wvd(a,b,c){var d,e,f;e=vYd(a.Dh(),b);d=b-a.ji();if(d<0){if(!e){throw Adb(new agb(OHe+b+PHe))}else if(e.rk()){f=a.Ih(e);f>=0?a.bi(f,c):Svd(a,e,c)}else{throw Adb(new agb(KHe+e.xe()+LHe))}}else{Bvd(a,d,e,c)}} +function n3d(a){var b,c;if(a.f){while(a.n>0){b=RD(a.k.Xb(a.n-1),76);c=b.Lk();if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0&&(!a.e||c.pk()!=C4||c.Lj()!=0)&&b.md()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function Pje(b){var c,d,e,f;d=RD(b,54)._h();if(d){try{e=null;c=N5d((YSd(),XSd),jSd(kSd(d)));if(c){f=c.ai();!!f&&(e=f.Fl(Chb(d.e)))}if(!!e&&e!=b){return Pje(e)}}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}return b} +function P3c(a,b,c){var d,e,f;c.Ug('Remove overlaps',1);c.dh(b,eFe);d=RD(Gxd(b,(u2c(),t2c)),27);a.f=d;a.a=u5c(RD(Gxd(b,($4c(),X4c)),299));e=UD(Gxd(b,(umd(),fmd)));s3c(a,(uFb(e),e));f=Q2c(d);O3c(a,b,f,c);c.dh(b,gFe)} +function Ded(a){var b,c,d;if(Heb(TD(Gxd(a,(umd(),$kd))))){d=new bnb;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);ozd(b)&&Heb(TD(Gxd(b,_kd)))&&(ZEb(d.c,b),true)}return d}else{return yob(),yob(),vob}} +function KC(a){if(!a){return cC(),bC}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=GC[typeof b];return c?c(b):NC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new NB(a)}else{return new vC(a)}} +function IMb(a,b,c){var d,e,f;f=a.o;d=RD(Vrb(a.p,c),252);e=d.i;e.b=ZKb(d);e.a=YKb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}$Kb(d);_Kb(d)} +function JMb(a,b,c){var d,e,f;f=a.o;d=RD(Vrb(a.p,c),252);e=d.i;e.b=ZKb(d);e.a=YKb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}$Kb(d);_Kb(d)} +function nkc(a,b){var c,d,e,f,g;if(b.dc()){return}e=RD(b.Xb(0),131);if(b.gc()==1){mkc(a,e,e,1,0,b);return}c=1;while(c<b.gc()){if(e.j||!e.o){f=skc(b,c);if(f){d=RD(f.a,17).a;g=RD(f.b,131);mkc(a,e,g,c,d,b);c=d+1;e=g}}}} +function Soc(a){var b,c,d,e,f,g;g=new dnb(a.d);_mb(g,new upc);b=(epc(),cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc]));c=0;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),105);d=b[c%b.length];Uoc(e,d);++c}} +function zid(a,b){tid();var c,d,e,f;if(b.b<2){return false}f=Sub(b,0);c=RD(evb(f),8);d=c;while(f.b!=f.d.c){e=RD(evb(f),8);if(!(xid(a,d)&&xid(a,e))){return false}d=e}if(!(xid(a,d)&&xid(a,c))){return false}return true} +function HEd(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;l=a;g=vDd(l,'x');c=new iFd(b);eEd(c.a,g);h=vDd(l,'y');d=new jFd(b);fEd(d.a,h);i=vDd(l,fIe);e=new kFd(b);gEd(e.a,i);j=vDd(l,eIe);f=new lFd(b);k=(hEd(f.a,j),j);return k} +function v$d(a,b){r$d(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} +function Lde(b,c){var d,e,f;f=0;if(c.length>0){try{f=Oeb(c,qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){e=a;throw Adb(new RSd(e))}else throw Adb(a)}}d=(!b.a&&(b.a=new Zde(b)),b.a);return f<d.i&&f>=0?RD(QHd(d,f),58):null} +function Ib(a,b){if(a<0){return hc(qve,cD(WC(jJ,1),rve,1,5,['index',sgb(a)]))}else if(b<0){throw Adb(new agb(sve+b))}else{return hc('%s (%s) must be less than size (%s)',cD(WC(jJ,1),rve,1,5,['index',sgb(a),sgb(b)]))}} +function cob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function dob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function eob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function hob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function kwb(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=Vmb(a.b,b);while(b*2+1<c){d=(f=2*b+1,g=f+1,h=f,g<c&&a.a.Ne(Vmb(a.b,g),Vmb(a.b,f))<0&&(h=g),h);if(a.a.Ne(e,Vmb(a.b,d))<0){break}$mb(a.b,b,Vmb(a.b,d));b=d}$mb(a.b,b,e)} +function oJb(a,b,c){var d,e;d=c.d;e=c.e;if(a.g[d.d]<=a.i[b.d]&&a.i[b.d]<=a.i[d.d]&&a.g[e.d]<=a.i[b.d]&&a.i[b.d]<=a.i[e.d]){if(a.i[d.d]<a.i[e.d]){return false}return true}if(a.i[d.d]<a.i[e.d]){return true}return false} +function SWb(a,b){var c;c=RD(mQb(b,(yCc(),oAc)),322);if(c!=a){throw Adb(new Ked('The hierarchy aware processor '+c+' in child node '+b+' is only allowed if the root node specifies the same hierarchical processor.'))}} +function Kee(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new C5d(y7,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=RD(QHd(d,e),179);switch(yfe(Qee(a,c))){case 2:case 3:{!f&&(f=new bnb);ZEb(f.c,c)}}}return !f?(yob(),yob(),vob):f} +function PQb(a,b,c){var d,e,f,g,h,i;i=oxe;for(f=new Anb(nRb(a.b));f.a<f.c.c.length;){e=RD(ynb(f),177);for(h=new Anb(nRb(b.b));h.a<h.c.c.length;){g=RD(ynb(h),177);d=Aid(e.a,e.b,g.a,g.b,c);i=$wnd.Math.min(i,d)}}return i} +function Q3b(a,b){if(!b){throw Adb(new Ngb)}a.j=b;if(!a.d){switch(a.j.g){case 1:a.a.a=a.o.a/2;a.a.b=0;break;case 2:a.a.a=a.o.a;a.a.b=a.o.b/2;break;case 3:a.a.a=a.o.a/2;a.a.b=a.o.b;break;case 4:a.a.a=0;a.a.b=a.o.b/2;}}} +function Jic(a,b){var c,d,e;if(ZD(b.g,10)&&RD(b.g,10).k==(r3b(),m3b)){return oxe}e=$jc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=Zjc(b);if(c){d=Kfb(UD(hFc(c,(yCc(),bCc))));return $wnd.Math.max(0,d/2-0.5)}return oxe} +function Lic(a,b){var c,d,e;if(ZD(b.g,10)&&RD(b.g,10).k==(r3b(),m3b)){return oxe}e=$jc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=Zjc(b);if(c){d=Kfb(UD(hFc(c,(yCc(),bCc))));return $wnd.Math.max(0,d/2-0.5)}return oxe} +function Jkc(a,b){lkc();var c,d,e,f,g,h;c=null;for(g=b.Kc();g.Ob();){f=RD(g.Pb(),131);if(f.o){continue}d=Qid(f.a);e=Nid(f.a);h=new Nlc(d,e,null,RD(f.d.a.ec().Kc().Pb(),18));Rmb(h.c,f.a);ZEb(a.c,h);!!c&&Rmb(c.d,h);c=h}} +function bmc(a){var b,c,d,e,f,g;g=aMc(a.d,a.e);for(f=g.Kc();f.Ob();){e=RD(f.Pb(),12);d=a.e==(qpd(),ppd)?e.e:e.g;for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),18);if(!W0b(b)&&b.c.i.c!=b.d.i.c){Zlc(a,b);++a.f;++a.c}}}} +function Wsc(a,b){var c,d;if(b.dc()){return yob(),yob(),vob}d=new bnb;Rmb(d,sgb(qwe));for(c=1;c<a.f;++c){a.a==null&&usc(a);a.a[c]&&Rmb(d,sgb(c))}if(d.c.length==1){return yob(),yob(),vob}Rmb(d,sgb(lve));return Vsc(b,d)} +function kOc(a,b){var c,d,e,f,g,h,i;g=b.c.i.k!=(r3b(),p3b);i=g?b.d:b.c;c=U0b(b,i).i;e=RD(Wjb(a.k,i),125);d=a.i[c.p].a;if($2b(i.i)<(!c.c?-1:Wmb(c.c.a,c,0))){f=e;h=d}else{f=d;h=e}rIb(uIb(tIb(vIb(sIb(new wIb,0),4),f),h))} +function ODd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=uEd(a,tDd(JB(c,g.a)));if(i){f=(!b.b&&(b.b=new Yie(E4,b,4,7)),b.b);WGd(f,i)}}}} +function PDd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=uEd(a,tDd(JB(c,g.a)));if(i){f=(!b.c&&(b.c=new Yie(E4,b,5,8)),b.c);WGd(f,i)}}}} +function Bo(a,b,c){var d,e;d=b.a&a.f;b.b=a.b[d];a.b[d]=b;e=b.f&a.f;b.d=a.c[e];a.c[e]=b;if(!c){b.e=a.e;b.c=null;!a.e?(a.a=b):(a.e.c=b);a.e=b}else{b.e=c.e;!b.e?(a.a=b):(b.e.c=b);b.c=c.c;!b.c?(a.e=b):(b.c.e=b)}++a.i;++a.g} +function Ir(a){var b,c,d;b=a.Pb();if(!a.Ob()){return b}d=Yhb(Zhb(new bib,'expected one element but was: <'),b);for(c=0;c<4&&a.Ob();c++){Yhb((d.a+=pve,d),a.Pb())}a.Ob()&&(d.a+=', ...',d);d.a+='>';throw Adb(new agb(d.a))} +function cB(a){var b,c;c=-a.a;b=cD(WC(hE,1),zwe,28,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&Bwe;b[2]=b[2]+(c/60|0)%10&Bwe;b[3]=b[3]+(c%60/10|0)&Bwe;b[4]=b[4]+c%10&Bwe;return Ihb(b,0,b.length)} +function V2b(a){var b,c,d,e;a.g=new Zrb(RD(Qb(E3),296));d=0;c=(qpd(),Yod);b=0;for(;b<a.j.c.length;b++){e=RD(Vmb(a.j,b),12);if(e.j!=c){d!=b&&Wrb(a.g,c,new Ptd(sgb(d),sgb(b)));c=e.j;d=b}}Wrb(a.g,c,new Ptd(sgb(d),sgb(b)))} +function u7b(a){var b,c,d,e,f,g,h;d=0;for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);e.p=d++;for(h=new Anb(e.j);h.a<h.c.c.length;){g=RD(ynb(h),12);g.p=d++}}}} +function Tvd(a,b){var c,d,e;e=Eee((lke(),jke),a.Dh(),b);if(e){nke();RD(e,69).xk()||(e=zfe(Qee(jke,e)));d=(c=a.Ih(e),RD(c>=0?a.Lh(c,true,true):Qvd(a,e,true),160));RD(d,220).Zl(b)}else{throw Adb(new agb(KHe+b.xe()+LHe))}} +function Cib(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=eE($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return Dib(Hdb(a))} +function oTc(a){var b,c,d,e,f,g,h;f=new Iub;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),132);g=b.a;h=b.b;if(f.a._b(g)||f.a._b(h)){continue}e=g;d=h;if(g.e.b+g.j.b>2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} +function B5c(a,b,c){c.Ug('Eades radial',1);c.dh(b,gFe);a.d=RD(Gxd(b,(u2c(),t2c)),27);a.c=Kfb(UD(Gxd(b,($4c(),S4c))));a.e=u5c(RD(Gxd(b,X4c),299));a.a=Z3c(RD(Gxd(b,Z4c),434));a.b=k5c(RD(Gxd(b,O4c),354));C5c(a);c.dh(b,gFe)} +function t8c(a,b){b.Ug('Target Width Setter',1);if(Hxd(a,(X7c(),W7c))){Ixd(a,(X6c(),W6c),UD(Gxd(a,W7c)))}else{throw Adb(new Jed('A target width has to be set if the TargetWidthWidthApproximator should be used.'))}b.Vg()} +function _8b(a,b){var c,d,e;d=new j3b(a);kQb(d,b);pQb(d,(Ywc(),gwc),b);pQb(d,(yCc(),BBc),(Bod(),wod));pQb(d,Rzc,(Rjd(),Njd));h3b(d,(r3b(),m3b));c=new R3b;P3b(c,d);Q3b(c,(qpd(),ppd));e=new R3b;P3b(e,d);Q3b(e,Xod);return d} +function ttc(a){switch(a.g){case 0:return new FKc((RKc(),OKc));case 1:return new aKc;case 2:return new FLc;default:throw Adb(new agb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function THc(a,b){var c,d,e,f,g;a.c[b.p]=true;Rmb(a.a,b);for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(d=new l4b(f.b);xnb(d.a)||xnb(d.b);){c=RD(xnb(d.a)?ynb(d.a):ynb(d.b),18);e=UHc(f,c).i;a.c[e.p]||THc(a,e)}}} +function J2c(a){var b,c,d,e,f,g,h;g=0;for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);h=b.g;e=b.f;d=$wnd.Math.sqrt(h*h+e*e);g=$wnd.Math.max(d,g);f=J2c(b);g=$wnd.Math.max(f,g)}return g} +function Pod(){Pod=geb;Nod=new Qod('OUTSIDE',0);Lod=new Qod('INSIDE',1);Mod=new Qod('NEXT_TO_PORT_IF_POSSIBLE',2);Kod=new Qod('ALWAYS_SAME_SIDE',3);Jod=new Qod('ALWAYS_OTHER_SAME_SIDE',4);Ood=new Qod('SPACE_EFFICIENT',5)} +function DEd(a,b,c){var d,e,f,h,i,j;d=rEd(a,(e=(bvd(),f=new ACd,f),!!c&&yCd(e,c),e),b);jyd(d,zDd(b,uIe));GEd(b,d);BEd(b,d);HEd(b,d);g=null;h=b;i=wDd(h,'ports');j=new hFd(a,d);dEd(j.a,j.b,i);CEd(a,b,d);xEd(a,b,d);return d} +function bB(a){var b,c;c=-a.a;b=cD(WC(hE,1),zwe,28,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&Bwe;b[2]=b[2]+(c/60|0)%10&Bwe;b[4]=b[4]+(c%60/10|0)&Bwe;b[5]=b[5]+c%10&Bwe;return Ihb(b,0,b.length)} +function eB(a){var b;b=cD(WC(hE,1),zwe,28,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&Bwe;b[5]=b[5]+(a/60|0)%10&Bwe;b[7]=b[7]+(a%60/10|0)&Bwe;b[8]=b[8]+a%10&Bwe;return Ihb(b,0,b.length)} +function fob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+Zdb(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function uJb(a,b){var c,d,e;e=lve;for(d=new Anb(CIb(b));d.a<d.c.c.length;){c=RD(ynb(d),218);if(c.f&&!a.c[c.c]){a.c[c.c]=true;e=$wnd.Math.min(e,uJb(a,oIb(c,b)))}}a.i[b.d]=a.j;a.g[b.d]=$wnd.Math.min(e,a.j++);return a.g[b.d]} +function vNb(a,b){var c,d,e;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);d.e.b=(c=d.b,c.pf((umd(),Gld))?c.ag()==(qpd(),Yod)?-c.Mf().b-Kfb(UD(c.of(Gld))):Kfb(UD(c.of(Gld))):c.ag()==(qpd(),Yod)?-c.Mf().b:0)}} +function CSb(a){var b,c,d,e,f,g,h;c=zRb(a.e);f=ijd(njd(ajd(yRb(a.e)),a.d*a.a,a.c*a.b),-0.5);b=c.a-f.a;e=c.b-f.b;for(h=0;h<a.c;h++){d=b;for(g=0;g<a.d;g++){ARb(a.e,new Uid(d,e,a.a,a.b))&&TPb(a,g,h,false,true);d+=a.a}e+=a.b}} +function H0c(a){var b,c,d,e,f;b=a.a;c=a.b;e=a.c;d=new rjd(c.e.a+c.f.a/2,c.e.b+c.f.b/2);f=new rjd(e.e.a+e.f.a/2,e.e.b+e.f.b/2);Pub(b,d,b.a,b.a.a);Pub(b,f,b.c.b,b.c);tWc(d,RD(ju(b,1),8),a.b.f);tWc(f,RD(ju(b,b.b-2),8),a.c.f)} +function tDd(a){var b,c;c=false;if(ZD(a,211)){c=true;return RD(a,211).a}if(!c){if(ZD(a,263)){b=RD(a,263).a%1==0;if(b){c=true;return sgb(Ofb(RD(a,263).a))}}}throw Adb(new CDd("Id must be a string or an integer: '"+a+"'."))} +function Kde(a,b){var c,d,e,f,g,h;f=null;for(e=new Xde((!a.a&&(a.a=new Zde(a)),a.a));Ude(e);){c=RD(tId(e),58);d=(g=c.Dh(),h=(mYd(g),g.o),!h||!c.Xh(h)?null:Hje(iXd(h),c.Mh(h)));if(d!=null){if(lhb(d,b)){f=c;break}}}return f} +function Rw(a,b,c){var d,e,f,g,h;dk(c,'occurrences');if(c==0){return h=RD(Xv(nd(a.a),b),16),!h?0:h.gc()}g=RD(Xv(nd(a.a),b),16);if(!g){return 0}f=g.gc();if(c>=f){g.$b()}else{e=g.Kc();for(d=0;d<c;d++){e.Pb();e.Qb()}}return f} +function qx(a,b,c){var d,e,f,g;dk(c,'oldCount');dk(0,'newCount');d=RD(Xv(nd(a.a),b),16);if((!d?0:d.gc())==c){dk(0,'count');e=(f=RD(Xv(nd(a.a),b),16),!f?0:f.gc());g=-e;g>0?Hh():g<0&&Rw(a,b,-g);return true}else{return false}} +function YKb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=aLb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Vvb(SCb(HDb(CDb(_nb(a.a),new oLb),new qLb)))}return h>0?h+a.n.d+a.n.a:0} +function ZKb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Vvb(SCb(HDb(CDb(_nb(a.a),new kLb),new mLb)))}else{g=bLb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} +function UOc(a){var b,c;if(a.c.length!=2){throw Adb(new dgb('Order only allowed for two paths.'))}b=(tFb(0,a.c.length),RD(a.c[0],18));c=(tFb(1,a.c.length),RD(a.c[1],18));if(b.d.i!=c.c.i){a.c.length=0;ZEb(a.c,c);ZEb(a.c,b)}} +function O8c(a,b,c){var d;zyd(c,b.g,b.f);Byd(c,b.i,b.j);for(d=0;d<(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;d++){O8c(a,RD(QHd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),d),27),RD(QHd((!c.a&&(c.a=new C5d(J4,c,10,11)),c.a),d),27))}} +function DMb(a,b){var c,d,e,f;f=RD(Vrb(a.b,b),127);c=f.a;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);!!d.c&&(c.a=$wnd.Math.max(c.a,QKb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function ETb(a,b){var c,d,e;c=RD(mQb(b,(yVb(),lVb)),17).a-RD(mQb(a,lVb),17).a;if(c==0){d=ojd(ajd(RD(mQb(a,(JVb(),FVb)),8)),RD(mQb(a,GVb),8));e=ojd(ajd(RD(mQb(b,FVb),8)),RD(mQb(b,GVb),8));return Qfb(d.a*d.b,e.a*e.b)}return c} +function JVc(a,b){var c,d,e;c=RD(mQb(b,(h_c(),X$c)),17).a-RD(mQb(a,X$c),17).a;if(c==0){d=ojd(ajd(RD(mQb(a,(q$c(),RZc)),8)),RD(mQb(a,SZc),8));e=ojd(ajd(RD(mQb(b,RZc),8)),RD(mQb(b,SZc),8));return Qfb(d.a*d.b,e.a*e.b)}return c} +function _0b(a){var b,c;c=new bib;c.a+='e_';b=S0b(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Zhb((c.a+=' ',c),M3b(a.c));Zhb(Yhb((c.a+='[',c),a.c.i),']');Zhb((c.a+=SAe,c),M3b(a.d));Zhb(Yhb((c.a+='[',c),a.d.i),']')}return c.a} +function ZVc(a){switch(a.g){case 0:return new N_c;case 1:return new V_c;case 2:return new x0c;case 3:return new J0c;default:throw Adb(new agb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} +function qsd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} +function MDd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);f=xDd(c,g.a);kIe in f.a||lIe in f.a?yEd(a,f,b):EEd(a,f,b);OGd(RD(Wjb(a.b,uDd(f)),74))}}} +function jXd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=WVd(a);if(!!b&&(nke(),b.lk()==aKe)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function Sqe(a,b){var c,d,e,f;Mqe(a);if(a.c!=0||a.a!=123)throw Adb(new Lqe(TId((Hde(),eJe))));f=b==112;d=a.d;c=phb(a.i,125,d);if(c<0)throw Adb(new Lqe(TId((Hde(),fJe))));e=zhb(a.i,d,c);a.d=c+1;return ite(e,f,(a.e&512)==512)} +function YTb(a){var b,c,d,e,f,g,h;d=a.a.c.length;if(d>0){g=a.c.d;h=a.d.d;e=ijd(ojd(new rjd(h.a,h.b),g),1/(d+1));f=new rjd(g.a,g.b);for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),250);b.d.a=f.a+e.a;b.d.b=f.b+e.b;$id(f,e)}}} +function HXd(a,b){var c,d,e;if(!b){JXd(a,null);zXd(a,null)}else if((b.i&4)!=0){d='[]';for(c=b.c;;c=c.c){if((c.i&4)==0){e=shb((lfb(c),c.o+d));JXd(a,e);zXd(a,e);break}d+='[]'}}else{e=shb((lfb(b),b.o));JXd(a,e);zXd(a,e)}a.hl(b)} +function Bge(a,b,c,d,e){var f,g,h,i;i=Age(a,RD(e,58));if(dE(i)!==dE(e)){h=RD(a.g[c],76);f=oke(b,i);MHd(a,c,Tge(a,c,f));if(Mvd(a.e)){g=fge(a,9,f.Lk(),e,i,d,false);oKd(g,new P3d(a.e,9,a.c,h,f,d,false));pKd(g)}return i}return e} +function AGc(a,b,c){var d,e,f,g,h,i;d=RD(Qc(a.c,b),15);e=RD(Qc(a.c,c),15);f=d.fd(d.gc());g=e.fd(e.gc());while(f.Sb()&&g.Sb()){h=RD(f.Ub(),17);i=RD(g.Ub(),17);if(h!=i){return hgb(h.a,i.a)}}return !f.Ob()&&!g.Ob()?0:f.Ob()?1:-1} +function FHc(a){var b,c,d,e,f,g,h;h=ev(a.c.length);for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),10);g=new _sb;f=a3b(d);for(c=new is(Mr(f.a.Kc(),new ir));gs(c);){b=RD(hs(c),18);b.c.i==b.d.i||Ysb(g,b.d.i)}ZEb(h.c,g)}return h} +function xhd(c,d){var e,f,g;try{g=xs(c.a,d);return g}catch(b){b=zdb(b);if(ZD(b,33)){try{f=Oeb(d,qwe,lve);e=mfb(c.a);if(f>=0&&f<e.length){return e[f]}}catch(a){a=zdb(a);if(!ZD(a,130))throw Adb(a)}return null}else throw Adb(b)}} +function Rvd(a,b){var c,d,e;e=Eee((lke(),jke),a.Dh(),b);if(e){nke();RD(e,69).xk()||(e=zfe(Qee(jke,e)));d=(c=a.Ih(e),RD(c>=0?a.Lh(c,true,true):Qvd(a,e,true),160));return RD(d,220).Wl(b)}else{throw Adb(new agb(KHe+b.xe()+NHe))}} +function _ae(){Tae();var a;if(Sae)return RD(N5d((YSd(),XSd),AKe),2038);RRd(UK,new hde);abe();a=RD(ZD(Xjb((YSd(),XSd),AKe),560)?Xjb(XSd,AKe):new $ae,560);Sae=true;Yae(a);Zae(a);Zjb((hTd(),gTd),a,new cbe);$jb(XSd,AKe,a);return a} +function Vfe(a,b){var c,d,e,f;a.j=-1;if(Mvd(a.e)){c=a.i;f=a.i!=0;LHd(a,b);d=new P3d(a.e,3,a.c,null,b,c,f);e=b.zl(a.e,a.c,null);e=Hge(a,b,e);if(!e){qvd(a.e,d)}else{e.nj(d);e.oj()}}else{LHd(a,b);e=b.zl(a.e,a.c,null);!!e&&e.oj()}} +function HA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BFb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BFb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} +function mPb(a){var b,c,d,e,f;e=RD(a.a,17).a;f=RD(a.b,17).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new Ptd(sgb(c),sgb(d))} +function YPb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;if((i=f,j=h,i+=a.j,j+=a.k,i>=0&&j>=0&&i<a.o&&j<a.p)&&(!QPb(b,e,g)&&$Pb(a,f,h)||PPb(b,e,g)&&!_Pb(a,f,h))){return true}}}return false} +function jSc(a,b,c){var d,e,f,g,h;g=a.c;h=a.d;f=xjd(cD(WC(l3,1),Nve,8,0,[g.i.n,g.n,g.a])).b;e=(f+xjd(cD(WC(l3,1),Nve,8,0,[h.i.n,h.n,h.a])).b)/2;d=null;g.j==(qpd(),Xod)?(d=new rjd(b+g.i.c.c.a+c,e)):(d=new rjd(b-c,e));hu(a.a,0,d)} +function ozd(a){var b,c,d,e;b=null;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));gs(d);){c=RD(hs(d),84);e=AGd(c);if(!b){b=e}else if(b!=e){return false}}return true} +function SHd(a,b,c){var d;++a.j;if(b>=a.i)throw Adb(new veb(MIe+b+NIe+a.i));if(c>=a.i)throw Adb(new veb(OIe+c+NIe+a.i));d=a.g[c];if(b!=c){b<c?hib(a.g,b,a.g,b+1,c-b):hib(a.g,c+1,a.g,c,b-c);bD(a.g,b,d);a.Pi(b,d,c);a.Ni()}return d} +function Rc(a,b,c){var d;d=RD(a.c.xc(b),16);if(!d){d=a.ic(b);if(d.Fc(c)){++a.d;a.c.zc(b,d);return true}else{throw Adb(new Deb('New Collection violated the Collection spec'))}}else if(d.Fc(c)){++a.d;return true}else{return false}} +function ngb(a){var b,c,d;if(a<0){return 0}else if(a==0){return 32}else{d=-(a>>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-qxe;b=d>>16&4;c+=b;a<<=b;d=a-Ove;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function RSb(a){HSb();var b,c,d,e;GSb=new bnb;FSb=new Tsb;ESb=new bnb;b=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);JSb(b);for(e=new dMd(b);e.e!=e.i.gc();){d=RD(bMd(e),27);if(Wmb(GSb,d,0)==-1){c=new bnb;Rmb(ESb,c);KSb(d,c)}}return ESb} +function sTb(a,b,c){var d,e,f,g;a.a=c.b.d;if(ZD(b,326)){e=IGd(RD(b,74),false,false);f=ssd(e);d=new wTb(a);xgb(f,d);lsd(f,e);b.of((umd(),cld))!=null&&xgb(RD(b.of(cld),75),d)}else{g=RD(b,422);g.rh(g.nh()+a.a.a);g.sh(g.oh()+a.a.b)}} +function hWc(a,b){var c,d,e;e=new bnb;for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.c.g==a.g&&dE(mQb(c.b,(h_c(),f_c)))!==dE(mQb(c.c,f_c))&&!yDb(new SDb(null,new Swb(e,16)),new IWc(c))&&(ZEb(e.c,c),true)}_mb(e,new KWc);return e} +function fUb(a,b,c){var d,e,f,g;if(ZD(b,153)&&ZD(c,153)){f=RD(b,153);g=RD(c,153);return a.a[f.a][g.a]+a.a[g.a][f.a]}else if(ZD(b,250)&&ZD(c,250)){d=RD(b,250);e=RD(c,250);if(d.a==e.a){return RD(mQb(e.a,(yVb(),lVb)),17).a}}return 0} +function q9b(a,b){var c,d,e,f,g,h,i,j;j=Kfb(UD(mQb(b,(yCc(),fCc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h<a.length;h++){d=a[h].n;e=a[h].o;c=a[h].d;f=d.a-c.b-i;f<0&&(d.a-=f);g=b.f;g.a=$wnd.Math.max(g.a,d.a+e.a);i=d.a+e.a+c.c+j}} +function Nad(a,b){var c,d,e,f,g,h;d=RD(RD(Wjb(a.g,b.a),42).a,68);e=RD(RD(Wjb(a.g,b.b),42).a,68);f=d.b;g=e.b;c=Kid(f,g);if(c>=0){return c}h=ejd(ojd(new rjd(g.c+g.b/2,g.d+g.a/2),new rjd(f.c+f.b/2,f.d+f.a/2)));return -(oRb(f,g)-1)*h} +function ysd(a,b,c){var d;FDb(new SDb(null,(!c.a&&(c.a=new C5d(F4,c,6,6)),new Swb(c.a,16))),new Qsd(a,b));FDb(new SDb(null,(!c.n&&(c.n=new C5d(I4,c,1,7)),new Swb(c.n,16))),new Ssd(a,b));d=RD(Gxd(c,(umd(),cld)),75);!!d&&Bjd(d,a,b)} +function Qvd(a,b,c){var d,e,f;f=Eee((lke(),jke),a.Dh(),b);if(f){nke();RD(f,69).xk()||(f=zfe(Qee(jke,f)));e=(d=a.Ih(f),RD(d>=0?a.Lh(d,true,true):Qvd(a,f,true),160));return RD(e,220).Sl(b,c)}else{throw Adb(new agb(KHe+b.xe()+NHe))}} +function WNd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h<i;++h){g=RD(f[h],136);if(g.Bi()==c&&pb(d,g.ld())){return g}}}else{for(h=0;h<i;++h){g=RD(f[h],136);if(dE(g.ld())===dE(d)){return g}}}}return null} +function Nee(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new C5d(y7,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=RD(QHd(d,e),179);switch(yfe(Qee(a,c))){case 4:case 5:case 6:{!f&&(f=new bnb);ZEb(f.c,c);break}}}return !f?(yob(),yob(),vob):f} +function Yib(a,b){var c;if(b<0){throw Adb(new teb('Negative exponent'))}if(b==0){return Kib}else if(b==1||Sib(a,Kib)||Sib(a,Oib)){return a}if(!_ib(a,0)){c=1;while(!_ib(a,c)){++c}return Wib(kjb(c*b),Yib($ib(a,c),b))}return Rjb(a,b)} +function Jnb(a,b){var c,d,e;if(dE(a)===dE(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c<a.length;++c){d=a[c];e=b[c];if(!(dE(d)===dE(e)||d!=null&&pb(d,e))){return false}}return true} +function EYb(a){pYb();var b,c,d;this.b=oYb;this.c=(Cmd(),Amd);this.f=(kYb(),jYb);this.a=a;BYb(this,new FYb);uYb(this);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);if(!c.d){b=new iYb(cD(WC(bQ,1),rve,86,0,[c]));Rmb(a.a,b)}}} +function U6b(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new VKb(b,!c);for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),72);LKb(f,(i1b(),new D1b(d)))}g=f.i;g.a=(i=f.n,f.e.b+i.d+i.a);g.b=(h=f.n,f.e.a+h.b+h.c);return f} +function d9b(a){var b,c,d,e,f,g,h;h=t2b(a.a);Znb(h,new i9b);c=null;for(e=h,f=0,g=e.length;f<g;++f){d=e[f];if(d.k!=(r3b(),m3b)){break}b=RD(mQb(d,(Ywc(),hwc)),64);if(b!=(qpd(),ppd)&&b!=Xod){continue}!!c&&RD(mQb(c,qwc),15).Fc(d);c=d}} +function wTc(a,b,c){var d,e,f,g,h,i,j;i=(tFb(b,a.c.length),RD(a.c[b],339));Xmb(a,b);if(i.b/2>=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new BTc(i.c,g);Qmb(a,d++,e)}h=j+c;if(h<=i.a){f=new BTc(h,i.a);wFb(d,a.c.length);XEb(a.c,d,f)}}} +function mZc(a,b,c){var d,e,f,g,h,i;if(!b.dc()){e=new Yub;for(i=b.Kc();i.Ob();){h=RD(i.Pb(),39);Zjb(a.a,sgb(h.g),sgb(c));for(g=(d=Sub((new dXc(h)).a.d,0),new gXc(d));dvb(g.a);){f=RD(evb(g.a),65).c;Pub(e,f,e.c.b,e.c)}}mZc(a,e,c+1)}} +function Ude(a){var b;if(!a.c&&a.g==null){a.d=a.bj(a.f);WGd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=RD(a.g[a.i-1],51)}}if(b==a.b&&null.Vm>=null.Um()){tId(a);return Ude(a)}else{return b.Ob()}} +function t_b(a){this.a=a;if(a.c.i.k==(r3b(),m3b)){this.c=a.c;this.d=RD(mQb(a.c.i,(Ywc(),hwc)),64)}else if(a.d.i.k==m3b){this.c=a.d;this.d=RD(mQb(a.d.i,(Ywc(),hwc)),64)}else{throw Adb(new agb('Edge '+a+' is not an external edge.'))}} +function O1d(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,e,a.b));if(!b){PAd(a,null);Q1d(a,0);P1d(a,null)}else if(b!=a){PAd(a,b.zb);Q1d(a,b.d);c=(d=b.c,d==null?b.zb:d);P1d(a,c==null||lhb(c,b.zb)?null:c)}} +function hj(a,b){var c;this.e=(tm(),Qb(a),tm(),zm(a));this.c=(Qb(b),zm(b));Lb(this.e.Rd().dc()==this.c.Rd().dc());this.d=Uv(this.e);this.b=Uv(this.c);c=YC(jJ,[Nve,rve],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2);this.a=c;Zi(this)} +function Lz(b){var c=(!Jz&&(Jz=Mz()),Jz);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return Kz(a,c)});return '"'+d+'"'} +function VEb(a,b,c,d,e,f){var g,h,i,j,k;if(e==0){return}if(dE(a)===dE(c)){a=a.slice(b,b+e);b=0}i=c;for(h=b,j=b+e;h<j;){g=$wnd.Math.min(h+10000,j);e=g-h;k=a.slice(h,g);k.splice(0,0,d,f?e:0);Array.prototype.splice.apply(i,k);h=g;d+=e}} +function VGb(a){FGb();var b,c;this.b=CGb;this.c=EGb;this.g=(wGb(),vGb);this.d=(Cmd(),Amd);this.a=a;IGb(this);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);!b.a&&gGb(iGb(new jGb,cD(WC(hN,1),rve,60,0,[b])),a);b.e=new Vid(b.d)}} +function yTb(a){var b,c,d,e,f,g;e=a.e.c.length;d=$C(QK,Ize,15,e,0,1);for(g=new Anb(a.e);g.a<g.c.c.length;){f=RD(ynb(g),153);d[f.a]=new Yub}for(c=new Anb(a.c);c.a<c.c.c.length;){b=RD(ynb(c),289);d[b.c.a].Fc(b);d[b.d.a].Fc(b)}return d} +function OMd(a,b){var c,d,e,f,g;c=RD(Ywd(a.a,4),129);g=c==null?0:c.length;if(b>=g)throw Adb(new aMd(b,g));e=c[b];if(g==1){d=null}else{d=$C(d6,IJe,424,g-1,0,1);hib(c,0,d,0,b);f=g-b-1;f>0&&hib(c,b+1,d,b,f)}Bde(a,d);Ade(a,b,e);return e} +function l3d(a){var b,c;if(a.f){while(a.n<a.o){b=RD(!a.j?a.k.Xb(a.n):a.j.$i(a.n),76);c=b.Lk();if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0&&(!a.e||c.pk()!=C4||c.Lj()!=0)&&b.md()!=null){return true}else{++a.n}}return false}else{return a.n<a.o}} +function Lle(){Lle=geb;Jle=RD(QHd(xYd((Qle(),Ple).qb),6),35);Gle=RD(QHd(xYd(Ple.qb),3),35);Hle=RD(QHd(xYd(Ple.qb),4),35);Ile=RD(QHd(xYd(Ple.qb),5),19);vWd(Jle);vWd(Gle);vWd(Hle);vWd(Ile);Kle=new mob(cD(WC(y7,1),lKe,179,0,[Jle,Gle]))} +function rMb(a,b){var c;this.d=new P2b;this.b=b;this.e=new sjd(b.Lf());c=a.u.Hc((Pod(),Mod));a.u.Hc(Lod)?a.D?(this.a=c&&!b.bg()):(this.a=true):a.u.Hc(Nod)?c?(this.a=!(b.Uf().Kc().Ob()||b.Wf().Kc().Ob())):(this.a=false):(this.a=false)} +function zNb(a,b){var c,d,e,f;c=a.o.a;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);e.e.a=(d=e.b,d.pf((umd(),Gld))?d.ag()==(qpd(),ppd)?-d.Mf().a-Kfb(UD(d.of(Gld))):c+Kfb(UD(d.of(Gld))):d.ag()==(qpd(),ppd)?-d.Mf().a:c)}} +function $4b(a,b){var c,d,e,f;c=RD(mQb(a,(yCc(),rAc)),88);f=RD(Gxd(b,GBc),64);e=RD(mQb(a,BBc),101);if(e!=(Bod(),zod)&&e!=Aod){if(f==(qpd(),opd)){f=osd(b,c);f==opd&&(f=vpd(c))}}else{d=W4b(b);d>0?(f=vpd(c)):(f=spd(vpd(c)))}Ixd(b,GBc,f)} +function agc(a,b){var c;b.Ug('Partition preprocessing',1);c=RD(zDb(CDb(EDb(CDb(new SDb(null,new Swb(a.a,16)),new egc),new ggc),new igc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);FDb(c.Oc(),new kgc);b.Vg()} +function Uoc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&_mb(g,new ypc);e=g.c.length/2|0;for(d=0;d<e;d++){f=(tFb(d,g.c.length),RD(g.c[d],113));f.c&&Q3b(f.d,b.a)}for(c=e;c<g.c.length;c++){f=(tFb(c,g.c.length),RD(g.c[c],113));f.c&&Q3b(f.d,b.b)}} +function rLc(a,b,c){var d,e,f;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){f=Jfb(d.a,e.a);f<0?uLc(a,b,c):f>0&&uLc(a,c,b);return f}else if(d.a!=null){uLc(a,b,c);return -1}else if(e.a!=null){uLc(a,c,b);return 1}return 0} +function EVc(a,b){var c,d,e,f,g;e=b.b.b;a.a=$C(QK,Ize,15,e,0,1);a.b=$C(xdb,Hye,28,e,16,1);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);a.a[f.g]=new Yub}for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);a.a[c.b.g].Fc(c);a.a[c.c.g].Fc(c)}} +function SJd(a,b){var c,d,e,f;if(a.Pj()){c=a.Ej();f=a.Qj();++a.j;a.qj(c,a.Zi(c,b));d=a.Ij(3,null,b,c,f);if(a.Mj()){e=a.Nj(b,null);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{_Id(a,b);if(a.Mj()){e=a.Nj(b,null);!!e&&e.oj()}}} +function oLd(a,b,c){var d,e,f;if(a.Pj()){f=a.Qj();KHd(a,b,c);d=a.Ij(3,null,c,b,f);if(a.Mj()){e=a.Nj(c,null);a.Tj()&&(e=a.Uj(c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{KHd(a,b,c);if(a.Mj()){e=a.Nj(c,null);!!e&&e.oj()}}} +function bge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);e=new YHd;c=RD(a.g,124);for(f=a.i;--f>=0;){d=c[f];g.am(d.Lk())&&WGd(e,d)}!wLd(a,e)&&Mvd(a.e)&&eZd(a,b.Jk()?fge(a,6,b,(yob(),vob),null,-1,false):fge(a,b.tk()?2:1,b,null,null,-1,false))} +function _7b(a,b){var c,d,e,f,g;if(a.a==($uc(),Yuc)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.j){d=b.A;g=d.c.c.a-d.o.a/2;e=f-(d.n.a+d.o.a);if(e>g){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} +function bRc(a){WQc();var b,c,d,e,f,g,h;c=new gub;for(e=new Anb(a.e.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);h=a.g[f.p];b=RD(cub(c,h),15);if(!b){b=new bnb;dub(c,h,b)}b.Fc(f)}}return c} +function Qzd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (startX: ';Khb(b,a.j);b.a+=', startY: ';Khb(b,a.k);b.a+=', endX: ';Khb(b,a.b);b.a+=', endY: ';Khb(b,a.c);b.a+=', identifier: ';Nhb(b,a.d);b.a+=')';return b.a} +function cWd(a){var b;if((a.Db&64)!=0)return QAd(a);b=new Shb(QAd(a));b.a+=' (ordered: ';Ohb(b,(a.Bb&256)!=0);b.a+=', unique: ';Ohb(b,(a.Bb&512)!=0);b.a+=', lowerBound: ';Lhb(b,a.s);b.a+=', upperBound: ';Lhb(b,a.t);b.a+=')';return b.a} +function uBd(a,b,c,d,e,f,g,h){var i;ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,c);a.f=d;DWd(a,e);FWd(a,f);xWd(a,g);EWd(a,false);aWd(a,true);AWd(a,h);_Vd(a,true);$Vd(a,0);a.b=0;bWd(a,1);i=XVd(a,b,null);!!i&&i.oj();kXd(a,false);return a} +function ZAb(a,b){var c,d,e,f;c=RD(Xjb(a.a,b),525);if(!c){d=new oBb(b);e=(gBb(),dBb)?null:d.c;f=zhb(e,0,$wnd.Math.max(0,thb(e,Fhb(46))));nBb(d,ZAb(a,f));(dBb?null:d.c).length==0&&iBb(d,new rBb);$jb(a.a,dBb?null:d.c,d);return d}return c} +function sRb(a,b){var c;a.b=b;a.g=new bnb;c=tRb(a.b);a.e=c;a.f=c;a.c=Heb(TD(mQb(a.b,(YHb(),RHb))));a.a=UD(mQb(a.b,(umd(),Dkd)));a.a==null&&(a.a=1);Kfb(a.a)>1?(a.e*=Kfb(a.a)):(a.f/=Kfb(a.a));uRb(a);vRb(a);rRb(a);pQb(a.b,(tSb(),lSb),a.g)} +function n9b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new Anb(a);f.a<f.c.c.length;){e=RD(ynb(f),10);pQb(e,(yCc(),Rzc),(Rjd(),Njd));e.o.a=d;for(h=e3b(e,(qpd(),Xod)).Kc();h.Ob();){g=RD(h.Pb(),12);g.n.a=d}d+=i}} +function gZd(a,b,c){var d,e,f,g,h,i;h=a.pl(c);if(h!=c){g=a.g[b];i=h;MHd(a,b,a.Zi(b,i));f=g;a.Ri(b,i,f);if(a.al()){d=c;e=a.Oj(d,null);!RD(h,54).Ph()&&(e=a.Nj(i,e));!!e&&e.oj()}Mvd(a.e)&&eZd(a,a.Ij(9,c,h,b,false));return h}else{return c}} +function rYb(a,b){var c,d,e,f;for(d=new Anb(a.a.a);d.a<d.c.c.length;){c=RD(ynb(d),194);c.g=true}for(f=new Anb(a.a.b);f.a<f.c.c.length;){e=RD(ynb(f),86);e.k=Heb(TD(a.e.Kb(new Ptd(e,b))));e.d.g=e.d.g&Heb(TD(a.e.Kb(new Ptd(e,b))))}return a} +function Rdc(a,b){var c,d;if(a.c.length!=0){if(a.c.length==2){Qdc((tFb(0,a.c.length),RD(a.c[0],10)),(Pnd(),Lnd));Qdc((tFb(1,a.c.length),RD(a.c[1],10)),Mnd)}else{for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),10);Qdc(c,b)}}a.c.length=0}} +function Vnc(a){var b,c,d,e,f;c=(b=RD(mfb(E3),9),new Fsb(b,RD(WEb(b,b.length),9),0));f=RD(mQb(a,(Ywc(),Iwc)),10);if(f){for(e=new Anb(f.j);e.a<e.c.c.length;){d=RD(ynb(e),12);dE(mQb(d,Awc))===dE(a)&&k4b(new l4b(d.b))&&zsb(c,d.j)}}return c} +function CGc(a,b,c){var d,e,f,g,h;if(a.d[c.p]){return}for(e=new is(Mr(a3b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);h=d.d.i;for(g=new is(Mr(Z2b(h).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);f.c.i==b&&(a.a[f.p]=true)}CGc(a,b,h)}a.d[c.p]=true} +function Zwd(a,b){var c,d,e,f,g,h,i;d=ggb(a.Db&254);if(d==1){a.Eb=null}else{f=SD(a.Eb);if(d==2){e=Xwd(a,b);a.Eb=f[e==0?1:0]}else{g=$C(jJ,rve,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} +function rse(a){var b;b=0;switch(a){case 105:b=2;break;case 109:b=8;break;case 115:b=4;break;case 120:b=16;break;case 117:b=32;break;case 119:b=64;break;case 70:b=256;break;case 72:b=128;break;case 88:b=512;break;case 44:b=gwe;}return b} +function Ojb(a,b,c,d,e){var f,g,h,i;if(dE(a)===dE(b)&&d==e){Tjb(a,d,c);return}for(h=0;h<d;h++){g=0;f=a[h];for(i=0;i<e;i++){g=Bdb(Bdb(Ndb(Cdb(f,yxe),Cdb(b[i],yxe)),Cdb(c[h+i],yxe)),Cdb(Ydb(g),yxe));c[h+i]=Ydb(g);g=Udb(g,32)}c[h+e]=Ydb(g)}} +function tRb(a){var b,c,d,e,f,g,h,i,j,k,l;k=0;j=0;e=a.a;h=e.a.gc();for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),567);b=(c.b&&CRb(c),c.a);l=b.a;g=b.b;k+=l+g;j+=l*g}i=$wnd.Math.sqrt(400*h*j-4*j+k*k)+k;f=2*(100*h-1);if(f==0){return i}return i/f} +function MSc(a,b){if(b.b!=0){isNaN(a.s)?(a.s=Kfb((sFb(b.b!=0),UD(b.a.a.c)))):(a.s=$wnd.Math.min(a.s,Kfb((sFb(b.b!=0),UD(b.a.a.c)))));isNaN(a.c)?(a.c=Kfb((sFb(b.b!=0),UD(b.c.b.c)))):(a.c=$wnd.Math.max(a.c,Kfb((sFb(b.b!=0),UD(b.c.b.c)))))}} +function nzd(a){var b,c,d,e;b=null;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));gs(d);){c=RD(hs(d),84);e=AGd(c);if(!b){b=vCd(e)}else if(b!=vCd(e)){return true}}return false} +function pLd(a,b){var c,d,e,f;if(a.Pj()){c=a.i;f=a.Qj();LHd(a,b);d=a.Ij(3,null,b,c,f);if(a.Mj()){e=a.Nj(b,null);a.Tj()&&(e=a.Uj(b,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{LHd(a,b);if(a.Mj()){e=a.Nj(b,null);!!e&&e.oj()}}} +function ZQb(a,b){var c,d,e,f;f=rAb(a.a,b.b);if(!f){throw Adb(new dgb('Invalid hitboxes for scanline overlap calculation.'))}e=false;for(d=a.a.a.ec().Kc();d.Ob();){c=RD(d.Pb(),68);if(UQb(b.b,c)){bbd(a.b.a,b.b,c);e=true}else{if(e){break}}}} +function whd(a){var b;if(!a.a){throw Adb(new dgb('IDataType class expected for layout option '+a.f))}b=GId(a.a);if(b==null){throw Adb(new dgb("Couldn't create new instance of property '"+a.f+"'. "+DGe+(lfb(b6),b6.k)+EGe))}return RD(b,423)} +function yvd(a){var b,c,d,e,f;f=a.Ph();if(f){if(f.Vh()){e=Vvd(a,f);if(e!=f){c=a.Fh();d=(b=a.Fh(),b>=0?a.Ah(null):a.Ph().Th(a,-1-b,null,null));a.Bh(RD(e,54),c);!!d&&d.oj();a.vh()&&a.wh()&&c>-1&&qvd(a,new N3d(a,9,c,f,e));return e}}}return f} +function stb(a,b){var c,d,e,f,g;f=a.b.Ce(b);d=(c=a.a.get(f),c==null?$C(jJ,rve,1,0,5,1):c);for(g=0;g<d.length;g++){e=d[g];if(a.b.Be(b,e.ld())){if(d.length==1){d.length=0;Btb(a.a,f)}else{d.splice(g,1)}--a.c;++a.b.g;return e.md()}}return null} +function pWb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d<f.c.length;++d){h=(tFb(d,f.c.length),RD(f.c[d],153));for(e=d+1;e<f.c.length;++e){i=(tFb(e,f.c.length),RD(f.c[e],153));c=bjd(h.d,i.d);b=c-a.a[h.a][i.a];g+=a.i[h.a][i.a]*b*b}}return g} +function oec(a,b){var c;if(nQb(b,(yCc(),UAc))){return}c=wec(RD(mQb(b,hec),371),RD(mQb(a,UAc),171));pQb(b,hec,c);if(gs(new is(Mr(W2b(b).a.Kc(),new ir)))){return}switch(c.g){case 1:pQb(b,UAc,(cxc(),Zwc));break;case 2:pQb(b,UAc,(cxc(),_wc));}} +function aoc(a,b){var c;Snc(a);a.a=(c=new Ri,FDb(new SDb(null,new Swb(b.d,16)),new zoc(c)),c);Xnc(a,RD(mQb(b.b,(yCc(),CAc)),349));Znc(a);Ync(a);Wnc(a);$nc(a);_nc(a,b);FDb(EDb(new SDb(null,gj(ej(a.b).a)),new poc),new roc);b.a=false;a.a=null} +function B$c(){B$c=geb;r$c=new lGd(REe,(Geb(),false));s$c=new lGd(SEe,7);sgb(0);y$c=new lGd(TEe,sgb(0));v$c=new lGd(UEe,sgb(-1));A$c=(s_c(),r_c);z$c=new lGd(VEe,A$c);u$c=(LZc(),IZc);t$c=new lGd(WEe,u$c);x$c=(A_c(),z_c);w$c=new lGd(XEe,x$c)} +function _Bd(){FBd.call(this,$He,(bvd(),avd));this.p=null;this.a=null;this.f=null;this.n=null;this.g=null;this.c=null;this.i=null;this.j=null;this.d=null;this.b=null;this.e=null;this.k=null;this.o=null;this.s=null;this.q=false;this.r=false} +function aGd(){aGd=geb;_Fd=new bGd(FBe,0);YFd=new bGd('INSIDE_SELF_LOOPS',1);ZFd=new bGd('MULTI_EDGES',2);XFd=new bGd('EDGE_LABELS',3);$Fd=new bGd('PORTS',4);VFd=new bGd('COMPOUND',5);UFd=new bGd('CLUSTERS',6);WFd=new bGd('DISCONNECTED',7)} +function RJd(a,b,c){var d,e,f;if(a.Pj()){f=a.Qj();++a.j;a.qj(b,a.Zi(b,c));d=a.Ij(3,null,c,b,f);if(a.Mj()){e=a.Nj(c,null);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{++a.j;a.qj(b,a.Zi(b,c));if(a.Mj()){e=a.Nj(c,null);!!e&&e.oj()}}} +function _ib(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw Adb(new teb('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Uib(a);if(e<d){return false}else d==e?(c=-c):(c=~c)}return (c&b)!=0} +function Zdd(a,b,c,d){var e;RD(c.b,68);RD(c.b,68);RD(d.b,68);RD(d.b,68);e=ojd(ajd(RD(c.b,68).c),RD(d.b,68).c);kjd(e,PQb(RD(c.b,68),RD(d.b,68),e));RD(d.b,68);RD(d.b,68);RD(d.b,68).c.a+e.a;RD(d.b,68).c.b+e.b;RD(d.b,68);Umb(d.a,new ced(a,b,d))} +function V$d(a,b){var c,d,e,f,g,h,i;f=b.e;if(f){c=yvd(f);d=RD(a.g,689);for(g=0;g<a.i;++g){i=d[g];if(h2d(i)==c){e=(!i.d&&(i.d=new XZd(o7,i,1)),i.d);h=RD(c.Mh(jwd(f,f.Cb,f.Db>>16)),15).dd(f);if(h<e.i){return V$d(a,RD(QHd(e,h),89))}}}}return b} +function feb(a,b,c){var d=eeb,h;var e=d[a];var f=e instanceof Array?e[0]:null;if(e&&!f){_=e}else{_=(h=b&&b.prototype,!h&&(h=eeb[b]),ieb(h));_.Sm=c;!b&&(_.Tm=keb);d[a]=_}for(var g=3;g<arguments.length;++g){arguments[g].prototype=_}f&&(_.Rm=f)} +function gs(a){var b;while(!RD(Qb(a.a),51).Ob()){a.d=fs(a);if(!a.d){return false}a.a=RD(a.d.Pb(),51);if(ZD(a.a,37)){b=RD(a.a,37);a.a=b.a;!a.b&&(a.b=new wmb);hmb(a.b,a.d);if(b.b){while(!nmb(b.b)){hmb(a.b,RD(tmb(b.b),51))}}a.d=b.d}}return true} +function xJb(a,b){var c,d,e,f;e=1;b.j=true;f=null;for(d=new Anb(CIb(b));d.a<d.c.c.length;){c=RD(ynb(d),218);if(!a.c[c.c]){a.c[c.c]=true;f=oIb(c,b);if(c.f){e+=xJb(a,f)}else if(!f.j&&c.a==c.e.e-c.d.e){c.f=true;Ysb(a.p,c);e+=xJb(a,f)}}}return e} +function OYb(a){var b,c,d;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=(uFb(0),0);if(d>0){!(Dmd(a.a.c)&&b.n.d)&&!(Emd(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(Dmd(a.a.c)&&b.n.a)&&!(Emd(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function c7b(a){var b,c,d,e,f;e=new bnb;f=d7b(a,e);b=RD(mQb(a,(Ywc(),Iwc)),10);if(b){for(d=new Anb(b.j);d.a<d.c.c.length;){c=RD(ynb(d),12);dE(mQb(c,Awc))===dE(a)&&(f=$wnd.Math.max(f,d7b(c,e)))}}e.c.length==0||pQb(a,ywc,f);return f!=-1?e:null} +function rcc(a,b,c){var d,e,f,g,h,i;f=RD(Vmb(b.e,0),18).c;d=f.i;e=d.k;i=RD(Vmb(c.g,0),18).d;g=i.i;h=g.k;e==(r3b(),o3b)?pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12)):pQb(a,(Ywc(),vwc),f);h==o3b?pQb(a,(Ywc(),wwc),RD(mQb(g,wwc),12)):pQb(a,(Ywc(),wwc),i)} +function ysc(a){var b,c,d;this.c=a;d=RD(mQb(a,(yCc(),rAc)),88);b=Kfb(UD(mQb(a,Tzc)));c=Kfb(UD(mQb(a,oCc)));d==(Cmd(),ymd)||d==zmd||d==Amd?(this.b=b*c):(this.b=1/(b*c));this.j=Kfb(UD(mQb(a,cCc)));this.e=Kfb(UD(mQb(a,bCc)));this.f=a.b.c.length} +function BD(a,b){var c,d,e,f,g;b&=63;c=a.h;d=(c&fxe)!=0;d&&(c|=-1048576);if(b<22){g=c>>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?exe:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?exe:0;f=d?dxe:0;e=c>>b-44}return hD(e&dxe,f&dxe,g&exe)} +function ORb(a){var b,c,d,e,f,g;this.c=new bnb;this.d=a;d=oxe;e=oxe;b=pxe;c=pxe;for(g=Sub(a,0);g.b!=g.d.c;){f=RD(evb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new Uid(d,e,b-d,c-e)} +function Udc(a,b){var c,d,e,f,g,h;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);g.k==(r3b(),n3b)&&Qdc(g,b);for(d=new is(Mr(a3b(g).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);Pdc(c,b)}}}} +function nec(a,b){var c,d,e;b.Ug('Layer constraint preprocessing',1);c=new bnb;e=new Jkb(a.a,0);while(e.b<e.d.gc()){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),10));if(mec(d)){kec(d);ZEb(c.c,d);Ckb(e)}}c.c.length==0||pQb(a,(Ywc(),lwc),c);b.Vg()} +function $Hc(a){var b,c;a.e=$C(kE,Pwe,28,a.p.c.length,15,1);a.k=$C(kE,Pwe,28,a.p.c.length,15,1);for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);a.e[b.p]=Kr(new is(Mr(Z2b(b).a.Kc(),new ir)));a.k[b.p]=Kr(new is(Mr(a3b(b).a.Kc(),new ir)))}} +function bIc(a){var b,c,d,e,f,g;e=0;a.q=new bnb;b=new _sb;for(g=new Anb(a.p);g.a<g.c.c.length;){f=RD(ynb(g),10);f.p=e;for(d=new is(Mr(a3b(f).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);Ysb(b,c.d.i)}b.a.Bc(f)!=null;Rmb(a.q,new btb(b));b.a.$b();++e}} +function pPd(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&ZD(b,44)){a.a._j();j=RD(b,44);i=j.ld();f=i==null?0:tb(i);g=bOd(a.a,f);c=a.a.d[g];if(c){d=RD(c.g,379);k=c.i;for(h=0;h<k;++h){e=d[h];if(e.Bi()==f&&e.Fb(j)){pPd(a,j);return true}}}}return false} +function Nje(a){var b,c,d,e,f,g,h;b=a.qi(AKe);if(b){h=WD($Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'settingDelegates'));if(h!=null){c=new bnb;for(e=vhb(h,'\\w+'),f=0,g=e.length;f<g;++f){d=e[f];ZEb(c.c,d)}return c}}return yob(),yob(),vob} +function Ync(a){var b,c,d,e;for(e=RD(Qc(a.a,(Bnc(),ync)),15).Kc();e.Ob();){d=RD(e.Pb(),105);c=(b=Ec(d.k),b.Hc((qpd(),Yod))?b.Hc(Xod)?b.Hc(npd)?b.Hc(ppd)?null:Jnc:Lnc:Knc:Inc);Qnc(a,d,c[0],(joc(),goc),0);Qnc(a,d,c[1],hoc,1);Qnc(a,d,c[2],ioc,1)}} +function Kqc(a,b){var c,d;c=Lqc(b);Oqc(a,b,c);UTc(a.a,RD(mQb(Y2b(b.b),(Ywc(),Lwc)),234));Jqc(a);Iqc(a,b);d=$C(kE,Pwe,28,b.b.j.c.length,15,1);Rqc(a,b,(qpd(),Yod),d,c);Rqc(a,b,Xod,d,c);Rqc(a,b,npd,d,c);Rqc(a,b,ppd,d,c);a.a=null;a.c=null;a.b=null} +function Yyd(a,b,c){switch(b){case 7:!a.e&&(a.e=new Yie(G4,a,7,4));sLd(a.e);!a.e&&(a.e=new Yie(G4,a,7,4));YGd(a.e,RD(c,16));return;case 8:!a.d&&(a.d=new Yie(G4,a,8,5));sLd(a.d);!a.d&&(a.d=new Yie(G4,a,8,5));YGd(a.d,RD(c,16));return;}xyd(a,b,c)} +function Rt(a,b){var c,d,e,f,g;if(dE(b)===dE(a)){return true}if(!ZD(b,15)){return false}g=RD(b,15);if(a.gc()!=g.gc()){return false}f=g.Kc();for(d=a.Kc();d.Ob();){c=d.Pb();e=f.Pb();if(!(dE(c)===dE(e)||c!=null&&pb(c,e))){return false}}return true} +function jac(a,b){var c,d,e,f;f=RD(zDb(EDb(EDb(new SDb(null,new Swb(b.b,16)),new pac),new rac),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);f.Jc(new tac);c=0;for(e=f.Kc();e.Ob();){d=RD(e.Pb(),12);d.p==-1&&iac(a,d,c++)}} +function KDc(a){switch(a.g){case 0:return new iQc;case 1:return new DNc;case 2:return new TNc;case 3:return new aRc;case 4:return new yOc;default:throw Adb(new agb('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} +function Qtc(a){switch(a.g){case 0:return new UFc;case 1:return new NFc;case 2:return new cGc;case 3:return new jGc;case 4:return new YFc;default:throw Adb(new agb('No implementation is available for the cycle breaker '+(a.f!=null?a.f:''+a.g)));}} +function I_c(a,b){var c,d,e,f,g;d=new Yub;Pub(d,b,d.c.b,d.c);do{c=(sFb(d.b!=0),RD(Wub(d,d.a.a),39));a.b[c.g]=1;for(f=Sub(c.d,0);f.b!=f.d.c;){e=RD(evb(f),65);g=e.c;a.b[g.g]==1?Mub(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Pub(d,g,d.c.b,d.c)}}while(d.b!=0)} +function $$b(a,b,c){var d;d=null;!!b&&(d=b.d);k_b(a,new eZb(b.n.a-d.b+c.a,b.n.b-d.d+c.b));k_b(a,new eZb(b.n.a-d.b+c.a,b.n.b+b.o.b+d.a+c.b));k_b(a,new eZb(b.n.a+b.o.a+d.c+c.a,b.n.b-d.d+c.b));k_b(a,new eZb(b.n.a+b.o.a+d.c+c.a,b.n.b+b.o.b+d.a+c.b))} +function iac(a,b,c){var d,e,f;b.p=c;for(f=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(b),new _3b(b)])));gs(f);){d=RD(hs(f),12);d.p==-1&&iac(a,d,c)}if(b.i.k==(r3b(),o3b)){for(e=new Anb(b.i.j);e.a<e.c.c.length;){d=RD(ynb(e),12);d!=b&&d.p==-1&&iac(a,d,c)}}} +function cRc(a,b){var c,d,e,f,g,h;d=new gub;g=Xx(new mob(a.g));for(f=g.a.ec().Kc();f.Ob();){e=RD(f.Pb(),10);if(!e){b.bh('There are no classes in a balanced layout.');break}h=a.j[e.p];c=RD(cub(d,h),15);if(!c){c=new bnb;dub(d,h,c)}c.Fc(e)}return d} +function RTc(a){var b,c,d,e,f;e=RD(zDb(BDb(ODb(a)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);d=Hze;if(e.gc()>=2){c=e.Kc();b=UD(c.Pb());while(c.Ob()){f=b;b=UD(c.Pb());d=$wnd.Math.min(d,(uFb(b),b)-(uFb(f),f))}}return d} +function iWc(a,b){var c,d,e;e=new bnb;for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.b.g==a.g&&!lhb(c.b.c,IEe)&&dE(mQb(c.b,(h_c(),f_c)))!==dE(mQb(c.c,f_c))&&!yDb(new SDb(null,new Swb(e,16)),new OWc(c))&&(ZEb(e.c,c),true)}_mb(e,new QWc);return e} +function $u(a,b){var c,d,e;if(dE(b)===dE(Qb(a))){return true}if(!ZD(b,15)){return false}d=RD(b,15);e=a.gc();if(e!=d.gc()){return false}if(ZD(d,59)){for(c=0;c<e;c++){if(!Hb(a.Xb(c),d.Xb(c))){return false}}return true}else{return Cr(a.Kc(),d.Kc())}} +function Scc(a,b,c,d,e,f){var g,h,i,j;h=!QDb(CDb(a.Oc(),new PAb(new Wcc))).Bd((xDb(),wDb));g=a;f==(Cmd(),Bmd)&&(g=hv(g));for(j=g.Kc();j.Ob();){i=RD(j.Pb(),72);i.n.a=b.a;h?(i.n.b=b.b+(d.b-i.o.b)/2):e?(i.n.b=b.b):(i.n.b=b.b+d.b-i.o.b);b.a+=i.o.a+c}} +function Tgc(a,b){var c,d,e,f,g;b.Ug('Port side processing',1);for(g=new Anb(a.a);g.a<g.c.c.length;){e=RD(ynb(g),10);Ugc(e)}for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);Ugc(e)}}b.Vg()} +function bEd(a,b,c){var d,e,f,g,h,i,j;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=xDd(c,g.a);if(i){j=FGd(zDd(i,hIe),b);Zjb(a.f,j,i);e=uIe in i.a;e&&jyd(j,zDd(i,uIe));GEd(i,j);HEd(i,j)}}}} +function MWb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Nqd(new Oqd,0));h.Ug(EAe,1);cXb(a.c,b);g=H_b(a.a,b);if(g.gc()==1){OWb(RD(g.Xb(0),36),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=RD(e.Pb(),36);if(c.$g()){return}OWb(d,h.eh(f))}}F_b(a.a,g,b);PWb(b);h.Vg()} +function Hic(a,b,c){var d,e,f,g,h;e=a.f;!e&&(e=RD(a.a.a.ec().Kc().Pb(),60));Iic(e,b,c);if(a.a.a.gc()==1){return}d=b*c;for(g=a.a.a.ec().Kc();g.Ob();){f=RD(g.Pb(),60);if(f!=e){h=$jc(f);if(h.f.d){f.d.d+=d+Tye;f.d.a-=d+Tye}else h.f.a&&(f.d.a-=d+Tye)}}} +function kTb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+Gze;j=f-Gze;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return dv(cD(WC(l3,1),Nve,8,0,[new rjd(k,m),new rjd(l,n)]))} +function mQc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];h=(l=a.g[f.p],Kfb(a.p[l.p])+Kfb(a.d[f.p])-f.d.d);i=pQc(f,d);if(i){g=(j=a.g[i.p],Kfb(a.p[j.p])+Kfb(a.d[i.p])+i.o.b+i.d.a);e=$wnd.Math.min(e,h-(g+bFc(a.k,f,i)))}}while(k!=f);return e} +function nQc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];g=(l=a.g[f.p],Kfb(a.p[l.p])+Kfb(a.d[f.p])+f.o.b+f.d.a);i=oQc(f,d);if(i){h=(j=a.g[i.p],Kfb(a.p[j.p])+Kfb(a.d[i.p])-i.d.d);e=$wnd.Math.min(e,h-(g+bFc(a.k,f,i)))}}while(k!=f);return e} +function r9c(a,b){var c;b.Ug('Equal Whitespace Eliminator',1);if(Hxd(a,(X6c(),V6c))){w9c(RD(Gxd(a,V6c),15),Kfb(UD(Gxd(a,O6c))),(c=Kfb(UD(Gxd(a,M6c))),Kfb(UD(Gxd(a,(X7c(),Q7c)))),c))}else{throw Adb(new Jed('The graph does not contain rows.'))}b.Vg()} +function Gxd(a,b){var c,d;d=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),$Nd(a.o,b));if(d!=null){return d}c=b.Sg();ZD(c,4)&&(c==null?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),jOd(a.o,b)):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),fOd(a.o,b,c)),a);return c} +function dod(){dod=geb;Xnd=new eod('H_LEFT',0);Wnd=new eod('H_CENTER',1);Znd=new eod('H_RIGHT',2);cod=new eod('V_TOP',3);bod=new eod('V_CENTER',4);aod=new eod('V_BOTTOM',5);$nd=new eod('INSIDE',6);_nd=new eod('OUTSIDE',7);Ynd=new eod('H_PRIORITY',8)} +function jJb(a,b){var c,d,e,f,g,h,i;if(!b.f){throw Adb(new agb('The input edge is not a tree edge.'))}f=null;e=lve;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),218);h=c.d;i=c.e;if(oJb(a,h,b)&&!oJb(a,i,b)){g=i.e-h.e-c.a;if(g<e){e=g;f=c}}}return f} +function sWb(a){var b,c,d,e,f,g;if(a.f.e.c.length<=1){return}b=0;e=pWb(a);c=oxe;do{b>0&&(e=c);for(g=new Anb(a.f.e);g.a<g.c.c.length;){f=RD(ynb(g),153);if(Heb(TD(mQb(f,(dWb(),WVb))))){continue}d=oWb(a,f);$id(hjd(f.d),d)}c=pWb(a)}while(!rWb(a,b++,e,c))} +function Ymc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.n;a.a==(enc(),bnc)||a.i==(qpd(),Xod)?(e.a=f):a.a==cnc||a.i==(qpd(),ppd)?(e.a=f+a.j.a-c.o.a):(e.a=f+(a.j.a-c.o.a)/2);e.b=g;$id(e,b);g+=c.o.b+a.e}} +function BEd(a,b){var c,d,e,f,g,h,i,j,k,l;j=a;i=yDd(j,'individualSpacings');if(i){d=Hxd(b,(umd(),amd));g=!d;if(g){e=new dtd;Ixd(b,amd,e)}h=RD(Gxd(b,amd),385);l=i;f=null;!!l&&(f=(k=oC(l,$C(qJ,Nve,2,0,6,1)),new CC(l,k)));if(f){c=new dFd(l,h);xgb(f,c)}}} +function FEd(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=null;l=a;k=null;if(DIe in l.a||EIe in l.a||nIe in l.a){j=null;m=EGd(b);g=yDd(l,DIe);c=new gFd(m);cEd(c.a,g);h=yDd(l,EIe);d=new AFd(m);nEd(d.a,h);f=wDd(l,nIe);e=new DFd(m);j=(oEd(e.a,f),f);k=j}i=k;return i} +function ox(a,b){var c,d,e;if(b===a){return true}if(ZD(b,552)){e=RD(b,849);if(a.a.d!=e.a.d||Ih(a).gc()!=Ih(e).gc()){return false}for(d=Ih(e).Kc();d.Ob();){c=RD(d.Pb(),425);if(Qw(a,c.a.ld())!=RD(c.a.md(),16).gc()){return false}}return true}return false} +function sPb(a){var b,c,d,e;d=RD(a.a,17).a;e=RD(a.b,17).a;b=d;c=e;if(d==0&&e==0){c-=1}else{if(d==-1&&e<=0){b=0;c-=2}else{if(d<=0&&e>0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new Ptd(sgb(b),sgb(c))} +function nNc(a,b){if(a.c<b.c){return -1}else if(a.c>b.c){return 1}else if(a.b<b.b){return -1}else if(a.b>b.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(sNc(),rNc)&&b.d==qNc){return -1}else if(a.d==qNc&&b.d==rNc){return 1}return 0} +function ARc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=lQc(a.a,g,d);if(e>0&&e<Hze){c=mQc(a.a,d.i,e,a.c);rQc(a.a,d.i,-c);return c>0}else if(e<0&&-e<Hze){c=nQc(a.a,d.i,-e,a.c);rQc(a.a,d.i,c);return c>0}return false} +function X9c(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new Anb(a.c);l.a<l.c.c.length;){k=RD(ynb(l),27);j=k.g;i=k.f;Dyd(k,k.i+f*e);Eyd(k,k.j+d*c);Cyd(k,k.g+e);Ayd(k,a.a);++f;h=k.g;g=k.f;Jsd(k,new rjd(h,g),new rjd(j,i))}} +function vAd(a){var b,c,d,e,f,g,h;if(a==null){return null}h=a.length;e=(h+1)/2|0;g=$C(gE,YHe,28,e,15,1);h%2!=0&&(g[--e]=JAd((BFb(h-1,a.length),a.charCodeAt(h-1))));for(c=0,d=0;c<e;++c){b=JAd(ihb(a,d++));f=JAd(ihb(a,d++));g[c]=(b<<4|f)<<24>>24}return g} +function Bfb(a){if(a.ze()){var b=a.c;b.Ae()?(a.o='['+b.n):!b.ze()?(a.o='[L'+b.xe()+';'):(a.o='['+b.xe());a.b=b.we()+'[]';a.k=b.ye()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=Efb('.',[c,Efb('$',d)]);a.b=Efb('.',[c,Efb('.',d)]);a.k=d[d.length-1]} +function hJb(a,b){var c,d,e,f,g;g=null;for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);if(e.b.a.c.length==e.g.a.c.length){d=e.e;g=sJb(e);for(c=e.e-RD(g.a,17).a+1;c<e.e+RD(g.b,17).a;c++){b[c]<b[d]&&(d=c)}if(b[d]<b[e.e]){--b[e.e];++b[d];e.e=d}}}} +function qQc(a){var b,c,d,e,f,g,h,i;e=oxe;d=pxe;for(c=new Anb(a.e.b);c.a<c.c.c.length;){b=RD(ynb(c),30);for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);i=Kfb(a.p[f.p]);h=i+Kfb(a.b[a.g[f.p].p]);e=$wnd.Math.min(e,i);d=$wnd.Math.max(d,h)}}return d-e} +function nSd(a){gSd();var b,c,d,e;d=qhb(a,Fhb(35));b=d==-1?a:(AFb(0,d,a.length),a.substr(0,d));c=d==-1?null:(BFb(d+1,a.length+1),a.substr(d+1));e=KSd(fSd,b);if(!e){e=ASd(b);LSd(fSd,b,e);c!=null&&(e=hSd(e,c))}else c!=null&&(e=hSd(e,(uFb(c),c)));return e} +function Ree(a,b,c,d){var e,f,g,h,i,j;i=null;e=Fee(a,b);for(h=0,j=e.gc();h<j;++h){f=RD(e.Xb(h),179);if(lhb(d,Afe(Qee(a,f)))){g=Bfe(Qee(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(lhb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function See(a,b,c,d){var e,f,g,h,i,j;i=null;e=Gee(a,b);for(h=0,j=e.gc();h<j;++h){f=RD(e.Xb(h),179);if(lhb(d,Afe(Qee(a,f)))){g=Bfe(Qee(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(lhb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function Pge(a,b,c){var d,e,f,g,h,i;g=new YHd;h=pke(a.e.Dh(),b);d=RD(a.g,124);nke();if(RD(b,69).xk()){for(f=0;f<a.i;++f){e=d[f];h.am(e.Lk())&&WGd(g,e)}}else{for(f=0;f<a.i;++f){e=d[f];if(h.am(e.Lk())){i=e.md();WGd(g,c?Bge(a,b,f,g.i,i):i)}}}return WHd(g)} +function Kje(a){var b,c,d,e,f,g,h;if(a){b=a.qi(AKe);if(b){g=WD($Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'conversionDelegates'));if(g!=null){h=new bnb;for(d=vhb(g,'\\w+'),e=0,f=d.length;e<f;++e){c=d[e];ZEb(h.c,c)}return h}}}return yob(),yob(),vob} +function WXb(a,b){var c,d,e,f,g,h,i,j;g=b==1?MXb:LXb;for(f=g.a.ec().Kc();f.Ob();){e=RD(f.Pb(),88);for(i=RD(Qc(a.f.c,e),21).Kc();i.Ob();){h=RD(i.Pb(),42);d=RD(h.b,86);j=RD(h.a,194);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function idc(a,b){var c,d,e,f,g;c=new Zrb(ZW);for(e=(btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])),f=0,g=e.length;f<g;++f){d=e[f];Xrb(c,d,new bnb)}FDb(GDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new ydc),new Adc),new Cdc(b)),new Edc(c));return c} +function n3c(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(f=b.Kc();f.Ob();){e=RD(f.Pb(),27);k=e.i+e.g/2;m=e.j+e.f/2;i=a.f;g=i.i+i.g/2;h=i.j+i.f/2;j=k-g;l=m-h;d=$wnd.Math.sqrt(j*j+l*l);j*=a.e/d;l*=a.e/d;if(c){k-=j;m-=l}else{k+=j;m+=l}Dyd(e,k-e.g/2);Eyd(e,m-e.f/2)}} +function vte(a){var b,c,d;if(a.c)return;if(a.b==null)return;for(b=a.b.length-4;b>=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function nKc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h<i;++h){f=g[h];c=new hrc(j==-1?a[0]:a[j],b,(lDc(),kDc));for(d=0;d<f.length;d++){for(e=d+1;e<f.length;e++){nQb(f[d],(Ywc(),zwc))&&nQb(f[e],zwc)&&crc(c,f[d],f[e])>0&&++k}}++j}return k} +function awd(a){var b,c;c=new dib(nfb(a.Rm));c.a+='@';Zhb(c,(b=tb(a)>>>0,b.toString(16)));if(a.Vh()){c.a+=' (eProxyURI: ';Yhb(c,a._h());if(a.Kh()){c.a+=' eClass: ';Yhb(c,a.Kh())}c.a+=')'}else if(a.Kh()){c.a+=' (eClass: ';Yhb(c,a.Kh());c.a+=')'}return c.a} +function KGb(a){var b,c,d,e;if(a.e){throw Adb(new dgb((lfb(lN),lye+lN.k+mye)))}a.d==(Cmd(),Amd)&&JGb(a,ymd);for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.g=b.i}for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);d.i=pxe}a.b.cf(a);return a} +function rUc(a,b){var c,d,e,f,g;if(b<2*a.b){throw Adb(new agb('The knot vector must have at least two time the dimension elements.'))}a.f=1;for(e=0;e<a.b;e++){Rmb(a.e,0)}g=b+1-2*a.b;c=g;for(f=1;f<g;f++){Rmb(a.e,f/c)}if(a.d){for(d=0;d<a.b;d++){Rmb(a.e,1)}}} +function AEd(a,b){var c,d,e,f,g,h,i,j,k;j=b;k=RD(lp(Co(a.i),j),27);if(!k){e=zDd(j,uIe);h="Unable to find elk node for json object '"+e;i=h+"' Panic!";throw Adb(new CDd(i))}f=wDd(j,'edges');c=new KEd(a,k);MDd(c.a,c.b,f);g=wDd(j,iIe);d=new VEd(a);XDd(d.a,g)} +function XNd(a,b,c,d){var e,f,g,h,i;if(d!=null){e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=RD(f[h],136);if(g.Bi()==c&&pb(d,g.ld())){return h}}}}else{e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=RD(f[h],136);if(dE(g.ld())===dE(d)){return h}}}}return -1} +function N5d(a,b){var c,d,e;c=b==null?Wd(qtb(a.f,null)):Ktb(a.i,b);if(ZD(c,241)){e=RD(c,241);e.zi()==null&&undefined;return e}else if(ZD(c,507)){d=RD(c,2037);e=d.a;!!e&&(e.yb==null?undefined:b==null?rtb(a.f,null,e):Ltb(a.i,b,e));return e}else{return null}} +function Hqe(a){Gqe();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=Ahb(a);f=e/2|0;c=$C(gE,YHe,28,f,15,1);for(d=0;d<f;d++){g=Eqe[b[d*2]];if(g==-1)return null;h=Eqe[b[d*2+1]];if(h==-1)return null;c[d]=(g<<4|h)<<24>>24}return c} +function cNb(a,b,c){var d,e,f;e=RD(Vrb(a.i,b),314);if(!e){e=new UKb(a.d,b,c);Wrb(a.i,b,e);if(jMb(b)){tKb(a.a,b.c,b.b,e)}else{f=iMb(b);d=RD(Vrb(a.p,f),252);switch(f.g){case 1:case 3:e.j=true;cLb(d,b.b,e);break;case 4:case 2:e.k=true;cLb(d,b.c,e);}}}return e} +function Ndc(a,b){var c,d,e,f,g,h,i,j,k;i=ev(a.c-a.b&a.a.length-1);j=null;k=null;for(f=new Kmb(a);f.a!=f.b;){e=RD(Imb(f),10);c=(h=RD(mQb(e,(Ywc(),vwc)),12),!h?null:h.i);d=(g=RD(mQb(e,wwc),12),!g?null:g.i);if(j!=c||k!=d){Rdc(i,b);j=c;k=d}ZEb(i.c,e)}Rdc(i,b)} +function Rge(a,b,c,d){var e,f,g,h,i,j;h=new YHd;i=pke(a.e.Dh(),b);e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];i.am(f.Lk())&&WGd(h,f)}}else{for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){j=f.md();WGd(h,d?Bge(a,b,g,h.i,j):j)}}}return XHd(h,c)} +function oHc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new Anb(b.j);h.a<h.c.c.length;){g=RD(ynb(h),12);for(d=new Anb(g.g);d.a<d.c.c.length;){c=RD(ynb(d),18);j=c.d.i;if(b!=j){i=oHc(a,j);f=$wnd.Math.max(f,i+1)}}}nHc(a,b,f);return f}} +function wHc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new Anb(b.j);h.a<h.c.c.length;){g=RD(ynb(h),12);for(d=new Anb(g.e);d.a<d.c.c.length;){c=RD(ynb(d),18);j=c.c.i;if(b!=j){i=wHc(a,j);f=$wnd.Math.max(f,i+1)}}}vHc(a,b,f);return f}} +function wLc(a,b,c){var d,e,f;for(d=1;d<a.c.length;d++){f=(tFb(d,a.c.length),RD(a.c[d],10));e=d;while(e>0&&b.Ne((tFb(e-1,a.c.length),RD(a.c[e-1],10)),f)>0){$mb(a,e,(tFb(e-1,a.c.length),RD(a.c[e-1],10)));--e}tFb(e,a.c.length);a.c[e]=f}c.a=new Tsb;c.b=new Tsb} +function yhd(a,b,c){var d,e,f,g,h,i,j,k;k=(d=RD(b.e&&b.e(),9),new Fsb(d,RD(WEb(d,d.length),9),0));i=vhb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g<h;++g){e=f[g];if(Dhb(e).length==0){continue}j=xhd(a,e);if(j==null){return null}else{zsb(k,RD(j,22))}}return k} +function tse(a){var b,c,d,e;e=a.length;b=null;for(d=0;d<e;d++){c=(BFb(d,a.length),a.charCodeAt(d));if(qhb('.*+?{[()|\\^$',Fhb(c))>=0){if(!b){b=new Rhb;d>0&&Nhb(b,(AFb(0,d,a.length),a.substr(0,d)))}b.a+='\\';Jhb(b,c&Bwe)}else !!b&&Jhb(b,c&Bwe)}return b?b.a:a} +function MYb(a){var b,c,d;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=(uFb(0),0);if(d>0){!(Dmd(a.a.c)&&b.n.d)&&!(Emd(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(Dmd(a.a.c)&&b.n.a)&&!(Emd(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function Ydc(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(qpd(),Yod)||b==Xod){Odc(RD(omb(a),15),(Pnd(),Lnd));Odc(RD(omb(a),15),Mnd)}else{Odc(RD(omb(a),15),(Pnd(),Mnd));Odc(RD(omb(a),15),Lnd)}}else{for(e=new Kmb(a);e.a!=e.b;){d=RD(Imb(e),15);Odc(d,c)}}} +function HGd(a,b){var c,d,e,f,g,h,i;e=cv(new QGd(a));h=new Jkb(e,e.c.length);f=cv(new QGd(b));i=new Jkb(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sFb(h.b>0),RD(h.a.Xb(h.c=--h.b),27));d=(sFb(i.b>0),RD(i.a.Xb(i.c=--i.b),27));if(c==d){g=c}else{break}}return g} +function Dmc(a,b,c){var d,e,f,g;if(Hmc(a,b)>Hmc(a,c)){d=b3b(c,(qpd(),Xod));a.d=d.dc()?0:L3b(RD(d.Xb(0),12));g=b3b(b,ppd);a.b=g.dc()?0:L3b(RD(g.Xb(0),12))}else{e=b3b(c,(qpd(),ppd));a.d=e.dc()?0:L3b(RD(e.Xb(0),12));f=b3b(b,Xod);a.b=f.dc()?0:L3b(RD(f.Xb(0),12))}} +function wNb(a,b){var c,d,e,f;c=a.o.a;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);e.e.a=c*Kfb(UD(e.b.of(sNb)));e.e.b=(d=e.b,d.pf((umd(),Gld))?d.ag()==(qpd(),Yod)?-d.Mf().b-Kfb(UD(d.of(Gld))):Kfb(UD(d.of(Gld))):d.ag()==(qpd(),Yod)?-d.Mf().b:0)}} +function Mhc(a,b){var c,d,e,f;b.Ug('Self-Loop pre-processing',1);for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(pnc(c)){e=(f=new onc(c),pQb(c,(Ywc(),Pwc),f),lnc(f),f);FDb(GDb(EDb(new SDb(null,new Swb(e.d,16)),new Phc),new Rhc),new Thc);Khc(e)}}b.Vg()} +function xsc(a){var b,c,d,e,f,g,h,i;b=true;e=null;f=null;j:for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);for(d=new is(Mr(Z2b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(!!e&&e!=h){b=false;break j}e=h;g=c.c.i;if(!!f&&f!=g){b=false;break j}f=g}}return b} +function mTc(a,b,c){var d,e,f,g,h,i;f=-1;h=-1;for(g=0;g<b.c.length;g++){e=(tFb(g,b.c.length),RD(b.c[g],339));if(e.c>a.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=lTc(a,b,f,h);i=yTc((tFb(d,b.c.length),RD(b.c[d],339)));wTc(b,d,c)}return i} +function _Ad(a,b,c){var d,e,f,g,h,i,j;g=(f=new pVd,f);nVd(g,(uFb(b),b));j=(!g.b&&(g.b=new SVd((JTd(),FTd),C8,g)),g.b);for(i=1;i<c.length;i+=2){fOd(j,c[i-1],c[i])}d=(!a.Ab&&(a.Ab=new C5d(f7,a,0,3)),a.Ab);for(h=0;h<0;++h){e=jVd(RD(QHd(d,d.i-1),598));d=e}WGd(d,g)} +function DSb(a,b,c){var d,e,f;jQb.call(this,new bnb);this.a=b;this.b=c;this.e=a;d=(a.b&&CRb(a),a.a);this.d=BSb(d.a,this.a);this.c=BSb(d.b,this.b);bQb(this,this.d,this.c);CSb(this);for(f=this.e.e.a.ec().Kc();f.Ob();){e=RD(f.Pb(),272);e.c.c.length>0&&ASb(this,e)}} +function zTb(a,b,c,d,e,f){var g,h,i;if(!e[b.a]){e[b.a]=true;g=d;!g&&(g=new gUb);Rmb(g.e,b);for(i=f[b.a].Kc();i.Ob();){h=RD(i.Pb(),289);if(h.d==c||h.c==c){continue}h.c!=b&&zTb(a,h.c,b,g,e,f);h.d!=b&&zTb(a,h.d,b,g,e,f);Rmb(g.c,h);Tmb(g.d,h.b)}return g}return null} +function v7b(a){var b,c,d,e,f,g,h;b=0;for(e=new Anb(a.e);e.a<e.c.c.length;){d=RD(ynb(e),18);c=yDb(new SDb(null,new Swb(d.b,16)),new N7b);c&&++b}for(g=new Anb(a.g);g.a<g.c.c.length;){f=RD(ynb(g),18);h=yDb(new SDb(null,new Swb(f.b,16)),new P7b);h&&++b}return b>=2} +function _qc(a,b,c,d,e){var f,g,h,i,j,k;f=a.c.d.j;g=RD(ju(c,0),8);for(k=1;k<c.b;k++){j=RD(ju(c,k),8);Pub(d,g,d.c.b,d.c);h=ijd($id(new sjd(g),j),0.5);i=ijd(new qjd(BVc(f)),e);$id(h,i);Pub(d,h,d.c.b,d.c);g=j;f=b==0?tpd(f):rpd(f)}Mub(d,(sFb(c.b!=0),RD(c.c.b.c,8)))} +function fod(a){dod();var b,c,d;c=ysb($nd,cD(WC(A3,1),jwe,95,0,[_nd]));if(dy(Tx(c,a))>1){return false}b=ysb(Xnd,cD(WC(A3,1),jwe,95,0,[Wnd,Znd]));if(dy(Tx(b,a))>1){return false}d=ysb(cod,cD(WC(A3,1),jwe,95,0,[bod,aod]));if(dy(Tx(d,a))>1){return false}return true} +function $Uc(a,b,c){var d,e,f;for(f=new Anb(a.t);f.a<f.c.c.length;){d=RD(ynb(f),274);if(d.b.s<0&&d.c>0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Mub(b,d.b)}}for(e=new Anb(a.i);e.a<e.c.c.length;){d=RD(ynb(e),274);if(d.a.s<0&&d.c>0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Mub(c,d.a)}}} +function tId(a){var b,c,d,e,f;if(a.g==null){a.d=a.bj(a.f);WGd(a,a.d);if(a.c){f=a.f;return f}}b=RD(a.g[a.i-1],51);e=b.Pb();a.e=b;c=a.bj(e);if(c.Ob()){a.d=c;WGd(a,c)}else{a.d=null;while(!b.Ob()){bD(a.g,--a.i,null);if(a.i==0){break}d=RD(a.g[a.i-1],51);b=d}}return e} +function Rfe(a,b){var c,d,e,f,g,h;d=b;e=d.Lk();if(qke(a.e,e)){if(e.Si()&&cge(a,e,d.md())){return false}}else{h=pke(a.e.Dh(),e);c=RD(a.g,124);for(f=0;f<a.i;++f){g=c[f];if(h.am(g.Lk())){if(pb(g,d)){return false}else{RD(eHd(a,f,b),76);return true}}}}return WGd(a,b)} +function Icc(a,b,c,d){var e,f,g,h;e=new j3b(a);h3b(e,(r3b(),n3b));pQb(e,(Ywc(),Awc),b);pQb(e,Mwc,d);pQb(e,(yCc(),BBc),(Bod(),wod));pQb(e,vwc,b.c);pQb(e,wwc,b.d);Oec(b,e);h=$wnd.Math.floor(c/2);for(g=new Anb(e.j);g.a<g.c.c.length;){f=RD(ynb(g),12);f.n.b=h}return e} +function fSc(a){var b,c,d,e,f,g,h;b=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);for(f=new is(Mr(a3b(c).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a==e.d.i.c&&e.c.j==(qpd(),ppd)){g=K3b(e.c).b;h=K3b(e.d).b;b=$wnd.Math.max(b,$wnd.Math.abs(h-g))}}}return b} +function QTb(a,b,c){var d,e,f,g,h;c.Ug('ELK Force',1);Heb(TD(Gxd(b,(yVb(),gVb))))||RFb((d=new SFb((lud(),new zud(b))),d));h=KTb(b);RTb(h);STb(a,RD(mQb(h,bVb),432));g=CTb(a.a,h);for(f=g.Kc();f.Ob();){e=RD(f.Pb(),235);pUb(a.b,e,c.eh(1/g.gc()))}h=BTb(g);JTb(h);c.Vg()} +function d_b(a,b,c){switch(c.g){case 1:return new rjd(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new rjd($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new rjd(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new rjd($wnd.Math.min(b.a,a.d.a),b.b);}return new rjd(b.a,b.b)} +function yGd(a){var b,c,d;b=ev(1+(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c).i);Rmb(b,(!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));for(d=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));d.e!=d.i.gc();){c=RD(bMd(d),123);Rmb(b,(!c.d&&(c.d=new Yie(G4,c,8,5)),c.d))}return Qb(b),new Dl(b)} +function zGd(a){var b,c,d;b=ev(1+(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c).i);Rmb(b,(!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));for(d=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));d.e!=d.i.gc();){c=RD(bMd(d),123);Rmb(b,(!c.e&&(c.e=new Yie(G4,c,7,4)),c.e))}return Qb(b),new Dl(b)} +function jne(a){var b,c,d,e;if(a==null){return null}else{d=nue(a,true);e=mLe.length;if(lhb(d.substr(d.length-e,e),mLe)){c=d.length;if(c==4){b=(BFb(0,d.length),d.charCodeAt(0));if(b==43){return Wme}else if(b==45){return Vme}}else if(c==3){return Wme}}return Neb(d)}} +function _rc(a,b){var c,d,e,f,g;b.Ug('Breaking Point Processor',1);$rc(a);if(Heb(TD(mQb(a,(yCc(),uCc))))){for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);c=0;for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);f.p=c++}}Vrc(a);Wrc(a,true);Wrc(a,false)}b.Vg()} +function MJc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(qpd(),ppd):(qpd(),Xod);e=false;for(i=b[c],j=0,k=i.length;j<k;++j){h=i[j];if(Cod(RD(mQb(h,(yCc(),BBc)),101))){continue}g=h.e;m=!b3b(h,l).dc()&&!!g;if(m){f=c1b(g);a.b=new Ylc(f,d?0:f.length-1)}e=e|NJc(a,h,l,m)}return e} +function gOc(a,b,c,d){var e,f,g;g=T0b(b,c);ZEb(d.c,b);if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new is(Mr(W2b(g).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!(!W0b(e)&&!(!W0b(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return gOc(a,e,g,d)}return d} +function AOc(a){var b,c,d,e;b=0;c=0;for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);b=Ydb(Bdb(b,ADb(CDb(new SDb(null,new Swb(d.e,16)),new NPc))));c=Ydb(Bdb(c,ADb(CDb(new SDb(null,new Swb(d.g,16)),new PPc))));if(b>1||c>1){return 2}}if(b+c==1){return 2}return 0} +function Kwb(a,b){var c,d,e,f,g,h;f=a.a*Mxe+a.b*1502;h=a.b*Mxe+11;c=$wnd.Math.floor(h*Nxe);f+=c;h-=c*Oxe;f%=Oxe;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*Ewb[b])}else{e=a.a*(1<<b-24);g=$wnd.Math.floor(a.b*Fwb[b]);d=e+g;d>=2147483648&&(d-=4294967296);return d}} +function uSc(a,b,c){var d,e,f,g,h,i,j;f=new bnb;j=new Yub;g=new Yub;vSc(a,j,g,b);tSc(a,j,g,b,c);for(i=new Anb(a);i.a<i.c.c.length;){h=RD(ynb(i),118);for(e=new Anb(h.k);e.a<e.c.c.length;){d=RD(ynb(e),132);(!b||d.c==(fTc(),dTc))&&h.g>d.b.g&&(ZEb(f.c,d),true)}}return f} +function jed(a,b,c){var d,e,f,g,h,i;h=a.c;for(g=(!c.q?(yob(),yob(),wob):c.q).vc().Kc();g.Ob();){f=RD(g.Pb(),44);d=!QDb(CDb(new SDb(null,new Swb(h,16)),new PAb(new xed(b,f)))).Bd((xDb(),wDb));if(d){i=f.md();if(ZD(i,4)){e=FId(i);e!=null&&(i=e)}b.qf(RD(f.ld(),149),i)}}} +function mbd(a,b,c){var d,e;Sed(a.b);Ved(a.b,(gbd(),dbd),(_cd(),$cd));Ved(a.b,ebd,b.g);Ved(a.b,fbd,b.a);a.a=Qed(a.b,b);c.Ug('Compaction by shrinking a tree',a.a.c.length);if(b.i.c.length>1){for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),47);d.Kf(b,c.eh(1))}}c.Vg()} +function Svd(a,b,c){var d,e,f;f=Eee((lke(),jke),a.Dh(),b);if(f){nke();if(!RD(f,69).xk()){f=zfe(Qee(jke,f));if(!f){throw Adb(new agb(KHe+b.xe()+LHe))}}e=(d=a.Ih(f),RD(d>=0?a.Lh(d,true,true):Qvd(a,f,true),160));RD(e,220).Xl(b,c)}else{throw Adb(new agb(KHe+b.xe()+LHe))}} +function k2d(a,b){var c,d,e,f,g;if(!b){return null}else{f=ZD(a.Cb,90)||ZD(a.Cb,102);g=!f&&ZD(a.Cb,331);for(d=new dMd((!b.a&&(b.a=new iae(b,o7,b)),b.a));d.e!=d.i.gc();){c=RD(bMd(d),89);e=i2d(c);if(f?ZD(e,90):g?ZD(e,156):!!e){return e}}return f?(JTd(),zTd):(JTd(),wTd)}} +function W8b(a,b){var c,d,e,f;b.Ug('Resize child graph to fit parent.',1);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);Tmb(a.a,c.a);c.a.c.length=0}for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g3b(e,null)}a.b.c.length=0;X8b(a);!!a.e&&V8b(a.e,a);b.Vg()} +function Fec(a,b){var c,d,e,f,g;b.Ug('Edge joining',1);c=Heb(TD(mQb(a,(yCc(),mCc))));for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);g=new Jkb(d.a,0);while(g.b<g.d.gc()){f=(sFb(g.b<g.d.gc()),RD(g.d.Xb(g.c=g.b++),10));if(f.k==(r3b(),o3b)){Hec(f,c);Ckb(g)}}}b.Vg()} +function pTc(a,b){var c,d,e,f,g;c=new bnb;e=EDb(new SDb(null,new Swb(a,16)),new ITc);f=EDb(new SDb(null,new Swb(a,16)),new KTc);g=VCb(UCb(HDb(Ly(cD(WC(RM,1),rve,848,0,[e,f])),new MTc)));for(d=1;d<g.length;d++){g[d]-g[d-1]>=2*b&&Rmb(c,new BTc(g[d-1]+b,g[d]-b))}return c} +function dEd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);e=xDd(c,g.a);!!e&&(i=null,j=sEd(a,(k=(bvd(),l=new PCd,l),!!b&&NCd(k,b),k),e),jyd(j,zDd(e,uIe)),GEd(e,j),HEd(e,j),CEd(a,e,j))}}} +function sYd(a){var b,c,d,e,f,g;if(!a.j){g=new f1d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);e=sYd(c);YGd(g,e);WGd(g,c)}b.a.Bc(a)!=null}VHd(g);a.j=new N$d((RD(QHd(xYd((lTd(),kTd).o),11),19),g.i),g.g);yYd(a).b&=-33}return a.j} +function lne(a){var b,c,d,e;if(a==null){return null}else{d=nue(a,true);e=mLe.length;if(lhb(d.substr(d.length-e,e),mLe)){c=d.length;if(c==4){b=(BFb(0,d.length),d.charCodeAt(0));if(b==43){return Yme}else if(b==45){return Xme}}else if(c==3){return Yme}}return new Ufb(d)}} +function pD(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ogb(c)}if(b==0&&d!=0&&c==0){return ogb(d)+22}if(b!=0&&d==0&&c==0){return ogb(b)+44}return -1} +function yo(a,b){var c,d,e,f,g;e=b.a&a.f;f=null;for(d=a.b[e];true;d=d.b){if(d==b){!f?(a.b[e]=b.b):(f.b=b.b);break}f=d}g=b.f&a.f;f=null;for(c=a.c[g];true;c=c.d){if(c==b){!f?(a.c[g]=b.d):(f.d=b.d);break}f=c}!b.e?(a.a=b.c):(b.e.c=b.c);!b.c?(a.e=b.e):(b.c.e=b.e);--a.i;++a.g} +function Dt(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=RD(Hvb(RD(_jb(a.b,b.a),260)),260);c.a=0;++a.c}else{c=RD(Hvb(RD(Wjb(a.b,b.a),260)),260);--c.a;!b.e?(c.b=RD(Hvb(b.c),511)):(b.e.c=b.c);!b.c?(c.c=RD(Hvb(b.e),511)):(b.c.e=b.e)}--a.d} +function XPb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=lve;e=qwe;h=lve;f=qwe;for(j=0;j<c;++j){for(k=0;k<b;++k){if(PPb(a,j,k)){g=$wnd.Math.min(g,j);e=$wnd.Math.max(e,j);h=$wnd.Math.min(h,k);f=$wnd.Math.max(f,k)}}}i=e-g+1;d=f-h+1;return new $td(sgb(g),sgb(h),sgb(i),sgb(d))} +function FZb(a,b){var c,d,e,f;f=new Jkb(a,0);c=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),148));while(f.b<f.d.gc()){d=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),148));e=new fZb(d.c,c.d,b);sFb(f.b>0);f.a.Xb(f.c=--f.b);Ikb(f,e);sFb(f.b<f.d.gc());f.d.Xb(f.c=f.b++);e.a=false;c=d}} +function n6b(a){var b,c,d,e,f,g;e=RD(mQb(a,(Ywc(),Xvc)),12);for(g=new Anb(a.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(d=new Anb(f.g);d.a<d.c.c.length;){b=RD(ynb(d),18);Z0b(b,e);return f}for(c=new Anb(f.e);c.a<c.c.c.length;){b=RD(ynb(c),18);Y0b(b,e);return f}}return null} +function Xec(a,b,c){var d,e,f,g,h,i;i=RD($5b(a.a,b),17).a;c?c6b(a.a,sgb(i+1),b):c6b(a.a,sgb(i-1),b);g=new Iub;for(e=new is(Mr((c?a3b(b):Z2b(b)).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);c?(f=d.d.i):(f=d.c.i);dE($5b(a.a,f))===dE($5b(a.a,b))&&(h=g.a.zc(f,g),h==null)}return g} +function yA(a,b,c){var d,e;d=Hdb(c.q.getTime());if(Ddb(d,0)<0){e=Awe-Ydb(Mdb(Odb(d),Awe));e==Awe&&(e=0)}else{e=Ydb(Mdb(d,Awe))}if(b==1){e=$wnd.Math.min((e+50)/100|0,9);Thb(a,48+e&Bwe)}else if(b==2){e=$wnd.Math.min((e+5)/10|0,99);UA(a,e,2)}else{UA(a,e,3);b>3&&UA(a,0,b-3)}} +function eXb(a){var b,c,d,e;if(dE(mQb(a,(yCc(),IAc)))===dE((Fnd(),Cnd))){return !a.e&&dE(mQb(a,gAc))!==dE((xvc(),uvc))}d=RD(mQb(a,hAc),298);e=Heb(TD(mQb(a,nAc)))||dE(mQb(a,oAc))===dE((stc(),ptc));b=RD(mQb(a,fAc),17).a;c=a.a.c.length;return !e&&d!=(xvc(),uvc)&&(b==0||b>c)} +function Rnc(a){var b,c;c=0;for(;c<a.c.length;c++){if(snc((tFb(c,a.c.length),RD(a.c[c],113)))>0){break}}if(c>0&&c<a.c.length-1){return c}b=0;for(;b<a.c.length;b++){if(snc((tFb(b,a.c.length),RD(a.c[b],113)))>0){break}}if(b>0&&c<a.c.length-1){return b}return a.c.length/2|0} +function Mzd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=6&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+Qzd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Czd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,6,d));d=Bzd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,6,b,b))} +function pzd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+qzd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?jzd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,12,d));d=izd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} +function NCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+OCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?LCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,9,d));d=KCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,9,b,b))} +function tWd(b){var c,d,e,f,g;e=WVd(b);g=b.j;if(g==null&&!!e){return b.Jk()?null:e.ik()}else if(ZD(e,156)){d=e.jk();if(d){f=d.wi();if(f!=b.i){c=RD(e,156);if(c.nk()){try{b.g=f.ti(c,g)}catch(a){a=zdb(a);if(ZD(a,82)){b.g=null}else throw Adb(a)}}b.i=f}}return b.g}return null} +function nRb(a){var b;b=new bnb;Rmb(b,new TFb(new rjd(a.c,a.d),new rjd(a.c+a.b,a.d)));Rmb(b,new TFb(new rjd(a.c,a.d),new rjd(a.c,a.d+a.a)));Rmb(b,new TFb(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c+a.b,a.d)));Rmb(b,new TFb(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c,a.d+a.a)));return b} +function ic(b){var c,d,e;if(b==null){return vve}try{return jeb(b)}catch(a){a=zdb(a);if(ZD(a,103)){c=a;e=nfb(rb(b))+'@'+(d=(gib(),jFb(b))>>>0,d.toString(16));lBb(pBb(),(SAb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+nfb(c.Rm)+'>'}else throw Adb(a)}} +function mTb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=RD(f.Pb(),74);d=RD(Wjb(a.b,e),272);!d&&(vCd(JGd(e))==vCd(LGd(e))?lTb(a,e,c):JGd(e)==vCd(LGd(e))?Wjb(a.c,e)==null&&Wjb(a.b,LGd(e))!=null&&oTb(a,e,c,false):Wjb(a.d,e)==null&&Wjb(a.b,JGd(e))!=null&&oTb(a,e,c,true))}} +function Pfc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),10);h=new R3b;P3b(h,d);Q3b(h,(qpd(),Xod));pQb(h,(Ywc(),Hwc),(Geb(),true));for(g=b.Kc();g.Ob();){f=RD(g.Pb(),10);i=new R3b;P3b(i,f);Q3b(i,ppd);pQb(i,Hwc,true);c=new a1b;pQb(c,Hwc,true);Y0b(c,h);Z0b(c,i)}}} +function Pqc(a,b,c,d){var e,f,g,h;e=Nqc(a,b,c);f=Nqc(a,c,b);g=RD(Wjb(a.c,b),118);h=RD(Wjb(a.c,c),118);if(e<f){new bTc((fTc(),eTc),g,h,f-e)}else if(f<e){new bTc((fTc(),eTc),h,g,e-f)}else if(e!=0||!(!b.i||!c.i)&&d[b.i.c][c.i.c]){new bTc((fTc(),eTc),g,h,0);new bTc(eTc,h,g,0)}} +function rsc(a,b){var c,d,e,f,g,h,i;e=0;for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);e+=f.o.b+f.d.a+f.d.d+a.e;for(d=new is(Mr(Z2b(f).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(c.c.i.k==(r3b(),q3b)){i=c.c.i;h=RD(mQb(i,(Ywc(),Awc)),10);e+=h.o.b+h.d.a+h.d.d}}}return e} +function sad(){sad=geb;oad=new tad('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);nad=new tad('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);qad=new tad('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);pad=new tad('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);rad=new tad('WHOLE_DRAWING',4)} +function vEd(a,b){if(ZD(b,207)){return IDd(a,RD(b,27))}else if(ZD(b,193)){return JDd(a,RD(b,123))}else if(ZD(b,366)){return HDd(a,RD(b,135))}else if(ZD(b,326)){return GDd(a,RD(b,74))}else if(b){return null}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[b])))))}} +function Glc(a){var b,c,d,e,f,g,h;f=new Yub;for(e=new Anb(a.d.a);e.a<e.c.c.length;){d=RD(ynb(e),125);d.b.a.c.length==0&&(Pub(f,d,f.c.b,f.c),true)}if(f.b>1){b=eJb((c=new gJb,++a.b,c),a.d);for(h=Sub(f,0);h.b!=h.d.c;){g=RD(evb(h),125);rIb(uIb(tIb(vIb(sIb(new wIb,1),0),b),g))}}} +function isc(a,b,c){var d,e,f,g,h;c.Ug('Breaking Point Removing',1);a.a=RD(mQb(b,(yCc(),yAc)),223);for(f=new Anb(b.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(bv(e.a));h.a<h.c.c.length;){g=RD(ynb(h),10);if(Krc(g)){d=RD(mQb(g,(Ywc(),Wvc)),313);!d.d&&jsc(a,d)}}}c.Vg()} +function yCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+zCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?sCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,10,d));d=rCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,11,b,b))} +function C0b(a){var b,c,d,e;for(d=new vkb((new mkb(a.b)).a);d.b;){c=tkb(d);e=RD(c.ld(),12);b=RD(c.md(),10);pQb(b,(Ywc(),Awc),e);pQb(e,Iwc,b);pQb(e,nwc,(Geb(),true));Q3b(e,RD(mQb(b,hwc),64));mQb(b,hwc);pQb(e.i,(yCc(),BBc),(Bod(),yod));RD(mQb(Y2b(e.i),kwc),21).Fc((ovc(),kvc))}} +function X7b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new Anb(a.d.i.j);i.a<i.c.c.length;){h=RD(ynb(i),12);f+=h.e.c.length}}else{f=1}if(a.d){for(i=new Anb(a.c.i.j);i.a<i.c.c.length;){h=RD(ynb(i),12);g+=h.g.c.length}}else{g=1}e=eE(Lgb(g-f));d=(c+b)/2+(c-b)*(0.4*e);return d} +function Dnc(a){Bnc();var b,c;if(a.Hc((qpd(),opd))){throw Adb(new agb('Port sides must not contain UNDEFINED'))}switch(a.gc()){case 1:return xnc;case 2:b=a.Hc(Xod)&&a.Hc(ppd);c=a.Hc(Yod)&&a.Hc(npd);return b||c?Anc:znc;case 3:return ync;case 4:return wnc;default:return null;}} +function Did(a,b,c){tid();if(xid(a,b)&&xid(a,c)){return false}return Fid(new rjd(a.c,a.d),new rjd(a.c+a.b,a.d),b,c)||Fid(new rjd(a.c+a.b,a.d),new rjd(a.c+a.b,a.d+a.a),b,c)||Fid(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c,a.d+a.a),b,c)||Fid(new rjd(a.c,a.d+a.a),new rjd(a.c,a.d),b,c)} +function Xee(a,b){var c,d,e,f;if(!a.dc()){for(c=0,d=a.gc();c<d;++c){f=WD(a.Xb(c));if(f==null?b==null:lhb(f.substr(0,3),'!##')?b!=null&&(e=b.length,!lhb(f.substr(f.length-e,e),b)||f.length!=b.length+3)&&!lhb(dLe,b):lhb(f,eLe)&&!lhb(dLe,b)||lhb(f,b)){return true}}}return false} +function $6b(a,b,c,d){var e,f,g,h,i,j;g=a.j.c.length;i=$C(NN,Mye,314,g,0,1);for(h=0;h<g;h++){f=RD(Vmb(a.j,h),12);f.p=h;i[h]=U6b(c7b(f),c,d)}W6b(a,i,c,b,d);j=new Tsb;for(e=0;e<i.length;e++){!!i[e]&&Zjb(j,RD(Vmb(a.j,e),12),i[e])}if(j.f.c+j.i.c!=0){pQb(a,(Ywc(),cwc),j);a7b(a,i)}} +function Yfc(a,b){var c,d,e,f,g,h;b.Ug('Partition postprocessing',1);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);h=new Anb(e.j);while(h.a<h.c.c.length){g=RD(ynb(h),12);Heb(TD(mQb(g,(Ywc(),Hwc))))&&znb(h)}}}b.Vg()} +function pkc(a,b,c){var d,e,f;for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);f=Zjc(d);if(f){if(f.k==(r3b(),m3b)){switch(RD(mQb(f,(Ywc(),hwc)),64).g){case 4:f.n.a=b.a;break;case 2:f.n.a=c.a-(f.o.a+f.d.c);break;case 1:f.n.b=b.b;break;case 3:f.n.b=c.b-(f.o.b+f.d.a);}}}}} +function eZc(a,b,c){var d,e,f;c.Ug('Processor determine the height for each level',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Sub(b.b,0);while(!e&&d.b!=d.d.c){f=RD(evb(d),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(e=f)}!!e&&fZc(a,dv(cD(WC(Z$,1),NEe,39,0,[e])),c,RD(mQb(b,(h_c(),H$c)),88));c.Vg()} +function N8c(a){var b,c,d,e,f,g;d=(bvd(),f=new ACd,f);zxd(d,a);for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);g=(e=new ACd,e);yCd(g,d);zyd(g,b.g,b.f);jyd(g,b.k);Byd(g,b.i,b.j);WGd((!d.a&&(d.a=new C5d(J4,d,10,11)),d.a),g);zxd(g,b)}return d} +function ord(a,b,c){var d,e,f,g,h;e=RD(Gxd(b,(hkd(),fkd)),17);!e&&(e=sgb(0));f=RD(Gxd(c,fkd),17);!f&&(f=sgb(0));if(e.a>f.a){return -1}else if(e.a<f.a){return 1}else{if(a.a){d=Qfb(b.j,c.j);if(d!=0){return d}d=Qfb(b.i,c.i);if(d!=0){return d}}g=b.g*b.f;h=c.g*c.f;return Qfb(g,h)}} +function _Nd(a,b){var c,d,e,f,g,h,i,j,k,l;++a.e;i=a.d==null?0:a.d.length;if(b>i){k=a.d;a.d=$C(D6,KJe,66,2*i+4,0,1);for(f=0;f<i;++f){j=k[f];if(j){d=j.g;l=j.i;for(h=0;h<l;++h){e=RD(d[h],136);g=bOd(a,e.Bi());c=a.d[g];!c&&(c=a.d[g]=a.dk());c.Fc(e)}}}return true}else{return false}} +function Ofe(a,b,c){var d,e,f,g,h,i;e=c;f=e.Lk();if(qke(a.e,f)){if(f.Si()){d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw Adb(new agb(LIe))}}}}else{i=pke(a.e.Dh(),f);d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(i.am(h.Lk())){throw Adb(new agb(gLe))}}}VGd(a,b,c)} +function R_b(a,b){var c,d,e,f,g,h;c=RD(mQb(b,(Ywc(),ewc)),21);g=RD(Qc((z$b(),y$b),c),21);h=RD(Qc(O_b,c),21);for(f=g.Kc();f.Ob();){d=RD(f.Pb(),21);if(!RD(Qc(a.b,d),15).dc()){return false}}for(e=h.Kc();e.Ob();){d=RD(e.Pb(),21);if(!RD(Qc(a.b,d),15).dc()){return false}}return true} +function dad(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.c.length==1){return P9c(RD(Vmb(a.a,0),172),b)}g=cad(a);i=0;j=a.d;f=g;k=a.d;h=(j-f)/2+f;while(f+1<j){i=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);i+=(e=S9c(c,h,false),e.a)}if(i<b){k=h;j=h}else{f=h}h=(j-f)/2+f}return k} +function zxd(a,b){var c,d,e,f,g;if(!b){return a}if(ZD(b,342)){e=RD(b,342);f=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o);for(d=e.gh().c.Kc();d.e!=d.i.gc();){c=RD(d.Yj(),44);g=c.md();fOd(f,RD(c.ld(),149),g)}}else{!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));gOd(a.o,b.nf())}return a} +function vD(a){var b,c,d,e,f;if(isNaN(a)){return MD(),LD}if(a<-9223372036854775808){return MD(),JD}if(a>=9223372036854775807){return MD(),ID}e=false;if(a<0){e=true;a=-a}d=0;if(a>=hxe){d=eE(a/hxe);a-=d*hxe}c=0;if(a>=gxe){c=eE(a/gxe);a-=c*gxe}b=eE(a);f=hD(b,c,d);e&&nD(f);return f} +function KCb(a){var b,c,d,e,f;f=new bnb;Umb(a.b,new SEb(f));a.b.c.length=0;if(f.c.length!=0){b=(tFb(0,f.c.length),RD(f.c[0],82));for(c=1,d=f.c.length;c<d;++c){e=(tFb(c,f.c.length),RD(f.c[c],82));e!=b&&fz(b,e)}if(ZD(b,63)){throw Adb(RD(b,63))}if(ZD(b,295)){throw Adb(RD(b,295))}}} +function iNb(a,b){var c,d,e,f;c=!b||!a.u.Hc((Pod(),Lod));f=0;for(e=new Anb(a.e.Xf());e.a<e.c.c.length;){d=RD(ynb(e),852);if(d.ag()==(qpd(),opd)){throw Adb(new agb('Label and node size calculator can only be used with ports that have port sides assigned.'))}d.Qf(f++);hNb(a,d,c)}} +function IGb(a){var b,c,d,e,f;for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.j=null;for(f=b.a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),60);hjd(d.b);(!b.j||d.d.c<b.j.d.c)&&(b.j=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),60);d.b.a=d.d.c-b.j.d.c;d.b.b=d.d.d-b.j.d.d}}return a} +function uYb(a){var b,c,d,e,f;for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),194);b.f=null;for(f=b.a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),86);hjd(d.e);(!b.f||d.g.c<b.f.g.c)&&(b.f=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),86);d.e.a=d.g.c-b.f.g.c;d.e.b=d.g.d-b.f.g.d}}return a} +function vPb(a){var b,c,d;c=RD(a.a,17).a;d=RD(a.b,17).a;b=$wnd.Math.max($wnd.Math.abs(c),$wnd.Math.abs(d));if(c<b&&d==-b){return new Ptd(sgb(c+1),sgb(d))}if(c==b&&d<b){return new Ptd(sgb(c),sgb(d+1))}if(c>=-b&&d==b){return new Ptd(sgb(c-1),sgb(d))}return new Ptd(sgb(c),sgb(d-1))} +function lcc(){hcc();return cD(WC(YS,1),jwe,81,0,[nbc,kbc,obc,Ebc,Xbc,Ibc,bcc,Nbc,Vbc,zbc,Rbc,Mbc,Wbc,vbc,dcc,ebc,Qbc,Zbc,Fbc,Ybc,fcc,Tbc,fbc,Ubc,gcc,_bc,ecc,Gbc,sbc,Hbc,Dbc,ccc,ibc,qbc,Kbc,hbc,Lbc,Bbc,wbc,Obc,ybc,lbc,jbc,Cbc,xbc,Pbc,acc,gbc,Sbc,Abc,Jbc,tbc,rbc,$bc,pbc,ubc,mbc])} +function Cmc(a,b,c){a.d=0;a.b=0;b.k==(r3b(),q3b)&&c.k==q3b&&RD(mQb(b,(Ywc(),Awc)),10)==RD(mQb(c,Awc),10)&&(Gmc(b).j==(qpd(),Yod)?Dmc(a,b,c):Dmc(a,c,b));b.k==q3b&&c.k==o3b?Gmc(b).j==(qpd(),Yod)?(a.d=1):(a.b=1):c.k==q3b&&b.k==o3b&&(Gmc(c).j==(qpd(),Yod)?(a.b=1):(a.d=1));Imc(a,b,c)} +function EFd(a){var b,c,d,e,f,g,h,i,j,k,l;l=HFd(a);b=a.a;i=b!=null;i&&sDd(l,'category',a.a);e=cve(new Xkb(a.d));g=!e;if(g){j=new MB;sC(l,'knownOptions',j);c=new MFd(j);xgb(new Xkb(a.d),c)}f=cve(a.g);h=!f;if(h){k=new MB;sC(l,'supportedFeatures',k);d=new OFd(k);xgb(a.g,d)}return l} +function Ly(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new hq(a.length);for(h=a,i=0,j=h.length;i<j;++i){g=h[i];d=d|(MCb(g),false);e=(LCb(g),g.a);Rmb(f.a,Qb(e));b&=e.yd();c=az(c,e.zd())}return RD(RD(JCb(new SDb(null,ek(new Swb((tm(),zm(f.a)),16),new My,b,c)),new Oy(a)),687),848)} +function WZb(a,b){var c;if(!!a.d&&(b.c!=a.e.c||sZb(a.e.b,b.b))){Rmb(a.f,a.d);a.a=a.d.c+a.d.b;a.d=null;a.e=null}pZb(b.b)?(a.c=b):(a.b=b);if(b.b==(nZb(),jZb)&&!b.a||b.b==kZb&&b.a||b.b==lZb&&b.a||b.b==mZb&&!b.a){if(!!a.c&&!!a.b){c=new Uid(a.a,a.c.d,b.c-a.a,a.b.d-a.c.d);a.d=c;a.e=b}}} +function Wed(a){var b;Oed.call(this);this.i=new ifd;this.g=a;this.f=RD(a.e&&a.e(),9).length;if(this.f==0){throw Adb(new agb('There must be at least one phase in the phase enumeration.'))}this.c=(b=RD(mfb(this.g),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.a=new ufd;this.b=new Tsb} +function eCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=7&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+gCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=RD(b,54).Rh(a,1,H4,d));d=bCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,7,b,b))} +function lVd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+oVd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?iVd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=RD(b,54).Rh(a,0,p7,d));d=hVd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} +function Mjb(a,b){Ljb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Qjb(a,b)}g=(a.d&-2)<<4;j=$ib(a,g);k=$ib(b,g);d=Gjb(a,Zib(j,g));e=Gjb(b,Zib(k,g));i=Mjb(j,k);c=Mjb(d,e);f=Mjb(Gjb(j,d),Gjb(e,k));f=Bjb(Bjb(f,i),c);f=Zib(f,g);i=Zib(i,g<<1);return Bjb(Bjb(i,f),c)} +function _Cc(){_Cc=geb;ZCc=new bDc(lEe,0);WCc=new bDc('LONGEST_PATH',1);XCc=new bDc('LONGEST_PATH_SOURCE',2);TCc=new bDc('COFFMAN_GRAHAM',3);VCc=new bDc(BBe,4);$Cc=new bDc('STRETCH_WIDTH',5);YCc=new bDc('MIN_WIDTH',6);SCc=new bDc('BF_MODEL_ORDER',7);UCc=new bDc('DF_MODEL_ORDER',8)} +function AKc(a,b,c){var d,e,f,g,h;g=aMc(a,c);h=$C(jR,WAe,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=RD(f.Pb(),12);Heb(TD(mQb(e,(Ywc(),nwc))))&&(h[d++]=RD(mQb(e,Iwc),10))}if(d<b.length){throw Adb(new dgb('Expected '+b.length+' hierarchical ports, but found only '+d+'.'))}return h} +function sBd(a,b){var c,d,e,f,g,h;if(!a.tb){f=(!a.rb&&(a.rb=new J5d(a,i7,a)),a.rb);h=new Usb(f.i);for(e=new dMd(f);e.e!=e.i.gc();){d=RD(bMd(e),142);g=d.xe();c=RD(g==null?rtb(h.f,null,d):Ltb(h.i,g,d),142);!!c&&(g==null?rtb(h.f,null,c):Ltb(h.i,g,c))}a.tb=h}return RD(Xjb(a.tb,b),142)} +function wYd(a,b){var c,d,e,f,g;(a.i==null&&rYd(a),a.i).length;if(!a.p){g=new Usb((3*a.g.i/2|0)+1);for(e=new yMd(a.g);e.e!=e.i.gc();){d=RD(xMd(e),179);f=d.xe();c=RD(f==null?rtb(g.f,null,d):Ltb(g.i,f,d),179);!!c&&(f==null?rtb(g.f,null,c):Ltb(g.i,f,c))}a.p=g}return RD(Xjb(a.p,b),179)} +function fFb(a,b,c,d,e){var f,g,h,i,j;dFb(d+lz(c,c.ie()),e);eFb(b,hFb(c));f=c.f;!!f&&fFb(a,b,f,'Caused by: ',false);for(h=(c.k==null&&(c.k=$C(rJ,Nve,82,0,0,1)),c.k),i=0,j=h.length;i<j;++i){g=h[i];fFb(a,b,g,'Suppressed: ',false)}console.groupEnd!=null&&console.groupEnd.call(console)} +function DKc(a,b,c,d){var e,f,g,h,i;i=b.e;h=i.length;g=b.q.ug(i,c?0:h-1,c);e=i[c?0:h-1];g=g|CKc(a,e,c,d);for(f=c?1:h-2;c?f<h:f>=0;f+=c?1:-1){g=g|b.c.lg(i,f,c,d&&!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,(Ywc(),Owc)))));g=g|b.q.ug(i,f,c);g=g|CKc(a,i[f],c,d)}Ysb(a.c,b);return g} +function F6b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=u2b(a.j),l=0,m=k.length;l<m;++l){j=k[l];if(c==(BEc(),yEc)||c==AEc){i=s2b(j.g);for(e=i,f=0,g=e.length;f<g;++f){d=e[f];B6b(b,d)&&X0b(d,true)}}if(c==zEc||c==AEc){h=s2b(j.e);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];A6b(b,d)&&X0b(d,true)}}}} +function uqc(a){var b,c;b=null;c=null;switch(pqc(a).g){case 1:b=(qpd(),Xod);c=ppd;break;case 2:b=(qpd(),npd);c=Yod;break;case 3:b=(qpd(),ppd);c=Xod;break;case 4:b=(qpd(),Yod);c=npd;}Smc(a,RD(Lvb(KDb(RD(Qc(a.k,b),15).Oc(),lqc)),113));Tmc(a,RD(Lvb(JDb(RD(Qc(a.k,c),15).Oc(),lqc)),113))} +function r9b(a){var b,c,d,e,f,g;e=RD(Vmb(a.j,0),12);if(e.e.c.length+e.g.c.length==0){a.n.a=0}else{g=0;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(e),new _3b(e)])));gs(d);){c=RD(hs(d),12);g+=c.i.n.a+c.n.a+c.a.a}b=RD(mQb(a,(yCc(),zBc)),8);f=!b?0:b.a;a.n.a=g/(e.e.c.length+e.g.c.length)-f}} +function Qdd(a,b){var c,d,e;for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),225);RQb(RD(c.b,68),ojd(ajd(RD(b.b,68).c),RD(b.b,68).a));e=oRb(RD(b.b,68).b,RD(c.b,68).b);e>1&&(a.a=true);QQb(RD(c.b,68),$id(ajd(RD(b.b,68).c),ijd(ojd(ajd(RD(c.b,68).a),RD(b.b,68).a),e)));Odd(a,b);Qdd(a,c)}} +function tYb(a){var b,c,d,e,f,g,h;for(f=new Anb(a.a.a);f.a<f.c.c.length;){d=RD(ynb(f),194);d.e=0;d.d.a.$b()}for(e=new Anb(a.a.a);e.a<e.c.c.length;){d=RD(ynb(e),194);for(c=d.a.a.ec().Kc();c.Ob();){b=RD(c.Pb(),86);for(h=b.f.Kc();h.Ob();){g=RD(h.Pb(),86);if(g.d!=d){Ysb(d.d,g);++g.d.e}}}}} +function Hfc(a){var b,c,d,e,f,g,h,i;i=a.j.c.length;c=0;b=i;e=2*i;for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);switch(g.j.g){case 2:case 4:g.p=-1;break;case 1:case 3:d=g.e.c.length;f=g.g.c.length;d>0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}yob();_mb(a.j,new Lfc)} +function zic(a){var b,c;c=null;b=RD(Vmb(a.g,0),18);do{c=b.d.i;if(nQb(c,(Ywc(),wwc))){return RD(mQb(c,wwc),12).i}if(c.k!=(r3b(),p3b)&&gs(new is(Mr(a3b(c).a.Kc(),new ir)))){b=RD(hs(new is(Mr(a3b(c).a.Kc(),new ir))),18)}else if(c.k!=p3b){return null}}while(!!c&&c.k!=(r3b(),p3b));return c} +function sqc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=RD(Vmb(h,h.c.length-1),113);k=(tFb(0,h.c.length),RD(h.c[0],113));j=oqc(a,g,i,k);for(f=1;f<h.c.length;f++){c=(tFb(f-1,h.c.length),RD(h.c[f-1],113));e=(tFb(f,h.c.length),RD(h.c[f],113));d=oqc(a,g,c,e);if(d>j){i=c;k=e;j=d}}b.a=k;b.c=i} +function fMc(a,b,c){var d,e,f,g,h,i,j;j=new yAb(new TMc(a));for(g=cD(WC(xR,1),XAe,12,0,[b,c]),h=0,i=g.length;h<i;++h){f=g[h];j.a.zc(f,(Geb(),Eeb))==null;for(e=new l4b(f.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);d.c==d.d||rAb(j,f==d.c?d.d:d.c)}}return Qb(j),new dnb(j)} +function rIb(a){if(!a.a.d||!a.a.e){throw Adb(new dgb((lfb(zN),zN.k+' must have a source and target '+(lfb(DN),DN.k)+' specified.')))}if(a.a.d==a.a.e){throw Adb(new dgb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}EIb(a.a.d.g,a.a);EIb(a.a.e.b,a.a);return a.a} +function x6b(a,b){var c,d,e,f,g,h,i;b.Ug('Constraints Postprocessor',1);g=0;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i=0;h=false;for(d=new Anb(e.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(c.k==(r3b(),p3b)){h=true;pQb(c,(yCc(),VAc),sgb(g));pQb(c,mAc,sgb(i));++i}}h&&++g}b.Vg()} +function OTc(a,b,c){var d,e,f,g,h,i;d=0;if(b.b!=0&&c.b!=0){f=Sub(b,0);g=Sub(c,0);h=Kfb(UD(evb(f)));i=Kfb(UD(evb(g)));e=true;do{if(h>i-a.b&&h<i+a.b){return -1}else h>i-a.a&&h<i+a.a&&++d;h<=i&&f.b!=f.d.c?(h=Kfb(UD(evb(f)))):i<=h&&g.b!=g.d.c?(i=Kfb(UD(evb(g)))):(e=false)}while(e)}return d} +function G2c(a,b){var c,d;Sed(a.a);Ved(a.a,(x2c(),v2c),v2c);Ved(a.a,w2c,w2c);d=new ufd;pfd(d,w2c,(g3c(),e3c));dE(Gxd(b,($4c(),I4c)))!==dE((g4c(),d4c))&&pfd(d,w2c,b3c);Heb(TD(Gxd(b,T4c)))&&pfd(d,w2c,f3c);pfd(d,w2c,c3c);Heb(TD(Gxd(b,V4c)))&&nfd(d,w2c,d3c);Ped(a.a,d);c=Qed(a.a,b);return c} +function W6b(a,b,c,d,e){var f,g,h,i;i=(f=RD(mfb(E3),9),new Fsb(f,RD(WEb(f,f.length),9),0));for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);if(b[g.p]){X6b(g,b[g.p],d);zsb(i,g.j)}}if(e){_6b(a,b,(qpd(),Xod),2*c,d);_6b(a,b,ppd,2*c,d)}else{_6b(a,b,(qpd(),Yod),2*c,d);_6b(a,b,npd,2*c,d)}} +function eec(a){var b,c;for(c=new is(Mr(a3b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(b.d.i.k!=(r3b(),n3b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to LAST, but has at least one outgoing edge that "+' does not go to a LAST_SEPARATE node. That must not happen.'))}}} +function mHc(a,b,c){var d,e,f,g,h;c.Ug('Longest path layering',1);a.a=b;h=a.a.a;a.b=$C(kE,Pwe,28,h.c.length,15,1);d=0;for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),10);oHc(a,e)}h.c.length=0;a.a=null;a.b=null;c.Vg()} +function JUc(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=0;for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);h=0;for(f=new is(Mr(Z2b(j).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);l=K3b(e.c).b;m=K3b(e.d).b;h=$wnd.Math.max(h,$wnd.Math.abs(m-l))}i=$wnd.Math.max(i,h)}g=d*$wnd.Math.min(1,b/c)*i;return g} +function J_c(a,b){var c,d,e,f,g;g=RD(mQb(b,(h_c(),Y$c)),433);for(f=Sub(b.b,0);f.b!=f.d.c;){e=RD(evb(f),39);if(a.b[e.g]==0){switch(g.g){case 0:K_c(a,e);break;case 1:I_c(a,e);}a.b[e.g]=2}}for(d=Sub(a.a,0);d.b!=d.d.c;){c=RD(evb(d),65);ze(c.b.d,c,true);ze(c.c.b,c,true)}pQb(b,(q$c(),k$c),a.a)} +function pse(a){var b;b=new Rhb;(a&256)!=0&&(b.a+='F',b);(a&128)!=0&&(b.a+='H',b);(a&512)!=0&&(b.a+='X',b);(a&2)!=0&&(b.a+='i',b);(a&8)!=0&&(b.a+='m',b);(a&4)!=0&&(b.a+='s',b);(a&32)!=0&&(b.a+='u',b);(a&64)!=0&&(b.a+='w',b);(a&16)!=0&&(b.a+='x',b);(a&gwe)!=0&&(b.a+=',',b);return shb(b.a)} +function W8c(a,b){var c,d,e,f,g,h;b.Ug(bGe,1);e=RD(Gxd(a,(X7c(),N7c)),107);f=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);g=yad(f);h=$wnd.Math.max(g.a,Kfb(UD(Gxd(a,(X6c(),U6c))))-(e.b+e.c));d=$wnd.Math.max(g.b,Kfb(UD(Gxd(a,R6c)))-(e.d+e.a));c=d-g.b;Ixd(a,M6c,c);Ixd(a,O6c,h);Ixd(a,N6c,d+c);b.Vg()} +function pke(a,b){nke();var c,d,e,f;if(!b){return mke}else if(b==(nme(),kme)||(b==Ule||b==Sle||b==Tle)&&a!=Rle){return new wke(a,b)}else{d=RD(b,692);c=d.$k();if(!c){Afe(Qee((lke(),jke),b));c=d.$k()}f=(!c.i&&(c.i=new Tsb),c.i);e=RD(Wd(qtb(f.f,a)),2041);!e&&Zjb(f,a,e=new wke(a,b));return e}} +function jHb(a,b){var c,d;d=rAb(a.b,b.b);if(!d){throw Adb(new dgb('Invalid hitboxes for scanline constraint calculation.'))}(dHb(b.b,RD(tAb(a.b,b.b),60))||dHb(b.b,RD(sAb(a.b,b.b),60)))&&(gib(),String.fromCharCode(10));a.a[b.b.f]=RD(vAb(a.b,b.b),60);c=RD(uAb(a.b,b.b),60);!!c&&(a.a[c.f]=b.b)} +function lTb(a,b,c){var d,e,f,g,h,i,j,k,l;f=IGd(b,false,false);j=ssd(f);l=Kfb(UD(Gxd(b,(tSb(),mSb))));e=jTb(j,l+a.a);k=new ORb(e);kQb(k,b);Zjb(a.b,b,k);ZEb(c.c,k);i=(!b.n&&(b.n=new C5d(I4,b,1,7)),b.n);for(h=new dMd(i);h.e!=h.i.gc();){g=RD(bMd(h),135);d=nTb(a,g,true,0,0);ZEb(c.c,d)}return k} +function Zec(a,b){var c,d,e,f,g,h,i;e=new bnb;for(c=0;c<=a.j;c++){d=new R4b(b);d.p=a.j-c;ZEb(e.c,d)}for(h=new Anb(a.p);h.a<h.c.c.length;){g=RD(ynb(h),10);g3b(g,RD(Vmb(e,a.j-a.g[g.p]),30))}f=new Anb(e);while(f.a<f.c.c.length){i=RD(ynb(f),30);i.a.c.length==0&&znb(f)}b.b.c.length=0;Tmb(b.b,e)} +function xfc(a,b){var c,d,e,f,g,h,i,j,k;i=RD(mQb(a,(Ywc(),Awc)),12);j=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=s2b(a.e);for(e=c,f=0,g=e.length;f<g;++f){d=e[f];Z0b(d,i);Oub(d.a,new rjd(j,k));if(b){h=RD(mQb(d,(yCc(),RAc)),75);if(!h){h=new Ejd;pQb(d,RAc,h)}Mub(h,new rjd(j,k))}}} +function yfc(a,b){var c,d,e,f,g,h,i,j,k;e=RD(mQb(a,(Ywc(),Awc)),12);j=xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).a;k=a.i.n.b;c=s2b(a.g);for(g=c,h=0,i=g.length;h<i;++h){f=g[h];Y0b(f,e);Nub(f.a,new rjd(j,k));if(b){d=RD(mQb(f,(yCc(),RAc)),75);if(!d){d=new Ejd;pQb(f,RAc,d)}Mub(d,new rjd(j,k))}}} +function Khc(a){var b,c,d,e,f,g,h,i,j;d=a.b;f=d.e;g=Cod(RD(mQb(d,(yCc(),BBc)),101));c=!!f&&RD(mQb(f,(Ywc(),kwc)),21).Hc((ovc(),hvc));if(g||c){return}for(j=(h=(new glb(a.e)).a.vc().Kc(),new llb(h));j.a.Ob();){i=(b=RD(j.a.Pb(),44),RD(b.md(),113));if(i.a){e=i.d;P3b(e,null);i.c=true;a.a=true}}} +function iic(a,b){var c,d,e,f;b.Ug('Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);f=MDb(PDb(CDb(CDb(new SDb(null,new Swb(d.a,16)),new nic),new pic),new ric),new vic);c=c|f.a!=null}c&&pQb(a,(Ywc(),rwc),(Geb(),true));b.Vg()} +function rKc(a,b){var c,d,e,f,g,h;a.b=new bnb;a.d=RD(mQb(b,(Ywc(),Lwc)),234);a.e=Lwb(a.d);f=new Yub;e=dv(cD(WC(eR,1),OAe,36,0,[b]));g=0;while(g<e.c.length){d=(tFb(g,e.c.length),RD(e.c[g],36));d.p=g++;c=new FJc(d,a.a,a.b);Tmb(e,c.b);Rmb(a.b,c);c.s&&(h=Sub(f,0),cvb(h,c))}a.c=new _sb;return f} +function yMb(a,b){var c,d,e,f,g,h;for(g=RD(RD(Qc(a.r,b),21),87).Kc();g.Ob();){f=RD(g.Pb(),117);c=f.c?QKb(f.c):0;if(c>0){if(f.a){h=f.b.Mf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(Rod(a.u)){d=wsd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.Mf().a&&(f.d.c=d.c+d.b-f.b.Mf().a)}}} +function RUc(a,b){var c,d,e,f,g;g=new bnb;c=b;do{f=RD(Wjb(a.b,c),131);f.B=c.c;f.D=c.d;ZEb(g.c,f);c=RD(Wjb(a.k,c),18)}while(c);d=(tFb(0,g.c.length),RD(g.c[0],131));d.j=true;d.A=RD(d.d.a.ec().Kc().Pb(),18).c.i;e=RD(Vmb(g,g.c.length-1),131);e.q=true;e.C=RD(e.d.a.ec().Kc().Pb(),18).d.i;return g} +function pPb(a){var b,c;b=RD(a.a,17).a;c=RD(a.b,17).a;if(b>=0){if(b==c){return new Ptd(sgb(-b-1),sgb(-b-1))}if(b==-c){return new Ptd(sgb(-b),sgb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new Ptd(sgb(-b),sgb(c))}return new Ptd(sgb(-b),sgb(c+1))}return new Ptd(sgb(b+1),sgb(c))} +function H8b(a){var b,c;c=RD(mQb(a,(yCc(),UAc)),171);b=RD(mQb(a,(Ywc(),owc)),311);if(c==(cxc(),$wc)){pQb(a,UAc,bxc);pQb(a,owc,(Gvc(),Fvc))}else if(c==axc){pQb(a,UAc,bxc);pQb(a,owc,(Gvc(),Dvc))}else if(b==(Gvc(),Fvc)){pQb(a,UAc,$wc);pQb(a,owc,Evc)}else if(b==Dvc){pQb(a,UAc,axc);pQb(a,owc,Evc)}} +function dSc(){dSc=geb;bSc=new pSc;ZRc=pfd(new ufd,(sXb(),pXb),(hcc(),Fbc));aSc=nfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);cSc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);$Rc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);_Rc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} +function HUc(){HUc=geb;CUc=pfd(nfd(new ufd,(sXb(),rXb),(hcc(),tbc)),pXb,Fbc);GUc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);DUc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);FUc=pfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);EUc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} +function eSc(a,b,c,d,e){var f,g;if((!W0b(b)&&b.c.i.c==b.d.i.c||!djd(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])),c))&&!W0b(b)){b.c==e?hu(b.a,0,new sjd(c)):Mub(b.a,new sjd(c));if(d&&!Zsb(a.a,c)){g=RD(mQb(b,(yCc(),RAc)),75);if(!g){g=new Ejd;pQb(b,RAc,g)}f=new sjd(c);Pub(g,f,g.c.b,g.c);Ysb(a.a,f)}}} +function ht(a,b){var c,d,e,f;f=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));c=f&a.b.length-1;e=null;for(d=a.b[c];d;e=d,d=d.a){if(d.d==f&&Hb(d.i,b)){!e?(a.b[c]=d.a):(e.a=d.a);Ts(RD(Hvb(d.c),604),RD(Hvb(d.f),604));Ss(RD(Hvb(d.b),227),RD(Hvb(d.e),227));--a.f;++a.e;return true}}return false} +function dec(a){var b,c;for(c=new is(Mr(Z2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(b.c.i.k!=(r3b(),n3b)){throw Adb(new Jed(nBe+X2b(a)+"' 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 Twd(a,b,c){var d,e,f,g,h,i,j;e=ggb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=$C(jJ,rve,1,2,5,1);f=Xwd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=$C(jJ,rve,1,e+1,5,1);g=SD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} +function vQb(a,b,c){var d,e,f,g;this.b=new bnb;e=0;d=0;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),176);c&&iPb(f);Rmb(this.b,f);e+=f.o;d+=f.p}if(this.b.c.length>0){f=RD(Vmb(this.b,0),176);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=eE($wnd.Math.ceil(e*b))):(d=eE($wnd.Math.ceil(d/b)));this.a=new gQb(e,d)} +function mkc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=RD(Wjb(a.f,b.A),60);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=RD(Wjb(a.f,c.C),60);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m<l;++m){g=RD(f.Xb(m),131);r=g.a.b;g.a.c=o-r/2;o+=h}} +function Wrc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b?new dsc:new fsc;f=false;do{f=false;j=b?hv(a.b):a.b;for(i=j.Kc();i.Ob();){h=RD(i.Pb(),30);m=bv(h.a);b||hv(m);for(l=new Anb(m);l.a<l.c.c.length;){k=RD(ynb(l),10);if(e.Mb(k)){d=k;c=RD(mQb(k,(Ywc(),Wvc)),313);g=b?c.b:c.k;f=Urc(d,g,b,false)}}}}while(f)} +function sMc(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=$C(kE,Pwe,28,b.length,15,1));for(g=e?0:b.length-1;e?g<b.length:g>=0;g+=e?1:-1){h=b[g];i=d==(qpd(),Xod)?e?b3b(h,d):hv(b3b(h,d)):e?hv(b3b(h,d)):b3b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=RD(l.Pb(),12);a.d[k.p]=j++}Tmb(c,i)}} +function AUc(a,b,c){var d,e,f,g,h,i,j,k;f=Kfb(UD(a.b.Kc().Pb()));j=Kfb(UD(fr(b.b)));d=ijd(ajd(a.a),j-c);e=ijd(ajd(b.a),c-f);k=$id(d,e);ijd(k,1/(j-f));this.a=k;this.b=new bnb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Kfb(UD(g.Pb()));if(h&&i-c>AEe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} +function mJb(a){var b,c,d,e;pJb(a,a.n);if(a.d.c.length>0){Nnb(a.c);while(xJb(a,RD(ynb(new Anb(a.e.a)),125))<a.e.a.c.length){b=rJb(a);e=b.e.e-b.d.e-b.a;b.e.j&&(e=-e);for(d=new Anb(a.e.a);d.a<d.c.c.length;){c=RD(ynb(d),125);c.j&&(c.e+=e)}Nnb(a.c)}Nnb(a.c);uJb(a,RD(ynb(new Anb(a.e.a)),125));iJb(a)}} +function ned(a,b){hed();var c,d;c=ugd(ygd(),b.Pg());if(c){d=c.j;if(ZD(a,207)){return xCd(RD(a,27))?Csb(d,(Yhd(),Vhd))||Csb(d,Whd):Csb(d,(Yhd(),Vhd))}else if(ZD(a,326)){return Csb(d,(Yhd(),Thd))}else if(ZD(a,193)){return Csb(d,(Yhd(),Xhd))}else if(ZD(a,366)){return Csb(d,(Yhd(),Uhd))}}return true} +function Cge(a,b,c){var d,e,f,g,h,i;e=c;f=e.Lk();if(qke(a.e,f)){if(f.Si()){d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw Adb(new agb(LIe))}}}}else{i=pke(a.e.Dh(),f);d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(i.am(h.Lk())&&g!=b){throw Adb(new agb(gLe))}}}return RD(eHd(a,b,c),76)} +function hz(d,b){if(b instanceof Object){try{b.__java$exception=d;if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&$doc.documentMode<9){return}var c=d;Object.defineProperties(b,{cause:{get:function(){var a=c.he();return a&&a.fe()}},suppressed:{get:function(){return c.ge()}}})}catch(a){}}} +function tjb(a,b){var c,d,e,f,g;d=b>>5;b&=31;if(d>=a.d){return a.e<0?(Pib(),Jib):(Pib(),Oib)}f=a.d-d;e=$C(kE,Pwe,28,f+1,15,1);ujb(e,f,a.a,d,b);if(a.e<0){for(c=0;c<d&&a.a[c]==0;c++);if(c<d||b>0&&a.a[c]<<32-b!=0){for(c=0;c<f&&e[c]==-1;c++){e[c]=0}c==f&&++f;++e[c]}}g=new cjb(a.e,f,e);Rib(g);return g} +function LSb(a){var b,c,d,e;e=MCd(a);c=new bTb(e);d=new dTb(e);b=new bnb;Tmb(b,(!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));Tmb(b,(!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));return RD(zDb(GDb(CDb(new SDb(null,new Swb(b,16)),c),d),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21)} +function Tdc(a,b){var c;c=RD(mQb(a,(yCc(),xAc)),283);b.Ug('Label side selection ('+c+')',1);switch(c.g){case 0:Udc(a,(Pnd(),Lnd));break;case 1:Udc(a,(Pnd(),Mnd));break;case 2:Sdc(a,(Pnd(),Lnd));break;case 3:Sdc(a,(Pnd(),Mnd));break;case 4:Vdc(a,(Pnd(),Lnd));break;case 5:Vdc(a,(Pnd(),Mnd));}b.Vg()} +function qke(a,b){nke();var c,d,e;if(b.Jk()){return true}else if(b.Ik()==-2){if(b==(Lle(),Jle)||b==Gle||b==Hle||b==Ile){return true}else{e=a.Dh();if(BYd(e,b)>=0){return false}else{c=Eee((lke(),jke),e,b);if(!c){return true}else{d=c.Ik();return (d>1||d==-1)&&yfe(Qee(jke,c))!=3}}}}else{return false}} +function _4b(a,b,c,d){var e,f,g,h,i;h=AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84));i=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));if(vCd(h)==vCd(i)){return null}if(NGd(i,h)){return null}g=kzd(b);if(g==c){return d}else{f=RD(Wjb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} +function uHc(a,b,c){var d,e,f,g,h;c.Ug('Longest path to source layering',1);a.a=b;h=a.a.a;a.b=$C(kE,Pwe,28,h.c.length,15,1);d=0;for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),10);wHc(a,e)}h.c.length=0;a.a=null;a.b=null;c.Vg()} +function BKc(a,b,c){var d,e,f,g,h,i;d=pKc(c,a.length);g=a[d];f=qKc(c,g.length);if(g[f].k!=(r3b(),m3b)){return}i=b.j;for(e=0;e<i.c.length;e++){h=(tFb(e,i.c.length),RD(i.c[e],12));if((c?h.j==(qpd(),Xod):h.j==(qpd(),ppd))&&Heb(TD(mQb(h,(Ywc(),nwc))))){$mb(i,e,RD(mQb(g[f],(Ywc(),Awc)),12));f+=c?1:-1}}} +function n8c(a,b){var c,d,e,f,g,h,i,j;b.Ug('Greedy Width Approximator',1);c=Kfb(UD(Gxd(a,(X7c(),x7c))));i=RD(Gxd(a,N7c),107);f=RD(Gxd(a,U7c),394);g=Heb(TD(Gxd(a,T7c)));h=Kfb(UD(Gxd(a,Q7c)));j=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);Bad(j);e=new g8c(c,f,g);d=c8c(e,j,h,i);Ixd(a,(X6c(),W6c),d.c);b.Vg()} +function yKd(a){if(a.g==null){switch(a.p){case 0:a.g=qKd(a)?(Geb(),Feb):(Geb(),Eeb);break;case 1:a.g=$eb(rKd(a));break;case 2:a.g=hfb(sKd(a));break;case 3:a.g=tKd(a);break;case 4:a.g=new Tfb(uKd(a));break;case 6:a.g=Hgb(wKd(a));break;case 5:a.g=sgb(vKd(a));break;case 7:a.g=bhb(xKd(a));}}return a.g} +function HKd(a){if(a.n==null){switch(a.p){case 0:a.n=zKd(a)?(Geb(),Feb):(Geb(),Eeb);break;case 1:a.n=$eb(AKd(a));break;case 2:a.n=hfb(BKd(a));break;case 3:a.n=CKd(a);break;case 4:a.n=new Tfb(DKd(a));break;case 6:a.n=Hgb(FKd(a));break;case 5:a.n=sgb(EKd(a));break;case 7:a.n=bhb(GKd(a));}}return a.n} +function Pfe(a,b,c,d){var e,f,g,h,i;h=(nke(),RD(b,69).xk());if(qke(a.e,b)){if(b.Si()&&dge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){throw Adb(new agb(LIe))}}else{i=pke(a.e.Dh(),b);e=RD(a.g,124);for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){throw Adb(new agb(gLe))}}}VGd(a,gge(a,b,c),h?RD(d,76):oke(b,d))} +function HGb(a){var b,c,d,e,f,g,h;for(f=new Anb(a.a.a);f.a<f.c.c.length;){d=RD(ynb(f),316);d.g=0;d.i=0;d.e.a.$b()}for(e=new Anb(a.a.a);e.a<e.c.c.length;){d=RD(ynb(e),316);for(c=d.a.a.ec().Kc();c.Ob();){b=RD(c.Pb(),60);for(h=b.c.Kc();h.Ob();){g=RD(h.Pb(),60);if(g.a!=d){Ysb(d.e,g);++g.a.g;++g.a.i}}}}} +function X8b(a){var b,c,d,e,f;e=RD(mQb(a,(yCc(),lBc)),21);f=RD(mQb(a,oBc),21);c=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new sjd(c);if(e.Hc((Qpd(),Mpd))){d=RD(mQb(a,nBc),8);if(f.Hc((dqd(),Ypd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Y8b(a,c,b)} +function SYb(a,b){var c,d,e;b.a?(rAb(a.b,b.b),a.a[b.b.i]=RD(vAb(a.b,b.b),86),c=RD(uAb(a.b,b.b),86),!!c&&(a.a[c.i]=b.b),undefined):(d=RD(vAb(a.b,b.b),86),!!d&&d==a.a[b.b.i]&&!!d.d&&d.d!=b.b.d&&d.f.Fc(b.b),e=RD(uAb(a.b,b.b),86),!!e&&a.a[e.i]==b.b&&!!e.d&&e.d!=b.b.d&&b.b.f.Fc(e),wAb(a.b,b.b),undefined)} +function Oec(a,b){var c,d,e,f,g,h;f=a.d;h=Kfb(UD(mQb(a,(yCc(),FAc))));if(h<0){h=0;pQb(a,FAc,h)}b.o.b=h;g=$wnd.Math.floor(h/2);d=new R3b;Q3b(d,(qpd(),ppd));P3b(d,b);d.n.b=g;e=new R3b;Q3b(e,Xod);P3b(e,b);e.n.b=g;Z0b(a,d);c=new a1b;kQb(c,a);pQb(c,RAc,null);Y0b(c,e);Z0b(c,f);Nec(b,a,c);Lec(a,c);return c} +function URc(a){var b,c;c=RD(mQb(a,(Ywc(),kwc)),21);b=new ufd;if(c.Hc((ovc(),ivc))){ofd(b,ORc);ofd(b,QRc)}if(c.Hc(kvc)||Heb(TD(mQb(a,(yCc(),GAc))))){ofd(b,QRc);c.Hc(lvc)&&ofd(b,RRc)}c.Hc(hvc)&&ofd(b,NRc);c.Hc(nvc)&&ofd(b,SRc);c.Hc(jvc)&&ofd(b,PRc);c.Hc(evc)&&ofd(b,LRc);c.Hc(gvc)&&ofd(b,MRc);return b} +function Qjb(a,b){var c,d,e,f,g,h,i,j,k,l,m;d=a.d;f=b.d;h=d+f;i=a.e!=b.e?-1:1;if(h==2){k=Ndb(Cdb(a.a[0],yxe),Cdb(b.a[0],yxe));m=Ydb(k);l=Ydb(Udb(k,32));return l==0?new ajb(i,m):new cjb(i,2,cD(WC(kE,1),Pwe,28,15,[m,l]))}c=a.a;e=b.a;g=$C(kE,Pwe,28,h,15,1);Njb(c,d,e,f,g);j=new cjb(i,h,g);Rib(j);return j} +function Uyb(a,b,c,d){var e,f;if(!b){return c}else{e=a.a.Ne(c.d,b.d);if(e==0){d.d=qlb(b,c.e);d.b=true;return b}f=e<0?0:1;b.a[f]=Uyb(a,b.a[f],c,d);if(Vyb(b.a[f])){if(Vyb(b.a[1-f])){b.b=true;b.a[0].b=false;b.a[1].b=false}else{Vyb(b.a[f].a[f])?(b=azb(b,1-f)):Vyb(b.a[f].a[1-f])&&(b=_yb(b,1-f))}}}return b} +function nKb(a,b,c){var d,e,f,g;e=a.i;d=a.n;mKb(a,(ZJb(),WJb),e.c+d.b,c);mKb(a,YJb,e.c+e.b-d.c-c[2],c);g=e.b-d.b-d.c;if(c[0]>0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);mKb(a,XJb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==XJb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function D_b(){this.c=$C(iE,vxe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.b=$C(iE,vxe,28,cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]).length,15,1);this.a=$C(iE,vxe,28,cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]).length,15,1);Lnb(this.c,oxe);Lnb(this.b,pxe);Lnb(this.a,pxe)} +function rte(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=$C(kE,Pwe,28,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=$C(kE,Pwe,28,d+2,15,1);hib(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||vte(a)}} +function Oqc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new cnb(j.c.length);a.c=new Tsb;for(h=new Anb(j);h.a<h.c.c.length;){g=RD(ynb(h),105);f=new USc(null);Rmb(a.a,f);Zjb(a.c,g,f)}a.b=new Tsb;Mqc(a,b);for(d=0;d<j.c.length-1;d++){i=RD(Vmb(b.d,d),105);for(e=d+1;e<j.c.length;e++){Pqc(a,i,RD(Vmb(b.d,e),105),c)}}} +function Q2c(a){var b,c,d,e,f;e=new bnb;b=new btb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));for(d=new is(Mr(zGd(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(!ZD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),193)){f=AGd(RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84));b.a._b(f)||(ZEb(e.c,f),true)}}return e} +function Nqe(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=use(a.i));a.j=a.i.length;Mqe(a);f=Qqe(a);if(a.d!=a.j)throw Adb(new Lqe(TId((Hde(),TIe))));if(a.g){for(d=0;d<a.g.a.c.length;d++){e=RD(eyb(a.g,d),592);if(a.f<=e.a)throw Adb(new Lqe(TId((Hde(),UIe))))}a.g.a.c.length=0}return f} +function BNc(a,b){var c,d,e,f,g,h,i;c=pxe;h=(r3b(),p3b);for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=d.k;if(f!=p3b){g=UD(mQb(d,(Ywc(),Cwc)));if(g==null){c=$wnd.Math.max(c,0);d.n.b=c+aFc(a.a,f,h)}else{d.n.b=(uFb(g),g)}}i=aFc(a.a,f,h);d.n.b<c+i+d.d.d&&(d.n.b=c+i+d.d.d);c=d.n.b+d.o.b+d.d.a;h=f}} +function w3c(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.Gg(e);f=RD(e.Xb(0),27);if(u3c(a,c,f,false)){return true}g=RD(e.Xb(e.gc()-1),27);if(u3c(a,d,g,true)){return true}if(p3c(a,e)){return true}for(k=e.Kc();k.Ob();){j=RD(k.Pb(),27);for(i=b.Kc();i.Ob();){h=RD(i.Pb(),27);if(o3c(a,j,h)){return true}}}return false} +function Ovd(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.Ih(c),RD(j>=0?a.Lh(j,false,true):Qvd(a,c,false),61));n:for(f=l.Kc();f.Ob();){e=RD(f.Pb(),58);for(k=0;k<m;++k){g=(tFb(k,b.c.length),RD(b.c[k],76));i=g.md();h=g.Lk();d=e.Nh(h,false);if(i==null?d!=null:!pb(i,d)){continue n}}return e}return null} +function o6b(a,b){var c,d,e,f,g,h,i;b.Ug('Comment post-processing',1);for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);d=new bnb;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);i=RD(mQb(g,(Ywc(),Xwc)),15);c=RD(mQb(g,Vvc),15);if(!!i||!!c){p6b(g,i,c);!!i&&Tmb(d,i);!!c&&Tmb(d,c)}}Tmb(e.a,d)}b.Vg()} +function kac(a,b,c,d){var e,f,g,h;e=RD(e3b(b,(qpd(),ppd)).Kc().Pb(),12);f=RD(e3b(b,Xod).Kc().Pb(),12);for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);while(g.e.c.length!=0){Z0b(RD(Vmb(g.e,0),18),e)}while(g.g.c.length!=0){Y0b(RD(Vmb(g.g,0),18),f)}}c||pQb(b,(Ywc(),vwc),null);d||pQb(b,(Ywc(),wwc),null)} +function IGd(a,b,c){var d,e;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){return EGd(a)}else{d=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);if(b){sLd((!d.a&&(d.a=new XZd(D4,d,5)),d.a));Ozd(d,0);Pzd(d,0);Hzd(d,0);Izd(d,0)}if(c){e=(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a);while(e.i>1){vLd(e,e.i-1)}}return d}} +function Vdc(a,b){var c,d,e,f,g,h,i;c=new wmb;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i=true;d=0;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);switch(g.k.g){case 4:++d;case 1:imb(c,g);break;case 0:Xdc(g,b);default:c.b==c.c||Wdc(c,d,i,false,b);i=false;d=0;}}c.b==c.c||Wdc(c,d,i,true,b)}} +function iMc(a,b){var c,d,e,f,g,h;c=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),12);$Lc(a.b,a.d[g.p]);for(e=new l4b(g.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);f=AMc(a,g==d.c?d.d:d.c);if(f>a.d[g.p]){c+=ZLc(a.b,f);hmb(a.a,sgb(f))}}while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} +function Uec(a){var b,c,d,e,f,g,h,i,j;a.a=new e6b;j=0;e=0;for(d=new Anb(a.i.b);d.a<d.c.c.length;){b=RD(ynb(d),30);b.p=e;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j;++j}++e}f=a.r==(aEc(),TDc);g=f?Qec:Pec;for(c=new Anb(a.i.b);c.a<c.c.c.length;){b=RD(ynb(c),30);_mb(b.a,g);d6b(a.a,sgb(b.p),b.a)}} +function zed(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);(!d.a&&(d.a=new C5d(J4,d,10,11)),d.a).i==0||(f+=zed(a,d,false))}if(c){g=vCd(b);while(g){f+=(!g.a&&(g.a=new C5d(J4,g,10,11)),g.a).i;g=vCd(g)}}return f} +function vLd(a,b){var c,d,e,f;if(a.Pj()){d=null;e=a.Qj();a.Tj()&&(d=a.Vj(a.$i(b),null));c=a.Ij(4,f=THd(a,b),null,b,e);if(a.Mj()&&f!=null){d=a.Oj(f,d);if(!d){a.Jj(c)}else{d.nj(c);d.oj()}}else{if(!d){a.Jj(c)}else{d.nj(c);d.oj()}}return f}else{f=THd(a,b);if(a.Mj()&&f!=null){d=a.Oj(f,null);!!d&&d.oj()}return f}} +function LNb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new _sb;i=0;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),226);k=0;tvb(c.b,new ONb);for(g=Sub(c.b,0);g.b!=g.d.c;){f=RD(evb(g),226);if(b.a._b(f)){e=c.c;h=f.c;k<h.d+h.a+j&&k+e.a+j>h.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} +function ovc(){ovc=geb;fvc=new pvc('COMMENTS',0);hvc=new pvc('EXTERNAL_PORTS',1);ivc=new pvc('HYPEREDGES',2);jvc=new pvc('HYPERNODES',3);kvc=new pvc('NON_FREE_PORTS',4);lvc=new pvc('NORTH_SOUTH_PORTS',5);nvc=new pvc(FBe,6);evc=new pvc('CENTER_LABELS',7);gvc=new pvc('END_LABELS',8);mvc=new pvc('PARTITIONS',9)} +function PA(a,b,c,d,e){if(d<0){d=EA(a,e,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe]),b);d<0&&(d=EA(a,e,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function RA(a,b,c,d,e){if(d<0){d=EA(a,e,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe]),b);d<0&&(d=EA(a,e,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function TA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=ihb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=HA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new uB;j=i.q.getFullYear()-Owe+Owe-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d<g?100:0)}f.p=d;return true} +function V4b(a,b){var c,d,e,f,g;if(!vCd(a)){return}g=RD(mQb(b,(yCc(),lBc)),181);dE(Gxd(a,BBc))===dE((Bod(),Aod))&&Ixd(a,BBc,zod);d=(lud(),new zud(vCd(a)));f=new Fud(!vCd(a)?null:new zud(vCd(a)),a);e=GJb(d,f,false,true);zsb(g,(Qpd(),Mpd));c=RD(mQb(b,nBc),8);c.a=$wnd.Math.max(e.a,c.a);c.b=$wnd.Math.max(e.b,c.b)} +function cec(a,b,c){var d,e,f,g,h,i;for(g=RD(mQb(a,(Ywc(),lwc)),15).Kc();g.Ob();){f=RD(g.Pb(),10);switch(RD(mQb(f,(yCc(),UAc)),171).g){case 2:g3b(f,b);break;case 4:g3b(f,c);}for(e=new is(Mr(W2b(f).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(!!d.c&&!!d.d){continue}h=!d.d;i=RD(mQb(d,Ewc),12);h?Z0b(d,i):Y0b(d,i)}}} +function epc(){epc=geb;Zoc=new fpc(_ye,0,(qpd(),Yod),Yod);apc=new fpc(bze,1,npd,npd);Yoc=new fpc(aze,2,Xod,Xod);dpc=new fpc(cze,3,ppd,ppd);_oc=new fpc('NORTH_WEST_CORNER',4,ppd,Yod);$oc=new fpc('NORTH_EAST_CORNER',5,Yod,Xod);cpc=new fpc('SOUTH_WEST_CORNER',6,npd,ppd);bpc=new fpc('SOUTH_EAST_CORNER',7,Xod,npd)} +function P2c(a){var b,c,d,e,f,g;f=new _sb;b=new btb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));for(e=new is(Mr(zGd(a).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);if(!ZD(QHd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),0),193)){g=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} +function tid(){tid=geb;sid=cD(WC(lE,1),rxe,28,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]);$wnd.Math.pow(2,-65)} +function Ljb(){Ljb=geb;var a,b;Jjb=$C(uJ,Nve,92,32,0,1);Kjb=$C(uJ,Nve,92,32,0,1);a=1;for(b=0;b<=18;b++){Jjb[b]=(Pib(),Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a))));Kjb[b]=Jdb(Sdb(a,b),0)?jjb(Sdb(a,b)):Xib(jjb(Odb(Sdb(a,b))));a=Ndb(a,5)}for(;b<Kjb.length;b++){Jjb[b]=Wib(Jjb[b-1],Jjb[1]);Kjb[b]=Wib(Kjb[b-1],(Pib(),Mib))}} +function tgc(a,b){var c,d,e,f,g;if(a.c.length==0){return new Ptd(sgb(0),sgb(0))}c=(tFb(0,a.c.length),RD(a.c[0],12)).j;g=0;f=b.g;d=b.g+1;while(g<a.c.length-1&&c.g<f){++g;c=(tFb(g,a.c.length),RD(a.c[g],12)).j}e=g;while(e<a.c.length-1&&c.g<d){++e;c=(tFb(g,a.c.length),RD(a.c[g],12)).j}return new Ptd(sgb(g),sgb(e))} +function NJc(a,b,c,d){var e,f,g,h,i,j,k;i=b3b(b,c);(c==(qpd(),npd)||c==ppd)&&(i=hv(i));g=false;do{e=false;for(f=0;f<i.gc()-1;f++){j=RD(i.Xb(f),12);h=RD(i.Xb(f+1),12);if(OJc(a,j,h,d)){g=true;CMc(a.a,RD(i.Xb(f),12),RD(i.Xb(f+1),12));k=RD(i.Xb(f+1),12);i.hd(f+1,RD(i.Xb(f),12));i.hd(f,k);e=true}}}while(e);return g} +function lZc(a,b,c){var d,e,f,g;c.Ug(MEe,1);e=RD(zDb(CDb(new SDb(null,new Swb(b.b,16)),new pZc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);mZc(a,e,0);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);d=Wjb(a.a,sgb(f.g))!=null?RD(Wjb(a.a,sgb(f.g)),17).a:0;pQb(f,(h_c(),f_c),sgb(d))}c.Vg()} +function o3c(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g;g=c.g+a.g;d=b.f+a.g;e=c.f+a.g;if(h<i+g&&i<h&&j<k+e&&k<j){return true}else if(i<h+f&&h<i&&k<j+d&&j<k){return true}else if(h<i+g&&i<h&&j<k&&k<j+d){return true}else if(i<h+f&&h<i&&j<k+e&&k<j){return true}return false} +function gdc(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=b.c.length;g=(tFb(c,b.c.length),RD(b.c[c],292));h=g.a.o.a;l=g.c;m=0;for(j=g.c;j<=g.f;j++){if(h<=a.a[j]){return j}k=a.a[j];i=null;for(e=c+1;e<f;e++){d=(tFb(e,b.c.length),RD(b.c[e],292));d.c<=j&&d.f>=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} +function SNb(a){var b,c,d,e,f,g,h;f=new yAb(RD(Qb(new eOb),50));h=pxe;for(c=new Anb(a.d);c.a<c.c.c.length;){b=RD(ynb(c),226);h=b.c.c;while(f.a.gc()!=0){g=RD(f.a.Tc(),226);if(g.c.c+g.c.b<h){f.a.Bc(g)!=null}else{break}}for(e=f.a.ec().Kc();e.Ob();){d=RD(e.Pb(),226);Mub(d.b,b);Mub(b.b,d)}f.a.zc(b,(Geb(),Eeb))==null}} +function sZc(a,b,c){var d,e,f,g,h;if(!gr(b)){h=c.eh((ZD(b,16)?RD(b,16).gc():Kr(b.Kc()))/a.a|0);h.Ug(OEe,1);g=new vZc;f=null;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),39);g=Al(cD(WC(cJ,1),rve,20,0,[g,new dXc(d)]));if(f){pQb(f,(q$c(),l$c),d);pQb(d,b$c,f);if(_Wc(d)==_Wc(f)){pQb(f,m$c,d);pQb(d,c$c,f)}}f=d}h.Vg();sZc(a,g,c)}} +function z1d(a,b){var c,d,e;if(b==null){for(d=(!a.a&&(a.a=new C5d(l7,a,9,5)),new dMd(a.a));d.e!=d.i.gc();){c=RD(bMd(d),694);e=c.c;if((e==null?c.zb:e)==null){return c}}}else{for(d=(!a.a&&(a.a=new C5d(l7,a,9,5)),new dMd(a.a));d.e!=d.i.gc();){c=RD(bMd(d),694);if(lhb(b,(e=c.c,e==null?c.zb:e))){return c}}}return null} +function BLb(a,b){var c;c=null;switch(b.g){case 1:a.e.pf((umd(),Cld))&&(c=RD(a.e.of(Cld),256));break;case 3:a.e.pf((umd(),Dld))&&(c=RD(a.e.of(Dld),256));break;case 2:a.e.pf((umd(),Bld))&&(c=RD(a.e.of(Bld),256));break;case 4:a.e.pf((umd(),Eld))&&(c=RD(a.e.of(Eld),256));}!c&&(c=RD(a.e.of((umd(),zld)),256));return c} +function $5c(a,b,c){var d,e,f,g,h,i;e=c;f=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);Ixd(g,($4c(),P4c),sgb(e++));i=Q2c(g);d=$wnd.Math.atan2(g.j+g.f/2,g.i+g.g/2);d+=d<0?dFe:0;d<0.7853981633974483||d>FFe?_mb(i,a.b):d<=FFe&&d>GFe?_mb(i,a.d):d<=GFe&&d>HFe?_mb(i,a.c):d<=HFe&&_mb(i,a.a);f=$5c(a,i,f)}return e} +function sTc(a,b,c,d){var e,f,g,h,i,j;e=(d.c+d.a)/2;Xub(b.j);Mub(b.j,e);Xub(c.e);Mub(c.e,e);j=new ATc;for(h=new Anb(a.f);h.a<h.c.c.length;){f=RD(ynb(h),132);i=f.a;uTc(j,b,i);uTc(j,c,i)}for(g=new Anb(a.k);g.a<g.c.c.length;){f=RD(ynb(g),132);i=f.b;uTc(j,b,i);uTc(j,c,i)}j.b+=2;j.a+=nTc(b,a.q);j.a+=nTc(a.q,c);return j} +function U_c(a,b,c){var d;c.Ug('Processor arrange node',1);Heb(TD(mQb(b,(h_c(),G$c))));d=RD(Lvb(DDb(CDb(new SDb(null,new Swb(b.b,16)),new c0c))),39);a.a=RD(mQb(b,g_c),353);a.a==(s_c(),q_c)||a.a==p_c?T_c(a,new mob(cD(WC(Z$,1),NEe,39,0,[d])),c.eh(1)):a.a==o_c&&S_c(a,new mob(cD(WC(Z$,1),NEe,39,0,[d])),c.eh(1));c.Vg()} +function X7c(){X7c=geb;x7c=new mGd((umd(),Dkd),1.3);G7c=new mGd(mld,(Geb(),false));O7c=new A3b(15);N7c=new mGd(tld,O7c);Q7c=new mGd(fmd,15);y7c=Kkd;F7c=kld;H7c=nld;I7c=pld;E7c=ild;J7c=sld;P7c=Lld;U7c=(u7c(),p7c);T7c=o7c;W7c=t7c;V7c=r7c;M7c=k7c;L7c=j7c;K7c=i7c;S7c=n7c;B7c=ald;C7c=bld;A7c=g7c;z7c=f7c;D7c=h7c;R7c=m7c} +function MKb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.d;a.f==(vLb(),tLb)?(h+=(c.a-a.e.b)/2):a.f==sLb&&(h+=c.a-a.e.b);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);g=d.Mf();f=new pjd;f.b=h;h+=g.b+a.a;switch(a.b.g){case 0:f.a=c.c+b.b;break;case 1:f.a=c.c+b.b+(c.b-g.a)/2;break;case 2:f.a=c.c+c.b-b.c-g.a;}d.Of(f)}} +function OKb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.c;a.b==(EKb(),BKb)?(h+=(c.b-a.e.a)/2):a.b==DKb&&(h+=c.b-a.e.a);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);g=d.Mf();f=new pjd;f.a=h;h+=g.a+a.a;switch(a.f.g){case 0:f.b=c.d+b.d;break;case 1:f.b=c.d+b.d+(c.a-g.b)/2;break;case 2:f.b=c.d+c.a-b.a-g.b;}d.Of(f)}} +function U7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=RD(Wjb(c.c,b),467);n=f.f;o=f.a;i=new rjd(k,n);l=new rjd(g,o);e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new rjd(e,n);m=new rjd(e,o);zjd(b.a,cD(WC(l3,1),Nve,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new rjd(e,c.b);Mub(b.a,d)}zjd(b.a,cD(WC(l3,1),Nve,8,0,[m,l]))} +function TGc(a,b,c){var d,e;if(b<a.d.b.c.length){a.b=RD(Vmb(a.d.b,b),30);a.a=RD(Vmb(a.d.b,b-1),30);a.c=b}else{a.a=new R4b(a.d);a.a.p=b-1;Rmb(a.d.b,a.a);a.b=new R4b(a.d);a.b.p=b;Rmb(a.d.b,a.b);a.c=b}g3b(c,a.b);for(e=new is(Mr(Z2b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);!d.c.i.c&&d.c.i.k==(r3b(),n3b)&&g3b(d.c.i,a.a)}} +function Gpd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,qHe),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Jpd)));Agd(a,qHe,Eze,Cpd);Agd(a,qHe,_ze,15);Agd(a,qHe,bAe,sgb(0));Agd(a,qHe,Dze,Yze)} +function Gqe(){Gqe=geb;var a,b,c,d,e,f;Eqe=$C(gE,YHe,28,255,15,1);Fqe=$C(hE,zwe,28,16,15,1);for(b=0;b<255;b++){Eqe[b]=-1}for(c=57;c>=48;c--){Eqe[c]=c-48<<24>>24}for(d=70;d>=65;d--){Eqe[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){Eqe[e]=e-97+10<<24>>24}for(f=0;f<10;f++)Fqe[f]=48+f&Bwe;for(a=10;a<=15;a++)Fqe[a]=65+a-10&Bwe} +function yYc(a,b){b.Ug('Process graph bounds',1);pQb(a,(q$c(),ZZc),Uvb(TCb(HDb(new SDb(null,new Swb(a.b,16)),new DYc))));pQb(a,_Zc,Uvb(TCb(HDb(new SDb(null,new Swb(a.b,16)),new FYc))));pQb(a,YZc,Uvb(SCb(HDb(new SDb(null,new Swb(a.b,16)),new HYc))));pQb(a,$Zc,Uvb(SCb(HDb(new SDb(null,new Swb(a.b,16)),new JYc))));b.Vg()} +function PWb(a){var b,c,d,e,f;e=RD(mQb(a,(yCc(),lBc)),21);f=RD(mQb(a,oBc),21);c=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new sjd(c);if(e.Hc((Qpd(),Mpd))){d=RD(mQb(a,nBc),8);if(f.Hc((dqd(),Ypd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Heb(TD(mQb(a,mBc)))||QWb(a,c,b)} +function lOc(a,b){var c,d,e,f;for(f=b3b(b,(qpd(),npd)).Kc();f.Ob();){d=RD(f.Pb(),12);c=RD(mQb(d,(Ywc(),Iwc)),10);!!c&&rIb(uIb(tIb(vIb(sIb(new wIb,0),0.1),a.i[b.p].d),a.i[c.p].a))}for(e=b3b(b,Yod).Kc();e.Ob();){d=RD(e.Pb(),12);c=RD(mQb(d,(Ywc(),Iwc)),10);!!c&&rIb(uIb(tIb(vIb(sIb(new wIb,0),0.1),a.i[c.p].d),a.i[b.p].a))}} +function oYd(a){var b,c,d,e,f,g;if(!a.c){g=new W$d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(tYd(a));d.e!=d.i.gc();){c=RD(bMd(d),89);e=i2d(c);ZD(e,90)&&YGd(g,oYd(RD(e,29)));WGd(g,c)}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}T$d(g);VHd(g);a.c=new N$d((RD(QHd(xYd((lTd(),kTd).o),15),19),g.i),g.g);yYd(a).b&=-33}return a.c} +function Dre(a){var b;if(a.c!=10)throw Adb(new Lqe(TId((Hde(),VIe))));b=a.a;switch(b){case 110:b=10;break;case 114:b=13;break;case 116:b=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 Adb(new Lqe(TId((Hde(),xJe))));}return b} +function GD(a){var b,c,d,e,f;if(a.l==0&&a.m==0&&a.h==0){return '0'}if(a.h==fxe&&a.m==0&&a.l==0){return '-9223372036854775808'}if(a.h>>19!=0){return '-'+GD(xD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=fD(ixe);c=iD(c,e,true);b=''+FD(eD);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function tkc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new Anb(a.d.b);e.a<e.c.c.length;){d=RD(ynb(e),30);d.p=c++;for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);!b&&!gr(W2b(f))&&(b=true)}}h=ysb((Cmd(),Amd),cD(WC(s3,1),jwe,88,0,[ymd,zmd]));if(!b){zsb(h,Bmd);zsb(h,xmd)}a.a=new dGb(h);akb(a.f);akb(a.b);akb(a.e);akb(a.g)} +function Ftb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function c_b(a,b,c){var d,e,f,g,h,i,j,k,l;d=c.c;e=c.d;h=K3b(b.c);i=K3b(b.d);if(d==b.c){h=d_b(a,h,e);i=e_b(b.d)}else{h=e_b(b.c);i=d_b(a,i,e)}j=new Fjd(b.a);Pub(j,h,j.a,j.a.a);Pub(j,i,j.c.b,j.c);g=b.c==d;l=new E_b;for(f=0;f<j.b-1;++f){k=new Ptd(RD(ju(j,f),8),RD(ju(j,f+1),8));g&&f==0||!g&&f==j.b-2?(l.b=k):Rmb(l.a,k)}return l} +function W1b(a,b){var c,d,e,f;f=a.j.g-b.j.g;if(f!=0){return f}c=RD(mQb(a,(yCc(),CBc)),17);d=RD(mQb(b,CBc),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(a.j.g){case 1:return Qfb(a.n.a,b.n.a);case 2:return Qfb(a.n.b,b.n.b);case 3:return Qfb(b.n.a,a.n.a);case 4:return Qfb(b.n.b,a.n.b);default:throw Adb(new dgb(UAe));}} +function X9b(a,b,c,d){var e,f,g,h,i;if(Kr((U9b(),new is(Mr(W2b(b).a.Kc(),new ir))))>=a.a){return -1}if(!W9b(b,c)){return -1}if(gr(RD(d.Kb(b),20))){return 1}e=0;for(g=RD(d.Kb(b),20).Kc();g.Ob();){f=RD(g.Pb(),18);i=f.c.i==b?f.d.i:f.c.i;h=X9b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} +function _Gd(a,b){var c,d,e,f,g,h;if(dE(b)===dE(a)){return true}if(!ZD(b,15)){return false}d=RD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.Yi()){for(c=0;c<h;++c){e=a.Vi(c);f=g.Pb();if(e==null?f!=null:!pb(e,f)){return false}}}else{for(c=0;c<h;++c){e=a.Vi(c);f=g.Pb();if(dE(e)!==dE(f)){return false}}}return true} +function RNd(a,b){var c,d,e,f,g,h;if(a.f>0){a._j();if(b!=null){for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=RD(c.g,379);h=c.i;for(g=0;g<h;++g){e=d[g];if(pb(b,e.md())){return true}}}}}else{for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=RD(c.g,379);h=c.i;for(g=0;g<h;++g){e=d[g];if(dE(b)===dE(e.md())){return true}}}}}}return false} +function see(a,b){var c,d,e;c=b.qi(a.a);if(c){e=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),'affiliation'));if(e!=null){d=thb(e,Fhb(35));return d==-1?Lee(a,Uee(a,BXd(b.qk())),e):d==0?Lee(a,null,(BFb(1,e.length+1),e.substr(1))):Lee(a,(AFb(0,d,e.length),e.substr(0,d)),(BFb(d+1,e.length+1),e.substr(d+1)))}}return null} +function v9b(a,b,c){var d,e,f,g;c.Ug('Orthogonally routing hierarchical port edges',1);a.a=0;d=y9b(b);B9b(b,d);A9b(a,b,d);w9b(b);e=RD(mQb(b,(yCc(),BBc)),101);f=b.b;u9b((tFb(0,f.c.length),RD(f.c[0],30)),e,b);u9b(RD(Vmb(f,f.c.length-1),30),e,b);g=b.b;s9b((tFb(0,g.c.length),RD(g.c[0],30)));s9b(RD(Vmb(g,g.c.length-1),30));c.Vg()} +function JAd(a){switch(a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{return a-48<<24>>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw Adb(new Vgb('Invalid hexadecimal'))}}} +function iIb(){iIb=geb;hIb=new jIb('SPIRAL',0);cIb=new jIb('LINE_BY_LINE',1);dIb=new jIb('MANHATTAN',2);bIb=new jIb('JITTER',3);fIb=new jIb('QUADRANTS_LINE_BY_LINE',4);gIb=new jIb('QUADRANTS_MANHATTAN',5);eIb=new jIb('QUADRANTS_JITTER',6);aIb=new jIb('COMBINE_LINE_BY_LINE_MANHATTAN',7);_Hb=new jIb('COMBINE_JITTER_MANHATTAN',8)} +function Urc(a,b,c,d){var e,f,g,h,i,j;i=Zrc(a,c);j=Zrc(b,c);e=false;while(!!i&&!!j){if(d||Xrc(i,j,c)){g=Zrc(i,c);h=Zrc(j,c);asc(b);asc(a);f=i.c;Hec(i,false);Hec(j,false);if(c){f3b(b,j.p,f);b.p=j.p;f3b(a,i.p+1,f);a.p=i.p}else{f3b(a,i.p,f);a.p=i.p;f3b(b,j.p+1,f);b.p=j.p}g3b(i,null);g3b(j,null);i=g;j=h;e=true}else{break}}return e} +function aDc(a){switch(a.g){case 0:return new XHc;case 1:return new pHc;case 3:return new GGc;case 4:return new gHc;case 5:return new jIc;case 6:return new IHc;case 2:return new xHc;case 7:return new pGc;case 8:return new YGc;default:throw Adb(new agb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function tIc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new Anb(d.j);h.a<h.c.c.length;){g=RD(ynb(h),12);dE(mQb(g,(Ywc(),Awc)))===dE(c)&&(g.g.c.length==0?g.e.c.length==0||(e=true):(f=true))}i=0;e&&e^f?(i=c.j==(qpd(),Yod)?-a.e[d.c.p][d.p]:b-a.e[d.c.p][d.p]):f&&e^f?(i=a.e[d.c.p][d.p]+1):e&&f&&(i=c.j==(qpd(),Yod)?0:b/2);return i} +function lSd(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=ohb(b.toLowerCase()));c!=null&&(i^=ohb(c));d!=null&&(i^=ohb(d));g!=null&&(i^=ohb(g));h!=null&&(i^=ohb(h));for(j=0,k=f.length;j<k;j++){i^=ohb(f[j])}a?(i|=256):(i&=-257);e?(i|=16):(i&=-17);this.f=i;this.i=b==null?null:(uFb(b),b);this.a=c;this.d=d;this.j=f;this.g=g;this.e=h} +function d3b(a,b,c){var d,e;e=null;switch(b.g){case 1:e=(J3b(),E3b);break;case 2:e=(J3b(),G3b);}d=null;switch(c.g){case 1:d=(J3b(),F3b);break;case 2:d=(J3b(),D3b);break;case 3:d=(J3b(),H3b);break;case 4:d=(J3b(),I3b);}return !!e&&!!d?dr(a.j,new Yb(new mob(cD(WC(pE,1),rve,178,0,[RD(Qb(e),178),RD(Qb(d),178)])))):(yob(),yob(),vob)} +function K8b(a){var b,c,d;b=RD(mQb(a,(yCc(),nBc)),8);pQb(a,nBc,new rjd(b.b,b.a));switch(RD(mQb(a,Rzc),255).g){case 1:pQb(a,Rzc,(Rjd(),Qjd));break;case 2:pQb(a,Rzc,(Rjd(),Mjd));break;case 3:pQb(a,Rzc,(Rjd(),Ojd));break;case 4:pQb(a,Rzc,(Rjd(),Pjd));}if((!a.q?(yob(),yob(),wob):a.q)._b(IBc)){c=RD(mQb(a,IBc),8);d=c.a;c.a=c.b;c.b=d}} +function Pmc(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw Adb(new veb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new DMc(d);rMc(this.e,this.c,(qpd(),ppd));this.i=new DMc(d);rMc(this.i,this.c,Xod);this.f=new Kmc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(r3b(),m3b);this.a&&Nmc(this,a,b.length)} +function $Mb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((dqd(),Wpd));g=a.B.Hc(Zpd);a.a=new wKb(g,f,a.c);!!a.n&&C2b(a.a.n,a.n);cLb(a.g,(ZJb(),XJb),a.a);if(!b){d=new dLb(1,f,a.c);d.n.a=a.k;Wrb(a.p,(qpd(),Yod),d);e=new dLb(1,f,a.c);e.n.d=a.k;Wrb(a.p,npd,e);h=new dLb(0,f,a.c);h.n.c=a.k;Wrb(a.p,ppd,h);c=new dLb(0,f,a.c);c.n.b=a.k;Wrb(a.p,Xod,c)}} +function zkc(a){var b,c,d;b=RD(mQb(a.d,(yCc(),yAc)),223);switch(b.g){case 2:c=rkc(a);break;case 3:c=(d=new bnb,FDb(CDb(GDb(EDb(EDb(new SDb(null,new Swb(a.d.b,16)),new wlc),new ylc),new Alc),new Kkc),new Clc(d)),d);break;default:throw Adb(new dgb('Compaction not supported for '+b+' edges.'));}ykc(a,c);xgb(new Xkb(a.g),new ilc(a))} +function qYc(a,b){var c,d,e,f,g,h,i;b.Ug('Process directions',1);c=RD(mQb(a,(h_c(),H$c)),88);if(c!=(Cmd(),xmd)){for(e=Sub(a.b,0);e.b!=e.d.c;){d=RD(evb(e),39);h=RD(mQb(d,(q$c(),o$c)),17).a;i=RD(mQb(d,p$c),17).a;switch(c.g){case 4:i*=-1;break;case 1:f=h;h=i;i=f;break;case 2:g=h;h=-i;i=g;}pQb(d,o$c,sgb(h));pQb(d,p$c,sgb(i))}}b.Vg()} +function led(a,b){var c;c=new qQb;!!b&&kQb(c,RD(Wjb(a.a,H4),96));ZD(b,422)&&kQb(c,RD(Wjb(a.a,L4),96));if(ZD(b,366)){kQb(c,RD(Wjb(a.a,I4),96));return c}ZD(b,84)&&kQb(c,RD(Wjb(a.a,E4),96));if(ZD(b,207)){kQb(c,RD(Wjb(a.a,J4),96));return c}if(ZD(b,193)){kQb(c,RD(Wjb(a.a,K4),96));return c}ZD(b,326)&&kQb(c,RD(Wjb(a.a,G4),96));return c} +function a_b(a){var b,c,d,e,f,g,h,i;i=new m_b;for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){continue}$$b(i,g,new pjd);for(f=new is(Mr(a3b(g).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(e.c.i.k==m3b||e.d.i.k==m3b){continue}for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);b=c;k_b(i,new eZb(b.a,b.b))}}}return i} +function Kcd(){Kcd=geb;Jcd=new jGd(iGe);Icd=(_cd(),$cd);Hcd=new lGd(nGe,Icd);Gcd=(ldd(),kdd);Fcd=new lGd(jGe,Gcd);Ecd=(Xbd(),Tbd);Dcd=new lGd(kGe,Ecd);zcd=new lGd(lGe,null);Ccd=(Mbd(),Kbd);Bcd=new lGd(mGe,Ccd);vcd=(sbd(),rbd);ucd=new lGd(oGe,vcd);wcd=new lGd(pGe,(Geb(),false));xcd=new lGd(qGe,sgb(64));ycd=new lGd(rGe,true);Acd=Lbd} +function eHc(a,b){var c,d,e,f,g,h,i,j,k,l;a.p=1;e=a.c;l=new Iub;for(k=c3b(a,(BEc(),zEc)).Kc();k.Ob();){j=RD(k.Pb(),12);for(d=new Anb(j.g);d.a<d.c.c.length;){c=RD(ynb(d),18);i=c.d.i;if(a!=i){f=i.c;if(f.p<=e.p){g=e.p+1;if(g==b.b.c.length){h=new R4b(b);h.p=g;Rmb(b.b,h);g3b(i,h)}else{h=RD(Vmb(b.b,g),30);g3b(i,h)}l.a.zc(i,l)}}}}return l} +function mXc(a,b){var c,d;c=RD(mQb(a,(q$c(),TZc)),15);if(!c||c.gc()<1){return null}else if(c.gc()==1){return RD(c.Xb(0),39)}d=null;switch(b.g){case 2:d=RD(Lvb(KDb(c.Oc(),new mYc)),39);break;case 1:d=RD(Lvb(JDb(c.Oc(),new KXc)),39);break;case 4:d=RD(Lvb(KDb(c.Oc(),new OXc)),39);break;case 3:d=RD(Lvb(JDb(c.Oc(),new SXc)),39);}return d} +function usc(a){var b,c,d,e,f,g;if(a.a!=null){return}a.a=$C(xdb,Hye,28,a.c.b.c.length,16,1);a.a[0]=false;if(nQb(a.c,(yCc(),wCc))){d=RD(mQb(a.c,wCc),15);for(c=d.Kc();c.Ob();){b=RD(c.Pb(),17).a;b>0&&b<a.a.length&&(a.a[b]=false)}}else{g=new Anb(a.c.b);g.a<g.c.c.length&&ynb(g);e=1;while(g.a<g.c.c.length){f=RD(ynb(g),30);a.a[e++]=xsc(f)}}} +function X6c(){X6c=geb;M6c=new jGd('additionalHeight');N6c=new jGd('drawingHeight');O6c=new jGd('drawingWidth');R6c=new jGd('minHeight');U6c=new jGd('minWidth');V6c=new jGd('rows');W6c=new jGd('targetWidth');T6c=new kGd('minRowIncrease',0);Q6c=new kGd('maxRowIncrease',0);S6c=new kGd('minRowDecrease',0);P6c=new kGd('maxRowDecrease',0)} +function r$d(a,b){var c,d,e,f;e=a.b;switch(b){case 1:{a.b|=1;a.b|=4;a.b|=8;break}case 2:{a.b|=2;a.b|=4;a.b|=8;break}case 4:{a.b|=1;a.b|=2;a.b|=4;a.b|=8;break}case 3:{a.b|=16;a.b|=8;break}case 0:{a.b|=32;a.b|=16;a.b|=8;a.b|=1;a.b|=2;a.b|=4;break}}if(a.b!=e&&!!a.c){for(d=new dMd(a.c);d.e!=d.i.gc();){f=RD(bMd(d),481);c=yYd(f);v$d(c,b)}}} +function CKc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;e=false;for(g=b,h=0,i=g.length;h<i;++h){f=g[h];Heb((Geb(),f.e?true:false))&&!RD(Vmb(a.b,f.e.p),219).s&&(e=e|(j=f.e,k=RD(Vmb(a.b,j.p),219),l=k.e,m=qKc(c,l.length),n=l[m][0],n.k==(r3b(),m3b)?(l[m]=AKc(f,l[m],c?(qpd(),ppd):(qpd(),Xod))):k.c.mg(l,c),o=DKc(a,k,c,d),BKc(k.e,k.o,c),o))}return e} +function Aed(a,b){var c,d,e,f,g;f=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);if(dE(Gxd(d,(umd(),Xkd)))!==dE((Fnd(),End))){g=RD(Gxd(b,Tld),143);c=RD(Gxd(d,Tld),143);(g==c||!!g&&Nfd(g,c))&&(!d.a&&(d.a=new C5d(J4,d,10,11)),d.a).i!=0&&(f+=Aed(a,d))}}return f} +function Toc(a){var b,c,d,e,f,g,h;d=0;h=0;for(g=new Anb(a.d);g.a<g.c.c.length;){f=RD(ynb(g),105);e=RD(zDb(CDb(new SDb(null,new Swb(f.j,16)),new Cpc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);c=null;if(d<=h){c=(qpd(),Yod);d+=e.gc()}else if(h<d){c=(qpd(),npd);h+=e.gc()}b=c;FDb(GDb(e.Oc(),new qpc),new spc(b))}} +function D6b(a){var b,c,d,e,f;f=new cnb(a.a.c.length);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),10);c=RD(mQb(d,(yCc(),UAc)),171);b=null;switch(c.g){case 1:case 2:b=(huc(),guc);break;case 3:case 4:b=(huc(),euc);}if(b){pQb(d,(Ywc(),bwc),(huc(),guc));b==euc?F6b(d,c,(BEc(),yEc)):b==guc&&F6b(d,c,(BEc(),zEc))}else{ZEb(f.c,d)}}return f} +function Snc(a){var b,c,d,e,f,g,h,i;a.b=new hj(new mob((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]))),new mob((joc(),cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc]))));for(g=cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]),h=0,i=g.length;h<i;++h){f=g[h];for(c=cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc]),d=0,e=c.length;d<e;++d){b=c[d];aj(a.b,f,b,new bnb)}}} +function BMb(a,b){var c,d,e,f,g,h,i,j,k,l;g=RD(RD(Qc(a.r,b),21),87);h=a.u.Hc((Pod(),Nod));c=a.u.Hc(Kod);d=a.u.Hc(Jod);j=a.u.Hc(Ood);l=a.B.Hc((dqd(),cqd));k=!c&&!d&&(j||g.gc()==2);yMb(a,b);e=null;i=null;if(h){f=g.Kc();e=RD(f.Pb(),117);i=e;while(f.Ob()){i=RD(f.Pb(),117)}e.d.b=0;i.d.c=0;k&&!e.a&&(e.d.c=0)}if(l){CMb(g);if(h){e.d.b=0;i.d.c=0}}} +function JNb(a,b){var c,d,e,f,g,h,i,j,k,l;g=RD(RD(Qc(a.r,b),21),87);h=a.u.Hc((Pod(),Nod));c=a.u.Hc(Kod);d=a.u.Hc(Jod);i=a.u.Hc(Ood);l=a.B.Hc((dqd(),cqd));j=!c&&!d&&(i||g.gc()==2);HNb(a,b);k=null;e=null;if(h){f=g.Kc();k=RD(f.Pb(),117);e=k;while(f.Ob()){e=RD(f.Pb(),117)}k.d.d=0;e.d.a=0;j&&!k.a&&(k.d.a=0)}if(l){KNb(g);if(h){k.d.d=0;e.d.a=0}}} +function ONc(a,b,c){var d,e,f,g,h,i,j,k;e=b.k;if(b.p>=0){return false}else{b.p=c.b;Rmb(c.e,b)}if(e==(r3b(),o3b)||e==q3b){for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(k=(d=new Anb((new _3b(f)).a.g),new c4b(d));xnb(k.a);){j=RD(ynb(k.a),18).d;h=j.i;i=h.k;if(b.c!=h.c){if(i==o3b||i==q3b){if(ONc(a,h,c)){return true}}}}}}return true} +function GWd(a){var b;if((a.Db&64)!=0)return cWd(a);b=new Shb(cWd(a));b.a+=' (changeable: ';Ohb(b,(a.Bb&gwe)!=0);b.a+=', volatile: ';Ohb(b,(a.Bb&cKe)!=0);b.a+=', transient: ';Ohb(b,(a.Bb&qxe)!=0);b.a+=', defaultValueLiteral: ';Nhb(b,a.j);b.a+=', unsettable: ';Ohb(b,(a.Bb&bKe)!=0);b.a+=', derived: ';Ohb(b,(a.Bb&Ove)!=0);b.a+=')';return b.a} +function tee(a,b){var c,d,e,f,g;e=b.qi(a.a);if(e){d=(!e.b&&(e.b=new SVd((JTd(),FTd),C8,e)),e.b);c=WD($Nd(d,DKe));if(c!=null){f=c.lastIndexOf('#');g=f==-1?Wee(a,b.jk(),c):f==0?Vee(a,null,(BFb(1,c.length+1),c.substr(1))):Vee(a,(AFb(0,f,c.length),c.substr(0,f)),(BFb(f+1,c.length+1),c.substr(f+1)));if(ZD(g,156)){return RD(g,156)}}}return null} +function xee(a,b){var c,d,e,f,g;d=b.qi(a.a);if(d){c=(!d.b&&(d.b=new SVd((JTd(),FTd),C8,d)),d.b);f=WD($Nd(c,$Ke));if(f!=null){e=f.lastIndexOf('#');g=e==-1?Wee(a,b.jk(),f):e==0?Vee(a,null,(BFb(1,f.length+1),f.substr(1))):Vee(a,(AFb(0,e,f.length),f.substr(0,e)),(BFb(e+1,f.length+1),f.substr(e+1)));if(ZD(g,156)){return RD(g,156)}}}return null} +function rRb(a){var b,c,d,e,f,g,h,i,j,k,l,m;e=XPb(a.d);g=RD(mQb(a.b,(tSb(),nSb)),107);h=g.b+g.c;i=g.d+g.a;k=e.d.a*a.e+h;j=e.b.a*a.f+i;RRb(a.b,new rjd(k,j));for(m=new Anb(a.g);m.a<m.c.c.length;){l=RD(ynb(m),568);b=l.g-e.a.a;c=l.i-e.c.a;d=$id(jjd(new rjd(b,c),l.a,l.b),ijd(njd(ajd(yRb(l.e)),l.d*l.a,l.c*l.b),-0.5));f=zRb(l.e);BRb(l.e,ojd(d,f))}} +function Xgc(a,b){var c,d,e,f,g,h,i,j,k,l,m;b.Ug('Restoring reversed edges',1);for(i=new Anb(a.b);i.a<i.c.c.length;){h=RD(ynb(i),30);for(k=new Anb(h.a);k.a<k.c.c.length;){j=RD(ynb(k),10);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);g=s2b(l.g);for(d=g,e=0,f=d.length;e<f;++e){c=d[e];Heb(TD(mQb(c,(Ywc(),Nwc))))&&X0b(c,false)}}}}b.Vg()} +function Zpc(a,b,c,d){var e,f,g,h,i;i=$C(iE,Nve,109,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,0,2);for(f=cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]),g=0,h=f.length;g<h;++g){e=f[g];i[e.g]=$C(iE,vxe,28,a.c[e.g],15,1)}_pc(i,a,Yod);_pc(i,a,npd);Ypc(i,a,Yod,b,c,d);Ypc(i,a,Xod,b,c,d);Ypc(i,a,npd,b,c,d);Ypc(i,a,ppd,b,c,d);return i} +function sLc(a,b,c){if(Ujb(a.a,b)){if(Zsb(RD(Wjb(a.a,b),49),c)){return 1}}else{Zjb(a.a,b,new _sb)}if(Ujb(a.a,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return -1}}else{Zjb(a.a,c,new _sb)}if(Ujb(a.b,b)){if(Zsb(RD(Wjb(a.b,b),49),c)){return -1}}else{Zjb(a.b,b,new _sb)}if(Ujb(a.b,c)){if(Zsb(RD(Wjb(a.b,c),49),b)){return 1}}else{Zjb(a.b,c,new _sb)}return 0} +function tMb(a){var b,c,d,e,f,g;if(a.q==(Bod(),xod)||a.q==wod){return}e=a.f.n.d+SJb(RD(Vrb(a.b,(qpd(),Yod)),127))+a.c;b=a.f.n.a+SJb(RD(Vrb(a.b,npd),127))+a.c;d=RD(Vrb(a.b,Xod),127);g=RD(Vrb(a.b,ppd),127);f=$wnd.Math.max(0,d.n.d-e);f=$wnd.Math.max(f,g.n.d-e);c=$wnd.Math.max(0,d.n.a-b);c=$wnd.Math.max(c,g.n.a-b);d.n.d=f;g.n.d=f;d.n.a=c;g.n.a=c} +function Xfe(a,b,c,d){var e,f,g,h,i,j;if(c==null){e=RD(a.g,124);for(h=0;h<a.i;++h){g=e[h];if(g.Lk()==b){return rLd(a,g,d)}}}f=(nke(),RD(b,69).xk()?RD(c,76):oke(b,c));if(Mvd(a.e)){j=!pge(a,b);d=qLd(a,f,d);i=b.Jk()?fge(a,3,b,null,c,kge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0),j):fge(a,1,b,b.ik(),c,-1,j);d?d.nj(i):(d=i)}else{d=qLd(a,f,d)}return d} +function xgd(){this.b=new gub;this.d=new gub;this.e=new gub;this.c=new gub;this.a=new Tsb;this.f=new Tsb;HId(l3,new Igd,new Kgd);HId(k3,new ehd,new ghd);HId(h3,new ihd,new khd);HId(i3,new mhd,new ohd);HId(l4,new qhd,new shd);HId(VJ,new Mgd,new Ogd);HId(PK,new Qgd,new Sgd);HId(BK,new Ugd,new Wgd);HId(MK,new Ygd,new $gd);HId(DL,new ahd,new chd)} +function hc(a,b){var c,d,e,f,g;a=a==null?vve:(uFb(a),a);for(e=0;e<b.length;e++){b[e]=ic(b[e])}c=new cib;g=0;d=0;while(d<b.length){f=a.indexOf('%s',g);if(f==-1){break}c.a+=''+zhb(a==null?vve:(uFb(a),a),g,f);Yhb(c,b[d++]);g=f+2}Xhb(c,a,g,a.length);if(d<b.length){c.a+=' [';Yhb(c,b[d++]);while(d<b.length){c.a+=pve;Yhb(c,b[d++])}c.a+=']'}return c.a} +function kMc(a,b){var c,d,e,f,g,h,i;c=0;for(i=new Anb(b);i.a<i.c.c.length;){h=RD(ynb(i),12);$Lc(a.b,a.d[h.p]);g=0;for(e=new l4b(h.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);if(uMc(d)){f=AMc(a,h==d.c?d.d:d.c);if(f>a.d[h.p]){c+=ZLc(a.b,f);hmb(a.a,sgb(f))}}else{++g}}c+=a.b.d*g;while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} +function pje(a){var b,c,d,e,f,g;f=0;b=WVd(a);!!b.kk()&&(f|=4);(a.Bb&bKe)!=0&&(f|=2);if(ZD(a,102)){c=RD(a,19);e=Z5d(c);(c.Bb&QHe)!=0&&(f|=32);if(e){AYd(uWd(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&QHe)!=0&&(f|=64)}(c.Bb&txe)!=0&&(f|=cKe);f|=gwe}else{if(ZD(b,468)){f|=512}else{d=b.kk();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function vke(a,b){var c;if(a.f==tke){c=yfe(Qee((lke(),jke),b));return a.e?c==4&&b!=(Lle(),Jle)&&b!=(Lle(),Gle)&&b!=(Lle(),Hle)&&b!=(Lle(),Ile):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(zfe(Qee((lke(),jke),b)))||a.d.Hc(Eee((lke(),jke),a.b,b)))){return true}if(a.f){if(Xee((lke(),a.f),Bfe(Qee(jke,b)))){c=yfe(Qee(jke,b));return a.e?c==4:c==2}}return false} +function oKc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;m=-1;n=0;for(j=a,k=0,l=j.length;k<l;++k){i=j[k];for(f=i,g=0,h=f.length;g<h;++g){e=f[g];b=new urc(m==-1?a[0]:a[m],RD(mQb(Y2b(e),(yCc(),cAc)),284),Bic(e),Heb(TD(mQb(Y2b(e),bAc))));for(c=0;c<e.j.c.length;c++){for(d=c+1;d<e.j.c.length;d++){prc(b,RD(Vmb(e.j,c),12),RD(Vmb(e.j,d),12))>0&&++n}}}++m}return n} +function S2c(a,b,c,d){var e,f,g,h,i,j,k,l;g=RD(Gxd(c,(umd(),Qld)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dFe);e+=b;e>dFe&&(e-=dFe);h=RD(Gxd(d,Qld),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dFe);f+=b;f>dFe&&(f-=dFe);return Zy(),bz(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:e<f?-1:e>f?1:cz(isNaN(e),isNaN(f))} +function PGb(a){var b,c,d,e,f,g,h;h=new Tsb;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);Zjb(h,b,new bnb)}for(e=new Anb(a.a.b);e.a<e.c.c.length;){b=RD(ynb(e),60);b.i=pxe;for(g=b.c.Kc();g.Ob();){f=RD(g.Pb(),60);RD(Wd(qtb(h.f,f)),15).Fc(b)}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b();b.c=RD(Wd(qtb(h.f,b)),15)}HGb(a)} +function AYb(a){var b,c,d,e,f,g,h;h=new Tsb;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),86);Zjb(h,b,new bnb)}for(e=new Anb(a.a.b);e.a<e.c.c.length;){b=RD(ynb(e),86);b.o=pxe;for(g=b.f.Kc();g.Ob();){f=RD(g.Pb(),86);RD(Wd(qtb(h.f,f)),15).Fc(b)}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.f.$b();b.f=RD(Wd(qtb(h.f,b)),15)}tYb(a)} +function WPb(a,b,c,d){var e,f;VPb(a,b,c,d);hQb(b,a.j-b.j+c);iQb(b,a.k-b.k+d);for(f=new Anb(b.f);f.a<f.c.c.length;){e=RD(ynb(f),334);switch(e.a.g){case 0:eQb(a,b.g+e.b.a,0,b.g+e.c.a,b.i-1);break;case 1:eQb(a,b.g+b.o,b.i+e.b.a,a.o-1,b.i+e.c.a);break;case 2:eQb(a,b.g+e.b.a,b.i+b.p,b.g+e.c.a,a.p-1);break;default:eQb(a,0,b.i+e.b.a,b.g-1,b.i+e.c.a);}}} +function $ec(a,b){var c,d,e,f,g,h,i,j;f=new bnb;b.b.c.length=0;c=RD(zDb(ODb(new SDb(null,new Swb(new Xkb(a.a.b),1))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(e=c.Kc();e.Ob();){d=RD(e.Pb(),17);g=_5b(a.a,d);if(g.b!=0){h=new R4b(b);ZEb(f.c,h);h.p=d.a;for(j=Sub(g,0);j.b!=j.d.c;){i=RD(evb(j),10);g3b(i,h)}}}Tmb(b.b,f)} +function TPb(b,c,d,e,f){var g,h,i;try{if(c>=b.o){throw Adb(new web)}i=c>>5;h=c&31;g=Sdb(1,Ydb(Sdb(h,1)));f?(b.n[d][i]=Rdb(b.n[d][i],g)):(b.n[d][i]=Cdb(b.n[d][i],Qdb(g)));g=Sdb(g,1);e?(b.n[d][i]=Rdb(b.n[d][i],g)):(b.n[d][i]=Cdb(b.n[d][i],Qdb(g)))}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function eMc(a,b,c,d){var e,f,g,h,i,j,k,l,m;m=new yAb(new PMc(a));for(h=cD(WC(jR,1),WAe,10,0,[b,c]),i=0,j=h.length;i<j;++i){g=h[i];for(l=aMc(g,d).Kc();l.Ob();){k=RD(l.Pb(),12);for(f=new l4b(k.b);xnb(f.a)||xnb(f.b);){e=RD(xnb(f.a)?ynb(f.a):ynb(f.b),18);if(!W0b(e)){m.a.zc(k,(Geb(),Eeb))==null;uMc(e)&&rAb(m,k==e.c?e.d:e.c)}}}}return Qb(m),new dnb(m)} +function w0c(a,b,c,d){var e,f,g;if(b){f=Kfb(UD(mQb(b,(q$c(),j$c))))+d;g=c+Kfb(UD(mQb(b,d$c)))/2;pQb(b,o$c,sgb(Ydb(Hdb($wnd.Math.round(f)))));pQb(b,p$c,sgb(Ydb(Hdb($wnd.Math.round(g)))));b.d.b==0||w0c(a,RD(Hr((e=Sub((new dXc(b)).a.d,0),new gXc(e))),39),c+Kfb(UD(mQb(b,d$c)))+a.b,d+Kfb(UD(mQb(b,g$c))));mQb(b,m$c)!=null&&w0c(a,RD(mQb(b,m$c),39),c,d)}} +function cdc(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Y2b(b.a);e=Kfb(UD(mQb(i,(yCc(),XBc))))*2;k=Kfb(UD(mQb(i,cCc)));j=$wnd.Math.max(e,k);f=$C(iE,vxe,28,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=RD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new Anb(b.e);m.a<m.c.c.length;){l=RD(ynb(m),10);d+=a.a[l.c.p]+j;f[c++]=d}return f} +function Xud(a,b){var c,d,e,f;f=RD(Gxd(a,(umd(),Old)),64).g-RD(Gxd(b,Old),64).g;if(f!=0){return f}c=RD(Gxd(a,Jld),17);d=RD(Gxd(b,Jld),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(RD(Gxd(a,Old),64).g){case 1:return Qfb(a.i,b.i);case 2:return Qfb(a.j,b.j);case 3:return Qfb(b.i,a.i);case 4:return Qfb(b.j,a.j);default:throw Adb(new dgb(UAe));}} +function zCd(a){var b,c,d;if((a.Db&64)!=0)return Fyd(a);b=new dib(GHe);c=a.k;if(!c){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!d||Zhb(Zhb((b.a+=' "',b),d),'"')}}else{Zhb(Zhb((b.a+=' "',b),c),'"')}Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function OCd(a){var b,c,d;if((a.Db&64)!=0)return Fyd(a);b=new dib(HHe);c=a.k;if(!c){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!d||Zhb(Zhb((b.a+=' "',b),d),'"')}}else{Zhb(Zhb((b.a+=' "',b),c),'"')}Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Xnc(a,b){var c,d,e,f,g;b==(TEc(),QEc)&&Eob(RD(Qc(a.a,(Bnc(),xnc)),15));for(e=RD(Qc(a.a,(Bnc(),xnc)),15).Kc();e.Ob();){d=RD(e.Pb(),105);c=RD(Vmb(d.j,0),113).d.j;f=new dnb(d.j);_mb(f,new Boc);switch(b.g){case 2:Pnc(a,f,c,(joc(),hoc),1);break;case 1:case 0:g=Rnc(f);Pnc(a,new Rkb(f,0,g),c,(joc(),hoc),0);Pnc(a,new Rkb(f,g,f.c.length),c,hoc,1);}}} +function sgd(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=RD(Xjb(a.a,b),143);if(!e){for(d=(h=(new glb(a.b)).a.vc().Kc(),new llb(h));d.a.Ob();){c=(f=RD(d.a.Pb(),44),RD(f.md(),143));g=c.c;i=b.length;if(lhb(g.substr(g.length-i,i),b)&&(b.length==g.length||ihb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&$jb(a.a,b,e)}return e} +function HOb(a,b){var c,d,e,f;c=new MOb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();if(e<f){return -1}if(e==f){return 0}return 1} +function I8b(a){var b,c,d;if(!nQb(a,(yCc(),dBc))){return}d=RD(mQb(a,dBc),21);if(d.dc()){return}c=(b=RD(mfb(A3),9),new Fsb(b,RD(WEb(b,b.length),9),0));d.Hc((dod(),$nd))?zsb(c,$nd):zsb(c,_nd);d.Hc(Ynd)||zsb(c,Ynd);d.Hc(Xnd)?zsb(c,cod):d.Hc(Wnd)?zsb(c,bod):d.Hc(Znd)&&zsb(c,aod);d.Hc(cod)?zsb(c,Xnd):d.Hc(bod)?zsb(c,Wnd):d.Hc(aod)&&zsb(c,Znd);pQb(a,dBc,c)} +function KLc(a){var b,c,d,e,f,g,h;e=RD(mQb(a,(Ywc(),pwc)),10);d=a.j;c=(tFb(0,d.c.length),RD(d.c[0],12));for(g=new Anb(e.j);g.a<g.c.c.length;){f=RD(ynb(g),12);if(dE(f)===dE(mQb(c,Awc))){if(f.j==(qpd(),Yod)&&a.p>e.p){Q3b(f,npd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==npd&&e.p>a.p){Q3b(f,Yod);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} +function nTb(a,b,c,d,e){var f,g,h,i,j,k,l;if(!(ZD(b,207)||ZD(b,366)||ZD(b,193))){throw Adb(new agb('Method only works for ElkNode-, ElkLabel and ElkPort-objects.'))}g=a.a/2;i=b.i+d-g;k=b.j+e-g;j=i+b.g+a.a;l=k+b.f+a.a;f=new Ejd;Mub(f,new rjd(i,k));Mub(f,new rjd(i,l));Mub(f,new rjd(j,l));Mub(f,new rjd(j,k));h=new ORb(f);kQb(h,b);c&&Zjb(a.b,b,h);return h} +function w$b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new rjd(b,c);for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);$id(j.n,f);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);Cjd(d.a,f);g=RD(mQb(d,(yCc(),RAc)),75);!!g&&Cjd(g,f);for(i=new Anb(d.b);i.a<i.c.c.length;){h=RD(ynb(i),72);$id(h.n,f)}}}}} +function o2b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new rjd(b,c);for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);$id(j.n,f);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);Cjd(d.a,f);g=RD(mQb(d,(yCc(),RAc)),75);!!g&&Cjd(g,f);for(i=new Anb(d.b);i.a<i.c.c.length;){h=RD(ynb(i),72);$id(h.n,f)}}}}} +function X4b(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==0){throw Adb(new Ked('Edges must have a source.'))}else if((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i==0){throw Adb(new Ked('Edges must have a target.'))}else{!a.b&&(a.b=new Yie(E4,a,4,7));if(!(a.b.i<=1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c.i<=1))){throw Adb(new Ked('Hyperedges are not supported.'))}}} +function mKc(a,b){var c,d,e,f,g,h,i,j,k,l;l=0;f=new wmb;hmb(f,b);while(f.b!=f.c){i=RD(smb(f),219);j=0;k=RD(mQb(b.j,(yCc(),cAc)),284);g=Kfb(UD(mQb(b.j,Zzc)));h=Kfb(UD(mQb(b.j,$zc)));if(k!=(kEc(),hEc)){j+=g*nKc(i.e,k);j+=h*oKc(i.e)}l+=PLc(i.d,i.e)+j;for(e=new Anb(i.b);e.a<e.c.c.length;){d=RD(ynb(e),36);c=RD(Vmb(a.b,d.p),219);c.s||(l+=lKc(a,c))}}return l} +function Pib(){Pib=geb;var a;Kib=new ajb(1,1);Mib=new ajb(1,10);Oib=new ajb(0,0);Jib=new ajb(-1,1);Lib=cD(WC(uJ,1),Nve,92,0,[Oib,Kib,new ajb(1,2),new ajb(1,3),new ajb(1,4),new ajb(1,5),new ajb(1,6),new ajb(1,7),new ajb(1,8),new ajb(1,9),Mib]);Nib=$C(uJ,Nve,92,32,0,1);for(a=0;a<Nib.length;a++){Nib[a]=Jdb(Sdb(1,a),0)?jjb(Sdb(1,a)):Xib(jjb(Odb(Sdb(1,a))))}} +function JJb(a,b,c,d,e,f,g){a.c=d.Lf().a;a.d=d.Lf().b;if(e){a.c+=e.Lf().a;a.d+=e.Lf().b}a.b=b.Mf().a;a.a=b.Mf().b;if(!e){c?(a.c-=g+b.Mf().a):(a.c+=d.Mf().a+g)}else{switch(e.ag().g){case 0:case 2:a.c+=e.Mf().a+g+f.a+g;break;case 4:a.c-=g+f.a+g+b.Mf().a;break;case 1:a.c+=e.Mf().a+g;a.d-=g+f.b+g+b.Mf().b;break;case 3:a.c+=e.Mf().a+g;a.d+=e.Mf().b+g+f.b+g;}}} +function xdc(a,b){var c,d;this.b=new bnb;this.e=new bnb;this.a=a;this.d=b;udc(this);vdc(this);this.b.dc()?(this.c=a.c.p):(this.c=RD(this.b.Xb(0),10).c.p);this.e.c.length==0?(this.f=a.c.p):(this.f=RD(Vmb(this.e,this.e.c.length-1),10).c.p);for(d=RD(mQb(a,(Ywc(),Mwc)),15).Kc();d.Ob();){c=RD(d.Pb(),72);if(nQb(c,(yCc(),uAc))){this.d=RD(mQb(c,uAc),232);break}}} +function erc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.e,b),49);g=RD(Wjb(a.e,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),10);d.a.zc(j,d);Ysb(RD(Wjb(a.e,j),49),b);ye(RD(Wjb(a.e,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} +function uLc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.b,b),49);g=RD(Wjb(a.b,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),10);d.a.zc(j,d);Ysb(RD(Wjb(a.b,j),49),b);ye(RD(Wjb(a.b,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} +function rrc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.d,b),49);g=RD(Wjb(a.d,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),12);d.a.zc(j,d);Ysb(RD(Wjb(a.d,j),49),b);ye(RD(Wjb(a.d,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),12);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} +function lTc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c<d){m=(n=new USc(a.p),o=new USc(a.p),ye(n.e,a.e),n.q=a.q,n.r=o,LSc(n),ye(o.j,a.j),o.r=n,LSc(o),new Ptd(n,o));l=RD(m.a,118);k=RD(m.b,118);e=(tFb(f,b.c.length),RD(b.c[f],339));g=sTc(a,l,k,e);for(j=c+1;j<=d;j++){h=(tFb(j,b.c.length),RD(b.c[j],339));i=sTc(a,l,k,h);if(qTc(h,i,e,g)){e=h;g=i;f=j}}}return f} +function c8c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;g=RD(QHd(b,0),27);Dyd(g,0);Eyd(g,0);m=new bnb;ZEb(m.c,g);h=g;f=new lad(a.a,g.g,g.f,(sad(),rad));for(n=1;n<b.i;n++){o=RD(QHd(b,n),27);i=d8c(a,oad,o,h,f,m,c);j=d8c(a,nad,o,h,f,m,c);k=d8c(a,qad,o,h,f,m,c);l=d8c(a,pad,o,h,f,m,c);e=f8c(a,i,j,k,l,o,h,d);Dyd(o,e.d);Eyd(o,e.e);kad(e,rad);f=e;h=o;ZEb(m.c,o)}return f} +function yEd(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=null;m=b;l=pEd(a,DGd(c),m);jyd(l,zDd(m,uIe));g=wDd(m,kIe);d=new MEd(a,l);ODd(d.a,d.b,g);h=wDd(m,lIe);e=new NEd(a,l);PDd(e.a,e.b,h);if((!l.b&&(l.b=new Yie(E4,l,4,7)),l.b).i==0||(!l.c&&(l.c=new Yie(E4,l,5,8)),l.c).i==0){f=zDd(m,uIe);i=yIe+f;j=i+zIe;throw Adb(new CDd(j))}GEd(m,l);zEd(a,m,l);k=CEd(a,m,l);return k} +function pJb(a,b){var c,d,e,f,g,h,i;e=$C(kE,Pwe,28,a.e.a.c.length,15,1);for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);e[f.d]+=f.b.a.c.length}h=gv(b);while(h.b!=0){f=RD(h.b==0?null:(sFb(h.b!=0),Wub(h,h.a.a)),125);for(d=Nr(new Anb(f.g.a));d.Ob();){c=RD(d.Pb(),218);i=c.e;i.e=$wnd.Math.max(i.e,f.e+c.a);--e[i.d];e[i.d]==0&&(Pub(h,i,h.c.b,h.c),true)}}} +function tJb(a){var b,c,d,e,f,g,h,i,j,k,l;c=qwe;e=lve;for(h=new Anb(a.e.a);h.a<h.c.c.length;){f=RD(ynb(h),125);e=$wnd.Math.min(e,f.e);c=$wnd.Math.max(c,f.e)}b=$C(kE,Pwe,28,c-e+1,15,1);for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);f.e-=e;++b[f.e]}d=0;if(a.k!=null){for(j=a.k,k=0,l=j.length;k<l;++k){i=j[k];b[d++]+=i;if(b.length==d){break}}}return b} +function I0c(a,b){var c,d,e,f,g,h;b.Ug('Edge routing',1);e=RD(mQb(a,(h_c(),K$c)),392);if(e==(LZc(),JZc)){G0c(a)}else if(e==IZc){RD(Lvb(DDb(CDb(new SDb(null,new Swb(a.b,16)),new AWc))),39);f=Kfb(UD(mQb(a,$$c)));g=Kfb(UD(mQb(a,J$c)));h=RD(mQb(a,H$c),88);E0c(a,h,f);F0c(a,h,f,g);D0c(a,h,f,g);for(d=Sub(a.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.a.b<2&&H0c(c)}}b.Vg()} +function IKd(a){switch(a.d){case 9:case 8:{return true}case 3:case 5:case 4:case 6:{return false}case 7:{return RD(HKd(a),17).a==a.o}case 1:case 2:{if(a.o==-2){return false}else{switch(a.p){case 0:case 1:case 2:case 6:case 5:case 7:{return Gdb(a.k,a.f)}case 3:case 4:{return a.j==a.e}default:{return a.n==null?a.g==null:pb(a.n,a.g)}}}}default:{return false}}} +function Grc(a,b){var c,d,e;b.Ug('Breaking Point Insertion',1);d=new ysc(a);switch(RD(mQb(a,(yCc(),rCc)),351).g){case 2:e=new Ksc;break;case 0:e=new zrc;break;default:e=new Nsc;}c=e.og(a,d);Heb(TD(mQb(a,tCc)))&&(c=Frc(a,c));if(!e.pg()&&nQb(a,xCc)){switch(RD(mQb(a,xCc),352).g){case 2:c=Wsc(d,c);break;case 1:c=Usc(d,c);}}if(c.dc()){b.Vg();return}Drc(a,c);b.Vg()} +function oJc(a,b,c){var d,e,f,g,h,i,j,k,l;f=new cnb(b.c.length);for(j=new Anb(b);j.a<j.c.c.length;){g=RD(ynb(j),10);Rmb(f,a.b[g.c.p][g.p])}jJc(a,f,c);l=null;while(l=kJc(f)){lJc(a,RD(l.a,239),RD(l.b,239),f)}b.c.length=0;for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),239);for(h=d.d,i=0,k=h.length;i<k;++i){g=h[i];ZEb(b.c,g);a.a[g.c.p][g.p].a=pJc(d.g,d.d[0]).a}}} +function wnd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,pHe),'ELK Fixed'),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new znd)));Agd(a,pHe,Eze,tnd);Agd(a,pHe,fEe,iGd(und));Agd(a,pHe,QGe,iGd(ond));Agd(a,pHe,jAe,iGd(pnd));Agd(a,pHe,CAe,iGd(rnd));Agd(a,pHe,hAe,iGd(qnd))} +function Do(a,b,c){var d,e,f,g,h;d=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));h=Ydb(Ndb(cwe,qgb(Ydb(Ndb(c==null?0:tb(c),dwe)),15)));f=Go(a,b,d);if(!!f&&h==f.f&&Hb(c,f.i)){return c}g=Ho(a,c,h);if(g){throw Adb(new agb('value already present: '+c))}e=new kp(b,d,c,h);if(f){yo(a,f);Bo(a,e,f);f.e=null;f.c=null;return f.i}else{Bo(a,e,null);Fo(a);return null}} +function V7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=RD(Wjb(c.c,b),467);n=f.f;o=f.a;f.b?(i=new rjd(g,n)):(i=new rjd(k,n));f.c?(l=new rjd(k,o)):(l=new rjd(g,o));e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new rjd(e,n);m=new rjd(e,o);zjd(b.a,cD(WC(l3,1),Nve,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new rjd(e,c.b);Mub(b.a,d)}zjd(b.a,cD(WC(l3,1),Nve,8,0,[m,l]))} +function aEc(){aEc=geb;$Dc=new bEc(LAe,0);VDc=new bEc('NIKOLOV',1);YDc=new bEc('NIKOLOV_PIXEL',2);WDc=new bEc('NIKOLOV_IMPROVED',3);XDc=new bEc('NIKOLOV_IMPROVED_PIXEL',4);SDc=new bEc('DUMMYNODE_PERCENTAGE',5);ZDc=new bEc('NODECOUNT_PERCENTAGE',6);_Dc=new bEc('NO_BOUNDARY',7);TDc=new bEc('MODEL_ORDER_LEFT_TO_RIGHT',8);UDc=new bEc('MODEL_ORDER_RIGHT_TO_LEFT',9)} +function use(a){var b,c,d,e,f;d=a.length;b=new Rhb;f=0;while(f<d){c=ihb(a,f++);if(c==9||c==10||c==12||c==13||c==32)continue;if(c==35){while(f<d){c=ihb(a,f++);if(c==13||c==10)break}continue}if(c==92&&f<d){if((e=(BFb(f,a.length),a.charCodeAt(f)))==35||e==9||e==10||e==12||e==13||e==32){Jhb(b,e&Bwe);++f}else{b.a+='\\';Jhb(b,e&Bwe);++f}}else Jhb(b,c&Bwe)}return b.a} +function D4c(){D4c=geb;n4c=new lGd(oFe,(Geb(),false));t4c=new lGd(pFe,sgb(0));u4c=new lGd(qFe,0);v4c=new lGd(rFe,false);q4c=(g4c(),d4c);p4c=new lGd(sFe,q4c);sgb(0);o4c=new lGd(tFe,sgb(1));A4c=(t5c(),r5c);z4c=new lGd(uFe,A4c);C4c=(Y3c(),X3c);B4c=new lGd(vFe,C4c);s4c=(j5c(),i5c);r4c=new lGd(wFe,s4c);y4c=new lGd(xFe,0);w4c=new lGd(yFe,false);x4c=new lGd(zFe,false)} +function t3c(a,b){var c,d,e;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),27);Rc(a.a,c,c);Rc(a.b,c,c);e=Q2c(c);if(e.c.length!=0){!!a.d&&a.d.Gg(e);Rc(a.a,c,(tFb(0,e.c.length),RD(e.c[0],27)));Rc(a.b,c,RD(Vmb(e,e.c.length-1),27));while(N2c(e).c.length!=0){e=N2c(e);!!a.d&&a.d.Gg(e);Rc(a.a,c,(tFb(0,e.c.length),RD(e.c[0],27)));Rc(a.b,c,RD(Vmb(e,e.c.length-1),27))}}}} +function jwd(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=vYd(b.Dh(),-1-c);if(ZD(d,102)){return RD(d,19)}else{g=RD(b.Mh(d),160);for(h=0,i=g.gc();h<i;++h){if(dE(g.Ul(h))===dE(a)){e=g.Tl(h);if(ZD(e,102)){f=RD(e,19);if((f.Bb&QHe)!=0){return f}}}}throw Adb(new dgb('The containment feature could not be located'))}}else{return Z5d(RD(vYd(a.Dh(),c),19))}}} +function Lqc(a){var b,c,d,e,f,g,h,i,j,k;c=0;for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),105);!!g.i&&(g.i.c=c++)}b=YC(xdb,[Nve,Hye],[183,28],16,[c,c],2);k=a.d;for(e=0;e<k.c.length;e++){i=(tFb(e,k.c.length),RD(k.c[e],105));if(i.i){for(f=e+1;f<k.c.length;f++){j=(tFb(f,k.c.length),RD(k.c[f],105));if(j.i){d=Qqc(i,j);b[i.i.c][j.i.c]=d;b[j.i.c][i.i.c]=d}}}}return b} +function u7c(){u7c=geb;m7c=new lGd(LFe,(Geb(),false));sgb(-1);f7c=new lGd(MFe,sgb(-1));sgb(-1);g7c=new lGd(NFe,sgb(-1));h7c=new lGd(OFe,false);s7c=(z8c(),x8c);r7c=new lGd(PFe,s7c);t7c=new lGd(QFe,-1);q7c=(_6c(),$6c);p7c=new lGd(RFe,q7c);o7c=new lGd(SFe,true);l7c=(b9c(),$8c);k7c=new lGd(TFe,l7c);j7c=new lGd(UFe,false);sgb(1);i7c=new lGd(VFe,sgb(1));n7c=new jGd(WFe)} +function WYc(){WYc=geb;VYc=new XYc('ROOT_PROC',0);OYc=new XYc('FAN_PROC',1);SYc=new XYc('LEVEL_PROC',2);TYc=new XYc('NEIGHBORS_PROC',3);RYc=new XYc('LEVEL_HEIGHT',4);NYc=new XYc('DIRECTION_PROC',5);UYc=new XYc('NODE_POSITION_PROC',6);LYc=new XYc('COMPACTION_PROC',7);QYc=new XYc('LEVEL_COORDS',8);PYc=new XYc('GRAPH_BOUNDS_PROC',9);MYc=new XYc('DETREEIFYING_PROC',10)} +function Fee(a,b){var c,d,e,f,g,h,i,j,k,l;l=zYd(b);j=null;e=false;for(h=0,k=tYd(l.a).i;h<k;++h){g=RD(N_d(l,h,(f=RD(QHd(tYd(l.a),h),89),i=f.c,ZD(i,90)?RD(i,29):(JTd(),zTd))),29);c=Fee(a,g);if(!c.dc()){if(!j){j=c}else{if(!e){e=true;j=new PSd(j)}j.Gc(c)}}}d=Kee(a,b);if(d.dc()){return !j?(yob(),yob(),vob):j}else{if(!j){return d}else{e||(j=new PSd(j));j.Gc(d);return j}}} +function Gee(a,b){var c,d,e,f,g,h,i,j,k,l;l=zYd(b);j=null;d=false;for(h=0,k=tYd(l.a).i;h<k;++h){f=RD(N_d(l,h,(e=RD(QHd(tYd(l.a),h),89),i=e.c,ZD(i,90)?RD(i,29):(JTd(),zTd))),29);c=Gee(a,f);if(!c.dc()){if(!j){j=c}else{if(!d){d=true;j=new PSd(j)}j.Gc(c)}}}g=Nee(a,b);if(g.dc()){return !j?(yob(),yob(),vob):j}else{if(!j){return g}else{d||(j=new PSd(j));j.Gc(g);return j}}} +function gNb(a){var b,c,d,e;d=a.o;RMb();if(a.A.dc()||pb(a.A,QMb)){e=d.a}else{e=ZKb(a.f);if(a.A.Hc((Qpd(),Npd))&&!a.B.Hc((dqd(),_pd))){e=$wnd.Math.max(e,ZKb(RD(Vrb(a.p,(qpd(),Yod)),252)));e=$wnd.Math.max(e,ZKb(RD(Vrb(a.p,npd),252)))}b=TMb(a);!!b&&(e=$wnd.Math.max(e,b.a))}Heb(TD(a.e.Tf().of((umd(),mld))))?(d.a=$wnd.Math.max(d.a,e)):(d.a=e);c=a.f.i;c.c=0;c.b=e;$Kb(a.f)} +function _fe(a,b,c){var d,e,f,g,h,i;if(ZD(b,76)){return rLd(a,b,c)}else{h=null;f=null;d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];if(pb(b,e.md())){f=e.Lk();if(ZD(f,102)&&(RD(f,19).Bb&QHe)!=0){h=e;break}}}if(h){if(Mvd(a.e)){i=f.Jk()?fge(a,4,f,b,null,kge(a,f,b,ZD(f,102)&&(RD(f,19).Bb&txe)!=0),true):fge(a,f.tk()?2:1,f,b,f.ik(),-1,true);c?c.nj(i):(c=i)}c=_fe(a,h,c)}return c}} +function yge(a,b,c){var d,e,f,g;g=pke(a.e.Dh(),b);d=RD(a.g,124);nke();if(RD(b,69).xk()){for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(pb(e,c)){vLd(a,f);return true}}}}else if(c!=null){for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(pb(c,e.md())){vLd(a,f);return true}}}}else{for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(e.md()==null){vLd(a,f);return true}}}}return false} +function xcc(a,b){var c,d,e,f,g;b.Ug('Node and Port Label Placement and Node Sizing',1);DJb((i1b(),new t1b(a,true,true,new Acc)));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))){f=RD(mQb(a,(yCc(),EBc)),21);e=f.Hc((Pod(),Mod));g=Heb(TD(mQb(a,FBc)));for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);FDb(CDb(new SDb(null,new Swb(c.a,16)),new Ccc),new Ecc(f,e,g))}}b.Vg()} +function SHc(a,b){var c,d,e,f,g;a.c==null||a.c.length<b.c.length?(a.c=$C(xdb,Hye,28,b.c.length,16,1)):Nnb(a.c);a.a=new bnb;d=0;for(g=new Anb(b);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d++}c=new Yub;for(f=new Anb(b);f.a<f.c.c.length;){e=RD(ynb(f),10);if(!a.c[e.p]){THc(a,e);c.b==0||(sFb(c.b!=0),RD(c.a.a.c,15)).gc()<a.a.c.length?Nub(c,a.a):Oub(c,a.a);a.a=new bnb}}return c} +function Ucd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,uGe),'ELK SPOrE Overlap Removal'),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new Xcd)));Agd(a,uGe,iGe,iGd(Scd));Agd(a,uGe,Eze,Qcd);Agd(a,uGe,_ze,8);Agd(a,uGe,nGe,iGd(Rcd));Agd(a,uGe,qGe,iGd(Ocd));Agd(a,uGe,rGe,iGd(Pcd));Agd(a,uGe,LDe,(Geb(),false))} +function Dee(a,b){var c,d,e,f,g,h,i;c=b.qi(a.a);if(c){i=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),cLe));if(i!=null){d=new bnb;for(f=vhb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];lhb(e,'##other')?Rmb(d,'!##'+Uee(a,BXd(b.qk()))):lhb(e,'##local')?(d.c.push(null),undefined,true):lhb(e,aLe)?Rmb(d,Uee(a,BXd(b.qk()))):(ZEb(d.c,e),true)}return d}}return yob(),yob(),vob} +function u$b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;g=Zid(b.c,c,d);for(l=new Anb(b.a);l.a<l.c.c.length;){k=RD(ynb(l),10);$id(k.n,g);for(n=new Anb(k.j);n.a<n.c.c.length;){m=RD(ynb(n),12);for(f=new Anb(m.g);f.a<f.c.c.length;){e=RD(ynb(f),18);Cjd(e.a,g);h=RD(mQb(e,(yCc(),RAc)),75);!!h&&Cjd(h,g);for(j=new Anb(e.b);j.a<j.c.c.length;){i=RD(ynb(j),72);$id(i.n,g)}}}Rmb(a.a,k);k.a=a}} +function wYb(a){var b,c,d,e,f,g,h,i;if(a.d){throw Adb(new dgb((lfb(eQ),lye+eQ.k+mye)))}a.c==(Cmd(),Amd)&&vYb(a,ymd);for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),194);b.e=0}for(g=new Anb(a.a.b);g.a<g.c.c.length;){f=RD(ynb(g),86);f.o=pxe;for(e=f.f.Kc();e.Ob();){d=RD(e.Pb(),86);++d.d.e}}LYb(a);for(i=new Anb(a.a.b);i.a<i.c.c.length;){h=RD(ynb(i),86);h.k=true}return a} +function mnc(a,b){var c,d,e,f,g,h,i,j;h=new Vmc(a);c=new Yub;Pub(c,b,c.c.b,c.c);while(c.b!=0){d=RD(c.b==0?null:(sFb(c.b!=0),Wub(c,c.a.a)),113);d.d.p=1;for(g=new Anb(d.e);g.a<g.c.c.length;){e=RD(ynb(g),340);Qmc(h,e);j=e.d;j.d.p==0&&(Pub(c,j,c.c.b,c.c),true)}for(f=new Anb(d.b);f.a<f.c.c.length;){e=RD(ynb(f),340);Qmc(h,e);i=e.c;i.d.p==0&&(Pub(c,i,c.c.b,c.c),true)}}return h} +function ksd(a){var b,c,d,e,f;d=Kfb(UD(Gxd(a,(umd(),Uld))));if(d==1){return}zyd(a,d*a.g,d*a.f);c=cr(hr((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c),new Lsd));for(f=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.n&&(a.n=new C5d(I4,a,1,7)),a.n),(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c),c])));gs(f);){e=RD(hs(f),422);e.qh(d*e.nh(),d*e.oh());e.ph(d*e.mh(),d*e.lh());b=RD(e.of(Fld),8);if(b){b.a*=d;b.b*=d}}} +function Qfe(a,b,c){var d,e,f,g,h;g=(nke(),RD(b,69).xk());if(qke(a.e,b)){if(b.Si()&&dge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){return false}}else{h=pke(a.e.Dh(),b);d=RD(a.g,124);for(f=0;f<a.i;++f){e=d[f];if(h.am(e.Lk())){if(g?pb(e,c):c==null?e.md()==null:pb(c,e.md())){return false}else{RD(eHd(a,f,g?RD(c,76):oke(b,c)),76);return true}}}}return WGd(a,g?RD(c,76):oke(b,c))} +function _dc(a,b,c,d,e){var f,g,h,i,j,k,l,m;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);m=t2b(f.a);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];switch(RD(mQb(i,(yCc(),UAc)),171).g){case 1:dec(i);g3b(i,b);aec(i,true,d);break;case 3:eec(i);g3b(i,c);aec(i,false,e);}}}h=new Jkb(a.b,0);while(h.b<h.d.gc()){(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30)).a.c.length==0&&Ckb(h)}} +function mjb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;n=b.length;i=n;BFb(0,b.length);if(b.charCodeAt(0)==45){l=-1;m=1;--n}else{l=1;m=0}f=(xjb(),wjb)[10];e=n/f|0;q=n%f;q!=0&&++e;h=$C(kE,Pwe,28,e,15,1);c=vjb[8];g=0;o=m+(q==0?f:q);for(p=m;p<i;p=o,o=p+f){d=Oeb((AFb(p,o,b.length),b.substr(p,o-p)),qwe,lve);j=(Ljb(),Pjb(h,h,g,c));j+=Fjb(h,g,d);h[g++]=j}k=g;a.e=l;a.d=k;a.a=h;Rib(a)} +function bPb(a,b){var c,d,e,f;c=new gPb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();e=e==1?1:0;f=f==1?1:0;if(e<f){return -1}if(e==f){return 0}return 1} +function p0b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.i;e=Heb(TD(mQb(h,(yCc(),NAc))));k=0;d=0;for(j=new Anb(a.g);j.a<j.c.c.length;){i=RD(ynb(j),18);g=W0b(i);f=g&&e&&Heb(TD(mQb(i,OAc)));m=i.d.i;g&&f?++d:g&&!f?++k:Y2b(m).e==h?++d:++k}for(c=new Anb(a.e);c.a<c.c.c.length;){b=RD(ynb(c),18);g=W0b(b);f=g&&e&&Heb(TD(mQb(b,OAc)));l=b.c.i;g&&f?++k:g&&!f?++d:Y2b(l).e==h?++k:++d}return k-d} +function sQc(a,b,c,d){this.e=a;this.k=RD(mQb(a,(Ywc(),Qwc)),312);this.g=$C(jR,WAe,10,b,0,1);this.b=$C(VI,Nve,345,b,7,1);this.a=$C(jR,WAe,10,b,0,1);this.d=$C(VI,Nve,345,b,7,1);this.j=$C(jR,WAe,10,b,0,1);this.i=$C(VI,Nve,345,b,7,1);this.p=$C(VI,Nve,345,b,7,1);this.n=$C(QI,Nve,484,b,8,1);Mnb(this.n,(Geb(),false));this.f=$C(QI,Nve,484,b,8,1);Mnb(this.f,true);this.o=c;this.c=d} +function mdc(a,b){var c,d,e,f,g,h;if(b.dc()){return}if(RD(b.Xb(0),292).d==(btc(),$sc)){ddc(a,b)}else{for(d=b.Kc();d.Ob();){c=RD(d.Pb(),292);switch(c.d.g){case 5:_cc(a,c,fdc(a,c));break;case 0:_cc(a,c,(g=c.f-c.c+1,h=(g-1)/2|0,c.c+h));break;case 4:_cc(a,c,hdc(a,c));break;case 2:ndc(c);_cc(a,c,(f=jdc(c),f?c.c:c.f));break;case 1:ndc(c);_cc(a,c,(e=jdc(c),e?c.f:c.c));}edc(c.a)}}} +function zt(a,b,c,d){var e,f,g;g=new Hu(b,c);if(!a.a){a.a=a.e=g;Zjb(a.b,b,new Gu(g));++a.c}else if(!d){RD(Hvb(a.e),511).b=g;g.d=a.e;a.e=g;e=RD(Wjb(a.b,b),260);if(!e){Zjb(a.b,b,e=new Gu(g));++a.c}else{++e.a;f=e.c;f.c=g;g.e=f;e.c=g}}else{e=RD(Hvb(RD(Wjb(a.b,b),260)),260);++e.a;g.d=d.d;g.e=d.e;g.b=d;g.c=d;!d.e?(e.b=g):(d.e.c=g);!d.d?(a.a=g):(d.d.b=g);d.d=g;d.e=g}++a.d;return g} +function lJb(a,b){var c,d,e,f,g;b.Ug('Network simplex',1);if(a.e.a.c.length<1){b.Vg();return}for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);e.e=0}g=a.e.a.c.length>=40;g&&wJb(a);nJb(a);mJb(a);c=qJb(a);d=0;while(!!c&&d<a.f){kJb(a,c,jJb(a,c));c=qJb(a);++d}g&&vJb(a);a.a?hJb(a,tJb(a)):tJb(a);a.b=null;a.d=null;a.p=null;a.c=null;a.g=null;a.i=null;a.n=null;a.o=null;b.Vg()} +function T7b(a,b){var c,d,e,f,g,h,i;if(b.e){return}b.e=true;for(d=b.d.a.ec().Kc();d.Ob();){c=RD(d.Pb(),18);if(b.o&&b.d.a.gc()<=1){g=b.a.c;h=b.a.c+b.a.b;i=new rjd(g+(h-g)/2,b.b);Mub(RD(b.d.a.ec().Kc().Pb(),18).a,i);continue}e=RD(Wjb(b.c,c),467);if(e.b||e.c){V7b(a,c,b);continue}f=a.d==(lFc(),kFc)&&(e.d||e.e)&&_7b(a,b)&&b.d.a.gc()<=1;f?W7b(c,b):U7b(a,c,b)}b.k&&xgb(b.d,new m8b)} +function A5c(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=f;h=(d+e)/2+m;q=c*$wnd.Math.cos(h);r=c*$wnd.Math.sin(h);s=q-b.g/2;t=r-b.f/2;Dyd(b,s);Eyd(b,t);l=a.a.Eg(b);p=2*$wnd.Math.acos(c/c+a.c);if(p<e-d){n=p/l;g=(d+e-p)/2}else{n=(e-d)/l;g=d}o=Q2c(b);if(a.e){a.e.Fg(a.d);a.e.Gg(o)}for(j=new Anb(o);j.a<j.c.c.length;){i=RD(ynb(j),27);k=a.a.Eg(i);A5c(a,i,c+a.c,g,g+n*k,f);g+=n*k}} +function zA(a,b,c){var d;d=c.q.getMonth();switch(b){case 5:Zhb(a,cD(WC(qJ,1),Nve,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[d]);break;case 4:Zhb(a,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe])[d]);break;case 3:Zhb(a,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[d]);break;default:UA(a,d+1,b);}} +function ATb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new rjd(c,d);ojd(i,RD(mQb(b,(JVb(),GVb)),8));for(m=new Anb(b.e);m.a<m.c.c.length;){l=RD(ynb(m),153);$id(l.d,i);Rmb(a.e,l)}for(h=new Anb(b.c);h.a<h.c.c.length;){g=RD(ynb(h),289);for(f=new Anb(g.a);f.a<f.c.c.length;){e=RD(ynb(f),250);$id(e.d,i)}Rmb(a.c,g)}for(k=new Anb(b.d);k.a<k.c.c.length;){j=RD(ynb(k),453);$id(j.d,i);Rmb(a.d,j)}} +function TFc(a,b){var c,d,e,f,g,h,i,j;for(i=new Anb(b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);for(e=new l4b(h.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);c=d.c==h?d.d:d.c;f=c.i;if(b==f){continue}j=RD(mQb(d,(yCc(),KBc)),17).a;j<0&&(j=0);g=f.p;if(a.b[g]==0){if(d.d==c){a.a[g]-=j+1;a.a[g]<=0&&a.c[g]>0&&Mub(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Mub(a.e,f)}}}}} +function FVc(a,b,c,d){var e,f,g,h,i,j,k;i=new rjd(c,d);ojd(i,RD(mQb(b,(q$c(),SZc)),8));for(k=Sub(b.b,0);k.b!=k.d.c;){j=RD(evb(k),39);$id(j.e,i);Mub(a.b,j)}for(h=RD(zDb(BDb(new SDb(null,new Swb(b.a,16))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15).Kc();h.Ob();){g=RD(h.Pb(),65);for(f=Sub(g.a,0);f.b!=f.d.c;){e=RD(evb(f),8);e.a+=i.a;e.b+=i.b}Mub(a.a,g)}} +function kWc(a,b){var c,d,e,f;if(0<(ZD(a,16)?RD(a,16).gc():Kr(a.Kc()))){e=b;if(1<e){--e;f=new uWc;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),39);f=Al(cD(WC(cJ,1),rve,20,0,[f,new dXc(c)]))}return kWc(f,e)}if(e<0){f=new xWc;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),39);f=Al(cD(WC(cJ,1),rve,20,0,[f,new dXc(c)]))}if(0<(ZD(f,16)?RD(f,16).gc():Kr(f.Kc()))){return kWc(f,e)}}}return RD(Hr(a.Kc()),39)} +function v0c(a,b,c){var d,e,f,g;c.Ug('Processor order nodes',2);a.b=Kfb(UD(mQb(b,(h_c(),_$c))));a.a=RD(mQb(b,H$c),88);if(a.a==(Cmd(),Amd)){a.a=xmd;pQb(b,H$c,a.a)}e=new Yub;for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(Pub(e,f,e.c.b,e.c),true)}d=(sFb(e.b!=0),RD(e.a.a.c,39));t0c(a,d);c.fh(1);w0c(a,d,0-Kfb(UD(mQb(d,(q$c(),d$c))))/2,0);c.fh(1);c.Vg()} +function dqd(){dqd=geb;Ypd=new eqd('DEFAULT_MINIMUM_SIZE',0);$pd=new eqd('MINIMUM_SIZE_ACCOUNTS_FOR_PADDING',1);Xpd=new eqd('COMPUTE_PADDING',2);_pd=new eqd('OUTSIDE_NODE_LABELS_OVERHANG',3);aqd=new eqd('PORTS_OVERHANG',4);cqd=new eqd('UNIFORM_PORT_SPACING',5);bqd=new eqd('SPACE_EFFICIENT_PORT_LABELS',6);Zpd=new eqd('FORCE_TABULAR_NODE_LABELS',7);Wpd=new eqd('ASYMMETRICAL',8)} +function Rje(a,b){var c,d,e,f,g,h,i,j;if(!b){return null}else{c=(f=b.Dh(),!f?null:BXd(f).wi().si(f));if(c){dub(a,b,c);e=b.Dh();for(i=0,j=(e.i==null&&rYd(e),e.i).length;i<j;++i){h=(d=(e.i==null&&rYd(e),e.i),i>=0&&i<d.length?d[i]:null);if(h.rk()&&!h.sk()){if(ZD(h,331)){Tje(a,RD(h,35),b,c)}else{g=RD(h,19);(g.Bb&QHe)!=0&&Vje(a,g,b,c)}}}b.Vh()&&RD(c,54).ei(RD(b,54)._h())}return c}} +function kJb(a,b,c){var d,e,f;if(!b.f){throw Adb(new agb('Given leave edge is no tree edge.'))}if(c.f){throw Adb(new agb('Given enter edge is a tree edge already.'))}b.f=false;$sb(a.p,b);c.f=true;Ysb(a.p,c);d=c.e.e-c.d.e-c.a;oJb(a,c.e,b)||(d=-d);for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);oJb(a,e,b)||(e.e+=d)}a.j=1;Nnb(a.c);uJb(a,RD(ynb(new Anb(a.e.a)),125));iJb(a)} +function wIc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;BIc(a,b,c);f=b[c];n=d?(qpd(),ppd):(qpd(),Xod);if(xIc(b.length,c,d)){e=b[d?c-1:c+1];sIc(a,e,d?(BEc(),zEc):(BEc(),yEc));for(i=f,k=0,m=i.length;k<m;++k){g=i[k];vIc(a,g,n)}sIc(a,f,d?(BEc(),yEc):(BEc(),zEc));for(h=e,j=0,l=h.length;j<l;++j){g=h[j];!!g.e||vIc(a,g,spd(n))}}else{for(h=f,j=0,l=h.length;j<l;++j){g=h[j];vIc(a,g,n)}}return false} +function erd(a,b,c,d,e){var f,g,h,i,j,k,l;yob();_mb(a,new Urd);h=new Jkb(a,0);l=new bnb;f=0;while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),163));if(l.c.length!=0&&urd(g)*trd(g)>f*2){k=new zrd(l);j=urd(g)/trd(g);i=ird(k,b,new z3b,c,d,e,j);$id(hjd(k.e),i);l.c.length=0;f=0;ZEb(l.c,k);ZEb(l.c,g);f=urd(k)*trd(k)+urd(g)*trd(g)}else{ZEb(l.c,g);f+=urd(g)*trd(g)}}return l} +function O9b(a,b){var c,d,e,f,g,h;h=RD(mQb(b,(yCc(),BBc)),101);if(!(h==(Bod(),xod)||h==wod)){return}e=(new rjd(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a)).b;for(g=new Anb(a.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k!=(r3b(),m3b)){continue}c=RD(mQb(f,(Ywc(),hwc)),64);if(c!=(qpd(),Xod)&&c!=ppd){continue}d=Kfb(UD(mQb(f,Jwc)));h==xod&&(d*=e);f.n.b=d-RD(mQb(f,zBc),8).b;U2b(f,false,true)}} +function uge(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(Mvd(a.e)){if(b!=c){e=RD(a.g,124);n=e[c];g=n.Lk();if(qke(a.e,g)){o=pke(a.e.Dh(),g);i=-1;h=-1;d=0;for(j=0,l=b>c?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.am(f.Lk());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=RD(uLd(a,b,c),76);h!=i&&eZd(a,new c4d(a.e,7,g,sgb(h),n.md(),i));return m}}}else{return RD(SHd(a,b,c),76)}return RD(uLd(a,b,c),76)} +function ugc(a,b){var c,d,e,f,g,h,i;b.Ug('Port order processing',1);i=RD(mQb(a,(yCc(),HBc)),430);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g=RD(mQb(e,BBc),101);h=e.j;if(g==(Bod(),vod)||g==xod||g==wod){yob();_mb(h,mgc)}else if(g!=zod&&g!=Aod){yob();_mb(h,pgc);wgc(h);i==(sEc(),rEc)&&_mb(h,ogc)}e.i=true;V2b(e)}}b.Vg()} +function VHc(a){var b,c,d,e,f,g,h,i;i=new Tsb;b=new BIb;for(g=a.Kc();g.Ob();){e=RD(g.Pb(),10);h=eJb(fJb(new gJb,e),b);rtb(i.f,e,h)}for(f=a.Kc();f.Ob();){e=RD(f.Pb(),10);for(d=new is(Mr(a3b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)){continue}rIb(uIb(tIb(sIb(vIb(new wIb,$wnd.Math.max(1,RD(mQb(c,(yCc(),LBc)),17).a)),1),RD(Wjb(i,c.c.i),125)),RD(Wjb(i,c.d.i),125)))}}return b} +function TRc(){TRc=geb;ORc=pfd(new ufd,(sXb(),qXb),(hcc(),Bbc));QRc=pfd(new ufd,pXb,Fbc);RRc=nfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);NRc=nfd(pfd(pfd(new ufd,pXb,vbc),qXb,wbc),rXb,xbc);SRc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);PRc=nfd(new ufd,rXb,Cbc);LRc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);MRc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} +function lD(a,b,c,d,e,f){var g,h,i,j,k,l,m;j=oD(b)-oD(a);g=AD(b,j);i=hD(0,0,0);while(j>=0){h=rD(a,g);if(h){j<22?(i.l|=1<<j,undefined):j<44?(i.m|=1<<j-22,undefined):(i.h|=1<<j-44,undefined);if(a.l==0&&a.m==0&&a.h==0){break}}k=g.m;l=g.h;m=g.l;g.h=l>>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&nD(i);if(f){if(d){eD=xD(a);e&&(eD=DD(eD,(MD(),KD)))}else{eD=hD(a.l,a.m,a.h)}}return i} +function rIc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),12);l=0;f=0;for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(g),new _3b(g)])));gs(e);){d=RD(hs(e),12);if(d.i.c==b.c){l+=AIc(a,d.i)+1;++f}}c=l/f;k=g.j;k==(qpd(),Xod)?c<j?(a.f[g.p]=a.c-c):(a.f[g.p]=a.b+(i-c)):k==ppd&&(c<j?(a.f[g.p]=a.b+c):(a.f[g.p]=a.c-(i-c)))}} +function Oeb(a,b,c){var d,e,f,g,h;if(a==null){throw Adb(new Vgb(vve))}f=a.length;g=f>0&&(BFb(0,a.length),a.charCodeAt(0)==45||(BFb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;d<f;d++){if(dfb((BFb(d,a.length),a.charCodeAt(d)))==-1){throw Adb(new Vgb(nxe+a+'"'))}}h=parseInt(a,10);e=h<b;if(isNaN(h)){throw Adb(new Vgb(nxe+a+'"'))}else if(e||h>c){throw Adb(new Vgb(nxe+a+'"'))}return h} +function Jqc(a){var b,c,d,e,f,g,h;g=new Yub;for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),118);PSc(e,e.f.c.length);QSc(e,e.k.c.length);if(e.i==0){e.o=0;Pub(g,e,g.c.b,g.c)}}while(g.b!=0){e=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),118);d=e.o+1;for(c=new Anb(e.f);c.a<c.c.c.length;){b=RD(ynb(c),132);h=b.a;RSc(h,$wnd.Math.max(h.o,d));QSc(h,h.i-1);h.i==0&&(Pub(g,h,g.c.b,g.c),true)}}} +function Ged(a){var b,c,d,e,f,g,h,i;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),74);d=AGd(RD(QHd((!f.b&&(f.b=new Yie(E4,f,4,7)),f.b),0),84));h=d.i;i=d.j;e=RD(QHd((!f.a&&(f.a=new C5d(F4,f,6,6)),f.a),0),166);Nzd(e,e.j+h,e.k+i);Gzd(e,e.b+h,e.c+i);for(c=new dMd((!e.a&&(e.a=new XZd(D4,e,5)),e.a));c.e!=c.i.gc();){b=RD(bMd(c),377);Uxd(b,b.a+h,b.b+i)}Bjd(RD(Gxd(f,(umd(),cld)),75),h,i)}} +function Ere(a){var b;switch(a){case 100:return Jre(OLe,true);case 68:return Jre(OLe,false);case 119:return Jre(PLe,true);case 87:return Jre(PLe,false);case 115:return Jre(QLe,true);case 83:return Jre(QLe,false);case 99:return Jre(RLe,true);case 67:return Jre(RLe,false);case 105:return Jre(SLe,true);case 73:return Jre(SLe,false);default:throw Adb(new yz((b=a,NLe+b.toString(16))));}} +function b_b(a){var b,c,d,e,f;e=RD(Vmb(a.a,0),10);b=new j3b(a);Rmb(a.a,b);b.o.a=$wnd.Math.max(1,e.o.a);b.o.b=$wnd.Math.max(1,e.o.b);b.n.a=e.n.a;b.n.b=e.n.b;switch(RD(mQb(e,(Ywc(),hwc)),64).g){case 4:b.n.a+=2;break;case 1:b.n.b+=2;break;case 2:b.n.a-=2;break;case 3:b.n.b-=2;}d=new R3b;P3b(d,b);c=new a1b;f=RD(Vmb(e.j,0),12);Y0b(c,f);Z0b(c,d);$id(hjd(d.n),f.n);$id(hjd(d.a),f.a);return b} +function Wdc(a,b,c,d,e){if(c&&(!d||(a.c-a.b&a.a.length-1)>1)&&b==1&&RD(a.a[a.b],10).k==(r3b(),n3b)){Qdc(RD(a.a[a.b],10),(Pnd(),Lnd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&RD(a.a[a.c-1&a.a.length-1],10).k==(r3b(),n3b)){Qdc(RD(a.a[a.c-1&a.a.length-1],10),(Pnd(),Mnd))}else if((a.c-a.b&a.a.length-1)==2){Qdc(RD(omb(a),10),(Pnd(),Lnd));Qdc(RD(omb(a),10),Mnd)}else{Ndc(a,e)}jmb(a)} +function QVc(a,b,c){var d,e,f,g,h;f=0;for(e=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),27);g='';(!d.n&&(d.n=new C5d(I4,d,1,7)),d.n).i==0||(g=RD(QHd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n),0),135).a);h=new bXc(f++,b,g);kQb(h,d);pQb(h,(q$c(),h$c),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Mub(b.b,h);rtb(c.f,d,h)}} +function L5b(a){var b,c,d,e,f;d=RD(mQb(a,(Ywc(),Awc)),27);f=RD(Gxd(d,(yCc(),lBc)),181).Hc((Qpd(),Ppd));if(!a.e){e=RD(mQb(a,kwc),21);b=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((ovc(),hvc))){Ixd(d,BBc,(Bod(),wod));Esd(d,b.a,b.b,false,true)}else{Heb(TD(Gxd(d,mBc)))||Esd(d,b.a,b.b,true,true)}}f?Ixd(d,lBc,xsb(Ppd)):Ixd(d,lBc,(c=RD(mfb(H3),9),new Fsb(c,RD(WEb(c,c.length),9),0)))} +function JA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(ihb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=HA(a,b);if(g==0&&b[0]==f){return false}if(b[0]<a.length&&ihb(a,b[0])==58){d=g*60;++b[0];f=b[0];g=HA(a,b);if(g==0&&b[0]==f){return false}d+=g}else{d=g;d<24&&b[0]-f<=2?(d*=60):(d=d%100+(d/100|0)*60)}d*=e;c.o=-d;return true} +function lnc(a){var b,c,d,e,f,g,h,i,j;g=new bnb;for(d=new is(Mr(a3b(a.b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);W0b(c)&&Rmb(g,new knc(c,nnc(a,c.c),nnc(a,c.d)))}for(j=(f=(new glb(a.e)).a.vc().Kc(),new llb(f));j.a.Ob();){h=(b=RD(j.a.Pb(),44),RD(b.md(),113));h.d.p=0}for(i=(e=(new glb(a.e)).a.vc().Kc(),new llb(e));i.a.Ob();){h=(b=RD(i.a.Pb(),44),RD(b.md(),113));h.d.p==0&&Rmb(a.d,mnc(a,h))}} +function e5b(a){var b,c,d,e,f,g,h;f=MCd(a);for(e=new dMd((!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));e.e!=e.i.gc();){d=RD(bMd(e),74);h=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84));if(!NGd(h,f)){return true}}for(c=new dMd((!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));c.e!=c.i.gc();){b=RD(bMd(c),74);g=AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84));if(!NGd(g,f)){return true}}return false} +function jRc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new Anb(b.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(j=new Anb(f.a);j.a<j.c.c.length;){i=RD(ynb(j),10);k=new bnb;h=0;for(d=new is(Mr(Z2b(i).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)||!W0b(c)&&c.c.i.c==c.d.i.c){continue}e=RD(mQb(c,(yCc(),MBc)),17).a;if(e>h){h=e;k.c.length=0}e==h&&Rmb(k,new Ptd(c.c.i,c))}yob();_mb(k,a.c);Qmb(a.b,i.p,k)}}} +function kRc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new Anb(b.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(j=new Anb(f.a);j.a<j.c.c.length;){i=RD(ynb(j),10);k=new bnb;h=0;for(d=new is(Mr(a3b(i).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)||!W0b(c)&&c.c.i.c==c.d.i.c){continue}e=RD(mQb(c,(yCc(),MBc)),17).a;if(e>h){h=e;k.c.length=0}e==h&&Rmb(k,new Ptd(c.d.i,c))}yob();_mb(k,a.c);Qmb(a.f,i.p,k)}}} +function HVc(a,b){var c,d,e,f,g,h,i,j;j=TD(mQb(b,(h_c(),Z$c)));if(j==null||(uFb(j),j)){EVc(a,b);e=new bnb;for(i=Sub(b.b,0);i.b!=i.d.c;){g=RD(evb(i),39);c=DVc(a,g,null);if(c){kQb(c,b);ZEb(e.c,c)}}a.a=null;a.b=null;if(e.c.length>1){for(d=new Anb(e);d.a<d.c.c.length;){c=RD(ynb(d),121);f=0;for(h=Sub(c.b,0);h.b!=h.d.c;){g=RD(evb(h),39);g.g=f++}}}return e}return dv(cD(WC(W$,1),Jze,121,0,[b]))} +function hqc(a){var b,c,d,e,f,g,h,i;i=new Ejd;b=Sub(a,0);h=null;c=RD(evb(b),8);e=RD(evb(b),8);while(b.b!=b.d.c){h=c;c=e;e=RD(evb(b),8);f=iqc(ojd(new rjd(h.a,h.b),c));g=iqc(ojd(new rjd(e.a,e.b),c));d=10;d=$wnd.Math.min(d,$wnd.Math.abs(f.a+f.b)/2);d=$wnd.Math.min(d,$wnd.Math.abs(g.a+g.b)/2);f.a=Lgb(f.a)*d;f.b=Lgb(f.b)*d;g.a=Lgb(g.a)*d;g.b=Lgb(g.b)*d;Mub(i,$id(f,c));Mub(i,$id(g,c))}return i} +function wKc(a,b,c){var d,e,f,g,h,i;c.Ug('Minimize Crossings '+a.a,1);d=b.b.c.length==0||!QDb(CDb(new SDb(null,new Swb(b.b,16)),new PAb(new XKc))).Bd((xDb(),wDb));i=b.b.c.length==1&&RD(Vmb(b.b,0),30).a.c.length==1;f=dE(mQb(b,(yCc(),IAc)))===dE((Fnd(),Cnd));if(d||i&&!f){c.Vg();return}e=rKc(a,b);g=(h=RD(ju(e,0),219),h.c.kg()?h.c.eg()?new KKc(a):new MKc(a):new IKc(a));sKc(e,g);EKc(a);c.Vg()} +function xvd(a,b,c,d){var e,f,g,h,i;g=a.Ph();i=a.Jh();e=null;if(i){if(!!b&&(jwd(a,b,c).Bb&txe)==0){d=rLd(i.El(),a,d);a.di(null);e=b.Qh()}else{i=null}}else{!!g&&(i=g.Qh());!!b&&(e=b.Qh())}i!=e&&!!i&&i.Il(a);h=a.Fh();a.Bh(b,c);i!=e&&!!e&&e.Hl(a);if(a.vh()&&a.wh()){if(!!g&&h>=0&&h!=c){f=new N3d(a,1,h,g,null);!d?(d=f):d.nj(f)}if(c>=0){f=new N3d(a,1,c,h==c?g:null,b);!d?(d=f):d.nj(f)}}return d} +function jSd(a){var b,c,d;if(a.b==null){d=new Qhb;if(a.i!=null){Nhb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){wSd(a.i)||(d.a+='//',d);Nhb(d,a.a)}if(a.d!=null){d.a+='/';Nhb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;b<c;b++){b!=0&&(d.a+='/',d);Nhb(d,a.j[b])}if(a.g!=null){d.a+='?';Nhb(d,a.g)}}else{Nhb(d,a.a)}if(a.e!=null){d.a+='#';Nhb(d,a.e)}a.b=d.a}return a.b} +function V8b(a,b){var c,d,e,f,g,h;for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=mQb(d,(Ywc(),Awc));if(ZD(f,12)){g=RD(f,12);h=j2b(b,d,g.o.a,g.o.b);g.n.a=h.a;g.n.b=h.b;Q3b(g,RD(mQb(d,hwc),64))}}c=new rjd(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a);if(RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc))){pQb(a,(yCc(),BBc),(Bod(),wod));RD(mQb(Y2b(a),kwc),21).Fc(kvc);r2b(a,c,false)}else{r2b(a,c,true)}} +function Ffc(a,b,c,d,e){var f,g,h,i;f=new j3b(a);h3b(f,(r3b(),q3b));pQb(f,(yCc(),BBc),(Bod(),wod));pQb(f,(Ywc(),Awc),b.c.i);g=new R3b;pQb(g,Awc,b.c);Q3b(g,e);P3b(g,f);pQb(b.c,Iwc,f);h=new j3b(a);h3b(h,q3b);pQb(h,BBc,wod);pQb(h,Awc,b.d.i);i=new R3b;pQb(i,Awc,b.d);Q3b(i,e);P3b(i,h);pQb(b.d,Iwc,h);Y0b(b,g);Z0b(b,i);wFb(0,c.c.length);XEb(c.c,0,f);ZEb(d.c,h);pQb(f,$vc,sgb(1));pQb(h,$vc,sgb(1))} +function Eo(a,b,c,d){var e,f,g,h,i;i=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));e=Ydb(Ndb(cwe,qgb(Ydb(Ndb(c==null?0:tb(c),dwe)),15)));h=Ho(a,b,i);g=Go(a,c,e);if(!!h&&e==h.a&&Hb(c,h.g)){return c}else if(!!g&&!d){throw Adb(new agb('key already present: '+c))}!!h&&yo(a,h);!!g&&yo(a,g);f=new kp(c,e,b,i);Bo(a,f,g);if(g){g.e=null;g.c=null}if(h){h.e=null;h.c=null}Fo(a);return !h?null:h.g} +function Tjb(a,b,c){var d,e,f,g,h;for(f=0;f<b;f++){d=0;for(h=f+1;h<b;h++){d=Bdb(Bdb(Ndb(Cdb(a[f],yxe),Cdb(a[h],yxe)),Cdb(c[f+h],yxe)),Cdb(Ydb(d),yxe));c[f+h]=Ydb(d);d=Udb(d,32)}c[f+b]=Ydb(d)}sjb(c,c,b<<1);d=0;for(e=0,g=0;e<b;++e,g++){d=Bdb(Bdb(Ndb(Cdb(a[e],yxe),Cdb(a[e],yxe)),Cdb(c[g],yxe)),Cdb(Ydb(d),yxe));c[g]=Ydb(d);d=Udb(d,32);++g;d=Bdb(d,Cdb(c[g],yxe));c[g]=Ydb(d);d=Udb(d,32)}return c} +function xOc(a,b,c){var d,e,f,g,h,i,j,k;if(gr(b)){return}i=Kfb(UD(hFc(c.c,(yCc(),fCc))));j=RD(hFc(c.c,eCc),140);!j&&(j=new P2b);d=c.a;e=null;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),12);k=0;if(!e){k=j.d}else{k=i;k+=e.o.b}f=eJb(fJb(new gJb,g),a.f);Zjb(a.k,g,f);rIb(uIb(tIb(sIb(vIb(new wIb,0),eE($wnd.Math.ceil(k))),d),f));e=g;d=f}rIb(uIb(tIb(sIb(vIb(new wIb,0),eE($wnd.Math.ceil(j.a+e.o.b))),d),c.d))} +function K8c(a,b,c,d,e,f,g,h){var i,j,k,l,m,n;n=false;m=f-c.s;k=c.t-b.f+(j=S9c(c,m,false),j.a);if(d.g+h>m){return false}l=(i=S9c(d,m,false),i.a);if(k+h+l<=b.b){Q9c(c,f-c.s);c.c=true;Q9c(d,f-c.s);U9c(d,c.s,c.t+c.d+h);d.k=true;aad(c.q,d);n=true;if(e){Cad(b,d);d.j=b;if(a.c.length>g){Fad((tFb(g,a.c.length),RD(a.c[g],186)),d);(tFb(g,a.c.length),RD(a.c[g],186)).a.c.length==0&&Xmb(a,g)}}}return n} +function Qfc(a,b){var c,d,e,f,g,h;b.Ug('Partition midprocessing',1);e=new Tp;FDb(CDb(new SDb(null,new Swb(a.a,16)),new Ufc),new Wfc(e));if(e.d==0){return}h=RD(zDb(ODb((f=e.i,new SDb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);d=h.Kc();c=RD(d.Pb(),17);while(d.Ob()){g=RD(d.Pb(),17);Pfc(RD(Qc(e,c),21),RD(Qc(e,g),21));c=g}b.Vg()} +function G_b(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new bnb;f=(d=RD(mfb(E3),9),new Fsb(d,RD(WEb(d,d.length),9),0));g=new Ptd(e,f)}RD(g.a,15).Fc(b);b.k==(r3b(),m3b)&&RD(g.b,21).Fc(RD(mQb(b,(Ywc(),hwc)),64));for(i=new Anb(b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);for(k=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(h),new _3b(h)])));gs(k);){j=RD(hs(k),12);G_b(a,j.i,g)}}return g}return null} +function bAd(a,b){var c,d,e,f,g;if(a.Ab){if(a.Ab){g=a.Ab.i;if(g>0){e=RD(a.Ab.g,2033);if(b==null){for(f=0;f<g;++f){c=e[f];if(c.d==null){return c}}}else{for(f=0;f<g;++f){c=e[f];if(lhb(b,c.d)){return c}}}}}else{if(b==null){for(d=new dMd(a.Ab);d.e!=d.i.gc();){c=RD(bMd(d),598);if(c.d==null){return c}}}else{for(d=new dMd(a.Ab);d.e!=d.i.gc();){c=RD(bMd(d),598);if(lhb(b,c.d)){return c}}}}}return null} +function RDd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v;n=qEd(a,EGd(b),e);Jzd(n,zDd(e,uIe));o=null;p=e;q=yDd(p,xIe);r=new UEd(n);WDd(r.a,q);s=yDd(p,'endPoint');t=new YEd(n);YDd(t.a,s);u=wDd(p,nIe);v=new _Ed(n);ZDd(v.a,u);l=zDd(e,pIe);f=new QEd(a,n);SDd(f.a,f.b,l);m=zDd(e,oIe);g=new REd(a,n);TDd(g.a,g.b,m);j=wDd(e,rIe);h=new SEd(c,n);UDd(h.b,h.a,j);k=wDd(e,qIe);i=new TEd(d,n);VDd(i.b,i.a,k)} +function q2b(a,b,c){var d,e,f,g,h;h=null;switch(b.g){case 1:for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);if(Heb(TD(mQb(d,(Ywc(),mwc))))){return d}}h=new R3b;pQb(h,(Ywc(),mwc),(Geb(),true));break;case 2:for(g=new Anb(a.j);g.a<g.c.c.length;){f=RD(ynb(g),12);if(Heb(TD(mQb(f,(Ywc(),Gwc))))){return f}}h=new R3b;pQb(h,(Ywc(),Gwc),(Geb(),true));}if(h){P3b(h,a);Q3b(h,c);d2b(h.n,a.o,c)}return h} +function d7b(a,b){var c,d,e,f,g,h;h=-1;g=new Yub;for(d=new l4b(a.b);xnb(d.a)||xnb(d.b);){c=RD(xnb(d.a)?ynb(d.a):ynb(d.b),18);h=$wnd.Math.max(h,Kfb(UD(mQb(c,(yCc(),FAc)))));c.c==a?FDb(CDb(new SDb(null,new Swb(c.b,16)),new j7b),new l7b(g)):FDb(CDb(new SDb(null,new Swb(c.b,16)),new n7b),new p7b(g));for(f=Sub(g,0);f.b!=f.d.c;){e=RD(evb(f),72);nQb(e,(Ywc(),dwc))||pQb(e,dwc,c)}Tmb(b,g);Xub(g)}return h} +function _Tc(a,b,c,d,e){var f,g,h,i,j;h=e?d.b:d.a;if(Zsb(a.a,d)){return}j=h>c.s&&h<c.c;i=false;if(c.e.b!=0&&c.j.b!=0){i=i|($wnd.Math.abs(h-Kfb(UD(Qub(c.e))))<Vze&&$wnd.Math.abs(h-Kfb(UD(Qub(c.j))))<Vze);i=i|($wnd.Math.abs(h-Kfb(UD(Rub(c.e))))<Vze&&$wnd.Math.abs(h-Kfb(UD(Rub(c.j))))<Vze)}if(j||i){g=RD(mQb(b,(yCc(),RAc)),75);if(!g){g=new Ejd;pQb(b,RAc,g)}f=new sjd(d);Pub(g,f,g.c.b,g.c);Ysb(a.a,f)}} +function ZPb(a,b,c,d){var e,f,g,h,i,j,k;if(YPb(a,b,c,d)){return true}else{for(g=new Anb(b.f);g.a<g.c.c.length;){f=RD(ynb(g),334);h=false;i=a.j-b.j+c;j=i+b.o;k=a.k-b.k+d;e=k+b.p;switch(f.a.g){case 0:h=fQb(a,i+f.b.a,0,i+f.c.a,k-1);break;case 1:h=fQb(a,j,k+f.b.a,a.o-1,k+f.c.a);break;case 2:h=fQb(a,i+f.b.a,e,i+f.c.a,a.p-1);break;default:h=fQb(a,0,k+f.b.a,i-1,k+f.c.a);}if(h){return true}}}return false} +function yZc(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Processor set coordinates',1);a.a=b.b.b==0?1:b.b.b;j=null;d=Sub(b.b,0);while(!j&&d.b!=d.d.c){l=RD(evb(d),39);if(Heb(TD(mQb(l,(q$c(),n$c))))){j=l;i=l.e;i.a=RD(mQb(l,o$c),17).a;i.b=RD(mQb(l,p$c),17).a}}h=$Wc(j);k=1;do{h=zZc((e=h,c.eh(k),e));k=h.b/a.a|0}while(h.b!=0);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);ojd(f.e,new rjd(f.f.a/2,f.f.b/2))}c.Vg()} +function uYc(a,b,c){var d,e,f,g,h,i,j,k;c.Ug(MEe,1);akb(a.b);akb(a.a);h=null;f=Sub(b.b,0);while(!h&&f.b!=f.d.c){j=RD(evb(f),39);Heb(TD(mQb(j,(q$c(),n$c))))&&(h=j)}i=new Yub;Pub(i,h,i.c.b,i.c);tYc(a,i);for(k=Sub(b.b,0);k.b!=k.d.c;){j=RD(evb(k),39);g=WD(mQb(j,(q$c(),a$c)));e=Xjb(a.b,g)!=null?RD(Xjb(a.b,g),17).a:0;pQb(j,XZc,sgb(e));d=1+(Xjb(a.a,g)!=null?RD(Xjb(a.a,g),17).a:0);pQb(j,VZc,sgb(d))}c.Vg()} +function ikd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,LGe),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new lkd)));Agd(a,LGe,Eze,ekd);Agd(a,LGe,_ze,15);Agd(a,LGe,$ze,sgb(0));Agd(a,LGe,MGe,iGd($jd));Agd(a,LGe,jAe,iGd(akd));Agd(a,LGe,iAe,iGd(ckd));Agd(a,LGe,Dze,KGe);Agd(a,LGe,dAe,iGd(_jd));Agd(a,LGe,CAe,iGd(bkd));Agd(a,LGe,NGe,iGd(Yjd));Agd(a,LGe,YDe,iGd(Zjd))} +function c2b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return qpd(),opd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return qpd(),ppd}else if(j+h>g){return qpd(),Xod}break;case 4:case 3:if(k<0){return qpd(),Yod}else if(k+c>f){return qpd(),npd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(qpd(),ppd):i+d>=1&&i-d>=0?(qpd(),Xod):d<0.5?(qpd(),Yod):(qpd(),npd)} +function PNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Kfb(UD(mQb(b,(yCc(),bCc))));o=pwe*k;for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),30);j=new Anb(d.a);f=RD(ynb(j),10);l=XNc(a.a[f.p]);while(j.a<j.c.c.length){h=RD(ynb(j),10);m=XNc(a.a[h.p]);if(l!=m){n=bFc(a.b,f,h);g=f.n.b+f.o.b+f.d.a+l.a+n;i=h.n.b-h.d.d+m.a;if(g>i+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} +function MJb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new Tid;for(j=b.Kc();j.Ob();){h=RD(j.Pb(),853);for(l=new Anb(h.Rf());l.a<l.c.c.length;){k=RD(ynb(l),187);if(dE(k.of((umd(),Qkd)))===dE((Omd(),Nmd))){JJb(m,k,false,d,e,f,g);Sid(a,m)}}}for(i=c.Kc();i.Ob();){h=RD(i.Pb(),853);for(l=new Anb(h.Rf());l.a<l.c.c.length;){k=RD(ynb(l),187);if(dE(k.of((umd(),Qkd)))===dE((Omd(),Mmd))){JJb(m,k,true,d,e,f,g);Sid(a,m)}}}} +function PVc(a,b,c){var d,e,f,g,h,i,j;for(g=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));g.e!=g.i.gc();){f=RD(bMd(g),27);for(e=new is(Mr(zGd(f).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);if(!nzd(d)&&!nzd(d)&&!ozd(d)){i=RD(Wd(qtb(c.f,f)),39);j=RD(Wjb(c,AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))),39);if(!!i&&!!j){h=new WWc(i,j);pQb(h,(q$c(),h$c),d);kQb(h,d);Mub(i.d,h);Mub(j.b,h);Mub(b.a,h)}}}}} +function HNb(a,b){var c,d,e,f,g,h,i,j;for(i=RD(RD(Qc(a.r,b),21),87).Kc();i.Ob();){h=RD(i.Pb(),117);e=h.c?PKb(h.c):0;if(e>0){if(h.a){j=h.b.Mf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=RD(Vmb(h.c.d,0),187).Mf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(Rod(a.u)){f=wsd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.Mf().b&&(h.d.a=f.d+f.a-h.b.Mf().b)}}} +function yVb(){yVb=geb;lVb=new mGd((umd(),Rld),sgb(1));rVb=new mGd(fmd,80);qVb=new mGd($ld,5);ZUb=new mGd(Dkd,Yze);mVb=new mGd(Sld,sgb(1));pVb=new mGd(Vld,(Geb(),true));iVb=new A3b(50);hVb=new mGd(tld,iVb);_Ub=ald;jVb=Hld;$Ub=new mGd(Pkd,false);gVb=sld;eVb=mld;fVb=pld;dVb=kld;cVb=ild;kVb=Lld;bVb=(OUb(),HUb);sVb=MUb;aVb=GUb;nVb=JUb;oVb=LUb;vVb=mmd;xVb=qmd;uVb=lmd;tVb=kmd;wVb=(mqd(),jqd);new mGd(nmd,wVb)} +function VC(a,b){var c;switch(XC(a)){case 6:return bE(b);case 7:return _D(b);case 8:return $D(b);case 3:return Array.isArray(b)&&(c=XC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===kve;case 12:return b!=null&&(typeof b===gve||typeof b==kve);case 0:return QD(b,a.__elementTypeId$);case 2:return cE(b)&&!(b.Tm===keb);case 1:return cE(b)&&!(b.Tm===keb)||QD(b,a.__elementTypeId$);default:return true;}} +function oRb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} +function oWb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new Anb(a.f.e);e.a<e.c.c.length;){d=RD(ynb(e),153);if(b==d){continue}g=a.i[b.a][d.a];f+=g;c=bjd(b.d,d.d);c>0&&a.d!=(AWb(),zWb)&&(h+=g*(d.d.a+a.a[b.a][d.a]*(b.d.a-d.d.a)/c));c>0&&a.d!=(AWb(),xWb)&&(i+=g*(d.d.b+a.a[b.a][d.a]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new rjd(h/f,b.d.b);case 2:return new rjd(b.d.a,i/f);default:return new rjd(h/f,i/f);}} +function xsd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new XZd(D4,a,5)),a.a).i+2;g=new cnb(c);Rmb(g,new rjd(a.j,a.k));FDb(new SDb(null,(!a.a&&(a.a=new XZd(D4,a,5)),new Swb(a.a,16))),new Usd(g));Rmb(g,new rjd(a.b,a.c));b=1;while(b<g.c.length-1){d=(tFb(b-1,g.c.length),RD(g.c[b-1],8));e=(tFb(b,g.c.length),RD(g.c[b],8));f=(tFb(b+1,g.c.length),RD(g.c[b+1],8));d.a==e.a&&e.a==f.a||d.b==e.b&&e.b==f.b?Xmb(g,b):++b}return g} +function zgc(a,b){sgc();var c,d,e,f,g;g=RD(mQb(a.i,(yCc(),BBc)),101);f=a.j.g-b.j.g;if(f!=0||!(g==(Bod(),vod)||g==xod||g==wod)){return 0}if(g==(Bod(),vod)){c=RD(mQb(a,CBc),17);d=RD(mQb(b,CBc),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Qfb(a.n.a,b.n.a);case 2:return Qfb(a.n.b,b.n.b);case 3:return Qfb(b.n.a,a.n.a);case 4:return Qfb(b.n.b,a.n.b);default:throw Adb(new dgb(UAe));}} +function Bkc(a,b){var c,d,e,f,g,h,i;c=mGb(pGb(nGb(oGb(new qGb,b),new Vid(b.e)),kkc),a.a);b.j.c.length==0||eGb(RD(Vmb(b.j,0),60).a,c);i=new cHb;Zjb(a.e,c,i);g=new _sb;h=new _sb;for(f=new Anb(b.k);f.a<f.c.c.length;){e=RD(ynb(f),18);Ysb(g,e.c);Ysb(h,e.d)}d=g.a.gc()-h.a.gc();if(d<0){aHb(i,true,(Cmd(),ymd));aHb(i,false,zmd)}else if(d>0){aHb(i,false,(Cmd(),ymd));aHb(i,true,zmd)}Umb(b.g,new Elc(a,c));Zjb(a.g,b,c)} +function Ugb(){Ugb=geb;var a;Qgb=cD(WC(kE,1),Pwe,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]);Rgb=$C(kE,Pwe,28,37,15,1);Sgb=cD(WC(kE,1),Pwe,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]);Tgb=$C(lE,rxe,28,37,14,1);for(a=2;a<=36;a++){Rgb[a]=eE($wnd.Math.pow(a,Qgb[a]));Tgb[a]=Fdb(Sve,Rgb[a])}} +function tsd(a){var b;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i!=1){throw Adb(new agb(tHe+(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i))}b=new Ejd;!!BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))&&ye(b,usd(a,BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)),false));!!BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))&&ye(b,usd(a,BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84)),true));return b} +function zRc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(wQc(),vQc)?Z2b(b.b):a3b(b.b)):(e=a.a.c==(wQc(),uQc)?Z2b(b.b):a3b(b.b));f=false;for(d=new is(Mr(e.a.Kc(),new ir));gs(d);){c=RD(hs(d),18);g=Heb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!W0b(c)&&c.c.i.c==c.d.i.c){continue}if(Heb(a.a.n[a.a.g[b.b.p].p])||Heb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Zsb(a.b,a.a.g[rRc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function QJd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.Pj()){i=a.Qj();ZId(a,b,c);g=d==1?a.Ij(3,null,c.Kc().Pb(),b,i):a.Ij(5,null,c,b,i);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){j=a.xj(e);h=a.Nj(j,h);h=h}if(!h){a.Jj(g)}else{h.nj(g);h.oj()}}else{a.Jj(g)}}else{ZId(a,b,c);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){h=a.Nj(a.xj(e),h)}!!h&&h.oj()}}return true}} +function WJd(a,b,c){var d,e,f,g,h;if(a.Pj()){e=null;f=a.Qj();d=a.Ij(1,h=(g=a.Dj(b,a.Zi(b,c)),g),c,b,f);if(a.Mj()&&!(a.Yi()&&!!h?pb(h,c):dE(h)===dE(c))){!!h&&(e=a.Oj(h,e));e=a.Nj(c,e);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}return h}else{h=(g=a.Dj(b,a.Zi(b,c)),g);if(a.Mj()&&!(a.Yi()&&!!h?pb(h,c):dE(h)===dE(c))){e=null;!!h&&(e=a.Oj(h,null));e=a.Nj(c,e);!!e&&e.oj()}return h}} +function nUb(a,b){var c,d,e,f,g,h,i,j,k;a.e=b;a.f=RD(mQb(b,(JVb(),IVb)),234);eUb(b);a.d=$wnd.Math.max(b.e.c.length*16+b.c.c.length,256);if(!Heb(TD(mQb(b,(yVb(),_Ub))))){k=a.e.e.c.length;for(i=new Anb(b.e);i.a<i.c.c.length;){h=RD(ynb(i),153);j=h.d;j.a=Iwb(a.f)*k;j.b=Iwb(a.f)*k}}c=b.b;for(f=new Anb(b.c);f.a<f.c.c.length;){e=RD(ynb(f),289);d=RD(mQb(e,oVb),17).a;if(d>0){for(g=0;g<d;g++){Rmb(c,new WTb(e))}YTb(e)}}} +function NId(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;m=new OC(a.Zg());sC(b,GIe,m);if(c&&!a.Xg().a.dc()){k=new MB;sC(b,'logs',k);h=0;for(o=new Ppb(a.Xg().b.Kc());o.b.Ob();){n=WD(o.b.Pb());l=new OC(n);JB(k,h);LB(k,h,l);++h}}if(d){j=new hC(a.Wg());sC(b,'executionTime',j)}if(!a.Yg().a.dc()){g=new MB;sC(b,iIe,g);h=0;for(f=new Ppb(a.Yg().b.Kc());f.b.Ob();){e=RD(f.b.Pb(),871);i=new uC;JB(g,h);LB(g,h,i);NId(e,i,c,d);++h}}} +function rue(){rue=geb;Gie();que=new sue;cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(wLe)])]);cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(xLe)])]);cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(yLe)]),cD(WC(B7,1),_Le,600,0,[new oue(xLe)])]);new ejb('-1');cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue('\\c+')])]);new ejb('0');new ejb('0');new ejb('1');new ejb('0');new ejb(ILe)} +function wac(a,b){var c,d,e,f,g,h,i,j,k,l;b.Ug('Hypernodes processing',1);for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(h=new Anb(d.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(Heb(TD(mQb(g,(yCc(),MAc))))&&g.j.c.length<=2){l=0;k=0;c=0;f=0;for(j=new Anb(g.j);j.a<j.c.c.length;){i=RD(ynb(j),12);switch(i.j.g){case 1:++l;break;case 2:++k;break;case 3:++c;break;case 4:++f;}}l==0&&c==0&&vac(a,g,f<=k)}}}b.Vg()} +function MUc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new Anb(b);g.a<g.c.c.length;){f=RD(ynb(g),18);i=f.c;if(c.a._b(i)){j=(dVc(),bVc)}else if(d.a._b(i)){j=(dVc(),cVc)}else{throw Adb(new agb('Source port must be in one of the port sets.'))}k=f.d;if(c.a._b(k)){l=(dVc(),bVc)}else if(d.a._b(k)){l=(dVc(),cVc)}else{throw Adb(new agb('Target port must be in one of the port sets.'))}h=new wVc(f,j,l);Zjb(a.b,f,h);ZEb(e.c,h)}} +function i2d(a){var b,c;if(!!a.c&&a.c.Vh()){c=RD(a.c,54);a.c=RD(Vvd(a,c),142);if(a.c!=c){(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,2,c,a.c));if(ZD(a.Cb,411)){a.Db>>16==-15&&a.Cb.Yh()&&pKd(new O3d(a.Cb,9,13,c,a.c,fZd(o4d(RD(a.Cb,62)),a)))}else if(ZD(a.Cb,90)){if(a.Db>>16==-23&&a.Cb.Yh()){b=a.c;ZD(b,90)||(b=(JTd(),zTd));ZD(c,90)||(c=(JTd(),zTd));pKd(new O3d(a.Cb,9,10,c,b,fZd(tYd(RD(a.Cb,29)),a)))}}}}return a.c} +function lac(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Hyperedge merging',1);jac(a,b);i=new Jkb(b.b,0);while(i.b<i.d.gc()){h=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),30));k=h.a;if(k.c.length==0){continue}d=null;e=null;f=null;g=null;for(j=0;j<k.c.length;j++){d=(tFb(j,k.c.length),RD(k.c[j],10));e=d.k;if(e==(r3b(),o3b)&&g==o3b){l=hac(d,f);if(l.a){kac(d,f,l.b,l.c);tFb(j,k.c.length);$Eb(k.c,j,1);--j;d=f;e=g}}f=d;g=e}}c.Vg()} +function U$d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=V$d(a,b);c=V$d(a,c);d=h2d(b);if(d){k=h2d(c);if(k!=d){if(!k){return false}else{i=d.mk();o=k.mk();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new XZd(o7,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new XZd(o7,c,1)),c.d);if(f==m.i){for(j=0;j<f;++j){e=RD(QHd(g,j),89);l=RD(QHd(m,j),89);if(!U$d(a,e,l)){return false}}}return true}}else{h=b.e;n=c.e;return h==n}}} +function vge(a,b,c,d){var e,f,g,h,i,j,k,l;if(qke(a.e,b)){l=pke(a.e.Dh(),b);f=RD(a.g,124);k=null;i=-1;h=-1;e=0;for(j=0;j<a.i;++j){g=f[j];if(l.am(g.Lk())){e==c&&(i=j);if(e==d){h=j;k=g.md()}++e}}if(i==-1){throw Adb(new veb(MIe+c+NIe+e))}if(h==-1){throw Adb(new veb(OIe+d+NIe+e))}uLd(a,i,h);Mvd(a.e)&&eZd(a,fge(a,7,b,sgb(d),k,c,true));return k}else{throw Adb(new agb('The feature must be many-valued to support move'))}} +function j2b(a,b,c,d){var e,f,g,h,i;i=new sjd(b.n);i.a+=b.o.a/2;i.b+=b.o.b/2;h=Kfb(UD(mQb(b,(yCc(),ABc))));f=a.f;g=a.d;e=a.c;switch(RD(mQb(b,(Ywc(),hwc)),64).g){case 1:i.a+=g.b+e.a-c/2;i.b=-d-h;b.n.b=-(g.d+h+e.b);break;case 2:i.a=f.a+g.b+g.c+h;i.b+=g.d+e.b-d/2;b.n.a=f.a+g.c+h-e.a;break;case 3:i.a+=g.b+e.a-c/2;i.b=f.b+g.d+g.a+h;b.n.b=f.b+g.a+h-e.b;break;case 4:i.a=-c-h;i.b+=g.d+e.b-d/2;b.n.a=-(g.b+h+e.a);}return i} +function Z4b(a){var b,c,d,e,f,g;d=new d1b;kQb(d,a);dE(mQb(d,(yCc(),rAc)))===dE((Cmd(),Amd))&&pQb(d,rAc,i2b(d));if(mQb(d,(rid(),qid))==null){g=RD(Lje(a),167);pQb(d,qid,fE(g.of(qid)))}pQb(d,(Ywc(),Awc),a);pQb(d,kwc,(b=RD(mfb(iX),9),new Fsb(b,RD(WEb(b,b.length),9),0)));e=FJb((!vCd(a)?null:(lud(),new zud(vCd(a))),lud(),new Fud(!vCd(a)?null:new zud(vCd(a)),a)),zmd);f=RD(mQb(d,qBc),107);c=d.d;B2b(c,f);B2b(c,e);return d} +function Nec(a,b,c){var d,e;d=b.c.i;e=c.d.i;if(d.k==(r3b(),o3b)){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12));pQb(a,uwc,TD(mQb(d,uwc)))}else if(d.k==n3b){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12));pQb(a,uwc,(Geb(),true))}else if(e.k==n3b){pQb(a,(Ywc(),vwc),RD(mQb(e,vwc),12));pQb(a,wwc,RD(mQb(e,wwc),12));pQb(a,uwc,(Geb(),true))}else{pQb(a,(Ywc(),vwc),b.c);pQb(a,wwc,c.d)}} +function wJb(a){var b,c,d,e,f,g,h;a.o=new wmb;d=new Yub;for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);CIb(f).c.length==1&&(Pub(d,f,d.c.b,d.c),true)}while(d.b!=0){f=RD(d.b==0?null:(sFb(d.b!=0),Wub(d,d.a.a)),125);if(CIb(f).c.length==0){continue}b=RD(Vmb(CIb(f),0),218);c=f.g.a.c.length>0;h=oIb(b,f);c?FIb(h.b,b):FIb(h.g,b);CIb(h).c.length==1&&(Pub(d,h,d.c.b,d.c),true);e=new Ptd(f,b);hmb(a.o,e);Ymb(a.e.a,f)}} +function SQb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(Oid(a.b).a-Oid(b.b).a);h=$wnd.Math.abs(Oid(a.b).b-Oid(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} +function LUc(a){var b,c,d,e;NUc(a,a.e,a.f,(dVc(),bVc),true,a.c,a.i);NUc(a,a.e,a.f,bVc,false,a.c,a.i);NUc(a,a.e,a.f,cVc,true,a.c,a.i);NUc(a,a.e,a.f,cVc,false,a.c,a.i);MUc(a,a.c,a.e,a.f,a.i);d=new Jkb(a.i,0);while(d.b<d.d.gc()){b=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),131));e=new Jkb(a.i,d.b);while(e.b<e.d.gc()){c=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),131));KUc(b,c)}}WUc(a.i,RD(mQb(a.d,(Ywc(),Lwc)),234));ZUc(a.i)} +function FXd(a,b){var c,d;if(b!=null){d=DXd(a);if(d){if((d.i&1)!=0){if(d==xdb){return $D(b)}else if(d==kE){return ZD(b,17)}else if(d==jE){return ZD(b,161)}else if(d==gE){return ZD(b,222)}else if(d==hE){return ZD(b,180)}else if(d==iE){return _D(b)}else if(d==wdb){return ZD(b,191)}else if(d==lE){return ZD(b,168)}}else{return PRd(),c=RD(Wjb(ORd,d),57),!c||c.fk(b)}}else if(ZD(b,58)){return a.dl(RD(b,58))}}return false} +function zqe(){zqe=geb;var a,b,c,d,e,f,g,h,i;xqe=$C(gE,YHe,28,255,15,1);yqe=$C(hE,zwe,28,64,15,1);for(b=0;b<255;b++){xqe[b]=-1}for(c=90;c>=65;c--){xqe[c]=c-65<<24>>24}for(d=122;d>=97;d--){xqe[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){xqe[e]=e-48+52<<24>>24}xqe[43]=62;xqe[47]=63;for(f=0;f<=25;f++)yqe[f]=65+f&Bwe;for(g=26,i=0;g<=51;++g,i++)yqe[g]=97+i&Bwe;for(a=52,h=0;a<=61;++a,h++)yqe[a]=48+h&Bwe;yqe[62]=43;yqe[63]=47} +function uib(a,b){var c,d,e,f,g,h;e=xib(a);h=xib(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.f<b.f?-1:a.f>b.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*xxe)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*xxe)+1);if(c>d+1){return e}else if(c<d-1){return -e}else{f=(!a.c&&(a.c=ojb(Hdb(a.f))),a.c);g=(!b.c&&(b.c=ojb(Hdb(b.f))),b.c);d<0?(f=Wib(f,Sjb(-d))):d>0&&(g=Wib(g,Sjb(d)));return Qib(f,g)}}else return e<h?-1:1} +function pUb(a,b,c){var d,e,f,g,h,i,j,k;c.Ug(Pze,1);a.vf(b);f=0;while(a.xf(f)&&!c.$g()){a.wf();for(k=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(k);){i=RD(hs(k),309);for(h=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(h);){g=RD(hs(h),309);if(g!=i){e=a.uf(g,i);!!e&&$id(i.c,e)}}}for(j=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(j);){i=RD(hs(j),309);d=i.c;_id(d,-a.d,-a.d,a.d,a.d);$id(i.d,d);d.a=0;d.b=0}++f}c.Vg()} +function H$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new pjd}j=0;l=0;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Kfb(UD(mQb(RD(a.Kc().Pb(),36),(yCc(),Tzc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=RD(h.Pb(),36);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}w$b(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new rjd(c+b,n+i+b)} +function osd(a,b){var c,d,e,f,g,h,i;if(!MCd(a)){throw Adb(new dgb(sHe))}d=MCd(a);f=d.g;e=d.f;if(f<=0&&e<=0){return qpd(),opd}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return qpd(),ppd}else if(h+a.g>f){return qpd(),Xod}break;case 4:case 3:if(i<0){return qpd(),Yod}else if(i+a.f>e){return qpd(),npd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(qpd(),ppd):g+c>=1&&g-c>=0?(qpd(),Xod):c<0.5?(qpd(),Yod):(qpd(),npd)} +function Djb(a,b,c,d,e){var f,g;f=Bdb(Cdb(b[0],yxe),Cdb(d[0],yxe));a[0]=Ydb(f);f=Tdb(f,32);if(c>=e){for(g=1;g<e;g++){f=Bdb(f,Bdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<c;g++){f=Bdb(f,Cdb(b[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}}else{for(g=1;g<c;g++){f=Bdb(f,Bdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<e;g++){f=Bdb(f,Cdb(d[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}}Ddb(f,0)!=0&&(a[g]=Ydb(f))} +function yte(a){Vse();var b,c,d,e,f,g;if(a.e!=4&&a.e!=5)throw Adb(new agb('Token#complementRanges(): must be RANGE: '+a.e));f=a;vte(f);ste(f);d=f.b.length+2;f.b[0]==0&&(d-=2);c=f.b[f.b.length-1];c==MLe&&(d-=2);e=(++Use,new xte(4));e.b=$C(kE,Pwe,28,d,15,1);g=0;if(f.b[0]>0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b<f.b.length-2;b+=2){e.b[g++]=f.b[b]+1;e.b[g++]=f.b[b+1]-1}if(c!=MLe){e.b[g++]=c+1;e.b[g]=MLe}e.a=true;return e} +function zac(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Layer constraint edge reversal',1);for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);k=-1;c=new bnb;j=t2b(f.a);for(e=0;e<j.length;e++){d=RD(mQb(j[e],(Ywc(),owc)),311);if(k==-1){d!=(Gvc(),Fvc)&&(k=e)}else{if(d==(Gvc(),Fvc)){g3b(j[e],null);f3b(j[e],k++,f)}}d==(Gvc(),Dvc)&&(ZEb(c.c,j[e]),true)}for(i=new Anb(c);i.a<i.c.c.length;){h=RD(ynb(i),10);g3b(h,null);g3b(h,f)}}b.Vg()} +function nLd(a,b,c){var d,e,f,g,h,i,j,k;d=c.gc();if(d==0){return false}else{if(a.Pj()){j=a.Qj();IHd(a,b,c);g=d==1?a.Ij(3,null,c.Kc().Pb(),b,j):a.Ij(5,null,c,b,j);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){k=a.g[e];h=a.Nj(k,h);h=a.Uj(k,h)}if(!h){a.Jj(g)}else{h.nj(g);h.oj()}}else{a.Jj(g)}}else{IHd(a,b,c);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){i=a.g[e];h=a.Nj(i,h)}!!h&&h.oj()}}return true}} +function m9b(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Hierarchical port dummy size processing',1);i=new bnb;k=new bnb;d=Kfb(UD(mQb(a,(yCc(),UBc))));c=d*2;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i.c.length=0;k.c.length=0;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){j=RD(mQb(g,(Ywc(),hwc)),64);j==(qpd(),Yod)?(ZEb(i.c,g),true):j==npd&&(ZEb(k.c,g),true)}}n9b(i,true,c);n9b(k,false,c)}b.Vg()} +function wSc(a,b,c,d){var e,f,g,h,i;for(g=new Anb(a.k);g.a<g.c.c.length;){e=RD(ynb(g),132);if(!d||e.c==(fTc(),dTc)){i=e.b;if(i.g<0&&e.d>0){PSc(i,i.d-e.d);e.c==(fTc(),dTc)&&NSc(i,i.a-e.d);i.d<=0&&i.i>0&&(Pub(b,i,b.c.b,b.c),true)}}}for(f=new Anb(a.f);f.a<f.c.c.length;){e=RD(ynb(f),132);if(!d||e.c==(fTc(),dTc)){h=e.a;if(h.g<0&&e.d>0){QSc(h,h.i-e.d);e.c==(fTc(),dTc)&&OSc(h,h.b-e.d);h.i<=0&&h.d>0&&(Pub(c,h,c.c.b,c.c),true)}}}} +function drd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;yob();_mb(a,new Mrd);g=gv(a);n=new bnb;m=new bnb;h=null;i=0;while(g.b!=0){f=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),163);if(!h||urd(h)*trd(h)/2<urd(f)*trd(f)){h=f;ZEb(n.c,f)}else{i+=urd(f)*trd(f);ZEb(m.c,f);if(m.c.length>1&&(i>urd(h)*trd(h)/2||g.b==0)){l=new zrd(m);k=urd(h)/trd(h);j=ird(l,b,new z3b,c,d,e,k);$id(hjd(l.e),j);h=l;ZEb(n.c,l);i=0;m.c.length=0}}}Tmb(n,m);return n} +function hib(a,b,c,d,e){gib();var f,g,h,i,j,k,l;vFb(a,'src');vFb(c,'dest');l=rb(a);i=rb(c);qFb((l.i&4)!=0,'srcType is not an array');qFb((i.i&4)!=0,'destType is not an array');k=l.c;g=i.c;qFb((k.i&1)!=0?k==g:(g.i&1)==0,"Array types don't match");iib(a,b,c,d,e);if((k.i&1)==0&&l!=i){j=SD(a);f=SD(c);if(dE(a)===dE(c)&&b<d){b+=e;for(h=d+e;h-->d;){bD(f,h,j[--b])}}else{for(h=d+e;d<h;){bD(f,d++,j[b++])}}}else{VEb(a,b,c,d,e,true)}} +function crd(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Box layout',2);e=Mfb(UD(Gxd(a,(hkd(),gkd))));f=RD(Gxd(a,dkd),107);c=Heb(TD(Gxd(a,$jd)));d=Heb(TD(Gxd(a,_jd)));switch(RD(Gxd(a,Yjd),320).g){case 0:g=(k=new dnb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a)),yob(),_mb(k,new prd(d)),k);h=vsd(a);i=UD(Gxd(a,Xjd));(i==null||(uFb(i),i)<=0)&&(i=1.3);j=grd(g,e,f,h.a,h.b,c,(uFb(i),i));Esd(a,j.a,j.b,false,true);break;default:hrd(a,e,f,c);}b.Vg()} +function uUc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=tUc(a,c);for(i=0;i<b;i++){Ikb(e,c);n=new bnb;o=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),418));for(k=m+i;k<a.b;k++){h=o;o=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),418));Rmb(n,new AUc(h,o,c))}for(l=m+i;l<a.b;l++){sFb(d.b>0);d.a.Xb(d.c=--d.b);l>m+i&&Ckb(d)}for(g=new Anb(n);g.a<g.c.c.length;){f=RD(ynb(g),418);Ikb(d,f)}if(i<b-1){for(j=m+i;j<a.b;j++){sFb(d.b>0);d.a.Xb(d.c=--d.b)}}}} +function gte(){Vse();var a,b,c,d,e,f;if(Fse)return Fse;a=(++Use,new xte(4));ute(a,hte(WLe,true));wte(a,hte('M',true));wte(a,hte('C',true));f=(++Use,new xte(4));for(d=0;d<11;d++){rte(f,d,d)}b=(++Use,new xte(4));ute(b,hte('M',true));rte(b,4448,4607);rte(b,65438,65439);e=(++Use,new iue(2));hue(e,a);hue(e,Ese);c=(++Use,new iue(2));c.Jm($se(f,hte('L',true)));c.Jm(b);c=(++Use,new Kte(3,c));c=(++Use,new Qte(e,c));Fse=c;return Fse} +function vhb(a,b){var c,d,e,f,g,h,i,j;c=new RegExp(b,'g');i=$C(qJ,Nve,2,0,6,1);d=0;j=a;f=null;while(true){h=c.exec(j);if(h==null||j==''){i[d]=j;break}else{g=h.index;i[d]=(AFb(0,g,j.length),j.substr(0,g));j=zhb(j,g+h[0].length,j.length);c.lastIndex=0;if(f==j){i[d]=(AFb(0,1,j.length),j.substr(0,1));j=(BFb(1,j.length+1),j.substr(1))}f=j;++d}}if(a.length>0){e=i.length;while(e>0&&i[e-1]==''){--e}e<i.length&&(i.length=e)}return i} +function h_c(){h_c=geb;U$c=new A3b(20);T$c=new mGd((umd(),tld),U$c);_$c=new mGd(fmd,20);$$c=new mGd(_ld,3);E$c=new mGd(Dkd,Yze);X$c=new mGd(Rld,sgb(1));Z$c=new mGd(Vld,(Geb(),true));G$c=Mkd;I$c=(Cmd(),Amd);H$c=new mGd(Nkd,I$c);L$c=ald;M$c=bld;O$c=kld;P$c=mld;Q$c=nld;R$c=pld;N$c=ild;S$c=sld;V$c=Lld;g_c=(B$c(),z$c);Y$c=w$c;c_c=mmd;e_c=qmd;b_c=lmd;a_c=kmd;d_c=(mqd(),jqd);new mGd(nmd,d_c);W$c=v$c;K$c=t$c;f_c=y$c;F$c=r$c;J$c=s$c} +function bgd(a){var b,c;b=WD(Gxd(a,(umd(),Akd)));if(cgd(b,a)){return}if(!Hxd(a,Tld)&&((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i!=0||Heb(TD(Gxd(a,$kd))))){if(b==null||Dhb(b).length==0){if(!cgd(sxe,a)){c=Zhb(Zhb(new dib('Unable to load default layout algorithm '),sxe),' for unconfigured node ');Csd(a,c);throw Adb(new Jed(c.a))}}else{c=Zhb(Zhb(new dib("Layout algorithm '"),b),"' not found for ");Csd(a,c);throw Adb(new Jed(c.a))}}} +function $Kb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];dKb(e,n,m)}}else{d=bLb(a,false);dKb(a.a[0],c.c+b.b,d[0]);dKb(a.a[2],c.c+c.b-b.c-d[2],d[2]);l=c.b-b.b-b.c;if(d[0]>0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);dKb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];ZD(e,336)&&RD(e,336).lf()}} +function iRc(a){var b,c,d,e,f,g,h,i,j,k,l;l=new hRc;l.d=0;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);l.d+=f.a.c.length}d=0;e=0;l.a=$C(kE,Pwe,28,a.b.c.length,15,1);j=0;k=0;l.e=$C(kE,Pwe,28,l.d,15,1);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);b.p=d++;l.a[b.p]=e++;k=0;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j++;l.e[h.p]=k++}}l.c=new mRc(l);l.b=ev(l.d);jRc(l,a);l.f=ev(l.d);kRc(l,a);return l} +function M9c(a,b){var c,d,e,f;f=RD(Vmb(a.n,a.n.c.length-1),209).d;a.p=$wnd.Math.min(a.p,b.g);a.r=$wnd.Math.max(a.r,f);a.g=$wnd.Math.max(a.g,b.g+(a.b.c.length==1?0:a.i));a.o=$wnd.Math.min(a.o,b.f);a.e+=b.f+(a.b.c.length==1?0:a.i);a.f=$wnd.Math.max(a.f,b.f);e=a.n.c.length>0?(a.n.c.length-1)*a.i:0;for(d=new Anb(a.n);d.a<d.c.c.length;){c=RD(ynb(d),209);e+=c.a}a.d=e;a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);Ead(a.j)} +function CTb(a,b){var c,d,e,f,g,h,i,j,k,l;k=TD(mQb(b,(yVb(),pVb)));if(k==null||(uFb(k),k)){l=$C(xdb,Hye,28,b.e.c.length,16,1);g=yTb(b);e=new Yub;for(j=new Anb(b.e);j.a<j.c.c.length;){h=RD(ynb(j),153);c=zTb(a,h,null,null,l,g);if(c){kQb(c,b);Pub(e,c,e.c.b,e.c)}}if(e.b>1){for(d=Sub(e,0);d.b!=d.d.c;){c=RD(evb(d),235);f=0;for(i=new Anb(c.e);i.a<i.c.c.length;){h=RD(ynb(i),153);h.a=f++}}}return e}return dv(cD(WC(tP,1),Jze,235,0,[b]))} +function rYd(a){var b,c,d,e,f,g,h;if(!a.g){h=new Z$d;b=iYd;g=b.a.zc(a,b);if(g==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);YGd(h,rYd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}e=h.i;for(f=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));f.e!=f.i.gc();++e){BWd(RD(bMd(f),461),e)}YGd(h,(!a.s&&(a.s=new C5d(y7,a,21,17)),a.s));VHd(h);a.g=new R$d(a,h);a.i=RD(h.g,254);a.i==null&&(a.i=kYd);a.p=null;yYd(a).b&=-5}return a.g} +function yee(a,b){var c,d,e,f,g,h,i,j,k;c=b.qi(a.a);if(c){i=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),'memberTypes'));if(i!=null){j=new bnb;for(f=vhb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];d=e.lastIndexOf('#');k=d==-1?Wee(a,b.jk(),e):d==0?Vee(a,null,(BFb(1,e.length+1),e.substr(1))):Vee(a,(AFb(0,d,e.length),e.substr(0,d)),(BFb(d+1,e.length+1),e.substr(d+1)));ZD(k,156)&&Rmb(j,RD(k,156))}return j}}return yob(),yob(),vob} +function _Kb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;d=a.i;c=a.n;if(a.b==0){b=aLb(a,false);eKb(a.a[0],d.d+c.d,b[0]);eKb(a.a[2],d.d+d.a-c.a-b[2],b[2]);m=d.a-c.d-c.a;l=m;if(b[0]>0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);eKb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];eKb(e,o,n)}}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];ZD(e,336)&&RD(e,336).mf()}} +function Erc(a){var b,c,d,e,f,g,h,i,j,k;k=$C(kE,Pwe,28,a.b.c.length+1,15,1);j=new _sb;d=0;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);k[d++]=j.a.gc();for(i=new Anb(e.a);i.a<i.c.c.length;){g=RD(ynb(i),10);for(c=new is(Mr(a3b(g).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);j.a.zc(b,j)}}for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);for(c=new is(Mr(Z2b(g).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);j.a.Bc(b)!=null}}}return k} +function dge(a,b,c,d){var e,f,g,h,i;i=pke(a.e.Dh(),b);e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&pb(f,c)){return true}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(i.am(f.Lk())&&pb(c,f.md())){return true}}if(d){for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&dE(c)===dE(Age(a,RD(f.md(),58)))){return true}}}}else{for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&f.md()==null){return false}}}return false} +function wee(a,b){var c,d,e,f,g,h;c=b.qi(a.a);if(c){h=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),FIe));if(h!=null){e=thb(h,Fhb(35));d=b.qk();if(e==-1){g=Uee(a,BXd(d));f=h}else if(e==0){g=null;f=(BFb(1,h.length+1),h.substr(1))}else{g=(AFb(0,e,h.length),h.substr(0,e));f=(BFb(e+1,h.length+1),h.substr(e+1))}switch(yfe(Qee(a,b))){case 2:case 3:{return Jee(a,d,g,f)}case 0:case 4:case 5:case 6:{return Mee(a,d,g,f)}}}}return null} +function FQb(a,b,c,d){var e,f,g,h;h=c;for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),225);e=RD(f.b,68);if($y(a.b.c,e.b.c+e.b.b)<=0&&$y(e.b.c,a.b.c+a.b.b)<=0&&$y(a.b.d,e.b.d+e.b.a)<=0&&$y(e.b.d,a.b.d+a.b.a)<=0){if($y(e.b.c,a.b.c+a.b.b)==0&&d.a<0||$y(e.b.c+e.b.b,a.b.c)==0&&d.a>0||$y(e.b.d,a.b.d+a.b.a)==0&&d.b<0||$y(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,PQb(a,e,d))}h=$wnd.Math.min(h,FQb(a,f,h,d))}return h} +function lsd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw Adb(new agb('The vector chain must contain at least a source and a target point.'))}e=(sFb(a.b!=0),RD(a.a.a.c,8));Nzd(b,e.a,e.b);i=new mMd((!b.a&&(b.a=new XZd(D4,b,5)),b.a));g=Sub(a,1);while(g.a<a.b-1){h=RD(evb(g),8);if(i.e!=i.i.gc()){c=RD(bMd(i),377)}else{c=(bvd(),d=new Xxd,d);kMd(i,c)}Uxd(c,h.a,h.b)}while(i.e!=i.i.gc()){bMd(i);cMd(i)}f=(sFb(a.b!=0),RD(a.c.b.c,8));Gzd(b,f.a,f.b)} +function Ege(a,b,c,d){var e,f,g,h,i,j;j=pke(a.e.Dh(),b);g=RD(a.g,124);if(qke(a.e,b)){if(b.Si()){f=kge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0);if(f>=0&&f!=c){throw Adb(new agb(LIe))}}e=0;for(i=0;i<a.i;++i){h=g[i];if(j.am(h.Lk())){if(e==c){return RD(eHd(a,i,(nke(),RD(b,69).xk()?RD(d,76):oke(b,d))),76)}++e}}throw Adb(new veb(HJe+c+NIe+e))}else{for(i=0;i<a.i;++i){h=g[i];if(j.am(h.Lk())){return nke(),RD(b,69).xk()?h:h.md()}}return null}} +function Epc(a,b){var c,d,e,f,g,h,i,j,k;c=0;for(e=new Anb((tFb(0,a.c.length),RD(a.c[0],105)).g.b.j);e.a<e.c.c.length;){d=RD(ynb(e),12);d.p=c++}b==(qpd(),Yod)?_mb(a,new Mpc):_mb(a,new Qpc);h=0;k=a.c.length-1;while(h<k){g=(tFb(h,a.c.length),RD(a.c[h],105));j=(tFb(k,a.c.length),RD(a.c[k],105));f=b==Yod?g.c:g.a;i=b==Yod?j.a:j.c;Gpc(g,b,(enc(),cnc),f);Gpc(j,b,bnc,i);++h;--k}h==k&&Gpc((tFb(h,a.c.length),RD(a.c[h],105)),b,(enc(),anc),null)} +function lJc(a,b,c,d){var e,f,g,h,i,j;g=new zJc(a,b,c);i=new Jkb(d,0);e=false;while(i.b<i.d.gc()){h=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),239));if(h==b||h==c){Ckb(i)}else if(!e&&Kfb(pJc(h.g,h.d[0]).a)>Kfb(pJc(g.g,g.d[0]).a)){sFb(i.b>0);i.a.Xb(i.c=--i.b);Ikb(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new bnb),h.e).Mc(b);j=(!h.e&&(h.e=new bnb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new bnb),h.e).Fc(g);++g.c}}}e||(ZEb(d.c,g),true)} +function H3c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;l=a.a.i+a.a.g/2;m=a.a.i+a.a.g/2;o=b.i+b.g/2;q=b.j+b.f/2;h=new rjd(o,q);j=RD(Gxd(b,(umd(),Qld)),8);j.a=j.a+l;j.b=j.b+m;f=(h.b-j.b)/(h.a-j.a);d=h.b-f*h.a;p=c.i+c.g/2;r=c.j+c.f/2;i=new rjd(p,r);k=RD(Gxd(c,Qld),8);k.a=k.a+l;k.b=k.b+m;g=(i.b-k.b)/(i.a-k.a);e=i.b-g*i.a;n=(d-e)/(g-f);if(j.a<n&&h.a<n||n<j.a&&n<h.a){return false}else if(k.a<n&&i.a<n||n<k.a&&n<i.a){return false}return true} +function GDd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=RD(Wjb(a.c,b),190);if(!m){throw Adb(new CDd('Edge did not exist in input.'))}j=uDd(m);f=cve((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a));h=!f;if(h){n=new MB;c=new pFd(a,j,n);ave((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a),c);sC(m,mIe,n)}e=Hxd(b,(umd(),cld));if(e){k=RD(Gxd(b,cld),75);g=!k||bve(k);i=!g;if(i){l=new MB;d=new xFd(l);xgb(k,d);sC(m,'junctionPoints',l)}}sDd(m,'container',kzd(b).k);return null} +function fZc(a,b,c,d){var e,f,g,h,i,j;if(!gr(b)){j=c.eh((ZD(b,16)?RD(b,16).gc():Kr(b.Kc()))/a.a|0);j.Ug(OEe,1);i=new iZc;h=0;if(d==(Cmd(),ymd)||d==zmd){for(g=b.Kc();g.Ob();){e=RD(g.Pb(),39);i=Al(cD(WC(cJ,1),rve,20,0,[i,new dXc(e)]));h<e.f.a&&(h=e.f.a)}}else{for(g=b.Kc();g.Ob();){e=RD(g.Pb(),39);i=Al(cD(WC(cJ,1),rve,20,0,[i,new dXc(e)]));h<e.f.b&&(h=e.f.b)}}for(f=b.Kc();f.Ob();){e=RD(f.Pb(),39);pQb(e,(q$c(),d$c),h)}j.Vg();fZc(a,i,c,d)}} +function XFb(a,b,c){var d,e,f,g,h,i,j,k;this.a=a;this.b=b;this.c=c;this.e=dv(cD(WC($M,1),rve,177,0,[new TFb(a,b),new TFb(b,c),new TFb(c,a)]));this.f=dv(cD(WC(l3,1),Nve,8,0,[a,b,c]));this.d=(d=ojd(ajd(this.b),this.a),e=ojd(ajd(this.c),this.a),f=ojd(ajd(this.c),this.b),g=d.a*(this.a.a+this.b.a)+d.b*(this.a.b+this.b.b),h=e.a*(this.a.a+this.c.a)+e.b*(this.a.b+this.c.b),i=2*(d.a*f.b-d.b*f.a),j=(e.b*g-d.b*h)/i,k=(d.a*h-e.a*g)/i,new rjd(j,k))} +function X0b(a,b){var c,d,e,f,g,h;f=a.c;g=a.d;Y0b(a,null);Z0b(a,null);b&&Heb(TD(mQb(g,(Ywc(),mwc))))?Y0b(a,q2b(g.i,(BEc(),zEc),(qpd(),Xod))):Y0b(a,g);b&&Heb(TD(mQb(f,(Ywc(),Gwc))))?Z0b(a,q2b(f.i,(BEc(),yEc),(qpd(),ppd))):Z0b(a,f);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),72);e=RD(mQb(c,(yCc(),wAc)),278);e==(Omd(),Nmd)?pQb(c,wAc,Mmd):e==Mmd&&pQb(c,wAc,Nmd)}h=Heb(TD(mQb(a,(Ywc(),Nwc))));pQb(a,Nwc,(Geb(),h?false:true));a.a=Ijd(a.a)} +function lWc(a,b){var c,d,e,f,g;c=jWc(RD(mQb(b,(h_c(),H$c)),88));if(a.b.b==0){return null}g=RD(zDb(GDb(new SDb(null,new Swb(a.b,16)),new UWc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);f=RD(zDb(CDb(new SDb(null,new Swb(b.b,16)),new CWc(g)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);e=UD(Lvb(JDb(GDb(f.Oc(),new EWc(c)),(urb(),urb(),srb))));d=RD(Lvb(DDb(CDb(f.Oc(),new GWc(c,e)))),39);return d} +function vOc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=eJb(new gJb,a.f);j=a.i[b.c.i.p];n=a.i[b.d.i.p];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.n.b);n.b||(l+=m.n.b);k=eE($wnd.Math.max(0,h-l));g=eE($wnd.Math.max(0,l-h));o=(p=$wnd.Math.max(1,RD(mQb(b,(yCc(),MBc)),17).a),q=hOc(b.c.i.k,b.d.i.k),p*q);e=rIb(uIb(tIb(sIb(vIb(new wIb,o),g),c),RD(Wjb(a.k,b.c),125)));f=rIb(uIb(tIb(sIb(vIb(new wIb,o),k),c),RD(Wjb(a.k,b.d),125)));d=new QOc(e,f);a.c[b.p]=d} +function MTb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));f.e!=f.i.gc();){e=RD(bMd(f),27);g='';(!e.n&&(e.n=new C5d(I4,e,1,7)),e.n).i==0||(g=RD(QHd((!e.n&&(e.n=new C5d(I4,e,1,7)),e.n),0),135).a);h=new lUb(g);kQb(h,e);pQb(h,(JVb(),HVb),e);h.a=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);Rmb(b.e,h);rtb(c.f,e,h);i=RD(Gxd(e,(yVb(),jVb)),101);i==(Bod(),Aod)&&(i=zod)}} +function bec(a,b){var c,d,e,f,g,h,i;b.Ug('Layer constraint postprocessing',1);i=a.b;if(i.c.length!=0){d=(tFb(0,i.c.length),RD(i.c[0],30));g=RD(Vmb(i,i.c.length-1),30);c=new R4b(a);f=new R4b(a);_dc(a,d,g,c,f);c.a.c.length==0||(wFb(0,i.c.length),XEb(i.c,0,c));f.a.c.length==0||(ZEb(i.c,f),true)}if(nQb(a,(Ywc(),lwc))){e=new R4b(a);h=new R4b(a);cec(a,e,h);e.a.c.length==0||(wFb(0,i.c.length),XEb(i.c,0,e));h.a.c.length==0||(ZEb(i.c,h),true)}b.Vg()} +function zte(a){var b,c,d;switch(a){case 91:case 93:case 45:case 94:case 44:case 92:d='\\'+String.fromCharCode(a&Bwe);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(a<32){c=(b=a>>>0,'0'+b.toString(16));d='\\x'+zhb(c,c.length-2,c.length)}else if(a>=txe){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+zhb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&Bwe);}return d} +function Ugc(a){var b,c,d;if(Dod(RD(mQb(a,(yCc(),BBc)),101))){for(c=new Anb(a.j);c.a<c.c.c.length;){b=RD(ynb(c),12);b.j==(qpd(),opd)&&(d=RD(mQb(b,(Ywc(),Iwc)),10),d?Q3b(b,RD(mQb(d,hwc),64)):b.e.c.length-b.g.c.length<0?Q3b(b,Xod):Q3b(b,ppd))}}else{for(c=new Anb(a.j);c.a<c.c.c.length;){b=RD(ynb(c),12);d=RD(mQb(b,(Ywc(),Iwc)),10);d?Q3b(b,RD(mQb(d,hwc),64)):b.e.c.length-b.g.c.length<0?Q3b(b,(qpd(),Xod)):Q3b(b,(qpd(),ppd))}pQb(a,BBc,(Bod(),yod))}} +function wUc(a){var b,c,d,e,f,g;this.e=new bnb;this.a=new bnb;for(c=a.b-1;c<3;c++){hu(a,0,RD(ju(a,0),8))}if(a.b<4){throw Adb(new agb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;rUc(this,a.b+this.b-1);g=new bnb;f=new Anb(this.e);for(b=0;b<this.b-1;b++){Rmb(g,UD(ynb(f)))}for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),8);Rmb(g,UD(ynb(f)));Rmb(this.a,new BUc(d,g));tFb(0,g.c.length);g.c.splice(0,1)}}} +function Sdc(a,b){var c,d,e,f,g,h,i,j,k;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),n3b)){i=(j=RD(hs(new is(Mr(Z2b(g).a.Kc(),new ir))),18),k=RD(hs(new is(Mr(a3b(g).a.Kc(),new ir))),18),!Heb(TD(mQb(j,(Ywc(),Nwc))))||!Heb(TD(mQb(k,Nwc))))?b:Qnd(b);Qdc(g,i)}for(d=new is(Mr(a3b(g).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);i=Heb(TD(mQb(c,(Ywc(),Nwc))))?Qnd(b):b;Pdc(c,i)}}}} +function V8c(a,b,c,d,e){var f,g,h;if(c.f>=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=RD(Vmb(b.n,b.n.c.length-1),209);if(g.e+g.d+c.g+e<=d&&(f=RD(Vmb(b.n,b.n.c.length-1),209),f.f-a.f+c.f<=a.b||a.a.c.length==1)){K9c(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Rmb(b.b,c);h=RD(Vmb(b.n,b.n.c.length-1),209);Rmb(b.n,new _9c(b.s,h.f+h.a+b.i,b.i));W9c(RD(Vmb(b.n,b.n.c.length-1),209),c);M9c(b,c);return true}}return false} +function xLd(a,b,c){var d,e,f,g;if(a.Pj()){e=null;f=a.Qj();d=a.Ij(1,g=UHd(a,b,c),c,b,f);if(a.Mj()&&!(a.Yi()&&g!=null?pb(g,c):dE(g)===dE(c))){g!=null&&(e=a.Oj(g,e));e=a.Nj(c,e);a.Tj()&&(e=a.Wj(g,c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Tj()&&(e=a.Wj(g,c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}return g}else{g=UHd(a,b,c);if(a.Mj()&&!(a.Yi()&&g!=null?pb(g,c):dE(g)===dE(c))){e=null;g!=null&&(e=a.Oj(g,null));e=a.Nj(c,e);!!e&&e.oj()}return g}} +function Rsc(a,b){var c,d,e,f,g;b.Ug('Path-Like Graph Wrapping',1);if(a.b.c.length==0){b.Vg();return}e=new ysc(a);g=(e.i==null&&(e.i=tsc(e,new Asc)),Kfb(e.i)*e.f);c=g/(e.i==null&&(e.i=tsc(e,new Asc)),Kfb(e.i));if(e.b>c){b.Vg();return}switch(RD(mQb(a,(yCc(),rCc)),351).g){case 2:f=new Ksc;break;case 0:f=new zrc;break;default:f=new Nsc;}d=f.og(a,e);if(!f.pg()){switch(RD(mQb(a,xCc),352).g){case 2:d=Wsc(e,d);break;case 1:d=Usc(e,d);}}Qsc(a,e,d);b.Vg()} +function mB(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function kKc(a,b){var c,d,e,f;Nwb(a.d,a.e);a.c.a.$b();if(Kfb(UD(mQb(b.j,(yCc(),Zzc))))!=0||Kfb(UD(mQb(b.j,Zzc)))!=0){c=Hze;dE(mQb(b.j,cAc))!==dE((kEc(),hEc))&&pQb(b.j,(Ywc(),jwc),(Geb(),true));f=RD(mQb(b.j,gCc),17).a;for(e=0;e<f;e++){d=uKc(a,b);if(d<c){c=d;xKc(a);if(c==0){break}}}}else{c=lve;dE(mQb(b.j,cAc))!==dE((kEc(),hEc))&&pQb(b.j,(Ywc(),jwc),(Geb(),true));f=RD(mQb(b.j,gCc),17).a;for(e=0;e<f;e++){d=vKc(a,b);if(d<c){c=d;xKc(a);if(c==0){break}}}}} +function Vsc(a,b){var c,d,e,f,g,h,i,j;g=new bnb;h=0;c=0;i=0;while(h<b.c.length-1&&c<a.gc()){d=RD(a.Xb(c),17).a+i;while((tFb(h+1,b.c.length),RD(b.c[h+1],17)).a<d){++h}j=0;f=d-(tFb(h,b.c.length),RD(b.c[h],17)).a;e=(tFb(h+1,b.c.length),RD(b.c[h+1],17)).a-d;f>e&&++j;Rmb(g,(tFb(h+j,b.c.length),RD(b.c[h+j],17)));i+=(tFb(h+j,b.c.length),RD(b.c[h+j],17)).a-d;++c;while(c<a.gc()&&RD(a.Xb(c),17).a+i<=(tFb(h+j,b.c.length),RD(b.c[h+j],17)).a){++c}h+=1+j}return g} +function VGc(a,b){var c,d,e,f,g;for(g=new is(Mr(Z2b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);if(a.f.b==0){e=f.c.i.k==(r3b(),p3b)&&!!f.c.i.c&&f.c.i.c.p==a.c;if(gs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir)))){c=RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.c;d=f.c.i.k==n3b&&!!c&&c.p==a.c}else{d=false}}else{e=f.c.i.k==(r3b(),p3b)&&f.c.i.p==a.c;d=f.c.i.k==n3b&&RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.p==a.c}if(e||d){return true}}return false} +function DHc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=new bnb;r=Xx(d);q=b*a.a;l=0;o=0;f=new _sb;g=new _sb;h=new bnb;s=0;t=0;n=0;p=0;j=0;k=0;while(r.a.gc()!=0){i=HHc(r,e,g);if(i){r.a.Bc(i)!=null;ZEb(h.c,i);f.a.zc(i,f);o=a.f[i.p];s+=a.e[i.p]-o*a.b;l=a.c[i.p];t+=l*a.b;k+=o*a.b;p+=a.e[i.p]}if(!i||r.a.gc()==0||s>=q&&a.e[i.p]>o*a.b||t>=c*q){ZEb(m.c,h);h=new bnb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new Ptd(n,m)} +function pYd(a){var b,c,d,e,f,g,h;if(!a.d){h=new v_d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);YGd(h,pYd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new C5d(s7,a,11,10)),new dMd(a.q));e.e!=e.i.gc();++g){RD(bMd(e),411)}YGd(h,(!a.q&&(a.q=new C5d(s7,a,11,10)),a.q));VHd(h);a.d=new N$d((RD(QHd(xYd((lTd(),kTd).o),9),19),h.i),h.g);a.e=RD(h.g,688);a.e==null&&(a.e=jYd);yYd(a).b&=-17}return a.d} +function kge(a,b,c,d){var e,f,g,h,i,j;j=pke(a.e.Dh(),b);i=0;e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(pb(f,c)){return i}++i}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(j.am(f.Lk())){if(pb(c,f.md())){return i}++i}}if(d){i=0;for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(dE(c)===dE(Age(a,RD(f.md(),58)))){return i}++i}}}}else{for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(f.md()==null){return i}++i}}}return -1} +function Xje(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.Xh(b)){k=(n=b,!n?null:RD(d,54).gi(n));if(k){p=c.Nh(b,a.a);o=b.t;if(o>1||o==-1){l=RD(p,71);m=RD(k,71);if(l.dc()){m.$b()}else{g=!!Z5d(b);f=0;for(h=a.a?l.Kc():l.Ii();h.Ob();){j=RD(h.Pb(),58);e=RD(cub(a,j),58);if(!e){if(a.b&&!g){m.Gi(f,j);++f}}else{if(g){i=m.dd(e);i==-1?m.Gi(f,e):f!=i&&m.Ui(f,e)}else{m.Gi(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=cub(a,p);e==null?a.b&&!Z5d(b)&&k.Wb(p):k.Wb(e)}}}}} +function V9b(a,b){var c,d,e,f,g,h,i,j;c=new aac;for(e=new is(Mr(Z2b(b).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(W0b(d)){continue}h=d.c.i;if(W9b(h,T9b)){j=X9b(a,h,T9b,S9b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new bnb);Rmb(c.a,h)}}for(g=new is(Mr(a3b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);if(W0b(f)){continue}i=f.d.i;if(W9b(i,S9b)){j=X9b(a,i,S9b,T9b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new bnb);Rmb(c.c,i)}}return c} +function pcc(a,b,c,d){var e,f,g,h,i,j,k;if(c.d.i==b.i){return}e=new j3b(a);h3b(e,(r3b(),o3b));pQb(e,(Ywc(),Awc),c);pQb(e,(yCc(),BBc),(Bod(),wod));ZEb(d.c,e);g=new R3b;P3b(g,e);Q3b(g,(qpd(),ppd));h=new R3b;P3b(h,e);Q3b(h,Xod);k=c.d;Z0b(c,g);f=new a1b;kQb(f,c);pQb(f,RAc,null);Y0b(f,h);Z0b(f,k);j=new Jkb(c.b,0);while(j.b<j.d.gc()){i=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),72));if(dE(mQb(i,wAc))===dE((Omd(),Mmd))){pQb(i,dwc,c);Ckb(j);Rmb(f.b,i)}}rcc(e,g,h)} +function occ(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.i==b.i){return}e=new j3b(a);h3b(e,(r3b(),o3b));pQb(e,(Ywc(),Awc),c);pQb(e,(yCc(),BBc),(Bod(),wod));ZEb(d.c,e);g=new R3b;P3b(g,e);Q3b(g,(qpd(),ppd));h=new R3b;P3b(h,e);Q3b(h,Xod);Z0b(c,g);f=new a1b;kQb(f,c);pQb(f,RAc,null);Y0b(f,h);Z0b(f,b);rcc(e,g,h);j=new Jkb(c.b,0);while(j.b<j.d.gc()){i=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),72));k=RD(mQb(i,wAc),278);if(k==(Omd(),Mmd)){nQb(i,dwc)||pQb(i,dwc,c);Ckb(j);Rmb(f.b,i)}}} +function Sjb(a){Ljb();var b,c,d,e;b=eE(a);if(a<Kjb.length){return Kjb[b]}else if(a<=50){return Yib((Pib(),Mib),b)}else if(a<=Awe){return Zib(Yib(Jjb[1],b),b)}if(a>1000000){throw Adb(new teb('power of ten too big'))}if(a<=lve){return Zib(Yib(Jjb[1],b),b)}d=Yib(Jjb[1],lve);e=d;c=Hdb(a-lve);b=eE(a%lve);while(Ddb(c,lve)>0){e=Wib(e,d);c=Vdb(c,lve)}e=Wib(e,Yib(Jjb[1],b));e=Zib(e,lve);c=Hdb(a-lve);while(Ddb(c,lve)>0){e=Zib(e,lve);c=Vdb(c,lve)}e=Zib(e,b);return e} +function s9b(a){var b,c,d,e,f,g,h,i,j,k;for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(h.k!=(r3b(),m3b)){continue}e=RD(mQb(h,(Ywc(),hwc)),64);if(e==(qpd(),Xod)||e==ppd){for(d=new is(Mr(W2b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);b=c.a;if(b.b==0){continue}j=c.c;if(j.i==h){f=(sFb(b.b!=0),RD(b.a.a.c,8));f.b=xjd(cD(WC(l3,1),Nve,8,0,[j.i.n,j.n,j.a])).b}k=c.d;if(k.i==h){g=(sFb(b.b!=0),RD(b.c.b.c,8));g.b=xjd(cD(WC(l3,1),Nve,8,0,[k.i.n,k.n,k.a])).b}}}}} +function Nlc(a,b,c,d){var e,f,g;this.j=new bnb;this.k=new bnb;this.b=new bnb;this.c=new bnb;this.e=new Tid;this.i=new Ejd;this.f=new cHb;this.d=new bnb;this.g=new bnb;Rmb(this.b,a);Rmb(this.b,b);this.e.c=$wnd.Math.min(a.a,b.a);this.e.d=$wnd.Math.min(a.b,b.b);this.e.b=$wnd.Math.abs(a.a-b.a);this.e.a=$wnd.Math.abs(a.b-b.b);e=RD(mQb(d,(yCc(),RAc)),75);if(e){for(g=Sub(e,0);g.b!=g.d.c;){f=RD(evb(g),8);rGb(f.a,a.a)&&Mub(this.i,f)}}!!c&&Rmb(this.j,c);Rmb(this.k,d)} +function vSc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new Anb(a);k.a<k.c.c.length;){j=RD(ynb(k),118);j.g=h--;e=Ydb(mDb(IDb(CDb(new SDb(null,new Swb(j.f,16)),new xSc),new zSc)).d);f=Ydb(mDb(IDb(CDb(new SDb(null,new Swb(j.k,16)),new BSc),new DSc)).d);g=e;i=f;if(!d){g=Ydb(mDb(IDb(new SDb(null,new Swb(j.f,16)),new FSc)).d);i=Ydb(mDb(IDb(new SDb(null,new Swb(j.k,16)),new HSc)).d)}j.d=g;j.a=e;j.i=i;j.b=f;i==0?(Pub(c,j,c.c.b,c.c),true):g==0&&(Pub(b,j,b.c.b,b.c),true)}} +function Qdc(a,b){var c,d,e,f,g,h;if(a.k==(r3b(),n3b)){c=a.k==n3b&&!QDb(CDb(RD(mQb(a,(Ywc(),Mwc)),15).Oc(),new PAb(new x3b))).Bd((xDb(),wDb))?(Pnd(),Nnd):b;pQb(a,(Ywc(),swc),c);if(c!=(Pnd(),Mnd)){d=RD(mQb(a,Awc),18);h=Kfb(UD(mQb(d,(yCc(),FAc))));g=0;if(c==Lnd){g=a.o.b-$wnd.Math.ceil(h/2)}else if(c==Nnd){g=$wnd.Math.ceil(a.o.b-Kfb(UD(mQb(Y2b(a),VBc)))-h)/2;a.o.b-=Kfb(UD(mQb(Y2b(a),VBc)));a.o.b-=h}for(f=new Anb(a.j);f.a<f.c.c.length;){e=RD(ynb(f),12);e.n.b=g}}}} +function XQc(a,b,c){var d,e,f,g,h,i,j,k,l;e=true;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);j=pxe;k=null;for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);l=Kfb(b.p[h.p])+Kfb(b.d[h.p])-h.d.d;d=Kfb(b.p[h.p])+Kfb(b.d[h.p])+h.o.b+h.d.a;if(l>j&&d>j){k=h;j=Kfb(b.p[h.p])+Kfb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c._g()&&c.bh('bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c._g()&&c.bh(b+' is feasible: '+e);return e} +function Dfc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new j3b(a);h3b(f,(r3b(),q3b));pQb(f,(yCc(),BBc),(Bod(),wod));e=0;if(b){g=new R3b;pQb(g,(Ywc(),Awc),b);pQb(f,Awc,b.i);Q3b(g,(qpd(),ppd));P3b(g,f);m=s2b(b.e);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];Z0b(i,g)}pQb(b,Iwc,f);++e}if(c){h=new R3b;pQb(f,(Ywc(),Awc),c.i);pQb(h,Awc,c);Q3b(h,(qpd(),Xod));P3b(h,f);m=s2b(c.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];Y0b(i,h)}pQb(c,Iwc,f);++e}pQb(f,(Ywc(),$vc),sgb(e));ZEb(d.c,f);return f} +function Bgd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new glb(a.c.b)).a.vc().Kc(),new llb(j));c.a.Ob();){b=(h=RD(c.a.Pb(),44),RD(h.md(),143));e=b.a;e==null&&(e='');d=tgd(a.c,e);!d&&e.length==0&&(d=Fgd(a));!!d&&!ze(d.c,b,false)&&Mub(d.c,b)}for(g=Sub(a.a,0);g.b!=g.d.c;){f=RD(evb(g),486);k=ugd(a.c,f.a);n=ugd(a.c,f.b);!!k&&!!n&&Mub(k.c,new Ptd(n,f.c))}Xub(a.a);for(m=Sub(a.b,0);m.b!=m.d.c;){l=RD(evb(m),486);b=rgd(a.c,l.a);i=ugd(a.c,l.b);!!b&&!!i&&Mfd(b,i,l.c)}Xub(a.b)} +function QId(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new vC(a);g=new IEd;e=(wo(g.g),wo(g.j),akb(g.b),wo(g.d),wo(g.i),akb(g.k),akb(g.c),akb(g.e),n=DEd(g,f,null),AEd(g,f),n);if(b){j=new vC(b);h=RId(j);msd(e,cD(WC(j4,1),rve,536,0,[h]))}m=false;l=false;if(c){j=new vC(c);RIe in j.a&&(m=qC(j,RIe).qe().a);SIe in j.a&&(l=qC(j,SIe).qe().a)}k=Kqd(Mqd(new Oqd,m),l);Eed(new Hed,e,k);RIe in f.a&&sC(f,RIe,null);if(m||l){i=new uC;NId(k,i,m,l);sC(f,RIe,i)}d=new nFd(g);dve(new zId(e),d)} +function FA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new DB;j=cD(WC(kE,1),Pwe,28,15,[0]);e=-1;f=0;d=0;for(i=0;i<a.b.c.length;++i){k=RD(Vmb(a.b,i),443);if(k.b>0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!MA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!MA(b,j,k,0,g)){return 0}}}else{e=-1;if(ihb(k.c,0)==32){l=j[0];KA(b,j);if(j[0]>l){continue}}else if(xhb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!CB(g,c)){return 0}return j[0]} +function qWb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new pwb(new GWb(c));h=$C(xdb,Hye,28,a.f.e.c.length,16,1);Snb(h,h.length);c[b.a]=0;for(j=new Anb(a.f.e);j.a<j.c.c.length;){i=RD(ynb(j),153);i.a!=b.a&&(c[i.a]=lve);zFb(lwb(k,i),Bxe)}while(k.b.c.length!=0){l=RD(mwb(k),153);h[l.a]=true;for(f=ru(new su(a.b,l),0);f.c;){e=RD(Lu(f),289);m=tWb(e,l);if(h[m.a]){continue}nQb(e,(dWb(),TVb))?(g=Kfb(UD(mQb(e,TVb)))):(g=a.c);d=c[l.a]+g;if(d<c[m.a]){c[m.a]=d;nwb(k,m);zFb(lwb(k,m),Bxe)}}}} +function iPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=$C(kE,Pwe,28,g,15,1);e=$C(kE,Pwe,28,g,15,1);c=a.p;b=$C(kE,Pwe,28,c,15,1);f=$C(kE,Pwe,28,c,15,1);for(j=0;j<g;j++){l=0;while(l<c&&!PPb(a,j,l)){++l}d[j]=l}for(k=0;k<g;k++){l=c-1;while(l>=0&&!PPb(a,k,l)){--l}e[k]=l}for(n=0;n<c;n++){h=0;while(h<g&&!PPb(a,h,n)){++h}b[n]=h}for(o=0;o<c;o++){h=g-1;while(h>=0&&!PPb(a,h,o)){--h}f[o]=h}for(i=0;i<g;i++){for(m=0;m<c;m++){i<f[m]&&i>b[m]&&m<e[i]&&m>d[i]&&TPb(a,i,m,false,true)}}} +function hUb(a){var b,c,d,e,f,g,h,i;c=Heb(TD(mQb(a,(yVb(),$Ub))));f=a.a.c.d;h=a.a.d.d;if(c){g=ijd(ojd(new rjd(h.a,h.b),f),0.5);i=ijd(ajd(a.e),0.5);b=ojd($id(new rjd(f.a,f.b),g),i);mjd(a.d,b)}else{e=Kfb(UD(mQb(a.a,qVb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} +function qYd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new a_d;h=new a_d;b=iYd;g=b.a.zc(a,b);if(g==null){for(f=new dMd(zYd(a));f.e!=f.i.gc();){e=RD(bMd(f),29);YGd(i,qYd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));d.e!=d.i.gc();){c=RD(bMd(d),179);ZD(c,102)&&WGd(h,RD(c,19))}VHd(h);a.r=new s_d(a,(RD(QHd(xYd((lTd(),kTd).o),6),19),h.i),h.g);YGd(i,a.r);VHd(i);a.f=new N$d((RD(QHd(xYd(kTd.o),5),19),i.i),i.g);yYd(a).b&=-3}return a.f} +function uSb(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,Aze),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new xSb)));Agd(a,Aze,Bze,iGd(sSb));Agd(a,Aze,Cze,iGd(mSb));Agd(a,Aze,Dze,iGd(hSb));Agd(a,Aze,Eze,iGd(nSb));Agd(a,Aze,Bye,iGd(qSb));Agd(a,Aze,Cye,iGd(pSb));Agd(a,Aze,Aye,iGd(rSb));Agd(a,Aze,Dye,iGd(oSb));Agd(a,Aze,vze,iGd(jSb));Agd(a,Aze,wze,iGd(iSb));Agd(a,Aze,xze,iGd(kSb));Agd(a,Aze,yze,iGd(lSb))} +function qAd(){qAd=geb;oAd=cD(WC(hE,1),zwe,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);pAd=new RegExp('[ \t\n\r\f]+');try{nAd=cD(WC(h8,1),rve,2114,0,[new c2d((WA(),YA("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",_A(($A(),$A(),ZA))))),new c2d(YA("yyyy-MM-dd'T'HH:mm:ss'.'SSS",_A((null,ZA)))),new c2d(YA("yyyy-MM-dd'T'HH:mm:ss",_A((null,ZA)))),new c2d(YA("yyyy-MM-dd'T'HH:mm",_A((null,ZA)))),new c2d(YA('yyyy-MM-dd',_A((null,ZA))))])}catch(a){a=zdb(a);if(!ZD(a,82))throw Adb(a)}} +function uKc(a,b){var c,d,e,f;e=Kwb(a.d,1)!=0;d=mKc(a,b);if(d==0&&Heb(TD(mQb(b.j,(Ywc(),jwc))))){return 0}!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,Owc)))||dE(mQb(b.j,(yCc(),cAc)))===dE((kEc(),hEc))?b.c.mg(b.e,e):(e=Heb(TD(mQb(b.j,jwc))));DKc(a,b,e,true);Heb(TD(mQb(b.j,Owc)))&&pQb(b.j,Owc,(Geb(),false));if(Heb(TD(mQb(b.j,jwc)))){pQb(b.j,jwc,(Geb(),false));pQb(b.j,Owc,true)}c=mKc(a,b);do{yKc(a);if(c==0){return 0}e=!e;f=c;DKc(a,b,e,false);c=mKc(a,b)}while(f>c);return f} +function vKc(a,b){var c,d,e,f;e=Kwb(a.d,1)!=0;d=lKc(a,b);if(d==0&&Heb(TD(mQb(b.j,(Ywc(),jwc))))){return 0}!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,Owc)))||dE(mQb(b.j,(yCc(),cAc)))===dE((kEc(),hEc))?b.c.mg(b.e,e):(e=Heb(TD(mQb(b.j,jwc))));DKc(a,b,e,true);Heb(TD(mQb(b.j,Owc)))&&pQb(b.j,Owc,(Geb(),false));if(Heb(TD(mQb(b.j,jwc)))){pQb(b.j,jwc,(Geb(),false));pQb(b.j,Owc,true)}c=lKc(a,b);do{yKc(a);if(c==0){return 0}e=!e;f=c;DKc(a,b,e,false);c=lKc(a,b)}while(f>c);return f} +function Gid(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=ojd(new rjd(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=$id(new rjd(c.a,c.b),ijd(new rjd(d.a,d.b),0.5));f=bjd(a,e);g=bjd($id(new rjd(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f<g&&f<=h){return new rjd(a.a,a.b)}if(g<=h){return $id(new rjd(a.a,a.b),b)}return null}else{return null}}else{return l>=0&&l<=1&&m>=0&&m<=1?$id(new rjd(a.a,a.b),ijd(new rjd(b.a,b.b),l)):null}} +function QWb(a,b,c){var d,e,f,g,h;d=RD(mQb(a,(yCc(),dAc)),21);c.a>b.a&&(d.Hc((ukd(),okd))?(a.c.a+=(c.a-b.a)/2):d.Hc(qkd)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((ukd(),skd))?(a.c.b+=(c.b-b.b)/2):d.Hc(rkd)&&(a.c.b+=c.b-b.b));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))&&(c.a>b.a||c.b>b.b)){for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){e=RD(mQb(g,hwc),64);e==(qpd(),Xod)?(g.n.a+=c.a-b.a):e==npd&&(g.n.b+=c.b-b.b)}}}f=a.d;a.f.a=c.a-f.b-f.c;a.f.b=c.b-f.d-f.a} +function Y8b(a,b,c){var d,e,f,g,h;d=RD(mQb(a,(yCc(),dAc)),21);c.a>b.a&&(d.Hc((ukd(),okd))?(a.c.a+=(c.a-b.a)/2):d.Hc(qkd)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((ukd(),skd))?(a.c.b+=(c.b-b.b)/2):d.Hc(rkd)&&(a.c.b+=c.b-b.b));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))&&(c.a>b.a||c.b>b.b)){for(g=new Anb(a.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k==(r3b(),m3b)){e=RD(mQb(f,hwc),64);e==(qpd(),Xod)?(f.n.a+=c.a-b.a):e==npd&&(f.n.b+=c.b-b.b)}}}h=a.d;a.f.a=c.a-h.b-h.c;a.f.b=c.b-h.d-h.a} +function KQc(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=bRc(a);for(k=(h=(new Xkb(b)).a.vc().Kc(),new blb(h));k.a.Ob();){j=(e=RD(k.a.Pb(),44),RD(e.ld(),10));l=0;m=0;l=j.d.d;m=j.o.b+j.d.a;a.d[j.p]=0;c=j;while((f=a.a[c.p])!=j){d=dRc(c,f);i=0;a.c==(wQc(),uQc)?(i=d.d.n.b+d.d.a.b-d.c.n.b-d.c.a.b):(i=d.c.n.b+d.c.a.b-d.d.n.b-d.d.a.b);g=Kfb(a.d[c.p])+i;a.d[f.p]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.o.b+f.d.a);c=f}c=j;do{a.d[c.p]=Kfb(a.d[c.p])+l;c=a.a[c.p]}while(c!=j);a.b[j.p]=l+m}} +function S9c(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=0;g=a.t;e=0;d=0;i=0;m=0;l=0;if(c){a.n.c.length=0;Rmb(a.n,new _9c(a.s,a.t,a.i))}h=0;for(k=new Anb(a.b);k.a<k.c.c.length;){j=RD(ynb(k),27);if(f+j.g+(h>0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Rmb(a.n,new _9c(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&W9c(RD(Vmb(a.n,l),209),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;Ead(a.j)}return new Uid(a.s,a.t,e,d)} +function CRb(a){var b,c,d,e,f,g,h,i,j,k,l,m;a.b=false;l=oxe;i=pxe;m=oxe;j=pxe;for(d=a.e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),272);e=c.a;l=$wnd.Math.min(l,e.c);i=$wnd.Math.max(i,e.c+e.b);m=$wnd.Math.min(m,e.d);j=$wnd.Math.max(j,e.d+e.a);for(g=new Anb(c.c);g.a<g.c.c.length;){f=RD(ynb(g),407);b=f.a;if(b.a){k=e.d+f.b.b;h=k+f.c;m=$wnd.Math.min(m,k);j=$wnd.Math.max(j,h)}else{k=e.c+f.b.a;h=k+f.c;l=$wnd.Math.min(l,k);i=$wnd.Math.max(i,h)}}}a.a=new rjd(i-l,j-m);a.c=new rjd(l+a.d.a,m+a.d.b)} +function mYd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new e_d(a);b=new i_d;c=iYd;h=c.a.zc(a,c);if(h==null){for(g=new dMd(zYd(a));g.e!=g.i.gc();){f=RD(bMd(g),29);YGd(i,mYd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));e.e!=e.i.gc();){d=RD(bMd(e),179);ZD(d,331)&&WGd(b,RD(d,35))}VHd(b);a.k=new n_d(a,(RD(QHd(xYd((lTd(),kTd).o),7),19),b.i),b.g);YGd(i,a.k);VHd(i);a.a=new N$d((RD(QHd(xYd(kTd.o),4),19),i.i),i.g);yYd(a).b&=-2}return a.a} +function age(a,b,c,d){var e,f,g,h,i,j,k;k=pke(a.e.Dh(),b);e=0;f=RD(a.g,124);i=null;nke();if(RD(b,69).xk()){for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(pb(g,c)){i=g;break}++e}}}else if(c!=null){for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(pb(c,g.md())){i=g;break}++e}}}else{for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(g.md()==null){i=g;break}++e}}}if(i){if(Mvd(a.e)){j=b.Jk()?new lle(a.e,4,b,c,null,e,true):fge(a,b.tk()?2:1,b,c,b.ik(),-1,true);d?d.nj(j):(d=j)}d=_fe(a,i,d)}return d} +function d8c(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;o=0;p=0;i=e.c;h=e.b;k=c.f;n=c.g;switch(b.g){case 0:o=d.i+d.g+g;a.c?(p=m8c(o,f,d,g)):(p=d.j);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 1:p=d.j+d.f+g;a.c?(o=l8c(p,f,d,g)):(o=d.i);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 2:o=i+g;p=0;m=i+g+n;j=$wnd.Math.max(h,k);break;case 3:o=0;p=h+g;m=$wnd.Math.max(i,n);j=h+g+k;break;default:throw Adb(new agb('IllegalPlacementOption.'));}l=new mad(a.a,m,j,b,o,p);return l} +function g6b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.d;l=RD(mQb(a,(Ywc(),Xwc)),15);b=RD(mQb(a,Vvc),15);if(!l&&!b){return}f=Kfb(UD(hFc(a,(yCc(),QBc))));g=Kfb(UD(hFc(a,RBc)));m=0;if(l){j=0;for(e=l.Kc();e.Ob();){d=RD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);m+=d.o.a}m+=f*(l.gc()-1);h.d+=j+g}c=0;if(b){j=0;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);c+=d.o.a}c+=f*(b.gc()-1);h.a+=j+g}i=$wnd.Math.max(m,c);if(i>a.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} +function RId(a){var b,c,d,e,f,g,h,i;f=new med;ied(f,(hed(),eed));for(d=(e=oC(a,$C(qJ,Nve,2,0,6,1)),new Dkb(new mob((new CC(a,e)).b)));d.b<d.d.gc();){c=(sFb(d.b<d.d.gc()),WD(d.d.Xb(d.c=d.b++)));g=vgd(LId,c);if(g){b=qC(a,c);b.te()?(h=b.te().a):b.qe()?(h=''+b.qe().a):b.re()?(h=''+b.re().a):(h=b.Ib());i=zhd(g,h);if(i!=null){(Csb(g.j,(Yhd(),Vhd))||Csb(g.j,Whd))&&oQb(ked(f,J4),g,i);Csb(g.j,Thd)&&oQb(ked(f,G4),g,i);Csb(g.j,Xhd)&&oQb(ked(f,K4),g,i);Csb(g.j,Uhd)&&oQb(ked(f,I4),g,i)}}}return f} +function ige(a,b,c){var d,e,f,g,h,i,j,k;e=RD(a.g,124);if(qke(a.e,b)){return nke(),RD(b,69).xk()?new ole(b,a):new Eke(b,a)}else{j=pke(a.e.Dh(),b);d=0;for(h=0;h<a.i;++h){f=e[h];g=f.Lk();if(j.am(g)){nke();if(RD(b,69).xk()){return f}else if(g==(Lle(),Jle)||g==Gle){i=new dib(jeb(f.md()));while(++h<a.i){f=e[h];g=f.Lk();(g==Jle||g==Gle)&&Zhb(i,jeb(f.md()))}return Ije(RD(b.Hk(),156),i.a)}else{k=f.md();k!=null&&c&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(k=Bge(a,b,h,d,k));return k}}++d}return b.ik()}} +function hge(a,b,c,d){var e,f,g,h,i,j;i=pke(a.e.Dh(),b);f=RD(a.g,124);if(qke(a.e,b)){e=0;for(h=0;h<a.i;++h){g=f[h];if(i.am(g.Lk())){if(e==c){nke();if(RD(b,69).xk()){return g}else{j=g.md();j!=null&&d&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(j=Bge(a,b,h,e,j));return j}}++e}}throw Adb(new veb(HJe+c+NIe+e))}else{e=0;for(h=0;h<a.i;++h){g=f[h];if(i.am(g.Lk())){nke();if(RD(b,69).xk()){return g}else{j=g.md();j!=null&&d&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(j=Bge(a,b,h,e,j));return j}}++e}return b.ik()}} +function xjb(){xjb=geb;vjb=cD(WC(kE,1),Pwe,28,15,[qwe,1162261467,hwe,1220703125,362797056,1977326743,hwe,387420489,ixe,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,hwe,1291467969,1544804416,1838265625,60466176]);wjb=cD(WC(kE,1),Pwe,28,15,[-1,-1,31,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])} +function Gjb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new cjb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=Cdb(a.a[0],yxe);d=Cdb(b.a[0],yxe);g<0&&(c=Odb(c));i<0&&(d=Odb(d));return Pib(),Jdb(Vdb(c,d),0)?jjb(Vdb(c,d)):Xib(jjb(Odb(Vdb(c,d))))}e=f!=h?f>h?1:-1:Ejb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?Hjb(b.a,h,a.a,f):Cjb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Pib(),Oib}k=Hjb(a.a,f,b.a,h)}else{k=Cjb(a.a,f,b.a,h)}}j=new cjb(l,k.length,k);Rib(j);return j} +function c5b(a,b){var c,d,e,f;f=Z4b(b);!b.c&&(b.c=new C5d(K4,b,9,9));FDb(new SDb(null,(!b.c&&(b.c=new C5d(K4,b,9,9)),new Swb(b.c,16))),new s5b(f));e=RD(mQb(f,(Ywc(),kwc)),21);Y4b(b,e);if(e.Hc((ovc(),hvc))){for(d=new dMd((!b.c&&(b.c=new C5d(K4,b,9,9)),b.c));d.e!=d.i.gc();){c=RD(bMd(d),123);g5b(a,b,f,c)}}RD(Gxd(b,(yCc(),lBc)),181).gc()!=0&&V4b(b,f);Heb(TD(mQb(f,sBc)))&&e.Fc(mvc);nQb(f,PBc)&&HCc(new RCc(Kfb(UD(mQb(f,PBc)))),f);dE(Gxd(b,IAc))===dE((Fnd(),Cnd))?d5b(a,b,f):b5b(a,b,f);return f} +function Vrc(a){var b,c,d,e,f,g,h,i;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(g=new Anb(bv(d.a));g.a<g.c.c.length;){f=RD(ynb(g),10);if(Lrc(f)){c=RD(mQb(f,(Ywc(),Wvc)),313);if(!c.g&&!!c.d){b=c;i=c.d;while(i){Urc(i.i,i.k,false,true);asc(b.a);asc(i.i);asc(i.k);asc(i.b);Z0b(i.c,b.c.d);Z0b(b.c,null);g3b(b.a,null);g3b(i.i,null);g3b(i.k,null);g3b(i.b,null);h=new Jrc(b.i,i.a,b.e,i.j,i.f);h.k=b.k;h.n=b.n;h.b=b.b;h.c=i.c;h.g=b.g;h.d=i.d;pQb(b.i,Wvc,h);pQb(i.a,Wvc,h);i=i.d;b=h}}}}}} +function nue(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=$C(hE,zwe,28,f,15,1);AFb(0,f,a.length);AFb(0,f,i.length);nhb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e<f;e++){d=i[e];Kqe();if(d<=32&&(Jqe[d]&2)!=0){if(h){!c&&(c=new Shb(a));Phb(c,e-g++)}else{h=b;if(d!=32){!c&&(c=new Shb(a));peb(c,e-g,e-g+1,String.fromCharCode(32))}}}else{h=false}}if(h){if(!c){return AFb(0,f-1,a.length),a.substr(0,f-1)}else{f=c.a.length;return f>0?zhb(c.a,0,f-1):''}}else{return !c?a:c.a}} +function xic(a,b){var c,d,e,f,g,h,i;b.Ug('Sort By Input Model '+mQb(a,(yCc(),cAc)),1);e=0;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);i=e==0?0:e-1;h=RD(Vmb(a.b,i),30);for(g=new Anb(c.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(dE(mQb(f,BBc))!==dE((Bod(),vod))&&dE(mQb(f,BBc))!==dE(wod)){yob();_mb(f.j,new trc(h,RD(mQb(a,cAc),284),Bic(f),Heb(TD(mQb(a,bAc)))));b.bh('Node '+f+' ports: '+f.j)}}yob();_mb(c.a,new frc(h,RD(mQb(a,cAc),284),RD(mQb(a,_zc),390)));b.bh('Layer '+e+': '+c);++e}b.Vg()} +function ute(a,b){var c,d,e,f,g;g=RD(b,138);vte(a);vte(g);if(g.b==null)return;a.c=true;if(a.b==null){a.b=$C(kE,Pwe,28,g.b.length,15,1);hib(g.b,0,a.b,0,g.b.length);return}f=$C(kE,Pwe,28,a.b.length+g.b.length,15,1);for(c=0,d=0,e=0;c<a.b.length||d<g.b.length;){if(c>=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]<a.b[c]||g.b[d]===a.b[c]&&g.b[d+1]<a.b[c+1]){f[e++]=g.b[d++];f[e++]=g.b[d++]}else{f[e++]=a.b[c++];f[e++]=a.b[c++]}}a.b=f} +function hac(a,b){var c,d,e,f,g,h,i,j,k,l;c=Heb(TD(mQb(a,(Ywc(),uwc))));h=Heb(TD(mQb(b,uwc)));d=RD(mQb(a,vwc),12);i=RD(mQb(b,vwc),12);e=RD(mQb(a,wwc),12);j=RD(mQb(b,wwc),12);k=!!d&&d==i;l=!!e&&e==j;if(!c&&!h){return new oac(RD(ynb(new Anb(a.j)),12).p==RD(ynb(new Anb(b.j)),12).p,k,l)}f=(!Heb(TD(mQb(a,uwc)))||Heb(TD(mQb(a,twc))))&&(!Heb(TD(mQb(b,uwc)))||Heb(TD(mQb(b,twc))));g=(!Heb(TD(mQb(a,uwc)))||!Heb(TD(mQb(a,twc))))&&(!Heb(TD(mQb(b,uwc)))||!Heb(TD(mQb(b,twc))));return new oac(k&&f||l&&g,k,l)} +function N9c(a){var b,c,d,e,f,g,h,i;d=0;c=0;i=new Yub;b=0;for(h=new Anb(a.n);h.a<h.c.c.length;){g=RD(ynb(h),209);if(g.c.c.length==0){Pub(i,g,i.c.b,i.c)}else{d=$wnd.Math.max(d,g.d);c+=g.a+(b>0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=oxe;a.p=oxe;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),27);a.p=$wnd.Math.min(a.p,e.g);a.g=$wnd.Math.max(a.g,e.g);a.f=$wnd.Math.max(a.f,e.f);a.o=$wnd.Math.min(a.o,e.f);a.e+=e.f+a.i}a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);Ead(a.j)} +function qzd(a){var b,c,d,e;if((a.Db&64)!=0)return kyd(a);b=new dib(BHe);d=a.k;if(!d){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!e||Zhb(Zhb((b.a+=' "',b),e),'"')}}else{Zhb(Zhb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new Yie(E4,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Zhb(b,Eb(new Gb,new dMd(a.b)));c&&(b.a+=']',b);b.a+=SAe;c&&(b.a+='[',b);Zhb(b,Eb(new Gb,new dMd(a.c)));c&&(b.a+=']',b);return b.a} +function odc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Wmb(v.a,a,0);d=Wmb(w.a,b,0);t=RD(c3b(a,(BEc(),yEc)).Kc().Pb(),12);C=RD(c3b(a,zEc).Kc().Pb(),12);u=RD(c3b(b,yEc).Kc().Pb(),12);D=RD(c3b(b,zEc).Kc().Pb(),12);r=s2b(t.e);A=s2b(C.g);s=s2b(u.e);B=s2b(D.g);f3b(a,d,w);for(g=s,k=0,o=g.length;k<o;++k){e=g[k];Z0b(e,t)}for(h=B,l=0,p=h.length;l<p;++l){e=h[l];Y0b(e,C)}f3b(b,c,v);for(i=r,m=0,q=i.length;m<q;++m){e=i[m];Z0b(e,u)}for(f=A,j=0,n=f.length;j<n;++j){e=f[j];Y0b(e,D)}} +function $2c(a){var b,c,d,e,f,g,h;g=RD(Gxd(a,(u2c(),t2c)),27);for(d=new dMd((!g.e&&(g.e=new Yie(G4,g,7,4)),g.e));d.e!=d.i.gc();){c=RD(bMd(d),74);h=new rjd(RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).j,RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).k);f=new rjd(RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).b,RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).c);e=new rjd(f.a-h.a,f.b-h.b);b=$wnd.Math.atan2(e.b,e.a);RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84).qf(($4c(),W4c),b)}} +function o6c(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Interactive Node Reorderer',1);k=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);h=new bnb;for(e=new dMd(k);e.e!=e.i.gc();){c=RD(bMd(e),27);Hxd(c,(X7c(),A7c))&&(ZEb(h.c,c),true)}for(f=new Anb(h);f.a<f.c.c.length;){c=RD(ynb(f),27);dHd(k,c)}yob();_mb(h,new s6c);for(g=new Anb(h);g.a<g.c.c.length;){c=RD(ynb(g),27);j=RD(Gxd(c,(X7c(),A7c)),17).a;j=$wnd.Math.min(j,k.i);VGd(k,j,c)}i=0;for(d=new dMd(k);d.e!=d.i.gc();){c=RD(bMd(d),27);Ixd(c,(X7c(),z7c),sgb(i));++i}b.Vg()} +function PTc(a,b,c){var d,e,f,g,h,i,j,k;if($wnd.Math.abs(b.s-b.c)<Vze||$wnd.Math.abs(c.s-c.c)<Vze){return 0}d=OTc(a,b.j,c.e);e=OTc(a,c.j,b.e);f=d==-1||e==-1;g=0;if(f){if(d==-1){new bTc((fTc(),dTc),c,b,1);++g}if(e==-1){new bTc((fTc(),dTc),b,c,1);++g}}else{h=VTc(b.j,c.s,c.c);h+=VTc(c.e,b.s,b.c);i=VTc(c.j,b.s,b.c);i+=VTc(b.e,c.s,c.c);j=d+16*h;k=e+16*i;if(j<k){new bTc((fTc(),eTc),b,c,k-j)}else if(j>k){new bTc((fTc(),eTc),c,b,j-k)}else if(j>0&&k>0){new bTc((fTc(),eTc),b,c,0);new bTc(eTc,c,b,0)}}return g} +function pXc(a,b,c){var d,e,f;a.a=new bnb;for(f=Sub(b.b,0);f.b!=f.d.c;){e=RD(evb(f),39);while(RD(mQb(e,(h_c(),f_c)),17).a>a.a.c.length-1){Rmb(a.a,new Ptd(Hze,KEe))}d=RD(mQb(e,f_c),17).a;if(c==(Cmd(),ymd)||c==zmd){e.e.a<Kfb(UD(RD(Vmb(a.a,d),42).a))&&Ntd(RD(Vmb(a.a,d),42),e.e.a);e.e.a+e.f.a>Kfb(UD(RD(Vmb(a.a,d),42).b))&&Otd(RD(Vmb(a.a,d),42),e.e.a+e.f.a)}else{e.e.b<Kfb(UD(RD(Vmb(a.a,d),42).a))&&Ntd(RD(Vmb(a.a,d),42),e.e.b);e.e.b+e.f.b>Kfb(UD(RD(Vmb(a.a,d),42).b))&&Otd(RD(Vmb(a.a,d),42),e.e.b+e.f.b)}}} +function g2b(a,b,c,d){var e,f,g,h,i,j,k;f=i2b(d);h=Heb(TD(mQb(d,(yCc(),aBc))));if((h||Heb(TD(mQb(a,MAc))))&&!Dod(RD(mQb(a,BBc),101))){e=vpd(f);i=q2b(a,c,c==(BEc(),zEc)?e:spd(e))}else{i=new R3b;P3b(i,a);if(b){k=i.n;k.a=b.a-a.n.a;k.b=b.b-a.n.b;_id(k,0,0,a.o.a,a.o.b);Q3b(i,c2b(i,f))}else{e=vpd(f);Q3b(i,c==(BEc(),zEc)?e:spd(e))}g=RD(mQb(d,(Ywc(),kwc)),21);j=i.j;switch(f.g){case 2:case 1:(j==(qpd(),Yod)||j==npd)&&g.Fc((ovc(),lvc));break;case 4:case 3:(j==(qpd(),Xod)||j==ppd)&&g.Fc((ovc(),lvc));}}return i} +function VXb(a,b){var c,d,e,f,g,h;for(g=new vkb((new mkb(a.f.b)).a);g.b;){f=tkb(g);e=RD(f.ld(),602);if(b==1){if(e.Af()!=(Cmd(),Bmd)&&e.Af()!=xmd){continue}}else{if(e.Af()!=(Cmd(),ymd)&&e.Af()!=zmd){continue}}d=RD(RD(f.md(),42).b,86);h=RD(RD(f.md(),42).a,194);c=h.c;switch(e.Af().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function NNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=$C(kE,Pwe,28,b.b.c.length,15,1);j=$C(hR,jwe,273,b.b.c.length,0,1);i=$C(jR,WAe,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m<n;++m){k=l[m];p=0;for(g=new Anb(k.e);g.a<g.c.c.length;){e=RD(ynb(g),10);d=Q4b(e.c);++h[d];o=Kfb(UD(mQb(b,(yCc(),TBc))));h[d]>0&&!!i[d]&&(o=bFc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new Anb(k.e);f.a<f.c.c.length;){e=RD(ynb(f),10);e.n.b=p+e.d.d;c=e.c;c.c.b=p+e.d.d+e.o.b+e.d.a;j[Wmb(c.b.b,c,0)]=e.k;i[Wmb(c.b.b,c,0)]=e}}} +function M5c(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(d=new is(Mr(zGd(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(!ZD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),193)){i=AGd(RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84));if(!nzd(c)){g=b.i+b.g/2;h=b.j+b.f/2;k=i.i+i.g/2;l=i.j+i.f/2;m=new pjd;m.a=k-g;m.b=l-h;f=new rjd(m.a,m.b);wid(f,b.g,b.f);m.a-=f.a;m.b-=f.b;g=k-m.a;h=l-m.b;j=new rjd(m.a,m.b);wid(j,i.g,i.f);m.a-=j.a;m.b-=j.b;k=g+m.a;l=h+m.b;e=IGd(c,true,true);Ozd(e,g);Pzd(e,h);Hzd(e,k);Izd(e,l);M5c(a,i)}}}} +function ocd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,hGe),'ELK SPOrE Compaction'),'ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree.'),new rcd)));Agd(a,hGe,iGe,iGd(mcd));Agd(a,hGe,jGe,iGd(jcd));Agd(a,hGe,kGe,iGd(icd));Agd(a,hGe,lGe,iGd(gcd));Agd(a,hGe,mGe,iGd(hcd));Agd(a,hGe,Eze,fcd);Agd(a,hGe,_ze,8);Agd(a,hGe,nGe,iGd(lcd));Agd(a,hGe,oGe,iGd(bcd));Agd(a,hGe,pGe,iGd(ccd));Agd(a,hGe,LDe,(Geb(),false))} +function hQc(a,b){var c,d,e,f,g,h,i,j,k,l;b.Ug('Simple node placement',1);l=RD(mQb(a,(Ywc(),Qwc)),312);h=0;for(f=new Anb(a.b);f.a<f.c.c.length;){d=RD(ynb(f),30);g=d.c;g.b=0;c=null;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);!!c&&(g.b+=_Ec(i,c,l.c));g.b+=i.d.d+i.o.b+i.d.a;c=i}h=$wnd.Math.max(h,g.b)}for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);g=d.c;k=(h-g.b)/2;c=null;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);!!c&&(k+=_Ec(i,c,l.c));k+=i.d.d;i.n.b=k;k+=i.o.b+i.d.a;c=i}}b.Vg()} +function tqc(a,b){var c,d,e,f;nqc(b.b.j);FDb(GDb(new SDb(null,new Swb(b.d,16)),new Eqc),new Gqc);for(f=new Anb(b.d);f.a<f.c.c.length;){e=RD(ynb(f),105);switch(e.e.g){case 0:c=RD(Vmb(e.j,0),113).d.j;Smc(e,RD(Lvb(KDb(RD(Qc(e.k,c),15).Oc(),lqc)),113));Tmc(e,RD(Lvb(JDb(RD(Qc(e.k,c),15).Oc(),lqc)),113));break;case 1:d=foc(e);Smc(e,RD(Lvb(KDb(RD(Qc(e.k,d[0]),15).Oc(),lqc)),113));Tmc(e,RD(Lvb(JDb(RD(Qc(e.k,d[1]),15).Oc(),lqc)),113));break;case 2:vqc(a,e);break;case 3:uqc(e);break;case 4:sqc(a,e);}qqc(e)}a.a=null} +function yRc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(EQc(),DQc)?oxe:pxe;h=zRc(a,new xRc(b,c));if(!h.a&&h.c){Mub(a.d,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(wQc(),vQc)?i:e;f=a.a.c==vQc?e:i;g=a.a.g[f.i.p];k=Kfb(a.a.p[g.p])+Kfb(a.a.d[f.i.p])+f.n.b+f.a.b-Kfb(a.a.d[j.i.p])-j.n.b-j.a.b}else{j=a.a.c==(wQc(),uQc)?i:e;f=a.a.c==uQc?e:i;k=Kfb(a.a.p[a.a.g[f.i.p].p])+Kfb(a.a.d[f.i.p])+f.n.b+f.a.b-Kfb(a.a.d[j.i.p])-j.n.b-j.a.b}a.a.n[a.a.g[e.i.p].p]=(Geb(),true);a.a.n[a.a.g[i.i.p].p]=true;return k}return d} +function Sfe(a,b,c,d){var e,f,g,h,i,j,k,l;if(d.gc()==0){return false}i=(nke(),RD(b,69).xk());g=i?d:new ZHd(d.gc());if(qke(a.e,b)){if(b.Si()){for(k=d.Kc();k.Ob();){j=k.Pb();if(!dge(a,b,j,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){f=oke(b,j);g.Fc(f)}}}else if(!i){for(k=d.Kc();k.Ob();){j=k.Pb();f=oke(b,j);g.Fc(f)}}}else{l=pke(a.e.Dh(),b);e=RD(a.g,124);for(h=0;h<a.i;++h){f=e[h];if(l.am(f.Lk())){throw Adb(new agb(gLe))}}if(d.gc()>1){throw Adb(new agb(gLe))}if(!i){f=oke(b,d.Kc().Pb());g.Fc(f)}}return XGd(a,gge(a,b,c),g)} +function Fge(a,b,c){var d,e,f,g,h,i,j,k;if(qke(a.e,b)){i=(nke(),RD(b,69).xk()?new ole(b,a):new Eke(b,a));bge(i.c,i.b);Ake(i,RD(c,16))}else{k=pke(a.e.Dh(),b);d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];f=e.Lk();if(k.am(f)){if(f==(Lle(),Jle)||f==Gle){j=Mge(a,b,c);h=g;j?vLd(a,g):++g;while(g<a.i){e=d[g];f=e.Lk();f==Jle||f==Gle?vLd(a,g):++g}j||RD(eHd(a,h,oke(b,c)),76)}else Mge(a,b,c)?vLd(a,g):RD(eHd(a,g,(nke(),RD(b,69).xk()?RD(c,76):oke(b,c))),76);return}}Mge(a,b,c)||WGd(a,(nke(),RD(b,69).xk()?RD(c,76):oke(b,c)))}} +function zPb(a,b,c){var d,e,f,g,h,i,j,k;if(!pb(c,a.b)){a.b=c;f=new CPb;g=RD(zDb(GDb(new SDb(null,new Swb(c.f,16)),f),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);a.e=true;a.f=true;a.c=true;a.d=true;e=g.Hc((IPb(),FPb));d=g.Hc(GPb);e&&!d&&(a.f=false);!e&&d&&(a.d=false);e=g.Hc(EPb);d=g.Hc(HPb);e&&!d&&(a.c=false);!e&&d&&(a.e=false)}k=RD(a.a.Ve(b,c),42);i=RD(k.a,17).a;j=RD(k.b,17).a;h=false;i<0?a.c||(h=true):a.e||(h=true);j<0?a.d||(h=true):a.f||(h=true);return h?zPb(a,k,c):k} +function fNb(a){var b,c,d,e;e=a.o;RMb();if(a.A.dc()||pb(a.A,QMb)){b=e.b}else{b=YKb(a.f);if(a.A.Hc((Qpd(),Npd))&&!a.B.Hc((dqd(),_pd))){b=$wnd.Math.max(b,YKb(RD(Vrb(a.p,(qpd(),Xod)),252)));b=$wnd.Math.max(b,YKb(RD(Vrb(a.p,ppd),252)))}c=TMb(a);!!c&&(b=$wnd.Math.max(b,c.b));if(a.A.Hc(Opd)){if(a.q==(Bod(),xod)||a.q==wod){b=$wnd.Math.max(b,SJb(RD(Vrb(a.b,(qpd(),Xod)),127)));b=$wnd.Math.max(b,SJb(RD(Vrb(a.b,ppd),127)))}}}Heb(TD(a.e.Tf().of((umd(),mld))))?(e.b=$wnd.Math.max(e.b,b)):(e.b=b);d=a.f.i;d.d=0;d.a=b;_Kb(a.f)} +function yNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(l=0;l<b.length;l++){for(h=a.Kc();h.Ob();){f=RD(h.Pb(),230);f.hg(l,b)}for(m=0;m<b[l].length;m++){for(i=a.Kc();i.Ob();){f=RD(i.Pb(),230);f.ig(l,m,b)}p=b[l][m].j;for(n=0;n<p.c.length;n++){for(j=a.Kc();j.Ob();){f=RD(j.Pb(),230);f.jg(l,m,n,b)}o=(tFb(n,p.c.length),RD(p.c[n],12));c=0;for(e=new l4b(o.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);for(k=a.Kc();k.Ob();){f=RD(k.Pb(),230);f.gg(l,m,n,c++,d,b)}}}}}for(g=a.Kc();g.Ob();){f=RD(g.Pb(),230);f.fg()}} +function $7b(a,b){var c,d,e,f,g,h,i;a.b=Kfb(UD(mQb(b,(yCc(),UBc))));a.c=Kfb(UD(mQb(b,XBc)));a.d=RD(mQb(b,DAc),350);a.a=RD(mQb(b,Xzc),282);Y7b(b);h=RD(zDb(CDb(CDb(EDb(EDb(new SDb(null,new Swb(b.b,16)),new c8b),new e8b),new g8b),new i8b),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(e=h.Kc();e.Ob();){c=RD(e.Pb(),18);g=RD(mQb(c,(Ywc(),Twc)),15);g.Jc(new k8b(a));pQb(c,Twc,null)}for(d=h.Kc();d.Ob();){c=RD(d.Pb(),18);i=RD(mQb(c,(Ywc(),Uwc)),18);f=RD(mQb(c,Rwc),15);S7b(a,f,i);pQb(c,Rwc,null)}} +function r2d(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.xe();i=null;if(h!=null){b.a+=''+h}else{g=a.a.mk();if(g!=null){f=qhb(g,Fhb(91));if(f!=-1){i=(BFb(f,g.length+1),g.substr(f));b.a+=''+zhb(g==null?vve:(uFb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new dMd(a.d);d.e!=d.i.gc();){c=RD(bMd(d),89);e?(e=false):(b.a+=pve,b);r2d(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';r2d(a.b,b)}else{if(a.f){b.a+=' extends ';r2d(a.f,b)}}}} +function Uae(a){a.b=null;a.a=null;a.o=null;a.q=null;a.v=null;a.w=null;a.B=null;a.p=null;a.Q=null;a.R=null;a.S=null;a.T=null;a.U=null;a.V=null;a.W=null;a.bb=null;a.eb=null;a.ab=null;a.H=null;a.db=null;a.c=null;a.d=null;a.f=null;a.n=null;a.r=null;a.s=null;a.u=null;a.G=null;a.J=null;a.e=null;a.j=null;a.i=null;a.g=null;a.k=null;a.t=null;a.F=null;a.I=null;a.L=null;a.M=null;a.O=null;a.P=null;a.$=null;a.N=null;a.Z=null;a.cb=null;a.K=null;a.D=null;a.A=null;a.C=null;a._=null;a.fb=null;a.X=null;a.Y=null;a.gb=false;a.hb=false} +function yib(a){var b,c,d,e;d=Ajb((!a.c&&(a.c=ojb(Hdb(a.f))),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=xib(a)<0?1:0;c=a.e;e=(d.length+1+$wnd.Math.abs(eE(a.e)),new cib);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>mib.length;c-=mib.length){$hb(e,mib)}_hb(e,mib,eE(c));Zhb(e,(BFb(b,d.length+1),d.substr(b)))}else{c=b-c;Zhb(e,zhb(d,b,eE(c)));e.a+='.';Zhb(e,yhb(d,eE(c)))}}else{Zhb(e,(BFb(b,d.length+1),d.substr(b)));for(;c<-mib.length;c+=mib.length){$hb(e,mib)}_hb(e,mib,eE(-c))}return e.a} +function BOc(a){var b,c,d,e,f,g,h,i,j;if(a.k!=(r3b(),p3b)){return false}if(a.j.c.length<=1){return false}f=RD(mQb(a,(yCc(),BBc)),101);if(f==(Bod(),wod)){return false}e=(wDc(),(!a.q?(yob(),yob(),wob):a.q)._b(iBc)?(d=RD(mQb(a,iBc),203)):(d=RD(mQb(Y2b(a),jBc),203)),d);if(e==uDc){return false}if(!(e==tDc||e==sDc)){g=Kfb(UD(hFc(a,fCc)));b=RD(mQb(a,eCc),140);!b&&(b=new R2b(g,g,g,g));j=b3b(a,(qpd(),ppd));i=b.d+b.a+(j.gc()-1)*g;if(i>a.o.b){return false}c=b3b(a,Xod);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} +function VRc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;b.Ug('Orthogonal edge routing',1);j=Kfb(UD(mQb(a,(yCc(),cCc))));c=Kfb(UD(mQb(a,UBc)));d=Kfb(UD(mQb(a,XBc)));m=new TTc(0,c);q=0;g=new Jkb(a.b,0);h=null;k=null;i=null;l=null;do{k=g.b<g.d.gc()?(sFb(g.b<g.d.gc()),RD(g.d.Xb(g.c=g.b++),30)):null;l=!k?null:k.a;if(h){p2b(h,q);q+=h.c.a}p=!h?q:q+d;o=STc(m,a,i,l,p);e=!h||ar(i,(dSc(),bSc));f=!k||ar(l,(dSc(),bSc));if(o>0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n<j&&!e&&!f&&(n=j);q+=n}else !e&&!f&&(q+=j);h=k;i=l}while(k);a.f.a=q;b.Vg()} +function tfe(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=RD(Xjb(a.d,b),142));if(!k){f=a.a.vi();l=f.i;if(!a.d||bkb(a.d)!=l){i=new Tsb;!!a.d&&Ld(i,a.d);j=i.f.c+i.i.c;for(h=j;h<l;++h){d=RD(QHd(f,h),142);e=Oee(a.e,d).xe();c=RD(e==null?rtb(i.f,null,d):Ltb(i.i,e,d),142);!!c&&c!=d&&(e==null?rtb(i.f,null,c):Ltb(i.i,e,c))}if(i.f.c+i.i.c!=l){for(g=0;g<j;++g){d=RD(QHd(f,g),142);e=Oee(a.e,d).xe();c=RD(e==null?rtb(i.f,null,d):Ltb(i.i,e,d),142);!!c&&c!=d&&(e==null?rtb(i.f,null,c):Ltb(i.i,e,c))}}a.d=i}k=RD(Xjb(a.d,b),142)}return k} +function w0b(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Heb(TD(mQb(b,(yCc(),bBc))));m=null;f==(BEc(),yEc)&&d.c.i==c?(m=d.c):f==zEc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(qpd(),opd);m?(k=m.j):Dod(RD(mQb(c,BBc),101))&&(k=f==yEc?ppd:Xod);i=t0b(a,b,c,f,k,d);h=s0b((Y2b(c),d));if(f==yEc){Y0b(h,RD(Vmb(i.j,0),12));Z0b(h,e)}else{Y0b(h,e);Z0b(h,RD(Vmb(i.j,0),12))}j=new G0b(d,h,i,RD(mQb(i,(Ywc(),Awc)),12),f,!m)}else{Rmb(j.e,d);n=$wnd.Math.max(Kfb(UD(mQb(j.d,FAc))),Kfb(UD(mQb(d,FAc))));pQb(j.d,FAc,n)}Rc(a.a,d,new J0b(j.d,b,f));return j} +function gSd(){gSd=geb;var a;fSd=new MSd;_Rd=$C(qJ,Nve,2,0,6,1);URd=Rdb(xSd(33,58),xSd(1,26));VRd=Rdb(xSd(97,122),xSd(65,90));WRd=xSd(48,57);SRd=Rdb(URd,0);TRd=Rdb(VRd,WRd);XRd=Rdb(Rdb(0,xSd(1,6)),xSd(33,38));YRd=Rdb(Rdb(WRd,xSd(65,70)),xSd(97,102));cSd=Rdb(SRd,vSd("-_.!~*'()"));dSd=Rdb(TRd,ySd("-_.!~*'()"));vSd(MJe);ySd(MJe);Rdb(cSd,vSd(';:@&=+$,'));Rdb(dSd,ySd(';:@&=+$,'));ZRd=vSd(':/?#');$Rd=ySd(':/?#');aSd=vSd('/?#');bSd=ySd('/?#');a=new _sb;a.a.zc('jar',a);a.a.zc('zip',a);a.a.zc('archive',a);eSd=(yob(),new Lqb(a))} +function t0b(a,b,c,d,e,f){var g,h,i,j,k,l;g=null;j=d==(BEc(),yEc)?f.c:f.d;i=i2b(b);if(j.i==c){g=RD(Wjb(a.b,j),10);if(!g){g=f2b(j,RD(mQb(c,(yCc(),BBc)),101),e,p0b(j),null,j.n,j.o,i,b);pQb(g,(Ywc(),Awc),j);Zjb(a.b,j,g)}}else{g=f2b((k=new qQb,l=Kfb(UD(mQb(b,(yCc(),TBc))))/2,oQb(k,ABc,l),k),RD(mQb(c,BBc),101),e,d==yEc?-1:1,null,new pjd,new rjd(0,0),i,b);h=u0b(g,c,d);pQb(g,(Ywc(),Awc),h);Zjb(a.b,h,g)}RD(mQb(b,(Ywc(),kwc)),21).Fc((ovc(),hvc));Dod(RD(mQb(b,(yCc(),BBc)),101))?pQb(b,BBc,(Bod(),yod)):pQb(b,BBc,(Bod(),zod));return g} +function Yec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=0;o=0;i=Fnb(a.g,a.g.length);f=a.e;g=a.j;d=a.b;e=a.c;do{n=0;for(k=new Anb(a.q);k.a<k.c.c.length;){j=RD(ynb(k),10);m=Wec(a,j);c=true;(a.r==(aEc(),VDc)||a.r==YDc)&&(c=Heb(TD(m.b)));if(RD(m.a,17).a<0&&c){++n;i=Fnb(a.g,a.g.length);a.e=a.e+RD(m.a,17).a;o+=f-a.e;f=a.e+RD(m.a,17).a;g=a.j;d=bv(a.b);e=bv(a.c)}else{a.g=Fnb(i,i.length);a.e=f;a.b=(Qb(d),d?new dnb(d):cv(new Anb(d)));a.c=(Qb(e),e?new dnb(e):cv(new Anb(e)));a.j=g}}++h;l=n!=0&&Heb(TD(b.Kb(new Ptd(sgb(o),sgb(h)))))}while(l)} +function e8c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;g=a.f;m=b.f;h=g==(sad(),nad)||g==pad;n=m==nad||m==pad;i=g==oad||g==qad;o=m==oad||m==qad;j=g==oad||g==nad;p=m==oad||m==nad;if(h&&n){return a.f==pad?a:b}else if(i&&o){return a.f==qad?a:b}else if(j&&p){if(g==oad){l=a;k=b}else{l=b;k=a}f=(q=c.j+c.f,r=l.e+d.f,s=$wnd.Math.max(q,r),t=s-$wnd.Math.min(c.j,l.e),u=l.d+d.g-c.i,u*t);e=(v=c.i+c.g,w=k.d+d.g,A=$wnd.Math.max(v,w),B=A-$wnd.Math.min(c.i,k.d),C=k.e+d.f-c.j,B*C);return f<=e?a.f==oad?a:b:a.f==nad?a:b}return a} +function t0c(a,b){var c,d,e,f,g,h,i,j,k,l;pQb(b,(q$c(),g$c),0);i=RD(mQb(b,c$c),39);if(b.d.b==0){if(i){k=Kfb(UD(mQb(i,j$c)))+a.b+u0c(a,i,b);pQb(b,j$c,k)}else{pQb(b,j$c,0)}}else{for(d=(f=Sub((new dXc(b)).a.d,0),new gXc(f));dvb(d.a);){c=RD(evb(d.a),65).c;t0c(a,c)}h=RD(Hr((g=Sub((new dXc(b)).a.d,0),new gXc(g))),39);l=RD(Gr((e=Sub((new dXc(b)).a.d,0),new gXc(e))),39);j=(Kfb(UD(mQb(l,j$c)))+Kfb(UD(mQb(h,j$c))))/2;if(i){k=Kfb(UD(mQb(i,j$c)))+a.b+u0c(a,i,b);pQb(b,j$c,k);pQb(b,g$c,Kfb(UD(mQb(b,j$c)))-j);s0c(a,b)}else{pQb(b,j$c,j)}}} +function nJb(a){var b,c,d,e,f,g,h,i,j,k,l;k=a.e.a.c.length;for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);f.j=false}a.i=$C(kE,Pwe,28,k,15,1);a.g=$C(kE,Pwe,28,k,15,1);a.n=new bnb;e=0;l=new bnb;for(i=new Anb(a.e.a);i.a<i.c.c.length;){h=RD(ynb(i),125);h.d=e++;h.b.a.c.length==0&&Rmb(a.n,h);Tmb(l,h.g)}b=0;for(d=new Anb(l);d.a<d.c.c.length;){c=RD(ynb(d),218);c.c=b++;c.f=false}j=l.c.length;if(a.b==null||a.b.length<j){a.b=$C(iE,vxe,28,j,15,1);a.c=$C(xdb,Hye,28,j,16,1)}else{Nnb(a.c)}a.d=l;a.p=new Jub(Sv(a.d.c.length));a.j=1} +function uWb(a,b){var c,d,e,f,g,h,i,j,k;if(b.e.c.length<=1){return}a.f=b;a.d=RD(mQb(a.f,(dWb(),UVb)),391);a.g=RD(mQb(a.f,YVb),17).a;a.e=Kfb(UD(mQb(a.f,VVb)));a.c=Kfb(UD(mQb(a.f,TVb)));At(a.b);for(e=new Anb(a.f.c);e.a<e.c.c.length;){d=RD(ynb(e),289);zt(a.b,d.c,d,null);zt(a.b,d.d,d,null)}h=a.f.e.c.length;a.a=YC(iE,[Nve,vxe],[109,28],15,[h,h],2);for(j=new Anb(a.f.e);j.a<j.c.c.length;){i=RD(ynb(j),153);qWb(a,i,a.a[i.a])}a.i=YC(iE,[Nve,vxe],[109,28],15,[h,h],2);for(f=0;f<h;++f){for(g=0;g<h;++g){c=a.a[f][g];k=1/(c*c);a.i[f][g]=k}}} +function OWb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=b.ah();h||b.Ug(Pze,1);c=RD(mQb(a,(Ywc(),Kwc)),15);g=1/c.gc();if(b._g()){b.bh('ELK Layered uses the following '+c.gc()+' modules:');n=0;for(m=c.Kc();m.Ob();){k=RD(m.Pb(),47);d=(n<10?'0':'')+n++;b.bh(' Slot '+d+': '+nfb(rb(k)))}}o=0;for(l=c.Kc();l.Ob();){k=RD(l.Pb(),47);if(b.$g()){return}k.Kf(a,b.eh(g));++o}for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);Tmb(a.a,e.a);e.a.c.length=0}for(j=new Anb(a.a);j.a<j.c.c.length;){i=RD(ynb(j),10);g3b(i,null)}a.b.c.length=0;h||b.Vg()} +function y9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;j=new bnb;if(!nQb(a,(Ywc(),fwc))){return j}for(d=RD(mQb(a,fwc),15).Kc();d.Ob();){b=RD(d.Pb(),10);x9b(b,a);ZEb(j.c,b)}for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k!=(r3b(),m3b)){continue}i=RD(mQb(g,gwc),10);!!i&&(k=new R3b,P3b(k,g),l=RD(mQb(g,hwc),64),Q3b(k,l),m=RD(Vmb(i.j,0),12),n=new a1b,Y0b(n,k),Z0b(n,m),undefined)}}for(c=new Anb(j);c.a<c.c.c.length;){b=RD(ynb(c),10);g3b(b,RD(Vmb(a.b,a.b.c.length-1),30))}return j} +function U8c(a,b,c){var d,e,f,g,h,i,j,k,l;l=new bnb;k=new Had(0,c);f=0;Cad(k,new V9c(0,0,k,c));e=0;for(j=new dMd(a);j.e!=j.i.gc();){i=RD(bMd(j),27);d=RD(Vmb(k.a,k.a.c.length-1),172);h=e+i.g+(RD(Vmb(k.a,0),172).b.c.length==0?0:c);if(h>b||Heb(TD(Gxd(i,(X7c(),D7c))))){e=0;f+=k.b+c;ZEb(l.c,k);k=new Had(f,c);d=new V9c(0,k.f,k,c);Cad(k,d);e=0}if(d.b.c.length==0||!Heb(TD(Gxd(vCd(i),(X7c(),L7c))))&&(i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f)){K9c(d,i)}else{g=new V9c(d.s+d.r+c,k.f,k,c);Cad(k,g);K9c(g,i)}e=i.i+i.g}ZEb(l.c,k);return l} +function ste(a){var b,c,d,e;if(a.b==null||a.b.length<=2)return;if(a.a)return;b=0;e=0;while(e<a.b.length){if(b!=e){a.b[b]=a.b[e++];a.b[b+1]=a.b[e++]}else e+=2;c=a.b[b+1];while(e<a.b.length){if(c+1<a.b[e])break;if(c+1==a.b[e]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else if(c>=a.b[e+1]){e+=2}else if(c<a.b[e+1]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else{throw Adb(new yz('Token#compactRanges(): Internel Error: ['+a.b[b]+','+a.b[b+1]+'] ['+a.b[e]+','+a.b[e+1]+']'))}}b+=2}if(b!=a.b.length){d=$C(kE,Pwe,28,b,15,1);hib(a.b,0,d,0,b);a.b=d}a.a=true} +function x0b(a,b){var c,d,e,f,g,h,i;for(g=Ec(a.a).Kc();g.Ob();){f=RD(g.Pb(),18);if(f.b.c.length>0){d=new dnb(RD(Qc(a.a,f),21));yob();_mb(d,new M0b(b));e=new Jkb(f.b,0);while(e.b<e.d.gc()){c=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),72));h=-1;switch(RD(mQb(c,(yCc(),wAc)),278).g){case 1:h=d.c.length-1;break;case 0:h=v0b(d);break;case 2:h=0;}if(h!=-1){i=(tFb(h,d.c.length),RD(d.c[h],249));Rmb(i.b.b,c);RD(mQb(Y2b(i.b.c.i),(Ywc(),kwc)),21).Fc((ovc(),gvc));RD(mQb(Y2b(i.b.c.i),kwc),21).Fc(evc);Ckb(e);pQb(c,Dwc,f)}}}Y0b(f,null);Z0b(f,null)}} +function wOb(a,b){var c,d,e,f;c=new BOb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();e=e==2?1:0;e==1&&Gdb(Mdb(RD(zDb(CDb(d.Lc(),new DOb),PBb(Hgb(0),new uCb)),168).a,2),0)&&(e=0);d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();f=f==2?1:0;f==1&&Gdb(Mdb(RD(zDb(CDb(d.Lc(),new FOb),PBb(Hgb(0),new uCb)),168).a,2),0)&&(f=0);if(e<f){return -1}if(e==f){return 0}return 1} +function W4b(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=MCd(a);f=Heb(TD(Gxd(b,(yCc(),NAc))));k=0;e=0;for(j=new dMd((!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));j.e!=j.i.gc();){i=RD(bMd(j),74);h=ozd(i);g=h&&f&&Heb(TD(Gxd(i,OAc)));m=AGd(RD(QHd((!i.c&&(i.c=new Yie(E4,i,5,8)),i.c),0),84));h&&g?++e:h&&!g?++k:vCd(m)==b||m==b?++e:++k}for(d=new dMd((!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));d.e!=d.i.gc();){c=RD(bMd(d),74);h=ozd(c);g=h&&f&&Heb(TD(Gxd(c,OAc)));l=AGd(RD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),84));h&&g?++k:h&&!g?++e:vCd(l)==b||l==b?++k:++e}return k-e} +function Jec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;b.Ug('Edge splitting',1);if(a.b.c.length<=2){b.Vg();return}f=new Jkb(a.b,0);g=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30));while(f.b<f.d.gc()){e=g;g=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30));for(i=new Anb(e.a);i.a<i.c.c.length;){h=RD(ynb(i),10);for(k=new Anb(h.j);k.a<k.c.c.length;){j=RD(ynb(k),12);for(d=new Anb(j.g);d.a<d.c.c.length;){c=RD(ynb(d),18);m=c.d;l=m.i.c;l!=e&&l!=g&&Oec(c,(n=new j3b(a),h3b(n,(r3b(),o3b)),pQb(n,(Ywc(),Awc),c),pQb(n,(yCc(),BBc),(Bod(),wod)),g3b(n,g),n))}}}}b.Vg()} +function MLc(a,b){var c,d,e,f,g,h,i,j,k,l,m;k=new bnb;m=new _sb;g=b.b;for(e=0;e<g.c.length;e++){j=(tFb(e,g.c.length),RD(g.c[e],30)).a;k.c.length=0;for(f=0;f<j.c.length;f++){h=a.a[e][f];h.p=f;h.k==(r3b(),q3b)&&(ZEb(k.c,h),true);$mb(RD(Vmb(b.b,e),30).a,f,h);h.j.c.length=0;Tmb(h.j,RD(RD(Vmb(a.b,e),15).Xb(f),16));Cod(RD(mQb(h,(yCc(),BBc)),101))||pQb(h,BBc,(Bod(),vod))}for(d=new Anb(k);d.a<d.c.c.length;){c=RD(ynb(d),10);l=KLc(c);m.a.zc(l,m);m.a.zc(c,m)}}for(i=m.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);yob();_mb(h.j,(sgc(),mgc));h.i=true;V2b(h)}} +function zib(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=zjb(Hdb(a.f),eE(a.e));return a.g}e=Ajb((!a.c&&(a.c=ojb(Hdb(a.f))),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=ojb(Hdb(a.f))),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new bib;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){aib(f,c-eE(a.e),String.fromCharCode(46))}else{peb(f,b-1,b-1,'0.');aib(f,b+1,Ihb(mib,0,-eE(d)-1))}}else{if(c-b>=1){aib(f,b,String.fromCharCode(46));++c}aib(f,c,String.fromCharCode(69));d>0&&aib(f,++c,String.fromCharCode(43));aib(f,++c,''+Zdb(Hdb(d)))}a.g=f.a;return a.g} +function KNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;d=Kfb(UD(mQb(b,(yCc(),hBc))));v=RD(mQb(b,gCc),17).a;m=4;e=3;w=20/v;n=false;i=0;g=lve;do{f=i!=1;l=i!=0;A=0;for(q=a.a,s=0,u=q.length;s<u;++s){o=q[s];o.f=null;LNc(a,o,f,l,d);A+=$wnd.Math.abs(o.a)}do{h=PNc(a,b)}while(h);for(p=a.a,r=0,t=p.length;r<t;++r){o=p[r];c=XNc(o).a;if(c!=0){for(k=new Anb(o.e);k.a<k.c.c.length;){j=RD(ynb(k),10);j.n.b+=c}}}if(i==0||i==1){--m;if(m<=0&&(A<g||-m>v)){i=2;g=lve}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A<w;g=A;n&&--e}}while(!(n&&e<=0))} +function LFb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=new Tsb;for(f=a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),177);Zjb(o,d,c.af(d))}g=(Qb(a),a?new dnb(a):cv(a.a.ec().Kc()));_mb(g,new NFb(o));h=Xx(g);i=new $Fb(b);n=new Tsb;rtb(n.f,b,i);while(h.a.gc()!=0){j=null;k=null;l=null;for(e=h.a.ec().Kc();e.Ob();){d=RD(e.Pb(),177);if(Kfb(UD(Wd(qtb(o.f,d))))<=oxe){if(Ujb(n,d.a)&&!Ujb(n,d.b)){k=d.b;l=d.a;j=d;break}if(Ujb(n,d.b)){if(!Ujb(n,d.a)){k=d.a;l=d.b;j=d;break}}}}if(!j){break}m=new $Fb(k);Rmb(RD(Wd(qtb(n.f,l)),225).a,m);rtb(n.f,k,m);h.a.Bc(j)!=null}return i} +function MFc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;c.Ug('Depth-first cycle removal',1);l=b.a;k=l.c.length;a.c=new bnb;a.d=$C(xdb,Hye,28,k,16,1);a.a=$C(xdb,Hye,28,k,16,1);a.b=new bnb;g=0;for(j=new Anb(l);j.a<j.c.c.length;){i=RD(ynb(j),10);i.p=g;gr(Z2b(i))&&Rmb(a.c,i);++g}for(n=new Anb(a.c);n.a<n.c.c.length;){m=RD(ynb(n),10);LFc(a,m)}for(f=0;f<k;f++){if(!a.d[f]){h=(tFb(f,l.c.length),RD(l.c[f],10));LFc(a,h)}}for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true);pQb(b,(Ywc(),awc),(Geb(),true))}a.c=null;a.d=null;a.a=null;a.b=null;c.Vg()} +function Kid(a,b){tid();var c,d,e,f,g,h;f=b.c-(a.c+a.b);e=a.c-(b.c+b.b);g=a.d-(b.d+b.a);c=b.d-(a.d+a.a);d=$wnd.Math.max(e,f);h=$wnd.Math.max(g,c);Zy();bz(vEe);if(($wnd.Math.abs(d)<=vEe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:cz(isNaN(d),isNaN(0)))>=0^(null,bz(vEe),($wnd.Math.abs(h)<=vEe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:cz(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}bz(vEe);if(($wnd.Math.abs(d)<=vEe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:cz(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} +function hue(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new gyb);if(a.e==2){dyb(a.a,b);return}if(b.e==1){for(e=0;e<b.Pm();e++)hue(a,b.Lm(e));return}h=a.a.a.c.length;if(h==0){dyb(a.a,b);return}g=RD(eyb(a.a,h-1),122);if(!((g.e==0||g.e==10)&&(b.e==0||b.e==10))){dyb(a.a,b);return}f=b.e==0?2:b.Mm().length;if(g.e==0){c=new Rhb;d=g.Km();d>=txe?Nhb(c,qse(d)):Jhb(c,d&Bwe);g=(++Use,new eue(10,null,0));fyb(a.a,g,h-1)}else{c=(g.Mm().length+f,new Rhb);Nhb(c,g.Mm())}if(b.e==0){d=b.Km();d>=txe?Nhb(c,qse(d)):Jhb(c,d&Bwe)}else{Nhb(c,b.Mm())}RD(g,530).b=c.a} +function Qsc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=RD(d.Pb(),17).a;while(h<b.f){if(h==o){m=0;d.Ob()?(o=RD(d.Pb(),17).a):(o=b.f+1)}if(h!=m){q=RD(Vmb(a.b,h),30);n=RD(Vmb(a.b,m),30);p=bv(q.a);for(l=new Anb(p);l.a<l.c.c.length;){k=RD(ynb(l),10);f3b(k,n.a.c.length,n);if(m==0){g=bv(Z2b(k));for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),18);X0b(e,true);pQb(a,(Ywc(),awc),(Geb(),true));osc(a,e,1)}}}}++m;++h}i=new Jkb(a.b,0);while(i.b<i.d.gc()){j=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),30));j.a.c.length==0&&Ckb(i)}} +function Xjc(a,b,c){var d,e,f;e=RD(mQb(b,(yCc(),Xzc)),282);if(e==($uc(),Yuc)){return}c.Ug('Horizontal Compaction',1);a.a=b;f=new Ckc;d=new VGb((f.d=b,f.c=RD(mQb(f.d,yAc),223),tkc(f),Akc(f),zkc(f),f.a));TGb(d,a.b);switch(RD(mQb(b,Wzc),431).g){case 1:RGb(d,new Pic(a.a));break;default:RGb(d,(FGb(),DGb));}switch(e.g){case 1:KGb(d);break;case 2:KGb(JGb(d,(Cmd(),zmd)));break;case 3:KGb(SGb(JGb(KGb(d),(Cmd(),zmd)),new fkc));break;case 4:KGb(SGb(JGb(KGb(d),(Cmd(),zmd)),new hkc(f)));break;case 5:KGb(QGb(d,Vjc));}JGb(d,(Cmd(),ymd));d.e=true;qkc(f);c.Vg()} +function bqc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;g=b.b;k=g.o;i=g.d;d=Kfb(UD(k2b(g,(yCc(),TBc))));e=Kfb(UD(k2b(g,VBc)));j=Kfb(UD(k2b(g,dCc)));h=new T2b;D2b(h,i.d,i.c,i.a,i.b);m=Zpc(b,d,e,j);for(r=new Anb(b.d);r.a<r.c.c.length;){q=RD(ynb(r),105);for(o=q.f.a.ec().Kc();o.Ob();){n=RD(o.Pb(),340);f=n.a;l=Xpc(n);c=(s=new Ejd,Vpc(n,n.c,m,s),Upc(n,l,m,s),Vpc(n,n.d,m,s),s);c=a.ng(n,l,c);Xub(f.a);ye(f.a,c);FDb(new SDb(null,new Swb(c,16)),new fqc(k,h))}p=q.i;if(p){aqc(q,p,m,e);t=new sjd(p.g);cqc(k,h,t);$id(t,p.j);cqc(k,h,t)}}D2b(i,h.d,h.c,h.a,h.b)} +function f8c(a,b,c,d,e,f,g,h){var i,j,k,l;i=dv(cD(WC(y1,1),rve,238,0,[b,c,d,e]));l=null;switch(a.b.g){case 1:l=dv(cD(WC(h1,1),rve,535,0,[new r8c,new h8c,new j8c]));break;case 0:l=dv(cD(WC(h1,1),rve,535,0,[new j8c,new h8c,new r8c]));break;case 2:l=dv(cD(WC(h1,1),rve,535,0,[new h8c,new r8c,new j8c]));}for(k=new Anb(l);k.a<k.c.c.length;){j=RD(ynb(k),535);i.c.length>1&&(i=j.Hg(i,a.a,h))}if(i.c.length==1){return RD(Vmb(i,i.c.length-1),238)}if(i.c.length==2){return e8c((tFb(0,i.c.length),RD(i.c[0],238)),(tFb(1,i.c.length),RD(i.c[1],238)),g,f)}return null} +function CZc(a,b,c){var d,e,f,g,h,i,j;c.Ug('Find roots',1);a.a.c.length=0;for(e=Sub(b.b,0);e.b!=e.d.c;){d=RD(evb(e),39);if(d.b.b==0){pQb(d,(q$c(),n$c),(Geb(),true));Rmb(a.a,d)}}switch(a.a.c.length){case 0:f=new bXc(0,b,'DUMMY_ROOT');pQb(f,(q$c(),n$c),(Geb(),true));pQb(f,WZc,true);Mub(b.b,f);break;case 1:break;default:g=new bXc(0,b,IEe);for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),39);j=new WWc(g,h);pQb(j,(q$c(),WZc),(Geb(),true));Mub(g.a.a,j);Mub(g.d,j);Mub(h.b,j);pQb(h,n$c,false)}pQb(g,(q$c(),n$c),(Geb(),true));pQb(g,WZc,true);Mub(b.b,g);}c.Vg()} +function AQb(a){var b,c,d,e,f,g;Umb(a.a,new GQb);for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),225);d=ojd(ajd(RD(a.b,68).c),RD(b.b,68).c);if(wQb){g=RD(a.b,68).b;f=RD(b.b,68).b;if($wnd.Math.abs(d.a)>=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.d<g.d+g.a&&kjd(d,$wnd.Math.max(g.c-(f.c+f.b),f.c-(g.c+g.b)))}else{d.a=0;f.c+f.b>g.c&&f.c<g.c+g.b&&kjd(d,$wnd.Math.max(g.d-(f.d+f.a),f.d-(g.d+g.a)))}}else{kjd(d,SQb(RD(a.b,68),RD(b.b,68)))}e=$wnd.Math.sqrt(d.a*d.a+d.b*d.b);e=CQb(xQb,b,e,d);kjd(d,e);RQb(RD(b.b,68),d);Umb(b.a,new IQb(d));RD(xQb.b,68);BQb(xQb,yQb,b)}} +function tOc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;a.f=new BIb;j=0;e=0;for(g=new Anb(a.e.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j++;for(d=new is(Mr(a3b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);c.p=e++}b=BOc(h);for(m=new Anb(h.j);m.a<m.c.c.length;){l=RD(ynb(m),12);if(b){o=l.a.b;if(o!=$wnd.Math.floor(o)){k=o-Xdb(Hdb($wnd.Math.round(o)));l.a.b-=k}}n=l.n.b+l.a.b;if(n!=$wnd.Math.floor(n)){k=n-Xdb(Hdb($wnd.Math.round(n)));l.n.b-=k}}}}a.g=j;a.b=e;a.i=$C(XY,rve,412,j,0,1);a.c=$C(WY,rve,655,e,0,1);a.d.a.$b()} +function sLd(a){var b,c,d,e,f,g,h,i,j;if(a.Pj()){i=a.Qj();if(a.i>0){b=new zNd(a.i,a.g);c=a.i;f=c<100?null:new gLd(c);if(a.Tj()){for(d=0;d<a.i;++d){g=a.g[d];f=a.Vj(g,f)}}OHd(a);e=c==1?a.Ij(4,QHd(b,0),null,0,i):a.Ij(6,b,null,-1,i);if(a.Mj()){for(d=new yMd(b);d.e!=d.i.gc();){f=a.Oj(xMd(d),f)}if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}else{if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}}else{OHd(a);a.Jj(a.Ij(6,(yob(),vob),null,-1,i))}}else if(a.Mj()){if(a.i>0){h=a.g;j=a.i;OHd(a);f=j<100?null:new gLd(j);for(d=0;d<j;++d){g=h[d];f=a.Oj(g,f)}!!f&&f.oj()}else{OHd(a)}}else{OHd(a)}} +function xVc(a,b,c){var d,e,f,g,h,i,j,k,l,m;rVc(this);c==(dVc(),bVc)?Ysb(this.r,a):Ysb(this.w,a);k=oxe;j=pxe;for(g=b.a.ec().Kc();g.Ob();){e=RD(g.Pb(),42);h=RD(e.a,464);d=RD(e.b,18);i=d.c;i==a&&(i=d.d);h==bVc?Ysb(this.r,i):Ysb(this.w,i);m=(qpd(),hpd).Hc(i.j)?Kfb(UD(mQb(i,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=(qpd(),hpd).Hc(a.j)?Kfb(UD(mQb(a,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])).b;vVc(this,l,k,j);for(f=b.a.ec().Kc();f.Ob();){e=RD(f.Pb(),42);sVc(this,RD(e.b,18))}this.o=false} +function wD(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c=a.l&8191;d=a.l>>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&dxe;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=dxe;u+=p>>22;p&=dxe;u&=exe;return hD(m,p,u)} +function Fac(a){var b,c,d,e,f,g,h;h=RD(Vmb(a.j,0),12);if(h.g.c.length!=0&&h.e.c.length!=0){throw Adb(new dgb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=oxe;for(c=new Anb(h.g);c.a<c.c.c.length;){b=RD(ynb(c),18);g=b.d.i;d=RD(mQb(g,(yCc(),_Ac)),140);f=$wnd.Math.min(f,g.n.a-d.b)}return new cc(Qb(f))}if(h.e.c.length!=0){e=pxe;for(c=new Anb(h.e);c.a<c.c.c.length;){b=RD(ynb(c),18);g=b.c.i;d=RD(mQb(g,(yCc(),_Ac)),140);e=$wnd.Math.max(e,g.n.a+g.o.a+d.c)}return new cc(Qb(e))}return wb(),wb(),vb} +function cZd(a,b){var c,d,e,f,g,h,i;if(a.ol()){if(a.i>4){if(a.fk(b)){if(a.al()){e=RD(b,54);d=e.Eh();i=d==a.e&&(a.ml()?e.yh(e.Fh(),a.il())==a.jl():-1-e.Fh()==a.Lj());if(a.nl()&&!i&&!d&&!!e.Jh()){for(f=0;f<a.i;++f){c=a.pl(RD(a.g[f],58));if(dE(c)===dE(b)){return true}}}return i}else if(a.ml()&&!a.ll()){g=RD(b,58).Mh(Z5d(RD(a.Lk(),19)));if(dE(g)===dE(a.e)){return true}else if(g==null||!RD(g,58).Vh()){return false}}}else{return false}}h=PHd(a,b);if(a.nl()&&!h){for(f=0;f<a.i;++f){e=a.pl(RD(a.g[f],58));if(dE(e)===dE(b)){return true}}}return h}else{return PHd(a,b)}} +function bGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Interactive cycle breaking',1);l=new bnb;for(n=new Anb(b.a);n.a<n.c.c.length;){m=RD(ynb(n),10);m.p=1;o=_2b(m).a;for(k=c3b(m,(BEc(),zEc)).Kc();k.Ob();){j=RD(k.Pb(),12);for(f=new Anb(j.g);f.a<f.c.c.length;){d=RD(ynb(f),18);p=d.d.i;if(p!=m){q=_2b(p).a;q<o&&(ZEb(l.c,d),true)}}}}for(g=new Anb(l);g.a<g.c.c.length;){d=RD(ynb(g),18);X0b(d,true)}l.c.length=0;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p>0&&aGc(a,h,l)}for(e=new Anb(l);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true)}l.c.length=0;c.Vg()} +function mMc(a,b){var c,d,e,f,g,h,i,j,k;c=0;k=new bnb;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),12);$Lc(a.b,a.d[g.p]);k.c.length=0;switch(g.i.k.g){case 0:d=RD(mQb(g,(Ywc(),Iwc)),10);Umb(d.j,new XMc(k));break;case 1:Mvb(DDb(CDb(new SDb(null,new Swb(g.i.j,16)),new ZMc(g))),new aNc(k));break;case 3:e=RD(mQb(g,(Ywc(),Awc)),12);Rmb(k,new Ptd(e,sgb(g.e.c.length+g.g.c.length)));}for(j=new Anb(k);j.a<j.c.c.length;){i=RD(ynb(j),42);f=AMc(a,RD(i.a,12));if(f>a.d[g.p]){c+=ZLc(a.b,f)*RD(i.b,17).a;hmb(a.a,sgb(f))}}while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} +function x9b(a,b){var c,d,e,f,g,h,i,j,k,l;k=RD(mQb(a,(Ywc(),hwc)),64);d=RD(Vmb(a.j,0),12);k==(qpd(),Yod)?Q3b(d,npd):k==npd&&Q3b(d,Yod);if(RD(mQb(b,(yCc(),lBc)),181).Hc((Qpd(),Ppd))){i=Kfb(UD(mQb(a,_Bc)));j=Kfb(UD(mQb(a,aCc)));g=Kfb(UD(mQb(a,ZBc)));h=RD(mQb(b,EBc),21);if(h.Hc((Pod(),Lod))){c=j;l=a.o.a/2-d.n.a;for(f=new Anb(d.f);f.a<f.c.c.length;){e=RD(ynb(f),72);e.n.b=c;e.n.a=l-e.o.a/2;c+=e.o.b+g}}else if(h.Hc(Nod)){for(f=new Anb(d.f);f.a<f.c.c.length;){e=RD(ynb(f),72);e.n.a=i+a.o.a-d.n.a}}NJb(new PJb((i1b(),new t1b(b,false,false,new _1b))),new F1b(null,a,false))}} +function ykc(a,b){var c,d,e,f,g,h,i,j,k;if(b.c.length==0){return}yob();Ynb(b.c,b.c.length,null);e=new Anb(b);d=RD(ynb(e),154);while(e.a<e.c.c.length){c=RD(ynb(e),154);if(rGb(d.e.c,c.e.c)&&!(uGb(Mid(d.e).b,c.e.d)||uGb(Mid(c.e).b,d.e.d))){d=(Tmb(d.k,c.k),Tmb(d.b,c.b),Tmb(d.c,c.c),ye(d.i,c.i),Tmb(d.d,c.d),Tmb(d.j,c.j),f=$wnd.Math.min(d.e.c,c.e.c),g=$wnd.Math.min(d.e.d,c.e.d),h=$wnd.Math.max(d.e.c+d.e.b,c.e.c+c.e.b),i=h-f,j=$wnd.Math.max(d.e.d+d.e.a,c.e.d+c.e.a),k=j-g,Rid(d.e,f,g,i,k),$Gb(d.f,c.f),!d.a&&(d.a=c.a),Tmb(d.g,c.g),Rmb(d.g,c),d)}else{Bkc(a,d);d=c}}Bkc(a,d)} +function B0b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;i=new bnb;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);for(h=new Anb(e.j);h.a<h.c.c.length;){g=RD(ynb(h),12);k=null;for(t=s2b(g.g),u=0,v=t.length;u<v;++u){s=t[u];if(!n2b(s.d.i,c)){r=w0b(a,b,c,s,s.c,(BEc(),zEc),k);r!=k&&(ZEb(i.c,r),true);r.c&&(k=r)}}j=null;for(o=s2b(g.e),p=0,q=o.length;p<q;++p){n=o[p];if(!n2b(n.c.i,c)){r=w0b(a,b,c,n,n.d,(BEc(),yEc),j);r!=j&&(ZEb(i.c,r),true);r.c&&(j=r)}}}}for(m=new Anb(i);m.a<m.c.c.length;){l=RD(ynb(m),452);Wmb(b.a,l.a,0)!=-1||Rmb(b.a,l.a);l.c&&(ZEb(d.c,l),true)}} +function hrd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new sjd(RD(Gxd(a,(hkd(),bkd)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=UD(Gxd(a,Xjd));(e==null||(uFb(e),e)<=0)&&(e=1.3);h=new bnb;for(o=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));o.e!=o.i.gc();){n=RD(bMd(o),27);g=new Ard(n);ZEb(h.c,g)}m=RD(Gxd(a,Yjd),320);switch(m.g){case 3:q=erd(h,b,l.a,l.b,(j=d,uFb(e),e,j));break;case 1:q=drd(h,b,l.a,l.b,(k=d,uFb(e),e,k));break;default:q=frd(h,b,l.a,l.b,(i=d,uFb(e),e,i));}f=new zrd(q);p=ird(f,b,c,l.a,l.b,d,(uFb(e),e));Esd(a,p.a,p.b,false,true)} +function m2b(a,b,c,d){var e,f,g,h,i,j;h=a.j;if(h==(qpd(),opd)&&b!=(Bod(),zod)&&b!=(Bod(),Aod)){h=c2b(a,c);Q3b(a,h);!(!a.q?(yob(),yob(),wob):a.q)._b((yCc(),ABc))&&h!=opd&&(a.n.a!=0||a.n.b!=0)&&pQb(a,ABc,b2b(a,h))}if(b==(Bod(),xod)){j=0;switch(h.g){case 1:case 3:f=a.i.o.a;f>0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}pQb(a,(Ywc(),Jwc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=zod&&b!=Aod&&h!=opd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function VJd(a){var b,c,d,e,f,g,h,i,j,k;if(a.Pj()){k=a.Ej();i=a.Qj();if(k>0){b=new $Hd(a.pj());c=k;f=c<100?null:new gLd(c);aJd(a,c,b.g);e=c==1?a.Ij(4,QHd(b,0),null,0,i):a.Ij(6,b,null,-1,i);if(a.Mj()){for(d=new dMd(b);d.e!=d.i.gc();){f=a.Oj(bMd(d),f)}if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}else{if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}}else{aJd(a,a.Ej(),a.Fj());a.Jj(a.Ij(6,(yob(),vob),null,-1,i))}}else if(a.Mj()){k=a.Ej();if(k>0){h=a.Fj();j=k;aJd(a,k,h);f=j<100?null:new gLd(j);for(d=0;d<j;++d){g=h[d];f=a.Oj(g,f)}!!f&&f.oj()}else{aJd(a,a.Ej(),a.Fj())}}else{aJd(a,a.Ej(),a.Fj())}} +function frd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=$C(iE,vxe,28,a.c.length,15,1);m=new pwb(new Qrd);iwb(m,a);j=0;p=new bnb;while(m.b.c.length!=0){g=RD(m.b.c.length==0?null:Vmb(m.b,0),163);if(j>1&&urd(g)*trd(g)/2>h[0]){f=0;while(f<p.c.length-1&&urd(g)*trd(g)/2>h[f]){++f}o=new Rkb(p,0,f+1);l=new zrd(o);k=urd(g)/trd(g);i=ird(l,b,new z3b,c,d,e,k);$id(hjd(l.e),i);zFb(lwb(m,l),Bxe);n=new Rkb(p,f+1,p.c.length);iwb(m,n);p.c.length=0;j=0;Pnb(h,h.length,0)}else{q=m.b.c.length==0?null:Vmb(m.b,0);q!=null&&owb(m,0);j>0&&(h[j]=h[j-1]);h[j]+=urd(g)*trd(g);++j;ZEb(p.c,g)}}return p} +function _nc(a,b){var c,d,e,f;c=b.b;f=new dnb(c.j);e=0;d=c.j;d.c.length=0;Nnc(RD($i(a.b,(qpd(),Yod),(joc(),ioc)),15),c);e=Onc(f,e,new Hoc,d);Nnc(RD($i(a.b,Yod,hoc),15),c);e=Onc(f,e,new Joc,d);Nnc(RD($i(a.b,Yod,goc),15),c);Nnc(RD($i(a.b,Xod,ioc),15),c);Nnc(RD($i(a.b,Xod,hoc),15),c);e=Onc(f,e,new Loc,d);Nnc(RD($i(a.b,Xod,goc),15),c);Nnc(RD($i(a.b,npd,ioc),15),c);e=Onc(f,e,new Noc,d);Nnc(RD($i(a.b,npd,hoc),15),c);e=Onc(f,e,new Poc,d);Nnc(RD($i(a.b,npd,goc),15),c);Nnc(RD($i(a.b,ppd,ioc),15),c);e=Onc(f,e,new toc,d);Nnc(RD($i(a.b,ppd,hoc),15),c);Nnc(RD($i(a.b,ppd,goc),15),c)} +function jJc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;for(h=new Anb(b);h.a<h.c.c.length;){f=RD(ynb(h),239);f.e=null;f.c=0}i=null;for(g=new Anb(b);g.a<g.c.c.length;){f=RD(ynb(g),239);l=f.d[0];if(c&&l.k!=(r3b(),p3b)){continue}for(n=RD(mQb(l,(Ywc(),qwc)),15).Kc();n.Ob();){m=RD(n.Pb(),10);if(!c||m.k==(r3b(),p3b)){(!f.e&&(f.e=new bnb),f.e).Fc(a.b[m.c.p][m.p]);++a.b[m.c.p][m.p].c}}if(!c&&l.k==(r3b(),p3b)){if(i){for(k=RD(Qc(a.d,i),21).Kc();k.Ob();){j=RD(k.Pb(),10);for(e=RD(Qc(a.d,l),21).Kc();e.Ob();){d=RD(e.Pb(),10);wJc(a.b[j.c.p][j.p]).Fc(a.b[d.c.p][d.p]);++a.b[d.c.p][d.p].c}}}i=l}}} +function iGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Model order cycle breaking',1);a.a=0;a.b=0;n=new bnb;k=b.a.c.length;for(j=new Anb(b.a);j.a<j.c.c.length;){i=RD(ynb(j),10);nQb(i,(Ywc(),zwc))&&(k=$wnd.Math.max(k,RD(mQb(i,zwc),17).a+1))}for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);g=hGc(a,o,k);for(m=c3b(o,(BEc(),zEc)).Kc();m.Ob();){l=RD(m.Pb(),12);for(f=new Anb(l.g);f.a<f.c.c.length;){d=RD(ynb(f),18);q=d.d.i;h=hGc(a,q,k);h<g&&(ZEb(n.c,d),true)}}}for(e=new Anb(n);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true);pQb(b,(Ywc(),awc),(Geb(),true))}n.c.length=0;c.Vg()} +function qUb(a,b,c){var d,e,f,g,h,i,j,k,l,m;g=b.d;h=c.d;while(g.a-h.a==0&&g.b-h.b==0){i=false;if(ZD(b,250)&&ZD(c,250)&&!i){j=RD(b,250).a;k=ojd(new sjd($Tb(j)),ZTb(j));d=2;e=new rjd(k.a/$wnd.Math.sqrt(k.a*k.a+k.b*k.b)*d,-k.b/$wnd.Math.sqrt(k.a*k.a+k.b*k.b)*d);$id(g,e);l=RD(c,250).a;m=ojd(new sjd($Tb(l)),ZTb(l));d=k==m?-2:2;f=new rjd(m.a/$wnd.Math.sqrt(m.a*m.a+m.b*m.b)*d,-(m.b/$wnd.Math.sqrt(m.a*m.a+m.b*m.b))*d);$id(g,f);i=true}else{g.a+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;g.b+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;h.a+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;h.b+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5}}} +function NWb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=KWb(b);q=RD(mQb(b,(yCc(),oAc)),322);xgb(j,new UWb(q));r=RD(mQb(b,gAc),298);xgb(j,new WWb(r));p=0;k=new bnb;for(f=new Kmb(j);f.a!=f.b;){e=RD(Imb(f),36);cXb(a.c,e);m=RD(mQb(e,(Ywc(),Kwc)),15);p+=m.gc();d=m.Kc();Rmb(k,new Ptd(e,d))}c.Ug('Recursive hierarchical layout',p);o=0;n=RD(RD(Vmb(k,k.c.length-1),42).b,51);while(n.Ob()){for(i=new Anb(k);i.a<i.c.c.length;){h=RD(ynb(i),42);m=RD(h.b,51);g=RD(h.a,36);while(m.Ob()){l=RD(m.Pb(),47);if(ZD(l,514)){if(!g.e){l.Kf(g,c.eh(1));++o;break}else{break}}else{l.Kf(g,c.eh(1));++o}}}}c.Vg()} +function Cec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;b.Ug('Layer size calculation',1);k=oxe;j=pxe;e=false;for(h=new Anb(a.b);h.a<h.c.c.length;){g=RD(ynb(h),30);i=g.c;i.a=0;i.b=0;if(g.a.c.length==0){continue}e=true;for(m=new Anb(g.a);m.a<m.c.c.length;){l=RD(ynb(m),10);o=l.o;n=l.d;i.a=$wnd.Math.max(i.a,o.a+n.b+n.c)}d=RD(Vmb(g.a,0),10);p=d.n.b-d.d.d;d.k==(r3b(),m3b)&&(p-=RD(mQb(a,(yCc(),eCc)),140).d);f=RD(Vmb(g.a,g.a.c.length-1),10);c=f.n.b+f.o.b+f.d.a;f.k==m3b&&(c+=RD(mQb(a,(yCc(),eCc)),140).a);i.b=c-p;k=$wnd.Math.min(k,p);j=$wnd.Math.max(j,c)}if(!e){k=0;j=0}a.f.b=j-k;a.c.b-=k;b.Vg()} +function p2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;f=0;g=0;for(j=new Anb(a.a);j.a<j.c.c.length;){h=RD(ynb(j),10);f=$wnd.Math.max(f,h.d.b);g=$wnd.Math.max(g,h.d.c)}for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);c=RD(mQb(h,(yCc(),Rzc)),255);switch(c.g){case 1:o=0;break;case 2:o=1;break;case 5:o=0.5;break;default:d=0;l=0;for(n=new Anb(h.j);n.a<n.c.c.length;){m=RD(ynb(n),12);m.e.c.length==0||++d;m.g.c.length==0||++l}d+l==0?(o=0.5):(o=l/(d+l));}q=a.c;k=h.o.a;r=(q.a-k)*o;o>0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;r<e&&(r=e);p=h.d.c;r>q.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} +function jec(a){var b,c,d,e,f;d=RD(mQb(a,(yCc(),UAc)),171);if(d==(cxc(),$wc)){for(c=new is(Mr(Z2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!lec(b)){throw Adb(new Jed(nBe+X2b(a)+"' 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(d==axc){for(f=new is(Mr(a3b(a).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!lec(e)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} +function Qed(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.c<a.f){throw Adb(new dgb('Expected '+a.f+' phases to be configured; '+'only found '+a.c.c))}k=RD(mfb(a.g),9);n=ev(a.f);for(f=k,h=0,j=f.length;h<j;++h){d=f[h];l=RD(Med(a,d.g),188);l?Rmb(n,RD(Ted(a,l),106)):(n.c.push(null),undefined,true)}o=new ufd;FDb(CDb(GDb(CDb(new SDb(null,new Swb(n,16)),new Zed),new _ed(b)),new bfd),new dfd(o));ofd(o,a.a);c=new bnb;for(e=k,g=0,i=e.length;g<i;++g){d=e[g];Tmb(c,Ued(a,Ux(RD(Med(o,d.g),20))));m=RD(Vmb(n,d.g),106);!!m&&(ZEb(c.c,m),true)}Tmb(c,Ued(a,Ux(RD(Med(o,k[k.length-1].g+1),20))));return c} +function Frc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;m=new bnb;e=new bnb;p=null;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),17);f=new Trc(g.a);ZEb(e.c,f);if(p){f.d=p;p.e=f}p=f}t=Erc(a);for(k=0;k<e.c.length;++k){n=null;q=Src((tFb(0,e.c.length),RD(e.c[0],661)));c=null;d=oxe;for(l=1;l<a.b.c.length;++l){r=q?$wnd.Math.abs(q.b-l):$wnd.Math.abs(l-n.b)+1;o=n?$wnd.Math.abs(l-n.b):r+1;if(o<r){j=n;i=o}else{j=q;i=r}s=(u=Kfb(UD(mQb(a,(yCc(),sCc)))),t[l]+$wnd.Math.pow(i,u));if(s<d){d=s;c=j;c.c=l}if(!!q&&l==q.b){n=q;q=Nrc(q)}}if(c){Rmb(m,sgb(c.c));c.a=true;Orc(c)}}yob();Ynb(m.c,m.c.length,null);return m} +function iD(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw Adb(new teb('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(eD=hD(0,0,0));return hD(0,0,0)}if(b.h==fxe&&b.m==0&&b.l==0){return jD(a,c)}i=false;if(b.h>>19!=0){b=xD(b);i=!i}g=pD(b);f=false;e=false;d=false;if(a.h==fxe&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=gD((MD(),ID));d=true;i=!i}else{h=BD(a,g);i&&nD(h);c&&(eD=hD(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=xD(a);d=true;i=!i}if(g!=-1){return kD(a,g,i,f,c)}if(uD(a,b)<0){c&&(f?(eD=xD(a)):(eD=hD(a.l,a.m,a.h)));return hD(0,0,0)}return lD(d?a:hD(a.l,a.m,a.h),b,i,f,e,c)} +function Bjb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=Cdb(a.a[0],yxe);d=Cdb(b.a[0],yxe);if(g==i){k=Bdb(c,d);o=Ydb(k);n=Ydb(Udb(k,32));return n==0?new ajb(g,o):new cjb(g,2,cD(WC(kE,1),Pwe,28,15,[o,n]))}return Pib(),Jdb(g<0?Vdb(d,c):Vdb(c,d),0)?jjb(g<0?Vdb(d,c):Vdb(c,d)):Xib(jjb(Odb(g<0?Vdb(d,c):Vdb(c,d))))}else if(g==i){m=g;l=f>=h?Cjb(a.a,f,b.a,h):Cjb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:Ejb(a.a,b.a,f);if(e==0){return Pib(),Oib}if(e==1){m=g;l=Hjb(a.a,f,b.a,h)}else{m=i;l=Hjb(b.a,h,a.a,f)}}j=new cjb(m,l.length,l);Rib(j);return j} +function KUc(a,b){var c,d,e,f,g,h,i;if(a.g>b.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=RD(g.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=RD(h.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=RD(i.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=RD(f.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c<d){new _Uc(a,b,d-c)}else if(d<c){new _Uc(b,a,c-d)}else{new _Uc(b,a,0);new _Uc(a,b,0)}} +function ASb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=zRb(a.e);l=ijd(njd(ajd(yRb(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new Anb(j);i.a<i.c.c.length;){h=RD(ynb(i),407);m=h.b;n=c+m.a;q=d+m.b;o=eE(n/a.a);r=eE(q/a.b);f=h.a;switch(f.g){case 0:k=(IPb(),FPb);break;case 1:k=(IPb(),EPb);break;case 2:k=(IPb(),GPb);break;default:k=(IPb(),HPb);}if(f.a){s=eE((q+h.c)/a.b);Rmb(a.f,new lRb(k,sgb(r),sgb(s)));f==(IRb(),HRb)?eQb(a,0,r,o,s):eQb(a,o,r,a.d-1,s)}else{p=eE((n+h.c)/a.a);Rmb(a.f,new lRb(k,sgb(o),sgb(p)));f==(IRb(),FRb)?eQb(a,o,0,p,r):eQb(a,o,r,p,a.c-1)}}} +function Q$d(a){var b,c,d,e,f,g,h,i,j,k;b=new Z$d;c=new Z$d;j=lhb(pKe,(e=bAd(a.b,qKe),!e?null:WD($Nd((!e.b&&(e.b=new SVd((JTd(),FTd),C8,e)),e.b),rKe))));for(i=0;i<a.i;++i){h=RD(a.g[i],179);if(ZD(h,102)){g=RD(h,19);(g.Bb&QHe)!=0?((g.Bb&Ove)==0||!j&&(f=bAd(g,qKe),(!f?null:WD($Nd((!f.b&&(f.b=new SVd((JTd(),FTd),C8,f)),f.b),FIe)))==null))&&WGd(b,g):(k=Z5d(g),!!k&&(k.Bb&QHe)!=0||((g.Bb&Ove)==0||!j&&(d=bAd(g,qKe),(!d?null:WD($Nd((!d.b&&(d.b=new SVd((JTd(),FTd),C8,d)),d.b),FIe)))==null))&&WGd(c,g))}else{nke();if(RD(h,69).xk()){if(!h.sk()){WGd(b,h);WGd(c,h)}}}}VHd(b);VHd(c);a.a=RD(b.g,254);RD(c.g,254)} +function Eee(a,b,c){var d,e,f,g,h,i,j,k,l;if(BYd(b,c)>=0){return c}switch(yfe(Qee(a,c))){case 2:{if(lhb('',Oee(a,c.qk()).xe())){i=Bfe(Qee(a,c));h=Afe(Qee(a,c));k=Ree(a,b,i,h);if(k){return k}e=Fee(a,b);for(g=0,l=e.gc();g<l;++g){k=RD(e.Xb(g),179);if(Xee(Cfe(Qee(a,k)),i)){return k}}}return null}case 4:{if(lhb('',Oee(a,c.qk()).xe())){for(d=c;d;d=xfe(Qee(a,d))){j=Bfe(Qee(a,d));h=Afe(Qee(a,d));k=See(a,b,j,h);if(k){return k}}i=Bfe(Qee(a,c));if(lhb(dLe,i)){return Tee(a,b)}else{f=Gee(a,b);for(g=0,l=f.gc();g<l;++g){k=RD(f.Xb(g),179);if(Xee(Cfe(Qee(a,k)),i)){return k}}}}return null}default:{return null}}} +function Tfe(a,b,c){var d,e,f,g,h,i,j,k;if(c.gc()==0){return false}h=(nke(),RD(b,69).xk());f=h?c:new ZHd(c.gc());if(qke(a.e,b)){if(b.Si()){for(j=c.Kc();j.Ob();){i=j.Pb();if(!dge(a,b,i,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){e=oke(b,i);f.Hc(e)||f.Fc(e)}}}else if(!h){for(j=c.Kc();j.Ob();){i=j.Pb();e=oke(b,i);f.Fc(e)}}}else{if(c.gc()>1){throw Adb(new agb(gLe))}k=pke(a.e.Dh(),b);d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];if(k.am(e.Lk())){if(c.Hc(h?e:e.md())){return false}else{for(j=c.Kc();j.Ob();){i=j.Pb();RD(eHd(a,g,h?RD(i,76):oke(b,i)),76)}return true}}}if(!h){e=oke(b,c.Kc().Pb());f.Fc(e)}}return YGd(a,f)} +function QQc(a,b){var c,d,e,f,g,h,i,j,k;k=new Yub;for(h=(j=(new glb(a.c)).a.vc().Kc(),new llb(j));h.a.Ob();){f=(e=RD(h.a.Pb(),44),RD(e.md(),466));f.b==0&&(Pub(k,f,k.c.b,k.c),true)}while(k.b!=0){f=RD(k.b==0?null:(sFb(k.b!=0),Wub(k,k.a.a)),466);f.a==null&&(f.a=0);for(d=new Anb(f.d);d.a<d.c.c.length;){c=RD(ynb(d),663);c.b.a==null?(c.b.a=Kfb(f.a)+c.a):b.o==(EQc(),CQc)?(c.b.a=$wnd.Math.min(Kfb(c.b.a),Kfb(f.a)+c.a)):(c.b.a=$wnd.Math.max(Kfb(c.b.a),Kfb(f.a)+c.a));--c.b.b;c.b.b==0&&Mub(k,c.b)}}for(g=(i=(new glb(a.c)).a.vc().Kc(),new llb(i));g.a.Ob();){f=(e=RD(g.a.Pb(),44),RD(e.md(),466));b.i[f.c.p]=f.a}} +function kSc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;k=c+b.c.c.a;for(n=new Anb(b.j);n.a<n.c.c.length;){m=RD(ynb(n),12);e=xjd(cD(WC(l3,1),Nve,8,0,[m.i.n,m.n,m.a]));if(b.k==(r3b(),q3b)){h=RD(mQb(m,(Ywc(),Awc)),12);e.a=xjd(cD(WC(l3,1),Nve,8,0,[h.i.n,h.n,h.a])).a;b.n.a=e.a}g=new rjd(0,e.b);if(m.j==(qpd(),Xod)){g.a=k}else if(m.j==ppd){g.a=c}else{continue}o=$wnd.Math.abs(e.a-g.a);if(o<=d&&!hSc(b)){continue}f=m.g.c.length+m.e.c.length>1;for(j=new l4b(m.b);xnb(j.a)||xnb(j.b);){i=RD(xnb(j.a)?ynb(j.a):ynb(j.b),18);l=i.c==m?i.d:i.c;$wnd.Math.abs(xjd(cD(WC(l3,1),Nve,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&eSc(a,i,g,f,m)}}} +function vUc(a){var b,c,d,e,f,g;e=new Jkb(a.e,0);d=new Jkb(a.a,0);if(a.d){for(c=0;c<a.b;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}}else{for(c=0;c<a.b-1;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);Ckb(e)}}b=Kfb((sFb(e.b<e.d.gc()),UD(e.d.Xb(e.c=e.b++))));while(a.f-b>AEe){f=b;g=0;while($wnd.Math.abs(b-f)<AEe){++g;b=Kfb((sFb(e.b<e.d.gc()),UD(e.d.Xb(e.c=e.b++))));sFb(d.b<d.d.gc());d.d.Xb(d.c=d.b++)}if(g<a.b){sFb(e.b>0);e.a.Xb(e.c=--e.b);uUc(a,a.b-g,f,d,e);sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}sFb(d.b>0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c<a.b-1;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);Ckb(e)}}a.d=true;a.c=true} +function nme(){nme=geb;Rle=(Qle(),Ple).b;Ule=RD(QHd(xYd(Ple.b),0),35);Sle=RD(QHd(xYd(Ple.b),1),35);Tle=RD(QHd(xYd(Ple.b),2),35);cme=Ple.bb;RD(QHd(xYd(Ple.bb),0),35);RD(QHd(xYd(Ple.bb),1),35);eme=Ple.fb;fme=RD(QHd(xYd(Ple.fb),0),35);RD(QHd(xYd(Ple.fb),1),35);RD(QHd(xYd(Ple.fb),2),19);hme=Ple.qb;kme=RD(QHd(xYd(Ple.qb),0),35);RD(QHd(xYd(Ple.qb),1),19);RD(QHd(xYd(Ple.qb),2),19);ime=RD(QHd(xYd(Ple.qb),3),35);jme=RD(QHd(xYd(Ple.qb),4),35);mme=RD(QHd(xYd(Ple.qb),6),35);lme=RD(QHd(xYd(Ple.qb),5),19);Vle=Ple.j;Wle=Ple.k;Xle=Ple.q;Yle=Ple.w;Zle=Ple.B;$le=Ple.A;_le=Ple.C;ame=Ple.D;bme=Ple._;dme=Ple.cb;gme=Ple.hb} +function yIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.Kc();l.Ob();){k=RD(l.Pb(),12);h=k.j==(qpd(),Yod)||k.j==npd;n=0;if(h){m=RD(mQb(k,(Ywc(),Iwc)),10);if(!m){continue}n+=tIc(a,d,k,m)}else{for(j=new Anb(k.g);j.a<j.c.c.length;){i=RD(ynb(j),18);e=i.d;if(e.i.c==b.c){Rmb(a.a,k);continue o}else{n+=a.g[e.p]}}for(g=new Anb(k.e);g.a<g.c.c.length;){f=RD(ynb(g),18);e=f.c;if(e.i.c==b.c){Rmb(a.a,k);continue o}else{n-=a.g[e.p]}}}if(k.e.c.length+k.g.c.length>0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} +function xne(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function C8b(a,b,c){var d,e,f,g;c.Ug('Graph transformation ('+a.a+')',1);g=bv(b.a);for(f=new Anb(b.b);f.a<f.c.c.length;){e=RD(ynb(f),30);Tmb(g,e.a)}d=RD(mQb(b,(yCc(),sAc)),428);if(d==($tc(),Ytc)){switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);break;case 3:G8b(b,g);break;case 4:if(a.a==(P8b(),O8b)){G8b(b,g);r8b(b,g)}else{r8b(b,g);G8b(b,g)}}}else{if(a.a==(P8b(),O8b)){switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);r8b(b,g);break;case 3:G8b(b,g);q8b(b,g);break;case 4:q8b(b,g);G8b(b,g);}}else{switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);r8b(b,g);break;case 3:q8b(b,g);G8b(b,g);break;case 4:G8b(b,g);q8b(b,g);}}}c.Vg()} +function AXb(a){var b,c,d,e,f,g,h,i;for(f=new Anb(a.a.b);f.a<f.c.c.length;){e=RD(ynb(f),86);e.b.c=e.g.c;e.b.d=e.g.d}i=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(d=new Anb(a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}for(h=Uc(a.c).a.nc();h.Ob();){g=RD(h.Pb(),42);c=RD(g.b,86);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}a.d=fjd(new rjd(i.a,i.b));a.e=ojd(new rjd(b.a,b.b),i);a.a.a.c.length=0;a.a.b.c.length=0} +function LZb(a){CZb();var b,c,d,e,f,g,h;h=new EZb;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),148);(!h.b||b.c>=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new PZb((nZb(),jZb));t$b(a,AZb,new mob(cD(WC(wQ,1),rve,382,0,[d])));g=new PZb(mZb);t$b(a,zZb,new mob(cD(WC(wQ,1),rve,382,0,[g])));e=new PZb(kZb);t$b(a,yZb,new mob(cD(WC(wQ,1),rve,382,0,[e])));f=new PZb(lZb);t$b(a,xZb,new mob(cD(WC(wQ,1),rve,382,0,[f])));FZb(d.c,jZb);FZb(e.c,kZb);FZb(f.c,lZb);FZb(g.c,mZb);h.a.c.length=0;Tmb(h.a,d.c);Tmb(h.a,hv(e.c));Tmb(h.a,f.c);Tmb(h.a,hv(g.c));return h} +function n9c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;b.Ug(bGe,1);n=Kfb(UD(Gxd(a,(X6c(),W6c))));g=Kfb(UD(Gxd(a,(X7c(),Q7c))));h=RD(Gxd(a,N7c),107);Bad((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));k=U8c((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a),n,g);!a.a&&(a.a=new C5d(J4,a,10,11));for(j=new Anb(k);j.a<j.c.c.length;){i=RD(ynb(j),186);for(e=new Anb(i.a);e.a<e.c.c.length;){d=RD(ynb(e),172);m=new had(d.s,d.t,Kfb(UD(Gxd(a,Q7c))));aad(m,d);Rmb(i.d,m)}}l=zad(k,g);o=$wnd.Math.max(l.a,Kfb(UD(Gxd(a,U6c)))-(h.b+h.c));f=$wnd.Math.max(l.b,Kfb(UD(Gxd(a,R6c)))-(h.d+h.a));c=f-l.b;Ixd(a,M6c,c);Ixd(a,O6c,o);Ixd(a,N6c,f+c);Ixd(a,V6c,k);b.Vg()} +function A9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;j=new Iub;k=new Iub;o=new Iub;p=new Iub;i=Kfb(UD(mQb(b,(yCc(),bCc))));f=Kfb(UD(mQb(b,TBc)));for(h=new Anb(c);h.a<h.c.c.length;){g=RD(ynb(h),10);l=RD(mQb(g,(Ywc(),hwc)),64);if(l==(qpd(),Yod)){k.a.zc(g,k);for(e=new is(Mr(Z2b(g).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);Ysb(j,d.c.i)}}else if(l==npd){p.a.zc(g,p);for(e=new is(Mr(Z2b(g).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);Ysb(o,d.c.i)}}}if(j.a.gc()!=0){m=new TTc(2,f);n=STc(m,b,j,k,-i-b.c.b);if(n>0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new TTc(1,f);n=STc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} +function osc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Kfb(UD(mQb(a,(yCc(),WBc))));d=Kfb(UD(mQb(a,nCc)));m=new dtd;pQb(m,WBc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=Q4b(p.c);t=Q4b(s.c);e=new bnb;for(l=q;l<=t;l++){h=new j3b(a);h3b(h,(r3b(),o3b));pQb(h,(Ywc(),Awc),j);pQb(h,BBc,(Bod(),wod));pQb(h,YBc,m);n=RD(Vmb(a.b,l),30);l==q?f3b(h,n.a.c.length-c,n):g3b(h,n);u=Kfb(UD(mQb(j,FAc)));if(u<0){u=0;pQb(j,FAc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new R3b;Q3b(g,(qpd(),ppd));P3b(g,h);g.n.b=o;i=new R3b;Q3b(i,Xod);P3b(i,h);i.n.b=o;Z0b(j,g);f=new a1b;kQb(f,j);pQb(f,RAc,null);Y0b(f,i);Z0b(f,r);psc(h,j,f);ZEb(e.c,f);j=f}return e} +function Hec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=RD(e3b(a,(qpd(),ppd)).Kc().Pb(),12).e;n=RD(e3b(a,Xod).Kc().Pb(),12).g;h=i.c.length;t=K3b(RD(Vmb(a.j,0),12));while(h-->0){p=(tFb(0,i.c.length),RD(i.c[0],18));e=(tFb(0,n.c.length),RD(n.c[0],18));s=e.d.e;f=Wmb(s,e,0);$0b(p,e.d,f);Y0b(e,null);Z0b(e,null);o=p.a;b&&Mub(o,new sjd(t));for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);Mub(o,new sjd(c))}r=p.b;for(m=new Anb(e.b);m.a<m.c.c.length;){l=RD(ynb(m),72);ZEb(r.c,l)}q=RD(mQb(p,(yCc(),RAc)),75);g=RD(mQb(e,RAc),75);if(g){if(!q){q=new Ejd;pQb(p,RAc,q)}for(k=Sub(g,0);k.b!=k.d.c;){j=RD(evb(k),8);Mub(q,new sjd(j))}}}} +function $Qc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=$C(kE,Pwe,28,p,15,1);l=0;for(k=new Anb(b.b);k.a<k.c.c.length;){j=RD(ynb(k),30);n[l++]=j.a.c.length}m=new Jkb(b.b,2);for(d=1;d<p-1;d++){c=(sFb(m.b<m.d.gc()),RD(m.d.Xb(m.c=m.b++),30));o=new Anb(c.a);f=0;h=0;for(i=0;i<n[d+1];i++){t=RD(ynb(o),10);if(i==n[d+1]-1||ZQc(a,t,d+1,d)){g=n[d]-1;ZQc(a,t,d+1,d)&&(g=a.c.e[RD(RD(RD(Vmb(a.c.b,t.p),15).Xb(0),42).a,10).p]);while(h<=i){s=RD(Vmb(c.a,h),10);if(!ZQc(a,s,d+1,d)){for(r=RD(Vmb(a.c.b,s.p),15).Kc();r.Ob();){q=RD(r.Pb(),42);e=a.c.e[RD(q.a,10).p];(e<f||e>g)&&Ysb(a.b,RD(q.b,18))}}++h}f=g}}}} +function zhd(b,c){var d;if(c==null||lhb(c,vve)){return null}if(c.length==0&&b.k!=(kid(),fid)){return null}switch(b.k.g){case 1:return mhb(c,FGe)?(Geb(),Feb):mhb(c,GGe)?(Geb(),Eeb):null;case 2:try{return sgb(Oeb(c,qwe,lve))}catch(a){a=zdb(a);if(ZD(a,130)){return null}else throw Adb(a)}case 4:try{return Neb(c)}catch(a){a=zdb(a);if(ZD(a,130)){return null}else throw Adb(a)}case 3:return c;case 5:uhd(b);return xhd(b,c);case 6:uhd(b);return yhd(b,b.a,c);case 7:try{d=whd(b);d.cg(c);return d}catch(a){a=zdb(a);if(ZD(a,33)){return null}else throw Adb(a)}default:throw Adb(new dgb('Invalid type set for this layout option.'));}} +function JKd(a){var b;switch(a.d){case 1:{if(a.Sj()){return a.o!=-2}break}case 2:{if(a.Sj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.Rj();switch(a.p){case 0:return b!=null&&Heb(TD(b))!=Pdb(a.k,0);case 1:return b!=null&&RD(b,222).a!=Ydb(a.k)<<24>>24;case 2:return b!=null&&RD(b,180).a!=(Ydb(a.k)&Bwe);case 6:return b!=null&&Pdb(RD(b,168).a,a.k);case 5:return b!=null&&RD(b,17).a!=Ydb(a.k);case 7:return b!=null&&RD(b,191).a!=Ydb(a.k)<<16>>16;case 3:return b!=null&&Kfb(UD(b))!=a.j;case 4:return b!=null&&RD(b,161).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} +function N_d(a,b,c){var d,e,f,g;if(a.ol()&&a.nl()){g=O_d(a,RD(c,58));if(dE(g)!==dE(c)){a.xj(b);a.Dj(b,P_d(a,b,g));if(a.al()){f=(e=RD(c,54),a.ml()?a.kl()?e.Th(a.b,Z5d(RD(vYd(Uwd(a.b),a.Lj()),19)).n,RD(vYd(Uwd(a.b),a.Lj()).Hk(),29).kk(),null):e.Th(a.b,BYd(e.Dh(),Z5d(RD(vYd(Uwd(a.b),a.Lj()),19))),null,null):e.Th(a.b,-1-a.Lj(),null,null));!RD(g,54).Ph()&&(f=(d=RD(g,54),a.ml()?a.kl()?d.Rh(a.b,Z5d(RD(vYd(Uwd(a.b),a.Lj()),19)).n,RD(vYd(Uwd(a.b),a.Lj()).Hk(),29).kk(),f):d.Rh(a.b,BYd(d.Dh(),Z5d(RD(vYd(Uwd(a.b),a.Lj()),19))),null,f):d.Rh(a.b,-1-a.Lj(),null,f)));!!f&&f.oj()}Mvd(a.b)&&a.Jj(a.Ij(9,c,g,b,false));return g}}return c} +function iJb(a){var b,c,d,e,f,g,h,i,j,k;d=new bnb;for(g=new Anb(a.e.a);g.a<g.c.c.length;){e=RD(ynb(g),125);k=0;e.k.c.length=0;for(c=new Anb(CIb(e));c.a<c.c.c.length;){b=RD(ynb(c),218);if(b.f){Rmb(e.k,b);++k}}k==1&&(ZEb(d.c,e),true)}for(f=new Anb(d);f.a<f.c.c.length;){e=RD(ynb(f),125);while(e.k.c.length==1){j=RD(ynb(new Anb(e.k)),218);a.b[j.c]=j.g;h=j.d;i=j.e;for(c=new Anb(CIb(e));c.a<c.c.c.length;){b=RD(ynb(c),218);pb(b,j)||(b.f?h==b.d||i==b.e?(a.b[j.c]-=a.b[b.c]-b.g):(a.b[j.c]+=a.b[b.c]-b.g):e==h?b.d==e?(a.b[j.c]+=b.g):(a.b[j.c]-=b.g):b.d==e?(a.b[j.c]-=b.g):(a.b[j.c]+=b.g))}Ymb(h.k,j);Ymb(i.k,j);h==e?(e=j.e):(e=j.d)}}} +function vMb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=RD(Vrb(a.b,b),127);i=RD(RD(Qc(a.r,b),21),87);if(i.dc()){c.n.b=0;c.n.c=0;return}j=a.u.Hc((Pod(),Lod));g=0;h=i.Kc();k=null;l=0;m=0;while(h.Ob()){d=RD(h.Pb(),117);e=Kfb(UD(d.b.of((tNb(),sNb))));f=d.b.Mf().a;a.A.Hc((Qpd(),Ppd))&&BMb(a,b);if(!k){!!a.C&&a.C.b>0&&(g=$wnd.Math.max(g,zMb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(l-e)<=Tye||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(l-1)<=Tye||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} +function ENb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=RD(Vrb(a.b,b),127);i=RD(RD(Qc(a.r,b),21),87);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((Pod(),Lod));g=0;a.A.Hc((Qpd(),Ppd))&&JNb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=RD(h.Pb(),117);f=Kfb(UD(d.b.of((tNb(),sNb))));e=d.b.Mf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,zMb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(m-f)<=Tye||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(m-1)<=Tye||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} +function L8c(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r;o=false;j=dad(c.q,b.f+b.b-c.q.f);n=d.f>b.b&&h;r=e-(c.q.e+j-g);l=(i=S9c(d,r,false),i.a);if(n&&l>d.f){return false}if(n){m=0;for(q=new Anb(b.d);q.a<q.c.c.length;){p=RD(ynb(q),315);m+=dad(p,d.f)+g}r=e-m}if(r<d.g){return false}k=f==a.c.length-1&&r>=(tFb(f,a.c.length),RD(a.c[f],186)).e;if(!n&&l>b.b&&!k){return false}if(k||n||l<=b.b){if(k&&l>b.b){c.d=l;Q9c(c,P9c(c,l))}else{ead(c.q,j);c.c=true}Q9c(d,e-(c.s+c.r));U9c(d,c.q.e+c.q.d,b.f);Cad(b,d);if(a.c.length>f){Fad((tFb(f,a.c.length),RD(a.c[f],186)),d);(tFb(f,a.c.length),RD(a.c[f],186)).a.c.length==0&&Xmb(a,f)}o=true}return o} +function zJc(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=$C(jR,WAe,10,h+i,0,1);for(g=0;g<h;g++){this.d[g]=b.d[g]}for(f=0;f<i;f++){this.d[h+f]=c.d[f]}if(b.e){this.e=gv(b.e);this.e.Mc(c);if(c.e){for(e=c.e.Kc();e.Ob();){d=RD(e.Pb(),239);if(d==b){continue}else this.e.Hc(d)?--d.c:this.e.Fc(d)}}}else if(c.e){this.e=gv(c.e);this.e.Mc(b)}this.f=b.f+c.f;this.a=b.a+c.a;this.a>0?xJc(this,this.f/this.a):pJc(b.g,b.d[0]).a!=null&&pJc(c.g,c.d[0]).a!=null?xJc(this,(Kfb(pJc(b.g,b.d[0]).a)+Kfb(pJc(c.g,c.d[0]).a))/2):pJc(b.g,b.d[0]).a!=null?xJc(this,pJc(b.g,b.d[0]).a):pJc(c.g,c.d[0]).a!=null&&xJc(this,pJc(c.g,c.d[0]).a)} +function DXb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new fYb(wsb(s3));for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),855);h=new iYb(cD(WC(bQ,1),rve,86,0,[]));Rmb(a.a.a,h);for(j=new Anb(c.d);j.a<j.c.c.length;){i=RD(ynb(j),116);k=new IXb(a,i);CXb(k,RD(mQb(c.c,(Ywc(),ewc)),21));if(!Ujb(a.g,c)){Zjb(a.g,c,new rjd(i.c,i.d));Zjb(a.f,c,k)}Rmb(a.a.b,k);gYb(h,k)}for(g=new Anb(c.b);g.a<g.c.c.length;){f=RD(ynb(g),602);k=new IXb(a,f.Df());Zjb(a.b,f,new Ptd(h,k));CXb(k,RD(mQb(c.c,(Ywc(),ewc)),21));if(f.Bf()){l=new JXb(a,f.Bf(),1);CXb(l,RD(mQb(c.c,ewc),21));e=new iYb(cD(WC(bQ,1),rve,86,0,[]));gYb(e,l);Rc(a.c,f.Af(),new Ptd(h,l))}}}return a.a} +function gFc(a){var b;this.a=a;b=(r3b(),cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])).length;this.b=YC(V5,[Nve,kEe],[601,149],0,[b,b],2);this.c=YC(V5,[Nve,kEe],[601,149],0,[b,b],2);fFc(this,p3b,(yCc(),bCc),cCc);dFc(this,p3b,o3b,WBc,XBc);cFc(this,p3b,q3b,WBc);cFc(this,p3b,m3b,WBc);dFc(this,p3b,n3b,bCc,cCc);fFc(this,o3b,TBc,UBc);cFc(this,o3b,q3b,TBc);cFc(this,o3b,m3b,TBc);dFc(this,o3b,n3b,WBc,XBc);eFc(this,q3b,TBc);cFc(this,q3b,m3b,TBc);cFc(this,q3b,n3b,$Bc);eFc(this,m3b,fCc);dFc(this,m3b,n3b,aCc,_Bc);fFc(this,n3b,TBc,TBc);fFc(this,l3b,TBc,UBc);dFc(this,l3b,p3b,WBc,XBc);dFc(this,l3b,n3b,WBc,XBc);dFc(this,l3b,o3b,WBc,XBc)} +function zge(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;g=c.Lk();if(ZD(g,102)&&(RD(g,19).Bb&txe)!=0){m=RD(c.md(),54);p=Vvd(a.e,m);if(p!=m){k=oke(g,p);MHd(a,b,Tge(a,b,k));l=null;if(Mvd(a.e)){d=Eee((lke(),jke),a.e.Dh(),g);if(d!=vYd(a.e.Dh(),a.c)){q=pke(a.e.Dh(),g);h=0;f=RD(a.g,124);for(i=0;i<b;++i){e=f[i];q.am(e.Lk())&&++h}l=new lle(a.e,9,d,m,p,h,false);l.nj(new P3d(a.e,9,a.c,c,k,b,false))}}o=RD(g,19);n=Z5d(o);if(n){l=m.Th(a.e,BYd(m.Dh(),n),null,l);l=RD(p,54).Rh(a.e,BYd(p.Dh(),n),null,l)}else if((o.Bb&QHe)!=0){j=-1-BYd(a.e.Dh(),o);l=m.Th(a.e,j,null,null);!RD(p,54).Ph()&&(l=RD(p,54).Rh(a.e,j,null,l))}!!l&&l.oj();return k}}return c} +function SId(a){var b,c,d;wgd(LId,cD(WC(B2,1),rve,134,0,[new vmd]));c=new NB(a);for(d=0;d<c.a.length;++d){b=JB(c,d).te().a;lhb(b,'layered')?wgd(LId,cD(WC(B2,1),rve,134,0,[new Pzc])):lhb(b,'force')?wgd(LId,cD(WC(B2,1),rve,134,0,[new PUb])):lhb(b,'stress')?wgd(LId,cD(WC(B2,1),rve,134,0,[new RVb])):lhb(b,'mrtree')?wgd(LId,cD(WC(B2,1),rve,134,0,[new C$c])):lhb(b,'radial')?wgd(LId,cD(WC(B2,1),rve,134,0,[new E4c])):lhb(b,'disco')?wgd(LId,cD(WC(B2,1),rve,134,0,[new ZHb,new fSb])):lhb(b,'sporeOverlap')||lhb(b,'sporeCompaction')?wgd(LId,cD(WC(B2,1),rve,134,0,[new Lcd])):lhb(b,'rectpacking')&&wgd(LId,cD(WC(B2,1),rve,134,0,[new v7c]))}} +function r2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;m=new sjd(a.o);r=b.a/m.a;h=b.b/m.b;p=b.a-m.a;f=b.b-m.b;if(c){e=dE(mQb(a,(yCc(),BBc)))===dE((Bod(),wod));for(o=new Anb(a.j);o.a<o.c.c.length;){n=RD(ynb(o),12);switch(n.j.g){case 1:e||(n.n.a*=r);break;case 2:n.n.a+=p;e||(n.n.b*=h);break;case 3:e||(n.n.a*=r);n.n.b+=f;break;case 4:e||(n.n.b*=h);}}}for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),72);k=i.n.a+i.o.a/2;l=i.n.b+i.o.b/2;q=k/m.a;g=l/m.b;if(q+g>=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;pQb(a,(yCc(),lBc),(Qpd(),d=RD(mfb(H3),9),new Fsb(d,RD(WEb(d,d.length),9),0)))} +function ISd(a,b,c,d,e,f){var g;if(!(b==null||!mSd(b,ZRd,$Rd))){throw Adb(new agb('invalid scheme: '+b))}if(!a&&!(c!=null&&qhb(c,Fhb(35))==-1&&c.length>0&&(BFb(0,c.length),c.charCodeAt(0)!=47))){throw Adb(new agb('invalid opaquePart: '+c))}if(a&&!(b!=null&&tpb(eSd,b.toLowerCase()))&&!(c==null||!mSd(c,aSd,bSd))){throw Adb(new agb(NJe+c))}if(a&&b!=null&&tpb(eSd,b.toLowerCase())&&!ESd(c)){throw Adb(new agb(NJe+c))}if(!FSd(d)){throw Adb(new agb('invalid device: '+d))}if(!HSd(e)){g=e==null?'invalid segments: null':'invalid segment: '+tSd(e);throw Adb(new agb(g))}if(!(f==null||qhb(f,Fhb(35))==-1)){throw Adb(new agb('invalid query: '+f))}} +function WHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c.Ug('Network simplex layering',1);a.b=b;r=RD(mQb(b,(yCc(),gCc)),17).a*4;q=a.b.a;if(q.c.length<1){c.Vg();return}f=SHc(a,q);p=null;for(e=Sub(f,0);e.b!=e.d.c;){d=RD(evb(e),15);h=r*eE($wnd.Math.sqrt(d.gc()));g=VHc(d);lJb(yJb(AJb(zJb(CJb(g),h),p),true),c.eh(1));m=a.b.b;for(o=new Anb(g.a);o.a<o.c.c.length;){n=RD(ynb(o),125);while(m.c.length<=n.e){Qmb(m,m.c.length,new R4b(a.b))}k=RD(n.f,10);g3b(k,RD(Vmb(m,n.e),30))}if(f.b>1){p=$C(kE,Pwe,28,a.b.b.c.length,15,1);l=0;for(j=new Anb(a.b.b);j.a<j.c.c.length;){i=RD(ynb(j),30);p[l++]=i.a.c.length}}}q.c.length=0;a.a=null;a.b=null;a.c=null;c.Vg()} +function tMc(a,b){var c,d,e,f,g,h,i,j,k,l;k=new bnb;l=new wmb;f=null;e=0;for(d=0;d<b.length;++d){c=b[d];vMc(f,c)&&(e=oMc(a,l,k,cMc,e));nQb(c,(Ywc(),pwc))&&(f=RD(mQb(c,pwc),10));switch(c.k.g){case 0:for(i=lr(dr(b3b(c,(qpd(),Yod)),new eNc));xc(i);){g=RD(yc(i),12);a.d[g.p]=e++;ZEb(k.c,g)}e=oMc(a,l,k,cMc,e);for(j=lr(dr(b3b(c,npd),new eNc));xc(j);){g=RD(yc(j),12);a.d[g.p]=e++;ZEb(k.c,g)}break;case 3:if(!b3b(c,bMc).dc()){g=RD(b3b(c,bMc).Xb(0),12);a.d[g.p]=e++;ZEb(k.c,g)}b3b(c,cMc).dc()||hmb(l,c);break;case 1:for(h=b3b(c,(qpd(),ppd)).Kc();h.Ob();){g=RD(h.Pb(),12);a.d[g.p]=e++;ZEb(k.c,g)}b3b(c,Xod).Jc(new cNc(l,c));}}oMc(a,l,k,cMc,e);return k} +function vgd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(b==null||b.length==0){return null}f=RD(Xjb(a.f,b),23);if(!f){for(e=(n=(new glb(a.d)).a.vc().Kc(),new llb(n));e.a.Ob();){c=(g=RD(e.a.Pb(),44),RD(g.md(),23));h=c.f;o=b.length;if(lhb(h.substr(h.length-o,o),b)&&(b.length==h.length||ihb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(m=(new glb(a.d)).a.vc().Kc(),new llb(m));d.a.Ob();){c=(g=RD(d.a.Pb(),44),RD(g.md(),23));l=c.g;if(l!=null){for(i=l,j=0,k=i.length;j<k;++j){h=i[j];o=b.length;if(lhb(h.substr(h.length-o,o),b)&&(b.length==h.length||ihb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}}}}!!f&&$jb(a.f,b,f)}return f} +function IA(a,b){var c,d,e,f,g;c=new cib;g=false;for(f=0;f<b.length;f++){d=(BFb(f,b.length),b.charCodeAt(f));if(d==32){wA(a,c,0);c.a+=' ';wA(a,c,0);while(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==32)){++f}continue}if(g){if(d==39){if(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+=String.fromCharCode(d);++f}else{g=false}}else{c.a+=String.fromCharCode(d)}continue}if(qhb('GyMLdkHmsSEcDahKzZv',Fhb(d))>0){wA(a,c,0);c.a+=String.fromCharCode(d);e=BA(b,f);wA(a,c,e);f+=e-1;continue}if(d==39){if(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+="'";++f}else{g=true}}else{c.a+=String.fromCharCode(d)}}wA(a,c,0);CA(a)} +function tSc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;t=Yx(a);i=new bnb;f=a.c.length;j=f-1;k=f+1;while(t.a.gc()!=0){while(c.b!=0){r=(sFb(c.b!=0),RD(Wub(c,c.a.a),118));t.a.Bc(r)!=null;r.g=j--;wSc(r,b,c,d)}while(b.b!=0){s=(sFb(b.b!=0),RD(Wub(b,b.a.a),118));t.a.Bc(s)!=null;s.g=k++;wSc(s,b,c,d)}h=qwe;for(p=t.a.ec().Kc();p.Ob();){o=RD(p.Pb(),118);if(!d&&o.b>0&&o.a<=0){i.c.length=0;ZEb(i.c,o);break}n=o.i-o.d;if(n>=h){if(n>h){i.c.length=0;h=n}ZEb(i.c,o)}}if(i.c.length!=0){g=RD(Vmb(i,Jwb(e,i.c.length)),118);t.a.Bc(g)!=null;g.g=k++;wSc(g,b,c,d);i.c.length=0}}q=a.c.length+1;for(m=new Anb(a);m.a<m.c.c.length;){l=RD(ynb(m),118);l.g<f&&(l.g=l.g+q)}} +function FJc(a,b,c){var d,e,f,g;this.j=a;this.e=c1b(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?RD(Vmb(c,Y2b(this.o).p),219):null;e=RD(mQb(a,(Ywc(),kwc)),21);this.g=e.Hc((ovc(),hvc));this.b=new bnb;this.d=new RLc(this.e);g=RD(mQb(this.j,Lwc),234);this.q=WJc(b,g,this.e);this.k=new _Kc(this);f=dv(cD(WC(QY,1),rve,230,0,[this,this.d,this.k,this.q]));if(b==(RKc(),OKc)&&!Heb(TD(mQb(a,(yCc(),eAc))))){d=new qJc(this.e);ZEb(f.c,d);this.c=new UIc(d,g,RD(this.q,413))}else if(b==OKc&&Heb(TD(mQb(a,(yCc(),eAc))))){d=new qJc(this.e);ZEb(f.c,d);this.c=new vLc(d,g,RD(this.q,413))}else{this.c=new smc(b,this)}Rmb(f,this.c);yNc(f,this.e);this.s=$Kc(this.k)} +function z0b(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;f=new bnb;for(j=new Anb(d);j.a<j.c.c.length;){h=RD(ynb(j),452);g=null;if(h.f==(BEc(),zEc)){for(o=new Anb(h.e);o.a<o.c.c.length;){n=RD(ynb(o),18);q=n.d.i;if(Y2b(q)==b){q0b(a,b,h,n,h.b,n.d)}else if(!c||n2b(q,c)){r0b(a,b,h,d,n)}else{m=w0b(a,b,c,n,h.b,zEc,g);m!=g&&(ZEb(f.c,m),true);m.c&&(g=m)}}}else{for(l=new Anb(h.e);l.a<l.c.c.length;){k=RD(ynb(l),18);p=k.c.i;if(Y2b(p)==b){q0b(a,b,h,k,k.c,h.b)}else if(!c||n2b(p,c)){continue}else{m=w0b(a,b,c,k,h.b,yEc,g);m!=g&&(ZEb(f.c,m),true);m.c&&(g=m)}}}}for(i=new Anb(f);i.a<i.c.c.length;){h=RD(ynb(i),452);Wmb(b.a,h.a,0)!=-1||Rmb(b.a,h.a);h.c&&(ZEb(e.c,h),true)}} +function QXb(a){var b,c,d,e,f,g,h;b=0;for(f=new Anb(a.b.a);f.a<f.c.c.length;){d=RD(ynb(f),194);d.b=0;d.c=0}PXb(a,0);OXb(a,a.g);uYb(a.c);yYb(a.c);c=(Cmd(),ymd);wYb(qYb(vYb(wYb(qYb(vYb(wYb(vYb(a.c,c)),Fmd(c)))),c)));vYb(a.c,ymd);TXb(a,a.g);UXb(a,0);VXb(a,0);WXb(a,1);PXb(a,1);OXb(a,a.d);uYb(a.c);for(g=new Anb(a.b.a);g.a<g.c.c.length;){d=RD(ynb(g),194);b+=$wnd.Math.abs(d.c)}for(h=new Anb(a.b.a);h.a<h.c.c.length;){d=RD(ynb(h),194);d.b=0;d.c=0}c=Bmd;wYb(qYb(vYb(wYb(qYb(vYb(wYb(yYb(vYb(a.c,c))),Fmd(c)))),c)));vYb(a.c,ymd);TXb(a,a.d);UXb(a,1);VXb(a,1);WXb(a,0);yYb(a.c);for(e=new Anb(a.b.a);e.a<e.c.c.length;){d=RD(ynb(e),194);b+=$wnd.Math.abs(d.c)}return b} +function A0b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Heb(TD(mQb(c,(yCc(),NAc))))){return}for(h=new Anb(c.j);h.a<h.c.c.length;){g=RD(ynb(h),12);m=s2b(g.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];f=i.d.i==c;e=f&&Heb(TD(mQb(i,OAc)));if(e){o=i.c;n=RD(Wjb(a.b,o),10);if(!n){n=f2b(o,(Bod(),zod),o.j,-1,null,null,o.o,RD(mQb(b,rAc),88),b);pQb(n,(Ywc(),Awc),o);Zjb(a.b,o,n);Rmb(b.a,n)}q=i.d;p=RD(Wjb(a.b,q),10);if(!p){p=f2b(q,(Bod(),zod),q.j,1,null,null,q.o,RD(mQb(b,rAc),88),b);pQb(p,(Ywc(),Awc),q);Zjb(a.b,q,p);Rmb(b.a,p)}d=s0b(i);Y0b(d,RD(Vmb(n.j,0),12));Z0b(d,RD(Vmb(p.j,0),12));Rc(a.a,i,new J0b(d,b,(BEc(),zEc)));RD(mQb(b,(Ywc(),kwc)),21).Fc((ovc(),hvc))}}}} +function OQc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new Anb(a.a.b);e.a<e.c.c.length;){c=RD(ynb(e),30);for(i=new Anb(c.a);i.a<i.c.c.length;){h=RD(ynb(i),10);b.j[h.p]=h;b.i[h.p]=b.o==(EQc(),DQc)?pxe:oxe}}akb(a.c);g=a.a.b;b.c==(wQc(),uQc)&&(g=hv(g));sRc(a.e,b,a.b);Mnb(b.p,null);for(f=g.Kc();f.Ob();){c=RD(f.Pb(),30);j=c.a;b.o==(EQc(),DQc)&&(j=hv(j));for(m=j.Kc();m.Ob();){l=RD(m.Pb(),10);b.g[l.p]==l&&PQc(a,l,b)}}QQc(a,b);for(d=g.Kc();d.Ob();){c=RD(d.Pb(),30);for(m=new Anb(c.a);m.a<m.c.c.length;){l=RD(ynb(m),10);b.p[l.p]=b.p[b.g[l.p].p];if(l==b.g[l.p]){k=Kfb(b.i[b.j[l.p].p]);(b.o==(EQc(),DQc)&&k>pxe||b.o==CQc&&k<oxe)&&(b.p[l.p]=Kfb(b.p[l.p])+k)}}}a.e.xg()} +function ldc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;c.Ug('Label dummy switching',1);d=RD(mQb(b,(yCc(),uAc)),232);$cc(b);e=idc(b,d);a.a=$C(iE,vxe,28,b.b.c.length,15,1);for(h=(btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])),k=0,n=h.length;k<n;++k){f=h[k];if((f==atc||f==Xsc||f==$sc)&&!RD(Csb(e.a,f)?e.b[f.g]:null,15).dc()){bdc(a,b);break}}for(i=cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc]),l=0,o=i.length;l<o;++l){f=i[l];f==atc||f==Xsc||f==$sc||mdc(a,RD(Csb(e.a,f)?e.b[f.g]:null,15))}for(g=cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc]),j=0,m=g.length;j<m;++j){f=g[j];(f==atc||f==Xsc||f==$sc)&&mdc(a,RD(Csb(e.a,f)?e.b[f.g]:null,15))}a.a=null;c.Vg()} +function tte(a,b){var c,d,e,f,g,h,i,j,k;j=b;if(j.b==null||a.b==null)return;vte(a);ste(a);vte(j);ste(j);c=$C(kE,Pwe,28,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){d+=2}else if(f>=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(i<e){g+=2}else{throw Adb(new yz('Token#intersectRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] & ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=$C(kE,Pwe,28,k,15,1);hib(c,0,a.b,0,k)} +function RXb(a){var b,c,d,e,f,g,h;b=new bnb;a.g=new bnb;a.d=new bnb;for(g=new vkb((new mkb(a.f.b)).a);g.b;){f=tkb(g);Rmb(b,RD(RD(f.md(),42).b,86));Dmd(RD(f.ld(),602).Af())?Rmb(a.d,RD(f.md(),42)):Rmb(a.g,RD(f.md(),42))}OXb(a,a.d);OXb(a,a.g);a.c=new EYb(a.b);CYb(a.c,(zXb(),yXb));TXb(a,a.d);TXb(a,a.g);Tmb(b,a.c.a.b);a.e=new rjd(oxe,oxe);a.a=new rjd(pxe,pxe);for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),86);a.e.a=$wnd.Math.min(a.e.a,c.g.c);a.e.b=$wnd.Math.min(a.e.b,c.g.d);a.a.a=$wnd.Math.max(a.a.a,c.g.c+c.g.b);a.a.b=$wnd.Math.max(a.a.b,c.g.d+c.g.a)}BYb(a.c,new $Xb);h=0;do{e=QXb(a);++h}while((h<2||e>pwe)&&h<10);BYb(a.c,new bYb);QXb(a);xYb(a.c);AXb(a.f)} +function B9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=RD(mQb(a,(yCc(),BBc)),101);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new bnb;l=new bnb;for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),10);switch(c.g){case 1:case 2:case 3:r9b(d);break;case 4:m=RD(mQb(d,zBc),8);n=!m?0:m.a;d.n.a=h*Kfb(UD(mQb(d,(Ywc(),Jwc))))-n;U2b(d,true,false);break;case 5:o=RD(mQb(d,zBc),8);p=!o?0:o.a;d.n.a=Kfb(UD(mQb(d,(Ywc(),Jwc))))-p;U2b(d,true,false);g.a=$wnd.Math.max(g.a,d.n.a+d.o.a/2);}switch(RD(mQb(d,(Ywc(),hwc)),64).g){case 1:d.n.b=i;ZEb(j.c,d);break;case 3:d.n.b=k;ZEb(l.c,d);}}switch(c.g){case 1:case 2:t9b(j,a);t9b(l,a);break;case 3:z9b(j,a);z9b(l,a);}} +function $Jc(a,b){var c,d,e,f,g,h,i,j,k,l,m;switch(a.k.g){case 1:d=RD(mQb(a,(Ywc(),Awc)),18);c=RD(mQb(d,Bwc),75);!c?(c=new Ejd):Heb(TD(mQb(d,Nwc)))&&(c=Ijd(c));j=RD(mQb(a,vwc),12);if(j){k=xjd(cD(WC(l3,1),Nve,8,0,[j.i.n,j.n,j.a]));if(b<=k.a){return k.b}Pub(c,k,c.a,c.a.a)}l=RD(mQb(a,wwc),12);if(l){m=xjd(cD(WC(l3,1),Nve,8,0,[l.i.n,l.n,l.a]));if(m.a<=b){return m.b}Pub(c,m,c.c.b,c.c)}if(c.b>=2){i=Sub(c,0);g=RD(evb(i),8);h=RD(evb(i),8);while(h.a<b&&i.b!=i.d.c){g=h;h=RD(evb(i),8)}return g.b+(b-g.a)/(h.a-g.a)*(h.b-g.b)}break;case 3:f=RD(mQb(RD(Vmb(a.j,0),12),(Ywc(),Awc)),12);e=f.i;switch(f.j.g){case 1:return e.n.b;case 3:return e.n.b+e.o.b;}}return _2b(a).b} +function Akc(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new Anb(a.d.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(Heb(TD(mQb(h,(yCc(),Uzc))))){if(!gr(W2b(h))){d=RD(er(W2b(h)),18);k=d.c.i;k==h&&(k=d.d.i);l=new Ptd(k,ojd(ajd(h.n),k.n));Zjb(a.b,h,l);continue}}e=new Uid(h.n.a-h.d.b,h.n.b-h.d.d,h.o.a+h.d.b+h.d.c,h.o.b+h.d.d+h.d.a);b=mGb(pGb(nGb(oGb(new qGb,h),e),jkc),a.a);gGb(hGb(iGb(new jGb,cD(WC(hN,1),rve,60,0,[b])),b),a.a);j=new cHb;Zjb(a.e,b,j);c=Kr(new is(Mr(Z2b(h).a.Kc(),new ir)))-Kr(new is(Mr(a3b(h).a.Kc(),new ir)));c<0?aHb(j,true,(Cmd(),ymd)):c>0&&aHb(j,true,(Cmd(),zmd));h.k==(r3b(),m3b)&&bHb(j);Zjb(a.f,h,b)}}} +function OVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=RD(mQb(a,(q$c(),h$c)),27);j=lve;k=lve;h=qwe;i=qwe;for(t=Sub(a.b,0);t.b!=t.d.c;){r=RD(evb(t),39);n=r.e;o=r.f;j=$wnd.Math.min(j,n.a-o.a/2);k=$wnd.Math.min(k,n.b-o.b/2);h=$wnd.Math.max(h,n.a+o.a/2);i=$wnd.Math.max(i,n.b+o.b/2)}m=RD(Gxd(e,(h_c(),T$c)),107);for(s=Sub(a.b,0);s.b!=s.d.c;){r=RD(evb(s),39);l=mQb(r,h$c);if(ZD(l,207)){f=RD(l,27);Byd(f,r.e.a,r.e.b);zxd(f,r)}}for(q=Sub(a.a,0);q.b!=q.d.c;){p=RD(evb(q),65);d=RD(mQb(p,h$c),74);if(d){b=p.a;c=IGd(d,true,true);lsd(b,c)}}u=h-j+(m.b+m.c);g=i-k+(m.d+m.a);Heb(TD(Gxd(e,(umd(),mld))))||Esd(e,u,g,false,false);Ixd(e,Ikd,u-(m.b+m.c));Ixd(e,Hkd,g-(m.d+m.a))} +function Wec(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.g[b.p];k=b.o.b+a.o;c=a.d[b.p][2];$mb(a.b,j,sgb(RD(Vmb(a.b,j),17).a-1+c));$mb(a.c,j,Kfb(UD(Vmb(a.c,j)))-k+c*a.f);++j;if(j>=a.j){++a.j;Rmb(a.b,sgb(1));Rmb(a.c,k)}else{d=a.d[b.p][1];$mb(a.b,j,sgb(RD(Vmb(a.b,j),17).a+1-d));$mb(a.c,j,Kfb(UD(Vmb(a.c,j)))+k-d*a.f)}(a.r==(aEc(),VDc)&&(RD(Vmb(a.b,j),17).a>a.k||RD(Vmb(a.b,j-1),17).a>a.k)||a.r==YDc&&(Kfb(UD(Vmb(a.c,j)))>a.n||Kfb(UD(Vmb(a.c,j-1)))>a.n))&&(i=false);for(g=new is(Mr(Z2b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);h=f.c.i;if(a.g[h.p]==j){l=Wec(a,h);e=e+RD(l.a,17).a;i=i&&Heb(TD(l.b))}}a.g[b.p]=j;e=e+a.d[b.p][0];return new Ptd(sgb(e),(Geb(),i?true:false))} +function cXb(a,b){var c,d,e,f,g;c=Kfb(UD(mQb(b,(yCc(),TBc))));c<2&&pQb(b,TBc,2);d=RD(mQb(b,rAc),88);d==(Cmd(),Amd)&&pQb(b,rAc,i2b(b));e=RD(mQb(b,NBc),17);e.a==0?pQb(b,(Ywc(),Lwc),new Owb):pQb(b,(Ywc(),Lwc),new Pwb(e.a));f=TD(mQb(b,gBc));f==null&&pQb(b,gBc,(Geb(),dE(mQb(b,yAc))===dE((Ymd(),Umd))?true:false));FDb(new SDb(null,new Swb(b.a,16)),new fXb(a));FDb(EDb(new SDb(null,new Swb(b.b,16)),new hXb),new jXb(a));g=new gFc(b);pQb(b,(Ywc(),Qwc),g);Sed(a.a);Ved(a.a,(sXb(),nXb),RD(mQb(b,pAc),188));Ved(a.a,oXb,RD(mQb(b,$Ac),188));Ved(a.a,pXb,RD(mQb(b,oAc),188));Ved(a.a,qXb,RD(mQb(b,kBc),188));Ved(a.a,rXb,KRc(RD(mQb(b,yAc),223)));Ped(a.a,bXb(b));pQb(b,Kwc,Qed(a.a,b))} +function STc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Tsb;g=new bnb;QTc(a,c,a.d.Ag(),g,l);QTc(a,d,a.d.Bg(),g,l);a.b=0.2*(p=RTc(EDb(new SDb(null,new Swb(g,16)),new XTc)),q=RTc(EDb(new SDb(null,new Swb(g,16)),new ZTc)),$wnd.Math.min(p,q));f=0;for(h=0;h<g.c.length-1;h++){i=(tFb(h,g.c.length),RD(g.c[h],118));for(o=h+1;o<g.c.length;o++){f+=PTc(a,i,(tFb(o,g.c.length),RD(g.c[o],118)))}}m=RD(mQb(b,(Ywc(),Lwc)),234);f>=2&&(r=uSc(g,true,m),!a.e&&(a.e=new xTc(a)),tTc(a.e,r,g,a.b),undefined);UTc(g,m);WTc(g);n=-1;for(k=new Anb(g);k.a<k.c.c.length;){j=RD(ynb(k),118);if($wnd.Math.abs(j.s-j.c)<Vze){continue}n=$wnd.Math.max(n,j.o);a.d.yg(j,e,a.c)}a.d.a.a.$b();return n+1} +function s0c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=RD(Hr((g=Sub((new dXc(b)).a.d,0),new gXc(g))),39);o=l?RD(mQb(l,(q$c(),b$c)),39):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h<e;h++){c=_Wc(c);d=_Wc(d);u+=Kfb(UD(mQb(c,(q$c(),g$c))));i+=Kfb(UD(mQb(d,g$c)))}t=Kfb(UD(mQb(o,(q$c(),j$c))));s=Kfb(UD(mQb(l,j$c)));m=u0c(a,l,o);n=t+i+a.b+m-s-u;if(0<n){j=b;k=0;while(!!j&&j!=d){++k;j=RD(mQb(j,c$c),39)}if(j){r=n/k;j=b;while(j!=d){q=Kfb(UD(mQb(j,j$c)))+n;pQb(j,j$c,q);p=Kfb(UD(mQb(j,g$c)))+n;pQb(j,g$c,p);n-=r;j=RD(mQb(j,c$c),39)}}else{return}}++e;l.d.b==0?(l=kWc(new dXc(b),e)):(l=RD(Hr((f=Sub((new dXc(l)).a.d,0),new gXc(f))),39));o=l?RD(mQb(l,b$c),39):null}} +function Lmc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=RD(mQb(m,(Ywc(),qwc)),15),!!o&&o.gc()!=0&&o.Hc(n))||(p=m.k!=(r3b(),o3b)&&n.k!=o3b,q=RD(mQb(m,pwc),10),r=RD(mQb(n,pwc),10),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=Mmc(m,(qpd(),Yod)),v=Mmc(n,npd),t=t|(Mmc(m,npd)||Mmc(n,Yod)),w=t&&s||u||v,p&&w)||m.k==(r3b(),q3b)&&n.k==p3b||n.k==(r3b(),q3b)&&m.k==p3b){return false}k=a.c[b];f=a.c[c];e=jMc(a.e,k,f,(qpd(),ppd));i=jMc(a.i,k,f,Xod);Cmc(a.f,k,f);j=lmc(a.b,k,f)+RD(e.a,17).a+RD(i.a,17).a+a.f.d;h=lmc(a.b,f,k)+RD(e.b,17).a+RD(i.b,17).a+a.f.b;if(a.a){l=RD(mQb(k,Awc),12);g=RD(mQb(f,Awc),12);d=hMc(a.g,l,g);j+=RD(d.a,17).a;h+=RD(d.b,17).a}return j>h} +function Iad(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=oxe;k=oxe;h=pxe;i=pxe;for(m=new Anb(b.i);m.a<m.c.c.length;){l=RD(ynb(m),68);e=RD(RD(Wjb(a.g,l.a),42).b,27);Byd(e,l.b.c,l.b.d);j=$wnd.Math.min(j,e.i);k=$wnd.Math.min(k,e.j);h=$wnd.Math.max(h,e.i+e.g);i=$wnd.Math.max(i,e.j+e.f)}n=RD(Gxd(a.c,(ncd(),ecd)),107);Esd(a.c,h-j+(n.b+n.c),i-k+(n.d+n.a),true,true);Isd(a.c,-j+n.b,-k+n.d);for(d=new dMd(uCd(a.c));d.e!=d.i.gc();){c=RD(bMd(d),74);g=IGd(c,true,true);o=JGd(c);q=LGd(c);p=new rjd(o.i+o.g/2,o.j+o.f/2);f=new rjd(q.i+q.g/2,q.j+q.f/2);r=ojd(new rjd(f.a,f.b),p);wid(r,o.g,o.f);$id(p,r);s=ojd(new rjd(p.a,p.b),f);wid(s,q.g,q.f);$id(f,s);Nzd(g,p.a,p.b);Gzd(g,f.a,f.b)}} +function Tcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;b.Ug('Label dummy removal',1);d=Kfb(UD(mQb(a,(yCc(),VBc))));e=Kfb(UD(mQb(a,ZBc)));j=RD(mQb(a,rAc),88);for(i=new Anb(a.b);i.a<i.c.c.length;){h=RD(ynb(i),30);l=new Jkb(h.a,0);while(l.b<l.d.gc()){k=(sFb(l.b<l.d.gc()),RD(l.d.Xb(l.c=l.b++),10));if(k.k==(r3b(),n3b)){m=RD(mQb(k,(Ywc(),Awc)),18);o=Kfb(UD(mQb(m,FAc)));g=dE(mQb(k,swc))===dE((Pnd(),Mnd));c=new sjd(k.n);g&&(c.b+=o+d);f=new rjd(k.o.a,k.o.b+(k.k==n3b&&!QDb(CDb(RD(mQb(k,Mwc),15).Oc(),new PAb(new x3b))).Bd((xDb(),wDb))?0:-o-d));n=RD(mQb(k,Mwc),15);j==(Cmd(),Bmd)||j==xmd?Scc(n,c,e,f,g,j):Rcc(n,c,e,f);Tmb(m.b,n);Hec(k,dE(mQb(a,yAc))===dE((Ymd(),Vmd)));Ckb(l)}}}b.Vg()} +function ZBd(a){if(a.q)return;a.q=true;a.p=jBd(a,0);a.a=jBd(a,1);oBd(a.a,0);a.f=jBd(a,2);oBd(a.f,1);iBd(a.f,2);a.n=jBd(a,3);iBd(a.n,3);iBd(a.n,4);iBd(a.n,5);iBd(a.n,6);a.g=jBd(a,4);oBd(a.g,7);iBd(a.g,8);a.c=jBd(a,5);oBd(a.c,7);oBd(a.c,8);a.i=jBd(a,6);oBd(a.i,9);oBd(a.i,10);oBd(a.i,11);oBd(a.i,12);iBd(a.i,13);a.j=jBd(a,7);oBd(a.j,9);a.d=jBd(a,8);oBd(a.d,3);oBd(a.d,4);oBd(a.d,5);oBd(a.d,6);iBd(a.d,7);iBd(a.d,8);iBd(a.d,9);iBd(a.d,10);a.b=jBd(a,9);iBd(a.b,0);iBd(a.b,1);a.e=jBd(a,10);iBd(a.e,1);iBd(a.e,2);iBd(a.e,3);iBd(a.e,4);oBd(a.e,5);oBd(a.e,6);oBd(a.e,7);oBd(a.e,8);oBd(a.e,9);oBd(a.e,10);iBd(a.e,11);a.k=jBd(a,11);iBd(a.k,0);iBd(a.k,1);a.o=kBd(a,12);a.s=kBd(a,13)} +function CXb(a,b){b.dc()&&JYb(a.j,true,true,true,true);pb(b,(qpd(),cpd))&&JYb(a.j,true,true,true,false);pb(b,Zod)&&JYb(a.j,false,true,true,true);pb(b,kpd)&&JYb(a.j,true,true,false,true);pb(b,mpd)&&JYb(a.j,true,false,true,true);pb(b,dpd)&&JYb(a.j,false,true,true,false);pb(b,$od)&&JYb(a.j,false,true,false,true);pb(b,lpd)&&JYb(a.j,true,false,false,true);pb(b,jpd)&&JYb(a.j,true,false,true,false);pb(b,hpd)&&JYb(a.j,true,true,true,true);pb(b,apd)&&JYb(a.j,true,true,true,true);pb(b,hpd)&&JYb(a.j,true,true,true,true);pb(b,_od)&&JYb(a.j,true,true,true,true);pb(b,ipd)&&JYb(a.j,true,true,true,true);pb(b,gpd)&&JYb(a.j,true,true,true,true);pb(b,fpd)&&JYb(a.j,true,true,true,true)} +function tAd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.jk()){throw Adb(new agb(VHe+c.xe()+WHe))}e=Oee((lke(),jke),c).Jl();if(e){return e.jk().wi().ri(e,d)}h=Oee(jke,c).Ll();if(h){if(d==null){return null}i=RD(d,15);if(i.dc()){return ''}m=new Qhb;for(g=i.Kc();g.Ob();){f=g.Pb();Nhb(m,h.jk().wi().ri(h,f));m.a+=' '}return qeb(m,m.a.length-1)}l=Oee(jke,c).Ml();if(!l.dc()){for(k=l.Kc();k.Ob();){j=RD(k.Pb(),156);if(j.fk(d)){try{m=j.jk().wi().ri(j,d);if(m!=null){return m}}catch(a){a=zdb(a);if(!ZD(a,103))throw Adb(a)}}}throw Adb(new agb("Invalid value: '"+d+"' for datatype :"+c.xe()))}RD(c,847).ok();return d==null?null:ZD(d,180)?''+RD(d,180).a:rb(d)==qK?a2d(nAd[0],RD(d,206)):jeb(d)} +function ZUc(a){var b,c,d,e,f,g,h,i,j,k;j=new Yub;h=new Yub;for(f=new Anb(a);f.a<f.c.c.length;){d=RD(ynb(f),131);d.v=0;d.n=d.i.c.length;d.u=d.t.c.length;d.n==0&&(Pub(j,d,j.c.b,j.c),true);d.u==0&&d.r.a.gc()==0&&(Pub(h,d,h.c.b,h.c),true)}g=-1;while(j.b!=0){d=RD(ku(j,0),131);for(c=new Anb(d.t);c.a<c.c.c.length;){b=RD(ynb(c),274);k=b.b;k.v=$wnd.Math.max(k.v,d.v+1);g=$wnd.Math.max(g,k.v);--k.n;k.n==0&&(Pub(j,k,j.c.b,j.c),true)}}if(g>-1){for(e=Sub(h,0);e.b!=e.d.c;){d=RD(evb(e),131);d.v=g}while(h.b!=0){d=RD(ku(h,0),131);for(c=new Anb(d.i);c.a<c.c.c.length;){b=RD(ynb(c),274);i=b.a;if(i.r.a.gc()!=0){continue}i.v=$wnd.Math.min(i.v,d.v-1);--i.u;i.u==0&&(Pub(h,i,h.c.b,h.c),true)}}}} +function WTc(a){var b,c,d,e,f,g,h,i,j,k;j=new bnb;h=new bnb;for(g=new Anb(a);g.a<g.c.c.length;){e=RD(ynb(g),118);PSc(e,e.f.c.length);QSc(e,e.k.c.length);e.d==0&&(ZEb(j.c,e),true);e.i==0&&e.e.b==0&&(ZEb(h.c,e),true)}d=-1;while(j.c.length!=0){e=RD(Xmb(j,0),118);for(c=new Anb(e.k);c.a<c.c.c.length;){b=RD(ynb(c),132);k=b.b;RSc(k,$wnd.Math.max(k.o,e.o+1));d=$wnd.Math.max(d,k.o);PSc(k,k.d-1);k.d==0&&(ZEb(j.c,k),true)}}if(d>-1){for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),118);e.o=d}while(h.c.length!=0){e=RD(Xmb(h,0),118);for(c=new Anb(e.f);c.a<c.c.c.length;){b=RD(ynb(c),132);i=b.a;if(i.e.b>0){continue}RSc(i,$wnd.Math.min(i.o,e.o-1));QSc(i,i.i-1);i.i==0&&(ZEb(h.c,i),true)}}}} +function Lid(a,b,c,d,e){var f,g,h,i;i=oxe;g=false;h=Gid(a,ojd(new rjd(b.a,b.b),a),$id(new rjd(c.a,c.b),e),ojd(new rjd(d.a,d.b),c));f=!!h&&!($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe||$wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe);h=Gid(a,ojd(new rjd(b.a,b.b),a),c,e);!!h&&(($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe)==($wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe)||f?(i=$wnd.Math.min(i,ejd(ojd(h,c)))):(g=true));h=Gid(a,ojd(new rjd(b.a,b.b),a),d,e);!!h&&(g||($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe)==($wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe)||f)&&(i=$wnd.Math.min(i,ejd(ojd(h,d))));return i} +function eWb(a){Cgd(a,new Pfd(Wfd($fd(Xfd(Zfd(Yfd(new agd,AAe),BAe),"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 hWb),Zze)));Agd(a,AAe,dAe,iGd(XVb));Agd(a,AAe,fAe,(Geb(),true));Agd(a,AAe,jAe,iGd($Vb));Agd(a,AAe,CAe,iGd(_Vb));Agd(a,AAe,iAe,iGd(aWb));Agd(a,AAe,kAe,iGd(ZVb));Agd(a,AAe,gAe,iGd(bWb));Agd(a,AAe,lAe,iGd(cWb));Agd(a,AAe,vAe,iGd(WVb));Agd(a,AAe,xAe,iGd(UVb));Agd(a,AAe,yAe,iGd(VVb));Agd(a,AAe,zAe,iGd(YVb));Agd(a,AAe,wAe,iGd(TVb))} +function kJc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),239);Kfb(pJc(c.g,c.d[0]).a);c.b=null;if(!!c.e&&c.e.gc()>0&&c.c==0){!b&&(b=new bnb);ZEb(b.c,c)}}if(b){while(b.c.length!=0){c=RD(Xmb(b,0),239);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new bnb),new Anb(c.b));f.a<f.c.c.length;){e=RD(ynb(f),239);if(Mfb(pJc(e.g,e.d[0]).a)==Mfb(pJc(c.g,c.d[0]).a)){if(Wmb(a,e,0)>Wmb(a,c,0)){return new Ptd(e,c)}}else if(Kfb(pJc(e.g,e.d[0]).a)>Kfb(pJc(c.g,c.d[0]).a)){return new Ptd(e,c)}}}for(h=(!c.e&&(c.e=new bnb),c.e).Kc();h.Ob();){g=RD(h.Pb(),239);i=(!g.b&&(g.b=new bnb),g.b);wFb(0,i.c.length);XEb(i.c,0,c);g.c==i.c.length&&(ZEb(b.c,g),true)}}}return null} +function _Jc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;b.Ug('Interactive crossing minimization',1);g=0;for(f=new Anb(a.b);f.a<f.c.c.length;){d=RD(ynb(f),30);d.p=g++}m=c1b(a);q=new ILc(m.length);yNc(new mob(cD(WC(QY,1),rve,230,0,[q])),m);p=0;g=0;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);c=0;l=0;for(k=new Anb(d.a);k.a<k.c.c.length;){i=RD(ynb(k),10);if(i.n.a>0){c+=i.n.a+i.o.a/2;++l}for(o=new Anb(i.j);o.a<o.c.c.length;){n=RD(ynb(o),12);n.p=p++}}l>0&&(c/=l);r=$C(iE,vxe,28,d.a.c.length,15,1);h=0;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);i.p=h++;r[i.p]=$Jc(i,c);i.k==(r3b(),o3b)&&pQb(i,(Ywc(),Cwc),r[i.p])}yob();_mb(d.a,new eKc(r));wIc(q,m,g,true);++g}b.Vg()} +function wte(a,b){var c,d,e,f,g,h,i,j,k;if(b.e==5){tte(a,b);return}j=b;if(j.b==null||a.b==null)return;vte(a);ste(a);vte(j);ste(j);c=$C(kE,Pwe,28,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){c[k++]=a.b[d++];c[k++]=a.b[d++]}else if(f>=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i<e){g+=2}else{throw Adb(new yz('Token#subtractRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] - ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=$C(kE,Pwe,28,k,15,1);hib(c,0,a.b,0,k)} +function oTb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=IGd(b,false,false);r=ssd(h);d&&(r=Ijd(r));t=Kfb(UD(Gxd(b,(tSb(),mSb))));q=(sFb(r.b!=0),RD(r.a.a.c,8));l=RD(ju(r,1),8);if(r.b>2){k=new bnb;Tmb(k,new Rkb(r,1,r.b));f=jTb(k,t+a.a);s=new ORb(f);kQb(s,b);ZEb(c.c,s)}else{d?(s=RD(Wjb(a.b,JGd(b)),272)):(s=RD(Wjb(a.b,LGd(b)),272))}i=JGd(b);d&&(i=LGd(b));g=qTb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new rjd(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new rjd((l.a+q.a)/2,l.b)}d?Zjb(a.d,b,new QRb(s,g,p,j)):Zjb(a.c,b,new QRb(s,g,p,j));Zjb(a.b,b,s);o=(!b.n&&(b.n=new C5d(I4,b,1,7)),b.n);for(n=new dMd(o);n.e!=n.i.gc();){m=RD(bMd(n),135);e=nTb(a,m,true,0,0);ZEb(c.c,e)}} +function sMb(a){var b,c,d,e,f,g,h;if(a.A.dc()){return}if(a.A.Hc((Qpd(),Opd))){RD(Vrb(a.b,(qpd(),Yod)),127).k=true;RD(Vrb(a.b,npd),127).k=true;b=a.q!=(Bod(),xod)&&a.q!=wod;QJb(RD(Vrb(a.b,Xod),127),b);QJb(RD(Vrb(a.b,ppd),127),b);QJb(a.g,b);if(a.A.Hc(Ppd)){RD(Vrb(a.b,Yod),127).j=true;RD(Vrb(a.b,npd),127).j=true;RD(Vrb(a.b,Xod),127).k=true;RD(Vrb(a.b,ppd),127).k=true;a.g.k=true}}if(a.A.Hc(Npd)){a.a.j=true;a.a.k=true;a.g.j=true;a.g.k=true;h=a.B.Hc((dqd(),_pd));for(e=nMb(),f=0,g=e.length;f<g;++f){d=e[f];c=RD(Vrb(a.i,d),314);if(c){if(jMb(d)){c.j=true;c.k=true}else{c.j=!h;c.k=!h}}}}if(a.A.Hc(Mpd)&&a.B.Hc((dqd(),$pd))){a.g.j=true;a.g.j=true;if(!a.a.j){a.a.j=true;a.a.k=true;a.a.e=true}}} +function eOc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(d=new Anb(a.e.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);n=a.i[e.p];j=n.a.e;i=n.d.e;e.n.b=j;r=i-j-e.o.b;b=BOc(e);m=(wDc(),(!e.q?(yob(),yob(),wob):e.q)._b((yCc(),iBc))?(l=RD(mQb(e,iBc),203)):(l=RD(mQb(Y2b(e),jBc),203)),l);b&&(m==tDc||m==sDc)&&(e.o.b+=r);if(b&&(m==vDc||m==tDc||m==sDc)){for(p=new Anb(e.j);p.a<p.c.c.length;){o=RD(ynb(p),12);if((qpd(),apd).Hc(o.j)){k=RD(Wjb(a.k,o),125);o.n.b=k.e-j}}for(h=new Anb(e.b);h.a<h.c.c.length;){g=RD(ynb(h),72);q=RD(mQb(e,dBc),21);q.Hc((dod(),aod))?(g.n.b+=r):q.Hc(bod)&&(g.n.b+=r/2)}(m==tDc||m==sDc)&&b3b(e,(qpd(),npd)).Jc(new yPc(r))}}}} +function qOc(a,b,c){var d,e,f,g,h,i,j,k,l,m;j=new bnb;for(i=new Anb(b.a);i.a<i.c.c.length;){g=RD(ynb(i),10);for(m=b3b(g,(qpd(),Xod)).Kc();m.Ob();){l=RD(m.Pb(),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(!W0b(d)&&d.c.i.c==d.d.i.c||W0b(d)||d.d.i.c!=c){continue}ZEb(j.c,d)}}}for(h=hv(c.a).Kc();h.Ob();){g=RD(h.Pb(),10);for(m=b3b(g,(qpd(),ppd)).Kc();m.Ob();){l=RD(m.Pb(),12);for(e=new Anb(l.e);e.a<e.c.c.length;){d=RD(ynb(e),18);if(!W0b(d)&&d.c.i.c==d.d.i.c||W0b(d)||d.c.i.c!=b){continue}if(j.c.length!=0){k=new Jkb(j,j.c.length);f=(sFb(k.b>0),RD(k.a.Xb(k.c=--k.b),18));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sFb(k.b>0),RD(k.a.Xb(k.c=--k.b),18))}k.b>0&&Ckb(k)}}}}} +function Zyb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;if(!a.b){return false}g=null;m=null;i=new Fzb(null,null);e=1;i.a[1]=a.b;l=i;while(l.a[e]){j=e;h=m;m=l;l=l.a[e];d=a.a.Ne(b,l.d);e=d<0?0:1;d==0&&(!c.c||Fvb(l.e,c.d))&&(g=l);if(!(!!l&&l.b)&&!Vyb(l.a[e])){if(Vyb(l.a[1-e])){m=m.a[j]=azb(l,e)}else if(!Vyb(l.a[1-e])){n=m.a[1-j];if(n){if(!Vyb(n.a[1-j])&&!Vyb(n.a[j])){m.b=false;n.b=true;l.b=true}else{f=h.a[1]==m?1:0;Vyb(n.a[j])?(h.a[f]=_yb(m,j)):Vyb(n.a[1-j])&&(h.a[f]=azb(m,j));l.b=h.a[f].b=true;h.a[f].a[0].b=false;h.a[f].a[1].b=false}}}}}if(g){c.b=true;c.d=g.e;if(l!=g){k=new Fzb(l.d,l.e);$yb(a,i,g,k);m==g&&(m=k)}m.a[m.a[1]==l?1:0]=l.a[!l.a[0]?1:0];--a.c}a.b=i.a[1];!!a.b&&(a.b.b=false);return c.b} +function Ilc(a){var b,c,d,e,f,g,h,i,j,k,l,m;for(e=new Anb(a.a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);for(i=d.c.Kc();i.Ob();){h=RD(i.Pb(),60);if(d.a==h.a){continue}Dmd(a.a.d)?(l=a.a.g.ff(d,h)):(l=a.a.g.gf(d,h));f=d.b.a+d.d.b+l-h.b.a;f=$wnd.Math.ceil(f);f=$wnd.Math.max(0,f);if(_jc(d,h)){g=eJb(new gJb,a.d);j=eE($wnd.Math.ceil(h.b.a-d.b.a));b=j-(h.b.a-d.b.a);k=$jc(d).a;c=d;if(!k){k=$jc(h).a;b=-b;c=h}if(k){c.b.a-=b;k.n.a-=b}rIb(uIb(tIb(vIb(sIb(new wIb,$wnd.Math.max(0,j)),1),g),a.c[d.a.d]));rIb(uIb(tIb(vIb(sIb(new wIb,$wnd.Math.max(0,-j)),1),g),a.c[h.a.d]))}else{m=1;(ZD(d.g,154)&&ZD(h.g,10)||ZD(h.g,154)&&ZD(d.g,10))&&(m=2);rIb(uIb(tIb(vIb(sIb(new wIb,eE(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} +function PIc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(c){d=-1;k=new Jkb(b,0);while(k.b<k.d.gc()){h=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),10));l=a.c[h.c.p][h.p].a;if(l==null){g=d+1;f=new Jkb(b,k.b);while(f.b<f.d.gc()){m=TIc(a,(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),10))).a;if(m!=null){g=(uFb(m),m);break}}l=(d+g)/2;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=(uFb(l),l);a.c[h.c.p][h.p].b=1}d=(uFb(l),l)}}else{e=0;for(j=new Anb(b);j.a<j.c.c.length;){h=RD(ynb(j),10);a.c[h.c.p][h.p].a!=null&&(e=$wnd.Math.max(e,Kfb(a.c[h.c.p][h.p].a)))}e+=2;for(i=new Anb(b);i.a<i.c.c.length;){h=RD(ynb(i),10);if(a.c[h.c.p][h.p].a==null){l=Kwb(a.i,24)*Nxe*e-1;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=l;a.c[h.c.p][h.p].b=1}}}} +function xA(a,b,c){var d,e,f,g,h,i,j,k,l;!c&&(c=hB(b.q.getTimezoneOffset()));e=(b.q.getTimezoneOffset()-c.a)*60000;h=new wB(Bdb(Hdb(b.q.getTime()),e));i=h;if(h.q.getTimezoneOffset()!=b.q.getTimezoneOffset()){e>0?(e-=86400000):(e+=86400000);i=new wB(Bdb(Hdb(b.q.getTime()),e))}k=new cib;j=a.a.length;for(f=0;f<j;){d=ihb(a.a,f);if(d>=97&&d<=122||d>=65&&d<=90){for(g=f+1;g<j&&ihb(a.a,g)==d;++g);LA(k,d,g-f,h,i,c);f=g}else if(d==39){++f;if(f<j&&ihb(a.a,f)==39){k.a+="'";++f;continue}l=false;while(!l){g=f;while(g<j&&ihb(a.a,g)!=39){++g}if(g>=j){throw Adb(new agb("Missing trailing '"))}g+1<j&&ihb(a.a,g+1)==39?++g:(l=true);Zhb(k,zhb(a.a,f,g));f=g+1}}else{k.a+=String.fromCharCode(d);++f}}return k.a} +function abe(){RRd(g7,new Ibe);RRd(f7,new nce);RRd(h7,new Uce);RRd(i7,new kde);RRd(k7,new nde);RRd(m7,new qde);RRd(l7,new tde);RRd(n7,new wde);RRd(p7,new ebe);RRd(q7,new hbe);RRd(r7,new kbe);RRd(s7,new nbe);RRd(t7,new qbe);RRd(u7,new tbe);RRd(v7,new wbe);RRd(y7,new zbe);RRd(A7,new Cbe);RRd(C8,new Fbe);RRd(o7,new Lbe);RRd(z7,new Obe);RRd(QI,new Rbe);RRd(WC(gE,1),new Ube);RRd(RI,new Xbe);RRd(SI,new $be);RRd(qK,new bce);RRd(T6,new ece);RRd(VI,new hce);RRd(Y6,new kce);RRd(Z6,new qce);RRd(Tbb,new tce);RRd(Jbb,new wce);RRd(ZI,new zce);RRd(bJ,new Cce);RRd(UI,new Fce);RRd(eJ,new Ice);RRd(VK,new Lce);RRd(Aab,new Oce);RRd(zab,new Rce);RRd(lJ,new Xce);RRd(qJ,new $ce);RRd(a7,new bde);RRd($6,new ede)} +function Inb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return vve}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new Jyb(pve,'[',']');for(e=a,f=0,g=e.length;f<g;++f){d=e[f];if(d!=null&&(rb(d).i&4)!=0){if(Array.isArray(d)&&(k=XC(d),!(k>=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new dib(c.d)):Zhb(c.a,c.b);Whb(c.a,'[...]')}else{h=SD(d);j=new btb(b);Gyb(c,Inb(h,j))}}else ZD(d,183)?Gyb(c,hob(RD(d,183))):ZD(d,195)?Gyb(c,aob(RD(d,195))):ZD(d,201)?Gyb(c,bob(RD(d,201))):ZD(d,2111)?Gyb(c,gob(RD(d,2111))):ZD(d,53)?Gyb(c,eob(RD(d,53))):ZD(d,376)?Gyb(c,fob(RD(d,376))):ZD(d,846)?Gyb(c,dob(RD(d,846))):ZD(d,109)&&Gyb(c,cob(RD(d,109)))}else{Gyb(c,d==null?vve:jeb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function KXd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;yXd(a,null)}else{a.F=(uFb(b),b);d=qhb(b,Fhb(60));if(d!=-1){e=(AFb(0,d,b.length),b.substr(0,d));qhb(b,Fhb(46))==-1&&!lhb(e,hve)&&!lhb(e,dKe)&&!lhb(e,eKe)&&!lhb(e,fKe)&&!lhb(e,gKe)&&!lhb(e,hKe)&&!lhb(e,iKe)&&!lhb(e,jKe)&&(e=kKe);c=thb(b,Fhb(62));c!=-1&&(e+=''+(BFb(c+1,b.length+1),b.substr(c+1)));yXd(a,e)}else{e=b;if(qhb(b,Fhb(46))==-1){d=qhb(b,Fhb(91));d!=-1&&(e=(AFb(0,d,b.length),b.substr(0,d)));if(!lhb(e,hve)&&!lhb(e,dKe)&&!lhb(e,eKe)&&!lhb(e,fKe)&&!lhb(e,gKe)&&!lhb(e,hKe)&&!lhb(e,iKe)&&!lhb(e,jKe)){e=kKe;d!=-1&&(e+=''+(BFb(d,b.length+1),b.substr(d)))}else{e=b}}yXd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,5,f,b))} +function Pvd(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=(BFb(j,c.length),c.charCodeAt(j));if(i==93){h=qhb(c,Fhb(91));if(h>=0){f=Uvd(b,(AFb(1,h,c.length),c.substr(1,h-1)));l=(AFb(h+1,j,c.length),c.substr(h+1,j-(h+1)));return Nvd(b,l,f)}}else{d=-1;_eb==null&&(_eb=new RegExp('\\d'));if(_eb.test(String.fromCharCode(i))){d=uhb(c,Fhb(46),j-1);if(d>=0){e=RD(Fvd(b,Zvd(b,(AFb(1,d,c.length),c.substr(1,d-1))),false),61);k=0;try{k=Oeb((BFb(d+1,c.length+1),c.substr(d+1)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){g=a;throw Adb(new RSd(g))}else throw Adb(a)}if(k<e.gc()){m=e.Xb(k);ZD(m,76)&&(m=RD(m,76).md());return RD(m,58)}}}if(d<0){return RD(Fvd(b,Zvd(b,(BFb(1,c.length+1),c.substr(1))),false),58)}}return null} +function Jcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;b.Ug('Label dummy insertions',1);l=new bnb;g=Kfb(UD(mQb(a,(yCc(),VBc))));j=Kfb(UD(mQb(a,ZBc)));k=RD(mQb(a,rAc),88);for(n=new Anb(a.a);n.a<n.c.c.length;){m=RD(ynb(n),10);for(f=new is(Mr(a3b(m).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(e.c.i!=e.d.i&&br(e.b,Gcc)){p=Kcc(e);o=ev(e.b.c.length);c=Icc(a,e,p,o);ZEb(l.c,c);d=c.o;h=new Jkb(e.b,0);while(h.b<h.d.gc()){i=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),72));if(dE(mQb(i,wAc))===dE((Omd(),Lmd))){if(k==(Cmd(),Bmd)||k==xmd){d.a+=i.o.a+j;d.b=$wnd.Math.max(d.b,i.o.b)}else{d.a=$wnd.Math.max(d.a,i.o.a);d.b+=i.o.b+j}ZEb(o.c,i);Ckb(h)}}if(k==(Cmd(),Bmd)||k==xmd){d.a-=j;d.b+=g+p}else{d.b+=g-j+p}}}}Tmb(a.a,l);b.Vg()} +function H_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;a.c=a.e;o=TD(mQb(b,(yCc(),OBc)));n=o==null||(uFb(o),o);f=RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc));e=RD(mQb(b,BBc),101);c=!(e==(Bod(),vod)||e==xod||e==wod);if(n&&(c||!f)){for(l=new Anb(b.a);l.a<l.c.c.length;){j=RD(ynb(l),10);j.p=0}m=new bnb;for(k=new Anb(b.a);k.a<k.c.c.length;){j=RD(ynb(k),10);d=G_b(a,j,null);if(d){i=new d1b;kQb(i,b);pQb(i,ewc,RD(d.b,21));C2b(i.d,b.d);pQb(i,nBc,null);for(h=RD(d.a,15).Kc();h.Ob();){g=RD(h.Pb(),10);Rmb(i.a,g);g.a=i}m.Fc(i)}}f&&(dE(mQb(b,Yzc))===dE((U$b(),Q$b))?(a.c=a.b):dE(mQb(b,Yzc))===dE(S$b)?(a.c=a.d):(a.c=a.a))}else{m=new mob(cD(WC(eR,1),OAe,36,0,[b]))}dE(mQb(b,Yzc))!==dE((U$b(),T$b))&&(yob(),m.jd(new K_b));return m} +function o2d(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=d2d);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new N3d(a,1,2,j,a.c);!c?(c=i):c.nj(i)}if(j!=b){if(ZD(a.Cb,291)){if(a.Db>>16==-10){c=RD(a.Cb,291).Yk(b,c)}else if(a.Db>>16==-15){!b&&(b=(JTd(),wTd));!j&&(j=(JTd(),wTd));if(a.Cb.Yh()){i=new P3d(a.Cb,1,13,j,b,fZd(o4d(RD(a.Cb,62)),a),false);!c?(c=i):c.nj(i)}}}else if(ZD(a.Cb,90)){if(a.Db>>16==-23){ZD(b,90)||(b=(JTd(),zTd));ZD(j,90)||(j=(JTd(),zTd));if(a.Cb.Yh()){i=new P3d(a.Cb,1,10,j,b,fZd(tYd(RD(a.Cb,29)),a),false);!c?(c=i):c.nj(i)}}}else if(ZD(a.Cb,456)){h=RD(a.Cb,850);g=(!h.b&&(h.b=new pae(new lae)),h.b);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,h),c)}}}return c} +function Y4b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Heb(TD(Gxd(a,(yCc(),NAc))));m=RD(Gxd(a,EBc),21);i=false;j=false;l=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=RD(bMd(l),123);h=0;for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!f.d&&(f.d=new Yie(G4,f,8,5)),f.d),(!f.e&&(f.e=new Yie(G4,f,7,4)),f.e)])));gs(e);){d=RD(hs(e),74);k=g&&ozd(d)&&Heb(TD(Gxd(d,OAc)));c=cZd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),f)?a==vCd(AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))):a==vCd(AGd(RD(QHd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),0),84)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((Pod(),Lod))&&(!f.n&&(f.n=new C5d(I4,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((ovc(),hvc));j&&b.Fc((ovc(),ivc))} +function Dsd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=RD(Gxd(a,(umd(),kld)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((Qpd(),Opd))){k=RD(Gxd(a,Hld),101);d=2;c=2;e=2;f=2;b=!vCd(a)?RD(Gxd(a,Nkd),88):RD(Gxd(vCd(a),Nkd),88);for(j=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));j.e!=j.i.gc();){i=RD(bMd(j),123);l=RD(Gxd(i,Old),64);if(l==(qpd(),opd)){l=osd(i,b);Ixd(i,Old,l)}if(k==(Bod(),wod)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Esd(a,h,g,true,true)} +function Rqc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=RD(zDb(PDb(CDb(new SDb(null,new Swb(b.d,16)),new Vqc(c)),new Xqc(c)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);l=lve;k=qwe;for(i=new Anb(b.b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);if(h.j==c){l=$wnd.Math.min(l,h.p);k=$wnd.Math.max(k,h.p)}}if(l==lve){for(g=0;g<s.gc();g++){Umc(RD(s.Xb(g),105),c,g)}}else{t=$C(kE,Pwe,28,e.length,15,1);Qnb(t,t.length);for(r=s.Kc();r.Ob();){q=RD(r.Pb(),105);f=RD(Wjb(a.b,q),183);j=0;for(p=l;p<=k;p++){f[p]&&(j=$wnd.Math.max(j,d[p]))}if(q.i){n=q.i.c;u=new _sb;for(m=0;m<e.length;m++){e[n][m]&&Ysb(u,sgb(t[m]))}while(Zsb(u,sgb(j))){++j}}Umc(q,c,j);for(o=l;o<=k;o++){f[o]&&(d[o]=j+1)}!!q.i&&(t[q.i.c]=j)}}} +function wOc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;e=null;for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),10);BOc(c)?(f=(h=eJb(fJb(new gJb,c),a.f),i=eJb(fJb(new gJb,c),a.f),j=new ROc(c,true,h,i),k=c.o.b,l=(wDc(),(!c.q?(yob(),yob(),wob):c.q)._b((yCc(),iBc))?(m=RD(mQb(c,iBc),203)):(m=RD(mQb(Y2b(c),jBc),203)),m),n=10000,l==sDc&&(n=1),o=rIb(uIb(tIb(sIb(vIb(new wIb,n),eE($wnd.Math.ceil(k))),h),i)),l==tDc&&Ysb(a.d,o),xOc(a,hv(b3b(c,(qpd(),ppd))),j),xOc(a,b3b(c,Xod),j),j)):(f=(p=eJb(fJb(new gJb,c),a.f),FDb(CDb(new SDb(null,new Swb(c.j,16)),new cPc),new ePc(a,p)),new ROc(c,false,p,p)));a.i[c.p]=f;if(e){g=e.c.d.a+bFc(a.n,e.c,c)+c.d.d;e.b||(g+=e.c.o.b);rIb(uIb(tIb(vIb(sIb(new wIb,eE($wnd.Math.ceil(g))),0),e.d),f.a))}e=f}} +function h_b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;f=new t_b(b);l=c_b(a,b,f);n=$wnd.Math.max(Kfb(UD(mQb(b,(yCc(),FAc)))),1);for(k=new Anb(l.a);k.a<k.c.c.length;){j=RD(ynb(k),42);i=g_b(RD(j.a,8),RD(j.b,8),n);o=true;o=o&l_b(c,new rjd(i.c,i.d));o=o&l_b(c,Zid(new rjd(i.c,i.d),i.b,0));o=o&l_b(c,Zid(new rjd(i.c,i.d),0,i.a));o&l_b(c,Zid(new rjd(i.c,i.d),i.b,i.a))}m=f.d;h=g_b(RD(l.b.a,8),RD(l.b.b,8),n);if(m==(qpd(),ppd)||m==Xod){d.c[m.g]=$wnd.Math.min(d.c[m.g],h.d);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.d+h.a)}else{d.c[m.g]=$wnd.Math.min(d.c[m.g],h.c);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.c+h.b)}e=pxe;g=f.c.i.d;switch(m.g){case 4:e=g.c;break;case 2:e=g.b;break;case 1:e=g.a;break;case 3:e=g.d;}d.a[m.g]=$wnd.Math.max(d.a[m.g],e);return f} +function W7b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;h=RD(Wjb(b.c,a),467);s=b.a.c;i=b.a.c+b.a.b;C=h.f;D=h.a;g=C<D;p=new rjd(s,C);t=new rjd(i,D);e=(s+i)/2;q=new rjd(e,C);u=new rjd(e,D);f=X7b(a,C,D);w=K3b(b.B);A=new rjd(e,f);B=K3b(b.D);c=uid(cD(WC(l3,1),Nve,8,0,[w,A,B]));n=false;r=b.B.i;if(!!r&&!!r.c&&h.d){j=g&&r.p<r.c.a.c.length-1||!g&&r.p>0;if(j){if(j){m=r.p;g?++m:--m;l=RD(Vmb(r.c.a,m),10);d=Z7b(l);n=!(Did(d,w,c[0])||yid(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p<v.c.a.c.length-1;if(k){m=v.p;g?--m:++m;l=RD(Vmb(v.c.a,m),10);d=Z7b(l);o=!(Did(d,c[0],B)||yid(d,c[0],B))}else{o=true}}n&&o&&Mub(a.a,A);n||zjd(a.a,cD(WC(l3,1),Nve,8,0,[p,q]));o||zjd(a.a,cD(WC(l3,1),Nve,8,0,[u,t]))} +function MNc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;n=b.c.length;m=0;for(l=new Anb(a.b);l.a<l.c.c.length;){k=RD(ynb(l),30);r=k.a;if(r.c.length==0){continue}q=new Anb(r);j=0;s=null;e=RD(ynb(q),10);f=null;while(e){f=RD(Vmb(b,e.p),261);if(f.c>=0){i=null;h=new Jkb(k.a,j+1);while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),10));i=RD(Vmb(b,g.p),261);if(i.d==f.d&&i.c<f.c){break}else{i=null}}if(i){if(s){$mb(d,e.p,sgb(RD(Vmb(d,e.p),17).a-1));RD(Vmb(c,s.p),15).Mc(f)}f=YNc(f,e,n++);ZEb(b.c,f);Rmb(c,new bnb);if(s){RD(Vmb(c,s.p),15).Fc(f);Rmb(d,sgb(1))}else{Rmb(d,sgb(0))}}}o=null;if(q.a<q.c.c.length){o=RD(ynb(q),10);p=RD(Vmb(b,o.p),261);RD(Vmb(c,e.p),15).Fc(p);$mb(d,o.p,sgb(RD(Vmb(d,o.p),17).a+1))}f.d=m;f.c=j++;s=e;e=o}++m}} +function I5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=RD(mQb(a,(Ywc(),Awc)),74);if(!f){return}d=a.a;e=new sjd(c);$id(e,M5b(a));if(n2b(a.d.i,a.c.i)){m=a.c;l=xjd(cD(WC(l3,1),Nve,8,0,[m.n,m.a]));ojd(l,c)}else{l=K3b(a.c)}Pub(d,l,d.a,d.a.a);n=K3b(a.d);mQb(a,Wwc)!=null&&$id(n,RD(mQb(a,Wwc),8));Pub(d,n,d.c.b,d.c);Cjd(d,e);g=IGd(f,true,true);Kzd(g,RD(QHd((!f.b&&(f.b=new Yie(E4,f,4,7)),f.b),0),84));Lzd(g,RD(QHd((!f.c&&(f.c=new Yie(E4,f,5,8)),f.c),0),84));lsd(d,g);for(k=new Anb(a.b);k.a<k.c.c.length;){j=RD(ynb(k),72);h=RD(mQb(j,Awc),135);Cyd(h,j.o.a);Ayd(h,j.o.b);Byd(h,j.n.a+e.a,j.n.b+e.b);Ixd(h,(Zcc(),Ycc),TD(mQb(j,Ycc)))}i=RD(mQb(a,(yCc(),RAc)),75);if(i){Cjd(i,e);Ixd(f,RAc,i)}else{Ixd(f,RAc,null)}b==(Ymd(),Wmd)?Ixd(f,yAc,Wmd):Ixd(f,yAc,null)} +function O3c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new bnb;for(n=new Anb(c);n.a<n.c.c.length;){m=RD(ynb(n),27);Rmb(o,new rjd(m.i,m.j))}d.dh(b,'Before removing overlaps');while(p3c(a,c)){n3c(a,c,false)}d.dh(b,'After removing overlaps');h=0;i=0;e=null;if(c.c.length!=0){e=(tFb(0,c.c.length),RD(c.c[0],27));h=e.i-(tFb(0,o.c.length),RD(o.c[0],8)).a;i=e.j-(tFb(0,o.c.length),RD(o.c[0],8)).b}g=$wnd.Math.sqrt(h*h+i*i);l=M2c(c);f=1;if(l.a.gc()!=0){for(k=l.a.ec().Kc();k.Ob();){j=RD(k.Pb(),27);p=a.f;q=p.i+p.g/2;r=p.j+p.f/2;s=j.i+j.g/2;t=j.j+j.f/2;u=s-q;v=t-r;w=$wnd.Math.sqrt(u*u+v*v);A=u/w;B=v/w;Dyd(j,j.i+A*g);Eyd(j,j.j+B*g)}d.dh(b,'Child movement '+f);++f}!!a.a&&a.a.Gg(new dnb(l));O3c(a,b,new dnb(l),d)}} +function Fid(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=a;k=ojd(new rjd(b.a,b.b),a);j=c;l=ojd(new rjd(d.a,d.b),c);m=i.a;q=i.b;o=j.a;s=j.b;n=k.a;r=k.b;p=l.a;t=l.b;e=p*r-n*t;Zy();bz(vEe);if($wnd.Math.abs(0-e)<=vEe||0==e||isNaN(0)&&isNaN(e)){return false}g=1/e*((m-o)*r-(q-s)*n);h=1/e*-(-(m-o)*t+(q-s)*p);f=(null,bz(vEe),($wnd.Math.abs(0-g)<=vEe||0==g||isNaN(0)&&isNaN(g)?0:0<g?-1:0>g?1:cz(isNaN(0),isNaN(g)))<0&&(null,bz(vEe),($wnd.Math.abs(g-1)<=vEe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:cz(isNaN(g),isNaN(1)))<0)&&(null,bz(vEe),($wnd.Math.abs(0-h)<=vEe||0==h||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:cz(isNaN(0),isNaN(h)))<0)&&(null,bz(vEe),($wnd.Math.abs(h-1)<=vEe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:cz(isNaN(h),isNaN(1)))<0));return f} +function EXd(b){var c,d,e,f;d=b.D!=null?b.D:b.B;c=qhb(d,Fhb(91));if(c!=-1){e=(AFb(0,c,d.length),d.substr(0,c));f=new Qhb;do f.a+='[';while((c=phb(d,91,++c))!=-1);if(lhb(e,hve))f.a+='Z';else if(lhb(e,dKe))f.a+='B';else if(lhb(e,eKe))f.a+='C';else if(lhb(e,fKe))f.a+='D';else if(lhb(e,gKe))f.a+='F';else if(lhb(e,hKe))f.a+='I';else if(lhb(e,iKe))f.a+='J';else if(lhb(e,jKe))f.a+='S';else{f.a+='L';f.a+=''+e;f.a+=';'}try{return null}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}else if(qhb(d,Fhb(46))==-1){if(lhb(d,hve))return xdb;else if(lhb(d,dKe))return gE;else if(lhb(d,eKe))return hE;else if(lhb(d,fKe))return iE;else if(lhb(d,gKe))return jE;else if(lhb(d,hKe))return kE;else if(lhb(d,iKe))return lE;else if(lhb(d,jKe))return wdb}return null} +function pTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=RSb(b);w=new bnb;for(d=new Anb(h);d.a<d.c.c.length;){c=RD(ynb(d),15);A=new bnb;ZEb(w.c,A);i=new _sb;for(o=c.Kc();o.Ob();){n=RD(o.Pb(),27);f=nTb(a,n,true,0,0);ZEb(A.c,f);p=n.i;q=n.j;new rjd(p,q);m=(!n.n&&(n.n=new C5d(I4,n,1,7)),n.n);for(l=new dMd(m);l.e!=l.i.gc();){j=RD(bMd(l),135);e=nTb(a,j,false,p,q);ZEb(A.c,e)}v=(!n.c&&(n.c=new C5d(K4,n,9,9)),n.c);for(s=new dMd(v);s.e!=s.i.gc();){r=RD(bMd(s),123);g=nTb(a,r,false,p,q);ZEb(A.c,g);t=r.i+p;u=r.j+q;m=(!r.n&&(r.n=new C5d(I4,r,1,7)),r.n);for(k=new dMd(m);k.e!=k.i.gc();){j=RD(bMd(k),135);e=nTb(a,j,false,t,u);ZEb(A.c,e)}}ye(i,Ux(Al(cD(WC(cJ,1),rve,20,0,[zGd(n),yGd(n)]))))}mTb(a,i,A)}a.f=new TRb(w);kQb(a.f,b);return a.f} +function Yje(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new Dub(new wub(a));l.c!=l.d.a.d;){k=Cub(l);h=RD(k.d,58);b=RD(k.e,58);g=h.Dh();for(p=0,u=(g.i==null&&rYd(g),g.i).length;p<u;++p){j=(f=(g.i==null&&rYd(g),g.i),p>=0&&p<f.length?f[p]:null);if(j.rk()&&!j.sk()){if(ZD(j,102)){i=RD(j,19);(i.Bb&QHe)==0&&(w=Z5d(i),!(!!w&&(w.Bb&QHe)!=0))&&Xje(a,i,h,b)}else{nke();if(RD(j,69).xk()){c=(v=j,RD(!v?null:RD(b,54).gi(v),160));if(c){n=RD(h.Mh(j),160);d=c.gc();for(q=0,o=n.gc();q<o;++q){m=n.Tl(q);if(ZD(m,102)){t=n.Ul(q);e=cub(a,t);if(e==null&&t!=null){s=RD(m,19);if(!a.b||(s.Bb&QHe)!=0||!!Z5d(s)){continue}e=t}if(!c.Ol(m,e)){for(r=0;r<d;++r){if(c.Tl(r)==m&&dE(c.Ul(r))===dE(e)){c.Ti(c.gc()-1,r);--d;break}}}}else{c.Ol(n.Tl(q),n.Ul(q))}}}}}}}}} +function gIc(a,b,c){var d;c.Ug('StretchWidth layering',1);if(b.a.c.length==0){c.Vg();return}a.c=b;a.t=0;a.u=0;a.i=oxe;a.g=pxe;a.d=Kfb(UD(mQb(b,(yCc(),TBc))));aIc(a);bIc(a);$Hc(a);fIc(a);_Hc(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=dIc(a);d=new R4b(a.c);Rmb(a.c.b,d);a.r=bv(a.p);a.n=Fnb(a.k,a.k.length);while(a.r.c.length!=0){a.o=hIc(a);if(!a.o||cIc(a)&&a.b.a.gc()!=0){iIc(a,d);d=new R4b(a.c);Rmb(a.c.b,d);ye(a.a,a.b);a.b.a.$b();a.t=a.u;a.u=0}else{if(cIc(a)){a.c.b.c.length=0;d=new R4b(a.c);Rmb(a.c.b,d);a.t=0;a.u=0;a.b.a.$b();a.a.a.$b();++a.f;a.r=bv(a.p);a.n=Fnb(a.k,a.k.length)}else{g3b(a.o,d);Ymb(a.r,a.o);Ysb(a.b,a.o);a.t=a.t-a.k[a.o.p]*a.d+a.j[a.o.p];a.u+=a.e[a.o.p]*a.d}}}b.a.c.length=0;Eob(b.b);c.Vg()} +function sOc(a){var b,c,d,e,f,g,h,i,j,k,l;a.j=$C(kE,Pwe,28,a.g,15,1);a.o=new bnb;FDb(EDb(new SDb(null,new Swb(a.e.b,16)),new APc),new CPc(a));a.a=$C(xdb,Hye,28,a.b,16,1);MDb(new SDb(null,new Swb(a.e.b,16)),new RPc(a));d=(l=new bnb,FDb(CDb(EDb(new SDb(null,new Swb(a.e.b,16)),new HPc),new JPc(a)),new LPc(a,l)),l);for(i=new Anb(d);i.a<i.c.c.length;){h=RD(ynb(i),515);if(h.c.length<=1){continue}if(h.c.length==2){UOc(h);BOc((tFb(0,h.c.length),RD(h.c[0],18)).d.i)||Rmb(a.o,h);continue}if(TOc(h)||SOc(h,new FPc)){continue}j=new Anb(h);e=null;while(j.a<j.c.c.length){b=RD(ynb(j),18);c=a.c[b.p];!e||j.a>=j.c.c.length?(k=hOc((r3b(),p3b),o3b)):(k=hOc((r3b(),o3b),o3b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function qkc(a){var b,c,d,e;FDb(CDb(new SDb(null,new Swb(a.a.b,16)),new Qkc),new Skc);okc(a);FDb(CDb(new SDb(null,new Swb(a.a.b,16)),new Ukc),new Wkc);if(a.c==(Ymd(),Wmd)){FDb(CDb(EDb(new SDb(null,new Swb(new Xkb(a.f),1)),new clc),new elc),new glc(a));FDb(CDb(GDb(EDb(EDb(new SDb(null,new Swb(a.d.b,16)),new klc),new mlc),new olc),new qlc),new slc(a))}e=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(d=new Anb(a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);e.a=$wnd.Math.min(e.a,c.d.c);e.b=$wnd.Math.min(e.b,c.d.d);b.a=$wnd.Math.max(b.a,c.d.c+c.d.b);b.b=$wnd.Math.max(b.b,c.d.d+c.d.a)}$id(hjd(a.d.c),fjd(new rjd(e.a,e.b)));$id(hjd(a.d.f),ojd(new rjd(b.a,b.b),e));pkc(a,e,b);akb(a.f);akb(a.b);akb(a.g);akb(a.e);a.a.a.c.length=0;a.a.b.c.length=0;a.a=null;a.d=null} +function JGb(a,b){var c;if(a.e){throw Adb(new dgb((lfb(lN),lye+lN.k+mye)))}if(!cGb(a.a,b)){throw Adb(new yz(nye+b+oye))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:GGb(a);break;case 1:OGb(a);GGb(a);break;case 4:UGb(a);GGb(a);break;case 3:UGb(a);OGb(a);GGb(a);}break;case 2:switch(b.g){case 1:OGb(a);PGb(a);break;case 4:UGb(a);GGb(a);break;case 3:UGb(a);OGb(a);GGb(a);}break;case 1:switch(b.g){case 2:OGb(a);PGb(a);break;case 4:OGb(a);UGb(a);GGb(a);break;case 3:OGb(a);UGb(a);OGb(a);GGb(a);}break;case 4:switch(b.g){case 2:UGb(a);GGb(a);break;case 1:UGb(a);OGb(a);GGb(a);break;case 3:OGb(a);PGb(a);}break;case 3:switch(b.g){case 2:OGb(a);UGb(a);GGb(a);break;case 1:OGb(a);UGb(a);OGb(a);GGb(a);break;case 4:OGb(a);PGb(a);}}return a} +function vYb(a,b){var c;if(a.d){throw Adb(new dgb((lfb(eQ),lye+eQ.k+mye)))}if(!eYb(a.a,b)){throw Adb(new yz(nye+b+oye))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:sYb(a);break;case 1:zYb(a);sYb(a);break;case 4:DYb(a);sYb(a);break;case 3:DYb(a);zYb(a);sYb(a);}break;case 2:switch(b.g){case 1:zYb(a);AYb(a);break;case 4:DYb(a);sYb(a);break;case 3:DYb(a);zYb(a);sYb(a);}break;case 1:switch(b.g){case 2:zYb(a);AYb(a);break;case 4:zYb(a);DYb(a);sYb(a);break;case 3:zYb(a);DYb(a);zYb(a);sYb(a);}break;case 4:switch(b.g){case 2:DYb(a);sYb(a);break;case 1:DYb(a);zYb(a);sYb(a);break;case 3:zYb(a);AYb(a);}break;case 3:switch(b.g){case 2:zYb(a);DYb(a);sYb(a);break;case 1:zYb(a);DYb(a);zYb(a);sYb(a);break;case 4:zYb(a);AYb(a);}}return a} +function Csd(a,b){var c,d,e,f,g,h,i,j;if(ZD(a.Eh(),167)){Csd(RD(a.Eh(),167),b);b.a+=' > '}else{b.a+='Root '}c=a.Dh().zb;lhb(c.substr(0,3),'Elk')?Zhb(b,(BFb(3,c.length+1),c.substr(3))):(b.a+=''+c,b);e=a.jh();if(e){Zhb((b.a+=' ',b),e);return}if(ZD(a,366)){j=RD(a,135).a;if(j){Zhb((b.a+=' ',b),j);return}}for(g=new dMd(a.kh());g.e!=g.i.gc();){f=RD(bMd(g),135);j=f.a;if(j){Zhb((b.a+=' ',b),j);return}}if(ZD(a,326)){d=RD(a,74);!d.b&&(d.b=new Yie(E4,d,4,7));if(d.b.i!=0&&(!d.c&&(d.c=new Yie(E4,d,5,8)),d.c.i!=0)){b.a+=' (';h=new mMd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b));while(h.e!=h.i.gc()){h.e>0&&(b.a+=pve,b);Csd(RD(bMd(h),167),b)}b.a+=SAe;i=new mMd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=pve,b);Csd(RD(bMd(i),167),b)}b.a+=')'}}} +function LTb(a,b,c){var d,e,f,g,h,i,j,k;for(i=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));i.e!=i.i.gc();){h=RD(bMd(i),27);for(e=new is(Mr(zGd(h).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);!d.b&&(d.b=new Yie(E4,d,4,7));if(!(d.b.i<=1&&(!d.c&&(d.c=new Yie(E4,d,5,8)),d.c.i<=1))){throw Adb(new Ked('Graph must not contain hyperedges.'))}if(!nzd(d)&&h!=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))){j=new cUb;kQb(j,d);pQb(j,(JVb(),HVb),d);_Tb(j,RD(Wd(qtb(c.f,h)),153));aUb(j,RD(Wjb(c,AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))),153));Rmb(b.c,j);for(g=new dMd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n));g.e!=g.i.gc();){f=RD(bMd(g),135);k=new iUb(j,f.a);kQb(k,f);pQb(k,HVb,f);k.e.a=$wnd.Math.max(f.g,1);k.e.b=$wnd.Math.max(f.f,1);hUb(k);Rmb(b.d,k)}}}}} +function Vec(a,b,c){var d,e,f,g,h,i,j,k,l,m;c.Ug('Node promotion heuristic',1);a.i=b;a.r=RD(mQb(b,(yCc(),ZAc)),243);a.r!=(aEc(),TDc)&&a.r!=UDc?Tec(a):Uec(a);k=RD(mQb(a.i,YAc),17).a;f=new nfc;switch(a.r.g){case 2:case 1:Yec(a,f);break;case 3:a.r=_Dc;Yec(a,f);i=0;for(h=new Anb(a.b);h.a<h.c.c.length;){g=RD(ynb(h),17);i=$wnd.Math.max(i,g.a)}if(i>a.k){a.r=VDc;Yec(a,f)}break;case 4:a.r=_Dc;Yec(a,f);j=0;for(e=new Anb(a.c);e.a<e.c.c.length;){d=UD(ynb(e));j=$wnd.Math.max(j,(uFb(d),d))}if(j>a.n){a.r=YDc;Yec(a,f)}break;case 6:m=eE($wnd.Math.ceil(a.g.length*k/100));Yec(a,new qfc(m));break;case 5:l=eE($wnd.Math.ceil(a.e*k/100));Yec(a,new tfc(l));break;case 8:Sec(a,true);break;case 9:Sec(a,false);break;default:Yec(a,f);}a.r!=TDc&&a.r!=UDc?Zec(a,b):$ec(a,b);c.Vg()} +function $rc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=a.b;k=new Jkb(l,0);Ikb(k,new R4b(a));s=false;g=1;while(k.b<k.d.gc()){j=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),30));p=(tFb(g,l.c.length),RD(l.c[g],30));q=bv(j.a);r=q.c.length;for(o=new Anb(q);o.a<o.c.c.length;){m=RD(ynb(o),10);g3b(m,p)}if(s){for(n=hv(q).Kc();n.Ob();){m=RD(n.Pb(),10);for(f=new Anb(bv(Z2b(m)));f.a<f.c.c.length;){e=RD(ynb(f),18);X0b(e,true);pQb(a,(Ywc(),awc),(Geb(),true));d=osc(a,e,r);c=RD(mQb(m,Wvc),313);t=RD(Vmb(d,d.c.length-1),18);c.k=t.c.i;c.n=t;c.b=e.d.i;c.c=e}}s=false}else{if(q.c.length!=0){b=(tFb(0,q.c.length),RD(q.c[0],10));if(b.k==(r3b(),l3b)){s=true;g=-1}}}++g}h=new Jkb(a.b,0);while(h.b<h.d.gc()){i=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30));i.a.c.length==0&&Ckb(h)}} +function FJb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=new CLb(a);_Mb(l,!(b==(Cmd(),Bmd)||b==xmd));k=l.a;m=new z3b;for(e=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),g=0,i=e.length;g<i;++g){c=e[g];j=oKb(k,WJb,c);!!j&&(m.d=$wnd.Math.max(m.d,j.jf()))}for(d=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),f=0,h=d.length;f<h;++f){c=d[f];j=oKb(k,YJb,c);!!j&&(m.a=$wnd.Math.max(m.a,j.jf()))}for(p=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),r=0,t=p.length;r<t;++r){n=p[r];j=oKb(k,n,WJb);!!j&&(m.b=$wnd.Math.max(m.b,j.kf()))}for(o=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),q=0,s=o.length;q<s;++q){n=o[q];j=oKb(k,n,YJb);!!j&&(m.c=$wnd.Math.max(m.c,j.kf()))}if(m.d>0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} +function u9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new rjd(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new Anb(a.a);j.a<j.c.c.length;){h=RD(ynb(j),10);if(h.k!=(r3b(),m3b)){continue}d=RD(mQb(h,(Ywc(),hwc)),64);e=RD(mQb(h,iwc),8);k=h.n;switch(d.g){case 2:k.a=c.f.a+m.c-l.a;break;case 4:k.a=-l.a-m.b;}o=0;switch(d.g){case 2:case 4:if(b==(Bod(),xod)){n=Kfb(UD(mQb(h,Jwc)));k.b=f.b*n-RD(mQb(h,(yCc(),zBc)),8).b;o=k.b+e.b;U2b(h,false,true)}else if(b==wod){k.b=Kfb(UD(mQb(h,Jwc)))-RD(mQb(h,(yCc(),zBc)),8).b;o=k.b+e.b;U2b(h,false,true)}}g=$wnd.Math.max(g,o)}c.f.b+=g-f.b;for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(h.k!=(r3b(),m3b)){continue}d=RD(mQb(h,(Ywc(),hwc)),64);k=h.n;switch(d.g){case 1:k.b=-l.b-m.d;break;case 3:k.b=c.f.b+m.a-l.b;}}} +function nNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;k=RD(RD(Qc(a.r,b),21),87);if(k.gc()<=2||b==(qpd(),Xod)||b==(qpd(),ppd)){rNb(a,b);return}p=a.u.Hc((Pod(),Ood));c=b==(qpd(),Yod)?(mOb(),lOb):(mOb(),iOb);r=b==Yod?(vLb(),sLb):(vLb(),uLb);d=WNb(_Nb(c),a.s);q=b==Yod?oxe:pxe;for(j=k.Kc();j.Ob();){h=RD(j.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}o=h.b.Mf();n=h.e;l=h.c;m=l.i;m.b=(f=l.n,l.e.a+f.b+f.c);m.a=(g=l.n,l.e.b+g.d+g.a);if(p){m.c=n.a-(e=l.n,l.e.a+e.b+e.c)-a.s;p=false}else{m.c=n.a+o.a+a.s}Ivb(r,Pye);l.f=r;RKb(l,(EKb(),DKb));Rmb(d.d,new sOb(m,UNb(d,m)));q=b==Yod?$wnd.Math.min(q,n.b):$wnd.Math.max(q,n.b+h.b.Mf().b)}q+=b==Yod?-a.t:a.t;VNb((d.e=q,d));for(i=k.Kc();i.Ob();){h=RD(i.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}m=h.c.i;m.c-=h.e.a;m.d-=h.e.b}} +function D0b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;e=new bnb;for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);n=o.e;if(n){d=D0b(a,n,o);Tmb(e,d);A0b(a,n,o);if(RD(mQb(n,(Ywc(),kwc)),21).Hc((ovc(),hvc))){s=RD(mQb(o,(yCc(),BBc)),101);m=RD(mQb(o,EBc),181).Hc((Pod(),Lod));for(r=new Anb(o.j);r.a<r.c.c.length;){q=RD(ynb(r),12);f=RD(Wjb(a.b,q),10);if(!f){f=f2b(q,s,q.j,-(q.e.c.length-q.g.c.length),null,new pjd,q.o,RD(mQb(n,rAc),88),n);pQb(f,Awc,q);Zjb(a.b,q,f);Rmb(n.a,f)}g=RD(Vmb(f.j,0),12);for(k=new Anb(q.f);k.a<k.c.c.length;){j=RD(ynb(k),72);h=new x2b;h.o.a=j.o.a;h.o.b=j.o.b;Rmb(g.f,h);if(!m){t=q.j;l=0;Rod(RD(mQb(o,EBc),21))&&(l=qsd(j.n,j.o,q.o,0,t));s==(Bod(),zod)||(qpd(),apd).Hc(t)?(h.o.a=l):(h.o.b=l)}}}}}}i=new bnb;z0b(a,b,c,e,i);!!c&&B0b(a,b,c,i);return i} +function NIc(a,b,c){var d,e,f,g,h,i,j,k,l;if(a.c[b.c.p][b.p].e){return}else{a.c[b.c.p][b.p].e=true}a.c[b.c.p][b.p].b=0;a.c[b.c.p][b.p].d=0;a.c[b.c.p][b.p].a=null;for(k=new Anb(b.j);k.a<k.c.c.length;){j=RD(ynb(k),12);l=c?new T3b(j):new _3b(j);for(i=l.Kc();i.Ob();){h=RD(i.Pb(),12);g=h.i;if(g.c==b.c){if(g!=b){NIc(a,g,c);a.c[b.c.p][b.p].b+=a.c[g.c.p][g.p].b;a.c[b.c.p][b.p].d+=a.c[g.c.p][g.p].d}}else{a.c[b.c.p][b.p].d+=a.g[h.p];++a.c[b.c.p][b.p].b}}}f=RD(mQb(b,(Ywc(),Uvc)),15);if(f){for(e=f.Kc();e.Ob();){d=RD(e.Pb(),10);if(b.c==d.c){NIc(a,d,c);a.c[b.c.p][b.p].b+=a.c[d.c.p][d.p].b;a.c[b.c.p][b.p].d+=a.c[d.c.p][d.p].d}}}if(a.c[b.c.p][b.p].b>0){a.c[b.c.p][b.p].d+=Kwb(a.i,24)*Nxe*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} +function D8b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new Anb(a);o.a<o.c.c.length;){n=RD(ynb(o),10);E8b(n.n);E8b(n.o);F8b(n.f);I8b(n);K8b(n);for(q=new Anb(n.j);q.a<q.c.c.length;){p=RD(ynb(q),12);E8b(p.n);E8b(p.a);E8b(p.o);Q3b(p,J8b(p.j));f=RD(mQb(p,(yCc(),CBc)),17);!!f&&pQb(p,CBc,sgb(-f.a));for(e=new Anb(p.g);e.a<e.c.c.length;){d=RD(ynb(e),18);for(c=Sub(d.a,0);c.b!=c.d.c;){b=RD(evb(c),8);E8b(b)}i=RD(mQb(d,RAc),75);if(i){for(h=Sub(i,0);h.b!=h.d.c;){g=RD(evb(h),8);E8b(g)}}for(l=new Anb(d.b);l.a<l.c.c.length;){j=RD(ynb(l),72);E8b(j.n);E8b(j.o)}}for(m=new Anb(p.f);m.a<m.c.c.length;){j=RD(ynb(m),72);E8b(j.n);E8b(j.o)}}if(n.k==(r3b(),m3b)){pQb(n,(Ywc(),hwc),J8b(RD(mQb(n,hwc),64)));H8b(n)}for(k=new Anb(n.b);k.a<k.c.c.length;){j=RD(ynb(k),72);I8b(j);E8b(j.o);E8b(j.n)}}} +function iEd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=Wjb(a.e,d);if(D==null){D=new uC;n=RD(D,190);s=b+'_s';t=s+e;m=new OC(t);sC(n,uIe,m)}C=RD(D,190);oDd(c,C);G=new uC;qDd(G,'x',d.j);qDd(G,'y',d.k);sC(C,xIe,G);A=new uC;qDd(A,'x',d.b);qDd(A,'y',d.c);sC(C,'endPoint',A);l=cve((!d.a&&(d.a=new XZd(D4,d,5)),d.a));o=!l;if(o){w=new MB;f=new qFd(w);xgb((!d.a&&(d.a=new XZd(D4,d,5)),d.a),f);sC(C,nIe,w)}i=Dzd(d);u=!!i;u&&rDd(a.a,C,pIe,KDd(a,Dzd(d)));r=Ezd(d);v=!!r;v&&rDd(a.a,C,oIe,KDd(a,Ezd(d)));j=(!d.e&&(d.e=new Yie(F4,d,10,9)),d.e).i==0;p=!j;if(p){B=new MB;g=new sFd(a,B);xgb((!d.e&&(d.e=new Yie(F4,d,10,9)),d.e),g);sC(C,rIe,B)}k=(!d.g&&(d.g=new Yie(F4,d,9,10)),d.g).i==0;q=!k;if(q){F=new MB;h=new uFd(a,F);xgb((!d.g&&(d.g=new Yie(F4,d,9,10)),d.g),h);sC(C,qIe,F)}} +function XMb(a){RMb();var b,c,d,e,f,g,h;d=a.f.n;for(g=ki(a.r).a.nc();g.Ob();){f=RD(g.Pb(),117);e=0;if(f.b.pf((umd(),Gld))){e=Kfb(UD(f.b.of(Gld)));if(e<0){switch(f.b.ag().g){case 1:d.d=$wnd.Math.max(d.d,-e);break;case 3:d.a=$wnd.Math.max(d.a,-e);break;case 2:d.c=$wnd.Math.max(d.c,-e);break;case 4:d.b=$wnd.Math.max(d.b,-e);}}}if(Rod(a.u)){b=rsd(f.b,e);h=!RD(a.e.of(pld),181).Hc((dqd(),Wpd));c=false;switch(f.b.ag().g){case 1:c=b>d.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} +function pA(a,b){var c,d,e,f,g,h,i,j,k;j='';if(b.length==0){return a.ne(ywe,wwe,-1,-1)}k=Dhb(b);lhb(k.substr(0,3),'at ')&&(k=(BFb(3,k.length+1),k.substr(3)));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=Dhb((BFb(g+1,k.length+1),k.substr(g+1)));k=Dhb((AFb(0,g,k.length),k.substr(0,g)))}}else{c=k.indexOf(')',g);j=(AFb(g+1,c,k.length),k.substr(g+1,c-(g+1)));k=Dhb((AFb(0,g,k.length),k.substr(0,g)))}g=qhb(k,Fhb(46));g!=-1&&(k=(BFb(g+1,k.length+1),k.substr(g+1)));(k.length==0||lhb(k,'Anonymous function'))&&(k=wwe);h=thb(j,Fhb(58));e=uhb(j,Fhb(58),h-1);i=-1;d=-1;f=ywe;if(h!=-1&&e!=-1){f=(AFb(0,e,j.length),j.substr(0,e));i=jA((AFb(e+1,h,j.length),j.substr(e+1,h-(e+1))));d=jA((BFb(h+1,j.length+1),j.substr(h+1)))}return a.ne(f,k,i,d)} +function C6b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new Anb(a);j.a<j.c.c.length;){i=RD(ynb(j),10);g=RD(mQb(i,(yCc(),UAc)),171);f=null;switch(g.g){case 1:case 2:f=(huc(),guc);break;case 3:case 4:f=(huc(),euc);}if(f){pQb(i,(Ywc(),bwc),(huc(),guc));f==euc?F6b(i,g,(BEc(),yEc)):f==guc&&F6b(i,g,(BEc(),zEc))}else{if(Dod(RD(mQb(i,BBc),101))&&i.j.c.length!=0){b=true;for(l=new Anb(i.j);l.a<l.c.c.length;){k=RD(ynb(l),12);if(!(k.j==(qpd(),Xod)&&k.e.c.length-k.g.c.length>0||k.j==ppd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new Anb(k.g);e.a<e.c.c.length;){c=RD(ynb(e),18);h=RD(mQb(c.d.i,UAc),171);if(h==(cxc(),_wc)||h==axc){b=false;break}}for(d=new Anb(k.e);d.a<d.c.c.length;){c=RD(ynb(d),18);h=RD(mQb(c.c.i,UAc),171);if(h==(cxc(),Zwc)||h==$wc){b=false;break}}}b&&F6b(i,g,(BEc(),AEc))}}}} +function LNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;w=0;n=0;for(l=new Anb(b.e);l.a<l.c.c.length;){k=RD(ynb(l),10);m=0;h=0;i=c?RD(mQb(k,HNc),17).a:qwe;r=d?RD(mQb(k,INc),17).a:qwe;j=$wnd.Math.max(i,r);for(t=new Anb(k.j);t.a<t.c.c.length;){s=RD(ynb(t),12);u=k.n.b+s.n.b+s.a.b;if(d){for(g=new Anb(s.g);g.a<g.c.c.length;){f=RD(ynb(g),18);p=f.d;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(RD(mQb(o,HNc),17).a,RD(mQb(o,INc),17).a);v=RD(mQb(f,(yCc(),MBc)),17).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new Anb(s.e);g.a<g.c.c.length;){f=RD(ynb(g),18);p=f.c;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(RD(mQb(o,HNc),17).a,RD(mQb(o,INc),17).a);v=RD(mQb(f,(yCc(),MBc)),17).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} +function hTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;f=a.f.b;m=f.a;k=f.b;o=a.e.g;n=a.e.f;zyd(a.e,f.a,f.b);w=m/o;A=k/n;for(j=new dMd(iyd(a.e));j.e!=j.i.gc();){i=RD(bMd(j),135);Dyd(i,i.i*w);Eyd(i,i.j*A)}for(s=new dMd(wCd(a.e));s.e!=s.i.gc();){r=RD(bMd(s),123);u=r.i;v=r.j;u>0&&Dyd(r,u*w);v>0&&Eyd(r,v*A)}Bvb(a.b,new tTb);b=new bnb;for(h=new vkb((new mkb(a.c)).a);h.b;){g=tkb(h);d=RD(g.ld(),74);c=RD(g.md(),407).a;e=IGd(d,false,false);l=fTb(JGd(d),ssd(e),c);lsd(l,e);t=KGd(d);if(!!t&&Wmb(b,t,0)==-1){ZEb(b.c,t);gTb(t,(sFb(l.b!=0),RD(l.a.a.c,8)),c)}}for(q=new vkb((new mkb(a.d)).a);q.b;){p=tkb(q);d=RD(p.ld(),74);c=RD(p.md(),407).a;e=IGd(d,false,false);l=fTb(LGd(d),Ijd(ssd(e)),c);l=Ijd(l);lsd(l,e);t=MGd(d);if(!!t&&Wmb(b,t,0)==-1){ZEb(b.c,t);gTb(t,(sFb(l.b!=0),RD(l.c.b.c,8)),c)}}} +function GJb(a,b,c,d){var e,f,g,h,i;h=new CLb(b);iNb(h,d);e=true;if(!!a&&a.pf((umd(),Nkd))){f=RD(a.of((umd(),Nkd)),88);e=f==(Cmd(),Amd)||f==ymd||f==zmd}$Mb(h,false);Umb(h.e.Rf(),new dNb(h,false,e));EMb(h,h.f,(ZJb(),WJb),(qpd(),Yod));EMb(h,h.f,YJb,npd);EMb(h,h.g,WJb,ppd);EMb(h,h.g,YJb,Xod);GMb(h,Yod);GMb(h,npd);FMb(h,Xod);FMb(h,ppd);RMb();g=h.A.Hc((Qpd(),Mpd))&&h.B.Hc((dqd(),$pd))?SMb(h):null;!!g&&uKb(h.a,g);XMb(h);xMb(h);GNb(h);sMb(h);gNb(h);yNb(h);oNb(h,Yod);oNb(h,npd);tMb(h);fNb(h);if(!c){return h.o}VMb(h);CNb(h);oNb(h,Xod);oNb(h,ppd);i=h.B.Hc((dqd(),_pd));IMb(h,i,Yod);IMb(h,i,npd);JMb(h,i,Xod);JMb(h,i,ppd);FDb(new SDb(null,new Swb(new glb(h.i),0)),new KMb);FDb(CDb(new SDb(null,ki(h.r).a.oc()),new MMb),new OMb);WMb(h);h.e.Pf(h.o);FDb(new SDb(null,ki(h.r).a.oc()),new YMb);return h.o} +function LYb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oxe;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),86);j=$wnd.Math.min(j,b.d.f.g.c+b.e.a)}n=new Yub;for(g=new Anb(a.a.a);g.a<g.c.c.length;){f=RD(ynb(g),194);f.i=j;f.e==0&&(Pub(n,f,n.c.b,n.c),true)}while(n.b!=0){f=RD(n.b==0?null:(sFb(n.b!=0),Wub(n,n.a.a)),194);e=f.f.g.c;for(m=f.a.a.ec().Kc();m.Ob();){k=RD(m.Pb(),86);p=f.i+k.e.a;k.d.g||k.g.c<p?(k.o=p):(k.o=k.g.c)}e-=f.f.o;f.b+=e;a.c==(Cmd(),zmd)||a.c==xmd?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=RD(l.Pb(),86);for(i=k.f.Kc();i.Ob();){h=RD(i.Pb(),86);Dmd(a.c)?(o=a.f.yf(k,h)):(o=a.f.zf(k,h));h.d.i=$wnd.Math.max(h.d.i,k.o+k.g.b+o-h.e.a);h.k||(h.d.i=$wnd.Math.max(h.d.i,h.g.c-h.e.a));--h.d.e;h.d.e==0&&Mub(n,h.d)}}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.g.c=b.o}} +function vOb(a){var b,c,d,e,f,g,h,i;h=a.b;b=a.a;switch(RD(mQb(a,(YHb(),UHb)),435).g){case 0:_mb(h,new Frb(new UOb));break;case 1:default:_mb(h,new Frb(new ZOb));}switch(RD(mQb(a,SHb),436).g){case 1:_mb(h,new POb);_mb(h,new cPb);_mb(h,new xOb);break;case 0:default:_mb(h,new POb);_mb(h,new IOb);}switch(RD(mQb(a,WHb),257).g){case 0:i=new wPb;break;case 1:i=new qPb;break;case 2:i=new tPb;break;case 3:i=new nPb;break;case 5:i=new APb(new tPb);break;case 4:i=new APb(new qPb);break;case 7:i=new kPb(new APb(new qPb),new APb(new tPb));break;case 8:i=new kPb(new APb(new nPb),new APb(new tPb));break;case 6:default:i=new APb(new nPb);}for(g=new Anb(h);g.a<g.c.c.length;){f=RD(ynb(g),176);d=0;e=0;c=new Ptd(sgb(d),sgb(e));while(ZPb(b,f,d,e)){c=RD(i.Ve(c,f),42);d=RD(c.a,17).a;e=RD(c.b,17).a}WPb(b,f,d,e)}} +function T_c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;c.Ug(_Ee,1);m=(q$c(),XZc);a.a==(s_c(),p_c)&&(m=VZc);k=0;yob();b.jd(new uGd(m));f=b.gc();h=b.fd(b.gc());j=true;while(j&&h.Sb()){s=RD(h.Ub(),39);RD(mQb(s,m),17).a==0?--f:(j=false)}w=b.kd(0,f);g=new Zub(w);w=b.kd(f,b.gc());i=new Zub(w);if(g.b==0){for(p=Sub(i,0);p.b!=p.d.c;){o=RD(evb(p),39);pQb(o,i$c,sgb(k++))}}else{l=g.b;for(v=Sub(g,0);v.b!=v.d.c;){u=RD(evb(v),39);pQb(u,i$c,sgb(k++));d=$Wc(u);T_c(a,d,c.eh(1/l|0));tvb(d,Fob(new uGd(i$c)));n=new Yub;for(t=Sub(d,0);t.b!=t.d.c;){s=RD(evb(t),39);for(r=Sub(u.d,0);r.b!=r.d.c;){q=RD(evb(r),65);q.c==s&&(Pub(n,q,n.c.b,n.c),true)}}Xub(u.d);ye(u.d,n);h=Sub(i,i.b);e=u.d.b;j=true;while(0<e&&j&&h.Sb()){s=RD(h.Ub(),39);if(RD(mQb(s,m),17).a==0){pQb(s,i$c,sgb(k++));--e;h.Qb()}else{j=false}}}}c.Vg()} +function S3c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;l=Kfb(UD(Gxd(a,($4c(),W4c))));if(Heb(TD(Gxd(a,U4c)))){k=RD(Gxd(a,(u2c(),t2c)),27);f=RD(QHd(mzd(RD(QHd((!k.e&&(k.e=new Yie(G4,k,7,4)),k.e),(!k.e&&(k.e=new Yie(G4,k,7,4)),k.e).i-1),74)),0),27);d=RD(QHd(mzd(RD(QHd((!k.e&&(k.e=new Yie(G4,k,7,4)),k.e),0),74)),0),27);g=new rjd(f.i+f.g/2,f.j+f.f/2);e=new rjd(d.i+d.g/2,d.j+d.f/2);c=l;c<=0&&(c+=dFe);m=$wnd.Math.acos((g.a*e.a+g.b*e.b)/($wnd.Math.sqrt(g.a*g.a+g.b*g.b)*$wnd.Math.sqrt(e.a*e.a+e.b*e.b)));m<=0&&(m+=dFe);b=$wnd.Math.atan2(g.b,g.a);b<=0&&(b+=dFe);l=FEe-(b-c+m/2)}for(i=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));i.e!=i.i.gc();){h=RD(bMd(i),27);j=new rjd(h.i+h.g/2,h.j+h.f/2);n=j.a*$wnd.Math.cos(l)-j.b*$wnd.Math.sin(l);j.b=j.a*$wnd.Math.sin(l)+j.b*$wnd.Math.cos(l);j.a=n;Byd(h,j.a-h.g/2,j.b-h.f/2)}} +function qcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;b.Ug('Inverted port preprocessing',1);k=a.b;j=new Jkb(k,0);c=null;t=new bnb;while(j.b<j.d.gc()){s=c;c=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),30));for(n=new Anb(t);n.a<n.c.c.length;){l=RD(ynb(n),10);g3b(l,s)}t.c.length=0;for(o=new Anb(c.a);o.a<o.c.c.length;){l=RD(ynb(o),10);if(l.k!=(r3b(),p3b)){continue}if(!Dod(RD(mQb(l,(yCc(),BBc)),101))){continue}for(r=d3b(l,(BEc(),yEc),(qpd(),Xod)).Kc();r.Ob();){p=RD(r.Pb(),12);i=p.e;h=RD(anb(i,$C(WQ,VAe,18,i.c.length,0,1)),482);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];occ(a,p,d,t)}}for(q=d3b(l,zEc,ppd).Kc();q.Ob();){p=RD(q.Pb(),12);i=p.g;h=RD(anb(i,$C(WQ,VAe,18,i.c.length,0,1)),482);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];pcc(a,p,d,t)}}}}for(m=new Anb(t);m.a<m.c.c.length;){l=RD(ynb(m),10);g3b(l,c)}b.Vg()} +function NUc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;m=null;d==(dVc(),bVc)?(m=b):d==cVc&&(m=c);for(p=m.a.ec().Kc();p.Ob();){o=RD(p.Pb(),12);q=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).b;t=new _sb;h=new _sb;for(j=new l4b(o.b);xnb(j.a)||xnb(j.b);){i=RD(xnb(j.a)?ynb(j.a):ynb(j.b),18);if(Heb(TD(mQb(i,(Ywc(),Nwc))))!=e){continue}if(Wmb(f,i,0)!=-1){i.d==o?(r=i.c):(r=i.d);s=xjd(cD(WC(l3,1),Nve,8,0,[r.i.n,r.n,r.a])).b;if($wnd.Math.abs(s-q)<0.2){continue}s<q?b.a._b(r)?Ysb(t,new Ptd(bVc,i)):Ysb(t,new Ptd(cVc,i)):b.a._b(r)?Ysb(h,new Ptd(bVc,i)):Ysb(h,new Ptd(cVc,i))}}if(t.a.gc()>1){n=new xVc(o,t,d);xgb(t,new nVc(a,n));ZEb(g.c,n);for(l=t.a.ec().Kc();l.Ob();){k=RD(l.Pb(),42);Ymb(f,k.b)}}if(h.a.gc()>1){n=new xVc(o,h,d);xgb(h,new pVc(a,n));ZEb(g.c,n);for(l=h.a.ec().Kc();l.Ob();){k=RD(l.Pb(),42);Ymb(f,k.b)}}}} +function p6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.n;q=a.o;m=a.d;l=Kfb(UD(hFc(a,(yCc(),QBc))));if(b){k=l*(b.gc()-1);n=0;for(i=b.Kc();i.Ob();){g=RD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b-m.d+n;d=q.a/(b.gc()+1);e=d;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),10);g.n.a=r;g.n.b=f-g.o.b;r+=g.o.a+l;j=n6b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=g.o.b;o=RD(mQb(g,(Ywc(),Xvc)),12);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=0;P3b(o,a)}e+=d}}if(c){k=l*(c.gc()-1);n=0;for(i=c.Kc();i.Ob();){g=RD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b+q.b+m.a-n;d=q.a/(c.gc()+1);e=d;for(h=c.Kc();h.Ob();){g=RD(h.Pb(),10);g.n.a=r;g.n.b=f;r+=g.o.a+l;j=n6b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=0;o=RD(mQb(g,(Ywc(),Xvc)),12);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=q.b;P3b(o,a)}e+=d}}} +function Hac(a,b){var c,d,e,f,g,h;if(!RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc))){return}for(h=new Anb(b.a);h.a<h.c.c.length;){f=RD(ynb(h),10);if(f.k==(r3b(),p3b)){e=RD(mQb(f,(yCc(),_Ac)),140);a.c=$wnd.Math.min(a.c,f.n.a-e.b);a.a=$wnd.Math.max(a.a,f.n.a+f.o.a+e.c);a.d=$wnd.Math.min(a.d,f.n.b-e.d);a.b=$wnd.Math.max(a.b,f.n.b+f.o.b+e.a)}}for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k!=(r3b(),p3b)){switch(f.k.g){case 2:d=RD(mQb(f,(yCc(),UAc)),171);if(d==(cxc(),$wc)){f.n.a=a.c-10;Gac(f,new Oac).Jb(new Rac(f));break}if(d==axc){f.n.a=a.a+10;Gac(f,new Uac).Jb(new Xac(f));break}c=RD(mQb(f,owc),311);if(c==(Gvc(),Fvc)){Fac(f).Jb(new $ac(f));f.n.b=a.d-10;break}if(c==Dvc){Fac(f).Jb(new bbc(f));f.n.b=a.b+10;break}break;default:throw Adb(new agb('The node type '+f.k+' is not supported by the '+XS));}}}} +function g5b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=new rjd(d.i+d.g/2,d.j+d.f/2);n=W4b(d);o=RD(Gxd(b,(yCc(),BBc)),101);q=RD(Gxd(d,GBc),64);if(!HPd(Fxd(d),ABc)){d.i==0&&d.j==0?(p=0):(p=nsd(d,q));Ixd(d,ABc,p)}j=new rjd(b.g,b.f);e=f2b(d,o,q,n,j,i,new rjd(d.g,d.f),RD(mQb(c,rAc),88),c);pQb(e,(Ywc(),Awc),d);f=RD(Vmb(e.j,0),12);O3b(f,e5b(d));pQb(e,EBc,(Pod(),xsb(Nod)));l=RD(Gxd(b,EBc),181).Hc(Lod);for(h=new dMd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n));h.e!=h.i.gc();){g=RD(bMd(h),135);if(!Heb(TD(Gxd(g,pBc)))&&!!g.a){m=h5b(g);Rmb(f.f,m);if(!l){k=0;Rod(RD(Gxd(b,EBc),21))&&(k=qsd(new rjd(g.i,g.j),new rjd(g.g,g.f),new rjd(d.g,d.f),0,q));switch(q.g){case 2:case 4:m.o.a=k;break;case 1:case 3:m.o.b=k;}}}}pQb(e,_Bc,UD(Gxd(vCd(b),_Bc)));pQb(e,aCc,UD(Gxd(vCd(b),aCc)));pQb(e,ZBc,UD(Gxd(vCd(b),ZBc)));Rmb(c.a,e);Zjb(a.a,d,e)} +function j5b(a,b,c,d,e,f){var g,h,i,j,k,l;j=new R3b;kQb(j,b);Q3b(j,RD(Gxd(b,(yCc(),GBc)),64));pQb(j,(Ywc(),Awc),b);P3b(j,c);l=j.o;l.a=b.g;l.b=b.f;k=j.n;k.a=b.i;k.b=b.j;Zjb(a.a,b,j);g=yDb(GDb(EDb(new SDb(null,(!b.e&&(b.e=new Yie(G4,b,7,4)),new Swb(b.e,16))),new w5b),new o5b),new y5b(b));g||(g=yDb(GDb(EDb(new SDb(null,(!b.d&&(b.d=new Yie(G4,b,8,5)),new Swb(b.d,16))),new A5b),new q5b),new C5b(b)));g||(g=yDb(new SDb(null,(!b.e&&(b.e=new Yie(G4,b,7,4)),new Swb(b.e,16))),new E5b));pQb(j,nwc,(Geb(),g?true:false));m2b(j,f,e,RD(Gxd(b,zBc),8));for(i=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));i.e!=i.i.gc();){h=RD(bMd(i),135);!Heb(TD(Gxd(h,pBc)))&&!!h.a&&Rmb(j.f,h5b(h))}switch(e.g){case 2:case 1:(j.j==(qpd(),Yod)||j.j==npd)&&d.Fc((ovc(),lvc));break;case 4:case 3:(j.j==(qpd(),Xod)||j.j==ppd)&&d.Fc((ovc(),lvc));}return j} +function dud(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));s.e!=s.i.gc();){q=RD(bMd(s),27);m+=Kr(new is(Mr(zGd(q).a.Kc(),new ir)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));r.e!=r.i.gc();){q=RD(bMd(r),27);C=e.b+(Kwb(b,26)*Kxe+Kwb(b,27)*Lxe)*(i-q.g);D=e.b+(Kwb(b,26)*Kxe+Kwb(b,27)*Lxe)*(h-q.f);Dyd(q,C);Eyd(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));v.e!=v.i.gc();){u=RD(bMd(v),27);for(k=new is(Mr(zGd(u).a.Kc(),new ir));gs(k);){j=RD(hs(k),74);nzd(j)||cud(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Esd(a,A,w,false,true)} +function CLb(a){var b;this.r=Ty(new FLb,new JLb);this.b=new Zrb(RD(Qb(E3),296));this.p=new Zrb(RD(Qb(E3),296));this.i=new Zrb(RD(Qb(XN),296));this.e=a;this.o=new sjd(a.Mf());this.D=a.Yf()||Heb(TD(a.of((umd(),$kd))));this.A=RD(a.of((umd(),kld)),21);this.B=RD(a.of(pld),21);this.q=RD(a.of(Hld),101);this.u=RD(a.of(Lld),21);if(!Sod(this.u)){throw Adb(new Jed('Invalid port label placement: '+this.u))}this.v=Heb(TD(a.of(Nld)));this.j=RD(a.of(ild),21);if(!fod(this.j)){throw Adb(new Jed('Invalid node label placement: '+this.j))}this.n=RD(ftd(a,gld),107);this.k=Kfb(UD(ftd(a,cmd)));this.d=Kfb(UD(ftd(a,bmd)));this.w=Kfb(UD(ftd(a,jmd)));this.s=Kfb(UD(ftd(a,dmd)));this.t=Kfb(UD(ftd(a,emd)));this.C=RD(ftd(a,hmd),140);this.c=2*this.d;b=!this.B.Hc((dqd(),Wpd));this.f=new dLb(0,b,0);this.g=new dLb(1,b,0);cLb(this.f,(ZJb(),XJb),this.g)} +function s6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;b.Ug('Comment pre-processing',1);c=0;i=new Anb(a.a);while(i.a<i.c.c.length){h=RD(ynb(i),10);if(Heb(TD(mQb(h,(yCc(),Uzc))))){++c;e=0;d=null;j=null;for(o=new Anb(h.j);o.a<o.c.c.length;){m=RD(ynb(o),12);e+=m.e.c.length+m.g.c.length;if(m.e.c.length==1){d=RD(Vmb(m.e,0),18);j=d.c}if(m.g.c.length==1){d=RD(Vmb(m.g,0),18);j=d.d}}if(e==1&&j.e.c.length+j.g.c.length==1&&!Heb(TD(mQb(j.i,Uzc)))){t6b(h,d,j,j.i);znb(i)}else{r=new bnb;for(n=new Anb(h.j);n.a<n.c.c.length;){m=RD(ynb(n),12);for(l=new Anb(m.g);l.a<l.c.c.length;){k=RD(ynb(l),18);k.d.g.c.length==0||(ZEb(r.c,k),true)}for(g=new Anb(m.e);g.a<g.c.c.length;){f=RD(ynb(g),18);f.c.e.c.length==0||(ZEb(r.c,f),true)}}for(q=new Anb(r);q.a<q.c.c.length;){p=RD(ynb(q),18);X0b(p,true)}}}}b._g()&&b.bh('Found '+c+' comment boxes');b.Vg()} +function wke(a,b){uke();var c,d,e,f,g,h,i;this.a=new zke(this);this.b=a;this.c=b;this.f=Cfe(Qee((lke(),jke),b));if(this.f.dc()){if((h=Tee(jke,a))==b){this.e=true;this.d=new bnb;this.f=new OSd;this.f.Fc(dLe);RD(tfe(Pee(jke,BXd(a)),''),29)==a&&this.f.Fc(Uee(jke,BXd(a)));for(e=Gee(jke,a).Kc();e.Ob();){d=RD(e.Pb(),179);switch(yfe(Qee(jke,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(Cfe(Qee(jke,d)));break}}}}else{nke();if(RD(b,69).xk()){this.e=true;this.f=null;this.d=new bnb;for(g=0,i=(a.i==null&&rYd(a),a.i).length;g<i;++g){d=(c=(a.i==null&&rYd(a),a.i),g>=0&&g<c.length?c[g]:null);for(f=zfe(Qee(jke,d));f;f=zfe(Qee(jke,f))){f==b&&this.d.Fc(d)}}}else if(yfe(Qee(jke,b))==1&&!!h){this.f=null;this.d=(Lle(),Kle)}else{this.f=null;this.e=true;this.d=(yob(),new mpb(b))}}}else{this.e=yfe(Qee(jke,b))==5;this.f.Fb(tke)&&(this.f=tke)}} +function qNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;c=0;d=pNb(a,b);m=a.s;n=a.t;for(j=RD(RD(Qc(a.r,b),21),87).Kc();j.Ob();){i=RD(j.Pb(),117);if(!i.c||i.c.d.c.length<=0){continue}o=i.b.Mf();h=i.b.pf((umd(),Gld))?Kfb(UD(i.b.of(Gld))):0;k=i.c;l=k.i;l.b=(g=k.n,k.e.a+g.b+g.c);l.a=(f=k.n,k.e.b+f.d+f.a);switch(b.g){case 1:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=o.b+h+d;RKb(k,(EKb(),BKb));SKb(k,(vLb(),uLb));break;case 3:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=-h-d-l.a;RKb(k,(EKb(),BKb));SKb(k,(vLb(),sLb));break;case 2:l.c=-h-d-l.b;if(i.a){e=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}RKb(k,(EKb(),DKb));SKb(k,(vLb(),tLb));break;case 4:l.c=o.a+h+d;if(i.a){e=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}RKb(k,(EKb(),CKb));SKb(k,(vLb(),tLb));}(b==(qpd(),Yod)||b==npd)&&(c=$wnd.Math.max(c,l.a))}c>0&&(RD(Vrb(a.b,b),127).a.b=c)} +function wcc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;m=Kfb(UD(mQb(a,(yCc(),_Bc))));n=Kfb(UD(mQb(a,aCc)));l=Kfb(UD(mQb(a,ZBc)));h=a.o;f=RD(Vmb(a.j,0),12);g=f.n;p=ucc(f,l);if(!p){return}if(b.Hc((Pod(),Lod))){switch(RD(mQb(a,(Ywc(),hwc)),64).g){case 1:p.c=(h.a-p.b)/2-g.a;p.d=n;break;case 3:p.c=(h.a-p.b)/2-g.a;p.d=-n-p.a;break;case 2:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=-m-p.b;break;case 4:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=m;}}else if(b.Hc(Nod)){switch(RD(mQb(a,(Ywc(),hwc)),64).g){case 1:case 3:p.c=g.a+m;break;case 2:case 4:if(c&&!f.c){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=g.b+n}}}e=p.d;for(j=new Anb(f.f);j.a<j.c.c.length;){i=RD(ynb(j),72);o=i.n;o.a=p.c;o.b=e;e+=i.o.b+l}} +function w9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new bnb;for(o=new Anb(a.b);o.a<o.c.c.length;){n=RD(ynb(o),30);for(r=new Anb(n.a);r.a<r.c.c.length;){p=RD(ynb(r),10);if(p.k!=(r3b(),m3b)){continue}if(!nQb(p,(Ywc(),gwc))){continue}s=null;u=null;t=null;for(C=new Anb(p.j);C.a<C.c.c.length;){B=RD(ynb(C),12);switch(B.j.g){case 4:s=B;break;case 2:u=B;break;default:t=B;}}v=RD(Vmb(t.g,0),18);k=new Fjd(v.a);j=new sjd(t.n);$id(j,p.n);l=Sub(k,0);cvb(l,j);A=Ijd(v.a);m=new sjd(t.n);$id(m,p.n);Pub(A,m,A.c.b,A.c);D=RD(mQb(p,gwc),10);F=RD(Vmb(D.j,0),12);i=RD(anb(s.e,$C(WQ,VAe,18,0,0,1)),482);for(d=i,f=0,h=d.length;f<h;++f){b=d[f];Z0b(b,F);Ajd(b.a,b.a.b,k)}i=s2b(u.g);for(c=i,e=0,g=c.length;e<g;++e){b=c[e];Y0b(b,F);Ajd(b.a,0,A)}Y0b(v,null);Z0b(v,null);ZEb(w.c,p)}}for(q=new Anb(w);q.a<q.c.c.length;){p=RD(ynb(q),10);g3b(p,null)}} +function Dne(){RRd(Vbb,new ioe);RRd(Xbb,new Poe);RRd(Ybb,new upe);RRd(Zbb,new _pe);RRd(qJ,new lqe);RRd(WC(gE,1),new oqe);RRd(QI,new rqe);RRd(RI,new uqe);RRd(qJ,new Gne);RRd(qJ,new Jne);RRd(qJ,new Mne);RRd(VI,new Pne);RRd(qJ,new Sne);RRd(QK,new Vne);RRd(QK,new Yne);RRd(qJ,new _ne);RRd(ZI,new coe);RRd(qJ,new foe);RRd(qJ,new loe);RRd(qJ,new ooe);RRd(qJ,new roe);RRd(qJ,new uoe);RRd(WC(gE,1),new xoe);RRd(qJ,new Aoe);RRd(qJ,new Doe);RRd(QK,new Goe);RRd(QK,new Joe);RRd(qJ,new Moe);RRd(bJ,new Soe);RRd(qJ,new Voe);RRd(eJ,new Yoe);RRd(qJ,new _oe);RRd(qJ,new cpe);RRd(qJ,new fpe);RRd(qJ,new ipe);RRd(QK,new lpe);RRd(QK,new ope);RRd(qJ,new rpe);RRd(qJ,new xpe);RRd(qJ,new Ape);RRd(qJ,new Dpe);RRd(qJ,new Gpe);RRd(qJ,new Jpe);RRd(lJ,new Mpe);RRd(qJ,new Ppe);RRd(qJ,new Spe);RRd(qJ,new Vpe);RRd(lJ,new Ype);RRd(eJ,new cqe);RRd(qJ,new fqe);RRd(bJ,new iqe)} +function jsc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new Ejd;switch(a.a.g){case 3:m=RD(mQb(b.e,(Ywc(),Twc)),15);n=RD(mQb(b.j,Twc),15);o=RD(mQb(b.f,Twc),15);c=RD(mQb(b.e,Rwc),15);d=RD(mQb(b.j,Rwc),15);e=RD(mQb(b.f,Rwc),15);g=new bnb;Tmb(g,m);n.Jc(new msc);Tmb(g,hv(n));Tmb(g,o);f=new bnb;Tmb(f,c);Tmb(f,hv(d));Tmb(f,e);pQb(b.f,Twc,g);pQb(b.f,Rwc,f);pQb(b.f,Uwc,b.f);pQb(b.e,Twc,null);pQb(b.e,Rwc,null);pQb(b.j,Twc,null);pQb(b.j,Rwc,null);break;case 1:ye(k,b.e.a);Mub(k,b.i.n);ye(k,hv(b.j.a));Mub(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,hv(b.j.a));ye(k,b.f.a);}Xub(b.f.a);ye(b.f.a,k);Y0b(b.f,b.e.c);h=RD(mQb(b.e,(yCc(),RAc)),75);j=RD(mQb(b.j,RAc),75);i=RD(mQb(b.f,RAc),75);if(!!h||!!j||!!i){l=new Ejd;hsc(l,i);hsc(l,j);hsc(l,h);pQb(b.f,RAc,l)}Y0b(b.j,null);Z0b(b.j,null);Y0b(b.e,null);Z0b(b.e,null);g3b(b.a,null);g3b(b.i,null);!!b.g&&jsc(a,b.g)} +function tib(){tib=geb;var a,b,c;new Aib(1,0);new Aib(10,0);new Aib(0,0);lib=$C(tJ,Nve,247,11,0,1);mib=$C(hE,zwe,28,100,15,1);nib=cD(WC(iE,1),vxe,28,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);oib=$C(kE,Pwe,28,nib.length,15,1);pib=cD(WC(iE,1),vxe,28,15,[1,10,100,Awe,10000,wxe,1000000,10000000,100000000,ixe,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);qib=$C(kE,Pwe,28,pib.length,15,1);rib=$C(tJ,Nve,247,11,0,1);a=0;for(;a<rib.length;a++){lib[a]=new Aib(a,0);rib[a]=new Aib(0,a);mib[a]=48}for(;a<mib.length;a++){mib[a]=48}for(c=0;c<oib.length;c++){oib[c]=Cib(nib[c])}for(b=0;b<qib.length;b++){qib[b]=Cib(pib[b])}Ljb()} +function Htb(){function e(){this.obj=this.createObject()} +;e.prototype.createObject=function(a){return Object.create(null)};e.prototype.get=function(a){return this.obj[a]};e.prototype.set=function(a,b){this.obj[a]=b};e.prototype[Jxe]=function(a){delete this.obj[a]};e.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)};e.prototype.entries=function(){var b=this.keys();var c=this;var d=0;return {next:function(){if(d>=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!Ftb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[Jxe]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function q$c(){q$c=geb;h$c=new jGd(rAe);new jGd(sAe);new kGd('DEPTH',sgb(0));XZc=new kGd('FAN',sgb(0));VZc=new kGd(QEe,sgb(0));n$c=new kGd('ROOT',(Geb(),false));b$c=new kGd('LEFTNEIGHBOR',null);l$c=new kGd('RIGHTNEIGHBOR',null);c$c=new kGd('LEFTSIBLING',null);m$c=new kGd('RIGHTSIBLING',null);WZc=new kGd('DUMMY',false);new kGd('LEVEL',sgb(0));k$c=new kGd('REMOVABLE_EDGES',new Yub);o$c=new kGd('XCOOR',sgb(0));p$c=new kGd('YCOOR',sgb(0));d$c=new kGd('LEVELHEIGHT',0);f$c=new kGd('LEVELMIN',0);e$c=new kGd('LEVELMAX',0);ZZc=new kGd('GRAPH_XMIN',0);_Zc=new kGd('GRAPH_YMIN',0);YZc=new kGd('GRAPH_XMAX',0);$Zc=new kGd('GRAPH_YMAX',0);UZc=new kGd('COMPACT_LEVEL_ASCENSION',false);TZc=new kGd('COMPACT_CONSTRAINTS',new bnb);a$c=new kGd('ID','');i$c=new kGd('POSITION',sgb(0));j$c=new kGd('PRELIM',0);g$c=new kGd('MODIFIER',0);SZc=new jGd(tAe);RZc=new jGd(uAe)} +function Bqe(a){zqe();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=$C(hE,zwe,28,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i<n;i++){b=a[e++];c=a[e++];d=a[e++];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[p|j<<4];f[g++]=yqe[k<<2|q];f[g++]=yqe[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[p|j<<4];f[g++]=yqe[k<<2];f[g++]=61}return Ihb(f,0,f.length)} +function CB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>qwe&&tB(b,a.p-Owe);g=b.q.getDate();nB(b,1);a.k>=0&&qB(b,a.k);if(a.c>=0){nB(b,a.c)}else if(a.k>=0){i=new vB(b.q.getFullYear()-Owe,b.q.getMonth(),35);d=35-i.q.getDate();nB(b,$wnd.Math.min(d,g))}else{nB(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);oB(b,a.f==24&&a.g?0:a.f);a.j>=0&&pB(b,a.j);a.n>=0&&rB(b,a.n);a.i>=0&&sB(b,Bdb(Ndb(Fdb(Hdb(b.q.getTime()),Awe),Awe),a.i));if(a.a){e=new uB;tB(e,e.q.getFullYear()-Owe-80);Ldb(Hdb(b.q.getTime()),Hdb(e.q.getTime()))&&tB(b,e.q.getFullYear()-Owe+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();nB(b,b.q.getDate()+c);b.q.getMonth()!=h&&nB(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>qwe){f=b.q.getTimezoneOffset();sB(b,Bdb(Hdb(b.q.getTime()),(a.o-f)*60*Awe))}return true} +function J5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=mQb(b,(Ywc(),Awc));if(!ZD(e,207)){return}o=RD(e,27);p=b.e;m=new sjd(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=RD(Gxd(o,(yCc(),oBc)),181);if(Csb(u,(dqd(),Xpd))){n=RD(Gxd(o,qBc),107);E2b(n,f.a);H2b(n,f.d);F2b(n,f.b);G2b(n,f.c)}c=new bnb;for(k=new Anb(b.a);k.a<k.c.c.length;){i=RD(ynb(k),10);if(ZD(mQb(i,Awc),207)){K5b(i,m)}else if(ZD(mQb(i,Awc),193)&&!p){d=RD(mQb(i,Awc),123);s=j2b(b,i,d.g,d.f);Byd(d,s.a,s.b)}for(r=new Anb(i.j);r.a<r.c.c.length;){q=RD(ynb(r),12);FDb(CDb(new SDb(null,new Swb(q.g,16)),new Q5b(i)),new S5b(c))}}if(p){for(r=new Anb(p.j);r.a<r.c.c.length;){q=RD(ynb(r),12);FDb(CDb(new SDb(null,new Swb(q.g,16)),new U5b(p)),new W5b(c))}}t=RD(Gxd(o,yAc),223);for(h=new Anb(c);h.a<h.c.c.length;){g=RD(ynb(h),18);I5b(g,t,m)}L5b(b);for(j=new Anb(b.a);j.a<j.c.c.length;){i=RD(ynb(j),10);l=i.e;!!l&&J5b(a,l)}} +function xNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(RD(RD(Qc(a.r,b),21),87).dc()){return}g=RD(Vrb(a.b,b),127);i=g.i;h=g.n;k=BLb(a,b);d=i.b-h.b-h.c;e=g.a.a;f=i.c+h.b;n=a.w;if((k==(pod(),mod)||k==ood)&&RD(RD(Qc(a.r,b),21),87).gc()==1){e=k==mod?e-2*a.w:e;k=lod}if(d<e&&!a.B.Hc((dqd(),aqd))){if(k==mod){n+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);f+=n}else{n+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1)}}else{if(d<e){e=k==mod?e-2*a.w:e;k=lod}switch(k.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);n+=$wnd.Math.max(0,c);f+=n;break;case 1:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1);n+=$wnd.Math.max(0,c);}}for(m=RD(RD(Qc(a.r,b),21),87).Kc();m.Ob();){l=RD(m.Pb(),117);l.e.a=f+l.d.b;l.e.b=(j=l.b,j.pf((umd(),Gld))?j.ag()==(qpd(),Yod)?-j.Mf().b-Kfb(UD(j.of(Gld))):Kfb(UD(j.of(Gld))):j.ag()==(qpd(),Yod)?-j.Mf().b:0);f+=l.d.b+l.b.Mf().a+l.d.c+n}} +function BNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(RD(RD(Qc(a.r,b),21),87).dc()){return}g=RD(Vrb(a.b,b),127);i=g.i;h=g.n;l=BLb(a,b);d=i.a-h.d-h.a;e=g.a.b;f=i.d+h.d;o=a.w;j=a.o.a;if((l==(pod(),mod)||l==ood)&&RD(RD(Qc(a.r,b),21),87).gc()==1){e=l==mod?e-2*a.w:e;l=lod}if(d<e&&!a.B.Hc((dqd(),aqd))){if(l==mod){o+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);f+=o}else{o+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1)}}else{if(d<e){e=l==mod?e-2*a.w:e;l=lod}switch(l.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);o+=$wnd.Math.max(0,c);f+=o;break;case 1:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1);o+=$wnd.Math.max(0,c);}}for(n=RD(RD(Qc(a.r,b),21),87).Kc();n.Ob();){m=RD(n.Pb(),117);m.e.a=(k=m.b,k.pf((umd(),Gld))?k.ag()==(qpd(),ppd)?-k.Mf().a-Kfb(UD(k.of(Gld))):j+Kfb(UD(k.of(Gld))):k.ag()==(qpd(),ppd)?-k.Mf().a:j);m.e.b=f+m.d.d;f+=m.d.d+m.b.Mf().b+m.d.a+o}} +function bZc(a,b){var c,d,e,f,g;b.Ug('Processor determine the coords for each level',1);d=new bnb;for(g=Sub(a.b,0);g.b!=g.d.c;){e=RD(evb(g),39);while(RD(mQb(e,(h_c(),f_c)),17).a>d.c.length-1){Rmb(d,new Ptd(Hze,KEe))}c=RD(mQb(e,f_c),17).a;if(Dmd(RD(mQb(a,H$c),88))){e.e.a<Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).a))&&Ntd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.a);e.e.a+e.f.a>Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).b))&&Otd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.a+e.f.a)}else{e.e.b<Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).a))&&Ntd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.b);e.e.b+e.f.b>Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).b))&&Otd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.b+e.f.b)}}for(f=Sub(a.b,0);f.b!=f.d.c;){e=RD(evb(f),39);c=RD(mQb(e,(h_c(),f_c)),17).a;pQb(e,(q$c(),f$c),UD((tFb(c,d.c.length),RD(d.c[c],42)).a));pQb(e,e$c,UD((tFb(c,d.c.length),RD(d.c[c],42)).b))}b.Vg()} +function Tec(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;a.o=Kfb(UD(mQb(a.i,(yCc(),bCc))));a.f=Kfb(UD(mQb(a.i,XBc)));a.j=a.i.b.c.length;h=a.j-1;m=0;a.k=0;a.n=0;a.b=dv($C(bJ,Nve,17,a.j,0,1));a.c=dv($C(VI,Nve,345,a.j,7,1));for(g=new Anb(a.i.b);g.a<g.c.c.length;){e=RD(ynb(g),30);e.p=h;for(l=new Anb(e.a);l.a<l.c.c.length;){k=RD(ynb(l),10);k.p=m;++m}--h}a.g=$C(kE,Pwe,28,m,15,1);a.d=YC(kE,[Nve,Pwe],[53,28],15,[m,3],2);a.p=new bnb;a.q=new bnb;b=0;a.e=0;for(f=new Anb(a.i.b);f.a<f.c.c.length;){e=RD(ynb(f),30);h=e.p;d=0;p=0;i=e.a.c.length;j=0;for(l=new Anb(e.a);l.a<l.c.c.length;){k=RD(ynb(l),10);m=k.p;a.g[m]=k.c.p;j+=k.o.b+a.o;c=Kr(new is(Mr(Z2b(k).a.Kc(),new ir)));o=Kr(new is(Mr(a3b(k).a.Kc(),new ir)));a.d[m][0]=o-c;a.d[m][1]=c;a.d[m][2]=o;d+=c;p+=o;c>0&&Rmb(a.q,k);Rmb(a.p,k)}b-=d;n=i+b;j+=b*a.f;$mb(a.b,h,sgb(n));$mb(a.c,h,j);a.k=$wnd.Math.max(a.k,n);a.n=$wnd.Math.max(a.n,j);a.e+=b;b+=p}} +function qpd(){qpd=geb;var a;opd=new upd(Sye,0);Yod=new upd(_ye,1);Xod=new upd(aze,2);npd=new upd(bze,3);ppd=new upd(cze,4);bpd=(yob(),new Lqb((a=RD(mfb(E3),9),new Fsb(a,RD(WEb(a,a.length),9),0))));cpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[])));Zod=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[])));kpd=eq(ysb(npd,cD(WC(E3,1),NAe,64,0,[])));mpd=eq(ysb(ppd,cD(WC(E3,1),NAe,64,0,[])));hpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[npd])));apd=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[ppd])));jpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[ppd])));dpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod])));lpd=eq(ysb(npd,cD(WC(E3,1),NAe,64,0,[ppd])));$od=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[npd])));gpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,ppd])));_od=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[npd,ppd])));ipd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[npd,ppd])));epd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,npd])));fpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,npd,ppd])))} +function Gfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;b.Ug(qBe,1);p=new bnb;w=new bnb;for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),30);r=-1;o=t2b(i.a);for(l=o,m=0,n=l.length;m<n;++m){k=l[m];++r;if(!(k.k==(r3b(),p3b)&&Dod(RD(mQb(k,(yCc(),BBc)),101)))){continue}Cod(RD(mQb(k,(yCc(),BBc)),101))||Hfc(k);pQb(k,(Ywc(),pwc),k);p.c.length=0;w.c.length=0;c=new bnb;u=new Yub;_q(u,e3b(k,(qpd(),Yod)));Efc(a,u,p,w,c);h=r;A=k;for(f=new Anb(p);f.a<f.c.c.length;){d=RD(ynb(f),10);f3b(d,h,i);++r;pQb(d,pwc,k);g=RD(Vmb(d.j,0),12);q=RD(mQb(g,Awc),12);Heb(TD(mQb(q,Szc)))||RD(mQb(d,qwc),15).Fc(A)}Xub(u);for(t=e3b(k,npd).Kc();t.Ob();){s=RD(t.Pb(),12);Pub(u,s,u.a,u.a.a)}Efc(a,u,w,null,c);v=k;for(e=new Anb(w);e.a<e.c.c.length;){d=RD(ynb(e),10);f3b(d,++r,i);pQb(d,pwc,k);g=RD(Vmb(d.j,0),12);q=RD(mQb(g,Awc),12);Heb(TD(mQb(q,Szc)))||RD(mQb(v,qwc),15).Fc(d)}c.c.length==0||pQb(k,Uvc,c)}}b.Vg()} +function tYc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Yub;h=null;o=null;d=eE($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Sub(b,0);t.b!=t.d.c;){r=RD(evb(t),39);if(dE(o)!==dE(mQb(r,(q$c(),a$c)))){o=WD(mQb(r,a$c));i=0}o!=null?(h=o+wYc(i++,d)):(h=wYc(i++,d));pQb(r,a$c,h);for(q=(e=Sub((new dXc(r)).a.d,0),new gXc(e));dvb(q.a);){p=RD(evb(q.a),65).c;Pub(n,p,n.c.b,n.c);pQb(p,a$c,h)}}m=new Tsb;for(g=0;g<h.length-d;g++){for(s=Sub(b,0);s.b!=s.d.c;){r=RD(evb(s),39);j=zhb(WD(mQb(r,(q$c(),a$c))),0,g+1);c=(j==null?Wd(qtb(m.f,null)):Ktb(m.i,j))!=null?RD(j==null?Wd(qtb(m.f,null)):Ktb(m.i,j),17).a+1:1;$jb(m,j,sgb(c))}}for(l=new vkb((new mkb(m)).a);l.b;){k=tkb(l);f=sgb(Wjb(a.a,k.ld())!=null?RD(Wjb(a.a,k.ld()),17).a:0);$jb(a.a,WD(k.ld()),sgb(RD(k.md(),17).a+f.a));f=RD(Wjb(a.b,k.ld()),17);(!f||f.a<RD(k.md(),17).a)&&$jb(a.b,WD(k.ld()),RD(k.md(),17))}tYc(a,n)}} +function Hpc(a){var b,c,d,e,f,g,h,i,j,k,l,m;c=null;i=null;e=RD(mQb(a.b,(yCc(),CAc)),349);if(e==(TEc(),REc)){c=new bnb;i=new bnb}for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),105);f=g.i;if(!f){continue}switch(g.e.g){case 0:b=RD(Nsb(new Osb(g.b)),64);e==REc&&b==(qpd(),Yod)?(ZEb(c.c,g),true):e==REc&&b==(qpd(),npd)?(ZEb(i.c,g),true):Fpc(g,b);break;case 1:j=g.a.d.j;k=g.c.d.j;j==(qpd(),Yod)?Gpc(g,Yod,(enc(),bnc),g.a):k==Yod?Gpc(g,Yod,(enc(),cnc),g.c):j==npd?Gpc(g,npd,(enc(),cnc),g.a):k==npd&&Gpc(g,npd,(enc(),bnc),g.c);break;case 2:case 3:d=g.b;Csb(d,(qpd(),Yod))?Csb(d,npd)?Csb(d,ppd)?Csb(d,Xod)||Gpc(g,Yod,(enc(),cnc),g.c):Gpc(g,Yod,(enc(),bnc),g.a):Gpc(g,Yod,(enc(),anc),null):Gpc(g,npd,(enc(),anc),null);break;case 4:l=g.a.d.j;m=g.a.d.j;l==(qpd(),Yod)||m==Yod?Gpc(g,npd,(enc(),anc),null):Gpc(g,Yod,(enc(),anc),null);}}if(c){c.c.length==0||Epc(c,(qpd(),Yod));i.c.length==0||Epc(i,(qpd(),npd))}} +function oGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c.Ug('Breadth first model order layering',1);a.a=b;q=new bnb;for(p=new Anb(a.a.a);p.a<p.c.c.length;){n=RD(ynb(p),10);n.k==(r3b(),p3b)&&(ZEb(q.c,n),true)}yob();_mb(q,new tGc);i=true;e=new R4b(a.a);d=null;Rmb(a.a.b,e);for(o=new Anb(q);o.a<o.c.c.length;){n=RD(ynb(o),10);if(i){g3b(n,e);i=false}else{for(h=new is(Mr(Z2b(n).a.Kc(),new ir));gs(h);){f=RD(hs(h),18);if(f.c.i.k==(r3b(),p3b)&&f.c.i.c==e||f.c.i.k==n3b&&RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.c==e){d=new R4b(a.a);Rmb(a.a.b,d);e=new R4b(a.a);Rmb(a.a.b,e)}}for(g=new is(Mr(Z2b(n).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);f.c.i.k==(r3b(),n3b)&&!f.c.i.c&&g3b(f.c.i,d)}g3b(n,e)}}a.a.a.c.length=0;r=new bnb;for(l=new Anb(a.a.b);l.a<l.c.c.length;){j=RD(ynb(l),30);j.a.c.length==0&&(ZEb(r.c,j),true)}Ce(a.a.b,r);m=0;for(k=new Anb(a.a.b);k.a<k.c.c.length;){j=RD(ynb(k),30);j.p=m;++m}c.Vg()} +function K5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;d=RD(mQb(a,(Ywc(),Awc)),27);o=RD(mQb(a,(yCc(),mAc)),17).a;f=RD(mQb(a,VAc),17).a;Ixd(d,mAc,sgb(o));Ixd(d,VAc,sgb(f));Dyd(d,a.n.a+b.a);Eyd(d,a.n.b+b.b);if(RD(Gxd(d,lBc),181).gc()!=0||!!a.e||dE(mQb(Y2b(a),kBc))===dE((JDc(),HDc))&&xDc((wDc(),(!a.q?(yob(),yob(),wob):a.q)._b(iBc)?(m=RD(mQb(a,iBc),203)):(m=RD(mQb(Y2b(a),jBc),203)),m))){Cyd(d,a.o.a);Ayd(d,a.o.b)}for(l=new Anb(a.j);l.a<l.c.c.length;){j=RD(ynb(l),12);p=mQb(j,Awc);if(ZD(p,193)){e=RD(p,123);Byd(e,j.n.a,j.n.b);Ixd(e,GBc,j.j)}}n=RD(mQb(a,dBc),181).gc()!=0;for(i=new Anb(a.b);i.a<i.c.c.length;){g=RD(ynb(i),72);if(n||RD(mQb(g,dBc),181).gc()!=0){c=RD(mQb(g,Awc),135);zyd(c,g.o.a,g.o.b);Byd(c,g.n.a,g.n.b)}}if(!Rod(RD(mQb(a,EBc),21))){for(k=new Anb(a.j);k.a<k.c.c.length;){j=RD(ynb(k),12);for(h=new Anb(j.f);h.a<h.c.c.length;){g=RD(ynb(h),72);c=RD(mQb(g,Awc),135);Cyd(c,g.o.a);Ayd(c,g.o.b);Byd(c,g.n.a,g.n.b)}}}} +function X2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;b.Ug('Calculate Graph Size',1);b.dh(a,eFe);l=Hze;m=Hze;j=fFe;k=fFe;for(p=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));p.e!=p.i.gc();){n=RD(bMd(p),27);s=n.i;t=n.j;C=n.g;h=n.f;i=RD(Gxd(n,(umd(),eld)),140);l=$wnd.Math.min(l,s-i.b);m=$wnd.Math.min(m,t-i.d);j=$wnd.Math.max(j,s+C+i.c);k=$wnd.Math.max(k,t+h+i.a)}r=RD(Gxd(a,(umd(),tld)),107);q=new rjd(l-r.b,m-r.d);B=j-l+(r.b+r.c);g=k-m+(r.d+r.a);if(Heb(TD(Gxd(a,($4c(),G4c))))){u=RD(Gxd(a,(u2c(),t2c)),27);v=RD(Gxd(u,eld),140);w=u.i+u.g/2+(v.b+v.c)/2-q.a;A=u.j+u.f/2+(v.d+v.a)/2-q.b;e=B-w;f=g-A;if(e<B/2){c=e-w;B+=c;q.a-=c}else{c=w-e;B+=c}if(f<g/2){d=f-A;g+=d;q.b-=d}else{d=A-f;g+=d}}for(o=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));o.e!=o.i.gc();){n=RD(bMd(o),27);Dyd(n,n.i-q.a);Eyd(n,n.j-q.b)}if(!Heb(TD(Gxd(a,mld)))){Cyd(a,B);Ayd(a,g)}Ixd(a,Ikd,B-(r.b+r.c));Ixd(a,Hkd,g-(r.d+r.a));b.dh(a,gFe)} +function IUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c.length=0;a.i.c.length=0;a.g.a.$b();if(b){for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);for(l=e3b(f,(qpd(),Xod)).Kc();l.Ob();){k=RD(l.Pb(),12);Ysb(a.e,k);for(e=new Anb(k.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(W0b(d)){continue}Rmb(a.c,d);OUc(a,d);h=d.c.i.k;(h==(r3b(),p3b)||h==q3b||h==m3b||h==l3b)&&Rmb(a.j,d);n=d.d;m=n.i.c;m==c?Ysb(a.f,n):m==b?Ysb(a.e,n):Ymb(a.c,d)}}}}if(c){for(g=new Anb(c.a);g.a<g.c.c.length;){f=RD(ynb(g),10);for(j=new Anb(f.j);j.a<j.c.c.length;){i=RD(ynb(j),12);for(e=new Anb(i.g);e.a<e.c.c.length;){d=RD(ynb(e),18);W0b(d)&&Ysb(a.g,d)}}for(l=e3b(f,(qpd(),ppd)).Kc();l.Ob();){k=RD(l.Pb(),12);Ysb(a.f,k);for(e=new Anb(k.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(W0b(d)){continue}Rmb(a.c,d);OUc(a,d);h=d.c.i.k;(h==(r3b(),p3b)||h==q3b||h==m3b||h==l3b)&&Rmb(a.j,d);n=d.d;m=n.i.c;m==c?Ysb(a.f,n):m==b?Ysb(a.e,n):Ymb(a.c,d)}}}}} +function iSc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c.Ug('Polyline edge routing',1);q=Kfb(UD(mQb(b,(yCc(),AAc))));n=Kfb(UD(mQb(b,cCc)));e=Kfb(UD(mQb(b,UBc)));d=$wnd.Math.min(1,e/n);t=0;i=0;if(b.b.c.length!=0){u=fSc(RD(Vmb(b.b,0),30));t=0.4*d*u}h=new Jkb(b.b,0);while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30));f=ar(g,bSc);f&&t>0&&(t-=n);p2b(g,t);k=0;for(m=new Anb(g.a);m.a<m.c.c.length;){l=RD(ynb(m),10);j=0;for(p=new is(Mr(a3b(l).a.Kc(),new ir));gs(p);){o=RD(hs(p),18);r=K3b(o.c).b;s=K3b(o.d).b;if(g==o.d.i.c&&!W0b(o)){jSc(o,t,0.4*d*$wnd.Math.abs(r-s));if(o.c.j==(qpd(),ppd)){r=0;s=0}}j=$wnd.Math.max(j,$wnd.Math.abs(s-r))}switch(l.k.g){case 0:case 4:case 1:case 3:case 5:kSc(a,l,t,q);}k=$wnd.Math.max(k,j)}if(h.b<h.d.gc()){u=fSc((sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30)));k=$wnd.Math.max(k,u);sFb(h.b>0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.b<h.d.gc()&&(i+=n);t+=g.c.a+i}a.a.a.$b();b.f.a=t;c.Vg()} +function GGd(a){var b,c,d,e,f;Ivb(a,IIe);switch((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i+(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i){case 0:throw Adb(new agb('The edge must have at least one source or target.'));case 1:return (!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==0?vCd(AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))):vCd(AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)));}if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i==1){e=AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84));f=AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84));if(vCd(e)==vCd(f)){return vCd(e)}else if(e==vCd(f)){return e}else if(f==vCd(e)){return f}}d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));b=AGd(RD(hs(d),84));while(gs(d)){c=AGd(RD(hs(d),84));if(c!=b&&!NGd(c,b)){if(vCd(c)==vCd(b)){b=vCd(c)}else{b=HGd(b,c);if(!b){return null}}}}return b} +function _zd(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=(BFb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BFb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=(AFb(1,m,c.length),c.substr(1,m-1));u=lhb('%',h)?null:oSd(h);e=0;if(k){try{e=Oeb((BFb(m+2,c.length+1),c.substr(m+2)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){i=a;throw Adb(new RSd(i))}else throw Adb(a)}}for(r=P2d(b.Gh());r.Ob();){p=k3d(r);if(ZD(p,519)){f=RD(p,598);t=f.d;if((u==null?t==null:lhb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:(AFb(0,l,c.length),c.substr(0,l));d=0;if(l!=-1){try{d=Oeb((BFb(l+1,c.length+1),c.substr(l+1)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){o=c}else throw Adb(a)}}o=lhb('%',o)?null:oSd(o);for(q=P2d(b.Gh());q.Ob();){p=k3d(q);if(ZD(p,197)){g=RD(p,197);s=g.xe();if((o==null?s==null:lhb(o,s))&&d--==0){return g}}}return null}}return Pvd(b,c)} +function Hlc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;k=new Tsb;i=new Tp;for(d=new Anb(a.a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);j=Zjc(b);if(j){rtb(k.f,j,b)}else{s=$jc(b);if(s){for(f=new Anb(s.k);f.a<f.c.c.length;){e=RD(ynb(f),18);Rc(i,e,b)}}}}for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);j=Zjc(b);if(j){for(h=new is(Mr(a3b(j).a.Kc(),new ir));gs(h);){g=RD(hs(h),18);if(W0b(g)){continue}o=g.c;r=g.d;if((qpd(),hpd).Hc(g.c.j)&&hpd.Hc(g.d.j)){continue}p=RD(Wjb(k,g.d.i),60);rIb(uIb(tIb(vIb(sIb(new wIb,0),100),a.c[b.a.d]),a.c[p.a.d]));if(o.j==ppd&&q4b((J3b(),G3b,o))){for(m=RD(Qc(i,g),21).Kc();m.Ob();){l=RD(m.Pb(),60);if(l.d.c<b.d.c){n=a.c[l.a.d];q=a.c[b.a.d];if(n==q){continue}rIb(uIb(tIb(vIb(sIb(new wIb,1),100),n),q))}}}if(r.j==Xod&&v4b((J3b(),E3b,r))){for(m=RD(Qc(i,g),21).Kc();m.Ob();){l=RD(m.Pb(),60);if(l.d.c>b.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}rIb(uIb(tIb(vIb(sIb(new wIb,1),100),n),q))}}}}}}} +function mNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=RD(RD(Qc(a.r,b),21),87);if(b==(qpd(),Xod)||b==ppd){qNb(a,b);return}f=b==Yod?(mOb(),iOb):(mOb(),lOb);u=b==Yod?(vLb(),uLb):(vLb(),sLb);c=RD(Vrb(a.b,b),127);d=c.i;e=d.c+Hid(cD(WC(iE,1),vxe,28,15,[c.n.b,a.C.b,a.k]));r=d.c+d.b-Hid(cD(WC(iE,1),vxe,28,15,[c.n.c,a.C.c,a.k]));g=WNb(_Nb(f),a.t);s=b==Yod?pxe:oxe;for(l=m.Kc();l.Ob();){j=RD(l.Pb(),117);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.Mf();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);Ivb(u,Pye);n.f=u;RKb(n,(EKb(),DKb));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.c<v?(o.c=v):o.c+o.b>w&&(o.c=w-o.b);Rmb(g.d,new sOb(o,UNb(g,o)));s=b==Yod?$wnd.Math.max(s,p.b+j.b.Mf().b):$wnd.Math.min(s,p.b)}s+=b==Yod?a.t:-a.t;t=VNb((g.e=s,g));t>0&&(RD(Vrb(a.b,b),127).a.b=t);for(k=m.Kc();k.Ob();){j=RD(k.Pb(),117);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function JSb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Tsb;for(i=new dMd(a);i.e!=i.i.gc();){h=RD(bMd(i),27);c=new _sb;Zjb(FSb,h,c);n=new TSb;e=RD(zDb(new SDb(null,new Twb(new is(Mr(yGd(h).a.Kc(),new ir)))),OBb(n,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)])))),85);ISb(c,RD(e.xc((Geb(),true)),16),new VSb);d=RD(zDb(CDb(RD(e.xc(false),15).Lc(),new XSb),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);for(g=d.Kc();g.Ob();){f=RD(g.Pb(),74);m=KGd(f);if(m){j=RD(Wd(qtb(b.f,m)),21);if(!j){j=LSb(m);rtb(b.f,m,j)}ye(c,j)}}e=RD(zDb(new SDb(null,new Twb(new is(Mr(zGd(h).a.Kc(),new ir)))),OBb(n,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb])))),85);ISb(c,RD(e.xc(true),16),new ZSb);d=RD(zDb(CDb(RD(e.xc(false),15).Lc(),new _Sb),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);for(l=d.Kc();l.Ob();){k=RD(l.Pb(),74);m=MGd(k);if(m){j=RD(Wd(qtb(b.f,m)),21);if(!j){j=LSb(m);rtb(b.f,m,j)}ye(c,j)}}}} +function zjb(a,b){xjb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=Ddb(a,0)<0;i&&(a=Odb(a));if(Ddb(a,0)==0){switch(b){case 0:return '0';case 1:return zxe;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:n=new bib;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==qwe?'2147483648':''+-b;return n.a;}}k=18;l=$C(hE,zwe,28,k+1,15,1);c=k;p=a;do{j=p;p=Fdb(p,10);l[--c]=Ydb(Bdb(48,Vdb(j,Ndb(p,10))))&Bwe}while(Ddb(p,0)!=0);e=Vdb(Vdb(Vdb(k,c),b),1);if(b==0){i&&(l[--c]=45);return Ihb(l,c,k-c)}if(b>0&&Ddb(e,-6)>=0){if(Ddb(e,0)>=0){f=c+Ydb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return Ihb(l,c,k-c+1)}for(g=2;Ldb(g,Bdb(Odb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return Ihb(l,c,k-c)}o=c+1;d=k;m=new cib;i&&(m.a+='-',m);if(d-o>=1){Thb(m,l[c]);m.a+='.';m.a+=Ihb(l,c+1,k-c-1)}else{m.a+=Ihb(l,c,k-c)}m.a+='E';Ddb(e,0)>0&&(m.a+='+',m);m.a+=''+Zdb(e);return m.a} +function Esd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;q=new rjd(a.g,a.f);p=vsd(a);p.a=$wnd.Math.max(p.a,b);p.b=$wnd.Math.max(p.b,c);w=p.a/q.a;k=p.b/q.b;u=p.a-q.a;i=p.b-q.b;if(d){g=!vCd(a)?RD(Gxd(a,(umd(),Nkd)),88):RD(Gxd(vCd(a),(umd(),Nkd)),88);h=dE(Gxd(a,(umd(),Hld)))===dE((Bod(),wod));for(s=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));s.e!=s.i.gc();){r=RD(bMd(s),123);t=RD(Gxd(r,Old),64);if(t==(qpd(),opd)){t=osd(r,g);Ixd(r,Old,t)}switch(t.g){case 1:h||Dyd(r,r.i*w);break;case 2:Dyd(r,r.i+u);h||Eyd(r,r.j*k);break;case 3:h||Dyd(r,r.i*w);Eyd(r,r.j+i);break;case 4:h||Eyd(r,r.j*k);}}}zyd(a,p.a,p.b);if(e){for(m=new dMd((!a.n&&(a.n=new C5d(I4,a,1,7)),a.n));m.e!=m.i.gc();){l=RD(bMd(m),135);n=l.i+l.g/2;o=l.j+l.f/2;v=n/q.a;j=o/q.b;if(v+j>=1){if(v-j>0&&o>=0){Dyd(l,l.i+u);Eyd(l,l.j+i*j)}else if(v-j<0&&n>=0){Dyd(l,l.i+u*v);Eyd(l,l.j+i)}}}}Ixd(a,(umd(),kld),(Qpd(),f=RD(mfb(H3),9),new Fsb(f,RD(WEb(f,f.length),9),0)));return new rjd(w,k)} +function _4c(a){Cgd(a,new Pfd(Wfd($fd(Xfd(Zfd(Yfd(new agd,CFe),'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 c5c),CFe)));Agd(a,CFe,fEe,iGd(R4c));Agd(a,CFe,_ze,iGd(Y4c));Agd(a,CFe,jAe,iGd(K4c));Agd(a,CFe,CAe,iGd(L4c));Agd(a,CFe,iAe,iGd(M4c));Agd(a,CFe,kAe,iGd(J4c));Agd(a,CFe,gAe,iGd(N4c));Agd(a,CFe,lAe,iGd(Q4c));Agd(a,CFe,tFe,iGd(H4c));Agd(a,CFe,sFe,iGd(I4c));Agd(a,CFe,rFe,iGd(T4c));Agd(a,CFe,xFe,iGd(W4c));Agd(a,CFe,yFe,iGd(U4c));Agd(a,CFe,zFe,iGd(V4c));Agd(a,CFe,wFe,iGd(O4c));Agd(a,CFe,pFe,iGd(P4c));Agd(a,CFe,qFe,iGd(S4c));Agd(a,CFe,uFe,iGd(X4c));Agd(a,CFe,vFe,iGd(Z4c));Agd(a,CFe,oFe,iGd(G4c))} +function Peb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw Adb(new Vgb(vve))}j=a;f=a.length;i=false;if(f>0){b=(BFb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=(BFb(1,a.length+1),a.substr(1));--f;i=b==45}}if(f==0){throw Adb(new Vgb(nxe+j+'"'))}while(a.length>0&&(BFb(0,a.length),a.charCodeAt(0)==48)){a=(BFb(1,a.length+1),a.substr(1));--f}if(f>(Ugb(),Sgb)[10]){throw Adb(new Vgb(nxe+j+'"'))}for(e=0;e<f;e++){if(dfb((BFb(e,a.length),a.charCodeAt(e)))==-1){throw Adb(new Vgb(nxe+j+'"'))}}l=0;g=Qgb[10];k=Rgb[10];h=Odb(Tgb[10]);c=true;d=f%g;if(d>0){l=-parseInt((AFb(0,d,a.length),a.substr(0,d)),10);a=(BFb(d,a.length+1),a.substr(d));f-=d;c=false}while(f>=g){d=parseInt((AFb(0,g,a.length),a.substr(0,g)),10);a=(BFb(g,a.length+1),a.substr(g));f-=g;if(c){c=false}else{if(Ddb(l,h)<0){throw Adb(new Vgb(nxe+j+'"'))}l=Ndb(l,k)}l=Vdb(l,d)}if(Ddb(l,0)>0){throw Adb(new Vgb(nxe+j+'"'))}if(!i){l=Odb(l);if(Ddb(l,0)<0){throw Adb(new Vgb(nxe+j+'"'))}}return l} +function oSd(a){gSd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=qhb(a,Fhb(37));if(e<0){return a}else{i=new dib((AFb(0,e,a.length),a.substr(0,e)));b=$C(gE,YHe,28,4,15,1);h=0;d=0;for(g=a.length;e<g;e++){BFb(e,a.length);if(a.charCodeAt(e)==37&&a.length>e+2&&zSd((BFb(e+1,a.length),a.charCodeAt(e+1)),XRd,YRd)&&zSd((BFb(e+2,a.length),a.charCodeAt(e+2)),XRd,YRd)){c=DSd((BFb(e+1,a.length),a.charCodeAt(e+1)),(BFb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Thb(i,((b[0]&31)<<6|b[1]&63)&Bwe);break}case 3:{Thb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&Bwe);break}}h=0;d=0}}else{for(f=0;f<h;++f){Thb(i,b[f]&Bwe)}h=0;i.a+=String.fromCharCode(c)}}else{for(f=0;f<h;++f){Thb(i,b[f]&Bwe)}h=0;Thb(i,(BFb(e,a.length),a.charCodeAt(e)))}}return i.a}} +function atd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=vCd(AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)));o=vCd(AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84)));l=n==o;h=new pjd;b=RD(Gxd(a,(vnd(),ond)),75);if(!!b&&b.b>=2){if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){c=(bvd(),e=new Rzd,e);WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i>1){m=new mMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));while(m.e!=m.i.gc()){cMd(m)}}lsd(b,RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166))}if(l){for(d=new dMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));d.e!=d.i.gc();){c=RD(bMd(d),166);for(j=new dMd((!c.a&&(c.a=new XZd(D4,c,5)),c.a));j.e!=j.i.gc();){i=RD(bMd(j),377);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new dMd((!a.n&&(a.n=new C5d(I4,a,1,7)),a.n));g.e!=g.i.gc();){f=RD(bMd(g),135);k=RD(Gxd(f,und),8);!!k&&Byd(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function MA(a,b,c,d,e){var f,g,h;KA(a,b);g=b[0];f=ihb(c.c,0);h=-1;if(DA(c)){if(d>0){if(g+d>a.length){return false}h=HA((AFb(0,g+d,a.length),a.substr(0,g+d)),b)}else{h=HA(a,b)}}switch(f){case 71:h=EA(a,g,cD(WC(qJ,1),Nve,2,6,[Qwe,Rwe]),b);e.e=h;return true;case 77:return PA(a,b,e,h,g);case 76:return RA(a,b,e,h,g);case 69:return NA(a,b,g,e);case 99:return QA(a,b,g,e);case 97:h=EA(a,g,cD(WC(qJ,1),Nve,2,6,['AM','PM']),b);e.b=h;return true;case 121:return TA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return OA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(g<a.length&&(BFb(g,a.length),a.charCodeAt(g)==90)){++b[0];e.o=0;return true}case 122:case 118:return SA(a,g,b,e);default:return false;}} +function YQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new sQc(a.a,c,null,null);B=$C(iE,vxe,28,t,15,1);p=$C(iE,vxe,28,t,15,1);o=$C(iE,vxe,28,t,15,1);q=0;for(h=0;h<t;h++){p[h]=lve;o[h]=qwe}for(i=0;i<t;i++){d=(tFb(i,b.c.length),RD(b.c[i],185));B[i]=qQc(d);B[q]>B[i]&&(q=i);for(l=new Anb(a.a.b);l.a<l.c.c.length;){k=RD(ynb(l),30);for(s=new Anb(k.a);s.a<s.c.c.length;){r=RD(ynb(s),10);w=Kfb(d.p[r.p])+Kfb(d.d[r.p]);p[i]=$wnd.Math.min(p[i],w);o[i]=$wnd.Math.max(o[i],w+r.o.b)}}}A=$C(iE,vxe,28,t,15,1);for(j=0;j<t;j++){(tFb(j,b.c.length),RD(b.c[j],185)).o==(EQc(),CQc)?(A[j]=p[q]-p[j]):(A[j]=o[q]-o[j])}f=$C(iE,vxe,28,t,15,1);for(n=new Anb(a.a.b);n.a<n.c.c.length;){m=RD(ynb(n),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);for(g=0;g<t;g++){f[g]=Kfb((tFb(g,b.c.length),RD(b.c[g],185)).p[u.p])+Kfb((tFb(g,b.c.length),RD(b.c[g],185)).d[u.p])+A[g]}bFb(f,heb(iob.prototype.Me,iob,[]));e.p[u.p]=(f[1]+f[2])/2;e.d[u.p]=0}}return e} +function X6b(a,b,c){var d,e,f,g,h;d=b.i;f=a.i.o;e=a.i.d;h=a.n;g=xjd(cD(WC(l3,1),Nve,8,0,[h,a.a]));switch(a.j.g){case 1:SKb(b,(vLb(),sLb));d.d=-e.d-c-d.a;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){RKb(b,(EKb(),DKb));d.c=g.a-Kfb(UD(mQb(a,ywc)))-c-d.b}else{RKb(b,(EKb(),CKb));d.c=g.a+Kfb(UD(mQb(a,ywc)))+c}break;case 2:RKb(b,(EKb(),CKb));d.c=f.a+e.c+c;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){SKb(b,(vLb(),sLb));d.d=g.b-Kfb(UD(mQb(a,ywc)))-c-d.a}else{SKb(b,(vLb(),uLb));d.d=g.b+Kfb(UD(mQb(a,ywc)))+c}break;case 3:SKb(b,(vLb(),uLb));d.d=f.b+e.a+c;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){RKb(b,(EKb(),DKb));d.c=g.a-Kfb(UD(mQb(a,ywc)))-c-d.b}else{RKb(b,(EKb(),CKb));d.c=g.a+Kfb(UD(mQb(a,ywc)))+c}break;case 4:RKb(b,(EKb(),DKb));d.c=-e.b-c-d.b;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){SKb(b,(vLb(),sLb));d.d=g.b-Kfb(UD(mQb(a,ywc)))-c-d.a}else{SKb(b,(vLb(),uLb));d.d=g.b+Kfb(UD(mQb(a,ywc)))+c}}} +function Q8c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;c.Ug(AFe,1);!b.a&&(b.a=new C5d(J4,b,10,11));d=Kfb(UD(Gxd(b,(X7c(),x7c))));k=Kfb(UD(Gxd(b,Q7c)));m=RD(Gxd(b,N7c),107);n=new m9c(d,k);f=l9c(n,b,m);P8c(b,n);h=RD(Gxd(b,K7c),17).a;while(h>1){e=N8c(b);l=f.g;o=RD(Gxd(b,N7c),107);p=Kfb(UD(Gxd(b,x7c)));(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i>1&&Kfb(UD(Gxd(b,(X6c(),T6c))))!=oxe&&(f.c+(o.b+o.c))/(f.b+(o.d+o.a))<p?Ixd(e,(X6c(),W6c),Kfb(UD(Gxd(b,W6c)))+Kfb(UD(Gxd(b,T6c)))):(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i>1&&Kfb(UD(Gxd(b,(X6c(),S6c))))!=oxe&&(f.c+(o.b+o.c))/(f.b+(o.d+o.a))>p&&Ixd(e,(X6c(),W6c),$wnd.Math.max(Kfb(UD(Gxd(b,U6c))),Kfb(UD(Gxd(e,W6c)))-Kfb(UD(Gxd(b,S6c)))));n=new m9c(d,k);i=l9c(n,e,m);j=i.g;if(j>=l&&j==j){for(g=0;g<(!e.a&&(e.a=new C5d(J4,e,10,11)),e.a).i;g++){O8c(a,RD(QHd((!e.a&&(e.a=new C5d(J4,e,10,11)),e.a),g),27),RD(QHd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),g),27))}P8c(b,n);jad(f,i.c);iad(f,i.b)}--h}Ixd(b,(X6c(),N6c),f.b);Ixd(b,O6c,f.c);c.Vg()} +function fHc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;b.Ug('Interactive node layering',1);c=new bnb;for(m=new Anb(a.a);m.a<m.c.c.length;){k=RD(ynb(m),10);i=k.n.a;h=i+k.o.a;h=$wnd.Math.max(i+1,h);s=new Jkb(c,0);d=null;while(s.b<s.d.gc()){q=(sFb(s.b<s.d.gc()),RD(s.d.Xb(s.c=s.b++),578));if(q.c>=h){sFb(s.b>0);s.a.Xb(s.c=--s.b);break}else if(q.a>i){if(!d){Rmb(q.b,k);q.c=$wnd.Math.min(q.c,i);q.a=$wnd.Math.max(q.a,h);d=q}else{Tmb(d.b,q.b);d.a=$wnd.Math.max(d.a,q.a);Ckb(s)}}}if(!d){d=new jHc;d.c=i;d.a=h;Ikb(s,d);Rmb(d.b,k)}}g=a.b;j=0;for(r=new Anb(c);r.a<r.c.c.length;){q=RD(ynb(r),578);e=new R4b(a);e.p=j++;ZEb(g.c,e);for(n=new Anb(q.b);n.a<n.c.c.length;){k=RD(ynb(n),10);g3b(k,e);k.p=0}}for(l=new Anb(a.a);l.a<l.c.c.length;){k=RD(ynb(l),10);if(k.p==0){p=eHc(k,a);while(p.a.gc()!=0){o=RD(p.a.ec().Kc().Pb(),10);p.a.Bc(o)!=null;ye(p,eHc(o,a))}}}f=new Jkb(g,0);while(f.b<f.d.gc()){(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30)).a.c.length==0&&Ckb(f)}a.a.c.length=0;b.Vg()} +function grd(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=0;D=0;for(i=new Anb(a);i.a<i.c.c.length;){h=RD(ynb(i),27);Dsd(h);n=$wnd.Math.max(n,h.g);D+=h.g*h.f}o=D/a.c.length;C=ard(a,o);D+=a.c.length*C;n=$wnd.Math.max(n,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;m=0;k=c.b+c.c;B=new Yub;Mub(B,sgb(0));w=new Yub;j=new Jkb(a,0);while(j.b<j.d.gc()){h=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),27));G=h.g;l=h.f;if(H+G>n){if(f){Oub(w,m);Oub(B,sgb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}Dyd(h,H);Eyd(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(F<e){m+=e-F;F=e}if(f){H=c.b;j=new Jkb(a,0);Oub(B,sgb(a.c.length));A=Sub(B,0);r=RD(evb(A),17).a;Oub(w,m);v=Sub(w,0);u=0;while(j.b<j.d.gc()){if(j.b==r){H=c.b;u=Kfb(UD(evb(v)));r=RD(evb(A),17).a}h=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),27));s=h.f;Ayd(h,u);p=u;if(j.b==r){q=k-H-c.c;t=h.g;Cyd(h,q);Jsd(h,new rjd(q,p),new rjd(t,s))}H+=h.g+b}}return new rjd(k,F)} +function h0b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;b.Ug('Compound graph postprocessor',1);c=Heb(TD(mQb(a,(yCc(),mCc))));h=RD(mQb(a,(Ywc(),_vc)),229);k=new _sb;for(r=h.ec().Kc();r.Ob();){q=RD(r.Pb(),18);g=new dnb(h.cc(q));yob();_mb(g,new M0b(a));v=H0b((tFb(0,g.c.length),RD(g.c[0],249)));A=I0b(RD(Vmb(g,g.c.length-1),249));t=v.i;n2b(A.i,t)?(s=t.e):(s=Y2b(t));l=i0b(q,g);Xub(q.a);m=null;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),249);p=new pjd;e2b(p,e.a,s);n=e.b;d=new Ejd;Ajd(d,0,n.a);Cjd(d,p);u=new sjd(K3b(n.c));w=new sjd(K3b(n.d));$id(u,p);$id(w,p);if(m){d.b==0?(o=w):(o=(sFb(d.b!=0),RD(d.a.a.c,8)));B=$wnd.Math.abs(m.a-o.a)>Vze;C=$wnd.Math.abs(m.b-o.b)>Vze;(!c&&B&&C||c&&(B||C))&&Mub(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sFb(d.b!=0),RD(d.c.b.c,8)));j0b(n,l,p);if(I0b(e)==A){if(Y2b(A.i)!=e.a){p=new pjd;e2b(p,Y2b(A.i),s)}pQb(q,Wwc,p)}k0b(n,q,s);k.a.zc(n,k)}Y0b(q,v);Z0b(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=RD(j.Pb(),18);Y0b(i,null);Z0b(i,null)}b.Vg()} +function lXc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=RD(mQb(a,(h_c(),H$c)),88);k=e==(Cmd(),ymd)||e==zmd?xmd:zmd;c=RD(zDb(CDb(new SDb(null,new Swb(a.b,16)),new $Xc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);i=RD(zDb(GDb(c.Oc(),new aYc(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);i.Gc(RD(zDb(GDb(c.Oc(),new cYc(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),16));i.jd(new eYc(k));m=new yAb(new iYc(e));d=new Tsb;for(h=i.Kc();h.Ob();){g=RD(h.Pb(),240);j=RD(g.a,39);if(Heb(TD(g.c))){m.a.zc(j,(Geb(),Eeb))==null;(new zAb(m.a.Zc(j,false))).a.gc()>0&&Zjb(d,j,RD((new zAb(m.a.Zc(j,false))).a.Vc(),39));(new zAb(m.a.ad(j,true))).a.gc()>1&&Zjb(d,nXc(m,j),j)}else{if((new zAb(m.a.Zc(j,false))).a.gc()>0){f=RD((new zAb(m.a.Zc(j,false))).a.Vc(),39);dE(f)===dE(Wd(qtb(d.f,j)))&&RD(mQb(j,(q$c(),TZc)),15).Fc(f)}if((new zAb(m.a.ad(j,true))).a.gc()>1){l=nXc(m,j);dE(Wd(qtb(d.f,l)))===dE(j)&&RD(mQb(l,(q$c(),TZc)),15).Fc(j)}m.a.Bc(j)!=null}}} +function BTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return RD(a.Xb(0),235)}else if(a.gc()<=0){return new gUb}for(e=a.Kc();e.Ob();){c=RD(e.Pb(),235);o=0;k=lve;l=lve;i=qwe;j=qwe;for(n=new Anb(c.e);n.a<n.c.c.length;){m=RD(ynb(n),153);o+=RD(mQb(m,(yVb(),lVb)),17).a;k=$wnd.Math.min(k,m.d.a-m.e.a/2);l=$wnd.Math.min(l,m.d.b-m.e.b/2);i=$wnd.Math.max(i,m.d.a+m.e.a/2);j=$wnd.Math.max(j,m.d.b+m.e.b/2)}pQb(c,(yVb(),lVb),sgb(o));pQb(c,(JVb(),GVb),new rjd(k,l));pQb(c,FVb,new rjd(i,j))}yob();a.jd(new FTb);p=new gUb;kQb(p,RD(a.Xb(0),96));h=0;s=0;for(f=a.Kc();f.Ob();){c=RD(f.Pb(),235);q=ojd(ajd(RD(mQb(c,(JVb(),FVb)),8)),RD(mQb(c,GVb),8));h=$wnd.Math.max(h,q.a);s+=q.a*q.b}h=$wnd.Math.max(h,$wnd.Math.sqrt(s)*Kfb(UD(mQb(p,(yVb(),ZUb)))));r=Kfb(UD(mQb(p,rVb)));t=0;u=0;g=0;b=r;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),235);q=ojd(ajd(RD(mQb(c,(JVb(),FVb)),8)),RD(mQb(c,GVb),8));if(t+q.a>h){t=0;u+=g+r;g=0}ATb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function Aqe(a){zqe();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=Ahb(a);o=Dqe(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return $C(gE,YHe,28,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=$C(gE,YHe,28,p*3,15,1);for(;n<p-1;n++){if(!Cqe(g=f[k++])||!Cqe(h=f[k++])||!Cqe(i=f[k++])||!Cqe(j=f[k++]))return null;b=xqe[g];c=xqe[h];d=xqe[i];e=xqe[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!Cqe(g=f[k++])||!Cqe(h=f[k++])){return null}b=xqe[g];c=xqe[h];i=f[k++];j=f[k++];if(xqe[i]==-1||xqe[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=$C(gE,YHe,28,n*3+1,15,1);hib(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=xqe[i];if((d&3)!=0)return null;q=$C(gE,YHe,28,n*3+2,15,1);hib(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=xqe[i];e=xqe[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function wfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;b.Ug(qBe,1);o=RD(mQb(a,(yCc(),yAc)),223);for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);j=t2b(d.a);for(g=j,h=0,i=g.length;h<i;++h){f=g[h];if(f.k!=(r3b(),q3b)){continue}if(o==(Ymd(),Wmd)){for(l=new Anb(f.j);l.a<l.c.c.length;){k=RD(ynb(l),12);k.e.c.length==0||zfc(k);k.g.c.length==0||Afc(k)}}else if(ZD(mQb(f,(Ywc(),Awc)),18)){q=RD(mQb(f,Awc),18);r=RD(e3b(f,(qpd(),ppd)).Kc().Pb(),12);s=RD(e3b(f,Xod).Kc().Pb(),12);t=RD(mQb(r,Awc),12);u=RD(mQb(s,Awc),12);Y0b(q,u);Z0b(q,t);v=new sjd(s.i.n);v.a=xjd(cD(WC(l3,1),Nve,8,0,[u.i.n,u.n,u.a])).a;Mub(q.a,v);v=new sjd(r.i.n);v.a=xjd(cD(WC(l3,1),Nve,8,0,[t.i.n,t.n,t.a])).a;Mub(q.a,v)}else{if(f.j.c.length>=2){p=true;m=new Anb(f.j);c=RD(ynb(m),12);n=null;while(m.a<m.c.c.length){n=c;c=RD(ynb(m),12);if(!pb(mQb(n,Awc),mQb(c,Awc))){p=false;break}}}else{p=false}for(l=new Anb(f.j);l.a<l.c.c.length;){k=RD(ynb(l),12);k.e.c.length==0||xfc(k,p);k.g.c.length==0||yfc(k,p)}}g3b(f,null)}}b.Vg()} +function LQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new Anb(a.a.b);h.a<h.c.c.length;){f=RD(ynb(h),30);for(t=new Anb(f.a);t.a<t.c.c.length;){s=RD(ynb(t),10);b.g[s.p]=s;b.a[s.p]=s;b.d[s.p]=0}}i=a.a.b;b.c==(wQc(),uQc)&&(i=hv(i));for(g=i.Kc();g.Ob();){f=RD(g.Pb(),30);n=-1;m=f.a;if(b.o==(EQc(),DQc)){n=lve;m=hv(m)}for(v=m.Kc();v.Ob();){u=RD(v.Pb(),10);l=null;b.c==uQc?(l=RD(Vmb(a.b.f,u.p),15)):(l=RD(Vmb(a.b.b,u.p),15));if(l.gc()>0){d=l.gc();j=eE($wnd.Math.floor((d+1)/2))-1;e=eE($wnd.Math.ceil((d+1)/2))-1;if(b.o==DQc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=RD(l.Xb(k),42);o=RD(p.a,10);if(!Zsb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Geb(),Heb(b.f[b.g[u.p].p])&u.k==(r3b(),o3b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=RD(l.Xb(k),42);q=RD(r.a,10);if(!Zsb(c,r.b)&&n<a.b.e[q.p]){b.a[q.p]=u;b.g[u.p]=b.g[q.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Geb(),Heb(b.f[b.g[u.p].p])&u.k==(r3b(),o3b)?true:false);n=a.b.e[q.p]}}}}}}}} +function iOc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=a.c[(tFb(0,b.c.length),RD(b.c[0],18)).p];A=a.c[(tFb(1,b.c.length),RD(b.c[1],18)).p];if(t.a.e.e-t.a.a-(t.b.e.e-t.b.a)==0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)==0){return false}r=t.b.e.f;if(!ZD(r,10)){return false}q=RD(r,10);v=a.i[q.p];w=!q.c?-1:Wmb(q.c.a,q,0);f=oxe;if(w>0){e=RD(Vmb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(bFc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=oxe;if(w<q.c.a.c.length-1){i=RD(Vmb(q.c.a,w+1),10);k=a.i[i.p];B=$wnd.Math.ceil(bFc(a.n,i,q));j=k.a.e-i.d.d-(v.a.e+q.o.b+q.d.a)-B}if(c&&(Zy(),bz(vEe),$wnd.Math.abs(f-j)<=vEe||f==j||isNaN(f)&&isNaN(j))){return true}d=GOc(t.a);h=-GOc(t.b);l=-GOc(A.a);s=GOc(A.b);p=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)>0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.a<A.b.e.e+A.a.a;m=t.a.e.e+t.b.a>A.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function OJb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new Uid(b.Lf().a,b.Lf().b,b.Mf().a,b.Mf().b);e=new Tid;if(a.c){for(g=new Anb(b.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);e.c=f.Lf().a+b.Lf().a;e.d=f.Lf().b+b.Lf().b;e.b=f.Mf().a;e.a=f.Mf().b;Sid(d,e)}}for(j=new Anb(b.Xf());j.a<j.c.c.length;){i=RD(ynb(j),852);k=i.Lf().a+b.Lf().a;l=i.Lf().b+b.Lf().b;if(a.e){e.c=k;e.d=l;e.b=i.Mf().a;e.a=i.Mf().b;Sid(d,e)}if(a.d){for(g=new Anb(i.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);e.c=f.Lf().a+k;e.d=f.Lf().b+l;e.b=f.Mf().a;e.a=f.Mf().b;Sid(d,e)}}if(a.b){m=new rjd(-c,-c);if(RD(b.of((umd(),Lld)),181).Hc((Pod(),Nod))){for(g=new Anb(i.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);m.a+=f.Mf().a+c;m.b+=f.Mf().b+c}}m.a=$wnd.Math.max(m.a,0);m.b=$wnd.Math.max(m.b,0);MJb(d,i.Wf(),i.Uf(),b,i,m,c)}}a.b&&MJb(d,b.Wf(),b.Uf(),b,null,null,c);h=new S2b(b.Vf());h.d=$wnd.Math.max(0,b.Lf().b-d.d);h.a=$wnd.Math.max(0,d.d+d.a-(b.Lf().b+b.Mf().b));h.b=$wnd.Math.max(0,b.Lf().a-d.c);h.c=$wnd.Math.max(0,d.c+d.b-(b.Lf().a+b.Mf().a));b.Zf(h)} +function Mz(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} +function zVb(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,Zze),'ELK Force'),'Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported.'),new CVb),Zze),ysb((aGd(),ZFd),cD(WC(T5,1),jwe,245,0,[XFd])))));Agd(a,Zze,$ze,sgb(1));Agd(a,Zze,_ze,80);Agd(a,Zze,aAe,5);Agd(a,Zze,Dze,Yze);Agd(a,Zze,bAe,sgb(1));Agd(a,Zze,cAe,(Geb(),true));Agd(a,Zze,Eze,iVb);Agd(a,Zze,dAe,iGd(_Ub));Agd(a,Zze,eAe,iGd(jVb));Agd(a,Zze,fAe,false);Agd(a,Zze,gAe,iGd(gVb));Agd(a,Zze,hAe,iGd(eVb));Agd(a,Zze,iAe,iGd(fVb));Agd(a,Zze,jAe,iGd(dVb));Agd(a,Zze,kAe,iGd(cVb));Agd(a,Zze,lAe,iGd(kVb));Agd(a,Zze,Rze,iGd(bVb));Agd(a,Zze,Uze,iGd(sVb));Agd(a,Zze,Sze,iGd(aVb));Agd(a,Zze,Wze,iGd(nVb));Agd(a,Zze,Tze,iGd(oVb));Agd(a,Zze,mAe,iGd(vVb));Agd(a,Zze,nAe,iGd(xVb));Agd(a,Zze,oAe,iGd(uVb));Agd(a,Zze,pAe,iGd(tVb));Agd(a,Zze,qAe,wVb)} +function hte(a,b){Vse();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(bkb(wse)==0){l=$C(qdb,Nve,122,yse.length,0,1);for(g=0;g<l.length;g++){l[g]=(++Use,new xte(4))}d=new Rhb;for(f=0;f<vse.length;f++){k=(++Use,new xte(4));if(f<84){h=f*2;n=(BFb(h,XLe.length),XLe.charCodeAt(h));m=(BFb(h+1,XLe.length),XLe.charCodeAt(h+1));rte(k,n,m)}else{h=(f-84)*2;rte(k,zse[h],zse[h+1])}i=vse[f];lhb(i,'Specials')&&rte(k,65520,65533);if(lhb(i,VLe)){rte(k,983040,1048573);rte(k,1048576,1114109)}$jb(wse,i,k);$jb(xse,i,yte(k));j=d.a.length;0<j?(d.a=zhb(d.a,0,0)):0>j&&(d.a+=Hhb($C(hE,zwe,28,-j,15,1)));d.a+='Is';if(qhb(i,Fhb(32))>=0){for(e=0;e<i.length;e++){BFb(e,i.length);i.charCodeAt(e)!=32&&Jhb(d,(BFb(e,i.length),i.charCodeAt(e)))}}else{d.a+=''+i}lte(d.a,i,true)}lte(WLe,'Cn',false);lte(YLe,'Cn',true);c=(++Use,new xte(4));rte(c,0,MLe);$jb(wse,'ALL',c);$jb(xse,'ALL',yte(c));!Ase&&(Ase=new Tsb);$jb(Ase,WLe,WLe);!Ase&&(Ase=new Tsb);$jb(Ase,YLe,YLe);!Ase&&(Ase=new Tsb);$jb(Ase,'ALL','ALL')}o=b?RD(Xjb(wse,a),138):RD(Xjb(xse,a),138);return o} +function i_c(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,ZEe),'ELK Mr. Tree'),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new l_c),$Ee),xsb((aGd(),WFd)))));Agd(a,ZEe,Eze,U$c);Agd(a,ZEe,_ze,20);Agd(a,ZEe,ADe,3);Agd(a,ZEe,Dze,Yze);Agd(a,ZEe,$ze,sgb(1));Agd(a,ZEe,cAe,(Geb(),true));Agd(a,ZEe,LDe,iGd(G$c));Agd(a,ZEe,PDe,I$c);Agd(a,ZEe,dAe,iGd(L$c));Agd(a,ZEe,iEe,iGd(M$c));Agd(a,ZEe,jAe,iGd(O$c));Agd(a,ZEe,hAe,iGd(P$c));Agd(a,ZEe,CAe,iGd(Q$c));Agd(a,ZEe,iAe,iGd(R$c));Agd(a,ZEe,kAe,iGd(N$c));Agd(a,ZEe,gAe,iGd(S$c));Agd(a,ZEe,lAe,iGd(V$c));Agd(a,ZEe,VEe,iGd(g_c));Agd(a,ZEe,XEe,iGd(Y$c));Agd(a,ZEe,mAe,iGd(c_c));Agd(a,ZEe,nAe,iGd(e_c));Agd(a,ZEe,oAe,iGd(b_c));Agd(a,ZEe,pAe,iGd(a_c));Agd(a,ZEe,qAe,d_c);Agd(a,ZEe,UEe,iGd(W$c));Agd(a,ZEe,WEe,iGd(K$c));Agd(a,ZEe,TEe,iGd(f_c));Agd(a,ZEe,REe,iGd(F$c));Agd(a,ZEe,SEe,iGd(J$c))} +function rNb(a,b){var c,d,e,f,g,h,i,j,k,l,m;j=RD(RD(Qc(a.r,b),21),87);g=UMb(a,b);c=a.u.Hc((Pod(),Jod));for(i=j.Kc();i.Ob();){h=RD(i.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}m=h.b.Mf();k=h.c;l=k.i;l.b=(f=k.n,k.e.a+f.b+f.c);l.a=(e=k.n,k.e.b+e.d+e.a);switch(b.g){case 1:if(h.a){l.c=(m.a-l.b)/2;RKb(k,(EKb(),BKb))}else if(g||c){l.c=-l.b-a.s;RKb(k,(EKb(),DKb))}else{l.c=m.a+a.s;RKb(k,(EKb(),CKb))}l.d=-l.a-a.t;SKb(k,(vLb(),sLb));break;case 3:if(h.a){l.c=(m.a-l.b)/2;RKb(k,(EKb(),BKb))}else if(g||c){l.c=-l.b-a.s;RKb(k,(EKb(),DKb))}else{l.c=m.a+a.s;RKb(k,(EKb(),CKb))}l.d=m.b+a.t;SKb(k,(vLb(),uLb));break;case 2:if(h.a){d=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(m.b-d)/2;SKb(k,(vLb(),tLb))}else if(g||c){l.d=-l.a-a.t;SKb(k,(vLb(),sLb))}else{l.d=m.b+a.t;SKb(k,(vLb(),uLb))}l.c=m.a+a.s;RKb(k,(EKb(),CKb));break;case 4:if(h.a){d=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(m.b-d)/2;SKb(k,(vLb(),tLb))}else if(g||c){l.d=-l.a-a.t;SKb(k,(vLb(),sLb))}else{l.d=m.b+a.t;SKb(k,(vLb(),uLb))}l.c=-l.b-a.s;RKb(k,(EKb(),DKb));}g=false}} +function t6b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;m=false;l=false;if(Dod(RD(mQb(d,(yCc(),BBc)),101))){g=false;h=false;t:for(o=new Anb(d.j);o.a<o.c.c.length;){n=RD(ynb(o),12);for(q=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(n),new _3b(n)])));gs(q);){p=RD(hs(q),12);if(!Heb(TD(mQb(p.i,Uzc)))){if(n.j==(qpd(),Yod)){g=true;break t}if(n.j==npd){h=true;break t}}}}m=h&&!g;l=g&&!h}if(!m&&!l&&d.b.c.length!=0){k=0;for(j=new Anb(d.b);j.a<j.c.c.length;){i=RD(ynb(j),72);k+=i.n.b+i.o.b/2}k/=d.b.c.length;s=k>=d.o.b/2}else{s=!l}if(s){r=RD(mQb(d,(Ywc(),Xwc)),15);if(!r){f=new bnb;pQb(d,Xwc,f)}else if(m){f=r}else{e=RD(mQb(d,Vvc),15);if(!e){f=new bnb;pQb(d,Vvc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=RD(mQb(d,(Ywc(),Vvc)),15);if(!e){f=new bnb;pQb(d,Vvc,f)}else if(l){f=e}else{r=RD(mQb(d,Xwc),15);if(!r){f=new bnb;pQb(d,Xwc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);pQb(a,(Ywc(),Xvc),c);if(b.d==c){Z0b(b,null);c.e.c.length+c.g.c.length==0&&P3b(c,null);u6b(c)}else{Y0b(b,null);c.e.c.length+c.g.c.length==0&&P3b(c,null)}Xub(b.a)} +function GHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;c.Ug('MinWidth layering',1);n=b.b;A=b.a;I=RD(mQb(b,(yCc(),WAc)),17).a;h=RD(mQb(b,XAc),17).a;a.b=Kfb(UD(mQb(b,TBc)));a.d=oxe;for(u=new Anb(A);u.a<u.c.c.length;){s=RD(ynb(u),10);if(s.k!=(r3b(),p3b)){continue}D=s.o.b;a.d=$wnd.Math.min(a.d,D)}a.d=$wnd.Math.max(1,a.d);B=A.c.length;a.c=$C(kE,Pwe,28,B,15,1);a.f=$C(kE,Pwe,28,B,15,1);a.e=$C(iE,vxe,28,B,15,1);j=0;a.a=0;for(v=new Anb(A);v.a<v.c.c.length;){s=RD(ynb(v),10);s.p=j++;a.c[s.p]=EHc(Z2b(s));a.f[s.p]=EHc(a3b(s));a.e[s.p]=s.o.b/a.d;a.a+=a.e[s.p]}a.b/=a.d;a.a/=B;w=FHc(A);_mb(A,Fob(new MHc(a)));p=oxe;o=lve;g=null;H=I;G=I;f=h;e=h;if(I<0){H=RD(BHc.a.Id(),17).a;G=RD(BHc.b.Id(),17).a}if(h<0){f=RD(AHc.a.Id(),17).a;e=RD(AHc.b.Id(),17).a}for(F=H;F<=G;F++){for(d=f;d<=e;d++){C=DHc(a,F,d,A,w);r=Kfb(UD(C.a));m=RD(C.b,15);q=m.gc();if(r<p||r==p&&q<o){p=r;o=q;g=m}}}for(l=g.Kc();l.Ob();){k=RD(l.Pb(),15);i=new R4b(b);for(t=k.Kc();t.Ob();){s=RD(t.Pb(),10);g3b(s,i)}ZEb(n.c,i)}Eob(n);A.c.length=0;c.Vg()} +function UUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c.Ug('Spline edge routing',1);if(b.b.c.length==0){b.f.a=0;c.Vg();return}s=Kfb(UD(mQb(b,(yCc(),cCc))));h=Kfb(UD(mQb(b,XBc)));g=Kfb(UD(mQb(b,UBc)));r=RD(mQb(b,DAc),350);B=r==(lFc(),kFc);A=Kfb(UD(mQb(b,EAc)));a.d=b;a.j.c.length=0;a.a.c.length=0;akb(a.k);i=RD(Vmb(b.b,0),30);k=ar(i.a,(dSc(),bSc));o=RD(Vmb(b.b,b.b.c.length-1),30);l=ar(o.a,bSc);p=new Anb(b.b);q=null;G=0;do{t=p.a<p.c.c.length?RD(ynb(p),30):null;IUc(a,q,t);LUc(a);C=cwb(nDb(IDb(CDb(new SDb(null,new Swb(a.i,16)),new jVc),new lVc)));F=0;u=G;m=!q||k&&q==i;n=!t||l&&t==o;if(C>0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,JUc(t,g,s,A)));if(j<s&&!m&&!n){F=(s-j)/2;j=s}u+=j}else !m&&!n&&(u+=s);!!t&&p2b(t,u);for(w=new Anb(a.i);w.a<w.c.c.length;){v=RD(ynb(w),131);v.a.c=G;v.a.b=u-G;v.F=F;v.p=!q}Tmb(a.a,a.i);G=u;!!t&&(G+=t.c.a);q=t;m=n}while(t);for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),18);f=PUc(a,d);pQb(d,(Ywc(),Rwc),f);D=RUc(a,d);pQb(d,Twc,D)}b.f.a=G;a.d=null;c.Vg()} +function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;a.b=b;a.a=RD(mQb(b,(yCc(),JAc)),17).a;a.c=RD(mQb(b,LAc),17).a;a.c==0&&(a.c=lve);q=new Jkb(b.b,0);while(q.b<q.d.gc()){p=(sFb(q.b<q.d.gc()),RD(q.d.Xb(q.c=q.b++),30));h=new bnb;k=-1;u=-1;for(t=new Anb(p.a);t.a<t.c.c.length;){s=RD(ynb(t),10);if(Kr((U9b(),new is(Mr(W2b(s).a.Kc(),new ir))))>=a.a){d=V9b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Rmb(h,new Ptd(s,d))}}B=new bnb;for(j=0;j<k;++j){Qmb(B,0,(sFb(q.b>0),q.a.Xb(q.c=--q.b),C=new R4b(a.b),Ikb(q,C),sFb(q.b<q.d.gc()),q.d.Xb(q.c=q.b++),C))}for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),42);n=RD(e.b,580).a;if(!n){continue}for(m=new Anb(n);m.a<m.c.c.length;){l=RD(ynb(m),10);Y9b(a,l,S9b,B)}}c=new bnb;for(i=0;i<u;++i){Rmb(c,(D=new R4b(a.b),Ikb(q,D),D))}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),42);A=RD(e.b,580).c;if(!A){continue}for(w=new Anb(A);w.a<w.c.c.length;){v=RD(ynb(w),10);Y9b(a,v,T9b,c)}}}r=new Jkb(b.b,0);while(r.b<r.d.gc()){o=(sFb(r.b<r.d.gc()),RD(r.d.Xb(r.c=r.b++),30));o.a.c.length==0&&Ckb(r)}} +function wLd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;p=a.i!=0;t=false;r=null;if(Mvd(a.e)){k=b.gc();if(k>0){m=k<100?null:new gLd(k);j=new $Hd(b);o=j.g;r=$C(kE,Pwe,28,k,15,1);d=0;u=new ZHd(k);for(e=0;e<a.i;++e){h=a.g[e];n=h;v:for(s=0;s<2;++s){for(i=k;--i>=0;){if(n!=null?pb(n,o[i]):dE(n)===dE(o[i])){if(r.length<=d){q=r;r=$C(kE,Pwe,28,2*r.length,15,1);hib(q,0,r,0,d)}r[d++]=e;WGd(u,o[i]);break v}}n=n;if(dE(n)===dE(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=$C(kE,Pwe,28,d,15,1);hib(q,0,r,0,d)}if(d>0){t=true;for(f=0;f<d;++f){n=o[f];m=Kge(a,RD(n,76),m)}for(g=d;--g>=0;){THd(a,r[g])}if(d!=k){for(e=k;--e>=d;){THd(j,e)}q=r;r=$C(kE,Pwe,28,d,15,1);hib(q,0,r,0,d)}b=j}}}else{b=aHd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){THd(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?dZd(a,4,b.Kc().Pb(),null,r[0],p):dZd(a,6,b,r,r[0],p);m=c<100?null:new gLd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=oge(a,RD(n,76),m)}if(!m){qvd(a.e,l)}else{m.nj(l);m.oj()}}else{m=tLd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=oge(a,RD(n,76),m)}!!m&&m.oj()}return true}else{return false}} +function i_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new p_b(b);c.a||b_b(b);j=a_b(b);i=new Tp;q=new D_b;for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);for(e=new is(Mr(a3b(o).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(d.c.i.k==(r3b(),m3b)||d.d.i.k==m3b){k=h_b(a,d,j,q);Rc(i,f_b(k.d),k.a)}}}g=new bnb;for(t=RD(mQb(c.c,(Ywc(),ewc)),21).Kc();t.Ob();){s=RD(t.Pb(),64);n=q.c[s.g];m=q.b[s.g];h=q.a[s.g];f=null;r=null;switch(s.g){case 4:f=new Uid(a.d.a,n,j.b.a-a.d.a,m-n);r=new Uid(a.d.a,n,h,m-n);l_b(j,new rjd(f.c+f.b,f.d));l_b(j,new rjd(f.c+f.b,f.d+f.a));break;case 2:f=new Uid(j.a.a,n,a.c.a-j.a.a,m-n);r=new Uid(a.c.a-h,n,h,m-n);l_b(j,new rjd(f.c,f.d));l_b(j,new rjd(f.c,f.d+f.a));break;case 1:f=new Uid(n,a.d.b,m-n,j.b.b-a.d.b);r=new Uid(n,a.d.b,m-n,h);l_b(j,new rjd(f.c,f.d+f.a));l_b(j,new rjd(f.c+f.b,f.d+f.a));break;case 3:f=new Uid(n,j.a.b,m-n,a.c.b-j.a.b);r=new Uid(n,a.c.b-h,m-n,h);l_b(j,new rjd(f.c,f.d));l_b(j,new rjd(f.c+f.b,f.d));}if(f){l=new y_b;l.d=s;l.b=f;l.c=r;l.a=Ux(RD(Qc(i,f_b(s)),21));ZEb(g.c,l)}}Tmb(c.b,g);c.d=DZb(LZb(j));return c} +function PQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(c.p[b.p]!=null){return}h=true;c.p[b.p]=0;g=b;p=c.o==(EQc(),CQc)?pxe:oxe;do{e=a.b.e[g.p];f=g.c.a.c.length;if(c.o==CQc&&e>0||c.o==DQc&&e<f-1){i=null;j=null;c.o==DQc?(i=RD(Vmb(g.c.a,e+1),10)):(i=RD(Vmb(g.c.a,e-1),10));j=c.g[i.p];PQc(a,j,c);p=a.e.wg(p,b,g);c.j[b.p]==b&&(c.j[b.p]=c.j[j.p]);if(c.j[b.p]==c.j[j.p]){o=bFc(a.d,g,i);if(c.o==DQc){d=Kfb(c.p[b.p]);l=Kfb(c.p[j.p])+Kfb(c.d[i.p])-i.d.d-o-g.d.a-g.o.b-Kfb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.min(l,p)}else{c.p[b.p]=$wnd.Math.min(d,$wnd.Math.min(l,p))}}else{d=Kfb(c.p[b.p]);l=Kfb(c.p[j.p])+Kfb(c.d[i.p])+i.o.b+i.d.a+o+g.d.d-Kfb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.max(l,p)}else{c.p[b.p]=$wnd.Math.max(d,$wnd.Math.max(l,p))}}}else{o=Kfb(UD(mQb(a.a,(yCc(),bCc))));n=NQc(a,c.j[b.p]);k=NQc(a,c.j[j.p]);if(c.o==DQc){m=Kfb(c.p[b.p])+Kfb(c.d[g.p])+g.o.b+g.d.a+o-(Kfb(c.p[j.p])+Kfb(c.d[i.p])-i.d.d);TQc(n,k,m)}else{m=Kfb(c.p[b.p])+Kfb(c.d[g.p])-g.d.d-Kfb(c.p[j.p])-Kfb(c.d[i.p])-i.o.b-i.d.a-o;TQc(n,k,m)}}}else{p=a.e.wg(p,b,g)}g=c.a[g.p]}while(g!=b);qRc(a.e,b)} +function $Kc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Kfb(UD(mQb(a.a.j,(yCc(),iAc))));if(c<-1||!a.a.i||Cod(RD(mQb(a.a.o,BBc),101))||b3b(a.a.o,(qpd(),Xod)).gc()<2&&b3b(a.a.o,ppd).gc()<2){return true}if(a.a.c.kg()){return false}v=0;u=0;t=new bnb;for(i=a.a.e,j=0,k=i.length;j<k;++j){h=i[j];for(m=h,n=0,p=m.length;n<p;++n){l=m[n];if(l.k==(r3b(),q3b)){ZEb(t.c,l);continue}d=a.b[l.c.p][l.p];if(l.k==m3b){d.b=1;RD(mQb(l,(Ywc(),Awc)),12).j==(qpd(),Xod)&&(u+=d.a)}else{C=b3b(l,(qpd(),ppd));C.dc()||!br(C,new lLc)?(d.c=1):(e=b3b(l,Xod),(e.dc()||!br(e,new hLc))&&(v+=d.a))}for(g=new is(Mr(a3b(l).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);v+=d.c;u+=d.b;B=f.d.i;ZKc(a,d,B)}r=Al(cD(WC(cJ,1),rve,20,0,[b3b(l,(qpd(),Yod)),b3b(l,npd)]));for(A=new is(new Il(r.a.length,r.a));gs(A);){w=RD(hs(A),12);s=RD(mQb(w,(Ywc(),Iwc)),10);if(s){v+=d.c;u+=d.b;ZKc(a,d,s)}}}for(o=new Anb(t);o.a<o.c.c.length;){l=RD(ynb(o),10);d=a.b[l.c.p][l.p];for(g=new is(Mr(a3b(l).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);v+=d.c;u+=d.b;B=f.d.i;ZKc(a,d,B)}}t.c.length=0}b=v+u;q=b==0?oxe:(v-u)/b;return q>=c} +function zEd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;t=b;s=new Tp;u=new Tp;k=wDd(t,mIe);d=new OEd(a,c,s,u);QDd(d.a,d.b,d.c,d.d,k);i=(A=s.i,!A?(s.i=new zf(s,s.c)):A);for(C=i.Kc();C.Ob();){B=RD(C.Pb(),166);e=RD(Qc(s,B),21);for(p=e.Kc();p.Ob();){o=p.Pb();v=RD(Ao(a.d,o),166);if(v){h=(!B.e&&(B.e=new Yie(F4,B,10,9)),B.e);WGd(h,v)}else{g=zDd(t,uIe);m=AIe+o+BIe+g;n=m+zIe;throw Adb(new CDd(n))}}}j=(w=u.i,!w?(u.i=new zf(u,u.c)):w);for(F=j.Kc();F.Ob();){D=RD(F.Pb(),166);f=RD(Qc(u,D),21);for(r=f.Kc();r.Ob();){q=r.Pb();v=RD(Ao(a.d,q),166);if(v){l=(!D.g&&(D.g=new Yie(F4,D,9,10)),D.g);WGd(l,v)}else{g=zDd(t,uIe);m=AIe+q+BIe+g;n=m+zIe;throw Adb(new CDd(n))}}}!c.b&&(c.b=new Yie(E4,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new Yie(E4,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new Yie(E4,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new Yie(E4,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new C5d(F4,c,6,6)),c.a).i==1){G=RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166);if(!Dzd(G)&&!Ezd(G)){Kzd(G,RD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),84));Lzd(G,RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84))}}} +function QNc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;for(t=a.a,u=0,v=t.length;u<v;++u){s=t[u];j=lve;k=lve;for(o=new Anb(s.e);o.a<o.c.c.length;){m=RD(ynb(o),10);g=!m.c?-1:Wmb(m.c.a,m,0);if(g>0){l=RD(Vmb(m.c.a,g-1),10);B=bFc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(g<m.c.a.c.length-1){l=RD(Vmb(m.c.a,g+1),10);B=bFc(a.b,m,l);r=l.n.b-l.d.d-(m.n.b+m.o.b+m.d.a+B)}else{r=2*m.n.b}k=$wnd.Math.min(r,k)}i=lve;f=false;e=RD(Vmb(s.e,0),10);for(D=new Anb(e.j);D.a<D.c.c.length;){C=RD(ynb(D),12);p=e.n.b+C.n.b+C.a.b;for(d=new Anb(C.e);d.a<d.c.c.length;){c=RD(ynb(d),18);w=c.c;b=w.i.n.b+w.n.b+w.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}h=RD(Vmb(s.e,s.e.c.length-1),10);for(A=new Anb(h.j);A.a<A.c.c.length;){w=RD(ynb(A),12);p=h.n.b+w.n.b+w.a.b;for(d=new Anb(w.g);d.a<d.c.c.length;){c=RD(ynb(d),18);C=c.d;b=C.i.n.b+C.n.b+C.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}if(f&&i!=0){for(n=new Anb(s.e);n.a<n.c.c.length;){m=RD(ynb(n),10);m.n.b+=i}}}} +function vac(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new bnb;e=lve;f=lve;g=lve;if(c){e=a.f.a;for(p=new Anb(b.j);p.a<p.c.c.length;){o=RD(ynb(p),12);for(i=new Anb(o.g);i.a<i.c.c.length;){h=RD(ynb(i),18);if(h.a.b!=0){k=RD(Qub(h.a),8);if(k.a<e){f=e-k.a;g=lve;d.c.length=0;e=k.a}if(k.a<=e){ZEb(d.c,h);h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(RD(ju(h.a,1),8).b-k.b)))}}}}}else{for(p=new Anb(b.j);p.a<p.c.c.length;){o=RD(ynb(p),12);for(i=new Anb(o.e);i.a<i.c.c.length;){h=RD(ynb(i),18);if(h.a.b!=0){m=RD(Rub(h.a),8);if(m.a>e){f=m.a-e;g=lve;d.c.length=0;e=m.a}if(m.a>=e){ZEb(d.c,h);h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(RD(ju(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new R3b;P3b(n,b);Q3b(n,(qpd(),Yod));n.n.a=b.o.a/2;r=new R3b;P3b(r,b);Q3b(r,npd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new Anb(d);i.a<i.c.c.length;){h=RD(ynb(i),18);if(c){j=RD(Uub(h.a),8);q=h.a.b==0?K3b(h.d):RD(Qub(h.a),8);q.b>=j.b?Y0b(h,r):Y0b(h,n)}else{j=RD(Vub(h.a),8);q=h.a.b==0?K3b(h.c):RD(Rub(h.a),8);q.b>=j.b?Z0b(h,r):Z0b(h,n)}l=RD(mQb(h,(yCc(),RAc)),75);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} +function E0c(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(h=Sub(a.b,0);h.b!=h.d.c;){g=RD(evb(h),39);if(lhb(g.c,IEe)){continue}j=iWc(g,a);b==(Cmd(),ymd)||b==zmd?_mb(j,new D1c):_mb(j,new H1c);i=j.c.length;for(d=0;d<i;d++){k=(tFb(d,j.c.length),RD(j.c[d],65)).c;lhb(k.c,'n11')&&o0;if(Heb(TD(mQb(g,(q$c(),UZc))))&&!mWc((tFb(d,j.c.length),RD(j.c[d],65)),a)){continue}e=i==1?0.5:(d+1)/(i+1);if(b==ymd){f=Kfb(UD(mQb(g,f$c)));m=g.e.b+g.f.b*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd($wnd.Math.min(f,g.e.a-c),m));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(g.e.a,m))}else if(b==zmd){f=Kfb(UD(mQb(g,e$c)))+c;m=g.e.b+g.f.b*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(f,m));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(g.e.a+g.f.a,m))}else if(b==Bmd){f=Kfb(UD(mQb(g,f$c)));l=g.e.a+g.f.a*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,$wnd.Math.min(g.e.b-c,f)));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,g.e.b))}else{f=Kfb(UD(mQb(g,e$c)))+c;l=g.e.a+g.f.a*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,f));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,g.e.b+g.f.b))}}}} +function f2b(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p;n=c;k=new j3b(i);h3b(k,(r3b(),m3b));pQb(k,(Ywc(),iwc),g);pQb(k,(yCc(),BBc),(Bod(),wod));p=Kfb(UD(a.of(ABc)));pQb(k,ABc,p);l=new R3b;P3b(l,k);if(!(b!=zod&&b!=Aod)){d>=0?(n=vpd(h)):(n=spd(vpd(h)));a.qf(GBc,n)}j=new pjd;m=false;if(a.pf(zBc)){mjd(j,RD(a.of(zBc),8));m=true}else{ljd(j,g.a/2,g.b/2)}switch(n.g){case 4:pQb(k,UAc,(cxc(),$wc));pQb(k,bwc,(huc(),guc));k.o.b=g.b;p<0&&(k.o.a=-p);Q3b(l,(qpd(),Xod));m||(j.a=g.a);j.a-=g.a;break;case 2:pQb(k,UAc,(cxc(),axc));pQb(k,bwc,(huc(),euc));k.o.b=g.b;p<0&&(k.o.a=-p);Q3b(l,(qpd(),ppd));m||(j.a=0);break;case 1:pQb(k,owc,(Gvc(),Fvc));k.o.a=g.a;p<0&&(k.o.b=-p);Q3b(l,(qpd(),npd));m||(j.b=g.b);j.b-=g.b;break;case 3:pQb(k,owc,(Gvc(),Dvc));k.o.a=g.a;p<0&&(k.o.b=-p);Q3b(l,(qpd(),Yod));m||(j.b=0);}mjd(l.n,j);pQb(k,zBc,j);if(b==vod||b==xod||b==wod){o=0;if(b==vod&&a.pf(CBc)){switch(n.g){case 1:case 2:o=RD(a.of(CBc),17).a;break;case 3:case 4:o=-RD(a.of(CBc),17).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==xod&&(o/=e.b);break;case 1:case 3:o=f.a;b==xod&&(o/=e.a);}}pQb(k,Jwc,o)}pQb(k,hwc,n);return k} +function OId(){MId();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=PId((yob(),new xpb(new glb(LId.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=PId((yob(),new xpb(new glb(LId.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=PId((yob(),new xpb(new glb(LId.d))));f.postMessage({id:b.id,data:e});break;case 'register':SId(b.algorithms);f.postMessage({id:b.id});break;case 'layout':QId(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===Yxe&&typeof self!==Yxe){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==Yxe&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function i5b(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new j3b(c);kQb(k,b);pQb(k,(Ywc(),Awc),b);k.o.a=b.g;k.o.b=b.f;k.n.a=b.i;k.n.b=b.j;Rmb(c.a,k);Zjb(a.a,b,k);((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i!=0||Heb(TD(Gxd(b,(yCc(),NAc)))))&&pQb(k,Yvc,(Geb(),true));j=RD(mQb(c,kwc),21);l=RD(mQb(k,(yCc(),BBc)),101);l==(Bod(),Aod)?pQb(k,BBc,zod):l!=zod&&j.Fc((ovc(),kvc));m=0;d=RD(mQb(c,rAc),88);for(i=new dMd((!b.c&&(b.c=new C5d(K4,b,9,9)),b.c));i.e!=i.i.gc();){h=RD(bMd(i),123);e=vCd(b);(dE(Gxd(e,cAc))!==dE((kEc(),hEc))||dE(Gxd(e,pAc))===dE((Ptc(),Otc))||dE(Gxd(e,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(e,eAc)))||dE(Gxd(e,Yzc))!==dE((U$b(),T$b))||dE(Gxd(e,ZAc))===dE((aEc(),TDc))||dE(Gxd(e,ZAc))===dE((aEc(),UDc))||dE(Gxd(e,$Ac))===dE((_Cc(),SCc))||dE(Gxd(e,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(b,aAc)))&&Ixd(h,zwc,sgb(m++));Heb(TD(Gxd(h,pBc)))||j5b(a,h,k,j,d,l)}for(g=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));g.e!=g.i.gc();){f=RD(bMd(g),135);!Heb(TD(Gxd(f,pBc)))&&!!f.a&&Rmb(k.b,h5b(f))}Heb(TD(mQb(k,Uzc)))&&j.Fc((ovc(),fvc));if(Heb(TD(mQb(k,MAc)))){j.Fc((ovc(),jvc));j.Fc(ivc);pQb(k,BBc,zod)}return k} +function ird(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),163);!!i.c&&Dsd(i.c);p=$wnd.Math.max(p,urd(i));D+=urd(i)*trd(i)}q=D/a.b.c.length;C=brd(a.b,q);D+=a.b.c.length*C;p=$wnd.Math.max(p,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;n=0;l=c.b+c.c;B=new Yub;Mub(B,sgb(0));w=new Yub;k=new Jkb(a.b,0);o=null;h=new bnb;while(k.b<k.d.gc()){i=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),163));G=urd(i);m=trd(i);if(H+G>p){if(f){Oub(w,n);Oub(B,sgb(k.b-1));Rmb(a.d,o);h.c.length=0}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}ZEb(h.c,i);xrd(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Tmb(a.a,h);Rmb(a.d,RD(Vmb(h,h.c.length-1),163));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F<e){n+=e-F;F=e}if(f){H=c.b;k=new Jkb(a.b,0);Oub(B,sgb(a.b.c.length));A=Sub(B,0);s=RD(evb(A),17).a;Oub(w,n);v=Sub(w,0);u=0;while(k.b<k.d.gc()){if(k.b==s){H=c.b;u=Kfb(UD(evb(v)));s=RD(evb(A),17).a}i=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),163));vrd(i,u);if(k.b==s){r=l-H-c.c;t=urd(i);wrd(i,r);yrd(i,(r-t)/2,0)}H+=urd(i)+b}}return new rjd(l,F)} +function zne(a){if(a.N)return;a.N=true;a.b=jBd(a,0);iBd(a.b,0);iBd(a.b,1);iBd(a.b,2);a.bb=jBd(a,1);iBd(a.bb,0);iBd(a.bb,1);a.fb=jBd(a,2);iBd(a.fb,3);iBd(a.fb,4);oBd(a.fb,5);a.qb=jBd(a,3);iBd(a.qb,0);oBd(a.qb,1);oBd(a.qb,2);iBd(a.qb,3);iBd(a.qb,4);oBd(a.qb,5);iBd(a.qb,6);a.a=kBd(a,4);a.c=kBd(a,5);a.d=kBd(a,6);a.e=kBd(a,7);a.f=kBd(a,8);a.g=kBd(a,9);a.i=kBd(a,10);a.j=kBd(a,11);a.k=kBd(a,12);a.n=kBd(a,13);a.o=kBd(a,14);a.p=kBd(a,15);a.q=kBd(a,16);a.s=kBd(a,17);a.r=kBd(a,18);a.t=kBd(a,19);a.u=kBd(a,20);a.v=kBd(a,21);a.w=kBd(a,22);a.B=kBd(a,23);a.A=kBd(a,24);a.C=kBd(a,25);a.D=kBd(a,26);a.F=kBd(a,27);a.G=kBd(a,28);a.H=kBd(a,29);a.J=kBd(a,30);a.I=kBd(a,31);a.K=kBd(a,32);a.M=kBd(a,33);a.L=kBd(a,34);a.P=kBd(a,35);a.Q=kBd(a,36);a.R=kBd(a,37);a.S=kBd(a,38);a.T=kBd(a,39);a.U=kBd(a,40);a.V=kBd(a,41);a.X=kBd(a,42);a.W=kBd(a,43);a.Y=kBd(a,44);a.Z=kBd(a,45);a.$=kBd(a,46);a._=kBd(a,47);a.ab=kBd(a,48);a.cb=kBd(a,49);a.db=kBd(a,50);a.eb=kBd(a,51);a.gb=kBd(a,52);a.hb=kBd(a,53);a.ib=kBd(a,54);a.jb=kBd(a,55);a.kb=kBd(a,56);a.lb=kBd(a,57);a.mb=kBd(a,58);a.nb=kBd(a,59);a.ob=kBd(a,60);a.pb=kBd(a,61)} +function w8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new Anb(a);q.a<q.c.c.length;){o=RD(ynb(q),10);s=$wnd.Math.max(s,o.n.a+o.o.a+o.d.c)}}else{s=b.f.a-b.c.a}s-=b.c.a;for(p=new Anb(a);p.a<p.c.c.length;){o=RD(ynb(p),10);x8b(o.n,s-o.o.a);y8b(o.f);u8b(o);(!o.q?(yob(),yob(),wob):o.q)._b((yCc(),IBc))&&x8b(RD(mQb(o,IBc),8),s-o.o.a);switch(RD(mQb(o,Rzc),255).g){case 1:pQb(o,Rzc,(Rjd(),Pjd));break;case 2:pQb(o,Rzc,(Rjd(),Ojd));}r=o.o;for(u=new Anb(o.j);u.a<u.c.c.length;){t=RD(ynb(u),12);x8b(t.n,r.a-t.o.a);x8b(t.a,t.o.a);Q3b(t,o8b(t.j));g=RD(mQb(t,CBc),17);!!g&&pQb(t,CBc,sgb(-g.a));for(f=new Anb(t.g);f.a<f.c.c.length;){e=RD(ynb(f),18);for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.a=s-c.a}j=RD(mQb(e,RAc),75);if(j){for(i=Sub(j,0);i.b!=i.d.c;){h=RD(evb(i),8);h.a=s-h.a}}for(m=new Anb(e.b);m.a<m.c.c.length;){k=RD(ynb(m),72);x8b(k.n,s-k.o.a)}}for(n=new Anb(t.f);n.a<n.c.c.length;){k=RD(ynb(n),72);x8b(k.n,t.o.a-k.o.a)}}if(o.k==(r3b(),m3b)){pQb(o,(Ywc(),hwc),o8b(RD(mQb(o,hwc),64)));t8b(o)}for(l=new Anb(o.b);l.a<l.c.c.length;){k=RD(ynb(l),72);u8b(k);x8b(k.n,r.a-k.o.a)}}} +function z8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.b==0){for(q=new Anb(a);q.a<q.c.c.length;){o=RD(ynb(q),10);s=$wnd.Math.max(s,o.n.b+o.o.b+o.d.a)}}else{s=b.f.b-b.c.b}s-=b.c.b;for(p=new Anb(a);p.a<p.c.c.length;){o=RD(ynb(p),10);A8b(o.n,s-o.o.b);B8b(o.f);v8b(o);(!o.q?(yob(),yob(),wob):o.q)._b((yCc(),IBc))&&A8b(RD(mQb(o,IBc),8),s-o.o.b);switch(RD(mQb(o,Rzc),255).g){case 3:pQb(o,Rzc,(Rjd(),Mjd));break;case 4:pQb(o,Rzc,(Rjd(),Qjd));}r=o.o;for(u=new Anb(o.j);u.a<u.c.c.length;){t=RD(ynb(u),12);A8b(t.n,r.b-t.o.b);A8b(t.a,t.o.b);Q3b(t,p8b(t.j));g=RD(mQb(t,CBc),17);!!g&&pQb(t,CBc,sgb(-g.a));for(f=new Anb(t.g);f.a<f.c.c.length;){e=RD(ynb(f),18);for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.b=s-c.b}j=RD(mQb(e,RAc),75);if(j){for(i=Sub(j,0);i.b!=i.d.c;){h=RD(evb(i),8);h.b=s-h.b}}for(m=new Anb(e.b);m.a<m.c.c.length;){k=RD(ynb(m),72);A8b(k.n,s-k.o.b)}}for(n=new Anb(t.f);n.a<n.c.c.length;){k=RD(ynb(n),72);A8b(k.n,t.o.b-k.o.b)}}if(o.k==(r3b(),m3b)){pQb(o,(Ywc(),hwc),p8b(RD(mQb(o,hwc),64)));s8b(o)}for(l=new Anb(o.b);l.a<l.c.c.length;){k=RD(ynb(l),72);v8b(k);A8b(k.n,r.b-k.o.b)}}} +function Drc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Jkb(a.b,0);k=b.Kc();o=0;j=RD(k.Pb(),17).a;v=0;c=new _sb;A=new Iub;while(s.b<s.d.gc()){r=(sFb(s.b<s.d.gc()),RD(s.d.Xb(s.c=s.b++),30));for(u=new Anb(r.a);u.a<u.c.c.length;){t=RD(ynb(u),10);for(n=new is(Mr(a3b(t).a.Kc(),new ir));gs(n);){l=RD(hs(n),18);A.a.zc(l,A)}for(m=new is(Mr(Z2b(t).a.Kc(),new ir));gs(m);){l=RD(hs(m),18);A.a.Bc(l)!=null}}if(o+1==j){e=new R4b(a);Ikb(s,e);f=new R4b(a);Ikb(s,f);for(C=A.a.ec().Kc();C.Ob();){B=RD(C.Pb(),18);if(!c.a._b(B)){++v;c.a.zc(B,c)}g=new j3b(a);pQb(g,(yCc(),BBc),(Bod(),yod));g3b(g,e);h3b(g,(r3b(),l3b));p=new R3b;P3b(p,g);Q3b(p,(qpd(),ppd));D=new R3b;P3b(D,g);Q3b(D,Xod);d=new j3b(a);pQb(d,BBc,yod);g3b(d,f);h3b(d,l3b);q=new R3b;P3b(q,d);Q3b(q,ppd);F=new R3b;P3b(F,d);Q3b(F,Xod);w=new a1b;Y0b(w,B.c);Z0b(w,p);pQb(w,(Ywc(),zwc),RD(mQb(B,zwc),17));H=new a1b;Y0b(H,D);Z0b(H,q);pQb(H,zwc,RD(mQb(B,zwc),17));Y0b(B,F);h=new Jrc(g,d,w,H,B);pQb(g,Wvc,h);pQb(d,Wvc,h);G=w.c.i;if(G.k==l3b){i=RD(mQb(G,Wvc),313);i.d=h;h.g=i}}if(k.Ob()){j=RD(k.Pb(),17).a}else{break}}++o}return sgb(v)} +function rkc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new bnb;for(m=new Anb(a.d.b);m.a<m.c.c.length;){l=RD(ynb(m),30);for(o=new Anb(l.a);o.a<o.c.c.length;){n=RD(ynb(o),10);e=RD(Wjb(a.f,n),60);for(i=new is(Mr(a3b(n).a.Kc(),new ir));gs(i);){g=RD(hs(i),18);d=Sub(g.a,0);j=true;k=null;if(d.b!=d.d.c){b=RD(evb(d),8);c=null;if(g.c.j==(qpd(),Yod)){q=new Nlc(b,new rjd(b.a,e.d.d),e,g);q.f.a=true;q.a=g.c;ZEb(p.c,q)}if(g.c.j==npd){q=new Nlc(b,new rjd(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.c;ZEb(p.c,q)}while(d.b!=d.d.c){c=RD(evb(d),8);if(!rGb(b.b,c.b)){k=new Nlc(b,c,null,g);ZEb(p.c,k);if(j){j=false;if(c.b<e.d.d){k.f.a=true}else if(c.b>e.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=RD(Wjb(a.f,g.d.i),60);if(b.b<f.d.d){k.f.a=true}else if(b.b>f.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new is(Mr(Z2b(n).a.Kc(),new ir));gs(h);){g=RD(hs(h),18);if(g.a.b!=0){b=RD(Rub(g.a),8);if(g.d.j==(qpd(),Yod)){q=new Nlc(b,new rjd(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;ZEb(p.c,q)}if(g.d.j==npd){q=new Nlc(b,new rjd(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;ZEb(p.c,q)}}}}}return p} +function Nvd(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new bnb;l=b.length;g=$5d(c);for(j=0;j<l;++j){k=rhb(b,Fhb(61),j);d=wvd(g,(AFb(j,k,b.length),b.substr(j,k-j)));e=iXd(d);f=e.jk().wi();switch(ihb(b,++k)){case 39:{h=phb(b,39,++k);Rmb(i,new KTd(d,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e)));j=h+1;break}case 34:{h=phb(b,34,++k);Rmb(i,new KTd(d,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e)));j=h+1;break}case 91:{m=new bnb;Rmb(i,new KTd(d,m));n:for(;;){switch(ihb(b,++k)){case 39:{h=phb(b,39,++k);Rmb(m,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e));k=h+1;break}case 34:{h=phb(b,34,++k);Rmb(m,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e));k=h+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){m.c.push(null)}else{throw Adb(new yz(MHe))}k+=3;break}}if(k<l){switch(BFb(k,b.length),b.charCodeAt(k)){case 44:{break}case 93:{break n}default:{throw Adb(new yz('Expecting , or ]'))}}}else{break}}j=k+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){Rmb(i,new KTd(d,null))}else{throw Adb(new yz(MHe))}j=k+3;break}}if(j<l){BFb(j,b.length);if(b.charCodeAt(j)!=44){throw Adb(new yz('Expecting ,'))}}else{break}}return Ovd(a,i,c)} +function Oqe(a){var b,c,d,e,f;b=a.c;f=null;switch(b){case 6:return a.Em();case 13:return a.Fm();case 23:return a.wm();case 22:return a.Bm();case 18:return a.ym();case 8:Mqe(a);f=(Vse(),Dse);break;case 9:return a.em(true);case 19:return a.fm();case 10:switch(a.a){case 100:case 68:case 119:case 87:case 115:case 83:f=a.dm(a.a);Mqe(a);return f;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:{c=a.cm();c<txe?(f=(Vse(),Vse(),++Use,new Hte(0,c))):(f=cte(qse(c)))}break;case 99:return a.om();case 67:return a.jm();case 105:return a.rm();case 73:return a.km();case 103:return a.pm();case 88:return a.lm();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return a.gm();case 80:case 112:f=Sqe(a,a.a);if(!f)throw Adb(new Lqe(TId((Hde(),hJe))));break;default:f=Yse(a.a);}Mqe(a);break;case 0:if(a.a==93||a.a==123||a.a==125)throw Adb(new Lqe(TId((Hde(),gJe))));f=Yse(a.a);d=a.a;Mqe(a);if((d&64512)==uxe&&a.c==0&&(a.a&64512)==56320){e=$C(hE,zwe,28,2,15,1);e[0]=d&Bwe;e[1]=a.a&Bwe;f=bte(cte(Ihb(e,0,e.length)),0);Mqe(a)}break;default:throw Adb(new Lqe(TId((Hde(),gJe))));}return f} +function WUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new Yub;w=new Yub;q=-1;for(i=new Anb(a);i.a<i.c.c.length;){g=RD(ynb(i),131);g.s=q--;k=0;t=0;for(f=new Anb(g.t);f.a<f.c.c.length;){d=RD(ynb(f),274);t+=d.c}for(e=new Anb(g.i);e.a<e.c.c.length;){d=RD(ynb(e),274);k+=d.c}g.n=k;g.u=t;t==0?(Pub(w,g,w.c.b,w.c),true):k==0&&(Pub(C,g,C.c.b,C.c),true)}F=Xx(a);l=a.c.length;p=l+1;r=l-1;n=new bnb;while(F.a.gc()!=0){while(w.b!=0){v=(sFb(w.b!=0),RD(Wub(w,w.a.a),131));F.a.Bc(v)!=null;v.s=r--;$Uc(v,C,w)}while(C.b!=0){A=(sFb(C.b!=0),RD(Wub(C,C.a.a),131));F.a.Bc(A)!=null;A.s=p++;$Uc(A,C,w)}o=qwe;for(j=F.a.ec().Kc();j.Ob();){g=RD(j.Pb(),131);s=g.u-g.n;if(s>=o){if(s>o){n.c.length=0;o=s}ZEb(n.c,g)}}if(n.c.length!=0){m=RD(Vmb(n,Jwb(b,n.c.length)),131);F.a.Bc(m)!=null;m.s=p++;$Uc(m,C,w);n.c.length=0}}u=a.c.length+1;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),131);g.s<l&&(g.s+=u)}for(B=new Anb(a);B.a<B.c.c.length;){A=RD(ynb(B),131);c=new Jkb(A.t,0);while(c.b<c.d.gc()){d=(sFb(c.b<c.d.gc()),RD(c.d.Xb(c.c=c.b++),274));D=d.b;if(A.s>D.s){Ckb(c);Ymb(D.i,d);if(d.c>0){d.a=D;Rmb(D.t,d);d.b=A;Rmb(A.i,d)}}}}} +function Efc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new cnb(b.b);u=new cnb(b.b);m=new cnb(b.b);B=new cnb(b.b);q=new cnb(b.b);for(A=Sub(b,0);A.b!=A.d.c;){v=RD(evb(A),12);for(h=new Anb(v.g);h.a<h.c.c.length;){f=RD(ynb(h),18);if(f.c.i==f.d.i){if(v.j==f.d.j){ZEb(B.c,f);continue}else if(v.j==(qpd(),Yod)&&f.d.j==npd){ZEb(q.c,f);continue}}}}for(i=new Anb(q);i.a<i.c.c.length;){f=RD(ynb(i),18);Ffc(a,f,c,d,(qpd(),Xod))}for(g=new Anb(B);g.a<g.c.c.length;){f=RD(ynb(g),18);C=new j3b(a);h3b(C,(r3b(),q3b));pQb(C,(yCc(),BBc),(Bod(),wod));pQb(C,(Ywc(),Awc),f);D=new R3b;pQb(D,Awc,f.d);Q3b(D,(qpd(),ppd));P3b(D,C);F=new R3b;pQb(F,Awc,f.c);Q3b(F,Xod);P3b(F,C);pQb(f.c,Iwc,C);pQb(f.d,Iwc,C);Y0b(f,null);Z0b(f,null);ZEb(c.c,C);pQb(C,$vc,sgb(2))}for(w=Sub(b,0);w.b!=w.d.c;){v=RD(evb(w),12);j=v.e.c.length>0;r=v.g.c.length>0;j&&r?(ZEb(m.c,v),true):j?(ZEb(p.c,v),true):r&&(ZEb(u.c,v),true)}for(o=new Anb(p);o.a<o.c.c.length;){n=RD(ynb(o),12);Rmb(e,Dfc(a,n,null,c))}for(t=new Anb(u);t.a<t.c.c.length;){s=RD(ynb(t),12);Rmb(e,Dfc(a,null,s,c))}for(l=new Anb(m);l.a<l.c.c.length;){k=RD(ynb(l),12);Rmb(e,Dfc(a,k,k,c))}} +function psd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=oxe;n=oxe;k=0;l=0;i=new bnb;for(h=new dMd((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b));h.e!=h.i.gc();){f=RD(bMd(h),74);i=Al(cD(WC(cJ,1),rve,20,0,[i,(!f.n&&(f.n=new C5d(I4,f,1,7)),f.n)]))}for(t=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.n&&(a.n=new C5d(I4,a,1,7)),a.n),(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a),i])));gs(t);){s=RD(hs(t),422);j=RD(s.of((umd(),eld)),140);m>s.nh()-j.b&&(m=s.nh()-j.b);n>s.oh()-j.d&&(n=s.oh()-j.d);k<s.nh()+s.mh()+j.c&&(k=s.nh()+s.mh()+j.c);l<s.oh()+s.lh()+j.a&&(l=s.oh()+s.lh()+j.a)}for(g=new dMd((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b));g.e!=g.i.gc();){f=RD(bMd(g),74);for(r=new dMd((!f.a&&(f.a=new C5d(F4,f,6,6)),f.a));r.e!=r.i.gc();){q=RD(bMd(r),166);o=q.j;d=q.b;p=q.k;e=q.c;m=$wnd.Math.min(m,o);m=$wnd.Math.min(m,d);k=$wnd.Math.max(k,o);k=$wnd.Math.max(k,d);n=$wnd.Math.min(n,p);n=$wnd.Math.min(n,e);l=$wnd.Math.max(l,p);l=$wnd.Math.max(l,e);for(c=new dMd((!q.a&&(q.a=new XZd(D4,q,5)),q.a));c.e!=c.i.gc();){b=RD(bMd(c),377);m=$wnd.Math.min(m,b.a);k=$wnd.Math.max(k,b.a);n=$wnd.Math.min(n,b.b);l=$wnd.Math.max(l,b.b)}}}Ixd(a,(umd(),Ikd),k-m);Ixd(a,Hkd,l-n)} +function uOc(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Network simplex node placement',1);a.e=b;a.n=RD(mQb(b,(Ywc(),Qwc)),312);tOc(a);fOc(a);FDb(EDb(new SDb(null,new Swb(a.e.b,16)),new iPc),new kPc(a));FDb(CDb(EDb(CDb(EDb(new SDb(null,new Swb(a.e.b,16)),new ZPc),new _Pc),new bQc),new dQc),new gPc(a));if(Heb(TD(mQb(a.e,(yCc(),gBc))))){g=c.eh(1);g.Ug('Straight Edges Pre-Processing',1);sOc(a);g.Vg()}AIb(a.f);f=RD(mQb(b,gCc),17).a*a.f.a.c.length;lJb(yJb(zJb(CJb(a.f),f),false),c.eh(1));if(a.d.a.gc()!=0){g=c.eh(1);g.Ug('Flexible Where Space Processing',1);h=RD(Lvb(KDb(GDb(new SDb(null,new Swb(a.f.a,16)),new mPc),new IOc)),17).a;i=RD(Lvb(JDb(GDb(new SDb(null,new Swb(a.f.a,16)),new oPc),new MOc)),17).a;j=i-h;k=eJb(new gJb,a.f);l=eJb(new gJb,a.f);rIb(uIb(tIb(sIb(vIb(new wIb,20000),j),k),l));FDb(CDb(CDb(_nb(a.i),new qPc),new sPc),new uPc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=RD(e.Pb(),218);d.g=1}lJb(yJb(zJb(CJb(a.f),f),false),g.eh(1));g.Vg()}if(Heb(TD(mQb(b,gBc)))){g=c.eh(1);g.Ug('Straight Edges Post-Processing',1);rOc(a);g.Vg()}eOc(a);a.e=null;a.f=null;a.i=null;a.c=null;akb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();c.Vg()} +function XGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c.Ug('Depth first model order layering',1);a.d=b;q=new bnb;for(p=new Anb(a.d.a);p.a<p.c.c.length;){n=RD(ynb(p),10);n.k==(r3b(),p3b)&&(ZEb(q.c,n),true)}yob();_mb(q,new aHc);g=true;a.b=new R4b(a.d);a.a=null;Rmb(a.d.b,a.b);a.b.p=0;a.c=0;a.f=new Yub;for(o=new Anb(q);o.a<o.c.c.length;){n=RD(ynb(o),10);if(g){g3b(n,a.b);g=false}else{if(VGc(a,n)){m=a.c;m=UGc(m,n);d=m+2;k=m-a.c;if(a.f.b==0){TGc(a,d,n)}else{if(k>0){for(t=Sub(a.f,0);t.b!=t.d.c;){s=RD(evb(t),10);s.p+=m-a.e}WGc(a);Xub(a.f);TGc(a,d,n)}else{Mub(a.f,n);n.p=d;a.e=$wnd.Math.max(a.e,d);for(f=new is(Mr(Z2b(n).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!e.c.i.c&&e.c.i.k==(r3b(),n3b)){Mub(a.f,e.c.i);e.c.i.p=d-1}}a.c=d}}}else{WGc(a);Xub(a.f);d=0;if(gs(new is(Mr(Z2b(n).a.Kc(),new ir)))){m=0;m=UGc(m,n);d=m+2;TGc(a,d,n)}else{Mub(a.f,n);n.p=0;a.e=$wnd.Math.max(a.e,0);a.b=RD(Vmb(a.d.b,0),30);a.c=0}}}}a.f.b==0||WGc(a);a.d.a.c.length=0;r=new bnb;for(j=new Anb(a.d.b);j.a<j.c.c.length;){h=RD(ynb(j),30);h.a.c.length==0&&(ZEb(r.c,h),true)}Ce(a.d.b,r);l=0;for(i=new Anb(a.d.b);i.a<i.c.c.length;){h=RD(ynb(i),30);h.p=l;++l}c.Vg()} +function EEd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=pEd(a,DGd(c),G);jyd(F,zDd(G,uIe));H=RD(Ao(a.g,tDd(qC(G,bIe))),27);m=qC(G,'sourcePort');d=null;!!m&&(d=tDd(m));I=RD(Ao(a.j,d),123);if(!H){h=uDd(G);o="An edge must have a source node (edge id: '"+h;p=o+zIe;throw Adb(new CDd(p))}if(!!I&&!Hb(MCd(I),H)){i=zDd(G,uIe);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+zIe;throw Adb(new CDd(r))}B=(!F.b&&(F.b=new Yie(E4,F,4,7)),F.b);f=null;I?(f=I):(f=H);WGd(B,f);J=RD(Ao(a.g,tDd(qC(G,CIe))),27);n=qC(G,'targetPort');e=null;!!n&&(e=tDd(n));K=RD(Ao(a.j,e),123);if(!J){l=uDd(G);s="An edge must have a target node (edge id: '"+l;t=s+zIe;throw Adb(new CDd(t))}if(!!K&&!Hb(MCd(K),J)){j=zDd(G,uIe);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+zIe;throw Adb(new CDd(v))}C=(!F.c&&(F.c=new Yie(E4,F,5,8)),F.c);g=null;K?(g=K):(g=J);WGd(C,g);if((!F.b&&(F.b=new Yie(E4,F,4,7)),F.b).i==0||(!F.c&&(F.c=new Yie(E4,F,5,8)),F.c).i==0){k=zDd(G,uIe);w=yIe+k;A=w+zIe;throw Adb(new CDd(A))}GEd(G,F);FEd(G,F);D=CEd(a,G,F);return D} +function JTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=RD(mQb(a,(JVb(),HVb)),27);t=lve;u=lve;r=qwe;s=qwe;for(w=new Anb(a.e);w.a<w.c.c.length;){v=RD(ynb(w),153);F=v.d;G=v.e;t=$wnd.Math.min(t,F.a-G.a/2);u=$wnd.Math.min(u,F.b-G.b/2);r=$wnd.Math.max(r,F.a+G.a/2);s=$wnd.Math.max(s,F.b+G.b/2)}for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),250);F=b.d;G=b.e;t=$wnd.Math.min(t,F.a-G.a/2);u=$wnd.Math.min(u,F.b-G.b/2);r=$wnd.Math.max(r,F.a+G.a/2);s=$wnd.Math.max(s,F.b+G.b/2)}D=RD(Gxd(n,(yVb(),hVb)),107);C=new rjd(D.b-t,D.d-u);for(j=new Anb(a.e);j.a<j.c.c.length;){i=RD(ynb(j),153);B=mQb(i,HVb);if(ZD(B,207)){p=RD(B,27);A=$id(new sjd(i.d),C);Byd(p,A.a-p.g/2,A.b-p.f/2)}}for(f=new Anb(a.c);f.a<f.c.c.length;){e=RD(ynb(f),289);l=RD(mQb(e,HVb),74);m=IGd(l,true,true);H=new sjd(ZTb(e));$id(H,C);Nzd(m,H.a,H.b);Umb(e.a,new OTb(C,m));d=new sjd($Tb(e));$id(d,C);Gzd(m,d.a,d.b)}for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),453);o=RD(mQb(g,HVb),135);q=$id(new sjd(g.d),C);Byd(o,q.a,q.b)}I=r-t+(D.b+D.c);k=s-u+(D.d+D.a);Heb(TD(Gxd(n,(umd(),mld))))||Esd(n,I,k,false,true);Ixd(n,Ikd,I-(D.b+D.c));Ixd(n,Hkd,k-(D.d+D.a))} +function F$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=H$b(B$b(a,(qpd(),bpd)),b);o=G$b(B$b(a,cpd),b);u=G$b(B$b(a,kpd),b);B=I$b(B$b(a,mpd),b);m=I$b(B$b(a,Zod),b);s=G$b(B$b(a,jpd),b);p=G$b(B$b(a,dpd),b);w=G$b(B$b(a,lpd),b);v=G$b(B$b(a,$od),b);C=I$b(B$b(a,apd),b);r=G$b(B$b(a,hpd),b);t=G$b(B$b(a,gpd),b);A=G$b(B$b(a,_od),b);D=I$b(B$b(a,ipd),b);n=I$b(B$b(a,epd),b);q=G$b(B$b(a,fpd),b);c=Hid(cD(WC(iE,1),vxe,28,15,[s.a,B.a,w.a,D.a]));d=Hid(cD(WC(iE,1),vxe,28,15,[o.a,l.a,u.a,q.a]));e=r.a;f=Hid(cD(WC(iE,1),vxe,28,15,[p.a,m.a,v.a,n.a]));j=Hid(cD(WC(iE,1),vxe,28,15,[s.b,o.b,p.b,t.b]));i=Hid(cD(WC(iE,1),vxe,28,15,[B.b,l.b,m.b,q.b]));k=C.b;h=Hid(cD(WC(iE,1),vxe,28,15,[w.b,u.b,v.b,A.b]));x$b(B$b(a,bpd),c+e,j+k);x$b(B$b(a,fpd),c+e,j+k);x$b(B$b(a,cpd),c+e,0);x$b(B$b(a,kpd),c+e,j+k+i);x$b(B$b(a,mpd),0,j+k);x$b(B$b(a,Zod),c+e+d,j+k);x$b(B$b(a,dpd),c+e+d,0);x$b(B$b(a,lpd),0,j+k+i);x$b(B$b(a,$od),c+e+d,j+k+i);x$b(B$b(a,apd),0,j);x$b(B$b(a,hpd),c,0);x$b(B$b(a,_od),0,j+k+i);x$b(B$b(a,epd),c+e+d,0);g=new pjd;g.a=Hid(cD(WC(iE,1),vxe,28,15,[c+d+e+f,C.a,t.a,A.a]));g.b=Hid(cD(WC(iE,1),vxe,28,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function EFb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;s=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(B=new Anb(a);B.a<B.c.c.length;){A=RD(ynb(B),8);s.a=$wnd.Math.min(s.a,A.a);s.b=$wnd.Math.min(s.b,A.b);b.a=$wnd.Math.max(b.a,A.a);b.b=$wnd.Math.max(b.b,A.b)}m=new rjd(b.a-s.a,b.b-s.b);j=new rjd(s.a-50,s.b-m.a-50);k=new rjd(s.a-50,b.b+m.a+50);l=new rjd(b.a+m.b/2+50,s.b+m.b/2);n=new XFb(j,k,l);w=new _sb;f=new bnb;c=new bnb;w.a.zc(n,w);for(D=new Anb(a);D.a<D.c.c.length;){C=RD(ynb(D),8);f.c.length=0;for(v=w.a.ec().Kc();v.Ob();){t=RD(v.Pb(),317);d=t.d;bjd(d,t.a);$y(bjd(t.d,C),bjd(t.d,t.a))<0&&(ZEb(f.c,t),true)}c.c.length=0;for(u=new Anb(f);u.a<u.c.c.length;){t=RD(ynb(u),317);for(q=new Anb(t.e);q.a<q.c.c.length;){o=RD(ynb(q),177);g=true;for(i=new Anb(f);i.a<i.c.c.length;){h=RD(ynb(i),317);h!=t&&(Fvb(o,Vmb(h.e,0))||Fvb(o,Vmb(h.e,1))||Fvb(o,Vmb(h.e,2)))&&(g=false)}g&&(ZEb(c.c,o),true)}}Ve(w,f);xgb(w,new FFb);for(p=new Anb(c);p.a<p.c.c.length;){o=RD(ynb(p),177);Ysb(w,new XFb(C,o.a,o.b))}}r=new _sb;xgb(w,new HFb(r));e=r.a.ec().Kc();while(e.Ob()){o=RD(e.Pb(),177);(WFb(n,o.a)||WFb(n,o.b))&&e.Qb()}xgb(r,new JFb);return r} +function pvd(){pvd=geb;dvd();ovd=cvd.a;RD(QHd(xYd(cvd.a),0),19);ivd=cvd.f;RD(QHd(xYd(cvd.f),0),19);RD(QHd(xYd(cvd.f),1),35);nvd=cvd.n;RD(QHd(xYd(cvd.n),0),35);RD(QHd(xYd(cvd.n),1),35);RD(QHd(xYd(cvd.n),2),35);RD(QHd(xYd(cvd.n),3),35);jvd=cvd.g;RD(QHd(xYd(cvd.g),0),19);RD(QHd(xYd(cvd.g),1),35);fvd=cvd.c;RD(QHd(xYd(cvd.c),0),19);RD(QHd(xYd(cvd.c),1),19);kvd=cvd.i;RD(QHd(xYd(cvd.i),0),19);RD(QHd(xYd(cvd.i),1),19);RD(QHd(xYd(cvd.i),2),19);RD(QHd(xYd(cvd.i),3),19);RD(QHd(xYd(cvd.i),4),35);lvd=cvd.j;RD(QHd(xYd(cvd.j),0),19);gvd=cvd.d;RD(QHd(xYd(cvd.d),0),19);RD(QHd(xYd(cvd.d),1),19);RD(QHd(xYd(cvd.d),2),19);RD(QHd(xYd(cvd.d),3),19);RD(QHd(xYd(cvd.d),4),35);RD(QHd(xYd(cvd.d),5),35);RD(QHd(xYd(cvd.d),6),35);RD(QHd(xYd(cvd.d),7),35);evd=cvd.b;RD(QHd(xYd(cvd.b),0),35);RD(QHd(xYd(cvd.b),1),35);hvd=cvd.e;RD(QHd(xYd(cvd.e),0),35);RD(QHd(xYd(cvd.e),1),35);RD(QHd(xYd(cvd.e),2),35);RD(QHd(xYd(cvd.e),3),35);RD(QHd(xYd(cvd.e),4),19);RD(QHd(xYd(cvd.e),5),19);RD(QHd(xYd(cvd.e),6),19);RD(QHd(xYd(cvd.e),7),19);RD(QHd(xYd(cvd.e),8),19);RD(QHd(xYd(cvd.e),9),19);RD(QHd(xYd(cvd.e),10),35);mvd=cvd.k;RD(QHd(xYd(cvd.k),0),35);RD(QHd(xYd(cvd.k),1),35)} +function Pqe(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.vm();case 12:return a.xm();case 14:return a.zm();case 15:return a.Cm();case 16:return a.Am();case 17:return a.Dm();case 21:Mqe(a);return Vse(),Vse(),Ese;case 10:switch(a.a){case 65:return a.hm();case 90:return a.mm();case 122:return a.tm();case 98:return a.nm();case 66:return a.im();case 60:return a.sm();case 62:return a.qm();}}f=Oqe(a);b=a.c;switch(b){case 3:return a.Im(f);case 4:return a.Gm(f);case 5:return a.Hm(f);case 0:if(a.a==123&&a.d<a.j){e=a.d;d=0;c=-1;if((b=ihb(a.i,e++))>=48&&b<=57){d=b-48;while(e<a.j&&(b=ihb(a.i,e++))>=48&&b<=57){d=d*10+b-48;if(d<0)throw Adb(new Lqe(TId((Hde(),CJe))))}}else{throw Adb(new Lqe(TId((Hde(),yJe))))}c=d;if(b==44){if(e>=a.j){throw Adb(new Lqe(TId((Hde(),AJe))))}else if((b=ihb(a.i,e++))>=48&&b<=57){c=b-48;while(e<a.j&&(b=ihb(a.i,e++))>=48&&b<=57){c=c*10+b-48;if(c<0)throw Adb(new Lqe(TId((Hde(),CJe))))}if(d>c)throw Adb(new Lqe(TId((Hde(),BJe))))}else{c=-1}}if(b!=125)throw Adb(new Lqe(TId((Hde(),zJe))));if(a.bm(e)){f=(Vse(),Vse(),++Use,new Kte(9,f));a.d=e+1}else{f=(Vse(),Vse(),++Use,new Kte(3,f));a.d=e}f.Om(d);f.Nm(c);Mqe(a)}}return f} +function bXb(a){var b,c,d,e,f;c=RD(mQb(a,(Ywc(),kwc)),21);b=vfd(YWb);e=RD(mQb(a,(yCc(),IAc)),346);e==(Fnd(),Cnd)&&ofd(b,ZWb);Heb(TD(mQb(a,GAc)))?pfd(b,(sXb(),nXb),(hcc(),Zbc)):pfd(b,(sXb(),pXb),(hcc(),Zbc));mQb(a,(rid(),qid))!=null&&ofd(b,$Wb);(Heb(TD(mQb(a,PAc)))||Heb(TD(mQb(a,HAc))))&&nfd(b,(sXb(),rXb),(hcc(),lbc));switch(RD(mQb(a,rAc),88).g){case 2:case 3:case 4:nfd(pfd(b,(sXb(),nXb),(hcc(),nbc)),rXb,mbc);}c.Hc((ovc(),fvc))&&nfd(pfd(pfd(b,(sXb(),nXb),(hcc(),kbc)),qXb,ibc),rXb,jbc);dE(mQb(a,ZAc))!==dE((aEc(),$Dc))&&pfd(b,(sXb(),pXb),(hcc(),Rbc));if(c.Hc(mvc)){pfd(b,(sXb(),nXb),(hcc(),Xbc));pfd(b,oXb,Vbc);pfd(b,pXb,Wbc)}dE(mQb(a,Xzc))!==dE(($uc(),Yuc))&&dE(mQb(a,yAc))!==dE((Ymd(),Vmd))&&nfd(b,(sXb(),rXb),(hcc(),Abc));Heb(TD(mQb(a,KAc)))&&pfd(b,(sXb(),pXb),(hcc(),zbc));Heb(TD(mQb(a,nAc)))&&pfd(b,(sXb(),pXb),(hcc(),dcc));if(eXb(a)){dE(mQb(a,IAc))===dE(Cnd)?(d=RD(mQb(a,gAc),298)):(d=RD(mQb(a,hAc),298));f=d==(xvc(),vvc)?(hcc(),Ubc):(hcc(),gcc);pfd(b,(sXb(),qXb),f)}switch(RD(mQb(a,vCc),388).g){case 1:pfd(b,(sXb(),qXb),(hcc(),ecc));break;case 2:nfd(pfd(pfd(b,(sXb(),pXb),(hcc(),ebc)),qXb,fbc),rXb,gbc);}dE(mQb(a,cAc))!==dE((kEc(),hEc))&&pfd(b,(sXb(),pXb),(hcc(),fcc));return b} +function crc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(Ujb(a.a,b)){if(Zsb(RD(Wjb(a.a,b),49),c)){return 1}}else{Zjb(a.a,b,new _sb)}if(Ujb(a.a,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return -1}}else{Zjb(a.a,c,new _sb)}if(Ujb(a.e,b)){if(Zsb(RD(Wjb(a.e,b),49),c)){return -1}}else{Zjb(a.e,b,new _sb)}if(Ujb(a.e,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return 1}}else{Zjb(a.e,c,new _sb)}if(a.c==(kEc(),iEc)||!nQb(b,(Ywc(),zwc))||!nQb(c,(Ywc(),zwc))){l=null;for(j=new Anb(b.j);j.a<j.c.c.length;){h=RD(ynb(j),12);h.e.c.length==0||RD(Vmb(h.e,0),18).c.i.c!=b.c&&(l=RD(Vmb(h.e,0),18).c)}n=null;for(i=new Anb(c.j);i.a<i.c.c.length;){h=RD(ynb(i),12);h.e.c.length==0||RD(Vmb(h.e,0),18).c.i.c!=c.c&&(n=RD(Vmb(h.e,0),18).c)}if(!!l&&!!n){k=l.i;m=n.i;if(!!k&&k==m){for(p=new Anb(k.j);p.a<p.c.c.length;){o=RD(ynb(p),12);if(o==l){erc(a,c,b);return -1}else if(o==n){erc(a,b,c);return 1}}return hgb(drc(a,b),drc(a,c))}for(r=a.d,s=0,t=r.length;s<t;++s){q=r[s];if(q==k){erc(a,c,b);return -1}else if(q==m){erc(a,b,c);return 1}}}if(!nQb(b,(Ywc(),zwc))||!nQb(c,zwc)){e=drc(a,b);g=drc(a,c);e>g?erc(a,b,c):erc(a,c,b);return e<g?-1:e>g?1:0}}d=RD(mQb(b,(Ywc(),zwc)),17).a;f=RD(mQb(c,zwc),17).a;d>f?erc(a,b,c):erc(a,c,b);return d<f?-1:d>f?1:0} +function uAd(b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;if(d==null){return null}if(b.a!=c.jk()){throw Adb(new agb(VHe+c.xe()+WHe))}if(ZD(c,468)){r=z1d(RD(c,685),d);if(!r){throw Adb(new agb(XHe+d+"' is not a valid enumerator of '"+c.xe()+"'"))}return r}switch(Oee((lke(),jke),c).Nl()){case 2:{d=nue(d,false);break}case 3:{d=nue(d,true);break}}e=Oee(jke,c).Jl();if(e){return e.jk().wi().ti(e,d)}n=Oee(jke,c).Ll();if(n){r=new bnb;for(k=xAd(d),l=0,m=k.length;l<m;++l){j=k[l];Rmb(r,n.jk().wi().ti(n,j))}return r}q=Oee(jke,c).Ml();if(!q.dc()){for(p=q.Kc();p.Ob();){o=RD(p.Pb(),156);try{r=o.jk().wi().ti(o,d);if(r!=null){return r}}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}throw Adb(new agb(XHe+d+"' does not match any member types of the union datatype '"+c.xe()+"'"))}RD(c,847).ok();f=Qje(c.kk());if(!f)return null;if(f==SI){h=0;try{h=Oeb(d,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){g=Ahb(d);h=g[0]}else throw Adb(a)}return hfb(h)}if(f==qK){for(i=0;i<nAd.length;++i){try{return b2d(nAd[i],d)}catch(a){a=zdb(a);if(!ZD(a,33))throw Adb(a)}}throw Adb(new agb(XHe+d+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Adb(new agb(XHe+d+"' is invalid. "))} +function z$b(){z$b=geb;y$b=new Tp;Rc(y$b,(qpd(),bpd),fpd);Rc(y$b,mpd,fpd);Rc(y$b,mpd,ipd);Rc(y$b,Zod,epd);Rc(y$b,Zod,fpd);Rc(y$b,cpd,fpd);Rc(y$b,cpd,gpd);Rc(y$b,kpd,_od);Rc(y$b,kpd,fpd);Rc(y$b,hpd,apd);Rc(y$b,hpd,fpd);Rc(y$b,hpd,gpd);Rc(y$b,hpd,_od);Rc(y$b,apd,hpd);Rc(y$b,apd,ipd);Rc(y$b,apd,epd);Rc(y$b,apd,fpd);Rc(y$b,jpd,jpd);Rc(y$b,jpd,gpd);Rc(y$b,jpd,ipd);Rc(y$b,dpd,dpd);Rc(y$b,dpd,gpd);Rc(y$b,dpd,epd);Rc(y$b,lpd,lpd);Rc(y$b,lpd,_od);Rc(y$b,lpd,ipd);Rc(y$b,$od,$od);Rc(y$b,$od,_od);Rc(y$b,$od,epd);Rc(y$b,gpd,cpd);Rc(y$b,gpd,hpd);Rc(y$b,gpd,jpd);Rc(y$b,gpd,dpd);Rc(y$b,gpd,fpd);Rc(y$b,gpd,gpd);Rc(y$b,gpd,ipd);Rc(y$b,gpd,epd);Rc(y$b,_od,kpd);Rc(y$b,_od,hpd);Rc(y$b,_od,lpd);Rc(y$b,_od,$od);Rc(y$b,_od,_od);Rc(y$b,_od,ipd);Rc(y$b,_od,epd);Rc(y$b,_od,fpd);Rc(y$b,ipd,mpd);Rc(y$b,ipd,apd);Rc(y$b,ipd,jpd);Rc(y$b,ipd,lpd);Rc(y$b,ipd,gpd);Rc(y$b,ipd,_od);Rc(y$b,ipd,ipd);Rc(y$b,ipd,fpd);Rc(y$b,epd,Zod);Rc(y$b,epd,apd);Rc(y$b,epd,dpd);Rc(y$b,epd,$od);Rc(y$b,epd,gpd);Rc(y$b,epd,_od);Rc(y$b,epd,epd);Rc(y$b,epd,fpd);Rc(y$b,fpd,bpd);Rc(y$b,fpd,mpd);Rc(y$b,fpd,Zod);Rc(y$b,fpd,cpd);Rc(y$b,fpd,kpd);Rc(y$b,fpd,hpd);Rc(y$b,fpd,apd);Rc(y$b,fpd,gpd);Rc(y$b,fpd,_od);Rc(y$b,fpd,ipd);Rc(y$b,fpd,epd);Rc(y$b,fpd,fpd)} +function _$b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new rjd(oxe,oxe);a.c=new rjd(pxe,pxe);for(m=b.Kc();m.Ob();){k=RD(m.Pb(),36);for(t=new Anb(k.a);t.a<t.c.c.length;){s=RD(ynb(t),10);a.d.a=$wnd.Math.min(a.d.a,s.n.a-s.d.b);a.d.b=$wnd.Math.min(a.d.b,s.n.b-s.d.d);a.c.a=$wnd.Math.max(a.c.a,s.n.a+s.o.a+s.d.c);a.c.b=$wnd.Math.max(a.c.b,s.n.b+s.o.b+s.d.a)}}h=new q_b;for(l=b.Kc();l.Ob();){k=RD(l.Pb(),36);d=i_b(a,k);Rmb(h.a,d);d.a=d.a|!RD(mQb(d.c,(Ywc(),ewc)),21).dc()}a.b=(NXb(),B=new XXb,B.f=new EXb(c),B.b=DXb(B.f,h),B);RXb((o=a.b,new Oqd,o));a.e=new pjd;a.a=a.b.f.e;for(g=new Anb(h.a);g.a<g.c.c.length;){e=RD(ynb(g),855);u=SXb(a.b,e);o2b(e.c,u.a,u.b);for(q=new Anb(e.c.a);q.a<q.c.c.length;){p=RD(ynb(q),10);if(p.k==(r3b(),m3b)){r=d_b(a,p.n,RD(mQb(p,(Ywc(),hwc)),64));$id(hjd(p.n),r)}}}for(f=new Anb(h.a);f.a<f.c.c.length;){e=RD(ynb(f),855);for(j=new Anb(o_b(e));j.a<j.c.c.length;){i=RD(ynb(j),18);A=new Fjd(i.a);hu(A,0,K3b(i.c));Mub(A,K3b(i.d));n=null;for(w=Sub(A,0);w.b!=w.d.c;){v=RD(evb(w),8);if(!n){n=v;continue}if(_y(n.a,v.a)){a.e.a=$wnd.Math.min(a.e.a,n.a);a.a.a=$wnd.Math.max(a.a.a,n.a)}else if(_y(n.b,v.b)){a.e.b=$wnd.Math.min(a.e.b,n.b);a.a.b=$wnd.Math.max(a.a.b,n.b)}n=v}}}fjd(a.e);$id(a.a,a.e)} +function vib(a,b){var c,d,e,f,g,h,i,j;c=0;g=0;f=b.length;h=null;j=new cib;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43)){++g;++c;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43||(BFb(g,b.length),b.charCodeAt(g)==45))){throw Adb(new Vgb(nxe+b+'"'))}}while(g<f&&(BFb(g,b.length),b.charCodeAt(g)!=46)&&(BFb(g,b.length),b.charCodeAt(g)!=101)&&(BFb(g,b.length),b.charCodeAt(g)!=69)){++g}j.a+=''+zhb(b==null?vve:(uFb(b),b),c,g);if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==46)){++g;c=g;while(g<f&&(BFb(g,b.length),b.charCodeAt(g)!=101)&&(BFb(g,b.length),b.charCodeAt(g)!=69)){++g}a.e=g-c;j.a+=''+zhb(b==null?vve:(uFb(b),b),c,g)}else{a.e=0}if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==101||(BFb(g,b.length),b.charCodeAt(g)==69))){++g;c=g;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43)){++g;g<f&&(BFb(g,b.length),b.charCodeAt(g)!=45)&&++c}h=(AFb(c,f,b.length),b.substr(c,f-c));a.e=a.e-Oeb(h,qwe,lve);if(a.e!=eE(a.e)){throw Adb(new Vgb('Scale out of range.'))}}i=j.a;if(i.length<16){a.f=(sib==null&&(sib=new RegExp('^[+-]?\\d*$','i')),sib.test(i)?parseInt(i,10):NaN);if(isNaN(a.f)){throw Adb(new Vgb(nxe+b+'"'))}a.a=Cib(a.f)}else{wib(a,new ejb(i))}a.d=j.a.length;for(e=0;e<j.a.length;++e){d=ihb(j.a,e);if(d!=45&&d!=48){break}--a.d}a.d==0&&(a.d=1)} +function Wae(a){_Ad(a.b,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentTransient']));_Ad(a.a,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedSourceURI']));_Ad(a.o,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures']));_Ad(a.p,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedInstanceTypeName UniqueTypeParameterNames']));_Ad(a.v,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'UniqueEnumeratorNames UniqueEnumeratorLiterals']));_Ad(a.R,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedName']));_Ad(a.T,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid']));_Ad(a.U,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs']));_Ad(a.W,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer']));_Ad(a.bb,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ValidDefaultValueLiteral']));_Ad(a.eb,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ValidLowerBound ValidUpperBound ConsistentBounds ValidType']));_Ad(a.H,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentType ConsistentBounds ConsistentArguments']))} +function S7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;if(b.dc()){return}e=new Ejd;h=c?c:RD(b.Xb(0),18);o=h.c;HUc();m=o.i.k;if(!(m==(r3b(),p3b)||m==q3b||m==m3b||m==l3b)){throw Adb(new agb('The target node of the edge must be a normal node or a northSouthPort.'))}Oub(e,xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])));if((qpd(),hpd).Hc(o.j)){q=Kfb(UD(mQb(o,(Ywc(),Swc))));l=new rjd(xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a,q);Pub(e,l,e.c.b,e.c)}k=null;d=false;i=b.Kc();while(i.Ob()){g=RD(i.Pb(),18);f=g.a;if(f.b!=0){if(d){j=ijd($id(k,(sFb(f.b!=0),RD(f.a.a.c,8))),0.5);Pub(e,j,e.c.b,e.c);d=false}else{d=true}k=ajd((sFb(f.b!=0),RD(f.c.b.c,8)));ye(e,f);Xub(f)}}p=h.d;if(hpd.Hc(p.j)){q=Kfb(UD(mQb(p,(Ywc(),Swc))));l=new rjd(xjd(cD(WC(l3,1),Nve,8,0,[p.i.n,p.n,p.a])).a,q);Pub(e,l,e.c.b,e.c)}Oub(e,xjd(cD(WC(l3,1),Nve,8,0,[p.i.n,p.n,p.a])));a.d==(lFc(),iFc)&&(r=(sFb(e.b!=0),RD(e.a.a.c,8)),s=RD(ju(e,1),8),t=new qjd(BVc(o.j)),t.a*=5,t.b*=5,u=ojd(new rjd(s.a,s.b),r),v=new rjd(R7b(t.a,u.a),R7b(t.b,u.b)),$id(v,r),w=Sub(e,1),cvb(w,v),A=(sFb(e.b!=0),RD(e.c.b.c,8)),B=RD(ju(e,e.b-2),8),t=new qjd(BVc(p.j)),t.a*=5,t.b*=5,u=ojd(new rjd(B.a,B.b),A),C=new rjd(R7b(t.a,u.a),R7b(t.b,u.b)),$id(C,A),hu(e,e.b-1,C),undefined);n=new wUc(e);ye(h.a,sUc(n))} +function cud(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84);v=t.nh();w=t.oh();u=t.mh()/2;p=t.lh()/2;if(ZD(t,193)){s=RD(t,123);v+=MCd(s).i;v+=MCd(s).i}v+=u;w+=p;F=RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84);H=F.nh();I=F.oh();G=F.mh()/2;A=F.lh()/2;if(ZD(F,193)){D=RD(F,123);H+=MCd(D).i;H+=MCd(D).i}H+=G;I+=A;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){h=(bvd(),j=new Rzd,j);WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i>1){o=new mMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));while(o.e!=o.i.gc()){cMd(o)}}g=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);q=H;H>v+u?(q=v+u):H<v-u&&(q=v-u);r=I;I>w+p?(r=w+p):I<w-p&&(r=w-p);q>v-u&&q<v+u&&r>w-p&&r<w+p&&(q=v+u);Ozd(g,q);Pzd(g,r);B=v;v>H+G?(B=H+G):v<H-G&&(B=H-G);C=w;w>I+A?(C=I+A):w<I-A&&(C=I-A);B>H-G&&B<H+G&&C>I-A&&C<I+A&&(C=I+A);Hzd(g,B);Izd(g,C);sLd((!g.a&&(g.a=new XZd(D4,g,5)),g.a));f=Jwb(b,5);t==F&&++f;L=B-q;O=C-r;J=$wnd.Math.sqrt(L*L+O*O);l=J*0.20000000298023224;M=L/(f+1);P=O/(f+1);K=q;N=r;for(k=0;k<f;k++){K+=M;N+=P;m=K+Kwb(b,24)*Nxe*l-l/2;m<0?(m=1):m>c&&(m=c-1);n=N+Kwb(b,24)*Nxe*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(bvd(),i=new Xxd,i);Vxd(e,m);Wxd(e,n);WGd((!g.a&&(g.a=new XZd(D4,g,5)),g.a),e)}} +function Y7c(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,$Fe),'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 _7c)));Agd(a,$Fe,Dze,1.3);Agd(a,$Fe,hAe,(Geb(),false));Agd(a,$Fe,Eze,O7c);Agd(a,$Fe,_ze,15);Agd(a,$Fe,YDe,iGd(y7c));Agd(a,$Fe,jAe,iGd(F7c));Agd(a,$Fe,CAe,iGd(H7c));Agd(a,$Fe,iAe,iGd(I7c));Agd(a,$Fe,kAe,iGd(E7c));Agd(a,$Fe,gAe,iGd(J7c));Agd(a,$Fe,lAe,iGd(P7c));Agd(a,$Fe,RFe,iGd(U7c));Agd(a,$Fe,SFe,iGd(T7c));Agd(a,$Fe,QFe,iGd(W7c));Agd(a,$Fe,PFe,iGd(V7c));Agd(a,$Fe,TFe,iGd(M7c));Agd(a,$Fe,UFe,iGd(L7c));Agd(a,$Fe,VFe,iGd(K7c));Agd(a,$Fe,WFe,iGd(S7c));Agd(a,$Fe,dAe,iGd(B7c));Agd(a,$Fe,iEe,iGd(C7c));Agd(a,$Fe,NFe,iGd(A7c));Agd(a,$Fe,MFe,iGd(z7c));Agd(a,$Fe,OFe,iGd(D7c));Agd(a,$Fe,LFe,iGd(R7c))} +function Ajb(a,b){xjb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return zxe;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:w=new bib;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=$C(hE,zwe,28,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=Cdb(h,yxe);do{p=H;H=Fdb(H,10);u[--c]=48+Ydb(Vdb(p,Ndb(H,10)))&Bwe}while(Ddb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&Bwe}while(H!=0)}}else{D=$C(kE,Pwe,28,o,15,1);G=o;hib(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=Bdb(Sdb(A,32),Cdb(D[j],yxe));r=yjb(F);D[j]=Ydb(r);A=Ydb(Tdb(r,32))}s=Ydb(A);q=c;do{u[--c]=48+s%10&Bwe}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i<d&&c>0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return Ihb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return Ihb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return Ihb(u,c,t-c)}C=c+1;f=t;v=new cib;n&&(v.a+='-',v);if(f-C>=1){Thb(v,u[c]);v.a+='.';v.a+=Ihb(u,c+1,t-c-1)}else{v.a+=Ihb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} +function Jad(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Tsb;c=(lud(),new zud(a.c));d=new PJb(c);LJb(d);t=WD(Gxd(a.c,(ncd(),gcd)));i=RD(Gxd(a.c,icd),324);v=RD(Gxd(a.c,jcd),437);g=RD(Gxd(a.c,bcd),489);u=RD(Gxd(a.c,hcd),438);a.j=Kfb(UD(Gxd(a.c,kcd)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw Adb(new agb(eGe+(i.f!=null?i.f:''+i.g)));}a.d=new qbd(h,v,g);pQb(a.d,(OQb(),MQb),TD(Gxd(a.c,dcd)));a.d.c=Heb(TD(Gxd(a.c,ccd)));if(tCd(a.c).i==0){return a.d}for(l=new dMd(tCd(a.c));l.e!=l.i.gc();){k=RD(bMd(l),27);n=k.g/2;m=k.f/2;w=new rjd(k.i+n,k.j+m);while(Ujb(a.g,w)){Zid(w,($wnd.Math.random()-0.5)*Vze,($wnd.Math.random()-0.5)*Vze)}p=RD(Gxd(k,(umd(),eld)),140);q=new TQb(w,new Uid(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Rmb(a.d.i,q);Zjb(a.g,w,new Ptd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=RD(Vmb(a.d.i,0),68)}else{for(s=new Anb(a.d.i);s.a<s.c.c.length;){q=RD(ynb(s),68);o=RD(RD(Wjb(a.g,q.a),42).b,27).jh();o!=null&&lhb(o,t)&&(a.d.d=q)}}break;case 1:e=new rjd(a.c.g,a.c.f);e.a*=0.5;e.b*=0.5;Zid(e,a.c.i,a.c.j);f=oxe;for(r=new Anb(a.d.i);r.a<r.c.c.length;){q=RD(ynb(r),68);j=bjd(q.a,e);if(j<f){f=j;a.d.d=q}}break;default:throw Adb(new agb(eGe+(u.f!=null?u.f:''+u.g)));}return a.d} +function b5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;m=0;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);if(!Heb(TD(Gxd(d,(yCc(),pBc))))){k=vCd(d);if((dE(Gxd(k,cAc))!==dE((kEc(),hEc))||dE(Gxd(k,pAc))===dE((Ptc(),Otc))||dE(Gxd(k,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(k,eAc)))||dE(Gxd(k,Yzc))!==dE((U$b(),T$b))||dE(Gxd(k,ZAc))===dE((aEc(),TDc))||dE(Gxd(k,ZAc))===dE((aEc(),UDc))||dE(Gxd(k,$Ac))===dE((_Cc(),SCc))||dE(Gxd(k,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(d,aAc)))){Ixd(d,(Ywc(),zwc),sgb(m));++m}i5b(a,d,c)}}m=0;for(j=new dMd((!b.b&&(b.b=new C5d(G4,b,12,3)),b.b));j.e!=j.i.gc();){h=RD(bMd(j),74);if(dE(Gxd(b,(yCc(),cAc)))!==dE((kEc(),hEc))||dE(Gxd(b,pAc))===dE((Ptc(),Otc))||dE(Gxd(b,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(b,eAc)))||dE(Gxd(b,Yzc))!==dE((U$b(),T$b))||dE(Gxd(b,ZAc))===dE((aEc(),TDc))||dE(Gxd(b,ZAc))===dE((aEc(),UDc))||dE(Gxd(b,$Ac))===dE((_Cc(),SCc))||dE(Gxd(b,$Ac))===dE((_Cc(),UCc))){Ixd(h,(Ywc(),zwc),sgb(m));++m}p=JGd(h);q=LGd(h);l=Heb(TD(Gxd(p,NAc)));o=!Heb(TD(Gxd(h,pBc)));n=l&&ozd(h)&&Heb(TD(Gxd(h,OAc)));f=vCd(p)==b&&vCd(p)==vCd(q);g=(vCd(p)==b&&q==b)^(vCd(q)==b&&p==b);o&&!n&&(g||f)&&f5b(a,h,b,c)}if(vCd(b)){for(i=new dMd(uCd(vCd(b)));i.e!=i.i.gc();){h=RD(bMd(i),74);p=JGd(h);if(p==b&&ozd(h)){n=Heb(TD(Gxd(p,(yCc(),NAc))))&&Heb(TD(Gxd(h,OAc)));n&&f5b(a,h,b,c)}}}} +function SFc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;c.Ug('Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=$C(kE,Pwe,28,L,15,1);a.c=$C(kE,Pwe,28,L,15,1);a.b=$C(kE,Pwe,28,L,15,1);j=0;for(r=new Anb(t);r.a<r.c.c.length;){p=RD(ynb(r),10);p.p=j;for(C=new Anb(p.j);C.a<C.c.c.length;){w=RD(ynb(C),12);for(h=new Anb(w.e);h.a<h.c.c.length;){d=RD(ynb(h),18);if(d.c.i==p){continue}G=RD(mQb(d,(yCc(),KBc)),17).a;a.a[j]+=G>0?G+1:1}for(g=new Anb(w.g);g.a<g.c.c.length;){d=RD(ynb(g),18);if(d.d.i==p){continue}G=RD(mQb(d,(yCc(),KBc)),17).a;a.c[j]+=G>0?G+1:1}}a.c[j]==0?Mub(a.e,p):a.a[j]==0&&Mub(a.f,p);++j}o=-1;n=1;l=new bnb;a.d=RD(mQb(b,(Ywc(),Lwc)),234);while(L>0){while(a.e.b!=0){I=RD(Uub(a.e),10);a.b[I.p]=o--;TFc(a,I);--L}while(a.f.b!=0){J=RD(Uub(a.f),10);a.b[J.p]=n++;TFc(a,J);--L}if(L>0){m=qwe;for(s=new Anb(t);s.a<s.c.c.length;){p=RD(ynb(s),10);if(a.b[p.p]==0){u=a.c[p.p]-a.a[p.p];if(u>=m){if(u>m){l.c.length=0;m=u}ZEb(l.c,p)}}}k=a.sg(l);a.b[k.p]=n++;TFc(a,k);--L}}H=t.c.length+1;for(j=0;j<t.c.length;j++){a.b[j]<0&&(a.b[j]+=H)}for(q=new Anb(t);q.a<q.c.c.length;){p=RD(ynb(q),10);F=u2b(p.j);for(A=F,B=0,D=A.length;B<D;++B){w=A[B];v=s2b(w.g);for(e=v,f=0,i=e.length;f<i;++f){d=e[f];K=d.d.i.p;if(a.b[p.p]>a.b[K]){X0b(d,true);pQb(b,awc,(Geb(),true))}}}}a.a=null;a.c=null;a.b=null;Xub(a.f);Xub(a.e);c.Vg()} +function usd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;v=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);k=new Ejd;u=new Tsb;w=xsd(v);rtb(u.f,v,w);m=new Tsb;d=new Yub;for(o=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!b.d&&(b.d=new Yie(G4,b,8,5)),b.d),(!b.e&&(b.e=new Yie(G4,b,7,4)),b.e)])));gs(o);){n=RD(hs(o),74);if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i!=1){throw Adb(new agb(tHe+(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i))}if(n!=a){q=RD(QHd((!n.a&&(n.a=new C5d(F4,n,6,6)),n.a),0),166);Pub(d,q,d.c.b,d.c);p=RD(Wd(qtb(u.f,q)),13);if(!p){p=xsd(q);rtb(u.f,q,p)}l=c?ojd(new sjd(RD(Vmb(w,w.c.length-1),8)),RD(Vmb(p,p.c.length-1),8)):ojd(new sjd((tFb(0,w.c.length),RD(w.c[0],8))),(tFb(0,p.c.length),RD(p.c[0],8)));rtb(m.f,q,l)}}if(d.b!=0){r=RD(Vmb(w,c?w.c.length-1:0),8);for(j=1;j<w.c.length;j++){s=RD(Vmb(w,c?w.c.length-1-j:j),8);e=Sub(d,0);while(e.b!=e.d.c){q=RD(evb(e),166);p=RD(Wd(qtb(u.f,q)),13);if(p.c.length<=j){gvb(e)}else{t=$id(new sjd(RD(Vmb(p,c?p.c.length-1-j:j),8)),RD(Wd(qtb(m.f,q)),8));if(s.a!=t.a||s.b!=t.b){f=s.a-r.a;h=s.b-r.b;g=t.a-r.a;i=t.b-r.b;g*h==i*f&&(f==0||isNaN(f)?f:f<0?-1:1)==(g==0||isNaN(g)?g:g<0?-1:1)&&(h==0||isNaN(h)?h:h<0?-1:1)==(i==0||isNaN(i)?i:i<0?-1:1)?($wnd.Math.abs(f)<$wnd.Math.abs(g)||$wnd.Math.abs(h)<$wnd.Math.abs(i))&&(Pub(k,s,k.c.b,k.c),true):j>1&&(Pub(k,r,k.c.b,k.c),true);gvb(e)}}}r=s}}return k} +function S_c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;c.Ug(_Ee,1);D=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new e0c),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);k=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new g0c(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);o=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new i0c(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);p=$C(Z$,NEe,39,b.gc(),0,1);for(g=0;g<k.gc();g++){e=RD(k.Xb(g),39);C=RD(mQb(e,(h_c(),W$c)),17).a;if(C>=0&&C<k.gc()&&!p[C]){p[C]=e;k.gd(g);--g}}for(h=0;h<k.gc();h++){e=RD(k.Xb(h),39);C=RD(mQb(e,(h_c(),W$c)),17).a;for(m=0;;m++){n=C+m;if(n<p.length&&n>=0&&!p[n]){p[n]=e;k.gd(h);--h;break}n=C-m;if(n<p.length&&n>=0&&!p[n]){p[n]=e;k.gd(h);--h;break}}}o.jd(new k0c);for(i=p.length-1;i>=0;i--){if(!p[i]&&!o.dc()){p[i]=RD(o.Xb(0),39);o.gd(0)}}for(j=0;j<p.length;j++){if(!p[j]&&!D.dc()){p[j]=RD(D.Xb(0),39);D.gd(0)}}for(f=0;f<p.length;f++){pQb(p[f],(q$c(),i$c),sgb(f))}l=RD(RDb(CDb(new SDb(null,new Swb(b,16)),new o0c),new a0c),534);for(w=l,A=0,B=w.length;A<B;++A){v=w[A];d=$Wc(v);S_c(a,d,c.eh(1/l.length|0));yob();tvb(d,new uGd((q$c(),i$c)));q=new Yub;for(u=Sub(d,0);u.b!=u.d.c;){t=RD(evb(u),39);for(s=Sub(v.d,0);s.b!=s.d.c;){r=RD(evb(s),65);r.c==t&&(Pub(q,r,q.c.b,q.c),true)}}Xub(v.d);ye(v.d,q)}c.Vg()} +function jTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new bnb;h=new bnb;q=b/2;n=a.gc();e=RD(a.Xb(0),8);r=RD(a.Xb(1),8);o=kTb(e.a,e.b,r.a,r.b,q);Rmb(d,(tFb(0,o.c.length),RD(o.c[0],8)));Rmb(h,(tFb(1,o.c.length),RD(o.c[1],8)));for(j=2;j<n;j++){p=e;e=r;r=RD(a.Xb(j),8);o=kTb(e.a,e.b,p.a,p.b,q);Rmb(d,(tFb(1,o.c.length),RD(o.c[1],8)));Rmb(h,(tFb(0,o.c.length),RD(o.c[0],8)));o=kTb(e.a,e.b,r.a,r.b,q);Rmb(d,(tFb(0,o.c.length),RD(o.c[0],8)));Rmb(h,(tFb(1,o.c.length),RD(o.c[1],8)))}o=kTb(r.a,r.b,e.a,e.b,q);Rmb(d,(tFb(1,o.c.length),RD(o.c[1],8)));Rmb(h,(tFb(0,o.c.length),RD(o.c[0],8)));c=new Ejd;g=new bnb;Mub(c,(tFb(0,d.c.length),RD(d.c[0],8)));for(k=1;k<d.c.length-2;k+=2){f=(tFb(k,d.c.length),RD(d.c[k],8));m=iTb((tFb(k-1,d.c.length),RD(d.c[k-1],8)),f,(tFb(k+1,d.c.length),RD(d.c[k+1],8)),(tFb(k+2,d.c.length),RD(d.c[k+2],8)));!isFinite(m.a)||!isFinite(m.b)?(Pub(c,f,c.c.b,c.c),true):(Pub(c,m,c.c.b,c.c),true)}Mub(c,RD(Vmb(d,d.c.length-1),8));Rmb(g,(tFb(0,h.c.length),RD(h.c[0],8)));for(l=1;l<h.c.length-2;l+=2){f=(tFb(l,h.c.length),RD(h.c[l],8));m=iTb((tFb(l-1,h.c.length),RD(h.c[l-1],8)),f,(tFb(l+1,h.c.length),RD(h.c[l+1],8)),(tFb(l+2,h.c.length),RD(h.c[l+2],8)));!isFinite(m.a)||!isFinite(m.b)?(ZEb(g.c,f),true):(ZEb(g.c,m),true)}Rmb(g,RD(Vmb(h,h.c.length-1),8));for(i=g.c.length-1;i>=0;i--){Mub(c,(tFb(i,g.c.length),RD(g.c[i],8)))}return c} +function l9c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;t=Kfb(UD(Gxd(b,(X6c(),W6c))));n=Kfb(UD(Gxd(b,U6c)));m=Kfb(UD(Gxd(b,R6c)));Bad((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));r=U8c((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),t,a.b);for(q=0;q<r.c.length;q++){i=(tFb(q,r.c.length),RD(r.c[q],186));if(q!=0){o=(tFb(q-1,r.c.length),RD(r.c[q-1],186));Gad(i,o.f+o.b+a.b)}p=J8c(q,r,t,a.b,Heb(TD(Gxd(b,(X7c(),L7c)))));if(Heb(TD(p.b))){for(f=new Anb(i.a);f.a<f.c.c.length;){e=RD(ynb(f),172);e.c=false;e.k=false;N9c(e)}i.d=new bnb;i.e=t;--q}else{k9c(a,i);if(q+1<r.c.length){a.e=$wnd.Math.max(i.e+a.b+RD(Vmb((tFb(q+1,r.c.length),RD(r.c[q+1],186)).a,0),172).r-t,a.c);a.f=$wnd.Math.min(i.e+a.b+RD(Vmb((tFb(q+1,r.c.length),RD(r.c[q+1],186)).a,0),172).r-t,a.d);if(i.d.c.length!=0){a.c=$wnd.Math.max(a.c,RD(Vmb(i.d,i.d.c.length-1),315).d+(i.d.c.length<=1?0:a.b));a.d=$wnd.Math.min(a.c,RD(Vmb(i.d,i.d.c.length-1),315).d+(i.d.c.length<=1?0:a.b))}}if(r.c.length==1){l=RD(Vmb(i.d,i.d.c.length-1),315);k=RD(Vmb(l.a,l.a.c.length-1),172);for(h=new Anb(k.n);h.a<h.c.c.length;){g=RD(ynb(h),209);a.c=$wnd.Math.max(a.c,k.r-g.d);a.d=$wnd.Math.min(a.d,k.r-g.d);a.e=$wnd.Math.max(a.e,g.d+a.b);a.f=$wnd.Math.min(a.f,g.d+a.b)}}}}s=zad(r,a.b);u=$wnd.Math.max(s.a,n-(c.b+c.c));j=$wnd.Math.max(s.b,m-(c.d+c.a));d=j-s.b;Ixd(b,M6c,d);Ixd(b,V6c,r);return new lad(a.a,u,s.b+d,(sad(),rad))} +function e9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=RD(mQb(a,(yCc(),BBc)),101);if(!(A!=(Bod(),zod)&&A!=Aod)){return}o=a.b;n=o.c.length;k=new cnb((dk(n+2,lwe),dz(Bdb(Bdb(5,n+2),(n+2)/10|0))));p=new cnb((dk(n+2,lwe),dz(Bdb(Bdb(5,n+2),(n+2)/10|0))));Rmb(k,new Tsb);Rmb(k,new Tsb);Rmb(p,new bnb);Rmb(p,new bnb);w=new bnb;for(b=0;b<n;b++){c=(tFb(b,o.c.length),RD(o.c[b],30));B=(tFb(b,k.c.length),RD(k.c[b],85));q=new Tsb;ZEb(k.c,q);D=(tFb(b,p.c.length),RD(p.c[b],15));s=new bnb;ZEb(p.c,s);for(e=new Anb(c.a);e.a<e.c.c.length;){d=RD(ynb(e),10);if(a9b(d)){ZEb(w.c,d);continue}for(j=new is(Mr(Z2b(d).a.Kc(),new ir));gs(j);){h=RD(hs(j),18);F=h.c.i;if(!a9b(F)){continue}C=RD(B.xc(mQb(F,(Ywc(),Awc))),10);if(!C){C=_8b(a,F);B.zc(mQb(F,Awc),C);D.Fc(C)}Y0b(h,RD(Vmb(C.j,1),12))}for(i=new is(Mr(a3b(d).a.Kc(),new ir));gs(i);){h=RD(hs(i),18);G=h.d.i;if(!a9b(G)){continue}r=RD(Wjb(q,mQb(G,(Ywc(),Awc))),10);if(!r){r=_8b(a,G);Zjb(q,mQb(G,Awc),r);ZEb(s.c,r)}Z0b(h,RD(Vmb(r.j,0),12))}}}for(l=0;l<p.c.length;l++){t=(tFb(l,p.c.length),RD(p.c[l],15));if(t.dc()){continue}m=null;if(l==0){m=new R4b(a);wFb(0,o.c.length);XEb(o.c,0,m)}else if(l==k.c.length-1){m=new R4b(a);ZEb(o.c,m)}else{m=(tFb(l-1,o.c.length),RD(o.c[l-1],30))}for(g=t.Kc();g.Ob();){f=RD(g.Pb(),10);g3b(f,m)}}for(v=new Anb(w);v.a<v.c.c.length;){u=RD(ynb(v),10);g3b(u,null)}pQb(a,(Ywc(),fwc),w)} +function SNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;I=new bnb;for(o=new Anb(b.b);o.a<o.c.c.length;){m=RD(ynb(o),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);u.p=-1;l=qwe;B=qwe;for(D=new Anb(u.j);D.a<D.c.c.length;){C=RD(ynb(D),12);for(e=new Anb(C.e);e.a<e.c.c.length;){c=RD(ynb(e),18);F=RD(mQb(c,(yCc(),MBc)),17).a;l=$wnd.Math.max(l,F)}for(d=new Anb(C.g);d.a<d.c.c.length;){c=RD(ynb(d),18);F=RD(mQb(c,(yCc(),MBc)),17).a;B=$wnd.Math.max(B,F)}}pQb(u,HNc,sgb(l));pQb(u,INc,sgb(B))}}r=0;for(n=new Anb(b.b);n.a<n.c.c.length;){m=RD(ynb(n),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);if(u.p<0){H=new ZNc;H.b=r++;ONc(a,u,H);ZEb(I.c,H)}}}A=ev(I.c.length);k=ev(I.c.length);for(g=0;g<I.c.length;g++){Rmb(A,new bnb);Rmb(k,sgb(0))}MNc(b,I,A,k);J=RD(anb(I,$C(SY,uEe,261,I.c.length,0,1)),854);w=RD(anb(A,$C(QK,Ize,15,A.c.length,0,1)),198);j=$C(kE,Pwe,28,k.c.length,15,1);for(h=0;h<j.length;h++){j[h]=(tFb(h,k.c.length),RD(k.c[h],17)).a}s=0;t=new bnb;for(i=0;i<J.length;i++){j[i]==0&&(ZEb(t.c,J[i]),true)}q=$C(kE,Pwe,28,J.length,15,1);while(t.c.length!=0){H=RD(Xmb(t,0),261);q[H.b]=s++;while(!w[H.b].dc()){K=RD(w[H.b].gd(0),261);--j[K.b];j[K.b]==0&&(ZEb(t.c,K),true)}}a.a=$C(SY,uEe,261,J.length,0,1);for(f=0;f<J.length;f++){p=J[f];G=q[f];a.a[G]=p;p.b=G;for(v=new Anb(p.e);v.a<v.c.c.length;){u=RD(ynb(v),10);u.p=G}}return a.a} +function J8c(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;p=false;i=false;m=a+1;o=(tFb(a,b.c.length),RD(b.c[a],186));h=o.a;j=null;for(g=0;g<o.a.c.length;g++){f=(tFb(g,h.c.length),RD(h.c[g],172));if(f.c){continue}if(f.b.c.length==0){gib();String.fromCharCode(10);Fad(o,f);--g;p=true;continue}if(!f.k){!!j&&gad(j);j=new had(!j?0:j.e+j.d+d,o.f,d);U9c(f,j.e+j.d,o.f);Rmb(o.d,j);aad(j,f);f.k=true}k=null;k=(r=null,g<o.a.c.length-1?(r=RD(Vmb(o.a,g+1),172)):m<b.c.length&&(tFb(m,b.c.length),RD(b.c[m],186)).a.c.length!=0&&(r=RD(Vmb((tFb(m,b.c.length),RD(b.c[m],186)).a,0),172)),r);q=false;!!k&&(q=!pb(k.j,o));if(k){if(k.b.c.length!=0&&!Heb(TD(RD(Vmb(k.b,0),27).of((X7c(),D7c))))){Q9c(f,c-f.s);gad(f.q);p=p|I8c(o,f,k,c,d)}else{Fad(o,k);break}if(k.b.c.length==0){b.c.length>m&&Fad((tFb(m,b.c.length),RD(b.c[m],186)),k);k=null;while(b.c.length>m&&(tFb(m,b.c.length),RD(b.c[m],186)).a.c.length==0){Ymb(b,(tFb(m,b.c.length),b.c[m]))}}if(!k){--g;continue}if(!Heb(TD(RD(Vmb(k.b,0),27).of((X7c(),D7c))))&&K8c(b,o,f,k,q,c,m,d)){p=true;continue}if(q){n=o.b;l=k.f;if(!Heb(TD(RD(Vmb(k.b,0),27).of(D7c)))&&L8c(b,o,f,k,c,m,d,e)){p=true;if(n<l){i=true;k.j=o;break}continue}else if(M8c(o,f)){f.c=true;p=true;continue}}else if(M8c(o,f)){f.c=true;p=true;continue}if(p){continue}}if(M8c(o,f)){f.c=true;p=true;!!k&&(k.k=false);continue}else{gad(f.q)}}return new Ptd((Geb(),p?true:false),i?true:false)} +function yCc(){yCc=geb;QBc=(umd(),Wld);RBc=Xld;SBc=Yld;TBc=Zld;VBc=$ld;WBc=_ld;ZBc=bmd;_Bc=dmd;aCc=emd;$Bc=cmd;bCc=fmd;dCc=gmd;fCc=jmd;YBc=amd;PBc=(Ozc(),ezc);UBc=fzc;XBc=gzc;cCc=hzc;JBc=new mGd(Rld,sgb(0));KBc=bzc;LBc=czc;MBc=dzc;vCc=Fzc;nCc=kzc;oCc=nzc;rCc=vzc;pCc=qzc;qCc=szc;xCc=Kzc;wCc=Hzc;tCc=Bzc;sCc=zzc;uCc=Dzc;iBc=Uyc;jBc=Vyc;DAc=dyc;EAc=gyc;jCc=mmd;lCc=qmd;iCc=lmd;hCc=kmd;kCc=(mqd(),jqd);new mGd(nmd,kCc);rBc=new A3b(12);qBc=new mGd(tld,rBc);zAc=(Ymd(),Umd);yAc=new mGd(Skd,zAc);ABc=new mGd(Gld,0);NBc=new mGd(Sld,sgb(1));Tzc=new mGd(Dkd,Yze);pBc=rld;BBc=Hld;GBc=Old;qAc=Mkd;Rzc=Bkd;IAc=Xkd;OBc=new mGd(Vld,(Geb(),true));NAc=$kd;OAc=_kd;lBc=kld;oBc=pld;mBc=mld;tAc=(Cmd(),Amd);rAc=new mGd(Nkd,tAc);dBc=ild;cBc=gld;EBc=Lld;DBc=Kld;FBc=Nld;uBc=(pod(),ood);new mGd(zld,uBc);wBc=Cld;xBc=Dld;yBc=Eld;vBc=Bld;mCc=jzc;$Ac=Fyc;ZAc=Dyc;gCc=izc;UAc=vyc;pAc=Rxc;oAc=Pxc;eAc=yxc;fAc=zxc;hAc=Exc;gAc=Axc;nAc=Nxc;aBc=Hyc;bBc=Iyc;QAc=oyc;kBc=Zyc;fBc=Myc;GAc=jyc;hBc=Syc;BAc=_xc;CAc=byc;dAc=Kkd;eBc=Jyc;Xzc=mxc;Wzc=kxc;Vzc=jxc;KAc=myc;JAc=lyc;LAc=nyc;nBc=nld;RAc=cld;FAc=Ukd;wAc=Qkd;vAc=Pkd;iAc=Hxc;CBc=Jld;Uzc=Jkd;MAc=Zkd;zBc=Fld;sBc=vld;tBc=xld;WAc=yyc;XAc=Ayc;IBc=Qld;Szc=ixc;YAc=Cyc;xAc=Xxc;uAc=Vxc;_Ac=eld;SAc=syc;gBc=Pyc;eCc=hmd;sAc=Txc;HBc=_yc;AAc=Zxc;jAc=Jxc;kAc=Kxc;TAc=uyc;lAc=Lxc;PAc=bld;VAc=xyc;mAc=Mxc;cAc=wxc;_zc=sxc;Zzc=qxc;$zc=rxc;aAc=uxc;Yzc=oxc;bAc=vxc;HAc=kyc} +function Mqe(a){var b,c,d;if(a.d>=a.j){a.a=-1;a.c=1;return}b=ihb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),VIe))));a.a=ihb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d<a.j&&ihb(a.i,a.d)==91){++a.d;d=24}else d=0;break;case 91:if((a.e&512)!=512&&a.d<a.j&&ihb(a.i,a.d)==58){++a.d;d=20;break}default:if((b&64512)==uxe&&a.d<a.j){c=ihb(a.i,a.d);if((c&64512)==56320){a.a=txe+(b-uxe<<10)+c-56320;++a.d}}d=0;}a.c=d;return}switch(b){case 124:d=2;break;case 42:d=3;break;case 43:d=4;break;case 63:d=5;break;case 41:d=7;break;case 46:d=8;break;case 91:d=9;break;case 94:d=11;break;case 36:d=12;break;case 40:d=6;if(a.d>=a.j)break;if(ihb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw Adb(new Lqe(TId((Hde(),WIe))));b=ihb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),WIe))));b=ihb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw Adb(new Lqe(TId((Hde(),XIe))));break;case 35:while(a.d<a.j){b=ihb(a.i,a.d++);if(b==41)break}if(b!=41)throw Adb(new Lqe(TId((Hde(),YIe))));d=21;break;default:if(b==45||97<=b&&b<=122||65<=b&&b<=90){--a.d;d=22;break}else if(b==40){d=23;break}throw Adb(new Lqe(TId((Hde(),WIe))));}break;case 92:d=10;if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),VIe))));a.a=ihb(a.i,a.d++);break;default:d=0;}a.c=d} +function oXc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Process compaction',1);if(!Heb(TD(mQb(b,(h_c(),F$c))))){return}e=RD(mQb(b,H$c),88);n=Kfb(UD(mQb(b,_$c)));pXc(a,b,e);lXc(b,n/2/2);o=b.b;tvb(o,new EXc(e));for(j=Sub(o,0);j.b!=j.d.c;){i=RD(evb(j),39);if(!Heb(TD(mQb(i,(q$c(),n$c))))){d=mXc(i,e);p=lWc(i,b);l=0;m=0;if(d){q=d.e;switch(e.g){case 2:l=q.a-n-i.f.a;p.e.a-n-i.f.a<l&&(l=p.e.a-n-i.f.a);m=l+i.f.a;break;case 1:l=q.a+d.f.a+n;p.e.a+n>l&&(l=p.e.a+p.f.a+n);m=l+i.f.a;break;case 4:l=q.b-n-i.f.b;p.e.b-n-i.f.b<l&&(l=p.e.b-n-i.f.b);m=l+i.f.b;break;case 3:l=q.b+d.f.b+n;p.e.b+n>l&&(l=p.e.b+p.f.b+n);m=l+i.f.b;}}else if(p){switch(e.g){case 2:l=p.e.a-n-i.f.a;m=l+i.f.a;break;case 1:l=p.e.a+p.f.a+n;m=l+i.f.a;break;case 4:l=p.e.b-n-i.f.b;m=l+i.f.b;break;case 3:l=p.e.b+p.f.b+n;m=l+i.f.b;}}if(dE(mQb(b,K$c))===dE((LZc(),IZc))){f=l;g=m;h=DDb(CDb(new SDb(null,new Swb(a.a,16)),new IXc(f,g)));if(h.a!=null){e==(Cmd(),ymd)||e==zmd?(i.e.a=l):(i.e.b=l)}else{e==(Cmd(),ymd)||e==Bmd?(h=DDb(CDb(NDb(new SDb(null,new Swb(a.a,16))),new WXc(f)))):(h=DDb(CDb(NDb(new SDb(null,new Swb(a.a,16))),new YXc(f))));h.a!=null&&(e==ymd||e==zmd?(i.e.a=Kfb(UD((sFb(h.a!=null),RD(h.a,42)).a))):(i.e.b=Kfb(UD((sFb(h.a!=null),RD(h.a,42)).a))))}if(h.a!=null){k=Wmb(a.a,(sFb(h.a!=null),h.a),0);if(k>0&&k!=RD(mQb(i,f_c),17).a){pQb(i,UZc,(Geb(),true));pQb(i,f_c,sgb(k))}}}else{e==(Cmd(),ymd)||e==zmd?(i.e.a=l):(i.e.b=l)}}}c.Vg()} +function Fre(a){var b,c,d,e,f,g,h,i,j;a.b=1;Mqe(a);b=null;if(a.c==0&&a.a==94){Mqe(a);b=(Vse(),Vse(),++Use,new xte(4));rte(b,0,MLe);h=(null,++Use,new xte(4))}else{h=(Vse(),Vse(),++Use,new xte(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){wte(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:ute(h,Ere(c));d=true;break;case 105:case 73:case 99:case 67:c=(ute(h,Ere(c)),-1);c<0&&(d=true);break;case 112:case 80:i=Sqe(a,c);if(!i)throw Adb(new Lqe(TId((Hde(),hJe))));ute(h,i);d=true;break;default:c=Dre(a);}}else if(j==24&&!e){if(b){wte(b,h);h=b}f=Fre(a);wte(h,f);if(a.c!=0||a.a!=93)throw Adb(new Lqe(TId((Hde(),lJe))));break}Mqe(a);if(!d){if(j==0){if(c==91)throw Adb(new Lqe(TId((Hde(),mJe))));if(c==93)throw Adb(new Lqe(TId((Hde(),nJe))));if(c==45&&!e&&a.a!=93)throw Adb(new Lqe(TId((Hde(),oJe))))}if(a.c!=0||a.a!=45||c==45&&e){rte(h,c,c)}else{Mqe(a);if((j=a.c)==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(j==0&&a.a==93){rte(h,c,c);rte(h,45,45)}else if(j==0&&a.a==93||j==24){throw Adb(new Lqe(TId((Hde(),oJe))))}else{g=a.a;if(j==0){if(g==91)throw Adb(new Lqe(TId((Hde(),mJe))));if(g==93)throw Adb(new Lqe(TId((Hde(),nJe))));if(g==45)throw Adb(new Lqe(TId((Hde(),oJe))))}else j==10&&(g=Dre(a));Mqe(a);if(c>g)throw Adb(new Lqe(TId((Hde(),rJe))));rte(h,c,g)}}}e=false}if(a.c==1)throw Adb(new Lqe(TId((Hde(),jJe))));vte(h);ste(h);a.b=0;Mqe(a);return h} +function EGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;c.Ug('Coffman-Graham Layering',1);if(b.a.c.length==0){c.Vg();return}v=RD(mQb(b,(yCc(),SAc)),17).a;i=0;g=0;for(m=new Anb(b.a);m.a<m.c.c.length;){l=RD(ynb(m),10);l.p=i++;for(f=new is(Mr(a3b(l).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);e.p=g++}}a.d=$C(xdb,Hye,28,i,16,1);a.a=$C(xdb,Hye,28,g,16,1);a.b=$C(kE,Pwe,28,i,15,1);a.e=$C(kE,Pwe,28,i,15,1);a.f=$C(kE,Pwe,28,i,15,1);Nc(a.c);FGc(a,b);o=new pwb(new JGc(a));for(u=new Anb(b.a);u.a<u.c.c.length;){s=RD(ynb(u),10);for(f=new is(Mr(Z2b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);a.a[e.p]||++a.b[s.p]}a.b[s.p]==0&&(zFb(lwb(o,s),Bxe),true)}h=0;while(o.b.c.length!=0){s=RD(mwb(o),10);a.f[s.p]=h++;for(f=new is(Mr(a3b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a.a[e.p]){continue}q=e.d.i;--a.b[q.p];Rc(a.c,q,sgb(a.f[s.p]));a.b[q.p]==0&&(zFb(lwb(o,q),Bxe),true)}}n=new pwb(new NGc(a));for(t=new Anb(b.a);t.a<t.c.c.length;){s=RD(ynb(t),10);for(f=new is(Mr(a3b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);a.a[e.p]||++a.e[s.p]}a.e[s.p]==0&&(zFb(lwb(n,s),Bxe),true)}k=new bnb;d=BGc(b,k);while(n.b.c.length!=0){r=RD(mwb(n),10);(d.a.c.length>=v||!zGc(r,d))&&(d=BGc(b,k));g3b(r,d);for(f=new is(Mr(Z2b(r).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zFb(lwb(n,p),Bxe),true)}}for(j=k.c.length-1;j>=0;--j){Rmb(b.b,(tFb(j,k.c.length),RD(k.c[j],30)))}b.a.c.length=0;c.Vg()} +function Sec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=false;do{u=false;for(f=b?(new Xkb(a.a.b)).a.gc()-2:1;b?f>=0:f<(new Xkb(a.a.b)).a.gc();f+=b?-1:1){e=_5b(a.a,sgb(f));for(n=0;n<e.b;n++){l=RD(ju(e,n),10);if(!nQb(l,(Ywc(),zwc))){continue}if(a6b(a.a,sgb(f))&&a.r==(aEc(),TDc)||b6b(a.a,sgb(f))&&a.r==(aEc(),UDc)){continue}t=true;for(r=0;r<e.b;r++){q=RD(ju(e,r),10);nQb(q,zwc)&&(b&&RD(mQb(l,zwc),17).a<RD(mQb(q,zwc),17).a||!b&&RD(mQb(l,zwc),17).a>RD(mQb(q,zwc),17).a)&&(t=false)}if(!t){continue}i=b?f+1:f-1;h=_5b(a.a,sgb(i));g=false;s=true;d=false;for(k=Sub(h,0);k.b!=k.d.c;){j=RD(evb(k),10);if(nQb(j,zwc)){if(j.p!=l.p){g=g|(b?RD(mQb(j,zwc),17).a<RD(mQb(l,zwc),17).a:RD(mQb(j,zwc),17).a>RD(mQb(l,zwc),17).a);s=false}}else if(!g&&s){if(j.k==(r3b(),n3b)){d=true;b?(m=RD(hs(new is(Mr(Z2b(j).a.Kc(),new ir))),18).c.i):(m=RD(hs(new is(Mr(a3b(j).a.Kc(),new ir))),18).d.i);if(m==l){b?(c=RD(hs(new is(Mr(a3b(j).a.Kc(),new ir))),18).d.i):(c=RD(hs(new is(Mr(Z2b(j).a.Kc(),new ir))),18).c.i);(b?RD($5b(a.a,c),17).a-RD($5b(a.a,m),17).a:RD($5b(a.a,m),17).a-RD($5b(a.a,c),17).a)<=2&&(s=false)}}}}if(d&&s){b?(c=RD(hs(new is(Mr(a3b(l).a.Kc(),new ir))),18).d.i):(c=RD(hs(new is(Mr(Z2b(l).a.Kc(),new ir))),18).c.i);(b?RD($5b(a.a,c),17).a-RD($5b(a.a,l),17).a:RD($5b(a.a,l),17).a-RD($5b(a.a,c),17).a)<=2&&c.k==(r3b(),p3b)&&(s=false)}if(g||s){p=Xec(a,l,b);while(p.a.gc()!=0){o=RD(p.a.ec().Kc().Pb(),10);p.a.Bc(o)!=null;ye(p,Xec(a,o,b))}--n;u=true}}}}while(u)} +function Xae(a){_Ad(a.c,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#decimal']));_Ad(a.d,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#integer']));_Ad(a.e,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#boolean']));_Ad(a.f,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EBoolean',GIe,'EBoolean:Object']));_Ad(a.i,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#byte']));_Ad(a.g,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#hexBinary']));_Ad(a.j,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EByte',GIe,'EByte:Object']));_Ad(a.n,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EChar',GIe,'EChar:Object']));_Ad(a.t,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#double']));_Ad(a.u,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EDouble',GIe,'EDouble:Object']));_Ad(a.F,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#float']));_Ad(a.G,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EFloat',GIe,'EFloat:Object']));_Ad(a.I,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#int']));_Ad(a.J,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EInt',GIe,'EInt:Object']));_Ad(a.N,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#long']));_Ad(a.O,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'ELong',GIe,'ELong:Object']));_Ad(a.Z,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#short']));_Ad(a.$,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EShort',GIe,'EShort:Object']));_Ad(a._,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#string']))} +function C0c(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o;m=RD(d.a,17).a;n=RD(d.b,17).a;l=a.b;o=a.c;h=0;k=0;if(b==(Cmd(),ymd)||b==zmd){k=Uvb(QCb(HDb(GDb(new SDb(null,new Swb(c.b,16)),new b2c),new b1c)));if(l.e.b+l.f.b/2>k){j=++n;h=Kfb(UD(Lvb(JDb(GDb(new SDb(null,new Swb(c.b,16)),new d2c(e,j)),new d1c))))}else{i=++m;h=Kfb(UD(Lvb(KDb(GDb(new SDb(null,new Swb(c.b,16)),new f2c(e,i)),new h1c))))}}else{k=Uvb(QCb(HDb(GDb(new SDb(null,new Swb(c.b,16)),new x1c),new l1c)));if(l.e.a+l.f.a/2>k){j=++n;h=Kfb(UD(Lvb(JDb(GDb(new SDb(null,new Swb(c.b,16)),new z1c(e,j)),new n1c))))}else{i=++m;h=Kfb(UD(Lvb(KDb(GDb(new SDb(null,new Swb(c.b,16)),new B1c(e,i)),new r1c))))}}if(b==ymd){Oub(a.a,new rjd(Kfb(UD(mQb(l,(q$c(),f$c))))-e,h));Oub(a.a,new rjd(o.e.a+o.f.a+e+f,h));Oub(a.a,new rjd(o.e.a+o.f.a+e+f,o.e.b+o.f.b/2));Oub(a.a,new rjd(o.e.a+o.f.a,o.e.b+o.f.b/2))}else if(b==zmd){Oub(a.a,new rjd(Kfb(UD(mQb(l,(q$c(),e$c))))+e,l.e.b+l.f.b/2));Oub(a.a,new rjd(l.e.a+l.f.a+e,h));Oub(a.a,new rjd(o.e.a-e-f,h));Oub(a.a,new rjd(o.e.a-e-f,o.e.b+o.f.b/2));Oub(a.a,new rjd(o.e.a,o.e.b+o.f.b/2))}else if(b==Bmd){Oub(a.a,new rjd(h,Kfb(UD(mQb(l,(q$c(),f$c))))-e));Oub(a.a,new rjd(h,o.e.b+o.f.b+e+f));Oub(a.a,new rjd(o.e.a+o.f.a/2,o.e.b+o.f.b+e+f));Oub(a.a,new rjd(o.e.a+o.f.a/2,o.e.b+o.f.b+e))}else{a.a.b==0||(RD(Rub(a.a),8).b=Kfb(UD(mQb(l,(q$c(),e$c))))+e*RD(g.b,17).a);Oub(a.a,new rjd(h,Kfb(UD(mQb(l,(q$c(),e$c))))+e*RD(g.b,17).a));Oub(a.a,new rjd(h,o.e.b-e*RD(g.a,17).a-f))}return new Ptd(sgb(m),sgb(n))} +function ASd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=_Rd;j=null;f=null;h=0;i=sSd(a,h,ZRd,$Rd);if(i<a.length&&(BFb(i,a.length),a.charCodeAt(i)==58)){l=(AFb(h,i,a.length),a.substr(h,i-h));h=i+1}c=l!=null&&tpb(eSd,l.toLowerCase());if(c){i=a.lastIndexOf('!/');if(i==-1){throw Adb(new agb('no archive separator'))}g=true;d=zhb(a,h,++i);h=i}else if(h>=0&&lhb(a.substr(h,'//'.length),'//')){h+=2;i=sSd(a,h,aSd,bSd);d=(AFb(h,i,a.length),a.substr(h,i-h));h=i}else if(l!=null&&(h==a.length||(BFb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=rhb(a,Fhb(35),h);i==-1&&(i=a.length);d=(AFb(h,i,a.length),a.substr(h,i-h));h=i}if(!c&&h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)){i=sSd(a,h+1,aSd,bSd);k=(AFb(h+1,i,a.length),a.substr(h+1,i-(h+1)));if(k.length>0&&ihb(k,k.length-1)==58){e=k;h=i}}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)){++h;b=true}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)!=63)&&(BFb(h,a.length),a.charCodeAt(h)!=35)){m=new bnb;while(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)!=63)&&(BFb(h,a.length),a.charCodeAt(h)!=35)){i=sSd(a,h,aSd,bSd);Rmb(m,(AFb(h,i,a.length),a.substr(h,i-h)));h=i;h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)&&(BSd(a,++h)||(m.c.push(''),undefined,true))}n=$C(qJ,Nve,2,m.c.length,6,1);anb(m,n)}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==63)){i=phb(a,35,++h);i==-1&&(i=a.length);j=(AFb(h,i,a.length),a.substr(h,i-h));h=i}h<a.length&&(f=yhb(a,++h));ISd(g,l,d,e,n,j);return new lSd(g,l,d,e,b,n,j,f)} +function P_b(){P_b=geb;z$b();O_b=new Tp;Rc(O_b,(qpd(),cpd),bpd);Rc(O_b,mpd,bpd);Rc(O_b,dpd,bpd);Rc(O_b,jpd,bpd);Rc(O_b,ipd,bpd);Rc(O_b,gpd,bpd);Rc(O_b,jpd,cpd);Rc(O_b,bpd,Zod);Rc(O_b,cpd,Zod);Rc(O_b,mpd,Zod);Rc(O_b,dpd,Zod);Rc(O_b,hpd,Zod);Rc(O_b,jpd,Zod);Rc(O_b,ipd,Zod);Rc(O_b,gpd,Zod);Rc(O_b,apd,Zod);Rc(O_b,bpd,kpd);Rc(O_b,cpd,kpd);Rc(O_b,Zod,kpd);Rc(O_b,mpd,kpd);Rc(O_b,dpd,kpd);Rc(O_b,hpd,kpd);Rc(O_b,jpd,kpd);Rc(O_b,apd,kpd);Rc(O_b,lpd,kpd);Rc(O_b,ipd,kpd);Rc(O_b,epd,kpd);Rc(O_b,gpd,kpd);Rc(O_b,cpd,mpd);Rc(O_b,dpd,mpd);Rc(O_b,jpd,mpd);Rc(O_b,gpd,mpd);Rc(O_b,cpd,dpd);Rc(O_b,mpd,dpd);Rc(O_b,jpd,dpd);Rc(O_b,dpd,dpd);Rc(O_b,ipd,dpd);Rc(O_b,bpd,$od);Rc(O_b,cpd,$od);Rc(O_b,Zod,$od);Rc(O_b,kpd,$od);Rc(O_b,mpd,$od);Rc(O_b,dpd,$od);Rc(O_b,hpd,$od);Rc(O_b,jpd,$od);Rc(O_b,lpd,$od);Rc(O_b,apd,$od);Rc(O_b,gpd,$od);Rc(O_b,ipd,$od);Rc(O_b,fpd,$od);Rc(O_b,bpd,lpd);Rc(O_b,cpd,lpd);Rc(O_b,Zod,lpd);Rc(O_b,mpd,lpd);Rc(O_b,dpd,lpd);Rc(O_b,hpd,lpd);Rc(O_b,jpd,lpd);Rc(O_b,apd,lpd);Rc(O_b,gpd,lpd);Rc(O_b,epd,lpd);Rc(O_b,fpd,lpd);Rc(O_b,cpd,apd);Rc(O_b,mpd,apd);Rc(O_b,dpd,apd);Rc(O_b,jpd,apd);Rc(O_b,lpd,apd);Rc(O_b,gpd,apd);Rc(O_b,ipd,apd);Rc(O_b,bpd,_od);Rc(O_b,cpd,_od);Rc(O_b,Zod,_od);Rc(O_b,mpd,_od);Rc(O_b,dpd,_od);Rc(O_b,hpd,_od);Rc(O_b,jpd,_od);Rc(O_b,apd,_od);Rc(O_b,gpd,_od);Rc(O_b,cpd,ipd);Rc(O_b,Zod,ipd);Rc(O_b,kpd,ipd);Rc(O_b,dpd,ipd);Rc(O_b,bpd,epd);Rc(O_b,cpd,epd);Rc(O_b,kpd,epd);Rc(O_b,mpd,epd);Rc(O_b,dpd,epd);Rc(O_b,hpd,epd);Rc(O_b,jpd,epd);Rc(O_b,jpd,fpd);Rc(O_b,dpd,fpd);Rc(O_b,apd,bpd);Rc(O_b,apd,mpd);Rc(O_b,apd,Zod);Rc(O_b,hpd,bpd);Rc(O_b,hpd,cpd);Rc(O_b,hpd,kpd)} +function _Qc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;c.Ug('Brandes & Koepf node placement',1);a.a=b;a.c=iRc(b);d=RD(mQb(b,(yCc(),fBc)),281);n=Heb(TD(mQb(b,gBc)));a.d=d==(Ouc(),Luc)&&!n||d==Iuc;$Qc(a,b);v=null;w=null;r=null;s=null;q=(dk(4,iwe),new cnb(4));switch(RD(mQb(b,fBc),281).g){case 3:r=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),uQc));ZEb(q.c,r);break;case 1:s=new sQc(b,a.c.d,(EQc(),DQc),(wQc(),uQc));ZEb(q.c,s);break;case 4:v=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),vQc));ZEb(q.c,v);break;case 2:w=new sQc(b,a.c.d,(EQc(),DQc),(wQc(),vQc));ZEb(q.c,w);break;default:r=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),uQc));s=new sQc(b,a.c.d,DQc,uQc);v=new sQc(b,a.c.d,CQc,vQc);w=new sQc(b,a.c.d,DQc,vQc);ZEb(q.c,v);ZEb(q.c,w);ZEb(q.c,r);ZEb(q.c,s);}e=new MQc(b,a.c);for(h=new Anb(q);h.a<h.c.c.length;){f=RD(ynb(h),185);LQc(e,f,a.b);KQc(f)}m=new RQc(b,a.c);for(i=new Anb(q);i.a<i.c.c.length;){f=RD(ynb(i),185);OQc(m,f)}if(c._g()){for(j=new Anb(q);j.a<j.c.c.length;){f=RD(ynb(j),185);c.bh(f+' size is '+qQc(f))}}l=null;if(a.d){k=YQc(a,q,a.c.d);XQc(b,k,c)&&(l=k)}if(!l){for(j=new Anb(q);j.a<j.c.c.length;){f=RD(ynb(j),185);XQc(b,f,c)&&(!l||qQc(l)>qQc(f))&&(l=f)}}!l&&(l=(tFb(0,q.c.length),RD(q.c[0],185)));for(p=new Anb(b.b);p.a<p.c.c.length;){o=RD(ynb(p),30);for(u=new Anb(o.a);u.a<u.c.c.length;){t=RD(ynb(u),10);t.n.b=Kfb(l.p[t.p])+Kfb(l.d[t.p])}}if(c._g()){c.bh('Chosen node placement: '+l);c.bh('Blocks: '+bRc(l));c.bh('Classes: '+cRc(l,c));c.bh('Marked edges: '+a.b)}for(g=new Anb(q);g.a<g.c.c.length;){f=RD(ynb(g),185);f.g=null;f.b=null;f.a=null;f.d=null;f.j=null;f.i=null;f.p=null}gRc(a.c);a.b.a.$b();c.Vg()} +function GVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){CVc((tFb(0,a.c.length),RD(a.c[0],121)));return tFb(0,a.c.length),RD(a.c[0],121)}else if(a.c.length<=0){return new YWc}for(i=new Anb(a);i.a<i.c.c.length;){g=RD(ynb(i),121);s=0;o=lve;p=lve;m=qwe;n=qwe;for(r=Sub(g.b,0);r.b!=r.d.c;){q=RD(evb(r),39);s+=RD(mQb(q,(h_c(),X$c)),17).a;o=$wnd.Math.min(o,q.e.a);p=$wnd.Math.min(p,q.e.b);m=$wnd.Math.max(m,q.e.a+q.f.a);n=$wnd.Math.max(n,q.e.b+q.f.b)}pQb(g,(h_c(),X$c),sgb(s));pQb(g,(q$c(),SZc),new rjd(o,p));pQb(g,RZc,new rjd(m,n))}yob();_mb(a,new KVc);v=new YWc;kQb(v,(tFb(0,a.c.length),RD(a.c[0],96)));l=0;D=0;for(j=new Anb(a);j.a<j.c.c.length;){g=RD(ynb(j),121);w=ojd(ajd(RD(mQb(g,(q$c(),RZc)),8)),RD(mQb(g,SZc),8));l=$wnd.Math.max(l,w.a);D+=w.a*w.b}l=$wnd.Math.max(l,$wnd.Math.sqrt(D)*Kfb(UD(mQb(v,(h_c(),E$c)))));A=Kfb(UD(mQb(v,_$c)));F=0;G=0;k=0;b=A;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),121);w=ojd(ajd(RD(mQb(g,(q$c(),RZc)),8)),RD(mQb(g,SZc),8));if(F+w.a>l){F=0;G+=k+A;k=0}FVc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Tsb;c=new Tsb;for(C=new Anb(a);C.a<C.c.c.length;){B=RD(ynb(C),121);d=Heb(TD(mQb(B,(umd(),Mkd))));t=!B.q?(null,wob):B.q;for(f=t.vc().Kc();f.Ob();){e=RD(f.Pb(),44);if(Ujb(u,e.ld())){if(dE(RD(e.ld(),149).Sg())!==dE(e.md())){if(d&&Ujb(c,e.ld())){gib();'Found different values for property '+RD(e.ld(),149).Pg()+' in components.';String.fromCharCode(10)}else{Zjb(u,RD(e.ld(),149),e.md());pQb(v,RD(e.ld(),149),e.md());d&&Zjb(c,RD(e.ld(),149),e.md())}}}else{Zjb(u,RD(e.ld(),149),e.md());pQb(v,RD(e.ld(),149),e.md())}}}CVc(v);return v} +function f7d(a,b){switch(a.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new sje(a.b,a.a,b,a.c);case 1:return new _Zd(a.a,b,BYd(b.Dh(),a.c));case 43:return new lie(a.a,b,BYd(b.Dh(),a.c));case 3:return new XZd(a.a,b,BYd(b.Dh(),a.c));case 45:return new iie(a.a,b,BYd(b.Dh(),a.c));case 41:return new DVd(RD(WVd(a.c),29),a.a,b,BYd(b.Dh(),a.c));case 50:return new Cje(RD(WVd(a.c),29),a.a,b,BYd(b.Dh(),a.c));case 5:return new oie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 47:return new sie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 7:return new C5d(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 49:return new G5d(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 9:return new gie(a.a,b,BYd(b.Dh(),a.c));case 11:return new eie(a.a,b,BYd(b.Dh(),a.c));case 13:return new aie(a.a,b,BYd(b.Dh(),a.c));case 15:return new Kfe(a.a,b,BYd(b.Dh(),a.c));case 17:return new Cie(a.a,b,BYd(b.Dh(),a.c));case 19:return new zie(a.a,b,BYd(b.Dh(),a.c));case 21:return new vie(a.a,b,BYd(b.Dh(),a.c));case 23:return new PZd(a.a,b,BYd(b.Dh(),a.c));case 25:return new bje(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 27:return new Yie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 29:return new Tie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 31:return new Nie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 33:return new $ie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 35:return new Vie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 37:return new Pie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 39:return new Iie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 40:return new Uge(b,BYd(b.Dh(),a.c));default:throw Adb(new yz('Unknown feature style: '+a.e));}} +function h2c(a){var b,c,d,e,f,g,h,i;f=0;e=a.a.b;for(i=Sub(a.a,0);i.b!=i.d.c;){h=RD(evb(i),240);g=(f+1)/(e+1);if(!a.c&&!a.d){return}else if(!!a.c&&!a.d){a.g=true;if(a.b==(Cmd(),ymd)){d=a.c.e.b+a.c.f.b+a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.c,f$c)))-a.e,d)}else if(a.b==zmd){d=a.c.e.b+a.c.f.b+a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.c,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.c.e.a+a.c.f.a+a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.c,f$c)))-a.e)}else{d=a.c.e.a+a.c.f.a+a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.c,e$c)))+a.e)}}else if(!!a.c&&!!a.d){if(a.b==(Cmd(),ymd)){d=a.d.e.b*g+(a.c.e.b+a.c.f.b)*(1-g);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.c,f$c)))-a.e,d)}else if(a.b==zmd){d=a.d.e.b*g+(a.c.e.b+a.c.f.b)*(1-g);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.c,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.d.e.a*g+(a.c.e.a+a.c.f.a)*(1-g);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.c,f$c)))-a.e)}else{d=a.d.e.a*g+(a.c.e.a+a.c.f.a)*(1-g);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.c,e$c)))+a.e)}}else{a.f=true;if(a.b==(Cmd(),ymd)){d=a.d.e.b-a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.d,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.d,f$c)))-a.e,d)}else if(a.b==zmd){d=a.d.e.b-a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.d,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.d,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.d.e.a-a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.d,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.d,f$c)))-a.e)}else{d=a.d.e.a-a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.d,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.d,e$c)))+a.e)}}RD(h.a,8).a=b.a;RD(h.a,8).b=b.b;h.b.a=c.a;h.b.b=c.b;++f}} +function LA(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;switch(b){case 71:h=d.q.getFullYear()-Owe>=-1900?1:0;c>=4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Qwe,Rwe])[h]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['BC','AD'])[h]);break;case 121:AA(a,c,d);break;case 77:zA(a,c,d);break;case 107:i=e.q.getHours();i==0?UA(a,24,c):UA(a,i,c);break;case 83:yA(a,c,e);break;case 69:k=d.q.getDay();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe])[k]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Zhb(a,cD(WC(qJ,1),Nve,2,6,['AM','PM'])[1]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?UA(a,12,c):UA(a,l,c);break;case 75:m=e.q.getHours()%12;UA(a,m,c);break;case 72:n=e.q.getHours();UA(a,n,c);break;case 99:o=d.q.getDay();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe])[o]):c==3?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):UA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe])[p]):c==3?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):UA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Q1','Q2','Q3','Q4'])[q]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();UA(a,r,c);break;case 109:j=e.q.getMinutes();UA(a,j,c);break;case 115:g=e.q.getSeconds();UA(a,g,c);break;case 122:c<4?Zhb(a,f.c[0]):Zhb(a,f.c[1]);break;case 118:Zhb(a,f.b);break;case 90:c<3?Zhb(a,cB(f)):c==3?Zhb(a,bB(f)):Zhb(a,eB(f.a));break;default:return false;}return true} +function f5b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;X4b(b);i=RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84);k=RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84);h=AGd(i);j=AGd(k);g=(!b.a&&(b.a=new C5d(F4,b,6,6)),b.a).i==0?null:RD(QHd((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a),0),166);A=RD(Wjb(a.a,h),10);F=RD(Wjb(a.a,j),10);B=null;G=null;if(ZD(i,193)){w=RD(Wjb(a.a,i),304);if(ZD(w,12)){B=RD(w,12)}else if(ZD(w,10)){A=RD(w,10);B=RD(Vmb(A.j,0),12)}}if(ZD(k,193)){D=RD(Wjb(a.a,k),304);if(ZD(D,12)){G=RD(D,12)}else if(ZD(D,10)){F=RD(D,10);G=RD(Vmb(F.j,0),12)}}if(!A||!F){throw Adb(new Ked('The source or the target of edge '+b+' 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.'))}p=new a1b;kQb(p,b);pQb(p,(Ywc(),Awc),b);pQb(p,(yCc(),RAc),null);n=RD(mQb(d,kwc),21);A==F&&n.Fc((ovc(),nvc));if(!B){v=(BEc(),zEc);C=null;if(!!g&&Dod(RD(mQb(A,BBc),101))){C=new rjd(g.j,g.k);Fsd(C,kzd(b));Gsd(C,c);if(NGd(j,h)){v=yEc;$id(C,A.n)}}B=g2b(A,C,v,d)}if(!G){v=(BEc(),yEc);H=null;if(!!g&&Dod(RD(mQb(F,BBc),101))){H=new rjd(g.b,g.c);Fsd(H,kzd(b));Gsd(H,c)}G=g2b(F,H,v,Y2b(F))}Y0b(p,B);Z0b(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((ovc(),ivc));for(m=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));m.e!=m.i.gc();){l=RD(bMd(m),135);if(!Heb(TD(Gxd(l,pBc)))&&!!l.a){q=h5b(l);Rmb(p.b,q);switch(RD(mQb(q,wAc),278).g){case 1:case 2:n.Fc((ovc(),gvc));break;case 0:n.Fc((ovc(),evc));pQb(q,wAc,(Omd(),Lmd));}}}f=RD(mQb(d,oAc),322);r=RD(mQb(d,kBc),323);e=f==(stc(),ptc)||r==(JDc(),FDc);if(!!g&&(!g.a&&(g.a=new XZd(D4,g,5)),g.a).i!=0&&e){s=ssd(g);o=new Ejd;for(u=Sub(s,0);u.b!=u.d.c;){t=RD(evb(u),8);Mub(o,new sjd(t))}pQb(p,Bwc,o)}return p} +function F0c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;C=0;D=0;A=new Tsb;v=RD(Lvb(JDb(GDb(new SDb(null,new Swb(a.b,16)),new v1c),new Z0c)),17).a+1;B=$C(kE,Pwe,28,v,15,1);q=$C(kE,Pwe,28,v,15,1);for(p=0;p<v;p++){B[p]=0;q[p]=0}i=RD(zDb(BDb(new SDb(null,new Swb(a.a,16))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(k=i.Kc();k.Ob();){j=RD(k.Pb(),65);G=RD(mQb(j.b,(h_c(),f_c)),17).a;I=RD(mQb(j.c,f_c),17).a;u=I-G;if(u>1){for(h=G+1;h<I;h++){l=h;w=RD(zDb(CDb(new SDb(null,new Swb(a.b,16)),new P1c(l)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);o=0;if(b==(Cmd(),ymd)||b==zmd){w.jd(new V1c);for(o=0;o<w.gc();o++){r=(h-G)/(I-G);if(RD(w.Xb(o),39).e.b>j.b.e.b*(1-r)+j.c.e.b*r){break}}if(w.gc()>0){H=j.a.b==0?ajd(j.b.e):RD(Rub(j.a),8);t=$id(ajd(RD(w.Xb(w.gc()-1),39).e),RD(w.Xb(w.gc()-1),39).f);m=$id(ajd(RD(w.Xb(0),39).e),RD(w.Xb(0),39).f);if(o>=w.gc()-1&&H.b>t.b&&j.c.e.b>t.b){continue}if(o<=0&&H.b<m.a&&j.c.e.b<m.b){continue}}}else{w.jd(new Z1c);for(o=0;o<w.gc();o++){r=(h-G)/(I-G);if(RD(w.Xb(o),39).e.a>j.b.e.a*(1-r)+j.c.e.a*r){break}}if(w.gc()>0){H=j.a.b==0?ajd(j.b.e):RD(Rub(j.a),8);t=$id(ajd(RD(w.Xb(w.gc()-1),39).e),RD(w.Xb(w.gc()-1),39).f);m=$id(ajd(RD(w.Xb(0),39).e),RD(w.Xb(0),39).f);if(o>=w.gc()-1&&H.a>t.a&&j.c.e.a>t.a){continue}if(o<=0&&H.a<m.a&&j.c.e.a<m.a){continue}}}e=new pjd;f=new pjd;Mub(j.a,e);Mub(j.a,f);g=new gud(e,f,j);s=Rdb(Sdb(h,32),Cdb(o,yxe));if(Ujb(A,Hgb(s))){n=RD(Wjb(A,Hgb(s)),675);Mub(n.a,g);Dmd(n.b)?tvb(n.a,new l2c):tvb(n.a,new p2c);h2c(n)}else{n=new i2c(o==0?null:RD(w.Xb(o-1),39),o==w.gc()?null:RD(w.Xb(o),39),g,a);Zjb(A,Hgb(s),n)}if(b==ymd||b==zmd){n.f&&n.d.e.b<=Kfb(UD(mQb(a,(q$c(),_Zc))))&&++C;n.g&&n.c.e.b+n.c.f.b>=Kfb(UD(mQb(a,(q$c(),$Zc))))&&++D}else{n.f&&n.d.e.a<=Kfb(UD(mQb(a,(q$c(),ZZc))))&&++C;n.g&&n.c.e.a+n.c.f.a>=Kfb(UD(mQb(a,(q$c(),YZc))))&&++D}}}else if(u==0){H0c(j)}else if(u<0){++B[G];++q[I];F=C0c(j,b,a,new Ptd(sgb(C),sgb(D)),c,d,new Ptd(sgb(q[I]),sgb(B[G])));C=RD(F.a,17).a;D=RD(F.b,17).a}}} +function qrc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;d=b;i=c;if(a.b&&d.j==(qpd(),ppd)&&i.j==(qpd(),ppd)){s=d;d=i;i=s}if(Ujb(a.a,d)){if(Zsb(RD(Wjb(a.a,d),49),i)){return 1}}else{Zjb(a.a,d,new _sb)}if(Ujb(a.a,i)){if(Zsb(RD(Wjb(a.a,i),49),d)){return -1}}else{Zjb(a.a,i,new _sb)}if(Ujb(a.d,d)){if(Zsb(RD(Wjb(a.d,d),49),i)){return -1}}else{Zjb(a.d,d,new _sb)}if(Ujb(a.d,i)){if(Zsb(RD(Wjb(a.a,i),49),d)){return 1}}else{Zjb(a.d,i,new _sb)}if(d.j!=i.j){r=yrc(d.j,i.j);r==-1?rrc(a,i,d):rrc(a,d,i);return r}if(d.e.c.length!=0&&i.e.c.length!=0){if(a.b){r=orc(d,i);if(r!=0){r==-1?rrc(a,i,d):r==1&&rrc(a,d,i);return r}}f=RD(Vmb(d.e,0),18).c.i;k=RD(Vmb(i.e,0),18).c.i;if(f==k){e=RD(mQb(RD(Vmb(d.e,0),18),(Ywc(),zwc)),17).a;j=RD(mQb(RD(Vmb(i.e,0),18),zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}for(o=a.c,p=0,q=o.length;p<q;++p){n=o[p];if(n==f){rrc(a,d,i);return 1}else if(n==k){rrc(a,i,d);return -1}}}if(d.g.c.length!=0&&i.g.c.length!=0){h=RD(mQb(d,(Ywc(),xwc)),10);m=RD(mQb(i,xwc),10);if(a.e==(kEc(),jEc)&&!!h&&!!m&&nQb(h,zwc)&&nQb(m,zwc)){e=RD(mQb(h,zwc),17).a;j=RD(mQb(m,zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}if(a.b){r=orc(d,i);if(r!=0){r==-1?rrc(a,i,d):r==1&&rrc(a,d,i);return r}}g=0;l=0;nQb(RD(Vmb(d.g,0),18),zwc)&&(g=RD(mQb(RD(Vmb(d.g,0),18),zwc),17).a);nQb(RD(Vmb(i.g,0),18),zwc)&&(l=RD(mQb(RD(Vmb(d.g,0),18),zwc),17).a);if(!!h&&h==m){if(Heb(TD(mQb(RD(Vmb(d.g,0),18),Nwc)))&&!Heb(TD(mQb(RD(Vmb(i.g,0),18),Nwc)))){rrc(a,d,i);return 1}else if(!Heb(TD(mQb(RD(Vmb(d.g,0),18),Nwc)))&&Heb(TD(mQb(RD(Vmb(i.g,0),18),Nwc)))){rrc(a,i,d);return -1}g>l?rrc(a,d,i):rrc(a,i,d);return g<l?-1:g>l?1:0}if(a.f){a.f._b(h)&&(g=RD(a.f.xc(h),17).a);a.f._b(m)&&(l=RD(a.f.xc(m),17).a)}g>l?rrc(a,d,i):rrc(a,i,d);return g<l?-1:g>l?1:0}if(d.e.c.length!=0&&i.g.c.length!=0){rrc(a,d,i);return 1}else if(d.g.c.length!=0&&i.e.c.length!=0){rrc(a,i,d);return -1}else if(nQb(d,(Ywc(),zwc))&&nQb(i,zwc)){e=RD(mQb(d,zwc),17).a;j=RD(mQb(i,zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}else{rrc(a,i,d);return -1}} +function Yae(a){if(a.gb)return;a.gb=true;a.b=jBd(a,0);iBd(a.b,18);oBd(a.b,19);a.a=jBd(a,1);iBd(a.a,1);oBd(a.a,2);oBd(a.a,3);oBd(a.a,4);oBd(a.a,5);a.o=jBd(a,2);iBd(a.o,8);iBd(a.o,9);oBd(a.o,10);oBd(a.o,11);oBd(a.o,12);oBd(a.o,13);oBd(a.o,14);oBd(a.o,15);oBd(a.o,16);oBd(a.o,17);oBd(a.o,18);oBd(a.o,19);oBd(a.o,20);oBd(a.o,21);oBd(a.o,22);oBd(a.o,23);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);a.p=jBd(a,3);iBd(a.p,2);iBd(a.p,3);iBd(a.p,4);iBd(a.p,5);oBd(a.p,6);oBd(a.p,7);nBd(a.p);nBd(a.p);a.q=jBd(a,4);iBd(a.q,8);a.v=jBd(a,5);oBd(a.v,9);nBd(a.v);nBd(a.v);nBd(a.v);a.w=jBd(a,6);iBd(a.w,2);iBd(a.w,3);iBd(a.w,4);oBd(a.w,5);a.B=jBd(a,7);oBd(a.B,1);nBd(a.B);nBd(a.B);nBd(a.B);a.Q=jBd(a,8);oBd(a.Q,0);nBd(a.Q);a.R=jBd(a,9);iBd(a.R,1);a.S=jBd(a,10);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);a.T=jBd(a,11);oBd(a.T,10);oBd(a.T,11);oBd(a.T,12);oBd(a.T,13);oBd(a.T,14);nBd(a.T);nBd(a.T);a.U=jBd(a,12);iBd(a.U,2);iBd(a.U,3);oBd(a.U,4);oBd(a.U,5);oBd(a.U,6);oBd(a.U,7);nBd(a.U);a.V=jBd(a,13);oBd(a.V,10);a.W=jBd(a,14);iBd(a.W,18);iBd(a.W,19);iBd(a.W,20);oBd(a.W,21);oBd(a.W,22);oBd(a.W,23);a.bb=jBd(a,15);iBd(a.bb,10);iBd(a.bb,11);iBd(a.bb,12);iBd(a.bb,13);iBd(a.bb,14);iBd(a.bb,15);iBd(a.bb,16);oBd(a.bb,17);nBd(a.bb);nBd(a.bb);a.eb=jBd(a,16);iBd(a.eb,2);iBd(a.eb,3);iBd(a.eb,4);iBd(a.eb,5);iBd(a.eb,6);iBd(a.eb,7);oBd(a.eb,8);oBd(a.eb,9);a.ab=jBd(a,17);iBd(a.ab,0);iBd(a.ab,1);a.H=jBd(a,18);oBd(a.H,0);oBd(a.H,1);oBd(a.H,2);oBd(a.H,3);oBd(a.H,4);oBd(a.H,5);nBd(a.H);a.db=jBd(a,19);oBd(a.db,2);a.c=kBd(a,20);a.d=kBd(a,21);a.e=kBd(a,22);a.f=kBd(a,23);a.i=kBd(a,24);a.g=kBd(a,25);a.j=kBd(a,26);a.k=kBd(a,27);a.n=kBd(a,28);a.r=kBd(a,29);a.s=kBd(a,30);a.t=kBd(a,31);a.u=kBd(a,32);a.fb=kBd(a,33);a.A=kBd(a,34);a.C=kBd(a,35);a.D=kBd(a,36);a.F=kBd(a,37);a.G=kBd(a,38);a.I=kBd(a,39);a.J=kBd(a,40);a.L=kBd(a,41);a.M=kBd(a,42);a.N=kBd(a,43);a.O=kBd(a,44);a.P=kBd(a,45);a.X=kBd(a,46);a.Y=kBd(a,47);a.Z=kBd(a,48);a.$=kBd(a,49);a._=kBd(a,50);a.cb=kBd(a,51);a.K=kBd(a,52)} +function d5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;g=new Yub;w=RD(mQb(c,(yCc(),rAc)),88);p=0;ye(g,(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));while(g.b!=0){k=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),27);j=vCd(k);(dE(Gxd(j,cAc))!==dE((kEc(),hEc))||dE(Gxd(j,pAc))===dE((Ptc(),Otc))||dE(Gxd(j,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(j,eAc)))||dE(Gxd(j,Yzc))!==dE((U$b(),T$b))||dE(Gxd(j,ZAc))===dE((aEc(),TDc))||dE(Gxd(j,ZAc))===dE((aEc(),UDc))||dE(Gxd(j,$Ac))===dE((_Cc(),SCc))||dE(Gxd(j,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(k,aAc)))&&Ixd(k,(Ywc(),zwc),sgb(p++));r=!Heb(TD(Gxd(k,pBc)));if(r){m=(!k.a&&(k.a=new C5d(J4,k,10,11)),k.a).i!=0;o=a5b(k);n=dE(Gxd(k,IAc))===dE((Fnd(),Cnd));G=!Hxd(k,(umd(),Akd))||khb(WD(Gxd(k,Akd)));u=null;if(G&&n&&(m||o)){u=Z4b(k);pQb(u,rAc,w);nQb(u,PBc)&&HCc(new RCc(Kfb(UD(mQb(u,PBc)))),u);if(RD(Gxd(k,lBc),181).gc()!=0){l=u;FDb(new SDb(null,(!k.c&&(k.c=new C5d(K4,k,9,9)),new Swb(k.c,16))),new u5b(l));V4b(k,u)}}A=c;B=RD(Wjb(a.a,vCd(k)),10);!!B&&(A=B.e);t=i5b(a,k,A);if(u){t.e=u;u.e=t;ye(g,(!k.a&&(k.a=new C5d(J4,k,10,11)),k.a))}}}p=0;Pub(g,b,g.c.b,g.c);while(g.b!=0){f=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),27);for(i=new dMd((!f.b&&(f.b=new C5d(G4,f,12,3)),f.b));i.e!=i.i.gc();){h=RD(bMd(i),74);X4b(h);(dE(Gxd(b,cAc))!==dE((kEc(),hEc))||dE(Gxd(b,pAc))===dE((Ptc(),Otc))||dE(Gxd(b,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(b,eAc)))||dE(Gxd(b,Yzc))!==dE((U$b(),T$b))||dE(Gxd(b,ZAc))===dE((aEc(),TDc))||dE(Gxd(b,ZAc))===dE((aEc(),UDc))||dE(Gxd(b,$Ac))===dE((_Cc(),SCc))||dE(Gxd(b,$Ac))===dE((_Cc(),UCc)))&&Ixd(h,(Ywc(),zwc),sgb(p++));D=AGd(RD(QHd((!h.b&&(h.b=new Yie(E4,h,4,7)),h.b),0),84));F=AGd(RD(QHd((!h.c&&(h.c=new Yie(E4,h,5,8)),h.c),0),84));if(Heb(TD(Gxd(h,pBc)))||Heb(TD(Gxd(D,pBc)))||Heb(TD(Gxd(F,pBc)))){continue}q=ozd(h)&&Heb(TD(Gxd(D,NAc)))&&Heb(TD(Gxd(h,OAc)));v=f;q||NGd(F,D)?(v=D):NGd(D,F)&&(v=F);A=c;B=RD(Wjb(a.a,v),10);!!B&&(A=B.e);s=f5b(a,h,v,A);pQb(s,(Ywc(),Zvc),_4b(a,h,b,c))}n=dE(Gxd(f,IAc))===dE((Fnd(),Cnd));if(n){for(e=new dMd((!f.a&&(f.a=new C5d(J4,f,10,11)),f.a));e.e!=e.i.gc();){d=RD(bMd(e),27);G=!Hxd(d,(umd(),Akd))||khb(WD(Gxd(d,Akd)));C=dE(Gxd(d,IAc))===dE(Cnd);G&&C&&(Pub(g,d,g.c.b,g.c),true)}}}} +function Ywc(){Ywc=geb;var a,b;Awc=new jGd(rAe);Zvc=new jGd('coordinateOrigin');Kwc=new jGd('processors');Yvc=new kGd('compoundNode',(Geb(),false));nwc=new kGd('insideConnections',false);Bwc=new jGd('originalBendpoints');Cwc=new jGd('originalDummyNodePosition');Dwc=new jGd('originalLabelEdge');Mwc=new jGd('representedLabels');cwc=new jGd('endLabels');dwc=new jGd('endLabel.origin');swc=new kGd('labelSide',(Pnd(),Ond));ywc=new kGd('maxEdgeThickness',0);Nwc=new kGd('reversed',false);Lwc=new jGd(sAe);vwc=new kGd('longEdgeSource',null);wwc=new kGd('longEdgeTarget',null);uwc=new kGd('longEdgeHasLabelDummies',false);twc=new kGd('longEdgeBeforeLabelDummy',false);bwc=new kGd('edgeConstraint',(huc(),fuc));pwc=new jGd('inLayerLayoutUnit');owc=new kGd('inLayerConstraint',(Gvc(),Evc));qwc=new kGd('inLayerSuccessorConstraint',new bnb);rwc=new kGd('inLayerSuccessorConstraintBetweenNonDummies',false);Iwc=new jGd('portDummy');$vc=new kGd('crossingHint',sgb(0));kwc=new kGd('graphProperties',(b=RD(mfb(iX),9),new Fsb(b,RD(WEb(b,b.length),9),0)));hwc=new kGd('externalPortSide',(qpd(),opd));iwc=new kGd('externalPortSize',new pjd);fwc=new jGd('externalPortReplacedDummies');gwc=new jGd('externalPortReplacedDummy');ewc=new kGd('externalPortConnections',(a=RD(mfb(E3),9),new Fsb(a,RD(WEb(a,a.length),9),0)));Jwc=new kGd(Xye,0);Uvc=new jGd('barycenterAssociates');Xwc=new jGd('TopSideComments');Vvc=new jGd('BottomSideComments');Xvc=new jGd('CommentConnectionPort');mwc=new kGd('inputCollect',false);Gwc=new kGd('outputCollect',false);awc=new kGd('cyclic',false);_vc=new jGd('crossHierarchyMap');Wwc=new jGd('targetOffset');new kGd('splineLabelSize',new pjd);Qwc=new jGd('spacings');Hwc=new kGd('partitionConstraint',false);Wvc=new jGd('breakingPoint.info');Uwc=new jGd('splines.survivingEdge');Twc=new jGd('splines.route.start');Rwc=new jGd('splines.edgeChain');Fwc=new jGd('originalPortConstraints');Pwc=new jGd('selfLoopHolder');Swc=new jGd('splines.nsPortY');zwc=new jGd('modelOrder');xwc=new jGd('longEdgeTargetNode');jwc=new kGd(GBe,false);Owc=new kGd(GBe,false);lwc=new jGd('layerConstraints.hiddenNodes');Ewc=new jGd('layerConstraints.opposidePort');Vwc=new jGd('targetNode.modelOrder')} +function D0c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;for(l=Sub(a.b,0);l.b!=l.d.c;){k=RD(evb(l),39);if(lhb(k.c,IEe)){continue}f=RD(zDb(new SDb(null,new Swb(hWc(k,a),16)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);b==(Cmd(),ymd)||b==zmd?f.jd(new L1c):f.jd(new R1c);o=f.gc();for(e=0;e<o;e++){g=o==1?0.5:(1+e)/(o+1);if(b==ymd){j=Kfb(UD(mQb(k,(q$c(),e$c))));if(k.e.a+k.f.a+d<j){Oub(RD(f.Xb(e),65).a,new rjd(j+c,k.e.b+k.f.b*g))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(i-n)/($wnd.Math.abs(h-m)/40)>50&&(n>i?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a+d/5.3,k.e.b+k.f.b*g-d/2)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a+d/5.3,k.e.b+k.f.b*g+d/2)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a,k.e.b+k.f.b*g))}else if(b==zmd){j=Kfb(UD(mQb(k,(q$c(),f$c))));if(k.e.a-d>j){Oub(RD(f.Xb(e),65).a,new rjd(j-c,k.e.b+k.f.b*g))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(i-n)/($wnd.Math.abs(h-m)/40)>50&&(n>i?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a-d/5.3,k.e.b+k.f.b*g-d/2)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a-d/5.3,k.e.b+k.f.b*g+d/2)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a,k.e.b+k.f.b*g))}else if(b==Bmd){j=Kfb(UD(mQb(k,(q$c(),e$c))));if(k.e.b+k.f.b+d<j){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,j+c))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(h-m)/($wnd.Math.abs(i-n)/40)>50&&(m>h?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g-d/2,k.e.b+d/5.3+k.f.b)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g+d/2,k.e.b+d/5.3+k.f.b)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,k.e.b+k.f.b))}else{j=Kfb(UD(mQb(k,(q$c(),f$c))));if(mWc(RD(f.Xb(e),65),a)){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,RD(Rub(RD(f.Xb(e),65).a),8).b))}else if(k.e.b-d>j){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,j-c))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(h-m)/($wnd.Math.abs(i-n)/40)>50&&(m>h?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g-d/2,k.e.b-d/5.3)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g+d/2,k.e.b-d/5.3)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,k.e.b))}}}} +function umd(){umd=geb;var a,b;Akd=new jGd(OGe);Tld=new jGd(PGe);Ckd=(Rjd(),Ljd);Bkd=new lGd(MDe,Ckd);new Xsd;Dkd=new lGd(Dze,null);Ekd=new jGd(QGe);Lkd=(ukd(),ysb(tkd,cD(WC(q3,1),jwe,297,0,[pkd])));Kkd=new lGd(YDe,Lkd);Mkd=new lGd(LDe,(Geb(),false));Okd=(Cmd(),Amd);Nkd=new lGd(PDe,Okd);Tkd=(Ymd(),Xmd);Skd=new lGd(kDe,Tkd);Wkd=new lGd(MGe,false);Ykd=(Fnd(),Dnd);Xkd=new lGd(fDe,Ykd);uld=new A3b(12);tld=new lGd(Eze,uld);ald=new lGd(dAe,false);bld=new lGd(iEe,false);sld=new lGd(gAe,false);Ild=(Bod(),Aod);Hld=new lGd(eAe,Ild);Qld=new jGd(fEe);Rld=new jGd($ze);Sld=new jGd(bAe);Vld=new jGd(cAe);dld=new Ejd;cld=new lGd(ZDe,dld);Jkd=new lGd(aEe,false);Zkd=new lGd(bEe,false);new jGd(RGe);fld=new P2b;eld=new lGd(gEe,fld);rld=new lGd(JDe,false);new Xsd;Uld=new lGd(SGe,1);Ikd=new jGd(TGe);Hkd=new jGd(UGe);mmd=new lGd(mAe,false);new lGd(VGe,true);sgb(0);new lGd(WGe,sgb(100));new lGd(XGe,false);sgb(0);new lGd(YGe,sgb(4000));sgb(0);new lGd(ZGe,sgb(400));new lGd($Ge,false);new lGd(_Ge,false);new lGd(aHe,true);new lGd(bHe,false);Gkd=(Grd(),Frd);Fkd=new lGd(NGe,Gkd);Wld=new lGd(xDe,10);Xld=new lGd(yDe,10);Yld=new lGd(Bze,20);Zld=new lGd(zDe,10);$ld=new lGd(aAe,2);_ld=new lGd(ADe,10);bmd=new lGd(BDe,0);cmd=new lGd(EDe,5);dmd=new lGd(CDe,1);emd=new lGd(DDe,1);fmd=new lGd(_ze,20);gmd=new lGd(FDe,10);jmd=new lGd(GDe,10);amd=new jGd(HDe);imd=new Q2b;hmd=new lGd(hEe,imd);xld=new jGd(eEe);wld=false;vld=new lGd(dEe,wld);hld=new A3b(5);gld=new lGd(QDe,hld);jld=(dod(),b=RD(mfb(A3),9),new Fsb(b,RD(WEb(b,b.length),9),0));ild=new lGd(kAe,jld);Ald=(pod(),mod);zld=new lGd(TDe,Ald);Cld=new jGd(UDe);Dld=new jGd(VDe);Eld=new jGd(WDe);Bld=new jGd(XDe);lld=(a=RD(mfb(H3),9),new Fsb(a,RD(WEb(a,a.length),9),0));kld=new lGd(jAe,lld);qld=xsb((dqd(),Ypd));pld=new lGd(iAe,qld);old=new rjd(0,0);nld=new lGd(CAe,old);mld=new lGd(hAe,false);Rkd=(Omd(),Lmd);Qkd=new lGd($De,Rkd);Pkd=new lGd(fAe,false);new jGd(cHe);sgb(1);new lGd(dHe,null);Fld=new jGd(cEe);Jld=new jGd(_De);Pld=(qpd(),opd);Old=new lGd(KDe,Pld);Gld=new jGd(IDe);Mld=(Pod(),xsb(Nod));Lld=new lGd(lAe,Mld);Kld=new lGd(RDe,false);Nld=new lGd(SDe,true);new Xsd;qmd=new lGd(nAe,1);smd=new lGd(eHe,null);lmd=new lGd(oAe,150);kmd=new lGd(pAe,1.414);nmd=new lGd(qAe,null);omd=new lGd(fHe,1);$kd=new lGd(NDe,false);_kd=new lGd(ODe,false);Ukd=new lGd(Cze,1);Vkd=(ind(),gnd);new lGd(gHe,Vkd);yld=true;rmd=(mqd(),jqd);tmd=jqd;pmd=jqd} +function hcc(){hcc=geb;nbc=new icc('DIRECTION_PREPROCESSOR',0);kbc=new icc('COMMENT_PREPROCESSOR',1);obc=new icc('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);Ebc=new icc('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);Xbc=new icc('PARTITION_PREPROCESSOR',4);Ibc=new icc('LABEL_DUMMY_INSERTER',5);bcc=new icc('SELF_LOOP_PREPROCESSOR',6);Nbc=new icc('LAYER_CONSTRAINT_PREPROCESSOR',7);Vbc=new icc('PARTITION_MIDPROCESSOR',8);zbc=new icc('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);Rbc=new icc('NODE_PROMOTION',10);Mbc=new icc('LAYER_CONSTRAINT_POSTPROCESSOR',11);Wbc=new icc('PARTITION_POSTPROCESSOR',12);vbc=new icc('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);dcc=new icc('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);ebc=new icc('BREAKING_POINT_INSERTER',15);Qbc=new icc('LONG_EDGE_SPLITTER',16);Zbc=new icc('PORT_SIDE_PROCESSOR',17);Fbc=new icc('INVERTED_PORT_PROCESSOR',18);Ybc=new icc('PORT_LIST_SORTER',19);fcc=new icc('SORT_BY_INPUT_ORDER_OF_MODEL',20);Tbc=new icc('NORTH_SOUTH_PORT_PREPROCESSOR',21);fbc=new icc('BREAKING_POINT_PROCESSOR',22);Ubc=new icc(jBe,23);gcc=new icc(kBe,24);_bc=new icc('SELF_LOOP_PORT_RESTORER',25);ecc=new icc('SINGLE_EDGE_GRAPH_WRAPPER',26);Gbc=new icc('IN_LAYER_CONSTRAINT_PROCESSOR',27);sbc=new icc('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);Hbc=new icc('LABEL_AND_NODE_SIZE_PROCESSOR',29);Dbc=new icc('INNERMOST_NODE_MARGIN_CALCULATOR',30);ccc=new icc('SELF_LOOP_ROUTER',31);ibc=new icc('COMMENT_NODE_MARGIN_CALCULATOR',32);qbc=new icc('END_LABEL_PREPROCESSOR',33);Kbc=new icc('LABEL_DUMMY_SWITCHER',34);hbc=new icc('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);Lbc=new icc('LABEL_SIDE_SELECTOR',36);Bbc=new icc('HYPEREDGE_DUMMY_MERGER',37);wbc=new icc('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);Obc=new icc('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);ybc=new icc('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);lbc=new icc('CONSTRAINTS_POSTPROCESSOR',41);jbc=new icc('COMMENT_POSTPROCESSOR',42);Cbc=new icc('HYPERNODE_PROCESSOR',43);xbc=new icc('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);Pbc=new icc('LONG_EDGE_JOINER',45);acc=new icc('SELF_LOOP_POSTPROCESSOR',46);gbc=new icc('BREAKING_POINT_REMOVER',47);Sbc=new icc('NORTH_SOUTH_PORT_POSTPROCESSOR',48);Abc=new icc('HORIZONTAL_COMPACTOR',49);Jbc=new icc('LABEL_DUMMY_REMOVER',50);tbc=new icc('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);rbc=new icc('END_LABEL_SORTER',52);$bc=new icc('REVERSED_EDGE_RESTORER',53);pbc=new icc('END_LABEL_POSTPROCESSOR',54);ubc=new icc('HIERARCHICAL_NODE_RESIZER',55);mbc=new icc('DIRECTION_POSTPROCESSOR',56)} +function Ozc(){Ozc=geb;Uxc=($tc(),Ytc);Txc=new lGd(HBe,Uxc);jyc=new lGd(IBe,(Geb(),false));pyc=(Ovc(),Mvc);oyc=new lGd(JBe,pyc);Hyc=new lGd(KBe,false);Iyc=new lGd(LBe,true);ixc=new lGd(MBe,false);azc=(sEc(),qEc);_yc=new lGd(NBe,azc);sgb(1);izc=new lGd(OBe,sgb(7));jzc=new lGd(PBe,false);kyc=new lGd(QBe,false);Sxc=(Ptc(),Ltc);Rxc=new lGd(RBe,Sxc);Gyc=(_Cc(),ZCc);Fyc=new lGd(SBe,Gyc);wyc=(cxc(),bxc);vyc=new lGd(TBe,wyc);sgb(-1);uyc=new lGd(UBe,null);sgb(-1);xyc=new lGd(VBe,sgb(-1));sgb(-1);yyc=new lGd(WBe,sgb(4));sgb(-1);Ayc=new lGd(XBe,sgb(2));Eyc=(aEc(),$Dc);Dyc=new lGd(YBe,Eyc);sgb(0);Cyc=new lGd(ZBe,sgb(0));syc=new lGd($Be,sgb(lve));Qxc=(stc(),qtc);Pxc=new lGd(_Be,Qxc);yxc=new lGd(aCe,false);Hxc=new lGd(bCe,0.1);Nxc=new lGd(cCe,false);Jxc=new lGd(dCe,null);Kxc=new lGd(eCe,null);sgb(-1);Lxc=new lGd(fCe,null);sgb(-1);Mxc=new lGd(gCe,sgb(-1));sgb(0);zxc=new lGd(hCe,sgb(40));Fxc=(xvc(),wvc);Exc=new lGd(iCe,Fxc);Bxc=uvc;Axc=new lGd(jCe,Bxc);$yc=(JDc(),EDc);Zyc=new lGd(kCe,$yc);Pyc=new jGd(lCe);Kyc=(Cuc(),Auc);Jyc=new lGd(mCe,Kyc);Nyc=(Ouc(),Luc);Myc=new lGd(nCe,Nyc);new Xsd;Syc=new lGd(oCe,0.3);Uyc=new jGd(pCe);Wyc=(wDc(),uDc);Vyc=new lGd(qCe,Wyc);ayc=(KEc(),IEc);_xc=new lGd(rCe,ayc);cyc=(TEc(),SEc);byc=new lGd(sCe,cyc);eyc=(lFc(),kFc);dyc=new lGd(tCe,eyc);gyc=new lGd(uCe,0.2);Zxc=new lGd(vCe,2);ezc=new lGd(wCe,null);gzc=new lGd(xCe,10);fzc=new lGd(yCe,10);hzc=new lGd(zCe,20);sgb(0);bzc=new lGd(ACe,sgb(0));sgb(0);czc=new lGd(BCe,sgb(0));sgb(0);dzc=new lGd(CCe,sgb(0));jxc=new lGd(DCe,false);nxc=($uc(),Yuc);mxc=new lGd(ECe,nxc);lxc=(jtc(),itc);kxc=new lGd(FCe,lxc);myc=new lGd(GCe,false);sgb(0);lyc=new lGd(HCe,sgb(16));sgb(0);nyc=new lGd(ICe,sgb(5));Gzc=(DFc(),BFc);Fzc=new lGd(JCe,Gzc);kzc=new lGd(KCe,10);nzc=new lGd(LCe,1);wzc=(Etc(),Dtc);vzc=new lGd(MCe,wzc);qzc=new jGd(NCe);tzc=sgb(1);sgb(0);szc=new lGd(OCe,tzc);Lzc=(uFc(),rFc);Kzc=new lGd(PCe,Lzc);Hzc=new jGd(QCe);Bzc=new lGd(RCe,true);zzc=new lGd(SCe,2);Dzc=new lGd(TCe,true);Yxc=(tuc(),ruc);Xxc=new lGd(UCe,Yxc);Wxc=(btc(),Zsc);Vxc=new lGd(VCe,Wxc);xxc=(kEc(),hEc);wxc=new lGd(WCe,xxc);vxc=new lGd(XCe,false);uxc=new lGd(YCe,false);pxc=(U$b(),T$b);oxc=new lGd(ZCe,pxc);txc=(lDc(),iDc);sxc=new lGd($Ce,txc);qxc=new lGd(_Ce,0);rxc=new lGd(aDe,0);ryc=Ntc;qyc=ptc;zyc=YCc;Byc=YCc;tyc=TCc;Ixc=(Fnd(),Cnd);Oxc=qtc;Gxc=qtc;Cxc=qtc;Dxc=Cnd;Qyc=HDc;Ryc=EDc;Lyc=EDc;Oyc=EDc;Tyc=GDc;Yyc=HDc;Xyc=HDc;fyc=(Ymd(),Wmd);hyc=Wmd;iyc=kFc;$xc=Vmd;lzc=CFc;mzc=AFc;ozc=CFc;pzc=AFc;xzc=CFc;yzc=AFc;rzc=Ctc;uzc=Dtc;Mzc=CFc;Nzc=AFc;Izc=CFc;Jzc=AFc;Czc=AFc;Azc=AFc;Ezc=AFc} +function iNc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K<N;++K){F=H[K];for(V=new Anb(F.j);V.a<V.c.c.length;){U=RD(ynb(V),12);X=0;for(h=new Anb(U.g);h.a<h.c.c.length;){g=RD(ynb(h),18);F.c!=g.d.i.c&&++X}X>0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L<O;++L){F=I[L];P=0;for(V=new Anb(F.j);V.a<V.c.c.length;){U=RD(ynb(V),12);if(U.j==(qpd(),Yod)){for(h=new Anb(U.e);h.a<h.c.c.length;){g=RD(ynb(h),18);if(F.c!=g.c.i.c){++P;break}}}else{break}}R=0;Y=new Jkb(F.j,F.j.c.length);while(Y.b>0){U=(sFb(Y.b>0),RD(Y.a.Xb(Y.c=--Y.b),12));X=0;for(h=new Anb(U.e);h.a<h.c.c.length;){g=RD(ynb(h),18);F.c!=g.c.i.c&&++X}if(X>0){if(U.j==(qpd(),Yod)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Tsb;o=new Iub;for(G=b,J=0,M=G.length;J<M;++J){F=G[J];for(fb=new Anb(F.j);fb.a<fb.c.c.length;){eb=RD(ynb(fb),12);for(h=new Anb(eb.g);h.a<h.c.c.length;){g=RD(ynb(h),18);jb=g.d;if(F.c!=jb.i.c){db=RD(Wd(qtb(W.f,eb)),477);ib=RD(Wd(qtb(W.f,jb)),477);if(!db&&!ib){n=new lNc;o.a.zc(n,o);Rmb(n.a,g);Rmb(n.d,eb);rtb(W.f,eb,n);Rmb(n.d,jb);rtb(W.f,jb,n)}else if(!db){Rmb(ib.a,g);Rmb(ib.d,eb);rtb(W.f,eb,ib)}else if(!ib){Rmb(db.a,g);Rmb(db.d,jb);rtb(W.f,jb,db)}else if(db==ib){Rmb(db.a,g)}else{Rmb(db.a,g);for(T=new Anb(ib.d);T.a<T.c.c.length;){S=RD(ynb(T),12);rtb(W.f,S,db)}Tmb(db.a,ib.a);Tmb(db.d,ib.d);o.a.Bc(ib)!=null}}}}}p=RD(Ee(o,$C(OY,{3:1,4:1,5:1,2045:1},477,o.a.gc(),0,1)),2045);D=b[0].c;bb=c[0].c;for(k=p,l=0,m=k.length;l<m;++l){j=k[l];j.e=cb;j.f=hb;for(V=new Anb(j.d);V.a<V.c.c.length;){U=RD(ynb(V),12);Z=a.a[U.p];if(U.i.c==D){Z<j.e&&(j.e=Z);Z>j.b&&(j.b=Z)}else if(U.i.c==bb){Z<j.f&&(j.f=Z);Z>j.c&&(j.c=Z)}}}Wnb(p,0,p.length,null);gb=$C(kE,Pwe,28,p.length,15,1);d=$C(kE,Pwe,28,hb+1,15,1);for(r=0;r<p.length;r++){gb[r]=p[r].f;d[gb[r]]=1}f=0;for(s=0;s<d.length;s++){d[s]==1?(d[s]=f):--f}$=0;for(t=0;t<gb.length;t++){gb[t]+=d[gb[t]];$=$wnd.Math.max($,gb[t]+1)}i=1;while(i<$){i*=2}lb=2*i-1;i-=1;kb=$C(kE,Pwe,28,lb,15,1);e=0;for(B=0;B<gb.length;B++){A=gb[B]+i;++kb[A];while(A>0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=$C(NY,rve,374,p.length*2,0,1);for(u=0;u<p.length;u++){C[2*u]=new oNc(p[u],p[u].e,p[u].b,(sNc(),rNc));C[2*u+1]=new oNc(p[u],p[u].b,p[u].e,qNc)}Wnb(C,0,C.length,null);Q=0;for(v=0;v<C.length;v++){switch(C[v].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}ab=$C(NY,rve,374,p.length*2,0,1);for(w=0;w<p.length;w++){ab[2*w]=new oNc(p[w],p[w].f,p[w].c,(sNc(),rNc));ab[2*w+1]=new oNc(p[w],p[w].c,p[w].f,qNc)}Wnb(ab,0,ab.length,null);Q=0;for(q=0;q<ab.length;q++){switch(ab[q].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}return e} +function Vse(){Vse=geb;Ese=new Wse(7);Gse=(++Use,new Hte(8,94));++Use;new Hte(8,64);Hse=(++Use,new Hte(8,36));Nse=(++Use,new Hte(8,65));Ose=(++Use,new Hte(8,122));Pse=(++Use,new Hte(8,90));Sse=(++Use,new Hte(8,98));Lse=(++Use,new Hte(8,66));Qse=(++Use,new Hte(8,60));Tse=(++Use,new Hte(8,62));Dse=new Wse(11);Bse=(++Use,new xte(4));rte(Bse,48,57);Rse=(++Use,new xte(4));rte(Rse,48,57);rte(Rse,65,90);rte(Rse,95,95);rte(Rse,97,122);Mse=(++Use,new xte(4));rte(Mse,9,9);rte(Mse,10,10);rte(Mse,12,12);rte(Mse,13,13);rte(Mse,32,32);Ise=yte(Bse);Kse=yte(Rse);Jse=yte(Mse);wse=new Tsb;xse=new Tsb;yse=cD(WC(qJ,1),Nve,2,6,['Cn','Lu','Ll','Lt','Lm','Lo','Mn','Me','Mc','Nd','Nl','No','Zs','Zl','Zp','Cc','Cf',null,'Co','Cs','Pd','Ps','Pe','Pc','Po','Sm','Sc','Sk','So','Pi','Pf','L','M','N','Z','C','P','S']);vse=cD(WC(qJ,1),Nve,2,6,['Basic Latin','Latin-1 Supplement','Latin Extended-A','Latin Extended-B','IPA Extensions','Spacing Modifier Letters','Combining Diacritical Marks','Greek','Cyrillic','Armenian','Hebrew','Arabic','Syriac','Thaana','Devanagari','Bengali','Gurmukhi','Gujarati','Oriya','Tamil','Telugu','Kannada','Malayalam','Sinhala','Thai','Lao','Tibetan','Myanmar','Georgian','Hangul Jamo','Ethiopic','Cherokee','Unified Canadian Aboriginal Syllabics','Ogham','Runic','Khmer','Mongolian','Latin Extended Additional','Greek Extended','General Punctuation','Superscripts and Subscripts','Currency Symbols','Combining Marks for Symbols','Letterlike Symbols','Number Forms','Arrows','Mathematical Operators','Miscellaneous Technical','Control Pictures','Optical Character Recognition','Enclosed Alphanumerics','Box Drawing','Block Elements','Geometric Shapes','Miscellaneous Symbols','Dingbats','Braille Patterns','CJK Radicals Supplement','Kangxi Radicals','Ideographic Description Characters','CJK Symbols and Punctuation','Hiragana','Katakana','Bopomofo','Hangul Compatibility Jamo','Kanbun','Bopomofo Extended','Enclosed CJK Letters and Months','CJK Compatibility','CJK Unified Ideographs Extension A','CJK Unified Ideographs','Yi Syllables','Yi Radicals','Hangul Syllables',VLe,'CJK Compatibility Ideographs','Alphabetic Presentation Forms','Arabic Presentation Forms-A','Combining Half Marks','CJK Compatibility Forms','Small Form Variants','Arabic Presentation Forms-B','Specials','Halfwidth and Fullwidth Forms','Old Italic','Gothic','Deseret','Byzantine Musical Symbols','Musical Symbols','Mathematical Alphanumeric Symbols','CJK Unified Ideographs Extension B','CJK Compatibility Ideographs Supplement','Tags']);zse=cD(WC(kE,1),Pwe,28,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])} +function hMb(){hMb=geb;eMb=new kMb('OUT_T_L',0,(EKb(),CKb),(vLb(),sLb),(ZJb(),WJb),WJb,cD(WC(bL,1),rve,21,0,[ysb((dod(),_nd),cD(WC(A3,1),jwe,95,0,[cod,Xnd]))]));dMb=new kMb('OUT_T_C',1,BKb,sLb,WJb,XJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd,Ynd]))]));fMb=new kMb('OUT_T_R',2,DKb,sLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Znd]))]));XLb=new kMb('OUT_B_L',3,CKb,uLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd]))]));WLb=new kMb('OUT_B_C',4,BKb,uLb,YJb,XJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd,Ynd]))]));YLb=new kMb('OUT_B_R',5,DKb,uLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Znd]))]));_Lb=new kMb('OUT_L_T',6,DKb,uLb,WJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,cod,Ynd]))]));$Lb=new kMb('OUT_L_C',7,DKb,tLb,XJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,bod])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,bod,Ynd]))]));ZLb=new kMb('OUT_L_B',8,DKb,sLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,aod,Ynd]))]));cMb=new kMb('OUT_R_T',9,CKb,uLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,cod,Ynd]))]));bMb=new kMb('OUT_R_C',10,CKb,tLb,XJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,bod])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,bod,Ynd]))]));aMb=new kMb('OUT_R_B',11,CKb,sLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,aod,Ynd]))]));ULb=new kMb('IN_T_L',12,CKb,uLb,WJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Xnd,Ynd]))]));TLb=new kMb('IN_T_C',13,BKb,uLb,WJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd,Ynd]))]));VLb=new kMb('IN_T_R',14,DKb,uLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Znd,Ynd]))]));RLb=new kMb('IN_C_L',15,CKb,tLb,XJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Xnd,Ynd]))]));QLb=new kMb('IN_C_C',16,BKb,tLb,XJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Wnd,Ynd]))]));SLb=new kMb('IN_C_R',17,DKb,tLb,XJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Znd,Ynd]))]));OLb=new kMb('IN_B_L',18,CKb,sLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd,Ynd]))]));NLb=new kMb('IN_B_C',19,BKb,sLb,YJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd,Ynd]))]));PLb=new kMb('IN_B_R',20,DKb,sLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Znd,Ynd]))]));gMb=new kMb(Sye,21,null,null,null,null,cD(WC(bL,1),rve,21,0,[]))} +function JTd(){JTd=geb;nTd=(lTd(),kTd).b;RD(QHd(xYd(kTd.b),0),35);RD(QHd(xYd(kTd.b),1),19);mTd=kTd.a;RD(QHd(xYd(kTd.a),0),35);RD(QHd(xYd(kTd.a),1),19);RD(QHd(xYd(kTd.a),2),19);RD(QHd(xYd(kTd.a),3),19);RD(QHd(xYd(kTd.a),4),19);oTd=kTd.o;RD(QHd(xYd(kTd.o),0),35);RD(QHd(xYd(kTd.o),1),35);qTd=RD(QHd(xYd(kTd.o),2),19);RD(QHd(xYd(kTd.o),3),19);RD(QHd(xYd(kTd.o),4),19);RD(QHd(xYd(kTd.o),5),19);RD(QHd(xYd(kTd.o),6),19);RD(QHd(xYd(kTd.o),7),19);RD(QHd(xYd(kTd.o),8),19);RD(QHd(xYd(kTd.o),9),19);RD(QHd(xYd(kTd.o),10),19);RD(QHd(xYd(kTd.o),11),19);RD(QHd(xYd(kTd.o),12),19);RD(QHd(xYd(kTd.o),13),19);RD(QHd(xYd(kTd.o),14),19);RD(QHd(xYd(kTd.o),15),19);RD(QHd(uYd(kTd.o),0),62);RD(QHd(uYd(kTd.o),1),62);RD(QHd(uYd(kTd.o),2),62);RD(QHd(uYd(kTd.o),3),62);RD(QHd(uYd(kTd.o),4),62);RD(QHd(uYd(kTd.o),5),62);RD(QHd(uYd(kTd.o),6),62);RD(QHd(uYd(kTd.o),7),62);RD(QHd(uYd(kTd.o),8),62);RD(QHd(uYd(kTd.o),9),62);pTd=kTd.p;RD(QHd(xYd(kTd.p),0),35);RD(QHd(xYd(kTd.p),1),35);RD(QHd(xYd(kTd.p),2),35);RD(QHd(xYd(kTd.p),3),35);RD(QHd(xYd(kTd.p),4),19);RD(QHd(xYd(kTd.p),5),19);RD(QHd(uYd(kTd.p),0),62);RD(QHd(uYd(kTd.p),1),62);rTd=kTd.q;RD(QHd(xYd(kTd.q),0),35);sTd=kTd.v;RD(QHd(xYd(kTd.v),0),19);RD(QHd(uYd(kTd.v),0),62);RD(QHd(uYd(kTd.v),1),62);RD(QHd(uYd(kTd.v),2),62);tTd=kTd.w;RD(QHd(xYd(kTd.w),0),35);RD(QHd(xYd(kTd.w),1),35);RD(QHd(xYd(kTd.w),2),35);RD(QHd(xYd(kTd.w),3),19);uTd=kTd.B;RD(QHd(xYd(kTd.B),0),19);RD(QHd(uYd(kTd.B),0),62);RD(QHd(uYd(kTd.B),1),62);RD(QHd(uYd(kTd.B),2),62);xTd=kTd.Q;RD(QHd(xYd(kTd.Q),0),19);RD(QHd(uYd(kTd.Q),0),62);yTd=kTd.R;RD(QHd(xYd(kTd.R),0),35);zTd=kTd.S;RD(QHd(uYd(kTd.S),0),62);RD(QHd(uYd(kTd.S),1),62);RD(QHd(uYd(kTd.S),2),62);RD(QHd(uYd(kTd.S),3),62);RD(QHd(uYd(kTd.S),4),62);RD(QHd(uYd(kTd.S),5),62);RD(QHd(uYd(kTd.S),6),62);RD(QHd(uYd(kTd.S),7),62);RD(QHd(uYd(kTd.S),8),62);RD(QHd(uYd(kTd.S),9),62);RD(QHd(uYd(kTd.S),10),62);RD(QHd(uYd(kTd.S),11),62);RD(QHd(uYd(kTd.S),12),62);RD(QHd(uYd(kTd.S),13),62);RD(QHd(uYd(kTd.S),14),62);ATd=kTd.T;RD(QHd(xYd(kTd.T),0),19);RD(QHd(xYd(kTd.T),2),19);BTd=RD(QHd(xYd(kTd.T),3),19);RD(QHd(xYd(kTd.T),4),19);RD(QHd(uYd(kTd.T),0),62);RD(QHd(uYd(kTd.T),1),62);RD(QHd(xYd(kTd.T),1),19);CTd=kTd.U;RD(QHd(xYd(kTd.U),0),35);RD(QHd(xYd(kTd.U),1),35);RD(QHd(xYd(kTd.U),2),19);RD(QHd(xYd(kTd.U),3),19);RD(QHd(xYd(kTd.U),4),19);RD(QHd(xYd(kTd.U),5),19);RD(QHd(uYd(kTd.U),0),62);DTd=kTd.V;RD(QHd(xYd(kTd.V),0),19);ETd=kTd.W;RD(QHd(xYd(kTd.W),0),35);RD(QHd(xYd(kTd.W),1),35);RD(QHd(xYd(kTd.W),2),35);RD(QHd(xYd(kTd.W),3),19);RD(QHd(xYd(kTd.W),4),19);RD(QHd(xYd(kTd.W),5),19);GTd=kTd.bb;RD(QHd(xYd(kTd.bb),0),35);RD(QHd(xYd(kTd.bb),1),35);RD(QHd(xYd(kTd.bb),2),35);RD(QHd(xYd(kTd.bb),3),35);RD(QHd(xYd(kTd.bb),4),35);RD(QHd(xYd(kTd.bb),5),35);RD(QHd(xYd(kTd.bb),6),35);RD(QHd(xYd(kTd.bb),7),19);RD(QHd(uYd(kTd.bb),0),62);RD(QHd(uYd(kTd.bb),1),62);HTd=kTd.eb;RD(QHd(xYd(kTd.eb),0),35);RD(QHd(xYd(kTd.eb),1),35);RD(QHd(xYd(kTd.eb),2),35);RD(QHd(xYd(kTd.eb),3),35);RD(QHd(xYd(kTd.eb),4),35);RD(QHd(xYd(kTd.eb),5),35);RD(QHd(xYd(kTd.eb),6),19);RD(QHd(xYd(kTd.eb),7),19);FTd=kTd.ab;RD(QHd(xYd(kTd.ab),0),35);RD(QHd(xYd(kTd.ab),1),35);vTd=kTd.H;RD(QHd(xYd(kTd.H),0),19);RD(QHd(xYd(kTd.H),1),19);RD(QHd(xYd(kTd.H),2),19);RD(QHd(xYd(kTd.H),3),19);RD(QHd(xYd(kTd.H),4),19);RD(QHd(xYd(kTd.H),5),19);RD(QHd(uYd(kTd.H),0),62);ITd=kTd.db;RD(QHd(xYd(kTd.db),0),19);wTd=kTd.M} +function Ane(a){var b;if(a.O)return;a.O=true;PAd(a,'type');CBd(a,'ecore.xml.type');DBd(a,dLe);b=RD(N5d((YSd(),XSd),dLe),2044);WGd(zYd(a.fb),a.b);vBd(a.b,Vbb,'AnyType',false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.wb.D,pKe,null,0,-1,Vbb,false,false,true,false,false,false);tBd(RD(QHd(xYd(a.b),1),35),a.wb.D,'any',null,0,-1,Vbb,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.b),2),35),a.wb.D,'anyAttribute',null,0,-1,Vbb,false,false,true,false,false,false);vBd(a.bb,Xbb,iLe,false,false,true);tBd(RD(QHd(xYd(a.bb),0),35),a.gb,'data',null,0,1,Xbb,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),1),35),a.gb,CIe,null,1,1,Xbb,false,false,true,false,true,false);vBd(a.fb,Ybb,jLe,false,false,true);tBd(RD(QHd(xYd(a.fb),0),35),b.gb,'rawValue',null,0,1,Ybb,true,true,true,false,true,true);tBd(RD(QHd(xYd(a.fb),1),35),b.a,aIe,null,0,1,Ybb,true,true,true,false,true,true);zBd(RD(QHd(xYd(a.fb),2),19),a.wb.q,null,'instanceType',1,1,Ybb,false,false,true,false,false,false,false);vBd(a.qb,Zbb,kLe,false,false,true);tBd(RD(QHd(xYd(a.qb),0),35),a.wb.D,pKe,null,0,-1,null,false,false,true,false,false,false);zBd(RD(QHd(xYd(a.qb),1),19),a.wb.ab,null,'xMLNSPrefixMap',0,-1,null,true,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.qb),2),19),a.wb.ab,null,'xSISchemaLocation',0,-1,null,true,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.qb),3),35),a.gb,'cDATA',null,0,-2,null,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.qb),4),35),a.gb,'comment',null,0,-2,null,true,true,true,false,false,true);zBd(RD(QHd(xYd(a.qb),5),19),a.bb,null,KLe,0,-2,null,true,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.qb),6),35),a.gb,hIe,null,0,-2,null,true,true,true,false,false,true);xBd(a.a,jJ,'AnySimpleType',true);xBd(a.c,qJ,'AnyURI',true);xBd(a.d,WC(gE,1),'Base64Binary',true);xBd(a.e,xdb,'Boolean',true);xBd(a.f,QI,'BooleanObject',true);xBd(a.g,gE,'Byte',true);xBd(a.i,RI,'ByteObject',true);xBd(a.j,qJ,'Date',true);xBd(a.k,qJ,'DateTime',true);xBd(a.n,tJ,'Decimal',true);xBd(a.o,iE,'Double',true);xBd(a.p,VI,'DoubleObject',true);xBd(a.q,qJ,'Duration',true);xBd(a.s,QK,'ENTITIES',true);xBd(a.r,QK,'ENTITIESBase',true);xBd(a.t,qJ,qLe,true);xBd(a.u,jE,'Float',true);xBd(a.v,ZI,'FloatObject',true);xBd(a.w,qJ,'GDay',true);xBd(a.B,qJ,'GMonth',true);xBd(a.A,qJ,'GMonthDay',true);xBd(a.C,qJ,'GYear',true);xBd(a.D,qJ,'GYearMonth',true);xBd(a.F,WC(gE,1),'HexBinary',true);xBd(a.G,qJ,'ID',true);xBd(a.H,qJ,'IDREF',true);xBd(a.J,QK,'IDREFS',true);xBd(a.I,QK,'IDREFSBase',true);xBd(a.K,kE,'Int',true);xBd(a.M,uJ,'Integer',true);xBd(a.L,bJ,'IntObject',true);xBd(a.P,qJ,'Language',true);xBd(a.Q,lE,'Long',true);xBd(a.R,eJ,'LongObject',true);xBd(a.S,qJ,'Name',true);xBd(a.T,qJ,rLe,true);xBd(a.U,uJ,'NegativeInteger',true);xBd(a.V,qJ,BLe,true);xBd(a.X,QK,'NMTOKENS',true);xBd(a.W,QK,'NMTOKENSBase',true);xBd(a.Y,uJ,'NonNegativeInteger',true);xBd(a.Z,uJ,'NonPositiveInteger',true);xBd(a.$,qJ,'NormalizedString',true);xBd(a._,qJ,'NOTATION',true);xBd(a.ab,qJ,'PositiveInteger',true);xBd(a.cb,qJ,'QName',true);xBd(a.db,wdb,'Short',true);xBd(a.eb,lJ,'ShortObject',true);xBd(a.gb,qJ,uwe,true);xBd(a.hb,qJ,'Time',true);xBd(a.ib,qJ,'Token',true);xBd(a.jb,wdb,'UnsignedByte',true);xBd(a.kb,lJ,'UnsignedByteObject',true);xBd(a.lb,lE,'UnsignedInt',true);xBd(a.mb,eJ,'UnsignedIntObject',true);xBd(a.nb,uJ,'UnsignedLong',true);xBd(a.ob,kE,'UnsignedShort',true);xBd(a.pb,bJ,'UnsignedShortObject',true);pBd(a,dLe);yne(a)} +function Fed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab;if(d.$g()){return yob(),yob(),vob}if(Heb(TD(Gxd(b,(umd(),rld))))){return yob(),yob(),vob}A=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i!=0;C=Ded(b);B=!C.dc();if(A||B){e=RD(Gxd(b,Tld),143);if(!e){throw Adb(new Jed('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}Y=Ofd(e,(aGd(),YFd));Bed(b);if(!A&&B&&!Y){return yob(),yob(),vob}t=new bnb;if(dE(Gxd(b,Xkd))===dE((Fnd(),Cnd))&&(Ofd(e,VFd)||Ofd(e,UFd))){if(Heb(TD(Gxd(b,mmd)))){throw Adb(new Jed('Topdown layout cannot be used together with hierarchy handling.'))}M=Aed(a,b);N=new Yub;ye(N,(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));while(N.b!=0){K=RD(N.b==0?null:(sFb(N.b!=0),Wub(N,N.a.a)),27);Bed(K);X=dE(Gxd(K,Xkd))===dE(End);if(X||Hxd(K,Akd)&&!Nfd(e,Gxd(K,Tld))){q=Fed(a,K,c,d);Tmb(t,q);Ixd(K,Xkd,End);ksd(K)}else{ye(N,(!K.a&&(K.a=new C5d(J4,K,10,11)),K.a))}}}else{M=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;if(Heb(TD(Gxd(b,mmd)))){Z=d.eh(1);Z.Ug(yGe,1);if(Gxd(b,nmd)==null){throw Adb(new Jed(b.k+' has not been assigned a top-down node type.'))}if(RD(Gxd(b,nmd),280)==(mqd(),jqd)||RD(Gxd(b,nmd),280)==lqd){for(s=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));s.e!=s.i.gc();){r=RD(bMd(s),27);J=RD(Gxd(r,Tld),143);if((!r.a&&(r.a=new C5d(J4,r,10,11)),r.a).i>0&&(ltd(J.f),false)){if(RD(Gxd(r,nmd),280)==jqd){throw Adb(new Jed('Topdown Layout Providers should only be used on parallel nodes.'))}fE(ltd(J.f));null.Um();zyd(r,$wnd.Math.max(r.g,null.Vm),$wnd.Math.max(r.f,null.Vm))}else if(Gxd(r,smd)!=null){h=RD(Gxd(r,smd),347);W=h.Tg(r);zyd(r,$wnd.Math.max(r.g,W.a),$wnd.Math.max(r.f,W.b))}}}O=RD(Gxd(b,tld),107);n=b.g-(O.b+O.c);m=b.f-(O.d+O.a);Z.bh('Available Child Area: ('+n+'|'+m+')');Ixd(b,Dkd,n/m);Ced(b,e,d.eh(M));if(RD(Gxd(b,nmd),280)==lqd){psd(b);zyd(b,O.b+Kfb(UD(Gxd(b,Ikd)))+O.c,O.d+Kfb(UD(Gxd(b,Hkd)))+O.a)}Z.bh('Executed layout algorithm: '+WD(Gxd(b,Akd))+' on node '+b.k);if(RD(Gxd(b,nmd),280)==jqd){if(n<0||m<0){throw Adb(new Jed('The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. '+b.k))}Hxd(b,Ikd)||Hxd(b,Hkd)||psd(b);p=Kfb(UD(Gxd(b,Ikd)));o=Kfb(UD(Gxd(b,Hkd)));Z.bh('Desired Child Area: ('+p+'|'+o+')');Q=n/p;R=m/o;P=$wnd.Math.min(Q,$wnd.Math.min(R,Kfb(UD(Gxd(b,omd)))));Ixd(b,qmd,P);Z.bh(b.k+' -- Local Scale Factor (X|Y): ('+Q+'|'+R+')');u=RD(Gxd(b,Kkd),21);f=0;g=0;P<Q&&(u.Hc((ukd(),okd))?(f=(n/2-p*P/2)/P):u.Hc(qkd)&&(f=(n-p*P)/P));P<R&&(u.Hc((ukd(),skd))?(g=(m/2-o*P/2)/P):u.Hc(rkd)&&(g=(m-o*P)/P));$=f+(O.b/P-O.b);ab=g+(O.d/P-O.d);Z.bh('Shift: ('+$+'|'+ab+')');for(L=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));L.e!=L.i.gc();){K=RD(bMd(L),27);Dyd(K,K.i+$);Eyd(K,K.j+ab)}for(w=new dMd((!b.b&&(b.b=new C5d(G4,b,12,3)),b.b));w.e!=w.i.gc();){v=RD(bMd(w),74);for(T=new dMd((!v.a&&(v.a=new C5d(F4,v,6,6)),v.a));T.e!=T.i.gc();){S=RD(bMd(T),166);Nzd(S,S.j+$,S.k+ab);Gzd(S,S.b+$,S.c+ab);for(j=new dMd((!S.a&&(S.a=new XZd(D4,S,5)),S.a));j.e!=j.i.gc();){i=RD(bMd(j),377);Uxd(i,i.a+$,i.b+ab)}}for(I=new dMd((!v.n&&(v.n=new C5d(I4,v,1,7)),v.n));I.e!=I.i.gc();){H=RD(bMd(I),135);Byd(H,H.i+$,H.j+ab)}G=RD(Gxd(v,cld),75);for(F=Sub(G,0);F.b!=F.d.c;){D=RD(evb(F),8);D.a+=$;D.b+=ab}Ixd(v,cld,G)}}Z.Vg()}for(l=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));l.e!=l.i.gc();){k=RD(bMd(l),27);q=Fed(a,k,c,d);Tmb(t,q);ksd(k)}}if(d.$g()){return yob(),yob(),vob}for(V=new Anb(t);V.a<V.c.c.length;){U=RD(ynb(V),74);Ixd(U,rld,(Geb(),true))}Heb(TD(Gxd(b,mmd)))||Ced(b,e,d.eh(M));Ged(t);return B&&Y?C:(yob(),yob(),vob)}else{return yob(),yob(),vob}} +function Jre(a,b){var c,d;if(!Bre){Bre=new Tsb;Cre=new Tsb;d=(Vse(),Vse(),++Use,new xte(4));ose(d,'\t\n\r\r ');$jb(Bre,QLe,d);$jb(Cre,QLe,yte(d));d=(null,++Use,new xte(4));ose(d,TLe);$jb(Bre,OLe,d);$jb(Cre,OLe,yte(d));d=(null,++Use,new xte(4));ose(d,TLe);$jb(Bre,OLe,d);$jb(Cre,OLe,yte(d));d=(null,++Use,new xte(4));ose(d,ULe);ute(d,RD(Xjb(Bre,OLe),122));$jb(Bre,PLe,d);$jb(Cre,PLe,yte(d));d=(null,++Use,new xte(4));ose(d,'-.0:AZ__az\xB7\xB7\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u02D0\u02D1\u0300\u0345\u0360\u0361\u0386\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\u0483\u0486\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05A1\u05A3\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0640\u0652\u0660\u0669\u0670\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06E8\u06EA\u06ED\u06F0\u06F9\u0901\u0903\u0905\u0939\u093C\u094D\u0951\u0954\u0958\u0963\u0966\u096F\u0981\u0983\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BC\u09BE\u09C4\u09C7\u09C8\u09CB\u09CD\u09D7\u09D7\u09DC\u09DD\u09DF\u09E3\u09E6\u09F1\u0A02\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A3E\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A66\u0A74\u0A81\u0A83\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0AC5\u0AC7\u0AC9\u0ACB\u0ACD\u0AE0\u0AE0\u0AE6\u0AEF\u0B01\u0B03\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3C\u0B43\u0B47\u0B48\u0B4B\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F\u0B61\u0B66\u0B6F\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0BBE\u0BC2\u0BC6\u0BC8\u0BCA\u0BCD\u0BD7\u0BD7\u0BE7\u0BEF\u0C01\u0C03\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C44\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C66\u0C6F\u0C82\u0C83\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBE\u0CC4\u0CC6\u0CC8\u0CCA\u0CCD\u0CD5\u0CD6\u0CDE\u0CDE\u0CE0\u0CE1\u0CE6\u0CEF\u0D02\u0D03\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D3E\u0D43\u0D46\u0D48\u0D4A\u0D4D\u0D57\u0D57\u0D60\u0D61\u0D66\u0D6F\u0E01\u0E2E\u0E30\u0E3A\u0E40\u0E4E\u0E50\u0E59\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\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0ED0\u0ED9\u0F18\u0F19\u0F20\u0F29\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F3E\u0F47\u0F49\u0F69\u0F71\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD\u0FB1\u0FB7\u0FB9\u0FB9\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\u20D0\u20DC\u20E1\u20E1\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302F\u3031\u3035\u3041\u3094\u3099\u309A\u309D\u309E\u30A1\u30FA\u30FC\u30FE\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3');$jb(Bre,RLe,d);$jb(Cre,RLe,yte(d));d=(null,++Use,new xte(4));ose(d,ULe);rte(d,95,95);rte(d,58,58);$jb(Bre,SLe,d);$jb(Cre,SLe,yte(d))}c=b?RD(Xjb(Bre,a),138):RD(Xjb(Cre,a),138);return c} +function zCc(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,sxe),'ELK Layered'),'Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.'),new CCc),sxe),ysb((aGd(),_Fd),cD(WC(T5,1),jwe,245,0,[YFd,ZFd,XFd,$Fd,VFd,UFd])))));Agd(a,sxe,xDe,iGd(QBc));Agd(a,sxe,yDe,iGd(RBc));Agd(a,sxe,Bze,iGd(SBc));Agd(a,sxe,zDe,iGd(TBc));Agd(a,sxe,aAe,iGd(VBc));Agd(a,sxe,ADe,iGd(WBc));Agd(a,sxe,BDe,iGd(ZBc));Agd(a,sxe,CDe,iGd(_Bc));Agd(a,sxe,DDe,iGd(aCc));Agd(a,sxe,EDe,iGd($Bc));Agd(a,sxe,_ze,iGd(bCc));Agd(a,sxe,FDe,iGd(dCc));Agd(a,sxe,GDe,iGd(fCc));Agd(a,sxe,HDe,iGd(YBc));Agd(a,sxe,wCe,iGd(PBc));Agd(a,sxe,yCe,iGd(UBc));Agd(a,sxe,xCe,iGd(XBc));Agd(a,sxe,zCe,iGd(cCc));Agd(a,sxe,$ze,sgb(0));Agd(a,sxe,ACe,iGd(KBc));Agd(a,sxe,BCe,iGd(LBc));Agd(a,sxe,CCe,iGd(MBc));Agd(a,sxe,JCe,iGd(vCc));Agd(a,sxe,KCe,iGd(nCc));Agd(a,sxe,LCe,iGd(oCc));Agd(a,sxe,MCe,iGd(rCc));Agd(a,sxe,NCe,iGd(pCc));Agd(a,sxe,OCe,iGd(qCc));Agd(a,sxe,PCe,iGd(xCc));Agd(a,sxe,QCe,iGd(wCc));Agd(a,sxe,RCe,iGd(tCc));Agd(a,sxe,SCe,iGd(sCc));Agd(a,sxe,TCe,iGd(uCc));Agd(a,sxe,pCe,iGd(iBc));Agd(a,sxe,qCe,iGd(jBc));Agd(a,sxe,tCe,iGd(DAc));Agd(a,sxe,uCe,iGd(EAc));Agd(a,sxe,mAe,iGd(jCc));Agd(a,sxe,nAe,iGd(lCc));Agd(a,sxe,oAe,iGd(iCc));Agd(a,sxe,pAe,iGd(hCc));Agd(a,sxe,qAe,kCc);Agd(a,sxe,Eze,rBc);Agd(a,sxe,kDe,zAc);Agd(a,sxe,IDe,0);Agd(a,sxe,bAe,sgb(1));Agd(a,sxe,Dze,Yze);Agd(a,sxe,JDe,iGd(pBc));Agd(a,sxe,eAe,iGd(BBc));Agd(a,sxe,KDe,iGd(GBc));Agd(a,sxe,LDe,iGd(qAc));Agd(a,sxe,MDe,iGd(Rzc));Agd(a,sxe,fDe,iGd(IAc));Agd(a,sxe,cAe,(Geb(),true));Agd(a,sxe,NDe,iGd(NAc));Agd(a,sxe,ODe,iGd(OAc));Agd(a,sxe,jAe,iGd(lBc));Agd(a,sxe,iAe,iGd(oBc));Agd(a,sxe,hAe,iGd(mBc));Agd(a,sxe,PDe,tAc);Agd(a,sxe,kAe,iGd(dBc));Agd(a,sxe,QDe,iGd(cBc));Agd(a,sxe,lAe,iGd(EBc));Agd(a,sxe,RDe,iGd(DBc));Agd(a,sxe,SDe,iGd(FBc));Agd(a,sxe,TDe,uBc);Agd(a,sxe,UDe,iGd(wBc));Agd(a,sxe,VDe,iGd(xBc));Agd(a,sxe,WDe,iGd(yBc));Agd(a,sxe,XDe,iGd(vBc));Agd(a,sxe,PBe,iGd(mCc));Agd(a,sxe,SBe,iGd($Ac));Agd(a,sxe,YBe,iGd(ZAc));Agd(a,sxe,OBe,iGd(gCc));Agd(a,sxe,TBe,iGd(UAc));Agd(a,sxe,RBe,iGd(pAc));Agd(a,sxe,_Be,iGd(oAc));Agd(a,sxe,aCe,iGd(eAc));Agd(a,sxe,hCe,iGd(fAc));Agd(a,sxe,iCe,iGd(hAc));Agd(a,sxe,jCe,iGd(gAc));Agd(a,sxe,cCe,iGd(nAc));Agd(a,sxe,KBe,iGd(aBc));Agd(a,sxe,LBe,iGd(bBc));Agd(a,sxe,JBe,iGd(QAc));Agd(a,sxe,kCe,iGd(kBc));Agd(a,sxe,nCe,iGd(fBc));Agd(a,sxe,IBe,iGd(GAc));Agd(a,sxe,oCe,iGd(hBc));Agd(a,sxe,rCe,iGd(BAc));Agd(a,sxe,sCe,iGd(CAc));Agd(a,sxe,YDe,iGd(dAc));Agd(a,sxe,mCe,iGd(eBc));Agd(a,sxe,ECe,iGd(Xzc));Agd(a,sxe,FCe,iGd(Wzc));Agd(a,sxe,DCe,iGd(Vzc));Agd(a,sxe,GCe,iGd(KAc));Agd(a,sxe,HCe,iGd(JAc));Agd(a,sxe,ICe,iGd(LAc));Agd(a,sxe,CAe,iGd(nBc));Agd(a,sxe,ZDe,iGd(RAc));Agd(a,sxe,Cze,iGd(FAc));Agd(a,sxe,$De,iGd(wAc));Agd(a,sxe,fAe,iGd(vAc));Agd(a,sxe,bCe,iGd(iAc));Agd(a,sxe,_De,iGd(CBc));Agd(a,sxe,aEe,iGd(Uzc));Agd(a,sxe,bEe,iGd(MAc));Agd(a,sxe,cEe,iGd(zBc));Agd(a,sxe,dEe,iGd(sBc));Agd(a,sxe,eEe,iGd(tBc));Agd(a,sxe,WBe,iGd(WAc));Agd(a,sxe,XBe,iGd(XAc));Agd(a,sxe,fEe,iGd(IBc));Agd(a,sxe,MBe,iGd(Szc));Agd(a,sxe,ZBe,iGd(YAc));Agd(a,sxe,UCe,iGd(xAc));Agd(a,sxe,VCe,iGd(uAc));Agd(a,sxe,gEe,iGd(_Ac));Agd(a,sxe,$Be,iGd(SAc));Agd(a,sxe,lCe,iGd(gBc));Agd(a,sxe,hEe,iGd(eCc));Agd(a,sxe,HBe,iGd(sAc));Agd(a,sxe,NBe,iGd(HBc));Agd(a,sxe,vCe,iGd(AAc));Agd(a,sxe,dCe,iGd(jAc));Agd(a,sxe,eCe,iGd(kAc));Agd(a,sxe,UBe,iGd(TAc));Agd(a,sxe,fCe,iGd(lAc));Agd(a,sxe,iEe,iGd(PAc));Agd(a,sxe,VBe,iGd(VAc));Agd(a,sxe,gCe,iGd(mAc));Agd(a,sxe,WCe,iGd(cAc));Agd(a,sxe,$Ce,iGd(_zc));Agd(a,sxe,_Ce,iGd(Zzc));Agd(a,sxe,aDe,iGd($zc));Agd(a,sxe,YCe,iGd(aAc));Agd(a,sxe,ZCe,iGd(Yzc));Agd(a,sxe,XCe,iGd(bAc));Agd(a,sxe,QBe,iGd(HAc))} +function yne(a){_Ad(a.a,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anySimpleType']));_Ad(a.b,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anyType',rKe,pKe]));_Ad(RD(QHd(xYd(a.b),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,GIe,':mixed']));_Ad(RD(QHd(xYd(a.b),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,cLe,eLe,GIe,':1',nLe,'lax']));_Ad(RD(QHd(xYd(a.b),2),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,WKe,cLe,eLe,GIe,':2',nLe,'lax']));_Ad(a.c,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anyURI',bLe,ZKe]));_Ad(a.d,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'base64Binary',bLe,ZKe]));_Ad(a.e,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,hve,bLe,ZKe]));_Ad(a.f,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'boolean:Object',DKe,hve]));_Ad(a.g,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,dKe]));_Ad(a.i,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'byte:Object',DKe,dKe]));_Ad(a.j,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'date',bLe,ZKe]));_Ad(a.k,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'dateTime',bLe,ZKe]));_Ad(a.n,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'decimal',bLe,ZKe]));_Ad(a.o,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,fKe,bLe,ZKe]));_Ad(a.p,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'double:Object',DKe,fKe]));_Ad(a.q,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'duration',bLe,ZKe]));_Ad(a.s,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'ENTITIES',DKe,oLe,pLe,'1']));_Ad(a.r,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,oLe,$Ke,qLe]));_Ad(a.t,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,qLe,DKe,rLe]));_Ad(a.u,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,gKe,bLe,ZKe]));_Ad(a.v,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'float:Object',DKe,gKe]));_Ad(a.w,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gDay',bLe,ZKe]));_Ad(a.B,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gMonth',bLe,ZKe]));_Ad(a.A,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gMonthDay',bLe,ZKe]));_Ad(a.C,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gYear',bLe,ZKe]));_Ad(a.D,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gYearMonth',bLe,ZKe]));_Ad(a.F,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'hexBinary',bLe,ZKe]));_Ad(a.G,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'ID',DKe,rLe]));_Ad(a.H,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'IDREF',DKe,rLe]));_Ad(a.J,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'IDREFS',DKe,sLe,pLe,'1']));_Ad(a.I,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,sLe,$Ke,'IDREF']));_Ad(a.K,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,hKe]));_Ad(a.M,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,tLe]));_Ad(a.L,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'int:Object',DKe,hKe]));_Ad(a.P,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'language',DKe,uLe,vLe,wLe]));_Ad(a.Q,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,iKe]));_Ad(a.R,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'long:Object',DKe,iKe]));_Ad(a.S,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'Name',DKe,uLe,vLe,xLe]));_Ad(a.T,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,rLe,DKe,'Name',vLe,yLe]));_Ad(a.U,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'negativeInteger',DKe,zLe,ALe,'-1']));_Ad(a.V,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,BLe,DKe,uLe,vLe,'\\c+']));_Ad(a.X,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'NMTOKENS',DKe,CLe,pLe,'1']));_Ad(a.W,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,CLe,$Ke,BLe]));_Ad(a.Y,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,DLe,DKe,tLe,ELe,'0']));_Ad(a.Z,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,zLe,DKe,tLe,ALe,'0']));_Ad(a.$,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,FLe,DKe,jve,bLe,'replace']));_Ad(a._,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'NOTATION',bLe,ZKe]));_Ad(a.ab,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'positiveInteger',DKe,DLe,ELe,'1']));_Ad(a.bb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'processingInstruction_._type',rKe,'empty']));_Ad(RD(QHd(xYd(a.bb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'data']));_Ad(RD(QHd(xYd(a.bb),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,CIe]));_Ad(a.cb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'QName',bLe,ZKe]));_Ad(a.db,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,jKe]));_Ad(a.eb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'short:Object',DKe,jKe]));_Ad(a.fb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'simpleAnyType',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':3',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':4',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),2),19),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':5',rKe,UKe]));_Ad(a.gb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,jve,bLe,'preserve']));_Ad(a.hb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'time',bLe,ZKe]));_Ad(a.ib,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,uLe,DKe,FLe,bLe,ZKe]));_Ad(a.jb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,GLe,ALe,'255',ELe,'0']));_Ad(a.kb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedByte:Object',DKe,GLe]));_Ad(a.lb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,HLe,ALe,'4294967295',ELe,'0']));_Ad(a.mb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedInt:Object',DKe,HLe]));_Ad(a.nb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedLong',DKe,DLe,ALe,ILe,ELe,'0']));_Ad(a.ob,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,JLe,ALe,'65535',ELe,'0']));_Ad(a.pb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedShort:Object',DKe,JLe]));_Ad(a.qb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'',rKe,pKe]));_Ad(RD(QHd(xYd(a.qb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,GIe,':mixed']));_Ad(RD(QHd(xYd(a.qb),1),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'xmlns:prefix']));_Ad(RD(QHd(xYd(a.qb),2),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'xsi:schemaLocation']));_Ad(RD(QHd(xYd(a.qb),3),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,'cDATA',_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),4),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,'comment',_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),5),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,KLe,_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),6),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,hIe,_Ke,aLe]))} +function TId(a){return lhb('_UI_EMFDiagnostic_marker',a)?'EMF Problem':lhb('_UI_CircularContainment_diagnostic',a)?'An object may not circularly contain itself':lhb(TIe,a)?'Wrong character.':lhb(UIe,a)?'Invalid reference number.':lhb(VIe,a)?'A character is required after \\.':lhb(WIe,a)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":lhb(XIe,a)?"'(?<' or '(?<!' is expected.":lhb(YIe,a)?'A comment is not terminated.':lhb(ZIe,a)?"')' is expected.":lhb($Ie,a)?'Unexpected end of the pattern in a modifier group.':lhb(_Ie,a)?"':' is expected.":lhb(aJe,a)?'Unexpected end of the pattern in a conditional group.':lhb(bJe,a)?'A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.':lhb(cJe,a)?'There are more than three choices in a conditional group.':lhb(dJe,a)?'A character in U+0040-U+005f must follow \\c.':lhb(eJe,a)?"A '{' is required before a character category.":lhb(fJe,a)?"A property name is not closed by '}'.":lhb(gJe,a)?'Unexpected meta character.':lhb(hJe,a)?'Unknown property.':lhb(iJe,a)?"A POSIX character class must be closed by ':]'.":lhb(jJe,a)?'Unexpected end of the pattern in a character class.':lhb(kJe,a)?'Unknown name for a POSIX character class.':lhb('parser.cc.4',a)?"'-' is invalid here.":lhb(lJe,a)?"']' is expected.":lhb(mJe,a)?"'[' is invalid in a character class. Write '\\['.":lhb(nJe,a)?"']' is invalid in a character class. Write '\\]'.":lhb(oJe,a)?"'-' is an invalid character range. Write '\\-'.":lhb(pJe,a)?"'[' is expected.":lhb(qJe,a)?"')' or '-[' or '+[' or '&[' is expected.":lhb(rJe,a)?'The range end code point is less than the start code point.':lhb(sJe,a)?'Invalid Unicode hex notation.':lhb(tJe,a)?'Overflow in a hex notation.':lhb(uJe,a)?"'\\x{' must be closed by '}'.":lhb(vJe,a)?'Invalid Unicode code point.':lhb(wJe,a)?'An anchor must not be here.':lhb(xJe,a)?'This expression is not supported in the current option setting.':lhb(yJe,a)?'Invalid quantifier. A digit is expected.':lhb(zJe,a)?"Invalid quantifier. Invalid quantity or a '}' is missing.":lhb(AJe,a)?"Invalid quantifier. A digit or '}' is expected.":lhb(BJe,a)?'Invalid quantifier. A min quantity must be <= a max quantity.':lhb(CJe,a)?'Invalid quantifier. A quantity value overflow.':lhb('_UI_PackageRegistry_extensionpoint',a)?'Ecore Package Registry for Generated Packages':lhb('_UI_DynamicPackageRegistry_extensionpoint',a)?'Ecore Package Registry for Dynamic Packages':lhb('_UI_FactoryRegistry_extensionpoint',a)?'Ecore Factory Override Registry':lhb('_UI_URIExtensionParserRegistry_extensionpoint',a)?'URI Extension Parser Registry':lhb('_UI_URIProtocolParserRegistry_extensionpoint',a)?'URI Protocol Parser Registry':lhb('_UI_URIContentParserRegistry_extensionpoint',a)?'URI Content Parser Registry':lhb('_UI_ContentHandlerRegistry_extensionpoint',a)?'Content Handler Registry':lhb('_UI_URIMappingRegistry_extensionpoint',a)?'URI Converter Mapping Registry':lhb('_UI_PackageRegistryImplementation_extensionpoint',a)?'Ecore Package Registry Implementation':lhb('_UI_ValidationDelegateRegistry_extensionpoint',a)?'Validation Delegate Registry':lhb('_UI_SettingDelegateRegistry_extensionpoint',a)?'Feature Setting Delegate Factory Registry':lhb('_UI_InvocationDelegateRegistry_extensionpoint',a)?'Operation Invocation Delegate Factory Registry':lhb('_UI_EClassInterfaceNotAbstract_diagnostic',a)?'A class that is an interface must also be abstract':lhb('_UI_EClassNoCircularSuperTypes_diagnostic',a)?'A class may not be a super type of itself':lhb('_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic',a)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":lhb('_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic',a)?'The opposite of the opposite may not be a reference different from this one':lhb('_UI_EReferenceOppositeNotFeatureOfType_diagnostic',a)?"The opposite must be a feature of the reference's type":lhb('_UI_EReferenceTransientOppositeNotTransient_diagnostic',a)?'The opposite of a transient reference must be transient if it is proxy resolving':lhb('_UI_EReferenceOppositeBothContainment_diagnostic',a)?'The opposite of a containment reference must not be a containment reference':lhb('_UI_EReferenceConsistentUnique_diagnostic',a)?'A containment or bidirectional reference must be unique if its upper bound is different from 1':lhb('_UI_ETypedElementNoType_diagnostic',a)?'The typed element must have a type':lhb('_UI_EAttributeNoDataType_diagnostic',a)?'The generic attribute type must not refer to a class':lhb('_UI_EReferenceNoClass_diagnostic',a)?'The generic reference type must not refer to a data type':lhb('_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic',a)?"A generic type can't refer to both a type parameter and a classifier":lhb('_UI_EGenericTypeNoClass_diagnostic',a)?'A generic super type must refer to a class':lhb('_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic',a)?'A generic type in this context must refer to a classifier or a type parameter':lhb('_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic',a)?'A generic type may have bounds only when used as a type argument':lhb('_UI_EGenericTypeNoUpperAndLowerBound_diagnostic',a)?'A generic type must not have both a lower and an upper bound':lhb('_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic',a)?'A generic type with bounds must not also refer to a type parameter or classifier':lhb('_UI_EGenericTypeNoArguments_diagnostic',a)?'A generic type may have arguments only if it refers to a classifier':lhb('_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic',a)?'A generic type may only refer to a type parameter that is in scope':a} +function $Bd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(a.r)return;a.r=true;PAd(a,'graph');CBd(a,'graph');DBd(a,$He);eBd(a.o,'T');WGd(zYd(a.a),a.p);WGd(zYd(a.f),a.a);WGd(zYd(a.n),a.f);WGd(zYd(a.g),a.n);WGd(zYd(a.c),a.n);WGd(zYd(a.i),a.c);WGd(zYd(a.j),a.c);WGd(zYd(a.d),a.f);WGd(zYd(a.e),a.a);vBd(a.p,U5,kze,true,true,false);o=bBd(a.p,a.p,'setProperty');p=fBd(o);j=lBd(a.o);k=(c=(d=new s2d,d),c);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);l=mBd(p);n2d(k,l);dBd(o,j,_He);j=mBd(p);dBd(o,j,aIe);o=bBd(a.p,null,'getProperty');p=fBd(o);j=lBd(a.o);k=mBd(p);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);dBd(o,j,_He);j=mBd(p);n=XVd(o,j,null);!!n&&n.oj();o=bBd(a.p,a.wb.e,'hasProperty');j=lBd(a.o);k=(e=(f=new s2d,f),e);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);dBd(o,j,_He);o=bBd(a.p,a.p,'copyProperties');cBd(o,a.p,bIe);o=bBd(a.p,null,'getAllProperties');j=lBd(a.wb.P);k=lBd(a.o);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);l=(g=(h=new s2d,h),g);WGd((!k.d&&(k.d=new XZd(o7,k,1)),k.d),l);k=lBd(a.wb.M);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);m=XVd(o,j,null);!!m&&m.oj();vBd(a.a,C4,xHe,true,false,true);zBd(RD(QHd(xYd(a.a),0),19),a.k,null,cIe,0,-1,C4,false,false,true,true,false,false,false);vBd(a.f,H4,zHe,true,false,true);zBd(RD(QHd(xYd(a.f),0),19),a.g,RD(QHd(xYd(a.g),0),19),'labels',0,-1,H4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.f),1),35),a.wb._,dIe,null,0,1,H4,false,false,true,false,true,false);vBd(a.n,L4,'ElkShape',true,false,true);tBd(RD(QHd(xYd(a.n),0),35),a.wb.t,eIe,zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),1),35),a.wb.t,fIe,zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),2),35),a.wb.t,'x',zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),3),35),a.wb.t,'y',zxe,1,1,L4,false,false,true,false,true,false);o=bBd(a.n,null,'setDimensions');cBd(o,a.wb.t,fIe);cBd(o,a.wb.t,eIe);o=bBd(a.n,null,'setLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.g,I4,FHe,false,false,true);zBd(RD(QHd(xYd(a.g),0),19),a.f,RD(QHd(xYd(a.f),0),19),gIe,0,1,I4,false,false,true,false,false,false,false);tBd(RD(QHd(xYd(a.g),1),35),a.wb._,hIe,'',0,1,I4,false,false,true,false,true,false);vBd(a.c,E4,AHe,true,false,true);zBd(RD(QHd(xYd(a.c),0),19),a.d,RD(QHd(xYd(a.d),1),19),'outgoingEdges',0,-1,E4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.c),1),19),a.d,RD(QHd(xYd(a.d),2),19),'incomingEdges',0,-1,E4,false,false,true,false,true,false,false);vBd(a.i,J4,GHe,false,false,true);zBd(RD(QHd(xYd(a.i),0),19),a.j,RD(QHd(xYd(a.j),0),19),'ports',0,-1,J4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.i),1),19),a.i,RD(QHd(xYd(a.i),2),19),iIe,0,-1,J4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.i),2),19),a.i,RD(QHd(xYd(a.i),1),19),gIe,0,1,J4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.i),3),19),a.d,RD(QHd(xYd(a.d),0),19),'containedEdges',0,-1,J4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.i),4),35),a.wb.e,jIe,null,0,1,J4,true,true,false,false,true,true);vBd(a.j,K4,HHe,false,false,true);zBd(RD(QHd(xYd(a.j),0),19),a.i,RD(QHd(xYd(a.i),0),19),gIe,0,1,K4,false,false,true,false,false,false,false);vBd(a.d,G4,BHe,false,false,true);zBd(RD(QHd(xYd(a.d),0),19),a.i,RD(QHd(xYd(a.i),3),19),'containingNode',0,1,G4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.d),1),19),a.c,RD(QHd(xYd(a.c),0),19),kIe,0,-1,G4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.d),2),19),a.c,RD(QHd(xYd(a.c),1),19),lIe,0,-1,G4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.d),3),19),a.e,RD(QHd(xYd(a.e),5),19),mIe,0,-1,G4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.d),4),35),a.wb.e,'hyperedge',null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),5),35),a.wb.e,jIe,null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),6),35),a.wb.e,'selfloop',null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),7),35),a.wb.e,'connected',null,0,1,G4,true,true,false,false,true,true);vBd(a.b,D4,yHe,false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.wb.t,'x',zxe,1,1,D4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.b),1),35),a.wb.t,'y',zxe,1,1,D4,false,false,true,false,true,false);o=bBd(a.b,null,'set');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.e,F4,CHe,false,false,true);tBd(RD(QHd(xYd(a.e),0),35),a.wb.t,'startX',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),1),35),a.wb.t,'startY',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),2),35),a.wb.t,'endX',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),3),35),a.wb.t,'endY',null,0,1,F4,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.e),4),19),a.b,null,nIe,0,-1,F4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.e),5),19),a.d,RD(QHd(xYd(a.d),3),19),gIe,0,1,F4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.e),6),19),a.c,null,oIe,0,1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),7),19),a.c,null,pIe,0,1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),8),19),a.e,RD(QHd(xYd(a.e),9),19),qIe,0,-1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),9),19),a.e,RD(QHd(xYd(a.e),8),19),rIe,0,-1,F4,false,false,true,false,true,false,false);tBd(RD(QHd(xYd(a.e),10),35),a.wb._,dIe,null,0,1,F4,false,false,true,false,true,false);o=bBd(a.e,null,'setStartLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');o=bBd(a.e,null,'setEndLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.k,UK,'ElkPropertyToValueMapEntry',false,false,false);j=lBd(a.o);k=(i=(b=new s2d,b),i);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);uBd(RD(QHd(xYd(a.k),0),35),j,'key',UK,false,false,true,false);tBd(RD(QHd(xYd(a.k),1),35),a.s,aIe,null,0,1,UK,false,false,true,false,true,false);xBd(a.o,V5,'IProperty',true);xBd(a.s,jJ,'PropertyValue',true);pBd(a,$He)} +function Kqe(){Kqe=geb;Jqe=$C(gE,YHe,28,txe,15,1);Jqe[9]=35;Jqe[10]=19;Jqe[13]=19;Jqe[32]=51;Jqe[33]=49;Jqe[34]=33;Knb(Jqe,35,38,49);Jqe[38]=1;Knb(Jqe,39,45,49);Knb(Jqe,45,47,-71);Jqe[47]=49;Knb(Jqe,48,58,-71);Jqe[58]=61;Jqe[59]=49;Jqe[60]=1;Jqe[61]=49;Jqe[62]=33;Knb(Jqe,63,65,49);Knb(Jqe,65,91,-3);Knb(Jqe,91,93,33);Jqe[93]=1;Jqe[94]=33;Jqe[95]=-3;Jqe[96]=33;Knb(Jqe,97,123,-3);Knb(Jqe,123,183,33);Jqe[183]=-87;Knb(Jqe,184,192,33);Knb(Jqe,192,215,-19);Jqe[215]=33;Knb(Jqe,216,247,-19);Jqe[247]=33;Knb(Jqe,248,306,-19);Knb(Jqe,306,308,33);Knb(Jqe,308,319,-19);Knb(Jqe,319,321,33);Knb(Jqe,321,329,-19);Jqe[329]=33;Knb(Jqe,330,383,-19);Jqe[383]=33;Knb(Jqe,384,452,-19);Knb(Jqe,452,461,33);Knb(Jqe,461,497,-19);Knb(Jqe,497,500,33);Knb(Jqe,500,502,-19);Knb(Jqe,502,506,33);Knb(Jqe,506,536,-19);Knb(Jqe,536,592,33);Knb(Jqe,592,681,-19);Knb(Jqe,681,699,33);Knb(Jqe,699,706,-19);Knb(Jqe,706,720,33);Knb(Jqe,720,722,-87);Knb(Jqe,722,768,33);Knb(Jqe,768,838,-87);Knb(Jqe,838,864,33);Knb(Jqe,864,866,-87);Knb(Jqe,866,902,33);Jqe[902]=-19;Jqe[903]=-87;Knb(Jqe,904,907,-19);Jqe[907]=33;Jqe[908]=-19;Jqe[909]=33;Knb(Jqe,910,930,-19);Jqe[930]=33;Knb(Jqe,931,975,-19);Jqe[975]=33;Knb(Jqe,976,983,-19);Knb(Jqe,983,986,33);Jqe[986]=-19;Jqe[987]=33;Jqe[988]=-19;Jqe[989]=33;Jqe[990]=-19;Jqe[991]=33;Jqe[992]=-19;Jqe[993]=33;Knb(Jqe,994,1012,-19);Knb(Jqe,1012,1025,33);Knb(Jqe,1025,1037,-19);Jqe[1037]=33;Knb(Jqe,1038,1104,-19);Jqe[1104]=33;Knb(Jqe,1105,1117,-19);Jqe[1117]=33;Knb(Jqe,1118,1154,-19);Jqe[1154]=33;Knb(Jqe,1155,1159,-87);Knb(Jqe,1159,1168,33);Knb(Jqe,1168,1221,-19);Knb(Jqe,1221,1223,33);Knb(Jqe,1223,1225,-19);Knb(Jqe,1225,1227,33);Knb(Jqe,1227,1229,-19);Knb(Jqe,1229,1232,33);Knb(Jqe,1232,1260,-19);Knb(Jqe,1260,1262,33);Knb(Jqe,1262,1270,-19);Knb(Jqe,1270,1272,33);Knb(Jqe,1272,1274,-19);Knb(Jqe,1274,1329,33);Knb(Jqe,1329,1367,-19);Knb(Jqe,1367,1369,33);Jqe[1369]=-19;Knb(Jqe,1370,1377,33);Knb(Jqe,1377,1415,-19);Knb(Jqe,1415,1425,33);Knb(Jqe,1425,1442,-87);Jqe[1442]=33;Knb(Jqe,1443,1466,-87);Jqe[1466]=33;Knb(Jqe,1467,1470,-87);Jqe[1470]=33;Jqe[1471]=-87;Jqe[1472]=33;Knb(Jqe,1473,1475,-87);Jqe[1475]=33;Jqe[1476]=-87;Knb(Jqe,1477,1488,33);Knb(Jqe,1488,1515,-19);Knb(Jqe,1515,1520,33);Knb(Jqe,1520,1523,-19);Knb(Jqe,1523,1569,33);Knb(Jqe,1569,1595,-19);Knb(Jqe,1595,1600,33);Jqe[1600]=-87;Knb(Jqe,1601,1611,-19);Knb(Jqe,1611,1619,-87);Knb(Jqe,1619,1632,33);Knb(Jqe,1632,1642,-87);Knb(Jqe,1642,1648,33);Jqe[1648]=-87;Knb(Jqe,1649,1720,-19);Knb(Jqe,1720,1722,33);Knb(Jqe,1722,1727,-19);Jqe[1727]=33;Knb(Jqe,1728,1743,-19);Jqe[1743]=33;Knb(Jqe,1744,1748,-19);Jqe[1748]=33;Jqe[1749]=-19;Knb(Jqe,1750,1765,-87);Knb(Jqe,1765,1767,-19);Knb(Jqe,1767,1769,-87);Jqe[1769]=33;Knb(Jqe,1770,1774,-87);Knb(Jqe,1774,1776,33);Knb(Jqe,1776,1786,-87);Knb(Jqe,1786,2305,33);Knb(Jqe,2305,2308,-87);Jqe[2308]=33;Knb(Jqe,2309,2362,-19);Knb(Jqe,2362,2364,33);Jqe[2364]=-87;Jqe[2365]=-19;Knb(Jqe,2366,2382,-87);Knb(Jqe,2382,2385,33);Knb(Jqe,2385,2389,-87);Knb(Jqe,2389,2392,33);Knb(Jqe,2392,2402,-19);Knb(Jqe,2402,2404,-87);Knb(Jqe,2404,2406,33);Knb(Jqe,2406,2416,-87);Knb(Jqe,2416,2433,33);Knb(Jqe,2433,2436,-87);Jqe[2436]=33;Knb(Jqe,2437,2445,-19);Knb(Jqe,2445,2447,33);Knb(Jqe,2447,2449,-19);Knb(Jqe,2449,2451,33);Knb(Jqe,2451,2473,-19);Jqe[2473]=33;Knb(Jqe,2474,2481,-19);Jqe[2481]=33;Jqe[2482]=-19;Knb(Jqe,2483,2486,33);Knb(Jqe,2486,2490,-19);Knb(Jqe,2490,2492,33);Jqe[2492]=-87;Jqe[2493]=33;Knb(Jqe,2494,2501,-87);Knb(Jqe,2501,2503,33);Knb(Jqe,2503,2505,-87);Knb(Jqe,2505,2507,33);Knb(Jqe,2507,2510,-87);Knb(Jqe,2510,2519,33);Jqe[2519]=-87;Knb(Jqe,2520,2524,33);Knb(Jqe,2524,2526,-19);Jqe[2526]=33;Knb(Jqe,2527,2530,-19);Knb(Jqe,2530,2532,-87);Knb(Jqe,2532,2534,33);Knb(Jqe,2534,2544,-87);Knb(Jqe,2544,2546,-19);Knb(Jqe,2546,2562,33);Jqe[2562]=-87;Knb(Jqe,2563,2565,33);Knb(Jqe,2565,2571,-19);Knb(Jqe,2571,2575,33);Knb(Jqe,2575,2577,-19);Knb(Jqe,2577,2579,33);Knb(Jqe,2579,2601,-19);Jqe[2601]=33;Knb(Jqe,2602,2609,-19);Jqe[2609]=33;Knb(Jqe,2610,2612,-19);Jqe[2612]=33;Knb(Jqe,2613,2615,-19);Jqe[2615]=33;Knb(Jqe,2616,2618,-19);Knb(Jqe,2618,2620,33);Jqe[2620]=-87;Jqe[2621]=33;Knb(Jqe,2622,2627,-87);Knb(Jqe,2627,2631,33);Knb(Jqe,2631,2633,-87);Knb(Jqe,2633,2635,33);Knb(Jqe,2635,2638,-87);Knb(Jqe,2638,2649,33);Knb(Jqe,2649,2653,-19);Jqe[2653]=33;Jqe[2654]=-19;Knb(Jqe,2655,2662,33);Knb(Jqe,2662,2674,-87);Knb(Jqe,2674,2677,-19);Knb(Jqe,2677,2689,33);Knb(Jqe,2689,2692,-87);Jqe[2692]=33;Knb(Jqe,2693,2700,-19);Jqe[2700]=33;Jqe[2701]=-19;Jqe[2702]=33;Knb(Jqe,2703,2706,-19);Jqe[2706]=33;Knb(Jqe,2707,2729,-19);Jqe[2729]=33;Knb(Jqe,2730,2737,-19);Jqe[2737]=33;Knb(Jqe,2738,2740,-19);Jqe[2740]=33;Knb(Jqe,2741,2746,-19);Knb(Jqe,2746,2748,33);Jqe[2748]=-87;Jqe[2749]=-19;Knb(Jqe,2750,2758,-87);Jqe[2758]=33;Knb(Jqe,2759,2762,-87);Jqe[2762]=33;Knb(Jqe,2763,2766,-87);Knb(Jqe,2766,2784,33);Jqe[2784]=-19;Knb(Jqe,2785,2790,33);Knb(Jqe,2790,2800,-87);Knb(Jqe,2800,2817,33);Knb(Jqe,2817,2820,-87);Jqe[2820]=33;Knb(Jqe,2821,2829,-19);Knb(Jqe,2829,2831,33);Knb(Jqe,2831,2833,-19);Knb(Jqe,2833,2835,33);Knb(Jqe,2835,2857,-19);Jqe[2857]=33;Knb(Jqe,2858,2865,-19);Jqe[2865]=33;Knb(Jqe,2866,2868,-19);Knb(Jqe,2868,2870,33);Knb(Jqe,2870,2874,-19);Knb(Jqe,2874,2876,33);Jqe[2876]=-87;Jqe[2877]=-19;Knb(Jqe,2878,2884,-87);Knb(Jqe,2884,2887,33);Knb(Jqe,2887,2889,-87);Knb(Jqe,2889,2891,33);Knb(Jqe,2891,2894,-87);Knb(Jqe,2894,2902,33);Knb(Jqe,2902,2904,-87);Knb(Jqe,2904,2908,33);Knb(Jqe,2908,2910,-19);Jqe[2910]=33;Knb(Jqe,2911,2914,-19);Knb(Jqe,2914,2918,33);Knb(Jqe,2918,2928,-87);Knb(Jqe,2928,2946,33);Knb(Jqe,2946,2948,-87);Jqe[2948]=33;Knb(Jqe,2949,2955,-19);Knb(Jqe,2955,2958,33);Knb(Jqe,2958,2961,-19);Jqe[2961]=33;Knb(Jqe,2962,2966,-19);Knb(Jqe,2966,2969,33);Knb(Jqe,2969,2971,-19);Jqe[2971]=33;Jqe[2972]=-19;Jqe[2973]=33;Knb(Jqe,2974,2976,-19);Knb(Jqe,2976,2979,33);Knb(Jqe,2979,2981,-19);Knb(Jqe,2981,2984,33);Knb(Jqe,2984,2987,-19);Knb(Jqe,2987,2990,33);Knb(Jqe,2990,2998,-19);Jqe[2998]=33;Knb(Jqe,2999,3002,-19);Knb(Jqe,3002,3006,33);Knb(Jqe,3006,3011,-87);Knb(Jqe,3011,3014,33);Knb(Jqe,3014,3017,-87);Jqe[3017]=33;Knb(Jqe,3018,3022,-87);Knb(Jqe,3022,3031,33);Jqe[3031]=-87;Knb(Jqe,3032,3047,33);Knb(Jqe,3047,3056,-87);Knb(Jqe,3056,3073,33);Knb(Jqe,3073,3076,-87);Jqe[3076]=33;Knb(Jqe,3077,3085,-19);Jqe[3085]=33;Knb(Jqe,3086,3089,-19);Jqe[3089]=33;Knb(Jqe,3090,3113,-19);Jqe[3113]=33;Knb(Jqe,3114,3124,-19);Jqe[3124]=33;Knb(Jqe,3125,3130,-19);Knb(Jqe,3130,3134,33);Knb(Jqe,3134,3141,-87);Jqe[3141]=33;Knb(Jqe,3142,3145,-87);Jqe[3145]=33;Knb(Jqe,3146,3150,-87);Knb(Jqe,3150,3157,33);Knb(Jqe,3157,3159,-87);Knb(Jqe,3159,3168,33);Knb(Jqe,3168,3170,-19);Knb(Jqe,3170,3174,33);Knb(Jqe,3174,3184,-87);Knb(Jqe,3184,3202,33);Knb(Jqe,3202,3204,-87);Jqe[3204]=33;Knb(Jqe,3205,3213,-19);Jqe[3213]=33;Knb(Jqe,3214,3217,-19);Jqe[3217]=33;Knb(Jqe,3218,3241,-19);Jqe[3241]=33;Knb(Jqe,3242,3252,-19);Jqe[3252]=33;Knb(Jqe,3253,3258,-19);Knb(Jqe,3258,3262,33);Knb(Jqe,3262,3269,-87);Jqe[3269]=33;Knb(Jqe,3270,3273,-87);Jqe[3273]=33;Knb(Jqe,3274,3278,-87);Knb(Jqe,3278,3285,33);Knb(Jqe,3285,3287,-87);Knb(Jqe,3287,3294,33);Jqe[3294]=-19;Jqe[3295]=33;Knb(Jqe,3296,3298,-19);Knb(Jqe,3298,3302,33);Knb(Jqe,3302,3312,-87);Knb(Jqe,3312,3330,33);Knb(Jqe,3330,3332,-87);Jqe[3332]=33;Knb(Jqe,3333,3341,-19);Jqe[3341]=33;Knb(Jqe,3342,3345,-19);Jqe[3345]=33;Knb(Jqe,3346,3369,-19);Jqe[3369]=33;Knb(Jqe,3370,3386,-19);Knb(Jqe,3386,3390,33);Knb(Jqe,3390,3396,-87);Knb(Jqe,3396,3398,33);Knb(Jqe,3398,3401,-87);Jqe[3401]=33;Knb(Jqe,3402,3406,-87);Knb(Jqe,3406,3415,33);Jqe[3415]=-87;Knb(Jqe,3416,3424,33);Knb(Jqe,3424,3426,-19);Knb(Jqe,3426,3430,33);Knb(Jqe,3430,3440,-87);Knb(Jqe,3440,3585,33);Knb(Jqe,3585,3631,-19);Jqe[3631]=33;Jqe[3632]=-19;Jqe[3633]=-87;Knb(Jqe,3634,3636,-19);Knb(Jqe,3636,3643,-87);Knb(Jqe,3643,3648,33);Knb(Jqe,3648,3654,-19);Knb(Jqe,3654,3663,-87);Jqe[3663]=33;Knb(Jqe,3664,3674,-87);Knb(Jqe,3674,3713,33);Knb(Jqe,3713,3715,-19);Jqe[3715]=33;Jqe[3716]=-19;Knb(Jqe,3717,3719,33);Knb(Jqe,3719,3721,-19);Jqe[3721]=33;Jqe[3722]=-19;Knb(Jqe,3723,3725,33);Jqe[3725]=-19;Knb(Jqe,3726,3732,33);Knb(Jqe,3732,3736,-19);Jqe[3736]=33;Knb(Jqe,3737,3744,-19);Jqe[3744]=33;Knb(Jqe,3745,3748,-19);Jqe[3748]=33;Jqe[3749]=-19;Jqe[3750]=33;Jqe[3751]=-19;Knb(Jqe,3752,3754,33);Knb(Jqe,3754,3756,-19);Jqe[3756]=33;Knb(Jqe,3757,3759,-19);Jqe[3759]=33;Jqe[3760]=-19;Jqe[3761]=-87;Knb(Jqe,3762,3764,-19);Knb(Jqe,3764,3770,-87);Jqe[3770]=33;Knb(Jqe,3771,3773,-87);Jqe[3773]=-19;Knb(Jqe,3774,3776,33);Knb(Jqe,3776,3781,-19);Jqe[3781]=33;Jqe[3782]=-87;Jqe[3783]=33;Knb(Jqe,3784,3790,-87);Knb(Jqe,3790,3792,33);Knb(Jqe,3792,3802,-87);Knb(Jqe,3802,3864,33);Knb(Jqe,3864,3866,-87);Knb(Jqe,3866,3872,33);Knb(Jqe,3872,3882,-87);Knb(Jqe,3882,3893,33);Jqe[3893]=-87;Jqe[3894]=33;Jqe[3895]=-87;Jqe[3896]=33;Jqe[3897]=-87;Knb(Jqe,3898,3902,33);Knb(Jqe,3902,3904,-87);Knb(Jqe,3904,3912,-19);Jqe[3912]=33;Knb(Jqe,3913,3946,-19);Knb(Jqe,3946,3953,33);Knb(Jqe,3953,3973,-87);Jqe[3973]=33;Knb(Jqe,3974,3980,-87);Knb(Jqe,3980,3984,33);Knb(Jqe,3984,3990,-87);Jqe[3990]=33;Jqe[3991]=-87;Jqe[3992]=33;Knb(Jqe,3993,4014,-87);Knb(Jqe,4014,4017,33);Knb(Jqe,4017,4024,-87);Jqe[4024]=33;Jqe[4025]=-87;Knb(Jqe,4026,4256,33);Knb(Jqe,4256,4294,-19);Knb(Jqe,4294,4304,33);Knb(Jqe,4304,4343,-19);Knb(Jqe,4343,4352,33);Jqe[4352]=-19;Jqe[4353]=33;Knb(Jqe,4354,4356,-19);Jqe[4356]=33;Knb(Jqe,4357,4360,-19);Jqe[4360]=33;Jqe[4361]=-19;Jqe[4362]=33;Knb(Jqe,4363,4365,-19);Jqe[4365]=33;Knb(Jqe,4366,4371,-19);Knb(Jqe,4371,4412,33);Jqe[4412]=-19;Jqe[4413]=33;Jqe[4414]=-19;Jqe[4415]=33;Jqe[4416]=-19;Knb(Jqe,4417,4428,33);Jqe[4428]=-19;Jqe[4429]=33;Jqe[4430]=-19;Jqe[4431]=33;Jqe[4432]=-19;Knb(Jqe,4433,4436,33);Knb(Jqe,4436,4438,-19);Knb(Jqe,4438,4441,33);Jqe[4441]=-19;Knb(Jqe,4442,4447,33);Knb(Jqe,4447,4450,-19);Jqe[4450]=33;Jqe[4451]=-19;Jqe[4452]=33;Jqe[4453]=-19;Jqe[4454]=33;Jqe[4455]=-19;Jqe[4456]=33;Jqe[4457]=-19;Knb(Jqe,4458,4461,33);Knb(Jqe,4461,4463,-19);Knb(Jqe,4463,4466,33);Knb(Jqe,4466,4468,-19);Jqe[4468]=33;Jqe[4469]=-19;Knb(Jqe,4470,4510,33);Jqe[4510]=-19;Knb(Jqe,4511,4520,33);Jqe[4520]=-19;Knb(Jqe,4521,4523,33);Jqe[4523]=-19;Knb(Jqe,4524,4526,33);Knb(Jqe,4526,4528,-19);Knb(Jqe,4528,4535,33);Knb(Jqe,4535,4537,-19);Jqe[4537]=33;Jqe[4538]=-19;Jqe[4539]=33;Knb(Jqe,4540,4547,-19);Knb(Jqe,4547,4587,33);Jqe[4587]=-19;Knb(Jqe,4588,4592,33);Jqe[4592]=-19;Knb(Jqe,4593,4601,33);Jqe[4601]=-19;Knb(Jqe,4602,7680,33);Knb(Jqe,7680,7836,-19);Knb(Jqe,7836,7840,33);Knb(Jqe,7840,7930,-19);Knb(Jqe,7930,7936,33);Knb(Jqe,7936,7958,-19);Knb(Jqe,7958,7960,33);Knb(Jqe,7960,7966,-19);Knb(Jqe,7966,7968,33);Knb(Jqe,7968,8006,-19);Knb(Jqe,8006,8008,33);Knb(Jqe,8008,8014,-19);Knb(Jqe,8014,8016,33);Knb(Jqe,8016,8024,-19);Jqe[8024]=33;Jqe[8025]=-19;Jqe[8026]=33;Jqe[8027]=-19;Jqe[8028]=33;Jqe[8029]=-19;Jqe[8030]=33;Knb(Jqe,8031,8062,-19);Knb(Jqe,8062,8064,33);Knb(Jqe,8064,8117,-19);Jqe[8117]=33;Knb(Jqe,8118,8125,-19);Jqe[8125]=33;Jqe[8126]=-19;Knb(Jqe,8127,8130,33);Knb(Jqe,8130,8133,-19);Jqe[8133]=33;Knb(Jqe,8134,8141,-19);Knb(Jqe,8141,8144,33);Knb(Jqe,8144,8148,-19);Knb(Jqe,8148,8150,33);Knb(Jqe,8150,8156,-19);Knb(Jqe,8156,8160,33);Knb(Jqe,8160,8173,-19);Knb(Jqe,8173,8178,33);Knb(Jqe,8178,8181,-19);Jqe[8181]=33;Knb(Jqe,8182,8189,-19);Knb(Jqe,8189,8400,33);Knb(Jqe,8400,8413,-87);Knb(Jqe,8413,8417,33);Jqe[8417]=-87;Knb(Jqe,8418,8486,33);Jqe[8486]=-19;Knb(Jqe,8487,8490,33);Knb(Jqe,8490,8492,-19);Knb(Jqe,8492,8494,33);Jqe[8494]=-19;Knb(Jqe,8495,8576,33);Knb(Jqe,8576,8579,-19);Knb(Jqe,8579,12293,33);Jqe[12293]=-87;Jqe[12294]=33;Jqe[12295]=-19;Knb(Jqe,12296,12321,33);Knb(Jqe,12321,12330,-19);Knb(Jqe,12330,12336,-87);Jqe[12336]=33;Knb(Jqe,12337,12342,-87);Knb(Jqe,12342,12353,33);Knb(Jqe,12353,12437,-19);Knb(Jqe,12437,12441,33);Knb(Jqe,12441,12443,-87);Knb(Jqe,12443,12445,33);Knb(Jqe,12445,12447,-87);Knb(Jqe,12447,12449,33);Knb(Jqe,12449,12539,-19);Jqe[12539]=33;Knb(Jqe,12540,12543,-87);Knb(Jqe,12543,12549,33);Knb(Jqe,12549,12589,-19);Knb(Jqe,12589,19968,33);Knb(Jqe,19968,40870,-19);Knb(Jqe,40870,44032,33);Knb(Jqe,44032,55204,-19);Knb(Jqe,55204,uxe,33);Knb(Jqe,57344,65534,33)} +function Zae(a){var b,c,d,e,f,g,h;if(a.hb)return;a.hb=true;PAd(a,'ecore');CBd(a,'ecore');DBd(a,AKe);eBd(a.fb,'E');eBd(a.L,'T');eBd(a.P,'K');eBd(a.P,'V');eBd(a.cb,'E');WGd(zYd(a.b),a.bb);WGd(zYd(a.a),a.Q);WGd(zYd(a.o),a.p);WGd(zYd(a.p),a.R);WGd(zYd(a.q),a.p);WGd(zYd(a.v),a.q);WGd(zYd(a.w),a.R);WGd(zYd(a.B),a.Q);WGd(zYd(a.R),a.Q);WGd(zYd(a.T),a.eb);WGd(zYd(a.U),a.R);WGd(zYd(a.V),a.eb);WGd(zYd(a.W),a.bb);WGd(zYd(a.bb),a.eb);WGd(zYd(a.eb),a.R);WGd(zYd(a.db),a.R);vBd(a.b,g7,RJe,false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.e,'iD',null,0,1,g7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.b),1),19),a.q,null,'eAttributeType',1,1,g7,true,true,false,false,true,false,true);vBd(a.a,f7,OJe,false,false,true);tBd(RD(QHd(xYd(a.a),0),35),a._,bIe,null,0,1,f7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.a),1),19),a.ab,null,'details',0,-1,f7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.a),2),19),a.Q,RD(QHd(xYd(a.Q),0),19),'eModelElement',0,1,f7,true,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.a),3),19),a.S,null,'contents',0,-1,f7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.a),4),19),a.S,null,'references',0,-1,f7,false,false,true,false,true,false,false);vBd(a.o,h7,'EClass',false,false,true);tBd(RD(QHd(xYd(a.o),0),35),a.e,'abstract',null,0,1,h7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.o),1),35),a.e,'interface',null,0,1,h7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.o),2),19),a.o,null,'eSuperTypes',0,-1,h7,false,false,true,false,true,true,false);zBd(RD(QHd(xYd(a.o),3),19),a.T,RD(QHd(xYd(a.T),0),19),'eOperations',0,-1,h7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.o),4),19),a.b,null,'eAllAttributes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),5),19),a.W,null,'eAllReferences',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),6),19),a.W,null,'eReferences',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),7),19),a.b,null,'eAttributes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),8),19),a.W,null,'eAllContainments',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),9),19),a.T,null,'eAllOperations',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),10),19),a.bb,null,'eAllStructuralFeatures',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),11),19),a.o,null,'eAllSuperTypes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),12),19),a.b,null,'eIDAttribute',0,1,h7,true,true,false,false,false,false,true);zBd(RD(QHd(xYd(a.o),13),19),a.bb,RD(QHd(xYd(a.bb),7),19),'eStructuralFeatures',0,-1,h7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.o),14),19),a.H,null,'eGenericSuperTypes',0,-1,h7,false,false,true,true,false,true,false);zBd(RD(QHd(xYd(a.o),15),19),a.H,null,'eAllGenericSuperTypes',0,-1,h7,true,true,false,false,true,false,true);h=yBd(RD(QHd(uYd(a.o),0),62),a.e,'isSuperTypeOf');cBd(h,a.o,'someClass');yBd(RD(QHd(uYd(a.o),1),62),a.I,'getFeatureCount');h=yBd(RD(QHd(uYd(a.o),2),62),a.bb,EKe);cBd(h,a.I,'featureID');h=yBd(RD(QHd(uYd(a.o),3),62),a.I,FKe);cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.o),4),62),a.bb,EKe);cBd(h,a._,'featureName');yBd(RD(QHd(uYd(a.o),5),62),a.I,'getOperationCount');h=yBd(RD(QHd(uYd(a.o),6),62),a.T,'getEOperation');cBd(h,a.I,'operationID');h=yBd(RD(QHd(uYd(a.o),7),62),a.I,HKe);cBd(h,a.T,IKe);h=yBd(RD(QHd(uYd(a.o),8),62),a.T,'getOverride');cBd(h,a.T,IKe);h=yBd(RD(QHd(uYd(a.o),9),62),a.H,'getFeatureType');cBd(h,a.bb,GKe);vBd(a.p,i7,SJe,true,false,true);tBd(RD(QHd(xYd(a.p),0),35),a._,'instanceClassName',null,0,1,i7,false,true,true,true,true,false);b=lBd(a.L);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);uBd(RD(QHd(xYd(a.p),1),35),b,'instanceClass',i7,true,true,false,true);tBd(RD(QHd(xYd(a.p),2),35),a.M,JKe,null,0,1,i7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.p),3),35),a._,'instanceTypeName',null,0,1,i7,false,true,true,true,true,false);zBd(RD(QHd(xYd(a.p),4),19),a.U,RD(QHd(xYd(a.U),3),19),'ePackage',0,1,i7,true,false,false,false,true,false,false);zBd(RD(QHd(xYd(a.p),5),19),a.db,null,KKe,0,-1,i7,false,false,true,true,true,false,false);h=yBd(RD(QHd(uYd(a.p),0),62),a.e,LKe);cBd(h,a.M,gve);yBd(RD(QHd(uYd(a.p),1),62),a.I,'getClassifierID');vBd(a.q,k7,'EDataType',false,false,true);tBd(RD(QHd(xYd(a.q),0),35),a.e,'serializable',FGe,0,1,k7,false,false,true,false,true,false);vBd(a.v,m7,'EEnum',false,false,true);zBd(RD(QHd(xYd(a.v),0),19),a.w,RD(QHd(xYd(a.w),3),19),'eLiterals',0,-1,m7,false,false,true,true,false,false,false);h=yBd(RD(QHd(uYd(a.v),0),62),a.w,MKe);cBd(h,a._,GIe);h=yBd(RD(QHd(uYd(a.v),1),62),a.w,MKe);cBd(h,a.I,aIe);h=yBd(RD(QHd(uYd(a.v),2),62),a.w,'getEEnumLiteralByLiteral');cBd(h,a._,'literal');vBd(a.w,l7,TJe,false,false,true);tBd(RD(QHd(xYd(a.w),0),35),a.I,aIe,null,0,1,l7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.w),1),35),a.A,'instance',null,0,1,l7,true,false,true,false,true,false);tBd(RD(QHd(xYd(a.w),2),35),a._,'literal',null,0,1,l7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.w),3),19),a.v,RD(QHd(xYd(a.v),0),19),'eEnum',0,1,l7,true,false,false,false,false,false,false);vBd(a.B,n7,'EFactory',false,false,true);zBd(RD(QHd(xYd(a.B),0),19),a.U,RD(QHd(xYd(a.U),2),19),'ePackage',1,1,n7,true,false,true,false,false,false,false);h=yBd(RD(QHd(uYd(a.B),0),62),a.S,'create');cBd(h,a.o,'eClass');h=yBd(RD(QHd(uYd(a.B),1),62),a.M,'createFromString');cBd(h,a.q,'eDataType');cBd(h,a._,'literalValue');h=yBd(RD(QHd(uYd(a.B),2),62),a._,'convertToString');cBd(h,a.q,'eDataType');cBd(h,a.M,'instanceValue');vBd(a.Q,p7,DHe,true,false,true);zBd(RD(QHd(xYd(a.Q),0),19),a.a,RD(QHd(xYd(a.a),2),19),'eAnnotations',0,-1,p7,false,false,true,true,false,false,false);h=yBd(RD(QHd(uYd(a.Q),0),62),a.a,'getEAnnotation');cBd(h,a._,bIe);vBd(a.R,q7,EHe,true,false,true);tBd(RD(QHd(xYd(a.R),0),35),a._,GIe,null,0,1,q7,false,false,true,false,true,false);vBd(a.S,r7,'EObject',false,false,true);yBd(RD(QHd(uYd(a.S),0),62),a.o,'eClass');yBd(RD(QHd(uYd(a.S),1),62),a.e,'eIsProxy');yBd(RD(QHd(uYd(a.S),2),62),a.X,'eResource');yBd(RD(QHd(uYd(a.S),3),62),a.S,'eContainer');yBd(RD(QHd(uYd(a.S),4),62),a.bb,'eContainingFeature');yBd(RD(QHd(uYd(a.S),5),62),a.W,'eContainmentFeature');h=yBd(RD(QHd(uYd(a.S),6),62),null,'eContents');b=lBd(a.fb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);e=XVd(h,b,null);!!e&&e.oj();h=yBd(RD(QHd(uYd(a.S),7),62),null,'eAllContents');b=lBd(a.cb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);f=XVd(h,b,null);!!f&&f.oj();h=yBd(RD(QHd(uYd(a.S),8),62),null,'eCrossReferences');b=lBd(a.fb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);g=XVd(h,b,null);!!g&&g.oj();h=yBd(RD(QHd(uYd(a.S),9),62),a.M,'eGet');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),10),62),a.M,'eGet');cBd(h,a.bb,GKe);cBd(h,a.e,'resolve');h=yBd(RD(QHd(uYd(a.S),11),62),null,'eSet');cBd(h,a.bb,GKe);cBd(h,a.M,'newValue');h=yBd(RD(QHd(uYd(a.S),12),62),a.e,'eIsSet');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),13),62),null,'eUnset');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),14),62),a.M,'eInvoke');cBd(h,a.T,IKe);b=lBd(a.fb);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);dBd(h,b,'arguments');aBd(h,a.K);vBd(a.T,s7,VJe,false,false,true);zBd(RD(QHd(xYd(a.T),0),19),a.o,RD(QHd(xYd(a.o),3),19),NKe,0,1,s7,true,false,false,false,false,false,false);zBd(RD(QHd(xYd(a.T),1),19),a.db,null,KKe,0,-1,s7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.T),2),19),a.V,RD(QHd(xYd(a.V),0),19),'eParameters',0,-1,s7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.T),3),19),a.p,null,'eExceptions',0,-1,s7,false,false,true,false,true,true,false);zBd(RD(QHd(xYd(a.T),4),19),a.H,null,'eGenericExceptions',0,-1,s7,false,false,true,true,false,true,false);yBd(RD(QHd(uYd(a.T),0),62),a.I,HKe);h=yBd(RD(QHd(uYd(a.T),1),62),a.e,'isOverrideOf');cBd(h,a.T,'someOperation');vBd(a.U,t7,'EPackage',false,false,true);tBd(RD(QHd(xYd(a.U),0),35),a._,'nsURI',null,0,1,t7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.U),1),35),a._,'nsPrefix',null,0,1,t7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.U),2),19),a.B,RD(QHd(xYd(a.B),0),19),'eFactoryInstance',1,1,t7,true,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.U),3),19),a.p,RD(QHd(xYd(a.p),4),19),'eClassifiers',0,-1,t7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.U),4),19),a.U,RD(QHd(xYd(a.U),5),19),'eSubpackages',0,-1,t7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.U),5),19),a.U,RD(QHd(xYd(a.U),4),19),'eSuperPackage',0,1,t7,true,false,false,false,true,false,false);h=yBd(RD(QHd(uYd(a.U),0),62),a.p,'getEClassifier');cBd(h,a._,GIe);vBd(a.V,u7,WJe,false,false,true);zBd(RD(QHd(xYd(a.V),0),19),a.T,RD(QHd(xYd(a.T),2),19),'eOperation',0,1,u7,true,false,false,false,false,false,false);vBd(a.W,v7,XJe,false,false,true);tBd(RD(QHd(xYd(a.W),0),35),a.e,'containment',null,0,1,v7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.W),1),35),a.e,'container',null,0,1,v7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.W),2),35),a.e,'resolveProxies',FGe,0,1,v7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.W),3),19),a.W,null,'eOpposite',0,1,v7,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.W),4),19),a.o,null,'eReferenceType',1,1,v7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.W),5),19),a.b,null,'eKeys',0,-1,v7,false,false,true,false,true,false,false);vBd(a.bb,y7,QJe,true,false,true);tBd(RD(QHd(xYd(a.bb),0),35),a.e,'changeable',FGe,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),1),35),a.e,'volatile',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),2),35),a.e,'transient',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),3),35),a._,'defaultValueLiteral',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),4),35),a.M,JKe,null,0,1,y7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.bb),5),35),a.e,'unsettable',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),6),35),a.e,'derived',null,0,1,y7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.bb),7),19),a.o,RD(QHd(xYd(a.o),13),19),NKe,0,1,y7,true,false,false,false,false,false,false);yBd(RD(QHd(uYd(a.bb),0),62),a.I,FKe);h=yBd(RD(QHd(uYd(a.bb),1),62),null,'getContainerClass');b=lBd(a.L);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);d=XVd(h,b,null);!!d&&d.oj();vBd(a.eb,A7,PJe,true,false,true);tBd(RD(QHd(xYd(a.eb),0),35),a.e,'ordered',FGe,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),1),35),a.e,'unique',FGe,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),2),35),a.I,'lowerBound',null,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),3),35),a.I,'upperBound','1',0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),4),35),a.e,'many',null,0,1,A7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.eb),5),35),a.e,'required',null,0,1,A7,true,true,false,false,true,true);zBd(RD(QHd(xYd(a.eb),6),19),a.p,null,'eType',0,1,A7,false,true,true,false,true,true,false);zBd(RD(QHd(xYd(a.eb),7),19),a.H,null,'eGenericType',0,1,A7,false,true,true,true,false,true,false);vBd(a.ab,UK,'EStringToStringMapEntry',false,false,false);tBd(RD(QHd(xYd(a.ab),0),35),a._,'key',null,0,1,UK,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.ab),1),35),a._,aIe,null,0,1,UK,false,false,true,false,true,false);vBd(a.H,o7,UJe,false,false,true);zBd(RD(QHd(xYd(a.H),0),19),a.H,null,'eUpperBound',0,1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),1),19),a.H,null,'eTypeArguments',0,-1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),2),19),a.p,null,'eRawType',1,1,o7,true,false,false,false,true,false,true);zBd(RD(QHd(xYd(a.H),3),19),a.H,null,'eLowerBound',0,1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),4),19),a.db,null,'eTypeParameter',0,1,o7,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.H),5),19),a.p,null,'eClassifier',0,1,o7,false,false,true,false,true,false,false);h=yBd(RD(QHd(uYd(a.H),0),62),a.e,LKe);cBd(h,a.M,gve);vBd(a.db,z7,YJe,false,false,true);zBd(RD(QHd(xYd(a.db),0),19),a.H,null,'eBounds',0,-1,z7,false,false,true,true,false,false,false);xBd(a.c,tJ,'EBigDecimal',true);xBd(a.d,uJ,'EBigInteger',true);xBd(a.e,xdb,'EBoolean',true);xBd(a.f,QI,'EBooleanObject',true);xBd(a.i,gE,'EByte',true);xBd(a.g,WC(gE,1),'EByteArray',true);xBd(a.j,RI,'EByteObject',true);xBd(a.k,hE,'EChar',true);xBd(a.n,SI,'ECharacterObject',true);xBd(a.r,qK,'EDate',true);xBd(a.s,T6,'EDiagnosticChain',false);xBd(a.t,iE,'EDouble',true);xBd(a.u,VI,'EDoubleObject',true);xBd(a.fb,Y6,'EEList',false);xBd(a.A,Z6,'EEnumerator',false);xBd(a.C,Tbb,'EFeatureMap',false);xBd(a.D,Jbb,'EFeatureMapEntry',false);xBd(a.F,jE,'EFloat',true);xBd(a.G,ZI,'EFloatObject',true);xBd(a.I,kE,'EInt',true);xBd(a.J,bJ,'EIntegerObject',true);xBd(a.L,UI,'EJavaClass',true);xBd(a.M,jJ,'EJavaObject',true);xBd(a.N,lE,'ELong',true);xBd(a.O,eJ,'ELongObject',true);xBd(a.P,VK,'EMap',false);xBd(a.X,Aab,'EResource',false);xBd(a.Y,zab,'EResourceSet',false);xBd(a.Z,wdb,'EShort',true);xBd(a.$,lJ,'EShortObject',true);xBd(a._,qJ,'EString',true);xBd(a.cb,a7,'ETreeIterator',false);xBd(a.K,$6,'EInvocationTargetException',false);pBd(a,AKe)} +var gve='object',hve='boolean',ive='number',jve='string',kve='function',lve=2147483647,mve='java.lang',nve={3:1},ove='com.google.common.base',pve=', ',qve='%s (%s) must not be negative',rve={3:1,4:1,5:1},sve='negative size: ',tve='no calls to next() since the last call to remove()',uve='Optional.of(',vve='null',wve={204:1,51:1},xve='com.google.common.collect',yve={204:1,51:1,128:1},zve={229:1,3:1},Ave={51:1},Bve='java.util',Cve={85:1},Dve={20:1,31:1,16:1},Eve=2063,Fve={20:1,31:1,16:1,21:1},Gve={85:1,139:1,133:1},Hve={20:1,31:1,16:1,21:1,87:1},Ive={20:1,31:1,16:1,277:1,21:1,87:1},Jve={51:1,128:1},Kve={358:1,44:1},Lve='AbstractMapEntry',Mve='expectedValuesPerKey',Nve={3:1,6:1,4:1,5:1},Ove=16384,Pve={159:1},Qve={41:1},Rve={202:1},Sve={l:4194303,m:4194303,h:524287},Tve={253:1,3:1,34:1},Uve='range unbounded on this side',Vve={20:1},Wve={20:1,16:1},Xve={3:1,20:1,31:1,16:1},Yve={306:1,3:1,20:1,31:1,16:1,15:1,59:1},Zve={3:1,4:1,5:1,173:1},$ve={3:1,85:1},_ve={20:1,16:1,21:1},awe={3:1,20:1,31:1,16:1,21:1},bwe={20:1,16:1,21:1,87:1},cwe=461845907,dwe=-862048943,ewe={3:1,6:1,4:1,5:1,173:1},fwe='expectedSize',gwe=1024,hwe=1073741824,iwe='initialArraySize',jwe={3:1,6:1,4:1,9:1,5:1},kwe={20:1,31:1,56:1,16:1,15:1},lwe='arraySize',mwe={20:1,31:1,56:1,16:1,15:1,59:1},nwe={46:1},owe={380:1},pwe=1.0E-4,qwe=-2147483648,rwe='__noinit__',swe={3:1,103:1,63:1,82:1},twe='com.google.gwt.core.client.impl',uwe='String',vwe='com.google.gwt.core.client',wwe='anonymous',xwe='fnStack',ywe='Unknown',zwe={201:1,3:1,4:1},Awe=1000,Bwe=65535,Cwe='January',Dwe='February',Ewe='March',Fwe='April',Gwe='May',Hwe='June',Iwe='July',Jwe='August',Kwe='September',Lwe='October',Mwe='November',Nwe='December',Owe=1900,Pwe={53:1,3:1,4:1},Qwe='Before Christ',Rwe='Anno Domini',Swe='Sunday',Twe='Monday',Uwe='Tuesday',Vwe='Wednesday',Wwe='Thursday',Xwe='Friday',Ywe='Saturday',Zwe='com.google.gwt.i18n.shared',$we='DateTimeFormat',_we='com.google.gwt.i18n.client',axe='DefaultDateTimeFormatInfo',bxe={3:1,4:1,34:1,206:1},cxe='com.google.gwt.json.client',dxe=4194303,exe=1048575,fxe=524288,gxe=4194304,hxe=17592186044416,ixe=1000000000,jxe=-17592186044416,kxe='java.io',lxe={3:1,103:1,77:1,63:1,82:1},mxe={3:1,295:1,82:1},nxe='For input string: "',oxe=Infinity,pxe=-Infinity,qxe=4096,rxe={3:1,4:1,376:1},sxe='org.eclipse.elk.layered',txe=65536,uxe=55296,vxe={109:1,3:1,4:1},wxe=100000,xxe=0.3010299956639812,yxe=4294967295,zxe='0.0',Axe={44:1},Bxe='Unable to add element to queue',Cxe={3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1},Dxe={3:1,20:1,31:1,56:1,16:1,15:1,59:1},Exe={20:1,16:1,15:1},Fxe={3:1,50:1},Gxe={189:1},Hxe={3:1,4:1,85:1},Ixe={3:1,4:1,20:1,31:1,16:1,49:1,21:1},Jxe='delete',Kxe=1.4901161193847656E-8,Lxe=1.1102230246251565E-16,Mxe=15525485,Nxe=5.9604644775390625E-8,Oxe=16777216,Pxe=16777215,Qxe=', length: ',Rxe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1},Sxe='subMap: ',Txe=' less than ',Uxe={3:1,34:1,22:1,303:1},Vxe='java.util.function',Wxe='java.util.logging',Xxe={3:1,4:1,5:1,856:1},Yxe='undefined',Zxe='java.util.stream',$xe={533:1,687:1},_xe='fromIndex: ',aye=' > toIndex: ',bye=', toIndex: ',cye='Index: ',dye=', Size: ',eye='org.eclipse.elk.alg.common',fye={50:1},gye='org.eclipse.elk.alg.common.compaction',hye='Scanline/EventHandler',iye='org.eclipse.elk.alg.common.compaction.oned',jye='CNode belongs to another CGroup.',kye='ISpacingsHandler/1',lye='The ',mye=' instance has been finished already.',nye='The direction ',oye=' is not supported by the CGraph instance.',pye='OneDimensionalCompactor',qye='OneDimensionalCompactor/lambda$0$Type',rye='Quadruplet',sye='ScanlineConstraintCalculator',tye='ScanlineConstraintCalculator/ConstraintsScanlineHandler',uye='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',vye='ScanlineConstraintCalculator/Timestamp',wye='ScanlineConstraintCalculator/lambda$0$Type',xye={178:1,46:1},yye='org.eclipse.elk.alg.common.compaction.options',zye='org.eclipse.elk.core.data',Aye='org.eclipse.elk.polyomino.traversalStrategy',Bye='org.eclipse.elk.polyomino.lowLevelSort',Cye='org.eclipse.elk.polyomino.highLevelSort',Dye='org.eclipse.elk.polyomino.fill',Eye={134:1},Fye='polyomino',Gye='org.eclipse.elk.alg.common.networksimplex',Hye={183:1,3:1,4:1},Iye='org.eclipse.elk.alg.common.nodespacing',Jye='org.eclipse.elk.alg.common.nodespacing.cellsystem',Kye='CENTER',Lye={217:1,336:1},Mye={3:1,4:1,5:1,603:1},Nye='LEFT',Oye='RIGHT',Pye='Vertical alignment cannot be null',Qye='BOTTOM',Rye='org.eclipse.elk.alg.common.nodespacing.internal',Sye='UNDEFINED',Tye=0.01,Uye='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',Vye='LabelPlacer/lambda$0$Type',Wye='LabelPlacer/lambda$1$Type',Xye='portRatioOrPosition',Yye='org.eclipse.elk.alg.common.overlaps',Zye='DOWN',$ye='org.eclipse.elk.alg.common.polyomino',_ye='NORTH',aze='EAST',bze='SOUTH',cze='WEST',dze='org.eclipse.elk.alg.common.polyomino.structures',eze='Direction',fze='Grid is only of size ',gze='. Requested point (',hze=') is out of bounds.',ize=' Given center based coordinates were (',jze='org.eclipse.elk.graph.properties',kze='IPropertyHolder',lze={3:1,96:1,137:1},mze='org.eclipse.elk.alg.common.spore',nze='org.eclipse.elk.alg.common.utils',oze={205:1},pze='org.eclipse.elk.core',qze='Connected Components Compaction',rze='org.eclipse.elk.alg.disco',sze='org.eclipse.elk.alg.disco.graph',tze='org.eclipse.elk.alg.disco.options',uze='CompactionStrategy',vze='org.eclipse.elk.disco.componentCompaction.strategy',wze='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',xze='org.eclipse.elk.disco.debug.discoGraph',yze='org.eclipse.elk.disco.debug.discoPolys',zze='componentCompaction',Aze='org.eclipse.elk.disco',Bze='org.eclipse.elk.spacing.componentComponent',Cze='org.eclipse.elk.edge.thickness',Dze='org.eclipse.elk.aspectRatio',Eze='org.eclipse.elk.padding',Fze='org.eclipse.elk.alg.disco.transform',Gze=1.5707963267948966,Hze=1.7976931348623157E308,Ize={3:1,4:1,5:1,198:1},Jze={3:1,6:1,4:1,5:1,100:1,115:1},Kze='org.eclipse.elk.alg.force',Lze='ComponentsProcessor',Mze='ComponentsProcessor/1',Nze='ElkGraphImporter/lambda$0$Type',Oze='org.eclipse.elk.alg.force.graph',Pze='Component Layout',Qze='org.eclipse.elk.alg.force.model',Rze='org.eclipse.elk.force.model',Sze='org.eclipse.elk.force.iterations',Tze='org.eclipse.elk.force.repulsivePower',Uze='org.eclipse.elk.force.temperature',Vze=0.001,Wze='org.eclipse.elk.force.repulsion',Xze='org.eclipse.elk.alg.force.options',Yze=1.600000023841858,Zze='org.eclipse.elk.force',$ze='org.eclipse.elk.priority',_ze='org.eclipse.elk.spacing.nodeNode',aAe='org.eclipse.elk.spacing.edgeLabel',bAe='org.eclipse.elk.randomSeed',cAe='org.eclipse.elk.separateConnectedComponents',dAe='org.eclipse.elk.interactive',eAe='org.eclipse.elk.portConstraints',fAe='org.eclipse.elk.edgeLabels.inline',gAe='org.eclipse.elk.omitNodeMicroLayout',hAe='org.eclipse.elk.nodeSize.fixedGraphSize',iAe='org.eclipse.elk.nodeSize.options',jAe='org.eclipse.elk.nodeSize.constraints',kAe='org.eclipse.elk.nodeLabels.placement',lAe='org.eclipse.elk.portLabels.placement',mAe='org.eclipse.elk.topdownLayout',nAe='org.eclipse.elk.topdown.scaleFactor',oAe='org.eclipse.elk.topdown.hierarchicalNodeWidth',pAe='org.eclipse.elk.topdown.hierarchicalNodeAspectRatio',qAe='org.eclipse.elk.topdown.nodeType',rAe='origin',sAe='random',tAe='boundingBox.upLeft',uAe='boundingBox.lowRight',vAe='org.eclipse.elk.stress.fixed',wAe='org.eclipse.elk.stress.desiredEdgeLength',xAe='org.eclipse.elk.stress.dimension',yAe='org.eclipse.elk.stress.epsilon',zAe='org.eclipse.elk.stress.iterationLimit',AAe='org.eclipse.elk.stress',BAe='ELK Stress',CAe='org.eclipse.elk.nodeSize.minimum',DAe='org.eclipse.elk.alg.force.stress',EAe='Layered layout',FAe='org.eclipse.elk.alg.layered',GAe='org.eclipse.elk.alg.layered.compaction.components',HAe='org.eclipse.elk.alg.layered.compaction.oned',IAe='org.eclipse.elk.alg.layered.compaction.oned.algs',JAe='org.eclipse.elk.alg.layered.compaction.recthull',KAe='org.eclipse.elk.alg.layered.components',LAe='NONE',MAe='MODEL_ORDER',NAe={3:1,6:1,4:1,9:1,5:1,126:1},OAe={3:1,6:1,4:1,5:1,150:1,100:1,115:1},PAe='org.eclipse.elk.alg.layered.compound',QAe={47:1},RAe='org.eclipse.elk.alg.layered.graph',SAe=' -> ',TAe='Not supported by LGraph',UAe='Port side is undefined',VAe={3:1,6:1,4:1,5:1,482:1,150:1,100:1,115:1},WAe={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},XAe={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},YAe='([{"\' \t\r\n',ZAe=')]}"\' \t\r\n',$Ae='The given string contains parts that cannot be parsed as numbers.',_Ae='org.eclipse.elk.core.math',aBe={3:1,4:1,140:1,214:1,423:1},bBe={3:1,4:1,107:1,214:1,423:1},cBe='org.eclipse.elk.alg.layered.graph.transform',dBe='ElkGraphImporter',eBe='ElkGraphImporter/lambda$1$Type',fBe='ElkGraphImporter/lambda$2$Type',gBe='ElkGraphImporter/lambda$4$Type',hBe='org.eclipse.elk.alg.layered.intermediate',iBe='Node margin calculation',jBe='ONE_SIDED_GREEDY_SWITCH',kBe='TWO_SIDED_GREEDY_SWITCH',lBe='No implementation is available for the layout processor ',mBe='IntermediateProcessorStrategy',nBe="Node '",oBe='FIRST_SEPARATE',pBe='LAST_SEPARATE',qBe='Odd port side processing',rBe='org.eclipse.elk.alg.layered.intermediate.compaction',sBe='org.eclipse.elk.alg.layered.intermediate.greedyswitch',tBe='org.eclipse.elk.alg.layered.p3order.counting',uBe={230:1},vBe='org.eclipse.elk.alg.layered.intermediate.loops',wBe='org.eclipse.elk.alg.layered.intermediate.loops.ordering',xBe='org.eclipse.elk.alg.layered.intermediate.loops.routing',yBe='org.eclipse.elk.alg.layered.intermediate.preserveorder',zBe='org.eclipse.elk.alg.layered.intermediate.wrapping',ABe='org.eclipse.elk.alg.layered.options',BBe='INTERACTIVE',CBe='GREEDY',DBe='DEPTH_FIRST',EBe='EDGE_LENGTH',FBe='SELF_LOOPS',GBe='firstTryWithInitialOrder',HBe='org.eclipse.elk.layered.directionCongruency',IBe='org.eclipse.elk.layered.feedbackEdges',JBe='org.eclipse.elk.layered.interactiveReferencePoint',KBe='org.eclipse.elk.layered.mergeEdges',LBe='org.eclipse.elk.layered.mergeHierarchyEdges',MBe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',NBe='org.eclipse.elk.layered.portSortingStrategy',OBe='org.eclipse.elk.layered.thoroughness',PBe='org.eclipse.elk.layered.unnecessaryBendpoints',QBe='org.eclipse.elk.layered.generatePositionAndLayerIds',RBe='org.eclipse.elk.layered.cycleBreaking.strategy',SBe='org.eclipse.elk.layered.layering.strategy',TBe='org.eclipse.elk.layered.layering.layerConstraint',UBe='org.eclipse.elk.layered.layering.layerChoiceConstraint',VBe='org.eclipse.elk.layered.layering.layerId',WBe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',XBe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',YBe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ZBe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',$Be='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',_Be='org.eclipse.elk.layered.crossingMinimization.strategy',aCe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',bCe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',cCe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',dCe='org.eclipse.elk.layered.crossingMinimization.inLayerPredOf',eCe='org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf',fCe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',gCe='org.eclipse.elk.layered.crossingMinimization.positionId',hCe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',iCe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',jCe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',kCe='org.eclipse.elk.layered.nodePlacement.strategy',lCe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',mCe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',nCe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',oCe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',pCe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',qCe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',rCe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',sCe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',tCe='org.eclipse.elk.layered.edgeRouting.splines.mode',uCe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',vCe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',wCe='org.eclipse.elk.layered.spacing.baseValue',xCe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',yCe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',zCe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',ACe='org.eclipse.elk.layered.priority.direction',BCe='org.eclipse.elk.layered.priority.shortness',CCe='org.eclipse.elk.layered.priority.straightness',DCe='org.eclipse.elk.layered.compaction.connectedComponents',ECe='org.eclipse.elk.layered.compaction.postCompaction.strategy',FCe='org.eclipse.elk.layered.compaction.postCompaction.constraints',GCe='org.eclipse.elk.layered.highDegreeNodes.treatment',HCe='org.eclipse.elk.layered.highDegreeNodes.threshold',ICe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',JCe='org.eclipse.elk.layered.wrapping.strategy',KCe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',LCe='org.eclipse.elk.layered.wrapping.correctionFactor',MCe='org.eclipse.elk.layered.wrapping.cutting.strategy',NCe='org.eclipse.elk.layered.wrapping.cutting.cuts',OCe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',PCe='org.eclipse.elk.layered.wrapping.validify.strategy',QCe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',RCe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',SCe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',TCe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',UCe='org.eclipse.elk.layered.edgeLabels.sideSelection',VCe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',WCe='org.eclipse.elk.layered.considerModelOrder.strategy',XCe='org.eclipse.elk.layered.considerModelOrder.portModelOrder',YCe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',ZCe='org.eclipse.elk.layered.considerModelOrder.components',$Ce='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',_Ce='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',aDe='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',bDe='layering',cDe='layering.minWidth',dDe='layering.nodePromotion',eDe='crossingMinimization',fDe='org.eclipse.elk.hierarchyHandling',gDe='crossingMinimization.greedySwitch',hDe='nodePlacement',iDe='nodePlacement.bk',jDe='edgeRouting',kDe='org.eclipse.elk.edgeRouting',lDe='spacing',mDe='priority',nDe='compaction',oDe='compaction.postCompaction',pDe='Specifies whether and how post-process compaction is applied.',qDe='highDegreeNodes',rDe='wrapping',sDe='wrapping.cutting',tDe='wrapping.validify',uDe='wrapping.multiEdge',vDe='edgeLabels',wDe='considerModelOrder',xDe='org.eclipse.elk.spacing.commentComment',yDe='org.eclipse.elk.spacing.commentNode',zDe='org.eclipse.elk.spacing.edgeEdge',ADe='org.eclipse.elk.spacing.edgeNode',BDe='org.eclipse.elk.spacing.labelLabel',CDe='org.eclipse.elk.spacing.labelPortHorizontal',DDe='org.eclipse.elk.spacing.labelPortVertical',EDe='org.eclipse.elk.spacing.labelNode',FDe='org.eclipse.elk.spacing.nodeSelfLoop',GDe='org.eclipse.elk.spacing.portPort',HDe='org.eclipse.elk.spacing.individual',IDe='org.eclipse.elk.port.borderOffset',JDe='org.eclipse.elk.noLayout',KDe='org.eclipse.elk.port.side',LDe='org.eclipse.elk.debugMode',MDe='org.eclipse.elk.alignment',NDe='org.eclipse.elk.insideSelfLoops.activate',ODe='org.eclipse.elk.insideSelfLoops.yo',PDe='org.eclipse.elk.direction',QDe='org.eclipse.elk.nodeLabels.padding',RDe='org.eclipse.elk.portLabels.nextToPortIfPossible',SDe='org.eclipse.elk.portLabels.treatAsGroup',TDe='org.eclipse.elk.portAlignment.default',UDe='org.eclipse.elk.portAlignment.north',VDe='org.eclipse.elk.portAlignment.south',WDe='org.eclipse.elk.portAlignment.west',XDe='org.eclipse.elk.portAlignment.east',YDe='org.eclipse.elk.contentAlignment',ZDe='org.eclipse.elk.junctionPoints',$De='org.eclipse.elk.edgeLabels.placement',_De='org.eclipse.elk.port.index',aEe='org.eclipse.elk.commentBox',bEe='org.eclipse.elk.hypernode',cEe='org.eclipse.elk.port.anchor',dEe='org.eclipse.elk.partitioning.activate',eEe='org.eclipse.elk.partitioning.partition',fEe='org.eclipse.elk.position',gEe='org.eclipse.elk.margins',hEe='org.eclipse.elk.spacing.portsSurrounding',iEe='org.eclipse.elk.interactiveLayout',jEe='org.eclipse.elk.core.util',kEe={3:1,4:1,5:1,601:1},lEe='NETWORK_SIMPLEX',mEe='SIMPLE',nEe={106:1,47:1},oEe='org.eclipse.elk.alg.layered.p1cycles',pEe='org.eclipse.elk.alg.layered.p2layers',qEe={413:1,230:1},rEe={846:1,3:1,4:1},sEe='org.eclipse.elk.alg.layered.p3order',tEe='org.eclipse.elk.alg.layered.p4nodes',uEe={3:1,4:1,5:1,854:1},vEe=1.0E-5,wEe='org.eclipse.elk.alg.layered.p4nodes.bk',xEe='org.eclipse.elk.alg.layered.p5edges',yEe='org.eclipse.elk.alg.layered.p5edges.orthogonal',zEe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',AEe=1.0E-6,BEe='org.eclipse.elk.alg.layered.p5edges.splines',CEe=0.09999999999999998,DEe=1.0E-8,EEe=4.71238898038469,FEe=3.141592653589793,GEe='org.eclipse.elk.alg.mrtree',HEe=0.10000000149011612,IEe='SUPER_ROOT',JEe='org.eclipse.elk.alg.mrtree.graph',KEe=-1.7976931348623157E308,LEe='org.eclipse.elk.alg.mrtree.intermediate',MEe='Processor compute fanout',NEe={3:1,6:1,4:1,5:1,534:1,100:1,115:1},OEe='Set neighbors in level',PEe='org.eclipse.elk.alg.mrtree.options',QEe='DESCENDANTS',REe='org.eclipse.elk.mrtree.compaction',SEe='org.eclipse.elk.mrtree.edgeEndTextureLength',TEe='org.eclipse.elk.mrtree.treeLevel',UEe='org.eclipse.elk.mrtree.positionConstraint',VEe='org.eclipse.elk.mrtree.weighting',WEe='org.eclipse.elk.mrtree.edgeRoutingMode',XEe='org.eclipse.elk.mrtree.searchOrder',YEe='Position Constraint',ZEe='org.eclipse.elk.mrtree',$Ee='org.eclipse.elk.tree',_Ee='Processor arrange level',aFe='org.eclipse.elk.alg.mrtree.p2order',bFe='org.eclipse.elk.alg.mrtree.p4route',cFe='org.eclipse.elk.alg.radial',dFe=6.283185307179586,eFe='Before',fFe=4.9E-324,gFe='After',hFe='org.eclipse.elk.alg.radial.intermediate',iFe='COMPACTION',jFe='org.eclipse.elk.alg.radial.intermediate.compaction',kFe={3:1,4:1,5:1,100:1},lFe='org.eclipse.elk.alg.radial.intermediate.optimization',mFe='No implementation is available for the layout option ',nFe='org.eclipse.elk.alg.radial.options',oFe='org.eclipse.elk.radial.centerOnRoot',pFe='org.eclipse.elk.radial.orderId',qFe='org.eclipse.elk.radial.radius',rFe='org.eclipse.elk.radial.rotate',sFe='org.eclipse.elk.radial.compactor',tFe='org.eclipse.elk.radial.compactionStepSize',uFe='org.eclipse.elk.radial.sorter',vFe='org.eclipse.elk.radial.wedgeCriteria',wFe='org.eclipse.elk.radial.optimizationCriteria',xFe='org.eclipse.elk.radial.rotation.targetAngle',yFe='org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace',zFe='org.eclipse.elk.radial.rotation.outgoingEdgeAngles',AFe='Compaction',BFe='rotation',CFe='org.eclipse.elk.radial',DFe='org.eclipse.elk.alg.radial.p1position.wedge',EFe='org.eclipse.elk.alg.radial.sorting',FFe=5.497787143782138,GFe=3.9269908169872414,HFe=2.356194490192345,IFe='org.eclipse.elk.alg.rectpacking',JFe='org.eclipse.elk.alg.rectpacking.intermediate',KFe='org.eclipse.elk.alg.rectpacking.options',LFe='org.eclipse.elk.rectpacking.trybox',MFe='org.eclipse.elk.rectpacking.currentPosition',NFe='org.eclipse.elk.rectpacking.desiredPosition',OFe='org.eclipse.elk.rectpacking.inNewRow',PFe='org.eclipse.elk.rectpacking.widthApproximation.strategy',QFe='org.eclipse.elk.rectpacking.widthApproximation.targetWidth',RFe='org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal',SFe='org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift',TFe='org.eclipse.elk.rectpacking.packing.strategy',UFe='org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation',VFe='org.eclipse.elk.rectpacking.packing.compaction.iterations',WFe='org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy',XFe='widthApproximation',YFe='Compaction Strategy',ZFe='packing.compaction',$Fe='org.eclipse.elk.rectpacking',_Fe='org.eclipse.elk.alg.rectpacking.p1widthapproximation',aGe='org.eclipse.elk.alg.rectpacking.p2packing',bGe='No Compaction',cGe='org.eclipse.elk.alg.rectpacking.p3whitespaceelimination',dGe='org.eclipse.elk.alg.rectpacking.util',eGe='No implementation available for ',fGe='org.eclipse.elk.alg.spore',gGe='org.eclipse.elk.alg.spore.options',hGe='org.eclipse.elk.sporeCompaction',iGe='org.eclipse.elk.underlyingLayoutAlgorithm',jGe='org.eclipse.elk.processingOrder.treeConstruction',kGe='org.eclipse.elk.processingOrder.spanningTreeCostFunction',lGe='org.eclipse.elk.processingOrder.preferredRoot',mGe='org.eclipse.elk.processingOrder.rootSelection',nGe='org.eclipse.elk.structure.structureExtractionStrategy',oGe='org.eclipse.elk.compaction.compactionStrategy',pGe='org.eclipse.elk.compaction.orthogonal',qGe='org.eclipse.elk.overlapRemoval.maxIterations',rGe='org.eclipse.elk.overlapRemoval.runScanline',sGe='processingOrder',tGe='overlapRemoval',uGe='org.eclipse.elk.sporeOverlap',vGe='org.eclipse.elk.alg.spore.p1structure',wGe='org.eclipse.elk.alg.spore.p2processingorder',xGe='org.eclipse.elk.alg.spore.p3execution',yGe='Topdown Layout',zGe='Invalid index: ',AGe='org.eclipse.elk.core.alg',BGe={341:1},CGe={294:1},DGe='Make sure its type is registered with the ',EGe=' utility class.',FGe='true',GGe='false',HGe="Couldn't clone property '",IGe=0.05,JGe='org.eclipse.elk.core.options',KGe=1.2999999523162842,LGe='org.eclipse.elk.box',MGe='org.eclipse.elk.expandNodes',NGe='org.eclipse.elk.box.packingMode',OGe='org.eclipse.elk.algorithm',PGe='org.eclipse.elk.resolvedAlgorithm',QGe='org.eclipse.elk.bendPoints',RGe='org.eclipse.elk.labelManager',SGe='org.eclipse.elk.scaleFactor',TGe='org.eclipse.elk.childAreaWidth',UGe='org.eclipse.elk.childAreaHeight',VGe='org.eclipse.elk.animate',WGe='org.eclipse.elk.animTimeFactor',XGe='org.eclipse.elk.layoutAncestors',YGe='org.eclipse.elk.maxAnimTime',ZGe='org.eclipse.elk.minAnimTime',$Ge='org.eclipse.elk.progressBar',_Ge='org.eclipse.elk.validateGraph',aHe='org.eclipse.elk.validateOptions',bHe='org.eclipse.elk.zoomToFit',cHe='org.eclipse.elk.font.name',dHe='org.eclipse.elk.font.size',eHe='org.eclipse.elk.topdown.sizeApproximator',fHe='org.eclipse.elk.topdown.scaleCap',gHe='org.eclipse.elk.edge.type',hHe='partitioning',iHe='nodeLabels',jHe='portAlignment',kHe='nodeSize',lHe='port',mHe='portLabels',nHe='topdown',oHe='insideSelfLoops',pHe='org.eclipse.elk.fixed',qHe='org.eclipse.elk.random',rHe={3:1,34:1,22:1,347:1},sHe='port must have a parent node to calculate the port side',tHe='The edge needs to have exactly one edge section. Found: ',uHe='org.eclipse.elk.core.util.adapters',vHe='org.eclipse.emf.ecore',wHe='org.eclipse.elk.graph',xHe='EMapPropertyHolder',yHe='ElkBendPoint',zHe='ElkGraphElement',AHe='ElkConnectableShape',BHe='ElkEdge',CHe='ElkEdgeSection',DHe='EModelElement',EHe='ENamedElement',FHe='ElkLabel',GHe='ElkNode',HHe='ElkPort',IHe={94:1,93:1},JHe='org.eclipse.emf.common.notify.impl',KHe="The feature '",LHe="' is not a valid changeable feature",MHe='Expecting null',NHe="' is not a valid feature",OHe='The feature ID',PHe=' is not a valid feature ID',QHe=32768,RHe={110:1,94:1,93:1,58:1,54:1,99:1},SHe='org.eclipse.emf.ecore.impl',THe='org.eclipse.elk.graph.impl',UHe='Recursive containment not allowed for ',VHe="The datatype '",WHe="' is not a valid classifier",XHe="The value '",YHe={195:1,3:1,4:1},ZHe="The class '",$He='http://www.eclipse.org/elk/ElkGraph',_He='property',aIe='value',bIe='source',cIe='properties',dIe='identifier',eIe='height',fIe='width',gIe='parent',hIe='text',iIe='children',jIe='hierarchical',kIe='sources',lIe='targets',mIe='sections',nIe='bendPoints',oIe='outgoingShape',pIe='incomingShape',qIe='outgoingSections',rIe='incomingSections',sIe='org.eclipse.emf.common.util',tIe='Severe implementation error in the Json to ElkGraph importer.',uIe='id',vIe='org.eclipse.elk.graph.json',wIe='Unhandled parameter types: ',xIe='startPoint',yIe="An edge must have at least one source and one target (edge id: '",zIe="').",AIe='Referenced edge section does not exist: ',BIe=" (edge id: '",CIe='target',DIe='sourcePoint',EIe='targetPoint',FIe='group',GIe='name',HIe='connectableShape cannot be null',IIe='edge cannot be null',JIe="Passed edge is not 'simple'.",KIe='org.eclipse.elk.graph.util',LIe="The 'no duplicates' constraint is violated",MIe='targetIndex=',NIe=', size=',OIe='sourceIndex=',PIe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},QIe={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},RIe='logging',SIe='measureExecutionTime',TIe='parser.parse.1',UIe='parser.parse.2',VIe='parser.next.1',WIe='parser.next.2',XIe='parser.next.3',YIe='parser.next.4',ZIe='parser.factor.1',$Ie='parser.factor.2',_Ie='parser.factor.3',aJe='parser.factor.4',bJe='parser.factor.5',cJe='parser.factor.6',dJe='parser.atom.1',eJe='parser.atom.2',fJe='parser.atom.3',gJe='parser.atom.4',hJe='parser.atom.5',iJe='parser.cc.1',jJe='parser.cc.2',kJe='parser.cc.3',lJe='parser.cc.5',mJe='parser.cc.6',nJe='parser.cc.7',oJe='parser.cc.8',pJe='parser.ope.1',qJe='parser.ope.2',rJe='parser.ope.3',sJe='parser.descape.1',tJe='parser.descape.2',uJe='parser.descape.3',vJe='parser.descape.4',wJe='parser.descape.5',xJe='parser.process.1',yJe='parser.quantifier.1',zJe='parser.quantifier.2',AJe='parser.quantifier.3',BJe='parser.quantifier.4',CJe='parser.quantifier.5',DJe='org.eclipse.emf.common.notify',EJe={424:1,686:1},FJe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},GJe={378:1,152:1},HJe='index=',IJe={3:1,4:1,5:1,129:1},JJe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},KJe={3:1,6:1,4:1,5:1,198:1},LJe={3:1,4:1,5:1,173:1,379:1},MJe=';/?:@&=+$,',NJe='invalid authority: ',OJe='EAnnotation',PJe='ETypedElement',QJe='EStructuralFeature',RJe='EAttribute',SJe='EClassifier',TJe='EEnumLiteral',UJe='EGenericType',VJe='EOperation',WJe='EParameter',XJe='EReference',YJe='ETypeParameter',ZJe='org.eclipse.emf.ecore.util',$Je={79:1},_Je={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},aKe='org.eclipse.emf.ecore.util.FeatureMap$Entry',bKe=8192,cKe=2048,dKe='byte',eKe='char',fKe='double',gKe='float',hKe='int',iKe='long',jKe='short',kKe='java.lang.Object',lKe={3:1,4:1,5:1,254:1},mKe={3:1,4:1,5:1,688:1},nKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},oKe={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},pKe='mixed',qKe='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',rKe='kind',sKe={3:1,4:1,5:1,689:1},tKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},uKe={20:1,31:1,56:1,16:1,15:1,61:1,71:1},vKe={51:1,128:1,287:1},wKe={76:1,343:1},xKe="The value of type '",yKe="' must be of type '",zKe=1352,AKe='http://www.eclipse.org/emf/2002/Ecore',BKe=-32768,CKe='constraints',DKe='baseType',EKe='getEStructuralFeature',FKe='getFeatureID',GKe='feature',HKe='getOperationID',IKe='operation',JKe='defaultValue',KKe='eTypeParameters',LKe='isInstance',MKe='getEEnumLiteral',NKe='eContainingClass',OKe={57:1},PKe={3:1,4:1,5:1,124:1},QKe='org.eclipse.emf.ecore.resource',RKe={94:1,93:1,599:1,2034:1},SKe='org.eclipse.emf.ecore.resource.impl',TKe='unspecified',UKe='simple',VKe='attribute',WKe='attributeWildcard',XKe='element',YKe='elementWildcard',ZKe='collapse',$Ke='itemType',_Ke='namespace',aLe='##targetNamespace',bLe='whiteSpace',cLe='wildcards',dLe='http://www.eclipse.org/emf/2003/XMLType',eLe='##any',fLe='uninitialized',gLe='The multiplicity constraint is violated',hLe='org.eclipse.emf.ecore.xml.type',iLe='ProcessingInstruction',jLe='SimpleAnyType',kLe='XMLTypeDocumentRoot',lLe='org.eclipse.emf.ecore.xml.type.impl',mLe='INF',nLe='processing',oLe='ENTITIES_._base',pLe='minLength',qLe='ENTITY',rLe='NCName',sLe='IDREFS_._base',tLe='integer',uLe='token',vLe='pattern',wLe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',xLe='\\i\\c*',yLe='[\\i-[:]][\\c-[:]]*',zLe='nonPositiveInteger',ALe='maxInclusive',BLe='NMTOKEN',CLe='NMTOKENS_._base',DLe='nonNegativeInteger',ELe='minInclusive',FLe='normalizedString',GLe='unsignedByte',HLe='unsignedInt',ILe='18446744073709551615',JLe='unsignedShort',KLe='processingInstruction',LLe='org.eclipse.emf.ecore.xml.type.internal',MLe=1114111,NLe='Internal Error: shorthands: \\u',OLe='xml:isDigit',PLe='xml:isWord',QLe='xml:isSpace',RLe='xml:isNameChar',SLe='xml:isInitialNameChar',TLe='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',ULe='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',VLe='Private Use',WLe='ASSIGNED',XLe='\x00\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',YLe='UNASSIGNED',ZLe={3:1,122:1},$Le='org.eclipse.emf.ecore.xml.type.util',_Le={3:1,4:1,5:1,381:1},aMe='org.eclipse.xtext.xbase.lib',bMe='Cannot add elements to a Range',cMe='Cannot set elements in a Range',dMe='Cannot remove elements from a Range',eMe='user.agent';var _,eeb,_db,ydb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;eeb={};feb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.Rm};_.Hb=function sb(){return kFb(this)};_.Ib=function ub(){var a;return nfb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var ND,OD,PD;feb(296,1,{296:1,2124:1},pfb);_.ve=function qfb(a){var b;b=new pfb;b.i=4;a>1?(b.c=xfb(this,a-1)):(b.c=this);return b};_.we=function wfb(){lfb(this);return this.b};_.xe=function yfb(){return nfb(this)};_.ye=function Afb(){return lfb(this),this.k};_.ze=function Cfb(){return (this.i&4)!=0};_.Ae=function Dfb(){return (this.i&1)!=0};_.Ib=function Gfb(){return ofb(this)};_.i=0;var kfb=1;var jJ=sfb(mve,'Object',1);var UI=sfb(mve,'Class',296);feb(2096,1,nve);var oE=sfb(ove,'Optional',2096);feb(1191,2096,nve,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var mE=sfb(ove,'Absent',1191);feb(636,1,{},Gb);var nE=sfb(ove,'Joiner',636);var pE=ufb(ove,'Predicate');feb(589,1,{178:1,589:1,3:1,46:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(ZD(a,589)){b=RD(a,589);return Rt(this.a,b.a)}return false};_.Hb=function _b(){return Cob(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var qE=sfb(ove,'Predicates/AndPredicate',589);feb(419,2096,{419:1,3:1},cc);_.Fb=function dc(a){var b;if(ZD(a,419)){b=RD(a,419);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return uve+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var rE=sfb(ove,'Present',419);feb(204,1,wve);_.Nb=function kc(a){Ztb(this,a)};_.Qb=function lc(){jc()};var eI=sfb(xve,'UnmodifiableIterator',204);feb(2076,204,yve);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw Adb(new jib)};_.Wb=function oc(a){throw Adb(new jib)};var fI=sfb(xve,'UnmodifiableListIterator',2076);feb(399,2076,yve);_.Ob=function rc(){return this.c<this.d};_.Sb=function sc(){return this.c>0};_.Pb=function tc(){if(this.c>=this.d){throw Adb(new Dvb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw Adb(new Dvb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var sE=sfb(xve,'AbstractIndexedListIterator',399);feb(713,204,wve);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var tE=sfb(xve,'AbstractIterator',713);feb(2084,1,{229:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return xw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return jeb(this.Zb())};var YE=sfb(xve,'AbstractMultimap',2084);feb(742,2084,zve);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return ek(this.c.vc().Nc(),new hh,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return yob(),new xpb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return ek(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new lg(this,a,b,null)};_.d=0;var TE=sfb(xve,'AbstractMapBasedMultimap',742);feb(1696,742,zve);_.hc=function pd(){return new cnb(this.a)};_.jc=function qd(){return yob(),yob(),vob};_.cc=function sd(a){return RD(Qc(this,a),15)};_.fc=function ud(a){return RD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return xw(this,a)};_.qc=function td(a){return RD(Qc(this,a),15)};_.rc=function vd(a){return RD(Sc(this,a),15)};_.mc=function wd(a){return Hob(RD(a,15))};_.pc=function xd(a,b){return Vc(this,a,RD(b,15),null)};var uE=sfb(xve,'AbstractListMultimap',1696);feb(748,1,Ave);_.Nb=function zd(a){Ztb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=RD(this.c.Pb(),44);this.b=a.ld();this.a=RD(a.md(),16);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();RD(Hvb(this.a),16).dc()&&this.c.Qb();--this.d.d};var CE=sfb(xve,'AbstractMapBasedMultimap/Itr',748);feb(1129,748,Ave,Dd);_.sc=function Ed(a,b){return b};var vE=sfb(xve,'AbstractMapBasedMultimap/1',1129);feb(1130,1,{},Fd);_.Kb=function Gd(a){return RD(a,16).Nc()};var wE=sfb(xve,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1130);feb(1131,748,Ave,Hd);_.sc=function Id(a,b){return new gp(a,b)};var xE=sfb(xve,'AbstractMapBasedMultimap/2',1131);var VK=ufb(Bve,'Map');feb(2065,1,Cve);_.wc=function Td(a){Bvb(this,a)};_.yc=function $d(a,b,c){return Cvb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=RD(c.Pb(),44);d=b.md();if(dE(a)===dE(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!ZD(a,85)){return false}d=RD(a,85);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=RD(c.Pb(),44);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return Bob(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Xkb(this)};_.zc=function _d(a,b){throw Adb(new kib('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new glb(this)};var KJ=sfb(Bve,'AbstractMap',2065);feb(2085,2065,Cve);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new nw(this)):a};var uH=sfb(xve,'Maps/ViewCachingAbstractMap',2085);feb(402,2085,Cve,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():Ar(new mf(this))};_._b=function pe(a){return Wv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return jeb(this.d)};var BE=sfb(xve,'AbstractMapBasedMultimap/AsMap',402);var cJ=ufb(mve,'Iterable');feb(31,1,Dve);_.Jc=function Le(a){xgb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Swb(this,0)};_.Oc=function Qe(){return new SDb(null,this.Nc())};_.Fc=function Ge(a){throw Adb(new kib('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var vJ=sfb(Bve,'AbstractCollection',31);var bL=ufb(Bve,'Set');feb(Eve,31,Fve);_.Nc=function Ye(){return new Swb(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return Bob(this)};var RJ=sfb(Bve,'AbstractSet',Eve);feb(2068,Eve,Fve);var UH=sfb(xve,'Sets/ImprovedAbstractSet',2068);feb(2069,2068,Fve);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)&&ZD(a,44)){b=RD(a,44);return this.Rc().ec().Mc(b.ld())}return false};_.gc=function cf(){return this.Rc().gc()};var nH=sfb(xve,'Maps/EntrySet',2069);feb(1127,2069,Fve,df);_.Hc=function ef(a){return Nk(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Nk(this.a.d.vc(),a)){return false}b=RD(Hvb(RD(a,44)),44);Tc(this.a.e,b.ld());return true};_.Nc=function jf(){return gk(this.a.d.vc().Nc(),new kf(this.a))};var zE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1127);feb(1128,1,{},kf);_.Kb=function lf(a){return me(this.a,RD(a,44))};var yE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1128);feb(746,1,Ave,mf);_.Nb=function nf(a){Ztb(this,a)};_.Pb=function pf(){var a;return a=RD(this.b.Pb(),44),this.a=RD(a.md(),16),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var AE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapIterator',746);feb(542,2068,Fve,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new lw(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new aw(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var rH=sfb(xve,'Maps/KeySet',542);feb(327,542,Fve,zf);_.$b=function Af(){var a;Ar((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=RD(this.b.Bc(a),16);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var EE=sfb(xve,'AbstractMapBasedMultimap/KeySet',327);feb(747,1,Ave,Hf);_.Nb=function If(a){Ztb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=RD(this.c.Pb(),44);return this.a.ld()};_.Qb=function Lf(){var a;Vb(!!this.a);a=RD(this.a.md(),16);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var DE=sfb(xve,'AbstractMapBasedMultimap/KeySet/1',747);feb(502,402,{85:1,133:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Qf(){return this.Uc()};_.Sc=function Of(){return new eg(this.c,this.Wc())};_.Tc=function Pf(){return this.Wc().Tc()};_.Uc=function Rf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Vc=function Sf(){return this.Wc().Vc()};_.Wc=function Tf(){return RD(this.d,133)};var IE=sfb(xve,'AbstractMapBasedMultimap/SortedAsMap',502);feb(446,502,Gve,Uf);_.bc=function Wf(){return new gg(this.a,RD(RD(this.d,133),139))};_.Sc=function Xf(){return new gg(this.a,RD(RD(this.d,133),139))};_.ec=function _f(){var a;return a=this.b,RD(!a?(this.b=new gg(this.a,RD(RD(this.d,133),139))):a,277)};_.Uc=function ag(){var a;return a=this.b,RD(!a?(this.b=new gg(this.a,RD(RD(this.d,133),139))):a,277)};_.Wc=function cg(){return RD(RD(this.d,133),139)};_.Xc=function Vf(a){return RD(RD(this.d,133),139).Xc(a)};_.Yc=function Yf(a){return RD(RD(this.d,133),139).Yc(a)};_.Zc=function Zf(a,b){return new Uf(this.a,RD(RD(this.d,133),139).Zc(a,b))};_.$c=function $f(a){return RD(RD(this.d,133),139).$c(a)};_._c=function bg(a){return RD(RD(this.d,133),139)._c(a)};_.ad=function dg(a,b){return new Uf(this.a,RD(RD(this.d,133),139).ad(a,b))};var FE=sfb(xve,'AbstractMapBasedMultimap/NavigableAsMap',446);feb(501,327,Hve,eg);_.Nc=function fg(){return this.b.ec().Nc()};var JE=sfb(xve,'AbstractMapBasedMultimap/SortedKeySet',501);feb(401,501,Ive,gg);var GE=sfb(xve,'AbstractMapBasedMultimap/NavigableKeySet',401);feb(551,31,Dve,lg);_.Fc=function mg(a){var b,c;ig(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&hg(this)}return b};_.Gc=function ng(a){var b,c,d;if(a.dc()){return false}d=(ig(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&hg(this)}return b};_.$b=function og(){var a;a=(ig(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;jg(this)};_.Hc=function pg(a){ig(this);return this.d.Hc(a)};_.Ic=function qg(a){ig(this);return this.d.Ic(a)};_.Fb=function rg(a){if(a===this){return true}ig(this);return pb(this.d,a)};_.Hb=function sg(){ig(this);return tb(this.d)};_.Kc=function tg(){ig(this);return new Og(this)};_.Mc=function ug(a){var b;ig(this);b=this.d.Mc(a);if(b){--this.f.d;jg(this)}return b};_.gc=function vg(){return kg(this)};_.Nc=function wg(){return ig(this),this.d.Nc()};_.Ib=function xg(){ig(this);return jeb(this.d)};var LE=sfb(xve,'AbstractMapBasedMultimap/WrappedCollection',551);var QK=ufb(Bve,'List');feb(744,551,{20:1,31:1,16:1,15:1},yg);_.jd=function Hg(a){tvb(this,a)};_.Nc=function Ig(){return ig(this),this.d.Nc()};_.bd=function zg(a,b){var c;ig(this);c=this.d.dc();RD(this.d,15).bd(a,b);++this.a.d;c&&hg(this)};_.cd=function Ag(a,b){var c,d,e;if(b.dc()){return false}e=(ig(this),this.d.gc());c=RD(this.d,15).cd(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&hg(this)}return c};_.Xb=function Bg(a){ig(this);return RD(this.d,15).Xb(a)};_.dd=function Cg(a){ig(this);return RD(this.d,15).dd(a)};_.ed=function Dg(){ig(this);return new Ug(this)};_.fd=function Eg(a){ig(this);return new Vg(this,a)};_.gd=function Fg(a){var b;ig(this);b=RD(this.d,15).gd(a);--this.a.d;jg(this);return b};_.hd=function Gg(a,b){ig(this);return RD(this.d,15).hd(a,b)};_.kd=function Jg(a,b){ig(this);return Vc(this.a,this.e,RD(this.d,15).kd(a,b),!this.b?this:this.b)};var NE=sfb(xve,'AbstractMapBasedMultimap/WrappedList',744);feb(1126,744,{20:1,31:1,16:1,15:1,59:1},Kg);var HE=sfb(xve,'AbstractMapBasedMultimap/RandomAccessWrappedList',1126);feb(628,1,Ave,Og);_.Nb=function Qg(a){Ztb(this,a)};_.Ob=function Rg(){Ng(this);return this.b.Ob()};_.Pb=function Sg(){Ng(this);return this.b.Pb()};_.Qb=function Tg(){Mg(this)};var KE=sfb(xve,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',628);feb(745,628,Jve,Ug,Vg);_.Qb=function _g(){Mg(this)};_.Rb=function Wg(a){var b;b=kg(this.a)==0;(Ng(this),RD(this.b,128)).Rb(a);++this.a.a.d;b&&hg(this.a)};_.Sb=function Xg(){return (Ng(this),RD(this.b,128)).Sb()};_.Tb=function Yg(){return (Ng(this),RD(this.b,128)).Tb()};_.Ub=function Zg(){return (Ng(this),RD(this.b,128)).Ub()};_.Vb=function $g(){return (Ng(this),RD(this.b,128)).Vb()};_.Wb=function ah(a){(Ng(this),RD(this.b,128)).Wb(a)};var ME=sfb(xve,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',745);feb(743,551,Hve,bh);_.Nc=function dh(){return ig(this),this.d.Nc()};var QE=sfb(xve,'AbstractMapBasedMultimap/WrappedSortedSet',743);feb(1125,743,Ive,eh);var OE=sfb(xve,'AbstractMapBasedMultimap/WrappedNavigableSet',1125);feb(1124,551,Fve,fh);_.Nc=function gh(){return ig(this),this.d.Nc()};var PE=sfb(xve,'AbstractMapBasedMultimap/WrappedSet',1124);feb(1133,1,{},hh);_.Kb=function ih(a){return fd(RD(a,44))};var RE=sfb(xve,'AbstractMapBasedMultimap/lambda$1$Type',1133);feb(1132,1,{},jh);_.Kb=function kh(a){return new gp(this.a,a)};var SE=sfb(xve,'AbstractMapBasedMultimap/lambda$2$Type',1132);var UK=ufb(Bve,'Map/Entry');feb(358,1,Kve);_.Fb=function lh(a){var b;if(ZD(a,44)){b=RD(a,44);return Hb(this.ld(),b.ld())&&Hb(this.md(),b.md())}return false};_.Hb=function mh(){var a,b;a=this.ld();b=this.md();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.nd=function nh(a){throw Adb(new jib)};_.Ib=function oh(){return this.ld()+'='+this.md()};var UE=sfb(xve,Lve,358);feb(2086,31,Dve);_.$b=function ph(){this.od().$b()};_.Hc=function qh(a){var b;if(ZD(a,44)){b=RD(a,44);return Cc(this.od(),b.ld(),b.md())}return false};_.Mc=function rh(a){var b;if(ZD(a,44)){b=RD(a,44);return Gc(this.od(),b.ld(),b.md())}return false};_.gc=function sh(){return this.od().d};var yH=sfb(xve,'Multimaps/Entries',2086);feb(749,2086,Dve,th);_.Kc=function uh(){return this.a.kc()};_.od=function vh(){return this.a};_.Nc=function wh(){return this.a.lc()};var VE=sfb(xve,'AbstractMultimap/Entries',749);feb(750,749,Fve,xh);_.Nc=function Ah(){return this.a.lc()};_.Fb=function yh(a){return Rx(this,a)};_.Hb=function zh(){return Sx(this)};var WE=sfb(xve,'AbstractMultimap/EntrySet',750);feb(751,31,Dve,Bh);_.$b=function Ch(){this.a.$b()};_.Hc=function Dh(a){return Dc(this.a,a)};_.Kc=function Eh(){return this.a.nc()};_.gc=function Fh(){return this.a.d};_.Nc=function Gh(){return this.a.oc()};var XE=sfb(xve,'AbstractMultimap/Values',751);feb(2087,31,{849:1,20:1,31:1,16:1});_.Jc=function Oh(a){Qb(a);Ih(this).Jc(new lx(a))};_.Nc=function Sh(){var a;return a=Ih(this).Nc(),ek(a,new sx,64|a.yd()&1296,this.a.d)};_.Fc=function Kh(a){Hh();return true};_.Gc=function Lh(a){return Qb(this),Qb(a),ZD(a,552)?nx(RD(a,849)):!a.dc()&&xr(this,a.Kc())};_.Hc=function Mh(a){var b;return b=RD(Xv(nd(this.a),a),16),(!b?0:b.gc())>0};_.Fb=function Nh(a){return ox(this,a)};_.Hb=function Ph(){return tb(Ih(this))};_.dc=function Qh(){return Ih(this).dc()};_.Mc=function Rh(a){return Rw(this,a,1)>0};_.Ib=function Th(){return jeb(Ih(this))};var $E=sfb(xve,'AbstractMultiset',2087);feb(2089,2068,Fve);_.$b=function Uh(){Nc(this.a.a)};_.Hc=function Vh(a){var b,c;if(ZD(a,503)){c=RD(a,425);if(RD(c.a.md(),16).gc()<=0){return false}b=Qw(this.a,c.a.ld());return b==RD(c.a.md(),16).gc()}return false};_.Mc=function Wh(a){var b,c,d,e;if(ZD(a,503)){c=RD(a,425);b=c.a.ld();d=RD(c.a.md(),16).gc();if(d!=0){e=this.a;return qx(e,b,d)}}return false};var IH=sfb(xve,'Multisets/EntrySet',2089);feb(1139,2089,Fve,Xh);_.Kc=function Yh(){return new _w(fe(nd(this.a.a)).Kc())};_.gc=function Zh(){return nd(this.a.a).gc()};var ZE=sfb(xve,'AbstractMultiset/EntrySet',1139);feb(627,742,zve);_.hc=function ai(){return this.pd()};_.jc=function bi(){return this.qd()};_.cc=function ei(a){return this.rd(a)};_.fc=function gi(a){return this.sd(a)};_.Zb=function _h(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.qd=function ci(){return yob(),yob(),xob};_.Fb=function di(a){return xw(this,a)};_.rd=function fi(a){return RD(Qc(this,a),21)};_.sd=function hi(a){return RD(Sc(this,a),21)};_.mc=function ii(a){return yob(),new Lqb(RD(a,21))};_.pc=function ji(a,b){return new fh(this,a,RD(b,21))};var _E=sfb(xve,'AbstractSetMultimap',627);feb(1723,627,zve);_.hc=function mi(){return new yAb(this.b)};_.pd=function ni(){return new yAb(this.b)};_.jc=function oi(){return Zx(new yAb(this.b))};_.qd=function pi(){return Zx(new yAb(this.b))};_.cc=function qi(a){return RD(RD(Qc(this,a),21),87)};_.rd=function ri(a){return RD(RD(Qc(this,a),21),87)};_.fc=function si(a){return RD(RD(Sc(this,a),21),87)};_.sd=function ti(a){return RD(RD(Sc(this,a),21),87)};_.mc=function ui(a){return ZD(a,277)?Zx(RD(a,277)):(yob(),new jrb(RD(a,87)))};_.Zb=function li(){var a;return a=this.f,!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a};_.pc=function vi(a,b){return ZD(b,277)?new eh(this,a,RD(b,277)):new bh(this,a,RD(b,87))};var bF=sfb(xve,'AbstractSortedSetMultimap',1723);feb(1724,1723,zve);_.Zb=function xi(){var a;return a=this.f,RD(RD(!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a,133),139)};_.ec=function zi(){var a;return a=this.i,RD(RD(!a?(this.i=ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)):a,87),277)};_.bc=function yi(){return ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)};var aF=sfb(xve,'AbstractSortedKeySortedSetMultimap',1724);feb(2109,1,{2046:1});_.Fb=function Ai(a){return Qy(this,a)};_.Hb=function Bi(){var a;return Bob((a=this.g,!a?(this.g=new Di(this)):a))};_.Ib=function Ci(){var a;return Md((a=this.f,!a?(this.f=new Zj(this)):a))};var eF=sfb(xve,'AbstractTable',2109);feb(679,Eve,Fve,Di);_.$b=function Ei(){Xi()};_.Hc=function Fi(a){var b,c;if(ZD(a,478)){b=RD(a,697);c=RD(Xv(bj(this.a),Qm(b.c.e,b.b)),85);return !!c&&Nk(c.vc(),new gp(Qm(b.c.c,b.a),Ui(b.c,b.b,b.a)))}return false};_.Kc=function Gi(){return Vi(this.a)};_.Mc=function Hi(a){var b,c;if(ZD(a,478)){b=RD(a,697);c=RD(Xv(bj(this.a),Qm(b.c.e,b.b)),85);return !!c&&Ok(c.vc(),new gp(Qm(b.c.c,b.a),Ui(b.c,b.b,b.a)))}return false};_.gc=function Ii(){return dj(this.a)};_.Nc=function Ji(){return Wi(this.a)};var cF=sfb(xve,'AbstractTable/CellSet',679);feb(2025,31,Dve,Ki);_.$b=function Li(){Xi()};_.Hc=function Mi(a){return Yi(this.a,a)};_.Kc=function Ni(){return fj(this.a)};_.gc=function Oi(){return dj(this.a)};_.Nc=function Pi(){return gj(this.a)};var dF=sfb(xve,'AbstractTable/Values',2025);feb(1697,1696,zve);var fF=sfb(xve,'ArrayListMultimapGwtSerializationDependencies',1697);feb(520,1697,zve,Ri,Si);_.hc=function Ti(){return new cnb(this.a)};_.a=0;var gF=sfb(xve,'ArrayListMultimap',520);feb(678,2109,{678:1,2046:1,3:1},hj);var sF=sfb(xve,'ArrayTable',678);feb(2021,399,yve,ij);_.Xb=function jj(a){return new pj(this.a,a)};var hF=sfb(xve,'ArrayTable/1',2021);feb(2022,1,{},kj);_.td=function lj(a){return new pj(this.a,a)};var iF=sfb(xve,'ArrayTable/1methodref$getCell$Type',2022);feb(2110,1,{697:1});_.Fb=function mj(a){var b;if(a===this){return true}if(ZD(a,478)){b=RD(a,697);return Hb(Qm(this.c.e,this.b),Qm(b.c.e,b.b))&&Hb(Qm(this.c.c,this.a),Qm(b.c.c,b.a))&&Hb(Ui(this.c,this.b,this.a),Ui(b.c,b.b,b.a))}return false};_.Hb=function nj(){return Tnb(cD(WC(jJ,1),rve,1,5,[Qm(this.c.e,this.b),Qm(this.c.c,this.a),Ui(this.c,this.b,this.a)]))};_.Ib=function oj(){return '('+Qm(this.c.e,this.b)+','+Qm(this.c.c,this.a)+')='+Ui(this.c,this.b,this.a)};var bI=sfb(xve,'Tables/AbstractCell',2110);feb(478,2110,{478:1,697:1},pj);_.a=0;_.b=0;_.d=0;var jF=sfb(xve,'ArrayTable/2',478);feb(2024,1,{},qj);_.td=function rj(a){return _i(this.a,a)};var kF=sfb(xve,'ArrayTable/2methodref$getValue$Type',2024);feb(2023,399,yve,sj);_.Xb=function tj(a){return _i(this.a,a)};var lF=sfb(xve,'ArrayTable/3',2023);feb(2077,2065,Cve);_.$b=function vj(){Ar(this.kc())};_.vc=function wj(){return new gw(this)};_.lc=function xj(){return new Uwb(this.kc(),this.gc())};var pH=sfb(xve,'Maps/IteratorBasedAbstractMap',2077);feb(842,2077,Cve);_.$b=function Bj(){throw Adb(new jib)};_._b=function Cj(a){return En(this.c,a)};_.kc=function Dj(){return new Rj(this,this.c.b.c.gc())};_.lc=function Ej(){return fk(this.c.b.c.gc(),16,new Lj(this))};_.xc=function Fj(a){var b;b=RD(Fn(this.c,a),17);return !b?null:this.vd(b.a)};_.dc=function Gj(){return this.c.b.c.dc()};_.ec=function Hj(){return hn(this.c)};_.zc=function Ij(a,b){var c;c=RD(Fn(this.c,a),17);if(!c){throw Adb(new agb(this.ud()+' '+a+' not in '+hn(this.c)))}return this.wd(c.a,b)};_.Bc=function Jj(a){throw Adb(new jib)};_.gc=function Kj(){return this.c.b.c.gc()};var pF=sfb(xve,'ArrayTable/ArrayMap',842);feb(2020,1,{},Lj);_.td=function Mj(a){return yj(this.a,a)};var mF=sfb(xve,'ArrayTable/ArrayMap/0methodref$getEntry$Type',2020);feb(2018,358,Kve,Nj);_.ld=function Oj(){return zj(this.a,this.b)};_.md=function Pj(){return this.a.vd(this.b)};_.nd=function Qj(a){return this.a.wd(this.b,a)};_.b=0;var nF=sfb(xve,'ArrayTable/ArrayMap/1',2018);feb(2019,399,yve,Rj);_.Xb=function Sj(a){return yj(this.a,a)};var oF=sfb(xve,'ArrayTable/ArrayMap/2',2019);feb(2017,842,Cve,Tj);_.ud=function Uj(){return 'Column'};_.vd=function Vj(a){return Ui(this.b,this.a,a)};_.wd=function Wj(a,b){return cj(this.b,this.a,a,b)};_.a=0;var rF=sfb(xve,'ArrayTable/Row',2017);feb(843,842,Cve,Zj);_.vd=function _j(a){return new Tj(this.a,a)};_.zc=function ak(a,b){return RD(b,85),Xj()};_.wd=function bk(a,b){return RD(b,85),Yj()};_.ud=function $j(){return 'Row'};var qF=sfb(xve,'ArrayTable/RowMap',843);feb(1157,1,Pve,hk);_.Ad=function lk(a){return (this.a.yd()&-262&a)!=0};_.yd=function ik(){return this.a.yd()&-262};_.zd=function jk(){return this.a.zd()};_.Nb=function kk(a){this.a.Nb(new pk(a,this.b))};_.Bd=function mk(a){return this.a.Bd(new nk(a,this.b))};var yF=sfb(xve,'CollectSpliterators/1',1157);feb(1158,1,Qve,nk);_.Cd=function ok(a){this.a.Cd(this.b.Kb(a))};var tF=sfb(xve,'CollectSpliterators/1/lambda$0$Type',1158);feb(1159,1,Qve,pk);_.Cd=function qk(a){this.a.Cd(this.b.Kb(a))};var uF=sfb(xve,'CollectSpliterators/1/lambda$1$Type',1159);feb(1154,1,Pve,rk);_.Ad=function vk(a){return ((16464|this.b)&a)!=0};_.yd=function sk(){return 16464|this.b};_.zd=function tk(){return this.a.zd()};_.Nb=function uk(a){this.a.Qe(new zk(a,this.c))};_.Bd=function wk(a){return this.a.Re(new xk(a,this.c))};_.b=0;var xF=sfb(xve,'CollectSpliterators/1WithCharacteristics',1154);feb(1155,1,Rve,xk);_.Dd=function yk(a){this.a.Cd(this.b.td(a))};var vF=sfb(xve,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1155);feb(1156,1,Rve,zk);_.Dd=function Ak(a){this.a.Cd(this.b.td(a))};var wF=sfb(xve,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1156);feb(1150,1,Pve);_.Ad=function Gk(a){return (this.a&a)!=0};_.yd=function Dk(){return this.a};_.zd=function Ek(){!!this.e&&(this.b=Kgb(this.b,this.e.zd()));return Kgb(this.b,0)};_.Nb=function Fk(a){if(this.e){this.e.Nb(a);this.e=null}this.c.Nb(new Kk(this,a));this.b=0};_.Bd=function Hk(a){while(true){if(!!this.e&&this.e.Bd(a)){Pdb(this.b,Sve)&&(this.b=Vdb(this.b,1));return true}else{this.e=null}if(!this.c.Bd(new Ik(this))){return false}}};_.a=0;_.b=0;var CF=sfb(xve,'CollectSpliterators/FlatMapSpliterator',1150);feb(1152,1,Qve,Ik);_.Cd=function Jk(a){Bk(this.a,a)};var zF=sfb(xve,'CollectSpliterators/FlatMapSpliterator/lambda$0$Type',1152);feb(1153,1,Qve,Kk);_.Cd=function Lk(a){Ck(this.a,this.b,a)};var AF=sfb(xve,'CollectSpliterators/FlatMapSpliterator/lambda$1$Type',1153);feb(1151,1150,Pve,Mk);var BF=sfb(xve,'CollectSpliterators/FlatMapSpliteratorOfObject',1151);feb(253,1,Tve);_.Fd=function Sk(a){return this.Ed(RD(a,253))};_.Ed=function Rk(a){var b;if(a==(kl(),jl)){return 1}if(a==(Wk(),Vk)){return -1}b=(ux(),Leb(this.a,a.a));if(b!=0){return b}return ZD(this,526)==ZD(a,526)?0:ZD(this,526)?1:-1};_.Id=function Tk(){return this.a};_.Fb=function Uk(a){return Pk(this,a)};var HF=sfb(xve,'Cut',253);feb(1823,253,Tve,Xk);_.Ed=function Yk(a){return a==this?0:1};_.Gd=function Zk(a){throw Adb(new Ceb)};_.Hd=function $k(a){a.a+='+\u221E)'};_.Id=function _k(){throw Adb(new dgb(Uve))};_.Hb=function al(){return gib(),jFb(this)};_.Jd=function bl(a){return false};_.Ib=function cl(){return '+\u221E'};var Vk;var DF=sfb(xve,'Cut/AboveAll',1823);feb(526,253,{253:1,526:1,3:1,34:1},dl);_.Gd=function el(a){Yhb((a.a+='(',a),this.a)};_.Hd=function fl(a){Thb(Yhb(a,this.a),93)};_.Hb=function gl(){return ~tb(this.a)};_.Jd=function hl(a){return ux(),Leb(this.a,a)<0};_.Ib=function il(){return '/'+this.a+'\\'};var EF=sfb(xve,'Cut/AboveValue',526);feb(1822,253,Tve,ll);_.Ed=function ml(a){return a==this?0:-1};_.Gd=function nl(a){a.a+='(-\u221E'};_.Hd=function ol(a){throw Adb(new Ceb)};_.Id=function pl(){throw Adb(new dgb(Uve))};_.Hb=function ql(){return gib(),jFb(this)};_.Jd=function rl(a){return true};_.Ib=function sl(){return '-\u221E'};var jl;var FF=sfb(xve,'Cut/BelowAll',1822);feb(1824,253,Tve,tl);_.Gd=function ul(a){Yhb((a.a+='[',a),this.a)};_.Hd=function vl(a){Thb(Yhb(a,this.a),41)};_.Hb=function wl(){return tb(this.a)};_.Jd=function xl(a){return ux(),Leb(this.a,a)<=0};_.Ib=function yl(){return '\\'+this.a+'/'};var GF=sfb(xve,'Cut/BelowValue',1824);feb(547,1,Vve);_.Jc=function Bl(a){xgb(this,a)};_.Ib=function Cl(){return Lr(RD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var LF=sfb(xve,'FluentIterable',547);feb(442,547,Vve,Dl);_.Kc=function El(){return new is(Mr(this.a.Kc(),new ir))};var IF=sfb(xve,'FluentIterable/2',442);feb(1059,547,Vve,Gl);_.Kc=function Hl(){return Fl(this)};var KF=sfb(xve,'FluentIterable/3',1059);feb(724,399,yve,Il);_.Xb=function Jl(a){return this.a[a].Kc()};var JF=sfb(xve,'FluentIterable/3/1',724);feb(2070,1,{});_.Ib=function Kl(){return jeb(this.Kd().b)};var SF=sfb(xve,'ForwardingObject',2070);feb(2071,2070,Wve);_.Kd=function Ql(){return this.Ld()};_.Jc=function Rl(a){xgb(this,a)};_.Lc=function Ul(){return this.Oc()};_.Nc=function Xl(){return new Swb(this,0)};_.Oc=function Yl(){return new SDb(null,this.Nc())};_.Fc=function Ll(a){return this.Ld(),qpb()};_.Gc=function Ml(a){return this.Ld(),rpb()};_.$b=function Nl(){this.Ld(),spb()};_.Hc=function Ol(a){return this.Ld().Hc(a)};_.Ic=function Pl(a){return this.Ld().Ic(a)};_.dc=function Sl(){return this.Ld().b.dc()};_.Kc=function Tl(){return this.Ld().Kc()};_.Mc=function Vl(a){return this.Ld(),vpb()};_.gc=function Wl(){return this.Ld().b.gc()};_.Pc=function Zl(){return this.Ld().Pc()};_.Qc=function $l(a){return this.Ld().Qc(a)};var MF=sfb(xve,'ForwardingCollection',2071);feb(2078,31,Xve);_.Kc=function gm(){return this.Od()};_.Fc=function am(a){throw Adb(new jib)};_.Gc=function bm(a){throw Adb(new jib)};_.Md=function cm(){var a;a=this.c;return !a?(this.c=this.Nd()):a};_.$b=function dm(){throw Adb(new jib)};_.Hc=function em(a){return a!=null&&ze(this,a,false)};_.Nd=function fm(){switch(this.gc()){case 0:return tm(),tm(),sm;case 1:return tm(),new Dy(Qb(this.Od().Pb()));default:return new Fx(this,this.Pc());}};_.Mc=function hm(a){throw Adb(new jib)};var lG=sfb(xve,'ImmutableCollection',2078);feb(727,2078,Xve,im);_.Kc=function nm(){return Nr(this.a.Kc())};_.Hc=function jm(a){return a!=null&&this.a.Hc(a)};_.Ic=function km(a){return this.a.Ic(a)};_.dc=function lm(){return this.a.dc()};_.Od=function mm(){return Nr(this.a.Kc())};_.gc=function om(){return this.a.gc()};_.Pc=function pm(){return this.a.Pc()};_.Qc=function qm(a){return this.a.Qc(a)};_.Ib=function rm(){return jeb(this.a)};var NF=sfb(xve,'ForwardingImmutableCollection',727);feb(306,2078,Yve);_.Kc=function Em(){return this.Od()};_.ed=function Fm(){return this.Pd(0)};_.fd=function Hm(a){return this.Pd(a)};_.jd=function Lm(a){tvb(this,a)};_.Nc=function Mm(){return new Swb(this,16)};_.kd=function Om(a,b){return this.Qd(a,b)};_.bd=function wm(a,b){throw Adb(new jib)};_.cd=function xm(a,b){throw Adb(new jib)};_.Md=function ym(){return this};_.Fb=function Am(a){return $u(this,a)};_.Hb=function Bm(){return _u(this)};_.dd=function Cm(a){return a==null?-1:av(this,a)};_.Od=function Dm(){return this.Pd(0)};_.Pd=function Gm(a){return um(this,a)};_.gd=function Jm(a){throw Adb(new jib)};_.hd=function Km(a,b){throw Adb(new jib)};_.Qd=function Nm(a,b){var c;return Pm((c=new pv(this),new Rkb(c,a,b)))};var sm;var qG=sfb(xve,'ImmutableList',306);feb(2105,306,Yve);_.Kc=function Zm(){return Nr(this.Rd().Kc())};_.kd=function an(a,b){return Pm(this.Rd().kd(a,b))};_.Hc=function Rm(a){return a!=null&&this.Rd().Hc(a)};_.Ic=function Sm(a){return this.Rd().Ic(a)};_.Fb=function Tm(a){return pb(this.Rd(),a)};_.Xb=function Um(a){return Qm(this,a)};_.Hb=function Vm(){return tb(this.Rd())};_.dd=function Wm(a){return this.Rd().dd(a)};_.dc=function Xm(){return this.Rd().dc()};_.Od=function Ym(){return Nr(this.Rd().Kc())};_.gc=function $m(){return this.Rd().gc()};_.Qd=function _m(a,b){return Pm(this.Rd().kd(a,b))};_.Pc=function bn(){return this.Rd().Qc($C(jJ,rve,1,this.Rd().gc(),5,1))};_.Qc=function cn(a){return this.Rd().Qc(a)};_.Ib=function dn(){return jeb(this.Rd())};var OF=sfb(xve,'ForwardingImmutableList',2105);feb(729,1,$ve);_.vc=function pn(){return gn(this)};_.wc=function rn(a){Bvb(this,a)};_.ec=function vn(){return hn(this)};_.yc=function wn(a,b,c){return Cvb(this,a,b,c)};_.Cc=function Dn(){return this.Vd()};_.$b=function kn(){throw Adb(new jib)};_._b=function ln(a){return this.xc(a)!=null};_.uc=function mn(a){return this.Vd().Hc(a)};_.Td=function nn(){return new xq(this)};_.Ud=function on(){return new Gq(this)};_.Fb=function qn(a){return Tv(this,a)};_.Hb=function tn(){return gn(this).Hb()};_.dc=function un(){return this.gc()==0};_.zc=function zn(a,b){return jn()};_.Bc=function An(a){throw Adb(new jib)};_.Ib=function Bn(){return Zv(this)};_.Vd=function Cn(){if(this.e){return this.e}return this.e=this.Ud()};_.c=null;_.d=null;_.e=null;var en;var AG=sfb(xve,'ImmutableMap',729);feb(730,729,$ve);_._b=function Hn(a){return En(this,a)};_.uc=function In(a){return pqb(this.b,a)};_.Sd=function Jn(){return go(new Xn(this))};_.Td=function Kn(){return go(sqb(this.b))};_.Ud=function Ln(){return _l(),new im(tqb(this.b))};_.Fb=function Mn(a){return rqb(this.b,a)};_.xc=function Nn(a){return Fn(this,a)};_.Hb=function On(){return tb(this.b.c)};_.dc=function Pn(){return this.b.c.dc()};_.gc=function Qn(){return this.b.c.gc()};_.Ib=function Rn(){return jeb(this.b.c)};var QF=sfb(xve,'ForwardingImmutableMap',730);feb(2072,2071,_ve);_.Kd=function Sn(){return this.Wd()};_.Ld=function Tn(){return this.Wd()};_.Nc=function Wn(){return new Swb(this,1)};_.Fb=function Un(a){return a===this||this.Wd().Fb(a)};_.Hb=function Vn(){return this.Wd().Hb()};var TF=sfb(xve,'ForwardingSet',2072);feb(1085,2072,_ve,Xn);_.Kd=function Zn(){return qqb(this.a.b)};_.Ld=function $n(){return qqb(this.a.b)};_.Hc=function Yn(b){if(ZD(b,44)&&RD(b,44).ld()==null){return false}try{return Pqb(qqb(this.a.b),b)}catch(a){a=zdb(a);if(ZD(a,212)){return false}else throw Adb(a)}};_.Wd=function _n(){return qqb(this.a.b)};_.Qc=function ao(a){var b;b=Qqb(qqb(this.a.b),a);qqb(this.a.b).b.gc()<b.length&&bD(b,qqb(this.a.b).b.gc(),null);return b};var PF=sfb(xve,'ForwardingImmutableMap/1',1085);feb(2079,2078,awe);_.Kc=function eo(){return this.Od()};_.Nc=function fo(){return new Swb(this,1)};_.Fb=function bo(a){return Rx(this,a)};_.Hb=function co(){return Sx(this)};var CG=sfb(xve,'ImmutableSet',2079);feb(719,2079,awe);_.Kc=function no(){return Nr(new Ppb(this.a.b.Kc()))};_.Hc=function io(a){return a!=null&&tpb(this.a,a)};_.Ic=function jo(a){return upb(this.a,a)};_.Hb=function ko(){return tb(this.a.b)};_.dc=function lo(){return this.a.b.dc()};_.Od=function mo(){return Nr(new Ppb(this.a.b.Kc()))};_.gc=function oo(){return this.a.b.gc()};_.Pc=function po(){return this.a.b.Pc()};_.Qc=function qo(a){return wpb(this.a,a)};_.Ib=function ro(){return jeb(this.a.b)};var RF=sfb(xve,'ForwardingImmutableSet',719);feb(2073,2072,bwe);_.Kd=function so(){return this.b};_.Ld=function to(){return this.b};_.Wd=function uo(){return this.b};_.Nc=function vo(){return new $wb(this)};var UF=sfb(xve,'ForwardingSortedSet',2073);feb(543,2077,$ve,Io);_.Ac=function Ro(a){Ld(this,a)};_.Cc=function Uo(){var a;return a=this.d,new Gp(!a?(this.d=new mp(this)):a)};_.$b=function Jo(){wo(this)};_._b=function Ko(a){return !!Go(this,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))))};_.uc=function Lo(a){return xo(this,a)};_.kc=function Mo(){return new ap(this,this)};_.wc=function No(a){zo(this,a)};_.xc=function Oo(a){return Ao(this,a)};_.ec=function Po(){return new Np(this)};_.zc=function Qo(a,b){return Do(this,a,b)};_.Bc=function So(a){var b;b=Go(this,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return null}else{yo(this,b);b.e=null;b.c=null;return b.i}};_.gc=function To(){return this.i};_.xd=function Vo(){var a;return a=this.d,new Gp(!a?(this.d=new mp(this)):a)};_.f=0;_.g=0;_.i=0;var fG=sfb(xve,'HashBiMap',543);feb(544,1,Ave);_.Nb=function Yo(a){Ztb(this,a)};_.Ob=function Zo(){return Wo(this)};_.Pb=function $o(){var a;if(!Wo(this)){throw Adb(new Dvb)}a=RD(Hvb(this.c),302);this.c=a.c;this.f=a;--this.d;return this.Xd(a)};_.Qb=function _o(){if(this.e.g!=this.b){throw Adb(new Jrb)}if(!this.f){throw Adb(new dgb(tve))}yo(this.e,this.f);this.b=this.e.g;this.f=null};_.b=0;_.d=0;_.f=null;var cG=sfb(xve,'HashBiMap/Itr',544);feb(1023,544,Ave,ap);_.Xd=function bp(a){return new cp(this,a)};var WF=sfb(xve,'HashBiMap/1',1023);feb(gwe,358,Kve,cp);_.ld=function dp(){return this.a.g};_.md=function ep(){return this.a.i};_.nd=function fp(a){var b,c,d;c=this.a.i;d=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));if(d==this.a.f&&(dE(a)===dE(c)||a!=null&&pb(a,c))){return a}Nb(!Ho(this.b.a,a,d),a);yo(this.b.a,this.a);b=new kp(this.a.g,this.a.a,a,d);Bo(this.b.a,b,this.a);this.a.e=null;this.a.c=null;this.b.b=this.b.a.g;this.b.f==this.a&&(this.b.f=b);this.a=b;return c};var VF=sfb(xve,'HashBiMap/1/MapEntry',gwe);feb(246,358,{358:1,246:1,3:1,44:1},gp);_.ld=function hp(){return this.g};_.md=function ip(){return this.i};_.nd=function jp(a){throw Adb(new jib)};var mG=sfb(xve,'ImmutableEntry',246);feb(302,246,{358:1,302:1,246:1,3:1,44:1},kp);_.a=0;_.f=0;var XF=sfb(xve,'HashBiMap/BiEntry',302);feb(619,2077,$ve,mp);_.Ac=function vp(a){Ld(this,a)};_.Cc=function yp(){return new Np(this.a)};_.$b=function np(){wo(this.a)};_._b=function op(a){return xo(this.a,a)};_.kc=function pp(){return new Ap(this,this.a)};_.wc=function qp(a){Qb(a);zo(this.a,new Lp(a))};_.xc=function rp(a){return lp(this,a)};_.ec=function sp(){return new Gp(this)};_.zc=function up(a,b){return Eo(this.a,a,b,false)};_.Bc=function wp(a){var b;b=Ho(this.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return null}else{yo(this.a,b);b.e=null;b.c=null;return b.g}};_.gc=function xp(){return this.a.i};_.xd=function zp(){return new Np(this.a)};var bG=sfb(xve,'HashBiMap/Inverse',619);feb(1020,544,Ave,Ap);_.Xd=function Bp(a){return new Cp(this,a)};var ZF=sfb(xve,'HashBiMap/Inverse/1',1020);feb(1021,358,Kve,Cp);_.ld=function Dp(){return this.a.i};_.md=function Ep(){return this.a.g};_.nd=function Fp(a){var b,c,d;d=this.a.g;b=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));if(b==this.a.a&&(dE(a)===dE(d)||a!=null&&pb(a,d))){return a}Nb(!Go(this.b.a.a,a,b),a);yo(this.b.a.a,this.a);c=new kp(a,b,this.a.i,this.a.f);this.a=c;Bo(this.b.a.a,c,null);this.b.b=this.b.a.a.g;return d};var YF=sfb(xve,'HashBiMap/Inverse/1/InverseEntry',1021);feb(620,542,Fve,Gp);_.Kc=function Hp(){return new Jp(this.a.a)};_.Mc=function Ip(a){var b;b=Ho(this.a.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return false}else{yo(this.a.a,b);return true}};var _F=sfb(xve,'HashBiMap/Inverse/InverseKeySet',620);feb(1019,544,Ave,Jp);_.Xd=function Kp(a){return a.i};var $F=sfb(xve,'HashBiMap/Inverse/InverseKeySet/1',1019);feb(1022,1,{},Lp);_.Yd=function Mp(a,b){tp(this.a,a,b)};var aG=sfb(xve,'HashBiMap/Inverse/lambda$0$Type',1022);feb(618,542,Fve,Np);_.Kc=function Op(){return new Qp(this.a)};_.Mc=function Pp(a){var b;b=Go(this.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return false}else{yo(this.a,b);b.e=null;b.c=null;return true}};var eG=sfb(xve,'HashBiMap/KeySet',618);feb(1018,544,Ave,Qp);_.Xd=function Rp(a){return a.g};var dG=sfb(xve,'HashBiMap/KeySet/1',1018);feb(1123,627,zve);var gG=sfb(xve,'HashMultimapGwtSerializationDependencies',1123);feb(271,1123,zve,Tp);_.hc=function Up(){return new atb(Sv(this.a))};_.pd=function Vp(){return new atb(Sv(this.a))};_.a=2;var hG=sfb(xve,'HashMultimap',271);feb(2097,306,Yve);_.Hc=function Yp(a){return this.Zd().Hc(a)};_.dc=function Zp(){return this.Zd().dc()};_.gc=function $p(){return this.Zd().gc()};var iG=sfb(xve,'ImmutableAsList',2097);feb(2030,730,$ve);_.Vd=function aq(){return _l(),new Fy(this.a)};_.Cc=function bq(){return _l(),new Fy(this.a)};_.xd=function cq(){return _l(),new Fy(this.a)};var jG=sfb(xve,'ImmutableBiMap',2030);feb(2075,1,{});var kG=sfb(xve,'ImmutableCollection/Builder',2075);feb(1035,719,awe,dq);var nG=sfb(xve,'ImmutableEnumSet',1035);feb(980,399,yve,fq);_.Xb=function gq(a){return this.a.Xb(a)};var oG=sfb(xve,'ImmutableList/1',980);feb(979,2075,{},hq);var pG=sfb(xve,'ImmutableList/Builder',979);feb(623,204,wve,iq);_.Ob=function jq(){return this.a.Ob()};_.Pb=function kq(){return RD(this.a.Pb(),44).ld()};var rG=sfb(xve,'ImmutableMap/1',623);feb(1054,1,{},lq);_.Kb=function mq(a){return RD(a,44).ld()};var sG=sfb(xve,'ImmutableMap/2methodref$getKey$Type',1054);feb(1053,1,{},oq);var tG=sfb(xve,'ImmutableMap/Builder',1053);feb(2098,2079,awe);_.Md=function pq(){var a;return a=this.b,!a?(this.b=new Xq(this)):a};_.Nd=function qq(){return new Fx(this,Ee(this,$C(jJ,rve,1,this.gc(),5,1)))};var BG=sfb(xve,'ImmutableSet/CachingAsList',2098);feb(2099,2098,awe);_.Kc=function uq(){var a;return a=gn(this.a).Od(),new iq(a)};_.Nd=function rq(){return new Xq(this)};_.Jc=function sq(a){var b,c;Qb(a);c=this.gc();for(b=0;b<c;b++){a.Cd(RD(gn(this.a).Md().Xb(b),44).ld())}};_.Od=function tq(){var a;return a=this.b,um(!a?(this.b=new Xq(this)):a,0)};_.Nc=function vq(){return fk(this.gc(),1296,new Vq(this))};var FG=sfb(xve,'IndexedImmutableSet',2099);feb(1230,2099,awe,xq);_.Kc=function Bq(){var a;return a=gn(this.a).Od(),new iq(a)};_.Hc=function yq(a){return this.a._b(a)};_.Jc=function zq(a){Qb(a);Bvb(this.a,new Eq(a))};_.Od=function Aq(){var a;return a=gn(this.a).Od(),new iq(a)};_.gc=function Cq(){return this.a.gc()};_.Nc=function Dq(){return gk(gn(this.a).Nc(),new lq)};var vG=sfb(xve,'ImmutableMapKeySet',1230);feb(1231,1,{},Eq);_.Yd=function Fq(a,b){_l();this.a.Cd(a)};var uG=sfb(xve,'ImmutableMapKeySet/lambda$0$Type',1231);feb(1227,2078,Xve,Gq);_.Kc=function Kq(){return new Pq(this)};_.Md=function Hq(){var a;a=gn(this.a).Md();return new Sq(this,a)};_.Hc=function Iq(a){return a!=null&&Br(new Pq(this),a)};_.Od=function Jq(){return new Pq(this)};_.gc=function Lq(){return this.a.gc()};_.Nc=function Mq(){return gk(gn(this.a).Nc(),new Nq)};var zG=sfb(xve,'ImmutableMapValues',1227);feb(1228,1,{},Nq);_.Kb=function Oq(a){return RD(a,44).md()};var wG=sfb(xve,'ImmutableMapValues/0methodref$getValue$Type',1228);feb(637,204,wve,Pq);_.Ob=function Qq(){return this.a.Ob()};_.Pb=function Rq(){return RD(this.a.Pb(),44).md()};var xG=sfb(xve,'ImmutableMapValues/1',637);feb(1229,2097,Yve,Sq);_.Zd=function Tq(){return this.a};_.Xb=function Uq(a){return RD(this.b.Xb(a),44).md()};var yG=sfb(xve,'ImmutableMapValues/2',1229);feb(1232,1,{},Vq);_.td=function Wq(a){return wq(this.a,a)};var DG=sfb(xve,'IndexedImmutableSet/0methodref$get$Type',1232);feb(638,2097,Yve,Xq);_.Zd=function Yq(){return this.a};_.Xb=function Zq(a){return wq(this.a,a)};_.gc=function $q(){return this.a.a.gc()};var EG=sfb(xve,'IndexedImmutableSet/1',638);feb(43,1,{},ir);_.Kb=function jr(a){return RD(a,20).Kc()};_.Fb=function kr(a){return this===a};var GG=sfb(xve,'Iterables/10',43);feb(1055,547,Vve,mr);_.Jc=function nr(a){Qb(a);this.b.Jc(new qr(this.a,a))};_.Kc=function or(){return lr(this)};var IG=sfb(xve,'Iterables/4',1055);feb(1056,1,Qve,qr);_.Cd=function rr(a){pr(this.b,this.a,a)};var HG=sfb(xve,'Iterables/4/lambda$0$Type',1056);feb(1057,547,Vve,sr);_.Jc=function tr(a){Qb(a);xgb(this.a,new vr(a,this.b))};_.Kc=function ur(){return Mr(new dMd(this.a),this.b)};var KG=sfb(xve,'Iterables/5',1057);feb(1058,1,Qve,vr);_.Cd=function wr(a){this.a.Cd(Ksd(a))};var JG=sfb(xve,'Iterables/5/lambda$0$Type',1058);feb(1087,204,wve,Or);_.Ob=function Pr(){return this.a.Ob()};_.Pb=function Qr(){return this.a.Pb()};var LG=sfb(xve,'Iterators/1',1087);feb(1088,713,wve,Rr);_.Yb=function Sr(){var a;while(this.b.Ob()){a=this.b.Pb();if(this.a.Lb(a)){return a}}return this.e=2,null};var MG=sfb(xve,'Iterators/5',1088);feb(496,1,Ave);_.Nb=function Ur(a){Ztb(this,a)};_.Ob=function Vr(){return this.b.Ob()};_.Pb=function Wr(){return this.$d(this.b.Pb())};_.Qb=function Xr(){this.b.Qb()};var cI=sfb(xve,'TransformedIterator',496);feb(1089,496,Ave,Yr);_.$d=function Zr(a){return this.a.Kb(a)};var NG=sfb(xve,'Iterators/6',1089);feb(732,204,wve,$r);_.Ob=function _r(){return !this.a};_.Pb=function as(){if(this.a){throw Adb(new Dvb)}this.a=true;return this.b};_.a=false;var OG=sfb(xve,'Iterators/9',732);feb(1086,399,yve,ds);_.Xb=function es(a){return this.a[this.b+a]};_.b=0;var bs;var PG=sfb(xve,'Iterators/ArrayItr',1086);feb(37,1,{37:1,51:1},is);_.Nb=function js(a){Ztb(this,a)};_.Ob=function ks(){return gs(this)};_.Pb=function ls(){return hs(this)};_.Qb=function ms(){if(!this.c){throw Adb(new dgb(tve))}this.c.Qb();this.c=null};var QG=sfb(xve,'Iterators/ConcatenatedIterator',37);feb(22,1,{3:1,34:1,22:1});_.Fd=function rs(a){return ns(this,RD(a,22))};_.Fb=function ts(a){return this===a};_.Hb=function us(){return kFb(this)};_.Ib=function vs(){return ps(this)};_.g=0;var WI=sfb(mve,'Enum',22);feb(549,22,{549:1,3:1,34:1,22:1,51:1},As);_.Nb=function Bs(a){Ztb(this,a)};_.Ob=function Cs(){return false};_.Pb=function Ds(){throw Adb(new Dvb)};_.Qb=function Es(){Vb(false)};var ys;var RG=tfb(xve,'Iterators/EmptyModifiableIterator',549,WI,Gs,Fs);var Hs;feb(1907,627,zve);var XG=sfb(xve,'LinkedHashMultimapGwtSerializationDependencies',1907);feb(1908,1907,zve,Ks);_.hc=function Ms(){return new Jub(Sv(this.b))};_.$b=function Ls(){Nc(this);Ss(this.a,this.a)};_.pd=function Ns(){return new Jub(Sv(this.b))};_.ic=function Os(a){return new it(this,a,this.b)};_.kc=function Ps(){return new Zs(this)};_.lc=function Qs(){var a;return new Swb((a=this.g,RD(!a?(this.g=new xh(this)):a,21)),17)};_.ec=function Rs(){var a;return a=this.i,!a?(this.i=new zf(this,this.c)):a};_.nc=function Us(){return new cw(new Zs(this))};_.oc=function Vs(){var a;return gk(new Swb((a=this.g,RD(!a?(this.g=new xh(this)):a,21)),17),new Ws)};_.b=2;var YG=sfb(xve,'LinkedHashMultimap',1908);feb(1911,1,{},Ws);_.Kb=function Xs(a){return RD(a,44).md()};var SG=sfb(xve,'LinkedHashMultimap/0methodref$getValue$Type',1911);feb(834,1,Ave,Zs);_.Nb=function $s(a){Ztb(this,a)};_.Pb=function at(){return Ys(this)};_.Ob=function _s(){return this.a!=this.b.a};_.Qb=function bt(){Vb(!!this.c);Gc(this.b,this.c.g,this.c.i);this.c=null};var TG=sfb(xve,'LinkedHashMultimap/1',834);feb(227,246,{358:1,246:1,227:1,604:1,3:1,44:1},ct);_._d=function dt(){return RD(Hvb(this.f),604)};_.ae=function et(a){this.c=a};_.be=function ft(a){this.f=a};_.d=0;var UG=sfb(xve,'LinkedHashMultimap/ValueEntry',227);feb(1909,2068,{604:1,20:1,31:1,16:1,21:1},it);_.Fc=function jt(a){var b,c,d,e,f;f=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new ct(this.c,a,f,e);Ts(this.d,d);d.f=this;this.d=d;Ss(RD(Hvb(this.g.a.b),227),d);Ss(d,this.g.a);this.b[b]=d;++this.f;++this.e;gt(this);return true};_.$b=function kt(){var a,b;Mnb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a._d()){b=RD(a,227);Ss(RD(Hvb(b.b),227),RD(Hvb(b.e),227))}this.a=this;this.d=this;++this.e};_.Hc=function lt(a){var b,c;c=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.Jc=function mt(a){var b;Qb(a);for(b=this.a;b!=this;b=b._d()){a.Cd(RD(b,227).i)}};_._d=function nt(){return this.a};_.Kc=function ot(){return new ut(this)};_.Mc=function pt(a){return ht(this,a)};_.ae=function qt(a){this.d=a};_.be=function rt(a){this.a=a};_.gc=function st(){return this.f};_.e=0;_.f=0;var WG=sfb(xve,'LinkedHashMultimap/ValueSet',1909);feb(1910,1,Ave,ut);_.Nb=function vt(a){Ztb(this,a)};_.Ob=function wt(){return tt(this),this.b!=this.c};_.Pb=function xt(){var a,b;tt(this);if(this.b==this.c){throw Adb(new Dvb)}a=RD(this.b,227);b=a.i;this.d=a;this.b=RD(Hvb(a.f),604);return b};_.Qb=function yt(){tt(this);Vb(!!this.d);ht(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var VG=sfb(xve,'LinkedHashMultimap/ValueSet/1',1910);feb(780,2084,zve,Et);_.Zb=function Ft(){var a;return a=this.f,!a?(this.f=new zw(this)):a};_.Fb=function Kt(a){return xw(this,a)};_.cc=function Lt(a){return new su(this,a)};_.fc=function Ot(a){return Ct(this,a)};_.$b=function Gt(){At(this)};_._b=function Ht(a){return Bt(this,a)};_.ac=function It(){return new zw(this)};_.bc=function Jt(){return new vu(this)};_.qc=function Mt(a){return new su(this,a)};_.dc=function Nt(){return !this.a};_.rc=function Pt(a){return Ct(this,a)};_.gc=function Qt(){return this.d};_.c=0;_.d=0;var dH=sfb(xve,'LinkedListMultimap',780);feb(56,31,kwe);_.jd=function eu(a){tvb(this,a)};_.Nc=function fu(){return new Swb(this,16)};_.bd=function Tt(a,b){throw Adb(new kib('Add not supported on this list'))};_.Fc=function Ut(a){this.bd(this.gc(),a);return true};_.cd=function Vt(a,b){var c,d,e;uFb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();this.bd(a++,d);c=true}return c};_.$b=function Wt(){this.ce(0,this.gc())};_.Fb=function Xt(a){return Rt(this,a)};_.Hb=function Yt(){return Cob(this)};_.dd=function Zt(a){return St(this,a)};_.Kc=function $t(){return new Dkb(this)};_.ed=function _t(){return this.fd(0)};_.fd=function au(a){return new Jkb(this,a)};_.gd=function bu(a){throw Adb(new kib('Remove not supported on this list'))};_.ce=function cu(a,b){var c,d;d=this.fd(a);for(c=a;c<b;++c){d.Pb();d.Qb()}};_.hd=function du(a,b){throw Adb(new kib('Set not supported on this list'))};_.kd=function gu(a,b){return new Rkb(this,a,b)};_.j=0;var CJ=sfb(Bve,'AbstractList',56);feb(2062,56,kwe);_.bd=function lu(a,b){hu(this,a,b)};_.cd=function mu(a,b){return iu(this,a,b)};_.Xb=function nu(a){return ju(this,a)};_.Kc=function ou(){return this.fd(0)};_.gd=function pu(a){return ku(this,a)};_.hd=function qu(b,c){var d,e;d=this.fd(b);try{e=d.Pb();d.Wb(c);return e}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't set element "+b))}else throw Adb(a)}};var QJ=sfb(Bve,'AbstractSequentialList',2062);feb(646,2062,kwe,su);_.fd=function tu(a){return ru(this,a)};_.gc=function uu(){var a;a=RD(Wjb(this.a.b,this.b),260);return !a?0:a.a};var $G=sfb(xve,'LinkedListMultimap/1',646);feb(1316,2068,Fve,vu);_.Hc=function wu(a){return Bt(this.a,a)};_.Kc=function xu(){return new Bu(this.a)};_.Mc=function yu(a){return !Ct(this.a,a).a.dc()};_.gc=function zu(){return bkb(this.a.b)};var ZG=sfb(xve,'LinkedListMultimap/1KeySetImpl',1316);feb(1315,1,Ave,Bu);_.Nb=function Cu(a){Ztb(this,a)};_.Ob=function Du(){Au(this);return !!this.c};_.Pb=function Eu(){Au(this);if(!this.c){throw Adb(new Dvb)}this.a=this.c;Ysb(this.d,this.a.a);do{this.c=this.c.b}while(!!this.c&&!Ysb(this.d,this.c.a));return this.a.a};_.Qb=function Fu(){Au(this);Vb(!!this.a);Ar(new Nu(this.e,this.a.a));this.a=null;this.b=this.e.c};_.b=0;var _G=sfb(xve,'LinkedListMultimap/DistinctKeyIterator',1315);feb(260,1,{260:1},Gu);_.a=0;var aH=sfb(xve,'LinkedListMultimap/KeyList',260);feb(511,358,{358:1,511:1,44:1},Hu);_.ld=function Iu(){return this.a};_.md=function Ju(){return this.f};_.nd=function Ku(a){var b;b=this.f;this.f=a;return b};var bH=sfb(xve,'LinkedListMultimap/Node',511);feb(566,1,Jve,Nu,Ou);_.Nb=function Qu(a){Ztb(this,a)};_.Rb=function Pu(a){this.e=zt(this.f,this.b,a,this.c);++this.d;this.a=null};_.Ob=function Ru(){return !!this.c};_.Sb=function Su(){return !!this.e};_.Pb=function Tu(){return Lu(this)};_.Tb=function Uu(){return this.d};_.Ub=function Vu(){return Mu(this)};_.Vb=function Wu(){return this.d-1};_.Qb=function Xu(){Vb(!!this.a);if(this.a!=this.c){this.e=this.a.e;--this.d}else{this.c=this.a.c}Dt(this.f,this.a);this.a=null};_.Wb=function Yu(a){Ub(!!this.a);this.a.f=a};_.d=0;var cH=sfb(xve,'LinkedListMultimap/ValueForKeyIterator',566);feb(1031,56,kwe);_.bd=function iv(a,b){this.a.bd(a,b)};_.cd=function jv(a,b){return this.a.cd(a,b)};_.Hc=function kv(a){return this.a.Hc(a)};_.Xb=function lv(a){return this.a.Xb(a)};_.gd=function mv(a){return this.a.gd(a)};_.hd=function nv(a,b){return this.a.hd(a,b)};_.gc=function ov(){return this.a.gc()};var fH=sfb(xve,'Lists/AbstractListWrapper',1031);feb(1032,1031,mwe);var gH=sfb(xve,'Lists/RandomAccessListWrapper',1032);feb(1034,1032,mwe,pv);_.fd=function qv(a){return this.a.fd(a)};var eH=sfb(xve,'Lists/1',1034);feb(441,56,{441:1,20:1,31:1,56:1,16:1,15:1},uv);_.bd=function vv(a,b){this.a.bd(tv(this,a),b)};_.$b=function wv(){this.a.$b()};_.Xb=function xv(a){return this.a.Xb(sv(this,a))};_.Kc=function yv(){return rv(this,0)};_.fd=function zv(a){return rv(this,a)};_.gd=function Av(a){return this.a.gd(sv(this,a))};_.ce=function Bv(a,b){(Tb(a,b,this.a.gc()),hv(this.a.kd(tv(this,b),tv(this,a)))).$b()};_.hd=function Cv(a,b){return this.a.hd(sv(this,a),b)};_.gc=function Dv(){return this.a.gc()};_.kd=function Ev(a,b){return Tb(a,b,this.a.gc()),hv(this.a.kd(tv(this,b),tv(this,a)))};var jH=sfb(xve,'Lists/ReverseList',441);feb(1030,441,{441:1,20:1,31:1,56:1,16:1,15:1,59:1},Fv);var hH=sfb(xve,'Lists/RandomAccessReverseList',1030);feb(1033,1,Jve,Gv);_.Nb=function Iv(a){Ztb(this,a)};_.Rb=function Hv(a){this.c.Rb(a);this.c.Ub();this.a=false};_.Ob=function Jv(){return this.c.Sb()};_.Sb=function Kv(){return this.c.Ob()};_.Pb=function Lv(){if(!this.c.Sb()){throw Adb(new Dvb)}this.a=true;return this.c.Ub()};_.Tb=function Mv(){return tv(this.b,this.c.Tb())};_.Ub=function Nv(){if(!this.c.Ob()){throw Adb(new Dvb)}this.a=true;return this.c.Pb()};_.Vb=function Ov(){return tv(this.b,this.c.Tb())-1};_.Qb=function Pv(){Vb(this.a);this.c.Qb();this.a=false};_.Wb=function Qv(a){Ub(this.a);this.c.Wb(a)};_.a=false;var iH=sfb(xve,'Lists/ReverseList/1',1033);feb(440,496,Ave,aw);_.$d=function bw(a){return _v(a)};var kH=sfb(xve,'Maps/1',440);feb(712,496,Ave,cw);_.$d=function dw(a){return RD(a,44).md()};var lH=sfb(xve,'Maps/2',712);feb(975,496,Ave,ew);_.$d=function fw(a){return new gp(a,Mw(this.a,a))};var mH=sfb(xve,'Maps/3',975);feb(972,2069,Fve,gw);_.Jc=function hw(a){uj(this.a,a)};_.Kc=function iw(){return this.a.kc()};_.Rc=function jw(){return this.a};_.Nc=function kw(){return this.a.lc()};var oH=sfb(xve,'Maps/IteratorBasedAbstractMap/1',972);feb(973,1,{},lw);_.Yd=function mw(a,b){this.a.Cd(a)};var qH=sfb(xve,'Maps/KeySet/lambda$0$Type',973);feb(971,31,Dve,nw);_.$b=function ow(){this.a.$b()};_.Hc=function pw(a){return this.a.uc(a)};_.Jc=function qw(a){Qb(a);this.a.wc(new vw(a))};_.dc=function rw(){return this.a.dc()};_.Kc=function sw(){return new cw(this.a.vc().Kc())};_.Mc=function tw(b){var c,d;try{return ze(this,b,true)}catch(a){a=zdb(a);if(ZD(a,48)){for(d=this.a.vc().Kc();d.Ob();){c=RD(d.Pb(),44);if(Hb(b,c.md())){this.a.Bc(c.ld());return true}}return false}else throw Adb(a)}};_.gc=function uw(){return this.a.gc()};var tH=sfb(xve,'Maps/Values',971);feb(974,1,{},vw);_.Yd=function ww(a,b){this.a.Cd(b)};var sH=sfb(xve,'Maps/Values/lambda$0$Type',974);feb(752,2085,Cve,zw);_.xc=function Dw(a){return this.a._b(a)?this.a.cc(a):null};_.Bc=function Gw(a){return this.a._b(a)?this.a.fc(a):null};_.$b=function Aw(){this.a.$b()};_._b=function Bw(a){return this.a._b(a)};_.Ec=function Cw(){return new Iw(this)};_.Dc=function(){return this.Ec()};_.dc=function Ew(){return this.a.dc()};_.ec=function Fw(){return this.a.ec()};_.gc=function Hw(){return this.a.ec().gc()};var xH=sfb(xve,'Multimaps/AsMap',752);feb(1134,2069,Fve,Iw);_.Kc=function Jw(){return Rv(this.a.a.ec(),new Nw(this))};_.Rc=function Kw(){return this.a};_.Mc=function Lw(a){var b;if(!Ze(this,a)){return false}b=RD(Hvb(RD(a,44)),44);yw(this.a,b.ld());return true};var wH=sfb(xve,'Multimaps/AsMap/EntrySet',1134);feb(1138,1,{},Nw);_.Kb=function Ow(a){return Mw(this,a)};_.Fb=function Pw(a){return this===a};var vH=sfb(xve,'Multimaps/AsMap/EntrySet/1',1138);feb(552,2087,{552:1,849:1,20:1,31:1,16:1},Sw);_.$b=function Tw(){Nc(this.a)};_.Hc=function Uw(a){return Oc(this.a,a)};_.Jc=function Vw(a){Qb(a);xgb(Pc(this.a),new fx(a))};_.Kc=function Ww(){return new aw(Pc(this.a).a.kc())};_.gc=function Xw(){return this.a.d};_.Nc=function Yw(){return gk(Pc(this.a).Nc(),new Zw)};var DH=sfb(xve,'Multimaps/Keys',552);feb(1136,1,{},Zw);_.Kb=function $w(a){return RD(a,44).ld()};var zH=sfb(xve,'Multimaps/Keys/0methodref$getKey$Type',1136);feb(1135,496,Ave,_w);_.$d=function ax(a){return new ex(RD(a,44))};var BH=sfb(xve,'Multimaps/Keys/1',1135);feb(2088,1,{425:1});_.Fb=function bx(a){var b;if(ZD(a,503)){b=RD(a,425);return RD(this.a.md(),16).gc()==RD(b.a.md(),16).gc()&&Hb(this.a.ld(),b.a.ld())}return false};_.Hb=function cx(){var a;a=this.a.ld();return (a==null?0:tb(a))^RD(this.a.md(),16).gc()};_.Ib=function dx(){var a,b;b=Ghb(this.a.ld());a=RD(this.a.md(),16).gc();return a==1?b:b+' x '+a};var HH=sfb(xve,'Multisets/AbstractEntry',2088);feb(503,2088,{503:1,425:1},ex);var AH=sfb(xve,'Multimaps/Keys/1/1',503);feb(1137,1,Qve,fx);_.Cd=function gx(a){this.a.Cd(RD(a,44).ld())};var CH=sfb(xve,'Multimaps/Keys/lambda$1$Type',1137);feb(1140,1,Qve,jx);_.Cd=function kx(a){hx(RD(a,425))};var EH=sfb(xve,'Multiset/lambda$0$Type',1140);feb(753,1,Qve,lx);_.Cd=function mx(a){ix(this.a,RD(a,425))};var FH=sfb(xve,'Multiset/lambda$1$Type',753);feb(1141,1,{},rx);var GH=sfb(xve,'Multisets/0methodref$add$Type',1141);feb(754,1,{},sx);_.Kb=function tx(a){return px(RD(a,425))};var JH=sfb(xve,'Multisets/lambda$1$Type',754);feb(2106,1,nve);var KH=sfb(xve,'RangeGwtSerializationDependencies',2106);feb(521,2106,{178:1,521:1,3:1,46:1},wx);_.Lb=function xx(a){return vx(this,RD(a,34))};_.Mb=function Bx(a){return vx(this,RD(a,34))};_.Fb=function zx(a){var b;if(ZD(a,521)){b=RD(a,521);return Pk(this.a,b.a)&&Pk(this.b,b.b)}return false};_.Hb=function Ax(){return this.a.Hb()*31+this.b.Hb()};_.Ib=function Cx(){return Dx(this.a,this.b)};var LH=sfb(xve,'Range',521);feb(654,2097,Yve,Fx);_.fd=function Jx(a){return um(this.b,a)};_.Zd=function Gx(){return this.a};_.Xb=function Hx(a){return Qm(this.b,a)};_.Pd=function Ix(a){return um(this.b,a)};var MH=sfb(xve,'RegularImmutableAsList',654);feb(656,2105,Yve,Kx);_.Rd=function Lx(){return this.a};var NH=sfb(xve,'RegularImmutableList',656);feb(548,730,$ve,Mx,Nx);var OH=sfb(xve,'RegularImmutableMap',548);feb(731,719,awe,Qx);var Ox;var PH=sfb(xve,'RegularImmutableSet',731);feb(2074,Eve,Fve);_.Kc=function by(){return new oy(this.a,this.b)};_.Fc=function $x(a){throw Adb(new jib)};_.Gc=function _x(a){throw Adb(new jib)};_.$b=function ay(){throw Adb(new jib)};_.Mc=function cy(a){throw Adb(new jib)};var VH=sfb(xve,'Sets/SetView',2074);feb(976,2074,Fve,ey);_.Kc=function iy(){return new oy(this.a,this.b)};_.Hc=function fy(a){return Bsb(this.a,a)&&this.b.Hc(a)};_.Ic=function gy(a){return Be(this.a,a)&&this.b.Ic(a)};_.dc=function hy(){return Aob(this.b,this.a)};_.Lc=function jy(){return CDb(new SDb(null,new Swb(this.a,1)),new qy(this.b))};_.gc=function ky(){return dy(this)};_.Oc=function ly(){return CDb(new SDb(null,new Swb(this.a,1)),new my(this.b))};var TH=sfb(xve,'Sets/2',976);feb(977,1,nwe,my);_.Mb=function ny(a){return this.a.Hc(a)};var QH=sfb(xve,'Sets/2/0methodref$contains$Type',977);feb(714,713,wve,oy);_.Yb=function py(){var a;while(Msb(this.a)){a=Nsb(this.a);if(this.c.Hc(a)){return a}}return this.e=2,null};var RH=sfb(xve,'Sets/2/1',714);feb(978,1,nwe,qy);_.Mb=function ry(a){return this.a.Hc(a)};var SH=sfb(xve,'Sets/2/1methodref$contains$Type',978);feb(616,2073,{616:1,3:1,20:1,16:1,277:1,21:1,87:1},sy);_.Kd=function ty(){return this.b};_.Ld=function uy(){return this.b};_.Wd=function vy(){return this.b};_.Jc=function wy(a){this.a.Jc(a)};_.Lc=function xy(){return this.a.Lc()};_.Oc=function yy(){return this.a.Oc()};var WH=sfb(xve,'Sets/UnmodifiableNavigableSet',616);feb(2031,2030,$ve,zy);_.Vd=function Ay(){return _l(),new Fy(this.a)};_.Cc=function By(){return _l(),new Fy(this.a)};_.xd=function Cy(){return _l(),new Fy(this.a)};var XH=sfb(xve,'SingletonImmutableBiMap',2031);feb(657,2105,Yve,Dy);_.Rd=function Ey(){return this.a};var YH=sfb(xve,'SingletonImmutableList',657);feb(363,2079,awe,Fy);_.Kc=function Iy(){return new $r(this.a)};_.Hc=function Gy(a){return pb(this.a,a)};_.Od=function Hy(){return new $r(this.a)};_.gc=function Jy(){return 1};var ZH=sfb(xve,'SingletonImmutableSet',363);feb(1148,1,{},My);_.Kb=function Ny(a){return RD(a,159)};var _H=sfb(xve,'Streams/lambda$0$Type',1148);feb(1149,1,owe,Oy);_.de=function Py(){Ky(this.a)};var aI=sfb(xve,'Streams/lambda$1$Type',1149);feb(1725,1724,zve,Ry);_.Zb=function Sy(){var a;return a=this.f,RD(RD(!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a,133),139)};_.hc=function Vy(){return new yAb(this.b)};_.pd=function Wy(){return new yAb(this.b)};_.ec=function Yy(){var a;return a=this.i,RD(RD(!a?(this.i=ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)):a,87),277)};_.ac=function Uy(){return ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)};_.ic=function Xy(a){a==null&&this.a.Ne(a,a);return new yAb(this.b)};var dI=sfb(xve,'TreeMultimap',1725);feb(82,1,{3:1,82:1});_.ee=function pz(a){return new Error(a)};_.fe=function rz(){return this.e};_.ge=function sz(){var a,b,c;c=(this.k==null&&(this.k=$C(rJ,Nve,82,0,0,1)),this.k);b=$C(jJ,rve,1,c.length,5,1);for(a=0;a<c.length;a++){b[a]=c[a].e}return b};_.he=function tz(){return this.f};_.ie=function uz(){return this.g};_.je=function vz(){kz(this,qz(this.ee(lz(this,this.g))));gA(this)};_.Ib=function wz(){return lz(this,this.ie())};_.e=rwe;_.i=false;_.n=true;var rJ=sfb(mve,'Throwable',82);feb(103,82,{3:1,103:1,82:1});var YI=sfb(mve,'Exception',103);feb(63,103,swe,xz,yz);var kJ=sfb(mve,'RuntimeException',63);feb(607,63,swe);var dJ=sfb(mve,'JsException',607);feb(875,607,swe);var jI=sfb(twe,'JavaScriptExceptionBase',875);feb(485,875,{485:1,3:1,103:1,63:1,82:1},Cz);_.ie=function Fz(){Bz(this);return this.c};_.ke=function Gz(){return dE(this.b)===dE(zz)?null:this.b};var zz;var gI=sfb(vwe,'JavaScriptException',485);var hI=sfb(vwe,'JavaScriptObject$',0);var Jz;feb(2047,1,{});var iI=sfb(vwe,'Scheduler',2047);var Nz=0,Oz=0,Pz=-1;feb(902,2047,{},bA);var Zz;var kI=sfb(twe,'SchedulerImpl',902);var eA;feb(2058,1,{});var oI=sfb(twe,'StackTraceCreator/Collector',2058);feb(876,2058,{},mA);_.le=function nA(a){var b={},j;var c=[];a[xwe]=c;var d=arguments.callee.caller;while(d){var e=(fA(),d.name||(d.name=iA(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h<i;h++){if(g[h]===d){return}}}(g||(b[f]=[])).push(d);d=d.caller}};_.me=function oA(a){var b,c,d,e;d=(fA(),a&&a[xwe]?a[xwe]:[]);c=d.length;e=$C(mJ,Nve,319,c,0,1);for(b=0;b<c;b++){e[b]=new ehb(d[b],null,-1)}return e};var lI=sfb(twe,'StackTraceCreator/CollectorLegacy',876);feb(2059,2058,{});_.le=function qA(a){};_.ne=function rA(a,b,c,d){return new ehb(b,a+'@'+d,c<0?-1:c)};_.me=function sA(a){var b,c,d,e,f,g;e=kA(a);f=$C(mJ,Nve,319,0,0,1);b=0;d=e.length;if(d==0){return f}g=pA(this,e[0]);lhb(g.d,wwe)||(f[b++]=g);for(c=1;c<d;c++){f[b++]=pA(this,e[c])}return f};var nI=sfb(twe,'StackTraceCreator/CollectorModern',2059);feb(877,2059,{},tA);_.ne=function uA(a,b,c,d){return new ehb(b,a,-1)};var mI=sfb(twe,'StackTraceCreator/CollectorModernNoSourceMap',877);feb(1064,1,{});var vI=sfb(Zwe,$we,1064);feb(624,1064,{624:1},XA);var VA;var pI=sfb(_we,$we,624);feb(2101,1,{});var wI=sfb(Zwe,axe,2101);feb(2102,2101,{});var qI=sfb(_we,axe,2102);feb(1120,1,{},aB);var ZA;var rI=sfb(_we,'LocaleInfo',1120);feb(2027,1,{},dB);_.a=0;var sI=sfb(_we,'TimeZone',2027);feb(1293,2102,{},jB);var tI=sfb('com.google.gwt.i18n.client.impl.cldr','DateTimeFormatInfoImpl',1293);feb(443,1,{443:1},kB);_.a=false;_.b=0;var uI=sfb(Zwe,'DateTimeFormat/PatternPart',443);feb(206,1,bxe,uB,vB,wB);_.Fd=function xB(a){return lB(this,RD(a,206))};_.Fb=function yB(a){return ZD(a,206)&&Gdb(Hdb(this.q.getTime()),Hdb(RD(a,206).q.getTime()))};_.Hb=function zB(){var a;a=Hdb(this.q.getTime());return Ydb($db(a,Udb(a,32)))};_.Ib=function BB(){var a,b,c;c=-this.q.getTimezoneOffset();a=(c>=0?'+':'')+(c/60|0);b=AB($wnd.Math.abs(c)%60);return (Mrb(),Krb)[this.q.getDay()]+' '+Lrb[this.q.getMonth()]+' '+AB(this.q.getDate())+' '+AB(this.q.getHours())+':'+AB(this.q.getMinutes())+':'+AB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var qK=sfb(Bve,'Date',206);feb(2015,206,bxe,DB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var xI=sfb('com.google.gwt.i18n.shared.impl','DateRecord',2015);feb(2064,1,{});_.pe=function EB(){return null};_.qe=function FB(){return null};_.re=function GB(){return null};_.se=function HB(){return null};_.te=function IB(){return null};var GI=sfb(cxe,'JSONValue',2064);feb(221,2064,{221:1},MB,NB);_.Fb=function OB(a){if(!ZD(a,221)){return false}return Hz(this.a,RD(a,221).a)};_.oe=function PB(){return TB};_.Hb=function QB(){return Iz(this.a)};_.pe=function RB(){return this};_.Ib=function SB(){var a,b,c;c=new dib('[');for(b=0,a=this.a.length;b<a;b++){b>0&&(c.a+=',',c);Yhb(c,JB(this,b))}c.a+=']';return c.a};var yI=sfb(cxe,'JSONArray',221);feb(492,2064,{492:1},XB);_.oe=function YB(){return _B};_.qe=function ZB(){return this};_.Ib=function $B(){return Geb(),''+this.a};_.a=false;var UB,VB;var zI=sfb(cxe,'JSONBoolean',492);feb(997,63,swe,aC);var AI=sfb(cxe,'JSONException',997);feb(1036,2064,{},dC);_.oe=function eC(){return gC};_.Ib=function fC(){return vve};var bC;var BI=sfb(cxe,'JSONNull',1036);feb(263,2064,{263:1},hC);_.Fb=function iC(a){if(!ZD(a,263)){return false}return this.a==RD(a,263).a};_.oe=function jC(){return nC};_.Hb=function kC(){return Nfb(this.a)};_.re=function lC(){return this};_.Ib=function mC(){return this.a+''};_.a=0;var CI=sfb(cxe,'JSONNumber',263);feb(190,2064,{190:1},uC,vC);_.Fb=function wC(a){if(!ZD(a,190)){return false}return Hz(this.a,RD(a,190).a)};_.oe=function xC(){return BC};_.Hb=function yC(){return Iz(this.a)};_.se=function zC(){return this};_.Ib=function AC(){var a,b,c,d,e,f,g;g=new dib('{');a=true;f=oC(this,$C(qJ,Nve,2,0,6,1));for(c=f,d=0,e=c.length;d<e;++d){b=c[d];a?(a=false):(g.a+=pve,g);Zhb(g,Lz(b));g.a+=':';Yhb(g,qC(this,b))}g.a+='}';return g.a};var EI=sfb(cxe,'JSONObject',190);feb(605,Eve,Fve,CC);_.Hc=function DC(a){return bE(a)&&pC(this.a,WD(a))};_.Kc=function EC(){return new Dkb(new mob(this.b))};_.gc=function FC(){return this.b.length};var DI=sfb(cxe,'JSONObject/1',605);var GC;feb(211,2064,{211:1},OC);_.Fb=function PC(a){if(!ZD(a,211)){return false}return lhb(this.a,RD(a,211).a)};_.oe=function QC(){return UC};_.Hb=function RC(){return ohb(this.a)};_.te=function SC(){return this};_.Ib=function TC(){return Lz(this.a)};var FI=sfb(cxe,'JSONString',211);var eD;var ID,JD,KD,LD;feb(2060,1,{533:1});var II=sfb(kxe,'OutputStream',2060);feb(2061,2060,{533:1});var HI=sfb(kxe,'FilterOutputStream',2061);feb(878,2061,{533:1},oeb);var JI=sfb(kxe,'PrintStream',878);feb(427,1,{483:1});_.Ib=function seb(){return this.a};var KI=sfb(mve,'AbstractStringBuilder',427);feb(538,63,swe,teb);var LI=sfb(mve,'ArithmeticException',538);feb(77,63,lxe,ueb,veb);var aJ=sfb(mve,'IndexOutOfBoundsException',77);feb(333,77,{3:1,333:1,103:1,77:1,63:1,82:1},web,xeb);var MI=sfb(mve,'ArrayIndexOutOfBoundsException',333);feb(537,63,swe,yeb,zeb);var NI=sfb(mve,'ArrayStoreException',537);feb(295,82,mxe,Aeb);var XI=sfb(mve,'Error',295);feb(200,295,mxe,Ceb,Deb);var OI=sfb(mve,'AssertionError',200);ND={3:1,484:1,34:1};var Eeb,Feb;var QI=sfb(mve,'Boolean',484);feb(242,1,{3:1,242:1});var Meb;var iJ=sfb(mve,'Number',242);feb(222,242,{3:1,222:1,34:1,242:1},Seb);_.Fd=function Teb(a){return Reb(this,RD(a,222))};_.ue=function Ueb(){return this.a};_.Fb=function Veb(a){return ZD(a,222)&&RD(a,222).a==this.a};_.Hb=function Web(){return this.a};_.Ib=function Xeb(){return ''+this.a};_.a=0;var RI=sfb(mve,'Byte',222);var Yeb;feb(180,1,{3:1,180:1,34:1},bfb);_.Fd=function cfb(a){return afb(this,RD(a,180))};_.Fb=function efb(a){return ZD(a,180)&&RD(a,180).a==this.a};_.Hb=function ffb(){return this.a};_.Ib=function gfb(){return String.fromCharCode(this.a)};_.a=0;var _eb;var SI=sfb(mve,'Character',180);var ifb;feb(212,63,{3:1,212:1,103:1,63:1,82:1},Hfb,Ifb);var TI=sfb(mve,'ClassCastException',212);OD={3:1,34:1,345:1,242:1};var VI=sfb(mve,'Double',345);feb(161,242,{3:1,34:1,161:1,242:1},Tfb,Ufb);_.Fd=function Vfb(a){return Sfb(this,RD(a,161))};_.ue=function Wfb(){return this.a};_.Fb=function Xfb(a){return ZD(a,161)&&Lfb(this.a,RD(a,161).a)};_.Hb=function Yfb(){return eE(this.a)};_.Ib=function $fb(){return ''+this.a};_.a=0;var ZI=sfb(mve,'Float',161);feb(33,63,{3:1,103:1,33:1,63:1,82:1},_fb,agb,bgb);var $I=sfb(mve,'IllegalArgumentException',33);feb(73,63,swe,cgb,dgb);var _I=sfb(mve,'IllegalStateException',73);feb(17,242,{3:1,34:1,17:1,242:1},fgb);_.Fd=function igb(a){return egb(this,RD(a,17))};_.ue=function jgb(){return this.a};_.Fb=function kgb(a){return ZD(a,17)&&RD(a,17).a==this.a};_.Hb=function lgb(){return this.a};_.Ib=function rgb(){return ''+this.a};_.a=0;var bJ=sfb(mve,'Integer',17);var tgb;var vgb;feb(168,242,{3:1,34:1,168:1,242:1},zgb);_.Fd=function Bgb(a){return ygb(this,RD(a,168))};_.ue=function Cgb(){return Xdb(this.a)};_.Fb=function Dgb(a){return ZD(a,168)&&Gdb(RD(a,168).a,this.a)};_.Hb=function Egb(){return Fgb(this.a)};_.Ib=function Ggb(){return ''+Zdb(this.a)};_.a=0;var eJ=sfb(mve,'Long',168);var Igb;feb(2140,1,{});feb(1904,63,swe,Mgb);var fJ=sfb(mve,'NegativeArraySizeException',1904);feb(169,607,{3:1,103:1,169:1,63:1,82:1},Ngb,Ogb);_.ee=function Pgb(a){return new TypeError(a)};var gJ=sfb(mve,'NullPointerException',169);var Qgb,Rgb,Sgb,Tgb;feb(130,33,{3:1,103:1,33:1,130:1,63:1,82:1},Vgb);var hJ=sfb(mve,'NumberFormatException',130);feb(191,242,{3:1,34:1,242:1,191:1},Xgb);_.Fd=function Ygb(a){return Wgb(this,RD(a,191))};_.ue=function Zgb(){return this.a};_.Fb=function $gb(a){return ZD(a,191)&&RD(a,191).a==this.a};_.Hb=function _gb(){return this.a};_.Ib=function ahb(){return ''+this.a};_.a=0;var lJ=sfb(mve,'Short',191);var chb;feb(319,1,{3:1,319:1},ehb);_.Fb=function fhb(a){var b;if(ZD(a,319)){b=RD(a,319);return this.c==b.c&&this.d==b.d&&this.a==b.a&&this.b==b.b}return false};_.Hb=function ghb(){return Tnb(cD(WC(jJ,1),rve,1,5,[sgb(this.c),this.a,this.d,this.b]))};_.Ib=function hhb(){return this.a+'.'+this.d+'('+(this.b!=null?this.b:'Unknown Source')+(this.c>=0?':'+this.c:'')+')'};_.c=0;var mJ=sfb(mve,'StackTraceElement',319);PD={3:1,483:1,34:1,2:1};var qJ=sfb(mve,uwe,2);feb(111,427,{483:1},Qhb,Rhb,Shb);var nJ=sfb(mve,'StringBuffer',111);feb(104,427,{483:1},bib,cib,dib);var oJ=sfb(mve,'StringBuilder',104);feb(702,77,lxe,eib);var pJ=sfb(mve,'StringIndexOutOfBoundsException',702);feb(2145,1,{});var fib;feb(48,63,{3:1,103:1,63:1,82:1,48:1},jib,kib);var sJ=sfb(mve,'UnsupportedOperationException',48);feb(247,242,{3:1,34:1,242:1,247:1},Aib,Bib);_.Fd=function Eib(a){return uib(this,RD(a,247))};_.ue=function Fib(){return Neb(zib(this))};_.Fb=function Gib(a){var b;if(this===a){return true}if(ZD(a,247)){b=RD(a,247);return this.e==b.e&&uib(this,b)==0}return false};_.Hb=function Hib(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Hdb(this.f);this.b=Ydb(Cdb(a,-1));this.b=33*this.b+Ydb(Cdb(Tdb(a,32),-1));this.b=17*this.b+eE(this.e);return this.b}this.b=17*Vib(this.c)+eE(this.e);return this.b};_.Ib=function Iib(){return zib(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var lib,mib,nib,oib,pib,qib,rib,sib;var tJ=sfb('java.math','BigDecimal',247);feb(92,242,{3:1,34:1,242:1,92:1},ajb,bjb,cjb,djb,ejb);_.Fd=function gjb(a){return Qib(this,RD(a,92))};_.ue=function hjb(){return Neb(Ajb(this,0))};_.Fb=function ijb(a){return Sib(this,a)};_.Hb=function ljb(){return Vib(this)};_.Ib=function njb(){return Ajb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Jib,Kib,Lib,Mib,Nib,Oib;var uJ=sfb('java.math','BigInteger',92);var vjb,wjb;var Jjb,Kjb;feb(497,2065,Cve);_.$b=function dkb(){akb(this)};_._b=function ekb(a){return Ujb(this,a)};_.uc=function fkb(a){return Vjb(this,a,this.i)||Vjb(this,a,this.f)};_.vc=function gkb(){return new mkb(this)};_.xc=function hkb(a){return Wjb(this,a)};_.zc=function ikb(a,b){return Zjb(this,a,b)};_.Bc=function jkb(a){return _jb(this,a)};_.gc=function kkb(){return bkb(this)};_.g=0;var yJ=sfb(Bve,'AbstractHashMap',497);feb(267,Eve,Fve,mkb);_.$b=function nkb(){this.a.$b()};_.Hc=function okb(a){return lkb(this,a)};_.Kc=function pkb(){return new vkb(this.a)};_.Mc=function qkb(a){var b;if(lkb(this,a)){b=RD(a,44).ld();this.a.Bc(b);return true}return false};_.gc=function rkb(){return this.a.gc()};var xJ=sfb(Bve,'AbstractHashMap/EntrySet',267);feb(268,1,Ave,vkb);_.Nb=function wkb(a){Ztb(this,a)};_.Pb=function ykb(){return tkb(this)};_.Ob=function xkb(){return this.b};_.Qb=function zkb(){ukb(this)};_.b=false;_.d=0;var wJ=sfb(Bve,'AbstractHashMap/EntrySetIterator',268);feb(426,1,Ave,Dkb);_.Nb=function Ekb(a){Ztb(this,a)};_.Ob=function Fkb(){return Akb(this)};_.Pb=function Gkb(){return Bkb(this)};_.Qb=function Hkb(){Ckb(this)};_.b=0;_.c=-1;var zJ=sfb(Bve,'AbstractList/IteratorImpl',426);feb(98,426,Jve,Jkb);_.Qb=function Pkb(){Ckb(this)};_.Rb=function Kkb(a){Ikb(this,a)};_.Sb=function Lkb(){return this.b>0};_.Tb=function Mkb(){return this.b};_.Ub=function Nkb(){return sFb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Okb(){return this.b-1};_.Wb=function Qkb(a){yFb(this.c!=-1);this.a.hd(this.c,a)};var AJ=sfb(Bve,'AbstractList/ListIteratorImpl',98);feb(244,56,kwe,Rkb);_.bd=function Skb(a,b){wFb(a,this.b);this.c.bd(this.a+a,b);++this.b};_.Xb=function Tkb(a){tFb(a,this.b);return this.c.Xb(this.a+a)};_.gd=function Ukb(a){var b;tFb(a,this.b);b=this.c.gd(this.a+a);--this.b;return b};_.hd=function Vkb(a,b){tFb(a,this.b);return this.c.hd(this.a+a,b)};_.gc=function Wkb(){return this.b};_.a=0;_.b=0;var BJ=sfb(Bve,'AbstractList/SubList',244);feb(266,Eve,Fve,Xkb);_.$b=function Ykb(){this.a.$b()};_.Hc=function Zkb(a){return this.a._b(a)};_.Kc=function $kb(){var a;return a=this.a.vc().Kc(),new blb(a)};_.Mc=function _kb(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function alb(){return this.a.gc()};var EJ=sfb(Bve,'AbstractMap/1',266);feb(541,1,Ave,blb);_.Nb=function clb(a){Ztb(this,a)};_.Ob=function dlb(){return this.a.Ob()};_.Pb=function elb(){var a;return a=RD(this.a.Pb(),44),a.ld()};_.Qb=function flb(){this.a.Qb()};var DJ=sfb(Bve,'AbstractMap/1/1',541);feb(231,31,Dve,glb);_.$b=function hlb(){this.a.$b()};_.Hc=function ilb(a){return this.a.uc(a)};_.Kc=function jlb(){var a;return a=this.a.vc().Kc(),new llb(a)};_.gc=function klb(){return this.a.gc()};var GJ=sfb(Bve,'AbstractMap/2',231);feb(300,1,Ave,llb);_.Nb=function mlb(a){Ztb(this,a)};_.Ob=function nlb(){return this.a.Ob()};_.Pb=function olb(){var a;return a=RD(this.a.Pb(),44),a.md()};_.Qb=function plb(){this.a.Qb()};var FJ=sfb(Bve,'AbstractMap/2/1',300);feb(493,1,{493:1,44:1});_.Fb=function rlb(a){var b;if(!ZD(a,44)){return false}b=RD(a,44);return Fvb(this.d,b.ld())&&Fvb(this.e,b.md())};_.ld=function slb(){return this.d};_.md=function tlb(){return this.e};_.Hb=function ulb(){return Gvb(this.d)^Gvb(this.e)};_.nd=function vlb(a){return qlb(this,a)};_.Ib=function wlb(){return this.d+'='+this.e};var HJ=sfb(Bve,'AbstractMap/AbstractEntry',493);feb(397,493,{493:1,397:1,44:1},xlb);var IJ=sfb(Bve,'AbstractMap/SimpleEntry',397);feb(2082,1,Axe);_.Fb=function ylb(a){var b;if(!ZD(a,44)){return false}b=RD(a,44);return Fvb(this.ld(),b.ld())&&Fvb(this.md(),b.md())};_.Hb=function zlb(){return Gvb(this.ld())^Gvb(this.md())};_.Ib=function Alb(){return this.ld()+'='+this.md()};var JJ=sfb(Bve,Lve,2082);feb(2090,2065,Gve);_.Xc=function Dlb(a){return Vd(this.Ee(a))};_.tc=function Elb(a){return Blb(this,a)};_._b=function Flb(a){return Clb(this,a)};_.vc=function Glb(){return new Plb(this)};_.Tc=function Hlb(){return Klb(this.Ge())};_.Yc=function Ilb(a){return Vd(this.He(a))};_.xc=function Jlb(a){var b;b=a;return Wd(this.Fe(b))};_.$c=function Llb(a){return Vd(this.Ie(a))};_.ec=function Mlb(){return new Ulb(this)};_.Vc=function Nlb(){return Klb(this.Je())};_._c=function Olb(a){return Vd(this.Ke(a))};var OJ=sfb(Bve,'AbstractNavigableMap',2090);feb(629,Eve,Fve,Plb);_.Hc=function Qlb(a){return ZD(a,44)&&Blb(this.b,RD(a,44))};_.Kc=function Rlb(){return this.b.De()};_.Mc=function Slb(a){var b;if(ZD(a,44)){b=RD(a,44);return this.b.Le(b)}return false};_.gc=function Tlb(){return this.b.gc()};var LJ=sfb(Bve,'AbstractNavigableMap/EntrySet',629);feb(1146,Eve,Ive,Ulb);_.Nc=function $lb(){return new $wb(this)};_.$b=function Vlb(){this.a.$b()};_.Hc=function Wlb(a){return Clb(this.a,a)};_.Kc=function Xlb(){var a;a=this.a.vc().b.De();return new _lb(a)};_.Mc=function Ylb(a){if(Clb(this.a,a)){this.a.Bc(a);return true}return false};_.gc=function Zlb(){return this.a.gc()};var NJ=sfb(Bve,'AbstractNavigableMap/NavigableKeySet',1146);feb(1147,1,Ave,_lb);_.Nb=function amb(a){Ztb(this,a)};_.Ob=function bmb(){return Akb(this.a.a)};_.Pb=function cmb(){var a;a=vzb(this.a);return a.ld()};_.Qb=function dmb(){wzb(this.a)};var MJ=sfb(Bve,'AbstractNavigableMap/NavigableKeySet/1',1147);feb(2103,31,Dve);_.Fc=function emb(a){return zFb(lwb(this,a),Bxe),true};_.Gc=function fmb(a){uFb(a);mFb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function gmb(){while(mwb(this)!=null);};var PJ=sfb(Bve,'AbstractQueue',2103);feb(310,31,{4:1,20:1,31:1,16:1},wmb,xmb);_.Fc=function ymb(a){return imb(this,a),true};_.$b=function Amb(){jmb(this)};_.Hc=function Bmb(a){return kmb(new Kmb(this),a)};_.dc=function Cmb(){return nmb(this)};_.Kc=function Dmb(){return new Kmb(this)};_.Mc=function Emb(a){return qmb(new Kmb(this),a)};_.gc=function Fmb(){return this.c-this.b&this.a.length-1};_.Nc=function Gmb(){return new Swb(this,272)};_.Qc=function Hmb(a){var b;b=this.c-this.b&this.a.length-1;a.length<b&&(a=cFb(new Array(b),a));lmb(this,a,b);a.length>b&&bD(a,b,null);return a};_.b=0;_.c=0;var TJ=sfb(Bve,'ArrayDeque',310);feb(458,1,Ave,Kmb);_.Nb=function Lmb(a){Ztb(this,a)};_.Ob=function Mmb(){return this.a!=this.b};_.Pb=function Nmb(){return Imb(this)};_.Qb=function Omb(){Jmb(this)};_.a=0;_.b=0;_.c=-1;var SJ=sfb(Bve,'ArrayDeque/IteratorImpl',458);feb(13,56,Cxe,bnb,cnb,dnb);_.bd=function enb(a,b){Qmb(this,a,b)};_.Fc=function fnb(a){return Rmb(this,a)};_.cd=function gnb(a,b){return Smb(this,a,b)};_.Gc=function hnb(a){return Tmb(this,a)};_.$b=function inb(){aFb(this.c,0)};_.Hc=function jnb(a){return Wmb(this,a,0)!=-1};_.Jc=function knb(a){Umb(this,a)};_.Xb=function lnb(a){return Vmb(this,a)};_.dd=function mnb(a){return Wmb(this,a,0)};_.dc=function nnb(){return this.c.length==0};_.Kc=function onb(){return new Anb(this)};_.gd=function pnb(a){return Xmb(this,a)};_.Mc=function qnb(a){return Ymb(this,a)};_.ce=function rnb(a,b){Zmb(this,a,b)};_.hd=function snb(a,b){return $mb(this,a,b)};_.gc=function tnb(){return this.c.length};_.jd=function unb(a){_mb(this,a)};_.Pc=function vnb(){return UEb(this.c)};_.Qc=function wnb(a){return anb(this,a)};var VJ=sfb(Bve,'ArrayList',13);feb(7,1,Ave,Anb);_.Nb=function Bnb(a){Ztb(this,a)};_.Ob=function Cnb(){return xnb(this)};_.Pb=function Dnb(){return ynb(this)};_.Qb=function Enb(){znb(this)};_.a=0;_.b=-1;var UJ=sfb(Bve,'ArrayList/1',7);feb(2112,$wnd.Function,{},iob);_.Me=function job(a,b){return Qfb(a,b)};feb(151,56,Dxe,mob);_.Hc=function nob(a){return St(this,a)!=-1};_.Jc=function oob(a){var b,c,d,e;uFb(a);for(c=this.a,d=0,e=c.length;d<e;++d){b=c[d];a.Cd(b)}};_.Xb=function pob(a){return kob(this,a)};_.hd=function qob(a,b){var c;c=(tFb(a,this.a.length),this.a[a]);bD(this.a,a,b);return c};_.gc=function rob(){return this.a.length};_.jd=function sob(a){Ynb(this.a,this.a.length,a)};_.Pc=function tob(){return lob(this,$C(jJ,rve,1,this.a.length,5,1))};_.Qc=function uob(a){return lob(this,a)};var WJ=sfb(Bve,'Arrays/ArrayList',151);var vob,wob,xob;feb(953,56,Dxe,Job);_.Hc=function Kob(a){return false};_.Xb=function Lob(a){return Iob(a)};_.Kc=function Mob(){return yob(),Qob(),Pob};_.ed=function Nob(){return yob(),Qob(),Pob};_.gc=function Oob(){return 0};var YJ=sfb(Bve,'Collections/EmptyList',953);feb(954,1,Jve,Rob);_.Nb=function Tob(a){Ztb(this,a)};_.Rb=function Sob(a){throw Adb(new jib)};_.Ob=function Uob(){return false};_.Sb=function Vob(){return false};_.Pb=function Wob(){throw Adb(new Dvb)};_.Tb=function Xob(){return 0};_.Ub=function Yob(){throw Adb(new Dvb)};_.Vb=function Zob(){return -1};_.Qb=function $ob(){throw Adb(new cgb)};_.Wb=function _ob(a){throw Adb(new cgb)};var Pob;var XJ=sfb(Bve,'Collections/EmptyListIterator',954);feb(956,2065,$ve,apb);_._b=function bpb(a){return false};_.uc=function cpb(a){return false};_.vc=function dpb(){return yob(),xob};_.xc=function epb(a){return null};_.ec=function fpb(){return yob(),xob};_.gc=function gpb(){return 0};_.Cc=function hpb(){return yob(),vob};var ZJ=sfb(Bve,'Collections/EmptyMap',956);feb(955,Eve,awe,ipb);_.Hc=function jpb(a){return false};_.Kc=function kpb(){return yob(),Qob(),Pob};_.gc=function lpb(){return 0};var $J=sfb(Bve,'Collections/EmptySet',955);feb(608,56,{3:1,20:1,31:1,56:1,16:1,15:1},mpb);_.Hc=function npb(a){return Fvb(this.a,a)};_.Xb=function opb(a){tFb(a,1);return this.a};_.gc=function ppb(){return 1};var _J=sfb(Bve,'Collections/SingletonList',608);feb(384,1,Wve,xpb);_.Jc=function Dpb(a){xgb(this,a)};_.Lc=function Gpb(){return new SDb(null,this.Nc())};_.Nc=function Jpb(){return new Swb(this,0)};_.Oc=function Kpb(){return new SDb(null,this.Nc())};_.Fc=function ypb(a){return qpb()};_.Gc=function zpb(a){return rpb()};_.$b=function Apb(){spb()};_.Hc=function Bpb(a){return tpb(this,a)};_.Ic=function Cpb(a){return upb(this,a)};_.dc=function Epb(){return this.b.dc()};_.Kc=function Fpb(){return new Ppb(this.b.Kc())};_.Mc=function Hpb(a){return vpb()};_.gc=function Ipb(){return this.b.gc()};_.Pc=function Lpb(){return this.b.Pc()};_.Qc=function Mpb(a){return wpb(this,a)};_.Ib=function Npb(){return jeb(this.b)};var bK=sfb(Bve,'Collections/UnmodifiableCollection',384);feb(383,1,Ave,Ppb);_.Nb=function Qpb(a){Ztb(this,a)};_.Ob=function Rpb(){return this.b.Ob()};_.Pb=function Spb(){return this.b.Pb()};_.Qb=function Tpb(){Opb()};var aK=sfb(Bve,'Collections/UnmodifiableCollectionIterator',383);feb(540,384,Exe,Upb);_.Nc=function fqb(){return new Swb(this,16)};_.bd=function Vpb(a,b){throw Adb(new jib)};_.cd=function Wpb(a,b){throw Adb(new jib)};_.Fb=function Xpb(a){return pb(this.a,a)};_.Xb=function Ypb(a){return this.a.Xb(a)};_.Hb=function Zpb(){return tb(this.a)};_.dd=function $pb(a){return this.a.dd(a)};_.dc=function _pb(){return this.a.dc()};_.ed=function aqb(){return new hqb(this.a.fd(0))};_.fd=function bqb(a){return new hqb(this.a.fd(a))};_.gd=function cqb(a){throw Adb(new jib)};_.hd=function dqb(a,b){throw Adb(new jib)};_.jd=function eqb(a){throw Adb(new jib)};_.kd=function gqb(a,b){return new Upb(this.a.kd(a,b))};var dK=sfb(Bve,'Collections/UnmodifiableList',540);feb(705,383,Jve,hqb);_.Qb=function nqb(){Opb()};_.Rb=function iqb(a){throw Adb(new jib)};_.Sb=function jqb(){return this.a.Sb()};_.Tb=function kqb(){return this.a.Tb()};_.Ub=function lqb(){return this.a.Ub()};_.Vb=function mqb(){return this.a.Vb()};_.Wb=function oqb(a){throw Adb(new jib)};var cK=sfb(Bve,'Collections/UnmodifiableListIterator',705);feb(609,1,Cve,uqb);_.wc=function Aqb(a){Bvb(this,a)};_.yc=function Fqb(a,b,c){return Cvb(this,a,b,c)};_.$b=function vqb(){throw Adb(new jib)};_._b=function wqb(a){return this.c._b(a)};_.uc=function xqb(a){return pqb(this,a)};_.vc=function yqb(){return qqb(this)};_.Fb=function zqb(a){return rqb(this,a)};_.xc=function Bqb(a){return this.c.xc(a)};_.Hb=function Cqb(){return tb(this.c)};_.dc=function Dqb(){return this.c.dc()};_.ec=function Eqb(){return sqb(this)};_.zc=function Gqb(a,b){throw Adb(new jib)};_.Bc=function Hqb(a){throw Adb(new jib)};_.gc=function Iqb(){return this.c.gc()};_.Ib=function Jqb(){return jeb(this.c)};_.Cc=function Kqb(){return tqb(this)};var hK=sfb(Bve,'Collections/UnmodifiableMap',609);feb(396,384,_ve,Lqb);_.Nc=function Oqb(){return new Swb(this,1)};_.Fb=function Mqb(a){return pb(this.b,a)};_.Hb=function Nqb(){return tb(this.b)};var jK=sfb(Bve,'Collections/UnmodifiableSet',396);feb(957,396,_ve,Sqb);_.Hc=function Tqb(a){return Pqb(this,a)};_.Ic=function Uqb(a){return this.b.Ic(a)};_.Kc=function Vqb(){var a;a=this.b.Kc();return new Yqb(a)};_.Pc=function Wqb(){var a;a=this.b.Pc();Rqb(a,a.length);return a};_.Qc=function Xqb(a){return Qqb(this,a)};var gK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet',957);feb(958,1,Ave,Yqb);_.Nb=function Zqb(a){Ztb(this,a)};_.Pb=function _qb(){return new brb(RD(this.a.Pb(),44))};_.Ob=function $qb(){return this.a.Ob()};_.Qb=function arb(){throw Adb(new jib)};var eK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet/1',958);feb(703,1,Axe,brb);_.Fb=function crb(a){return this.a.Fb(a)};_.ld=function drb(){return this.a.ld()};_.md=function erb(){return this.a.md()};_.Hb=function frb(){return this.a.Hb()};_.nd=function grb(a){throw Adb(new jib)};_.Ib=function hrb(){return jeb(this.a)};var fK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry',703);feb(610,540,{20:1,16:1,15:1,59:1},irb);var iK=sfb(Bve,'Collections/UnmodifiableRandomAccessList',610);feb(704,396,bwe,jrb);_.Nc=function mrb(){return new $wb(this)};_.Fb=function krb(a){return pb(this.a,a)};_.Hb=function lrb(){return tb(this.a)};var kK=sfb(Bve,'Collections/UnmodifiableSortedSet',704);feb(858,1,Fxe,nrb);_.Ne=function orb(a,b){var c;return c=ygc(RD(a,12),RD(b,12)),c!=0?c:zgc(RD(a,12),RD(b,12))};_.Fb=function prb(a){return this===a};_.Oe=function qrb(){return new Frb(this)};var lK=sfb(Bve,'Comparator/lambda$0$Type',858);var rrb,srb,trb;feb(769,1,Fxe,wrb);_.Ne=function xrb(a,b){return vrb(RD(a,34),RD(b,34))};_.Fb=function yrb(a){return this===a};_.Oe=function zrb(){return urb(),trb};var mK=sfb(Bve,'Comparators/NaturalOrderComparator',769);feb(1226,1,Fxe,Brb);_.Ne=function Crb(a,b){return Arb(RD(a,34),RD(b,34))};_.Fb=function Drb(a){return this===a};_.Oe=function Erb(){return urb(),srb};var nK=sfb(Bve,'Comparators/ReverseNaturalOrderComparator',1226);feb(52,1,Fxe,Frb);_.Fb=function Hrb(a){return this===a};_.Ne=function Grb(a,b){return this.a.Ne(b,a)};_.Oe=function Irb(){return this.a};var oK=sfb(Bve,'Comparators/ReversedComparator',52);feb(175,63,swe,Jrb);var pK=sfb(Bve,'ConcurrentModificationException',175);var Krb,Lrb;feb(1948,1,Gxe,Prb);_.Pe=function Qrb(a){Nrb(this,a)};_.Ib=function Rrb(){return 'DoubleSummaryStatistics[count = '+Zdb(this.a)+', avg = '+(Idb(this.a,0)?Orb(this)/Xdb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Orb(this)+']'};_.a=0;_.b=pxe;_.c=oxe;_.d=0;_.e=0;_.f=0;var rK=sfb(Bve,'DoubleSummaryStatistics',1948);feb(1868,63,swe,Srb);var sK=sfb(Bve,'EmptyStackException',1868);feb(460,2065,Cve,Zrb);_.zc=function dsb(a,b){return Xrb(this,a,b)};_.$b=function $rb(){Trb(this)};_._b=function _rb(a){return Urb(this,a)};_.uc=function asb(a){var b,c;for(c=new Osb(this.a);c.a<c.c.a.length;){b=Nsb(c);if(Fvb(a,this.b[b.g])){return true}}return false};_.vc=function bsb(){return new hsb(this)};_.xc=function csb(a){return Vrb(this,a)};_.Bc=function esb(a){return Yrb(this,a)};_.gc=function fsb(){return this.a.c};var wK=sfb(Bve,'EnumMap',460);feb(1340,Eve,Fve,hsb);_.$b=function isb(){Trb(this.a)};_.Hc=function jsb(a){return gsb(this,a)};_.Kc=function ksb(){return new nsb(this.a)};_.Mc=function lsb(a){var b;if(gsb(this,a)){b=RD(a,44).ld();Yrb(this.a,b);return true}return false};_.gc=function msb(){return this.a.a.c};var uK=sfb(Bve,'EnumMap/EntrySet',1340);feb(1341,1,Ave,nsb);_.Nb=function osb(a){Ztb(this,a)};_.Pb=function qsb(){return this.b=Nsb(this.a),new ssb(this.c,this.b)};_.Ob=function psb(){return Msb(this.a)};_.Qb=function rsb(){yFb(!!this.b);Yrb(this.c,this.b);this.b=null};var tK=sfb(Bve,'EnumMap/EntrySetIterator',1341);feb(1342,2082,Axe,ssb);_.ld=function tsb(){return this.a};_.md=function usb(){return this.b.b[this.a.g]};_.nd=function vsb(a){return _Eb(this.b.b,this.a.g,a)};var vK=sfb(Bve,'EnumMap/MapEntry',1342);feb(181,Eve,{20:1,31:1,16:1,181:1,21:1});var zK=sfb(Bve,'EnumSet',181);feb(162,181,{20:1,31:1,16:1,181:1,162:1,21:1},Fsb);_.Fc=function Gsb(a){return zsb(this,RD(a,22))};_.Hc=function Hsb(a){return Bsb(this,a)};_.Kc=function Isb(){return new Osb(this)};_.Mc=function Jsb(a){return Dsb(this,a)};_.gc=function Ksb(){return this.c};_.c=0;var yK=sfb(Bve,'EnumSet/EnumSetImpl',162);feb(356,1,Ave,Osb);_.Nb=function Psb(a){Ztb(this,a)};_.Pb=function Rsb(){return Nsb(this)};_.Ob=function Qsb(){return Msb(this)};_.Qb=function Ssb(){yFb(this.b!=-1);bD(this.c.b,this.b,null);--this.c.c;this.b=-1};_.a=-1;_.b=-1;var xK=sfb(Bve,'EnumSet/EnumSetImpl/IteratorImpl',356);feb(45,497,Hxe,Tsb,Usb,Vsb);_.Be=function Wsb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)};_.Ce=function Xsb(a){var b;if(a==null){return 0}b=tb(a);return b|0};var AK=sfb(Bve,'HashMap',45);feb(49,Eve,Ixe,_sb,atb,btb);_.Fc=function dtb(a){return Ysb(this,a)};_.$b=function etb(){this.a.$b()};_.Hc=function ftb(a){return Zsb(this,a)};_.dc=function gtb(){return this.a.gc()==0};_.Kc=function htb(){return this.a.ec().Kc()};_.Mc=function itb(a){return $sb(this,a)};_.gc=function jtb(){return this.a.gc()};var BK=sfb(Bve,'HashSet',49);feb(1897,1,Rve,ltb);_.Dd=function mtb(a){ktb(this,a)};_.Ib=function ntb(){return 'IntSummaryStatistics[count = '+Zdb(this.a)+', avg = '+(Idb(this.a,0)?Xdb(this.d)/Xdb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Zdb(this.d)+']'};_.a=0;_.b=qwe;_.c=lve;_.d=0;var CK=sfb(Bve,'IntSummaryStatistics',1897);feb(1062,1,Vve,ttb);_.Jc=function utb(a){xgb(this,a)};_.Kc=function vtb(){return new wtb(this)};_.c=0;var EK=sfb(Bve,'InternalHashCodeMap',1062);feb(726,1,Ave,wtb);_.Nb=function xtb(a){Ztb(this,a)};_.Pb=function ztb(){return this.d=this.a[this.c++],this.d};_.Ob=function ytb(){var a;if(this.c<this.a.length){return true}a=this.b.next();if(!a.done){this.a=a.value[1];this.c=0;return true}return false};_.Qb=function Atb(){stb(this.e,this.d.ld());this.c!=0&&--this.c};_.c=0;_.d=null;var DK=sfb(Bve,'InternalHashCodeMap/1',726);var Dtb;feb(1060,1,Vve,Ntb);_.Jc=function Otb(a){xgb(this,a)};_.Kc=function Ptb(){return new Qtb(this)};_.c=0;_.d=0;var HK=sfb(Bve,'InternalStringMap',1060);feb(725,1,Ave,Qtb);_.Nb=function Rtb(a){Ztb(this,a)};_.Pb=function Ttb(){return this.c=this.a,this.a=this.b.next(),new Vtb(this.d,this.c,this.d.d)};_.Ob=function Stb(){return !this.a.done};_.Qb=function Utb(){Mtb(this.d,this.c.value[0])};var FK=sfb(Bve,'InternalStringMap/1',725);feb(1061,2082,Axe,Vtb);_.ld=function Wtb(){return this.b.value[0]};_.md=function Xtb(){if(this.a.d!=this.c){return Ktb(this.a,this.b.value[0])}return this.b.value[1]};_.nd=function Ytb(a){return Ltb(this.a,this.b.value[0],a)};_.c=0;var GK=sfb(Bve,'InternalStringMap/2',1061);feb(215,45,Hxe,gub,hub);_.$b=function iub(){aub(this)};_._b=function jub(a){return bub(this,a)};_.uc=function kub(a){var b;b=this.d.a;while(b!=this.d){if(Fvb(b.e,a)){return true}b=b.a}return false};_.vc=function lub(){return new wub(this)};_.xc=function mub(a){return cub(this,a)};_.zc=function nub(a,b){return dub(this,a,b)};_.Bc=function oub(a){return fub(this,a)};_.gc=function pub(){return bkb(this.e)};_.c=false;var LK=sfb(Bve,'LinkedHashMap',215);feb(400,397,{493:1,397:1,400:1,44:1},tub,uub);var IK=sfb(Bve,'LinkedHashMap/ChainEntry',400);feb(715,Eve,Fve,wub);_.$b=function xub(){aub(this.a)};_.Hc=function yub(a){return vub(this,a)};_.Kc=function zub(){return new Dub(this)};_.Mc=function Aub(a){var b;if(vub(this,a)){b=RD(a,44).ld();fub(this.a,b);return true}return false};_.gc=function Bub(){return bkb(this.a.e)};var KK=sfb(Bve,'LinkedHashMap/EntrySet',715);feb(716,1,Ave,Dub);_.Nb=function Eub(a){Ztb(this,a)};_.Pb=function Gub(){return Cub(this)};_.Ob=function Fub(){return this.c!=this.d.a.d};_.Qb=function Hub(){yFb(!!this.a);rFb(this.d.a.e.g,this.b);rub(this.a);_jb(this.d.a.e,this.a.d);this.b=this.d.a.e.g;this.a=null};_.b=0;var JK=sfb(Bve,'LinkedHashMap/EntrySet/EntryIterator',716);feb(174,49,Ixe,Iub,Jub,Kub);var MK=sfb(Bve,'LinkedHashSet',174);feb(67,2062,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1},Yub,Zub);_.Fc=function $ub(a){return Mub(this,a)};_.$b=function _ub(){Xub(this)};_.fd=function avb(a){return Sub(this,a)};_.gc=function bvb(){return this.b};_.b=0;var PK=sfb(Bve,'LinkedList',67);feb(981,1,Jve,hvb);_.Nb=function jvb(a){Ztb(this,a)};_.Rb=function ivb(a){cvb(this,a)};_.Ob=function kvb(){return dvb(this)};_.Sb=function lvb(){return this.b.b!=this.d.a};_.Pb=function mvb(){return evb(this)};_.Tb=function nvb(){return this.a};_.Ub=function ovb(){return fvb(this)};_.Vb=function pvb(){return this.a-1};_.Qb=function qvb(){gvb(this)};_.Wb=function rvb(a){yFb(!!this.c);this.c.c=a};_.a=0;_.c=null;var NK=sfb(Bve,'LinkedList/ListIteratorImpl',981);feb(617,1,{},svb);var OK=sfb(Bve,'LinkedList/Node',617);feb(2057,1,{});var uvb,vvb;var TK=sfb(Bve,'Locale',2057);feb(873,2057,{},xvb);_.Ib=function yvb(){return ''};var RK=sfb(Bve,'Locale/1',873);feb(874,2057,{},zvb);_.Ib=function Avb(){return 'unknown'};var SK=sfb(Bve,'Locale/4',874);feb(112,63,{3:1,103:1,63:1,82:1,112:1},Dvb,Evb);var WK=sfb(Bve,'NoSuchElementException',112);feb(474,1,{474:1},Ovb);_.Fb=function Pvb(a){var b;if(a===this){return true}if(!ZD(a,474)){return false}b=RD(a,474);return Fvb(this.a,b.a)};_.Hb=function Qvb(){return Gvb(this.a)};_.Ib=function Rvb(){return this.a!=null?uve+Ghb(this.a)+')':'Optional.empty()'};var Jvb;var ZK=sfb(Bve,'Optional',474);feb(414,1,{414:1},Xvb,Yvb);_.Fb=function Zvb(a){var b;if(a===this){return true}if(!ZD(a,414)){return false}b=RD(a,414);return this.a==b.a&&Qfb(this.b,b.b)==0};_.Hb=function $vb(){return this.a?eE(this.b):0};_.Ib=function _vb(){return this.a?'OptionalDouble.of('+(''+this.b)+')':'OptionalDouble.empty()'};_.a=false;_.b=0;var Svb;var XK=sfb(Bve,'OptionalDouble',414);feb(524,1,{524:1},dwb,ewb);_.Fb=function fwb(a){var b;if(a===this){return true}if(!ZD(a,524)){return false}b=RD(a,524);return this.a==b.a&&hgb(this.b,b.b)==0};_.Hb=function gwb(){return this.a?this.b:0};_.Ib=function hwb(){return this.a?'OptionalInt.of('+(''+this.b)+')':'OptionalInt.empty()'};_.a=false;_.b=0;var awb;var YK=sfb(Bve,'OptionalInt',524);feb(510,2103,Dve,pwb);_.Gc=function qwb(a){return iwb(this,a)};_.$b=function rwb(){aFb(this.b.c,0)};_.Hc=function swb(a){return (a==null?-1:Wmb(this.b,a,0))!=-1};_.Kc=function twb(){return new zwb(this)};_.Mc=function uwb(a){return nwb(this,a)};_.gc=function vwb(){return this.b.c.length};_.Nc=function wwb(){return new Swb(this,256)};_.Pc=function xwb(){return UEb(this.b.c)};_.Qc=function ywb(a){return anb(this.b,a)};var _K=sfb(Bve,'PriorityQueue',510);feb(1296,1,Ave,zwb);_.Nb=function Awb(a){Ztb(this,a)};_.Ob=function Bwb(){return this.a<this.c.b.c.length};_.Pb=function Cwb(){sFb(this.a<this.c.b.c.length);this.b=this.a++;return Vmb(this.c.b,this.b)};_.Qb=function Dwb(){yFb(this.b!=-1);owb(this.c,this.a=this.b);this.b=-1};_.a=0;_.b=-1;var $K=sfb(Bve,'PriorityQueue/1',1296);feb(234,1,{234:1},Owb,Pwb);_.a=0;_.b=0;var Ewb,Fwb,Gwb=0;var aL=sfb(Bve,'Random',234);feb(25,1,Pve,Swb,Twb,Uwb);_.Ad=function Ywb(a){return (this.a&a)!=0};_.yd=function Vwb(){return this.a};_.zd=function Wwb(){Qwb(this);return this.c};_.Nb=function Xwb(a){Qwb(this);this.d.Nb(a)};_.Bd=function Zwb(a){return Rwb(this,a)};_.a=0;_.c=0;var qL=sfb(Bve,'Spliterators/IteratorSpliterator',25);feb(494,25,Pve,$wb);var cL=sfb(Bve,'SortedSet/1',494);feb(611,1,Gxe,axb);_.Pe=function bxb(a){this.a.Cd(a)};var dL=sfb(Bve,'Spliterator/OfDouble/0methodref$accept$Type',611);feb(612,1,Gxe,cxb);_.Pe=function dxb(a){this.a.Cd(a)};var eL=sfb(Bve,'Spliterator/OfDouble/1methodref$accept$Type',612);feb(613,1,Rve,exb);_.Dd=function fxb(a){this.a.Cd(sgb(a))};var fL=sfb(Bve,'Spliterator/OfInt/2methodref$accept$Type',613);feb(614,1,Rve,gxb);_.Dd=function hxb(a){this.a.Cd(sgb(a))};var gL=sfb(Bve,'Spliterator/OfInt/3methodref$accept$Type',614);feb(625,1,Pve);_.Nb=function nxb(a){_wb(this,a)};_.Ad=function oxb(a){return (this.d&a)!=0};_.yd=function lxb(){return this.d};_.zd=function mxb(){return this.e};_.d=0;_.e=0;var mL=sfb(Bve,'Spliterators/BaseSpliterator',625);feb(736,625,Pve);_.Qe=function qxb(a){ixb(this,a)};_.Nb=function rxb(a){ZD(a,189)?ixb(this,RD(a,189)):ixb(this,new cxb(a))};_.Bd=function sxb(a){return ZD(a,189)?this.Re(RD(a,189)):this.Re(new axb(a))};var hL=sfb(Bve,'Spliterators/AbstractDoubleSpliterator',736);feb(735,625,Pve);_.Qe=function uxb(a){ixb(this,a)};_.Nb=function vxb(a){ZD(a,202)?ixb(this,RD(a,202)):ixb(this,new gxb(a))};_.Bd=function wxb(a){return ZD(a,202)?this.Re(RD(a,202)):this.Re(new exb(a))};var iL=sfb(Bve,'Spliterators/AbstractIntSpliterator',735);feb(499,625,Pve);var jL=sfb(Bve,'Spliterators/AbstractSpliterator',499);feb(706,1,Pve);_.Nb=function Dxb(a){_wb(this,a)};_.Ad=function Exb(a){return (this.b&a)!=0};_.yd=function Bxb(){return this.b};_.zd=function Cxb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var lL=sfb(Bve,'Spliterators/BaseArraySpliterator',706);feb(960,706,Pve,Gxb);_.Se=function Hxb(a,b){Fxb(this,RD(a,41),b)};_.Nb=function Ixb(a){yxb(this,a)};_.Bd=function Jxb(a){return zxb(this,a)};var kL=sfb(Bve,'Spliterators/ArraySpliterator',960);feb(707,706,Pve,Lxb);_.Se=function Nxb(a,b){Kxb(this,RD(a,189),b)};_.Qe=function Oxb(a){yxb(this,a)};_.Nb=function Pxb(a){ZD(a,189)?yxb(this,RD(a,189)):yxb(this,new cxb(a))};_.Re=function Qxb(a){return zxb(this,a)};_.Bd=function Rxb(a){return ZD(a,189)?zxb(this,RD(a,189)):zxb(this,new axb(a))};var nL=sfb(Bve,'Spliterators/DoubleArraySpliterator',707);feb(2066,1,Pve);_.Nb=function Wxb(a){_wb(this,a)};_.Ad=function Xxb(a){return (16448&a)!=0};_.yd=function Uxb(){return 16448};_.zd=function Vxb(){return 0};var Sxb;var pL=sfb(Bve,'Spliterators/EmptySpliterator',2066);feb(959,2066,Pve,$xb);_.Qe=function _xb(a){Yxb(a)};_.Nb=function ayb(a){ZD(a,202)?Yxb(RD(a,202)):Yxb(new gxb(a))};_.Re=function byb(a){return Zxb(a)};_.Bd=function cyb(a){return ZD(a,202)?Zxb(RD(a,202)):Zxb(new exb(a))};var oL=sfb(Bve,'Spliterators/EmptySpliterator/OfInt',959);feb(588,56,Rxe,gyb);_.bd=function hyb(a,b){lyb(a,this.a.c.length+1);Qmb(this.a,a,b)};_.Fc=function iyb(a){return Rmb(this.a,a)};_.cd=function jyb(a,b){lyb(a,this.a.c.length+1);return Smb(this.a,a,b)};_.Gc=function kyb(a){return Tmb(this.a,a)};_.$b=function myb(){aFb(this.a.c,0)};_.Hc=function nyb(a){return Wmb(this.a,a,0)!=-1};_.Ic=function oyb(a){return Be(this.a,a)};_.Jc=function pyb(a){Umb(this.a,a)};_.Xb=function qyb(a){return lyb(a,this.a.c.length),Vmb(this.a,a)};_.dd=function ryb(a){return Wmb(this.a,a,0)};_.dc=function syb(){return this.a.c.length==0};_.Kc=function tyb(){return new Anb(this.a)};_.gd=function uyb(a){return lyb(a,this.a.c.length),Xmb(this.a,a)};_.ce=function vyb(a,b){Zmb(this.a,a,b)};_.hd=function wyb(a,b){return lyb(a,this.a.c.length),$mb(this.a,a,b)};_.gc=function xyb(){return this.a.c.length};_.jd=function yyb(a){_mb(this.a,a)};_.kd=function zyb(a,b){return new Rkb(this.a,a,b)};_.Pc=function Ayb(){return UEb(this.a.c)};_.Qc=function Byb(a){return anb(this.a,a)};_.Ib=function Cyb(){return Fe(this.a)};var EL=sfb(Bve,'Vector',588);feb(824,588,Rxe,Fyb);var rL=sfb(Bve,'Stack',824);feb(213,1,{213:1},Jyb);_.Ib=function Kyb(){return Iyb(this)};var sL=sfb(Bve,'StringJoiner',213);feb(553,2090,{3:1,85:1,139:1,133:1},dzb,ezb);_.$b=function fzb(){Lyb(this)};_.De=function gzb(){return new xzb(this)};_.vc=function hzb(){return new Dzb(this)};_.Ee=function izb(a){return Pyb(this,a,true)};_.Fe=function jzb(a){return Myb(this,a)};_.Ge=function kzb(){return Nyb(this)};_.He=function lzb(a){return Qyb(this,a,true)};_.Ie=function mzb(a){return Pyb(this,a,false)};_.Je=function nzb(){return Oyb(this)};_.Ke=function ozb(a){return Qyb(this,a,false)};_.Zc=function pzb(a,b){return Ryb(this,a,b)};_.zc=function qzb(a,b){return Wyb(this,a,b)};_.Bc=function rzb(a){return Xyb(this,a)};_.Le=function szb(a){return Yyb(this,a)};_.gc=function tzb(){return this.c};_.ad=function uzb(a,b){return czb(this,a,b)};_.c=0;var CL=sfb(Bve,'TreeMap',553);feb(554,1,Ave,xzb,yzb);_.Nb=function zzb(a){Ztb(this,a)};_.Pb=function Bzb(){return vzb(this)};_.Ob=function Azb(){return Akb(this.a)};_.Qb=function Czb(){wzb(this)};var tL=sfb(Bve,'TreeMap/EntryIterator',554);feb(1142,629,Fve,Dzb);_.$b=function Ezb(){Lyb(this.a)};var uL=sfb(Bve,'TreeMap/EntrySet',1142);feb(447,397,{493:1,397:1,44:1,447:1},Fzb);_.b=false;var vL=sfb(Bve,'TreeMap/Node',447);feb(630,1,{},Gzb);_.Ib=function Hzb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var wL=sfb(Bve,'TreeMap/State',630);feb(631,2090,Gve,Kzb);_.De=function Lzb(){return new yzb(this.c,this.f,this.b,this.a,this.e,this.d)};_.vc=function Mzb(){return new Plb(this)};_.Ee=function Nzb(a){return Izb(this,Pyb(this.c,a,true))};_.Fe=function Ozb(a){return Izb(this,Myb(this.c,a))};_.Ge=function Pzb(){var a;return this.f.Te()?this.a?(a=Pyb(this.c,this.b,true)):(a=Pyb(this.c,this.b,false)):(a=Nyb(this.c)),!!a&&Jzb(this,a.d)?a:null};_.He=function Qzb(a){return Izb(this,Qyb(this.c,a,true))};_.Ie=function Rzb(a){return Izb(this,Pyb(this.c,a,false))};_.Je=function Szb(){var a;this.f.Ue()?this.d?(a=Qyb(this.c,this.e,true)):(a=Qyb(this.c,this.e,false)):(a=Oyb(this.c));return !!a&&Jzb(this,a.d)?a:null};_.Ke=function Tzb(a){return Izb(this,Qyb(this.c,a,false))};_.Zc=function Uzb(a,b){if(this.f.Ue()&&this.c.a.Ne(a,this.e)>0){throw Adb(new agb(Sxe+a+' greater than '+this.e))}return this.f.Te()?bzb(this.c,this.b,this.a,a,b):Ryb(this.c,a,b)};_.zc=function Vzb(a,b){if(!Tyb(this.c,this.f,a,this.b,this.a,this.e,this.d)){throw Adb(new agb(a+' outside the range '+this.b+' to '+this.e))}return Wyb(this.c,a,b)};_.Bc=function Wzb(a){var b;b=a;if(!Tyb(this.c,this.f,b,this.b,this.a,this.e,this.d)){return null}return Xyb(this.c,b)};_.Le=function Xzb(a){return Jzb(this,a.ld())&&Yyb(this.c,a)};_.gc=function Yzb(){var a,b,c;this.f.Te()?this.a?(b=Pyb(this.c,this.b,true)):(b=Pyb(this.c,this.b,false)):(b=Nyb(this.c));if(!(!!b&&Jzb(this,b.d)?b:null)){return 0}a=0;for(c=new yzb(this.c,this.f,this.b,this.a,this.e,this.d);Akb(c.a);c.b=RD(Bkb(c.a),44)){++a}return a};_.ad=function Zzb(a,b){if(this.f.Te()&&this.c.a.Ne(a,this.b)<0){throw Adb(new agb(Sxe+a+Txe+this.b))}return this.f.Ue()?bzb(this.c,a,b,this.e,this.d):czb(this.c,a,b)};_.a=false;_.d=false;var BL=sfb(Bve,'TreeMap/SubMap',631);feb(303,22,Uxe,dAb);_.Te=function eAb(){return false};_.Ue=function fAb(){return false};var $zb,_zb,aAb,bAb;var AL=tfb(Bve,'TreeMap/SubMapType',303,WI,hAb,gAb);feb(1143,303,Uxe,iAb);_.Ue=function jAb(){return true};var xL=tfb(Bve,'TreeMap/SubMapType/1',1143,AL,null,null);feb(1144,303,Uxe,kAb);_.Te=function lAb(){return true};_.Ue=function mAb(){return true};var yL=tfb(Bve,'TreeMap/SubMapType/2',1144,AL,null,null);feb(1145,303,Uxe,nAb);_.Te=function oAb(){return true};var zL=tfb(Bve,'TreeMap/SubMapType/3',1145,AL,null,null);var pAb;feb(157,Eve,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},xAb,yAb,zAb);_.Nc=function GAb(){return new $wb(this)};_.Fc=function AAb(a){return rAb(this,a)};_.$b=function BAb(){this.a.$b()};_.Hc=function CAb(a){return this.a._b(a)};_.Kc=function DAb(){return this.a.ec().Kc()};_.Mc=function EAb(a){return wAb(this,a)};_.gc=function FAb(){return this.a.gc()};var DL=sfb(Bve,'TreeSet',157);feb(1082,1,{},JAb);_.Ve=function KAb(a,b){return HAb(this.a,a,b)};var FL=sfb(Vxe,'BinaryOperator/lambda$0$Type',1082);feb(1083,1,{},LAb);_.Ve=function MAb(a,b){return IAb(this.a,a,b)};var GL=sfb(Vxe,'BinaryOperator/lambda$1$Type',1083);feb(952,1,{},NAb);_.Kb=function OAb(a){return a};var HL=sfb(Vxe,'Function/lambda$0$Type',952);feb(395,1,nwe,PAb);_.Mb=function QAb(a){return !this.a.Mb(a)};var IL=sfb(Vxe,'Predicate/lambda$2$Type',395);feb(581,1,{581:1});var JL=sfb(Wxe,'Handler',581);feb(2107,1,nve);_.xe=function TAb(){return 'DUMMY'};_.Ib=function UAb(){return this.xe()};var RAb;var LL=sfb(Wxe,'Level',2107);feb(1706,2107,nve,VAb);_.xe=function WAb(){return 'INFO'};var KL=sfb(Wxe,'Level/LevelInfo',1706);feb(1843,1,{},$Ab);var XAb;var ML=sfb(Wxe,'LogManager',1843);feb(1896,1,nve,aBb);_.b=null;var NL=sfb(Wxe,'LogRecord',1896);feb(525,1,{525:1},oBb);_.e=false;var bBb=false,cBb=false,dBb=false,eBb=false,fBb=false;var OL=sfb(Wxe,'Logger',525);feb(835,581,{581:1},rBb);var PL=sfb(Wxe,'SimpleConsoleLogHandler',835);feb(108,22,{3:1,34:1,22:1,108:1},yBb);var uBb,vBb,wBb;var QL=tfb(Zxe,'Collector/Characteristics',108,WI,ABb,zBb);var BBb;feb(758,1,{},DBb);var RL=sfb(Zxe,'CollectorImpl',758);feb(1074,1,{},RBb);_.Ve=function SBb(a,b){return Hyb(RD(a,213),RD(b,213))};var SL=sfb(Zxe,'Collectors/10methodref$merge$Type',1074);feb(1075,1,{},TBb);_.Kb=function UBb(a){return Iyb(RD(a,213))};var TL=sfb(Zxe,'Collectors/11methodref$toString$Type',1075);feb(1076,1,{},VBb);_.Kb=function WBb(a){return Geb(),SSb(a)?true:false};var UL=sfb(Zxe,'Collectors/12methodref$test$Type',1076);feb(144,1,{},XBb);_.Yd=function YBb(a,b){RD(a,16).Fc(b)};var VL=sfb(Zxe,'Collectors/20methodref$add$Type',144);feb(146,1,{},ZBb);_.Xe=function $Bb(){return new bnb};var WL=sfb(Zxe,'Collectors/21methodref$ctor$Type',146);feb(359,1,{},_Bb);_.Xe=function aCb(){return new _sb};var XL=sfb(Zxe,'Collectors/23methodref$ctor$Type',359);feb(360,1,{},bCb);_.Yd=function cCb(a,b){Ysb(RD(a,49),b)};var YL=sfb(Zxe,'Collectors/24methodref$add$Type',360);feb(1069,1,{},dCb);_.Ve=function eCb(a,b){return EBb(RD(a,15),RD(b,16))};var ZL=sfb(Zxe,'Collectors/4methodref$addAll$Type',1069);feb(1073,1,{},fCb);_.Yd=function gCb(a,b){Gyb(RD(a,213),RD(b,483))};var $L=sfb(Zxe,'Collectors/9methodref$add$Type',1073);feb(1072,1,{},hCb);_.Xe=function iCb(){return new Jyb(this.a,this.b,this.c)};var _L=sfb(Zxe,'Collectors/lambda$15$Type',1072);feb(1077,1,{},jCb);_.Xe=function kCb(){var a;return a=new gub,dub(a,(Geb(),false),new bnb),dub(a,true,new bnb),a};var aM=sfb(Zxe,'Collectors/lambda$22$Type',1077);feb(1078,1,{},lCb);_.Xe=function mCb(){return cD(WC(jJ,1),rve,1,5,[this.a])};var bM=sfb(Zxe,'Collectors/lambda$25$Type',1078);feb(1079,1,{},nCb);_.Yd=function oCb(a,b){GBb(this.a,SD(a))};var cM=sfb(Zxe,'Collectors/lambda$26$Type',1079);feb(1080,1,{},pCb);_.Ve=function qCb(a,b){return HBb(this.a,SD(a),SD(b))};var dM=sfb(Zxe,'Collectors/lambda$27$Type',1080);feb(1081,1,{},rCb);_.Kb=function sCb(a){return SD(a)[0]};var eM=sfb(Zxe,'Collectors/lambda$28$Type',1081);feb(728,1,{},uCb);_.Ve=function vCb(a,b){return tCb(a,b)};var fM=sfb(Zxe,'Collectors/lambda$4$Type',728);feb(145,1,{},wCb);_.Ve=function xCb(a,b){return JBb(RD(a,16),RD(b,16))};var gM=sfb(Zxe,'Collectors/lambda$42$Type',145);feb(361,1,{},yCb);_.Ve=function zCb(a,b){return KBb(RD(a,49),RD(b,49))};var hM=sfb(Zxe,'Collectors/lambda$50$Type',361);feb(362,1,{},ACb);_.Kb=function BCb(a){return RD(a,49)};var iM=sfb(Zxe,'Collectors/lambda$51$Type',362);feb(1068,1,{},CCb);_.Yd=function DCb(a,b){LBb(this.a,RD(a,85),b)};var jM=sfb(Zxe,'Collectors/lambda$7$Type',1068);feb(1070,1,{},ECb);_.Ve=function FCb(a,b){return NBb(RD(a,85),RD(b,85),new dCb)};var kM=sfb(Zxe,'Collectors/lambda$8$Type',1070);feb(1071,1,{},GCb);_.Kb=function HCb(a){return MBb(this.a,RD(a,85))};var lM=sfb(Zxe,'Collectors/lambda$9$Type',1071);feb(550,1,{});_.$e=function OCb(){ICb(this)};_.d=false;var TM=sfb(Zxe,'TerminatableStream',550);feb(827,550,$xe,WCb);_.$e=function XCb(){ICb(this)};var qM=sfb(Zxe,'DoubleStreamImpl',827);feb(1847,736,Pve,$Cb);_.Re=function aDb(a){return ZCb(this,RD(a,189))};_.a=null;var nM=sfb(Zxe,'DoubleStreamImpl/2',1847);feb(1848,1,Gxe,bDb);_.Pe=function cDb(a){_Cb(this.a,a)};var mM=sfb(Zxe,'DoubleStreamImpl/2/lambda$0$Type',1848);feb(1845,1,Gxe,dDb);_.Pe=function eDb(a){YCb(this.a,a)};var oM=sfb(Zxe,'DoubleStreamImpl/lambda$0$Type',1845);feb(1846,1,Gxe,fDb);_.Pe=function gDb(a){Nrb(this.a,a)};var pM=sfb(Zxe,'DoubleStreamImpl/lambda$2$Type',1846);feb(1397,735,Pve,kDb);_.Re=function lDb(a){return jDb(this,RD(a,202))};_.a=0;_.b=0;_.c=0;var rM=sfb(Zxe,'IntStream/5',1397);feb(806,550,$xe,oDb);_.$e=function pDb(){ICb(this)};_._e=function qDb(){return LCb(this),this.a};var vM=sfb(Zxe,'IntStreamImpl',806);feb(807,550,$xe,rDb);_.$e=function sDb(){ICb(this)};_._e=function tDb(){return LCb(this),Txb(),Sxb};var sM=sfb(Zxe,'IntStreamImpl/Empty',807);feb(1687,1,Rve,uDb);_.Dd=function vDb(a){ktb(this.a,a)};var uM=sfb(Zxe,'IntStreamImpl/lambda$4$Type',1687);var RM=ufb(Zxe,'Stream');feb(26,550,{533:1,687:1,848:1},SDb);_.$e=function TDb(){ICb(this)};var wDb;var QM=sfb(Zxe,'StreamImpl',26);feb(1102,499,Pve,YDb);_.Bd=function ZDb(a){while(WDb(this)){if(this.a.Bd(a)){return true}else{ICb(this.b);this.b=null;this.a=null}}return false};var xM=sfb(Zxe,'StreamImpl/1',1102);feb(1103,1,Qve,$Db);_.Cd=function _Db(a){XDb(this.a,RD(a,848))};var wM=sfb(Zxe,'StreamImpl/1/lambda$0$Type',1103);feb(1104,1,nwe,aEb);_.Mb=function bEb(a){return Ysb(this.a,a)};var yM=sfb(Zxe,'StreamImpl/1methodref$add$Type',1104);feb(1105,499,Pve,cEb);_.Bd=function dEb(a){var b;if(!this.a){b=new bnb;this.b.a.Nb(new eEb(b));yob();_mb(b,this.c);this.a=new Swb(b,16)}return Rwb(this.a,a)};_.a=null;var AM=sfb(Zxe,'StreamImpl/5',1105);feb(1106,1,Qve,eEb);_.Cd=function fEb(a){Rmb(this.a,a)};var zM=sfb(Zxe,'StreamImpl/5/2methodref$add$Type',1106);feb(737,499,Pve,hEb);_.Bd=function iEb(a){this.b=false;while(!this.b&&this.c.Bd(new jEb(this,a)));return this.b};_.b=false;var CM=sfb(Zxe,'StreamImpl/FilterSpliterator',737);feb(1096,1,Qve,jEb);_.Cd=function kEb(a){gEb(this.a,this.b,a)};var BM=sfb(Zxe,'StreamImpl/FilterSpliterator/lambda$0$Type',1096);feb(1091,736,Pve,nEb);_.Re=function oEb(a){return mEb(this,RD(a,189))};var EM=sfb(Zxe,'StreamImpl/MapToDoubleSpliterator',1091);feb(1095,1,Qve,pEb);_.Cd=function qEb(a){lEb(this.a,this.b,a)};var DM=sfb(Zxe,'StreamImpl/MapToDoubleSpliterator/lambda$0$Type',1095);feb(1090,735,Pve,tEb);_.Re=function uEb(a){return sEb(this,RD(a,202))};var GM=sfb(Zxe,'StreamImpl/MapToIntSpliterator',1090);feb(1094,1,Qve,vEb);_.Cd=function wEb(a){rEb(this.a,this.b,a)};var FM=sfb(Zxe,'StreamImpl/MapToIntSpliterator/lambda$0$Type',1094);feb(734,499,Pve,zEb);_.Bd=function AEb(a){return yEb(this,a)};var IM=sfb(Zxe,'StreamImpl/MapToObjSpliterator',734);feb(1093,1,Qve,BEb);_.Cd=function CEb(a){xEb(this.a,this.b,a)};var HM=sfb(Zxe,'StreamImpl/MapToObjSpliterator/lambda$0$Type',1093);feb(1092,499,Pve,DEb);_.Bd=function EEb(a){while(Idb(this.b,0)){if(!this.a.Bd(new FEb)){return false}this.b=Vdb(this.b,1)}return this.a.Bd(a)};_.b=0;var KM=sfb(Zxe,'StreamImpl/SkipSpliterator',1092);feb(1097,1,Qve,FEb);_.Cd=function GEb(a){};var JM=sfb(Zxe,'StreamImpl/SkipSpliterator/lambda$0$Type',1097);feb(626,1,Qve,IEb);_.Cd=function JEb(a){HEb(this,a)};var LM=sfb(Zxe,'StreamImpl/ValueConsumer',626);feb(1098,1,Qve,KEb);_.Cd=function LEb(a){xDb()};var MM=sfb(Zxe,'StreamImpl/lambda$0$Type',1098);feb(1099,1,Qve,MEb);_.Cd=function NEb(a){xDb()};var NM=sfb(Zxe,'StreamImpl/lambda$1$Type',1099);feb(1100,1,{},OEb);_.Ve=function PEb(a,b){return UDb(this.a,a,b)};var OM=sfb(Zxe,'StreamImpl/lambda$4$Type',1100);feb(1101,1,Qve,QEb);_.Cd=function REb(a){VDb(this.b,this.a,a)};var PM=sfb(Zxe,'StreamImpl/lambda$5$Type',1101);feb(1107,1,Qve,SEb);_.Cd=function TEb(a){PCb(this.a,RD(a,380))};var SM=sfb(Zxe,'TerminatableStream/lambda$0$Type',1107);feb(2142,1,{});feb(2014,1,{},gFb);var UM=sfb('javaemul.internal','ConsoleLogger',2014);var iFb=0;feb(2134,1,{});feb(1830,1,Qve,FFb);_.Cd=function GFb(a){RD(a,317)};var VM=sfb(eye,'BowyerWatsonTriangulation/lambda$0$Type',1830);feb(1831,1,Qve,HFb);_.Cd=function IFb(a){ye(this.a,RD(a,317).e)};var WM=sfb(eye,'BowyerWatsonTriangulation/lambda$1$Type',1831);feb(1832,1,Qve,JFb);_.Cd=function KFb(a){RD(a,177)};var XM=sfb(eye,'BowyerWatsonTriangulation/lambda$2$Type',1832);feb(1827,1,fye,NFb);_.Ne=function OFb(a,b){return MFb(this.a,RD(a,177),RD(b,177))};_.Fb=function PFb(a){return this===a};_.Oe=function QFb(){return new Frb(this)};var YM=sfb(eye,'NaiveMinST/lambda$0$Type',1827);feb(506,1,{},SFb);var ZM=sfb(eye,'NodeMicroLayout',506);feb(177,1,{177:1},TFb);_.Fb=function UFb(a){var b;if(ZD(a,177)){b=RD(a,177);return Fvb(this.a,b.a)&&Fvb(this.b,b.b)||Fvb(this.a,b.b)&&Fvb(this.b,b.a)}else{return false}};_.Hb=function VFb(){return Gvb(this.a)+Gvb(this.b)};var $M=sfb(eye,'TEdge',177);feb(317,1,{317:1},XFb);_.Fb=function YFb(a){var b;if(ZD(a,317)){b=RD(a,317);return WFb(this,b.a)&&WFb(this,b.b)&&WFb(this,b.c)}else{return false}};_.Hb=function ZFb(){return Gvb(this.a)+Gvb(this.b)+Gvb(this.c)};var _M=sfb(eye,'TTriangle',317);feb(225,1,{225:1},$Fb);var aN=sfb(eye,'Tree',225);feb(1218,1,{},aGb);var cN=sfb(gye,'Scanline',1218);var bN=ufb(gye,hye);feb(1758,1,{},dGb);var dN=sfb(iye,'CGraph',1758);feb(316,1,{316:1},fGb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=pxe;var fN=sfb(iye,'CGroup',316);feb(830,1,{},jGb);var eN=sfb(iye,'CGroup/CGroupBuilder',830);feb(60,1,{60:1},kGb);_.Ib=function lGb(){var a;if(this.j){return WD(this.j.Kb(this))}return lfb(hN),hN.o+'@'+(a=kFb(this)>>>0,a.toString(16))};_.f=0;_.i=pxe;var hN=sfb(iye,'CNode',60);feb(829,1,{},qGb);var gN=sfb(iye,'CNode/CNodeBuilder',829);var vGb;feb(1590,1,{},xGb);_.ff=function yGb(a,b){return 0};_.gf=function zGb(a,b){return 0};var iN=sfb(iye,kye,1590);feb(1853,1,{},AGb);_.cf=function BGb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oxe;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);j=$wnd.Math.min(j,b.a.j.d.c+b.b.a)}n=new Yub;for(g=new Anb(a.a.a);g.a<g.c.c.length;){f=RD(ynb(g),316);f.k=j;f.g==0&&(Pub(n,f,n.c.b,n.c),true)}while(n.b!=0){f=RD(n.b==0?null:(sFb(n.b!=0),Wub(n,n.a.a)),316);e=f.j.d.c;for(m=f.a.a.ec().Kc();m.Ob();){k=RD(m.Pb(),60);p=f.k+k.b.a;!LGb(a,f,a.d)||k.d.c<p?(k.i=p):(k.i=k.d.c)}e-=f.j.i;f.b+=e;a.d==(Cmd(),zmd)||a.d==xmd?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=RD(l.Pb(),60);for(i=k.c.Kc();i.Ob();){h=RD(i.Pb(),60);Dmd(a.d)?(o=a.g.ff(k,h)):(o=a.g.gf(k,h));h.a.k=$wnd.Math.max(h.a.k,k.i+k.d.b+o-h.b.a);MGb(a,h,a.d)&&(h.a.k=$wnd.Math.max(h.a.k,h.d.c-h.b.a));--h.a.g;h.a.g==0&&Mub(n,h.a)}}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.d.c=b.i}};var jN=sfb(iye,'LongestPathCompaction',1853);feb(1756,1,{},VGb);_.e=false;var CGb,DGb,EGb;var lN=sfb(iye,pye,1756);feb(1757,1,Qve,WGb);_.Cd=function XGb(a){NGb(this.a,RD(a,42))};var kN=sfb(iye,qye,1757);feb(1854,1,{},YGb);_.df=function ZGb(a){var b,c,d,e,f,g,h;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b()}for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);for(g=new Anb(a.a.b);g.a<g.c.c.length;){f=RD(ynb(g),60);if(d==f){continue}if(!!d.a&&d.a==f.a){continue}Dmd(a.d)?(h=a.g.gf(d,f)):(h=a.g.ff(d,f));(f.d.c>d.d.c||d.d.c==f.d.c&&d.d.b<f.d.b)&&sGb(f.d.d+f.d.a+h,d.d.d)&&uGb(f.d.d,d.d.d+d.d.a+h)&&d.c.Fc(f)}}};var mN=sfb(iye,'QuadraticConstraintCalculation',1854);feb(529,1,{529:1},cHb);_.a=false;_.b=false;_.c=false;_.d=false;var nN=sfb(iye,rye,529);feb(817,1,{},fHb);_.df=function gHb(a){this.c=a;eHb(this,new xHb)};var tN=sfb(iye,sye,817);feb(1784,1,{693:1},lHb);_.bf=function mHb(a){iHb(this,RD(a,472))};var pN=sfb(iye,tye,1784);feb(1785,1,fye,oHb);_.Ne=function pHb(a,b){return nHb(RD(a,60),RD(b,60))};_.Fb=function qHb(a){return this===a};_.Oe=function rHb(){return new Frb(this)};var oN=sfb(iye,uye,1785);feb(472,1,{472:1},sHb);_.a=false;var qN=sfb(iye,vye,472);feb(1786,1,fye,tHb);_.Ne=function uHb(a,b){return hHb(RD(a,472),RD(b,472))};_.Fb=function vHb(a){return this===a};_.Oe=function wHb(){return new Frb(this)};var rN=sfb(iye,wye,1786);feb(1787,1,xye,xHb);_.Lb=function yHb(a){return RD(a,60),true};_.Fb=function zHb(a){return this===a};_.Mb=function AHb(a){return RD(a,60),true};var sN=sfb(iye,'ScanlineConstraintCalculator/lambda$1$Type',1787);feb(436,22,{3:1,34:1,22:1,436:1},EHb);var BHb,CHb;var uN=tfb(yye,'HighLevelSortingCriterion',436,WI,GHb,FHb);var HHb;feb(435,22,{3:1,34:1,22:1,435:1},MHb);var JHb,KHb;var vN=tfb(yye,'LowLevelSortingCriterion',435,WI,OHb,NHb);var PHb;var B2=ufb(zye,'ILayoutMetaDataProvider');feb(864,1,Eye,ZHb);_.hf=function $Hb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Aye),Fye),'Polyomino Traversal Strategy'),'Traversal strategy for trying different candidate positions for polyominoes.'),XHb),(kid(),eid)),xN),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Bye),Fye),'Polyomino Secondary Sorting Criterion'),'Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion.'),VHb),eid),vN),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Cye),Fye),'Polyomino Primary Sorting Criterion'),'Possible primary sorting criteria for the processing order of polyominoes.'),THb),eid),uN),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Dye),Fye),'Fill Polyominoes'),'Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area.'),(Geb(),true)),cid),QI),xsb(Whd))))};var RHb,SHb,THb,UHb,VHb,WHb,XHb;var wN=sfb(yye,'PolyominoOptions',864);feb(257,22,{3:1,34:1,22:1,257:1},jIb);var _Hb,aIb,bIb,cIb,dIb,eIb,fIb,gIb,hIb;var xN=tfb(yye,'TraversalStrategy',257,WI,lIb,kIb);var mIb;feb(218,1,{218:1},pIb);_.Ib=function qIb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var zN=sfb(Gye,'NEdge',218);feb(182,1,{},wIb);var yN=sfb(Gye,'NEdge/NEdgeBuilder',182);feb(662,1,{},BIb);var AN=sfb(Gye,'NGraph',662);feb(125,1,{125:1},DIb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var DN=sfb(Gye,'NNode',125);feb(808,1,Exe,GIb);_.Jc=function OIb(a){xgb(this,a)};_.Lc=function VIb(){return new SDb(null,new Swb(this,16))};_.jd=function $Ib(a){tvb(this,a)};_.Nc=function _Ib(){return new Swb(this,16)};_.Oc=function aJb(){return new SDb(null,new Swb(this,16))};_.bd=function HIb(a,b){++this.b;Qmb(this.a,a,b)};_.Fc=function IIb(a){return EIb(this,a)};_.cd=function JIb(a,b){++this.b;return Smb(this.a,a,b)};_.Gc=function KIb(a){++this.b;return Tmb(this.a,a)};_.$b=function LIb(){++this.b;aFb(this.a.c,0)};_.Hc=function MIb(a){return Wmb(this.a,a,0)!=-1};_.Ic=function NIb(a){return Be(this.a,a)};_.Xb=function PIb(a){return Vmb(this.a,a)};_.dd=function QIb(a){return Wmb(this.a,a,0)};_.dc=function RIb(){return this.a.c.length==0};_.Kc=function SIb(){return Nr(new Anb(this.a))};_.ed=function TIb(){throw Adb(new jib)};_.fd=function UIb(a){throw Adb(new jib)};_.gd=function WIb(a){++this.b;return Xmb(this.a,a)};_.Mc=function XIb(a){return FIb(this,a)};_.hd=function YIb(a,b){++this.b;return $mb(this.a,a,b)};_.gc=function ZIb(){return this.a.c.length};_.kd=function bJb(a,b){return new Rkb(this.a,a,b)};_.Pc=function cJb(){return UEb(this.a.c)};_.Qc=function dJb(a){return anb(this.a,a)};_.b=0;var BN=sfb(Gye,'NNode/ChangeAwareArrayList',808);feb(275,1,{},gJb);var CN=sfb(Gye,'NNode/NNodeBuilder',275);feb(1695,1,{},BJb);_.a=false;_.f=lve;_.j=0;var EN=sfb(Gye,'NetworkSimplex',1695);feb(1314,1,Qve,HJb);_.Cd=function IJb(a){GJb(this.a,RD(a,695),true,false)};var FN=sfb(Iye,'NodeLabelAndSizeCalculator/lambda$0$Type',1314);feb(565,1,{},PJb);_.b=true;_.c=true;_.d=true;_.e=true;var GN=sfb(Iye,'NodeMarginCalculator',565);feb(217,1,{217:1});_.j=false;_.k=false;var IN=sfb(Jye,'Cell',217);feb(127,217,{127:1,217:1},TJb);_.jf=function UJb(){return SJb(this)};_.kf=function VJb(){var a;a=this.n;return this.a.a+a.b+a.c};var HN=sfb(Jye,'AtomicCell',127);feb(237,22,{3:1,34:1,22:1,237:1},$Jb);var WJb,XJb,YJb;var JN=tfb(Jye,'ContainerArea',237,WI,aKb,_Jb);var bKb;feb(336,217,Lye);var KN=sfb(Jye,'ContainerCell',336);feb(1538,336,Lye,wKb);_.jf=function xKb(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].jf()):(a=vKb(this,rKb(this,true)));return a>0?a+this.n.d+this.n.a:0};_.kf=function yKb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].kf())}else if(this.g){e=vKb(this,pKb(this,null,true))}else{for(b=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),c=0,d=b.length;c<d;++c){a=b[c];e=$wnd.Math.max(e,vKb(this,pKb(this,a,true)))}}return e>0?e+this.n.b+this.n.c:0};_.lf=function zKb(){var a,b,c,d,e;if(this.g){a=pKb(this,null,false);for(c=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),d=0,e=c.length;d<e;++d){b=c[d];nKb(this,b,a)}}else{for(c=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),d=0,e=c.length;d<e;++d){b=c[d];a=pKb(this,b,false);nKb(this,b,a)}}};_.mf=function AKb(){var a,b,c,d;b=this.i;a=this.n;d=rKb(this,false);lKb(this,(ZJb(),WJb),b.d+a.d,d);lKb(this,YJb,b.d+b.a-a.a-d[2],d);c=b.a-a.d-a.a;if(d[0]>0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);lKb(this,XJb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var iKb=0,jKb=0;var LN=sfb(Jye,'GridContainerCell',1538);feb(470,22,{3:1,34:1,22:1,470:1},FKb);var BKb,CKb,DKb;var MN=tfb(Jye,'HorizontalLabelAlignment',470,WI,HKb,GKb);var IKb;feb(314,217,{217:1,314:1},TKb,UKb,VKb);_.jf=function WKb(){return PKb(this)};_.kf=function XKb(){return QKb(this)};_.a=0;_.c=false;var NN=sfb(Jye,'LabelCell',314);feb(252,336,{217:1,336:1,252:1},dLb);_.jf=function eLb(){return YKb(this)};_.kf=function fLb(){return ZKb(this)};_.lf=function iLb(){$Kb(this)};_.mf=function jLb(){_Kb(this)};_.b=0;_.c=0;_.d=false;var SN=sfb(Jye,'StripContainerCell',252);feb(1691,1,nwe,kLb);_.Mb=function lLb(a){return gLb(RD(a,217))};var ON=sfb(Jye,'StripContainerCell/lambda$0$Type',1691);feb(1692,1,{},mLb);_.Ye=function nLb(a){return RD(a,217).kf()};var PN=sfb(Jye,'StripContainerCell/lambda$1$Type',1692);feb(1693,1,nwe,oLb);_.Mb=function pLb(a){return hLb(RD(a,217))};var QN=sfb(Jye,'StripContainerCell/lambda$2$Type',1693);feb(1694,1,{},qLb);_.Ye=function rLb(a){return RD(a,217).jf()};var RN=sfb(Jye,'StripContainerCell/lambda$3$Type',1694);feb(471,22,{3:1,34:1,22:1,471:1},wLb);var sLb,tLb,uLb;var TN=tfb(Jye,'VerticalLabelAlignment',471,WI,yLb,xLb);var zLb;feb(800,1,{},CLb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var WN=sfb(Rye,'NodeContext',800);feb(1536,1,fye,FLb);_.Ne=function GLb(a,b){return ELb(RD(a,64),RD(b,64))};_.Fb=function HLb(a){return this===a};_.Oe=function ILb(){return new Frb(this)};var UN=sfb(Rye,'NodeContext/0methodref$comparePortSides$Type',1536);feb(1537,1,fye,JLb);_.Ne=function KLb(a,b){return DLb(RD(a,117),RD(b,117))};_.Fb=function LLb(a){return this===a};_.Oe=function MLb(){return new Frb(this)};var VN=sfb(Rye,'NodeContext/1methodref$comparePortContexts$Type',1537);feb(164,22,{3:1,34:1,22:1,164:1},kMb);var NLb,OLb,PLb,QLb,RLb,SLb,TLb,ULb,VLb,WLb,XLb,YLb,ZLb,$Lb,_Lb,aMb,bMb,cMb,dMb,eMb,fMb,gMb;var XN=tfb(Rye,'NodeLabelLocation',164,WI,nMb,mMb);var oMb;feb(117,1,{117:1},rMb);_.a=false;var YN=sfb(Rye,'PortContext',117);feb(1541,1,Qve,KMb);_.Cd=function LMb(a){NKb(RD(a,314))};var ZN=sfb(Uye,Vye,1541);feb(1542,1,nwe,MMb);_.Mb=function NMb(a){return !!RD(a,117).c};var $N=sfb(Uye,Wye,1542);feb(1543,1,Qve,OMb);_.Cd=function PMb(a){NKb(RD(a,117).c)};var _N=sfb(Uye,'LabelPlacer/lambda$2$Type',1543);var QMb;feb(1540,1,Qve,YMb);_.Cd=function ZMb(a){RMb();qMb(RD(a,117))};var aO=sfb(Uye,'NodeLabelAndSizeUtilities/lambda$0$Type',1540);feb(801,1,Qve,dNb);_.Cd=function eNb(a){bNb(this.b,this.c,this.a,RD(a,187))};_.a=false;_.c=false;var bO=sfb(Uye,'NodeLabelCellCreator/lambda$0$Type',801);feb(1539,1,Qve,kNb);_.Cd=function lNb(a){jNb(this.a,RD(a,187))};var cO=sfb(Uye,'PortContextCreator/lambda$0$Type',1539);var sNb;feb(1902,1,{},MNb);var eO=sfb(Yye,'GreedyRectangleStripOverlapRemover',1902);feb(1903,1,fye,ONb);_.Ne=function PNb(a,b){return NNb(RD(a,226),RD(b,226))};_.Fb=function QNb(a){return this===a};_.Oe=function RNb(){return new Frb(this)};var dO=sfb(Yye,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1903);feb(1849,1,{},YNb);_.a=5;_.e=0;var kO=sfb(Yye,'RectangleStripOverlapRemover',1849);feb(1850,1,fye,aOb);_.Ne=function bOb(a,b){return ZNb(RD(a,226),RD(b,226))};_.Fb=function cOb(a){return this===a};_.Oe=function dOb(){return new Frb(this)};var fO=sfb(Yye,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1850);feb(1852,1,fye,eOb);_.Ne=function fOb(a,b){return $Nb(RD(a,226),RD(b,226))};_.Fb=function gOb(a){return this===a};_.Oe=function hOb(){return new Frb(this)};var gO=sfb(Yye,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1852);feb(417,22,{3:1,34:1,22:1,417:1},nOb);var iOb,jOb,kOb,lOb;var hO=tfb(Yye,'RectangleStripOverlapRemover/OverlapRemovalDirection',417,WI,pOb,oOb);var qOb;feb(226,1,{226:1},sOb);var iO=sfb(Yye,'RectangleStripOverlapRemover/RectangleNode',226);feb(1851,1,Qve,tOb);_.Cd=function uOb(a){TNb(this.a,RD(a,226))};var jO=sfb(Yye,'RectangleStripOverlapRemover/lambda$1$Type',1851);feb(1323,1,fye,xOb);_.Ne=function yOb(a,b){return wOb(RD(a,176),RD(b,176))};_.Fb=function zOb(a){return this===a};_.Oe=function AOb(){return new Frb(this)};var oO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1323);feb(1326,1,{},BOb);_.Kb=function COb(a){return RD(a,334).a};var lO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1326);feb(1327,1,nwe,DOb);_.Mb=function EOb(a){return RD(a,332).a};var mO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1327);feb(1328,1,nwe,FOb);_.Mb=function GOb(a){return RD(a,332).a};var nO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1328);feb(1321,1,fye,IOb);_.Ne=function JOb(a,b){return HOb(RD(a,176),RD(b,176))};_.Fb=function KOb(a){return this===a};_.Oe=function LOb(){return new Frb(this)};var qO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1321);feb(1324,1,{},MOb);_.Kb=function NOb(a){return RD(a,334).a};var pO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1324);feb(781,1,fye,POb);_.Ne=function QOb(a,b){return OOb(RD(a,176),RD(b,176))};_.Fb=function ROb(a){return this===a};_.Oe=function SOb(){return new Frb(this)};var rO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionsComparator',781);feb(1319,1,fye,UOb);_.Ne=function VOb(a,b){return TOb(RD(a,330),RD(b,330))};_.Fb=function WOb(a){return this===a};_.Oe=function XOb(){return new Frb(this)};var tO=sfb($ye,'PolyominoCompactor/MinPerimeterComparator',1319);feb(1320,1,fye,ZOb);_.Ne=function $Ob(a,b){return YOb(RD(a,330),RD(b,330))};_.Fb=function _Ob(a){return this===a};_.Oe=function aPb(){return new Frb(this)};var sO=sfb($ye,'PolyominoCompactor/MinPerimeterComparatorWithShape',1320);feb(1322,1,fye,cPb);_.Ne=function dPb(a,b){return bPb(RD(a,176),RD(b,176))};_.Fb=function ePb(a){return this===a};_.Oe=function fPb(){return new Frb(this)};var vO=sfb($ye,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1322);feb(1325,1,{},gPb);_.Kb=function hPb(a){return RD(a,334).a};var uO=sfb($ye,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1325);feb(782,1,{},kPb);_.Ve=function lPb(a,b){return jPb(this,RD(a,42),RD(b,176))};var wO=sfb($ye,'SuccessorCombination',782);feb(649,1,{},nPb);_.Ve=function oPb(a,b){var c;return mPb((c=RD(a,42),RD(b,176),c))};var xO=sfb($ye,'SuccessorJitter',649);feb(648,1,{},qPb);_.Ve=function rPb(a,b){var c;return pPb((c=RD(a,42),RD(b,176),c))};var yO=sfb($ye,'SuccessorLineByLine',648);feb(573,1,{},tPb);_.Ve=function uPb(a,b){var c;return sPb((c=RD(a,42),RD(b,176),c))};var zO=sfb($ye,'SuccessorManhattan',573);feb(1344,1,{},wPb);_.Ve=function xPb(a,b){var c;return vPb((c=RD(a,42),RD(b,176),c))};var AO=sfb($ye,'SuccessorMaxNormWindingInMathPosSense',1344);feb(409,1,{},APb);_.Ve=function BPb(a,b){return yPb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var CO=sfb($ye,'SuccessorQuadrantsGeneric',409);feb(1345,1,{},CPb);_.Kb=function DPb(a){return RD(a,334).a};var BO=sfb($ye,'SuccessorQuadrantsGeneric/lambda$0$Type',1345);feb(332,22,{3:1,34:1,22:1,332:1},JPb);_.a=false;var EPb,FPb,GPb,HPb;var DO=tfb(dze,eze,332,WI,LPb,KPb);var MPb;feb(1317,1,{});_.Ib=function UPb(){var a,b,c,d,e,f;c=' ';a=sgb(0);for(e=0;e<this.o;e++){c+=''+a.a;a=sgb(OPb(a.a))}c+='\n';a=sgb(0);for(f=0;f<this.p;f++){c+=''+a.a;a=sgb(OPb(a.a));for(d=0;d<this.o;d++){b=SPb(this,d,f);Ddb(b,0)==0?(c+='_'):Ddb(b,1)==0?(c+='X'):(c+='0')}c+='\n'}return zhb(c,0,c.length-1)};_.o=0;_.p=0;var HO=sfb(dze,'TwoBitGrid',1317);feb(330,1317,{330:1},gQb);_.j=0;_.k=0;var EO=sfb(dze,'PlanarGrid',330);feb(176,330,{330:1,176:1});_.g=0;_.i=0;var FO=sfb(dze,'Polyomino',176);var U5=ufb(jze,kze);feb(137,1,lze,qQb);_.qf=function uQb(a,b){return oQb(this,a,b)};_.nf=function rQb(){return lQb(this)};_.of=function sQb(a){return mQb(this,a)};_.pf=function tQb(a){return nQb(this,a)};var W5=sfb(jze,'MapPropertyHolder',137);feb(1318,137,lze,vQb);var GO=sfb(dze,'Polyominoes',1318);var wQb=false,xQb,yQb;feb(1828,1,Qve,GQb);_.Cd=function HQb(a){AQb(RD(a,225))};var IO=sfb(mze,'DepthFirstCompaction/0methodref$compactTree$Type',1828);feb(825,1,Qve,IQb);_.Cd=function JQb(a){DQb(this.a,RD(a,225))};var JO=sfb(mze,'DepthFirstCompaction/lambda$1$Type',825);feb(1829,1,Qve,KQb);_.Cd=function LQb(a){EQb(this.a,this.b,this.c,RD(a,225))};var KO=sfb(mze,'DepthFirstCompaction/lambda$2$Type',1829);var MQb,NQb;feb(68,1,{68:1},TQb);var LO=sfb(mze,'Node',68);feb(1214,1,{},WQb);var QO=sfb(mze,'ScanlineOverlapCheck',1214);feb(1215,1,{693:1},$Qb);_.bf=function _Qb(a){YQb(this,RD(a,450))};var NO=sfb(mze,'ScanlineOverlapCheck/OverlapsScanlineHandler',1215);feb(1216,1,fye,bRb);_.Ne=function cRb(a,b){return aRb(RD(a,68),RD(b,68))};_.Fb=function dRb(a){return this===a};_.Oe=function eRb(){return new Frb(this)};var MO=sfb(mze,'ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type',1216);feb(450,1,{450:1},fRb);_.a=false;var OO=sfb(mze,'ScanlineOverlapCheck/Timestamp',450);feb(1217,1,fye,gRb);_.Ne=function hRb(a,b){return XQb(RD(a,450),RD(b,450))};_.Fb=function iRb(a){return this===a};_.Oe=function jRb(){return new Frb(this)};var PO=sfb(mze,'ScanlineOverlapCheck/lambda$0$Type',1217);feb(557,1,{},kRb);var RO=sfb(nze,'SVGImage',557);feb(334,1,{334:1},lRb);_.Ib=function mRb(){return '('+this.a+pve+this.b+pve+this.c+')'};var SO=sfb(nze,'UniqueTriple',334);feb(205,1,oze);var f2=sfb(pze,'AbstractLayoutProvider',205);feb(1114,205,oze,pRb);_.rf=function qRb(a,b){var c,d,e,f;b.Ug(qze,1);this.a=Kfb(UD(Gxd(a,(tSb(),sSb))));if(Hxd(a,iSb)){e=WD(Gxd(a,iSb));c=sgd(ygd(),e);if(c){d=RD(ltd(c.f),205);d.rf(a,b.eh(1))}}f=new rTb(this.a);this.b=pTb(f,a);switch(RD(Gxd(a,(eSb(),aSb)),488).g){case 0:sRb(new wRb,this.b);Ixd(a,lSb,mQb(this.b,lSb));break;default:gib();String.fromCharCode(10);}hTb(f);Ixd(a,kSb,this.b);b.Vg()};_.a=0;var TO=sfb(rze,'DisCoLayoutProvider',1114);feb(1208,1,{},wRb);_.c=false;_.e=0;_.f=0;var UO=sfb(rze,'DisCoPolyominoCompactor',1208);feb(567,1,{567:1},DRb);_.b=true;var VO=sfb(sze,'DCComponent',567);feb(406,22,{3:1,34:1,22:1,406:1},JRb);_.a=false;var ERb,FRb,GRb,HRb;var WO=tfb(sze,'DCDirection',406,WI,LRb,KRb);var MRb;feb(272,137,{3:1,272:1,96:1,137:1},ORb);var XO=sfb(sze,'DCElement',272);feb(407,1,{407:1},QRb);_.c=0;var YO=sfb(sze,'DCExtension',407);feb(762,137,lze,TRb);var ZO=sfb(sze,'DCGraph',762);feb(488,22,{3:1,34:1,22:1,488:1},WRb);var URb;var $O=tfb(tze,uze,488,WI,YRb,XRb);var ZRb;feb(865,1,Eye,fSb);_.hf=function gSb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vze),zze),'Connected Components Compaction Strategy'),'Strategy for packing different connected components in order to save space and enhance readability of a graph.'),bSb),(kid(),eid)),$O),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,wze),zze),'Connected Components Layout Algorithm'),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),iid),qJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,xze),'debug'),'DCGraph'),'Access to the DCGraph is intended for the debug view,'),hid),jJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,yze),'debug'),'List of Polyominoes'),'Access to the polyominoes is intended for the debug view,'),hid),jJ),xsb(Whd))));uSb((new vSb,a))};var _Rb,aSb,bSb,cSb,dSb;var _O=sfb(tze,'DisCoMetaDataProvider',865);feb(1010,1,Eye,vSb);_.hf=function wSb(a){uSb(a)};var hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb;var bP=sfb(tze,'DisCoOptions',1010);feb(1011,1,{},xSb);_.sf=function ySb(){var a;return a=new pRb,a};_.tf=function zSb(a){};var aP=sfb(tze,'DisCoOptions/DiscoFactory',1011);feb(568,176,{330:1,176:1,568:1},DSb);_.a=0;_.b=0;_.c=0;_.d=0;var cP=sfb('org.eclipse.elk.alg.disco.structures','DCPolyomino',568);var ESb,FSb,GSb;feb(1286,1,nwe,TSb);_.Mb=function USb(a){return SSb(a)};var dP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$0$Type',1286);feb(1287,1,{},VSb);_.Kb=function WSb(a){return HSb(),JGd(RD(a,74))};var eP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$1$Type',1287);feb(1288,1,nwe,XSb);_.Mb=function YSb(a){return NSb(RD(a,74))};var fP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$2$Type',1288);feb(1289,1,{},ZSb);_.Kb=function $Sb(a){return HSb(),LGd(RD(a,74))};var gP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$3$Type',1289);feb(1290,1,nwe,_Sb);_.Mb=function aTb(a){return OSb(RD(a,74))};var hP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$4$Type',1290);feb(1291,1,nwe,bTb);_.Mb=function cTb(a){return PSb(this.a,RD(a,74))};var iP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$5$Type',1291);feb(1292,1,{},dTb);_.Kb=function eTb(a){return QSb(this.a,RD(a,74))};var jP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$6$Type',1292);feb(1205,1,{},rTb);_.a=0;var mP=sfb(Fze,'ElkGraphTransformer',1205);feb(1206,1,{},tTb);_.Yd=function uTb(a,b){sTb(this,RD(a,167),RD(b,272))};var lP=sfb(Fze,'ElkGraphTransformer/OffsetApplier',1206);feb(1207,1,Qve,wTb);_.Cd=function xTb(a){vTb(this,RD(a,8))};var kP=sfb(Fze,'ElkGraphTransformer/OffsetApplier/OffSetToChainApplier',1207);feb(760,1,{},DTb);var oP=sfb(Kze,Lze,760);feb(1195,1,fye,FTb);_.Ne=function GTb(a,b){return ETb(RD(a,235),RD(b,235))};_.Fb=function HTb(a){return this===a};_.Oe=function ITb(){return new Frb(this)};var nP=sfb(Kze,Mze,1195);feb(1196,1,Qve,OTb);_.Cd=function PTb(a){NTb(this.b,this.a,RD(a,250))};var pP=sfb(Kze,Nze,1196);feb(738,205,oze,TTb);_.rf=function UTb(a,b){QTb(this,a,b)};var qP=sfb(Kze,'ForceLayoutProvider',738);feb(309,137,{3:1,309:1,96:1,137:1});var wP=sfb(Oze,'FParticle',309);feb(250,309,{3:1,250:1,309:1,96:1,137:1},WTb);_.Ib=function XTb(){var a;if(this.a){a=Wmb(this.a.a,this,0);return a>=0?'b'+a+'['+bUb(this.a)+']':'b['+bUb(this.a)+']'}return 'b_'+kFb(this)};var rP=sfb(Oze,'FBendpoint',250);feb(289,137,{3:1,289:1,96:1,137:1},cUb);_.Ib=function dUb(){return bUb(this)};var sP=sfb(Oze,'FEdge',289);feb(235,137,{3:1,235:1,96:1,137:1},gUb);var tP=sfb(Oze,'FGraph',235);feb(453,309,{3:1,453:1,309:1,96:1,137:1},iUb);_.Ib=function jUb(){return this.b==null||this.b.length==0?'l['+bUb(this.a)+']':'l_'+this.b};var uP=sfb(Oze,'FLabel',453);feb(153,309,{3:1,153:1,309:1,96:1,137:1},lUb);_.Ib=function mUb(){return kUb(this)};_.a=0;var vP=sfb(Oze,'FNode',153);feb(2100,1,{});_.vf=function rUb(a){nUb(this,a)};_.wf=function sUb(){oUb(this)};_.d=0;var xP=sfb(Qze,'AbstractForceModel',2100);feb(641,2100,{641:1},tUb);_.uf=function vUb(a,b){var c,d,e,f,g;qUb(this.f,a,b);e=ojd(ajd(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-ejd(a.e)/2-ejd(b.e)/2);c=fUb(this.e,a,b);c>0?(f=-uUb(d,this.c)*c):(f=yUb(d,this.b)*RD(mQb(a,(yVb(),lVb)),17).a);ijd(e,f/g);return e};_.vf=function wUb(a){nUb(this,a);this.a=RD(mQb(a,(yVb(),aVb)),17).a;this.c=Kfb(UD(mQb(a,rVb)));this.b=Kfb(UD(mQb(a,nVb)))};_.xf=function xUb(a){return a<this.a};_.a=0;_.b=0;_.c=0;var yP=sfb(Qze,'EadesModel',641);feb(642,2100,{642:1},zUb);_.uf=function BUb(a,b){var c,d,e,f,g;qUb(this.f,a,b);e=ojd(ajd(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-ejd(a.e)/2-ejd(b.e)/2);f=FUb(d,this.a)*RD(mQb(a,(yVb(),lVb)),17).a;c=fUb(this.e,a,b);c>0&&(f-=AUb(d,this.a)*c);ijd(e,f*this.b/g);return e};_.vf=function CUb(a){var b,c,d,e,f,g,h;nUb(this,a);this.b=Kfb(UD(mQb(a,(yVb(),sVb))));this.c=this.b/RD(mQb(a,aVb),17).a;d=a.e.c.length;f=0;e=0;for(h=new Anb(a.e);h.a<h.c.c.length;){g=RD(ynb(h),153);f+=g.e.a;e+=g.e.b}b=f*e;c=Kfb(UD(mQb(a,rVb)))*Tye;this.a=$wnd.Math.sqrt(b/(2*d))*c};_.wf=function DUb(){oUb(this);this.b-=this.c};_.xf=function EUb(a){return this.b>0};_.a=0;_.b=0;_.c=0;var zP=sfb(Qze,'FruchtermanReingoldModel',642);feb(860,1,Eye,PUb);_.hf=function QUb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Rze),''),'Force Model'),'Determines the model for force calculation.'),IUb),(kid(),eid)),BP),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Sze),''),'Iterations'),'The number of iterations on the force model.'),sgb(300)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Tze),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Uze),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),Vze),did),VI),xsb(Whd))));zgd(a,Uze,Rze,NUb);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Wze),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),did),VI),xsb(Whd))));zgd(a,Wze,Rze,KUb);zVb((new AVb,a))};var GUb,HUb,IUb,JUb,KUb,LUb,MUb,NUb;var AP=sfb(Xze,'ForceMetaDataProvider',860);feb(432,22,{3:1,34:1,22:1,432:1},UUb);var RUb,SUb;var BP=tfb(Xze,'ForceModelStrategy',432,WI,WUb,VUb);var XUb;feb(Awe,1,Eye,AVb);_.hf=function BVb(a){zVb(a)};var ZUb,$Ub,_Ub,aVb,bVb,cVb,dVb,eVb,fVb,gVb,hVb,iVb,jVb,kVb,lVb,mVb,nVb,oVb,pVb,qVb,rVb,sVb,tVb,uVb,vVb,wVb,xVb;var DP=sfb(Xze,'ForceOptions',Awe);feb(1001,1,{},CVb);_.sf=function DVb(){var a;return a=new TTb,a};_.tf=function EVb(a){};var CP=sfb(Xze,'ForceOptions/ForceFactory',1001);var FVb,GVb,HVb,IVb;feb(861,1,Eye,RVb);_.hf=function SVb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vAe),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Vhd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,wAe),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Thd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xAe),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),MVb),eid),JP),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yAe),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),Vze),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zAe),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),sgb(lve)),gid),bJ),xsb(Whd))));eWb((new fWb,a))};var KVb,LVb,MVb,NVb,OVb,PVb;var EP=sfb(Xze,'StressMetaDataProvider',861);feb(1004,1,Eye,fWb);_.hf=function gWb(a){eWb(a)};var TVb,UVb,VVb,WVb,XVb,YVb,ZVb,$Vb,_Vb,aWb,bWb,cWb;var GP=sfb(Xze,'StressOptions',1004);feb(1005,1,{},hWb);_.sf=function iWb(){var a;return a=new kWb,a};_.tf=function jWb(a){};var FP=sfb(Xze,'StressOptions/StressFactory',1005);feb(1110,205,oze,kWb);_.rf=function lWb(a,b){var c,d,e,f,g;b.Ug(BAe,1);Heb(TD(Gxd(a,(dWb(),XVb))))?Heb(TD(Gxd(a,bWb)))||RFb((c=new SFb((lud(),new zud(a))),c)):QTb(new TTb,a,b.eh(1));e=KTb(a);d=CTb(this.a,e);for(g=d.Kc();g.Ob();){f=RD(g.Pb(),235);if(f.e.c.length<=1){continue}uWb(this.b,f);sWb(this.b);Umb(f.d,new mWb)}e=BTb(d);JTb(e);b.Vg()};var IP=sfb(DAe,'StressLayoutProvider',1110);feb(1111,1,Qve,mWb);_.Cd=function nWb(a){hUb(RD(a,453))};var HP=sfb(DAe,'StressLayoutProvider/lambda$0$Type',1111);feb(1002,1,{},vWb);_.c=0;_.e=0;_.g=0;var LP=sfb(DAe,'StressMajorization',1002);feb(391,22,{3:1,34:1,22:1,391:1},BWb);var xWb,yWb,zWb;var JP=tfb(DAe,'StressMajorization/Dimension',391,WI,DWb,CWb);var EWb;feb(1003,1,fye,GWb);_.Ne=function HWb(a,b){return wWb(this.a,RD(a,153),RD(b,153))};_.Fb=function IWb(a){return this===a};_.Oe=function JWb(){return new Frb(this)};var KP=sfb(DAe,'StressMajorization/lambda$0$Type',1003);feb(1192,1,{},RWb);var OP=sfb(FAe,'ElkLayered',1192);feb(1193,1,Qve,UWb);_.Cd=function VWb(a){SWb(this.a,RD(a,36))};var MP=sfb(FAe,'ElkLayered/lambda$0$Type',1193);feb(1194,1,Qve,WWb);_.Cd=function XWb(a){TWb(this.a,RD(a,36))};var NP=sfb(FAe,'ElkLayered/lambda$1$Type',1194);feb(1281,1,{},dXb);var YWb,ZWb,$Wb;var SP=sfb(FAe,'GraphConfigurator',1281);feb(770,1,Qve,fXb);_.Cd=function gXb(a){aXb(this.a,RD(a,10))};var PP=sfb(FAe,'GraphConfigurator/lambda$0$Type',770);feb(771,1,{},hXb);_.Kb=function iXb(a){return _Wb(),new SDb(null,new Swb(RD(a,30).a,16))};var QP=sfb(FAe,'GraphConfigurator/lambda$1$Type',771);feb(772,1,Qve,jXb);_.Cd=function kXb(a){aXb(this.a,RD(a,10))};var RP=sfb(FAe,'GraphConfigurator/lambda$2$Type',772);feb(1109,205,oze,lXb);_.rf=function mXb(a,b){var c;c=c5b(new k5b,a);dE(Gxd(a,(yCc(),IAc)))===dE((Fnd(),Cnd))?LWb(this.a,c,b):MWb(this.a,c,b);b.$g()||J5b(new N5b,c)};var TP=sfb(FAe,'LayeredLayoutProvider',1109);feb(367,22,{3:1,34:1,22:1,367:1},tXb);var nXb,oXb,pXb,qXb,rXb;var UP=tfb(FAe,'LayeredPhases',367,WI,vXb,uXb);var wXb;feb(1717,1,{},EXb);_.i=0;var yXb;var XP=sfb(GAe,'ComponentsToCGraphTransformer',1717);var jYb;feb(1718,1,{},FXb);_.yf=function GXb(a,b){return $wnd.Math.min(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};_.zf=function HXb(a,b){return $wnd.Math.min(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};var VP=sfb(GAe,'ComponentsToCGraphTransformer/1',1718);feb(86,1,{86:1});_.i=0;_.k=true;_.o=pxe;var bQ=sfb(HAe,'CNode',86);feb(469,86,{469:1,86:1},IXb,JXb);_.Ib=function KXb(){return ''};var WP=sfb(GAe,'ComponentsToCGraphTransformer/CRectNode',469);feb(1688,1,{},XXb);var LXb,MXb;var $P=sfb(GAe,'OneDimensionalComponentsCompaction',1688);feb(1689,1,{},$Xb);_.Kb=function _Xb(a){return YXb(RD(a,42))};_.Fb=function aYb(a){return this===a};var YP=sfb(GAe,'OneDimensionalComponentsCompaction/lambda$0$Type',1689);feb(1690,1,{},bYb);_.Kb=function cYb(a){return ZXb(RD(a,42))};_.Fb=function dYb(a){return this===a};var ZP=sfb(GAe,'OneDimensionalComponentsCompaction/lambda$1$Type',1690);feb(1720,1,{},fYb);var _P=sfb(HAe,'CGraph',1720);feb(194,1,{194:1},iYb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=pxe;var aQ=sfb(HAe,'CGroup',194);feb(1719,1,{},lYb);_.yf=function mYb(a,b){return $wnd.Math.max(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};_.zf=function nYb(a,b){return $wnd.Math.max(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};var cQ=sfb(HAe,kye,1719);feb(1721,1,{},EYb);_.d=false;var oYb;var eQ=sfb(HAe,pye,1721);feb(1722,1,{},FYb);_.Kb=function GYb(a){return pYb(),Geb(),RD(RD(a,42).a,86).d.e!=0?true:false};_.Fb=function HYb(a){return this===a};var dQ=sfb(HAe,qye,1722);feb(833,1,{},KYb);_.a=false;_.b=false;_.c=false;_.d=false;var fQ=sfb(HAe,rye,833);feb(1898,1,{},QYb);var kQ=sfb(IAe,sye,1898);var wQ=ufb(JAe,hye);feb(1899,1,{382:1},UYb);_.bf=function VYb(a){SYb(this,RD(a,475))};var hQ=sfb(IAe,tye,1899);feb(Owe,1,fye,XYb);_.Ne=function YYb(a,b){return WYb(RD(a,86),RD(b,86))};_.Fb=function ZYb(a){return this===a};_.Oe=function $Yb(){return new Frb(this)};var gQ=sfb(IAe,uye,Owe);feb(475,1,{475:1},_Yb);_.a=false;var iQ=sfb(IAe,vye,475);feb(1901,1,fye,aZb);_.Ne=function bZb(a,b){return RYb(RD(a,475),RD(b,475))};_.Fb=function cZb(a){return this===a};_.Oe=function dZb(){return new Frb(this)};var jQ=sfb(IAe,wye,1901);feb(148,1,{148:1},eZb,fZb);_.Fb=function gZb(a){var b;if(a==null){return false}if(mQ!=rb(a)){return false}b=RD(a,148);return Fvb(this.c,b.c)&&Fvb(this.d,b.d)};_.Hb=function hZb(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.c,this.d]))};_.Ib=function iZb(){return '('+this.c+pve+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var mQ=sfb(JAe,'Point',148);feb(416,22,{3:1,34:1,22:1,416:1},qZb);var jZb,kZb,lZb,mZb;var lQ=tfb(JAe,'Point/Quadrant',416,WI,uZb,tZb);var vZb;feb(1708,1,{},EZb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var xZb,yZb,zZb,AZb,BZb;var vQ=sfb(JAe,'RectilinearConvexHull',1708);feb(583,1,{382:1},PZb);_.bf=function QZb(a){OZb(this,RD(a,148))};_.b=0;var MZb;var oQ=sfb(JAe,'RectilinearConvexHull/MaximalElementsEventHandler',583);feb(1710,1,fye,SZb);_.Ne=function TZb(a,b){return RZb(UD(a),UD(b))};_.Fb=function UZb(a){return this===a};_.Oe=function VZb(){return new Frb(this)};var nQ=sfb(JAe,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1710);feb(1709,1,{382:1},XZb);_.bf=function YZb(a){WZb(this,RD(a,148))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var pQ=sfb(JAe,'RectilinearConvexHull/RectangleEventHandler',1709);feb(1711,1,fye,ZZb);_.Ne=function $Zb(a,b){return GZb(RD(a,148),RD(b,148))};_.Fb=function _Zb(a){return this===a};_.Oe=function a$b(){return new Frb(this)};var qQ=sfb(JAe,'RectilinearConvexHull/lambda$0$Type',1711);feb(1712,1,fye,b$b);_.Ne=function c$b(a,b){return HZb(RD(a,148),RD(b,148))};_.Fb=function d$b(a){return this===a};_.Oe=function e$b(){return new Frb(this)};var rQ=sfb(JAe,'RectilinearConvexHull/lambda$1$Type',1712);feb(1713,1,fye,f$b);_.Ne=function g$b(a,b){return IZb(RD(a,148),RD(b,148))};_.Fb=function h$b(a){return this===a};_.Oe=function i$b(){return new Frb(this)};var sQ=sfb(JAe,'RectilinearConvexHull/lambda$2$Type',1713);feb(1714,1,fye,j$b);_.Ne=function k$b(a,b){return JZb(RD(a,148),RD(b,148))};_.Fb=function l$b(a){return this===a};_.Oe=function m$b(){return new Frb(this)};var tQ=sfb(JAe,'RectilinearConvexHull/lambda$3$Type',1714);feb(1715,1,fye,n$b);_.Ne=function o$b(a,b){return KZb(RD(a,148),RD(b,148))};_.Fb=function p$b(a){return this===a};_.Oe=function q$b(){return new Frb(this)};var uQ=sfb(JAe,'RectilinearConvexHull/lambda$4$Type',1715);feb(1716,1,{},s$b);var xQ=sfb(JAe,'Scanline',1716);feb(2104,1,{});var yQ=sfb(KAe,'AbstractGraphPlacer',2104);feb(335,1,{335:1},C$b);_.Ff=function D$b(a){if(this.Gf(a)){Rc(this.b,RD(mQb(a,(Ywc(),ewc)),21),a);return true}else{return false}};_.Gf=function E$b(a){var b,c,d,e;b=RD(mQb(a,(Ywc(),ewc)),21);e=RD(Qc(y$b,b),21);for(d=e.Kc();d.Ob();){c=RD(d.Pb(),21);if(!RD(Qc(this.b,c),15).dc()){return false}}return true};var y$b;var BQ=sfb(KAe,'ComponentGroup',335);feb(779,2104,{},J$b);_.Hf=function K$b(a){var b,c;for(c=new Anb(this.a);c.a<c.c.c.length;){b=RD(ynb(c),335);if(b.Ff(a)){return}}Rmb(this.a,new C$b(a))};_.Ef=function L$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c.length=0;b.a.c.length=0;if(a.dc()){b.f.a=0;b.f.b=0;return}g=RD(a.Xb(0),36);kQb(b,g);for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);this.Hf(d)}o=new pjd;f=Kfb(UD(mQb(g,(yCc(),SBc))));for(j=new Anb(this.a);j.a<j.c.c.length;){h=RD(ynb(j),335);k=F$b(h,f);x$b(Uc(h.b),o.a,o.b);o.a+=k.a;o.b+=k.b}b.f.a=o.a-f;b.f.b=o.b-f;if(Heb(TD(mQb(g,Vzc)))&&dE(mQb(g,yAc))===dE((Ymd(),Umd))){for(n=a.Kc();n.Ob();){l=RD(n.Pb(),36);w$b(l,l.c.a,l.c.b)}c=new j_b;_$b(c,a,f);for(m=a.Kc();m.Ob();){l=RD(m.Pb(),36);$id(hjd(l.c),c.e)}$id(hjd(b.f),c.a)}for(i=new Anb(this.a);i.a<i.c.c.length;){h=RD(ynb(i),335);v$b(b,Uc(h.b))}};var zQ=sfb(KAe,'ComponentGroupGraphPlacer',779);feb(1312,779,{},N$b);_.Hf=function O$b(a){M$b(this,a)};_.Ef=function P$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;this.a.c.length=0;b.a.c.length=0;if(a.dc()){b.f.a=0;b.f.b=0;return}g=RD(a.Xb(0),36);kQb(b,g);for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);M$b(this,d)}t=new pjd;s=new pjd;p=new pjd;o=new pjd;f=Kfb(UD(mQb(g,(yCc(),SBc))));for(j=new Anb(this.a);j.a<j.c.c.length;){h=RD(ynb(j),335);if(Dmd(RD(mQb(b,(umd(),Nkd)),88))){p.a=t.a;for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),Yod))){p.a=s.a;break}}}else if(Emd(RD(mQb(b,Nkd),88))){p.b=t.b;for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),ppd))){p.b=s.b;break}}}k=F$b(RD(h,579),f);x$b(Uc(h.b),p.a,p.b);if(Dmd(RD(mQb(b,Nkd),88))){s.a=p.a+k.a;o.a=$wnd.Math.max(o.a,s.a);for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),npd))){t.a=p.a+k.a;break}}s.b=p.b+k.b;p.b=s.b;o.b=$wnd.Math.max(o.b,p.b)}else if(Emd(RD(mQb(b,Nkd),88))){s.b=p.b+k.b;o.b=$wnd.Math.max(o.b,s.b);for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),Xod))){t.b=p.b+k.b;break}}s.a=p.a+k.a;p.a=s.a;o.a=$wnd.Math.max(o.a,p.a)}}b.f.a=o.a-f;b.f.b=o.b-f;if(Heb(TD(mQb(g,Vzc)))&&dE(mQb(g,yAc))===dE((Ymd(),Umd))){for(n=a.Kc();n.Ob();){l=RD(n.Pb(),36);w$b(l,l.c.a,l.c.b)}c=new j_b;_$b(c,a,f);for(m=a.Kc();m.Ob();){l=RD(m.Pb(),36);$id(hjd(l.c),c.e)}$id(hjd(b.f),c.a)}for(i=new Anb(this.a);i.a<i.c.c.length;){h=RD(ynb(i),335);v$b(b,Uc(h.b))}};var AQ=sfb(KAe,'ComponentGroupModelOrderGraphPlacer',1312);feb(389,22,{3:1,34:1,22:1,389:1},V$b);var Q$b,R$b,S$b,T$b;var CQ=tfb(KAe,'ComponentOrderingStrategy',389,WI,X$b,W$b);var Y$b;feb(659,1,{},j_b);var KQ=sfb(KAe,'ComponentsCompactor',659);feb(1533,13,Cxe,m_b);_.Fc=function n_b(a){return k_b(this,RD(a,148))};var DQ=sfb(KAe,'ComponentsCompactor/Hullpoints',1533);feb(1530,1,{855:1},p_b);_.a=false;var EQ=sfb(KAe,'ComponentsCompactor/InternalComponent',1530);feb(1529,1,Vve,q_b);_.Jc=function r_b(a){xgb(this,a)};_.Kc=function s_b(){return new Anb(this.a)};var FQ=sfb(KAe,'ComponentsCompactor/InternalConnectedComponents',1529);feb(1532,1,{602:1},t_b);_.Bf=function v_b(){return null};_.Cf=function w_b(){return this.a};_.Af=function u_b(){return f_b(this.d)};_.Df=function x_b(){return this.b};var GQ=sfb(KAe,'ComponentsCompactor/InternalExternalExtension',1532);feb(1531,1,{602:1},y_b);_.Cf=function B_b(){return this.a};_.Af=function z_b(){return f_b(this.d)};_.Bf=function A_b(){return this.c};_.Df=function C_b(){return this.b};var HQ=sfb(KAe,'ComponentsCompactor/InternalUnionExternalExtension',1531);feb(1535,1,{},D_b);var IQ=sfb(KAe,'ComponentsCompactor/OuterSegments',1535);feb(1534,1,{},E_b);var JQ=sfb(KAe,'ComponentsCompactor/Segments',1534);feb(1282,1,{},I_b);var MQ=sfb(KAe,Lze,1282);feb(1283,1,fye,K_b);_.Ne=function L_b(a,b){return J_b(RD(a,36),RD(b,36))};_.Fb=function M_b(a){return this===a};_.Oe=function N_b(){return new Frb(this)};var LQ=sfb(KAe,'ComponentsProcessor/lambda$0$Type',1283);feb(579,335,{335:1,579:1},S_b);_.Ff=function T_b(a){return Q_b(this,a)};_.Gf=function U_b(a){return R_b(this,a)};var O_b;var NQ=sfb(KAe,'ModelOrderComponentGroup',579);feb(1310,2104,{},V_b);_.Ef=function W_b(a,b){var c,d,e,f,g,h,i,j,k,l,m;if(a.gc()==1){l=RD(a.Xb(0),36);if(l!=b){b.a.c.length=0;u$b(b,l,0,0);kQb(b,l);C2b(b.d,l.d);b.f.a=l.f.a;b.f.b=l.f.b}return}else if(a.dc()){b.a.c.length=0;b.f.a=0;b.f.b=0;return}this.Jf(a,b);e=RD(a.Xb(0),36);b.a.c.length=0;kQb(b,e);j=0;m=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);k=f.f;j=$wnd.Math.max(j,k.a);m+=k.a*k.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(m)*Kfb(UD(mQb(b,(yCc(),Tzc)))));d=Kfb(UD(mQb(b,SBc)));this.If(a,b,j,d);if(Heb(TD(mQb(e,Vzc)))){c=new j_b;_$b(c,a,d);for(i=a.Kc();i.Ob();){h=RD(i.Pb(),36);$id(hjd(h.c),c.e)}$id(hjd(b.f),c.a)}v$b(b,a)};_.If=function X_b(a,b,c,d){var e,f,g,h,i,j,k,l;k=0;l=0;h=0;e=d;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);j=f.f;if(k+j.a>c){k=0;l+=h+d;h=0}i=f.c;w$b(f,k+i.a,l+i.b);hjd(i);e=$wnd.Math.max(e,k+j.a);h=$wnd.Math.max(h,j.b);k+=j.a+d}b.f.a=e;b.f.b=l+h};_.Jf=function Y_b(a,b){var c,d,e,f,g;if(dE(mQb(b,(yCc(),Yzc)))===dE((U$b(),T$b))){for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);g=0;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g+=RD(mQb(e,JBc),17).a}c.p=g}yob();a.jd(new b0b)}};var QQ=sfb(KAe,'SimpleRowGraphPlacer',1310);feb(1313,1310,{},Z_b);_.If=function $_b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;m=0;n=0;h=0;e=d;i=null;l=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);k=f.f;if(m+k.a>c&&!RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),Yod))||!!i&&RD(mQb(i,(Ywc(),ewc)),21).Hc((qpd(),Xod))||RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),ppd))){m=l;n+=h+d;h=0}j=f.c;RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),Yod))&&(m=e+d);w$b(f,m+j.a,n+j.b);e=$wnd.Math.max(e,m+k.a);RD(mQb(f,ewc),21).Hc(npd)&&(l=$wnd.Math.max(l,m+k.a+d));hjd(j);h=$wnd.Math.max(h,k.b);m+=k.a+d;i=f}b.f.a=e;b.f.b=n+h};_.Jf=function __b(a,b){};var OQ=sfb(KAe,'ModelOrderRowGraphPlacer',1313);feb(1311,1,fye,b0b);_.Ne=function c0b(a,b){return a0b(RD(a,36),RD(b,36))};_.Fb=function d0b(a){return this===a};_.Oe=function e0b(){return new Frb(this)};var PQ=sfb(KAe,'SimpleRowGraphPlacer/1',1311);var f0b;feb(1280,1,xye,l0b);_.Lb=function m0b(a){var b;return b=RD(mQb(RD(a,249).b,(yCc(),RAc)),75),!!b&&b.b!=0};_.Fb=function n0b(a){return this===a};_.Mb=function o0b(a){var b;return b=RD(mQb(RD(a,249).b,(yCc(),RAc)),75),!!b&&b.b!=0};var RQ=sfb(PAe,'CompoundGraphPostprocessor/1',1280);feb(1279,1,QAe,E0b);_.Kf=function F0b(a,b){y0b(this,RD(a,36),b)};var TQ=sfb(PAe,'CompoundGraphPreprocessor',1279);feb(452,1,{452:1},G0b);_.c=false;var SQ=sfb(PAe,'CompoundGraphPreprocessor/ExternalPort',452);feb(249,1,{249:1},J0b);_.Ib=function K0b(){return ps(this.c)+':'+_0b(this.b)};var VQ=sfb(PAe,'CrossHierarchyEdge',249);feb(777,1,fye,M0b);_.Ne=function N0b(a,b){return L0b(this,RD(a,249),RD(b,249))};_.Fb=function O0b(a){return this===a};_.Oe=function Q0b(){return new Frb(this)};var UQ=sfb(PAe,'CrossHierarchyEdgeComparator',777);feb(304,137,{3:1,304:1,96:1,137:1});_.p=0;var dR=sfb(RAe,'LGraphElement',304);feb(18,304,{3:1,18:1,304:1,96:1,137:1},a1b);_.Ib=function b1b(){return _0b(this)};var WQ=sfb(RAe,'LEdge',18);feb(36,304,{3:1,20:1,36:1,304:1,96:1,137:1},d1b);_.Jc=function e1b(a){xgb(this,a)};_.Kc=function f1b(){return new Anb(this.b)};_.Ib=function g1b(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var eR=sfb(RAe,'LGraph',36);var h1b;feb(666,1,{});_.Lf=function j1b(){return this.e.n};_.of=function k1b(a){return mQb(this.e,a)};_.Mf=function l1b(){return this.e.o};_.Nf=function m1b(){return this.e.p};_.pf=function n1b(a){return nQb(this.e,a)};_.Of=function o1b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.Pf=function p1b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.Qf=function q1b(a){this.e.p=a};var XQ=sfb(RAe,'LGraphAdapters/AbstractLShapeAdapter',666);feb(473,1,{853:1},r1b);_.Rf=function s1b(){var a,b;if(!this.b){this.b=ev(this.a.b.c.length);for(b=new Anb(this.a.b);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.b,new D1b(a))}}return this.b};_.b=null;var YQ=sfb(RAe,'LGraphAdapters/LEdgeAdapter',473);feb(665,1,{},t1b);_.Sf=function u1b(){var a,b,c,d,e,f;if(!this.b){this.b=new bnb;for(d=new Anb(this.a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);if(this.c.Mb(e)){Rmb(this.b,new F1b(this,e,this.e));if(this.d){if(nQb(e,(Ywc(),Xwc))){for(b=RD(mQb(e,Xwc),15).Kc();b.Ob();){a=RD(b.Pb(),10);Rmb(this.b,new F1b(this,a,false))}}if(nQb(e,Vvc)){for(b=RD(mQb(e,Vvc),15).Kc();b.Ob();){a=RD(b.Pb(),10);Rmb(this.b,new F1b(this,a,false))}}}}}}}return this.b};_.Lf=function v1b(){throw Adb(new kib(TAe))};_.of=function w1b(a){return mQb(this.a,a)};_.Mf=function x1b(){return this.a.f};_.Nf=function y1b(){return this.a.p};_.pf=function z1b(a){return nQb(this.a,a)};_.Of=function A1b(a){throw Adb(new kib(TAe))};_.Pf=function B1b(a){this.a.f.a=a.a;this.a.f.b=a.b};_.Qf=function C1b(a){this.a.p=a};_.b=null;_.d=false;_.e=false;var ZQ=sfb(RAe,'LGraphAdapters/LGraphAdapter',665);feb(585,666,{187:1},D1b);var $Q=sfb(RAe,'LGraphAdapters/LLabelAdapter',585);feb(584,666,{695:1},F1b);_.Tf=function G1b(){return this.b};_.Uf=function H1b(){return yob(),yob(),vob};_.Rf=function I1b(){var a,b;if(!this.a){this.a=ev(RD(this.e,10).b.c.length);for(b=new Anb(RD(this.e,10).b);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.a,new D1b(a))}}return this.a};_.Vf=function J1b(){var a;a=RD(this.e,10).d;return new R2b(a.d,a.c,a.a,a.b)};_.Wf=function K1b(){return yob(),yob(),vob};_.Xf=function L1b(){var a,b;if(!this.c){this.c=ev(RD(this.e,10).j.c.length);for(b=new Anb(RD(this.e,10).j);b.a<b.c.c.length;){a=RD(ynb(b),12);Rmb(this.c,new Q1b(a,this.d))}}return this.c};_.Yf=function M1b(){return Heb(TD(mQb(RD(this.e,10),(Ywc(),Yvc))))};_.Zf=function N1b(a){RD(this.e,10).d.b=a.b;RD(this.e,10).d.d=a.d;RD(this.e,10).d.c=a.c;RD(this.e,10).d.a=a.a};_.$f=function O1b(a){RD(this.e,10).f.b=a.b;RD(this.e,10).f.d=a.d;RD(this.e,10).f.c=a.c;RD(this.e,10).f.a=a.a};_._f=function P1b(){E1b(this,(i1b(),h1b))};_.a=null;_.b=null;_.c=null;_.d=false;var _Q=sfb(RAe,'LGraphAdapters/LNodeAdapter',584);feb(1788,666,{852:1},Q1b);_.Uf=function R1b(){var a,b,c,d,e,f,g,h;if(this.d&&RD(this.e,12).i.k==(r3b(),q3b)){return yob(),yob(),vob}else if(!this.a){this.a=new bnb;for(c=new Anb(RD(this.e,12).e);c.a<c.c.c.length;){a=RD(ynb(c),18);Rmb(this.a,new r1b(a))}if(this.d){d=RD(mQb(RD(this.e,12),(Ywc(),Iwc)),10);if(d){for(b=new is(Mr(Z2b(d).a.Kc(),new ir));gs(b);){a=RD(hs(b),18);Rmb(this.a,new r1b(a))}}}if(nQb(RD(this.e,12).i,(Ywc(),Pwc))){g=RD(mQb(RD(this.e,12).i,Pwc),337);h=RD(cub(g.e,this.e),113);if(h){for(f=new Anb(h.b);f.a<f.c.c.length;){e=RD(ynb(f),340);Rmb(this.a,new r1b(e.a))}}}}return this.a};_.Rf=function S1b(){var a,b;if(!this.b){this.b=ev(RD(this.e,12).f.c.length);for(b=new Anb(RD(this.e,12).f);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.b,new D1b(a))}}return this.b};_.Wf=function T1b(){var a,b,c,d,e,f,g,h;if(this.d&&RD(this.e,12).i.k==(r3b(),q3b)){return yob(),yob(),vob}else if(!this.c){this.c=new bnb;for(c=new Anb(RD(this.e,12).g);c.a<c.c.c.length;){a=RD(ynb(c),18);Rmb(this.c,new r1b(a))}if(this.d){d=RD(mQb(RD(this.e,12),(Ywc(),Iwc)),10);if(d){for(b=new is(Mr(a3b(d).a.Kc(),new ir));gs(b);){a=RD(hs(b),18);Rmb(this.c,new r1b(a))}}}if(nQb(RD(this.e,12).i,(Ywc(),Pwc))){g=RD(mQb(RD(this.e,12).i,Pwc),337);h=RD(cub(g.e,this.e),113);if(h){for(f=new Anb(h.e);f.a<f.c.c.length;){e=RD(ynb(f),340);Rmb(this.c,new r1b(e.a))}}}}return this.c};_.ag=function U1b(){return RD(this.e,12).j};_.bg=function V1b(){return Heb(TD(mQb(RD(this.e,12),(Ywc(),nwc))))};_.a=null;_.b=null;_.c=null;_.d=false;var aR=sfb(RAe,'LGraphAdapters/LPortAdapter',1788);feb(1789,1,fye,X1b);_.Ne=function Y1b(a,b){return W1b(RD(a,12),RD(b,12))};_.Fb=function Z1b(a){return this===a};_.Oe=function $1b(){return new Frb(this)};var bR=sfb(RAe,'LGraphAdapters/PortComparator',1789);feb(818,1,nwe,_1b);_.Mb=function a2b(a){return RD(a,10),i1b(),true};var cR=sfb(RAe,'LGraphAdapters/lambda$0$Type',818);feb(404,304,{3:1,304:1,404:1,96:1,137:1});var yR=sfb(RAe,'LShape',404);feb(72,404,{3:1,304:1,72:1,404:1,96:1,137:1},x2b,y2b);_.Ib=function z2b(){var a;a=w2b(this);return a==null?'label':'l_'+a};var fR=sfb(RAe,'LLabel',72);feb(214,1,{3:1,4:1,214:1,423:1});_.Fb=function K2b(a){var b;if(ZD(a,214)){b=RD(a,214);return this.d==b.d&&this.a==b.a&&this.b==b.b&&this.c==b.c}else{return false}};_.Hb=function L2b(){var a,b;a=Nfb(this.b)<<16;a|=Nfb(this.a)&Bwe;b=Nfb(this.c)<<16;b|=Nfb(this.d)&Bwe;return a^b};_.cg=function N2b(b){var c,d,e,f,g,h,i,j,k,l,m;g=0;while(g<b.length&&M2b((BFb(g,b.length),b.charCodeAt(g)),YAe)){++g}c=b.length;while(c>0&&M2b((BFb(c-1,b.length),b.charCodeAt(c-1)),ZAe)){--c}if(g<c){l=vhb((AFb(g,c,b.length),b.substr(g,c-g)),',|;');try{for(i=l,j=0,k=i.length;j<k;++j){h=i[j];f=vhb(h,'=');if(f.length!=2){throw Adb(new agb('Expecting a list of key-value pairs.'))}e=Dhb(f[0]);m=Neb(Dhb(f[1]));lhb(e,'top')?(this.d=m):lhb(e,'left')?(this.b=m):lhb(e,'bottom')?(this.a=m):lhb(e,'right')&&(this.c=m)}}catch(a){a=zdb(a);if(ZD(a,130)){d=a;throw Adb(new agb($Ae+d))}else throw Adb(a)}}};_.Ib=function O2b(){return '[top='+this.d+',left='+this.b+',bottom='+this.a+',right='+this.c+']'};_.a=0;_.b=0;_.c=0;_.d=0;var m3=sfb(_Ae,'Spacing',214);feb(140,214,aBe,P2b,Q2b,R2b,S2b);var h3=sfb(_Ae,'ElkMargin',140);feb(660,140,aBe,T2b);var gR=sfb(RAe,'LMargin',660);feb(10,404,{3:1,304:1,10:1,404:1,96:1,137:1},j3b);_.Ib=function k3b(){return i3b(this)};_.i=false;var jR=sfb(RAe,'LNode',10);feb(273,22,{3:1,34:1,22:1,273:1},s3b);var l3b,m3b,n3b,o3b,p3b,q3b;var hR=tfb(RAe,'LNode/NodeType',273,WI,u3b,t3b);var v3b;feb(775,1,nwe,x3b);_.Mb=function y3b(a){return Heb(TD(mQb(RD(a,72),(yCc(),vAc))))};var iR=sfb(RAe,'LNode/lambda$0$Type',775);feb(107,214,bBe,z3b,A3b,B3b);var i3=sfb(_Ae,'ElkPadding',107);feb(778,107,bBe,C3b);var kR=sfb(RAe,'LPadding',778);feb(12,404,{3:1,304:1,12:1,404:1,96:1,137:1},R3b);_.Ib=function S3b(){var a,b,c;a=new bib;Zhb((a.a+='p_',a),M3b(this));!!this.i&&Zhb(Yhb((a.a+='[',a),this.i),']');if(this.e.c.length==1&&this.g.c.length==0&&RD(Vmb(this.e,0),18).c!=this){b=RD(Vmb(this.e,0),18).c;Zhb((a.a+=' << ',a),M3b(b));Zhb(Yhb((a.a+='[',a),b.i),']')}if(this.e.c.length==0&&this.g.c.length==1&&RD(Vmb(this.g,0),18).d!=this){c=RD(Vmb(this.g,0),18).d;Zhb((a.a+=' >> ',a),M3b(c));Zhb(Yhb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var D3b,E3b,F3b,G3b,H3b,I3b;var xR=sfb(RAe,'LPort',12);feb(408,1,Vve,T3b);_.Jc=function U3b(a){xgb(this,a)};_.Kc=function V3b(){var a;a=new Anb(this.a.e);return new W3b(a)};var mR=sfb(RAe,'LPort/1',408);feb(1309,1,Ave,W3b);_.Nb=function X3b(a){Ztb(this,a)};_.Pb=function Z3b(){return RD(ynb(this.a),18).c};_.Ob=function Y3b(){return xnb(this.a)};_.Qb=function $3b(){znb(this.a)};var lR=sfb(RAe,'LPort/1/1',1309);feb(369,1,Vve,_3b);_.Jc=function a4b(a){xgb(this,a)};_.Kc=function b4b(){var a;return a=new Anb(this.a.g),new c4b(a)};var oR=sfb(RAe,'LPort/2',369);feb(776,1,Ave,c4b);_.Nb=function d4b(a){Ztb(this,a)};_.Pb=function f4b(){return RD(ynb(this.a),18).d};_.Ob=function e4b(){return xnb(this.a)};_.Qb=function g4b(){znb(this.a)};var nR=sfb(RAe,'LPort/2/1',776);feb(1302,1,Vve,h4b);_.Jc=function i4b(a){xgb(this,a)};_.Kc=function j4b(){return new l4b(this)};var qR=sfb(RAe,'LPort/CombineIter',1302);feb(208,1,Ave,l4b);_.Nb=function m4b(a){Ztb(this,a)};_.Qb=function p4b(){$tb()};_.Ob=function n4b(){return k4b(this)};_.Pb=function o4b(){return xnb(this.a)?ynb(this.a):ynb(this.b)};var pR=sfb(RAe,'LPort/CombineIter/1',208);feb(1303,1,xye,r4b);_.Lb=function s4b(a){return q4b(a)};_.Fb=function t4b(a){return this===a};_.Mb=function u4b(a){return J3b(),RD(a,12).g.c.length!=0};var rR=sfb(RAe,'LPort/lambda$0$Type',1303);feb(1304,1,xye,w4b);_.Lb=function x4b(a){return v4b(a)};_.Fb=function y4b(a){return this===a};_.Mb=function z4b(a){return J3b(),RD(a,12).e.c.length!=0};var sR=sfb(RAe,'LPort/lambda$1$Type',1304);feb(1305,1,xye,A4b);_.Lb=function B4b(a){return J3b(),RD(a,12).j==(qpd(),Yod)};_.Fb=function C4b(a){return this===a};_.Mb=function D4b(a){return J3b(),RD(a,12).j==(qpd(),Yod)};var tR=sfb(RAe,'LPort/lambda$2$Type',1305);feb(1306,1,xye,E4b);_.Lb=function F4b(a){return J3b(),RD(a,12).j==(qpd(),Xod)};_.Fb=function G4b(a){return this===a};_.Mb=function H4b(a){return J3b(),RD(a,12).j==(qpd(),Xod)};var uR=sfb(RAe,'LPort/lambda$3$Type',1306);feb(1307,1,xye,I4b);_.Lb=function J4b(a){return J3b(),RD(a,12).j==(qpd(),npd)};_.Fb=function K4b(a){return this===a};_.Mb=function L4b(a){return J3b(),RD(a,12).j==(qpd(),npd)};var vR=sfb(RAe,'LPort/lambda$4$Type',1307);feb(1308,1,xye,M4b);_.Lb=function N4b(a){return J3b(),RD(a,12).j==(qpd(),ppd)};_.Fb=function O4b(a){return this===a};_.Mb=function P4b(a){return J3b(),RD(a,12).j==(qpd(),ppd)};var wR=sfb(RAe,'LPort/lambda$5$Type',1308);feb(30,304,{3:1,20:1,304:1,30:1,96:1,137:1},R4b);_.Jc=function S4b(a){xgb(this,a)};_.Kc=function T4b(){return new Anb(this.a)};_.Ib=function U4b(){return 'L_'+Wmb(this.b.b,this,0)+Fe(this.a)};var zR=sfb(RAe,'Layer',30);feb(1330,1,{},k5b);var JR=sfb(cBe,dBe,1330);feb(1334,1,{},o5b);_.Kb=function p5b(a){return AGd(RD(a,84))};var AR=sfb(cBe,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1334);feb(1337,1,{},q5b);_.Kb=function r5b(a){return AGd(RD(a,84))};var BR=sfb(cBe,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1337);feb(1331,1,Qve,s5b);_.Cd=function t5b(a){$4b(this.a,RD(a,123))};var CR=sfb(cBe,Nze,1331);feb(1332,1,Qve,u5b);_.Cd=function v5b(a){$4b(this.a,RD(a,123))};var DR=sfb(cBe,eBe,1332);feb(1333,1,{},w5b);_.Kb=function x5b(a){return new SDb(null,new Swb(mzd(RD(a,74)),16))};var ER=sfb(cBe,fBe,1333);feb(1335,1,nwe,y5b);_.Mb=function z5b(a){return l5b(this.a,RD(a,27))};var FR=sfb(cBe,gBe,1335);feb(1336,1,{},A5b);_.Kb=function B5b(a){return new SDb(null,new Swb(lzd(RD(a,74)),16))};var GR=sfb(cBe,'ElkGraphImporter/lambda$5$Type',1336);feb(1338,1,nwe,C5b);_.Mb=function D5b(a){return m5b(this.a,RD(a,27))};var HR=sfb(cBe,'ElkGraphImporter/lambda$7$Type',1338);feb(1339,1,nwe,E5b);_.Mb=function F5b(a){return n5b(RD(a,74))};var IR=sfb(cBe,'ElkGraphImporter/lambda$8$Type',1339);feb(1297,1,{},N5b);var G5b;var OR=sfb(cBe,'ElkGraphLayoutTransferrer',1297);feb(1298,1,nwe,Q5b);_.Mb=function R5b(a){return O5b(this.a,RD(a,18))};var KR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$0$Type',1298);feb(1299,1,Qve,S5b);_.Cd=function T5b(a){H5b();Rmb(this.a,RD(a,18))};var LR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$1$Type',1299);feb(1300,1,nwe,U5b);_.Mb=function V5b(a){return P5b(this.a,RD(a,18))};var MR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$2$Type',1300);feb(1301,1,Qve,W5b);_.Cd=function X5b(a){H5b();Rmb(this.a,RD(a,18))};var NR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$3$Type',1301);feb(819,1,{},e6b);var PR=sfb(hBe,'BiLinkedHashMultiMap',819);feb(1550,1,QAe,h6b);_.Kf=function i6b(a,b){f6b(RD(a,36),b)};var SR=sfb(hBe,'CommentNodeMarginCalculator',1550);feb(1551,1,{},j6b);_.Kb=function k6b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var QR=sfb(hBe,'CommentNodeMarginCalculator/lambda$0$Type',1551);feb(1552,1,Qve,l6b);_.Cd=function m6b(a){g6b(RD(a,10))};var RR=sfb(hBe,'CommentNodeMarginCalculator/lambda$1$Type',1552);feb(1553,1,QAe,q6b);_.Kf=function r6b(a,b){o6b(RD(a,36),b)};var TR=sfb(hBe,'CommentPostprocessor',1553);feb(1554,1,QAe,v6b);_.Kf=function w6b(a,b){s6b(RD(a,36),b)};var UR=sfb(hBe,'CommentPreprocessor',1554);feb(1555,1,QAe,y6b);_.Kf=function z6b(a,b){x6b(RD(a,36),b)};var VR=sfb(hBe,'ConstraintsPostprocessor',1555);feb(1556,1,QAe,G6b);_.Kf=function H6b(a,b){E6b(RD(a,36),b)};var WR=sfb(hBe,'EdgeAndLayerConstraintEdgeReverser',1556);feb(1557,1,QAe,K6b);_.Kf=function M6b(a,b){I6b(RD(a,36),b)};var $R=sfb(hBe,'EndLabelPostprocessor',1557);feb(1558,1,{},N6b);_.Kb=function O6b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var XR=sfb(hBe,'EndLabelPostprocessor/lambda$0$Type',1558);feb(1559,1,nwe,P6b);_.Mb=function Q6b(a){return L6b(RD(a,10))};var YR=sfb(hBe,'EndLabelPostprocessor/lambda$1$Type',1559);feb(1560,1,Qve,R6b);_.Cd=function S6b(a){J6b(RD(a,10))};var ZR=sfb(hBe,'EndLabelPostprocessor/lambda$2$Type',1560);feb(1561,1,QAe,b7b);_.Kf=function e7b(a,b){Z6b(RD(a,36),b)};var fS=sfb(hBe,'EndLabelPreprocessor',1561);feb(1562,1,{},f7b);_.Kb=function g7b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var _R=sfb(hBe,'EndLabelPreprocessor/lambda$0$Type',1562);feb(1563,1,Qve,h7b);_.Cd=function i7b(a){V6b(this.a,this.b,this.c,RD(a,10))};_.a=0;_.b=0;_.c=false;var aS=sfb(hBe,'EndLabelPreprocessor/lambda$1$Type',1563);feb(1564,1,nwe,j7b);_.Mb=function k7b(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Nmd))};var bS=sfb(hBe,'EndLabelPreprocessor/lambda$2$Type',1564);feb(1565,1,Qve,l7b);_.Cd=function m7b(a){Mub(this.a,RD(a,72))};var cS=sfb(hBe,'EndLabelPreprocessor/lambda$3$Type',1565);feb(1566,1,nwe,n7b);_.Mb=function o7b(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Mmd))};var dS=sfb(hBe,'EndLabelPreprocessor/lambda$4$Type',1566);feb(1567,1,Qve,p7b);_.Cd=function q7b(a){Mub(this.a,RD(a,72))};var eS=sfb(hBe,'EndLabelPreprocessor/lambda$5$Type',1567);feb(1615,1,QAe,z7b);_.Kf=function A7b(a,b){w7b(RD(a,36),b)};var r7b;var nS=sfb(hBe,'EndLabelSorter',1615);feb(1616,1,fye,C7b);_.Ne=function D7b(a,b){return B7b(RD(a,465),RD(b,465))};_.Fb=function E7b(a){return this===a};_.Oe=function F7b(){return new Frb(this)};var gS=sfb(hBe,'EndLabelSorter/1',1616);feb(465,1,{465:1},G7b);var hS=sfb(hBe,'EndLabelSorter/LabelGroup',465);feb(1617,1,{},H7b);_.Kb=function I7b(a){return s7b(),new SDb(null,new Swb(RD(a,30).a,16))};var iS=sfb(hBe,'EndLabelSorter/lambda$0$Type',1617);feb(1618,1,nwe,J7b);_.Mb=function K7b(a){return s7b(),RD(a,10).k==(r3b(),p3b)};var jS=sfb(hBe,'EndLabelSorter/lambda$1$Type',1618);feb(1619,1,Qve,L7b);_.Cd=function M7b(a){x7b(RD(a,10))};var kS=sfb(hBe,'EndLabelSorter/lambda$2$Type',1619);feb(1620,1,nwe,N7b);_.Mb=function O7b(a){return s7b(),dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Mmd))};var lS=sfb(hBe,'EndLabelSorter/lambda$3$Type',1620);feb(1621,1,nwe,P7b);_.Mb=function Q7b(a){return s7b(),dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Nmd))};var mS=sfb(hBe,'EndLabelSorter/lambda$4$Type',1621);feb(1568,1,QAe,a8b);_.Kf=function b8b(a,b){$7b(this,RD(a,36))};_.b=0;_.c=0;var uS=sfb(hBe,'FinalSplineBendpointsCalculator',1568);feb(1569,1,{},c8b);_.Kb=function d8b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var oS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$0$Type',1569);feb(1570,1,{},e8b);_.Kb=function f8b(a){return new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var pS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$1$Type',1570);feb(1571,1,nwe,g8b);_.Mb=function h8b(a){return !W0b(RD(a,18))};var qS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$2$Type',1571);feb(1572,1,nwe,i8b);_.Mb=function j8b(a){return nQb(RD(a,18),(Ywc(),Twc))};var rS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$3$Type',1572);feb(1573,1,Qve,k8b);_.Cd=function l8b(a){T7b(this.a,RD(a,131))};var sS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$4$Type',1573);feb(1574,1,Qve,m8b);_.Cd=function n8b(a){Eob(RD(a,18).a)};var tS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$5$Type',1574);feb(803,1,QAe,L8b);_.Kf=function M8b(a,b){C8b(this,RD(a,36),b)};var wS=sfb(hBe,'GraphTransformer',803);feb(517,22,{3:1,34:1,22:1,517:1},Q8b);var N8b,O8b;var vS=tfb(hBe,'GraphTransformer/Mode',517,WI,S8b,R8b);var T8b;feb(1575,1,QAe,Z8b);_.Kf=function $8b(a,b){W8b(RD(a,36),b)};var xS=sfb(hBe,'HierarchicalNodeResizingProcessor',1575);feb(1576,1,QAe,f9b);_.Kf=function g9b(a,b){b9b(RD(a,36),b)};var zS=sfb(hBe,'HierarchicalPortConstraintProcessor',1576);feb(1577,1,fye,i9b);_.Ne=function j9b(a,b){return h9b(RD(a,10),RD(b,10))};_.Fb=function k9b(a){return this===a};_.Oe=function l9b(){return new Frb(this)};var yS=sfb(hBe,'HierarchicalPortConstraintProcessor/NodeComparator',1577);feb(1578,1,QAe,o9b);_.Kf=function p9b(a,b){m9b(RD(a,36),b)};var AS=sfb(hBe,'HierarchicalPortDummySizeProcessor',1578);feb(1579,1,QAe,C9b);_.Kf=function D9b(a,b){v9b(this,RD(a,36),b)};_.a=0;var DS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter',1579);feb(1580,1,fye,F9b);_.Ne=function G9b(a,b){return E9b(RD(a,10),RD(b,10))};_.Fb=function H9b(a){return this===a};_.Oe=function I9b(){return new Frb(this)};var BS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter/1',1580);feb(1581,1,fye,K9b);_.Ne=function L9b(a,b){return J9b(RD(a,10),RD(b,10))};_.Fb=function M9b(a){return this===a};_.Oe=function N9b(){return new Frb(this)};var CS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter/2',1581);feb(1582,1,QAe,Q9b);_.Kf=function R9b(a,b){P9b(RD(a,36),b)};var ES=sfb(hBe,'HierarchicalPortPositionProcessor',1582);feb(1583,1,QAe,$9b);_.Kf=function _9b(a,b){Z9b(this,RD(a,36))};_.a=0;_.c=0;var S9b,T9b;var IS=sfb(hBe,'HighDegreeNodeLayeringProcessor',1583);feb(580,1,{580:1},aac);_.b=-1;_.d=-1;var FS=sfb(hBe,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',580);feb(1584,1,{},bac);_.Kb=function cac(a){return U9b(),Z2b(RD(a,10))};_.Fb=function dac(a){return this===a};var GS=sfb(hBe,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1584);feb(1585,1,{},eac);_.Kb=function fac(a){return U9b(),a3b(RD(a,10))};_.Fb=function gac(a){return this===a};var HS=sfb(hBe,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1585);feb(1591,1,QAe,mac);_.Kf=function nac(a,b){lac(this,RD(a,36),b)};var NS=sfb(hBe,'HyperedgeDummyMerger',1591);feb(804,1,{},oac);_.a=false;_.b=false;_.c=false;var JS=sfb(hBe,'HyperedgeDummyMerger/MergeState',804);feb(1592,1,{},pac);_.Kb=function qac(a){return new SDb(null,new Swb(RD(a,30).a,16))};var KS=sfb(hBe,'HyperedgeDummyMerger/lambda$0$Type',1592);feb(1593,1,{},rac);_.Kb=function sac(a){return new SDb(null,new Swb(RD(a,10).j,16))};var LS=sfb(hBe,'HyperedgeDummyMerger/lambda$1$Type',1593);feb(1594,1,Qve,tac);_.Cd=function uac(a){RD(a,12).p=-1};var MS=sfb(hBe,'HyperedgeDummyMerger/lambda$2$Type',1594);feb(1595,1,QAe,xac);_.Kf=function yac(a,b){wac(RD(a,36),b)};var OS=sfb(hBe,'HypernodesProcessor',1595);feb(1596,1,QAe,Aac);_.Kf=function Bac(a,b){zac(RD(a,36),b)};var PS=sfb(hBe,'InLayerConstraintProcessor',1596);feb(1597,1,QAe,Dac);_.Kf=function Eac(a,b){Cac(RD(a,36),b)};var QS=sfb(hBe,'InnermostNodeMarginCalculator',1597);feb(1598,1,QAe,Iac);_.Kf=function Nac(a,b){Hac(this,RD(a,36))};_.a=pxe;_.b=pxe;_.c=oxe;_.d=oxe;var XS=sfb(hBe,'InteractiveExternalPortPositioner',1598);feb(1599,1,{},Oac);_.Kb=function Pac(a){return RD(a,18).d.i};_.Fb=function Qac(a){return this===a};var RS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$0$Type',1599);feb(1600,1,{},Rac);_.Kb=function Sac(a){return Jac(this.a,UD(a))};_.Fb=function Tac(a){return this===a};var SS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$1$Type',1600);feb(1601,1,{},Uac);_.Kb=function Vac(a){return RD(a,18).c.i};_.Fb=function Wac(a){return this===a};var TS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$2$Type',1601);feb(1602,1,{},Xac);_.Kb=function Yac(a){return Kac(this.a,UD(a))};_.Fb=function Zac(a){return this===a};var US=sfb(hBe,'InteractiveExternalPortPositioner/lambda$3$Type',1602);feb(1603,1,{},$ac);_.Kb=function _ac(a){return Lac(this.a,UD(a))};_.Fb=function abc(a){return this===a};var VS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$4$Type',1603);feb(1604,1,{},bbc);_.Kb=function cbc(a){return Mac(this.a,UD(a))};_.Fb=function dbc(a){return this===a};var WS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$5$Type',1604);feb(81,22,{3:1,34:1,22:1,81:1,196:1},icc);_.dg=function jcc(){switch(this.g){case 15:return new Hrc;case 22:return new bsc;case 47:return new ksc;case 28:case 35:return new Ldc;case 32:return new h6b;case 42:return new q6b;case 1:return new v6b;case 41:return new y6b;case 56:return new L8b((P8b(),O8b));case 0:return new L8b((P8b(),N8b));case 2:return new G6b;case 54:return new K6b;case 33:return new b7b;case 51:return new a8b;case 55:return new Z8b;case 13:return new f9b;case 38:return new o9b;case 44:return new C9b;case 40:return new Q9b;case 9:return new $9b;case 49:return new Yjc;case 37:return new mac;case 43:return new xac;case 27:return new Aac;case 30:return new Dac;case 3:return new Iac;case 18:return new scc;case 29:return new ycc;case 5:return new Lcc;case 50:return new Ucc;case 34:return new pdc;case 36:return new Zdc;case 52:return new z7b;case 11:return new fec;case 7:return new pec;case 39:return new Dec;case 45:return new Gec;case 16:return new Kec;case 10:return new _ec;case 48:return new Bfc;case 21:return new Ifc;case 23:return new FKc((RKc(),PKc));case 8:return new Rfc;case 12:return new Zfc;case 4:return new cgc;case 19:return new xgc;case 17:return new Vgc;case 53:return new Ygc;case 6:return new Nhc;case 25:return new ahc;case 46:return new rhc;case 31:return new Yhc;case 14:return new jic;case 26:return new Ssc;case 20:return new yic;case 24:return new FKc((RKc(),QKc));default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var ebc,fbc,gbc,hbc,ibc,jbc,kbc,lbc,mbc,nbc,obc,pbc,qbc,rbc,sbc,tbc,ubc,vbc,wbc,xbc,ybc,zbc,Abc,Bbc,Cbc,Dbc,Ebc,Fbc,Gbc,Hbc,Ibc,Jbc,Kbc,Lbc,Mbc,Nbc,Obc,Pbc,Qbc,Rbc,Sbc,Tbc,Ubc,Vbc,Wbc,Xbc,Ybc,Zbc,$bc,_bc,acc,bcc,ccc,dcc,ecc,fcc,gcc;var YS=tfb(hBe,mBe,81,WI,lcc,kcc);var mcc;feb(1605,1,QAe,scc);_.Kf=function tcc(a,b){qcc(RD(a,36),b)};var ZS=sfb(hBe,'InvertedPortProcessor',1605);feb(1606,1,QAe,ycc);_.Kf=function zcc(a,b){xcc(RD(a,36),b)};var bT=sfb(hBe,'LabelAndNodeSizeProcessor',1606);feb(1607,1,nwe,Acc);_.Mb=function Bcc(a){return RD(a,10).k==(r3b(),p3b)};var $S=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$0$Type',1607);feb(1608,1,nwe,Ccc);_.Mb=function Dcc(a){return RD(a,10).k==(r3b(),m3b)};var _S=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$1$Type',1608);feb(1609,1,Qve,Ecc);_.Cd=function Fcc(a){vcc(this.b,this.a,this.c,RD(a,10))};_.a=false;_.c=false;var aT=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$2$Type',1609);feb(1610,1,QAe,Lcc);_.Kf=function Mcc(a,b){Jcc(RD(a,36),b)};var Gcc;var dT=sfb(hBe,'LabelDummyInserter',1610);feb(1611,1,xye,Ncc);_.Lb=function Occ(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Lmd))};_.Fb=function Pcc(a){return this===a};_.Mb=function Qcc(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Lmd))};var cT=sfb(hBe,'LabelDummyInserter/1',1611);feb(1612,1,QAe,Ucc);_.Kf=function Vcc(a,b){Tcc(RD(a,36),b)};var fT=sfb(hBe,'LabelDummyRemover',1612);feb(1613,1,nwe,Wcc);_.Mb=function Xcc(a){return Heb(TD(mQb(RD(a,72),(yCc(),vAc))))};var eT=sfb(hBe,'LabelDummyRemover/lambda$0$Type',1613);feb(1378,1,QAe,pdc);_.Kf=function tdc(a,b){ldc(this,RD(a,36),b)};_.a=null;var Ycc;var mT=sfb(hBe,'LabelDummySwitcher',1378);feb(292,1,{292:1},xdc);_.c=0;_.d=null;_.f=0;var gT=sfb(hBe,'LabelDummySwitcher/LabelDummyInfo',292);feb(1379,1,{},ydc);_.Kb=function zdc(a){return Zcc(),new SDb(null,new Swb(RD(a,30).a,16))};var hT=sfb(hBe,'LabelDummySwitcher/lambda$0$Type',1379);feb(1380,1,nwe,Adc);_.Mb=function Bdc(a){return Zcc(),RD(a,10).k==(r3b(),n3b)};var iT=sfb(hBe,'LabelDummySwitcher/lambda$1$Type',1380);feb(1381,1,{},Cdc);_.Kb=function Ddc(a){return qdc(this.a,RD(a,10))};var jT=sfb(hBe,'LabelDummySwitcher/lambda$2$Type',1381);feb(1382,1,Qve,Edc);_.Cd=function Fdc(a){rdc(this.a,RD(a,292))};var kT=sfb(hBe,'LabelDummySwitcher/lambda$3$Type',1382);feb(1383,1,fye,Gdc);_.Ne=function Hdc(a,b){return sdc(RD(a,292),RD(b,292))};_.Fb=function Idc(a){return this===a};_.Oe=function Jdc(){return new Frb(this)};var lT=sfb(hBe,'LabelDummySwitcher/lambda$4$Type',1383);feb(802,1,QAe,Ldc);_.Kf=function Mdc(a,b){Kdc(RD(a,36),b)};var nT=sfb(hBe,'LabelManagementProcessor',802);feb(1614,1,QAe,Zdc);_.Kf=function $dc(a,b){Tdc(RD(a,36),b)};var oT=sfb(hBe,'LabelSideSelector',1614);feb(1622,1,QAe,fec);_.Kf=function gec(a,b){bec(RD(a,36),b)};var pT=sfb(hBe,'LayerConstraintPostprocessor',1622);feb(1623,1,QAe,pec);_.Kf=function qec(a,b){nec(RD(a,36),b)};var hec;var rT=sfb(hBe,'LayerConstraintPreprocessor',1623);feb(371,22,{3:1,34:1,22:1,371:1},xec);var rec,sec,tec,uec;var qT=tfb(hBe,'LayerConstraintPreprocessor/HiddenNodeConnections',371,WI,zec,yec);var Aec;feb(1624,1,QAe,Dec);_.Kf=function Eec(a,b){Cec(RD(a,36),b)};var sT=sfb(hBe,'LayerSizeAndGraphHeightCalculator',1624);feb(1625,1,QAe,Gec);_.Kf=function Iec(a,b){Fec(RD(a,36),b)};var tT=sfb(hBe,'LongEdgeJoiner',1625);feb(1626,1,QAe,Kec);_.Kf=function Mec(a,b){Jec(RD(a,36),b)};var uT=sfb(hBe,'LongEdgeSplitter',1626);feb(1627,1,QAe,_ec);_.Kf=function cfc(a,b){Vec(this,RD(a,36),b)};_.e=0;_.f=0;_.j=0;_.k=0;_.n=0;_.o=0;var Pec,Qec;var AT=sfb(hBe,'NodePromotion',1627);feb(1628,1,fye,efc);_.Ne=function ffc(a,b){return dfc(RD(a,10),RD(b,10))};_.Fb=function gfc(a){return this===a};_.Oe=function hfc(){return new Frb(this)};var vT=sfb(hBe,'NodePromotion/1',1628);feb(1629,1,fye,jfc);_.Ne=function kfc(a,b){return ifc(RD(a,10),RD(b,10))};_.Fb=function lfc(a){return this===a};_.Oe=function mfc(){return new Frb(this)};var wT=sfb(hBe,'NodePromotion/2',1629);feb(1630,1,{},nfc);_.Kb=function ofc(a){return RD(a,42),Rec(),Geb(),true};_.Fb=function pfc(a){return this===a};var xT=sfb(hBe,'NodePromotion/lambda$0$Type',1630);feb(1631,1,{},qfc);_.Kb=function rfc(a){return afc(this.a,RD(a,42))};_.Fb=function sfc(a){return this===a};_.a=0;var yT=sfb(hBe,'NodePromotion/lambda$1$Type',1631);feb(1632,1,{},tfc);_.Kb=function ufc(a){return bfc(this.a,RD(a,42))};_.Fb=function vfc(a){return this===a};_.a=0;var zT=sfb(hBe,'NodePromotion/lambda$2$Type',1632);feb(1633,1,QAe,Bfc);_.Kf=function Cfc(a,b){wfc(RD(a,36),b)};var BT=sfb(hBe,'NorthSouthPortPostprocessor',1633);feb(1634,1,QAe,Ifc);_.Kf=function Kfc(a,b){Gfc(RD(a,36),b)};var DT=sfb(hBe,'NorthSouthPortPreprocessor',1634);feb(1635,1,fye,Lfc);_.Ne=function Mfc(a,b){return Jfc(RD(a,12),RD(b,12))};_.Fb=function Nfc(a){return this===a};_.Oe=function Ofc(){return new Frb(this)};var CT=sfb(hBe,'NorthSouthPortPreprocessor/lambda$0$Type',1635);feb(1636,1,QAe,Rfc);_.Kf=function Tfc(a,b){Qfc(RD(a,36),b)};var GT=sfb(hBe,'PartitionMidprocessor',1636);feb(1637,1,nwe,Ufc);_.Mb=function Vfc(a){return nQb(RD(a,10),(yCc(),tBc))};var ET=sfb(hBe,'PartitionMidprocessor/lambda$0$Type',1637);feb(1638,1,Qve,Wfc);_.Cd=function Xfc(a){Sfc(this.a,RD(a,10))};var FT=sfb(hBe,'PartitionMidprocessor/lambda$1$Type',1638);feb(1639,1,QAe,Zfc);_.Kf=function $fc(a,b){Yfc(RD(a,36),b)};var HT=sfb(hBe,'PartitionPostprocessor',1639);feb(1640,1,QAe,cgc);_.Kf=function dgc(a,b){agc(RD(a,36),b)};var MT=sfb(hBe,'PartitionPreprocessor',1640);feb(1641,1,nwe,egc);_.Mb=function fgc(a){return nQb(RD(a,10),(yCc(),tBc))};var IT=sfb(hBe,'PartitionPreprocessor/lambda$0$Type',1641);feb(1642,1,{},ggc);_.Kb=function hgc(a){return new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var JT=sfb(hBe,'PartitionPreprocessor/lambda$1$Type',1642);feb(1643,1,nwe,igc);_.Mb=function jgc(a){return _fc(RD(a,18))};var KT=sfb(hBe,'PartitionPreprocessor/lambda$2$Type',1643);feb(1644,1,Qve,kgc);_.Cd=function lgc(a){bgc(RD(a,18))};var LT=sfb(hBe,'PartitionPreprocessor/lambda$3$Type',1644);feb(1645,1,QAe,xgc);_.Kf=function Bgc(a,b){ugc(RD(a,36),b)};var mgc,ngc,ogc,pgc,qgc,rgc;var ST=sfb(hBe,'PortListSorter',1645);feb(1648,1,fye,Dgc);_.Ne=function Egc(a,b){return ygc(RD(a,12),RD(b,12))};_.Fb=function Fgc(a){return this===a};_.Oe=function Ggc(){return new Frb(this)};var NT=sfb(hBe,'PortListSorter/lambda$0$Type',1648);feb(1650,1,fye,Hgc);_.Ne=function Igc(a,b){return zgc(RD(a,12),RD(b,12))};_.Fb=function Jgc(a){return this===a};_.Oe=function Kgc(){return new Frb(this)};var OT=sfb(hBe,'PortListSorter/lambda$1$Type',1650);feb(1646,1,{},Lgc);_.Kb=function Mgc(a){return sgc(),RD(a,12).e};var PT=sfb(hBe,'PortListSorter/lambda$2$Type',1646);feb(1647,1,{},Ngc);_.Kb=function Ogc(a){return sgc(),RD(a,12).g};var QT=sfb(hBe,'PortListSorter/lambda$3$Type',1647);feb(1649,1,fye,Pgc);_.Ne=function Qgc(a,b){return Agc(RD(a,12),RD(b,12))};_.Fb=function Rgc(a){return this===a};_.Oe=function Sgc(){return new Frb(this)};var RT=sfb(hBe,'PortListSorter/lambda$4$Type',1649);feb(1651,1,QAe,Vgc);_.Kf=function Wgc(a,b){Tgc(RD(a,36),b)};var TT=sfb(hBe,'PortSideProcessor',1651);feb(1652,1,QAe,Ygc);_.Kf=function Zgc(a,b){Xgc(RD(a,36),b)};var UT=sfb(hBe,'ReversedEdgeRestorer',1652);feb(1657,1,QAe,ahc);_.Kf=function bhc(a,b){$gc(this,RD(a,36),b)};var _T=sfb(hBe,'SelfLoopPortRestorer',1657);feb(1658,1,{},chc);_.Kb=function dhc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var VT=sfb(hBe,'SelfLoopPortRestorer/lambda$0$Type',1658);feb(1659,1,nwe,ehc);_.Mb=function fhc(a){return RD(a,10).k==(r3b(),p3b)};var WT=sfb(hBe,'SelfLoopPortRestorer/lambda$1$Type',1659);feb(1660,1,nwe,ghc);_.Mb=function hhc(a){return nQb(RD(a,10),(Ywc(),Pwc))};var XT=sfb(hBe,'SelfLoopPortRestorer/lambda$2$Type',1660);feb(1661,1,{},ihc);_.Kb=function jhc(a){return RD(mQb(RD(a,10),(Ywc(),Pwc)),337)};var YT=sfb(hBe,'SelfLoopPortRestorer/lambda$3$Type',1661);feb(1662,1,Qve,khc);_.Cd=function lhc(a){_gc(this.a,RD(a,337))};var ZT=sfb(hBe,'SelfLoopPortRestorer/lambda$4$Type',1662);feb(805,1,Qve,mhc);_.Cd=function nhc(a){Rmc(RD(a,105))};var $T=sfb(hBe,'SelfLoopPortRestorer/lambda$5$Type',805);feb(1663,1,QAe,rhc);_.Kf=function thc(a,b){ohc(RD(a,36),b)};var iU=sfb(hBe,'SelfLoopPostProcessor',1663);feb(1664,1,{},uhc);_.Kb=function vhc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var aU=sfb(hBe,'SelfLoopPostProcessor/lambda$0$Type',1664);feb(1665,1,nwe,whc);_.Mb=function xhc(a){return RD(a,10).k==(r3b(),p3b)};var bU=sfb(hBe,'SelfLoopPostProcessor/lambda$1$Type',1665);feb(1666,1,nwe,yhc);_.Mb=function zhc(a){return nQb(RD(a,10),(Ywc(),Pwc))};var cU=sfb(hBe,'SelfLoopPostProcessor/lambda$2$Type',1666);feb(1667,1,Qve,Ahc);_.Cd=function Bhc(a){phc(RD(a,10))};var dU=sfb(hBe,'SelfLoopPostProcessor/lambda$3$Type',1667);feb(1668,1,{},Chc);_.Kb=function Dhc(a){return new SDb(null,new Swb(RD(a,105).f,1))};var eU=sfb(hBe,'SelfLoopPostProcessor/lambda$4$Type',1668);feb(1669,1,Qve,Ehc);_.Cd=function Fhc(a){qhc(this.a,RD(a,340))};var fU=sfb(hBe,'SelfLoopPostProcessor/lambda$5$Type',1669);feb(1670,1,nwe,Ghc);_.Mb=function Hhc(a){return !!RD(a,105).i};var gU=sfb(hBe,'SelfLoopPostProcessor/lambda$6$Type',1670);feb(1671,1,Qve,Ihc);_.Cd=function Jhc(a){shc(this.a,RD(a,105))};var hU=sfb(hBe,'SelfLoopPostProcessor/lambda$7$Type',1671);feb(1653,1,QAe,Nhc);_.Kf=function Ohc(a,b){Mhc(RD(a,36),b)};var mU=sfb(hBe,'SelfLoopPreProcessor',1653);feb(1654,1,{},Phc);_.Kb=function Qhc(a){return new SDb(null,new Swb(RD(a,105).f,1))};var jU=sfb(hBe,'SelfLoopPreProcessor/lambda$0$Type',1654);feb(1655,1,{},Rhc);_.Kb=function Shc(a){return RD(a,340).a};var kU=sfb(hBe,'SelfLoopPreProcessor/lambda$1$Type',1655);feb(1656,1,Qve,Thc);_.Cd=function Uhc(a){Lhc(RD(a,18))};var lU=sfb(hBe,'SelfLoopPreProcessor/lambda$2$Type',1656);feb(1672,1,QAe,Yhc);_.Kf=function Zhc(a,b){Whc(this,RD(a,36),b)};var sU=sfb(hBe,'SelfLoopRouter',1672);feb(1673,1,{},$hc);_.Kb=function _hc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var nU=sfb(hBe,'SelfLoopRouter/lambda$0$Type',1673);feb(1674,1,nwe,aic);_.Mb=function bic(a){return RD(a,10).k==(r3b(),p3b)};var oU=sfb(hBe,'SelfLoopRouter/lambda$1$Type',1674);feb(1675,1,nwe,cic);_.Mb=function dic(a){return nQb(RD(a,10),(Ywc(),Pwc))};var pU=sfb(hBe,'SelfLoopRouter/lambda$2$Type',1675);feb(1676,1,{},eic);_.Kb=function fic(a){return RD(mQb(RD(a,10),(Ywc(),Pwc)),337)};var qU=sfb(hBe,'SelfLoopRouter/lambda$3$Type',1676);feb(1677,1,Qve,gic);_.Cd=function hic(a){Vhc(this.a,this.b,RD(a,337))};var rU=sfb(hBe,'SelfLoopRouter/lambda$4$Type',1677);feb(1678,1,QAe,jic);_.Kf=function mic(a,b){iic(RD(a,36),b)};var xU=sfb(hBe,'SemiInteractiveCrossMinProcessor',1678);feb(1679,1,nwe,nic);_.Mb=function oic(a){return RD(a,10).k==(r3b(),p3b)};var tU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1679);feb(1680,1,nwe,pic);_.Mb=function qic(a){return lQb(RD(a,10))._b((yCc(),IBc))};var uU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1680);feb(1681,1,fye,ric);_.Ne=function sic(a,b){return kic(RD(a,10),RD(b,10))};_.Fb=function tic(a){return this===a};_.Oe=function uic(){return new Frb(this)};var vU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1681);feb(1682,1,{},vic);_.Ve=function wic(a,b){return lic(RD(a,10),RD(b,10))};var wU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1682);feb(1684,1,QAe,yic);_.Kf=function Cic(a,b){xic(RD(a,36),b)};var AU=sfb(hBe,'SortByInputModelProcessor',1684);feb(1685,1,nwe,Dic);_.Mb=function Eic(a){return RD(a,12).g.c.length!=0};var yU=sfb(hBe,'SortByInputModelProcessor/lambda$0$Type',1685);feb(1686,1,Qve,Fic);_.Cd=function Gic(a){Aic(this.a,RD(a,12))};var zU=sfb(hBe,'SortByInputModelProcessor/lambda$1$Type',1686);feb(1759,817,{},Pic);_.df=function Qic(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new bnb;FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new Rjc),new Tjc(this,b));eHb(this,new Zic);Umb(b,new bjc);b.c.length=0;FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new djc),new fjc(b));eHb(this,new jjc);Umb(b,new njc);b.c.length=0;c=Wvb(TCb(HDb(new SDb(null,new Swb(this.c.a.b,16)),new pjc(this))),new rjc);FDb(new SDb(null,new Swb(this.c.a.a,16)),new vjc(c,b));eHb(this,new zjc);Umb(b,new Djc);b.c.length=0;break;case 3:d=new bnb;eHb(this,new Ric);e=Wvb(TCb(HDb(new SDb(null,new Swb(this.c.a.b,16)),new Vic(this))),new tjc);FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new Fjc),new Hjc(e,d));eHb(this,new Ljc);Umb(d,new Pjc);d.c.length=0;break;default:throw Adb(new Ied);}};_.b=0;var ZU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation',1759);feb(1760,1,xye,Ric);_.Lb=function Sic(a){return ZD(RD(a,60).g,154)};_.Fb=function Tic(a){return this===a};_.Mb=function Uic(a){return ZD(RD(a,60).g,154)};var BU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1760);feb(1761,1,{},Vic);_.Ye=function Wic(a){return Jic(this.a,RD(a,60))};var CU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1761);feb(1769,1,owe,Xic);_.de=function Yic(){Iic(this.a,this.b,-1)};_.b=0;var DU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1769);feb(1771,1,xye,Zic);_.Lb=function $ic(a){return ZD(RD(a,60).g,154)};_.Fb=function _ic(a){return this===a};_.Mb=function ajc(a){return ZD(RD(a,60).g,154)};var EU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1771);feb(1772,1,Qve,bjc);_.Cd=function cjc(a){RD(a,380).de()};var FU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1772);feb(1773,1,nwe,djc);_.Mb=function ejc(a){return ZD(RD(a,60).g,10)};var GU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1773);feb(1775,1,Qve,fjc);_.Cd=function gjc(a){Kic(this.a,RD(a,60))};var HU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1775);feb(1774,1,owe,hjc);_.de=function ijc(){Iic(this.b,this.a,-1)};_.a=0;var IU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1774);feb(1776,1,xye,jjc);_.Lb=function kjc(a){return ZD(RD(a,60).g,10)};_.Fb=function ljc(a){return this===a};_.Mb=function mjc(a){return ZD(RD(a,60).g,10)};var JU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1776);feb(1777,1,Qve,njc);_.Cd=function ojc(a){RD(a,380).de()};var KU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1777);feb(1778,1,{},pjc);_.Ye=function qjc(a){return Lic(this.a,RD(a,60))};var LU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1778);feb(1779,1,{},rjc);_.We=function sjc(){return 0};var MU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1779);feb(1762,1,{},tjc);_.We=function ujc(){return 0};var NU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1762);feb(1781,1,Qve,vjc);_.Cd=function wjc(a){Mic(this.a,this.b,RD(a,316))};_.a=0;var OU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1781);feb(1780,1,owe,xjc);_.de=function yjc(){Hic(this.a,this.b,-1)};_.b=0;var PU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1780);feb(1782,1,xye,zjc);_.Lb=function Ajc(a){return RD(a,60),true};_.Fb=function Bjc(a){return this===a};_.Mb=function Cjc(a){return RD(a,60),true};var QU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1782);feb(1783,1,Qve,Djc);_.Cd=function Ejc(a){RD(a,380).de()};var RU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1783);feb(1763,1,nwe,Fjc);_.Mb=function Gjc(a){return ZD(RD(a,60).g,10)};var SU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1763);feb(1765,1,Qve,Hjc);_.Cd=function Ijc(a){Nic(this.a,this.b,RD(a,60))};_.a=0;var TU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1765);feb(1764,1,owe,Jjc);_.de=function Kjc(){Iic(this.b,this.a,-1)};_.a=0;var UU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1764);feb(1766,1,xye,Ljc);_.Lb=function Mjc(a){return RD(a,60),true};_.Fb=function Njc(a){return this===a};_.Mb=function Ojc(a){return RD(a,60),true};var VU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1766);feb(1767,1,Qve,Pjc);_.Cd=function Qjc(a){RD(a,380).de()};var WU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1767);feb(1768,1,nwe,Rjc);_.Mb=function Sjc(a){return ZD(RD(a,60).g,154)};var XU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1768);feb(1770,1,Qve,Tjc);_.Cd=function Ujc(a){Oic(this.a,this.b,RD(a,60))};var YU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1770);feb(1586,1,QAe,Yjc);_.Kf=function bkc(a,b){Xjc(this,RD(a,36),b)};var Vjc;var bV=sfb(rBe,'HorizontalGraphCompactor',1586);feb(1587,1,{},ckc);_.ff=function dkc(a,b){var c,d,e;if(_jc(a,b)){return 0}c=Zjc(a);d=Zjc(b);if(!!c&&c.k==(r3b(),m3b)||!!d&&d.k==(r3b(),m3b)){return 0}e=RD(mQb(this.a.a,(Ywc(),Qwc)),312);return ZEc(e,c?c.k:(r3b(),o3b),d?d.k:(r3b(),o3b))};_.gf=function ekc(a,b){var c,d,e;if(_jc(a,b)){return 1}c=Zjc(a);d=Zjc(b);e=RD(mQb(this.a.a,(Ywc(),Qwc)),312);return aFc(e,c?c.k:(r3b(),o3b),d?d.k:(r3b(),o3b))};var $U=sfb(rBe,'HorizontalGraphCompactor/1',1587);feb(1588,1,{},fkc);_.ef=function gkc(a,b){return Wjc(),a.a.i==0};var _U=sfb(rBe,'HorizontalGraphCompactor/lambda$0$Type',1588);feb(1589,1,{},hkc);_.ef=function ikc(a,b){return akc(this.a,a,b)};var aV=sfb(rBe,'HorizontalGraphCompactor/lambda$1$Type',1589);feb(1730,1,{},Ckc);var jkc,kkc;var BV=sfb(rBe,'LGraphToCGraphTransformer',1730);feb(1738,1,nwe,Kkc);_.Mb=function Lkc(a){return a!=null};var cV=sfb(rBe,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1738);feb(1731,1,{},Mkc);_.Kb=function Nkc(a){return lkc(),jeb(mQb(RD(RD(a,60).g,10),(Ywc(),Awc)))};var dV=sfb(rBe,'LGraphToCGraphTransformer/lambda$0$Type',1731);feb(1732,1,{},Okc);_.Kb=function Pkc(a){return lkc(),Mlc(RD(RD(a,60).g,154))};var eV=sfb(rBe,'LGraphToCGraphTransformer/lambda$1$Type',1732);feb(1741,1,nwe,Qkc);_.Mb=function Rkc(a){return lkc(),ZD(RD(a,60).g,10)};var fV=sfb(rBe,'LGraphToCGraphTransformer/lambda$10$Type',1741);feb(1742,1,Qve,Skc);_.Cd=function Tkc(a){Dkc(RD(a,60))};var gV=sfb(rBe,'LGraphToCGraphTransformer/lambda$11$Type',1742);feb(1743,1,nwe,Ukc);_.Mb=function Vkc(a){return lkc(),ZD(RD(a,60).g,154)};var hV=sfb(rBe,'LGraphToCGraphTransformer/lambda$12$Type',1743);feb(1747,1,Qve,Wkc);_.Cd=function Xkc(a){Ekc(RD(a,60))};var iV=sfb(rBe,'LGraphToCGraphTransformer/lambda$13$Type',1747);feb(1744,1,Qve,Ykc);_.Cd=function Zkc(a){Fkc(this.a,RD(a,8))};_.a=0;var jV=sfb(rBe,'LGraphToCGraphTransformer/lambda$14$Type',1744);feb(1745,1,Qve,$kc);_.Cd=function _kc(a){Gkc(this.a,RD(a,116))};_.a=0;var kV=sfb(rBe,'LGraphToCGraphTransformer/lambda$15$Type',1745);feb(1746,1,Qve,alc);_.Cd=function blc(a){Hkc(this.a,RD(a,8))};_.a=0;var lV=sfb(rBe,'LGraphToCGraphTransformer/lambda$16$Type',1746);feb(1748,1,{},clc);_.Kb=function dlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var mV=sfb(rBe,'LGraphToCGraphTransformer/lambda$17$Type',1748);feb(1749,1,nwe,elc);_.Mb=function flc(a){return lkc(),W0b(RD(a,18))};var nV=sfb(rBe,'LGraphToCGraphTransformer/lambda$18$Type',1749);feb(1750,1,Qve,glc);_.Cd=function hlc(a){ukc(this.a,RD(a,18))};var oV=sfb(rBe,'LGraphToCGraphTransformer/lambda$19$Type',1750);feb(1734,1,Qve,ilc);_.Cd=function jlc(a){vkc(this.a,RD(a,154))};var pV=sfb(rBe,'LGraphToCGraphTransformer/lambda$2$Type',1734);feb(1751,1,{},klc);_.Kb=function llc(a){return lkc(),new SDb(null,new Swb(RD(a,30).a,16))};var qV=sfb(rBe,'LGraphToCGraphTransformer/lambda$20$Type',1751);feb(1752,1,{},mlc);_.Kb=function nlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var rV=sfb(rBe,'LGraphToCGraphTransformer/lambda$21$Type',1752);feb(1753,1,{},olc);_.Kb=function plc(a){return lkc(),RD(mQb(RD(a,18),(Ywc(),Twc)),15)};var sV=sfb(rBe,'LGraphToCGraphTransformer/lambda$22$Type',1753);feb(1754,1,nwe,qlc);_.Mb=function rlc(a){return Ikc(RD(a,15))};var tV=sfb(rBe,'LGraphToCGraphTransformer/lambda$23$Type',1754);feb(1755,1,Qve,slc);_.Cd=function tlc(a){nkc(this.a,RD(a,15))};var uV=sfb(rBe,'LGraphToCGraphTransformer/lambda$24$Type',1755);feb(1733,1,Qve,ulc);_.Cd=function vlc(a){wkc(this.a,this.b,RD(a,154))};var vV=sfb(rBe,'LGraphToCGraphTransformer/lambda$3$Type',1733);feb(1735,1,{},wlc);_.Kb=function xlc(a){return lkc(),new SDb(null,new Swb(RD(a,30).a,16))};var wV=sfb(rBe,'LGraphToCGraphTransformer/lambda$4$Type',1735);feb(1736,1,{},ylc);_.Kb=function zlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var xV=sfb(rBe,'LGraphToCGraphTransformer/lambda$5$Type',1736);feb(1737,1,{},Alc);_.Kb=function Blc(a){return lkc(),RD(mQb(RD(a,18),(Ywc(),Twc)),15)};var yV=sfb(rBe,'LGraphToCGraphTransformer/lambda$6$Type',1737);feb(1739,1,Qve,Clc);_.Cd=function Dlc(a){Jkc(this.a,RD(a,15))};var zV=sfb(rBe,'LGraphToCGraphTransformer/lambda$8$Type',1739);feb(1740,1,Qve,Elc);_.Cd=function Flc(a){xkc(this.a,this.b,RD(a,154))};var AV=sfb(rBe,'LGraphToCGraphTransformer/lambda$9$Type',1740);feb(1729,1,{},Jlc);_.cf=function Klc(a){var b,c,d,e,f;this.a=a;this.d=new BIb;this.c=$C(DN,rve,125,this.a.a.a.c.length,0,1);this.b=0;for(c=new Anb(this.a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.d=this.b;f=eJb(fJb(new gJb,b),this.d);this.c[this.b]=f;++this.b}Ilc(this);Hlc(this);Glc(this);lJb(CJb(this.d),new Oqd);for(e=new Anb(this.a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);d.d.c=this.c[d.a.d].e+d.b.a}};_.b=0;var CV=sfb(rBe,'NetworkSimplexCompaction',1729);feb(154,1,{34:1,154:1},Nlc);_.Fd=function Olc(a){return Llc(this,RD(a,154))};_.Ib=function Plc(){return Mlc(this)};var DV=sfb(rBe,'VerticalSegment',154);feb(841,1,{},Ylc);_.c=0;_.e=0;_.i=0;var GV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter',841);feb(677,1,{677:1},dmc);_.Ib=function emc(){return 'AdjacencyList [node='+this.d+', adjacencies= '+this.a+']'};_.b=0;_.c=0;_.f=0;var FV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList',677);feb(293,1,{34:1,293:1},hmc);_.Fd=function imc(a){return fmc(this,RD(a,293))};_.Ib=function jmc(){return 'Adjacency [position='+this.c+', cardinality='+this.a+', currentCardinality='+this.b+']'};_.a=0;_.b=0;_.c=0;var EV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency',293);feb(2026,1,{},mmc);_.b=0;_.e=false;var HV=sfb(sBe,'CrossingMatrixFiller',2026);var QY=ufb(tBe,'IInitializable');feb(1867,1,uBe,smc);_.gg=function vmc(a,b,c,d,e,f){};_.ig=function xmc(a,b,c){};_.eg=function tmc(){return this.c!=(RKc(),PKc)};_.fg=function umc(){this.e=$C(kE,Pwe,28,this.d,15,1)};_.hg=function wmc(a,b){b[a][0].c.p=a};_.jg=function ymc(a,b,c,d){++this.d};_.kg=function zmc(){return true};_.lg=function Amc(a,b,c,d){omc(this,a,b,c);return nmc(this,b)};_.mg=function Bmc(a,b){var c;c=pmc(b,a.length);omc(this,a,c,b);return qmc(this,c)};_.d=0;var IV=sfb(sBe,'GreedySwitchHeuristic',1867);feb(2029,1,{},Kmc);_.b=0;_.d=0;var JV=sfb(sBe,'NorthSouthEdgeNeighbouringNodeCrossingsCounter',2029);feb(2016,1,{},Pmc);_.a=false;var KV=sfb(sBe,'SwitchDecider',2016);feb(105,1,{105:1},Vmc);_.a=null;_.c=null;_.i=null;var NV=sfb(vBe,'SelfHyperLoop',105);feb(2013,1,{},_mc);_.c=0;_.e=0;var MV=sfb(vBe,'SelfHyperLoopLabels',2013);feb(421,22,{3:1,34:1,22:1,421:1},fnc);var anc,bnc,cnc,dnc;var LV=tfb(vBe,'SelfHyperLoopLabels/Alignment',421,WI,hnc,gnc);var inc;feb(340,1,{340:1},knc);var OV=sfb(vBe,'SelfLoopEdge',340);feb(337,1,{337:1},onc);_.a=false;var QV=sfb(vBe,'SelfLoopHolder',337);feb(1790,1,nwe,qnc);_.Mb=function rnc(a){return W0b(RD(a,18))};var PV=sfb(vBe,'SelfLoopHolder/lambda$0$Type',1790);feb(113,1,{113:1},tnc);_.a=false;_.c=false;var SV=sfb(vBe,'SelfLoopPort',113);feb(1855,1,nwe,unc);_.Mb=function vnc(a){return W0b(RD(a,18))};var RV=sfb(vBe,'SelfLoopPort/lambda$0$Type',1855);feb(375,22,{3:1,34:1,22:1,375:1},Cnc);var wnc,xnc,ync,znc,Anc;var TV=tfb(vBe,'SelfLoopType',375,WI,Fnc,Enc);var Gnc;feb(1798,1,{},boc);var Inc,Jnc,Knc,Lnc;var gW=sfb(wBe,'PortRestorer',1798);feb(372,22,{3:1,34:1,22:1,372:1},koc);var goc,hoc,ioc;var UV=tfb(wBe,'PortRestorer/PortSideArea',372,WI,moc,loc);var noc;feb(1799,1,{},poc);_.Kb=function qoc(a){return Mnc(),RD(a,15).Oc()};var VV=sfb(wBe,'PortRestorer/lambda$0$Type',1799);feb(1800,1,Qve,roc);_.Cd=function soc(a){Mnc();RD(a,113).c=false};var WV=sfb(wBe,'PortRestorer/lambda$1$Type',1800);feb(1809,1,nwe,toc);_.Mb=function uoc(a){return Mnc(),RD(a,12).j==(qpd(),ppd)};var XV=sfb(wBe,'PortRestorer/lambda$10$Type',1809);feb(1810,1,{},voc);_.Kb=function woc(a){return Mnc(),RD(a,113).d};var YV=sfb(wBe,'PortRestorer/lambda$11$Type',1810);feb(1811,1,Qve,xoc);_.Cd=function yoc(a){coc(this.a,RD(a,12))};var ZV=sfb(wBe,'PortRestorer/lambda$12$Type',1811);feb(1801,1,Qve,zoc);_.Cd=function Aoc(a){doc(this.a,RD(a,105))};var $V=sfb(wBe,'PortRestorer/lambda$2$Type',1801);feb(1802,1,fye,Boc);_.Ne=function Coc(a,b){return eoc(RD(a,113),RD(b,113))};_.Fb=function Doc(a){return this===a};_.Oe=function Eoc(){return new Frb(this)};var _V=sfb(wBe,'PortRestorer/lambda$3$Type',1802);feb(1803,1,nwe,Foc);_.Mb=function Goc(a){return Mnc(),RD(a,113).c};var aW=sfb(wBe,'PortRestorer/lambda$4$Type',1803);feb(1804,1,nwe,Hoc);_.Mb=function Ioc(a){return Tnc(RD(a,12))};var bW=sfb(wBe,'PortRestorer/lambda$5$Type',1804);feb(1805,1,nwe,Joc);_.Mb=function Koc(a){return Mnc(),RD(a,12).j==(qpd(),Yod)};var cW=sfb(wBe,'PortRestorer/lambda$6$Type',1805);feb(1806,1,nwe,Loc);_.Mb=function Moc(a){return Mnc(),RD(a,12).j==(qpd(),Xod)};var dW=sfb(wBe,'PortRestorer/lambda$7$Type',1806);feb(1807,1,nwe,Noc);_.Mb=function Ooc(a){return Unc(RD(a,12))};var eW=sfb(wBe,'PortRestorer/lambda$8$Type',1807);feb(1808,1,nwe,Poc);_.Mb=function Qoc(a){return Mnc(),RD(a,12).j==(qpd(),npd)};var fW=sfb(wBe,'PortRestorer/lambda$9$Type',1808);feb(276,22,{3:1,34:1,22:1,276:1},fpc);var Yoc,Zoc,$oc,_oc,apc,bpc,cpc,dpc;var hW=tfb(wBe,'PortSideAssigner/Target',276,WI,hpc,gpc);var ipc;feb(1791,1,{},kpc);_.Kb=function lpc(a){return CDb(new SDb(null,new Swb(RD(a,105).j,16)),new Cpc)};var iW=sfb(wBe,'PortSideAssigner/lambda$1$Type',1791);feb(1792,1,{},mpc);_.Kb=function npc(a){return RD(a,113).d};var jW=sfb(wBe,'PortSideAssigner/lambda$2$Type',1792);feb(1793,1,Qve,opc);_.Cd=function ppc(a){Q3b(RD(a,12),(qpd(),Yod))};var kW=sfb(wBe,'PortSideAssigner/lambda$3$Type',1793);feb(1794,1,{},qpc);_.Kb=function rpc(a){return RD(a,113).d};var lW=sfb(wBe,'PortSideAssigner/lambda$4$Type',1794);feb(1795,1,Qve,spc);_.Cd=function tpc(a){Voc(this.a,RD(a,12))};var mW=sfb(wBe,'PortSideAssigner/lambda$5$Type',1795);feb(1796,1,fye,upc);_.Ne=function vpc(a,b){return Woc(RD(a,105),RD(b,105))};_.Fb=function wpc(a){return this===a};_.Oe=function xpc(){return new Frb(this)};var nW=sfb(wBe,'PortSideAssigner/lambda$6$Type',1796);feb(1797,1,fye,ypc);_.Ne=function zpc(a,b){return Xoc(RD(a,113),RD(b,113))};_.Fb=function Apc(a){return this===a};_.Oe=function Bpc(){return new Frb(this)};var oW=sfb(wBe,'PortSideAssigner/lambda$7$Type',1797);feb(820,1,nwe,Cpc);_.Mb=function Dpc(a){return RD(a,113).c};var pW=sfb(wBe,'PortSideAssigner/lambda$8$Type',820);feb(2108,1,{});var qW=sfb(xBe,'AbstractSelfLoopRouter',2108);feb(1816,1,fye,Mpc);_.Ne=function Npc(a,b){return Kpc(RD(a,105),RD(b,105))};_.Fb=function Opc(a){return this===a};_.Oe=function Ppc(){return new Frb(this)};var rW=sfb(xBe,Vye,1816);feb(1817,1,fye,Qpc);_.Ne=function Rpc(a,b){return Lpc(RD(a,105),RD(b,105))};_.Fb=function Spc(a){return this===a};_.Oe=function Tpc(){return new Frb(this)};var sW=sfb(xBe,Wye,1817);feb(1856,2108,{},dqc);_.ng=function eqc(a,b,c){return c};var uW=sfb(xBe,'OrthogonalSelfLoopRouter',1856);feb(1858,1,Qve,fqc);_.Cd=function gqc(a){cqc(this.b,this.a,RD(a,8))};var tW=sfb(xBe,'OrthogonalSelfLoopRouter/lambda$0$Type',1858);feb(1857,1856,{},jqc);_.ng=function kqc(a,b,c){var d,e;d=a.c.d;hu(c,0,$id(ajd(d.n),d.a));e=a.d.d;Mub(c,$id(ajd(e.n),e.a));return hqc(c)};var vW=sfb(xBe,'PolylineSelfLoopRouter',1857);feb(1812,1,{},yqc);_.a=null;var lqc;var zW=sfb(xBe,'RoutingDirector',1812);feb(1813,1,fye,Aqc);_.Ne=function Bqc(a,b){return zqc(RD(a,113),RD(b,113))};_.Fb=function Cqc(a){return this===a};_.Oe=function Dqc(){return new Frb(this)};var wW=sfb(xBe,'RoutingDirector/lambda$0$Type',1813);feb(1814,1,{},Eqc);_.Kb=function Fqc(a){return mqc(),RD(a,105).j};var xW=sfb(xBe,'RoutingDirector/lambda$1$Type',1814);feb(1815,1,Qve,Gqc);_.Cd=function Hqc(a){mqc();RD(a,15).jd(lqc)};var yW=sfb(xBe,'RoutingDirector/lambda$2$Type',1815);feb(1818,1,{},Sqc);var CW=sfb(xBe,'RoutingSlotAssigner',1818);feb(1819,1,nwe,Vqc);_.Mb=function Wqc(a){return Tqc(this.a,RD(a,105))};var AW=sfb(xBe,'RoutingSlotAssigner/lambda$0$Type',1819);feb(1820,1,fye,Xqc);_.Ne=function Yqc(a,b){return Uqc(this.a,RD(a,105),RD(b,105))};_.Fb=function Zqc(a){return this===a};_.Oe=function $qc(){return new Frb(this)};var BW=sfb(xBe,'RoutingSlotAssigner/lambda$1$Type',1820);feb(1859,1856,{},arc);_.ng=function brc(a,b,c){var d,e,f,g;d=Kfb(UD(k2b(a.b.g.b,(yCc(),VBc))));g=new Gjd(cD(WC(l3,1),Nve,8,0,[(f=a.c.d,$id(new sjd(f.n),f.a))]));_qc(a,b,c,g,d);Mub(g,(e=a.d.d,$id(new sjd(e.n),e.a)));return sUc(new wUc(g))};var DW=sfb(xBe,'SplineSelfLoopRouter',1859);feb(586,1,fye,frc,hrc);_.Ne=function irc(a,b){return crc(this,RD(a,10),RD(b,10))};_.Fb=function jrc(a){return this===a};_.Oe=function krc(){return new Frb(this)};var FW=sfb(yBe,'ModelOrderNodeComparator',586);feb(1821,1,nwe,lrc);_.Mb=function mrc(a){return RD(a,12).e.c.length!=0};var EW=sfb(yBe,'ModelOrderNodeComparator/lambda$0$Type',1821);feb(821,1,fye,trc,urc);_.Ne=function vrc(a,b){return prc(this,a,b)};_.Fb=function wrc(a){return this===a};_.Oe=function xrc(){return new Frb(this)};_.b=false;var GW=sfb(yBe,'ModelOrderPortComparator',821);feb(815,1,{},zrc);_.og=function Brc(a,b){var c,d,e,f;e=Arc(b);c=new bnb;f=b.f/e;for(d=1;d<e;++d){Rmb(c,sgb(Ydb(Hdb($wnd.Math.round(d*f)))))}return c};_.pg=function Crc(){return false};var HW=sfb(zBe,'ARDCutIndexHeuristic',815);feb(1544,1,QAe,Hrc);_.Kf=function Irc(a,b){Grc(RD(a,36),b)};var KW=sfb(zBe,'BreakingPointInserter',1544);feb(313,1,{313:1},Jrc);_.Ib=function Mrc(){var a;a=new bib;a.a+='BPInfo[';a.a+='\n\tstart=';Yhb(a,this.i);a.a+='\n\tend=';Yhb(a,this.a);a.a+='\n\tnodeStartEdge=';Yhb(a,this.e);a.a+='\n\tstartEndEdge=';Yhb(a,this.j);a.a+='\n\toriginalEdge=';Yhb(a,this.f);a.a+='\n\tstartInLayerDummy=';Yhb(a,this.k);a.a+='\n\tstartInLayerEdge=';Yhb(a,this.n);a.a+='\n\tendInLayerDummy=';Yhb(a,this.b);a.a+='\n\tendInLayerEdge=';Yhb(a,this.c);return a.a};var IW=sfb(zBe,'BreakingPointInserter/BPInfo',313);feb(661,1,{661:1},Trc);_.a=false;_.b=0;_.c=0;var JW=sfb(zBe,'BreakingPointInserter/Cut',661);feb(1545,1,QAe,bsc);_.Kf=function csc(a,b){_rc(RD(a,36),b)};var NW=sfb(zBe,'BreakingPointProcessor',1545);feb(1546,1,nwe,dsc);_.Mb=function esc(a){return Krc(RD(a,10))};var LW=sfb(zBe,'BreakingPointProcessor/0methodref$isEnd$Type',1546);feb(1547,1,nwe,fsc);_.Mb=function gsc(a){return Lrc(RD(a,10))};var MW=sfb(zBe,'BreakingPointProcessor/1methodref$isStart$Type',1547);feb(1548,1,QAe,ksc);_.Kf=function lsc(a,b){isc(this,RD(a,36),b)};var PW=sfb(zBe,'BreakingPointRemover',1548);feb(1549,1,Qve,msc);_.Cd=function nsc(a){RD(a,131).k=true};var OW=sfb(zBe,'BreakingPointRemover/lambda$0$Type',1549);feb(811,1,{},ysc);_.b=0;_.e=0;_.f=0;_.j=0;var VW=sfb(zBe,'GraphStats',811);feb(812,1,{},Asc);_.Ve=function Bsc(a,b){return $wnd.Math.max(Kfb(UD(a)),Kfb(UD(b)))};var QW=sfb(zBe,'GraphStats/0methodref$max$Type',812);feb(813,1,{},Csc);_.Ve=function Dsc(a,b){return $wnd.Math.max(Kfb(UD(a)),Kfb(UD(b)))};var RW=sfb(zBe,'GraphStats/2methodref$max$Type',813);feb(1726,1,{},Esc);_.Ve=function Fsc(a,b){return zsc(UD(a),UD(b))};var SW=sfb(zBe,'GraphStats/lambda$1$Type',1726);feb(1727,1,{},Gsc);_.Kb=function Hsc(a){return ssc(this.a,RD(a,30))};var TW=sfb(zBe,'GraphStats/lambda$2$Type',1727);feb(1728,1,{},Isc);_.Kb=function Jsc(a){return rsc(this.a,RD(a,30))};var UW=sfb(zBe,'GraphStats/lambda$6$Type',1728);feb(814,1,{},Ksc);_.og=function Lsc(a,b){var c;c=RD(mQb(a,(yCc(),pCc)),15);return c?c:(yob(),yob(),vob)};_.pg=function Msc(){return false};var WW=sfb(zBe,'ICutIndexCalculator/ManualCutIndexCalculator',814);feb(816,1,{},Nsc);_.og=function Osc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=(b.n==null&&vsc(b),b.n);i=(b.d==null&&vsc(b),b.d);t=$C(iE,vxe,28,u.length,15,1);t[0]=u[0];r=u[0];for(j=1;j<u.length;j++){t[j]=t[j-1]+u[j];r+=u[j]}e=Arc(b)-1;g=RD(mQb(a,(yCc(),qCc)),17).a;d=pxe;c=new bnb;for(m=$wnd.Math.max(0,e-g);m<=$wnd.Math.min(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new bnb;s=pxe;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=qsc(b,new Csc)),Kfb(b.g))}else{while(k<b.f){if(t[k-1]-q>=p){Rmb(f,sgb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.pg=function Psc(){return false};var XW=sfb(zBe,'MSDCutIndexHeuristic',816);feb(1683,1,QAe,Ssc);_.Kf=function Tsc(a,b){Rsc(RD(a,36),b)};var YW=sfb(zBe,'SingleEdgeGraphWrapper',1683);feb(232,22,{3:1,34:1,22:1,232:1},ctc);var Xsc,Ysc,Zsc,$sc,_sc,atc;var ZW=tfb(ABe,'CenterEdgeLabelPlacementStrategy',232,WI,etc,dtc);var ftc;feb(431,22,{3:1,34:1,22:1,431:1},ktc);var htc,itc;var $W=tfb(ABe,'ConstraintCalculationStrategy',431,WI,mtc,ltc);var ntc;feb(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},utc);_.dg=function wtc(){return ttc(this)};_.qg=function vtc(){return ttc(this)};var ptc,qtc,rtc;var _W=tfb(ABe,'CrossingMinimizationStrategy',322,WI,ytc,xtc);var ztc;feb(351,22,{3:1,34:1,22:1,351:1},Ftc);var Btc,Ctc,Dtc;var aX=tfb(ABe,'CuttingStrategy',351,WI,Htc,Gtc);var Itc;feb(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},Rtc);_.dg=function Ttc(){return Qtc(this)};_.qg=function Stc(){return Qtc(this)};var Ktc,Ltc,Mtc,Ntc,Otc;var bX=tfb(ABe,'CycleBreakingStrategy',348,WI,Vtc,Utc);var Wtc;feb(428,22,{3:1,34:1,22:1,428:1},_tc);var Ytc,Ztc;var cX=tfb(ABe,'DirectionCongruency',428,WI,buc,auc);var cuc;feb(459,22,{3:1,34:1,22:1,459:1},iuc);var euc,fuc,guc;var dX=tfb(ABe,'EdgeConstraint',459,WI,kuc,juc);var luc;feb(283,22,{3:1,34:1,22:1,283:1},vuc);var nuc,ouc,puc,quc,ruc,suc;var eX=tfb(ABe,'EdgeLabelSideSelection',283,WI,xuc,wuc);var yuc;feb(487,22,{3:1,34:1,22:1,487:1},Duc);var Auc,Buc;var fX=tfb(ABe,'EdgeStraighteningStrategy',487,WI,Fuc,Euc);var Guc;feb(281,22,{3:1,34:1,22:1,281:1},Puc);var Iuc,Juc,Kuc,Luc,Muc,Nuc;var gX=tfb(ABe,'FixedAlignment',281,WI,Ruc,Quc);var Suc;feb(282,22,{3:1,34:1,22:1,282:1},_uc);var Uuc,Vuc,Wuc,Xuc,Yuc,Zuc;var hX=tfb(ABe,'GraphCompactionStrategy',282,WI,bvc,avc);var cvc;feb(259,22,{3:1,34:1,22:1,259:1},pvc);var evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc;var iX=tfb(ABe,'GraphProperties',259,WI,rvc,qvc);var svc;feb(298,22,{3:1,34:1,22:1,298:1},yvc);var uvc,vvc,wvc;var jX=tfb(ABe,'GreedySwitchType',298,WI,Avc,zvc);var Bvc;feb(311,22,{3:1,34:1,22:1,311:1},Hvc);var Dvc,Evc,Fvc;var kX=tfb(ABe,'InLayerConstraint',311,WI,Jvc,Ivc);var Kvc;feb(429,22,{3:1,34:1,22:1,429:1},Pvc);var Mvc,Nvc;var lX=tfb(ABe,'InteractiveReferencePoint',429,WI,Rvc,Qvc);var Svc;var Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc,jwc,kwc,lwc,mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc;feb(171,22,{3:1,34:1,22:1,171:1},dxc);var Zwc,$wc,_wc,axc,bxc;var mX=tfb(ABe,'LayerConstraint',171,WI,fxc,exc);var gxc;feb(859,1,Eye,Pzc);_.hf=function Qzc(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,HBe),''),'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.'),Uxc),(kid(),eid)),cX),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,IBe),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JBe),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),pyc),eid),lX),xsb(Whd))));zgd(a,JBe,RBe,ryc);zgd(a,JBe,_Be,qyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KBe),''),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LBe),''),'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.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Nhd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MBe),''),'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."),false),cid),QI),xsb(Xhd)),cD(WC(qJ,1),Nve,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NBe),''),'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."),azc),eid),xX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OBe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),sgb(7)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PBe),''),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QBe),''),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RBe),'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).'),Sxc),eid),bX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SBe),bDe),'Node Layering Strategy'),'Strategy for node layering.'),Gyc),eid),rX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TBe),bDe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),wyc),eid),mX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UBe),bDe),'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),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VBe),bDe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WBe),cDe),'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."),sgb(4)),gid),bJ),xsb(Whd))));zgd(a,WBe,SBe,zyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XBe),cDe),'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."),sgb(2)),gid),bJ),xsb(Whd))));zgd(a,XBe,SBe,Byc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YBe),dDe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),Eyc),eid),vX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZBe),dDe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),sgb(0)),gid),bJ),xsb(Whd))));zgd(a,ZBe,YBe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Be),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),sgb(lve)),gid),bJ),xsb(Whd))));zgd(a,$Be,SBe,tyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Be),eDe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),Qxc),eid),_W),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aCe),eDe),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bCe),eDe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),did),VI),xsb(Whd))));zgd(a,bCe,fDe,Ixc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,cCe),eDe),'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."),false),cid),QI),xsb(Whd))));zgd(a,cCe,_Be,Oxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dCe),eDe),'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),iid),qJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eCe),eDe),'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),iid),qJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fCe),eDe),'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),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gCe),eDe),'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.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hCe),gDe),'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."),sgb(40)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iCe),gDe),'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."),Fxc),eid),jX),xsb(Whd))));zgd(a,iCe,_Be,Gxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jCe),'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."),Bxc),eid),jX),xsb(Whd))));zgd(a,jCe,_Be,Cxc);zgd(a,jCe,fDe,Dxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kCe),hDe),'Node Placement Strategy'),'Strategy for node placement.'),$yc),eid),uX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,lCe),hDe),'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."),cid),QI),xsb(Whd))));zgd(a,lCe,kCe,Qyc);zgd(a,lCe,kCe,Ryc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mCe),iDe),'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."),Kyc),eid),fX),xsb(Whd))));zgd(a,mCe,kCe,Lyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nCe),iDe),'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.'),Nyc),eid),gX),xsb(Whd))));zgd(a,nCe,kCe,Oyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oCe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),did),VI),xsb(Whd))));zgd(a,oCe,kCe,Tyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,pCe),'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."),eid),tX),xsb(Vhd))));zgd(a,pCe,kCe,Yyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qCe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Wyc),eid),tX),xsb(Whd))));zgd(a,qCe,kCe,Xyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rCe),jDe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),ayc),eid),zX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,sCe),jDe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),cyc),eid),AX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,tCe),'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.'),eyc),eid),CX),xsb(Whd))));zgd(a,tCe,kDe,fyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,uCe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),did),VI),xsb(Whd))));zgd(a,uCe,kDe,hyc);zgd(a,uCe,tCe,iyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vCe),'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),did),VI),xsb(Whd))));zgd(a,vCe,kDe,$xc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,wCe),lDe),'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."),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xCe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yCe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zCe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ACe),mDe),'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.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,BCe),mDe),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CCe),mDe),'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.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,DCe),nDe),qze),'Tries to further compact components (disconnected sub-graphs).'),false),cid),QI),xsb(Whd))));zgd(a,DCe,cAe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ECe),oDe),'Post Compaction Strategy'),pDe),nxc),eid),hX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,FCe),oDe),'Post Compaction Constraint Calculation'),pDe),lxc),eid),$W),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,GCe),qDe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,HCe),qDe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),sgb(16)),gid),bJ),xsb(Whd))));zgd(a,HCe,GCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ICe),qDe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),sgb(5)),gid),bJ),xsb(Whd))));zgd(a,ICe,GCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JCe),rDe),'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'."),Gzc),eid),EX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KCe),rDe),'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),did),VI),xsb(Whd))));zgd(a,KCe,JCe,lzc);zgd(a,KCe,JCe,mzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LCe),rDe),'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),did),VI),xsb(Whd))));zgd(a,LCe,JCe,ozc);zgd(a,LCe,JCe,pzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MCe),sDe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),wzc),eid),aX),xsb(Whd))));zgd(a,MCe,JCe,xzc);zgd(a,MCe,JCe,yzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,NCe),sDe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),hid),QK),xsb(Whd))));zgd(a,NCe,MCe,rzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OCe),'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.'),tzc),gid),bJ),xsb(Whd))));zgd(a,OCe,MCe,uzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PCe),tDe),'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.'),Lzc),eid),DX),xsb(Whd))));zgd(a,PCe,JCe,Mzc);zgd(a,PCe,JCe,Nzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,QCe),tDe),'Valid Indices for Wrapping'),null),hid),QK),xsb(Whd))));zgd(a,QCe,JCe,Izc);zgd(a,QCe,JCe,Jzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RCe),uDe),'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.'),true),cid),QI),xsb(Whd))));zgd(a,RCe,JCe,Czc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SCe),uDe),'Distance Penalty When Improving Cuts'),null),2),did),VI),xsb(Whd))));zgd(a,SCe,JCe,Azc);zgd(a,SCe,RCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TCe),uDe),'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.'),true),cid),QI),xsb(Whd))));zgd(a,TCe,JCe,Ezc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UCe),vDe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),Yxc),eid),eX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VCe),vDe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),Wxc),eid),ZW),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WCe),wDe),'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.'),xxc),eid),wX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XCe),wDe),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YCe),wDe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZCe),wDe),'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.'),pxc),eid),CQ),xsb(Whd))));zgd(a,ZCe,cAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Ce),wDe),'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.'),txc),eid),sX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Ce),wDe),'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),did),VI),xsb(Whd))));zgd(a,_Ce,WCe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aDe),wDe),'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),did),VI),xsb(Whd))));zgd(a,aDe,WCe,null);zCc((new ACc,a))};var ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc,Nyc,Oyc,Pyc,Qyc,Ryc,Syc,Tyc,Uyc,Vyc,Wyc,Xyc,Yyc,Zyc,$yc,_yc,azc,bzc,czc,dzc,ezc,fzc,gzc,hzc,izc,jzc,kzc,lzc,mzc,nzc,ozc,pzc,qzc,rzc,szc,tzc,uzc,vzc,wzc,xzc,yzc,zzc,Azc,Bzc,Czc,Dzc,Ezc,Fzc,Gzc,Hzc,Izc,Jzc,Kzc,Lzc,Mzc,Nzc;var nX=sfb(ABe,'LayeredMetaDataProvider',859);feb(998,1,Eye,ACc);_.hf=function BCc(a){zCc(a)};var Rzc,Szc,Tzc,Uzc,Vzc,Wzc,Xzc,Yzc,Zzc,$zc,_zc,aAc,bAc,cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc,kAc,lAc,mAc,nAc,oAc,pAc,qAc,rAc,sAc,tAc,uAc,vAc,wAc,xAc,yAc,zAc,AAc,BAc,CAc,DAc,EAc,FAc,GAc,HAc,IAc,JAc,KAc,LAc,MAc,NAc,OAc,PAc,QAc,RAc,SAc,TAc,UAc,VAc,WAc,XAc,YAc,ZAc,$Ac,_Ac,aBc,bBc,cBc,dBc,eBc,fBc,gBc,hBc,iBc,jBc,kBc,lBc,mBc,nBc,oBc,pBc,qBc,rBc,sBc,tBc,uBc,vBc,wBc,xBc,yBc,zBc,ABc,BBc,CBc,DBc,EBc,FBc,GBc,HBc,IBc,JBc,KBc,LBc,MBc,NBc,OBc,PBc,QBc,RBc,SBc,TBc,UBc,VBc,WBc,XBc,YBc,ZBc,$Bc,_Bc,aCc,bCc,cCc,dCc,eCc,fCc,gCc,hCc,iCc,jCc,kCc,lCc,mCc,nCc,oCc,pCc,qCc,rCc,sCc,tCc,uCc,vCc,wCc,xCc;var pX=sfb(ABe,'LayeredOptions',998);feb(999,1,{},CCc);_.sf=function DCc(){var a;return a=new lXb,a};_.tf=function ECc(a){};var oX=sfb(ABe,'LayeredOptions/LayeredFactory',999);feb(1391,1,{});_.a=0;var FCc;var b4=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder',1391);feb(792,1391,{},RCc);var OCc,PCc;var qX=sfb(ABe,'LayeredSpacings/LayeredSpacingsBuilder',792);feb(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},bDc);_.dg=function dDc(){return aDc(this)};_.qg=function cDc(){return aDc(this)};var SCc,TCc,UCc,VCc,WCc,XCc,YCc,ZCc,$Cc;var rX=tfb(ABe,'LayeringStrategy',265,WI,fDc,eDc);var gDc;feb(390,22,{3:1,34:1,22:1,390:1},nDc);var iDc,jDc,kDc;var sX=tfb(ABe,'LongEdgeOrderingStrategy',390,WI,pDc,oDc);var qDc;feb(203,22,{3:1,34:1,22:1,203:1},yDc);var sDc,tDc,uDc,vDc;var tX=tfb(ABe,'NodeFlexibility',203,WI,BDc,ADc);var CDc;feb(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},LDc);_.dg=function NDc(){return KDc(this)};_.qg=function MDc(){return KDc(this)};var EDc,FDc,GDc,HDc,IDc;var uX=tfb(ABe,'NodePlacementStrategy',323,WI,PDc,ODc);var QDc;feb(243,22,{3:1,34:1,22:1,243:1},bEc);var SDc,TDc,UDc,VDc,WDc,XDc,YDc,ZDc,$Dc,_Dc;var vX=tfb(ABe,'NodePromotionStrategy',243,WI,dEc,cEc);var eEc;feb(284,22,{3:1,34:1,22:1,284:1},lEc);var gEc,hEc,iEc,jEc;var wX=tfb(ABe,'OrderingStrategy',284,WI,nEc,mEc);var oEc;feb(430,22,{3:1,34:1,22:1,430:1},tEc);var qEc,rEc;var xX=tfb(ABe,'PortSortingStrategy',430,WI,vEc,uEc);var wEc;feb(462,22,{3:1,34:1,22:1,462:1},CEc);var yEc,zEc,AEc;var yX=tfb(ABe,'PortType',462,WI,EEc,DEc);var FEc;feb(387,22,{3:1,34:1,22:1,387:1},LEc);var HEc,IEc,JEc;var zX=tfb(ABe,'SelfLoopDistributionStrategy',387,WI,NEc,MEc);var OEc;feb(349,22,{3:1,34:1,22:1,349:1},UEc);var QEc,REc,SEc;var AX=tfb(ABe,'SelfLoopOrderingStrategy',349,WI,WEc,VEc);var XEc;feb(312,1,{312:1},gFc);var BX=sfb(ABe,'Spacings',312);feb(350,22,{3:1,34:1,22:1,350:1},mFc);var iFc,jFc,kFc;var CX=tfb(ABe,'SplineRoutingMode',350,WI,oFc,nFc);var pFc;feb(352,22,{3:1,34:1,22:1,352:1},vFc);var rFc,sFc,tFc;var DX=tfb(ABe,'ValidifyStrategy',352,WI,xFc,wFc);var yFc;feb(388,22,{3:1,34:1,22:1,388:1},EFc);var AFc,BFc,CFc;var EX=tfb(ABe,'WrappingStrategy',388,WI,GFc,FFc);var HFc;feb(1398,1,nEe,NFc);_.rg=function OFc(a){return RD(a,36),JFc};_.Kf=function PFc(a,b){MFc(this,RD(a,36),b)};var JFc;var FX=sfb(oEe,'DepthFirstCycleBreaker',1398);feb(793,1,nEe,UFc);_.rg=function WFc(a){return RD(a,36),QFc};_.Kf=function XFc(a,b){SFc(this,RD(a,36),b)};_.sg=function VFc(a){return RD(Vmb(a,Jwb(this.d,a.c.length)),10)};var QFc;var GX=sfb(oEe,'GreedyCycleBreaker',793);feb(1401,793,nEe,YFc);_.sg=function ZFc(a){var b,c,d,e;e=null;b=lve;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(nQb(c,(Ywc(),zwc))&&RD(mQb(c,zwc),17).a<b){b=RD(mQb(c,zwc),17).a;e=c}}if(!e){return RD(Vmb(a,Jwb(this.d,a.c.length)),10)}return e};var HX=sfb(oEe,'GreedyModelOrderCycleBreaker',1401);feb(1399,1,nEe,cGc);_.rg=function dGc(a){return RD(a,36),$Fc};_.Kf=function eGc(a,b){bGc(this,RD(a,36),b)};var $Fc;var IX=sfb(oEe,'InteractiveCycleBreaker',1399);feb(1400,1,nEe,jGc);_.rg=function kGc(a){return RD(a,36),fGc};_.Kf=function lGc(a,b){iGc(this,RD(a,36),b)};_.a=0;_.b=0;var fGc;var JX=sfb(oEe,'ModelOrderCycleBreaker',1400);feb(1413,1,nEe,pGc);_.rg=function qGc(a){return RD(a,36),mGc};_.Kf=function sGc(a,b){oGc(this,RD(a,36),b)};var mGc;var LX=sfb(pEe,'BreadthFirstModelOrderLayerer',1413);feb(1414,1,fye,tGc);_.Ne=function uGc(a,b){return rGc(RD(a,10),RD(b,10))};_.Fb=function vGc(a){return this===a};_.Oe=function wGc(){return new Frb(this)};var KX=sfb(pEe,'BreadthFirstModelOrderLayerer/lambda$0$Type',1414);feb(1404,1,nEe,GGc);_.rg=function HGc(a){return RD(a,36),xGc};_.Kf=function IGc(a,b){EGc(this,RD(a,36),b)};var xGc;var OX=sfb(pEe,'CoffmanGrahamLayerer',1404);feb(1405,1,fye,JGc);_.Ne=function KGc(a,b){return AGc(this.a,RD(a,10),RD(b,10))};_.Fb=function LGc(a){return this===a};_.Oe=function MGc(){return new Frb(this)};var MX=sfb(pEe,'CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type',1405);feb(1406,1,fye,NGc);_.Ne=function OGc(a,b){return DGc(this.a,RD(a,10),RD(b,10))};_.Fb=function PGc(a){return this===a};_.Oe=function QGc(){return new Frb(this)};var NX=sfb(pEe,'CoffmanGrahamLayerer/lambda$1$Type',1406);feb(1415,1,nEe,YGc);_.rg=function ZGc(a){return RD(a,36),RGc};_.Kf=function _Gc(a,b){XGc(this,RD(a,36),b)};_.c=0;_.e=0;var RGc;var QX=sfb(pEe,'DepthFirstModelOrderLayerer',1415);feb(1416,1,fye,aHc);_.Ne=function bHc(a,b){return $Gc(RD(a,10),RD(b,10))};_.Fb=function cHc(a){return this===a};_.Oe=function dHc(){return new Frb(this)};var PX=sfb(pEe,'DepthFirstModelOrderLayerer/lambda$0$Type',1416);feb(1407,1,nEe,gHc);_.rg=function hHc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),Ebc)),oXb,Nbc),pXb,Mbc)};_.Kf=function iHc(a,b){fHc(RD(a,36),b)};var SX=sfb(pEe,'InteractiveLayerer',1407);feb(578,1,{578:1},jHc);_.a=0;_.c=0;var RX=sfb(pEe,'InteractiveLayerer/LayerSpan',578);feb(1403,1,nEe,pHc);_.rg=function qHc(a){return RD(a,36),kHc};_.Kf=function rHc(a,b){mHc(this,RD(a,36),b)};var kHc;var TX=sfb(pEe,'LongestPathLayerer',1403);feb(1412,1,nEe,xHc);_.rg=function yHc(a){return RD(a,36),sHc};_.Kf=function zHc(a,b){uHc(this,RD(a,36),b)};var sHc;var UX=sfb(pEe,'LongestPathSourceLayerer',1412);feb(1410,1,nEe,IHc);_.rg=function JHc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)};_.Kf=function KHc(a,b){GHc(this,RD(a,36),b)};_.a=0;_.b=0;_.d=0;var AHc,BHc;var WX=sfb(pEe,'MinWidthLayerer',1410);feb(1411,1,fye,MHc);_.Ne=function NHc(a,b){return LHc(this,RD(a,10),RD(b,10))};_.Fb=function OHc(a){return this===a};_.Oe=function PHc(){return new Frb(this)};var VX=sfb(pEe,'MinWidthLayerer/MinOutgoingEdgesComparator',1411);feb(1402,1,nEe,XHc);_.rg=function YHc(a){return RD(a,36),QHc};_.Kf=function ZHc(a,b){WHc(this,RD(a,36),b)};var QHc;var XX=sfb(pEe,'NetworkSimplexLayerer',1402);feb(1408,1,nEe,jIc);_.rg=function kIc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)};_.Kf=function lIc(a,b){gIc(this,RD(a,36),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var ZX=sfb(pEe,'StretchWidthLayerer',1408);feb(1409,1,fye,nIc);_.Ne=function oIc(a,b){return mIc(RD(a,10),RD(b,10))};_.Fb=function pIc(a){return this===a};_.Oe=function qIc(){return new Frb(this)};var YX=sfb(pEe,'StretchWidthLayerer/1',1409);feb(413,1,qEe);_.gg=function FIc(a,b,c,d,e,f){};_.ug=function DIc(a,b,c){return wIc(this,a,b,c)};_.fg=function EIc(){this.g=$C(jE,rEe,28,this.d,15,1);this.f=$C(jE,rEe,28,this.d,15,1)};_.hg=function GIc(a,b){this.e[a]=$C(kE,Pwe,28,b[a].length,15,1)};_.ig=function HIc(a,b,c){var d;d=c[a][b];d.p=b;this.e[a][b]=b};_.jg=function IIc(a,b,c,d){RD(Vmb(d[a][b].j,c),12).p=this.d++};_.b=0;_.c=0;_.d=0;var _X=sfb(sEe,'AbstractBarycenterPortDistributor',413);feb(1698,1,fye,JIc);_.Ne=function KIc(a,b){return zIc(this.a,RD(a,12),RD(b,12))};_.Fb=function LIc(a){return this===a};_.Oe=function MIc(){return new Frb(this)};var $X=sfb(sEe,'AbstractBarycenterPortDistributor/lambda$0$Type',1698);feb(832,1,uBe,UIc);_.gg=function XIc(a,b,c,d,e,f){};_.ig=function ZIc(a,b,c){};_.jg=function $Ic(a,b,c,d){};_.eg=function VIc(){return false};_.fg=function WIc(){this.c=this.e.a;this.g=this.f.g};_.hg=function YIc(a,b){b[a][0].c.p=a};_.kg=function _Ic(){return false};_.vg=function aJc(a,b,c,d){if(c){RIc(this,a)}else{OIc(this,a,d);PIc(this,a,b)}if(a.c.length>1){Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),(yCc(),eAc))))?wLc(a,this.d,RD(this,669)):(yob(),_mb(a,this.d));nJc(this.e,a)}};_.lg=function bJc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=SIc(c,a.length)){f=a[b-(c?1:-1)];sIc(this.f,f,c?(BEc(),zEc):(BEc(),yEc))}e=a[b][0];k=!d||e.k==(r3b(),m3b);j=dv(a[b]);this.vg(j,k,false,c);g=0;for(i=new Anb(j);i.a<i.c.c.length;){h=RD(ynb(i),10);a[b][g++]=h}return false};_.mg=function cJc(a,b){var c,d,e,f,g;g=SIc(b,a.length);f=dv(a[g]);this.vg(f,false,true,b);c=0;for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),10);a[g][c++]=d}return false};var cY=sfb(sEe,'BarycenterHeuristic',832);feb(667,1,{667:1},dJc);_.Ib=function eJc(){return 'BarycenterState [node='+this.c+', summedWeight='+this.d+', degree='+this.b+', barycenter='+this.a+', visited='+this.e+']'};_.b=0;_.d=0;_.e=false;var aY=sfb(sEe,'BarycenterHeuristic/BarycenterState',667);feb(1865,1,fye,fJc);_.Ne=function gJc(a,b){return QIc(this.a,RD(a,10),RD(b,10))};_.Fb=function hJc(a){return this===a};_.Oe=function iJc(){return new Frb(this)};var bY=sfb(sEe,'BarycenterHeuristic/lambda$0$Type',1865);feb(831,1,uBe,qJc);_.fg=function rJc(){};_.gg=function sJc(a,b,c,d,e,f){};_.jg=function vJc(a,b,c,d){};_.hg=function tJc(a,b){this.a[a]=$C(aY,{3:1,4:1,5:1,2117:1},667,b[a].length,0,1);this.b[a]=$C(dY,{3:1,4:1,5:1,2118:1},239,b[a].length,0,1)};_.ig=function uJc(a,b,c){mJc(this,c[a][b],true)};_.c=false;var fY=sfb(sEe,'ForsterConstraintResolver',831);feb(239,1,{239:1},yJc,zJc);_.Ib=function AJc(){var a,b;b=new bib;b.a+='[';for(a=0;a<this.d.length;a++){Zhb(b,i3b(this.d[a]));pJc(this.g,this.d[0]).a!=null&&Zhb(Zhb((b.a+='<',b),Pfb(pJc(this.g,this.d[0]).a)),'>');a<this.d.length-1&&(b.a+=pve,b)}return (b.a+=']',b).a};_.a=0;_.c=0;_.f=0;var dY=sfb(sEe,'ForsterConstraintResolver/ConstraintGroup',239);feb(1860,1,Qve,BJc);_.Cd=function CJc(a){mJc(this.a,RD(a,10),false)};var eY=sfb(sEe,'ForsterConstraintResolver/lambda$0$Type',1860);feb(219,1,{219:1,230:1},FJc);_.gg=function HJc(a,b,c,d,e,f){};_.hg=function IJc(a,b){};_.fg=function GJc(){this.r=$C(kE,Pwe,28,this.n,15,1)};_.ig=function JJc(a,b,c){var d,e;e=c[a][b];d=e.e;!!d&&Rmb(this.b,d)};_.jg=function KJc(a,b,c,d){++this.n};_.Ib=function LJc(){return Inb(this.e,new _sb)};_.g=false;_.i=false;_.n=0;_.s=false;var gY=sfb(sEe,'GraphInfoHolder',219);feb(1905,1,uBe,PJc);_.gg=function SJc(a,b,c,d,e,f){};_.hg=function TJc(a,b){};_.jg=function VJc(a,b,c,d){};_.ug=function QJc(a,b,c){c&&b>0?(pMc(this.a,a[b-1],a[b]),undefined):!c&&b<a.length-1?(pMc(this.a,a[b],a[b+1]),undefined):rMc(this.a,a[b],c?(qpd(),ppd):(qpd(),Xod));return MJc(this,a,b,c)};_.fg=function RJc(){this.d=$C(kE,Pwe,28,this.c,15,1);this.a=new DMc(this.d)};_.ig=function UJc(a,b,c){var d;d=c[a][b];this.c+=d.j.c.length};_.c=0;var hY=sfb(sEe,'GreedyPortDistributor',1905);feb(1421,1,nEe,aKc);_.rg=function bKc(a){return ZJc(RD(a,36))};_.Kf=function cKc(a,b){_Jc(RD(a,36),b)};var XJc;var jY=sfb(sEe,'InteractiveCrossingMinimizer',1421);feb(1422,1,fye,eKc);_.Ne=function fKc(a,b){return dKc(this,RD(a,10),RD(b,10))};_.Fb=function gKc(a){return this===a};_.Oe=function hKc(){return new Frb(this)};var iY=sfb(sEe,'InteractiveCrossingMinimizer/1',1422);feb(514,1,{514:1,106:1,47:1},FKc);_.rg=function GKc(a){var b;return RD(a,36),b=vfd(iKc),pfd(b,(sXb(),pXb),(hcc(),Ybc)),b};_.Kf=function HKc(a,b){wKc(this,RD(a,36),b)};_.e=0;var iKc;var pY=sfb(sEe,'LayerSweepCrossingMinimizer',514);feb(1418,1,Qve,IKc);_.Cd=function JKc(a){kKc(this.a,RD(a,219))};var kY=sfb(sEe,'LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type',1418);feb(1419,1,Qve,KKc);_.Cd=function LKc(a){tKc(this.a,RD(a,219))};var lY=sfb(sEe,'LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type',1419);feb(1420,1,Qve,MKc);_.Cd=function NKc(a){vKc(this.a,RD(a,219))};var mY=sfb(sEe,'LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type',1420);feb(463,22,{3:1,34:1,22:1,463:1},SKc);var OKc,PKc,QKc;var nY=tfb(sEe,'LayerSweepCrossingMinimizer/CrossMinType',463,WI,UKc,TKc);var VKc;feb(1417,1,nwe,XKc);_.Mb=function YKc(a){return jKc(),RD(a,30).a.c.length==0};var oY=sfb(sEe,'LayerSweepCrossingMinimizer/lambda$0$Type',1417);feb(1862,1,uBe,_Kc);_.fg=function aLc(){};_.gg=function bLc(a,b,c,d,e,f){};_.jg=function eLc(a,b,c,d){};_.hg=function cLc(a,b){b[a][0].c.p=a;this.b[a]=$C(qY,{3:1,4:1,5:1,2043:1},668,b[a].length,0,1)};_.ig=function dLc(a,b,c){var d;d=c[a][b];d.p=b;bD(this.b[a],b,new fLc)};var tY=sfb(sEe,'LayerSweepTypeDecider',1862);feb(668,1,{668:1},fLc);_.Ib=function gLc(){return 'NodeInfo [connectedEdges='+this.a+', hierarchicalInfluence='+this.b+', randomInfluence='+this.c+']'};_.a=0;_.b=0;_.c=0;var qY=sfb(sEe,'LayerSweepTypeDecider/NodeInfo',668);feb(1863,1,xye,hLc);_.Lb=function iLc(a){return k4b(new l4b(RD(a,12).b))};_.Fb=function jLc(a){return this===a};_.Mb=function kLc(a){return k4b(new l4b(RD(a,12).b))};var rY=sfb(sEe,'LayerSweepTypeDecider/lambda$0$Type',1863);feb(1864,1,xye,lLc);_.Lb=function mLc(a){return k4b(new l4b(RD(a,12).b))};_.Fb=function nLc(a){return this===a};_.Mb=function oLc(a){return k4b(new l4b(RD(a,12).b))};var sY=sfb(sEe,'LayerSweepTypeDecider/lambda$1$Type',1864);feb(1906,413,qEe,pLc);_.tg=function qLc(a,b,c){var d,e,f,g,h,i,j,k,l;j=this.g;switch(c.g){case 1:{d=0;e=0;for(i=new Anb(a.j);i.a<i.c.c.length;){g=RD(ynb(i),12);if(g.e.c.length!=0){++d;g.j==(qpd(),Yod)&&++e}}f=b+e;l=b+d;for(h=c3b(a,(BEc(),yEc)).Kc();h.Ob();){g=RD(h.Pb(),12);if(g.j==(qpd(),Yod)){j[g.p]=f;--f}else{j[g.p]=l;--l}}return d}case 2:{k=0;for(h=c3b(a,(BEc(),zEc)).Kc();h.Ob();){g=RD(h.Pb(),12);++k;j[g.p]=b+k}return k}default:throw Adb(new _fb);}};var uY=sfb(sEe,'LayerTotalPortDistributor',1906);feb(669,832,{669:1,230:1},vLc);_.vg=function xLc(a,b,c,d){if(c){RIc(this,a)}else{OIc(this,a,d);PIc(this,a,b)}if(a.c.length>1){Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),(yCc(),eAc))))?wLc(a,this.d,this):(yob(),_mb(a,this.d));Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),eAc)))||nJc(this.e,a)}};var wY=sfb(sEe,'ModelOrderBarycenterHeuristic',669);feb(1866,1,fye,yLc);_.Ne=function zLc(a,b){return tLc(this.a,RD(a,10),RD(b,10))};_.Fb=function ALc(a){return this===a};_.Oe=function BLc(){return new Frb(this)};var vY=sfb(sEe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1866);feb(1423,1,nEe,FLc);_.rg=function GLc(a){var b;return RD(a,36),b=vfd(CLc),pfd(b,(sXb(),pXb),(hcc(),Ybc)),b};_.Kf=function HLc(a,b){ELc((RD(a,36),b))};var CLc;var xY=sfb(sEe,'NoCrossingMinimizer',1423);feb(809,413,qEe,ILc);_.tg=function JLc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new Anb(a.j);k.a<k.c.c.length;){i=RD(ynb(k),12);if(i.e.c.length!=0){++e;i.j==(qpd(),Yod)&&++f}}d=1/(e+1);g=b+f*d;n=b+1-d;for(j=c3b(a,(BEc(),yEc)).Kc();j.Ob();){i=RD(j.Pb(),12);if(i.j==(qpd(),Yod)){l[i.p]=g;g-=d}else{l[i.p]=n;n-=d}}break}case 2:{h=0;for(k=new Anb(a.j);k.a<k.c.c.length;){i=RD(ynb(k),12);i.g.c.length==0||++h}d=1/(h+1);m=b+d;for(j=c3b(a,(BEc(),zEc)).Kc();j.Ob();){i=RD(j.Pb(),12);l[i.p]=m;m+=d}break}default:throw Adb(new agb('Port type is undefined'));}return 1};var yY=sfb(sEe,'NodeRelativePortDistributor',809);feb(822,1,{},NLc,OLc);var zY=sfb(sEe,'SweepCopy',822);feb(1861,1,uBe,RLc);_.hg=function ULc(a,b){};_.fg=function SLc(){var a;a=$C(kE,Pwe,28,this.f,15,1);this.d=new jNc(a);this.a=new DMc(a)};_.gg=function TLc(a,b,c,d,e,f){var g;g=RD(Vmb(f[a][b].j,c),12);e.c==g&&e.c.i.c==e.d.i.c&&++this.e[a]};_.ig=function VLc(a,b,c){var d;d=c[a][b];this.c[a]=this.c[a]|d.k==(r3b(),q3b)};_.jg=function WLc(a,b,c,d){var e;e=RD(Vmb(d[a][b].j,c),12);e.p=this.f++;e.g.c.length+e.e.c.length>1&&(e.j==(qpd(),Xod)?(this.b[a]=true):e.j==ppd&&a>0&&(this.b[a-1]=true))};_.f=0;var AY=sfb(tBe,'AllCrossingsCounter',1861);feb(595,1,{},_Lc);_.b=0;_.d=0;var BY=sfb(tBe,'BinaryIndexedTree',595);feb(532,1,{},DMc);var bMc,cMc;var LY=sfb(tBe,'CrossingsCounter',532);feb(1950,1,fye,HMc);_.Ne=function IMc(a,b){return wMc(this.a,RD(a,12),RD(b,12))};_.Fb=function JMc(a){return this===a};_.Oe=function KMc(){return new Frb(this)};var CY=sfb(tBe,'CrossingsCounter/lambda$0$Type',1950);feb(1951,1,fye,LMc);_.Ne=function MMc(a,b){return xMc(this.a,RD(a,12),RD(b,12))};_.Fb=function NMc(a){return this===a};_.Oe=function OMc(){return new Frb(this)};var DY=sfb(tBe,'CrossingsCounter/lambda$1$Type',1951);feb(1952,1,fye,PMc);_.Ne=function QMc(a,b){return yMc(this.a,RD(a,12),RD(b,12))};_.Fb=function RMc(a){return this===a};_.Oe=function SMc(){return new Frb(this)};var EY=sfb(tBe,'CrossingsCounter/lambda$2$Type',1952);feb(1953,1,fye,TMc);_.Ne=function UMc(a,b){return zMc(this.a,RD(a,12),RD(b,12))};_.Fb=function VMc(a){return this===a};_.Oe=function WMc(){return new Frb(this)};var FY=sfb(tBe,'CrossingsCounter/lambda$3$Type',1953);feb(1954,1,Qve,XMc);_.Cd=function YMc(a){EMc(this.a,RD(a,12))};var GY=sfb(tBe,'CrossingsCounter/lambda$4$Type',1954);feb(1955,1,nwe,ZMc);_.Mb=function $Mc(a){return FMc(this.a,RD(a,12))};var HY=sfb(tBe,'CrossingsCounter/lambda$5$Type',1955);feb(1956,1,Qve,aNc);_.Cd=function bNc(a){_Mc(this,a)};var IY=sfb(tBe,'CrossingsCounter/lambda$6$Type',1956);feb(1957,1,Qve,cNc);_.Cd=function dNc(a){var b;dMc();hmb(this.b,(b=this.a,RD(a,12),b))};var JY=sfb(tBe,'CrossingsCounter/lambda$7$Type',1957);feb(839,1,xye,eNc);_.Lb=function fNc(a){return dMc(),nQb(RD(a,12),(Ywc(),Iwc))};_.Fb=function gNc(a){return this===a};_.Mb=function hNc(a){return dMc(),nQb(RD(a,12),(Ywc(),Iwc))};var KY=sfb(tBe,'CrossingsCounter/lambda$8$Type',839);feb(1949,1,{},jNc);var PY=sfb(tBe,'HyperedgeCrossingsCounter',1949);feb(477,1,{34:1,477:1},lNc);_.Fd=function mNc(a){return kNc(this,RD(a,477))};_.b=0;_.c=0;_.e=0;_.f=0;var OY=sfb(tBe,'HyperedgeCrossingsCounter/Hyperedge',477);feb(374,1,{34:1,374:1},oNc);_.Fd=function pNc(a){return nNc(this,RD(a,374))};_.b=0;_.c=0;var NY=sfb(tBe,'HyperedgeCrossingsCounter/HyperedgeCorner',374);feb(531,22,{3:1,34:1,22:1,531:1},tNc);var qNc,rNc;var MY=tfb(tBe,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',531,WI,vNc,uNc);var wNc;feb(1425,1,nEe,DNc);_.rg=function ENc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?zNc:null};_.Kf=function FNc(a,b){CNc(this,RD(a,36),b)};var zNc;var RY=sfb(tEe,'InteractiveNodePlacer',1425);feb(1426,1,nEe,TNc);_.rg=function UNc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?GNc:null};_.Kf=function VNc(a,b){RNc(this,RD(a,36),b)};var GNc,HNc,INc;var TY=sfb(tEe,'LinearSegmentsNodePlacer',1426);feb(261,1,{34:1,261:1},ZNc);_.Fd=function $Nc(a){return WNc(this,RD(a,261))};_.Fb=function _Nc(a){var b;if(ZD(a,261)){b=RD(a,261);return this.b==b.b}return false};_.Hb=function aOc(){return this.b};_.Ib=function bOc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var SY=sfb(tEe,'LinearSegmentsNodePlacer/LinearSegment',261);feb(1428,1,nEe,yOc);_.rg=function zOc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?cOc:null};_.Kf=function HOc(a,b){uOc(this,RD(a,36),b)};_.b=0;_.g=0;var cOc;var DZ=sfb(tEe,'NetworkSimplexPlacer',1428);feb(1447,1,fye,IOc);_.Ne=function JOc(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function KOc(a){return this===a};_.Oe=function LOc(){return new Frb(this)};var UY=sfb(tEe,'NetworkSimplexPlacer/0methodref$compare$Type',1447);feb(1449,1,fye,MOc);_.Ne=function NOc(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function OOc(a){return this===a};_.Oe=function POc(){return new Frb(this)};var VY=sfb(tEe,'NetworkSimplexPlacer/1methodref$compare$Type',1449);feb(655,1,{655:1},QOc);var WY=sfb(tEe,'NetworkSimplexPlacer/EdgeRep',655);feb(412,1,{412:1},ROc);_.b=false;var XY=sfb(tEe,'NetworkSimplexPlacer/NodeRep',412);feb(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},VOc);var aZ=sfb(tEe,'NetworkSimplexPlacer/Path',515);feb(1429,1,{},WOc);_.Kb=function XOc(a){return RD(a,18).d.i.k};var YY=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$0$Type',1429);feb(1430,1,nwe,YOc);_.Mb=function ZOc(a){return RD(a,273)==(r3b(),o3b)};var ZY=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$1$Type',1430);feb(1431,1,{},$Oc);_.Kb=function _Oc(a){return RD(a,18).d.i};var $Y=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$2$Type',1431);feb(1432,1,nwe,aPc);_.Mb=function bPc(a){return EPc(zDc(RD(a,10)))};var _Y=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$3$Type',1432);feb(1433,1,nwe,cPc);_.Mb=function dPc(a){return DOc(RD(a,12))};var bZ=sfb(tEe,'NetworkSimplexPlacer/lambda$0$Type',1433);feb(1434,1,Qve,ePc);_.Cd=function fPc(a){jOc(this.a,this.b,RD(a,12))};var cZ=sfb(tEe,'NetworkSimplexPlacer/lambda$1$Type',1434);feb(1443,1,Qve,gPc);_.Cd=function hPc(a){kOc(this.a,RD(a,18))};var dZ=sfb(tEe,'NetworkSimplexPlacer/lambda$10$Type',1443);feb(1444,1,{},iPc);_.Kb=function jPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var eZ=sfb(tEe,'NetworkSimplexPlacer/lambda$11$Type',1444);feb(1445,1,Qve,kPc);_.Cd=function lPc(a){lOc(this.a,RD(a,10))};var fZ=sfb(tEe,'NetworkSimplexPlacer/lambda$12$Type',1445);feb(1446,1,{},mPc);_.Kb=function nPc(a){return dOc(),sgb(RD(a,125).e)};var gZ=sfb(tEe,'NetworkSimplexPlacer/lambda$13$Type',1446);feb(1448,1,{},oPc);_.Kb=function pPc(a){return dOc(),sgb(RD(a,125).e)};var hZ=sfb(tEe,'NetworkSimplexPlacer/lambda$15$Type',1448);feb(1450,1,nwe,qPc);_.Mb=function rPc(a){return dOc(),RD(a,412).c.k==(r3b(),p3b)};var iZ=sfb(tEe,'NetworkSimplexPlacer/lambda$17$Type',1450);feb(1451,1,nwe,sPc);_.Mb=function tPc(a){return dOc(),RD(a,412).c.j.c.length>1};var jZ=sfb(tEe,'NetworkSimplexPlacer/lambda$18$Type',1451);feb(1452,1,Qve,uPc);_.Cd=function vPc(a){EOc(this.c,this.b,this.d,this.a,RD(a,412))};_.c=0;_.d=0;var kZ=sfb(tEe,'NetworkSimplexPlacer/lambda$19$Type',1452);feb(1435,1,{},wPc);_.Kb=function xPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var lZ=sfb(tEe,'NetworkSimplexPlacer/lambda$2$Type',1435);feb(1453,1,Qve,yPc);_.Cd=function zPc(a){FOc(this.a,RD(a,12))};_.a=0;var mZ=sfb(tEe,'NetworkSimplexPlacer/lambda$20$Type',1453);feb(1454,1,{},APc);_.Kb=function BPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var nZ=sfb(tEe,'NetworkSimplexPlacer/lambda$21$Type',1454);feb(1455,1,Qve,CPc);_.Cd=function DPc(a){mOc(this.a,RD(a,10))};var oZ=sfb(tEe,'NetworkSimplexPlacer/lambda$22$Type',1455);feb(1456,1,nwe,FPc);_.Mb=function GPc(a){return EPc(a)};var pZ=sfb(tEe,'NetworkSimplexPlacer/lambda$23$Type',1456);feb(1457,1,{},HPc);_.Kb=function IPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var qZ=sfb(tEe,'NetworkSimplexPlacer/lambda$24$Type',1457);feb(1458,1,nwe,JPc);_.Mb=function KPc(a){return nOc(this.a,RD(a,10))};var rZ=sfb(tEe,'NetworkSimplexPlacer/lambda$25$Type',1458);feb(1459,1,Qve,LPc);_.Cd=function MPc(a){oOc(this.a,this.b,RD(a,10))};var sZ=sfb(tEe,'NetworkSimplexPlacer/lambda$26$Type',1459);feb(1460,1,nwe,NPc);_.Mb=function OPc(a){return dOc(),!W0b(RD(a,18))};var tZ=sfb(tEe,'NetworkSimplexPlacer/lambda$27$Type',1460);feb(1461,1,nwe,PPc);_.Mb=function QPc(a){return dOc(),!W0b(RD(a,18))};var uZ=sfb(tEe,'NetworkSimplexPlacer/lambda$28$Type',1461);feb(1462,1,{},RPc);_.Ve=function SPc(a,b){return pOc(this.a,RD(a,30),RD(b,30))};var vZ=sfb(tEe,'NetworkSimplexPlacer/lambda$29$Type',1462);feb(1436,1,{},TPc);_.Kb=function UPc(a){return dOc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var wZ=sfb(tEe,'NetworkSimplexPlacer/lambda$3$Type',1436);feb(1437,1,nwe,VPc);_.Mb=function WPc(a){return dOc(),COc(RD(a,18))};var xZ=sfb(tEe,'NetworkSimplexPlacer/lambda$4$Type',1437);feb(1438,1,Qve,XPc);_.Cd=function YPc(a){vOc(this.a,RD(a,18))};var yZ=sfb(tEe,'NetworkSimplexPlacer/lambda$5$Type',1438);feb(1439,1,{},ZPc);_.Kb=function $Pc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var zZ=sfb(tEe,'NetworkSimplexPlacer/lambda$6$Type',1439);feb(1440,1,nwe,_Pc);_.Mb=function aQc(a){return dOc(),RD(a,10).k==(r3b(),p3b)};var AZ=sfb(tEe,'NetworkSimplexPlacer/lambda$7$Type',1440);feb(1441,1,{},bQc);_.Kb=function cQc(a){return dOc(),new SDb(null,new Twb(new is(Mr(W2b(RD(a,10)).a.Kc(),new ir))))};var BZ=sfb(tEe,'NetworkSimplexPlacer/lambda$8$Type',1441);feb(1442,1,nwe,dQc);_.Mb=function eQc(a){return dOc(),V0b(RD(a,18))};var CZ=sfb(tEe,'NetworkSimplexPlacer/lambda$9$Type',1442);feb(1424,1,nEe,iQc);_.rg=function jQc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?fQc:null};_.Kf=function kQc(a,b){hQc(RD(a,36),b)};var fQc;var EZ=sfb(tEe,'SimpleNodePlacer',1424);feb(185,1,{185:1},sQc);_.Ib=function tQc(){var a;a='';this.c==(wQc(),vQc)?(a+=Oye):this.c==uQc&&(a+=Nye);this.o==(EQc(),CQc)?(a+=Zye):this.o==DQc?(a+='UP'):(a+='BALANCED');return a};var HZ=sfb(wEe,'BKAlignedLayout',185);feb(523,22,{3:1,34:1,22:1,523:1},xQc);var uQc,vQc;var FZ=tfb(wEe,'BKAlignedLayout/HDirection',523,WI,zQc,yQc);var AQc;feb(522,22,{3:1,34:1,22:1,522:1},FQc);var CQc,DQc;var GZ=tfb(wEe,'BKAlignedLayout/VDirection',522,WI,HQc,GQc);var IQc;feb(1699,1,{},MQc);var IZ=sfb(wEe,'BKAligner',1699);feb(1702,1,{},RQc);var LZ=sfb(wEe,'BKCompactor',1702);feb(663,1,{663:1},SQc);_.a=0;var JZ=sfb(wEe,'BKCompactor/ClassEdge',663);feb(466,1,{466:1},UQc);_.a=null;_.b=0;var KZ=sfb(wEe,'BKCompactor/ClassNode',466);feb(1427,1,nEe,aRc);_.rg=function eRc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?VQc:null};_.Kf=function fRc(a,b){_Qc(this,RD(a,36),b)};_.d=false;var VQc;var MZ=sfb(wEe,'BKNodePlacer',1427);feb(1700,1,{},hRc);_.d=0;var OZ=sfb(wEe,'NeighborhoodInformation',1700);feb(1701,1,fye,mRc);_.Ne=function nRc(a,b){return lRc(this,RD(a,42),RD(b,42))};_.Fb=function oRc(a){return this===a};_.Oe=function pRc(){return new Frb(this)};var NZ=sfb(wEe,'NeighborhoodInformation/NeighborComparator',1701);feb(823,1,{});var SZ=sfb(wEe,'ThresholdStrategy',823);feb(1825,823,{},uRc);_.wg=function vRc(a,b,c){return this.a.o==(EQc(),DQc)?oxe:pxe};_.xg=function wRc(){};var PZ=sfb(wEe,'ThresholdStrategy/NullThresholdStrategy',1825);feb(587,1,{587:1},xRc);_.c=false;_.d=false;var QZ=sfb(wEe,'ThresholdStrategy/Postprocessable',587);feb(1826,823,{},BRc);_.wg=function CRc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(wQc(),vQc)){e&&(f=yRc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=yRc(this,c,false))}else{e&&(f=yRc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=yRc(this,c,false))}return f};_.xg=function DRc(){var a,b,c,d,e;while(this.d.b!=0){e=RD(Tub(this.d),587);d=zRc(this,e);if(!d.a){continue}a=d.a;c=Heb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!W0b(a)&&a.c.i.c==a.d.i.c){continue}b=ARc(this,e);b||Eyb(this.e,e)}while(this.e.a.c.length!=0){ARc(this,RD(Dyb(this.e),587))}};var RZ=sfb(wEe,'ThresholdStrategy/SimpleThresholdStrategy',1826);feb(645,1,{645:1,188:1,196:1},HRc);_.dg=function JRc(){return GRc(this)};_.qg=function IRc(){return GRc(this)};var ERc;var TZ=sfb(xEe,'EdgeRouterFactory',645);feb(1485,1,nEe,WRc);_.rg=function XRc(a){return URc(RD(a,36))};_.Kf=function YRc(a,b){VRc(RD(a,36),b)};var LRc,MRc,NRc,ORc,PRc,QRc,RRc,SRc;var UZ=sfb(xEe,'OrthogonalEdgeRouter',1485);feb(1478,1,nEe,lSc);_.rg=function mSc(a){return gSc(RD(a,36))};_.Kf=function nSc(a,b){iSc(this,RD(a,36),b)};var ZRc,$Rc,_Rc,aSc,bSc,cSc;var WZ=sfb(xEe,'PolylineEdgeRouter',1478);feb(1479,1,xye,pSc);_.Lb=function qSc(a){return oSc(RD(a,10))};_.Fb=function rSc(a){return this===a};_.Mb=function sSc(a){return oSc(RD(a,10))};var VZ=sfb(xEe,'PolylineEdgeRouter/1',1479);feb(1872,1,nwe,xSc);_.Mb=function ySc(a){return RD(a,132).c==(fTc(),dTc)};var XZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$0$Type',1872);feb(1873,1,{},zSc);_.Ze=function ASc(a){return RD(a,132).d};var YZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$1$Type',1873);feb(1874,1,nwe,BSc);_.Mb=function CSc(a){return RD(a,132).c==(fTc(),dTc)};var ZZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$2$Type',1874);feb(1875,1,{},DSc);_.Ze=function ESc(a){return RD(a,132).d};var $Z=sfb(yEe,'HyperEdgeCycleDetector/lambda$3$Type',1875);feb(1876,1,{},FSc);_.Ze=function GSc(a){return RD(a,132).d};var _Z=sfb(yEe,'HyperEdgeCycleDetector/lambda$4$Type',1876);feb(1877,1,{},HSc);_.Ze=function ISc(a){return RD(a,132).d};var a$=sfb(yEe,'HyperEdgeCycleDetector/lambda$5$Type',1877);feb(118,1,{34:1,118:1},USc);_.Fd=function VSc(a){return KSc(this,RD(a,118))};_.Fb=function WSc(a){var b;if(ZD(a,118)){b=RD(a,118);return this.g==b.g}return false};_.Hb=function XSc(){return this.g};_.Ib=function ZSc(){var a,b,c,d;a=new dib('{');d=new Anb(this.n);while(d.a<d.c.c.length){c=RD(ynb(d),12);b=X2b(c.i);b==null&&(b='n'+$2b(c.i));a.a+=''+b;d.a<d.c.c.length&&(a.a+=',',a)}a.a+='}';return a.a};_.a=0;_.b=0;_.c=NaN;_.d=0;_.g=0;_.i=0;_.o=0;_.s=NaN;var l$=sfb(yEe,'HyperEdgeSegment',118);feb(132,1,{132:1},bTc);_.Ib=function cTc(){return this.a+'->'+this.b+' ('+os(this.c)+')'};_.d=0;var c$=sfb(yEe,'HyperEdgeSegmentDependency',132);feb(528,22,{3:1,34:1,22:1,528:1},gTc);var dTc,eTc;var b$=tfb(yEe,'HyperEdgeSegmentDependency/DependencyType',528,WI,iTc,hTc);var jTc;feb(1878,1,{},xTc);var k$=sfb(yEe,'HyperEdgeSegmentSplitter',1878);feb(1879,1,{},ATc);_.a=0;_.b=0;var d$=sfb(yEe,'HyperEdgeSegmentSplitter/AreaRating',1879);feb(339,1,{339:1},BTc);_.a=0;_.b=0;_.c=0;var e$=sfb(yEe,'HyperEdgeSegmentSplitter/FreeArea',339);feb(1880,1,fye,CTc);_.Ne=function DTc(a,b){return zTc(RD(a,118),RD(b,118))};_.Fb=function ETc(a){return this===a};_.Oe=function FTc(){return new Frb(this)};var f$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$0$Type',1880);feb(1881,1,Qve,GTc);_.Cd=function HTc(a){rTc(this.a,this.d,this.c,this.b,RD(a,118))};_.b=0;var g$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$1$Type',1881);feb(1882,1,{},ITc);_.Kb=function JTc(a){return new SDb(null,new Swb(RD(a,118).e,16))};var h$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$2$Type',1882);feb(1883,1,{},KTc);_.Kb=function LTc(a){return new SDb(null,new Swb(RD(a,118).j,16))};var i$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$3$Type',1883);feb(1884,1,{},MTc);_.Ye=function NTc(a){return Kfb(UD(a))};var j$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$4$Type',1884);feb(664,1,{},TTc);_.a=0;_.b=0;_.c=0;var o$=sfb(yEe,'OrthogonalRoutingGenerator',664);feb(1703,1,{},XTc);_.Kb=function YTc(a){return new SDb(null,new Swb(RD(a,118).e,16))};var m$=sfb(yEe,'OrthogonalRoutingGenerator/lambda$0$Type',1703);feb(1704,1,{},ZTc);_.Kb=function $Tc(a){return new SDb(null,new Swb(RD(a,118).j,16))};var n$=sfb(yEe,'OrthogonalRoutingGenerator/lambda$1$Type',1704);feb(670,1,{});var p$=sfb(zEe,'BaseRoutingDirectionStrategy',670);feb(1870,670,{},cUc);_.yg=function dUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(l,f);Mub(g.a,d);_Tc(this,g,e,d,false);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false);f=b+m.o*c;e=m;d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false)}d=new rjd(p,f);Mub(g.a,d);_Tc(this,g,e,d,false)}}}}};_.zg=function eUc(a){return a.i.n.a+a.n.a+a.a.a};_.Ag=function fUc(){return qpd(),npd};_.Bg=function gUc(){return qpd(),Yod};var q$=sfb(zEe,'NorthToSouthRoutingStrategy',1870);feb(1871,670,{},hUc);_.yg=function iUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(l,f);Mub(g.a,d);_Tc(this,g,e,d,false);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false);f=b-m.o*c;e=m;d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false)}d=new rjd(p,f);Mub(g.a,d);_Tc(this,g,e,d,false)}}}}};_.zg=function jUc(a){return a.i.n.a+a.n.a+a.a.a};_.Ag=function kUc(){return qpd(),Yod};_.Bg=function lUc(){return qpd(),npd};var r$=sfb(zEe,'SouthToNorthRoutingStrategy',1871);feb(1869,670,{},mUc);_.yg=function nUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).b;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).b;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(f,l);Mub(g.a,d);_Tc(this,g,e,d,true);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(f,n);Mub(g.a,d);_Tc(this,g,e,d,true);f=b+m.o*c;e=m;d=new rjd(f,n);Mub(g.a,d);_Tc(this,g,e,d,true)}d=new rjd(f,p);Mub(g.a,d);_Tc(this,g,e,d,true)}}}}};_.zg=function oUc(a){return a.i.n.b+a.n.b+a.a.b};_.Ag=function pUc(){return qpd(),Xod};_.Bg=function qUc(){return qpd(),ppd};var s$=sfb(zEe,'WestToEastRoutingStrategy',1869);feb(828,1,{},wUc);_.Ib=function xUc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var u$=sfb(BEe,'NubSpline',828);feb(418,1,{418:1},AUc,BUc);var t$=sfb(BEe,'NubSpline/PolarCP',418);feb(1480,1,nEe,VUc);_.rg=function XUc(a){return QUc(RD(a,36))};_.Kf=function YUc(a,b){UUc(this,RD(a,36),b)};var CUc,DUc,EUc,FUc,GUc;var B$=sfb(BEe,'SplineEdgeRouter',1480);feb(274,1,{274:1},_Uc);_.Ib=function aVc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var v$=sfb(BEe,'SplineEdgeRouter/Dependency',274);feb(464,22,{3:1,34:1,22:1,464:1},eVc);var bVc,cVc;var w$=tfb(BEe,'SplineEdgeRouter/SideToProcess',464,WI,gVc,fVc);var hVc;feb(1481,1,nwe,jVc);_.Mb=function kVc(a){return HUc(),!RD(a,131).o};var x$=sfb(BEe,'SplineEdgeRouter/lambda$0$Type',1481);feb(1482,1,{},lVc);_.Ze=function mVc(a){return HUc(),RD(a,131).v+1};var y$=sfb(BEe,'SplineEdgeRouter/lambda$1$Type',1482);feb(1483,1,Qve,nVc);_.Cd=function oVc(a){SUc(this.a,this.b,RD(a,42))};var z$=sfb(BEe,'SplineEdgeRouter/lambda$2$Type',1483);feb(1484,1,Qve,pVc);_.Cd=function qVc(a){TUc(this.a,this.b,RD(a,42))};var A$=sfb(BEe,'SplineEdgeRouter/lambda$3$Type',1484);feb(131,1,{34:1,131:1},wVc,xVc);_.Fd=function yVc(a){return uVc(this,RD(a,131))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var D$=sfb(BEe,'SplineSegment',131);feb(467,1,{467:1},zVc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var C$=sfb(BEe,'SplineSegment/EdgeInformation',467);feb(1198,1,{},IVc);var F$=sfb(GEe,Lze,1198);feb(1199,1,fye,KVc);_.Ne=function LVc(a,b){return JVc(RD(a,121),RD(b,121))};_.Fb=function MVc(a){return this===a};_.Oe=function NVc(){return new Frb(this)};var E$=sfb(GEe,Mze,1199);feb(1197,1,{},TVc);var G$=sfb(GEe,'MrTree',1197);feb(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},$Vc);_.dg=function aWc(){return ZVc(this)};_.qg=function _Vc(){return ZVc(this)};var UVc,VVc,WVc,XVc;var H$=tfb(GEe,'TreeLayoutPhases',405,WI,cWc,bWc);var dWc;feb(1112,205,oze,fWc);_.rf=function gWc(a,b){var c,d,e,f,g,h,i,j;Heb(TD(Gxd(a,(h_c(),S$c))))||RFb((c=new SFb((lud(),new zud(a))),c));g=b.eh(HEe);g.Ug('build tGraph',1);h=(i=new YWc,kQb(i,a),pQb(i,(q$c(),h$c),a),j=new Tsb,QVc(a,i,j),PVc(a,i,j),i);g.Vg();g=b.eh(HEe);g.Ug('Split graph',1);f=HVc(this.a,h);g.Vg();for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),121);RVc(this.b,d,b.eh(0.5999999940395355/f.c.length))}g=b.eh(HEe);g.Ug('Pack components',1);h=GVc(f);g.Vg();g=b.eh(HEe);g.Ug('Apply layout results',1);OVc(h);g.Vg()};var I$=sfb(GEe,'TreeLayoutProvider',1112);feb(1894,1,Vve,uWc);_.Jc=function vWc(a){xgb(this,a)};_.Kc=function wWc(){return yob(),Qob(),Pob};var J$=sfb(GEe,'TreeUtil/1',1894);feb(1895,1,Vve,xWc);_.Jc=function yWc(a){xgb(this,a)};_.Kc=function zWc(){return yob(),Qob(),Pob};var K$=sfb(GEe,'TreeUtil/2',1895);feb(1885,1,nwe,AWc);_.Mb=function BWc(a){return Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var L$=sfb(GEe,'TreeUtil/lambda$0$Type',1885);feb(1891,1,nwe,CWc);_.Mb=function DWc(a){return this.a.Hc(RD(a,39))};var M$=sfb(GEe,'TreeUtil/lambda$10$Type',1891);feb(1892,1,{},EWc);_.Kb=function FWc(a){return nWc(this.a,RD(a,39))};var N$=sfb(GEe,'TreeUtil/lambda$11$Type',1892);feb(1893,1,nwe,GWc);_.Mb=function HWc(a){return oWc(this.a,this.b,RD(a,39))};var O$=sfb(GEe,'TreeUtil/lambda$12$Type',1893);feb(1886,1,nwe,IWc);_.Mb=function JWc(a){return pWc(this.a,RD(a,65))};var P$=sfb(GEe,'TreeUtil/lambda$3$Type',1886);feb(1887,1,fye,KWc);_.Ne=function LWc(a,b){return qWc(RD(a,65),RD(b,65))};_.Fb=function MWc(a){return this===a};_.Oe=function NWc(){return new Frb(this)};var Q$=sfb(GEe,'TreeUtil/lambda$4$Type',1887);feb(1888,1,nwe,OWc);_.Mb=function PWc(a){return rWc(this.a,RD(a,65))};var R$=sfb(GEe,'TreeUtil/lambda$7$Type',1888);feb(1889,1,fye,QWc);_.Ne=function RWc(a,b){return sWc(RD(a,65),RD(b,65))};_.Fb=function SWc(a){return this===a};_.Oe=function TWc(){return new Frb(this)};var S$=sfb(GEe,'TreeUtil/lambda$8$Type',1889);feb(1890,1,{},UWc);_.Kb=function VWc(a){return RD(a,65).b};var T$=sfb(GEe,'TreeUtil/lambda$9$Type',1890);feb(508,137,{3:1,508:1,96:1,137:1});_.g=0;var V$=sfb(JEe,'TGraphElement',508);feb(65,508,{3:1,65:1,508:1,96:1,137:1},WWc);_.Ib=function XWc(){return !!this.b&&!!this.c?aXc(this.b)+'->'+aXc(this.c):'e_'+tb(this)};var U$=sfb(JEe,'TEdge',65);feb(121,137,{3:1,121:1,96:1,137:1},YWc);_.Ib=function ZWc(){var a,b,c,d,e;e=null;for(d=Sub(this.b,0);d.b!=d.d.c;){c=RD(evb(d),39);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Sub(this.a,0);b.b!=b.d.c;){a=RD(evb(b),65);e+=(!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))+'\n'}return e};var W$=sfb(JEe,'TGraph',121);feb(643,508,{3:1,508:1,643:1,96:1,137:1});var $$=sfb(JEe,'TShape',643);feb(39,643,{3:1,508:1,39:1,643:1,96:1,137:1},bXc);_.Ib=function cXc(){return aXc(this)};var Z$=sfb(JEe,'TNode',39);feb(236,1,Vve,dXc);_.Jc=function eXc(a){xgb(this,a)};_.Kc=function fXc(){var a;return a=Sub(this.a.d,0),new gXc(a)};var Y$=sfb(JEe,'TNode/2',236);feb(329,1,Ave,gXc);_.Nb=function hXc(a){Ztb(this,a)};_.Pb=function jXc(){return RD(evb(this.a),65).c};_.Ob=function iXc(){return dvb(this.a)};_.Qb=function kXc(){gvb(this.a)};var X$=sfb(JEe,'TNode/2/1',329);feb(1923,1,QAe,qXc);_.Kf=function DXc(a,b){oXc(this,RD(a,121),b)};var m_=sfb(LEe,'CompactionProcessor',1923);feb(1924,1,fye,EXc);_.Ne=function FXc(a,b){return rXc(this.a,RD(a,39),RD(b,39))};_.Fb=function GXc(a){return this===a};_.Oe=function HXc(){return new Frb(this)};var _$=sfb(LEe,'CompactionProcessor/lambda$0$Type',1924);feb(1925,1,nwe,IXc);_.Mb=function JXc(a){return sXc(this.b,this.a,RD(a,42))};_.a=0;_.b=0;var a_=sfb(LEe,'CompactionProcessor/lambda$1$Type',1925);feb(1934,1,fye,KXc);_.Ne=function LXc(a,b){return tXc(RD(a,39),RD(b,39))};_.Fb=function MXc(a){return this===a};_.Oe=function NXc(){return new Frb(this)};var b_=sfb(LEe,'CompactionProcessor/lambda$10$Type',1934);feb(1935,1,fye,OXc);_.Ne=function PXc(a,b){return uXc(RD(a,39),RD(b,39))};_.Fb=function QXc(a){return this===a};_.Oe=function RXc(){return new Frb(this)};var c_=sfb(LEe,'CompactionProcessor/lambda$11$Type',1935);feb(1936,1,fye,SXc);_.Ne=function TXc(a,b){return vXc(RD(a,39),RD(b,39))};_.Fb=function UXc(a){return this===a};_.Oe=function VXc(){return new Frb(this)};var d_=sfb(LEe,'CompactionProcessor/lambda$12$Type',1936);feb(1926,1,nwe,WXc);_.Mb=function XXc(a){return wXc(this.a,RD(a,42))};_.a=0;var e_=sfb(LEe,'CompactionProcessor/lambda$2$Type',1926);feb(1927,1,nwe,YXc);_.Mb=function ZXc(a){return xXc(this.a,RD(a,42))};_.a=0;var f_=sfb(LEe,'CompactionProcessor/lambda$3$Type',1927);feb(1928,1,nwe,$Xc);_.Mb=function _Xc(a){return RD(a,39).c.indexOf(IEe)==-1};var g_=sfb(LEe,'CompactionProcessor/lambda$4$Type',1928);feb(1929,1,{},aYc);_.Kb=function bYc(a){return yXc(this.a,RD(a,39))};_.a=0;var h_=sfb(LEe,'CompactionProcessor/lambda$5$Type',1929);feb(1930,1,{},cYc);_.Kb=function dYc(a){return zXc(this.a,RD(a,39))};_.a=0;var i_=sfb(LEe,'CompactionProcessor/lambda$6$Type',1930);feb(1931,1,fye,eYc);_.Ne=function fYc(a,b){return AXc(this.a,RD(a,240),RD(b,240))};_.Fb=function gYc(a){return this===a};_.Oe=function hYc(){return new Frb(this)};var j_=sfb(LEe,'CompactionProcessor/lambda$7$Type',1931);feb(1932,1,fye,iYc);_.Ne=function jYc(a,b){return BXc(this.a,RD(a,39),RD(b,39))};_.Fb=function kYc(a){return this===a};_.Oe=function lYc(){return new Frb(this)};var k_=sfb(LEe,'CompactionProcessor/lambda$8$Type',1932);feb(1933,1,fye,mYc);_.Ne=function nYc(a,b){return CXc(RD(a,39),RD(b,39))};_.Fb=function oYc(a){return this===a};_.Oe=function pYc(){return new Frb(this)};var l_=sfb(LEe,'CompactionProcessor/lambda$9$Type',1933);feb(1921,1,QAe,rYc);_.Kf=function sYc(a,b){qYc(RD(a,121),b)};var n_=sfb(LEe,'DirectionProcessor',1921);feb(1913,1,QAe,vYc);_.Kf=function xYc(a,b){uYc(this,RD(a,121),b)};var o_=sfb(LEe,'FanProcessor',1913);feb(1937,1,QAe,zYc);_.Kf=function CYc(a,b){yYc(RD(a,121),b)};var t_=sfb(LEe,'GraphBoundsProcessor',1937);feb(1938,1,{},DYc);_.Ye=function EYc(a){return RD(a,39).e.a};var p_=sfb(LEe,'GraphBoundsProcessor/lambda$0$Type',1938);feb(1939,1,{},FYc);_.Ye=function GYc(a){return RD(a,39).e.b};var q_=sfb(LEe,'GraphBoundsProcessor/lambda$1$Type',1939);feb(1940,1,{},HYc);_.Ye=function IYc(a){return AYc(RD(a,39))};var r_=sfb(LEe,'GraphBoundsProcessor/lambda$2$Type',1940);feb(1941,1,{},JYc);_.Ye=function KYc(a){return BYc(RD(a,39))};var s_=sfb(LEe,'GraphBoundsProcessor/lambda$3$Type',1941);feb(262,22,{3:1,34:1,22:1,262:1,196:1},XYc);_.dg=function YYc(){switch(this.g){case 0:return new DZc;case 1:return new vYc;case 2:return new nZc;case 3:return new tZc;case 4:return new gZc;case 8:return new cZc;case 5:return new rYc;case 6:return new AZc;case 7:return new qXc;case 9:return new zYc;case 10:return new GZc;default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var LYc,MYc,NYc,OYc,PYc,QYc,RYc,SYc,TYc,UYc,VYc;var u_=tfb(LEe,mBe,262,WI,$Yc,ZYc);var _Yc;feb(1920,1,QAe,cZc);_.Kf=function dZc(a,b){bZc(RD(a,121),b)};var v_=sfb(LEe,'LevelCoordinatesProcessor',1920);feb(1918,1,QAe,gZc);_.Kf=function hZc(a,b){eZc(this,RD(a,121),b)};_.a=0;var x_=sfb(LEe,'LevelHeightProcessor',1918);feb(1919,1,Vve,iZc);_.Jc=function jZc(a){xgb(this,a)};_.Kc=function kZc(){return yob(),Qob(),Pob};var w_=sfb(LEe,'LevelHeightProcessor/1',1919);feb(1914,1,QAe,nZc);_.Kf=function oZc(a,b){lZc(this,RD(a,121),b)};var z_=sfb(LEe,'LevelProcessor',1914);feb(1915,1,nwe,pZc);_.Mb=function qZc(a){return Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var y_=sfb(LEe,'LevelProcessor/lambda$0$Type',1915);feb(1916,1,QAe,tZc);_.Kf=function uZc(a,b){rZc(this,RD(a,121),b)};_.a=0;var B_=sfb(LEe,'NeighborsProcessor',1916);feb(1917,1,Vve,vZc);_.Jc=function wZc(a){xgb(this,a)};_.Kc=function xZc(){return yob(),Qob(),Pob};var A_=sfb(LEe,'NeighborsProcessor/1',1917);feb(1922,1,QAe,AZc);_.Kf=function BZc(a,b){yZc(this,RD(a,121),b)};_.a=0;var C_=sfb(LEe,'NodePositionProcessor',1922);feb(1912,1,QAe,DZc);_.Kf=function EZc(a,b){CZc(this,RD(a,121),b)};var D_=sfb(LEe,'RootProcessor',1912);feb(1942,1,QAe,GZc);_.Kf=function HZc(a,b){FZc(RD(a,121),b)};var E_=sfb(LEe,'Untreeifyer',1942);feb(392,22,{3:1,34:1,22:1,392:1},MZc);var IZc,JZc,KZc;var F_=tfb(PEe,'EdgeRoutingMode',392,WI,OZc,NZc);var PZc;var RZc,SZc,TZc,UZc,VZc,WZc,XZc,YZc,ZZc,$Zc,_Zc,a$c,b$c,c$c,d$c,e$c,f$c,g$c,h$c,i$c,j$c,k$c,l$c,m$c,n$c,o$c,p$c;feb(862,1,Eye,C$c);_.hf=function D$c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,REe),''),YEe),'Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SEe),''),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TEe),''),'Tree Level'),'The index for the tree level the node is in'),sgb(0)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UEe),''),YEe),'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'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VEe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),A$c),eid),J_),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WEe),''),'Edge Routing Mode'),'Chooses an Edge Routing algorithm.'),u$c),eid),F_),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XEe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),x$c),eid),K_),xsb(Whd))));i_c((new j_c,a))};var r$c,s$c,t$c,u$c,v$c,w$c,x$c,y$c,z$c,A$c;var G_=sfb(PEe,'MrTreeMetaDataProvider',862);feb(1006,1,Eye,j_c);_.hf=function k_c(a){i_c(a)};var E$c,F$c,G$c,H$c,I$c,J$c,K$c,L$c,M$c,N$c,O$c,P$c,Q$c,R$c,S$c,T$c,U$c,V$c,W$c,X$c,Y$c,Z$c,$$c,_$c,a_c,b_c,c_c,d_c,e_c,f_c,g_c;var I_=sfb(PEe,'MrTreeOptions',1006);feb(1007,1,{},l_c);_.sf=function m_c(){var a;return a=new fWc,a};_.tf=function n_c(a){};var H_=sfb(PEe,'MrTreeOptions/MrtreeFactory',1007);feb(353,22,{3:1,34:1,22:1,353:1},t_c);var o_c,p_c,q_c,r_c;var J_=tfb(PEe,'OrderWeighting',353,WI,v_c,u_c);var w_c;feb(433,22,{3:1,34:1,22:1,433:1},B_c);var y_c,z_c;var K_=tfb(PEe,'TreeifyingOrder',433,WI,D_c,C_c);var E_c;feb(1486,1,nEe,N_c);_.rg=function O_c(a){return RD(a,121),G_c};_.Kf=function P_c(a,b){M_c(this,RD(a,121),b)};var G_c;var L_=sfb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1486);feb(1487,1,nEe,V_c);_.rg=function W_c(a){return RD(a,121),Q_c};_.Kf=function $_c(a,b){U_c(this,RD(a,121),b)};var Q_c;var T_=sfb(aFe,'NodeOrderer',1487);feb(1494,1,{},a0c);_.td=function b0c(a){return __c(a)};var M_=sfb(aFe,'NodeOrderer/0methodref$lambda$6$Type',1494);feb(1488,1,nwe,c0c);_.Mb=function d0c(a){return R_c(),Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var N_=sfb(aFe,'NodeOrderer/lambda$0$Type',1488);feb(1489,1,nwe,e0c);_.Mb=function f0c(a){return R_c(),RD(mQb(RD(a,39),(h_c(),W$c)),17).a<0};var O_=sfb(aFe,'NodeOrderer/lambda$1$Type',1489);feb(1490,1,nwe,g0c);_.Mb=function h0c(a){return X_c(this.a,RD(a,39))};var P_=sfb(aFe,'NodeOrderer/lambda$2$Type',1490);feb(1491,1,nwe,i0c);_.Mb=function j0c(a){return Y_c(this.a,RD(a,39))};var Q_=sfb(aFe,'NodeOrderer/lambda$3$Type',1491);feb(1492,1,fye,k0c);_.Ne=function l0c(a,b){return Z_c(RD(a,39),RD(b,39))};_.Fb=function m0c(a){return this===a};_.Oe=function n0c(){return new Frb(this)};var R_=sfb(aFe,'NodeOrderer/lambda$4$Type',1492);feb(1493,1,nwe,o0c);_.Mb=function p0c(a){return R_c(),RD(mQb(RD(a,39),(q$c(),XZc)),17).a!=0};var S_=sfb(aFe,'NodeOrderer/lambda$5$Type',1493);feb(1495,1,nEe,x0c);_.rg=function y0c(a){return RD(a,121),q0c};_.Kf=function z0c(a,b){v0c(this,RD(a,121),b)};_.b=0;var q0c;var U_=sfb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1495);feb(1496,1,nEe,J0c);_.rg=function K0c(a){return RD(a,121),A0c};_.Kf=function Y0c(a,b){I0c(RD(a,121),b)};var A0c;var o0=sfb(bFe,'EdgeRouter',1496);feb(1498,1,fye,Z0c);_.Ne=function $0c(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function _0c(a){return this===a};_.Oe=function a1c(){return new Frb(this)};var V_=sfb(bFe,'EdgeRouter/0methodref$compare$Type',1498);feb(1503,1,{},b1c);_.Ye=function c1c(a){return Kfb(UD(a))};var W_=sfb(bFe,'EdgeRouter/1methodref$doubleValue$Type',1503);feb(1505,1,fye,d1c);_.Ne=function e1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function f1c(a){return this===a};_.Oe=function g1c(){return new Frb(this)};var X_=sfb(bFe,'EdgeRouter/2methodref$compare$Type',1505);feb(1507,1,fye,h1c);_.Ne=function i1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function j1c(a){return this===a};_.Oe=function k1c(){return new Frb(this)};var Y_=sfb(bFe,'EdgeRouter/3methodref$compare$Type',1507);feb(1509,1,{},l1c);_.Ye=function m1c(a){return Kfb(UD(a))};var Z_=sfb(bFe,'EdgeRouter/4methodref$doubleValue$Type',1509);feb(1511,1,fye,n1c);_.Ne=function o1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function p1c(a){return this===a};_.Oe=function q1c(){return new Frb(this)};var $_=sfb(bFe,'EdgeRouter/5methodref$compare$Type',1511);feb(1513,1,fye,r1c);_.Ne=function s1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function t1c(a){return this===a};_.Oe=function u1c(){return new Frb(this)};var __=sfb(bFe,'EdgeRouter/6methodref$compare$Type',1513);feb(1497,1,{},v1c);_.Kb=function w1c(a){return B0c(),RD(mQb(RD(a,39),(h_c(),f_c)),17)};var a0=sfb(bFe,'EdgeRouter/lambda$0$Type',1497);feb(1508,1,{},x1c);_.Kb=function y1c(a){return L0c(RD(a,39))};var b0=sfb(bFe,'EdgeRouter/lambda$11$Type',1508);feb(1510,1,{},z1c);_.Kb=function A1c(a){return M0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var c0=sfb(bFe,'EdgeRouter/lambda$13$Type',1510);feb(1512,1,{},B1c);_.Kb=function C1c(a){return N0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var d0=sfb(bFe,'EdgeRouter/lambda$15$Type',1512);feb(1514,1,fye,D1c);_.Ne=function E1c(a,b){return O0c(RD(a,65),RD(b,65))};_.Fb=function F1c(a){return this===a};_.Oe=function G1c(){return new Frb(this)};var e0=sfb(bFe,'EdgeRouter/lambda$17$Type',1514);feb(1515,1,fye,H1c);_.Ne=function I1c(a,b){return P0c(RD(a,65),RD(b,65))};_.Fb=function J1c(a){return this===a};_.Oe=function K1c(){return new Frb(this)};var f0=sfb(bFe,'EdgeRouter/lambda$18$Type',1515);feb(1516,1,fye,L1c);_.Ne=function M1c(a,b){return Q0c(RD(a,65),RD(b,65))};_.Fb=function N1c(a){return this===a};_.Oe=function O1c(){return new Frb(this)};var g0=sfb(bFe,'EdgeRouter/lambda$19$Type',1516);feb(1499,1,nwe,P1c);_.Mb=function Q1c(a){return R0c(this.a,RD(a,39))};_.a=0;var h0=sfb(bFe,'EdgeRouter/lambda$2$Type',1499);feb(1517,1,fye,R1c);_.Ne=function S1c(a,b){return S0c(RD(a,65),RD(b,65))};_.Fb=function T1c(a){return this===a};_.Oe=function U1c(){return new Frb(this)};var i0=sfb(bFe,'EdgeRouter/lambda$20$Type',1517);feb(1500,1,fye,V1c);_.Ne=function W1c(a,b){return T0c(RD(a,39),RD(b,39))};_.Fb=function X1c(a){return this===a};_.Oe=function Y1c(){return new Frb(this)};var j0=sfb(bFe,'EdgeRouter/lambda$3$Type',1500);feb(1501,1,fye,Z1c);_.Ne=function $1c(a,b){return U0c(RD(a,39),RD(b,39))};_.Fb=function _1c(a){return this===a};_.Oe=function a2c(){return new Frb(this)};var k0=sfb(bFe,'EdgeRouter/lambda$4$Type',1501);feb(1502,1,{},b2c);_.Kb=function c2c(a){return V0c(RD(a,39))};var l0=sfb(bFe,'EdgeRouter/lambda$5$Type',1502);feb(1504,1,{},d2c);_.Kb=function e2c(a){return W0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var m0=sfb(bFe,'EdgeRouter/lambda$7$Type',1504);feb(1506,1,{},f2c);_.Kb=function g2c(a){return X0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var n0=sfb(bFe,'EdgeRouter/lambda$9$Type',1506);feb(675,1,{675:1},i2c);_.e=0;_.f=false;_.g=false;var r0=sfb(bFe,'MultiLevelEdgeNodeNodeGap',675);feb(1943,1,fye,l2c);_.Ne=function m2c(a,b){return j2c(RD(a,240),RD(b,240))};_.Fb=function n2c(a){return this===a};_.Oe=function o2c(){return new Frb(this)};var p0=sfb(bFe,'MultiLevelEdgeNodeNodeGap/lambda$0$Type',1943);feb(1944,1,fye,p2c);_.Ne=function q2c(a,b){return k2c(RD(a,240),RD(b,240))};_.Fb=function r2c(a){return this===a};_.Oe=function s2c(){return new Frb(this)};var q0=sfb(bFe,'MultiLevelEdgeNodeNodeGap/lambda$1$Type',1944);var t2c;feb(500,22,{3:1,34:1,22:1,500:1,188:1,196:1},z2c);_.dg=function B2c(){return y2c(this)};_.qg=function A2c(){return y2c(this)};var v2c,w2c;var s0=tfb(cFe,'RadialLayoutPhases',500,WI,D2c,C2c);var E2c;feb(1113,205,oze,H2c);_.rf=function I2c(a,b){var c,d,e,f,g,h;c=G2c(this,a);b.Ug('Radial layout',c.c.length);Heb(TD(Gxd(a,($4c(),N4c))))||RFb((d=new SFb((lud(),new zud(a))),d));h=K2c(a);Ixd(a,(u2c(),t2c),h);if(!h){throw Adb(new agb('The given graph is not a tree!'))}e=Kfb(UD(Gxd(a,S4c)));e==0&&(e=J2c(a));Ixd(a,S4c,e);for(g=new Anb(G2c(this,a));g.a<g.c.c.length;){f=RD(ynb(g),47);f.Kf(a,b.eh(1))}b.Vg()};var t0=sfb(cFe,'RadialLayoutProvider',1113);feb(556,1,fye,T2c);_.Ne=function U2c(a,b){return S2c(this.a,this.b,RD(a,27),RD(b,27))};_.Fb=function V2c(a){return this===a};_.Oe=function W2c(){return new Frb(this)};_.a=0;_.b=0;var u0=sfb(cFe,'RadialUtil/lambda$0$Type',556);feb(1395,1,QAe,Y2c);_.Kf=function Z2c(a,b){X2c(RD(a,27),b)};var v0=sfb(hFe,'CalculateGraphSize',1395);feb(1396,1,QAe,_2c);_.Kf=function a3c(a,b){$2c(RD(a,27))};var w0=sfb(hFe,'EdgeAngleCalculator',1396);feb(368,22,{3:1,34:1,22:1,368:1,196:1},h3c);_.dg=function i3c(){switch(this.g){case 0:return new Q3c;case 1:return new A3c;case 2:return new U3c;case 3:return new Y2c;case 4:return new _2c;default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var b3c,c3c,d3c,e3c,f3c;var x0=tfb(hFe,mBe,368,WI,k3c,j3c);var l3c;feb(653,1,{});_.e=1;_.g=0;var y0=sfb(jFe,'AbstractRadiusExtensionCompaction',653);feb(1834,653,{},x3c);_.Cg=function y3c(a){var b,c,d,e,f,g,h,i,j;this.c=RD(Gxd(a,(u2c(),t2c)),27);r3c(this,this.c);this.d=u5c(RD(Gxd(a,($4c(),X4c)),299));i=RD(Gxd(a,H4c),17);!!i&&q3c(this,i.a);h=UD(Gxd(a,(umd(),fmd)));s3c(this,(uFb(h),h));j=Q2c(this.c);!!this.d&&this.d.Gg(j);t3c(this,j);g=new mob(cD(WC(J4,1),kFe,27,0,[this.c]));for(c=0;c<2;c++){for(b=0;b<j.c.length;b++){e=new mob(cD(WC(J4,1),kFe,27,0,[(tFb(b,j.c.length),RD(j.c[b],27))]));f=b<j.c.length-1?(tFb(b+1,j.c.length),RD(j.c[b+1],27)):(tFb(0,j.c.length),RD(j.c[0],27));d=b==0?RD(Vmb(j,j.c.length-1),27):(tFb(b-1,j.c.length),RD(j.c[b-1],27));v3c(this,(tFb(b,j.c.length),RD(j.c[b],27),g),d,f,e)}}};var z0=sfb(jFe,'AnnulusWedgeCompaction',1834);feb(1393,1,QAe,A3c);_.Kf=function B3c(a,b){z3c(RD(a,27),b)};var A0=sfb(jFe,'GeneralCompactor',1393);feb(1833,653,{},F3c);_.Cg=function G3c(a){var b,c,d,e;c=RD(Gxd(a,(u2c(),t2c)),27);this.f=c;this.b=u5c(RD(Gxd(a,($4c(),X4c)),299));e=RD(Gxd(a,H4c),17);!!e&&q3c(this,e.a);d=UD(Gxd(a,(umd(),fmd)));s3c(this,(uFb(d),d));b=Q2c(c);!!this.b&&this.b.Gg(b);D3c(this,b)};_.a=0;var B0=sfb(jFe,'RadialCompaction',1833);feb(1842,1,{},I3c);_.Dg=function J3c(a){var b,c,d,e,f,g;this.a=a;b=0;g=Q2c(a);d=0;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),27);++d;for(c=d;c<g.c.length;c++){H3c(this,e,(tFb(c,g.c.length),RD(g.c[c],27)))&&(b+=1)}}return b};var C0=sfb(lFe,'CrossingMinimizationPosition',1842);feb(1840,1,{},K3c);_.Dg=function L3c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=0;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);h=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));j=h.i+h.g/2;k=h.j+h.f/2;e=a.i+a.g/2;f=a.j+a.f/2;l=new pjd;l.a=j-e;l.b=k-f;g=new rjd(l.a,l.b);wid(g,a.g,a.f);l.a-=g.a;l.b-=g.b;e=j-l.a;f=k-l.b;i=new rjd(l.a,l.b);wid(i,h.g,h.f);l.a-=i.a;l.b-=i.b;j=e+l.a;k=f+l.b;m=j-e;n=k-f;d+=$wnd.Math.sqrt(m*m+n*n)}return d};var D0=sfb(lFe,'EdgeLengthOptimization',1840);feb(1841,1,{},M3c);_.Dg=function N3c(a){var b,c,d,e,f,g,h,i,j,k,l;d=0;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);h=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));i=h.i+h.g/2;j=h.j+h.f/2;e=RD(Gxd(h,(umd(),Qld)),8);f=a.i+e.a+a.g/2;g=a.j+e.b+a.f;k=i-f;l=j-g;d+=$wnd.Math.sqrt(k*k+l*l)}return d};var E0=sfb(lFe,'EdgeLengthPositionOptimization',1841);feb(1392,653,QAe,Q3c);_.Kf=function R3c(a,b){P3c(this,RD(a,27),b)};var F0=sfb('org.eclipse.elk.alg.radial.intermediate.overlaps','RadiusExtensionOverlapRemoval',1392);feb(1394,1,QAe,U3c);_.Kf=function V3c(a,b){T3c(RD(a,27),b)};var G0=sfb('org.eclipse.elk.alg.radial.intermediate.rotation','GeneralRotator',1394);feb(434,22,{3:1,34:1,22:1,434:1},$3c);var W3c,X3c;var H0=tfb(nFe,'AnnulusWedgeCriteria',434,WI,a4c,_3c);var b4c;feb(393,22,{3:1,34:1,22:1,393:1},i4c);var d4c,e4c,f4c;var I0=tfb(nFe,uze,393,WI,k4c,j4c);var l4c;feb(863,1,Eye,E4c);_.hf=function F4c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oFe),''),'Center On Root'),'Centers the layout on the root of the tree i.e. so that the central node is also the center node of the final layout. This introduces additional whitespace.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pFe),''),'Order ID'),'The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly.'),sgb(0)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qFe),''),'Radius'),'The radius option can be used to set the initial radius for the radial layouter.'),0),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rFe),''),'Rotate'),'The rotate option determines whether a rotation of the layout should be performed.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,sFe),''),AFe),'With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately.'),q4c),eid),I0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,tFe),''),'Compaction Step Size'),'Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration.'),sgb(1)),gid),bJ),xsb(Whd))));zgd(a,tFe,sFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,uFe),''),'Sorter'),'Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates.'),A4c),eid),N0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vFe),''),'Annulus Wedge Criteria'),'Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals.'),C4c),eid),H0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,wFe),''),'Translation Optimization'),'Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized.'),s4c),eid),M0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xFe),BFe),'Target Angle'),'The angle in radians that the layout should be rotated to after layout.'),0),did),VI),xsb(Whd))));zgd(a,xFe,rFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yFe),BFe),'Additional Wedge Space'),'If set to true, modifies the target angle by rotating further such that space is left for an edge to pass in between the nodes. This option should only be used in conjunction with top-down layout.'),false),cid),QI),xsb(Whd))));zgd(a,yFe,rFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zFe),BFe),'Outgoing Edge Angles'),'Calculate the required angle of connected nodes to leave space for an incoming edge. This option should only be used in conjunction with top-down layout.'),false),cid),QI),xsb(Whd))));_4c((new a5c,a))};var n4c,o4c,p4c,q4c,r4c,s4c,t4c,u4c,v4c,w4c,x4c,y4c,z4c,A4c,B4c,C4c;var J0=sfb(nFe,'RadialMetaDataProvider',863);feb(1008,1,Eye,a5c);_.hf=function b5c(a){_4c(a)};var G4c,H4c,I4c,J4c,K4c,L4c,M4c,N4c,O4c,P4c,Q4c,R4c,S4c,T4c,U4c,V4c,W4c,X4c,Y4c,Z4c;var L0=sfb(nFe,'RadialOptions',1008);feb(1009,1,{},c5c);_.sf=function d5c(){var a;return a=new H2c,a};_.tf=function e5c(a){};var K0=sfb(nFe,'RadialOptions/RadialFactory',1009);feb(354,22,{3:1,34:1,22:1,354:1},l5c);var f5c,g5c,h5c,i5c;var M0=tfb(nFe,'RadialTranslationStrategy',354,WI,n5c,m5c);var o5c;feb(299,22,{3:1,34:1,22:1,299:1},v5c);var q5c,r5c,s5c;var N0=tfb(nFe,'SortingStrategy',299,WI,x5c,w5c);var y5c;feb(1476,1,nEe,D5c);_.rg=function E5c(a){return RD(a,27),null};_.Kf=function F5c(a,b){B5c(this,RD(a,27),b)};_.c=0;var O0=sfb('org.eclipse.elk.alg.radial.p1position','EadesRadial',1476);feb(1838,1,{},G5c);_.Eg=function H5c(a){return O2c(a)};var P0=sfb(DFe,'AnnulusWedgeByLeafs',1838);feb(1839,1,{},J5c);_.Eg=function K5c(a){return I5c(this,a)};var Q0=sfb(DFe,'AnnulusWedgeByNodeSpace',1839);feb(1477,1,nEe,N5c);_.rg=function O5c(a){return RD(a,27),null};_.Kf=function P5c(a,b){L5c(this,RD(a,27),b)};var R0=sfb('org.eclipse.elk.alg.radial.p2routing','StraightLineEdgeRouter',1477);feb(826,1,{},R5c);_.Fg=function S5c(a){};_.Gg=function U5c(a){Q5c(this,a)};var T0=sfb(EFe,'IDSorter',826);feb(1837,1,fye,V5c);_.Ne=function W5c(a,b){return T5c(RD(a,27),RD(b,27))};_.Fb=function X5c(a){return this===a};_.Oe=function Y5c(){return new Frb(this)};var S0=sfb(EFe,'IDSorter/lambda$0$Type',1837);feb(1836,1,{},_5c);_.Fg=function a6c(a){Z5c(this,a)};_.Gg=function b6c(a){var b;if(!a.dc()){if(!this.e){b=L2c(RD(a.Xb(0),27));Z5c(this,b)}Q5c(this.e,a)}};var U0=sfb(EFe,'PolarCoordinateSorter',1836);feb(445,22,{3:1,34:1,22:1,445:1},g6c);var c6c,d6c,e6c;var V0=tfb(IFe,'RectPackingLayoutPhases',445,WI,i6c,h6c);var j6c;feb(1118,205,oze,l6c);_.rf=function n6c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;b.Ug('Rectangle Packing',1);k=RD(Gxd(a,(X7c(),N7c)),107);h=Heb(TD(Gxd(a,G7c)));j=Kfb(UD(Gxd(a,Q7c)));u=Heb(TD(Gxd(a,R7c)));o=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);t=false;if(u&&o.i>=3){q=RD(QHd(o,0),27);r=RD(QHd(o,1),27);e=0;while(e+2<o.i){p=q;q=r;r=RD(QHd(o,e+2),27);if(p.f>=q.f+r.f+j||r.f>=p.f+q.f+j){t=true;break}else{++e}}}else{t=true}if(!t){l=o.i;for(g=new dMd(o);g.e!=g.i.gc();){f=RD(bMd(g),27);Ixd(f,(umd(),Rld),sgb(l));--l}crd(a,new Oqd);b.Vg();return}c=(Sed(this.a),Ved(this.a,(f6c(),c6c),RD(Gxd(a,V7c),188)),Ved(this.a,d6c,RD(Gxd(a,M7c),188)),Ved(this.a,e6c,RD(Gxd(a,S7c),188)),Ped(this.a,(v=new ufd,pfd(v,c6c,(z6c(),y6c)),pfd(v,d6c,x6c),Heb(TD(Gxd(a,B7c)))&&pfd(v,c6c,w6c),v)),Qed(this.a,a));i=1/c.c.length;s=0;for(n=new Anb(c);n.a<n.c.c.length;){m=RD(ynb(n),47);if(b.$g()){return}m.Kf(a,b.eh(i));++s}m6c(o,k);h||Esd(a,Kfb(UD(Gxd(a,(X6c(),O6c))))+(k.b+k.c),Kfb(UD(Gxd(a,N6c)))+(k.d+k.a),false,true);Heb(TD(Gxd(a,J7c)))||RFb((d=new SFb((lud(),new zud(a))),d));b.Vg()};var W0=sfb(IFe,'RectPackingLayoutProvider',1118);feb(1518,1,QAe,p6c);_.Kf=function r6c(a,b){o6c(RD(a,27),b)};var Y0=sfb(JFe,'InteractiveNodeReorderer',1518);feb(1519,1,fye,s6c);_.Ne=function t6c(a,b){return q6c(RD(a,27),RD(b,27))};_.Fb=function u6c(a){return this===a};_.Oe=function v6c(){return new Frb(this)};var X0=sfb(JFe,'InteractiveNodeReorderer/lambda$0$Type',1519);feb(455,22,{3:1,34:1,22:1,455:1,196:1},A6c);_.dg=function B6c(){switch(this.g){case 0:return new p6c;case 1:return new K6c;case 2:return new H6c;}return null};var w6c,x6c,y6c;var Z0=tfb(JFe,mBe,455,WI,D6c,C6c);var E6c;feb(1521,1,QAe,H6c);_.Kf=function I6c(a,b){G6c(RD(a,27),b)};var $0=sfb(JFe,'MinSizePostProcessor',1521);feb(1520,1,QAe,K6c);_.Kf=function L6c(a,b){J6c(RD(a,27),b)};var _0=sfb(JFe,'MinSizePreProcessor',1520);var M6c,N6c,O6c,P6c,Q6c,R6c,S6c,T6c,U6c,V6c,W6c;feb(394,22,{3:1,34:1,22:1,394:1},a7c);var Y6c,Z6c,$6c;var a1=tfb(KFe,'OptimizationGoal',394,WI,c7c,b7c);var d7c;feb(867,1,Eye,v7c);_.hf=function w7c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LFe),''),'Try box layout first'),'Whether one should check whether the regions are stackable to see whether box layout would do the job. For example, nodes with the same height are not stackable inside a row. Therefore, box layout will perform better and faster.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MFe),''),'Current position of a node in the order of nodes'),'The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NFe),''),'Desired index of node'),'The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OFe),''),'In new Row'),'If set to true this node begins in a new row. Consequently this node cannot be moved in a previous layer during compaction. Width approximation does does not take this into account.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PFe),XFe),'Width Approximation Strategy'),'Strategy for finding an initial width of the drawing.'),s7c),eid),l1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QFe),XFe),'Target Width'),'Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding.'),-1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RFe),XFe),'Optimization Goal'),'Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored.'),q7c),eid),a1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SFe),XFe),'Shift Last Placed.'),'When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TFe),'packing'),YFe),'Strategy for finding an initial placement on nodes.'),l7c),eid),o1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UFe),ZFe),'Row Height Reevaluation'),'During the compaction step the height of a row is normally not changed. If this options is set, the blocks of other rows might be added if they exceed the row height. If this is the case the whole row has to be packed again to be optimal regarding the new row height. This option should, therefore, be used with care since it might be computation heavy.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VFe),ZFe),'Compaction iterations'),'Defines the number of compaction iterations. E.g. if set to 2 the width is initially approximated, then the drawing is compacted and based on the resulting drawing the target width is decreased or increased and a second compaction step is executed and the result compared to the first one. The best run is used based on the scale measure.'),sgb(1)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,WFe),'whiteSpaceElimination'),'White Space Approximation Strategy'),'Strategy for expanding nodes such that whitespace in the parent is eliminated.'),eid),t1),xsb(Whd))));Y7c((new Z7c,a))};var f7c,g7c,h7c,i7c,j7c,k7c,l7c,m7c,n7c,o7c,p7c,q7c,r7c,s7c,t7c;var b1=sfb(KFe,'RectPackingMetaDataProvider',867);feb(1016,1,Eye,Z7c);_.hf=function $7c(a){Y7c(a)};var x7c,y7c,z7c,A7c,B7c,C7c,D7c,E7c,F7c,G7c,H7c,I7c,J7c,K7c,L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var d1=sfb(KFe,'RectPackingOptions',1016);feb(1017,1,{},_7c);_.sf=function a8c(){var a;return a=new l6c,a};_.tf=function b8c(a){};var c1=sfb(KFe,'RectPackingOptions/RectpackingFactory',1017);feb(1705,1,{},g8c);_.a=0;_.c=false;var e1=sfb(_Fe,'AreaApproximation',1705);var h1=ufb(_Fe,'BestCandidateFilter');feb(673,1,{535:1},h8c);_.Hg=function i8c(a,b,c){var d,e,f,g,h,i;i=new bnb;f=oxe;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),238);f=$wnd.Math.min(f,(g.c+(c.b+c.c))*(g.b+(c.d+c.a)))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);(d.c+(c.b+c.c))*(d.b+(c.d+c.a))==f&&(ZEb(i.c,d),true)}return i};var f1=sfb(_Fe,'AreaFilter',673);feb(674,1,{535:1},j8c);_.Hg=function k8c(a,b,c){var d,e,f,g,h,i;h=new bnb;i=oxe;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),238);i=$wnd.Math.min(i,$wnd.Math.abs((f.c+(c.b+c.c))/(f.b+(c.d+c.a))-b))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);$wnd.Math.abs((d.c+(c.b+c.c))/(d.b+(c.d+c.a))-b)==i&&(ZEb(h.c,d),true)}return h};var g1=sfb(_Fe,'AspectRatioFilter',674);feb(1469,1,nEe,o8c);_.rg=function p8c(a){return RD(a,27),null};_.Kf=function q8c(a,b){n8c(RD(a,27),b)};var i1=sfb(_Fe,'GreedyWidthApproximator',1469);feb(672,1,{535:1},r8c);_.Hg=function s8c(a,b,c){var d,e,f,g,h,i;i=new bnb;f=pxe;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),238);f=$wnd.Math.max(f,Aad(g.c+(c.b+c.c),g.b+(c.d+c.a),g.a))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);Aad(d.c+(c.b+c.c),d.b+(c.d+c.a),d.a)==f&&(ZEb(i.c,d),true)}return i};var j1=sfb(_Fe,'ScaleMeasureFilter',672);feb(1470,1,nEe,u8c);_.rg=function v8c(a){return RD(a,27),null};_.Kf=function w8c(a,b){t8c(RD(a,27),b)};var k1=sfb(_Fe,'TargetWidthWidthApproximator',1470);feb(490,22,{3:1,34:1,22:1,490:1,188:1,196:1},B8c);_.dg=function D8c(){return A8c(this)};_.qg=function C8c(){return A8c(this)};var x8c,y8c;var l1=tfb(_Fe,'WidthApproximationStrategy',490,WI,F8c,E8c);var G8c;feb(1471,1,nEe,R8c);_.rg=function S8c(a){return RD(a,27),null};_.Kf=function T8c(a,b){Q8c(this,RD(a,27),b)};var m1=sfb(aGe,'Compactor',1471);feb(1473,1,nEe,X8c);_.rg=function Y8c(a){return RD(a,27),null};_.Kf=function Z8c(a,b){W8c(RD(a,27),b)};var n1=sfb(aGe,'NoPlacement',1473);feb(439,22,{3:1,34:1,22:1,439:1,188:1,196:1},d9c);_.dg=function f9c(){return c9c(this)};_.qg=function e9c(){return c9c(this)};var $8c,_8c,a9c;var o1=tfb(aGe,'PackingStrategy',439,WI,h9c,g9c);var i9c;feb(810,1,{},m9c);_.a=0;_.b=0;_.c=0;_.d=oxe;_.e=0;_.f=oxe;var p1=sfb(aGe,'RowFillingAndCompaction',810);feb(1472,1,nEe,o9c);_.rg=function p9c(a){return RD(a,27),null};_.Kf=function q9c(a,b){n9c(RD(a,27),b)};var q1=sfb(aGe,'SimplePlacement',1472);feb(1474,1,nEe,s9c);_.rg=function t9c(a){return RD(a,27),null};_.Kf=function u9c(a,b){this.Ig(RD(a,27),b)};_.Ig=function v9c(a,b){r9c(a,b)};var r1=sfb(cGe,'EqualWhitespaceEliminator',1474);feb(1475,1474,nEe,x9c);_.Ig=function y9c(a,b){var c,d,e,f,g;b.Ug('To Aspect Ratio Whitesapce Eliminator',1);g=Kfb(UD(Gxd(a,(X6c(),O6c))));f=Kfb(UD(Gxd(a,N6c)));e=Kfb(UD(Gxd(a,(X7c(),x7c))));c=Kfb(UD(Gxd(a,M6c)));d=g/f;if(d<e){g=f*e;Ixd(a,O6c,g)}else{c+=g/e-f;Ixd(a,M6c,c);Ixd(a,N6c,f+c)}r9c(a,b);b.Vg()};var s1=sfb(cGe,'ToAspectratioNodeExpander',1475);feb(491,22,{3:1,34:1,22:1,491:1,188:1,196:1},D9c);_.dg=function F9c(){return C9c(this)};_.qg=function E9c(){return C9c(this)};var z9c,A9c;var t1=tfb(cGe,'WhiteSpaceEliminationStrategy',491,WI,H9c,G9c);var I9c;feb(172,1,{172:1},V9c);_.a=0;_.c=false;_.d=0;_.e=0;_.f=0;_.g=0;_.i=0;_.k=false;_.o=oxe;_.p=oxe;_.r=0;_.s=0;_.t=0;var w1=sfb(dGe,'Block',172);feb(209,1,{209:1},_9c);_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var u1=sfb(dGe,'BlockRow',209);feb(315,1,{315:1},had);_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;var v1=sfb(dGe,'BlockStack',315);feb(238,1,{238:1},lad,mad);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.g=0;var y1=sfb(dGe,'DrawingData',238);feb(373,22,{3:1,34:1,22:1,373:1},tad);var nad,oad,pad,qad,rad;var x1=tfb(dGe,'DrawingDataDescriptor',373,WI,vad,uad);var wad;feb(186,1,{186:1},Had);_.b=0;_.c=0;_.e=0;_.f=0;var z1=sfb(dGe,'RectRow',186);feb(763,1,{},Pad);_.j=0;var F1=sfb(fGe,dBe,763);feb(1209,1,{},Qad);_.af=function Rad(a){return bjd(a.a,a.b)};var A1=sfb(fGe,Nze,1209);feb(1210,1,{},Sad);_.af=function Tad(a){return Kad(this.a,a)};var B1=sfb(fGe,eBe,1210);feb(1211,1,{},Uad);_.af=function Vad(a){return Lad(this.a,a)};var C1=sfb(fGe,fBe,1211);feb(1212,1,{},Wad);_.af=function Xad(a){return Mad(this.a,a)};var D1=sfb(fGe,'ElkGraphImporter/lambda$3$Type',1212);feb(1213,1,{},Yad);_.af=function Zad(a){return Nad(this.a,a)};var E1=sfb(fGe,gBe,1213);feb(1115,205,oze,$ad);_.rf=function abd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(Hxd(a,(ncd(),mcd))){n=WD(Gxd(a,(Tcd(),Scd)));f=sgd(ygd(),n);if(f){g=RD(ltd(f.f),205);g.rf(a,b.eh(1))}}Ixd(a,hcd,(Mbd(),Kbd));Ixd(a,icd,(Xbd(),Ubd));Ixd(a,jcd,(ldd(),kdd));h=RD(Gxd(a,(Tcd(),Ocd)),17).a;b.Ug('Overlap removal',1);Heb(TD(Gxd(a,Ncd)))&&'null45scanlineOverlaps';i=new _sb;j=new cbd(i);d=new Pad;c=Jad(d,a);k=true;e=0;while(e<h&&k){if(Heb(TD(Gxd(a,Pcd)))){i.a.$b();VQb(new WQb(j),c.i);if(i.a.gc()==0){break}c.e=i}Sed(this.b);Ved(this.b,(gbd(),dbd),(_cd(),$cd));Ved(this.b,ebd,c.g);Ved(this.b,fbd,(Cbd(),Bbd));this.a=Qed(this.b,c);for(m=new Anb(this.a);m.a<m.c.c.length;){l=RD(ynb(m),47);l.Kf(c,b.eh(1))}Oad(d,c);k=Heb(TD(mQb(c,(OQb(),NQb))));++e}Iad(d,c);b.Vg()};var H1=sfb(fGe,'OverlapRemovalLayoutProvider',1115);feb(1116,1,{},cbd);var G1=sfb(fGe,'OverlapRemovalLayoutProvider/lambda$0$Type',1116);feb(444,22,{3:1,34:1,22:1,444:1},hbd);var dbd,ebd,fbd;var I1=tfb(fGe,'SPOrEPhases',444,WI,jbd,ibd);var kbd;feb(1219,1,{},nbd);var K1=sfb(fGe,'ShrinkTree',1219);feb(1117,205,oze,obd);_.rf=function pbd(a,b){var c,d,e,f,g;if(Hxd(a,(ncd(),mcd))){g=WD(Gxd(a,mcd));e=sgd(ygd(),g);if(e){f=RD(ltd(e.f),205);f.rf(a,b.eh(1))}}d=new Pad;c=Jad(d,a);mbd(this.a,c,b.eh(1));Iad(d,c)};var J1=sfb(fGe,'ShrinkTreeLayoutProvider',1117);feb(305,137,{3:1,305:1,96:1,137:1},qbd);_.c=false;var L1=sfb('org.eclipse.elk.alg.spore.graph','Graph',305);feb(489,22,{3:1,34:1,22:1,489:1,188:1,196:1},ubd);_.dg=function wbd(){return tbd(this)};_.qg=function vbd(){return tbd(this)};var rbd;var M1=tfb(gGe,uze,489,WI,ybd,xbd);var zbd;feb(558,22,{3:1,34:1,22:1,558:1,188:1,196:1},Dbd);_.dg=function Fbd(){return new Tdd};_.qg=function Ebd(){return new Tdd};var Bbd;var N1=tfb(gGe,'OverlapRemovalStrategy',558,WI,Hbd,Gbd);var Ibd;feb(438,22,{3:1,34:1,22:1,438:1},Nbd);var Kbd,Lbd;var O1=tfb(gGe,'RootSelection',438,WI,Pbd,Obd);var Qbd;feb(324,22,{3:1,34:1,22:1,324:1},Ybd);var Sbd,Tbd,Ubd,Vbd,Wbd;var P1=tfb(gGe,'SpanningTreeCostFunction',324,WI,$bd,Zbd);var _bd;feb(1014,1,Eye,pcd);_.hf=function qcd(a){ocd(a)};var bcd,ccd,dcd,ecd,fcd,gcd,hcd,icd,jcd,kcd,lcd,mcd;var R1=sfb(gGe,'SporeCompactionOptions',1014);feb(1015,1,{},rcd);_.sf=function scd(){var a;return a=new obd,a};_.tf=function tcd(a){};var Q1=sfb(gGe,'SporeCompactionOptions/SporeCompactionFactory',1015);feb(866,1,Eye,Lcd);_.hf=function Mcd(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,iGe),''),'Underlying Layout Algorithm'),'A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction.'),(kid(),iid)),qJ),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nGe),'structure'),'Structure Extraction Strategy'),'This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices.'),Icd),eid),V1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jGe),sGe),'Tree Construction Strategy'),'Whether a minimum spanning tree or a maximum spanning tree should be constructed.'),Gcd),eid),W1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kGe),sGe),'Cost Function for Spanning Tree'),'The cost function is used in the creation of the spanning tree.'),Ecd),eid),P1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,lGe),sGe),'Root node for spanning tree construction'),'The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen.'),null),iid),qJ),xsb(Whd))));zgd(a,lGe,mGe,Acd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mGe),sGe),'Root selection for spanning tree'),'This sets the method used to select a root node for the construction of a spanning tree'),Ccd),eid),O1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oGe),nDe),YFe),'This option defines how the compaction is applied.'),vcd),eid),M1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pGe),nDe),'Orthogonal Compaction'),'Restricts the translation of nodes to orthogonal directions in the compaction phase.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qGe),tGe),'Upper limit for iterations of overlap removal'),null),sgb(64)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rGe),tGe),'Whether to run a supplementary scanline overlap check.'),null),true),cid),QI),xsb(Whd))));Ucd((new Vcd,a));ocd((new pcd,a))};var ucd,vcd,wcd,xcd,ycd,zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd;var S1=sfb(gGe,'SporeMetaDataProvider',866);feb(1012,1,Eye,Vcd);_.hf=function Wcd(a){Ucd(a)};var Ncd,Ocd,Pcd,Qcd,Rcd,Scd;var U1=sfb(gGe,'SporeOverlapRemovalOptions',1012);feb(1013,1,{},Xcd);_.sf=function Ycd(){var a;return a=new $ad,a};_.tf=function Zcd(a){};var T1=sfb(gGe,'SporeOverlapRemovalOptions/SporeOverlapFactory',1013);feb(539,22,{3:1,34:1,22:1,539:1,188:1,196:1},cdd);_.dg=function edd(){return bdd(this)};_.qg=function ddd(){return bdd(this)};var $cd;var V1=tfb(gGe,'StructureExtractionStrategy',539,WI,gdd,fdd);var hdd;feb(437,22,{3:1,34:1,22:1,437:1,188:1,196:1},ndd);_.dg=function pdd(){return mdd(this)};_.qg=function odd(){return mdd(this)};var jdd,kdd;var W1=tfb(gGe,'TreeConstructionStrategy',437,WI,rdd,qdd);var sdd;feb(1463,1,nEe,vdd);_.rg=function wdd(a){return RD(a,305),new ufd};_.Kf=function xdd(a,b){udd(RD(a,305),b)};var Y1=sfb(vGe,'DelaunayTriangulationPhase',1463);feb(1464,1,Qve,ydd);_.Cd=function zdd(a){Rmb(this.a,RD(a,68).a)};var X1=sfb(vGe,'DelaunayTriangulationPhase/lambda$0$Type',1464);feb(794,1,nEe,Ddd);_.rg=function Edd(a){return RD(a,305),new ufd};_.Kf=function Fdd(a,b){this.Jg(RD(a,305),b)};_.Jg=function Gdd(a,b){var c,d,e;b.Ug('Minimum spanning tree construction',1);a.d?(d=a.d.a):(d=RD(Vmb(a.i,0),68).a);Heb(TD(mQb(a,(OQb(),MQb))))?(e=LFb(a.e,d,(c=a.b,c))):(e=LFb(a.e,d,a.b));Bdd(this,e,a);b.Vg()};var a2=sfb(wGe,'MinSTPhase',794);feb(1466,794,nEe,Hdd);_.Jg=function Jdd(a,b){var c,d,e,f;b.Ug('Maximum spanning tree construction',1);c=new Kdd(a);a.d?(e=a.d.c):(e=RD(Vmb(a.i,0),68).c);Heb(TD(mQb(a,(OQb(),MQb))))?(f=LFb(a.e,e,(d=c,d))):(f=LFb(a.e,e,c));Bdd(this,f,a);b.Vg()};var $1=sfb(wGe,'MaxSTPhase',1466);feb(1467,1,{},Kdd);_.af=function Ldd(a){return Idd(this.a,a)};var Z1=sfb(wGe,'MaxSTPhase/lambda$0$Type',1467);feb(1465,1,Qve,Mdd);_.Cd=function Ndd(a){Cdd(this.a,RD(a,68))};var _1=sfb(wGe,'MinSTPhase/lambda$0$Type',1465);feb(796,1,nEe,Tdd);_.rg=function Udd(a){return RD(a,305),new ufd};_.Kf=function Vdd(a,b){Sdd(this,RD(a,305),b)};_.a=false;var c2=sfb(xGe,'GrowTreePhase',796);feb(797,1,Qve,Wdd);_.Cd=function Xdd(a){Rdd(this.a,this.b,this.c,RD(a,225))};var b2=sfb(xGe,'GrowTreePhase/lambda$0$Type',797);feb(1468,1,nEe,_dd);_.rg=function aed(a){return RD(a,305),new ufd};_.Kf=function bed(a,b){$dd(this,RD(a,305),b)};var e2=sfb(xGe,'ShrinkTreeCompactionPhase',1468);feb(795,1,Qve,ced);_.Cd=function ded(a){Zdd(this.a,this.b,this.c,RD(a,225))};var d2=sfb(xGe,'ShrinkTreeCompactionPhase/lambda$0$Type',795);var j4=ufb(jEe,'IGraphElementVisitor');feb(872,1,{536:1},med);_.Kg=function ped(a){var b;b=led(this,a);kQb(b,RD(Wjb(this.b,a),96));jed(this,a,b)};var eed,fed,ged;var l2=sfb(pze,'LayoutConfigurator',872);var g2=ufb(pze,'LayoutConfigurator/IPropertyHolderOptionFilter');feb(944,1,{2032:1},qed);_.Lg=function red(a,b){return hed(),!a.pf(b)};var h2=sfb(pze,'LayoutConfigurator/lambda$0$Type',944);feb(943,1,{845:1},sed);_.Mg=function ted(a,b){return hed(),!a.pf(b)};var i2=sfb(pze,'LayoutConfigurator/lambda$1$Type',943);feb(945,1,{2032:1},ved);_.Lg=function wed(a,b){return ued(a,b)};var j2=sfb(pze,'LayoutConfigurator/lambda$2$Type',945);feb(946,1,nwe,xed);_.Mb=function yed(a){return oed(this.a,this.b,RD(a,2032))};var k2=sfb(pze,'LayoutConfigurator/lambda$3$Type',946);feb(869,1,{},Hed);var m2=sfb(pze,'RecursiveGraphLayoutEngine',869);feb(224,63,swe,Ied,Jed);var n2=sfb(pze,'UnsupportedConfigurationException',224);feb(370,63,swe,Ked);var o2=sfb(pze,'UnsupportedGraphException',370);feb(761,1,{});var N3=sfb(jEe,'AbstractRandomListAccessor',761);feb(449,761,{},Wed);_.Ng=function Yed(){return null};_.d=true;_.e=true;_.f=0;var u2=sfb(AGe,'AlgorithmAssembler',449);feb(1200,1,nwe,Zed);_.Mb=function $ed(a){return !!RD(a,106)};var p2=sfb(AGe,'AlgorithmAssembler/lambda$0$Type',1200);feb(1201,1,{},_ed);_.Kb=function afd(a){return Xed(this.a,RD(a,106))};var q2=sfb(AGe,'AlgorithmAssembler/lambda$1$Type',1201);feb(1202,1,nwe,bfd);_.Mb=function cfd(a){return !!RD(a,80)};var r2=sfb(AGe,'AlgorithmAssembler/lambda$2$Type',1202);feb(1203,1,Qve,dfd);_.Cd=function efd(a){ofd(this.a,RD(a,80))};var s2=sfb(AGe,'AlgorithmAssembler/lambda$3$Type',1203);feb(1204,1,Qve,ffd);_.Cd=function gfd(a){Red(this.a,this.b,RD(a,196))};var t2=sfb(AGe,'AlgorithmAssembler/lambda$4$Type',1204);feb(1343,1,fye,ifd);_.Ne=function jfd(a,b){return hfd(RD(a,196),RD(b,196))};_.Fb=function kfd(a){return this===a};_.Oe=function lfd(){return new Frb(this)};var v2=sfb(AGe,'EnumBasedFactoryComparator',1343);feb(80,761,{80:1},ufd);_.Ng=function wfd(){return new _sb};_.a=0;var w2=sfb(AGe,'LayoutProcessorConfiguration',80);feb(1025,1,{536:1},Bfd);_.Kg=function Ffd(a){Bvb(yfd,new Kfd(a))};var xfd,yfd,zfd;var A2=sfb(zye,'DeprecatedLayoutOptionReplacer',1025);feb(1026,1,Qve,Gfd);_.Cd=function Hfd(a){Cfd(RD(a,167))};var x2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$0$Type',1026);feb(1027,1,Qve,Ifd);_.Cd=function Jfd(a){Dfd(RD(a,167))};var y2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$1$Type',1027);feb(1028,1,{},Kfd);_.Yd=function Lfd(a,b){Efd(this.a,RD(a,149),RD(b,41))};var z2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$2$Type',1028);feb(143,1,{701:1,143:1},Pfd);_.Fb=function Qfd(a){return Nfd(this,a)};_.Og=function Rfd(){return this.b};_.Pg=function Sfd(){return this.c};_.xe=function Tfd(){return this.e};_.Hb=function Ufd(){return ohb(this.c)};_.Ib=function Vfd(){return 'Layout Algorithm: '+this.c};var D2=sfb(zye,'LayoutAlgorithmData',143);feb(269,1,{},agd);var C2=sfb(zye,'LayoutAlgorithmData/Builder',269);feb(1029,1,{536:1},dgd);_.Kg=function egd(a){ZD(a,207)&&!Heb(TD(a.of((umd(),rld))))&&bgd(RD(a,27))};var E2=sfb(zye,'LayoutAlgorithmResolver',1029);feb(233,1,{701:1,233:1},fgd);_.Fb=function ggd(a){if(ZD(a,233)){return lhb(this.b,RD(a,233).b)}return false};_.Og=function hgd(){return this.a};_.Pg=function igd(){return this.b};_.xe=function jgd(){return this.d};_.Hb=function kgd(){return ohb(this.b)};_.Ib=function lgd(){return 'Layout Type: '+this.b};var G2=sfb(zye,'LayoutCategoryData',233);feb(357,1,{},pgd);var F2=sfb(zye,'LayoutCategoryData/Builder',357);feb(879,1,{},xgd);var qgd;var b3=sfb(zye,'LayoutMetaDataService',879);feb(880,1,{},Ggd);var I2=sfb(zye,'LayoutMetaDataService/Registry',880);feb(486,1,{486:1},Hgd);var H2=sfb(zye,'LayoutMetaDataService/Registry/Triple',486);feb(881,1,BGe,Igd);_.Qg=function Jgd(){return new pjd};var J2=sfb(zye,'LayoutMetaDataService/lambda$0$Type',881);feb(882,1,CGe,Kgd);_.Rg=function Lgd(a){return ajd(RD(a,8))};var K2=sfb(zye,'LayoutMetaDataService/lambda$1$Type',882);feb(891,1,BGe,Mgd);_.Qg=function Ngd(){return new bnb};var L2=sfb(zye,'LayoutMetaDataService/lambda$10$Type',891);feb(892,1,CGe,Ogd);_.Rg=function Pgd(a){return new dnb(RD(a,13))};var M2=sfb(zye,'LayoutMetaDataService/lambda$11$Type',892);feb(893,1,BGe,Qgd);_.Qg=function Rgd(){return new Yub};var N2=sfb(zye,'LayoutMetaDataService/lambda$12$Type',893);feb(894,1,CGe,Sgd);_.Rg=function Tgd(a){return gv(RD(a,67))};var O2=sfb(zye,'LayoutMetaDataService/lambda$13$Type',894);feb(895,1,BGe,Ugd);_.Qg=function Vgd(){return new _sb};var P2=sfb(zye,'LayoutMetaDataService/lambda$14$Type',895);feb(896,1,CGe,Wgd);_.Rg=function Xgd(a){return Ux(RD(a,49))};var Q2=sfb(zye,'LayoutMetaDataService/lambda$15$Type',896);feb(897,1,BGe,Ygd);_.Qg=function Zgd(){return new Iub};var R2=sfb(zye,'LayoutMetaDataService/lambda$16$Type',897);feb(898,1,CGe,$gd);_.Rg=function _gd(a){return Xx(RD(a,49))};var S2=sfb(zye,'LayoutMetaDataService/lambda$17$Type',898);feb(899,1,BGe,ahd);_.Qg=function bhd(){return new xAb};var T2=sfb(zye,'LayoutMetaDataService/lambda$18$Type',899);feb(900,1,CGe,chd);_.Rg=function dhd(a){return Yx(RD(a,157))};var U2=sfb(zye,'LayoutMetaDataService/lambda$19$Type',900);feb(883,1,BGe,ehd);_.Qg=function fhd(){return new Ejd};var V2=sfb(zye,'LayoutMetaDataService/lambda$2$Type',883);feb(884,1,CGe,ghd);_.Rg=function hhd(a){return new Fjd(RD(a,75))};var W2=sfb(zye,'LayoutMetaDataService/lambda$3$Type',884);feb(885,1,BGe,ihd);_.Qg=function jhd(){return new P2b};var X2=sfb(zye,'LayoutMetaDataService/lambda$4$Type',885);feb(886,1,CGe,khd);_.Rg=function lhd(a){return new S2b(RD(a,140))};var Y2=sfb(zye,'LayoutMetaDataService/lambda$5$Type',886);feb(887,1,BGe,mhd);_.Qg=function nhd(){return new z3b};var Z2=sfb(zye,'LayoutMetaDataService/lambda$6$Type',887);feb(888,1,CGe,ohd);_.Rg=function phd(a){return new B3b(RD(a,107))};var $2=sfb(zye,'LayoutMetaDataService/lambda$7$Type',888);feb(889,1,BGe,qhd);_.Qg=function rhd(){return new dtd};var _2=sfb(zye,'LayoutMetaDataService/lambda$8$Type',889);feb(890,1,CGe,shd);_.Rg=function thd(a){return new etd(RD(a,385))};var a3=sfb(zye,'LayoutMetaDataService/lambda$9$Type',890);var V5=ufb(jze,'IProperty');feb(23,1,{34:1,701:1,23:1,149:1},Ahd);_.Fd=function Bhd(a){return vhd(this,RD(a,149))};_.Fb=function Chd(a){return ZD(a,23)?lhb(this.f,RD(a,23).f):ZD(a,149)&&lhb(this.f,RD(a,149).Pg())};_.Sg=function Dhd(){var a;if(ZD(this.b,4)){a=FId(this.b);if(a==null){throw Adb(new dgb(HGe+this.f+"'. "+"Make sure it's type is registered with the "+(lfb(b6),b6.k)+EGe))}return a}else{return this.b}};_.Og=function Ehd(){return this.d};_.Pg=function Fhd(){return this.f};_.xe=function Ghd(){return this.i};_.Hb=function Hhd(){return ohb(this.f)};_.Ib=function Ihd(){return 'Layout Option: '+this.f};var f3=sfb(zye,'LayoutOptionData',23);feb(24,1,{},Shd);var c3=sfb(zye,'LayoutOptionData/Builder',24);feb(170,22,{3:1,34:1,22:1,170:1},Zhd);var Thd,Uhd,Vhd,Whd,Xhd;var d3=tfb(zye,'LayoutOptionData/Target',170,WI,_hd,$hd);var aid;feb(285,22,{3:1,34:1,22:1,285:1},lid);var cid,did,eid,fid,gid,hid,iid,jid;var e3=tfb(zye,'LayoutOptionData/Type',285,WI,nid,mid);var oid;var qid;var sid;feb(116,1,{116:1},Tid,Uid,Vid);_.Fb=function Wid(a){var b;if(a==null||!ZD(a,116)){return false}b=RD(a,116);return Fvb(this.c,b.c)&&Fvb(this.d,b.d)&&Fvb(this.b,b.b)&&Fvb(this.a,b.a)};_.Hb=function Xid(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.c,this.d,this.b,this.a]))};_.Ib=function Yid(){return 'Rect[x='+this.c+',y='+this.d+',w='+this.b+',h='+this.a+']'};_.a=0;_.b=0;_.c=0;_.d=0;var j3=sfb(_Ae,'ElkRectangle',116);feb(8,1,{3:1,4:1,8:1,423:1},pjd,qjd,rjd,sjd);_.Fb=function tjd(a){return djd(this,a)};_.Hb=function ujd(){return Nfb(this.a)+pgb(Nfb(this.b))};_.cg=function wjd(b){var c,d,e,f;e=0;while(e<b.length&&vjd((BFb(e,b.length),b.charCodeAt(e)),YAe)){++e}c=b.length;while(c>0&&vjd((BFb(c-1,b.length),b.charCodeAt(c-1)),ZAe)){--c}if(e>=c){throw Adb(new agb('The given string does not contain any numbers.'))}f=vhb((AFb(e,c,b.length),b.substr(e,c-e)),',|;|\r|\n');if(f.length!=2){throw Adb(new agb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Neb(Dhb(f[0]));this.b=Neb(Dhb(f[1]))}catch(a){a=zdb(a);if(ZD(a,130)){d=a;throw Adb(new agb($Ae+d))}else throw Adb(a)}};_.Ib=function yjd(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var l3=sfb(_Ae,'KVector',8);feb(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Ejd,Fjd,Gjd);_.Pc=function Jjd(){return Djd(this)};_.cg=function Hjd(b){var c,d,e,f,g,h;e=vhb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Xub(this);try{d=0;g=0;f=0;h=0;while(d<e.length){if(e[d]!=null&&Dhb(e[d]).length>0){g%2==0?(f=Neb(e[d])):(h=Neb(e[d]));g>0&&g%2!=0&&Mub(this,new rjd(f,h));++g}++d}}catch(a){a=zdb(a);if(ZD(a,130)){c=a;throw Adb(new agb('The given string does not match the expected format for vectors.'+c))}else throw Adb(a)}};_.Ib=function Kjd(){var a,b,c;a=new dib('(');b=Sub(this,0);while(b.b!=b.d.c){c=RD(evb(b),8);Zhb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var k3=sfb(_Ae,'KVectorChain',75);feb(255,22,{3:1,34:1,22:1,255:1},Sjd);var Ljd,Mjd,Njd,Ojd,Pjd,Qjd;var n3=tfb(JGe,'Alignment',255,WI,Ujd,Tjd);var Vjd;feb(991,1,Eye,jkd);_.hf=function kkd(a){ikd(a)};var Xjd,Yjd,Zjd,$jd,_jd,akd,bkd,ckd,dkd,ekd,fkd,gkd;var p3=sfb(JGe,'BoxLayouterOptions',991);feb(992,1,{},lkd);_.sf=function mkd(){var a;return a=new jrd,a};_.tf=function nkd(a){};var o3=sfb(JGe,'BoxLayouterOptions/BoxFactory',992);feb(297,22,{3:1,34:1,22:1,297:1},vkd);var okd,pkd,qkd,rkd,skd,tkd;var q3=tfb(JGe,'ContentAlignment',297,WI,xkd,wkd);var ykd;feb(699,1,Eye,vmd);_.hf=function wmd(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,OGe),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(kid(),iid)),qJ),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,PGe),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),hid),D2),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MDe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),Ckd),eid),n3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,Dze),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,QGe),''),'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."),hid),k3),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YDe),''),'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.'),Lkd),fid),q3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LDe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PDe),''),eze),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),Okd),eid),s3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kDe),''),'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.'),Tkd),eid),u3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MGe),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fDe),''),'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`."),Ykd),eid),y3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Eze),''),'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."),uld),hid),i3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dAe),''),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iEe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gAe),''),'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."),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eAe),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),Ild),eid),C3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,fEe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),hid),l3),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,$ze),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),gid),bJ),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,bAe),''),'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).'),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cAe),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZDe),''),'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.'),dld),hid),k3),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aEe),''),'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.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bEe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,RGe),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),hid),g3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gEe),''),'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."),fld),hid),h3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JDe),''),'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."),false),cid),QI),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd,Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SGe),''),'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),did),VI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,TGe),''),'Child Area Width'),'The width of the area occupied by the laid out children of a node.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,UGe),''),'Child Area Height'),'The height of the area occupied by the laid out children of a node.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mAe),''),yGe),"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'"),false),cid),QI),xsb(Whd))));zgd(a,mAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VGe),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WGe),''),'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'."),sgb(100)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XGe),''),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YGe),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),sgb(4000)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZGe),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),sgb(400)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Ge),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Ge),''),'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.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aHe),''),'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.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bHe),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NGe),'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.'),Gkd),eid),R3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xDe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yDe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Bze),lDe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zDe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aAe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ADe),lDe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,BDe),lDe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,EDe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CDe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,DDe),lDe),'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),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_ze),lDe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,FDe),lDe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,GDe),lDe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,HDe),lDe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),hid),l4),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd,Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hEe),lDe),'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.'),imd),hid),h3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,eEe),hHe),'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).'),gid),bJ),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,eEe,dEe,yld);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dEe),hHe),'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.'),wld),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QDe),iHe),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),hld),hid),i3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kAe),iHe),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),jld),fid),A3),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TDe),jHe),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),Ald),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,UDe),jHe),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,VDe),jHe),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,WDe),jHe),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,XDe),jHe),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jAe),kHe),'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."),lld),fid),H3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iAe),kHe),'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.'),qld),fid),I3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CAe),kHe),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),old),hid),l3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hAe),kHe),'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."),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$De),vDe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),Rkd),eid),t3),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fAe),vDe),'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."),false),cid),QI),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cHe),'font'),'Font Name'),'Font name used for a label.'),iid),qJ),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,dHe),'font'),'Font Size'),'Font size used for a label.'),gid),bJ),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cEe),lHe),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),hid),l3),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,_De),lHe),'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."),gid),bJ),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KDe),lHe),'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."),Pld),eid),E3),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,IDe),lHe),'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."),did),VI),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,lAe),mHe),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),Mld),fid),D3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RDe),mHe),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SDe),mHe),'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.'),true),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nAe),nHe),'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),did),VI),xsb(Whd))));zgd(a,nAe,qAe,rmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eHe),nHe),'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),eid),M3),xsb(Vhd))));zgd(a,eHe,qAe,tmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oAe),nHe),'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),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,oAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pAe),nHe),'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),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,pAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qAe),nHe),'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),eid),J3),xsb(Vhd))));zgd(a,qAe,hAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fHe),nHe),'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),did),VI),xsb(Whd))));zgd(a,fHe,qAe,pmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NDe),oHe),'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."),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ODe),oHe),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),cid),QI),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Cze),'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),did),VI),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gHe),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),Vkd),eid),v3),xsb(Thd))));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,sxe),'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.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'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.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,Zze),'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.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'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.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,$Ee),'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.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'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.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,CFe),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));wnd((new xnd,a));ikd((new jkd,a));Gpd((new Hpd,a))};var Akd,Bkd,Ckd,Dkd,Ekd,Fkd,Gkd,Hkd,Ikd,Jkd,Kkd,Lkd,Mkd,Nkd,Okd,Pkd,Qkd,Rkd,Skd,Tkd,Ukd,Vkd,Wkd,Xkd,Ykd,Zkd,$kd,_kd,ald,bld,cld,dld,eld,fld,gld,hld,ild,jld,kld,lld,mld,nld,old,pld,qld,rld,sld,tld,uld,vld,wld,xld,yld,zld,Ald,Bld,Cld,Dld,Eld,Fld,Gld,Hld,Ild,Jld,Kld,Lld,Mld,Nld,Old,Pld,Qld,Rld,Sld,Tld,Uld,Vld,Wld,Xld,Yld,Zld,$ld,_ld,amd,bmd,cmd,dmd,emd,fmd,gmd,hmd,imd,jmd,kmd,lmd,mmd,nmd,omd,pmd,qmd,rmd,smd,tmd;var r3=sfb(JGe,'CoreOptions',699);feb(88,22,{3:1,34:1,22:1,88:1},Gmd);var xmd,ymd,zmd,Amd,Bmd;var s3=tfb(JGe,eze,88,WI,Imd,Hmd);var Jmd;feb(278,22,{3:1,34:1,22:1,278:1},Pmd);var Lmd,Mmd,Nmd;var t3=tfb(JGe,'EdgeLabelPlacement',278,WI,Rmd,Qmd);var Smd;feb(223,22,{3:1,34:1,22:1,223:1},Zmd);var Umd,Vmd,Wmd,Xmd;var u3=tfb(JGe,'EdgeRouting',223,WI,_md,$md);var and;feb(321,22,{3:1,34:1,22:1,321:1},jnd);var cnd,dnd,end,fnd,gnd,hnd;var v3=tfb(JGe,'EdgeType',321,WI,lnd,knd);var mnd;feb(989,1,Eye,xnd);_.hf=function ynd(a){wnd(a)};var ond,pnd,qnd,rnd,snd,tnd,und;var x3=sfb(JGe,'FixedLayouterOptions',989);feb(990,1,{},znd);_.sf=function And(){var a;return a=new btd,a};_.tf=function Bnd(a){};var w3=sfb(JGe,'FixedLayouterOptions/FixedFactory',990);feb(346,22,{3:1,34:1,22:1,346:1},Gnd);var Cnd,Dnd,End;var y3=tfb(JGe,'HierarchyHandling',346,WI,Ind,Hnd);var Jnd;feb(290,22,{3:1,34:1,22:1,290:1},Rnd);var Lnd,Mnd,Nnd,Ond;var z3=tfb(JGe,'LabelSide',290,WI,Tnd,Snd);var Und;feb(95,22,{3:1,34:1,22:1,95:1},eod);var Wnd,Xnd,Ynd,Znd,$nd,_nd,aod,bod,cod;var A3=tfb(JGe,'NodeLabelPlacement',95,WI,hod,god);var iod;feb(256,22,{3:1,34:1,22:1,256:1},qod);var kod,lod,mod,nod,ood;var B3=tfb(JGe,'PortAlignment',256,WI,sod,rod);var tod;feb(101,22,{3:1,34:1,22:1,101:1},Eod);var vod,wod,xod,yod,zod,Aod;var C3=tfb(JGe,'PortConstraints',101,WI,God,Fod);var Hod;feb(279,22,{3:1,34:1,22:1,279:1},Qod);var Jod,Kod,Lod,Mod,Nod,Ood;var D3=tfb(JGe,'PortLabelPlacement',279,WI,Uod,Tod);var Vod;feb(64,22,{3:1,34:1,22:1,64:1},upd);var Xod,Yod,Zod,$od,_od,apd,bpd,cpd,dpd,epd,fpd,gpd,hpd,ipd,jpd,kpd,lpd,mpd,npd,opd,ppd;var E3=tfb(JGe,'PortSide',64,WI,xpd,wpd);var ypd;feb(993,1,Eye,Hpd);_.hf=function Ipd(a){Gpd(a)};var Apd,Bpd,Cpd,Dpd,Epd;var G3=sfb(JGe,'RandomLayouterOptions',993);feb(994,1,{},Jpd);_.sf=function Kpd(){var a;return a=new eud,a};_.tf=function Lpd(a){};var F3=sfb(JGe,'RandomLayouterOptions/RandomFactory',994);feb(386,22,{3:1,34:1,22:1,386:1},Rpd);var Mpd,Npd,Opd,Ppd;var H3=tfb(JGe,'SizeConstraint',386,WI,Tpd,Spd);var Upd;feb(264,22,{3:1,34:1,22:1,264:1},eqd);var Wpd,Xpd,Ypd,Zpd,$pd,_pd,aqd,bqd,cqd;var I3=tfb(JGe,'SizeOptions',264,WI,gqd,fqd);var hqd;feb(280,22,{3:1,34:1,22:1,280:1},nqd);var jqd,kqd,lqd;var J3=tfb(JGe,'TopdownNodeTypes',280,WI,pqd,oqd);var qqd;feb(347,22,rHe);var sqd,tqd;var M3=tfb(JGe,'TopdownSizeApproximator',347,WI,xqd,wqd);feb(987,347,rHe,zqd);_.Tg=function Aqd(a){return yqd(a)};var K3=tfb(JGe,'TopdownSizeApproximator/1',987,M3,null,null);feb(988,347,rHe,Bqd);_.Tg=function Cqd(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;c=RD(Gxd(b,(umd(),Tld)),143);A=(bvd(),o=new ACd,o);zxd(A,b);B=new Tsb;for(g=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));g.e!=g.i.gc();){e=RD(bMd(g),27);t=(n=new ACd,n);yCd(t,A);zxd(t,e);D=yqd(e);zyd(t,$wnd.Math.max(e.g,D.a),$wnd.Math.max(e.f,D.b));rtb(B.f,e,t)}for(f=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));f.e!=f.i.gc();){e=RD(bMd(f),27);for(l=new dMd((!e.e&&(e.e=new Yie(G4,e,7,4)),e.e));l.e!=l.i.gc();){k=RD(bMd(l),74);v=RD(Wd(qtb(B.f,e)),27);w=RD(Wjb(B,QHd((!k.c&&(k.c=new Yie(E4,k,5,8)),k.c),0)),27);u=(m=new rzd,m);WGd((!u.b&&(u.b=new Yie(E4,u,4,7)),u.b),v);WGd((!u.c&&(u.c=new Yie(E4,u,5,8)),u.c),w);pzd(u,vCd(v));zxd(u,k)}}q=RD(ltd(c.f),205);try{q.rf(A,new ztd);mtd(c.f,q)}catch(a){a=zdb(a);if(ZD(a,103)){p=a;throw Adb(p)}else throw Adb(a)}Hxd(A,Ikd)||Hxd(A,Hkd)||psd(A);j=Kfb(UD(Gxd(A,Ikd)));i=Kfb(UD(Gxd(A,Hkd)));h=j/i;d=Kfb(UD(Gxd(A,lmd)))*$wnd.Math.sqrt((!A.a&&(A.a=new C5d(J4,A,10,11)),A.a).i);C=RD(Gxd(A,tld),107);s=C.b+C.c+1;r=C.d+C.a+1;return new rjd($wnd.Math.max(s,d),$wnd.Math.max(r,d/h))};var L3=tfb(JGe,'TopdownSizeApproximator/2',988,M3,null,null);var Dqd;feb(344,1,{871:1},Oqd);_.Ug=function Pqd(a,b){return Fqd(this,a,b)};_.Vg=function Qqd(){Hqd(this)};_.Wg=function Rqd(){return this.q};_.Xg=function Sqd(){return !this.f?null:Hob(this.f)};_.Yg=function Tqd(){return Hob(this.a)};_.Zg=function Uqd(){return this.p};_.$g=function Vqd(){return false};_._g=function Wqd(){return this.n};_.ah=function Xqd(){return this.p!=null&&!this.b};_.bh=function Yqd(a){var b;if(this.n){b=a;Rmb(this.f,b)}};_.dh=function Zqd(a,b){var c,d;this.n&&!!a&&Jqd(this,(c=new Zje,d=Rje(c,a),Yje(c),d),(ttd(),qtd))};_.eh=function $qd(a){var b;if(this.b){return null}else{b=Gqd(this,this.g);Mub(this.a,b);b.i=this;this.d=a;return b}};_.fh=function _qd(a){a>0&&!this.b&&Iqd(this,a)};_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var O3=sfb(jEe,'BasicProgressMonitor',344);feb(717,205,oze,jrd);_.rf=function nrd(a,b){crd(a,b)};var V3=sfb(jEe,'BoxLayoutProvider',717);feb(983,1,fye,prd);_.Ne=function qrd(a,b){return ord(this,RD(a,27),RD(b,27))};_.Fb=function rrd(a){return this===a};_.Oe=function srd(){return new Frb(this)};_.a=false;var P3=sfb(jEe,'BoxLayoutProvider/1',983);feb(163,1,{163:1},zrd,Ard);_.Ib=function Brd(){return this.c?zCd(this.c):Fe(this.b)};var Q3=sfb(jEe,'BoxLayoutProvider/Group',163);feb(320,22,{3:1,34:1,22:1,320:1},Hrd);var Crd,Drd,Erd,Frd;var R3=tfb(jEe,'BoxLayoutProvider/PackingMode',320,WI,Jrd,Ird);var Krd;feb(984,1,fye,Mrd);_.Ne=function Nrd(a,b){return krd(RD(a,163),RD(b,163))};_.Fb=function Ord(a){return this===a};_.Oe=function Prd(){return new Frb(this)};var S3=sfb(jEe,'BoxLayoutProvider/lambda$0$Type',984);feb(985,1,fye,Qrd);_.Ne=function Rrd(a,b){return lrd(RD(a,163),RD(b,163))};_.Fb=function Srd(a){return this===a};_.Oe=function Trd(){return new Frb(this)};var T3=sfb(jEe,'BoxLayoutProvider/lambda$1$Type',985);feb(986,1,fye,Urd);_.Ne=function Vrd(a,b){return mrd(RD(a,163),RD(b,163))};_.Fb=function Wrd(a){return this===a};_.Oe=function Xrd(){return new Frb(this)};var U3=sfb(jEe,'BoxLayoutProvider/lambda$2$Type',986);feb(1384,1,{845:1},Yrd);_.Mg=function Zrd(a,b){return GCc(),!ZD(b,167)||ued((hed(),ged,RD(a,167)),b)};var W3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1384);feb(1385,1,Qve,$rd);_.Cd=function _rd(a){JCc(this.a,RD(a,149))};var X3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1385);feb(1386,1,Qve,asd);_.Cd=function bsd(a){RD(a,96);GCc()};var Y3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1386);feb(1390,1,Qve,csd);_.Cd=function dsd(a){KCc(this.a,RD(a,96))};var Z3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1390);feb(1388,1,nwe,esd);_.Mb=function fsd(a){return LCc(this.a,this.b,RD(a,149))};var $3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1388);feb(1387,1,nwe,gsd);_.Mb=function hsd(a){return NCc(this.a,this.b,RD(a,845))};var _3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1387);feb(1389,1,Qve,isd);_.Cd=function jsd(a){MCc(this.a,this.b,RD(a,149))};var a4=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1389);feb(947,1,{},Lsd);_.Kb=function Msd(a){return Ksd(a)};_.Fb=function Nsd(a){return this===a};var c4=sfb(jEe,'ElkUtil/lambda$0$Type',947);feb(948,1,Qve,Osd);_.Cd=function Psd(a){ysd(this.a,this.b,RD(a,74))};_.a=0;_.b=0;var d4=sfb(jEe,'ElkUtil/lambda$1$Type',948);feb(949,1,Qve,Qsd);_.Cd=function Rsd(a){zsd(this.a,this.b,RD(a,166))};_.a=0;_.b=0;var e4=sfb(jEe,'ElkUtil/lambda$2$Type',949);feb(950,1,Qve,Ssd);_.Cd=function Tsd(a){Asd(this.a,this.b,RD(a,135))};_.a=0;_.b=0;var f4=sfb(jEe,'ElkUtil/lambda$3$Type',950);feb(951,1,Qve,Usd);_.Cd=function Vsd(a){Bsd(this.a,RD(a,377))};var g4=sfb(jEe,'ElkUtil/lambda$4$Type',951);feb(325,1,{34:1,325:1},Xsd);_.Fd=function Ysd(a){return Wsd(this,RD(a,242))};_.Fb=function Zsd(a){var b;if(ZD(a,325)){b=RD(a,325);return this.a==b.a}return false};_.Hb=function $sd(){return eE(this.a)};_.Ib=function _sd(){return this.a+' (exclusive)'};_.a=0;var h4=sfb(jEe,'ExclusiveBounds/ExclusiveLowerBound',325);feb(1119,205,oze,btd);_.rf=function ctd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;b.Ug('Fixed Layout',1);f=RD(Gxd(a,(umd(),Skd)),223);l=0;m=0;for(s=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));s.e!=s.i.gc();){q=RD(bMd(s),27);B=RD(Gxd(q,(vnd(),und)),8);if(B){Byd(q,B.a,B.b);if(RD(Gxd(q,pnd),181).Hc((Qpd(),Mpd))){n=RD(Gxd(q,rnd),8);n.a>0&&n.b>0&&Esd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new dMd((!q.n&&(q.n=new C5d(I4,q,1,7)),q.n));j.e!=j.i.gc();){h=RD(bMd(j),135);B=RD(Gxd(h,und),8);!!B&&Byd(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new dMd((!q.c&&(q.c=new C5d(K4,q,9,9)),q.c));v.e!=v.i.gc();){u=RD(bMd(v),123);B=RD(Gxd(u,und),8);!!B&&Byd(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new dMd((!u.n&&(u.n=new C5d(I4,u,1,7)),u.n));i.e!=i.i.gc();){h=RD(bMd(i),135);B=RD(Gxd(h,und),8);!!B&&Byd(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new is(Mr(zGd(q).a.Kc(),new ir));gs(e);){c=RD(hs(e),74);k=atd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new is(Mr(yGd(q).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(vCd(JGd(c))!=a){k=atd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Ymd(),Umd)){for(r=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));r.e!=r.i.gc();){q=RD(bMd(r),27);for(d=new is(Mr(zGd(q).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);g=tsd(c);g.b==0?Ixd(c,cld,null):Ixd(c,cld,g)}}}if(!Heb(TD(Gxd(a,(vnd(),qnd))))){t=RD(Gxd(a,snd),107);p=l+t.b+t.c;o=m+t.d+t.a;Esd(a,p,o,true,true)}b.Vg()};var i4=sfb(jEe,'FixedLayoutProvider',1119);feb(385,137,{3:1,423:1,385:1,96:1,137:1},dtd,etd);_.cg=function htd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=vhb(b,';,;');for(g=j,h=0,i=g.length;h<i;++h){f=g[h];d=vhb(f,'\\:');e=vgd(ygd(),d[0]);if(!e){throw Adb(new agb('Invalid option id: '+d[0]))}k=zhd(e,d[1]);if(k==null){throw Adb(new agb('Invalid option value: '+d[1]))}k==null?(!this.q&&(this.q=new Tsb),_jb(this.q,e)):(!this.q&&(this.q=new Tsb),Zjb(this.q,e,k))}}catch(a){a=zdb(a);if(ZD(a,103)){c=a;throw Adb(new bgb(c))}else throw Adb(a)}};_.Ib=function itd(){var a;a=WD(zDb(GDb((!this.q?(yob(),yob(),wob):this.q).vc().Oc(),new jtd),sBb(new hCb,new fCb,new RBb,new TBb,cD(WC(QL,1),jwe,108,0,[]))));return a};var l4=sfb(jEe,'IndividualSpacings',385);feb(982,1,{},jtd);_.Kb=function ktd(a){return gtd(RD(a,44))};var k4=sfb(jEe,'IndividualSpacings/lambda$0$Type',982);feb(718,1,{},ntd);_.c=0;var m4=sfb(jEe,'InstancePool',718);feb(1835,1,{},otd);var o4=sfb(jEe,'LoggedGraph',1835);feb(415,22,{3:1,34:1,22:1,415:1},utd);var ptd,qtd,rtd,std;var n4=tfb(jEe,'LoggedGraph/Type',415,WI,wtd,vtd);var xtd;feb(1063,1,{871:1},ztd);_.Ug=function Atd(a,b){return false};_.Vg=function Btd(){};_.Wg=function Ctd(){return 0};_.Xg=function Dtd(){return null};_.Yg=function Etd(){return null};_.Zg=function Ftd(){return null};_.$g=function Gtd(){return false};_._g=function Htd(){return false};_.ah=function Itd(){return false};_.bh=function Jtd(a){};_.dh=function Ktd(a,b){};_.eh=function Ltd(a){return this};_.fh=function Mtd(a){};var p4=sfb(jEe,'NullElkProgressMonitor',1063);feb(42,1,{20:1,42:1},Ptd);_.Jc=function Rtd(a){xgb(this,a)};_.Fb=function Qtd(a){var b,c,d;if(ZD(a,42)){c=RD(a,42);b=this.a==null?c.a==null:pb(this.a,c.a);d=this.b==null?c.b==null:pb(this.b,c.b);return b&&d}else{return false}};_.Hb=function Std(){var a,b,c,d,e,f;c=this.a==null?0:tb(this.a);a=c&Bwe;b=c&-65536;f=this.b==null?0:tb(this.b);d=f&Bwe;e=f&-65536;return a^e>>16&Bwe|b^d<<16};_.Kc=function Ttd(){return new Vtd(this)};_.Ib=function Utd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+jeb(this.b)+')':this.b==null?'pair('+jeb(this.a)+',null)':'pair('+jeb(this.a)+','+jeb(this.b)+')'};var r4=sfb(jEe,'Pair',42);feb(995,1,Ave,Vtd);_.Nb=function Wtd(a){Ztb(this,a)};_.Ob=function Xtd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Ytd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw Adb(new Dvb)};_.Qb=function Ztd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw Adb(new cgb)};_.b=false;_.c=false;var q4=sfb(jEe,'Pair/1',995);feb(454,1,{454:1},$td);_.Fb=function _td(a){return Fvb(this.a,RD(a,454).a)&&Fvb(this.c,RD(a,454).c)&&Fvb(this.d,RD(a,454).d)&&Fvb(this.b,RD(a,454).b)};_.Hb=function aud(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function bud(){return '('+this.a+pve+this.c+pve+this.d+pve+this.b+')'};var s4=sfb(jEe,'Quadruple',454);feb(1108,205,oze,eud);_.rf=function fud(a,b){var c,d,e,f,g;b.Ug('Random Layout',1);if((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i==0){b.Vg();return}f=RD(Gxd(a,(Fpd(),Dpd)),17);!!f&&f.a!=0?(e=new Pwb(f.a)):(e=new Owb);c=Mfb(UD(Gxd(a,Apd)));g=Mfb(UD(Gxd(a,Epd)));d=RD(Gxd(a,Bpd),107);dud(a,e,c,g,d);b.Vg()};var t4=sfb(jEe,'RandomLayoutProvider',1108);feb(240,1,{240:1},gud);_.Fb=function hud(a){return Fvb(this.a,RD(a,240).a)&&Fvb(this.b,RD(a,240).b)&&Fvb(this.c,RD(a,240).c)};_.Hb=function iud(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.a,this.b,this.c]))};_.Ib=function jud(){return '('+this.a+pve+this.b+pve+this.c+')'};var u4=sfb(jEe,'Triple',240);var kud;feb(562,1,{});_.Lf=function oud(){return new rjd(this.f.i,this.f.j)};_.of=function pud(a){if(hGd(a,(umd(),Gld))){return Gxd(this.f,mud)}return Gxd(this.f,a)};_.Mf=function qud(){return new rjd(this.f.g,this.f.f)};_.Nf=function rud(){return this.g};_.pf=function sud(a){return Hxd(this.f,a)};_.Of=function tud(a){Dyd(this.f,a.a);Eyd(this.f,a.b)};_.Pf=function uud(a){Cyd(this.f,a.a);Ayd(this.f,a.b)};_.Qf=function vud(a){this.g=a};_.g=0;var mud;var v4=sfb(uHe,'ElkGraphAdapters/AbstractElkGraphElementAdapter',562);feb(563,1,{853:1},wud);_.Rf=function xud(){var a,b;if(!this.b){this.b=fv(iyd(this.a).i);for(b=new dMd(iyd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),135);Rmb(this.b,new Bud(a))}}return this.b};_.b=null;var w4=sfb(uHe,'ElkGraphAdapters/ElkEdgeAdapter',563);feb(308,562,{},zud);_.Sf=function Aud(){return yud(this)};_.a=null;var x4=sfb(uHe,'ElkGraphAdapters/ElkGraphAdapter',308);feb(640,562,{187:1},Bud);var y4=sfb(uHe,'ElkGraphAdapters/ElkLabelAdapter',640);feb(639,562,{695:1},Fud);_.Rf=function Iud(){return Cud(this)};_.Vf=function Jud(){var a;return a=RD(Gxd(this.f,(umd(),eld)),140),!a&&(a=new P2b),a};_.Xf=function Lud(){return Dud(this)};_.Zf=function Nud(a){var b;b=new S2b(a);Ixd(this.f,(umd(),eld),b)};_.$f=function Oud(a){Ixd(this.f,(umd(),tld),new B3b(a))};_.Tf=function Gud(){return this.d};_.Uf=function Hud(){var a,b;if(!this.a){this.a=new bnb;for(b=new is(Mr(yGd(RD(this.f,27)).a.Kc(),new ir));gs(b);){a=RD(hs(b),74);Rmb(this.a,new wud(a))}}return this.a};_.Wf=function Kud(){var a,b;if(!this.c){this.c=new bnb;for(b=new is(Mr(zGd(RD(this.f,27)).a.Kc(),new ir));gs(b);){a=RD(hs(b),74);Rmb(this.c,new wud(a))}}return this.c};_.Yf=function Mud(){return tCd(RD(this.f,27)).i!=0||Heb(TD(RD(this.f,27).of((umd(),$kd))))};_._f=function Pud(){Eud(this,(lud(),kud))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var z4=sfb(uHe,'ElkGraphAdapters/ElkNodeAdapter',639);feb(1284,562,{852:1},Rud);_.Rf=function Tud(){return Qud(this)};_.Uf=function Sud(){var a,b;if(!this.a){this.a=ev(RD(this.f,123).hh().i);for(b=new dMd(RD(this.f,123).hh());b.e!=b.i.gc();){a=RD(bMd(b),74);Rmb(this.a,new wud(a))}}return this.a};_.Wf=function Uud(){var a,b;if(!this.c){this.c=ev(RD(this.f,123).ih().i);for(b=new dMd(RD(this.f,123).ih());b.e!=b.i.gc();){a=RD(bMd(b),74);Rmb(this.c,new wud(a))}}return this.c};_.ag=function Vud(){return RD(RD(this.f,123).of((umd(),Old)),64)};_.bg=function Wud(){var a,b,c,d,e,f,g,h;d=MCd(RD(this.f,123));for(c=new dMd(RD(this.f,123).ih());c.e!=c.i.gc();){a=RD(bMd(c),74);for(h=new dMd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c));h.e!=h.i.gc();){g=RD(bMd(h),84);if(NGd(AGd(g),d)){return true}else if(AGd(g)==d&&Heb(TD(Gxd(a,(umd(),_kd))))){return true}}}for(b=new dMd(RD(this.f,123).hh());b.e!=b.i.gc();){a=RD(bMd(b),74);for(f=new dMd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b));f.e!=f.i.gc();){e=RD(bMd(f),84);if(NGd(AGd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var A4=sfb(uHe,'ElkGraphAdapters/ElkPortAdapter',1284);feb(1285,1,fye,Yud);_.Ne=function Zud(a,b){return Xud(RD(a,123),RD(b,123))};_.Fb=function $ud(a){return this===a};_.Oe=function _ud(){return new Frb(this)};var B4=sfb(uHe,'ElkGraphAdapters/PortComparator',1285);var r7=ufb(vHe,'EObject');var C4=ufb(wHe,xHe);var D4=ufb(wHe,yHe);var H4=ufb(wHe,zHe);var L4=ufb(wHe,'ElkShape');var E4=ufb(wHe,AHe);var G4=ufb(wHe,BHe);var F4=ufb(wHe,CHe);var p7=ufb(vHe,DHe);var n7=ufb(vHe,'EFactory');var avd;var q7=ufb(vHe,EHe);var t7=ufb(vHe,'EPackage');var cvd;var evd,fvd,gvd,hvd,ivd,jvd,kvd,lvd,mvd,nvd,ovd;var I4=ufb(wHe,FHe);var J4=ufb(wHe,GHe);var K4=ufb(wHe,HHe);feb(93,1,IHe);_.th=function rvd(){this.uh();return null};_.uh=function svd(){return null};_.vh=function tvd(){return this.uh(),false};_.wh=function uvd(){return false};_.xh=function vvd(a){qvd(this,a)};var g6=sfb(JHe,'BasicNotifierImpl',93);feb(99,93,RHe);_.Yh=function Dwd(){return Mvd(this)};_.yh=function bwd(a,b){return a};_.zh=function cwd(){throw Adb(new jib)};_.Ah=function dwd(a){var b;return b=Z5d(RD(vYd(this.Dh(),this.Fh()),19)),this.Ph().Th(this,b.n,b.f,a)};_.Bh=function ewd(a,b){throw Adb(new jib)};_.Ch=function fwd(a,b,c){return xvd(this,a,b,c)};_.Dh=function gwd(){var a;if(this.zh()){a=this.zh().Nk();if(a){return a}}return this.ii()};_.Eh=function hwd(){return yvd(this)};_.Fh=function iwd(){throw Adb(new jib)};_.Gh=function kwd(){var a,b;b=this.$h().Ok();!b&&this.zh().Tk(b=(N2d(),a=P$d(rYd(this.Dh())),a==null?M2d:new Q2d(this,a)));return b};_.Hh=function mwd(a,b){return a};_.Ih=function nwd(a){var b;b=a.pk();return !b?BYd(this.Dh(),a):a.Lj()};_.Jh=function owd(){var a;a=this.zh();return !a?null:a.Qk()};_.Kh=function pwd(){return !this.zh()?null:this.zh().Nk()};_.Lh=function qwd(a,b,c){return Dvd(this,a,b,c)};_.Mh=function rwd(a){return Evd(this,a)};_.Nh=function swd(a,b){return Fvd(this,a,b)};_.Oh=function twd(){var a;a=this.zh();return !!a&&a.Rk()};_.Ph=function uwd(){throw Adb(new jib)};_.Qh=function vwd(){return Hvd(this)};_.Rh=function wwd(a,b,c,d){return Ivd(this,a,b,d)};_.Sh=function xwd(a,b,c){var d;return d=RD(vYd(this.Dh(),b),69),d.wk().zk(this,this.hi(),b-this.ji(),a,c)};_.Th=function ywd(a,b,c,d){return Jvd(this,a,b,d)};_.Uh=function zwd(a,b,c){var d;return d=RD(vYd(this.Dh(),b),69),d.wk().Ak(this,this.hi(),b-this.ji(),a,c)};_.Vh=function Awd(){return !!this.zh()&&!!this.zh().Pk()};_.Wh=function Bwd(a){return Kvd(this,a)};_.Xh=function Cwd(a){return Lvd(this,a)};_.Zh=function Ewd(a){return Pvd(this,a)};_.$h=function Fwd(){throw Adb(new jib)};_._h=function Gwd(){return !this.zh()?null:this.zh().Pk()};_.ai=function Hwd(){return Hvd(this)};_.bi=function Iwd(a,b){Wvd(this,a,b)};_.ci=function Jwd(a){this.$h().Sk(a)};_.di=function Kwd(a){this.$h().Vk(a)};_.ei=function Lwd(a){this.$h().Uk(a)};_.fi=function Mwd(a,b){var c,d,e,f;f=this.Jh();if(!!f&&!!a){b=rLd(f.El(),this,b);f.Il(this)}d=this.Ph();if(d){if((jwd(this,this.Ph(),this.Fh()).Bb&txe)!=0){e=d.Qh();!!e&&(!a?e.Hl(this):!f&&e.Il(this))}else{b=(c=this.Fh(),c>=0?this.Ah(b):this.Ph().Th(this,-1-c,null,b));b=this.Ch(null,-1,b)}}this.di(a);return b};_.gi=function Nwd(a){var b,c,d,e,f,g,h,i;c=this.Dh();f=BYd(c,a);b=this.ji();if(f>=b){return RD(a,69).wk().Dk(this,this.hi(),f-b)}else if(f<=-1){g=Eee((lke(),jke),c,a);if(g){nke();RD(g,69).xk()||(g=zfe(Qee(jke,g)));e=(d=this.Ih(g),RD(d>=0?this.Lh(d,true,true):Qvd(this,g,true),160));i=g.Ik();if(i>1||i==-1){return RD(RD(e,220).Sl(a,false),79)}}else{throw Adb(new agb(KHe+a.xe()+NHe))}}else if(a.Jk()){return d=this.Ih(a),RD(d>=0?this.Lh(d,false,true):Qvd(this,a,false),79)}h=new NTd(this,a);return h};_.hi=function Owd(){return Yvd(this)};_.ii=function Pwd(){return (lTd(),kTd).S};_.ji=function Qwd(){return AYd(this.ii())};_.ki=function Rwd(a){$vd(this,a)};_.Ib=function Swd(){return awd(this)};var G7=sfb(SHe,'BasicEObjectImpl',99);var ZSd;feb(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1});_.li=function _wd(a){var b;b=Vwd(this);return b[a]};_.mi=function axd(a,b){var c;c=Vwd(this);bD(c,a,b)};_.ni=function bxd(a){var b;b=Vwd(this);bD(b,a,null)};_.th=function cxd(){return RD(Ywd(this,4),129)};_.uh=function dxd(){throw Adb(new jib)};_.vh=function exd(){return (this.Db&4)!=0};_.zh=function fxd(){throw Adb(new jib)};_.oi=function gxd(a){$wd(this,2,a)};_.Bh=function hxd(a,b){this.Db=b<<16|this.Db&255;this.oi(a)};_.Dh=function ixd(){return Uwd(this)};_.Fh=function jxd(){return this.Db>>16};_.Gh=function kxd(){var a,b;return N2d(),b=P$d(rYd((a=RD(Ywd(this,16),29),!a?this.ii():a))),b==null?(null,M2d):new Q2d(this,b)};_.wh=function lxd(){return (this.Db&1)==0};_.Jh=function mxd(){return RD(Ywd(this,128),2034)};_.Kh=function nxd(){return RD(Ywd(this,16),29)};_.Oh=function oxd(){return (this.Db&32)!=0};_.Ph=function pxd(){return RD(Ywd(this,2),54)};_.Vh=function qxd(){return (this.Db&64)!=0};_.$h=function rxd(){throw Adb(new jib)};_._h=function sxd(){return RD(Ywd(this,64),288)};_.ci=function txd(a){$wd(this,16,a)};_.di=function uxd(a){$wd(this,128,a)};_.ei=function vxd(a){$wd(this,64,a)};_.hi=function wxd(){return Wwd(this)};_.Db=0;var xab=sfb(SHe,'MinimalEObjectImpl',119);feb(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.oi=function xxd(a){this.Cb=a};_.Ph=function yxd(){return this.Cb};var wab=sfb(SHe,'MinimalEObjectImpl/Container',120);feb(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function Jxd(a,b,c){return Axd(this,a,b,c)};_.Uh=function Kxd(a,b,c){return Bxd(this,a,b,c)};_.Wh=function Lxd(a){return Cxd(this,a)};_.bi=function Mxd(a,b){Dxd(this,a,b)};_.ii=function Nxd(){return pvd(),ovd};_.ki=function Oxd(a){Exd(this,a)};_.nf=function Pxd(){return Fxd(this)};_.gh=function Qxd(){return !this.o&&(this.o=new DVd((pvd(),mvd),X4,this,0)),this.o};_.of=function Rxd(a){return Gxd(this,a)};_.pf=function Sxd(a){return Hxd(this,a)};_.qf=function Txd(a,b){return Ixd(this,a,b)};var M4=sfb(THe,'EMapPropertyHolderImpl',2083);feb(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Xxd);_.Lh=function Yxd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return Dvd(this,a,b,c)};_.Wh=function Zxd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return Kvd(this,a)};_.bi=function $xd(a,b){switch(a){case 0:Vxd(this,Kfb(UD(b)));return;case 1:Wxd(this,Kfb(UD(b)));return;}Wvd(this,a,b)};_.ii=function _xd(){return pvd(),evd};_.ki=function ayd(a){switch(a){case 0:Vxd(this,0);return;case 1:Wxd(this,0);return;}$vd(this,a)};_.Ib=function byd(){var a;if((this.Db&64)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (x: ';Khb(a,this.a);a.a+=', y: ';Khb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var N4=sfb(THe,'ElkBendPointImpl',572);feb(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});_.Lh=function lyd(a,b,c){return cyd(this,a,b,c)};_.Sh=function myd(a,b,c){return dyd(this,a,b,c)};_.Uh=function nyd(a,b,c){return eyd(this,a,b,c)};_.Wh=function oyd(a){return fyd(this,a)};_.bi=function pyd(a,b){gyd(this,a,b)};_.ii=function qyd(){return pvd(),ivd};_.ki=function ryd(a){hyd(this,a)};_.jh=function syd(){return this.k};_.kh=function tyd(){return iyd(this)};_.Ib=function uyd(){return kyd(this)};_.k=null;var R4=sfb(THe,'ElkGraphElementImpl',739);feb(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});_.Lh=function Gyd(a,b,c){return vyd(this,a,b,c)};_.Wh=function Hyd(a){return wyd(this,a)};_.bi=function Iyd(a,b){xyd(this,a,b)};_.ii=function Jyd(){return pvd(),nvd};_.ki=function Kyd(a){yyd(this,a)};_.lh=function Lyd(){return this.f};_.mh=function Myd(){return this.g};_.nh=function Nyd(){return this.i};_.oh=function Oyd(){return this.j};_.ph=function Pyd(a,b){zyd(this,a,b)};_.qh=function Qyd(a,b){Byd(this,a,b)};_.rh=function Ryd(a){Dyd(this,a)};_.sh=function Syd(a){Eyd(this,a)};_.Ib=function Tyd(){return Fyd(this)};_.f=0;_.g=0;_.i=0;_.j=0;var Y4=sfb(THe,'ElkShapeImpl',740);feb(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});_.Lh=function _yd(a,b,c){return Uyd(this,a,b,c)};_.Sh=function azd(a,b,c){return Vyd(this,a,b,c)};_.Uh=function bzd(a,b,c){return Wyd(this,a,b,c)};_.Wh=function czd(a){return Xyd(this,a)};_.bi=function dzd(a,b){Yyd(this,a,b)};_.ii=function ezd(){return pvd(),fvd};_.ki=function fzd(a){Zyd(this,a)};_.hh=function gzd(){return !this.d&&(this.d=new Yie(G4,this,8,5)),this.d};_.ih=function hzd(){return !this.e&&(this.e=new Yie(G4,this,7,4)),this.e};var O4=sfb(THe,'ElkConnectableShapeImpl',741);feb(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},rzd);_.Ah=function szd(a){return jzd(this,a)};_.Lh=function tzd(a,b,c){switch(a){case 3:return kzd(this);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),this.b;case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),this.c;case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),this.a;case 7:return Geb(),!this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i<=1)?false:true;case 8:return Geb(),nzd(this)?true:false;case 9:return Geb(),ozd(this)?true:false;case 10:return Geb(),!this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i!=0)?true:false;}return cyd(this,a,b,c)};_.Sh=function uzd(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?jzd(this,c):this.Cb.Th(this,-1-d,null,c)));return izd(this,RD(a,27),c);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),qLd(this.b,a,c);case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),qLd(this.c,a,c);case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),qLd(this.a,a,c);}return dyd(this,a,b,c)};_.Uh=function vzd(a,b,c){switch(b){case 3:return izd(this,null,c);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),rLd(this.b,a,c);case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),rLd(this.c,a,c);case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),rLd(this.a,a,c);}return eyd(this,a,b,c)};_.Wh=function wzd(a){switch(a){case 3:return !!kzd(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new Yie(E4,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i<=1));case 8:return nzd(this);case 9:return ozd(this);case 10:return !this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i!=0);}return fyd(this,a)};_.bi=function xzd(a,b){switch(a){case 3:pzd(this,RD(b,27));return;case 4:!this.b&&(this.b=new Yie(E4,this,4,7));sLd(this.b);!this.b&&(this.b=new Yie(E4,this,4,7));YGd(this.b,RD(b,16));return;case 5:!this.c&&(this.c=new Yie(E4,this,5,8));sLd(this.c);!this.c&&(this.c=new Yie(E4,this,5,8));YGd(this.c,RD(b,16));return;case 6:!this.a&&(this.a=new C5d(F4,this,6,6));sLd(this.a);!this.a&&(this.a=new C5d(F4,this,6,6));YGd(this.a,RD(b,16));return;}gyd(this,a,b)};_.ii=function yzd(){return pvd(),gvd};_.ki=function zzd(a){switch(a){case 3:pzd(this,null);return;case 4:!this.b&&(this.b=new Yie(E4,this,4,7));sLd(this.b);return;case 5:!this.c&&(this.c=new Yie(E4,this,5,8));sLd(this.c);return;case 6:!this.a&&(this.a=new C5d(F4,this,6,6));sLd(this.a);return;}hyd(this,a)};_.Ib=function Azd(){return qzd(this)};var P4=sfb(THe,'ElkEdgeImpl',326);feb(451,2083,{110:1,342:1,166:1,451:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Rzd);_.Ah=function Szd(a){return Czd(this,a)};_.Lh=function Tzd(a,b,c){switch(a){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 XZd(D4,this,5)),this.a;case 6:return Fzd(this);case 7:if(b)return Ezd(this);return this.i;case 8:if(b)return Dzd(this);return this.f;case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),this.g;case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),this.e;case 11:return this.d;}return Axd(this,a,b,c)};_.Sh=function Uzd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Czd(this,c):this.Cb.Th(this,-1-e,null,c)));return Bzd(this,RD(a,74),c);case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),qLd(this.g,a,c);case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),qLd(this.e,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(pvd(),hvd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((pvd(),hvd)),a,c)};_.Uh=function Vzd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new XZd(D4,this,5)),rLd(this.a,a,c);case 6:return Bzd(this,null,c);case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),rLd(this.g,a,c);case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),rLd(this.e,a,c);}return Bxd(this,a,b,c)};_.Wh=function Wzd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!Fzd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return Cxd(this,a)};_.bi=function Xzd(a,b){switch(a){case 1:Ozd(this,Kfb(UD(b)));return;case 2:Pzd(this,Kfb(UD(b)));return;case 3:Hzd(this,Kfb(UD(b)));return;case 4:Izd(this,Kfb(UD(b)));return;case 5:!this.a&&(this.a=new XZd(D4,this,5));sLd(this.a);!this.a&&(this.a=new XZd(D4,this,5));YGd(this.a,RD(b,16));return;case 6:Mzd(this,RD(b,74));return;case 7:Lzd(this,RD(b,84));return;case 8:Kzd(this,RD(b,84));return;case 9:!this.g&&(this.g=new Yie(F4,this,9,10));sLd(this.g);!this.g&&(this.g=new Yie(F4,this,9,10));YGd(this.g,RD(b,16));return;case 10:!this.e&&(this.e=new Yie(F4,this,10,9));sLd(this.e);!this.e&&(this.e=new Yie(F4,this,10,9));YGd(this.e,RD(b,16));return;case 11:Jzd(this,WD(b));return;}Dxd(this,a,b)};_.ii=function Yzd(){return pvd(),hvd};_.ki=function Zzd(a){switch(a){case 1:Ozd(this,0);return;case 2:Pzd(this,0);return;case 3:Hzd(this,0);return;case 4:Izd(this,0);return;case 5:!this.a&&(this.a=new XZd(D4,this,5));sLd(this.a);return;case 6:Mzd(this,null);return;case 7:Lzd(this,null);return;case 8:Kzd(this,null);return;case 9:!this.g&&(this.g=new Yie(F4,this,9,10));sLd(this.g);return;case 10:!this.e&&(this.e=new Yie(F4,this,10,9));sLd(this.e);return;case 11:Jzd(this,null);return;}Exd(this,a)};_.Ib=function $zd(){return Qzd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var Q4=sfb(THe,'ElkEdgeSectionImpl',451);feb(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1});_.Lh=function cAd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function dAd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c)}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function eAd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c)}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function fAd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.Zh=function gAd(a){return _zd(this,a)};_.bi=function hAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.di=function iAd(a){$wd(this,128,a)};_.ii=function jAd(){return JTd(),xTd};_.ki=function kAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function lAd(){this.Bb|=1};_.qi=function mAd(a){return bAd(this,a)};_.Bb=0;var k8=sfb(SHe,'EModelElementImpl',158);feb(720,158,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},yAd);_.ri=function zAd(a,b){return tAd(this,a,b)};_.si=function AAd(a){var b,c,d,e,f;if(this.a!=BXd(a)||(a.Bb&256)!=0){throw Adb(new agb(ZHe+a.zb+WHe))}for(d=zYd(a);tYd(d.a).i!=0;){c=RD(N_d(d,0,(b=RD(QHd(tYd(d.a),0),89),f=b.c,ZD(f,90)?RD(f,29):(JTd(),zTd))),29);if(DXd(c)){e=BXd(c).wi().si(c);RD(e,54).ci(a);return e}d=zYd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new LUd(a):new zUd(a)};_.ti=function BAd(a,b){return uAd(this,a,b)};_.Lh=function CAd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.a;}return zvd(this,a-AYd((JTd(),uTd)),vYd((d=RD(Ywd(this,16),29),!d?uTd:d),a),b,c)};_.Sh=function DAd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 1:!!this.a&&(c=RD(this.a,54).Th(this,4,t7,c));return rAd(this,RD(a,241),c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),uTd):d),b),69),e.wk().zk(this,Wwd(this),b-AYd((JTd(),uTd)),a,c)};_.Uh=function EAd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 1:return rAd(this,null,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),uTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),uTd)),a,c)};_.Wh=function FAd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return Avd(this,a-AYd((JTd(),uTd)),vYd((b=RD(Ywd(this,16),29),!b?uTd:b),a))};_.bi=function GAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:wAd(this,RD(b,241));return;}Bvd(this,a-AYd((JTd(),uTd)),vYd((c=RD(Ywd(this,16),29),!c?uTd:c),a),b)};_.ii=function HAd(){return JTd(),uTd};_.ki=function IAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:wAd(this,null);return;}Cvd(this,a-AYd((JTd(),uTd)),vYd((b=RD(Ywd(this,16),29),!b?uTd:b),a))};var nAd,oAd,pAd;var i8=sfb(SHe,'EFactoryImpl',720);feb(1037,720,{110:1,2113:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},KAd);_.ri=function LAd(a,b){switch(a.hk()){case 12:return RD(b,149).Pg();case 13:return jeb(b);default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function MAd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=BXd(a),b?fZd(b.vi(),a):-1)),a.G){case 4:return f=new hCd,f;case 6:return g=new ACd,g;case 7:return h=new PCd,h;case 8:return d=new rzd,d;case 9:return c=new Xxd,c;case 10:return e=new Rzd,e;case 11:return i=new _Cd,i;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function NAd(a,b){switch(a.hk()){case 13:case 12:return null;default:throw Adb(new agb(VHe+a.xe()+WHe));}};var S4=sfb(THe,'ElkGraphFactoryImpl',1037);feb(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});_.Gh=function RAd(){var a,b;b=(a=RD(Ywd(this,16),29),P$d(rYd(!a?this.ii():a)));return b==null?(N2d(),N2d(),M2d):new e3d(this,b)};_.Lh=function SAd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.xe();}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Wh=function TAd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function UAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:this.ui(WD(b));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function VAd(){return JTd(),yTd};_.ki=function WAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:this.ui(null);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.xe=function XAd(){return this.zb};_.ui=function YAd(a){PAd(this,a)};_.Ib=function ZAd(){return QAd(this)};_.zb=null;var o8=sfb(SHe,'ENamedElementImpl',448);feb(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},EBd);_.Ah=function GBd(a){return qBd(this,a)};_.Lh=function HBd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,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 J5d(this,i7,this)),this.rb;case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?RD(this.Cb,241):null;return gBd(this);}return zvd(this,a-AYd((JTd(),CTd)),vYd((d=RD(Ywd(this,16),29),!d?CTd:d),a),b,c)};_.Sh=function IBd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 4:!!this.sb&&(c=RD(this.sb,54).Th(this,1,n7,c));return hBd(this,RD(a,479),c);case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),qLd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),qLd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qBd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,7,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),CTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),CTd)),a,c)};_.Uh=function JBd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 4:return hBd(this,null,c);case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),rLd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),rLd(this.vb,a,c);case 7:return xvd(this,null,7,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),CTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),CTd)),a,c)};_.Wh=function KBd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!gBd(this);}return Avd(this,a-AYd((JTd(),CTd)),vYd((b=RD(Ywd(this,16),29),!b?CTd:b),a))};_.Zh=function LBd(a){var b;b=sBd(this,a);return b?b:_zd(this,a)};_.bi=function MBd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:DBd(this,WD(b));return;case 3:CBd(this,WD(b));return;case 4:BBd(this,RD(b,479));return;case 5:!this.rb&&(this.rb=new J5d(this,i7,this));sLd(this.rb);!this.rb&&(this.rb=new J5d(this,i7,this));YGd(this.rb,RD(b,16));return;case 6:!this.vb&&(this.vb=new G5d(t7,this,6,7));sLd(this.vb);!this.vb&&(this.vb=new G5d(t7,this,6,7));YGd(this.vb,RD(b,16));return;}Bvd(this,a-AYd((JTd(),CTd)),vYd((c=RD(Ywd(this,16),29),!c?CTd:c),a),b)};_.ei=function NBd(a){var b,c;if(!!a&&!!this.rb){for(c=new dMd(this.rb);c.e!=c.i.gc();){b=bMd(c);ZD(b,364)&&(RD(b,364).w=null)}}$wd(this,64,a)};_.ii=function OBd(){return JTd(),CTd};_.ki=function PBd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:DBd(this,null);return;case 3:CBd(this,null);return;case 4:BBd(this,null);return;case 5:!this.rb&&(this.rb=new J5d(this,i7,this));sLd(this.rb);return;case 6:!this.vb&&(this.vb=new G5d(t7,this,6,7));sLd(this.vb);return;}Cvd(this,a-AYd((JTd(),CTd)),vYd((b=RD(Ywd(this,16),29),!b?CTd:b),a))};_.pi=function QBd(){rBd(this)};_.vi=function RBd(){return !this.rb&&(this.rb=new J5d(this,i7,this)),this.rb};_.wi=function SBd(){return this.sb};_.xi=function TBd(){return this.ub};_.yi=function UBd(){return this.xb};_.zi=function VBd(){return this.yb};_.Ai=function WBd(a){this.ub=a};_.Ib=function XBd(){var a;if((this.Db&64)!=0)return QAd(this);a=new Shb(QAd(this));a.a+=' (nsURI: ';Nhb(a,this.yb);a.a+=', nsPrefix: ';Nhb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var $Ad;var y8=sfb(SHe,'EPackageImpl',184);feb(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},_Bd);_.q=false;_.r=false;var YBd=false;var T4=sfb(THe,'ElkGraphPackageImpl',569);feb(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},hCd);_.Ah=function iCd(a){return cCd(this,a)};_.Lh=function jCd(a,b,c){switch(a){case 7:return dCd(this);case 8:return this.a;}return vyd(this,a,b,c)};_.Sh=function kCd(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?cCd(this,c):this.Cb.Th(this,-1-d,null,c)));return bCd(this,RD(a,167),c);}return dyd(this,a,b,c)};_.Uh=function lCd(a,b,c){if(b==7){return bCd(this,null,c)}return eyd(this,a,b,c)};_.Wh=function mCd(a){switch(a){case 7:return !!dCd(this);case 8:return !lhb('',this.a);}return wyd(this,a)};_.bi=function nCd(a,b){switch(a){case 7:eCd(this,RD(b,167));return;case 8:fCd(this,WD(b));return;}xyd(this,a,b)};_.ii=function oCd(){return pvd(),jvd};_.ki=function pCd(a){switch(a){case 7:eCd(this,null);return;case 8:fCd(this,'');return;}yyd(this,a)};_.Ib=function qCd(){return gCd(this)};_.a='';var U4=sfb(THe,'ElkLabelImpl',366);feb(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},ACd);_.Ah=function BCd(a){return sCd(this,a)};_.Lh=function CCd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),this.c;case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),this.a;case 11:return vCd(this);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),this.b;case 13:return Geb(),!this.a&&(this.a=new C5d(J4,this,10,11)),this.a.i>0?true:false;}return Uyd(this,a,b,c)};_.Sh=function DCd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),qLd(this.c,a,c);case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),qLd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?sCd(this,c):this.Cb.Th(this,-1-d,null,c)));return rCd(this,RD(a,27),c);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),qLd(this.b,a,c);}return Vyd(this,a,b,c)};_.Uh=function ECd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),rLd(this.c,a,c);case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),rLd(this.a,a,c);case 11:return rCd(this,null,c);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),rLd(this.b,a,c);}return Wyd(this,a,b,c)};_.Wh=function FCd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!vCd(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new C5d(J4,this,10,11)),this.a.i>0;}return Xyd(this,a)};_.bi=function GCd(a,b){switch(a){case 9:!this.c&&(this.c=new C5d(K4,this,9,9));sLd(this.c);!this.c&&(this.c=new C5d(K4,this,9,9));YGd(this.c,RD(b,16));return;case 10:!this.a&&(this.a=new C5d(J4,this,10,11));sLd(this.a);!this.a&&(this.a=new C5d(J4,this,10,11));YGd(this.a,RD(b,16));return;case 11:yCd(this,RD(b,27));return;case 12:!this.b&&(this.b=new C5d(G4,this,12,3));sLd(this.b);!this.b&&(this.b=new C5d(G4,this,12,3));YGd(this.b,RD(b,16));return;}Yyd(this,a,b)};_.ii=function HCd(){return pvd(),kvd};_.ki=function ICd(a){switch(a){case 9:!this.c&&(this.c=new C5d(K4,this,9,9));sLd(this.c);return;case 10:!this.a&&(this.a=new C5d(J4,this,10,11));sLd(this.a);return;case 11:yCd(this,null);return;case 12:!this.b&&(this.b=new C5d(G4,this,12,3));sLd(this.b);return;}Zyd(this,a)};_.Ib=function JCd(){return zCd(this)};var V4=sfb(THe,'ElkNodeImpl',207);feb(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},PCd);_.Ah=function QCd(a){return LCd(this,a)};_.Lh=function RCd(a,b,c){if(a==9){return MCd(this)}return Uyd(this,a,b,c)};_.Sh=function SCd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?LCd(this,c):this.Cb.Th(this,-1-d,null,c)));return KCd(this,RD(a,27),c);}return Vyd(this,a,b,c)};_.Uh=function TCd(a,b,c){if(b==9){return KCd(this,null,c)}return Wyd(this,a,b,c)};_.Wh=function UCd(a){if(a==9){return !!MCd(this)}return Xyd(this,a)};_.bi=function VCd(a,b){switch(a){case 9:NCd(this,RD(b,27));return;}Yyd(this,a,b)};_.ii=function WCd(){return pvd(),lvd};_.ki=function XCd(a){switch(a){case 9:NCd(this,null);return;}Zyd(this,a)};_.Ib=function YCd(){return OCd(this)};var W4=sfb(THe,'ElkPortImpl',193);var O6=ufb(sIe,'BasicEMap/Entry');feb(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},_Cd);_.Fb=function fDd(a){return this===a};_.ld=function hDd(){return this.b};_.Hb=function jDd(){return kFb(this)};_.Di=function lDd(a){ZCd(this,RD(a,149))};_.Lh=function aDd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return Dvd(this,a,b,c)};_.Wh=function bDd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return Kvd(this,a)};_.bi=function cDd(a,b){switch(a){case 0:ZCd(this,RD(b,149));return;case 1:$Cd(this,b);return;}Wvd(this,a,b)};_.ii=function dDd(){return pvd(),mvd};_.ki=function eDd(a){switch(a){case 0:ZCd(this,null);return;case 1:$Cd(this,null);return;}$vd(this,a)};_.Bi=function gDd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.md=function iDd(){return this.c};_.Ci=function kDd(a){this.a=a};_.nd=function mDd(a){var b;b=this.c;$Cd(this,a);return b};_.Ib=function nDd(){var a;if((this.Db&64)!=0)return awd(this);a=new bib;Zhb(Zhb(Zhb(a,this.b?this.b.Pg():vve),SAe),Ghb(this.c));return a.a};_.a=-1;_.c=null;var X4=sfb(THe,'ElkPropertyToValueMapEntryImpl',1122);feb(996,1,{},BDd);var Z4=sfb(vIe,'JsonAdapter',996);feb(216,63,swe,CDd);var $4=sfb(vIe,'JsonImportException',216);feb(868,1,{},IEd);var O5=sfb(vIe,'JsonImporter',868);feb(903,1,{},JEd);var _4=sfb(vIe,'JsonImporter/lambda$0$Type',903);feb(904,1,{},KEd);var a5=sfb(vIe,'JsonImporter/lambda$1$Type',904);feb(912,1,{},LEd);var b5=sfb(vIe,'JsonImporter/lambda$10$Type',912);feb(914,1,{},MEd);var c5=sfb(vIe,'JsonImporter/lambda$11$Type',914);feb(915,1,{},NEd);var d5=sfb(vIe,'JsonImporter/lambda$12$Type',915);feb(921,1,{},OEd);var e5=sfb(vIe,'JsonImporter/lambda$13$Type',921);feb(920,1,{},PEd);var f5=sfb(vIe,'JsonImporter/lambda$14$Type',920);feb(916,1,{},QEd);var g5=sfb(vIe,'JsonImporter/lambda$15$Type',916);feb(917,1,{},REd);var h5=sfb(vIe,'JsonImporter/lambda$16$Type',917);feb(918,1,{},SEd);var i5=sfb(vIe,'JsonImporter/lambda$17$Type',918);feb(919,1,{},TEd);var j5=sfb(vIe,'JsonImporter/lambda$18$Type',919);feb(924,1,{},UEd);var k5=sfb(vIe,'JsonImporter/lambda$19$Type',924);feb(905,1,{},VEd);var l5=sfb(vIe,'JsonImporter/lambda$2$Type',905);feb(922,1,{},WEd);var m5=sfb(vIe,'JsonImporter/lambda$20$Type',922);feb(923,1,{},XEd);var n5=sfb(vIe,'JsonImporter/lambda$21$Type',923);feb(927,1,{},YEd);var o5=sfb(vIe,'JsonImporter/lambda$22$Type',927);feb(925,1,{},ZEd);var p5=sfb(vIe,'JsonImporter/lambda$23$Type',925);feb(926,1,{},$Ed);var q5=sfb(vIe,'JsonImporter/lambda$24$Type',926);feb(929,1,{},_Ed);var r5=sfb(vIe,'JsonImporter/lambda$25$Type',929);feb(928,1,{},aFd);var s5=sfb(vIe,'JsonImporter/lambda$26$Type',928);feb(930,1,Qve,bFd);_.Cd=function cFd(a){_Dd(this.b,this.a,WD(a))};var t5=sfb(vIe,'JsonImporter/lambda$27$Type',930);feb(931,1,Qve,dFd);_.Cd=function eFd(a){aEd(this.b,this.a,WD(a))};var u5=sfb(vIe,'JsonImporter/lambda$28$Type',931);feb(932,1,{},fFd);var v5=sfb(vIe,'JsonImporter/lambda$29$Type',932);feb(908,1,{},gFd);var w5=sfb(vIe,'JsonImporter/lambda$3$Type',908);feb(933,1,{},hFd);var x5=sfb(vIe,'JsonImporter/lambda$30$Type',933);feb(934,1,{},iFd);var y5=sfb(vIe,'JsonImporter/lambda$31$Type',934);feb(935,1,{},jFd);var z5=sfb(vIe,'JsonImporter/lambda$32$Type',935);feb(936,1,{},kFd);var A5=sfb(vIe,'JsonImporter/lambda$33$Type',936);feb(937,1,{},lFd);var B5=sfb(vIe,'JsonImporter/lambda$34$Type',937);feb(870,1,{},nFd);var C5=sfb(vIe,'JsonImporter/lambda$35$Type',870);feb(941,1,{},pFd);var D5=sfb(vIe,'JsonImporter/lambda$36$Type',941);feb(938,1,Qve,qFd);_.Cd=function rFd(a){jEd(this.a,RD(a,377))};var E5=sfb(vIe,'JsonImporter/lambda$37$Type',938);feb(939,1,Qve,sFd);_.Cd=function tFd(a){kEd(this.a,this.b,RD(a,166))};var F5=sfb(vIe,'JsonImporter/lambda$38$Type',939);feb(940,1,Qve,uFd);_.Cd=function vFd(a){lEd(this.a,this.b,RD(a,166))};var G5=sfb(vIe,'JsonImporter/lambda$39$Type',940);feb(906,1,{},wFd);var H5=sfb(vIe,'JsonImporter/lambda$4$Type',906);feb(942,1,Qve,xFd);_.Cd=function yFd(a){mEd(this.a,RD(a,8))};var I5=sfb(vIe,'JsonImporter/lambda$40$Type',942);feb(907,1,{},zFd);var J5=sfb(vIe,'JsonImporter/lambda$5$Type',907);feb(911,1,{},AFd);var K5=sfb(vIe,'JsonImporter/lambda$6$Type',911);feb(909,1,{},BFd);var L5=sfb(vIe,'JsonImporter/lambda$7$Type',909);feb(910,1,{},CFd);var M5=sfb(vIe,'JsonImporter/lambda$8$Type',910);feb(913,1,{},DFd);var N5=sfb(vIe,'JsonImporter/lambda$9$Type',913);feb(961,1,Qve,MFd);_.Cd=function NFd(a){oDd(this.a,new OC(WD(a)))};var P5=sfb(vIe,'JsonMetaDataConverter/lambda$0$Type',961);feb(962,1,Qve,OFd);_.Cd=function PFd(a){IFd(this.a,RD(a,245))};var Q5=sfb(vIe,'JsonMetaDataConverter/lambda$1$Type',962);feb(963,1,Qve,QFd);_.Cd=function RFd(a){JFd(this.a,RD(a,143))};var R5=sfb(vIe,'JsonMetaDataConverter/lambda$2$Type',963);feb(964,1,Qve,SFd);_.Cd=function TFd(a){KFd(this.a,RD(a,170))};var S5=sfb(vIe,'JsonMetaDataConverter/lambda$3$Type',964);feb(245,22,{3:1,34:1,22:1,245:1},bGd);var UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd;var T5=tfb(jze,'GraphFeature',245,WI,dGd,cGd);var eGd;feb(11,1,{34:1,149:1},jGd,kGd,lGd,mGd);_.Fd=function nGd(a){return gGd(this,RD(a,149))};_.Fb=function oGd(a){return hGd(this,a)};_.Sg=function pGd(){return iGd(this)};_.Pg=function qGd(){return this.b};_.Hb=function rGd(){return ohb(this.b)};_.Ib=function sGd(){return this.b};var Y5=sfb(jze,'Property',11);feb(671,1,fye,uGd);_.Ne=function vGd(a,b){return tGd(this,RD(a,96),RD(b,96))};_.Fb=function wGd(a){return this===a};_.Oe=function xGd(){return new Frb(this)};var X5=sfb(jze,'PropertyHolderComparator',671);feb(709,1,Ave,QGd);_.Nb=function RGd(a){Ztb(this,a)};_.Pb=function TGd(){return PGd(this)};_.Qb=function UGd(){$tb()};_.Ob=function SGd(){return !!this.a};var Z5=sfb(KIe,'ElkGraphUtil/AncestorIterator',709);var Y6=ufb(sIe,'EList');feb(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1});_.bd=function hHd(a,b){VGd(this,a,b)};_.Fc=function iHd(a){return WGd(this,a)};_.cd=function jHd(a,b){return XGd(this,a,b)};_.Gc=function kHd(a){return YGd(this,a)};_.Ii=function lHd(){return new yMd(this)};_.Ji=function mHd(){return new BMd(this)};_.Ki=function nHd(a){return ZGd(this,a)};_.Li=function oHd(){return true};_.Mi=function pHd(a,b){};_.Ni=function qHd(){};_.Oi=function rHd(a,b){$Gd(this,a,b)};_.Pi=function sHd(a,b,c){};_.Qi=function tHd(a,b){};_.Ri=function uHd(a,b,c){};_.Fb=function vHd(a){return _Gd(this,a)};_.Hb=function wHd(){return cHd(this)};_.Si=function xHd(){return false};_.Kc=function yHd(){return new dMd(this)};_.ed=function zHd(){return new mMd(this)};_.fd=function AHd(a){var b;b=this.gc();if(a<0||a>b)throw Adb(new aMd(a,b));return new nMd(this,a)};_.Ui=function BHd(a,b){this.Ti(a,this.dd(b))};_.Mc=function CHd(a){return dHd(this,a)};_.Wi=function DHd(a,b){return b};_.hd=function EHd(a,b){return eHd(this,a,b)};_.Ib=function FHd(){return fHd(this)};_.Yi=function GHd(){return true};_.Zi=function HHd(a,b){return gHd(this,b)};var u6=sfb(sIe,'AbstractEList',70);feb(66,70,PIe,YHd,ZHd,$Hd);_.Ei=function _Hd(a,b){return IHd(this,a,b)};_.Fi=function aId(a){return JHd(this,a)};_.Gi=function bId(a,b){KHd(this,a,b)};_.Hi=function cId(a){LHd(this,a)};_.$i=function dId(a){return NHd(this,a)};_.$b=function eId(){OHd(this)};_.Hc=function fId(a){return PHd(this,a)};_.Xb=function gId(a){return QHd(this,a)};_._i=function hId(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b<a&&(b=a);this.g=this.aj(b);d!=null&&hib(d,0,this.g,0,this.i)}};_.dd=function iId(a){return RHd(this,a)};_.dc=function jId(){return this.i==0};_.Ti=function kId(a,b){return SHd(this,a,b)};_.aj=function lId(a){return $C(jJ,rve,1,a,5,1)};_.Vi=function mId(a){return this.g[a]};_.gd=function nId(a){return THd(this,a)};_.Xi=function oId(a,b){return UHd(this,a,b)};_.gc=function pId(){return this.i};_.Pc=function qId(){return WHd(this)};_.Qc=function rId(a){return XHd(this,a)};_.i=0;var D6=sfb(sIe,'BasicEList',66);var a7=ufb(sIe,'TreeIterator');feb(708,66,QIe);_.Nb=function vId(a){Ztb(this,a)};_.Ob=function wId(){return this.g==null&&!this.c?sId(this):this.g==null||this.i!=0&&RD(this.g[this.i-1],51).Ob()};_.Pb=function xId(){return tId(this)};_.Qb=function yId(){if(!this.e){throw Adb(new dgb('There is no valid object to remove.'))}this.e.Qb()};_.c=false;var v6=sfb(sIe,'AbstractTreeIterator',708);feb(700,708,QIe,zId);_.bj=function AId(a){var b;b=RD(a,58).Gh().Kc();ZD(b,287)&&RD(b,287).wl(new BId);return b};var _5=sfb(KIe,'ElkGraphUtil/PropertiesSkippingTreeIterator',700);feb(965,1,{},BId);var $5=sfb(KIe,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',965);var CId,DId;var b6=sfb(KIe,'ElkReflect',null);feb(901,1,CGe,JId);_.Rg=function KId(a){return EId(),Asb(RD(a,181))};var a6=sfb(KIe,'ElkReflect/lambda$0$Type',901);var LId;var _6=ufb(sIe,'ResourceLocator');feb(1065,1,{});var S6=sfb(sIe,'DelegatingResourceLocator',1065);feb(1066,1065,{});var c6=sfb('org.eclipse.emf.common','EMFPlugin',1066);var d6=ufb(DJe,'Adapter');var e6=ufb(DJe,'Notification');feb(1174,1,EJe);_.cj=function VId(){return this.d};_.dj=function WId(a){};_.ej=function XId(a){this.d=a};_.fj=function YId(a){this.d==a&&(this.d=null)};_.d=null;var f6=sfb(JHe,'AdapterImpl',1174);feb(2093,70,FJe);_.Ei=function dJd(a,b){return ZId(this,a,b)};_.Fi=function eJd(a){var b,c,d;++this.j;if(a.dc()){return false}else{b=this.Ej();for(d=a.Kc();d.Ob();){c=d.Pb();this.rj(this.Zi(b,c));++b}return true}};_.Gi=function fJd(a,b){$Id(this,a,b)};_.Hi=function gJd(a){_Id(this,a)};_.pj=function hJd(){return this.sj()};_.$b=function iJd(){aJd(this,this.Ej(),this.Fj())};_.Hc=function jJd(a){return this.uj(a)};_.Ic=function kJd(a){return this.vj(a)};_.qj=function lJd(a,b){this.Bj().Um()};_.rj=function mJd(a){this.Bj().Um()};_.sj=function nJd(){return this.Bj()};_.tj=function oJd(){this.Bj().Um()};_.uj=function pJd(a){return this.Bj().Um()};_.vj=function qJd(a){return this.Bj().Um()};_.wj=function rJd(a){return this.Bj().Um()};_.xj=function sJd(a){return this.Bj().Um()};_.yj=function tJd(){return this.Bj().Um()};_.zj=function uJd(a){return this.Bj().Um()};_.Aj=function vJd(){return this.Bj().Um()};_.Cj=function wJd(a){return this.Bj().Um()};_.Dj=function xJd(a,b){return this.Bj().Um()};_.Ej=function yJd(){return this.Bj().Um()};_.Fj=function zJd(){return this.Bj().Um()};_.Gj=function AJd(a){return this.Bj().Um()};_.Hj=function BJd(){return this.Bj().Um()};_.Fb=function CJd(a){return this.wj(a)};_.Xb=function DJd(a){return this.Wi(a,this.xj(a))};_.Hb=function EJd(){return this.yj()};_.dd=function FJd(a){return this.zj(a)};_.dc=function GJd(){return this.Aj()};_.Ti=function HJd(a,b){return bJd(this,a,b)};_.Vi=function IJd(a){return this.xj(a)};_.gd=function JJd(a){return cJd(this,a)};_.Mc=function KJd(a){var b;b=this.dd(a);if(b>=0){this.gd(b);return true}else{return false}};_.Xi=function LJd(a,b){return this.Dj(a,this.Zi(a,b))};_.gc=function MJd(){return this.Ej()};_.Pc=function NJd(){return this.Fj()};_.Qc=function OJd(a){return this.Gj(a)};_.Ib=function PJd(){return this.Hj()};var R6=sfb(sIe,'DelegatingEList',2093);feb(2094,2093,FJe);_.Ei=function XJd(a,b){return QJd(this,a,b)};_.Fi=function YJd(a){return this.Ei(this.Ej(),a)};_.Gi=function ZJd(a,b){RJd(this,a,b)};_.Hi=function $Jd(a){SJd(this,a)};_.Li=function _Jd(){return !this.Mj()};_.$b=function aKd(){VJd(this)};_.Ij=function bKd(a,b,c,d,e){return new aLd(this,a,b,c,d,e)};_.Jj=function cKd(a){qvd(this.jj(),a)};_.Kj=function dKd(){return null};_.Lj=function eKd(){return -1};_.jj=function fKd(){return null};_.Mj=function gKd(){return false};_.Nj=function hKd(a,b){return b};_.Oj=function iKd(a,b){return b};_.Pj=function jKd(){return false};_.Qj=function kKd(){return !this.Aj()};_.Ti=function lKd(a,b){var c,d;if(this.Pj()){d=this.Qj();c=bJd(this,a,b);this.Jj(this.Ij(7,sgb(b),c,a,d));return c}else{return bJd(this,a,b)}};_.gd=function mKd(a){var b,c,d,e;if(this.Pj()){c=null;d=this.Qj();b=this.Ij(4,e=cJd(this,a),null,a,d);if(this.Mj()&&!!e){c=this.Oj(e,c);if(!c){this.Jj(b)}else{c.nj(b);c.oj()}}else{if(!c){this.Jj(b)}else{c.nj(b);c.oj()}}return e}else{e=cJd(this,a);if(this.Mj()&&!!e){c=this.Oj(e,null);!!c&&c.oj()}return e}};_.Xi=function nKd(a,b){return WJd(this,a,b)};var i6=sfb(JHe,'DelegatingNotifyingListImpl',2094);feb(152,1,GJe);_.nj=function PKd(a){return oKd(this,a)};_.oj=function QKd(){pKd(this)};_.gj=function RKd(){return this.d};_.Kj=function SKd(){return null};_.Rj=function TKd(){return null};_.hj=function UKd(a){return -1};_.ij=function VKd(){return yKd(this)};_.jj=function WKd(){return null};_.kj=function XKd(){return HKd(this)};_.lj=function YKd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.Sj=function ZKd(){return false};_.mj=function $Kd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.gj();switch(e){case 1:case 2:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){this.g=a.ij();a.gj()==1&&(this.d=1);return true}}}}case 4:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){j=JKd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.lj();this.d=6;l=new ZHd(2);if(i<=g){WGd(l,this.n);WGd(l,a.kj());this.g=cD(WC(kE,1),Pwe,28,15,[this.o=i,g+1])}else{WGd(l,a.kj());WGd(l,this.n);this.g=cD(WC(kE,1),Pwe,28,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){j=JKd(this);g=a.lj();k=RD(this.g,53);d=$C(kE,Pwe,28,k.length+1,15,1);b=0;while(b<k.length){h=k[b];if(h<=g){d[b++]=h;++g}else{break}}c=RD(this.n,15);c.bd(b,a.kj());d[b]=g;while(++b<d.length){d[b]=k[b-1]}this.g=d;j||(this.o=-2-d[0]);return true}break}}break}}return false};_.Ib=function _Kd(){var a,b,c,d;d=new Shb(nfb(this.Rm)+'@'+(b=tb(this)>>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Lhb(d,this.d);break}}IKd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Lhb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Mhb(d,this.jj());d.a+=', feature: ';Mhb(d,this.Kj());d.a+=', oldValue: ';Mhb(d,HKd(this));d.a+=', newValue: ';if(this.d==6&&ZD(this.g,53)){c=RD(this.g,53);d.a+='[';for(a=0;a<c.length;){d.a+=c[a];++a<c.length&&(d.a+=pve,d)}d.a+=']'}else{Mhb(d,yKd(this))}d.a+=', isTouch: ';Ohb(d,IKd(this));d.a+=', wasSet: ';Ohb(d,JKd(this));d.a+=')';return d.a};_.d=0;_.e=0;_.f=0;_.j=0;_.k=0;_.o=0;_.p=0;var k6=sfb(JHe,'NotificationImpl',152);feb(1188,152,GJe,aLd);_.Kj=function bLd(){return this.a.Kj()};_.hj=function cLd(a){return this.a.Lj()};_.jj=function dLd(){return this.a.jj()};var h6=sfb(JHe,'DelegatingNotifyingListImpl/1',1188);feb(251,66,PIe,fLd,gLd);_.Fc=function hLd(a){return eLd(this,RD(a,378))};_.nj=function iLd(a){return eLd(this,a)};_.oj=function jLd(){var a,b,c;for(a=0;a<this.i;++a){b=RD(this.g[a],378);c=b.jj();c!=null&&b.gj()!=-1&&RD(c,94).xh(b)}};_.aj=function kLd(a){return $C(e6,rve,378,a,0,1)};var j6=sfb(JHe,'NotificationChainImpl',251);feb(1524,93,IHe);_.uh=function lLd(){return this.e};_.wh=function mLd(){return (this.f&1)!=0};_.f=1;var l6=sfb(JHe,'NotifierImpl',1524);feb(2091,66,PIe);_.Ei=function yLd(a,b){return nLd(this,a,b)};_.Fi=function zLd(a){return this.Ei(this.i,a)};_.Gi=function ALd(a,b){oLd(this,a,b)};_.Hi=function BLd(a){pLd(this,a)};_.Li=function CLd(){return !this.Mj()};_.$b=function DLd(){sLd(this)};_.Ij=function ELd(a,b,c,d,e){return new VLd(this,a,b,c,d,e)};_.Jj=function FLd(a){qvd(this.jj(),a)};_.Kj=function GLd(){return null};_.Lj=function HLd(){return -1};_.jj=function ILd(){return null};_.Mj=function JLd(){return false};_.Tj=function KLd(){return false};_.Nj=function LLd(a,b){return b};_.Oj=function MLd(a,b){return b};_.Pj=function NLd(){return false};_.Qj=function OLd(){return this.i!=0};_.Ti=function PLd(a,b){return uLd(this,a,b)};_.gd=function QLd(a){return vLd(this,a)};_.Xi=function RLd(a,b){return xLd(this,a,b)};_.Uj=function SLd(a,b){return b};_.Vj=function TLd(a,b){return b};_.Wj=function ULd(a,b,c){return c};var n6=sfb(JHe,'NotifyingListImpl',2091);feb(1187,152,GJe,VLd);_.Kj=function WLd(){return this.a.Kj()};_.hj=function XLd(a){return this.a.Lj()};_.jj=function YLd(){return this.a.jj()};var m6=sfb(JHe,'NotifyingListImpl/1',1187);feb(966,66,PIe,ZLd);_.Hc=function $Ld(a){if(this.i>10){if(!this.b||this.c.j!=this.a){this.b=new btb(this);this.a=this.j}return Zsb(this.b,a)}else{return PHd(this,a)}};_.Yi=function _Ld(){return true};_.a=0;var o6=sfb(sIe,'AbstractEList/1',966);feb(301,77,lxe,aMd);var p6=sfb(sIe,'AbstractEList/BasicIndexOutOfBoundsException',301);feb(40,1,Ave,dMd);_.Nb=function gMd(a){Ztb(this,a)};_.Xj=function eMd(){if(this.i.j!=this.f){throw Adb(new Jrb)}};_.Yj=function fMd(){return bMd(this)};_.Ob=function hMd(){return this.e!=this.i.gc()};_.Pb=function iMd(){return this.Yj()};_.Qb=function jMd(){cMd(this)};_.e=0;_.f=0;_.g=-1;var q6=sfb(sIe,'AbstractEList/EIterator',40);feb(286,40,Jve,mMd,nMd);_.Qb=function vMd(){cMd(this)};_.Rb=function oMd(a){kMd(this,a)};_.Zj=function pMd(){var b;try{b=this.d.Xb(--this.e);this.Xj();this.g=this.e;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.$j=function qMd(a){lMd(this,a)};_.Sb=function rMd(){return this.e!=0};_.Tb=function sMd(){return this.e};_.Ub=function tMd(){return this.Zj()};_.Vb=function uMd(){return this.e-1};_.Wb=function wMd(a){this.$j(a)};var r6=sfb(sIe,'AbstractEList/EListIterator',286);feb(355,40,Ave,yMd);_.Yj=function zMd(){return xMd(this)};_.Qb=function AMd(){throw Adb(new jib)};var s6=sfb(sIe,'AbstractEList/NonResolvingEIterator',355);feb(398,286,Jve,BMd,CMd);_.Rb=function DMd(a){throw Adb(new jib)};_.Yj=function EMd(){var b;try{b=this.c.Vi(this.e);this.Xj();this.g=this.e++;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.Zj=function FMd(){var b;try{b=this.c.Vi(--this.e);this.Xj();this.g=this.e;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.Qb=function GMd(){throw Adb(new jib)};_.Wb=function HMd(a){throw Adb(new jib)};var t6=sfb(sIe,'AbstractEList/NonResolvingEListIterator',398);feb(2080,70,JJe);_.Ei=function PMd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=RD(Ywd(this.a,4),129);k=j==null?0:j.length;m=k+e;d=NMd(this,m);l=k-a;l>0&&hib(j,a,d,a+e,l);i=b.Kc();for(g=0;g<e;++g){h=i.Pb();c=a+g;LMd(d,c,gHd(this,h))}Bde(this,d);for(f=0;f<e;++f){h=d[a];this.Mi(a,h);++a}return true}else{++this.j;return false}};_.Fi=function QMd(a){var b,c,d,e,f,g,h,i,j;d=a.gc();if(d!=0){i=(c=RD(Ywd(this.a,4),129),c==null?0:c.length);j=i+d;b=NMd(this,j);h=a.Kc();for(f=i;f<j;++f){g=h.Pb();LMd(b,f,gHd(this,g))}Bde(this,b);for(e=i;e<j;++e){g=b[e];this.Mi(e,g)}return true}else{++this.j;return false}};_.Gi=function RMd(a,b){var c,d,e,f;d=RD(Ywd(this.a,4),129);e=d==null?0:d.length;c=NMd(this,e+1);f=gHd(this,b);a!=e&&hib(d,a,c,a+1,e-a);bD(c,a,f);Bde(this,c);this.Mi(a,b)};_.Hi=function SMd(a){var b,c,d;d=(c=RD(Ywd(this.a,4),129),c==null?0:c.length);b=NMd(this,d+1);LMd(b,d,gHd(this,a));Bde(this,b);this.Mi(d,a)};_.Ii=function TMd(){return new sNd(this)};_.Ji=function UMd(){return new vNd(this)};_.Ki=function VMd(a){var b,c;c=(b=RD(Ywd(this.a,4),129),b==null?0:b.length);if(a<0||a>c)throw Adb(new aMd(a,c));return new wNd(this,a)};_.$b=function WMd(){var a,b;++this.j;a=RD(Ywd(this.a,4),129);b=a==null?0:a.length;Bde(this,null);$Gd(this,b,a)};_.Hc=function XMd(a){var b,c,d,e,f;b=RD(Ywd(this.a,4),129);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(pb(a,c)){return true}}}else{for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(dE(c)===dE(a)){return true}}}}return false};_.Xb=function YMd(a){var b,c;b=RD(Ywd(this.a,4),129);c=b==null?0:b.length;if(a>=c)throw Adb(new aMd(a,c));return b[a]};_.dd=function ZMd(a){var b,c,d;b=RD(Ywd(this.a,4),129);if(b!=null){if(a!=null){for(c=0,d=b.length;c<d;++c){if(pb(a,b[c])){return c}}}else{for(c=0,d=b.length;c<d;++c){if(dE(b[c])===dE(a)){return c}}}}return -1};_.dc=function $Md(){return RD(Ywd(this.a,4),129)==null};_.Kc=function _Md(){return new jNd(this)};_.ed=function aNd(){return new nNd(this)};_.fd=function bNd(a){var b,c;c=(b=RD(Ywd(this.a,4),129),b==null?0:b.length);if(a<0||a>c)throw Adb(new aMd(a,c));return new oNd(this,a)};_.Ti=function cNd(a,b){var c,d,e;c=MMd(this);e=c==null?0:c.length;if(a>=e)throw Adb(new veb(MIe+a+NIe+e));if(b>=e)throw Adb(new veb(OIe+b+NIe+e));d=c[b];if(a!=b){a<b?hib(c,a,c,a+1,b-a):hib(c,b+1,c,b,a-b);bD(c,a,d);Bde(this,c)}return d};_.Vi=function dNd(a){return RD(Ywd(this.a,4),129)[a]};_.gd=function eNd(a){return OMd(this,a)};_.Xi=function fNd(a,b){var c,d;c=MMd(this);d=c[a];LMd(c,a,gHd(this,b));Bde(this,c);return d};_.gc=function gNd(){var a;return a=RD(Ywd(this.a,4),129),a==null?0:a.length};_.Pc=function hNd(){var a,b,c;a=RD(Ywd(this.a,4),129);c=a==null?0:a.length;b=$C(d6,IJe,424,c,0,1);c>0&&hib(a,0,b,0,c);return b};_.Qc=function iNd(a){var b,c,d;b=RD(Ywd(this.a,4),129);d=b==null?0:b.length;if(d>0){if(a.length<d){c=IMd(rb(a).c,d);a=c}hib(b,0,a,0,d)}a.length>d&&bD(a,d,null);return a};var JMd;var A6=sfb(sIe,'ArrayDelegatingEList',2080);feb(1051,40,Ave,jNd);_.Xj=function kNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};_.Qb=function lNd(){cMd(this);this.a=RD(Ywd(this.b.a,4),129)};var w6=sfb(sIe,'ArrayDelegatingEList/EIterator',1051);feb(722,286,Jve,nNd,oNd);_.Xj=function pNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};_.$j=function qNd(a){lMd(this,a);this.a=RD(Ywd(this.b.a,4),129)};_.Qb=function rNd(){cMd(this);this.a=RD(Ywd(this.b.a,4),129)};var x6=sfb(sIe,'ArrayDelegatingEList/EListIterator',722);feb(1052,355,Ave,sNd);_.Xj=function tNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};var y6=sfb(sIe,'ArrayDelegatingEList/NonResolvingEIterator',1052);feb(723,398,Jve,vNd,wNd);_.Xj=function xNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};var z6=sfb(sIe,'ArrayDelegatingEList/NonResolvingEListIterator',723);feb(615,301,lxe,yNd);var B6=sfb(sIe,'BasicEList/BasicIndexOutOfBoundsException',615);feb(710,66,PIe,zNd);_.bd=function ANd(a,b){throw Adb(new jib)};_.Fc=function BNd(a){throw Adb(new jib)};_.cd=function CNd(a,b){throw Adb(new jib)};_.Gc=function DNd(a){throw Adb(new jib)};_.$b=function ENd(){throw Adb(new jib)};_._i=function FNd(a){throw Adb(new jib)};_.Kc=function GNd(){return this.Ii()};_.ed=function HNd(){return this.Ji()};_.fd=function INd(a){return this.Ki(a)};_.Ti=function JNd(a,b){throw Adb(new jib)};_.Ui=function KNd(a,b){throw Adb(new jib)};_.gd=function LNd(a){throw Adb(new jib)};_.Mc=function MNd(a){throw Adb(new jib)};_.hd=function NNd(a,b){throw Adb(new jib)};var C6=sfb(sIe,'BasicEList/UnmodifiableEList',710);feb(721,1,{3:1,20:1,16:1,15:1,61:1,597:1});_.bd=function mOd(a,b){ONd(this,a,RD(b,44))};_.Fc=function nOd(a){return PNd(this,RD(a,44))};_.Jc=function vOd(a){xgb(this,a)};_.Xb=function wOd(a){return RD(QHd(this.c,a),136)};_.Ti=function FOd(a,b){return RD(this.c.Ti(a,b),44)};_.Ui=function GOd(a,b){eOd(this,a,RD(b,44))};_.Lc=function JOd(){return new SDb(null,new Swb(this,16))};_.gd=function KOd(a){return RD(this.c.gd(a),44)};_.hd=function MOd(a,b){return kOd(this,a,RD(b,44))};_.jd=function OOd(a){tvb(this,a)};_.Nc=function POd(){return new Swb(this,16)};_.Oc=function QOd(){return new SDb(null,new Swb(this,16))};_.cd=function oOd(a,b){return this.c.cd(a,b)};_.Gc=function pOd(a){return this.c.Gc(a)};_.$b=function qOd(){this.c.$b()};_.Hc=function rOd(a){return this.c.Hc(a)};_.Ic=function sOd(a){return Be(this.c,a)};_._j=function tOd(){var a,b,c;if(this.d==null){this.d=$C(D6,KJe,66,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=RD(b.Yj(),136);UNd(this,a)}this.e=c}};_.Fb=function uOd(a){return ZNd(this,a)};_.Hb=function xOd(){return cHd(this.c)};_.dd=function yOd(a){return this.c.dd(a)};_.ak=function zOd(){this.c=new YOd(this)};_.dc=function AOd(){return this.f==0};_.Kc=function BOd(){return this.c.Kc()};_.ed=function COd(){return this.c.ed()};_.fd=function DOd(a){return this.c.fd(a)};_.bk=function EOd(){return dOd(this)};_.ck=function HOd(a,b,c){return new ZPd(a,b,c)};_.dk=function IOd(){return new cPd};_.Mc=function LOd(a){return hOd(this,a)};_.gc=function NOd(){return this.f};_.kd=function ROd(a,b){return new Rkb(this.c,a,b)};_.Pc=function SOd(){return this.c.Pc()};_.Qc=function TOd(a){return this.c.Qc(a)};_.Ib=function UOd(){return fHd(this.c)};_.e=0;_.f=0;var Q6=sfb(sIe,'BasicEMap',721);feb(1046,66,PIe,YOd);_.Mi=function ZOd(a,b){VOd(this,RD(b,136))};_.Pi=function _Od(a,b,c){var d;++(d=this,RD(b,136),d).a.e};_.Qi=function aPd(a,b){WOd(this,RD(b,136))};_.Ri=function bPd(a,b,c){XOd(this,RD(b,136),RD(c,136))};_.Oi=function $Od(a,b){TNd(this.a)};var E6=sfb(sIe,'BasicEMap/1',1046);feb(1047,66,PIe,cPd);_.aj=function dPd(a){return $C(N6,LJe,621,a,0,1)};var F6=sfb(sIe,'BasicEMap/2',1047);feb(1048,Eve,Fve,ePd);_.$b=function fPd(){this.a.c.$b()};_.Hc=function gPd(a){return QNd(this.a,a)};_.Kc=function hPd(){return this.a.f==0?(jQd(),iQd.a):new DPd(this.a)};_.Mc=function iPd(a){var b;b=this.a.f;jOd(this.a,a);return this.a.f!=b};_.gc=function jPd(){return this.a.f};var G6=sfb(sIe,'BasicEMap/3',1048);feb(1049,31,Dve,kPd);_.$b=function lPd(){this.a.c.$b()};_.Hc=function mPd(a){return RNd(this.a,a)};_.Kc=function nPd(){return this.a.f==0?(jQd(),iQd.a):new FPd(this.a)};_.gc=function oPd(){return this.a.f};var H6=sfb(sIe,'BasicEMap/4',1049);feb(1050,Eve,Fve,qPd);_.$b=function rPd(){this.a.c.$b()};_.Hc=function sPd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&ZD(a,44)){this.a._j();i=RD(a,44);h=i.ld();e=h==null?0:tb(h);f=bOd(this.a,e);b=this.a.d[f];if(b){c=RD(b.g,379);j=b.i;for(g=0;g<j;++g){d=c[g];if(d.Bi()==e&&d.Fb(i)){return true}}}}return false};_.Kc=function tPd(){return this.a.f==0?(jQd(),iQd.a):new xPd(this.a)};_.Mc=function uPd(a){return pPd(this,a)};_.gc=function vPd(){return this.a.f};var I6=sfb(sIe,'BasicEMap/5',1050);feb(622,1,Ave,xPd);_.Nb=function yPd(a){Ztb(this,a)};_.Ob=function zPd(){return this.b!=-1};_.Pb=function APd(){var a;if(this.f.e!=this.c){throw Adb(new Jrb)}if(this.b==-1){throw Adb(new Dvb)}this.d=this.a;this.e=this.b;wPd(this);a=RD(this.f.d[this.d].g[this.e],136);return this.ek(a)};_.Qb=function BPd(){if(this.f.e!=this.c){throw Adb(new Jrb)}if(this.e==-1){throw Adb(new cgb)}this.f.c.Mc(QHd(this.f.d[this.d],this.e));this.c=this.f.e;this.e=-1;this.a==this.d&&this.b!=-1&&--this.b};_.ek=function CPd(a){return a};_.a=0;_.b=-1;_.c=0;_.d=0;_.e=0;var J6=sfb(sIe,'BasicEMap/BasicEMapIterator',622);feb(1044,622,Ave,DPd);_.ek=function EPd(a){return a.ld()};var K6=sfb(sIe,'BasicEMap/BasicEMapKeyIterator',1044);feb(1045,622,Ave,FPd);_.ek=function GPd(a){return a.md()};var L6=sfb(sIe,'BasicEMap/BasicEMapValueIterator',1045);feb(1043,1,Cve,IPd);_.wc=function OPd(a){Bvb(this,a)};_.yc=function TPd(a,b,c){return Cvb(this,a,b,c)};_.$b=function JPd(){this.a.c.$b()};_._b=function KPd(a){return HPd(this,a)};_.uc=function LPd(a){return RNd(this.a,a)};_.vc=function MPd(){return YNd(this.a)};_.Fb=function NPd(a){return ZNd(this.a,a)};_.xc=function PPd(a){return $Nd(this.a,a)};_.Hb=function QPd(){return cHd(this.a.c)};_.dc=function RPd(){return this.a.f==0};_.ec=function SPd(){return cOd(this.a)};_.zc=function UPd(a,b){return fOd(this.a,a,b)};_.Bc=function VPd(a){return jOd(this.a,a)};_.gc=function WPd(){return this.a.f};_.Ib=function XPd(){return fHd(this.a.c)};_.Cc=function YPd(){return lOd(this.a)};var M6=sfb(sIe,'BasicEMap/DelegatingMap',1043);feb(621,1,{44:1,136:1,621:1},ZPd);_.Fb=function $Pd(a){var b;if(ZD(a,44)){b=RD(a,44);return (this.b!=null?pb(this.b,b.ld()):dE(this.b)===dE(b.ld()))&&(this.c!=null?pb(this.c,b.md()):dE(this.c)===dE(b.md()))}else{return false}};_.Bi=function _Pd(){return this.a};_.ld=function aQd(){return this.b};_.md=function bQd(){return this.c};_.Hb=function cQd(){return this.a^(this.c==null?0:tb(this.c))};_.Ci=function dQd(a){this.a=a};_.Di=function eQd(a){throw Adb(new xz)};_.nd=function fQd(a){var b;b=this.c;this.c=a;return b};_.Ib=function gQd(){return this.b+'->'+this.c};_.a=0;var N6=sfb(sIe,'BasicEMap/EntryImpl',621);feb(546,1,{},hQd);var P6=sfb(sIe,'BasicEMap/View',546);var iQd;feb(783,1,{});_.Fb=function xQd(a){return Rt((yob(),vob),a)};_.Hb=function yQd(){return Cob((yob(),vob))};_.Ib=function zQd(){return Fe((yob(),vob))};var V6=sfb(sIe,'ECollections/BasicEmptyUnmodifiableEList',783);feb(1348,1,Jve,AQd);_.Nb=function CQd(a){Ztb(this,a)};_.Rb=function BQd(a){throw Adb(new jib)};_.Ob=function DQd(){return false};_.Sb=function EQd(){return false};_.Pb=function FQd(){throw Adb(new Dvb)};_.Tb=function GQd(){return 0};_.Ub=function HQd(){throw Adb(new Dvb)};_.Vb=function IQd(){return -1};_.Qb=function JQd(){throw Adb(new jib)};_.Wb=function KQd(a){throw Adb(new jib)};var U6=sfb(sIe,'ECollections/BasicEmptyUnmodifiableEList/1',1348);feb(1346,783,{20:1,16:1,15:1,61:1},LQd);_.bd=function MQd(a,b){mQd()};_.Fc=function NQd(a){return nQd()};_.cd=function OQd(a,b){return oQd()};_.Gc=function PQd(a){return pQd()};_.$b=function QQd(){qQd()};_.Hc=function RQd(a){return false};_.Ic=function SQd(a){return false};_.Jc=function TQd(a){xgb(this,a)};_.Xb=function UQd(a){return Iob((yob(),vob,a)),null};_.dd=function VQd(a){return -1};_.dc=function WQd(){return true};_.Kc=function XQd(){return this.a};_.ed=function YQd(){return this.a};_.fd=function ZQd(a){return this.a};_.Ti=function $Qd(a,b){return rQd()};_.Ui=function _Qd(a,b){sQd()};_.Lc=function aRd(){return new SDb(null,new Swb(this,16))};_.gd=function bRd(a){return tQd()};_.Mc=function cRd(a){return uQd()};_.hd=function dRd(a,b){return vQd()};_.gc=function eRd(){return 0};_.jd=function fRd(a){tvb(this,a)};_.Nc=function gRd(){return new Swb(this,16)};_.Oc=function hRd(){return new SDb(null,new Swb(this,16))};_.kd=function iRd(a,b){return yob(),new Rkb(vob,a,b)};_.Pc=function jRd(){return De((yob(),vob))};_.Qc=function kRd(a){return yob(),Ee(vob,a)};var W6=sfb(sIe,'ECollections/EmptyUnmodifiableEList',1346);feb(1347,783,{20:1,16:1,15:1,61:1,597:1},lRd);_.bd=function mRd(a,b){mQd()};_.Fc=function nRd(a){return nQd()};_.cd=function oRd(a,b){return oQd()};_.Gc=function pRd(a){return pQd()};_.$b=function qRd(){qQd()};_.Hc=function rRd(a){return false};_.Ic=function sRd(a){return false};_.Jc=function tRd(a){xgb(this,a)};_.Xb=function uRd(a){return Iob((yob(),vob,a)),null};_.dd=function vRd(a){return -1};_.dc=function wRd(){return true};_.Kc=function xRd(){return this.a};_.ed=function yRd(){return this.a};_.fd=function zRd(a){return this.a};_.Ti=function BRd(a,b){return rQd()};_.Ui=function CRd(a,b){sQd()};_.Lc=function DRd(){return new SDb(null,new Swb(this,16))};_.gd=function ERd(a){return tQd()};_.Mc=function FRd(a){return uQd()};_.hd=function GRd(a,b){return vQd()};_.gc=function HRd(){return 0};_.jd=function IRd(a){tvb(this,a)};_.Nc=function JRd(){return new Swb(this,16)};_.Oc=function KRd(){return new SDb(null,new Swb(this,16))};_.kd=function LRd(a,b){return yob(),new Rkb(vob,a,b)};_.Pc=function MRd(){return De((yob(),vob))};_.Qc=function NRd(a){return yob(),Ee(vob,a)};_.bk=function ARd(){return yob(),yob(),wob};var X6=sfb(sIe,'ECollections/EmptyUnmodifiableEMap',1347);var Z6=ufb(sIe,'Enumerator');var ORd;feb(288,1,{288:1},lSd);_.Fb=function pSd(a){var b;if(this===a)return true;if(!ZD(a,288))return false;b=RD(a,288);return this.f==b.f&&rSd(this.i,b.i)&&qSd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&qSd(this.d,b.d)&&qSd(this.g,b.g)&&qSd(this.e,b.e)&&iSd(this,b)};_.Hb=function uSd(){return this.f};_.Ib=function CSd(){return jSd(this)};_.f=0;var SRd=0,TRd=0,URd=0,VRd=0,WRd=0,XRd=0,YRd=0,ZRd=0,$Rd=0,_Rd,aSd=0,bSd=0,cSd=0,dSd=0,eSd,fSd;var c7=sfb(sIe,'URI',288);feb(1121,45,Hxe,MSd);_.zc=function NSd(a,b){return RD($jb(this,WD(a),RD(b,288)),288)};var b7=sfb(sIe,'URI/URICache',1121);feb(505,66,PIe,OSd,PSd);_.Si=function QSd(){return true};var d7=sfb(sIe,'UniqueEList',505);feb(590,63,swe,RSd);var e7=sfb(sIe,'WrappedException',590);var f7=ufb(vHe,OJe);var A7=ufb(vHe,PJe);var y7=ufb(vHe,QJe);var g7=ufb(vHe,RJe);var i7=ufb(vHe,SJe);var h7=ufb(vHe,'EClass');var k7=ufb(vHe,'EDataType');var SSd;feb(1233,45,Hxe,VSd);_.xc=function WSd(a){return bE(a)?Xjb(this,a):Wd(qtb(this.f,a))};var j7=sfb(vHe,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1233);var m7=ufb(vHe,'EEnum');var l7=ufb(vHe,TJe);var o7=ufb(vHe,UJe);var s7=ufb(vHe,VJe);var XSd;var u7=ufb(vHe,WJe);var v7=ufb(vHe,XJe);feb(1042,1,{},_Sd);_.Ib=function aTd(){return 'NIL'};var w7=sfb(vHe,'EStructuralFeature/Internal/DynamicValueHolder/1',1042);var bTd;feb(1041,45,Hxe,eTd);_.xc=function fTd(a){return bE(a)?Xjb(this,a):Wd(qtb(this.f,a))};var x7=sfb(vHe,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1041);var z7=ufb(vHe,YJe);var B7=ufb(vHe,'EValidator/PatternMatcher');var gTd;var iTd;var kTd;var mTd,nTd,oTd,pTd,qTd,rTd,sTd,tTd,uTd,vTd,wTd,xTd,yTd,zTd,ATd,BTd,CTd,DTd,ETd,FTd,GTd,HTd,ITd;var Jbb=ufb(ZJe,'FeatureMap/Entry');feb(545,1,{76:1},KTd);_.Lk=function LTd(){return this.a};_.md=function MTd(){return this.b};var C7=sfb(SHe,'BasicEObjectImpl/1',545);feb(1040,1,$Je,NTd);_.Fk=function OTd(a){return Fvd(this.a,this.b,a)};_.Qj=function PTd(){return Lvd(this.a,this.b)};_.Wb=function QTd(a){Xvd(this.a,this.b,a)};_.Gk=function RTd(){_vd(this.a,this.b)};var D7=sfb(SHe,'BasicEObjectImpl/4',1040);feb(2081,1,{114:1});_.Mk=function UTd(a){this.e=a==0?STd:$C(jJ,rve,1,a,5,1)};_.li=function VTd(a){return this.e[a]};_.mi=function WTd(a,b){this.e[a]=b};_.ni=function XTd(a){this.e[a]=null};_.Nk=function YTd(){return this.c};_.Ok=function ZTd(){throw Adb(new jib)};_.Pk=function $Td(){throw Adb(new jib)};_.Qk=function _Td(){return this.d};_.Rk=function aUd(){return this.e!=null};_.Sk=function bUd(a){this.c=a};_.Tk=function cUd(a){throw Adb(new jib)};_.Uk=function dUd(a){throw Adb(new jib)};_.Vk=function eUd(a){this.d=a};var STd;var E7=sfb(SHe,'BasicEObjectImpl/EPropertiesHolderBaseImpl',2081);feb(192,2081,{114:1},fUd);_.Ok=function gUd(){return this.a};_.Pk=function hUd(){return this.b};_.Tk=function iUd(a){this.a=a};_.Uk=function jUd(a){this.b=a};var F7=sfb(SHe,'BasicEObjectImpl/EPropertiesHolderImpl',192);feb(516,99,RHe,kUd);_.uh=function lUd(){return this.f};_.zh=function mUd(){return this.k};_.Bh=function nUd(a,b){this.g=a;this.i=b};_.Dh=function oUd(){return (this.j&2)==0?this.ii():this.$h().Nk()};_.Fh=function pUd(){return this.i};_.wh=function qUd(){return (this.j&1)!=0};_.Ph=function rUd(){return this.g};_.Vh=function sUd(){return (this.j&4)!=0};_.$h=function tUd(){return !this.k&&(this.k=new fUd),this.k};_.ci=function uUd(a){this.$h().Sk(a);a?(this.j|=2):(this.j&=-3)};_.ei=function vUd(a){this.$h().Uk(a);a?(this.j|=4):(this.j&=-5)};_.ii=function wUd(){return (lTd(),kTd).S};_.i=0;_.j=1;var q8=sfb(SHe,'EObjectImpl',516);feb(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},zUd);_.li=function AUd(a){return this.e[a]};_.mi=function BUd(a,b){this.e[a]=b};_.ni=function CUd(a){this.e[a]=null};_.Dh=function DUd(){return this.d};_.Ih=function EUd(a){return BYd(this.d,a)};_.Kh=function FUd(){return this.d};_.Oh=function GUd(){return this.e!=null};_.$h=function HUd(){!this.k&&(this.k=new VUd);return this.k};_.ci=function IUd(a){this.d=a};_.hi=function JUd(){var a;if(this.e==null){a=AYd(this.d);this.e=a==0?xUd:$C(jJ,rve,1,a,5,1)}return this};_.ji=function KUd(){return 0};var xUd;var J7=sfb(SHe,'DynamicEObjectImpl',798);feb(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},LUd);_.Fb=function NUd(a){return this===a};_.Hb=function RUd(){return kFb(this)};_.ci=function MUd(a){this.d=a;this.b=wYd(a,'key');this.c=wYd(a,aIe)};_.Bi=function OUd(){var a;if(this.a==-1){a=Gvd(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.ld=function PUd(){return Gvd(this,this.b)};_.md=function QUd(){return Gvd(this,this.c)};_.Ci=function SUd(a){this.a=a};_.Di=function TUd(a){Xvd(this,this.b,a)};_.nd=function UUd(a){var b;b=Gvd(this,this.c);Xvd(this,this.c,a);return b};_.a=0;var H7=sfb(SHe,'DynamicEObjectImpl/BasicEMapEntry',1522);feb(1523,1,{114:1},VUd);_.Mk=function WUd(a){throw Adb(new jib)};_.li=function XUd(a){throw Adb(new jib)};_.mi=function YUd(a,b){throw Adb(new jib)};_.ni=function ZUd(a){throw Adb(new jib)};_.Nk=function $Ud(){throw Adb(new jib)};_.Ok=function _Ud(){return this.a};_.Pk=function aVd(){return this.b};_.Qk=function bVd(){return this.c};_.Rk=function cVd(){throw Adb(new jib)};_.Sk=function dVd(a){throw Adb(new jib)};_.Tk=function eVd(a){this.a=a};_.Uk=function fVd(a){this.b=a};_.Vk=function gVd(a){this.c=a};var I7=sfb(SHe,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1523);feb(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},pVd);_.Ah=function qVd(a){return iVd(this,a)};_.Lh=function rVd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),this.b):(!this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),dOd(this.b));case 3:return kVd(this);case 4:return !this.a&&(this.a=new XZd(r7,this,4)),this.a;case 5:return !this.c&&(this.c=new zie(r7,this,5)),this.c;}return zvd(this,a-AYd((JTd(),mTd)),vYd((d=RD(Ywd(this,16),29),!d?mTd:d),a),b,c)};_.Sh=function sVd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?iVd(this,c):this.Cb.Th(this,-1-e,null,c)));return hVd(this,RD(a,155),c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),mTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),mTd)),a,c)};_.Uh=function tVd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 2:return !this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),BVd(this.b,a,c);case 3:return hVd(this,null,c);case 4:return !this.a&&(this.a=new XZd(r7,this,4)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),mTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),mTd)),a,c)};_.Wh=function uVd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!kVd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return Avd(this,a-AYd((JTd(),mTd)),vYd((b=RD(Ywd(this,16),29),!b?mTd:b),a))};_.bi=function vVd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:mVd(this,WD(b));return;case 2:!this.b&&(this.b=new SVd((JTd(),FTd),C8,this));CVd(this.b,b);return;case 3:lVd(this,RD(b,155));return;case 4:!this.a&&(this.a=new XZd(r7,this,4));sLd(this.a);!this.a&&(this.a=new XZd(r7,this,4));YGd(this.a,RD(b,16));return;case 5:!this.c&&(this.c=new zie(r7,this,5));sLd(this.c);!this.c&&(this.c=new zie(r7,this,5));YGd(this.c,RD(b,16));return;}Bvd(this,a-AYd((JTd(),mTd)),vYd((c=RD(Ywd(this,16),29),!c?mTd:c),a),b)};_.ii=function wVd(){return JTd(),mTd};_.ki=function xVd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:nVd(this,null);return;case 2:!this.b&&(this.b=new SVd((JTd(),FTd),C8,this));this.b.c.$b();return;case 3:lVd(this,null);return;case 4:!this.a&&(this.a=new XZd(r7,this,4));sLd(this.a);return;case 5:!this.c&&(this.c=new zie(r7,this,5));sLd(this.c);return;}Cvd(this,a-AYd((JTd(),mTd)),vYd((b=RD(Ywd(this,16),29),!b?mTd:b),a))};_.Ib=function yVd(){return oVd(this)};_.d=null;var L7=sfb(SHe,'EAnnotationImpl',519);feb(141,721,_Je,DVd);_.Gi=function EVd(a,b){zVd(this,a,RD(b,44))};_.Wk=function FVd(a,b){return AVd(this,RD(a,44),b)};_.$i=function GVd(a){return RD(RD(this.c,71).$i(a),136)};_.Ii=function HVd(){return RD(this.c,71).Ii()};_.Ji=function IVd(){return RD(this.c,71).Ji()};_.Ki=function JVd(a){return RD(this.c,71).Ki(a)};_.Xk=function KVd(a,b){return BVd(this,a,b)};_.Fk=function LVd(a){return RD(this.c,79).Fk(a)};_.ak=function MVd(){};_.Qj=function NVd(){return RD(this.c,79).Qj()};_.ck=function OVd(a,b,c){var d;d=RD(BXd(this.b).wi().si(this.b),136);d.Ci(a);d.Di(b);d.nd(c);return d};_.dk=function PVd(){return new uje(this)};_.Wb=function QVd(a){CVd(this,a)};_.Gk=function RVd(){RD(this.c,79).Gk()};var Dbb=sfb(ZJe,'EcoreEMap',141);feb(165,141,_Je,SVd);_._j=function TVd(){var a,b,c,d,e,f;if(this.d==null){f=$C(D6,KJe,66,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=RD(c.Yj(),136);d=b.Bi();e=(d&lve)%f.length;a=f[e];!a&&(a=f[e]=new uje(this));a.Fc(b)}this.d=f}};var K7=sfb(SHe,'EAnnotationImpl/1',165);feb(291,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,480:1,54:1,99:1,158:1,291:1,119:1,120:1});_.Lh=function eWd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),this.Jk()?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Uh=function fWd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function gWd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function hWd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:this.ui(WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:this.Zk(RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function iWd(){return JTd(),HTd};_.ki=function jWd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:this.ui(null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.Zk(1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function kWd(){WVd(this);this.Bb|=1};_.Hk=function lWd(){return WVd(this)};_.Ik=function mWd(){return this.t};_.Jk=function nWd(){var a;return a=this.t,a>1||a==-1};_.Si=function oWd(){return (this.Bb&512)!=0};_.Yk=function pWd(a,b){return ZVd(this,a,b)};_.Zk=function qWd(a){bWd(this,a)};_.Ib=function rWd(){return cWd(this)};_.s=0;_.t=1;var A9=sfb(SHe,'ETypedElementImpl',291);feb(461,291,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,461:1,291:1,119:1,120:1,692:1});_.Ah=function IWd(a){return sWd(this,a)};_.Lh=function JWd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),this.Jk()?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function KWd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?sWd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,17,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),f.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function LWd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 17:return xvd(this,null,17,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function MWd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function NWd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:this.Zk(RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function OWd(){return JTd(),GTd};_.ki=function PWd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.Zk(1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function QWd(){Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.pk=function RWd(){return this.f};_.ik=function SWd(){return tWd(this)};_.qk=function TWd(){return uWd(this)};_.uk=function UWd(){return null};_.$k=function VWd(){return this.k};_.Lj=function WWd(){return this.n};_.vk=function XWd(){return vWd(this)};_.wk=function YWd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=uWd(this);(c.i==null&&rYd(c),c.i).length;d=this.uk();!!d&&AYd(uWd(d));e=WVd(this);g=e.kk();a=!g?null:(g.i&1)!=0?g==xdb?QI:g==kE?bJ:g==jE?ZI:g==iE?VI:g==lE?eJ:g==wdb?lJ:g==gE?RI:SI:g;b=tWd(this);h=e.ik();Mje(this);(this.Bb&Ove)!=0&&(!!(f=Tee((lke(),jke),c))&&f!=this||!!(f=zfe(Qee(jke,this))))?(this.p=new Z6d(this,f)):this.Jk()?this.al()?!d?(this.Bb&bKe)!=0?!a?this.bl()?(this.p=new i7d(42,this)):(this.p=new i7d(0,this)):a==UK?(this.p=new g7d(50,O6,this)):this.bl()?(this.p=new g7d(43,a,this)):(this.p=new g7d(1,a,this)):!a?this.bl()?(this.p=new i7d(44,this)):(this.p=new i7d(2,this)):a==UK?(this.p=new g7d(41,O6,this)):this.bl()?(this.p=new g7d(45,a,this)):(this.p=new g7d(3,a,this)):(this.Bb&bKe)!=0?!a?this.bl()?(this.p=new j7d(46,this,d)):(this.p=new j7d(4,this,d)):this.bl()?(this.p=new h7d(47,a,this,d)):(this.p=new h7d(5,a,this,d)):!a?this.bl()?(this.p=new j7d(48,this,d)):(this.p=new j7d(6,this,d)):this.bl()?(this.p=new h7d(49,a,this,d)):(this.p=new h7d(7,a,this,d)):ZD(e,156)?a==Jbb?(this.p=new i7d(40,this)):(this.Bb&512)!=0?(this.Bb&bKe)!=0?!a?(this.p=new i7d(8,this)):(this.p=new g7d(9,a,this)):!a?(this.p=new i7d(10,this)):(this.p=new g7d(11,a,this)):(this.Bb&bKe)!=0?!a?(this.p=new i7d(12,this)):(this.p=new g7d(13,a,this)):!a?(this.p=new i7d(14,this)):(this.p=new g7d(15,a,this)):!d?this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new i7d(16,this)):(this.p=new g7d(17,a,this)):!a?(this.p=new i7d(18,this)):(this.p=new g7d(19,a,this)):(this.Bb&bKe)!=0?!a?(this.p=new i7d(20,this)):(this.p=new g7d(21,a,this)):!a?(this.p=new i7d(22,this)):(this.p=new g7d(23,a,this)):(i=d.t,i>1||i==-1?this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new j7d(24,this,d)):(this.p=new h7d(25,a,this,d)):!a?(this.p=new j7d(26,this,d)):(this.p=new h7d(27,a,this,d)):(this.Bb&bKe)!=0?!a?(this.p=new j7d(28,this,d)):(this.p=new h7d(29,a,this,d)):!a?(this.p=new j7d(30,this,d)):(this.p=new h7d(31,a,this,d)):this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new j7d(32,this,d)):(this.p=new h7d(33,a,this,d)):!a?(this.p=new j7d(34,this,d)):(this.p=new h7d(35,a,this,d)):(this.Bb&bKe)!=0?!a?(this.p=new j7d(36,this,d)):(this.p=new h7d(37,a,this,d)):!a?(this.p=new j7d(38,this,d)):(this.p=new h7d(39,a,this,d))):this._k()?this.bl()?(this.p=new K7d(RD(e,29),this,d)):(this.p=new C7d(RD(e,29),this,d)):ZD(e,156)?a==Jbb?(this.p=new i7d(40,this)):(this.Bb&bKe)!=0?!a?(this.p=new J8d(RD(e,156),b,h,this)):(this.p=new L8d(b,h,this,(a8d(),g==kE?Y7d:g==xdb?T7d:g==lE?Z7d:g==jE?X7d:g==iE?W7d:g==wdb?_7d:g==gE?U7d:g==hE?V7d:$7d))):!a?(this.p=new C8d(RD(e,156),b,h,this)):(this.p=new E8d(b,h,this,(a8d(),g==kE?Y7d:g==xdb?T7d:g==lE?Z7d:g==jE?X7d:g==iE?W7d:g==wdb?_7d:g==gE?U7d:g==hE?V7d:$7d))):this.al()?!d?(this.Bb&bKe)!=0?this.bl()?(this.p=new d9d(RD(e,29),this)):(this.p=new b9d(RD(e,29),this)):this.bl()?(this.p=new _8d(RD(e,29),this)):(this.p=new Z8d(RD(e,29),this)):(this.Bb&bKe)!=0?this.bl()?(this.p=new l9d(RD(e,29),this,d)):(this.p=new j9d(RD(e,29),this,d)):this.bl()?(this.p=new h9d(RD(e,29),this,d)):(this.p=new f9d(RD(e,29),this,d)):this.bl()?!d?(this.Bb&bKe)!=0?(this.p=new p9d(RD(e,29),this)):(this.p=new n9d(RD(e,29),this)):(this.Bb&bKe)!=0?(this.p=new t9d(RD(e,29),this,d)):(this.p=new r9d(RD(e,29),this,d)):!d?(this.Bb&bKe)!=0?(this.p=new v9d(RD(e,29),this)):(this.p=new N8d(RD(e,29),this)):(this.Bb&bKe)!=0?(this.p=new z9d(RD(e,29),this,d)):(this.p=new x9d(RD(e,29),this,d))}return this.p};_.rk=function ZWd(){return (this.Bb&gwe)!=0};_._k=function $Wd(){return false};_.al=function _Wd(){return false};_.sk=function aXd(){return (this.Bb&Ove)!=0};_.xk=function bXd(){return wWd(this)};_.bl=function cXd(){return false};_.tk=function dXd(){return (this.Bb&bKe)!=0};_.cl=function eXd(a){this.k=a};_.ui=function fXd(a){CWd(this,a)};_.Ib=function gXd(){return GWd(this)};_.e=false;_.n=0;var s9=sfb(SHe,'EStructuralFeatureImpl',461);feb(331,461,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,331:1,158:1,461:1,291:1,119:1,120:1,692:1},mXd);_.Lh=function nXd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),jXd(this)?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);case 18:return Geb(),(this.Bb&QHe)!=0?true:false;case 19:if(b)return iXd(this);return hXd(this);}return zvd(this,a-AYd((JTd(),nTd)),vYd((d=RD(Ywd(this,16),29),!d?nTd:d),a),b,c)};_.Wh=function oXd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return jXd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);case 18:return (this.Bb&QHe)!=0;case 19:return !!hXd(this);}return Avd(this,a-AYd((JTd(),nTd)),vYd((b=RD(Ywd(this,16),29),!b?nTd:b),a))};_.bi=function pXd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:lXd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;case 18:kXd(this,Heb(TD(b)));return;}Bvd(this,a-AYd((JTd(),nTd)),vYd((c=RD(Ywd(this,16),29),!c?nTd:c),a),b)};_.ii=function qXd(){return JTd(),nTd};_.ki=function rXd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.b=0;bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;case 18:kXd(this,false);return;}Cvd(this,a-AYd((JTd(),nTd)),vYd((b=RD(Ywd(this,16),29),!b?nTd:b),a))};_.pi=function sXd(){iXd(this);Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.Jk=function tXd(){return jXd(this)};_.Yk=function uXd(a,b){this.b=0;this.a=null;return ZVd(this,a,b)};_.Zk=function vXd(a){lXd(this,a)};_.Ib=function wXd(){var a;if((this.Db&64)!=0)return GWd(this);a=new Shb(GWd(this));a.a+=' (iD: ';Ohb(a,(this.Bb&QHe)!=0);a.a+=')';return a.a};_.b=0;var M7=sfb(SHe,'EAttributeImpl',331);feb(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});_.dl=function NXd(a){return a.Dh()==this};_.Ah=function OXd(a){return AXd(this,a)};_.Bh=function PXd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_.Lh=function QXd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return this.ik();case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function RXd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),f.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function SXd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function TXd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function UXd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function VXd(){return JTd(),pTd};_.ki=function WXd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.hk=function XXd(){var a;return this.G==-1&&(this.G=(a=BXd(this),a?fZd(a.vi(),this):-1)),this.G};_.ik=function YXd(){return null};_.jk=function ZXd(){return BXd(this)};_.el=function $Xd(){return this.v};_.kk=function _Xd(){return DXd(this)};_.lk=function aYd(){return this.D!=null?this.D:this.B};_.mk=function bYd(){return this.F};_.fk=function cYd(a){return FXd(this,a)};_.fl=function dYd(a){this.v=a};_.gl=function eYd(a){GXd(this,a)};_.hl=function fYd(a){this.C=a};_.ui=function gYd(a){LXd(this,a)};_.Ib=function hYd(){return MXd(this)};_.C=null;_.D=null;_.G=-1;var c8=sfb(SHe,'EClassifierImpl',364);feb(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,481:1,119:1,120:1,691:1},HYd);_.dl=function IYd(a){return DYd(this,a.Dh())};_.Lh=function JYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return null;case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;case 9:return Geb(),(this.Bb&512)!=0?true:false;case 10:return zYd(this);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),this.q;case 12:return mYd(this);case 13:return qYd(this);case 14:return qYd(this),this.r;case 15:return mYd(this),this.k;case 16:return nYd(this);case 17:return pYd(this);case 18:return rYd(this);case 19:return sYd(this);case 20:return mYd(this),this.o;case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),this.s;case 22:return tYd(this);case 23:return oYd(this);}return zvd(this,a-AYd((JTd(),oTd)),vYd((d=RD(Ywd(this,16),29),!d?oTd:d),a),b,c)};_.Sh=function KYd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),qLd(this.q,a,c);case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),qLd(this.s,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),oTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),oTd)),a,c)};_.Uh=function LYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),rLd(this.q,a,c);case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),rLd(this.s,a,c);case 22:return rLd(tYd(this),a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),oTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),oTd)),a,c)};_.Wh=function MYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&tYd(this.u.a).i!=0&&!(!!this.n&&d$d(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return mYd(this).i!=0;case 13:return qYd(this).i!=0;case 14:return qYd(this),this.r.i!=0;case 15:return mYd(this),this.k.i!=0;case 16:return nYd(this).i!=0;case 17:return pYd(this).i!=0;case 18:return rYd(this).i!=0;case 19:return sYd(this).i!=0;case 20:return mYd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&d$d(this.n);case 23:return oYd(this).i!=0;}return Avd(this,a-AYd((JTd(),oTd)),vYd((b=RD(Ywd(this,16),29),!b?oTd:b),a))};_.Zh=function NYd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:wYd(this,a);return b?b:_zd(this,a)};_.bi=function OYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:EYd(this,Heb(TD(b)));return;case 9:FYd(this,Heb(TD(b)));return;case 10:VJd(zYd(this));YGd(zYd(this),RD(b,16));return;case 11:!this.q&&(this.q=new C5d(s7,this,11,10));sLd(this.q);!this.q&&(this.q=new C5d(s7,this,11,10));YGd(this.q,RD(b,16));return;case 21:!this.s&&(this.s=new C5d(y7,this,21,17));sLd(this.s);!this.s&&(this.s=new C5d(y7,this,21,17));YGd(this.s,RD(b,16));return;case 22:sLd(tYd(this));YGd(tYd(this),RD(b,16));return;}Bvd(this,a-AYd((JTd(),oTd)),vYd((c=RD(Ywd(this,16),29),!c?oTd:c),a),b)};_.ii=function PYd(){return JTd(),oTd};_.ki=function QYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:EYd(this,false);return;case 9:FYd(this,false);return;case 10:!!this.u&&VJd(this.u);return;case 11:!this.q&&(this.q=new C5d(s7,this,11,10));sLd(this.q);return;case 21:!this.s&&(this.s=new C5d(y7,this,21,17));sLd(this.s);return;case 22:!!this.n&&sLd(this.n);return;}Cvd(this,a-AYd((JTd(),oTd)),vYd((b=RD(Ywd(this,16),29),!b?oTd:b),a))};_.pi=function RYd(){var a,b;mYd(this);qYd(this);nYd(this);pYd(this);rYd(this);sYd(this);oYd(this);OHd(q$d(yYd(this)));if(this.s){for(a=0,b=this.s.i;a<b;++a){aAd(QHd(this.s,a))}}if(this.q){for(a=0,b=this.q.i;a<b;++a){aAd(QHd(this.q,a))}}Oee((lke(),jke),this).xe();this.Bb|=1};_.Ib=function SYd(){return GYd(this)};_.k=null;_.r=null;var iYd,jYd,kYd;var b8=sfb(SHe,'EClassImpl',90);feb(2092,2091,nKe);_.Ei=function TYd(a,b){return nLd(this,a,b)};_.Fi=function UYd(a){return nLd(this,this.i,a)};_.Gi=function VYd(a,b){oLd(this,a,b)};_.Hi=function WYd(a){pLd(this,a)};_.Wk=function XYd(a,b){return qLd(this,a,b)};_.$i=function YYd(a){return NHd(this,a)};_.Xk=function aZd(a,b){return rLd(this,a,b)};_.Xi=function bZd(a,b){return xLd(this,a,b)};_.Ii=function ZYd(){return new yMd(this)};_.Ji=function $Yd(){return new BMd(this)};_.Ki=function _Yd(a){return ZGd(this,a)};var Ubb=sfb(ZJe,'NotifyingInternalEListImpl',2092);feb(632,2092,oKe);_.Hc=function lZd(a){return cZd(this,a)};_.Ij=function mZd(a,b,c,d,e){return dZd(this,a,b,c,d,e)};_.Jj=function nZd(a){eZd(this,a)};_.Fk=function oZd(a){return this};_.Lk=function pZd(){return vYd(this.e.Dh(),this.Lj())};_.Kj=function qZd(){return this.Lk()};_.Lj=function rZd(){return BYd(this.e.Dh(),this.Lk())};_.il=function sZd(){return RD(this.Lk().Hk(),29).kk()};_.jl=function tZd(){return Z5d(RD(this.Lk(),19)).n};_.jj=function uZd(){return this.e};_.kl=function vZd(){return true};_.ll=function wZd(){return false};_.ml=function xZd(){return false};_.nl=function yZd(){return false};_.dd=function zZd(a){return fZd(this,a)};_.Nj=function AZd(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Rh(this.e,this.jl(),this.il(),b):c.Rh(this.e,BYd(c.Dh(),Z5d(RD(this.Lk(),19))),null,b):c.Rh(this.e,-1-this.Lj(),null,b)};_.Oj=function BZd(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Th(this.e,this.jl(),this.il(),b):c.Th(this.e,BYd(c.Dh(),Z5d(RD(this.Lk(),19))),null,b):c.Th(this.e,-1-this.Lj(),null,b)};_.al=function CZd(){return false};_.ol=function DZd(){return true};_.fk=function EZd(a){return QRd(this.d,a)};_.Pj=function FZd(){return Mvd(this.e)};_.Qj=function GZd(){return this.i!=0};_.aj=function HZd(a){return IMd(this.d,a)};_.Wi=function IZd(a,b){return this.ol()&&this.nl()?gZd(this,a,RD(b,58)):b};_.pl=function JZd(a){return a.Vh()?Vvd(this.e,RD(a,54)):a};_.Wb=function KZd(a){hZd(this,a)};_.Pc=function LZd(){return iZd(this)};_.Qc=function MZd(a){var b;if(this.nl()){for(b=this.i-1;b>=0;--b){QHd(this,b)}}return XHd(this,a)};_.Gk=function NZd(){sLd(this)};_.Zi=function OZd(a,b){return jZd(this,a,b)};var ybb=sfb(ZJe,'EcoreEList',632);feb(504,632,oKe,PZd);_.Li=function QZd(){return false};_.Lj=function RZd(){return this.c};_.Mj=function SZd(){return false};_.ol=function TZd(){return true};_.Si=function UZd(){return true};_.Wi=function VZd(a,b){return b};_.Yi=function WZd(){return false};_.c=0;var ibb=sfb(ZJe,'EObjectEList',504);feb(83,504,oKe,XZd);_.Mj=function YZd(){return true};_.ml=function ZZd(){return false};_.al=function $Zd(){return true};var cbb=sfb(ZJe,'EObjectContainmentEList',83);feb(555,83,oKe,_Zd);_.Ni=function a$d(){this.b=true};_.Qj=function b$d(){return this.b};_.Gk=function c$d(){var a;sLd(this);if(Mvd(this.e)){a=this.b;this.b=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var bbb=sfb(ZJe,'EObjectContainmentEList/Unsettable',555);feb(1161,555,oKe,h$d);_.Ti=function l$d(a,b){var c,d;return c=RD(uLd(this,a,b),89),Mvd(this.e)&&eZd(this,new c4d(this.a,7,(JTd(),qTd),sgb(b),(d=c.c,ZD(d,90)?RD(d,29):zTd),a)),c};_.Uj=function m$d(a,b){return e$d(this,RD(a,89),b)};_.Vj=function n$d(a,b){return f$d(this,RD(a,89),b)};_.Wj=function o$d(a,b,c){return g$d(this,RD(a,89),RD(b,89),c)};_.Ij=function i$d(a,b,c,d,e){switch(a){case 3:{return dZd(this,a,b,c,d,this.i>1)}case 5:{return dZd(this,a,b,c,d,this.i-RD(c,15).gc()>0)}default:{return new P3d(this.e,a,this.c,b,c,d,true)}}};_.Tj=function j$d(){return true};_.Qj=function k$d(){return d$d(this)};_.Gk=function p$d(){sLd(this)};var S7=sfb(SHe,'EClassImpl/1',1161);feb(1175,1174,EJe);_.dj=function t$d(a){var b,c,d,e,f,g,h;c=a.gj();if(c!=8){d=s$d(a);if(d==0){switch(c){case 1:case 9:{h=a.kj();if(h!=null){b=yYd(RD(h,481));!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}g=a.ij();if(g!=null){e=RD(g,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}break}case 3:{g=a.ij();if(g!=null){e=RD(g,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}break}case 5:{g=a.ij();if(g!=null){for(f=RD(g,16).Kc();f.Ob();){e=RD(f.Pb(),481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}}break}case 4:{h=a.kj();if(h!=null){e=RD(h,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}}break}case 6:{h=a.kj();if(h!=null){for(f=RD(h,16).Kc();f.Ob();){e=RD(f.Pb(),481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}}}break}}}this.ql(d)}};_.ql=function u$d(a){r$d(this,a)};_.b=63;var u9=sfb(SHe,'ESuperAdapter',1175);feb(1176,1175,EJe,w$d);_.ql=function x$d(a){v$d(this,a)};var N7=sfb(SHe,'EClassImpl/10',1176);feb(1165,710,oKe);_.Ei=function y$d(a,b){return IHd(this,a,b)};_.Fi=function z$d(a){return JHd(this,a)};_.Gi=function A$d(a,b){KHd(this,a,b)};_.Hi=function B$d(a){LHd(this,a)};_.$i=function D$d(a){return NHd(this,a)};_.Xi=function L$d(a,b){return UHd(this,a,b)};_.Wk=function C$d(a,b){throw Adb(new jib)};_.Ii=function E$d(){return new yMd(this)};_.Ji=function F$d(){return new BMd(this)};_.Ki=function G$d(a){return ZGd(this,a)};_.Xk=function H$d(a,b){throw Adb(new jib)};_.Fk=function I$d(a){return this};_.Qj=function J$d(){return this.i!=0};_.Wb=function K$d(a){throw Adb(new jib)};_.Gk=function M$d(){throw Adb(new jib)};var xbb=sfb(ZJe,'EcoreEList/UnmodifiableEList',1165);feb(328,1165,oKe,N$d);_.Yi=function O$d(){return false};var wbb=sfb(ZJe,'EcoreEList/UnmodifiableEList/FastCompare',328);feb(1168,328,oKe,R$d);_.dd=function S$d(a){var b,c,d;if(ZD(a,179)){b=RD(a,179);c=b.Lj();if(c!=-1){for(d=this.i;c<d;++c){if(dE(this.g[c])===dE(a)){return c}}}}return -1};var O7=sfb(SHe,'EClassImpl/1EAllStructuralFeaturesList',1168);feb(1162,505,PIe,W$d);_.aj=function X$d(a){return $C(o7,sKe,89,a,0,1)};_.Yi=function Y$d(){return false};var P7=sfb(SHe,'EClassImpl/1EGenericSuperTypeEList',1162);feb(633,505,PIe,Z$d);_.aj=function $$d(a){return $C(y7,lKe,179,a,0,1)};_.Yi=function _$d(){return false};var Q7=sfb(SHe,'EClassImpl/1EStructuralFeatureUniqueEList',633);feb(755,505,PIe,a_d);_.aj=function b_d(a){return $C(v7,lKe,19,a,0,1)};_.Yi=function c_d(){return false};var R7=sfb(SHe,'EClassImpl/1ReferenceList',755);feb(1163,505,PIe,e_d);_.Mi=function f_d(a,b){d_d(this,RD(b,35))};_.aj=function g_d(a){return $C(g7,lKe,35,a,0,1)};_.Yi=function h_d(){return false};var T7=sfb(SHe,'EClassImpl/2',1163);feb(1164,505,PIe,i_d);_.aj=function j_d(a){return $C(g7,lKe,35,a,0,1)};_.Yi=function k_d(){return false};var U7=sfb(SHe,'EClassImpl/3',1164);feb(1166,328,oKe,n_d);_.Fc=function o_d(a){return l_d(this,RD(a,35))};_.Hi=function p_d(a){m_d(this,RD(a,35))};var V7=sfb(SHe,'EClassImpl/4',1166);feb(1167,328,oKe,s_d);_.Fc=function t_d(a){return q_d(this,RD(a,19))};_.Hi=function u_d(a){r_d(this,RD(a,19))};var W7=sfb(SHe,'EClassImpl/5',1167);feb(1169,505,PIe,v_d);_.aj=function w_d(a){return $C(s7,mKe,62,a,0,1)};_.Yi=function x_d(){return false};var X7=sfb(SHe,'EClassImpl/6',1169);feb(1170,505,PIe,y_d);_.aj=function z_d(a){return $C(v7,lKe,19,a,0,1)};_.Yi=function A_d(){return false};var Y7=sfb(SHe,'EClassImpl/7',1170);feb(2095,2094,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,71:1});_.Ei=function B_d(a,b){return QJd(this,a,b)};_.Fi=function C_d(a){return QJd(this,this.Ej(),a)};_.Gi=function D_d(a,b){RJd(this,a,b)};_.Hi=function E_d(a){SJd(this,a)};_.Wk=function F_d(a,b){return TJd(this,a,b)};_.Xk=function L_d(a,b){return UJd(this,a,b)};_.Xi=function M_d(a,b){return WJd(this,a,b)};_.$i=function G_d(a){return this.xj(a)};_.Ii=function H_d(){return new yMd(this)};_.pj=function I_d(){return this.sj()};_.Ji=function J_d(){return new BMd(this)};_.Ki=function K_d(a){return ZGd(this,a)};var Qab=sfb(ZJe,'DelegatingNotifyingInternalEListImpl',2095);feb(756,2095,tKe);_.Li=function R_d(){var a;a=vYd(Uwd(this.b),this.Lj()).Hk();return ZD(a,156)&&!ZD(a,468)&&(a.kk().i&1)==0};_.Hc=function S_d(a){var b,c,d,e,f,g,h,i;if(this.ol()){i=this.Ej();if(i>4){if(this.fk(a)){if(this.al()){d=RD(a,54);c=d.Eh();h=c==this.b&&(this.ml()?d.yh(d.Fh(),RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk())==Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n:-1-d.Fh()==this.Lj());if(this.nl()&&!h&&!c&&!!d.Jh()){for(e=0;e<i;++e){b=O_d(this,this.xj(e));if(dE(b)===dE(a)){return true}}}return h}else if(this.ml()&&!this.ll()){f=RD(a,58).Mh(Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)));if(dE(f)===dE(this.b)){return true}else if(f==null||!RD(f,58).Vh()){return false}}}else{return false}}g=this.uj(a);if(this.nl()&&!g){for(e=0;e<i;++e){d=O_d(this,this.xj(e));if(dE(d)===dE(a)){return true}}}return g}else{return this.uj(a)}};_.Ij=function T_d(a,b,c,d,e){return new P3d(this.b,a,this.Lj(),b,c,d,e)};_.Jj=function U_d(a){qvd(this.b,a)};_.Fk=function V_d(a){return this};_.Kj=function W_d(){return vYd(Uwd(this.b),this.Lj())};_.Lj=function X_d(){return BYd(Uwd(this.b),vYd(Uwd(this.b),this.Lj()))};_.jj=function Y_d(){return this.b};_.kl=function Z_d(){return !!vYd(Uwd(this.b),this.Lj()).Hk().kk()};_.Mj=function $_d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&QHe)!=0||!!Z5d(RD(b,19))}else{return false}};_.ll=function __d(){var a,b,c,d;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);c=Z5d(a);return !!c&&(d=c.t,d>1||d==-1)}else{return false}};_.ml=function a0d(){var a,b,c;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);c=Z5d(a);return !!c}else{return false}};_.nl=function b0d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&txe)!=0}else{return false}};_.dd=function c0d(a){var b,c,d,e;d=this.zj(a);if(d>=0)return d;if(this.ol()){for(c=0,e=this.Ej();c<e;++c){b=O_d(this,this.xj(c));if(dE(b)===dE(a)){return c}}}return -1};_.Nj=function d0d(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Rh(this.b,Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n,RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk(),b):c.Rh(this.b,BYd(c.Dh(),Z5d(RD(vYd(Uwd(this.b),this.Lj()),19))),null,b):c.Rh(this.b,-1-this.Lj(),null,b)};_.Oj=function e0d(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Th(this.b,Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n,RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk(),b):c.Th(this.b,BYd(c.Dh(),Z5d(RD(vYd(Uwd(this.b),this.Lj()),19))),null,b):c.Th(this.b,-1-this.Lj(),null,b)};_.al=function f0d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&QHe)!=0}else{return false}};_.ol=function g0d(){return ZD(vYd(Uwd(this.b),this.Lj()).Hk(),90)};_.fk=function h0d(a){return vYd(Uwd(this.b),this.Lj()).Hk().fk(a)};_.Pj=function i0d(){return Mvd(this.b)};_.Qj=function j0d(){return !this.Aj()};_.Si=function k0d(){return vYd(Uwd(this.b),this.Lj()).Si()};_.Wi=function l0d(a,b){return N_d(this,a,b)};_.Wb=function m0d(a){VJd(this);YGd(this,RD(a,15))};_.Pc=function n0d(){var a;if(this.nl()){for(a=this.Ej()-1;a>=0;--a){N_d(this,a,this.xj(a))}}return this.Fj()};_.Qc=function o0d(a){var b;if(this.nl()){for(b=this.Ej()-1;b>=0;--b){N_d(this,b,this.xj(b))}}return this.Gj(a)};_.Gk=function p0d(){VJd(this)};_.Zi=function q0d(a,b){return P_d(this,a,b)};var Pab=sfb(ZJe,'DelegatingEcoreEList',756);feb(1171,756,tKe,w0d);_.qj=function z0d(a,b){r0d(this,a,RD(b,29))};_.rj=function A0d(a){s0d(this,RD(a,29))};_.xj=function G0d(a){var b,c;return b=RD(QHd(tYd(this.a),a),89),c=b.c,ZD(c,90)?RD(c,29):(JTd(),zTd)};_.Cj=function L0d(a){var b,c;return b=RD(vLd(tYd(this.a),a),89),c=b.c,ZD(c,90)?RD(c,29):(JTd(),zTd)};_.Dj=function M0d(a,b){return u0d(this,a,RD(b,29))};_.Li=function x0d(){return false};_.Ij=function y0d(a,b,c,d,e){return null};_.sj=function B0d(){return new c1d(this)};_.tj=function C0d(){sLd(tYd(this.a))};_.uj=function D0d(a){return t0d(this,a)};_.vj=function E0d(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!t0d(this,b)){return false}}return true};_.wj=function F0d(a){var b,c,d;if(ZD(a,15)){d=RD(a,15);if(d.gc()==tYd(this.a).i){for(b=d.Kc(),c=new dMd(this);b.Ob();){if(dE(b.Pb())!==dE(bMd(c))){return false}}return true}}return false};_.yj=function H0d(){var a,b,c,d,e;c=1;for(b=new dMd(tYd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);d=(e=a.c,ZD(e,90)?RD(e,29):(JTd(),zTd));c=31*c+(!d?0:kFb(d))}return c};_.zj=function I0d(a){var b,c,d,e;d=0;for(c=new dMd(tYd(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);if(dE(a)===dE((e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)))){return d}++d}return -1};_.Aj=function J0d(){return tYd(this.a).i==0};_.Bj=function K0d(){return null};_.Ej=function N0d(){return tYd(this.a).i};_.Fj=function O0d(){var a,b,c,d,e,f;f=tYd(this.a).i;e=$C(jJ,rve,1,f,5,1);c=0;for(b=new dMd(tYd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);e[c++]=(d=a.c,ZD(d,90)?RD(d,29):(JTd(),zTd))}return e};_.Gj=function P0d(a){var b,c,d,e,f,g,h;h=tYd(this.a).i;if(a.length<h){e=IMd(rb(a).c,h);a=e}a.length>h&&bD(a,h,null);d=0;for(c=new dMd(tYd(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);f=(g=b.c,ZD(g,90)?RD(g,29):(JTd(),zTd));bD(a,d++,f)}return a};_.Hj=function Q0d(){var a,b,c,d,e;e=new Qhb;e.a+='[';a=tYd(this.a);for(b=0,d=tYd(this.a).i;b<d;){Nhb(e,Ghb((c=RD(QHd(a,b),89).c,ZD(c,90)?RD(c,29):(JTd(),zTd))));++b<d&&(e.a+=pve,e)}e.a+=']';return e.a};_.Jj=function R0d(a){};_.Lj=function S0d(){return 10};_.kl=function T0d(){return true};_.Mj=function U0d(){return false};_.ll=function V0d(){return false};_.ml=function W0d(){return false};_.nl=function X0d(){return true};_.al=function Y0d(){return false};_.ol=function Z0d(){return true};_.fk=function $0d(a){return ZD(a,90)};_.Qj=function _0d(){return CYd(this.a)};_.Si=function a1d(){return true};_.Yi=function b1d(){return true};var $7=sfb(SHe,'EClassImpl/8',1171);feb(1172,2062,kwe,c1d);_.fd=function d1d(a){return ZGd(this.a,a)};_.gc=function e1d(){return tYd(this.a.a).i};var Z7=sfb(SHe,'EClassImpl/8/1',1172);feb(1173,505,PIe,f1d);_.aj=function g1d(a){return $C(i7,rve,142,a,0,1)};_.Yi=function h1d(){return false};var _7=sfb(SHe,'EClassImpl/9',1173);feb(1160,49,Ixe,i1d);var a8=sfb(SHe,'EClassImpl/MyHashSet',1160);feb(577,364,{110:1,94:1,93:1,142:1,156:1,847:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1},k1d);_.Lh=function l1d(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return this.ik();case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Wh=function m1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function n1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:j1d(this,Heb(TD(b)));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function o1d(){return JTd(),rTd};_.ki=function p1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:j1d(this,true);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function q1d(){Oee((lke(),jke),this).xe();this.Bb|=1};_.ok=function r1d(){var a,b,c;if(!this.c){a=Kje(BXd(this));if(!a.dc()){for(c=a.Kc();c.Ob();){b=WD(c.Pb());!!bAd(this,b)&&Jje(this)}}}return this.b};_.ik=function s1d(){var b;if(!this.e){b=null;try{b=DXd(this)}catch(a){a=zdb(a);if(!ZD(a,103))throw Adb(a)}this.d=null;!!b&&(b.i&1)!=0&&(b==xdb?(this.d=(Geb(),Eeb)):b==kE?(this.d=sgb(0)):b==jE?(this.d=new Tfb(0)):b==iE?(this.d=0):b==lE?(this.d=Hgb(0)):b==wdb?(this.d=bhb(0)):b==gE?(this.d=$eb(0)):(this.d=hfb(0)));this.e=true}return this.d};_.nk=function t1d(){return (this.Bb&256)!=0};_.rl=function u1d(a){a&&(this.D='org.eclipse.emf.common.util.AbstractEnumerator')};_.gl=function v1d(a){GXd(this,a);this.rl(a)};_.hl=function w1d(a){this.C=a;this.e=false};_.Ib=function x1d(){var a;if((this.Db&64)!=0)return MXd(this);a=new Shb(MXd(this));a.a+=' (serializable: ';Ohb(a,(this.Bb&256)!=0);a.a+=')';return a.a};_.c=false;_.d=null;_.e=false;var d8=sfb(SHe,'EDataTypeImpl',577);feb(468,577,{110:1,94:1,93:1,142:1,156:1,847:1,685:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,468:1,158:1,119:1,120:1,691:1},A1d);_.Lh=function B1d(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return y1d(this);case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),this.a;}return zvd(this,a-AYd((JTd(),sTd)),vYd((d=RD(Ywd(this,16),29),!d?sTd:d),a),b,c)};_.Sh=function C1d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),qLd(this.a,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),sTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),sTd)),a,c)};_.Uh=function D1d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),sTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),sTd)),a,c)};_.Wh=function E1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return !!y1d(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),sTd)),vYd((b=RD(Ywd(this,16),29),!b?sTd:b),a))};_.bi=function F1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:j1d(this,Heb(TD(b)));return;case 9:!this.a&&(this.a=new C5d(l7,this,9,5));sLd(this.a);!this.a&&(this.a=new C5d(l7,this,9,5));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),sTd)),vYd((c=RD(Ywd(this,16),29),!c?sTd:c),a),b)};_.ii=function G1d(){return JTd(),sTd};_.ki=function H1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:j1d(this,true);return;case 9:!this.a&&(this.a=new C5d(l7,this,9,5));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),sTd)),vYd((b=RD(Ywd(this,16),29),!b?sTd:b),a))};_.pi=function I1d(){var a,b;if(this.a){for(a=0,b=this.a.i;a<b;++a){aAd(QHd(this.a,a))}}Oee((lke(),jke),this).xe();this.Bb|=1};_.ik=function J1d(){return y1d(this)};_.fk=function K1d(a){if(a!=null){return true}return false};_.rl=function L1d(a){};var e8=sfb(SHe,'EEnumImpl',468);feb(582,448,{110:1,94:1,93:1,2039:1,694:1,155:1,197:1,58:1,114:1,54:1,99:1,582:1,158:1,119:1,120:1},R1d);_.xe=function $1d(){return this.zb};_.Ah=function S1d(a){return M1d(this,a)};_.Lh=function T1d(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return sgb(this.d);case 3:return this.b?this.b:this.a;case 4:return e=this.c,e==null?this.zb:e;case 5:return this.Db>>16==5?RD(this.Cb,685):null;}return zvd(this,a-AYd((JTd(),tTd)),vYd((d=RD(Ywd(this,16),29),!d?tTd:d),a),b,c)};_.Sh=function U1d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?M1d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,5,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),tTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),tTd)),a,c)};_.Uh=function V1d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 5:return xvd(this,null,5,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),tTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),tTd)),a,c)};_.Wh=function W1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?RD(this.Cb,685):null);}return Avd(this,a-AYd((JTd(),tTd)),vYd((b=RD(Ywd(this,16),29),!b?tTd:b),a))};_.bi=function X1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:Q1d(this,RD(b,17).a);return;case 3:O1d(this,RD(b,2039));return;case 4:P1d(this,WD(b));return;}Bvd(this,a-AYd((JTd(),tTd)),vYd((c=RD(Ywd(this,16),29),!c?tTd:c),a),b)};_.ii=function Y1d(){return JTd(),tTd};_.ki=function Z1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:Q1d(this,0);return;case 3:O1d(this,null);return;case 4:P1d(this,null);return;}Cvd(this,a-AYd((JTd(),tTd)),vYd((b=RD(Ywd(this,16),29),!b?tTd:b),a))};_.Ib=function _1d(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var f8=sfb(SHe,'EEnumLiteralImpl',582);var h8=ufb(SHe,'EFactoryImpl/InternalEDateTimeFormat');feb(498,1,{2114:1},c2d);var g8=sfb(SHe,'EFactoryImpl/1ClientInternalEDateTimeFormat',498);feb(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},s2d);_.Ch=function t2d(a,b,c){var d;c=xvd(this,a,b,c);if(!!this.e&&ZD(a,179)){d=k2d(this,this.e);d!=this.c&&(c=o2d(this,d,c))}return c};_.Lh=function u2d(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new XZd(o7,this,1)),this.d;case 2:if(b)return i2d(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return h2d(this);return this.a;}return zvd(this,a-AYd((JTd(),vTd)),vYd((d=RD(Ywd(this,16),29),!d?vTd:d),a),b,c)};_.Uh=function v2d(a,b,c){var d,e;switch(b){case 0:return g2d(this,null,c);case 1:return !this.d&&(this.d=new XZd(o7,this,1)),rLd(this.d,a,c);case 3:return e2d(this,null,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),vTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),vTd)),a,c)};_.Wh=function w2d(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return Avd(this,a-AYd((JTd(),vTd)),vYd((b=RD(Ywd(this,16),29),!b?vTd:b),a))};_.bi=function x2d(a,b){var c;switch(a){case 0:q2d(this,RD(b,89));return;case 1:!this.d&&(this.d=new XZd(o7,this,1));sLd(this.d);!this.d&&(this.d=new XZd(o7,this,1));YGd(this.d,RD(b,16));return;case 3:n2d(this,RD(b,89));return;case 4:p2d(this,RD(b,850));return;case 5:l2d(this,RD(b,142));return;}Bvd(this,a-AYd((JTd(),vTd)),vYd((c=RD(Ywd(this,16),29),!c?vTd:c),a),b)};_.ii=function y2d(){return JTd(),vTd};_.ki=function z2d(a){var b;switch(a){case 0:q2d(this,null);return;case 1:!this.d&&(this.d=new XZd(o7,this,1));sLd(this.d);return;case 3:n2d(this,null);return;case 4:p2d(this,null);return;case 5:l2d(this,null);return;}Cvd(this,a-AYd((JTd(),vTd)),vYd((b=RD(Ywd(this,16),29),!b?vTd:b),a))};_.Ib=function A2d(){var a;a=new dib(awd(this));a.a+=' (expression: ';r2d(this,a);a.a+=')';return a.a};var d2d;var j8=sfb(SHe,'EGenericTypeImpl',248);feb(2067,2062,uKe);_.Gi=function C2d(a,b){B2d(this,a,b)};_.Wk=function D2d(a,b){B2d(this,this.gc(),a);return b};_.$i=function E2d(a){return ju(this.pj(),a)};_.Ii=function F2d(){return this.Ji()};_.pj=function G2d(){return new mee(this)};_.Ji=function H2d(){return this.Ki(0)};_.Ki=function I2d(a){return this.pj().fd(a)};_.Xk=function J2d(a,b){ze(this,a,true);return b};_.Ti=function K2d(a,b){var c,d;d=ku(this,b);c=this.fd(a);c.Rb(d);return d};_.Ui=function L2d(a,b){var c;ze(this,b,true);c=this.fd(a);c.Rb(b)};var Gab=sfb(ZJe,'AbstractSequentialInternalEList',2067);feb(495,2067,uKe,Q2d);_.$i=function R2d(a){return ju(this.pj(),a)};_.Ii=function S2d(){if(this.b==null){return j3d(),j3d(),i3d}return this.sl()};_.pj=function T2d(){return new Whe(this.a,this.b)};_.Ji=function U2d(){if(this.b==null){return j3d(),j3d(),i3d}return this.sl()};_.Ki=function V2d(a){var b,c;if(this.b==null){if(a<0||a>1){throw Adb(new veb(HJe+a+', size=0'))}return j3d(),j3d(),i3d}c=this.sl();for(b=0;b<a;++b){k3d(c)}return c};_.dc=function W2d(){var a,b,c,d,e,f;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.vl()||this.a.Xh(a)){f=this.a.Nh(a,false);nke();if(RD(a,69).xk()){b=RD(f,160);for(d=0,e=b.gc();d<e;++d){if(O2d(b.Tl(d))&&b.Ul(d)!=null){return false}}}else if(a.Jk()){if(!RD(f,16).dc()){return false}}else if(f!=null){return false}}}}return true};_.Kc=function X2d(){return P2d(this)};_.fd=function Y2d(a){var b,c;if(this.b==null){if(a!=0){throw Adb(new veb(HJe+a+', size=0'))}return j3d(),j3d(),i3d}c=this.ul()?this.tl():this.sl();for(b=0;b<a;++b){k3d(c)}return c};_.Ti=function Z2d(a,b){throw Adb(new jib)};_.Ui=function $2d(a,b){throw Adb(new jib)};_.sl=function _2d(){return new p3d(this.a,this.b)};_.tl=function a3d(){return new D3d(this.a,this.b)};_.ul=function b3d(){return true};_.gc=function c3d(){var a,b,c,d,e,f,g;e=0;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.vl()||this.a.Xh(a)){g=this.a.Nh(a,false);nke();if(RD(a,69).xk()){b=RD(g,160);for(d=0,f=b.gc();d<f;++d){O2d(b.Tl(d))&&b.Ul(d)!=null&&++e}}else a.Jk()?(e+=RD(g,16).gc()):g!=null&&++e}}}return e};_.vl=function d3d(){return true};var M2d;var Wab=sfb(ZJe,'EContentsEList',495);feb(1177,495,uKe,e3d);_.sl=function f3d(){return new H3d(this.a,this.b)};_.tl=function g3d(){return new F3d(this.a,this.b)};_.vl=function h3d(){return false};var n8=sfb(SHe,'ENamedElementImpl/1',1177);feb(287,1,vKe,p3d);_.Nb=function s3d(a){Ztb(this,a)};_.Rb=function q3d(a){throw Adb(new jib)};_.wl=function r3d(a){if(this.g!=0||!!this.e){throw Adb(new dgb('Iterator already in use or already filtered'))}this.e=a};_.Ob=function t3d(){var a,b,c,d,e,f;switch(this.g){case 3:case 2:{return true}case 1:{return false}case -3:{!this.p?++this.n:this.p.Pb()}default:{if(!this.k||(!this.p?!l3d(this):!m3d(this,this.p))){while(this.d<this.c.length){b=this.c[this.d++];if((!this.e||b.pk()!=C4||b.Lj()!=0)&&(!this.vl()||this.b.Xh(b))){f=this.b.Nh(b,this.ul());this.f=(nke(),RD(b,69).xk());if(this.f||b.Jk()){if(this.ul()){d=RD(f,15);this.k=d}else{d=RD(f,71);this.k=this.j=d}if(ZD(this.k,59)){this.p=null;this.o=this.k.gc();this.n=0}else{this.p=!this.j?this.k.ed():this.j.Ji()}if(!this.p?l3d(this):m3d(this,this.p)){e=!this.p?!this.j?this.k.Xb(this.n++):this.j.$i(this.n++):this.p.Pb();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=2;return true}}}this.k=null;this.p=null;this.f=false;this.g=1;return false}else{e=!this.p?!this.j?this.k.Xb(this.n++):this.j.$i(this.n++):this.p.Pb();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=3;return true}}}};_.Sb=function u3d(){var a,b,c,d,e,f;switch(this.g){case -3:case -2:{return true}case -1:{return false}case 3:{!this.p?--this.n:this.p.Ub()}default:{if(!this.k||(!this.p?!n3d(this):!o3d(this,this.p))){while(this.d>0){b=this.c[--this.d];if((!this.e||b.pk()!=C4||b.Lj()!=0)&&(!this.vl()||this.b.Xh(b))){f=this.b.Nh(b,this.ul());this.f=(nke(),RD(b,69).xk());if(this.f||b.Jk()){if(this.ul()){d=RD(f,15);this.k=d}else{d=RD(f,71);this.k=this.j=d}if(ZD(this.k,59)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.fd(this.k.gc()):this.j.Ki(this.k.gc())}if(!this.p?n3d(this):o3d(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.$i(--this.n):this.p.Ub();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.$i(--this.n):this.p.Ub();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function v3d(){return k3d(this)};_.Tb=function w3d(){return this.a};_.Ub=function x3d(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw Adb(new Dvb)}};_.Vb=function y3d(){return this.a-1};_.Qb=function z3d(){throw Adb(new jib)};_.ul=function A3d(){return false};_.Wb=function B3d(a){throw Adb(new jib)};_.vl=function C3d(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var i3d;var Uab=sfb(ZJe,'EContentsEList/FeatureIteratorImpl',287);feb(711,287,vKe,D3d);_.ul=function E3d(){return true};var Vab=sfb(ZJe,'EContentsEList/ResolvingFeatureIteratorImpl',711);feb(1178,711,vKe,F3d);_.vl=function G3d(){return false};var l8=sfb(SHe,'ENamedElementImpl/1/1',1178);feb(1179,287,vKe,H3d);_.vl=function I3d(){return false};var m8=sfb(SHe,'ENamedElementImpl/1/2',1179);feb(38,152,GJe,L3d,M3d,N3d,O3d,P3d,Q3d,R3d,S3d,T3d,U3d,V3d,W3d,X3d,Y3d,Z3d,$3d,_3d,a4d,b4d,c4d,d4d,e4d,f4d,g4d,h4d);_.Kj=function i4d(){return K3d(this)};_.Rj=function j4d(){var a;a=K3d(this);if(a){return a.ik()}return null};_.hj=function k4d(a){this.b==-1&&!!this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk()));return this.c.yh(this.b,a)};_.jj=function l4d(){return this.c};_.Sj=function m4d(){var a;a=K3d(this);if(a){return a.tk()}return false};_.b=-1;var p8=sfb(SHe,'ENotificationImpl',38);feb(411,291,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,480:1,54:1,99:1,158:1,411:1,291:1,119:1,120:1},q4d);_.Ah=function r4d(a){return n4d(this,a)};_.Lh=function s4d(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),f=this.t,f>1||f==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?RD(this.Cb,29):null;case 11:return !this.d&&(this.d=new iie(z7,this,11)),this.d;case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),this.c;case 13:return !this.a&&(this.a=new F4d(this,this)),this.a;case 14:return o4d(this);}return zvd(this,a-AYd((JTd(),ATd)),vYd((d=RD(Ywd(this,16),29),!d?ATd:d),a),b,c)};_.Sh=function t4d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?n4d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,10,c);case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),qLd(this.c,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ATd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),ATd)),a,c)};_.Uh=function u4d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 10:return xvd(this,null,10,c);case 11:return !this.d&&(this.d=new iie(z7,this,11)),rLd(this.d,a,c);case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),rLd(this.c,a,c);case 14:return rLd(o4d(this),a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ATd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),ATd)),a,c)};_.Wh=function v4d(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return !!(this.Db>>16==10?RD(this.Cb,29):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&o4d(this.a.a).i!=0&&!(!!this.b&&o5d(this.b));case 14:return !!this.b&&o5d(this.b);}return Avd(this,a-AYd((JTd(),ATd)),vYd((b=RD(Ywd(this,16),29),!b?ATd:b),a))};_.bi=function w4d(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:bWd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 11:!this.d&&(this.d=new iie(z7,this,11));sLd(this.d);!this.d&&(this.d=new iie(z7,this,11));YGd(this.d,RD(b,16));return;case 12:!this.c&&(this.c=new C5d(u7,this,12,10));sLd(this.c);!this.c&&(this.c=new C5d(u7,this,12,10));YGd(this.c,RD(b,16));return;case 13:!this.a&&(this.a=new F4d(this,this));VJd(this.a);!this.a&&(this.a=new F4d(this,this));YGd(this.a,RD(b,16));return;case 14:sLd(o4d(this));YGd(o4d(this),RD(b,16));return;}Bvd(this,a-AYd((JTd(),ATd)),vYd((c=RD(Ywd(this,16),29),!c?ATd:c),a),b)};_.ii=function x4d(){return JTd(),ATd};_.ki=function y4d(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 11:!this.d&&(this.d=new iie(z7,this,11));sLd(this.d);return;case 12:!this.c&&(this.c=new C5d(u7,this,12,10));sLd(this.c);return;case 13:!!this.a&&VJd(this.a);return;case 14:!!this.b&&sLd(this.b);return;}Cvd(this,a-AYd((JTd(),ATd)),vYd((b=RD(Ywd(this,16),29),!b?ATd:b),a))};_.pi=function z4d(){var a,b;if(this.c){for(a=0,b=this.c.i;a<b;++a){aAd(QHd(this.c,a))}}WVd(this);this.Bb|=1};var u8=sfb(SHe,'EOperationImpl',411);feb(513,756,tKe,F4d);_.qj=function I4d(a,b){A4d(this,a,RD(b,142))};_.rj=function J4d(a){B4d(this,RD(a,142))};_.xj=function P4d(a){var b,c;return b=RD(QHd(o4d(this.a),a),89),c=b.c,c?c:(JTd(),wTd)};_.Cj=function U4d(a){var b,c;return b=RD(vLd(o4d(this.a),a),89),c=b.c,c?c:(JTd(),wTd)};_.Dj=function V4d(a,b){return D4d(this,a,RD(b,142))};_.Li=function G4d(){return false};_.Ij=function H4d(a,b,c,d,e){return null};_.sj=function K4d(){return new l5d(this)};_.tj=function L4d(){sLd(o4d(this.a))};_.uj=function M4d(a){return C4d(this,a)};_.vj=function N4d(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!C4d(this,b)){return false}}return true};_.wj=function O4d(a){var b,c,d;if(ZD(a,15)){d=RD(a,15);if(d.gc()==o4d(this.a).i){for(b=d.Kc(),c=new dMd(this);b.Ob();){if(dE(b.Pb())!==dE(bMd(c))){return false}}return true}}return false};_.yj=function Q4d(){var a,b,c,d,e;c=1;for(b=new dMd(o4d(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);d=(e=a.c,e?e:(JTd(),wTd));c=31*c+(!d?0:tb(d))}return c};_.zj=function R4d(a){var b,c,d,e;d=0;for(c=new dMd(o4d(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);if(dE(a)===dE((e=b.c,e?e:(JTd(),wTd)))){return d}++d}return -1};_.Aj=function S4d(){return o4d(this.a).i==0};_.Bj=function T4d(){return null};_.Ej=function W4d(){return o4d(this.a).i};_.Fj=function X4d(){var a,b,c,d,e,f;f=o4d(this.a).i;e=$C(jJ,rve,1,f,5,1);c=0;for(b=new dMd(o4d(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);e[c++]=(d=a.c,d?d:(JTd(),wTd))}return e};_.Gj=function Y4d(a){var b,c,d,e,f,g,h;h=o4d(this.a).i;if(a.length<h){e=IMd(rb(a).c,h);a=e}a.length>h&&bD(a,h,null);d=0;for(c=new dMd(o4d(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);f=(g=b.c,g?g:(JTd(),wTd));bD(a,d++,f)}return a};_.Hj=function Z4d(){var a,b,c,d,e;e=new Qhb;e.a+='[';a=o4d(this.a);for(b=0,d=o4d(this.a).i;b<d;){Nhb(e,Ghb((c=RD(QHd(a,b),89).c,c?c:(JTd(),wTd))));++b<d&&(e.a+=pve,e)}e.a+=']';return e.a};_.Jj=function $4d(a){};_.Lj=function _4d(){return 13};_.kl=function a5d(){return true};_.Mj=function b5d(){return false};_.ll=function c5d(){return false};_.ml=function d5d(){return false};_.nl=function e5d(){return true};_.al=function f5d(){return false};_.ol=function g5d(){return true};_.fk=function h5d(a){return ZD(a,142)};_.Qj=function i5d(){return p4d(this.a)};_.Si=function j5d(){return true};_.Yi=function k5d(){return true};var s8=sfb(SHe,'EOperationImpl/1',513);feb(1376,2062,kwe,l5d);_.fd=function m5d(a){return ZGd(this.a,a)};_.gc=function n5d(){return o4d(this.a.a).i};var r8=sfb(SHe,'EOperationImpl/1/1',1376);feb(1377,555,oKe,s5d);_.Ti=function w5d(a,b){var c,d;return c=RD(uLd(this,a,b),89),Mvd(this.e)&&eZd(this,new c4d(this.a,7,(JTd(),BTd),sgb(b),(d=c.c,d?d:wTd),a)),c};_.Uj=function x5d(a,b){return p5d(this,RD(a,89),b)};_.Vj=function y5d(a,b){return q5d(this,RD(a,89),b)};_.Wj=function z5d(a,b,c){return r5d(this,RD(a,89),RD(b,89),c)};_.Ij=function t5d(a,b,c,d,e){switch(a){case 3:{return dZd(this,a,b,c,d,this.i>1)}case 5:{return dZd(this,a,b,c,d,this.i-RD(c,15).gc()>0)}default:{return new P3d(this.e,a,this.c,b,c,d,true)}}};_.Tj=function u5d(){return true};_.Qj=function v5d(){return o5d(this)};_.Gk=function A5d(){sLd(this)};var t8=sfb(SHe,'EOperationImpl/2',1377);feb(507,1,{2037:1,507:1},B5d);var v8=sfb(SHe,'EPackageImpl/1',507);feb(14,83,oKe,C5d);_.il=function D5d(){return this.d};_.jl=function E5d(){return this.b};_.ml=function F5d(){return true};_.b=0;var gbb=sfb(ZJe,'EObjectContainmentWithInverseEList',14);feb(365,14,oKe,G5d);_.nl=function H5d(){return true};_.Wi=function I5d(a,b){return gZd(this,a,RD(b,58))};var dbb=sfb(ZJe,'EObjectContainmentWithInverseEList/Resolving',365);feb(307,365,oKe,J5d);_.Ni=function K5d(){this.a.tb=null};var w8=sfb(SHe,'EPackageImpl/2',307);feb(1278,1,{},L5d);var x8=sfb(SHe,'EPackageImpl/3',1278);feb(733,45,Hxe,O5d);_._b=function P5d(a){return bE(a)?Yjb(this,a):!!qtb(this.f,a)};var z8=sfb(SHe,'EPackageRegistryImpl',733);feb(518,291,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,480:1,54:1,99:1,158:1,518:1,291:1,119:1,120:1},R5d);_.Ah=function S5d(a){return Q5d(this,a)};_.Lh=function T5d(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),f=this.t,f>1||f==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?RD(this.Cb,62):null;}return zvd(this,a-AYd((JTd(),DTd)),vYd((d=RD(Ywd(this,16),29),!d?DTd:d),a),b,c)};_.Sh=function U5d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Q5d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,10,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),DTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),DTd)),a,c)};_.Uh=function V5d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 10:return xvd(this,null,10,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),DTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),DTd)),a,c)};_.Wh=function W5d(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return !!(this.Db>>16==10?RD(this.Cb,62):null);}return Avd(this,a-AYd((JTd(),DTd)),vYd((b=RD(Ywd(this,16),29),!b?DTd:b),a))};_.ii=function X5d(){return JTd(),DTd};var A8=sfb(SHe,'EParameterImpl',518);feb(102,461,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,102:1,461:1,291:1,119:1,120:1,692:1},d6d);_.Lh=function e6d(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),g=this.t,g>1||g==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);case 18:return Geb(),(this.Bb&QHe)!=0?true:false;case 19:return Geb(),f=Z5d(this),!!f&&(f.Bb&QHe)!=0?true:false;case 20:return Geb(),(this.Bb&txe)!=0?true:false;case 21:if(b)return Z5d(this);return this.b;case 22:if(b)return $5d(this);return Y5d(this);case 23:return !this.a&&(this.a=new zie(g7,this,23)),this.a;}return zvd(this,a-AYd((JTd(),ETd)),vYd((d=RD(Ywd(this,16),29),!d?ETd:d),a),b,c)};_.Wh=function f6d(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);case 18:return (this.Bb&QHe)!=0;case 19:return d=Z5d(this),!!d&&(d.Bb&QHe)!=0;case 20:return (this.Bb&txe)==0;case 21:return !!this.b;case 22:return !!Y5d(this);case 23:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),ETd)),vYd((b=RD(Ywd(this,16),29),!b?ETd:b),a))};_.bi=function g6d(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:bWd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;case 18:_5d(this,Heb(TD(b)));return;case 20:c6d(this,Heb(TD(b)));return;case 21:b6d(this,RD(b,19));return;case 23:!this.a&&(this.a=new zie(g7,this,23));sLd(this.a);!this.a&&(this.a=new zie(g7,this,23));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),ETd)),vYd((c=RD(Ywd(this,16),29),!c?ETd:c),a),b)};_.ii=function h6d(){return JTd(),ETd};_.ki=function i6d(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;case 18:a6d(this,false);ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),2);return;case 20:c6d(this,true);return;case 21:b6d(this,null);return;case 23:!this.a&&(this.a=new zie(g7,this,23));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),ETd)),vYd((b=RD(Ywd(this,16),29),!b?ETd:b),a))};_.pi=function j6d(){$5d(this);Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.uk=function k6d(){return Z5d(this)};_._k=function l6d(){var a;return a=Z5d(this),!!a&&(a.Bb&QHe)!=0};_.al=function m6d(){return (this.Bb&QHe)!=0};_.bl=function n6d(){return (this.Bb&txe)!=0};_.Yk=function o6d(a,b){this.c=null;return ZVd(this,a,b)};_.Ib=function p6d(){var a;if((this.Db&64)!=0)return GWd(this);a=new Shb(GWd(this));a.a+=' (containment: ';Ohb(a,(this.Bb&QHe)!=0);a.a+=', resolveProxies: ';Ohb(a,(this.Bb&txe)!=0);a.a+=')';return a.a};var B8=sfb(SHe,'EReferenceImpl',102);feb(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},v6d);_.Fb=function B6d(a){return this===a};_.ld=function D6d(){return this.b};_.md=function E6d(){return this.c};_.Hb=function F6d(){return kFb(this)};_.Di=function H6d(a){q6d(this,WD(a))};_.nd=function I6d(a){return u6d(this,WD(a))};_.Lh=function w6d(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return zvd(this,a-AYd((JTd(),FTd)),vYd((d=RD(Ywd(this,16),29),!d?FTd:d),a),b,c)};_.Wh=function x6d(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return Avd(this,a-AYd((JTd(),FTd)),vYd((b=RD(Ywd(this,16),29),!b?FTd:b),a))};_.bi=function y6d(a,b){var c;switch(a){case 0:r6d(this,WD(b));return;case 1:t6d(this,WD(b));return;}Bvd(this,a-AYd((JTd(),FTd)),vYd((c=RD(Ywd(this,16),29),!c?FTd:c),a),b)};_.ii=function z6d(){return JTd(),FTd};_.ki=function A6d(a){var b;switch(a){case 0:s6d(this,null);return;case 1:t6d(this,null);return;}Cvd(this,a-AYd((JTd(),FTd)),vYd((b=RD(Ywd(this,16),29),!b?FTd:b),a))};_.Bi=function C6d(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:ohb(a)}return this.a};_.Ci=function G6d(a){this.a=a};_.Ib=function J6d(){var a;if((this.Db&64)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (key: ';Nhb(a,this.b);a.a+=', value: ';Nhb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var C8=sfb(SHe,'EStringToStringMapEntryImpl',561);var Ibb=ufb(ZJe,'FeatureMap/Entry/Internal');feb(576,1,wKe);_.xl=function M6d(a){return this.yl(RD(a,54))};_.yl=function N6d(a){return this.xl(a)};_.Fb=function O6d(a){var b,c;if(this===a){return true}else if(ZD(a,76)){b=RD(a,76);if(b.Lk()==this.c){c=this.md();return c==null?b.md()==null:pb(c,b.md())}else{return false}}else{return false}};_.Lk=function P6d(){return this.c};_.Hb=function Q6d(){var a;a=this.md();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function R6d(){var a,b;a=this.c;b=BXd(a.qk()).yi();a.xe();return (b!=null&&b.length!=0?b+':'+a.xe():a.xe())+'='+this.md()};var D8=sfb(SHe,'EStructuralFeatureImpl/BasicFeatureMapEntry',576);feb(791,576,wKe,U6d);_.yl=function V6d(a){return new U6d(this.c,a)};_.md=function W6d(){return this.a};_.zl=function X6d(a,b,c){return S6d(this,a,this.a,b,c)};_.Al=function Y6d(a,b,c){return T6d(this,a,this.a,b,c)};var E8=sfb(SHe,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',791);feb(1350,1,{},Z6d);_.yk=function $6d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Yl(this.a).Fk(d)};_.zk=function _6d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Pl(this.a,d,e)};_.Ak=function a7d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Ql(this.a,d,e)};_.Bk=function b7d(a,b,c){var d;d=RD(Evd(a,this.b),220);return d.Yl(this.a).Qj()};_.Ck=function c7d(a,b,c,d){var e;e=RD(Evd(a,this.b),220);e.Yl(this.a).Wb(d)};_.Dk=function d7d(a,b,c){return RD(Evd(a,this.b),220).Yl(this.a)};_.Ek=function e7d(a,b,c){var d;d=RD(Evd(a,this.b),220);d.Yl(this.a).Gk()};var F8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1350);feb(91,1,{},g7d,h7d,i7d,j7d);_.yk=function k7d(a,b,c,d,e){var f;f=b.li(c);f==null&&b.mi(c,f=f7d(this,a));if(!e){switch(this.e){case 50:case 41:return RD(f,597).bk();case 40:return RD(f,220).Vl();}}return f};_.zk=function l7d(a,b,c,d,e){var f,g;g=b.li(c);g==null&&b.mi(c,g=f7d(this,a));f=RD(g,71).Wk(d,e);return f};_.Ak=function m7d(a,b,c,d,e){var f;f=b.li(c);f!=null&&(e=RD(f,71).Xk(d,e));return e};_.Bk=function n7d(a,b,c){var d;d=b.li(c);return d!=null&&RD(d,79).Qj()};_.Ck=function o7d(a,b,c,d){var e;e=RD(b.li(c),79);!e&&b.mi(c,e=f7d(this,a));e.Wb(d)};_.Dk=function p7d(a,b,c){var d,e;e=b.li(c);e==null&&b.mi(c,e=f7d(this,a));if(ZD(e,79)){return RD(e,79)}else{d=RD(b.li(c),15);return new I9d(d)}};_.Ek=function q7d(a,b,c){var d;d=RD(b.li(c),79);!d&&b.mi(c,d=f7d(this,a));d.Gk()};_.b=0;_.e=0;var G8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateMany',91);feb(512,1,{});_.zk=function u7d(a,b,c,d,e){throw Adb(new jib)};_.Ak=function v7d(a,b,c,d,e){throw Adb(new jib)};_.Dk=function w7d(a,b,c){return new x7d(this,a,b,c)};var r7d;var n9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingle',512);feb(1367,1,$Je,x7d);_.Fk=function y7d(a){return this.a.yk(this.c,this.d,this.b,a,true)};_.Qj=function z7d(){return this.a.Bk(this.c,this.d,this.b)};_.Wb=function A7d(a){this.a.Ck(this.c,this.d,this.b,a)};_.Gk=function B7d(){this.a.Ek(this.c,this.d,this.b)};_.b=0;var H8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1367);feb(784,512,{},C7d);_.yk=function D7d(a,b,c,d,e){return jwd(a,a.Ph(),a.Fh())==this.b?this.bl()&&d?yvd(a):a.Ph():null};_.zk=function E7d(a,b,c,d,e){var f,g;!!a.Ph()&&(e=(f=a.Fh(),f>=0?a.Ah(e):a.Ph().Th(a,-1-f,null,e)));g=BYd(a.Dh(),this.e);return a.Ch(d,g,e)};_.Ak=function F7d(a,b,c,d,e){var f;f=BYd(a.Dh(),this.e);return a.Ch(null,f,e)};_.Bk=function G7d(a,b,c){var d;d=BYd(a.Dh(),this.e);return !!a.Ph()&&a.Fh()==d};_.Ck=function H7d(a,b,c,d){var e,f,g,h,i;if(d!=null&&!FXd(this.a,d)){throw Adb(new Ifb(xKe+(ZD(d,58)?GYd(RD(d,58).Dh()):ofb(rb(d)))+yKe+this.a+"'"))}e=a.Ph();g=BYd(a.Dh(),this.e);if(dE(d)!==dE(e)||a.Fh()!=g&&d!=null){if(Oje(a,RD(d,58)))throw Adb(new agb(UHe+a.Ib()));i=null;!!e&&(i=(f=a.Fh(),f>=0?a.Ah(i):a.Ph().Th(a,-1-f,null,i)));h=RD(d,54);!!h&&(i=h.Rh(a,BYd(h.Dh(),this.b),null,i));i=a.Ch(h,g,i);!!i&&i.oj()}else{a.vh()&&a.wh()&&qvd(a,new N3d(a,1,g,d,d))}};_.Ek=function I7d(a,b,c){var d,e,f,g;d=a.Ph();if(d){g=(e=a.Fh(),e>=0?a.Ah(null):a.Ph().Th(a,-1-e,null,null));f=BYd(a.Dh(),this.e);g=a.Ch(null,f,g);!!g&&g.oj()}else{a.vh()&&a.wh()&&qvd(a,new b4d(a,1,this.e,null,null))}};_.bl=function J7d(){return false};var J8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',784);feb(1351,784,{},K7d);_.bl=function L7d(){return true};var I8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1351);feb(574,512,{});_.yk=function O7d(a,b,c,d,e){var f;return f=b.li(c),f==null?this.b:dE(f)===dE(r7d)?null:f};_.Bk=function P7d(a,b,c){var d;d=b.li(c);return d!=null&&(dE(d)===dE(r7d)||!pb(d,this.b))};_.Ck=function Q7d(a,b,c,d){var e,f;if(a.vh()&&a.wh()){e=(f=b.li(c),f==null?this.b:dE(f)===dE(r7d)?null:f);if(d==null){if(this.c!=null){b.mi(c,null);d=this.b}else this.b!=null?b.mi(c,r7d):b.mi(c,null)}else{this.Bl(d);b.mi(c,d)}qvd(a,this.d.Cl(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.mi(c,null):this.b!=null?b.mi(c,r7d):b.mi(c,null)}else{this.Bl(d);b.mi(c,d)}}};_.Ek=function R7d(a,b,c){var d,e;if(a.vh()&&a.wh()){d=(e=b.li(c),e==null?this.b:dE(e)===dE(r7d)?null:e);b.ni(c);qvd(a,this.d.Cl(a,1,this.e,d,this.b))}else{b.ni(c)}};_.Bl=function S7d(a){throw Adb(new Hfb)};var Y8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',574);feb(zKe,1,{},b8d);_.Cl=function c8d(a,b,c,d,e){return new b4d(a,b,c,d,e)};_.Dl=function d8d(a,b,c,d,e,f){return new d4d(a,b,c,d,e,f)};var T7d,U7d,V7d,W7d,X7d,Y7d,Z7d,$7d,_7d;var S8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',zKe);feb(1368,zKe,{},e8d);_.Cl=function f8d(a,b,c,d,e){return new g4d(a,b,c,Heb(TD(d)),Heb(TD(e)))};_.Dl=function g8d(a,b,c,d,e,f){return new h4d(a,b,c,Heb(TD(d)),Heb(TD(e)),f)};var K8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1368);feb(1369,zKe,{},h8d);_.Cl=function i8d(a,b,c,d,e){return new R3d(a,b,c,RD(d,222).a,RD(e,222).a)};_.Dl=function j8d(a,b,c,d,e,f){return new S3d(a,b,c,RD(d,222).a,RD(e,222).a,f)};var L8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1369);feb(1370,zKe,{},k8d);_.Cl=function l8d(a,b,c,d,e){return new T3d(a,b,c,RD(d,180).a,RD(e,180).a)};_.Dl=function m8d(a,b,c,d,e,f){return new U3d(a,b,c,RD(d,180).a,RD(e,180).a,f)};var M8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1370);feb(1371,zKe,{},n8d);_.Cl=function o8d(a,b,c,d,e){return new V3d(a,b,c,Kfb(UD(d)),Kfb(UD(e)))};_.Dl=function p8d(a,b,c,d,e,f){return new W3d(a,b,c,Kfb(UD(d)),Kfb(UD(e)),f)};var N8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1371);feb(1372,zKe,{},q8d);_.Cl=function r8d(a,b,c,d,e){return new X3d(a,b,c,RD(d,161).a,RD(e,161).a)};_.Dl=function s8d(a,b,c,d,e,f){return new Y3d(a,b,c,RD(d,161).a,RD(e,161).a,f)};var O8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1372);feb(1373,zKe,{},t8d);_.Cl=function u8d(a,b,c,d,e){return new Z3d(a,b,c,RD(d,17).a,RD(e,17).a)};_.Dl=function v8d(a,b,c,d,e,f){return new $3d(a,b,c,RD(d,17).a,RD(e,17).a,f)};var P8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1373);feb(1374,zKe,{},w8d);_.Cl=function x8d(a,b,c,d,e){return new _3d(a,b,c,RD(d,168).a,RD(e,168).a)};_.Dl=function y8d(a,b,c,d,e,f){return new a4d(a,b,c,RD(d,168).a,RD(e,168).a,f)};var Q8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1374);feb(1375,zKe,{},z8d);_.Cl=function A8d(a,b,c,d,e){return new e4d(a,b,c,RD(d,191).a,RD(e,191).a)};_.Dl=function B8d(a,b,c,d,e,f){return new f4d(a,b,c,RD(d,191).a,RD(e,191).a,f)};var R8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1375);feb(1353,574,{},C8d);_.Bl=function D8d(a){if(!this.a.fk(a)){throw Adb(new Ifb(xKe+rb(a)+yKe+this.a+"'"))}};var T8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1353);feb(1354,574,{},E8d);_.Bl=function F8d(a){};var U8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1354);feb(785,574,{});_.Bk=function G8d(a,b,c){var d;d=b.li(c);return d!=null};_.Ck=function H8d(a,b,c,d){var e,f;if(a.vh()&&a.wh()){e=true;f=b.li(c);if(f==null){e=false;f=this.b}else dE(f)===dE(r7d)&&(f=null);if(d==null){if(this.c!=null){b.mi(c,null);d=this.b}else{b.mi(c,r7d)}}else{this.Bl(d);b.mi(c,d)}qvd(a,this.d.Dl(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.mi(c,null):b.mi(c,r7d)}else{this.Bl(d);b.mi(c,d)}}};_.Ek=function I8d(a,b,c){var d,e;if(a.vh()&&a.wh()){d=true;e=b.li(c);if(e==null){d=false;e=this.b}else dE(e)===dE(r7d)&&(e=null);b.ni(c);qvd(a,this.d.Dl(a,2,this.e,e,this.b,d))}else{b.ni(c)}};var X8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',785);feb(1355,785,{},J8d);_.Bl=function K8d(a){if(!this.a.fk(a)){throw Adb(new Ifb(xKe+rb(a)+yKe+this.a+"'"))}};var V8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1355);feb(1356,785,{},L8d);_.Bl=function M8d(a){};var W8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1356);feb(410,512,{},N8d);_.yk=function P8d(a,b,c,d,e){var f,g,h,i,j;j=b.li(c);if(this.tk()&&dE(j)===dE(r7d)){return null}else if(this.bl()&&d&&j!=null){h=RD(j,54);if(h.Vh()){i=Vvd(a,h);if(h!=i){if(!FXd(this.a,i)){throw Adb(new Ifb(xKe+rb(i)+yKe+this.a+"'"))}b.mi(c,j=i);if(this.al()){f=RD(i,54);g=h.Th(a,!this.b?-1-BYd(a.Dh(),this.e):BYd(h.Dh(),this.b),null,null);!f.Ph()&&(g=f.Rh(a,!this.b?-1-BYd(a.Dh(),this.e):BYd(f.Dh(),this.b),null,g));!!g&&g.oj()}a.vh()&&a.wh()&&qvd(a,new b4d(a,9,this.e,h,i))}}return j}else{return j}};_.zk=function Q8d(a,b,c,d,e){var f,g;g=b.li(c);dE(g)===dE(r7d)&&(g=null);b.mi(c,d);if(this.Mj()){if(dE(g)!==dE(d)&&g!=null){f=RD(g,54);e=f.Th(a,BYd(f.Dh(),this.b),null,e)}}else this.al()&&g!=null&&(e=RD(g,54).Th(a,-1-BYd(a.Dh(),this.e),null,e));if(a.vh()&&a.wh()){!e&&(e=new gLd(4));e.nj(new b4d(a,1,this.e,g,d))}return e};_.Ak=function R8d(a,b,c,d,e){var f;f=b.li(c);dE(f)===dE(r7d)&&(f=null);b.ni(c);if(a.vh()&&a.wh()){!e&&(e=new gLd(4));this.tk()?e.nj(new b4d(a,2,this.e,f,null)):e.nj(new b4d(a,1,this.e,f,null))}return e};_.Bk=function S8d(a,b,c){var d;d=b.li(c);return d!=null};_.Ck=function T8d(a,b,c,d){var e,f,g,h,i;if(d!=null&&!FXd(this.a,d)){throw Adb(new Ifb(xKe+(ZD(d,58)?GYd(RD(d,58).Dh()):ofb(rb(d)))+yKe+this.a+"'"))}i=b.li(c);h=i!=null;this.tk()&&dE(i)===dE(r7d)&&(i=null);g=null;if(this.Mj()){if(dE(i)!==dE(d)){if(i!=null){e=RD(i,54);g=e.Th(a,BYd(e.Dh(),this.b),null,g)}if(d!=null){e=RD(d,54);g=e.Rh(a,BYd(e.Dh(),this.b),null,g)}}}else if(this.al()){if(dE(i)!==dE(d)){i!=null&&(g=RD(i,54).Th(a,-1-BYd(a.Dh(),this.e),null,g));d!=null&&(g=RD(d,54).Rh(a,-1-BYd(a.Dh(),this.e),null,g))}}d==null&&this.tk()?b.mi(c,r7d):b.mi(c,d);if(a.vh()&&a.wh()){f=new d4d(a,1,this.e,i,d,this.tk()&&!h);if(!g){qvd(a,f)}else{g.nj(f);g.oj()}}else !!g&&g.oj()};_.Ek=function U8d(a,b,c){var d,e,f,g,h;h=b.li(c);g=h!=null;this.tk()&&dE(h)===dE(r7d)&&(h=null);f=null;if(h!=null){if(this.Mj()){d=RD(h,54);f=d.Th(a,BYd(d.Dh(),this.b),null,f)}else this.al()&&(f=RD(h,54).Th(a,-1-BYd(a.Dh(),this.e),null,f))}b.ni(c);if(a.vh()&&a.wh()){e=new d4d(a,this.tk()?2:1,this.e,h,null,g);if(!f){qvd(a,e)}else{f.nj(e);f.oj()}}else !!f&&f.oj()};_.Mj=function V8d(){return false};_.al=function W8d(){return false};_.bl=function X8d(){return false};_.tk=function Y8d(){return false};var m9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',410);feb(575,410,{},Z8d);_.al=function $8d(){return true};var e9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',575);feb(1359,575,{},_8d);_.bl=function a9d(){return true};var Z8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1359);feb(787,575,{},b9d);_.tk=function c9d(){return true};var _8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',787);feb(1361,787,{},d9d);_.bl=function e9d(){return true};var $8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1361);feb(650,575,{},f9d);_.Mj=function g9d(){return true};var d9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',650);feb(1360,650,{},h9d);_.bl=function i9d(){return true};var a9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1360);feb(788,650,{},j9d);_.tk=function k9d(){return true};var c9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',788);feb(1362,788,{},l9d);_.bl=function m9d(){return true};var b9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1362);feb(651,410,{},n9d);_.bl=function o9d(){return true};var i9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',651);feb(1363,651,{},p9d);_.tk=function q9d(){return true};var f9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1363);feb(789,651,{},r9d);_.Mj=function s9d(){return true};var h9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',789);feb(1364,789,{},t9d);_.tk=function u9d(){return true};var g9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1364);feb(1357,410,{},v9d);_.tk=function w9d(){return true};var j9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1357);feb(786,410,{},x9d);_.Mj=function y9d(){return true};var l9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',786);feb(1358,786,{},z9d);_.tk=function A9d(){return true};var k9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1358);feb(790,576,wKe,D9d);_.yl=function E9d(a){return new D9d(this.a,this.c,a)};_.md=function F9d(){return this.b};_.zl=function G9d(a,b,c){return B9d(this,a,this.b,c)};_.Al=function H9d(a,b,c){return C9d(this,a,this.b,c)};var o9=sfb(SHe,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',790);feb(1365,1,$Je,I9d);_.Fk=function J9d(a){return this.a};_.Qj=function K9d(){return ZD(this.a,97)?RD(this.a,97).Qj():!this.a.dc()};_.Wb=function L9d(a){this.a.$b();this.a.Gc(RD(a,15))};_.Gk=function M9d(){ZD(this.a,97)?RD(this.a,97).Gk():this.a.$b()};var p9=sfb(SHe,'EStructuralFeatureImpl/SettingMany',1365);feb(1366,576,wKe,N9d);_.xl=function O9d(a){return new S9d((nme(),mme),this.b.ri(this.a,a))};_.md=function P9d(){return null};_.zl=function Q9d(a,b,c){return c};_.Al=function R9d(a,b,c){return c};var q9=sfb(SHe,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1366);feb(652,576,wKe,S9d);_.xl=function T9d(a){return new S9d(this.c,a)};_.md=function U9d(){return this.a};_.zl=function V9d(a,b,c){return c};_.Al=function W9d(a,b,c){return c};var r9=sfb(SHe,'EStructuralFeatureImpl/SimpleFeatureMapEntry',652);feb(403,505,PIe,X9d);_.aj=function Y9d(a){return $C(h7,rve,29,a,0,1)};_.Yi=function Z9d(){return false};var t9=sfb(SHe,'ESuperAdapter/1',403);feb(456,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,456:1,119:1,120:1},_9d);_.Lh=function aae(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new iae(this,o7,this)),this.a;}return zvd(this,a-AYd((JTd(),ITd)),vYd((d=RD(Ywd(this,16),29),!d?ITd:d),a),b,c)};_.Uh=function bae(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 2:return !this.a&&(this.a=new iae(this,o7,this)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ITd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),ITd)),a,c)};_.Wh=function cae(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),ITd)),vYd((b=RD(Ywd(this,16),29),!b?ITd:b),a))};_.bi=function dae(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:!this.a&&(this.a=new iae(this,o7,this));sLd(this.a);!this.a&&(this.a=new iae(this,o7,this));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),ITd)),vYd((c=RD(Ywd(this,16),29),!c?ITd:c),a),b)};_.ii=function eae(){return JTd(),ITd};_.ki=function fae(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:!this.a&&(this.a=new iae(this,o7,this));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),ITd)),vYd((b=RD(Ywd(this,16),29),!b?ITd:b),a))};var z9=sfb(SHe,'ETypeParameterImpl',456);feb(457,83,oKe,iae);_.Nj=function jae(a,b){return gae(this,RD(a,89),b)};_.Oj=function kae(a,b){return hae(this,RD(a,89),b)};var v9=sfb(SHe,'ETypeParameterImpl/1',457);feb(647,45,Hxe,lae);_.ec=function mae(){return new pae(this)};var y9=sfb(SHe,'ETypeParameterImpl/2',647);feb(570,Eve,Fve,pae);_.Fc=function qae(a){return nae(this,RD(a,89))};_.Gc=function rae(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=RD(c.Pb(),89);Zjb(this.a,b,'')==null&&(d=true)}return d};_.$b=function sae(){akb(this.a)};_.Hc=function tae(a){return Ujb(this.a,a)};_.Kc=function uae(){var a;return a=new vkb((new mkb(this.a)).a),new xae(a)};_.Mc=function vae(a){return oae(this,a)};_.gc=function wae(){return bkb(this.a)};var x9=sfb(SHe,'ETypeParameterImpl/2/1',570);feb(571,1,Ave,xae);_.Nb=function yae(a){Ztb(this,a)};_.Pb=function Aae(){return RD(tkb(this.a).ld(),89)};_.Ob=function zae(){return this.a.b};_.Qb=function Bae(){ukb(this.a)};var w9=sfb(SHe,'ETypeParameterImpl/2/1/1',571);feb(1329,45,Hxe,Cae);_._b=function Dae(a){return bE(a)?Yjb(this,a):!!qtb(this.f,a)};_.xc=function Eae(a){var b,c;b=bE(a)?Xjb(this,a):Wd(qtb(this.f,a));if(ZD(b,851)){c=RD(b,851);b=c.Kk();Zjb(this,RD(a,241),b);return b}else return b!=null?b:a==null?(Gie(),Fie):null};var B9=sfb(SHe,'EValidatorRegistryImpl',1329);feb(1349,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},Mae);_.ri=function Nae(a,b){switch(a.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 b==null?null:jeb(b);case 25:return Gae(b);case 27:return Hae(b);case 28:return Iae(b);case 29:return b==null?null:a2d(nAd[0],RD(b,206));case 41:return b==null?'':nfb(RD(b,296));case 42:return jeb(b);case 50:return WD(b);default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function Oae(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=BXd(a),m?fZd(m.vi(),a):-1)),a.G){case 0:return c=new mXd,c;case 1:return b=new pVd,b;case 2:return d=new HYd,d;case 4:return e=new k1d,e;case 5:return f=new A1d,f;case 6:return g=new R1d,g;case 7:return h=new yAd,h;case 10:return j=new kUd,j;case 11:return k=new q4d,k;case 12:return l=new EBd,l;case 13:return n=new R5d,n;case 14:return o=new d6d,o;case 17:return p=new v6d,p;case 18:return i=new s2d,i;case 19:return q=new _9d,q;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function Pae(a,b){switch(a.hk()){case 20:return b==null?null:new Bib(b);case 21:return b==null?null:new ejb(b);case 23:case 22:return b==null?null:Fae(b);case 26:case 24:return b==null?null:$eb(Oeb(b,-128,127)<<24>>24);case 25:return vAd(b);case 27:return Jae(b);case 28:return Kae(b);case 29:return Lae(b);case 32:case 31:return b==null?null:Neb(b);case 38:case 37:return b==null?null:new Ufb(b);case 40:case 39:return b==null?null:sgb(Oeb(b,qwe,lve));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Hgb(Peb(b));case 49:case 48:return b==null?null:bhb(Oeb(b,BKe,32767)<<16>>16);case 50:return b;default:throw Adb(new agb(VHe+a.xe()+WHe));}};var C9=sfb(SHe,'EcoreFactoryImpl',1349);feb(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},$ae);_.gb=false;_.hb=false;var Rae,Sae=false;var tab=sfb(SHe,'EcorePackageImpl',560);feb(1234,1,{851:1},cbe);_.Kk=function dbe(){return fke(),eke};var N9=sfb(SHe,'EcorePackageImpl/1',1234);feb(1243,1,OKe,ebe);_.fk=function fbe(a){return ZD(a,155)};_.gk=function gbe(a){return $C(p7,rve,155,a,0,1)};var D9=sfb(SHe,'EcorePackageImpl/10',1243);feb(1244,1,OKe,hbe);_.fk=function ibe(a){return ZD(a,197)};_.gk=function jbe(a){return $C(q7,rve,197,a,0,1)};var E9=sfb(SHe,'EcorePackageImpl/11',1244);feb(1245,1,OKe,kbe);_.fk=function lbe(a){return ZD(a,58)};_.gk=function mbe(a){return $C(r7,rve,58,a,0,1)};var F9=sfb(SHe,'EcorePackageImpl/12',1245);feb(1246,1,OKe,nbe);_.fk=function obe(a){return ZD(a,411)};_.gk=function pbe(a){return $C(s7,mKe,62,a,0,1)};var G9=sfb(SHe,'EcorePackageImpl/13',1246);feb(1247,1,OKe,qbe);_.fk=function rbe(a){return ZD(a,241)};_.gk=function sbe(a){return $C(t7,rve,241,a,0,1)};var H9=sfb(SHe,'EcorePackageImpl/14',1247);feb(1248,1,OKe,tbe);_.fk=function ube(a){return ZD(a,518)};_.gk=function vbe(a){return $C(u7,rve,2116,a,0,1)};var I9=sfb(SHe,'EcorePackageImpl/15',1248);feb(1249,1,OKe,wbe);_.fk=function xbe(a){return ZD(a,102)};_.gk=function ybe(a){return $C(v7,lKe,19,a,0,1)};var J9=sfb(SHe,'EcorePackageImpl/16',1249);feb(1250,1,OKe,zbe);_.fk=function Abe(a){return ZD(a,179)};_.gk=function Bbe(a){return $C(y7,lKe,179,a,0,1)};var K9=sfb(SHe,'EcorePackageImpl/17',1250);feb(1251,1,OKe,Cbe);_.fk=function Dbe(a){return ZD(a,480)};_.gk=function Ebe(a){return $C(A7,rve,480,a,0,1)};var L9=sfb(SHe,'EcorePackageImpl/18',1251);feb(1252,1,OKe,Fbe);_.fk=function Gbe(a){return ZD(a,561)};_.gk=function Hbe(a){return $C(C8,LJe,561,a,0,1)};var M9=sfb(SHe,'EcorePackageImpl/19',1252);feb(1235,1,OKe,Ibe);_.fk=function Jbe(a){return ZD(a,331)};_.gk=function Kbe(a){return $C(g7,lKe,35,a,0,1)};var Y9=sfb(SHe,'EcorePackageImpl/2',1235);feb(1253,1,OKe,Lbe);_.fk=function Mbe(a){return ZD(a,248)};_.gk=function Nbe(a){return $C(o7,sKe,89,a,0,1)};var O9=sfb(SHe,'EcorePackageImpl/20',1253);feb(1254,1,OKe,Obe);_.fk=function Pbe(a){return ZD(a,456)};_.gk=function Qbe(a){return $C(z7,rve,850,a,0,1)};var P9=sfb(SHe,'EcorePackageImpl/21',1254);feb(1255,1,OKe,Rbe);_.fk=function Sbe(a){return $D(a)};_.gk=function Tbe(a){return $C(QI,Nve,484,a,8,1)};var Q9=sfb(SHe,'EcorePackageImpl/22',1255);feb(1256,1,OKe,Ube);_.fk=function Vbe(a){return ZD(a,195)};_.gk=function Wbe(a){return $C(gE,Nve,195,a,0,2)};var R9=sfb(SHe,'EcorePackageImpl/23',1256);feb(1257,1,OKe,Xbe);_.fk=function Ybe(a){return ZD(a,222)};_.gk=function Zbe(a){return $C(RI,Nve,222,a,0,1)};var S9=sfb(SHe,'EcorePackageImpl/24',1257);feb(1258,1,OKe,$be);_.fk=function _be(a){return ZD(a,180)};_.gk=function ace(a){return $C(SI,Nve,180,a,0,1)};var T9=sfb(SHe,'EcorePackageImpl/25',1258);feb(1259,1,OKe,bce);_.fk=function cce(a){return ZD(a,206)};_.gk=function dce(a){return $C(qK,Nve,206,a,0,1)};var U9=sfb(SHe,'EcorePackageImpl/26',1259);feb(1260,1,OKe,ece);_.fk=function fce(a){return false};_.gk=function gce(a){return $C(T6,rve,2215,a,0,1)};var V9=sfb(SHe,'EcorePackageImpl/27',1260);feb(1261,1,OKe,hce);_.fk=function ice(a){return _D(a)};_.gk=function jce(a){return $C(VI,Nve,345,a,7,1)};var W9=sfb(SHe,'EcorePackageImpl/28',1261);feb(1262,1,OKe,kce);_.fk=function lce(a){return ZD(a,61)};_.gk=function mce(a){return $C(Y6,Ize,61,a,0,1)};var X9=sfb(SHe,'EcorePackageImpl/29',1262);feb(1236,1,OKe,nce);_.fk=function oce(a){return ZD(a,519)};_.gk=function pce(a){return $C(f7,{3:1,4:1,5:1,2033:1},598,a,0,1)};var hab=sfb(SHe,'EcorePackageImpl/3',1236);feb(1263,1,OKe,qce);_.fk=function rce(a){return ZD(a,582)};_.gk=function sce(a){return $C(Z6,rve,2039,a,0,1)};var Z9=sfb(SHe,'EcorePackageImpl/30',1263);feb(1264,1,OKe,tce);_.fk=function uce(a){return ZD(a,160)};_.gk=function vce(a){return $C(Tbb,Ize,160,a,0,1)};var $9=sfb(SHe,'EcorePackageImpl/31',1264);feb(1265,1,OKe,wce);_.fk=function xce(a){return ZD(a,76)};_.gk=function yce(a){return $C(Jbb,PKe,76,a,0,1)};var _9=sfb(SHe,'EcorePackageImpl/32',1265);feb(1266,1,OKe,zce);_.fk=function Ace(a){return ZD(a,161)};_.gk=function Bce(a){return $C(ZI,Nve,161,a,0,1)};var aab=sfb(SHe,'EcorePackageImpl/33',1266);feb(1267,1,OKe,Cce);_.fk=function Dce(a){return ZD(a,17)};_.gk=function Ece(a){return $C(bJ,Nve,17,a,0,1)};var bab=sfb(SHe,'EcorePackageImpl/34',1267);feb(1268,1,OKe,Fce);_.fk=function Gce(a){return ZD(a,296)};_.gk=function Hce(a){return $C(UI,rve,296,a,0,1)};var cab=sfb(SHe,'EcorePackageImpl/35',1268);feb(1269,1,OKe,Ice);_.fk=function Jce(a){return ZD(a,168)};_.gk=function Kce(a){return $C(eJ,Nve,168,a,0,1)};var dab=sfb(SHe,'EcorePackageImpl/36',1269);feb(1270,1,OKe,Lce);_.fk=function Mce(a){return ZD(a,85)};_.gk=function Nce(a){return $C(VK,rve,85,a,0,1)};var eab=sfb(SHe,'EcorePackageImpl/37',1270);feb(1271,1,OKe,Oce);_.fk=function Pce(a){return ZD(a,599)};_.gk=function Qce(a){return $C(Aab,rve,599,a,0,1)};var fab=sfb(SHe,'EcorePackageImpl/38',1271);feb(1272,1,OKe,Rce);_.fk=function Sce(a){return false};_.gk=function Tce(a){return $C(zab,rve,2216,a,0,1)};var gab=sfb(SHe,'EcorePackageImpl/39',1272);feb(1237,1,OKe,Uce);_.fk=function Vce(a){return ZD(a,90)};_.gk=function Wce(a){return $C(h7,rve,29,a,0,1)};var nab=sfb(SHe,'EcorePackageImpl/4',1237);feb(1273,1,OKe,Xce);_.fk=function Yce(a){return ZD(a,191)};_.gk=function Zce(a){return $C(lJ,Nve,191,a,0,1)};var iab=sfb(SHe,'EcorePackageImpl/40',1273);feb(1274,1,OKe,$ce);_.fk=function _ce(a){return bE(a)};_.gk=function ade(a){return $C(qJ,Nve,2,a,6,1)};var jab=sfb(SHe,'EcorePackageImpl/41',1274);feb(1275,1,OKe,bde);_.fk=function cde(a){return ZD(a,596)};_.gk=function dde(a){return $C(a7,rve,596,a,0,1)};var kab=sfb(SHe,'EcorePackageImpl/42',1275);feb(1276,1,OKe,ede);_.fk=function fde(a){return false};_.gk=function gde(a){return $C($6,Nve,2217,a,0,1)};var lab=sfb(SHe,'EcorePackageImpl/43',1276);feb(1277,1,OKe,hde);_.fk=function ide(a){return ZD(a,44)};_.gk=function jde(a){return $C(UK,Zve,44,a,0,1)};var mab=sfb(SHe,'EcorePackageImpl/44',1277);feb(1238,1,OKe,kde);_.fk=function lde(a){return ZD(a,142)};_.gk=function mde(a){return $C(i7,rve,142,a,0,1)};var oab=sfb(SHe,'EcorePackageImpl/5',1238);feb(1239,1,OKe,nde);_.fk=function ode(a){return ZD(a,156)};_.gk=function pde(a){return $C(k7,rve,156,a,0,1)};var pab=sfb(SHe,'EcorePackageImpl/6',1239);feb(1240,1,OKe,qde);_.fk=function rde(a){return ZD(a,468)};_.gk=function sde(a){return $C(m7,rve,685,a,0,1)};var qab=sfb(SHe,'EcorePackageImpl/7',1240);feb(1241,1,OKe,tde);_.fk=function ude(a){return ZD(a,582)};_.gk=function vde(a){return $C(l7,rve,694,a,0,1)};var rab=sfb(SHe,'EcorePackageImpl/8',1241);feb(1242,1,OKe,wde);_.fk=function xde(a){return ZD(a,479)};_.gk=function yde(a){return $C(n7,rve,479,a,0,1)};var sab=sfb(SHe,'EcorePackageImpl/9',1242);feb(1038,2080,JJe,Cde);_.Mi=function Dde(a,b){zde(this,RD(b,424))};_.Qi=function Ede(a,b){Ade(this,a,RD(b,424))};var vab=sfb(SHe,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1038);feb(1039,152,GJe,Fde);_.jj=function Gde(){return this.a.a};var uab=sfb(SHe,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1039);feb(1067,1066,{},Ide);var yab=sfb('org.eclipse.emf.ecore.plugin','EcorePlugin',1067);var Aab=ufb(QKe,'Resource');feb(799,1524,RKe);_.Hl=function Mde(a){};_.Il=function Nde(a){};_.El=function Ode(){return !this.a&&(this.a=new Zde(this)),this.a};_.Fl=function Pde(a){var b,c,d,e,f;d=a.length;if(d>0){BFb(0,a.length);if(a.charCodeAt(0)==47){f=new cnb(4);e=1;for(b=1;b<d;++b){BFb(b,a.length);if(a.charCodeAt(b)==47){Rmb(f,e==b?'':(AFb(e,b,a.length),a.substr(e,b-e)));e=b+1}}Rmb(f,(BFb(e,a.length+1),a.substr(e)));return Jde(this,f)}else{BFb(d-1,a.length);if(a.charCodeAt(d-1)==63){c=uhb(a,Fhb(63),d-2);c>0&&(a=(AFb(0,c,a.length),a.substr(0,c)))}}}return Kde(this,a)};_.Gl=function Qde(){return this.c};_.Ib=function Rde(){var a;return nfb(this.Rm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var Eab=sfb(SKe,'ResourceImpl',799);feb(1525,799,RKe,Sde);var Bab=sfb(SKe,'BinaryResourceImpl',1525);feb(1190,708,QIe);_.bj=function Vde(a){return ZD(a,58)?Tde(this,RD(a,58)):ZD(a,599)?new dMd(RD(a,599).El()):dE(a)===dE(this.f)?RD(a,16).Kc():(jQd(),iQd.a)};_.Ob=function Wde(){return Ude(this)};_.a=false;var Ebb=sfb(ZJe,'EcoreUtil/ContentTreeIterator',1190);feb(1526,1190,QIe,Xde);_.bj=function Yde(a){return dE(a)===dE(this.f)?RD(a,15).Kc():new _je(RD(a,58))};var Cab=sfb(SKe,'ResourceImpl/5',1526);feb(658,2092,nKe,Zde);_.Hc=function $de(a){return this.i<=4?PHd(this,a):ZD(a,54)&&RD(a,54).Jh()==this.a};_.Mi=function _de(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.Oi=function aee(a,b){a==0?this.a.b||(this.a.b=true,null):$Gd(this,a,b)};_.Qi=function bee(a,b){};_.Ri=function cee(a,b,c){};_.Lj=function dee(){return 2};_.jj=function eee(){return this.a};_.Mj=function fee(){return true};_.Nj=function gee(a,b){var c;c=RD(a,54);b=c.fi(this.a,b);return b};_.Oj=function hee(a,b){var c;c=RD(a,54);return c.fi(null,b)};_.Pj=function iee(){return false};_.Si=function jee(){return true};_.aj=function kee(a){return $C(r7,rve,58,a,0,1)};_.Yi=function lee(){return false};var Dab=sfb(SKe,'ResourceImpl/ContentsEList',658);feb(970,2062,kwe,mee);_.fd=function nee(a){return this.a.Ki(a)};_.gc=function oee(){return this.a.gc()};var Fab=sfb(ZJe,'AbstractSequentialInternalEList/1',970);var hke,ike,jke,kke;feb(634,1,{},Yee);var pee,qee;var Lab=sfb(ZJe,'BasicExtendedMetaData',634);feb(1181,1,{},afe);_.Jl=function bfe(){return null};_.Kl=function cfe(){this.a==-2&&$ee(this,uee(this.d,this.b));return this.a};_.Ll=function dfe(){return null};_.Ml=function efe(){return yob(),yob(),vob};_.xe=function ffe(){this.c==fLe&&_ee(this,zee(this.d,this.b));return this.c};_.Nl=function gfe(){return 0};_.a=-2;_.c=fLe;var Hab=sfb(ZJe,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1181);feb(1182,1,{},mfe);_.Jl=function nfe(){this.a==(ree(),pee)&&hfe(this,tee(this.f,this.b));return this.a};_.Kl=function ofe(){return 0};_.Ll=function pfe(){this.c==(ree(),pee)&&ife(this,xee(this.f,this.b));return this.c};_.Ml=function qfe(){!this.d&&jfe(this,yee(this.f,this.b));return this.d};_.xe=function rfe(){this.e==fLe&&kfe(this,zee(this.f,this.b));return this.e};_.Nl=function sfe(){this.g==-2&&lfe(this,Cee(this.f,this.b));return this.g};_.e=fLe;_.g=-2;var Iab=sfb(ZJe,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1182);feb(1180,1,{},wfe);_.b=false;_.c=false;var Jab=sfb(ZJe,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1180);feb(1183,1,{},Jfe);_.c=-2;_.e=fLe;_.f=fLe;var Kab=sfb(ZJe,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1183);feb(593,632,oKe,Kfe);_.Lj=function Lfe(){return this.c};_.ol=function Mfe(){return false};_.Wi=function Nfe(a,b){return b};_.c=0;var Yab=sfb(ZJe,'EDataTypeEList',593);var Tbb=ufb(ZJe,'FeatureMap');feb(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},Uge);_.bd=function Vge(a,b){Ofe(this,a,RD(b,76))};_.Fc=function Wge(a){return Rfe(this,RD(a,76))};_.Hi=function _ge(a){Wfe(this,RD(a,76))};_.Nj=function khe(a,b){return mge(this,RD(a,76),b)};_.Oj=function lhe(a,b){return oge(this,RD(a,76),b)};_.Ti=function nhe(a,b){return uge(this,a,b)};_.Wi=function phe(a,b){return zge(this,a,RD(b,76))};_.hd=function rhe(a,b){return Cge(this,a,RD(b,76))};_.Uj=function vhe(a,b){return Ige(this,RD(a,76),b)};_.Vj=function whe(a,b){return Kge(this,RD(a,76),b)};_.Wj=function xhe(a,b,c){return Lge(this,RD(a,76),RD(b,76),c)};_.Zi=function zhe(a,b){return Tge(this,a,RD(b,76))};_.Ol=function Xge(a,b){return Qfe(this,a,b)};_.cd=function Yge(a,b){var c,d,e,f,g,h,i,j,k;j=new ZHd(b.gc());for(e=b.Kc();e.Ob();){d=RD(e.Pb(),76);f=d.Lk();if(qke(this.e,f)){(!f.Si()||!cge(this,f,d.md())&&!PHd(j,d))&&WGd(j,d)}else{k=pke(this.e.Dh(),f);c=RD(this.g,124);g=true;for(h=0;h<this.i;++h){i=c[h];if(k.am(i.Lk())){RD(eHd(this,h,d),76);g=false;break}}g&&WGd(j,d)}}return XGd(this,a,j)};_.Gc=function Zge(a){var b,c,d,e,f,g,h,i,j;i=new ZHd(a.gc());for(d=a.Kc();d.Ob();){c=RD(d.Pb(),76);e=c.Lk();if(qke(this.e,e)){(!e.Si()||!cge(this,e,c.md())&&!PHd(i,c))&&WGd(i,c)}else{j=pke(this.e.Dh(),e);b=RD(this.g,124);f=true;for(g=0;g<this.i;++g){h=b[g];if(j.am(h.Lk())){RD(eHd(this,g,c),76);f=false;break}}f&&WGd(i,c)}}return YGd(this,i)};_.Fi=function $ge(a){this.j=-1;return nLd(this,this.i,a)};_.Pl=function ahe(a,b,c){return Xfe(this,a,b,c)};_.Xk=function bhe(a,b){return _fe(this,a,b)};_.Ql=function che(a,b,c){return age(this,a,b,c)};_.Rl=function dhe(){return this};_.Sl=function ehe(a,b){return ige(this,a,b)};_.Tl=function fhe(a){return RD(QHd(this,a),76).Lk()};_.Ul=function ghe(a){return RD(QHd(this,a),76).md()};_.Vl=function hhe(){return this.b};_.Mj=function ihe(){return true};_.Tj=function jhe(){return true};_.Wl=function mhe(a){return !pge(this,a)};_.aj=function ohe(a){return $C(Ibb,PKe,343,a,0,1)};_.pl=function qhe(a){return Age(this,a)};_.Wb=function she(a){Dge(this,a)};_.Xl=function the(a,b){Fge(this,a,b)};_.Yl=function uhe(a){return Gge(this,a)};_.Zl=function yhe(a){Sge(this,a)};var Oab=sfb(ZJe,'BasicFeatureMap',78);feb(1960,1,Jve);_.Nb=function Fhe(a){Ztb(this,a)};_.Rb=function Ehe(b){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{Pfe(this.e,this.b,this.a,b);this.d=this.e.j;Dhe(this)}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.Ob=function Ghe(){return Bhe(this)};_.Sb=function Hhe(){return Che(this)};_.Pb=function Ihe(){return Dhe(this)};_.Tb=function Jhe(){return this.a};_.Ub=function Khe(){var a;if(Che(this)){Ahe(this);this.g=--this.a;if(this.ul()){a=Bge(this.e,this.b,this.c,this.a,this.j);this.j=a}this.i=0;return this.j}else{throw Adb(new Dvb)}};_.Vb=function Lhe(){return this.a-1};_.Qb=function Mhe(){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{xge(this.e,this.b,this.g);this.d=this.e.j;if(this.g<this.a){--this.a;--this.c}--this.g}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.ul=function Nhe(){return false};_.Wb=function Ohe(b){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{Ege(this.e,this.b,this.g,b);this.d=this.e.j}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.a=0;_.c=0;_.d=0;_.f=false;_.g=0;_.i=0;var Lbb=sfb(ZJe,'FeatureMapUtil/BasicFeatureEIterator',1960);feb(420,1960,Jve,Phe);_.$l=function Qhe(){var a,b,c;c=this.e.i;a=RD(this.e.g,124);while(this.c<c){b=a[this.c];if(this.k.am(b.Lk())){this.j=this.f?b:b.md();this.i=2;return true}++this.c}this.i=1;this.g=-1;return false};_._l=function Rhe(){var a,b;a=RD(this.e.g,124);while(--this.c>=0){b=a[this.c];if(this.k.am(b.Lk())){this.j=this.f?b:b.md();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var Mab=sfb(ZJe,'BasicFeatureMap/FeatureEIterator',420);feb(676,420,Jve,She);_.ul=function The(){return true};var Nab=sfb(ZJe,'BasicFeatureMap/ResolvingFeatureEIterator',676);feb(968,495,uKe,Uhe);_.pj=function Vhe(){return this};var Rab=sfb(ZJe,'EContentsEList/1',968);feb(969,495,uKe,Whe);_.ul=function Xhe(){return false};var Sab=sfb(ZJe,'EContentsEList/2',969);feb(967,287,vKe,Yhe);_.wl=function Zhe(a){};_.Ob=function $he(){return false};_.Sb=function _he(){return false};var Tab=sfb(ZJe,'EContentsEList/FeatureIteratorImpl/1',967);feb(840,593,oKe,aie);_.Ni=function bie(){this.a=true};_.Qj=function cie(){return this.a};_.Gk=function die(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var Xab=sfb(ZJe,'EDataTypeEList/Unsettable',840);feb(1958,593,oKe,eie);_.Si=function fie(){return true};var $ab=sfb(ZJe,'EDataTypeUniqueEList',1958);feb(1959,840,oKe,gie);_.Si=function hie(){return true};var Zab=sfb(ZJe,'EDataTypeUniqueEList/Unsettable',1959);feb(147,83,oKe,iie);_.nl=function jie(){return true};_.Wi=function kie(a,b){return gZd(this,a,RD(b,58))};var _ab=sfb(ZJe,'EObjectContainmentEList/Resolving',147);feb(1184,555,oKe,lie);_.nl=function mie(){return true};_.Wi=function nie(a,b){return gZd(this,a,RD(b,58))};var abb=sfb(ZJe,'EObjectContainmentEList/Unsettable/Resolving',1184);feb(766,14,oKe,oie);_.Ni=function pie(){this.a=true};_.Qj=function qie(){return this.a};_.Gk=function rie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var fbb=sfb(ZJe,'EObjectContainmentWithInverseEList/Unsettable',766);feb(1222,766,oKe,sie);_.nl=function tie(){return true};_.Wi=function uie(a,b){return gZd(this,a,RD(b,58))};var ebb=sfb(ZJe,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1222);feb(757,504,oKe,vie);_.Ni=function wie(){this.a=true};_.Qj=function xie(){return this.a};_.Gk=function yie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var hbb=sfb(ZJe,'EObjectEList/Unsettable',757);feb(338,504,oKe,zie);_.nl=function Aie(){return true};_.Wi=function Bie(a,b){return gZd(this,a,RD(b,58))};var kbb=sfb(ZJe,'EObjectResolvingEList',338);feb(1844,757,oKe,Cie);_.nl=function Die(){return true};_.Wi=function Eie(a,b){return gZd(this,a,RD(b,58))};var jbb=sfb(ZJe,'EObjectResolvingEList/Unsettable',1844);feb(1527,1,{},Hie);var Fie;var lbb=sfb(ZJe,'EObjectValidator',1527);feb(559,504,oKe,Iie);_.il=function Jie(){return this.d};_.jl=function Kie(){return this.b};_.Mj=function Lie(){return true};_.ml=function Mie(){return true};_.b=0;var pbb=sfb(ZJe,'EObjectWithInverseEList',559);feb(1225,559,oKe,Nie);_.ll=function Oie(){return true};var mbb=sfb(ZJe,'EObjectWithInverseEList/ManyInverse',1225);feb(635,559,oKe,Pie);_.Ni=function Qie(){this.a=true};_.Qj=function Rie(){return this.a};_.Gk=function Sie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var obb=sfb(ZJe,'EObjectWithInverseEList/Unsettable',635);feb(1224,635,oKe,Tie);_.ll=function Uie(){return true};var nbb=sfb(ZJe,'EObjectWithInverseEList/Unsettable/ManyInverse',1224);feb(767,559,oKe,Vie);_.nl=function Wie(){return true};_.Wi=function Xie(a,b){return gZd(this,a,RD(b,58))};var tbb=sfb(ZJe,'EObjectWithInverseResolvingEList',767);feb(32,767,oKe,Yie);_.ll=function Zie(){return true};var qbb=sfb(ZJe,'EObjectWithInverseResolvingEList/ManyInverse',32);feb(768,635,oKe,$ie);_.nl=function _ie(){return true};_.Wi=function aje(a,b){return gZd(this,a,RD(b,58))};var sbb=sfb(ZJe,'EObjectWithInverseResolvingEList/Unsettable',768);feb(1223,768,oKe,bje);_.ll=function cje(){return true};var rbb=sfb(ZJe,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1223);feb(1185,632,oKe);_.Li=function dje(){return (this.b&1792)==0};_.Ni=function eje(){this.b|=1};_.kl=function fje(){return (this.b&4)!=0};_.Mj=function gje(){return (this.b&40)!=0};_.ll=function hje(){return (this.b&16)!=0};_.ml=function ije(){return (this.b&8)!=0};_.nl=function jje(){return (this.b&cKe)!=0};_.al=function kje(){return (this.b&32)!=0};_.ol=function lje(){return (this.b&gwe)!=0};_.fk=function mje(a){return !this.d?this.Lk().Hk().fk(a):QRd(this.d,a)};_.Qj=function nje(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.Si=function oje(){return (this.b&128)!=0};_.Gk=function qje(){var a;sLd(this);if((this.b&2)!=0){if(Mvd(this.e)){a=(this.b&1)!=0;this.b&=-2;eZd(this,new Q3d(this.e,2,BYd(this.e.Dh(),this.Lk()),a,false))}else{this.b&=-2}}};_.Yi=function rje(){return (this.b&1536)==0};_.b=0;var vbb=sfb(ZJe,'EcoreEList/Generic',1185);feb(1186,1185,oKe,sje);_.Lk=function tje(){return this.a};var ubb=sfb(ZJe,'EcoreEList/Dynamic',1186);feb(765,66,PIe,uje);_.aj=function vje(a){return IMd(this.a.a,a)};var zbb=sfb(ZJe,'EcoreEMap/1',765);feb(764,83,oKe,wje);_.Mi=function xje(a,b){UNd(this.b,RD(b,136))};_.Oi=function yje(a,b){TNd(this.b)};_.Pi=function zje(a,b,c){var d;++(d=this.b,RD(b,136),d).e};_.Qi=function Aje(a,b){VNd(this.b,RD(b,136))};_.Ri=function Bje(a,b,c){VNd(this.b,RD(c,136));dE(c)===dE(b)&&RD(c,136).Ci(aOd(RD(b,136).ld()));UNd(this.b,RD(b,136))};var Abb=sfb(ZJe,'EcoreEMap/DelegateEObjectContainmentEList',764);feb(1220,141,_Je,Cje);var Cbb=sfb(ZJe,'EcoreEMap/Unsettable',1220);feb(1221,764,oKe,Dje);_.Ni=function Eje(){this.a=true};_.Qj=function Fje(){return this.a};_.Gk=function Gje(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var Bbb=sfb(ZJe,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1221);feb(1189,215,Hxe,Zje);_.a=false;_.b=false;var Fbb=sfb(ZJe,'EcoreUtil/Copier',1189);feb(759,1,Ave,_je);_.Nb=function ake(a){Ztb(this,a)};_.Ob=function bke(){return $je(this)};_.Pb=function cke(){var a;$je(this);a=this.b;this.b=null;return a};_.Qb=function dke(){this.a.Qb()};var Gbb=sfb(ZJe,'EcoreUtil/ProperContentIterator',759);feb(1528,1527,{},gke);var eke;var Hbb=sfb(ZJe,'EcoreValidator',1528);var mke;var Sbb=ufb(ZJe,'FeatureMapUtil/Validator');feb(1295,1,{2041:1},rke);_.am=function ske(a){return true};var Kbb=sfb(ZJe,'FeatureMapUtil/1',1295);feb(773,1,{2041:1},wke);_.am=function xke(a){var b;if(this.c==a)return true;b=TD(Wjb(this.a,a));if(b==null){if(vke(this,a)){yke(this.a,a,(Geb(),Feb));return true}else{yke(this.a,a,(Geb(),Eeb));return false}}else{return b==(Geb(),Feb)}};_.e=false;var tke;var Nbb=sfb(ZJe,'FeatureMapUtil/BasicValidator',773);feb(774,45,Hxe,zke);var Mbb=sfb(ZJe,'FeatureMapUtil/BasicValidator/Cache',774);feb(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},Eke);_.bd=function Fke(a,b){Pfe(this.c,this.b,a,b)};_.Fc=function Gke(a){return Qfe(this.c,this.b,a)};_.cd=function Hke(a,b){return Sfe(this.c,this.b,a,b)};_.Gc=function Ike(a){return Ake(this,a)};_.Gi=function Jke(a,b){Ufe(this.c,this.b,a,b)};_.Wk=function Kke(a,b){return Xfe(this.c,this.b,a,b)};_.$i=function Lke(a){return hge(this.c,this.b,a,false)};_.Ii=function Mke(){return Yfe(this.c,this.b)};_.Ji=function Nke(){return Zfe(this.c,this.b)};_.Ki=function Oke(a){return $fe(this.c,this.b,a)};_.Xk=function Pke(a,b){return Bke(this,a,b)};_.$b=function Qke(){Cke(this)};_.Hc=function Rke(a){return cge(this.c,this.b,a)};_.Ic=function Ske(a){return ege(this.c,this.b,a)};_.Xb=function Tke(a){return hge(this.c,this.b,a,true)};_.Fk=function Uke(a){return this};_.dd=function Vke(a){return jge(this.c,this.b,a)};_.dc=function Wke(){return Dke(this)};_.Qj=function Xke(){return !pge(this.c,this.b)};_.Kc=function Yke(){return qge(this.c,this.b)};_.ed=function Zke(){return sge(this.c,this.b)};_.fd=function $ke(a){return tge(this.c,this.b,a)};_.Ti=function _ke(a,b){return vge(this.c,this.b,a,b)};_.Ui=function ale(a,b){wge(this.c,this.b,a,b)};_.gd=function ble(a){return xge(this.c,this.b,a)};_.Mc=function cle(a){return yge(this.c,this.b,a)};_.hd=function dle(a,b){return Ege(this.c,this.b,a,b)};_.Wb=function ele(a){bge(this.c,this.b);Ake(this,RD(a,15))};_.gc=function fle(){return Nge(this.c,this.b)};_.Pc=function gle(){return Oge(this.c,this.b)};_.Qc=function hle(a){return Qge(this.c,this.b,a)};_.Ib=function ile(){var a,b;b=new Qhb;b.a+='[';for(a=Yfe(this.c,this.b);Bhe(a);){Nhb(b,Ghb(Dhe(a)));Bhe(a)&&(b.a+=pve,b)}b.a+=']';return b.a};_.Gk=function jle(){bge(this.c,this.b)};var Obb=sfb(ZJe,'FeatureMapUtil/FeatureEList',509);feb(644,38,GJe,lle);_.hj=function mle(a){return kle(this,a)};_.mj=function nle(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.g=a.ij();a.gj()==1&&(this.d=1);return true}break}case 3:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=5;b=new ZHd(2);WGd(b,this.g);WGd(b,a.ij());this.g=b;return true}break}}break}case 5:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){c=RD(this.g,16);c.Fc(a.ij());return true}break}}break}case 4:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=1;this.g=a.ij();return true}break}case 4:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=6;h=new ZHd(2);WGd(h,this.n);WGd(h,a.kj());this.n=h;g=cD(WC(kE,1),Pwe,28,15,[this.o,a.lj()]);this.g=g;return true}break}}break}case 6:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){c=RD(this.n,16);c.Fc(a.kj());g=RD(this.g,53);d=$C(kE,Pwe,28,g.length+1,15,1);hib(g,0,d,0,g.length);d[g.length]=a.lj();this.g=d;return true}break}}break}}return false};var Pbb=sfb(ZJe,'FeatureMapUtil/FeatureENotificationImpl',644);feb(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},ole);_.Ol=function ple(a,b){return Qfe(this.c,a,b)};_.Pl=function qle(a,b,c){return Xfe(this.c,a,b,c)};_.Ql=function rle(a,b,c){return age(this.c,a,b,c)};_.Rl=function sle(){return this};_.Sl=function tle(a,b){return ige(this.c,a,b)};_.Tl=function ule(a){return RD(hge(this.c,this.b,a,false),76).Lk()};_.Ul=function vle(a){return RD(hge(this.c,this.b,a,false),76).md()};_.Vl=function wle(){return this.a};_.Wl=function xle(a){return !pge(this.c,a)};_.Xl=function yle(a,b){Fge(this.c,a,b)};_.Yl=function zle(a){return Gge(this.c,a)};_.Zl=function Ale(a){Sge(this.c,a)};var Qbb=sfb(ZJe,'FeatureMapUtil/FeatureFeatureMap',564);feb(1294,1,$Je,Ble);_.Fk=function Cle(a){return hge(this.b,this.a,-1,a)};_.Qj=function Dle(){return !pge(this.b,this.a)};_.Wb=function Ele(a){Fge(this.b,this.a,a)};_.Gk=function Fle(){bge(this.b,this.a)};var Rbb=sfb(ZJe,'FeatureMapUtil/FeatureValue',1294);var Gle,Hle,Ile,Jle,Kle;var Vbb=ufb(hLe,'AnyType');feb(680,63,swe,Mle);var Wbb=sfb(hLe,'InvalidDatatypeValueException',680);var Xbb=ufb(hLe,iLe);var Ybb=ufb(hLe,jLe);var Zbb=ufb(hLe,kLe);var Nle;var Ple;var Rle,Sle,Tle,Ule,Vle,Wle,Xle,Yle,Zle,$le,_le,ame,bme,cme,dme,eme,fme,gme,hme,ime,jme,kme,lme,mme;feb(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},ome);_.Lh=function pme(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new Uge(this,0)),this.c;return !this.c&&(this.c=new Uge(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160);return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Vl();case 2:if(c)return !this.b&&(this.b=new Uge(this,2)),this.b;return !this.b&&(this.b=new Uge(this,2)),this.b.b;}return zvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Uh=function qme(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new Uge(this,0)),_fe(this.c,a,c);case 1:return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),71)).Xk(a,c);case 2:return !this.b&&(this.b=new Uge(this,2)),_fe(this.b,a,c);}return d=RD(vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),b),69),d.wk().Ak(this,Yvd(this),b-AYd(this.ii()),a,c)};_.Wh=function rme(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).dc();case 2:return !!this.b&&this.b.i!=0;}return Avd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function sme(a,b){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));Dge(this.c,b);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Wb(b);return;case 2:!this.b&&(this.b=new Uge(this,2));Dge(this.b,b);return;}Bvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function tme(){return nme(),Rle};_.ki=function ume(a){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));sLd(this.c);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).$b();return;case 2:!this.b&&(this.b=new Uge(this,2));sLd(this.b);return;}Cvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function vme(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (mixed: ';Mhb(a,this.c);a.a+=', anyAttribute: ';Mhb(a,this.b);a.a+=')';return a.a};var $bb=sfb(lLe,'AnyTypeImpl',844);feb(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},yme);_.Lh=function zme(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return zvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Wh=function Ame(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return Avd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Bme(a,b){switch(a){case 0:wme(this,WD(b));return;case 1:xme(this,WD(b));return;}Bvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Cme(){return nme(),cme};_.ki=function Dme(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}Cvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function Eme(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (data: ';Nhb(a,this.a);a.a+=', target: ';Nhb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var _bb=sfb(lLe,'ProcessingInstructionImpl',681);feb(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},Hme);_.Lh=function Ime(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new Uge(this,0)),this.c;return !this.c&&(this.c=new Uge(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160);return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Vl();case 2:if(c)return !this.b&&(this.b=new Uge(this,2)),this.b;return !this.b&&(this.b=new Uge(this,2)),this.b.b;case 3:return !this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true));case 4:return Ije(this.a,(!this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))));case 5:return this.a;}return zvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Wh=function Jme(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))!=null;case 4:return Ije(this.a,(!this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))))!=null;case 5:return !!this.a;}return Avd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Kme(a,b){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));Dge(this.c,b);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Wb(b);return;case 2:!this.b&&(this.b=new Uge(this,2));Dge(this.b,b);return;case 3:Gme(this,WD(b));return;case 4:Gme(this,Hje(this.a,b));return;case 5:Fme(this,RD(b,156));return;}Bvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Lme(){return nme(),eme};_.ki=function Mme(a){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));sLd(this.c);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).$b();return;case 2:!this.b&&(this.b=new Uge(this,2));sLd(this.b);return;case 3:!this.c&&(this.c=new Uge(this,0));Fge(this.c,(nme(),fme),null);return;case 4:Gme(this,Hje(this.a,null));return;case 5:this.a=null;return;}Cvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};var acb=sfb(lLe,'SimpleAnyTypeImpl',682);feb(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},Nme);_.Lh=function Ome(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new Uge(this,0)),this.a;return !this.a&&(this.a=new Uge(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),this.b):(!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),dOd(this.b));case 2:return c?(!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),this.c):(!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),dOd(this.c));case 3:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),ime));case 4:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),jme));case 5:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),lme));case 6:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),mme));}return zvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Uh=function Pme(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new Uge(this,0)),_fe(this.a,a,c);case 1:return !this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),BVd(this.b,a,c);case 2:return !this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),BVd(this.c,a,c);case 5:return !this.a&&(this.a=new Uge(this,0)),Bke(rge(this.a,(nme(),lme)),a,c);}return d=RD(vYd((this.j&2)==0?(nme(),hme):(!this.k&&(this.k=new fUd),this.k).Nk(),b),69),d.wk().Ak(this,Yvd(this),b-AYd((nme(),hme)),a,c)};_.Wh=function Qme(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),ime)));case 4:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),jme)));case 5:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),lme)));case 6:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),mme)));}return Avd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Rme(a,b){switch(a){case 0:!this.a&&(this.a=new Uge(this,0));Dge(this.a,b);return;case 1:!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1));CVd(this.b,b);return;case 2:!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2));CVd(this.c,b);return;case 3:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),ime)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,ime),RD(b,16));return;case 4:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),jme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,jme),RD(b,16));return;case 5:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),lme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,lme),RD(b,16));return;case 6:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),mme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,mme),RD(b,16));return;}Bvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Sme(){return nme(),hme};_.ki=function Tme(a){switch(a){case 0:!this.a&&(this.a=new Uge(this,0));sLd(this.a);return;case 1:!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),ime)));return;case 4:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),jme)));return;case 5:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),lme)));return;case 6:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),mme)));return;}Cvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function Ume(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (mixed: ';Mhb(a,this.a);a.a+=')';return a.a};var bcb=sfb(lLe,'XMLTypeDocumentRootImpl',683);feb(2028,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},rne);_.ri=function sne(a,b){switch(a.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 b==null?null:jeb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return WD(b);case 6:return _me(RD(b,195));case 12:case 47:case 49:case 11:return tAd(this,a,b);case 13:return b==null?null:yib(RD(b,247));case 15:case 14:return b==null?null:ane(Kfb(UD(b)));case 17:return bne((nme(),b));case 18:return bne(b);case 21:case 20:return b==null?null:cne(RD(b,161).a);case 27:return dne(RD(b,195));case 30:return ene((nme(),RD(b,15)));case 31:return ene(RD(b,15));case 40:return hne((nme(),b));case 42:return fne((nme(),b));case 43:return fne(b);case 59:case 48:return gne((nme(),b));default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function tne(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=BXd(a),c?fZd(c.vi(),a):-1)),a.G){case 0:return b=new ome,b;case 1:return d=new yme,d;case 2:return e=new Hme,e;case 3:return f=new Nme,f;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function une(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.hk()){case 5:case 52:case 4:return b;case 6:return ine(b);case 8:case 7:return b==null?null:$me(b);case 9:return b==null?null:$eb(Oeb((d=nue(b,true),d.length>0&&(BFb(0,d.length),d.charCodeAt(0)==43)?(BFb(1,d.length+1),d.substr(1)):d),-128,127)<<24>>24);case 10:return b==null?null:$eb(Oeb((e=nue(b,true),e.length>0&&(BFb(0,e.length),e.charCodeAt(0)==43)?(BFb(1,e.length+1),e.substr(1)):e),-128,127)<<24>>24);case 11:return WD(uAd(this,(nme(),Vle),b));case 12:return WD(uAd(this,(nme(),Wle),b));case 13:return b==null?null:new Bib(nue(b,true));case 15:case 14:return jne(b);case 16:return WD(uAd(this,(nme(),Xle),b));case 17:return kne((nme(),b));case 18:return kne(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return nue(b,true);case 21:case 20:return lne(b);case 22:return WD(uAd(this,(nme(),Yle),b));case 23:return WD(uAd(this,(nme(),Zle),b));case 24:return WD(uAd(this,(nme(),$le),b));case 25:return WD(uAd(this,(nme(),_le),b));case 26:return WD(uAd(this,(nme(),ame),b));case 27:return mne(b);case 30:return nne((nme(),b));case 31:return nne(b);case 32:return b==null?null:sgb(Oeb((k=nue(b,true),k.length>0&&(BFb(0,k.length),k.charCodeAt(0)==43)?(BFb(1,k.length+1),k.substr(1)):k),qwe,lve));case 33:return b==null?null:new ejb((l=nue(b,true),l.length>0&&(BFb(0,l.length),l.charCodeAt(0)==43)?(BFb(1,l.length+1),l.substr(1)):l));case 34:return b==null?null:sgb(Oeb((m=nue(b,true),m.length>0&&(BFb(0,m.length),m.charCodeAt(0)==43)?(BFb(1,m.length+1),m.substr(1)):m),qwe,lve));case 36:return b==null?null:Hgb(Peb((n=nue(b,true),n.length>0&&(BFb(0,n.length),n.charCodeAt(0)==43)?(BFb(1,n.length+1),n.substr(1)):n)));case 37:return b==null?null:Hgb(Peb((o=nue(b,true),o.length>0&&(BFb(0,o.length),o.charCodeAt(0)==43)?(BFb(1,o.length+1),o.substr(1)):o)));case 40:return qne((nme(),b));case 42:return one((nme(),b));case 43:return one(b);case 44:return b==null?null:new ejb((p=nue(b,true),p.length>0&&(BFb(0,p.length),p.charCodeAt(0)==43)?(BFb(1,p.length+1),p.substr(1)):p));case 45:return b==null?null:new ejb((q=nue(b,true),q.length>0&&(BFb(0,q.length),q.charCodeAt(0)==43)?(BFb(1,q.length+1),q.substr(1)):q));case 46:return nue(b,false);case 47:return WD(uAd(this,(nme(),bme),b));case 59:case 48:return pne((nme(),b));case 49:return WD(uAd(this,(nme(),dme),b));case 50:return b==null?null:bhb(Oeb((r=nue(b,true),r.length>0&&(BFb(0,r.length),r.charCodeAt(0)==43)?(BFb(1,r.length+1),r.substr(1)):r),BKe,32767)<<16>>16);case 51:return b==null?null:bhb(Oeb((f=nue(b,true),f.length>0&&(BFb(0,f.length),f.charCodeAt(0)==43)?(BFb(1,f.length+1),f.substr(1)):f),BKe,32767)<<16>>16);case 53:return WD(uAd(this,(nme(),gme),b));case 55:return b==null?null:bhb(Oeb((g=nue(b,true),g.length>0&&(BFb(0,g.length),g.charCodeAt(0)==43)?(BFb(1,g.length+1),g.substr(1)):g),BKe,32767)<<16>>16);case 56:return b==null?null:bhb(Oeb((h=nue(b,true),h.length>0&&(BFb(0,h.length),h.charCodeAt(0)==43)?(BFb(1,h.length+1),h.substr(1)):h),BKe,32767)<<16>>16);case 57:return b==null?null:Hgb(Peb((i=nue(b,true),i.length>0&&(BFb(0,i.length),i.charCodeAt(0)==43)?(BFb(1,i.length+1),i.substr(1)):i)));case 58:return b==null?null:Hgb(Peb((j=nue(b,true),j.length>0&&(BFb(0,j.length),j.charCodeAt(0)==43)?(BFb(1,j.length+1),j.substr(1)):j)));case 60:return b==null?null:sgb(Oeb((c=nue(b,true),c.length>0&&(BFb(0,c.length),c.charCodeAt(0)==43)?(BFb(1,c.length+1),c.substr(1)):c),qwe,lve));case 61:return b==null?null:sgb(Oeb(nue(b,true),qwe,lve));default:throw Adb(new agb(VHe+a.xe()+WHe));}};var Vme,Wme,Xme,Yme;var ccb=sfb(lLe,'XMLTypeFactoryImpl',2028);feb(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},Bne);_.N=false;_.O=false;var wne=false;var bdb=sfb(lLe,'XMLTypePackageImpl',594);feb(1961,1,{851:1},Ene);_.Kk=function Fne(){return rue(),que};var ncb=sfb(lLe,'XMLTypePackageImpl/1',1961);feb(1970,1,OKe,Gne);_.fk=function Hne(a){return bE(a)};_.gk=function Ine(a){return $C(qJ,Nve,2,a,6,1)};var dcb=sfb(lLe,'XMLTypePackageImpl/10',1970);feb(1971,1,OKe,Jne);_.fk=function Kne(a){return bE(a)};_.gk=function Lne(a){return $C(qJ,Nve,2,a,6,1)};var ecb=sfb(lLe,'XMLTypePackageImpl/11',1971);feb(1972,1,OKe,Mne);_.fk=function Nne(a){return bE(a)};_.gk=function One(a){return $C(qJ,Nve,2,a,6,1)};var fcb=sfb(lLe,'XMLTypePackageImpl/12',1972);feb(1973,1,OKe,Pne);_.fk=function Qne(a){return _D(a)};_.gk=function Rne(a){return $C(VI,Nve,345,a,7,1)};var gcb=sfb(lLe,'XMLTypePackageImpl/13',1973);feb(1974,1,OKe,Sne);_.fk=function Tne(a){return bE(a)};_.gk=function Une(a){return $C(qJ,Nve,2,a,6,1)};var hcb=sfb(lLe,'XMLTypePackageImpl/14',1974);feb(1975,1,OKe,Vne);_.fk=function Wne(a){return ZD(a,15)};_.gk=function Xne(a){return $C(QK,Ize,15,a,0,1)};var icb=sfb(lLe,'XMLTypePackageImpl/15',1975);feb(1976,1,OKe,Yne);_.fk=function Zne(a){return ZD(a,15)};_.gk=function $ne(a){return $C(QK,Ize,15,a,0,1)};var jcb=sfb(lLe,'XMLTypePackageImpl/16',1976);feb(1977,1,OKe,_ne);_.fk=function aoe(a){return bE(a)};_.gk=function boe(a){return $C(qJ,Nve,2,a,6,1)};var kcb=sfb(lLe,'XMLTypePackageImpl/17',1977);feb(1978,1,OKe,coe);_.fk=function doe(a){return ZD(a,161)};_.gk=function eoe(a){return $C(ZI,Nve,161,a,0,1)};var lcb=sfb(lLe,'XMLTypePackageImpl/18',1978);feb(1979,1,OKe,foe);_.fk=function goe(a){return bE(a)};_.gk=function hoe(a){return $C(qJ,Nve,2,a,6,1)};var mcb=sfb(lLe,'XMLTypePackageImpl/19',1979);feb(1962,1,OKe,ioe);_.fk=function joe(a){return ZD(a,857)};_.gk=function koe(a){return $C(Vbb,rve,857,a,0,1)};var ycb=sfb(lLe,'XMLTypePackageImpl/2',1962);feb(1980,1,OKe,loe);_.fk=function moe(a){return bE(a)};_.gk=function noe(a){return $C(qJ,Nve,2,a,6,1)};var ocb=sfb(lLe,'XMLTypePackageImpl/20',1980);feb(1981,1,OKe,ooe);_.fk=function poe(a){return bE(a)};_.gk=function qoe(a){return $C(qJ,Nve,2,a,6,1)};var pcb=sfb(lLe,'XMLTypePackageImpl/21',1981);feb(1982,1,OKe,roe);_.fk=function soe(a){return bE(a)};_.gk=function toe(a){return $C(qJ,Nve,2,a,6,1)};var qcb=sfb(lLe,'XMLTypePackageImpl/22',1982);feb(1983,1,OKe,uoe);_.fk=function voe(a){return bE(a)};_.gk=function woe(a){return $C(qJ,Nve,2,a,6,1)};var rcb=sfb(lLe,'XMLTypePackageImpl/23',1983);feb(1984,1,OKe,xoe);_.fk=function yoe(a){return ZD(a,195)};_.gk=function zoe(a){return $C(gE,Nve,195,a,0,2)};var scb=sfb(lLe,'XMLTypePackageImpl/24',1984);feb(1985,1,OKe,Aoe);_.fk=function Boe(a){return bE(a)};_.gk=function Coe(a){return $C(qJ,Nve,2,a,6,1)};var tcb=sfb(lLe,'XMLTypePackageImpl/25',1985);feb(1986,1,OKe,Doe);_.fk=function Eoe(a){return bE(a)};_.gk=function Foe(a){return $C(qJ,Nve,2,a,6,1)};var ucb=sfb(lLe,'XMLTypePackageImpl/26',1986);feb(1987,1,OKe,Goe);_.fk=function Hoe(a){return ZD(a,15)};_.gk=function Ioe(a){return $C(QK,Ize,15,a,0,1)};var vcb=sfb(lLe,'XMLTypePackageImpl/27',1987);feb(1988,1,OKe,Joe);_.fk=function Koe(a){return ZD(a,15)};_.gk=function Loe(a){return $C(QK,Ize,15,a,0,1)};var wcb=sfb(lLe,'XMLTypePackageImpl/28',1988);feb(1989,1,OKe,Moe);_.fk=function Noe(a){return bE(a)};_.gk=function Ooe(a){return $C(qJ,Nve,2,a,6,1)};var xcb=sfb(lLe,'XMLTypePackageImpl/29',1989);feb(1963,1,OKe,Poe);_.fk=function Qoe(a){return ZD(a,681)};_.gk=function Roe(a){return $C(Xbb,rve,2119,a,0,1)};var Jcb=sfb(lLe,'XMLTypePackageImpl/3',1963);feb(1990,1,OKe,Soe);_.fk=function Toe(a){return ZD(a,17)};_.gk=function Uoe(a){return $C(bJ,Nve,17,a,0,1)};var zcb=sfb(lLe,'XMLTypePackageImpl/30',1990);feb(1991,1,OKe,Voe);_.fk=function Woe(a){return bE(a)};_.gk=function Xoe(a){return $C(qJ,Nve,2,a,6,1)};var Acb=sfb(lLe,'XMLTypePackageImpl/31',1991);feb(1992,1,OKe,Yoe);_.fk=function Zoe(a){return ZD(a,168)};_.gk=function $oe(a){return $C(eJ,Nve,168,a,0,1)};var Bcb=sfb(lLe,'XMLTypePackageImpl/32',1992);feb(1993,1,OKe,_oe);_.fk=function ape(a){return bE(a)};_.gk=function bpe(a){return $C(qJ,Nve,2,a,6,1)};var Ccb=sfb(lLe,'XMLTypePackageImpl/33',1993);feb(1994,1,OKe,cpe);_.fk=function dpe(a){return bE(a)};_.gk=function epe(a){return $C(qJ,Nve,2,a,6,1)};var Dcb=sfb(lLe,'XMLTypePackageImpl/34',1994);feb(1995,1,OKe,fpe);_.fk=function gpe(a){return bE(a)};_.gk=function hpe(a){return $C(qJ,Nve,2,a,6,1)};var Ecb=sfb(lLe,'XMLTypePackageImpl/35',1995);feb(1996,1,OKe,ipe);_.fk=function jpe(a){return bE(a)};_.gk=function kpe(a){return $C(qJ,Nve,2,a,6,1)};var Fcb=sfb(lLe,'XMLTypePackageImpl/36',1996);feb(1997,1,OKe,lpe);_.fk=function mpe(a){return ZD(a,15)};_.gk=function npe(a){return $C(QK,Ize,15,a,0,1)};var Gcb=sfb(lLe,'XMLTypePackageImpl/37',1997);feb(1998,1,OKe,ope);_.fk=function ppe(a){return ZD(a,15)};_.gk=function qpe(a){return $C(QK,Ize,15,a,0,1)};var Hcb=sfb(lLe,'XMLTypePackageImpl/38',1998);feb(1999,1,OKe,rpe);_.fk=function spe(a){return bE(a)};_.gk=function tpe(a){return $C(qJ,Nve,2,a,6,1)};var Icb=sfb(lLe,'XMLTypePackageImpl/39',1999);feb(1964,1,OKe,upe);_.fk=function vpe(a){return ZD(a,682)};_.gk=function wpe(a){return $C(Ybb,rve,2120,a,0,1)};var Ucb=sfb(lLe,'XMLTypePackageImpl/4',1964);feb(2000,1,OKe,xpe);_.fk=function ype(a){return bE(a)};_.gk=function zpe(a){return $C(qJ,Nve,2,a,6,1)};var Kcb=sfb(lLe,'XMLTypePackageImpl/40',2000);feb(2001,1,OKe,Ape);_.fk=function Bpe(a){return bE(a)};_.gk=function Cpe(a){return $C(qJ,Nve,2,a,6,1)};var Lcb=sfb(lLe,'XMLTypePackageImpl/41',2001);feb(2002,1,OKe,Dpe);_.fk=function Epe(a){return bE(a)};_.gk=function Fpe(a){return $C(qJ,Nve,2,a,6,1)};var Mcb=sfb(lLe,'XMLTypePackageImpl/42',2002);feb(2003,1,OKe,Gpe);_.fk=function Hpe(a){return bE(a)};_.gk=function Ipe(a){return $C(qJ,Nve,2,a,6,1)};var Ncb=sfb(lLe,'XMLTypePackageImpl/43',2003);feb(2004,1,OKe,Jpe);_.fk=function Kpe(a){return bE(a)};_.gk=function Lpe(a){return $C(qJ,Nve,2,a,6,1)};var Ocb=sfb(lLe,'XMLTypePackageImpl/44',2004);feb(2005,1,OKe,Mpe);_.fk=function Npe(a){return ZD(a,191)};_.gk=function Ope(a){return $C(lJ,Nve,191,a,0,1)};var Pcb=sfb(lLe,'XMLTypePackageImpl/45',2005);feb(2006,1,OKe,Ppe);_.fk=function Qpe(a){return bE(a)};_.gk=function Rpe(a){return $C(qJ,Nve,2,a,6,1)};var Qcb=sfb(lLe,'XMLTypePackageImpl/46',2006);feb(2007,1,OKe,Spe);_.fk=function Tpe(a){return bE(a)};_.gk=function Upe(a){return $C(qJ,Nve,2,a,6,1)};var Rcb=sfb(lLe,'XMLTypePackageImpl/47',2007);feb(2008,1,OKe,Vpe);_.fk=function Wpe(a){return bE(a)};_.gk=function Xpe(a){return $C(qJ,Nve,2,a,6,1)};var Scb=sfb(lLe,'XMLTypePackageImpl/48',2008);feb(2009,1,OKe,Ype);_.fk=function Zpe(a){return ZD(a,191)};_.gk=function $pe(a){return $C(lJ,Nve,191,a,0,1)};var Tcb=sfb(lLe,'XMLTypePackageImpl/49',2009);feb(1965,1,OKe,_pe);_.fk=function aqe(a){return ZD(a,683)};_.gk=function bqe(a){return $C(Zbb,rve,2121,a,0,1)};var Ycb=sfb(lLe,'XMLTypePackageImpl/5',1965);feb(2010,1,OKe,cqe);_.fk=function dqe(a){return ZD(a,168)};_.gk=function eqe(a){return $C(eJ,Nve,168,a,0,1)};var Vcb=sfb(lLe,'XMLTypePackageImpl/50',2010);feb(2011,1,OKe,fqe);_.fk=function gqe(a){return bE(a)};_.gk=function hqe(a){return $C(qJ,Nve,2,a,6,1)};var Wcb=sfb(lLe,'XMLTypePackageImpl/51',2011);feb(2012,1,OKe,iqe);_.fk=function jqe(a){return ZD(a,17)};_.gk=function kqe(a){return $C(bJ,Nve,17,a,0,1)};var Xcb=sfb(lLe,'XMLTypePackageImpl/52',2012);feb(1966,1,OKe,lqe);_.fk=function mqe(a){return bE(a)};_.gk=function nqe(a){return $C(qJ,Nve,2,a,6,1)};var Zcb=sfb(lLe,'XMLTypePackageImpl/6',1966);feb(1967,1,OKe,oqe);_.fk=function pqe(a){return ZD(a,195)};_.gk=function qqe(a){return $C(gE,Nve,195,a,0,2)};var $cb=sfb(lLe,'XMLTypePackageImpl/7',1967);feb(1968,1,OKe,rqe);_.fk=function sqe(a){return $D(a)};_.gk=function tqe(a){return $C(QI,Nve,484,a,8,1)};var _cb=sfb(lLe,'XMLTypePackageImpl/8',1968);feb(1969,1,OKe,uqe);_.fk=function vqe(a){return ZD(a,222)};_.gk=function wqe(a){return $C(RI,Nve,222,a,0,1)};var adb=sfb(lLe,'XMLTypePackageImpl/9',1969);var xqe,yqe;var Eqe,Fqe;var Jqe;feb(55,63,swe,Lqe);var cdb=sfb(LLe,'RegEx/ParseException',55);feb(836,1,{},Tqe);_.bm=function Uqe(a){return a<this.j&&ihb(this.i,a)==63};_.cm=function Vqe(){var a,b,c,d,e;if(this.c!=10)throw Adb(new Lqe(TId((Hde(),VIe))));a=this.a;switch(a){case 101:a=27;break;case 102:a=12;break;case 110:a=10;break;case 114:a=13;break;case 116:a=9;break;case 120:Mqe(this);if(this.c!=0)throw Adb(new Lqe(TId((Hde(),sJe))));if(this.a==123){e=0;c=0;do{Mqe(this);if(this.c!=0)throw Adb(new Lqe(TId((Hde(),sJe))));if((e=Xqe(this.a))<0)break;if(c>c*16)throw Adb(new Lqe(TId((Hde(),tJe))));c=c*16+e}while(true);if(this.a!=125)throw Adb(new Lqe(TId((Hde(),uJe))));if(c>MLe)throw Adb(new Lqe(TId((Hde(),vJe))));a=c}else{e=0;if(this.c!=0||(e=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));c=e;Mqe(this);if(this.c!=0||(e=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));c=c*16+e;a=c}break;case 117:d=0;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;a=b;break;case 118:Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;if(b>MLe)throw Adb(new Lqe(TId((Hde(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw Adb(new Lqe(TId((Hde(),wJe))));}return a};_.dm=function Wqe(a){var b,c;switch(a){case 100:c=(this.e&32)==32?hte('Nd',true):(Vse(),Bse);break;case 68:c=(this.e&32)==32?hte('Nd',false):(Vse(),Ise);break;case 119:c=(this.e&32)==32?hte('IsWord',true):(Vse(),Rse);break;case 87:c=(this.e&32)==32?hte('IsWord',false):(Vse(),Kse);break;case 115:c=(this.e&32)==32?hte('IsSpace',true):(Vse(),Mse);break;case 83:c=(this.e&32)==32?hte('IsSpace',false):(Vse(),Jse);break;default:throw Adb(new yz((b=a,NLe+b.toString(16))));}return c};_.em=function Yqe(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;Mqe(this);b=null;if(this.c==0&&this.a==94){Mqe(this);if(a){k=(Vse(),Vse(),++Use,new xte(5))}else{b=(Vse(),Vse(),++Use,new xte(4));rte(b,0,MLe);k=(null,++Use,new xte(4))}}else{k=(Vse(),Vse(),++Use,new xte(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:ute(k,this.dm(c));d=true;break;case 105:case 73:case 99:case 67:c=this.um(k,c);c<0&&(d=true);break;case 112:case 80:l=Sqe(this,c);if(!l)throw Adb(new Lqe(TId((Hde(),hJe))));ute(k,l);d=true;break;default:c=this.cm();}}else if(m==20){g=phb(this.i,58,this.d);if(g<0)throw Adb(new Lqe(TId((Hde(),iJe))));h=true;if(ihb(this.i,this.d)==94){++this.d;h=false}f=zhb(this.i,this.d,g);i=ite(f,h,(this.e&512)==512);if(!i)throw Adb(new Lqe(TId((Hde(),kJe))));ute(k,i);d=true;if(g+1>=this.j||ihb(this.i,g+1)!=93)throw Adb(new Lqe(TId((Hde(),iJe))));this.d=g+2}Mqe(this);if(!d){if(this.c!=0||this.a!=45){rte(k,c,c)}else{Mqe(this);if((m=this.c)==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(m==0&&this.a==93){rte(k,c,c);rte(k,45,45)}else{j=this.a;m==10&&(j=this.cm());Mqe(this);rte(k,c,j)}}}(this.e&gwe)==gwe&&this.c==0&&this.a==44&&Mqe(this)}if(this.c==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(b){wte(b,k);k=b}vte(k);ste(k);this.b=0;Mqe(this);return k};_.fm=function Zqe(){var a,b,c,d;c=this.em(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){Mqe(this);if(this.c!=9)throw Adb(new Lqe(TId((Hde(),pJe))));b=this.em(false);if(d==4)ute(c,b);else if(a==45)wte(c,b);else if(a==38)tte(c,b);else throw Adb(new yz('ASSERT'))}else{throw Adb(new Lqe(TId((Hde(),qJe))))}}Mqe(this);return c};_.gm=function $qe(){var a,b;a=this.a-48;b=(Vse(),Vse(),++Use,new eue(12,null,a));!this.g&&(this.g=new gyb);dyb(this.g,new Bte(a));Mqe(this);return b};_.hm=function _qe(){Mqe(this);return Vse(),Nse};_.im=function are(){Mqe(this);return Vse(),Lse};_.jm=function bre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.km=function cre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.lm=function dre(){Mqe(this);return fte()};_.mm=function ere(){Mqe(this);return Vse(),Pse};_.nm=function fre(){Mqe(this);return Vse(),Sse};_.om=function gre(){var a;if(this.d>=this.j||((a=ihb(this.i,this.d++))&65504)!=64)throw Adb(new Lqe(TId((Hde(),dJe))));Mqe(this);return Vse(),Vse(),++Use,new Hte(0,a-64)};_.pm=function hre(){Mqe(this);return gte()};_.qm=function ire(){Mqe(this);return Vse(),Tse};_.rm=function jre(){var a;a=(Vse(),Vse(),++Use,new Hte(0,105));Mqe(this);return a};_.sm=function kre(){Mqe(this);return Vse(),Qse};_.tm=function lre(){Mqe(this);return Vse(),Ose};_.um=function mre(a,b){return this.cm()};_.vm=function nre(){Mqe(this);return Vse(),Gse};_.wm=function ore(){var a,b,c,d,e;if(this.d+1>=this.j)throw Adb(new Lqe(TId((Hde(),aJe))));d=-1;b=null;a=ihb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new gyb);dyb(this.g,new Bte(d));++this.d;if(ihb(this.i,this.d)!=41)throw Adb(new Lqe(TId((Hde(),ZIe))));++this.d}else{a==63&&--this.d;Mqe(this);b=Pqe(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));break;default:throw Adb(new Lqe(TId((Hde(),bJe))));}}Mqe(this);e=Qqe(this);c=null;if(e.e==2){if(e.Pm()!=2)throw Adb(new Lqe(TId((Hde(),cJe))));c=e.Lm(1);e=e.Lm(0)}if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return Vse(),Vse(),++Use,new Ute(d,b,e,c)};_.xm=function pre(){Mqe(this);return Vse(),Hse};_.ym=function qre(){var a;Mqe(this);a=_se(24,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.zm=function rre(){var a;Mqe(this);a=_se(20,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Am=function sre(){var a;Mqe(this);a=_se(22,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Bm=function tre(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d<this.j){b=ihb(this.i,this.d);e=rse(b);if(e==0)break;a|=e;++this.d}if(this.d>=this.j)throw Adb(new Lqe(TId((Hde(),$Ie))));if(b==45){++this.d;while(this.d<this.j){b=ihb(this.i,this.d);e=rse(b);if(e==0)break;c|=e;++this.d}if(this.d>=this.j)throw Adb(new Lqe(TId((Hde(),$Ie))))}if(b==58){++this.d;Mqe(this);d=ate(Qqe(this),a,c);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this)}else if(b==41){++this.d;Mqe(this);d=ate(Qqe(this),a,c)}else throw Adb(new Lqe(TId((Hde(),_Ie))));return d};_.Cm=function ure(){var a;Mqe(this);a=_se(21,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Dm=function vre(){var a;Mqe(this);a=_se(23,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Em=function wre(){var a,b;Mqe(this);a=this.f++;b=bte(Qqe(this),a);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return b};_.Fm=function xre(){var a;Mqe(this);a=bte(Qqe(this),0);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Gm=function yre(a){Mqe(this);if(this.c==5){Mqe(this);return $se(a,(Vse(),Vse(),++Use,new Kte(9,a)))}else return $se(a,(Vse(),Vse(),++Use,new Kte(3,a)))};_.Hm=function zre(a){var b;Mqe(this);b=(Vse(),Vse(),++Use,new iue(2));if(this.c==5){Mqe(this);hue(b,(null,Ese));hue(b,a)}else{hue(b,a);hue(b,(null,Ese))}return b};_.Im=function Are(a){Mqe(this);if(this.c==5){Mqe(this);return Vse(),Vse(),++Use,new Kte(9,a)}else return Vse(),Vse(),++Use,new Kte(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var gdb=sfb(LLe,'RegEx/RegexParser',836);feb(1947,836,{},Gre);_.bm=function Hre(a){return false};_.cm=function Ire(){return Dre(this)};_.dm=function Kre(a){return Ere(a)};_.em=function Lre(a){return Fre(this)};_.fm=function Mre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.gm=function Nre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.hm=function Ore(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.im=function Pre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.jm=function Qre(){Mqe(this);return Ere(67)};_.km=function Rre(){Mqe(this);return Ere(73)};_.lm=function Sre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.mm=function Tre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.nm=function Ure(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.om=function Vre(){Mqe(this);return Ere(99)};_.pm=function Wre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.qm=function Xre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.rm=function Yre(){Mqe(this);return Ere(105)};_.sm=function Zre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.tm=function $re(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.um=function _re(a,b){return ute(a,Ere(b)),-1};_.vm=function ase(){Mqe(this);return Vse(),Vse(),++Use,new Hte(0,94)};_.wm=function bse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.xm=function cse(){Mqe(this);return Vse(),Vse(),++Use,new Hte(0,36)};_.ym=function dse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.zm=function ese(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Am=function fse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Bm=function gse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Cm=function hse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Dm=function ise(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Em=function jse(){var a;Mqe(this);a=bte(Qqe(this),0);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Fm=function kse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Gm=function lse(a){Mqe(this);return $se(a,(Vse(),Vse(),++Use,new Kte(3,a)))};_.Hm=function mse(a){var b;Mqe(this);b=(Vse(),Vse(),++Use,new iue(2));hue(b,a);hue(b,(null,Ese));return b};_.Im=function nse(a){Mqe(this);return Vse(),Vse(),++Use,new Kte(3,a)};var Bre=null,Cre=null;var ddb=sfb(LLe,'RegEx/ParserForXMLSchema',1947);feb(122,1,ZLe,Wse);_.Jm=function Xse(a){throw Adb(new yz('Not supported.'))};_.Km=function dte(){return -1};_.Lm=function ete(a){return null};_.Mm=function jte(){return null};_.Nm=function mte(a){};_.Om=function nte(a){};_.Pm=function ote(){return 0};_.Ib=function pte(){return this.Qm(0)};_.Qm=function qte(a){return this.e==11?'.':''};_.e=0;var vse,wse,xse,yse,zse,Ase=null,Bse,Cse=null,Dse,Ese,Fse=null,Gse,Hse,Ise,Jse,Kse,Lse,Mse,Nse,Ose,Pse,Qse,Rse,Sse,Tse,Use=0;var qdb=sfb(LLe,'RegEx/Token',122);feb(138,122,{3:1,138:1,122:1},xte);_.Qm=function Ate(a){var b,c,d;if(this.e==4){if(this==Dse)c='.';else if(this==Bse)c='\\d';else if(this==Rse)c='\\w';else if(this==Mse)c='\\s';else{d=new Qhb;d.a+='[';for(b=0;b<this.b.length;b+=2){(a&gwe)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Nhb(d,zte(this.b[b]))}else{Nhb(d,zte(this.b[b]));d.a+='-';Nhb(d,zte(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==Ise)c='\\D';else if(this==Kse)c='\\W';else if(this==Jse)c='\\S';else{d=new Qhb;d.a+='[^';for(b=0;b<this.b.length;b+=2){(a&gwe)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Nhb(d,zte(this.b[b]))}else{Nhb(d,zte(this.b[b]));d.a+='-';Nhb(d,zte(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var edb=sfb(LLe,'RegEx/RangeToken',138);feb(592,1,{592:1},Bte);_.a=0;var fdb=sfb(LLe,'RegEx/RegexParser/ReferencePosition',592);feb(591,1,{3:1,591:1},Dte);_.Fb=function Ete(a){var b;if(a==null)return false;if(!ZD(a,591))return false;b=RD(a,591);return lhb(this.b,b.b)&&this.a==b.a};_.Hb=function Fte(){return ohb(this.b+'/'+pse(this.a))};_.Ib=function Gte(){return this.c.Qm(this.a)};_.a=0;var hdb=sfb(LLe,'RegEx/RegularExpression',591);feb(228,122,ZLe,Hte);_.Km=function Ite(){return this.a};_.Qm=function Jte(a){var b,c,d;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:d='\\'+XD(this.a&Bwe);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=txe){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+zhb(c,c.length-6,c.length)}else d=''+XD(this.a&Bwe);}break;case 8:this==Gse||this==Hse?(d=''+XD(this.a&Bwe)):(d='\\'+XD(this.a&Bwe));break;default:d=null;}return d};_.a=0;var idb=sfb(LLe,'RegEx/Token/CharToken',228);feb(318,122,ZLe,Kte);_.Lm=function Lte(a){return this.a};_.Nm=function Mte(a){this.b=a};_.Om=function Nte(a){this.c=a};_.Pm=function Ote(){return 1};_.Qm=function Pte(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.Qm(a)+'*'}else if(this.c==this.b){b=this.a.Qm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.Qm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.Qm(a)+'{'+this.c+',}'}else throw Adb(new yz('Token#toString(): CLOSURE '+this.c+pve+this.b))}else{if(this.c<0&&this.b<0){b=this.a.Qm(a)+'*?'}else if(this.c==this.b){b=this.a.Qm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.Qm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.Qm(a)+'{'+this.c+',}?'}else throw Adb(new yz('Token#toString(): NONGREEDYCLOSURE '+this.c+pve+this.b))}return b};_.b=0;_.c=0;var jdb=sfb(LLe,'RegEx/Token/ClosureToken',318);feb(837,122,ZLe,Qte);_.Lm=function Rte(a){return a==0?this.a:this.b};_.Pm=function Ste(){return 2};_.Qm=function Tte(a){var b;this.b.e==3&&this.b.Lm(0)==this.a?(b=this.a.Qm(a)+'+'):this.b.e==9&&this.b.Lm(0)==this.a?(b=this.a.Qm(a)+'+?'):(b=this.a.Qm(a)+(''+this.b.Qm(a)));return b};var kdb=sfb(LLe,'RegEx/Token/ConcatToken',837);feb(1945,122,ZLe,Ute);_.Lm=function Vte(a){if(a==0)return this.d;if(a==1)return this.b;throw Adb(new yz('Internal Error: '+a))};_.Pm=function Wte(){return !this.b?1:2};_.Qm=function Xte(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var ldb=sfb(LLe,'RegEx/Token/ConditionToken',1945);feb(1946,122,ZLe,Yte);_.Lm=function Zte(a){return this.b};_.Pm=function $te(){return 1};_.Qm=function _te(a){return '(?'+(this.a==0?'':pse(this.a))+(this.c==0?'':pse(this.c))+':'+this.b.Qm(a)+')'};_.a=0;_.c=0;var mdb=sfb(LLe,'RegEx/Token/ModifierToken',1946);feb(838,122,ZLe,aue);_.Lm=function bue(a){return this.a};_.Pm=function cue(){return 1};_.Qm=function due(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.Qm(a)+')'):(b='('+this.a.Qm(a)+')');break;case 20:b='(?='+this.a.Qm(a)+')';break;case 21:b='(?!'+this.a.Qm(a)+')';break;case 22:b='(?<='+this.a.Qm(a)+')';break;case 23:b='(?<!'+this.a.Qm(a)+')';break;case 24:b='(?>'+this.a.Qm(a)+')';}return b};_.b=0;var ndb=sfb(LLe,'RegEx/Token/ParenToken',838);feb(530,122,{3:1,122:1,530:1},eue);_.Mm=function fue(){return this.b};_.Qm=function gue(a){return this.e==12?'\\'+this.a:tse(this.b)};_.a=0;var odb=sfb(LLe,'RegEx/Token/StringToken',530);feb(476,122,ZLe,iue);_.Jm=function jue(a){hue(this,a)};_.Lm=function kue(a){return RD(eyb(this.a,a),122)};_.Pm=function lue(){return !this.a?0:this.a.a.c.length};_.Qm=function mue(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=RD(eyb(this.a,0),122);c=RD(eyb(this.a,1),122);c.e==3&&c.Lm(0)==b?(e=b.Qm(a)+'+'):c.e==9&&c.Lm(0)==b?(e=b.Qm(a)+'+?'):(e=b.Qm(a)+(''+c.Qm(a)))}else{f=new Qhb;for(d=0;d<this.a.a.c.length;d++){Nhb(f,RD(eyb(this.a,d),122).Qm(a))}e=f.a}return e}if(this.a.a.c.length==2&&RD(eyb(this.a,1),122).e==7){e=RD(eyb(this.a,0),122).Qm(a)+'?'}else if(this.a.a.c.length==2&&RD(eyb(this.a,0),122).e==7){e=RD(eyb(this.a,1),122).Qm(a)+'??'}else{f=new Qhb;Nhb(f,RD(eyb(this.a,0),122).Qm(a));for(d=1;d<this.a.a.c.length;d++){f.a+='|';Nhb(f,RD(eyb(this.a,d),122).Qm(a))}e=f.a}return e};var pdb=sfb(LLe,'RegEx/Token/UnionToken',476);feb(527,1,{600:1},oue);_.Ib=function pue(){return this.a.b};var rdb=sfb($Le,'XMLTypeUtil/PatternMatcherImpl',527);feb(1707,1527,{},sue);var que;var sdb=sfb($Le,'XMLTypeValidator',1707);feb(270,1,Vve,vue);_.Jc=function wue(a){xgb(this,a)};_.Kc=function xue(){return (this.b-this.a)*this.c<0?tue:new Rue(this)};_.a=0;_.b=0;_.c=0;var tue;var vdb=sfb(aMe,'ExclusiveRange',270);feb(1084,1,Jve,Cue);_.Rb=function Due(a){RD(a,17);yue()};_.Nb=function Eue(a){Ztb(this,a)};_.Pb=function Hue(){return zue()};_.Ub=function Jue(){return Aue()};_.Wb=function Mue(a){RD(a,17);Bue()};_.Ob=function Fue(){return false};_.Sb=function Gue(){return false};_.Tb=function Iue(){return -1};_.Vb=function Kue(){return -1};_.Qb=function Lue(){throw Adb(new kib(dMe))};var tdb=sfb(aMe,'ExclusiveRange/1',1084);feb(258,1,Jve,Rue);_.Rb=function Sue(a){RD(a,17);Nue()};_.Nb=function Tue(a){Ztb(this,a)};_.Pb=function Wue(){return Oue(this)};_.Ub=function Yue(){return Pue(this)};_.Wb=function _ue(a){RD(a,17);Que()};_.Ob=function Uue(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b};_.Sb=function Vue(){return this.b>0};_.Tb=function Xue(){return this.b};_.Vb=function Zue(){return this.b-1};_.Qb=function $ue(){throw Adb(new kib(dMe))};_.a=0;_.b=0;var udb=sfb(aMe,'ExclusiveRange/RangeIterator',258);var hE=vfb(eKe,'C');var kE=vfb(hKe,'I');var xdb=vfb(hve,'Z');var lE=vfb(iKe,'J');var gE=vfb(dKe,'B');var iE=vfb(fKe,'D');var jE=vfb(gKe,'F');var wdb=vfb(jKe,'S');var g3=ufb('org.eclipse.elk.core.labels','ILabelManager');var T6=ufb(sIe,'DiagnosticChain');var zab=ufb(QKe,'ResourceSet');var $6=sfb(sIe,'InvocationTargetException',null);var fve=(Qz(),Tz);var gwtOnLoad=gwtOnLoad=ceb;aeb(leb);deb('permProps',[[['locale','default'],[eMe,'gecko1_8']],[['locale','default'],[eMe,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/******************************************************************************* + * Copyright (c) 2021 Kiel University and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('web-worker'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var Worker = require('web-worker'); + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } 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.'); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require = require('./elk-worker.min.js'), + _Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +module.exports = Worker; +},{}]},{},[3])(3) +}); + + +/***/ }), + +/***/ 33183: +/***/ ((__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-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +;// 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<unknown>} 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<string>} */ + 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<T>} 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<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + 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<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * 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<Extension>} 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<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | 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<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + 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<HtmlExtension>} 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<StackItem>} */ + 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<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + 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<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + 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<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + 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<Point, '_bufferIndex' | '_index'> | 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<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + 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> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + 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<Construct>} 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<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +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<Chunk>} */ + 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<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + 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<Code>} */ + 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 + * <a> + * <a\>b> + * <a b> + * <a)> + * 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 (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @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> + * ^ + * > | 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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <a\*a> + * ^ + * ``` + * + * @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<Code>} */ + 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<Code>} */ + 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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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 + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @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 `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @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 + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @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 + * > | <div/> + * ^ + * ``` + * + * @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 + * > | <x/> + * ^ + * ``` + * + * @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 + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @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 + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @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 + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @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 + * > | <!--xxx--> + * ^ + * ``` + * + * @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 + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | 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 + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @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 + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @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 + * > | <div> + * ^ + * | + * ``` + * + * @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<Code>} */ + 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<string, string>} + */ +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<Event>} */ + 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 + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @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<Event>} */ + 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<Code>} */ + 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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @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<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> 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 <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> 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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> 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 `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> 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 <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <![CDATA[>&<]]> 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 <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <!b> 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 <?b?> 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 <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> 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 </b> 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 `<x`, in opening tag name. + * + * ```markdown + * > | a <b> 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 <b> 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 <b c> 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 <b c> 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 <b c=d> 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 <b c="d"> 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 <b c=d> 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 <b c="d"> 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 <b c="d"> 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 <!--a + * ^ + * | b--> + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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<Chunk>} + */ + +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<Chunk>} */ + 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<Event>} events + * @returns {Array<Event>} + */ +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<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} 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<string, Handle>} 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<CompileContext, 'sliceSerialize'>} 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<CompileContext, 'sliceSerialize'>} 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<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(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 {<Kind extends Node>(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<Extension | Array<Extension>> | 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<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + 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<Event>} 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<StaticPhrasingContent>} */ + // @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<Extension | Array<Extension>>} 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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + 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( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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; + } +}; + + + +/***/ }), + +/***/ 52494: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* 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 */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ k: () => (/* binding */ addEdgeMarkers), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33183); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_04fb0060_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 */ .Ys)(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( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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|<br\s*\/?>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_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_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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 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_04fb0060_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_04fb0060_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 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 = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_04fb0060_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("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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 */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + 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_04fb0060_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); + } + 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_04fb0060_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 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + 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 */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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, boundryNode) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + 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); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("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 */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_04fb0060_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, "\\)"); + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 94641: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* 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__(64218); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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, "FirstStmtSeperator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "verticeStatement": 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + 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_04fb0060_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_04fb0060_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_04fb0060_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 */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.I.flowchart, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.r +}; +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" })); + + + +/***/ }), + +/***/ 10194: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(94641); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(52494); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(76365); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17295); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22424); + + + + + + + + + + + + + + + + +const findCommonAncestor = (id1, id2, treeData) => { + const { parentById } = treeData; + const visited = /* @__PURE__ */ new Set(); + let currentId = id1; + while (currentId) { + visited.add(currentId); + if (currentId === id2) { + return currentId; + } + currentId = parentById[currentId]; + } + currentId = id2; + while (currentId) { + if (visited.has(currentId)) { + return currentId; + } + currentId = parentById[currentId]; + } + return "root"; +}; +const elk = new elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__(); +let portPos = {}; +const conf = {}; +let nodeDb = {}; +const addVertices = async function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { + const svg = root.select(`[id="${svgId}"]`); + const nodes = svg.insert("g").attr("class", "nodes"); + const keys = Object.keys(vert); + await Promise.all( + keys.map(async function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles2 = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + const labelData = { width: 0, height: 0 }; + const ports = [ + { + id: vertex.id + "-west", + layoutOptions: { + "port.side": "WEST" + } + }, + { + id: vertex.id + "-east", + layoutOptions: { + "port.side": "EAST" + } + }, + { + id: vertex.id + "-south", + layoutOptions: { + "port.side": "SOUTH" + } + }, + { + id: vertex.id + "-north", + layoutOptions: { + "port.side": "NORTH" + } + } + ]; + let radious = 0; + let _shape = ""; + let layoutOptions = {}; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + layoutOptions = { + portConstraints: "FIXED_SIDE" + }; + 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 node = { + labelStyle: styles2.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles2.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_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)().flowchart.padding + }; + let boundingBox; + let nodeEl; + if (node.type !== "group") { + nodeEl = await (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, node, vertex.dir); + boundingBox = nodeEl.node().getBBox(); + } else { + doc.createElementNS("http://www.w3.org/2000/svg", "text"); + const { shapeSvg, bbox } = await (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.l)(nodes, node, void 0, true); + labelData.width = bbox.width; + labelData.wrappingWidth = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)().flowchart.wrappingWidth; + labelData.height = bbox.height; + labelData.labelNode = shapeSvg.node(); + node.labelData = labelData; + } + const data = { + id: vertex.id, + ports: vertex.type === "diamond" ? ports : [], + // labelStyle: styles.labelStyle, + // shape: _shape, + layoutOptions, + labelText: vertexText, + labelData, + // labels: [{ text: vertexText }], + // rx: radius, + // ry: radius, + // class: classStr, + // style: styles.style, + // link: vertex.link, + // linkTarget: vertex.linkTarget, + // tooltip: diagObj.db.getTooltip(vertex.id) || '', + domId: diagObj.db.lookUpDomId(vertex.id), + // haveCallback: vertex.haveCallback, + width: boundingBox == null ? void 0 : boundingBox.width, + height: boundingBox == null ? void 0 : boundingBox.height, + // dir: vertex.dir, + type: vertex.type, + // props: vertex.props, + // padding: getConfig().flowchart.padding, + // boundingBox, + el: nodeEl, + parent: parentLookupDb.parentById[vertex.id] + }; + nodeDb[node.id] = data; + }) + ); + return graph; +}; +const getNextPosition = (position, edgeDirection, graphDirection) => { + const portPos2 = { + 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" + } + } + }; + portPos2.TD = portPos2.TB; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc88", graphDirection, edgeDirection, position); + return portPos2[graphDirection][edgeDirection][position]; +}; +const getNextPort = (node, edgeDirection, graphDirection) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("getNextPort abc88", { node, edgeDirection, graphDirection }); + if (!portPos[node]) { + switch (graphDirection) { + case "TB": + case "TD": + portPos[node] = { + inPosition: "north", + outPosition: "south" + }; + break; + case "BT": + portPos[node] = { + inPosition: "south", + outPosition: "north" + }; + break; + case "RL": + portPos[node] = { + inPosition: "east", + outPosition: "west" + }; + break; + case "LR": + portPos[node] = { + inPosition: "west", + outPosition: "east" + }; + break; + } + } + const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; + if (edgeDirection === "in") { + portPos[node].inPosition = getNextPosition( + portPos[node].inPosition, + edgeDirection, + graphDirection + ); + } else { + portPos[node].outPosition = getNextPosition( + portPos[node].outPosition, + edgeDirection, + graphDirection + ); + } + return result; +}; +const getEdgeStartEndPoint = (edge, dir) => { + let source = edge.start; + let target = edge.end; + const sourceId = source; + const targetId = target; + const startNode = nodeDb[source]; + const endNode = nodeDb[target]; + if (!startNode || !endNode) { + return { source, target }; + } + if (startNode.type === "diamond") { + source = `${source}-${getNextPort(source, "out", dir)}`; + } + if (endNode.type === "diamond") { + target = `${target}-${getNextPort(target, "in", dir)}`; + } + return { source, target, sourceId, targetId }; +}; +const addEdges = function(edges, diagObj, graph, svg) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 edges = ", edges); + const labelsEl = svg.insert("g").attr("class", "edgeLabels"); + let linkIdCnt = {}; + let dir = diagObj.db.getDirection(); + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.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; + } + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.k)(edge.style); + style = styles2.style; + labelStyle = styles2.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } + 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 = edge.text.replace(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex, "\n"); + 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; + const labelEl = (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.f)(labelsEl, edgeData); + const { source, target, sourceId, targetId } = getEdgeStartEndPoint(edge, dir); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc78 source and target", source, target); + graph.edges.push({ + id: "e" + edge.start + edge.end, + sources: [source], + targets: [target], + sourceId, + targetId, + labelEl, + labels: [ + { + width: edgeData.width, + height: edgeData.height, + orgWidth: edgeData.width, + orgHeight: edgeData.height, + text: edgeData.label, + layoutOptions: { + "edgeLabels.inline": "true", + "edgeLabels.placement": "CENTER" + } + } + ], + edgeData + }); + }); + return graph; +}; +const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute, id) { + let url = ""; + if (arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.k)(svgPath, edgeData, url, id, diagramType); +}; +const getClasses = function(text, diagObj) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Extracting classes"); + return diagObj.db.getClasses(); +}; +const addSubGraphs = function(db2) { + const parentLookupDb = { parentById: {}, childrenById: {} }; + const subgraphs = db2.getSubGraphs(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subgraphs); + subgraphs.forEach(function(subgraph) { + subgraph.nodes.forEach(function(node) { + parentLookupDb.parentById[node] = subgraph.id; + if (parentLookupDb.childrenById[subgraph.id] === void 0) { + parentLookupDb.childrenById[subgraph.id] = []; + } + parentLookupDb.childrenById[subgraph.id].push(node); + }); + }); + subgraphs.forEach(function(subgraph) { + ({ id: subgraph.id }); + if (parentLookupDb.parentById[subgraph.id] !== void 0) { + parentLookupDb.parentById[subgraph.id]; + } + }); + return parentLookupDb; +}; +const calcOffset = function(src, dest, parentLookupDb) { + const ancestor = findCommonAncestor(src, dest, parentLookupDb); + if (ancestor === void 0 || ancestor === "root") { + return { x: 0, y: 0 }; + } + const ancestorOffset = nodeDb[ancestor].offset; + return { x: ancestorOffset.posX, y: ancestorOffset.posY }; +}; +const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb, id) { + const offset = calcOffset(edge.sourceId, edge.targetId, parentLookupDb); + const src = edge.sections[0].startPoint; + const dest = edge.sections[0].endPoint; + const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; + const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); + const points = [ + [src.x + offset.x, src.y + offset.y], + ...segPoints, + [dest.x + offset.x, dest.y + offset.y] + ]; + const { x, y } = (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge.edgeData); + const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path " + edgeData.classes).attr("fill", "none"); + const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); + const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); + const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); + edgeWithLabel.attr("width", box.width); + edgeWithLabel.attr("height", box.height); + edgeG.attr( + "transform", + `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` + ); + addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute, id); +}; +const insertChildren = (nodeArray, parentLookupDb) => { + nodeArray.forEach((node) => { + if (!node.children) { + node.children = []; + } + const childIds = parentLookupDb.childrenById[node.id]; + if (childIds) { + childIds.forEach((childId) => { + node.children.push(nodeDb[childId]); + }); + } + insertChildren(node.children, parentLookupDb); + }); +}; +const draw = async function(text, id, _version, diagObj) { + var _a; + diagObj.db.clear(); + nodeDb = {}; + portPos = {}; + diagObj.db.setGen("gen-2"); + diagObj.parser.parse(text); + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); + let graph = { + 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.layered.mergeEdges': 'true', + "elk.direction": "DOWN" + // 'elk.ports.sameLayerEdges': true, + // 'nodePlacement.strategy': 'SIMPLE', + }, + children: [], + edges: [] + }; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Drawing flowchart using v3 renderer", elk); + let dir = diagObj.db.getDirection(); + switch (dir) { + case "BT": + graph.layoutOptions["elk.direction"] = "UP"; + break; + case "TB": + graph.layoutOptions["elk.direction"] = "DOWN"; + break; + case "LR": + graph.layoutOptions["elk.direction"] = "RIGHT"; + break; + case "RL": + graph.layoutOptions["elk.direction"] = "LEFT"; + break; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const svg = root.select(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.a)(svg, markers, diagObj.type, id); + const vert = diagObj.db.getVertices(); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subGraphs); + for (let i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); + const parentLookupDb = addSubGraphs(diagObj.db); + graph = await addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); + const edgesEl = svg.insert("g").attr("class", "edges edgePath"); + const edges = diagObj.db.getEdges(); + graph = addEdges(edges, diagObj, graph, svg); + const nodes = Object.keys(nodeDb); + nodes.forEach((nodeId) => { + const node = nodeDb[nodeId]; + if (!node.parent) { + graph.children.push(node); + } + if (parentLookupDb.childrenById[nodeId] !== void 0) { + node.labels = [ + { + text: node.labelText, + layoutOptions: { + "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" + }, + width: node.labelData.width, + height: node.labelData.height + // width: 100, + // height: 100, + } + ]; + delete node.x; + delete node.y; + delete node.width; + delete node.height; + } + }); + insertChildren(graph.children, parentLookupDb); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", JSON.stringify(graph, null, 2)); + const g = await elk.layout(graph); + drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", g); + (_a = g.edges) == null ? void 0 : _a.map((edge) => { + insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb, id); + }); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.o)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); + renderEl.remove(); +}; +const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { + nodeArray.forEach(function(node) { + if (node) { + nodeDb[node.id].offset = { + posX: node.x + relX, + posY: node.y + relY, + x: relX, + y: relY, + depth, + width: node.width, + height: node.height + }; + if (node.type === "group") { + const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); + subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); + const label = subgraphEl.insert("g").attr("class", "label"); + const labelCentering = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)().flowchart.htmlLabels ? node.labelData.width / 2 : 0; + label.attr( + "transform", + `translate(${node.labels[0].x + relX + node.x + labelCentering}, ${node.labels[0].y + relY + node.y + 3})` + ); + label.node().appendChild(node.labelData.labelNode); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.type, node.labels); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.id); + node.el.attr( + "transform", + `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` + ); + } + } + }); + nodeArray.forEach(function(node) { + if (node && node.type === "group") { + drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); + } + }); +}; +const renderer = { + getClasses, + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < 5; i++) { + sections += ` + .subgraph-lvl-${i} { + fill: ${options[`surface${i}`]}; + stroke: ${options[`surfacePeer${i}`]}; + } + `; + } + return sections; +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span { + color: ${options.titleColor}; + } + + .label text,span { + 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; + } + + .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.85; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span { + 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}; + } + .subgraph { + stroke-width:2; + rx:3; + } + // .subgraph-lvl-1 { + // fill:#ccc; + // // stroke:black; + // } + + .flowchart-label text { + text-anchor: middle; + } + + ${genSections(options)} +`; +const styles = getStyles; +const diagram = { + db: _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + parser: _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__.p, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/194.d3822238.js b/assets/js/194.d3822238.js new file mode 100644 index 000000000..59d8498ce --- /dev/null +++ b/assets/js/194.d3822238.js @@ -0,0 +1 @@ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[194],{7295:(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;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&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.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.terminate&&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(){cGn()}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(){gUn()}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&&t<d1n}function oS(n){return n.f.c+n.i.c}function uS(n){return xW(),n?zat:Xat}function sS(n){Nfn.call(this,n,0)}function hS(){Hz.call(this,null)}function fS(n){this.c=n,Sin(this)}function lS(){O$(this),BY(this)}function bS(){bS=E,Eot=new S}function wS(){wS=E,Qot=new I}function dS(){dS=E,hut=new uL}function gS(){gS=E,fut=new sL}function pS(){pS=E,Eut=new U}function mS(){Fnn.call(this,null)}function vS(){vS=E,Kut=new sn}function kS(n,t){GQ(n),n.a.Nb(t)}function yS(n,t){return n.a.Xc(t)}function MS(n,t){return n.a.Yc(t)}function TS(n,t){return n.a.$c(t)}function jS(n,t){return n.a._c(t)}function ES(n,t){return n.Gc(t),n}function SS(n,t){return Qon(n,t),n}function PS(n,t){V$n(gZ(n.a),t)}function CS(n,t){V$n(gZ(n.a),t)}function IS(n,t){return n.Gc(t),n}function OS(n,t){return n.a.f=t,n}function AS(n,t){return n.a.d=t,n}function LS(n,t){return n.a.g=t,n}function NS(n,t){return n.a.j=t,n}function $S(n,t){return n.a.a=t,n}function DS(n,t){return n.a.d=t,n}function xS(n,t){return n.a.e=t,n}function RS(n,t){return n.a.g=t,n}function KS(n,t){return n.a.f=t,n}function FS(n){return n.b=!1,n}function _S(){_S=E,Uut=new wn}function BS(){BS=E,Kht=new qR}function HS(){HS=E,Olt=new wt}function US(){US=E,Alt=new Mt}function GS(){GS=E,Dlt=new nz}function qS(){qS=E,Qlt=new St}function XS(){XS=E,cbt=new Rt}function zS(){zS=E,ubt=new Kt}function VS(){VS=E,Cbt=new be}function WS(){WS=E,Pbt=new sj}function QS(){QS=E,Bwt=new Je}function JS(){JS=E,idt=new Nr}function YS(){YS=E,Fdt=new rc}function ZS(){ZS=E,VTt=new Gu}function nP(){nP=E,zAt=new rP}function tP(){tP=E,QAt=new GR}function eP(){eP=E,GLt=new pJ}function iP(){San(),this.c=new rT}function rP(){_E.call(this,R6n,0)}function cP(n,t,e){r2(n.d,t.f,e)}function aP(n,t,e,i){xyn(n,i,t,e)}function oP(n,t,e,i){QRn(i,n,t,e)}function uP(n,t,e,i){jQn(i,n,t,e)}function sP(n,t){Akn(n.c.c,t.b,t)}function hP(n,t){Akn(n.c.b,t.c,t)}function fP(n){return n.e.b+n.f.b}function lP(n){return n.e.a+n.f.a}function bP(n){return n.b?n.b:n.a}function wP(n){return(n.c+n.a)/2}function dP(n,t){return Fjn(n.a,t)}function gP(n,t){return n.a=t.g,n}function pP(){pP=E,k_t=new ey}function mP(){mP=E,b_t=new Vk}function vP(){vP=E,NKt=new qu}function kP(){kP=E,WKt=new os}function yP(){yP=E,r_t=new zk}function MP(){MP=E,l_t=new Zk}function TP(){TP=E,_Ft=new Ym}function jP(){jP=E,tBt=new G$}function EP(){EP=E,eBt=new q$}function SP(){SP=E,EBt=new Ah}function PP(){PP=E,PBt=new Lh}function CP(){CP=E,XHt=new xf}function IP(){IP=E,gBt=new Zm}function OP(n){return uG(n,44).ld()}function AP(n){return n.b<n.d.gc()}function LP(n,t){return t.split(n)}function NP(n,t){return dwn(n,t)>0}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.a<n.c.c.length}function b$(n){return n.a<n.c.a.length}function w$(n,t){return n.a?n.b:t.We()}function d$(n,t){return n<t?-1:n>t?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.a<Q_(t)?-1:1}function dD(n,t){return r7(n.b,t.Pg())}function gD(n,t,e){return e?0!=t:t!=n-1}function pD(n,t,e){n.a=1502^t,n.b=e^X0n}function mD(n,t,e){return n.a=t,n.b=e,n}function vD(n,t){return n.a*=t,n.b*=t,n}function kD(n,t){return mv(n.c,t),!0}function yD(n,t,e){return uQ(n.g,t,e),e}function MD(n,t,e){FG.call(this,n,t,e)}function TD(n,t,e){MD.call(this,n,t,e)}function jD(n,t,e){_G.call(this,n,t,e)}function ED(n,t,e){_G.call(this,n,t,e)}function SD(n,t,e){jD.call(this,n,t,e)}function PD(n,t,e){MD.call(this,n,t,e)}function CD(n,t,e){TD.call(this,n,t,e)}function ID(n,t,e){FG.call(this,n,t,e)}function OD(n,t,e){FG.call(this,n,t,e)}function AD(n,t,e){ID.call(this,n,t,e)}function LD(n){n.j=Inn(jot,zZn,319,0,0,1)}function ND(){this.a=Inn(dat,EZn,1,8,5,1)}function $D(){this.Bb|=256,this.Bb|=512}function DD(n){this.i=n,this.f=this.i.j}function xD(n){this.c=n,this.a=this.c.a}function RD(n,t){this.a=n,VE.call(this,t)}function KD(n,t){return Hgn(n,new WM,t).a}function FD(n){if(!n)throw hv(new Dv)}function _D(n){if(!n)throw hv(new xv)}function BD(){(BD=E)(),dut=new _}function HD(){HD=E,SP(),SBt=new _l}function UD(){UD=E,sut=new Xy(null)}function GD(n){ZZ(n,Uet),ARn(n,zQn(n))}function qD(n){n.a=uG(Lsn(n.b.a,4),129)}function XD(n){n.a=uG(Lsn(n.b.a,4),129)}function zD(n){n.b.Qb(),--n.d.f.d,DX(n.d)}function VD(n){this.a=n,fb.call(this,n.d)}function WD(n,t){this.a=n,iT.call(this,t)}function QD(n,t){this.a=n,iT.call(this,t)}function JD(n,t){this.a=n,iT.call(this,t)}function YD(n,t){this.a=t,iT.call(this,n)}function ZD(n,t){this.a=t,c8.call(this,n)}function nx(n,t){this.a=n,c8.call(this,t)}function tx(n,t){this.a=t,WE.call(this,n)}function ex(n,t){this.a=t,WE.call(this,n)}function ix(n,t){return WW(t),new tx(n,t)}function rx(n,t){return new EAn(n.a,n.b,t)}function cx(n,t,e){return n.indexOf(t,e)}function ax(n,t){return n.lastIndexOf(t)}function ox(n){return null==n?IZn:cpn(n)}function ux(n){return null==n?null:n.name}function sx(n){return n.l+n.m*w0n+n.h*d0n}function hx(n){return Jj(n.a)?y2(n):null}function fx(n){$w.call(this,(tJ(n),n))}function lx(n){$w.call(this,(tJ(n),n))}function bx(n){ib.call(this,uG(WW(n),34))}function wx(n){ib.call(this,uG(WW(n),34))}function dx(n){td.call(this,new Bnn(n))}function gx(n){qw.call(this,n),this.a=n}function px(n){Gw.call(this,n),this.a=n}function mx(n){nT.call(this,n),this.a=n}function vx(){LD(this),KY(this),this.je()}function kx(n){this.a=n,Uw.call(this,n)}function yx(n){return MK(null!=n.a),n.a}function Mx(n,t){return kD(t.a,n.a),n.a}function Tx(n,t){return kD(t.b,n.a),n.a}function jx(n,t){return kD(t.a,n.a),n.a}function Ex(n,t,e){return psn(n,t,t,e),n}function Sx(n,t){return++n.b,kD(n.a,t)}function Px(n,t){return++n.b,men(n.a,t)}function Cx(n,t){return ugn(n.c.d,t.c.d)}function Ix(n,t){return ugn(n.c.c,t.c.c)}function Ox(n,t){return ugn(n.n.a,t.n.a)}function Ax(n,t){return uG(Y9(n.b,t),15)}function Lx(n,t){return n.n.b=(tJ(t),t)}function Nx(n,t){return n.n.b=(tJ(t),t)}function $x(n,t){return!!t&&n.b[t.g]==t}function Dx(n){return l$(n.a)||l$(n.b)}function xx(n){return n.$H||(n.$H=++_ut)}function Rx(n){return null!=n.a?n.a:null}function Kx(n,t){return ugn(n.e.b,t.e.b)}function Fx(n,t){return ugn(n.e.a,t.e.a)}function _x(n,t,e){return m5(n,t,e,n.b)}function Bx(n,t,e){return m5(n,t,e,n.c)}function Hx(n){return GB(),!!n&&!n.dc()}function Ux(){JS(),this.b=new Eg(this)}function Gx(){Gx=E,bht=new uF(i3n,0)}function qx(){qx=E,tot=!1,eot=!0}function Xx(n){var t;t=n.a,n.a=n.b,n.b=t}function zx(n,t){jP(),this.a=n,this.b=t}function Vx(n,t){EP(),this.b=n,this.c=t}function Wx(n,t){rz(),this.f=t,this.d=n}function Qx(n,t){e7(t,n),this.d=n,this.c=t}function Jx(n,t){Yvn.call(this,n,t,null)}function Yx(n,t,e,i){qz.call(this,n,t,e,i)}function Zx(n){this.d=n,DD.call(this,n)}function nR(n){this.c=n,DD.call(this,n)}function tR(n){this.c=n,Zx.call(this,n)}function eR(n){return new n8(3,n)}function iR(n){return man(n,g1n),new R7(n)}function rR(n){return EZ(),parseInt(n)||-1}function cR(n){return Hy(),Fcn((d0(),Aat),n)}function aR(n,t,e){return cx(n,$Cn(t),e)}function oR(n,t){return new $_(n,n.gc(),t)}function uR(n,t){return Tz(n.c).Md().Xb(t)}function sR(n,t,e){n.fd(t).Rb(e)}function hR(n,t,e){uG(xen(n,t),21).Fc(e)}function fR(n,t,e){Vdn(n.a,e),bMn(n.a,t)}function lR(n){F$(n,158)&&uG(n,158).pi()}function bR(n){bG.call(this,n,null,null)}function wR(n){dS(),this.b=n,this.a=!0}function dR(n){gS(),this.b=n,this.a=!0}function gR(n){return MK(0!=n.b),n.a.a.c}function pR(n){return MK(0!=n.b),n.c.b.c}function mR(n,t){return psn(n,t,t+1,""),n}function vR(n,t){return!!n.q&&PV(n.q,t)}function kR(n){return n.b=uG(_Y(n.a),44)}function yR(n){return null!=n.f?n.f:""+n.g}function MR(n){return null!=n.f?n.f:""+n.g}function TR(n,t){return n>0?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 JXn(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),293)}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=DUn(n,t,6,e)}function nF(n,t,e){return e=DUn(n,t,3,e)}function tF(n,t,e){return e=DUn(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=DUn(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((X7(),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((S8(),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((V7(),wpt),n)}function aH(n){return Zen(),Fcn((z7(),vpt),n)}function oH(n){return Y6(),Fcn((L8(),Tpt),n)}function uH(n){return ESn(),Fcn((rcn(),Ugt),n)}function sH(n){return Pfn(),Fcn((q7(),Tgt),n)}function hH(n){return tOn(),Fcn((icn(),Agt),n)}function fH(n){return Wtn(),Fcn((j8(),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((nnn(),bEt),n)}function jH(n){return ian(),Fcn((Z7(),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((I8(),bSt),n)}function IH(n){return w0(),Fcn((O8(),pSt),n)}function OH(n){return _7(),Fcn((A8(),RSt),n)}function AH(n){return l0(),Fcn((N8(),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((D8(),HCt),n)}function RH(n){return pon(),Fcn((x8(),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(($8(),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 oUn(),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((cGn(),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.c?-1:n.c==t.c?0:1}function bq(n){return n.b.c.length-n.e.c.length}function wq(n){return n.e.c.length-n.g.c.length}function dq(n){return n.e.c.length+n.g.c.length}function gq(n){return 0==n||isNaN(n)?n:n<0?-1:1}function pq(n){return!v9(n)&&n.c.i.c==n.d.i.c}function mq(n){return n2(),(KQn(),ERt).Hc(n.j)}function vq(n,t,e){return tcn(),e.e.a+e.f.a+n*t}function kq(n,t,e){return tcn(),e.e.b+e.f.b+n*t}function yq(n,t,e){return vJ(n.b,uG(e.b,18),t)}function Mq(n,t,e){return vJ(n.b,uG(e.b,18),t)}function Tq(n,t,e){eQn(n.a,n.b,n.c,uG(t,166),e)}function jq(n,t,e,i){Mvn.call(this,n,t,e,i,0,0)}function Eq(n){uB(),BG.call(this,n),this.a=-1}function Sq(n,t){_z.call(this,t,1040),this.a=n}function Pq(){BO.call(this,"COUNT_CHILDREN",0)}function Cq(n,t){OA.call(this,n,t),this.a=this}function Iq(n,t){var e;return(e=VW(n,t)).i=2,e}function Oq(n,t){return++n.j,n.Cj(t)}function Aq(n,t,e){return n.a=-1,hR(n,t.g,e),n}function Lq(n,t){return kD(n,new MO(t.a,t.b))}function Nq(n){return ncn(),Inn(lPt,z9n,39,n,0,1)}function $q(n){return n.e.Rd().gc()*n.c.Rd().gc()}function Dq(n,t,e){return new x_(BQ(n)._e(),e,t)}function xq(n,t){Yan(n,null==t?null:(tJ(t),t))}function Rq(n,t){Qan(n,null==t?null:(tJ(t),t))}function Kq(n,t){Qan(n,null==t?null:(tJ(t),t))}function Fq(n){if(!n)throw hv(new mM(null))}function _q(n){if(n.c.e!=n.a)throw hv(new Fv)}function Bq(n){if(n.e.c!=n.b)throw hv(new Fv)}function Hq(n){for(WW(n);n.Ob();)n.Pb(),n.Qb()}function Uq(n){ZW(),this.a=(hZ(),new Xw(WW(n)))}function Gq(n){this.c=n,this.b=this.c.d.vc().Kc()}function qq(n){n.a.ld(),uG(n.a.md(),16).gc(),HM()}function Xq(n,t){return n.a+=mvn(t,0,t.length),n}function zq(n,t){return u3(t,n.c.length),n.c[t]}function Vq(n,t){return u3(t,n.a.length),n.a[t]}function Wq(n,t){return tJ(t),Dun(t,(tJ(n),n))}function Qq(n,t){return tJ(n),Dun(n,(tJ(t),t))}function Jq(n,t,e,i,r,c){return NSn(n,t,e,i,r,0,c)}function Yq(n,t){return uQ(t,0,nX(t[0],Hvn(1)))}function Zq(n,t){return Hvn(Lgn(Hvn(n.a).a,t.a))}function nX(n,t){return Zq(uG(n,168),uG(t,168))}function tX(){tX=E,got=Inn(yot,zZn,168,256,0,1)}function eX(){eX=E,Mot=Inn(Tot,zZn,191,256,0,1)}function iX(){iX=E,aot=Inn(uot,zZn,222,256,0,1)}function rX(){rX=E,sot=Inn(hot,zZn,180,128,0,1)}function cX(){gG(this,!1,!1,!1,!1)}function aX(n){td.call(this,new u8),Qon(this,n)}function oX(n){this.a=new sS(n.gc()),Qon(this,n)}function uX(n){this.c=n,this.a=new fS(this.c.a)}function sX(n){this.a=n,this.c=new Ym,jfn(this)}function hX(){this.d=new MO(0,0),this.e=new ek}function fX(n,t){vS(),Fnn.call(this,n),this.a=t}function lX(n,t,e,i){Rf(this),pG(this,n,t,e,i)}function bX(n,t,e){return d$(t.d[n.g],e.d[n.g])}function wX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function dX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function gX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function pX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function mX(n,t,i){return e.Math.min(i/n,1/t)}function vX(n,t){return n?0:e.Math.max(0,t-1)}function kX(n,t){return null==n?null==t:m_(n,t)}function yX(n,t){return null==n?null==t:Bvn(n,t)}function MX(n){return n.q?n.q:(hZ(),hZ(),Vot)}function TX(n){return n.c-uG(zq(n.a,n.b),293).b}function jX(n){return n.c?n.c.f:n.e.b}function EX(n){return n.c?n.c.g:n.e.a}function SX(n,t){return null==n.a&&fBn(n),n.a[t]}function PX(n){var t;return(t=GSn(n))?PX(t):n}function CX(n,t){return QYn(),new eW(n,t)}function IX(n,t){QYn(),Qm.call(this,n),this.a=t}function OX(n,t){ZN(),Hm.call(this,t),this.a=n}function AX(n,t,e){this.a=n,MD.call(this,t,e,2)}function LX(n){this.b=new lS,this.a=n,this.c=-1}function NX(n){Qx.call(this,0,0),this.a=n,this.b=0}function $X(n){Drn.call(this,n.gc()),CW(this,n)}function DX(n){n.b?DX(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function xX(n){return Array.isArray(n)&&n.Tm===j}function RX(n,t){return F$(t,22)&&$x(n,uG(t,22))}function KX(n,t){return F$(t,22)&&Nrn(n,uG(t,22))}function FX(n,t){return Ibn(n,t,A9(n,n.b.Ce(t)))}function _X(n,t){return!(void 0===n.a.get(t))}function BX(n){return uRn(n,26)*G0n+uRn(n,27)*q0n}function HX(n,t){return yan(new Z,new fd(n),t)}function UX(n,t,e){ubn(0,t,n.length),Ntn(n,0,t,e)}function GX(n,t,e){o3(t,n.c.length),pC(n.c,t,e)}function qX(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XX(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function zX(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function VX(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function WX(n,t){var e;return Dfn(e=ggn(n),t),e}function QX(n,t){return!n&&(n=[]),n[n.length]=t,n}function JX(n,t){JF(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function YX(n,t){JX(n,YF(new MO(t.a,t.b),n.c))}function ZX(n,t){this.b=new lS,this.a=n,this.c=t}function nz(){this.b=new Et,this.c=new FZ(this)}function tz(){this.d=new mn,this.e=new KZ(this)}function ez(){J0(),this.f=new lS,this.e=new lS}function iz(){n2(),this.k=new Ym,this.d=new ek}function rz(){rz=E,$Kt=new _N((XYn(),uDt),0)}function cz(){cz=E,Pat=new NX(Inn(dat,EZn,1,0,5,1))}function az(n,t,e){return FV(n,new ZP(t.a,e.a))}function oz(n,t,e){return-d$(n.f[t.p],n.f[e.p])}function uz(n,t,e){HDn(e,n,1),kD(t,new $C(e,n))}function sz(n,t,e){TEn(e,n,1),kD(t,new RC(e,n))}function hz(n,t,e){this.a=n,TD.call(this,t,e,22)}function fz(n,t,e){this.a=n,TD.call(this,t,e,14)}function lz(n,t,e,i){ZN(),d4.call(this,n,t,e,i)}function bz(n,t,e,i){ZN(),d4.call(this,n,t,e,i)}function wz(n,t,e){return n.a=-1,hR(n,t.g+1,e),n}function dz(n,t,e){return e=DUn(n,uG(t,54),7,e)}function gz(n,t,e){return e=DUn(n,uG(t,54),3,e)}function pz(n){return _L(n)?0|n:Tj(n)}function mz(n){return QYn(),new F1(10,n,0)}function vz(n){return n.f||(n.f=n.Dc())}function kz(n){return n.i||(n.i=n.bc())}function yz(n){if(n.e.j!=n.d)throw hv(new Fv)}function Mz(n){return n.c?n.c:n.c=n.Sd()}function Tz(n){return n.d?n.d:n.d=n.Td()}function jz(n,t){return Gvn(Len(n,t))?t.zi():null}function Ez(n){return F$(n,15)?uG(n,15).ed():n.Kc()}function Sz(n){return n.Qc(Inn(dat,EZn,1,n.gc(),5,1))}function Pz(n){return null!=n&&NV(n)&&!(n.Tm===j)}function Cz(n){return!Array.isArray(n)&&n.Tm===j}function Iz(n,t){return WW(t),n.a.Jd(t)&&!n.b.Jd(t)}function Oz(n,t){return p$(n.l&t.l,n.m&t.m,n.h&t.h)}function Az(n,t){return p$(n.l|t.l,n.m|t.m,n.h|t.h)}function Lz(n,t){return p$(n.l^t.l,n.m^t.m,n.h^t.h)}function Nz(n,t){return Esn(JIn(_L(n)?Gsn(n):n,t))}function $z(n,t){return Esn(gDn(_L(n)?Gsn(n):n,t))}function Dz(n,t){return Esn(FOn(_L(n)?Gsn(n):n,t))}function xz(n,t){return gF((tJ(n),n),(tJ(t),t))}function Rz(n,t){return ugn((tJ(n),n),(tJ(t),t))}function Kz(n){this.b=new R7(11),this.a=(sZ(),n)}function Fz(n){this.a=(cz(),Pat),this.d=uG(WW(n),51)}function _z(n,t){this.c=0,this.d=n,this.b=64|t|VZn}function Bz(n,t){this.e=n,this.d=0!=(64&t)?t|VZn:t}function Hz(n){this.b=null,this.a=(sZ(),n||Jot)}function Uz(n){LD(this),this.g=n,KY(this),this.je()}function Gz(n){CP(),this.a=0,this.b=n-1,this.c=1}function qz(n,t,e,i){this.a=n,A7.call(this,n,t,e,i)}function Xz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.Cd(e))}function zz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Vz(n,t){if(n<0||n>=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){0!=(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;r<e;++r)n[r]=i}function zV(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function VV(n,t,e){cHn(),this.e=n,this.d=t,this.a=e}function WV(n,t,e){this.c=n,this.a=t,hZ(),this.b=e}function QV(n,t){this.d=n,DD.call(this,n),this.e=t}function JV(n,t,e){return bbn(n,t.g,e),Mon(n.c,t),n}function YV(n){return qWn(n,(xdn(),JDt)),n.d=!0,n}function ZV(n){return!n.j&&Tw(n,FHn(n.g,n.b)),n.j}function nW(n){n.a=null,n.e=null,$V(n.b),n.d=0,++n.c}function tW(n){TK(-1!=n.b),i7(n.c,n.a=n.b),n.b=-1}function eW(n,t){Qm.call(this,1),this.a=n,this.b=t}function iW(n,t){return n>0?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<t;++i)uQ(n,i,e)}function gW(n,t,e,i,r){for(;t<e;)i[r++]=VJ(n,t++)}function pW(n,t,e,i,r){TCn(n,uG(Y9(t.k,e),15),e,i,r)}function mW(n,t){kS(YJ(n.Oc(),new Kr),new $g(t))}function vW(n,t){return ugn(n.e.a+n.f.a,t.e.a+t.f.a)}function kW(n,t){return ugn(n.e.b+n.f.b,t.e.b+t.f.b)}function yW(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function MW(n){return n==M0n?yct:n==T0n?"-INF":""+n}function TW(n){return n==M0n?yct:n==T0n?"-INF":""+n}function jW(n){return lZ(),R0(bIn(n))==R0(gIn(n))}function EW(n,t,e){return uG(n.c.hd(t,uG(e,136)),44)}function SW(n,t){pQ(n,new QW(null!=t.f?t.f:""+t.g))}function PW(n,t){pQ(n,new QW(null!=t.f?t.f:""+t.g))}function CW(n,t){return n.Si()&&(t=A0(n,t)),n.Fi(t)}function IW(n,t){return t=n.Yk(null,t),pCn(n,null,t)}function OW(n,t){++n.j,WPn(n,n.i,t),xNn(n,uG(t,343))}function AW(n){n?UPn(n,(bS(),Eot),""):a1((bS(),n))}function LW(n){this.d=(tJ(n),n),this.a=0,this.c=YZn}function NW(n,t){this.d=_dn(n),this.c=t,this.a=.5*t}function $W(n){HZ.call(this),this.a=n,kD(n.a,this)}function DW(){u8.call(this),this.a=!0,this.b=!0}function xW(){xW=E,Xat=new Sb(!1),zat=new Sb(!0)}function RW(n){return n.g||(n.g=new Ql(n))}function KW(n){return n.k||(n.k=new Jl(n))}function FW(n){return n.k||(n.k=new Jl(n))}function _W(n){return n.i||(n.i=new tb(n))}function BW(n){return n.f||(n.f=new VD(n))}function HW(n){return n.j||(n.j=new mb(n))}function UW(n){return n.d||(n.d=new rb(n))}function GW(n,t,e){return QYn(),new R3(n,t,e)}function qW(n,t){return q4(t,n.c.b.c.gc()),new TE(n,t)}function XW(n,t){var e;return q4(t,e=n.a.gc()),e-1-t}function zW(n,t,e){var i;return Rcn(e,i=VW(n,t)),i}function VW(n,t){var e;return(e=new Ifn).j=n,e.d=t,e}function WW(n){if(null==n)throw hv(new Rv);return n}function QW(n){if(null==n)throw hv(new Rv);this.a=n}function JW(n){Iv(),this.b=new Zm,this.a=n,xVn(this,n)}function YW(n){this.b=n,this.a=uG(nJ(this.b.a.e),227)}function ZW(){ZW=E,sB(),jat=new t1((hZ(),hZ(),zot))}function nQ(){nQ=E,sB(),Nat=new RP((hZ(),hZ(),Wot))}function tQ(){tQ=E,M_t=DNn(),YYn(),j_t&&kEn()}function eQ(n){n.s=NaN,n.c=NaN,X$n(n,n.e),X$n(n,n.j)}function iQ(n){return(null==n.i&&eqn(n),n.i).length}function rQ(n,t){return uG(Mz(n.a).Md().Xb(t),44).ld()}function cQ(n,t){return RA(t)?U1(n,t):DA(FX(n.f,t))}function aQ(n,t){return lZ(),n==bIn(t)?gIn(t):bIn(t)}function oQ(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function uQ(n,t,e){return yK(null==e||aGn(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.d;)n.Se(t,n.c++)}function fQ(n){this.d=n,this.c=n.a.d.a,this.b=n.a.e.g}function lQ(n){this.c=n,this.a=new lS,this.b=new lS}function bQ(n){this.c=new sj,this.a=new Zm,this.b=n}function wQ(n){this.b=new Zm,this.a=new Zm,this.c=n}function dQ(n,t,e){uG(t.b,68),Prn(t.a,new NU(n,e,t))}function gQ(n,t){return Pun(),uG(AJ(n,t.d),15).Fc(t)}function pQ(n,t){var e;uin(n,e=n.a.length),W5(n,e,t)}function mQ(n,t){console[n].call(console,t)}function vQ(n,t){var e;++n.j,e=n.Ej(),n.rj(n.Zi(e,t))}function kQ(n,t,e){return NBn(n,Aon(n,t,e))}function yQ(n){return!n.d&&(n.d=new MD(g_t,n,1)),n.d}function MQ(n){return!n.a&&(n.a=new MD(nFt,n,4)),n.a}function TQ(n,t){return n.a+=String.fromCharCode(t),n}function jQ(n,t){return n.a+=String.fromCharCode(t),n}function EQ(n,t,e){this.a=n,Bm.call(this,t),this.b=e}function SQ(n,t,e){this.a=n,E6.call(this,8,t,null,e)}function PQ(n,t,e){Qm.call(this,n),this.a=t,this.b=e}function CQ(n,t,e){Hm.call(this,t),this.a=n,this.b=e}function IQ(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function OQ(n){this.a=(tJ(Ert),Ert),this.b=n,new Zk}function AQ(n){oY(n.a),n.b=Inn(dat,EZn,1,n.b.length,5,1)}function LQ(n){TK(-1!=n.c),n.d.gd(n.c),n.b=n.c,n.c=-1}function NQ(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function $Q(n,t){return ljn(n.c,n.f,t,n.b,n.a,n.e,n.d)}function DQ(n,t){return Vz(t,n.a.c.length),zq(n.a,t)}function xQ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function RQ(n){return F$(n,102)&&0!=(uG(n,19).Bb&Qtt)}function KQ(n){return nJ(n),F$(n,483)?uG(n,483):cpn(n)}function FQ(n){return n?n.dc():!n.Kc().Ob()}function _Q(n){return!!zHt&&AZ(zHt,n)}function BQ(n){return 0>=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.b<n.c?cL(n.b,t):n.a.tf(t)}function QQ(n,t){ttn((!n.a&&(n.a=new oF(n,n)),n.a),t)}function JQ(n,t){JX(uG(t.b,68),n),Prn(t.a,new Dd(n))}function YQ(n,t){return d$(t.j.c.length,n.j.c.length)}function ZQ(n,t,e){return Whn(),e.Lg(n,uG(t.ld(),149))}function nJ(n){if(null==n)throw hv(new Rv);return n}function tJ(n){if(null==n)throw hv(new Rv);return n}function eJ(n){if(4!=n.p)throw hv(new xv);return n.e}function iJ(n){if(3!=n.p)throw hv(new xv);return n.e}function rJ(n){if(3!=n.p)throw hv(new xv);return n.j}function cJ(n){if(4!=n.p)throw hv(new xv);return n.j}function aJ(n){if(6!=n.p)throw hv(new xv);return n.f}function oJ(n){if(6!=n.p)throw hv(new xv);return n.k}function uJ(n){return!n.b&&(n.b=new Um(new ty)),n.b}function sJ(n){return-2==n.c&&ww(n,XCn(n.g,n.b)),n.c}function hJ(n,t){var e;return(e=VW("",n)).n=t,e.i=1,e}function fJ(n,t,e,i){FE.call(this,n,e),this.a=t,this.f=i}function lJ(n,t,e,i){FE.call(this,n,t),this.d=e,this.a=i}function bJ(n,t){H$.call(this,eon(WW(n),WW(t))),this.a=t}function wJ(){ly.call(this),Xv(this.j.c,0),this.a=-1}function dJ(){iIn.call(this,Drt,(vj(),y_t)),zXn(this)}function gJ(){iIn.call(this,lct,(kj(),xBt)),hVn(this)}function pJ(){_E.call(this,"DELAUNAY_TRIANGULATION",0)}function mJ(n){return String.fromCharCode.apply(null,n)}function vJ(n,t,e){return RA(t)?r2(n,t,e):VAn(n.f,t,e)}function kJ(n){return hZ(),n?n.Oe():(sZ(),sZ(),Zot)}function yJ(n){return man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))}function MJ(n,t){return qG(),new Gyn(new wx(n),new bx(t))}function TJ(){TJ=E,Eat=new Ry(Uhn(cT(Sat,1),c1n,44,0,[]))}function jJ(n){return!n.d&&(n.d=new qw(n.c.Cc())),n.d}function EJ(n){return!n.a&&(n.a=new tT(n.c.vc())),n.a}function SJ(n){return!n.b&&(n.b=new nT(n.c.ec())),n.b}function PJ(n,t){for(;t-- >0;)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,488,0,[Kht])}function NJ(){return nP(),Uhn(cT(JAt,1),p1n,489,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),Tzn(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.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function BY(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function HY(n){this.f=n,this.c=this.f.e,n.f>0&&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 Wtn(),Uhn(cT(Hgt,1),p1n,487,0,[Ngt,Lgt])}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 b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])}function m1(){return w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])}function v1(){return _7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])}function k1(){return Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])}function y1(){return a9(),Uhn(cT(CAt,1),p1n,490,0,[yAt,MAt])}function M1(){return rhn(),Uhn(cT($At,1),p1n,491,0,[OAt,AAt])}function T1(){return i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])}function j1(){return Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])}function E1(){return l0(),Uhn(cT(JSt,1),p1n,464,0,[USt,GSt])}function S1(){return pon(),Uhn(cT(iIt,1),p1n,500,0,[VCt,WCt])}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).a<n}function P0(n,t){return UB(),qx(),uG(t.b,17).a<n}function C0(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function I0(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a.i>0}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,471,0,[Fst,Kst,Rst])}function R2(){return Ktn(),Uhn(cT(xst,1),p1n,470,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,459,0,[kgt,vgt,ygt])}function G2(){return ihn(),Uhn(cT(mpt,1),p1n,298,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,462,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,463,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=0==(t&j0n)?64|t|VZn:t}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,455,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,299,0,[iOt,rOt,eOt])}function v3(){return Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])}function k3(){return Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])}function y3(){return Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])}function M3(){return Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])}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.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function $3(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function D3(n,t){var e;e=uM(pK(n.a.of((XYn(),LDt)))),pJn(n,t,e)}function x3(n,t){VV.call(this,1,2,Uhn(cT(YHt,1),W1n,28,15,[n,t]))}function R3(n,t,e){Qm.call(this,25),this.b=n,this.a=t,this.c=e}function K3(n){QYn(),Qm.call(this,n),this.c=!1,this.a=!1}function F3(n){return n.a==(N7(),TBt)&&gw(n,X_n(n.g,n.b)),n.a}function _3(n){return n.d==(N7(),TBt)&&mw(n,oqn(n.g,n.b)),n.d}function B3(n,t){return Win(),n.c==t.c?ugn(t.d,n.d):ugn(t.c,n.c)}function H3(n,t){return Win(),n.c==t.c?ugn(t.d,n.d):ugn(n.c,t.c)}function U3(n,t){return Win(),n.c==t.c?ugn(n.d,t.d):ugn(n.c,t.c)}function G3(n,t){return Win(),n.c==t.c?ugn(n.d,t.d):ugn(t.c,n.c)}function q3(n,t){return KX(n.a,t)?nq(n.b,uG(t,22).g,null):null}function X3(n){return Lgn(Nz(Bsn(uRn(n,32)),32),Bsn(uRn(n,32)))}function z3(n){return null==n.b||0==n.b.length?"n_"+n.a:"n_"+n.b}function V3(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function W3(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function Q3(n,t){var e;e=uG(cQ(n.g,t),60),Prn(t.d,new HC(n,e))}function J3(n,t){var e,i;return(e=qTn(n))<(i=qTn(t))?-1:e>i?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)&&0!=(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)),482)}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||t<n||t>e)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,488,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,489,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,303,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,290,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<t;e++)kD(n.j,n.Ng())}function m5(n,t,e,i){var r;return r=i[t.g][e.g],uM(pK(oIn(n.a,r)))}function v5(n,t){var e;return TP(),!(e=uG(cQ(_Ft,n),57))||e.fk(t)}function k5(n){if(1!=n.p)throw hv(new xv);return pz(n.f)<<24>>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)&&0!=(uG(t,19).Bb&P0n))}function U5(n,t,e){return Dqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function G5(n,t,e){return Cxn(n,t,e,F$(t,102)&&0!=(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<n.c.a.length),n.b=n.a,Sin(n),n.c.b[n.b]}function z5(n){return n.n||(y9(n),n.n=new hz(n,g_t,n),n1(n)),n.n}function V5(n){if(n<0)throw hv(new yM("Negative array size: "+n))}function W5(n,t,e){if(e){var i=e.oe();e=i(e)}else e=void 0;n.a[t]=e}function Q5(n,t){var e;return Cln(),0!=(e=n.j.g-t.j.g)?e:0}function J5(n,t){return bS(),String.fromCharCode(10),ttn(gZ(n.a),t)}function Y5(n,t){return bS(),String.fromCharCode(10),ttn(gZ(n.a),t)}function Z5(n,t){cHn(),VV.call(this,n,1,Uhn(cT(YHt,1),W1n,28,15,[t]))}function n8(n,t){QYn(),Qm.call(this,n),this.a=t,this.c=-1,this.b=-1}function t8(n,t,e,i){c4.call(this,1,e,i),Kf(this),this.c=n,this.b=t}function e8(n,t,e,i){a4.call(this,1,e,i),Kf(this),this.c=n,this.b=t}function i8(n,t,e,i,r,c,a){Ran.call(this,t,i,r,c,a),this.c=n,this.a=e}function r8(n,t,e){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t,this.d=e}function c8(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function a8(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function o8(n){this.c=n,this.a=uG(bEn(n),156),this.b=this.a.jk().wi()}function u8(){Ym.call(this),LR(this),this.d.b=this.d,this.d.a=this.d}function s8(n,t,e,i){var r;(r=new R).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function h8(n,t){return XA(null!=t?U1(n,t):DA(FX(n.f,t)))}function f8(n,t){return XA(null!=t?U1(n,t):DA(FX(n.f,t)))}function l8(n,t){return t.b.Kb(ven(n,t.c.Xe(),new jd(t)))}function b8(n,t){var e;return V5(t),(e=n.slice(0,t)).length=t,Ltn(e,n)}function w8(n,t){var e;for(e=0;e<t;++e)uQ(n,e,new Yw(uG(n[e],44)))}function d8(n,t){var e;for(e=n.d-1;e>=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,Dgt=Abn((Wtn(),Uhn(cT(Hgt,1),p1n,487,0,[Ngt,Lgt])))}function E8(){E8=E,mgt=Abn((Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])))}function S8(){S8=E,Jdt=Abn((H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])))}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,bSt=Abn((b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])))}function O8(){O8=E,pSt=Abn((w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])))}function A8(){A8=E,RSt=Abn((_7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])))}function L8(){L8=E,Tpt=Abn((Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])))}function N8(){N8=E,XSt=Abn((l0(),Uhn(cT(JSt,1),p1n,464,0,[USt,GSt])))}function $8(){$8=E,uIt=Abn((Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])))}function D8(){D8=E,HCt=Abn((i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])))}function x8(){x8=E,JCt=Abn((pon(),Uhn(cT(iIt,1),p1n,500,0,[VCt,WCt])))}function R8(){R8=E,jAt=Abn((a9(),Uhn(cT(CAt,1),p1n,490,0,[yAt,MAt])))}function K8(){K8=E,NAt=Abn((rhn(),Uhn(cT($At,1),p1n,491,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||mUn(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<i;++e)qQ(t[e])}function H9(n,t){var e,i;(e=uG(zwn(n.c,t),16))&&(i=e.gc(),e.$b(),n.d-=i)}function U9(n,t,e){var i;return(i=n.Ih(t))>=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;r<Nst;r++)XX(n.a[t.g][r],e,i[t.g])}function Y9(n,t){var e;return!(e=uG(n.c.xc(t),16))&&(e=n.ic(t)),n.pc(t,e)}function Z9(n){var t;return WW(n),_An(t=n?new Z_(n):rG(n.Kc())),Dwn(t)}function n7(n){var t;return WW(n),Dfn(t=new R7(yJ(n.length)),n),t}function t7(n,t,e,i){var r;return rCn(r=Inn(YHt,W1n,28,t,15,1),n,t,e,i),r}function e7(n,t){if(n<0||n>t)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:e<i?-1:1}function c7(n){var t;return t=n.e+n.f,isNaN(t)&&J_(n.d)?n.d:t}function a7(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function o7(n,t){return n.a?JA(n.a,n.b):n.a=new lx(n.d),WA(n.a,t),n}function u7(n,t){return RA(t)?null==t?Y$n(n.f,null):Vsn(n.i,t):Y$n(n.f,t)}function s7(n,t){eL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function h7(n,t){iL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function f7(n,t){rL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function l7(n,t,e){Hm.call(this,e),this.b=n,this.c=t,this.d=(Pmn(),lBt)}function b7(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function w7(n){this.c=n,this.a=new Ww(this.c.a),this.b=new Ww(this.c.b)}function d7(){this.e=new Zm,this.c=new Zm,this.d=new Zm,this.b=new Zm}function g7(){this.g=new ok,this.b=new ok,this.a=new Zm,this.k=new Zm}function p7(){this.a=new gk,this.b=new Lk,this.d=new Ct,this.e=new Dt}function m7(n,t,e){this.a=n,this.c=t,this.d=e,kD(t.e,this),kD(e.b,this)}function v7(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.tg(t[r],i,e)}function k7(n,t){var e;return e=$Vn(n,t),n.b=new Don(e.c.length),$zn(n,e)}function y7(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),Iqn(n,e)}function M7(n){var t;return 0==(t=n.b).b?null:uG(hyn(t,0),65).b}function T7(n){return n.a?n.e?T7(n.e):null:n}function j7(n,t){return n.p<t.p?1:n.p>t.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<n.d&&(n.Se(t,n.c++),!0)}function R7(n){IN(this),vG(n>=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,Tgt=Abn((Pfn(),Uhn(cT(Ogt,1),p1n,459,0,[kgt,vgt,ygt])))}function X7(){X7=E,Cdt=Abn((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))}function z7(){z7=E,vpt=Abn((Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])))}function V7(){V7=E,wpt=Abn((ihn(),Uhn(cT(mpt,1),p1n,298,0,[fpt,lpt,hpt])))}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,462,0,[Qjt,Vjt,Wjt])))}function Z7(){Z7=E,mEt=Abn((ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])))}function nnn(){nnn=E,bEt=Abn((kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])))}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,299,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,455,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,463,0,[_Et,BEt,HEt])))}function hnn(){hnn=E,Dst=Abn((Ktn(),Uhn(cT(xst,1),p1n,470,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,471,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;i<e;++i)_yn(r);return r}function Ann(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.Qi(i,r)}function Lnn(n,t){var e;return(e=new B).c=!0,e.d=t.md(),pWn(n,t.ld(),e)}function Nnn(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),Iqn(n,e)}function $nn(n,t){var e,i;return i=SZ(rG(new Een(n,e=t))),Hq(new Een(n,e)),i}function Dnn(n,t){t.Ug("Label management",1),XA(oIn(n,(K7(),jNt))),t.Vg()}function xnn(n,t,e,i){EGn(n,t,e,Dqn(n,t,i,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))}function Rnn(n,t,e){uG(n.b,68),uG(n.b,68),uG(n.b,68),Prn(n.a,new AB(e,t,n))}function Knn(n,t,e){if(n<0||t>e||t<n)throw hv(new JM(o2n+n+s2n+t+Q0n+e))}function Fnn(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Zm)}function _nn(n,t){VP.call(this,n,t),this.a=Inn(yut,c1n,447,2,0,1),this.b=!0}function Bnn(n){Nfn.call(this,n,0),LR(this),this.d.b=this.d,this.d.a=this.d}function Hnn(n){this.e=n,this.b=this.e.a.entries(),this.a=Inn(dat,EZn,1,0,5,1)}function Unn(){Unn=E,SEt=wz(Aq(new wJ,(uIn(),Tlt),(zYn(),uwt)),Plt,Owt)}function Gnn(){return tOn(),Uhn(cT($gt,1),p1n,283,0,[Egt,jgt,Pgt,Sgt,Igt,Cgt])}function qnn(){return ESn(),Uhn(cT(Qgt,1),p1n,281,0,[Fgt,Kgt,Bgt,Rgt,_gt,xgt])}function Xnn(){return RIn(),Uhn(cT(upt,1),p1n,282,0,[Vgt,qgt,Wgt,zgt,Xgt,Ggt])}function znn(){return vAn(),Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])}function Vnn(){return zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])}function Wnn(){return eNn(),Uhn(cT(BRt,1),p1n,279,0,[gRt,wRt,dRt,bRt,lRt,pRt])}function Qnn(){return $Pn(),Uhn(cT(mRt,1),p1n,101,0,[sRt,uRt,oRt,rRt,aRt,cRt])}function Jnn(){return RCn(),Uhn(cT(Lxt,1),p1n,321,0,[mxt,gxt,vxt,wxt,pxt,dxt])}function Ynn(){return nMn(),Uhn(cT(n$t,1),p1n,255,0,[CNt,ANt,LNt,NNt,INt,ONt])}function Znn(){return ZSn(),Uhn(cT(txt,1),p1n,297,0,[ZNt,YNt,JNt,WNt,VNt,QNt])}function ntn(n){var t;return n.a||-1==n.b||(t=n.c.Dh(),n.a=ern(t,n.b)),n.a}function ttn(n,t){return!(n.Si()&&n.Hc(t)||(n.Hi(t),0))}function etn(n,t){return ZZ(t,"Horizontal alignment cannot be null"),n.b=t,n}function itn(n,t,e){var i;return QYn(),i=kJn(n,t),e&&i&&_Q(n)&&(i=null),i}function rtn(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function ctn(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function atn(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function otn(n,t){var e;for(e=t.Kc();e.Ob();)_Hn(n,uG(e.Pb(),36),0,0)}function utn(n,t,e){var i;for(i=n.Kc();i.Ob();)tHn(uG(i.Pb(),36),t,e)}function stn(n){var t;for(t=Fkn(n.a,0);t.b!=t.d.c;)hNn(uG(I6(t),65))}function htn(n,t){return BP(n.e,t)||Akn(n.e,t,new Bkn(t)),uG(ain(n.e,t),113)}function ftn(n,t,e,i){return tJ(n),tJ(t),tJ(e),tJ(i),new WV(n,t,new H)}function ltn(n,t,e,i){this.ak(),this.a=t,this.b=n,this.c=new kV(this,t,e,i)}function btn(n,t,e,i,r,c){E6.call(this,t,i,r,c),Kf(this),this.c=n,this.b=e}function wtn(n,t,e,i,r,c){E6.call(this,t,i,r,c),Kf(this),this.c=n,this.a=e}function dtn(n,t){var e,i,r;return r=n.r,i=n.d,(e=uXn(n,t,!0)).b!=r||e.a!=i}function gtn(n,t,e){var i;return(i=jxn(n.b,t))?JXn(Len(n,i),e):null}function ptn(n,t,e){var i,r;r=null,(i=v0(n,e))&&(r=uAn(i)),Tkn(t,e,r)}function mtn(n,t,e){var i,r;r=null,(i=v0(n,e))&&(r=uAn(i)),Tkn(t,e,r)}function vtn(n,t){var e;return(e=n.Ih(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,303,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,290,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<n.c.length;++e)if(OJ(t,n.c[e]))return e;return-1}function jen(n){var t;return t=uG(zq(n.j,0),12),uG(oIn(t,(GYn(),rmt)),12)}function Een(n,t){var e;this.f=n,this.b=t,e=uG(cQ(n.b,t),260),this.c=e?e.b:null}function Sen(){GB(),this.b=new Ym,this.f=new Ym,this.g=new Ym,this.e=new Ym}function Pen(n){LD(this),this.g=n?i1(n,n.ie()):null,this.f=n,KY(this),this.je()}function Cen(n){var t;null!=(t=n.jj())&&-1!=n.d&&uG(t,94).xh(n),n.i&&n.i.oj()}function Ien(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--uG(zq(n.c.a,t),10).p}function Oen(n){TK(!!n.c),OB(n.f.g,n.d),n.c.Qb(),n.c=null,n.b=Phn(n),n.d=n.f.g}function Aen(n){return n.b||(n.b=new fz(n,g_t,n),!n.a&&(n.a=new oF(n,n))),n.b}function Len(n,t){var e,i;return!(i=(e=uG(t,690)).xi())&&e.Ai(i=new IA(n,t)),i}function Nen(n,t){var e,i;return!(i=(e=uG(t,692)).$k())&&e.cl(i=new p4(n,t)),i}function $en(n,t){var e,i;return JS(),e=Q6(n),i=Q6(t),!!e&&!!i&&!Tyn(e.k,i.k)}function Den(n,t){return OJ(t,zq(n.f,0))||OJ(t,zq(n.f,1))||OJ(t,zq(n.f,2))}function xen(n,t){if(t<0)throw hv(new dM(Nnt+t));return p5(n,t+1),zq(n.j,t)}function Ren(n,t,e,i){if(!n)throw hv(new vM(LBn(t,Uhn(cT(dat,1),EZn,1,5,[e,i]))))}function Ken(n,t,e,i,r,c,a){Ran.call(this,t,i,r,c,a),Kf(this),this.c=n,this.b=e}function Fen(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function _en(n){var t,e;return gW(n,0,e=n.length,t=Inn(JHt,N1n,28,e,15,1),0),t}function Ben(n){var t,e;return iX(),!(e=aot[t=n+128])&&(e=aot[t]=new Dw(n)),e}function Hen(n){return OB(n.d.a.e.g,n.b),MK(n.c!=n.d.a.d),n.a=n.c,n.c=n.c.a,n.a}function Uen(n){switch(n.g){case 0:return vZn;case 1:return-1;default:return 0}}function Gen(n){return yEn(n,(tin(),not))<0?-sx(gfn(n)):n.l+n.m*w0n+n.h*d0n}function qen(n){(this.q?this.q:(hZ(),hZ(),Vot)).Ac(n.q?n.q:(hZ(),hZ(),Vot))}function Xen(n,t){L_(uG(uG(n.f,27).of((XYn(),sDt)),101))&&ppn(RJ(uG(n.f,27)),t)}function zen(n,t){var e;return(e=emn(n.d,t))>=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<n.a.length;)++n.a[e],e+=e&-e}function bin(n,t,e,i){QYn(),Qm.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function win(n,t){for(;t[0]<n.length&&xL(" \t\r\n",$Cn(VJ(n,t[0])))>=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)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n)}function yin(n,t){return F$(t,102)&&0!=(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.a<t;++n.a)if(n.c.b[n.a])return}function Pin(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=JOn(t,e)}while(n.a);n.a=e}}function Cin(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=JOn(t,e)}while(n.b);n.b=e}}function Iin(n,t){var e;for(e=0;n.e!=n.i.gc();)Tq(t,Zkn(n),xwn(e)),e!=vZn&&++e}function Oin(n,t){var e;return 0==(e=Fgn(n.e.c,t.e.c))?ugn(n.e.d,t.e.d):e}function Ain(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.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<i.c.c.length;)PPn(n,t,N3(i))}function nrn(n,t,e){var i;if(null==t)throw hv(new Rv);return i=v0(n,t),K5(n,t,e),i}function trn(n,t){var e;return(e=uG(cQ(n.a,t),137))||(e=new Yn,vJ(n.a,t,e)),e}function ern(n,t){var e;return null==n.i&&eqn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function irn(n,t){var e;return e=t>0?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(0!=(2&n.i)?"interface ":0!=(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<d1n?t0(n/.75+1):vZn}function urn(n,t){return tJ(t),zz(n),!!n.d.Ob()&&(t.Cd(n.d.Pb()),!0)}function srn(n,t){var e,i;return(e=uG(Xwn(n.d,t),16))?(i=t,n.e.pc(i,e)):null}function hrn(n,t,e,i){n.j=-1,P$n(n,sAn(n,t,e),(PP(),uG(t,69).vk().xl(i)))}function frn(n,t){return ncn(),-d$(uG(oIn(n,(QGn(),kCt)),17).a,uG(oIn(t,kCt),17).a)}function lrn(n,t){return!!bun(n,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))}function brn(){return rDn(),Uhn(cT(PFt,1),p1n,245,0,[jFt,yFt,MFt,kFt,TFt,mFt,pFt,vFt])}function wrn(){return lAn(),Uhn(cT(SNt,1),p1n,285,0,[yNt,wNt,mNt,kNt,dNt,gNt,pNt,vNt])}function drn(){return h_n(),Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt])}function grn(n){var t;return(t=uM(pK(oIn(n,(jYn(),tMt)))))<0&&kfn(n,tMt,t=0),t}function prn(n,t){var e;for(e=n.Kc();e.Ob();)kfn(uG(e.Pb(),72),(GYn(),Qpt),t)}function mrn(n,t,i){var r;TEn(i,r=e.Math.max(0,n.b/2-.5),1),kD(t,new AC(i,r))}function vrn(n,t,e){return t0(gq(n.a.e[uG(t.a,10).p]-n.a.e[uG(e.a,10).p]))}function krn(n,t){var e;return vgn(n),e=new QY(n,n.a.zd(),4|n.a.yd(),t),new fX(n,e)}function yrn(n){var t;TK(!!n.c),t=n.c.a,Lrn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function Mrn(n){return n.a>=-.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;t<n.length;t++)n[t]>e&&(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;r<e;r++)n.Cd(i)}function Prn(n,t){var e,i,r,c;for(tJ(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.Cd(e)}function Crn(n,t,e,i,r,c){var a;c2(a=K9(i),r),u2(a,c),UNn(n.a,i,new $B(a,t,e.f))}function Irn(n,t){Myn(n,(lBn(),jOt),t.f),Myn(n,yOt,t.e),Myn(n,TOt,t.d),Myn(n,kOt,t.c)}function Orn(n,t){this.a=new Ym,this.e=new Ym,this.b=(Cwn(),hjt),this.c=n,this.b=t}function Arn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(Hy(),Iat)}function Lrn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function Nrn(n,t){return!(!t||n.b[t.g]!=t||(uQ(n.b,t.g,null),--n.c,0))}function $rn(n,t){if(0>n||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;r<c;++r)e=i[r],oD(n.g,e).a=t}function Krn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Frn(n){var t;for(t=0;t<n.c.length;t++)(u3(t,n.c.length),uG(n.c[t],12)).p=t}function _rn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)Mon(n.b,t),t=qdn(t);Mon(n.b,t)}function Brn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(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<n;++e)mv(i.c,t);return new eT(i)}function Wrn(n){return vgn(n),kG(!0,"n may not be negative"),new fX(n,new Fan(n.a))}function Qrn(n){n.b=(Ktn(),Ost),n.f=(Yen(),Kst),n.d=(man(2,g1n),new R7(2)),n.e=new sj}function Jrn(n){this.b=(WW(n),new Z_(n)),this.a=new Zm,this.d=new Zm,this.e=new sj}function Yrn(){Yrn=E,jst=new cC("BEGIN",0),Est=new cC(G2n,1),Sst=new cC("END",2)}function Zrn(){Zrn=E,ixt=new CO(G2n,0),rxt=new CO("HEAD",1),cxt=new CO("TAIL",2)}function ncn(){ncn=E,GCt=Lvn(Lvn(Lvn(gP(new wJ,(Cjn(),VSt)),(OHn(),fPt)),rPt),uPt)}function tcn(){tcn=E,XCt=Lvn(Lvn(Lvn(gP(new wJ,(Cjn(),QSt)),(OHn(),aPt)),tPt),cPt)}function ecn(){ecn=E,zdt=Abn((vAn(),Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])))}function icn(){icn=E,Agt=Abn((tOn(),Uhn(cT($gt,1),p1n,283,0,[Egt,jgt,Pgt,Sgt,Igt,Cgt])))}function rcn(){rcn=E,Ugt=Abn((ESn(),Uhn(cT(Qgt,1),p1n,281,0,[Fgt,Kgt,Bgt,Rgt,_gt,xgt])))}function ccn(){ccn=E,Jgt=Abn((RIn(),Uhn(cT(upt,1),p1n,282,0,[Vgt,qgt,Wgt,zgt,Xgt,Ggt])))}function acn(){acn=E,mbt=Abn((zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])))}function ocn(){ocn=E,DNt=Abn((nMn(),Uhn(cT(n$t,1),p1n,255,0,[CNt,ANt,LNt,NNt,INt,ONt])))}function ucn(){ucn=E,t$t=Abn((ZSn(),Uhn(cT(txt,1),p1n,297,0,[ZNt,YNt,JNt,WNt,VNt,QNt])))}function scn(){scn=E,yxt=Abn((RCn(),Uhn(cT(Lxt,1),p1n,321,0,[mxt,gxt,vxt,wxt,pxt,dxt])))}function hcn(){hcn=E,fRt=Abn(($Pn(),Uhn(cT(mRt,1),p1n,101,0,[sRt,uRt,oRt,rRt,aRt,cRt])))}function fcn(){fcn=E,vRt=Abn((eNn(),Uhn(cT(BRt,1),p1n,279,0,[gRt,wRt,dRt,bRt,lRt,pRt])))}function lcn(){lcn=E,$st=(Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length,Nst=$st}function bcn(){return VDn(),Uhn(cT(eRt,1),p1n,95,0,[Bxt,_xt,Uxt,Vxt,zxt,Xxt,Gxt,qxt,Hxt])}function wcn(n,t){return jIn(),d$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function dcn(n,t){return Cj(lun(n,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15)))))}function gcn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function pcn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,1,e,n.b))}function mcn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,3,e,n.b))}function vcn(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,3,e,n.f))}function kcn(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,4,e,n.g))}function ycn(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,5,e,n.i))}function Mcn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,6,e,n.j))}function Tcn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,1,e,n.j))}function jcn(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,4,e,n.c))}function Ecn(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,2,e,n.k))}function Scn(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new t8(n,0,e,n.a))}function Pcn(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new e8(n,4,e,n.s))}function Ccn(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new e8(n,5,e,n.t))}function Icn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new e8(n,2,e,n.d))}function Ocn(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,5,e,t))}function Acn(n,t){var e;return(e=uG(cQ((TP(),_Ft),n),57))?e.gk(t):Inn(dat,EZn,1,t,5,1)}function Lcn(n,t){return YF(D$(uG(cQ(n.g,t),8)),x$(uG(cQ(n.f,t),469).b))}function Ncn(n,t){var e,i;return gj(),i=new cs,!!t&&vKn(i,t),Van(e=i,n),e}function $cn(n,t){var e;return t in n.a&&(e=v0(n,t).re())?e.a:null}function Dcn(n,t,e){if(gln(n,e),!n.kl()&&null!=e&&!n.fk(e))throw hv(new Nv);return e}function xcn(n,t){return n.n=t,n.n?(n.f=new Zm,n.e=new Zm):(n.f=null,n.e=null),n}function Rcn(n,t){if(n){t.n=n;var e=u0(t);e?e.Rm=t:sZn[n]=[t]}}function Kcn(n){var t;return Fq(null==n||Array.isArray(n)&&!((t=Min(n))>=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<c;++r)e=i[r],een(n.a,e);return n}function zcn(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)WW(t[e]);return new rN(n)}function Vcn(n){var t;return OEn(t=YF(D$(n.d.d),n.c.d),n.c.e.a,n.c.e.b),JF(t,n.c.d)}function Wcn(n){var t;return OEn(t=YF(D$(n.c.d),n.d.d),n.d.e.a,n.d.e.b),JF(t,n.d.d)}function Qcn(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||O1n}function Jcn(n,t,i){var r;return r=n.length,b$n(n,0,t,0,e.Math.min(i,r),!0),t}function Ycn(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=uG(r.Pb(),74),FV(n,uG(e.Kb(i),27))}function Zcn(n,t){L_(uG(oIn(uG(n.e,10),(jYn(),JMt)),101))&&(hZ(),f$(uG(n.e,10).j,t))}function nan(){return W_n(),Uhn(cT(yst,1),p1n,257,0,[pst,lst,bst,fst,dst,gst,wst,hst,sst])}function tan(){return MKn(),Uhn(cT(fjt,1),p1n,265,0,[rjt,tjt,ejt,YTt,njt,cjt,ijt,JTt,ZTt])}function ean(){ean=E,_Et=new jI("BARYCENTER",0),BEt=new jI(p6n,1),HEt=new jI(m6n,2)}function ian(){ian=E,gEt=new MI("NO",0),wEt=new MI(x6n,1),dEt=new MI("LOOK_BACK",2)}function ran(){ran=E,igt=new YC("ARD",0),cgt=new YC("MSD",1),rgt=new YC("MANUAL",2)}function can(){can=E,Qjt=new mI(Y2n,0),Vjt=new mI("INPUT",1),Wjt=new mI("OUTPUT",2)}function aan(){return cNt||Oln(cNt=new ABn,Uhn(cT(vst,1),EZn,134,0,[new Dl])),cNt}function oan(n){if(!(n>=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<r;++i)dW(t=e[i],t.length,null)}function dan(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)s8(n,e[i],n.c.b,n.c)}function gan(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(OJ(t,n.Xb(e)))return e;return-1}function pan(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function man(n,t){if(n<0)throw hv(new vM(t+" cannot be negative but was: "+n));return n}function van(n,t){typeof window===wZn&&typeof window.$gwt===wZn&&(window.$gwt[n]=t)}function kan(n,t){return Pj(bun(n.a,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15)))))}function yan(n,t,e){return gen(n,new dd(t),new an,new gd(e),Uhn(cT(Rut,1),p1n,108,0,[]))}function Man(){return oUn(),Uhn(cT(wKt,1),p1n,264,0,[eKt,rKt,tKt,cKt,aKt,uKt,oKt,iKt,nKt])}function Tan(){Tan=E,wot=Uhn(cT(YHt,1),W1n,28,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function jan(){jan=E,Zdt=new JC("LAYER_SWEEP",0),Ydt=new JC(D6n,1),ngt=new JC(q4n,2)}function Ean(){Ean=E,CEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function San(){San=E,IEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Pan(){Pan=E,OEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Can(){Can=E,AEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Ian(){Ian=E,LEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Oan(){Oan=E,DEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Aan(){Aan=E,KEt=wz(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt,vwt)}function Lan(n){var t;for(t=new Ww(FTn(n));t.a<t.c.c.length;)uG(N3(t),695)._f()}function Nan(){kE();for(var n=hZn,t=0;t<arguments.length;t++)n.push(arguments[t])}function $an(n){HS(),this.g=new Ym,this.f=new Ym,this.b=new Ym,this.c=new K1,this.i=n}function Dan(){this.f=new sj,this.d=new xk,this.c=new sj,this.a=new Zm,this.b=new Zm}function xan(n,t,e,i){this.ak(),this.a=t,this.b=n,this.c=null,this.c=new b_(this,t,e,i)}function Ran(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function Kan(){$D.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=w1n}function Fan(n){rL.call(this,n.Ad(64)?g$(0,$gn(n.zd(),1)):YZn,n.yd()),this.b=1,this.a=n}function _an(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a<n.gc()&&uG(oIn(t,kCt),17).a>=0}function Ban(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&Ban(n.i,t/n.r*n.i.d))}function Han(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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==(512&n.a)?new ay:new $f,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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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;i<e;r=r+1&c,++i)uQ(t,i,n.a[r])}function Con(n,t){var e;e=i7(n.b,n.b.c.length-1),t<n.b.c.length&&(Y8(n.b,t,e),CLn(n,t))}function Ion(n,t){var e;return(e=uG(cQ(n.c,t),466))||((e=new Ek).c=t,vJ(n.c,e.c,e)),e}function Oon(n,t){var e,i;i=new Zm,e=t;do{mv(i.c,e),e=uG(cQ(n.k,e),18)}while(e);return i}function Aon(n,t,e){var i;return gFn(n,t,i=new Zm,e,!0,!0),n.b=new Don(i.c.length),i}function Lon(n,t){var e,i;for(Ntn(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n.hd(i,e[i])}function Non(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)ycn(t=uG(Zkn(e),27),0),Mcn(t,0)}function $on(n){this.e=n,this.d=new Dj(orn(kz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function Don(n){this.b=n,this.a=Inn(YHt,W1n,28,n+1,15,1),this.c=Inn(YHt,W1n,28,n,15,1),this.d=0}function xon(n,t,e){Orn.call(this,t,e),this.d=Inn(pbt,e6n,10,n.a.c.length,0,1),Ekn(n.a,this.d)}function Ron(n,t,e){M6.call(this,n,t,e),this.a=new Ym,this.b=new Ym,this.d=new Zg(this)}function Kon(n){tz.call(this),this.b=uM(pK(oIn(n,(jYn(),dTt)))),this.a=uG(oIn(n,Vyt),223)}function Fon(n,t){var e;return F$(t,16)?(e=uG(t,16),n.Gc(e)):cin(n,uG(WW(t),20).Kc())}function _on(n,t){kS(JJ(new fX(null,new h3(new Lw(n.b),1)),new UO(n,t)),new qO(n,t))}function Bon(n,t){t.Ug(g6n,1),kS(sin(new fX(null,new h3(n.b,16)),new Zt),new ne),t.Vg()}function Hon(n){return RA(n)?pln(n):FA(n)?OL(n):KA(n)?XK(n):Cz(n)?n.Hb():xX(n)?xx(n):OZ(n)}function Uon(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Xb(t=uG(e.Pb(),219),new MV(t.f))}function Gon(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zb(t=uG(e.Pb(),219),new PIn(t.e))}function qon(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.zb))}function Xon(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,e,n.xb))}function zon(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.yb))}function Von(n,t){var e;(e=new Wk).n=t,ttn((!n.s&&(n.s=new fV(o_t,n,21,17)),n.s),e)}function Won(n,t){var e;(e=new PK).n=t,ttn((!n.s&&(n.s=new fV(o_t,n,21,17)),n.s),e)}function Qon(n,t){var e,i,r;for(tJ(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Jon(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?Hon(e):0);return t}function Yon(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Zon(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+oin(n))}function nun(n){return n.a<54?n.f<0?-1:n.f>0?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<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>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"));XHn(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.a<e&&t.b>c&&t.b<i}function Xun(n,t){var e,i;for(i=Fkn(n,0);i.b!=i.d.c;)(e=uG(I6(i),8)).a+=t.a,e.b+=t.b;return n}function zun(n){var t,e;for(e=0,t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),30).p=e,++e}function Vun(n){var t,e,i;return n.j==(KQn(),yRt)&&(e=$x(t=_$n(n),kRt),(i=$x(t,_Rt))||i&&e)}function Wun(n,t){var e;return jNn(new MO((e=ECn(n)).c,e.d),new MO(e.b,e.a),n.Mf(),t,n.ag())}function Qun(n,t){var e;vZ(e=uG(t,190),"x",n.i),vZ(e,"y",n.j),vZ(e,wet,n.g),vZ(e,bet,n.f)}function Jun(n,t){F$(t,85)?(uG(n.c,79).Gk(),hon(n,uG(t,85))):uG(n.c,79).Wb(t)}function Yun(n,t){var e,i;for(tJ(t),i=n.vc().Kc();i.Ob();)e=uG(i.Pb(),44),t.Yd(e.ld(),e.md())}function Zun(n,t){for(WW(t);n.Ob();)if(!shn(uG(n.Pb(),10)))return!1;return!0}function nsn(){var n;return Sut||(Sut=new ik,LN(n=new e9(""),(pS(),Eut)),won(Sut,n)),Sut}function tsn(n,t){return gen(new ld(n),new bd(t),new wd(t),new nn,Uhn(cT(Rut,1),p1n,108,0,[]))}function esn(){esn=E,iOt=new iO(q4n,0),rOt=new iO("POLAR_COORDINATE",1),eOt=new iO("ID",2)}function isn(){isn=E,Zjt=new vI("EQUALLY",0),nEt=new vI(o3n,1),tEt=new vI("NORTH_SOUTH",2)}function rsn(){rsn=E,Oht=new uF("debugSVG",(qx(),!1)),Aht=new uF("overlapsExisted",!0)}function csn(){csn=E,TNt=Abn((lAn(),Uhn(cT(SNt,1),p1n,285,0,[yNt,wNt,mNt,kNt,dNt,gNt,pNt,vNt])))}function asn(){asn=E,SFt=Abn((rDn(),Uhn(cT(PFt,1),p1n,245,0,[jFt,yFt,MFt,kFt,TFt,mFt,pFt,vFt])))}function osn(){osn=E,Kdt=Abn((h_n(),Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt])))}function usn(){return OHn(),Uhn(cT(pPt,1),p1n,262,0,[fPt,rPt,uPt,sPt,oPt,iPt,hPt,tPt,aPt,cPt,ePt])}function ssn(n,t,e){var i,r;return r=uG(W_(n.d,t),17),i=uG(W_(n.b,e),17),r&&i?I7(n,r.a,i.a):null}function hsn(n,t){var e;return!!(e=QBn(aan(),n))&&(Myn(t,(XYn(),yDt),e),!0)}function fsn(n){return VK(),n.A.Hc((Qmn(),VRt))&&!n.B.Hc((oUn(),rKt))?xmn(n):null}function lsn(){this.a=uG(Jkn((cGn(),Tft)),17).a,this.c=uM(pK(Jkn(_ft))),this.b=uM(pK(Jkn(xft)))}function bsn(n){this.f=n,this.e=new a8(this.f.i),this.a=this.e,this.b=Phn(this),this.d=this.f.g}function wsn(n,t){_G.call(this,dBt,n,t),this.b=this,this.a=VKn(n.Dh(),ern(this.e.Dh(),this.c))}function dsn(n,t){var e,i;for(i=new Ww(t.b);i.a<i.c.c.length;)e=uG(N3(i),30),n.a[e.p]=OIn(e)}function gsn(n,t){var e;for(e=0;e<t.j.c.length;e++)uG(xen(n,e),21).Gc(uG(xen(t,e),16));return n}function psn(n,t,e,i){var r;e>(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 t<n.b.gc()?uG(n.b.Xb(t),10):t==n.b.gc()?n.a:uG(zq(n.e,t-n.b.gc()-1),10)}function ksn(n,t,e){return ugn(bD($kn(n),new MO(t.e.a,t.e.b)),bD($kn(n),new MO(e.e.a,e.e.b)))}function ysn(n,t,e){return n==(ean(),HEt)?new Cc:0!=uRn(t,1)?new rj(e.length):new ij(e.length)}function Msn(n,t){var e,i,r;if(null!=(e=n.th())&&n.wh())for(i=0,r=e.length;i<r;++i)e[i].dj(t)}function Tsn(n,t){var e,i,r;for(e=n.c.Xe(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Yd(e,i);return n.b.Kb(e)}function jsn(n,t){var e,i;for(i=HQ(e=n).e;i;){if((e=i)==t)return!0;i=HQ(e).e}return!1}function Esn(n){var t;return 0==(t=n.h)?n.l+n.m*w0n:t==l0n?n.l+n.m*w0n-d0n:n}function Ssn(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function Psn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),72),kD(n.d,e),TIn(n,e)}function Csn(n,t){t.Ug("Edge and layer constraint edge reversal",1),cQn(pBn(n)),t.Vg()}function Isn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)kN(e=uG(Zkn(i),27),e.i+t.b,e.j+t.d)}function Osn(n){var t;null==n.d?(++n.e,n.f=0,Mwn(null)):(++n.e,t=n.d,n.d=null,n.f=0,Mwn(t))}function Asn(n){var t;if(n.a==n.b.a)throw hv(new Bv);return t=n.a,n.c=t,n.a=uG(nJ(n.a.e),227),t}function Lsn(n,t){var e;return 0!=(n.Db&t)?-1==(e=jTn(n,t))?n.Eb:Kcn(n.Eb)[e]:null}function Nsn(n,t){var e;return(e=new Kl).G=t,!n.rb&&(n.rb=new vV(n,s_t,n)),ttn(n.rb,e),e}function $sn(n,t){var e;return(e=new Gv).G=t,!n.rb&&(n.rb=new vV(n,s_t,n)),ttn(n.rb,e),e}function Dsn(n,t,e,i){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,e),t&&INn(n,t),i&&n.gl(!0)}function xsn(n,t){n.c&&(vHn(n,t,!0),kS(new fX(null,new h3(t,16)),new Xg(n))),vHn(n,t,!1)}function Rsn(n){var t;return n$(),DP(vSt,n)||((t=new ca).a=n,yF(vSt,n,t)),uG(AJ(vSt,n),645)}function Ksn(n){var t;if(n.g>1||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<n&&n<d0n?n<0?e.Math.ceil(n):e.Math.floor(n):Esn(oKn(n))}function Hsn(n){var t;return n<128?(rX(),!(t=sot[n])&&(t=sot[n]=new xw(n)),t):new xw(n)}function Usn(n,t){var e;try{t.de()}catch(i){if(!F$(i=Ehn(i),82))throw hv(i);e=i,mv(n.c,e)}}function Gsn(n){var t,e,i;return e=0,(i=n)<0&&(i+=d0n,e=l0n),t=t0(i/w0n),p$(t0(i-t*w0n),t,e)}function qsn(n){var t,e,i;for(i=0,e=new fS(n.a);e.a<e.c.a.length;)t=X5(e),n.b.Hc(t)&&++i;return i}function Xsn(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:Hon(e)));return t}function zsn(n,t){var e;return t?((e=t.nf()).dc()||(n.q?xun(n.q,e):n.q=new nL(e)),n):n}function Vsn(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(CF(n.a,t),--n.c,++n.b.g),e}function Wsn(n,t){var e;return 0==(e=t.p-n.p)?ugn(n.f.a*n.f.b,t.f.a*t.f.b):e}function Qsn(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(KQn(),yRt)?n.p-t.p:t.p-n.p}function Jsn(n,t,e,i,r){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i),uQ(n.b[t.g],e.g,r),uQ(n.b[e.g],t.g,r)}function Ysn(n,t,e){this.b=(tJ(n),n),this.d=(tJ(t),t),this.e=(tJ(e),e),this.c=this.d+""+this.e}function Zsn(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(PP(),uG(n,69).xk()),this.k=VKn(t.e.Dh(),n)}function nhn(n){this.n=new Zm,this.e=new lS,this.j=new lS,this.k=new Zm,this.f=new Zm,this.p=n}function thn(n){n.r=new ek,n.w=new ek,n.t=new Zm,n.i=new Zm,n.d=new ek,n.a=new cN,n.c=new Ym}function ehn(){ehn=E,pht=new uC("UP",0),wht=new uC(c3n,1),dht=new uC(z2n,2),ght=new uC(V2n,3)}function ihn(){ihn=E,fpt=new oI("ONE_SIDED",0),lpt=new oI("TWO_SIDED",1),hpt=new oI("OFF",2)}function rhn(){rhn=E,OAt=new sO("EQUAL_BETWEEN_STRUCTURES",0),AAt=new sO("TO_ASPECT_RATIO",1)}function chn(){chn=E,ojt=Abn((MKn(),Uhn(cT(fjt,1),p1n,265,0,[rjt,tjt,ejt,YTt,njt,cjt,ijt,JTt,ZTt])))}function ahn(){ahn=E,hKt=Abn((oUn(),Uhn(cT(wKt,1),p1n,264,0,[eKt,rKt,tKt,cKt,aKt,uKt,oKt,iKt,nKt])))}function ohn(){ohn=E,Qxt=Abn((VDn(),Uhn(cT(eRt,1),p1n,95,0,[Bxt,_xt,Uxt,Vxt,zxt,Xxt,Gxt,qxt,Hxt])))}function uhn(){uhn=E,kst=Abn((W_n(),Uhn(cT(yst,1),p1n,257,0,[pst,lst,bst,fst,dst,gst,wst,hst,sst])))}function shn(n){var t;return t=uG(oIn(n,(GYn(),Fpt)),64),n.k==(zIn(),lbt)&&(t==(KQn(),_Rt)||t==kRt)}function hhn(n,t,e){var i,r;(r=uG(oIn(n,(jYn(),bMt)),75))&&(rbn(i=new Uk,0,r),Xun(i,e),Qon(t,i))}function fhn(n,t,e){var i,r,c,a;i=(a=HQ(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function lhn(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function bhn(n){return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:sY(n)}function whn(n){var t;if(n){if((t=n).dc())throw hv(new Bv);return t.Xb(t.gc()-1)}return y2(n.Kc())}function dhn(n){var t;return dwn(n,0)<0&&(n=CG(n)),64-(0!=(t=pz(Dz(n,32)))?GNn(t):GNn(pz(n))+32)}function ghn(){return t9(),Nut?new e9(null):$$n(nsn(),"com.google.common.base.Strings")}function phn(n,t,e,i){return 1==e?(!n.n&&(n.n=new fV(lFt,n,1,7)),Nyn(n.n,t,i)):BIn(n,t,e,i)}function mhn(n,t){var e;return qon(e=new Fs,t),ttn((!n.A&&(n.A=new PD(J_t,n,7)),n.A),e),e}function vhn(n,t,e){var i,r;return r=p6(t,pet),iSn((i=new QO(n,e)).a,i.b,r),r}function khn(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.Vh())&&F$(t=bEn(n),156)&&(n.a=uG(t,156)),n.a}function yhn(n,t){var e,i;for(tJ(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function Mhn(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 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<e.c.c.length;)(t=uG(N3(e),105)).i&&NOn(t)}function Ehn(n){var t;return F$(n,82)?n:((t=n&&n.__java$exception)||Cv(t=new qbn(n)),t)}function Shn(n){if(F$(n,193))return uG(n,123);if(n)return null;throw hv(new MM(Het))}function Phn(n){return!!n.a.Ob()||n.a==n.e&&(n.a=new Hnn(n.f.f),n.a.Ob())}function Chn(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(udn(t,rwn(n)))return!0;return!1}function Ihn(n,t){return!(!n||!t||n==t)&&hvn(n.d.c,t.d.c+t.d.b)&&hvn(t.d.c,n.d.c+n.d.b)}function Ohn(n,t){var e;return 0!=(e=t.Pc()).length&&(dG(n.c,n.c.length,e),!0)}function Ahn(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=uG(r.Pb(),44),n.yc(i.ld(),i.md(),e);return n}function Lhn(n){var t,e;for(t=new lS,e=Fkn(n.d,0);e.b!=e.d.c;)aq(t,uG(I6(e),65).c);return t}function Nhn(n,t){var e;for(e=new Ww(n.b);e.a<e.c.c.length;)kfn(uG(N3(e),72),(GYn(),Qpt),t)}function $hn(n,t,e){var i,r;for(r=new Ww(n.b);r.a<r.c.c.length;)kN(i=uG(N3(r),27),i.i+t,i.j+e)}function Dhn(n,t){if(!n)throw hv(new vM(LBn("value already present: %s",Uhn(cT(dat,1),EZn,1,5,[t]))))}function xhn(n,t,i,r,c){return l_n(),e.Math.min(uWn(n,t,i,r,c),uWn(i,r,n,t,BR(new MO(c.a,c.b))))}function Rhn(n,t,e,i){uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),uG(i.b,68),Prn(i.a,new NU(n,t,i))}function Khn(n,t){n.d==(xdn(),JDt)||n.d==nxt?uG(t.a,60).c.Fc(uG(t.b,60)):uG(t.b,60).c.Fc(uG(t.a,60))}function Fhn(n,t){var e;return e=iR(t.a.gc()),kS(krn(new fX(null,new h3(t,1)),n.i),new yO(n,e)),e}function _hn(n){var t;return qon(t=new Fs,"T"),ttn((!n.d&&(n.d=new PD(J_t,n,11)),n.d),t),t}function Bhn(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.Vi(e))?0:Hon(i));return t}function Hhn(n,t,e,i){var r;return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),r=n.a[t][e],uQ(n.a[t],e,i),r}function Uhn(n,t,e,i,r){return r.Rm=n,r.Sm=t,r.Tm=j,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Ghn(){Ghn=E,zwt=new IC(q4n,0),qwt=new IC(M6n,1),Xwt=new IC(T6n,2),Gwt=new IC("BOTH",3)}function qhn(){qhn=E,odt=new XC(G2n,0),udt=new XC(z2n,1),sdt=new XC(V2n,2),hdt=new XC("TOP",3)}function Xhn(){Xhn=E,Flt=new jC("Q1",0),Hlt=new jC("Q4",1),_lt=new jC("Q2",2),Blt=new jC("Q3",3)}function zhn(){zhn=E,kEt=new TI("OFF",0),yEt=new TI("SINGLE_EDGE",1),vEt=new TI("MULTI_EDGE",2)}function Vhn(){Vhn=E,VLt=new wO("MINIMUM_SPANNING_TREE",0),zLt=new wO("MAXIMUM_SPANNING_TREE",1)}function Whn(){Whn=E,new Cm("org.eclipse.elk.addLayoutConfig"),ZLt=new ru,YLt=new iu,new cu}function Qhn(n){var t;return gj(),t=new is,n&&ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),t),t}function Jhn(n){var t,e;for(e=new Zm,t=n.Kc();t.Ob();)Ohn(e,GFn(uG(t.Pb(),27)));return e}function Yhn(n,t){var e,i;for(bZ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Zhn(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=S3(i,Nz(1,e));return i}function nfn(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?uG(zq(e.a,i+1),10):null}function tfn(n){var t,e,i;for(hZ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?Hon(t):0,i|=0;return i}function efn(n){var t,e;return e=(t=uG(n.e&&n.e(),9)).slice(),new nB(t,uG(Ltn(e,t),9),t.length)}function ifn(n,t,e){var i;$V(n.a),Prn(e.i,new Bp(n)),Wvn(n,i=new C$(uG(cQ(n.a,t.b),68)),t),e.f=i}function rfn(n){var t;pqn(n,!0),t=$1n,vR(n,(jYn(),aTt))&&(t+=uG(oIn(n,aTt),17).a),kfn(n,aTt,xwn(t))}function cfn(n){var t;return(t=new y).a=n,t.b=Qfn(n),t.c=Inn($ot,zZn,2,2,6,1),t.c[0]=Zon(n),t.c[1]=Zon(n),t}function afn(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new gY(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ofn(n,t){return!(!n||!t||n==t)&&Fgn(n.b.c,t.b.c+t.b.b)<0&&Fgn(t.b.c,n.b.c+n.b.b)<0}function ufn(n){switch(n.g){case 1:return Dxt;case 2:return $xt;case 3:return xxt;default:return Rxt}}function sfn(n){switch(uG(oIn(n,(jYn(),gMt)),171).g){case 2:case 4:return!0;default:return!1}}function hfn(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function ffn(n,t){if(0===t)return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),void n.o.c.$b();oAn(n,t)}function lfn(n,t){return OGn(uG(uG(cQ(n.g,t.a),42).a,68),uG(uG(cQ(n.g,t.b),42).a,68))}function bfn(n,t,e){var i;if(t>(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;0==(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<i-1;r++)e|=tvn(n,t,r,r+1);return e}function jfn(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Hfn(n,t=e[i],(KQn(),KRt)),Hfn(n,t,yRt)}function Efn(){Efn=E,spt=Abn((r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])))}function Sfn(){Sfn=E,Rjt=Abn((THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])))}function Pfn(){Pfn=E,kgt=new tI(q4n,0),vgt=new tI("INCOMING_ONLY",1),ygt=new tI("OUTGOING_ONLY",2)}function Cfn(){Cfn=E,Wat={boolean:uS,number:hM,string:fM,object:wLn,function:wLn,undefined:lv}}function Ifn(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function Ofn(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Rd().gc()|0,this.a=this.d%this.c.c.Rd().gc()}function Afn(n,t){this.b=n,vL.call(this,(uG(zrn(gZ((tQ(),M_t).o),10),19),t.i),t.g),this.a=(Oun(),Q_t)}function Lfn(n,t,i){this.q=new e.Date,this.q.setFullYear(n+V1n,t,i),this.q.setHours(0,0,0,0),Iqn(this,0)}function Nfn(n,t){vG(n>=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;r<c;++r)e=i[r],a|=n.Fc(e);return a}function xfn(n,t,e){var i,r;return i=new _nn(t,e),r=new B,n.b=FFn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Rfn(n){var t;return null==(t=n.a[n.b])?null:(uQ(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Kfn(n){var t,e;return 32==(e=GNn(n.h))?32==(t=GNn(n.m))?GNn(n.l)+32:t+20-10:e-12}function Ffn(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&F$(t=bEn(n),90)&&(n.c=uG(t,29)),n.c}function _fn(n){var t,e;for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),60)).d.c=-t.d.c-t.d.b;hKn(n)}function Bfn(n){var t,e;for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),86)).g.c=-t.g.c-t.g.b;fKn(n)}function Hfn(n,t,e){var i,r,c;for(c=0,r=Vwn(t,e).Kc();r.Ob();)i=uG(r.Pb(),12),vJ(n.c,i,xwn(c++))}function Ufn(n,t,e){var i;return gFn(n,t,i=new Zm,(KQn(),kRt),!0,!1),gFn(n,e,i,_Rt,!1,!1),i}function Gfn(n){var t,e,i,r,c;for(t=new sj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function qfn(n,t,e){var i,r;return r=p6(t,"labels"),_Dn((i=new aA(n,e)).a,i.b,r),r}function Xfn(n,t,e,i){var r;return(r=hxn(n,t,e,i))||!(r=Odn(n,e,i))||iVn(n,t,r)?r:null}function zfn(n,t,e,i){var r;return(r=fxn(n,t,e,i))||!(r=Adn(n,e,i))||iVn(n,t,r)?r:null}function Vfn(n,t,e){if(WW(t),e.Ob())for(YA(t,KQ(e.Pb()));e.Ob();)YA(t,n.a),YA(t,KQ(e.Pb()));return t}function Wfn(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!uG(Vq(n.a,e),178).Lb(t))return!1;return!0}function Qfn(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+oin(n))}function Jfn(n){var t;return!(n.b<=0)&&((t=xL("MLydhHmsSDkK",$Cn(VJ(n.c,0))))>1||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.a<t.c.c.length;)uG(N3(t),86).f.$b();Zy(n.b,n),LKn(n)}function fln(n){var t,e;for(t=new Uk,e=Fkn(n,0);e.b!=e.d.c;)sR(t,0,new eN(uG(I6(e),8)));return t}function lln(n){var t;return GQ(n),t=new un,n.a.Bd(t)?(UD(),new Xy(tJ(t.a))):(UD(),UD(),sut)}function bln(n,t,e){if(0===t)return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),void Jun(n.o,e);sLn(n,t,e)}function wln(n,t,e){this.g=n,this.e=new sj,this.f=new sj,this.d=new lS,this.b=new lS,this.a=t,this.c=e}function dln(n,t,e,i){this.b=new Zm,this.n=new Zm,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function gln(n,t){if(!n.Li()&&null==t)throw hv(new vM("The 'no null' constraint is violated"));return t}function pln(n){var t,e;for(t=0,e=0;e<n.length;e++)t=(t<<5)-t+(s3(e,n.length),n.charCodeAt(e))|0;return t}function mln(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.Ne(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function vln(n,t,e){var i,r;qx(),i=!!IL(e),(r=uG(t.xc(i),15))||(r=new Zm,t.zc(i,r)),r.Fc(e)}function kln(n,t){var e,i;return(e=uG(zDn(n,(S_n(),JOt)),17).a)==(i=uG(zDn(t,JOt),17).a)||e<i?-1:e>i?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<c;++r)e=i[r],a=new lQ(n),e.hf(a),zqn(a);$V(n.f)}function Aln(n,t){var e;return t===n||!!F$(t,229)&&(e=uG(t,229),udn(n.Zb(),e.Zb()))}function Lln(n,t){return!!rKn(n,t)&&(UNn(n.b,uG(oIn(t,(GYn(),xpt)),21),t),aq(n.a,t),!0)}function Nln(n){var t,e;(t=uG(oIn(n,(GYn(),lmt)),10))&&(men((e=t.c).a,t),0==e.a.c.length&&men(HQ(t).b,e))}function $ln(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?uG(oIn(t,imt),17).a-uG(oIn(n,imt),17).a:0}function Dln(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?uG(oIn(n,imt),17).a-uG(oIn(t,imt),17).a:0}function xln(n){return Nut?Inn(Put,i2n,581,0,0,1):uG(Ekn(n.a,Inn(Put,i2n,581,n.a.c.length,0,1)),856)}function Rln(n,t,e,i){return TJ(),new Ry(Uhn(cT(Sat,1),c1n,44,0,[(IMn(n,t),new FE(n,t)),(IMn(e,i),new FE(e,i))]))}function Kln(n,t,e){var i;return san(i=new Yk,t,e),ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),i),i}function Fln(n){var t,e,i,r;for(e=(r=LP(YKt,n)).length,i=Inn($ot,zZn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function _ln(n,t){var e;2*t+1>=n.b.c.length||(_ln(n,2*t+1),(e=2*t+2)<n.b.c.length&&_ln(n,e),CLn(n,t))}function Bln(n,t){var e,i;for(i=Fkn(n,0);i.b!=i.d.c;)(e=uG(I6(i),219)).e.length>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(0!=(256&n.f),n.i,n.a,n.d,0!=(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;e<n.a.length;)n.a[e]-=i,e+=e&-e}function lbn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.aj(n.i),qGn(t,0,n.g,0,n.i))}function bbn(n,t,e){if(t<0)throw hv(new dM(Nnt+t));t<n.j.c.length?Y8(n.j,t,e):(p5(n,t),kD(n.j,e))}function wbn(n){if(!n.a||0==(8&n.a.i))throw hv(new kM("Enumeration class expected for layout option "+n.f))}function dbn(n){var t;return!n.a&&(n.a=new fV(d_t,n,9,5)),0!=(t=n.a).i?bP(uG(zrn(t,0),694)):null}function gbn(n){var t;for(WW(n),CB(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&hDn(n);t++)N9(n);return t}function pbn(){pbn=E,BS(),Hht=new mL(I3n,Uht=Kht),Bht=new Cm(O3n),Ght=new Cm(A3n),qht=new Cm(L3n)}function mbn(){mbn=E,xCt=new QI(X4n,0),$Ct=new QI(Q9n,1),DCt=new QI("FAN",2),NCt=new QI("CONSTRAINT",3)}function vbn(){vbn=E,sIt=new tO(q4n,0),hIt=new tO("RADIAL_COMPACTION",1),fIt=new tO("WEDGE_COMPACTION",2)}function kbn(){kbn=E,sEt=new yI("CONSERVATIVE",0),hEt=new yI("CONSERVATIVE_SOFT",1),fEt=new yI("SLOPPY",2)}function ybn(){ybn=E,Cut=new XP("CONCURRENT",0),Iut=new XP("IDENTITY_FINISH",1),Out=new XP("UNORDERED",2)}function Mbn(){Mbn=E,Nlt=g0(Uhn(cT(axt,1),p1n,88,0,[(xdn(),JDt),YDt])),$lt=g0(Uhn(cT(axt,1),p1n,88,0,[nxt,QDt]))}function Tbn(n){return RA(n)?$ot:FA(n)?fot:KA(n)?cot:Cz(n)||xX(n)?n.Rm:n.Rm||Array.isArray(n)&&cT(Kat,1)||Kat}function jbn(n){return n?0!=(1&n.i)?n==ZHt?cot:n==YHt?dot:n==iUt?lot:n==eUt?fot:n==nUt?yot:n==rUt?Tot:n==tUt?uot:hot:n:null}function Ebn(n){return n.c==n.b.b&&n.i==n.g.b||(Xv(n.a.c,0),Ohn(n.a,n.b),Ohn(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function Sbn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,uQ(n.a,t,n.a[i]),t=i;uQ(n.a,n.b,null),n.b=n.b+1&e}function Pbn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,uQ(n.a,t,n.a[i]),t=i;uQ(n.a,n.c,null)}function Cbn(n,t,e){var i;return o3(t,n.c.length),0!=(i=e.Pc()).length&&(dG(n.c,t,i),!0)}function Ibn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.Be(t,i.ld()))return i;return null}function Obn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?Hon(t):0),c|=0;return c}function Abn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function Lbn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!OG(n[t]))return n[t];return null}function Nbn(n,t){return n?t&&!n.j||F$(n,127)&&0==uG(n,127).a.b?0:n.jf():0}function $bn(n,t){return n?t&&!n.k||F$(n,127)&&0==uG(n,127).a.a?0:n.kf():0}function Dbn(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a):0}function xbn(n){var t,e,i;for(i=0,e=new Fz(ix(n.a.Kc(),new h));hDn(e);)(t=uG(N9(e),18)).c.i==t.d.i||++i;return i}function Rbn(n,t){var e,i,r;for(r=t-n.f,i=new Ww(n.d);i.a<i.c.c.length;)Xmn(e=uG(N3(i),315),e.e,e.f+r);n.f=t}function Kbn(n,t){var e,i;e=n.Yk(t,null),i=null,t&&(vj(),Urn(i=new ev,n.r)),(e=CCn(n,i,e))&&e.oj()}function Fbn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw hv(new Dv);e=HQ(i),++r}}function _bn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Uxn(uG(t.Pb(),567),n.e,n.f),kD(n.g,e)}function Bbn(n){var t;return t=new Jin(n),O4(n.a,Wlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[t]))),t.d&&kD(t.f,t.d),t.f}function Hbn(n,t){var e;for(e=0;e<t.length;e++)if(n==(s3(e,t.length),t.charCodeAt(e)))return!0;return!1}function Ubn(n,t){return t<n.length&&(s3(t,n.length),63!=n.charCodeAt(t))&&(s3(t,n.length),35!=n.charCodeAt(t))}function Gbn(n,t,e,i){A$(this),this.c=Inn(pbt,e6n,10,n.a.c.length,0,1),this.e=t,Ekn(n.a,this.c),this.f=e,this.b=i}function qbn(n){Uy(),LD(this),KY(this),this.e=n,yFn(this,n),this.g=null==n?IZn:cpn(n),this.a="",this.b=n,this.a=""}function Xbn(){this.a=new Jo,this.f=new $p(this),this.b=new Dp(this),this.i=new xp(this),this.e=new Rp(this)}function zbn(){Cy.call(this,new Bnn(orn(16))),man(2,XZn),this.b=2,this.a=new lJ(null,null,0,null),Tv(this.a,this.a)}function Vbn(n){throw Cfn(),hv(new Fy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function Wbn(n,t,i){return e.Math.abs(t-n)<R9n||e.Math.abs(i-n)<R9n||(t-n>R9n?n-i>R9n:i-n>R9n)}function Qbn(n,t){var e;for(e=0;e<t.length;e++)if(n==(s3(e,t.length),t.charCodeAt(e)))return!0;return!1}function Jbn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!OG(n[t]))return!1;return!0}function Ybn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=cKn(t.q,n.b),t.q.d>r&&(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),ZXn(),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.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function awn(n){var t;if(!(n.c.c<0?n.a>=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<t.c.c.length;)Qon(e,f_n(uG(N3(t),27)));return e}function fwn(n){var t,e;for(e=new Ww(n.r);e.a<e.c.c.length;)if(t=uG(N3(e),10),n.n[t.p]<=0)return t;return null}function lwn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(NZ(n,uG(i.Pb(),60),e))return!0;return!1}function bwn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),72)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function wwn(n,t,e){var i;i=new v$n(n,t),UNn(n.r,t.ag(),i),e&&!cV(n.u)&&(i.c=new a0(n.d),Prn(t.Rf(),new Ld(i)))}function dwn(n,t){var e;return _L(n)&&_L(t)&&(e=n-t,!isNaN(e))?e:yEn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t)}function gwn(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 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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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<n.length;++e)if(t=n[e])for(uG(t.g,379),r=t.i,i=0;i<r;++i);}function Twn(n,t,e,i,r,c,a,o){var u;for(u=e;c<a;)u>=i||t<e&&o.Ne(n[t],n[u])<=0?uQ(r,c++,n[t++]):uQ(r,c++,n[u++])}function jwn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=tMn(r,e,i,n[0]):1==i?r[t]=tMn(r,n,t,e[0]):G$n(n,e,r,t,i))}function Ewn(n,t,e){var i,r,c,a;for(i=e/n.gc(),r=0,a=n.Kc();a.Ob();)Rbn(c=uG(a.Pb(),186),c.f+i*r),qEn(c,t,i),++r}function Swn(n){var t,i,r;for(r=0,i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),172),r=e.Math.max(r,t.g);return r}function Pwn(n){var t,e,i;for(i=new Ww(n.b);i.a<i.c.c.length;)(t=(e=uG(N3(i),219)).c.kg()?e.f:e.a)&&wzn(t,e.j)}function Cwn(){Cwn=E,ujt=new lI("DUMMY_NODE_OVER",0),sjt=new lI("DUMMY_NODE_UNDER",1),hjt=new lI("EQUAL",2)}function Iwn(){Iwn=E,lKt=new _O("PARALLEL_NODE",0),fKt=new _O("HIERARCHICAL_NODE",1),bKt=new _O("ROOT_NODE",2)}function Own(){Own=E,Oxt=new AO("INHERIT",0),Ixt=new AO("INCLUDE_CHILDREN",1),Axt=new AO("SEPARATE_CHILDREN",2)}function Awn(n,t){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),void Czn(n.n);case 2:return void Gan(n,null)}ffn(n,t)}function Lwn(n){switch(n.g){case 0:return new Xo;case 1:return new Vo;case 2:return new zo;default:return null}}function Nwn(n){switch(sB(),n.c){case 0:return nQ(),Nat;case 1:return new KM(ULn(new fS(n)));default:return new Ay(n)}}function $wn(n){switch(sB(),n.gc()){case 0:return nQ(),Nat;case 1:return new KM(n.Kc().Pb());default:return new RP(n)}}function Dwn(n){switch(n.gc()){case 0:return jat;case 1:return new Uq(WW(n.Xb(0)));default:return new t1(n)}}function xwn(n){var t,e;return n>-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 0!=(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,0!=(4&n.Db)&&0==(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,0!=(4&n.Db)&&0==(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 0!=(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<r;++i)if(-1!=Ten((t=e[i]).a,n,0))return t;return sht}function wdn(n,t){var e,i,r;if(t.ej(n.a),null!=(r=uG(Lsn(n.a,8),2035)))for(e=0,i=r.length;e<i;++e)null.Um()}function ddn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,2,e,t))}function gdn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,8,e,t))}function pdn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,8,e,t))}function mdn(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,3,e,t))}function vdn(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,9,e,t))}function kdn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,5,r,n.a),e?kPn(e,i):e=i),e}function ydn(n,t){var e;return-1==n.b&&n.a&&(e=n.a.pk(),n.b=e?n.c.Hh(n.a.Lj(),e):emn(n.c.Dh(),n.a)),n.c.yh(n.b,t)}function Mdn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),29),xA(t)===xA(e))return!0;return!1}function Tdn(n){var t;return n.k==(zIn(),lbt)&&((t=uG(oIn(n,(GYn(),Fpt)),64))==(KQn(),yRt)||t==KRt)}function jdn(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(NP(t.a,0)?c7(t)/W4(t.a):0))}function Edn(n,t){this.e=t,this.a=dhn(n),this.a<54?this.f=W4(n):this.c=(cHn(),dwn(n,0)>=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(JXn(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(JXn(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=0!=(n.Bb&w1n),t?n.Bb|=w1n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,10,e,t))}function Qdn(n,t){var e;e=0!=(n.Bb&j0n),t?n.Bb|=j0n:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,12,e,t))}function Jdn(n,t){var e;e=0!=(n.Bb&hrt),t?n.Bb|=hrt:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,15,e,t))}function Ydn(n,t){var e;e=0!=(n.Bb&frt),t?n.Bb|=frt:n.Bb&=-2049,0!=(4&n.Db)&&0==(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(qUn(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.a<i.c.c.length;)e=uG(N3(i),602),Ohn(t,uG(e.Cf(),16));return t}function agn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),42),men(n.b.b,e.b),LZ(uG(e.a,194),uG(e.b,86))}function ogn(n,t){var e;return 0!=(e=ugn(n.b.c,t.b.c))||0!=(e=ugn(n.a.a,t.a.a))?e:ugn(n.a.b,t.a.b)}function ugn(n,t){return n<t?-1:n>t?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<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function fgn(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),c=0,e=uG(n.g,124),r=0;r<n.i;++r)i=e[r],a.am(i.Lk())&&++c;return c}function lgn(n,t,e){var i,r;for(r=F$(t,102)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n),i=0;i<e;++i)_yn(r);return r}function bgn(n,t,e){var i;if(n.c)JCn(n.c,t,e);else for(i=new Ww(n.b);i.a<i.c.c.length;)bgn(uG(N3(i),163),t,e)}function wgn(n,t,e){var i,r;return i=uG(t.of(n.a),34),r=uG(e.of(n.a),34),null!=i&&null!=r?Dun(i,r):null!=i?-1:null!=r?1:0}function dgn(n,t){var e,i,r;for(tJ(t),e=!1,i=new Ww(n);i.a<i.c.c.length;)r=N3(i),t.Hc(r)&&(tW(i),e=!0);return e}function ggn(n){var t,e,i,r;return Mon(e=new nB(t=uG(Mj((r=(i=n.Rm).f)==Oat?i:r),9),uG(MF(t,t.length),9),0),n),e}function pgn(n){var t;return(t=uG(oIn(n,(jYn(),Byt)),88))==(xdn(),ZDt)?uM(pK(oIn(n,dyt)))>=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 0!=(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=0!=(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Pgn(n,t){var e;e=0!=(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Cgn(n,t){var e;e=0!=(n.Bb&VZn),t?n.Bb|=VZn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,16,e,t))}function Ign(n,t){var e;e=0!=(n.Bb&P0n),t?n.Bb|=P0n:n.Bb&=-65537,0!=(4&n.Db)&&0==(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<d0n?e:Esn(Mhn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function Ngn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n*t)&&e<d0n?e:Esn(Ozn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function $gn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n-t)&&e<d0n?e:Esn(Thn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function Dgn(n,t){var e;return n.i||qLn(n),(e=uG(AJ(n.g,t),42))?new C2(n.j,uG(e.a,17).a,uG(e.b,17).a):(hZ(),hZ(),zot)}function xgn(n){return Mbn(),qx(),!!(upn(uG(n.a,86).j,uG(n.b,88))||0!=uG(n.a,86).d.e&&upn(uG(n.a,86).j,uG(n.b,88)))}function Rgn(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 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:n<t?-1:n>t?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;t<e;t++)if(null==n[t])throw hv(new MM("at index "+t));return new IM(n)}function Ggn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).b);return WW(t),new iN(t)}function qgn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).e);return WW(t),new iN(t)}function Xgn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).g);return WW(t),new iN(t)}function zgn(n,t){var e,i,r;for(r=new Ym,i=t.vc().Kc();i.Ob();)vJ(r,(e=uG(i.Pb(),44)).ld(),Tsn(n,uG(e.md(),15)));return r}function Vgn(n){var t,e;for(e=TDn(Hrn(K0(n))).Kc();e.Ob();)if(qUn(n,t=mK(e.Pb())))return f8((mP(),b_t),t);return null}function Wgn(n,t){var e,i;for(i=0,e=uG(t.Kb(n),20).Kc();e.Ob();)oM(gK(oIn(uG(e.Pb(),18),(GYn(),pmt))))||++i;return i}function Qgn(n){var t,e,i;for(t=new GF(n.Rd().gc()),i=0,e=jtn(n.Rd().Kc());e.Ob();)M2(t,e.Pb(),xwn(i++));return vOn(t.a)}function Jgn(n,t,e,i){var r,c;return tJ(i),tJ(e),null==(c=null==(r=n.xc(t))?e:IS(uG(r,15),uG(e,16)))?n.Bc(t):n.zc(t,c),c}function Ygn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&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;c<a;++c)i=r[c],Akn(n.c.e,i,t)}function npn(n,t){var e,i;for(e=Fkn(n,0);e.b!=e.d.c;){if((i=sM(pK(I6(e))))==t)return;if(i>t){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<i.c.c.length;)e=uG(N3(i),16),jon(t=new hX,e),FV(this.a,t)}function gpn(n,t){var e,i,r;for(r=(i=qBn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=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;e<i.length;e++)e!=(c=nEn(n,i[e],e))&&zdn(n,e,c)}function mpn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(mfn((s3(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function vpn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(_In(t,(e=uG(i.Pb(),272)).d)||vLn(t,e.d))return!0;return!1}function kpn(n,t,e,i,r){var c,a,o;for(a=r;t.b!=t.c;)c=uG(xV(t),10),o=uG(Dgn(c,i).Xb(0),12),n.d[o.p]=a++,mv(e.c,o);return a}function ypn(n,t){var e,i,r,c,a,o;for(i=0,e=0,a=0,o=(c=t).length;a<o;++a)(r=c[a])>0&&(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();t<e;)VA(i,ox(n.Vi(t))),++t<e&&(i.a+=TZn);return i.a+="]",i.a}function jpn(n){return null==n.e?n:(!n.c&&(n.c=new Z_n(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Epn(n){return n.k==(zIn(),dbt)&&o9(new fX(null,new LW(new Fz(ix(Xgn(n).a.Kc(),new h)))),new qr)}function Spn(n){return F$(n,306)?Z9(uG(n,306)):F$(n,441)?uG(n,441).a:F$(n,59)?new Ly(n):new XE(n)}function Ppn(n){var t;return null==n||(t=n.length)>0&&(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<t.c.c.length;)pJn(n,uG(N3(t),695),e)}function Lpn(n){var t,e;for(null==n.j&&(n.j=(EZ(),lSn(_at.me(n)))),t=0,e=n.j.length;t<e;++t)String.fromCharCode(10)}function Npn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),42),kD(n.b.b,uG(e.b,86)),t4(uG(e.a,194),uG(e.b,86))}function $pn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)GX(r,0,new bQ(n.a));a2(t,uG(zq(r,r.c.length-e),30)),n.b[t.p]=e}function Dpn(n,t,e,i,r){n2(),RKn(xS(DS($S(RS(new uk,0),r.d.e-n),t),r.d)),RKn(xS(DS($S(RS(new uk,0),e-r.a.e),r.a),i))}function xpn(n,t){var e;return n.d?PV(n.b,t)?uG(cQ(n.b,t),47):(e=t.dg(),vJ(n.b,t,e),e):t.dg()}function Rpn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[A1n]))}function Kpn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return _sn(n,t)}function Fpn(n){switch(n.g){case 0:return new Ao;case 1:return new $o;default:throw hv(new vM(v6n+(null!=n.f?n.f:""+n.g)))}}function _pn(n){switch(n.g){case 0:return new Lo;case 1:return new No;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function Bpn(n){switch(n.g){case 1:return new jo;case 2:return new NR;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function Hpn(n){switch(n.g){case 0:return new hy;case 1:return new _k;default:throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}}function Upn(){var n,t,i;aCn(),i=gut+++Date.now(),n=t0(e.Math.floor(i*z0n))&W0n,t=t0(i-n*V0n),this.a=1502^n,this.b=t^X0n}function Gpn(){Gpn=E,Lmt=new hI(q4n,0),Cmt=new hI("FIRST",1),Imt=new hI(M6n,2),Omt=new hI("LAST",3),Amt=new hI(T6n,4)}function qpn(){qpn=E,TKt=new HO(k9n,0),kKt=new HO("GROUP_DEC",1),MKt=new HO("GROUP_MIXED",2),yKt=new HO("GROUP_INC",3)}function Xpn(n,t){var e,i;t&&(e=$cn(t,"x"),Tcn(new dm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new pm(n).a,(tJ(i),i)))}function zpn(n,t){var e,i;t&&(e=$cn(t,"x"),mcn(new vm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new km(n).a,(tJ(i),i)))}function Vpn(n,t){var e,i,r;for(i=new R7(t.gc()),e=t.Kc();e.Ob();)(r=uUn(n,uG(e.Pb(),58)))&&mv(i.c,r);return i}function Wpn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),xA(t)===xA(i)||null!=t&&udn(t,i))return e&&r.Qb(),!0;return!1}function Qpn(n){var t,e,i;return(e=n.jh())?F$(t=n.Eh(),167)&&null!=(i=Qpn(uG(t,167)))?i+"."+e:e:null}function Jpn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&_un(n)==n.d-1&&(--e,e|=0),t-=GNn(e))}function Ypn(n){var t,e,i;return n<Fot.length?Fot[n]:(t=31&n,(i=Inn(YHt,W1n,28,1+(e=n>>5),15,1))[e]=1<<t,new VV(1,e+1,i))}function Zpn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(uG(n.g[e],378).mj(t))return!1;return ttn(n,t)}return!1}function nmn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.qj(t,n.Zi(t,i)),++t;return!0}function tmn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>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<r;++i)if(e[i]==t)return i;return-1}function imn(n){var t,e,i,r;for(e=uG(n.g,689),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(jGn(n,t,e[r])){gjn(n,i);break}}function rmn(n){var t,e,i;for(t=new Ib,i=new Gw(n.b.Kc());i.b.Ob();)e=xOn(uG(i.b.Pb(),701)),wW(t,t.a.length,e);return t.a}function cmn(n){var t;return!n.c&&(n.c=new Ln),f$(n.d,new $n),v_n(n),t=i_n(n),kS(new fX(null,new h3(n.d,16)),new Nd(n)),t}function amn(n,t){t.Ug("End label post-processing",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new ae),new oe),new ue),t.Vg()}function omn(n){lmn(),this.c=n7(Uhn(cT(rNt,1),EZn,845,0,[VTt])),this.b=new Ym,this.a=n,vJ(this.b,WTt,1),Prn(QTt,new Xp(this))}function umn(n,t,e){lcn(),Ak.call(this),this.a=Jq(Pst,[zZn,X2n],[603,217],0,[$st,Nst],2),this.c=new cN,this.g=n,this.f=t,this.d=e}function smn(n,t){this.n=Jq(nUt,[zZn,E0n],[376,28],14,[t,t0(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function hmn(n){Stn(),uG(n.of((XYn(),q$t)),181).Hc((oUn(),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(),39)}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.length<n.i&&(t=Acn(Tbn(t).c,n.i)),qGn(n.g,0,t,0,n.i)),t.length>n.i&&uQ(t,n.i,null),t}function pmn(n){var t;return 0!=(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;e<i;e++)s3(e,n.length),(t=n.charCodeAt(e))<64&&(r=S3(r,Nz(1,t)));return r}function vmn(n,t,e){var i,r;for(i=E3(e,L0n),r=0;0!=dwn(i,0)&&r<t;r++)i=Lgn(i,E3(n[r],L0n)),n[r]=pz(i),i=$z(i,32);return pz(i)}function kmn(n,t){var e,i,r,c;for(c=VKn(n.e.Dh(),t),e=uG(n.g,124),r=0;r<n.i;++r)if(i=e[r],c.am(i.Lk()))return!1;return!0}function ymn(n,t){var e;return n.f>0&&(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((oUn(),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<d0n?e:Esn((Yzn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t,!0),Qat))}function Fmn(n,t){var e;tQn(t),(e=uG(oIn(n,(jYn(),zyt)),283))&&kfn(n,zyt,wjn(e)),Xx(n.c),Xx(n.f),ynn(n.d),ynn(uG(oIn(n,SMt),214))}function _mn(n){var t,e,i;for(f$(e=JAn(n),Cbt),(i=n.d).c.length=0,t=new Ww(e);t.a<t.c.c.length;)Ohn(i,uG(N3(t),465).b)}function Bmn(n){var t;0!=n.c&&(1==(t=uG(zq(n.a,n.b),293)).b?(++n.b,n.b<n.a.c.length&&Pw(uG(zq(n.a,n.b),293))):--t.b,--n.c)}function Hmn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(Xgn(t).a.Kc(),new h))),18).d.i).k==(zIn(),wbt)&&kD(n.e,t)}while(t.k==(zIn(),wbt))}function Umn(n){this.e=Inn(YHt,W1n,28,n.length,15,1),this.c=Inn(ZHt,B2n,28,n.length,16,1),this.b=Inn(ZHt,B2n,28,n.length,16,1),this.f=0}function Gmn(n){var t,e;for(n.j=Inn(eUt,I0n,28,n.p.c.length,15,1),e=new Ww(n.p);e.a<e.c.c.length;)t=uG(N3(e),10),n.j[t.p]=t.o.b/n.i}function qmn(n,t){var e,i,r;for(r=t.b.b,n.a=new lS,n.b=Inn(YHt,W1n,28,r,15,1),e=0,i=Fkn(t.b,0);i.b!=i.d.c;)uG(I6(i),39).g=e++}function Xmn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Ww(n.a);r.a<r.c.c.length;)oMn(i=uG(N3(r),172),i.s+c,i.t+a);n.e=t,n.f=e}function zmn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)HFn(n,(s3(e,t.length),t.charCodeAt(e)),(s3(e+1,t.length),t.charCodeAt(e+1)))}function Vmn(n,t){t.Ug("Min Size Postprocessing",1),Myn(n,(lBn(),POt),e.Math.max(uM(pK(zDn(n,POt))),uM(pK(zDn(n,EOt))))),t.Vg()}function Wmn(){Wmn=E,qRt=new CN(15),GRt=new _N((XYn(),W$t),qRt),zRt=new _N(DDt,15),XRt=new _N(kDt,xwn(0)),URt=new _N(c$t,r4n)}function Qmn(){Qmn=E,QRt=new KO("PORTS",0),JRt=new KO("PORT_LABELS",1),WRt=new KO("NODE_LABELS",2),VRt=new KO("MINIMUM_SIZE",3)}function Jmn(){Jmn=E,oOt=new rO("P1_WIDTH_APPROXIMATION",0),uOt=new rO("P2_PACKING",1),sOt=new rO("P3_WHITESPACE_ELIMINATION",2)}function Ymn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!uG(n.b,54).Jh())return!0;return n.b=null,!1}return!0}function Zmn(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[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<c.c.c.length;)r[uG(N3(c),113).d.p]&&++i;return i}function ivn(n,t,e){var i,r;i=uG(U1(jHt,t),122),r=uG(U1(EHt,t),122),e?(r2(jHt,n,i),r2(EHt,n,r)):(r2(EHt,n,i),r2(jHt,n,r))}function rvn(n,t){var e,i,r,c;return e=t>>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:n<t?-1:n>t?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:n<t?-1:n>t?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:n<t?-1:n>t?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++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function lvn(n){var t,e;return null!=(t=uG(Lsn(n.a,4),129))?(qGn(t,0,e=Inn(xFt,Uit,424,t.length,0,1),0,t.length),e):DFt}function bvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function wvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function dvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function gvn(n,t){var e,i,r;if(n.c)vcn(n.c,t);else for(e=t-jX(n),r=new Ww(n.a);r.a<r.c.c.length;)gvn(i=uG(N3(r),163),jX(i)+e)}function pvn(n,t){var e,i,r;if(n.c)kcn(n.c,t);else for(e=t-EX(n),r=new Ww(n.d);r.a<r.c.c.length;)pvn(i=uG(N3(r),163),EX(i)+e)}function mvn(n,t,i){var r,c,a,o;for(Knn(t,a=t+i,n.length),o="",c=t;c<a;)r=e.Math.min(c+1e4,a),o+=mJ(n.slice(c,r)),c=r;return o}function vvn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function kvn(){kvn=E,sgt=new ZC(x6n,0),ugt=new ZC(R6n,1),fgt=new ZC(D6n,2),lgt=new ZC(X4n,3),hgt=new ZC("GREEDY_MODEL_ORDER",4)}function yvn(){yvn=E,Fjt=new gI(q4n,0),Kjt=new gI("NODES_AND_EDGES",1),_jt=new gI("PREFER_EDGES",2),Bjt=new gI("PREFER_NODES",3)}function Mvn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&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(),kzn(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.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Hln(n.a,t.a,n.d)}function Cvn(n){return n>=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),294).Rg(n):PV(AFt,Tbn(n))?uG(cQ(AFt,Tbn(n)),294).Rg(n):null}function $vn(n){var t;return 0==(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;0!=(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.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.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;i<n.length&&(s3(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function Xvn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function zvn(n,t,e,i){uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68).c.b,Rnn(i,t,n)}function Vvn(n){var t,e;for(t=new Ww(n.g);t.a<t.c.c.length;)uG(N3(t),568);hQn(e=new bFn(n.g,uM(n.a),n.c)),n.g=e.b,n.d=e.a}function Wvn(n,t,e){var i,r,c;for(c=new Ww(e.a);c.a<c.c.c.length;)r=uG(N3(c),225),i=new C$(uG(cQ(n.a,r.b),68)),kD(t.a,i),Wvn(n,i,r)}function Qvn(n,t,e){var i,r;return((r=(i=uG(zrn(Aen(n.a),t),89)).c||(YYn(),N_t)).Vh()?mwn(n.b,uG(r,54)):r)==e?MGn(i):Urn(i,e),r}function Jvn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function Yvn(n,t,e){this.c=n,this.f=new Zm,this.e=new sj,this.j=new cX,this.n=new cX,this.b=t,this.g=new gY(t.c,t.d,t.b,t.a),this.a=e}function Zvn(n){var t,e,i,r;for(this.a=new XL,this.d=new ek,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),t4(this,t)}function nkn(n){cHn(),0==n.length?(this.e=0,this.d=1,this.a=Uhn(cT(YHt,1),W1n,28,15,[0])):(this.e=1,this.d=n.length,this.a=n,K4(this))}function tkn(n,t,e){Ak.call(this),this.a=Inn(Pst,X2n,217,(Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length,0,1),this.b=n,this.d=t,this.c=e}function ekn(n){var t,e,i,r;for(kfn(r=uG(oIn(n,(GYn(),rmt)),12),Mmt,n.i.n.b),e=0,i=(t=x4(n.e)).length;e<i;++e)u2(t[e],r)}function ikn(n){var t,e,i,r;for(kfn(t=uG(oIn(n,(GYn(),rmt)),12),Mmt,n.i.n.b),i=0,r=(e=x4(n.g)).length;i<r;++i)c2(e[i],t)}function rkn(n,t){var e,i;for(e2(),i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)if((e=uG(N9(i),18)).d.i==t||e.c.i==t)return e;return null}function ckn(n,t){var e,i;return(e=t.qi(n.a))&&null!=(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Bet)))?i:t.xe()}function akn(n,t){var e,i;return(e=t.qi(n.a))&&null!=(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Bet)))?i:t.xe()}function okn(n,t){var e,i;return 0!=(e=d$(n.a.c.p,t.a.c.p))?e:0!=(i=d$(n.a.d.i.p,t.a.d.i.p))?i:d$(t.a.d.p,n.a.d.p)}function ukn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)F$(e=t.Tl(i),102)&&0!=(uG(e,19).Bb&Qtt)&&null!=(c=t.Ul(i))&&uUn(n,uG(c,58))}function skn(n,t){var e,i,r;if(kD(aft,n),t.Fc(n),e=uG(cQ(cft,n),21))for(r=e.Kc();r.Ob();)i=uG(r.Pb(),27),-1!=Ten(aft,i,0)||skn(i,t)}function hkn(n,t,e){var i,r;QCn(n.e,t,e,(KQn(),_Rt)),QCn(n.i,t,e,kRt),n.a&&(r=uG(oIn(t,(GYn(),rmt)),12),i=uG(oIn(e,rmt),12),Z3(n.g,r,i))}function fkn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new RZ(n,t),e&&(n.a[i][c]=new zg(t),(r=uG(oIn(t,(GYn(),zpt)),10))&&UNn(n.d,r,t))}function lkn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:ugn(i,r))}function bkn(){var n;return 0!=Uat&&(n=Date.now())-Gat>2e3&&(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):TQn(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;t<r&&!mfn((s3(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Ekn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=aT(new Array(i),t)),e=0;e<i;++e)uQ(t,e,n.c[e]);return t.length>i&&uQ(t,i,null),t}function Skn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=aT(new Array(i),t)),e=0;e<i;++e)uQ(t,e,n.a[e]);return t.length>i&&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<i.c.c.length;)Okn(n,hpn(uG(N3(i),218),t),e)}function Akn(n,t,e){var i,r,c;return(r=uG(cQ(n.e,t),400))?(c=wF(r,e),nD(n,r),c):(i=new bG(n,t,e),vJ(n.e,t,i),B1(i),null)}function Lkn(n,t,e,i){var r;return r=new Ken(n.e,1,13,t.c||(YYn(),N_t),e.c||(YYn(),N_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function Nkn(){return JYn(),Uhn(cT(mht,1),p1n,164,0,[oht,aht,uht,Yst,Jst,Zst,eht,tht,nht,cht,rht,iht,Wst,Vst,Qst,Xst,qst,zst,Ust,Hst,Gst,sht])}function $kn(n){switch(n.g){case 4:return new MO(0,-1);case 1:return new MO(1,0);case 2:return new MO(-1,0);default:return new MO(0,1)}}function Dkn(n){switch(n.g){case 1:return xdn(),nxt;case 4:return xdn(),JDt;case 2:return xdn(),YDt;case 3:return xdn(),QDt}return xdn(),ZDt}function xkn(n){switch(n.hj(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function Rkn(){Rkn=E,hNt=new jO("PARENTS",0),sNt=new jO("NODES",1),oNt=new jO("EDGES",2),fNt=new jO("PORTS",3),uNt=new jO("LABELS",4)}function Kkn(n,t,e){var i;switch((i=e.q.getFullYear()-V1n+V1n)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Fen(n,i%100,2);break;default:Fen(n,i,t)}}function Fkn(n,t){var e,i;if(o3(t,n.b),t>=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<t;++e)i=i.a;return new eB(n,t,i)}function _kn(){_kn=E,Wut=new eC("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),Vut=new eC("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function Bkn(n){this.b=new Zm,this.e=new Zm,this.d=n,this.a=!Qj(JJ(new fX(null,new LW(new w7(n.b))),new hd(new Xr))).Bd((vS(),Kut))}function Hkn(n,t){var i,r,c,a;for(i=0,c=new Ww(t.a);c.a<c.c.c.length;)a=(r=uG(N3(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function Ukn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(zIn(),dbt)&&i!=fbt&&hDn(e=new Fz(ix(Xgn(r).a.Kc(),new h)))&&vJ(n.k,t,uG(N9(e),18))}function Gkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.c.e.a,n.c.e.b):uG(gR(n.a),8)).b,(0==t.a.b?new MO(t.c.e.a,t.c.e.b):uG(gR(t.a),8)).b)}function qkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.c.e.a,n.c.e.b):uG(gR(n.a),8)).a,(0==t.a.b?new MO(t.c.e.a,t.c.e.b):uG(gR(t.a),8)).a)}function Xkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.b.e.a,n.b.e.b):uG(pR(n.a),8)).a,(0==t.a.b?new MO(t.b.e.a,t.b.e.b):uG(pR(t.a),8)).a)}function zkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.b.e.a,n.b.e.b):uG(pR(n.a),8)).b,(0==t.a.b?new MO(t.b.e.a,t.b.e.b):uG(pR(t.a),8)).b)}function Vkn(){Vkn=E,Zxt=new $O("DISTRIBUTED",0),tRt=new $O("JUSTIFIED",1),Jxt=new $O("BEGIN",2),Yxt=new $O(G2n,3),nRt=new $O("END",4)}function Wkn(n,t){var e,i,r;return i=ern(n.Dh(),t),(e=t-n.ji())<0?(r=n.Ih(i))>=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<i;e++)if(!m_(n.j[e],t.j[e]))return!1;return!0}function Zkn(n){var t;try{return t=n.i.Xb(n.e),n.Xj(),n.g=n.e++,t}catch(e){throw F$(e=Ehn(e),77)?(n.Xj(),hv(new Bv)):hv(e)}}function nyn(n){var t;try{return t=n.c.Vi(n.e),n.Xj(),n.g=n.e++,t}catch(e){throw F$(e=Ehn(e),77)?(n.Xj(),hv(new Bv)):hv(e)}}function tyn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)s3(e,n.length),(t=n.charCodeAt(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<i.c.c.length;)uyn(uG(N3(i),163),t,e)}function syn(n){var t;if(null==n)return null;if(null==(t=bJn(yXn(n,!0))))throw hv(new PM("Invalid base64Binary value: '"+n+"'"));return t}function hyn(n,t){var e;e=n.fd(t);try{return e.Pb()}catch(i){throw F$(i=Ehn(i),112)?hv(new dM("Can't get element "+t)):hv(i)}}function fyn(n,t){var e,i,r;for(e=n.o,r=uG(uG(Y9(n.r,t),21),87).Kc();r.Ob();)(i=uG(r.Pb(),117)).e.a=YTn(i,e.a),i.e.b=e.b*uM(pK(i.b.of(bht)))}function lyn(n,t){var e,i,r;for(r=new R7(t.gc()),i=t.Kc();i.Ob();)(e=uG(i.Pb(),292)).c==e.f?YOn(n,e,e.c):qOn(n,e)||mv(r.c,e);return r}function byn(n){var t;return(t=new WM).a+="n",n.k!=(zIn(),dbt)&&JA(JA((t.a+="(",t),MR(n.k).toLowerCase()),")"),JA((t.a+="_",t),ZTn(n)),t.a}function wyn(n,t){var e,i,r,c;return r=n.k,e=uM(pK(oIn(n,(GYn(),bmt)))),c=t.k,i=uM(pK(oIn(t,bmt))),c!=(zIn(),lbt)?-1:r!=lbt?1:e==i?0:e<i?-1:1}function dyn(n,t){var e,i;return e=uG(uG(cQ(n.g,t.a),42).a,68),i=uG(uG(cQ(n.g,t.b),42).a,68),atn(t.a,t.b)-atn(t.a,x$(e.b))-atn(t.b,x$(i.b))}function gyn(n,t){var e;switch(e=uG(AJ(n.b,t),127).n,t.g){case 1:n.t>=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.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.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<t.c.c.length;)e+=Oyn(uG(N3(t),27));return e}function Ayn(n){var t,e,i;for(i=n.c.a,n.p=(WW(i),new Z_(i)),e=new Ww(i);e.a<e.c.c.length;)(t=uG(N3(e),10)).p=nLn(t).a;hZ(),f$(n.p,new Pc)}function Lyn(n,t,e){var i,r,c,a;return-1!=(i=n.dd(t))&&(n.Pj()?(c=n.Qj(),a=Oq(n,i),r=n.Ij(4,a,null,i,c),e?e.nj(r):e=r):Oq(n,i)),e}function Nyn(n,t,e){var i,r,c,a;return-1!=(i=n.dd(t))&&(n.Pj()?(c=n.Qj(),a=gjn(n,i),r=n.Ij(4,a,null,i,c),e?e.nj(r):e=r):gjn(n,i)),e}function $yn(n,t,e,i){var r,c;e.Xh(t)&&(PP(),ein(t)?ukn(n,uG(e.Mh(t),160)):(r=(c=t)?uG(i,54).gi(c):null)&&rv(e.Mh(t),r))}function Dyn(n,t,e,i){var r,c,a;return c=ern(n.Dh(),t),(r=t-n.ji())<0?(a=n.Ih(c))>=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<e.length;t++)e[t]=uG(b8(n[t],n[t].length),199);return e}function _yn(n){var t;if(Zln(n))return yz(n),n.ul()&&(t=ONn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw hv(new Bv)}function Byn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function Hyn(n,t){var e,i;if((i=Ljn(n,t))>=0)return i;if(n.ol())for(e=0;e<n.i;++e)if(xA(n.pl(uG(n.g[e],58)))===xA(t))return e;return-1}function Uyn(n,t,e){var i,r;if(t>=(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.a<e.c.c.length;)t=uG(N3(e),10),this.a=this.a|t.k==(zIn(),dbt)}function Xyn(n,t){var e,i,r;for(e=jx(new sk,n),r=new Ww(t);r.a<r.c.c.length;)i=uG(N3(r),125),RKn(xS(DS(RS($S(new uk,0),0),e),i));return e}function zyn(n,t,e){e.Ug("Compound graph preprocessor",1),n.a=new K1,ZWn(n,t,null),hzn(n,t),qRn(n),kfn(t,(GYn(),Apt),n.a),n.a=null,$V(n.b),e.Vg()}function Vyn(n,t,e){var i,r,c;for(r=new Fz(ix((t?qgn(n):Xgn(n)).a.Kc(),new h));hDn(r);)i=uG(N9(r),18),(c=t?i.c.i:i.d.i).k==(zIn(),bbt)&&a2(c,e)}function Wyn(n,t){var e,i;for(t.Ug("Untreeify",1),i=uG(oIn(n,(OQn(),_Pt)),15).Kc();i.Ob();)aq((e=uG(i.Pb(),65)).b.d,e),aq(e.c.b,e);t.Vg()}function Qyn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),gdt)),15).Kc();i.Ob();)pW(n,e=uG(i.Pb(),105),(t=Ejn(e))[0],(gon(),jdt),0),pW(n,e,t[1],Sdt,1)}function Jyn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),pdt)),15).Kc();i.Ob();)pW(n,e=uG(i.Pb(),105),(t=Ejn(e))[0],(gon(),jdt),0),pW(n,e,t[1],Sdt,1)}function Yyn(){Yyn=E,djt=new bI(q4n,0),gjt=new bI("PORT_POSITION",1),wjt=new bI("NODE_SIZE_WHERE_SPACE_PERMITS",2),bjt=new bI("NODE_SIZE",3)}function Zyn(){Zyn=E,lOt=new cO("INTERACTIVE_NODE_REORDERER",0),wOt=new cO("MIN_SIZE_PRE_PROCESSOR",1),bOt=new cO("MIN_SIZE_POST_PROCESSOR",2)}function nMn(){nMn=E,CNt=new TO("AUTOMATIC",0),ANt=new TO(z2n,1),LNt=new TO(V2n,2),NNt=new TO("TOP",3),INt=new TO(Q2n,4),ONt=new TO(G2n,5)}function tMn(n,t,e,i){var r,c;for(b_n(),r=0,c=0;c<e;c++)r=Lgn(Ngn(E3(t[c],L0n),E3(i,L0n)),E3(pz(r),L0n)),n[c]=pz(r),r=Dz(r,32);return pz(r)}function eMn(n,t,i){var r,c;for(c=0,r=0;r<Nst;r++)c=e.Math.max(c,Nbn(n.a[t.g][r],i));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function iMn(n,t){var e,i;if(kK(t>0),(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;r<n.c.length;r++){if(u3(r,n.c.length),c=uG(n.c[r],12),!e.Mb(c))return r;mv(i.c,c)}return n.c.length}function aMn(n){switch(n.g){case 0:return null;case 1:return new gun;case 2:return new dy;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function oMn(n,t,e){var i,r;for($hn(n,t-n.s,e-n.t),r=new Ww(n.n);r.a<r.c.c.length;)cw(i=uG(N3(r),209),i.e+t-n.s),aw(i,i.f+e-n.t);n.s=t,n.t=e}function uMn(n){var t,e,i,r;for(e=0,i=new Ww(n.a);i.a<i.c.c.length;)uG(N3(i),125).d=e++;return r=null,(t=ZCn(n)).c.length>1&&(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&&0!=(4&n.Db)&&0==(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&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,7,t,n.i))),n.i}function lMn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=uG(mwn(n,t),19),n.b!=t&&0!=(4&n.Db)&&0==(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,302,n,0,1),this.c=Inn(Cat,l1n,302,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;i<e;i++)GX(r,r.c.length,new bQ(n.a));a2(t,(u3(e-1,r.c.length),uG(r.c[e-1],30))),n.b[t.p]=e}function vMn(n,t){var e,i,r;for(n.b[t.g]=1,i=Fkn(t.d,0);i.b!=i.d.c;)r=(e=uG(I6(i),65)).c,1==n.b[r.g]?aq(n.a,e):2==n.b[r.g]?n.b[r.g]=1:vMn(n,r)}function kMn(n,t,e,i){var r;for(r=uG(Y9(i?n.a:n.b,t),21).Kc();r.Ob();)if(p_n(n,e,uG(r.Pb(),27)))return!0;return!1}function yMn(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)if((t=uG(Zkn(e),89)).e||0!=(!t.d&&(t.d=new MD(g_t,t,1)),t.d).i)return!0;return!1}function MMn(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)if((t=uG(Zkn(e),89)).e||0!=(!t.d&&(t.d=new MD(g_t,t,1)),t.d).i)return!0;return!1}function TMn(n){var t,e;for(t=0,e=new Ww(n.c.a);e.a<e.c.c.length;)t+=x5(new Fz(ix(Xgn(uG(N3(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function jMn(){jMn=E,uBn(),ULt=RLt,BLt=new CN(8),new _N((XYn(),W$t),BLt),new _N(DDt,8),HLt=DLt,FLt=ELt,_Lt=SLt,KLt=new _N(w$t,(qx(),!1))}function EMn(n,t,e){e.Ug("Shrinking tree compaction",1),oM(gK(oIn(t,(rsn(),Oht))))?(son(n,t.f),Qen(t.f,t.c)):Qen(t.f,t.c),e.Vg()}function SMn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),n.e;case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),n.d}return spn(n,t,e,i)}function PMn(n){var t;return n.a&&n.a.Vh()&&(t=uG(n.a,54),n.a=uG(mwn(n,t),142),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,5,t,n.a))),n.a}function CMn(n){return n<48||n>102?-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.a<t.c.c.length;)aq(e,uG(N3(t),418).a);return MK(0!=e.b),Lrn(e,e.c.b),e}function DMn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Ww(n.n);c.a<c.c.c.length;)rxn(uG(N3(c),209),a,i,r),++r}function xMn(n){var t,e;for(n.b.a.$b(),n.a=Inn(zut,EZn,60,n.c.c.a.b.c.length,0,1),t=0,e=new Ww(n.c.c.a.b);e.a<e.c.c.length;)uG(N3(e),60).f=t++}function RMn(n){var t,e;for(n.b.a.$b(),n.a=Inn(xlt,EZn,86,n.c.a.a.b.c.length,0,1),t=0,e=new Ww(n.c.a.a.b);e.a<e.c.c.length;)uG(N3(e),86).i=t++}function KMn(n){var t;if(t=gbn(n),!hDn(n))throw hv(new dM("position (0) must be less than the number of elements that remained ("+t+")"));return N9(n)}function FMn(n,t){var e;return n.a||(e=Inn(eUt,I0n,28,0,15,1),tE(n.b.a,new pd(e)),vv(e,qrn(P.prototype.Me,P,[])),n.a=new __(e,n.d)),x7(n.a,t)}function _Mn(n,t,e){try{return eTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function BMn(n,t,e){try{return iTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function HMn(n,t,e){try{return rTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function UMn(n){switch(n.g){case 1:return KQn(),_Rt;case 4:return KQn(),yRt;case 3:return KQn(),kRt;case 2:return KQn(),KRt;default:return KQn(),FRt}}function GMn(n,t,e){t.k==(zIn(),dbt)&&e.k==wbt&&(n.d=Bwn(t,(KQn(),KRt)),n.b=Bwn(t,yRt)),e.k==dbt&&t.k==wbt&&(n.d=Bwn(e,(KQn(),yRt)),n.b=Bwn(e,KRt))}function qMn(n,t){var e,i;for(i=Dgn(n,t).Kc();i.Ob();)if(null!=oIn(e=uG(i.Pb(),12),(GYn(),lmt))||Dx(new w7(e.b)))return!0;return!1}function XMn(n,t,e){e.Ug("Linear segments node placement",1),n.b=uG(oIn(t,(GYn(),kmt)),312),MYn(n,t),$Xn(n,t),gzn(n,t),LJn(n),n.a=null,n.b=null,e.Vg()}function zMn(n,t){return ycn(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Mcn(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),kD(n.c,t),!0}function VMn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Ww(n.a);c.a<c.c.c.length;)oMn(r=uG(N3(c),172),r.s,r.t+a*i),DMn(r,n.d-r.r+t,i),++a}function WMn(n,t){var e,i,r,c,a,o;for(r=t.length-1,a=0,o=0,i=0;i<=r;i++)c=t[i],e=eOn(r,i)*gwn(1-n,r-i)*gwn(n,i),a+=c.a*e,o+=c.b*e;return new MO(a,o)}function QMn(n,t){var e,i,r,c,a;for(e=t.gc(),n._i(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),yD(n,i,n.Zi(i,r)),n.Mi(i,r),n.Ni();return 0!=e}function JMn(n,t,e){var i,r,c;return n.Pj()?(i=n.Ej(),c=n.Qj(),++n.j,n.qj(i,n.Zi(i,t)),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):JK(n,n.Ej(),t),e}function YMn(n,t,e){var i,r,c;return(0!=(64&(c=F$(r=(i=uG(zrn(z5(n.a),t),89)).c,90)?uG(r,29):(YYn(),x_t)).Db)?mwn(n.b,c):c)==e?MGn(i):Urn(i,e),c}function ZMn(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 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.a<e.c.c.length;)for(t=0,i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)uG(N3(i),10).p=t++}function oTn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=aT(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)uQ(r,e,i.Pb());return t.length>c&&uQ(t,c,null),t}function uTn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(udn(t,n.Xb(e)))return e;return-1}function sTn(n,t){var e,i,r;return e=t.ld(),r=t.md(),i=n.xc(e),!(!(xA(r)===xA(i)||null!=r&&udn(r,i))||null==i&&!n._b(e))}function hTn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),p$(e,i,r)}function fTn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function lTn(n,t){var e,i;switch(i=t.c,e=t.a,n.b.g){case 0:e.d=n.e-i.a-i.d;break;case 1:e.d+=n.e;break;case 2:e.c=n.e-i.a-i.d;break;case 3:e.c=n.e+i.d}}function bTn(n,t,e,i){var r,c;this.a=t,this.c=i,Nb(this,new MO(-(r=n.a).c,-r.d)),JF(this.b,e),c=i/2,t.a?HR(this.b,0,c):HR(this.b,c,0),kD(n.c,this)}function wTn(n,t,e,i){var r;this.c=n,this.d=t,s8(r=new lS,e,r.c.b,r.c),this.a=r,this.b=uG(oIn(i,(QGn(),cCt)),88),this.e=uM(pK(oIn(i,jCt))),RYn(this)}function dTn(){dTn=E,ZIt=new eO(q4n,0),JIt=new eO(K6n,1),YIt=new eO("EDGE_LENGTH_BY_POSITION",2),QIt=new eO("CROSSING_MINIMIZATION_BY_POSITION",3)}function gTn(n,t){var e,i;if(e=uG(dcn(n.g,t),27))return e;if(i=uG(dcn(n.j,t),123))return i;throw hv(new SM("Referenced shape does not exist: "+t))}function pTn(n,t){var e;if(F$(t,253)){e=uG(t,253);try{return 0==n.Ed(e)}catch(i){if(F$(i=Ehn(i),212))return!1;throw hv(i)}}return!1}function mTn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw hv(new vM("Node 'one' must be either source or target of edge 'edge'."))}function vTn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw hv(new vM("Node "+t+" is neither source nor target of edge "+n))}function kTn(n,t,e){e.Ug("Self-Loop ordering",1),kS(YJ(JJ(JJ(sin(new fX(null,new h3(t.b,16)),new Ii),new Oi),new Ai),new Li),new gg(n)),e.Vg()}function yTn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),hV(n,t,(qhn(),hdt),e);break;case 1:case 3:hV(n,t,(qhn(),odt),null)}}function MTn(n,t,e,i,r,c){var a,o,u,s,h;for(a=BEn(t,e,c),o=e==(KQn(),yRt)||e==_Rt?-1:1,s=n[e.g],h=0;h<s.length;h++)(u=s[h])>0&&(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;t<i;t++)e=uG(zq(n.c.b,t),30),n.n[t]=Hkn(n,e),n.d[t]=FRn(n,e)}function jTn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function ETn(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),c=null,e=uG(n.g,124),r=0;r<n.i;++r)i=e[r],a.am(i.Lk())&&(!c&&(c=new ls),ttn(c,i));c&&PJn(n,c)}function STn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new zM,t=n.Kc();t.Ob();)VA(e,mK(t.Pb())),e.a+=" ";return CL(e,e.a.length-1)}function PTn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function CTn(n){var t;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),60).c.$b();Prn(hN(n.d)?n.a.c:n.a.d,new Id(n)),n.c.df(n),NFn(n)}function ITn(n){var t,e,i;for(e=new Ww(n.e.c);e.a<e.c.c.length;){for(i=new Ww((t=uG(N3(e),289)).b);i.a<i.c.c.length;)Yqn(uG(N3(i),453));CNn(t)}}function OTn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),172),a=e.Math.max(a,t.r),r+=t.d+(c>0?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<i.c.c.length;)vR(t=uG(N3(i),10),(GYn(),imt))&&(r=e.Math.min(r,uG(oIn(t,imt),17).a));return r}function XTn(n,t){var e,i;if(0==t.length)return 0;for(e=kQ(n.a,t[0],(KQn(),_Rt)),e+=kQ(n.a,t[t.length-1],kRt),i=0;i<t.length;i++)e+=CIn(n,i,t);return e}function zTn(){uFn(),this.c=new Zm,this.i=new Zm,this.e=new XL,this.f=new XL,this.g=new XL,this.j=new Zm,this.a=new Zm,this.b=new Ym,this.k=new Ym}function VTn(n,t){var e;return n.Db>>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;e<n.gc();++e)if(i=uG(n.Xb(e),131),e==n.gc()-1||!i.o)return new WO(xwn(e),i);return null}function ejn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=uG(zq(c.a,r),10)).k!=(zIn(),fbt)&&!pEn(a))return!1;return!0}function ijn(n){var t,i,r,c,a;for(a=0,c=T0n,r=0,i=new Ww(n.a);i.a<i.c.c.length;)a+=(t=uG(N3(i),172)).r+(r>0?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<e;++t)lR(zrn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)lR(zrn(n.vb,t));jz((gAn(),kBt),n),n.Bb|=1}function ujn(n,t,e,i,r,c,a,o,u,s,h,f,l,b){return eLn(n,t,i,null,r,c,a,o,u,s,l,!0,b),Pgn(n,h),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2),e&&bon(n,e),Ign(n,f),n}function sjn(n){var t;if(null==n)return null;t=0;try{t=vUn(n,j1n,vZn)&D1n}catch(e){if(!F$(e=Ehn(e),130))throw hv(e);t=_en(n)[0]}return Hsn(t)}function hjn(n){var t;if(null==n)return null;t=0;try{t=vUn(n,j1n,vZn)&D1n}catch(e){if(!F$(e=Ehn(e),130))throw hv(e);t=_en(n)[0]}return Hsn(t)}function fjn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>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.a<i.c.c.length;)for(e=N3(i),t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),693).bf(e)}function vjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.a<i.c.c.length;)for(e=N3(i),t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),382).bf(e)}function kjn(n){var t,e,i,r,c;for(r=vZn,c=null,i=new Ww(n.d);i.a<i.c.c.length;)(e=uG(N3(i),218)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function yjn(){yjn=E,tlt=new mL(I4n,(qx(),!1)),Jft=new mL(O4n,100),Jen(),Yft=new mL(A4n,Zft=glt),nlt=new mL(L4n,t4n),elt=new mL(N4n,xwn(vZn))}function Mjn(n,t,e){var i,r,c,a,o,u;for(u=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(o=Vwn(i[r],e).Kc();o.Ob();)a=uG(o.Pb(),12),vJ(n.f,a,xwn(u++))}function Tjn(n,t,e){var i,r;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)UNn(n,t,fNn(uin(e,uG(r.Pb(),17).a)))}function jjn(n,t,e){var i,r;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)UNn(n,t,fNn(uin(e,uG(r.Pb(),17).a)))}function Ejn(n){var t;return jIn(),Ntn(t=uG(oTn(kz(n.k),Inn(YRt,z4n,64,2,0,1)),126),0,t.length,null),t[0]==(KQn(),yRt)&&t[1]==_Rt&&(uQ(t,0,_Rt),uQ(t,1,yRt)),t}function Sjn(n,t,e){var i,r,c;return c=ZFn(n,r=xKn(n,t,e)),Ctn(n.b),Z3(n,t,e),hZ(),f$(r,new np(n)),i=ZFn(n,r),Ctn(n.b),Z3(n,e,t),new WO(xwn(c),xwn(i))}function Pjn(){Pjn=E,eSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt)),iSt=new uF("linearSegments.inputPrio",xwn(0)),rSt=new uF("linearSegments.outputPrio",xwn(0))}function Cjn(){Cjn=E,zSt=new zI("P1_TREEIFICATION",0),VSt=new zI("P2_NODE_ORDERING",1),WSt=new zI("P3_NODE_PLACEMENT",2),QSt=new zI("P4_EDGE_ROUTING",3)}function Ijn(n){var t,i,r,c;for(i=0,t=0,c=new DD(n);c.e!=c.i.gc();)r=uG(Zkn(c),27),i=e.Math.max(r.g+r.i,i),t=e.Math.max(r.f+r.j,t);return new MO(i,t)}function Ojn(n,t){var i,r,c;for(c=0,r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),27),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function Ajn(){Ajn=E,Rxt=new LO("UNKNOWN",0),$xt=new LO("ABOVE",1),Dxt=new LO("BELOW",2),xxt=new LO("INLINE",3),new uF("org.eclipse.elk.labelSide",Rxt)}function Ljn(n,t){var e;if(n.Yi()&&null!=t){for(e=0;e<n.i;++e)if(udn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(xA(n.g[e])===xA(t))return e;return-1}function Njn(n,t,e){var i,r;return t.c==(can(),Wjt)&&e.c==Vjt?-1:t.c==Vjt&&e.c==Wjt?1:(i=Fbn(t.a,n.a),r=Fbn(e.a,n.a),t.c==Wjt?r-i:i-r)}function $jn(n,t,e){if(e&&(t<0||t>e.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())))||e<t.length)throw hv(new vM(t));return r}function _jn(n,t){var e,i,r;for(tJ(t),kK(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),kD(n.b,tJ(e));return r!=n.b.c.length&&(_ln(n,0),!0)}function Bjn(){Bjn=E,XYn(),olt=O$t,new _N(p$t,(qx(),!0)),hlt=_$t,flt=U$t,llt=q$t,slt=K$t,blt=V$t,wlt=bDt,yjn(),alt=tlt,rlt=Yft,clt=nlt,ult=elt,ilt=Jft}function Hjn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw hv(new vM("'port' must be either the source port or target port of the edge."))}function Ujn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function Gjn(n,t,e,i){var r,c,a;for(a2(t,uG(i.Xb(0),30)),a=i.kd(1,i.gc()),c=uG(e.Kb(t),20).Kc();c.Ob();)Gjn(n,(r=uG(c.Pb(),18)).c.i==t?r.d.i:r.c.i,e,a)}function qjn(n){var t;return t=new Ym,vR(n,(GYn(),Emt))?uG(oIn(n,Emt),85):(kS(JJ(new fX(null,new h3(n.j,16)),new tr),new yg(t)),kfn(n,Emt,t),t)}function Xjn(n,t){var i,r,c,a,o;for(r=0,c=0,i=0,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),186),r=e.Math.max(r,a.e),c+=a.b+(i>0?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;r<c;r++)if(i=zrn(n,r),null==t){if(null==i)return r}else if(xA(t)===xA(i)||udn(t,i))return r;return-1}function tEn(n,t){var e,i;return(e=t.qi(n.a))?(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),uct)),m_(sct,i)?jz(n,Hrn(t.qk())):i):null}function eEn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=uG(t,54).Ph();i&&i!=t;i=i.Ph()){if(++e>O0n)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,(cGn(),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<r.c.c.length;)i=uG(N3(r),172),c=e.Math.max(c,i.d);n.b=c}function sEn(n,t){var e;return n.Db>>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 0==(1&n.Bb)&&n.r&&n.r.Vh()&&(t=uG(n.r,54),n.r=uG(mwn(n,t),142),n.r!=t&&0!=(4&n.Db)&&0==(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<e;i++)YOn(n,(u3(i,r.c.length),uG(r.c[i],292)),m_n(n,r,i))}function gEn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),bdt)),15).Kc();i.Ob();)for(t=kz((e=uG(i.Pb(),105)).k).Kc();t.Ob();)pW(n,e,uG(t.Pb(),64),(gon(),Edt),1)}function pEn(n){var t,e;if(n.k==(zIn(),wbt))for(e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)if(!v9(t=uG(N9(e),18))&&n.c==wSn(t,n).c)return!0;return!1}function mEn(n){var t,e;if(n.k==(zIn(),wbt))for(e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)if(!v9(t=uG(N9(e),18))&&t.c.i.c==t.d.i.c)return!0;return!1}function vEn(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))&&Mxn(n,i)}function kEn(){var n;for(IP(),OYn((tQ(),M_t)),sYn(M_t),ojn(M_t),YYn(),nBt=N_t,n=new Ww(gBt);n.a<n.c.c.length;)PWn(uG(N3(n),248),N_t,null);return!0}function yEn(n,t){var e,i,r,c,a,o;return(a=n.h>>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.a<u.c.c.length;)(a=(o=uG(N3(u),105)).i)&&a.i==i&&(c[r=o.d[i.g]]=e.Math.max(c[r],a.j.b))}function EEn(n,t){var i,r,c,a,o;for(r=0,c=0,i=0,o=new Ww(t.d);o.a<o.c.c.length;)OTn(a=uG(N3(o),315)),r=e.Math.max(r,a.b),c+=a.d+(i>0?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,302,e,0,1),n.c=Inn(Cat,l1n,302,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;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)o=a-t.k+i,eTn(t,r,a)?HMn(n,c,o)||LTn(n,c,o):rTn(t,r,a)&&(_Mn(n,c,o)||NTn(n,c,o))}function CEn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),mv(n.c,t),!0}function IEn(n,t,e){var i;(i=t.c.i).k==(zIn(),wbt)?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12))):(kfn(n,(GYn(),Zpt),t.c),kfn(n,nmt,e.d))}function OEn(n,t,i){var r,c,a,o,u,s;return l_n(),o=t/2,a=i/2,u=1,s=1,(r=e.Math.abs(n.a))>o&&(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,0!=(4&n.Db)&&0==(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.a<i.c.c.length;)XFn(n,uG(N3(i),30));e.Vg()}function UEn(n){var t,e,i,r,c;if(i=0,r=B3n,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,nUn(n,n.d,0,0,f7n,e),(c=n.b.Dg(n.d))<r&&(i=e,r=c);nUn(n,n.d,0,0,f7n,i)}function GEn(n,t){var e,i,r,c;for(c=new Ym,t.e=null,t.f=null,i=new Ww(t.i);i.a<i.c.c.length;)e=uG(N3(i),68),r=uG(cQ(n.g,e.a),42),e.a=AV(e.b),vJ(c,e.a,r);n.g=c}function qEn(n,t,e){var i,r,c,a,o;for(r=(t-n.e)/n.d.c.length,c=0,o=new Ww(n.d);o.a<o.c.c.length;)a=uG(N3(o),315),i=n.b-a.b+e,Xmn(a,a.e+c*r,a.f),VMn(a,r,i),++c}function XEn(n){var t;if(n.f._j(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function zEn(n,t){var e,i,r;for(e=MLn(n,0==(r=t.c.length)?"":(u3(0,t.c.length),mK(t.c[0]))),i=1;i<r&&e;++i)e=uG(e,54).Zh((u3(i,t.c.length),mK(t.c[i])));return e}function VEn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),10),n.c[e.c.p][e.p].a=BX(n.i),n.c[e.c.p][e.p].d=uM(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function WEn(n,t){var i,r,c;for(c=0,r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),163),c+=e.Math.pow(EX(i)*jX(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function QEn(n,t){var i,r,c,a;for(a=0,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)r=uG(c.Pb(),117),a=e.Math.max(a,r.e.a+r.b.Mf().a);(i=uG(AJ(n.b,t),127)).n.b=0,i.a.a=a}function JEn(n,t){var i,r,c,a;for(i=0,a=uG(uG(Y9(n.r,t),21),87).Kc();a.Ob();)c=uG(a.Pb(),117),i=e.Math.max(i,c.e.b+c.b.Mf().b);(r=uG(AJ(n.b,t),127)).n.d=0,r.a.b=i}function YEn(n,t,e,i){var r,c,a;return a=NBn(n,c=UBn(n,t,e,i)),QCn(n,t,e,i),Ctn(n.b),hZ(),f$(c,new tp(n)),r=NBn(n,c),QCn(n,e,t,i),Ctn(n.b),new WO(xwn(a),xwn(r))}function ZEn(n,t){var e;t.Ug("Delaunay triangulation",1),e=new Zm,Prn(n.i,new Fp(e)),oM(gK(oIn(n,(rsn(),Oht)))),n.e?Qon(n.e,nYn(e)):n.e=nYn(e),t.Vg()}function nSn(n,t,e){var i,r;for(MN(n,n.j+t,n.k+e),r=new DD((!n.a&&(n.a=new MD(eFt,n,5)),n.a));r.e!=r.i.gc();)mN(i=uG(Zkn(r),377),i.a+t,i.b+e);yN(n,n.b+t,n.c+e)}function tSn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Nmn(n.e,t,i);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Nmn(n.d,t,i)}return SCn(n,t,e,i)}function eSn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Nyn(n.e,t,i);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Nyn(n.d,t,i)}return phn(n,t,e,i)}function iSn(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))&&iNn(n,r,t)}function rSn(n,t,e){var i,r,c;return n._j(),c=null==t?0:Hon(t),n.f>0&&(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<c;++r)if(5==sJ(Nen(n,i=uG(zrn(e,r),35))))return i}return null}function aSn(n){var t,e,i,r,c;if(aS(n.f,n.b.length))for(i=Inn($at,l1n,227,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e._d())t=(c=uG(e,227)).d&r,c.a=i[t],i[t]=c}function oSn(n){var t,e;return e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(CSt),e.Hc((r_n(),cpt))&&gsn(t,ASt),e.Hc(opt)&&gsn(t,NSt),e.Hc(Ygt)&&gsn(t,ISt),e.Hc(npt)&&gsn(t,OSt),t}function uSn(n){if(n<0)throw hv(new vM("The input must be positive"));return n<ENt.length?W4(ENt[n]):e.Math.sqrt(f7n*n)*(pwn(n,n)/gwn(2.718281828459045,n))}function sSn(n,t){var e;if(n.Yi()&&null!=t){for(e=0;e<n.i;++e)if(udn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(xA(n.g[e])===xA(t))return!0;return!1}function hSn(n,t){if(null==t){for(;n.a.Ob();)if(null==uG(n.a.Pb(),44).md())return!0}else for(;n.a.Ob();)if(udn(t,uG(n.a.Pb(),44).md()))return!0;return!1}function fSn(n,t){var e;return t===n||!!F$(t,678)&&(e=uG(t,2046),Fvn(n.g||(n.g=new nb(n)),e.g||(e.g=new nb(e))))}function lSn(n){var t,i,r;for(t="gA",i="vz",r=e.Math.min(n.length,5)-1;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)&&i<d0n?i<0?e.Math.ceil(i):e.Math.floor(i):Esn(Yzn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t,!1))}function wSn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw hv(new vM("'node' must either be the source node or target node of the edge."))}function dSn(n){var t,e,i,r;if(r=uG(oIn(n,(GYn(),Ipt)),36)){for(i=new sj,t=HQ(n.c.i);t!=r;)t=HQ(e=t.e),KR(JF(JF(i,e.n),t.c),t.d.b,t.d.d);return i}return Pbt}function gSn(n){var t;kS(sin(new fX(null,new h3((t=uG(oIn(n,(GYn(),vmt)),337)).d,16)),new Fi),new dg(n)),kS(JJ(new fX(null,new h3(t.d,16)),new _i),new pg(n))}function pSn(n,t){var e,i;for(e=new Fz(ix((t?Xgn(n):qgn(n)).a.Kc(),new h));hDn(e);)if((i=wSn(uG(N9(e),18),n)).k==(zIn(),wbt)&&i.c!=n.c)return i;return null}function mSn(n){var t,i,r;for(i=new Ww(n.p);i.a<i.c.c.length;)(t=uG(N3(i),10)).k==(zIn(),dbt)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function vSn(n,t,e){var i,r,c;for(c=new Ww(t);c.a<c.c.c.length;)i=uG(N3(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Ww(t);r.a<r.c.c.length;)nQn(n,i=uG(N3(r),10),e)}function kSn(n,t,i){var r,c;(r=Hwn(t.j,i.s,i.c)+Hwn(i.e,t.s,t.c))==(c=Hwn(i.j,t.s,t.c)+Hwn(t.e,i.s,i.c))?r>0&&(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),39),(QGn(),pCt)),107),kfn(n,(OQn(),kPt),new MO(0,0)),rUn(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;u<h;++u)f[u]=NSn(n,t,e,i,r,c,a);return f}function $Sn(n){if(-1==n.g)throw hv(new xv);n.Xj();try{n.i.gd(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}}function DSn(n){var t,e,i;for(i=-1,e=0,t=new Ww(n);t.a<t.c.c.length;){if(uG(N3(t),249).c==(can(),Vjt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function xSn(n){var t,i,r,c;for(c=0,t=0,r=new Ww(n.c);r.a<r.c.c.length;)ycn(i=uG(N3(r),27),n.e+c),Mcn(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function RSn(n){var t,e,i;for(e=new Ww(n.a.b);e.a<e.c.c.length;)i=(t=uG(N3(e),60)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;hKn(n)}function KSn(n){var t,e,i;for(e=new Ww(n.a.b);e.a<e.c.c.length;)i=(t=uG(N3(e),86)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;fKn(n)}function FSn(n){var t,e,i,r,c;for(c=kz(n.k),KQn(),i=0,r=(e=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;i<r;++i)if((t=e[i])!=FRt&&!c.Hc(t))return t;return null}function _Sn(n,t){var e,i;return(i=uG(Rx(lln(JJ(new fX(null,new h3(t.j,16)),new sc))),12))&&(e=uG(zq(i.e,0),18))?uG(oIn(e,(GYn(),imt)),17).a:Uen(n.b)}function BSn(n,t){var e,i,r;for(r=new Ww(t.a);r.a<r.c.c.length;)for(i=uG(N3(r),10),AM(n.d),e=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(e);)B$n(n,i,uG(N9(e),18).d.i)}function HSn(n,t){var e,i;for(men(n.b,t),i=new Ww(n.n);i.a<i.c.c.length;)if(-1!=Ten((e=uG(N3(i),209)).c,t,0)){men(e.c,t),xSn(e),0==e.c.c.length&&men(n.n,e);break}EXn(n)}function USn(n,t){var i,r,c,a,o;for(o=n.f,c=0,a=0,r=new Ww(n.a);r.a<r.c.c.length;)oMn(i=uG(N3(r),172),n.e,o),dtn(i,t),a=e.Math.max(a,i.r),c=o+=i.d+n.c;n.d=a,n.b=c}function GSn(n){var t,e;return P6(e=tRn(n))?null:(WW(e),t=uG(KMn(new Fz(ix(e.a.Kc(),new h))),74),lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)))}function qSn(n){return n.o||(n.uk()?n.o=new EQ(n,n,null):n.al()?n.o=new sF(n,null):1==sJ(Nen((gAn(),kBt),n))?n.o=new o8(n):n.o=new hF(n,null)),n.o}function XSn(n,t,e,i){var r,c,a,o,u;e.Xh(t)&&(r=(a=t)?uG(i,54).gi(a):null)&&(u=e.Mh(t),(o=t.t)>1||-1==o?(c=uG(u,15),r.Wb(Vpn(n,c))):r.Wb(uUn(n,uG(u,58))))}function zSn(n,t,e,i){kE();var r=hZn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{sUt(c)()}catch(a){n(t,a)}else sUt(c)()}function VSn(n,t){var e,i,r;for(r=new Kw(new Lw(n.b).a.vc().Kc());r.a.Ob();)if(e=uG(r.a.Pb(),44),i=uG(e.ld(),34),NL(t,uG(i,17))<0)return!1;return!0}function WSn(n,t){var e,i,r;for(r=new Kw(new Lw(n.b).a.vc().Kc());r.a.Ob();)if(e=uG(r.a.Pb(),44),i=uG(e.ld(),34),NL(t,uG(i,17))>0)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<c.c.c.length;){if(r=uG(N3(c),47),i.$g())return;r.Kf(t,i.eh(1))}i.Vg()}function ZSn(){ZSn=E,ZNt=new SO("V_TOP",0),YNt=new SO("V_CENTER",1),JNt=new SO("V_BOTTOM",2),WNt=new SO("H_LEFT",3),VNt=new SO("H_CENTER",4),QNt=new SO("H_RIGHT",5)}function nPn(n){var t;return 0!=(64&n.Db)?pmn(n):((t=new fx(pmn(n))).a+=" (abstract: ",Lj(t,0!=(256&n.Bb)),t.a+=", interface: ",Lj(t,0!=(512&n.Bb)),t.a+=")",t.a)}function tPn(n){var t;null==n.c&&(t=xA(n.b)===xA(Dat)?null:n.b,n.d=null==t?IZn:Pz(t)?ux(RY(t)):RA(t)?C1n:Ij(Tbn(t)),n.a=n.a+": "+(Pz(t)?EF(RY(t)):t+""),n.c="("+n.d+") "+n.a)}function ePn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===mZn&&Map.prototype.entries&&n()?Map:IQn()}function iPn(n,t){var e,i,r;for(r=new N4(n.e,0),e=0;r.b<r.d.gc();){if((i=uM((MK(r.b<r.d.gc()),pK(r.d.Xb(r.c=r.b++))))-t)>$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()):0!=(4&n.Db)&&0==(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()):0!=(4&n.Db)&&0==(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)&&0!=(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&&!SX(n,e.a);)e=xwn(e.a+1),++r;if(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.a<i.c.c.length;)for(e=new Fz(ix(qgn(uG(N3(i),10)).a.Kc(),new h));hDn(e);)r=uG(N9(e),18).c.i.p,n.n[r]=n.n[r]-1}function vPn(n){var t;for(t=new Ww(n.e.b);t.a<t.c.c.length;)AWn(n,uG(N3(t),30));kS(JJ(sin(sin(new fX(null,new h3(n.e.b,16)),new qc),new Jc),new Yc),new dp(n))}function kPn(n,t){return!!t&&!n.mj(t)&&(n.i?n.i.nj(t):F$(t,152)?(n.i=uG(t,152),!0):(n.i=new bs,n.i.nj(t)))}function yPn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,3,i,null,c,Dqn(n,i,c,F$(i,102)&&0!=(uG(i,19).Bb&P0n)),!0):VZ(n,1,i,i.ik(),c,-1,!0),e?e.nj(r):e=r,e}function MPn(n){if(n=yXn(n,!0),m_(Fnt,n)||m_("1",n))return qx(),eot;if(m_(_nt,n)||m_("0",n))return qx(),tot;throw hv(new PM("Invalid boolean value: '"+n+"'"))}function TPn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=uG(r.Pb(),44)).ld(),xA(t)===xA(c)||null!=t&&udn(t,c))return e&&(i=new VP(i.ld(),i.md()),r.Qb()),i;return null}function jPn(n){var t,e,i;VK(),n.B.Hc((oUn(),tKt))&&(i=n.f.i,t=new qZ(n.a.c),(e=new Dk).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.$f(e))}function EPn(n,t,i,r){var c,a,o;for(o=e.Math.min(i,uqn(uG(n.b,68),t,i,r)),a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),225))!=t&&(o=e.Math.min(o,EPn(c,t,o,r)));return o}function SPn(n){var t,e,i;for(i=Inn(pbt,zZn,199,n.b.c.length,0,2),e=new N4(n.b,0);e.b<e.d.gc();)MK(e.b<e.d.gc()),t=uG(e.d.Xb(e.c=e.b++),30),i[e.b-1]=D4(t.a);return i}function PPn(n,t,e){var i,r;null!=(i=uG(ain(n.a,e),34))&&Wpn(uG(ain(n.b,i),67),e,!0),(r=uG(ain(n.b,t),67))||(r=new lS,Akn(n.b,t,r)),s8(r,e,r.c.b,r.c),Akn(n.a,e,t)}function CPn(n,t,e,i,r){var c,a,o,u;for(a=jT(TT(BB(Ryn(e)),i),Ujn(n,e,r)),u=yOn(n,e).Kc();u.Ob();)t[(o=uG(u.Pb(),12)).p]&&(c=t[o.p].i,kD(a.d,new ZX(c,Hdn(a,c))));cmn(a)}function IPn(n,t){this.f=new Ym,this.b=new Ym,this.j=new Ym,this.a=n,this.c=t,this.c>0&&Mjn(this,this.c-1,(KQn(),kRt)),this.c<this.a.length-1&&Mjn(this,this.c+1,(KQn(),_Rt))}function OPn(n,t){var e,i,r,c;for(r=new Ww(t.d);r.a<r.c.c.length;)for(i=uG(N3(r),105),c=uG(cQ(n.c,i),118).o,e=new fS(i.b);e.a<e.c.a.length;)ctn(i,uG(X5(e),64),c)}function APn(n){n.length>0&&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<i.c.c.length;)r+=NPn(n,uG(N3(i),27));return e.Math.max(r,a)}function $Pn(){$Pn=E,sRt=new DO(Y2n,0),uRt=new DO("FREE",1),oRt=new DO("FIXED_SIDE",2),rRt=new DO("FIXED_ORDER",3),aRt=new DO("FIXED_RATIO",4),cRt=new DO("FIXED_POS",5)}function DPn(n,t){var e,i,r;if(e=t.qi(n.a))for(r=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),hct)),i=1;i<(gAn(),yBt).length;++i)if(m_(yBt[i],r))return i;return 0}function xPn(n){var t,e,i,r;if(null==n)return IZn;for(r=new Ysn(TZn,"[","]"),e=0,i=(t=n).length;e<i;++e)o7(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function RPn(n){var t,e,i,r;if(null==n)return IZn;for(r=new Ysn(TZn,"[","]"),e=0,i=(t=n).length;e<i;++e)o7(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function KPn(n){var t,e,i;for(i=new Ysn(TZn,"{","}"),e=n.vc().Kc();e.Ob();)o7(i,E5(n,(t=uG(e.Pb(),44)).ld())+"="+E5(n,t.md()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function FPn(n){for(var t,e,i,r;!LM(n.o);)e=uG(xV(n.o),42),i=uG(e.a,125),r=hpn(t=uG(e.b,218),i),t.e==i?(Sx(r.g,t),i.e=r.e+t.a):(Sx(r.b,t),i.e=r.e-t.a),kD(n.e.a,i)}function _Pn(n,t){var e,i,r;for(e=null,r=uG(t.Kb(n),20).Kc();r.Ob();)if(i=uG(r.Pb(),18),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function BPn(n,t){var e,i,r;for(i=new Ww(sRn(n,!1,t));i.a<i.c.c.length;)0==(e=uG(N3(i),132)).d?(s2(e,null),h2(e,null)):(r=e.a,s2(e,e.b),h2(e,r))}function HPn(n){var t,e;return gsn(t=new wJ,KSt),(e=uG(oIn(n,(GYn(),Hpt)),21)).Hc((r_n(),opt))&&gsn(t,HSt),e.Hc(Ygt)&&gsn(t,FSt),e.Hc(cpt)&&gsn(t,BSt),e.Hc(npt)&&gsn(t,_St),t}function UPn(n,t,e){var i,r,c,a;for(String.fromCharCode(10),Lpn(n),null==n.k&&(n.k=Inn(xat,zZn,82,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)UPn(i[r],t,"\t"+e);(a=n.f)&&UPn(a,t,e)}function GPn(n){var t,e,i,r;for(Wzn(n),e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)r=(i=(t=uG(N9(e),18)).c.i==n)?t.d:t.c,i?u2(t,null):c2(t,null),kfn(t,(GYn(),umt),r),nDn(n,r.i)}function qPn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function XPn(n){var t,e;for(e=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));e.e!=e.i.gc();)if(!hDn(new Fz(ix(tRn(t=uG(Zkn(e),27)).a.Kc(),new h))))return t;return null}function zPn(){zPn=E,tIt=new ZI("OVERLAP_REMOVAL",0),YCt=new ZI(g7n,1),eIt=new ZI("ROTATION",2),ZCt=new ZI("GRAPH_SIZE_CALCULATION",3),nIt=new ZI("OUTGOING_EDGE_ANGLES",4)}function VPn(){var n;return dFt?uG(jxn((MP(),l_t),aet),2115):(n=uG(F$(U1((MP(),l_t),aet),569)?U1(l_t,aet):new iDn,569),dFt=!0,iWn(n),cZn(n),ojn(n),r2(l_t,aet,n),n)}function WPn(n,t,e){var i,r;if(0==n.j)return e;if(r=uG(Dcn(n,t,e),76),!(i=e.Lk()).rk()||!n.a.am(i))throw hv(new Ky("Invalid entry feature '"+i.qk().zb+"."+i.xe()+"'"));return r}function QPn(n,t){var e,i,r,c,a,o,u;for(o=0,u=(a=n.a).length;o<u;++o)for(r=0,c=(i=a[o]).length;r<c;++r)if(e=i[r],xA(t)===xA(e)||null!=t&&udn(t,e))return!0;return!1}function JPn(n){var t,e,i;return dwn(n,0)>=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.b<i.d.gc();)MK(i.b<i.d.gc()),(r=uG(i.d.Xb(i.c=i.b++),10)).p=e,kD(c.e,r),LQ(i);return c}function tCn(n,t,e,i){var r,c,a,o,u;for(r=null,c=0,o=new Ww(t);o.a<o.c.c.length;)u=(a=uG(N3(o),27)).i+a.g,n<a.j+a.f+i&&(r?e.i-u<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function eCn(n,t,e,i){var r,c,a,o,u;for(c=null,r=0,o=new Ww(t);o.a<o.c.c.length;)u=(a=uG(N3(o),27)).j+a.f,n<a.i+a.g+i&&(c?e.j-u<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function iCn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Jfn(uG(zq(n.b,e),443))?!t&&e+1<i&&Jfn(uG(zq(n.b,e+1),443))&&(t=!0,uG(zq(n.b,e),443).a=!0):t=!1}function rCn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=Lgn(c,$gn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<e;a++)c=Lgn(c,E3(t[a],L0n)),n[a]=pz(c),c=$z(c,32)}function cCn(n,t){var e,i;for(b_n(),cHn(),i=xot,e=n;t>1;t>>=1)0!=(1&t)&&(i=j5(i,e)),e=1==e.d?j5(e,e):new nkn(_Un(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<i.p?0:1:qdn(e)==r?0:Udn(e)==r?1:$x(n.b.b,qdn(e))?0:1}function hCn(n){var t;this.d=new Ym,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new LX(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new nB(t=uG(Mj(PFt),9),uG(MF(t,t.length),9),0)}function fCn(n,t){var e,i,r,c;!(r=m6(i=n,"layoutOptions"))&&(r=m6(i,het)),r&&(e=null,(c=r)&&(e=new JE(c,Yon(c,Inn($ot,zZn,2,0,6,1)))),e&&z8(e,new rA(c,t)))}function lCn(n){if(F$(n,207))return uG(n,27);if(F$(n,193))return h0(uG(n,123));throw hv(n?new TM("Only support nodes and ports."):new MM(Het))}function bCn(n,t,e,i){return t>=0&&m_(n.substr(t,3),"GMT")||t>=0&&m_(n.substr(t,3),"UTC")?(e[0]=t+3,PUn(n,e,i)):PUn(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.a<i.c.c.length;)(r=(e=uG(N3(i),72)).n).a=c,n.i==(KQn(),yRt)?r.b=a+n.j.b-e.o.b:r.b=a,JF(r,t),c+=e.o.a+n.e}function dCn(n,t,e){if(n.b)throw hv(new kM("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=(bS(),Ngn(Bsn(Date.now()),$1n))),!0)}function gCn(n){var t;return t=new _y,null!=n.Pg()&&ZG(t,Iet,n.Pg()),null!=n.xe()&&ZG(t,Bet,n.xe()),null!=n.Og()&&ZG(t,"description",n.Og()),t}function pCn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new lV(n,1,9,c,t),e?e.nj(r):e=r),t?(i=t.c)!=n.r&&(e=n.Yk(i,e)):n.r&&(e=n.Yk(null,e)),e}function mCn(n,t,e){var i,r;for(e=kyn(t,n.e,-1-n.c,e),r=new Gm(new bsn(new Nw(uJ(n.a).a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,n.a),e);return e}function vCn(n,t,e){var i,r;for(e=O1(t,n.e,-1-n.c,e),r=new Gm(new bsn(new Nw(uJ(n.a).a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,n.a),e);return e}function kCn(n,t,e,i){var r,c,a;if(0==i)qGn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function yCn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=uG(a.Pb(),117),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),117)).d.b=t,r.d.c=i}function MCn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=uG(a.Pb(),117),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),117)).d.d=i,r.d.a=t}function TCn(n,t,e,i,r){var c,a;_An(c=uG(l8(JJ(t.Oc(),new _r),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)),a=uG(ssn(n.b,e,i),15),0==r?a.cd(0,c):a.Gc(c)}function jCn(n,t,e){e.Ug("Grow Tree",1),n.b=t.f,oM(gK(oIn(t,(rsn(),Oht))))?(n.c=new et,f2(n,null)):n.c=new et,n.a=!1,AKn(n,t.f),kfn(t,Aht,(qx(),!!n.a)),e.Vg()}function ECn(n){var t,e,i,r;for(t=null,r=new Ww(n.Rf());r.a<r.c.c.length;)e=new gY((i=uG(N3(r),187)).Lf().a,i.Lf().b,i.Mf().a,i.Mf().b),t?bAn(t,e):t=e;return!t&&(t=new cN),t}function SCn(n,t,e,i){return 1==e?(!n.n&&(n.n=new fV(lFt,n,1,7)),Nmn(n.n,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().zk(n,$vn(n),e-iQ(n.ii()),t,i)}function PCn(n,t,e){var i,r,c,a,o;for(i=e.gc(),n._i(n.i+i),(o=n.i-t)>0&&qGn(n.g,t,n.g,t+i,o),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),yD(n,t,n.Zi(t,c)),n.Mi(t,c),n.Ni(),++t;return 0!=i}function CCn(n,t,e){var i;return t!=n.q?(n.q&&(e=O1(n.q,n,-10,e)),t&&(e=kyn(t,n,-10,e)),e=pCn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,9,t,t),e?e.nj(i):e=i),e}function ICn(n,t,e,i){return CB(0==(e&VZn),"flatMap does not support SUBSIZED characteristic"),CB(0==(4&e),"flatMap does not support SORTED characteristic"),WW(n),WW(t),new T6(n,t,e,i)}function OCn(n,t){aW(t,"Cannot suppress a null exception."),vG(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Uhn(cT(xat,1),zZn,82,0,[t]):n.k[n.k.length]=t)}function ACn(n,t){var e;if(0!=(e=UL(n.b.ag(),t.b.ag())))return e;switch(n.b.ag().g){case 1:case 2:return d$(n.b.Nf(),t.b.Nf());case 3:case 4:return d$(t.b.Nf(),n.b.Nf())}return 0}function LCn(n){var t,e,i;for(i=n.e.c.length,n.a=Jq(YHt,[zZn,W1n],[53,28],15,[i,i],2),e=new Ww(n.c);e.a<e.c.c.length;)t=uG(N3(e),289),n.a[t.c.a][t.d.a]+=uG(oIn(t,(cGn(),$ft)),17).a}function NCn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=Inn(JHt,N1n,28,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>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)&&0!=(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())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function VCn(n){var t,e;switch(e=D$(Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function WCn(n){var t;for(Pun(),t=uG(N9(new Fz(ix(qgn(n).a.Kc(),new h))),18).c.i;t.k==(zIn(),wbt);)kfn(t,(GYn(),Jpt),(qx(),!0)),t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i}function QCn(n,t,e,i){var r,c,a;for(a=Vwn(t,i).Kc();a.Ob();)r=uG(a.Pb(),12),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Vwn(e,i).Kc();c.Ob();)r=uG(c.Pb(),12),n.d[r.p]=n.d[r.p]-n.c[t.p]}function JCn(n,t,e){var i,r;for(r=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));r.e!=r.i.gc();)kN(i=uG(Zkn(r),27),i.i+t,i.j+e);z8((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b),new XO(t,e))}function YCn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.Ne(e.d,c.d)>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.a<r.c.c.length;)e[(i=uG(N3(r),125)).d]||(mv(t.c,i),Okn(n,i,e));return t}function nIn(n,t){var e,i,r,c;for(i=(1==t?$lt:Nlt).a.ec().Kc();i.Ob();)for(e=uG(i.Pb(),88),c=uG(Y9(n.f.c,e),21).Kc();c.Ob();)r=uG(c.Pb(),42),men(n.b.b,r.b),men(n.b.a,uG(r.b,86).d)}function tIn(n,t){var e;t.Ug("Hierarchical port position processing",1),(e=n.b).c.length>0&&lUn((u3(0,e.c.length),uG(e.c[0],30)),n),e.c.length>1&&lUn(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<QKt.length;++e)try{return dP(QKt[e],n)}catch(i){if(!F$(i=Ehn(i),33))throw hv(i);t=i}throw hv(new Pen(t))}function cIn(){cIn=E,nut=Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),tut=Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function aIn(n){var t,e,i;(t=m_(typeof t,r2n)?null:new fn)&&(pS(),mQ(e=(i=900)>=$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<i.c.c.length;){if(p_n(n,e=uG(N3(i),27),GSn(e)))return!0;if(Zbn(n,e)-n.g<=n.a)return!0}return!1}function fIn(){fIn=E,uBn(),yLt=RLt,mLt=NLt,pLt=ALt,dLt=PLt,gLt=ILt,wLt=new CN(8),bLt=new _N((XYn(),W$t),wLt),vLt=new _N(DDt,8),kLt=DLt,hLt=MLt,fLt=jLt,lLt=new _N(w$t,(qx(),!1))}function lIn(){lIn=E,qNt=new CN(15),GNt=new _N((XYn(),W$t),qNt),zNt=new _N(DDt,15),XNt=new _N(vDt,xwn(0)),FNt=j$t,BNt=_$t,UNt=q$t,xNt=new _N(c$t,Gnt),_Nt=O$t,HNt=U$t,RNt=o$t,KNt=l$t}function bIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))}function wIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))}function dIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))}function gIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))}function pIn(n,t,e){var i,r,c;if(++n.j,t>=(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;e<t.gc();e++)e<t.gc()-1?i|=p_n(n,uG(t.Xb(e),27),uG(t.Xb(e+1),27)):i|=p_n(n,uG(t.Xb(e),27),uG(t.Xb(0),27));return i}function yIn(n,t){var e;t!=n.a?(e=null,n.a&&(e=uG(n.a,54).Th(n,4,fFt,e)),t&&(e=uG(t,54).Rh(n,4,fFt,e)),(e=ywn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,t,t))}function MIn(n,t){var e;t!=n.e?(n.e&&C7(uJ(n.e),n),t&&(!t.b&&(t.b=new Um(new ty)),WF(t.b,n)),(e=$En(n,t,null))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function TIn(n,t){var i;i=t.o,hN(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(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;i<r;++i)for(t=e[i],c=new Zm,kD(this.b,c),o=0,u=(a=t).length;o<u;++o)kD(c,new Z_(a[o].j))}function CIn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=WYn(n.d,i,r),c+=kQ(n.a,i,(KQn(),kRt)),c+=kQ(n.a,r,_Rt)):c=ktn(n.a,i,r)),n.c[t]&&(c+=k7(n.a,i)),c}function IIn(n,t,e,i,r){var c,a,o,u;for(u=null,o=new Ww(i);o.a<o.c.c.length;)if((a=uG(N3(o),452))!=e&&-1!=Ten(a.e,r,0)){u=a;break}c2(c=K9(r),e.b),u2(c,u.b),UNn(n.a,r,new $B(c,t,e.f))}function OIn(n){var t,i,r,c;if(fN(uG(oIn(n.b,(jYn(),Byt)),88)))return 0;for(t=0,r=new Ww(n.a);r.a<r.c.c.length;)(i=uG(N3(r),10)).k==(zIn(),dbt)&&(c=i.o.a,t=e.Math.max(t,c));return t}function AIn(n){for(;0!=n.g.c&&0!=n.d.c;)GK(n.g).c>GK(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.a<r.c.c.length;)(i=uG(N3(r),118))!=c&&i!=t&&i!=a&&(OXn(n.a,i,t),OXn(n.a,i,a))}function NIn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=x9n*n.b+.9*t,n.f=x9n*n.b+.9*i):(n.b=.5*(t+r),n.g=x9n*n.b+.9*r,n.f=x9n*n.b+.9*t)}function $In(n){var t,e,i,r;if(0!=n.b){for(t=new lS,r=Fkn(n,0);r.b!=r.d.c;)Qon(t,Lhn(i=uG(I6(r),39))),(e=i.e).a=uG(oIn(i,(OQn(),GPt)),17).a,e.b=uG(oIn(i,qPt),17).a;return t}return new lS}function DIn(n){switch(uG(oIn(n,(jYn(),gMt)),171).g){case 1:kfn(n,gMt,(Gpn(),Omt));break;case 2:kfn(n,gMt,(Gpn(),Amt));break;case 3:kfn(n,gMt,(Gpn(),Cmt));break;case 4:kfn(n,gMt,(Gpn(),Imt))}}function xIn(n,t,e){var i;e.Ug("Self-Loop routing",1),i=mgn(t),XA(oIn(t,(K7(),jNt))),kS(YJ(JJ(JJ(sin(new fX(null,new h3(t.b,16)),new qi),new Xi),new zi),new Vi),new OC(n,i)),e.Vg()}function RIn(){RIn=E,Vgt=new cI(q4n,0),qgt=new cI(z2n,1),Wgt=new cI(V2n,2),zgt=new cI("LEFT_RIGHT_CONSTRAINT_LOCKING",3),Xgt=new cI("LEFT_RIGHT_CONNECTION_LOCKING",4),Ggt=new cI(K6n,5)}function KIn(n,t,i){var r,c,a,o,u,s,h;u=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>u&&(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()):0!=(4&n.Db)&&0==(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<c;++i)aIn(t);for(a=!Nut&&n.e?Nut?null:n.d:null;a;){for(e=0,r=xln(a).length;e<r;++e)aIn(t);a=!Nut&&a.e?Nut?null:a.d:null}}function XIn(n,t){var e,i;i=uG(oIn(t,(jYn(),JMt)),101),kfn(t,(GYn(),smt),i),(e=t.e)&&(kS(new fX(null,new h3(e.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(e.b,16)),new dt),new Ud(n)))}function zIn(){zIn=E,dbt=new SC("NORMAL",0),wbt=new SC("LONG_EDGE",1),lbt=new SC("EXTERNAL_PORT",2),gbt=new SC("NORTH_SOUTH_PORT",3),bbt=new SC("LABEL",4),fbt=new SC("BREAKING_POINT",5)}function VIn(n){var t,e,i,r;if(t=!1,vR(n,(GYn(),$pt)))for(e=uG(oIn(n,$pt),85),r=new Ww(n.j);r.a<r.c.c.length;)qxn(i=uG(N3(r),12))&&(t||(XLn(HQ(n)),t=!0),_mn(uG(e.xc(i),314)))}function WIn(n){var t,e,i;return i=gCn(n),null!=n.e&&ZG(i,_et,n.e),!!n.k&&ZG(i,"type",MR(n.k)),!pE(n.j)&&(e=new Ib,nrn(i,ket,e),t=new Em(e),z8(n.j,t)),i}function QIn(n){var t,e,i,r;for(r=jQ((man(n.gc(),"size"),new QM),123),i=!0,e=Mz(n).Kc();e.Ob();)t=uG(e.Pb(),44),i||(r.a+=TZn),i=!1,QA(jQ(QA(r,t.ld()),61),t.md());return(r.a+="}",r).a}function JIn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),p$(e&f0n,i&f0n,r&l0n)}function YIn(n){if(null==rot&&(rot=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!rot.test(n))throw hv(new ZM(y0n+n+'"'));return parseFloat(n)}function ZIn(n,t){var e,i,r,c;for(i=(1==t?$lt:Nlt).a.ec().Kc();i.Ob();)for(e=uG(i.Pb(),88),c=uG(Y9(n.f.c,e),21).Kc();c.Ob();)r=uG(c.Pb(),42),kD(n.b.b,uG(r.b,86)),kD(n.b.a,uG(r.b,86).d)}function nOn(n,t){var e,i,r,c;for(c=t.b.j,n.a=Inn(YHt,W1n,28,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)u3(i,c.c.length),0==(e=uG(c.c[i],12)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function tOn(){tOn=E,Egt=new eI("ALWAYS_UP",0),jgt=new eI("ALWAYS_DOWN",1),Pgt=new eI("DIRECTION_UP",2),Sgt=new eI("DIRECTION_DOWN",3),Igt=new eI("SMART_UP",4),Cgt=new eI("SMART_DOWN",5)}function eOn(n,t){if(n<0||t<0)throw hv(new vM("k and n must be positive"));if(t>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<t.length;r++)t[r].Kg(i)}function rOn(n){var t;return 0!=(64&n.Db)?Egn(n):((t=new fx(Egn(n))).a+=" (height: ",Oj(t,n.f),t.a+=", width: ",Oj(t,n.g),t.a+=", x: ",Oj(t,n.i),t.a+=", y: ",Oj(t,n.j),t.a+=")",t.a)}function cOn(n){var t,e,i,r,c,a;for(t=new u8,r=0,c=(i=n).length;r<c;++r)if(null!=Akn(t,a=WW((e=i[r]).ld()),WW(e.md())))throw hv(new vM("duplicate key: "+a));this.b=(hZ(),new Vw(t))}function aOn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],o7(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function oOn(){oOn=E,zin(),sft=new mL(J3n,hft=pft),xwn(1),uft=new mL(Y3n,xwn(300)),xwn(0),bft=new mL(Z3n,xwn(0)),new Jm,wft=new mL(n4n,t4n),new Jm,fft=new mL(e4n,5),dft=pft,lft=gft}function uOn(n,t){var e;if(null!=t&&!n.c.Hk().fk(t))throw e=F$(t,58)?uG(t,58).Dh().zb:Ij(Tbn(t)),hv(new mM(Gtt+n.c.xe()+"'s type '"+n.c.Hk().xe()+"' does not permit a value of type '"+e+"'"))}function sOn(n,t,e){var i,r;for(r=new N4(n.b,0);r.b<r.d.gc();)MK(r.b<r.d.gc()),xA(oIn(i=uG(r.d.Xb(r.c=r.b++),72),(GYn(),omt)))===xA(t)&&(pAn(i.n,HQ(n.c.i),e),LQ(r),kD(t.b,i))}function hOn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=aun(n,new vc)),uM(n.k)/(n.b*(null==n.g&&(n.g=cun(n,new mc)),uM(n.g))))),t=pz(Bsn(e.Math.round(i))),t=e.Math.min(t,n.f)}function fOn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=U$n((s3(n,1),"X".charCodeAt(n)))))throw hv(new CM((s3(n,2),"Unknown Option: "+"X".substr(n))));t|=e}return t}function lOn(){Lun(),LF.call(this),this.j=(KQn(),FRt),this.a=new sj,new $k,this.f=(man(2,g1n),new R7(2)),this.e=(man(4,g1n),new R7(4)),this.g=(man(4,g1n),new R7(4)),this.b=new LC(this.e,this.g)}function bOn(n,t){var e;return!oM(gK(oIn(t,(GYn(),pmt))))&&(e=t.c.i,(n!=(Gpn(),Cmt)||e.k!=(zIn(),bbt))&&uG(oIn(e,(jYn(),gMt)),171)!=Imt)}function wOn(n,t){var e;return!oM(gK(oIn(t,(GYn(),pmt))))&&(e=t.d.i,(n!=(Gpn(),Omt)||e.k!=(zIn(),bbt))&&uG(oIn(e,(jYn(),gMt)),171)!=Amt)}function dOn(n,t){var e,i,r,c,a,o,u;for(a=n.d,u=n.o,o=new gY(-a.b,-a.d,a.b+u.a+a.c,a.d+u.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&bAn(o,e.i);a.b=-o.c,a.d=-o.d,a.c=o.b-a.b-u.a,a.a=o.a-a.d-u.b}function gOn(n,t){if(t.a)switch(uG(oIn(t.b,(GYn(),smt)),101).g){case 0:case 1:JSn(t);case 2:kS(new fX(null,new h3(t.d,16)),new Ni),tDn(n.a,t)}else kS(new fX(null,new h3(t.d,16)),new Ni)}function pOn(){pOn=E,iLt=new bO("CENTER_DISTANCE",0),rLt=new bO("CIRCLE_UNDERLAP",1),oLt=new bO("RECTANGLE_UNDERLAP",2),cLt=new bO("INVERTED_OVERLAP",3),aLt=new bO("MINIMUM_ROOT_DISTANCE",4)}function mOn(n){var t,e,i,r;if(L_n(),null==n)return null;for(i=n.length,t=Inn(JHt,N1n,28,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=mHt[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.a<c.c.c.length;)(r=uG(N3(c),10)).e&&(A6(t,i=r.e),A6(e,i));return t}function yOn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),Mbt));case 2:return YU(n.j,(Lun(),kbt));case 3:return YU(n.j,(Lun(),jbt));case 4:return YU(n.j,(Lun(),Ebt));default:return hZ(),hZ(),zot}}function MOn(n,t){var e,i,r;e=PG(t,n.e),i=uG(cQ(n.g.f,e),17).a,r=n.a.c.length-1,0!=n.a.c.length&&uG(zq(n.a,r),293).c==i?(++uG(zq(n.a,r),293).a,++uG(zq(n.a,r),293).b):kD(n.a,new $R(i))}function TOn(n,t,e){var i,r;return 0!=(i=CBn(n,t,e))?i:vR(t,(GYn(),imt))&&vR(e,imt)?((r=d$(uG(oIn(t,imt),17).a,uG(oIn(e,imt),17).a))<0?sHn(n,t,e):r>0&&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+1<c;)(e=uXn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function SOn(n,t,e){dCn(e,"Recursive Graph Layout",t_n(n,t,!0)),iOn(t,Uhn(cT(nNt,1),EZn,536,0,[new Nl])),vnn(t,(XYn(),yDt))||iOn(t,Uhn(cT(nNt,1),EZn,536,0,[new wu])),nZn(n,t,null,e),POn(e)}function POn(n){var t;if(null==n.p)throw hv(new kM("The task has not begun yet."));n.b||(n.k&&(bS(),t=Ngn(Bsn(Date.now()),$1n),n.q=1e-9*W4($gn(t,n.o))),n.c<n.r&&Ban(n,n.r-n.c),n.b=!0)}function COn(n){var t,e,i;for(aq(i=new Uk,new MO(n.j,n.k)),e=new DD((!n.a&&(n.a=new MD(eFt,n,5)),n.a));e.e!=e.i.gc();)aq(i,new MO((t=uG(Zkn(e),377)).a,t.b));return aq(i,new MO(n.b,n.c)),i}function IOn(n,t,e,i,r){var c,a,o,u;if(r)for(u=((c=new Gz(r.a.length)).b-c.a)*c.c<0?(CP(),XHt):new xD(c);u.Ob();)o=v6(r,uG(u.Pb(),17).a),XUn((a=new PY(n,t,e,i)).a,a.b,a.c,a.d,o)}function OOn(n,t){var e;if(xA(n)===xA(t))return!0;if(F$(t,21)){e=uG(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(F$(i=Ehn(i),169)||F$(i,212))return!1;throw hv(i)}}return!1}function AOn(n,t,e,i,r,c){switch(this.c=n,t.g){case 2:if(n.a.Ne(r,e)<0)throw hv(new vM(Y0n+r+Z0n+e));break;case 1:n.a.Ne(r,r);break;case 3:n.a.Ne(e,e)}this.f=t,this.b=e,this.a=i,this.e=r,this.d=c}function LOn(n,t){var i;kD(n.d,t),i=t.Mf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(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(i<t||r<e)throw hv(new vM("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(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<i;a++)c&=0==e[a];if(0==r)qGn(e,i,n,0,t),a=t;else{for(o=32-r,c&=e[a]<<o==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<o;n[a]=e[a+i]>>>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<i.c.c.length;)t=(e=uG(N3(i),113)).d.j,UNn(n.k,t,e);n.e=zRn(kz(n.k))}function HOn(n,t){var e,i,r;FV(n.d,t),e=new ya,vJ(n.c,t,e),e.f=uwn(t.c),e.a=uwn(t.d),e.d=(uFn(),(r=t.c.i.k)==(zIn(),dbt)||r==fbt),e.e=(i=t.d.i.k)==dbt||i==fbt,e.b=t.c.j==(KQn(),_Rt),e.c=t.d.j==kRt}function UOn(n){var t,e,i,r,c;for(c=vZn,r=vZn,i=new Ww(Ebn(n));i.a<i.c.c.length;)t=(e=uG(N3(i),218)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==vZn&&(r=-1),c==vZn&&(c=-1),new WO(xwn(r),xwn(c))}function GOn(n,t){var i,r,c;return c=B3n,myn(),r=Nht,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=$ht),(i=e.Math.abs(n.a))<c&&(c=i,r=Dht),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Lht),r}function qOn(n,t){var e,i,r;for(e=t.a.o.a,r=new Jw(new C2(HQ(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(MK(r.b<r.d.gc()),(i=uG(r.d.Xb(r.c=r.b++),30)).c.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;o<a;++o)(u=e[o].length)>c&&IV(s,Tin(e[o],out))&&(r=o,c=u);return r>=0&&(i[0]=t+c),r}function zOn(n){var t;return 0!=(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;a<n.i;++a)if(c=r[a],o.am(c.Lk())){if(i==e)return e_n(n,a),PP(),uG(t,69).xk()?c:c.md();++i}throw hv(new dM(Hit+e+Vet+i))}function WOn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return QYn(),QYn(),OHt;for(i=eYn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(QYn(),QYn(),kzn(e=new QN(1),i),i=e),kzn(e,eYn(n));return i}function QOn(n,t,e){return n<0||n>e?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;i<r;i++){c=n[i];try{c[1]?c[0].Um()&&(t=QX(t,c)):c[0].Um()}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);e=a,XM(),o1(F$(e,485)?uG(e,485).ke():e)}}return t}function YOn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&PXn(t.a,vsn(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=uG(oIn(t.a,(GYn(),gmt)),15).Kc();r.Ob();)kfn(uG(r.Pb(),72),Hwt,(qx(),!0))}function ZOn(n,t){var i,r,c;c=$Kn(t),kfn(t,(GYn(),tmt),c),c&&(r=vZn,FX(n.f,c)&&(r=uG(DA(FX(n.f,c)),17).a),oM(gK(oIn(i=uG(zq(t.g,0),18),pmt)))||vJ(n,c,xwn(e.Math.min(uG(oIn(i,imt),17).a,r))))}function nAn(n,t,e){var i,r,c,a;for(t.p=-1,a=jmn(t,(can(),Wjt)).Kc();a.Ob();)for(r=new Ww(uG(a.Pb(),12).g);r.a<r.c.c.length;)t!=(c=(i=uG(N3(r),18)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&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.b<r.d.gc();)MK(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function iAn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)u3(t+i,n.c.length),c=uG(n.c[t+i],12),Y8(n,t+i,(u3(e-i-1,n.c.length),uG(n.c[e-i-1],12))),u3(e-i-1,n.c.length),n.c[e-i-1]=c}function rAn(n,t,e){var i,r,c,a,o,u,s;o=(c=n.d.p).e,u=c.r,n.g=new R_(u),i=(a=n.d.o.c.p)>0?o[a-1]:Inn(pbt,e6n,10,0,0,1),r=o[a],s=a<o.length-1?o[a+1]:Inn(pbt,e6n,10,0,0,1),t==e-1?j0(n.g,r,s):j0(n.g,i,r)}function cAn(n){var t;this.j=new Zm,this.f=new ek,this.b=new nB(t=uG(Mj(YRt),9),uG(MF(t,t.length),9),0),this.d=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.g=n}function aAn(n,t){var e,i,r;if(0!=t.c.length){for(e=hIn(n,t),r=!1;!e;)gxn(n,t,!0),r=!0,e=hIn(n,t);r&&gxn(n,t,!1),i=Jhn(t),n.b&&n.b.Gg(i),n.a=Zbn(n,(u3(0,t.c.length),uG(t.c[0],27))),aAn(n,i)}}function oAn(n,t){var e,i,r;if(i=ern(n.Dh(),t),(e=t-n.ji())<0){if(!i)throw hv(new vM(Vtt+t+Wtt));if(!i.rk())throw hv(new vM(Gtt+i.xe()+qtt));(r=n.Ih(i))>=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,492)&&(t=!0,e=""+uG(n,492).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.i;++a)if(c=r[a],u.am(c.Lk())){if(e==i)return a;++i,o=a+1}if(e==i)return o;throw hv(new dM(Hit+e+Vet+i))}function hAn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new cN,i=new Ww(n.f);i.a<i.c.c.length;)r=uG(N3(i),72).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function fAn(n){var t,e,i;for(Qon(e=new lS,n.o),i=new Ok;0!=e.b;)gJn(n,t=uG(0==e.b?null:(MK(0!=e.b),Lrn(e,e.a.a)),515),!0)&&kD(i.a,t);for(;0!=i.a.c.length;)gJn(n,t=uG(obn(i),515),!1)}function lAn(){lAn=E,yNt=new EO(Y2n,0),wNt=new EO("BOOLEAN",1),mNt=new EO("INT",2),kNt=new EO("STRING",3),dNt=new EO("DOUBLE",4),gNt=new EO("ENUM",5),pNt=new EO("ENUMSET",6),vNt=new EO("OBJECT",7)}function bAn(n,t){var i,r,c,a,o;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(o=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=o,o=i),LG(n,r,a,c-r,o-a)}function wAn(n,t){var e,i;if(n.f){for(;t.Ob();)if(F$(i=(e=uG(t.Pb(),76)).Lk(),102)&&0!=(uG(i,19).Bb&Qtt)&&(!n.e||i.pk()!=tFt||0!=i.Lj())&&null!=e.md())return t.Ub(),!0;return!1}return t.Ob()}function dAn(n,t){var e,i;if(n.f){for(;t.Sb();)if(F$(i=(e=uG(t.Ub(),76)).Lk(),102)&&0!=(uG(i,19).Bb&Qtt)&&(!n.e||i.pk()!=tFt||0!=i.Lj())&&null!=e.md())return t.Pb(),!0;return!1}return t.Sb()}function gAn(){gAn=E,vBt=Uhn(cT($ot,1),zZn,2,6,[nct,tct,ect,ict,rct,cct,_et]),mBt=Uhn(cT($ot,1),zZn,2,6,[nct,"empty",tct,jrt,"elementOnly"]),yBt=Uhn(cT($ot,1),zZn,2,6,[nct,"preserve","replace",act]),kBt=new HG}function pAn(n,t,e){var i,r,c;if(t!=e){i=t;do{JF(n,i.c),(r=i.e)&&(KR(n,(c=i.d).b,c.d),JF(n,r.n),i=HQ(r))}while(r);i=e;do{YF(n,i.c),(r=i.e)&&(HR(n,(c=i.d).b,c.d),YF(n,r.n),i=HQ(r))}while(r)}}function mAn(n,t,e,i){var r,c,a,o,u;if(i.f.c+i.i.c==0)for(o=0,u=(a=n.a[n.c]).length;o<u;++o)vJ(i,c=a[o],new Uun(n,c,e));return(r=uG(DA(FX(i.f,t)),677)).b=0,r.c=r.f,0==r.c||Pw(uG(zq(r.a,r.b),293)),r}function vAn(){vAn=E,Hdt=new QC("MEDIAN_LAYER",0),Gdt=new QC("TAIL_LAYER",1),Bdt=new QC("HEAD_LAYER",2),Udt=new QC("SPACE_EFFICIENT_LAYER",3),qdt=new QC("WIDEST_LAYER",4),_dt=new QC("CENTER_LAYER",5)}function kAn(n){var t,e,i,r;for(n.e=0,r=Fkn(n.f,0);r.b!=r.d.c;)(i=uG(I6(r),10)).p>=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,451))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++<r;)jin(this);else for(this.c=i?i.b:null;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.a<i.c.c.length;)kD(c,new fC(e=uG(N3(i),68),!0)),kD(c,new fC(e,!1));(r=new _Z(n)).a.a.$b(),I4(c,n.b,new IM(Uhn(cT(Hut,1),EZn,693,0,[r])))}function OAn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w;return o=n.a,f=n.b,u=t.a,l=t.b,s=e.a,b=e.b,new MO(((c=o*l-f*u)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(o-u))/(r=(o-u)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function AAn(n,t){var e,i,r;t.Ug("End label pre-processing",1),e=uM(pK(oIn(n,(jYn(),pTt)))),i=uM(pK(oIn(n,yTt))),r=fN(uG(oIn(n,Byt),88)),kS(sin(new fX(null,new h3(n.b,16)),new he),new NB(e,i,r)),t.Vg()}function LAn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||(r=e.d.i,n.a[r.p]?kD(n.b,e):LAn(n,r));n.a[t.p]=!1}}function NAn(n,t,e){var i;switch(i=0,uG(oIn(t,(jYn(),gMt)),171).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return vR(t,(GYn(),imt))&&(i+=uG(oIn(t,imt),17).a),i}function $An(n,t,e){var i,r,c;for(e.zc(t,n),kD(n.n,t),c=n.p.zg(t),t.j==n.p.Ag()?npn(n.e,c):npn(n.j,c),eQ(n),r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(t),new Wd(t)])));hDn(r);)i=uG(N9(r),12),e._b(i)||$An(n,i,e)}function DAn(n,t,e){var i,r,c;for(e.Ug("Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=Fkn(t.b,0);!r&&i.b!=i.d.c;)oM(gK(oIn(c=uG(I6(i),39),(OQn(),UPt))))&&(r=c);r&&k_n(n,new Mp(r),e),e.Vg()}function xAn(n){var t,e;return uG(zDn(n,(XYn(),_$t)),21).Hc((Qmn(),VRt))?(e=uG(zDn(n,q$t),21),t=new eN(uG(zDn(n,U$t),8)),e.Hc((oUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new sj}function RAn(n){var t,e,i;if(!n.b){for(i=new Es,e=new nR(Zqn(n));e.e!=e.i.gc();)0!=((t=uG(nyn(e),19)).Bb&Qtt)&&ttn(i,t);lbn(i),n.b=new vL((uG(zrn(gZ((tQ(),M_t).o),8),19),i.i),i.g),y9(n).b&=-9}return n.b}function KAn(n){var t,e,i;for(e=n.length,i=0;i<e&&(s3(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(s3(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?(Knn(i,t,n.length),n.substr(i,t-i)):n}function FAn(n,t){var e,i,r,c,a,o;a=uG(oTn(kz(t.k),Inn(YRt,z4n,64,2,0,1)),126),xTn(n,o=t.g,e=e5(t,a[0]),i=t5(t,a[1]))<=xTn(n,o,r=e5(t,a[1]),c=t5(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function _An(n){var t,e,i,r,c,a,o;if(hZ(),F$(n,59))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n.hd(c,n.Xb(r)),n.hd(r,t);else for(e=n.ed(),a=n.fd(n.gc());e.Tb()<a.Vb();)i=e.Pb(),o=a.Ub(),e.Wb(o),a.Wb(i)}function BAn(n,t){var e,i,r,c,a,o;for(o=0,A6(c=new ND,t);c.b!=c.c;)for(o+=XTn((a=uG(xV(c),219)).d,a.e),r=new Ww(a.b);r.a<r.c.c.length;)i=uG(N3(r),36),(e=uG(zq(n.b,i.p),219)).s||(o+=BAn(n,e));return o}function HAn(n,t,e,i,r){var c,a,o,u;if(t)for(a=t.Kc();a.Ob();)for(u=nBn(uG(a.Pb(),10),(can(),Wjt),e).Kc();u.Ob();)o=uG(u.Pb(),12),(c=uG(DA(FX(r.f,o)),118))||(c=new nhn(n.d),mv(i.c,c),$An(c,o,r))}function UAn(n,t,i){var r,c;thn(this),t==(l0(),USt)?FV(this.r,n.c):FV(this.w,n.c),FV(i==USt?this.r:this.w,n.d),HOn(this,n),NIn(this,r=uwn(n.c),c=uwn(n.d),c),this.o=(uFn(),e.Math.abs(r-c)<.2)}function GAn(n,t,e){var i,r,c,a,o;if(null!=(a=uG(Lsn(n.a,8),2035)))for(r=0,c=a.length;r<c;++r)null.Um();i=e,0==(1&n.a.Db)&&(o=new SQ(n,e,t),i.dj(o)),F$(i,686)?uG(i,686).fj(n.a):i.cj()==n.a&&i.ej(null)}function qAn(){var n;return kHt?uG(jxn((MP(),l_t),lct),2044):(SQn(),n=uG(F$(U1((MP(),l_t),lct),594)?U1(l_t,lct):new gJ,594),kHt=!0,FJn(n),ZYn(n),vJ((pP(),k_t),n,new $h),ojn(n),r2(l_t,lct,n),n)}function XAn(n,t,e,i){var r;return(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n]),t))<0&&(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function zAn(n,t,e,i){var r;return(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n]),t))<0&&(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function VAn(n,t,e){var i,r,c,a;if(a=n.b.Ce(t),0==(r=null==(i=n.a.get(a))?Inn(dat,EZn,1,0,5,1):i).length)n.a.set(a,r);else if(c=Ibn(n,t,r))return c.nd(e);return uQ(r,r.length,new VP(t,e)),++n.c,++n.b.g,null}function WAn(n){var t,e,i;for($xn(n),i=new Zm,e=new Ww(n.a.a.b);e.a<e.c.c.length;)kD(i,new KC(t=uG(N3(e),86),!0)),kD(i,new KC(t,!1));RMn(n.c),O4(i,n.b,new IM(Uhn(cT(Klt,1),EZn,382,0,[n.c]))),lDn(n)}function QAn(n,t){var e,i,r;for(r=new Zm,i=new Ww(n.c.a.b);i.a<i.c.c.length;)e=uG(N3(i),60),t.Lb(e)&&(kD(r,new tC(e,!0)),kD(r,new tC(e,!1)));xMn(n.e),I4(r,n.d,new IM(Uhn(cT(Hut,1),EZn,693,0,[n.e])))}function JAn(n){var t,e,i,r;for(e=new Ym,r=new Ww(n.d);r.a<r.c.c.length;)i=uG(N3(r),187),t=uG(i.of((GYn(),Dpt)),18),FX(e.f,t)||vJ(e,t,new oZ(t)),kD(uG(DA(FX(e.f,t)),465).b,i);return new Z_(new Fw(e))}function YAn(n,t){var e,i,r,c,a;for(i=new $4(n.j.c.length),e=null,c=new Ww(n.j);c.a<c.c.c.length;)(r=uG(N3(c),12)).j!=e&&(i.b==i.c||Dxn(i,e,t),q5(i),e=r.j),(a=bDn(r))&&O6(i,a);i.b==i.c||Dxn(i,e,t)}function ZAn(n,t){var e,i;for(i=new N4(n.b,0);i.b<i.d.gc();)MK(i.b<i.d.gc()),e=uG(i.d.Xb(i.c=i.b++),72),uG(oIn(e,(jYn(),Xyt)),278)==(Zrn(),rxt)&&(LQ(i),kD(t.b,e),vR(e,(GYn(),Dpt))||kfn(e,Dpt,n))}function nLn(n){var t,i,r;for(t=x5(new Fz(ix(Xgn(n).a.Kc(),new h))),i=new Fz(ix(qgn(n).a.Kc(),new h));hDn(i);)r=x5(new Fz(ix(Xgn(uG(N9(i),18).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return xwn(t)}function tLn(n,t,e){var i,r,c;i=uG(zDn(n,(XYn(),l$t)),21),r=0,c=0,t.a>e.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<i;)uQ(t,e++,n[o++]);else Twn(n,o,u,a,t,e,i,c)}function cLn(n,t){var e,i,r,c,a,o,u;for(u=t.d,r=t.b.j,o=new Ww(u);o.a<o.c.c.length;)for(a=uG(N3(o),105),c=Inn(ZHt,B2n,28,r.c.length,16,1),vJ(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function aLn(n,t){if(Ean(),vR(n,(GYn(),imt))&&vR(t,imt))return d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a);throw hv(new EM("The BF model order layer assigner requires all real nodes to have a model order."))}function oLn(n,t){if(Pan(),vR(n,(GYn(),imt))&&vR(t,imt))return d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a);throw hv(new EM("The DF model order layer assigner requires all real nodes to have a model order."))}function uLn(n,t){for(n.r=new nhn(n.p),Zb(n.r,n),Qon(n.r.j,n.j),BY(n.j),aq(n.j,t),aq(n.r.e,t),eQ(n),eQ(n.r);0!=n.f.c.length;)L$(uG(zq(n.f,0),132));for(;0!=n.k.c.length;)L$(uG(zq(n.k,0),132));return n.r}function sLn(n,t,e){var i,r,c;if(r=ern(n.Dh(),t),(i=t-n.ji())<0){if(!r)throw hv(new vM(Vtt+t+Wtt));if(!r.rk())throw hv(new vM(Gtt+r.xe()+qtt));(c=n.Ih(r))>=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)&&0!=(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),xUn(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)),299)),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;e<t.gc();)!r.j&&r.o||(c=tjn(t,e))&&(i=uG(c.a,17).a,wFn(n,r,a=uG(c.b,131),e,i,t),e=i+1,r=a);else wFn(n,r,r,1,0,t)}function mLn(n){var t,e,i,r;for(f$(r=new Z_(n.d),new zr),h_n(),t=Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt]),e=0,i=new Ww(r);i.a<i.c.c.length;)T$n(uG(N3(i),105),t[e%t.length]),++e}function vLn(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(r=uG(I6(c),8),!qun(n,i)||!qun(n,r))return!1;i=r}return!(!qun(n,i)||!qun(n,e))}function kLn(n,t){var e,i,r,c,a;return e=$cn(a=n,"x"),din(new sm(t).a,e),i=$cn(a,"y"),gin(new hm(t).a,i),r=$cn(a,wet),pin(new fm(t).a,r),c=$cn(a,bet),min(new lm(t).a,c),c}function yLn(n,t){bBn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function MLn(n,t){var e,i;if(i=0,t.length>0)try{i=vUn(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<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function ELn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function SLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function PLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function CLn(n,t){var e,i,r,c,a,o;for(e=n.b.c.length,r=zq(n.b,t);2*t+1<e&&(o=c=2*t+1,(a=c+1)<e&&n.a.Ne(zq(n.b,a),zq(n.b,c))<0&&(o=a),i=o,!(n.a.Ne(r,zq(n.b,i))<0));)Y8(n.b,t,zq(n.b,i)),t=i;Y8(n.b,t,r)}function ILn(n,t,e){var i,r;return i=e.d,r=e.e,n.g[i.d]<=n.i[t.d]&&n.i[t.d]<=n.i[i.d]&&n.g[r.d]<=n.i[t.d]&&n.i[t.d]<=n.i[r.d]?!(n.i[i.d]<n.i[r.d]):n.i[i.d]<n.i[r.d]}function OLn(n,t){var e;if((e=uG(oIn(t,(jYn(),Kyt)),322))!=n)throw hv(new EM("The hierarchy aware processor "+e+" in child node "+t+" is only allowed if the root node specifies the same hierarchical processor."))}function ALn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new fV(o_t,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(sJ(Nen(n,e=uG(zrn(i,r),179)))){case 2:case 3:!c&&(c=new Zm),mv(c.c,e)}return c||(hZ(),hZ(),zot)}function LLn(n,t,i){var r,c,a,o,u,s;for(s=M0n,a=new Ww($Rn(n.b));a.a<a.c.c.length;)for(c=uG(N3(a),177),u=new Ww($Rn(t.b));u.a<u.c.c.length;)o=uG(N3(u),177),r=xhn(c.a,c.b,o.a,o.b,i),s=e.Math.min(s,r);return s}function NLn(n,t){if(!t)throw hv(new Rv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function $Ln(n,t){var i,r;return F$(t.g,10)&&uG(t.g,10).k==(zIn(),lbt)?M0n:Q6(t)?e.Math.max(0,n.b/2-.5):(i=z4(t))?(r=uM(pK(Omn(i,(jYn(),ETt)))),e.Math.max(0,r/2-.5)):M0n}function DLn(n,t){var i,r;return F$(t.g,10)&&uG(t.g,10).k==(zIn(),lbt)?M0n:Q6(t)?e.Math.max(0,n.b/2-.5):(i=z4(t))?(r=uM(pK(Omn(i,(jYn(),ETt)))),e.Math.max(0,r/2-.5)):M0n}function xLn(n,t){var e,i,r,c;for(GB(),e=null,r=t.Kc();r.Ob();)(i=uG(r.Pb(),131)).o||(kD((c=new Hqn(R$(i.a),IG(i.a),null,uG(i.d.a.ec().Kc().Pb(),18))).c,i.a),mv(n.c,c),e&&kD(e.d,c),e=c)}function RLn(n){var t,e,i,r;for(r=Vwn(n.d,n.e).Kc();r.Ob();)for(i=uG(r.Pb(),12),e=new Ww(n.e==(KQn(),_Rt)?i.e:i.g);e.a<e.c.c.length;)v9(t=uG(N3(e),18))||t.c.i.c==t.d.i.c||(MOn(n,t),++n.f,++n.c)}function KLn(n,t){var e,i;if(t.dc())return hZ(),hZ(),zot;for(kD(i=new Zm,xwn(j1n)),e=1;e<n.f;++e)null==n.a&&fBn(n),n.a[e]&&kD(i,xwn(e));return 1==i.c.length?(hZ(),hZ(),zot):(kD(i,xwn(vZn)),Aqn(t,i))}function FLn(n,t){var e,i,r,c,a,o;e=Hjn(t,o=t.c.i.k!=(zIn(),dbt)?t.d:t.c).i,r=uG(cQ(n.k,o),125),i=n.i[e.p].a,A_(o.i)<(e.c?Ten(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),RKn(xS(DS(RS($S(new uk,0),4),c),a))}function _Ln(n,t,e){var i,r,c;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=gTn(n,fNn(uin(e,uG(r.Pb(),17).a))))&&(!t.b&&(t.b=new f_(cFt,t,4,7)),ttn(t.b,c))}function BLn(n,t,e){var i,r,c;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=gTn(n,fNn(uin(e,uG(r.Pb(),17).a))))&&(!t.c&&(t.c=new f_(cFt,t,5,8)),ttn(t.c,c))}function HLn(n,t,e){var i,r;i=t.a&n.f,t.b=n.b[i],n.b[i]=t,r=t.f&n.f,t.d=n.c[r],n.c[r]=t,e?(t.e=e.e,t.e?t.e.c=t:n.a=t,t.c=e.c,t.c?t.c.e=t:n.e=t):(t.e=n.e,t.c=null,n.e?n.e.c=t:n.a=t,n.e=t),++n.i,++n.g}function ULn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=QA(JA(new WM,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)QA((i.a+=TZn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",hv(new vM(i.a))}function GLn(n){var t,e;return e=-n.a,t=Uhn(cT(JHt,1),N1n,28,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&D1n,t[2]=t[2]+(e/60|0)%10&D1n,t[3]=t[3]+(e%60/10|0)&D1n,t[4]=t[4]+e%10&D1n,mvn(t,0,t.length)}function qLn(n){var t,e,i,r;for(n.g=new rpn(uG(WW(YRt),296)),i=0,KQn(),e=yRt,t=0;t<n.j.c.length;t++)(r=uG(zq(n.j,t),12)).j!=e&&(i!=t&&UV(n.g,e,new WO(xwn(i),xwn(t))),e=r.j,i=t);UV(n.g,e,new WO(xwn(i),xwn(t)))}function XLn(n){var t,e,i,r,c;for(e=0,t=new Ww(n.b);t.a<t.c.c.length;)for(r=new Ww(uG(N3(t),30).a);r.a<r.c.c.length;)for((i=uG(N3(r),10)).p=e++,c=new Ww(i.j);c.a<c.c.c.length;)uG(N3(c),12).p=e++}function zLn(n,t){var e,i,r;if(!(r=iVn((gAn(),kBt),n.Dh(),t)))throw hv(new vM(Gtt+t.xe()+qtt));PP(),uG(r,69).xk()||(r=_3(Nen(kBt,r))),i=uG((e=n.Ih(r))>=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.a<e.c.c.length;)a=(t=uG(N3(e),132)).a,o=t.b,c.a._b(a)||c.a._b(o)||(r=a,i=o,a.e.b+a.j.b>2&&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),299)),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.c.c.length;)for(e=new w7((r=uG(N3(c),12)).b);l$(e.a)||l$(e.b);)i=Ivn(r,uG(l$(e.a)?N3(e.a):N3(e.b),18)).i,n.c[i.p]||nNn(n,i)}function tNn(n){var t,i,r,c,a,o,u;for(o=0,i=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));i.e!=i.i.gc();)u=(t=uG(Zkn(i),27)).g,c=t.f,r=e.Math.sqrt(u*u+c*c),o=e.Math.max(r,o),a=tNn(t),o=e.Math.max(a,o);return o}function eNn(){eNn=E,gRt=new xO("OUTSIDE",0),wRt=new xO("INSIDE",1),dRt=new xO("NEXT_TO_PORT_IF_POSSIBLE",2),bRt=new xO("ALWAYS_SAME_SIDE",3),lRt=new xO("ALWAYS_OTHER_SAME_SIDE",4),pRt=new xO("SPACE_EFFICIENT",5)}function iNn(n,t,e){var i,r,c,a;return Gan(i=y6(n,(gj(),r=new Bk,!!e&&GRn(r,e),r),t),k6(t,Iet)),fCn(t,i),YDn(t,i),kLn(t,i),c=p6(t,"ports"),pRn((a=new oA(n,i)).a,a.b,c),qfn(n,t,i),vhn(n,t,i),i}function rNn(n){var t,e;return e=-n.a,t=Uhn(cT(JHt,1),N1n,28,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&D1n,t[2]=t[2]+(e/60|0)%10&D1n,t[4]=t[4]+(e%60/10|0)&D1n,t[5]=t[5]+e%10&D1n,mvn(t,0,t.length)}function cNn(n){var t;return t=Uhn(cT(JHt,1),N1n,28,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&D1n,t[5]=t[5]+(n/60|0)%10&D1n,t[7]=t[7]+(n%60/10|0)&D1n,t[8]=t[8]+n%10&D1n,mvn(t,0,t.length)}function aNn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+oV(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function oNn(n,t){var i,r,c;for(c=vZn,r=new Ww(Ebn(t));r.a<r.c.c.length;)(i=uG(N3(r),218)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,oNn(n,hpn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function uNn(n,t){var e,i,r;for(r=uG(uG(Y9(n.r,t),21),87).Kc();r.Ob();)(i=uG(r.Pb(),117)).e.b=(e=i.b).pf((XYn(),uDt))?e.ag()==(KQn(),yRt)?-e.Mf().b-uM(pK(e.of(uDt))):uM(pK(e.of(uDt))):e.ag()==(KQn(),yRt)?-e.Mf().b:0}function sNn(n){var t,e,i,r,c,a,o;for(e=AN(n.e),c=vD(HR(D$(ON(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,o=0;o<n.c;o++){for(i=t,a=0;a<n.d;a++)vpn(n.e,new gY(i,r,n.a,n.b))&&HBn(n,a,o,!1,!0),i+=n.a;r+=n.b}}function hNn(n){var t,e,i,r,c;t=n.a,e=n.b,r=n.c,i=new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),c=new MO(r.e.a+r.f.a/2,r.e.b+r.f.b/2),s8(t,i,t.a,t.a.a),s8(t,c,t.c.b,t.c),KIn(i,uG(hyn(t,1),8),n.b.f),KIn(c,uG(hyn(t,t.b-2),8),n.c.f)}function fNn(n){var t;if(t=!1,F$(n,211))return t=!0,uG(n,211).a;if(!t&&F$(n,263)&&uG(n,263).a%1==0)return t=!0,xwn(AL(uG(n,263).a));throw hv(new SM("Id must be a string or an integer: '"+n+"'."))}function lNn(n,t){var e,i,r,c,a,o;for(c=null,r=new dV((!n.a&&(n.a=new qm(n)),n.a));u$n(r);)if(hXn(a=(e=uG(Wxn(r),58)).Dh()),null!=(i=(o=a.o)&&e.Xh(o)?d_(khn(o),e.Mh(o)):null)&&m_(i,t)){c=e;break}return c}function bNn(n,t,e){var i,r,c,a,o;if(man(e,"occurrences"),0==e)return(o=uG(Xwn(nZ(n.a),t),16))?o.gc():0;if(!(a=uG(Xwn(nZ(n.a),t),16)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function wNn(n,t,e){var i,r,c;return man(e,"oldCount"),man(0,"newCount"),((i=uG(Xwn(nZ(n.a),t),16))?i.gc():0)==e&&(man(0,"count"),(c=-((r=uG(Xwn(nZ(n.a),t),16))?r.gc():0))>0?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;r<c;++r)(e=i[r])>0&&(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;r<c;++r)(e=i[r])>0&&(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,(cGn(),$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==(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<e.c.c.length;)(t=uG(N3(e),250)).d.a=c.a+r.a,t.d.b=c.b+r.b,JF(c,r)}function INn(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){qan(n,r=lM((vK(e),e.o+i))),Ocn(n,r);break}i+="[]"}else qan(n,r=lM((vK(t),t.o))),Ocn(n,r);else qan(n,null),Ocn(n,null);n.hl(t)}function ONn(n,t,e,i,r){var c,a,o,u;return xA(u=fK(n,uG(r,58)))!==xA(r)?(o=uG(n.g[e],76),yD(n,e,WPn(n,e,c=R5(t,u))),uN(n.e)&&(kPn(a=VZ(n,9,c.Lk(),r,u,i,!1),new Ken(n.e,9,n.c,o,c,i,!1)),Cen(a)),u):r}function ANn(n,t,e){var i,r,c,a,o,u;for(i=uG(Y9(n.c,t),15),r=uG(Y9(n.c,e),15),c=i.fd(i.gc()),a=r.fd(r.gc());c.Sb()&&a.Sb();)if((o=uG(c.Ub(),17))!=(u=uG(a.Ub(),17)))return d$(o.a,u.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function LNn(n){var t,e,i,r,c,a;for(a=iR(n.c.length),r=new Ww(n);r.a<r.c.c.length;){for(i=uG(N3(r),10),c=new ek,e=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(e);)(t=uG(N9(e),18)).c.i==t.d.i||FV(c,t.d.i);mv(a.c,c)}return a}function NNn(n,t){var e,i;try{return C3(n.a,t)}catch(r){if(F$(r=Ehn(r),33)){try{if(i=vUn(t,j1n,vZn),e=Mj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!F$(c=Ehn(c),130))throw hv(c)}return null}throw hv(r)}}function $Nn(n,t){var e,i,r;if(r=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(r,69).xk()||(r=_3(Nen(kBt,r))),i=uG((e=n.Ih(r))>=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<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(u=c,s=o=a-t.k+i,u+=n.j,s+=n.k,u>=0&&s>=0&&u<n.o&&s<n.p&&(!iTn(t,r,a)&&_Mn(n,c,o)||eTn(t,r,a)&&!BMn(n,c,o)))return!0;return!1}function _Nn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Gfn(Uhn(cT(PNt,1),zZn,8,0,[c.i.n,c.n,c.a])).b+Gfn(Uhn(cT(PNt,1),zZn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(KQn(),kRt)?new MO(t+c.i.c.c.a+e,r):new MO(t-e,r),sR(n.a,0,i)}function BNn(n){var t,e,i;for(t=null,e=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])));hDn(e);)if(i=lCn(uG(N9(e),84)),t){if(t!=i)return!1}else t=i;return!0}function HNn(n,t,e){var i;if(++n.j,t>=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<e?qGn(n.g,t,n.g,t+1,e-t):qGn(n.g,e+1,n.g,e,t-e),uQ(n.g,t,i),n.Pi(t,i,e),n.Ni()),i}function UNn(n,t,e){var i;if(i=uG(n.c.xc(t),16))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw hv(new x9("New Collection violated the Collection spec"))}function GNn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>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,(cGn(),$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<n.length;u++)r=n[u].n,c=n[u].o,i=n[u].d,(a=r.a-i.b-s)<0&&(r.a-=a),(o=t.f).a=e.Math.max(o.a,r.a+c.a),s=r.a+c.a+i.c+h}function QNn(n,t){var e,i,r,c,a,o;return i=uG(uG(cQ(n.g,t.a),42).a,68),r=uG(uG(cQ(n.g,t.b),42).a,68),(e=vzn(c=i.b,a=r.b))>=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<u;++o)if((a=uG(c[o],136)).Bi()==e&&udn(i,a.ld()))return a}else for(o=0;o<u;++o)if(xA((a=uG(c[o],136)).ld())===xA(i))return a;return null}function n$n(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new fV(o_t,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(sJ(Nen(n,e=uG(zrn(i,r),179)))){case 4:case 5:case 6:!c&&(c=new Zm),mv(c.c,e)}return c||(hZ(),hZ(),zot)}function t$n(n,t){var e;if(t<0)throw hv(new wM("Negative exponent"));if(0==t)return xot;if(1==t||Cpn(n,xot)||Cpn(n,_ot))return n;if(!aDn(n,0)){for(e=1;!aDn(n,e);)++e;return j5(Ypn(e*t),t$n($9(n,e),t))}return cCn(n,t)}function e$n(n,t){var e,i,r;if(xA(n)===xA(t))return!0;if(null==n||null==t)return!1;if(n.length!=t.length)return!1;for(e=0;e<n.length;++e)if(i=n[e],r=t[e],!(xA(i)===xA(r)||null!=i&&udn(i,r)))return!1;return!0}function i$n(n){var t,e,i;for(GS(),this.b=Dlt,this.c=(xdn(),ZDt),this.f=(US(),Alt),this.a=n,ET(this,new Tt),fKn(this),i=new Ww(n.b);i.a<i.c.c.length;)(e=uG(N3(i),86)).d||(t=new Zvn(Uhn(cT(xlt,1),EZn,86,0,[e])),kD(n.a,t))}function r$n(n,t,e){var i,r,c,a,o,u;if(!n||0==n.c.length)return null;for(c=new c1(t,!e),r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),72),LOn(c,(zS(),new Xd(i)));return(a=c.i).a=(u=c.n,c.e.b+u.d+u.a),a.b=(o=c.n,c.e.a+o.b+o.c),c}function c$n(n){var t,e,i,r,c,a,o;for(zL(o=D4(n.a),new Pe),e=null,c=0,a=(r=o).length;c<a&&(i=r[c]).k==(zIn(),lbt);++c)(t=uG(oIn(i,(GYn(),Fpt)),64))!=(KQn(),_Rt)&&t!=kRt||(e&&uG(oIn(e,Vpt),15).Fc(i),e=i)}function a$n(n,t,e){var i,r,c,a,o,u;u3(t,n.c.length),o=uG(n.c[t],339),i7(n,t),o.b/2>=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(),39),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,0!=(4&n.Db)&&0==(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<h;)c=(o=e.Math.min(u+1e4,h))-u,(f=n.slice(u,o)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),u=o,r+=c}function w$n(n){var t,e;for(fZ(),this.b=Gut,this.c=Xut,this.g=(_S(),Uut),this.d=(xdn(),ZDt),this.a=n,hKn(this),e=new Ww(n.b);e.a<e.c.c.length;)!(t=uG(N3(e),60)).a&&Mx(Xcn(new fk,Uhn(cT(zut,1),EZn,60,0,[t])),n),t.e=new qZ(t.d)}function d$n(n){var t,e,i,r,c;for(r=n.e.c.length,i=Inn(yat,H3n,15,r,0,1),c=new Ww(n.e);c.a<c.c.c.length;)i[uG(N3(c),153).a]=new lS;for(e=new Ww(n.c);e.a<e.c.c.length;)i[(t=uG(N3(e),289)).c.a].Fc(t),i[t.d.a].Fc(t);return i}function g$n(n,t){var e,i,r,c,a;if(t>=(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.n<n.o;){if(F$(e=(t=uG(n.j?n.j.$i(n.n):n.k.Xb(n.n),76)).Lk(),102)&&0!=(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<n.o}function m$n(){m$n=E,NBt=uG(zrn(gZ((yj(),RBt).qb),6),35),OBt=uG(zrn(gZ(RBt.qb),3),35),ABt=uG(zrn(gZ(RBt.qb),4),35),LBt=uG(zrn(gZ(RBt.qb),5),19),qSn(NBt),qSn(OBt),qSn(ABt),qSn(LBt),$Bt=new IM(Uhn(cT(o_t,1),krt,179,0,[NBt,OBt]))}function v$n(n,t){var e;this.d=new Nk,this.b=t,this.e=new eN(t.Lf()),e=n.u.Hc((eNn(),dRt)),n.u.Hc(wRt)?n.D?this.a=e&&!t.bg():this.a=!0:n.u.Hc(gRt)?this.a=!!e&&!(t.Uf().Kc().Ob()||t.Wf().Kc().Ob()):this.a=!1}function k$n(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=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),_Rt)?-i.Mf().a-uM(pK(i.of(uDt))):e+uM(pK(i.of(uDt))):i.ag()==(KQn(),_Rt)?-i.Mf().a:e}function y$n(n,t){var e,i,r;e=uG(oIn(n,(jYn(),Byt)),88),r=uG(zDn(t,eTt),64),(i=uG(oIn(n,JMt),101))!=($Pn(),uRt)&&i!=sRt?r==(KQn(),FRt)&&(r=RGn(t,e))==FRt&&(r=Ipn(e)):r=lzn(t)>0?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;i<r;i++)u3(i,a.c.length),(c=uG(a.c[i],113)).c&&NLn(c.d,t.a);for(e=r;e<a.c.length;e++)u3(e,a.c.length),(c=uG(a.c[e],113)).c&&NLn(c.d,t.b)}function j$n(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Rz(i.a,r.a))<0?sHn(n,t,e):c>0&&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),39),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.a<i.c.c.length;)for(c=new Ww(uG(N3(i),30).a);c.a<c.c.c.length;)r=uG(N3(c),10),(t=uG(ain(e,a=n.g[r.p]),15))||Akn(e,a,t=new Zm),t.Fc(r);return e}function A$n(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (startX: ",Oj(t,n.j),t.a+=", startY: ",Oj(t,n.k),t.a+=", endX: ",Oj(t,n.b),t.a+=", endY: ",Oj(t,n.c),t.a+=", identifier: ",VA(t,n.d),t.a+=")",t.a)}function L$n(n){var t;return 0!=(64&n.Db)?Wwn(n):((t=new fx(Wwn(n))).a+=" (ordered: ",Lj(t,0!=(256&n.Bb)),t.a+=", unique: ",Lj(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",Aj(t,n.s),t.a+=", upperBound: ",Aj(t,n.t),t.a+=")",t.a)}function N$n(n,t,e,i,r,c,a,o){var u;return F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=i,Qdn(n,r),Ydn(n,c),Wdn(n,a),Jdn(n,!1),mdn(n,!0),Cgn(n,o),ddn(n,!0),Pcn(n,0),n.b=0,Ccn(n,1),(u=CCn(n,t,null))&&u.oj(),Sgn(n,!1),n}function $$n(n,t){var i,r;return uG(U1(n.a,t),525)||(i=new e9(t),t9(),B_(i,$$n(n,r1(r=Nut?null:i.c,0,e.Math.max(0,ax(r,$Cn(46)))))),0==(Nut?null:i.c).length&&RK(i,new G),r2(n.a,Nut?null:i.c,i),i)}function D$n(n,t){var e;n.b=t,n.g=new Zm,e=q$n(n.b),n.e=e,n.f=e,n.c=oM(gK(oIn(n.b,(MEn(),est)))),n.a=pK(oIn(n.b,(XYn(),c$t))),null==n.a&&(n.a=1),uM(n.a)>1?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<c.c.c.length;){for(kfn(r=uG(N3(c),10),(jYn(),byt),(nMn(),ONt)),r.o.a=i,a=yOn(r,(KQn(),kRt)).Kc();a.Ob();)uG(a.Pb(),12).n.a=i;i+=o}}function R$n(n,t,e){var i,r,c,a,o,u;return(o=n.pl(e))!=e?(a=n.g[t],u=o,yD(n,t,n.Zi(t,u)),c=a,n.Ri(t,u,c),n.al()&&(i=e,r=n.Oj(i,null),!uG(o,54).Ph()&&(r=n.Nj(u,r)),r&&r.oj()),uN(n.e)&&Yv(n,n.Ij(9,e,o,t,!1)),o):e}function K$n(n,t){var e,i,r;for(e=new Ww(n.a.a);e.a<e.c.c.length;)uG(N3(e),194).g=!0;for(r=new Ww(n.a.b);r.a<r.c.c.length;)(i=uG(N3(r),86)).k=oM(gK(n.e.Kb(new WO(i,t)))),i.d.g=i.d.g&oM(gK(n.e.Kb(new WO(i,t))));return n}function F$n(n,t){var e;if(0!=n.c.length){if(2==n.c.length)Gqn((u3(0,n.c.length),uG(n.c[0],10)),(Ajn(),$xt)),Gqn((u3(1,n.c.length),uG(n.c[1],10)),Dxt);else for(e=new Ww(n);e.a<e.c.c.length;)Gqn(uG(N3(e),10),t);n.c.length=0}}function _$n(n){var t,e,i,r,c;if(e=new nB(t=uG(Mj(YRt),9),uG(MF(t,t.length),9),0),c=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(c.j);r.a<r.c.c.length;)xA(oIn(i=uG(N3(r),12),rmt))===xA(n)&&Dx(new w7(i.b))&&Mon(e,i.j);return e}function B$n(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new Fz(ix(Xgn(e).a.Kc(),new h));hDn(i);){for(c=new Fz(ix(qgn(a=uG(N9(i),18).d.i).a.Kc(),new h));hDn(c);)(r=uG(N9(c),18)).c.i==t&&(n.a[r.p]=!0);B$n(n,t,a)}n.d[e.p]=!0}}function H$n(n,t){var e,i,r,c,a,o,u;if(1==(i=Cdn(254&n.Db)))n.Eb=null;else if(c=Kcn(n.Eb),2==i)r=jTn(n,t),n.Eb=c[0==r?1:0];else{for(a=Inn(dat,EZn,1,i-1,5,1),e=2,o=0,u=0;e<=128;e<<=1)e==t?++o:0!=(n.Db&e)&&(a[u++]=c[o++]);n.Eb=a}n.Db&=~t}function U$n(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=w1n}return t}function G$n(n,t,e,i,r){var c,a,o,u;if(xA(n)!==xA(t)||i!=r)for(o=0;o<i;o++){for(a=0,c=n[o],u=0;u<r;u++)a=Lgn(Lgn(Ngn(E3(c,L0n),E3(t[u],L0n)),E3(e[o+u],L0n)),E3(pz(a),L0n)),e[o+u]=pz(a),a=Dz(a,32);e[o+r]=pz(a)}else _Un(n,i,e)}function q$n(n){var t,i,r,c,a,o,u,s,h,f,l;for(f=0,h=0,u=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),567)).b&&sXn(i),f+=(l=(t=i.a).a)+(o=t.b),h+=l*o;return s=e.Math.sqrt(400*u*h-4*h+f*f)+f,0==(a=2*(100*u-1))?s:s/a}function X$n(n,t){0!=t.b&&(isNaN(n.s)?n.s=uM((MK(0!=t.b),pK(t.a.a.c))):n.s=e.Math.min(n.s,uM((MK(0!=t.b),pK(t.a.a.c)))),isNaN(n.c)?n.c=uM((MK(0!=t.b),pK(t.c.b.c))):n.c=e.Math.max(n.c,uM((MK(0!=t.b),pK(t.c.b.c)))))}function z$n(n){var t,e,i;for(t=null,e=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])));hDn(e);)if(i=lCn(uG(N9(e),84)),t){if(t!=R0(i))return!0}else t=R0(i);return!1}function V$n(n,t){var e,i,r,c;n.Pj()?(e=n.i,c=n.Qj(),z9(n,t),i=n.Ij(3,null,t,e,c),n.Mj()?(r=n.Nj(t,null),n.Tj()&&(r=n.Uj(t,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(z9(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function W$n(n,t){var e,i,r;if(!_V(n.a,t.b))throw hv(new kM("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=n.a.a.ec().Kc();i.Ob();)if(e=uG(i.Pb(),68),ofn(t.b,e))nj(n.b.a,t.b,e),r=!0;else if(r)break}function Q$n(n){var t;if(!n.a)throw hv(new kM("IDataType class expected for layout option "+n.f));if(null==(t=f5(n.a)))throw hv(new kM("Couldn't create new instance of property '"+n.f+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return uG(t,423)}function J$n(n){var t,e,i,r,c;return(c=n.Ph())&&c.Vh()&&(r=mwn(n,c))!=c?(e=n.Fh(),i=(t=n.Fh())>=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<i.length;a++)if(r=i[a],n.b.Be(t,r.ld()))return 1==i.length?(i.length=0,PF(n.a,c)):i.splice(a,1),--n.c,++n.b.g,r.md();return null}function Z$n(n){var t,e,i,r,c,a,o;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(u3(e,r.c.length),a=uG(r.c[e],153),i=e+1;i<r.c.length;++i)u3(i,r.c.length),o=uG(r.c[i],153),t=atn(a.d,o.d)-n.a[a.a][o.a],c+=n.i[a.a][o.a]*t*t;return c}function nDn(n,t){var e;if(!vR(t,(jYn(),gMt))&&(e=oEn(uG(oIn(t,Uwt),371),uG(oIn(n,gMt),171)),kfn(t,Uwt,e),!hDn(new Fz(ix(Ggn(t).a.Kc(),new h)))))switch(e.g){case 1:kfn(t,gMt,(Gpn(),Cmt));break;case 2:kfn(t,gMt,(Gpn(),Omt))}}function tDn(n,t){var e;mBn(n),n.a=(e=new rT,kS(new fX(null,new h3(t.d,16)),new Dg(e)),e),WBn(n,uG(oIn(t.b,(jYn(),Yyt)),349)),Qyn(n),jDn(n),gEn(n),Jyn(n),Hzn(n,t),kS(sin(new fX(null,y4(_W(n.b).a)),new Dr),new xr),t.a=!1,n.a=null}function eDn(){eDn=E,XPt=new mL(J9n,(qx(),!1)),zPt=new mL(Y9n,7),xwn(0),ZPt=new mL(Z9n,xwn(0)),QPt=new mL(n7n,xwn(-1)),mbn(),nCt=new mL(t7n,tCt=xCt),Pln(),VPt=new mL(e7n,WPt=wPt),i3(),JPt=new mL(i7n,YPt=_Ct)}function iDn(){iIn.call(this,aet,(gj(),xKt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function rDn(){rDn=E,jFt=new fA(F6n,0),yFt=new fA("INSIDE_SELF_LOOPS",1),MFt=new fA("MULTI_EDGES",2),kFt=new fA("EDGE_LABELS",3),TFt=new fA("PORTS",4),mFt=new fA("COMPOUND",5),pFt=new fA("CLUSTERS",6),vFt=new fA("DISCONNECTED",7)}function cDn(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),++n.j,n.qj(t,n.Zi(t,e)),i=n.Ij(3,null,e,t,c),n.Mj()&&(r=n.Nj(e,null))?(r.nj(i),r.oj()):n.Jj(i)):(++n.j,n.qj(t,n.Zi(t,e)),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function aDn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw hv(new wM("Negative bit address"));if((r=t>>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 0!=(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<n.i;++a)if(PMn(u=i[a])==e&&(!u.d&&(u.d=new MD(g_t,u,1)),r=u.d,(o=uG(e.Mh(PHn(c,c.Cb,c.Db>>16)),15).dd(c))<r.i))return uDn(n,uG(zrn(r,o),89));return t}function sDn(n,t,e){var i,r=sZn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?uZn=c:(!(i=t&&t.prototype)&&(i=sZn[t]),(uZn=o0(i)).Sm=e,!t&&(uZn.Tm=j),r[n]=uZn);for(var o=3;o<arguments.length;++o)arguments[o].prototype=uZn;a&&(uZn.Rm=a)}function hDn(n){for(var t;!uG(WW(n.a),51).Ob();){if(n.d=Mln(n),!n.d)return!1;if(n.a=uG(n.d.Pb(),51),F$(n.a,37)){if(t=uG(n.a,37),n.a=t.a,!n.b&&(n.b=new ND),A6(n.b,n.d),t.b)for(;!LM(t.b);)A6(n.b,uG(RV(t.b),51));n.d=t.d}}return!0}function fDn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Ww(Ebn(t));i.a<i.c.c.length;)e=uG(N3(i),218),n.c[e.c]||(n.c[e.c]=!0,c=hpn(e,t),e.f?r+=fDn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,FV(n.p,e),r+=fDn(n,c)));return r}function lDn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a<i.c.c.length;)t=uG(N3(i),86),tJ(0),(r=0)>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=VUn(n,c=new Zm),t=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(t.j);r.a<r.c.c.length;)xA(oIn(i=uG(N3(r),12),rmt))===xA(n)&&(a=e.Math.max(a,VUn(i,c)));return 0==c.c.length||kfn(n,emt,a),-1!=a?c:null}function wDn(n,t,e){var i,r,c,a,o,u;r=(i=(c=uG(zq(t.e,0),18).c).i).k,o=(a=(u=uG(zq(e.g,0),18).d).i).k,r==(zIn(),wbt)?kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)):kfn(n,(GYn(),Zpt),c),kfn(n,(GYn(),nmt),o==wbt?uG(oIn(a,nmt),12):u)}function dDn(n){var t,e,i;this.c=n,i=uG(oIn(n,(jYn(),Byt)),88),t=uM(pK(oIn(n,dyt))),e=uM(pK(oIn(n,KTt))),i==(xdn(),JDt)||i==YDt||i==ZDt?this.b=t*e:this.b=1/(t*e),this.j=uM(pK(oIn(n,STt))),this.e=uM(pK(oIn(n,ETt))),this.f=n.b.c.length}function gDn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&b0n))&&(e|=-1048576),t<22?(a=e>>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.a<i.c.c.length;)for(c=new Ww(uG(N3(i),30).a);c.a<c.c.c.length;)for((r=uG(N3(c),10)).k==(zIn(),bbt)&&Gqn(r,t),e=new Fz(ix(Xgn(r).a.Kc(),new h));hDn(e);)Nhn(uG(N9(e),18),t)}function vDn(n,t){var e,i,r;for(t.Ug("Layer constraint preprocessing",1),e=new Zm,r=new N4(n.a,0);r.b<r.d.gc();)MK(r.b<r.d.gc()),sfn(i=uG(r.d.Xb(r.c=r.b++),10))&&(GPn(i),mv(e.c,i),LQ(r));0==e.c.length||kfn(n,(GYn(),Upt),e),t.Vg()}function kDn(n){var t,e;for(n.e=Inn(YHt,W1n,28,n.p.c.length,15,1),n.k=Inn(YHt,W1n,28,n.p.c.length,15,1),e=new Ww(n.p);e.a<e.c.c.length;)t=uG(N3(e),10),n.e[t.p]=x5(new Fz(ix(qgn(t).a.Kc(),new h))),n.k[t.p]=x5(new Fz(ix(Xgn(t).a.Kc(),new h)))}function yDn(n){var t,e,i,r,c;for(i=0,n.q=new Zm,t=new ek,c=new Ww(n.p);c.a<c.c.c.length;){for((r=uG(N3(c),10)).p=i,e=new Fz(ix(Xgn(r).a.Kc(),new h));hDn(e);)FV(t,uG(N9(e),18).d.i);t.a.Bc(r),kD(n.q,new oX(t)),t.a.$b(),++i}}function MDn(n,t){var e,i,r,c,a,o,u,s,h;if(n.a.f>0&&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<h;++o)if((r=i[o]).Bi()==c&&r.Fb(s))return MDn(n,s),!0;return!1}function TDn(n){var t,e,i,r,c,a,o;if((t=n.qi(Drt))&&null!=(o=mK(Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"settingDelegates")))){for(e=new Zm,c=0,a=(r=WGn(o,"\\w+")).length;c<a;++c)i=r[c],mv(e.c,i);return e}return hZ(),hZ(),zot}function jDn(n){var t,e,i,r;for(r=uG(Y9(n.a,(gPn(),ddt)),15).Kc();r.Ob();)pW(n,i=uG(r.Pb(),105),(e=(t=kz(i.k)).Hc((KQn(),yRt))?t.Hc(kRt)?t.Hc(KRt)?t.Hc(_Rt)?null:ydt:Tdt:Mdt:kdt)[0],(gon(),jdt),0),pW(n,i,e[1],Edt,1),pW(n,i,e[2],Sdt,1)}function EDn(n,t){var e,i;UFn(n,t,e=CHn(t)),BPn(n.a,uG(oIn(HQ(t.b),(GYn(),dmt)),234)),kUn(n),OPn(n,t),i=Inn(YHt,W1n,28,t.b.j.c.length,15,1),OWn(n,t,(KQn(),yRt),i,e),OWn(n,t,kRt,i,e),OWn(n,t,KRt,i,e),OWn(n,t,_Rt,i,e),n.a=null,n.c=null,n.b=null}function SDn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Czn(n.e),!n.e&&(n.e=new f_(aFt,n,7,4)),void CW(n.e,uG(e,16));case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Czn(n.d),!n.d&&(n.d=new f_(aFt,n,8,5)),void CW(n.d,uG(e,16))}ISn(n,t,e)}function PDn(n,t){var e,i,r,c,a;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(a=uG(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(xA(e)===xA(r)||null!=e&&udn(e,r)))return!1;return!0}function CDn(n,t){var e,i,r,c;for((c=uG(l8(sin(sin(new fX(null,new h3(t.b,16)),new Re),new Ke),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Jc(new Fe),e=0,r=c.Kc();r.Ob();)-1==(i=uG(r.Pb(),12)).p&&NDn(n,i,e++)}function IDn(n){switch(n.g){case 0:return new pl;case 1:return new dl;case 2:return new gl;case 3:return new FI;case 4:return new iz;default:throw hv(new vM("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function ODn(n){switch(n.g){case 0:return new ez;case 1:return new il;case 2:return new el;case 3:return new nl;case 4:return new tL;default:throw hv(new vM("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function ADn(n,t){var e,i,r,c,a;s8(i=new lS,t,i.c.b,i.c);do{for(MK(0!=i.b),e=uG(Lrn(i,i.a.a),39),n.b[e.g]=1,c=Fkn(e.d,0);c.b!=c.d.c;)a=(r=uG(I6(c),65)).c,1==n.b[a.g]?aq(n.a,r):2==n.b[a.g]?n.b[a.g]=1:s8(i,a,i.c.b,i.c)}while(0!=i.b)}function LDn(n,t,e){var i;i=null,t&&(i=t.d),CEn(n,new FC(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),CEn(n,new FC(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),CEn(n,new FC(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),CEn(n,new FC(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function NDn(n,t,e){var i,r,c;for(t.p=e,c=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(t),new Wd(t)])));hDn(c);)-1==(i=uG(N9(c),12)).p&&NDn(n,i,e);if(t.i.k==(zIn(),wbt))for(r=new Ww(t.i.j);r.a<r.c.c.length;)(i=uG(N3(r),12))!=t&&-1==i.p&&NDn(n,i,e)}function $Dn(n,t){var e,i,r,c,a;for(i=new u8,c=g8(new IM(n.g)).a.ec().Kc();c.Ob();){if(!(r=uG(c.Pb(),10))){t.bh("There are no classes in a balanced layout.");break}(e=uG(ain(i,a=n.j[r.p]),15))||Akn(i,a,e=new Zm),e.Fc(r)}return i}function DDn(n){var t,i,r,c,a;if(c=uG(l8(_0(f3(n)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),r=B3n,c.gc()>=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;e<r;e++)if(!xQ(n.Xb(e),i.Xb(e)))return!1;return!0}return OMn(n.Kc(),i.Kc())}function KDn(n,t,e,i,r,c){var a,o,u,s;for(o=!Qj(JJ(n.Oc(),new hd(new Ye))).Bd((vS(),Kut)),a=n,c==(xdn(),nxt)&&(a=Spn(a)),s=a.Kc();s.Ob();)(u=uG(s.Pb(),72)).n.a=t.a,u.n.b=o?t.b+(i.b-u.o.b)/2:r?t.b:t.b+i.b-u.o.b,t.a+=u.o.a+e}function FDn(n,t){var e,i,r;for(t.Ug("Port side processing",1),r=new Ww(n.a);r.a<r.c.c.length;)Tqn(uG(N3(r),10));for(e=new Ww(n.b);e.a<e.c.c.length;)for(i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)Tqn(uG(N3(i),10));t.Vg()}function _Dn(n,t,e){var i,r,c,a;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=v6(e,uG(r.Pb(),17).a))&&(a=Ncn(k6(c,get),t),vJ(n.f,a,c),Iet in c.a&&Gan(a,k6(c,Iet)),fCn(c,a),kLn(c,a))}function BDn(n,t,e){var i,r,c,a,o;if(!(o=e)&&(o=xG(new fy,0)),o.Ug(K4n,1),JVn(n.c,t),1==(a=SWn(n.a,t)).gc())azn(uG(a.Xb(0),36),o);else for(c=1/a.gc(),r=a.Kc();r.Ob();){if(i=uG(r.Pb(),36),e.$g())return;azn(i,o.eh(c))}xM(n.a,a,t),$_n(t),o.Vg()}function HDn(n,t,e){var i,r,c,a,o;if(!(r=n.f)&&(r=uG(n.a.a.ec().Kc().Pb(),60)),TEn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=uG(a.Pb(),60))!=r&&((o=Q6(c)).f.d?(c.d.d+=i+Z2n,c.d.a-=i+Z2n):o.f.a&&(c.d.a-=i+Z2n))}function UDn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w;return o=i-n,u=r-t,s=(a=e.Math.atan2(o,u))+_3n,h=a-_3n,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,n7(Uhn(cT(PNt,1),zZn,8,0,[new MO(f,b),new MO(l,w)]))}function GDn(n,t,i,r){var c,a,o,u,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=uM(n.p[l.p])+uM(n.d[a.p])-a.d.d,(s=ion(a,r))&&(h=n.g[s.p],o=uM(n.p[h.p])+uM(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,u-(o+y$(n.k,a,s))))}while(f!=a);return c}function qDn(n,t,i,r){var c,a,o,u,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=uM(n.p[l.p])+uM(n.d[a.p])+a.o.b+a.d.a,(s=nfn(a,r))&&(h=n.g[s.p],u=uM(n.p[h.p])+uM(n.d[s.p])-s.d.d,c=e.Math.min(c,u-(o+y$(n.k,a,s))))}while(f!=a);return c}function XDn(n,t){var e;if(t.Ug("Equal Whitespace Eliminator",1),!vnn(n,(lBn(),SOt)))throw hv(new jM("The graph does not contain rows."));Ewn(uG(zDn(n,SOt),15),uM(pK(zDn(n,vOt))),(e=uM(pK(zDn(n,pOt))),uM(pK(zDn(n,(S_n(),bAt)))),e)),t.Vg()}function zDn(n,t){var e,i;return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),null!=(i=Lmn(n.o,t))?i:(F$(e=t.Sg(),4)&&(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))),e)}function VDn(){VDn=E,Bxt=new NO("H_LEFT",0),_xt=new NO("H_CENTER",1),Uxt=new NO("H_RIGHT",2),Vxt=new NO("V_TOP",3),zxt=new NO("V_CENTER",4),Xxt=new NO("V_BOTTOM",5),Gxt=new NO("INSIDE",6),qxt=new NO("OUTSIDE",7),Hxt=new NO("H_PRIORITY",8)}function WDn(n,t){var e,i,r,c,a,o,u;if(!t.f)throw hv(new vM("The input edge is not a tree edge."));for(c=null,r=vZn,i=new Ww(n.d);i.a<i.c.c.length;)o=(e=uG(N3(i),218)).d,u=e.e,ILn(n,o,t)&&!ILn(n,u,t)&&(a=u.e-o.e-e.a)<r&&(r=a,c=e);return c}function QDn(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=Z$n(n),e=M0n;do{for(t>0&&(r=e),a=new Ww(n.f.e);a.a<a.c.c.length;)oM(gK(oIn(c=uG(N3(a),153),(Bjn(),alt))))||(i=uGn(n,c),JF(dL(c.d),i));e=Z$n(n)}while(!oQ(n,t++,r,e))}}function JDn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.a<i.c.c.length;)r=(e=uG(N3(i),72)).n,n.a==(qhn(),udt)||n.i==(KQn(),kRt)?r.a=c:n.a==sdt||n.i==(KQn(),_Rt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,JF(r,t),a+=e.o.b+n.e}function YDn(n,t){var e,i,r,c,a;(c=m6(n,"individualSpacings"))&&(!vnn(t,(XYn(),ODt))&&(e=new Qu,Myn(t,ODt,e)),r=uG(zDn(t,ODt),385),i=null,(a=c)&&(i=new JE(a,Yon(a,Inn($ot,zZn,2,0,6,1)))),i&&z8(i,new cA(a,r)))}function ZDn(n,t){var e,i,r,c,a,o;return c=null,(Ket in(a=n).a||Fet in a.a||Met in a.a)&&(o=Qhn(t),i=m6(a,Ket),Xpn(new um(o).a,i),r=m6(a,Fet),zpn(new mm(o).a,r),e=p6(a,Met),lPn(new ym(o).a,e),c=e),c}function nxn(n,t){var e,i,r;if(t===n)return!0;if(F$(t,552)){if(r=uG(t,849),n.a.d!=r.a.d||uY(n).gc()!=uY(r).gc())return!1;for(i=uY(r).Kc();i.Ob();)if(S2(n,(e=uG(i.Pb(),425)).a.ld())!=uG(e.a.md(),16).gc())return!1;return!0}return!1}function txn(n){var t,e,i,r;return t=i=uG(n.a,17).a,e=r=uG(n.b,17).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(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.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.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&&r<B3n?(e=GDn(n.a,i.i,r,n.c),Grn(n.a,i.i,-e),e>0):r<0&&-r<B3n&&(e=qDn(n.a,i.i,-r,n.c),Grn(n.a,i.i,e),e>0)}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<s.c.c.length;)o=(u=uG(N3(s),27)).g,a=u.f,ycn(u,u.i+c*r),Mcn(u,u.j+i*e),kcn(u,u.g+r),vcn(u,n.a),++c,tLn(u,new MO(u.g,u.f),new MO(o,a))}function cxn(n){var t,e,i,r,c,a,o;if(null==n)return null;for(o=n.length,a=Inn(tUt,ret,28,r=(o+1)/2|0,15,1),o%2!=0&&(a[--r]=V_n((s3(o-1,n.length),n.charCodeAt(o-1)))),e=0,i=0;e<r;++e)t=V_n(VJ(n,i++)),c=V_n(VJ(n,i++)),a[e]=(t<<4|c)<<24>>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<c.c.c.length;)if((r=uG(N3(c),125)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=UOn(r),e=r.e-uG(a.a,17).a+1;e<r.e+uG(a.b,17).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function uxn(n){var t,i,r,c,a,o,u;for(r=M0n,i=T0n,t=new Ww(n.e.b);t.a<t.c.c.length;)for(a=new Ww(uG(N3(t),30).a);a.a<a.c.c.length;)c=uG(N3(a),10),o=(u=uM(n.p[c.p]))+uM(n.b[n.g[c.p].p]),r=e.Math.min(r,u),i=e.Math.max(i,o);return i-r}function sxn(n){var t,e,i,r;return ZXn(),t=-1==(i=xL(n,$Cn(35)))?n:(Knn(0,i,n.length),n.substr(0,i)),e=-1==i?null:(s3(i+1,n.length+1),n.substr(i+1)),(r=_5(GFt,t))?null!=e&&(r=Vln(r,(tJ(e),e))):(r=LYn(t),G8(GFt,t,r),null!=e&&(r=Vln(r,e))),r}function hxn(n,t,e,i){var r,c,a,o,u,s;for(u=null,o=0,s=(r=AHn(n,t)).gc();o<s;++o)if(m_(i,BJ(Nen(n,c=uG(r.Xb(o),179)))))if(a=HJ(Nen(n,c)),null==e){if(null==a)return c;!u&&(u=c)}else{if(m_(e,a))return c;null==a&&!u&&(u=c)}return null}function fxn(n,t,e,i){var r,c,a,o,u,s;for(u=null,o=0,s=(r=LHn(n,t)).gc();o<s;++o)if(m_(i,BJ(Nen(n,c=uG(r.Xb(o),179)))))if(a=HJ(Nen(n,c)),null==e){if(null==a)return c;!u&&(u=c)}else{if(m_(e,a))return c;null==a&&!u&&(u=c)}return null}function lxn(n,t,e){var i,r,c,a,o,u;if(a=new ls,o=VKn(n.e.Dh(),t),i=uG(n.g,124),PP(),uG(t,69).xk())for(c=0;c<n.i;++c)r=i[c],o.am(r.Lk())&&ttn(a,r);else for(c=0;c<n.i;++c)r=i[c],o.am(r.Lk())&&(u=r.md(),ttn(a,e?ONn(n,t,c,a.i,u):u));return g5(a)}function bxn(n){var t,e,i,r,c,a,o;if(n&&(t=n.qi(Drt))&&null!=(a=mK(Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"conversionDelegates")))){for(o=new Zm,r=0,c=(i=WGn(a,"\\w+")).length;r<c;++r)e=i[r],mv(o.c,e);return o}return hZ(),hZ(),zot}function wxn(n,t){var e,i,r,c,a,o;for(c=(1==t?$lt:Nlt).a.ec().Kc();c.Ob();)for(r=uG(c.Pb(),88),o=uG(Y9(n.f.c,r),21).Kc();o.Ob();)switch(a=uG(o.Pb(),42),i=uG(a.b,86),e=uG(a.a,194).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function dxn(n,t){var e,i,r,c;for(e=new rpn(Qdt),vAn(),r=0,c=(i=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;r<c;++r)yF(e,i[r],new Zm);return kS(YJ(JJ(sin(new fX(null,new h3(n.b,16)),new Ze),new ni),new bg(t)),new wg(e)),e}function gxn(n,t,i){var r,c,a,o,u,s,h,f;for(a=t.Kc();a.Ob();)s=(c=uG(a.Pb(),27)).i+c.g/2,f=c.j+c.f/2,u=s-((o=n.f).i+o.g/2),h=f-(o.j+o.f/2),r=e.Math.sqrt(u*u+h*h),u*=n.e/r,h*=n.e/r,i?(s-=u,f-=h):(s+=u,f+=h),ycn(c,s-c.g/2),Mcn(c,f-c.f/2)}function pxn(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=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;o<u;++o){for(c=a[o],e=new KG(-1==s?n[0]:n[s],t,(Cwn(),hjt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)vR(c[i],(GYn(),imt))&&vR(c[r],imt)&&rYn(e,c[i],c[r])>0&&++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<e.c.c.length;)(t=uG(N3(e),316)).g=t.i;for(i=new Ww(n.a.b);i.a<i.c.c.length;)uG(N3(i),60).i=T0n;return n.b.cf(n),n}function yxn(n,t){var e,i,r,c,a;if(t<2*n.b)throw hv(new vM("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)kD(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)kD(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)kD(n.e,1)}function Mxn(n,t){var e,i,r,c,a;if(c=t,!(a=uG(kan(UW(n.i),c),27)))throw hv(new SM("Unable to find elk node for json object '"+k6(c,Iet)+"' Panic!"));i=p6(c,"edges"),ENn((e=new JO(n,a)).a,e.b,i),r=p6(c,pet),vEn(new nm(n).a,r)}function Txn(n,t,e,i){var r,c,a,o,u;if(null!=i){if(r=n.d[t])for(c=r.g,u=r.i,o=0;o<u;++o)if((a=uG(c[o],136)).Bi()==e&&udn(i,a.ld()))return o}else if(r=n.d[t])for(c=r.g,u=r.i,o=0;o<u;++o)if(xA((a=uG(c[o],136)).ld())===xA(i))return o;return-1}function jxn(n,t){var e,i;return F$(e=null==t?DA(FX(n.f,null)):_P(n.i,t),241)?((i=uG(e,241)).zi(),i):F$(e,507)?((i=uG(e,2037).a)&&(null==i.yb||(null==t?VAn(n.f,null,i):kgn(n.i,t,i))),i):null}function Exn(n){var t,e,i,r,c,a,o;if(L_n(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=_en(n),e=Inn(tUt,ret,28,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=pHt[t[2*i]]))return null;if(-1==(o=pHt[t[2*i+1]]))return null;e[i]=(a<<4|o)<<24>>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<n.i;++a)c=r[a],u.am(c.Lk())&&ttn(o,c);else for(a=0;a<n.i;++a)c=r[a],u.am(c.Lk())&&(s=c.md(),ttn(o,i?ONn(n,t,a,o.i,s):s));return gmn(o,e)}function Ixn(n,t){var i,r,c,a,o,u;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Ww(t.j);a.a<a.c.c.length;)for(i=new Ww(uG(N3(a),12).g);i.a<i.c.c.length;)t!=(u=uG(N3(i),18).d.i)&&(o=Ixn(n,u),c=e.Math.max(c,o+1));return $pn(n,t,c),c}function Oxn(n,t){var i,r,c,a,o,u;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Ww(t.j);a.a<a.c.c.length;)for(i=new Ww(uG(N3(a),12).e);i.a<i.c.c.length;)t!=(u=uG(N3(i),18).c.i)&&(o=Oxn(n,u),c=e.Math.max(c,o+1));return mMn(n,t,c),c}function Axn(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(u3(i,n.c.length),c=uG(n.c[i],10),r=i;r>0&&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<o;++a)if(0!=KAn(r=c[a]).length){if(null==(u=NNn(n,r)))return null;Mon(s,uG(u,22))}return s}function Nxn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)s3(i,n.length),xL(".*+?{[()|\\^$",$Cn(e=n.charCodeAt(i)))>=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.a<i.c.c.length;)t=uG(N3(i),86),tJ(0),(r=0)>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+=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.a<i.c.c.length;)Epn(e=uG(N3(i),10))&&(c=new kkn(e),kfn(e,(GYn(),vmt),c),CUn(c),kS(YJ(sin(new fX(null,new h3((r=c).d,16)),new Hi),new Ui),new Gi),nFn(r));t.Vg()}function _xn(n){var t,e,i,r,c,a,o,u;t=!0,r=null,c=null;n:for(u=new Ww(n.a);u.a<u.c.c.length;)for(i=new Fz(ix(qgn(o=uG(N3(u),10)).a.Kc(),new h));hDn(i);){if(e=uG(N9(i),18),r&&r!=o){t=!1;break n}if(r=o,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function Bxn(n,t,e){var i,r,c,a,o,u;for(c=-1,o=-1,a=0;a<t.c.length&&(u3(a,t.c.length),!((r=uG(t.c[a],339)).c>n.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;a<e.length;a+=2)rSn(o,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new fV(c_t,n,0,3)),i=n.Ab,c=0;c<0;++c)i=MQ(uG(zrn(i,i.i-1),598));ttn(i,r)}function Uxn(n,t,e){var i,r,c;for(fF.call(this,new Zm),this.a=t,this.b=e,this.e=n,n.b&&sXn(n),i=n.a,this.d=hY(i.a,this.a),this.c=hY(i.b,this.b),Pdn(this,this.d,this.c),sNn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=uG(c.Pb(),272)).c.c.length>0&&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(),289)).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<e.c.c.length;)o9(new fX(null,new h3(uG(N3(e),18).b,16)),new pe)&&++t;for(i=new Ww(n.g);i.a<i.c.c.length;)o9(new fX(null,new h3(uG(N3(i),18).b,16)),new me)&&++t;return t>=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;s<e.b;s++)u=uG(hyn(e,s),8),s8(i,a,i.c.b,i.c),o=vD(JF(new eN(a),u),.5),JF(o,vD(new O2(Tln(c)),r)),s8(i,o,i.c.b,i.c),a=u,c=0==t?qdn(c):Udn(c);aq(i,(MK(0!=e.b),uG(e.c.b.c,8)))}function zxn(n){return VDn(),!(qsn(X1(WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[qxt])),n))>1||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.a<c.c.c.length;)(i=uG(N3(c),274)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&aq(t,i.b));for(r=new Ww(n.i);r.a<r.c.c.length;)(i=uG(N3(r),274)).a.s<0&&i.c>0&&(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;c<n.i;++c)if(a=e[c],o.am(a.Lk()))return!udn(a,i)&&(uG(Uyn(n,c,t),76),!0);return ttn(n,t)}function Jxn(n,t,i,r){var c,a,o;for(Hb(c=new gMn(n),(zIn(),bbt)),kfn(c,(GYn(),rmt),t),kfn(c,gmt,r),kfn(c,(jYn(),JMt),($Pn(),cRt)),kfn(c,Zpt,t.c),kfn(c,nmt,t.d),xFn(t,c),o=e.Math.floor(i/2),a=new Ww(c.j);a.a<a.c.c.length;)uG(N3(a),12).n.b=o;return c}function Yxn(n){var t,i,r,c,a,o;for(t=0,i=new Ww(n.a);i.a<i.c.c.length;)for(c=new Fz(ix(Xgn(uG(N3(i),10)).a.Kc(),new h));hDn(c);)n==(r=uG(N9(c),18)).d.i.c&&r.c.j==(KQn(),_Rt)&&(a=n3(r.c).b,o=n3(r.d).b,t=e.Math.max(t,e.Math.abs(o-a)));return t}function Zxn(n,t,e){var i,r,c,a;for(e.Ug("ELK Force",1),oM(gK(zDn(t,(cGn(),Ift))))||J1(new Sd((vP(),new Vy(t)))),cEn(a=yfn(t)),rln(n,uG(oIn(a,jft),432)),r=(c=tqn(n.a,a)).Kc();r.Ob();)i=uG(r.Pb(),235),DGn(n.b,i,e.eh(1/c.gc()));YJn(a=lJn(c)),e.Vg()}function nRn(n,t,i){switch(i.g){case 1:return new MO(t.a,e.Math.min(n.d.b,t.b));case 2:return new MO(e.Math.max(n.c.a,t.a),t.b);case 3:return new MO(t.a,e.Math.max(n.c.b,t.b));case 4:return new MO(e.Math.min(t.a,n.d.a),t.b)}return new MO(t.a,t.b)}function tRn(n){var t,e,i;for(kD(t=iR(1+(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c).i),(!n.d&&(n.d=new f_(aFt,n,8,5)),n.d)),i=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));i.e!=i.i.gc();)kD(t,(!(e=uG(Zkn(i),123)).d&&(e.d=new f_(aFt,e,8,5)),e.d));return WW(t),new iN(t)}function eRn(n){var t,e,i;for(kD(t=iR(1+(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c).i),(!n.e&&(n.e=new f_(aFt,n,7,4)),n.e)),i=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));i.e!=i.i.gc();)kD(t,(!(e=uG(Zkn(i),123)).e&&(e.e=new f_(aFt,e,7,4)),e.e));return WW(t),new iN(t)}function iRn(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 sHt;if(45==t)return uHt}else if(3==e)return sHt;return YIn(i)}function rRn(n,t){var e,i,r;if(t.Ug("Breaking Point Processor",1),WWn(n),oM(gK(oIn(n,(jYn(),GTt))))){for(i=new Ww(n.b);i.a<i.c.c.length;)for(e=0,r=new Ww(uG(N3(i),30).a);r.a<r.c.c.length;)uG(N3(r),10).p=e++;kXn(n),dFn(n,!0),dFn(n,!1)}t.Vg()}function cRn(n,t,e,i){var r,c,a,o,u,s,h,f,l;for(f=i?(KQn(),_Rt):(KQn(),kRt),r=!1,s=0,h=(u=t[e]).length;s<h;++s)L_(uG(oIn(o=u[s],(jYn(),JMt)),101))||(a=o.e,(l=!Dgn(o,f).dc()&&!!a)&&(c=SPn(a),n.b=new IPn(c,i?0:c.length-1)),r|=d_n(n,o,f,l));return r}function aRn(n,t,e,i){var r,c,a;if(a=wSn(t,e),mv(i.c,t),-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new Fz(ix(Ggn(a).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&(v9(r)||r.c.i.c!=r.d.i.c)&&r!=t)return aRn(n,r,a,i);return i}function oRn(n){var t,e,i,r;for(t=0,e=0,r=new Ww(n.j);r.a<r.c.c.length;)if(t=pz(Lgn(t,D7(JJ(new fX(null,new h3((i=uG(N3(r),12)).e,16)),new Wc)))),e=pz(Lgn(e,D7(JJ(new fX(null,new h3(i.g,16)),new Qc)))),t>1||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<<t-24)+e.Math.floor(n.b*wut[t]))>=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.a<u.c.c.length;)for(r=new Ww((o=uG(N3(u),118)).k);r.a<r.c.c.length;)i=uG(N3(r),132),(!t||i.c==(_7(),$St))&&o.g>i.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<i.c.c.length;)uG(N3(i),47).Kf(t,e.eh(1));e.Vg()}function lRn(n,t,e){var i,r,c;if(!(c=iVn((gAn(),kBt),n.Dh(),t)))throw hv(new vM(Gtt+t.xe()+qtt));if(PP(),!uG(c,69).xk()&&!(c=_3(Nen(kBt,c))))throw hv(new vM(Gtt+t.xe()+qtt));r=uG((i=n.Ih(c))>=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<i.c.c.length;)e=uG(N3(i),30),Ohn(n.a,e.a),e.a.c.length=0;for(r=new Ww(n.a);r.a<r.c.c.length;)a2(uG(N3(r),10),null);n.b.c.length=0,$Fn(n),n.e&&RUn(n.e,n),t.Vg()}function dRn(n,t){var e,i,r,c;for(t.Ug("Edge joining",1),e=oM(gK(oIn(n,(jYn(),xTt)))),i=new Ww(n.b);i.a<i.c.c.length;)for(c=new N4(uG(N3(i),30).a,0);c.b<c.d.gc();)MK(c.b<c.d.gc()),(r=uG(c.d.Xb(c.c=c.b++),10)).k==(zIn(),wbt)&&(pVn(r,e),LQ(c));t.Vg()}function gRn(n,t){var e,i,r,c,a;for(e=new Zm,r=sin(new fX(null,new h3(n,16)),new wa),c=sin(new fX(null,new h3(n,16)),new da),a=ken($7(ZJ(gKn(Uhn(cT(Fut,1),EZn,848,0,[r,c])),new ga))),i=1;i<a.length;i++)a[i]-a[i-1]>=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 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((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;h<i;++h)for(f=0;f<t;++f)eTn(n,h,f)&&(o=e.Math.min(o,h),c=e.Math.max(c,h),u=e.Math.min(u,f),a=e.Math.max(a,f));return s=c-o+1,r=a-u+1,new vY(xwn(o),xwn(u),xwn(s),xwn(r))}function jRn(n,t){var e,i,r,c;for(MK((c=new N4(n,0)).b<c.d.gc()),e=uG(c.d.Xb(c.c=c.b++),148);c.b<c.d.gc();)MK(c.b<c.d.gc()),r=new wG((i=uG(c.d.Xb(c.c=c.b++),148)).c,e.d,t),MK(c.b>0),c.a.Xb(c.c=--c.b),pF(c,r),MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function ERn(n){var t,e,i,r,c;for(i=uG(oIn(n,(GYn(),Ppt)),12),c=new Ww(n.j);c.a<c.c.c.length;){for(e=new Ww((r=uG(N3(c),12)).g);e.a<e.c.c.length;)return u2(uG(N3(e),18),i),r;for(t=new Ww(r.e);t.a<t.c.c.length;)return c2(uG(N3(t),18),i),r}return null}function SRn(n,t,e){var i,r,c,a,o;for(o=uG(ER(n.a,t),17).a,PPn(n.a,xwn(e?o+1:o-1),t),a=new XL,r=new Fz(ix((e?Xgn(t):qgn(t)).a.Kc(),new h));hDn(r);)i=uG(N9(r),18),c=e?i.d.i:i.c.i,xA(ER(n.a,c))===xA(ER(n.a,t))&&a.a.zc(c,a);return a}function PRn(n,t,i){var r,c;dwn(r=Bsn(i.q.getTime()),0)<0?(c=$1n-pz(Kmn(Men(r),$1n)))==$1n&&(c=0):c=pz(Kmn(r,$1n)),1==t?jQ(n,48+(c=e.Math.min((c+50)/100|0,9))&D1n):2==t?Fen(n,c=e.Math.min((c+5)/10|0,99),2):(Fen(n,c,3),t>3&&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),298),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;e<n.c.length&&!(bq((u3(e,n.c.length),uG(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(bq((u3(t,n.c.length),uG(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function ORn(n,t){var e,i;if(t!=n.Cb||n.Db>>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 0!=(4&n.Db)&&0==(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 0!=(4&n.Db)&&0==(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 0!=(4&n.Db)&&0==(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),r<c?new A2((_7(),DSt),a,o,c-r):c<r?new A2((_7(),DSt),o,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new A2((_7(),DSt),a,o,0),new A2(DSt,o,a,0))}function FRn(n,t){var e,i,r,c,a,o;for(r=0,a=new Ww(t.a);a.a<a.c.c.length;)for(r+=(c=uG(N3(a),10)).o.b+c.d.a+c.d.d+n.e,i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)(e=uG(N9(i),18)).c.i.k==(zIn(),gbt)&&(r+=(o=uG(oIn(e.c.i,(GYn(),rmt)),10)).o.b+o.d.a+o.d.d);return r}function _Rn(){_Rn=E,xAt=new hO("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),DAt=new hO("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KAt=new hO("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),RAt=new hO("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),FAt=new hO("WHOLE_DRAWING",4)}function BRn(n,t){if(F$(t,207))return Ldn(n,uG(t,27));if(F$(t,193))return tgn(n,uG(t,123));if(F$(t,366))return DY(n,uG(t,135));if(F$(t,326))return wqn(n,uG(t,74));if(t)return null;throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function HRn(n){var t,e,i,r,c,a,o;for(c=new lS,r=new Ww(n.d.a);r.a<r.c.c.length;)0==(i=uG(N3(r),125)).b.a.c.length&&s8(c,i,c.c.b,c.c);if(c.b>1)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<r.c.c.length;)for(a=new Ww(T3(uG(N3(r),30).a));a.a<a.c.c.length;)Lin(c=uG(N3(a),10))&&!(i=uG(oIn(c,(GYn(),Spt)),313)).d&&PQn(n,i);e.Vg()}function GRn(n,t){var e,i;if(t!=n.Cb||n.Db>>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 0!=(4&n.Db)&&0==(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.a<c.c.c.length;)i+=uG(N3(c),12).e.c.length;else i=1;if(n.d)for(c=new Ww(n.c.i.j);c.a<c.c.c.length;)r+=uG(N3(c),12).g.c.length;else r=1;return(e+t)/2+.4*t0(gq(r-i))*(e-t)}function zRn(n){var t,e;if(gPn(),n.Hc((KQn(),FRt)))throw hv(new vM("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return wdt;case 2:return t=n.Hc(kRt)&&n.Hc(_Rt),e=n.Hc(yRt)&&n.Hc(KRt),t||e?pdt:gdt;case 3:return ddt;case 4:return bdt;default:return null}}function VRn(n,t,e){return l_n(),(!qun(n,t)||!qun(n,e))&&(RWn(new MO(n.c,n.d),new MO(n.c+n.b,n.d),t,e)||RWn(new MO(n.c+n.b,n.d),new MO(n.c+n.b,n.d+n.a),t,e)||RWn(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a),t,e)||RWn(new MO(n.c,n.d+n.a),new MO(n.c,n.d),t,e))}function WRn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=mK(n.Xb(e)))?null==t:m_(c.substr(0,3),"!##")?null!=t&&(r=t.length,!m_(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!m_(lct,t):m_(c,bct)&&!m_(lct,t)||m_(c,t))return!0;return!1}function QRn(n,t,e,i){var r,c,a,o,u,s;for(a=n.j.c.length,u=Inn(_st,X2n,314,a,0,1),o=0;o<a;o++)(c=uG(zq(n.j,o),12)).p=o,u[o]=r$n(bDn(c),e,i);for(BKn(n,u,e,t,i),s=new Ym,r=0;r<u.length;r++)u[r]&&vJ(s,uG(zq(n.j,r),12),u[r]);s.f.c+s.i.c!=0&&(kfn(n,(GYn(),$pt),s),dOn(n,u))}function JRn(n,t){var e,i,r;for(t.Ug("Partition postprocessing",1),e=new Ww(n.b);e.a<e.c.c.length;)for(i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)for(r=new Ww(uG(N3(i),10).j);r.a<r.c.c.length;)oM(gK(oIn(uG(N3(r),12),(GYn(),fmt))))&&tW(r);t.Vg()}function YRn(n,t,e){var i,r;for(i=new Ww(n.a.b);i.a<i.c.c.length;)if((r=z4(uG(N3(i),60)))&&r.k==(zIn(),lbt))switch(uG(oIn(r,(GYn(),Fpt)),64).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function ZRn(n,t,e){var i,r,c;for(e.Ug("Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=Fkn(t.b,0);!r&&i.b!=i.d.c;)oM(gK(oIn(c=uG(I6(i),39),(OQn(),UPt))))&&(r=c);r&&dqn(n,n7(Uhn(cT(lPt,1),z9n,39,0,[r])),e,uG(oIn(t,(QGn(),cCt)),88)),e.Vg()}function nKn(n){var t,e,i,r;for(gj(),aKn(i=new Bk,n),e=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));e.e!=e.i.gc();)t=uG(Zkn(e),27),GRn(r=new Bk,i),vN(r,t.g,t.f),Gan(r,t.k),kN(r,t.i,t.j),ttn((!i.a&&(i.a=new fV(bFt,i,10,11)),i.a),r),aKn(r,t);return i}function tKn(n,t,e){var i,r,c;if(!(r=uG(zDn(t,(lIn(),XNt)),17))&&(r=xwn(0)),!(c=uG(zDn(e,XNt),17))&&(c=xwn(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=ugn(t.j,e.j)))return i;if(0!=(i=ugn(t.i,e.i)))return i}return ugn(t.g*t.f,e.g*e.f)}function eKn(n,t){var e,i,r,c,a,o,u,s,h,f;if(++n.e,t>(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<u;++c)if(s=h[c])for(i=s.g,f=s.i,o=0;o<f;++o)a=iF(n,(r=uG(i[o],136)).Bi()),!(e=n.d[a])&&(e=n.d[a]=n.dk()),e.Fc(r);return!0}return!1}function iKn(n,t,e){var i,r,c,a,o,u;if(c=(r=e).Lk(),EFn(n.e,c)){if(c.Si())for(i=uG(n.g,124),a=0;a<n.i;++a)if(udn(o=i[a],r)&&a!=t)throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),c),i=uG(n.g,124),a=0;a<n.i;++a)if(o=i[a],u.am(o.Lk()))throw hv(new vM(dct));$dn(n,t,e)}function rKn(n,t){var e,i,r,c,a,o;for(e=uG(oIn(t,(GYn(),xpt)),21),a=uG(Y9((aYn(),Jlt),e),21),o=uG(Y9(rbt,e),21),c=a.Kc();c.Ob();)if(i=uG(c.Pb(),21),!uG(Y9(n.b,i),15).dc())return!1;for(r=o.Kc();r.Ob();)if(i=uG(r.Pb(),21),!uG(Y9(n.b,i),15).dc())return!1;return!0}function cKn(n,t){var e,i,r,c,a,o,u;if(1==n.a.c.length)return EOn(uG(zq(n.a,0),172),t);for(r=Swn(n),a=0,o=n.d,i=r,u=n.d,c=(o-i)/2+i;i+1<o;){for(a=0,e=new Ww(n.a);e.a<e.c.c.length;)a+=uXn(uG(N3(e),172),c,!1).a;a<t?(u=c,o=c):i=c,c=(o-i)/2+i}return u}function aKn(n,t){var e,i,r,c,a;if(!t)return n;if(F$(t,342))for(r=uG(t,342),!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),c=n.o,i=r.gh().c.Kc();i.e!=i.i.gc();)a=(e=uG(i.Yj(),44)).md(),rSn(c,uG(e.ld(),149),a);else!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),hon(n.o,t.nf());return n}function oKn(n){var t,e,i,r;return isNaN(n)?(tin(),not):n<-0x8000000000000000?(tin(),Yat):n>=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<i;++e)u3(e,c.c.length),(r=uG(c.c[e],82))!=t&&OCn(t,r);if(F$(t,63))throw hv(uG(t,63));if(F$(t,295))throw hv(uG(t,295))}}function sKn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((eNn(),wRt)),c=0,r=new Ww(n.e.Xf());r.a<r.c.c.length;){if((i=uG(N3(r),852)).ag()==(KQn(),FRt))throw hv(new vM("Label and node size calculator can only be used with ports that have port sides assigned."));i.Qf(c++),wwn(n,i,e)}}function hKn(n){var t,e,i,r,c;for(e=new Ww(n.a.a);e.a<e.c.c.length;){for((t=uG(N3(e),316)).j=null,c=t.a.a.ec().Kc();c.Ob();)dL((i=uG(c.Pb(),60)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),60)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function fKn(n){var t,e,i,r,c;for(e=new Ww(n.a.a);e.a<e.c.c.length;){for((t=uG(N3(e),194)).f=null,c=t.a.a.ec().Kc();c.Ob();)dL((i=uG(c.Pb(),86)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),86)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function lKn(n){var t,i,r;return i=uG(n.a,17).a,r=uG(n.b,17).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new WO(xwn(i+1),xwn(r)):i==t&&r<t?new WO(xwn(i),xwn(r+1)):i>=-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<u;++o)vgn(c=a[o]),GQ(c),i=c.a,kD(r.a,WW(i)),t&=i.yd(),e=cbn(e,i.zd());return uG(uG(bW(new fX(null,ICn(new h3((ZW(),Emn(r.a)),16),new g,t,e)),new jb(n)),687),848)}function pKn(n,t){var e;n.d&&(t.c!=n.e.c||iun(n.e.b,t.b))&&(kD(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),HL(t.b)?n.c=t:n.b=t,(t.b==(Xhn(),Flt)&&!t.a||t.b==_lt&&t.a||t.b==Blt&&t.a||t.b==Hlt&&!t.a)&&n.c&&n.b&&(e=new gY(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function mKn(n){var t;if(ly.call(this),this.i=new su,this.g=n,this.f=uG(n.e&&n.e(),9).length,0==this.f)throw hv(new vM("There must be at least one phase in the phase enumeration."));this.c=new nB(t=uG(Mj(this.g),9),uG(MF(t,t.length),9),0),this.a=new wJ,this.b=new Ym}function vKn(n,t){var e,i;if(t!=n.Cb||n.Db>>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 0!=(4&n.Db)&&0==(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 0!=(4&n.Db)&&0==(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<t.length)throw hv(new kM("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return o}function jKn(n,t){var e,i,r,c,a,o;if(!n.tb){for(!n.rb&&(n.rb=new vV(n,s_t,n)),o=new sS((c=n.rb).i),r=new DD(c);r.e!=r.i.gc();)i=uG(Zkn(r),142),(e=uG(null==(a=i.xe())?VAn(o.f,null,i):kgn(o.i,a,i),142))&&(null==a?VAn(o.f,null,e):kgn(o.i,a,e));n.tb=o}return uG(U1(n.tb,t),142)}function EKn(n,t){var e,i,r,c,a;if((null==n.i&&eqn(n),n.i).length,!n.p){for(a=new sS(1+(3*n.g.i/2|0)),r=new nR(n.g);r.e!=r.i.gc();)i=uG(nyn(r),179),(e=uG(null==(c=i.xe())?VAn(a.f,null,i):kgn(a.i,c,i),179))&&(null==c?VAn(a.f,null,e):kgn(a.i,c,e));n.p=a}return uG(U1(n.p,t),179)}function SKn(n,t,e,i,r){var c,a,o,u;for(Xvn(i+i1(e,e.ie()),r),mQ(t,Rpn(e)),(c=e.f)&&SKn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=Inn(xat,zZn,82,0,0,1)),o=0,u=(a=e.k).length;o<u;++o)SKn(n,t,a[o],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function PKn(n,t,e,i){var r,c,a,o;for(a=(o=t.e).length,c=t.q.ug(o,e?0:a-1,e),c|=wBn(n,o[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=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;s<h;++s){if(o=u[s],e==(can(),Vjt)||e==Qjt)for(c=0,a=(r=x4(o.g)).length;c<a;++c)wOn(t,i=r[c])&&pqn(i,!0);if(e==Wjt||e==Qjt)for(c=0,a=(r=x4(o.e)).length;c<a;++c)bOn(t,i=r[c])&&pqn(i,!0)}}function IKn(n){var t,e;switch(t=null,e=null,FSn(n).g){case 1:KQn(),t=kRt,e=_Rt;break;case 2:KQn(),t=KRt,e=yRt;break;case 3:KQn(),t=_Rt,e=kRt;break;case 4:KQn(),t=yRt,e=KRt}qb(n,uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)),Gb(n,uG(yx(Wz(uG(Y9(n.k,e),15).Oc(),Fdt)),113))}function OKn(n){var t,e,i,r,c,a;if((r=uG(zq(n.j,0),12)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(r),new Wd(r)])));hDn(i);)a+=(e=uG(N9(i),12)).i.n.a+e.n.a+e.a.a;c=(t=uG(oIn(n,(jYn(),WMt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function AKn(n,t){var e,i,r;for(i=new Ww(t.a);i.a<i.c.c.length;)e=uG(N3(i),225),JX(uG(e.b,68),YF(D$(uG(t.b,68).c),uG(t.b,68).a)),(r=oGn(uG(t.b,68).b,uG(e.b,68).b))>1&&(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.a<r.c.c.length;)(e=uG(N3(r),194)).e=0,e.d.a.$b();for(i=new Ww(n.a.a);i.a<i.c.c.length;)for(t=(e=uG(N3(i),194)).a.a.ec().Kc();t.Ob();)for(a=uG(t.Pb(),86).f.Kc();a.Ob();)(c=uG(a.Pb(),86)).d!=e&&(FV(e.d,c),++c.d.e)}function NKn(n){var t,e,i,r,c,a,o,u;for(e=0,t=u=n.j.c.length,r=2*u,o=new Ww(n.j);o.a<o.c.c.length;)switch((a=uG(N3(o),12)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&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;c<o.c.length;c++)u3(c-1,o.c.length),e=uG(o.c[c-1],113),u3(c,o.c.length),(i=xTn(n,a,e,r=uG(o.c[c],113)))>s&&(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;o<u;++o)for(c=a[o],s.a.zc(c,(qx(),tot)),r=new w7(c.b);l$(r.a)||l$(r.b);)(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c==i.d||_V(s,c==i.c?i.d:i.c);return WW(s),new Z_(s)}function RKn(n){if(!n.a.d||!n.a.e)throw hv(new kM((vK(Mst),Mst.k+" must have a source and target "+(vK(Tst),Tst.k+" specified."))));if(n.a.d==n.a.e)throw hv(new kM("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return Sx(n.a.d.g,n.a),Sx(n.a.e.b,n.a),n.a}function KKn(n,t){var e,i,r,c,a,o;for(t.Ug("Constraints Postprocessor",1),c=0,r=new Ww(n.b);r.a<r.c.c.length;){for(o=0,a=!1,i=new Ww(uG(N3(r),30).a);i.a<i.c.c.length;)(e=uG(N3(i),10)).k==(zIn(),dbt)&&(a=!0,kfn(e,(jYn(),pMt),xwn(c)),kfn(e,xyt,xwn(o)),++o);a&&++c}t.Vg()}function FKn(n,t,e){var i,r,c,a,o,u;if(i=0,0!=t.b&&0!=e.b){c=Fkn(t,0),a=Fkn(e,0),o=uM(pK(I6(c))),u=uM(pK(I6(a))),r=!0;do{if(o>u-n.b&&o<u+n.b)return-1;o>u-n.a&&o<u+n.a&&++i,o<=u&&c.b!=c.d.c?o=uM(pK(I6(c))):u<=o&&a.b!=a.d.c?u=uM(pK(I6(a))):r=!1}while(r)}return i}function _Kn(n,t){var e;return _J(n.a),JV(n.a,(pon(),VCt),VCt),JV(n.a,WCt,WCt),Aq(e=new wJ,WCt,(zPn(),tIt)),xA(zDn(t,(jOn(),LIt)))!==xA((vbn(),sIt))&&Aq(e,WCt,YCt),oM(gK(zDn(t,UIt)))&&Aq(e,WCt,eIt),Aq(e,WCt,ZCt),oM(gK(zDn(t,qIt)))&&wz(e,WCt,nIt),ZL(n.a,e),Qzn(n.a,t)}function BKn(n,t,e,i,r){var c,a,o,u;for(u=new nB(c=uG(Mj(YRt),9),uG(MF(c,c.length),9),0),o=new Ww(n.j);o.a<o.c.c.length;)t[(a=uG(N3(o),12)).p]&&(aJn(a,t[a.p],i),Mon(u,a.j));r?(CPn(n,t,(KQn(),kRt),2*e,i),CPn(n,t,_Rt,2*e,i)):(CPn(n,t,(KQn(),yRt),2*e,i),CPn(n,t,KRt,2*e,i))}function HKn(n){var t;for(t=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).d.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function UKn(n,t,e){var i,r,c,a;for(e.Ug("Longest path 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.a<c.c.c.length;)uG(N3(c),10).p=i,n.b[i]=-1,++i;for(r=new Ww(a);r.a<r.c.c.length;)Ixn(n,uG(N3(r),10));a.c.length=0,n.a=null,n.b=null,e.Vg()}function GKn(n,t,i,r){var c,a,o,u,s,f,l;for(u=0,s=new Ww(n.a);s.a<s.c.c.length;){for(o=0,a=new Fz(ix(qgn(uG(N3(s),10)).a.Kc(),new h));hDn(a);)f=n3((c=uG(N9(a),18)).c).b,l=n3(c.d).b,o=e.Math.max(o,e.Math.abs(l-f));u=e.Math.max(u,o)}return r*e.Math.min(1,t/i)*u}function qKn(n,t){var e,i,r,c,a;for(a=uG(oIn(t,(QGn(),MCt)),433),c=Fkn(t.b,0);c.b!=c.d.c;)if(r=uG(I6(c),39),0==n.b[r.g]){switch(a.g){case 0:vMn(n,r);break;case 1:ADn(n,r)}n.b[r.g]=2}for(i=Fkn(n.a,0);i.b!=i.d.c;)Wpn((e=uG(I6(i),65)).b.d,e,!0),Wpn(e.c.b,e,!0);kfn(t,(OQn(),_Pt),n.a)}function XKn(n){var t;return t=new VM,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&w1n)&&(t.a+=","),lM(t.a)}function zKn(n,t){var i,r,c,a,o;t.Ug(snt,1),c=uG(zDn(n,(S_n(),hAt)),107),!n.a&&(n.a=new fV(bFt,n,10,11)),a=Ijn(n.a),o=e.Math.max(a.a,uM(pK(zDn(n,(lBn(),EOt))))-(c.b+c.c)),i=(r=e.Math.max(a.b,uM(pK(zDn(n,MOt)))-(c.d+c.a)))-a.b,Myn(n,pOt,i),Myn(n,vOt,o),Myn(n,mOt,r+i),t.Vg()}function VKn(n,t){var e,i,r,c;return PP(),t?t==(uVn(),cHt)||(t==BBt||t==FBt||t==_Bt)&&n!=KBt?new MQn(n,t):((e=(i=uG(t,692)).$k())||(BJ(Nen((gAn(),kBt),t)),e=i.$k()),!e.i&&(e.i=new Ym),!(r=uG(DA(FX((c=e.i).f,n)),2041))&&vJ(c,n,r=new MQn(n,t)),r):PBt}function WKn(n,t){var e;if(!_V(n.b,t.b))throw hv(new kM("Invalid hitboxes for scanline constraint calculation."));(Ihn(t.b,uG(MS(n.b,t.b),60))||Ihn(t.b,uG(yS(n.b,t.b),60)))&&(bS(),String.fromCharCode(10)),n.a[t.b.f]=uG(jS(n.b,t.b),60),(e=uG(TS(n.b,t.b),60))&&(n.a[e.f]=t.b)}function QKn(n,t,e){var i,r,c;for(zsn(c=new pDn(vYn(COn(JFn(t,!1,!1)),uM(pK(zDn(t,(ryn(),Jht))))+n.a)),t),vJ(n.b,t,c),mv(e.c,c),!t.n&&(t.n=new fV(lFt,t,1,7)),r=new DD(t.n);r.e!=r.i.gc();)i=nHn(n,uG(Zkn(r),135),!0,0,0),mv(e.c,i);return c}function JKn(n,t){var e,i,r,c,a,o;for(r=new Zm,e=0;e<=n.j;e++)(i=new bQ(t)).p=n.j-e,mv(r.c,i);for(o=new Ww(n.p);o.a<o.c.c.length;)a2(a=uG(N3(o),10),uG(zq(r,n.j-n.g[a.p]),30));for(c=new Ww(r);c.a<c.c.c.length;)0==uG(N3(c),30).a.c.length&&tW(c);t.b.c.length=0,Ohn(t.b,r)}function YKn(n,t){var e,i,r,c,a,o,u,s;for(o=uG(oIn(n,(GYn(),rmt)),12),u=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o.i.n,o.n,o.a])).a,s=n.i.n.b,r=0,c=(i=x4(n.e)).length;r<c;++r)u2(e=i[r],o),cL(e.a,new MO(u,s)),t&&((a=uG(oIn(e,(jYn(),bMt)),75))||(a=new Uk,kfn(e,bMt,a)),aq(a,new MO(u,s)))}function ZKn(n,t){var e,i,r,c,a,o,u,s;for(i=uG(oIn(n,(GYn(),rmt)),12),u=Gfn(Uhn(cT(PNt,1),zZn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,o=(c=x4(n.g)).length;a<o;++a)c2(r=c[a],i),aL(r.a,new MO(u,s)),t&&((e=uG(oIn(r,(jYn(),bMt)),75))||(e=new Uk,kfn(r,bMt,e)),aq(e,new MO(u,s)))}function nFn(n){var t,e,i,r,c,a,o;if(r=(i=n.b).e,c=L_(uG(oIn(i,(jYn(),JMt)),101)),e=!!r&&uG(oIn(r,(GYn(),Hpt)),21).Hc((r_n(),tpt)),!c&&!e)for(o=new _w(new Fw(n.e).a.vc().Kc());o.a.Ob();)t=uG(o.a.Pb(),44),(a=uG(t.md(),113)).a&&(o2(a.d,null),a.c=!0,n.a=!0)}function tFn(n,t){var e,i;for(t.Ug("Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Ww(n.b);i.a<i.c.c.length;)e|=null!=cdn(krn(JJ(JJ(new fX(null,new h3(uG(N3(i),30).a,16)),new Qi),new Ji),new Yi),new Zi).a;e&&kfn(n,(GYn(),Wpt),(qx(),!0)),t.Vg()}function eFn(n,t){var e,i,r,c,a;for(n.b=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234),n.e=X3(n.d),c=new lS,r=n7(Uhn(cT(sbt,1),V4n,36,0,[t])),a=0;a<r.c.length;)u3(a,r.c.length),(i=uG(r.c[a],36)).p=a++,Ohn(r,(e=new KVn(i,n.a,n.b)).b),kD(n.b,e),e.s&&lW(Fkn(c,0),e);return n.c=new ek,c}function iFn(n,t){var e,i,r,c,a,o;for(a=uG(uG(Y9(n.r,t),21),87).Kc();a.Ob();)(e=(c=uG(a.Pb(),117)).c?rq(c.c):0)>0?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:0!=(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.a<o.c.c.length;)a=uG(N3(o),176),i&&Jqn(a),kD(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(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<f;++l)g=(o=uG(a.Xb(l),131)).a.b,o.a.c=w-g/2,w+=u}function dFn(n,t){var e,i,r,c,a,o,u,s;r=t?new bc:new wc,c=!1;do{for(c=!1,a=(t?Spn(n.b):n.b).Kc();a.Ob();)for(s=T3(uG(a.Pb(),30).a),t||Spn(s),u=new Ww(s);u.a<u.c.c.length;)o=uG(N3(u),10),r.Mb(o)&&(i=o,e=uG(oIn(o,(GYn(),Spt)),313),c=Q_n(i,t?e.b:e.k,t,!1))}while(c)}function gFn(n,t,e,i,r,c){var a,o,u,s,h,f;for(s=e.c.length,c&&(n.c=Inn(YHt,W1n,28,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=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))<n.e.a.c.length;){for(r=(t=kjn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Ww(n.e.a);i.a<i.c.c.length;)(e=uG(N3(i),125)).j&&(e.e+=r);AM(n.c)}AM(n.c),oNn(n,uG(N3(new Ww(n.e.a)),125)),MVn(n)}}function vFn(n,t){var e,i;if(Whn(),e=C9(aan(),t.Pg())){if(i=e.j,F$(n,207))return I0(uG(n,27))?$x(i,(Rkn(),sNt))||$x(i,hNt):$x(i,(Rkn(),sNt));if(F$(n,326))return $x(i,(Rkn(),oNt));if(F$(n,193))return $x(i,(Rkn(),fNt));if(F$(n,366))return $x(i,(Rkn(),uNt))}return!0}function kFn(n,t,e){var i,r,c,a,o,u;if(c=(r=e).Lk(),EFn(n.e,c)){if(c.Si())for(i=uG(n.g,124),a=0;a<n.i;++a)if(udn(o=i[a],r)&&a!=t)throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),c),i=uG(n.g,124),a=0;a<n.i;++a)if(o=i[a],u.am(o.Lk())&&a!=t)throw hv(new vM(dct));return uG(Uyn(n,t,e),76)}function yFn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.he();return n&&n.fe()}},suppressed:{get:function(){return e.ge()}}})}catch(i){}}function MFn(n,t){var e,i,r,c,a;if(i=t>>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;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return K4(a=new VV(n.e,c,r)),a}function TFn(n){var t,e,i,r;return e=new xd(r=h0(n)),i=new Rd(r),Ohn(t=new Zm,(!n.d&&(n.d=new f_(aFt,n,8,5)),n.d)),Ohn(t,(!n.e&&(n.e=new f_(aFt,n,7,4)),n.e)),uG(l8(YJ(JJ(new fX(null,new h3(t,16)),e),i),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21)}function jFn(n,t){var e;switch(e=uG(oIn(n,(jYn(),zyt)),283),t.Ug("Label side selection ("+e+")",1),e.g){case 0:mDn(n,(Ajn(),$xt));break;case 1:mDn(n,(Ajn(),Dxt));break;case 2:Eqn(n,(Ajn(),$xt));break;case 3:Eqn(n,(Ajn(),Dxt));break;case 4:YFn(n,(Ajn(),$xt));break;case 5:YFn(n,(Ajn(),Dxt))}t.Vg()}function EFn(n,t){var e,i,r;return PP(),!!t.Jk()||-2==t.Ik()&&(t==(m$n(),NBt)||t==OBt||t==ABt||t==LBt||!(emn(r=n.Dh(),t)>=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.a<c.c.c.length;)uG(N3(c),10).p=i,n.b[i]=-1,++i;for(r=new Ww(a);r.a<r.c.c.length;)Oxn(n,uG(N3(r),10));a.c.length=0,n.a=null,n.b=null,e.Vg()}function CFn(n,t,e){var i,r,c,a,o;if((c=n[LT(e,n.length)])[r=AT(e,c.length)].k==(zIn(),lbt))for(o=t.j,i=0;i<o.c.length;i++)u3(i,o.c.length),a=uG(o.c[i],12),(e?a.j==(KQn(),kRt):a.j==(KQn(),_Rt))&&oM(gK(oIn(a,(GYn(),qpt))))&&(Y8(o,i,uG(oIn(c[r],(GYn(),rmt)),12)),r+=e?1:-1)}function IFn(n,t){var e,i,r,c,a,o,u;t.Ug("Greedy Width Approximator",1),e=uM(pK(zDn(n,(S_n(),VOt)))),o=uG(zDn(n,hAt),107),r=uG(zDn(n,pAt),394),c=oM(gK(zDn(n,gAt))),a=uM(pK(zDn(n,bAt))),!n.a&&(n.a=new fV(bFt,n,10,11)),Non(u=n.a),i=lHn(new AU(e,r,c),u,a,o),Myn(n,(lBn(),POt),i.c),t.Vg()}function OFn(n){if(null==n.g)switch(n.p){case 0:n.g=L0(n)?(qx(),eot):(qx(),tot);break;case 1:n.g=Ben(k5(n));break;case 2:n.g=Hsn(A3(n));break;case 3:n.g=iJ(n);break;case 4:n.g=new Rw(eJ(n));break;case 6:n.g=Hvn(aJ(n));break;case 5:n.g=xwn(L1(n));break;case 7:n.g=Rwn(T5(n))}return n.g}function AFn(n){if(null==n.n)switch(n.p){case 0:n.n=N0(n)?(qx(),eot):(qx(),tot);break;case 1:n.n=Ben(y5(n));break;case 2:n.n=Hsn(L3(n));break;case 3:n.n=rJ(n);break;case 4:n.n=new Rw(cJ(n));break;case 6:n.n=Hvn(oJ(n));break;case 5:n.n=xwn(N1(n));break;case 7:n.n=Rwn(M5(n))}return n.n}function LFn(n,t,e,i){var r,c,a,o,u;if(PP(),o=uG(t,69).xk(),EFn(n.e,t)){if(t.Si()&&aqn(n,t,i,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),t),r=uG(n.g,124),a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk()))throw hv(new vM(dct));$dn(n,sAn(n,t,e),o?uG(i,76):R5(t,i))}function NFn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a<r.c.c.length;)(e=uG(N3(r),316)).g=0,e.i=0,e.e.a.$b();for(i=new Ww(n.a.a);i.a<i.c.c.length;)for(t=(e=uG(N3(i),316)).a.a.ec().Kc();t.Ob();)for(a=uG(t.Pb(),60).c.Kc();a.Ob();)(c=uG(a.Pb(),60)).a!=e&&(FV(e.e,c),++c.a.g,++c.a.i)}function $Fn(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((oUn(),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)),aXn(n,i,t)}function DFn(n,t){var e,i,r;t.a?(_V(n.b,t.b),n.a[t.b.i]=uG(jS(n.b,t.b),86),(e=uG(TS(n.b,t.b),86))&&(n.a[e.i]=t.b)):(!!(i=uG(jS(n.b,t.b),86))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=uG(TS(n.b,t.b),86))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),sD(n.b,t.b))}function xFn(n,t){var i,r,c,a,o,u;return a=n.d,(u=uM(pK(oIn(n,(jYn(),tMt)))))<0&&kfn(n,tMt,u=0),t.o.b=u,o=e.Math.floor(u/2),NLn(r=new lOn,(KQn(),_Rt)),o2(r,t),r.n.b=o,NLn(c=new lOn,kRt),o2(c,t),c.n.b=o,u2(n,r),zsn(i=new UZ,n),kfn(i,bMt,null),c2(i,c),u2(i,a),CGn(t,n,i),ZAn(n,i),i}function RFn(n){var t,e;return e=uG(oIn(n,(GYn(),Hpt)),21),t=new wJ,e.Hc((r_n(),ept))&&(gsn(t,TSt),gsn(t,ESt)),(e.Hc(rpt)||oM(gK(oIn(n,(jYn(),eMt)))))&&(gsn(t,ESt),e.Hc(cpt)&&gsn(t,SSt)),e.Hc(tpt)&&gsn(t,MSt),e.Hc(opt)&&gsn(t,PSt),e.Hc(ipt)&&gsn(t,jSt),e.Hc(Ygt)&&gsn(t,kSt),e.Hc(npt)&&gsn(t,ySt),t}function KFn(n,t){var e,i,r,c,a,o,u,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=pz(u=Ngn(E3(n.a[0],L0n),E3(t.a[0],L0n))),0==(s=pz(Dz(u,32)))?new Z5(a,h):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[h,s]))):(jwn(n.a,e,t.a,i,r=Inn(YHt,W1n,28,c,15,1)),K4(o=new VV(a,c,r)),o)}function FFn(n,t,e,i){var r,c;return t?0==(r=n.a.Ne(e.d,t.d))?(i.d=wF(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=FFn(n,t.a[c],e,i),NM(t.a[c])&&(NM(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):NM(t.a[c].a[c])?t=Ton(t,1-c):NM(t.a[c].a[1-c])&&(t=P4(t,1-c))),t):e}function _Fn(n,t,i){var r,c,a,o;c=n.i,r=n.n,Q9(n,(Yrn(),jst),c.c+r.b,i),Q9(n,Sst,c.c+c.b-r.c-i[2],i),o=c.b-r.b-r.c,i[0]>0&&(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<o.c.c.length;)a=uG(N3(o),105),c=new nhn(null),kD(n.a,c),vJ(n.c,a,c);for(n.b=new Ym,cLn(n,t),i=0;i<s.c.length-1;i++)for(u=uG(zq(t.d,i),105),r=i+1;r<s.c.length;r++)KRn(n,u,uG(zq(t.d,r),105),e)}function GFn(n){var t,e,i,r,c;for(r=new Zm,t=new oX((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(c=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),t.a._b(c)||mv(r.c,c));return r}function qFn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=jHn(n.i)),n.j=n.i.length,EYn(n),c=Evn(n),n.d!=n.j)throw hv(new CM(rZn((t$(),nit))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=uG(DQ(n.g,i),592),n.f<=r.a)throw hv(new CM(rZn((t$(),tit))));n.g.a.c.length=0}return c}function XFn(n,t){var i,r,c,a,o,u,s;for(i=T0n,zIn(),u=dbt,c=new Ww(t.a);c.a<c.c.c.length;)(a=(r=uG(N3(c),10)).k)!=dbt&&(null==(o=pK(oIn(r,(GYn(),amt))))?(i=e.Math.max(i,0),r.n.b=i+Bx(n.a,a,u)):r.n.b=(tJ(o),o)),s=Bx(n.a,a,u),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,u=a}function zFn(n,t,e,i,r){var c,a,o;if(n.d&&n.d.Gg(r),kMn(n,e,uG(r.Xb(0),27),!1))return!0;if(kMn(n,i,uG(r.Xb(r.gc()-1),27),!0))return!0;if(kIn(n,r))return!0;for(o=r.Kc();o.Ob();)for(a=uG(o.Pb(),27),c=t.Kc();c.Ob();)if(p_n(n,a,uG(c.Pb(),27)))return!0;return!1}function VFn(n,t,e){var i,r,c,a,o,u,s,h,f;f=t.c.length;n:for(c=uG((s=n.Ih(e))>=0?n.Lh(s,!1,!0):YNn(n,e,!1),61).Kc();c.Ob();){for(r=uG(c.Pb(),58),h=0;h<f;++h)if(u3(h,t.c.length),u=(a=uG(t.c[h],76)).md(),o=a.Lk(),i=r.Nh(o,!1),null==u?null!=i:!udn(u,i))continue n;return r}return null}function WFn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Comment post-processing",1),c=new Ww(n.b);c.a<c.c.c.length;){for(r=uG(N3(c),30),i=new Zm,o=new Ww(r.a);o.a<o.c.c.length;)a=uG(N3(o),10),u=uG(oIn(a,(GYn(),Pmt)),15),e=uG(oIn(a,Ept),15),(u||e)&&(dQn(a,u,e),u&&Ohn(i,u),e&&Ohn(i,e));Ohn(r.a,i)}t.Vg()}function QFn(n,t,e,i){var r,c,a,o;for(r=uG(yOn(t,(KQn(),_Rt)).Kc().Pb(),12),c=uG(yOn(t,kRt).Kc().Pb(),12),o=new Ww(n.j);o.a<o.c.c.length;){for(a=uG(N3(o),12);0!=a.e.c.length;)u2(uG(zq(a.e,0),18),r);for(;0!=a.g.c.length;)c2(uG(zq(a.g,0),18),c)}e||kfn(t,(GYn(),Zpt),null),i||kfn(t,(GYn(),nmt),null)}function JFn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)return Qhn(n);if(i=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),t&&(Czn((!i.a&&(i.a=new MD(eFt,i,5)),i.a)),Tcn(i,0),Ecn(i,0),mcn(i,0),jcn(i,0)),e)for(!n.a&&(n.a=new fV(oFt,n,6,6)),r=n.a;r.i>1;)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.a<r.c.c.length;){for(o=!0,i=0,a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)switch((c=uG(N3(a),10)).k.g){case 4:++i;case 1:O6(e,c);break;case 0:YAn(c,t);default:e.b==e.c||jUn(e,i,o,!1,t),o=!1,i=0}e.b==e.c||jUn(e,i,o,!0,t)}}function ZFn(n,t){var e,i,r,c,a,o;for(e=0,o=new Ww(t);o.a<o.c.c.length;){for(a=uG(N3(o),12),fbn(n.b,n.d[a.p]),r=new w7(a.b);l$(r.a)||l$(r.b);)(c=Yj(n,a==(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c?i.d:i.c))>n.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.a<i.c.c.length;){for((t=uG(N3(i),30)).p=r,a=new Ww(t.a);a.a<a.c.c.length;)uG(N3(a),10).p=o,++o;++r}for(c=n.r==(THn(),Pjt)?Jwt:Qwt,e=new Ww(n.i.b);e.a<e.c.c.length;)f$((t=uG(N3(e),30)).a,c),Zin(n.a,xwn(t.p),t.a)}function t_n(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=uG(Zkn(r),27)).a&&(i.a=new fV(bFt,i,10,11)),i.a).i||(c+=t_n(n,i,!1));if(e)for(a=R0(t);a;)c+=(!a.a&&(a.a=new fV(bFt,a,10,11)),a.a).i,a=R0(a);return c}function e_n(n,t){var e,i,r,c;return n.Pj()?(i=null,r=n.Qj(),n.Tj()&&(i=n.Vj(n.$i(t),null)),e=n.Ij(4,c=gjn(n,t),null,t,r),n.Mj()&&null!=c?(i=n.Oj(c,i))?(i.nj(e),i.oj()):n.Jj(e):i?(i.nj(e),i.oj()):n.Jj(e),c):(c=gjn(n,t),n.Mj()&&null!=c&&(i=n.Oj(c,null))&&i.oj(),c)}function i_n(n){var t,i,r,c,a,o,u,s,h,f;for(h=n.a,t=new ek,s=0,r=new Ww(n.d);r.a<r.c.c.length;){for(f=0,Lon((i=uG(N3(r),226)).b,new Nn),o=Fkn(i.b,0);o.b!=o.d.c;)a=uG(I6(o),226),t.a._b(a)&&(c=i.c,f<(u=a.c).d+u.a+h&&f+c.a+h>u.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<a?100:0)),c.p=i,!0}function u_n(n,t){var i,r,c;R0(n)&&(c=uG(oIn(t,(jYn(),DMt)),181),xA(zDn(n,JMt))===xA(($Pn(),sRt))&&Myn(n,JMt,uRt),vP(),r=uQn(new Vy(R0(n)),new Wx(R0(n)?new Vy(R0(n)):null,n),!1,!0),Mon(c,(Qmn(),VRt)),(i=uG(oIn(t,RMt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function s_n(n,t,e){var i,r,c,a,o,u;for(a=uG(oIn(n,(GYn(),Upt)),15).Kc();a.Ob();){switch(c=uG(a.Pb(),10),uG(oIn(c,(jYn(),gMt)),171).g){case 2:a2(c,t);break;case 4:a2(c,e)}for(r=new Fz(ix(Ggn(c).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c&&i.d||(o=!i.d,u=uG(oIn(i,umt),12),o?u2(i,u):c2(i,u))}}function h_n(){h_n=E,Odt=new yY(o3n,0,(KQn(),yRt),yRt),Ndt=new yY(s3n,1,KRt,KRt),Idt=new yY(u3n,2,kRt,kRt),xdt=new yY(h3n,3,_Rt,_Rt),Ldt=new yY("NORTH_WEST_CORNER",4,_Rt,yRt),Adt=new yY("NORTH_EAST_CORNER",5,yRt,kRt),Ddt=new yY("SOUTH_WEST_CORNER",6,KRt,_Rt),$dt=new yY("SOUTH_EAST_CORNER",7,kRt,KRt)}function f_n(n){var t,e,i,r,c;for(r=new ek,t=new oX((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(c=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),t.a._b(c)||r.a.zc(c,r));return r}function l_n(){l_n=E,ENt=Uhn(cT(nUt,1),E0n,28,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function b_n(){var n,t;for(b_n=E,Got=Inn(Xot,zZn,92,32,0,1),qot=Inn(Xot,zZn,92,32,0,1),n=1,t=0;t<=18;t++)Got[t]=(cHn(),dwn(n,0)>=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<qot.length;t++)Got[t]=j5(Got[t-1],Got[1]),qot[t]=j5(qot[t-1],(cHn(),Kot))}function w_n(n,t){var e,i,r,c,a;if(0==n.c.length)return new WO(xwn(0),xwn(0));for(e=(u3(0,n.c.length),uG(n.c[0],12)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(u3(++a,n.c.length),uG(n.c[a],12)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(u3(a,n.c.length),uG(n.c[a],12)).j;return new WO(xwn(a),xwn(r))}function d_n(n,t,e,i){var r,c,a,o,u;o=Dgn(t,e),(e==(KQn(),KRt)||e==_Rt)&&(o=Spn(o)),a=!1;do{for(r=!1,c=0;c<o.gc()-1;c++)SIn(n,uG(o.Xb(c),12),uG(o.Xb(c+1),12),i)&&(a=!0,Z3(n.a,uG(o.Xb(c),12),uG(o.Xb(c+1),12)),u=uG(o.Xb(c+1),12),o.hd(c+1,uG(o.Xb(c),12)),o.hd(c,u),r=!0)}while(r);return a}function g_n(n,t,e){var i,r,c;for(e.Ug(X9n,1),o$n(n,uG(l8(JJ(new fX(null,new h3(t.b,16)),new qa),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),0),c=Fkn(t.b,0);c.b!=c.d.c;)r=uG(I6(c),39),i=null!=cQ(n.a,xwn(r.g))?uG(cQ(n.a,xwn(r.g)),17).a:0,kfn(r,(QGn(),ACt),xwn(i));e.Vg()}function p_n(n,t,e){var i,r,c,a,o,u,s,h;return o=t.i-n.g/2,u=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g,a=e.g+n.g,i=t.f+n.g,r=e.f+n.g,o<u+a&&u<o&&s<h+r&&h<s||u<o+c&&o<u&&h<s+i&&s<h||o<u+a&&u<o&&s<h&&h<s+i||u<o+c&&o<u&&s<h+r&&h<s}function m_n(n,t,i){var r,c,a,o,u,s,h,f,l,b;for(a=t.c.length,u3(i,t.c.length),u=(o=uG(t.c[i],292)).a.o.a,l=o.c,b=0,h=o.c;h<=o.f;h++){if(u<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)u3(c,t.c.length),(r=uG(t.c[c],292)).c<=h&&r.f>=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.a<e.c.c.length;){for(o=(t=uG(N3(e),226)).c.c;0!=c.a.gc()&&(a=uG(c.a.Tc(),226)).c.c+a.c.b<o;)c.a.Bc(a);for(r=c.a.ec().Kc();r.Ob();)aq((i=uG(r.Pb(),226)).b,t),aq(t.b,i);c.a.zc(t,(qx(),tot))}}function k_n(n,t,e){var i,r,c,a,o;if(!P6(t)){for((o=e.eh((F$(t,16)?uG(t,16).gc():x5(t.Kc()))/n.a|0)).Ug(V9n,1),a=new za,c=null,r=t.Kc();r.Ob();)i=uG(r.Pb(),39),a=zcn(Uhn(cT(vat,1),EZn,20,0,[a,new Mp(i)])),c&&(kfn(c,(OQn(),BPt),i),kfn(i,APt,c),M7(i)==M7(c)&&(kfn(c,HPt,i),kfn(i,LPt,c))),c=i;o.Vg(),k_n(n,a,e)}}function y_n(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new fV(d_t,n,9,5)),i=new DD(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=uG(Zkn(i),694)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new fV(d_t,n,9,5)),i=new DD(n.a);i.e!=i.i.gc();)if(m_(t,null==(r=(e=uG(Zkn(i),694)).c)?e.zb:r))return e;return null}function M_n(n,t){var e;switch(e=null,t.g){case 1:n.e.pf((XYn(),rDt))&&(e=uG(n.e.of(rDt),256));break;case 3:n.e.pf((XYn(),cDt))&&(e=uG(n.e.of(cDt),256));break;case 2:n.e.pf((XYn(),iDt))&&(e=uG(n.e.of(iDt),256));break;case 4:n.e.pf((XYn(),aDt))&&(e=uG(n.e.of(aDt),256))}return!e&&(e=uG(n.e.of((XYn(),tDt)),256)),e}function T_n(n,t,i){var r,c,a,o,u,s;for(c=i,a=0,u=new Ww(t);u.a<u.c.c.length;)Myn(o=uG(N3(u),27),(jOn(),FIt),xwn(c++)),s=GFn(o),r=e.Math.atan2(o.j+o.f/2,o.i+o.g/2),(r+=r<0?f7n:0)<.7853981633974483||r>F7n?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.a<a.c.c.length;)kSn(u,t,o=uG(N3(a),132).a),kSn(u,e,o);for(c=new Ww(n.k);c.a<c.c.c.length;)kSn(u,t,o=uG(N3(c),132).b),kSn(u,e,o);return u.b+=2,u.a+=tZ(t,n.q),u.a+=tZ(n.q,e),u}function E_n(n,t,e){var i;e.Ug("Processor arrange node",1),oM(gK(oIn(t,(QGn(),rCt)))),i=uG(yx(lln(JJ(new fX(null,new h3(t.b,16)),new bo))),39),n.a=uG(oIn(t,LCt),353),n.a==(mbn(),DCt)||n.a==$Ct?fQn(n,new IM(Uhn(cT(lPt,1),z9n,39,0,[i])),e.eh(1)):n.a==NCt&&mYn(n,new IM(Uhn(cT(lPt,1),z9n,39,0,[i])),e.eh(1)),e.Vg()}function S_n(){S_n=E,VOt=new _N((XYn(),c$t),1.3),iAt=new _N(H$t,(qx(),!1)),fAt=new CN(15),hAt=new _N(W$t,fAt),bAt=new _N(DDt,15),WOt=l$t,eAt=_$t,rAt=U$t,cAt=q$t,tAt=K$t,aAt=V$t,lAt=bDt,IHn(),pAt=UOt,gAt=HOt,vAt=zOt,mAt=qOt,sAt=KOt,uAt=ROt,oAt=xOt,dAt=BOt,YOt=O$t,ZOt=A$t,JOt=$Ot,QOt=NOt,nAt=DOt,wAt=_Ot}function P_n(n){var t,e,i,r,c,a,o;for(e=n.i,t=n.n,o=e.d,n.f==(Yen(),Kst)?o+=(e.a-n.e.b)/2:n.f==Rst&&(o+=e.a-n.e.b),r=new Ww(n.d);r.a<r.c.c.length;){switch(a=(i=uG(N3(r),187)).Mf(),(c=new sj).b=o,o+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.Of(c)}}function C_n(n){var t,e,i,r,c,a,o;for(e=n.i,t=n.n,o=e.c,n.b==(Ktn(),Ost)?o+=(e.b-n.e.a)/2:n.b==Lst&&(o+=e.b-n.e.a),r=new Ww(n.d);r.a<r.c.c.length;){switch(a=(i=uG(N3(r),187)).Mf(),(c=new sj).a=o,o+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.Of(c)}}function I_n(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=uG(cQ(e.c,t),467)).f,b=c.a,o=new MO(s,l),h=new MO(a,b),r=s,e.p||(r+=n.c),u=new MO(r+=e.F+e.v*n.b,l),f=new MO(r,b),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[o,u])),e.d.a.gc()>1&&(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<n.d.b.c.length?(n.b=uG(zq(n.d.b,t),30),n.a=uG(zq(n.d.b,t-1),30),n.c=t):(n.a=new bQ(n.d),n.a.p=t-1,kD(n.d.b,n.a),n.b=new bQ(n.d),n.b.p=t,kD(n.d.b,n.b),n.c=t),a2(e,n.b),r=new Fz(ix(qgn(e).a.Kc(),new h));hDn(r);)!(i=uG(N9(r),18)).c.i.c&&i.c.i.k==(zIn(),bbt)&&a2(i.c.i,n.a)}function A_n(n){hP(n,new hCn(FT(DT(KT(RT(new bu,jtt),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Fu))),U4(n,jtt,K3n,qRt),U4(n,jtt,o4n,15),U4(n,jtt,s4n,xwn(0)),U4(n,jtt,R3n,r4n)}function L_n(){var n,t,e,i,r,c;for(L_n=E,pHt=Inn(tUt,ret,28,255,15,1),mHt=Inn(JHt,N1n,28,16,15,1),t=0;t<255;t++)pHt[t]=-1;for(e=57;e>=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((oUn(),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!=0)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<r.c.c.length;)for((i=uG(N3(r),30)).p=e++,a=new Ww(i.a);a.a<a.c.c.length;)c=uG(N3(a),10),!t&&!P6(Ggn(c))&&(t=!0);o=WX((xdn(),ZDt),Uhn(cT(axt,1),p1n,88,0,[JDt,YDt])),t||(Mon(o,nxt),Mon(o,QDt)),n.a=new Qin(o),$V(n.f),$V(n.b),$V(n.e),$V(n.g)}function __n(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function B_n(n,t,e){var i,r,c,a,o,u,s,h,f;for(i=e.c,r=e.d,o=n3(t.c),u=n3(t.d),i==t.c?(o=nRn(n,o,r),u=VCn(t.d)):(o=VCn(t.c),u=nRn(n,u,r)),s8(s=new tj(t.a),o,s.a,s.a.a),s8(s,u,s.c.b,s.c),a=t.c==i,f=new wk,c=0;c<s.b-1;++c)h=new WO(uG(hyn(s,c),8),uG(hyn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:kD(f.a,h);return f}function H_n(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=uG(oIn(n,(jYn(),YMt)),17),i=uG(oIn(t,YMt),17),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return ugn(n.n.a,t.n.a);case 2:return ugn(n.n.b,t.n.b);case 3:return ugn(t.n.a,n.n.a);case 4:return ugn(t.n.b,n.n.b);default:throw hv(new kM(n6n))}}function U_n(n,t,i,r){var c,a,o,u;if(x5((HB(),new Fz(ix(Ggn(t).a.Kc(),new h))))>=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;e<o;++e)if(r=n.Vi(e),c=a.Pb(),null==r?null!=c:!udn(r,c))return!1}else for(e=0;e<o;++e)if(r=n.Vi(e),c=a.Pb(),xA(r)!==xA(c))return!1;return!0}function q_n(n,t){var e,i,r,c,a,o;if(n.f>0)if(n._j(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=uG(e.g,379),o=e.i,a=0;a<o;++a)if(udn(t,(r=i[a]).md()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=uG(e.g,379),o=e.i,a=0;a<o;++a)if(r=i[a],xA(t)===xA(r.md()))return!0;return!1}function X_n(n,t){var e,i,r;return(e=t.qi(n.a))&&null!=(r=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),"affiliation")))?-1==(i=ax(r,$Cn(35)))?Adn(n,jz(n,Hrn(t.qk())),r):0==i?Adn(n,null,(s3(1,r.length+1),r.substr(1))):Adn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))):null}function z_n(n,t,e){var i,r,c,a;e.Ug("Orthogonally routing hierarchical port edges",1),n.a=0,XVn(t,i=ozn(t)),dVn(n,t,i),EQn(t),r=uG(oIn(t,(jYn(),JMt)),101),JWn((u3(0,(c=t.b).c.length),uG(c.c[0],30)),r,t),JWn(uG(zq(c,c.c.length-1),30),r,t),Bqn((u3(0,(a=t.b).c.length),uG(a.c[0],30))),Bqn(uG(zq(a,a.c.length-1),30)),e.Vg()}function V_n(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>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<o.c.c.length;)xA(oIn(a=uG(N3(o),12),(GYn(),rmt)))===xA(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return u=0,r&&r^c?u=e.j==(KQn(),yRt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?u=n.e[i.c.p][i.p]+1:r&&c&&(u=e.j==(KQn(),yRt)?0:t/2),u}function Z_n(n,t,e,i,r,c,a,o){var u,s,h;for(u=0,null!=t&&(u^=pln(t.toLowerCase())),null!=e&&(u^=pln(e)),null!=i&&(u^=pln(i)),null!=a&&(u^=pln(a)),null!=o&&(u^=pln(o)),s=0,h=c.length;s<h;s++)u^=pln(c[s]);n?u|=256:u&=-257,r?u|=16:u&=-17,this.f=u,this.i=null==t?null:(tJ(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=o}function nBn(n,t,e){var i,r;switch(r=null,t.g){case 1:Lun(),r=ybt;break;case 2:Lun(),r=Tbt}switch(i=null,e.g){case 1:Lun(),i=Mbt;break;case 2:Lun(),i=kbt;break;case 3:Lun(),i=jbt;break;case 4:Lun(),i=Ebt}return r&&i?YU(n.j,new Hl(new IM(Uhn(cT(pat,1),EZn,178,0,[uG(WW(r),178),uG(WW(i),178)])))):(hZ(),hZ(),zot)}function tBn(n){var t,e,i;switch(t=uG(oIn(n,(jYn(),RMt)),8),kfn(n,RMt,new MO(t.b,t.a)),uG(oIn(n,byt),255).g){case 1:kfn(n,byt,(nMn(),NNt));break;case 2:kfn(n,byt,(nMn(),INt));break;case 3:kfn(n,byt,(nMn(),ANt));break;case 4:kfn(n,byt,(nMn(),LNt))}(n.q?n.q:(hZ(),hZ(),Vot))._b(rTt)&&(i=(e=uG(oIn(n,rTt),8)).a,e.a=e.b,e.b=i)}function eBn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=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((oUn(),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),39),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.a<a.c.c.length;)if((c=uG(N3(a),10)).k!=(zIn(),lbt))for(LDn(o,c,new sj),r=new Fz(ix(Xgn(c).a.Kc(),new h));hDn(r);)if((i=uG(N9(r),18)).c.i.k!=lbt&&i.d.i.k!=lbt)for(e=Fkn(i.a,0);e.b!=e.d.c;)CEn(o,new FC((t=uG(I6(e),8)).a,t.b));return o}function uBn(){uBn=E,RLt=new Cm(gnt),eP(),DLt=new mL(ynt,xLt=GLt),Vhn(),NLt=new mL(pnt,$Lt=VLt),pOn(),ALt=new mL(mnt,LLt=rLt),PLt=new mL(vnt,null),B7(),ILt=new mL(knt,OLt=ZAt),nP(),MLt=new mL(Mnt,TLt=zAt),jLt=new mL(Tnt,(qx(),!1)),ELt=new mL(jnt,xwn(64)),SLt=new mL(Ent,!0),CLt=nLt}function sBn(n,t){var e,i,r,c,a,o,u;for(n.p=1,i=n.c,u=new XL,o=jmn(n,(can(),Wjt)).Kc();o.Ob();)for(e=new Ww(uG(o.Pb(),12).g);e.a<e.c.c.length;)n!=(a=uG(N3(e),18).d.i)&&a.c.p<=i.p&&((r=i.p+1)==t.b.c.length?((c=new bQ(t)).p=r,kD(t.b,c),a2(a,c)):a2(a,c=uG(zq(t.b,r),30)),u.a.zc(a,u));return u}function hBn(n,t){var e,i;if(!(e=uG(oIn(n,(OQn(),yPt)),15))||e.gc()<1)return null;if(1==e.gc())return uG(e.Xb(0),39);switch(i=null,t.g){case 2:i=uG(yx(Qz(e.Oc(),new Da)),39);break;case 1:i=uG(yx(Wz(e.Oc(),new Aa)),39);break;case 4:i=uG(yx(Qz(e.Oc(),new La)),39);break;case 3:i=uG(yx(Wz(e.Oc(),new Na)),39)}return i}function fBn(n){var t,e,i,r,c;if(null==n.a)if(n.a=Inn(ZHt,B2n,28,n.c.b.c.length,16,1),n.a[0]=!1,vR(n.c,(jYn(),XTt)))for(e=uG(oIn(n.c,XTt),15).Kc();e.Ob();)(t=uG(e.Pb(),17).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Ww(n.c.b)).a<c.c.c.length&&N3(c),i=1;c.a<c.c.c.length;)r=uG(N3(c),30),n.a[i++]=_xn(r)}function lBn(){lBn=E,pOt=new Cm("additionalHeight"),mOt=new Cm("drawingHeight"),vOt=new Cm("drawingWidth"),MOt=new Cm("minHeight"),EOt=new Cm("minWidth"),SOt=new Cm("rows"),POt=new Cm("targetWidth"),jOt=new uF("minRowIncrease",0),yOt=new uF("maxRowIncrease",0),TOt=new uF("minRowDecrease",0),kOt=new uF("maxRowDecrease",0)}function bBn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new DD(n.c);e.e!=e.i.gc();)yLn(y9(uG(Zkn(e),481)),t)}function wBn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b;for(r=!1,o=0,u=(a=t).length;o<u;++o)c=a[o],oM((qx(),!!c.e))&&!uG(zq(n.b,c.e.p),219).s&&(r|=(s=c.e,(f=(h=uG(zq(n.b,s.p),219)).e)[l=AT(e,f.length)][0].k==(zIn(),lbt)?f[l]=TKn(c,f[l],e?(KQn(),_Rt):(KQn(),kRt)):h.c.mg(f,e),b=PKn(n,h,e,i),CFn(h.e,h.o,e),b));return r}function dBn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)xA(zDn(i=uG(Zkn(r),27),(XYn(),E$t)))!==xA((Own(),Axt))&&((a=uG(zDn(t,yDt),143))==(e=uG(zDn(i,yDt),143))||a&&k9(a,e))&&0!=(!i.a&&(i.a=new fV(bFt,i,10,11)),i.a).i&&(c+=dBn(n,i));return c}function gBn(n){var t,e,i,r,c,a,o;for(i=0,o=0,a=new Ww(n.d);a.a<a.c.c.length;)c=uG(N3(a),105),r=uG(l8(JJ(new fX(null,new h3(c.j,16)),new Zr),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=null,i<=o?(KQn(),e=yRt,i+=r.gc()):o<i&&(KQn(),e=KRt,o+=r.gc()),t=e,kS(YJ(r.Oc(),new Jr),new xg(t))}function pBn(n){var t,e,i,r,c;for(c=new R7(n.a.c.length),r=new Ww(n.a);r.a<r.c.c.length;){switch(i=uG(N3(r),10),t=null,(e=uG(oIn(i,(jYn(),gMt)),171)).g){case 1:case 2:Pfn(),t=ygt;break;case 3:case 4:Pfn(),t=vgt}t?(kfn(i,(GYn(),Npt),(Pfn(),ygt)),t==vgt?CKn(i,e,(can(),Vjt)):t==ygt&&CKn(i,e,(can(),Wjt))):mv(c.c,i)}return c}function mBn(n){var t,e,i,r,c,a,o,u;for(n.b=new f$n(new IM((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]))),new IM((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))),o=0,u=(a=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;o<u;++o)for(c=a[o],i=0,r=(e=Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])).length;i<r;++i)t=e[i],LSn(n.b,c,t,new Zm)}function vBn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=uG(uG(Y9(n.r,t),21),87),o=n.u.Hc((eNn(),gRt)),e=n.u.Hc(bRt),i=n.u.Hc(lRt),s=n.u.Hc(pRt),f=n.B.Hc((oUn(),uKt)),h=!e&&!i&&(s||2==a.gc()),iFn(n,t),r=null,u=null,o){for(u=r=uG((c=a.Kc()).Pb(),117);c.Ob();)u=uG(c.Pb(),117);r.d.b=0,u.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(yCn(a),o&&(r.d.b=0,u.d.c=0))}function kBn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=uG(uG(Y9(n.r,t),21),87),o=n.u.Hc((eNn(),gRt)),e=n.u.Hc(bRt),i=n.u.Hc(lRt),u=n.u.Hc(pRt),f=n.B.Hc((oUn(),uKt)),s=!e&&!i&&(u||2==a.gc()),rGn(n,t),h=null,r=null,o){for(r=h=uG((c=a.Kc()).Pb(),117);c.Ob();)r=uG(c.Pb(),117);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(MCn(a),o&&(h.d.d=0,r.d.a=0))}function yBn(n,t,e){var i,r,c,a,o;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,kD(e.e,t),i==(zIn(),wbt)||i==gbt)for(r=new Ww(t.j);r.a<r.c.c.length;)for(o=new Qd(new Ww(new Wd(uG(N3(r),12)).a.g));l$(o.a);)if(a=(c=uG(N3(o.a),18).d.i).k,t.c!=c.c&&(a==wbt||a==gbt)&&yBn(n,c,e))return!0;return!0}function MBn(n){var t;return 0!=(64&n.Db)?L$n(n):((t=new fx(L$n(n))).a+=" (changeable: ",Lj(t,0!=(n.Bb&w1n)),t.a+=", volatile: ",Lj(t,0!=(n.Bb&frt)),t.a+=", transient: ",Lj(t,0!=(n.Bb&j0n)),t.a+=", defaultValueLiteral: ",VA(t,n.j),t.a+=", unsettable: ",Lj(t,0!=(n.Bb&hrt)),t.a+=", derived: ",Lj(t,0!=(n.Bb&VZn)),t.a+=")",t.a)}function TBn(n,t){var e,i,r,c;return(i=t.qi(n.a))&&(!i.b&&(i.b=new XR((YYn(),H_t),wBt,i)),null!=(e=mK(Lmn(i.b,Krt)))&&F$(c=-1==(r=e.lastIndexOf("#"))?hK(n,t.jk(),e):0==r?gtn(n,null,(s3(1,e.length+1),e.substr(1))):gtn(n,(Knn(0,r,e.length),e.substr(0,r)),(s3(r+1,e.length+1),e.substr(r+1))),156))?uG(c,156):null}function jBn(n,t){var e,i,r,c;return(e=t.qi(n.a))&&(!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),null!=(r=mK(Lmn(e.b,oct)))&&F$(c=-1==(i=r.lastIndexOf("#"))?hK(n,t.jk(),r):0==i?gtn(n,null,(s3(1,r.length+1),r.substr(1))):gtn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))),156))?uG(c,156):null}function EBn(n){var t,e,i,r,c,a,o,u,s,h;for(e=TRn(n.d),c=(r=uG(oIn(n.b,(ryn(),Yht)),107)).b+r.c,a=r.d+r.a,u=e.d.a*n.e+c,o=e.b.a*n.f+a,$b(n.b,new MO(u,o)),h=new Ww(n.g);h.a<h.c.c.length;)t=JF(FR(new MO((s=uG(N3(h),568)).g-e.a.a,s.i-e.c.a),s.a,s.b),vD(HR(D$(ON(s.e)),s.d*s.a,s.c*s.b),-.5)),i=AN(s.e),PT(s.e,YF(t,i))}function SBn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Restoring reversed edges",1),a=new Ww(n.b);a.a<a.c.c.length;)for(o=new Ww(uG(N3(a),30).a);o.a<o.c.c.length;)for(u=new Ww(uG(N3(o),10).j);u.a<u.c.c.length;)for(r=0,c=(i=x4(uG(N3(u),12).g)).length;r<c;++r)oM(gK(oIn(e=i[r],(GYn(),pmt))))&&pqn(e,!1);t.Vg()}function PBn(n,t,e,i){var r,c,a,o,u;for(u=Inn(eUt,zZn,109,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,0,2),a=0,o=(c=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;a<o;++a)u[(r=c[a]).g]=Inn(eUt,I0n,28,n.c[r.g],15,1);return jEn(u,n,yRt),jEn(u,n,KRt),MTn(u,n,yRt,t,e,i),MTn(u,n,kRt,t,e,i),MTn(u,n,KRt,t,e,i),MTn(u,n,_Rt,t,e,i),u}function CBn(n,t,e){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.b,t)){if(cS(uG(cQ(n.b,t),49),e))return-1}else vJ(n.b,t,new ek);if(PV(n.b,e)){if(cS(uG(cQ(n.b,e),49),t))return 1}else vJ(n.b,e,new ek);return 0}function IBn(n){var t,i,r,c,a,o;n.q!=($Pn(),aRt)&&n.q!=cRt&&(c=n.f.n.d+eq(uG(AJ(n.b,(KQn(),yRt)),127))+n.c,t=n.f.n.a+eq(uG(AJ(n.b,KRt),127))+n.c,r=uG(AJ(n.b,kRt),127),o=uG(AJ(n.b,_Rt),127),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,o.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,o.n.a-t),r.n.d=a,o.n.d=a,r.n.a=i,o.n.a=i)}function OBn(n,t,e,i){var r,c,a,o,u,s;if(null==e)for(r=uG(n.g,124),o=0;o<n.i;++o)if((a=r[o]).Lk()==t)return Nyn(n,a,i);return PP(),c=uG(t,69).xk()?uG(e,76):R5(t,e),uN(n.e)?(s=!kmn(n,t),i=Nmn(n,c,i),u=t.Jk()?VZ(n,3,t,null,e,Dqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n)),s):VZ(n,1,t,t.ik(),e,-1,s),i?i.nj(u):i=u):i=Nmn(n,c,i),i}function ABn(){this.b=new u8,this.d=new u8,this.e=new u8,this.c=new u8,this.a=new Ym,this.f=new Ym,E0(PNt,new lu,new pu),E0($Nt,new Cu,new Iu),E0(hbt,new Ou,new Au),E0(Sbt,new Lu,new Nu),E0(AKt,new $u,new Du),E0(eut,new mu,new vu),E0(lut,new ku,new yu),E0(cut,new Mu,new Tu),E0(aut,new ju,new Eu),E0(jut,new Su,new Pu)}function LBn(n,t){var e,i,r,c,a;for(n=null==n?IZn:(tJ(n),n),r=0;r<t.length;r++)t[r]=DRn(t[r]);for(e=new QM,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+r1(null==n?IZn:(tJ(n),n),a,c),QA(e,t[i++]),a=c+2;if(L4(e,n,a,n.length),i<t.length){for(e.a+=" [",QA(e,t[i++]);i<t.length;)e.a+=TZn,QA(e,t[i++]);e.a+="]"}return e.a}function NBn(n,t){var e,i,r,c,a,o,u;for(e=0,u=new Ww(t);u.a<u.c.c.length;){for(o=uG(N3(u),12),fbn(n.b,n.d[o.p]),a=0,r=new w7(o.b);l$(r.a)||l$(r.b);)zQ(i=uG(l$(r.a)?N3(r.a):N3(r.b),18))?(c=Yj(n,o==i.c?i.d:i.c))>n.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),0!=(n.Bb&hrt)&&(c|=2),F$(n,102)?(r=lMn(e=uG(n,19)),0!=(e.Bb&Qtt)&&(c|=32),r&&(iQ(K0(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&Qtt)&&(c|=64)),0!=(e.Bb&P0n)&&(c|=frt),c|=w1n):F$(t,468)?c|=512:(i=t.kk())&&0!=(1&i.i)&&(c|=256),0!=(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;s<h;++s){for(a=0,o=(c=u[s]).length;a<o;++a)for(r=c[a],t=new j6(-1==f?n[0]:n[f],uG(oIn(HQ(r),(jYn(),Syt)),284),qjn(r),oM(gK(oIn(HQ(r),Eyt)))),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Jz(t,uG(zq(r.j,e),12),uG(zq(r.j,i),12))>0&&++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:c<a?-1:c>a?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<i.c.c.length;)vJ(o,t=uG(N3(i),60),new Zm);for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((t=uG(N3(r),60)).i=T0n,a=t.c.Kc();a.Ob();)c=uG(a.Pb(),60),uG(DA(FX(o.f,c)),15).Fc(t);for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),60)).c.$b(),t.c=uG(DA(FX(o.f,t)),15);NFn(n)}function FBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a<i.c.c.length;)vJ(o,t=uG(N3(i),86),new Zm);for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((t=uG(N3(r),86)).o=T0n,a=t.f.Kc();a.Ob();)c=uG(a.Pb(),86),uG(DA(FX(o.f,c)),15).Fc(t);for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),86)).f.$b(),t.f=uG(DA(FX(o.f,t)),15);LKn(n)}function _Bn(n,t,e,i){var r,c;for(PEn(n,t,e,i),xb(t,n.j-t.j+e),Rb(t,n.k-t.k+i),c=new Ww(t.f);c.a<c.c.c.length;)switch((r=uG(N3(c),334)).a.g){case 0:wfn(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:wfn(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:wfn(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:wfn(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function BBn(n,t){var e,i,r,c,a,o;for(r=new Zm,t.b.c.length=0,i=uG(l8(f3(new fX(null,new h3(new Lw(n.a.b),1))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();i.Ob();)if(e=uG(i.Pb(),17),0!=(c=W6(n.a,e)).b)for(a=new bQ(t),mv(r.c,a),a.p=e.a,o=Fkn(c,0);o.b!=o.d.c;)a2(uG(I6(o),10),a);Ohn(t.b,r)}function HBn(n,t,e,i,r){var c,a;try{if(t>=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;o<u;++o)for(h=Vwn(a[o],i).Kc();h.Ob();)for(c=new w7((s=uG(h.Pb(),12)).b);l$(c.a)||l$(c.b);)v9(r=uG(l$(c.a)?N3(c.a):N3(c.b),18))||(f.a.zc(s,(qx(),tot)),zQ(r)&&_V(f,s==r.c?r.d:r.c));return WW(f),new Z_(f)}function GBn(n,t,i,r){var c,a;t&&(c=uM(pK(oIn(t,(OQn(),FPt))))+r,a=i+uM(pK(oIn(t,NPt)))/2,kfn(t,GPt,xwn(pz(Bsn(e.Math.round(c))))),kfn(t,qPt,xwn(pz(Bsn(e.Math.round(a))))),0==t.d.b||GBn(n,uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),39),i+uM(pK(oIn(t,NPt)))+n.b,r+uM(pK(oIn(t,xPt)))),null!=oIn(t,HPt)&&GBn(n,uG(oIn(t,HPt),39),i,r))}function qBn(n,t){var i,r,c,a,o,u,s,h,f,l,b;for(c=2*uM(pK(oIn(s=HQ(t.a),(jYn(),vTt)))),f=uM(pK(oIn(s,STt))),h=e.Math.max(c,f),a=Inn(eUt,I0n,28,t.f-t.c+1,15,1),r=-h,i=0,u=t.b.Kc();u.Ob();)o=uG(u.Pb(),10),r+=n.a[o.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Ww(t.e);b.a<b.c.c.length;)l=uG(N3(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function XBn(n,t){var e,i,r,c;if(0!=(c=uG(zDn(n,(XYn(),gDt)),64).g-uG(zDn(t,gDt),64).g))return c;if(e=uG(zDn(n,fDt),17),i=uG(zDn(t,fDt),17),e&&i&&0!=(r=e.a-i.a))return r;switch(uG(zDn(n,gDt),64).g){case 1:return ugn(n.i,t.i);case 2:return ugn(n.j,t.j);case 3:return ugn(t.i,n.i);case 4:return ugn(t.j,n.j);default:throw hv(new kM(n6n))}}function zBn(n){var t,e,i;return 0!=(64&n.Db)?rOn(n):(t=new lx(_tt),(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 VBn(n){var t,e,i;return 0!=(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.a<a.c.c.length;)if(xA(c=uG(N3(a),12))===xA(oIn(e,rmt))){c.j==(KQn(),yRt)&&n.p>r.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.a<s.c.c.length;)for(JF((u=uG(N3(s),10)).n,c),h=new Ww(u.j);h.a<h.c.c.length;)for(r=new Ww(uG(N3(h),12).g);r.a<r.c.c.length;)for(Xun((i=uG(N3(r),18)).a,c),(a=uG(oIn(i,(jYn(),bMt)),75))&&Xun(a,c),o=new Ww(i.b);o.a<o.c.c.length;)JF(uG(N3(o),72).n,c)}function eHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a<s.c.c.length;)for(JF((u=uG(N3(s),10)).n,c),h=new Ww(u.j);h.a<h.c.c.length;)for(r=new Ww(uG(N3(h),12).g);r.a<r.c.c.length;)for(Xun((i=uG(N3(r),18)).a,c),(a=uG(oIn(i,(jYn(),bMt)),75))&&Xun(a,c),o=new Ww(i.b);o.a<o.c.c.length;)JF(uG(N3(o),72).n,c)}function iHn(n){if(0==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i)throw hv(new EM("Edges must have a source."));if(0==(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new EM("Edges must have a target."));if(!n.b&&(n.b=new f_(cFt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)))throw hv(new EM("Hyperedges are not supported."))}function rHn(n,t){var e,i,r,c,a,o,u,s,h,f;for(f=0,A6(c=new ND,t);c.b!=c.c;)for(u=uG(xV(c),219),s=0,h=uG(oIn(t.j,(jYn(),Syt)),284),a=uM(pK(oIn(t.j,yyt))),o=uM(pK(oIn(t.j,Myt))),h!=(yvn(),Fjt)&&(s+=a*mxn(u.e,h),s+=o*xBn(u.e)),f+=XTn(u.d,u.e)+s,r=new Ww(u.b);r.a<r.c.c.length;)i=uG(N3(r),36),(e=uG(zq(n.b,i.p),219)).s||(f+=BAn(n,e));return f}function cHn(){var n;for(cHn=E,xot=new Z5(1,1),Kot=new Z5(1,10),_ot=new Z5(0,0),Dot=new Z5(-1,1),Rot=Uhn(cT(Xot,1),zZn,92,0,[_ot,xot,new Z5(1,2),new Z5(1,3),new Z5(1,4),new Z5(1,5),new Z5(1,6),new Z5(1,7),new Z5(1,8),new Z5(1,9),Kot]),Fot=Inn(Xot,zZn,92,32,0,1),n=0;n<Fot.length;n++)Fot[n]=BA(Nz(1,n),0)?Rmn(Nz(1,n)):hW(Rmn(Men(Nz(1,n))))}function aHn(n,t,e,i,r,c,a){if(n.c=i.Lf().a,n.d=i.Lf().b,r&&(n.c+=r.Lf().a,n.d+=r.Lf().b),n.b=t.Mf().a,n.a=t.Mf().b,r)switch(r.ag().g){case 0:case 2:n.c+=r.Mf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.Mf().a;break;case 1:n.c+=r.Mf().a+a,n.d-=a+c.b+a+t.Mf().b;break;case 3:n.c+=r.Mf().a+a,n.d+=r.Mf().b+a+c.b+a}else e?n.c-=a+t.Mf().a:n.c+=i.Mf().a+a}function oHn(n,t){var e,i;for(this.b=new Zm,this.e=new Zm,this.a=n,this.d=t,Syn(this),Hmn(this),this.b.dc()?this.c=n.c.p:this.c=uG(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=uG(zq(this.e,this.e.c.length-1),10).c.p,i=uG(oIn(n,(GYn(),gmt)),15).Kc();i.Ob();)if(vR(e=uG(i.Pb(),72),(jYn(),Gyt))){this.d=uG(oIn(e,Gyt),232);break}}function uHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.e,t),49),a=uG(cQ(n.e,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),10),i.a.zc(s,i),FV(uG(cQ(n.e,s),49),t),Qon(uG(cQ(n.e,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function sHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.b,t),49),a=uG(cQ(n.b,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),10),i.a.zc(s,i),FV(uG(cQ(n.b,s),49),t),Qon(uG(cQ(n.b,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function hHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.d,t),49),a=uG(cQ(n.d,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),12),i.a.zc(s,i),FV(uG(cQ(n.d,s),49),t),Qon(uG(cQ(n.d,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),12),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function fHn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w;if(c=e,e<i)for(b=new nhn(n.p),w=new nhn(n.p),Qon(b.e,n.e),b.q=n.q,b.r=w,eQ(b),Qon(w.j,n.j),w.r=b,eQ(w),f=uG((l=new WO(b,w)).a,118),h=uG(l.b,118),u3(c,t.c.length),a=j_n(n,f,h,r=uG(t.c[c],339)),s=e+1;s<=i;s++)u3(s,t.c.length),jyn(o=uG(t.c[s],339),u=j_n(n,f,h,o),r,a)&&(r=o,a=u,c=s);return c}function lHn(n,t,e,i){var r,c,a,o,u,s,h;for(ycn(a=uG(zrn(t,0),27),0),Mcn(a,0),mv((u=new Zm).c,a),o=a,c=new jq(n.a,a.g,a.f,(_Rn(),FAt)),s=1;s<t.i;s++)ycn(h=uG(zrn(t,s),27),(r=jzn(n,lXn(n,xAt,h,o,c,u,e),lXn(n,DAt,h,o,c,u,e),lXn(n,KAt,h,o,c,u,e),lXn(n,RAt,h,o,c,u,e),h,o,i)).d),Mcn(h,r.e),ow(r,FAt),c=r,o=h,mv(u.c,h);return c}function bHn(n,t,e){var i,r,c,a,o,u,s;if(s=t,Gan(u=D5(n,d5(e),s),k6(s,Iet)),a=p6(s,vet),_Ln((i=new YO(n,u)).a,i.b,a),o=p6(s,ket),BLn((r=new ZO(n,u)).a,r.b,o),0==(!u.b&&(u.b=new f_(cFt,u,4,7)),u.b).i||0==(!u.c&&(u.c=new f_(cFt,u,5,8)),u.c).i)throw c=k6(s,Iet),hv(new SM(Net+c+$et));return fCn(s,u),AJn(n,s,u),qfn(n,s,u)}function wHn(n,t){var i,r,c,a,o,u,s;for(c=Inn(YHt,W1n,28,n.e.a.c.length,15,1),o=new Ww(n.e.a);o.a<o.c.c.length;)c[(a=uG(N3(o),125)).d]+=a.b.a.c.length;for(u=oG(t);0!=u.b;)for(r=jtn(new Ww((a=uG(0==u.b?null:(MK(0!=u.b),Lrn(u,u.a.a)),125)).g.a));r.Ob();)(s=(i=uG(r.Pb(),218)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&s8(u,s,u.c.b,u.c)}function dHn(n){var t,i,r,c,a,o,u,s,h,f,l;for(i=j1n,c=vZn,u=new Ww(n.e.a);u.a<u.c.c.length;)a=uG(N3(u),125),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=Inn(YHt,W1n,28,i-c+1,15,1),o=new Ww(n.e.a);o.a<o.c.c.length;)(a=uG(N3(o),125)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function gHn(n,t){var e,i,r,c,a,o;if(t.Ug("Edge routing",1),(r=uG(oIn(n,(QGn(),uCt)),392))==(Pln(),dPt))stn(n);else if(r==wPt)for(uG(yx(lln(JJ(new fX(null,new h3(n.b,16)),new Pa))),39),c=uM(pK(oIn(n,jCt))),a=uM(pK(oIn(n,oCt))),$Jn(n,o=uG(oIn(n,cCt),88),c),_Yn(n,o,c,a),qYn(n,o,c,a),i=Fkn(n.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).a.b<2&&hNn(e);t.Vg()}function pHn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return uG(AFn(n),17).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return _A(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:udn(n.n,n.g)}default:return!1}}function mHn(n,t){var e,i,r;switch(t.Ug("Breaking Point Insertion",1),i=new dDn(n),uG(oIn(n,(jYn(),BTt)),351).g){case 2:r=new kc;break;case 0:r=new hc;break;default:r=new yc}if(e=r.og(n,i),oM(gK(oIn(n,UTt)))&&(e=Jzn(n,e)),!r.pg()&&vR(n,zTt))switch(uG(oIn(n,zTt),352).g){case 2:e=KLn(i,e);break;case 1:e=pPn(i,e)}e.dc()||HJn(n,e),t.Vg()}function vHn(n,t,e){var i,r,c,a,o,u,s,h,f;for(c=new R7(t.c.length),s=new Ww(t);s.a<s.c.c.length;)a=uG(N3(s),10),kD(c,n.b[a.c.p][a.p]);for(Uzn(n,c,e),f=null;f=hWn(c);)lqn(n,uG(f.a,239),uG(f.b,239),c);for(t.c.length=0,r=new Ww(c);r.a<r.c.c.length;)for(u=0,h=(o=(i=uG(N3(r),239)).d).length;u<h;++u)a=o[u],mv(t.c,a),n.a[a.c.p][a.p].a=oD(i.g,i.d[0]).a}function kHn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,Ttt),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Ku))),U4(n,Ttt,K3n,Pxt),U4(n,Ttt,b9n,Jkn(Cxt)),U4(n,Ttt,Qnt,Jkn(Mxt)),U4(n,Ttt,p4n,Jkn(Txt)),U4(n,Ttt,x4n,Jkn(Ext)),U4(n,Ttt,d4n,Jkn(jxt))}function yHn(n,t,e){var i,r,c,a;if(i=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))),a=pz(Ngn(h1n,PJ(pz(Ngn(null==e?0:Hon(e),f1n)),15))),(c=lun(n,t,i))&&a==c.f&&xQ(e,c.i))return e;if(bun(n,e,a))throw hv(new vM("value already present: "+e));return r=new fJ(t,i,e,a),c?(yRn(n,c),HLn(n,r,c),c.e=null,c.c=null,c.i):(HLn(n,r,null),SEn(n),null)}function MHn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=uG(cQ(e.c,t),467)).f,b=c.a,o=c.b?new MO(a,l):new MO(s,l),h=c.c?new MO(s,b):new MO(a,b),r=s,e.p||(r+=n.c),u=new MO(r+=e.F+e.v*n.b,l),f=new MO(r,b),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[o,u])),e.d.a.gc()>1&&(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<i;)if(9!=(e=VJ(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(s3(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(TQ(t,r&D1n),++c):(t.a+="\\",TQ(t,r&D1n),++c):TQ(t,e&D1n);else for(;c<i&&13!=(e=VJ(n,c++))&&10!=e;);return t.a}function EHn(){EHn=E,wIt=new mL(M7n,(qx(),!1)),kIt=new mL(T7n,xwn(0)),yIt=new mL(j7n,0),MIt=new mL(E7n,!1),vbn(),gIt=new mL(S7n,pIt=sIt),xwn(0),dIt=new mL(P7n,xwn(1)),esn(),SIt=new mL(C7n,PIt=iOt),Ptn(),CIt=new mL(I7n,IIt=aIt),dTn(),mIt=new mL(O7n,vIt=ZIt),EIt=new mL(A7n,0),TIt=new mL(L7n,!1),jIt=new mL(N7n,!1)}function SHn(n,t){var e,i,r;for(i=new Ww(t);i.a<i.c.c.length;)if(e=uG(N3(i),27),UNn(n.a,e,e),UNn(n.b,e,e),0!=(r=GFn(e)).c.length)for(n.d&&n.d.Gg(r),UNn(n.a,e,(u3(0,r.c.length),uG(r.c[0],27))),UNn(n.b,e,uG(zq(r,r.c.length-1),27));0!=Jhn(r).c.length;)r=Jhn(r),n.d&&n.d.Gg(r),UNn(n.a,e,(u3(0,r.c.length),uG(r.c[0],27))),UNn(n.b,e,uG(zq(r,r.c.length-1),27))}function PHn(n,t,e){var i,r,c,a,o,u;if(t){if(e<=-1){if(F$(i=ern(t.Dh(),-1-e),102))return uG(i,19);for(o=0,u=(a=uG(t.Mh(i),160)).gc();o<u;++o)if(xA(a.Ul(o))===xA(n)&&F$(r=a.Tl(o),102)&&0!=((c=uG(r,19)).Bb&Qtt))return c;throw hv(new kM("The containment feature could not be located"))}return lMn(uG(ern(n.Dh(),e),19))}return null}function CHn(n){var t,e,i,r,c,a,o,u,s,h;for(e=0,o=new Ww(n.d);o.a<o.c.c.length;)(a=uG(N3(o),105)).i&&(a.i.c=e++);for(t=Jq(ZHt,[zZn,B2n],[183,28],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(u3(r,h.c.length),(u=uG(h.c[r],105)).i)for(c=r+1;c<h.c.length;c++)u3(c,h.c.length),(s=uG(h.c[c],105)).i&&(i=HCn(u,s),t[u.i.c][s.i.c]=i,t[s.i.c][u.i.c]=i);return t}function IHn(){IHn=E,_Ot=new mL(q7n,(qx(),!1)),xwn(-1),NOt=new mL(X7n,xwn(-1)),xwn(-1),$Ot=new mL(z7n,xwn(-1)),DOt=new mL(V7n,!1),a9(),qOt=new mL(W7n,XOt=yAt),zOt=new mL(Q7n,-1),Bgn(),UOt=new mL(J7n,GOt=OOt),HOt=new mL(Y7n,!0),den(),KOt=new mL(Z7n,FOt=EAt),ROt=new mL(nnt,!1),xwn(1),xOt=new mL(tnt,xwn(1)),BOt=new Cm(ent)}function OHn(){OHn=E,fPt=new VI("ROOT_PROC",0),rPt=new VI("FAN_PROC",1),uPt=new VI("LEVEL_PROC",2),sPt=new VI("NEIGHBORS_PROC",3),oPt=new VI("LEVEL_HEIGHT",4),iPt=new VI("DIRECTION_PROC",5),hPt=new VI("NODE_POSITION_PROC",6),tPt=new VI("COMPACTION_PROC",7),aPt=new VI("LEVEL_COORDS",8),cPt=new VI("GRAPH_BOUNDS_PROC",9),ePt=new VI("DETREEIFYING_PROC",10)}function AHn(n,t){var e,i,r,c,a,o,u,s;for(o=null,r=!1,c=0,u=z5((s=n1(t)).a).i;c<u;++c)(e=AHn(n,uG(yVn(s,c,F$(a=uG(zrn(z5(s.a),c),89).c,90)?uG(a,29):(YYn(),x_t)),29))).dc()||(o?(r||(r=!0,o=new $X(o)),o.Gc(e)):o=e);return(i=ALn(n,t)).dc()?o||(hZ(),hZ(),zot):o?(r||(o=new $X(o)),o.Gc(i),o):i}function LHn(n,t){var e,i,r,c,a,o,u,s;for(o=null,i=!1,c=0,u=z5((s=n1(t)).a).i;c<u;++c)(e=LHn(n,uG(yVn(s,c,F$(a=uG(zrn(z5(s.a),c),89).c,90)?uG(a,29):(YYn(),x_t)),29))).dc()||(o?(i||(i=!0,o=new $X(o)),o.Gc(e)):o=e);return(r=n$n(n,t)).dc()?o||(hZ(),hZ(),zot):o?(i||(o=new $X(o)),o.Gc(r),o):r}function NHn(n){var t,i,r,c;r=n.o,VK(),n.A.dc()||udn(n.A,lht)?c=r.a:(c=gNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((oUn(),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 $Hn(n,t,e){var i,r,c,a,o,u;if(F$(t,76))return Nyn(n,t,e);for(o=null,c=null,i=uG(n.g,124),a=0;a<n.i;++a)if(udn(t,(r=i[a]).md())&&F$(c=r.Lk(),102)&&0!=(uG(c,19).Bb&Qtt)){o=r;break}return o&&(uN(n.e)&&(u=c.Jk()?VZ(n,4,c,t,null,Dqn(n,c,t,F$(c,102)&&0!=(uG(c,19).Bb&P0n)),!0):VZ(n,c.tk()?2:1,c,t,c.ik(),-1,!0),e?e.nj(u):e=u),e=$Hn(n,o,e)),e}function DHn(n,t,e){var i,r,c,a;if(a=VKn(n.e.Dh(),t),i=uG(n.g,124),PP(),uG(t,69).xk()){for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&udn(r,e))return e_n(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&udn(e,r.md()))return e_n(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&null==r.md())return e_n(n,c),!0;return!1}function xHn(n,t){var e,i,r,c;if(t.Ug("Node and Port Label Placement and Node Sizing",1),zN((zS(),new mY(n,!0,!0,new We))),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt)))for(i=(r=uG(oIn(n,(jYn(),nTt)),21)).Hc((eNn(),dRt)),c=oM(gK(oIn(n,tTt))),e=new Ww(n.b);e.a<e.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(e),30).a,16)),new Qe),new KB(r,i,c));t.Vg()}function RHn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=Inn(ZHt,B2n,28,t.c.length,16,1):AM(n.c),n.a=new Zm,i=0,a=new Ww(t);a.a<a.c.c.length;)(r=uG(N3(a),10)).p=i++;for(e=new lS,c=new Ww(t);c.a<c.c.c.length;)r=uG(N3(c),10),n.c[r.p]||(nNn(n,r),0==e.b||(MK(0!=e.b),uG(e.a.a.c,15)).gc()<n.a.c.length?aL(e,n.a):cL(e,n.a),n.a=new Zm);return e}function KHn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,Cnt),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new Zo))),U4(n,Cnt,gnt,Jkn(ULt)),U4(n,Cnt,K3n,BLt),U4(n,Cnt,o4n,8),U4(n,Cnt,ynt,Jkn(HLt)),U4(n,Cnt,jnt,Jkn(FLt)),U4(n,Cnt,Ent,Jkn(_Lt)),U4(n,Cnt,q8n,(qx(),!1))}function FHn(n,t){var e,i,r,c,a,o,u;if((e=t.qi(n.a))&&null!=(u=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),fct)))){for(i=new Zm,a=0,o=(c=WGn(u,"\\w")).length;a<o;++a)m_(r=c[a],"##other")?kD(i,"!##"+jz(n,Hrn(t.qk()))):m_(r,"##local")?i.c.push(null):m_(r,sct)?kD(i,jz(n,Hrn(t.qk()))):mv(i.c,r);return i}return hZ(),hZ(),zot}function _Hn(n,t,e,i){var r,c,a,o,u,s,h,f;for(a=KR(t.c,e,i),h=new Ww(t.a);h.a<h.c.c.length;){for(JF((s=uG(N3(h),10)).n,a),f=new Ww(s.j);f.a<f.c.c.length;)for(c=new Ww(uG(N3(f),12).g);c.a<c.c.c.length;)for(Xun((r=uG(N3(c),18)).a,a),(o=uG(oIn(r,(jYn(),bMt)),75))&&Xun(o,a),u=new Ww(r.b);u.a<u.c.c.length;)JF(uG(N3(u),72).n,a);kD(n.a,s),s.a=n}}function BHn(n){var t,e,i,r,c;if(n.d)throw hv(new kM((vK(Rlt),v2n+Rlt.k+k2n)));for(n.c==(xdn(),ZDt)&&qWn(n,JDt),t=new Ww(n.a.a);t.a<t.c.c.length;)uG(N3(t),194).e=0;for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((i=uG(N3(r),86)).o=T0n,e=i.f.Kc();e.Ob();)++uG(e.Pb(),86).d.e;for(sQn(n),c=new Ww(n.a.b);c.a<c.c.c.length;)uG(N3(c),86).k=!0;return n}function HHn(n,t){var e,i,r,c,a,o,u,s;for(o=new cAn(n),s8(e=new lS,t,e.c.b,e.c);0!=e.b;){for((i=uG(0==e.b?null:(MK(0!=e.b),Lrn(e,e.a.a)),113)).d.p=1,a=new Ww(i.e);a.a<a.c.c.length;)uCn(o,r=uG(N3(a),340)),0==(s=r.d).d.p&&s8(e,s,e.c.b,e.c);for(c=new Ww(i.b);c.a<c.c.c.length;)uCn(o,r=uG(N3(c),340)),0==(u=r.c).d.p&&s8(e,u,e.c.b,e.c)}return o}function UHn(n){var t,e,i,r,c;if(1!=(i=uM(pK(zDn(n,(XYn(),MDt))))))for(vN(n,i*n.g,i*n.f),e=EL(ZU((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c),new Vu)),c=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n),(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c),e])));hDn(c);)(r=uG(N9(c),422)).qh(i*r.nh(),i*r.oh()),r.ph(i*r.mh(),i*r.lh()),(t=uG(r.of(oDt),8))&&(t.a*=i,t.b*=i)}function GHn(n,t,e){var i,r,c,a,o;if(PP(),a=uG(t,69).xk(),EFn(n.e,t)){if(t.Si()&&aqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))return!1}else for(o=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c<n.i;++c)if(r=i[c],o.am(r.Lk()))return!(a?udn(r,e):null==e?null==r.md():udn(e,r.md()))&&(uG(Uyn(n,c,a?uG(e,76):R5(t,e)),76),!0);return ttn(n,a?uG(e,76):R5(t,e))}function qHn(n,t,e,i,r){var c,a,o,u,s,h;for(c=new Ww(n.b);c.a<c.c.c.length;)for(s=0,h=(u=D4(uG(N3(c),30).a)).length;s<h;++s)switch(uG(oIn(o=u[s],(jYn(),gMt)),171).g){case 1:fFn(o),a2(o,t),Vyn(o,!0,i);break;case 3:HKn(o),a2(o,e),Vyn(o,!1,r)}for(a=new N4(n.b,0);a.b<a.d.gc();)0==(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)).a.c.length&&LQ(a)}function XHn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=b=t.length,s3(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(pXn(),Uot)[10])|0,0!=(g=b%c)&&++r,o=Inn(YHt,W1n,28,r,15,1),e=Hot[8],a=0,w=l+(0==g?c:g),d=l;d<u;w=(d=w)+c)i=vUn((Knn(d,w,t.length),t.substr(d,w-d)),j1n,vZn),b_n(),s=tMn(o,o,a,e),s+=vmn(o,a,i),o[a++]=s;h=a,n.e=f,n.d=h,n.a=o,K4(n)}function zHn(n,t){var e,i,r;return e=new Xn,(i=1==(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())?1:0)<(r=1==(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:0)?-1:i==r?0:1}function VHn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(r=oM(gK(oIn(o=n.i,(jYn(),sMt)))),h=0,i=0,s=new Ww(n.g);s.a<s.c.c.length;)c=(a=v9(u=uG(N3(s),18)))&&r&&oM(gK(oIn(u,hMt))),l=u.d.i,a&&c?++i:a&&!c?++h:HQ(l).e==o?++i:++h;for(e=new Ww(n.e);e.a<e.c.c.length;)c=(a=v9(t=uG(N3(e),18)))&&r&&oM(gK(oIn(t,hMt))),f=t.c.i,a&&c?++h:a&&!c?++i:HQ(f).e==o?++h:++i;return h-i}function WHn(n,t,e,i){this.e=n,this.k=uG(oIn(n,(GYn(),kmt)),312),this.g=Inn(pbt,e6n,10,t,0,1),this.b=Inn(fot,zZn,345,t,7,1),this.a=Inn(pbt,e6n,10,t,0,1),this.d=Inn(fot,zZn,345,t,7,1),this.j=Inn(pbt,e6n,10,t,0,1),this.i=Inn(fot,zZn,345,t,7,1),this.p=Inn(fot,zZn,345,t,7,1),this.n=Inn(cot,zZn,484,t,8,1),FP(this.n,(qx(),!1)),this.f=Inn(cot,zZn,484,t,8,1),FP(this.f,!0),this.o=e,this.c=i}function QHn(n,t){var e,i,r;if(!t.dc())if(uG(t.Xb(0),292).d==(vAn(),Udt))dEn(n,t);else for(i=t.Kc();i.Ob();){switch((e=uG(i.Pb(),292)).d.g){case 5:YOn(n,e,gpn(n,e));break;case 0:YOn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:YOn(n,e,Ain(n,e));break;case 2:fmn(e),YOn(n,e,dPn(e)?e.c:e.f);break;case 1:fmn(e),YOn(n,e,dPn(e)?e.f:e.c)}WCn(e.a)}}function JHn(n,t,e,i){var r,c,a;return a=new KE(t,e),n.a?i?(++(r=uG(nJ(uG(cQ(n.b,t),260)),260)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:r.b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(uG(nJ(n.e),511).b=a,a.d=n.e,n.e=a,(r=uG(cQ(n.b,t),260))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(vJ(n.b,t,r=new TZ(a)),++n.c)):(n.a=n.e=a,vJ(n.b,t,new TZ(a)),++n.c),++n.d,a}function YHn(n,t){var e,i,r,c;if(t.Ug("Network simplex",1),n.e.a.c.length<1)t.Vg();else{for(r=new Ww(n.e.a);r.a<r.c.c.length;)uG(N3(r),125).e=0;for((c=n.e.a.c.length>=40)&&IGn(n),rzn(n),mFn(n),e=ign(n),i=0;e&&i<n.f;)sUn(n,e,WDn(n,e)),e=ign(n),++i;c&&FPn(n),n.a?oxn(n,dHn(n)):dHn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,t.Vg()}}function ZHn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=uG(i.Pb(),18),t.o&&t.d.a.gc()<=1?(a=new MO((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),aq(uG(t.d.a.ec().Kc().Pb(),18).a,a)):(r=uG(cQ(t.c,e),467)).b||r.c?MHn(n,e,t):n.d==(kbn(),fEt)&&(r.d||r.e)&&I$n(n,t)&&t.d.a.gc()<=1?NWn(e,t):I_n(n,e,t);t.k&&z8(t.d,new je)}}function nUn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g,p,m,v;for(u=(r+c)/2+a,g=i*e.Math.cos(u),p=i*e.Math.sin(u),m=g-t.g/2,v=p-t.f/2,ycn(t,m),Mcn(t,v),l=n.a.Eg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,o=(r+c-d)/2):(b=(c-r)/l,o=r),w=GFn(t),n.e&&(n.e.Fg(n.d),n.e.Gg(w)),h=new Ww(w);h.a<h.c.c.length;)s=uG(N3(h),27),f=n.a.Eg(s),nUn(n,s,i+n.c,o,o+b*f,a),o+=b*f}function tUn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[i]);break;case 3:JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Fen(n,i+1,t)}}function eUn(n,t,e,i){var r,c,a,o,u,s,h,f;for(YF(o=new MO(e,i),uG(oIn(t,(mon(),Vft)),8)),f=new Ww(t.e);f.a<f.c.c.length;)JF((h=uG(N3(f),153)).d,o),kD(n.e,h);for(a=new Ww(t.c);a.a<a.c.c.length;){for(r=new Ww((c=uG(N3(a),289)).a);r.a<r.c.c.length;)JF(uG(N3(r),250).d,o);kD(n.c,c)}for(s=new Ww(t.d);s.a<s.c.c.length;)JF((u=uG(N3(s),453)).d,o),kD(n.d,u)}function iUn(n,t){var e,i,r,c,a,o,u,s;for(u=new Ww(t.j);u.a<u.c.c.length;)for(r=new w7((o=uG(N3(u),12)).b);l$(r.a)||l$(r.b);)t!=(c=(e=(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c==o?i.d:i.c).i)&&((s=uG(oIn(i,(jYn(),aTt)),17).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&aq(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&aq(n.e,c))))}function rUn(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),39)).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 cUn(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(),39),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));return cUn(c,r)}if(r<0){for(c=new Sa,i=n.Kc();i.Ob();)e=uG(i.Pb(),39),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 cUn(c,r)}}return uG(B$(n.Kc()),39)}function aUn(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),39),(OQn(),UPt))))&&s8(r,c,r.c.b,r.c);MK(0!=r.b),izn(n,i=uG(r.a.a.c,39)),e.fh(1),GBn(n,i,0-uM(pK(oIn(i,(OQn(),NPt))))/2,0),e.fh(1),e.Vg()}function oUn(){oUn=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 uUn(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<s;++u)null==r.i&&eqn(r),i=r.i,(o=u>=0&&u<i.length?i[u]:null).rk()&&!o.sk()&&(F$(o,331)?$yn(n,uG(o,35),t,e):0!=((a=uG(o,19)).Bb&Qtt)&&XSn(n,a,t,e));t.Vh()&&uG(e,54).ei(uG(t,54)._h())}return e}return null}function sUn(n,t,e){var i,r,c;if(!t.f)throw hv(new vM("Given leave edge is no tree edge."));if(e.f)throw hv(new vM("Given enter edge is a tree edge already."));for(t.f=!1,Q$(n.p,t),e.f=!0,FV(n.p,e),i=e.e.e-e.d.e-e.a,ILn(n,e.e,t)||(i=-i),c=new Ww(n.e.a);c.a<c.c.c.length;)ILn(n,r=uG(N3(c),125),t)||(r.e+=i);n.j=1,AM(n.c),oNn(n,uG(N3(new Ww(n.e.a)),125)),MVn(n)}function hUn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b;if(Krn(n,t,e),c=t[e],b=i?(KQn(),_Rt):(KQn(),kRt),gD(t.length,e,i)){for(v7(n,r=t[i?e-1:e+1],i?(can(),Wjt):(can(),Vjt)),h=0,l=(u=c).length;h<l;++h)NMn(n,a=u[h],b);for(v7(n,c,i?(can(),Vjt):(can(),Wjt)),s=0,f=(o=r).length;s<f;++s)(a=o[s]).e||NMn(n,a,Gdn(b))}else for(s=0,f=(o=c).length;s<f;++s)NMn(n,a=o[s],b);return!1}function fUn(n,t,e,i,r){var c,a,o,u,s,h,f;for(hZ(),f$(n,new Uu),o=new N4(n,0),f=new Zm,c=0;o.b<o.d.gc();)MK(o.b<o.d.gc()),a=uG(o.d.Xb(o.c=o.b++),163),0!=f.c.length&&EX(a)*jX(a)>2*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 lUn(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.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((e=uG(oIn(c,(GYn(),Fpt)),64))!=(KQn(),kRt)&&e!=_Rt||(i=uM(pK(oIn(c,bmt))),o==aRt&&(i*=r),c.n.b=i-uG(oIn(c,WMt),8).b,fhn(c,!1,!0)))}function bUn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;if(!uN(n.e))return uG(HNn(n,t,e),76);if(t!=e&&(a=(b=(r=uG(n.g,124))[e]).Lk(),EFn(n.e,a))){for(w=VKn(n.e.Dh(),a),u=-1,o=-1,i=0,s=0,f=t>e?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 wUn(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<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)i=uG(N3(r),10),c=uG(oIn(i,JMt),101),a=i.j,c==($Pn(),rRt)||c==aRt||c==cRt?(hZ(),f$(a,Ywt)):c!=uRt&&c!=sRt&&(hZ(),f$(a,ndt),pMn(a),o==(nin(),qjt)&&f$(a,Zwt)),i.i=!0,qLn(i);t.Vg()}function dUn(n){var t,i,r,c,a,o,u,s;for(s=new Ym,t=new ak,o=n.Kc();o.Ob();)c=uG(o.Pb(),10),u=jx(KS(new sk,c),t),VAn(s.f,c,u);for(a=n.Kc();a.Ob();)for(r=new Fz(ix(Xgn(c=uG(a.Pb(),10)).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||RKn(xS(DS($S(RS(new uk,e.Math.max(1,uG(oIn(i,(jYn(),oTt)),17).a)),1),uG(cQ(s,i.c.i),125)),uG(cQ(s,i.d.i),125)));return t}function gUn(){gUn=E,TSt=Aq(new wJ,(uIn(),Slt),(zYn(),cwt)),ESt=Aq(new wJ,Elt,swt),SSt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),MSt=wz(Aq(Aq(new wJ,Elt,Zbt),Slt,nwt),Plt,twt),PSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),jSt=wz(new wJ,Plt,awt),kSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),ySt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function pUn(n,t,e,i,r,c){var a,o,u,s,h,f;for(a=JIn(t,u=Kfn(t)-Kfn(n)),o=p$(0,0,0);u>=0&&(!fjn(n,a)||(u<22?o.l|=1<<u:u<44?o.m|=1<<u-22:o.h|=1<<u-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>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 mUn(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.a<o.c.c.length;){for(a=uG(N3(o),12),f=0,c=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(a),new Wd(a)])));hDn(r);)(i=uG(N9(r),12)).i.c==t.c&&(f+=cD(n,i.i)+1,++c);e=f/c,(h=a.j)==(KQn(),kRt)?n.f[a.p]=e<s?n.c-e:n.b+(u-e):h==_Rt&&(n.f[a.p]=e<s?n.b+e:n.c-(u-e))}}function vUn(n,t,e){var i,r,c,a;if(null==n)throw hv(new ZM(IZn));for(i=(c=n.length)>0&&(s3(0,n.length),45==n.charCodeAt(0)||(s3(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==Cvn((s3(i,n.length),n.charCodeAt(i))))throw hv(new ZM(y0n+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw hv(new ZM(y0n+n+'"'));if(r||a>e)throw hv(new ZM(y0n+n+'"'));return a}function kUn(n){var t,i,r,c,a,o;for(a=new lS,c=new Ww(n.a);c.a<c.c.c.length;)Qb(r=uG(N3(c),118),r.f.c.length),Jb(r,r.k.c.length),0==r.i&&(r.o=0,s8(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),118)).o+1,t=new Ww(r.f);t.a<t.c.c.length;)Yb(o=uG(N3(t),132).a,e.Math.max(o.o,i)),Jb(o,o.i-1),0==o.i&&s8(a,o,a.c.b,a.c)}function yUn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n);a.a<a.c.c.length;){for(c=uG(N3(a),74),o=(i=lCn(uG(zrn((!c.b&&(c.b=new f_(cFt,c,4,7)),c.b),0),84))).i,u=i.j,MN(r=uG(zrn((!c.a&&(c.a=new fV(oFt,c,6,6)),c.a),0),166),r.j+o,r.k+u),yN(r,r.b+o,r.c+u),e=new DD((!r.a&&(r.a=new MD(eFt,r,5)),r.a));e.e!=e.i.gc();)mN(t=uG(Zkn(e),377),t.a+o,t.b+u);fun(uG(zDn(c,(XYn(),L$t)),75),o,u)}}function MUn(n){switch(n){case 100:return tZn(Wct,!0);case 68:return tZn(Wct,!1);case 119:return tZn(Qct,!0);case 87:return tZn(Qct,!1);case 115:return tZn(Jct,!0);case 83:return tZn(Jct,!1);case 99:return tZn(Yct,!0);case 67:return tZn(Yct,!1);case 105:return tZn(Zct,!0);case 73:return tZn(Zct,!1);default:throw hv(new Ky(Vct+n.toString(16)))}}function TUn(n){var t,i,r,c,a;switch(c=uG(zq(n.a,0),10),t=new gMn(n),kD(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,uG(oIn(c,(GYn(),Fpt)),64).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return o2(r=new lOn,t),c2(i=new UZ,a=uG(zq(c.j,0),12)),u2(i,r),JF(dL(r.n),a.n),JF(dL(r.a),a.a),t}function jUn(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&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 EUn(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 SUn(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 PUn(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]<n.length&&58==VJ(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=RNn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function CUn(n){var t,e,i,r,c,a,o;for(r=new Zm,i=new Fz(ix(Xgn(n.b).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))&&kD(r,new m7(e,htn(n,e.c),htn(n,e.d)));for(o=new _w(new Fw(n.e).a.vc().Kc());o.a.Ob();)t=uG(o.a.Pb(),44),(c=uG(t.md(),113)).d.p=0;for(a=new _w(new Fw(n.e).a.vc().Kc());a.a.Ob();)t=uG(a.a.Pb(),44),0==(c=uG(t.md(),113)).d.p&&kD(n.d,HHn(n,c))}function IUn(n){var t,e,i,r,c;for(c=h0(n),r=new DD((!n.e&&(n.e=new f_(aFt,n,7,4)),n.e));r.e!=r.i.gc();)if(i=uG(Zkn(r),74),!Ern(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84)),c))return!0;for(e=new DD((!n.d&&(n.d=new f_(aFt,n,8,5)),n.d));e.e!=e.i.gc();)if(t=uG(Zkn(e),74),!Ern(lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),c))return!0;return!1}function OUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.a<c.c.c.length;)for(u=new Ww(uG(N3(c),30).a);u.a<u.c.c.length;){for(o=uG(N3(u),10),s=new Zm,a=0,i=new Fz(ix(qgn(o).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||!v9(e)&&e.c.i.c==e.d.i.c||((r=uG(oIn(e,(jYn(),uTt)),17).a)>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 AUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.a<c.c.c.length;)for(u=new Ww(uG(N3(c),30).a);u.a<u.c.c.length;){for(o=uG(N3(u),10),s=new Zm,a=0,i=new Fz(ix(Xgn(o).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||!v9(e)&&e.c.i.c==e.d.i.c||((r=uG(oIn(e,(jYn(),uTt)),17).a)>a&&(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 LUn(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),39),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<i.c.c.length;)for(c=0,a=Fkn((e=uG(N3(i),121)).b,0);a.b!=a.d.c;)uG(I6(a),39).g=c++;return r}return n7(Uhn(cT(nPt,1),U3n,121,0,[t]))}function NUn(n){var t,i,r,c,a,o,u,s;for(s=new Uk,u=null,i=uG(I6(t=Fkn(n,0)),8),c=uG(I6(t),8);t.b!=t.d.c;)u=i,i=c,c=uG(I6(t),8),a=Mrn(YF(new MO(u.a,u.b),i)),o=Mrn(YF(new MO(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(o.a+o.b)/2),a.a=gq(a.a)*r,a.b=gq(a.b)*r,o.a=gq(o.a)*r,o.b=gq(o.b)*r,aq(s,JF(a,i)),aq(s,JF(o,i));return s}function $Un(n,t,e){var i,r,c,a,o;e.Ug("Minimize Crossings "+n.a,1),i=0==t.b.c.length||!Qj(JJ(new fX(null,new h3(t.b,16)),new hd(new Ic))).Bd((vS(),Kut)),o=1==t.b.c.length&&1==uG(zq(t.b,0),30).a.c.length,c=xA(oIn(t,(jYn(),rMt)))===xA((Own(),Ixt)),i||o&&!c||(Bln(r=eFn(n,t),(a=uG(hyn(r,0),219)).c.kg()?a.c.eg()?new Jg(n):new Yg(n):new Qg(n)),Pwn(n)),e.Vg()}function DUn(n,t,e,i){var r,c,a,o,u;return a=n.Ph(),r=null,(u=n.Jh())?t&&0==(PHn(n,t,e).Bb&P0n)?(i=Nyn(u.El(),n,i),n.di(null),r=t.Qh()):u=null:(a&&(u=a.Qh()),t&&(r=t.Qh())),u!=r&&u&&u.Il(n),o=n.Fh(),n.Bh(t,e),u!=r&&r&&r.Hl(n),n.vh()&&n.wh()&&(a&&o>=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 xUn(n){var t,e,i;if(null==n.b){if(i=new zM,null!=n.i&&(VA(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(aY(n.i)||(i.a+="//"),VA(i,n.a)),null!=n.d&&(i.a+="/",VA(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),VA(i,n.j[t]);null!=n.g&&(i.a+="?",VA(i,n.g))}else VA(i,n.a);null!=n.e&&(i.a+="#",VA(i,n.e)),n.b=i.a}return n.b}function RUn(n,t){var e,i,r,c,a,o;for(r=new Ww(t.a);r.a<r.c.c.length;)F$(c=oIn(i=uG(N3(r),10),(GYn(),rmt)),12)&&(o=SGn(t,i,(a=uG(c,12)).o.a,a.o.b),a.n.a=o.a,a.n.b=o.b,NLn(a,uG(oIn(i,Fpt),64)));e=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))?(kfn(n,(jYn(),JMt),($Pn(),cRt)),uG(oIn(HQ(n),Hpt),21).Fc(rpt),AVn(n,e,!1)):AVn(n,e,!0)}function KUn(n,t,e,i,r){var c,a,o,u;Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),kfn(c,(GYn(),rmt),t.c.i),kfn(a=new lOn,rmt,t.c),NLn(a,r),o2(a,c),kfn(t.c,lmt,c),Hb(o=new gMn(n),gbt),kfn(o,JMt,cRt),kfn(o,rmt,t.d.i),kfn(u=new lOn,rmt,t.d),NLn(u,r),o2(u,o),kfn(t.d,lmt,o),c2(t,a),u2(t,u),o3(0,e.c.length),pC(e.c,0,c),mv(i.c,o),kfn(c,Opt,xwn(1)),kfn(o,Opt,xwn(1))}function FUn(n,t,e,i){var r,c,a,o;if(o=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))),r=pz(Ngn(h1n,PJ(pz(Ngn(null==e?0:Hon(e),f1n)),15))),a=bun(n,t,o),c=lun(n,e,r),a&&r==a.a&&xQ(e,a.g))return e;if(c&&!i)throw hv(new vM("key already present: "+e));return a&&yRn(n,a),c&&yRn(n,c),HLn(n,new fJ(e,r,t,o),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),SEn(n),a?a.g:null}function _Un(n,t,e){var i,r,c,a,o;for(c=0;c<t;c++){for(i=0,o=c+1;o<t;o++)i=Lgn(Lgn(Ngn(E3(n[c],L0n),E3(n[o],L0n)),E3(e[c+o],L0n)),E3(pz(i),L0n)),e[c+o]=pz(i),i=Dz(i,32);e[c+t]=pz(i)}for(wun(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=Lgn(Lgn(Ngn(E3(n[r],L0n),E3(n[r],L0n)),E3(e[a],L0n)),E3(pz(i),L0n)),e[a]=pz(i),i=Lgn(i=Dz(i,32),E3(e[++a],L0n)),e[a]=pz(i),i=Dz(i,32);return e}function BUn(n,t,i){var r,c,a,o,u,s,h,f;if(!P6(t)){for(s=uM(pK(Omn(i.c,(jYn(),ITt)))),!(h=uG(Omn(i.c,CTt),140))&&(h=new Nk),r=i.a,c=null,u=t.Kc();u.Ob();)o=uG(u.Pb(),12),f=0,c?(f=s,f+=c.o.b):f=h.d,a=jx(KS(new sk,o),n.f),vJ(n.k,o,a),RKn(xS(DS($S(RS(new uk,0),t0(e.Math.ceil(f))),r),a)),c=o,r=a;RKn(xS(DS($S(RS(new uk,0),t0(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function HUn(n,t,e,i,r,c,a,o){var u,s,h;return h=!1,s=c-e.s,u=e.t-t.f+uXn(e,s,!1).a,!(i.g+o>s)&&(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 UUn(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 GUn(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.a<a.c.c.length;)for(c=uG(N3(a),12),o=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(c),new Wd(c)])));hDn(o);)GUn(n,uG(N9(o),12).i,r);return r}return null}function qUn(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=uG(n.Ab.g,2033),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(m_(t,(e=r[c]).d))return e}else if(null==t){for(i=new DD(n.Ab);i.e!=i.i.gc();)if(null==(e=uG(Zkn(i),598)).d)return e}else for(i=new DD(n.Ab);i.e!=i.i.gc();)if(m_(t,(e=uG(Zkn(i),598)).d))return e;return null}function XUn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p;fon(b=w5(n,Qhn(t),r),k6(r,Iet)),d=m6(w=r,Let),GIn(new Zp(b).a,d),g=m6(w,"endPoint"),UIn(new im(b).a,g),p=p6(w,Met),fPn(new am(b).a,p),f=k6(r,jet),t_((c=new nA(n,b)).a,c.b,f),l=k6(r,Tet),e_((a=new tA(n,b)).a,a.b,l),s=p6(r,Set),Tjn((o=new eA(e,b)).b,o.a,s),h=p6(r,Eet),jjn((u=new iA(i,b)).b,u.a,h)}function zUn(n,t,e){var i,r,c,a,o;switch(o=null,t.g){case 1:for(r=new Ww(n.j);r.a<r.c.c.length;)if(oM(gK(oIn(i=uG(N3(r),12),(GYn(),Gpt)))))return i;kfn(o=new lOn,(GYn(),Gpt),(qx(),!0));break;case 2:for(a=new Ww(n.j);a.a<a.c.c.length;)if(oM(gK(oIn(c=uG(N3(a),12),(GYn(),hmt)))))return c;kfn(o=new lOn,(GYn(),hmt),(qx(),!0))}return o&&(o2(o,n),NLn(o,e),rMn(o.n,n.o,e)),o}function VUn(n,t){var i,r,c,a,o,u;for(u=-1,o=new lS,r=new w7(n.b);l$(r.a)||l$(r.b);){for(i=uG(l$(r.a)?N3(r.a):N3(r.b),18),u=e.Math.max(u,uM(pK(oIn(i,(jYn(),tMt))))),i.c==n?kS(JJ(new fX(null,new h3(i.b,16)),new fe),new cg(o)):kS(JJ(new fX(null,new h3(i.b,16)),new le),new ag(o)),a=Fkn(o,0);a.b!=a.d.c;)vR(c=uG(I6(a),72),(GYn(),Dpt))||kfn(c,Dpt,i);Ohn(t,o),BY(o)}return u}function WUn(n,t,i,r,c){var a,o,u,s,h;u=c?r.b:r.a,cS(n.a,r)||(h=u>i.s&&u<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(u-uM(pK(gR(i.e))))<t4n&&e.Math.abs(u-uM(pK(gR(i.j))))<t4n,s|=e.Math.abs(u-uM(pK(pR(i.e))))<t4n&&e.Math.abs(u-uM(pK(pR(i.j))))<t4n),(h||s)&&((o=uG(oIn(t,(jYn(),bMt)),75))||(o=new Uk,kfn(t,bMt,o)),s8(o,a=new eN(r),o.c.b,o.c),FV(n.a,a)))}function QUn(n,t,e,i){var r,c,a,o,u,s,h;if(FNn(n,t,e,i))return!0;for(a=new Ww(t.f);a.a<a.c.c.length;){switch(c=uG(N3(a),334),o=!1,s=(u=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:o=Gln(n,u+c.b.a,0,u+c.c.a,h-1);break;case 1:o=Gln(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:o=Gln(n,u+c.b.a,r,u+c.c.a,n.p-1);break;default:o=Gln(n,0,h+c.b.a,u-1,h+c.c.a)}if(o)return!0}return!1}function JUn(n,t,e){var i,r,c,a,o,u,s,h,f;for(e.Ug("Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,s=null,i=Fkn(t.b,0);!s&&i.b!=i.d.c;)oM(gK(oIn(f=uG(I6(i),39),(OQn(),UPt))))&&(s=f,(u=f.e).a=uG(oIn(f,GPt),17).a,u.b=uG(oIn(f,qPt),17).a);o=Lhn(s),h=1;do{h=(o=$In((r=o,e.eh(h),r))).b/n.a|0}while(0!=o.b);for(a=Fkn(t.b,0);a.b!=a.d.c;)YF((c=uG(I6(a),39)).e,new MO(c.f.a/2,c.f.b/2));e.Vg()}function YUn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug(X9n,1),$V(n.b),$V(n.a),o=null,c=Fkn(t.b,0);!o&&c.b!=c.d.c;)oM(gK(oIn(s=uG(I6(c),39),(OQn(),UPt))))&&(o=s);for(s8(u=new lS,o,u.c.b,u.c),_Qn(n,u),h=Fkn(t.b,0);h.b!=h.d.c;)a=mK(oIn(s=uG(I6(h),39),(OQn(),OPt))),r=null!=U1(n.b,a)?uG(U1(n.b,a),17).a:0,kfn(s,EPt,xwn(r)),i=1+(null!=U1(n.a,a)?uG(U1(n.a,a),17).a:0),kfn(s,TPt,xwn(i));e.Vg()}function ZUn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,qnt),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new Ru))),U4(n,qnt,K3n,qNt),U4(n,qnt,o4n,15),U4(n,qnt,a4n,xwn(0)),U4(n,qnt,Xnt,Jkn(FNt)),U4(n,qnt,p4n,Jkn(BNt)),U4(n,qnt,g4n,Jkn(UNt)),U4(n,qnt,R3n,Gnt),U4(n,qnt,f4n,Jkn(_Nt)),U4(n,qnt,x4n,Jkn(HNt)),U4(n,qnt,znt,Jkn(RNt)),U4(n,qnt,r9n,Jkn(KNt))}function nGn(n,t){var e,i,r,c,a,o,u,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return KQn(),FRt;switch(s=n.n.a,h=n.n.b,o=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return KQn(),_Rt;if(s+o>a)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 tGn(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.a<r.c.c.length;)for(i=uG(N3(r),30),c=uG(N3(o=new Ww(i.a)),10),s=uV(n.a[c.p]);o.a<o.c.c.length;)a=uG(N3(o),10),s!=(h=uV(n.a[a.p]))&&(f=y$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.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 eGn(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.a<h.c.c.length;)xA((s=uG(N3(h),187)).of((XYn(),m$t)))===xA((Zrn(),cxt))&&(aHn(f,s,!1,i,r,c,a),bAn(n,f));for(o=e.Kc();o.Ob();)for(h=new Ww(uG(o.Pb(),853).Rf());h.a<h.c.c.length;)xA((s=uG(N3(h),187)).of((XYn(),m$t)))===xA((Zrn(),rxt))&&(aHn(f,s,!0,i,r,c,a),bAn(n,f))}function iGn(n,t,e){var i,r,c,a,o,u,s;for(a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new Fz(ix(eRn(c=uG(Zkn(a),27)).a.Kc(),new h));hDn(r);)z$n(i=uG(N9(r),74))||z$n(i)||BNn(i)||(u=uG(DA(FX(e.f,c)),39),s=uG(cQ(e,lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))),39),u&&s&&(kfn(o=new uZ(u,s),(OQn(),RPt),i),zsn(o,i),aq(u.d,o),aq(s.b,o),aq(t.a,o)))}function rGn(n,t){var i,r,c,a,o,u,s;for(u=uG(uG(Y9(n.r,t),21),87).Kc();u.Ob();)(r=(o=uG(u.Pb(),117)).c?iq(o.c):0)>0?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 cGn(){cGn=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 aGn(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 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.a<r.c.c.length;)t!=(i=uG(N3(r),153))&&(c+=a=n.i[t.a][i.a],(e=atn(t.d,i.d))>0&&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;t<c.c.length-1;)u3(t-1,c.c.length),e=uG(c.c[t-1],8),u3(t,c.c.length),i=uG(c.c[t],8),u3(t+1,c.c.length),r=uG(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?i7(c,t):++t;return c}function hGn(n,t){var e,i,r,c;if(Cln(),c=uG(oIn(n.i,(jYn(),JMt)),101),0!=n.j.g-t.j.g||c!=($Pn(),rRt)&&c!=aRt&&c!=cRt)return 0;if(c==($Pn(),rRt)&&(e=uG(oIn(n,YMt),17),i=uG(oIn(t,YMt),17),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return ugn(n.n.a,t.n.a);case 2:return ugn(n.n.b,t.n.b);case 3:return ugn(t.n.a,n.n.a);case 4:return ugn(t.n.b,n.n.b);default:throw hv(new kM(n6n))}}function fGn(n,t){var e,i,r,c,a,o,u;for(e=Tx(NS(AS(LS(new lk,t),new qZ(t.e)),cdt),n.a),0==t.j.c.length||een(uG(zq(t.j,0),60).a,e),u=new nv,vJ(n.e,e,u),a=new ek,o=new ek,c=new Ww(t.k);c.a<c.c.c.length;)FV(a,(r=uG(N3(c),18)).c),FV(o,r.d);(i=a.a.gc()-o.a.gc())<0?(hfn(u,!0,(xdn(),JDt)),hfn(u,!1,YDt)):i>0&&(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;r<c;++r)s=n.xj(r),o=n.Nj(s,o);o?(o.nj(a),o.oj()):n.Jj(a)}else n.Jj(a);else if(nmn(n,t,e),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)o=n.Nj(n.xj(r),o);o&&o.oj()}return!0}function gGn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=n.Dj(t,n.Zi(t,e)),e,t,c),n.Mj()&&!(n.Yi()&&a?udn(a,e):xA(a)===xA(e))?(a&&(r=n.Oj(a,r)),(r=n.Nj(e,r))?(r.nj(i),r.oj()):n.Jj(i)):r?(r.nj(i),r.oj()):n.Jj(i),a):(a=n.Dj(t,n.Zi(t,e)),n.Mj()&&!(n.Yi()&&a?udn(a,e):xA(a)===xA(e))&&(r=null,a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function pGn(n,t){var i,r,c,a,o,u,s,h;if(n.e=t,n.f=uG(oIn(t,(mon(),Qft)),234),LCn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!oM(gK(oIn(t,(cGn(),Mft)))))for(h=n.e.e.c.length,u=new Ww(t.e);u.a<u.c.c.length;)(s=uG(N3(u),153).d).a=BX(n.f)*h,s.b=BX(n.f)*h;for(i=t.b,a=new Ww(t.c);a.a<a.c.c.length;)if(c=uG(N3(a),289),(r=uG(oIn(c,Rft),17).a)>0){for(o=0;o<r;o++)kD(i,new $W(c));CNn(c)}}function mGn(n,t,e,i){var r,c,a,o,u,s,h,f,l;if(f=new QW(n.Zg()),nrn(t,Bet,f),e&&!n.Xg().a.dc())for(nrn(t,"logs",s=new Ib),o=0,l=new Gw(n.Xg().b.Kc());l.b.Ob();)h=new QW(mK(l.b.Pb())),uin(s,o),W5(s,o,h),++o;if(i&&nrn(t,"executionTime",new Pb(n.Wg())),!n.Yg().a.dc())for(a=new Ib,nrn(t,pet,a),o=0,c=new Gw(n.Yg().b.Kc());c.b.Ob();)r=uG(c.b.Pb(),871),u=new _y,uin(a,o),W5(a,o,u),mGn(r,u,e,i),++o}function vGn(){vGn=E,SP(),qHt=new Df,Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Act)])]),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Lct)])]),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Nct)]),Uhn(cT(Y_t,1),uat,600,0,[new dE(Lct)])]),new PN("-1"),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE("\\c+")])]),new PN("0"),new PN("0"),new PN("1"),new PN("0"),new PN(Uct)}function kGn(n,t){var e,i,r,c,a,o,u,s;for(t.Ug("Hypernodes processing",1),i=new Ww(n.b);i.a<i.c.c.length;)for(a=new Ww(uG(N3(i),30).a);a.a<a.c.c.length;)if(oM(gK(oIn(c=uG(N3(a),10),(jYn(),uMt))))&&c.j.c.length<=2){for(s=0,u=0,e=0,r=0,o=new Ww(c.j);o.a<o.c.c.length;)switch(uG(N3(o),12).j.g){case 1:++s;break;case 2:++u;break;case 3:++e;break;case 4:++r}0==s&&0==e&&NJn(n,c,r<=u)}t.Vg()}function yGn(n,t,e,i,r){var c,a,o,u,s,h,f;for(a=new Ww(t);a.a<a.c.c.length;){if(u=(c=uG(N3(a),18)).c,e.a._b(u))l0(),s=USt;else{if(!i.a._b(u))throw hv(new vM("Source port must be in one of the port sets."));l0(),s=GSt}if(h=c.d,e.a._b(h))l0(),f=USt;else{if(!i.a._b(h))throw hv(new vM("Target port must be in one of the port sets."));l0(),f=GSt}o=new UAn(c,s,f),vJ(n.b,c,o),mv(r.c,o)}}function MGn(n){var t,e;return n.c&&n.c.Vh()&&(e=uG(n.c,54),n.c=uG(mwn(n,e),142),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,2,e,n.c)),F$(n.Cb,411)?n.Db>>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.b<o.d.gc();)if(MK(o.b<o.d.gc()),0!=(s=uG(o.d.Xb(o.c=o.b++),30).a).c.length)for(i=null,r=null,c=null,a=null,u=0;u<s.c.length;u++)u3(u,s.c.length),(r=(i=uG(s.c[u],10)).k)==(zIn(),wbt)&&a==wbt&&(h=jXn(i,c)).a&&(QFn(i,c,h.b,h.c),u3(u,s.c.length),nE(s.c,u,1),--u,i=c,r=a),c=i,a=r;e.Vg()}function jGn(n,t,e){var i,r,c,a,o,u,s;if(t==e)return!0;if(t=uDn(n,t),e=uDn(n,e),i=PMn(t)){if((u=PMn(e))!=i)return!!u&&(a=i.mk())==u.mk()&&null!=a;if(!t.d&&(t.d=new MD(g_t,t,1)),r=(c=t.d).i,!e.d&&(e.d=new MD(g_t,e,1)),r==(s=e.d).i)for(o=0;o<r;++o)if(!jGn(n,uG(zrn(c,o),89),uG(zrn(s,o),89)))return!1;return!0}return t.e==e.e}function EGn(n,t,e,i){var r,c,a,o,u,s,h,f;if(EFn(n.e,t)){for(f=VKn(n.e.Dh(),t),c=uG(n.g,124),h=null,u=-1,o=-1,r=0,s=0;s<n.i;++s)a=c[s],f.am(a.Lk())&&(r==e&&(u=s),r==i&&(o=s,h=a.md()),++r);if(-1==u)throw hv(new dM(zet+e+Vet+r));if(-1==o)throw hv(new dM(Wet+i+Vet+r));return zdn(n,u,o),uN(n.e)&&Yv(n,VZ(n,7,t,xwn(i),h,e,!0)),h}throw hv(new vM("The feature must be many-valued to support move"))}function SGn(n,t,e,i){var r,c,a,o,u;switch((u=new eN(t.n)).a+=t.o.a/2,u.b+=t.o.b/2,o=uM(pK(oIn(t,(jYn(),QMt)))),c=n.f,a=n.d,r=n.c,uG(oIn(t,(GYn(),Fpt)),64).g){case 1:u.a+=a.b+r.a-e/2,u.b=-i-o,t.n.b=-(a.d+o+r.b);break;case 2:u.a=c.a+a.b+a.c+o,u.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+o-r.a;break;case 3:u.a+=a.b+r.a-e/2,u.b=c.b+a.d+a.a+o,t.n.b=c.b+a.a+o-r.b;break;case 4:u.a=-e-o,u.b+=a.d+r.b-i/2,t.n.a=-(a.b+o+r.a)}return u}function PGn(n){var t,e,i,r,c,a;return zsn(i=new Dan,n),xA(oIn(i,(jYn(),Byt)))===xA((xdn(),ZDt))&&kfn(i,Byt,pgn(i)),null==oIn(i,(K7(),jNt))&&(a=uG(mIn(n),167),kfn(i,jNt,XA(a.of(jNt)))),kfn(i,(GYn(),rmt),n),kfn(i,Hpt,new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),r=QWn((R0(n)&&(vP(),new Vy(R0(n))),vP(),new Wx(R0(n)?new Vy(R0(n)):null,n)),YDt),c=uG(oIn(i,_Mt),107),p0(e=i.d,c),p0(e,r),i}function CGn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(zIn(),wbt)?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12)),kfn(n,Ypt,gK(oIn(i,Ypt)))):i.k==bbt?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12)),kfn(n,Ypt,(qx(),!0))):r.k==bbt?(kfn(n,(GYn(),Zpt),uG(oIn(r,Zpt),12)),kfn(n,nmt,uG(oIn(r,nmt),12)),kfn(n,Ypt,(qx(),!0))):(kfn(n,(GYn(),Zpt),t.c),kfn(n,nmt,e.d))}function IGn(n){var t,e,i,r,c,a,o;for(n.o=new ND,i=new lS,a=new Ww(n.e.a);a.a<a.c.c.length;)1==Ebn(c=uG(N3(a),125)).c.length&&s8(i,c,i.c.b,i.c);for(;0!=i.b;)0!=Ebn(c=uG(0==i.b?null:(MK(0!=i.b),Lrn(i,i.a.a)),125)).c.length&&(t=uG(zq(Ebn(c),0),218),e=c.g.a.c.length>0,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<e.d.gc();)for(MK(e.b<e.d.gc()),t=uG(e.d.Xb(e.c=e.b++),131),i=new N4(n.i,e.b);i.b<i.d.gc();)MK(i.b<i.d.gc()),nVn(t,uG(i.d.Xb(i.c=i.b++),131));XJn(n.i,uG(oIn(n.d,(GYn(),dmt)),234)),aWn(n.i)}function LGn(n,t){var e,i;if(null!=t)if(i=_Tn(n)){if(0==(1&i.i))return TP(),!(e=uG(cQ(_Ft,i),57))||e.fk(t);if(i==ZHt)return KA(t);if(i==YHt)return F$(t,17);if(i==iUt)return F$(t,161);if(i==tUt)return F$(t,222);if(i==JHt)return F$(t,180);if(i==eUt)return FA(t);if(i==rUt)return F$(t,191);if(i==nUt)return F$(t,168)}else if(F$(t,58))return n.dl(uG(t,58));return!1}function NGn(){var n,t,e,i,r,c,a,o,u;for(NGn=E,dHt=Inn(tUt,ret,28,255,15,1),gHt=Inn(JHt,N1n,28,64,15,1),t=0;t<255;t++)dHt[t]=-1;for(e=90;e>=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.f<t.f?-1:n.f>t.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:i<r-1?-c:(!n.c&&(n.c=j2(Bsn(n.f))),a=n.c,!t.c&&(t.c=j2(Bsn(t.f))),o=t.c,r<0?a=j5(a,_qn(-r)):r>0&&(o=j5(o,_qn(r))),Pvn(a,o))):c<u?-1:1}function DGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug(W3n,1),n.vf(t),c=0;n.xf(c)&&!e.$g();){for(n.wf(),h=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(h);)for(u=uG(N9(h),309),o=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(o);)(a=uG(N9(o),309))!=u&&(r=n.uf(a,u))&&JF(u.c,r);for(s=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(s);)DOn(i=(u=uG(N9(s),309)).c,-n.d,-n.d,n.d,n.d),JF(u.d,i),i.a=0,i.b=0;++c}e.Vg()}function xGn(n,t){var i,r,c,a,o,u,s,h,f,l,b;if(n.dc())return new sj;for(s=0,f=0,r=n.Kc();r.Ob();)c=uG(r.Pb(),36).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*uM(pK(oIn(uG(n.Kc().Pb(),36),(jYn(),dyt))))),l=0,b=0,u=0,i=t,o=n.Kc();o.Ob();)l+(h=(a=uG(o.Pb(),36)).f).a>s&&(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;a<r;a++)c=Lgn(c,Lgn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<e;a++)c=Lgn(c,E3(t[a],L0n)),n[a]=pz(c),c=$z(c,32)}else{for(a=1;a<e;a++)c=Lgn(c,Lgn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<r;a++)c=Lgn(c,E3(i[a],L0n)),n[a]=pz(c),c=$z(c,32)}0!=dwn(c,0)&&(n[a]=pz(c))}function FGn(n){var t,e,i,r,c,a;if(QYn(),4!=n.e&&5!=n.e)throw hv(new vM("Token#complementRanges(): must be RANGE: "+n.e));for(pxn(c=n),szn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==zct&&(i-=2),(r=new K3(4)).b=Inn(YHt,W1n,28,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=zct&&(r.b[a++]=e+1,r.b[a]=zct),r.a=!0,r}function _Gn(n,t){var e,i,r,c,a,o,u,s,h;for(t.Ug("Layer constraint edge reversal",1),a=new Ww(n.b);a.a<a.c.c.length;){for(c=uG(N3(a),30),h=-1,e=new Zm,s=D4(c.a),r=0;r<s.length;r++)i=uG(oIn(s[r],(GYn(),Xpt)),311),-1==h?i!=(Zen(),ppt)&&(h=r):i==(Zen(),ppt)&&(a2(s[r],null),$jn(s[r],h++,c)),i==(Zen(),dpt)&&mv(e.c,s[r]);for(u=new Ww(e);u.a<u.c.c.length;)a2(o=uG(N3(u),10),null),a2(o,c)}t.Vg()}function BGn(n,t,e){var i,r,c,a,o,u,s,h;if(0==(i=e.gc()))return!1;if(n.Pj())if(s=n.Qj(),PCn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,s):n.Ij(5,null,e,t,s),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)h=n.g[r],o=n.Nj(h,o),o=n.Uj(h,o);o?(o.nj(a),o.oj()):n.Jj(a)}else n.Jj(a);else if(PCn(n,t,e),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)u=n.g[r],o=n.Nj(u,o);o&&o.oj()}return!0}function HGn(n,t){var e,i,r,c,a,o,u,s;for(t.Ug("Hierarchical port dummy size processing",1),o=new Zm,s=new Zm,e=2*uM(pK(oIn(n,(jYn(),gTt)))),r=new Ww(n.b);r.a<r.c.c.length;){for(i=uG(N3(r),30),o.c.length=0,s.c.length=0,a=new Ww(i.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((u=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),yRt)?mv(o.c,c):u==KRt&&mv(s.c,c));x$n(o,!0,e),x$n(s,!1,e)}t.Vg()}function UGn(n,t,e,i){var r,c,a,o,u;for(a=new Ww(n.k);a.a<a.c.c.length;)r=uG(N3(a),132),i&&r.c!=(_7(),$St)||(u=r.b).g<0&&r.d>0&&(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.a<c.c.c.length;)r=uG(N3(c),132),i&&r.c!=(_7(),$St)||(o=r.a).g<0&&r.d>0&&(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)/2<EX(c)*jX(c)?(o=c,mv(b.c,c)):(u+=EX(c)*jX(c),mv(l.c,c),l.c.length>1&&(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(0!=(4&f.i),"srcType is not an array"),yG(0!=(4&u.i),"destType is not an array"),h=f.c,a=u.c,yG(0!=(1&h.i)?h==a:0==(1&a.i),"Array types don't match"),$fn(n,t,e,i,r),0==(1&h.i)&&f!=u)if(s=Kcn(n),c=Kcn(e),xA(n)===xA(e)&&t<i)for(t+=r,o=i+r;o-- >i;)uQ(c,o,s[--t]);else for(o=i+r;i<o;)uQ(c,i++,s[t++]);else b$n(n,t,e,i,r,!0)}function XGn(n,t){var e,i,r,c,a,o,u,s,h;t.Ug("Box layout",2),r=sM(pK(zDn(n,(lIn(),zNt)))),c=uG(zDn(n,GNt),107),e=oM(gK(zDn(n,FNt))),i=oM(gK(zDn(n,_Nt))),0===uG(zDn(n,RNt),320).g?(h=new Z_((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),hZ(),f$(h,new qp(i)),a=h,o=xAn(n),(null==(u=pK(zDn(n,xNt)))||(tJ(u),u<=0))&&(u=1.3),ZQn(n,(s=sJn(a,r,c,o.a,o.b,e,(tJ(u),u))).a,s.b,!1,!0)):Kzn(n,r,c,e),t.Vg()}function zGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(f=iPn(n,e),o=0;o<t;o++){for(pF(r,e),l=new Zm,MK(i.b<i.d.gc()),b=uG(i.d.Xb(i.c=i.b++),418),s=f+o;s<n.b;s++)a=b,MK(i.b<i.d.gc()),kD(l,new pFn(a,b=uG(i.d.Xb(i.c=i.b++),418),e));for(h=f+o;h<n.b;h++)MK(i.b>0),i.a.Xb(i.c=--i.b),h>f+o&&LQ(i);for(c=new Ww(l);c.a<c.c.c.length;)pF(i,uG(N3(c),418));if(o<t-1)for(u=f+o;u<n.b;u++)MK(i.b>0),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),kzn(r=new QN(2),n),kzn(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;r<u.length&&(u.length=r)}return u}function QGn(){QGn=E,mCt=new CN(20),pCt=new _N((XYn(),W$t),mCt),ECt=new _N(DDt,20),jCt=new _N(IDt,3),eCt=new _N(c$t,r4n),yCt=new _N(vDt,xwn(1)),TCt=new _N(TDt,(qx(),!0)),rCt=w$t,xdn(),cCt=new _N(d$t,aCt=ZDt),sCt=O$t,hCt=A$t,lCt=_$t,bCt=H$t,wCt=U$t,dCt=q$t,fCt=K$t,gCt=V$t,vCt=bDt,eDn(),LCt=nCt,MCt=JPt,CCt=HDt,OCt=XDt,PCt=BDt,SCt=_Dt,Iwn(),new _N(UDt,ICt=fKt),kCt=QPt,uCt=VPt,ACt=ZPt,iCt=XPt,oCt=zPt}function JGn(n){var t,e;if(!hsn(t=mK(zDn(n,(XYn(),e$t))),n)&&!vnn(n,yDt)&&(0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i||oM(gK(zDn(n,C$t))))){if(null!=t&&0!=KAn(t).length)throw XWn(n,e=JA(JA(new lx("Layout algorithm '"),t),"' not found for ")),hv(new jM(e.a));if(!hsn(S0n,n))throw XWn(n,e=JA(JA(new lx("Unable to load default layout algorithm "),S0n)," for unconfigured node ")),hv(new jM(e.a))}}function YGn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(o=n.a).length;s<f;++s)qX(c=o[s],w,b);else r=LMn(n,!1),qX(n.a[0],i.c+t.b,r[0]),qX(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(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;u<h;++u)F$(c=a[u],336)&&uG(c,336).lf()}function ZGn(n){var t,e,i,r,c,a,o,u,s,h,f;for((f=new ra).d=0,a=new Ww(n.b);a.a<a.c.c.length;)c=uG(N3(a),30),f.d+=c.a.c.length;for(i=0,r=0,f.a=Inn(YHt,W1n,28,n.b.c.length,15,1),s=0,h=0,f.e=Inn(YHt,W1n,28,f.d,15,1),e=new Ww(n.b);e.a<e.c.c.length;)for((t=uG(N3(e),30)).p=i++,f.a[t.p]=r++,h=0,u=new Ww(t.a);u.a<u.c.c.length;)(o=uG(N3(u),10)).p=s++,f.e[o.p]=h++;return f.c=new gp(f),f.b=iR(f.d),OUn(f,n),f.f=iR(f.d),AUn(f,n),f}function nqn(n,t){var i,r,c;for(c=uG(zq(n.n,n.n.c.length-1),209).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Ww(n.n);i.a<i.c.c.length;)r+=uG(N3(i),209).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),ijn(n.j)}function tqn(n,t){var e,i,r,c,a,o,u,s,h;if(null==(s=gK(oIn(t,(cGn(),Kft))))||(tJ(s),s)){for(h=Inn(ZHt,B2n,28,t.e.c.length,16,1),a=d$n(t),r=new lS,u=new Ww(t.e);u.a<u.c.c.length;)(e=Gxn(n,uG(N3(u),153),null,null,h,a))&&(zsn(e,t),s8(r,e,r.c.b,r.c));if(r.b>1)for(i=Fkn(r,0);i.b!=i.d.c;)for(c=0,o=new Ww((e=uG(I6(i),235)).e);o.a<o.c.c.length;)uG(N3(o),153).a=c++;return r}return n7(Uhn(cT(mft,1),U3n,235,0,[t]))}function eqn(n){var t,e,i,r,c;if(!n.g){if(c=new ys,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,eqn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new fV(o_t,n,21,17)),r=new DD(n.s);r.e!=r.i.gc();++i)hw(uG(Zkn(r),461),i);CW(c,(!n.s&&(n.s=new fV(o_t,n,21,17)),n.s)),lbn(c),n.g=new Afn(n,c),n.i=uG(c.g,254),null==n.i&&(n.i=Q_t),n.p=null,y9(n).b&=-5}return n.g}function iqn(n,t){var e,i,r,c,a,o,u,s,h;if((e=t.qi(n.a))&&null!=(u=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),"memberTypes")))){for(s=new Zm,a=0,o=(c=WGn(u,"\\w")).length;a<o;++a)F$(h=-1==(i=(r=c[a]).lastIndexOf("#"))?hK(n,t.jk(),r):0==i?gtn(n,null,(s3(1,r.length+1),r.substr(1))):gtn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))),156)&&kD(s,uG(h,156));return s}return hZ(),hZ(),zot}function rqn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=AMn(n,!1),XX(n.a[0],r.d+i.d,t[0]),XX(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(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;s<f;++s)XX(c=o[s],w,b);for(u=0,h=(a=n.a).length;u<h;++u)F$(c=a[u],336)&&uG(c,336).mf()}function cqn(n){var t,e,i,r,c,a,o,u,s;for(s=Inn(YHt,W1n,28,n.b.c.length+1,15,1),u=new ek,i=0,c=new Ww(n.b);c.a<c.c.c.length;){for(r=uG(N3(c),30),s[i++]=u.a.gc(),o=new Ww(r.a);o.a<o.c.c.length;)for(e=new Fz(ix(Xgn(uG(N3(o),10)).a.Kc(),new h));hDn(e);)t=uG(N9(e),18),u.a.zc(t,u);for(a=new Ww(r.a);a.a<a.c.c.length;)for(e=new Fz(ix(qgn(uG(N3(a),10)).a.Kc(),new h));hDn(e);)t=uG(N9(e),18),u.a.Bc(t)}return s}function aqn(n,t,e,i){var r,c,a,o,u;if(u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&udn(c,e))return!0}else if(null!=e){for(o=0;o<n.i;++o)if(c=r[o],u.am(c.Lk())&&udn(e,c.md()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&xA(e)===xA(fK(n,uG(c.md(),58))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&null==c.md())return!1;return!1}function oqn(n,t){var e,i,r,c,a,o;if((e=t.qi(n.a))&&null!=(o=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),_et))))switch(r=ax(o,$Cn(35)),i=t.qk(),-1==r?(a=jz(n,Hrn(i)),c=o):0==r?(a=null,s3(1,o.length+1),c=o.substr(1)):(Knn(0,r,o.length),a=o.substr(0,r),s3(r+1,o.length+1),c=o.substr(r+1)),sJ(Nen(n,t))){case 2:case 3:return Xfn(n,i,a,c);case 0:case 4:case 5:case 6:return zfn(n,i,a,c)}return null}function uqn(n,t,i,r){var c,a,o,u;for(u=i,o=new Ww(t.a);o.a<o.c.c.length;){if(a=uG(N3(o),225),c=uG(a.b,68),Fgn(n.b.c,c.b.c+c.b.b)<=0&&Fgn(c.b.c,n.b.c+n.b.b)<=0&&Fgn(n.b.d,c.b.d+c.b.a)<=0&&Fgn(c.b.d,n.b.d+n.b.a)<=0){if(0==Fgn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Fgn(c.b.c+c.b.b,n.b.c)&&r.a>0||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<n.b-1;)a=uG(I6(c),8),o.e!=o.i.gc()?e=uG(Zkn(o),377):(gj(),Smn(o,e=new ns)),mN(e,a.a,a.b);for(;o.e!=o.i.gc();)Zkn(o),$Sn(o);MK(0!=n.b),yN(t,(r=uG(n.c.b.c,8)).a,r.b)}function hqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),a=uG(n.g,124),EFn(n.e,t)){if(t.Si()&&(c=Dqn(n,t,i,F$(t,102)&&0!=(uG(t,19).Bb&P0n)))>=0&&c!=e)throw hv(new vM(Xet));for(r=0,u=0;u<n.i;++u)if(o=a[u],s.am(o.Lk())){if(r==e)return uG(Uyn(n,u,(PP(),uG(t,69).xk()?uG(i,76):R5(t,i))),76);++r}throw hv(new dM(Hit+e+Vet+r))}for(u=0;u<n.i;++u)if(o=a[u],s.am(o.Lk()))return PP(),uG(t,69).xk()?o:o.md();return null}function fqn(n,t){var e,i,r,c,a,o,u,s;for(e=0,i=new Ww((u3(0,n.c.length),uG(n.c[0],105)).g.b.j);i.a<i.c.c.length;)uG(N3(i),12).p=e++;for(t==(KQn(),yRt)?f$(n,new nc):f$(n,new tc),a=0,s=n.c.length-1;a<s;)u3(a,n.c.length),c=uG(n.c[a],105),u3(s,n.c.length),u=uG(n.c[s],105),r=t==yRt?c.c:c.a,o=t==yRt?u.a:u.c,hV(c,t,(qhn(),sdt),r),hV(u,t,udt,o),++a,--s;a==s&&hV((u3(a,n.c.length),uG(n.c[a],105)),t,(qhn(),odt),null)}function lqn(n,t,e,i){var r,c,a,o,u,s;for(a=new SVn(n,t,e),u=new N4(i,0),r=!1;u.b<u.d.gc();)MK(u.b<u.d.gc()),(o=uG(u.d.Xb(u.c=u.b++),239))==t||o==e?LQ(u):!r&&uM(oD(o.g,o.d[0]).a)>uM(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<l&&a.a<l||l<u.a&&l<a.a||s.a<l&&o.a<l||l<s.a&&l<o.a)}function wqn(n,t){var e,i,r,c,a,o;if(!(a=uG(cQ(n.c,t),190)))throw hv(new SM("Edge did not exist in input."));return i=jvn(a),!pE((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a))&&(e=new DU(n,i,o=new Ib),NA((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),e),nrn(a,yet,o)),vnn(t,(XYn(),L$t))&&!(!(r=uG(zDn(t,L$t),75))||FQ(r))&&(z8(r,new gm(c=new Ib)),nrn(a,"junctionPoints",c)),ZG(a,"container",s0(t).k),null}function dqn(n,t,e,i){var r,c,a,o,u,s;if(!P6(t)){if((s=e.eh((F$(t,16)?uG(t,16).gc():x5(t.Kc()))/n.a|0)).Ug(V9n,1),u=new Ga,o=0,i==(xdn(),JDt)||i==YDt)for(a=t.Kc();a.Ob();)r=uG(a.Pb(),39),u=zcn(Uhn(cT(vat,1),EZn,20,0,[u,new Mp(r)])),o<r.f.a&&(o=r.f.a);else for(a=t.Kc();a.Ob();)r=uG(a.Pb(),39),u=zcn(Uhn(cT(vat,1),EZn,20,0,[u,new Mp(r)])),o<r.f.b&&(o=r.f.b);for(c=t.Kc();c.Ob();)kfn(r=uG(c.Pb(),39),(OQn(),NPt),o);s.Vg(),dqn(n,u,e,i)}}function gqn(n,t,e){var i,r,c,a,o,u;this.a=n,this.b=t,this.c=e,this.e=n7(Uhn(cT(But,1),EZn,177,0,[new ZP(n,t),new ZP(t,e),new ZP(e,n)])),this.f=n7(Uhn(cT(PNt,1),zZn,8,0,[n,t,e])),this.d=(i=YF(D$(this.b),this.a),r=YF(D$(this.c),this.a),c=YF(D$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),o=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),u=2*(i.a*c.b-i.b*c.a),new MO((r.b*a-i.b*o)/u,(i.a*o-r.a*a)/u))}function pqn(n,t){var e,i,r,c,a,o;for(c=n.c,a=n.d,c2(n,null),u2(n,null),t&&oM(gK(oIn(a,(GYn(),Gpt))))?c2(n,zUn(a.i,(can(),Wjt),(KQn(),kRt))):c2(n,a),t&&oM(gK(oIn(c,(GYn(),hmt))))?u2(n,zUn(c.i,(can(),Vjt),(KQn(),_Rt))):u2(n,c),i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),72),(r=uG(oIn(e,(jYn(),Xyt)),278))==(Zrn(),cxt)?kfn(e,Xyt,rxt):r==rxt&&kfn(e,Xyt,cxt);o=oM(gK(oIn(n,(GYn(),pmt)))),kfn(n,pmt,(qx(),!o)),n.a=fln(n.a)}function mqn(n,t){var e,i,r,c;return e=$kn(uG(oIn(t,(QGn(),cCt)),88)),0==n.b.b?null:(c=uG(l8(YJ(new fX(null,new h3(n.b,16)),new Ia),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),i=pK(yx(Wz(YJ((r=uG(l8(JJ(new fX(null,new h3(t.b,16)),new mp(c)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Oc(),new vp(e)),(sZ(),sZ(),Yot)))),uG(yx(lln(JJ(r.Oc(),new UI(e,i)))),39))}function vqn(n,t){var i,r,c,a,o,u,s,h,f,l,b;i=jx(new sk,n.f),u=n.i[t.c.i.p],l=n.i[t.d.i.p],o=t.c,f=t.d,a=o.a.b,h=f.a.b,u.b||(a+=o.n.b),l.b||(h+=f.n.b),s=t0(e.Math.max(0,a-h)),c=t0(e.Math.max(0,h-a)),b=e.Math.max(1,uG(oIn(t,(jYn(),uTt)),17).a)*B5(t.c.i.k,t.d.i.k),r=new PI(RKn(xS(DS($S(RS(new uk,b),c),i),uG(cQ(n.k,t.c),125))),RKn(xS(DS($S(RS(new uk,b),s),i),uG(cQ(n.k,t.d),125)))),n.c[t.p]=r}function kqn(n,t,i){var r,c,a,o,u;for(r=0,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)o="",0==(!(c=uG(Zkn(a),27)).n&&(c.n=new fV(lFt,c,1,7)),c.n).i||(o=uG(zrn((!c.n&&(c.n=new fV(lFt,c,1,7)),c.n),0),135).a),zsn(u=new E$(o),c),kfn(u,(mon(),Wft),c),u.a=r++,u.d.a=c.i+c.g/2,u.d.b=c.j+c.f/2,u.e.a=e.Math.max(c.g,1),u.e.b=e.Math.max(c.f,1),kD(t.e,u),VAn(i.f,c,u),uG(zDn(c,(cGn(),Lft)),101),$Pn()}function yqn(n,t){var e,i,r,c,a;t.Ug("Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(u3(0,a.c.length),qHn(n,uG(a.c[0],30),uG(zq(a,a.c.length-1),30),e=new bQ(n),r=new bQ(n)),0==e.a.c.length||(o3(0,a.c.length),pC(a.c,0,e)),0==r.a.c.length||mv(a.c,r)),vR(n,(GYn(),Upt))&&(s_n(n,i=new bQ(n),c=new bQ(n)),0==i.a.c.length||(o3(0,a.c.length),pC(a.c,0,i)),0==c.a.c.length||mv(a.c,c)),t.Vg()}function Mqn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&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=n<32?"\\x"+r1(t="0"+(n>>>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<e.c.c.length;)(t=uG(N3(e),12)).j==(KQn(),FRt)&&((i=uG(oIn(t,(GYn(),lmt)),10))?NLn(t,uG(oIn(i,Fpt),64)):t.e.c.length-t.g.c.length<0?NLn(t,kRt):NLn(t,_Rt));else{for(e=new Ww(n.j);e.a<e.c.c.length;)t=uG(N3(e),12),(i=uG(oIn(t,(GYn(),lmt)),10))?NLn(t,uG(oIn(i,Fpt),64)):t.e.c.length-t.g.c.length<0?NLn(t,(KQn(),kRt)):NLn(t,(KQn(),_Rt));kfn(n,JMt,($Pn(),oRt))}}function jqn(n){var t,e,i,r,c,a;for(this.e=new Zm,this.a=new Zm,e=n.b-1;e<3;e++)sR(n,0,uG(hyn(n,0),8));if(n.b<4)throw hv(new vM("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,yxn(this,n.b+this.b-1),a=new Zm,c=new Ww(this.e),t=0;t<this.b-1;t++)kD(a,pK(N3(c)));for(r=Fkn(n,0);r.b!=r.d.c;)i=uG(I6(r),8),kD(a,pK(N3(c))),kD(this.a,new R1(i,a)),u3(0,a.c.length),a.c.splice(0,1)}function Eqn(n,t){var e,i,r,c,a,o,u;for(r=new Ww(n.b);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)for((c=uG(N3(a),10)).k==(zIn(),bbt)&&(o=uG(N9(new Fz(ix(qgn(c).a.Kc(),new h))),18),u=uG(N9(new Fz(ix(Xgn(c).a.Kc(),new h))),18),Gqn(c,oM(gK(oIn(o,(GYn(),pmt))))&&oM(gK(oIn(u,pmt)))?ufn(t):t)),i=new Fz(ix(Xgn(c).a.Kc(),new h));hDn(i);)Nhn(e=uG(N9(i),18),oM(gK(oIn(e,(GYn(),pmt))))?ufn(t):t)}function Sqn(n,t,e,i,r){var c,a;if(e.f>=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)}yzn(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<c&&!((i=eXn(n,t))<e&&(e=i,Uon(n),0==e));r++);else for(e=vZn,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<c&&!((i=iXn(n,t))<e&&(e=i,Uon(n),0==e));r++);}function Aqn(n,t){var e,i,r,c,a,o;for(r=new Zm,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=uG(n.Xb(e),17).a+a;(u3(c+1,t.c.length),uG(t.c[c+1],17)).a<i;)++c;for(o=0,i-(u3(c,t.c.length),uG(t.c[c],17)).a>(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<n.gc()&&uG(n.Xb(e),17).a+a<=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a;)++e;c+=1+o}return r}function Lqn(n,t){var e,i,r,c,a;for(a=new Fz(ix(qgn(t).a.Kc(),new h));hDn(a);)if(c=uG(N9(a),18),0==n.f.b?(r=c.c.i.k==(zIn(),dbt)&&!!c.c.i.c&&c.c.i.c.p==n.c,hDn(new Fz(ix(qgn(c.c.i).a.Kc(),new h)))?(e=uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.c,i=c.c.i.k==bbt&&!!e&&e.p==n.c):i=!1):(r=c.c.i.k==(zIn(),dbt)&&c.c.i.p==n.c,i=c.c.i.k==bbt&&uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.p==n.c),r||i)return!0;return!1}function Nqn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(l=new Zm,p=g8(r),g=t*n.a,w=0,a=new ek,o=new ek,u=new Zm,m=0,v=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=ygn(p,c,o))&&(p.a.Bc(s),mv(u.c,s),a.a.zc(s,a),w=n.f[s.p],m+=n.e[s.p]-w*n.b,v+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||m>=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;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(udn(c,e))return u;++u}}else if(null!=e){for(o=0;o<n.i;++o)if(c=r[o],s.am(c.Lk())){if(udn(e,c.md()))return u;++u}if(i)for(u=0,a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(xA(e)===xA(fK(n,uG(c.md(),58))))return u;++u}}else for(a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(null==c.md())return u;++u}return-1}function xqn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(e.Xh(t)&&(h=(b=t)?uG(i,54).gi(b):null))if(d=e.Nh(t,n.a),(w=t.t)>1||-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.b<s.d.gc();)MK(s.b<s.d.gc()),xA(oIn(u=uG(s.d.Xb(s.c=s.b++),72),Xyt))===xA((Zrn(),rxt))&&(kfn(u,Dpt,e),LQ(s),kD(c.b,u));wDn(r,a,o)}}function Fqn(n,t,e,i){var r,c,a,o,u,s;if(e.c.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),u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,t),wDn(r,a,o),s=new N4(e.b,0);s.b<s.d.gc();)MK(s.b<s.d.gc()),u=uG(s.d.Xb(s.c=s.b++),72),uG(oIn(u,Xyt),278)==(Zrn(),rxt)&&(vR(u,Dpt)||kfn(u,Dpt,e),LQ(s),kD(c.b,u))}function _qn(n){var t,e,i,r;if(b_n(),t=t0(n),n<qot.length)return qot[t];if(n<=50)return t$n((cHn(),Kot),t);if(n<=$1n)return D9(t$n(Got[1],t),t);if(n>1e6)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.a<a.c.c.length;)if((c=uG(N3(a),10)).k==(zIn(),lbt)&&((r=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),kRt)||r==_Rt))for(i=new Fz(ix(Ggn(c).a.Kc(),new h));hDn(i);)0!=(t=(e=uG(N9(i),18)).a).b&&((o=e.c).i==c&&(MK(0!=t.b),uG(t.a.a.c,8).b=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o.i.n,o.n,o.a])).b),(u=e.d).i==c&&(MK(0!=t.b),uG(t.c.b.c,8).b=Gfn(Uhn(cT(PNt,1),zZn,8,0,[u.i.n,u.n,u.a])).b))}function Hqn(n,t,i,r){var c,a,o;if(this.j=new Zm,this.k=new Zm,this.b=new Zm,this.c=new Zm,this.e=new cN,this.i=new Uk,this.f=new nv,this.d=new Zm,this.g=new Zm,kD(this.b,n),kD(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=uG(oIn(r,(jYn(),bMt)),75))for(o=Fkn(c,0);o.b!=o.d.c;)gcn((a=uG(I6(o),8)).a,n.a)&&aq(this.i,a);i&&kD(this.j,i),kD(this.k,r)}function Uqn(n,t,e,i){var r,c,a,o,u,s,h;for(o=-1,h=new Ww(n);h.a<h.c.c.length;)(s=uG(N3(h),118)).g=o--,a=r=pz(t6(nY(JJ(new fX(null,new h3(s.f,16)),new ua),new sa)).d),u=c=pz(t6(nY(JJ(new fX(null,new h3(s.k,16)),new ha),new fa)).d),i||(a=pz(t6(nY(new fX(null,new h3(s.f,16)),new la)).d),u=pz(t6(nY(new fX(null,new h3(s.k,16)),new aa)).d)),s.d=a,s.a=r,s.i=u,s.b=c,0==u?s8(e,s,e.c.b,e.c):0==a&&s8(t,s,t.c.b,t.c)}function Gqn(n,t){var i,r,c,a,o;if(n.k==(zIn(),bbt)&&(i=n.k!=bbt||Qj(JJ(uG(oIn(n,(GYn(),gmt)),15).Oc(),new hd(new _t))).Bd((vS(),Kut))?t:(Ajn(),xxt),kfn(n,(GYn(),Qpt),i),i!=(Ajn(),Dxt)))for(r=uG(oIn(n,rmt),18),o=uM(pK(oIn(r,(jYn(),tMt)))),a=0,i==$xt?a=n.o.b-e.Math.ceil(o/2):i==xxt&&(a=e.Math.ceil(n.o.b-uM(pK(oIn(HQ(n),pTt)))-o)/2,n.o.b-=uM(pK(oIn(HQ(n),pTt))),n.o.b-=o),c=new Ww(n.j);c.a<c.c.c.length;)uG(N3(c),12).n.b=a}function qqn(n,t,e){var i,r,c,a,o,u,s,h,f;for(r=!0,a=new Ww(n.b);a.a<a.c.c.length;){for(c=uG(N3(a),30),s=T0n,h=null,u=new Ww(c.a);u.a<u.c.c.length;){if(o=uG(N3(u),10),f=uM(t.p[o.p])+uM(t.d[o.p])-o.d.d,i=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a,!(f>s&&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;s<h;++s)u2(u[s],a);kfn(t,lmt,c),++r}if(e){for(o=new lOn,kfn(c,(GYn(),rmt),e.i),kfn(o,rmt,e),NLn(o,(KQn(),kRt)),o2(o,c),s=0,h=(u=x4(e.g)).length;s<h;++s)c2(u[s],o);kfn(e,lmt,c),++r}return kfn(c,(GYn(),Opt),xwn(r)),mv(i.c,c),c}function zqn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(e=new _w(new Fw(n.c.b).a.vc().Kc());e.a.Ob();)o=uG(e.a.Pb(),44),null==(r=(t=uG(o.md(),143)).a)&&(r=""),!(i=UK(n.c,r))&&0==r.length&&(i=Qwn(n)),i&&!Wpn(i.c,t,!1)&&aq(i.c,t);for(a=Fkn(n.a,0);a.b!=a.d.c;)c=uG(I6(a),486),s=C9(n.c,c.a),l=C9(n.c,c.b),s&&l&&aq(s.c,new WO(l,c.c));for(BY(n.a),f=Fkn(n.b,0);f.b!=f.d.c;)h=uG(I6(f),486),t=HK(n.c,h.a),u=C9(n.c,h.b),t&&u&&cP(t,u,h.c);BY(n.b)}function Vqn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;c=new Cb(n),n9((a=new Zjn).g),n9(a.j),$V(a.b),n9(a.d),n9(a.i),$V(a.k),$V(a.c),$V(a.e),b=iNn(a,c,null),Mxn(a,c),r=b,t&&(o=wXn(s=new Cb(t)),iOn(r,Uhn(cT(nNt,1),EZn,536,0,[o]))),l=!1,f=!1,e&&(s=new Cb(e),Yet in s.a&&(l=v0(s,Yet).qe().a),Zet in s.a&&(f=v0(s,Zet).qe().a)),h=lj(xcn(new fy,l),f),SOn(new au,r,h),Yet in c.a&&nrn(c,Yet,null),(l||f)&&(mGn(h,u=new _y,l,f),nrn(c,Yet,u)),i=new bm(a),sln(new jN(r),i)}function Wqn(n,t,e){var i,r,c,a,o,u,s,h,f;for(a=new DEn,s=Uhn(cT(YHt,1),W1n,28,15,[0]),r=-1,c=0,i=0,u=0;u<n.b.c.length;++u){if(!((h=uG(zq(n.b,u),443)).b>0)){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<s.c.c.length;)(u=uG(N3(s),153)).a!=t.a&&(e[u.a]=vZn),kG(_Cn(h,u),D0n);for(;0!=h.b.c.length;)for(o[(f=uG(hin(h),153)).a]=!0,c=rx(new RE(n.b,f),0);c.c;)o[(l=mTn(r=uG(Ein(c),289),f)).a]||(a=vR(r,(Bjn(),ilt))?uM(pK(oIn(r,ilt))):n.c,(i=e[f.a]+a)<e[l.a]&&(e[l.a]=i,yon(h,l),kG(_Cn(h,l),D0n)))}function Jqn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(a=n.o,i=Inn(YHt,W1n,28,a,15,1),r=Inn(YHt,W1n,28,a,15,1),e=n.p,t=Inn(YHt,W1n,28,e,15,1),c=Inn(YHt,W1n,28,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!eTn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!eTn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(o=0;o<a&&!eTn(n,o,b);)++o;t[b]=o}for(w=0;w<e;w++){for(o=a-1;o>=0&&!eTn(n,o,w);)--o;c[w]=o}for(u=0;u<a;u++)for(l=0;l<e;l++)u<c[l]&&u>t[l]&&l<r[u]&&l>i[u]&&HBn(n,u,l,!1,!0)}function Yqn(n){var t,e,i,r,c,a,o,u;e=oM(gK(oIn(n,(cGn(),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<o&&a<=u?new MO(n.a,n.b):o<=u?JF(new MO(n.a,n.b),t):null):null:l>=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.a<o.c.c.length;)(a=uG(N3(o),10)).k==(zIn(),lbt)&&((r=uG(oIn(a,Fpt),64))==(KQn(),kRt)?a.n.a+=e.a-t.a:r==KRt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function aXn(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(a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((r=uG(oIn(c,Fpt),64))==(KQn(),kRt)?c.n.a+=e.a-t.a:r==KRt&&(c.n.b+=e.b-t.b));o=n.d,n.f.a=e.a-o.b-o.c,n.f.b=e.b-o.d-o.a}function oXn(n){var t,i,r,c,a,o,u,s,h,f;for(s=new Kw(new Lw(O$n(n)).a.vc().Kc());s.a.Ob();){for(r=uG(s.a.Pb(),44),h=0,f=0,h=(u=uG(r.ld(),10)).d.d,f=u.o.b+u.d.a,n.d[u.p]=0,t=u;(c=n.a[t.p])!=u;)i=rkn(t,c),o=0,o=n.c==(b0(),hSt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=uM(n.d[t.p])+o,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=u;do{n.d[t.p]=uM(n.d[t.p])+h,t=n.a[t.p]}while(t!=u);n.b[u.p]=h+f}}function uXn(n,t,i){var r,c,a,o,u,s,h,f,l,b;for(a=0,o=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c.length=0,kD(n.n,new c0(n.s,n.t,n.i))),u=0,f=new Ww(n.b);f.a<f.c.c.length;)a+(h=uG(N3(f),27)).g+(u>0?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.a<a.c.c.length;)(c=uG(N3(a),407)).a.a?(o=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,o)):(o=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),u=e.Math.max(u,o));n.a=new MO(u-f,s-l),n.c=new MO(f+n.d.a,l+n.d.b)}function hXn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new Dm(n),t=new Ts,null==(e=V_t).a.zc(n,e)){for(c=new DD(n1(n));c.e!=c.i.gc();)CW(a,hXn(uG(Zkn(c),29)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),r=new DD(n.s);r.e!=r.i.gc();)F$(i=uG(Zkn(r),179),331)&&ttn(t,uG(i,35));lbn(t),n.k=new YG(n,(uG(zrn(gZ((tQ(),M_t).o),7),19),t.i),t.g),CW(a,n.k),lbn(a),n.a=new vL((uG(zrn(gZ(M_t.o),4),19),a.i),a.g),y9(n).b&=-2}return n.a}function fXn(n,t,e,i){var r,c,a,o,u,s,h;if(h=VKn(n.e.Dh(),t),r=0,c=uG(n.g,124),u=null,PP(),uG(t,69).xk()){for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(udn(a,e)){u=a;break}++r}}else if(null!=e){for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(udn(e,a.md())){u=a;break}++r}}else for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(null==a.md()){u=a;break}++r}return u&&(uN(n.e)&&(s=t.Jk()?new i8(n.e,4,t,e,null,r,!0):VZ(n,t.tk()?2:1,t,e,t.ik(),-1,!0),i?i.nj(s):i=s),i=$Hn(n,u,i)),i}function lXn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,u=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+o,d=n.c?eCn(w,a,r,o):r.j,l=e.Math.max(s,w+b),h=e.Math.max(u,d+f);break;case 1:d=r.j+r.f+o,w=n.c?tCn(d,a,r,o):r.i,l=e.Math.max(s,w+b),h=e.Math.max(u,d+f);break;case 2:w=s+o,d=0,l=s+o+b,h=e.Math.max(u,f);break;case 3:w=0,d=u+o,l=e.Math.max(s,b),h=u+o+f;break;default:throw hv(new vM("IllegalPlacementOption."))}return new Mvn(n.a,l,h,t,w,d)}function bXn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if(u=n.d,l=uG(oIn(n,(GYn(),Pmt)),15),t=uG(oIn(n,Ept),15),l||t){if(a=uM(pK(Omn(n,(jYn(),lTt)))),o=uM(pK(Omn(n,bTt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=uG(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),u.d+=h+o}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=uG(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),u.a+=h+o}(s=e.Math.max(b,i))>n.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.b<i.d.gc();)MK(i.b<i.d.gc()),e=mK(i.d.Xb(i.c=i.b++)),(c=DVn(NFt,e))&&null!=(a=vVn(c,(t=v0(n,e)).te()?t.te().a:t.qe()?""+t.qe().a:t.re()?""+t.re().a:t.Ib()))&&(($x(c.j,(Rkn(),sNt))||$x(c.j,hNt))&&vfn(trn(r,bFt),c,a),$x(c.j,oNt)&&vfn(trn(r,aFt),c,a),$x(c.j,fNt)&&vfn(trn(r,wFt),c,a),$x(c.j,uNt)&&vfn(trn(r,lFt),c,a));return r}function dXn(n,t,e){var i,r,c,a,o,u,s,h;if(r=uG(n.g,124),EFn(n.e,t))return PP(),uG(t,69).xk()?new Cq(t,n):new OA(t,n);for(s=VKn(n.e.Dh(),t),i=0,o=0;o<n.i;++o){if(a=(c=r[o]).Lk(),s.am(a)){if(PP(),uG(t,69).xk())return c;if(a==(m$n(),NBt)||a==OBt){for(u=new lx(cpn(c.md()));++o<n.i;)((a=(c=r[o]).Lk())==NBt||a==OBt)&&JA(u,cpn(c.md()));return g_(uG(t.Hk(),156),u.a)}return null!=(h=c.md())&&e&&F$(t,102)&&0!=(uG(t,19).Bb&P0n)&&(h=ONn(n,t,o,i,h)),h}++i}return t.ik()}function gXn(n,t,e,i){var r,c,a,o,u,s;if(u=VKn(n.e.Dh(),t),c=uG(n.g,124),EFn(n.e,t)){for(r=0,o=0;o<n.i;++o)if(a=c[o],u.am(a.Lk())){if(r==e)return PP(),uG(t,69).xk()?a:(null!=(s=a.md())&&i&&F$(t,102)&&0!=(uG(t,19).Bb&P0n)&&(s=ONn(n,t,o,r,s)),s);++r}throw hv(new dM(Hit+e+Vet+r))}for(r=0,o=0;o<n.i;++o){if(a=c[o],u.am(a.Lk()))return PP(),uG(t,69).xk()?a:(null!=(s=a.md())&&i&&F$(t,102)&&0!=(uG(t,19).Bb&P0n)&&(s=ONn(n,t,o,r,s)),s);++r}return t.ik()}function pXn(){pXn=E,Hot=Uhn(cT(YHt,1),W1n,28,15,[j1n,1162261467,d1n,1220703125,362797056,1977326743,d1n,387420489,g0n,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,d1n,1291467969,1544804416,1838265625,60466176]),Uot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,31,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])}function mXn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=n.e,0==(u=t.e))return n;if(0==a)return 0==t.e?t:new VV(-t.e,t.d,t.a);if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a<0&&(e=Men(e)),u<0&&(i=Men(i)),cHn(),BA($gn(e,i),0)?Rmn($gn(e,i)):hW(Rmn(Men($gn(e,i))));if(-1==(r=c!=o?c>o?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.a<i.c.c.length;)for(c=new Ww(T3(uG(N3(i),30).a));c.a<c.c.c.length;)if(Nin(r=uG(N3(c),10))&&!(e=uG(oIn(r,(GYn(),Spt)),313)).g&&e.d)for(t=e,o=e.d;o;)Q_n(o.i,o.k,!1,!0),Ien(t.a),Ien(o.i),Ien(o.k),Ien(o.b),u2(o.c,t.c.d),u2(t.c,null),a2(t.a,null),a2(o.i,null),a2(o.k,null),a2(o.b,null),(a=new O5(t.i,o.a,t.e,o.j,o.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=o.c,a.g=t.g,a.d=o.d,kfn(t.i,Spt,a),kfn(o.a,Spt,a),o=o.d,t=a}function yXn(n,t){var e,i,r,c,a,o,u;if(null==n)return null;if(0==(c=n.length))return"";for(u=Inn(JHt,N1n,28,c,15,1),Knn(0,c,n.length),Knn(0,c,u.length),gW(n,0,c,u,0),e=null,o=t,r=0,a=0;r<c;r++)i=u[r],aZn(),i<=32&&0!=(2&vHt[i])?o?(!e&&(e=new fx(n)),mR(e,r-a++)):(o=t,32!=i&&(!e&&(e=new fx(n)),psn(e,r-a,r-a+1,String.fromCharCode(32)))):o=!1;return o?e?(c=e.a.length)>0?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<i.c.c.length;){for(e=uG(N3(i),30),u=0==r?0:r-1,o=uG(zq(n.b,u),30),a=new Ww(e.a);a.a<a.c.c.length;)xA(oIn(c=uG(N3(a),10),JMt))!==xA(($Pn(),rRt))&&xA(oIn(c,JMt))!==xA(cRt)&&(hZ(),f$(c.j,new Gbn(o,uG(oIn(n,Syt),284),qjn(c),oM(gK(oIn(n,Eyt))))),t.bh("Node "+c+" ports: "+c.j));hZ(),f$(e.a,new xon(o,uG(oIn(n,Syt),284),uG(oIn(n,Tyt),390))),t.bh("Layer "+r+": "+e),++r}t.Vg()}function TXn(n,t){var e,i,r,c,a;if(a=uG(t,138),pxn(n),pxn(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=Inn(YHt,W1n,28,a.b.length,15,1),void qGn(a.b,0,n.b,0,a.b.length);for(c=Inn(YHt,W1n,28,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=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]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function jXn(n,t){var e,i,r,c,a,o,u,s,h,f;return e=oM(gK(oIn(n,(GYn(),Ypt)))),o=oM(gK(oIn(t,Ypt))),i=uG(oIn(n,Zpt),12),u=uG(oIn(t,Zpt),12),r=uG(oIn(n,nmt),12),s=uG(oIn(t,nmt),12),h=!!i&&i==u,f=!!r&&r==s,e||o?(c=(!oM(gK(oIn(n,Ypt)))||oM(gK(oIn(n,Jpt))))&&(!oM(gK(oIn(t,Ypt)))||oM(gK(oIn(t,Jpt)))),a=!(oM(gK(oIn(n,Ypt)))&&oM(gK(oIn(n,Jpt)))||oM(gK(oIn(t,Ypt)))&&oM(gK(oIn(t,Jpt)))),new xB(h&&c||f&&a,h,f)):new xB(uG(N3(new Ww(n.j)),12).p==uG(N3(new Ww(t.j)),12).p,h,f)}function EXn(n){var t,i,r,c,a,o,u,s;for(r=0,i=0,s=new lS,t=0,u=new Ww(n.n);u.a<u.c.c.length;)0==(o=uG(N3(u),209)).c.c.length?s8(s,o,s.c.b,s.c):(r=e.Math.max(r,o.d),i+=o.a+(t>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.a<a.c.c.length;)c=uG(N3(a),27),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),ijn(n.j)}function SXn(n){var t,e,i,r;return 0!=(64&n.Db)?Egn(n):(t=new lx(Dtt),(i=n.k)?JA(JA((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(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;s<b;++s)u2(c[s],m);for(h=0,w=(a=T).length;h<w;++h)c2(a[h],j);for($jn(t,e,k),f=0,d=(o=g).length;f<d;++f)u2(o[f],v);for(u=0,l=(r=M).length;u<l;++u)c2(r[u],E)}function CXn(n){var t,i,r,c,a,o,u;for(r=new DD((!(o=uG(zDn(n,(SK(),zCt)),27)).e&&(o.e=new f_(aFt,o,7,4)),o.e));r.e!=r.i.gc();)i=uG(Zkn(r),74),u=new MO(uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).j,uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).k),a=new MO(uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).b,uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).c),c=new MO(a.a-u.a,a.b-u.b),t=e.Math.atan2(c.b,c.a),uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84).qf((jOn(),XIt),t)}function IXn(n,t){var i,r,c,a,o,u,s,h,f;for(t.Ug("Interactive Node Reorderer",1),!n.a&&(n.a=new fV(bFt,n,10,11)),f=n.a,u=new Zm,c=new DD(f);c.e!=c.i.gc();)vnn(i=uG(Zkn(c),27),(S_n(),JOt))&&mv(u.c,i);for(a=new Ww(u);a.a<a.c.c.length;)rin(f,i=uG(N3(a),27));for(hZ(),f$(u,new Ro),o=new Ww(u);o.a<o.c.c.length;)i=uG(N3(o),27),h=uG(zDn(i,(S_n(),JOt)),17).a,$dn(f,h=e.Math.min(h,f.i),i);for(s=0,r=new DD(f);r.e!=r.i.gc();)Myn(i=uG(Zkn(r),27),(S_n(),QOt),xwn(s)),++s;t.Vg()}function OXn(n,t,i){var r,c,a,o,u,s,h;return e.Math.abs(t.s-t.c)<t4n||e.Math.abs(i.s-i.c)<t4n?0:(r=FKn(n,t.j,i.e),c=FKn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new A2((_7(),$St),i,t,1),++a),-1==c&&(new A2((_7(),$St),t,i,1),++a)):(o=Hwn(t.j,i.s,i.c),o+=Hwn(i.e,t.s,t.c),u=Hwn(i.j,t.s,t.c),(s=r+16*o)<(h=c+16*(u+=Hwn(t.e,i.s,i.c)))?new A2((_7(),DSt),t,i,h-s):s>h?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),39);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.a<uM(pK(uG(zq(n.a,i),42).a))&&uw(uG(zq(n.a,i),42),r.e.a),r.e.a+r.f.a>uM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.a+r.f.a)):(r.e.b<uM(pK(uG(zq(n.a,i),42).a))&&uw(uG(zq(n.a,i),42),r.e.b),r.e.b+r.f.b>uM(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,nGn(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=zUn(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;b<w;++b){for(g=0,o=new Ww((f=l[b]).e);o.a<o.c.c.length;)++u[r=GL((c=uG(N3(o),10)).c)],d=uM(pK(oIn(t,(jYn(),dTt)))),u[r]>0&&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.a<a.c.c.length;)(c=uG(N3(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[Ten(i.b.b,i,0)]=c.k,s[Ten(i.b.b,i,0)]=c}}function DXn(n,t){var e,i,r,c,a,o,u,s,f,l,b;for(i=new Fz(ix(eRn(t).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(u=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),z$n(e)||(a=t.i+t.g/2,o=t.j+t.f/2,f=u.i+u.g/2,l=u.j+u.f/2,(b=new sj).a=f-a,b.b=l-o,OEn(c=new MO(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,o=l-b.b,OEn(s=new MO(b.a,b.b),u.g,u.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=o+b.b,Tcn(r=JFn(e,!0,!0),a),Ecn(r,o),mcn(r,f),jcn(r,l),DXn(n,u)))}function xXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,dnt),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new Yo))),U4(n,dnt,gnt,Jkn(yLt)),U4(n,dnt,pnt,Jkn(mLt)),U4(n,dnt,mnt,Jkn(pLt)),U4(n,dnt,vnt,Jkn(dLt)),U4(n,dnt,knt,Jkn(gLt)),U4(n,dnt,K3n,wLt),U4(n,dnt,o4n,8),U4(n,dnt,ynt,Jkn(kLt)),U4(n,dnt,Mnt,Jkn(hLt)),U4(n,dnt,Tnt,Jkn(fLt)),U4(n,dnt,q8n,(qx(),!1))}function RXn(n,t){var i,r,c,a,o,u,s,h,f,l;for(t.Ug("Simple node placement",1),l=uG(oIn(n,(GYn(),kmt)),312),u=0,a=new Ww(n.b);a.a<a.c.c.length;){for((o=(r=uG(N3(a),30)).c).b=0,i=null,h=new Ww(r.a);h.a<h.c.c.length;)s=uG(N3(h),10),i&&(o.b+=avn(s,i,l.c)),o.b+=s.d.d+s.o.b+s.d.a,i=s;u=e.Math.max(u,o.b)}for(c=new Ww(n.b);c.a<c.c.c.length;)for(f=(u-(o=(r=uG(N3(c),30)).c).b)/2,i=null,h=new Ww(r.a);h.a<h.c.c.length;)s=uG(N3(h),10),i&&(f+=avn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;t.Vg()}function KXn(n,t){var e,i,r,c;for(Frn(t.b.j),kS(YJ(new fX(null,new h3(t.d,16)),new cc),new ac),c=new Ww(t.d);c.a<c.c.c.length;){switch((r=uG(N3(c),105)).e.g){case 0:e=uG(zq(r.j,0),113).d.j,qb(r,uG(yx(Qz(uG(Y9(r.k,e),15).Oc(),Fdt)),113)),Gb(r,uG(yx(Wz(uG(Y9(r.k,e),15).Oc(),Fdt)),113));break;case 1:i=Ejn(r),qb(r,uG(yx(Qz(uG(Y9(r.k,i[0]),15).Oc(),Fdt)),113)),Gb(r,uG(yx(Wz(uG(Y9(r.k,i[1]),15).Oc(),Fdt)),113));break;case 2:FAn(n,r);break;case 3:IKn(r);break;case 4:DKn(n,r)}_rn(r)}n.a=null}function FXn(n,t,e){var i,r,c,a,o,u,s,h;return i=n.a.o==(w0(),dSt)?M0n:T0n,!(o=wGn(n,new _I(t,e))).a&&o.c?(aq(n.d,o),i):o.a?(r=o.a.c,u=o.a.d,e?(s=n.a.c==(b0(),fSt)?u:r,c=n.a.c==fSt?r:u,a=n.a.g[c.i.p],h=uM(n.a.p[a.p])+uM(n.a.d[c.i.p])+c.n.b+c.a.b-uM(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(b0(),hSt)?u:r,c=n.a.c==hSt?r:u,h=uM(n.a.p[n.a.g[c.i.p].p])+uM(n.a.d[c.i.p])+c.n.b+c.a.b-uM(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(qx(),!0),n.a.n[n.a.g[u.i.p].p]=!0,h):i}function _Xn(n,t,e,i){var r,c,a,o,u,s,h,f;if(0==i.gc())return!1;if(PP(),a=(u=uG(t,69).xk())?i:new Drn(i.gc()),EFn(n.e,t)){if(t.Si())for(h=i.Kc();h.Ob();)aqn(n,t,s=h.Pb(),F$(t,102)&&0!=(uG(t,19).Bb&P0n))||(c=R5(t,s),a.Fc(c));else if(!u)for(h=i.Kc();h.Ob();)c=R5(t,s=h.Pb()),a.Fc(c)}else{for(f=VKn(n.e.Dh(),t),r=uG(n.g,124),o=0;o<n.i;++o)if(c=r[o],f.am(c.Lk()))throw hv(new vM(dct));if(i.gc()>1)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<n.i;++c)if(r=i[c].Lk(),s.am(r)){if(r==(m$n(),NBt)||r==OBt){for(a=c,(u=wMn(n,t,e))?e_n(n,c):++c;c<n.i;)(r=i[c].Lk())==NBt||r==OBt?e_n(n,c):++c;u||uG(Uyn(n,a,R5(t,e)),76)}else wMn(n,t,e)?e_n(n,c):uG(Uyn(n,c,(PP(),uG(t,69).xk()?uG(e,76):R5(t,e))),76);return}wMn(n,t,e)||ttn(n,(PP(),uG(t,69).xk()?uG(e,76):R5(t,e)))}}function HXn(n,t,e){var i,r,c,a,o,u,s,h;return udn(e,n.b)||(n.b=e,c=new Jn,a=uG(l8(YJ(new fX(null,new h3(e.f,16)),c),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((vyn(),yht)),i=a.Hc(Mht),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(kht),i=a.Hc(Tht),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=uG(n.a.Ve(t,e),42),u=uG(h.a,17).a,s=uG(h.b,17).a,o=!1,u<0?n.c||(o=!0):n.e||(o=!0),s<0?n.d||(o=!0):n.f||(o=!0),o?HXn(n,h,e):h}function UXn(n){var t,i,r,c;c=n.o,VK(),n.A.dc()||udn(n.A,lht)?t=c.b:(t=dNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((oUn(),cKt))&&(t=e.Math.max(t,dNn(uG(AJ(n.p,(KQn(),kRt)),252))),t=e.Math.max(t,dNn(uG(AJ(n.p,_Rt),252)))),(i=fsn(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(QRt)&&(n.q!=($Pn(),aRt)&&n.q!=cRt||(t=e.Math.max(t,eq(uG(AJ(n.b,(KQn(),kRt)),127))),t=e.Math.max(t,eq(uG(AJ(n.b,_Rt),127)))))),oM(gK(n.e.Tf().of((XYn(),H$t))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,rqn(n.f)}function GXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)uG(a.Pb(),230).hg(h,t);for(f=0;f<t[h].length;f++){for(o=n.Kc();o.Ob();)uG(o.Pb(),230).ig(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(u=n.Kc();u.Ob();)uG(u.Pb(),230).jg(h,f,l,t);for(u3(l,b.c.length),e=0,r=new w7(uG(b.c[l],12).b);l$(r.a)||l$(r.b);)for(i=uG(l$(r.a)?N3(r.a):N3(r.b),18),s=n.Kc();s.Ob();)uG(s.Pb(),230).gg(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)uG(c.Pb(),230).fg()}function qXn(n,t){var e,i,r,c,a;for(n.b=uM(pK(oIn(t,(jYn(),gTt)))),n.c=uM(pK(oIn(t,vTt))),n.d=uG(oIn(t,Zyt),350),n.a=uG(oIn(t,vyt),282),aTn(t),r=(c=uG(l8(JJ(JJ(sin(sin(new fX(null,new h3(t.b,16)),new ke),new ye),new Me),new Te),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Kc();r.Ob();)e=uG(r.Pb(),18),uG(oIn(e,(GYn(),Tmt)),15).Jc(new og(n)),kfn(e,Tmt,null);for(i=c.Kc();i.Ob();)e=uG(i.Pb(),18),a=uG(oIn(e,(GYn(),jmt)),18),hYn(n,uG(oIn(e,ymt),15),a),kfn(e,ymt,null)}function XXn(n,t){var e,i,r,c,a,o,u;if(n.a){if(u=null,null!=(o=n.a.xe())?t.a+=""+o:null!=(a=n.a.mk())&&(-1!=(c=xL(a,$Cn(91)))?(s3(c,a.length+1),u=a.substr(c),t.a+=""+r1(null==a?IZn:(tJ(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new DD(n.d);i.e!=i.i.gc();)e=uG(Zkn(i),89),r?r=!1:t.a+=TZn,XXn(e,t);t.a+=">"}null!=u&&(t.a+=""+u)}else n.e?null!=(o=n.e.zb)&&(t.a+=""+o):(t.a+="?",n.b?(t.a+=" super ",XXn(n.b,t)):n.f&&(t.a+=" extends ",XXn(n.f,t)))}function zXn(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 VXn(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 WXn(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 QXn(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.b<a.d.gc()?(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)):null)?h.a:null,o&&(Vzn(o,d),d+=o.c.a),w=YVn(l,n,u,f,o?d+i:d),r=!o||UA(u,(oFn(),LSt)),c=!h||UA(f,(oFn(),LSt)),w>0?(b=(w-1)*e,o&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),o=h,u=f}while(h);n.f.a=d,t.Vg()}function JXn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=null,n.d&&(h=uG(U1(n.d,t),142)),!h){if(f=(c=n.a.vi()).i,!n.d||oS(n.d)!=f){for(u=new Ym,n.d&&xun(u,n.d),o=s=u.f.c+u.i.c;o<f;++o)i=uG(zrn(c,o),142),(e=uG(null==(r=tdn(n.e,i).xe())?VAn(u.f,null,i):kgn(u.i,r,i),142))&&e!=i&&(null==r?VAn(u.f,null,e):kgn(u.i,r,e));if(u.f.c+u.i.c!=f)for(a=0;a<s;++a)i=uG(zrn(c,a),142),(e=uG(null==(r=tdn(n.e,i).xe())?VAn(u.f,null,i):kgn(u.i,r,i),142))&&e!=i&&(null==r?VAn(u.f,null,e):kgn(u.i,r,e));n.d=u}h=uG(U1(n.d,t),142)}return h}function YXn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w;return l=oM(gK(oIn(t,(jYn(),EMt)))),b=null,a==(can(),Vjt)&&r.c.i==i?b=r.c:a==Wjt&&r.d.i==i&&(b=r.d),(h=o)&&l&&!b?(kD(h.e,r),w=e.Math.max(uM(pK(oIn(h.d,tMt))),uM(pK(oIn(r,tMt)))),kfn(h.d,tMt,w)):(KQn(),f=FRt,b?f=b.j:sN(uG(oIn(i,JMt),101))&&(f=a==Vjt?_Rt:kRt),s=nzn(n,t,i,a,f,r),u=K9((HQ(i),r)),a==Vjt?(c2(u,uG(zq(s.j,0),12)),u2(u,c)):(c2(u,c),u2(u,uG(zq(s.j,0),12))),h=new Sdn(r,u,s,uG(oIn(s,(GYn(),rmt)),12),a,!b)),UNn(n.a,r,new $B(h.d,t,a)),h}function ZXn(){var n;ZXn=E,GFt=new Xk,HFt=Inn($ot,zZn,2,0,6,1),zFt=S3(Zhn(33,58),Zhn(1,26)),VFt=S3(Zhn(97,122),Zhn(65,90)),WFt=Zhn(48,57),qFt=S3(zFt,0),XFt=S3(VFt,WFt),QFt=S3(S3(0,Zhn(1,6)),Zhn(33,38)),JFt=S3(S3(WFt,Zhn(65,70)),Zhn(97,102)),e_t=S3(qFt,tyn("-_.!~*'()")),i_t=S3(XFt,mmn("-_.!~*'()")),tyn(zit),mmn(zit),S3(e_t,tyn(";:@&=+$,")),S3(i_t,mmn(";:@&=+$,")),YFt=tyn(":/?#"),ZFt=mmn(":/?#"),n_t=tyn("/?#"),t_t=mmn("/?#"),(n=new ek).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),hZ(),UFt=new nT(n)}function nzn(n,t,e,i,r,c){var a,o,u,s,h,f;return a=null,s=i==(can(),Vjt)?c.c:c.d,u=pgn(t),s.i==e?(a=uG(cQ(n.b,s),10))||(kfn(a=DJn(s,uG(oIn(e,(jYn(),JMt)),101),r,VHn(s),null,s.n,s.o,u,t),(GYn(),rmt),s),vJ(n.b,s,a)):(o=wPn(a=DJn((h=new Yn,f=uM(pK(oIn(t,(jYn(),dTt))))/2,vfn(h,QMt,f),h),uG(oIn(e,JMt),101),r,i==Vjt?-1:1,null,new sj,new MO(0,0),u,t),e,i),kfn(a,(GYn(),rmt),o),vJ(n.b,o,a)),uG(oIn(t,(GYn(),Hpt)),21).Fc((r_n(),tpt)),sN(uG(oIn(t,(jYn(),JMt)),101))?kfn(t,JMt,($Pn(),oRt)):kfn(t,JMt,($Pn(),uRt)),a}function tzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;o=0,b=0,u=q1(n.g,n.g.length),c=n.e,a=n.j,i=n.b,r=n.c;do{for(l=0,s=new Ww(n.q);s.a<s.c.c.length;)f=QVn(n,uG(N3(s),10)),e=!0,(n.r==(THn(),Ijt)||n.r==Ljt)&&(e=oM(gK(f.b))),uG(f.a,17).a<0&&e?(++l,u=q1(n.g,n.g.length),n.e=n.e+uG(f.a,17).a,b+=c-n.e,c=n.e+uG(f.a,17).a,a=n.j,i=T3(n.b),r=T3(n.c)):(n.g=q1(u,u.length),n.e=c,n.b=(WW(i),i?new Z_(i):rG(new Ww(i))),n.c=(WW(r),r?new Z_(r):rG(new Ww(r))),n.j=a);++o,h=0!=l&&oM(gK(t.Kb(new WO(xwn(b),xwn(o)))))}while(h)}function ezn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return a=n.f,l=t.f,o=a==(_Rn(),DAt)||a==RAt,u=a==xAt||a==KAt,b=l==xAt||l==KAt,s=a==xAt||a==DAt,w=l==xAt||l==DAt,!o||l!=DAt&&l!=RAt?u&&b?n.f==KAt?n:t:s&&w?(a==xAt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,m=i.i+i.g,v=h.d+r.g,c<=(e.Math.max(m,v)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==xAt?n:t:n.f==DAt?n:t):n:n.f==RAt?n:t}function izn(n,t){var e,i,r,c,a;if(kfn(t,(OQn(),xPt),0),r=uG(oIn(t,LPt),39),0==t.d.b)r?(a=uM(pK(oIn(r,FPt)))+n.b+Mgn(n,r,t),kfn(t,FPt,a)):kfn(t,FPt,0);else{for(e=new Tp(Fkn(new Mp(t).a.d,0));Jj(e.a);)izn(n,uG(I6(e.a),65).c);i=uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),39),c=(uM(pK(oIn(uG(hx(new Tp(Fkn(new Mp(t).a.d,0))),39),FPt)))+uM(pK(oIn(i,FPt))))/2,r?(a=uM(pK(oIn(r,FPt)))+n.b+Mgn(n,r,t),kfn(t,FPt,a),kfn(t,xPt,uM(pK(oIn(t,FPt)))-c),ZVn(n,t)):kfn(t,FPt,c)}}function rzn(n){var t,e,i,r,c,a,o,u,s,h;for(s=n.e.a.c.length,c=new Ww(n.e.a);c.a<c.c.c.length;)uG(N3(c),125).j=!1;for(n.i=Inn(YHt,W1n,28,s,15,1),n.g=Inn(YHt,W1n,28,s,15,1),n.n=new Zm,r=0,h=new Zm,o=new Ww(n.e.a);o.a<o.c.c.length;)(a=uG(N3(o),125)).d=r++,0==a.b.a.c.length&&kD(n.n,a),Ohn(h,a.g);for(t=0,i=new Ww(h);i.a<i.c.c.length;)(e=uG(N3(i),218)).c=t++,e.f=!1;u=h.c.length,null==n.b||n.b.length<u?(n.b=Inn(eUt,I0n,28,u,15,1),n.c=Inn(ZHt,B2n,28,u,16,1)):AM(n.c),n.d=h,n.p=new dx(orn(n.d.c.length)),n.j=1}function czn(n,t){var e,i,r,c,a,o,u,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=uG(oIn(n.f,(Bjn(),rlt)),391),n.g=uG(oIn(n.f,ult),17).a,n.e=uM(pK(oIn(n.f,clt))),n.c=uM(pK(oIn(n.f,ilt))),nW(n.b),r=new Ww(n.f.c);r.a<r.c.c.length;)i=uG(N3(r),289),JHn(n.b,i.c,i,null),JHn(n.b,i.d,i,null);for(o=n.f.e.c.length,n.a=Jq(eUt,[zZn,I0n],[109,28],15,[o,o],2),s=new Ww(n.f.e);s.a<s.c.c.length;)Qqn(n,u=uG(N3(s),153),n.a[u.a]);for(n.i=Jq(eUt,[zZn,I0n],[109,28],15,[o,o],2),c=0;c<o;++c)for(a=0;a<o;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function azn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if((o=t.ah())||t.Ug(W3n,1),a=1/(e=uG(oIn(n,(GYn(),wmt)),15)).gc(),t._g())for(t.bh("ELK Layered uses the following "+e.gc()+" modules:"),l=0,f=e.Kc();f.Ob();)s=uG(f.Pb(),47),i=(l<10?"0":"")+l++,t.bh(" Slot "+i+": "+Ij(Tbn(s)));for(h=e.Kc();h.Ob();){if(s=uG(h.Pb(),47),t.$g())return;s.Kf(n,t.eh(a))}for(c=new Ww(n.b);c.a<c.c.c.length;)r=uG(N3(c),30),Ohn(n.a,r.a),r.a.c.length=0;for(u=new Ww(n.a);u.a<u.c.c.length;)a2(uG(N3(u),10),null);n.b.c.length=0,o||t.Vg()}function ozn(n){var t,e,i,r,c,a,o,u,s,h,f;if(u=new Zm,!vR(n,(GYn(),Rpt)))return u;for(i=uG(oIn(n,Rpt),15).Kc();i.Ob();)Dzn(t=uG(i.Pb(),10),n),mv(u.c,t);for(r=new Ww(n.b);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&(o=uG(oIn(c,Kpt),10))&&(o2(s=new lOn,c),NLn(s,uG(oIn(c,Fpt),64)),h=uG(zq(o.j,0),12),c2(f=new UZ,s),u2(f,h));for(e=new Ww(u);e.a<e.c.c.length;)a2(t=uG(N3(e),10),uG(zq(n.b,n.b.c.length-1),30));return u}function uzn(n,t,e){var i,r,c,a,o,u,s,h;for(h=new Zm,c=0,fan(s=new e4(0,e),new dln(0,0,s,e)),r=0,u=new DD(n);u.e!=u.i.gc();)o=uG(Zkn(u),27),i=uG(zq(s.a,s.a.c.length-1),172),(r+o.g+(0==uG(zq(s.a,0),172).b.c.length?0:e)>t||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 szn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw hv(new Ky("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=Inn(YHt,W1n,28,t,15,1),qGn(n.b,0,i,0,t),n.b=i),n.a=!0}}function hzn(n,t){var e,i,r,c,a,o,u;for(a=kz(n.a).Kc();a.Ob();){if((c=uG(a.Pb(),18)).b.c.length>0)for(i=new Z_(uG(Y9(n.a,c),21)),hZ(),f$(i,new Gd(t)),r=new N4(c.b,0);r.b<r.d.gc();){switch(MK(r.b<r.d.gc()),e=uG(r.d.Xb(r.c=r.b++),72),o=-1,uG(oIn(e,(jYn(),Xyt)),278).g){case 1:o=i.c.length-1;break;case 0:o=DSn(i);break;case 2:o=0}-1!=o&&(u3(o,i.c.length),kD((u=uG(i.c[o],249)).b.b,e),uG(oIn(HQ(u.b.c.i),(GYn(),Hpt)),21).Fc((r_n(),npt)),uG(oIn(HQ(u.b.c.i),Hpt),21).Fc(Ygt),LQ(r),kfn(e,omt,c))}c2(c,null),u2(c,null)}}function fzn(n,t){var e,i,r,c;return e=new Rn,1==(r=2==(r=(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())?1:0)&&_A(Kmn(uG(l8(JJ(i.Lc(),new Kn),tsn(Hvn(0),new tn)),168).a,2),0)&&(r=0),1==(c=2==(c=(i=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:0)&&_A(Kmn(uG(l8(JJ(i.Lc(),new Fn),tsn(Hvn(0),new tn)),168).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function lzn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(c=oM(gK(zDn(t=h0(n),(jYn(),sMt)))),h=0,r=0,s=new DD((!n.e&&(n.e=new f_(aFt,n,7,4)),n.e));s.e!=s.i.gc();)a=(o=BNn(u=uG(Zkn(s),74)))&&c&&oM(gK(zDn(u,hMt))),l=lCn(uG(zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0),84)),o&&a?++r:o&&!a?++h:R0(l)==t||l==t?++r:++h;for(i=new DD((!n.d&&(n.d=new f_(aFt,n,8,5)),n.d));i.e!=i.i.gc();)a=(o=BNn(e=uG(Zkn(i),74)))&&c&&oM(gK(zDn(e,hMt))),f=lCn(uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),o&&a?++h:o&&!a?++r:R0(f)==t||f==t?++h:++r;return h-r}function bzn(n,t){var e,i,r,c,a,o,u,s,h;if(t.Ug("Edge splitting",1),n.b.c.length<=2)t.Vg();else{for(MK((c=new N4(n.b,0)).b<c.d.gc()),a=uG(c.d.Xb(c.c=c.b++),30);c.b<c.d.gc();)for(r=a,MK(c.b<c.d.gc()),a=uG(c.d.Xb(c.c=c.b++),30),o=new Ww(r.a);o.a<o.c.c.length;)for(u=new Ww(uG(N3(o),10).j);u.a<u.c.c.length;)for(i=new Ww(uG(N3(u),12).g);i.a<i.c.c.length;)(s=(e=uG(N3(i),18)).d.i.c)!=r&&s!=a&&xFn(e,(Hb(h=new gMn(n),(zIn(),wbt)),kfn(h,(GYn(),rmt),e),kfn(h,(jYn(),JMt),($Pn(),cRt)),a2(h,a),h));t.Vg()}}function wzn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=new Zm,l=new ek,a=t.b,r=0;r<a.c.length;r++){for(s=(u3(r,a.c.length),uG(a.c[r],30)).a,h.c.length=0,c=0;c<s.c.length;c++)(o=n.a[r][c]).p=c,o.k==(zIn(),gbt)&&mv(h.c,o),Y8(uG(zq(t.b,r),30).a,c,o),o.j.c.length=0,Ohn(o.j,uG(uG(zq(n.b,r),15).Xb(c),16)),L_(uG(oIn(o,(jYn(),JMt)),101))||kfn(o,JMt,($Pn(),rRt));for(i=new Ww(h);i.a<i.c.c.length;)f=ZBn(e=uG(N3(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(u=l.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),hZ(),f$(o.j,(Cln(),Ywt)),o.i=!0,qLn(o)}function dzn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=YQn(Bsn(n.f),t0(n.e)),n.g):(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new WM).a+=""+r,n.e>0&&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 gzn(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;m<k;++m)(w=g[m]).f=null,aQn(n,w,a,f,r),T+=e.Math.abs(w.a);do{u=tGn(n,t)}while(u);for(p=0,v=(d=n.a).length;p<v;++p)if(0!=(i=uV(w=d[p]).a))for(h=new Ww(w.e);h.a<h.c.c.length;)uG(N3(h),10).n.b+=i;0==s||1==s?--l<=0&&(T<o||-l>y)?(s=2,o=vZn):0==s?(s=1,o=T):(s=0,o=T):(b=T>=o||o-T<M,o=T,b&&--c)}while(!(b&&c<=0))}function pzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(w=new Ym,c=n.a.ec().Kc();c.Ob();)vJ(w,i=uG(c.Pb(),177),e.af(i));for(WW(n),f$(a=n?new Z_(n):rG(n.a.ec().Kc()),new Cd(w)),o=g8(a),u=new C$(t),VAn((b=new Ym).f,t,u);0!=o.a.gc();){for(s=null,h=null,f=null,r=o.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),177),uM(pK(DA(FX(w.f,i))))<=M0n){if(PV(b,i.a)&&!PV(b,i.b)){h=i.b,f=i.a,s=i;break}if(PV(b,i.b)&&!PV(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new C$(h),kD(uG(DA(FX(b.f,f)),225).a,l),VAn(b.f,h,l),o.a.Bc(s)}return u}function mzn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Depth-first cycle removal",1),u=(s=t.a).c.length,n.c=new Zm,n.d=Inn(ZHt,B2n,28,u,16,1),n.a=Inn(ZHt,B2n,28,u,16,1),n.b=new Zm,c=0,o=new Ww(s);o.a<o.c.c.length;)(a=uG(N3(o),10)).p=c,P6(qgn(a))&&kD(n.c,a),++c;for(h=new Ww(n.c);h.a<h.c.c.length;)LAn(n,uG(N3(h),10));for(r=0;r<u;r++)n.d[r]||(u3(r,s.c.length),LAn(n,uG(s.c[r],10)));for(i=new Ww(n.b);i.a<i.c.c.length;)pqn(uG(N3(i),18),!0),kfn(t,(GYn(),Lpt),(qx(),!0));n.c=null,n.d=null,n.a=null,n.b=null,e.Vg()}function vzn(n,t){var i,r,c,a,o,u;return l_n(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),o=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),u=e.Math.max(o,i),YN(),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^(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 kzn(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;r<t.Pm();r++)kzn(n,t.Lm(r));else zv(n.a,t)}function yzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=uG((i=e.Kc()).Pb(),17).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?uG(i.Pb(),17).a:t.f+1),a!=h)for(b=uG(zq(n.b,a),30),f=uG(zq(n.b,h),30),s=new Ww(T3(b.a));s.a<s.c.c.length;)if($jn(u=uG(N3(s),10),f.a.c.length,f),0==h)for(c=new Ww(T3(qgn(u)));c.a<c.c.c.length;)pqn(r=uG(N3(c),18),!0),kfn(n,(GYn(),Lpt),(qx(),!0)),gVn(n,r,1);++h,++a}for(o=new N4(n.b,0);o.b<o.d.gc();)MK(o.b<o.d.gc()),0==uG(o.d.Xb(o.c=o.b++),30).a.c.length&&LQ(o)}}function Mzn(n,t,e){var i,r,c;if((r=uG(oIn(t,(jYn(),vyt)),282))!=(RIn(),Vgt)){switch(e.Ug("Horizontal Compaction",1),n.a=t,vT(i=new w$n(((c=new Sen).d=t,c.c=uG(oIn(c.d,Vyt),223),F_n(c),VVn(c),rBn(c),c.a)),n.b),1===uG(oIn(t,myt),431).g?pT(i,new Kon(n.a)):pT(i,(fZ(),qut)),r.g){case 1:kxn(i);break;case 2:kxn(GWn(i,(xdn(),YDt)));break;case 3:kxn(mT(GWn(kxn(i),(xdn(),YDt)),new gr));break;case 4:kxn(mT(GWn(kxn(i),(xdn(),YDt)),new Sg(c)));break;case 5:kxn(gT(i,idt))}GWn(i,(xdn(),JDt)),i.e=!0,UWn(c),e.Vg()}}function Tzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=(a=t.b).o,u=a.d,i=uM(pK(eyn(a,(jYn(),dTt)))),r=uM(pK(eyn(a,pTt))),s=uM(pK(eyn(a,PTt))),pG(o=new $k,u.d,u.c,u.a,u.b),l=PBn(t,i,r,s),p=new Ww(t.d);p.a<p.c.c.length;){for(w=(g=uG(N3(p),105)).f.a.ec().Kc();w.Ob();)c=(b=uG(w.Pb(),340)).a,f=sCn(b),m=new Uk,ZPn(b,b.c,l,m),EIn(b,f,l,m),ZPn(b,b.d,l,m),e=m,e=n.ng(b,f,e),BY(c.a),Qon(c.a,e),kS(new fX(null,new h3(e,16)),new GC(h,o));(d=g.i)&&(qPn(g,d,l,r),Jvn(h,o,v=new eN(d.g)),JF(v,d.j),Jvn(h,o,v))}pG(u,o.d,o.c,o.a,o.b)}function jzn(n,t,e,i,r,c,a,o){var u,s,h,f;switch(u=n7(Uhn(cT(_At,1),EZn,238,0,[t,e,i,r])),f=null,n.b.g){case 1:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Go,new Bo,new Ho]));break;case 0:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Ho,new Bo,new Go]));break;case 2:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Bo,new Go,new Ho]))}for(h=new Ww(f);h.a<h.c.c.length;)s=uG(N3(h),535),u.c.length>1&&(u=s.Hg(u,n.a,o));return 1==u.c.length?uG(zq(u,u.c.length-1),238):2==u.c.length?ezn((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),39)).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<u.c.c.length;)kfn(s=new uZ(a,o=uG(N3(u),39)),(OQn(),jPt),(qx(),!0)),aq(a.a.a,s),aq(a.d,s),aq(o.b,s),kfn(o,UPt,!1);kfn(a,(OQn(),UPt),(qx(),!0)),kfn(a,jPt,!0),aq(t.b,a)}e.Vg()}function Szn(n){var t,i,r,c,a,o;for(Prn(n.a,new Zn),i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),225),r=YF(D$(uG(n.b,68).c),uG(t.b,68).c),xht?(o=uG(n.b,68).b,a=uG(t.b,68).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>o.d&&a.d<o.d+o.a&&RG(r,e.Math.max(o.c-(a.c+a.b),a.c-(o.c+o.b)))):(r.a=0,a.c+a.b>o.c&&a.c<o.c+o.b&&RG(r,e.Math.max(o.d-(a.d+a.a),a.d-(o.d+o.a))))):RG(r,OGn(uG(n.b,68),uG(t.b,68))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),RG(r,c=EPn(Cht,t,c,r)),JX(uG(t.b,68),r),Prn(t.a,new Dd(r)),uG(Cht.b,68),Rnn(Cht,Iht,t)}function Pzn(n){var t,i,r,c,a,o,u,s,f,l,b,w;for(n.f=new ak,u=0,r=0,c=new Ww(n.e.b);c.a<c.c.c.length;)for(o=new Ww(uG(N3(c),30).a);o.a<o.c.c.length;){for((a=uG(N3(o),10)).p=u++,i=new Fz(ix(Xgn(a).a.Kc(),new h));hDn(i);)uG(N9(i),18).p=r++;for(t=WXn(a),l=new Ww(a.j);l.a<l.c.c.length;)f=uG(N3(l),12),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-W4(Bsn(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-W4(Bsn(e.Math.round(b))),f.n.b-=s)}n.g=u,n.b=r,n.i=Inn(lSt,EZn,412,u,0,1),n.c=Inn(uSt,EZn,655,r,0,1),n.d.a.$b()}function Czn(n){var t,e,i,r,c,a,o,u,s;if(n.Pj())if(u=n.Qj(),n.i>0){if(t=new AA(n.i,n.g),c=(e=n.i)<100?null:new cj(e),n.Tj())for(i=0;i<n.i;++i)a=n.g[i],c=n.Vj(a,c);if(V9(n),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new nR(t);i.e!=i.i.gc();)c=n.Oj(nyn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r)}else V9(n),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if(n.i>0){for(o=n.g,s=n.i,V9(n),c=s<100?null:new cj(s),i=0;i<s;++i)a=o[i],c=n.Oj(a,c);c&&c.oj()}else V9(n);else V9(n)}function Izn(n,t,i){var r,c,a,o,u,s,h,f,l;for(thn(this),i==(l0(),USt)?FV(this.r,n):FV(this.w,n),f=M0n,h=T0n,o=t.a.ec().Kc();o.Ob();)c=uG(o.Pb(),42),u=uG(c.a,464),(s=(r=uG(c.b,18)).c)==n&&(s=r.d),FV(u==USt?this.r:this.w,s),l=(KQn(),LRt).Hc(s.j)?uM(pK(oIn(s,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(NIn(this,(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,f,h),a=t.a.ec().Kc();a.Ob();)c=uG(a.Pb(),42),HOn(this,uG(c.b,18));this.o=!1}function Ozn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return e=8191&n.l,i=n.l>>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.a<i.c.c.length;)t=uG(N3(i),18),r=uG(oIn(o=t.d.i,(jYn(),TMt)),140),a=e.Math.min(a,o.n.a-r.b);return new Ul(WW(a))}if(0!=u.e.c.length){for(c=T0n,i=new Ww(u.e);i.a<i.c.c.length;)t=uG(N3(i),18),r=uG(oIn(o=t.c.i,(jYn(),TMt)),140),c=e.Math.max(c,o.n.a+o.o.a+r.c);return new Ul(WW(c))}return gy(),gy(),wat}function Lzn(n,t){var e,i,r,c,a,o;if(n.ol()){if(n.i>4){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;r<n.i;++r)if(xA(n.pl(uG(n.g[r],58)))===xA(t))return!0;return o}if(n.ml()&&!n.ll()){if(xA(c=uG(t,58).Mh(lMn(uG(n.Lk(),19))))===xA(n.e))return!0;if(null==c||!uG(c,58).Vh())return!1}}if(a=sSn(n,t),n.nl()&&!a)for(r=0;r<n.i;++r)if(xA(i=n.pl(uG(n.g[r],58)))===xA(t))return!0;return a}return sSn(n,t)}function Nzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(e.Ug("Interactive cycle breaking",1),h=new Zm,l=new Ww(t.a);l.a<l.c.c.length;)for((f=uG(N3(l),10)).p=1,b=jSn(f).a,s=jmn(f,(can(),Wjt)).Kc();s.Ob();)for(c=new Ww(uG(s.Pb(),12).g);c.a<c.c.c.length;)(w=(i=uG(N3(c),18)).d.i)!=f&&jSn(w).a<b&&mv(h.c,i);for(a=new Ww(h);a.a<a.c.c.length;)pqn(i=uG(N3(a),18),!0);for(h.c.length=0,u=new Ww(t.a);u.a<u.c.c.length;)(o=uG(N3(u),10)).p>0&&nAn(n,o,h);for(r=new Ww(h);r.a<r.c.c.length;)pqn(i=uG(N3(r),18),!0);h.c.length=0,e.Vg()}function $zn(n,t){var e,i,r,c,a,o,u;for(e=0,u=new Zm,c=new Ww(t);c.a<c.c.c.length;){switch(r=uG(N3(c),12),fbn(n.b,n.d[r.p]),u.c.length=0,r.i.k.g){case 0:Prn(uG(oIn(r,(GYn(),lmt)),10).j,new rp(u));break;case 1:m$(lln(JJ(new fX(null,new h3(r.i.j,16)),new cp(r))),new ap(u));break;case 3:kD(u,new WO(uG(oIn(r,(GYn(),rmt)),12),xwn(r.e.c.length+r.g.c.length)))}for(o=new Ww(u);o.a<o.c.c.length;)a=uG(N3(o),42),(i=Yj(n,uG(a.a,12)))>n.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.a<c.c.c.length;)(r=uG(N3(c),72)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(o.Hc(gRt))for(c=new Ww(i.f);c.a<c.c.c.length;)(r=uG(N3(c),72)).n.a=u+n.o.a-i.n.a;D3(new Ad((zS(),new mY(t,!1,!1,new Ft))),new RB(null,n,!1))}}function xzn(n,t){var i,r,c,a,o,u,s;if(0!=t.c.length){for(hZ(),UX(t.c,t.c.length,null),r=uG(N3(c=new Ww(t)),154);c.a<c.c.c.length;)i=uG(N3(c),154),!gcn(r.e.c,i.e.c)||svn(qK(r.e).b,i.e.d)||svn(qK(i.e).b,r.e.d)?(fGn(n,r),r=i):(Ohn(r.k,i.k),Ohn(r.b,i.b),Ohn(r.c,i.c),Qon(r.i,i.i),Ohn(r.d,i.d),Ohn(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),o=e.Math.min(r.e.d,i.e.d),u=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-o,LG(r.e,a,o,u,s),$3(r.f,i.f),!r.a&&(r.a=i.a),Ohn(r.g,i.g),kD(r.g,i));fGn(n,r)}}function Rzn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(o=new Zm,r=new Ww(t.a);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),10).j);a.a<a.c.c.length;){for(s=null,v=0,k=(m=x4((c=uG(N3(a),12)).g)).length;v<k;++v)jsn((p=m[v]).d.i,e)||((g=YXn(n,t,e,p,p.c,(can(),Wjt),s))!=s&&mv(o.c,g),g.c&&(s=g));for(u=null,w=0,d=(b=x4(c.e)).length;w<d;++w)jsn((l=b[w]).c.i,e)||((g=YXn(n,t,e,l,l.d,(can(),Vjt),u))!=u&&mv(o.c,g),g.c&&(u=g))}for(f=new Ww(o);f.a<f.c.c.length;)h=uG(N3(f),452),-1!=Ten(t.a,h.a,0)||kD(t.a,h.a),h.c&&mv(i.c,h)}function Kzn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for((f=new eN(uG(zDn(n,(lIn(),HNt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=pK(zDn(n,xNt)))||(tJ(c),c<=0))&&(c=1.3),o=new Zm,l=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));l.e!=l.i.gc();)a=new nK(uG(Zkn(l),27)),mv(o.c,a);switch(uG(zDn(n,RNt),320).g){case 3:w=fUn(o,t,f.a,f.b,(s=r,tJ(c),s));break;case 1:w=GGn(o,t,f.a,f.b,(h=r,tJ(c),h));break;default:w=Bzn(o,t,f.a,f.b,(u=r,tJ(c),u))}ZQn(n,(b=KJn(new Jrn(w),t,i,f.a,f.b,r,(tJ(c),c))).a,b.b,!1,!0)}function Fzn(n,t,e,i){var r,c,a,o,u,s;if((o=n.j)==(KQn(),FRt)&&t!=($Pn(),uRt)&&t!=($Pn(),sRt)&&(NLn(n,o=nGn(n,e)),!(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),QMt))&&o!=FRt&&(0!=n.n.a||0!=n.n.b)&&kfn(n,QMt,aEn(n,o))),t==($Pn(),aRt)){switch(s=0,o.g){case 1:case 3:(c=n.i.o.a)>0&&(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;i<s;++i)a=o[i],c=n.Oj(a,c);c&&c.oj()}else QK(n,n.Ej(),n.Fj());else QK(n,n.Ej(),n.Fj())}function Bzn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(o=Inn(eUt,I0n,28,n.c.length,15,1),_jn(l=new Kz(new Hu),n),s=0,b=new Zm;0!=l.b.c.length;)if(a=uG(0==l.b.c.length?null:zq(l.b,0),163),s>1&&EX(a)*jX(a)/2>o[0]){for(c=0;c<b.c.length-1&&EX(a)*jX(a)/2>o[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<o.c.c.length;)(c=uG(N3(o),239)).e=null,c.c=0;for(u=null,a=new Ww(t);a.a<a.c.c.length;)if(f=(c=uG(N3(a),239)).d[0],!e||f.k==(zIn(),dbt)){for(b=uG(oIn(f,(GYn(),Vpt)),15).Kc();b.Ob();)l=uG(b.Pb(),10),e&&l.k!=(zIn(),dbt)||((!c.e&&(c.e=new Zm),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(zIn(),dbt)){if(u)for(h=uG(Y9(n.d,u),21).Kc();h.Ob();)for(s=uG(h.Pb(),10),r=uG(Y9(n.d,f),21).Kc();r.Ob();)i=uG(r.Pb(),10),IU(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;u=f}}}function Gzn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w;for(i.Ug("Model order cycle breaking",1),n.a=0,n.b=0,l=new Zm,h=t.a.c.length,s=new Ww(t.a);s.a<s.c.c.length;)vR(u=uG(N3(s),10),(GYn(),imt))&&(h=e.Math.max(h,uG(oIn(u,imt),17).a+1));for(w=new Ww(t.a);w.a<w.c.c.length;)for(o=NAn(n,b=uG(N3(w),10),h),f=jmn(b,(can(),Wjt)).Kc();f.Ob();)for(a=new Ww(uG(f.Pb(),12).g);a.a<a.c.c.length;)NAn(n,(r=uG(N3(a),18)).d.i,h)<o&&mv(l.c,r);for(c=new Ww(l);c.a<c.c.c.length;)pqn(r=uG(N3(c),18),!0),kfn(t,(GYn(),Lpt),(qx(),!0));l.c.length=0,i.Vg()}function qzn(n,t,i){var r,c,a,o,u,s,h,f;for(c=t.d,a=i.d;c.a-a.a==0&&c.b-a.b==0;)o=!1,F$(t,250)&&F$(i,250)&&!o?(r=2,JF(c,new MO((s=YF(new eN(Wcn(u=uG(t,250).a)),Vcn(u))).a/e.Math.sqrt(s.a*s.a+s.b*s.b)*r,-s.b/e.Math.sqrt(s.a*s.a+s.b*s.b)*r)),r=s==(f=YF(new eN(Wcn(h=uG(i,250).a)),Vcn(h)))?-2:2,JF(c,new MO(f.a/e.Math.sqrt(f.a*f.a+f.b*f.b)*r,-f.b/e.Math.sqrt(f.a*f.a+f.b*f.b)*r)),o=!0):(c.a+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,c.b+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,a.a+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,a.b+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5)}function Xzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(z8(u=kOn(t),new _d(uG(oIn(t,(jYn(),Kyt)),322))),z8(u,new Bd(uG(oIn(t,Oyt),298))),b=0,s=new Zm,r=new XJ(u);r.a!=r.b;)i=uG(rwn(r),36),JVn(n.c,i),b+=(f=uG(oIn(i,(GYn(),wmt)),15)).gc(),kD(s,new WO(i,f.Kc()));for(e.Ug("Recursive hierarchical layout",b),l=uG(uG(zq(s,s.c.length-1),42).b,51);l.Ob();)for(o=new Ww(s);o.a<o.c.c.length;)for(a=uG(N3(o),42),f=uG(a.b,51),c=uG(a.a,36);f.Ob();){if(F$(h=uG(f.Pb(),47),514)){if(c.e)break;h.Kf(c,e.eh(1));break}h.Kf(c,e.eh(1))}e.Vg()}function zzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Layer size calculation",1),f=M0n,h=T0n,c=!1,u=new Ww(n.b);u.a<u.c.c.length;)if((s=(o=uG(N3(u),30)).c).a=0,s.b=0,0!=o.a.c.length){for(c=!0,b=new Ww(o.a);b.a<b.c.c.length;)d=(l=uG(N3(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=uG(zq(o.a,0),10)).n.b-r.d.d,r.k==(zIn(),lbt)&&(g-=uG(oIn(n,(jYn(),CTt)),140).d),i=(a=uG(zq(o.a,o.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==lbt&&(i+=uG(oIn(n,(jYn(),CTt)),140).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,t.Vg()}function Vzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Ww(n.a);s.a<s.c.c.length;)o=uG(N3(s),10),c=e.Math.max(c,o.d.b),a=e.Math.max(a,o.d.c);for(u=new Ww(n.a);u.a<u.c.c.length;){switch(o=uG(N3(u),10),uG(oIn(o,(jYn(),byt)),255).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Ww(o.j);b.a<b.c.c.length;)0==(l=uG(N3(b),12)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=o.o.a,p=(g.a-h)*w,w>.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<n.f)throw hv(new kM("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=uG(Mj(n.g),9),b=iR(n.f),o=0,s=(c=h).length;o<s;++o)(f=uG(xen(n,(i=c[o]).g),188))?kD(b,uG(xpn(n,f),106)):b.c.push(null);for(w=new wJ,kS(JJ(YJ(JJ(new fX(null,new h3(b,16)),new ou),new Hp(t)),new uu),new Up(w)),gsn(w,n.a),e=new Zm,a=0,u=(r=h).length;a<u;++a)Ohn(e,Fhn(n,PZ(uG(xen(w,(i=r[a]).g),20)))),(l=uG(zq(b,i.g),106))&&mv(e.c,l);return Ohn(e,Fhn(n,PZ(uG(xen(w,h[h.length-1].g+1),20)))),e}function Jzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(l=new Zm,c=new Zm,d=null,o=t.Kc();o.Ob();)a=new Vg(uG(o.Pb(),17).a),mv(c.c,a),d&&(a.d=d,d.e=a),d=a;for(v=cqn(n),h=0;h<c.c.length;++h){for(b=null,g=T7((u3(0,c.c.length),uG(c.c[0],661))),i=null,r=M0n,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,u=w):(s=g,u=p),k=uM(pK(oIn(n,(jYn(),HTt)))),(m=v[f]+e.Math.pow(u,k))<r&&(r=m,(i=s).c=f),g&&f==g.b&&(b=g,g=aV(g));i&&(kD(l,xwn(i.c)),i.a=!0,ngn(i))}return hZ(),UX(l.c,l.c.length,null),l}function Yzn(n,t,e){var i,r,c,a,o,u;if(0==t.l&&0==t.m&&0==t.h)throw hv(new wM("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(Qat=p$(0,0,0)),p$(0,0,0);if(t.h==b0n&&0==t.m&&0==t.l)return apn(n,e);if(u=!1,t.h>>19!=0&&(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!=0&&(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)):pUn(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<i?new O7(n,t,i-e):i<e?new O7(t,n,e-i):(new O7(t,n,0),new O7(n,t,0))}}function tVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(s=t.c,r=AN(n.e),f=vD(HR(D$(ON(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,u=new Ww(s);u.a<u.c.c.length;){switch(b=e+(l=(o=uG(N3(u),407)).b).a,g=i+l.b,w=t0(b/n.a),p=t0(g/n.b),(c=o.a).g){case 0:vyn(),h=yht;break;case 1:vyn(),h=kht;break;case 2:vyn(),h=Mht;break;default:vyn(),h=Tht}c.a?(m=t0((g+o.c)/n.b),kD(n.f,new LB(h,xwn(p),xwn(m))),c==(myn(),Dht)?wfn(n,0,p,w,m):wfn(n,w,p,n.d-1,m)):(d=t0((b+o.c)/n.a),kD(n.f,new LB(h,xwn(w),xwn(d))),c==(myn(),Nht)?wfn(n,w,0,d,p):wfn(n,w,p,d,n.c-1))}}function eVn(n){var t,e,i,r,c,a,o,u,s,h;for(t=new ys,e=new ys,s=m_(jrt,(r=qUn(n.b,Ert))?mK(Lmn((!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),r.b),Srt)):null),u=0;u<n.i;++u)F$(o=uG(n.g[u],179),102)?0!=((a=uG(o,19)).Bb&Qtt)?(0==(a.Bb&VZn)||!s&&null==((c=qUn(a,Ert))?mK(Lmn((!c.b&&(c.b=new XR((YYn(),H_t),wBt,c)),c.b),_et)):null))&&ttn(t,a):(h=lMn(a))&&0!=(h.Bb&Qtt)||(0==(a.Bb&VZn)||!s&&null==((i=qUn(a,Ert))?mK(Lmn((!i.b&&(i.b=new XR((YYn(),H_t),wBt,i)),i.b),_et)):null))&&ttn(e,a):(PP(),uG(o,69).xk()&&(o.sk()||(ttn(t,o),ttn(e,o))));lbn(t),lbn(e),n.a=uG(t.g,254),uG(e.g,254)}function iVn(n,t,e){var i,r,c,a,o,u,s;if(emn(t,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();a<s;++a)if(WRn(ZV(Nen(n,u=uG(r.Xb(a),179))),o))return u}return null;case 4:if(m_("",tdn(n,e.qk()).xe())){for(i=e;i;i=F3(Nen(n,i)))if(u=fxn(n,t,HJ(Nen(n,i)),BJ(Nen(n,i))))return u;if(o=HJ(Nen(n,e)),m_(lct,o))return cSn(n,t);for(a=0,s=(c=LHn(n,t)).gc();a<s;++a)if(WRn(ZV(Nen(n,u=uG(c.Xb(a),179))),o))return u}return null;default:return null}}function rVn(n,t,e){var i,r,c,a,o,u,s,h;if(0==e.gc())return!1;if(PP(),c=(o=uG(t,69).xk())?e:new Drn(e.gc()),EFn(n.e,t)){if(t.Si())for(s=e.Kc();s.Ob();)aqn(n,t,u=s.Pb(),F$(t,102)&&0!=(uG(t,19).Bb&P0n))||(r=R5(t,u),c.Hc(r)||c.Fc(r));else if(!o)for(s=e.Kc();s.Ob();)r=R5(t,u=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw hv(new vM(dct));for(h=VKn(n.e.Dh(),t),i=uG(n.g,124),a=0;a<n.i;++a)if(r=i[a],h.am(r.Lk())){if(e.Hc(o?r:r.md()))return!1;for(s=e.Kc();s.Ob();)u=s.Pb(),uG(Uyn(n,a,o?uG(u,76):R5(t,u)),76);return!0}o||(r=R5(t,e.Kc().Pb()),c.Fc(r))}return CW(n,c)}function cVn(n,t){var i,r,c,a,o,u,s;for(s=new lS,u=new _w(new Fw(n.c).a.vc().Kc());u.a.Ob();)c=uG(u.a.Pb(),44),0==(a=uG(c.md(),466)).b&&s8(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=uG(0==s.b?null:(MK(0!=s.b),Lrn(s,s.a.a)),466)).a&&(a.a=0),r=new Ww(a.d);r.a<r.c.c.length;)null==(i=uG(N3(r),663)).b.a?i.b.a=uM(a.a)+i.a:t.o==(w0(),wSt)?i.b.a=e.Math.min(uM(i.b.a),uM(a.a)+i.a):i.b.a=e.Math.max(uM(i.b.a),uM(a.a)+i.a),--i.b.b,0==i.b.b&&aq(s,i.b);for(o=new _w(new Fw(n.c).a.vc().Kc());o.a.Ob();)c=uG(o.a.Pb(),44),a=uG(c.md(),466),t.i[a.c.p]=a.a}function aVn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Ww(t.j);w.a<w.c.c.length;){if(b=uG(N3(w),12),c=Gfn(Uhn(cT(PNt,1),zZn,8,0,[b.i.n,b.n,b.a])),t.k==(zIn(),gbt)&&(u=uG(oIn(b,(GYn(),rmt)),12),c.a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[u.i.n,u.n,u.a])).a,t.n.a=c.a),o=new MO(0,c.b),b.j==(KQn(),kRt))o.a=f;else{if(b.j!=_Rt)continue;o.a=i}if(!(e.Math.abs(c.a-o.a)<=r)||mEn(t))for(a=b.g.c.length+b.e.c.length>1,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<n.b;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),LQ(c);for(t=uM((MK(c.b<c.d.gc()),pK(c.d.Xb(c.c=c.b++))));n.f-t>$9n;){for(a=t,o=0;e.Math.abs(t-a)<$9n;)++o,t=uM((MK(c.b<c.d.gc()),pK(c.d.Xb(c.c=c.b++)))),MK(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);o<n.b&&(MK(c.b>0),c.a.Xb(c.c=--c.b),zGn(n,n.b-o,a,r,c),MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),MK(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),LQ(c);n.d=!0,n.c=!0}function uVn(){uVn=E,KBt=(yj(),RBt).b,BBt=uG(zrn(gZ(RBt.b),0),35),FBt=uG(zrn(gZ(RBt.b),1),35),_Bt=uG(zrn(gZ(RBt.b),2),35),JBt=RBt.bb,uG(zrn(gZ(RBt.bb),0),35),uG(zrn(gZ(RBt.bb),1),35),ZBt=RBt.fb,nHt=uG(zrn(gZ(RBt.fb),0),35),uG(zrn(gZ(RBt.fb),1),35),uG(zrn(gZ(RBt.fb),2),19),eHt=RBt.qb,cHt=uG(zrn(gZ(RBt.qb),0),35),uG(zrn(gZ(RBt.qb),1),19),uG(zrn(gZ(RBt.qb),2),19),iHt=uG(zrn(gZ(RBt.qb),3),35),rHt=uG(zrn(gZ(RBt.qb),4),35),oHt=uG(zrn(gZ(RBt.qb),6),35),aHt=uG(zrn(gZ(RBt.qb),5),19),HBt=RBt.j,UBt=RBt.k,GBt=RBt.q,qBt=RBt.w,XBt=RBt.B,zBt=RBt.A,VBt=RBt.C,WBt=RBt.D,QBt=RBt._,YBt=RBt.cb,tHt=RBt.hb}function sVn(n,t,i){var r,c,a,o,u,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,o=(s=uG(h.Pb(),12)).j==(KQn(),yRt)||s.j==KRt){if(!(f=uG(oIn(s,(GYn(),lmt)),10)))continue;l+=Y_n(n,r,s,f)}else{for(u=new Ww(s.g);u.a<u.c.c.length;){if((c=uG(N3(u),18).d).i.c==t.c){kD(n.a,s);continue n}l+=n.g[c.p]}for(a=new Ww(s.e);a.a<a.c.c.length;){if((c=uG(N3(a),18).c).i.c==t.c){kD(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(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<i.c.c.length;)Ohn(r,uG(N3(i),30).a);if(uG(oIn(t,(jYn(),Hyt)),428)==(Vin(),dgt))switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r);break;case 3:Fmn(t,r);break;case 4:n.a==(Aun(),Obt)?(Fmn(t,r),b6(t,r)):(b6(t,r),Fmn(t,r))}else if(n.a==(Aun(),Obt))switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r),b6(t,r);break;case 3:Fmn(t,r),l6(t,r);break;case 4:l6(t,r),Fmn(t,r)}else switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r),b6(t,r);break;case 3:l6(t,r),Fmn(t,r);break;case 4:Fmn(t,r),l6(t,r)}e.Vg()}function lVn(n){var t,i,r,c,a,o,u,s;for(a=new Ww(n.a.b);a.a<a.c.c.length;)(c=uG(N3(a),86)).b.c=c.g.c,c.b.d=c.g.d;for(s=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a<r.c.c.length;)i=uG(N3(r),86),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(u=KW(n.c).a.nc();u.Ob();)o=uG(u.Pb(),42),i=uG(o.b,86),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=BR(new MO(s.a,s.b)),n.e=YF(new MO(t.a,t.b),s),n.a.a.c.length=0,n.a.b.c.length=0}function bVn(n){var t,e,i,r,c,a,o;for(Win(),o=new dk,e=new Ww(n);e.a<e.c.c.length;)t=uG(N3(e),148),(!o.b||t.c>=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=uzn((!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.a<h.c.c.length;)for(c=new Ww((s=uG(N3(h),186)).a);c.a<c.c.c.length;)Gun(b=new r0((r=uG(N3(c),172)).s,r.t,uM(pK(zDn(n,bAt)))),r),kD(s.d,b);l=Xjn(f,o),d=e.Math.max(l.a,uM(pK(zDn(n,EOt)))-(u.b+u.c)),i=(a=e.Math.max(l.b,uM(pK(zDn(n,MOt)))-(u.d+u.a)))-l.b,Myn(n,pOt,i),Myn(n,vOt,d),Myn(n,mOt,a+i),Myn(n,SOt,f),t.Vg()}function dVn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w;for(u=new XL,s=new XL,b=new XL,w=new XL,o=uM(pK(oIn(t,(jYn(),ETt)))),r=uM(pK(oIn(t,dTt))),a=new Ww(e);a.a<a.c.c.length;)if(c=uG(N3(a),10),(f=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),yRt))for(s.a.zc(c,s),i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)FV(u,uG(N9(i),18).c.i);else if(f==KRt)for(w.a.zc(c,w),i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)FV(b,uG(N9(i),18).c.i);0!=u.a.gc()&&(l=YVn(new NW(2,r),t,u,s,-o-t.c.b))>0&&(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.a<h.c.c.length;)s=uG(N3(h),72),mv(d.c,s);if(w=uG(oIn(b,(jYn(),bMt)),75),c=uG(oIn(i,bMt),75))for(w||(w=new Uk,kfn(b,bMt,w)),u=Fkn(c,0);u.b!=u.d.c;)aq(w,new eN(uG(I6(u),8)))}}function mVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(!((d=t.b.c.length)<3)){for(b=Inn(YHt,W1n,28,d,15,1),f=0,h=new Ww(t.b);h.a<h.c.c.length;)s=uG(N3(h),30),b[f++]=s.a.c.length;for(l=new N4(t.b,2),i=1;i<d-1;i++)for(MK(l.b<l.d.gc()),w=new Ww((e=uG(l.d.Xb(l.c=l.b++),30)).a),c=0,o=0,u=0;u<b[i+1];u++)if(v=uG(N3(w),10),u==b[i+1]-1||KOn(n,v,i+1,i)){for(a=b[i]-1,KOn(n,v,i+1,i)&&(a=n.c.e[uG(uG(uG(zq(n.c.b,v.p),15).Xb(0),42).a,10).p]);o<=u;){if(!KOn(n,m=uG(zq(e.a,o),10),i+1,i))for(p=uG(zq(n.c.b,m.p),15).Kc();p.Ob();)g=uG(p.Pb(),42),((r=n.c.e[uG(g.a,10).p])<c||r>a)&&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(vUn(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.a<a.c.c.length;){for(h=0,(r=uG(N3(a),125)).k.c.length=0,e=new Ww(Ebn(r));e.a<e.c.c.length;)(t=uG(N3(e),218)).f&&(kD(r.k,t),++h);1==h&&mv(i.c,r)}for(c=new Ww(i);c.a<c.c.c.length;)for(r=uG(N3(c),125);1==r.k.c.length;){for(s=uG(N3(new Ww(r.k)),218),n.b[s.c]=s.g,o=s.d,u=s.e,e=new Ww(Ebn(r));e.a<e.c.c.length;)udn(t=uG(N3(e),218),s)||(t.f?o==t.d||u==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==o?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);men(o.k,s),men(u.k,s),r=o==r?s.e:s.d}}function TVn(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.b=0,void(i.n.c=0);for(h=n.u.Hc((eNn(),wRt)),o=0,u=s.Kc(),f=null,l=0,b=0;u.Ob();)c=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),a=r.b.Mf().a,n.A.Hc((Qmn(),JRt))&&vBn(n,t),f?(w=b+f.d.c+n.w+r.d.b,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-c)<=Z2n||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(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<w.c.c.length;)f+=cKn(uG(N3(w),315),i.f)+a;d=r-f}return!(d<i.g)&&(s=c==n.c.length-1&&d>=(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;a<o;a++)this.d[a]=t.d[a];for(c=0;c<u;c++)this.d[o+c]=e.d[c];if(t.e){if(this.e=oG(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=uG(r.Pb(),239))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=oG(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?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<i.c.c.length;){for(e=uG(N3(i),855),a=new Zvn(Uhn(cT(xlt,1),EZn,86,0,[])),kD(n.a.a,a),u=new Ww(e.d);u.a<u.c.c.length;)rWn(s=new Jx(n,o=uG(N3(u),116)),uG(oIn(e.c,(GYn(),xpt)),21)),PV(n.g,e)||(vJ(n.g,e,new MO(o.c,o.d)),vJ(n.f,e,s)),kD(n.a.b,s),t4(a,s);for(c=new Ww(e.b);c.a<c.c.c.length;)s=new Jx(n,(r=uG(N3(c),602)).Df()),vJ(n.b,r,new WO(a,s)),rWn(s,uG(oIn(e.c,(GYn(),xpt)),21)),r.Bf()&&(rWn(h=new Yvn(n,r.Bf(),1),uG(oIn(e.c,xpt),21)),t4(new Zvn(Uhn(cT(xlt,1),EZn,86,0,[])),h),UNn(n.c,r.Af(),new WO(a,h)))}return n.a}function CVn(n){var t;this.a=n,t=(zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])).length,this.b=Jq(lNt,[zZn,m9n],[601,149],0,[t,t],2),this.c=Jq(lNt,[zZn,m9n],[601,149],0,[t,t],2),DZ(this,dbt,(jYn(),ETt),STt),Jsn(this,dbt,wbt,mTt,vTt),$Z(this,dbt,gbt,mTt),$Z(this,dbt,lbt,mTt),Jsn(this,dbt,bbt,ETt,STt),DZ(this,wbt,dTt,gTt),$Z(this,wbt,gbt,dTt),$Z(this,wbt,lbt,dTt),Jsn(this,wbt,bbt,mTt,vTt),GN(this,gbt,dTt),$Z(this,gbt,lbt,dTt),$Z(this,gbt,bbt,MTt),GN(this,lbt,ITt),Jsn(this,lbt,bbt,jTt,TTt),DZ(this,bbt,dTt,dTt),DZ(this,fbt,dTt,gTt),Jsn(this,fbt,dbt,mTt,vTt),Jsn(this,fbt,bbt,mTt,vTt),Jsn(this,fbt,wbt,mTt,vTt)}function IVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(F$(a=e.Lk(),102)&&0!=(uG(a,19).Bb&P0n)&&(l=uG(e.md(),54),(d=mwn(n.e,l))!=l)){if(yD(n,t,WPn(n,t,h=R5(a,d))),f=null,uN(n.e)&&(i=iVn((gAn(),kBt),n.e.Dh(),a))!=ern(n.e.Dh(),n.c)){for(g=VKn(n.e.Dh(),a),o=0,c=uG(n.g,124),u=0;u<t;++u)r=c[u],g.am(r.Lk())&&++o;(f=new i8(n.e,9,i,l,d,o,!1)).nj(new Ken(n.e,9,n.c,e,h,t,!1))}return(b=lMn(w=uG(a,19)))?(f=l.Th(n.e,emn(l.Dh(),b),null,f),f=uG(d,54).Rh(n.e,emn(d.Dh(),b),null,f)):0!=(w.Bb&Qtt)&&(s=-1-emn(n.e.Dh(),w),f=l.Th(n.e,s,null,null),!uG(d,54).Ph()&&(f=uG(d,54).Rh(n.e,s,null,f))),f&&f.oj(),h}return e}function OVn(n){var t,e,i;for(Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Dl])),e=new Eb(n),i=0;i<e.a.length;++i)m_(t=uin(e,i).te().a,"layered")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new fl])):m_(t,"force")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Gf])):m_(t,"stress")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Xf])):m_(t,"mrtree")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new vl])):m_(t,"radial")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new El])):m_(t,"disco")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Bf,new Hf])):m_(t,"sporeOverlap")||m_(t,"sporeCompaction")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Ol])):m_(t,"rectpacking")&&Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Pl]))}function AVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(l=new eN(n.o),p=t.a/l.a,o=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=xA(oIn(n,(jYn(),JMt)))===xA(($Pn(),cRt)),w=new Ww(n.j);w.a<w.c.c.length;)switch((b=uG(N3(w),12)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=o);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=o)}for(s=new Ww(n.b);s.a<s.c.c.length;)h=(u=uG(N3(s),72)).n.a+u.o.a/2,f=u.n.b+u.o.b/2,(g=h/l.a)+(a=f/l.b)>=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=RHn(n,g),0);c.b!=c.d.c;){for(r=uG(I6(c),15),u=p*t0(e.Math.sqrt(r.gc())),YHn(kT(MT(yT(_B(o=dUn(r)),u),d),!0),i.eh(1)),l=n.b.b,w=new Ww(o.a);w.a<w.c.c.length;){for(b=uG(N3(w),125);l.c.length<=b.e;)GX(l,l.c.length,new bQ(n.b));a2(uG(b.f,10),uG(zq(l,b.e),30))}if(a.b>1)for(d=Inn(YHt,W1n,28,n.b.b.c.length,15,1),f=0,h=new Ww(n.b.b);h.a<h.c.c.length;)s=uG(N3(h),30),d[f++]=s.a.c.length}g.c.length=0,n.a=null,n.b=null,n.c=null,i.Vg()}}function $Vn(n,t){var e,i,r,c,a,o,u,s,h,f;for(h=new Zm,f=new ND,c=null,r=0,i=0;i<t.length;++i)switch(Yln(c,e=t[i])&&(r=kpn(n,f,h,VEt,r)),vR(e,(GYn(),zpt))&&(c=uG(oIn(e,zpt),10)),e.k.g){case 0:for(u=gN(YU(Dgn(e,(KQn(),yRt)),new Nc));oon(u);)a=uG(yen(u),12),n.d[a.p]=r++,mv(h.c,a);for(r=kpn(n,f,h,VEt,r),s=gN(YU(Dgn(e,KRt),new Nc));oon(s);)a=uG(yen(s),12),n.d[a.p]=r++,mv(h.c,a);break;case 3:Dgn(e,zEt).dc()||(a=uG(Dgn(e,zEt).Xb(0),12),n.d[a.p]=r++,mv(h.c,a)),Dgn(e,VEt).dc()||A6(f,e);break;case 1:for(o=Dgn(e,(KQn(),_Rt)).Kc();o.Ob();)a=uG(o.Pb(),12),n.d[a.p]=r++,mv(h.c,a);Dgn(e,kRt).Jc(new EI(f,e))}return kpn(n,f,h,VEt,r),h}function DVn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=uG(U1(n.f,t),23))){for(r=new _w(new Fw(n.d).a.vc().Kc());r.a.Ob();)if(a=uG(r.a.Pb(),44),o=(e=uG(a.md(),23)).f,l=t.length,m_(o.substr(o.length-l,l),t)&&(t.length==o.length||46==VJ(o,o.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new _w(new Fw(n.d).a.vc().Kc());i.a.Ob();)if(a=uG(i.a.Pb(),44),null!=(f=(e=uG(a.md(),23)).g))for(s=0,h=(u=f).length;s<h;++s)if(o=u[s],l=t.length,m_(o.substr(o.length-l,l),t)&&(t.length==o.length||46==VJ(o,o.length-t.length-1))){if(c)return null;c=e}c&&r2(n.f,t,c)}return c}function xVn(n,t){var e,i,r,c,a;for(e=new QM,a=!1,c=0;c<t.length;c++)if(s3(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(s3(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):xL("GyMLdkHmsSEcDahKzZv",$Cn(i))>0?(Ikn(n,e,0),e.a+=String.fromCharCode(i),Ikn(n,e,r=qvn(t,c)),c+=r-1):39==i?c+1<t.length&&(s3(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ikn(n,e,0),e.a+=" ",Ikn(n,e,0);c+1<t.length&&(s3(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ikn(n,e,0),iCn(n)}function RVn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(v=aG(n),u=new Zm,s=(c=n.c.length)-1,h=c+1;0!=v.a.gc();){for(;0!=e.b;)MK(0!=e.b),p=uG(Lrn(e,e.a.a),118),v.a.Bc(p),p.g=s--,UGn(p,t,e,i);for(;0!=t.b;)MK(0!=t.b),m=uG(Lrn(t,t.a.a),118),v.a.Bc(m),m.g=h++,UGn(m,t,e,i);for(o=j1n,d=v.a.ec().Kc();d.Ob();){if(w=uG(d.Pb(),118),!i&&w.b>0&&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.a<l.c.c.length;)(f=uG(N3(l),118)).g<c&&(f.g=f.g+g)}function KVn(n,t,e){var i,r,c,a;this.j=n,this.e=SPn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?uG(zq(e,HQ(this.o).p),219):null,r=uG(oIn(n,(GYn(),Hpt)),21),this.g=r.Hc((r_n(),tpt)),this.b=new Zm,this.d=new Umn(this.e),a=uG(oIn(this.j,dmt),234),this.q=ysn(t,a,this.e),this.k=new z0(this),c=n7(Uhn(cT(fdt,1),EZn,230,0,[this,this.d,this.k,this.q])),t!=(ean(),_Et)||oM(gK(oIn(n,(jYn(),Cyt))))?t==_Et&&oM(gK(oIn(n,(jYn(),Cyt))))?(i=new APn(this.e),mv(c.c,i),this.c=new Ron(i,a,uG(this.q,413))):this.c=new qC(t,this):(i=new APn(this.e),mv(c.c,i),this.c=new M6(i,a,uG(this.q,413))),kD(c,this.c),GXn(c,this.e),this.s=OJn(this.k)}function FVn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;for(c=new Zm,s=new Ww(i);s.a<s.c.c.length;)if(a=null,(o=uG(N3(s),452)).f==(can(),Wjt))for(w=new Ww(o.e);w.a<w.c.c.length;)HQ(g=(b=uG(N3(w),18)).d.i)==t?Crn(n,t,o,b,o.b,b.d):!e||jsn(g,e)?IIn(n,t,o,i,b):((l=YXn(n,t,e,b,o.b,Wjt,a))!=a&&mv(c.c,l),l.c&&(a=l));else for(f=new Ww(o.e);f.a<f.c.c.length;)if(HQ(d=(h=uG(N3(f),18)).c.i)==t)Crn(n,t,o,h,h.c,o.b);else{if(!e||jsn(d,e))continue;(l=YXn(n,t,e,h,o.b,Vjt,a))!=a&&mv(c.c,l),l.c&&(a=l)}for(u=new Ww(c);u.a<u.c.c.length;)o=uG(N3(u),452),-1!=Ten(t.a,o.a,0)||kD(t.a,o.a),o.c&&mv(r.c,o)}function _Vn(n){var t,i,r,c,a,o,u;for(t=0,a=new Ww(n.b.a);a.a<a.c.c.length;)(r=uG(N3(a),194)).b=0,r.c=0;for(ZIn(n,0),Npn(n,n.g),fKn(n.c),OM(n.c),xdn(),i=JDt,BHn(DI(qWn(BHn(DI(qWn(BHn(qWn(n.c,i)),Bdn(i)))),i))),qWn(n.c,JDt),agn(n,n.g),nIn(n,0),NXn(n,0),wxn(n,1),ZIn(n,1),Npn(n,n.d),fKn(n.c),o=new Ww(n.b.a);o.a<o.c.c.length;)r=uG(N3(o),194),t+=e.Math.abs(r.c);for(u=new Ww(n.b.a);u.a<u.c.c.length;)(r=uG(N3(u),194)).b=0,r.c=0;for(i=nxt,BHn(DI(qWn(BHn(DI(qWn(BHn(OM(qWn(n.c,i))),Bdn(i)))),i))),qWn(n.c,JDt),agn(n,n.d),nIn(n,1),NXn(n,1),wxn(n,0),OM(n.c),c=new Ww(n.b.a);c.a<c.c.c.length;)r=uG(N3(c),194),t+=e.Math.abs(r.c);return t}function BVn(n,t,e){var i,r,c,a,o,u,s,h,f,l;if(oM(gK(oIn(e,(jYn(),sMt)))))for(r=new Ww(e.j);r.a<r.c.c.length;)for(o=0,u=(a=x4(uG(N3(r),12).g)).length;o<u;++o)(c=a[o]).d.i==e&&oM(gK(oIn(c,hMt)))&&(h=c.c,(s=uG(cQ(n.b,h),10))||(kfn(s=DJn(h,($Pn(),uRt),h.j,-1,null,null,h.o,uG(oIn(t,Byt),88),t),(GYn(),rmt),h),vJ(n.b,h,s),kD(t.a,s)),l=c.d,(f=uG(cQ(n.b,l),10))||(kfn(f=DJn(l,($Pn(),uRt),l.j,1,null,null,l.o,uG(oIn(t,Byt),88),t),(GYn(),rmt),l),vJ(n.b,l,f),kD(t.a,f)),c2(i=K9(c),uG(zq(s.j,0),12)),u2(i,uG(zq(f.j,0),12)),UNn(n.a,c,new $B(i,t,(can(),Wjt))),uG(oIn(t,(GYn(),Hpt)),21).Fc((r_n(),tpt)))}function HVn(n,t){var e,i,r,c,a,o,u,s,h,f;for(i=new Ww(n.a.b);i.a<i.c.c.length;)for(o=new Ww(uG(N3(i),30).a);o.a<o.c.c.length;)a=uG(N3(o),10),t.j[a.p]=a,t.i[a.p]=t.o==(w0(),dSt)?T0n:M0n;for($V(n.c),c=n.a.b,t.c==(b0(),hSt)&&(c=Spn(c)),_4(n.e,t,n.b),FP(t.p,null),r=c.Kc();r.Ob();)for(u=uG(r.Pb(),30).a,t.o==(w0(),dSt)&&(u=Spn(u)),f=u.Kc();f.Ob();)h=uG(f.Pb(),10),t.g[h.p]==h&&IJn(n,h,t);for(cVn(n,t),e=c.Kc();e.Ob();)for(f=new Ww(uG(e.Pb(),30).a);f.a<f.c.c.length;)h=uG(N3(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=uM(t.i[t.j[h.p].p]),(t.o==(w0(),dSt)&&s>T0n||t.o==wSt&&s<M0n)&&(t.p[h.p]=uM(t.p[h.p])+s));n.e.xg()}function UVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(e.Ug("Label dummy switching",1),i=uG(oIn(t,(jYn(),Gyt)),232),zun(t),r=dxn(t,i),n.a=Inn(eUt,I0n,28,t.b.c.length,15,1),vAn(),h=0,b=(o=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;h<b;++h)if(((c=o[h])==qdt||c==_dt||c==Udt)&&!uG($x(r.a,c)?r.b[c.g]:null,15).dc()){dsn(n,t);break}for(f=0,w=(u=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;f<w;++f)(c=u[f])==qdt||c==_dt||c==Udt||QHn(n,uG($x(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;s<l;++s)((c=a[s])==qdt||c==_dt||c==Udt)&&QHn(n,uG($x(r.a,c)?r.b[c.g]:null,15));n.a=null,e.Vg()}function GVn(n,t){var e,i,r,c,a,o,u,s,h;if(null!=(s=t).b&&null!=n.b){for(pxn(n),szn(n),pxn(s),szn(s),e=Inn(YHt,W1n,28,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],o=s.b[a],u=s.b[a+1],c<o)i+=2;else if(c>=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(!(u<r))throw hv(new Ky("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=Inn(YHt,W1n,28,h,15,1),qGn(e,0,n.b,0,h)}}function qVn(n){var t,i,r,c,a,o,u;for(t=new Zm,n.g=new Zm,n.d=new Zm,o=new bsn(new Nw(n.f.b).a);o.b;)kD(t,uG(uG((a=von(o)).md(),42).b,86)),hN(uG(a.ld(),602).Af())?kD(n.d,uG(a.md(),42)):kD(n.g,uG(a.md(),42));for(Npn(n,n.d),Npn(n,n.g),n.c=new i$n(n.b),ST(n.c,(HS(),Olt)),agn(n,n.d),agn(n,n.g),Ohn(t,n.c.a.b),n.e=new MO(M0n,M0n),n.a=new MO(T0n,T0n),r=new Ww(t);r.a<r.c.c.length;)i=uG(N3(r),86),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);ET(n.c,new kt),u=0;do{c=_Vn(n),++u}while((u<2||c>T1n)&&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<c.c.c.length;){switch(r=uG(N3(c),10),i.g){case 1:case 2:case 3:OKn(r);break;case 4:w=(b=uG(oIn(r,WMt),8))?b.a:0,r.n.a=u*uM(pK(oIn(r,(GYn(),bmt))))-w,fhn(r,!0,!1);break;case 5:g=(d=uG(oIn(r,WMt),8))?d.a:0,r.n.a=uM(pK(oIn(r,(GYn(),bmt))))-g,fhn(r,!0,!1),o.a=e.Math.max(o.a,r.n.a+r.o.a/2)}switch(uG(oIn(r,(GYn(),Fpt)),64).g){case 1:r.n.b=s,mv(h.c,r);break;case 3:r.n.b=f,mv(l.c,r)}}switch(i.g){case 1:case 2:adn(h,n),adn(l,n);break;case 3:odn(h,n),odn(l,n)}}function zVn(n,t){var e,i,r,c,a,o,u,s,h,f,l;switch(n.k.g){case 1:if(i=uG(oIn(n,(GYn(),rmt)),18),(e=uG(oIn(i,cmt),75))?oM(gK(oIn(i,pmt)))&&(e=fln(e)):e=new Uk,s=uG(oIn(n,Zpt),12)){if(t<=(h=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;s8(e,h,e.a,e.a.a)}if(f=uG(oIn(n,nmt),12)){if((l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;s8(e,l,e.c.b,e.c)}if(e.b>=2){for(a=uG(I6(u=Fkn(e,0)),8),o=uG(I6(u),8);o.a<t&&u.b!=u.d.c;)a=o,o=uG(I6(u),8);return a.b+(t-a.a)/(o.a-a.a)*(o.b-a.b)}break;case 3:switch(r=(c=uG(oIn(uG(zq(n.j,0),12),(GYn(),rmt)),12)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return jSn(n).b}function VVn(n){var t,e,i,r,c,a,o,u,s,f;for(c=new Ww(n.d.b);c.a<c.c.c.length;)for(o=new Ww(uG(N3(c),30).a);o.a<o.c.c.length;)!oM(gK(oIn(a=uG(N3(o),10),(jYn(),gyt))))||P6(Ggn(a))?(r=new gY(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=Tx(NS(AS(LS(new lk,a),r),rdt),n.a),Mx(OS(Xcn(new fk,Uhn(cT(zut,1),EZn,60,0,[t])),t),n.a),u=new nv,vJ(n.e,t,u),(e=x5(new Fz(ix(qgn(a).a.Kc(),new h)))-x5(new Fz(ix(Xgn(a).a.Kc(),new h))))<0?hfn(u,!0,(xdn(),JDt)):e>0&&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),39)).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),39),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<o.c.length-1;u++)for(u3(u,o.c.length),s=uG(o.c[u],118),d=u+1;d<o.c.length;d++)a+=OXn(n,s,(u3(d,o.c.length),uG(o.c[d],118)));for(b=uG(oIn(t,(GYn(),dmt)),234),a>=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.a<f.c.c.length;)h=uG(N3(f),118),e.Math.abs(h.s-h.c)<t4n||(w=e.Math.max(w,h.o),n.d.yg(h,c,n.c));return n.d.a.a.$b(),w+1}function ZVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=(s=uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),39))?uG(oIn(s,(OQn(),APt)),39):null,r=1;s&&l;){for(a=0,m=0,e=s,i=l,c=0;c<r;c++)e=M7(e),i=M7(i),m+=uM(pK(oIn(e,(OQn(),xPt)))),a+=uM(pK(oIn(i,xPt)));if(p=uM(pK(oIn(l,(OQn(),FPt)))),g=uM(pK(oIn(s,FPt))),h=Mgn(n,s,l),0<(f=p+a+n.b+h-g-m)){for(o=t,u=0;o&&o!=i;)++u,o=uG(oIn(o,LPt),39);if(!o)return;for(d=f/u,o=t;o!=i;)w=uM(pK(oIn(o,FPt)))+f,kfn(o,FPt,w),b=uM(pK(oIn(o,xPt)))+f,kfn(o,xPt,b),f-=d,o=uG(oIn(o,LPt),39)}++r,l=(s=0==s.d.b?cUn(new Mp(t),r):uG(B$(new Tp(Fkn(new Mp(s).a.d,0))),39))?uG(oIn(s,APt),39):null}}function nWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;return l=n.c[t],b=n.c[e],!((w=uG(oIn(l,(GYn(),Vpt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(zIn(),wbt)&&b.k!=wbt,m=(g=uG(oIn(l,zpt),10))!=(p=uG(oIn(b,zpt),10)),v=!!g&&g!=l||!!p&&p!=b,k=qMn(l,(KQn(),yRt)),y=qMn(b,KRt),v|=qMn(l,KRt)||qMn(b,yRt),d&&(v&&m||k||y))||l.k==(zIn(),gbt)&&b.k==dbt||b.k==(zIn(),gbt)&&l.k==dbt)&&(h=n.c[t],c=n.c[e],r=YEn(n.e,h,c,(KQn(),_Rt)),u=YEn(n.i,h,c,kRt),wKn(n.f,h,c),s=Jln(n.b,h,c)+uG(r.a,17).a+uG(u.a,17).a+n.f.d,o=Jln(n.b,c,h)+uG(r.b,17).a+uG(u.b,17).a+n.f.b,n.a&&(f=uG(oIn(h,rmt),12),a=uG(oIn(c,rmt),12),s+=uG((i=Sjn(n.g,f,a)).a,17).a,o+=uG(i.b,17).a),s>o)}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<b.c.c.length;)l=uG(N3(b),68),kN(c=uG(uG(cQ(n.g,l.a),42).b,27),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),u=e.Math.max(u,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=uG(zDn(n.c,(fIn(),bLt)),107),ZQn(n.c,u-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),JCn(n.c,-h+w.b,-f+w.d),r=new DD(xY(n.c));r.e!=r.i.gc();)o=JFn(i=uG(Zkn(r),74),!0,!0),d=bIn(i),p=gIn(i),g=new MO(d.i+d.g/2,d.j+d.f/2),a=new MO(p.i+p.g/2,p.j+p.f/2),OEn(m=YF(new MO(a.a,a.b),g),d.g,d.f),JF(g,m),OEn(v=YF(new MO(g.a,g.b),a),p.g,p.f),JF(a,v),MN(o,g.a,g.b),yN(o,a.a,a.b)}function eWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(t.Ug("Label dummy removal",1),i=uM(pK(oIn(n,(jYn(),pTt)))),r=uM(pK(oIn(n,yTt))),u=uG(oIn(n,Byt),88),o=new Ww(n.b);o.a<o.c.c.length;)for(h=new N4(uG(N3(o),30).a,0);h.b<h.d.gc();)MK(h.b<h.d.gc()),(s=uG(h.d.Xb(h.c=h.b++),10)).k==(zIn(),bbt)&&(f=uG(oIn(s,(GYn(),rmt)),18),b=uM(pK(oIn(f,tMt))),a=xA(oIn(s,Qpt))===xA((Ajn(),Dxt)),e=new eN(s.n),a&&(e.b+=b+i),c=new MO(s.o.a,s.o.b+(s.k!=bbt||Qj(JJ(uG(oIn(s,gmt),15).Oc(),new hd(new _t))).Bd((vS(),Kut))?-b-i:0)),l=uG(oIn(s,gmt),15),u==(xdn(),nxt)||u==QDt?KDn(l,e,r,c,a,u):bwn(l,e,r,c),Ohn(f.b,l),pVn(s,xA(oIn(n,Vyt))===xA((_gn(),sxt))),LQ(h));t.Vg()}function iWn(n){n.q||(n.q=!0,n.p=Nsn(n,0),n.a=Nsn(n,1),Won(n.a,0),n.f=Nsn(n,2),Won(n.f,1),Von(n.f,2),n.n=Nsn(n,3),Von(n.n,3),Von(n.n,4),Von(n.n,5),Von(n.n,6),n.g=Nsn(n,4),Won(n.g,7),Von(n.g,8),n.c=Nsn(n,5),Won(n.c,7),Won(n.c,8),n.i=Nsn(n,6),Won(n.i,9),Won(n.i,10),Won(n.i,11),Won(n.i,12),Von(n.i,13),n.j=Nsn(n,7),Won(n.j,9),n.d=Nsn(n,8),Won(n.d,3),Won(n.d,4),Won(n.d,5),Won(n.d,6),Von(n.d,7),Von(n.d,8),Von(n.d,9),Von(n.d,10),n.b=Nsn(n,9),Von(n.b,0),Von(n.b,1),n.e=Nsn(n,10),Von(n.e,1),Von(n.e,2),Von(n.e,3),Von(n.e,4),Won(n.e,5),Won(n.e,6),Won(n.e,7),Won(n.e,8),Won(n.e,9),Won(n.e,10),Von(n.e,11),n.k=Nsn(n,11),Von(n.k,0),Von(n.k,1),n.o=$sn(n,12),n.s=$sn(n,13))}function rWn(n,t){t.dc()&&gG(n.j,!0,!0,!0,!0),udn(t,(KQn(),PRt))&&gG(n.j,!0,!0,!0,!1),udn(t,MRt)&&gG(n.j,!1,!0,!0,!0),udn(t,DRt)&&gG(n.j,!0,!0,!1,!0),udn(t,RRt)&&gG(n.j,!0,!1,!0,!0),udn(t,CRt)&&gG(n.j,!1,!0,!0,!1),udn(t,TRt)&&gG(n.j,!1,!0,!1,!0),udn(t,xRt)&&gG(n.j,!0,!1,!1,!0),udn(t,$Rt)&&gG(n.j,!0,!1,!0,!1),udn(t,LRt)&&gG(n.j,!0,!0,!0,!0),udn(t,ERt)&&gG(n.j,!0,!0,!0,!0),udn(t,LRt)&&gG(n.j,!0,!0,!0,!0),udn(t,jRt)&&gG(n.j,!0,!0,!0,!0),udn(t,NRt)&&gG(n.j,!0,!0,!0,!0),udn(t,ARt)&&gG(n.j,!0,!0,!0,!0),udn(t,ORt)&&gG(n.j,!0,!0,!0,!0)}function cWn(n,t,e){var i,r,c,a,o,u,s,h,f;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(i=tdn((gAn(),kBt),t).Jl())return i.jk().wi().ri(i,e);if(a=tdn(kBt,t).Ll()){if(null==e)return null;if((o=uG(e,15)).dc())return"";for(f=new zM,c=o.Kc();c.Ob();)r=c.Pb(),VA(f,a.jk().wi().ri(a,r)),f.a+=" ";return CL(f,f.a.length-1)}if(!(h=tdn(kBt,t).Ml()).dc()){for(s=h.Kc();s.Ob();)if((u=uG(s.Pb(),156)).fk(e))try{if(null!=(f=u.jk().wi().ri(u,e)))return f}catch(l){if(!F$(l=Ehn(l),103))throw hv(l)}throw hv(new vM("Invalid value: '"+e+"' for datatype :"+t.xe()))}return uG(t,847).ok(),null==e?null:F$(e,180)?""+uG(e,180).a:Tbn(e)==iot?N$(QKt[0],uG(e,206)):cpn(e)}function aWn(n){var t,i,r,c,a,o,u,s,h;for(s=new lS,o=new lS,c=new Ww(n);c.a<c.c.c.length;)(i=uG(N3(c),131)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&s8(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&s8(o,i,o.c.b,o.c);for(a=-1;0!=s.b;)for(t=new Ww((i=uG(Kjn(s,0),131)).t);t.a<t.c.c.length;)(h=uG(N3(t),274).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&s8(s,h,s.c.b,s.c);if(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<t.c.c.length;)0==(u=uG(N3(t),274).a).r.a.gc()&&(u.v=e.Math.min(u.v,i.v-1),--u.u,0==u.u&&s8(o,u,o.c.b,o.c))}}function oWn(n){var t,i,r,c,a,o,u,s,h;for(s=new Zm,o=new Zm,a=new Ww(n);a.a<a.c.c.length;)Qb(r=uG(N3(a),118),r.f.c.length),Jb(r,r.k.c.length),0==r.d&&mv(s.c,r),0==r.i&&0==r.e.b&&mv(o.c,r);for(i=-1;0!=s.c.length;)for(t=new Ww((r=uG(i7(s,0),118)).k);t.a<t.c.c.length;)Yb(h=uG(N3(t),132).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Qb(h,h.d-1),0==h.d&&mv(s.c,h);if(i>-1){for(c=new Ww(o);c.a<c.c.c.length;)(r=uG(N3(c),118)).o=i;for(;0!=o.c.length;)for(t=new Ww((r=uG(i7(o,0),118)).f);t.a<t.c.c.length;)(u=uG(N3(t),132).a).e.b>0||(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.a<i.c.c.length;)uM(oD((e=uG(N3(i),239)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&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.a<c.c.c.length;)if(sM(oD((r=uG(N3(c),239)).g,r.d[0]).a)==sM(oD(e.g,e.d[0]).a)){if(Ten(n,r,0)>Ten(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.a<c.c.c.length;)(i=uG(N3(c),30)).p=a++;for(d=new rj((l=SPn(n)).length),GXn(new IM(Uhn(cT(fdt,1),EZn,230,0,[d])),l),w=0,a=0,r=new Ww(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Ww((i=uG(N3(r),30)).a);h.a<h.c.c.length;)for((u=uG(N3(h),10)).n.a>0&&(e+=u.n.a+u.o.a/2,++f),b=new Ww(u.j);b.a<b.c.c.length;)uG(N3(b),12).p=w++;for(f>0&&(e/=f),g=Inn(eUt,I0n,28,i.a.c.length,15,1),o=0,s=new Ww(i.a);s.a<s.c.c.length;)(u=uG(N3(s),10)).p=o++,g[u.p]=zVn(u,e),u.k==(zIn(),wbt)&&kfn(u,(GYn(),amt),g[u.p]);hZ(),f$(i.a,new Wg(g)),hUn(d,l,a,!0),++a}t.Vg()}function lWn(n,t){var e,i,r,c,a,o,u,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(pxn(n),szn(n),pxn(s),szn(s),e=Inn(YHt,W1n,28,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],o=s.b[a],u=s.b[a+1],c<o)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=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(!(u<r))throw hv(new Ky("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=Inn(YHt,W1n,28,h,15,1),qGn(e,0,n.b,0,h)}}else GVn(n,t)}function bWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;for(w=COn(JFn(t,!1,!1)),r&&(w=fln(w)),g=uM(pK(zDn(t,(ryn(),Jht)))),MK(0!=w.b),b=uG(w.a.a.c,8),h=uG(hyn(w,1),8),w.b>2?(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((oUn(),cKt)),c=0,a=(r=Nkn()).length;c<a;++c)i=r[c],(e=uG(AJ(n.i,i),314))&&(vvn(i)?(e.j=!0,e.k=!0):(e.j=!o,e.k=!o));n.A.Hc(VRt)&&n.B.Hc((oUn(),rKt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function dWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;for(e=new Ww(n.e.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)if(i=uG(N3(r),10),u=(f=n.i[i.p]).a.e,o=f.d.e,i.n.b=u,d=o-u-i.o.b,t=WXn(i),Yyn(),h=(i.q?i.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(i,LMt),203):uG(oIn(HQ(i),NMt),203),t&&(h==wjt||h==bjt)&&(i.o.b+=d),t&&(h==gjt||h==wjt||h==bjt)){for(b=new Ww(i.j);b.a<b.c.c.length;)l=uG(N3(b),12),(KQn(),ERt).Hc(l.j)&&(s=uG(cQ(n.k,l),125),l.n.b=s.e-u);for(a=new Ww(i.b);a.a<a.c.c.length;)c=uG(N3(a),72),(w=uG(oIn(i,PMt),21)).Hc((VDn(),Xxt))?c.n.b+=d:w.Hc(zxt)&&(c.n.b+=d/2);(h==wjt||h==bjt)&&Dgn(i,(KQn(),KRt)).Jc(new fp(d))}}function gWn(n,t,e){var i,r,c,a,o,u,s,h;for(u=new Zm,o=new Ww(t.a);o.a<o.c.c.length;)for(h=Dgn(uG(N3(o),10),(KQn(),kRt)).Kc();h.Ob();)for(r=new Ww(uG(h.Pb(),12).g);r.a<r.c.c.length;)!v9(i=uG(N3(r),18))&&i.c.i.c==i.d.i.c||v9(i)||i.d.i.c!=e||mv(u.c,i);for(a=Spn(e.a).Kc();a.Ob();)for(h=Dgn(uG(a.Pb(),10),(KQn(),_Rt)).Kc();h.Ob();)for(r=new Ww(uG(h.Pb(),12).e);r.a<r.c.c.length;)if((v9(i=uG(N3(r),18))||i.c.i.c!=i.d.i.c)&&!v9(i)&&i.c.i.c==t&&0!=u.c.length){for(MK((s=new N4(u,u.c.length)).b>0),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.a<c.c.c.length;)for(s=(r=uG(N3(c),60)).c.Kc();s.Ob();)u=uG(s.Pb(),60),r.a!=u.a&&(l=hN(n.a.d)?n.a.g.ff(r,u):n.a.g.gf(r,u),a=r.b.a+r.d.b+l-u.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),$en(r,u)?(o=jx(new sk,n.d),t=(h=t0(e.Math.ceil(u.b.a-r.b.a)))-(u.b.a-r.b.a),i=r,(f=Q6(r).a)||(f=Q6(u).a,t=-t,i=u),f&&(i.b.a-=t,f.n.a-=t),RKn(xS(DS(RS($S(new uk,e.Math.max(0,h)),1),o),n.c[r.a.d])),RKn(xS(DS(RS($S(new uk,e.Math.max(0,-h)),1),o),n.c[u.a.d]))):(b=1,(F$(r.g,154)&&F$(u.g,10)||F$(u.g,154)&&F$(r.g,10))&&(b=2),RKn(xS(DS(RS($S(new uk,t0(a)),b),n.c[r.a.d]),n.c[u.a.d]))))}function vWn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(i)for(r=-1,f=new N4(t,0);f.b<f.d.gc();){if(MK(f.b<f.d.gc()),u=uG(f.d.Xb(f.c=f.b++),10),null==(l=n.c[u.c.p][u.p].a)){for(o=r+1,a=new N4(t,f.b);a.b<a.d.gc();)if(null!=(b=aD(n,(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),10))).a)){tJ(b),o=b;break}l=(r+o)/2,n.c[u.c.p][u.p].a=l,n.c[u.c.p][u.p].d=(tJ(l),l),n.c[u.c.p][u.p].b=1}tJ(l),r=l}else{for(c=0,h=new Ww(t);h.a<h.c.c.length;)u=uG(N3(h),10),null!=n.c[u.c.p][u.p].a&&(c=e.Math.max(c,uM(n.c[u.c.p][u.p].a)));for(c+=2,s=new Ww(t);s.a<s.c.c.length;)u=uG(N3(s),10),null==n.c[u.c.p][u.p].a&&(l=uRn(n.i,24)*z0n*c-1,n.c[u.c.p][u.p].a=l,n.c[u.c.p][u.p].d=l,n.c[u.c.p][u.p].b=1)}}function kWn(n,t,e){var i,r,c,a,o,u,s,h,f;for(!e&&(e=cfn(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),u=o=new DK(Lgn(Bsn(t.q.getTime()),r)),o.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,u=new DK(Lgn(Bsn(t.q.getTime()),r))),h=new QM,s=n.a.length,c=0;c<s;)if((i=VJ(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&VJ(n.a,a)==i;++a);KYn(h,i,a-c,o,u,e),c=a}else if(39==i){if(++c<s&&39==VJ(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=VJ(n.a,a);)++a;if(a>=s)throw hv(new vM("Missing trailing '"));a+1<s&&39==VJ(n.a,a+1)?++a:f=!0,JA(h,r1(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function yWn(){ML(u_t,new Ys),ML(c_t,new sh),ML(h_t,new kh),ML(s_t,new Sh),ML(f_t,new Ph),ML(w_t,new Ch),ML(d_t,new Ih),ML(sFt,new Oh),ML(uFt,new Hs),ML(hFt,new Us),ML(nFt,new Gs),ML(p_t,new qs),ML(fFt,new Xs),ML(m_t,new zs),ML(v_t,new Vs),ML(o_t,new Ws),ML(a_t,new Qs),ML(wBt,new Js),ML(g_t,new Zs),ML(J_t,new nh),ML(cot,new th),ML(cT(tUt,1),new eh),ML(uot,new ih),ML(hot,new rh),ML(iot,new ch),ML(aUt,new ah),ML(fot,new oh),ML(CFt,new uh),ML(BFt,new hh),ML(IBt,new fh),ML(Z_t,new lh),ML(lot,new bh),ML(dot,new wh),ML(gat,new dh),ML(yot,new gh),ML(mat,new ph),ML(jBt,new mh),ML(oUt,new vh),ML(Tot,new yh),ML($ot,new Mh),ML(OFt,new Th),ML(uUt,new jh)}function MWn(n,t){var e,i,r,c,a,o;if(null==n)return IZn;if(null!=t.a.zc(n,t))return"[...]";for(e=new Ysn(TZn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&Tbn(i).i)?!Array.isArray(i)||(o=Min(i))>=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))),0!=(4&n.Db)&&0==(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=vUn((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<i.gc())return F$(s=i.Xb(u),76)&&(s=uG(s,76).md()),uG(s,58)}if(e<0)return uG(U9(n,jrn(n,(s3(1,t.length+1),t.substr(1))),!1),58)}return null}function EWn(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g;for(t.Ug("Label dummy insertions",1),b=new Zm,o=uM(pK(oIn(n,(jYn(),pTt)))),f=uM(pK(oIn(n,yTt))),l=uG(oIn(n,Byt),88),w=new Ww(n.a);w.a<w.c.c.length;)for(a=new Fz(ix(Xgn(uG(N3(w),10)).a.Kc(),new h));hDn(a);)if((c=uG(N9(a),18)).c.i!=c.d.i&&_$(c.b,Bwt)){for(i=Jxn(n,c,g=grn(c),d=iR(c.b.c.length)),mv(b.c,i),r=i.o,u=new N4(c.b,0);u.b<u.d.gc();)MK(u.b<u.d.gc()),xA(oIn(s=uG(u.d.Xb(u.c=u.b++),72),Xyt))===xA((Zrn(),ixt))&&(l==(xdn(),nxt)||l==QDt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),mv(d.c,s),LQ(u));l==(xdn(),nxt)||l==QDt?(r.a-=f,r.b+=o+g):r.b+=o-f+g}Ohn(n.a,b),t.Vg()}function SWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;if(n.c=n.e,l=null==(b=gK(oIn(t,(jYn(),hTt))))||(tJ(b),b),c=uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt)),e=!((r=uG(oIn(t,JMt),101))==($Pn(),rRt)||r==aRt||r==cRt),!l||!e&&c)f=new IM(Uhn(cT(sbt,1),V4n,36,0,[t]));else{for(h=new Ww(t.a);h.a<h.c.c.length;)uG(N3(h),10).p=0;for(f=new Zm,s=new Ww(t.a);s.a<s.c.c.length;)if(i=GUn(n,uG(N3(s),10),null)){for(zsn(u=new Dan,t),kfn(u,xpt,uG(i.b,21)),WY(u.d,t.d),kfn(u,RMt,null),o=uG(i.a,15).Kc();o.Ob();)a=uG(o.Pb(),10),kD(u.a,a),a.a=u;f.Fc(u)}c&&(xA(oIn(t,kyt))===xA((Uvn(),Ylt))?n.c=n.b:xA(oIn(t,kyt))===xA(nbt)?n.c=n.d:n.c=n.a)}return xA(oIn(t,kyt))!==xA((Uvn(),tbt))&&(hZ(),f.jd(new $t)),f}function PWn(n,t,e){var i,r,c,a,o;if(o=n.c,!t&&(t=nBt),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new lV(n,1,2,o,n.c),e?e.nj(a):e=a),o!=t)if(F$(n.Cb,291))n.Db>>16==-10?e=uG(n.Cb,291).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,456))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.a<s.c.c.length;)(u=uG(N3(s),12)).j==i&&(l=e.Math.min(l,u.p),f=e.Math.max(f,u.p));if(l==vZn)for(o=0;o<v.gc();o++)ctn(uG(v.Xb(o),105),i,o);else for(VX(k=Inn(YHt,W1n,28,c.length,15,1),k.length),m=v.Kc();m.Ob();){for(p=uG(m.Pb(),105),a=uG(cQ(n.b,p),183),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,y=new ek,b=0;b<c.length;b++)c[w][b]&&FV(y,xwn(k[b]));for(;cS(y,xwn(h));)++h}for(ctn(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(k[p.i.c]=h)}}function AWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(c=null,r=new Ww(t.a);r.a<r.c.c.length;)WXn(i=uG(N3(r),10))?(h=new wY(i,!0,u=jx(KS(new sk,i),n.f),s=jx(KS(new sk,i),n.f)),f=i.o.b,Yyn(),b=1e4,(l=(i.q?i.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(i,LMt),203):uG(oIn(HQ(i),NMt),203))==bjt&&(b=1),w=RKn(xS(DS($S(RS(new uk,b),t0(e.Math.ceil(f))),u),s)),l==wjt&&FV(n.d,w),BUn(n,Spn(Dgn(i,(KQn(),_Rt))),h),BUn(n,Dgn(i,kRt),h),a=h):(d=jx(KS(new sk,i),n.f),kS(JJ(new fX(null,new h3(i.j,16)),new Fc),new CI(n,d)),a=new wY(i,!1,d,d)),n.i[i.p]=a,c&&(o=c.c.d.a+y$(n.n,c.c,i)+i.d.d,c.b||(o+=c.c.o.b),RKn(xS(DS(RS($S(new uk,t0(e.Math.ceil(o))),0),c.d),a.a))),c=a}function LWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(l=B_n(n,t,a=new s$n(t)),w=e.Math.max(uM(pK(oIn(t,(jYn(),tMt)))),1),f=new Ww(l.a);f.a<f.c.c.length;)h=uG(N3(f),42),s=mkn(uG(h.a,8),uG(h.b,8),w),hq(i,new MO(s.c,s.d)),hq(i,KR(new MO(s.c,s.d),s.b,0)),hq(i,KR(new MO(s.c,s.d),0,s.a)),hq(i,KR(new MO(s.c,s.d),s.b,s.a));switch(b=a.d,u=mkn(uG(l.b.a,8),uG(l.b.b,8),w),b==(KQn(),_Rt)||b==kRt?(r.c[b.g]=e.Math.min(r.c[b.g],u.d),r.b[b.g]=e.Math.max(r.b[b.g],u.d+u.a)):(r.c[b.g]=e.Math.min(r.c[b.g],u.c),r.b[b.g]=e.Math.max(r.b[b.g],u.c+u.b)),c=T0n,o=a.c.i.d,b.g){case 4:c=o.c;break;case 2:c=o.b;break;case 1:c=o.a;break;case 3:c=o.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function NWn(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;o=uG(cQ(t.c,n),467),g=t.a.c,u=t.a.c+t.a.b,a=(T=o.f)<(j=o.a),b=new MO(g,T),p=new MO(u,j),w=new MO(r=(g+u)/2,T),m=new MO(r,j),c=XRn(n,T,j),k=n3(t.B),y=new MO(r,c),M=n3(t.D),e=dfn(Uhn(cT(PNt,1),zZn,8,0,[k,y,M])),f=!1,(d=t.B.i)&&d.c&&o.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?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<v.c.a.c.length-1?(h=v.p,a?--h:++h,l=!(VRn(i=afn(uG(zq(v.c.a,h),10)),e[0],M)||rV(i,e[0],M))):l=!0),f&&l&&aq(n.a,y),f||dan(n.a,Uhn(cT(PNt,1),zZn,8,0,[b,w])),l||dan(n.a,Uhn(cT(PNt,1),zZn,8,0,[m,p]))}function $Wn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(b=t.c.length,l=0,f=new Ww(n.b);f.a<f.c.c.length;)if(0!=(p=(h=uG(N3(f),30)).a).c.length){for(s=0,m=null,r=uG(N3(g=new Ww(p)),10),c=null;r;){if((c=uG(zq(t,r.p),261)).c>=0){for(u=null,o=new N4(h.a,s+1);o.b<o.d.gc()&&(MK(o.b<o.d.gc()),a=uG(o.d.Xb(o.c=o.b++),10),!((u=uG(zq(t,a.p),261)).d==c.d&&u.c<c.c));)u=null;u&&(m&&(Y8(i,r.p,xwn(uG(zq(i,r.p),17).a-1)),uG(zq(e,m.p),15).Mc(c)),c=nCn(c,r,b++),mv(t.c,c),kD(e,new Zm),m?(uG(zq(e,m.p),15).Fc(c),kD(i,xwn(1))):kD(i,xwn(0)))}w=null,g.a<g.c.c.length&&(w=uG(N3(g),10),d=uG(zq(t,w.p),261),uG(zq(e,r.p),15).Fc(d),Y8(i,w.p,xwn(uG(zq(i,w.p),17).a+1))),c.d=l,c.c=s++,m=r,r=w}++l}}function DWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(c=uG(oIn(n,(GYn(),rmt)),74)){for(i=n.a,JF(r=new eN(e),dSn(n)),jsn(n.d.i,n.c.i)?(l=n.c,YF(f=Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.n,l.a])),e)):f=n3(n.c),s8(i,f,i.a,i.a.a),b=n3(n.d),null!=oIn(n,Smt)&&JF(b,uG(oIn(n,Smt),8)),s8(i,b,i.c.b,i.c),Xun(i,r),Xan(a=JFn(c,!0,!0),uG(zrn((!c.b&&(c.b=new f_(cFt,c,4,7)),c.b),0),84)),zan(a,uG(zrn((!c.c&&(c.c=new f_(cFt,c,5,8)),c.c),0),84)),sqn(i,a),h=new Ww(n.b);h.a<h.c.c.length;)s=uG(N3(h),72),kcn(o=uG(oIn(s,rmt),135),s.o.a),vcn(o,s.o.b),kN(o,s.n.a+r.a,s.n.b+r.b),Myn(o,(Pun(),Hwt),gK(oIn(s,Hwt)));(u=uG(oIn(n,(jYn(),bMt)),75))?(Xun(u,r),Myn(c,bMt,u)):Myn(c,bMt,null),t==(_gn(),hxt)?Myn(c,Vyt,hxt):Myn(c,Vyt,null)}}function xWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;if(0!=i.c.length){for(d=new Zm,w=new Ww(i);w.a<w.c.c.length;)kD(d,new MO((b=uG(N3(w),27)).i,b.j));for(r.dh(t,"Before removing overlaps");kIn(n,i);)gxn(n,i,!1);if(r.dh(t,"After removing overlaps"),u=0,s=0,c=null,0!=i.c.length&&(u3(0,i.c.length),u=(c=uG(i.c[0],27)).i-(u3(0,d.c.length),uG(d.c[0],8)).a,s=c.j-(u3(0,d.c.length),uG(d.c[0],8)).b),o=e.Math.sqrt(u*u+s*s),a=1,0!=(l=hwn(i)).a.gc()){for(f=l.a.ec().Kc();f.Ob();)h=uG(f.Pb(),27),p=(g=n.f).i+g.g/2,m=g.j+g.f/2,v=h.i+h.g/2,y=h.j+h.f/2-m,T=(k=v-p)/(M=e.Math.sqrt(k*k+y*y)),j=y/M,ycn(h,h.i+T*o),Mcn(h,h.j+j*o);r.dh(t,"Child movement "+a),++a}n.a&&n.a.Gg(new Z_(l)),xWn(n,t,new Z_(l),r)}}function RWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return u=n,h=YF(new MO(t.a,t.b),n),s=i,f=YF(new MO(r.a,r.b),i),l=u.a,g=u.b,w=s.a,m=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(v=f.b),YN(),oan(I9n),!(e.Math.abs(0-c)<=I9n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-m)*b),o=1/c*-(-(l-w)*v+(g-m)*d),oan(I9n),(e.Math.abs(0-a)<=I9n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?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:0<o?-1:0>o?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<i.c.c.length;){for(e=uG(N3(i),15),k=new Zm,mv(v.c,k),u=new ek,l=e.Kc();l.Ob();){for(c=nHn(n,f=uG(l.Pb(),27),!0,0,0),mv(k.c,c),new MO(b=f.i,w=f.j),!f.n&&(f.n=new fV(lFt,f,1,7)),h=new DD(f.n);h.e!=h.i.gc();)r=nHn(n,uG(Zkn(h),135),!1,b,w),mv(k.c,r);for(!f.c&&(f.c=new fV(wFt,f,9,9)),g=new DD(f.c);g.e!=g.i.gc();)for(a=nHn(n,d=uG(Zkn(g),123),!1,b,w),mv(k.c,a),p=d.i+b,m=d.j+w,!d.n&&(d.n=new fV(lFt,d,1,7)),s=new DD(d.n);s.e!=s.i.gc();)r=nHn(n,uG(Zkn(s),135),!1,p,m),mv(k.c,r);Qon(u,PZ(zcn(Uhn(cT(vat,1),EZn,20,0,[eRn(f),tRn(f)]))))}xRn(n,u,k)}return n.f=new ej(v),zsn(n.f,t),n.f}function _Wn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M;for(f=new fQ(new ad(n));f.c!=f.d.a.d;)for(o=uG((h=Hen(f)).d,58),t=uG(h.e,58),d=0,k=(null==(a=o.Dh()).i&&eqn(a),a.i).length;d<k;++d)if(null==a.i&&eqn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).rk()&&!s.sk())if(F$(s,102))0==((u=uG(s,19)).Bb&Qtt)&&(!(M=lMn(u))||0==(M.Bb&Qtt))&&xqn(n,u,o,t);else if(PP(),uG(s,69).xk()&&(e=uG((y=s)?uG(t,54).gi(y):null,160)))for(b=uG(o.Mh(s),160),i=e.gc(),g=0,w=b.gc();g<w;++g)if(F$(l=b.Tl(g),102)){if(null==(r=ain(n,v=b.Ul(g)))&&null!=v){if(m=uG(l,19),!n.b||0!=(m.Bb&Qtt)||lMn(m))continue;r=v}if(!e.Ol(l,r))for(p=0;p<i;++p)if(e.Tl(p)==l&&xA(e.Ul(p))===xA(r)){e.Ti(e.gc()-1,p),--i;break}}else e.Ol(b.Tl(g),b.Ul(g))}function BWn(n,t,i){var r;if(i.Ug("StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=M0n,n.g=T0n,n.d=uM(pK(oIn(t,(jYn(),dTt)))),Ayn(n),yDn(n),kDn(n),mSn(n),Gmn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=TMn(n),r=new bQ(n.c),kD(n.c.b,r),n.r=T3(n.p),n.n=q1(n.k,n.k.length);0!=n.r.c.length;)n.o=fwn(n),!n.o||Mfn(n)&&0!=n.b.a.gc()?(mPn(n,r),r=new bQ(n.c),kD(n.c.b,r),Qon(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Mfn(n)?(n.c.b.c.length=0,r=new bQ(n.c),kD(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=T3(n.p),n.n=q1(n.k,n.k.length)):(a2(n.o,r),men(n.r,n.o),FV(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c.length=0,_An(t.b),i.Vg()}else i.Vg()}function HWn(n){var t,i,r,c,a,o,u,s,h,f;for(n.j=Inn(YHt,W1n,28,n.g,15,1),n.o=new Zm,kS(sin(new fX(null,new h3(n.e.b,16)),new Xc),new lp(n)),n.a=Inn(ZHt,B2n,28,n.b,16,1),cdn(new fX(null,new h3(n.e.b,16)),new wp(n)),f=new Zm,kS(JJ(sin(new fX(null,new h3(n.e.b,16)),new Vc),new bp(n)),new II(n,f)),u=new Ww(f);u.a<u.c.c.length;)if(!((o=uG(N3(u),515)).c.length<=1))if(2!=o.c.length){if(!LPn(o)&&!TAn(o,new zc))for(s=new Ww(o),r=null;s.a<s.c.c.length;)t=uG(N3(s),18),i=n.c[t.p],h=!r||s.a>=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),WXn((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.a<r.c.c.length;)i=uG(N3(r),60),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);JF(dL(n.d.c),BR(new MO(c.a,c.b))),JF(dL(n.d.f),YF(new MO(t.a,t.b),c)),YRn(n,c,t),$V(n.f),$V(n.b),$V(n.g),$V(n.e),n.a.a.c.length=0,n.a.b.c.length=0,n.a=null,n.d=null}function GWn(n,t){var e;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));if(!TC(n.a,t))throw hv(new Ky(y2n+t+M2n));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:CTn(n);break;case 1:_fn(n),CTn(n);break;case 4:RSn(n),CTn(n);break;case 3:RSn(n),_fn(n),CTn(n)}break;case 2:switch(t.g){case 1:_fn(n),KBn(n);break;case 4:RSn(n),CTn(n);break;case 3:RSn(n),_fn(n),CTn(n)}break;case 1:switch(t.g){case 2:_fn(n),KBn(n);break;case 4:_fn(n),RSn(n),CTn(n);break;case 3:_fn(n),RSn(n),_fn(n),CTn(n)}break;case 4:switch(t.g){case 2:RSn(n),CTn(n);break;case 1:RSn(n),_fn(n),CTn(n);break;case 3:_fn(n),KBn(n)}break;case 3:switch(t.g){case 2:_fn(n),RSn(n),CTn(n);break;case 1:_fn(n),RSn(n),_fn(n),CTn(n);break;case 4:_fn(n),KBn(n)}}return n}function qWn(n,t){var e;if(n.d)throw hv(new kM((vK(Rlt),v2n+Rlt.k+k2n)));if(!MC(n.a,t))throw hv(new Ky(y2n+t+M2n));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:hln(n);break;case 1:Bfn(n),hln(n);break;case 4:KSn(n),hln(n);break;case 3:KSn(n),Bfn(n),hln(n)}break;case 2:switch(t.g){case 1:Bfn(n),FBn(n);break;case 4:KSn(n),hln(n);break;case 3:KSn(n),Bfn(n),hln(n)}break;case 1:switch(t.g){case 2:Bfn(n),FBn(n);break;case 4:Bfn(n),KSn(n),hln(n);break;case 3:Bfn(n),KSn(n),Bfn(n),hln(n)}break;case 4:switch(t.g){case 2:KSn(n),hln(n);break;case 1:KSn(n),Bfn(n),hln(n);break;case 3:Bfn(n),FBn(n)}break;case 3:switch(t.g){case 2:Bfn(n),KSn(n),hln(n);break;case 1:Bfn(n),KSn(n),Bfn(n),hln(n);break;case 4:Bfn(n),FBn(n)}}return n}function XWn(n,t){var e,i,r,c,a,o,u;if(F$(n.Eh(),167)?(XWn(uG(n.Eh(),167),t),t.a+=" > "):t.a+="Root ",m_((e=n.Dh().zb).substr(0,3),"Elk")?JA(t,(s3(3,e.length+1),e.substr(3))):t.a+=""+e,r=n.jh())JA((t.a+=" ",t),r);else if(F$(n,366)&&(u=uG(n,135).a))JA((t.a+=" ",t),u);else{for(c=new DD(n.kh());c.e!=c.i.gc();)if(u=uG(Zkn(c),135).a)return void JA((t.a+=" ",t),u);if(F$(n,326)&&(!(i=uG(n,74)).b&&(i.b=new f_(cFt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new f_(cFt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new Zx((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(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:tzn(n,a);break;case 3:for(n.r=Djt,tzn(n,a),s=0,u=new Ww(n.b);u.a<u.c.c.length;)o=uG(N3(u),17),s=e.Math.max(s,o.a);s>n.k&&(n.r=Ijt,tzn(n,a));break;case 4:for(n.r=Djt,tzn(n,a),h=0,c=new Ww(n.c);c.a<c.c.c.length;)r=pK(N3(c)),h=e.Math.max(h,(tJ(r),r));h>n.n&&(n.r=Ljt,tzn(n,a));break;case 6:tzn(n,new mg(t0(e.Math.ceil(n.g.length*f/100))));break;case 5:tzn(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.b<u.d.gc();){for(MK(u.b<u.d.gc()),o=uG(u.d.Xb(u.c=u.b++),30),u3(c,s.c.length),b=uG(s.c[c],30),d=(w=T3(o.a)).c.length,l=new Ww(w);l.a<l.c.c.length;)a2(h=uG(N3(l),10),b);if(g){for(f=Spn(w).Kc();f.Ob();)for(r=new Ww(T3(qgn(h=uG(f.Pb(),10))));r.a<r.c.c.length;)pqn(i=uG(N3(r),18),!0),kfn(n,(GYn(),Lpt),(qx(),!0)),e=gVn(n,i,d),t=uG(oIn(h,Spt),313),p=uG(zq(e,e.c.length-1),18),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(u3(0,w.c.length),uG(w.c[0],10).k==(zIn(),fbt)&&(g=!0,c=-1));++c}for(a=new N4(n.b,0);a.b<a.d.gc();)MK(a.b<a.d.gc()),0==uG(a.d.Xb(a.c=a.b++),30).a.c.length&&LQ(a)}function QWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(Y1(l=new kQn(n),!(t==(xdn(),nxt)||t==QDt)),f=l.a,b=new Dk,Yrn(),o=0,s=(c=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;o<s;++o)i=c[o],(h=rD(f,jst,i))&&(b.d=e.Math.max(b.d,h.jf()));for(a=0,u=(r=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;a<u;++a)i=r[a],(h=rD(f,Sst,i))&&(b.a=e.Math.max(b.a,h.jf()));for(p=0,v=(d=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;p<v;++p)(h=rD(f,d[p],jst))&&(b.b=e.Math.max(b.b,h.kf()));for(g=0,m=(w=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;g<m;++g)(h=rD(f,w[g],Sst))&&(b.c=e.Math.max(b.c,h.kf()));return b.d>0&&(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.a<h.c.c.length;)if((u=uG(N3(h),10)).k==(zIn(),lbt)){switch(r=uG(oIn(u,(GYn(),Fpt)),64),c=uG(oIn(u,_pt),8),f=u.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==($Pn(),aRt)?(w=uM(pK(oIn(u,bmt))),f.b=a.b*w-uG(oIn(u,(jYn(),WMt)),8).b,d=f.b+c.b,fhn(u,!1,!0)):t==cRt&&(f.b=uM(pK(oIn(u,bmt)))-uG(oIn(u,(jYn(),WMt)),8).b,d=f.b+c.b,fhn(u,!1,!0))}o=e.Math.max(o,d)}for(i.f.b+=o-a.b,s=new Ww(n.a);s.a<s.c.c.length;)if((u=uG(N3(s),10)).k==(zIn(),lbt))switch(r=uG(oIn(u,(GYn(),Fpt)),64),f=u.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function YWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if((f=uG(uG(Y9(n.r,t),21),87)).gc()<=2||t==(KQn(),kRt)||t==(KQn(),_Rt))MJn(n,t);else{for(g=n.u.Hc((eNn(),pRt)),i=t==(KQn(),yRt)?(ehn(),pht):(ehn(),wht),m=t==yRt?(Yen(),Rst):(Yen(),Fst),r=TT(BB(i),n.s),p=t==yRt?M0n:T0n,h=f.Kc();h.Ob();)!(u=uG(h.Pb(),117)).c||u.c.d.c.length<=0||(d=u.b.Mf(),w=u.e,(b=(l=u.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(o=l.n,l.e.b+o.d+o.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,ZZ(m,W2n),l.f=m,etn(l,(Ktn(),Lst)),kD(r.d,new ZX(b,Hdn(r,b))),p=t==yRt?e.Math.min(p,w.b):e.Math.max(p,w.b+u.b.Mf().b));for(p+=t==yRt?-n.t:n.t,cmn((r.e=p,r)),s=f.Kc();s.Ob();)!(u=uG(s.Pb(),117)).c||u.c.d.c.length<=0||((b=u.c.i).c-=u.e.a,b.d-=u.e.b)}}function ZWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(i=new Zm,w=new Ww(t.a);w.a<w.c.c.length;)if((l=(b=uG(N3(w),10)).e)&&(Ohn(i,ZWn(n,l,b)),BVn(n,l,b),uG(oIn(l,(GYn(),Hpt)),21).Hc((r_n(),tpt))))for(p=uG(oIn(b,(jYn(),JMt)),101),f=uG(oIn(b,nTt),181).Hc((eNn(),wRt)),g=new Ww(b.j);g.a<g.c.c.length;)for(d=uG(N3(g),12),(r=uG(cQ(n.b,d),10))||(kfn(r=DJn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new sj,d.o,uG(oIn(l,Byt),88),l),rmt,d),vJ(n.b,d,r),kD(l.a,r)),c=uG(zq(r.j,0),12),s=new Ww(d.f);s.a<s.c.c.length;)u=uG(N3(s),72),(a=new uj).o.a=u.o.a,a.o.b=u.o.b,kD(c.f,a),f||(m=d.j,h=0,cV(uG(oIn(b,nTt),21))&&(h=jNn(u.n,u.o,d.o,0,m)),p==($Pn(),uRt)||(KQn(),ERt).Hc(m)?a.o.a=h:a.o.b=h);return FVn(n,t,e,i,o=new Zm),e&&Rzn(n,t,e,o),o}function nQn(n,t,e){var i,r,c,a,o,u,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Ww(t.j);h.a<h.c.c.length;)for(s=uG(N3(h),12),u=(e?new zd(s):new Wd(s)).Kc();u.Ob();)(a=(o=uG(u.Pb(),12)).i).c==t.c?a!=t&&(nQn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[o.p],++n.c[t.c.p][t.p].b);if(c=uG(oIn(t,(GYn(),jpt)),15))for(r=c.Kc();r.Ob();)i=uG(r.Pb(),10),t.c==i.c&&(nQn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(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.a<l.c.c.length;){for(Xx((f=uG(N3(l),10)).n),Xx(f.o),ynn(f.f),YBn(f),tBn(f),w=new Ww(f.j);w.a<w.c.c.length;){for(Xx((b=uG(N3(w),12)).n),Xx(b.a),Xx(b.o),NLn(b,UMn(b.j)),(r=uG(oIn(b,(jYn(),YMt)),17))&&kfn(b,YMt,xwn(-r.a)),i=new Ww(b.g);i.a<i.c.c.length;){for(t=Fkn((e=uG(N3(i),18)).a,0);t.b!=t.d.c;)Xx(uG(I6(t),8));if(a=uG(oIn(e,bMt),75))for(c=Fkn(a,0);c.b!=c.d.c;)Xx(uG(I6(c),8));for(s=new Ww(e.b);s.a<s.c.c.length;)Xx((o=uG(N3(s),72)).n),Xx(o.o)}for(h=new Ww(b.f);h.a<h.c.c.length;)Xx((o=uG(N3(h),72)).n),Xx(o.o)}for(f.k==(zIn(),lbt)&&(kfn(f,(GYn(),Fpt),UMn(uG(oIn(f,Fpt),64))),aFn(f)),u=new Ww(f.b);u.a<u.c.c.length;)YBn(o=uG(N3(u),72)),Xx(o.o),Xx(o.n)}}function eQn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;null==(w=cQ(n.e,i))&&(s=uG(w=new _y,190),u=new QW(t+"_s"+r),nrn(s,Iet,u)),pQ(e,b=uG(w,190)),vZ(g=new _y,"x",i.j),vZ(g,"y",i.k),nrn(b,Let,g),vZ(f=new _y,"x",i.b),vZ(f,"y",i.c),nrn(b,"endPoint",f),!pE((!i.a&&(i.a=new MD(eFt,i,5)),i.a))&&(c=new wm(h=new Ib),z8((!i.a&&(i.a=new MD(eFt,i,5)),i.a),c),nrn(b,Met,h)),!!hMn(i)&&GCn(n.a,b,jet,jAn(n,hMn(i))),!!fMn(i)&&GCn(n.a,b,Tet,jAn(n,fMn(i))),!(0==(!i.e&&(i.e=new f_(oFt,i,10,9)),i.e).i)&&(a=new sA(n,l=new Ib),z8((!i.e&&(i.e=new f_(oFt,i,10,9)),i.e),a),nrn(b,Set,l)),0!=(!i.g&&(i.g=new f_(oFt,i,9,10)),i.g).i&&(o=new hA(n,d=new Ib),z8((!i.g&&(i.g=new f_(oFt,i,9,10)),i.g),o),nrn(b,Eet,d))}function iQn(n){var t,i,r,c,a,o,u;for(VK(),r=n.f.n,o=FW(n.r).a.nc();o.Ob();){if(c=0,(a=uG(o.Pb(),117)).b.pf((XYn(),uDt))&&(c=uM(pK(a.b.of(uDt))))<0)switch(a.b.ag().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(cV(n.u))switch(t=Wun(a.b,c),u=!uG(n.e.of(q$t),181).Hc((oUn(),nKt)),i=!1,a.b.ag().g){case 1:i=t>r.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.a<s.c.c.length;){switch(u=uG(N3(s),10),c=null,(a=uG(oIn(u,(jYn(),gMt)),171)).g){case 1:case 2:Pfn(),c=ygt;break;case 3:case 4:Pfn(),c=vgt}if(c)kfn(u,(GYn(),Npt),(Pfn(),ygt)),c==vgt?CKn(u,a,(can(),Vjt)):c==ygt&&CKn(u,a,(can(),Wjt));else if(sN(uG(oIn(u,JMt),101))&&0!=u.j.c.length){for(t=!0,f=new Ww(u.j);f.a<f.c.c.length;){if(!((h=uG(N3(f),12)).j==(KQn(),kRt)&&h.e.c.length-h.g.c.length>0||h.j==_Rt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Ww(h.g);r.a<r.c.c.length;)if(e=uG(N3(r),18),(o=uG(oIn(e.d.i,gMt),171))==(Gpn(),Omt)||o==Amt){t=!1;break}for(i=new Ww(h.e);i.a<i.c.c.length;)if(e=uG(N3(i),18),(o=uG(oIn(e.c.i,gMt),171))==(Gpn(),Cmt)||o==Imt){t=!1;break}}t&&CKn(u,a,(can(),Qjt))}}}function aQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(T=0,w=0,l=new Ww(t.e);l.a<l.c.c.length;){for(f=uG(N3(l),10),b=0,u=0,s=i?uG(oIn(f,iSt),17).a:j1n,m=r?uG(oIn(f,rSt),17).a:j1n,h=e.Math.max(s,m),k=new Ww(f.j);k.a<k.c.c.length;){if(v=uG(N3(k),12),y=f.n.b+v.n.b+v.a.b,r)for(o=new Ww(v.g);o.a<o.c.c.length;)d=(g=(a=uG(N3(o),18)).d).i,t!=n.a[d.p]&&(p=e.Math.max(uG(oIn(d,iSt),17).a,uG(oIn(d,rSt),17).a),(M=uG(oIn(a,(jYn(),uTt)),17).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<o.c.c.length;)d=(g=(a=uG(N3(o),18)).c).i,t!=n.a[d.p]&&(p=e.Math.max(uG(oIn(d,iSt),17).a,uG(oIn(d,rSt),17).a),(M=uG(oIn(a,(jYn(),uTt)),17).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 kQn(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((oUn(),rKt))?xmn(o):null)&&dT(o.a,a),iQn(o),BTn(o),HTn(o),wWn(o),NHn(o),iEn(o),dkn(o,yRt),dkn(o,KRt),IBn(o),UXn(o),e?(wpn(o),rEn(o),dkn(o,kRt),dkn(o,_Rt),u=o.B.Hc((oUn(),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.a<r.c.c.length;)t=uG(N3(r),86),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new lS,o=new Ww(n.a.a);o.a<o.c.c.length;)(a=uG(N3(o),194)).i=h,0==a.e&&s8(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=uG(0==w.b?null:(MK(0!=w.b),Lrn(w,w.a.a)),194)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=uG(b.Pb(),86),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(xdn(),YDt)||n.c==QDt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=uG(l.Pb(),86)).f.Kc();s.Ob();)u=uG(s.Pb(),86),d=hN(n.c)?n.f.yf(f,u):n.f.zf(f,u),u.d.i=e.Math.max(u.d.i,f.o+f.g.b+d-u.e.a),u.k||(u.d.i=e.Math.max(u.d.i,u.g.c-u.e.a)),--u.d.e,0==u.d.e&&aq(w,u.d)}for(i=new Ww(n.a.b);i.a<i.c.c.length;)(t=uG(N3(i),86)).g.c=t.o}function hQn(n){var t,e,i,r,c,a,o,u;switch(o=n.b,t=n.a,0===uG(oIn(n,(MEn(),cst)),435).g?f$(o,new Zw(new Un)):f$(o,new Zw(new Gn)),1===uG(oIn(n,ist),436).g?(f$(o,new Hn),f$(o,new qn),f$(o,new xn)):(f$(o,new Hn),f$(o,new _n)),uG(oIn(n,ost),257).g){case 0:u=new Qn;break;case 1:u=new Vn;break;case 2:u=new Wn;break;case 3:u=new zn;break;case 5:u=new $d(new Wn);break;case 4:u=new $d(new Vn);break;case 7:u=new sC(new $d(new Vn),new $d(new Wn));break;case 8:u=new sC(new $d(new zn),new $d(new Wn));break;default:u=new $d(new zn)}for(a=new Ww(o);a.a<a.c.c.length;){for(c=uG(N3(a),176),r=0,e=new WO(xwn(i=0),xwn(r));QUn(t,c,i,r);)e=uG(u.Ve(e,c),42),i=uG(e.a,17).a,r=uG(e.b,17).a;_Bn(t,c,i,r)}}function fQn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(e.Ug(o7n,1),OQn(),l=EPt,n.a==(mbn(),$Ct)&&(l=TPt),h=0,hZ(),t.jd(new Sm(l)),c=t.gc(),o=t.fd(t.gc()),s=!0;s&&o.Sb();)p=uG(o.Ub(),39),0==uG(oIn(p,l),17).a?--c:s=!1;if(a=new Y_(t.kd(0,c)),u=new Y_(t.kd(c,t.gc())),0==a.b)for(w=Fkn(u,0);w.b!=w.d.c;)kfn(uG(I6(w),39),KPt,xwn(h++));else for(f=a.b,k=Fkn(a,0);k.b!=k.d.c;){for(kfn(v=uG(I6(k),39),KPt,xwn(h++)),fQn(n,i=Lhn(v),e.eh(1/f|0)),Lon(i,kJ(new Sm(KPt))),b=new lS,m=Fkn(i,0);m.b!=m.d.c;)for(p=uG(I6(m),39),g=Fkn(v.d,0);g.b!=g.d.c;)(d=uG(I6(g),65)).c==p&&s8(b,d,b.c.b,b.c);for(BY(v.d),Qon(v.d,b),o=Fkn(u,u.b),r=v.d.b,s=!0;0<r&&s&&o.Sb();)p=uG(o.Ub(),39),0==uG(oIn(p,l),17).a?(kfn(p,KPt,xwn(h++)),--r,o.Qb()):s=!1}e.Vg()}function lQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;for(l=uM(pK(zDn(n,(jOn(),XIt)))),oM(gK(zDn(n,GIt)))&&(f=uG(zDn(n,(SK(),zCt)),27),a=uG(zrn(KJ(uG(zrn((!f.e&&(f.e=new f_(aFt,f,7,4)),f.e),(!f.e&&(f.e=new f_(aFt,f,7,4)),f.e).i-1),74)),0),27),r=uG(zrn(KJ(uG(zrn((!f.e&&(f.e=new f_(aFt,f,7,4)),f.e),0),74)),0),27),o=new MO(a.i+a.g/2,a.j+a.f/2),c=new MO(r.i+r.g/2,r.j+r.f/2),(i=l)<=0&&(i+=f7n),(b=e.Math.acos((o.a*c.a+o.b*c.b)/(e.Math.sqrt(o.a*o.a+o.b*o.b)*e.Math.sqrt(c.a*c.a+c.b*c.b))))<=0&&(b+=f7n),(t=e.Math.atan2(o.b,o.a))<=0&&(t+=f7n),l=F9n-(t-i+b/2)),s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)w=(h=new MO((u=uG(Zkn(s),27)).i+u.g/2,u.j+u.f/2)).a*e.Math.cos(l)-h.b*e.Math.sin(l),h.b=h.a*e.Math.sin(l)+h.b*e.Math.cos(l),h.a=w,kN(u,h.a-u.g/2,h.b-u.f/2)}function bQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Inverted port preprocessing",1),o=new N4(n.b,0),e=null,g=new Zm;o.b<o.d.gc();){for(d=e,MK(o.b<o.d.gc()),e=uG(o.d.Xb(o.c=o.b++),30),h=new Ww(g);h.a<h.c.c.length;)a2(u=uG(N3(h),10),d);for(g.c.length=0,f=new Ww(e.a);f.a<f.c.c.length;)if((u=uG(N3(f),10)).k==(zIn(),dbt)&&sN(uG(oIn(u,(jYn(),JMt)),101))){for(w=nBn(u,(can(),Vjt),(KQn(),kRt)).Kc();w.Ob();)for(l=uG(w.Pb(),12),r=0,c=(i=uG(Ekn(a=l.e,Inn(obt,t6n,18,a.c.length,0,1)),482)).length;r<c;++r)Fqn(n,l,i[r],g);for(b=nBn(u,Wjt,_Rt).Kc();b.Ob();)for(l=uG(b.Pb(),12),r=0,c=(i=uG(Ekn(a=l.g,Inn(obt,t6n,18,a.c.length,0,1)),482)).length;r<c;++r)Kqn(n,l,i[r],g)}}for(s=new Ww(g);s.a<s.c.c.length;)a2(u=uG(N3(s),10),e);t.Vg()}function wQn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v;for(l=null,r==(l0(),USt)?l=t:r==GSt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=uG(d.Pb(),12),g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[w.i.n,w.n,w.a])).b,v=new ek,u=new ek,h=new w7(w.b);l$(h.a)||l$(h.b);)if(oM(gK(oIn(s=uG(l$(h.a)?N3(h.a):N3(h.b),18),(GYn(),pmt))))==c&&-1!=Ten(a,s,0)){if(p=s.d==w?s.c:s.d,m=Gfn(Uhn(cT(PNt,1),zZn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(m-g)<.2)continue;m<g?t.a._b(p)?FV(v,new WO(USt,s)):FV(v,new WO(GSt,s)):t.a._b(p)?FV(u,new WO(USt,s)):FV(u,new WO(GSt,s))}if(v.a.gc()>1)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<u.c.c.length;)(a=uG(N3(u),10)).k==(zIn(),dbt)&&(c=uG(oIn(a,(jYn(),TMt)),140),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(o=new Ww(t.a);o.a<o.c.c.length;)if((a=uG(N3(o),10)).k!=(zIn(),dbt))switch(a.k.g){case 2:if((r=uG(oIn(a,(jYn(),gMt)),171))==(Gpn(),Imt)){a.n.a=n.c-10,Djn(a,new Ge).Jb(new sg(a));break}if(r==Amt){a.n.a=n.a+10,Djn(a,new qe).Jb(new hg(a));break}if((i=uG(oIn(a,Xpt),311))==(Zen(),ppt)){Azn(a).Jb(new fg(a)),a.n.b=n.d-10;break}if(i==dpt){Azn(a).Jb(new lg(a)),a.n.b=n.b+10;break}break;default:throw hv(new vM("The node type "+a.k+" is not supported by the "+Fwt))}}}function pQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(u=new MO(i.i+i.g/2,i.j+i.f/2),l=lzn(i),b=uG(zDn(t,(jYn(),JMt)),101),d=uG(zDn(i,eTt),64),dA(Qkn(i),QMt)||(w=0==i.i&&0==i.j?0:KCn(i,d),Myn(i,QMt,w)),kfn(r=DJn(i,b,d,l,new MO(t.g,t.f),u,new MO(i.g,i.f),uG(oIn(e,Byt),88),e),(GYn(),rmt),i),Ub(c=uG(zq(r.j,0),12),IUn(i)),kfn(r,nTt,(eNn(),ggn(gRt))),h=uG(zDn(t,nTt),181).Hc(wRt),o=new DD((!i.n&&(i.n=new fV(lFt,i,1,7)),i.n));o.e!=o.i.gc();)if(!oM(gK(zDn(a=uG(Zkn(o),135),FMt)))&&a.a&&(f=own(a),kD(c.f,f),!h))switch(s=0,cV(uG(zDn(t,nTt),21))&&(s=jNn(new MO(a.i,a.j),new MO(a.g,a.f),new MO(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}kfn(r,TTt,pK(zDn(R0(t),TTt))),kfn(r,jTt,pK(zDn(R0(t),jTt))),kfn(r,yTt,pK(zDn(R0(t),yTt))),kD(e.a,r),vJ(n.a,i,r)}function mQn(n,t,e,i,r,c){var a,o,u,s,h,f;for(zsn(s=new lOn,t),NLn(s,uG(zDn(t,(jYn(),eTt)),64)),kfn(s,(GYn(),rmt),t),o2(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,vJ(n.a,t,s),(a=o9(YJ(sin(new fX(null,(!t.e&&(t.e=new f_(aFt,t,7,4)),new h3(t.e,16))),new Wt),new zt),new Zd(t)))||(a=o9(YJ(sin(new fX(null,(!t.d&&(t.d=new f_(aFt,t,8,5)),new h3(t.d,16))),new Qt),new Vt),new ng(t))),a||(a=o9(new fX(null,(!t.e&&(t.e=new f_(aFt,t,7,4)),new h3(t.e,16))),new Jt)),kfn(s,qpt,(qx(),!!a)),Fzn(s,c,r,uG(zDn(t,WMt),8)),u=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));u.e!=u.i.gc();)!oM(gK(zDn(o=uG(Zkn(u),135),FMt)))&&o.a&&kD(s.f,own(o));switch(r.g){case 2:case 1:(s.j==(KQn(),yRt)||s.j==KRt)&&i.Fc((r_n(),cpt));break;case 4:case 3:(s.j==(KQn(),kRt)||s.j==_Rt)&&i.Fc((r_n(),cpt))}return s}function vQn(n,t,i,r,c){var a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,g=0,d=0,w=1,v=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));v.e!=v.i.gc();)w+=x5(new Fz(ix(eRn(p=uG(Zkn(v),27)).a.Kc(),new h))),j=p.g,g=e.Math.max(g,j),b=p.f,d=e.Math.max(d,b),k+=j*b;for(o=k+2*r*r*w*(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i,a=e.Math.sqrt(o),s=e.Math.max(a*i,g),u=e.Math.max(a/i,d),m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();)p=uG(Zkn(m),27),E=c.b+(uRn(t,26)*G0n+uRn(t,27)*q0n)*(s-p.g),S=c.b+(uRn(t,26)*G0n+uRn(t,27)*q0n)*(u-p.f),ycn(p,E),Mcn(p,S);for(T=s+(c.b+c.c),M=u+(c.d+c.a),y=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));y.e!=y.i.gc();)for(l=new Fz(ix(eRn(uG(Zkn(y),27)).a.Kc(),new h));hDn(l);)z$n(f=uG(N9(l),74))||fYn(f,t,T,M);ZQn(n,T+=c.b+c.c,M+=c.d+c.a,!1,!0)}function kQn(n){var t;if(this.r=tY(new Sn,new Pn),this.b=new rpn(uG(WW(YRt),296)),this.p=new rpn(uG(WW(YRt),296)),this.i=new rpn(uG(WW(mht),296)),this.e=n,this.o=new eN(n.Mf()),this.D=n.Yf()||oM(gK(n.of((XYn(),C$t)))),this.A=uG(n.of((XYn(),_$t)),21),this.B=uG(n.of(q$t),21),this.q=uG(n.of(sDt),101),this.u=uG(n.of(bDt),21),!eIn(this.u))throw hv(new jM("Invalid port label placement: "+this.u));if(this.v=oM(gK(n.of(dDt))),this.j=uG(n.of(K$t),21),!zxn(this.j))throw hv(new jM("Invalid node label placement: "+this.j));this.n=uG(Rjn(n,x$t),107),this.k=uM(pK(Rjn(n,LDt))),this.d=uM(pK(Rjn(n,ADt))),this.w=uM(pK(Rjn(n,FDt))),this.s=uM(pK(Rjn(n,NDt))),this.t=uM(pK(Rjn(n,$Dt))),this.C=uG(Rjn(n,RDt),140),this.c=2*this.d,t=!this.B.Hc((oUn(),nKt)),this.f=new tkn(0,t,0),this.g=new tkn(1,t,0),nM(this.f,(Yrn(),Est),this.g)}function yQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Comment pre-processing",1),e=0,u=new Ww(n.a);u.a<u.c.c.length;)if(oM(gK(oIn(o=uG(N3(u),10),(jYn(),gyt))))){for(++e,r=0,i=null,s=null,w=new Ww(o.j);w.a<w.c.c.length;)r+=(l=uG(N3(w),12)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=uG(zq(l.e,0),18)).c),1==l.g.c.length&&(s=(i=uG(zq(l.g,0),18)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||oM(gK(oIn(s.i,gyt)))){for(g=new Zm,b=new Ww(o.j);b.a<b.c.c.length;){for(f=new Ww((l=uG(N3(b),12)).g);f.a<f.c.c.length;)0==(h=uG(N3(f),18)).d.g.c.length||mv(g.c,h);for(a=new Ww(l.e);a.a<a.c.c.length;)0==(c=uG(N3(a),18)).c.e.c.length||mv(g.c,c)}for(d=new Ww(g);d.a<d.c.c.length;)pqn(uG(N3(d),18),!0)}else TJn(o,i,s,s.i),tW(u)}t._g()&&t.bh("Found "+e+" comment boxes"),t.Vg()}function MQn(n,t){var e,i,r,c,a,o,u;if(GG(),this.a=new U$(this),this.b=n,this.c=t,this.f=ZV(Nen((gAn(),kBt),t)),this.f.dc())if((o=cSn(kBt,n))==t)for(this.e=!0,this.d=new Zm,this.f=new us,this.f.Fc(lct),uG(JXn(Len(kBt,Hrn(n)),""),29)==n&&this.f.Fc(jz(kBt,Hrn(n))),r=LHn(kBt,n).Kc();r.Ob();)switch(i=uG(r.Pb(),179),sJ(Nen(kBt,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(ZV(Nen(kBt,i)))}else if(PP(),uG(t,69).xk())for(this.e=!0,this.f=null,this.d=new Zm,a=0,u=(null==n.i&&eqn(n),n.i).length;a<u;++a)for(null==n.i&&eqn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=_3(Nen(kBt,i));c;c=_3(Nen(kBt,c)))c==t&&this.d.Fc(i);else 1==sJ(Nen(kBt,t))&&o?(this.f=null,this.d=(m$n(),$Bt)):(this.f=null,this.e=!0,this.d=(hZ(),new Xw(t)));else this.e=5==sJ(Nen(kBt,t)),this.f.Fb(CBt)&&(this.f=CBt)}function TQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(i=0,r=fTn(n,t),b=n.s,w=n.t,h=uG(uG(Y9(n.r,t),21),87).Kc();h.Ob();)if((s=uG(h.Pb(),117)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.Mf(),u=s.b.pf((XYn(),uDt))?uM(pK(s.b.of(uDt))):0,(l=(f=s.c).i).b=(o=f.n,f.e.a+o.b+o.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+u+r,etn(f,(Ktn(),Ost)),eF(f,(Yen(),Fst));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-u-r-l.a,etn(f,(Ktn(),Ost)),eF(f,(Yen(),Rst));break;case 2:l.c=-u-r-l.b,s.a?(c=n.v?l.a:uG(zq(f.d,0),187).Mf().b,l.d=(d.b-c)/2):l.d=d.b+w,etn(f,(Ktn(),Lst)),eF(f,(Yen(),Kst));break;case 4:l.c=d.a+u+r,s.a?(c=n.v?l.a:uG(zq(f.d,0),187).Mf().b,l.d=(d.b-c)/2):l.d=d.b+w,etn(f,(Ktn(),Ast)),eF(f,(Yen(),Kst))}(t==(KQn(),yRt)||t==KRt)&&(i=e.Math.max(i,l.a))}i>0&&(uG(AJ(n.b,t),127).a.b=i)}function jQn(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<s.c.c.length;)(w=(u=uG(N3(s),72)).n).a=d.c,w.b=r,r+=u.o.b+f}}function EQn(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,j;for(v=new Zm,f=new Ww(n.b);f.a<f.c.c.length;)for(w=new Ww(uG(N3(f),30).a);w.a<w.c.c.length;)if((l=uG(N3(w),10)).k==(zIn(),lbt)&&vR(l,(GYn(),Kpt))){for(d=null,p=null,g=null,M=new Ww(l.j);M.a<M.c.c.length;)switch((y=uG(N3(M),12)).j.g){case 4:d=y;break;case 2:p=y;break;default:g=y}for(s=new tj((m=uG(zq(g.g,0),18)).a),JF(u=new eN(g.n),l.n),lW(Fkn(s,0),u),k=fln(m.a),JF(h=new eN(g.n),l.n),s8(k,h,k.c.b,k.c),T=uG(oIn(l,Kpt),10),j=uG(zq(T.j,0),12),c=0,o=(i=uG(Ekn(d.e,Inn(obt,t6n,18,0,0,1)),482)).length;c<o;++c)u2(t=i[c],j),rbn(t.a,t.a.b,s);for(r=0,a=(e=x4(p.g)).length;r<a;++r)c2(t=e[r],j),rbn(t.a,0,k);c2(m,null),u2(m,null),mv(v.c,l)}for(b=new Ww(v);b.a<b.c.c.length;)a2(l=uG(N3(b),10),null)}function SQn(){ML(DBt,new Xh),ML(lHt,new rf),ML(bHt,new df),ML(wHt,new Sf),ML($ot,new Of),ML(cT(tUt,1),new Af),ML(cot,new Lf),ML(uot,new Nf),ML($ot,new Dh),ML($ot,new xh),ML($ot,new Rh),ML(fot,new Kh),ML($ot,new Fh),ML(yat,new _h),ML(yat,new Bh),ML($ot,new Hh),ML(lot,new Gh),ML($ot,new qh),ML($ot,new zh),ML($ot,new Vh),ML($ot,new Wh),ML($ot,new Qh),ML(cT(tUt,1),new Jh),ML($ot,new Yh),ML($ot,new Zh),ML(yat,new nf),ML(yat,new tf),ML($ot,new ef),ML(dot,new cf),ML($ot,new af),ML(yot,new of),ML($ot,new uf),ML($ot,new sf),ML($ot,new hf),ML($ot,new ff),ML(yat,new lf),ML(yat,new bf),ML($ot,new wf),ML($ot,new gf),ML($ot,new pf),ML($ot,new mf),ML($ot,new vf),ML($ot,new kf),ML(Tot,new yf),ML($ot,new Mf),ML($ot,new Tf),ML($ot,new jf),ML(Tot,new Ef),ML(yot,new Pf),ML($ot,new Cf),ML(dot,new If)}function PQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;switch(h=new Uk,n.a.g){case 3:l=uG(oIn(t.e,(GYn(),Tmt)),15),b=uG(oIn(t.j,Tmt),15),w=uG(oIn(t.f,Tmt),15),e=uG(oIn(t.e,ymt),15),i=uG(oIn(t.j,ymt),15),r=uG(oIn(t.f,ymt),15),Ohn(a=new Zm,l),b.Jc(new gc),Ohn(a,Spn(b)),Ohn(a,w),Ohn(c=new Zm,e),Ohn(c,Spn(i)),Ohn(c,r),kfn(t.f,Tmt,a),kfn(t.f,ymt,c),kfn(t.f,jmt,t.f),kfn(t.e,Tmt,null),kfn(t.e,ymt,null),kfn(t.j,Tmt,null),kfn(t.j,ymt,null);break;case 1:Qon(h,t.e.a),aq(h,t.i.n),Qon(h,Spn(t.j.a)),aq(h,t.a.n),Qon(h,t.f.a);break;default:Qon(h,t.e.a),Qon(h,Spn(t.j.a)),Qon(h,t.f.a)}BY(t.f.a),Qon(t.f.a,h),c2(t.f,t.e.c),o=uG(oIn(t.e,(jYn(),bMt)),75),s=uG(oIn(t.j,bMt),75),u=uG(oIn(t.f,bMt),75),(o||s||u)&&(uW(f=new Uk,u),uW(f,s),uW(f,o),kfn(t.f,bMt,f)),c2(t.j,null),u2(t.j,null),c2(t.e,null),u2(t.e,null),a2(t.a,null),a2(t.i,null),t.g&&PQn(n,t.g)}function CQn(){var n,t,e;for(CQn=E,new Edn(1,0),new Edn(10,0),new Edn(0,0),Sot=Inn(Bot,zZn,247,11,0,1),Pot=Inn(JHt,N1n,28,100,15,1),Cot=Uhn(cT(eUt,1),I0n,28,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),Iot=Inn(YHt,W1n,28,Cot.length,15,1),Oot=Uhn(cT(eUt,1),I0n,28,15,[1,10,100,$1n,1e4,O0n,1e6,1e7,1e8,g0n,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Aot=Inn(YHt,W1n,28,Oot.length,15,1),Lot=Inn(Bot,zZn,247,11,0,1),n=0;n<Lot.length;n++)Sot[n]=new Edn(n,0),Lot[n]=new Edn(0,n),Pot[n]=48;for(;n<Pot.length;n++)Pot[n]=48;for(e=0;e<Iot.length;e++)Iot[e]=VLn(Cot[e]);for(t=0;t<Aot.length;t++)Aot[t]=VLn(Oot[t]);b_n()}function IQn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},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(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=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<l;u++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<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=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<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=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<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),(oUn(),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.a<s.c.c.length;)for(F$(oIn(o=uG(N3(s),10),rmt),207)?UQn(o,f):F$(oIn(o,rmt),193)&&!w&&kN(i=uG(oIn(o,rmt),123),(g=SGn(t,o,i.g,i.f)).a,g.b),d=new Ww(o.j);d.a<d.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(d),12).g,16)),new tg(o)),new eg(e));if(w)for(d=new Ww(w.j);d.a<d.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(d),12).g,16)),new ig(w)),new rg(e));for(p=uG(zDn(b,Vyt),223),a=new Ww(e);a.a<a.c.c.length;)DWn(uG(N3(a),18),p,f);for(SUn(t),u=new Ww(t.a);u.a<u.c.c.length;)(h=(o=uG(N3(u),10)).e)&&NQn(n,h)}}function $Qn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(!uG(uG(Y9(n.r,t),21),87).dc()){if(s=(o=uG(AJ(n.b,t),127)).i,u=o.n,f=M_n(n,t),r=s.b-u.b-u.c,c=o.a.a,a=s.c+u.b,w=n.w,f!=(Vkn(),Zxt)&&f!=tRt||1!=uG(uG(Y9(n.r,t),21),87).gc()||(c=f==Zxt?c-2*n.w:c,f=Yxt),r<c&&!n.B.Hc((oUn(),aKt)))f==Zxt?a+=w+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1):w+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1);else switch(r<c&&(c=f==Zxt?c-2*n.w:c,f=Yxt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1),w+=e.Math.max(0,i)}for(b=uG(uG(Y9(n.r,t),21),87).Kc();b.Ob();)(l=uG(b.Pb(),117)).e.a=a+l.d.b,l.e.b=(h=l.b).pf((XYn(),uDt))?h.ag()==(KQn(),yRt)?-h.Mf().b-uM(pK(h.of(uDt))):uM(pK(h.of(uDt))):h.ag()==(KQn(),yRt)?-h.Mf().b:0,a+=l.d.b+l.b.Mf().a+l.d.c+w}}function DQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(!uG(uG(Y9(n.r,t),21),87).dc()){if(s=(o=uG(AJ(n.b,t),127)).i,u=o.n,l=M_n(n,t),r=s.a-u.d-u.a,c=o.a.b,a=s.d+u.d,d=n.w,h=n.o.a,l!=(Vkn(),Zxt)&&l!=tRt||1!=uG(uG(Y9(n.r,t),21),87).gc()||(c=l==Zxt?c-2*n.w:c,l=Yxt),r<c&&!n.B.Hc((oUn(),aKt)))l==Zxt?a+=d+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1):d+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1);else switch(r<c&&(c=l==Zxt?c-2*n.w:c,l=Yxt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1),d+=e.Math.max(0,i)}for(w=uG(uG(Y9(n.r,t),21),87).Kc();w.Ob();)(b=uG(w.Pb(),117)).e.a=(f=b.b).pf((XYn(),uDt))?f.ag()==(KQn(),_Rt)?-f.Mf().a-uM(pK(f.of(uDt))):h+uM(pK(f.of(uDt))):f.ag()==(KQn(),_Rt)?-f.Mf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.Mf().b+b.d.a+d}}function xQn(n,t){var e,i,r,c,a;for(t.Ug("Processor determine the coords for each level",1),i=new Zm,a=Fkn(n.b,0);a.b!=a.d.c;){for(r=uG(I6(a),39);uG(oIn(r,(QGn(),ACt)),17).a>i.c.length-1;)kD(i,new WO(B3n,G9n));e=uG(oIn(r,ACt),17).a,hN(uG(oIn(n,cCt),88))?(r.e.a<uM(pK((u3(e,i.c.length),uG(i.c[e],42)).a))&&uw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a),r.e.a+r.f.a>uM(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.b<uM(pK((u3(e,i.c.length),uG(i.c[e],42)).a))&&uw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b),r.e.b+r.f.b>uM(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),39),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.a<o.c.c.length;){for((c=uG(N3(o),30)).p=u,b=new Ww(c.a);b.a<b.c.c.length;)(l=uG(N3(b),10)).p=w,++w;--u}for(n.g=Inn(YHt,W1n,28,w,15,1),n.d=Jq(YHt,[zZn,W1n],[53,28],15,[w,3],2),n.p=new Zm,n.q=new Zm,t=0,n.e=0,a=new Ww(n.i.b);a.a<a.c.c.length;){for(u=(c=uG(N3(a),30)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Ww(c.a);b.a<b.c.c.length;)w=(l=uG(N3(b),10)).p,n.g[w]=l.c.p,f+=l.o.b+n.o,i=x5(new Fz(ix(qgn(l).a.Kc(),new h))),g=x5(new Fz(ix(Xgn(l).a.Kc(),new h))),n.d[w][0]=g-i,n.d[w][1]=i,n.d[w][2]=g,r+=i,p+=g,i>0&&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.a<s.c.c.length;)for(g=-1,l=0,b=(f=D4((u=uG(N3(s),30)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(zIn(),dbt)&&sN(uG(oIn(h,(jYn(),JMt)),101))){for(L_(uG(oIn(h,(jYn(),JMt)),101))||NKn(h),kfn(h,(GYn(),zpt),h),w.c.length=0,k.c.length=0,e=new Zm,Fon(m=new lS,yOn(h,(KQn(),yRt))),zJn(n,m,w,k,e),o=g,y=h,c=new Ww(w);c.a<c.c.c.length;)$jn(i=uG(N3(c),10),o,u),++g,kfn(i,zpt,h),a=uG(zq(i.j,0),12),d=uG(oIn(a,rmt),12),oM(gK(oIn(d,wyt)))||uG(oIn(i,Vpt),15).Fc(y);for(BY(m),p=yOn(h,KRt).Kc();p.Ob();)s8(m,uG(p.Pb(),12),m.a,m.a.a);for(zJn(n,m,k,null,e),v=h,r=new Ww(k);r.a<r.c.c.length;)$jn(i=uG(N3(r),10),++g,u),kfn(i,zpt,h),a=uG(zq(i.j,0),12),d=uG(oIn(a,rmt),12),oM(gK(oIn(d,wyt)))||uG(oIn(v,Vpt),15).Fc(i);0==e.c.length||kfn(h,jpt,e)}t.Vg()}function _Qn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(0!=t.b){for(l=new lS,a=null,b=null,i=t0(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),o=0,m=Fkn(t,0);m.b!=m.d.c;)for(g=uG(I6(m),39),xA(b)!==xA(oIn(g,(OQn(),OPt)))&&(b=mK(oIn(g,OPt)),o=0),a=null!=b?b+W3(o++,i):W3(o++,i),kfn(g,OPt,a),d=new Tp(Fkn(new Mp(g).a.d,0));Jj(d.a);)s8(l,w=uG(I6(d.a),65).c,l.c.b,l.c),kfn(w,OPt,a);for(f=new Ym,c=0;c<a.length-i;c++)for(p=Fkn(t,0);p.b!=p.d.c;)r2(f,u=r1(mK(oIn(g=uG(I6(p),39),(OQn(),OPt))),0,c+1),xwn(null!=(null==u?DA(FX(f.f,null)):_P(f.i,u))?uG(null==u?DA(FX(f.f,null)):_P(f.i,u),17).a+1:1));for(h=new bsn(new Nw(f).a);h.b;)s=von(h),r=xwn(null!=cQ(n.a,s.ld())?uG(cQ(n.a,s.ld()),17).a:0),r2(n.a,mK(s.ld()),xwn(uG(s.md(),17).a+r.a)),(!(r=uG(cQ(n.b,s.ld()),17))||r.a<uG(s.md(),17).a)&&r2(n.b,mK(s.ld()),uG(s.md(),17));_Qn(n,l)}}function BQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(e=null,o=null,(r=uG(oIn(n.b,(jYn(),Yyt)),349))==(Sln(),cEt)&&(e=new Zm,o=new Zm),a=new Ww(n.d);a.a<a.c.c.length;)if((c=uG(N3(a),105)).i)switch(c.e.g){case 0:t=uG(X5(new fS(c.b)),64),r==cEt&&t==(KQn(),yRt)?mv(e.c,c):r==cEt&&t==(KQn(),KRt)?mv(o.c,c):yTn(c,t);break;case 1:u=c.a.d.j,s=c.c.d.j,u==(KQn(),yRt)?hV(c,yRt,(qhn(),udt),c.a):s==yRt?hV(c,yRt,(qhn(),sdt),c.c):u==KRt?hV(c,KRt,(qhn(),sdt),c.a):s==KRt&&hV(c,KRt,(qhn(),udt),c.c);break;case 2:case 3:$x(i=c.b,(KQn(),yRt))?$x(i,KRt)?$x(i,_Rt)?$x(i,kRt)||hV(c,yRt,(qhn(),sdt),c.c):hV(c,yRt,(qhn(),udt),c.a):hV(c,yRt,(qhn(),odt),null):hV(c,KRt,(qhn(),odt),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(KQn(),yRt)||f==yRt?hV(c,KRt,(qhn(),odt),null):hV(c,yRt,(qhn(),odt),null)}e&&(0==e.c.length||fqn(e,(KQn(),yRt)),0==o.c.length||fqn(o,(KQn(),KRt)))}function HQn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(e.Ug("Breadth first model order layering",1),n.a=t,p=new Zm,g=new Ww(n.a.a);g.a<g.c.c.length;)(w=uG(N3(g),10)).k==(zIn(),dbt)&&mv(p.c,w);for(hZ(),f$(p,new jc),u=!0,r=new bQ(n.a),i=null,kD(n.a.b,r),d=new Ww(p);d.a<d.c.c.length;)if(w=uG(N3(d),10),u)a2(w,r),u=!1;else{for(o=new Fz(ix(qgn(w).a.Kc(),new h));hDn(o);)((c=uG(N9(o),18)).c.i.k==(zIn(),dbt)&&c.c.i.c==r||c.c.i.k==bbt&&uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.c==r)&&(i=new bQ(n.a),kD(n.a.b,i),r=new bQ(n.a),kD(n.a.b,r));for(a=new Fz(ix(qgn(w).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.k==(zIn(),bbt)&&!c.c.i.c&&a2(c.c.i,i);a2(w,r)}for(n.a.a.c.length=0,m=new Zm,l=new Ww(n.a.b);l.a<l.c.c.length;)0==(s=uG(N3(l),30)).a.c.length&&mv(m.c,s);for(dgn(n.a.b,m),b=0,f=new Ww(n.a.b);f.a<f.c.c.length;)(s=uG(N3(f),30)).p=b,++b;e.Vg()}function UQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;for(i=uG(oIn(n,(GYn(),rmt)),27),b=uG(oIn(n,(jYn(),xyt)),17).a,c=uG(oIn(n,pMt),17).a,Myn(i,xyt,xwn(b)),Myn(i,pMt,xwn(c)),ycn(i,n.n.a+t.a),Mcn(i,n.n.b+t.b),(0!=uG(zDn(i,DMt),181).gc()||n.e||xA(oIn(HQ(n),$Mt))===xA((pyn(),Mjt))&&lN((Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))))&&(kcn(i,n.o.a),vcn(i,n.o.b)),f=new Ww(n.j);f.a<f.c.c.length;)F$(w=oIn(s=uG(N3(f),12),rmt),193)&&(kN(r=uG(w,123),s.n.a,s.n.b),Myn(r,eTt,s.j));for(l=0!=uG(oIn(n,PMt),181).gc(),u=new Ww(n.b);u.a<u.c.c.length;)a=uG(N3(u),72),(l||0!=uG(oIn(a,PMt),181).gc())&&(vN(e=uG(oIn(a,rmt),135),a.o.a,a.o.b),kN(e,a.n.a,a.n.b));if(!cV(uG(oIn(n,nTt),21)))for(h=new Ww(n.j);h.a<h.c.c.length;)for(o=new Ww((s=uG(N3(h),12)).f);o.a<o.c.c.length;)a=uG(N3(o),72),kcn(e=uG(oIn(a,rmt),135),a.o.a),vcn(e,a.o.b),kN(e,a.n.a,a.n.b)}function GQn(n,t){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(t.Ug("Calculate Graph Size",1),t.dh(n,l7n),l=B3n,b=B3n,h=b7n,f=b7n,g=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));g.e!=g.i.gc();)v=(w=uG(Zkn(g),27)).i,k=w.j,S=w.g,u=w.f,s=uG(zDn(w,(XYn(),$$t)),140),l=e.Math.min(l,v-s.b),b=e.Math.min(b,k-s.d),h=e.Math.max(h,v+S+s.c),f=e.Math.max(f,k+u+s.a);for(p=new MO(l-(m=uG(zDn(n,(XYn(),W$t)),107)).b,b-m.d),E=h-l+(m.b+m.c),o=f-b+(m.d+m.a),oM(gK(zDn(n,(jOn(),OIt))))&&(y=uG(zDn(n,(SK(),zCt)),27),M=uG(zDn(y,$$t),140),T=y.i+y.g/2+(M.b+M.c)/2-p.a,a=o-(j=y.j+y.f/2+(M.d+M.a)/2-p.b),(c=E-T)<E/2?(E+=i=c-T,p.a-=i):E+=i=T-c,a<o/2?(o+=r=a-j,p.b-=r):o+=r=j-a),d=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));d.e!=d.i.gc();)ycn(w=uG(Zkn(d),27),w.i-p.a),Mcn(w,w.j-p.b);oM(gK(zDn(n,H$t)))||(kcn(n,E),vcn(n,o)),Myn(n,h$t,E-(m.b+m.c)),Myn(n,s$t,o-(m.d+m.a)),t.dh(n,w7n)}function qQn(n,t,e){var i,r,c,a,o,u,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c.length=0,n.i.c.length=0,n.g.a.$b(),t)for(a=new Ww(t.a);a.a<a.c.c.length;)for(h=yOn(c=uG(N3(a),10),(KQn(),kRt)).Kc();h.Ob();)for(s=uG(h.Pb(),12),FV(n.e,s),r=new Ww(s.g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))||(kD(n.c,i),Ukn(n,i),((o=i.c.i.k)==(zIn(),dbt)||o==gbt||o==lbt||o==fbt)&&kD(n.j,i),(f=(l=i.d).i.c)==e?FV(n.f,l):f==t?FV(n.e,l):men(n.c,i));if(e)for(a=new Ww(e.a);a.a<a.c.c.length;){for(u=new Ww((c=uG(N3(a),10)).j);u.a<u.c.c.length;)for(r=new Ww(uG(N3(u),12).g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))&&FV(n.g,i);for(h=yOn(c,(KQn(),_Rt)).Kc();h.Ob();)for(s=uG(h.Pb(),12),FV(n.f,s),r=new Ww(s.g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))||(kD(n.c,i),Ukn(n,i),((o=i.c.i.k)==(zIn(),dbt)||o==gbt||o==lbt||o==fbt)&&kD(n.j,i),(f=(l=i.d).i.c)==e?FV(n.f,l):f==t?FV(n.e,l):men(n.c,i))}}function XQn(n,t,i){var r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;for(i.Ug("Polyline edge routing",1),m=uM(pK(oIn(t,(jYn(),Qyt)))),d=uM(pK(oIn(t,STt))),c=uM(pK(oIn(t,gTt))),r=e.Math.min(1,c/d),y=0,s=0,0!=t.b.c.length&&(y=.4*r*(M=Yxn(uG(zq(t.b,0),30)))),u=new N4(t.b,0);u.b<u.d.gc();){for(MK(u.b<u.d.gc()),(a=UA(o=uG(u.d.Xb(u.c=u.b++),30),LSt))&&y>0&&(y-=d),Vzn(o,y),l=0,w=new Ww(o.a);w.a<w.c.c.length;){for(f=0,p=new Fz(ix(Xgn(b=uG(N3(w),10)).a.Kc(),new h));hDn(p);)v=n3((g=uG(N9(p),18)).c).b,k=n3(g.d).b,o!=g.d.i.c||v9(g)||(_Nn(g,y,.4*r*e.Math.abs(v-k)),g.c.j==(KQn(),_Rt)&&(v=0,k=0)),f=e.Math.max(f,e.Math.abs(k-v));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:aVn(n,b,y,m)}l=e.Math.max(l,f)}u.b<u.d.gc()&&(M=Yxn((MK(u.b<u.d.gc()),uG(u.d.Xb(u.c=u.b++),30))),l=e.Math.max(l,M),MK(u.b>0),u.a.Xb(u.c=--u.b)),s=.4*r*l,!a&&u.b<u.d.gc()&&(s+=d),y+=o.c.a+s}n.a.a.$b(),t.f.a=y,i.Vg()}function zQn(n){var t,e,i,r,c;switch(ZZ(n,Uet),(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i+(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i){case 0:throw hv(new vM("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i?R0(lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))):R0(lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)))}if(1==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i){if(r=lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),c=lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),R0(r)==R0(c))return R0(r);if(r==R0(c))return r;if(c==R0(r))return c}for(t=lCn(uG(N9(i=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])))),84));hDn(i);)if((e=lCn(uG(N9(i),84)))!=t&&!Ern(e,t))if(R0(e)==R0(t))t=R0(e);else if(!(t=xxn(t,e)))return null;return t}function VQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if((f=t.length)>0&&(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=vUn((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=vUn((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.a<i.c.c.length;)if(u=z4(t=uG(N3(i),60)))VAn(s.f,u,t);else if(m=Q6(t))for(r=new Ww(m.k);r.a<r.c.c.length;)UNn(o,uG(N3(r),18),t);for(e=new Ww(n.a.a.b);e.a<e.c.c.length;)if(u=z4(t=uG(N3(e),60)))for(a=new Fz(ix(Xgn(u).a.Kc(),new h));hDn(a);)if(!v9(c=uG(N9(a),18))&&(w=c.c,p=c.d,!(KQn(),LRt).Hc(c.c.j)||!LRt.Hc(c.d.j))){if(d=uG(cQ(s,c.d.i),60),RKn(xS(DS(RS($S(new uk,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==_Rt&&Yz((Lun(),w)))for(l=uG(Y9(o,c),21).Kc();l.Ob();)if((f=uG(l.Pb(),60)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}if(p.j==kRt&&Zz((Lun(),p)))for(l=uG(Y9(o,c),21).Kc();l.Ob();)if((f=uG(l.Pb(),60)).d.c>t.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.c<M?d.c=M:d.c+d.b>T&&(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 TQn(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;r<c;r++)if(-1==Cvn((s3(r,n.length),n.charCodeAt(r))))throw hv(new ZM(y0n+s+'"'));for(f=0,a=pot[10],h=mot[10],o=Men(kot[10]),e=!0,(i=c%a)>0&&(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(ZXn(),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;r<a;r++)if(s3(r,n.length),37==n.charCodeAt(r)&&n.length>r+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<o;++c)jQ(u,t[c]&D1n);o=0,u.a+=String.fromCharCode(e)}else{for(c=0;c<o;++c)jQ(u,t[c]&D1n);o=0,jQ(u,(s3(r,n.length),n.charCodeAt(r)))}return u.a}function iJn(n){var t,i,r,c,a,o,u,s,h,f,l;if(f=R0(lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)))==R0(lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))),o=new sj,(t=uG(zDn(n,(Iln(),Mxt)),75))&&t.b>=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(a<n.length&&(s3(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return bCn(n,a,t,r);default:return!1}}function cJn(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=t.c.length,c=new WHn(n.a,i,null,null),T=Inn(eUt,I0n,28,m,15,1),w=Inn(eUt,I0n,28,m,15,1),b=Inn(eUt,I0n,28,m,15,1),d=0,u=0;u<m;u++)w[u]=vZn,b[u]=j1n;for(s=0;s<m;s++)for(u3(s,t.c.length),r=uG(t.c[s],185),T[s]=uxn(r),T[d]>T[s]&&(d=s),f=new Ww(n.a.b);f.a<f.c.c.length;)for(p=new Ww(uG(N3(f),30).a);p.a<p.c.c.length;)g=uG(N3(p),10),y=uM(r.p[g.p])+uM(r.d[g.p]),w[s]=e.Math.min(w[s],y),b[s]=e.Math.max(b[s],y+g.o.b);for(M=Inn(eUt,I0n,28,m,15,1),h=0;h<m;h++)(u3(h,t.c.length),uG(t.c[h],185)).o==(w0(),wSt)?M[h]=w[d]-w[h]:M[h]=b[d]-b[h];for(a=Inn(eUt,I0n,28,m,15,1),l=new Ww(n.a.b);l.a<l.c.c.length;)for(k=new Ww(uG(N3(l),30).a);k.a<k.c.c.length;){for(v=uG(N3(k),10),o=0;o<m;o++)a[o]=uM((u3(o,t.c.length),uG(t.c[o],185)).p[v.p])+uM((u3(o,t.c.length),uG(t.c[o],185)).d[v.p])+M[o];vv(a,qrn(P.prototype.Me,P,[])),c.p[v.p]=(a[1]+a[2])/2,c.d[v.p]=0}return c}function aJn(n,t,e){var i,r,c,a,o;switch(i=t.i,c=n.i.o,r=n.i.d,o=n.n,a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o,n.a])),n.j.g){case 1:eF(t,(Yen(),Rst)),i.d=-r.d-e-i.a,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(etn(t,(Ktn(),Lst)),i.c=a.a-uM(pK(oIn(n,emt)))-e-i.b):(etn(t,(Ktn(),Ast)),i.c=a.a+uM(pK(oIn(n,emt)))+e);break;case 2:etn(t,(Ktn(),Ast)),i.c=c.a+r.c+e,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(eF(t,(Yen(),Rst)),i.d=a.b-uM(pK(oIn(n,emt)))-e-i.a):(eF(t,(Yen(),Fst)),i.d=a.b+uM(pK(oIn(n,emt)))+e);break;case 3:eF(t,(Yen(),Fst)),i.d=c.b+r.a+e,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(etn(t,(Ktn(),Lst)),i.c=a.a-uM(pK(oIn(n,emt)))-e-i.b):(etn(t,(Ktn(),Ast)),i.c=a.a+uM(pK(oIn(n,emt)))+e);break;case 4:etn(t,(Ktn(),Lst)),i.c=-r.b-e-i.b,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),290)==(Ajn(),$xt)?(eF(t,(Yen(),Rst)),i.d=a.b-uM(pK(oIn(n,emt)))-e-i.a):(eF(t,(Yen(),Fst)),i.d=a.b+uM(pK(oIn(n,emt)))+e)}}function oJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;for(i.Ug($7n,1),!t.a&&(t.a=new fV(bFt,t,10,11)),r=uM(pK(zDn(t,(S_n(),VOt)))),f=uM(pK(zDn(t,bAt))),b=uG(zDn(t,hAt),107),a=kYn(w=new vO(r,f),t,b),Irn(t,w),u=uG(zDn(t,oAt),17).a;u>1;){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))<g?Myn(c,(lBn(),POt),uM(pK(zDn(t,POt)))+uM(pK(zDn(t,jOt)))):(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>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<b.c.c.length;){for(u=(s=(f=uG(N3(b),10)).n.a)+f.o.a,u=e.Math.max(s+1,u),v=new N4(i,0),r=null;v.b<v.d.gc();){if(MK(v.b<v.d.gc()),(p=uG(v.d.Xb(v.c=v.b++),578)).c>=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.a<m.c.c.length;)for(p=uG(N3(m),578),(c=new bQ(n)).p=h++,mv(o.c,c),w=new Ww(p.b);w.a<w.c.c.length;)a2(f=uG(N3(w),10),c),f.p=0;for(l=new Ww(n.a);l.a<l.c.c.length;)if(0==(f=uG(N3(l),10)).p)for(g=sBn(f,n);0!=g.a.gc();)d=uG(g.a.ec().Kc().Pb(),10),g.a.Bc(d),Qon(g,sBn(d,n));for(a=new N4(o,0);a.b<a.d.gc();)0==(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)).a.c.length&&LQ(a);n.a.c.length=0,t.Vg()}function sJn(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;for(w=0,S=0,s=new Ww(n);s.a<s.c.c.length;)IWn(u=uG(N3(s),27)),w=e.Math.max(w,u.g),S+=u.g*u.f;for(E=Ojn(n,S/n.c.length),S+=n.c.length*E,w=e.Math.max(w,e.Math.sqrt(S*o))+i.b,I=i.b,O=i.d,b=0,f=i.b+i.c,aq(j=new lS,xwn(0)),M=new lS,h=new N4(n,0);h.b<h.d.gc();)MK(h.b<h.d.gc()),C=(u=uG(h.d.Xb(h.c=h.b++),27)).g,l=u.f,I+C>w&&(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)<c&&(b+=c-P,P=c),a)for(I=i.b,h=new N4(n,0),cL(j,xwn(n.c.length)),p=uG(I6(T=Fkn(j,0)),17).a,cL(M,b),y=Fkn(M,0),k=0;h.b<h.d.gc();)h.b==p&&(I=i.b,k=uM(pK(I6(y))),p=uG(I6(T),17).a),MK(h.b<h.d.gc()),m=(u=uG(h.d.Xb(h.c=h.b++),27)).f,vcn(u,k),d=k,h.b==p&&(g=f-I-i.c,v=u.g,kcn(u,g),tLn(u,new MO(g,d),new MO(v,m))),I+=u.g+t;return new MO(f,P)}function hJn(n,t){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(t.Ug("Compound graph postprocessor",1),i=oM(gK(oIn(n,(jYn(),xTt)))),u=uG(oIn(n,(GYn(),Apt)),229),f=new ek,m=u.ec().Kc();m.Ob();){for(p=uG(m.Pb(),18),o=new Z_(u.cc(p)),hZ(),f$(o,new Gd(n)),M=vun((u3(0,o.c.length),uG(o.c[0],249))),j=kun(uG(zq(o,o.c.length-1),249)),k=M.i,v=jsn(j.i,k)?k.e:HQ(k),l=iyn(p,o),BY(p.a),b=null,a=new Ww(o);a.a<a.c.c.length;)c=uG(N3(a),249),pAn(g=new sj,c.a,v),w=c.b,rbn(r=new Uk,0,w.a),Xun(r,g),y=new eN(n3(w.c)),T=new eN(n3(w.d)),JF(y,g),JF(T,g),b&&(0==r.b?d=T:(MK(0!=r.b),d=uG(r.a.a.c,8)),E=e.Math.abs(b.a-d.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,39),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(),39)),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(),39))===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.a<w.c.c.length;)b=uG(N3(w),153),d+=uG(oIn(b,(cGn(),$ft)),17).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);kfn(i,(cGn(),$ft),xwn(d)),kfn(i,(mon(),Vft),new MO(f,l)),kfn(i,zft,new MO(s,h))}for(hZ(),n.jd(new bt),zsn(g=new d7,uG(n.Xb(0),96)),u=0,v=0,a=n.Kc();a.Ob();)i=uG(a.Pb(),235),p=YF(D$(uG(oIn(i,(mon(),zft)),8)),uG(oIn(i,Vft),8)),u=e.Math.max(u,p.a),v+=p.a*p.b;for(u=e.Math.max(u,e.Math.sqrt(v)*uM(pK(oIn(g,(cGn(),kft))))),k=0,y=0,o=0,t=m=uM(pK(oIn(g,_ft))),r=n.Kc();r.Ob();)i=uG(r.Pb(),235),k+(p=YF(D$(uG(oIn(i,(mon(),zft)),8)),uG(oIn(i,Vft),8))).a>u&&(k=0,y+=o+m,o=0),eUn(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<d-1;b++){if(!(mE(a=c[h++])&&mE(o=c[h++])&&mE(u=c[h++])&&mE(s=c[h++])))return null;t=dHt[a],e=dHt[o],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}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?0!=(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?0!=(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<i.c.c.length;)for(a=0,o=(c=D4(uG(N3(i),30).a)).length;a<o;++a)if((r=c[a]).k==(zIn(),gbt)){if(l==(_gn(),hxt))for(s=new Ww(r.j);s.a<s.c.c.length;)0==(u=uG(N3(s),12)).e.c.length||ekn(u),0==u.g.c.length||ikn(u);else if(F$(oIn(r,(GYn(),rmt)),18))w=uG(oIn(r,rmt),18),d=uG(yOn(r,(KQn(),_Rt)).Kc().Pb(),12),g=uG(yOn(r,kRt).Kc().Pb(),12),p=uG(oIn(d,rmt),12),c2(w,m=uG(oIn(g,rmt),12)),u2(w,p),(v=new eN(g.i.n)).a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[m.i.n,m.n,m.a])).a,aq(w.a,v),(v=new eN(d.i.n)).a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[p.i.n,p.n,p.a])).a,aq(w.a,v);else{if(r.j.c.length>=2){for(b=!0,e=uG(N3(h=new Ww(r.j)),12),f=null;h.a<h.c.c.length;)if(f=e,e=uG(N3(h),12),!udn(oIn(f,rmt),oIn(e,rmt))){b=!1;break}}else b=!1;for(s=new Ww(r.j);s.a<s.c.c.length;)0==(u=uG(N3(s),12)).e.c.length||YKn(u,b),0==u.g.c.length||ZKn(u,b)}a2(r,null)}t.Vg()}function dJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(o=new Ww(n.a.b);o.a<o.c.c.length;)for(v=new Ww(uG(N3(o),30).a);v.a<v.c.c.length;)m=uG(N3(v),10),t.g[m.p]=m,t.a[m.p]=m,t.d[m.p]=0;for(u=n.a.b,t.c==(b0(),hSt)&&(u=Spn(u)),a=u.Kc();a.Ob();)for(b=-1,l=uG(a.Pb(),30).a,t.o==(w0(),dSt)&&(b=vZn,l=Spn(l)),y=l.Kc();y.Ob();)if(k=uG(y.Pb(),10),f=null,(f=t.c==hSt?uG(zq(n.b.f,k.p),15):uG(zq(n.b.b,k.p),15)).gc()>0)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)&&b<n.b.e[g.p]&&(t.a[g.p]=k,t.g[k.p]=t.g[g.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[g.p]))}function gJn(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;return k=n.c[(u3(0,t.c.length),uG(t.c[0],18)).p],j=n.c[(u3(1,t.c.length),uG(t.c[1],18)).p],!(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||!F$(m=k.b.e.f,10)||(p=uG(m,10),M=n.i[p.p],T=p.c?Ten(p.c.a,p,0):-1,a=M0n,T>0&&(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,T<p.c.a.c.length-1&&(s=uG(zq(p.c.a,T+1),10),f=n.i[s.p],E=e.Math.ceil(y$(n.n,s,p)),h=f.a.e-s.d.d-(M.a.e+p.o.b+p.d.a)-E),!(i&&(YN(),oan(I9n),e.Math.abs(a-h)<=I9n||a==h||isNaN(a)&&isNaN(h)))&&(r=yW(k.a),u=-yW(k.b),l=-yW(j.a),v=yW(j.b),g=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,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.a<j.b.e.e+j.a.a,b=k.a.e.e+k.b.a>j.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.a<o.c.c.length;)a=uG(N3(o),187),c.c=a.Lf().a+t.Lf().a,c.d=a.Lf().b+t.Lf().b,c.b=a.Mf().a,c.a=a.Mf().b,bAn(r,c);for(h=new Ww(t.Xf());h.a<h.c.c.length;){if(f=(s=uG(N3(h),852)).Lf().a+t.Lf().a,l=s.Lf().b+t.Lf().b,n.e&&(c.c=f,c.d=l,c.b=s.Mf().a,c.a=s.Mf().b,bAn(r,c)),n.d)for(o=new Ww(s.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),c.c=a.Lf().a+f,c.d=a.Lf().b+l,c.b=a.Mf().a,c.a=a.Mf().b,bAn(r,c);if(n.b){if(b=new MO(-i,-i),uG(t.of((XYn(),bDt)),181).Hc((eNn(),gRt)))for(o=new Ww(s.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),b.a+=a.Mf().a+i,b.b+=a.Mf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),eGn(r,s.Wf(),s.Uf(),t,s,b,i)}}n.b&&eGn(r,t.Wf(),t.Uf(),t,null,null,i),(u=new zU(t.Vf())).d=e.Math.max(0,t.Lf().b-r.d),u.a=e.Math.max(0,r.d+r.a-(t.Lf().b+t.Mf().b)),u.b=e.Math.max(0,t.Lf().a-r.c),u.c=e.Math.max(0,r.c+r.b-(t.Lf().a+t.Mf().a)),t.Zf(u)}function mJn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function vJn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,c4n),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new mt),c4n),WX((rDn(),MFt),Uhn(cT(PFt,1),p1n,245,0,[kFt]))))),U4(n,c4n,a4n,xwn(1)),U4(n,c4n,o4n,80),U4(n,c4n,u4n,5),U4(n,c4n,R3n,r4n),U4(n,c4n,s4n,xwn(1)),U4(n,c4n,h4n,(qx(),!0)),U4(n,c4n,K3n,Aft),U4(n,c4n,f4n,Jkn(Mft)),U4(n,c4n,l4n,Jkn(Lft)),U4(n,c4n,b4n,!1),U4(n,c4n,w4n,Jkn(Ift)),U4(n,c4n,d4n,Jkn(Pft)),U4(n,c4n,g4n,Jkn(Cft)),U4(n,c4n,p4n,Jkn(Sft)),U4(n,c4n,m4n,Jkn(Eft)),U4(n,c4n,v4n,Jkn(Nft)),U4(n,c4n,J3n,Jkn(jft)),U4(n,c4n,n4n,Jkn(Bft)),U4(n,c4n,Y3n,Jkn(Tft)),U4(n,c4n,e4n,Jkn(xft)),U4(n,c4n,Z3n,Jkn(Rft)),U4(n,c4n,k4n,Jkn(Gft)),U4(n,c4n,y4n,Jkn(Xft)),U4(n,c4n,M4n,Jkn(Uft)),U4(n,c4n,T4n,Jkn(Hft)),U4(n,c4n,j4n,qft)}function kJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if(QYn(),0==oS(jHt)){for(f=Inn(QHt,zZn,122,SHt.length,0,1),a=0;a<f.length;a++)f[a]=new K3(4);for(i=new VM,c=0;c<THt.length;c++){if(h=new K3(4),c<84?(s3(o=2*c,rat.length),l=rat.charCodeAt(o),s3(o+1,rat.length),HFn(h,l,rat.charCodeAt(o+1))):HFn(h,PHt[o=2*(c-84)],PHt[o+1]),m_(u=THt[c],"Specials")&&HFn(h,65520,65533),m_(u,eat)&&(HFn(h,983040,1048573),HFn(h,1048576,1114109)),r2(jHt,u,h),r2(EHt,u,FGn(h)),0<(s=i.a.length)?i.a=r1(i.a,0,0):0>s&&(i.a+=V$(Inn(JHt,N1n,28,-s,15,1))),i.a+="Is",xL(u,$Cn(32))>=0)for(r=0;r<u.length;r++)s3(r,u.length),32!=u.charCodeAt(r)&&TQ(i,(s3(r,u.length),u.charCodeAt(r)));else i.a+=""+u;ivn(i.a,u,!0)}ivn(iat,"Cn",!1),ivn(cat,"Cn",!0),HFn(e=new K3(4),0,zct),r2(jHt,"ALL",e),r2(EHt,"ALL",FGn(e)),!zHt&&(zHt=new Ym),r2(zHt,iat,iat),!zHt&&(zHt=new Ym),r2(zHt,cat,cat),!zHt&&(zHt=new Ym),r2(zHt,"ALL","ALL")}return uG(U1(t?jHt:EHt,n),138)}function yJn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,c7n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Qa),a7n),ggn((rDn(),vFt))))),U4(n,c7n,K3n,mCt),U4(n,c7n,o4n,20),U4(n,c7n,$8n,3),U4(n,c7n,R3n,r4n),U4(n,c7n,a4n,xwn(1)),U4(n,c7n,h4n,(qx(),!0)),U4(n,c7n,q8n,Jkn(rCt)),U4(n,c7n,W8n,aCt),U4(n,c7n,f4n,Jkn(sCt)),U4(n,c7n,g9n,Jkn(hCt)),U4(n,c7n,p4n,Jkn(lCt)),U4(n,c7n,d4n,Jkn(bCt)),U4(n,c7n,x4n,Jkn(wCt)),U4(n,c7n,g4n,Jkn(dCt)),U4(n,c7n,m4n,Jkn(fCt)),U4(n,c7n,w4n,Jkn(gCt)),U4(n,c7n,v4n,Jkn(vCt)),U4(n,c7n,t7n,Jkn(LCt)),U4(n,c7n,i7n,Jkn(MCt)),U4(n,c7n,k4n,Jkn(CCt)),U4(n,c7n,y4n,Jkn(OCt)),U4(n,c7n,M4n,Jkn(PCt)),U4(n,c7n,T4n,Jkn(SCt)),U4(n,c7n,j4n,ICt),U4(n,c7n,n7n,Jkn(kCt)),U4(n,c7n,e7n,Jkn(uCt)),U4(n,c7n,Z9n,Jkn(ACt)),U4(n,c7n,J9n,Jkn(iCt)),U4(n,c7n,Y9n,Jkn(oCt))}function MJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(s=uG(uG(Y9(n.r,t),21),87),a=DCn(n,t),e=n.u.Hc((eNn(),lRt)),u=s.Kc();u.Ob();)if((o=uG(u.Pb(),117)).c&&!(o.c.d.c.length<=0)){switch(l=o.b.Mf(),(f=(h=o.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:o.a?(f.c=(l.a-f.b)/2,etn(h,(Ktn(),Ost))):a||e?(f.c=-f.b-n.s,etn(h,(Ktn(),Lst))):(f.c=l.a+n.s,etn(h,(Ktn(),Ast))),f.d=-f.a-n.t,eF(h,(Yen(),Rst));break;case 3:o.a?(f.c=(l.a-f.b)/2,etn(h,(Ktn(),Ost))):a||e?(f.c=-f.b-n.s,etn(h,(Ktn(),Lst))):(f.c=l.a+n.s,etn(h,(Ktn(),Ast))),f.d=l.b+n.t,eF(h,(Yen(),Fst));break;case 2:o.a?(i=n.v?f.a:uG(zq(h.d,0),187).Mf().b,f.d=(l.b-i)/2,eF(h,(Yen(),Kst))):a||e?(f.d=-f.a-n.t,eF(h,(Yen(),Rst))):(f.d=l.b+n.t,eF(h,(Yen(),Fst))),f.c=l.a+n.s,etn(h,(Ktn(),Ast));break;case 4:o.a?(i=n.v?f.a:uG(zq(h.d,0),187).Mf().b,f.d=(l.b-i)/2,eF(h,(Yen(),Kst))):a||e?(f.d=-f.a-n.t,eF(h,(Yen(),Rst))):(f.d=l.b+n.t,eF(h,(Yen(),Fst))),f.c=-f.b-n.s,etn(h,(Ktn(),Lst))}a=!1}}function TJn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,sN(uG(oIn(i,(jYn(),JMt)),101))){a=!1,o=!1;n:for(w=new Ww(i.j);w.a<w.c.c.length;)for(b=uG(N3(w),12),d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(b),new Wd(b)])));hDn(d);)if(!oM(gK(oIn(uG(N9(d),12).i,gyt)))){if(b.j==(KQn(),yRt)){a=!0;break n}if(b.j==KRt){o=!0;break n}}l=o&&!a,f=a&&!o}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Ww(i.b);s.a<s.c.c.length;)h+=(u=uG(N3(s),72)).n.b+u.o.b/2;p=(h/=i.b.c.length)>=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.a<y.c.c.length;)(v=uG(N3(y),10)).k==(zIn(),dbt)&&(P=v.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),E=j.c.length,n.c=Inn(YHt,W1n,28,E,15,1),n.f=Inn(YHt,W1n,28,E,15,1),n.e=Inn(eUt,I0n,28,E,15,1),h=0,n.a=0,M=new Ww(j);M.a<M.c.c.length;)(v=uG(N3(M),10)).p=h++,n.c[v.p]=xbn(qgn(v)),n.f[v.p]=xbn(Xgn(v)),n.e[v.p]=v.o.b/n.d,n.a+=n.e[v.p];for(n.b/=n.d,n.a/=E,T=LNn(j),f$(j,kJ(new Ug(n))),g=M0n,d=vZn,o=null,O=A,I=A,a=u,c=u,A<0&&(O=uG($Et.a.Id(),17).a,I=uG($Et.b.Id(),17).a),u<0&&(a=uG(NEt.a.Id(),17).a,c=uG(NEt.b.Id(),17).a),C=O;C<=I;C++)for(r=a;r<=c;r++)m=uM(pK((S=Nqn(n,C,r,j,T)).a)),p=(b=uG(S.b,15)).gc(),(m<g||m==g&&p<d)&&(g=m,d=p,o=b);for(l=o.Kc();l.Ob();){for(f=uG(l.Pb(),15),s=new bQ(t),k=f.Kc();k.Ob();)a2(v=uG(k.Pb(),10),s);mv(w.c,s)}_An(w),j.c.length=0,i.Vg()}function EJn(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;if(i.Ug("Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void i.Vg();m=uM(pK(oIn(t,(jYn(),STt)))),u=uM(pK(oIn(t,vTt))),o=uM(pK(oIn(t,gTt))),j=uG(oIn(t,Zyt),350)==(kbn(),fEt),T=uM(pK(oIn(t,nMt))),n.d=t,n.j.c.length=0,n.a.c.length=0,$V(n.k),f=UA((s=uG(zq(t.b,0),30)).a,(oFn(),LSt)),l=UA((d=uG(zq(t.b,t.b.c.length-1),30)).a,LSt),g=new Ww(t.b),p=null,C=0;do{for(qQn(n,p,v=g.a<g.c.c.length?uG(N3(g),30):null),AGn(n),P=0,k=C,b=!p||f&&p==s,w=!v||l&&v==d,(E=lT(yun(nY(JJ(new fX(null,new h3(n.i,16)),new va),new ka))))>0?(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<m&&!b&&!w&&(P=(m-h)/2,h=m),k+=h):!b&&!w&&(k+=m),v&&Vzn(v,k),M=new Ww(n.i);M.a<M.c.c.length;)(y=uG(N3(M),131)).a.c=C,y.a.b=k-C,y.F=P,y.p=!p;Ohn(n.a,n.i),C=k,v&&(C+=v.c.a),p=v,b=w}while(v);for(c=new Ww(n.j);c.a<c.c.c.length;)a=Oon(n,r=uG(N3(c),18)),kfn(r,(GYn(),ymt),a),S=rFn(n,r),kfn(r,Tmt,S);t.f.a=C,n.d=null,i.Vg()}function SJn(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(n.b=t,n.a=uG(oIn(t,(jYn(),cMt)),17).a,n.c=uG(oIn(t,oMt),17).a,0==n.c&&(n.c=vZn),g=new N4(t.b,0);g.b<g.d.gc();){for(MK(g.b<g.d.gc()),d=uG(g.d.Xb(g.c=g.b++),30),u=new Zm,l=-1,k=-1,v=new Ww(d.a);v.a<v.c.c.length;)m=uG(N3(v),10),x5((HB(),new Fz(ix(Ggn(m).a.Kc(),new 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;f<l;++f)GX(T,0,(MK(g.b>0),g.a.Xb(g.c=--g.b),pF(g,j=new bQ(n.b)),MK(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),j));for(o=new Ww(u);o.a<o.c.c.length;)if(c=uG(N3(o),42),w=uG(c.b,580).a)for(b=new Ww(w);b.a<b.c.c.length;)Gjn(n,uG(N3(b),10),Nbt,T);for(i=new Zm,s=0;s<k;++s)kD(i,(pF(g,E=new bQ(n.b)),E));for(a=new Ww(u);a.a<a.c.c.length;)if(c=uG(N3(a),42),M=uG(c.b,580).c)for(y=new Ww(M);y.a<y.c.c.length;)Gjn(n,uG(N3(y),10),$bt,i)}for(p=new N4(t.b,0);p.b<p.d.gc();)MK(p.b<p.d.gc()),0==uG(p.d.Xb(p.c=p.b++),30).a.c.length&&LQ(p)}function PJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(d=0!=n.i,m=!1,g=null,uN(n.e)){if((h=t.gc())>0){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<n.i;++r){b=o=n.g[r];n:for(p=0;p<2;++p){for(u=h;--u>=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<i;++c)l=V_(n,uG(b=w[c],76),l);for(a=i;--a>=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||TUn(t),s=oBn(t),u=new K1,g=new BFn,d=new Ww(t.a);d.a<d.c.c.length;)for(r=new Fz(ix(Xgn(uG(N3(d),10)).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.k!=(zIn(),lbt)&&i.d.i.k!=lbt||UNn(u,Dkn((f=LWn(n,i,s,g)).d),f.a);for(a=new Zm,v=uG(oIn(e.c,(GYn(),xpt)),21).Kc();v.Ob();){switch(m=uG(v.Pb(),64),w=g.c[m.g],b=g.b[m.g],o=g.a[m.g],c=null,p=null,m.g){case 4:c=new gY(n.d.a,w,s.b.a-n.d.a,b-w),p=new gY(n.d.a,w,o,b-w),hq(s,new MO(c.c+c.b,c.d)),hq(s,new MO(c.c+c.b,c.d+c.a));break;case 2:c=new gY(s.a.a,w,n.c.a-s.a.a,b-w),p=new gY(n.c.a-o,w,o,b-w),hq(s,new MO(c.c,c.d)),hq(s,new MO(c.c,c.d+c.a));break;case 1:c=new gY(w,n.d.b,b-w,s.b.b-n.d.b),p=new gY(w,n.d.b,b-w,o),hq(s,new MO(c.c,c.d+c.a)),hq(s,new MO(c.c+c.b,c.d+c.a));break;case 3:c=new gY(w,s.a.b,b-w,n.c.b-s.a.b),p=new gY(w,n.c.b-o,b-w,o),hq(s,new MO(c.c,c.d)),hq(s,new MO(c.c+c.b,c.d))}c&&((l=new vk).d=m,l.b=c,l.c=p,l.a=PZ(uG(Y9(u,Dkn(m)),21)),mv(a.c,l))}return Ohn(e.b,a),e.d=Bbn(bVn(s)),e}function IJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(null==i.p[t.p]){u=!0,i.p[t.p]=0,o=t,d=i.o==(w0(),wSt)?T0n:M0n;do{c=n.b.e[o.p],a=o.c.a.c.length,i.o==wSt&&c>0||i.o==dSt&&c<a-1?(s=null,h=null,s=i.o==dSt?uG(zq(o.c.a,c+1),10):uG(zq(o.c.a,c-1),10),IJn(n,h=i.g[s.p],i),d=n.e.wg(d,t,o),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=y$(n.d,o,s),i.o==dSt?(r=uM(i.p[t.p]),l=uM(i.p[h.p])+uM(i.d[s.p])-s.d.d-w-o.d.a-o.o.b-uM(i.d[o.p]),u?(u=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=uM(i.p[t.p]),l=uM(i.p[h.p])+uM(i.d[s.p])+s.o.b+s.d.a+w+o.d.d-uM(i.d[o.p]),u?(u=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=uM(pK(oIn(n.a,(jYn(),ETt)))),b=Ion(n,i.j[t.p]),f=Ion(n,i.j[h.p]),i.o==dSt?r3(b,f,uM(i.p[t.p])+uM(i.d[o.p])+o.o.b+o.d.a+w-(uM(i.p[h.p])+uM(i.d[s.p])-s.d.d)):r3(b,f,uM(i.p[t.p])+uM(i.d[o.p])-o.d.d-uM(i.p[h.p])-uM(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.wg(d,t,o),o=i.a[o.p]}while(o!=t);Wv(n.e,t)}}function OJn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T;if((e=uM(pK(oIn(n.a.j,(jYn(),Lyt)))))<-1||!n.a.i||L_(uG(oIn(n.a.o,JMt),101))||Dgn(n.a.o,(KQn(),kRt)).gc()<2&&Dgn(n.a.o,_Rt).gc()<2)return!0;if(n.a.c.kg())return!1;for(k=0,v=0,m=new Zm,u=0,s=(o=n.a.e).length;u<s;++u){for(b=0,d=(l=o[u]).length;b<d;++b)if((f=l[b]).k!=(zIn(),gbt)){for(i=n.b[f.c.p][f.p],f.k==lbt?(i.b=1,uG(oIn(f,(GYn(),rmt)),12).j==(KQn(),kRt)&&(v+=i.a)):(T=Dgn(f,(KQn(),_Rt))).dc()||!_$(T,new Lc)?i.c=1:((r=Dgn(f,kRt)).dc()||!_$(r,new Ac))&&(k+=i.a),a=new Fz(ix(Xgn(f).a.Kc(),new h));hDn(a);)c=uG(N9(a),18),k+=i.c,v+=i.b,rtn(n,i,c.d.i);for(M=new Fz(new YD((g=zcn(Uhn(cT(vat,1),EZn,20,0,[Dgn(f,(KQn(),yRt)),Dgn(f,KRt)]))).a.length,g.a));hDn(M);)y=uG(N9(M),12),(p=uG(oIn(y,(GYn(),lmt)),10))&&(k+=i.c,v+=i.b,rtn(n,i,p))}else mv(m.c,f);for(w=new Ww(m);w.a<w.c.c.length;)for(f=uG(N3(w),10),i=n.b[f.c.p][f.p],a=new Fz(ix(Xgn(f).a.Kc(),new h));hDn(a);)c=uG(N9(a),18),k+=i.c,v+=i.b,rtn(n,i,c.d.i);m.c.length=0}return(0==(t=k+v)?M0n:(k-v)/t)>=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;k<y;++k){for(m=v[k],s=vZn,h=vZn,w=new Ww(m.e);w.a<w.c.c.length;)(a=(l=uG(N3(w),10)).c?Ten(l.c.a,l,0):-1)>0?(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),a<l.c.a.c.length-1?(f=uG(zq(l.c.a,a+1),10),j=y$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+j)):p=2*l.n.b,h=e.Math.min(p,h);for(u=vZn,c=!1,S=new Ww((r=uG(zq(m.e,0),10)).j);S.a<S.c.c.length;)for(E=uG(N3(S),12),d=r.n.b+E.n.b+E.a.b,i=new Ww(E.e);i.a<i.c.c.length;)t=(M=uG(N3(i),18).c).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(u)&&e.Math.abs(t)<(t<0?s:h)&&(u=t,c=!0);for(T=new Ww((o=uG(zq(m.e,m.e.c.length-1),10)).j);T.a<T.c.c.length;)for(M=uG(N3(T),12),d=o.n.b+M.n.b+M.a.b,i=new Ww(M.g);i.a<i.c.c.length;)t=(E=uG(N3(i),18).d).i.n.b+E.n.b+E.a.b-d,e.Math.abs(t)<e.Math.abs(u)&&e.Math.abs(t)<(t<0?s:h)&&(u=t,c=!0);if(c&&0!=u)for(b=new Ww(m.e);b.a<b.c.c.length;)(l=uG(N3(b),10)).n.b+=u}}function NJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(r=new Zm,c=vZn,a=vZn,o=vZn,i)for(c=n.f.a,d=new Ww(t.j);d.a<d.c.c.length;)for(s=new Ww(uG(N3(d),12).g);s.a<s.c.c.length;)0!=(u=uG(N3(s),18)).a.b&&((f=uG(gR(u.a),8)).a<c&&(a=c-f.a,o=vZn,r.c.length=0,c=f.a),f.a<=c&&(mv(r.c,u),u.a.b>1&&(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.a<d.c.c.length;)for(s=new Ww(uG(N3(d),12).e);s.a<s.c.c.length;)0!=(u=uG(N3(s),18)).a.b&&((b=uG(pR(u.a),8)).a>c&&(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<s.c.c.length;)u=uG(N3(s),18),i?(h=uG(tG(u.a),8),(0==u.a.b?n3(u.d):uG(gR(u.a),8)).b>=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),39)).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<s;r++)m_((u3(r,h.c.length),uG(h.c[r],65)).c.c,"n11"),oM(gK(oIn(o,(OQn(),MPt))))&&!uln((u3(r,h.c.length),uG(h.c[r],65)),n)||(c=1==s?.5:(r+1)/(s+1),t==JDt?(a=uM(pK(oIn(o,DPt))),l=o.e.b+o.f.b*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(e.Math.min(a,o.e.a-i),l)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(o.e.a,l))):t==YDt?(a=uM(pK(oIn(o,$Pt)))+i,l=o.e.b+o.f.b*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(a,l)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(o.e.a+o.f.a,l))):t==nxt?(a=uM(pK(oIn(o,DPt))),f=o.e.a+o.f.a*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,e.Math.min(o.e.b-i,a))),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,o.e.b))):(a=uM(pK(oIn(o,$Pt)))+i,f=o.e.a+o.f.a*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,a)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,o.e.b+o.f.b))))}function DJn(n,t,e,i,r,c,a,o,u){var s,h,f,l,b,w,d;switch(b=e,Hb(h=new gMn(u),(zIn(),lbt)),kfn(h,(GYn(),_pt),a),kfn(h,(jYn(),JMt),($Pn(),cRt)),d=uM(pK(n.of(QMt))),kfn(h,QMt,d),o2(f=new lOn,h),t!=uRt&&t!=sRt||(b=i>=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.a<h.c.c.length;)(s=uG(N3(h),163)).c&&IWn(s.c),g=e.Math.max(g,EX(s)),P+=EX(s)*jX(s);for(p=P/n.b.c.length,S=WEn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*o))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,aq(E=new lS,xwn(0)),T=new lS,f=new N4(n.b,0),d=null,u=new Zm;f.b<f.d.gc();)MK(f.b<f.d.gc()),I=EX(s=uG(f.d.Xb(f.c=f.b++),163)),b=jX(s),O+I>g&&(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)<c&&(w+=c-C,C=c),a)for(O=i.b,f=new N4(n.b,0),cL(E,xwn(n.b.c.length)),v=uG(I6(j=Fkn(E,0)),17).a,cL(T,w),M=Fkn(T,0),y=0;f.b<f.d.gc();)f.b==v&&(O=i.b,y=uM(pK(I6(M))),v=uG(I6(j),17).a),MK(f.b<f.d.gc()),gvn(s=uG(f.d.Xb(f.c=f.b++),163),y),f.b==v&&(m=l-O-i.c,k=EX(s),pvn(s,m),bgn(s,(m-k)/2,0)),O+=EX(s)+t;return new MO(l,C)}function FJn(n){n.N||(n.N=!0,n.b=Nsn(n,0),Von(n.b,0),Von(n.b,1),Von(n.b,2),n.bb=Nsn(n,1),Von(n.bb,0),Von(n.bb,1),n.fb=Nsn(n,2),Von(n.fb,3),Von(n.fb,4),Won(n.fb,5),n.qb=Nsn(n,3),Von(n.qb,0),Won(n.qb,1),Won(n.qb,2),Von(n.qb,3),Von(n.qb,4),Won(n.qb,5),Von(n.qb,6),n.a=$sn(n,4),n.c=$sn(n,5),n.d=$sn(n,6),n.e=$sn(n,7),n.f=$sn(n,8),n.g=$sn(n,9),n.i=$sn(n,10),n.j=$sn(n,11),n.k=$sn(n,12),n.n=$sn(n,13),n.o=$sn(n,14),n.p=$sn(n,15),n.q=$sn(n,16),n.s=$sn(n,17),n.r=$sn(n,18),n.t=$sn(n,19),n.u=$sn(n,20),n.v=$sn(n,21),n.w=$sn(n,22),n.B=$sn(n,23),n.A=$sn(n,24),n.C=$sn(n,25),n.D=$sn(n,26),n.F=$sn(n,27),n.G=$sn(n,28),n.H=$sn(n,29),n.J=$sn(n,30),n.I=$sn(n,31),n.K=$sn(n,32),n.M=$sn(n,33),n.L=$sn(n,34),n.P=$sn(n,35),n.Q=$sn(n,36),n.R=$sn(n,37),n.S=$sn(n,38),n.T=$sn(n,39),n.U=$sn(n,40),n.V=$sn(n,41),n.X=$sn(n,42),n.W=$sn(n,43),n.Y=$sn(n,44),n.Z=$sn(n,45),n.$=$sn(n,46),n._=$sn(n,47),n.ab=$sn(n,48),n.cb=$sn(n,49),n.db=$sn(n,50),n.eb=$sn(n,51),n.gb=$sn(n,52),n.hb=$sn(n,53),n.ib=$sn(n,54),n.jb=$sn(n,55),n.kb=$sn(n,56),n.lb=$sn(n,57),n.mb=$sn(n,58),n.nb=$sn(n,59),n.ob=$sn(n,60),n.pb=$sn(n,61))}function _Jn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(v=0,0==t.f.a)for(p=new Ww(n);p.a<p.c.c.length;)d=uG(N3(p),10),v=e.Math.max(v,d.n.a+d.o.a+d.d.c);else v=t.f.a-t.c.a;for(v-=t.c.a,g=new Ww(n);g.a<g.c.c.length;){switch(pv((d=uG(N3(g),10)).n,v-d.o.a),NG(d.f),$Tn(d),(d.q?d.q:(hZ(),hZ(),Vot))._b((jYn(),rTt))&&pv(uG(oIn(d,rTt),8),v-d.o.a),uG(oIn(d,byt),255).g){case 1:kfn(d,byt,(nMn(),LNt));break;case 2:kfn(d,byt,(nMn(),ANt))}for(m=d.o,y=new Ww(d.j);y.a<y.c.c.length;){for(pv((k=uG(N3(y),12)).n,m.a-k.o.a),pv(k.a,k.o.a),NLn(k,jun(k.j)),(o=uG(oIn(k,YMt),17))&&kfn(k,YMt,xwn(-o.a)),a=new Ww(k.g);a.a<a.c.c.length;){for(r=Fkn((c=uG(N3(a),18)).a,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a=v-i.a;if(h=uG(oIn(c,bMt),75))for(s=Fkn(h,0);s.b!=s.d.c;)(u=uG(I6(s),8)).a=v-u.a;for(b=new Ww(c.b);b.a<b.c.c.length;)pv((f=uG(N3(b),72)).n,v-f.o.a)}for(w=new Ww(k.f);w.a<w.c.c.length;)pv((f=uG(N3(w),72)).n,k.o.a-f.o.a)}for(d.k==(zIn(),lbt)&&(kfn(d,(GYn(),Fpt),jun(uG(oIn(d,Fpt),64))),DIn(d)),l=new Ww(d.b);l.a<l.c.c.length;)$Tn(f=uG(N3(l),72)),pv(f.n,m.a-f.o.a)}}function BJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(v=0,0==t.f.b)for(p=new Ww(n);p.a<p.c.c.length;)d=uG(N3(p),10),v=e.Math.max(v,d.n.b+d.o.b+d.d.a);else v=t.f.b-t.c.b;for(v-=t.c.b,g=new Ww(n);g.a<g.c.c.length;){switch(gv((d=uG(N3(g),10)).n,v-d.o.b),$G(d.f),DTn(d),(d.q?d.q:(hZ(),hZ(),Vot))._b((jYn(),rTt))&&gv(uG(oIn(d,rTt),8),v-d.o.b),uG(oIn(d,byt),255).g){case 3:kfn(d,byt,(nMn(),INt));break;case 4:kfn(d,byt,(nMn(),NNt))}for(m=d.o,y=new Ww(d.j);y.a<y.c.c.length;){for(gv((k=uG(N3(y),12)).n,m.b-k.o.b),gv(k.a,k.o.b),NLn(k,Eun(k.j)),(o=uG(oIn(k,YMt),17))&&kfn(k,YMt,xwn(-o.a)),a=new Ww(k.g);a.a<a.c.c.length;){for(r=Fkn((c=uG(N3(a),18)).a,0);r.b!=r.d.c;)(i=uG(I6(r),8)).b=v-i.b;if(h=uG(oIn(c,bMt),75))for(s=Fkn(h,0);s.b!=s.d.c;)(u=uG(I6(s),8)).b=v-u.b;for(b=new Ww(c.b);b.a<b.c.c.length;)gv((f=uG(N3(b),72)).n,v-f.o.b)}for(w=new Ww(k.f);w.a<w.c.c.length;)gv((f=uG(N3(w),72)).n,k.o.b-f.o.b)}for(d.k==(zIn(),lbt)&&(kfn(d,(GYn(),Fpt),Eun(uG(oIn(d,Fpt),64))),Fdn(d)),l=new Ww(d.b);l.a<l.c.c.length;)DTn(f=uG(N3(l),72)),gv(f.n,m.b-f.o.b)}}function HJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(m=new N4(n.b,0),d=0,s=uG((f=t.Kc()).Pb(),17).a,y=0,e=new ek,T=new XL;m.b<m.d.gc();){for(MK(m.b<m.d.gc()),k=new Ww(uG(m.d.Xb(m.c=m.b++),30).a);k.a<k.c.c.length;){for(w=new Fz(ix(Xgn(v=uG(N3(k),10)).a.Kc(),new h));hDn(w);)l=uG(N9(w),18),T.a.zc(l,T);for(b=new Fz(ix(qgn(v).a.Kc(),new h));hDn(b);)l=uG(N9(b),18),T.a.Bc(l)}if(d+1==s){for(pF(m,r=new bQ(n)),pF(m,c=new bQ(n)),E=T.a.ec().Kc();E.Ob();)j=uG(E.Pb(),18),e.a._b(j)||(++y,e.a.zc(j,e)),kfn(a=new gMn(n),(jYn(),JMt),($Pn(),oRt)),a2(a,r),Hb(a,(zIn(),fbt)),o2(g=new lOn,a),NLn(g,(KQn(),_Rt)),o2(S=new lOn,a),NLn(S,kRt),kfn(i=new gMn(n),JMt,oRt),a2(i,c),Hb(i,fbt),o2(p=new lOn,i),NLn(p,_Rt),o2(P=new lOn,i),NLn(P,kRt),c2(M=new UZ,j.c),u2(M,g),kfn(M,(GYn(),imt),uG(oIn(j,imt),17)),c2(I=new UZ,S),u2(I,p),kfn(I,imt,uG(oIn(j,imt),17)),c2(j,P),o=new O5(a,i,M,I,j),kfn(a,Spt,o),kfn(i,Spt,o),(C=M.c.i).k==fbt&&((u=uG(oIn(C,Spt),313)).d=o,o.g=u);if(!f.Ob())break;s=uG(f.Pb(),17).a}++d}return xwn(y)}function UJn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g;for(d=new Zm,l=new Ww(n.d.b);l.a<l.c.c.length;)for(w=new Ww(uG(N3(l),30).a);w.a<w.c.c.length;){for(b=uG(N3(w),10),r=uG(cQ(n.f,b),60),u=new Fz(ix(Xgn(b).a.Kc(),new h));hDn(u);)if(s=!0,f=null,(i=Fkn((a=uG(N9(u),18)).a,0)).b!=i.d.c){for(t=uG(I6(i),8),e=null,a.c.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,mv(d.c,g)),a.c.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,mv(d.c,g));i.b!=i.d.c;)e=uG(I6(i),8),gcn(t.b,e.b)||(f=new Hqn(t,e,null,a),mv(d.c,f),s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>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.b<c.d.d?f.f.a=!0:t.b>c.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<f;++s){switch(c=(r=khn(i=Ndn(a,(Knn(s,h=cx(t,$Cn(61),s),t.length),t.substr(s,h-s))))).jk().wi(),VJ(t,++h)){case 39:o=aR(t,39,++h),kD(u,new TA(i,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r))),s=o+1;break;case 34:o=aR(t,34,++h),kD(u,new TA(i,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r))),s=o+1;break;case 91:kD(u,new TA(i,l=new Zm));n:for(;;){switch(VJ(t,++h)){case 39:o=aR(t,39,++h),kD(l,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r)),h=o+1;break;case 34:o=aR(t,34,++h),kD(l,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r)),h=o+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw hv(new Ky(Xtt));l.c.push(null),h+=3}if(!(h<f))break;switch(s3(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw hv(new Ky("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw hv(new Ky(Xtt));kD(u,new TA(i,null)),s=h+3}if(!(s<f))break;if(s3(s,t.length),44!=t.charCodeAt(s))throw hv(new Ky("Expecting ,"))}return VFn(n,u,e)}function qJn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Em();case 13:return n.Fm();case 23:return n.wm();case 22:return n.Bm();case 18:return n.ym();case 8:EYn(n),QYn(),r=IHt;break;case 9:return n.em(!0);case 19:return n.fm();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.dm(n.a),EYn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.cm())<P0n?(QYn(),QYn(),r=new IX(0,t)):r=mz(Ogn(t));break;case 99:return n.om();case 67:return n.jm();case 105:return n.rm();case 73:return n.km();case 103:return n.pm();case 88:return n.lm();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.gm();case 80:case 112:if(!(r=PNn(n,n.a)))throw hv(new CM(rZn((t$(),git))));break;default:r=UG(n.a)}EYn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw hv(new CM(rZn((t$(),dit))));r=UG(n.a),e=n.a,EYn(n),(64512&e)==C0n&&0==n.c&&56320==(64512&n.a)&&((i=Inn(JHt,N1n,28,2,15,1))[0]=e&D1n,i[1]=n.a&D1n,r=EV(mz(mvn(i,0,i.length)),0),EYn(n));break;default:throw hv(new CM(rZn((t$(),dit))))}return r}function XJn(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;for(E=new lS,M=new lS,g=-1,u=new Ww(n);u.a<u.c.c.length;){for((a=uG(N3(u),131)).s=g--,h=0,v=0,c=new Ww(a.t);c.a<c.c.c.length;)v+=(i=uG(N3(c),274)).c;for(r=new Ww(a.i);r.a<r.c.c.length;)h+=(i=uG(N3(r),274)).c;a.n=h,a.u=v,0==v?s8(M,a,M.c.b,M.c):0==h&&s8(E,a,E.c.b,E.c)}for(P=g8(n),d=(f=n.c.length)+1,p=f-1,b=new Zm;0!=P.a.gc();){for(;0!=M.b;)MK(0!=M.b),y=uG(Lrn(M,M.a.a),131),P.a.Bc(y),y.s=p--,Vxn(y,E,M);for(;0!=E.b;)MK(0!=E.b),T=uG(Lrn(E,E.a.a),131),P.a.Bc(T),T.s=d++,Vxn(T,E,M);for(w=j1n,s=P.a.ec().Kc();s.Ob();)(m=(a=uG(s.Pb(),131)).u-a.n)>=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.a<o.c.c.length;)(a=uG(N3(o),131)).s<f&&(a.s+=k);for(j=new Ww(n);j.a<j.c.c.length;)for(e=new N4((T=uG(N3(j),131)).t,0);e.b<e.d.gc();)MK(e.b<e.d.gc()),S=(i=uG(e.d.Xb(e.c=e.b++),274)).b,T.s>S.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.a<o.c.c.length;)if((c=uG(N3(o),18)).c.i==c.d.i){if(v.j==c.d.j){mv(M.c,c);continue}if(v.j==(KQn(),yRt)&&c.d.j==KRt){mv(d.c,c);continue}}for(u=new Ww(d);u.a<u.c.c.length;)KUn(n,c=uG(N3(u),18),e,i,(KQn(),kRt));for(a=new Ww(M);a.a<a.c.c.length;)c=uG(N3(a),18),Hb(T=new gMn(n),(zIn(),gbt)),kfn(T,(jYn(),JMt),($Pn(),cRt)),kfn(T,(GYn(),rmt),c),kfn(j=new lOn,rmt,c.d),NLn(j,(KQn(),_Rt)),o2(j,T),kfn(E=new lOn,rmt,c.c),NLn(E,kRt),o2(E,T),kfn(c.c,lmt,T),kfn(c.d,lmt,T),c2(c,null),u2(c,null),mv(e.c,T),kfn(T,Opt,xwn(2));for(k=Fkn(t,0);k.b!=k.d.c;)s=(v=uG(I6(k),12)).e.c.length>0,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.a<b.c.c.length;)kD(r,Xqn(n,uG(N3(b),12),null,e));for(p=new Ww(m);p.a<p.c.c.length;)kD(r,Xqn(n,null,uG(N3(p),12),e));for(f=new Ww(l);f.a<f.c.c.length;)kD(r,Xqn(n,h=uG(N3(f),12),h,e))}function VJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(b=M0n,w=M0n,f=0,l=0,s=new Zm,u=new DD((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b));u.e!=u.i.gc();)a=uG(Zkn(u),74),s=zcn(Uhn(cT(vat,1),EZn,20,0,[s,(!a.n&&(a.n=new fV(lFt,a,1,7)),a.n)]));for(k=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n),(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),s])));hDn(k);)v=uG(N9(k),422),h=uG(v.of((XYn(),$$t)),140),b>v.nh()-h.b&&(b=v.nh()-h.b),w>v.oh()-h.d&&(w=v.oh()-h.d),f<v.nh()+v.mh()+h.c&&(f=v.nh()+v.mh()+h.c),l<v.oh()+v.lh()+h.a&&(l=v.oh()+v.lh()+h.a);for(o=new DD((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b));o.e!=o.i.gc();)for(m=new DD((!(a=uG(Zkn(o),74)).a&&(a.a=new fV(oFt,a,6,6)),a.a));m.e!=m.i.gc();)for(d=(p=uG(Zkn(m),166)).j,r=p.b,g=p.k,c=p.c,b=e.Math.min(b,d),b=e.Math.min(b,r),f=e.Math.max(f,d),f=e.Math.max(f,r),w=e.Math.min(w,g),w=e.Math.min(w,c),l=e.Math.max(l,g),l=e.Math.max(l,c),i=new DD((!p.a&&(p.a=new MD(eFt,p,5)),p.a));i.e!=i.i.gc();)t=uG(Zkn(i),377),b=e.Math.min(b,t.a),f=e.Math.max(f,t.a),w=e.Math.min(w,t.b),l=e.Math.max(l,t.b);Myn(n,(XYn(),h$t),f-b),Myn(n,s$t,l-w)}function WJn(n,t,e){var i,r,c,a,o,u,s;if(e.Ug("Network simplex node placement",1),n.e=t,n.n=uG(oIn(t,(GYn(),kmt)),312),Pzn(n),vPn(n),kS(sin(new fX(null,new h3(n.e.b,16)),new _c),new hp(n)),kS(JJ(sin(JJ(sin(new fX(null,new h3(n.e.b,16)),new Zc),new na),new ta),new ea),new sp(n)),oM(gK(oIn(n.e,(jYn(),OMt))))&&((c=e.eh(1)).Ug("Straight Edges Pre-Processing",1),HWn(n),c.Vg()),uMn(n.f),r=uG(oIn(t,OTt),17).a*n.f.a.c.length,YHn(kT(yT(_B(n.f),r),!1),e.eh(1)),0!=n.d.a.gc()){for((c=e.eh(1)).Ug("Flexible Where Space Processing",1),a=uG(yx(Qz(YJ(new fX(null,new h3(n.f.a,16)),new Bc),new $c)),17).a,o=uG(yx(Wz(YJ(new fX(null,new h3(n.f.a,16)),new Hc),new Dc)),17).a-a,u=jx(new sk,n.f),s=jx(new sk,n.f),RKn(xS(DS($S(RS(new uk,2e4),o),u),s)),kS(JJ(JJ(BV(n.i),new Uc),new Gc),new dY(a,u,o,s)),i=n.d.a.ec().Kc();i.Ob();)uG(i.Pb(),218).g=1;YHn(kT(yT(_B(n.f),r),!1),c.eh(1)),c.Vg()}oM(gK(oIn(t,OMt)))&&((c=e.eh(1)).Ug("Straight Edges Post-Processing",1),fAn(n),c.Vg()),dWn(n),n.e=null,n.f=null,n.i=null,n.c=null,$V(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),e.Vg()}function QJn(n,t,i){var r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;for(i.Ug("Depth first model order layering",1),n.d=t,m=new Zm,p=new Ww(n.d.a);p.a<p.c.c.length;)(d=uG(N3(p),10)).k==(zIn(),dbt)&&mv(m.c,d);for(hZ(),f$(m,new Ec),o=!0,n.b=new bQ(n.d),n.a=null,kD(n.d.b,n.b),n.b.p=0,n.c=0,n.f=new lS,g=new Ww(m);g.a<g.c.c.length;)if(d=uG(N3(g),10),o)a2(d,n.b),o=!1;else if(Lqn(n,d))if(r=(w=Pyn(w=n.c,d))+2,l=w-n.c,0==n.f.b)O_n(n,r,d);else if(l>0){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<f.c.c.length;)0==(u=uG(N3(f),30)).a.c.length&&mv(v.c,u);for(dgn(n.d.b,v),b=0,s=new Ww(n.d.b);s.a<s.c.c.length;)(u=uG(N3(s),30)).p=b,++b;i.Vg()}function JJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(s=t,Gan(u=D5(n,d5(e),s),k6(s,Iet)),h=uG(dcn(n.g,fNn(v0(s,set))),27),i=null,(a=v0(s,"sourcePort"))&&(i=fNn(a)),f=uG(dcn(n.j,i),123),!h)throw hv(new SM("An edge must have a source node (edge id: '"+jvn(s)+$et));if(f&&!xQ(h0(f),h))throw hv(new SM("The source port of an edge must be a port of the edge's source node (edge id: '"+k6(s,Iet)+$et));if(!u.b&&(u.b=new f_(cFt,u,4,7)),ttn(u.b,f||h),l=uG(dcn(n.g,fNn(v0(s,Ret))),27),r=null,(o=v0(s,"targetPort"))&&(r=fNn(o)),b=uG(dcn(n.j,r),123),!l)throw hv(new SM("An edge must have a target node (edge id: '"+jvn(s)+$et));if(b&&!xQ(h0(b),l))throw hv(new SM("The target port of an edge must be a port of the edge's target node (edge id: '"+k6(s,Iet)+$et));if(!u.c&&(u.c=new f_(cFt,u,5,8)),ttn(u.c,b||l),0==(!u.b&&(u.b=new f_(cFt,u,4,7)),u.b).i||0==(!u.c&&(u.c=new f_(cFt,u,5,8)),u.c).i)throw c=k6(s,Iet),hv(new SM(Net+c+$et));return fCn(s,u),ZDn(s,u),qfn(n,s,u)}function YJn(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,P,C,I;for(b=uG(oIn(n,(mon(),Wft)),27),m=vZn,v=vZn,g=j1n,p=j1n,y=new Ww(n.e);y.a<y.c.c.length;)S=(k=uG(N3(y),153)).d,P=k.e,m=e.Math.min(m,S.a-P.a/2),v=e.Math.min(v,S.b-P.b/2),g=e.Math.max(g,S.a+P.a/2),p=e.Math.max(p,S.b+P.b/2);for(i=new Ww(n.b);i.a<i.c.c.length;)S=(t=uG(N3(i),250)).d,P=t.e,m=e.Math.min(m,S.a-P.a/2),v=e.Math.min(v,S.b-P.b/2),g=e.Math.max(g,S.a+P.a/2),p=e.Math.max(p,S.b+P.b/2);for(j=new MO((E=uG(zDn(b,(cGn(),Oft)),107)).b-m,E.d-v),h=new Ww(n.e);h.a<h.c.c.length;)F$(T=oIn(s=uG(N3(h),153),Wft),207)&&kN(w=uG(T,27),(M=JF(new eN(s.d),j)).a-w.g/2,M.b-w.f/2);for(a=new Ww(n.c);a.a<a.c.c.length;)c=uG(N3(a),289),l=JFn(uG(oIn(c,Wft),74),!0,!0),JF(C=new eN(Vcn(c)),j),MN(l,C.a,C.b),Prn(c.a,new bC(j,l)),JF(r=new eN(Wcn(c)),j),yN(l,r.a,r.b);for(u=new Ww(n.d);u.a<u.c.c.length;)o=uG(N3(u),453),kN(uG(oIn(o,Wft),135),(d=JF(new eN(o.d),j)).a,d.b);I=g-m+(E.b+E.c),f=p-v+(E.d+E.a),oM(gK(zDn(b,(XYn(),H$t))))||ZQn(b,I,f,!1,!0),Myn(b,h$t,I-(E.b+E.c)),Myn(b,s$t,f-(E.d+E.a))}function ZJn(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;return f=xGn(Ax(n,(KQn(),SRt)),t),w=UTn(Ax(n,PRt),t),k=UTn(Ax(n,DRt),t),j=GTn(Ax(n,RRt),t),l=GTn(Ax(n,MRt),t),m=UTn(Ax(n,$Rt),t),d=UTn(Ax(n,CRt),t),M=UTn(Ax(n,xRt),t),y=UTn(Ax(n,TRt),t),E=GTn(Ax(n,ERt),t),p=UTn(Ax(n,LRt),t),v=UTn(Ax(n,ARt),t),T=UTn(Ax(n,jRt),t),S=GTn(Ax(n,NRt),t),b=GTn(Ax(n,IRt),t),g=UTn(Ax(n,ORt),t),e=Trn(Uhn(cT(eUt,1),I0n,28,15,[m.a,j.a,M.a,S.a])),i=Trn(Uhn(cT(eUt,1),I0n,28,15,[w.a,f.a,k.a,g.a])),r=p.a,c=Trn(Uhn(cT(eUt,1),I0n,28,15,[d.a,l.a,y.a,b.a])),s=Trn(Uhn(cT(eUt,1),I0n,28,15,[m.b,w.b,d.b,v.b])),u=Trn(Uhn(cT(eUt,1),I0n,28,15,[j.b,f.b,l.b,g.b])),h=E.b,o=Trn(Uhn(cT(eUt,1),I0n,28,15,[M.b,k.b,y.b,T.b])),utn(Ax(n,SRt),e+r,s+h),utn(Ax(n,ORt),e+r,s+h),utn(Ax(n,PRt),e+r,0),utn(Ax(n,DRt),e+r,s+h+u),utn(Ax(n,RRt),0,s+h),utn(Ax(n,MRt),e+r+i,s+h),utn(Ax(n,CRt),e+r+i,0),utn(Ax(n,xRt),0,s+h+u),utn(Ax(n,TRt),e+r+i,s+h+u),utn(Ax(n,ERt),0,s),utn(Ax(n,LRt),e,0),utn(Ax(n,jRt),0,s+h+u),utn(Ax(n,IRt),e+r+i,0),(a=new sj).a=Trn(Uhn(cT(eUt,1),I0n,28,15,[e+i+r+c,E.a,v.a,T.a])),a.b=Trn(Uhn(cT(eUt,1),I0n,28,15,[s+u+h+o,p.b,S.b,b.b])),a}function nYn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(d=new MO(M0n,M0n),t=new MO(T0n,T0n),y=new Ww(n);y.a<y.c.c.length;)k=uG(N3(y),8),d.a=e.Math.min(d.a,k.a),d.b=e.Math.min(d.b,k.b),t.a=e.Math.max(t.a,k.a),t.b=e.Math.max(t.b,k.b);for(s=new MO(t.a-d.a,t.b-d.b),h=new gqn(new MO(d.a-50,d.b-s.a-50),new MO(d.a-50,t.b+s.a+50),new MO(t.a+s.b/2+50,d.b+s.b/2)),v=new ek,c=new Zm,i=new Zm,v.a.zc(h,v),T=new Ww(n);T.a<T.c.c.length;){for(M=uG(N3(T),8),c.c.length=0,m=v.a.ec().Kc();m.Ob();)atn((g=uG(m.Pb(),317)).d,g.a),Fgn(atn(g.d,M),atn(g.d,g.a))<0&&mv(c.c,g);for(i.c.length=0,p=new Ww(c);p.a<p.c.c.length;)for(b=new Ww((g=uG(N3(p),317)).e);b.a<b.c.c.length;){for(f=uG(N3(b),177),a=!0,u=new Ww(c);u.a<u.c.c.length;)(o=uG(N3(u),317))!=g&&(OJ(f,zq(o.e,0))||OJ(f,zq(o.e,1))||OJ(f,zq(o.e,2)))&&(a=!1);a&&mv(i.c,f)}for(zCn(v,c),z8(v,new ln),l=new Ww(i);l.a<l.c.c.length;)FV(v,new gqn(M,(f=uG(N3(l),177)).a,f.b))}for(z8(v,new Pd(w=new ek)),r=w.a.ec().Kc();r.Ob();)(Den(h,(f=uG(r.Pb(),177)).a)||Den(h,f.b))&&r.Qb();return z8(w,new bn),w}function tYn(){tYn=E,pj(),VKt=RKt.a,uG(zrn(gZ(RKt.a),0),19),HKt=RKt.f,uG(zrn(gZ(RKt.f),0),19),uG(zrn(gZ(RKt.f),1),35),zKt=RKt.n,uG(zrn(gZ(RKt.n),0),35),uG(zrn(gZ(RKt.n),1),35),uG(zrn(gZ(RKt.n),2),35),uG(zrn(gZ(RKt.n),3),35),UKt=RKt.g,uG(zrn(gZ(RKt.g),0),19),uG(zrn(gZ(RKt.g),1),35),FKt=RKt.c,uG(zrn(gZ(RKt.c),0),19),uG(zrn(gZ(RKt.c),1),19),GKt=RKt.i,uG(zrn(gZ(RKt.i),0),19),uG(zrn(gZ(RKt.i),1),19),uG(zrn(gZ(RKt.i),2),19),uG(zrn(gZ(RKt.i),3),19),uG(zrn(gZ(RKt.i),4),35),qKt=RKt.j,uG(zrn(gZ(RKt.j),0),19),_Kt=RKt.d,uG(zrn(gZ(RKt.d),0),19),uG(zrn(gZ(RKt.d),1),19),uG(zrn(gZ(RKt.d),2),19),uG(zrn(gZ(RKt.d),3),19),uG(zrn(gZ(RKt.d),4),35),uG(zrn(gZ(RKt.d),5),35),uG(zrn(gZ(RKt.d),6),35),uG(zrn(gZ(RKt.d),7),35),KKt=RKt.b,uG(zrn(gZ(RKt.b),0),35),uG(zrn(gZ(RKt.b),1),35),BKt=RKt.e,uG(zrn(gZ(RKt.e),0),35),uG(zrn(gZ(RKt.e),1),35),uG(zrn(gZ(RKt.e),2),35),uG(zrn(gZ(RKt.e),3),35),uG(zrn(gZ(RKt.e),4),19),uG(zrn(gZ(RKt.e),5),19),uG(zrn(gZ(RKt.e),6),19),uG(zrn(gZ(RKt.e),7),19),uG(zrn(gZ(RKt.e),8),19),uG(zrn(gZ(RKt.e),9),19),uG(zrn(gZ(RKt.e),10),35),XKt=RKt.k,uG(zrn(gZ(RKt.k),0),35),uG(zrn(gZ(RKt.k),1),35)}function eYn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.vm();case 12:return n.xm();case 14:return n.zm();case 15:return n.Cm();case 16:return n.Am();case 17:return n.Dm();case 21:return EYn(n),QYn(),QYn(),OHt;case 10:switch(n.a){case 65:return n.hm();case 90:return n.mm();case 122:return n.tm();case 98:return n.nm();case 66:return n.im();case 60:return n.sm();case 62:return n.qm()}}switch(c=qJn(n),t=n.c){case 3:return n.Im(c);case 4:return n.Gm(c);case 5:return n.Hm(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=VJ(n.i,r++))>=48&&t<=57))throw hv(new CM(rZn((t$(),Nit))));for(i=t-48;r<n.j&&(t=VJ(n.i,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<n.j&&(t=VJ(n.i,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),298):uG(oIn(n,Ayt),298))==(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<s.c.c.length;)0==(o=uG(N3(s),12)).e.c.length||uG(zq(o.e,0),18).c.i.c!=t.c&&(f=uG(zq(o.e,0),18).c);for(b=null,u=new Ww(e.j);u.a<u.c.c.length;)0==(o=uG(N3(u),12)).e.c.length||uG(zq(o.e,0),18).c.i.c!=e.c&&(b=uG(zq(o.e,0),18).c);if(f&&b){if(h=f.i,l=b.i,h&&h==l){for(d=new Ww(h.j);d.a<d.c.c.length;){if((w=uG(N3(d),12))==f)return uHn(n,e,t),-1;if(w==b)return uHn(n,t,e),1}return d$(_Sn(n,t),_Sn(n,e))}for(m=0,v=(p=n.d).length;m<v;++m){if((g=p[m])==h)return uHn(n,e,t),-1;if(g==l)return uHn(n,t,e),1}}if(!vR(t,(GYn(),imt))||!vR(e,imt))return(r=_Sn(n,t))>(a=_Sn(n,e))?uHn(n,t,e):uHn(n,e,t),r<a?-1:r>a?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),i<c?-1:i>c?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,468)){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;s<h;++s)o=u[s],kD(d,f.jk().wi().ti(f,o));return d}if(!(w=tdn(kBt,t).Ml()).dc()){for(b=w.Kc();b.Ob();){l=uG(b.Pb(),156);try{if(null!=(d=l.jk().wi().ti(l,e)))return d}catch(g){if(!F$(g=Ehn(g),63))throw hv(g)}}throw hv(new vM(iet+e+"' does not match any member types of the union datatype '"+t.xe()+"'"))}if(uG(t,847).ok(),!(r=jbn(t.kk())))return null;if(r==hot){c=0;try{c=vUn(e,j1n,vZn)&D1n}catch(g){if(!F$(g=Ehn(g),130))throw hv(g);c=_en(e)[0]}return Hsn(c)}if(r==iot){for(a=0;a<QKt.length;++a)try{return dP(QKt[a],e)}catch(g){if(!F$(g=Ehn(g),33))throw hv(g)}throw hv(new vM(iet+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw hv(new vM(iet+e+"' is invalid. "))}function aYn(){aYn=E,UNn(Jlt=new K1,(KQn(),SRt),ORt),UNn(Jlt,RRt,ORt),UNn(Jlt,RRt,NRt),UNn(Jlt,MRt,IRt),UNn(Jlt,MRt,ORt),UNn(Jlt,PRt,ORt),UNn(Jlt,PRt,ARt),UNn(Jlt,DRt,jRt),UNn(Jlt,DRt,ORt),UNn(Jlt,LRt,ERt),UNn(Jlt,LRt,ORt),UNn(Jlt,LRt,ARt),UNn(Jlt,LRt,jRt),UNn(Jlt,ERt,LRt),UNn(Jlt,ERt,NRt),UNn(Jlt,ERt,IRt),UNn(Jlt,ERt,ORt),UNn(Jlt,$Rt,$Rt),UNn(Jlt,$Rt,ARt),UNn(Jlt,$Rt,NRt),UNn(Jlt,CRt,CRt),UNn(Jlt,CRt,ARt),UNn(Jlt,CRt,IRt),UNn(Jlt,xRt,xRt),UNn(Jlt,xRt,jRt),UNn(Jlt,xRt,NRt),UNn(Jlt,TRt,TRt),UNn(Jlt,TRt,jRt),UNn(Jlt,TRt,IRt),UNn(Jlt,ARt,PRt),UNn(Jlt,ARt,LRt),UNn(Jlt,ARt,$Rt),UNn(Jlt,ARt,CRt),UNn(Jlt,ARt,ORt),UNn(Jlt,ARt,ARt),UNn(Jlt,ARt,NRt),UNn(Jlt,ARt,IRt),UNn(Jlt,jRt,DRt),UNn(Jlt,jRt,LRt),UNn(Jlt,jRt,xRt),UNn(Jlt,jRt,TRt),UNn(Jlt,jRt,jRt),UNn(Jlt,jRt,NRt),UNn(Jlt,jRt,IRt),UNn(Jlt,jRt,ORt),UNn(Jlt,NRt,RRt),UNn(Jlt,NRt,ERt),UNn(Jlt,NRt,$Rt),UNn(Jlt,NRt,xRt),UNn(Jlt,NRt,ARt),UNn(Jlt,NRt,jRt),UNn(Jlt,NRt,NRt),UNn(Jlt,NRt,ORt),UNn(Jlt,IRt,MRt),UNn(Jlt,IRt,ERt),UNn(Jlt,IRt,CRt),UNn(Jlt,IRt,TRt),UNn(Jlt,IRt,ARt),UNn(Jlt,IRt,jRt),UNn(Jlt,IRt,IRt),UNn(Jlt,IRt,ORt),UNn(Jlt,ORt,SRt),UNn(Jlt,ORt,RRt),UNn(Jlt,ORt,MRt),UNn(Jlt,ORt,PRt),UNn(Jlt,ORt,DRt),UNn(Jlt,ORt,LRt),UNn(Jlt,ORt,ERt),UNn(Jlt,ORt,ARt),UNn(Jlt,ORt,jRt),UNn(Jlt,ORt,NRt),UNn(Jlt,ORt,IRt),UNn(Jlt,ORt,ORt)}function oYn(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;for(n.d=new MO(M0n,M0n),n.c=new MO(T0n,T0n),l=t.Kc();l.Ob();)for(v=new Ww(uG(l.Pb(),36).a);v.a<v.c.c.length;)m=uG(N3(v),10),n.d.a=e.Math.min(n.d.a,m.n.a-m.d.b),n.d.b=e.Math.min(n.d.b,m.n.b-m.d.d),n.c.a=e.Math.max(n.c.a,m.n.a+m.o.a+m.d.c),n.c.b=e.Math.max(n.c.b,m.n.b+m.o.b+m.d.a);for(u=new bk,f=t.Kc();f.Ob();)r=CJn(n,uG(f.Pb(),36)),kD(u.a,r),r.a=r.a|!uG(oIn(r.c,(GYn(),xpt)),21).dc();for(n.b=(Mbn(),(j=new vt).f=new $an(i),j.b=PVn(j.f,u),j),qVn((w=n.b,new fy,w)),n.e=new sj,n.a=n.b.f.e,o=new Ww(u.a);o.a<o.c.c.length;)for(c=uG(N3(o),855),k=Q1(n.b,c),eHn(c.c,k.a,k.b),g=new Ww(c.c.a);g.a<g.c.c.length;)(d=uG(N3(g),10)).k==(zIn(),lbt)&&(p=nRn(n,d.n,uG(oIn(d,(GYn(),Fpt)),64)),JF(dL(d.n),p));for(a=new Ww(u.a);a.a<a.c.c.length;)for(h=new Ww(cgn(c=uG(N3(a),855)));h.a<h.c.c.length;)for(sR(T=new tj((s=uG(N3(h),18)).a),0,n3(s.c)),aq(T,n3(s.d)),b=null,M=Fkn(T,0);M.b!=M.d.c;)y=uG(I6(M),8),b?(xrn(b.a,y.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):xrn(b.b,y.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=y):b=y;BR(n.e),JF(n.a,n.e)}function uYn(n,t){var e,i,r,c,a,o,u,s;if(e=0,a=0,c=t.length,o=null,s=new QM,a<c&&(s3(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(s3(a,t.length),43==t.charCodeAt(a)||(s3(a,t.length),45==t.charCodeAt(a)))))throw hv(new ZM(y0n+t+'"'));for(;a<c&&(s3(a,t.length),46!=t.charCodeAt(a))&&(s3(a,t.length),101!=t.charCodeAt(a))&&(s3(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+r1(null==t?IZn:(tJ(t),t),e,a),a<c&&(s3(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(s3(a,t.length),101!=t.charCodeAt(a))&&(s3(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+r1(null==t?IZn:(tJ(t),t),e,a)}else n.e=0;if(a<c&&(s3(a,t.length),101==t.charCodeAt(a)||(s3(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(s3(a,t.length),43==t.charCodeAt(a))&&++a<c&&(s3(a,t.length),45!=t.charCodeAt(a))&&++e,Knn(e,c,t.length),o=t.substr(e,c-e),n.e=n.e-vUn(o,j1n,vZn),n.e!=t0(n.e)))throw hv(new ZM("Scale out of range."));if((u=s.a).length<16){if(n.f=(null==Not&&(Not=new RegExp("^[+-]?\\d*$","i")),Not.test(u)?parseInt(u,10):NaN),isNaN(n.f))throw hv(new ZM(y0n+t+'"'));n.a=VLn(n.f)}else rdn(n,new PN(u));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=VJ(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function sYn(n){Hxn(n.b,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentTransient"])),Hxn(n.a,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedSourceURI"])),Hxn(n.o,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),Hxn(n.p,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),Hxn(n.v,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),Hxn(n.R,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedName"])),Hxn(n.T,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),Hxn(n.U,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),Hxn(n.W,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),Hxn(n.bb,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ValidDefaultValueLiteral"])),Hxn(n.eb,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),Hxn(n.H,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentType ConsistentBounds ConsistentArguments"]))}function hYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(!t.dc()){if(r=new Uk,f=(a=e||uG(t.Xb(0),18)).c,uFn(),(s=f.i.k)!=(zIn(),dbt)&&s!=gbt&&s!=lbt&&s!=fbt)throw hv(new vM("The target node of the edge must be a normal node or a northSouthPort."));for(cL(r,Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a]))),(KQn(),LRt).Hc(f.j)&&(b=uM(pK(oIn(f,(GYn(),Mmt)))),s8(r,new MO(Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),u=null,i=!1,o=t.Kc();o.Ob();)0!=(c=uG(o.Pb(),18).a).b&&(i?(s8(r,vD(JF(u,(MK(0!=c.b),uG(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,u=D$((MK(0!=c.b),uG(c.c.b.c,8))),Qon(r,c),BY(c));l=a.d,LRt.Hc(l.j)&&(b=uM(pK(oIn(l,(GYn(),Mmt)))),s8(r,new MO(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),cL(r,Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a]))),n.d==(kbn(),sEt)&&(MK(0!=r.b),w=uG(r.a.a.c,8),d=uG(hyn(r,1),8),(g=new O2(Tln(f.j))).a*=5,g.b*=5,p=YF(new MO(d.a,d.b),w),JF(m=new MO(C0(g.a,p.a),C0(g.b,p.b)),w),lW(Fkn(r,1),m),MK(0!=r.b),v=uG(r.c.b.c,8),k=uG(hyn(r,r.b-2),8),(g=new O2(Tln(l.j))).a*=5,g.b*=5,p=YF(new MO(k.a,k.b),v),JF(y=new MO(C0(g.a,p.a),C0(g.b,p.b)),v),sR(r,r.b-1,y)),h=new jqn(r),Qon(a.a,$Mn(h))}}function fYn(n,t,i,r){var 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;if(k=(m=uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)).nh(),y=m.oh(),v=m.mh()/2,w=m.lh()/2,F$(m,193)&&(k+=h0(p=uG(m,123)).i,k+=h0(p).i),k+=v,y+=w,C=(S=uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)).nh(),I=S.oh(),P=S.mh()/2,M=S.lh()/2,F$(S,193)&&(C+=h0(E=uG(S,123)).i,C+=h0(E).i),C+=P,I+=M,0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),u=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),u);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)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:C<k-v&&(d=k-v),g=I,I>y+w?g=y+w:I<y-w&&(g=y-w),d>k-v&&d<k+v&&g>y-w&&g<y+w&&(d=k+v),Tcn(o=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),d),Ecn(o,g),T=k,k>C+P?T=C+P:k<C-P&&(T=C-P),j=y,y>I+M?j=I+M:y<I-M&&(j=I-M),T>C-P&&T<C+P&&j>I-M&&j<I+M&&(j=I+M),mcn(o,T),jcn(o,j),Czn((!o.a&&(o.a=new MD(eFt,o,5)),o.a)),a=iMn(t,5),m==S&&++a,A=T-d,$=j-g,h=.20000000298023224*e.Math.sqrt(A*A+$*$),L=A/(a+1),D=$/(a+1),O=d,N=g,s=0;s<a;s++)N+=D,(f=(O+=L)+uRn(t,24)*z0n*h-h/2)<0?f=1:f>i&&(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;u<i&&e>0;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),489),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.a<p.c.c.length;)d=uG(N3(p),68),null!=(b=uG(uG(cQ(n.g,d.a),42).b,27).jh())&&m_(b,m)&&(n.d.d=d);break;case 1:for((i=new MO(n.c.g,n.c.f)).a*=.5,i.b*=.5,KR(i,n.c.i,n.c.j),r=M0n,g=new Ww(n.d.i);g.a<g.c.c.length;)(u=atn((d=uG(N3(g),68)).a,i))<r&&(r=u,n.d.d=d);break;default:throw hv(new vM(lnt+(null!=v.f?v.f:""+v.g)))}return n.d}function dYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(l=0,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)oM(gK(zDn(i=uG(Zkn(r),27),(jYn(),FMt))))||(xA(zDn(h=R0(i),Syt))===xA((yvn(),Fjt))&&xA(zDn(h,Fyt))!==xA((kvn(),lgt))&&xA(zDn(h,Fyt))!==xA((kvn(),hgt))&&!oM(gK(zDn(h,Cyt)))&&xA(zDn(h,kyt))===xA((Uvn(),tbt))&&xA(zDn(h,yMt))!==xA((THn(),Pjt))&&xA(zDn(h,yMt))!==xA((THn(),Cjt))&&xA(zDn(h,MMt))!==xA((MKn(),JTt))&&xA(zDn(h,MMt))!==xA((MKn(),ZTt))||oM(gK(zDn(i,jyt)))||(Myn(i,(GYn(),imt),xwn(l)),++l),RJn(n,i,e));for(l=0,s=new DD((!t.b&&(t.b=new fV(aFt,t,12,3)),t.b));s.e!=s.i.gc();)o=uG(Zkn(s),74),(xA(zDn(t,(jYn(),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(l)),++l),d=bIn(o),g=gIn(o),f=oM(gK(zDn(d,sMt))),w=!oM(gK(zDn(o,FMt))),b=f&&BNn(o)&&oM(gK(zDn(o,hMt))),c=R0(d)==t&&R0(d)==R0(g),a=(R0(d)==t&&g==t)^(R0(g)==t&&d==t),w&&!b&&(a||c)&&FYn(n,o,t,e);if(R0(t))for(u=new DD(xY(R0(t)));u.e!=u.i.gc();)(d=bIn(o=uG(Zkn(u),74)))==t&&BNn(o)&&(b=oM(gK(zDn(d,(jYn(),sMt))))&&oM(gK(zDn(o,hMt))))&&FYn(n,o,t,e)}function gYn(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,P,C,I,O,A;for(e.Ug("Greedy cycle removal",1),A=(v=t.a).c.length,n.a=Inn(YHt,W1n,28,A,15,1),n.c=Inn(YHt,W1n,28,A,15,1),n.b=Inn(YHt,W1n,28,A,15,1),s=0,p=new Ww(v);p.a<p.c.c.length;){for((d=uG(N3(p),10)).p=s,j=new Ww(d.j);j.a<j.c.c.length;){for(o=new Ww((y=uG(N3(j),12)).e);o.a<o.c.c.length;)(i=uG(N3(o),18)).c.i!=d&&(S=uG(oIn(i,(jYn(),aTt)),17).a,n.a[s]+=S>0?S+1:1);for(a=new Ww(y.g);a.a<a.c.c.length;)(i=uG(N3(a),18)).d.i!=d&&(S=uG(oIn(i,(jYn(),aTt)),17).a,n.c[s]+=S>0?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--,iUn(n,C),--A;for(;0!=n.f.b;)I=uG(tG(n.f),10),n.b[I.p]=b++,iUn(n,I),--A;if(A>0){for(l=j1n,m=new Ww(v);m.a<m.c.c.length;)d=uG(N3(m),10),0==n.b[d.p]&&(k=n.c[d.p]-n.a[d.p])>=l&&(k>l&&(f.c.length=0,l=k),mv(f.c,d));h=n.sg(f),n.b[h.p]=b++,iUn(n,h),--A}}for(P=v.c.length+1,s=0;s<v.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Ww(v);g.a<g.c.c.length;)for(T=0,E=(M=s6((d=uG(N3(g),10)).j)).length;T<E;++T)for(c=0,u=(r=x4((y=M[T]).g)).length;c<u;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.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;h<T.c.length;h++){for(v=uG(zq(T,i?T.c.length-1-h:h),8),c=Fkn(r,0);c.b!=c.d.c;)p=uG(I6(c),166),(g=uG(DA(FX(y.f,p)),13)).c.length<=h?yrn(c):(k=JF(new eN(uG(zq(g,i?g.c.length-1-h:h),8)),uG(DA(FX(b.f,p)),8)),v.a==k.a&&v.b==k.b||(a=v.a-m.a,u=v.b-m.b,(o=k.a-m.a)*u==(s=k.b-m.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==o||isNaN(o)?o:o<0?-1:1)&&(0==u||isNaN(u)?u:u<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(o)||e.Math.abs(u)<e.Math.abs(s))&&s8(f,v,f.c.b,f.c):h>1&&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,39,t.gc(),0,1),a=0;a<h.gc();a++)r=uG(h.Xb(a),39),(E=uG(oIn(r,(QGn(),kCt)),17).a)>=0&&E<h.gc()&&!d[E]&&(d[E]=r,h.gd(a),--a);for(o=0;o<h.gc();o++)for(r=uG(h.Xb(o),39),E=uG(oIn(r,(QGn(),kCt)),17).a,l=0;;l++){if((b=E+l)<d.length&&b>=0&&!d[b]){d[b]=r,h.gd(o),--o;break}if((b=E-l)<d.length&&b>=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),39),w.gd(0));for(s=0;s<d.length;s++)d[s]||S.dc()||(d[s]=uG(S.Xb(0),39),S.gd(0));for(c=0;c<d.length;c++)kfn(d[c],(OQn(),KPt),xwn(c));for(T=0,j=(M=f=uG(bmn(JJ(new fX(null,new h3(t,16)),new po),new lo),534)).length;T<j;++T){for(mYn(n,i=Lhn(y=M[T]),e.eh(1/f.length|0)),hZ(),Lon(i,new Sm((OQn(),KPt))),g=new lS,k=Fkn(i,0);k.b!=k.d.c;)for(v=uG(I6(k),39),m=Fkn(y.d,0);m.b!=m.d.c;)(p=uG(I6(m),65)).c==v&&s8(g,p,g.c.b,g.c);BY(y.d),Qon(y.d,g)}e.Vg()}function vYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(i=new Zm,o=new Zm,g=t/2,b=n.gc(),r=uG(n.Xb(0),8),p=uG(n.Xb(1),8),kD(i,(u3(0,(w=UDn(r.a,r.b,p.a,p.b,g)).c.length),uG(w.c[0],8))),kD(o,(u3(1,w.c.length),uG(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=uG(n.Xb(s),8),kD(i,(u3(1,(w=UDn(r.a,r.b,d.a,d.b,g)).c.length),uG(w.c[1],8))),kD(o,(u3(0,w.c.length),uG(w.c[0],8))),kD(i,(u3(0,(w=UDn(r.a,r.b,p.a,p.b,g)).c.length),uG(w.c[0],8))),kD(o,(u3(1,w.c.length),uG(w.c[1],8)));for(kD(i,(u3(1,(w=UDn(p.a,p.b,r.a,r.b,g)).c.length),uG(w.c[1],8))),kD(o,(u3(0,w.c.length),uG(w.c[0],8))),e=new Uk,a=new Zm,aq(e,(u3(0,i.c.length),uG(i.c[0],8))),h=1;h<i.c.length-2;h+=2)u3(h,i.c.length),c=uG(i.c[h],8),l=OAn((u3(h-1,i.c.length),uG(i.c[h-1],8)),c,(u3(h+1,i.c.length),uG(i.c[h+1],8)),(u3(h+2,i.c.length),uG(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?s8(e,l,e.c.b,e.c):s8(e,c,e.c.b,e.c);for(aq(e,uG(zq(i,i.c.length-1),8)),kD(a,(u3(0,o.c.length),uG(o.c[0],8))),f=1;f<o.c.length-2;f+=2)u3(f,o.c.length),c=uG(o.c[f],8),l=OAn((u3(f-1,o.c.length),uG(o.c[f-1],8)),c,(u3(f+1,o.c.length),uG(o.c[f+1],8)),(u3(f+2,o.c.length),uG(o.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?mv(a.c,l):mv(a.c,c);for(kD(a,uG(zq(o,o.c.length-1),8)),u=a.c.length-1;u>=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=uzn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),v,n.b),g=0;g<p.c.length;g++)if(u3(g,p.c.length),s=uG(p.c[g],186),0!=g&&(u3(g-1,p.c.length),Rbn(s,(w=uG(p.c[g-1],186)).f+w.b+n.b)),d=TYn(g,p,v,n.b,oM(gK(zDn(t,(S_n(),uAt))))),oM(gK(d.b))){for(a=new Ww(s.a);a.a<a.c.c.length;)(c=uG(N3(a),172)).c=!1,c.k=!1,EXn(c);s.d=new Zm,s.e=v,--g}else if(EEn(n,s),g+1<p.c.length&&(n.e=e.Math.max(s.e+n.b+uG(zq((u3(g+1,p.c.length),uG(p.c[g+1],186)).a,0),172).r-v,n.c),n.f=e.Math.min(s.e+n.b+uG(zq((u3(g+1,p.c.length),uG(p.c[g+1],186)).a,0),172).r-v,n.d),0!=s.d.c.length&&(n.c=e.Math.max(n.c,uG(zq(s.d,s.d.c.length-1),315).d+(s.d.c.length<=1?0:n.b)),n.d=e.Math.min(n.c,uG(zq(s.d,s.d.c.length-1),315).d+(s.d.c.length<=1?0:n.b)))),1==p.c.length)for(f=uG(zq(s.d,s.d.c.length-1),315),u=new Ww((h=uG(zq(f.a,f.a.c.length-1),172)).n);u.a<u.c.c.length;)o=uG(N3(u),209),n.c=e.Math.max(n.c,h.r-o.d),n.d=e.Math.min(n.d,h.r-o.d),n.e=e.Math.max(n.e,o.d+n.b),n.f=e.Math.min(n.f,o.d+n.b);return m=Xjn(p,n.b),k=e.Math.max(m.a,b-(i.b+i.c)),r=e.Math.max(m.b,l-(i.d+i.a))-m.b,Myn(t,pOt,r),Myn(t,SOt,p),new jq(n.a,k,m.b+r,(_Rn(),FAt))}function yYn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P;if((M=uG(oIn(n,(jYn(),JMt)),101))!=($Pn(),uRt)&&M!=sRt){for(s=new R7((man((b=(w=n.b).c.length)+2,v1n),arn(Lgn(Lgn(5,b+2),(b+2)/10|0)))),d=new R7((man(b+2,v1n),arn(Lgn(Lgn(5,b+2),(b+2)/10|0)))),kD(s,new Ym),kD(s,new Ym),kD(d,new Zm),kD(d,new Zm),y=new Zm,t=0;t<b;t++)for(u3(t,w.c.length),e=uG(w.c[t],30),u3(t,s.c.length),T=uG(s.c[t],85),g=new Ym,mv(s.c,g),u3(t,d.c.length),E=uG(d.c[t],15),m=new Zm,mv(d.c,m),r=new Ww(e.a);r.a<r.c.c.length;)if(Tdn(i=uG(N3(r),10)))mv(y.c,i);else{for(u=new Fz(ix(qgn(i).a.Kc(),new h));hDn(u);)Tdn(S=(a=uG(N9(u),18)).c.i)&&((j=uG(T.xc(oIn(S,(GYn(),rmt))),10))||(j=YLn(n,S),T.zc(oIn(S,rmt),j),E.Fc(j)),c2(a,uG(zq(j.j,1),12)));for(o=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(o);)Tdn(P=(a=uG(N9(o),18)).d.i)&&((p=uG(cQ(g,oIn(P,(GYn(),rmt))),10))||(p=YLn(n,P),vJ(g,oIn(P,rmt),p),mv(m.c,p)),u2(a,uG(zq(p.j,0),12)))}for(f=0;f<d.c.length;f++)if(u3(f,d.c.length),!(v=uG(d.c[f],15)).dc())for(l=null,0==f?(l=new bQ(n),o3(0,w.c.length),pC(w.c,0,l)):f==s.c.length-1?(l=new bQ(n),mv(w.c,l)):(u3(f-1,w.c.length),l=uG(w.c[f-1],30)),c=v.Kc();c.Ob();)a2(uG(c.Pb(),10),l);for(k=new Ww(y);k.a<k.c.c.length;)a2(uG(N3(k),10),null);kfn(n,(GYn(),Rpt),y)}}function MYn(n,t){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,P,C,I,O,A,L;for(O=new Zm,w=new Ww(t.b);w.a<w.c.c.length;)for(y=new Ww(uG(N3(w),30).a);y.a<y.c.c.length;){for((k=uG(N3(y),10)).p=-1,l=j1n,j=j1n,S=new Ww(k.j);S.a<S.c.c.length;){for(c=new Ww((E=uG(N3(S),12)).e);c.a<c.c.c.length;)i=uG(N3(c),18),P=uG(oIn(i,(jYn(),uTt)),17).a,l=e.Math.max(l,P);for(r=new Ww(E.g);r.a<r.c.c.length;)i=uG(N3(r),18),P=uG(oIn(i,(jYn(),uTt)),17).a,j=e.Math.max(j,P)}kfn(k,iSt,xwn(l)),kfn(k,rSt,xwn(j))}for(p=0,b=new Ww(t.b);b.a<b.c.c.length;)for(y=new Ww(uG(N3(b),30).a);y.a<y.c.c.length;)(k=uG(N3(y),10)).p<0&&((I=new Tk).b=p++,yBn(n,k,I),mv(O.c,I));for(T=iR(O.c.length),f=iR(O.c.length),o=0;o<O.c.length;o++)kD(T,new Zm),kD(f,xwn(0));for($Wn(t,O,T,f),A=uG(Ekn(O,Inn(oSt,C9n,261,O.c.length,0,1)),854),M=uG(Ekn(T,Inn(yat,H3n,15,T.c.length,0,1)),198),h=Inn(YHt,W1n,28,f.c.length,15,1),u=0;u<h.length;u++)h[u]=(u3(u,f.c.length),uG(f.c[u],17)).a;for(m=0,v=new Zm,s=0;s<A.length;s++)0==h[s]&&mv(v.c,A[s]);for(g=Inn(YHt,W1n,28,A.length,15,1);0!=v.c.length;)for(g[(I=uG(i7(v,0),261)).b]=m++;!M[I.b].dc();)--h[(L=uG(M[I.b].gd(0),261)).b],0==h[L.b]&&mv(v.c,L);for(n.a=Inn(oSt,C9n,261,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],C=g[a],n.a[C]=d,d.b=C,y=new Ww(d.e);y.a<y.c.c.length;)(k=uG(N3(y),10)).p=C;return n.a}function TYn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p;for(d=!1,u=!1,l=n+1,u3(n,t.c.length),o=(w=uG(t.c[n],186)).a,s=null,a=0;a<w.a.c.length;a++)if(u3(a,o.c.length),!(c=uG(o.c[a],172)).c)if(0!=c.b.c.length){if(c.k||(s&&OTn(s),oMn(c,(s=new r0(s?s.e+s.d+i:0,w.f,i)).e+s.d,w.f),kD(w.d,s),Gun(s,c),c.k=!0),h=null,p=null,a<w.a.c.length-1?p=uG(zq(w.a,a+1),172):l<t.c.length&&0!=(u3(l,t.c.length),uG(t.c[l],186)).a.c.length&&(p=uG(zq((u3(l,t.c.length),uG(t.c[l],186)).a,0),172)),g=!1,(h=p)&&(g=!udn(h.j,w)),h){if(0==h.b.c.length||oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))){uEn(w,h);break}if(dtn(c,e-c.s),OTn(c.q),d|=FIn(w,c,h,e,i),0==h.b.c.length)for(t.c.length>l&&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))))&&HUn(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<f){u=!0,h.j=w;break}continue}if(Ybn(w,c)){c.c=!0,d=!0;continue}}else if(Ybn(w,c)){c.c=!0,d=!0;continue}if(d)continue}Ybn(w,c)?(c.c=!0,d=!0,h&&(h.k=!1)):OTn(c.q)}else bS(),String.fromCharCode(10),uEn(w,c),--a,d=!0;return new WO((qx(),!!d),!!u)}function jYn(){jYn=E,XYn(),lTt=jDt,bTt=EDt,wTt=SDt,dTt=PDt,pTt=CDt,mTt=IDt,yTt=ADt,TTt=NDt,jTt=$Dt,MTt=LDt,ETt=DDt,PTt=xDt,ITt=FDt,kTt=ODt,VYn(),fTt=Akt,gTt=Lkt,vTt=Nkt,STt=$kt,cTt=new _N(vDt,xwn(0)),aTt=Ckt,oTt=Ikt,uTt=Okt,qTt=ryt,RTt=Rkt,KTt=_kt,BTt=Vkt,FTt=Ukt,_Tt=qkt,zTt=syt,XTt=ayt,UTt=nyt,HTt=Ykt,GTt=eyt,LMt=vkt,NMt=kkt,Zyt=Ovt,nMt=Nvt,NTt=HDt,DTt=XDt,LTt=BDt,ATt=_Dt,Iwn(),new _N(UDt,$Tt=fKt),BMt=new CN(12),_Mt=new _N(W$t,BMt),_gn(),Vyt=new _N(k$t,Wyt=uxt),QMt=new _N(uDt,0),sTt=new _N(kDt,xwn(1)),dyt=new _N(c$t,r4n),FMt=z$t,JMt=sDt,eTt=gDt,_yt=w$t,byt=i$t,rMt=E$t,hTt=new _N(TDt,(qx(),!0)),sMt=C$t,hMt=I$t,DMt=_$t,KMt=q$t,xMt=H$t,xdn(),Byt=new _N(d$t,Uyt=ZDt),PMt=K$t,SMt=x$t,nTt=bDt,ZMt=lDt,tTt=dDt,Vkn(),new _N(tDt,GMt=tRt),XMt=rDt,zMt=cDt,VMt=aDt,qMt=iDt,xTt=xkt,MMt=rkt,yMt=ekt,OTt=Dkt,gMt=Vvt,Fyt=gvt,Kyt=wvt,Cyt=Jmt,Iyt=Ymt,Ayt=ivt,Oyt=Zmt,Ryt=lvt,jMt=akt,EMt=okt,lMt=Bvt,$Mt=jkt,IMt=fkt,eMt=xvt,AMt=pkt,Jyt=Svt,Yyt=Cvt,Pyt=l$t,CMt=ukt,vyt=Fmt,myt=Rmt,pyt=xmt,aMt=Fvt,cMt=Kvt,oMt=_vt,RMt=U$t,bMt=L$t,tMt=M$t,Xyt=m$t,qyt=p$t,Lyt=avt,YMt=fDt,gyt=f$t,uMt=P$t,WMt=oDt,HMt=J$t,UMt=Z$t,mMt=Jvt,vMt=Zvt,rTt=mDt,wyt=Dmt,kMt=tkt,zyt=Mvt,Gyt=kvt,TMt=$$t,wMt=qvt,OMt=wkt,CTt=RDt,Hyt=mvt,iTt=Skt,Qyt=jvt,Nyt=uvt,$yt=svt,dMt=zvt,Dyt=hvt,fMt=A$t,pMt=Qvt,xyt=fvt,Syt=Wmt,Tyt=qmt,yyt=Umt,Myt=Gmt,jyt=zmt,kyt=Bmt,Eyt=Vmt,iMt=Rvt}function EYn(n){var t,e,i;if(n.d>=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&&41!=(t=VJ(n.i,n.d++)););if(41!=t)throw hv(new CM(rZn((t$(),cit))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw hv(new CM(rZn((t$(),iit))))}break;case 92:if(i=10,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==(512&n.e)&&n.d<n.j&&91==VJ(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==VJ(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==C0n&&n.d<n.j&&56320==(64512&(e=VJ(n.i,n.d)))&&(n.a=P0n+(t-C0n<<10)+e-56320,++n.d),i=0}n.c=i}}function SYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(e.Ug("Process compaction",1),oM(gK(oIn(t,(QGn(),iCt))))){for(r=uG(oIn(t,cCt),88),b=uM(pK(oIn(t,ECt))),AXn(n,t,r),fJn(t,b/2/2),Lon(w=t.b,new jp(r)),s=Fkn(w,0);s.b!=s.d.c;)if(!oM(gK(oIn(u=uG(I6(s),39),(OQn(),UPt))))){if(i=hBn(u,r),d=mqn(u,t),f=0,l=0,i)switch(g=i.e,r.g){case 2:f=g.a-b-u.f.a,d.e.a-b-u.f.a<f&&(f=d.e.a-b-u.f.a),l=f+u.f.a;break;case 1:f=g.a+i.f.a+b,d.e.a+b>f&&(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.b<f&&(f=d.e.b-b-u.f.b),l=f+u.f.b;break;case 3:f=g.b+i.f.b+b,d.e.b+b>f&&(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,MUn(e)),i=!0;break;case 105:case 73:case 99:case 67:TXn(a,MUn(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),szn(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<b.c.c.length;)for((l=uG(N3(b),10)).p=u++,c=new Fz(ix(Xgn(l).a.Kc(),new h));hDn(c);)(r=uG(N9(c),18)).p=a++;for(n.d=Inn(ZHt,B2n,28,u,16,1),n.a=Inn(ZHt,B2n,28,a,16,1),n.b=Inn(YHt,W1n,28,u,15,1),n.e=Inn(YHt,W1n,28,u,15,1),n.f=Inn(YHt,W1n,28,u,15,1),ban(n.c),BSn(n,t),d=new Kz(new Bg(n)),y=new Ww(t.a);y.a<y.c.c.length;){for(c=new Fz(ix(qgn(v=uG(N3(y),10)).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||++n.b[v.p];0==n.b[v.p]&&kG(_Cn(d,v),D0n)}for(o=0;0!=d.b.c.length;)for(v=uG(hin(d),10),n.f[v.p]=o++,c=new Fz(ix(Xgn(v).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(p=r.d.i,--n.b[p.p],UNn(n.c,p,xwn(n.f[v.p])),0==n.b[p.p]&&kG(_Cn(d,p),D0n));for(w=new Kz(new Hg(n)),k=new Ww(t.a);k.a<k.c.c.length;){for(c=new Fz(ix(Xgn(v=uG(N3(k),10)).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||++n.e[v.p];0==n.e[v.p]&&kG(_Cn(w,v),D0n)}for(i=CJ(t,f=new Zm);0!=w.b.c.length;)for(m=uG(hin(w),10),(i.a.c.length>=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:c<new Lw(n.a.b).a.gc();c+=t?-1:1)for(r=W6(n.a,xwn(c)),b=0;b<r.b;b++)if(vR(f=uG(hyn(r,b),10),(GYn(),imt))&&!(VSn(n.a,xwn(c))&&n.r==(THn(),Pjt)||WSn(n.a,xwn(c))&&n.r==(THn(),Cjt))){for(v=!0,p=0;p<r.b;p++)vR(g=uG(hyn(r,p),10),imt)&&(t&&uG(oIn(f,imt),17).a<uG(oIn(g,imt),17).a||!t&&uG(oIn(f,imt),17).a>uG(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).a<uG(oIn(f,imt),17).a:uG(oIn(u,imt),17).a>uG(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))<n.length&&(s3(u,n.length),58==n.charCodeAt(u))&&(Knn(o,u,n.length),f=n.substr(o,u-o),o=u+1),e=null!=f&&ZE(UFt,f.toLowerCase())){if(-1==(u=n.lastIndexOf("!/")))throw hv(new vM("no archive separator"));a=!0,i=r1(n,o,++u),o=u}else o>=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&&o<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(Knn(o+1,u=jkn(n,o+1,n_t,t_t),n.length),(h=n.substr(o+1,u-(o+1))).length>0&&58==VJ(h,h.length-1)&&(r=h,o=u)),o<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(++o,t=!0),o<n.length&&(s3(o,n.length),63!=n.charCodeAt(o))&&(s3(o,n.length),35!=n.charCodeAt(o))){for(l=new Zm;o<n.length&&(s3(o,n.length),63!=n.charCodeAt(o))&&(s3(o,n.length),35!=n.charCodeAt(o));)kD(l,(Knn(o,u=jkn(n,o,n_t,t_t),n.length),n.substr(o,u-o))),(o=u)<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(Ubn(n,++o)||l.c.push(""));Ekn(l,b=Inn($ot,zZn,2,l.c.length,6,1))}return o<n.length&&(s3(o,n.length),63==n.charCodeAt(o))&&(-1==(u=aR(n,35,++o))&&(u=n.length),Knn(o,u,n.length),s=n.substr(o,u-o),o=u),o<n.length&&(c=sQ(n,++o)),LVn(a,f,i,r,b,s),new Z_n(a,f,i,r,t,b,s,c)}function NYn(){NYn=E,aYn(),UNn(rbt=new K1,(KQn(),PRt),SRt),UNn(rbt,RRt,SRt),UNn(rbt,CRt,SRt),UNn(rbt,$Rt,SRt),UNn(rbt,NRt,SRt),UNn(rbt,ARt,SRt),UNn(rbt,$Rt,PRt),UNn(rbt,SRt,MRt),UNn(rbt,PRt,MRt),UNn(rbt,RRt,MRt),UNn(rbt,CRt,MRt),UNn(rbt,LRt,MRt),UNn(rbt,$Rt,MRt),UNn(rbt,NRt,MRt),UNn(rbt,ARt,MRt),UNn(rbt,ERt,MRt),UNn(rbt,SRt,DRt),UNn(rbt,PRt,DRt),UNn(rbt,MRt,DRt),UNn(rbt,RRt,DRt),UNn(rbt,CRt,DRt),UNn(rbt,LRt,DRt),UNn(rbt,$Rt,DRt),UNn(rbt,ERt,DRt),UNn(rbt,xRt,DRt),UNn(rbt,NRt,DRt),UNn(rbt,IRt,DRt),UNn(rbt,ARt,DRt),UNn(rbt,PRt,RRt),UNn(rbt,CRt,RRt),UNn(rbt,$Rt,RRt),UNn(rbt,ARt,RRt),UNn(rbt,PRt,CRt),UNn(rbt,RRt,CRt),UNn(rbt,$Rt,CRt),UNn(rbt,CRt,CRt),UNn(rbt,NRt,CRt),UNn(rbt,SRt,TRt),UNn(rbt,PRt,TRt),UNn(rbt,MRt,TRt),UNn(rbt,DRt,TRt),UNn(rbt,RRt,TRt),UNn(rbt,CRt,TRt),UNn(rbt,LRt,TRt),UNn(rbt,$Rt,TRt),UNn(rbt,xRt,TRt),UNn(rbt,ERt,TRt),UNn(rbt,ARt,TRt),UNn(rbt,NRt,TRt),UNn(rbt,ORt,TRt),UNn(rbt,SRt,xRt),UNn(rbt,PRt,xRt),UNn(rbt,MRt,xRt),UNn(rbt,RRt,xRt),UNn(rbt,CRt,xRt),UNn(rbt,LRt,xRt),UNn(rbt,$Rt,xRt),UNn(rbt,ERt,xRt),UNn(rbt,ARt,xRt),UNn(rbt,IRt,xRt),UNn(rbt,ORt,xRt),UNn(rbt,PRt,ERt),UNn(rbt,RRt,ERt),UNn(rbt,CRt,ERt),UNn(rbt,$Rt,ERt),UNn(rbt,xRt,ERt),UNn(rbt,ARt,ERt),UNn(rbt,NRt,ERt),UNn(rbt,SRt,jRt),UNn(rbt,PRt,jRt),UNn(rbt,MRt,jRt),UNn(rbt,RRt,jRt),UNn(rbt,CRt,jRt),UNn(rbt,LRt,jRt),UNn(rbt,$Rt,jRt),UNn(rbt,ERt,jRt),UNn(rbt,ARt,jRt),UNn(rbt,PRt,NRt),UNn(rbt,MRt,NRt),UNn(rbt,DRt,NRt),UNn(rbt,CRt,NRt),UNn(rbt,SRt,IRt),UNn(rbt,PRt,IRt),UNn(rbt,DRt,IRt),UNn(rbt,RRt,IRt),UNn(rbt,CRt,IRt),UNn(rbt,LRt,IRt),UNn(rbt,$Rt,IRt),UNn(rbt,$Rt,ORt),UNn(rbt,CRt,ORt),UNn(rbt,ERt,SRt),UNn(rbt,ERt,RRt),UNn(rbt,ERt,MRt),UNn(rbt,LRt,SRt),UNn(rbt,LRt,PRt),UNn(rbt,LRt,DRt)}function $Yn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(e.Ug("Brandes & Koepf node placement",1),n.a=t,n.c=ZGn(t),i=uG(oIn(t,(jYn(),IMt)),281),b=oM(gK(oIn(t,OMt))),n.d=i==(ESn(),Fgt)&&!b||i==xgt,mVn(n,t),k=null,y=null,g=null,p=null,man(4,g1n),d=new R7(4),uG(oIn(t,IMt),281).g){case 3:g=new WHn(t,n.c.d,(w0(),wSt),(b0(),hSt)),mv(d.c,g);break;case 1:p=new WHn(t,n.c.d,(w0(),dSt),(b0(),hSt)),mv(d.c,p);break;case 4:k=new WHn(t,n.c.d,(w0(),wSt),(b0(),fSt)),mv(d.c,k);break;case 2:y=new WHn(t,n.c.d,(w0(),dSt),(b0(),fSt)),mv(d.c,y);break;default:g=new WHn(t,n.c.d,(w0(),wSt),(b0(),hSt)),p=new WHn(t,n.c.d,dSt,hSt),k=new WHn(t,n.c.d,wSt,fSt),y=new WHn(t,n.c.d,dSt,fSt),mv(d.c,k),mv(d.c,y),mv(d.c,g),mv(d.c,p)}for(r=new LI(t,n.c),o=new Ww(d);o.a<o.c.c.length;)dJn(r,c=uG(N3(o),185),n.b),oXn(c);for(l=new xjn(t,n.c),u=new Ww(d);u.a<u.c.c.length;)HVn(l,c=uG(N3(u),185));if(e._g())for(s=new Ww(d);s.a<s.c.c.length;)c=uG(N3(s),185),e.bh(c+" size is "+uxn(c));if(f=null,n.d&&qqn(t,h=cJn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Ww(d);s.a<s.c.c.length;)qqn(t,c=uG(N3(s),185),e)&&(!f||uxn(f)>uxn(c))&&(f=c);for(!f&&(u3(0,d.c.length),f=uG(d.c[0],185)),w=new Ww(t.b);w.a<w.c.c.length;)for(v=new Ww(uG(N3(w),30).a);v.a<v.c.c.length;)(m=uG(N3(v),10)).n.b=uM(f.p[m.p])+uM(f.d[m.p]);for(e._g()&&(e.bh("Chosen node placement: "+f),e.bh("Blocks: "+O$n(f)),e.bh("Classes: "+$Dn(f,e)),e.bh("Marked edges: "+n.b)),a=new Ww(d);a.a<a.c.c.length;)(c=uG(N3(a),185)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;J6(n.c),n.b.a.$b(),e.Vg()}function DYn(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,P,C;if(1==n.c.length)return ySn((u3(0,n.c.length),uG(n.c[0],121))),u3(0,n.c.length),uG(n.c[0],121);if(n.c.length<=0)return new L7;for(s=new Ww(n);s.a<s.c.c.length;){for(o=uG(N3(s),121),v=0,d=vZn,g=vZn,b=j1n,w=j1n,m=Fkn(o.b,0);m.b!=m.d.c;)p=uG(I6(m),39),v+=uG(oIn(p,(QGn(),yCt)),17).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);kfn(o,(QGn(),yCt),xwn(v)),kfn(o,(OQn(),kPt),new MO(d,g)),kfn(o,vPt,new MO(b,w))}for(hZ(),f$(n,new Ta),zsn(y=new L7,(u3(0,n.c.length),uG(n.c[0],96))),l=0,S=0,h=new Ww(n);h.a<h.c.c.length;)o=uG(N3(h),121),M=YF(D$(uG(oIn(o,(OQn(),vPt)),8)),uG(oIn(o,kPt),8)),l=e.Math.max(l,M.a),S+=M.a*M.b;for(l=e.Math.max(l,e.Math.sqrt(S)*uM(pK(oIn(y,(QGn(),eCt))))),P=0,C=0,f=0,t=T=uM(pK(oIn(y,ECt))),u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),121),P+(M=YF(D$(uG(oIn(o,(OQn(),vPt)),8)),uG(oIn(o,kPt),8))).a>l&&(P=0,C+=f+T,f=0),rUn(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<E.c.c.length;)for(r=oM(gK(oIn(j=uG(N3(E),121),(XYn(),w$t)))),a=(j.q?j.q:Vot).vc().Kc();a.Ob();)PV(k,(c=uG(a.Pb(),44)).ld())?xA(uG(c.ld(),149).Sg())!==xA(c.md())&&(r&&PV(i,c.ld())?(bS(),uG(c.ld(),149).Pg(),String.fromCharCode(10)):(vJ(k,uG(c.ld(),149),c.md()),kfn(y,uG(c.ld(),149),c.md()),r&&vJ(i,uG(c.ld(),149),c.md()))):(vJ(k,uG(c.ld(),149),c.md()),kfn(y,uG(c.ld(),149),c.md()));return ySn(y),y}function xYn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new yZ(n.b,n.a,t,n.c);case 1:return new TD(n.a,t,emn(t.Dh(),n.c));case 43:return new CD(n.a,t,emn(t.Dh(),n.c));case 3:return new MD(n.a,t,emn(t.Dh(),n.c));case 45:return new PD(n.a,t,emn(t.Dh(),n.c));case 41:return new ltn(uG(bEn(n.c),29),n.a,t,emn(t.Dh(),n.c));case 50:return new xan(uG(bEn(n.c),29),n.a,t,emn(t.Dh(),n.c));case 5:return new r_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 47:return new c_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 7:return new fV(n.a,t,emn(t.Dh(),n.c),n.d.n);case 49:return new i_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 9:return new SD(n.a,t,emn(t.Dh(),n.c));case 11:return new ED(n.a,t,emn(t.Dh(),n.c));case 13:return new jD(n.a,t,emn(t.Dh(),n.c));case 15:return new _G(n.a,t,emn(t.Dh(),n.c));case 17:return new AD(n.a,t,emn(t.Dh(),n.c));case 19:return new OD(n.a,t,emn(t.Dh(),n.c));case 21:return new ID(n.a,t,emn(t.Dh(),n.c));case 23:return new FG(n.a,t,emn(t.Dh(),n.c));case 25:return new l_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 27:return new f_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 29:return new s_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 31:return new a_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 33:return new h_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 35:return new u_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 37:return new o_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 39:return new wV(n.a,t,emn(t.Dh(),n.c),n.d.n);case 40:return new wsn(t,emn(t.Dh(),n.c));default:throw hv(new Ky("Unknown feature style: "+n.e))}}function RYn(n){var t,e,i,r,c,a,o,u;for(c=0,r=n.a.b,u=Fkn(n.a,0);u.b!=u.d.c;){if(o=uG(I6(u),240),a=(c+1)/(r+1),!n.c&&!n.d)return;n.c&&!n.d?(n.g=!0,n.b==(xdn(),JDt)?(i=n.c.e.b+n.c.f.b+n.e*(c+1),t=new MO(uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.c,DPt)))-n.e,i)):n.b==YDt?(i=n.c.e.b+n.c.f.b+n.e*(c+1),t=new MO(uM(pK(oIn(n.c,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.c,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.c.e.a+n.c.f.a+n.e*(c+1),uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.c,DPt)))-n.e)):(t=new MO(i=n.c.e.a+n.c.f.a+n.e*(c+1),uM(pK(oIn(n.c,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.c,$Pt)))+n.e))):n.c&&n.d?n.b==(xdn(),JDt)?(i=n.d.e.b*a+(n.c.e.b+n.c.f.b)*(1-a),t=new MO(uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.c,DPt)))-n.e,i)):n.b==YDt?(i=n.d.e.b*a+(n.c.e.b+n.c.f.b)*(1-a),t=new MO(uM(pK(oIn(n.c,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.c,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.d.e.a*a+(n.c.e.a+n.c.f.a)*(1-a),uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.c,DPt)))-n.e)):(t=new MO(i=n.d.e.a*a+(n.c.e.a+n.c.f.a)*(1-a),uM(pK(oIn(n.c,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.c,$Pt)))+n.e)):(n.f=!0,n.b==(xdn(),JDt)?(i=n.d.e.b-n.e*(c+1),t=new MO(uM(pK(oIn(n.d,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.d,DPt)))-n.e,i)):n.b==YDt?(i=n.d.e.b-n.e*(c+1),t=new MO(uM(pK(oIn(n.d,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.d,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.d.e.a-n.e*(c+1),uM(pK(oIn(n.d,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.d,DPt)))-n.e)):(t=new MO(i=n.d.e.a-n.e*(c+1),uM(pK(oIn(n.d,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.d,$Pt)))+n.e))),uG(o.a,8).a=t.a,uG(o.a,8).b=t.b,o.b.a=e.a,o.b.b=e.b,++c}}function KYn(n,t,e,i,r,c){var a,o,u,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-V1n>=-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:tUn(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),304),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),304),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;w<k;w++)T[w]=0,d[w]=0;for(s=uG(l8(_0(new fX(null,new h3(n.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();s.Ob();)if(u=uG(s.Pb(),65),P=uG(oIn(u.b,(QGn(),ACt)),17).a,(v=(I=uG(oIn(u.c,ACt),17).a)-P)>1)for(o=P+1;o<I;o++){if(h=o,y=uG(l8(JJ(new fX(null,new h3(n.b,16)),new Np(h)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),b=0,t==(xdn(),JDt)||t==YDt){for(y.jd(new so),b=0;b<y.gc()&&(g=(o-P)/(I-P),!(uG(y.Xb(b),39).e.b>u.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),39).e),uG(y.Xb(y.gc()-1),39).f),f=JF(D$(uG(y.Xb(0),39).e),uG(y.Xb(0),39).f),b>=y.gc()-1&&C.b>m.b&&u.c.e.b>m.b)continue;if(b<=0&&C.b<f.a&&u.c.e.b<f.b)continue}}else{for(y.jd(new ho),b=0;b<y.gc()&&(g=(o-P)/(I-P),!(uG(y.Xb(b),39).e.a>u.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),39).e),uG(y.Xb(y.gc()-1),39).f),f=JF(D$(uG(y.Xb(0),39).e),uG(y.Xb(0),39).f),b>=y.gc()-1&&C.a>m.a&&u.c.e.a>m.a)continue;if(b<=0&&C.a<f.a&&u.c.e.a<f.a)continue}}r=new sj,c=new sj,aq(u.a,r),aq(u.a,c),a=new LU(r,c,u),PV(M,Hvn(p=S3(Nz(o,32),E3(b,L0n))))?(aq((l=uG(cQ(M,Hvn(p)),675)).a,a),hN(l.b)?Lon(l.a,new vo):Lon(l.a,new ko),RYn(l)):(l=new wTn(0==b?null:uG(y.Xb(b-1),39),b==y.gc()?null:uG(y.Xb(b),39),a,n),vJ(M,Hvn(p),l)),t==JDt||t==YDt?(l.f&&l.d.e.b<=uM(pK(oIn(n,(OQn(),IPt))))&&++j,l.g&&l.c.e.b+l.c.f.b>=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),r<s?-1:r>s?1:0;for(d=0,g=(w=n.c).length;d<g;++d){if((b=w[d])==c)return hHn(n,i,u),1;if(b==h)return hHn(n,u,i),-1}}return 0!=i.g.c.length&&0!=u.g.c.length?(o=uG(oIn(i,(GYn(),tmt)),10),l=uG(oIn(u,tmt),10),n.e==(yvn(),Bjt)&&o&&l&&vR(o,imt)&&vR(l,imt)?((r=uG(oIn(o,imt),17).a)>(s=uG(oIn(l,imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?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),a<f?-1:a>f?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),a<f?-1:a>f?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),r<s?-1:r>s?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),39)).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;c<d;c++)o=1==d?.5:(1+c)/(d+1),t==JDt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.a+f.f.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+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+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+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,297,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((oUn(),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;N<x;++N)for(G=new Ww((C=O[N]).j);G.a<G.c.c.length;){for(X=0,u=new Ww((U=uG(N3(G),12)).g);u.a<u.c.c.length;)o=uG(N3(u),18),C.c!=o.d.i.c&&++X;X>0&&(n.a[U.p]=Y++)}for(rn=0,$=0,R=(A=i).length;$<R;++$){for(K=0,G=new Ww((C=A[$]).j);G.a<G.c.c.length&&(U=uG(N3(G),12)).j==(KQn(),yRt);)for(u=new Ww(U.e);u.a<u.c.c.length;)if(o=uG(N3(u),18),C.c!=o.c.i.c){++K;break}for(_=0,z=new N4(C.j,C.j.c.length);z.b>0;){for(MK(z.b>0),X=0,u=new Ww((U=uG(z.a.Xb(z.c=--z.b),12)).e);u.a<u.c.c.length;)o=uG(N3(u),18),C.c!=o.c.i.c&&++X;X>0&&(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;L<D;++L)for(tn=new Ww((C=I[L]).j);tn.a<tn.c.c.length;)for(u=new Ww((nn=uG(N3(tn),12)).g);u.a<u.c.c.length;)if(an=(o=uG(N3(u),18)).d,C.c!=an.i.c)if(Z=uG(DA(FX(q.f,nn)),477),cn=uG(DA(FX(q.f,an)),477),Z||cn)if(Z)if(cn)if(Z==cn)kD(Z.a,o);else{for(kD(Z.a,o),H=new Ww(cn.d);H.a<H.c.c.length;)B=uG(N3(H),12),VAn(q.f,B,Z);Ohn(Z.a,cn.a),Ohn(Z.d,cn.d),d.a.Bc(cn)}else kD(Z.a,o),kD(Z.d,an),VAn(q.f,an,Z);else kD(cn.a,o),kD(cn.d,nn),VAn(q.f,nn,cn);else w=new BF,d.a.zc(w,d),kD(w.a,o),kD(w.d,nn),VAn(q.f,nn,w),kD(w.d,an),VAn(q.f,an,w);for(g=uG(oTn(d,Inn(QEt,{3:1,4:1,5:1,2045:1},477,d.a.gc(),0,1)),2045),P=t[0].c,J=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=Y,h.f=rn,G=new Ww(h.d);G.a<G.c.c.length;)U=uG(N3(G),12),V=n.a[U.p],U.i.c==P?(V<h.e&&(h.e=V),V>h.b&&(h.b=V)):U.i.c==J&&(V<h.f&&(h.f=V),V>h.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;m<g.length;m++)en[m]=g[m].f,r[en[m]]=1;for(a=0,v=0;v<r.length;v++)1==r[v]?r[v]=a:--a;for(W=0,k=0;k<en.length;k++)en[k]+=r[en[k]],W=e.Math.max(W,en[k]+1);for(s=1;s<W;)s*=2;for(un=2*s-1,s-=1,on=Inn(YHt,W1n,28,un,15,1),c=0,E=0;E<en.length;E++)for(++on[j=en[E]+s];j>0;)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;y<g.length;y++)S[2*y]=new bY(g[y],g[y].e,g[y].b,(Z6(),YEt)),S[2*y+1]=new bY(g[y],g[y].b,g[y].e,JEt);for(Ntn(S,0,S.length,null),F=0,M=0;M<S.length;M++)switch(S[M].d.g){case 0:++F;break;case 1:c+=--F}for(Q=Inn(ZEt,EZn,374,2*g.length,0,1),T=0;T<g.length;T++)Q[2*T]=new bY(g[T],g[T].f,g[T].c,(Z6(),YEt)),Q[2*T+1]=new bY(g[T],g[T].c,g[T].f,JEt);for(Ntn(Q,0,Q.length,null),F=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++F;break;case 1:c+=--F}return c}function QYn(){QYn=E,OHt=new Qm(7),AHt=new IX(8,94),new IX(8,64),LHt=new IX(8,36),KHt=new IX(8,65),FHt=new IX(8,122),_Ht=new IX(8,90),UHt=new IX(8,98),xHt=new IX(8,66),BHt=new IX(8,60),GHt=new IX(8,62),IHt=new Qm(11),HFn(CHt=new K3(4),48,57),HFn(HHt=new K3(4),48,57),HFn(HHt,65,90),HFn(HHt,95,95),HFn(HHt,97,122),HFn(RHt=new K3(4),9,9),HFn(RHt,10,10),HFn(RHt,12,12),HFn(RHt,13,13),HFn(RHt,32,32),NHt=FGn(CHt),DHt=FGn(HHt),$Ht=FGn(RHt),jHt=new Ym,EHt=new Ym,SHt=Uhn(cT($ot,1),zZn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),THt=Uhn(cT($ot,1),zZn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",eat,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),PHt=Uhn(cT(YHt,1),W1n,28,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function JYn(){JYn=E,oht=new pun("OUT_T_L",0,(Ktn(),Ast),(Yen(),Rst),(Yrn(),jst),jst,Uhn(cT(kat,1),EZn,21,0,[WX((VDn(),qxt),Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt]))])),aht=new pun("OUT_T_C",1,Ost,Rst,jst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt,Hxt]))])),uht=new pun("OUT_T_R",2,Lst,Rst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt]))])),Yst=new pun("OUT_B_L",3,Ast,Fst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt]))])),Jst=new pun("OUT_B_C",4,Ost,Fst,Sst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt,Hxt]))])),Zst=new pun("OUT_B_R",5,Lst,Fst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt]))])),eht=new pun("OUT_L_T",6,Lst,Fst,jst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,Vxt,Hxt]))])),tht=new pun("OUT_L_C",7,Lst,Kst,Est,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,zxt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,zxt,Hxt]))])),nht=new pun("OUT_L_B",8,Lst,Rst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,Xxt,Hxt]))])),cht=new pun("OUT_R_T",9,Ast,Fst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,Vxt,Hxt]))])),rht=new pun("OUT_R_C",10,Ast,Kst,Est,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,zxt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,zxt,Hxt]))])),iht=new pun("OUT_R_B",11,Ast,Rst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,Xxt,Hxt]))])),Wst=new pun("IN_T_L",12,Ast,Fst,jst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt,Hxt]))])),Vst=new pun("IN_T_C",13,Ost,Fst,jst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt,Hxt]))])),Qst=new pun("IN_T_R",14,Lst,Fst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt,Hxt]))])),Xst=new pun("IN_C_L",15,Ast,Kst,Est,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Bxt,Hxt]))])),qst=new pun("IN_C_C",16,Ost,Kst,Est,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,_xt,Hxt]))])),zst=new pun("IN_C_R",17,Lst,Kst,Est,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Uxt,Hxt]))])),Ust=new pun("IN_B_L",18,Ast,Rst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt,Hxt]))])),Hst=new pun("IN_B_C",19,Ost,Rst,Sst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt,Hxt]))])),Gst=new pun("IN_B_R",20,Lst,Rst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt,Hxt]))])),sht=new pun(Y2n,21,null,null,null,null,Uhn(cT(kat,1),EZn,21,0,[]))}function YYn(){YYn=E,j_t=(tQ(),M_t).b,uG(zrn(gZ(M_t.b),0),35),uG(zrn(gZ(M_t.b),1),19),T_t=M_t.a,uG(zrn(gZ(M_t.a),0),35),uG(zrn(gZ(M_t.a),1),19),uG(zrn(gZ(M_t.a),2),19),uG(zrn(gZ(M_t.a),3),19),uG(zrn(gZ(M_t.a),4),19),E_t=M_t.o,uG(zrn(gZ(M_t.o),0),35),uG(zrn(gZ(M_t.o),1),35),P_t=uG(zrn(gZ(M_t.o),2),19),uG(zrn(gZ(M_t.o),3),19),uG(zrn(gZ(M_t.o),4),19),uG(zrn(gZ(M_t.o),5),19),uG(zrn(gZ(M_t.o),6),19),uG(zrn(gZ(M_t.o),7),19),uG(zrn(gZ(M_t.o),8),19),uG(zrn(gZ(M_t.o),9),19),uG(zrn(gZ(M_t.o),10),19),uG(zrn(gZ(M_t.o),11),19),uG(zrn(gZ(M_t.o),12),19),uG(zrn(gZ(M_t.o),13),19),uG(zrn(gZ(M_t.o),14),19),uG(zrn(gZ(M_t.o),15),19),uG(zrn(dZ(M_t.o),0),62),uG(zrn(dZ(M_t.o),1),62),uG(zrn(dZ(M_t.o),2),62),uG(zrn(dZ(M_t.o),3),62),uG(zrn(dZ(M_t.o),4),62),uG(zrn(dZ(M_t.o),5),62),uG(zrn(dZ(M_t.o),6),62),uG(zrn(dZ(M_t.o),7),62),uG(zrn(dZ(M_t.o),8),62),uG(zrn(dZ(M_t.o),9),62),S_t=M_t.p,uG(zrn(gZ(M_t.p),0),35),uG(zrn(gZ(M_t.p),1),35),uG(zrn(gZ(M_t.p),2),35),uG(zrn(gZ(M_t.p),3),35),uG(zrn(gZ(M_t.p),4),19),uG(zrn(gZ(M_t.p),5),19),uG(zrn(dZ(M_t.p),0),62),uG(zrn(dZ(M_t.p),1),62),C_t=M_t.q,uG(zrn(gZ(M_t.q),0),35),I_t=M_t.v,uG(zrn(gZ(M_t.v),0),19),uG(zrn(dZ(M_t.v),0),62),uG(zrn(dZ(M_t.v),1),62),uG(zrn(dZ(M_t.v),2),62),O_t=M_t.w,uG(zrn(gZ(M_t.w),0),35),uG(zrn(gZ(M_t.w),1),35),uG(zrn(gZ(M_t.w),2),35),uG(zrn(gZ(M_t.w),3),19),A_t=M_t.B,uG(zrn(gZ(M_t.B),0),19),uG(zrn(dZ(M_t.B),0),62),uG(zrn(dZ(M_t.B),1),62),uG(zrn(dZ(M_t.B),2),62),$_t=M_t.Q,uG(zrn(gZ(M_t.Q),0),19),uG(zrn(dZ(M_t.Q),0),62),D_t=M_t.R,uG(zrn(gZ(M_t.R),0),35),x_t=M_t.S,uG(zrn(dZ(M_t.S),0),62),uG(zrn(dZ(M_t.S),1),62),uG(zrn(dZ(M_t.S),2),62),uG(zrn(dZ(M_t.S),3),62),uG(zrn(dZ(M_t.S),4),62),uG(zrn(dZ(M_t.S),5),62),uG(zrn(dZ(M_t.S),6),62),uG(zrn(dZ(M_t.S),7),62),uG(zrn(dZ(M_t.S),8),62),uG(zrn(dZ(M_t.S),9),62),uG(zrn(dZ(M_t.S),10),62),uG(zrn(dZ(M_t.S),11),62),uG(zrn(dZ(M_t.S),12),62),uG(zrn(dZ(M_t.S),13),62),uG(zrn(dZ(M_t.S),14),62),R_t=M_t.T,uG(zrn(gZ(M_t.T),0),19),uG(zrn(gZ(M_t.T),2),19),K_t=uG(zrn(gZ(M_t.T),3),19),uG(zrn(gZ(M_t.T),4),19),uG(zrn(dZ(M_t.T),0),62),uG(zrn(dZ(M_t.T),1),62),uG(zrn(gZ(M_t.T),1),19),F_t=M_t.U,uG(zrn(gZ(M_t.U),0),35),uG(zrn(gZ(M_t.U),1),35),uG(zrn(gZ(M_t.U),2),19),uG(zrn(gZ(M_t.U),3),19),uG(zrn(gZ(M_t.U),4),19),uG(zrn(gZ(M_t.U),5),19),uG(zrn(dZ(M_t.U),0),62),__t=M_t.V,uG(zrn(gZ(M_t.V),0),19),B_t=M_t.W,uG(zrn(gZ(M_t.W),0),35),uG(zrn(gZ(M_t.W),1),35),uG(zrn(gZ(M_t.W),2),35),uG(zrn(gZ(M_t.W),3),19),uG(zrn(gZ(M_t.W),4),19),uG(zrn(gZ(M_t.W),5),19),U_t=M_t.bb,uG(zrn(gZ(M_t.bb),0),35),uG(zrn(gZ(M_t.bb),1),35),uG(zrn(gZ(M_t.bb),2),35),uG(zrn(gZ(M_t.bb),3),35),uG(zrn(gZ(M_t.bb),4),35),uG(zrn(gZ(M_t.bb),5),35),uG(zrn(gZ(M_t.bb),6),35),uG(zrn(gZ(M_t.bb),7),19),uG(zrn(dZ(M_t.bb),0),62),uG(zrn(dZ(M_t.bb),1),62),G_t=M_t.eb,uG(zrn(gZ(M_t.eb),0),35),uG(zrn(gZ(M_t.eb),1),35),uG(zrn(gZ(M_t.eb),2),35),uG(zrn(gZ(M_t.eb),3),35),uG(zrn(gZ(M_t.eb),4),35),uG(zrn(gZ(M_t.eb),5),35),uG(zrn(gZ(M_t.eb),6),19),uG(zrn(gZ(M_t.eb),7),19),H_t=M_t.ab,uG(zrn(gZ(M_t.ab),0),35),uG(zrn(gZ(M_t.ab),1),35),L_t=M_t.H,uG(zrn(gZ(M_t.H),0),19),uG(zrn(gZ(M_t.H),1),19),uG(zrn(gZ(M_t.H),2),19),uG(zrn(gZ(M_t.H),3),19),uG(zrn(gZ(M_t.H),4),19),uG(zrn(gZ(M_t.H),5),19),uG(zrn(dZ(M_t.H),0),62),q_t=M_t.db,uG(zrn(gZ(M_t.db),0),19),N_t=M_t.M}function ZYn(n){var t;n.O||(n.O=!0,qon(n,"type"),Xon(n,"ecore.xml.type"),zon(n,lct),t=uG(jxn((MP(),l_t),lct),2044),ttn(n1(n.fb),n.b),A4(n.b,DBt,"AnyType",!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.wb.D,jrt,null,0,-1,DBt,!1,!1,!0,!1,!1,!1),mun(uG(zrn(gZ(n.b),1),35),n.wb.D,"any",null,0,-1,DBt,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.b),2),35),n.wb.D,"anyAttribute",null,0,-1,DBt,!1,!1,!0,!1,!1,!1),A4(n.bb,lHt,pct,!1,!1,!0),mun(uG(zrn(gZ(n.bb),0),35),n.gb,"data",null,0,1,lHt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),1),35),n.gb,Ret,null,1,1,lHt,!1,!1,!0,!1,!0,!1),A4(n.fb,bHt,mct,!1,!1,!0),mun(uG(zrn(gZ(n.fb),0),35),t.gb,"rawValue",null,0,1,bHt,!0,!0,!0,!1,!0,!0),mun(uG(zrn(gZ(n.fb),1),35),t.a,uet,null,0,1,bHt,!0,!0,!0,!1,!0,!0),ujn(uG(zrn(gZ(n.fb),2),19),n.wb.q,null,"instanceType",1,1,bHt,!1,!1,!0,!1,!1,!1,!1),A4(n.qb,wHt,vct,!1,!1,!0),mun(uG(zrn(gZ(n.qb),0),35),n.wb.D,jrt,null,0,-1,null,!1,!1,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.qb),1),19),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.qb),2),19),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.qb),3),35),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.qb),4),35),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),ujn(uG(zrn(gZ(n.qb),5),19),n.bb,null,qct,0,-2,null,!0,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.qb),6),35),n.gb,get,null,0,-2,null,!0,!0,!0,!1,!1,!0),UJ(n.a,dat,"AnySimpleType",!0),UJ(n.c,$ot,"AnyURI",!0),UJ(n.d,cT(tUt,1),"Base64Binary",!0),UJ(n.e,ZHt,"Boolean",!0),UJ(n.f,cot,"BooleanObject",!0),UJ(n.g,tUt,"Byte",!0),UJ(n.i,uot,"ByteObject",!0),UJ(n.j,$ot,"Date",!0),UJ(n.k,$ot,"DateTime",!0),UJ(n.n,Bot,"Decimal",!0),UJ(n.o,eUt,"Double",!0),UJ(n.p,fot,"DoubleObject",!0),UJ(n.q,$ot,"Duration",!0),UJ(n.s,yat,"ENTITIES",!0),UJ(n.r,yat,"ENTITIESBase",!0),UJ(n.t,$ot,Ect,!0),UJ(n.u,iUt,"Float",!0),UJ(n.v,lot,"FloatObject",!0),UJ(n.w,$ot,"GDay",!0),UJ(n.B,$ot,"GMonth",!0),UJ(n.A,$ot,"GMonthDay",!0),UJ(n.C,$ot,"GYear",!0),UJ(n.D,$ot,"GYearMonth",!0),UJ(n.F,cT(tUt,1),"HexBinary",!0),UJ(n.G,$ot,"ID",!0),UJ(n.H,$ot,"IDREF",!0),UJ(n.J,yat,"IDREFS",!0),UJ(n.I,yat,"IDREFSBase",!0),UJ(n.K,YHt,"Int",!0),UJ(n.M,Xot,"Integer",!0),UJ(n.L,dot,"IntObject",!0),UJ(n.P,$ot,"Language",!0),UJ(n.Q,nUt,"Long",!0),UJ(n.R,yot,"LongObject",!0),UJ(n.S,$ot,"Name",!0),UJ(n.T,$ot,Sct,!0),UJ(n.U,Xot,"NegativeInteger",!0),UJ(n.V,$ot,xct,!0),UJ(n.X,yat,"NMTOKENS",!0),UJ(n.W,yat,"NMTOKENSBase",!0),UJ(n.Y,Xot,"NonNegativeInteger",!0),UJ(n.Z,Xot,"NonPositiveInteger",!0),UJ(n.$,$ot,"NormalizedString",!0),UJ(n._,$ot,"NOTATION",!0),UJ(n.ab,$ot,"PositiveInteger",!0),UJ(n.cb,$ot,"QName",!0),UJ(n.db,rUt,"Short",!0),UJ(n.eb,Tot,"ShortObject",!0),UJ(n.gb,$ot,C1n,!0),UJ(n.hb,$ot,"Time",!0),UJ(n.ib,$ot,"Token",!0),UJ(n.jb,rUt,"UnsignedByte",!0),UJ(n.kb,Tot,"UnsignedByteObject",!0),UJ(n.lb,nUt,"UnsignedInt",!0),UJ(n.mb,yot,"UnsignedIntObject",!0),UJ(n.nb,Xot,"UnsignedLong",!0),UJ(n.ob,YHt,"UnsignedShort",!0),UJ(n.pb,dot,"UnsignedShortObject",!0),nwn(n,lct),iZn(n))}function nZn(n,t,i,r){var 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;if(r.$g())return hZ(),hZ(),zot;if(oM(gK(zDn(t,(XYn(),z$t)))))return hZ(),hZ(),zot;if(M=0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,T=!(j=bLn(t)).dc(),M||T){if(!(c=uG(zDn(t,yDt),143)))throw hv(new jM("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(U=bA(c,(rDn(),yFt)),gkn(t),!M&&T&&!U)return hZ(),hZ(),zot;if(m=new Zm,xA(zDn(t,E$t))===xA((Own(),Ixt))&&(bA(c,mFt)||bA(c,pFt))){if(oM(gK(zDn(t,HDt))))throw hv(new jM("Topdown layout cannot be used together with hierarchy handling."));for(N=dBn(n,t),Qon($=new lS,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=$.b;)gkn(A=uG(0==$.b?null:(MK(0!=$.b),Lrn($,$.a.a)),27)),xA(zDn(A,E$t))===xA(Axt)||vnn(A,e$t)&&!k9(c,zDn(A,yDt))?(Ohn(m,nZn(n,A,i,r)),Myn(A,E$t,Axt),UHn(A)):Qon($,(!A.a&&(A.a=new fV(bFt,A,10,11)),A.a))}else{if(N=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,oM(gK(zDn(t,HDt)))){if((G=r.eh(1)).Ug(Lnt,1),null==zDn(t,UDt))throw hv(new jM(t.k+" has not been assigned a top-down node type."));if(uG(zDn(t,UDt),280)==(Iwn(),fKt)||uG(zDn(t,UDt),280)==bKt)for(p=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));p.e!=p.i.gc();)if(g=uG(Zkn(p),27),O=uG(zDn(g,yDt),143),(!g.a&&(g.a=new fV(bFt,g,10,11)),g.a).i>0&&(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<R&&(v.Hc((ZSn(),VNt))?a=(b/2-d*x/2)/x:v.Hc(QNt)&&(a=(b-d*x)/x)),x<K&&(v.Hc((ZSn(),YNt))?o=(l/2-w*x/2)/x:v.Hc(JNt)&&(o=(l-w*x)/x)),q=a+(D.b/x-D.b),X=o+(D.d/x-D.d),G.bh("Shift: ("+q+"|"+X+")"),L=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));L.e!=L.i.gc();)ycn(A=uG(Zkn(L),27),A.i+q),Mcn(A,A.j+X);for(y=new DD((!t.b&&(t.b=new fV(aFt,t,12,3)),t.b));y.e!=y.i.gc();){for(_=new DD((!(k=uG(Zkn(y),74)).a&&(k.a=new fV(oFt,k,6,6)),k.a));_.e!=_.i.gc();)for(MN(F=uG(Zkn(_),166),F.j+q,F.k+X),yN(F,F.b+q,F.c+X),s=new DD((!F.a&&(F.a=new MD(eFt,F,5)),F.a));s.e!=s.i.gc();)mN(u=uG(Zkn(s),377),u.a+q,u.b+X);for(I=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));I.e!=I.i.gc();)kN(C=uG(Zkn(I),135),C.i+q,C.j+X);for(S=Fkn(P=uG(zDn(k,L$t),75),0);S.b!=S.d.c;)(E=uG(I6(S),8)).a+=q,E.b+=X;Myn(k,L$t,P)}}G.Vg()}for(f=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));f.e!=f.i.gc();)Ohn(m,nZn(n,h=uG(Zkn(f),27),i,r)),UHn(h)}if(r.$g())return hZ(),hZ(),zot;for(B=new Ww(m);B.a<B.c.c.length;)Myn(uG(N3(B),74),z$t,(qx(),!0));return oM(gK(zDn(t,HDt)))||Mkn(t,c,r.eh(N)),yUn(m),T&&U?j:(hZ(),hZ(),zot)}return hZ(),hZ(),zot}function tZn(n,t){var e;return yHt||(yHt=new Ym,MHt=new Ym,QYn(),QYn(),zmn(e=new K3(4),"\t\n\r\r "),r2(yHt,Jct,e),r2(MHt,Jct,FGn(e)),zmn(e=new K3(4),nat),r2(yHt,Wct,e),r2(MHt,Wct,FGn(e)),zmn(e=new K3(4),nat),r2(yHt,Wct,e),r2(MHt,Wct,FGn(e)),zmn(e=new K3(4),tat),TXn(e,uG(U1(yHt,Wct),122)),r2(yHt,Qct,e),r2(MHt,Qct,FGn(e)),zmn(e=new K3(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\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\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\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\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\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\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),r2(yHt,Yct,e),r2(MHt,Yct,FGn(e)),zmn(e=new K3(4),tat),HFn(e,95,95),HFn(e,58,58),r2(yHt,Zct,e),r2(MHt,Zct,FGn(e))),uG(U1(t?yHt:MHt,n),138)}function eZn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,S0n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Tc),S0n),WX((rDn(),jFt),Uhn(cT(PFt,1),p1n,245,0,[yFt,MFt,kFt,TFt,mFt,pFt]))))),U4(n,S0n,A8n,Jkn(lTt)),U4(n,S0n,L8n,Jkn(bTt)),U4(n,S0n,D3n,Jkn(wTt)),U4(n,S0n,N8n,Jkn(dTt)),U4(n,S0n,u4n,Jkn(pTt)),U4(n,S0n,$8n,Jkn(mTt)),U4(n,S0n,D8n,Jkn(yTt)),U4(n,S0n,x8n,Jkn(TTt)),U4(n,S0n,R8n,Jkn(jTt)),U4(n,S0n,K8n,Jkn(MTt)),U4(n,S0n,o4n,Jkn(ETt)),U4(n,S0n,F8n,Jkn(PTt)),U4(n,S0n,_8n,Jkn(ITt)),U4(n,S0n,B8n,Jkn(kTt)),U4(n,S0n,O5n,Jkn(fTt)),U4(n,S0n,L5n,Jkn(gTt)),U4(n,S0n,A5n,Jkn(vTt)),U4(n,S0n,N5n,Jkn(STt)),U4(n,S0n,a4n,xwn(0)),U4(n,S0n,$5n,Jkn(aTt)),U4(n,S0n,D5n,Jkn(oTt)),U4(n,S0n,x5n,Jkn(uTt)),U4(n,S0n,U5n,Jkn(qTt)),U4(n,S0n,G5n,Jkn(RTt)),U4(n,S0n,q5n,Jkn(KTt)),U4(n,S0n,X5n,Jkn(BTt)),U4(n,S0n,z5n,Jkn(FTt)),U4(n,S0n,V5n,Jkn(_Tt)),U4(n,S0n,W5n,Jkn(zTt)),U4(n,S0n,Q5n,Jkn(XTt)),U4(n,S0n,J5n,Jkn(UTt)),U4(n,S0n,Y5n,Jkn(HTt)),U4(n,S0n,Z5n,Jkn(GTt)),U4(n,S0n,T5n,Jkn(LMt)),U4(n,S0n,j5n,Jkn(NMt)),U4(n,S0n,P5n,Jkn(Zyt)),U4(n,S0n,C5n,Jkn(nMt)),U4(n,S0n,k4n,Jkn(NTt)),U4(n,S0n,y4n,Jkn(DTt)),U4(n,S0n,M4n,Jkn(LTt)),U4(n,S0n,T4n,Jkn(ATt)),U4(n,S0n,j4n,$Tt),U4(n,S0n,K3n,BMt),U4(n,S0n,m8n,Wyt),U4(n,S0n,H8n,0),U4(n,S0n,s4n,xwn(1)),U4(n,S0n,R3n,r4n),U4(n,S0n,U8n,Jkn(FMt)),U4(n,S0n,l4n,Jkn(JMt)),U4(n,S0n,G8n,Jkn(eTt)),U4(n,S0n,q8n,Jkn(_yt)),U4(n,S0n,X8n,Jkn(byt)),U4(n,S0n,b8n,Jkn(rMt)),U4(n,S0n,h4n,(qx(),!0)),U4(n,S0n,z8n,Jkn(sMt)),U4(n,S0n,V8n,Jkn(hMt)),U4(n,S0n,p4n,Jkn(DMt)),U4(n,S0n,g4n,Jkn(KMt)),U4(n,S0n,d4n,Jkn(xMt)),U4(n,S0n,W8n,Uyt),U4(n,S0n,m4n,Jkn(PMt)),U4(n,S0n,Q8n,Jkn(SMt)),U4(n,S0n,v4n,Jkn(nTt)),U4(n,S0n,J8n,Jkn(ZMt)),U4(n,S0n,Y8n,Jkn(tTt)),U4(n,S0n,Z8n,GMt),U4(n,S0n,n9n,Jkn(XMt)),U4(n,S0n,t9n,Jkn(zMt)),U4(n,S0n,e9n,Jkn(VMt)),U4(n,S0n,i9n,Jkn(qMt)),U4(n,S0n,W6n,Jkn(xTt)),U4(n,S0n,Y6n,Jkn(MMt)),U4(n,S0n,r5n,Jkn(yMt)),U4(n,S0n,V6n,Jkn(OTt)),U4(n,S0n,Z6n,Jkn(gMt)),U4(n,S0n,J6n,Jkn(Fyt)),U4(n,S0n,o5n,Jkn(Kyt)),U4(n,S0n,u5n,Jkn(Cyt)),U4(n,S0n,d5n,Jkn(Iyt)),U4(n,S0n,g5n,Jkn(Ayt)),U4(n,S0n,p5n,Jkn(Oyt)),U4(n,S0n,h5n,Jkn(Ryt)),U4(n,S0n,G6n,Jkn(jMt)),U4(n,S0n,q6n,Jkn(EMt)),U4(n,S0n,U6n,Jkn(lMt)),U4(n,S0n,m5n,Jkn($Mt)),U4(n,S0n,y5n,Jkn(IMt)),U4(n,S0n,H6n,Jkn(eMt)),U4(n,S0n,M5n,Jkn(AMt)),U4(n,S0n,E5n,Jkn(Jyt)),U4(n,S0n,S5n,Jkn(Yyt)),U4(n,S0n,r9n,Jkn(Pyt)),U4(n,S0n,k5n,Jkn(CMt)),U4(n,S0n,K5n,Jkn(vyt)),U4(n,S0n,F5n,Jkn(myt)),U4(n,S0n,R5n,Jkn(pyt)),U4(n,S0n,_5n,Jkn(aMt)),U4(n,S0n,B5n,Jkn(cMt)),U4(n,S0n,H5n,Jkn(oMt)),U4(n,S0n,x4n,Jkn(RMt)),U4(n,S0n,c9n,Jkn(bMt)),U4(n,S0n,x3n,Jkn(tMt)),U4(n,S0n,a9n,Jkn(Xyt)),U4(n,S0n,b4n,Jkn(qyt)),U4(n,S0n,s5n,Jkn(Lyt)),U4(n,S0n,o9n,Jkn(YMt)),U4(n,S0n,u9n,Jkn(gyt)),U4(n,S0n,s9n,Jkn(uMt)),U4(n,S0n,h9n,Jkn(WMt)),U4(n,S0n,f9n,Jkn(HMt)),U4(n,S0n,l9n,Jkn(UMt)),U4(n,S0n,e5n,Jkn(mMt)),U4(n,S0n,i5n,Jkn(vMt)),U4(n,S0n,b9n,Jkn(rTt)),U4(n,S0n,X6n,Jkn(wyt)),U4(n,S0n,c5n,Jkn(kMt)),U4(n,S0n,n8n,Jkn(zyt)),U4(n,S0n,t8n,Jkn(Gyt)),U4(n,S0n,w9n,Jkn(TMt)),U4(n,S0n,a5n,Jkn(wMt)),U4(n,S0n,v5n,Jkn(OMt)),U4(n,S0n,d9n,Jkn(CTt)),U4(n,S0n,B6n,Jkn(Hyt)),U4(n,S0n,z6n,Jkn(iTt)),U4(n,S0n,I5n,Jkn(Qyt)),U4(n,S0n,f5n,Jkn(Nyt)),U4(n,S0n,l5n,Jkn($yt)),U4(n,S0n,n5n,Jkn(dMt)),U4(n,S0n,b5n,Jkn(Dyt)),U4(n,S0n,g9n,Jkn(fMt)),U4(n,S0n,t5n,Jkn(pMt)),U4(n,S0n,w5n,Jkn(xyt)),U4(n,S0n,e8n,Jkn(Syt)),U4(n,S0n,a8n,Jkn(Tyt)),U4(n,S0n,o8n,Jkn(yyt)),U4(n,S0n,u8n,Jkn(Myt)),U4(n,S0n,r8n,Jkn(jyt)),U4(n,S0n,c8n,Jkn(kyt)),U4(n,S0n,i8n,Jkn(Eyt)),U4(n,S0n,Q6n,Jkn(iMt))}function iZn(n){Hxn(n.a,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anySimpleType"])),Hxn(n.b,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anyType",Srt,jrt])),Hxn(uG(zrn(gZ(n.b),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,Bet,":mixed"])),Hxn(uG(zrn(gZ(n.b),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,fct,bct,Bet,":1",Mct,"lax"])),Hxn(uG(zrn(gZ(n.b),2),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ict,fct,bct,Bet,":2",Mct,"lax"])),Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anyURI",hct,act])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"base64Binary",hct,act])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,dZn,hct,act])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"boolean:Object",Krt,dZn])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,lrt])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"byte:Object",Krt,lrt])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"date",hct,act])),Hxn(n.k,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"dateTime",hct,act])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"decimal",hct,act])),Hxn(n.o,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,wrt,hct,act])),Hxn(n.p,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"double:Object",Krt,wrt])),Hxn(n.q,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"duration",hct,act])),Hxn(n.s,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"ENTITIES",Krt,Tct,jct,"1"])),Hxn(n.r,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Tct,oct,Ect])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Ect,Krt,Sct])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,drt,hct,act])),Hxn(n.v,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"float:Object",Krt,drt])),Hxn(n.w,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gDay",hct,act])),Hxn(n.B,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gMonth",hct,act])),Hxn(n.A,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gMonthDay",hct,act])),Hxn(n.C,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gYear",hct,act])),Hxn(n.D,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gYearMonth",hct,act])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"hexBinary",hct,act])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"ID",Krt,Sct])),Hxn(n.H,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"IDREF",Krt,Sct])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"IDREFS",Krt,Pct,jct,"1"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Pct,oct,"IDREF"])),Hxn(n.K,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,grt])),Hxn(n.M,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Cct])),Hxn(n.L,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"int:Object",Krt,grt])),Hxn(n.P,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"language",Krt,Ict,Oct,Act])),Hxn(n.Q,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,prt])),Hxn(n.R,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"long:Object",Krt,prt])),Hxn(n.S,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"Name",Krt,Ict,Oct,Lct])),Hxn(n.T,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Sct,Krt,"Name",Oct,Nct])),Hxn(n.U,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"negativeInteger",Krt,$ct,Dct,"-1"])),Hxn(n.V,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,xct,Krt,Ict,Oct,"\\c+"])),Hxn(n.X,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"NMTOKENS",Krt,Rct,jct,"1"])),Hxn(n.W,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Rct,oct,xct])),Hxn(n.Y,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Kct,Krt,Cct,Fct,"0"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,$ct,Krt,Cct,Dct,"0"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,_ct,Krt,pZn,hct,"replace"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"NOTATION",hct,act])),Hxn(n.ab,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"positiveInteger",Krt,Kct,Fct,"1"])),Hxn(n.bb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"processingInstruction_._type",Srt,"empty"])),Hxn(uG(zrn(gZ(n.bb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"data"])),Hxn(uG(zrn(gZ(n.bb),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,Ret])),Hxn(n.cb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"QName",hct,act])),Hxn(n.db,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,mrt])),Hxn(n.eb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"short:Object",Krt,mrt])),Hxn(n.fb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"simpleAnyType",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":3",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":4",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),2),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":5",Srt,tct])),Hxn(n.gb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,pZn,hct,"preserve"])),Hxn(n.hb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"time",hct,act])),Hxn(n.ib,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Ict,Krt,_ct,hct,act])),Hxn(n.jb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Bct,Dct,"255",Fct,"0"])),Hxn(n.kb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedByte:Object",Krt,Bct])),Hxn(n.lb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Hct,Dct,"4294967295",Fct,"0"])),Hxn(n.mb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedInt:Object",Krt,Hct])),Hxn(n.nb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedLong",Krt,Kct,Dct,Uct,Fct,"0"])),Hxn(n.ob,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Gct,Dct,"65535",Fct,"0"])),Hxn(n.pb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedShort:Object",Krt,Gct])),Hxn(n.qb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"",Srt,jrt])),Hxn(uG(zrn(gZ(n.qb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,Bet,":mixed"])),Hxn(uG(zrn(gZ(n.qb),1),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"xmlns:prefix"])),Hxn(uG(zrn(gZ(n.qb),2),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"xsi:schemaLocation"])),Hxn(uG(zrn(gZ(n.qb),3),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,"cDATA",uct,sct])),Hxn(uG(zrn(gZ(n.qb),4),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,"comment",uct,sct])),Hxn(uG(zrn(gZ(n.qb),5),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,qct,uct,sct])),Hxn(uG(zrn(gZ(n.qb),6),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,get,uct,sct]))}function rZn(n){return m_("_UI_EMFDiagnostic_marker",n)?"EMF Problem":m_("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":m_(nit,n)?"Wrong character.":m_(tit,n)?"Invalid reference number.":m_(eit,n)?"A character is required after \\.":m_(iit,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":m_(rit,n)?"'(?<' or '(?<!' is expected.":m_(cit,n)?"A comment is not terminated.":m_(ait,n)?"')' is expected.":m_(oit,n)?"Unexpected end of the pattern in a modifier group.":m_(uit,n)?"':' is expected.":m_(sit,n)?"Unexpected end of the pattern in a conditional group.":m_(hit,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":m_(fit,n)?"There are more than three choices in a conditional group.":m_(lit,n)?"A character in U+0040-U+005f must follow \\c.":m_(bit,n)?"A '{' is required before a character category.":m_(wit,n)?"A property name is not closed by '}'.":m_(dit,n)?"Unexpected meta character.":m_(git,n)?"Unknown property.":m_(pit,n)?"A POSIX character class must be closed by ':]'.":m_(mit,n)?"Unexpected end of the pattern in a character class.":m_(vit,n)?"Unknown name for a POSIX character class.":m_("parser.cc.4",n)?"'-' is invalid here.":m_(kit,n)?"']' is expected.":m_(yit,n)?"'[' is invalid in a character class. Write '\\['.":m_(Mit,n)?"']' is invalid in a character class. Write '\\]'.":m_(Tit,n)?"'-' is an invalid character range. Write '\\-'.":m_(jit,n)?"'[' is expected.":m_(Eit,n)?"')' or '-[' or '+[' or '&[' is expected.":m_(Sit,n)?"The range end code point is less than the start code point.":m_(Pit,n)?"Invalid Unicode hex notation.":m_(Cit,n)?"Overflow in a hex notation.":m_(Iit,n)?"'\\x{' must be closed by '}'.":m_(Oit,n)?"Invalid Unicode code point.":m_(Ait,n)?"An anchor must not be here.":m_(Lit,n)?"This expression is not supported in the current option setting.":m_(Nit,n)?"Invalid quantifier. A digit is expected.":m_($it,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":m_(Dit,n)?"Invalid quantifier. A digit or '}' is expected.":m_(xit,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":m_(Rit,n)?"Invalid quantifier. A quantity value overflow.":m_("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":m_("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":m_("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":m_("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":m_("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":m_("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":m_("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":m_("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":m_("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":m_("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":m_("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":m_("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":m_("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":m_("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":m_("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":m_("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":m_("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":m_("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":m_("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":m_("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":m_("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":m_("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":m_("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":m_("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":m_("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":m_("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":m_("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":m_("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":m_("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":m_("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":m_("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function cZn(n){var t,e,i,r,c,a,o;n.r||(n.r=!0,qon(n,"graph"),Xon(n,"graph"),zon(n,aet),mhn(n.o,"T"),ttn(n1(n.a),n.p),ttn(n1(n.f),n.a),ttn(n1(n.n),n.f),ttn(n1(n.g),n.n),ttn(n1(n.c),n.n),ttn(n1(n.i),n.c),ttn(n1(n.j),n.c),ttn(n1(n.d),n.f),ttn(n1(n.e),n.a),A4(n.p,Pht,m3n,!0,!0,!1),o=_hn(a=Kln(n.p,n.p,"setProperty")),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),rPn(e,i=$Y(o)),OSn(a,t,oet),OSn(a,t=$Y(o),uet),o=_hn(a=Kln(n.p,null,"getProperty")),t=NY(n.o),e=$Y(o),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(a,t,oet),(c=CCn(a,t=$Y(o),null))&&c.oj(),a=Kln(n.p,n.wb.e,"hasProperty"),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(a,t,oet),djn(a=Kln(n.p,n.p,"copyProperties"),n.p,set),a=Kln(n.p,null,"getAllProperties"),t=NY(n.wb.P),e=NY(n.o),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),i=new ev,ttn((!e.d&&(e.d=new MD(g_t,e,1)),e.d),i),e=NY(n.wb.M),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(r=CCn(a,t,null))&&r.oj(),A4(n.a,tFt,Att,!0,!1,!0),ujn(uG(zrn(gZ(n.a),0),19),n.k,null,het,0,-1,tFt,!1,!1,!0,!0,!1,!1,!1),A4(n.f,iFt,Ntt,!0,!1,!0),ujn(uG(zrn(gZ(n.f),0),19),n.g,uG(zrn(gZ(n.g),0),19),"labels",0,-1,iFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.f),1),35),n.wb._,fet,null,0,1,iFt,!1,!1,!0,!1,!0,!1),A4(n.n,rFt,"ElkShape",!0,!1,!0),mun(uG(zrn(gZ(n.n),0),35),n.wb.t,bet,N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),1),35),n.wb.t,wet,N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),2),35),n.wb.t,"x",N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),3),35),n.wb.t,"y",N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.n,null,"setDimensions"),n.wb.t,wet),djn(a,n.wb.t,bet),djn(a=Kln(n.n,null,"setLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.g,lFt,Ftt,!1,!1,!0),ujn(uG(zrn(gZ(n.g),0),19),n.f,uG(zrn(gZ(n.f),0),19),det,0,1,lFt,!1,!1,!0,!1,!1,!1,!1),mun(uG(zrn(gZ(n.g),1),35),n.wb._,get,"",0,1,lFt,!1,!1,!0,!1,!0,!1),A4(n.c,cFt,$tt,!0,!1,!0),ujn(uG(zrn(gZ(n.c),0),19),n.d,uG(zrn(gZ(n.d),1),19),"outgoingEdges",0,-1,cFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.c),1),19),n.d,uG(zrn(gZ(n.d),2),19),"incomingEdges",0,-1,cFt,!1,!1,!0,!1,!0,!1,!1),A4(n.i,bFt,_tt,!1,!1,!0),ujn(uG(zrn(gZ(n.i),0),19),n.j,uG(zrn(gZ(n.j),0),19),"ports",0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.i),1),19),n.i,uG(zrn(gZ(n.i),2),19),pet,0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.i),2),19),n.i,uG(zrn(gZ(n.i),1),19),det,0,1,bFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.i),3),19),n.d,uG(zrn(gZ(n.d),0),19),"containedEdges",0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.i),4),35),n.wb.e,met,null,0,1,bFt,!0,!0,!1,!1,!0,!0),A4(n.j,wFt,Btt,!1,!1,!0),ujn(uG(zrn(gZ(n.j),0),19),n.i,uG(zrn(gZ(n.i),0),19),det,0,1,wFt,!1,!1,!0,!1,!1,!1,!1),A4(n.d,aFt,Dtt,!1,!1,!0),ujn(uG(zrn(gZ(n.d),0),19),n.i,uG(zrn(gZ(n.i),3),19),"containingNode",0,1,aFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.d),1),19),n.c,uG(zrn(gZ(n.c),0),19),vet,0,-1,aFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.d),2),19),n.c,uG(zrn(gZ(n.c),1),19),ket,0,-1,aFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.d),3),19),n.e,uG(zrn(gZ(n.e),5),19),yet,0,-1,aFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.d),4),35),n.wb.e,"hyperedge",null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),5),35),n.wb.e,met,null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),6),35),n.wb.e,"selfloop",null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),7),35),n.wb.e,"connected",null,0,1,aFt,!0,!0,!1,!1,!0,!0),A4(n.b,eFt,Ltt,!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.wb.t,"x",N0n,1,1,eFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.b),1),35),n.wb.t,"y",N0n,1,1,eFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.b,null,"set"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.e,oFt,xtt,!1,!1,!0),mun(uG(zrn(gZ(n.e),0),35),n.wb.t,"startX",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),1),35),n.wb.t,"startY",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),2),35),n.wb.t,"endX",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),3),35),n.wb.t,"endY",null,0,1,oFt,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.e),4),19),n.b,null,Met,0,-1,oFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.e),5),19),n.d,uG(zrn(gZ(n.d),3),19),det,0,1,oFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.e),6),19),n.c,null,Tet,0,1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),7),19),n.c,null,jet,0,1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),8),19),n.e,uG(zrn(gZ(n.e),9),19),Eet,0,-1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),9),19),n.e,uG(zrn(gZ(n.e),8),19),Set,0,-1,oFt,!1,!1,!0,!1,!0,!1,!1),mun(uG(zrn(gZ(n.e),10),35),n.wb._,fet,null,0,1,oFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.e,null,"setStartLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),djn(a=Kln(n.e,null,"setEndLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.k,Sat,"ElkPropertyToValueMapEntry",!1,!1,!1),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),N$n(uG(zrn(gZ(n.k),0),35),t,"key",Sat,!1,!1,!0,!1),mun(uG(zrn(gZ(n.k),1),35),n.s,uet,null,0,1,Sat,!1,!1,!0,!1,!0,!1),UJ(n.o,lNt,"IProperty",!0),UJ(n.s,dat,"PropertyValue",!0),nwn(n,aet))}function aZn(){aZn=E,(vHt=Inn(tUt,ret,28,P0n,15,1))[9]=35,vHt[10]=19,vHt[13]=19,vHt[32]=51,vHt[33]=49,vHt[34]=33,qV(vHt,35,38,49),vHt[38]=1,qV(vHt,39,45,49),qV(vHt,45,47,-71),vHt[47]=49,qV(vHt,48,58,-71),vHt[58]=61,vHt[59]=49,vHt[60]=1,vHt[61]=49,vHt[62]=33,qV(vHt,63,65,49),qV(vHt,65,91,-3),qV(vHt,91,93,33),vHt[93]=1,vHt[94]=33,vHt[95]=-3,vHt[96]=33,qV(vHt,97,123,-3),qV(vHt,123,183,33),vHt[183]=-87,qV(vHt,184,192,33),qV(vHt,192,215,-19),vHt[215]=33,qV(vHt,216,247,-19),vHt[247]=33,qV(vHt,248,306,-19),qV(vHt,306,308,33),qV(vHt,308,319,-19),qV(vHt,319,321,33),qV(vHt,321,329,-19),vHt[329]=33,qV(vHt,330,383,-19),vHt[383]=33,qV(vHt,384,452,-19),qV(vHt,452,461,33),qV(vHt,461,497,-19),qV(vHt,497,500,33),qV(vHt,500,502,-19),qV(vHt,502,506,33),qV(vHt,506,536,-19),qV(vHt,536,592,33),qV(vHt,592,681,-19),qV(vHt,681,699,33),qV(vHt,699,706,-19),qV(vHt,706,720,33),qV(vHt,720,722,-87),qV(vHt,722,768,33),qV(vHt,768,838,-87),qV(vHt,838,864,33),qV(vHt,864,866,-87),qV(vHt,866,902,33),vHt[902]=-19,vHt[903]=-87,qV(vHt,904,907,-19),vHt[907]=33,vHt[908]=-19,vHt[909]=33,qV(vHt,910,930,-19),vHt[930]=33,qV(vHt,931,975,-19),vHt[975]=33,qV(vHt,976,983,-19),qV(vHt,983,986,33),vHt[986]=-19,vHt[987]=33,vHt[988]=-19,vHt[989]=33,vHt[990]=-19,vHt[991]=33,vHt[992]=-19,vHt[993]=33,qV(vHt,994,1012,-19),qV(vHt,1012,1025,33),qV(vHt,1025,1037,-19),vHt[1037]=33,qV(vHt,1038,1104,-19),vHt[1104]=33,qV(vHt,1105,1117,-19),vHt[1117]=33,qV(vHt,1118,1154,-19),vHt[1154]=33,qV(vHt,1155,1159,-87),qV(vHt,1159,1168,33),qV(vHt,1168,1221,-19),qV(vHt,1221,1223,33),qV(vHt,1223,1225,-19),qV(vHt,1225,1227,33),qV(vHt,1227,1229,-19),qV(vHt,1229,1232,33),qV(vHt,1232,1260,-19),qV(vHt,1260,1262,33),qV(vHt,1262,1270,-19),qV(vHt,1270,1272,33),qV(vHt,1272,1274,-19),qV(vHt,1274,1329,33),qV(vHt,1329,1367,-19),qV(vHt,1367,1369,33),vHt[1369]=-19,qV(vHt,1370,1377,33),qV(vHt,1377,1415,-19),qV(vHt,1415,1425,33),qV(vHt,1425,1442,-87),vHt[1442]=33,qV(vHt,1443,1466,-87),vHt[1466]=33,qV(vHt,1467,1470,-87),vHt[1470]=33,vHt[1471]=-87,vHt[1472]=33,qV(vHt,1473,1475,-87),vHt[1475]=33,vHt[1476]=-87,qV(vHt,1477,1488,33),qV(vHt,1488,1515,-19),qV(vHt,1515,1520,33),qV(vHt,1520,1523,-19),qV(vHt,1523,1569,33),qV(vHt,1569,1595,-19),qV(vHt,1595,1600,33),vHt[1600]=-87,qV(vHt,1601,1611,-19),qV(vHt,1611,1619,-87),qV(vHt,1619,1632,33),qV(vHt,1632,1642,-87),qV(vHt,1642,1648,33),vHt[1648]=-87,qV(vHt,1649,1720,-19),qV(vHt,1720,1722,33),qV(vHt,1722,1727,-19),vHt[1727]=33,qV(vHt,1728,1743,-19),vHt[1743]=33,qV(vHt,1744,1748,-19),vHt[1748]=33,vHt[1749]=-19,qV(vHt,1750,1765,-87),qV(vHt,1765,1767,-19),qV(vHt,1767,1769,-87),vHt[1769]=33,qV(vHt,1770,1774,-87),qV(vHt,1774,1776,33),qV(vHt,1776,1786,-87),qV(vHt,1786,2305,33),qV(vHt,2305,2308,-87),vHt[2308]=33,qV(vHt,2309,2362,-19),qV(vHt,2362,2364,33),vHt[2364]=-87,vHt[2365]=-19,qV(vHt,2366,2382,-87),qV(vHt,2382,2385,33),qV(vHt,2385,2389,-87),qV(vHt,2389,2392,33),qV(vHt,2392,2402,-19),qV(vHt,2402,2404,-87),qV(vHt,2404,2406,33),qV(vHt,2406,2416,-87),qV(vHt,2416,2433,33),qV(vHt,2433,2436,-87),vHt[2436]=33,qV(vHt,2437,2445,-19),qV(vHt,2445,2447,33),qV(vHt,2447,2449,-19),qV(vHt,2449,2451,33),qV(vHt,2451,2473,-19),vHt[2473]=33,qV(vHt,2474,2481,-19),vHt[2481]=33,vHt[2482]=-19,qV(vHt,2483,2486,33),qV(vHt,2486,2490,-19),qV(vHt,2490,2492,33),vHt[2492]=-87,vHt[2493]=33,qV(vHt,2494,2501,-87),qV(vHt,2501,2503,33),qV(vHt,2503,2505,-87),qV(vHt,2505,2507,33),qV(vHt,2507,2510,-87),qV(vHt,2510,2519,33),vHt[2519]=-87,qV(vHt,2520,2524,33),qV(vHt,2524,2526,-19),vHt[2526]=33,qV(vHt,2527,2530,-19),qV(vHt,2530,2532,-87),qV(vHt,2532,2534,33),qV(vHt,2534,2544,-87),qV(vHt,2544,2546,-19),qV(vHt,2546,2562,33),vHt[2562]=-87,qV(vHt,2563,2565,33),qV(vHt,2565,2571,-19),qV(vHt,2571,2575,33),qV(vHt,2575,2577,-19),qV(vHt,2577,2579,33),qV(vHt,2579,2601,-19),vHt[2601]=33,qV(vHt,2602,2609,-19),vHt[2609]=33,qV(vHt,2610,2612,-19),vHt[2612]=33,qV(vHt,2613,2615,-19),vHt[2615]=33,qV(vHt,2616,2618,-19),qV(vHt,2618,2620,33),vHt[2620]=-87,vHt[2621]=33,qV(vHt,2622,2627,-87),qV(vHt,2627,2631,33),qV(vHt,2631,2633,-87),qV(vHt,2633,2635,33),qV(vHt,2635,2638,-87),qV(vHt,2638,2649,33),qV(vHt,2649,2653,-19),vHt[2653]=33,vHt[2654]=-19,qV(vHt,2655,2662,33),qV(vHt,2662,2674,-87),qV(vHt,2674,2677,-19),qV(vHt,2677,2689,33),qV(vHt,2689,2692,-87),vHt[2692]=33,qV(vHt,2693,2700,-19),vHt[2700]=33,vHt[2701]=-19,vHt[2702]=33,qV(vHt,2703,2706,-19),vHt[2706]=33,qV(vHt,2707,2729,-19),vHt[2729]=33,qV(vHt,2730,2737,-19),vHt[2737]=33,qV(vHt,2738,2740,-19),vHt[2740]=33,qV(vHt,2741,2746,-19),qV(vHt,2746,2748,33),vHt[2748]=-87,vHt[2749]=-19,qV(vHt,2750,2758,-87),vHt[2758]=33,qV(vHt,2759,2762,-87),vHt[2762]=33,qV(vHt,2763,2766,-87),qV(vHt,2766,2784,33),vHt[2784]=-19,qV(vHt,2785,2790,33),qV(vHt,2790,2800,-87),qV(vHt,2800,2817,33),qV(vHt,2817,2820,-87),vHt[2820]=33,qV(vHt,2821,2829,-19),qV(vHt,2829,2831,33),qV(vHt,2831,2833,-19),qV(vHt,2833,2835,33),qV(vHt,2835,2857,-19),vHt[2857]=33,qV(vHt,2858,2865,-19),vHt[2865]=33,qV(vHt,2866,2868,-19),qV(vHt,2868,2870,33),qV(vHt,2870,2874,-19),qV(vHt,2874,2876,33),vHt[2876]=-87,vHt[2877]=-19,qV(vHt,2878,2884,-87),qV(vHt,2884,2887,33),qV(vHt,2887,2889,-87),qV(vHt,2889,2891,33),qV(vHt,2891,2894,-87),qV(vHt,2894,2902,33),qV(vHt,2902,2904,-87),qV(vHt,2904,2908,33),qV(vHt,2908,2910,-19),vHt[2910]=33,qV(vHt,2911,2914,-19),qV(vHt,2914,2918,33),qV(vHt,2918,2928,-87),qV(vHt,2928,2946,33),qV(vHt,2946,2948,-87),vHt[2948]=33,qV(vHt,2949,2955,-19),qV(vHt,2955,2958,33),qV(vHt,2958,2961,-19),vHt[2961]=33,qV(vHt,2962,2966,-19),qV(vHt,2966,2969,33),qV(vHt,2969,2971,-19),vHt[2971]=33,vHt[2972]=-19,vHt[2973]=33,qV(vHt,2974,2976,-19),qV(vHt,2976,2979,33),qV(vHt,2979,2981,-19),qV(vHt,2981,2984,33),qV(vHt,2984,2987,-19),qV(vHt,2987,2990,33),qV(vHt,2990,2998,-19),vHt[2998]=33,qV(vHt,2999,3002,-19),qV(vHt,3002,3006,33),qV(vHt,3006,3011,-87),qV(vHt,3011,3014,33),qV(vHt,3014,3017,-87),vHt[3017]=33,qV(vHt,3018,3022,-87),qV(vHt,3022,3031,33),vHt[3031]=-87,qV(vHt,3032,3047,33),qV(vHt,3047,3056,-87),qV(vHt,3056,3073,33),qV(vHt,3073,3076,-87),vHt[3076]=33,qV(vHt,3077,3085,-19),vHt[3085]=33,qV(vHt,3086,3089,-19),vHt[3089]=33,qV(vHt,3090,3113,-19),vHt[3113]=33,qV(vHt,3114,3124,-19),vHt[3124]=33,qV(vHt,3125,3130,-19),qV(vHt,3130,3134,33),qV(vHt,3134,3141,-87),vHt[3141]=33,qV(vHt,3142,3145,-87),vHt[3145]=33,qV(vHt,3146,3150,-87),qV(vHt,3150,3157,33),qV(vHt,3157,3159,-87),qV(vHt,3159,3168,33),qV(vHt,3168,3170,-19),qV(vHt,3170,3174,33),qV(vHt,3174,3184,-87),qV(vHt,3184,3202,33),qV(vHt,3202,3204,-87),vHt[3204]=33,qV(vHt,3205,3213,-19),vHt[3213]=33,qV(vHt,3214,3217,-19),vHt[3217]=33,qV(vHt,3218,3241,-19),vHt[3241]=33,qV(vHt,3242,3252,-19),vHt[3252]=33,qV(vHt,3253,3258,-19),qV(vHt,3258,3262,33),qV(vHt,3262,3269,-87),vHt[3269]=33,qV(vHt,3270,3273,-87),vHt[3273]=33,qV(vHt,3274,3278,-87),qV(vHt,3278,3285,33),qV(vHt,3285,3287,-87),qV(vHt,3287,3294,33),vHt[3294]=-19,vHt[3295]=33,qV(vHt,3296,3298,-19),qV(vHt,3298,3302,33),qV(vHt,3302,3312,-87),qV(vHt,3312,3330,33),qV(vHt,3330,3332,-87),vHt[3332]=33,qV(vHt,3333,3341,-19),vHt[3341]=33,qV(vHt,3342,3345,-19),vHt[3345]=33,qV(vHt,3346,3369,-19),vHt[3369]=33,qV(vHt,3370,3386,-19),qV(vHt,3386,3390,33),qV(vHt,3390,3396,-87),qV(vHt,3396,3398,33),qV(vHt,3398,3401,-87),vHt[3401]=33,qV(vHt,3402,3406,-87),qV(vHt,3406,3415,33),vHt[3415]=-87,qV(vHt,3416,3424,33),qV(vHt,3424,3426,-19),qV(vHt,3426,3430,33),qV(vHt,3430,3440,-87),qV(vHt,3440,3585,33),qV(vHt,3585,3631,-19),vHt[3631]=33,vHt[3632]=-19,vHt[3633]=-87,qV(vHt,3634,3636,-19),qV(vHt,3636,3643,-87),qV(vHt,3643,3648,33),qV(vHt,3648,3654,-19),qV(vHt,3654,3663,-87),vHt[3663]=33,qV(vHt,3664,3674,-87),qV(vHt,3674,3713,33),qV(vHt,3713,3715,-19),vHt[3715]=33,vHt[3716]=-19,qV(vHt,3717,3719,33),qV(vHt,3719,3721,-19),vHt[3721]=33,vHt[3722]=-19,qV(vHt,3723,3725,33),vHt[3725]=-19,qV(vHt,3726,3732,33),qV(vHt,3732,3736,-19),vHt[3736]=33,qV(vHt,3737,3744,-19),vHt[3744]=33,qV(vHt,3745,3748,-19),vHt[3748]=33,vHt[3749]=-19,vHt[3750]=33,vHt[3751]=-19,qV(vHt,3752,3754,33),qV(vHt,3754,3756,-19),vHt[3756]=33,qV(vHt,3757,3759,-19),vHt[3759]=33,vHt[3760]=-19,vHt[3761]=-87,qV(vHt,3762,3764,-19),qV(vHt,3764,3770,-87),vHt[3770]=33,qV(vHt,3771,3773,-87),vHt[3773]=-19,qV(vHt,3774,3776,33),qV(vHt,3776,3781,-19),vHt[3781]=33,vHt[3782]=-87,vHt[3783]=33,qV(vHt,3784,3790,-87),qV(vHt,3790,3792,33),qV(vHt,3792,3802,-87),qV(vHt,3802,3864,33),qV(vHt,3864,3866,-87),qV(vHt,3866,3872,33),qV(vHt,3872,3882,-87),qV(vHt,3882,3893,33),vHt[3893]=-87,vHt[3894]=33,vHt[3895]=-87,vHt[3896]=33,vHt[3897]=-87,qV(vHt,3898,3902,33),qV(vHt,3902,3904,-87),qV(vHt,3904,3912,-19),vHt[3912]=33,qV(vHt,3913,3946,-19),qV(vHt,3946,3953,33),qV(vHt,3953,3973,-87),vHt[3973]=33,qV(vHt,3974,3980,-87),qV(vHt,3980,3984,33),qV(vHt,3984,3990,-87),vHt[3990]=33,vHt[3991]=-87,vHt[3992]=33,qV(vHt,3993,4014,-87),qV(vHt,4014,4017,33),qV(vHt,4017,4024,-87),vHt[4024]=33,vHt[4025]=-87,qV(vHt,4026,4256,33),qV(vHt,4256,4294,-19),qV(vHt,4294,4304,33),qV(vHt,4304,4343,-19),qV(vHt,4343,4352,33),vHt[4352]=-19,vHt[4353]=33,qV(vHt,4354,4356,-19),vHt[4356]=33,qV(vHt,4357,4360,-19),vHt[4360]=33,vHt[4361]=-19,vHt[4362]=33,qV(vHt,4363,4365,-19),vHt[4365]=33,qV(vHt,4366,4371,-19),qV(vHt,4371,4412,33),vHt[4412]=-19,vHt[4413]=33,vHt[4414]=-19,vHt[4415]=33,vHt[4416]=-19,qV(vHt,4417,4428,33),vHt[4428]=-19,vHt[4429]=33,vHt[4430]=-19,vHt[4431]=33,vHt[4432]=-19,qV(vHt,4433,4436,33),qV(vHt,4436,4438,-19),qV(vHt,4438,4441,33),vHt[4441]=-19,qV(vHt,4442,4447,33),qV(vHt,4447,4450,-19),vHt[4450]=33,vHt[4451]=-19,vHt[4452]=33,vHt[4453]=-19,vHt[4454]=33,vHt[4455]=-19,vHt[4456]=33,vHt[4457]=-19,qV(vHt,4458,4461,33),qV(vHt,4461,4463,-19),qV(vHt,4463,4466,33),qV(vHt,4466,4468,-19),vHt[4468]=33,vHt[4469]=-19,qV(vHt,4470,4510,33),vHt[4510]=-19,qV(vHt,4511,4520,33),vHt[4520]=-19,qV(vHt,4521,4523,33),vHt[4523]=-19,qV(vHt,4524,4526,33),qV(vHt,4526,4528,-19),qV(vHt,4528,4535,33),qV(vHt,4535,4537,-19),vHt[4537]=33,vHt[4538]=-19,vHt[4539]=33,qV(vHt,4540,4547,-19),qV(vHt,4547,4587,33),vHt[4587]=-19,qV(vHt,4588,4592,33),vHt[4592]=-19,qV(vHt,4593,4601,33),vHt[4601]=-19,qV(vHt,4602,7680,33),qV(vHt,7680,7836,-19),qV(vHt,7836,7840,33),qV(vHt,7840,7930,-19),qV(vHt,7930,7936,33),qV(vHt,7936,7958,-19),qV(vHt,7958,7960,33),qV(vHt,7960,7966,-19),qV(vHt,7966,7968,33),qV(vHt,7968,8006,-19),qV(vHt,8006,8008,33),qV(vHt,8008,8014,-19),qV(vHt,8014,8016,33),qV(vHt,8016,8024,-19),vHt[8024]=33,vHt[8025]=-19,vHt[8026]=33,vHt[8027]=-19,vHt[8028]=33,vHt[8029]=-19,vHt[8030]=33,qV(vHt,8031,8062,-19),qV(vHt,8062,8064,33),qV(vHt,8064,8117,-19),vHt[8117]=33,qV(vHt,8118,8125,-19),vHt[8125]=33,vHt[8126]=-19,qV(vHt,8127,8130,33),qV(vHt,8130,8133,-19),vHt[8133]=33,qV(vHt,8134,8141,-19),qV(vHt,8141,8144,33),qV(vHt,8144,8148,-19),qV(vHt,8148,8150,33),qV(vHt,8150,8156,-19),qV(vHt,8156,8160,33),qV(vHt,8160,8173,-19),qV(vHt,8173,8178,33),qV(vHt,8178,8181,-19),vHt[8181]=33,qV(vHt,8182,8189,-19),qV(vHt,8189,8400,33),qV(vHt,8400,8413,-87),qV(vHt,8413,8417,33),vHt[8417]=-87,qV(vHt,8418,8486,33),vHt[8486]=-19,qV(vHt,8487,8490,33),qV(vHt,8490,8492,-19),qV(vHt,8492,8494,33),vHt[8494]=-19,qV(vHt,8495,8576,33),qV(vHt,8576,8579,-19),qV(vHt,8579,12293,33),vHt[12293]=-87,vHt[12294]=33,vHt[12295]=-19,qV(vHt,12296,12321,33),qV(vHt,12321,12330,-19),qV(vHt,12330,12336,-87),vHt[12336]=33,qV(vHt,12337,12342,-87),qV(vHt,12342,12353,33),qV(vHt,12353,12437,-19),qV(vHt,12437,12441,33),qV(vHt,12441,12443,-87),qV(vHt,12443,12445,33),qV(vHt,12445,12447,-87),qV(vHt,12447,12449,33),qV(vHt,12449,12539,-19),vHt[12539]=33,qV(vHt,12540,12543,-87),qV(vHt,12543,12549,33),qV(vHt,12549,12589,-19),qV(vHt,12589,19968,33),qV(vHt,19968,40870,-19),qV(vHt,40870,44032,33),qV(vHt,44032,55204,-19),qV(vHt,55204,C0n,33),qV(vHt,57344,65534,33)}function oZn(n){var t,e,i,r,c,a,o;n.hb||(n.hb=!0,qon(n,"ecore"),Xon(n,"ecore"),zon(n,Drt),mhn(n.fb,"E"),mhn(n.L,"T"),mhn(n.P,"K"),mhn(n.P,"V"),mhn(n.cb,"E"),ttn(n1(n.b),n.bb),ttn(n1(n.a),n.Q),ttn(n1(n.o),n.p),ttn(n1(n.p),n.R),ttn(n1(n.q),n.p),ttn(n1(n.v),n.q),ttn(n1(n.w),n.R),ttn(n1(n.B),n.Q),ttn(n1(n.R),n.Q),ttn(n1(n.T),n.eb),ttn(n1(n.U),n.R),ttn(n1(n.V),n.eb),ttn(n1(n.W),n.bb),ttn(n1(n.bb),n.eb),ttn(n1(n.eb),n.R),ttn(n1(n.db),n.R),A4(n.b,u_t,Yit,!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.e,"iD",null,0,1,u_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.b),1),19),n.q,null,"eAttributeType",1,1,u_t,!0,!0,!1,!1,!0,!1,!0),A4(n.a,c_t,Wit,!1,!1,!0),mun(uG(zrn(gZ(n.a),0),35),n._,set,null,0,1,c_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.a),1),19),n.ab,null,"details",0,-1,c_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.a),2),19),n.Q,uG(zrn(gZ(n.Q),0),19),"eModelElement",0,1,c_t,!0,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.a),3),19),n.S,null,"contents",0,-1,c_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.a),4),19),n.S,null,"references",0,-1,c_t,!1,!1,!0,!1,!0,!1,!1),A4(n.o,h_t,"EClass",!1,!1,!0),mun(uG(zrn(gZ(n.o),0),35),n.e,"abstract",null,0,1,h_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.o),1),35),n.e,"interface",null,0,1,h_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.o),2),19),n.o,null,"eSuperTypes",0,-1,h_t,!1,!1,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.o),3),19),n.T,uG(zrn(gZ(n.T),0),19),"eOperations",0,-1,h_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.o),4),19),n.b,null,"eAllAttributes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),5),19),n.W,null,"eAllReferences",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),6),19),n.W,null,"eReferences",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),7),19),n.b,null,"eAttributes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),8),19),n.W,null,"eAllContainments",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),9),19),n.T,null,"eAllOperations",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),10),19),n.bb,null,"eAllStructuralFeatures",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),11),19),n.o,null,"eAllSuperTypes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),12),19),n.b,null,"eIDAttribute",0,1,h_t,!0,!0,!1,!1,!1,!1,!0),ujn(uG(zrn(gZ(n.o),13),19),n.bb,uG(zrn(gZ(n.bb),7),19),"eStructuralFeatures",0,-1,h_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.o),14),19),n.H,null,"eGenericSuperTypes",0,-1,h_t,!1,!1,!0,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.o),15),19),n.H,null,"eAllGenericSuperTypes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),djn(o=san(uG(zrn(dZ(n.o),0),62),n.e,"isSuperTypeOf"),n.o,"someClass"),san(uG(zrn(dZ(n.o),1),62),n.I,"getFeatureCount"),djn(o=san(uG(zrn(dZ(n.o),2),62),n.bb,Frt),n.I,"featureID"),djn(o=san(uG(zrn(dZ(n.o),3),62),n.I,_rt),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.o),4),62),n.bb,Frt),n._,"featureName"),san(uG(zrn(dZ(n.o),5),62),n.I,"getOperationCount"),djn(o=san(uG(zrn(dZ(n.o),6),62),n.T,"getEOperation"),n.I,"operationID"),djn(o=san(uG(zrn(dZ(n.o),7),62),n.I,Hrt),n.T,Urt),djn(o=san(uG(zrn(dZ(n.o),8),62),n.T,"getOverride"),n.T,Urt),djn(o=san(uG(zrn(dZ(n.o),9),62),n.H,"getFeatureType"),n.bb,Brt),A4(n.p,s_t,Zit,!0,!1,!0),mun(uG(zrn(gZ(n.p),0),35),n._,"instanceClassName",null,0,1,s_t,!1,!0,!0,!0,!0,!1),t=NY(n.L),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),N$n(uG(zrn(gZ(n.p),1),35),t,"instanceClass",s_t,!0,!0,!1,!0),mun(uG(zrn(gZ(n.p),2),35),n.M,Grt,null,0,1,s_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.p),3),35),n._,"instanceTypeName",null,0,1,s_t,!1,!0,!0,!0,!0,!1),ujn(uG(zrn(gZ(n.p),4),19),n.U,uG(zrn(gZ(n.U),3),19),"ePackage",0,1,s_t,!0,!1,!1,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.p),5),19),n.db,null,qrt,0,-1,s_t,!1,!1,!0,!0,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.p),0),62),n.e,Xrt),n.M,wZn),san(uG(zrn(dZ(n.p),1),62),n.I,"getClassifierID"),A4(n.q,f_t,"EDataType",!1,!1,!0),mun(uG(zrn(gZ(n.q),0),35),n.e,"serializable",Fnt,0,1,f_t,!1,!1,!0,!1,!0,!1),A4(n.v,w_t,"EEnum",!1,!1,!0),ujn(uG(zrn(gZ(n.v),0),19),n.w,uG(zrn(gZ(n.w),3),19),"eLiterals",0,-1,w_t,!1,!1,!0,!0,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.v),0),62),n.w,zrt),n._,Bet),djn(o=san(uG(zrn(dZ(n.v),1),62),n.w,zrt),n.I,uet),djn(o=san(uG(zrn(dZ(n.v),2),62),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),A4(n.w,d_t,nrt,!1,!1,!0),mun(uG(zrn(gZ(n.w),0),35),n.I,uet,null,0,1,d_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.w),1),35),n.A,"instance",null,0,1,d_t,!0,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.w),2),35),n._,"literal",null,0,1,d_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.w),3),19),n.v,uG(zrn(gZ(n.v),0),19),"eEnum",0,1,d_t,!0,!1,!1,!1,!1,!1,!1),A4(n.B,sFt,"EFactory",!1,!1,!0),ujn(uG(zrn(gZ(n.B),0),19),n.U,uG(zrn(gZ(n.U),2),19),"ePackage",1,1,sFt,!0,!1,!0,!1,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.B),0),62),n.S,"create"),n.o,"eClass"),djn(o=san(uG(zrn(dZ(n.B),1),62),n.M,"createFromString"),n.q,"eDataType"),djn(o,n._,"literalValue"),djn(o=san(uG(zrn(dZ(n.B),2),62),n._,"convertToString"),n.q,"eDataType"),djn(o,n.M,"instanceValue"),A4(n.Q,uFt,Rtt,!0,!1,!0),ujn(uG(zrn(gZ(n.Q),0),19),n.a,uG(zrn(gZ(n.a),2),19),"eAnnotations",0,-1,uFt,!1,!1,!0,!0,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.Q),0),62),n.a,"getEAnnotation"),n._,set),A4(n.R,hFt,Ktt,!0,!1,!0),mun(uG(zrn(gZ(n.R),0),35),n._,Bet,null,0,1,hFt,!1,!1,!0,!1,!0,!1),A4(n.S,nFt,"EObject",!1,!1,!0),san(uG(zrn(dZ(n.S),0),62),n.o,"eClass"),san(uG(zrn(dZ(n.S),1),62),n.e,"eIsProxy"),san(uG(zrn(dZ(n.S),2),62),n.X,"eResource"),san(uG(zrn(dZ(n.S),3),62),n.S,"eContainer"),san(uG(zrn(dZ(n.S),4),62),n.bb,"eContainingFeature"),san(uG(zrn(dZ(n.S),5),62),n.W,"eContainmentFeature"),o=san(uG(zrn(dZ(n.S),6),62),null,"eContents"),t=NY(n.fb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(r=CCn(o,t,null))&&r.oj(),o=san(uG(zrn(dZ(n.S),7),62),null,"eAllContents"),t=NY(n.cb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(c=CCn(o,t,null))&&c.oj(),o=san(uG(zrn(dZ(n.S),8),62),null,"eCrossReferences"),t=NY(n.fb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(a=CCn(o,t,null))&&a.oj(),djn(o=san(uG(zrn(dZ(n.S),9),62),n.M,"eGet"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),10),62),n.M,"eGet"),n.bb,Brt),djn(o,n.e,"resolve"),djn(o=san(uG(zrn(dZ(n.S),11),62),null,"eSet"),n.bb,Brt),djn(o,n.M,"newValue"),djn(o=san(uG(zrn(dZ(n.S),12),62),n.e,"eIsSet"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),13),62),null,"eUnset"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),14),62),n.M,"eInvoke"),n.T,Urt),t=NY(n.fb),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(o,t,"arguments"),QQ(o,n.K),A4(n.T,p_t,ert,!1,!1,!0),ujn(uG(zrn(gZ(n.T),0),19),n.o,uG(zrn(gZ(n.o),3),19),Vrt,0,1,p_t,!0,!1,!1,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.T),1),19),n.db,null,qrt,0,-1,p_t,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.T),2),19),n.V,uG(zrn(gZ(n.V),0),19),"eParameters",0,-1,p_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.T),3),19),n.p,null,"eExceptions",0,-1,p_t,!1,!1,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.T),4),19),n.H,null,"eGenericExceptions",0,-1,p_t,!1,!1,!0,!0,!1,!0,!1),san(uG(zrn(dZ(n.T),0),62),n.I,Hrt),djn(o=san(uG(zrn(dZ(n.T),1),62),n.e,"isOverrideOf"),n.T,"someOperation"),A4(n.U,fFt,"EPackage",!1,!1,!0),mun(uG(zrn(gZ(n.U),0),35),n._,"nsURI",null,0,1,fFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.U),1),35),n._,"nsPrefix",null,0,1,fFt,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.U),2),19),n.B,uG(zrn(gZ(n.B),0),19),"eFactoryInstance",1,1,fFt,!0,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.U),3),19),n.p,uG(zrn(gZ(n.p),4),19),"eClassifiers",0,-1,fFt,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.U),4),19),n.U,uG(zrn(gZ(n.U),5),19),"eSubpackages",0,-1,fFt,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.U),5),19),n.U,uG(zrn(gZ(n.U),4),19),"eSuperPackage",0,1,fFt,!0,!1,!1,!1,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.U),0),62),n.p,"getEClassifier"),n._,Bet),A4(n.V,m_t,irt,!1,!1,!0),ujn(uG(zrn(gZ(n.V),0),19),n.T,uG(zrn(gZ(n.T),2),19),"eOperation",0,1,m_t,!0,!1,!1,!1,!1,!1,!1),A4(n.W,v_t,rrt,!1,!1,!0),mun(uG(zrn(gZ(n.W),0),35),n.e,"containment",null,0,1,v_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.W),1),35),n.e,"container",null,0,1,v_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.W),2),35),n.e,"resolveProxies",Fnt,0,1,v_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.W),3),19),n.W,null,"eOpposite",0,1,v_t,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.W),4),19),n.o,null,"eReferenceType",1,1,v_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.W),5),19),n.b,null,"eKeys",0,-1,v_t,!1,!1,!0,!1,!0,!1,!1),A4(n.bb,o_t,Jit,!0,!1,!0),mun(uG(zrn(gZ(n.bb),0),35),n.e,"changeable",Fnt,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),1),35),n.e,"volatile",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),2),35),n.e,"transient",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),3),35),n._,"defaultValueLiteral",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),4),35),n.M,Grt,null,0,1,o_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.bb),5),35),n.e,"unsettable",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),6),35),n.e,"derived",null,0,1,o_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.bb),7),19),n.o,uG(zrn(gZ(n.o),13),19),Vrt,0,1,o_t,!0,!1,!1,!1,!1,!1,!1),san(uG(zrn(dZ(n.bb),0),62),n.I,_rt),o=san(uG(zrn(dZ(n.bb),1),62),null,"getContainerClass"),t=NY(n.L),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(i=CCn(o,t,null))&&i.oj(),A4(n.eb,a_t,Qit,!0,!1,!0),mun(uG(zrn(gZ(n.eb),0),35),n.e,"ordered",Fnt,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),1),35),n.e,"unique",Fnt,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),2),35),n.I,"lowerBound",null,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),3),35),n.I,"upperBound","1",0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),4),35),n.e,"many",null,0,1,a_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.eb),5),35),n.e,"required",null,0,1,a_t,!0,!0,!1,!1,!0,!0),ujn(uG(zrn(gZ(n.eb),6),19),n.p,null,"eType",0,1,a_t,!1,!0,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.eb),7),19),n.H,null,"eGenericType",0,1,a_t,!1,!0,!0,!0,!1,!0,!1),A4(n.ab,Sat,"EStringToStringMapEntry",!1,!1,!1),mun(uG(zrn(gZ(n.ab),0),35),n._,"key",null,0,1,Sat,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.ab),1),35),n._,uet,null,0,1,Sat,!1,!1,!0,!1,!0,!1),A4(n.H,g_t,trt,!1,!1,!0),ujn(uG(zrn(gZ(n.H),0),19),n.H,null,"eUpperBound",0,1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),1),19),n.H,null,"eTypeArguments",0,-1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),2),19),n.p,null,"eRawType",1,1,g_t,!0,!1,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.H),3),19),n.H,null,"eLowerBound",0,1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),4),19),n.db,null,"eTypeParameter",0,1,g_t,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.H),5),19),n.p,null,"eClassifier",0,1,g_t,!1,!1,!0,!1,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.H),0),62),n.e,Xrt),n.M,wZn),A4(n.db,J_t,crt,!1,!1,!0),ujn(uG(zrn(gZ(n.db),0),19),n.H,null,"eBounds",0,-1,J_t,!1,!1,!0,!0,!1,!1,!1),UJ(n.c,Bot,"EBigDecimal",!0),UJ(n.d,Xot,"EBigInteger",!0),UJ(n.e,ZHt,"EBoolean",!0),UJ(n.f,cot,"EBooleanObject",!0),UJ(n.i,tUt,"EByte",!0),UJ(n.g,cT(tUt,1),"EByteArray",!0),UJ(n.j,uot,"EByteObject",!0),UJ(n.k,JHt,"EChar",!0),UJ(n.n,hot,"ECharacterObject",!0),UJ(n.r,iot,"EDate",!0),UJ(n.s,aUt,"EDiagnosticChain",!1),UJ(n.t,eUt,"EDouble",!0),UJ(n.u,fot,"EDoubleObject",!0),UJ(n.fb,CFt,"EEList",!1),UJ(n.A,BFt,"EEnumerator",!1),UJ(n.C,IBt,"EFeatureMap",!1),UJ(n.D,Z_t,"EFeatureMapEntry",!1),UJ(n.F,iUt,"EFloat",!0),UJ(n.G,lot,"EFloatObject",!0),UJ(n.I,YHt,"EInt",!0),UJ(n.J,dot,"EIntegerObject",!0),UJ(n.L,gat,"EJavaClass",!0),UJ(n.M,dat,"EJavaObject",!0),UJ(n.N,nUt,"ELong",!0),UJ(n.O,yot,"ELongObject",!0),UJ(n.P,mat,"EMap",!1),UJ(n.X,jBt,"EResource",!1),UJ(n.Y,oUt,"EResourceSet",!1),UJ(n.Z,rUt,"EShort",!0),UJ(n.$,Tot,"EShortObject",!0),UJ(n._,$ot,"EString",!0),UJ(n.cb,OFt,"ETreeIterator",!1),UJ(n.K,uUt,"EInvocationTargetException",!1),nwn(n,Drt))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var uZn,sZn,hZn,fZn,lZn,bZn,wZn="object",dZn="boolean",gZn="number",pZn="string",mZn="function",vZn=2147483647,kZn="java.lang",yZn={3:1},MZn="com.google.common.base",TZn=", ",jZn="%s (%s) must not be negative",EZn={3:1,4:1,5:1},SZn="negative size: ",PZn="no calls to next() since the last call to remove()",CZn="Optional.of(",IZn="null",OZn={204:1,51:1},AZn="com.google.common.collect",LZn={204:1,51:1,128:1},NZn={229:1,3:1},$Zn={51:1},DZn="java.util",xZn={85:1},RZn={20:1,31:1,16:1},KZn=2063,FZn={20:1,31:1,16:1,21:1},_Zn={85:1,139:1,133:1},BZn={20:1,31:1,16:1,21:1,87:1},HZn={20:1,31:1,16:1,277:1,21:1,87:1},UZn={51:1,128:1},GZn={358:1,44:1},qZn="AbstractMapEntry",XZn="expectedValuesPerKey",zZn={3:1,6:1,4:1,5:1},VZn=16384,WZn={159:1},QZn={41:1},JZn={202:1},YZn={l:4194303,m:4194303,h:524287},ZZn={253:1,3:1,34:1},n1n="range unbounded on this side",t1n={20:1},e1n={20:1,16:1},i1n={3:1,20:1,31:1,16:1},r1n={306:1,3:1,20:1,31:1,16:1,15:1,59:1},c1n={3:1,4:1,5:1,173:1},a1n={3:1,85:1},o1n={20:1,16:1,21:1},u1n={3:1,20:1,31:1,16:1,21:1},s1n={20:1,16:1,21:1,87:1},h1n=461845907,f1n=-862048943,l1n={3:1,6:1,4:1,5:1,173:1},b1n="expectedSize",w1n=1024,d1n=1073741824,g1n="initialArraySize",p1n={3:1,6:1,4:1,9:1,5:1},m1n={20:1,31:1,56:1,16:1,15:1},v1n="arraySize",k1n={20:1,31:1,56:1,16:1,15:1,59:1},y1n={46:1},M1n={380:1},T1n=1e-4,j1n=-2147483648,E1n="__noinit__",S1n={3:1,103:1,63:1,82:1},P1n="com.google.gwt.core.client.impl",C1n="String",I1n="com.google.gwt.core.client",O1n="anonymous",A1n="fnStack",L1n="Unknown",N1n={201:1,3:1,4:1},$1n=1e3,D1n=65535,x1n="January",R1n="February",K1n="March",F1n="April",_1n="May",B1n="June",H1n="July",U1n="August",G1n="September",q1n="October",X1n="November",z1n="December",V1n=1900,W1n={53:1,3:1,4:1},Q1n="Before Christ",J1n="Anno Domini",Y1n="Sunday",Z1n="Monday",n0n="Tuesday",t0n="Wednesday",e0n="Thursday",i0n="Friday",r0n="Saturday",c0n="com.google.gwt.i18n.shared",a0n="DateTimeFormat",o0n="com.google.gwt.i18n.client",u0n="DefaultDateTimeFormatInfo",s0n={3:1,4:1,34:1,206:1},h0n="com.google.gwt.json.client",f0n=4194303,l0n=1048575,b0n=524288,w0n=4194304,d0n=17592186044416,g0n=1e9,p0n=-17592186044416,m0n="java.io",v0n={3:1,103:1,77:1,63:1,82:1},k0n={3:1,295:1,82:1},y0n='For input string: "',M0n=1/0,T0n=-1/0,j0n=4096,E0n={3:1,4:1,376:1},S0n="org.eclipse.elk.layered",P0n=65536,C0n=55296,I0n={109:1,3:1,4:1},O0n=1e5,A0n=.3010299956639812,L0n=4294967295,N0n="0.0",$0n={44:1},D0n="Unable to add element to queue",x0n={3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1},R0n={3:1,20:1,31:1,56:1,16:1,15:1,59:1},K0n={20:1,16:1,15:1},F0n={3:1,50:1},_0n={189:1},B0n={3:1,4:1,85:1},H0n={3:1,4:1,20:1,31:1,16:1,49:1,21:1},U0n="delete",G0n=1.4901161193847656e-8,q0n=11102230246251565e-32,X0n=15525485,z0n=5.960464477539063e-8,V0n=16777216,W0n=16777215,Q0n=", length: ",J0n={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1},Y0n="subMap: ",Z0n=" less than ",n2n={3:1,34:1,22:1,303:1},t2n="java.util.function",e2n="java.util.logging",i2n={3:1,4:1,5:1,856:1},r2n="undefined",c2n="java.util.stream",a2n={533:1,687:1},o2n="fromIndex: ",u2n=" > 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,482: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={294: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(296,1,{296: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 0!=(4&this.i)},uZn.Ae=function(){return 0!=(1&this.i)},uZn.Ib=function(){return crn(this)},uZn.i=0;var wat,dat=zW(kZn,"Object",1),gat=zW(kZn,"Class",296);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.c<this.d},uZn.Sb=function(){return this.c>0},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(502,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",502),sDn(446,502,_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(501,327,BZn,yE),uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/SortedKeySet",501),sDn(401,501,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,503)||(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,503)||(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,478)&&(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,478)&&(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,478)&&(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(478,2110,{478:1,697:1},Ofn),uZn.a=0,uZn.b=0,uZn.d=0,zW(AZn,"ArrayTable/2",478),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 0!=(-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 0!=((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 0!=(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(306,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",306),sDn(2105,306,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()<t.length&&uQ(t,EJ(this.a.b).b.gc(),null),t},zW(AZn,"ForwardingImmutableMap/1",1085),sDn(2079,2078,u1n),uZn.Kc=function(){return this.Od()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"ImmutableSet",2079),sDn(719,2079,u1n),uZn.Kc=function(){return jtn(new Gw(this.a.b.Kc()))},uZn.Hc=function(n){return null!=n&&ZE(this.a,n)},uZn.Ic=function(n){return nS(this.a,n)},uZn.Hb=function(){return Hon(this.a.b)},uZn.dc=function(){return this.a.b.dc()},uZn.Od=function(){return jtn(new Gw(this.a.b.Kc()))},uZn.gc=function(){return this.a.b.gc()},uZn.Pc=function(){return this.a.b.Pc()},uZn.Qc=function(n){return tS(this.a,n)},uZn.Ib=function(){return cpn(this.a.b)},zW(AZn,"ForwardingImmutableSet",719),sDn(2073,2072,s1n),uZn.Kd=function(){return this.b},uZn.Ld=function(){return this.b},uZn.Wd=function(){return this.b},uZn.Nc=function(){return new GP(this)},zW(AZn,"ForwardingSortedSet",2073),sDn(543,2077,a1n,dMn),uZn.Ac=function(n){xun(this,n)},uZn.Cc=function(){return new o$(this.d||(this.d=new rb(this)))},uZn.$b=function(){n9(this)},uZn._b=function(n){return!!lun(this,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))},uZn.uc=function(n){return lrn(this,n)},uZn.kc=function(){return new ZD(this,this)},uZn.wc=function(n){T0(this,n)},uZn.xc=function(n){return dcn(this,n)},uZn.ec=function(){return new u$(this)},uZn.zc=function(n,t){return yHn(this,n,t)},uZn.Bc=function(n){var t;return(t=lun(this,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))?(yRn(this,t),t.e=null,t.c=null,t.i):null},uZn.gc=function(){return this.i},uZn.xd=function(){return new o$(this.d||(this.d=new rb(this)))},uZn.f=0,uZn.g=0,uZn.i=0,zW(AZn,"HashBiMap",543),sDn(544,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return C6(this)},uZn.Pb=function(){var n;if(!C6(this))throw hv(new Bv);return n=uG(nJ(this.c),302),this.c=n.c,this.f=n,--this.d,this.Xd(n)},uZn.Qb=function(){if(this.e.g!=this.b)throw hv(new Fv);if(!this.f)throw hv(new kM(PZn));yRn(this.e,this.f),this.b=this.e.g,this.f=null},uZn.b=0,uZn.d=0,uZn.f=null,zW(AZn,"HashBiMap/Itr",544),sDn(1023,544,$Zn,ZD),uZn.Xd=function(n){return new LE(this,n)},zW(AZn,"HashBiMap/1",1023),sDn(w1n,358,GZn,LE),uZn.ld=function(){return this.a.g},uZn.md=function(){return this.a.i},uZn.nd=function(n){var t,e,i;return e=this.a.i,(i=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))==this.a.f&&(xA(n)===xA(e)||null!=n&&udn(n,e))?n:(Dhn(!bun(this.b.a,n,i),n),yRn(this.b.a,this.a),t=new fJ(this.a.g,this.a.a,n,i),HLn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},zW(AZn,"HashBiMap/1/MapEntry",w1n),sDn(246,358,{358:1,246:1,3:1,44:1},FE),uZn.ld=function(){return this.g},uZn.md=function(){return this.i},uZn.nd=function(n){throw hv(new Kv)},zW(AZn,"ImmutableEntry",246),sDn(302,246,{358:1,302:1,246:1,3:1,44:1},fJ),uZn.a=0,uZn.f=0;var Pat,Cat=zW(AZn,"HashBiMap/BiEntry",302);sDn(619,2077,a1n,rb),uZn.Ac=function(n){xun(this,n)},uZn.Cc=function(){return new u$(this.a)},uZn.$b=function(){n9(this.a)},uZn._b=function(n){return lrn(this.a,n)},uZn.kc=function(){return new nx(this,this.a)},uZn.wc=function(n){WW(n),T0(this.a,new cb(n))},uZn.xc=function(n){return kan(this,n)},uZn.ec=function(){return new o$(this)},uZn.zc=function(n,t){return FUn(this.a,n,t,!1)},uZn.Bc=function(n){var t;return(t=bun(this.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))?(yRn(this.a,t),t.e=null,t.c=null,t.g):null},uZn.gc=function(){return this.a.i},uZn.xd=function(){return new u$(this.a)},zW(AZn,"HashBiMap/Inverse",619),sDn(1020,544,$Zn,nx),uZn.Xd=function(n){return new NE(this,n)},zW(AZn,"HashBiMap/Inverse/1",1020),sDn(1021,358,GZn,NE),uZn.ld=function(){return this.a.i},uZn.md=function(){return this.a.g},uZn.nd=function(n){var t,e,i;return i=this.a.g,(t=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))==this.a.a&&(xA(n)===xA(i)||null!=n&&udn(n,i))?n:(Dhn(!lun(this.b.a.a,n,t),n),yRn(this.b.a.a,this.a),e=new fJ(n,t,this.a.i,this.a.f),this.a=e,HLn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},zW(AZn,"HashBiMap/Inverse/1/InverseEntry",1021),sDn(620,542,FZn,o$),uZn.Kc=function(){return new Iy(this.a.a)},uZn.Mc=function(n){var t;return!!(t=bun(this.a.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))&&(yRn(this.a.a,t),!0)},zW(AZn,"HashBiMap/Inverse/InverseKeySet",620),sDn(1019,544,$Zn,Iy),uZn.Xd=function(n){return n.i},zW(AZn,"HashBiMap/Inverse/InverseKeySet/1",1019),sDn(1022,1,{},cb),uZn.Yd=function(n,t){Mv(this.a,n,t)},zW(AZn,"HashBiMap/Inverse/lambda$0$Type",1022),sDn(618,542,FZn,u$),uZn.Kc=function(){return new Oy(this.a)},uZn.Mc=function(n){var t;return!!(t=lun(this.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))&&(yRn(this.a,t),t.e=null,t.c=null,!0)},zW(AZn,"HashBiMap/KeySet",618),sDn(1018,544,$Zn,Oy),uZn.Xd=function(n){return n.g},zW(AZn,"HashBiMap/KeySet/1",1018),sDn(1123,627,NZn),zW(AZn,"HashMultimapGwtSerializationDependencies",1123),sDn(271,1123,NZn,K1),uZn.hc=function(){return new Dj(orn(this.a))},uZn.pd=function(){return new Dj(orn(this.a))},uZn.a=2,zW(AZn,"HashMultimap",271),sDn(2097,306,r1n),uZn.Hc=function(n){return this.Zd().Hc(n)},uZn.dc=function(){return this.Zd().dc()},uZn.gc=function(){return this.Zd().gc()},zW(AZn,"ImmutableAsList",2097),sDn(2030,730,a1n),uZn.Vd=function(){return sB(),new KM(this.a)},uZn.Cc=function(){return sB(),new KM(this.a)},uZn.xd=function(){return sB(),new KM(this.a)},zW(AZn,"ImmutableBiMap",2030),sDn(2075,1,{}),zW(AZn,"ImmutableCollection/Builder",2075),sDn(1035,719,u1n,Ay),zW(AZn,"ImmutableEnumSet",1035),sDn(980,399,LZn,$_),uZn.Xb=function(n){return this.a.Xb(n)},zW(AZn,"ImmutableList/1",980),sDn(979,2075,{},UF),zW(AZn,"ImmutableList/Builder",979),sDn(623,204,OZn,ab),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},zW(AZn,"ImmutableMap/1",623),sDn(1054,1,{},u),uZn.Kb=function(n){return uG(n,44).ld()},zW(AZn,"ImmutableMap/2methodref$getKey$Type",1054),sDn(1053,1,{},GF),zW(AZn,"ImmutableMap/Builder",1053),sDn(2098,2079,u1n),uZn.Md=function(){return this.b||(this.b=new Pv(this))},uZn.Nd=function(){return new TV(this,oTn(this,Inn(dat,EZn,1,this.gc(),5,1)))},zW(AZn,"ImmutableSet/CachingAsList",2098),sDn(2099,2098,u1n),uZn.Kc=function(){return new ab(Mz(this.a).Od())},uZn.Nd=function(){return new Pv(this)},uZn.Jc=function(n){var t,e;for(WW(n),e=this.gc(),t=0;t<e;t++)n.Cd(uG(Mz(this.a).Md().Xb(t),44).ld())},uZn.Od=function(){return oR(this.b||(this.b=new Pv(this)),0)},uZn.Nc=function(){return Dq(this.gc(),1296,new ub(this))},zW(AZn,"IndexedImmutableSet",2099),sDn(1230,2099,u1n,Ev),uZn.Kc=function(){return new ab(Mz(this.a).Od())},uZn.Hc=function(n){return this.a._b(n)},uZn.Jc=function(n){WW(n),Yun(this.a,new ob(n))},uZn.Od=function(){return new ab(Mz(this.a).Od())},uZn.gc=function(){return this.a.gc()},uZn.Nc=function(){return JU(Mz(this.a).Nc(),new u)},zW(AZn,"ImmutableMapKeySet",1230),sDn(1231,1,{},ob),uZn.Yd=function(n,t){sB(),this.a.Cd(n)},zW(AZn,"ImmutableMapKeySet/lambda$0$Type",1231),sDn(1227,2078,i1n,Sv),uZn.Kc=function(){return new VG(this)},uZn.Md=function(){return new s$(this,Mz(this.a).Md())},uZn.Hc=function(n){return null!=n&&hSn(new VG(this),n)},uZn.Od=function(){return new VG(this)},uZn.gc=function(){return this.a.gc()},uZn.Nc=function(){return JU(Mz(this.a).Nc(),new s)},zW(AZn,"ImmutableMapValues",1227),sDn(1228,1,{},s),uZn.Kb=function(n){return uG(n,44).md()},zW(AZn,"ImmutableMapValues/0methodref$getValue$Type",1228),sDn(637,204,OZn,VG),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},zW(AZn,"ImmutableMapValues/1",637),sDn(1229,2097,r1n,s$),uZn.Zd=function(){return this.a},uZn.Xb=function(n){return uG(this.b.Xb(n),44).md()},zW(AZn,"ImmutableMapValues/2",1229),sDn(1232,1,{},ub),uZn.td=function(n){return rQ(this.a,n)},zW(AZn,"IndexedImmutableSet/0methodref$get$Type",1232),sDn(638,2097,r1n,Pv),uZn.Zd=function(){return this.a},uZn.Xb=function(n){return rQ(this.a,n)},uZn.gc=function(){return this.a.a.gc()},zW(AZn,"IndexedImmutableSet/1",638),sDn(43,1,{},h),uZn.Kb=function(n){return uG(n,20).Kc()},uZn.Fb=function(n){return this===n},zW(AZn,"Iterables/10",43),sDn(1055,547,t1n,WG),uZn.Jc=function(n){WW(n),this.b.Jc(new $E(this.a,n))},uZn.Kc=function(){return gN(this)},zW(AZn,"Iterables/4",1055),sDn(1056,1,QZn,$E),uZn.Cd=function(n){mC(this.b,this.a,n)},zW(AZn,"Iterables/4/lambda$0$Type",1056),sDn(1057,547,t1n,QG),uZn.Jc=function(n){WW(n),z8(this.a,new xE(n,this.b))},uZn.Kc=function(){return ix(new DD(this.a),this.b)},zW(AZn,"Iterables/5",1057),sDn(1058,1,QZn,xE),uZn.Cd=function(n){this.a.Cd(oN(n))},zW(AZn,"Iterables/5/lambda$0$Type",1058),sDn(1087,204,OZn,sb),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return this.a.Pb()},zW(AZn,"Iterators/1",1087),sDn(1088,713,OZn,DE),uZn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},zW(AZn,"Iterators/5",1088),sDn(496,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Pb=function(){return this.$d(this.b.Pb())},uZn.Qb=function(){this.b.Qb()},zW(AZn,"TransformedIterator",496),sDn(1089,496,$Zn,tx),uZn.$d=function(n){return this.a.Kb(n)},zW(AZn,"Iterators/6",1089),sDn(732,204,OZn,hb),uZn.Ob=function(){return!this.a},uZn.Pb=function(){if(this.a)throw hv(new Bv);return this.a=!0,this.b},uZn.a=!1,zW(AZn,"Iterators/9",732),sDn(1086,399,LZn,NX),uZn.Xb=function(n){return this.a[this.b+n]},uZn.b=0,zW(AZn,"Iterators/ArrayItr",1086),sDn(37,1,{37:1,51:1},Fz),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return hDn(this)},uZn.Pb=function(){return N9(this)},uZn.Qb=function(){if(!this.c)throw hv(new kM(PZn));this.c.Qb(),this.c=null},zW(AZn,"Iterators/ConcatenatedIterator",37),sDn(22,1,{3:1,34:1,22:1}),uZn.Fd=function(n){return cM(this,uG(n,22))},uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return MR(this)},uZn.g=0;var Iat,Oat=zW(kZn,"Enum",22);sDn(549,22,{549:1,3:1,34:1,22:1,51:1},X$),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Qb=function(){IB(!1)};var Aat,Lat=_cn(AZn,"Iterators/EmptyModifiableIterator",549,Oat,sW,cR);sDn(1907,627,NZn),zW(AZn,"LinkedHashMultimapGwtSerializationDependencies",1907),sDn(1908,1907,NZn,zbn),uZn.hc=function(){return new dx(orn(this.b))},uZn.$b=function(){ban(this),Tv(this.a,this.a)},uZn.pd=function(){return new dx(orn(this.b))},uZn.ic=function(n){return new Uln(this,n,this.b)},uZn.kc=function(){return new YW(this)},uZn.lc=function(){return new h3(uG(this.g||(this.g=new Ty(this)),21),17)},uZn.ec=function(){return this.i||(this.i=new RD(this,this.c))},uZn.nc=function(){return new $y(new YW(this))},uZn.oc=function(){return JU(new h3(uG(this.g||(this.g=new Ty(this)),21),17),new f)},uZn.b=2,zW(AZn,"LinkedHashMultimap",1908),sDn(1911,1,{},f),uZn.Kb=function(n){return uG(n,44).md()},zW(AZn,"LinkedHashMultimap/0methodref$getValue$Type",1911),sDn(834,1,$Zn,YW),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Asn(this)},uZn.Ob=function(){return this.a!=this.b.a},uZn.Qb=function(){IB(!!this.c),S4(this.b,this.c.g,this.c.i),this.c=null},zW(AZn,"LinkedHashMultimap/1",834),sDn(227,246,{358:1,246:1,227:1,604:1,3:1,44:1},lJ),uZn._d=function(){return uG(nJ(this.f),604)},uZn.ae=function(n){this.c=n},uZn.be=function(n){this.f=n},uZn.d=0;var Nat,$at=zW(AZn,"LinkedHashMultimap/ValueEntry",227);sDn(1909,2068,{604:1,20:1,31:1,16:1,21:1},Uln),uZn.Fc=function(n){var t,e,i,r,c;for(t=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&xQ(e.i,n))return!1;return i=new lJ(this.c,n,c,r),RM(this.d,i),i.f=this,this.d=i,Tv(uG(nJ(this.g.a.b),227),i),Tv(i,this.g.a),this.b[t]=i,++this.f,++this.e,aSn(this),!0},uZn.$b=function(){var n,t;for(FP(this.b,null),this.f=0,n=this.a;n!=this;n=n._d())t=uG(n,227),Tv(uG(nJ(t.b),227),uG(nJ(t.e),227));this.a=this,this.d=this,++this.e},uZn.Hc=function(n){var t,e;for(e=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&xQ(t.i,n))return!0;return!1},uZn.Jc=function(n){var t;for(WW(n),t=this.a;t!=this;t=t._d())n.Cd(uG(t,227).i)},uZn._d=function(){return this.a},uZn.Kc=function(){return new IQ(this)},uZn.Mc=function(n){return hFn(this,n)},uZn.ae=function(n){this.d=n},uZn.be=function(n){this.a=n},uZn.gc=function(){return this.f},uZn.e=0,uZn.f=0,zW(AZn,"LinkedHashMultimap/ValueSet",1909),sDn(1910,1,$Zn,IQ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return _q(this),this.b!=this.c},uZn.Pb=function(){var n,t;if(_q(this),this.b==this.c)throw hv(new Bv);return t=(n=uG(this.b,227)).i,this.d=n,this.b=uG(nJ(n.f),604),t},uZn.Qb=function(){_q(this),IB(!!this.d),hFn(this.c,this.d.i),this.a=this.c.e,this.d=null},uZn.a=0,zW(AZn,"LinkedHashMultimap/ValueSet/1",1910),sDn(780,2084,NZn,hL),uZn.Zb=function(){return this.f||(this.f=new UP(this))},uZn.Fb=function(n){return Aln(this,n)},uZn.cc=function(n){return new RE(this,n)},uZn.fc=function(n){return $nn(this,n)},uZn.$b=function(){nW(this)},uZn._b=function(n){return YE(this,n)},uZn.ac=function(){return new UP(this)},uZn.bc=function(){return new lb(this)},uZn.qc=function(n){return new RE(this,n)},uZn.dc=function(){return!this.a},uZn.rc=function(n){return $nn(this,n)},uZn.gc=function(){return this.d},uZn.c=0,uZn.d=0,zW(AZn,"LinkedListMultimap",780),sDn(56,31,m1n),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.bd=function(n,t){throw hv(new TM("Add not supported on this list"))},uZn.Fc=function(n){return this.bd(this.gc(),n),!0},uZn.cd=function(n,t){var e,i,r;for(tJ(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.bd(n++,i),e=!0;return e},uZn.$b=function(){this.ce(0,this.gc())},uZn.Fb=function(n){return PDn(this,n)},uZn.Hb=function(){return Zfn(this)},uZn.dd=function(n){return gan(this,n)},uZn.Kc=function(){return new Jw(this)},uZn.ed=function(){return this.fd(0)},uZn.fd=function(n){return new N4(this,n)},uZn.gd=function(n){throw hv(new TM("Remove not supported on this list"))},uZn.ce=function(n,t){var e,i;for(i=this.fd(n),e=n;e<t;++e)i.Pb(),i.Qb()},uZn.hd=function(n,t){throw hv(new TM("Set not supported on this list"))},uZn.kd=function(n,t){return new C2(this,n,t)},uZn.j=0,zW(DZn,"AbstractList",56),sDn(2062,56,m1n),uZn.bd=function(n,t){sR(this,n,t)},uZn.cd=function(n,t){return Xln(this,n,t)},uZn.Xb=function(n){return hyn(this,n)},uZn.Kc=function(){return this.fd(0)},uZn.gd=function(n){return Kjn(this,n)},uZn.hd=function(n,t){var e,i;e=this.fd(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't set element "+n)):hv(r)}},zW(DZn,"AbstractSequentialList",2062),sDn(646,2062,m1n,RE),uZn.fd=function(n){return rx(this,n)},uZn.gc=function(){var n;return(n=uG(cQ(this.a.b,this.b),260))?n.a:0},zW(AZn,"LinkedListMultimap/1",646),sDn(1316,2068,FZn,lb),uZn.Hc=function(n){return YE(this.a,n)},uZn.Kc=function(){return new $on(this.a)},uZn.Mc=function(n){return!$nn(this.a,n).a.dc()},uZn.gc=function(){return oS(this.a.b)},zW(AZn,"LinkedListMultimap/1KeySetImpl",1316),sDn(1315,1,$Zn,$on),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Bq(this),!!this.c},uZn.Pb=function(){if(Bq(this),!this.c)throw hv(new Bv);this.a=this.c,FV(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!FV(this.d,this.c.a));return this.a.a},uZn.Qb=function(){Bq(this),IB(!!this.a),Hq(new Een(this.e,this.a.a)),this.a=null,this.b=this.e.c},uZn.b=0,zW(AZn,"LinkedListMultimap/DistinctKeyIterator",1315),sDn(260,1,{260:1},TZ),uZn.a=0,zW(AZn,"LinkedListMultimap/KeyList",260),sDn(511,358,{358:1,511:1,44:1},KE),uZn.ld=function(){return this.a},uZn.md=function(){return this.f},uZn.nd=function(n){var t;return t=this.f,this.f=n,t},zW(AZn,"LinkedListMultimap/Node",511),sDn(566,1,UZn,Een,EAn),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){this.e=JHn(this.f,this.b,n,this.c),++this.d,this.a=null},uZn.Ob=function(){return!!this.c},uZn.Sb=function(){return!!this.e},uZn.Pb=function(){return Ein(this)},uZn.Tb=function(){return this.d},uZn.Ub=function(){return jin(this)},uZn.Vb=function(){return this.d-1},uZn.Qb=function(){IB(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,MRn(this.f,this.a),this.a=null},uZn.Wb=function(n){_D(!!this.a),this.a.f=n},uZn.d=0,zW(AZn,"LinkedListMultimap/ValueForKeyIterator",566),sDn(1031,56,m1n),uZn.bd=function(n,t){this.a.bd(n,t)},uZn.cd=function(n,t){return this.a.cd(n,t)},uZn.Hc=function(n){return this.a.Hc(n)},uZn.Xb=function(n){return this.a.Xb(n)},uZn.gd=function(n){return this.a.gd(n)},uZn.hd=function(n,t){return this.a.hd(n,t)},uZn.gc=function(){return this.a.gc()},zW(AZn,"Lists/AbstractListWrapper",1031),sDn(1032,1031,k1n),zW(AZn,"Lists/RandomAccessListWrapper",1032),sDn(1034,1032,k1n,qE),uZn.fd=function(n){return this.a.fd(n)},zW(AZn,"Lists/1",1034),sDn(441,56,{441:1,20:1,31:1,56:1,16:1,15:1},XE),uZn.bd=function(n,t){this.a.bd(KV(this,n),t)},uZn.$b=function(){this.a.$b()},uZn.Xb=function(n){return this.a.Xb(XW(this,n))},uZn.Kc=function(){return I3(this,0)},uZn.fd=function(n){return I3(this,n)},uZn.gd=function(n){return this.a.gd(XW(this,n))},uZn.ce=function(n,t){(G4(n,t,this.a.gc()),Spn(this.a.kd(KV(this,t),KV(this,n)))).$b()},uZn.hd=function(n,t){return this.a.hd(XW(this,n),t)},uZn.gc=function(){return this.a.gc()},uZn.kd=function(n,t){return G4(n,t,this.a.gc()),Spn(this.a.kd(KV(this,t),KV(this,n)))},zW(AZn,"Lists/ReverseList",441),sDn(1030,441,{441:1,20:1,31:1,56:1,16:1,15:1,59:1},Ly),zW(AZn,"Lists/RandomAccessReverseList",1030),sDn(1033,1,UZn,BE),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},uZn.Ob=function(){return this.c.Sb()},uZn.Sb=function(){return this.c.Ob()},uZn.Pb=function(){if(!this.c.Sb())throw hv(new Bv);return this.a=!0,this.c.Ub()},uZn.Tb=function(){return KV(this.b,this.c.Tb())},uZn.Ub=function(){if(!this.c.Ob())throw hv(new Bv);return this.a=!0,this.c.Pb()},uZn.Vb=function(){return KV(this.b,this.c.Tb())-1},uZn.Qb=function(){IB(this.a),this.c.Qb(),this.a=!1},uZn.Wb=function(n){_D(this.a),this.c.Wb(n)},uZn.a=!1,zW(AZn,"Lists/ReverseList/1",1033),sDn(440,496,$Zn,Ny),uZn.$d=function(n){return OP(n)},zW(AZn,"Maps/1",440),sDn(712,496,$Zn,$y),uZn.$d=function(n){return uG(n,44).md()},zW(AZn,"Maps/2",712),sDn(975,496,$Zn,ex),uZn.$d=function(n){return new FE(n,PL(this.a,n))},zW(AZn,"Maps/3",975),sDn(972,2069,FZn,wb),uZn.Jc=function(n){nk(this.a,n)},uZn.Kc=function(){return this.a.kc()},uZn.Rc=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"Maps/IteratorBasedAbstractMap/1",972),sDn(973,1,{},db),uZn.Yd=function(n,t){this.a.Cd(n)},zW(AZn,"Maps/KeySet/lambda$0$Type",973),sDn(971,31,RZn,zE),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Jc=function(n){WW(n),this.a.wc(new bb(n))},uZn.dc=function(){return this.a.dc()},uZn.Kc=function(){return new $y(this.a.vc().Kc())},uZn.Mc=function(n){var t,e;try{return Wpn(this,n,!0)}catch(i){if(F$(i=Ehn(i),48)){for(e=this.a.vc().Kc();e.Ob();)if(xQ(n,(t=uG(e.Pb(),44)).md()))return this.a.Bc(t.ld()),!0;return!1}throw hv(i)}},uZn.gc=function(){return this.a.gc()},zW(AZn,"Maps/Values",971),sDn(974,1,{},bb),uZn.Yd=function(n,t){this.a.Cd(t)},zW(AZn,"Maps/Values/lambda$0$Type",974),sDn(752,2085,xZn,UP),uZn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},uZn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},uZn.$b=function(){this.a.$b()},uZn._b=function(n){return this.a._b(n)},uZn.Ec=function(){return new gb(this)},uZn.Dc=function(){return this.Ec()},uZn.dc=function(){return this.a.dc()},uZn.ec=function(){return this.a.ec()},uZn.gc=function(){return this.a.ec().gc()},zW(AZn,"Multimaps/AsMap",752),sDn(1134,2069,FZn,gb),uZn.Kc=function(){return W$(this.a.a.ec(),new pb(this))},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Amn(this,n)&&(t=uG(nJ(uG(n,44)),44),rM(this.a,t.ld()),!0)},zW(AZn,"Multimaps/AsMap/EntrySet",1134),sDn(1138,1,{},pb),uZn.Kb=function(n){return PL(this,n)},uZn.Fb=function(n){return this===n},zW(AZn,"Multimaps/AsMap/EntrySet/1",1138),sDn(552,2087,{552:1,849:1,20:1,31:1,16:1},mb),uZn.$b=function(){ban(this.a)},uZn.Hc=function(n){return jj(this.a,n)},uZn.Jc=function(n){WW(n),z8(RW(this.a),new kb(n))},uZn.Kc=function(){return new Ny(RW(this.a).a.kc())},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return JU(RW(this.a).Nc(),new l)},zW(AZn,"Multimaps/Keys",552),sDn(1136,1,{},l),uZn.Kb=function(n){return uG(n,44).ld()},zW(AZn,"Multimaps/Keys/0methodref$getKey$Type",1136),sDn(1135,496,$Zn,Dy),uZn.$d=function(n){return new vb(uG(n,44))},zW(AZn,"Multimaps/Keys/1",1135),sDn(2088,1,{425:1}),uZn.Fb=function(n){var t;return!!F$(n,503)&&(t=uG(n,425),uG(this.a.md(),16).gc()==uG(t.a.md(),16).gc()&&xQ(this.a.ld(),t.a.ld()))},uZn.Hb=function(){var n;return(null==(n=this.a.ld())?0:Hon(n))^uG(this.a.md(),16).gc()},uZn.Ib=function(){var n,t;return t=ox(this.a.ld()),1==(n=uG(this.a.md(),16).gc())?t:t+" x "+n},zW(AZn,"Multisets/AbstractEntry",2088),sDn(503,2088,{503:1,425:1},vb),zW(AZn,"Multimaps/Keys/1/1",503),sDn(1137,1,QZn,kb),uZn.Cd=function(n){this.a.Cd(uG(n,44).ld())},zW(AZn,"Multimaps/Keys/lambda$1$Type",1137),sDn(1140,1,QZn,b),uZn.Cd=function(n){qq(uG(n,425))},zW(AZn,"Multiset/lambda$0$Type",1140),sDn(753,1,QZn,yb),uZn.Cd=function(n){Srn(this.a,uG(n,425))},zW(AZn,"Multiset/lambda$1$Type",753),sDn(1141,1,{},w),zW(AZn,"Multisets/0methodref$add$Type",1141),sDn(754,1,{},d),uZn.Kb=function(n){return N6(uG(n,425))},zW(AZn,"Multisets/lambda$1$Type",754),sDn(2106,1,yZn),zW(AZn,"RangeGwtSerializationDependencies",2106),sDn(521,2106,{178:1,521:1,3:1,46:1},Gyn),uZn.Lb=function(n){return Iz(this,uG(n,34))},uZn.Mb=function(n){return Iz(this,uG(n,34))},uZn.Fb=function(n){var t;return!!F$(n,521)&&(t=uG(n,521),pTn(this.a,t.a)&&pTn(this.b,t.b))},uZn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},uZn.Ib=function(){return N5(this.a,this.b)},zW(AZn,"Range",521),sDn(654,2097,r1n,TV),uZn.fd=function(n){return oR(this.b,n)},uZn.Zd=function(){return this.a},uZn.Xb=function(n){return GA(this.b,n)},uZn.Pd=function(n){return oR(this.b,n)},zW(AZn,"RegularImmutableAsList",654),sDn(656,2105,r1n,t1),uZn.Rd=function(){return this.a},zW(AZn,"RegularImmutableList",656),sDn(548,730,a1n,xy,Ry),zW(AZn,"RegularImmutableMap",548),sDn(731,719,u1n,RP),zW(AZn,"RegularImmutableSet",731),sDn(2074,KZn,FZn),uZn.Kc=function(){return new zJ(this.a,this.b)},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"Sets/SetView",2074),sDn(976,2074,FZn,GE),uZn.Kc=function(){return new zJ(this.a,this.b)},uZn.Hc=function(n){return RX(this.a,n)&&this.b.Hc(n)},uZn.Ic=function(n){return yhn(this.a,n)&&this.b.Ic(n)},uZn.dc=function(){return Tyn(this.b,this.a)},uZn.Lc=function(){return JJ(new fX(null,new h3(this.a,1)),new Tb(this.b))},uZn.gc=function(){return qsn(this)},uZn.Oc=function(){return JJ(new fX(null,new h3(this.a,1)),new Mb(this.b))},zW(AZn,"Sets/2",976),sDn(977,1,y1n,Mb),uZn.Mb=function(n){return this.a.Hc(n)},zW(AZn,"Sets/2/0methodref$contains$Type",977),sDn(714,713,OZn,zJ),uZn.Yb=function(){for(var n;b$(this.a);)if(n=X5(this.a),this.c.Hc(n))return n;return this.e=2,null},zW(AZn,"Sets/2/1",714),sDn(978,1,y1n,Tb),uZn.Mb=function(n){return this.a.Hc(n)},zW(AZn,"Sets/2/1methodref$contains$Type",978),sDn(616,2073,{616:1,3:1,20:1,16:1,277:1,21:1,87:1},e0),uZn.Kd=function(){return this.b},uZn.Ld=function(){return this.b},uZn.Wd=function(){return this.b},uZn.Jc=function(n){this.a.Jc(n)},uZn.Lc=function(){return this.a.Lc()},uZn.Oc=function(){return this.a.Oc()},zW(AZn,"Sets/UnmodifiableNavigableSet",616),sDn(2031,2030,a1n,bJ),uZn.Vd=function(){return sB(),new KM(this.a)},uZn.Cc=function(){return sB(),new KM(this.a)},uZn.xd=function(){return sB(),new KM(this.a)},zW(AZn,"SingletonImmutableBiMap",2031),sDn(657,2105,r1n,Uq),uZn.Rd=function(){return this.a},zW(AZn,"SingletonImmutableList",657),sDn(363,2079,u1n,KM),uZn.Kc=function(){return new hb(this.a)},uZn.Hc=function(n){return udn(this.a,n)},uZn.Od=function(){return new hb(this.a)},uZn.gc=function(){return 1},zW(AZn,"SingletonImmutableSet",363),sDn(1148,1,{},g),uZn.Kb=function(n){return uG(n,159)},zW(AZn,"Streams/lambda$0$Type",1148),sDn(1149,1,M1n,jb),uZn.de=function(){B9(this.a)},zW(AZn,"Streams/lambda$1$Type",1149),sDn(1725,1724,NZn,MZ),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.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},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.ac=function(){return 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.ic=function(n){return null==n&&this.a.Ne(n,n),new Hj(this.b)},zW(AZn,"TreeMultimap",1725),sDn(82,1,{3:1,82:1}),uZn.ee=function(n){return new Error(n)},uZn.fe=function(){return this.e},uZn.ge=function(){var n,t,e;for(null==this.k&&(this.k=Inn(xat,zZn,82,0,0,1)),e=this.k,t=Inn(dat,EZn,1,e.length,5,1),n=0;n<e.length;n++)t[n]=e[n].e;return t},uZn.he=function(){return this.f},uZn.ie=function(){return this.g},uZn.je=function(){Yy(this,X4(this.ee(i1(this,this.g)))),Cv(this)},uZn.Ib=function(){return i1(this,this.ie())},uZn.e=E1n,uZn.i=!1,uZn.n=!0;var Dat,xat=zW(kZn,"Throwable",82);sDn(103,82,{3:1,103:1,82:1}),zW(kZn,"Exception",103),sDn(63,103,S1n,Ov,Ky),zW(kZn,"RuntimeException",63),sDn(607,63,S1n),zW(kZn,"JsException",607),sDn(875,607,S1n),zW(P1n,"JavaScriptExceptionBase",875),sDn(485,875,{485:1,3:1,103:1,63:1,82:1},qbn),uZn.ie=function(){return tPn(this),this.c},uZn.ke=function(){return xA(this.b)===xA(Dat)?null:this.b},zW(I1n,"JavaScriptException",485);var Rat,Kat=zW(I1n,"JavaScriptObject$",0);sDn(2047,1,{}),zW(I1n,"Scheduler",2047);var Fat,_at,Bat,Hat,Uat=0,Gat=0,qat=-1;sDn(902,2047,{},p),zW(P1n,"SchedulerImpl",902),sDn(2058,1,{}),zW(P1n,"StackTraceCreator/Collector",2058),sDn(876,2058,{},m),uZn.le=function(n){var t={},e=[];n[A1n]=e;for(var i=arguments.callee.caller;i;){var r=(EZ(),i.name||(i.name=Qcn(i.toString())));e.push(r);var c,a,o=":"+r,u=t[o];if(u)for(c=0,a=u.length;c<a;c++)if(u[c]===i)return;(u||(t[o]=[])).push(i),i=i.caller}},uZn.me=function(n){var t,e,i,r;for(EZ(),e=(i=n&&n[A1n]?n[A1n]:[]).length,r=Inn(jot,zZn,319,e,0,1),t=0;t<e;t++)r[t]=new kY(i[t],null,-1);return r},zW(P1n,"StackTraceCreator/CollectorLegacy",876),sDn(2059,2058,{}),uZn.le=function(n){},uZn.ne=function(n,t,e,i){return new kY(t,n+"@"+i,e<0?-1:e)},uZn.me=function(n){var t,e,i,r,c,a;if(r=WTn(n),c=Inn(jot,zZn,319,0,0,1),t=0,0==(i=r.length))return c;for(m_((a=rQn(this,r[0])).d,O1n)||(c[t++]=a),e=1;e<i;e++)c[t++]=rQn(this,r[e]);return c},zW(P1n,"StackTraceCreator/CollectorModern",2059),sDn(877,2059,{},v),uZn.ne=function(n,t,e,i){return new kY(t,n,-1)},zW(P1n,"StackTraceCreator/CollectorModernNoSourceMap",877),sDn(1064,1,{}),zW(c0n,a0n,1064),sDn(624,1064,{624:1},JW),zW(o0n,a0n,624),sDn(2101,1,{}),zW(c0n,u0n,2101),sDn(2102,2101,{}),zW(o0n,u0n,2102),sDn(1120,1,{},k),zW(o0n,"LocaleInfo",1120),sDn(2027,1,{},y),uZn.a=0,zW(o0n,"TimeZone",2027),sDn(1293,2102,{},M),zW("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1293),sDn(443,1,{443:1},hG),uZn.a=!1,uZn.b=0,zW(c0n,"DateTimeFormat/PatternPart",443),sDn(206,1,s0n,QE,Lfn,DK),uZn.Fd=function(n){return k4(this,uG(n,206))},uZn.Fb=function(n){return F$(n,206)&&_A(Bsn(this.q.getTime()),Bsn(uG(n,206).q.getTime()))},uZn.Hb=function(){var n;return pz(P3(n=Bsn(this.q.getTime()),Dz(n,32)))},uZn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=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;t<n;t++)t>0&&(e.a+=","),QA(e,uin(this,t));return e.a+="]",e.a},zW(h0n,"JSONArray",221),sDn(492,2064,{492: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",492),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<r;++i)t=e[i],n?n=!1:c.a+=TZn,JA(c,l$n(t)),c.a+=":",QA(c,v0(this,t));return c.a+="}",c.a},zW(h0n,"JSONObject",190),sDn(605,KZn,FZn,JE),uZn.Hc=function(n){return RA(n)&&hT(this.a,mK(n))},uZn.Kc=function(){return new Jw(new IM(this.b))},uZn.gc=function(){return this.b.length},zW(h0n,"JSONObject/1",605),sDn(211,2064,{211:1},QW),uZn.Fb=function(n){return!!F$(n,211)&&m_(this.a,uG(n,211).a)},uZn.oe=function(){return cv},uZn.Hb=function(){return pln(this.a)},uZn.te=function(){return this},uZn.Ib=function(){return l$n(this.a)},zW(h0n,"JSONString",211),sDn(2060,1,{533:1}),zW(m0n,"OutputStream",2060),sDn(2061,2060,{533:1}),zW(m0n,"FilterOutputStream",2061),sDn(878,2061,{533:1},S),zW(m0n,"PrintStream",878),sDn(427,1,{483:1}),uZn.Ib=function(){return this.a},zW(kZn,"AbstractStringBuilder",427),sDn(538,63,S1n,wM),zW(kZn,"ArithmeticException",538),sDn(77,63,v0n,Lv,dM),zW(kZn,"IndexOutOfBoundsException",77),sDn(333,77,{3:1,333:1,103:1,77:1,63:1,82:1},Ik,YM),zW(kZn,"ArrayIndexOutOfBoundsException",333),sDn(537,63,S1n,Nv,gM),zW(kZn,"ArrayStoreException",537),sDn(295,82,k0n,pM),zW(kZn,"Error",295),sDn(200,295,k0n,Av,x9),zW(kZn,"AssertionError",200),fZn={3:1,484:1,34:1};var rot,cot=zW(kZn,"Boolean",484);sDn(242,1,{3:1,242:1}),zW(kZn,"Number",242),sDn(222,242,{3:1,222:1,34:1,242:1},Dw),uZn.Fd=function(n){return oT(this,uG(n,222))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,222)&&uG(n,222).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var aot,oot,uot=zW(kZn,"Byte",222);sDn(180,1,{3:1,180:1,34:1},xw),uZn.Fd=function(n){return uT(this,uG(n,180))},uZn.Fb=function(n){return F$(n,180)&&uG(n,180).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return String.fromCharCode(this.a)},uZn.a=0;var sot,hot=zW(kZn,"Character",180);sDn(212,63,{3:1,212:1,103:1,63:1,82:1},$v,mM),zW(kZn,"ClassCastException",212),lZn={3:1,34:1,345:1,242:1};var fot=zW(kZn,"Double",345);sDn(161,242,{3:1,34:1,161:1,242:1},Rw,tk),uZn.Fd=function(n){return DL(this,uG(n,161))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,161)&&p_(this.a,uG(n,161).a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return""+this.a},uZn.a=0;var lot=zW(kZn,"Float",161);sDn(33,63,{3:1,103:1,33:1,63:1,82:1},Dv,vM,tbn),zW(kZn,"IllegalArgumentException",33),sDn(73,63,S1n,xv,kM),zW(kZn,"IllegalStateException",73),sDn(17,242,{3:1,34:1,17:1,242:1},Iw),uZn.Fd=function(n){return NL(this,uG(n,17))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,17)&&uG(n,17).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var bot,wot,dot=zW(kZn,"Integer",17);sDn(168,242,{3:1,34:1,168:1,242:1},Ow),uZn.Fd=function(n){return $L(this,uG(n,168))},uZn.ue=function(){return W4(this.a)},uZn.Fb=function(n){return F$(n,168)&&_A(uG(n,168).a,this.a)},uZn.Hb=function(){return TF(this.a)},uZn.Ib=function(){return""+oV(this.a)},uZn.a=0;var got,pot,mot,vot,kot,yot=zW(kZn,"Long",168);sDn(2140,1,{}),sDn(1904,63,S1n,yM),zW(kZn,"NegativeArraySizeException",1904),sDn(169,607,{3:1,103:1,169:1,63:1,82:1},Rv,MM),uZn.ee=function(n){return new TypeError(n)},zW(kZn,"NullPointerException",169),sDn(130,33,{3:1,103:1,33:1,130:1,63:1,82:1},ZM),zW(kZn,"NumberFormatException",130),sDn(191,242,{3:1,34:1,242:1,191:1},Aw),uZn.Fd=function(n){return sT(this,uG(n,191))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,191)&&uG(n,191).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var Mot,Tot=zW(kZn,"Short",191);sDn(319,1,{3:1,319:1},kY),uZn.Fb=function(n){var t;return!!F$(n,319)&&(t=uG(n,319),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[xwn(this.c),this.a,this.d,this.b]))},uZn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},uZn.c=0;var jot=zW(kZn,"StackTraceElement",319);bZn={3:1,483:1,34:1,2:1};var Eot,Sot,Pot,Cot,Iot,Oot,Aot,Lot,Not,$ot=zW(kZn,C1n,2);sDn(111,427,{483:1},zM,VM,fx),zW(kZn,"StringBuffer",111),sDn(104,427,{483: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(dzn(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 dzn(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(497,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",497),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(300,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",300),sDn(493,1,{493: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",493),sDn(397,493,{493: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.length<t&&(n=aT(new Array(t),n)),Pon(this,n,t),n.length>t&&uQ(n,t,null),n},uZn.b=0,uZn.c=0,zW(DZn,"ArrayDeque",310),sDn(458,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",458),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;i<r;++i)t=e[i],n.Cd(t)},uZn.Xb=function(n){return Vq(this,n)},uZn.hd=function(n,t){var e;return u3(n,this.a.length),e=this.a[n],uQ(this.a,n,t),e},uZn.gc=function(){return this.a.length},uZn.jd=function(n){UX(this.a,this.a.length,n)},uZn.Pc=function(){return Skn(this,Inn(dat,EZn,1,this.a.length,5,1))},uZn.Qc=function(n){return Skn(this,n)},zW(DZn,"Arrays/ArrayList",151),sDn(953,56,R0n,C),uZn.Hc=function(n){return!1},uZn.Xb=function(n){return oL(n)},uZn.Kc=function(){return hZ(),wS(),Qot},uZn.ed=function(){return hZ(),wS(),Qot},uZn.gc=function(){return 0},zW(DZn,"Collections/EmptyList",953),sDn(954,1,UZn,I),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 xv)},uZn.Wb=function(n){throw hv(new xv)},zW(DZn,"Collections/EmptyListIterator",954),sDn(956,2065,a1n,O),uZn._b=function(n){return!1},uZn.uc=function(n){return!1},uZn.vc=function(){return hZ(),Wot},uZn.xc=function(n){return null},uZn.ec=function(){return hZ(),Wot},uZn.gc=function(){return 0},uZn.Cc=function(){return hZ(),zot},zW(DZn,"Collections/EmptyMap",956),sDn(955,KZn,u1n,A),uZn.Hc=function(n){return!1},uZn.Kc=function(){return hZ(),wS(),Qot},uZn.gc=function(){return 0},zW(DZn,"Collections/EmptySet",955),sDn(608,56,{3:1,20:1,31:1,56:1,16:1,15:1},Xw),uZn.Hc=function(n){return OJ(this.a,n)},uZn.Xb=function(n){return u3(n,1),this.a},uZn.gc=function(){return 1},zW(DZn,"Collections/SingletonList",608),sDn(384,1,e1n,qw),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return new fX(null,this.Nc())},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return Rj()},uZn.Gc=function(n){return Kj()},uZn.$b=function(){Fj()},uZn.Hc=function(n){return ZE(this,n)},uZn.Ic=function(n){return nS(this,n)},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Gw(this.b.Kc())},uZn.Mc=function(n){return _j()},uZn.gc=function(){return this.b.gc()},uZn.Pc=function(){return this.b.Pc()},uZn.Qc=function(n){return tS(this,n)},uZn.Ib=function(){return cpn(this.b)},zW(DZn,"Collections/UnmodifiableCollection",384),sDn(383,1,$Zn,Gw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Pb=function(){return this.b.Pb()},uZn.Qb=function(){Bj()},zW(DZn,"Collections/UnmodifiableCollectionIterator",383),sDn(540,384,K0n,gx),uZn.Nc=function(){return new h3(this,16)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Fb=function(n){return udn(this.a,n)},uZn.Xb=function(n){return this.a.Xb(n)},uZn.Hb=function(){return Hon(this.a)},uZn.dd=function(n){return this.a.dd(n)},uZn.dc=function(){return this.a.dc()},uZn.ed=function(){return new px(this.a.fd(0))},uZn.fd=function(n){return new px(this.a.fd(n))},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.jd=function(n){throw hv(new Kv)},uZn.kd=function(n,t){return new gx(this.a.kd(n,t))},zW(DZn,"Collections/UnmodifiableList",540),sDn(705,383,UZn,px),uZn.Qb=function(){Bj()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Sb=function(){return this.a.Sb()},uZn.Tb=function(){return this.a.Tb()},uZn.Ub=function(){return this.a.Ub()},uZn.Vb=function(){return this.a.Vb()},uZn.Wb=function(n){throw hv(new Kv)},zW(DZn,"Collections/UnmodifiableListIterator",705),sDn(609,1,xZn,Vw),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return this.c._b(n)},uZn.uc=function(n){return iS(this,n)},uZn.vc=function(){return EJ(this)},uZn.Fb=function(n){return rS(this,n)},uZn.xc=function(n){return this.c.xc(n)},uZn.Hb=function(){return Hon(this.c)},uZn.dc=function(){return this.c.dc()},uZn.ec=function(){return SJ(this)},uZn.zc=function(n,t){throw hv(new Kv)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.gc()},uZn.Ib=function(){return cpn(this.c)},uZn.Cc=function(){return jJ(this)},zW(DZn,"Collections/UnmodifiableMap",609),sDn(396,384,o1n,nT),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return udn(this.b,n)},uZn.Hb=function(){return Hon(this.b)},zW(DZn,"Collections/UnmodifiableSet",396),sDn(957,396,o1n,tT),uZn.Hc=function(n){return eS(this,n)},uZn.Ic=function(n){return this.b.Ic(n)},uZn.Kc=function(){return new zw(this.b.Kc())},uZn.Pc=function(){var n;return w8(n=this.b.Pc(),n.length),n},uZn.Qc=function(n){return YZ(this,n)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",957),sDn(958,1,$Zn,zw),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return new Yw(uG(this.a.Pb(),44))},uZn.Ob=function(){return this.a.Ob()},uZn.Qb=function(){throw hv(new Kv)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",958),sDn(703,1,$0n,Yw),uZn.Fb=function(n){return this.a.Fb(n)},uZn.ld=function(){return this.a.ld()},uZn.md=function(){return this.a.md()},uZn.Hb=function(){return this.a.Hb()},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return cpn(this.a)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",703),sDn(610,540,{20:1,16:1,15:1,59:1},eT),zW(DZn,"Collections/UnmodifiableRandomAccessList",610),sDn(704,396,s1n,mx),uZn.Nc=function(){return new GP(this)},uZn.Fb=function(n){return udn(this.a,n)},uZn.Hb=function(){return Hon(this.a)},zW(DZn,"Collections/UnmodifiableSortedSet",704),sDn(858,1,F0n,L),uZn.Ne=function(n,t){var e;return 0!=(e=Q5(uG(n,12),uG(t,12)))?e:hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(DZn,"Comparator/lambda$0$Type",858),sDn(769,1,F0n,N),uZn.Ne=function(n,t){return Qq(uG(n,34),uG(t,34))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return sZ(),Zot},zW(DZn,"Comparators/NaturalOrderComparator",769),sDn(1226,1,F0n,$),uZn.Ne=function(n,t){return Wq(uG(n,34),uG(t,34))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return sZ(),Yot},zW(DZn,"Comparators/ReverseNaturalOrderComparator",1226),sDn(52,1,F0n,Zw),uZn.Fb=function(n){return this===n},uZn.Ne=function(n,t){return this.a.Ne(t,n)},uZn.Oe=function(){return this.a},zW(DZn,"Comparators/ReversedComparator",52),sDn(175,63,S1n,Fv),zW(DZn,"ConcurrentModificationException",175),sDn(1948,1,_0n,D),uZn.Pe=function(n){Mmn(this,n)},uZn.Ib=function(){return"DoubleSummaryStatistics[count = "+oV(this.a)+", avg = "+(NP(this.a,0)?c7(this)/W4(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+c7(this)+"]"},uZn.a=0,uZn.b=T0n,uZn.c=M0n,uZn.d=0,uZn.e=0,uZn.f=0,zW(DZn,"DoubleSummaryStatistics",1948),sDn(1868,63,S1n,_v),zW(DZn,"EmptyStackException",1868),sDn(460,2065,xZn,rpn),uZn.zc=function(n,t){return yF(this,n,t)},uZn.$b=function(){AQ(this)},uZn._b=function(n){return DP(this,n)},uZn.uc=function(n){var t,e;for(e=new fS(this.a);e.a<e.c.a.length;)if(t=X5(e),OJ(n,this.b[t.g]))return!0;return!1},uZn.vc=function(){return new nd(this)},uZn.xc=function(n){return AJ(this,n)},uZn.Bc=function(n){return q3(this,n)},uZn.gc=function(){return this.a.c},zW(DZn,"EnumMap",460),sDn(1340,KZn,FZn,nd),uZn.$b=function(){AQ(this.a)},uZn.Hc=function(n){return J4(this,n)},uZn.Kc=function(){return new uX(this.a)},uZn.Mc=function(n){var t;return!!J4(this,n)&&(t=uG(n,44).ld(),q3(this.a,t),!0)},uZn.gc=function(){return this.a.a.c},zW(DZn,"EnumMap/EntrySet",1340),sDn(1341,1,$Zn,uX),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.b=X5(this.a),new zP(this.c,this.b)},uZn.Ob=function(){return b$(this.a)},uZn.Qb=function(){TK(!!this.b),q3(this.c,this.b),this.b=null},zW(DZn,"EnumMap/EntrySetIterator",1341),sDn(1342,2082,$0n,zP),uZn.ld=function(){return this.a},uZn.md=function(){return this.b.b[this.a.g]},uZn.nd=function(n){return nq(this.b.b,this.a.g,n)},zW(DZn,"EnumMap/MapEntry",1342),sDn(181,KZn,{20:1,31:1,16:1,181:1,21:1});var iut=zW(DZn,"EnumSet",181);sDn(162,181,{20:1,31:1,16:1,181:1,162:1,21:1},nB),uZn.Fc=function(n){return Mon(this,uG(n,22))},uZn.Hc=function(n){return RX(this,n)},uZn.Kc=function(){return new fS(this)},uZn.Mc=function(n){return KX(this,n)},uZn.gc=function(){return this.c},uZn.c=0,zW(DZn,"EnumSet/EnumSetImpl",162),sDn(356,1,$Zn,fS),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return X5(this)},uZn.Ob=function(){return b$(this)},uZn.Qb=function(){TK(-1!=this.b),uQ(this.c.b,this.b,null),--this.c.c,this.b=-1},uZn.a=-1,uZn.b=-1,zW(DZn,"EnumSet/EnumSetImpl/IteratorImpl",356),sDn(45,497,B0n,Ym,sS,nL),uZn.Be=function(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)},uZn.Ce=function(n){return null==n?0:0|Hon(n)},zW(DZn,"HashMap",45),sDn(49,KZn,H0n,ek,Dj,oX),uZn.Fc=function(n){return FV(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return cS(this,n)},uZn.dc=function(){return 0==this.a.gc()},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return Q$(this,n)},uZn.gc=function(){return this.a.gc()};var rut,cut=zW(DZn,"HashSet",49);sDn(1897,1,JZn,x),uZn.Dd=function(n){msn(this,n)},uZn.Ib=function(){return"IntSummaryStatistics[count = "+oV(this.a)+", avg = "+(NP(this.a,0)?W4(this.d)/W4(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+oV(this.d)+"]"},uZn.a=0,uZn.b=j1n,uZn.c=vZn,uZn.d=0,zW(DZn,"IntSummaryStatistics",1897),sDn(1062,1,t1n,nN),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Hnn(this)},uZn.c=0,zW(DZn,"InternalHashCodeMap",1062),sDn(726,1,$Zn,Hnn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.d=this.a[this.c++],this.d},uZn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},uZn.Qb=function(){Y$n(this.e,this.d.ld()),0!=this.c&&--this.c},uZn.c=0,uZn.d=null,zW(DZn,"InternalHashCodeMap/1",726),sDn(1060,1,t1n,tN),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new a8(this)},uZn.c=0,uZn.d=0,zW(DZn,"InternalStringMap",1060),sDn(725,1,$Zn,a8),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new tB(this.d,this.c,this.d.d)},uZn.Ob=function(){return!this.a.done},uZn.Qb=function(){Vsn(this.d,this.c.value[0])},zW(DZn,"InternalStringMap/1",725),sDn(1061,2082,$0n,tB),uZn.ld=function(){return this.b.value[0]},uZn.md=function(){return this.a.d!=this.c?_P(this.a,this.b.value[0]):this.b.value[1]},uZn.nd=function(n){return kgn(this.a,this.b.value[0],n)},uZn.c=0,zW(DZn,"InternalStringMap/2",1061),sDn(215,45,B0n,u8,Bnn),uZn.$b=function(){vF(this)},uZn._b=function(n){return BP(this,n)},uZn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(OJ(t.e,n))return!0;t=t.a}return!1},uZn.vc=function(){return new ad(this)},uZn.xc=function(n){return ain(this,n)},uZn.zc=function(n,t){return Akn(this,n,t)},uZn.Bc=function(n){return pen(this,n)},uZn.gc=function(){return oS(this.e)},uZn.c=!1,zW(DZn,"LinkedHashMap",215),sDn(400,397,{493:1,397:1,400:1,44:1},bR,bG),zW(DZn,"LinkedHashMap/ChainEntry",400),sDn(715,KZn,FZn,ad),uZn.$b=function(){vF(this.a)},uZn.Hc=function(n){return Y4(this,n)},uZn.Kc=function(){return new fQ(this)},uZn.Mc=function(n){var t;return!!Y4(this,n)&&(t=uG(n,44).ld(),pen(this.a,t),!0)},uZn.gc=function(){return oS(this.a.e)},zW(DZn,"LinkedHashMap/EntrySet",715),sDn(716,1,$Zn,fQ),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Hen(this)},uZn.Ob=function(){return this.c!=this.d.a.d},uZn.Qb=function(){TK(!!this.a),OB(this.d.a.e.g,this.b),cq(this.a),u7(this.d.a.e,this.a.d),this.b=this.d.a.e.g,this.a=null},uZn.b=0,zW(DZn,"LinkedHashMap/EntrySet/EntryIterator",716),sDn(174,49,H0n,XL,dx,aX);var aut=zW(DZn,"LinkedHashSet",174);sDn(67,2062,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1},lS,Y_),uZn.Fc=function(n){return aq(this,n)},uZn.$b=function(){BY(this)},uZn.fd=function(n){return Fkn(this,n)},uZn.gc=function(){return this.b},uZn.b=0;var out,uut,sut,hut,fut,lut=zW(DZn,"LinkedList",67);sDn(981,1,UZn,eB),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){lW(this,n)},uZn.Ob=function(){return Jj(this)},uZn.Sb=function(){return this.b.b!=this.d.a},uZn.Pb=function(){return I6(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){return F4(this)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){yrn(this)},uZn.Wb=function(n){TK(!!this.c),this.c.c=n},uZn.a=0,uZn.c=null,zW(DZn,"LinkedList/ListIteratorImpl",981),sDn(617,1,{},R),zW(DZn,"LinkedList/Node",617),sDn(2057,1,{}),zW(DZn,"Locale",2057),sDn(873,2057,{},K),uZn.Ib=function(){return""},zW(DZn,"Locale/1",873),sDn(874,2057,{},F),uZn.Ib=function(){return"unknown"},zW(DZn,"Locale/4",874),sDn(112,63,{3:1,103:1,63:1,82:1,112:1},Bv,EY),zW(DZn,"NoSuchElementException",112),sDn(474,1,{474:1},Xy),uZn.Fb=function(n){var t;return n===this||!!F$(n,474)&&(t=uG(n,474),OJ(this.a,t.a))},uZn.Hb=function(){return VN(this.a)},uZn.Ib=function(){return null!=this.a?CZn+ox(this.a)+")":"Optional.empty()"},zW(DZn,"Optional",474),sDn(414,1,{414:1},uL,wR),uZn.Fb=function(n){var t;return n===this||!!F$(n,414)&&(t=uG(n,414),this.a==t.a&&0==ugn(this.b,t.b))},uZn.Hb=function(){return this.a?t0(this.b):0},uZn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},uZn.a=!1,uZn.b=0,zW(DZn,"OptionalDouble",414),sDn(524,1,{524:1},sL,dR),uZn.Fb=function(n){var t;return n===this||!!F$(n,524)&&(t=uG(n,524),this.a==t.a&&0==d$(this.b,t.b))},uZn.Hb=function(){return this.a?this.b:0},uZn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},uZn.a=!1,uZn.b=0,zW(DZn,"OptionalInt",524),sDn(510,2103,RZn,Kz),uZn.Gc=function(n){return _jn(this,n)},uZn.$b=function(){Xv(this.b.c,0)},uZn.Hc=function(n){return-1!=(null==n?-1:Ten(this.b,n,0))},uZn.Kc=function(){return new Qw(this)},uZn.Mc=function(n){return yon(this,n)},uZn.gc=function(){return this.b.c.length},uZn.Nc=function(){return new h3(this,256)},uZn.Pc=function(){return tq(this.b.c)},uZn.Qc=function(n){return Ekn(this.b,n)},zW(DZn,"PriorityQueue",510),sDn(1296,1,$Zn,Qw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a<this.c.b.c.length},uZn.Pb=function(){return MK(this.a<this.c.b.c.length),this.b=this.a++,zq(this.c.b,this.b)},uZn.Qb=function(){TK(-1!=this.b),Con(this.c,this.a=this.b),this.b=-1},uZn.a=0,uZn.b=-1,zW(DZn,"PriorityQueue/1",1296),sDn(234,1,{234:1},Upn,v8),uZn.a=0,uZn.b=0;var but,wut,dut,gut=0;zW(DZn,"Random",234),sDn(25,1,WZn,h3,LW,MY),uZn.Ad=function(n){return 0!=(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return zz(this),this.c},uZn.Nb=function(n){zz(this),this.d.Nb(n)},uZn.Bd=function(n){return urn(this,n)},uZn.a=0,uZn.c=0,zW(DZn,"Spliterators/IteratorSpliterator",25),sDn(494,25,WZn,GP),zW(DZn,"SortedSet/1",494),sDn(611,1,_0n,id),uZn.Pe=function(n){this.a.Cd(n)},zW(DZn,"Spliterator/OfDouble/0methodref$accept$Type",611),sDn(612,1,_0n,ed),uZn.Pe=function(n){this.a.Cd(n)},zW(DZn,"Spliterator/OfDouble/1methodref$accept$Type",612),sDn(613,1,JZn,rd),uZn.Dd=function(n){this.a.Cd(xwn(n))},zW(DZn,"Spliterator/OfInt/2methodref$accept$Type",613),sDn(614,1,JZn,cd),uZn.Dd=function(n){this.a.Cd(xwn(n))},zW(DZn,"Spliterator/OfInt/3methodref$accept$Type",614),sDn(625,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return 0!=(this.d&n)},uZn.yd=function(){return this.d},uZn.zd=function(){return this.e},uZn.d=0,uZn.e=0,zW(DZn,"Spliterators/BaseSpliterator",625),sDn(736,625,WZn),uZn.Qe=function(n){tE(this,n)},uZn.Nb=function(n){F$(n,189)?tE(this,uG(n,189)):tE(this,new ed(n))},uZn.Bd=function(n){return F$(n,189)?this.Re(uG(n,189)):this.Re(new id(n))},zW(DZn,"Spliterators/AbstractDoubleSpliterator",736),sDn(735,625,WZn),uZn.Qe=function(n){tE(this,n)},uZn.Nb=function(n){F$(n,202)?tE(this,uG(n,202)):tE(this,new cd(n))},uZn.Bd=function(n){return F$(n,202)?this.Re(uG(n,202)):this.Re(new rd(n))},zW(DZn,"Spliterators/AbstractIntSpliterator",735),sDn(499,625,WZn),zW(DZn,"Spliterators/AbstractSpliterator",499),sDn(706,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return 0!=(this.b&n)},uZn.yd=function(){return this.b},uZn.zd=function(){return this.d-this.c},uZn.b=0,uZn.c=0,uZn.d=0,zW(DZn,"Spliterators/BaseArraySpliterator",706),sDn(960,706,WZn,Sq),uZn.Se=function(n,t){bT(this,uG(n,41),t)},uZn.Nb=function(n){hQ(this,n)},uZn.Bd=function(n){return x7(this,n)},zW(DZn,"Spliterators/ArraySpliterator",960),sDn(707,706,WZn,__),uZn.Se=function(n,t){wT(this,uG(n,189),t)},uZn.Qe=function(n){hQ(this,n)},uZn.Nb=function(n){F$(n,189)?hQ(this,uG(n,189)):hQ(this,new ed(n))},uZn.Re=function(n){return x7(this,n)},uZn.Bd=function(n){return F$(n,189)?x7(this,uG(n,189)):x7(this,new id(n))},zW(DZn,"Spliterators/DoubleArraySpliterator",707),sDn(2066,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return 0!=(16448&n)},uZn.yd=function(){return 16448},uZn.zd=function(){return 0},zW(DZn,"Spliterators/EmptySpliterator",2066),sDn(959,2066,WZn,_),uZn.Qe=function(n){Bl(n)},uZn.Nb=function(n){F$(n,202)?Bl(uG(n,202)):Bl(new cd(n))},uZn.Re=function(n){return HP(n)},uZn.Bd=function(n){return F$(n,202)?HP(uG(n,202)):HP(new rd(n))},zW(DZn,"Spliterators/EmptySpliterator/OfInt",959),sDn(588,56,J0n,ck),uZn.bd=function(n,t){Vz(n,this.a.c.length+1),GX(this.a,n,t)},uZn.Fc=function(n){return kD(this.a,n)},uZn.cd=function(n,t){return Vz(n,this.a.c.length+1),Cbn(this.a,n,t)},uZn.Gc=function(n){return Ohn(this.a,n)},uZn.$b=function(){Xv(this.a.c,0)},uZn.Hc=function(n){return-1!=Ten(this.a,n,0)},uZn.Ic=function(n){return yhn(this.a,n)},uZn.Jc=function(n){Prn(this.a,n)},uZn.Xb=function(n){return Vz(n,this.a.c.length),zq(this.a,n)},uZn.dd=function(n){return Ten(this.a,n,0)},uZn.dc=function(){return 0==this.a.c.length},uZn.Kc=function(){return new Ww(this.a)},uZn.gd=function(n){return Vz(n,this.a.c.length),i7(this.a,n)},uZn.ce=function(n,t){P2(this.a,n,t)},uZn.hd=function(n,t){return Vz(n,this.a.c.length),Y8(this.a,n,t)},uZn.gc=function(){return this.a.c.length},uZn.jd=function(n){f$(this.a,n)},uZn.kd=function(n,t){return new C2(this.a,n,t)},uZn.Pc=function(){return tq(this.a.c)},uZn.Qc=function(n){return Ekn(this.a,n)},uZn.Ib=function(){return vIn(this.a)},zW(DZn,"Vector",588),sDn(824,588,J0n,Ok),zW(DZn,"Stack",824),sDn(213,1,{213:1},Ysn),uZn.Ib=function(){return R4(this)},zW(DZn,"StringJoiner",213),sDn(553,2090,{3:1,85:1,139:1,133:1},hS,Hz),uZn.$b=function(){Jy(this)},uZn.De=function(){return new i6(this)},uZn.vc=function(){return new kx(this)},uZn.Ee=function(n){return Zmn(this,n,!0)},uZn.Fe=function(n){return mln(this,n)},uZn.Ge=function(){return Ytn(this)},uZn.He=function(n){return nvn(this,n,!0)},uZn.Ie=function(n){return Zmn(this,n,!1)},uZn.Je=function(){return Ztn(this)},uZn.Ke=function(n){return nvn(this,n,!1)},uZn.Zc=function(n,t){return N2(this,n,t)},uZn.zc=function(n,t){return xfn(this,n,t)},uZn.Bc=function(n){return V1(this,n)},uZn.Le=function(n){return Lnn(this,n)},uZn.gc=function(){return this.c},uZn.ad=function(n,t){return $2(this,n,t)},uZn.c=0,zW(DZn,"TreeMap",553),sDn(554,1,$Zn,i6,dun),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return kR(this)},uZn.Ob=function(){return AP(this.a)},uZn.Qb=function(){rB(this)},zW(DZn,"TreeMap/EntryIterator",554),sDn(1142,629,FZn,kx),uZn.$b=function(){Jy(this.a)},zW(DZn,"TreeMap/EntrySet",1142),sDn(447,397,{493:1,397:1,44:1,447:1},_nn),uZn.b=!1;var put,mut,vut,kut,yut=zW(DZn,"TreeMap/Node",447);sDn(630,1,{},B),uZn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(DZn,"TreeMap/State",630),sDn(631,2090,_Zn,AOn),uZn.De=function(){return new dun(this.c,this.f,this.b,this.a,this.e,this.d)},uZn.vc=function(){return new Uw(this)},uZn.Ee=function(n){return SG(this,Zmn(this.c,n,!0))},uZn.Fe=function(n){return SG(this,mln(this.c,n))},uZn.Ge=function(){var n;return(n=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,n.d)?n:null},uZn.He=function(n){return SG(this,nvn(this.c,n,!0))},uZn.Ie=function(n){return SG(this,Zmn(this.c,n,!1))},uZn.Je=function(){var n;return(n=this.f.Ue()?this.d?nvn(this.c,this.e,!0):nvn(this.c,this.e,!1):Ztn(this.c))&&$Q(this,n.d)?n:null},uZn.Ke=function(n){return SG(this,nvn(this.c,n,!1))},uZn.Zc=function(n,t){if(this.f.Ue()&&this.c.a.Ne(n,this.e)>0)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(303,22,n2n,qP),uZn.Te=function(){return!1},uZn.Ue=function(){return!1};var Mut,Tut=_cn(DZn,"TreeMap/SubMapType",303,Oat,K6,hB);sDn(1143,303,n2n,SN),uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/1",1143,Tut,null,null),sDn(1144,303,n2n,P$),uZn.Te=function(){return!0},uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/2",1144,Tut,null,null),sDn(1145,303,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,483))},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,499,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,499,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,499,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,499,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,499,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(506,1,{},Sd),zW(l2n,"NodeMicroLayout",506),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.a<r.c.c.length;)t=uG(N3(r),60),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new lS,o=new Ww(n.a.a);o.a<o.c.c.length;)(a=uG(N3(o),316)).k=h,0==a.g&&s8(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=uG(0==w.b?null:(MK(0!=w.b),Lrn(w,w.a.a)),316)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=uG(b.Pb(),60),g=a.k+f.b.a,!lwn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(xdn(),YDt)||n.d==QDt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=uG(l.Pb(),60)).c.Kc();s.Ob();)u=uG(s.Pb(),60),d=hN(n.d)?n.g.ff(f,u):n.g.gf(f,u),u.a.k=e.Math.max(u.a.k,f.i+f.d.b+d-u.b.a),NZ(n,u,n.d)&&(u.a.k=e.Math.max(u.a.k,u.d.c-u.b.a)),--u.a.g,0==u.a.g&&aq(w,u.a)}for(i=new Ww(n.a.b);i.a<i.c.c.length;)(t=uG(N3(i),60)).d.c=t.i},zW(g2n,"LongestPathCompaction",1853),sDn(1756,1,{},w$n),uZn.e=!1;var Vut,Wut,Qut=zW(g2n,T2n,1756);sDn(1757,1,QZn,Id),uZn.Cd=function(n){Khn(this.a,uG(n,42))},zW(g2n,j2n,1757),sDn(1854,1,{},gn),uZn.df=function(n){var t,e,i,r,c,a;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),60).c.$b();for(i=new Ww(n.a.b);i.a<i.c.c.length;)for(e=uG(N3(i),60),c=new Ww(n.a.b);c.a<c.c.c.length;)e!=(r=uG(N3(c),60))&&(e.a&&e.a==r.a||(a=hN(n.d)?n.g.gf(e,r):n.g.ff(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&uvn(r.d.d+r.d.a+a,e.d.d)&&svn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},zW(g2n,"QuadraticConstraintCalculation",1854),sDn(529,1,{529:1},nv),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(g2n,E2n,529),sDn(817,1,{},tz),uZn.df=function(n){this.c=n,QAn(this,new vn)},zW(g2n,S2n,817),sDn(1784,1,{693:1},KZ),uZn.bf=function(n){SAn(this,uG(n,472))},zW(g2n,P2n,1784),sDn(1785,1,b2n,pn),uZn.Ne=function(n,t){return eY(uG(n,60),uG(t,60))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(g2n,C2n,1785),sDn(472,1,{472:1},tC),uZn.a=!1,zW(g2n,I2n,472),sDn(1786,1,b2n,mn),uZn.Ne=function(n,t){return xEn(uG(n,472),uG(t,472))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(g2n,O2n,1786),sDn(1787,1,A2n,vn),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(g2n,"ScanlineConstraintCalculator/lambda$1$Type",1787),sDn(436,22,{3:1,34:1,22:1,436:1},eC);var Jut,Yut,Zut,nst=_cn(L2n,"HighLevelSortingCriterion",436,Oat,u1,lB);sDn(435,22,{3:1,34:1,22:1,435:1},iC);var tst,est,ist,rst,cst,ast,ost,ust,sst,hst,fst,lst,bst,wst,dst,gst,pst,mst=_cn(L2n,"LowLevelSortingCriterion",435,Oat,s1,bB),vst=Iq(N2n,"ILayoutMetaDataProvider");sDn(864,1,K2n,Bf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$2n),F2n),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),ust),(lAn(),gNt)),yst),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D2n),F2n),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),ast),gNt),mst),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x2n),F2n),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),rst),gNt),nst),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R2n),F2n),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(qx(),!0)),wNt),cot),ggn(hNt))))},zW(L2n,"PolyominoOptions",864),sDn(257,22,{3:1,34:1,22:1,257:1},rC);var kst,yst=_cn(L2n,"TraversalStrategy",257,Oat,nan,wB);sDn(218,1,{218:1},kn),uZn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},uZn.a=1,uZn.b=0,uZn.c=0,uZn.f=!1,uZn.g=0;var Mst=zW(_2n,"NEdge",218);sDn(182,1,{},uk),zW(_2n,"NEdge/NEdgeBuilder",182),sDn(662,1,{},ak),zW(_2n,"NGraph",662),sDn(125,1,{125:1},g7),uZn.c=-1,uZn.d=0,uZn.e=0,uZn.i=-1,uZn.j=!1;var Tst=zW(_2n,"NNode",125);sDn(808,1,K0n,ok),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return new fX(null,new h3(this,16))},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.bd=function(n,t){++this.b,GX(this.a,n,t)},uZn.Fc=function(n){return Sx(this,n)},uZn.cd=function(n,t){return++this.b,Cbn(this.a,n,t)},uZn.Gc=function(n){return++this.b,Ohn(this.a,n)},uZn.$b=function(){++this.b,Xv(this.a.c,0)},uZn.Hc=function(n){return-1!=Ten(this.a,n,0)},uZn.Ic=function(n){return yhn(this.a,n)},uZn.Xb=function(n){return zq(this.a,n)},uZn.dd=function(n){return Ten(this.a,n,0)},uZn.dc=function(){return 0==this.a.c.length},uZn.Kc=function(){return jtn(new Ww(this.a))},uZn.ed=function(){throw hv(new Kv)},uZn.fd=function(n){throw hv(new Kv)},uZn.gd=function(n){return++this.b,i7(this.a,n)},uZn.Mc=function(n){return Px(this,n)},uZn.hd=function(n,t){return++this.b,Y8(this.a,n,t)},uZn.gc=function(){return this.a.c.length},uZn.kd=function(n,t){return new C2(this.a,n,t)},uZn.Pc=function(){return tq(this.a.c)},uZn.Qc=function(n){return Ekn(this.a,n)},uZn.b=0,zW(_2n,"NNode/ChangeAwareArrayList",808),sDn(275,1,{},sk),zW(_2n,"NNode/NNodeBuilder",275),sDn(1695,1,{},yn),uZn.a=!1,uZn.f=vZn,uZn.j=0,zW(_2n,"NetworkSimplex",1695),sDn(1314,1,QZn,Od),uZn.Cd=function(n){uQn(this.a,uG(n,695),!0,!1)},zW(H2n,"NodeLabelAndSizeCalculator/lambda$0$Type",1314),sDn(565,1,{},Ad),uZn.b=!0,uZn.c=!0,uZn.d=!0,uZn.e=!0,zW(H2n,"NodeMarginCalculator",565),sDn(217,1,{217:1}),uZn.j=!1,uZn.k=!1;var jst,Est,Sst,Pst=zW(U2n,"Cell",217);sDn(127,217,{127:1,217:1},AF),uZn.jf=function(){return eq(this)},uZn.kf=function(){var n;return n=this.n,this.a.a+n.b+n.c},zW(U2n,"AtomicCell",127),sDn(237,22,{3:1,34:1,22:1,237:1},cC);var Cst,Ist=_cn(U2n,"ContainerArea",237,Oat,K2,dB);sDn(336,217,q2n),zW(U2n,"ContainerCell",336),sDn(1538,336,q2n,umn),uZn.jf=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].jf()):n=ypn(this,ATn(this,!0)),n>0?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;i<r;++i)n=t[i],c=e.Math.max(c,ypn(this,wEn(this,n,!0)));return c>0?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;i<r;++i)_Fn(this,t=e[i],n);else for(Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)_Fn(this,t=e[i],n=wEn(this,t,!1))},uZn.mf=function(){var n,t,i,r;t=this.i,n=this.n,r=ATn(this,!1),J9(this,(Yrn(),jst),t.d+n.d,r),J9(this,Sst,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(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(470,22,{3:1,34:1,22:1,470:1},aC);var Dst,xst=_cn(U2n,"HorizontalLabelAlignment",470,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(471,22,{3:1,34:1,22:1,471: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",471,Oat,x2,pB);sDn(800,1,{},kQn),uZn.c=0,uZn.d=0,uZn.k=0,uZn.s=0,uZn.t=0,uZn.v=!1,uZn.w=0,uZn.D=!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 fzn(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 zHn(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<this.o;r++)e+=""+n.a,n=xwn(xK(n.a));for(e+="\n",n=xwn(0),c=0;c<this.p;c++){for(e+=""+n.a,n=xwn(xK(n.a)),i=0;i<this.o;i++)0==dwn(t=Son(this,i,c),0)?e+="_":0==dwn(t,1)?e+="X":e+="0";e+="\n"}return r1(e,0,e.length-1)},uZn.o=0,uZn.p=0,zW(f3n,"TwoBitGrid",1317),sDn(330,1317,{330:1},smn),uZn.j=0,uZn.k=0,zW(f3n,"PlanarGrid",330),sDn(176,330,{330:1,176:1}),uZn.g=0,uZn.i=0,zW(f3n,"Polyomino",176);var Pht=Iq(p3n,m3n);sDn(137,1,v3n,Yn),uZn.qf=function(n,t){return vfn(this,n,t)},uZn.nf=function(){return MX(this)},uZn.of=function(n){return oIn(this,n)},uZn.pf=function(n){return vR(this,n)},zW(p3n,"MapPropertyHolder",137),sDn(1318,137,v3n,bFn),zW(f3n,"Polyominoes",1318);var Cht,Iht,Oht,Aht,Lht,Nht,$ht,Dht,xht=!1;sDn(1828,1,QZn,Zn),uZn.Cd=function(n){Szn(uG(n,225))},zW(k3n,"DepthFirstCompaction/0methodref$compactTree$Type",1828),sDn(825,1,QZn,Dd),uZn.Cd=function(n){JQ(this.a,uG(n,225))},zW(k3n,"DepthFirstCompaction/lambda$1$Type",825),sDn(1829,1,QZn,AB),uZn.Cd=function(n){zvn(this.a,this.b,this.c,uG(n,225))},zW(k3n,"DepthFirstCompaction/lambda$2$Type",1829),sDn(68,1,{68:1},G0),zW(k3n,"Node",68),sDn(1214,1,{},I$),zW(k3n,"ScanlineOverlapCheck",1214),sDn(1215,1,{693:1},_Z),uZn.bf=function(n){WK(this,uG(n,450))},zW(k3n,"ScanlineOverlapCheck/OverlapsScanlineHandler",1215),sDn(1216,1,b2n,nt),uZn.Ne=function(n,t){return ogn(uG(n,68),uG(t,68))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(k3n,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1216),sDn(450,1,{450:1},fC),uZn.a=!1,zW(k3n,"ScanlineOverlapCheck/Timestamp",450),sDn(1217,1,b2n,tt),uZn.Ne=function(n,t){return REn(uG(n,450),uG(t,450))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(k3n,"ScanlineOverlapCheck/lambda$0$Type",1217),sDn(557,1,{},et),zW(y3n,"SVGImage",557),sDn(334,1,{334:1},LB),uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(y3n,"UniqueTriple",334),sDn(205,1,M3n),zW(T3n,"AbstractLayoutProvider",205),sDn(1114,205,M3n,it),uZn.rf=function(n,t){var e,i,r;t.Ug(j3n,1),this.a=uM(pK(zDn(n,(ryn(),ift)))),vnn(n,zht)&&(i=mK(zDn(n,zht)),(e=QBn(aan(),i))&&uG(A1(e.f),205).rf(n,t.eh(1))),r=new L5(this.a),this.b=FWn(r,n),0===uG(zDn(n,(pbn(),Hht)),488).g?(D$n(new rt,this.b),Myn(n,Qht,oIn(this.b,Qht))):(bS(),String.fromCharCode(10)),oQn(r),Myn(n,Wht,this.b),t.Vg()},uZn.a=0,zW(E3n,"DisCoLayoutProvider",1114),sDn(1208,1,{},rt),uZn.c=!1,uZn.e=0,uZn.f=0,zW(E3n,"DisCoPolyominoCompactor",1208),sDn(567,1,{567:1},hX),uZn.b=!0,zW(S3n,"DCComponent",567),sDn(406,22,{3:1,34:1,22:1,406:1},lC),uZn.a=!1;var Rht,Kht,Fht=_cn(S3n,"DCDirection",406,Oat,_6,yB);sDn(272,137,{3:1,272:1,96:1,137:1},pDn),zW(S3n,"DCElement",272),sDn(407,1,{407:1},bTn),uZn.c=0,zW(S3n,"DCExtension",407),sDn(762,137,v3n,ej),zW(S3n,"DCGraph",762),sDn(488,22,{3:1,34:1,22:1,488:1},qR);var _ht,Bht,Hht,Uht,Ght,qht,Xht,zht,Vht,Wht,Qht,Jht,Yht,Zht,nft,tft,eft,ift,rft,cft,aft,oft=_cn(P3n,C3n,488,Oat,LJ,MB);sDn(865,1,K2n,Hf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I3n),N3n),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),Uht),(lAn(),gNt)),oft),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O3n),N3n),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),kNt),$ot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,A3n),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),vNt),dat),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,L3n),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),vNt),dat),ggn(hNt)))),nXn((new Uf,n))},zW(P3n,"DisCoMetaDataProvider",865),sDn(1010,1,K2n,Uf),uZn.hf=function(n){nXn(n)},zW(P3n,"DisCoOptions",1010),sDn(1011,1,{},ct),uZn.sf=function(){return new it},uZn.tf=function(n){},zW(P3n,"DisCoOptions/DiscoFactory",1011),sDn(568,176,{330:1,176:1,568:1},Uxn),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW("org.eclipse.elk.alg.disco.structures","DCPolyomino",568),sDn(1286,1,y1n,at),uZn.Mb=function(n){return IL(n)},zW(F3n,"ElkGraphComponentsProcessor/lambda$0$Type",1286),sDn(1287,1,{},ot),uZn.Kb=function(n){return lZ(),bIn(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$1$Type",1287),sDn(1288,1,y1n,ut),uZn.Mb=function(n){return uq(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$2$Type",1288),sDn(1289,1,{},st),uZn.Kb=function(n){return lZ(),gIn(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$3$Type",1289),sDn(1290,1,y1n,ht),uZn.Mb=function(n){return sq(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$4$Type",1290),sDn(1291,1,y1n,xd),uZn.Mb=function(n){return Z1(this.a,uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$5$Type",1291),sDn(1292,1,{},Rd),uZn.Kb=function(n){return aQ(this.a,uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$6$Type",1292),sDn(1205,1,{},L5),uZn.a=0,zW(F3n,"ElkGraphTransformer",1205),sDn(1206,1,{},ft),uZn.Yd=function(n,t){XNn(this,uG(n,167),uG(t,272))},zW(F3n,"ElkGraphTransformer/OffsetApplier",1206),sDn(1207,1,QZn,Kd),uZn.Cd=function(n){eD(this,uG(n,8))},zW(F3n,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1207),sDn(760,1,{},lt),zW(G3n,q3n,760),sDn(1195,1,b2n,bt),uZn.Ne=function(n,t){return kNn(uG(n,235),uG(t,235))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G3n,X3n,1195),sDn(1196,1,QZn,bC),uZn.Cd=function(n){c3(this.b,this.a,uG(n,250))},zW(G3n,z3n,1196),sDn(738,205,M3n,hk),uZn.rf=function(n,t){Zxn(this,n,t)},zW(G3n,"ForceLayoutProvider",738),sDn(309,137,{3:1,309:1,96:1,137:1}),zW(V3n,"FParticle",309),sDn(250,309,{3:1,250:1,309:1,96:1,137:1},$W),uZn.Ib=function(){var n;return this.a?(n=Ten(this.a.a,this,0))>=0?"b"+n+"["+X8(this.a)+"]":"b["+X8(this.a)+"]":"b_"+xx(this)},zW(V3n,"FBendpoint",250),sDn(289,137,{3:1,289:1,96:1,137:1},$F),uZn.Ib=function(){return X8(this)},zW(V3n,"FEdge",289),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(453,309,{3:1,453: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",453),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,(cGn(),$ft)),17).a)/a),c},uZn.vf=function(n){pGn(this,n),this.a=uG(oIn(n,(cGn(),Tft)),17).a,this.c=uM(pK(oIn(n,_ft))),this.b=uM(pK(oIn(n,xft)))},uZn.xf=function(n){return n<this.a},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"EadesModel",641),sDn(642,2100,{642:1},zG),uZn.uf=function(n,t){var i,r,c,a,o;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),o=e.Math.sqrt(c.a*c.a+c.b*c.b),a=jR(r=e.Math.max(0,o-NQ(n.e)/2-NQ(t.e)/2),this.a)*uG(oIn(n,(cGn(),$ft)),17).a,(i=VNn(this.e,n,t))>0&&(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,(cGn(),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.a<u.c.c.length;)a+=(o=uG(N3(u),153)).e.a,c+=o.e.b;t=a*c,i=uM(pK(oIn(n,_ft)))*Z2n,this.a=e.Math.sqrt(t/(2*r))*i},uZn.wf=function(){ITn(this),this.b-=this.c},uZn.xf=function(n){return this.b>0},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||(czn(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,453))},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(469,86,{469:1,86:1},Jx,Yvn),uZn.Ib=function(){return""},zW(_4n,"ComponentsToCGraphTransformer/CRectNode",469),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,475))},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(475,1,{475:1},KC),uZn.a=!1,zW(H4n,I2n,475),sDn(1901,1,b2n,Et),uZn.Ne=function(n,t){return KEn(uG(n,475),uG(t,475))},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.a<t.c.c.length;)if(uG(N3(t),335).Ff(n))return;kD(this.a,new DR(n))},uZn.Ef=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(this.a.c.length=0,t.a.c.length=0,n.dc())return t.f.a=0,void(t.f.b=0);for(zsn(t,a=uG(n.Xb(0),36)),r=n.Kc();r.Ob();)i=uG(r.Pb(),36),this.Hf(i);for(w=new sj,c=uM(pK(oIn(a,(jYn(),wTt)))),s=new Ww(this.a);s.a<s.c.c.length;)h=ZJn(o=uG(N3(s),335),c),utn(KW(o.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,oM(gK(oIn(a,pyt)))&&xA(oIn(a,Vyt))===xA((_gn(),uxt))){for(b=n.Kc();b.Ob();)tHn(f=uG(b.Pb(),36),f.c.a,f.c.b);for(oYn(e=new It,n,c),l=n.Kc();l.Ob();)JF(dL((f=uG(l.Pb(),36)).c),e.e);JF(dL(t.f),e.a)}for(u=new Ww(this.a);u.a<u.c.c.length;)otn(t,KW((o=uG(N3(u),335)).b))},zW(G4n,"ComponentGroupGraphPlacer",779),sDn(1312,779,{},Lk),uZn.Hf=function(n){Kwn(this,n)},uZn.Ef=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(this.a.c.length=0,t.a.c.length=0,n.dc())return t.f.a=0,void(t.f.b=0);for(zsn(t,a=uG(n.Xb(0),36)),r=n.Kc();r.Ob();)Kwn(this,uG(r.Pb(),36));for(m=new sj,p=new sj,d=new sj,w=new sj,c=uM(pK(oIn(a,(jYn(),wTt)))),s=new Ww(this.a);s.a<s.c.c.length;){if(o=uG(N3(s),335),hN(uG(oIn(t,(XYn(),d$t)),88))){for(d.a=m.a,g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),yRt))){d.a=p.a;break}}else if(fN(uG(oIn(t,d$t),88)))for(d.b=m.b,g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),_Rt))){d.b=p.b;break}if(h=ZJn(uG(o,579),c),utn(KW(o.b),d.a,d.b),hN(uG(oIn(t,d$t),88))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),KRt))){m.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(fN(uG(oIn(t,d$t),88))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),kRt))){m.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,oM(gK(oIn(a,pyt)))&&xA(oIn(a,Vyt))===xA((_gn(),uxt))){for(b=n.Kc();b.Ob();)tHn(f=uG(b.Pb(),36),f.c.a,f.c.b);for(oYn(i=new It,n,c),l=n.Kc();l.Ob();)JF(dL((f=uG(l.Pb(),36)).c),i.e);JF(dL(t.f),i.a)}for(u=new Ww(this.a);u.a<u.c.c.length;)otn(t,KW((o=uG(N3(u),335)).b))},zW(G4n,"ComponentGroupModelOrderGraphPlacer",1312),sDn(389,22,{3:1,34:1,22:1,389:1},EC);var ibt,rbt,cbt,abt=_cn(G4n,"ComponentOrderingStrategy",389,Oat,R6,PB);sDn(659,1,{},It),zW(G4n,"ComponentsCompactor",659),sDn(1533,13,x0n,c9),uZn.Fc=function(n){return CEn(this,uG(n,148))},zW(G4n,"ComponentsCompactor/Hullpoints",1533),sDn(1530,1,{855:1},qyn),uZn.a=!1,zW(G4n,"ComponentsCompactor/InternalComponent",1530),sDn(1529,1,t1n,bk),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},zW(G4n,"ComponentsCompactor/InternalConnectedComponents",1529),sDn(1532,1,{602:1},s$n),uZn.Bf=function(){return null},uZn.Cf=function(){return this.a},uZn.Af=function(){return Dkn(this.d)},uZn.Df=function(){return this.b},zW(G4n,"ComponentsCompactor/InternalExternalExtension",1532),sDn(1531,1,{602:1},vk),uZn.Cf=function(){return this.a},uZn.Af=function(){return Dkn(this.d)},uZn.Bf=function(){return this.c},uZn.Df=function(){return this.b},zW(G4n,"ComponentsCompactor/InternalUnionExternalExtension",1531),sDn(1535,1,{},BFn),zW(G4n,"ComponentsCompactor/OuterSegments",1535),sDn(1534,1,{},wk),zW(G4n,"ComponentsCompactor/Segments",1534),sDn(1282,1,{},p7),zW(G4n,q3n,1282),sDn(1283,1,b2n,$t),uZn.Ne=function(n,t){return J3(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"ComponentsProcessor/lambda$0$Type",1283),sDn(579,335,{335:1,579:1},r9),uZn.Ff=function(n){return Lln(this,n)},uZn.Gf=function(n){return rKn(this,n)},zW(G4n,"ModelOrderComponentGroup",579),sDn(1310,2104,{},Dt),uZn.Ef=function(n,t){var i,r,c,a,o,u,s,h,f;if(1!=n.gc()){if(n.dc())return t.a.c.length=0,t.f.a=0,void(t.f.b=0);for(this.Jf(n,t),c=uG(n.Xb(0),36),t.a.c.length=0,zsn(t,c),u=0,f=0,a=n.Kc();a.Ob();)s=uG(a.Pb(),36).f,u=e.Math.max(u,s.a),f+=s.a*s.b;if(u=e.Math.max(u,e.Math.sqrt(f)*uM(pK(oIn(t,(jYn(),dyt))))),r=uM(pK(oIn(t,wTt))),this.If(n,t,u,r),oM(gK(oIn(c,pyt)))){for(oYn(i=new It,n,r),o=n.Kc();o.Ob();)JF(dL(uG(o.Pb(),36).c),i.e);JF(dL(t.f),i.a)}otn(t,n)}else(h=uG(n.Xb(0),36))!=t&&(t.a.c.length=0,_Hn(t,h,0,0),zsn(t,h),WY(t.d,h.d),t.f.a=h.f.a,t.f.b=h.f.b)},uZn.If=function(n,t,i,r){var c,a,o,u,s,h,f,l;for(f=0,l=0,u=0,c=r,o=n.Kc();o.Ob();)f+(h=(a=uG(o.Pb(),36)).f).a>i&&(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.a<c.c.c.length;)r=uG(N3(c),10),a+=uG(oIn(r,cTt),17).a;e.p=a}hZ(),n.jd(new xt)}},zW(G4n,"SimpleRowGraphPlacer",1310),sDn(1313,1310,{},Ct),uZn.If=function(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(b=0,w=0,u=0,c=r,s=null,l=0,o=n.Kc();o.Ob();)(b+(f=(a=uG(o.Pb(),36)).f).a>i&&!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(452,1,{452:1},Sdn),uZn.c=!1,zW(W4n,"CompoundGraphPreprocessor/ExternalPort",452),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(304,137,{3:1,304:1,96:1,137:1}),uZn.p=0,zW(J4n,"LGraphElement",304),sDn(18,304,{3:1,18:1,304:1,96:1,137:1},UZ),uZn.Ib=function(){return MNn(this)};var obt=zW(J4n,"LEdge",18);sDn(36,304,{3:1,20:1,36:1,304: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(473,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.a<t.c.c.length;)n=uG(N3(t),72),kD(this.b,new Xd(n));return this.b},uZn.b=null,zW(J4n,"LGraphAdapters/LEdgeAdapter",473),sDn(665,1,{},mY),uZn.Sf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Zm,e=new Ww(this.a.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)if(i=uG(N3(r),10),this.c.Mb(i)&&(kD(this.b,new RB(this,i,this.e)),this.d)){if(vR(i,(GYn(),Pmt)))for(t=uG(oIn(i,Pmt),15).Kc();t.Ob();)n=uG(t.Pb(),10),kD(this.b,new RB(this,n,!1));if(vR(i,Ept))for(t=uG(oIn(i,Ept),15).Kc();t.Ob();)n=uG(t.Pb(),10),kD(this.b,new RB(this,n,!1))}return this.b},uZn.Lf=function(){throw hv(new TM(Z4n))},uZn.of=function(n){return oIn(this.a,n)},uZn.Mf=function(){return this.a.f},uZn.Nf=function(){return this.a.p},uZn.pf=function(n){return vR(this.a,n)},uZn.Of=function(n){throw hv(new TM(Z4n))},uZn.Pf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},uZn.Qf=function(n){this.a.p=n},uZn.b=null,uZn.d=!1,uZn.e=!1,zW(J4n,"LGraphAdapters/LGraphAdapter",665),sDn(585,666,{187:1},Xd),zW(J4n,"LGraphAdapters/LLabelAdapter",585),sDn(584,666,{695:1},RB),uZn.Tf=function(){return this.b},uZn.Uf=function(){return hZ(),hZ(),zot},uZn.Rf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.e,10).b.c.length),t=new Ww(uG(this.e,10).b);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.a,new Xd(n));return this.a},uZn.Vf=function(){var n;return new OF((n=uG(this.e,10).d).d,n.c,n.a,n.b)},uZn.Wf=function(){return hZ(),hZ(),zot},uZn.Xf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.e,10).j.c.length),t=new Ww(uG(this.e,10).j);t.a<t.c.c.length;)n=uG(N3(t),12),kD(this.c,new _C(n,this.d));return this.c},uZn.Yf=function(){return oM(gK(oIn(uG(this.e,10),(GYn(),Cpt))))},uZn.Zf=function(n){uG(this.e,10).d.b=n.b,uG(this.e,10).d.d=n.d,uG(this.e,10).d.c=n.c,uG(this.e,10).d.a=n.a},uZn.$f=function(n){uG(this.e,10).f.b=n.b,uG(this.e,10).f.d=n.d,uG(this.e,10).f.c=n.c,uG(this.e,10).f.a=n.a},uZn._f=function(){Zcn(this,(zS(),ubt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=!1,zW(J4n,"LGraphAdapters/LNodeAdapter",584),sDn(1788,666,{852:1},_C),uZn.Uf=function(){var n,t,e,i,r,c,a,o;if(this.d&&uG(this.e,12).i.k==(zIn(),gbt))return hZ(),hZ(),zot;if(!this.a){for(this.a=new Zm,e=new Ww(uG(this.e,12).e);e.a<e.c.c.length;)n=uG(N3(e),18),kD(this.a,new qd(n));if(this.d&&(i=uG(oIn(uG(this.e,12),(GYn(),lmt)),10)))for(t=new Fz(ix(qgn(i).a.Kc(),new h));hDn(t);)n=uG(N9(t),18),kD(this.a,new qd(n));if(vR(uG(this.e,12).i,(GYn(),vmt))&&(a=uG(oIn(uG(this.e,12).i,vmt),337),o=uG(ain(a.e,this.e),113)))for(c=new Ww(o.b);c.a<c.c.c.length;)r=uG(N3(c),340),kD(this.a,new qd(r.a))}return this.a},uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(uG(this.e,12).f.c.length),t=new Ww(uG(this.e,12).f);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.b,new Xd(n));return this.b},uZn.Wf=function(){var n,t,e,i,r,c,a,o;if(this.d&&uG(this.e,12).i.k==(zIn(),gbt))return hZ(),hZ(),zot;if(!this.c){for(this.c=new Zm,e=new Ww(uG(this.e,12).g);e.a<e.c.c.length;)n=uG(N3(e),18),kD(this.c,new qd(n));if(this.d&&(i=uG(oIn(uG(this.e,12),(GYn(),lmt)),10)))for(t=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(t);)n=uG(N9(t),18),kD(this.c,new qd(n));if(vR(uG(this.e,12).i,(GYn(),vmt))&&(a=uG(oIn(uG(this.e,12).i,vmt),337),o=uG(ain(a.e,this.e),113)))for(c=new Ww(o.e);c.a<c.c.c.length;)r=uG(N3(c),340),kD(this.c,new qd(r.a))}return this.c},uZn.ag=function(){return uG(this.e,12).j},uZn.bg=function(){return oM(gK(oIn(uG(this.e,12),(GYn(),qpt))))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=!1,zW(J4n,"LGraphAdapters/LPortAdapter",1788),sDn(1789,1,b2n,Kt),uZn.Ne=function(n,t){return H_n(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J4n,"LGraphAdapters/PortComparator",1789),sDn(818,1,y1n,Ft),uZn.Mb=function(n){return uG(n,10),zS(),!0},zW(J4n,"LGraphAdapters/lambda$0$Type",818),sDn(404,304,{3:1,304:1,404:1,96:1,137:1}),zW(J4n,"LShape",404),sDn(72,404,{3:1,304:1,72:1,404:1,96:1,137:1},uj,S$),uZn.Ib=function(){var n;return null==(n=oq(this))?"label":"l_"+n},zW(J4n,"LLabel",72),sDn(214,1,{3:1,4:1,214:1,423:1}),uZn.Fb=function(n){var t;return!!F$(n,214)&&(t=uG(n,214),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},uZn.Hb=function(){var n,t;return n=OL(this.b)<<16,n|=OL(this.a)&D1n,t=OL(this.c)<<16,n^(t|=OL(this.d)&D1n)},uZn.cg=function(n){var t,e,i,r,c,a,o,u,s;for(r=0;r<n.length&&Hbn((s3(r,n.length),n.charCodeAt(r)),r6n);)++r;for(t=n.length;t>0&&Hbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(r<t){u=WGn((Knn(r,t,n.length),n.substr(r,t-r)),",|;");try{for(a=0,o=(c=u).length;a<o;++a){if(2!=(i=WGn(c[a],"=")).length)throw hv(new vM("Expecting a list of key-value pairs."));e=KAn(i[0]),s=YIn(KAn(i[1])),m_(e,"top")?this.d=s:m_(e,"left")?this.b=s:m_(e,"bottom")?this.a=s:m_(e,"right")&&(this.c=s)}}catch(h){throw F$(h=Ehn(h),130)?hv(new vM(a6n+h)):hv(h)}}},uZn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW(o6n,"Spacing",214),sDn(140,214,u6n,Nk,qL,OF,zU);var hbt=zW(o6n,"ElkMargin",140);sDn(660,140,u6n,$k),zW(J4n,"LMargin",660),sDn(10,404,{3:1,304:1,10:1,404:1,96:1,137:1},gMn),uZn.Ib=function(){return byn(this)},uZn.i=!1;var fbt,lbt,bbt,wbt,dbt,gbt,pbt=zW(J4n,"LNode",10);sDn(273,22,{3:1,34:1,22:1,273:1},SC);var mbt,vbt=_cn(J4n,"LNode/NodeType",273,Oat,Vnn,VH);sDn(775,1,y1n,_t),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(J4n,"LNode/lambda$0$Type",775),sDn(107,214,s6n,Dk,CN,VU);var kbt,ybt,Mbt,Tbt,jbt,Ebt,Sbt=zW(o6n,"ElkPadding",107);sDn(778,107,s6n,xk),zW(J4n,"LPadding",778),sDn(12,404,{3:1,304:1,12:1,404:1,96:1,137:1},lOn),uZn.Ib=function(){var n,t,e;return JA(((n=new WM).a+="p_",n),njn(this)),this.i&&JA(QA((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&uG(zq(this.e,0),18).c!=this&&(t=uG(zq(this.e,0),18).c,JA((n.a+=" << ",n),njn(t)),JA(QA((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&uG(zq(this.g,0),18).d!=this&&(e=uG(zq(this.g,0),18).d,JA((n.a+=" >> ",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,304,{3:1,20:1,304: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){yQn(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,465),uG(t,465))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"EndLabelSorter/1",1616),sDn(465,1,{465:1},oZ),zW(d6n,"EndLabelSorter/LabelGroup",465),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){qXn(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){ZHn(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){xHn(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(292,1,{292:1},oHn),uZn.c=0,uZn.d=null,uZn.f=0,zW(d6n,"LabelDummySwitcher/LabelDummyInfo",292),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,292))},zW(d6n,"LabelDummySwitcher/lambda$3$Type",1382),sDn(1383,1,b2n,ti),uZn.Ne=function(n,t){return nV(uG(n,292),uG(t,292))},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){bzn(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){UUn(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){wUn(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){Mzn(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<e.c.c.length;)(t=uG(N3(e),316)).d=this.b,c=jx(KS(new sk,t),this.d),this.c[this.b]=c,++this.b;for(mWn(this),WQn(this),HRn(this),YHn(_B(this.d),new fy),r=new Ww(this.a.a.b);r.a<r.c.c.length;)(i=uG(N3(r),60)).d.c=this.c[i.a.d].e+i.b.a},uZn.b=0,zW(E6n,"NetworkSimplexCompaction",1729),sDn(154,1,{34:1,154:1},Hqn),uZn.Fd=function(n){return Oin(this,uG(n,154))},uZn.Ib=function(){return _wn(this)},zW(E6n,"VerticalSegment",154),sDn(841,1,{},IPn),uZn.c=0,uZn.e=0,uZn.i=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter",841),sDn(677,1,{677:1},Uun),uZn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},uZn.b=0,uZn.c=0,uZn.f=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",677),sDn(293,1,{34:1,293:1},$R),uZn.Fd=function(n){return lq(this,uG(n,293))},uZn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},uZn.a=0,uZn.b=0,uZn.c=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",293),sDn(2026,1,{},_On),uZn.b=0,uZn.e=!1,zW(S6n,"CrossingMatrixFiller",2026);var odt,udt,sdt,hdt,fdt=Iq(P6n,"IInitializable");sDn(1867,1,C6n,qC),uZn.gg=function(n,t,e,i,r,c){},uZn.ig=function(n,t,e){},uZn.eg=function(){return this.c!=(ean(),BEt)},uZn.fg=function(){this.e=Inn(YHt,W1n,28,this.d,15,1)},uZn.hg=function(n,t){t[n][0].c.p=n},uZn.jg=function(n,t,e,i){++this.d},uZn.kg=function(){return!0},uZn.lg=function(n,t,e,i){return iwn(this,n,t,e),p8(this,t)},uZn.mg=function(n,t){var e;return iwn(this,n,e=OT(t,n.length),t),Tfn(this,e)},uZn.d=0,zW(S6n,"GreedySwitchHeuristic",1867),sDn(2029,1,{},sX),uZn.b=0,uZn.d=0,zW(S6n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",2029),sDn(2016,1,{},eBn),uZn.a=!1,zW(S6n,"SwitchDecider",2016),sDn(105,1,{105:1},cAn),uZn.a=null,uZn.c=null,uZn.i=null,zW(I6n,"SelfHyperLoop",105),sDn(2013,1,{},vkn),uZn.c=0,uZn.e=0,zW(I6n,"SelfHyperLoopLabels",2013),sDn(421,22,{3:1,34:1,22:1,421:1},XC);var ldt,bdt,wdt,ddt,gdt,pdt,mdt=_cn(I6n,"SelfHyperLoopLabels/Alignment",421,Oat,U6,VB);sDn(340,1,{340:1},m7),zW(I6n,"SelfLoopEdge",340),sDn(337,1,{337:1},kkn),uZn.a=!1,zW(I6n,"SelfLoopHolder",337),sDn(1790,1,y1n,qr),uZn.Mb=function(n){return v9(uG(n,18))},zW(I6n,"SelfLoopHolder/lambda$0$Type",1790),sDn(113,1,{113:1},Bkn),uZn.a=!1,uZn.c=!1,zW(I6n,"SelfLoopPort",113),sDn(1855,1,y1n,Xr),uZn.Mb=function(n){return v9(uG(n,18))},zW(I6n,"SelfLoopPort/lambda$0$Type",1855),sDn(375,22,{3:1,34:1,22:1,375:1},zC);var vdt,kdt,ydt,Mdt,Tdt,jdt,Edt,Sdt,Pdt=_cn(I6n,"SelfLoopType",375,Oat,s9,WB);sDn(1798,1,{},sl),zW(O6n,"PortRestorer",1798),sDn(372,22,{3:1,34:1,22:1,372:1},VC);var Cdt,Idt,Odt,Adt,Ldt,Ndt,$dt,Ddt,xdt,Rdt=_cn(O6n,"PortRestorer/PortSideArea",372,Oat,_2,qB);sDn(1799,1,{},Dr),uZn.Kb=function(n){return jIn(),uG(n,15).Oc()},zW(O6n,"PortRestorer/lambda$0$Type",1799),sDn(1800,1,QZn,xr),uZn.Cd=function(n){jIn(),uG(n,113).c=!1},zW(O6n,"PortRestorer/lambda$1$Type",1800),sDn(1809,1,y1n,Rr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),_Rt)},zW(O6n,"PortRestorer/lambda$10$Type",1809),sDn(1810,1,{},Kr),uZn.Kb=function(n){return jIn(),uG(n,113).d},zW(O6n,"PortRestorer/lambda$11$Type",1810),sDn(1811,1,QZn,$g),uZn.Cd=function(n){ZT(this.a,uG(n,12))},zW(O6n,"PortRestorer/lambda$12$Type",1811),sDn(1801,1,QZn,Dg),uZn.Cd=function(n){SR(this.a,uG(n,105))},zW(O6n,"PortRestorer/lambda$2$Type",1801),sDn(1802,1,b2n,Fr),uZn.Ne=function(n,t){return wcn(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortRestorer/lambda$3$Type",1802),sDn(1803,1,y1n,_r),uZn.Mb=function(n){return jIn(),uG(n,113).c},zW(O6n,"PortRestorer/lambda$4$Type",1803),sDn(1804,1,y1n,Br),uZn.Mb=function(n){return Vun(uG(n,12))},zW(O6n,"PortRestorer/lambda$5$Type",1804),sDn(1805,1,y1n,$r),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),yRt)},zW(O6n,"PortRestorer/lambda$6$Type",1805),sDn(1806,1,y1n,Hr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),kRt)},zW(O6n,"PortRestorer/lambda$7$Type",1806),sDn(1807,1,y1n,Ur),uZn.Mb=function(n){return z6(uG(n,12))},zW(O6n,"PortRestorer/lambda$8$Type",1807),sDn(1808,1,y1n,Gr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),KRt)},zW(O6n,"PortRestorer/lambda$9$Type",1808),sDn(276,22,{3:1,34:1,22:1,276:1},yY);var Kdt,Fdt,_dt,Bdt,Hdt,Udt,Gdt,qdt,Xdt=_cn(O6n,"PortSideAssigner/Target",276,Oat,drn,QB);sDn(1791,1,{},Vr),uZn.Kb=function(n){return JJ(new fX(null,new h3(uG(n,105).j,16)),new Zr)},zW(O6n,"PortSideAssigner/lambda$1$Type",1791),sDn(1792,1,{},Wr),uZn.Kb=function(n){return uG(n,113).d},zW(O6n,"PortSideAssigner/lambda$2$Type",1792),sDn(1793,1,QZn,Qr),uZn.Cd=function(n){NLn(uG(n,12),(KQn(),yRt))},zW(O6n,"PortSideAssigner/lambda$3$Type",1793),sDn(1794,1,{},Jr),uZn.Kb=function(n){return uG(n,113).d},zW(O6n,"PortSideAssigner/lambda$4$Type",1794),sDn(1795,1,QZn,xg),uZn.Cd=function(n){yv(this.a,uG(n,12))},zW(O6n,"PortSideAssigner/lambda$5$Type",1795),sDn(1796,1,b2n,zr),uZn.Ne=function(n,t){return YQ(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortSideAssigner/lambda$6$Type",1796),sDn(1797,1,b2n,Yr),uZn.Ne=function(n,t){return EG(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortSideAssigner/lambda$7$Type",1797),sDn(820,1,y1n,Zr),uZn.Mb=function(n){return uG(n,113).c},zW(O6n,"PortSideAssigner/lambda$8$Type",820),sDn(2108,1,{}),zW(A6n,"AbstractSelfLoopRouter",2108),sDn(1816,1,b2n,nc),uZn.Ne=function(n,t){return P_(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,t3n,1816),sDn(1817,1,b2n,tc),uZn.Ne=function(n,t){return S_(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,e3n,1817),sDn(1856,2108,{},ec),uZn.ng=function(n,t,e){return e},zW(A6n,"OrthogonalSelfLoopRouter",1856),sDn(1858,1,QZn,GC),uZn.Cd=function(n){Jvn(this.b,this.a,uG(n,8))},zW(A6n,"OrthogonalSelfLoopRouter/lambda$0$Type",1858),sDn(1857,1856,{},ic),uZn.ng=function(n,t,e){var i,r;return sR(e,0,JF(D$((i=n.c.d).n),i.a)),aq(e,JF(D$((r=n.d.d).n),r.a)),NUn(e)},zW(A6n,"PolylineSelfLoopRouter",1857),sDn(1812,1,{},hl),uZn.a=null,zW(A6n,"RoutingDirector",1812),sDn(1813,1,b2n,rc),uZn.Ne=function(n,t){return MG(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,"RoutingDirector/lambda$0$Type",1813),sDn(1814,1,{},cc),uZn.Kb=function(n){return YS(),uG(n,105).j},zW(A6n,"RoutingDirector/lambda$1$Type",1814),sDn(1815,1,QZn,ac),uZn.Cd=function(n){YS(),uG(n,15).jd(Fdt)},zW(A6n,"RoutingDirector/lambda$2$Type",1815),sDn(1818,1,{},oc),zW(A6n,"RoutingSlotAssigner",1818),sDn(1819,1,y1n,Rg),uZn.Mb=function(n){return wA(this.a,uG(n,105))},zW(A6n,"RoutingSlotAssigner/lambda$0$Type",1819),sDn(1820,1,b2n,Kg),uZn.Ne=function(n,t){return bX(this.a,uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,"RoutingSlotAssigner/lambda$1$Type",1820),sDn(1859,1856,{},uc),uZn.ng=function(n,t,e){var i,r,c,a;return i=uM(pK(eyn(n.b.g.b,(jYn(),pTt)))),Xxn(n,t,e,a=new UR(Uhn(cT(PNt,1),zZn,8,0,[(c=n.c.d,JF(new eN(c.n),c.a))])),i),aq(a,JF(new eN((r=n.d.d).n),r.a)),$Mn(new jqn(a))},zW(A6n,"SplineSelfLoopRouter",1859),sDn(586,1,b2n,xon,KG),uZn.Ne=function(n,t){return rYn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L6n,"ModelOrderNodeComparator",586),sDn(1821,1,y1n,sc),uZn.Mb=function(n){return 0!=uG(n,12).e.c.length},zW(L6n,"ModelOrderNodeComparator/lambda$0$Type",1821),sDn(821,1,b2n,Gbn,j6),uZn.Ne=function(n,t){return Jz(this,n,t)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.b=!1,zW(L6n,"ModelOrderPortComparator",821),sDn(815,1,{},hc),uZn.og=function(n,t){var i,r,c,a;for(c=hOn(t),i=new Zm,a=t.f/c,r=1;r<c;++r)kD(i,xwn(pz(Bsn(e.Math.round(r*a)))));return i},uZn.pg=function(){return!1},zW(N6n,"ARDCutIndexHeuristic",815),sDn(1544,1,Q4n,fc),uZn.Kf=function(n,t){mHn(uG(n,36),t)},zW(N6n,"BreakingPointInserter",1544),sDn(313,1,{313:1},O5),uZn.Ib=function(){var n;return(n=new WM).a+="BPInfo[",n.a+="\n\tstart=",QA(n,this.i),n.a+="\n\tend=",QA(n,this.a),n.a+="\n\tnodeStartEdge=",QA(n,this.e),n.a+="\n\tstartEndEdge=",QA(n,this.j),n.a+="\n\toriginalEdge=",QA(n,this.f),n.a+="\n\tstartInLayerDummy=",QA(n,this.k),n.a+="\n\tstartInLayerEdge=",QA(n,this.n),n.a+="\n\tendInLayerDummy=",QA(n,this.b),n.a+="\n\tendInLayerEdge=",QA(n,this.c),n.a},zW(N6n,"BreakingPointInserter/BPInfo",313),sDn(661,1,{661:1},Vg),uZn.a=!1,uZn.b=0,uZn.c=0,zW(N6n,"BreakingPointInserter/Cut",661),sDn(1545,1,Q4n,lc),uZn.Kf=function(n,t){rRn(uG(n,36),t)},zW(N6n,"BreakingPointProcessor",1545),sDn(1546,1,y1n,bc),uZn.Mb=function(n){return Lin(uG(n,10))},zW(N6n,"BreakingPointProcessor/0methodref$isEnd$Type",1546),sDn(1547,1,y1n,wc),uZn.Mb=function(n){return Nin(uG(n,10))},zW(N6n,"BreakingPointProcessor/1methodref$isStart$Type",1547),sDn(1548,1,Q4n,dc),uZn.Kf=function(n,t){URn(this,uG(n,36),t)},zW(N6n,"BreakingPointRemover",1548),sDn(1549,1,QZn,gc),uZn.Cd=function(n){uG(n,131).k=!0},zW(N6n,"BreakingPointRemover/lambda$0$Type",1549),sDn(811,1,{},dDn),uZn.b=0,uZn.e=0,uZn.f=0,uZn.j=0,zW(N6n,"GraphStats",811),sDn(812,1,{},pc),uZn.Ve=function(n,t){return e.Math.max(uM(pK(n)),uM(pK(t)))},zW(N6n,"GraphStats/0methodref$max$Type",812),sDn(813,1,{},mc),uZn.Ve=function(n,t){return e.Math.max(uM(pK(n)),uM(pK(t)))},zW(N6n,"GraphStats/2methodref$max$Type",813),sDn(1726,1,{},vc),uZn.Ve=function(n,t){return TU(pK(n),pK(t))},zW(N6n,"GraphStats/lambda$1$Type",1726),sDn(1727,1,{},Fg),uZn.Kb=function(n){return Hkn(this.a,uG(n,30))},zW(N6n,"GraphStats/lambda$2$Type",1727),sDn(1728,1,{},_g),uZn.Kb=function(n){return FRn(this.a,uG(n,30))},zW(N6n,"GraphStats/lambda$6$Type",1728),sDn(814,1,{},kc),uZn.og=function(n,t){return uG(oIn(n,(jYn(),FTt)),15)||(hZ(),hZ(),zot)},uZn.pg=function(){return!1},zW(N6n,"ICutIndexCalculator/ManualCutIndexCalculator",814),sDn(816,1,{},yc),uZn.og=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(null==t.n&&TTn(t),y=t.n,null==t.d&&TTn(t),s=t.d,(k=Inn(eUt,I0n,28,y.length,15,1))[0]=y[0],m=y[0],h=1;h<y.length;h++)k[h]=k[h-1]+y[h],m+=y[h];for(c=hOn(t)-1,o=uG(oIn(n,(jYn(),_Tt)),17).a,r=T0n,i=new Zm,b=e.Math.max(0,c-o);b<=e.Math.min(t.f-1,c+o);b++){if(g=m/(b+1),p=0,f=1,a=new Zm,v=T0n,l=0,u=0,d=s[0],0==b)v=m,null==t.g&&(t.g=cun(t,new mc)),u=uM(t.g);else{for(;f<t.f;)k[f-1]-p>=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(459,22,{3:1,34:1,22:1,459:1},tI);var Tgt,jgt,Egt,Sgt,Pgt,Cgt,Igt,Ogt=_cn($6n,"EdgeConstraint",459,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(487,22,{3:1,34:1,22:1,487:1},iI);var Dgt,xgt,Rgt,Kgt,Fgt,_gt,Bgt,Hgt=_cn($6n,"EdgeStraighteningStrategy",487,Oat,l1,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(298,22,{3:1,34:1,22:1,298:1},oI);var wpt,dpt,gpt,ppt,mpt=_cn($6n,"GreedySwitchType",298,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,k1,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(462,22,{3:1,34:1,22:1,462:1},mI);var Yjt,Zjt,nEt,tEt,eEt=_cn($6n,"PortType",462,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){mzn(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.a<i.c.c.length;)vR(e=uG(N3(i),10),(GYn(),imt))&&uG(oIn(e,imt),17).a<t&&(t=uG(oIn(e,imt),17).a,r=e);return r||uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyModelOrderCycleBreaker",1401),sDn(1399,1,y9n,el),uZn.rg=function(n){return uG(n,36),SEt},uZn.Kf=function(n,t){Nzn(this,uG(n,36),t)},zW(M9n,"InteractiveCycleBreaker",1399),sDn(1400,1,y9n,nl),uZn.rg=function(n){return uG(n,36),PEt},uZn.Kf=function(n,t){Gzn(this,uG(n,36),t)},uZn.a=0,uZn.b=0,zW(M9n,"ModelOrderCycleBreaker",1400),sDn(1413,1,y9n,Zf),uZn.rg=function(n){return uG(n,36),CEt},uZn.Kf=function(n,t){HQn(this,uG(n,36),t)},zW(T9n,"BreadthFirstModelOrderLayerer",1413),sDn(1414,1,b2n,jc),uZn.Ne=function(n,t){return aLn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"BreadthFirstModelOrderLayerer/lambda$0$Type",1414),sDn(1404,1,y9n,iP),uZn.rg=function(n){return uG(n,36),IEt},uZn.Kf=function(n,t){CYn(this,uG(n,36),t)},zW(T9n,"CoffmanGrahamLayerer",1404),sDn(1405,1,b2n,Bg),uZn.Ne=function(n,t){return ANn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1405),sDn(1406,1,b2n,Hg),uZn.Ne=function(n,t){return oz(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"CoffmanGrahamLayerer/lambda$1$Type",1406),sDn(1415,1,y9n,tl),uZn.rg=function(n){return uG(n,36),OEt},uZn.Kf=function(n,t){QJn(this,uG(n,36),t)},uZn.c=0,uZn.e=0,zW(T9n,"DepthFirstModelOrderLayerer",1415),sDn(1416,1,b2n,Ec),uZn.Ne=function(n,t){return oLn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"DepthFirstModelOrderLayerer/lambda$0$Type",1416),sDn(1407,1,y9n,Sc),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),uwt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){uJn(uG(n,36),t)},zW(T9n,"InteractiveLayerer",1407),sDn(578,1,{578:1},Mk),uZn.a=0,uZn.c=0,zW(T9n,"InteractiveLayerer/LayerSpan",578),sDn(1403,1,y9n,al),uZn.rg=function(n){return uG(n,36),AEt},uZn.Kf=function(n,t){UKn(this,uG(n,36),t)},zW(T9n,"LongestPathLayerer",1403),sDn(1412,1,y9n,cl),uZn.rg=function(n){return uG(n,36),LEt},uZn.Kf=function(n,t){PFn(this,uG(n,36),t)},zW(T9n,"LongestPathSourceLayerer",1412),sDn(1410,1,y9n,ol),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){jJn(this,uG(n,36),t)},uZn.a=0,uZn.b=0,uZn.d=0,zW(T9n,"MinWidthLayerer",1410),sDn(1411,1,b2n,Ug),uZn.Ne=function(n,t){return Ssn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"MinWidthLayerer/MinOutgoingEdgesComparator",1411),sDn(1402,1,y9n,ul),uZn.rg=function(n){return uG(n,36),DEt},uZn.Kf=function(n,t){NVn(this,uG(n,36),t)},zW(T9n,"NetworkSimplexLayerer",1402),sDn(1408,1,y9n,RF),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){BWn(this,uG(n,36),t)},uZn.d=0,uZn.f=0,uZn.g=0,uZn.i=0,uZn.s=0,uZn.t=0,uZn.u=0,zW(T9n,"StretchWidthLayerer",1408),sDn(1409,1,b2n,Pc),uZn.Ne=function(n,t){return j7(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"StretchWidthLayerer/1",1409),sDn(413,1,j9n),uZn.gg=function(n,t,e,i,r,c){},uZn.ug=function(n,t,e){return hUn(this,n,t,e)},uZn.fg=function(){this.g=Inn(iUt,E9n,28,this.d,15,1),this.f=Inn(iUt,E9n,28,this.d,15,1)},uZn.hg=function(n,t){this.e[n]=Inn(YHt,W1n,28,t[n].length,15,1)},uZn.ig=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},uZn.jg=function(n,t,e,i){uG(zq(i[n][t].j,e),12).p=this.d++},uZn.b=0,uZn.c=0,uZn.d=0,zW(S9n,"AbstractBarycenterPortDistributor",413),sDn(1698,1,b2n,Gg),uZn.Ne=function(n,t){return lkn(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"AbstractBarycenterPortDistributor/lambda$0$Type",1698),sDn(832,1,C6n,M6),uZn.gg=function(n,t,e,i,r,c){},uZn.ig=function(n,t,e){},uZn.jg=function(n,t,e,i){},uZn.eg=function(){return!1},uZn.fg=function(){this.c=this.e.a,this.g=this.f.g},uZn.hg=function(n,t){t[n][0].c.p=n},uZn.kg=function(){return!1},uZn.vg=function(n,t,e,i){e?VEn(this,n):(vSn(this,n,i),vWn(this,n,t)),n.c.length>1&&(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<u.c.c.length;)o=uG(N3(u),10),n[t][a++]=o;return!1},uZn.mg=function(n,t){var e,i,r,c,a;for(c=n7(n[a=vX(t,n.length)]),this.vg(c,!1,!0,t),e=0,r=new Ww(c);r.a<r.c.c.length;)i=uG(N3(r),10),n[a][e++]=i;return!1},zW(S9n,"BarycenterHeuristic",832),sDn(667,1,{667:1},zg),uZn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},uZn.b=0,uZn.d=0,uZn.e=!1;var REt=zW(S9n,"BarycenterHeuristic/BarycenterState",667);sDn(1865,1,b2n,qg),uZn.Ne=function(n,t){return sPn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"BarycenterHeuristic/lambda$0$Type",1865),sDn(831,1,C6n,APn),uZn.fg=function(){},uZn.gg=function(n,t,e,i,r,c){},uZn.jg=function(n,t,e,i){},uZn.hg=function(n,t){this.a[n]=Inn(REt,{3:1,4:1,5:1,2117:1},667,t[n].length,0,1),this.b[n]=Inn(UEt,{3:1,4:1,5:1,2118:1},239,t[n].length,0,1)},uZn.ig=function(n,t,e){fkn(this,e[n][t],!0)},uZn.c=!1,zW(S9n,"ForsterConstraintResolver",831),sDn(239,1,{239:1},RZ,SVn),uZn.Ib=function(){var n,t;for((t=new WM).a+="[",n=0;n<this.d.length;n++)JA(t,byn(this.d[n])),null!=oD(this.g,this.d[0]).a&&JA(JA((t.a+="<",t),ZA(oD(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=TZn);return(t.a+="]",t).a},uZn.a=0,uZn.c=0,uZn.f=0;var KEt,FEt,_Et,BEt,HEt,UEt=zW(S9n,"ForsterConstraintResolver/ConstraintGroup",239);sDn(1860,1,QZn,Xg),uZn.Cd=function(n){fkn(this.a,uG(n,10),!1)},zW(S9n,"ForsterConstraintResolver/lambda$0$Type",1860),sDn(219,1,{219:1,230:1},KVn),uZn.gg=function(n,t,e,i,r,c){},uZn.hg=function(n,t){},uZn.fg=function(){this.r=Inn(YHt,W1n,28,this.n,15,1)},uZn.ig=function(n,t,e){var i;(i=e[n][t].e)&&kD(this.b,i)},uZn.jg=function(n,t,e,i){++this.n},uZn.Ib=function(){return MWn(this.e,new ek)},uZn.g=!1,uZn.i=!1,uZn.n=0,uZn.s=!1,zW(S9n,"GraphInfoHolder",219),sDn(1905,1,C6n,Cc),uZn.gg=function(n,t,e,i,r,c){},uZn.hg=function(n,t){},uZn.jg=function(n,t,e,i){},uZn.ug=function(n,t,e){return e&&t>0?j0(this.a,n[t-1],n[t]):!e&&t<n.length-1?j0(this.a,n[t],n[t+1]):Aon(this.a,n[t],e?(KQn(),_Rt):(KQn(),kRt)),cRn(this,n,t,e)},uZn.fg=function(){this.d=Inn(YHt,W1n,28,this.c,15,1),this.a=new R_(this.d)},uZn.ig=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},uZn.c=0,zW(S9n,"GreedyPortDistributor",1905),sDn(1421,1,y9n,bl),uZn.rg=function(n){return swn(uG(n,36))},uZn.Kf=function(n,t){fWn(uG(n,36),t)},zW(S9n,"InteractiveCrossingMinimizer",1421),sDn(1422,1,b2n,Wg),uZn.Ne=function(n,t){return SSn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"InteractiveCrossingMinimizer/1",1422),sDn(514,1,{514:1,106:1,47:1},zy),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(FEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){$Un(this,uG(n,36),t)},uZn.e=0,zW(S9n,"LayerSweepCrossingMinimizer",514),sDn(1418,1,QZn,Qg),uZn.Cd=function(n){Oqn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1418),sDn(1419,1,QZn,Jg),uZn.Cd=function(n){ewn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1419),sDn(1420,1,QZn,Yg),uZn.Cd=function(n){iXn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1420),sDn(463,22,{3:1,34:1,22:1,463:1},jI);var GEt,qEt=_cn(S9n,"LayerSweepCrossingMinimizer/CrossMinType",463,Oat,Z2,SH);sDn(1417,1,y1n,Ic),uZn.Mb=function(n){return Cun(),0==uG(n,30).a.c.length},zW(S9n,"LayerSweepCrossingMinimizer/lambda$0$Type",1417),sDn(1862,1,C6n,z0),uZn.fg=function(){},uZn.gg=function(n,t,e,i,r,c){},uZn.jg=function(n,t,e,i){},uZn.hg=function(n,t){t[n][0].c.p=n,this.b[n]=Inn(WEt,{3:1,4:1,5:1,2043:1},668,t[n].length,0,1)},uZn.ig=function(n,t,e){e[n][t].p=t,uQ(this.b[n],t,new Oc)},zW(S9n,"LayerSweepTypeDecider",1862),sDn(668,1,{668:1},Oc),uZn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},uZn.a=0,uZn.b=0,uZn.c=0;var XEt,zEt,VEt,WEt=zW(S9n,"LayerSweepTypeDecider/NodeInfo",668);sDn(1863,1,A2n,Ac),uZn.Lb=function(n){return Dx(new w7(uG(n,12).b))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Dx(new w7(uG(n,12).b))},zW(S9n,"LayerSweepTypeDecider/lambda$0$Type",1863),sDn(1864,1,A2n,Lc),uZn.Lb=function(n){return Dx(new w7(uG(n,12).b))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Dx(new w7(uG(n,12).b))},zW(S9n,"LayerSweepTypeDecider/lambda$1$Type",1864),sDn(1906,413,j9n,ij),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,u=new Ww(n.j);u.a<u.c.c.length;)0!=(a=uG(N3(u),12)).e.c.length&&(++i,a.j==(KQn(),yRt)&&++r);for(c=t+r,f=t+i,o=jmn(n,(can(),Vjt)).Kc();o.Ob();)(a=uG(o.Pb(),12)).j==(KQn(),yRt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,o=jmn(n,(can(),Wjt)).Kc();o.Ob();)++h,s[(a=uG(o.Pb(),12)).p]=t+h;return h;default:throw hv(new Dv)}},zW(S9n,"LayerTotalPortDistributor",1906),sDn(669,832,{669:1,230:1},Ron),uZn.vg=function(n,t,e,i){e?VEn(this,n):(vSn(this,n,i),vWn(this,n,t)),n.c.length>1&&(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.a<h.c.c.length;)0!=(u=uG(N3(h),12)).e.c.length&&(++r,u.j==(KQn(),yRt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=jmn(n,(can(),Vjt)).Kc();s.Ob();)(u=uG(s.Pb(),12)).j==(KQn(),yRt)?(f[u.p]=a,a-=i):(f[u.p]=b,b-=i);break;case 2:for(o=0,h=new Ww(n.j);h.a<h.c.c.length;)0==(u=uG(N3(h),12)).g.c.length||++o;for(l=t+(i=1/(o+1)),s=jmn(n,(can(),Wjt)).Kc();s.Ob();)f[(u=uG(s.Pb(),12)).p]=l,l+=i;break;default:throw hv(new vM("Port type is undefined"))}return 1},zW(S9n,"NodeRelativePortDistributor",809),sDn(822,1,{},MV,PIn),zW(S9n,"SweepCopy",822),sDn(1861,1,C6n,Umn),uZn.hg=function(n,t){},uZn.fg=function(){var n;n=Inn(YHt,W1n,28,this.f,15,1),this.d=new op(n),this.a=new R_(n)},uZn.gg=function(n,t,e,i,r,c){var a;a=uG(zq(c[n][t].j,e),12),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},uZn.ig=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(zIn(),gbt)},uZn.jg=function(n,t,e,i){var r;(r=uG(zq(i[n][t].j,e),12)).p=this.f++,r.g.c.length+r.e.c.length>1&&(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(477,1,{34:1,477:1},BF),uZn.Fd=function(n){return _vn(this,uG(n,477))},uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0;var QEt=zW(P6n,"HyperedgeCrossingsCounter/Hyperedge",477);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},WHn),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,p1,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,m1,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(466,1,{466:1},Ek),uZn.a=null,uZn.b=0,zW(O9n,"BKCompactor/ClassNode",466),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){QXn(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<i.c.c.length;)null==(t=ZTn((e=uG(N3(i),12)).i))&&(t="n"+A_(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},uZn.a=0,uZn.b=0,uZn.c=NaN,uZn.d=0,uZn.g=0,uZn.i=0,uZn.o=0,uZn.s=NaN,zW(L9n,"HyperEdgeSegment",118),sDn(132,1,{132:1},A2),uZn.Ib=function(){return this.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,v1,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.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).a,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),WUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),WUn(this,o,c,r,!1),c=b,r=new MO(w,a=t+b.o*i),aq(o.a,r),WUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),WUn(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.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).a,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),WUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),WUn(this,o,c,r,!1),c=b,r=new MO(w,a=t-b.o*i),aq(o.a,r),WUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),WUn(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.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).b,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(a=f,l),aq(o.a,r),WUn(this,o,c,r,!0),(b=n.r)&&(r=new MO(a,w=uM(pK(hyn(b.e,0)))),aq(o.a,r),WUn(this,o,c,r,!0),c=b,r=new MO(a=t+b.o*i,w),aq(o.a,r),WUn(this,o,c,r,!0)),r=new MO(a,g),aq(o.a,r),WUn(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(464,22,{3:1,34:1,22:1,464:1},XI);var XSt,zSt,VSt,WSt,QSt,JSt=_cn(D9n,"SplineEdgeRouter/SideToProcess",464,Oat,E1,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(467,1,{467:1},ya),uZn.a=0,uZn.b=!1,uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=0,zW(D9n,"SplineSegment/EdgeInformation",467),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),EUn(n,o,u=new Ym),iGn(n,o,u),a=o,c.Vg(),(c=t.eh(B9n)).Ug("Split graph",1),r=LUn(this.a,a),c.Vg(),i=new Ww(r);i.a<i.c.c.length;)e=uG(N3(i),121),hPn(this.b,e,t.eh(.5999999940395355/r.c.length));(c=t.eh(B9n)).Ug("Pack components",1),a=DYn(r),c.Vg(),(c=t.eh(B9n)).Ug("Apply layout results",1),WVn(a),c.Vg()},zW(_9n,"TreeLayoutProvider",1112),sDn(1894,1,t1n,Ea),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(_9n,"TreeUtil/1",1894),sDn(1895,1,t1n,Sa),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(_9n,"TreeUtil/2",1895),sDn(1885,1,y1n,Pa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,39),(OQn(),UPt))))},zW(_9n,"TreeUtil/lambda$0$Type",1885),sDn(1891,1,y1n,mp),uZn.Mb=function(n){return this.a.Hc(uG(n,39))},zW(_9n,"TreeUtil/lambda$10$Type",1891),sDn(1892,1,{},vp),uZn.Kb=function(n){return n5(this.a,uG(n,39))},zW(_9n,"TreeUtil/lambda$11$Type",1892),sDn(1893,1,y1n,UI),uZn.Mb=function(n){return vin(this.a,this.b,uG(n,39))},zW(_9n,"TreeUtil/lambda$12$Type",1893),sDn(1886,1,y1n,kp),uZn.Mb=function(n){return Rgn(this.a,uG(n,65))},zW(_9n,"TreeUtil/lambda$3$Type",1886),sDn(1887,1,b2n,ja),uZn.Ne=function(n,t){return I_(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,"TreeUtil/lambda$4$Type",1887),sDn(1888,1,y1n,yp),uZn.Mb=function(n){return Kgn(this.a,uG(n,65))},zW(_9n,"TreeUtil/lambda$7$Type",1888),sDn(1889,1,b2n,Ca),uZn.Ne=function(n,t){return O_(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,"TreeUtil/lambda$8$Type",1889),sDn(1890,1,{},Ia),uZn.Kb=function(n){return uG(n,65).b},zW(_9n,"TreeUtil/lambda$9$Type",1890),sDn(508,137,{3:1,508:1,96:1,137:1}),uZn.g=0,zW(U9n,"TGraphElement",508),sDn(65,508,{3:1,65:1,508:1,96:1,137:1},uZ),uZn.Ib=function(){return this.b&&this.c?V3(this.b)+"->"+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),39)).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(39,643,{3:1,508:1,39: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",39);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,39),uG(t,39))},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,39),uG(t,39))},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,39),uG(t,39))},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,39),uG(t,39))},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,39).c.indexOf(H9n)},zW(q9n,"CompactionProcessor/lambda$4$Type",1928),sDn(1929,1,{},Pp),uZn.Kb=function(n){return a6(this.a,uG(n,39))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$5$Type",1929),sDn(1930,1,{},Cp),uZn.Kb=function(n){return ren(this.a,uG(n,39))},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,39),uG(t,39))},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,39),uG(t,39))},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){YUn(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,39).e.a},zW(q9n,"GraphBoundsProcessor/lambda$0$Type",1938),sDn(1939,1,{},Fa),uZn.Ye=function(n){return uG(n,39).e.b},zW(q9n,"GraphBoundsProcessor/lambda$1$Type",1939),sDn(1940,1,{},_a),uZn.Ye=function(n){return lP(uG(n,39))},zW(q9n,"GraphBoundsProcessor/lambda$2$Type",1940),sDn(1941,1,{},Ba),uZn.Ye=function(n){return fP(uG(n,39))},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,39),(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){JUn(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,T1,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,39),(OQn(),UPt))))},zW(u7n,"NodeOrderer/lambda$0$Type",1488),sDn(1489,1,y1n,wo),uZn.Mb=function(n){return ncn(),uG(oIn(uG(n,39),(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,39))},zW(u7n,"NodeOrderer/lambda$2$Type",1490),sDn(1491,1,y1n,Ap),uZn.Mb=function(n){return f6(this.a,uG(n,39))},zW(u7n,"NodeOrderer/lambda$3$Type",1491),sDn(1492,1,b2n,go),uZn.Ne=function(n,t){return frn(uG(n,39),uG(t,39))},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,39),(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){aUn(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,39),(QGn(),ACt)),17)},zW(s7n,"EdgeRouter/lambda$0$Type",1497),sDn(1508,1,{},ro),uZn.Kb=function(n){return CR(uG(n,39))},zW(s7n,"EdgeRouter/lambda$11$Type",1508),sDn(1510,1,{},dO),uZn.Kb=function(n){return vq(this.b,this.a,uG(n,39))},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,39))},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,39))},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,39),uG(t,39))},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,39),uG(t,39))},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,39))},zW(s7n,"EdgeRouter/lambda$5$Type",1502),sDn(1504,1,{},pO),uZn.Kb=function(n){return kq(this.b,this.a,uG(n,39))},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,39))},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(500,22,{3:1,34:1,22:1,500: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",500,Oat,S1,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<r.c.c.length;)uG(N3(r),47).Kf(n,t.eh(1));t.Vg()},zW(h7n,"RadialLayoutProvider",1113),sDn(556,1,b2n,Vj),uZn.Ne=function(n,t){return RBn(this.a,this.b,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=0,uZn.b=0,zW(h7n,"RadialUtil/lambda$0$Type",556),sDn(1395,1,Q4n,yo),uZn.Kf=function(n,t){GQn(uG(n,27),t)},zW(d7n,"CalculateGraphSize",1395),sDn(1396,1,Q4n,Mo),uZn.Kf=function(n,t){CXn(uG(n,27))},zW(d7n,"EdgeAngleCalculator",1396),sDn(368,22,{3:1,34:1,22:1,368:1,196:1},ZI),uZn.dg=function(){switch(this.g){case 0:return new Co;case 1:return new To;case 2:return new Io;case 3:return new yo;case 4:return new Mo;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var rIt,cIt,aIt,oIt=_cn(d7n,k6n,368,Oat,b9,KH);sDn(653,1,{}),uZn.e=1,uZn.g=0,zW(p7n,"AbstractRadiusExtensionCompaction",653),sDn(1834,653,{},NR),uZn.Cg=function(n){var t,e,i,r,c,a,o,u,s;for(this.c=uG(zDn(n,(SK(),zCt)),27),iw(this,this.c),this.d=aMn(uG(zDn(n,(jOn(),zIt)),299)),(u=uG(zDn(n,AIt),17))&&ew(this,u.a),rw(this,(tJ(o=pK(zDn(n,(XYn(),DDt)))),o)),s=GFn(this.c),this.d&&this.d.Gg(s),SHn(this,s),a=new IM(Uhn(cT(bFt,1),m7n,27,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new IM(Uhn(cT(bFt,1),m7n,27,0,[(u3(t,s.c.length),uG(s.c[t],27))])),c=t<s.c.length-1?(u3(t+1,s.c.length),uG(s.c[t+1],27)):(u3(0,s.c.length),uG(s.c[0],27)),i=0==t?uG(zq(s,s.c.length-1),27):(u3(t-1,s.c.length),uG(s.c[t-1],27)),xCn(this,(u3(t,s.c.length),uG(s.c[t],27),a),i,c,r)},zW(p7n,"AnnulusWedgeCompaction",1834),sDn(1393,1,Q4n,To),uZn.Kf=function(n,t){sun(uG(n,27),t)},zW(p7n,"GeneralCompactor",1393),sDn(1833,653,{},jo),uZn.Cg=function(n){var t,e,i,r;e=uG(zDn(n,(SK(),zCt)),27),this.f=e,this.b=aMn(uG(zDn(n,(jOn(),zIt)),299)),(r=uG(zDn(n,AIt),17))&&ew(this,r.a),rw(this,(tJ(i=pK(zDn(n,(XYn(),DDt)))),i)),t=GFn(e),this.b&&this.b.Gg(t),aAn(this,t)},uZn.a=0,zW(p7n,"RadialCompaction",1833),sDn(1842,1,{},Eo),uZn.Dg=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Ww(a=GFn(n));c.a<c.c.c.length;)for(r=uG(N3(c),27),e=++i;e<a.c.length;e++)bqn(this,r,(u3(e,a.c.length),uG(a.c[e],27)))&&(t+=1);return t},zW(v7n,"CrossingMinimizationPosition",1842),sDn(1840,1,{},So),uZn.Dg=function(n){var t,i,r,c,a,o,u,s,f,l,b,w,d;for(r=0,i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)t=uG(N9(i),74),f=(u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84))).i+u.g/2,l=u.j+u.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new sj).a=f-c,b.b=l-a,OEn(o=new MO(b.a,b.b),n.g,n.f),b.a-=o.a,b.b-=o.b,c=f-b.a,a=l-b.b,OEn(s=new MO(b.a,b.b),u.g,u.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},zW(v7n,"EdgeLengthOptimization",1840),sDn(1841,1,{},Po),uZn.Dg=function(n){var t,i,r,c,a,o,u,s,f;for(r=0,i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)t=uG(N9(i),74),o=(a=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84))).i+a.g/2,u=a.j+a.f/2,c=uG(zDn(a,(XYn(),mDt)),8),s=o-(n.i+c.a+n.g/2),f=u-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},zW(v7n,"EdgeLengthPositionOptimization",1841),sDn(1392,653,Q4n,Co),uZn.Kf=function(n,t){lLn(this,uG(n,27),t)},zW("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1392),sDn(1394,1,Q4n,Io),uZn.Kf=function(n,t){eV(uG(n,27),t)},zW("org.eclipse.elk.alg.radial.intermediate.rotation","GeneralRotator",1394),sDn(434,22,{3:1,34:1,22:1,434:1},nO);var uIt,sIt,hIt,fIt,lIt=_cn(y7n,"AnnulusWedgeCriteria",434,Oat,j1,_H);sDn(393,22,{3:1,34:1,22:1,393:1},tO);var bIt,wIt,dIt,gIt,pIt,mIt,vIt,kIt,yIt,MIt,TIt,jIt,EIt,SIt,PIt,CIt,IIt,OIt,AIt,LIt,NIt,$It,DIt,xIt,RIt,KIt,FIt,_It,BIt,HIt,UIt,GIt,qIt,XIt,zIt,VIt,WIt,QIt,JIt,YIt,ZIt,nOt=_cn(y7n,C3n,393,Oat,p3,FH);sDn(863,1,K2n,El),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M7n),""),"Center On Root"),"Centers the layout on the root of the tree i.e. so that the central node is also the center node of the final layout. This introduces additional whitespace."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T7n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j7n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E7n),""),"Rotate"),"The rotate option determines whether a rotation of the layout should be performed."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S7n),""),$7n),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),pIt),gNt),nOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P7n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),xwn(1)),mNt),dot),ggn(hNt)))),H4(n,P7n,S7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C7n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),PIt),gNt),hOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I7n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),IIt),gNt),lIt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O7n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vIt),gNt),cOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A7n),D7n),"Target Angle"),"The angle in radians that the layout should be rotated to after layout."),0),dNt),fot),ggn(hNt)))),H4(n,A7n,E7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L7n),D7n),"Additional Wedge Space"),"If set to true, modifies the target angle by rotating further such that space is left for an edge to pass in between the nodes. This option should only be used in conjunction with top-down layout."),!1),wNt),cot),ggn(hNt)))),H4(n,L7n,E7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N7n),D7n),"Outgoing Edge Angles"),"Calculate the required angle of connected nodes to leave space for an incoming edge. This option should only be used in conjunction with top-down layout."),!1),wNt),cot),ggn(hNt)))),nJn((new Sl,n))},zW(y7n,"RadialMetaDataProvider",863),sDn(1008,1,K2n,Sl),uZn.hf=function(n){nJn(n)},zW(y7n,"RadialOptions",1008),sDn(1009,1,{},Oo),uZn.sf=function(){return new Uj},uZn.tf=function(n){},zW(y7n,"RadialOptions/RadialFactory",1009),sDn(354,22,{3:1,34:1,22:1,354:1},eO);var tOt,eOt,iOt,rOt,cOt=_cn(y7n,"RadialTranslationStrategy",354,Oat,c5,BH);sDn(299,22,{3:1,34:1,22:1,299:1},iO);var aOt,oOt,uOt,sOt,hOt=_cn(y7n,"SortingStrategy",299,Oat,m3,HH);sDn(1476,1,y9n,Ao),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){QLn(this,uG(n,27),t)},uZn.c=0,zW("org.eclipse.elk.alg.radial.p1position","EadesRadial",1476),sDn(1838,1,{},Lo),uZn.Eg=function(n){return Oyn(n)},zW(R7n,"AnnulusWedgeByLeafs",1838),sDn(1839,1,{},No),uZn.Eg=function(n){return NPn(this,n)},zW(R7n,"AnnulusWedgeByNodeSpace",1839),sDn(1477,1,y9n,$o),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){epn(this,uG(n,27),t)},zW("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1477),sDn(826,1,{},dy),uZn.Fg=function(n){},uZn.Gg=function(n){kv(this,n)},zW(K7n,"IDSorter",826),sDn(1837,1,b2n,Do),uZn.Ne=function(n,t){return hun(uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(K7n,"IDSorter/lambda$0$Type",1837),sDn(1836,1,{},gun),uZn.Fg=function(n){B4(this,n)},uZn.Gg=function(n){n.dc()||(this.e||B4(this,PX(uG(n.Xb(0),27))),kv(this.e,n))},zW(K7n,"PolarCoordinateSorter",1836),sDn(445,22,{3:1,34:1,22:1,445:1},rO);var fOt,lOt,bOt,wOt,dOt=_cn(H7n,"RectPackingLayoutPhases",445,Oat,d3,UH);sDn(1118,205,M3n,qj),uZn.rf=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(t.Ug("Rectangle Packing",1),u=uG(zDn(n,(S_n(),hAt)),107),c=oM(gK(zDn(n,iAt))),o=uM(pK(zDn(n,bAt))),p=oM(gK(zDn(n,wAt))),!n.a&&(n.a=new fV(bFt,n,10,11)),l=n.a,g=!1,p&&l.i>=3)for(w=uG(zrn(l,0),27),d=uG(zrn(l,1),27),i=0;i+2<l.i;){if(b=w,w=d,d=uG(zrn(l,i+2),27),b.f>=w.f+d.f+o||d.f>=b.f+w.f+o){g=!0;break}++i}else g=!0;if(!g){for(s=l.i,r=new DD(l);r.e!=r.i.gc();)Myn(uG(Zkn(r),27),(XYn(),vDt),xwn(s)),--s;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(m=new wJ,oOt,(Zyn(),wOt)),Aq(m,uOt,bOt),oM(gK(zDn(n,YOt)))&&Aq(m,oOt,lOt),m)),a=1/(e=Qzn(this.a,n)).c.length,f=new Ww(e);f.a<f.c.c.length;){if(h=uG(N3(f),47),t.$g())return;h.Kf(n,t.eh(a))}Isn(l,u),c||ZQn(n,uM(pK(zDn(n,(lBn(),vOt))))+(u.b+u.c),uM(pK(zDn(n,mOt)))+(u.d+u.a),!1,!0),oM(gK(zDn(n,aAt)))||J1(new Sd((vP(),new Vy(n)))),t.Vg()},zW(H7n,"RectPackingLayoutProvider",1118),sDn(1518,1,Q4n,xo),uZn.Kf=function(n,t){IXn(uG(n,27),t)},zW(U7n,"InteractiveNodeReorderer",1518),sDn(1519,1,b2n,Ro),uZn.Ne=function(n,t){return kln(uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U7n,"InteractiveNodeReorderer/lambda$0$Type",1519),sDn(455,22,{3:1,34:1,22:1,455:1,196:1},cO),uZn.dg=function(){switch(this.g){case 0:return new xo;case 1:return new Fo;case 2:return new Ko}return null};var gOt,pOt,mOt,vOt,kOt,yOt,MOt,TOt,jOt,EOt,SOt,POt,COt,IOt,OOt,AOt=_cn(U7n,k6n,455,Oat,g3,GH);sDn(1521,1,Q4n,Ko),uZn.Kf=function(n,t){Vmn(uG(n,27),t)},zW(U7n,"MinSizePostProcessor",1521),sDn(1520,1,Q4n,Fo),uZn.Kf=function(n,t){ebn(uG(n,27),t)},zW(U7n,"MinSizePreProcessor",1520),sDn(394,22,{3:1,34:1,22:1,394:1},aO);var LOt,NOt,$Ot,DOt,xOt,ROt,KOt,FOt,_Ot,BOt,HOt,UOt,GOt,qOt,XOt,zOt,VOt,WOt,QOt,JOt,YOt,ZOt,nAt,tAt,eAt,iAt,rAt,cAt,aAt,oAt,uAt,sAt,hAt,fAt,lAt,bAt,wAt,dAt,gAt,pAt,mAt,vAt,kAt=_cn(G7n,"OptimizationGoal",394,Oat,w3,qH);sDn(867,1,K2n,Pl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q7n),""),"Try box layout first"),"Whether one should check whether the regions are stackable to see whether box layout would do the job. For example, nodes with the same height are not stackable inside a row. Therefore, box layout will perform better and faster."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X7n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z7n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V7n),""),"In new Row"),"If set to true this node begins in a new row. Consequently this node cannot be moved in a previous layer during compaction. Width approximation does does not take this into account."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W7n),int),"Width Approximation Strategy"),"Strategy for finding an initial width of the drawing."),XOt),gNt),CAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q7n),int),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J7n),int),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),GOt),gNt),kAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y7n),int),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z7n),"packing"),rnt),"Strategy for finding an initial placement on nodes."),FOt),gNt),LAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,nnt),cnt),"Row Height Reevaluation"),"During the compaction step the height of a row is normally not changed. If this options is set, the blocks of other rows might be added if they exceed the row height. If this is the case the whole row has to be packed again to be optimal regarding the new row height. This option should, therefore, be used with care since it might be computation heavy."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,tnt),cnt),"Compaction iterations"),"Defines the number of compaction iterations. E.g. if set to 2 the width is initially approximated, then the drawing is compacted and based on the resulting drawing the target width is decreased or increased and a second compaction step is executed and the result compared to the first one. The best run is used based on the scale measure."),xwn(1)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ent),"whiteSpaceElimination"),"White Space Approximation Strategy"),"Strategy for expanding nodes such that whitespace in the parent is eliminated."),gNt),$At),ggn(hNt)))),lYn((new Cl,n))},zW(G7n,"RectPackingMetaDataProvider",867),sDn(1016,1,K2n,Cl),uZn.hf=function(n){lYn(n)},zW(G7n,"RectPackingOptions",1016),sDn(1017,1,{},_o),uZn.sf=function(){return new qj},uZn.tf=function(n){},zW(G7n,"RectPackingOptions/RectpackingFactory",1017),sDn(1705,1,{},AU),uZn.a=0,uZn.c=!1,zW(ont,"AreaApproximation",1705);var yAt,MAt,TAt=Iq(ont,"BestCandidateFilter");sDn(673,1,{535:1},Bo),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(s=new Zm,a=M0n,u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),238),a=e.Math.min(a,(o.c+(i.b+i.c))*(o.b+(i.d+i.a)));for(c=new Ww(n);c.a<c.c.c.length;)((r=uG(N3(c),238)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&mv(s.c,r);return s},zW(ont,"AreaFilter",673),sDn(674,1,{535:1},Ho),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(u=new Zm,s=M0n,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),238),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Ww(n);c.a<c.c.c.length;)r=uG(N3(c),238),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&mv(u.c,r);return u},zW(ont,"AspectRatioFilter",674),sDn(1469,1,y9n,Uo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){IFn(uG(n,27),t)},zW(ont,"GreedyWidthApproximator",1469),sDn(672,1,{535:1},Go),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(s=new Zm,a=T0n,u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),238),a=e.Math.max(a,mX(o.c+(i.b+i.c),o.b+(i.d+i.a),o.a));for(c=new Ww(n);c.a<c.c.c.length;)mX((r=uG(N3(c),238)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&mv(s.c,r);return s},zW(ont,"ScaleMeasureFilter",672),sDn(1470,1,y9n,qo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){JLn(uG(n,27),t)},zW(ont,"TargetWidthWidthApproximator",1470),sDn(490,22,{3:1,34:1,22:1,490:1,188:1,196:1},oO),uZn.dg=function(){return UCn(this)},uZn.qg=function(){return UCn(this)};var jAt,EAt,SAt,PAt,CAt=_cn(ont,"WidthApproximationStrategy",490,Oat,y1,XH);sDn(1471,1,y9n,Xo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){oJn(this,uG(n,27),t)},zW(unt,"Compactor",1471),sDn(1473,1,y9n,zo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){zKn(uG(n,27),t)},zW(unt,"NoPlacement",1473),sDn(439,22,{3:1,34:1,22:1,439:1,188:1,196:1},uO),uZn.dg=function(){return Lwn(this)},uZn.qg=function(){return Lwn(this)};var IAt,OAt,AAt,LAt=_cn(unt,"PackingStrategy",439,Oat,b3,WH);sDn(810,1,{},vO),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=M0n,uZn.e=0,uZn.f=M0n,zW(unt,"RowFillingAndCompaction",810),sDn(1472,1,y9n,Vo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){wVn(uG(n,27),t)},zW(unt,"SimplePlacement",1472),sDn(1474,1,y9n,Wo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){this.Ig(uG(n,27),t)},uZn.Ig=function(n,t){XDn(n,t)},zW(hnt,"EqualWhitespaceEliminator",1474),sDn(1475,1474,y9n,Qo),uZn.Ig=function(n,t){var e,i,r,c;t.Ug("To Aspect Ratio Whitesapce Eliminator",1),c=uM(pK(zDn(n,(lBn(),vOt)))),r=uM(pK(zDn(n,mOt))),i=uM(pK(zDn(n,(S_n(),VOt)))),e=uM(pK(zDn(n,pOt))),c/r<i?Myn(n,vOt,c=r*i):(Myn(n,pOt,e+=c/i-r),Myn(n,mOt,r+e)),XDn(n,t),t.Vg()},zW(hnt,"ToAspectratioNodeExpander",1475),sDn(491,22,{3:1,34:1,22:1,491:1,188:1,196:1},sO),uZn.dg=function(){return Sun(this)},uZn.qg=function(){return Sun(this)};var NAt,$At=_cn(hnt,"WhiteSpaceEliminationStrategy",491,Oat,M1,QH);sDn(172,1,{172:1},dln),uZn.a=0,uZn.c=!1,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=0,uZn.i=0,uZn.k=!1,uZn.o=M0n,uZn.p=M0n,uZn.r=0,uZn.s=0,uZn.t=0,zW(fnt,"Block",172),sDn(209,1,{209:1},c0),uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0,zW(fnt,"BlockRow",209),sDn(315,1,{315:1},r0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,zW(fnt,"BlockStack",315),sDn(238,1,{238:1},jq,Mvn),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.g=0;var DAt,xAt,RAt,KAt,FAt,_At=zW(fnt,"DrawingData",238);sDn(373,22,{3:1,34:1,22:1,373:1},hO);var BAt,HAt,UAt,GAt,qAt=_cn(fnt,"DrawingDataDescriptor",373,Oat,w9,JH);sDn(186,1,{186:1},e4),uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0,zW(fnt,"RectRow",186),sDn(763,1,{},Xbn),uZn.j=0,zW(bnt,f6n,763),sDn(1209,1,{},Jo),uZn.af=function(n){return atn(n.a,n.b)},zW(bnt,z3n,1209),sDn(1210,1,{},$p),uZn.af=function(n){return X9(this.a,n)},zW(bnt,l6n,1210),sDn(1211,1,{},Dp),uZn.af=function(n){return dyn(this.a,n)},zW(bnt,b6n,1211),sDn(1212,1,{},xp),uZn.af=function(n){return lfn(this.a,n)},zW(bnt,"ElkGraphImporter/lambda$3$Type",1212),sDn(1213,1,{},Rp),uZn.af=function(n){return QNn(this.a,n)},zW(bnt,w6n,1213),sDn(1115,205,M3n,Xj),uZn.rf=function(n,t){var e,i,r,c,a,o,u,s,h,f;for(vnn(n,(fIn(),yLt))&&(f=mK(zDn(n,(jMn(),ULt))),(c=QBn(aan(),f))&&uG(A1(c.f),205).rf(n,t.eh(1))),Myn(n,gLt,(B7(),ZAt)),Myn(n,pLt,(pOn(),cLt)),Myn(n,mLt,(Vhn(),VLt)),a=uG(zDn(n,(jMn(),FLt)),17).a,t.Ug("Overlap removal",1),oM(gK(zDn(n,KLt))),u=new Kp(o=new ek),e=wYn(i=new Xbn,n),s=!0,r=0;r<a&&s;){if(oM(gK(zDn(n,_Lt)))){if(o.a.$b(),IAn(new I$(u),e.i),0==o.a.gc())break;e.e=o}for(_J(this.b),JV(this.b,(Rdn(),HAt),(eP(),GLt)),JV(this.b,UAt,e.g),JV(this.b,GAt,(tP(),QAt)),this.a=Qzn(this.b,e),h=new Ww(this.a);h.a<h.c.c.length;)uG(N3(h),47).Kf(e,t.eh(1));GEn(i,e),s=oM(gK(oIn(e,(rsn(),Aht)))),++r}tWn(i,e),t.Vg()},zW(bnt,"OverlapRemovalLayoutProvider",1115),sDn(1116,1,{},Kp),zW(bnt,"OverlapRemovalLayoutProvider/lambda$0$Type",1116),sDn(444,22,{3:1,34:1,22:1,444:1},fO);var XAt,zAt,VAt=_cn(bnt,"SPOrEPhases",444,Oat,M3,ZH);sDn(1219,1,{},zj),zW(bnt,"ShrinkTree",1219),sDn(1117,205,M3n,by),uZn.rf=function(n,t){var e,i,r,c;vnn(n,(fIn(),yLt))&&(c=mK(zDn(n,yLt)),(r=QBn(aan(),c))&&uG(A1(r.f),205).rf(n,t.eh(1))),e=wYn(i=new Xbn,n),fRn(this.a,e,t.eh(1)),tWn(i,e)},zW(bnt,"ShrinkTreeLayoutProvider",1117),sDn(305,137,{3:1,305:1,96:1,137:1},i0),uZn.c=!1,zW("org.eclipse.elk.alg.spore.graph","Graph",305),sDn(489,22,{3:1,34:1,22:1,489:1,188:1,196:1},rP),uZn.dg=function(){return cln(this)},uZn.qg=function(){return cln(this)};var WAt,QAt,JAt=_cn(wnt,C3n,489,Oat,NJ,YH);sDn(558,22,{3:1,34:1,22:1,558:1,188:1,196:1},GR),uZn.dg=function(){return new tu},uZn.qg=function(){return new tu};var YAt,ZAt,nLt,tLt=_cn(wnt,"OverlapRemovalStrategy",558,Oat,$J,nU);sDn(438,22,{3:1,34:1,22:1,438:1},lO);var eLt,iLt,rLt,cLt,aLt,oLt,uLt=_cn(wnt,"RootSelection",438,Oat,P1,tU);sDn(324,22,{3:1,34:1,22:1,324:1},bO);var sLt,hLt,fLt,lLt,bLt,wLt,dLt,gLt,pLt,mLt,vLt,kLt,yLt,MLt,TLt,jLt,ELt,SLt,PLt,CLt,ILt,OLt,ALt,LLt,NLt,$Lt,DLt,xLt,RLt,KLt,FLt,_Lt,BLt,HLt,ULt,GLt,qLt=_cn(wnt,"SpanningTreeCostFunction",324,Oat,d9,eU);sDn(1014,1,K2n,Il),uZn.hf=function(n){xXn(n)},zW(wnt,"SporeCompactionOptions",1014),sDn(1015,1,{},Yo),uZn.sf=function(){return new by},uZn.tf=function(n){},zW(wnt,"SporeCompactionOptions/SporeCompactionFactory",1015),sDn(866,1,K2n,Ol),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,gnt),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ynt),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),xLt),gNt),WLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,pnt),Snt),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),$Lt),gNt),JLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,mnt),Snt),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),LLt),gNt),qLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,vnt),Snt),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),kNt),$ot),ggn(hNt)))),H4(n,vnt,knt,CLt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,knt),Snt),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OLt),gNt),uLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Mnt),y8n),rnt),"This option defines how the compaction is applied."),TLt),gNt),JAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Tnt),y8n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,jnt),Pnt),"Upper limit for iterations of overlap removal"),null),xwn(64)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ent),Pnt),"Whether to run a supplementary scanline overlap check."),null),!0),wNt),cot),ggn(hNt)))),KHn((new Al,n)),xXn((new Il,n))},zW(wnt,"SporeMetaDataProvider",866),sDn(1012,1,K2n,Al),uZn.hf=function(n){KHn(n)},zW(wnt,"SporeOverlapRemovalOptions",1012),sDn(1013,1,{},Zo),uZn.sf=function(){return new Xj},uZn.tf=function(n){},zW(wnt,"SporeOverlapRemovalOptions/SporeOverlapFactory",1013),sDn(539,22,{3:1,34:1,22:1,539:1,188:1,196:1},pJ),uZn.dg=function(){return aln(this)},uZn.qg=function(){return aln(this)};var XLt,zLt,VLt,WLt=_cn(wnt,"StructureExtractionStrategy",539,Oat,DJ,iU);sDn(437,22,{3:1,34:1,22:1,437:1,188:1,196:1},wO),uZn.dg=function(){return Hpn(this)},uZn.qg=function(){return Hpn(this)};var QLt,JLt=_cn(wnt,"TreeConstructionStrategy",437,Oat,C1,rU);sDn(1463,1,y9n,nu),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){ZEn(uG(n,305),t)},zW(Int,"DelaunayTriangulationPhase",1463),sDn(1464,1,QZn,Fp),uZn.Cd=function(n){kD(this.a,uG(n,68).a)},zW(Int,"DelaunayTriangulationPhase/lambda$0$Type",1464),sDn(794,1,y9n,hy),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){this.Jg(uG(n,305),t)},uZn.Jg=function(n,t){var e;t.Ug("Minimum spanning tree construction",1),e=n.d?n.d.a:uG(zq(n.i,0),68).a,ifn(this,(oM(gK(oIn(n,(rsn(),Oht)))),pzn(n.e,e,n.b)),n),t.Vg()},zW(Ont,"MinSTPhase",794),sDn(1466,794,y9n,_k),uZn.Jg=function(n,t){var e,i;t.Ug("Maximum spanning tree construction",1),e=new _p(n),i=n.d?n.d.c:uG(zq(n.i,0),68).c,ifn(this,(oM(gK(oIn(n,(rsn(),Oht)))),pzn(n.e,i,e)),n),t.Vg()},zW(Ont,"MaxSTPhase",1466),sDn(1467,1,{},_p),uZn.af=function(n){return gA(this.a,n)},zW(Ont,"MaxSTPhase/lambda$0$Type",1467),sDn(1465,1,QZn,Bp),uZn.Cd=function(n){$$(this.a,uG(n,68))},zW(Ont,"MinSTPhase/lambda$0$Type",1465),sDn(796,1,y9n,tu),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){jCn(this,uG(n,305),t)},uZn.a=!1,zW(Ant,"GrowTreePhase",796),sDn(797,1,QZn,NU),uZn.Cd=function(n){Rhn(this.a,this.b,this.c,uG(n,225))},zW(Ant,"GrowTreePhase/lambda$0$Type",797),sDn(1468,1,y9n,eu),uZn.rg=function(n){return uG(n,305),new wJ},uZn.Kf=function(n,t){EMn(this,uG(n,305),t)},zW(Ant,"ShrinkTreeCompactionPhase",1468),sDn(795,1,QZn,$U),uZn.Cd=function(n){oDn(this.a,this.b,this.c,uG(n,225))},zW(Ant,"ShrinkTreeCompactionPhase/lambda$0$Type",795);var YLt,ZLt,nNt=Iq(p9n,"IGraphElementVisitor");sDn(872,1,{536:1},r4),uZn.Kg=function(n){var t;zsn(t=aBn(this,n),uG(cQ(this.b,n),96)),hRn(this,n,t)},zW(T3n,"LayoutConfigurator",872);var tNt,eNt,iNt,rNt=Iq(T3n,"LayoutConfigurator/IPropertyHolderOptionFilter");sDn(944,1,{2032:1},iu),uZn.Lg=function(n,t){return Whn(),!n.pf(t)},zW(T3n,"LayoutConfigurator/lambda$0$Type",944),sDn(943,1,{845:1},ru),uZn.Mg=function(n,t){return Whn(),!n.pf(t)},zW(T3n,"LayoutConfigurator/lambda$1$Type",943),sDn(945,1,{2032:1},cu),uZn.Lg=function(n,t){return Zj(n,t)},zW(T3n,"LayoutConfigurator/lambda$2$Type",945),sDn(946,1,y1n,kO),uZn.Mb=function(n){return ZQ(this.a,this.b,uG(n,2032))},zW(T3n,"LayoutConfigurator/lambda$3$Type",946),sDn(869,1,{},au),zW(T3n,"RecursiveGraphLayoutEngine",869),sDn(224,63,S1n,Hv,jM),zW(T3n,"UnsupportedConfigurationException",224),sDn(370,63,S1n,EM),zW(T3n,"UnsupportedGraphException",370),sDn(761,1,{}),zW(p9n,"AbstractRandomListAccessor",761),sDn(449,761,{},mKn),uZn.Ng=function(){return null},uZn.d=!0,uZn.e=!0,uZn.f=0,zW($nt,"AlgorithmAssembler",449),sDn(1200,1,y1n,ou),uZn.Mb=function(n){return!!uG(n,106)},zW($nt,"AlgorithmAssembler/lambda$0$Type",1200),sDn(1201,1,{},Hp),uZn.Kb=function(n){return $T(this.a,uG(n,106))},zW($nt,"AlgorithmAssembler/lambda$1$Type",1201),sDn(1202,1,y1n,uu),uZn.Mb=function(n){return!!uG(n,80)},zW($nt,"AlgorithmAssembler/lambda$2$Type",1202),sDn(1203,1,QZn,Up),uZn.Cd=function(n){gsn(this.a,uG(n,80))},zW($nt,"AlgorithmAssembler/lambda$3$Type",1203),sDn(1204,1,QZn,yO),uZn.Cd=function(n){RR(this.a,this.b,uG(n,196))},zW($nt,"AlgorithmAssembler/lambda$4$Type",1204),sDn(1343,1,b2n,su),uZn.Ne=function(n,t){return mZ(uG(n,196),uG(t,196))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW($nt,"EnumBasedFactoryComparator",1343),sDn(80,761,{80:1},wJ),uZn.Ng=function(){return new ek},uZn.a=0,zW($nt,"LayoutProcessorConfiguration",80),sDn(1025,1,{536:1},Nl),uZn.Kg=function(n){Yun(eNt,new Gp(n))},zW(N2n,"DeprecatedLayoutOptionReplacer",1025),sDn(1026,1,QZn,hu),uZn.Cd=function(n){Etn(uG(n,167))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1026),sDn(1027,1,QZn,fu),uZn.Cd=function(n){hmn(uG(n,167))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1027),sDn(1028,1,{},Gp),uZn.Yd=function(n,t){xR(this.a,uG(n,149),uG(t,41))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1028),sDn(143,1,{701:1,143:1},hCn),uZn.Fb=function(n){return k9(this,n)},uZn.Og=function(){return this.b},uZn.Pg=function(){return this.c},uZn.xe=function(){return this.e},uZn.Hb=function(){return pln(this.c)},uZn.Ib=function(){return"Layout Algorithm: "+this.c};var cNt,aNt=zW(N2n,"LayoutAlgorithmData",143);sDn(269,1,{},bu),zW(N2n,"LayoutAlgorithmData/Builder",269),sDn(1029,1,{536:1},wu),uZn.Kg=function(n){F$(n,207)&&!oM(gK(n.of((XYn(),z$t))))&&JGn(uG(n,27))},zW(N2n,"LayoutAlgorithmResolver",1029),sDn(233,1,{701:1,233:1},I2),uZn.Fb=function(n){return!!F$(n,233)&&m_(this.b,uG(n,233).b)},uZn.Og=function(){return this.a},uZn.Pg=function(){return this.b},uZn.xe=function(){return this.d},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return"Layout Type: "+this.b},zW(N2n,"LayoutCategoryData",233),sDn(357,1,{},du),zW(N2n,"LayoutCategoryData/Builder",357),sDn(879,1,{},ABn),zW(N2n,"LayoutMetaDataService",879),sDn(880,1,{},lQ),zW(N2n,"LayoutMetaDataService/Registry",880),sDn(486,1,{486:1},gu),zW(N2n,"LayoutMetaDataService/Registry/Triple",486),sDn(881,1,Dnt,lu),uZn.Qg=function(){return new sj},zW(N2n,"LayoutMetaDataService/lambda$0$Type",881),sDn(882,1,xnt,pu),uZn.Rg=function(n){return D$(uG(n,8))},zW(N2n,"LayoutMetaDataService/lambda$1$Type",882),sDn(891,1,Dnt,mu),uZn.Qg=function(){return new Zm},zW(N2n,"LayoutMetaDataService/lambda$10$Type",891),sDn(892,1,xnt,vu),uZn.Rg=function(n){return new Z_(uG(n,13))},zW(N2n,"LayoutMetaDataService/lambda$11$Type",892),sDn(893,1,Dnt,ku),uZn.Qg=function(){return new lS},zW(N2n,"LayoutMetaDataService/lambda$12$Type",893),sDn(894,1,xnt,yu),uZn.Rg=function(n){return oG(uG(n,67))},zW(N2n,"LayoutMetaDataService/lambda$13$Type",894),sDn(895,1,Dnt,Mu),uZn.Qg=function(){return new ek},zW(N2n,"LayoutMetaDataService/lambda$14$Type",895),sDn(896,1,xnt,Tu),uZn.Rg=function(n){return PZ(uG(n,49))},zW(N2n,"LayoutMetaDataService/lambda$15$Type",896),sDn(897,1,Dnt,ju),uZn.Qg=function(){return new XL},zW(N2n,"LayoutMetaDataService/lambda$16$Type",897),sDn(898,1,xnt,Eu),uZn.Rg=function(n){return g8(uG(n,49))},zW(N2n,"LayoutMetaDataService/lambda$17$Type",898),sDn(899,1,Dnt,Su),uZn.Qg=function(){return new rk},zW(N2n,"LayoutMetaDataService/lambda$18$Type",899),sDn(900,1,xnt,Pu),uZn.Rg=function(n){return aG(uG(n,157))},zW(N2n,"LayoutMetaDataService/lambda$19$Type",900),sDn(883,1,Dnt,Cu),uZn.Qg=function(){return new Uk},zW(N2n,"LayoutMetaDataService/lambda$2$Type",883),sDn(884,1,xnt,Iu),uZn.Rg=function(n){return new tj(uG(n,75))},zW(N2n,"LayoutMetaDataService/lambda$3$Type",884),sDn(885,1,Dnt,Ou),uZn.Qg=function(){return new Nk},zW(N2n,"LayoutMetaDataService/lambda$4$Type",885),sDn(886,1,xnt,Au),uZn.Rg=function(n){return new zU(uG(n,140))},zW(N2n,"LayoutMetaDataService/lambda$5$Type",886),sDn(887,1,Dnt,Lu),uZn.Qg=function(){return new Dk},zW(N2n,"LayoutMetaDataService/lambda$6$Type",887),sDn(888,1,xnt,Nu),uZn.Rg=function(n){return new VU(uG(n,107))},zW(N2n,"LayoutMetaDataService/lambda$7$Type",888),sDn(889,1,Dnt,$u),uZn.Qg=function(){return new Qu},zW(N2n,"LayoutMetaDataService/lambda$8$Type",889),sDn(890,1,xnt,Du),uZn.Rg=function(n){return new qen(uG(n,385))},zW(N2n,"LayoutMetaDataService/lambda$9$Type",890);var oNt,uNt,sNt,hNt,fNt,lNt=Iq(p3n,"IProperty");sDn(23,1,{34:1,701:1,23:1,149:1},tAn),uZn.Fd=function(n){return lD(this,uG(n,149))},uZn.Fb=function(n){return F$(n,23)?m_(this.f,uG(n,23).f):F$(n,149)&&m_(this.f,uG(n,149).Pg())},uZn.Sg=function(){var n;if(F$(this.b,4)){if(null==(n=Nvn(this.b)))throw hv(new kM(Bnt+this.f+"'. Make sure it's type is registered with the "+(vK($Ft),$Ft.k)+Knt));return n}return this.b},uZn.Og=function(){return this.d},uZn.Pg=function(){return this.f},uZn.xe=function(){return this.i},uZn.Hb=function(){return pln(this.f)},uZn.Ib=function(){return"Layout Option: "+this.f},zW(N2n,"LayoutOptionData",23),sDn(24,1,{},xu),zW(N2n,"LayoutOptionData/Builder",24),sDn(170,22,{3:1,34:1,22:1,170:1},jO);var bNt,wNt,dNt,gNt,pNt,mNt,vNt,kNt,yNt,MNt=_cn(N2n,"LayoutOptionData/Target",170,Oat,g9,cU);sDn(285,22,{3:1,34:1,22:1,285:1},EO);var TNt,jNt,ENt,SNt=_cn(N2n,"LayoutOptionData/Type",285,Oat,wrn,aU);sDn(116,1,{116:1},cN,gY,qZ),uZn.Fb=function(n){var t;return!(null==n||!F$(n,116))&&(t=uG(n,116),OJ(this.c,t.c)&&OJ(this.d,t.d)&&OJ(this.b,t.b)&&OJ(this.a,t.a))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d,this.b,this.a]))},uZn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW(o6n,"ElkRectangle",116),sDn(8,1,{3:1,4:1,8:1,423:1},sj,O2,MO,eN),uZn.Fb=function(n){return uon(this,n)},uZn.Hb=function(){return OL(this.a)+QTn(OL(this.b))},uZn.cg=function(n){var t,e,i;for(e=0;e<n.length&&Qbn((s3(e,n.length),n.charCodeAt(e)),r6n);)++e;for(t=n.length;t>0&&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;t<e.length;)null!=e[t]&&KAn(e[t]).length>0&&(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){ZUn(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(297,22,{3:1,34:1,22:1,297: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",297,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)),ZUn((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,v3,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,y3,bU);sDn(290,22,{3:1,34:1,22:1,290:1},LO);var Fxt,_xt,Bxt,Hxt,Uxt,Gxt,qxt,Xxt,zxt,Vxt,Wxt=_cn(Unt,"LabelSide",290,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,k3,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=uUn(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<c;++r){if(t=WGn(i[r],"\\:"),!(e=DVn(aan(),t[0])))throw hv(new vM("Invalid option id: "+t[0]));if(null==(o=vVn(e,t[1])))throw hv(new vM("Invalid option value: "+t[1]));null==o?(!this.q&&(this.q=new Ym),u7(this.q,e)):(!this.q&&(this.q=new Ym),vJ(this.q,e,o))}}catch(u){throw F$(u=Ehn(u),103)?hv(new tbn(u)):hv(u)}},uZn.Ib=function(){return mK(l8(YJ((this.q?this.q:(hZ(),hZ(),Vot)).vc().Oc(),new Ju),gen(new fG,new Y,new q,new X,Uhn(cT(Rut,1),p1n,108,0,[]))))};var PKt,CKt,IKt,OKt,AKt=zW(p9n,"IndividualSpacings",385);sDn(982,1,{},Ju),uZn.Kb=function(n){return cZ(uG(n,44))},zW(p9n,"IndividualSpacings/lambda$0$Type",982),sDn(718,1,{},LX),uZn.c=0,zW(p9n,"InstancePool",718),sDn(1835,1,{},Yu),zW(p9n,"LoggedGraph",1835),sDn(415,22,{3:1,34:1,22:1,415:1},uA);var LKt,NKt,$Kt,DKt=_cn(p9n,"LoggedGraph/Type",415,Oat,h5,SU);sDn(1063,1,{871:1},Zu),uZn.Ug=function(n,t){return!1},uZn.Vg=function(){},uZn.Wg=function(){return 0},uZn.Xg=function(){return null},uZn.Yg=function(){return null},uZn.Zg=function(){return null},uZn.$g=function(){return!1},uZn._g=function(){return!1},uZn.ah=function(){return!1},uZn.bh=function(n){},uZn.dh=function(n,t){},uZn.eh=function(n){return this},uZn.fh=function(n){},zW(p9n,"NullElkProgressMonitor",1063),sDn(42,1,{20:1,42:1},WO),uZn.Jc=function(n){z8(this,n)},uZn.Fb=function(n){var t,e,i;return!!F$(n,42)&&(e=uG(n,42),t=null==this.a?null==e.a:udn(this.a,e.a),i=null==this.b?null==e.b:udn(this.b,e.b),t&&i)},uZn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:Hon(this.a)),t&D1n^(-65536&(e=null==this.b?0:Hon(this.b)))>>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(454,1,{454:1},vY),uZn.Fb=function(n){return OJ(this.a,uG(n,454).a)&&OJ(this.c,uG(n,454).c)&&OJ(this.d,uG(n,454).d)&&OJ(this.b,uG(n,454).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",454),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(308,562,{},Vy),uZn.Sf=function(){return FTn(this)},uZn.a=null,zW(Ctt,"ElkGraphAdapters/ElkGraphAdapter",308),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 DUn(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())&&(0!=(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 0!=(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 0==(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 0!=(32&this.Db)},uZn.Ph=function(){return uG(Lsn(this,2),54)},uZn.Vh=function(){return 0!=(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 0!=(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(451,2083,{110:1,342:1,166:1,451: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",451),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 qUn(this,n)},uZn.Bb=0,zW(Ytt,"EModelElementImpl",158),sDn(720,158,{110:1,94:1,93:1,479: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)||0!=(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,479: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,479),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)),DUn(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 DUn(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,479));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 0!=(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 0!=(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)<n&&(t=n),this.g=this.aj(t),null!=i&&qGn(i,0,this.g,0,this.i))},uZn.dd=function(n){return Ljn(this,n)},uZn.dc=function(){return 0==this.i},uZn.Ti=function(n,t){return HNn(this,n,t)},uZn.aj=function(n){return Inn(dat,EZn,1,n,5,1)},uZn.Vi=function(n){return this.g[n]},uZn.gd=function(n){return gjn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.gc=function(){return this.i},uZn.Pc=function(){return g5(this)},uZn.Qc=function(n){return gmn(this,n)},uZn.i=0;var IFt=zW(Pet,"BasicEList",66),OFt=Iq(Pet,"TreeIterator");sDn(708,66,Jet),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&uG(this.g[this.i-1],51).Ob():O0(this)},uZn.Pb=function(){return Wxn(this)},uZn.Qb=function(){if(!this.e)throw hv(new kM("There is no valid object to remove."));this.e.Qb()},uZn.c=!1,zW(Pet,"AbstractTreeIterator",708),sDn(700,708,Jet,jN),uZn.bj=function(n){var t;return F$(t=uG(n,58).Gh().Kc(),287)&&uG(t,287).wl(new hs),t},zW(qet,"ElkGraphUtil/PropertiesSkippingTreeIterator",700),sDn(965,1,{},hs),zW(qet,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",965);var AFt,LFt,NFt,$Ft=zW(qet,"ElkReflect",null);sDn(901,1,xnt,fs),uZn.Rg=function(n){return W0(),E2(uG(n,181))},zW(qet,"ElkReflect/lambda$0$Type",901),Iq(Pet,"ResourceLocator"),sDn(1065,1,{}),zW(Pet,"DelegatingResourceLocator",1065),sDn(1066,1065,{}),zW("org.eclipse.emf.common","EMFPlugin",1066);var DFt,xFt=Iq(Kit,"Adapter"),RFt=Iq(Kit,"Notification");sDn(1174,1,Fit),uZn.cj=function(){return this.d},uZn.dj=function(n){},uZn.ej=function(n){this.d=n},uZn.fj=function(n){this.d==n&&(this.d=null)},uZn.d=null,zW(Utt,"AdapterImpl",1174),sDn(2093,70,_it),uZn.Ei=function(n,t){return nmn(this,n,t)},uZn.Fi=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Ej(),i=n.Kc();i.Ob();)e=i.Pb(),this.rj(this.Zi(t,e)),++t;return!0},uZn.Gi=function(n,t){JK(this,n,t)},uZn.Hi=function(n){vQ(this,n)},uZn.pj=function(){return this.sj()},uZn.$b=function(){QK(this,this.Ej(),this.Fj())},uZn.Hc=function(n){return this.uj(n)},uZn.Ic=function(n){return this.vj(n)},uZn.qj=function(n,t){this.Bj().Um()},uZn.rj=function(n){this.Bj().Um()},uZn.sj=function(){return this.Bj()},uZn.tj=function(){this.Bj().Um()},uZn.uj=function(n){return this.Bj().Um()},uZn.vj=function(n){return this.Bj().Um()},uZn.wj=function(n){return this.Bj().Um()},uZn.xj=function(n){return this.Bj().Um()},uZn.yj=function(){return this.Bj().Um()},uZn.zj=function(n){return this.Bj().Um()},uZn.Aj=function(){return this.Bj().Um()},uZn.Cj=function(n){return this.Bj().Um()},uZn.Dj=function(n,t){return this.Bj().Um()},uZn.Ej=function(){return this.Bj().Um()},uZn.Fj=function(){return this.Bj().Um()},uZn.Gj=function(n){return this.Bj().Um()},uZn.Hj=function(){return this.Bj().Um()},uZn.Fb=function(n){return this.wj(n)},uZn.Xb=function(n){return this.Wi(n,this.xj(n))},uZn.Hb=function(){return this.yj()},uZn.dd=function(n){return this.zj(n)},uZn.dc=function(){return this.Aj()},uZn.Ti=function(n,t){return pIn(this,n,t)},uZn.Vi=function(n){return this.xj(n)},uZn.gd=function(n){return Oq(this,n)},uZn.Mc=function(n){var t;return(t=this.dd(n))>=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<o.length&&(r=o[t])<=i;)e[t++]=r,++i;for(uG(this.n,15).bd(t,n.kj()),e[t]=i;++t<e.length;)e[t]=o[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},uZn.Ib=function(){var n,t,e;switch((e=new fx(Ij(this.Rm)+"@"+(Hon(this)>>>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;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=TZn);e.a+="]"}else zA(e,OFn(this));return e.a+=", isTouch: ",Lj(e,pHn(this)),e.a+=", wasSet: ",Lj(e,kVn(this)),e.a+=")",e.a},uZn.d=0,uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.o=0,uZn.p=0,zW(Utt,"NotificationImpl",152),sDn(1188,152,Bit,zZ),uZn.Kj=function(){return this.a.Kj()},uZn.hj=function(n){return this.a.Lj()},uZn.jj=function(){return this.a.jj()},zW(Utt,"DelegatingNotifyingListImpl/1",1188),sDn(251,66,Qet,bs,cj),uZn.Fc=function(n){return Zpn(this,uG(n,378))},uZn.nj=function(n){return Zpn(this,n)},uZn.oj=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=uG(this.g[n],378)).jj())&&-1!=t.gj()&&uG(e,94).xh(t)},uZn.aj=function(n){return Inn(RFt,EZn,378,n,0,1)},zW(Utt,"NotificationChainImpl",251),sDn(1524,93,Htt),uZn.uh=function(){return this.e},uZn.wh=function(){return 0!=(1&this.f)},uZn.f=1,zW(Utt,"NotifierImpl",1524),sDn(2091,66,Qet),uZn.Ei=function(n,t){return BGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.i,n)},uZn.Gi=function(n,t){P$n(this,n,t)},uZn.Hi=function(n){V$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){Czn(this)},uZn.Ij=function(n,t,e,i,r){return new XZ(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.Tj=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 0!=this.i},uZn.Ti=function(n,t){return zdn(this,n,t)},uZn.gd=function(n){return e_n(this,n)},uZn.Xi=function(n,t){return Pqn(this,n,t)},uZn.Uj=function(n,t){return t},uZn.Vj=function(n,t){return t},uZn.Wj=function(n,t,e){return e},zW(Utt,"NotifyingListImpl",2091),sDn(1187,152,Bit,XZ),uZn.Kj=function(){return this.a.Kj()},uZn.hj=function(n){return this.a.Lj()},uZn.jj=function(){return this.a.jj()},zW(Utt,"NotifyingListImpl/1",1187),sDn(966,66,Qet,cF),uZn.Hc=function(n){return this.i>10?(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(301,77,v0n,w_),zW(Pet,"AbstractEList/BasicIndexOutOfBoundsException",301),sDn(40,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",40),sDn(286,40,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,40,$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;c<i;++c)XN(e,n+c,gln(this,a=o.Pb()));for(Pkn(this,e),r=0;r<i;++r)a=e[n],this.Mi(n,a),++n;return!0}return++this.j,!1},uZn.Fi=function(n){var t,e,i,r,c,a,o,u,s;if(0!=(i=n.gc())){for(t=zln(this,s=(u=null==(e=uG(Lsn(this.a,4),129))?0:e.length)+i),o=n.Kc(),c=u;c<s;++c)XN(t,c,gln(this,a=o.Pb()));for(Pkn(this,t),r=u;r<s;++r)a=t[r],this.Mi(r,a);return!0}return++this.j,!1},uZn.Gi=function(n,t){var e,i,r,c;e=zln(this,(r=null==(i=uG(Lsn(this.a,4),129))?0:i.length)+1),c=gln(this,t),n!=r&&qGn(i,n,e,n+1,r-n),uQ(e,n,c),Pkn(this,e),this.Mi(n,t)},uZn.Hi=function(n){var t,e,i;XN(t=zln(this,(i=null==(e=uG(Lsn(this.a,4),129))?0:e.length)+1),i,gln(this,n)),Pkn(this,t),this.Mi(i,n)},uZn.Ii=function(){return new T9(this)},uZn.Ji=function(){return new mV(this)},uZn.Ki=function(n){var t,e;if(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length,n<0||n>e)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<r;++i)if(udn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(xA(e[i])===xA(n))return!0;return!1},uZn.Xb=function(n){var t,e;if(n>=(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;e<i;++e)if(udn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(xA(t[e])===xA(n))return e;return-1},uZn.dc=function(){return null==uG(Lsn(this.a,4),129)},uZn.Kc=function(){return new M9(this)},uZn.ed=function(){return new pV(this)},uZn.fd=function(n){var t,e;if(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length,n<0||n>e)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&&(n<t?qGn(e,n,e,n+1,t-n):qGn(e,t+1,e,t,n-t),uQ(e,n,i),Pkn(this,e)),i},uZn.Vi=function(n){return uG(Lsn(this.a,4),129)[n]},uZn.gd=function(n){return g$n(this,n)},uZn.Xi=function(n,t){var e,i;return i=(e=lvn(this))[n],XN(e,n,gln(this,t)),Pkn(this,e),i},uZn.gc=function(){var n;return null==(n=uG(Lsn(this.a,4),129))?0:n.length},uZn.Pc=function(){var n,t,e;return e=null==(n=uG(Lsn(this.a,4),129))?0:n.length,t=Inn(xFt,Uit,424,e,0,1),e>0&&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.length<e&&(n=Acn(Tbn(n).c,e)),qGn(t,0,n,0,e)),n.length>e&&uQ(n,e,null),n},zW(Pet,"ArrayDelegatingEList",2080),sDn(1051,40,$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,301,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<s;++a)if((i=e[a]).Bi()==r&&i.Fb(u))return!0;return!1},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new HY(this.a)},uZn.Mc=function(n){return MDn(this,n)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/5",1050),sDn(622,1,$Zn,HY),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return-1!=this.b},uZn.Pb=function(){var n;if(this.f.e!=this.c)throw hv(new Fv);if(-1==this.b)throw hv(new Bv);return this.d=this.a,this.e=this.b,XEn(this),n=uG(this.f.d[this.d].g[this.e],136),this.ek(n)},uZn.Qb=function(){if(this.f.e!=this.c)throw hv(new Fv);if(-1==this.e)throw hv(new xv);this.f.c.Mc(zrn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},uZn.ek=function(n){return n},uZn.a=0,uZn.b=-1,uZn.c=0,uZn.d=0,uZn.e=0,zW(Pet,"BasicEMap/BasicEMapIterator",622),sDn(1044,622,$Zn,aj),uZn.ek=function(n){return n.ld()},zW(Pet,"BasicEMap/BasicEMapKeyIterator",1044),sDn(1045,622,$Zn,oj),uZn.ek=function(n){return n.md()},zW(Pet,"BasicEMap/BasicEMapValueIterator",1045),sDn(1043,1,xZn,Nm),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.a.c.$b()},uZn._b=function(n){return dA(this,n)},uZn.uc=function(n){return q_n(this.a,n)},uZn.vc=function(){return Enn(this.a)},uZn.Fb=function(n){return H_(this.a,n)},uZn.xc=function(n){return Lmn(this.a,n)},uZn.Hb=function(){return Bhn(this.a.c)},uZn.dc=function(){return 0==this.a.f},uZn.ec=function(){return Mnn(this.a)},uZn.zc=function(n,t){return rSn(this.a,n,t)},uZn.Bc=function(n){return Svn(this.a,n)},uZn.gc=function(){return this.a.f},uZn.Ib=function(){return Tpn(this.a.c)},uZn.Cc=function(){return jnn(this.a)},zW(Pet,"BasicEMap/DelegatingMap",1043),sDn(621,1,{44:1,136:1,621:1},xU),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),(null!=this.b?udn(this.b,t.ld()):xA(this.b)===xA(t.ld()))&&(null!=this.c?udn(this.c,t.md()):xA(this.c)===xA(t.md())))},uZn.Bi=function(){return this.a},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return this.a^(null==this.c?0:Hon(this.c))},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){throw hv(new Ov)},uZn.nd=function(n){var t;return t=this.c,this.c=n,t},uZn.Ib=function(){return this.b+"->"+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,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(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 xUn(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(505,66,Qet,us,$X),uZn.Si=function(){return!0},zW(Pet,"UniqueEList",505),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 0==(2&this.j)?this.ii():this.$h().Nk()},uZn.Fh=function(){return this.i},uZn.wh=function(){return 0!=(1&this.j)},uZn.Ph=function(){return this.g},uZn.Vh=function(){return 0!=(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(291,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,480:1,54:1,99:1,158:1,291: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(),0!=(256&this.Bb);case 3:return qx(),0!=(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 0==(256&this.Bb);case 3:return 0==(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 0!=(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",291),sDn(461,291,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,461:1,291: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(),0!=(256&this.Bb);case 3:return qx(),0!=(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(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(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)),DUn(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 DUn(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 0==(256&this.Bb);case 3:return 0==(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 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(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())?0!=(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),0!=(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?0!=(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):0!=(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):0!=(512&this.Bb)?0!=(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):0!=(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()?0!=(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):0!=(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()?0!=(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):0!=(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()?0!=(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):0!=(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):0!=(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?0!=(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):0!=(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?0!=(this.Bb&hrt)?this.p=new qU(uG(r,29),this,i):this.p=new _U(uG(r,29),this,i):0!=(this.Bb&hrt)?this.p=new aK(uG(r,29),this):this.p=new rK(uG(r,29),this):i?0!=(this.Bb&hrt)?this.p=new XU(uG(r,29),this,i):this.p=new BU(uG(r,29),this,i):0!=(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 0!=(this.Bb&w1n)},uZn._k=function(){return!1},uZn.al=function(){return!1},uZn.sk=function(){return 0!=(this.Bb&VZn)},uZn.xk=function(){return ein(this)},uZn.bl=function(){return!1},uZn.tk=function(){return 0!=(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",461),sDn(331,461,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,331:1,158:1,461:1,291: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(),0!=(256&this.Bb);case 3:return qx(),0!=(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(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),0!=(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 0==(256&this.Bb);case 3:return 0==(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 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this);case 18:return 0!=(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 0!=(64&this.Db)?MBn(this):((n=new fx(MBn(this))).a+=" (iD: ",Lj(n,0!=(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)),DUn(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 DUn(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,481: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(),0!=(256&this.Bb);case 9:return qx(),0!=(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)),DUn(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 DUn(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 0!=(256&this.Bb);case 9:return 0!=(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<t;++n)lR(zrn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)lR(zrn(this.q,n));tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.Ib=function(){return nPn(this)},uZn.k=null,uZn.r=null,zW(Ytt,"EClassImpl",90),sDn(2092,2091,Mrt),uZn.Ei=function(n,t){return BGn(this,n,t)},uZn.Fi=function(n){return BGn(this,this.i,n)},uZn.Gi=function(n,t){P$n(this,n,t)},uZn.Hi=function(n){V$n(this,n)},uZn.Wk=function(n,t){return Nmn(this,n,t)},uZn.$i=function(n){return Otn(this,n)},uZn.Xk=function(n,t){return Nyn(this,n,t)},uZn.Xi=function(n,t){return Pqn(this,n,t)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},zW(art,"NotifyingInternalEListImpl",2092),sDn(632,2092,Trt),uZn.Hc=function(n){return Lzn(this,n)},uZn.Ij=function(n,t,e,i,r){return i2(this,n,t,e,i,r)},uZn.Jj=function(n){Yv(this,n)},uZn.Fk=function(n){return this},uZn.Lk=function(){return ern(this.e.Dh(),this.Lj())},uZn.Kj=function(){return this.Lk()},uZn.Lj=function(){return emn(this.e.Dh(),this.Lk())},uZn.il=function(){return uG(this.Lk().Hk(),29).kk()},uZn.jl=function(){return lMn(uG(this.Lk(),19)).n},uZn.jj=function(){return this.e},uZn.kl=function(){return!0},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!1},uZn.dd=function(n){return Hyn(this,n)},uZn.Nj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Rh(this.e,this.jl(),this.il(),t):e.Rh(this.e,emn(e.Dh(),lMn(uG(this.Lk(),19))),null,t):e.Rh(this.e,-1-this.Lj(),null,t)},uZn.Oj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Th(this.e,this.jl(),this.il(),t):e.Th(this.e,emn(e.Dh(),lMn(uG(this.Lk(),19))),null,t):e.Th(this.e,-1-this.Lj(),null,t)},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return v5(this.d,n)},uZn.Pj=function(){return uN(this.e)},uZn.Qj=function(){return 0!=this.i},uZn.aj=function(n){return Acn(this.d,n)},uZn.Wi=function(n,t){return this.ol()&&this.nl()?R$n(this,n,uG(t,58)):t},uZn.pl=function(n){return n.Vh()?mwn(this.e,uG(n,54)):n},uZn.Wb=function(n){J$(this,n)},uZn.Pc=function(){return Jtn(this)},uZn.Qc=function(n){var t;if(this.nl())for(t=this.i-1;t>=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(504,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",504),sDn(83,504,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,481))).c&&(t.c=new Ks),rin(t.c,n.jj())),null!=(a=n.ij())&&0==(1&(r=uG(a,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 3:null!=(a=n.ij())&&0==(1&(r=uG(a,481)).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();)0==(1&(r=uG(c.Pb(),481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 4:null!=(o=n.kj())&&0==(1&(r=uG(o,481)).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();)0==(1&(r=uG(c.Pb(),481)).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;t<e;++t)if(xA(this.g[t])===xA(n))return t;return-1},zW(Ytt,"EClassImpl/1EAllStructuralFeaturesList",1168),sDn(1162,505,Qet,ks),uZn.aj=function(n){return Inn(g_t,Prt,89,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1EGenericSuperTypeEList",1162),sDn(633,505,Qet,ys),uZn.aj=function(n){return Inn(o_t,krt,179,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1EStructuralFeatureUniqueEList",633),sDn(755,505,Qet,Ms),uZn.aj=function(n){return Inn(v_t,krt,19,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1ReferenceList",755),sDn(1163,505,Qet,Dm),uZn.Mi=function(n,t){tV(this,uG(t,35))},uZn.aj=function(n){return Inn(u_t,krt,35,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/2",1163),sDn(1164,505,Qet,Ts),uZn.aj=function(n){return Inn(u_t,krt,35,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/3",1164),sDn(1166,328,Trt,YG),uZn.Fc=function(n){return J5(this,uG(n,35))},uZn.Hi=function(n){PS(this,uG(n,35))},zW(Ytt,"EClassImpl/4",1166),sDn(1167,328,Trt,JG),uZn.Fc=function(n){return Y5(this,uG(n,19))},uZn.Hi=function(n){CS(this,uG(n,19))},zW(Ytt,"EClassImpl/5",1167),sDn(1169,505,Qet,js),uZn.aj=function(n){return Inn(p_t,yrt,62,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/6",1169),sDn(1170,505,Qet,Es),uZn.aj=function(n){return Inn(v_t,krt,19,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/7",1170),sDn(2095,2094,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,71:1}),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return dGn(this,this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Wk=function(n,t){return JMn(this,n,t)},uZn.Xk=function(n,t){return Lyn(this,n,t)},uZn.Xi=function(n,t){return gGn(this,n,t)},uZn.$i=function(n){return this.xj(n)},uZn.Ii=function(){return new nR(this)},uZn.pj=function(){return this.sj()},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},zW(art,"DelegatingNotifyingInternalEListImpl",2095),sDn(756,2095,Crt),uZn.Li=function(){var n;return F$(n=ern(e1(this.b),this.Lj()).Hk(),156)&&!F$(n,468)&&0==(1&n.kk().i)},uZn.Hc=function(n){var t,e,i,r,c,a,o;if(this.ol()){if((o=this.Ej())>4){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;i<o;++i)if(xA(CV(this,this.xj(i)))===xA(n))return!0;return a}if(this.ml()&&!this.ll()){if(xA(r=uG(n,58).Mh(lMn(uG(ern(e1(this.b),this.Lj()),19))))===xA(this.b))return!0;if(null==r||!uG(r,58).Vh())return!1}}if(c=this.uj(n),this.nl()&&!c)for(i=0;i<o;++i)if(xA(e=CV(this,this.xj(i)))===xA(n))return!0;return c}return this.uj(n)},uZn.Ij=function(n,t,e,i,r){return new Ken(this.b,n,this.Lj(),t,e,i,r)},uZn.Jj=function(n){Msn(this.b,n)},uZn.Fk=function(n){return this},uZn.Kj=function(){return ern(e1(this.b),this.Lj())},uZn.Lj=function(){return emn(e1(this.b),ern(e1(this.b),this.Lj()))},uZn.jj=function(){return this.b},uZn.kl=function(){return!!ern(e1(this.b),this.Lj()).Hk().kk()},uZn.Mj=function(){var n;return!(!F$(n=ern(e1(this.b),this.Lj()),102)||0==(uG(n,19).Bb&Qtt)&&!lMn(uG(n,19)))},uZn.ll=function(){var n,t,e;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!(t=lMn(uG(n,19)))&&((e=t.t)>1||-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)&&0!=(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<i;++t)if(xA(CV(this,this.xj(t)))===xA(n))return t;return-1},uZn.Nj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Rh(this.b,lMn(uG(ern(e1(this.b),this.Lj()),19)).n,uG(ern(e1(this.b),this.Lj()).Hk(),29).kk(),t):e.Rh(this.b,emn(e.Dh(),lMn(uG(ern(e1(this.b),this.Lj()),19))),null,t):e.Rh(this.b,-1-this.Lj(),null,t)},uZn.Oj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Th(this.b,lMn(uG(ern(e1(this.b),this.Lj()),19)).n,uG(ern(e1(this.b),this.Lj()).Hk(),29).kk(),t):e.Th(this.b,emn(e.Dh(),lMn(uG(ern(e1(this.b),this.Lj()),19))),null,t):e.Th(this.b,-1-this.Lj(),null,t)},uZn.al=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&0!=(uG(n,19).Bb&Qtt)},uZn.ol=function(){return F$(ern(e1(this.b),this.Lj()).Hk(),90)},uZn.fk=function(n){return ern(e1(this.b),this.Lj()).Hk().fk(n)},uZn.Pj=function(){return uN(this.b)},uZn.Qj=function(){return!this.Aj()},uZn.Si=function(){return ern(e1(this.b),this.Lj()).Si()},uZn.Wi=function(n,t){return yVn(this,n,t)},uZn.Wb=function(n){_zn(this),CW(this,uG(n,15))},uZn.Pc=function(){var n;if(this.nl())for(n=this.Ej()-1;n>=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.length<r&&(n=Acn(Tbn(n).c,r)),n.length>r&&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<i;)VA(r,ox(F$(e=uG(zrn(n,t),89).c,90)?uG(e,29):(YYn(),x_t))),++t<i&&(r.a+=TZn);return r.a+="]",r.a},uZn.Jj=function(n){},uZn.Lj=function(){return 10},uZn.kl=function(){return!0},uZn.Mj=function(){return!1},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!0},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return F$(n,90)},uZn.Qj=function(){return M4(this.a)},uZn.Si=function(){return!0},uZn.Yi=function(){return!0},zW(Ytt,"EClassImpl/8",1171),sDn(1172,2062,m1n,Rm),uZn.fd=function(n){return han(this.a,n)},uZn.gc=function(){return z5(this.a.a).i},zW(Ytt,"EClassImpl/8/1",1172),sDn(1173,505,Qet,Ss),uZn.aj=function(n){return Inn(s_t,EZn,142,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/9",1173),sDn(1160,49,H0n,Qk),zW(Ytt,"EClassImpl/MyHashSet",1160),sDn(577,364,{110:1,94:1,93:1,142:1,156:1,847:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1},Gv),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;case 8:return qx(),0!=(256&this.Bb)}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;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;case 8:return 0==(256&this.Bb)}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));case 8:return void pdn(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(),C_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)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.ok=function(){var n,t;if(!this.c&&!(n=bxn(Hrn(this))).dc())for(t=n.Kc();t.Ob();)qUn(this,mK(t.Pb()))&&egn(this);return this.b},uZn.ik=function(){var n;if(!this.e){n=null;try{n=_Tn(this)}catch(t){if(!F$(t=Ehn(t),103))throw hv(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==ZHt?(qx(),tot):n==YHt?xwn(0):n==iUt?new Rw(0):n==eUt?0:n==nUt?Hvn(0):n==rUt?Rwn(0):n==tUt?Ben(0):Hsn(0)),this.e=!0}return this.d},uZn.nk=function(){return 0!=(256&this.Bb)},uZn.rl=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},uZn.gl=function(n){tun(this,n),this.rl(n)},uZn.hl=function(n){this.C=n,this.e=!1},uZn.Ib=function(){var n;return 0!=(64&this.Db)?pmn(this):((n=new fx(pmn(this))).a+=" (serializable: ",Lj(n,0!=(256&this.Bb)),n.a+=")",n.a)},uZn.c=!1,uZn.d=null,uZn.e=!1,zW(Ytt,"EDataTypeImpl",577),sDn(468,577,{110:1,94:1,93:1,142:1,156:1,847:1,685:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,468:1,158:1,119:1,120:1,691:1},Jk),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 dbn(this);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(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),this.a}return $tn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_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)),DUn(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 DUn(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 0==(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<t;++n)lR(zrn(this.a,n));tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.ik=function(){return dbn(this)},uZn.fk=function(n){return null!=n},uZn.rl=function(n){},zW(Ytt,"EEnumImpl",468),sDn(582,448,{110:1,94:1,93:1,2039:1,694:1,155:1,197:1,58:1,114:1,54:1,99:1,582:1,158:1,119:1,120:1},Uv),uZn.xe=function(){return this.zb},uZn.Ah=function(n){return Qjn(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 xwn(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>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)),DUn(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 DUn(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(498,1,{2114:1},Km),zW(Ytt,"EFactoryImpl/1ClientInternalEDateTimeFormat",498),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=DUn(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: ",XXn(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(495,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;t<n;++t)Ksn(e);return e},uZn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.vl()||this.a.Xh(n))if(c=this.a.Nh(n,!1),PP(),uG(n,69).xk()){for(i=0,r=(t=uG(c,160)).gc();i<r;++i)if(RQ(t.Tl(i))&&null!=t.Ul(i))return!1}else if(n.Jk()){if(!uG(c,16).dc())return!1}else if(null!=c)return!1;return!0},uZn.Kc=function(){return kon(this)},uZn.fd=function(n){var t,e;if(null==this.b){if(0!=n)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.ul()?this.tl():this.sl(),t=0;t<n;++t)Ksn(e);return e},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.sl=function(){return new Vx(this.a,this.b)},uZn.tl=function(){return new WR(this.a,this.b)},uZn.ul=function(){return!0},uZn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.vl()||this.a.Xh(n))if(a=this.a.Nh(n,!1),PP(),uG(n,69).xk())for(i=0,c=(t=uG(a,160)).gc();i<c;++i)RQ(t.Tl(i))&&null!=t.Ul(i)&&++r;else n.Jk()?r+=uG(a,16).gc():null!=a&&++r;return r},uZn.vl=function(){return!0},zW(art,"EContentsEList",495),sDn(1177,495,Irt,VR),uZn.sl=function(){return new JR(this.a,this.b)},uZn.tl=function(){return new QR(this.a,this.b)},uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1",1177),sDn(287,1,Ort,Vx),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.wl=function(n){if(0!=this.g||this.e)throw hv(new kM("Iterator already in use or already filtered"));this.e=n},uZn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?wAn(this,this.p):p$n(this)))return r=this.p?this.p.Pb():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;for(;this.d<this.c.length;)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.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.Ji():this.k.ed(),this.p?wAn(this,this.p):p$n(this))return r=this.p?this.p.Pb():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.f=!1,this.g=1,!1}},uZn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(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;for(;this.d>0;)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(38,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",38),sDn(411,291,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,480:1,54:1,99:1,158:1,411:1,291: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(),0!=(256&this.Bb);case 3:return qx(),0!=(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)),DUn(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 DUn(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 0==(256&this.Bb);case 3:return 0==(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;n<t;++n)lR(zrn(this.c,n));bEn(this),this.Bb|=1},zW(Ytt,"EOperationImpl",411),sDn(513,756,Crt,oF),uZn.qj=function(n,t){ZR(this,n,uG(t,142))},uZn.rj=function(n){HN(this,uG(n,142))},uZn.xj=function(n){return uG(zrn(Aen(this.a),n),89).c||(YYn(),N_t)},uZn.Cj=function(n){return uG(e_n(Aen(this.a),n),89).c||(YYn(),N_t)},uZn.Dj=function(n,t){return Qvn(this,n,uG(t,142))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Fm(this)},uZn.tj=function(){Czn(Aen(this.a))},uZn.uj=function(n){return Idn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Idn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==Aen(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;for(t=1,n=new DD(Aen(this.a));n.e!=n.i.gc();)t=31*t+((e=uG(Zkn(n),89).c||(YYn(),N_t))?Hon(e):0);return t},uZn.zj=function(n){var t,e,i;for(i=0,e=new DD(Aen(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(t.c||(YYn(),N_t)))return i;++i}return-1},uZn.Aj=function(){return 0==Aen(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return Aen(this.a).i},uZn.Fj=function(){var n,t,e,i,r;for(r=Aen(this.a).i,i=Inn(dat,EZn,1,r,5,1),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),i[e++]=n.c||(YYn(),N_t);return i},uZn.Gj=function(n){var t,e,i;for(i=Aen(this.a).i,n.length<i&&(n=Acn(Tbn(n).c,i)),n.length>i&&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;t<e;)VA(i,ox(uG(zrn(n,t),89).c||(YYn(),N_t))),++t<e&&(i.a+=TZn);return i.a+="]",i.a},uZn.Jj=function(n){},uZn.Lj=function(){return 13},uZn.kl=function(){return!0},uZn.Mj=function(){return!1},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!0},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return F$(n,142)},uZn.Qj=function(){return T4(this.a)},uZn.Si=function(){return!0},uZn.Yi=function(){return!0},zW(Ytt,"EOperationImpl/1",513),sDn(1376,2062,m1n,Fm),uZn.fd=function(n){return han(this.a,n)},uZn.gc=function(){return Aen(this.a.a).i},zW(Ytt,"EOperationImpl/1/1",1376),sDn(1377,555,Trt,fz),uZn.Ti=function(n,t){var e;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),K_t),xwn(t),e.c||N_t,n)),e},uZn.Uj=function(n,t){return ndn(this,uG(n,89),t)},uZn.Vj=function(n,t){return Zwn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return Lkn(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 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(307,365,Trt,vV),uZn.Ni=function(){this.a.tb=null},zW(Ytt,"EPackageImpl/2",307),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,291,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,480:1,54:1,99:1,158:1,518:1,291: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(),0!=(256&this.Bb);case 3:return qx(),0!=(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)),DUn(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 DUn(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 0==(256&this.Bb);case 3:return 0==(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,461,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,102:1,461:1,291: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(),0!=(256&this.Bb);case 3:return qx(),0!=(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(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),0!=(this.Bb&Qtt);case 19:return qx(),!(!(i=lMn(this))||0==(i.Bb&Qtt));case 20:return qx(),0!=(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 0==(256&this.Bb);case 3:return 0==(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 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this);case 18:return 0!=(this.Bb&Qtt);case 19:return!!(t=lMn(this))&&0!=(t.Bb&Qtt);case 20:return 0==(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))&&0!=(n.Bb&Qtt)},uZn.al=function(){return 0!=(this.Bb&Qtt)},uZn.bl=function(){return 0!=(this.Bb&P0n)},uZn.Yk=function(n,t){return this.c=null,Ywn(this,n,t)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?MBn(this):((n=new fx(MBn(this))).a+=" (containment: ",Lj(n,0!=(this.Bb&Qtt)),n.a+=", resolveProxies: ",Lj(n,0!=(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 0!=(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,505,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(456,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,456: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",456),sDn(457,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",457),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,479: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,296));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(vUn(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(vUn(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(vUn(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,480)},uZn.gk=function(n){return Inn(a_t,EZn,480,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,456)},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,484,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,296)},uZn.gk=function(n){return Inn(gat,EZn,296,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,468)},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,479)},uZn.gk=function(n){return Inn(sFt,EZn,479,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;t<i;++t)s3(t,n.length),47==n.charCodeAt(t)&&(kD(c,r==t?"":(Knn(r,t,n.length),n.substr(r,t-r))),r=t+1);return kD(c,(s3(r,n.length+1),n.substr(r))),zEn(this,c)}s3(i-1,n.length),63==n.charCodeAt(i-1)&&(e=T_(n,$Cn(63),i-2))>0&&(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 bUn(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 GHn(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<this.i;++o)if(u=e[o],h.am(u.Lk())){uG(Uyn(this,o,i),76),a=!1;break}a&&ttn(s,i)}return bfn(this,n,s)},uZn.Gc=function(n){var t,e,i,r,c,a,o,u,s;for(u=new Drn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=uG(i.Pb(),76)).Lk(),EFn(this.e,r))(!r.Si()||!H5(this,r,e.md())&&!sSn(u,e))&&ttn(u,e);else{for(s=VKn(this.e.Dh(),r),t=uG(this.g,124),c=!0,a=0;a<this.i;++a)if(o=t[a],s.am(o.Lk())){uG(Uyn(this,a,e),76),c=!1;break}c&&ttn(u,e)}return CW(this,u)},uZn.Fi=function(n){return this.j=-1,BGn(this,this.i,n)},uZn.Pl=function(n,t,e){return OBn(this,n,t,e)},uZn.Xk=function(n,t){return $Hn(this,n,t)},uZn.Ql=function(n,t,e){return fXn(this,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this,n,t)},uZn.Tl=function(n){return uG(zrn(this,n),76).Lk()},uZn.Ul=function(n){return uG(zrn(this,n),76).md()},uZn.Vl=function(){return this.b},uZn.Mj=function(){return!0},uZn.Tj=function(){return!0},uZn.Wl=function(n){return!kmn(this,n)},uZn.aj=function(n){return Inn(dBt,Qrt,343,n,0,1)},uZn.pl=function(n){return fK(this,n)},uZn.Wb=function(n){cW(this,n)},uZn.Xl=function(n,t){BXn(this,n,t)},uZn.Yl=function(n){return non(this,n)},uZn.Zl=function(n){ETn(this,n)},zW(art,"BasicFeatureMap",78),sDn(1960,1,UZn),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){if(-1==this.g)throw hv(new xv);yz(this);try{LFn(this.e,this.b,this.a,n),this.d=this.e.j,_yn(this)}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}},uZn.Ob=function(){return Zln(this)},uZn.Sb=function(){return nbn(this)},uZn.Pb=function(){return _yn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(nbn(this))return yz(this),this.g=--this.a,this.ul()&&(n=ONn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){if(-1==this.g)throw hv(new xv);yz(this);try{VOn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw F$(n=Ehn(n),77)?hv(new Fv):hv(n)}},uZn.ul=function(){return!1},uZn.Wb=function(n){if(-1==this.g)throw hv(new xv);yz(this);try{hqn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}},uZn.a=0,uZn.c=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.i=0,zW(art,"FeatureMapUtil/BasicFeatureEIterator",1960),sDn(420,1960,UZn,Zsn),uZn.$l=function(){var n,t,e;for(e=this.e.i,n=uG(this.e.g,124);this.c<e;){if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},uZn._l=function(){var n,t;for(n=uG(this.e.g,124);--this.c>=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,495,Irt,G$),uZn.pj=function(){return this},zW(art,"EContentsEList/1",968),sDn(969,495,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,504,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,504,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,504,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 0==(1792&this.b)},uZn.Ni=function(){this.b|=1},uZn.kl=function(){return 0!=(4&this.b)},uZn.Mj=function(){return 0!=(40&this.b)},uZn.ll=function(){return 0!=(16&this.b)},uZn.ml=function(){return 0!=(8&this.b)},uZn.nl=function(){return 0!=(this.b&frt)},uZn.al=function(){return 0!=(32&this.b)},uZn.ol=function(){return 0!=(this.b&w1n)},uZn.fk=function(n){return this.d?v5(this.d,n):this.Lk().Hk().fk(n)},uZn.Qj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},uZn.Si=function(){return 0!=(128&this.b)},uZn.Gk=function(){var n;Czn(this),0!=(2&this.b)&&(uN(this.e)?(n=0!=(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 0==(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},MQn),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 GHn(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 DHn(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,38,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 GHn(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(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new wsn(this,0)),$Hn(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)),$Hn(this.b,n,e)}return uG(ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(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(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(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(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new wsn(this,0)),$Hn(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(0==(2&this.j)?(uVn(),eHt):(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),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(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(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,479: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:VXn(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(vUn((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(vUn((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(vUn((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(vUn((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(vUn((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(vUn((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(vUn((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(vUn((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(vUn((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(vUn(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,484,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 n<this.j&&63==VJ(this.i,n)},uZn.cm=function(){var n,t,e,i,r;if(10!=this.c)throw hv(new CM(rZn((t$(),eit))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(EYn(this),0!=this.c)throw hv(new CM(rZn((t$(),Pit))));if(123==this.a){for(r=0,e=0;;){if(EYn(this),0!=this.c)throw hv(new CM(rZn((t$(),Pit))));if((r=CMn(this.a))<0)break;if(e>16*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==(32&this.e)?kJn("Nd",!0):(QYn(),CHt);break;case 68:t=32==(32&this.e)?kJn("Nd",!1):(QYn(),NHt);break;case 119:t=32==(32&this.e)?kJn("IsWord",!0):(QYn(),HHt);break;case 87:t=32==(32&this.e)?kJn("IsWord",!1):(QYn(),DHt);break;case 115:t=32==(32&this.e)?kJn("IsSpace",!0):(QYn(),RHt);break;case 83:t=32==(32&this.e)?kJn("IsSpace",!1):(QYn(),$Ht);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==(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),szn(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&&0!=(r=U$n(t=VJ(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw hv(new CM(rZn((t$(),oit))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=U$n(t=VJ(this.i,this.d)));)e|=r,++this.d;if(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),kzn(t,OHt),kzn(t,n)):(kzn(t,n),kzn(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 MUn(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),MUn(67)},uZn.km=function(){return EYn(this),MUn(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),MUn(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),MUn(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,MUn(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(),kzn(t=new QN(2),n),kzn(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;t<this.b.length;t+=2)0!=(n&w1n)&&t>0&&(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;t<this.b.length;t+=2)0!=(n&w1n)&&t>0&&(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)+")";break;case 24: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(476,122,aat,QN),uZn.Jm=function(n){kzn(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.a.a.c.length;i++)VA(c,uG(DQ(this.a,i),122).Qm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==uG(DQ(this.a,1),122).e)r=uG(DQ(this.a,0),122).Qm(n)+"?";else if(2==this.a.a.c.length&&7==uG(DQ(this.a,0),122).e)r=uG(DQ(this.a,1),122).Qm(n)+"??";else{for(VA(c=new zM,uG(DQ(this.a,0),122).Qm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",VA(c,uG(DQ(this.a,i),122).Qm(n));r=c.a}return r},zW(Xct,"RegEx/Token/UnionToken",476),sDn(527,1,{600:1},dE),uZn.Ib=function(){return this.a.b},zW(oat,"XMLTypeUtil/PatternMatcherImpl",527),sDn(1707,1527,{},Df),zW(oat,"XMLTypeValidator",1707),sDn(270,1,t1n,Gz),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return(this.b-this.a)*this.c<0?XHt:new xD(this)},uZn.a=0,uZn.b=0,uZn.c=0,zW(sat,"ExclusiveRange",270),sDn(1084,1,UZn,xf),uZn.Rb=function(n){uG(n,17),i$()},uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return bE()},uZn.Ub=function(){return wE()},uZn.Wb=function(n){uG(n,17),c$()},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Tb=function(){return-1},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new TM(lat))},zW(sat,"ExclusiveRange/1",1084),sDn(258,1,UZn,xD),uZn.Rb=function(n){uG(n,17),r$()},uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return awn(this)},uZn.Ub=function(){return ytn(this)},uZn.Wb=function(n){uG(n,17),a$()},uZn.Ob=function(){return this.c.c<0?this.a>=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)},194:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>y});var i=e(4641),r=e(4218),c=e(2494),a=e(6365),o=e(7295);e(7484),e(7967),e(7856);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,a.l.info("abc88",e,t,n),i[e][t][n]},b=(n,t,e)=>{if(a.l.info("getNextPort abc88",{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.c_6):void 0!==n.defaultInterpolate?m.curve=(0,a.n)(n.defaultInterpolate,r.c_6):m.curve=(0,a.n)(h.curve,r.c_6),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.j)(t.edgeData),g=(0,r.jvg)().x(b).y(w).curve(r.c_6),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.Ys)(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.k)(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.E)().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.Ys)("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.E)();let v;"sandbox"===b&&(v=(0,r.Ys)("#i"+t));const k="sandbox"===b?(0,r.Ys)(v.nodes()[0].contentDocument.body):(0,r.Ys)("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.E)().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.E)().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/1a4e3797.dcd342f8.js b/assets/js/1a4e3797.dcd342f8.js deleted file mode 100644 index 3f7d3b39e..000000000 --- a/assets/js/1a4e3797.dcd342f8.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 1a4e3797.dcd342f8.js.LICENSE.txt */ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7920],{7331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(o=a.slice()).length,u=0;u<s;u++)o[u].apply(this,c);return!0},t.prototype.addListener=function(e,a){var s;if(!r(a))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(a.listener)?a.listener:a),this._events[e]?n(this._events[e])?this._events[e].push(a):this._events[e]=[this._events[e],a]:this._events[e]=a,n(this._events[e])&&!this._events[e].warned&&(s=i(this._maxListeners)?t.defaultMaxListeners:this._maxListeners)&&s>0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(9374),i=r(7775),a=r(3076);function s(e,t,r){return new n(e,t,r)}s.version=r(4336),s.AlgoliaSearchHelper=n,s.SearchParameters=i,s.SearchResults=a,e.exports=s},8078:(e,t,r)=>{"use strict";var n=r(7331);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(4853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},2437:(e,t,r)=>{"use strict";var n=r(3336),i=r(116),a=r(9803),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return a(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},7775:(e,t,r)=>{"use strict";var n=r(3336),i=r(7888),a=r(2686),s=r(185),c=r(116),u=r(9803),o=r(8023),h=r(6801),f=r(2437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return s({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=o(r);if(this.isNumericRefined(e,t,n))return this;var i=s({},this.numericRefinements);return i[e]=s({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,o(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var a,s,c=o(r),u=void 0!==(a=this.numericRefinements[e][t],s=c,i(a,(function(e){return l(e,s)})));return n&&u},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=a(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,a){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m<f;){var d=l&&Array.isArray(l.data)?l.data:[];l=i(d,(function(e){return e.isRefined})),m++}}if(l){var p=Object.keys(h.data).map((function(e){return[e,h.data[e]]})).filter((function(e){return function(e,t,r,n,i,a){if(i&&(0!==e.indexOf(i)||i===e))return!1;return!i&&-1===e.indexOf(n)||i&&e.split(n).length-i.split(n).length==1||-1===e.indexOf(n)&&-1===r.indexOf(n)||0===r.indexOf(e)||0===e.indexOf(t+n)&&(a||0===e.indexOf(r))}(e[0],l.path||r,a,t,r,n)}));l.data=s(p.map((function(e){var r=e[0];return function(e,t,r,n,i){var a=t.split(r);return{name:a[a.length-1].trim(),path:t,escapedValue:c(t),count:e,isRefined:n===t||0===n.indexOf(t+r),exhaustive:i,data:null}}(e[1],r,t,u(a),h.exhaustive)})),e[0],e[1])}return o}}(m,h,f,l,o),v=t;return f&&(v=t.slice(f.split(h).length)),v.reduce(p,{name:e.hierarchicalFacets[r].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:d,data:null})}};var n=r(4039),i=r(7888),a=r(2293),s=r(2148),c=n.escapeFacetValue,u=n.unescapeFacetValue},3076:(e,t,r)=>{"use strict";var n=r(4587),i=r(3336),a=r(4039),s=r(7888),c=r(9725),u=r(2293),o=r(185),h=r(2148),f=a.escapeFacetValue,l=a.unescapeFacetValue,m=r(210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var a=t[0];this._rawResults=t;var u=this;Object.keys(a).forEach((function(e){u[e]=a[e]})),Object.keys(r||{}).forEach((function(e){u[e]=r[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var h=e.getRefinedDisjunctiveFacets(),f=d(e.facets),v=d(e.disjunctiveFacets),g=1,y=a.facets||{};Object.keys(y).forEach((function(t){var r,n,i=y[t],o=(r=e.hierarchicalFacets,n=t,s(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(o){var h=o.attributes.indexOf(t),l=c(e.hierarchicalFacets,(function(e){return e.name===o.name}));u.hierarchicalFacets[l][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var m,d=-1!==e.disjunctiveFacets.indexOf(t),g=-1!==e.facets.indexOf(t);d&&(m=v[t],u.disjunctiveFacets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(u.disjunctiveFacets[m],a.facets_stats,t)),g&&(m=f[t],u.facets[m]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(u.facets[m],a.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),h.forEach((function(r){var n=t[g],s=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(s).forEach((function(t){var r,f=s[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(u.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;u.hierarchicalFacets[r][m].data=o({},u.hierarchicalFacets[r][m].data,f)}else{r=v[t];var d=a.facets&&a.facets[t]||{};u.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(u.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!u.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(u.disjunctiveFacets[r].data[n]=0)}))}})),g++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);0===s.length||s[0].split(a).length<2||t.slice(g).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var o=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(u.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0){var m=s[0].split(a)[0];l[m]=u.hierarchicalFacets[h][f].data[m]}u.hierarchicalFacets[h][f].data=i(l,o,u.hierarchicalFacets[h][f].data)}})),g++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=f[t];u.facets[n]={name:t,data:y[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){u.facets[n]=u.facets[n]||{name:t},u.facets[n].data=u.facets[n].data||{},u.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=s(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=s(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var a=s(e.hierarchicalFacets,r);if(!a)return a;var c=e._state.getHierarchicalFacetByName(t),u=e._state._getHierarchicalFacetSeparator(c),o=l(e._state.getHierarchicalRefinement(t)[0]||"");0===o.indexOf(c.rootPath)&&(o=o.replace(c.rootPath+u,""));var h=o.split(u);return h.unshift(t),y(a,h,0),a}}function y(e,t,r){e.isRefined=e.name===t[r],e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return R(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function F(e,t){var r=s(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var a=s(i,(function(e){return e.name===r})),c=a&&a.data&&a.data[n]?a.data[n]:0,u=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return s(this.facets,t)||s(this.disjunctiveFacets,t)||s(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,a=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),s=this;if(Array.isArray(r))n=[e];else n=s._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(a.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(s,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var a,s=t.sortRemainingBy;return"hidden"===s?r:(a="alpha"===s?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,a[0],a[1])))}(e,r)}if(Array.isArray(a.sortBy)){var n=u(a.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof a.sortBy)return function(e,t){return t.sort(e)}(a.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),c=r.split(a),u=s(n,(function(e){return e.name===t})),o=c.reduce((function(e,t){var r=e&&s(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},9374:(e,t,r)=>{"use strict";var n=r(7331),i=r(8078),a=r(4039).escapeFacetValue,s=r(4853),c=r(185),u=r(116),o=r(9803),h=r(4987),f=r(7775),l=r(3076),m=r(4336);function d(e,t,r){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.setClient(e);var n=r||{};n.index=t,this.state=f.make(n),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}s(d,n),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return h._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=h._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new l(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new l(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:o(h._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var s=this.client.initIndex(n.index);if("function"!=typeof s.findAnswers)throw new Error(a);return s.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,s="function"==typeof this.client.initIndex;if(!i&&!s&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=h.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var f,l=this;return i?f=this.client.searchForFacetValues([{indexName:c.index,params:o}]):s?f=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,f=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),f.then((function(t){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=a(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:f.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new f(e),this},d.prototype.hasRefinements=function(e){return!!u(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=h._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?h._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),s=this._queryId++;if(this._currentNbQueries++,!a.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,s));try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,s)).catch(this._dispatchAlgoliaError.bind(this,s))}catch(c){this.emit("error",{error:c})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var n=r.results.slice();e.forEach((function(e){var t=e.state,r=e.queriesCount,i=e.helper,a=n.splice(0,r);t.index?(i.lastResults=new l(t,a),i.emit("result",{results:i.lastResults,state:t})):i.emit("result",{results:null,state:t})}))}},d.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},d.prototype.containsRefinement=function(e,t,r,n){return e||0!==t.length||0!==r.length||0!==n.length},d.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&this.state.disjunctiveRefinements[e].length>0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new i(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},4587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},3336:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},4039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r<e.length;r++)if(t(e[r]))return e[r]}},9725:e=>{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r<e.length;r++)if(t(e[r]))return r;return-1}},2293:(e,t,r)=>{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),a=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},4853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},2686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n<i;n++){var a=arguments[n];t(a)&&r(e,a)}return e}},116:e=>{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},9803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}},2148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e<t||a&&r||!i)return-1}return 0}e.exports=function(e,r,n){if(!Array.isArray(e))return[];Array.isArray(n)||(n=[]);var i=e.map((function(e,t){return{criteria:r.map((function(t){return e[t]})),index:t,value:e}}));return i.sort((function(e,r){for(var i=-1;++i<e.criteria.length;){var a=t(e.criteria[i],r.criteria[i]);if(a)return i>=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},8023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},4987:(e,t,r)=>{"use strict";var n=r(185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var a={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:a._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:a._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(s.length>0&&s[0].split(c).length>1){var u=s[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,s){var c=a._getDisjunctiveFacetSearchParams(t,n.attribute,0===s);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[s-1];c.facetFilters=s>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(a._getHitsHierarchicalFacetsAttributes(e)).sort(),r=a._getFacetFilters(e),s=a._getNumericFilters(e),c=a._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),s.length>0&&(u.numericFilters=s),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var s=a._getFacetFilters(e,t,r),c=a._getNumericFilters(e,t),u=a._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?a._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),s.length>0&&(o.facetFilters=s),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).sort().forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).sort().forEach((function(e){(a[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).sort().forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(u=f.split(h).length-1,a=f):(u=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=o.attributes[u]}else u=a.split(h).length-1,s=o.attributes[u];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,s){var c=s.isDisjunctiveFacet(e)?s.clearRefinements(e):s,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},a._getHitsSearchParams(c),u))}};e.exports=a},6801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},4336:e=>{"use strict";e.exports="3.14.2"},290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(t){e(r,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function s(e){var t,r="algoliasearch-client-js-".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},a=function(){return JSON.parse(n().getItem(r)||"{}")},s=function(e){n().setItem(r,JSON.stringify(e))},c=function(){var t=e.timeToLive?1e3*e.timeToLive:null,r=a(),n=Object.fromEntries(Object.entries(r).filter((function(e){return void 0!==i(e,2)[1].timestamp})));if(s(n),t){var c=Object.fromEntries(Object.entries(n).filter((function(e){var r=i(e,2)[1],n=(new Date).getTime();return!(r.timestamp+t<n)})));s(c)}};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return a()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var i=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[i++])}))}var l={WithinQueryParameters:0,WithinHeaders:1};function m(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function j(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(s)};var m={data:c,headers:u,method:o,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},A=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,u=n(a,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(s,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},k=1,D=2,q=3;function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return k>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return D>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.20.0","-").concat(e)}),u()]}),userAgent:_("4.20.0").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return N(r(r(r({},a),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:A,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:Q}})}}}}))}return V.version="4.20.0",V}()},3777:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(7294),i=r(9962);const a=["zero","one","two","few","many","other"];function s(e){return a.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(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`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.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 ${n.length}: ${e}`);const i=r.select(t),a=r.pluralForms.indexOf(i);return n[Math.min(a,n.length-1)]}(r,t,e)}}},8167:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>x});var n=r(7294),i=r(6010),a=r(8131),s=r.n(a),c=r(290),u=r.n(c),o=r(6136),h=r(1514),f=r(3699),l=r(9871),m=r(3777),d=r(5358),p=r(3768),v=r(9488),g=r(2733),y=r(7325),R=r(9962),F=r(7263),b=r(2327),P=r(241);const j={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};function _(e){let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return n.createElement("div",{className:(0,i.Z)("col","col--3","padding-left--none",j.searchVersionColumn)},r.map((e=>{let[i,a]=e;const s=r.length>1?`${i}: `:"";return n.createElement("select",{key:i,onChange:e=>t.setSearchVersion(i,e.target.value),defaultValue:t.searchVersions[i],className:j.searchVersionInput},a.versions.map(((e,t)=>n.createElement("option",{key:t,label:`${s}${e.label}`,value:e.name}))))})))}function E(){const{i18n:{currentLocale:e}}=(0,R.Z)(),{algolia:{appId:t,apiKey:r,indexName:a}}=(0,F.L)(),c=(0,b.l)(),v=function(){const{selectMessage:e}=(0,m.c)();return t=>e(t,(0,y.I)({id:"theme.SearchPage.documentsFound.plurals",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)',message:"One document found|{count} documents found"},{count:t}))}(),E=function(){const e=(0,l._r)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[x,O]=(0,d.K)(),w={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[N,A]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return w;case"loading":return{...e,loading:!0};case"update":return x!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),w),H=u()(t,r),S=s()(H,a,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});S.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:a}}=e;if(""===t||!Array.isArray(r))return void A({type:"reset"});const s=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>s(r[e].value)));return{title:i.pop(),url:c(t),summary:n.content?`${s(n.content.value)}...`:"",breadcrumbs:i}}));A({type:"update",value:{items:u,query:t,totalResults:i,totalPages:a,lastPage:n,hasMore:a>n+1,loading:!1}})}));const[T,Q]=(0,n.useState)(null),C=(0,n.useRef)(0),I=(0,n.useRef)(o.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&C.current>r&&A({type:"advance"}),C.current=r}),{threshold:1})),k=()=>x?(0,y.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:x}):(0,y.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),D=(0,p.zX)((function(t){void 0===t&&(t=0),S.addDisjunctiveFacetRefinement("docusaurus_tag","default"),S.addDisjunctiveFacetRefinement("language",e),Object.entries(E.searchVersions).forEach((e=>{let[t,r]=e;S.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),S.setQuery(x).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!T)return;const e=I.current;return e?(e.observe(T),()=>e.unobserve(T)):()=>!0}),[T]),(0,n.useEffect)((()=>{A({type:"reset"}),x&&(A({type:"loading"}),setTimeout((()=>{D()}),300))}),[x,E.searchVersions,D]),(0,n.useEffect)((()=>{N.lastPage&&0!==N.lastPage&&D(N.lastPage)}),[D,N.lastPage]),n.createElement(P.Z,null,n.createElement(h.Z,null,n.createElement("title",null,(0,g.p)(k())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,k()),n.createElement("form",{className:"row",onSubmit:e=>e.preventDefault()},n.createElement("div",{className:(0,i.Z)("col",j.searchQueryColumn,{"col--9":E.versioningEnabled,"col--12":!E.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:j.searchQueryInput,placeholder:(0,y.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,y.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>O(e.target.value),value:x,autoComplete:"off",autoFocus:!0})),E.versioningEnabled&&n.createElement(_,{docsSearchVersionsHelpers:E})),n.createElement("div",{className:"row"},n.createElement("div",{className:(0,i.Z)("col","col--8",j.searchResultsColumn)},!!N.totalResults&&v(N.totalResults)),n.createElement("div",{className:(0,i.Z)("col","col--4","text--right",j.searchLogoColumn)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,y.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:j.algoliaLogo},n.createElement("g",{fill:"none"},n.createElement("path",{className:j.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),N.items.length>0?n.createElement("main",null,N.items.map(((e,t)=>{let{title:r,url:a,summary:s,breadcrumbs:c}=e;return n.createElement("article",{key:t,className:j.searchResultItem},n.createElement("h2",{className:j.searchResultItemHeading},n.createElement(f.Z,{to:a,dangerouslySetInnerHTML:{__html:r}})),c.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:(0,i.Z)("breadcrumbs",j.searchResultItemPath)},c.map(((e,t)=>n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}}))))),s&&n.createElement("p",{className:j.searchResultItemSummary,dangerouslySetInnerHTML:{__html:s}}))}))):[x&&!N.loading&&n.createElement("p",{key:"no-results"},n.createElement(y.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!N.loading&&n.createElement("div",{key:"spinner",className:j.loadingSpinner})],N.hasMore&&n.createElement("div",{className:j.loader,ref:Q},n.createElement(y.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}function x(){return n.createElement(v.FG,{className:"search-page-wrapper"},n.createElement(E,null))}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.dcd342f8.js.LICENSE.txt b/assets/js/1a4e3797.dcd342f8.js.LICENSE.txt deleted file mode 100644 index 8c17e740e..000000000 --- a/assets/js/1a4e3797.dcd342f8.js.LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -/*! algoliasearch-lite.umd.js | 4.20.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/1a4e3797.e5687d1b.js b/assets/js/1a4e3797.e5687d1b.js new file mode 100644 index 000000000..bb0b66caf --- /dev/null +++ b/assets/js/1a4e3797.e5687d1b.js @@ -0,0 +1,2 @@ +/*! For license information please see 1a4e3797.e5687d1b.js.LICENSE.txt */ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7920],{7331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,s,a,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(s=this._events[e]))return!1;if(r(s))switch(arguments.length){case 1:s.call(this);break;case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),s.apply(this,c)}else if(n(s))for(c=Array.prototype.slice.call(arguments,1),a=(o=s.slice()).length,u=0;u<a;u++)o[u].apply(this,c);return!0},t.prototype.addListener=function(e,s){var a;if(!r(s))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(s.listener)?s.listener:s),this._events[e]?n(this._events[e])?this._events[e].push(s):this._events[e]=[this._events[e],s]:this._events[e]=s,n(this._events[e])&&!this._events[e].warned&&(a=i(this._maxListeners)?t.defaultMaxListeners:this._maxListeners)&&a>0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,s,a,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(a=(i=this._events[e]).length,s=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=a;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){s=c;break}if(s<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(s,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(9374),i=r(7775),s=r(3076);function a(e,t,r,i){return new n(e,t,r,i)}a.version=r(4336),a.AlgoliaSearchHelper=n,a.SearchParameters=i,a.SearchResults=s,e.exports=a},8078:(e,t,r)=>{"use strict";var n=r(7331);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(4853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},2437:(e,t,r)=>{"use strict";var n=r(2344),i=r(116),s=r(9803),a={addRefinement:function(e,t,r){if(a.isRefined(e,t,r))return e;var i=""+r,s=e[t]?e[t].concat(i):[i],c={};return c[t]=s,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return a.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return a.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return a.isRefined(e,t,r)?a.removeRefinement(e,t,r):a.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return s(e,[t]);if("function"==typeof t){var n=!1,a=Object.keys(e).reduce((function(i,s){var a=e[s]||[],c=a.filter((function(e){return!t(e,s,r)}));return c.length!==a.length&&(n=!0),i[s]=c,i}),{});return n?a:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=a},7775:(e,t,r)=>{"use strict";var n=r(2344),i=r(7888),s=r(2686),a=r(185),c=r(116),u=r(9803),o=r(8023),h=r(6801),f=r(2437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return a(e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=o(r);if(this.isNumericRefined(e,t,n))return this;var i=a({},this.numericRefinements);return i[e]=a({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,o(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var s=r[i],a={};return s=s||{},Object.keys(s).forEach((function(r){var n=s[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),a[r]=c})),n[i]=a,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var s,a,c=o(r),u=void 0!==(s=this.numericRefinements[e][t],a=c,i(s,(function(e){return l(e,a)})));return n&&u},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=s(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return s(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),s=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(s)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=s(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,s){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m<f;){var d=l&&Array.isArray(l.data)?l.data:[];l=i(d,(function(e){return e.isRefined})),m++}}if(l){var p=Object.keys(h.data).map((function(e){return[e,h.data[e]]})).filter((function(e){return function(e,t,r,n,i,s){if(i&&(0!==e.indexOf(i)||i===e))return!1;return!i&&-1===e.indexOf(n)||i&&e.split(n).length-i.split(n).length==1||-1===e.indexOf(n)&&-1===r.indexOf(n)||0===r.indexOf(e)||0===e.indexOf(t+n)&&(s||0===e.indexOf(r))}(e[0],l.path||r,s,t,r,n)}));l.data=a(p.map((function(e){var r=e[0];return function(e,t,r,n,i){var s=t.split(r);return{name:s[s.length-1].trim(),path:t,escapedValue:c(t),count:e,isRefined:n===t||0===n.indexOf(t+r),exhaustive:i,data:null}}(e[1],r,t,u(s),h.exhaustive)})),e[0],e[1])}return o}}(m,h,f,l,o),v=t;return f&&(v=t.slice(f.split(h).length)),v.reduce(p,{name:e.hierarchicalFacets[r].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:d,data:null})}};var n=r(4039),i=r(7888),s=r(2293),a=r(2148),c=n.escapeFacetValue,u=n.unescapeFacetValue},3076:(e,t,r)=>{"use strict";var n=r(4587),i=r(2344),s=r(4039),a=r(7888),c=r(9725),u=r(2293),o=r(185),h=r(2148),f=s.escapeFacetValue,l=s.unescapeFacetValue,m=r(210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var s=t[0];this._rawResults=t;var u=this;Object.keys(s).forEach((function(e){u[e]=s[e]}));var h=o({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){u[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=s.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],o=(r=e.hierarchicalFacets,n=t,a(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(o){var h=o.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===o.name}));u.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:s.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],u.disjunctiveFacets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(u.disjunctiveFacets[l],s.facets_stats,t)),d&&(l=v[t],u.facets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(u.facets[l],s.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],a=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(a).forEach((function(t){var r,f=a[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(u.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;u.hierarchicalFacets[r][m].data=o({},u.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=s.facets&&s.facets[t]||{};u.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(u.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!u.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(u.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),s=e._getHierarchicalFacetSeparator(n),a=e.getHierarchicalRefinement(r);0===a.length||a[0].split(s).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var o=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(u.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(a.length>0&&!u.persistHierarchicalRootCount){var m=a[0].split(s)[0];l[m]=u.hierarchicalFacets[h][f].data[m]}u.hierarchicalFacets[h][f].data=i(l,o,u.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];u.facets[n]={name:t,data:R[t],exhaustive:s.exhaustiveFacetsCount},r.forEach((function(e){u.facets[n]=u.facets[n]||{name:t},u.facets[n].data=u.facets[n].data||{},u.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=a(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=a(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var s=a(e.hierarchicalFacets,r);if(!s)return s;var c=e._state.getHierarchicalFacetByName(t),u=e._state._getHierarchicalFacetSeparator(c),o=l(e._state.getHierarchicalRefinement(t)[0]||"");0===o.indexOf(c.rootPath)&&(o=o.replace(c.rootPath+u,""));var h=o.split(u);return h.unshift(t),y(s,h,0),s}}function y(e,t,r){e.isRefined=e.name===t[r],e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var s=t.data.map((function(t){return R(e,t,r,n+1)})),a=e(s,r[n]);return i({data:a},t)}function F(e,t){var r=a(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var s=a(i,(function(e){return e.name===r})),c=s&&s.data&&s.data[n]?s.data[n]:0,u=s&&s.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return a(this.facets,t)||a(this.disjunctiveFacets,t)||a(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(r))n=[e];else n=a._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,a=t.sortRemainingBy;return"hidden"===a?r:(s="alpha"===a?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=u(s.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),s=e._getHierarchicalFacetSeparator(i),c=r.split(s),u=a(n,(function(e){return e.name===t})),o=c.reduce((function(e,t){var r=e&&a(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},9374:(e,t,r)=>{"use strict";var n=r(7331),i=r(8078),s=r(4039).escapeFacetValue,a=r(4853),c=r(185),u=r(116),o=r(9803),h=r(6394),f=r(7775),l=r(3076),m=r(4336);function d(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.setClient(e);var i=r||{};i.index=t,this.state=f.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._searchResultsOptions=n}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}a(d,n),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return h._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=h._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new l(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new l(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:o(h._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),s="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(s);var a=this.client.initIndex(n.index);if("function"!=typeof a.findAnswers)throw new Error(s);return a.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=h.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var f,l=this;return i?f=this.client.searchForFacetValues([{indexName:c.index,params:o}]):a?f=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,f=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),f.then((function(t){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=s(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:f.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new f(e),this},d.prototype.hasRefinements=function(e){return!!u(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=h._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?h._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),s=Array.prototype.concat.apply(n,i),a=this._queryId++;if(this._currentNbQueries++,!s.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,a));try{this.client.search(s).then(this._dispatchAlgoliaResponse.bind(this,r,a)).catch(this._dispatchAlgoliaError.bind(this,a))}catch(c){this.emit("error",{error:c})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var i=r.results.slice();e.forEach((function(e){var t=e.state,r=e.queriesCount,s=e.helper,a=i.splice(0,r);t.index?(s.lastResults=new l(t,a,n._searchResultsOptions),s.emit("result",{results:s.lastResults,state:t})):s.emit("result",{results:null,state:t})}))}},d.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},d.prototype.containsRefinement=function(e,t,r,n){return e||0!==t.length||0!==r.length||0!==n.length},d.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&this.state.disjunctiveRefinements[e].length>0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new i(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},4587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},2344:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},4039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r<e.length;r++)if(t(e[r]))return e[r]}},9725:e=>{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r<e.length;r++)if(t(e[r]))return r;return-1}},2293:(e,t,r)=>{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),s=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!s?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(s[0]),e[1].push(s[1]),e)}),[[],[]])}},4853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},2686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var s=n[i],a=e[i];void 0!==a&&void 0===s||(t(a)&&t(s)?e[i]=r(a,s):e[i]="object"==typeof(c=s)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n<i;n++){var s=arguments[n];t(s)&&r(e,s)}return e}},116:e=>{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},9803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}},2148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,s=null===t;if(!s&&e>t||n&&i||!r)return 1;if(!n&&e<t||s&&r||!i)return-1}return 0}e.exports=function(e,r,n){if(!Array.isArray(e))return[];Array.isArray(n)||(n=[]);var i=e.map((function(e,t){return{criteria:r.map((function(t){return e[t]})),index:t,value:e}}));return i.sort((function(e,r){for(var i=-1;++i<e.criteria.length;){var s=t(e.criteria[i],r.criteria[i]);if(s)return i>=n.length?s:"desc"===n[i]?-s:s}return e.index-r.index})),i.map((function(e){return e.value}))}},8023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},6394:(e,t,r)=>{"use strict";var n=r(185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var s={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:s._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:s._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),a=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(a.length>0&&a[0].split(c).length>1){var u=a[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,a){var c=s._getDisjunctiveFacetSearchParams(t,n.attribute,0===a);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[a-1];c.facetFilters=a>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(s._getHitsHierarchicalFacetsAttributes(e)).sort(),r=s._getFacetFilters(e),a=s._getNumericFilters(e),c=s._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),a.length>0&&(u.numericFilters=a),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=s._getFacetFilters(e,t,r),c=s._getNumericFilters(e,t),u=s._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?s._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),a.length>0&&(o.facetFilters=a),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var s=i[e]||[];t!==n&&s.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).slice().sort().forEach((function(t){n.push(e+":"+t)}))}));var s=e.facetsExcludes||{};Object.keys(s).sort().forEach((function(e){(s[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var a=e.disjunctiveFacetsRefinements||{};Object.keys(a).sort().forEach((function(e){var r=a[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.slice().sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var s=(c[i]||[])[0];if(void 0!==s){var a,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===s.indexOf(h)||!f&&!0===r||f&&f.split(h).length===s.split(h).length)return;f?(u=f.split(h).length-1,s=f):(u=s.split(h).length-2,s=s.slice(0,s.lastIndexOf(h))),a=o.attributes[u]}else u=s.split(h).length-1,a=o.attributes[u];a&&n.push([a+":"+s])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),s=n.split(i).length,a=r.attributes.slice(0,s+1);return t.concat(a)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),s=0;return i&&(s=i.split(n).length),[t.attributes[s]]}var a=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,a+1)},getSearchForFacetQuery:function(e,t,r,a){var c=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},s._getHitsSearchParams(c),u))}};e.exports=s},6801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},4336:e=>{"use strict";e.exports="3.16.2"},290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(t){e(r,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,s=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw s}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function a(e){var t,r="algoliasearch-client-js-".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},s=function(){return JSON.parse(n().getItem(r)||"{}")},a=function(e){n().setItem(r,JSON.stringify(e))},c=function(){var t=e.timeToLive?1e3*e.timeToLive:null,r=s(),n=Object.fromEntries(Object.entries(r).filter((function(e){return void 0!==i(e,2)[1].timestamp})));if(a(n),t){var c=Object.fromEntries(Object.entries(n).filter((function(e){var r=i(e,2)[1],n=(new Date).getTime();return!(r.timestamp+t<n)})));a(c)}};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return s()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],s=t[1];return Promise.all([n,s||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=s();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=s();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=s(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},s=JSON.stringify(r);if(s in t)return Promise.resolve(e.serializable?JSON.parse(t[s]):t[s]);var a=n(),c=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return c(e)})).then((function(){return a}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var i=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[i++])}))}var l={WithinQueryParameters:0,WithinHeaders:1};function m(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function j(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(s(r),s(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function P(e,t,n,i){var a=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,s){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(a)};var m={data:c,headers:u,method:o,url:_(h,n.path,f),connectTimeout:s(l,e.timeouts.connect),responseTimeout:s(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return a.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,s)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(a))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return j(e.hostsCache,t).then((function(e){return m(s(e.statelessHosts).reverse(),e.getTimeout)}))}function x(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function _(e,t,r){var n=E(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function E(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),s=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,s=e.requestsCache,a=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:s,responsesCache:a,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var s={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(s,(function(){return f.requestsCache.get(s,(function(){return f.requestsCache.set(s,n()).then((function(e){return Promise.all([f.requestsCache.delete(s),e])}),(function(e){return Promise.all([f.requestsCache.delete(s),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(s,e)}})},write:function(e,t){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:s,appId:t,addAlgoliaAgent:function(e,t){s.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then((function(){}))}},e.methods)},A=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:E(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var s=t.params,a=s.facetName,c=s.facetQuery,u=n(s,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(a,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,k=2,q=3;function V(e,t,n){var i,s={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},s=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(s),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(s),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(s),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return k>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[a({key:"".concat("4.22.1","-").concat(e)}),u()]}),userAgent:x("4.22.1").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return N(r(r(r({},s),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:A,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:Q}})}}}}))}return V.version="4.22.1",V}()},3777:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(7294),i=r(9962);const s=["zero","one","two","few","many","other"];function a(e){return s.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,n.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`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.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 ${n.length}: ${e}`);const i=r.select(t),s=r.pluralForms.indexOf(i);return n[Math.min(s,n.length-1)]}(r,t,e)}}},8167:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var n=r(7294),i=r(512),s=r(8131),a=r.n(s),c=r(290),u=r.n(c),o=r(6136),h=r(1514),f=r(4791),l=r(9871),m=r(3777),d=r(5358),p=r(3768),v=r(9488),g=r(2733),y=r(7325),R=r(9962),F=r(7263),b=r(2327),j=r(4960),P=r(3899);const x={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};var _=r(5893);function E(e){let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return(0,_.jsx)("div",{className:(0,i.Z)("col","col--3","padding-left--none",x.searchVersionColumn),children:r.map((e=>{let[n,i]=e;const s=r.length>1?`${n}: `:"";return(0,_.jsx)("select",{onChange:e=>t.setSearchVersion(n,e.target.value),defaultValue:t.searchVersions[n],className:x.searchVersionInput,children:i.versions.map(((e,t)=>(0,_.jsx)("option",{label:`${s}${e.label}`,value:e.name},t)))},n)}))})}function O(){const{i18n:{currentLocale:e}}=(0,R.Z)(),{algolia:{appId:t,apiKey:r,indexName:s}}=(0,F.L)(),c=(0,b.l)(),v=function(){const{selectMessage:e}=(0,m.c)();return t=>e(t,(0,y.I)({id:"theme.SearchPage.documentsFound.plurals",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)',message:"One document found|{count} documents found"},{count:t}))}(),O=function(){const e=(0,l._r)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[w,N]=(0,d.K)(),A={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[H,S]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return A;case"loading":return{...e,loading:!0};case"update":return w!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),A),T=u()(t,r),Q=a()(T,s,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});Q.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:s}}=e;if(""===t||!Array.isArray(r))return void S({type:"reset"});const a=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>a(r[e].value)));return{title:i.pop(),url:c(t),summary:n.content?`${a(n.content.value)}...`:"",breadcrumbs:i}}));S({type:"update",value:{items:u,query:t,totalResults:i,totalPages:s,lastPage:n,hasMore:s>n+1,loading:!1}})}));const[C,I]=(0,n.useState)(null),D=(0,n.useRef)(0),k=(0,n.useRef)(o.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&D.current>r&&S({type:"advance"}),D.current=r}),{threshold:1})),q=()=>w?(0,y.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:w}):(0,y.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),V=(0,p.zX)((function(t){void 0===t&&(t=0),Q.addDisjunctiveFacetRefinement("docusaurus_tag","default"),Q.addDisjunctiveFacetRefinement("language",e),Object.entries(O.searchVersions).forEach((e=>{let[t,r]=e;Q.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),Q.setQuery(w).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!C)return;const e=k.current;return e?(e.observe(C),()=>e.unobserve(C)):()=>!0}),[C]),(0,n.useEffect)((()=>{S({type:"reset"}),w&&(S({type:"loading"}),setTimeout((()=>{V()}),300))}),[w,O.searchVersions,V]),(0,n.useEffect)((()=>{H.lastPage&&0!==H.lastPage&&V(H.lastPage)}),[V,H.lastPage]),(0,_.jsxs)(j.Z,{children:[(0,_.jsxs)(h.Z,{children:[(0,_.jsx)("title",{children:(0,g.p)(q())}),(0,_.jsx)("meta",{property:"robots",content:"noindex, follow"})]}),(0,_.jsxs)("div",{className:"container margin-vert--lg",children:[(0,_.jsx)(P.Z,{as:"h1",children:q()}),(0,_.jsxs)("form",{className:"row",onSubmit:e=>e.preventDefault(),children:[(0,_.jsx)("div",{className:(0,i.Z)("col",x.searchQueryColumn,{"col--9":O.versioningEnabled,"col--12":!O.versioningEnabled}),children:(0,_.jsx)("input",{type:"search",name:"q",className:x.searchQueryInput,placeholder:(0,y.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,y.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>N(e.target.value),value:w,autoComplete:"off",autoFocus:!0})}),O.versioningEnabled&&(0,_.jsx)(E,{docsSearchVersionsHelpers:O})]}),(0,_.jsxs)("div",{className:"row",children:[(0,_.jsx)("div",{className:(0,i.Z)("col","col--8",x.searchResultsColumn),children:!!H.totalResults&&v(H.totalResults)}),(0,_.jsx)("div",{className:(0,i.Z)("col","col--4","text--right",x.searchLogoColumn),children:(0,_.jsx)(f.Z,{to:"https://www.algolia.com/","aria-label":(0,y.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"}),children:(0,_.jsx)("svg",{viewBox:"0 0 168 24",className:x.algoliaLogo,children:(0,_.jsxs)("g",{fill:"none",children:[(0,_.jsx)("path",{className:x.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),(0,_.jsx)("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),(0,_.jsx)("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})]})})})})]}),H.items.length>0?(0,_.jsx)("main",{children:H.items.map(((e,t)=>{let{title:r,url:n,summary:s,breadcrumbs:a}=e;return(0,_.jsxs)("article",{className:x.searchResultItem,children:[(0,_.jsx)(P.Z,{as:"h2",className:x.searchResultItemHeading,children:(0,_.jsx)(f.Z,{to:n,dangerouslySetInnerHTML:{__html:r}})}),a.length>0&&(0,_.jsx)("nav",{"aria-label":"breadcrumbs",children:(0,_.jsx)("ul",{className:(0,i.Z)("breadcrumbs",x.searchResultItemPath),children:a.map(((e,t)=>(0,_.jsx)("li",{className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}},t)))})}),s&&(0,_.jsx)("p",{className:x.searchResultItemSummary,dangerouslySetInnerHTML:{__html:s}})]},t)}))}):[w&&!H.loading&&(0,_.jsx)("p",{children:(0,_.jsx)(y.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result",children:"No results were found"})},"no-results"),!!H.loading&&(0,_.jsx)("div",{className:x.loadingSpinner},"spinner")],H.hasMore&&(0,_.jsx)("div",{className:x.loader,ref:I,children:(0,_.jsx)(y.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results",children:"Fetching new results..."})})]})]})}function w(){return(0,_.jsx)(v.FG,{className:"search-page-wrapper",children:(0,_.jsx)(O,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.e5687d1b.js.LICENSE.txt b/assets/js/1a4e3797.e5687d1b.js.LICENSE.txt new file mode 100644 index 000000000..9caab8b19 --- /dev/null +++ b/assets/js/1a4e3797.e5687d1b.js.LICENSE.txt @@ -0,0 +1 @@ +/*! algoliasearch-lite.umd.js | 4.22.1 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/1ad5d13a.573648bd.js b/assets/js/1ad5d13a.573648bd.js deleted file mode 100644 index 3c4711803..000000000 --- a/assets/js/1ad5d13a.573648bd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1706],{4137:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>p});var a=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function n(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,a,r=function(e,t){if(null==e)return{};var o,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)o=i[a],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)o=i[a],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):n(n({},t),e)),o},u=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},h="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var o=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),h=c(o),d=r,p=h["".concat(l,".").concat(d)]||h[d]||f[d]||i;return o?a.createElement(p,n(n({ref:t},u),{},{components:o})):a.createElement(p,n({ref:t},u))}));function p(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=o.length,n=new Array(i);n[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[h]="string"==typeof e?e:r,n[1]=s;for(var c=2;c<i;c++)n[c]=o[c];return a.createElement.apply(null,n)}return a.createElement.apply(null,o)}d.displayName="MDXCreateElement"},6609:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>h});var a=o(7462),r=(o(7294),o(4137)),i=o(1872),n=o(7271);const s={id:"how-to-get-sf-certification-vouchers",title:"How to get SF Certification vouchers?",sidebar_label:"SF Certification Vouchers",description:"Salesforce Certifications. What, why and how (you can pay less).",image:"img/og/og-image-faq-sf-certification-vouchers.png",tags:["Marketing Cloud","FAQ"]},l=void 0,c={unversionedId:"faq/how-to-get-sf-certification-vouchers",id:"faq/how-to-get-sf-certification-vouchers",title:"How to get SF Certification vouchers?",description:"Salesforce Certifications. What, why and how (you can pay less).",source:"@site/sites/faq/how-to-get-sf-certification-vouchers.mdx",sourceDirName:"faq",slug:"/faq/how-to-get-sf-certification-vouchers",permalink:"/sites/faq/how-to-get-sf-certification-vouchers",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/faq/how-to-get-sf-certification-vouchers.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"FAQ",permalink:"/sites/tags/faq"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1702249630,formattedLastUpdatedAt:"Dec 10, 2023",frontMatter:{id:"how-to-get-sf-certification-vouchers",title:"How to get SF Certification vouchers?",sidebar_label:"SF Certification Vouchers",description:"Salesforce Certifications. What, why and how (you can pay less).",image:"img/og/og-image-faq-sf-certification-vouchers.png",tags:["Marketing Cloud","FAQ"]},sidebar:"faq",previous:{title:"SFMC Hands-on Experience",permalink:"/sites/faq/how-to-get-sfmc-hands-on-experience"}},u={},h=[{value:"Badges vs Certification",id:"badges-vs-certification",level:2},{value:"Badges",id:"badges",level:3},{value:"Superbadges",id:"superbadges",level:3},{value:"Salesforce Certifications",id:"salesforce-certifications",level:3},{value:"Salesforce Accreditations",id:"salesforce-accreditations",level:3},{value:"Why get Salesforce certified?",id:"why-get-salesforce-certified",level:2},{value:"You will be seen by recruiters",id:"you-will-be-seen-by-recruiters",level:3},{value:"You will have an argument for a rise",id:"you-will-have-an-argument-for-a-rise",level:3},{value:"You will validate your knowledge",id:"you-will-validate-your-knowledge",level:3},{value:"You will be motivated to expand your knowledge",id:"you-will-be-motivated-to-expand-your-knowledge",level:3},{value:"How to get Salesforce Certified for free?",id:"how-to-get-salesforce-certified-for-free",level:2},{value:"Vouchers from your company",id:"vouchers-from-your-company",level:3},{value:"Vouchers for Partner Community",id:"vouchers-for-partner-community",level:3},{value:"Vouchers from Salesforce",id:"vouchers-from-salesforce",level:3},{value:"Vouchers from Trailhead Quest",id:"vouchers-from-trailhead-quest",level:3},{value:"Vouchers from Meetups",id:"vouchers-from-meetups",level:3},{value:"Vouchers from Salesforce special programs",id:"vouchers-from-salesforce-special-programs",level:3},{value:"Asking people for vouchers",id:"asking-people-for-vouchers",level:3},{value:"Sum Up",id:"sum-up",level:2}],f={toc:h},d="wrapper";function p(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,a.Z)({},f,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.m,{content:"Salesforce Certifications. What, why and how (you can pay less).",mdxType:"LeadText"}),(0,r.kt)("p",null,"In the Salesforce ecosystem, badges and certificates are everywhere. While the former is free on Trailhead, the latter is pretty expensive even to attempt to get them. It creates some questions:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"What is the difference between free badges and paid certs?"),(0,r.kt)("li",{parentName:"ol"},"Why bother with the paid option?"),(0,r.kt)("li",{parentName:"ol"},"Can you get certified for free (or at least cheaper)?")),(0,r.kt)("p",null,"Let's dive in."),(0,r.kt)("h2",{id:"badges-vs-certification"},"Badges vs Certification"),(0,r.kt)("p",null,"When it comes to official proofs of Salesforce knowledge, there are four types available: Badges and Superbadges available on Trailhead (self-learning platform for everyone), Certifications available on Webassessor (examination platform for everyone) and Professional Accreditations available on Partner Learning Camp (self-learning platform for official Partners)."),(0,r.kt)("h3",{id:"badges"},"Badges"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://trailhead.salesforce.com/modules"},"Badges")," are obtained (for free) by passing a few quizzes and, in some cases, guided hands-on exercises within a Trailhead module focused on a specific topic. It can be technical (for example, configuration or development) or business (best practices or frameworks). Salesforce provides all required knowledge within the module, and you should be able to complete it in between 5 to 40 minutes, depending on the module's complexity. They are great for learning and easy to obtain (especially with unlimited attempts). For me, having a badge proves that someone has a high-level awareness of a topic covered by the badge."),(0,r.kt)("h3",{id:"superbadges"},"Superbadges"),(0,r.kt)("p",null,"Trailhead also offers ",(0,r.kt)("a",{parentName:"p",href:"https://trailhead.salesforce.com/superbadges"},"Superbadges")," (also for free). These are different beasts from standard badges - not only do they have some of these as a prerequisite, but their crucial task is a full-blown hands-on exercise on the Salesforce CRM platform. While they also provide a guide with references, it's not enough, and some work with documentation and problem-solving is also required to perform the hands-on tasks. They take a few to a dozen hours and are much closer to project experience. For me, having a Superbadge proves that someone completed the basic version of a task once and should be able to do something similar with documentation and support."),(0,r.kt)("h3",{id:"salesforce-certifications"},"Salesforce Certifications"),(0,r.kt)("p",null,"Salesforce ",(0,r.kt)("a",{parentName:"p",href:"https://trailhead.salesforce.com/en/credentials/marketingoverview"},"Certifications")," are entirely different. Whereas badges and Superbadges are created for learning, certifications are for proving knowledge. You will complete (many) badges before you attempt the certification exam. Real project experience is also beneficial (or even required) for most of them. On top of that, they aren't free. Exam attempts cost between $75+VAT (for Associate exams), $200+VAT (for most) and $400+VAT (for Architect exams). Oh yeah, there is also a Certified Technical Architect for $6000+VAT per attempt waiting for you ;). While the difficulty between the exams varies a lot, they are much more challenging than badges as you have limited time (1-2 hours) to pass them and cannot use any resources other than your head. For me, having a certification proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there."),(0,r.kt)("h3",{id:"salesforce-accreditations"},"Salesforce Accreditations"),(0,r.kt)("p",null,"Finally, there are ",(0,r.kt)("a",{parentName:"p",href:"https://partners.salesforce.com/pdx/s/learn/article/accredited-professional-MCBQXAKQTOTZCQHOXTMK33NUMLWY?language=en_US"},"Professional Accreditations")," available only for Salesforce Partners - companies responsible for implementing, supporting and enriching Salesforce solutions for SF customers. Professional Accreditations are very similar to Salesforce Certifications - they are paid, require passing an exam, and have a learning path built with Trailhead modules. There are some differences, however. On top of publicly available modules, they have some Partner-only knowledge sources (in some cases - hands-on exercises). Additionally, they cover more niche topics that aren't part of the standard Salesforce Certifications. For me, accreditation proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there."),(0,r.kt)("p",null,"To sum up - my growing order of confidence in a person's skills based on just credentials looks like this:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Badge"),(0,r.kt)("li",{parentName:"ol"},"Associate Certification"),(0,r.kt)("li",{parentName:"ol"},"Superbadge"),(0,r.kt)("li",{parentName:"ol"},"Salesforce Non-Architect Certification and Professional Accreditation"),(0,r.kt)("li",{parentName:"ol"},"Salesforce Architect Certification")),(0,r.kt)("p",null,"Does it mean someone with just badges is a worse expert than someone with 5 certificates? Not necessarily - there are knowledge titans that don't have (many or any) certifications for various reasons but know the tools better than Salesforce. Real-world project experience and expertise are best. So why bother paying for certs?"),(0,r.kt)("h2",{id:"why-get-salesforce-certified"},"Why get Salesforce certified?"),(0,r.kt)("p",null,"Badges, Superbadges and actual project experience are enough to be a top expert. There is no need to pay for certification to be an outstanding Trailblazer. Still, there are significant benefits to pursuing official credentials:"),(0,r.kt)("h3",{id:"you-will-be-seen-by-recruiters"},"You will be seen by recruiters"),(0,r.kt)("p",null,"Certifications are a great tool to stand out to recruiters. They are easy to understand and show in search, making them the perfect tool to put their foot in the door."),(0,r.kt)("p",null,"To better understand that, let's break down the recruitment process into three key steps (yeah, I simplify it a lot):"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Create a pool of candidates - quick search (on LinkedIn, career platforms, received CVs) for potential candidates using keyword matches. It can be manual; it can be automated with AI. Here, your previous role names and certifications play the leading role."),(0,r.kt)("li",{parentName:"ol"},"Select the most interesting candidates - a deeper dive into the profile to limit the pool from the previous step to the best matches. Your past jobs and task descriptions shine here as they showcase what you are doing. Certifications can give you an edge here as proof of knowledge - especially for Salesforce Partner companies."),(0,r.kt)("li",{parentName:"ol"},"Interview the top candidates - after two previous rounds, it's time to talk. At this step, certifications are no longer critical, and the key is your communication, self-presentation skills, and real platform experience.")),(0,r.kt)("p",null,"As you can see, certificates won't guarantee a job, but they will give you much more visibility and increase your chance of being picked up. This is especially true for higher positions where credentials are frequently optional or even mandatory requirements."),(0,r.kt)("h3",{id:"you-will-have-an-argument-for-a-rise"},"You will have an argument for a rise"),(0,r.kt)("p",null,"Certification is also an excellent argument for getting a rise. It is easy proof of getting better than before and a reason for you being worth more on the market (as ",(0,r.kt)("a",{parentName:"p",href:"#you-will-be-seen-by-recruiters"},"recruiters will see you easier"),")."),(0,r.kt)("p",null,"It is especially true when you work for a Salesforce Partner - for them, the certs are much more critical because both Salesforce and potential clients check them when looking for a project partner."),(0,r.kt)("h3",{id:"you-will-validate-your-knowledge"},"You will validate your knowledge"),(0,r.kt)("p",null,"Certifications are a nice tool to validate your knowledge, especially if you have been working on a tool for a long time. Salesforce platforms change a lot over time, and while the old ways might still work for some time, there might be new, better methods. Additionally, you may not be aware of everything available with how broad the Salesforce capabilities are."),(0,r.kt)("p",null,"Preparing for and passing a certification exam is a great way to validate you know the current basics for a given role and - with obligatory ongoing credential maintenance - that you stay on top of changes."),(0,r.kt)("h3",{id:"you-will-be-motivated-to-expand-your-knowledge"},"You will be motivated to expand your knowledge"),(0,r.kt)("p",null,"Certifications are also great tools when you want to learn something new. Salesforce prepares dedicated Trailmixes on Trailhead that group relevant badges for a certification area. Thanks to certifications, there are also a lot of additional materials supporting your learning created by companies like Focus on Force or other Trailblazers on their blogs and videos."),(0,r.kt)("p",null,"After all this learning, getting certified is a neat way to validate your work and gain confidence in your baseline knowledge."),(0,r.kt)("p",null,"Certification sum up - not needed, but worthwhile. So, how can you get Salesforce Certified without ruining the budget?"),(0,r.kt)("h2",{id:"how-to-get-salesforce-certified-for-free"},"How to get Salesforce Certified for free?"),(0,r.kt)("p",null,"Salesforce certification is costly, and paying for it out of pocket creates a significant dent in the budget, especially with static worldwide pricing that doesn't consider the difference in purchasing power between countries."),(0,r.kt)("p",null,"There are, however, some options to spend less or even nothing to get a chance to pass the credential exam."),(0,r.kt)("h3",{id:"vouchers-from-your-company"},"Vouchers from your company"),(0,r.kt)("p",null,"This is probably not the answer you are looking for, but the easiest way to get the voucher might be to get it from your company. However, a lot will depend on the company you work for."),(0,r.kt)("p",null,"It is easy if you work for Salesforce Partner. Not only are they getting vouchers as a part of the Partner program, but they also have a discount on buying more for their employees. Additionally, they want their employees to be certified, giving them a better chance to score a new project. Salesforce and potential clients look for project partner certifications on company-wide and specific consultant levels."),(0,r.kt)("p",null,"It is much more challenging if you work as an in-house. Many companies don't want to fund exam vouchers to their in-house employees because they don't see the added value for their day-to-day work and fear the ",(0,r.kt)("a",{parentName:"p",href:"#you-will-be-seen-by-recruiters"},"recruitment"),"/",(0,r.kt)("a",{parentName:"p",href:"#you-will-have-an-argument-for-a-rise"},"rise")," benefits of getting certified. If this is the case, try to show the ",(0,r.kt)("a",{parentName:"p",href:"#you-will-validate-your-knowledge"},"knowledge maintenance")," and ",(0,r.kt)("a",{parentName:"p",href:"#you-will-be-motivated-to-expand-your-knowledge"},"upskilling")," benefits and tie them to your KPIs. Another option to get a voucher might be to propose it as a fallback benefit if a rise is unavailable in a given evaluation period. If this also doesn't work, it's time to look for other potential sources (or a new employer)."),(0,r.kt)("h3",{id:"vouchers-for-partner-community"},"Vouchers for Partner Community"),(0,r.kt)("p",null,"Another great source of vouchers is limited to employees of Salesforce Partners. Apart from getting those vouchers from their company, there are recurring opportunities given directly from Salesforce for certifications that are currently in their focus. The best place to look for them is to join Partner Community channels for specific products and check the description and recent posts for goodies."),(0,r.kt)(n.z,{link:"https://partners.salesforce.com/_ui/core/chatter/ui/ChatterPage",text:"Partner Community",newTab:"true",mdxType:"Button"}),(0,r.kt)("h3",{id:"vouchers-from-salesforce"},"Vouchers from Salesforce"),(0,r.kt)("p",null,"In the past, Salesforce frequently publicly shared vouchers that at least cut down the price and sometimes even allowed for free exam attempts. For example, in the first half of 2023, a $100 off voucher made Salesforce Associate certification completely free. However, since then, those vouchers have become extremely scarce, and the few still appearing are much less beneficial. My favourite place to check which (if any) public vouchers are currently available is to visit the always-updated page by Dinesh Yadav:"),(0,r.kt)(n.z,{link:"https://dineshyadav.com/how-to-get-free-or-discounted-salesforce-certification-voucher/",text:"Dinesh's Voucher Tracker",newTab:"true",mdxType:"Button"}),(0,r.kt)("h3",{id:"vouchers-from-trailhead-quest"},"Vouchers from Trailhead Quest"),(0,r.kt)("p",null,"Outside of publicly shared vouchers, Salesforce also offers ",(0,r.kt)("a",{parentName:"p",href:"https://trailhead.salesforce.com/quests"},"Trailhead Quests")," that, for doing some task, give you a chance to get a goodie. There are multiple options, with the prizes varying from the time-limited badge through a mystery box up to the topic of this article - a certification voucher. Keep checking this page occasionally, as the list changes regularly."),(0,r.kt)(n.z,{link:"https://trailhead.salesforce.com/quests#thquests-dreamquest",text:"Trailhead Quests",newTab:"true",mdxType:"Button"}),(0,r.kt)("h3",{id:"vouchers-from-meetups"},"Vouchers from Meetups"),(0,r.kt)("p",null,"Trailblazer Community Group Leaders and offline meetup organisers can sometimes get vouchers from Salesforce for quiz/raffle purposes. Check events happening close to you, broaden your knowledge and get a chance to win a voucher for a free exam."),(0,r.kt)(n.z,{link:"https://trailblazercommunitygroups.com/events/",text:"Trailblazer Community Groups events",newTab:"true",mdxType:"Button"}),(0,r.kt)("h3",{id:"vouchers-from-salesforce-special-programs"},"Vouchers from Salesforce special programs"),(0,r.kt)("p",null,"There are also various opportunities to get free exams by supporting Salesforce with your work."),(0,r.kt)("p",null,"One example of such a program (rare but relatively accessible) is helping Salesforce create or test new certifications. With this option, you will need to provide feedback on the exam questions, certification scope and prep materials. It will let you attempt the certification for free long before it is publicly available. The best way to look for such opportunities is to follow the Salesforce Credentials Development team on LinkedIn or Trailblazer Community and patiently wait for a ",(0,r.kt)("a",{parentName:"p",href:"https://www.linkedin.com/posts/melaniewachs76_salesforce-entry-level-ai-data-crm-certification-activity-7069787255019614208-yNkI"},"post inviting to a new certification project"),"."),(0,r.kt)("h3",{id:"asking-people-for-vouchers"},"Asking people for vouchers"),(0,r.kt)("p",null,"Please don't."),(0,r.kt)("p",null,"Think about why that random person should give you a voucher:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"If they get them from their company - the company will check whether they used them for certification."),(0,r.kt)("li",{parentName:"ul"},"If they get them from Partner Community - those are limited to Partners employees. If you are one, you can get it yourself. If you are not - you won't be eligible to receive it."),(0,r.kt)("li",{parentName:"ul"},"If they get them from publicly available vouchers - you can also get them from the same source."),(0,r.kt)("li",{parentName:"ul"},"If they get them from Trailhead Quest or a meetup raffle - they participated because they wanted it for themselves so they won't be giving it away."),(0,r.kt)("li",{parentName:"ul"},"If they get them from Salesforce programs - they are named vouchers that no one else can use."),(0,r.kt)("li",{parentName:"ul"},"If they bought them from their pocket - why would they want to give those hundred dollars away?")),(0,r.kt)("p",null,"Instead of asking others about their vouchers, try the methods above to get your own."),(0,r.kt)("h2",{id:"sum-up"},"Sum Up"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Salesforce Certifications are not needed but worthwhile."),(0,r.kt)("li",{parentName:"ol"},"There are multiple ways to try getting certified for free, but if you want to go on an exam-passing spree, your best bet is to work for Salesforce Partner (or Salesforce themselves).")))}p.isMDXComponent=!0},7271:(e,t,o)=>{o.d(t,{V:()=>i,z:()=>r});var a=o(7294);const r=e=>{let{link:t,text:o,newTab:r=!1}=e;return a.createElement(a.Fragment,null,a.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:r?"_blank":"_self"},o))},i=e=>{let{linkLeft:t,textLeft:o,newTabLeft:r=!1,linkRight:i,textRight:n,newTabRight:s=!1}=e;return a.createElement(a.Fragment,null,a.createElement("div",{class:"col col--12"},a.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:r?"_blank":"_self"},o),a.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:i,target:s?"_blank":"_self"},n)))}},1872:(e,t,o)=>{o.d(t,{m:()=>i});var a=o(7294);const r="leadText_qzwo",i=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}}}]); \ No newline at end of file diff --git a/assets/js/1ad5d13a.e01c73ea.js b/assets/js/1ad5d13a.e01c73ea.js new file mode 100644 index 000000000..ef61a5d93 --- /dev/null +++ b/assets/js/1ad5d13a.e01c73ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1706],{5650:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>h,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=o(5893),a=o(1151),i=o(1872),n=o(7271);const s={id:"how-to-get-sf-certification-vouchers",title:"How to get SF Certification vouchers?",sidebar_label:"SF Certification Vouchers",description:"Salesforce Certifications. What, why and how (you can pay less).",image:"img/og/og-image-faq-sf-certification-vouchers.png",tags:["Marketing Cloud","FAQ"]},l=void 0,c={id:"faq/how-to-get-sf-certification-vouchers",title:"How to get SF Certification vouchers?",description:"Salesforce Certifications. What, why and how (you can pay less).",source:"@site/sites/faq/how-to-get-sf-certification-vouchers.mdx",sourceDirName:"faq",slug:"/faq/how-to-get-sf-certification-vouchers",permalink:"/sites/faq/how-to-get-sf-certification-vouchers",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/faq/how-to-get-sf-certification-vouchers.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"FAQ",permalink:"/sites/tags/faq"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1702249630,formattedLastUpdatedAt:"Dec 10, 2023",frontMatter:{id:"how-to-get-sf-certification-vouchers",title:"How to get SF Certification vouchers?",sidebar_label:"SF Certification Vouchers",description:"Salesforce Certifications. What, why and how (you can pay less).",image:"img/og/og-image-faq-sf-certification-vouchers.png",tags:["Marketing Cloud","FAQ"]},sidebar:"faq",previous:{title:"SFMC Hands-on Experience",permalink:"/sites/faq/how-to-get-sfmc-hands-on-experience"}},h={},d=[{value:"Badges vs Certification",id:"badges-vs-certification",level:2},{value:"Badges",id:"badges",level:3},{value:"Superbadges",id:"superbadges",level:3},{value:"Salesforce Certifications",id:"salesforce-certifications",level:3},{value:"Salesforce Accreditations",id:"salesforce-accreditations",level:3},{value:"Why get Salesforce certified?",id:"why-get-salesforce-certified",level:2},{value:"You will be seen by recruiters",id:"you-will-be-seen-by-recruiters",level:3},{value:"You will have an argument for a rise",id:"you-will-have-an-argument-for-a-rise",level:3},{value:"You will validate your knowledge",id:"you-will-validate-your-knowledge",level:3},{value:"You will be motivated to expand your knowledge",id:"you-will-be-motivated-to-expand-your-knowledge",level:3},{value:"How to get Salesforce Certified for free?",id:"how-to-get-salesforce-certified-for-free",level:2},{value:"Vouchers from your company",id:"vouchers-from-your-company",level:3},{value:"Vouchers for Partner Community",id:"vouchers-for-partner-community",level:3},{value:"Vouchers from Salesforce",id:"vouchers-from-salesforce",level:3},{value:"Vouchers from Trailhead Quest",id:"vouchers-from-trailhead-quest",level:3},{value:"Vouchers from Meetups",id:"vouchers-from-meetups",level:3},{value:"Vouchers from Salesforce special programs",id:"vouchers-from-salesforce-special-programs",level:3},{value:"Asking people for vouchers",id:"asking-people-for-vouchers",level:3},{value:"Sum Up",id:"sum-up",level:2}];function f(e){const t={a:"a",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.m,{content:"Salesforce Certifications. What, why and how (you can pay less)."}),"\n",(0,r.jsx)(t.p,{children:"In the Salesforce ecosystem, badges and certificates are everywhere. While the former is free on Trailhead, the latter is pretty expensive even to attempt to get them. It creates some questions:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"What is the difference between free badges and paid certs?"}),"\n",(0,r.jsx)(t.li,{children:"Why bother with the paid option?"}),"\n",(0,r.jsx)(t.li,{children:"Can you get certified for free (or at least cheaper)?"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Let's dive in."}),"\n",(0,r.jsx)(t.h2,{id:"badges-vs-certification",children:"Badges vs Certification"}),"\n",(0,r.jsx)(t.p,{children:"When it comes to official proofs of Salesforce knowledge, there are four types available: Badges and Superbadges available on Trailhead (self-learning platform for everyone), Certifications available on Webassessor (examination platform for everyone) and Professional Accreditations available on Partner Learning Camp (self-learning platform for official Partners)."}),"\n",(0,r.jsx)(t.h3,{id:"badges",children:"Badges"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://trailhead.salesforce.com/modules",children:"Badges"})," are obtained (for free) by passing a few quizzes and, in some cases, guided hands-on exercises within a Trailhead module focused on a specific topic. It can be technical (for example, configuration or development) or business (best practices or frameworks). Salesforce provides all required knowledge within the module, and you should be able to complete it in between 5 to 40 minutes, depending on the module's complexity. They are great for learning and easy to obtain (especially with unlimited attempts). For me, having a badge proves that someone has a high-level awareness of a topic covered by the badge."]}),"\n",(0,r.jsx)(t.h3,{id:"superbadges",children:"Superbadges"}),"\n",(0,r.jsxs)(t.p,{children:["Trailhead also offers ",(0,r.jsx)(t.a,{href:"https://trailhead.salesforce.com/superbadges",children:"Superbadges"})," (also for free). These are different beasts from standard badges - not only do they have some of these as a prerequisite, but their crucial task is a full-blown hands-on exercise on the Salesforce CRM platform. While they also provide a guide with references, it's not enough, and some work with documentation and problem-solving is also required to perform the hands-on tasks. They take a few to a dozen hours and are much closer to project experience. For me, having a Superbadge proves that someone completed the basic version of a task once and should be able to do something similar with documentation and support."]}),"\n",(0,r.jsx)(t.h3,{id:"salesforce-certifications",children:"Salesforce Certifications"}),"\n",(0,r.jsxs)(t.p,{children:["Salesforce ",(0,r.jsx)(t.a,{href:"https://trailhead.salesforce.com/en/credentials/marketingoverview",children:"Certifications"})," are entirely different. Whereas badges and Superbadges are created for learning, certifications are for proving knowledge. You will complete (many) badges before you attempt the certification exam. Real project experience is also beneficial (or even required) for most of them. On top of that, they aren't free. Exam attempts cost between $75+VAT (for Associate exams), $200+VAT (for most) and $400+VAT (for Architect exams). Oh yeah, there is also a Certified Technical Architect for $6000+VAT per attempt waiting for you ;). While the difficulty between the exams varies a lot, they are much more challenging than badges as you have limited time (1-2 hours) to pass them and cannot use any resources other than your head. For me, having a certification proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there."]}),"\n",(0,r.jsx)(t.h3,{id:"salesforce-accreditations",children:"Salesforce Accreditations"}),"\n",(0,r.jsxs)(t.p,{children:["Finally, there are ",(0,r.jsx)(t.a,{href:"https://partners.salesforce.com/pdx/s/learn/article/accredited-professional-MCBQXAKQTOTZCQHOXTMK33NUMLWY?language=en_US",children:"Professional Accreditations"})," available only for Salesforce Partners - companies responsible for implementing, supporting and enriching Salesforce solutions for SF customers. Professional Accreditations are very similar to Salesforce Certifications - they are paid, require passing an exam, and have a learning path built with Trailhead modules. There are some differences, however. On top of publicly available modules, they have some Partner-only knowledge sources (in some cases - hands-on exercises). Additionally, they cover more niche topics that aren't part of the standard Salesforce Certifications. For me, accreditation proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there."]}),"\n",(0,r.jsx)(t.p,{children:"To sum up - my growing order of confidence in a person's skills based on just credentials looks like this:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Badge"}),"\n",(0,r.jsx)(t.li,{children:"Associate Certification"}),"\n",(0,r.jsx)(t.li,{children:"Superbadge"}),"\n",(0,r.jsx)(t.li,{children:"Salesforce Non-Architect Certification and Professional Accreditation"}),"\n",(0,r.jsx)(t.li,{children:"Salesforce Architect Certification"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Does it mean someone with just badges is a worse expert than someone with 5 certificates? Not necessarily - there are knowledge titans that don't have (many or any) certifications for various reasons but know the tools better than Salesforce. Real-world project experience and expertise are best. So why bother paying for certs?"}),"\n",(0,r.jsx)(t.h2,{id:"why-get-salesforce-certified",children:"Why get Salesforce certified?"}),"\n",(0,r.jsx)(t.p,{children:"Badges, Superbadges and actual project experience are enough to be a top expert. There is no need to pay for certification to be an outstanding Trailblazer. Still, there are significant benefits to pursuing official credentials:"}),"\n",(0,r.jsx)(t.h3,{id:"you-will-be-seen-by-recruiters",children:"You will be seen by recruiters"}),"\n",(0,r.jsx)(t.p,{children:"Certifications are a great tool to stand out to recruiters. They are easy to understand and show in search, making them the perfect tool to put their foot in the door."}),"\n",(0,r.jsx)(t.p,{children:"To better understand that, let's break down the recruitment process into three key steps (yeah, I simplify it a lot):"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Create a pool of candidates - quick search (on LinkedIn, career platforms, received CVs) for potential candidates using keyword matches. It can be manual; it can be automated with AI. Here, your previous role names and certifications play the leading role."}),"\n",(0,r.jsx)(t.li,{children:"Select the most interesting candidates - a deeper dive into the profile to limit the pool from the previous step to the best matches. Your past jobs and task descriptions shine here as they showcase what you are doing. Certifications can give you an edge here as proof of knowledge - especially for Salesforce Partner companies."}),"\n",(0,r.jsx)(t.li,{children:"Interview the top candidates - after two previous rounds, it's time to talk. At this step, certifications are no longer critical, and the key is your communication, self-presentation skills, and real platform experience."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"As you can see, certificates won't guarantee a job, but they will give you much more visibility and increase your chance of being picked up. This is especially true for higher positions where credentials are frequently optional or even mandatory requirements."}),"\n",(0,r.jsx)(t.h3,{id:"you-will-have-an-argument-for-a-rise",children:"You will have an argument for a rise"}),"\n",(0,r.jsxs)(t.p,{children:["Certification is also an excellent argument for getting a rise. It is easy proof of getting better than before and a reason for you being worth more on the market (as ",(0,r.jsx)(t.a,{href:"#you-will-be-seen-by-recruiters",children:"recruiters will see you easier"}),")."]}),"\n",(0,r.jsx)(t.p,{children:"It is especially true when you work for a Salesforce Partner - for them, the certs are much more critical because both Salesforce and potential clients check them when looking for a project partner."}),"\n",(0,r.jsx)(t.h3,{id:"you-will-validate-your-knowledge",children:"You will validate your knowledge"}),"\n",(0,r.jsx)(t.p,{children:"Certifications are a nice tool to validate your knowledge, especially if you have been working on a tool for a long time. Salesforce platforms change a lot over time, and while the old ways might still work for some time, there might be new, better methods. Additionally, you may not be aware of everything available with how broad the Salesforce capabilities are."}),"\n",(0,r.jsx)(t.p,{children:"Preparing for and passing a certification exam is a great way to validate you know the current basics for a given role and - with obligatory ongoing credential maintenance - that you stay on top of changes."}),"\n",(0,r.jsx)(t.h3,{id:"you-will-be-motivated-to-expand-your-knowledge",children:"You will be motivated to expand your knowledge"}),"\n",(0,r.jsx)(t.p,{children:"Certifications are also great tools when you want to learn something new. Salesforce prepares dedicated Trailmixes on Trailhead that group relevant badges for a certification area. Thanks to certifications, there are also a lot of additional materials supporting your learning created by companies like Focus on Force or other Trailblazers on their blogs and videos."}),"\n",(0,r.jsx)(t.p,{children:"After all this learning, getting certified is a neat way to validate your work and gain confidence in your baseline knowledge."}),"\n",(0,r.jsx)(t.p,{children:"Certification sum up - not needed, but worthwhile. So, how can you get Salesforce Certified without ruining the budget?"}),"\n",(0,r.jsx)(t.h2,{id:"how-to-get-salesforce-certified-for-free",children:"How to get Salesforce Certified for free?"}),"\n",(0,r.jsx)(t.p,{children:"Salesforce certification is costly, and paying for it out of pocket creates a significant dent in the budget, especially with static worldwide pricing that doesn't consider the difference in purchasing power between countries."}),"\n",(0,r.jsx)(t.p,{children:"There are, however, some options to spend less or even nothing to get a chance to pass the credential exam."}),"\n",(0,r.jsx)(t.h3,{id:"vouchers-from-your-company",children:"Vouchers from your company"}),"\n",(0,r.jsx)(t.p,{children:"This is probably not the answer you are looking for, but the easiest way to get the voucher might be to get it from your company. However, a lot will depend on the company you work for."}),"\n",(0,r.jsx)(t.p,{children:"It is easy if you work for Salesforce Partner. Not only are they getting vouchers as a part of the Partner program, but they also have a discount on buying more for their employees. Additionally, they want their employees to be certified, giving them a better chance to score a new project. Salesforce and potential clients look for project partner certifications on company-wide and specific consultant levels."}),"\n",(0,r.jsxs)(t.p,{children:["It is much more challenging if you work as an in-house. Many companies don't want to fund exam vouchers to their in-house employees because they don't see the added value for their day-to-day work and fear the ",(0,r.jsx)(t.a,{href:"#you-will-be-seen-by-recruiters",children:"recruitment"}),"/",(0,r.jsx)(t.a,{href:"#you-will-have-an-argument-for-a-rise",children:"rise"})," benefits of getting certified. If this is the case, try to show the ",(0,r.jsx)(t.a,{href:"#you-will-validate-your-knowledge",children:"knowledge maintenance"})," and ",(0,r.jsx)(t.a,{href:"#you-will-be-motivated-to-expand-your-knowledge",children:"upskilling"})," benefits and tie them to your KPIs. Another option to get a voucher might be to propose it as a fallback benefit if a rise is unavailable in a given evaluation period. If this also doesn't work, it's time to look for other potential sources (or a new employer)."]}),"\n",(0,r.jsx)(t.h3,{id:"vouchers-for-partner-community",children:"Vouchers for Partner Community"}),"\n",(0,r.jsx)(t.p,{children:"Another great source of vouchers is limited to employees of Salesforce Partners. Apart from getting those vouchers from their company, there are recurring opportunities given directly from Salesforce for certifications that are currently in their focus. The best place to look for them is to join Partner Community channels for specific products and check the description and recent posts for goodies."}),"\n",(0,r.jsx)(n.z,{link:"https://partners.salesforce.com/_ui/core/chatter/ui/ChatterPage",text:"Partner Community",newTab:"true"}),"\n",(0,r.jsx)(t.h3,{id:"vouchers-from-salesforce",children:"Vouchers from Salesforce"}),"\n",(0,r.jsx)(t.p,{children:"In the past, Salesforce frequently publicly shared vouchers that at least cut down the price and sometimes even allowed for free exam attempts. For example, in the first half of 2023, a $100 off voucher made Salesforce Associate certification completely free. However, since then, those vouchers have become extremely scarce, and the few still appearing are much less beneficial. My favourite place to check which (if any) public vouchers are currently available is to visit the always-updated page by Dinesh Yadav:"}),"\n",(0,r.jsx)(n.z,{link:"https://dineshyadav.com/how-to-get-free-or-discounted-salesforce-certification-voucher/",text:"Dinesh's Voucher Tracker",newTab:"true"}),"\n",(0,r.jsx)(t.h3,{id:"vouchers-from-trailhead-quest",children:"Vouchers from Trailhead Quest"}),"\n",(0,r.jsxs)(t.p,{children:["Outside of publicly shared vouchers, Salesforce also offers ",(0,r.jsx)(t.a,{href:"https://trailhead.salesforce.com/quests",children:"Trailhead Quests"})," that, for doing some task, give you a chance to get a goodie. There are multiple options, with the prizes varying from the time-limited badge through a mystery box up to the topic of this article - a certification voucher. Keep checking this page occasionally, as the list changes regularly."]}),"\n",(0,r.jsx)(n.z,{link:"https://trailhead.salesforce.com/quests#thquests-dreamquest",text:"Trailhead Quests",newTab:"true"}),"\n",(0,r.jsx)(t.h3,{id:"vouchers-from-meetups",children:"Vouchers from Meetups"}),"\n",(0,r.jsx)(t.p,{children:"Trailblazer Community Group Leaders and offline meetup organisers can sometimes get vouchers from Salesforce for quiz/raffle purposes. Check events happening close to you, broaden your knowledge and get a chance to win a voucher for a free exam."}),"\n",(0,r.jsx)(n.z,{link:"https://trailblazercommunitygroups.com/events/",text:"Trailblazer Community Groups events",newTab:"true"}),"\n",(0,r.jsx)(t.h3,{id:"vouchers-from-salesforce-special-programs",children:"Vouchers from Salesforce special programs"}),"\n",(0,r.jsx)(t.p,{children:"There are also various opportunities to get free exams by supporting Salesforce with your work."}),"\n",(0,r.jsxs)(t.p,{children:["One example of such a program (rare but relatively accessible) is helping Salesforce create or test new certifications. With this option, you will need to provide feedback on the exam questions, certification scope and prep materials. It will let you attempt the certification for free long before it is publicly available. The best way to look for such opportunities is to follow the Salesforce Credentials Development team on LinkedIn or Trailblazer Community and patiently wait for a ",(0,r.jsx)(t.a,{href:"https://www.linkedin.com/posts/melaniewachs76_salesforce-entry-level-ai-data-crm-certification-activity-7069787255019614208-yNkI",children:"post inviting to a new certification project"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"asking-people-for-vouchers",children:"Asking people for vouchers"}),"\n",(0,r.jsx)(t.p,{children:"Please don't."}),"\n",(0,r.jsx)(t.p,{children:"Think about why that random person should give you a voucher:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"If they get them from their company - the company will check whether they used them for certification."}),"\n",(0,r.jsx)(t.li,{children:"If they get them from Partner Community - those are limited to Partners employees. If you are one, you can get it yourself. If you are not - you won't be eligible to receive it."}),"\n",(0,r.jsx)(t.li,{children:"If they get them from publicly available vouchers - you can also get them from the same source."}),"\n",(0,r.jsx)(t.li,{children:"If they get them from Trailhead Quest or a meetup raffle - they participated because they wanted it for themselves so they won't be giving it away."}),"\n",(0,r.jsx)(t.li,{children:"If they get them from Salesforce programs - they are named vouchers that no one else can use."}),"\n",(0,r.jsx)(t.li,{children:"If they bought them from their pocket - why would they want to give those hundred dollars away?"}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Instead of asking others about their vouchers, try the methods above to get your own."}),"\n",(0,r.jsx)(t.h2,{id:"sum-up",children:"Sum Up"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Salesforce Certifications are not needed but worthwhile."}),"\n",(0,r.jsx)(t.li,{children:"There are multiple ways to try getting certified for free, but if you want to go on an exam-passing spree, your best bet is to work for Salesforce Partner (or Salesforce themselves)."}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}},7271:(e,t,o)=>{o.d(t,{V:()=>i,z:()=>a});o(7294);var r=o(5893);const a=e=>{let{link:t,text:o,newTab:a=!1}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:a?"_blank":"_self",children:o})})},i=e=>{let{linkLeft:t,textLeft:o,newTabLeft:a=!1,linkRight:i,textRight:n,newTabRight:s=!1}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsxs)("div",{class:"col col--12",children:[(0,r.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:a?"_blank":"_self",children:o}),(0,r.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:i,target:s?"_blank":"_self",children:n})]})})}},1872:(e,t,o)=>{o.d(t,{m:()=>i});o(7294);const r="leadText_qzwo";var a=o(5893);const i=e=>{let{content:t}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("p",{id:r,children:t})})}},1151:(e,t,o)=>{o.d(t,{Z:()=>s,a:()=>n});var r=o(7294);const a={},i=r.createContext(a);function n(e){const t=r.useContext(i);return r.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(a):e.components||a:n(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1be78505.6fd0c9a9.js b/assets/js/1be78505.6fd0c9a9.js deleted file mode 100644 index dacdbc6de..000000000 --- a/assets/js/1be78505.6fd0c9a9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9514,4248],{1299:(e,t,n)=>{n.r(t),n.d(t,{default:()=>fe});var a=n(7294),l=n(6010),o=n(9488),r=n(3702),c=n(246),i=n(8259),s=n(8801),d=n(4432),m=n(241),u=n(7325),b=n(2957),p=n(3266);const h={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(o.current?o.current=!1:a>=r?(c(),l(!1)):a<t?l(!1):a+window.innerHeight<document.documentElement.scrollHeight&&l(!0))})),(0,p.S)((e=>{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var g=n(8986),f=n(6550),k=n(3488),v=n(107),_=n(6811),C=n(7462);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function N(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",I.collapseSidebarButton),onClick:t},a.createElement(S,{className:I.collapseSidebarButtonIcon}))}var T=n(5830),Z=n(3768);const x=Symbol("EmptyContext"),B=a.createContext(x);function y(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(B.Provider,{value:o},t)}var w=n(4639),L=n(9003),A=n(3699),M=n(1048);function F(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,v.L)(),g=function(e){const t=(0,M.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),f=(0,i._F)(t,o),k=(0,L.Mg)(h,o),{collapsed:_,setCollapsed:S}=(0,w.u)({initialState:()=>!!b&&(!f&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(B);if(e===x)throw new Z.i6("DocSidebarItemsExpandedStateProvider");return e}(),T=function(e){void 0===e&&(e=!_),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,Z.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:f,collapsed:_,updateCollapsed:T}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":k})},a.createElement(A.Z,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":f}),onClick:b?e=>{n?.(t),h?T(!1):(e.preventDefault(),T())}:()=>{n?.(t)},"aria-current":k?"page":void 0,"aria-expanded":b?!_:void 0,href:b?g??"#":g},d),u),h&&b&&a.createElement(F,{categoryLabel:u,onClick:e=>{e.preventDefault(),T()}})),a.createElement(w.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(j,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:o,level:c+1})))}var P=n(2735),W=n(4082);const D={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,o),E=(0,P.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(A.Z,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&D.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.Z,null)))}const V={menuHtmlItem:"menuHtmlItem_M9Kj"};function U(e){let{item:t,level:n,index:o}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[V.menuHtmlItem,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:c}})}function z(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(U,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function K(e){let{items:t,...n}=e;return a.createElement(y,null,t.map(((e,t)=>a.createElement(z,(0,C.Z)({key:t,item:e,index:t},n)))))}const j=(0,a.memo)(K),G={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function Y(e){let{path:t,sidebar:n,className:o}=e;const c=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,l.Z)("menu thin-scrollbar",G.menu,c&&G.menuWithAnnouncementBar,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:n,activePath:t,level:1})))}const q="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",X="sidebarHidden_VK0M",J="sidebarLogo_isFc";function Q(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,v.L)();return a.createElement("div",{className:(0,l.Z)(q,c&&O,r&&X)},c&&a.createElement(_.Z,{tabIndex:-1,className:J}),a.createElement(Y,{path:t,sidebar:n}),i&&a.createElement(N,{onClick:o}))}const $=a.memo(Q);var ee=n(3086),te=n(735);const ne=e=>{let{sidebar:t,path:n}=e;const o=(0,te.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function ae(e){return a.createElement(ee.Zo,{component:ne,props:e})}const le=a.memo(ae);function oe(e){const t=(0,k.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement($,e),l&&a.createElement(le,e))}const re={expandButton:"expandButton_m80_",expandButtonIcon:"expandButtonIcon_BlDH"};function ce(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:re.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:re.expandButtonIcon}))}const ie={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function se(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function de(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:c}=(0,f.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),!i&&(0,g.n)()&&s(!0),o((e=>!e))}),[o,i]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&s(!0)}},a.createElement(se,null,a.createElement("div",{className:(0,l.Z)(ie.sidebarViewport,i&&ie.sidebarViewportHidden)},a.createElement(oe,{sidebar:t,path:c,onCollapse:d,isHidden:i}),i&&a.createElement(ce,{toggleSidebar:d}))))}const me={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(me.docMainContainer,(t||!o)&&me.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",me.docItemWrapper,t&&me.docItemWrapperEnhanced)},n))}const be={docPage:"docPage__5DB",docsWrapper:"docsWrapper_BCFX","themedComponent--light":"themedComponent--light_NU7w"};function pe(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:be.docsWrapper},a.createElement(E,null),a.createElement("div",{className:be.docPage},n&&a.createElement(de,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(ue,{hiddenSidebarContainer:l},t)))}var he=n(4248),Ee=n(3647);function ge(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(Ee.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function fe(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(he.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(ge,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(pe,null,c)))))}},4248:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),l=n(7325),o=n(9488),r=n(241);function c(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/js/2005.fab1d5ca.js b/assets/js/2005.fab1d5ca.js new file mode 100644 index 000000000..5887ed9dd --- /dev/null +++ b/assets/js/2005.fab1d5ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2005],{2005:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(6365),a=r(5625),n=r(4218),s=r(1644);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<<e|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<t.length;++r)e.push(t.charCodeAt(r));return e}(t)),"string"==typeof i&&(i=d(i)),16!==(null===(s=i)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(i),o.set(t,i.length),o=r(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,a){n=n||0;for(let t=0;t<16;++t)a[n+t]=o[t];return a}return c(o)}try{i.name=t}catch(a){}return i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",i}("v5",80,(function(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const i=t.length/4+2,a=Math.ceil(i/16),n=new Array(a);for(let s=0;s<a;++s){const e=new Uint32Array(16);for(let r=0;r<16;++r)e[r]=t[64*s+4*r]<<24|t[64*s+4*r+1]<<16|t[64*s+4*r+2]<<8|t[64*s+4*r+3];n[s]=e}n[a-1][14]=8*(t.length-1)/Math.pow(2,32),n[a-1][14]=Math.floor(n[a-1][14]),n[a-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<a;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=n[s][e];for(let e=16;e<80;++e)t[e]=u(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let i=r[0],a=r[1],o=r[2],c=r[3],l=r[4];for(let r=0;r<80;++r){const n=Math.floor(r/20),s=u(i,5)+y(n,a,o,c)+l+e[n]+t[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(7484),r(7967),r(7856);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;n<a.length;n++)if((r=this._input.match(this.rules[a[n]]))&&(!e||r[0].length>e[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.t)()},setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,setDiagramTitle:i.q,getDiagramTitle:i.r},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.v)(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.Ys)("#i"+e));const h=("sandbox"===c?(0,n.Ys)(l.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id='${e}']`);let d;R(h,T),d=new a.k({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.bK)(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.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),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/20e039ae.9ce9760a.js b/assets/js/20e039ae.9ce9760a.js new file mode 100644 index 000000000..fc92d2f40 --- /dev/null +++ b/assets/js/20e039ae.9ce9760a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1872],{300:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=n(5893),a=n(1151),i=n(1872);const r={id:"sfmc-sql-from",title:"SFMC SQL From",sidebar_label:"From",description:"Tell the SQL query FROM where you need the data.",image:"img/og/og-image-sql-from.png",tags:["Marketing Cloud","SQL"]},o=void 0,l={id:"sql/sfmc-sql-from",title:"SFMC SQL From",description:"Tell the SQL query FROM where you need the data.",source:"@site/docs/sql/sfmc-sql-from.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-from",permalink:"/docs/sql/sfmc-sql-from",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-from.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-from",title:"SFMC SQL From",sidebar_label:"From",description:"Tell the SQL query FROM where you need the data.",image:"img/og/og-image-sql-from.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Select",permalink:"/docs/sql/sfmc-sql-select"},next:{title:"Join",permalink:"/docs/sql/sfmc-sql-join"}},d={},c=[{value:"Basic FROM",id:"basic-from",level:2},{value:"System Data Views",id:"system-data-views",level:2},{value:"Enterprise Data Extension",id:"enterprise-data-extension",level:2},{value:"Enterprise System Data Views",id:"enterprise-system-data-views",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.m,{content:"Tell the SQL query FROM where you need the data"}),"\n",(0,s.jsx)(t.h2,{id:"basic-from",children:"Basic FROM"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-select",children:(0,s.jsx)(t.code,{children:"SELECT"})})," statement alone won't do much. In most cases, once you have selected data you want to work with, you also need to pick the table (Data Extension or System Data View) ",(0,s.jsx)(t.code,{children:"FROM"})," which the query will take the required columns. The code for this is simple:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'{4} title="Get ContactKey and EmailAddress from Data Extension named MasterSubscriberDE"',children:"SELECT\n ContactKey\n , EmailAddress\nFROM MasterSubscriberDE\n"})}),"\n",(0,s.jsx)(t.p,{children:"Just as with column names, if the name of your Data Extension has spaces or hyphens in it, be sure to enclose it in brackets."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{4}",children:"SELECT\n ContactKey\n , EmailAddress\nFROM [Master-Subscriber DE]\n"})}),"\n",(0,s.jsx)(t.p,{children:"There are, however, two cases specific to Salesforce Marketing Cloud that adds a twist. System Data Views and Enterprise Data Extensions."}),"\n",(0,s.jsx)(t.h2,{id:"system-data-views",children:"System Data Views"}),"\n",(0,s.jsxs)(t.p,{children:["Salesforce Marketing Cloud is partially hiding the ",(0,s.jsx)(t.a,{href:"/docs/config/sfmc-system-data-views",children:"System Data Views"})," Data Extensions that store tracking data. Think about Email Sent history, Opens and Clicks, Bounces and Complaints. You can find there the tracking data for SMS and Social channels. Also, more technical data points, like Jobs and Enterprise Attributes, are available in the System Data Views. You won't find them in the User Interface but can query them with the SQL. The difference related to those tables is in naming convention. When querying them, you must leverage ",(0,s.jsx)(t.code,{children:"_"})," prefix:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{8}",children:"SELECT\n JobID\n , EmailID\n , EmailName\n , EmailSubject\n , EmailSendDefinition\n , DeliveredTime\nFROM _Job\n"})}),"\n",(0,s.jsx)(t.h2,{id:"enterprise-data-extension",children:"Enterprise Data Extension"}),"\n",(0,s.jsxs)(t.p,{children:["Here the approach changes depending on where you run your Query. Shared Data Extensions and Synchronized Data Extensions are considered Enterprise and located on the Parent Business Unit level. It means that when you want to query them from the Parent, you need to write it the same way as for ",(0,s.jsx)(t.a,{href:"#Basic-from",children:"standard Data Extensions"}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{4}",children:"SELECT\n ContactKey\n , EmailAddress\nFROM SharedDataExtension\n"})}),"\n",(0,s.jsxs)(t.p,{children:["However, if you want to query them from the child Business Unit level, you will have to use a unique prefix - ",(0,s.jsx)(t.code,{children:"Ent."}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{4}",children:"SELECT\n ContactKey\n , EmailAddress\nFROM Ent.SharedDataExtension\n"})}),"\n",(0,s.jsxs)(t.p,{children:["The same is true for Synchronized Data Extensions. If you want to pull data from a child Business Unit, you will need the ",(0,s.jsx)(t.code,{children:"Ent."})," prefix:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{4}",children:"SELECT\n Id AS SubscriberKey\n , Email AS EmailAddress\nFROM Ent.Contact_Salesforce\n"})}),"\n",(0,s.jsx)(t.p,{children:"Remember that account permissions restrictions may apply."}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsx)(t.p,{children:"In the past, the opposite was also available. You could query Data Extension located on child Business Unit from the Parent. To do this, you had to use the MID of the child BU (visible next to BU name on the Business Unit selection drop down) as a prefix:"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'{4} title="On Parent BU query DataExtensionOnChildBU from Child BU with MID 5123456"',children:"SELECT\n ContactKey\n , EmailAddress\nFROM 5123456.DataExtensionOnChildBU\n"})}),(0,s.jsxs)(t.p,{children:["Since 2020, trying to do so will result in an error: ",(0,s.jsx)(t.code,{children:"An error occurred while checking the query syntax. Errors: The 123456.DataExtensionOnChildBU table has a multi-part specification. This is not allowed."})," The workaround is to use Shared Data Extensions."]}),(0,s.jsx)(t.p,{children:"Marketing Cloud legend says that there are still some instances that support this legacy type of querying. You might try it, but even if you are the lucky one, I would recommend using the Shared Data Extensions to worry not about unexpected Automation errors in the future."})]}),"\n",(0,s.jsx)(t.h2,{id:"enterprise-system-data-views",children:"Enterprise System Data Views"}),"\n",(0,s.jsxs)(t.p,{children:["Using ",(0,s.jsx)(t.a,{href:"#enterprise-data-extension",children:(0,s.jsx)(t.code,{children:"Ent."})})," prefix on a System Data View might give you different results."]}),"\n",(0,s.jsx)(t.p,{children:"For example, if you query _Subscribers on child Business Unit, you will receive data only for the subscribers stored in this child BU."}),"\n",(0,s.jsxs)(t.p,{children:["By adding the ",(0,s.jsx)(t.code,{children:"Ent."})," prefix, however, you can query all your subscribers on the Parent BU:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{6}",children:"SELECT\n SubscriberKey\n , EmailAddress\n , DateJoined\n , DateUnsubscribed\nFROM Ent._Subscribers\n"})}),"\n",(0,s.jsx)(t.p,{children:"When selecting Data Extensions to pull data from, remember the best practice to avoid ones spanning a cumulative field width greater than 4000 characters. They will badly impact the performance of your query. If needed, consider splitting your query into multiple consecutive queries."})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>i});n(7294);const s="leadText_qzwo";var a=n(5893);const i=e=>{let{content:t}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("p",{id:s,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>r});var s=n(7294);const a={},i=s.createContext(a);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/20e039ae.d0481e11.js b/assets/js/20e039ae.d0481e11.js deleted file mode 100644 index d649cef68..000000000 --- a/assets/js/20e039ae.d0481e11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1872],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)n=s[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=c(n),p=r,h=m["".concat(l,".").concat(p)]||m[p]||u[p]||s;return n?a.createElement(h,i(i({ref:t},d),{},{components:n})):a.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=n.length,i=new Array(s);i[0]=p;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[m]="string"==typeof e?e:r,i[1]=o;for(var c=2;c<s;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>s});var a=n(7294);const r="leadText_qzwo",s=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}},5209:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=n(7462),r=(n(7294),n(4137)),s=n(1872);const i={id:"sfmc-sql-from",title:"SFMC SQL From",sidebar_label:"From",description:"Tell the SQL query FROM where you need the data.",image:"img/og/og-image-sql-from.png",tags:["Marketing Cloud","SQL"]},o=void 0,l={unversionedId:"sql/sfmc-sql-from",id:"sql/sfmc-sql-from",title:"SFMC SQL From",description:"Tell the SQL query FROM where you need the data.",source:"@site/docs/sql/sfmc-sql-from.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-from",permalink:"/docs/sql/sfmc-sql-from",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-from.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-from",title:"SFMC SQL From",sidebar_label:"From",description:"Tell the SQL query FROM where you need the data.",image:"img/og/og-image-sql-from.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Select",permalink:"/docs/sql/sfmc-sql-select"},next:{title:"Join",permalink:"/docs/sql/sfmc-sql-join"}},c={},d=[{value:"Basic FROM",id:"basic-from",level:2},{value:"System Data Views",id:"system-data-views",level:2},{value:"Enterprise Data Extension",id:"enterprise-data-extension",level:2},{value:"Enterprise System Data Views",id:"enterprise-system-data-views",level:2}],m={toc:d},u="wrapper";function p(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(s.m,{content:"Tell the SQL query FROM where you need the data",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"basic-from"},"Basic FROM"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT"))," statement alone won't do much. In most cases, once you have selected data you want to work with, you also need to pick the table (Data Extension or System Data View) ",(0,r.kt)("inlineCode",{parentName:"p"},"FROM")," which the query will take the required columns. The code for this is simple:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Get ContactKey and EmailAddress from Data Extension named MasterSubscriberDE"',"{4}":!0,title:'"Get',ContactKey:!0,and:!0,EmailAddress:!0,from:!0,Data:!0,Extension:!0,named:!0,'MasterSubscriberDE"':!0},"SELECT\n ContactKey\n , EmailAddress\nFROM MasterSubscriberDE\n")),(0,r.kt)("p",null,"Just as with column names, if the name of your Data Extension has spaces or hyphens in it, be sure to enclose it in brackets."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4}","{4}":!0},"SELECT\n ContactKey\n , EmailAddress\nFROM [Master-Subscriber DE]\n")),(0,r.kt)("p",null,"There are, however, two cases specific to Salesforce Marketing Cloud that adds a twist. System Data Views and Enterprise Data Extensions."),(0,r.kt)("h2",{id:"system-data-views"},"System Data Views"),(0,r.kt)("p",null,"Salesforce Marketing Cloud is partially hiding the ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views"},"System Data Views")," Data Extensions that store tracking data. Think about Email Sent history, Opens and Clicks, Bounces and Complaints. You can find there the tracking data for SMS and Social channels. Also, more technical data points, like Jobs and Enterprise Attributes, are available in the System Data Views. You won't find them in the User Interface but can query them with the SQL. The difference related to those tables is in naming convention. When querying them, you must leverage ",(0,r.kt)("inlineCode",{parentName:"p"},"_")," prefix:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{8}","{8}":!0},"SELECT\n JobID\n , EmailID\n , EmailName\n , EmailSubject\n , EmailSendDefinition\n , DeliveredTime\nFROM _Job\n")),(0,r.kt)("h2",{id:"enterprise-data-extension"},"Enterprise Data Extension"),(0,r.kt)("p",null,"Here the approach changes depending on where you run your Query. Shared Data Extensions and Synchronized Data Extensions are considered Enterprise and located on the Parent Business Unit level. It means that when you want to query them from the Parent, you need to write it the same way as for ",(0,r.kt)("a",{parentName:"p",href:"#Basic-from"},"standard Data Extensions"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4}","{4}":!0},"SELECT\n ContactKey\n , EmailAddress\nFROM SharedDataExtension\n")),(0,r.kt)("p",null,"However, if you want to query them from the child Business Unit level, you will have to use a unique prefix - ",(0,r.kt)("inlineCode",{parentName:"p"},"Ent."),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4}","{4}":!0},"SELECT\n ContactKey\n , EmailAddress\nFROM Ent.SharedDataExtension\n")),(0,r.kt)("p",null,"The same is true for Synchronized Data Extensions. If you want to pull data from a child Business Unit, you will need the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ent.")," prefix:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4}","{4}":!0},"SELECT\n Id AS SubscriberKey\n , Email AS EmailAddress\nFROM Ent.Contact_Salesforce\n")),(0,r.kt)("p",null,"Remember that account permissions restrictions may apply."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"In the past, the opposite was also available. You could query Data Extension located on child Business Unit from the Parent. To do this, you had to use the MID of the child BU (visible next to BU name on the Business Unit selection drop down) as a prefix:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="On Parent BU query DataExtensionOnChildBU from Child BU with MID 5123456"',"{4}":!0,title:'"On',Parent:!0,BU:!0,query:!0,DataExtensionOnChildBU:!0,from:!0,Child:!0,with:!0,MID:!0,'5123456"':!0},"SELECT\n ContactKey\n , EmailAddress\nFROM 5123456.DataExtensionOnChildBU\n")),(0,r.kt)("p",{parentName:"admonition"},"Since 2020, trying to do so will result in an error: ",(0,r.kt)("inlineCode",{parentName:"p"},"An error occurred while checking the query syntax. Errors: The 123456.DataExtensionOnChildBU table has a multi-part specification. This is not allowed.")," The workaround is to use Shared Data Extensions."),(0,r.kt)("p",{parentName:"admonition"},"Marketing Cloud legend says that there are still some instances that support this legacy type of querying. You might try it, but even if you are the lucky one, I would recommend using the Shared Data Extensions to worry not about unexpected Automation errors in the future.")),(0,r.kt)("h2",{id:"enterprise-system-data-views"},"Enterprise System Data Views"),(0,r.kt)("p",null,"Using ",(0,r.kt)("a",{parentName:"p",href:"#enterprise-data-extension"},(0,r.kt)("inlineCode",{parentName:"a"},"Ent."))," prefix on a System Data View might give you different results."),(0,r.kt)("p",null,"For example, if you query _Subscribers on child Business Unit, you will receive data only for the subscribers stored in this child BU."),(0,r.kt)("p",null,"By adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"Ent.")," prefix, however, you can query all your subscribers on the Parent BU:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6}","{6}":!0},"SELECT\n SubscriberKey\n , EmailAddress\n , DateJoined\n , DateUnsubscribed\nFROM Ent._Subscribers\n")),(0,r.kt)("p",null,"When selecting Data Extensions to pull data from, remember the best practice to avoid ones spanning a cumulative field width greater than 4000 characters. They will badly impact the performance of your query. If needed, consider splitting your query into multiple consecutive queries."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/22145d1a.0a2eb044.js b/assets/js/22145d1a.0a2eb044.js new file mode 100644 index 000000000..506384bf8 --- /dev/null +++ b/assets/js/22145d1a.0a2eb044.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3207],{5576:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=o(5893),t=o(1151),s=o(1872);const r={id:"ssjs-loops",title:"SSJS Loops",sidebar_label:"Loops",description:"Let's dive into limited looping options of the SSJS.",image:"img/og/og-image-ssjs-loops.png",tags:["Marketing Cloud","SSJS"]},l=void 0,a={id:"ssjs/ssjs-loops",title:"SSJS Loops",description:"Let's dive into limited looping options of the SSJS.",source:"@site/docs/ssjs/ssjs-loops.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-loops",permalink:"/docs/ssjs/ssjs-loops",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-loops.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1632606565,formattedLastUpdatedAt:"Sep 25, 2021",frontMatter:{id:"ssjs-loops",title:"SSJS Loops",sidebar_label:"Loops",description:"Let's dive into limited looping options of the SSJS.",image:"img/og/og-image-ssjs-loops.png",tags:["Marketing Cloud","SSJS"]},sidebar:"docs",previous:{title:"If & Switch",permalink:"/docs/ssjs/ssjs-if-and-switch"},next:{title:"Debugging & Error Handling",permalink:"/docs/ssjs/debugging-ssjs"}},c={},d=[{value:"For Loops",id:"for-loops",level:2},{value:"For",id:"for",level:3},{value:"For in",id:"for-in",level:3},{value:"While Loops",id:"while-loops",level:2},{value:"While",id:"while",level:3},{value:"Do While",id:"do-while",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.m,{content:"Let's dive into limited looping options of the SSJS."}),"\n",(0,i.jsxs)(n.p,{children:["Working with arrays and objects is one of the selling points of SSJS vs AMPScript. And the primary way to utilize those structures is to loop over them. While SSJS doesn't have all the magic of the modern JavaScript, it still has much more to offer than single ",(0,i.jsx)(n.code,{children:"FOR"})," available in AMPScript."]}),"\n",(0,i.jsx)(n.h2,{id:"for-loops",children:"For Loops"}),"\n",(0,i.jsx)(n.h3,{id:"for",children:"For"}),"\n",(0,i.jsxs)(n.p,{children:["The classic ",(0,i.jsx)(n.code,{children:"for"})," loop might be a bit long to write, but it has a lot of excellent properties:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Works with ",(0,i.jsx)(n.code,{children:"break"})," and ",(0,i.jsx)(n.code,{children:"continue"})," statements for better looping control."]}),"\n",(0,i.jsx)(n.li,{children:"Both initial and increment expressions can do multiple things (examples available below)."}),"\n",(0,i.jsx)(n.li,{children:"Condition is not limited to iterable length (although it is the most popular way)."}),"\n",(0,i.jsx)(n.li,{children:"Fast across various scenarios."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'{1} title="Example of for loop iterating over an array"',children:"for (var i = 0; i < array.length; i++) {\n Write(i); // Returns the current iteration\n Write(array[i] + '<br/><br/>'); // Returns the value of current element\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Let's break the script down to five steps each ",(0,i.jsx)(n.code,{children:"for"})," loop follows:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Execute initial expression (",(0,i.jsx)(n.code,{children:"var i = 0"})," in the above example)."]}),"\n",(0,i.jsxs)(n.li,{children:["Evaluate the condition (",(0,i.jsx)(n.code,{children:"i < array.length"}),"). If it is false - the loop terminates. If true:"]}),"\n",(0,i.jsxs)(n.li,{children:["The statement within the loop is executed (",(0,i.jsx)(n.code,{children:"Write(array[i])"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:["Finally, the increment expression will evaluate (",(0,i.jsx)(n.code,{children:"i++"}),")."]}),"\n",(0,i.jsx)(n.li,{children:"The loop goes back to step 2 until it is false."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"To optimize speed, cache the length used for condition. By assigning it to a variable in initial expression, the loop won't have to calculate the length on each iteration."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'{1} title="Initial expression assigns array.length to a variable to cache it"',children:"for (var i = 0, range = array.length; i < range; i++) {\n Write(i); // Returns the current iteration\n Write(array[i] + '<br/><br/>'); // Returns the value of current element\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:["You can get more logic within the ",(0,i.jsx)(n.code,{children:"for"})," declaration to, for example, have a cleaner statement within the loop:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'{1} title="Provide itemValue variable instead of just current iteration"',children:"for (var i = 0, itemValue = array[i], range = array.length; i < range; i++, itemValue = array[i]) {\n Write(itemValue + '<br/><br/>'); // Returns the value of current element\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As ES6 ",(0,i.jsx)(n.a,{href:"/docs/js/js-loops#for-of",children:"for...of"})," loop is not available in SSJS, you will use this one in most scenarios."]}),"\n",(0,i.jsx)(n.h3,{id:"for-in",children:"For in"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"for...in"})," loop in modern JavaScript is used nearly exclusively for debugging. It is because it loops not only over standard values but also over object prototype methods and properties."]}),"\n",(0,i.jsxs)(n.p,{children:["In SSJS however, the ES6 ",(0,i.jsx)(n.a,{href:"/docs/js/js-loops#for-of",children:"for...of"})," loop is not available. ",(0,i.jsx)(n.code,{children:"Object.keys()"})," or ",(0,i.jsx)(n.code,{children:"Object.entries()"})," also does not exist. This makes the ",(0,i.jsx)(n.code,{children:"for...in"})," the only solution for iterating over objects."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:"{1}",children:"for (var key in object) {\n Write(key + '<br/><br/>'); // Returns string name of the current key\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:["In simple scripts created in SSJS you shouldn't have issues with the prototype methods and properties, however, if you encounter any issues (or want to code defensively), use ",(0,i.jsx)(n.code,{children:"hasOwnProperty"})," method:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:"{2}",children:"for (var key in object) {\n if (object.hasOwnProperty(key) && key != '_type') {\n Write(key + '<br/><br/>');\n };\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Remember to use ",(0,i.jsx)(n.code,{children:"for...in"})," only for looping over objects. For any other scenario classic ",(0,i.jsx)(n.code,{children:"for"})," loop is both safer and more powerful."]}),"\n",(0,i.jsx)(n.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(n.p,{children:["If you ever use ",(0,i.jsx)(n.code,{children:"for...in"})," loop for an array, remember that the loop-counter variable will return a string instead of a number. For example ",(0,i.jsx)(n.code,{children:"'0'"})," for first array item instead of ",(0,i.jsx)(n.code,{children:"0"}),"."]})}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"while-loops",children:"While Loops"}),"\n",(0,i.jsx)(n.h3,{id:"while",children:"While"}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.code,{children:"while"})," loop executes its statement as long as the condition evaluates to true."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'{2} title="Infinite while loop"',children:"var run = true;\nwhile (run === true) {\n Write('To the infinity and beyond!');\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:["To break out of ",(0,i.jsx)(n.code,{children:"while"})," loop, there must be logic within it that will change the condition to false (or a ",(0,i.jsx)(n.code,{children:"break"})," statement):"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:"{3}",children:"var run = true;\nvar i = 0;\nwhile (run === true) {\n Write('To the infinity and beyond!');\n i++;\n if (i > 10) {\n run = false;\n };\n};\n"})}),"\n",(0,i.jsx)(n.p,{children:"or just:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'{3} title="This loop has the same outcome as the one above"',children:"var run = true;\nvar i = 0;\nwhile (i <= 10) {\n Write('To the infinity and beyond!');\n i++;\n};\n"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"while"})," loop is the best option for iterating over ",(0,i.jsx)(n.strong,{children:"big"})," arrays."]}),"\n",(0,i.jsx)(n.h3,{id:"do-while",children:"Do While"}),"\n",(0,i.jsxs)(n.p,{children:["Same as ",(0,i.jsx)(n.code,{children:"while"}),", but the code runs once before evaluating the condition."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:"{1,3}",children:"do {\n Write('Running!');\n} while (run === true);\n"})}),"\n",(0,i.jsx)(n.p,{children:"Perfect when you need to run an API call, check whether there are more pages of outcomes and act accordingly."}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:["JavaScript support labels for loops. It allows you to name each loop for even better control with both ",(0,i.jsx)(n.code,{children:"continue"})," and ",(0,i.jsx)(n.code,{children:"break"})," statements."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'{1,8} title="Labelled loop example using a nested for loops"',children:"MainLoopLabel:\nfor (var i = 0; i < array.length; i++) {\n // Logic\n SecondaryLoopLabel:\n for (var j = 0; j < array[i].length; j++) {\n // Logic\n if (array[i][j] === 'important') {\n break MainLoopLabel;\n };\n };\n};\n"})}),(0,i.jsxs)(n.p,{children:["As you can see, in the first line we added a label for the first ",(0,i.jsx)(n.code,{children:"for"})," loop. Then, in the statement within the second ",(0,i.jsx)(n.code,{children:"for"})," loop, we used ",(0,i.jsx)(n.code,{children:"break"})," followed by the label. Once executed, it will break both for loops, even if there were still iterations in the main one. The same approach works with the ",(0,i.jsx)(n.code,{children:"continue"})," statement."]})]})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,n,o)=>{o.d(n,{m:()=>s});o(7294);const i="leadText_qzwo";var t=o(5893);const s=e=>{let{content:n}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("p",{id:i,children:n})})}},1151:(e,n,o)=>{o.d(n,{Z:()=>l,a:()=>r});var i=o(7294);const t={},s=i.createContext(t);function r(e){const n=i.useContext(s);return i.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(t):e.components||t:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/22145d1a.43f6683b.js b/assets/js/22145d1a.43f6683b.js deleted file mode 100644 index 658f08f20..000000000 --- a/assets/js/22145d1a.43f6683b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3207],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,h=m["".concat(s,".").concat(d)]||m[d]||c[d]||r;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:a,i[1]=l;for(var p=2;p<r;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>r});var o=n(7294);const a="leadText_qzwo",r=e=>{let{content:t}=e;return o.createElement(o.Fragment,null,o.createElement("p",{id:a},t))}},3477:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var o=n(7462),a=(n(7294),n(4137)),r=n(1872);const i={id:"ssjs-loops",title:"SSJS Loops",sidebar_label:"Loops",description:"Let's dive into limited looping options of the SSJS.",image:"img/og/og-image-ssjs-loops.png",tags:["Marketing Cloud","SSJS"]},l=void 0,s={unversionedId:"ssjs/ssjs-loops",id:"ssjs/ssjs-loops",title:"SSJS Loops",description:"Let's dive into limited looping options of the SSJS.",source:"@site/docs/ssjs/ssjs-loops.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-loops",permalink:"/docs/ssjs/ssjs-loops",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-loops.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1632606565,formattedLastUpdatedAt:"Sep 25, 2021",frontMatter:{id:"ssjs-loops",title:"SSJS Loops",sidebar_label:"Loops",description:"Let's dive into limited looping options of the SSJS.",image:"img/og/og-image-ssjs-loops.png",tags:["Marketing Cloud","SSJS"]},sidebar:"docs",previous:{title:"If & Switch",permalink:"/docs/ssjs/ssjs-if-and-switch"},next:{title:"Debugging & Error Handling",permalink:"/docs/ssjs/debugging-ssjs"}},p={},u=[{value:"For Loops",id:"for-loops",level:2},{value:"For",id:"for",level:3},{value:"For in",id:"for-in",level:3},{value:"While Loops",id:"while-loops",level:2},{value:"While",id:"while",level:3},{value:"Do While",id:"do-while",level:3}],m={toc:u},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,o.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(r.m,{content:"Let's dive into limited looping options of the SSJS.",mdxType:"LeadText"}),(0,a.kt)("p",null,"Working with arrays and objects is one of the selling points of SSJS vs AMPScript. And the primary way to utilize those structures is to loop over them. While SSJS doesn't have all the magic of the modern JavaScript, it still has much more to offer than single ",(0,a.kt)("inlineCode",{parentName:"p"},"FOR")," available in AMPScript."),(0,a.kt)("h2",{id:"for-loops"},"For Loops"),(0,a.kt)("h3",{id:"for"},"For"),(0,a.kt)("p",null,"The classic ",(0,a.kt)("inlineCode",{parentName:"p"},"for")," loop might be a bit long to write, but it has a lot of excellent properties:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Works with ",(0,a.kt)("inlineCode",{parentName:"li"},"break")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"continue")," statements for better looping control."),(0,a.kt)("li",{parentName:"ul"},"Both initial and increment expressions can do multiple things (examples available below)."),(0,a.kt)("li",{parentName:"ul"},"Condition is not limited to iterable length (although it is the most popular way)."),(0,a.kt)("li",{parentName:"ul"},"Fast across various scenarios.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1} title="Example of for loop iterating over an array"',"{1}":!0,title:'"Example',of:!0,for:!0,loop:!0,iterating:!0,over:!0,an:!0,'array"':!0},"for (var i = 0; i < array.length; i++) {\n Write(i); // Returns the current iteration\n Write(array[i] + '<br/><br/>'); // Returns the value of current element\n};\n")),(0,a.kt)("p",null,"Let's break the script down to five steps each ",(0,a.kt)("inlineCode",{parentName:"p"},"for")," loop follows:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Execute initial expression (",(0,a.kt)("inlineCode",{parentName:"li"},"var i = 0")," in the above example)."),(0,a.kt)("li",{parentName:"ol"},"Evaluate the condition (",(0,a.kt)("inlineCode",{parentName:"li"},"i < array.length"),"). If it is false - the loop terminates. If true:"),(0,a.kt)("li",{parentName:"ol"},"The statement within the loop is executed (",(0,a.kt)("inlineCode",{parentName:"li"},"Write(array[i])"),")."),(0,a.kt)("li",{parentName:"ol"},"Finally, the increment expression will evaluate (",(0,a.kt)("inlineCode",{parentName:"li"},"i++"),")."),(0,a.kt)("li",{parentName:"ol"},"The loop goes back to step 2 until it is false.")),(0,a.kt)("p",null,"To optimize speed, cache the length used for condition. By assigning it to a variable in initial expression, the loop won't have to calculate the length on each iteration."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1} title="Initial expression assigns array.length to a variable to cache it"',"{1}":!0,title:'"Initial',expression:!0,assigns:!0,"array.length":!0,to:!0,a:!0,variable:!0,cache:!0,'it"':!0},"for (var i = 0, range = array.length; i < range; i++) {\n Write(i); // Returns the current iteration\n Write(array[i] + '<br/><br/>'); // Returns the value of current element\n};\n")),(0,a.kt)("p",null,"You can get more logic within the ",(0,a.kt)("inlineCode",{parentName:"p"},"for")," declaration to, for example, have a cleaner statement within the loop:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1} title="Provide itemValue variable instead of just current iteration"',"{1}":!0,title:'"Provide',itemValue:!0,variable:!0,instead:!0,of:!0,just:!0,current:!0,'iteration"':!0},"for (var i = 0, itemValue = array[i], range = array.length; i < range; i++, itemValue = array[i]) {\n Write(itemValue + '<br/><br/>'); // Returns the value of current element\n};\n")),(0,a.kt)("p",null,"As ES6 ",(0,a.kt)("a",{parentName:"p",href:"/docs/js/js-loops#for-of"},"for...of")," loop is not available in SSJS, you will use this one in most scenarios."),(0,a.kt)("h3",{id:"for-in"},"For in"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"for...in")," loop in modern JavaScript is used nearly exclusively for debugging. It is because it loops not only over standard values but also over object prototype methods and properties."),(0,a.kt)("p",null,"In SSJS however, the ES6 ",(0,a.kt)("a",{parentName:"p",href:"/docs/js/js-loops#for-of"},"for...of")," loop is not available. ",(0,a.kt)("inlineCode",{parentName:"p"},"Object.keys()")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"Object.entries()")," also does not exist. This makes the ",(0,a.kt)("inlineCode",{parentName:"p"},"for...in")," the only solution for iterating over objects."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{1}","{1}":!0},"for (var key in object) {\n Write(key + '<br/><br/>'); // Returns string name of the current key\n};\n")),(0,a.kt)("p",null,"In simple scripts created in SSJS you shouldn't have issues with the prototype methods and properties, however, if you encounter any issues (or want to code defensively), use ",(0,a.kt)("inlineCode",{parentName:"p"},"hasOwnProperty")," method:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{2}","{2}":!0},"for (var key in object) {\n if (object.hasOwnProperty(key) && key != '_type') {\n Write(key + '<br/><br/>');\n };\n};\n")),(0,a.kt)("p",null,"Remember to use ",(0,a.kt)("inlineCode",{parentName:"p"},"for...in")," only for looping over objects. For any other scenario classic ",(0,a.kt)("inlineCode",{parentName:"p"},"for")," loop is both safer and more powerful."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"If you ever use ",(0,a.kt)("inlineCode",{parentName:"p"},"for...in")," loop for an array, remember that the loop-counter variable will return a string instead of a number. For example ",(0,a.kt)("inlineCode",{parentName:"p"},"'0'")," for first array item instead of ",(0,a.kt)("inlineCode",{parentName:"p"},"0"),".")),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"while-loops"},"While Loops"),(0,a.kt)("h3",{id:"while"},"While"),(0,a.kt)("p",null,"A ",(0,a.kt)("inlineCode",{parentName:"p"},"while")," loop executes its statement as long as the condition evaluates to true."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2} title="Infinite while loop"',"{2}":!0,title:'"Infinite',while:!0,'loop"':!0},"var run = true;\nwhile (run === true) {\n Write('To the infinity and beyond!');\n};\n")),(0,a.kt)("p",null,"To break out of ",(0,a.kt)("inlineCode",{parentName:"p"},"while")," loop, there must be logic within it that will change the condition to false (or a ",(0,a.kt)("inlineCode",{parentName:"p"},"break")," statement):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{3}","{3}":!0},"var run = true;\nvar i = 0;\nwhile (run === true) {\n Write('To the infinity and beyond!');\n i++;\n if (i > 10) {\n run = false;\n };\n};\n")),(0,a.kt)("p",null,"or just:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="This loop has the same outcome as the one above"',"{3}":!0,title:'"This',loop:!0,has:!0,the:!0,same:!0,outcome:!0,as:!0,one:!0,'above"':!0},"var run = true;\nvar i = 0;\nwhile (i <= 10) {\n Write('To the infinity and beyond!');\n i++;\n};\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"while")," loop is the best option for iterating over ",(0,a.kt)("strong",{parentName:"p"},"big")," arrays."),(0,a.kt)("h3",{id:"do-while"},"Do While"),(0,a.kt)("p",null,"Same as ",(0,a.kt)("inlineCode",{parentName:"p"},"while"),", but the code runs once before evaluating the condition."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{1,3}","{1,3}":!0},"do {\n Write('Running!');\n} while (run === true);\n")),(0,a.kt)("p",null,"Perfect when you need to run an API call, check whether there are more pages of outcomes and act accordingly."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"JavaScript support labels for loops. It allows you to name each loop for even better control with both ",(0,a.kt)("inlineCode",{parentName:"p"},"continue")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"break")," statements."),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1,8} title="Labelled loop example using a nested for loops"',"{1,8}":!0,title:'"Labelled',loop:!0,example:!0,using:!0,a:!0,nested:!0,for:!0,'loops"':!0},"MainLoopLabel:\nfor (var i = 0; i < array.length; i++) {\n // Logic\n SecondaryLoopLabel:\n for (var j = 0; j < array[i].length; j++) {\n // Logic\n if (array[i][j] === 'important') {\n break MainLoopLabel;\n };\n };\n};\n")),(0,a.kt)("p",{parentName:"admonition"},"As you can see, in the first line we added a label for the first ",(0,a.kt)("inlineCode",{parentName:"p"},"for")," loop. Then, in the statement within the second ",(0,a.kt)("inlineCode",{parentName:"p"},"for")," loop, we used ",(0,a.kt)("inlineCode",{parentName:"p"},"break")," followed by the label. Once executed, it will break both for loops, even if there were still iterations in the main one. The same approach works with the ",(0,a.kt)("inlineCode",{parentName:"p"},"continue")," statement.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/237.d8346ba6.js b/assets/js/237.d8346ba6.js new file mode 100644 index 000000000..8bdcda115 --- /dev/null +++ b/assets/js/237.d8346ba6.js @@ -0,0 +1,1320 @@ +"use strict"; +exports.id = 237; +exports.ids = [237]; +exports.modules = { + +/***/ 64237: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(72015); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey, + clear, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.r, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_04fb0060_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_92a8ff2b_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 */ .Nb1)().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 */ .Nb1)().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_92a8ff2b_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_92a8ff2b_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_92a8ff2b_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_92a8ff2b_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(/<br\s*\/?>/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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; +const LEFT_MARGIN = conf.leftMargin; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const securityLevel = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("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_04fb0060_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_04fb0060_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_04fb0060_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(); + } +}; + + + +/***/ }), + +/***/ 72015: +/***/ ((__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__(17967); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.H, " "); + 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 */ .Nm)(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 */ .Nm)(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/240325d0.2d6dbe4f.js b/assets/js/240325d0.2d6dbe4f.js deleted file mode 100644 index b899b7a59..000000000 --- a/assets/js/240325d0.2d6dbe4f.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5244],{6355:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png 640w,"+i.p+"assets/ideal-img/article-image-is-serverside-purpose.5bba003.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png",width:640,height:418},{path:i.p+"assets/ideal-img/article-image-is-serverside-purpose.5bba003.1030.png",width:1030,height:672}],src:i.p+"assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-is-serverside-purpose.8648fba.640.png"},placeholder:void 0,width:640,height:418},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+0lEQVQImWNQK9zNa1C+j0Vh9isGW4tmBhvt8uj4gAn/rTTKUrU1Gxi6A2vZb8WlMDFI5ewzd2w7XW5SczSOoeochyt/jlCgcWlSkGaJ9EbvBIa3jc0Mt+NSGBismk7ZOHeeizKqPlLB8PY/k6BlspVDQvNFBotUu/ehwSE3kjJ3XAuLrWawqD/q7NR2Ms605nA5w///DIIWyfaOiS13GMzTnN6GhKTcTMm+ei0sdiKDctEBU6f2MxUmNUdTGCpOcHnxZfO7aWZH+yjlim/0jGV4A7NapWCvgGbJPg7N5R8YrIwbGCzVS2OCHNv/W6iVpKmr1DJ0+teAPQMAjg1cf+UFakAAAAAASUVORK5CYII="}},5783:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png 640w,"+i.p+"assets/ideal-img/article-image-is-serverside-template-ui.d56a10a.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png",width:640,height:302},{path:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.d56a10a.1030.png",width:1030,height:486}],src:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-is-serverside-template-ui.23a8fb4.640.png"},placeholder:void 0,width:640,height:302},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlUlEQVQImTWLSQ6CQBQFuf+5jCuDQwwaYxBRhkBjI0gz/zJNtDbvLaqcW6w4+FeuQUCmNFqXeGHB6hixOT9Yux47d4vzVDWxKjn5CftLzD1S9F37izSWaRxx7BEgexvyqqWoDKYbSHVD/ippTIvpeisKIsI8T0siMi9rgyCMSNOMJK9xRFjEv2C/pekGdFlh6g/DOPMFD8G+gW8M8tUAAAAASUVORK5CYII="}},7661:(e,t,i)=>{"use strict";i.d(t,{Z:()=>f});var a=i(7294),n=i(6010),r=i(8259),o=i(3699),s=i(2735),l=i(7325);const d={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function p(e){let{href:t,children:i}=e;return a.createElement(o.Z,{href:t,className:(0,n.Z)("card padding--lg",d.cardContainer)},i)}function c(e){let{href:t,icon:i,title:r,description:o}=e;return a.createElement(p,{href:t},a.createElement("h2",{className:(0,n.Z)("text--truncate",d.cardTitle),title:r},i," ",r),o&&a.createElement("p",{className:(0,n.Z)("text--truncate",d.cardDescription),title:o},o))}function m(e){let{item:t}=e;const i=(0,r.Wl)(t);return i?a.createElement(c,{href:i,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function u(e){let{item:t}=e;const i=(0,s.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,r.xz)(t.docId??void 0);return a.createElement(c,{href:t.href,icon:i,title:t.label,description:t.description??n?.description})}function g(e){let{item:t}=e;switch(t.type){case"link":return a.createElement(u,{item:t});case"category":return a.createElement(m,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function h(e){let{className:t}=e;const i=(0,r.jA)();return a.createElement(f,{items:i.items,className:t})}function f(e){const{items:t,className:i}=e;if(!t)return a.createElement(h,e);const o=(0,r.MN)(t);return a.createElement("section",{className:(0,n.Z)("row",i)},o.map(((e,t)=>a.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},a.createElement(g,{item:e})))))}},7271:(e,t,i)=>{"use strict";i.d(t,{V:()=>r,z:()=>n});var a=i(7294);const n=e=>{let{link:t,text:i,newTab:n=!1}=e;return a.createElement(a.Fragment,null,a.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:n?"_blank":"_self"},i))},r=e=>{let{linkLeft:t,textLeft:i,newTabLeft:n=!1,linkRight:r,textRight:o,newTabRight:s=!1}=e;return a.createElement(a.Fragment,null,a.createElement("div",{class:"col col--12"},a.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:n?"_blank":"_self"},i),a.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:r,target:s?"_blank":"_self"},o)))}},1872:(e,t,i)=>{"use strict";i.d(t,{m:()=>r});var a=i(7294);const n="leadText_qzwo",r=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:n},t))}},6280:(e,t,i)=>{"use strict";i.r(t),i.d(t,{assets:()=>f,contentTitle:()=>g,default:()=>C,frontMatter:()=>u,metadata:()=>h,toc:()=>b});var a=i(7462),n=(i(7294),i(4137)),r=i(1872),o=i(7271),s=i(7661),l=i(5944),d=i(6355),p=i.n(d),c=i(5783),m=i.n(c);const u={id:"mcp-serverside-code-basics",title:"MCP Serverside Code Basics",sidebar_label:"Serverside Code Basics",description:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",image:"img/og/og-image-mcp-serverside-code-basics.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},g=void 0,h={unversionedId:"interaction-studio/mcp-serverside-code-basics",id:"interaction-studio/mcp-serverside-code-basics",title:"MCP Serverside Code Basics",description:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",source:"@site/docs/interaction-studio/mcp-serverside-code-basics.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-serverside-code-basics",permalink:"/docs/interaction-studio/mcp-serverside-code-basics",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-serverside-code-basics.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"TypeScript",permalink:"/docs/tags/type-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697570418,formattedLastUpdatedAt:"Oct 17, 2023",frontMatter:{id:"mcp-serverside-code-basics",title:"MCP Serverside Code Basics",sidebar_label:"Serverside Code Basics",description:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",image:"img/og/og-image-mcp-serverside-code-basics.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},sidebar:"docs",previous:{title:"Serverside Code",permalink:"/docs/category/serverside-code"},next:{title:"Serverside Code Properties",permalink:"/docs/interaction-studio/mcp-serverside-code-properties"}},f={},b=[{value:"MCP Serverside Code Purpose",id:"mcp-serverside-code-purpose",level:2},{value:"MCP Serverside Code Basics",id:"mcp-serverside-code-basics",level:2},{value:"Writing Serverside Code",id:"writing-serverside-code",level:2},{value:"1. Field Configuration",id:"1-field-configuration",level:3},{value:"2. Run Block",id:"2-run-block",level:3},{value:"3. Return Statement",id:"3-return-statement",level:3},{value:"All MCP Serverside Code Guides",id:"all-mcp-serverside-code-guides",level:2},{value:"Learn more",id:"learn-more",level:2}],k={toc:b},v="wrapper";function C(e){let{components:t,...i}=e;return(0,n.kt)(v,(0,a.Z)({},k,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(r.m,{content:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",mdxType:"LeadText"}),(0,n.kt)("h2",{id:"mcp-serverside-code-purpose"},"MCP Serverside Code Purpose"),(0,n.kt)("p",null,"Whether you are creating a Web, Serverside or Triggered Campaign Template in the Marketing Cloud Personalization (Interaction Studio), you start with the Serverside Code tab. It is the true heart of the MCP platform responsible for delivering data-driven personalisations."),(0,n.kt)("p",null,"The developer can use the Serverside Code to:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"leverage user profile and behavioural data"),(0,n.kt)("li",{parentName:"ul"},"lookup company catalog data"),(0,n.kt)("li",{parentName:"ul"},"build campaign configuration and use provided data"),(0,n.kt)("li",{parentName:"ul"},"select and pull Einstein Recipe recommendations")),(0,n.kt)("p",null,"to output a transformed payload containing everything needed for a unique experience for each customer."),(0,n.kt)(l.Z,{img:p(),alt:"Graph displaying the purpose of Serverside code as a centre collecting data, configuration and recommendations to output personalisation payload",mdxType:"Image"}),(0,n.kt)("hr",null),(0,n.kt)("h2",{id:"mcp-serverside-code-basics"},"MCP Serverside Code Basics"),(0,n.kt)("p",null,"All the above things are done within the Serverside Code tab of the MC Personalization Template creation UI with TypeScript programming language and built-in functions. Don't worry if you don't know TypeScript - basic knowledge of modern JavaScript is enough to create good templates."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Open Time Email Campaigns are using different, older system. I covered its details in a ",(0,n.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-open-time-email"},"separate guide"),".")),(0,n.kt)("p",null,"When you open the Serverside Code tab in a new Template creation screen for Web, Serverside or Triggered Campaign within the Marketing Cloud Personalization, you will be greeted by a bit intimidating interface. Let's start by breaking it down section by section:"),(0,n.kt)(l.Z,{img:m(),alt:"Marketing Cloud Personalization Serverside Template UI screenshot",mdxType:"Image"}),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"The middle pane contains your TypeScript code responsible for all the magic happening on the server side."),(0,n.kt)("li",{parentName:"ol"},"Within the middle section (1), you will see two sections. The first one is responsible for defining the Campaign configuration form. In the screenshot above, a ",(0,n.kt)("inlineCode",{parentName:"li"},"header")," field is defined as a ",(0,n.kt)("inlineCode",{parentName:"li"},"string")," and decorated with a custom title."),(0,n.kt)("li",{parentName:"ol"},"The form definitions you develop (2) will be available for a preview on the left pane. This section lets you see what the Campaign Configuration screen will look like and enables you to fill it in to see the interactions."),(0,n.kt)("li",{parentName:"ol"},"Returning to the middle section (1), below the configuration form definitions (2), you will find the ",(0,n.kt)("inlineCode",{parentName:"li"},"run")," function with ",(0,n.kt)("inlineCode",{parentName:"li"},"context")," being passed as an argument. This is where you can optionally transform or enrich the data captured from the configuration form. The ",(0,n.kt)("inlineCode",{parentName:"li"},"context")," provided to the function contains triggering event data and access to many helper functions to bring your template to the next level. You can also add properties (for example, debugging details) to the returned object to make them available in the payload (5)."),(0,n.kt)("li",{parentName:"ol"},"The bottom part of the right pane displays the Payload Preview. It is updated in real-time as you write your TypeScript (1) or change the configuration (3). it is an excellent way to validate whether you are getting the desired outcome."),(0,n.kt)("li",{parentName:"ol"},"If your template leverages user or catalog data (for example, user attributes for personalisation or anchored recipes) to see the proper payload, you must provide example data. The top section of the right pane lets you do it. You can add the IDs and see the payload (5) adapt to the simulated scenario.")),(0,n.kt)("p",null,"The final outcome of your work in this tab is the personalised payload (5). Depending on the type of campaign this template is for, it will either be delivered as is (Serverside), put into a Data Extension (Triggered Campaign) or be available to leverage for logic in Clientside Code and experience in Handlebars tabs (Web Campaign)."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"If you don't see ",(0,n.kt)("inlineCode",{parentName:"p"},"experience")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"campaign")," in the payload object (5), it means there is a bug in your template code (1)."),(0,n.kt)("p",{parentName:"admonition"},"If you don't see the configuration form preview (3) updates despite making changes in the serverside code (1), MCP probably froze. Check whether you are still logged in to the MC Personalization (MCP session length is shorter than SFMC's). If yes, cut (",(0,n.kt)("inlineCode",{parentName:"p"},"ctrl"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"cmd")," + ",(0,n.kt)("inlineCode",{parentName:"p"},"x"),") your whole serverside code, provide any symbol (like ",(0,n.kt)("inlineCode",{parentName:"p"},"a') to overwrite the cache and replace it back by pasting the code ("),"ctrl",(0,n.kt)("inlineCode",{parentName:"p"},"/"),"cmd",(0,n.kt)("inlineCode",{parentName:"p"},"+"),"v`).")),(0,n.kt)("hr",null),(0,n.kt)("h2",{id:"writing-serverside-code"},"Writing Serverside Code"),(0,n.kt)("p",null,"As mentioned above, when you create a new Web, Serverside or Triggered Campaign Template and view the Serverside Code tab, you will get a concise and simple code snippet:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-ts"},'export class NewTemplate implements CampaignTemplateComponent {\n\n @title("Example Field")\n header: string;\n\n run(context: CampaignComponentContext) {\n return {};\n }\n\n}\n')),(0,n.kt)("p",null,"There is a collection of much more complex ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/evergage/evergage-global-templates/tree/master"},"Global Templates available")," that are great starting points for building actual campaigns, but here we will start with the base snippet and build up from it for learning purposes."),(0,n.kt)("p",null,"There are three critical parts of that snippet:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-ts",metastring:"{3-5,7-8,10}","{3-5,7-8,10}":!0},'export class NewTemplate implements CampaignTemplateComponent {\n\n // 1: field configuraiton\n @title("Example Field")\n header: string;\n\n run(context: CampaignComponentContext) {\n // 2: run block\n\n return {}; // 3: return statement\n }\n}\n')),(0,n.kt)("h3",{id:"1-field-configuration"},"1. Field Configuration"),(0,n.kt)("p",null,"The field configuration lets you add properties that will become part of the campaign configuration form used by marketers to set the experiences. It is the primary data input; MCP will directly pass all properties you add here to the campaign response."),(0,n.kt)(o.z,{link:"../mcp-serverside-code-properties/",text:"Learn more",newTab:"true",mdxType:"Button"}),(0,n.kt)("h3",{id:"2-run-block"},"2. Run Block"),(0,n.kt)("p",null,"Run block has access to the context object containing trigger event details and MC Personalization data. It can also pull information configured in the properties by the marketer. With all of this, you can use it to enrich and transform the data that the campaign will return."),(0,n.kt)("h3",{id:"3-return-statement"},"3. Return Statement"),(0,n.kt)("p",null,"Return statement within the run block lets you add custom properties to the final campaign payload. Whatever you add to the returned object will be available along with the properties from the field configuration section."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"The run block execution works differently during the template creation and campaign configuration. When the marketer configures the campaign, MCP applies the changes executed within the run in real time - this may lead to content changes or even the removal of field input. You shouldn't transform the data in the fields directly but rather do it on new variables:"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{8,10} title= "Transform field values using the new variable"',"{8,10}":!0,title:"",'"Transform':!0,field:!0,values:!0,using:!0,the:!0,new:!0,'variable"':!0},'export class PersonalizedOverlay implements CampaignTemplateComponent {\n\n @title("Personalized Header")\n @subtitle("Use {firstName} to insert first name personalization")\n initialHeader: string;\n\n run(context: CampaignComponentContext) {\n let header = this.initialHeader.replace(/{firstName}/g, context.user.attributes?.firstName || \'Trailblazer\');\n\n return { header };\n }\n}\n')),(0,n.kt)("p",{parentName:"admonition"},"This way, the configured field will stay as it is, but in the final campaign payload, you will also have the transformed variable for use."),(0,n.kt)("p",{parentName:"admonition"},"Keep this in mind when you have to provide a payload according to a specification (e.g. in the Serverside Campaign Template). If you want to make any transformations to a manual input, add some prefix to the property in the field configuration section (e.g. ",(0,n.kt)("inlineCode",{parentName:"p"},"initial"),") and output the expected name only through the return statement of the run block, as shown in the snippet above.")),(0,n.kt)("p",null,"With the basics of Serverside Code processing, you are ready to start coding. Next step - build MCP Campaign Template inputs with ",(0,n.kt)("a",{parentName:"p",href:"../mcp-serverside-code-properties/"},"Serverside Code Properties"),"."),(0,n.kt)("hr",null),(0,n.kt)("h2",{id:"all-mcp-serverside-code-guides"},"All MCP Serverside Code Guides"),(0,n.kt)(s.Z,{mdxType:"DocCardList"}),(0,n.kt)("hr",null),(0,n.kt)("h2",{id:"learn-more"},"Learn more"),(0,n.kt)("p",null,"Here, I want to share a few of my favourite sources focusing on MCP Serverside Code and its use in Campaign Templates:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"My ",(0,n.kt)("a",{parentName:"li",href:"../../category/mc-personalization-snippets/"},"MCP Campaign Templates and code snippets")),(0,n.kt)("li",{parentName:"ol"},"Official ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/evergage/evergage-global-templates/"},"GitHub repository")," with Global Templates"),(0,n.kt)("li",{parentName:"ol"},"Christoper's Long ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/christopher-longSFDC/mcp/"},"GitHub repository")," with Complex Templates"),(0,n.kt)("li",{parentName:"ol"},"Salesforce Japan ",(0,n.kt)("a",{parentName:"li",href:"https://is-template-guide.herokuapp.com/en/"},"Template Catalog")," with Web Campaigns")),(0,n.kt)("p",null,"Found other inspiring MCP Serverside Code examples? Let me know!"))}C.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/240325d0.7bda18e2.js b/assets/js/240325d0.7bda18e2.js new file mode 100644 index 000000000..797ce0e7d --- /dev/null +++ b/assets/js/240325d0.7bda18e2.js @@ -0,0 +1 @@ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5244],{6355:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png 640w,"+i.p+"assets/ideal-img/article-image-is-serverside-purpose.cb7e14b.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png",width:640,height:418},{path:i.p+"assets/ideal-img/article-image-is-serverside-purpose.cb7e14b.1030.png",width:1030,height:672}],src:i.p+"assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png"},placeholder:void 0,width:640,height:418},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA9UlEQVR4nGNggIJQhlBmEG2rVewU5NT+yly10AvEr2ewZwErUCg+ZO7YdsrPpGiHLFihRoVbsl//A3vN0gCwAaEQAxgUiw6p2beeyTSuO97Nl7xDiEFcj1vOIDqEQStU6H9oKP/FqATda9HRkgw2TccjXDvOxBtVHkoFaRSzyoqOqV38n8E6M+5tSEjrq9zS/9fD4w4wqBXt13BuO5VlUXeil69whxCDqD2PjElMBMjE1xERUldCY5wu+URqMGhWHDd3aD/tr5+/XQFkoo1qhUu4Y9stK+UiP2RPwgFMwEK1xMXdpO6thWKxL4g/M20m638GBkYAM49OIdA3DZQAAAAASUVORK5CYII="}},5783:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.4a74717.640.png 640w,"+i.p+"assets/ideal-img/article-image-is-serverside-template-ui.d56a10a.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.4a74717.640.png",width:640,height:302},{path:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.d56a10a.1030.png",width:1030,height:486}],src:i.p+"assets/ideal-img/article-image-is-serverside-template-ui.4a74717.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-is-serverside-template-ui.4a74717.640.png"},placeholder:void 0,width:640,height:302},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlklEQVR4nC3KQQuCQBiEYf//jwq6dOhgSAgFRWrslqZuq63uCn5v0DYwzBye5KZb8uJKeVd0ZsBaS3p9sT1q9ifFZpeSHTKSqhko65b8osjOmkJ3+DCj65a+7xERgg8kAKsIj95Rvyc6OzFNgadxmGHEhwXnlwgFYZX1/+S3nXXcKoXSDXU7RhgTQSyMc8AYixs++GXlC/QQvk5cH0PxAAAAAElFTkSuQmCC"}},5580:(e,t,i)=>{"use strict";i.r(t),i.d(t,{assets:()=>f,contentTitle:()=>m,default:()=>v,frontMatter:()=>u,metadata:()=>g,toc:()=>x});var n=i(5893),r=i(1151),a=i(1872),s=i(7271),o=i(7661),d=i(5944),l=i(6355),c=i.n(l),p=i(5783),h=i.n(p);const u={id:"mcp-serverside-code-basics",title:"MCP Serverside Code Basics",sidebar_label:"Serverside Code Basics",description:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",image:"img/og/og-image-mcp-serverside-code-basics.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},m=void 0,g={id:"interaction-studio/mcp-serverside-code-basics",title:"MCP Serverside Code Basics",description:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",source:"@site/docs/interaction-studio/mcp-serverside-code-basics.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-serverside-code-basics",permalink:"/docs/interaction-studio/mcp-serverside-code-basics",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-serverside-code-basics.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"TypeScript",permalink:"/docs/tags/type-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1705851883,formattedLastUpdatedAt:"Jan 21, 2024",frontMatter:{id:"mcp-serverside-code-basics",title:"MCP Serverside Code Basics",sidebar_label:"Serverside Code Basics",description:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.",image:"img/og/og-image-mcp-serverside-code-basics.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},sidebar:"docs",previous:{title:"Serverside Code",permalink:"/docs/category/serverside-code"},next:{title:"Serverside Code Properties",permalink:"/docs/interaction-studio/mcp-serverside-code-properties"}},f={},x=[{value:"MCP Serverside Code Purpose",id:"mcp-serverside-code-purpose",level:2},{value:"MCP Serverside Code Basics",id:"mcp-serverside-code-basics",level:2},{value:"Writing Serverside Code",id:"writing-serverside-code",level:2},{value:"1. Field Configuration",id:"1-field-configuration",level:3},{value:"2. Run Block",id:"2-run-block",level:3},{value:"3. Return Statement",id:"3-return-statement",level:3},{value:"All MCP Serverside Code Guides",id:"all-mcp-serverside-code-guides",level:2},{value:"Learn more",id:"learn-more",level:2}];function b(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.m,{content:"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer."}),"\n",(0,n.jsx)(t.h2,{id:"mcp-serverside-code-purpose",children:"MCP Serverside Code Purpose"}),"\n",(0,n.jsx)(t.p,{children:"Whether you are creating a Web, Serverside or Triggered Campaign Template in the Marketing Cloud Personalization (Interaction Studio), you start with the Serverside Code tab. It is the true heart of the MCP platform responsible for delivering data-driven personalisations."}),"\n",(0,n.jsx)(t.p,{children:"The developer can use the Serverside Code to:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"leverage user profile and behavioural data"}),"\n",(0,n.jsx)(t.li,{children:"lookup company catalog data"}),"\n",(0,n.jsx)(t.li,{children:"build campaign configuration and use provided data"}),"\n",(0,n.jsx)(t.li,{children:"select and pull Einstein Recipe recommendations"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"to output a transformed payload containing everything needed for a unique experience for each customer."}),"\n",(0,n.jsx)(d.Z,{img:c(),alt:"Graph displaying the purpose of Serverside code as a centre collecting data, configuration and recommendations to output personalisation payload"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"mcp-serverside-code-basics",children:"MCP Serverside Code Basics"}),"\n",(0,n.jsx)(t.p,{children:"All the above things are done within the Serverside Code tab of the MC Personalization Template creation UI with TypeScript programming language and built-in functions. Don't worry if you don't know TypeScript - basic knowledge of modern JavaScript is enough to create good templates."}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(t.p,{children:["Open Time Email Campaigns are using different, older system. I covered its details in a ",(0,n.jsx)(t.a,{href:"/docs/interaction-studio/mcp-open-time-email",children:"separate guide"}),"."]})}),"\n",(0,n.jsx)(t.p,{children:"When you open the Serverside Code tab in a new Template creation screen for Web, Serverside or Triggered Campaign within the Marketing Cloud Personalization, you will be greeted by a bit intimidating interface. Let's start by breaking it down section by section:"}),"\n",(0,n.jsx)(d.Z,{img:h(),alt:"Marketing Cloud Personalization Serverside Template UI screenshot"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"The middle pane contains your TypeScript code responsible for all the magic happening on the server side."}),"\n",(0,n.jsxs)(t.li,{children:["Within the middle section (1), you will see two sections. The first one is responsible for defining the Campaign configuration form. In the screenshot above, a ",(0,n.jsx)(t.code,{children:"header"})," field is defined as a ",(0,n.jsx)(t.code,{children:"string"})," and decorated with a custom title."]}),"\n",(0,n.jsx)(t.li,{children:"The form definitions you develop (2) will be available for a preview on the left pane. This section lets you see what the Campaign Configuration screen will look like and enables you to fill it in to see the interactions."}),"\n",(0,n.jsxs)(t.li,{children:["Returning to the middle section (1), below the configuration form definitions (2), you will find the ",(0,n.jsx)(t.code,{children:"run"})," function with ",(0,n.jsx)(t.code,{children:"context"})," being passed as an argument. This is where you can optionally transform or enrich the data captured from the configuration form. The ",(0,n.jsx)(t.code,{children:"context"})," provided to the function contains triggering event data and access to many helper functions to bring your template to the next level. You can also add properties (for example, debugging details) to the returned object to make them available in the payload (5)."]}),"\n",(0,n.jsx)(t.li,{children:"The bottom part of the right pane displays the Payload Preview. It is updated in real-time as you write your TypeScript (1) or change the configuration (3). it is an excellent way to validate whether you are getting the desired outcome."}),"\n",(0,n.jsx)(t.li,{children:"If your template leverages user or catalog data (for example, user attributes for personalisation or anchored recipes) to see the proper payload, you must provide example data. The top section of the right pane lets you do it. You can add the IDs and see the payload (5) adapt to the simulated scenario."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"The final outcome of your work in this tab is the personalised payload (5). Depending on the type of campaign this template is for, it will either be delivered as is (Serverside), put into a Data Extension (Triggered Campaign) or be available to leverage for logic in Clientside Code and experience in Handlebars tabs (Web Campaign)."}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["If you don't see ",(0,n.jsx)(t.code,{children:"experience"})," or ",(0,n.jsx)(t.code,{children:"campaign"})," in the payload object (5), it means there is a bug in your template code (1)."]}),(0,n.jsxs)(t.p,{children:["If you don't see the configuration form preview (3) updates despite making changes in the serverside code (1), MCP probably froze. Check whether you are still logged in to the MC Personalization (MCP session length is shorter than SFMC's). If yes, cut (",(0,n.jsx)(t.code,{children:"ctrl"}),"/",(0,n.jsx)(t.code,{children:"cmd"})," + ",(0,n.jsx)(t.code,{children:"x"}),") your whole serverside code, provide any symbol (like ",(0,n.jsx)(t.code,{children:"a"}),") to overwrite the cache and replace it back by pasting the code (",(0,n.jsx)(t.code,{children:"ctrl"}),"/",(0,n.jsx)(t.code,{children:"cmd"})," + ",(0,n.jsx)(t.code,{children:"v"}),")."]})]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"writing-serverside-code",children:"Writing Serverside Code"}),"\n",(0,n.jsx)(t.p,{children:"As mentioned above, when you create a new Web, Serverside or Triggered Campaign Template and view the Serverside Code tab, you will get a concise and simple code snippet:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-ts",children:'export class NewTemplate implements CampaignTemplateComponent {\n\n @title("Example Field")\n header: string;\n\n run(context: CampaignComponentContext) {\n return {};\n }\n\n}\n'})}),"\n",(0,n.jsxs)(t.p,{children:["There is a collection of much more complex ",(0,n.jsx)(t.a,{href:"https://github.com/evergage/evergage-global-templates/tree/master",children:"Global Templates available"})," that are great starting points for building actual campaigns, but here we will start with the base snippet and build up from it for learning purposes."]}),"\n",(0,n.jsx)(t.p,{children:"There are three critical parts of that snippet:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-ts",metastring:"{3-5,7-8,10}",children:'export class NewTemplate implements CampaignTemplateComponent {\n\n // 1: field configuraiton\n @title("Example Field")\n header: string;\n\n run(context: CampaignComponentContext) {\n // 2: run block\n\n return {}; // 3: return statement\n }\n}\n'})}),"\n",(0,n.jsx)(t.h3,{id:"1-field-configuration",children:"1. Field Configuration"}),"\n",(0,n.jsx)(t.p,{children:"The field configuration lets you add properties that will become part of the campaign configuration form used by marketers to set the experiences. It is the primary data input; MCP will directly pass all properties you add here to the campaign response."}),"\n",(0,n.jsx)(s.z,{link:"../mcp-serverside-code-properties/",text:"Learn more",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"2-run-block",children:"2. Run Block"}),"\n",(0,n.jsx)(t.p,{children:"Run block has access to the context object containing trigger event details and MC Personalization data. It can also pull information configured in the properties by the marketer. With all of this, you can use it to enrich and transform the data that the campaign will return."}),"\n",(0,n.jsx)(t.h3,{id:"3-return-statement",children:"3. Return Statement"}),"\n",(0,n.jsx)(t.p,{children:"Return statement within the run block lets you add custom properties to the final campaign payload. Whatever you add to the returned object will be available along with the properties from the field configuration section."}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsx)(t.p,{children:"The run block execution works differently during the template creation and campaign configuration. When the marketer configures the campaign, MCP applies the changes executed within the run in real time - this may lead to content changes or even the removal of field input. You shouldn't transform the data in the fields directly but rather do it on new variables:"}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-ts",metastring:'{8,10} title= "Transform field values using the new variable"',children:'export class PersonalizedOverlay implements CampaignTemplateComponent {\n\n @title("Personalized Header")\n @subtitle("Use {firstName} to insert first name personalization")\n initialHeader: string;\n\n run(context: CampaignComponentContext) {\n let header = this.initialHeader.replace(/{firstName}/g, context.user.attributes?.firstName || \'Trailblazer\');\n\n return { header };\n }\n}\n'})}),(0,n.jsx)(t.p,{children:"This way, the configured field will stay as it is, but in the final campaign payload, you will also have the transformed variable for use."}),(0,n.jsxs)(t.p,{children:["Keep this in mind when you have to provide a payload according to a specification (e.g. in the Serverside Campaign Template). If you want to make any transformations to a manual input, add some prefix to the property in the field configuration section (e.g. ",(0,n.jsx)(t.code,{children:"initial"}),") and output the expected name only through the return statement of the run block, as shown in the snippet above."]})]}),"\n",(0,n.jsxs)(t.p,{children:["With the basics of Serverside Code processing, you are ready to start coding. Next step - build MCP Campaign Template inputs with ",(0,n.jsx)(t.a,{href:"../mcp-serverside-code-properties/",children:"Serverside Code Properties"}),"."]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"all-mcp-serverside-code-guides",children:"All MCP Serverside Code Guides"}),"\n",(0,n.jsx)(o.Z,{}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,n.jsx)(t.p,{children:"Here, I want to share a few of my favourite sources focusing on MCP Serverside Code and its use in Campaign Templates:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["My ",(0,n.jsx)(t.a,{href:"../../category/mc-personalization-snippets/",children:"MCP Campaign Templates and code snippets"})]}),"\n",(0,n.jsxs)(t.li,{children:["My ",(0,n.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mcp-campaign-templates",children:"GitHub repository"})," with Global and Custom Templates"]}),"\n",(0,n.jsxs)(t.li,{children:["Christoper's Long ",(0,n.jsx)(t.a,{href:"https://github.com/christopher-longSFDC/mcp/",children:"GitHub repository"})," with Complex Templates"]}),"\n",(0,n.jsxs)(t.li,{children:["Salesforce Japan ",(0,n.jsx)(t.a,{href:"https://is-template-guide.herokuapp.com/en/",children:"Template Catalog"})," with Web Campaigns"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Found other inspiring MCP Serverside Code examples? Let me know!"})]})}function v(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(b,{...e})}):b(e)}},7661:(e,t,i)=>{"use strict";i.d(t,{Z:()=>x});i(7294);var n=i(512),r=i(8259),a=i(4791),s=i(2735),o=i(7325),d=i(3899);const l={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var c=i(5893);function p(e){let{href:t,children:i}=e;return(0,c.jsx)(a.Z,{href:t,className:(0,n.Z)("card padding--lg",l.cardContainer),children:i})}function h(e){let{href:t,icon:i,title:r,description:a}=e;return(0,c.jsxs)(p,{href:t,children:[(0,c.jsxs)(d.Z,{as:"h2",className:(0,n.Z)("text--truncate",l.cardTitle),title:r,children:[i," ",r]}),a&&(0,c.jsx)("p",{className:(0,n.Z)("text--truncate",l.cardDescription),title:a,children:a})]})}function u(e){let{item:t}=e;const i=(0,r.LM)(t);return i?(0,c.jsx)(h,{href:i,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,o.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function m(e){let{item:t}=e;const i=(0,s.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,r.xz)(t.docId??void 0);return(0,c.jsx)(h,{href:t.href,icon:i,title:t.label,description:t.description??n?.description})}function g(e){let{item:t}=e;switch(t.type){case"link":return(0,c.jsx)(m,{item:t});case"category":return(0,c.jsx)(u,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const i=(0,r.jA)();return(0,c.jsx)(x,{items:i.items,className:t})}function x(e){const{items:t,className:i}=e;if(!t)return(0,c.jsx)(f,{...e});const a=(0,r.MN)(t);return(0,c.jsx)("section",{className:(0,n.Z)("row",i),children:a.map(((e,t)=>(0,c.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,c.jsx)(g,{item:e})},t)))})}},7271:(e,t,i)=>{"use strict";i.d(t,{V:()=>a,z:()=>r});i(7294);var n=i(5893);const r=e=>{let{link:t,text:i,newTab:r=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:r?"_blank":"_self",children:i})})},a=e=>{let{linkLeft:t,textLeft:i,newTabLeft:r=!1,linkRight:a,textRight:s,newTabRight:o=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsxs)("div",{class:"col col--12",children:[(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:r?"_blank":"_self",children:i}),(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:a,target:o?"_blank":"_self",children:s})]})})}},1872:(e,t,i)=>{"use strict";i.d(t,{m:()=>a});i(7294);const n="leadText_qzwo";var r=i(5893);const a=e=>{let{content:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:n,children:t})})}}}]); \ No newline at end of file diff --git a/assets/js/2491.142e201b.js b/assets/js/2491.142e201b.js new file mode 100644 index 000000000..e306dd824 --- /dev/null +++ b/assets/js/2491.142e201b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2491],{2491:(t,e,r)=>{r.d(e,{diagram:()=>z});var i=r(6365),a=r(4218),n=(r(7484),r(7967),r(7856),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],b=[1,56],g=[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:b,45:g},{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:b,45:g},{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:b,45:g},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:p,44:b,45:g},{33:[1,95]},{33:[1,96]},{39:97,43:p,44:b,45:g},{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:b,45:g},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:p,44:b,45:g},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:b,45:g},{33:[1,148]},{39:149,43:p,44:b,45:g},{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:b,45:g},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:p,44:b,45:g},{33:[1,162]},{39:163,43:p,44:b,45:g},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:p,44:b,45:g},{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:b,45:g},{33:[1,207]},{33:[1,208]},{39:209,43:p,44:b,45:g},{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:b,45:g},{33:[1,215]},{39:216,43:p,44:b,45:g},{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:b,45:g},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:p,44:b,45:g},{33:[1,229]},{39:230,43:p,44:b,45:g},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:p,44:b,45:g},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 b=m.options&&m.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,d,f,k,$,x,_,w,T,E={};;){if(d=r[r.length-1],this.defaultActions[d]?f=this.defaultActions[d]:(null==g&&(T=void 0,"number"!=typeof(T=i.pop()||m.lex()||1)&&(T instanceof Array&&(T=(i=T).pop()),T=e.symbols_[T]||T),g=T),f=c[d]&&c[d][g]),void 0===f||!f.length||!f[0]){var L="";for($ in w=[],c[d])this.terminals_[$]&&$>2&&w.push("'"+this.terminals_[$]+"'");L=m.showPosition?"Parse error on line "+(o+1)+":\n"+m.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(L,{text:m.match,token:this.terminals_[g]||g,line:m.yylineno,loc:p,expected:w})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+g);switch(f[0]){case 1:r.push(g),a.push(m.yytext),n.push(m.yylloc),r.push(f[1]),g=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},b&&(E._$.range=[n[n.length-(x||1)].range[0],n[n.length-1].range[1]]),void 0!==(k=this.performAction.apply(E,[s,l,o,y.yy,f[1],a,n].concat(h))))return k;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}},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;n<a.length;n++)if((r=this._input.match(this.rules[a[n]]))&&(!e||r[0].length>e[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 $(){this.yy={}}return f.lexer=k,$.prototype=f,f.Parser=$,new $}());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",b=0;function g(){return(0,i.x)({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 k(t,e,r){const i=t.indexOf(e);-1===i?t.push(r):t.splice(i,1,r)}function $(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]];k(t,e,r),t.push(l[e.parents[1]])}else{if(0==e.parents.length)return;{const r=l[e.parents];k(t,e,r)}}$(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},w={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||b+"-"+g(),message:t,seq:b++,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||b+"-"+g(),message:"merged branch "+t+" into "+u,seq:b++,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:b+"-"+g(),message:"cherry-picked "+n+" into "+u,seq:b++,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);$([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,b=0,(0,i.t)()},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.r,commitType:_};let T={};const E=0,L=1,M=2,v=3,A=4;let I={},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|<br\s*\/?>/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);Object.keys(e).sort(((t,r)=>e[t].seq-e[r].seq)).forEach((t=>{const i=e[t],o="TB"===S?s+10:I[i.branch].pos,l="TB"===S?I[i.branch].pos:s+10;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 A:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===M){const e=n.append("rect");e.attr("x",l-10),e.attr("y",o-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${i.id} commit-highlight${I[i.branch].index%8} ${t}-outer`),n.append("rect").attr("x",l-6).attr("y",o-6).attr("height",12).attr("width",12).attr("class",`commit ${i.id} commit${I[i.branch].index%8} ${t}-inner`)}else if(e===A)n.append("circle").attr("cx",l).attr("cy",o).attr("r",10).attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",l-3).attr("cy",o+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",l+3).attr("cy",o+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",l+3).attr("y1",o+1).attr("x2",l).attr("y2",o-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",l-3).attr("y1",o+1).attr("x2",l).attr("y2",o-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`);else{const r=n.append("circle");if(r.attr("cx",l),r.attr("cy",o),r.attr("r",i.type===v?9:10),r.attr("class",`commit ${i.id} commit${I[i.branch].index%8}`),e===v){const e=n.append("circle");e.attr("cx",l),e.attr("cy",o),e.attr("r",6),e.attr("class",`commit ${t} ${i.id} commit${I[i.branch].index%8}`)}if(e===L){n.append("path").attr("d",`M ${l-5},${o-5}L${l+5},${o+5}M${l-5},${o+5}L${l+5},${o-5}`).attr("class",`commit ${t} ${i.id} commit${I[i.branch].index%8}`)}}}if(R[i.id]="TB"===S?{x:l,y:s+10}:{x:s+10,y:o},r){const t=4,e=2;if(i.type!==A&&(i.customId&&i.type===v||i.type!==v)&&a.showCommitLabel){const r=c.append("g"),n=r.insert("rect").attr("class","commit-label-bkg"),h=r.append("text").attr("x",s).attr("y",o+25).attr("class","commit-label").text(i.id);let m=h.node().getBBox();if(n.attr("x",s+10-m.width/2-e).attr("y",o+13.5).attr("width",m.width+2*e).attr("height",m.height+2*e),"TB"===S&&(n.attr("x",l-(m.width+4*t+5)).attr("y",o-12),h.attr("x",l-(m.width+4*t)).attr("y",o+m.height-12)),"TB"!==S&&h.attr("x",s+10-m.width/2),a.rotateCommitLabel)if("TB"===S)h.attr("transform","rotate(-45, "+l+", "+o+")"),n.attr("transform","rotate(-45, "+l+", "+o+")");else{let t=-7.5-(m.width+10)/25*9.5,e=10+m.width/25*8.5;r.attr("transform","translate("+t+", "+e+") rotate(-45, "+s+", "+o+")")}}if(i.tag){const r=c.insert("polygon"),a=c.append("circle"),n=c.append("text").attr("y",o-16).attr("class","tag-label").text(i.tag);let h=n.node().getBBox();n.attr("x",s+10-h.width/2);const m=h.height/2,y=o-19.2;r.attr("class","tag-label-bkg").attr("points",`\n ${s-h.width/2-t/2},${y+e}\n ${s-h.width/2-t/2},${y-e}\n ${s+10-h.width/2-t},${y-m-e}\n ${s+10+h.width/2+t},${y-m-e}\n ${s+10+h.width/2+t},${y+m+e}\n ${s+10-h.width/2-t},${y+m+e}`),a.attr("cx",s-h.width/2+t/2).attr("cy",y).attr("r",1.5).attr("class","tag-hole"),"TB"===S&&(r.attr("class","tag-label-bkg").attr("points",`\n ${l},${s+e}\n ${l},${s-e}\n ${l+10},${s-m-e}\n ${l+10+h.width+t},${s-m-e}\n ${l+10+h.width+t},${s+m+e}\n ${l+10},${s+m+e}`).attr("transform","translate(12,12) rotate(45, "+l+","+s+")"),a.attr("cx",l+t/2).attr("cy",s).attr("transform","translate(12,12) rotate(45, "+l+","+s+")"),n.attr("x",l+5).attr("y",s+3).attr("transform","translate(14,14) rotate(45, "+l+","+s+")"))}}s+=50,s>C&&(C=s)}))},N=(t,e,r,i,a)=>{const n=("TB"===S?r.x<i.x:r.y<i.y)?e.branch:t.branch;return Object.values(a).some((r=>{return(i=r).seq>t.seq&&i.seq<e.seq&&(t=>t.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=I[r.branch].index;if(c){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10;const t=a.y<n.y?G(a.y,n.y):G(n.y,a.y),i=a.x<n.x?G(a.x,n.x):G(n.x,a.x);"TB"===S?a.x<n.x?(y=I[r.branch].index,s=`M ${a.x} ${a.y} L ${i-h} ${a.y} ${l} ${i} ${a.y+m} L ${i} ${n.y-h} ${o} ${i+m} ${n.y} L ${n.x} ${n.y}`):(y=I[e.branch].index,s=`M ${a.x} ${a.y} L ${i+h} ${a.y} ${o} ${i} ${a.y+m} L ${i} ${n.y-h} ${l} ${i-m} ${n.y} L ${n.x} ${n.y}`):a.y<n.y?(y=I[r.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${t-h} ${o} ${a.x+m} ${t} L ${n.x-h} ${t} ${l} ${n.x} ${t+m} L ${n.x} ${n.y}`):(y=I[e.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${t+h} ${l} ${a.x+m} ${t} L ${n.x-h} ${t} ${o} ${n.x} ${t-m} L ${n.x} ${n.y}`)}else"TB"===S?(a.x<n.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,y=I[r.branch].index,s=`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${l} ${n.x} ${a.y+m} L ${n.x} ${n.y}`),a.x>n.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,y=I[e.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${l} ${a.x-m} ${n.y} L ${n.x} ${n.y}`),a.x===n.x&&(y=I[e.branch].index,s=`M ${a.x} ${a.y} L ${a.x+h} ${a.y} ${o} ${a.x+m} ${n.y+h} L ${n.x} ${n.y}`)):(a.y<n.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,y=I[r.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${o} ${a.x+m} ${n.y} L ${n.x} ${n.y}`),a.y>n.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,y=I[e.branch].index,s=`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${o} ${n.x} ${a.y-m} L ${n.x} ${n.y}`),a.y===n.y&&(y=I[e.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${o} ${a.x+m} ${n.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:w,renderer:{draw:function(t,e,r,n){I={},R={},T={},C=0,O=[],S="LR";const c=(0,i.c)(),s=c.gitGraph;i.l.debug("in gitgraph renderer",t+"\n","id:",e,r),T=n.db.getCommits();const o=n.db.getBranchesAsObjArray();S=n.db.getDirection();const l=(0,a.Ys)(`[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();I[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,T,!1),s.showBranches&&((t,e)=>{const r=(0,i.c)().gitGraph,a=t.append("g");e.forEach(((t,e)=>{const i=e%8,n=I[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,T),B(l,T,!0),i.u.insertTitle(l,"gitTitleText",s.titleTopMargin,n.db.getDiagramTitle()),(0,i.y)(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/2494.8c5c79ce.js b/assets/js/2494.8c5c79ce.js new file mode 100644 index 000000000..8922f1bed --- /dev/null +++ b/assets/js/2494.8c5c79ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2494],{2494:(t,e,a)=>{a.d(e,{a:()=>l,b:()=>T,c:()=>o,d:()=>H,e:()=>S,f:()=>I,g:()=>N,h:()=>j,i:()=>f,j:()=>Y,k:()=>P,l:()=>d,p:()=>B,s:()=>M,u:()=>c});var r=a(6365),n=a(4218),i=a(9261);const s={extension:(t,e,a)=>{r.l.trace("Making markers for ",a),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionStart").attr("class","marker extension "+e).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"),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionEnd").attr("class","marker extension "+e).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")},composition:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionStart").attr("class","marker composition "+e).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"),t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionEnd").attr("class","marker composition "+e).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")},aggregation:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).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"),t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).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")},dependency:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).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"),t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).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")},lollipop:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).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),t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).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)},point:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-pointEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",a+"_"+e+"-pointStart").attr("class","marker "+e).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")},circle:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-circleEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",a+"_"+e+"-circleStart").attr("class","marker "+e).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")},cross:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-crossEnd").attr("class","marker cross "+e).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"),t.append("marker").attr("id",a+"_"+e+"-crossStart").attr("class","marker cross "+e).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")},barb:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-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")}},l=(t,e,a,r)=>{e.forEach((e=>{s[e](t,a,r)}))};const o=(t,e,a,i)=>{let s=t||"";if("object"==typeof s&&(s=s[0]),(0,r.m)((0,r.c)().flowchart.htmlLabels)){s=s.replace(/\\n|\n/g,"<br />"),r.l.info("vertexText"+s);let t=function(t){const e=(0,n.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var s,l;return a.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),s=a,(l=t.labelStyle)&&s.attr("style",l),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:i,label:(0,r.J)(s).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let r=[];r="string"==typeof s?s.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(s)?s:[];for(const e of r){const r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),a?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},d=async(t,e,a,s)=>{let l;const d=e.useHtmlLabels||(0,r.m)((0,r.c)().flowchart.htmlLabels);l=a||"node default";const c=t.insert("g").attr("class",l).attr("id",e.domId||e.id),h=c.insert("g").attr("class","label").attr("style",e.labelStyle);let p;p=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const g=h.node();let y;y="markdown"===e.labelType?(0,i.a)(h,(0,r.d)((0,r.J)(p),(0,r.c)()),{useHtmlLabels:d,width:e.width||(0,r.c)().flowchart.wrappingWidth,classes:"markdown-node-label"}):g.appendChild(o((0,r.d)((0,r.J)(p),(0,r.c)()),e.labelStyle,!1,s));let f=y.getBBox();const w=e.padding/2;if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=y.children[0],e=(0,n.Ys)(y),a=t.getElementsByTagName("img");if(a){const t=""===p.replace(/<img[^>]*>/g,"").trim();await Promise.all([...a].map((e=>new Promise((a=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,r.c)().fontSize?(0,r.c)().fontSize:window.getComputedStyle(document.body).fontSize,a=5,n=parseInt(t,10)*a+"px";e.style.minWidth=n,e.style.maxWidth=n}else e.style.width="100%";a(e)}setTimeout((()=>{e.complete&&n()})),e.addEventListener("error",n),e.addEventListener("load",n)})))))}f=t.getBoundingClientRect(),e.attr("width",f.width),e.attr("height",f.height)}return d?h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):h.attr("transform","translate(0, "+-f.height/2+")"),e.centerLabel&&h.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),h.insert("rect",":first-child"),{shapeSvg:c,bbox:f,halfPadding:w,label:h}},c=(t,e)=>{const a=e.node().getBBox();t.width=a.width,t.height=a.height};function h(t,e,a,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+a/2+")")}function p(t,e,a,r){var n=t.x,i=t.y,s=n-r.x,l=i-r.y,o=Math.sqrt(e*e*l*l+a*a*s*s),d=Math.abs(e*a*s/o);r.x<n&&(d=-d);var c=Math.abs(e*a*l/o);return r.y<i&&(c=-c),{x:n+d,y:i+c}}function g(t,e,a,r){var n,i,s,l,o,d,c,h,p,g,f,w,x;if(n=e.y-t.y,s=t.x-e.x,o=e.x*t.y-t.x*e.y,p=n*a.x+s*a.y+o,g=n*r.x+s*r.y+o,!(0!==p&&0!==g&&y(p,g)||(i=r.y-a.y,l=a.x-r.x,d=r.x*a.y-a.x*r.y,c=i*t.x+l*t.y+d,h=i*e.x+l*e.y+d,0!==c&&0!==h&&y(c,h)||0==(f=n*l-i*s))))return w=Math.abs(f/2),{x:(x=s*d-l*o)<0?(x-w)/f:(x+w)/f,y:(x=i*o-n*d)<0?(x-w)/f:(x+w)/f}}function y(t,e){return t*e>0}const f=(t,e)=>{var a,r,n=t.x,i=t.y,s=e.x-n,l=e.y-i,o=t.width/2,d=t.height/2;return Math.abs(l)*o>Math.abs(s)*d?(l<0&&(d=-d),a=0===l?0:d*s/l,r=d):(s<0&&(o=-o),a=o,r=0===s?0:o*l/s),{x:n+a,y:i+r}},w={node:function(t,e){return t.intersect(e)},circle:function(t,e,a){return p(t,e,e,a)},ellipse:p,polygon:function(t,e,a){var r=t.x,n=t.y,i=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),l=Math.min(l,t.y)})):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var o=r-t.width/2-s,d=n-t.height/2-l,c=0;c<e.length;c++){var h=e[c],p=e[c<e.length-1?c+1:0],y=g(t,a,{x:o+h.x,y:d+h.y},{x:o+p.x,y:d+p.y});y&&i.push(y)}return i.length?(i.length>1&&i.sort((function(t,e){var r=t.x-a.x,n=t.y-a.y,i=Math.sqrt(r*r+n*n),s=e.x-a.x,l=e.y-a.y,o=Math.sqrt(s*s+l*l);return i<o?-1:i===o?0:1})),i[0]):t},rect:f},x=t=>t?" "+t:"",u=(t,e)=>`${e||"node default"}${x(t.classes)} ${x(t.class)}`,b=async(t,e)=>{const{shapeSvg:a,bbox:n}=await d(t,e,u(e,void 0),!0),i=n.width+e.padding+(n.height+e.padding),s=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];r.l.info("Question main (Circle)");const l=h(a,i,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return r.l.warn("Intersect called"),w.polygon(e,s,t)},a};function m(t,e,a,n){const i=[],s=t=>{i.push(t,0)},l=t=>{i.push(0,t)};e.includes("t")?(r.l.debug("add top border"),s(a)):l(a),e.includes("r")?(r.l.debug("add right border"),s(n)):l(n),e.includes("b")?(r.l.debug("add bottom border"),s(a)):l(a),e.includes("l")?(r.l.debug("add left border"),s(n)):l(n),t.attr("stroke-dasharray",i.join(" "))}const k=(t,e,a)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let n=70,i=10;"LR"===a&&(n=10,i=70);const s=r.append("rect").attr("x",-1*n/2).attr("y",-1*i/2).attr("width",n).attr("height",i).attr("class","fork-join");return c(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return w.rect(e,t)},r},L={rhombus:b,question:b,rect:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,"node "+e.classes+" "+e.class,!0),s=a.insert("rect",":first-child"),l=n.width+e.padding,o=n.height+e.padding;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",l).attr("height",o),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(m(s,e.props.borders,l,o),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return c(e,s),e.intersect=function(t){return w.rect(e,t)},a},labelRect:async(t,e)=>{const{shapeSvg:a}=await d(t,e,"label",!0);r.l.trace("Classes = ",e.class);const n=a.insert("rect",":first-child");if(n.attr("width",0).attr("height",0),a.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(m(n,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return c(e,n),e.intersect=function(t){return w.rect(e,t)},a},rectWithTitle:(t,e)=>{let a;a=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",a).attr("id",e.domId||e.id),s=i.insert("rect",":first-child"),l=i.insert("line"),d=i.insert("g").attr("class","label"),h=e.labelText.flat?e.labelText.flat():e.labelText;let p="";p="object"==typeof h?h[0]:h,r.l.info("Label text abc79",p,h,"object"==typeof h);const g=d.node().appendChild(o(p,e.labelStyle,!0,!0));let y={width:0,height:0};if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=g.children[0],e=(0,n.Ys)(g);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}r.l.info("Text 2",h);const f=h.slice(1,h.length);let x=g.getBBox();const u=d.node().appendChild(o(f.join?f.join("<br/>"):f,e.labelStyle,!0,!0));if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=u.children[0],e=(0,n.Ys)(u);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}const b=e.padding/2;return(0,n.Ys)(u).attr("transform","translate( "+(y.width>x.width?0:(x.width-y.width)/2)+", "+(x.height+b+5)+")"),(0,n.Ys)(g).attr("transform","translate( "+(y.width<x.width?0:-(x.width-y.width)/2)+", 0)"),y=d.node().getBBox(),d.attr("transform","translate("+-y.width/2+", "+(-y.height/2-b+3)+")"),s.attr("class","outer title-state").attr("x",-y.width/2-b).attr("y",-y.height/2-b).attr("width",y.width+e.padding).attr("height",y.height+e.padding),l.attr("class","divider").attr("x1",-y.width/2-b).attr("x2",y.width/2+b).attr("y1",-y.height/2-b+x.height+b).attr("y2",-y.height/2-b+x.height+b),c(e,s),e.intersect=function(t){return w.rect(e,t)},i},choice:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return a.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return w.circle(e,14,t)},a},circle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,u(e,void 0),!0),s=a.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("Circle main"),c(e,s),e.intersect=function(t){return r.l.info("Circle intersect",e,n.width/2+i,t),w.circle(e,n.width/2+i,t)},a},doublecircle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,u(e,void 0),!0),s=a.insert("g",":first-child"),l=s.insert("circle"),o=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+5).attr("width",n.width+e.padding+10).attr("height",n.height+e.padding+10),o.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("DoubleCircle main"),c(e,l),e.intersect=function(t){return r.l.info("DoubleCircle intersect",e,n.width/2+i+5,t),w.circle(e,n.width/2+i+5,t)},a},stadium:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.height+e.padding,i=r.width+n/4+e.padding,s=a.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-i/2).attr("y",-n/2).attr("width",i).attr("height",n);return c(e,s),e.intersect=function(t){return w.rect(e,t)},a},hexagon:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.height+e.padding,i=n/4,s=r.width+2*i+e.padding,l=[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}],o=h(a,s,n,l);return o.attr("style",e.style),c(e,o),e.intersect=function(t){return w.polygon(e,l,t)},a},rect_left_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return h(a,n,i,s).attr("style",e.style),e.width=n+i,e.height=i,e.intersect=function(t){return w.polygon(e,s,t)},a},lean_right:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:i/6,y:-i}],l=h(a,n,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return w.polygon(e,s,t)},a},lean_left:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:2*i/6,y:0},{x:n+i/6,y:0},{x:n-2*i/6,y:-i},{x:-i/6,y:-i}],l=h(a,n,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return w.polygon(e,s,t)},a},trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n+2*i/6,y:0},{x:n-i/6,y:-i},{x:i/6,y:-i}],l=h(a,n,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return w.polygon(e,s,t)},a},inv_trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=h(a,n,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return w.polygon(e,s,t)},a},rect_right_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],l=h(a,n,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return w.polygon(e,s,t)},a},cylinder:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=n/2,s=i/(2.5+n/50),l=r.height+s+e.padding,o="M 0,"+s+" a "+i+","+s+" 0,0,0 "+n+" 0 a "+i+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,h=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",o).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return c(e,h),e.intersect=function(t){const a=w.rect(e,t),r=a.x-e.x;if(0!=i&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(a.y-e.y)>e.height/2-s)){let n=s*s*(1-r*r/(i*i));0!=n&&(n=Math.sqrt(n)),n=s-n,t.y-e.y>0&&(n=-n),a.y+=n}return a},a},start:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),c(e,r),e.intersect=function(t){return w.circle(e,7,t)},a},end:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child"),n=a.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),c(e,n),e.intersect=function(t){return w.circle(e,7,t)},a},note:async(t,e)=>{e.useHtmlLabels||(0,r.c)().flowchart.htmlLabels||(e.centerLabel=!0);const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,"node "+e.classes,!0);r.l.info("Classes = ",e.classes);const s=a.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),c(e,s),e.intersect=function(t){return w.rect(e,t)},a},subroutine:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,u(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=h(a,n,i,s);return l.attr("style",e.style),c(e,l),e.intersect=function(t){return w.polygon(e,s,t)},a},fork:k,join:k,class_box:(t,e)=>{const a=e.padding/2;let i;i=e.classes?"node "+e.classes:"node default";const s=t.insert("g").attr("class",i).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),d=s.insert("line"),h=s.insert("line");let p=0,g=4;const y=s.insert("g").attr("class","label");let f=0;const x=e.classData.annotations&&e.classData.annotations[0],u=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",b=y.node().appendChild(o(u,e.labelStyle,!0,!0));let m=b.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=b.children[0],e=(0,n.Ys)(b);m=t.getBoundingClientRect(),e.attr("width",m.width),e.attr("height",m.height)}e.classData.annotations[0]&&(g+=m.height+4,p+=m.width);let k=e.classData.label;void 0!==e.classData.type&&""!==e.classData.type&&((0,r.c)().flowchart.htmlLabels?k+="<"+e.classData.type+">":k+="<"+e.classData.type+">");const L=y.node().appendChild(o(k,e.labelStyle,!0,!0));(0,n.Ys)(L).attr("class","classTitle");let v=L.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=L.children[0],e=(0,n.Ys)(L);v=t.getBoundingClientRect(),e.attr("width",v.width),e.attr("height",v.height)}g+=v.height+4,v.width>p&&(p=v.width);const S=[];e.classData.members.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=y.node().appendChild(o(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ys)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>p&&(p=l.width),g+=l.height+4,S.push(s)})),g+=8;const M=[];if(e.classData.methods.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=y.node().appendChild(o(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ys)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>p&&(p=l.width),g+=l.height+4,M.push(s)})),g+=8,x){let t=(p-m.width)/2;(0,n.Ys)(b).attr("transform","translate( "+(-1*p/2+t)+", "+-1*g/2+")"),f=m.height+4}let T=(p-v.width)/2;return(0,n.Ys)(L).attr("transform","translate( "+(-1*p/2+T)+", "+(-1*g/2+f)+")"),f+=v.height+4,d.attr("class","divider").attr("x1",-p/2-a).attr("x2",p/2+a).attr("y1",-g/2-a+8+f).attr("y2",-g/2-a+8+f),f+=8,S.forEach((t=>{(0,n.Ys)(t).attr("transform","translate( "+-p/2+", "+(-1*g/2+f+4)+")");const e=null==t?void 0:t.getBBox();f+=((null==e?void 0:e.height)??0)+4})),f+=8,h.attr("class","divider").attr("x1",-p/2-a).attr("x2",p/2+a).attr("y1",-g/2-a+8+f).attr("y2",-g/2-a+8+f),f+=8,M.forEach((t=>{(0,n.Ys)(t).attr("transform","translate( "+-p/2+", "+(-1*g/2+f)+")");const e=null==t?void 0:t.getBBox();f+=((null==e?void 0:e.height)??0)+4})),l.attr("style",e.style).attr("class","outer title-state").attr("x",-p/2-a).attr("y",-g/2-a).attr("width",p+e.padding).attr("height",g+e.padding),c(e,l),e.intersect=function(t){return w.rect(e,t)},s}};let v={};const S=async(t,e,a)=>{let n,i;if(e.link){let s;"sandbox"===(0,r.c)().securityLevel?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s),i=await L[e.shape](n,e,a)}else i=await L[e.shape](t,e,a),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),v[e.id]=n,e.haveCallback&&v[e.id].attr("class",v[e.id].attr("class")+" clickable"),n},M=(t,e)=>{v[e.id]=t},T=()=>{v={}},B=t=>{const e=v[t.id];r.l.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const a=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+a-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),a},_={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function C(t,e){if(void 0===t||void 0===e)return{angle:0,deltaX:0,deltaY:0};t=E(t),e=E(e);const[a,r]=[t.x,t.y],[n,i]=[e.x,e.y],s=n-a,l=i-r;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}const E=t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,Y=t=>({x:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(_,t.arrowTypeStart)){const{angle:e,deltaX:a}=C(r[0],r[1]);n=_[t.arrowTypeStart]*Math.cos(e)*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(_,t.arrowTypeEnd)){const{angle:e,deltaX:a}=C(r[r.length-1],r[r.length-2]);n=_[t.arrowTypeEnd]*Math.cos(e)*(a>=0?1:-1)}return E(e).x+n},y:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(_,t.arrowTypeStart)){const{angle:e,deltaY:a}=C(r[0],r[1]);n=_[t.arrowTypeStart]*Math.abs(Math.sin(e))*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(_,t.arrowTypeEnd)){const{angle:e,deltaY:a}=C(r[r.length-1],r[r.length-2]);n=_[t.arrowTypeEnd]*Math.abs(Math.sin(e))*(a>=0?1:-1)}return E(e).y+n}}),P=(t,e,a,r,n)=>{e.arrowTypeStart&&R(t,"start",e.arrowTypeStart,a,r,n),e.arrowTypeEnd&&R(t,"end",e.arrowTypeEnd,a,r,n)},$={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},R=(t,e,a,n,i,s)=>{const l=$[a];if(!l)return void r.l.warn(`Unknown arrow type: ${a}`);const o="start"===e?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${s}-${l}${o})`)};let W={},X={};const H=()=>{W={},X={}},I=(t,e)=>{const a=(0,r.m)((0,r.c)().flowchart.htmlLabels),s="markdown"===e.labelType?(0,i.a)(t,e.label,{style:e.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):o(e.label,e.labelStyle);r.l.info("abc82",e,e.labelType);const l=t.insert("g").attr("class","edgeLabel"),d=l.insert("g").attr("class","label");d.node().appendChild(s);let c,h=s.getBBox();if(a){const t=s.children[0],e=(0,n.Ys)(s);h=t.getBoundingClientRect(),e.attr("width",h.width),e.attr("height",h.height)}if(d.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),W[e.id]=l,e.width=h.width,e.height=h.height,e.startLabelLeft){const a=o(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),X[e.id]||(X[e.id]={}),X[e.id].startLeft=r,O(c,e.startLabelLeft)}if(e.startLabelRight){const a=o(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=r.node().appendChild(a),n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),X[e.id]||(X[e.id]={}),X[e.id].startRight=r,O(c,e.startLabelRight)}if(e.endLabelLeft){const a=o(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),X[e.id]||(X[e.id]={}),X[e.id].endLeft=r,O(c,e.endLabelLeft)}if(e.endLabelRight){const a=o(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");c=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),X[e.id]||(X[e.id]={}),X[e.id].endRight=r,O(c,e.endLabelRight)}return s};function O(t,e){(0,r.c)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const j=(t,e)=>{r.l.info("Moving label abc78 ",t.id,t.label,W[t.id]);let a=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const n=W[t.id];let i=t.x,s=t.y;if(a){const n=r.u.calcLabelPosition(a);r.l.info("Moving label "+t.label+" from (",i,",",s,") to (",n.x,",",n.y,") abc78"),e.updatedPath&&(i=n.x,s=n.y)}n.attr("transform","translate("+i+", "+s+")")}if(t.startLabelLeft){const e=X[t.id].startLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}if(t.startLabelRight){const e=X[t.id].startRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}if(t.endLabelLeft){const e=X[t.id].endLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}if(t.endLabelRight){const e=X[t.id].endRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",a);n=e.x,i=e.y}e.attr("transform","translate("+n+", "+i+")")}},D=(t,e)=>{r.l.warn("abc88 cutPathAtIntersect",t,e);let a=[],n=t[0],i=!1;return t.forEach((t=>{if(r.l.info("abc88 checking point",t,e),((t,e)=>{const a=t.x,r=t.y,n=Math.abs(e.x-a),i=Math.abs(e.y-r),s=t.width/2,l=t.height/2;return n>=s||i>=l})(e,t)||i)r.l.warn("abc88 outside",t,n),n=t,i||a.push(t);else{const s=((t,e,a)=>{r.l.warn(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(a)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,s=Math.abs(n-a.x),l=t.width/2;let o=a.x<e.x?l-s:l+s;const d=t.height/2,c=Math.abs(e.y-a.y),h=Math.abs(e.x-a.x);if(Math.abs(i-e.y)*l>Math.abs(n-e.x)*d){let t=a.y<e.y?e.y-d-i:i-d-e.y;o=h*t/c;const n={x:a.x<e.x?a.x+o:a.x-h+o,y:a.y<e.y?a.y+c-t:a.y-c+t};return 0===o&&(n.x=e.x,n.y=e.y),0===h&&(n.x=e.x),0===c&&(n.y=e.y),r.l.warn(`abc89 topp/bott calc, Q ${c}, q ${t}, R ${h}, r ${o}`,n),n}{o=a.x<e.x?e.x-l-n:n-l-e.x;let t=c*o/h,i=a.x<e.x?a.x+h-o:a.x-h+o,s=a.y<e.y?a.y+t:a.y-t;return r.l.warn(`sides calc abc89, Q ${c}, q ${t}, R ${h}, r ${o}`,{_x:i,_y:s}),0===o&&(i=e.x,s=e.y),0===h&&(i=e.x),0===c&&(s=e.y),{x:i,y:s}}})(e,n,t);r.l.warn("abc88 inside",t,n,s),r.l.warn("abc88 intersection",s);let l=!1;a.forEach((t=>{l=l||t.x===s.x&&t.y===s.y})),a.some((t=>t.x===s.x&&t.y===s.y))?r.l.warn("abc88 no intersect",s,a):a.push(s),i=!0}})),r.l.warn("abc88 returning points",a),a},N=function(t,e,a,i,s,l,o){let d=a.points,c=!1;const h=l.node(e.v);var p=l.node(e.w);r.l.info("abc88 InsertEdge: ",a),p.intersect&&h.intersect&&(d=d.slice(1,a.points.length-1),d.unshift(h.intersect(d[0])),r.l.info("Last point",d[d.length-1],p,p.intersect(d[d.length-1])),d.push(p.intersect(d[d.length-1]))),a.toCluster&&(r.l.info("to cluster abc88",i[a.toCluster]),d=D(a.points,i[a.toCluster].node),c=!0),a.fromCluster&&(r.l.info("from cluster abc88",i[a.fromCluster]),d=D(d.reverse(),i[a.fromCluster].node).reverse(),c=!0);const g=d.filter((t=>!Number.isNaN(t.y)));let y=n.$0Z;!a.curve||"graph"!==s&&"flowchart"!==s||(y=a.curve);const{x:f,y:w}=Y(a),x=(0,n.jvg)().x(f).y(w).curve(y);let u;switch(a.thickness){case"normal":u="edge-thickness-normal";break;case"thick":case"invisible":u="edge-thickness-thick";break;default:u=""}switch(a.pattern){case"solid":u+=" edge-pattern-solid";break;case"dotted":u+=" edge-pattern-dotted";break;case"dashed":u+=" edge-pattern-dashed"}const b=t.append("path").attr("d",x(g)).attr("id",a.id).attr("class"," "+u+(a.classes?" "+a.classes:"")).attr("style",a.style);let m="";((0,r.c)().flowchart.arrowMarkerAbsolute||(0,r.c)().state.arrowMarkerAbsolute)&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),r.l.info("arrowTypeStart",a.arrowTypeStart),r.l.info("arrowTypeEnd",a.arrowTypeEnd),P(b,a,m,o,s);let k={};return c&&(k.updatedPath=d),k.originalPath=a.points,k}}}]); \ No newline at end of file diff --git a/assets/js/273.2df474a7.js b/assets/js/273.2df474a7.js new file mode 100644 index 000000000..158cee6ec --- /dev/null +++ b/assets/js/273.2df474a7.js @@ -0,0 +1,540 @@ +"use strict"; +exports.id = 273; +exports.ids = [273]; +exports.modules = { + +/***/ 67273: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64218); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +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, 9, 10]; + var parser2 = { + trace: function trace() { + }, + 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 anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + $$.length - 1; + switch (yystate) { + case 1: + return yy; + case 4: + break; + case 6: + yy.setInfo(true); + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])], + defaultActions: { 4: [2, 1] }, + 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 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": 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_INFO_DB = { + info: false +}; +let info = DEFAULT_INFO_DB.info; +const setInfo = (toggle) => { + info = toggle; +}; +const getInfo = () => info; +const clear = () => { + info = DEFAULT_INFO_DB.info; +}; +const db = { + clear, + setInfo, + getInfo +}; +const draw = (text, id, version) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering info diagram\n" + text); + const svg = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.z)(id); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, 100, 400, true); + const group = svg.append("g"); + group.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version}`); +}; +const renderer = { draw }; +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/277.16e6ff67.js b/assets/js/277.16e6ff67.js new file mode 100644 index 000000000..afabcc75c --- /dev/null +++ b/assets/js/277.16e6ff67.js @@ -0,0 +1,10814 @@ +"use strict"; +exports.id = 277; +exports.ids = [277]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 59277: +/***/ ((__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_401768ef_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(60885); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76365); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + + +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cy", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("class", "divider").attr("x2", (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", classBox.width + 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", classBox.height + 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).text(txt); + if (!isFirst2) { + tSpan.attr("dy", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight); + } + }; + const title = g.append("text").attr("x", 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 1.3 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr( + "y", + titleHeight + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding * 0.4 + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin + (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y1", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("y2", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", width + 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", descrBox.height + titleHeight + 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const addTitleAndBox = (g, stateDef, altBkg) => { + const pad = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const dblPad = 2 * (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift).attr("font-size", (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 3).attr("rx", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", graphBox.height + 3 + 2 * (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("rx", (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding).attr( + "cx", + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ).attr( + "cy", + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ); + return g.append("circle").attr("class", "end-state-inner").attr("r", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2).attr("cy", (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2); +}; +const drawForkJoinState = (g, stateDef) => { + let width = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkWidth; + let height = (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_04fb0060_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, "<br/>"); + text = text.replace(/\n/g, "<br/>"); + const lines = text.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.e.lineBreakRegex); + let tHeight = 1.25 * (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + span.attr("y", y + textHeight + 1.25 * (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + note.attr("width", textWidth + (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + stateInfo.height = stateBox.height + 2 * (0,_mermaid_04fb0060_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_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.AGGREGATION: + return "aggregation"; + case _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.EXTENSION: + return "extension"; + case _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.COMPOSITION: + return "composition"; + case _styles_401768ef_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 */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); + let url = ""; + if ((0,_mermaid_04fb0060_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_401768ef_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); + const rows = _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info(boundstmp.x, x, y + titleHeight); + if (titleHeight === 0) { + const titleBox = title.node().getBBox(); + titleHeight = titleBox.height; + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2).attr("y", y - boxHeight / 2 - (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2 - 3.5).attr("width", maxWidth + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", boxHeight + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().state; + const securityLevel = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + _mermaid_04fb0060_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_04fb0060_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 */ .k({ + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Count=", graph.nodeCount(), graph); + let cnt = 0; + relations.forEach(function(relation) { + cnt++; + _mermaid_04fb0060_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_04fb0060_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 */ .bK)(graph); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Doc rendered", stateInfo, graph); + return stateInfo; +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 60885: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76365); + +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, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.G)(), + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.t)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.r +}; +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/2788.9cb2f862.js b/assets/js/2788.9cb2f862.js new file mode 100644 index 000000000..1cb36d5c0 --- /dev/null +++ b/assets/js/2788.9cb2f862.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2788],{2788:(t,i,e)=>{e.d(i,{diagram:()=>O});var s=e(6365),n=e(9261),a=e(4218),h=(e(7484),e(7967),e(7856),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;a<n.length;a++)if((e=this._input.match(this.rules[n[a]]))&&(!i||e[0].length>i[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<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/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.tiA)().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=(0,a.tiA)().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.BYU)().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.BYU)().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.jvg)().y((t=>t[0])).x((t=>t[1]))(t):(0,a.jvg)().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()}calculateHorizonatalSpace(){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.calculateHorizonatalSpace():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.D)(),i=(0,s.E)();return(0,s.B)(t.xyChart,i.themeVariables.xyChart)}function I(){const t=(0,s.E)();return(0,s.B)(s.A.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.E)();return(0,s.d)(t.trim(),i)}function B(t,i){D.xAxis={type:"linear",title:D.xAxis.title,min:t,max:i},P=!0}function z(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;B(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 O={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.r)(),C.build(T,D,R,k)},clear:function(){(0,s.t)(),_=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.r,getAccDescription:s.a,setAccDescription:s.b,setOrientation:function(t){T.chartOrientation="horizontal"===t?"horizontal":"vertical"},setXAxisTitle:function(t){D.xAxis.title=$(t.text)},setXAxisRangeData:B,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=z(i);D.plots.push({type:"line",strokeFill:W(_),strokeWidth:2,data:e}),_++},setBarData:function(t,i){const e=z(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.z)(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/2924.5200593f.js b/assets/js/2924.5200593f.js new file mode 100644 index 000000000..b9feb3b65 --- /dev/null +++ b/assets/js/2924.5200593f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2924],{2924:(t,e,s)=>{s.d(e,{d:()=>D,p:()=>r,s:()=>_});var n=s(4218),i=s(6365),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],I=[1,8,9,39],x=[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],Y=[1,110],z=[1,108],K=[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(I,[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:x,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:Y,73:z,74:K,75:99,77:100,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},{74:[1,111]},{13:x,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(I,[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:Y,73:z,74:K,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(I,[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:Y,73:z,74:K,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:Y,73:z,74:K,80:j,81:Q,82:X,83:W,84:q,85:H}),t(J,[2,8]),t(I,[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;u<i.length;u++)if((s=this._input.match(this.rules[i[u]]))&&(!e||s[0].length>e[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.v)(this.id);"method"===this.memberType&&(t+=`(${(0,i.v)(this.parameters.trim())})`,this.returnType&&(t+=" : "+(0,i.v)(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<n.length;t++){let e=n[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),n[t]=e}}0===n.length&&n.push(t),E.push((function(){const s=document.querySelector(`[id="${t}"]`);null!==s&&s.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)}))}},T=function(t){let e=(0,n.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,n.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,n.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,n.Ys)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,n.Ys)(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.t)()},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.r,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/2950.857e63af.js b/assets/js/2950.857e63af.js new file mode 100644 index 000000000..8339b1b79 --- /dev/null +++ b/assets/js/2950.857e63af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2950],{2950:(t,e,i)=>{i.d(e,{diagram:()=>d});var n=i(6365),s=i(4218),r=(i(7484),i(7967),i(7856),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],s=[1,6],r=[1,10,12,14,16,18,19,20,21,22],l=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],c=[20,21,22],o=[2,7],h=[1,12],u=[1,13],y=[1,14],p=[1,15],d=[1,16],g=[1,17],_={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",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:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,e,i,n,s,r,l){var a=r.length-1;switch(s){case 3:n.setShowData(!0);break;case 6:this.$=r[a-1];break;case 8:n.addSection(r[a-1],n.cleanupValue(r[a]));break;case 9:this.$=r[a].trim(),n.setDiagramTitle(this.$);break;case 10:this.$=r[a].trim(),n.setAccTitle(this.$);break;case 11:case 12:this.$=r[a].trim(),n.setAccDescription(this.$);break;case 13:n.addSection(r[a].substr(8)),this.$=r[a].substr(8)}},table:[{3:1,4:2,5:e,20:i,21:n,22:s},{1:[3]},{3:7,4:2,5:e,20:i,21:n,22:s},t(r,l,{6:8,7:[1,9]}),t(a,[2,14]),t(a,[2,15]),t(a,[2,16]),{1:[2,1]},t(c,o,{8:10,9:11,1:[2,2],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,l,{6:18}),t(r,[2,5]),{4:19,20:i,21:n,22:s},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},t(c,[2,12]),t(c,[2,13]),t(c,o,{8:10,9:11,1:[2,3],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,[2,6]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11])],defaultActions:{7:[2,1]},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=[],s=[null],r=[],l=this.table,a="",c=0,o=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var g=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,f,m,b,k,x,v,S,w,$={};;){if(f=i[i.length-1],this.defaultActions[f]?m=this.defaultActions[f]:(null==_&&(w=void 0,"number"!=typeof(w=n.pop()||u.lex()||1)&&(w instanceof Array&&(w=(n=w).pop()),w=e.symbols_[w]||w),_=w),m=l[f]&&l[f][_]),void 0===m||!m.length||!m[0]){var E="";for(k in S=[],l[f])this.terminals_[k]&&k>2&&S.push("'"+this.terminals_[k]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[_]||_,line:u.yylineno,loc:d,expected:S})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+_);switch(m[0]){case 1:i.push(_),s.push(u.yytext),r.push(u.yylloc),i.push(m[1]),_=null,o=u.yyleng,a=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(x=this.productions_[m[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[a,o,c,y.yy,m[1],s,r].concat(h))))return b;x&&(i=i.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),i.push(this.productions_[m[1]][0]),s.push($.$),r.push($._$),v=l[i[i.length-2]][i[i.length-1]],i.push(v);break;case 3:return!0}}return!0}},f={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 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: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=[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 i,n,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))),(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 r in s)this[r]=s[r];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 s=this._currentRules(),r=0;r<s.length;r++)if((i=this._input.match(this.rules[s[r]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,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[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:case 1:case 3:case 4:break;case 2:return 20;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/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,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};function m(){this.yy={}}return _.lexer=f,m.prototype=_,_.Parser=m,new m}());r.parser=r;const l=r,a=n.A.pie,c={},o=!1;let h=c,u=o;const y=structuredClone(a),p={getConfig:()=>structuredClone(y),clear:()=>{h=structuredClone(c),u=o,(0,n.t)()},setDiagramTitle:n.q,getDiagramTitle:n.r,setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addSection:(t,e)=>{t=(0,n.d)(t,(0,n.c)()),void 0===h[t]&&(h[t]=e,n.l.debug(`added new section: ${t}, with value: ${e}`))},getSections:()=>h,cleanupValue:t=>(":"===t.substring(0,1)&&(t=t.substring(1).trim()),Number(t.trim())),setShowData:t=>{u=t},getShowData:()=>u},d={parser:l,db:p,renderer:{draw:(t,e,i,r)=>{n.l.debug("rendering pie chart\n"+t);const l=r.db,a=(0,n.c)(),c=(0,n.B)(l.getConfig(),a.pie),o=18,h=450,u=(0,n.z)(e),y=u.append("g"),p=l.getSections();y.attr("transform","translate(225,225)");const{themeVariables:d}=a;let[g]=(0,n.C)(d.pieOuterStrokeWidth);g??(g=2);const _=c.textPosition,f=Math.min(450,h)/2-40,m=(0,s.Nb1)().innerRadius(0).outerRadius(f),b=(0,s.Nb1)().innerRadius(f*_).outerRadius(f*_);y.append("circle").attr("cx",0).attr("cy",0).attr("r",f+g/2).attr("class","pieOuterCircle");const k=(t=>{const e=Object.entries(t).map((t=>({label:t[0],value:t[1]}))).sort(((t,e)=>e.value-t.value));return(0,s.ve8)().value((t=>t.value))(e)})(p),x=[d.pie1,d.pie2,d.pie3,d.pie4,d.pie5,d.pie6,d.pie7,d.pie8,d.pie9,d.pie10,d.pie11,d.pie12],v=(0,s.PKp)(x);y.selectAll("mySlices").data(k).enter().append("path").attr("d",m).attr("fill",(t=>v(t.data.label))).attr("class","pieCircle");let S=0;Object.keys(p).forEach((t=>{S+=p[t]})),y.selectAll("mySlices").data(k).enter().append("text").text((t=>(t.data.value/S*100).toFixed(0)+"%")).attr("transform",(t=>"translate("+b.centroid(t)+")")).style("text-anchor","middle").attr("class","slice"),y.append("text").text(l.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const w=y.selectAll(".legend").data(v.domain()).enter().append("g").attr("class","legend").attr("transform",((t,e)=>"translate(216,"+(22*e-22*v.domain().length/2)+")"));w.append("rect").attr("width",o).attr("height",o).style("fill",v).style("stroke",v),w.data(k).append("text").attr("x",22).attr("y",14).text((t=>{const{label:e,value:i}=t.data;return l.getShowData()?`${e} [${i}]`:e}));const $=512+Math.max(...w.selectAll("text").nodes().map((t=>(null==t?void 0:t.getBoundingClientRect().width)??0)));u.attr("viewBox",`0 0 ${$} 450`),(0,n.i)(u,h,$,c.useMaxWidth)}},styles:t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${t.pieOuterStrokeColor};\n stroke-width: ${t.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/2b07918c.e2871f9b.js b/assets/js/2b07918c.bfd74b30.js similarity index 92% rename from assets/js/2b07918c.e2871f9b.js rename to assets/js/2b07918c.bfd74b30.js index ccd406d09..f12cf7cc0 100644 --- a/assets/js/2b07918c.e2871f9b.js +++ b/assets/js/2b07918c.bfd74b30.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8798],{1268:e=>{e.exports=JSON.parse('{"label":"Journey","permalink":"/docs/tags/journey","allTagsPath":"/docs/tags","count":3,"items":[{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8798],{1268:e=>{e.exports=JSON.parse('{"label":"Journey","permalink":"/docs/tags/journey","allTagsPath":"/docs/tags","count":3,"items":[{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/2cf43088.5c1dd59f.js b/assets/js/2cf43088.5c1dd59f.js new file mode 100644 index 000000000..0b77edc2b --- /dev/null +++ b/assets/js/2cf43088.5c1dd59f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6167],{2845:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var a=n(5893),o=n(1151),i=n(3992),r=n(425),s=n(1872);const l={id:"sfmc-cloud-page-apps",title:"Solve with Cloud Page Apps",description:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",image:"img/og/og-image-solve-with-cloud-page-apps.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},c=void 0,d={id:"ssjs/snippets/sfmc-cloud-page-apps",title:"Solve with Cloud Page Apps",description:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",source:"@site/docs/ssjs/snippets/sfmc-cloud-page-apps.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/sfmc-cloud-page-apps",permalink:"/docs/ssjs/snippets/sfmc-cloud-page-apps",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/sfmc-cloud-page-apps.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"App",permalink:"/docs/tags/app"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1691828289,formattedLastUpdatedAt:"Aug 12, 2023",frontMatter:{id:"sfmc-cloud-page-apps",title:"Solve with Cloud Page Apps",description:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",image:"img/og/og-image-solve-with-cloud-page-apps.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},sidebar:"snippets",previous:{title:"SSJS Script Template",permalink:"/docs/ssjs/snippets/ssjs-script-template"},next:{title:"MobileConnect Phone Change",permalink:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"}},u={},p=[{value:"Cloud Page Apps: what and why",id:"cloud-page-apps-what-and-why",level:2},{value:"When out-of-the-box features are not enough",id:"when-out-of-the-box-features-are-not-enough",level:3},{value:"Out-of-the-box approach to out-of-the-box feature",id:"out-of-the-box-approach-to-out-of-the-box-feature",level:3},{value:"Build your dream",id:"build-your-dream",level:2},{value:"Cloud Page Apps step by step",id:"cloud-page-apps-step-by-step",level:2},{value:"Create your first Marketing Cloud micro application",id:"create-your-first-marketing-cloud-micro-application",level:3},{value:"A Good application is a secure application",id:"a-good-application-is-a-secure-application",level:3},{value:"API Integration Component",id:"api-integration-component",level:4},{value:"API Authorisation",id:"api-authorisation",level:4},{value:"API Authentication with Token",id:"api-authentication-with-token",level:4},{value:"Capture your Cloud Page App usage",id:"capture-your-cloud-page-app-usage",level:4},{value:"Secured Cloud Page App Template",id:"secured-cloud-page-app-template",level:3},{value:"Implementation Sum Up",id:"implementation-sum-up",level:2},{value:"Learn more",id:"learn-more",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.m,{content:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features."}),"\n",(0,a.jsx)(t.h2,{id:"cloud-page-apps-what-and-why",children:"Cloud Page Apps: what and why"}),"\n",(0,a.jsx)(t.h3,{id:"when-out-of-the-box-features-are-not-enough",children:"When out-of-the-box features are not enough"}),"\n",(0,a.jsx)(t.p,{children:"Salesforce Marketing Cloud offers a multitude of options. With all the Studios, Builders, and other Salesforce-ecosystem cross-sells, you can deliver nearly anything. Nearly."}),"\n",(0,a.jsx)(t.p,{children:"There will always be some business processes or requirements that are too niche or too unique to be covered out-of-the-box. Sometimes they can be delivered with what is available after some compromises. Sometimes only custom development can help."}),"\n",(0,a.jsx)(t.p,{children:"Depending on the use case and company resources, you can overcome such challenges in two ways. By shopping at AppExchange - Salesforce App Store with 3rd Party solutions - or by building a custom application connected to Marketing Cloud with APIs (for example, leveraging yet another Salesforce product - Heroku)."}),"\n",(0,a.jsx)(t.p,{children:"AppExchange might be a great idea if you can find a product solving your problem, but it will add a recurring cost to your budget. On the other hand, a fully-fledged custom application might deliver precisely what you need but create considerable up-front cost (in either money for external developers or time for an in-house team) and require maintenance."}),"\n",(0,a.jsx)(t.p,{children:"There is, however, the third path. One that can be perfect if you have a necessary but relatively small requirement for internally used power-up and would instead go lean on both budget and time \u2014 Marketing Cloud micro application."}),"\n",(0,a.jsx)(t.h3,{id:"out-of-the-box-approach-to-out-of-the-box-feature",children:"Out-of-the-box approach to out-of-the-box feature"}),"\n",(0,a.jsx)(t.p,{children:"Marketing Cloud micro application offers AppExchange-style deep integration with Marketing Cloud platform and solution flexibility of custom development. In short, it is an application hosted on a Cloud Page and available via the main menu of Marketing Cloud. A Cloud Page App."}),"\n",(0,a.jsx)(t.p,{children:"The good? You can use Marketing Cloud programmatic languages (SSJS and AMPScript) with all their nifty built-in functions to control the assets and behaviours of the SFMC platform and connected Sales & Service Clouds. You can also leverage the APIs to gather even more power and pull external logic and data. All this without having to care about hosting, scaling and integration. Available directly from the Marketing Cloud menu. And cost? Just a super message for loading a Cloud Page."}),"\n",(0,a.jsxs)(t.p,{children:["The bad? It is suitable for relatively simple apps. Think about a single front-end page powered by an SSJS or AMPScript backend on a ",(0,a.jsx)(t.a,{href:"/docs/config/sfmc-code-resource",children:"Code Resource"}),". Of course, you can try to build something more complex, but you may quickly get into a place where the whole endeavour would have been easier with an outside-hosted application."]}),"\n",(0,a.jsx)(t.h2,{id:"build-your-dream",children:"Build your dream"}),"\n",(0,a.jsx)(t.p,{children:"So what can you do with such a solution? Possibilities are endless, but to share a few use cases:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Marketing Cloud Asset Viewer that allows you to quickly locate, for example, a Data Extension or Content asset."}),"\n",(0,a.jsx)(t.li,{children:"Data Extension Analyzer for quick data analysis or even visualisation of values from a selected Data Extension."}),"\n",(0,a.jsx)(t.li,{children:"KPI Dashboard displaying the most critical data for understanding your communication's current state - or even related data from Sales or Service Cloud imported using functions enabled by Marketing Cloud Connect."}),"\n",(0,a.jsx)(t.li,{children:"Deliverability Dashboard pulling data from Marketing Cloud and external deliverability monitoring and alerting tools."}),"\n",(0,a.jsx)(t.li,{children:"Documentation or FAQ related to your company processes and best practices that everyone should follow when building customer experience through Marketing Cloud."}),"\n",(0,a.jsx)(t.li,{children:"Templated Journey creator to deploy tested flows for most used campaigns in a single click."}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Anything related to Marketing Cloud that you wish could be a bit more automated or easy can be a good idea for a micro application approach."}),"\n",(0,a.jsx)(t.h2,{id:"cloud-page-apps-step-by-step",children:"Cloud Page Apps step by step"}),"\n",(0,a.jsx)(t.h3,{id:"create-your-first-marketing-cloud-micro-application",children:"Create your first Marketing Cloud micro application"}),"\n",(0,a.jsx)(t.p,{children:"Implementation is very straightforward, and you can do it in few minutes:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:'Create a simple Cloud Page (blank page with a "Hello World" will do the job for now).'}),"\n",(0,a.jsx)(t.li,{children:"Publish it and copy the URL of the Cloud Page."}),"\n",(0,a.jsx)(t.li,{children:"Go to Marketing Cloud Setup -> Apps -> Installed Packages and create a New Package."}),"\n",(0,a.jsxs)(t.li,{children:["Add a ",(0,a.jsx)(t.code,{children:"Marketing Cloud App"})," Component to the Package and paste the Cloud Page URL in both Endpoint fields and Save."]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"That's all. You just created your first Marketing Cloud micro application. Refresh Marketing Cloud to see it available in the main menu under the AppExchange icon. Now it's time to build up your solution to solve the business need."}),"\n",(0,a.jsx)(t.h3,{id:"a-good-application-is-a-secure-application",children:"A Good application is a secure application"}),"\n",(0,a.jsx)(t.p,{children:"Your micro application is now available from the Marketing Cloud menu. But unfortunately, it can also be accessed from any other place, as it is still just a simple Cloud Page. It is, of course, not ideal. You don't want random people to access your API-fueled solution."}),"\n",(0,a.jsx)(t.h4,{id:"api-integration-component",children:"API Integration Component"}),"\n",(0,a.jsx)(t.p,{children:"Thankfully, you can leverage the already created Installed Package to secure the micro application cleanly. To do so, add yet another Component to the Package - this time, you will need API Integration one. Select Web App integration type and paste your micro application Cloud Page URL to the Redirect URI field."}),"\n",(0,a.jsx)(t.p,{children:"You don't need to select anything in the Scope to secure your micro application. But if you plan on using the API calls, feel free to choose the required areas now. If you only want to leverage built-in SSJS and AMPScript functions, keep them unchecked."}),"\n",(0,a.jsxs)(t.p,{children:["Once you save the Component, you will see that your Installed Package API Component now lists: ",(0,a.jsx)(t.code,{children:"Client Id"}),", ",(0,a.jsx)(t.code,{children:"Client Secret"}),", and ",(0,a.jsx)(t.code,{children:"API Base URI"}),". Copy those, as you will need them in the next step."]}),"\n",(0,a.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,a.jsxs)(t.p,{children:["After you create your Installed Package, three base URI's are available - Authentication, REST and SOAP. After the ",(0,a.jsx)(t.code,{children:"https://"}),", all of them have a common alphanumeric string with hyphens unique to your SFMC. I copy only this part to build any endpoint necessary for the application."]}),(0,a.jsxs)(t.p,{children:["For example, for ",(0,a.jsx)(t.code,{children:"https://abcdefghi-jklmnoprst-123456.auth.marketingcloudapis.com/"}),", the ",(0,a.jsx)(t.code,{children:"API Base URI"})," is ",(0,a.jsx)(t.code,{children:"abcdefghi-jklmnoprst-123456"}),"."]})]}),"\n",(0,a.jsx)(t.h4,{id:"api-authorisation",children:"API Authorisation"}),"\n",(0,a.jsxs)(t.p,{children:["With the above pre-work completed, you can use SSJS or AMPScript on your Cloud Page to redirect to the ",(0,a.jsx)(t.code,{children:"v2/authorize"})," endpoint of your Authentication Base URI before loading. It will require any visitor to log into your Marketing Cloud to load your micro application. What's even better, it will automatically load it for users already logged in (micro Single Sign-On)."]}),"\n",(0,a.jsxs)(t.p,{children:["You will need to pass ",(0,a.jsx)(t.code,{children:"Client Id"})," and ",(0,a.jsx)(t.code,{children:"Cloud Page URL"})," (for redirect after successful login) as query parameters to your authorisation redirect. Another necessary thing is Response Type equal to code. Finally, you can pass a State. The value of this parameter will be available after the redirect. It is excellent for recognising whether someone opened your micro application before (no state) or after (available state) logging in."]}),"\n",(0,a.jsxs)(i.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],children:[(0,a.jsx)(r.Z,{value:"ssjs",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'{7} title="API Authentication Flow"',children:"var appURL = 'APP_CLOUD_PAGE_URL';\nvar clientID = 'CLIENT_ID';\nvar clientSecret = 'CLIENT_SECRET';\nvar clientBase = 'API_BASE_URI';\nvar state = GUID();\n\nPlatform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);\n"})})}),(0,a.jsx)(r.Z,{value:"ampscript",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'{9-13} title="API Authentication Flow"',children:"VAR @clientID, @clientSecret, @clientBase, @appURL, @session, @requestURL\n\nSET @clientID = 'CLIENT_ID'\nSET @clientSecret = 'CLIENT_SECRET'\nSET @clientBase = 'API_BASE_URI'\nSET @appURL = 'APP_CLOUD_PAGE_URL'\nSET @session = GUID()\n\nSET @requestURL = Concat(\n 'https://', @clientBase, '.auth.marketingcloudapis.com/v2/authorize',\n '?response_type=code&client_id=', @clientID,\n '&redirect_uri=', @appURL, '&state=', @session)\nRedirect(@requestURL)\n"})})})]}),"\n",(0,a.jsx)(t.h4,{id:"api-authentication-with-token",children:"API Authentication with Token"}),"\n",(0,a.jsxs)(t.p,{children:["Once your micro application refreshes after authorisation, you can get the code query string parameter with SSJS or AMPScript function and use it to make a POST API call to Authentication Base URI - this time to ",(0,a.jsx)(t.code,{children:"v2/token"})," endpoint. As the code from the authorisation endpoint is required in the payload, the fact of receiving the token in the response will validate that the visitor is eligible to access the micro application and use it."]}),"\n",(0,a.jsxs)(i.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],children:[(0,a.jsxs)(r.Z,{value:"ssjs",children:[(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'{15} title="API Token Authorisation Flow"',children:"var appURL = 'APP_CLOUD_PAGE_URL';\nvar clientID = 'CLIENT_ID';\nvar clientSecret = 'CLIENT_SECRET';\nvar clientBase = 'API_BASE_URI';\n\nvar code = Platform.Request.GetQueryStringParameter('code');\nvar payload = {\n grant_type: 'authorization_code',\n code: code,\n client_id: clientID,\n client_secret: clientSecret,\n redirect_uri: appURL\n};\n\nvar response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));\n\nif (response.StatusCode == 200) {\n var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);\n var accessToken = parsedResponse.access_token;\n var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());\n tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);\n};\n\n"})}),(0,a.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,a.jsxs)(t.p,{children:["If you want to use the token for API in the context of a specific Business Unit, add ",(0,a.jsx)(t.code,{children:"account_id: businessUnitMID,"})," to the ",(0,a.jsx)(t.code,{children:"payload"})," to get the right token. Otherwise you will get autorization errors on API calls."]})})]}),(0,a.jsxs)(r.Z,{value:"ampscript",children:[(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'{19} title="API Token Authorisation Flow"',children:"VAR @clientID, @clientSecret, @clientBase, @appURL, @code, @requestURL, @token, @APIStatus, @response\n\nSET @clientID = 'CLIENT_ID';\nSET @clientSecret = 'CLIENT_SECRET';\nSET @clientBase = 'API_BASE_URI';\nSET @appURL = 'APP_CLOUD_PAGE_URL';\nSET @code = RequestParameter('code');\n\nSET @requestURL = Concat('https://', @clientBase, '.auth.marketingcloudapis.com/v2/token');\n\nSET @payload = Concat(\n '{\"grant_type\": \"authorization_code\", ',\n '\"code\": \"', @code, '\",',\n '\"client_id\": \"', @clientID, '\",',\n '\"client_secret\": \"', @clientSecret, '\",',\n '\"redirect_uri\": \"', @appURL, '\"}'\n)\n\nHTTPPost2(@requestURL, 'application/json', @payload, false, @APIStatus, @response)\nSET @token = Substring(@APIStatus, 18, 512)\n"})}),(0,a.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,a.jsxs)(t.p,{children:["If you want to use the token for API in the context of a specific Business Unit, add ",(0,a.jsx)(t.code,{children:"'\"account_id\": \"', @businessUnitMID, '\",',"})," to the ",(0,a.jsx)(t.code,{children:"@payload"})," to get the right token. Otherwise you will get autorization errors on API calls."]})})]})]}),"\n",(0,a.jsx)(t.p,{children:"This way, you just added a micro Single Sign-On feature that is as secure as your Marketing Cloud. And that's not all! As now only your Marketing Cloud users can access the application, you can leverage the Installed Package Access tab to control who will see your solution in the main menu."}),"\n",(0,a.jsx)(t.p,{children:"Now you have a secure, SSO-enabled micro application deeply integrated with Marketing Cloud ready to solve your business needs and power up your Marketing Team."}),"\n",(0,a.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,a.jsx)(t.p,{children:"Adding this micro SSO process blocks Web Studio from loading the Cloud Page in Preview. During development, you either have to comment out the SSO or validate the changes only by publishing and checking in the Cloud Page App directly."}),(0,a.jsx)(t.p,{children:"It also increases the cost of using the micro application from 1 Super Message per use to 2, due to Cloud Page refresh during authorization."})]}),"\n",(0,a.jsx)(t.h4,{id:"capture-your-cloud-page-app-usage",children:"Capture your Cloud Page App usage"}),"\n",(0,a.jsx)(t.p,{children:"We can also add a logging solution that will store session and log app use history. We will need a Data Extension (one can serve multiple Cloud Page Apps) and a bit more code around the above snippets."}),"\n",(0,a.jsxs)(t.p,{children:["Create Data Extension with the following structure (",(0,a.jsx)(t.code,{children:"session"})," column being the Primary Key):"]}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Name"}),(0,a.jsx)(t.th,{children:"DataType"}),(0,a.jsx)(t.th,{children:"Default Value"}),(0,a.jsx)(t.th,{children:"Length"}),(0,a.jsx)(t.th,{children:"Nullable"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"\ud83d\udd11 session"}),(0,a.jsx)(t.td,{children:"Text"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"50"}),(0,a.jsx)(t.td,{children:"No"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"appName"}),(0,a.jsx)(t.td,{children:"Text"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"100"}),(0,a.jsx)(t.td,{children:"Yes"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"createdDate"}),(0,a.jsx)(t.td,{children:"Date"}),(0,a.jsx)(t.td,{children:"Current date"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"Yes"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"token"}),(0,a.jsx)(t.td,{children:"Text"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"520"}),(0,a.jsx)(t.td,{children:"Yes"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"tokenExpire"}),(0,a.jsx)(t.td,{children:"Date"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"Yes"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"userName"}),(0,a.jsx)(t.td,{children:"Text"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"100"}),(0,a.jsx)(t.td,{children:"Yes"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"userEmail"}),(0,a.jsx)(t.td,{children:"Text"}),(0,a.jsx)(t.td,{}),(0,a.jsx)(t.td,{children:"254"}),(0,a.jsx)(t.td,{children:"Yes"})]})]})]}),"\n",(0,a.jsx)(t.p,{children:"As for data retention, one day for Individual Records is enough for authorisation purposes. However, you can extend it for logging history purposes. Keep in mind that the more data stored, the slower the Data Extension operations speeds. Pushing data to this table is straightforward:"}),"\n",(0,a.jsxs)(i.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],children:[(0,a.jsx)(r.Z,{value:"ssjs",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="Fill Cloud Page App Logging Data Extension"',children:"Platform.Function.UpsertData(authDE, ['session'], [state], ['appName', 'token', 'tokenExpire'], [appName, accessToken, tokenExpire]);\n"})})}),(0,a.jsx)(r.Z,{value:"ampscript",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="Fill Cloud Page App Logging Data Extension"',children:"UpsertData(@authDE, 1, 'session', @state, 'appName', @appName, 'token', @token, 'tokenExpire', DateAdd(Now(), 18, 'MI'))\n"})})})]}),"\n",(0,a.jsx)(t.p,{children:"It will additionally allow you to safely split your application into the front end (Cloud Page) and back end (Code Resource) to improve user experience and optimise speed and cost."}),"\n",(0,a.jsx)(t.h3,{id:"secured-cloud-page-app-template",children:"Secured Cloud Page App Template"}),"\n",(0,a.jsx)(t.p,{children:"By considering all the above, we get a robust and secure template for our Cloud Page Apps:"}),"\n",(0,a.jsxs)(i.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],children:[(0,a.jsxs)(r.Z,{value:"ssjs",children:[(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="Full Cloud Page App Template"',children:"<script runat=\"server\">\n /* -------------------------------------------------------------------------\n\n Authenticates each visitor to limit access only to SFMC logged-in users.\n\n 1. Global Variables\n 2. Helper Functions\n 2.1. Debugging\n 2.2. Error handling\n 3. Authentication Flow\n 3.1. Authorisation\n 3.2. Authentication with REST Token\n 3.2.1. Build token request payload\n 3.2.2. Request the token\n 3.2.3. Destructure the response\n 3.2.4. Get User Details\n 3.2.5. Upsert Logging Data Extension\n 3.2.6. Handle authentication error\n 3.3. Authorisation Error\n\n -------------------------------------------------------------------------- */\n\n Platform.Load('core', '1');\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n var debugging = false;\n var appName = 'CLOUD_APP_NAME';\n var appURL = 'APP_CLOUD_PAGE_URL';\n\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n var authDE = 'AUTHENTICATION_DATA_EXTENSION';\n\n var state = Platform.Request.GetQueryStringParameter('state');\n\n var errorMessage = Platform.Request.GetQueryStringParameter('error');\n var errorDescription = Platform.Request.GetQueryStringParameter('error_description');\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Debugging --------------------------------- */\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /* ---------------------- 2.2. Error handling ---------------------------- */\n\n /**\n * @function handleError\n * @description Adds the error with context to error logging Data Extension and redirects to error page.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(errorDE, ['id', 'appName', 'errorMessage', 'errorDescription'], [GUID(), appName, error.message, error.description]);\n Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);\n };\n };\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 3. AUTHENTICATION FLOW ------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 3.1. Authorization ----------------------------- */\n\n if (!state && !errorMessage) {\n state = GUID();\n Platform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);\n\n /* ---------------------- 3.2. Authentication ---------------------------- */\n\n } else if (state) {\n /* 3.2.1. Build token request payload */\n var code = Platform.Request.GetQueryStringParameter('code');\n var payload = {\n grant_type: 'authorization_code',\n code: code,\n client_id: clientID,\n client_secret: clientSecret,\n redirect_uri: appURL\n };\n /* 3.2.2. Request the token */\n var response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));\n /* 3.2.3. Destructure the response */\n if (response.StatusCode == 200) {\n var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);\n var accessToken = parsedResponse.access_token;\n var appScope = parsedResponse.scope;\n var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());\n tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);\n\n /* 3.2.4. Get User Details */\n response = HTTP.Get('https://' + clientBase + '.auth.marketingcloudapis.com/v2/userinfo', ['Authorization'], ['Bearer ' + accessToken]);\n if (debugging) debugValue('UserInfo Response', response)\n userName = Platform.Function.ParseJSON(response.Content).user.name;\n userEmail = Platform.Function.ParseJSON(response.Content).user.email;\n\n /* 3.2.5. Upsert Authentication Logging Data Extension */\n Platform.Function.UpsertData(authDE, ['session'], [state],\n ['appName', 'token', 'tokenExpire', 'userName', 'userEmail'],\n [appName, accessToken, tokenExpire, userName, userEmail]\n );\n\n /* 3.2.6. Handle authentication error */\n } else {\n handleError({message: 'Authentication Failed', description: 'Status: ' + response.StatusCode})\n };\n\n /* ---------------------- 3.3. Authorization Error ----------------------- */\n\n } else {\n handleError({message: errorMessage, description: errorDescription});\n };\n<\/script>\n\n\x3c!-- The Cloud Page App micro SSO solution will secure anything you create below --\x3e\n"})}),(0,a.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,a.jsxs)(t.p,{children:["Any reload done within the app (Reload/Redirect/Post via Form) should point back to Apps Cloud Page URL with ",(0,a.jsx)(t.code,{children:"'state=' + state"})," appended to it as a query parameter (remember to use ",(0,a.jsx)(t.code,{children:"?"})," if it will be the first parameter or ",(0,a.jsx)(t.code,{children:"&"})," in another case)."]}),(0,a.jsxs)(t.p,{children:["You can also leverage the session to lookup the token for API calls: ",(0,a.jsx)(t.code,{children:"Platform.Function.Lookup(authDE, 'token', 'session', state)"})]})]})]}),(0,a.jsxs)(r.Z,{value:"ampscript",children:[(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="Full Cloud Page App Template"',children:"\x3c!-- Authorisation START --\x3e\n%%[\n /* -------------------------------------------------------------------------\n\n Authenticates each visitor to limit access only to SFMC logged-in users.\n\n 1. Global Variables - should be updated for each implementation\n 2. Authentication Flow\n 2.1. Session Validation\n 2.2. Authorisation\n 2.3. Authentication with REST Token\n 2.3.1. Build token request payload\n 2.3.2. Get the token\n 2.3.3. Upsert Logging Data Extension\n\n -------------------------------------------------------------------------- */\n\n /* ----------------------------------------------------------------------- */\n /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */\n /* ----------------------------------------------------------------------- */\n\n VAR @appName, @clientID, @clientSecret, @clientBase, @appURL, @errorURL, @requestURL, @payload, @APIStatus, @response, @token, @session, @code, @authDE\n\n /* Add clientID, Client Secret, Client Base (part of API Base URL) for all further calls*/\n SET @clientID = 'CLIENT_ID'\n SET @clientSecret = 'CLIENT_SECRET'\n SET @clientBase = 'API_BASE_URI'\n\n /* App Nane and relevant URLs */\n SET @appName = 'CLOUD_APP_NAME'\n SET @appURL = 'APP_CLOUD_PAGE_URL'\n SET @errorURL = 'ERROR_CLOUD_PAGE_URL'\n\n /* Data Extension for Authorisation Logging */\n SET @authDE = 'AUTHENTICATION_DATA_EXTENSION'\n\n /* Capture State and Session for Authorisation purposes */\n SET @state = RequestParameter('state')\n SET @session = RequestParameter('s')\n\n /* ----------------------------------------------------------------------- */\n /* ------------------------- 2. AUTHENTICATION FLOW ---------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Session Validation ------------------------ */\n\n /* If there is Session parameter, validate it with logging DE*/\n IF NOT Empty(@session) THEN\n /* If user was authenticated for another app or if he is not authenticated, redirect to login page */\n IF Lookup(@authDE, 'appName', 'session', @session) != @appName THEN\n Redirect(@appURL)\n ENDIF\n /* Authenticated users jumps to main code */\n\n /* ------------------------- 2.2. Authorization -------------------------- */\n\n /* If there is no Session parameter, start Authorisation flow */\n ELSEIF Empty(@state) AND Empty(@session) THEN\n SET @session = GUID()\n SET @requestURL = Concat(\n 'https://', @clientBase, '.auth.marketingcloudapis.com/v2/authorize',\n '?response_type=code&client_id=', @clientID,\n '&redirect_uri=', @appURL, '&state=', @session)\n Redirect(@requestURL)\n\n /* ------------------------- 2.3. Authentication ------------------------- */\n\n /* If there is state parameter after Authorisation, get the REST Token */\n ELSEIF NOT Empty(@state) THEN\n SET @code = RequestParameter('code')\n SET @requestURL = Concat('https://', @clientBase, '.auth.marketingcloudapis.com/v2/token')\n\n /* 2.3.1. Build token request payload */\n SET @payload = Concat(\n '{\"grant_type\": \"authorization_code\",',\n '\"code\": \"' ,@code, '\",',\n '\"client_id\": \"', @clientID, '\",',\n '\"client_secret\": \"', @clientSecret, '\",',\n '\"redirect_uri\": \"', @appURL, '\"}'\n )\n\n /* 2.3.2. Get the token */\n HTTPPost2(@requestURL, 'application/json', @payload, false, @APIStatus, @response)\n SET @token = Substring(@APIStatus, 18, 512)\n /* Token expires after an 18 minutes */\n\n /* 2.3.2. Upsert Logging Data Extension */\n /* Add record to Logging DE to store the token and validate access with it */\n UpsertData(@authDE,1, 'session' ,@state, 'appName', @appName, 'token', @token, 'tokenExpire', DateAdd(Now(), 18, 'MI'))\n Redirect(Concat(@appURL, '?s=', @state))\n\n /* For any other scenario, redirect to Error Page */\n ELSE\n Redirect(@errorURL)\n\n ENDIF\n /* Remember to pass ?s=%%=v(@session)=%% on each page reload for leverage session validation */\n]%%\n\x3c!-- Authorisation END --\x3e\n\n\x3c!-- The Cloud Page App micro SSO solution will secure anything you create below --\x3e\n"})}),(0,a.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,a.jsxs)(t.p,{children:["Any reload done within the app (Reload/Redirect/Post via Form) should point back to Apps Cloud Page URL with ",(0,a.jsx)(t.code,{children:"s=%%=v(@session)=%%"})," appended to it as a query parameter (remember to use ",(0,a.jsx)(t.code,{children:"?"})," if it will be the first parameter or ",(0,a.jsx)(t.code,{children:"&"})," in another case)."]}),(0,a.jsxs)(t.p,{children:["You can also leverage the session to lookup the token for API calls: ",(0,a.jsx)(t.code,{children:"%%=Lookup(@authDE,'token','session',@session)=%%"})]})]})]})]}),"\n",(0,a.jsx)(t.p,{children:"To implement it, copy and paste the above code to the top of the Cloud Page used for the App. Next, change the values at the top of the code (the uppercase ones) to match your package installation and app details. That's all!"}),"\n",(0,a.jsx)(t.h2,{id:"implementation-sum-up",children:"Implementation Sum Up"}),"\n",(0,a.jsx)(t.p,{children:"There was much information to digest, so it's time for a streamlined step by step guide from zero to hero:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Logging Data Extensions"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["In Content Builder or Email Studio create a ",(0,a.jsx)(t.a,{href:"#capture-your-cloud-page-app-usage",children:"Cloud Page App Logging Data Extension"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["In Content Builder or Email Studio create an ",(0,a.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs#logging-to-data-extension",children:"Error Logging Data Extension"}),"."]}),"\n",(0,a.jsx)(t.li,{children:"In both cases, one is enough for multiple Cloud Page Apps. If stored in the Shared Data Extensions folder, both can serve multiple Business Units."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Cloud Page"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Create a new Cloud Page."}),"\n",(0,a.jsx)(t.li,{children:"Copy the URL."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Installed Package"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Go to System -> Platform Tools -> Apps -> Installed Packages."}),"\n",(0,a.jsxs)(t.li,{children:["Click ",(0,a.jsx)(t.code,{children:"New"})," in the top right corner."]}),"\n",(0,a.jsx)(t.li,{children:"Add Unique Name and Description suggesting the App's purpose."}),"\n",(0,a.jsxs)(t.li,{children:["Marketing Cloud App Component.","\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["Click ",(0,a.jsx)(t.code,{children:"Add Component"})," at the bottom."]}),"\n",(0,a.jsxs)(t.li,{children:["Select ",(0,a.jsx)(t.code,{children:"Marketing Cloud App"})," and click Next."]}),"\n",(0,a.jsx)(t.li,{children:"Add Unique Name and Description suggesting the App's purpose."}),"\n",(0,a.jsx)(t.li,{children:"Add Cloud Page URL copied in step 2.ii as both Login and Logout Endpoint."}),"\n",(0,a.jsxs)(t.li,{children:["Click ",(0,a.jsx)(t.code,{children:"Save"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["API Integration Component.","\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["Click ",(0,a.jsx)(t.code,{children:"Add Component"})," on the right side of the page."]}),"\n",(0,a.jsxs)(t.li,{children:["Select ",(0,a.jsx)(t.code,{children:"API Integration"})," and click Next."]}),"\n",(0,a.jsxs)(t.li,{children:["Select ",(0,a.jsx)(t.code,{children:"Web App"})," and click Next."]}),"\n",(0,a.jsx)(t.li,{children:"Add Cloud Page URL copied in step 2.ii as Redirect URI."}),"\n",(0,a.jsxs)(t.li,{children:["Add Scope of the App (should be minimal, can be extended later) and click ",(0,a.jsx)(t.code,{children:"Save"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:["Copy ",(0,a.jsx)(t.code,{children:"Client Id"}),", ",(0,a.jsx)(t.code,{children:"Client Secret"})," and ",(0,a.jsx)(t.code,{children:"Client Base URI"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Menu Unlock"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Refresh tab with Marketing Cloud."}),"\n",(0,a.jsx)(t.li,{children:"On the main menu pane of Marketing Cloud, hover over AppExchange to see your application."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Secured Template"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["Copy the ",(0,a.jsx)(t.a,{href:"#secured-cloud-page-app-template",children:"template"})," in the prefered language to the Cloud Page from step 2.i."]}),"\n",(0,a.jsx)(t.li,{children:"Update the unique values in the variables at the top part of the template (CAPS_LOCK placeholders)."}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.strong,{children:"Build your solution"})}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,a.jsx)(t.p,{children:"Looking for more? Check out follow up materials for added context and deeper dive:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["Webinar recording on ",(0,a.jsx)(t.a,{href:"/docs/webinars/sfmc-webinar-cloud-page-apps",children:"Cloud Page Apps"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["Webinar recording on ",(0,a.jsx)(t.a,{href:"/docs/webinars/sfmc-webinar-architecting-web-solutions",children:"Architecting Web Solutions in SFMC"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["Article on ",(0,a.jsx)(t.a,{href:"/docs/config/sfmc-code-resource",children:"Power of SFMC Code Resources"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["Article on ",(0,a.jsx)(t.a,{href:"/docs/config/sfmc-appexchange-solutions",children:"SFMC AppExchange Solutions"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["Code Snippets on ",(0,a.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/sfmc-cloud-page-app-template",children:"my GitHub"}),"."]}),"\n"]})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},425:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var a=n(512);const o={tabItem:"tabItem_Ymn6"};var i=n(5893);function r(e){let{children:t,hidden:n,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,r),hidden:n,children:t})}},3992:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(7294),o=n(512),i=n(2957),r=n(6550),s=n(1270),l=n(5238),c=n(3609),d=n(2560);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function g(e){let{queryString:t=!1,groupId:n}=e;const o=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=p(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,u]=g({queryString:n,groupId:o}),[m,x]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,d.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),f=(()=>{const e=c??m;return h({value:e,tabValues:i})?e:null})();(0,s.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!h({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),x(e)}),[u,x,i]),tabValues:i}}var x=n(1048);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=n(5893);function y(e){let{className:t,block:n,selectedValue:a,selectValue:r,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),o=s[n].value;o!==a&&(c(t),r(o))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...i,className:(0,o.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function b(e){let{lazy:t,children:n,selectedValue:o}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function S(e){const t=m(e);return(0,j.jsxs)("div",{className:(0,o.Z)("tabs-container",f.tabList),children:[(0,j.jsx)(y,{...e,...t}),(0,j.jsx)(b,{...e,...t})]})}function v(e){const t=(0,x.Z)();return(0,j.jsx)(S,{...e,children:u(e.children)},String(t))}},1872:(e,t,n)=>{n.d(t,{m:()=>i});n(7294);const a="leadText_qzwo";var o=n(5893);const i=e=>{let{content:t}=e;return(0,o.jsx)(o.Fragment,{children:(0,o.jsx)("p",{id:a,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var a=n(7294);const o={},i=a.createContext(o);function r(e){const t=a.useContext(i);return a.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:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2cf43088.e4910f97.js b/assets/js/2cf43088.e4910f97.js deleted file mode 100644 index f4010d040..000000000 --- a/assets/js/2cf43088.e4910f97.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6167],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(a),m=o,g=c["".concat(s,".").concat(m)]||c[m]||d[m]||r;return a?n.createElement(g,i(i({ref:t},u),{},{components:a})):n.createElement(g,i({ref:t},u))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,i[1]=l;for(var p=2;p<r;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},425:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),o=a(6010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:a},t)}},3992:(e,t,a)=>{a.d(t,{Z:()=>v});var n=a(7462),o=a(7294),r=a(6010),i=a(2957),l=a(6550),s=a(5238),p=a(3609),u=a(2560);function c(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:o}}=e;return{value:t,label:a,attributes:n,default:o}}))}function d(e){const{values:t,children:a}=e;return(0,o.useMemo)((()=>{const e=t??c(a);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function g(e){let{queryString:t=!1,groupId:a}=e;const n=(0,l.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,s._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})}),[r,n])]}function h(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,r=d(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[s,p]=g({queryString:a,groupId:n}),[c,h]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,r]=(0,u.Nk)(a);return[n,(0,o.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:n}),k=(()=>{const e=s??c;return m({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{k&&l(k)}),[k]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),p(e),h(e)}),[p,h,r]),tabValues:r}}var k=a(1048);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function y(e){let{className:t,block:a,selectedValue:l,selectValue:s,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,a=u.indexOf(t),n=p[a].value;n!==l&&(c(t),s(n))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},p.map((e=>{let{value:t,label:a,attributes:i}=e;return o.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,r.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":l===t})}),a??t)})))}function b(e){let{lazy:t,children:a,selectedValue:n}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===n));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function N(e){const t=h(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",f.tabList)},o.createElement(y,(0,n.Z)({},e,t)),o.createElement(b,(0,n.Z)({},e,t)))}function v(e){const t=(0,k.Z)();return o.createElement(N,(0,n.Z)({key:String(t)},e))}},1872:(e,t,a)=>{a.d(t,{m:()=>r});var n=a(7294);const o="leadText_qzwo",r=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:o},t))}},9223:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>u,toc:()=>d});var n=a(7462),o=(a(7294),a(4137)),r=a(3992),i=a(425),l=a(1872);const s={id:"sfmc-cloud-page-apps",title:"Solve with Cloud Page Apps",description:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",image:"img/og/og-image-solve-with-cloud-page-apps.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},p=void 0,u={unversionedId:"ssjs/snippets/sfmc-cloud-page-apps",id:"ssjs/snippets/sfmc-cloud-page-apps",title:"Solve with Cloud Page Apps",description:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",source:"@site/docs/ssjs/snippets/sfmc-cloud-page-apps.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/sfmc-cloud-page-apps",permalink:"/docs/ssjs/snippets/sfmc-cloud-page-apps",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/sfmc-cloud-page-apps.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"App",permalink:"/docs/tags/app"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1691828289,formattedLastUpdatedAt:"Aug 12, 2023",frontMatter:{id:"sfmc-cloud-page-apps",title:"Solve with Cloud Page Apps",description:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",image:"img/og/og-image-solve-with-cloud-page-apps.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},sidebar:"snippets",previous:{title:"SSJS Script Template",permalink:"/docs/ssjs/snippets/ssjs-script-template"},next:{title:"MobileConnect Phone Change",permalink:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"}},c={},d=[{value:"Cloud Page Apps: what and why",id:"cloud-page-apps-what-and-why",level:2},{value:"When out-of-the-box features are not enough",id:"when-out-of-the-box-features-are-not-enough",level:3},{value:"Out-of-the-box approach to out-of-the-box feature",id:"out-of-the-box-approach-to-out-of-the-box-feature",level:3},{value:"Build your dream",id:"build-your-dream",level:2},{value:"Cloud Page Apps step by step",id:"cloud-page-apps-step-by-step",level:2},{value:"Create your first Marketing Cloud micro application",id:"create-your-first-marketing-cloud-micro-application",level:3},{value:"A Good application is a secure application",id:"a-good-application-is-a-secure-application",level:3},{value:"API Integration Component",id:"api-integration-component",level:4},{value:"API Authorisation",id:"api-authorisation",level:4},{value:"API Authentication with Token",id:"api-authentication-with-token",level:4},{value:"Capture your Cloud Page App usage",id:"capture-your-cloud-page-app-usage",level:4},{value:"Secured Cloud Page App Template",id:"secured-cloud-page-app-template",level:3},{value:"Implementation Sum Up",id:"implementation-sum-up",level:2},{value:"Learn more",id:"learn-more",level:2}],m={toc:d},g="wrapper";function h(e){let{components:t,...a}=e;return(0,o.kt)(g,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(l.m,{content:"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.",mdxType:"LeadText"}),(0,o.kt)("h2",{id:"cloud-page-apps-what-and-why"},"Cloud Page Apps: what and why"),(0,o.kt)("h3",{id:"when-out-of-the-box-features-are-not-enough"},"When out-of-the-box features are not enough"),(0,o.kt)("p",null,"Salesforce Marketing Cloud offers a multitude of options. With all the Studios, Builders, and other Salesforce-ecosystem cross-sells, you can deliver nearly anything. Nearly."),(0,o.kt)("p",null,"There will always be some business processes or requirements that are too niche or too unique to be covered out-of-the-box. Sometimes they can be delivered with what is available after some compromises. Sometimes only custom development can help."),(0,o.kt)("p",null,"Depending on the use case and company resources, you can overcome such challenges in two ways. By shopping at AppExchange - Salesforce App Store with 3rd Party solutions - or by building a custom application connected to Marketing Cloud with APIs (for example, leveraging yet another Salesforce product - Heroku)."),(0,o.kt)("p",null,"AppExchange might be a great idea if you can find a product solving your problem, but it will add a recurring cost to your budget. On the other hand, a fully-fledged custom application might deliver precisely what you need but create considerable up-front cost (in either money for external developers or time for an in-house team) and require maintenance."),(0,o.kt)("p",null,"There is, however, the third path. One that can be perfect if you have a necessary but relatively small requirement for internally used power-up and would instead go lean on both budget and time \u2014 Marketing Cloud micro application."),(0,o.kt)("h3",{id:"out-of-the-box-approach-to-out-of-the-box-feature"},"Out-of-the-box approach to out-of-the-box feature"),(0,o.kt)("p",null,"Marketing Cloud micro application offers AppExchange-style deep integration with Marketing Cloud platform and solution flexibility of custom development. In short, it is an application hosted on a Cloud Page and available via the main menu of Marketing Cloud. A Cloud Page App."),(0,o.kt)("p",null,"The good? You can use Marketing Cloud programmatic languages (SSJS and AMPScript) with all their nifty built-in functions to control the assets and behaviours of the SFMC platform and connected Sales & Service Clouds. You can also leverage the APIs to gather even more power and pull external logic and data. All this without having to care about hosting, scaling and integration. Available directly from the Marketing Cloud menu. And cost? Just a super message for loading a Cloud Page."),(0,o.kt)("p",null,"The bad? It is suitable for relatively simple apps. Think about a single front-end page powered by an SSJS or AMPScript backend on a ",(0,o.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource"},"Code Resource"),". Of course, you can try to build something more complex, but you may quickly get into a place where the whole endeavour would have been easier with an outside-hosted application."),(0,o.kt)("h2",{id:"build-your-dream"},"Build your dream"),(0,o.kt)("p",null,"So what can you do with such a solution? Possibilities are endless, but to share a few use cases:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Marketing Cloud Asset Viewer that allows you to quickly locate, for example, a Data Extension or Content asset."),(0,o.kt)("li",{parentName:"ul"},"Data Extension Analyzer for quick data analysis or even visualisation of values from a selected Data Extension."),(0,o.kt)("li",{parentName:"ul"},"KPI Dashboard displaying the most critical data for understanding your communication's current state - or even related data from Sales or Service Cloud imported using functions enabled by Marketing Cloud Connect."),(0,o.kt)("li",{parentName:"ul"},"Deliverability Dashboard pulling data from Marketing Cloud and external deliverability monitoring and alerting tools."),(0,o.kt)("li",{parentName:"ul"},"Documentation or FAQ related to your company processes and best practices that everyone should follow when building customer experience through Marketing Cloud."),(0,o.kt)("li",{parentName:"ul"},"Templated Journey creator to deploy tested flows for most used campaigns in a single click.")),(0,o.kt)("p",null,"Anything related to Marketing Cloud that you wish could be a bit more automated or easy can be a good idea for a micro application approach."),(0,o.kt)("h2",{id:"cloud-page-apps-step-by-step"},"Cloud Page Apps step by step"),(0,o.kt)("h3",{id:"create-your-first-marketing-cloud-micro-application"},"Create your first Marketing Cloud micro application"),(0,o.kt)("p",null,"Implementation is very straightforward, and you can do it in few minutes:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Create a simple Cloud Page (blank page with a "Hello World" will do the job for now).'),(0,o.kt)("li",{parentName:"ol"},"Publish it and copy the URL of the Cloud Page."),(0,o.kt)("li",{parentName:"ol"},"Go to Marketing Cloud Setup -> Apps -> Installed Packages and create a New Package."),(0,o.kt)("li",{parentName:"ol"},"Add a ",(0,o.kt)("inlineCode",{parentName:"li"},"Marketing Cloud App")," Component to the Package and paste the Cloud Page URL in both Endpoint fields and Save.")),(0,o.kt)("p",null,"That's all. You just created your first Marketing Cloud micro application. Refresh Marketing Cloud to see it available in the main menu under the AppExchange icon. Now it's time to build up your solution to solve the business need."),(0,o.kt)("h3",{id:"a-good-application-is-a-secure-application"},"A Good application is a secure application"),(0,o.kt)("p",null,"Your micro application is now available from the Marketing Cloud menu. But unfortunately, it can also be accessed from any other place, as it is still just a simple Cloud Page. It is, of course, not ideal. You don't want random people to access your API-fueled solution."),(0,o.kt)("h4",{id:"api-integration-component"},"API Integration Component"),(0,o.kt)("p",null,"Thankfully, you can leverage the already created Installed Package to secure the micro application cleanly. To do so, add yet another Component to the Package - this time, you will need API Integration one. Select Web App integration type and paste your micro application Cloud Page URL to the Redirect URI field."),(0,o.kt)("p",null,"You don't need to select anything in the Scope to secure your micro application. But if you plan on using the API calls, feel free to choose the required areas now. If you only want to leverage built-in SSJS and AMPScript functions, keep them unchecked."),(0,o.kt)("p",null,"Once you save the Component, you will see that your Installed Package API Component now lists: ",(0,o.kt)("inlineCode",{parentName:"p"},"Client Id"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"Client Secret"),", and ",(0,o.kt)("inlineCode",{parentName:"p"},"API Base URI"),". Copy those, as you will need them in the next step."),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"After you create your Installed Package, three base URI's are available - Authentication, REST and SOAP. After the ",(0,o.kt)("inlineCode",{parentName:"p"},"https://"),", all of them have a common alphanumeric string with hyphens unique to your SFMC. I copy only this part to build any endpoint necessary for the application."),(0,o.kt)("p",{parentName:"admonition"},"For example, for ",(0,o.kt)("inlineCode",{parentName:"p"},"https://abcdefghi-jklmnoprst-123456.auth.marketingcloudapis.com/"),", the ",(0,o.kt)("inlineCode",{parentName:"p"},"API Base URI")," is ",(0,o.kt)("inlineCode",{parentName:"p"},"abcdefghi-jklmnoprst-123456"),".")),(0,o.kt)("h4",{id:"api-authorisation"},"API Authorisation"),(0,o.kt)("p",null,"With the above pre-work completed, you can use SSJS or AMPScript on your Cloud Page to redirect to the ",(0,o.kt)("inlineCode",{parentName:"p"},"v2/authorize")," endpoint of your Authentication Base URI before loading. It will require any visitor to log into your Marketing Cloud to load your micro application. What's even better, it will automatically load it for users already logged in (micro Single Sign-On)."),(0,o.kt)("p",null,"You will need to pass ",(0,o.kt)("inlineCode",{parentName:"p"},"Client Id")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Cloud Page URL")," (for redirect after successful login) as query parameters to your authorisation redirect. Another necessary thing is Response Type equal to code. Finally, you can pass a State. The value of this parameter will be available after the redirect. It is excellent for recognising whether someone opened your micro application before (no state) or after (available state) logging in."),(0,o.kt)(r.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"ssjs",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'{7} title="API Authentication Flow"',"{7}":!0,title:'"API',Authentication:!0,'Flow"':!0},"var appURL = 'APP_CLOUD_PAGE_URL';\nvar clientID = 'CLIENT_ID';\nvar clientSecret = 'CLIENT_SECRET';\nvar clientBase = 'API_BASE_URI';\nvar state = GUID();\n\nPlatform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);\n"))),(0,o.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'{9-13} title="API Authentication Flow"',"{9-13}":!0,title:'"API',Authentication:!0,'Flow"':!0},"VAR @clientID, @clientSecret, @clientBase, @appURL, @session, @requestURL\n\nSET @clientID = 'CLIENT_ID'\nSET @clientSecret = 'CLIENT_SECRET'\nSET @clientBase = 'API_BASE_URI'\nSET @appURL = 'APP_CLOUD_PAGE_URL'\nSET @session = GUID()\n\nSET @requestURL = Concat(\n 'https://', @clientBase, '.auth.marketingcloudapis.com/v2/authorize',\n '?response_type=code&client_id=', @clientID,\n '&redirect_uri=', @appURL, '&state=', @session)\nRedirect(@requestURL)\n")))),(0,o.kt)("h4",{id:"api-authentication-with-token"},"API Authentication with Token"),(0,o.kt)("p",null,"Once your micro application refreshes after authorisation, you can get the code query string parameter with SSJS or AMPScript function and use it to make a POST API call to Authentication Base URI - this time to ",(0,o.kt)("inlineCode",{parentName:"p"},"v2/token")," endpoint. As the code from the authorisation endpoint is required in the payload, the fact of receiving the token in the response will validate that the visitor is eligible to access the micro application and use it."),(0,o.kt)(r.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"ssjs",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'{15} title="API Token Authorisation Flow"',"{15}":!0,title:'"API',Token:!0,Authorisation:!0,'Flow"':!0},"var appURL = 'APP_CLOUD_PAGE_URL';\nvar clientID = 'CLIENT_ID';\nvar clientSecret = 'CLIENT_SECRET';\nvar clientBase = 'API_BASE_URI';\n\nvar code = Platform.Request.GetQueryStringParameter('code');\nvar payload = {\n grant_type: 'authorization_code',\n code: code,\n client_id: clientID,\n client_secret: clientSecret,\n redirect_uri: appURL\n};\n\nvar response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));\n\nif (response.StatusCode == 200) {\n var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);\n var accessToken = parsedResponse.access_token;\n var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());\n tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);\n};\n\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you want to use the token for API in the context of a specific Business Unit, add ",(0,o.kt)("inlineCode",{parentName:"p"},"account_id: businessUnitMID,")," to the ",(0,o.kt)("inlineCode",{parentName:"p"},"payload")," to get the right token. Otherwise you will get autorization errors on API calls."))),(0,o.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'{19} title="API Token Authorisation Flow"',"{19}":!0,title:'"API',Token:!0,Authorisation:!0,'Flow"':!0},"VAR @clientID, @clientSecret, @clientBase, @appURL, @code, @requestURL, @token, @APIStatus, @response\n\nSET @clientID = 'CLIENT_ID';\nSET @clientSecret = 'CLIENT_SECRET';\nSET @clientBase = 'API_BASE_URI';\nSET @appURL = 'APP_CLOUD_PAGE_URL';\nSET @code = RequestParameter('code');\n\nSET @requestURL = Concat('https://', @clientBase, '.auth.marketingcloudapis.com/v2/token');\n\nSET @payload = Concat(\n '{\"grant_type\": \"authorization_code\", ',\n '\"code\": \"', @code, '\",',\n '\"client_id\": \"', @clientID, '\",',\n '\"client_secret\": \"', @clientSecret, '\",',\n '\"redirect_uri\": \"', @appURL, '\"}'\n)\n\nHTTPPost2(@requestURL, 'application/json', @payload, false, @APIStatus, @response)\nSET @token = Substring(@APIStatus, 18, 512)\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you want to use the token for API in the context of a specific Business Unit, add ",(0,o.kt)("inlineCode",{parentName:"p"},"'\"account_id\": \"', @businessUnitMID, '\",',")," to the ",(0,o.kt)("inlineCode",{parentName:"p"},"@payload")," to get the right token. Otherwise you will get autorization errors on API calls.")))),(0,o.kt)("p",null,"This way, you just added a micro Single Sign-On feature that is as secure as your Marketing Cloud. And that's not all! As now only your Marketing Cloud users can access the application, you can leverage the Installed Package Access tab to control who will see your solution in the main menu."),(0,o.kt)("p",null,"Now you have a secure, SSO-enabled micro application deeply integrated with Marketing Cloud ready to solve your business needs and power up your Marketing Team."),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Adding this micro SSO process blocks Web Studio from loading the Cloud Page in Preview. During development, you either have to comment out the SSO or validate the changes only by publishing and checking in the Cloud Page App directly."),(0,o.kt)("p",{parentName:"admonition"},"It also increases the cost of using the micro application from 1 Super Message per use to 2, due to Cloud Page refresh during authorization.")),(0,o.kt)("h4",{id:"capture-your-cloud-page-app-usage"},"Capture your Cloud Page App usage"),(0,o.kt)("p",null,"We can also add a logging solution that will store session and log app use history. We will need a Data Extension (one can serve multiple Cloud Page Apps) and a bit more code around the above snippets."),(0,o.kt)("p",null,"Create Data Extension with the following structure (",(0,o.kt)("inlineCode",{parentName:"p"},"session")," column being the Primary Key):"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"DataType"),(0,o.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,o.kt)("th",{parentName:"tr",align:null},"Length"),(0,o.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"\ud83d\udd11 session"),(0,o.kt)("td",{parentName:"tr",align:null},"Text"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"50"),(0,o.kt)("td",{parentName:"tr",align:null},"No")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"appName"),(0,o.kt)("td",{parentName:"tr",align:null},"Text"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"100"),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"createdDate"),(0,o.kt)("td",{parentName:"tr",align:null},"Date"),(0,o.kt)("td",{parentName:"tr",align:null},"Current date"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"token"),(0,o.kt)("td",{parentName:"tr",align:null},"Text"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"520"),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"tokenExpire"),(0,o.kt)("td",{parentName:"tr",align:null},"Date"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"userName"),(0,o.kt)("td",{parentName:"tr",align:null},"Text"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"100"),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"userEmail"),(0,o.kt)("td",{parentName:"tr",align:null},"Text"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"254"),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")))),(0,o.kt)("p",null,"As for data retention, one day for Individual Records is enough for authorisation purposes. However, you can extend it for logging history purposes. Keep in mind that the more data stored, the slower the Data Extension operations speeds. Pushing data to this table is straightforward:"),(0,o.kt)(r.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"ssjs",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Fill Cloud Page App Logging Data Extension"',title:'"Fill',Cloud:!0,Page:!0,App:!0,Logging:!0,Data:!0,'Extension"':!0},"Platform.Function.UpsertData(authDE, ['session'], [state], ['appName', 'token', 'tokenExpire'], [appName, accessToken, tokenExpire]);\n"))),(0,o.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Fill Cloud Page App Logging Data Extension"',title:'"Fill',Cloud:!0,Page:!0,App:!0,Logging:!0,Data:!0,'Extension"':!0},"UpsertData(@authDE, 1, 'session', @state, 'appName', @appName, 'token', @token, 'tokenExpire', DateAdd(Now(), 18, 'MI'))\n")))),(0,o.kt)("p",null,"It will additionally allow you to safely split your application into the front end (Cloud Page) and back end (Code Resource) to improve user experience and optimise speed and cost."),(0,o.kt)("h3",{id:"secured-cloud-page-app-template"},"Secured Cloud Page App Template"),(0,o.kt)("p",null,"By considering all the above, we get a robust and secure template for our Cloud Page Apps:"),(0,o.kt)(r.Z,{groupId:"cloudAppCode",defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"AMPScript",value:"ampscript"}],mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"ssjs",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Full Cloud Page App Template"',title:'"Full',Cloud:!0,Page:!0,App:!0,'Template"':!0},"<script runat=\"server\">\n /* -------------------------------------------------------------------------\n\n Authenticates each visitor to limit access only to SFMC logged-in users.\n\n 1. Global Variables\n 2. Helper Functions\n 2.1. Debugging\n 2.2. Error handling\n 3. Authentication Flow\n 3.1. Authorisation\n 3.2. Authentication with REST Token\n 3.2.1. Build token request payload\n 3.2.2. Request the token\n 3.2.3. Destructure the response\n 3.2.4. Get User Details\n 3.2.5. Upsert Logging Data Extension\n 3.2.6. Handle authentication error\n 3.3. Authorisation Error\n\n -------------------------------------------------------------------------- */\n\n Platform.Load('core', '1');\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n var debugging = false;\n var appName = 'CLOUD_APP_NAME';\n var appURL = 'APP_CLOUD_PAGE_URL';\n\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n var authDE = 'AUTHENTICATION_DATA_EXTENSION';\n\n var state = Platform.Request.GetQueryStringParameter('state');\n\n var errorMessage = Platform.Request.GetQueryStringParameter('error');\n var errorDescription = Platform.Request.GetQueryStringParameter('error_description');\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Debugging --------------------------------- */\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /* ---------------------- 2.2. Error handling ---------------------------- */\n\n /**\n * @function handleError\n * @description Adds the error with context to error logging Data Extension and redirects to error page.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(errorDE, ['id', 'appName', 'errorMessage', 'errorDescription'], [GUID(), appName, error.message, error.description]);\n Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);\n };\n };\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 3. AUTHENTICATION FLOW ------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 3.1. Authorization ----------------------------- */\n\n if (!state && !errorMessage) {\n state = GUID();\n Platform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);\n\n /* ---------------------- 3.2. Authentication ---------------------------- */\n\n } else if (state) {\n /* 3.2.1. Build token request payload */\n var code = Platform.Request.GetQueryStringParameter('code');\n var payload = {\n grant_type: 'authorization_code',\n code: code,\n client_id: clientID,\n client_secret: clientSecret,\n redirect_uri: appURL\n };\n /* 3.2.2. Request the token */\n var response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));\n /* 3.2.3. Destructure the response */\n if (response.StatusCode == 200) {\n var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);\n var accessToken = parsedResponse.access_token;\n var appScope = parsedResponse.scope;\n var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());\n tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);\n\n /* 3.2.4. Get User Details */\n response = HTTP.Get('https://' + clientBase + '.auth.marketingcloudapis.com/v2/userinfo', ['Authorization'], ['Bearer ' + accessToken]);\n if (debugging) debugValue('UserInfo Response', response)\n userName = Platform.Function.ParseJSON(response.Content).user.name;\n userEmail = Platform.Function.ParseJSON(response.Content).user.email;\n\n /* 3.2.5. Upsert Authentication Logging Data Extension */\n Platform.Function.UpsertData(authDE, ['session'], [state],\n ['appName', 'token', 'tokenExpire', 'userName', 'userEmail'],\n [appName, accessToken, tokenExpire, userName, userEmail]\n );\n\n /* 3.2.6. Handle authentication error */\n } else {\n handleError({message: 'Authentication Failed', description: 'Status: ' + response.StatusCode})\n };\n\n /* ---------------------- 3.3. Authorization Error ----------------------- */\n\n } else {\n handleError({message: errorMessage, description: errorDescription});\n };\n<\/script>\n\n\x3c!-- The Cloud Page App micro SSO solution will secure anything you create below --\x3e\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Any reload done within the app (Reload/Redirect/Post via Form) should point back to Apps Cloud Page URL with ",(0,o.kt)("inlineCode",{parentName:"p"},"'state=' + state")," appended to it as a query parameter (remember to use ",(0,o.kt)("inlineCode",{parentName:"p"},"?")," if it will be the first parameter or ",(0,o.kt)("inlineCode",{parentName:"p"},"&")," in another case)."),(0,o.kt)("p",{parentName:"admonition"},"You can also leverage the session to lookup the token for API calls: ",(0,o.kt)("inlineCode",{parentName:"p"},"Platform.Function.Lookup(authDE, 'token', 'session', state)")))),(0,o.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Full Cloud Page App Template"',title:'"Full',Cloud:!0,Page:!0,App:!0,'Template"':!0},"\x3c!-- Authorisation START --\x3e\n%%[\n /* -------------------------------------------------------------------------\n\n Authenticates each visitor to limit access only to SFMC logged-in users.\n\n 1. Global Variables - should be updated for each implementation\n 2. Authentication Flow\n 2.1. Session Validation\n 2.2. Authorisation\n 2.3. Authentication with REST Token\n 2.3.1. Build token request payload\n 2.3.2. Get the token\n 2.3.3. Upsert Logging Data Extension\n\n -------------------------------------------------------------------------- */\n\n /* ----------------------------------------------------------------------- */\n /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */\n /* ----------------------------------------------------------------------- */\n\n VAR @appName, @clientID, @clientSecret, @clientBase, @appURL, @errorURL, @requestURL, @payload, @APIStatus, @response, @token, @session, @code, @authDE\n\n /* Add clientID, Client Secret, Client Base (part of API Base URL) for all further calls*/\n SET @clientID = 'CLIENT_ID'\n SET @clientSecret = 'CLIENT_SECRET'\n SET @clientBase = 'API_BASE_URI'\n\n /* App Nane and relevant URLs */\n SET @appName = 'CLOUD_APP_NAME'\n SET @appURL = 'APP_CLOUD_PAGE_URL'\n SET @errorURL = 'ERROR_CLOUD_PAGE_URL'\n\n /* Data Extension for Authorisation Logging */\n SET @authDE = 'AUTHENTICATION_DATA_EXTENSION'\n\n /* Capture State and Session for Authorisation purposes */\n SET @state = RequestParameter('state')\n SET @session = RequestParameter('s')\n\n /* ----------------------------------------------------------------------- */\n /* ------------------------- 2. AUTHENTICATION FLOW ---------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Session Validation ------------------------ */\n\n /* If there is Session parameter, validate it with logging DE*/\n IF NOT Empty(@session) THEN\n /* If user was authenticated for another app or if he is not authenticated, redirect to login page */\n IF Lookup(@authDE, 'appName', 'session', @session) != @appName THEN\n Redirect(@appURL)\n ENDIF\n /* Authenticated users jumps to main code */\n\n /* ------------------------- 2.2. Authorization -------------------------- */\n\n /* If there is no Session parameter, start Authorisation flow */\n ELSEIF Empty(@state) AND Empty(@session) THEN\n SET @session = GUID()\n SET @requestURL = Concat(\n 'https://', @clientBase, '.auth.marketingcloudapis.com/v2/authorize',\n '?response_type=code&client_id=', @clientID,\n '&redirect_uri=', @appURL, '&state=', @session)\n Redirect(@requestURL)\n\n /* ------------------------- 2.3. Authentication ------------------------- */\n\n /* If there is state parameter after Authorisation, get the REST Token */\n ELSEIF NOT Empty(@state) THEN\n SET @code = RequestParameter('code')\n SET @requestURL = Concat('https://', @clientBase, '.auth.marketingcloudapis.com/v2/token')\n\n /* 2.3.1. Build token request payload */\n SET @payload = Concat(\n '{\"grant_type\": \"authorization_code\",',\n '\"code\": \"' ,@code, '\",',\n '\"client_id\": \"', @clientID, '\",',\n '\"client_secret\": \"', @clientSecret, '\",',\n '\"redirect_uri\": \"', @appURL, '\"}'\n )\n\n /* 2.3.2. Get the token */\n HTTPPost2(@requestURL, 'application/json', @payload, false, @APIStatus, @response)\n SET @token = Substring(@APIStatus, 18, 512)\n /* Token expires after an 18 minutes */\n\n /* 2.3.2. Upsert Logging Data Extension */\n /* Add record to Logging DE to store the token and validate access with it */\n UpsertData(@authDE,1, 'session' ,@state, 'appName', @appName, 'token', @token, 'tokenExpire', DateAdd(Now(), 18, 'MI'))\n Redirect(Concat(@appURL, '?s=', @state))\n\n /* For any other scenario, redirect to Error Page */\n ELSE\n Redirect(@errorURL)\n\n ENDIF\n /* Remember to pass ?s=%%=v(@session)=%% on each page reload for leverage session validation */\n]%%\n\x3c!-- Authorisation END --\x3e\n\n\x3c!-- The Cloud Page App micro SSO solution will secure anything you create below --\x3e\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Any reload done within the app (Reload/Redirect/Post via Form) should point back to Apps Cloud Page URL with ",(0,o.kt)("inlineCode",{parentName:"p"},"s=%%=v(@session)=%%")," appended to it as a query parameter (remember to use ",(0,o.kt)("inlineCode",{parentName:"p"},"?")," if it will be the first parameter or ",(0,o.kt)("inlineCode",{parentName:"p"},"&")," in another case)."),(0,o.kt)("p",{parentName:"admonition"},"You can also leverage the session to lookup the token for API calls: ",(0,o.kt)("inlineCode",{parentName:"p"},"%%=Lookup(@authDE,'token','session',@session)=%%"))))),(0,o.kt)("p",null,"To implement it, copy and paste the above code to the top of the Cloud Page used for the App. Next, change the values at the top of the code (the uppercase ones) to match your package installation and app details. That's all!"),(0,o.kt)("h2",{id:"implementation-sum-up"},"Implementation Sum Up"),(0,o.kt)("p",null,"There was much information to digest, so it's time for a streamlined step by step guide from zero to hero:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Logging Data Extensions"),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"In Content Builder or Email Studio create a ",(0,o.kt)("a",{parentName:"li",href:"#capture-your-cloud-page-app-usage"},"Cloud Page App Logging Data Extension"),"."),(0,o.kt)("li",{parentName:"ol"},"In Content Builder or Email Studio create an ",(0,o.kt)("a",{parentName:"li",href:"/docs/ssjs/debugging-ssjs#logging-to-data-extension"},"Error Logging Data Extension"),"."),(0,o.kt)("li",{parentName:"ol"},"In both cases, one is enough for multiple Cloud Page Apps. If stored in the Shared Data Extensions folder, both can serve multiple Business Units."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Cloud Page"),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Create a new Cloud Page."),(0,o.kt)("li",{parentName:"ol"},"Copy the URL."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Installed Package"),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Go to System -> Platform Tools -> Apps -> Installed Packages."),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("inlineCode",{parentName:"li"},"New")," in the top right corner."),(0,o.kt)("li",{parentName:"ol"},"Add Unique Name and Description suggesting the App's purpose."),(0,o.kt)("li",{parentName:"ol"},"Marketing Cloud App Component.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("inlineCode",{parentName:"li"},"Add Component")," at the bottom."),(0,o.kt)("li",{parentName:"ol"},"Select ",(0,o.kt)("inlineCode",{parentName:"li"},"Marketing Cloud App")," and click Next."),(0,o.kt)("li",{parentName:"ol"},"Add Unique Name and Description suggesting the App's purpose."),(0,o.kt)("li",{parentName:"ol"},"Add Cloud Page URL copied in step 2.ii as both Login and Logout Endpoint."),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("inlineCode",{parentName:"li"},"Save"),"."))),(0,o.kt)("li",{parentName:"ol"},"API Integration Component.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("inlineCode",{parentName:"li"},"Add Component")," on the right side of the page."),(0,o.kt)("li",{parentName:"ol"},"Select ",(0,o.kt)("inlineCode",{parentName:"li"},"API Integration")," and click Next."),(0,o.kt)("li",{parentName:"ol"},"Select ",(0,o.kt)("inlineCode",{parentName:"li"},"Web App")," and click Next."),(0,o.kt)("li",{parentName:"ol"},"Add Cloud Page URL copied in step 2.ii as Redirect URI."),(0,o.kt)("li",{parentName:"ol"},"Add Scope of the App (should be minimal, can be extended later) and click ",(0,o.kt)("inlineCode",{parentName:"li"},"Save"),"."))),(0,o.kt)("li",{parentName:"ol"},"Copy ",(0,o.kt)("inlineCode",{parentName:"li"},"Client Id"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"Client Secret")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"Client Base URI"),"."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Menu Unlock"),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Refresh tab with Marketing Cloud."),(0,o.kt)("li",{parentName:"ol"},"On the main menu pane of Marketing Cloud, hover over AppExchange to see your application."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Secured Template"),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Copy the ",(0,o.kt)("a",{parentName:"li",href:"#secured-cloud-page-app-template"},"template")," in the prefered language to the Cloud Page from step 2.i."),(0,o.kt)("li",{parentName:"ol"},"Update the unique values in the variables at the top part of the template (CAPS_LOCK placeholders)."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Build your solution"))),(0,o.kt)("h2",{id:"learn-more"},"Learn more"),(0,o.kt)("p",null,"Looking for more? Check out follow up materials for added context and deeper dive:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Webinar recording on ",(0,o.kt)("a",{parentName:"li",href:"/docs/webinars/sfmc-webinar-cloud-page-apps"},"Cloud Page Apps"),"."),(0,o.kt)("li",{parentName:"ol"},"Webinar recording on ",(0,o.kt)("a",{parentName:"li",href:"/docs/webinars/sfmc-webinar-architecting-web-solutions"},"Architecting Web Solutions in SFMC"),"."),(0,o.kt)("li",{parentName:"ol"},"Article on ",(0,o.kt)("a",{parentName:"li",href:"/docs/config/sfmc-code-resource"},"Power of SFMC Code Resources"),"."),(0,o.kt)("li",{parentName:"ol"},"Article on ",(0,o.kt)("a",{parentName:"li",href:"/docs/config/sfmc-appexchange-solutions"},"SFMC AppExchange Solutions"),"."),(0,o.kt)("li",{parentName:"ol"},"Code Snippets on ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/MateuszDabrowski/sfmc-cloud-page-app-template"},"my GitHub"),".")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2e2f252f.5cf41d20.js b/assets/js/2e2f252f.5cf41d20.js deleted file mode 100644 index fb20f0ff6..000000000 --- a/assets/js/2e2f252f.5cf41d20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4331],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var o=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,o,i=function(e,t){if(null==e)return{};var a,o,i={},n=Object.keys(e);for(o=0;o<n.length;o++)a=n[o],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)a=n[o],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=o.createContext({}),d=function(e){var t=o.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},u=function(e){var t=d(e.components);return o.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var a=e.components,i=e.mdxType,n=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=d(a),p=i,h=c["".concat(s,".").concat(p)]||c[p]||m[p]||n;return a?o.createElement(h,r(r({ref:t},u),{},{components:a})):o.createElement(h,r({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=a.length,r=new Array(n);r[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:i,r[1]=l;for(var d=2;d<n;d++)r[d]=a[d];return o.createElement.apply(null,r)}return o.createElement.apply(null,a)}p.displayName="MDXCreateElement"},8936:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var o=a(7462),i=(a(7294),a(4137)),n=a(1872),r=a(7271);const l={id:"marketing-cloud-ideas",title:"Marketing Cloud Ideas",sidebar_label:"Marketing Cloud",description:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-marketing-cloud-ideas.png",tags:["Marketing Cloud"]},s=void 0,d={unversionedId:"ideas/marketing-cloud-ideas",id:"ideas/marketing-cloud-ideas",title:"Marketing Cloud Ideas",description:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",source:"@site/sites/ideas/marketing-cloud-ideas.mdx",sourceDirName:"ideas",slug:"/ideas/marketing-cloud-ideas",permalink:"/sites/ideas/marketing-cloud-ideas",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/ideas/marketing-cloud-ideas.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"marketing-cloud-ideas",title:"Marketing Cloud Ideas",sidebar_label:"Marketing Cloud",description:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-marketing-cloud-ideas.png",tags:["Marketing Cloud"]},sidebar:"ideas",previous:{title:"Ideas",permalink:"/sites/category/ideas"},next:{title:"MC Personalization",permalink:"/sites/ideas/mc-personalization-ideas"}},u={},c=[{value:"Mobile Studio",id:"mobile-studio",level:2},{value:"Locale-based SMS Blackout",id:"locale-based-sms-blackout",level:3},{value:"Web Studio",id:"web-studio",level:2},{value:"Cloud Page Favicon & Open Graph Management",id:"cloud-page-favicon--open-graph-management",level:3},{value:"Journey Builder",id:"journey-builder",level:2},{value:"DeliveryTime for Journey Builder emails",id:"deliverytime-for-journey-builder-emails",level:3},{value:"_DataSourceName for Entry Data Extension in Journey Builder",id:"_datasourcename-for-entry-data-extension-in-journey-builder",level:3},{value:"Journey Builder Script Activity",id:"journey-builder-script-activity",level:3},{value:"Wait Until Time Range Activity",id:"wait-until-time-range-activity",level:3},{value:"Behavioral Triggers",id:"behavioral-triggers",level:2},{value:"Einstein User Attributes in Behavioral Trigger Content Block",id:"einstein-user-attributes-in-behavioral-trigger-content-block",level:3},{value:"Link Tracking in Behavioral Trigger Content Block",id:"link-tracking-in-behavioral-trigger-content-block",level:3},{value:"Behavioral Trigger Abandoned Cart Custom Attributes",id:"behavioral-trigger-abandoned-cart-custom-attributes",level:3},{value:"Custom Cart Attributes",id:"custom-cart-attributes",level:4},{value:"Cart Attributes Visibility in the Content Block",id:"cart-attributes-visibility-in-the-content-block",level:4},{value:"Behavioral Trigger Content Block rendering on Yahoo, AOL, Windows Outlook",id:"behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",level:3},{value:"Content Builder",id:"content-builder",level:2},{value:"Content Builder Shared Folders Permissions",id:"content-builder-shared-folders-permissions",level:3},{value:"Setup",id:"setup",level:2},{value:"Restore default permissions for SFMC Standard System Roles",id:"restore-default-permissions-for-sfmc-standard-system-roles",level:3}],m={toc:c},p="wrapper";function h(e){let{components:t,...a}=e;return(0,i.kt)(p,(0,o.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(n.m,{content:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"mobile-studio"},"Mobile Studio"),(0,i.kt)("h3",{id:"locale-based-sms-blackout"},"Locale-based SMS Blackout"),(0,i.kt)("p",null,"SMS Blackout allows blocking SMS sends in the chosen timeframe. Currently, SMS Blackout can be configured based on Account Timezone."),(0,i.kt)("p",null,"However, it would be much better for multi-country clients to configure the Blackout period based on the recipient's local timezone. MobilePhone locale is perfect for implementing this."),(0,i.kt)("p",null,"This way, it would be possible to create, for example, a single SMS Blackout for nighttime and apply it for each contact regardless of the timezone. The locale is already there for MobileConnect and can be leveraged for determining timezone offset."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdnAVUAZ/sms-blackout-to-be-based-on-mobile-phone-locale",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"web-studio"},"Web Studio"),(0,i.kt)("h3",{id:"cloud-page-favicon--open-graph-management"},"Cloud Page Favicon & Open Graph Management"),(0,i.kt)("p",null,"Currently the only option to manage ",(0,i.kt)("inlineCode",{parentName:"p"},"<meta>")," elements in Web Studio is to code them manually on each Cloud Page. This is creating a lot of workload and is an error prone process."),(0,i.kt)("p",null,"While many ",(0,i.kt)("inlineCode",{parentName:"p"},"<meta>")," tags are Cloud Page specific and this is not that big of a problem, there are some that could be shared:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Favicon - not only it could be shared by all Cloud Pages, but now it's not even possible to upload one in .ico format to Content Builder."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("inlineCode",{parentName:"li"},"og:image"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"twitter:image")," - having possibility to set a default one (with possibility to overwrite for a specific page) would greatly improve the UX of social shared Cloud Pages - even just putting a nice company logo would make sharing lead or whitepaper forms look so much nicer and trigger better engagement.")),(0,i.kt)("p",null,"This could be easily improved by Salesforce by implementing one of two options:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"[",(0,i.kt)("strong",{parentName:"li"},"Minimum Valuable Solution"),"]"," Global configuration for Web Studio where one can upload a favicon and ",(0,i.kt)("inlineCode",{parentName:"li"},"og:image"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"twitter:image")," and have it applied to all Cloud Pages"),(0,i.kt)("li",{parentName:"ol"},"[",(0,i.kt)("strong",{parentName:"li"},"Solution Deluxe"),"]"," Possibility to upload multiple favicons and ",(0,i.kt)("inlineCode",{parentName:"li"},"og:images"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"twitter:images")," and use a picklist option on Cloud Page level to select the one that should be used.")),(0,i.kt)("p",null,"Input field in Cloud Page editor for ",(0,i.kt)("inlineCode",{parentName:"p"},"og:title")," would be cherry on top."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000I8cvPUAR/cloud-page-favicon-open-graph-management",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"journey-builder"},"Journey Builder"),(0,i.kt)("h3",{id:"deliverytime-for-journey-builder-emails"},"DeliveryTime for Journey Builder emails"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"DeliveryTime")," is ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-system-data-views/#_job"},(0,i.kt)("inlineCode",{parentName:"a"},"_Job")," Data View")," field that stores timestamp for the email delivery (when it successfully reached the target Email Service Provider). It is currently impossible to get delivery time for emails sent via Journey Builder."),(0,i.kt)("p",null,"All other engagement data points are available (",(0,i.kt)("inlineCode",{parentName:"p"},"EventDate")," field for ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-system-data-views/#_sent"},"_Sent"),", ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-system-data-views/#_open"},"_Open"),", ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-system-data-views/#_click"},"_Click"),", ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-system-data-views/#_bounce"},"_Bounce"),"), but ",(0,i.kt)("inlineCode",{parentName:"p"},"DeliveryTime")," from ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-system-data-views/#_job"},(0,i.kt)("inlineCode",{parentName:"a"},"_Job")," Data View")," returns ",(0,i.kt)("inlineCode",{parentName:"p"},"NULL")," for Journey Builder emails."),(0,i.kt)("p",null,"It is happening, however, only for Journey Builder emails. Sends via any other methods (for example, Send Flow) are correctly displaying the delivery time."),(0,i.kt)("p",null,"I see it as a massive limitation for automations focused on keeping the database clean and debugging sends."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdWOmUAN/delivered-time-for-journey-builder-emails",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"_datasourcename-for-entry-data-extension-in-journey-builder"},"_DataSourceName for Entry Data Extension in Journey Builder"),(0,i.kt)("p",null,"As per the ",(0,i.kt)("a",{parentName:"p",href:"https://help.salesforce.com/articleView?id=mc_es_available_personalization_strings.htm&type=5"},"documentation"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"_DataSourceName")," personalisation string should show the communication audience's name. It covers lists, data extensions, groups, and filters."),(0,i.kt)("p",null,"It works when the email is sent via Email Studio -> Email -> Content -> Send flow. However, when we send an Email (or SMS) from Journey Builder, ",(0,i.kt)("inlineCode",{parentName:"p"},"_DataSourceName"),' shows "All Subscribers" instead of the Entry Data Extension name. It is true for both Multi-Step Journeys and Single Email Sends.'),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"_DataSourceName")," should show Entry Data Extension Name for Emails in Journey Builder. It is handy to debug from Send Log and create dynamic logic in emails based on the Data Extension naming convention."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdWOiUAN/datasourcename-should-show-entry-data-extension-in-journey-builder",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"journey-builder-script-activity"},"Journey Builder Script Activity"),(0,i.kt)("p",null,"Salesforce Marketing Cloud Journey Builder offers many out-of-the-box Activities and the possibility to create or download custom ones from AppExchange. However, there is a space between those solutions that Salesforce can cover to empower Marketing Cloud users. An out-of-the-box Script Activity, similar to the one available in Automation Studio."),(0,i.kt)("p",null,"Flexible enough to offer countless possibilities to SFMC power users without the complexity of creating a custom solution with the whole hosting, scalability and security considerations."),(0,i.kt)("p",null,"Right now, it requires either:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Stitching multiple Journeys and Automations with status-capturing Data Extensions to let members flow through the mix or"),(0,i.kt)("li",{parentName:"ul"},"filthy tricks with scripting in emails and, in the end, raising an error to block it from sending (quasi Script Activity with bad impact on reporting, performance, speed and super messages).")),(0,i.kt)("p",null,"Salesforce can solve it. Below are two possible solutions (and a bonus one for even more performance-oriented fun):"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Minimum Valuable Solution"),": Script Activity with the same features as in Automation Studio. The possibility of executing SSJS (or even AMPScript to optimise performance) against every Journey member would allow for pre-send updates of data from external systems using HTTP functions to ensure that crucial personalisation details are up-to-date."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Solution Deluxe"),": Extension of the previous idea to define various paths based on a predefined value in the script. Think about custom decision splits using out-of-sfmc data that allow you to change the Journey path based on real-time information from external systems."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Bonus Solution"),": There is also a place for a much less system-heavy script activity on the side. One that captures all members that get to that Activity and in predefined cadence (for example, every hour), if there is at least one member available, executes provided script once. Think of it as a mix of Wait and Script Activity that allows executing logic applied to groups. Use cases? Lazy update of the personalisation-source Data Extension that happens only if there are members that would need it. Or performance check of the subsequent communication to decide whether the members should receive it. All with the performance impact of one script execution per hour - regardless of the number of members.")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdjPPUAZ/journey-builder-script-activity",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"wait-until-time-range-activity"},"Wait Until Time Range Activity"),(0,i.kt)("p",null,"Salesforce Marketing Cloud offers many different Wait Activities, but one basic is missing - Wait Until Time Range."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use Case")),(0,i.kt)("p",null,"You want to send emails only at a specific time range (like 9 AM - 5 PM).\nFor example, Journey is filled at random times with events via API or form submissions, but you don't want the email to be sent in the night."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Current Options")),(0,i.kt)("p",null,"Right now, there is no easy workaround:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Einstein STO is a blackbox"),(0,i.kt)("li",{parentName:"ol"},"Wait by Duration is closest to the solution, as it allows you to delay sending to a specific hour (for example, extend the wait duration till 9 AM). Still, unfortunately, it means that if someone enters Journey at 10 AM, they will have to wait a whole day. We want to send emails normally in a given time range."),(0,i.kt)("li",{parentName:"ol"},"Update Contact adding Timestamp to Data Extension, and Decision Split deciding what should happen (send or Wait by Duration). Nice, but a lot of steps, configuration, performance penalty and awful Journey readability for longer Journeys."),(0,i.kt)("li",{parentName:"ol"},"Custom Journey Builder Activity. Sure, but that's a lot of custom work and worrying about scalability.")),(0,i.kt)("p",null,"Salesforce can solve it."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Possible solutions")),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},'Minimum Valuable Solution: Improve Wait by Duration with "Extend wait duration outside of time range" or create a separate Wait Until Time Range Activity.'),(0,i.kt)("li",{parentName:"ol"},"Solution Deluxe: Allow both time ranges and days-of-week ranges (with the possibility to mix both) to cover the no-sends-on-weekends use case.")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000KrMaMUAV/wait-until-time-range-journey-builder-activity",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"behavioral-triggers"},"Behavioral Triggers"),(0,i.kt)("h3",{id:"einstein-user-attributes-in-behavioral-trigger-content-block"},"Einstein User Attributes in Behavioral Trigger Content Block"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block"},"Behavioral Triggers Content Block")," for Emails is an excellent tool for easy drag-and-drop creation of Abandoned Engagement communication. But it is missing one powerful feature \u2014 the ability to personalise the email with customer data."),(0,i.kt)("p",null,"It is already available in the form of:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Einstein User Attributes that we can pass through the ",(0,i.kt)("inlineCode",{parentName:"li"},"setUserInfo")," data layer."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#5-building-the-api-query"},"request"),' used in the back end of the current Behavioral Triggers Content Block; by adding "&user_attributes=attributeName" to the endpoint.'),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#6-response-parsing"},"Code")," of the existing Behavioral Triggers Content Block responsible for creating AMPScript variables based on the Einstein User Attributes data.")),(0,i.kt)("p",null,"However, as the Einstein User Attributes are neither added to the request by default nor configured in the User Integrace of the Content Block, to get this data in the email, one must create yet another, the same call with the above query parameter added. Neither user friendly nor optimal due to expensive ",(0,i.kt)("inlineCode",{parentName:"p"},"HTTP.Get")," function running twice in such a scenario."),(0,i.kt)("p",null,"Salesforce can fix it. Below are two solution tiers:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Minimum Valuable Solution"),': Add the required query string ("&user_attributes=X,Y") with all potential Custom Einsteins User Attributes to the request URL built within the Content Block code.'),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Solution Deluxe"),": Improve the above with the UI-enabled selection of needed Profile Attributes, just as available with Product Attributes.")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GddaZUAR/einstein-user-attributes-available-in-behavioral-trigger-content-block",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"link-tracking-in-behavioral-trigger-content-block"},"Link Tracking in Behavioral Trigger Content Block"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block"},"Behavioral Triggers Content Block")," allows for easy out-of-the-box use of abandoned engagement data in our Emails. It neatly pulls the Catalog items that captivated the customer's attention and displays them for win-back purposes. Of course, each item links back to its e-commerce page."),(0,i.kt)("p",null,"Its implementation is, however, leading to a problem with tracking. My favourite solution - Parameter Manager with Web Analytics Connector - is not working on the Behavioral Trigger Content Block. Neither can we add the tracking parameters manually, as there is no such option in the UI."),(0,i.kt)("p",null,"Right now, there are only two ways to add the UTM's:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Add them to the Catalog directly - this adds them for all scenarios connected to Einstein or Behavioral Triggers. Not helpful, as in most cases, we want to differentiate various personalisation placements by using distinct UTM tracking."),(0,i.kt)("li",{parentName:"ol"},"Create a Custom Behavioral Trigger Content Block - now we will be able to leverage direct links from ",(0,i.kt)("inlineCode",{parentName:"li"},"IGO_PRODUCTATTRIBS")," add tracking to them in the product's HTML template. Okay, but not easy and make you lose click data for Einstein Recommendations.")),(0,i.kt)("p",null,"Salesforce can fix it. Below are two possible solutions:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Minimum Valuable Solution"),": Add a text box to a Behavioral Trigger Content Block configuration menu to add our custom tracking. The Content Block should apply the provided tracking query to each link. AMPScript support included."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Solution Deluxe"),": On top of the above solution, Marketing Cloud should consider the Parameter Management to allow for a mix of global UTM's from Web Analytics Connector and local from the new text box in Behavioral Trigger Content Block configuration.")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdhNRUAZ/link-tracking-in-behavioral-trigger-content-block",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"behavioral-trigger-abandoned-cart-custom-attributes"},"Behavioral Trigger Abandoned Cart Custom Attributes"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/"},"Behavioral Triggers")," are a terrific solution for Abandoned Engagement. The ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#track-cart"},"Abandoned Cart")," scenario already has multiple great features that make it easy to implement."),(0,i.kt)("p",null,"There is, however, an area for an easy improvement on that idea to make it much more flexible and ready for real-world scenarios. Salesforce can do it with two solutions:"),(0,i.kt)("h4",{id:"custom-cart-attributes"},"Custom Cart Attributes"),(0,i.kt)("p",null,"Just as there are Custom Attributes for the Product Catalog, it would be great to have a similar option on the cart itself. Product Catalog ones are global - shared for all Customers interested in selected products. There is a need for something more unique and customer-specific."),(0,i.kt)("p",null,"It is already available in the form of an optional ",(0,i.kt)("inlineCode",{parentName:"p"},"price")," attribute of ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#track-cart"},(0,i.kt)("inlineCode",{parentName:"a"},"trackCart")," Collect.js Data Layer")," that contains individual price that does not impact the Product Catalog. It would be great to have the possibility to add a few more, available in ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#track-cart"},(0,i.kt)("inlineCode",{parentName:"a"},"trackCart")," Collect.js")," and the ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses"},"response")," from Einstein Backend (IgoDigital)."),(0,i.kt)("p",null,"Use case? Sure. Coupon Code Name, Coupon Code Discount (either integer or float for per cent value), added Personalisation, Voucher ID. All those tools are frequently used in e-commerce and would be perfect for a ",(0,i.kt)("inlineCode",{parentName:"p"},"trackCart")," layer. Suitable for personalisation, perfect for passing data needed for rebuilding the cart."),(0,i.kt)("h4",{id:"cart-attributes-visibility-in-the-content-block"},"Cart Attributes Visibility in the Content Block"),(0,i.kt)("p",null,"This one is an extension of the above idea. We already have a way to decide which Product Catalog Attributes are displayed in the Behavioral Trigger Content Block. But in many cases, when I use Abandoned Cart, I would like to show ",(0,i.kt)("inlineCode",{parentName:"p"},"trackCart")," individual price (including applied coupons) instead of the global Catalog one. It could also be helpful for some Custom Cart Attributes from the previous solution."),(0,i.kt)("p",null,"Below are three solution tiers:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Minimum Valuable Solution"),": Add ",(0,i.kt)("inlineCode",{parentName:"li"},"price")," ",(0,i.kt)("inlineCode",{parentName:"li"},"trackCart")," attribute (",(0,i.kt)("inlineCode",{parentName:"li"},"amount")," in the ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses"},"response")," from the IgoDigital) available for selection when defining fields shown for products in ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block"},"Behavioral Trigger Content Block"),"."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Nice Solution"),": On top of the first point, add two additional (optional) attributes to ",(0,i.kt)("inlineCode",{parentName:"li"},"trackCart")," Collect.js and IgoDigital ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses"},"response"),": ",(0,i.kt)("inlineCode",{parentName:"li"},"couponCodeName"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"couponCodeDiscount "),"- and make them also available for selection in ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block"},"Behavioral Trigger Content Block"),"."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Solution Deluxe"),": On top of the first point, add the possibility of defining Custom Cart Attributes in the UI and leveraging them in ",(0,i.kt)("inlineCode",{parentName:"li"},"trackCart")," Collect.js and IgoDigital ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses"},"response"),". Just as with Custom Profile Attributes / Custom Product Attributes. Additionally, make them also available for selection in ",(0,i.kt)("a",{parentName:"li",href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block"},"Behavioral Trigger Content Block"),".")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdbvFUAR/behavioral-trigger-abandoned-cart-custom-attributes",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook"},"Behavioral Trigger Content Block rendering on Yahoo, AOL, Windows Outlook"),(0,i.kt)("p",null,"The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. On those Email Providers, the product text is not displayed, and the customer only sees the images."),(0,i.kt)("p",null,"The reason for this is using ",(0,i.kt)("inlineCode",{parentName:"p"},"rem")," units font-size for product descriptions - ",(0,i.kt)("inlineCode",{parentName:"p"},"font-size: 0.8125rem"),":"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},'<td class="mcbt_name" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 310px;">--name--</td>')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"rem")," units are currently not supported by Yahoo, AOL and Windows Outlook (",(0,i.kt)("a",{parentName:"p",href:"https://www.caniemail.com/features/css-unit-rem/"},"Can I Email"),") which leads to those Email Providers ignoring this parameter. When this happens, the font-size value is inherited from the parent that have font-size configured."),(0,i.kt)("p",null,"And for Behavioral Trigger Content block that parent is a ",(0,i.kt)("inlineCode",{parentName:"p"},"<td>")," parameter within header ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/config/sfmc-behavioral-triggers/#3-settings--markup-fragments"},(0,i.kt)("inlineCode",{parentName:"a"},"markupFragment")),". Unfortunately, it has ",(0,i.kt)("inlineCode",{parentName:"p"},"font-size: 0"),":"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},'<td class="multi-column" style="padding: 0; text-align: center; font-size: 0; padding-top: 10px; padding-bottom: 10px;">')),(0,i.kt)("p",null,"There should be no ",(0,i.kt)("inlineCode",{parentName:"p"},"rem")," units used in the Behavioral Trigger Content Block code and instead a standard ",(0,i.kt)("inlineCode",{parentName:"p"},"px")," font-size assignment for the Block to render correctly."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdZZBUA3/behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"content-builder"},"Content Builder"),(0,i.kt)("h3",{id:"content-builder-shared-folders-permissions"},"Content Builder Shared Folders Permissions"),(0,i.kt)("p",null,"Content Builder is great for creating and neatly organising assets in Marketing Cloud, but it has one huge issue. Folder access management."),(0,i.kt)("p",null,"There are already great ",(0,i.kt)("a",{parentName:"p",href:"https://trailblazer.salesforce.com/ideaView?id=0873A000000PZ6oQAG"},"Ideas on expanding the folder rights"),", so in this Idea, I want to focus on something different - and much easier to fix for Salesforce."),(0,i.kt)("p",null,"When settings permissions for a Marketing Cloud User or Role, there are options that control the rights to Shared Folders of Content Builder. As with Shared Data Extensions Folder permissions, you can decide what the user or role can do with Shared Content Folders."),(0,i.kt)("p",null,"However, there is one huge difference:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"With Shared Data Extension Folders, when you remove all permissions, the user or role can no longer see Shared space and effectively loses access to all Shared Data Extensions."),(0,i.kt)("li",{parentName:"ol"},"With Shared Content Folders, when you remove all permissions, the user or role will not see the folders, but they will still see the Shared Folder tab and - what's much worse - ",(0,i.kt)("inlineCode",{parentName:"li"},"All Shared Content")," section displaying all the Content assets stored within Shared Folders.")),(0,i.kt)("p",null,"As SFMC applies the permissions to read and edit content to both local and shared assets, every person with edit rights can change assets in a Shared Content Folder - event if they do not have permission to that folder."),(0,i.kt)("p",null,"This behaviour breaks a prevalent use case of having local folders available to all creators while limiting shared folders only to administrative roles. It is possible (and very useful) for Data Extensions. But not for Content Builder, as everyone can access all administrative-level assets (like master templates or crucial content blocks)."),(0,i.kt)("p",null,"The fix is straightforward - if the current user does not have any permissions to Shared Content Builder Folders, it shouldn't see either the ",(0,i.kt)("inlineCode",{parentName:"p"},"All Shared Content")," section or even the Shared Folders tab. That's it. It would then mirror the Shared Data Extension folder permissions and enable the local/administrative access split use case."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdbEjUAJ/content-builder-shared-folder-permissions",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"setup"},"Setup"),(0,i.kt)("h3",{id:"restore-default-permissions-for-sfmc-standard-system-roles"},"Restore default permissions for SFMC Standard System Roles"),(0,i.kt)("p",null,"While Salesforce updates the Standard Roles (Email Studio and Marketing Cloud ones) during Releases, users can also modify them within the SFMC Setup freely (permissions of those System Roles are not locked)."),(0,i.kt)("p",null,"Unfortunately, there is no option to see whether the Standard Role deviates from the default configuration. It creates problems for new administrators coming to existing implementation or after someone modifies the wrong role by mistake/not following the best practices."),(0,i.kt)("p",null,"Official documentation only stores high-level information about the out-of-the-box configuration that cannot be used to restore the original state."),(0,i.kt)("p",null,"It would be of great help to have on the Stnadard System Roles either:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Button that lets you restore the default (for new orgs) permissions configuration or"),(0,i.kt)("li",{parentName:"ul"},"Information on each permission what is its default state.")),(0,i.kt)("p",null,"Currently, there is no real workaround apart from:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Checking it against another, unchanged SFMC (which is not an option for most) or"),(0,i.kt)("li",{parentName:"ul"},"Using the manual ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/MateuszDabrowski/sfmc-roles-backup"},"backup, I'm currently building")," (which is not the best long-term option, especially with all the changes to the permissions happening multiple times a year).")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000KSOTSUA5/restore-default-permissions-for-marketing-cloud-system-roles",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}))}h.isMDXComponent=!0},7271:(e,t,a)=>{a.d(t,{V:()=>n,z:()=>i});var o=a(7294);const i=e=>{let{link:t,text:a,newTab:i=!1}=e;return o.createElement(o.Fragment,null,o.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:i?"_blank":"_self"},a))},n=e=>{let{linkLeft:t,textLeft:a,newTabLeft:i=!1,linkRight:n,textRight:r,newTabRight:l=!1}=e;return o.createElement(o.Fragment,null,o.createElement("div",{class:"col col--12"},o.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:i?"_blank":"_self"},a),o.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:n,target:l?"_blank":"_self"},r)))}},1872:(e,t,a)=>{a.d(t,{m:()=>n});var o=a(7294);const i="leadText_qzwo",n=e=>{let{content:t}=e;return o.createElement(o.Fragment,null,o.createElement("p",{id:i},t))}}}]); \ No newline at end of file diff --git a/assets/js/2e2f252f.75b39c57.js b/assets/js/2e2f252f.75b39c57.js new file mode 100644 index 000000000..7e95ad24b --- /dev/null +++ b/assets/js/2e2f252f.75b39c57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4331],{4983:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>d,toc:()=>h});var n=i(5893),o=i(1151),a=i(1872),r=i(7271);const s={id:"marketing-cloud-ideas",title:"Marketing Cloud Ideas",sidebar_label:"Marketing Cloud",description:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-marketing-cloud-ideas.png",tags:["Marketing Cloud"]},l=void 0,d={id:"ideas/marketing-cloud-ideas",title:"Marketing Cloud Ideas",description:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",source:"@site/sites/ideas/marketing-cloud-ideas.mdx",sourceDirName:"ideas",slug:"/ideas/marketing-cloud-ideas",permalink:"/sites/ideas/marketing-cloud-ideas",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/ideas/marketing-cloud-ideas.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"marketing-cloud-ideas",title:"Marketing Cloud Ideas",sidebar_label:"Marketing Cloud",description:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-marketing-cloud-ideas.png",tags:["Marketing Cloud"]},sidebar:"ideas",previous:{title:"Ideas",permalink:"/sites/category/ideas"},next:{title:"MC Personalization",permalink:"/sites/ideas/mc-personalization-ideas"}},c={},h=[{value:"Mobile Studio",id:"mobile-studio",level:2},{value:"Locale-based SMS Blackout",id:"locale-based-sms-blackout",level:3},{value:"Web Studio",id:"web-studio",level:2},{value:"Cloud Page Favicon & Open Graph Management",id:"cloud-page-favicon--open-graph-management",level:3},{value:"Journey Builder",id:"journey-builder",level:2},{value:"DeliveryTime for Journey Builder emails",id:"deliverytime-for-journey-builder-emails",level:3},{value:"_DataSourceName for Entry Data Extension in Journey Builder",id:"_datasourcename-for-entry-data-extension-in-journey-builder",level:3},{value:"Journey Builder Script Activity",id:"journey-builder-script-activity",level:3},{value:"Wait Until Time Range Activity",id:"wait-until-time-range-activity",level:3},{value:"Behavioral Triggers",id:"behavioral-triggers",level:2},{value:"Einstein User Attributes in Behavioral Trigger Content Block",id:"einstein-user-attributes-in-behavioral-trigger-content-block",level:3},{value:"Link Tracking in Behavioral Trigger Content Block",id:"link-tracking-in-behavioral-trigger-content-block",level:3},{value:"Behavioral Trigger Abandoned Cart Custom Attributes",id:"behavioral-trigger-abandoned-cart-custom-attributes",level:3},{value:"Custom Cart Attributes",id:"custom-cart-attributes",level:4},{value:"Cart Attributes Visibility in the Content Block",id:"cart-attributes-visibility-in-the-content-block",level:4},{value:"Behavioral Trigger Content Block rendering on Yahoo, AOL, Windows Outlook",id:"behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",level:3},{value:"Content Builder",id:"content-builder",level:2},{value:"Content Builder Shared Folders Permissions",id:"content-builder-shared-folders-permissions",level:3},{value:"Setup",id:"setup",level:2},{value:"Restore default permissions for SFMC Standard System Roles",id:"restore-default-permissions-for-sfmc-standard-system-roles",level:3}];function u(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.m,{content:"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!"}),"\n",(0,n.jsx)(t.h2,{id:"mobile-studio",children:"Mobile Studio"}),"\n",(0,n.jsx)(t.h3,{id:"locale-based-sms-blackout",children:"Locale-based SMS Blackout"}),"\n",(0,n.jsx)(t.p,{children:"SMS Blackout allows blocking SMS sends in the chosen timeframe. Currently, SMS Blackout can be configured based on Account Timezone."}),"\n",(0,n.jsx)(t.p,{children:"However, it would be much better for multi-country clients to configure the Blackout period based on the recipient's local timezone. MobilePhone locale is perfect for implementing this."}),"\n",(0,n.jsx)(t.p,{children:"This way, it would be possible to create, for example, a single SMS Blackout for nighttime and apply it for each contact regardless of the timezone. The locale is already there for MobileConnect and can be leveraged for determining timezone offset."}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdnAVUAZ/sms-blackout-to-be-based-on-mobile-phone-locale",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"web-studio",children:"Web Studio"}),"\n",(0,n.jsx)(t.h3,{id:"cloud-page-favicon--open-graph-management",children:"Cloud Page Favicon & Open Graph Management"}),"\n",(0,n.jsxs)(t.p,{children:["Currently the only option to manage ",(0,n.jsx)(t.code,{children:"<meta>"})," elements in Web Studio is to code them manually on each Cloud Page. This is creating a lot of workload and is an error prone process."]}),"\n",(0,n.jsxs)(t.p,{children:["While many ",(0,n.jsx)(t.code,{children:"<meta>"})," tags are Cloud Page specific and this is not that big of a problem, there are some that could be shared:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Favicon - not only it could be shared by all Cloud Pages, but now it's not even possible to upload one in .ico format to Content Builder."}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"og:image"}),"/",(0,n.jsx)(t.code,{children:"twitter:image"})," - having possibility to set a default one (with possibility to overwrite for a specific page) would greatly improve the UX of social shared Cloud Pages - even just putting a nice company logo would make sharing lead or whitepaper forms look so much nicer and trigger better engagement."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This could be easily improved by Salesforce by implementing one of two options:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["[",(0,n.jsx)(t.strong,{children:"Minimum Valuable Solution"}),"] Global configuration for Web Studio where one can upload a favicon and ",(0,n.jsx)(t.code,{children:"og:image"}),"/",(0,n.jsx)(t.code,{children:"twitter:image"})," and have it applied to all Cloud Pages"]}),"\n",(0,n.jsxs)(t.li,{children:["[",(0,n.jsx)(t.strong,{children:"Solution Deluxe"}),"] Possibility to upload multiple favicons and ",(0,n.jsx)(t.code,{children:"og:images"}),"/",(0,n.jsx)(t.code,{children:"twitter:images"})," and use a picklist option on Cloud Page level to select the one that should be used."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Input field in Cloud Page editor for ",(0,n.jsx)(t.code,{children:"og:title"})," would be cherry on top."]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000I8cvPUAR/cloud-page-favicon-open-graph-management",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"journey-builder",children:"Journey Builder"}),"\n",(0,n.jsx)(t.h3,{id:"deliverytime-for-journey-builder-emails",children:"DeliveryTime for Journey Builder emails"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"DeliveryTime"})," is ",(0,n.jsxs)(t.a,{href:"../../../docs/config/sfmc-system-data-views/#_job",children:[(0,n.jsx)(t.code,{children:"_Job"})," Data View"]})," field that stores timestamp for the email delivery (when it successfully reached the target Email Service Provider). It is currently impossible to get delivery time for emails sent via Journey Builder."]}),"\n",(0,n.jsxs)(t.p,{children:["All other engagement data points are available (",(0,n.jsx)(t.code,{children:"EventDate"})," field for ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-system-data-views/#_sent",children:"_Sent"}),", ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-system-data-views/#_open",children:"_Open"}),", ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-system-data-views/#_click",children:"_Click"}),", ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-system-data-views/#_bounce",children:"_Bounce"}),"), but ",(0,n.jsx)(t.code,{children:"DeliveryTime"})," from ",(0,n.jsxs)(t.a,{href:"../../../docs/config/sfmc-system-data-views/#_job",children:[(0,n.jsx)(t.code,{children:"_Job"})," Data View"]})," returns ",(0,n.jsx)(t.code,{children:"NULL"})," for Journey Builder emails."]}),"\n",(0,n.jsx)(t.p,{children:"It is happening, however, only for Journey Builder emails. Sends via any other methods (for example, Send Flow) are correctly displaying the delivery time."}),"\n",(0,n.jsx)(t.p,{children:"I see it as a massive limitation for automations focused on keeping the database clean and debugging sends."}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdWOmUAN/delivered-time-for-journey-builder-emails",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"_datasourcename-for-entry-data-extension-in-journey-builder",children:"_DataSourceName for Entry Data Extension in Journey Builder"}),"\n",(0,n.jsxs)(t.p,{children:["As per the ",(0,n.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=mc_es_available_personalization_strings.htm&type=5",children:"documentation"}),", ",(0,n.jsx)(t.code,{children:"_DataSourceName"})," personalisation string should show the communication audience's name. It covers lists, data extensions, groups, and filters."]}),"\n",(0,n.jsxs)(t.p,{children:["It works when the email is sent via Email Studio -> Email -> Content -> Send flow. However, when we send an Email (or SMS) from Journey Builder, ",(0,n.jsx)(t.code,{children:"_DataSourceName"}),' shows "All Subscribers" instead of the Entry Data Extension name. It is true for both Multi-Step Journeys and Single Email Sends.']}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"_DataSourceName"})," should show Entry Data Extension Name for Emails in Journey Builder. It is handy to debug from Send Log and create dynamic logic in emails based on the Data Extension naming convention."]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdWOiUAN/datasourcename-should-show-entry-data-extension-in-journey-builder",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"journey-builder-script-activity",children:"Journey Builder Script Activity"}),"\n",(0,n.jsx)(t.p,{children:"Salesforce Marketing Cloud Journey Builder offers many out-of-the-box Activities and the possibility to create or download custom ones from AppExchange. However, there is a space between those solutions that Salesforce can cover to empower Marketing Cloud users. An out-of-the-box Script Activity, similar to the one available in Automation Studio."}),"\n",(0,n.jsx)(t.p,{children:"Flexible enough to offer countless possibilities to SFMC power users without the complexity of creating a custom solution with the whole hosting, scalability and security considerations."}),"\n",(0,n.jsx)(t.p,{children:"Right now, it requires either:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Stitching multiple Journeys and Automations with status-capturing Data Extensions to let members flow through the mix or"}),"\n",(0,n.jsx)(t.li,{children:"filthy tricks with scripting in emails and, in the end, raising an error to block it from sending (quasi Script Activity with bad impact on reporting, performance, speed and super messages)."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Salesforce can solve it. Below are two possible solutions (and a bonus one for even more performance-oriented fun):"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Minimum Valuable Solution"}),": Script Activity with the same features as in Automation Studio. The possibility of executing SSJS (or even AMPScript to optimise performance) against every Journey member would allow for pre-send updates of data from external systems using HTTP functions to ensure that crucial personalisation details are up-to-date."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Solution Deluxe"}),": Extension of the previous idea to define various paths based on a predefined value in the script. Think about custom decision splits using out-of-sfmc data that allow you to change the Journey path based on real-time information from external systems."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Bonus Solution"}),": There is also a place for a much less system-heavy script activity on the side. One that captures all members that get to that Activity and in predefined cadence (for example, every hour), if there is at least one member available, executes provided script once. Think of it as a mix of Wait and Script Activity that allows executing logic applied to groups. Use cases? Lazy update of the personalisation-source Data Extension that happens only if there are members that would need it. Or performance check of the subsequent communication to decide whether the members should receive it. All with the performance impact of one script execution per hour - regardless of the number of members."]}),"\n"]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdjPPUAZ/journey-builder-script-activity",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"wait-until-time-range-activity",children:"Wait Until Time Range Activity"}),"\n",(0,n.jsx)(t.p,{children:"Salesforce Marketing Cloud offers many different Wait Activities, but one basic is missing - Wait Until Time Range."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Use Case"})}),"\n",(0,n.jsx)(t.p,{children:"You want to send emails only at a specific time range (like 9 AM - 5 PM).\nFor example, Journey is filled at random times with events via API or form submissions, but you don't want the email to be sent in the night."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Current Options"})}),"\n",(0,n.jsx)(t.p,{children:"Right now, there is no easy workaround:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Einstein STO is a blackbox"}),"\n",(0,n.jsx)(t.li,{children:"Wait by Duration is closest to the solution, as it allows you to delay sending to a specific hour (for example, extend the wait duration till 9 AM). Still, unfortunately, it means that if someone enters Journey at 10 AM, they will have to wait a whole day. We want to send emails normally in a given time range."}),"\n",(0,n.jsx)(t.li,{children:"Update Contact adding Timestamp to Data Extension, and Decision Split deciding what should happen (send or Wait by Duration). Nice, but a lot of steps, configuration, performance penalty and awful Journey readability for longer Journeys."}),"\n",(0,n.jsx)(t.li,{children:"Custom Journey Builder Activity. Sure, but that's a lot of custom work and worrying about scalability."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Salesforce can solve it."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Possible solutions"})}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:'Minimum Valuable Solution: Improve Wait by Duration with "Extend wait duration outside of time range" or create a separate Wait Until Time Range Activity.'}),"\n",(0,n.jsx)(t.li,{children:"Solution Deluxe: Allow both time ranges and days-of-week ranges (with the possibility to mix both) to cover the no-sends-on-weekends use case."}),"\n"]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000KrMaMUAV/wait-until-time-range-journey-builder-activity",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"behavioral-triggers",children:"Behavioral Triggers"}),"\n",(0,n.jsx)(t.h3,{id:"einstein-user-attributes-in-behavioral-trigger-content-block",children:"Einstein User Attributes in Behavioral Trigger Content Block"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block",children:"Behavioral Triggers Content Block"})," for Emails is an excellent tool for easy drag-and-drop creation of Abandoned Engagement communication. But it is missing one powerful feature \u2014 the ability to personalise the email with customer data."]}),"\n",(0,n.jsx)(t.p,{children:"It is already available in the form of:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Einstein User Attributes that we can pass through the ",(0,n.jsx)(t.code,{children:"setUserInfo"})," data layer."]}),"\n",(0,n.jsxs)(t.li,{children:["The ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#5-building-the-api-query",children:"request"}),' used in the back end of the current Behavioral Triggers Content Block; by adding "&user_attributes=attributeName" to the endpoint.']}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#6-response-parsing",children:"Code"})," of the existing Behavioral Triggers Content Block responsible for creating AMPScript variables based on the Einstein User Attributes data."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["However, as the Einstein User Attributes are neither added to the request by default nor configured in the User Integrace of the Content Block, to get this data in the email, one must create yet another, the same call with the above query parameter added. Neither user friendly nor optimal due to expensive ",(0,n.jsx)(t.code,{children:"HTTP.Get"})," function running twice in such a scenario."]}),"\n",(0,n.jsx)(t.p,{children:"Salesforce can fix it. Below are two solution tiers:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Minimum Valuable Solution"}),': Add the required query string ("&user_attributes=X,Y") with all potential Custom Einsteins User Attributes to the request URL built within the Content Block code.']}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Solution Deluxe"}),": Improve the above with the UI-enabled selection of needed Profile Attributes, just as available with Product Attributes."]}),"\n"]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GddaZUAR/einstein-user-attributes-available-in-behavioral-trigger-content-block",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"link-tracking-in-behavioral-trigger-content-block",children:"Link Tracking in Behavioral Trigger Content Block"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block",children:"Behavioral Triggers Content Block"})," allows for easy out-of-the-box use of abandoned engagement data in our Emails. It neatly pulls the Catalog items that captivated the customer's attention and displays them for win-back purposes. Of course, each item links back to its e-commerce page."]}),"\n",(0,n.jsx)(t.p,{children:"Its implementation is, however, leading to a problem with tracking. My favourite solution - Parameter Manager with Web Analytics Connector - is not working on the Behavioral Trigger Content Block. Neither can we add the tracking parameters manually, as there is no such option in the UI."}),"\n",(0,n.jsx)(t.p,{children:"Right now, there are only two ways to add the UTM's:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Add them to the Catalog directly - this adds them for all scenarios connected to Einstein or Behavioral Triggers. Not helpful, as in most cases, we want to differentiate various personalisation placements by using distinct UTM tracking."}),"\n",(0,n.jsxs)(t.li,{children:["Create a Custom Behavioral Trigger Content Block - now we will be able to leverage direct links from ",(0,n.jsx)(t.code,{children:"IGO_PRODUCTATTRIBS"})," add tracking to them in the product's HTML template. Okay, but not easy and make you lose click data for Einstein Recommendations."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Salesforce can fix it. Below are two possible solutions:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Minimum Valuable Solution"}),": Add a text box to a Behavioral Trigger Content Block configuration menu to add our custom tracking. The Content Block should apply the provided tracking query to each link. AMPScript support included."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Solution Deluxe"}),": On top of the above solution, Marketing Cloud should consider the Parameter Management to allow for a mix of global UTM's from Web Analytics Connector and local from the new text box in Behavioral Trigger Content Block configuration."]}),"\n"]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdhNRUAZ/link-tracking-in-behavioral-trigger-content-block",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"behavioral-trigger-abandoned-cart-custom-attributes",children:"Behavioral Trigger Abandoned Cart Custom Attributes"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/",children:"Behavioral Triggers"})," are a terrific solution for Abandoned Engagement. The ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#track-cart",children:"Abandoned Cart"})," scenario already has multiple great features that make it easy to implement."]}),"\n",(0,n.jsx)(t.p,{children:"There is, however, an area for an easy improvement on that idea to make it much more flexible and ready for real-world scenarios. Salesforce can do it with two solutions:"}),"\n",(0,n.jsx)(t.h4,{id:"custom-cart-attributes",children:"Custom Cart Attributes"}),"\n",(0,n.jsx)(t.p,{children:"Just as there are Custom Attributes for the Product Catalog, it would be great to have a similar option on the cart itself. Product Catalog ones are global - shared for all Customers interested in selected products. There is a need for something more unique and customer-specific."}),"\n",(0,n.jsxs)(t.p,{children:["It is already available in the form of an optional ",(0,n.jsx)(t.code,{children:"price"})," attribute of ",(0,n.jsxs)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#track-cart",children:[(0,n.jsx)(t.code,{children:"trackCart"})," Collect.js Data Layer"]})," that contains individual price that does not impact the Product Catalog. It would be great to have the possibility to add a few more, available in ",(0,n.jsxs)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#track-cart",children:[(0,n.jsx)(t.code,{children:"trackCart"})," Collect.js"]})," and the ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses",children:"response"})," from Einstein Backend (IgoDigital)."]}),"\n",(0,n.jsxs)(t.p,{children:["Use case? Sure. Coupon Code Name, Coupon Code Discount (either integer or float for per cent value), added Personalisation, Voucher ID. All those tools are frequently used in e-commerce and would be perfect for a ",(0,n.jsx)(t.code,{children:"trackCart"})," layer. Suitable for personalisation, perfect for passing data needed for rebuilding the cart."]}),"\n",(0,n.jsx)(t.h4,{id:"cart-attributes-visibility-in-the-content-block",children:"Cart Attributes Visibility in the Content Block"}),"\n",(0,n.jsxs)(t.p,{children:["This one is an extension of the above idea. We already have a way to decide which Product Catalog Attributes are displayed in the Behavioral Trigger Content Block. But in many cases, when I use Abandoned Cart, I would like to show ",(0,n.jsx)(t.code,{children:"trackCart"})," individual price (including applied coupons) instead of the global Catalog one. It could also be helpful for some Custom Cart Attributes from the previous solution."]}),"\n",(0,n.jsx)(t.p,{children:"Below are three solution tiers:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Minimum Valuable Solution"}),": Add ",(0,n.jsx)(t.code,{children:"price"})," ",(0,n.jsx)(t.code,{children:"trackCart"})," attribute (",(0,n.jsx)(t.code,{children:"amount"})," in the ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses",children:"response"})," from the IgoDigital) available for selection when defining fields shown for products in ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block",children:"Behavioral Trigger Content Block"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Nice Solution"}),": On top of the first point, add two additional (optional) attributes to ",(0,n.jsx)(t.code,{children:"trackCart"})," Collect.js and IgoDigital ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses",children:"response"}),": ",(0,n.jsx)(t.code,{children:"couponCodeName"}),", ",(0,n.jsx)(t.code,{children:"couponCodeDiscount "}),"- and make them also available for selection in ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block",children:"Behavioral Trigger Content Block"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Solution Deluxe"}),": On top of the first point, add the possibility of defining Custom Cart Attributes in the UI and leveraging them in ",(0,n.jsx)(t.code,{children:"trackCart"})," Collect.js and IgoDigital ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#api-responses",children:"response"}),". Just as with Custom Profile Attributes / Custom Product Attributes. Additionally, make them also available for selection in ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#behavioral-trigger-content-block",children:"Behavioral Trigger Content Block"}),"."]}),"\n"]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdbvFUAR/behavioral-trigger-abandoned-cart-custom-attributes",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.h3,{id:"behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",children:"Behavioral Trigger Content Block rendering on Yahoo, AOL, Windows Outlook"}),"\n",(0,n.jsx)(t.p,{children:"The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. On those Email Providers, the product text is not displayed, and the customer only sees the images."}),"\n",(0,n.jsxs)(t.p,{children:["The reason for this is using ",(0,n.jsx)(t.code,{children:"rem"})," units font-size for product descriptions - ",(0,n.jsx)(t.code,{children:"font-size: 0.8125rem"}),":"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.code,{children:'<td class="mcbt_name" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 310px;">--name--</td>'})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"rem"})," units are currently not supported by Yahoo, AOL and Windows Outlook (",(0,n.jsx)(t.a,{href:"https://www.caniemail.com/features/css-unit-rem/",children:"Can I Email"}),") which leads to those Email Providers ignoring this parameter. When this happens, the font-size value is inherited from the parent that have font-size configured."]}),"\n",(0,n.jsxs)(t.p,{children:["And for Behavioral Trigger Content block that parent is a ",(0,n.jsx)(t.code,{children:"<td>"})," parameter within header ",(0,n.jsx)(t.a,{href:"../../../docs/config/sfmc-behavioral-triggers/#3-settings--markup-fragments",children:(0,n.jsx)(t.code,{children:"markupFragment"})}),". Unfortunately, it has ",(0,n.jsx)(t.code,{children:"font-size: 0"}),":"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.code,{children:'<td class="multi-column" style="padding: 0; text-align: center; font-size: 0; padding-top: 10px; padding-bottom: 10px;">'})}),"\n",(0,n.jsxs)(t.p,{children:["There should be no ",(0,n.jsx)(t.code,{children:"rem"})," units used in the Behavioral Trigger Content Block code and instead a standard ",(0,n.jsx)(t.code,{children:"px"})," font-size assignment for the Block to render correctly."]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdZZBUA3/behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"content-builder",children:"Content Builder"}),"\n",(0,n.jsx)(t.h3,{id:"content-builder-shared-folders-permissions",children:"Content Builder Shared Folders Permissions"}),"\n",(0,n.jsx)(t.p,{children:"Content Builder is great for creating and neatly organising assets in Marketing Cloud, but it has one huge issue. Folder access management."}),"\n",(0,n.jsxs)(t.p,{children:["There are already great ",(0,n.jsx)(t.a,{href:"https://trailblazer.salesforce.com/ideaView?id=0873A000000PZ6oQAG",children:"Ideas on expanding the folder rights"}),", so in this Idea, I want to focus on something different - and much easier to fix for Salesforce."]}),"\n",(0,n.jsx)(t.p,{children:"When settings permissions for a Marketing Cloud User or Role, there are options that control the rights to Shared Folders of Content Builder. As with Shared Data Extensions Folder permissions, you can decide what the user or role can do with Shared Content Folders."}),"\n",(0,n.jsx)(t.p,{children:"However, there is one huge difference:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"With Shared Data Extension Folders, when you remove all permissions, the user or role can no longer see Shared space and effectively loses access to all Shared Data Extensions."}),"\n",(0,n.jsxs)(t.li,{children:["With Shared Content Folders, when you remove all permissions, the user or role will not see the folders, but they will still see the Shared Folder tab and - what's much worse - ",(0,n.jsx)(t.code,{children:"All Shared Content"})," section displaying all the Content assets stored within Shared Folders."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"As SFMC applies the permissions to read and edit content to both local and shared assets, every person with edit rights can change assets in a Shared Content Folder - event if they do not have permission to that folder."}),"\n",(0,n.jsx)(t.p,{children:"This behaviour breaks a prevalent use case of having local folders available to all creators while limiting shared folders only to administrative roles. It is possible (and very useful) for Data Extensions. But not for Content Builder, as everyone can access all administrative-level assets (like master templates or crucial content blocks)."}),"\n",(0,n.jsxs)(t.p,{children:["The fix is straightforward - if the current user does not have any permissions to Shared Content Builder Folders, it shouldn't see either the ",(0,n.jsx)(t.code,{children:"All Shared Content"})," section or even the Shared Folders tab. That's it. It would then mirror the Shared Data Extension folder permissions and enable the local/administrative access split use case."]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000GdbEjUAJ/content-builder-shared-folder-permissions",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(t.h3,{id:"restore-default-permissions-for-sfmc-standard-system-roles",children:"Restore default permissions for SFMC Standard System Roles"}),"\n",(0,n.jsx)(t.p,{children:"While Salesforce updates the Standard Roles (Email Studio and Marketing Cloud ones) during Releases, users can also modify them within the SFMC Setup freely (permissions of those System Roles are not locked)."}),"\n",(0,n.jsx)(t.p,{children:"Unfortunately, there is no option to see whether the Standard Role deviates from the default configuration. It creates problems for new administrators coming to existing implementation or after someone modifies the wrong role by mistake/not following the best practices."}),"\n",(0,n.jsx)(t.p,{children:"Official documentation only stores high-level information about the out-of-the-box configuration that cannot be used to restore the original state."}),"\n",(0,n.jsx)(t.p,{children:"It would be of great help to have on the Stnadard System Roles either:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Button that lets you restore the default (for new orgs) permissions configuration or"}),"\n",(0,n.jsx)(t.li,{children:"Information on each permission what is its default state."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Currently, there is no real workaround apart from:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Checking it against another, unchanged SFMC (which is not an option for most) or"}),"\n",(0,n.jsxs)(t.li,{children:["Using the manual ",(0,n.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/sfmc-roles-backup",children:"backup, I'm currently building"})," (which is not the best long-term option, especially with all the changes to the permissions happening multiple times a year)."]}),"\n"]}),"\n",(0,n.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000KSOTSUA5/restore-default-permissions-for-marketing-cloud-system-roles",text:"Vote on IdeaExchange",newTab:"true"})]})}function m(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},7271:(e,t,i)=>{i.d(t,{V:()=>a,z:()=>o});i(7294);var n=i(5893);const o=e=>{let{link:t,text:i,newTab:o=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:o?"_blank":"_self",children:i})})},a=e=>{let{linkLeft:t,textLeft:i,newTabLeft:o=!1,linkRight:a,textRight:r,newTabRight:s=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsxs)("div",{class:"col col--12",children:[(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:o?"_blank":"_self",children:i}),(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:a,target:s?"_blank":"_self",children:r})]})})}},1872:(e,t,i)=>{i.d(t,{m:()=>a});i(7294);const n="leadText_qzwo";var o=i(5893);const a=e=>{let{content:t}=e;return(0,o.jsx)(o.Fragment,{children:(0,o.jsx)("p",{id:n,children:t})})}},1151:(e,t,i)=>{i.d(t,{Z:()=>s,a:()=>r});var n=i(7294);const o={},a=n.createContext(o);function r(e){const t=n.useContext(a);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:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/30084dac.ce88301b.js b/assets/js/30084dac.ce88301b.js deleted file mode 100644 index d3ff5acd2..000000000 --- a/assets/js/30084dac.ce88301b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3687],{4137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>k});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,l=function(e,t){if(null==e)return{};var a,n,l={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var u=n.createContext({}),s=function(e){var t=n.useContext(u),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=s(e.components);return n.createElement(u.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,u=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),p=s(a),c=l,k=p["".concat(u,".").concat(c)]||p[c]||d[c]||r;return a?n.createElement(k,i(i({ref:t},m),{},{components:a})):n.createElement(k,i({ref:t},m))}));function k(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,i=new Array(r);i[0]=c;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[p]="string"==typeof e?e:l,i[1]=o;for(var s=2;s<r;s++)i[s]=a[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},425:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(6010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,l.Z)(r.tabItem,i),hidden:a},t)}},3992:(e,t,a)=>{a.d(t,{Z:()=>C});var n=a(7462),l=a(7294),r=a(6010),i=a(2957),o=a(6550),u=a(5238),s=a(3609),m=a(2560);function p(e){return function(e){return l.Children.map(e,(e=>{if(!e||(0,l.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:l}}=e;return{value:t,label:a,attributes:n,default:l}}))}function d(e){const{values:t,children:a}=e;return(0,l.useMemo)((()=>{const e=t??p(a);return function(e){const t=(0,s.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function c(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function k(e){let{queryString:t=!1,groupId:a}=e;const n=(0,o.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,u._X)(r),(0,l.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})}),[r,n])]}function N(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,r=d(e),[i,o]=(0,l.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!c({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[u,s]=k({queryString:a,groupId:n}),[p,N]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,r]=(0,m.Nk)(a);return[n,(0,l.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:n}),g=(()=>{const e=u??p;return c({value:e,tabValues:r})?e:null})();(0,l.useLayoutEffect)((()=>{g&&o(g)}),[g]);return{selectedValue:i,selectValue:(0,l.useCallback)((e=>{if(!c({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),s(e),N(e)}),[s,N,r]),tabValues:r}}var g=a(1048);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:t,block:a,selectedValue:o,selectValue:u,tabValues:s}=e;const m=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),d=e=>{const t=e.currentTarget,a=m.indexOf(t),n=s[a].value;n!==o&&(p(t),u(n))},c=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=m.indexOf(e.currentTarget)+1;t=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(e.currentTarget)-1;t=m[a]??m[m.length-1];break}}t?.focus()};return l.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},s.map((e=>{let{value:t,label:a,attributes:i}=e;return l.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>m.push(e),onKeyDown:c,onClick:d},i,{className:(0,r.Z)("tabs__item",h.tabItem,i?.className,{"tabs__item--active":o===t})}),a??t)})))}function f(e){let{lazy:t,children:a,selectedValue:n}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===n));return e?(0,l.cloneElement)(e,{className:"margin-top--md"}):null}return l.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,l.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=N(e);return l.createElement("div",{className:(0,r.Z)("tabs-container",h.tabList)},l.createElement(b,(0,n.Z)({},e,t)),l.createElement(f,(0,n.Z)({},e,t)))}function C(e){const t=(0,g.Z)();return l.createElement(y,(0,n.Z)({key:String(t)},e))}},1872:(e,t,a)=>{a.d(t,{m:()=>r});var n=a(7294);const l="leadText_qzwo",r=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:l},t))}},201:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>N,frontMatter:()=>u,metadata:()=>m,toc:()=>d});var n=a(7462),l=(a(7294),a(4137)),r=a(3992),i=a(425),o=a(1872);const u={id:"sfmc-sql-aggregate-functions",title:"SFMC SQL Aggregate Functions",sidebar_label:"Aggregate Functions",description:"Group rows and apply aggregate functions to see the big picture in your data extensions.",image:"img/og/og-image-sql-aggregate-functions.png",tags:["Marketing Cloud","SQL"]},s=void 0,m={unversionedId:"sql/sfmc-sql-aggregate-functions",id:"sql/sfmc-sql-aggregate-functions",title:"SFMC SQL Aggregate Functions",description:"Group rows and apply aggregate functions to see the big picture in your data extensions.",source:"@site/docs/sql/sfmc-sql-aggregate-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-aggregate-functions",permalink:"/docs/sql/sfmc-sql-aggregate-functions",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-aggregate-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-aggregate-functions",title:"SFMC SQL Aggregate Functions",sidebar_label:"Aggregate Functions",description:"Group rows and apply aggregate functions to see the big picture in your data extensions.",image:"img/og/og-image-sql-aggregate-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Conversion Functions",permalink:"/docs/sql/sfmc-sql-conversion-functions"},next:{title:"Null Functions",permalink:"/docs/sql/sfmc-sql-null-functions"}},p={},d=[{value:"GROUP BY",id:"group-by",level:2},{value:"GROUP BY ROLLUP",id:"group-by-rollup",level:3},{value:"GROUP BY CUBE",id:"group-by-cube",level:3},{value:"COUNT",id:"count",level:2},{value:"COUNT *, ALL and DISTINCT",id:"count--all-and-distinct",level:3},{value:"HAVING",id:"having",level:2},{value:"HAVING vs WHERE",id:"having-vs-where",level:3},{value:"MIN and MAX",id:"min-and-max",level:2},{value:"AVG",id:"avg",level:2},{value:"SUM",id:"sum",level:2}],c={toc:d},k="wrapper";function N(e){let{components:t,...a}=e;return(0,l.kt)(k,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)(o.m,{content:"Group rows and apply aggregate functions to see the big picture in your data.",mdxType:"LeadText"}),(0,l.kt)("h2",{id:"group-by"},"GROUP BY"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"GROUP BY")," allows you to create aggregation by grouping the input data on selected column(s)."),(0,l.kt)("p",null,"It limits the data you can ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,l.kt)("inlineCode",{parentName:"a"},"SELECT"))," to either ",(0,l.kt)("inlineCode",{parentName:"p"},"GROUP BY")," column(s) or aggregate functions."),(0,l.kt)("p",null,"Let's say you want to check which email domains are most popular in your database."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{5}","{5}":!0},"SELECT\n Domain\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY Domain\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"SubscriberCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mateuszdabrowski.pl"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"1234")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"987")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"1111")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"..."),(0,l.kt)("td",{parentName:"tr",align:null},"...")))))),(0,l.kt)("p",null,"With this simple query, you have all subscribers grouped by their domain with the number of matching rows thanks to the ",(0,l.kt)("a",{parentName:"p",href:"#count"},(0,l.kt)("inlineCode",{parentName:"a"},"COUNT"))," function."),(0,l.kt)("p",null,"You can quickly improve this query by limiting the records with ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#top"},(0,l.kt)("inlineCode",{parentName:"a"},"TOP"))," and sorting ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#top-with-order-by"},(0,l.kt)("inlineCode",{parentName:"a"},"ORDER BY"))," to leverage Pareto's principle and pick 20% of the records responsible for 80% of the results. In this case - 20% domains covering approximately 80% subscribers."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{5}","{5}":!0},"SELECT TOP 20 PERCENT\n Domain\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY Domain\nORDER BY COUNT(*) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"SubscriberCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"1234")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"1111")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"987")))))),(0,l.kt)("p",null,"With such data, you can assess your mailing list and decide, for example, whether using AMP for Email will be worth the effort for your business."),(0,l.kt)("p",null,"It is, however, just the beginning of what you can do with ",(0,l.kt)("inlineCode",{parentName:"p"},"GROUP BY"),". The real magic happens with multiple columns used for the grouping."),(0,l.kt)("p",null,"Let's check how the domain numbers are changing in years with the help of the ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#datepart"},(0,l.kt)("inlineCode",{parentName:"a"},"DATEPART")," function")," and ",(0,l.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"DateJoined")," field"),"."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6-8}","{6-8}":!0},"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY\n Domain\n , DATEPART(YEAR, DateJoined)\nORDER BY COUNT(*) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"YearJoined"),(0,l.kt)("th",{parentName:"tr",align:null},"SubscriberCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"642")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"578")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"567")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"456")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"432")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"345")))))),(0,l.kt)("p",null,"As you can see, by just adding more columns after a comma (order is irrelevant), we can make even more exciting groupings. In this case, we will have a separate row for each domain and year. Easy to see how many Subscribers using Gmail joined your database in 2021 vs 2020."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"GROUP BY")," will group ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-null-functions#null"},(0,l.kt)("inlineCode",{parentName:"a"},"NULL"))," values as if they are equal.")),(0,l.kt)("h3",{id:"group-by-rollup"},"GROUP BY ROLLUP"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"ROLLUP")," takes the multi-column grouping to the next level by showing totals and subtotals in the outcomes. Not useful for campaign segmentation, but excellent for quick analysis and reporting."),(0,l.kt)("p",null,"To use it - add the ",(0,l.kt)("inlineCode",{parentName:"p"},"ROLLUP")," keyword and wrap grouping columns in parentheses."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6-9}","{6-9}":!0},"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY ROLLUP (\n Domain\n , DATEPART(YEAR, DateJoined)\n )\nORDER BY COUNT(*) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"YearJoined"),(0,l.kt)("th",{parentName:"tr",align:null},"SubscriberCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"12304")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"1234")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"1111")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"987")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"642")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"578")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"567")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"456")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"432")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"345")))))),(0,l.kt)("p",null,"In the outcomes, you will see some rows with ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," as columns - those are rows for total and subtotals."),(0,l.kt)("p",null,"Notice that the ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"s are either in all columns (total) or the ",(0,l.kt)("inlineCode",{parentName:"p"},"YearJoined")," column (subtotals). There are no rows with ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," only in ",(0,l.kt)("inlineCode",{parentName:"p"},"Domain"),". It is because the ",(0,l.kt)("inlineCode",{parentName:"p"},"ROLLUP")," rolls columns provided in parentheses from right to left when calculating subtotals."),(0,l.kt)("p",null,"Order of columns will have a massive impact on outcomes!"),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"You can also perform partial rollup by keeping some columns outside of the ",(0,l.kt)("inlineCode",{parentName:"p"},"ROLLUP")," operator. In the example below, I excluded ",(0,l.kt)("inlineCode",{parentName:"p"},"Domain")," from the ",(0,l.kt)("inlineCode",{parentName:"p"},"ROLLUP")," resulting in the lack of total in the outcomes."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",{parentName:"admonition"},(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6-8}","{6-8}":!0},"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY\n Domain\n , ROLLUP(DATEPART(YEAR, DateJoined))\nORDER BY COUNT(*) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",{parentName:"admonition"},(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"YearJoined"),(0,l.kt)("th",{parentName:"tr",align:null},"SubscriberCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"1234")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"1111")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"987")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"642")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"578")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"567")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"456")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"432")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"345"))))))),(0,l.kt)("h3",{id:"group-by-cube"},"GROUP BY CUBE"),(0,l.kt)("p",null,"If you thought that right-to-left execution of the ",(0,l.kt)("inlineCode",{parentName:"p"},"ROLLUP")," is not helping your use case and instead you would rather have all possible groupings - ",(0,l.kt)("inlineCode",{parentName:"p"},"CUBE")," is here to help."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6-9}","{6-9}":!0},"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY CUBE (\n Domain\n , DATEPART(YEAR, DateJoined)\n )\nORDER BY COUNT(*) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"YearJoined"),(0,l.kt)("th",{parentName:"tr",align:null},"SubscriberCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"12304")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"6201")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"4321")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"1234")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"1111")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"null"),(0,l.kt)("td",{parentName:"tr",align:null},"987")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"642")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"578")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"567")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"456")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2021"),(0,l.kt)("td",{parentName:"tr",align:null},"432")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2020"),(0,l.kt)("td",{parentName:"tr",align:null},"345")))))),(0,l.kt)("p",null,"It rolls data like ",(0,l.kt)("a",{parentName:"p",href:"#group-by-rollup"},(0,l.kt)("inlineCode",{parentName:"a"},"ROLLUP")),", but for all combinations of columns. Notice in the outcomes the second and third rows with ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"s in first column and count for the whole year."),(0,l.kt)("h2",{id:"count"},"COUNT"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"COUNT")," function allows you to count the number of rows that matches a query. It is excellent for both ",(0,l.kt)("em",{parentName:"p"},"ad hoc")," data exploration and creating administrative queries that help maintain your instance. It's also a must-have for ",(0,l.kt)("a",{parentName:"p",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY")),"."),(0,l.kt)("p",null,"Let's get the count of our Subscribers in Master Data Extension."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="Count all rows in the _Subscribers Data View"',"{1}":!0,title:'"Count',all:!0,rows:!0,in:!0,the:!0,_Subscribers:!0,Data:!0,'View"':!0},"SELECT COUNT(*)\nFROM ContactMasterDE\n")),(0,l.kt)("p",null,"Nice, but it does not give us any information that we couldn't find more comfortable in the User Interface. So, where is the added value?"),(0,l.kt)("p",null,"For example, in seeing whether you have potential duplicate contacts. Instead of looking for all rows with ",(0,l.kt)("inlineCode",{parentName:"p"},"COUNT(*)"),", we will change the function argument to the specific column to count only its ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-null-functions#null"},"non-",(0,l.kt)("inlineCode",{parentName:"a"},"NULL"))," values."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3,6} title="This query will show you which Email Addresses exists on more than one subscriber"',"{3,6}":!0,title:'"This',query:!0,will:!0,show:!0,you:!0,which:!0,Email:!0,Addresses:!0,exists:!0,on:!0,more:!0,than:!0,one:!0,'subscriber"':!0},"SELECT\n EmailAddress\n , COUNT(EmailAddress) AS EmailCount\nFROM ContactMasterDE\nGROUP BY EmailAddress\nHAVING COUNT(EmailAddress) > 1\n")),(0,l.kt)("p",null,"With ",(0,l.kt)("a",{parentName:"p",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY"))," and ",(0,l.kt)("a",{parentName:"p",href:"#having"},(0,l.kt)("inlineCode",{parentName:"a"},"HAVING"))," above, we can simplify the output by showing only the duplicate values with corresponding counts."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"You can take it to the next level with the subquery approach:"),(0,l.kt)("pre",{parentName:"admonition"},(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{11-12} title="Returns Subscriber Key, Email Address and Duplicate Count of your database"',"{11-12}":!0,title:'"Returns',Subscriber:!0,"Key,":!0,Email:!0,Address:!0,and:!0,Duplicate:!0,Count:!0,of:!0,your:!0,'database"':!0},"SELECT\n subscribers.SubscriberKey\n , subscribers.EmailAddress\n , counted.EmailCount\nFROM ContactMasterDE AS subscribers\n INNER JOIN (\n SELECT\n contacts.EmailAddress AS EmailAddress\n , COUNT(contacts.EmailAddress) AS EmailCount\n FROM ContactMasterDE AS contacts\n GROUP BY contacts.EmailAddress\n HAVING COUNT(contacts.EmailAddress) > 1\n ) AS counted\n ON counted.EmailAddress = subscribers.EmailAddress\n")),(0,l.kt)("p",{parentName:"admonition"},"This extended query will not only tell you that there are potential duplicates. It will also give you Subscriber Keys of duplicate contacts so that you can investigate the reason and clean up records after fixing the underlying issue."),(0,l.kt)("p",{parentName:"admonition"},"Pack it into Automation with Verification Activity on top and keep your database clean with ease.")),(0,l.kt)("h3",{id:"count--all-and-distinct"},"COUNT *, ALL and DISTINCT"),(0,l.kt)("p",null,"There are three approaches to using ",(0,l.kt)("inlineCode",{parentName:"p"},"COUNT")," that differ slightly from each other."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"COUNT(*)")," will return the number of items, including ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions#null"},(0,l.kt)("inlineCode",{parentName:"a"},"NULL"))," values and duplicates."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"COUNT(FieldName)")," / ",(0,l.kt)("inlineCode",{parentName:"li"},"COUNT(ALL FieldName)")," will return the number on ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions#null"},"non-",(0,l.kt)("inlineCode",{parentName:"a"},"NULL"))," values including duplicates."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"COUNT(DISTINCT FieldName)")," will return the number of ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions#null"},"non-",(0,l.kt)("inlineCode",{parentName:"a"},"NULL"))," and non-duplicate values.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{2-4} title="Let\'s find out whether we have multiple Subscribers with the same Email Address"',"{2-4}":!0,title:"\"Let's",find:!0,out:!0,whether:!0,we:!0,have:!0,multiple:!0,Subscribers:!0,with:!0,the:!0,same:!0,Email:!0,'Address"':!0},"SELECT\n COUNT(EmailAddress) AS EmailCount\n , COUNT(DISTINCT EmailAddress) AS UniqueEmailCount\nFROM _Subscribers\n")),(0,l.kt)("h2",{id:"having"},"HAVING"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"HAVING")," works nearly the same as ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," and allows you to filter outcomes of your ",(0,l.kt)("a",{parentName:"p",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY")),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6} title="This query will show you which Email Addresses exists on more than one subscriber"',"{6}":!0,title:'"This',query:!0,will:!0,show:!0,you:!0,which:!0,Email:!0,Addresses:!0,exists:!0,on:!0,more:!0,than:!0,one:!0,'subscriber"':!0},"SELECT\n EmailAddress\n , COUNT(EmailAddress) AS EmailCount\nFROM _Subscribers\nGROUP BY EmailAddress\nHAVING COUNT(EmailAddress) > 1\n")),(0,l.kt)("p",null,"You can leverage all filtering tricks from ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE")),". In practice, I mostly use it along with aggregate functions like ",(0,l.kt)("a",{parentName:"p",href:"#count"},(0,l.kt)("inlineCode",{parentName:"a"},"COUNT")),"."),(0,l.kt)("h3",{id:"having-vs-where"},"HAVING vs WHERE"),(0,l.kt)("p",null,"I just wrote that ",(0,l.kt)("inlineCode",{parentName:"p"},"HAVING")," and ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," work similarly, and both filter the outcomes. What is the difference?"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"WHERE")," filters individual data (rows before ",(0,l.kt)("a",{parentName:"li",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY"))," is applied)"),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"HAVING")," filters aggregated data (rows after ",(0,l.kt)("a",{parentName:"li",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY"))," is applied)")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5,7} title="This query will show you which Email Addresses exists on more than one active subscriber"',"{5,7}":!0,title:'"This',query:!0,will:!0,show:!0,you:!0,which:!0,Email:!0,Addresses:!0,exists:!0,on:!0,more:!0,than:!0,one:!0,active:!0,'subscriber"':!0},"SELECT\n EmailAddress\n , COUNT(EmailAddress) AS EmailCount\nFROM _Subscribers\nWHERE Status = 'active'\nGROUP BY EmailAddress\nHAVING COUNT(EmailAddress) > 1\n")),(0,l.kt)("p",null,"Thanks to using both ",(0,l.kt)("inlineCode",{parentName:"p"},"WHERE")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"HAVING")," in this query, we will look only for duplicate active Subscribers. If we have two subscribers with the same email, but one is inactive, this query won't output it."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"You can use both in the same query and even mix it with ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#distinct"},(0,l.kt)("inlineCode",{parentName:"a"},"DISTINCT")),"."),(0,l.kt)("p",{parentName:"admonition"},"However, when building such layered filters, keep in mind the SQL's order of execution for clauses:"),(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,l.kt)("inlineCode",{parentName:"a"},"FROM"))," > ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," > ",(0,l.kt)("a",{parentName:"p",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY"))," > ",(0,l.kt)("a",{parentName:"p",href:"#having"},(0,l.kt)("inlineCode",{parentName:"a"},"HAVING"))," > ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#distinct"},(0,l.kt)("inlineCode",{parentName:"a"},"DISTINCT"))," > ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#top-with-order-by"},(0,l.kt)("inlineCode",{parentName:"a"},"ORDER BY"))),(0,l.kt)("p",{parentName:"admonition"},"It means that rows filtered with ",(0,l.kt)("inlineCode",{parentName:"p"},"WHERE")," will not be taken into consideration for ",(0,l.kt)("inlineCode",{parentName:"p"},"GROUP BY")," and that ",(0,l.kt)("inlineCode",{parentName:"p"},"DISTINCT")," deduplication will be applied to results grouped and filtered by ",(0,l.kt)("inlineCode",{parentName:"p"},"HAVING")," - not the source data.")),(0,l.kt)("h2",{id:"min-and-max"},"MIN and MAX"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"MIN")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"MAX")," functions can help you find the minimum and maximum values within a group."),(0,l.kt)("p",null,"As they are aggregate functions, we can use them in both the ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,l.kt)("inlineCode",{parentName:"a"},"SELECT"))," part of the query and for filtering with ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," or ",(0,l.kt)("a",{parentName:"p",href:"#having"},(0,l.kt)("inlineCode",{parentName:"a"},"HAVING")),"."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3-4,7} title="Let\'s find domains that are no longer getting new subscribers"',"{3-4,7}":!0,title:"\"Let's",find:!0,domains:!0,that:!0,are:!0,no:!0,longer:!0,getting:!0,new:!0,'subscribers"':!0},"SELECT TOP 10\n Domain\n , MIN(DATEDIFF(DAY, DateJoined, GETDATE())) AS YoungestSubscriberDaysOfService\n , MAX(DATEDIFF(DAY, DateJoined, GETDATE())) AS OldestSubscriberDaysOfService\nFROM _Subscribers\nGROUP BY Domain\nORDER BY MIN(DATEDIFF(DAY, DateJoined, GETDATE())) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"YoungestSubscriberDaysOfService"),(0,l.kt)("th",{parentName:"tr",align:null},"OldestSubscriberDaysOfService"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mateuszdabrowski.pl"),(0,l.kt)("td",{parentName:"tr",align:null},"784"),(0,l.kt)("td",{parentName:"tr",align:null},"784")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"test.com"),(0,l.kt)("td",{parentName:"tr",align:null},"530"),(0,l.kt)("td",{parentName:"tr",align:null},"743")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"253"),(0,l.kt)("td",{parentName:"tr",align:null},"723")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"..."),(0,l.kt)("td",{parentName:"tr",align:null},"..."),(0,l.kt)("td",{parentName:"tr",align:null},"...")))))),(0,l.kt)("p",null,"Learn more about ",(0,l.kt)("inlineCode",{parentName:"p"},"MIN")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"MAX")," in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-numeric-functions#min-and-max"},"Numeric Functions documentation"),"."),(0,l.kt)("h2",{id:"avg"},"AVG"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"AVG")," function allows you to find the average of values within the group."),(0,l.kt)("p",null,"It ignores ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," values for the calculation and we can use it in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,l.kt)("inlineCode",{parentName:"a"},"SELECT")),", ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," or ",(0,l.kt)("a",{parentName:"p",href:"#having"},(0,l.kt)("inlineCode",{parentName:"a"},"HAVING"))," part of the query."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3,6,7} title="Let\'s find domain that are bouncing for most users"',"{3,6,7}":!0,title:"\"Let's",find:!0,domain:!0,that:!0,are:!0,bouncing:!0,for:!0,most:!0,'users"':!0},"SELECT TOP 10\n Domain\n , AVG(BounceCount) AS AverageBounceCount\nFROM _Subscribers\nGROUP BY Domain\nHAVING AVG(BounceCount) > 0\nORDER BY AVG(BounceCount) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Domain"),(0,l.kt)("th",{parentName:"tr",align:null},"AverageBounceCount"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"test.com"),(0,l.kt)("td",{parentName:"tr",align:null},"164")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"yahoo.com"),(0,l.kt)("td",{parentName:"tr",align:null},"2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"outlook.com"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"gmail.com"),(0,l.kt)("td",{parentName:"tr",align:null},"1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"..."),(0,l.kt)("td",{parentName:"tr",align:null},"...")))))),(0,l.kt)("p",null,"Learn more about ",(0,l.kt)("inlineCode",{parentName:"p"},"AVG")," in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-numeric-functions#avg"},"Numeric Functions documentation"),"."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"AVG")," will ignore rows with ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-null-functions"},(0,l.kt)("inlineCode",{parentName:"a"},"NULL")),", which can skew your results. ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-null-functions#coalesce"},(0,l.kt)("inlineCode",{parentName:"a"},"COALESCE"))," will be your best friend to make sense out of imperfect data.")),(0,l.kt)("h2",{id:"sum"},"SUM"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"SUM")," function allows you to find the sum of values within the group."),(0,l.kt)("p",null,"It ignores ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," values for the calculation and we can use it in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,l.kt)("inlineCode",{parentName:"a"},"SELECT")),", ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," or ",(0,l.kt)("a",{parentName:"p",href:"#having"},(0,l.kt)("inlineCode",{parentName:"a"},"HAVING"))," part of the query."),(0,l.kt)(r.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"query",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4,8-9} title="Let\'s find product categories responsible for the highest income"',"{4,8-9}":!0,title:"\"Let's",find:!0,product:!0,categories:!0,responsible:!0,for:!0,the:!0,highest:!0,'income"':!0},"SELECT TOP 3\n ProductCategory\n , COUNT(Orders) AS TotalOrders\n , SUM(Price) AS TotalIncome\nFROM Purchases\nWHERE Status = 'Complete'\nGROUP BY ProductCategory\nHAVING SUM(Price) > 1000\nORDER BY SUM(Price) DESC\n"))),(0,l.kt)(i.Z,{value:"outcome",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"ProductCategory"),(0,l.kt)("th",{parentName:"tr",align:null},"TotalOrders"),(0,l.kt)("th",{parentName:"tr",align:null},"TotalIncome"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Course"),(0,l.kt)("td",{parentName:"tr",align:null},"12"),(0,l.kt)("td",{parentName:"tr",align:null},"5500")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Webinar"),(0,l.kt)("td",{parentName:"tr",align:null},"76"),(0,l.kt)("td",{parentName:"tr",align:null},"5120")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Ebook"),(0,l.kt)("td",{parentName:"tr",align:null},"136"),(0,l.kt)("td",{parentName:"tr",align:null},"3450")))))))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/30084dac.dd2d0530.js b/assets/js/30084dac.dd2d0530.js new file mode 100644 index 000000000..79c9d8986 --- /dev/null +++ b/assets/js/30084dac.dd2d0530.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3687],{3513:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>h,contentTitle:()=>o,default:()=>j,frontMatter:()=>d,metadata:()=>a,toc:()=>u});var r=n(5893),l=n(1151),t=n(3992),i=n(425),c=n(1872);const d={id:"sfmc-sql-aggregate-functions",title:"SFMC SQL Aggregate Functions",sidebar_label:"Aggregate Functions",description:"Group rows and apply aggregate functions to see the big picture in your data extensions.",image:"img/og/og-image-sql-aggregate-functions.png",tags:["Marketing Cloud","SQL"]},o=void 0,a={id:"sql/sfmc-sql-aggregate-functions",title:"SFMC SQL Aggregate Functions",description:"Group rows and apply aggregate functions to see the big picture in your data extensions.",source:"@site/docs/sql/sfmc-sql-aggregate-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-aggregate-functions",permalink:"/docs/sql/sfmc-sql-aggregate-functions",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-aggregate-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-aggregate-functions",title:"SFMC SQL Aggregate Functions",sidebar_label:"Aggregate Functions",description:"Group rows and apply aggregate functions to see the big picture in your data extensions.",image:"img/og/og-image-sql-aggregate-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Conversion Functions",permalink:"/docs/sql/sfmc-sql-conversion-functions"},next:{title:"Null Functions",permalink:"/docs/sql/sfmc-sql-null-functions"}},h={},u=[{value:"GROUP BY",id:"group-by",level:2},{value:"GROUP BY ROLLUP",id:"group-by-rollup",level:3},{value:"GROUP BY CUBE",id:"group-by-cube",level:3},{value:"COUNT",id:"count",level:2},{value:"COUNT *, ALL and DISTINCT",id:"count--all-and-distinct",level:3},{value:"HAVING",id:"having",level:2},{value:"HAVING vs WHERE",id:"having-vs-where",level:3},{value:"MIN and MAX",id:"min-and-max",level:2},{value:"AVG",id:"avg",level:2},{value:"SUM",id:"sum",level:2}];function x(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.m,{content:"Group rows and apply aggregate functions to see the big picture in your data."}),"\n",(0,r.jsx)(s.h2,{id:"group-by",children:"GROUP BY"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"GROUP BY"})," allows you to create aggregation by grouping the input data on selected column(s)."]}),"\n",(0,r.jsxs)(s.p,{children:["It limits the data you can ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:(0,r.jsx)(s.code,{children:"SELECT"})})," to either ",(0,r.jsx)(s.code,{children:"GROUP BY"})," column(s) or aggregate functions."]}),"\n",(0,r.jsx)(s.p,{children:"Let's say you want to check which email domains are most popular in your database."}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:"{5}",children:"SELECT\n Domain\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY Domain\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"SubscriberCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"mateuszdabrowski.pl"}),(0,r.jsx)(s.td,{children:"1"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"1234"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"987"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"1111"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"..."}),(0,r.jsx)(s.td,{children:"..."})]})]})]})})]}),"\n",(0,r.jsxs)(s.p,{children:["With this simple query, you have all subscribers grouped by their domain with the number of matching rows thanks to the ",(0,r.jsx)(s.a,{href:"#count",children:(0,r.jsx)(s.code,{children:"COUNT"})})," function."]}),"\n",(0,r.jsxs)(s.p,{children:["You can quickly improve this query by limiting the records with ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#top",children:(0,r.jsx)(s.code,{children:"TOP"})})," and sorting ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#top-with-order-by",children:(0,r.jsx)(s.code,{children:"ORDER BY"})})," to leverage Pareto's principle and pick 20% of the records responsible for 80% of the results. In this case - 20% domains covering approximately 80% subscribers."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:"{5}",children:"SELECT TOP 20 PERCENT\n Domain\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY Domain\nORDER BY COUNT(*) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"SubscriberCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"1234"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"1111"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"987"})]})]})]})})]}),"\n",(0,r.jsx)(s.p,{children:"With such data, you can assess your mailing list and decide, for example, whether using AMP for Email will be worth the effort for your business."}),"\n",(0,r.jsxs)(s.p,{children:["It is, however, just the beginning of what you can do with ",(0,r.jsx)(s.code,{children:"GROUP BY"}),". The real magic happens with multiple columns used for the grouping."]}),"\n",(0,r.jsxs)(s.p,{children:["Let's check how the domain numbers are changing in years with the help of the ",(0,r.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#datepart",children:[(0,r.jsx)(s.code,{children:"DATEPART"})," function"]})," and ",(0,r.jsxs)(s.a,{href:"/docs/config/sfmc-system-data-views#_subscribers",children:[(0,r.jsx)(s.code,{children:"DateJoined"})," field"]}),"."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:"{6-8}",children:"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY\n Domain\n , DATEPART(YEAR, DateJoined)\nORDER BY COUNT(*) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"YearJoined"}),(0,r.jsx)(s.th,{children:"SubscriberCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"642"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"578"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"567"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"456"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"432"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"345"})]})]})]})})]}),"\n",(0,r.jsx)(s.p,{children:"As you can see, by just adding more columns after a comma (order is irrelevant), we can make even more exciting groupings. In this case, we will have a separate row for each domain and year. Easy to see how many Subscribers using Gmail joined your database in 2021 vs 2020."}),"\n",(0,r.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"GROUP BY"})," will group ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#null",children:(0,r.jsx)(s.code,{children:"NULL"})})," values as if they are equal."]})}),"\n",(0,r.jsx)(s.h3,{id:"group-by-rollup",children:"GROUP BY ROLLUP"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"ROLLUP"})," takes the multi-column grouping to the next level by showing totals and subtotals in the outcomes. Not useful for campaign segmentation, but excellent for quick analysis and reporting."]}),"\n",(0,r.jsxs)(s.p,{children:["To use it - add the ",(0,r.jsx)(s.code,{children:"ROLLUP"})," keyword and wrap grouping columns in parentheses."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:"{6-9}",children:"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY ROLLUP (\n Domain\n , DATEPART(YEAR, DateJoined)\n )\nORDER BY COUNT(*) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"YearJoined"}),(0,r.jsx)(s.th,{children:"SubscriberCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"12304"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"1234"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"1111"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"987"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"642"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"578"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"567"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"456"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"432"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"345"})]})]})]})})]}),"\n",(0,r.jsxs)(s.p,{children:["In the outcomes, you will see some rows with ",(0,r.jsx)(s.code,{children:"NULL"})," as columns - those are rows for total and subtotals."]}),"\n",(0,r.jsxs)(s.p,{children:["Notice that the ",(0,r.jsx)(s.code,{children:"NULL"}),"s are either in all columns (total) or the ",(0,r.jsx)(s.code,{children:"YearJoined"})," column (subtotals). There are no rows with ",(0,r.jsx)(s.code,{children:"NULL"})," only in ",(0,r.jsx)(s.code,{children:"Domain"}),". It is because the ",(0,r.jsx)(s.code,{children:"ROLLUP"})," rolls columns provided in parentheses from right to left when calculating subtotals."]}),"\n",(0,r.jsx)(s.p,{children:"Order of columns will have a massive impact on outcomes!"}),"\n",(0,r.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,r.jsxs)(s.p,{children:["You can also perform partial rollup by keeping some columns outside of the ",(0,r.jsx)(s.code,{children:"ROLLUP"})," operator. In the example below, I excluded ",(0,r.jsx)(s.code,{children:"Domain"})," from the ",(0,r.jsx)(s.code,{children:"ROLLUP"})," resulting in the lack of total in the outcomes."]}),(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:"{6-8}",children:"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY\n Domain\n , ROLLUP(DATEPART(YEAR, DateJoined))\nORDER BY COUNT(*) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"YearJoined"}),(0,r.jsx)(s.th,{children:"SubscriberCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"1234"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"1111"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"987"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"642"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"578"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"567"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"456"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"432"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"345"})]})]})]})})]})]}),"\n",(0,r.jsx)(s.h3,{id:"group-by-cube",children:"GROUP BY CUBE"}),"\n",(0,r.jsxs)(s.p,{children:["If you thought that right-to-left execution of the ",(0,r.jsx)(s.code,{children:"ROLLUP"})," is not helping your use case and instead you would rather have all possible groupings - ",(0,r.jsx)(s.code,{children:"CUBE"})," is here to help."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:"{6-9}",children:"SELECT TOP 20 PERCENT\n Domain\n , DATEPART(YEAR, DateJoined) AS YearJoined\n , COUNT(*) AS SubscriberCount\nFROM _Subscribers\nGROUP BY CUBE (\n Domain\n , DATEPART(YEAR, DateJoined)\n )\nORDER BY COUNT(*) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"YearJoined"}),(0,r.jsx)(s.th,{children:"SubscriberCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"12304"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"6201"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"4321"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"1234"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"1111"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"null"}),(0,r.jsx)(s.td,{children:"987"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"642"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"578"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"567"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"456"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2021"}),(0,r.jsx)(s.td,{children:"432"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2020"}),(0,r.jsx)(s.td,{children:"345"})]})]})]})})]}),"\n",(0,r.jsxs)(s.p,{children:["It rolls data like ",(0,r.jsx)(s.a,{href:"#group-by-rollup",children:(0,r.jsx)(s.code,{children:"ROLLUP"})}),", but for all combinations of columns. Notice in the outcomes the second and third rows with ",(0,r.jsx)(s.code,{children:"NULL"}),"s in first column and count for the whole year."]}),"\n",(0,r.jsx)(s.h2,{id:"count",children:"COUNT"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"COUNT"})," function allows you to count the number of rows that matches a query. It is excellent for both ",(0,r.jsx)(s.em,{children:"ad hoc"})," data exploration and creating administrative queries that help maintain your instance. It's also a must-have for ",(0,r.jsx)(s.a,{href:"#group-by",children:(0,r.jsx)(s.code,{children:"GROUP BY"})}),"."]}),"\n",(0,r.jsx)(s.p,{children:"Let's get the count of our Subscribers in Master Data Extension."}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{1} title="Count all rows in the _Subscribers Data View"',children:"SELECT COUNT(*)\nFROM ContactMasterDE\n"})}),"\n",(0,r.jsx)(s.p,{children:"Nice, but it does not give us any information that we couldn't find more comfortable in the User Interface. So, where is the added value?"}),"\n",(0,r.jsxs)(s.p,{children:["For example, in seeing whether you have potential duplicate contacts. Instead of looking for all rows with ",(0,r.jsx)(s.code,{children:"COUNT(*)"}),", we will change the function argument to the specific column to count only its ",(0,r.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#null",children:["non-",(0,r.jsx)(s.code,{children:"NULL"})]})," values."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{3,6} title="This query will show you which Email Addresses exists on more than one subscriber"',children:"SELECT\n EmailAddress\n , COUNT(EmailAddress) AS EmailCount\nFROM ContactMasterDE\nGROUP BY EmailAddress\nHAVING COUNT(EmailAddress) > 1\n"})}),"\n",(0,r.jsxs)(s.p,{children:["With ",(0,r.jsx)(s.a,{href:"#group-by",children:(0,r.jsx)(s.code,{children:"GROUP BY"})})," and ",(0,r.jsx)(s.a,{href:"#having",children:(0,r.jsx)(s.code,{children:"HAVING"})})," above, we can simplify the output by showing only the duplicate values with corresponding counts."]}),"\n",(0,r.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,r.jsx)(s.p,{children:"You can take it to the next level with the subquery approach:"}),(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{11-12} title="Returns Subscriber Key, Email Address and Duplicate Count of your database"',children:"SELECT\n subscribers.SubscriberKey\n , subscribers.EmailAddress\n , counted.EmailCount\nFROM ContactMasterDE AS subscribers\n INNER JOIN (\n SELECT\n contacts.EmailAddress AS EmailAddress\n , COUNT(contacts.EmailAddress) AS EmailCount\n FROM ContactMasterDE AS contacts\n GROUP BY contacts.EmailAddress\n HAVING COUNT(contacts.EmailAddress) > 1\n ) AS counted\n ON counted.EmailAddress = subscribers.EmailAddress\n"})}),(0,r.jsx)(s.p,{children:"This extended query will not only tell you that there are potential duplicates. It will also give you Subscriber Keys of duplicate contacts so that you can investigate the reason and clean up records after fixing the underlying issue."}),(0,r.jsx)(s.p,{children:"Pack it into Automation with Verification Activity on top and keep your database clean with ease."})]}),"\n",(0,r.jsx)(s.h3,{id:"count--all-and-distinct",children:"COUNT *, ALL and DISTINCT"}),"\n",(0,r.jsxs)(s.p,{children:["There are three approaches to using ",(0,r.jsx)(s.code,{children:"COUNT"})," that differ slightly from each other."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"COUNT(*)"})," will return the number of items, including ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#null",children:(0,r.jsx)(s.code,{children:"NULL"})})," values and duplicates."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"COUNT(FieldName)"})," / ",(0,r.jsx)(s.code,{children:"COUNT(ALL FieldName)"})," will return the number on ",(0,r.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#null",children:["non-",(0,r.jsx)(s.code,{children:"NULL"})]})," values including duplicates."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"COUNT(DISTINCT FieldName)"})," will return the number of ",(0,r.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#null",children:["non-",(0,r.jsx)(s.code,{children:"NULL"})]})," and non-duplicate values."]}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{2-4} title="Let\'s find out whether we have multiple Subscribers with the same Email Address"',children:"SELECT\n COUNT(EmailAddress) AS EmailCount\n , COUNT(DISTINCT EmailAddress) AS UniqueEmailCount\nFROM _Subscribers\n"})}),"\n",(0,r.jsx)(s.h2,{id:"having",children:"HAVING"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"HAVING"})," works nearly the same as ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})})," and allows you to filter outcomes of your ",(0,r.jsx)(s.a,{href:"#group-by",children:(0,r.jsx)(s.code,{children:"GROUP BY"})}),"."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{6} title="This query will show you which Email Addresses exists on more than one subscriber"',children:"SELECT\n EmailAddress\n , COUNT(EmailAddress) AS EmailCount\nFROM _Subscribers\nGROUP BY EmailAddress\nHAVING COUNT(EmailAddress) > 1\n"})}),"\n",(0,r.jsxs)(s.p,{children:["You can leverage all filtering tricks from ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})}),". In practice, I mostly use it along with aggregate functions like ",(0,r.jsx)(s.a,{href:"#count",children:(0,r.jsx)(s.code,{children:"COUNT"})}),"."]}),"\n",(0,r.jsx)(s.h3,{id:"having-vs-where",children:"HAVING vs WHERE"}),"\n",(0,r.jsxs)(s.p,{children:["I just wrote that ",(0,r.jsx)(s.code,{children:"HAVING"})," and ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})})," work similarly, and both filter the outcomes. What is the difference?"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"WHERE"})," filters individual data (rows before ",(0,r.jsx)(s.a,{href:"#group-by",children:(0,r.jsx)(s.code,{children:"GROUP BY"})})," is applied)"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"HAVING"})," filters aggregated data (rows after ",(0,r.jsx)(s.a,{href:"#group-by",children:(0,r.jsx)(s.code,{children:"GROUP BY"})})," is applied)"]}),"\n"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{5,7} title="This query will show you which Email Addresses exists on more than one active subscriber"',children:"SELECT\n EmailAddress\n , COUNT(EmailAddress) AS EmailCount\nFROM _Subscribers\nWHERE Status = 'active'\nGROUP BY EmailAddress\nHAVING COUNT(EmailAddress) > 1\n"})}),"\n",(0,r.jsxs)(s.p,{children:["Thanks to using both ",(0,r.jsx)(s.code,{children:"WHERE"})," and ",(0,r.jsx)(s.code,{children:"HAVING"})," in this query, we will look only for duplicate active Subscribers. If we have two subscribers with the same email, but one is inactive, this query won't output it."]}),"\n",(0,r.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,r.jsxs)(s.p,{children:["You can use both in the same query and even mix it with ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#distinct",children:(0,r.jsx)(s.code,{children:"DISTINCT"})}),"."]}),(0,r.jsx)(s.p,{children:"However, when building such layered filters, keep in mind the SQL's order of execution for clauses:"}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from",children:(0,r.jsx)(s.code,{children:"FROM"})})," > ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})})," > ",(0,r.jsx)(s.a,{href:"#group-by",children:(0,r.jsx)(s.code,{children:"GROUP BY"})})," > ",(0,r.jsx)(s.a,{href:"#having",children:(0,r.jsx)(s.code,{children:"HAVING"})})," > ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#distinct",children:(0,r.jsx)(s.code,{children:"DISTINCT"})})," > ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#top-with-order-by",children:(0,r.jsx)(s.code,{children:"ORDER BY"})})]}),(0,r.jsxs)(s.p,{children:["It means that rows filtered with ",(0,r.jsx)(s.code,{children:"WHERE"})," will not be taken into consideration for ",(0,r.jsx)(s.code,{children:"GROUP BY"})," and that ",(0,r.jsx)(s.code,{children:"DISTINCT"})," deduplication will be applied to results grouped and filtered by ",(0,r.jsx)(s.code,{children:"HAVING"})," - not the source data."]})]}),"\n",(0,r.jsx)(s.h2,{id:"min-and-max",children:"MIN and MAX"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"MIN"})," and ",(0,r.jsx)(s.code,{children:"MAX"})," functions can help you find the minimum and maximum values within a group."]}),"\n",(0,r.jsxs)(s.p,{children:["As they are aggregate functions, we can use them in both the ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:(0,r.jsx)(s.code,{children:"SELECT"})})," part of the query and for filtering with ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})})," or ",(0,r.jsx)(s.a,{href:"#having",children:(0,r.jsx)(s.code,{children:"HAVING"})}),"."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{3-4,7} title="Let\'s find domains that are no longer getting new subscribers"',children:"SELECT TOP 10\n Domain\n , MIN(DATEDIFF(DAY, DateJoined, GETDATE())) AS YoungestSubscriberDaysOfService\n , MAX(DATEDIFF(DAY, DateJoined, GETDATE())) AS OldestSubscriberDaysOfService\nFROM _Subscribers\nGROUP BY Domain\nORDER BY MIN(DATEDIFF(DAY, DateJoined, GETDATE())) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"YoungestSubscriberDaysOfService"}),(0,r.jsx)(s.th,{children:"OldestSubscriberDaysOfService"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"mateuszdabrowski.pl"}),(0,r.jsx)(s.td,{children:"784"}),(0,r.jsx)(s.td,{children:"784"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"test.com"}),(0,r.jsx)(s.td,{children:"530"}),(0,r.jsx)(s.td,{children:"743"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"253"}),(0,r.jsx)(s.td,{children:"723"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"..."}),(0,r.jsx)(s.td,{children:"..."}),(0,r.jsx)(s.td,{children:"..."})]})]})]})})]}),"\n",(0,r.jsxs)(s.p,{children:["Learn more about ",(0,r.jsx)(s.code,{children:"MIN"})," and ",(0,r.jsx)(s.code,{children:"MAX"})," in ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-numeric-functions#min-and-max",children:"Numeric Functions documentation"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"avg",children:"AVG"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"AVG"})," function allows you to find the average of values within the group."]}),"\n",(0,r.jsxs)(s.p,{children:["It ignores ",(0,r.jsx)(s.code,{children:"NULL"})," values for the calculation and we can use it in ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:(0,r.jsx)(s.code,{children:"SELECT"})}),", ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})})," or ",(0,r.jsx)(s.a,{href:"#having",children:(0,r.jsx)(s.code,{children:"HAVING"})})," part of the query."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{3,6,7} title="Let\'s find domain that are bouncing for most users"',children:"SELECT TOP 10\n Domain\n , AVG(BounceCount) AS AverageBounceCount\nFROM _Subscribers\nGROUP BY Domain\nHAVING AVG(BounceCount) > 0\nORDER BY AVG(BounceCount) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Domain"}),(0,r.jsx)(s.th,{children:"AverageBounceCount"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"test.com"}),(0,r.jsx)(s.td,{children:"164"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"yahoo.com"}),(0,r.jsx)(s.td,{children:"2"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"outlook.com"}),(0,r.jsx)(s.td,{children:"1"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"gmail.com"}),(0,r.jsx)(s.td,{children:"1"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"..."}),(0,r.jsx)(s.td,{children:"..."})]})]})]})})]}),"\n",(0,r.jsxs)(s.p,{children:["Learn more about ",(0,r.jsx)(s.code,{children:"AVG"})," in ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-numeric-functions#avg",children:"Numeric Functions documentation"}),"."]}),"\n",(0,r.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"AVG"})," will ignore rows with ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions",children:(0,r.jsx)(s.code,{children:"NULL"})}),", which can skew your results. ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#coalesce",children:(0,r.jsx)(s.code,{children:"COALESCE"})})," will be your best friend to make sense out of imperfect data."]})}),"\n",(0,r.jsx)(s.h2,{id:"sum",children:"SUM"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"SUM"})," function allows you to find the sum of values within the group."]}),"\n",(0,r.jsxs)(s.p,{children:["It ignores ",(0,r.jsx)(s.code,{children:"NULL"})," values for the calculation and we can use it in ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:(0,r.jsx)(s.code,{children:"SELECT"})}),", ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,r.jsx)(s.code,{children:"WHERE"})})," or ",(0,r.jsx)(s.a,{href:"#having",children:(0,r.jsx)(s.code,{children:"HAVING"})})," part of the query."]}),"\n",(0,r.jsxs)(t.Z,{defaultValue:"query",values:[{label:"Query",value:"query"},{label:"Outcome",value:"outcome"}],children:[(0,r.jsx)(i.Z,{value:"query",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",metastring:'{4,8-9} title="Let\'s find product categories responsible for the highest income"',children:"SELECT TOP 3\n ProductCategory\n , COUNT(Orders) AS TotalOrders\n , SUM(Price) AS TotalIncome\nFROM Purchases\nWHERE Status = 'Complete'\nGROUP BY ProductCategory\nHAVING SUM(Price) > 1000\nORDER BY SUM(Price) DESC\n"})})}),(0,r.jsx)(i.Z,{value:"outcome",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"ProductCategory"}),(0,r.jsx)(s.th,{children:"TotalOrders"}),(0,r.jsx)(s.th,{children:"TotalIncome"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Course"}),(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"5500"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Webinar"}),(0,r.jsx)(s.td,{children:"76"}),(0,r.jsx)(s.td,{children:"5120"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Ebook"}),(0,r.jsx)(s.td,{children:"136"}),(0,r.jsx)(s.td,{children:"3450"})]})]})]})})]})]})}function j(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}},425:(e,s,n)=>{n.d(s,{Z:()=>i});n(7294);var r=n(512);const l={tabItem:"tabItem_Ymn6"};var t=n(5893);function i(e){let{children:s,hidden:n,className:i}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,r.Z)(l.tabItem,i),hidden:n,children:s})}},3992:(e,s,n)=>{n.d(s,{Z:()=>E});var r=n(7294),l=n(512),t=n(2957),i=n(6550),c=n(1270),d=n(5238),o=n(3609),a=n(2560);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:r,default:l}}=e;return{value:s,label:n,attributes:r,default:l}}))}(n);return function(e){const s=(0,o.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,n])}function x(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function j(e){let{queryString:s=!1,groupId:n}=e;const l=(0,i.k6)(),t=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,d._X)(t),(0,r.useCallback)((e=>{if(!t)return;const s=new URLSearchParams(l.location.search);s.set(t,e),l.replace({...l.location,search:s.toString()})}),[t,l])]}function m(e){const{defaultValue:s,queryString:n=!1,groupId:l}=e,t=u(e),[i,d]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(s){if(!x({value:s,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:t}))),[o,h]=j({queryString:n,groupId:l}),[m,f]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[l,t]=(0,a.Nk)(n);return[l,(0,r.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:l}),g=(()=>{const e=o??m;return x({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!x({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),f(e)}),[h,f,t]),tabValues:t}}var f=n(1048);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function p(e){let{className:s,block:n,selectedValue:r,selectValue:i,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:o}=(0,t.o5)(),a=e=>{const s=e.currentTarget,n=d.indexOf(s),l=c[n].value;l!==r&&(o(s),i(l))},h=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;s=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;s=d[n]??d[d.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},s),children:c.map((e=>{let{value:s,label:n,attributes:t}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>d.push(e),onKeyDown:h,onClick:a,...t,className:(0,l.Z)("tabs__item",g.tabItem,t?.className,{"tabs__item--active":r===s}),children:n??s},s)}))})}function y(e){let{lazy:s,children:n,selectedValue:l}=e;const t=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=t.find((e=>e.props.value===l));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:t.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==l})))})}function v(e){const s=m(e);return(0,b.jsxs)("div",{className:(0,l.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(p,{...e,...s}),(0,b.jsx)(y,{...e,...s})]})}function E(e){const s=(0,f.Z)();return(0,b.jsx)(v,{...e,children:h(e.children)},String(s))}},1872:(e,s,n)=>{n.d(s,{m:()=>t});n(7294);const r="leadText_qzwo";var l=n(5893);const t=e=>{let{content:s}=e;return(0,l.jsx)(l.Fragment,{children:(0,l.jsx)("p",{id:r,children:s})})}},1151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>i});var r=n(7294);const l={},t=r.createContext(l);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/316.d513d091.js b/assets/js/304.f3b61469.js similarity index 76% rename from assets/js/316.d513d091.js rename to assets/js/304.f3b61469.js index 67fe8499b..729fd57d5 100644 --- a/assets/js/316.d513d091.js +++ b/assets/js/304.f3b61469.js @@ -1,44 +1,22 @@ "use strict"; -exports.id = 316; -exports.ids = [316]; +exports.id = 304; +exports.ids = [304]; exports.modules = { -/***/ 96316: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ 43304: +/***/ ((__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_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(87115); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(91619); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(12281); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7201); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7201); /* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(20683); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70277); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(45625); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(39354); -/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91518); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(59542); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(10285); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(28734); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_10__); - - - - - - - - - - - +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); @@ -55,76 +33,63 @@ var parser = function() { for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ; return o2; - }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 27], $Vb = [4, 6, 9, 11, 17, 18, 20, 22, 23, 26, 27, 28]; + }, $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, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "period_statement": 24, "event_statement": 25, "period": 26, "event": 27, "open_directive": 28, "type_directive": 29, "arg_directive": 30, "close_directive": 31, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 4: "timeline", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 26: "period", 27: "event", 28: "open_directive", 29: "type_directive", 30: "arg_directive", 31: "close_directive" }, - productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [24, 1], [25, 1], [12, 1], [13, 1], [16, 1], [14, 1]], + 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 3: + case 2: this.$ = []; break; - case 4: + case 3: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; + case 4: case 5: - case 6: this.$ = $$[$0]; break; + case 6: case 7: - case 8: this.$ = []; break; - case 11: + case 8: yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); this.$ = $$[$0].substr(6); break; - case 12: + case 9: this.$ = $$[$0].trim(); yy.getCommonDb().setAccTitle(this.$); break; - case 13: - case 14: + case 10: + case 11: this.$ = $$[$0].trim(); yy.getCommonDb().setAccDescription(this.$); break; - case 15: + case 12: yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8); break; - case 19: + case 15: yy.addTask($$[$0], 0, ""); this.$ = $$[$0]; break; - case 20: + case 16: yy.addEvent($$[$0].substr(2)); this.$ = $$[$0]; break; - case 21: - yy.parseDirective("%%{", "open_directive"); - break; - case 22: - yy.parseDirective($$[$0], "type_directive"); - break; - case 23: - $$[$0] = $$[$0].trim().replace(/'/g, '"'); - yy.parseDirective($$[$0], "arg_directive"); - break; - case 24: - yy.parseDirective("}%%", "close_directive", "timeline"); - break; } }, - table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 28: $V1 }, { 13: 8, 29: [1, 9] }, { 29: [2, 21] }, { 6: [1, 10], 7: 22, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, { 1: [2, 2] }, { 14: 25, 15: [1, 26], 31: $Va }, o([15, 31], [2, 22]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 22, 10: 28, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: 20, 25: 21, 26: $V8, 27: $V9, 28: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 29] }, { 21: [1, 30] }, o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 20]), { 11: [1, 31] }, { 16: 32, 30: [1, 33] }, { 11: [2, 24] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($Vb, [2, 9]), { 14: 34, 31: $Va }, { 31: [2, 23] }, { 11: [1, 35] }, o($Vb, [2, 10])], - defaultActions: { 5: [2, 21], 7: [2, 2], 27: [2, 24], 33: [2, 23] }, + 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); @@ -547,69 +512,53 @@ var parser = function() { performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { switch ($avoiding_name_collisions) { case 0: - this.begin("open_directive"); - return 28; + break; case 1: - this.begin("type_directive"); - return 29; + break; case 2: - this.popState(); - this.begin("arg_directive"); - return 15; + return 10; case 3: - this.popState(); - this.popState(); - return 31; + break; case 4: - return 30; - case 5: break; + case 5: + return 4; case 6: - break; - case 7: return 11; - case 8: - break; - case 9: - break; - case 10: - return 4; - case 11: - return 17; - case 12: + case 7: this.begin("acc_title"); - return 18; - case 13: + return 12; + case 8: this.popState(); return "acc_title_value"; - case 14: + case 9: this.begin("acc_descr"); - return 20; - case 15: + return 14; + case 10: this.popState(); return "acc_descr_value"; - case 16: + case 11: this.begin("acc_descr_multiline"); break; - case 17: + case 12: this.popState(); break; - case 18: + case 13: return "acc_descr_multiline_value"; - case 19: - return 23; - case 20: - return 27; - case 21: - return 26; - case 22: + case 14: + return 17; + case 15: + return 21; + case 16: + return 20; + case 17: return 6; - case 23: + case 18: return "INVALID"; } }, - rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\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: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23], "inclusive": true } } + 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; }(); @@ -628,16 +577,13 @@ let currentTaskId = 0; const sections = []; const tasks = []; const rawTasks = []; -const getCommonDb = () => _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.j; -const parseDirective = (statement, context, type) => { - (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.k)(globalThis, statement, context, type); -}; +const getCommonDb = () => _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.K; const clear = function() { sections.length = 0; tasks.length = 0; currentSection = ""; rawTasks.length = 0; - (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.m)(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.t)(); }; const addSection = function(txt) { currentSection = txt; @@ -702,8 +648,7 @@ const timelineDb = { getTasks, addTask, addTaskOrg, - addEvent, - parseDirective + addEvent }; const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, @@ -715,8 +660,7 @@ const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ default: timelineDb, getCommonDb, getSections, - getTasks, - parseDirective + getTasks }, Symbol.toStringTag, { value: "Module" })); const MAX_SECTIONS = 12; const drawRect = function(elem, rectData) { @@ -802,19 +746,19 @@ const drawLabel = function(elem, txtObject) { txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; drawText(elem, txtObject); }; -const drawSection = function(elem, section, conf2) { +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 = conf2.width; - rect.height = conf2.height; + 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(conf2)( + _drawTextCandidateFunc(conf)( section.text, g, rect.x, @@ -822,13 +766,13 @@ const drawSection = function(elem, section, conf2) { rect.width, rect.height, { class: "journey-section section-type-" + section.num }, - conf2, + conf, section.colour ); }; let taskCount = -1; -const drawTask = function(elem, task, conf2) { - const center = task.x + conf2.width / 2; +const drawTask = function(elem, task, conf) { + const center = task.x + conf.width / 2; const g = elem.append("g"); taskCount++; const maxHeight = 300 + 5 * 30; @@ -842,14 +786,14 @@ const drawTask = function(elem, task, conf2) { rect.x = task.x; rect.y = task.y; rect.fill = task.fill; - rect.width = conf2.width; - rect.height = conf2.height; + 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(conf2)( + _drawTextCandidateFunc(conf)( task.task, g, rect.x, @@ -857,7 +801,7 @@ const drawTask = function(elem, task, conf2) { rect.width, rect.height, { class: "task" }, - conf2, + conf, task.colour ); }; @@ -901,8 +845,8 @@ const _drawTextCandidateFunc = function() { 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; + function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { + const { taskFontSize, taskFontFamily } = conf; const lines = content.split(/<br\s*\/?>/gi); for (let i = 0; i < lines.length; i++) { const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; @@ -912,12 +856,12 @@ const _drawTextCandidateFunc = function() { _setTextAttrs(text, textAttrs); } } - function byFo(content, g, x, y, width, height, textAttrs, conf2) { + 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, conf2); + byTspan(content, body, x, y, width, height, textAttrs, conf); _setTextAttrs(text, textAttrs); } function _setTextAttrs(toText, fromTextAttrsDict) { @@ -927,8 +871,8 @@ const _drawTextCandidateFunc = function() { } } } - return function(conf2) { - return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + return function(conf) { + return conf.textPlacement === "fo" ? byFo : conf.textPlacement === "old" ? byText : byTspan; }; }(); const initGraphics = function(graphics) { @@ -954,7 +898,7 @@ function wrap(text, width) { } }); } -const drawNode = function(elem, node, fullSection, conf2) { +const drawNode = function(elem, node, fullSection, conf) { const section = fullSection % MAX_SECTIONS - 1; const nodeElem = elem.append("g"); node.section = section; @@ -966,7 +910,7 @@ const drawNode = function(elem, node, fullSection, conf2) { 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 = conf2.fontSize && conf2.fontSize.replace ? conf2.fontSize.replace("px", "") : conf2.fontSize; + 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; @@ -974,11 +918,11 @@ const drawNode = function(elem, node, fullSection, conf2) { defaultBkg(bkgElem, node, section); return node; }; -const getVirtualNodeHeight = function(elem, node, conf2) { +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 = conf2.fontSize && conf2.fontSize.replace ? conf2.fontSize.replace("px", "") : conf2.fontSize; + 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; }; @@ -1004,19 +948,12 @@ const svgDraw = { drawNode, getVirtualNodeHeight }; -const setConf = function(cnf) { - const keys = Object.keys(cnf); - keys.forEach(function(key) { - conf[key] = cnf[key]; - }); -}; const draw = function(text, id, version, diagObj) { - const conf2 = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.g)(); - const LEFT_MARGIN = conf2.leftMargin ? conf2.leftMargin : 50; - diagObj.db.clear(); - diagObj.parser.parse(text + "\n"); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("timeline", diagObj.db); - const securityLevel = conf2.securityLevel; + var _a, _b; + const conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const LEFT_MARGIN = conf.leftMargin ?? 50; + _mermaid_04fb0060_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 */ .Ys)("#i" + id); @@ -1026,10 +963,10 @@ const draw = function(text, id, version, diagObj) { svg.append("g"); const tasks2 = diagObj.db.getTasks(); const title = diagObj.db.getCommonDb().getDiagramTitle(); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("task", tasks2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("task", tasks2); svgDraw.initGraphics(svg); const sections2 = diagObj.db.getSections(); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sections", sections2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sections", sections2); let maxSectionHeight = 0; let maxTaskHeight = 0; let depthY = 0; @@ -1048,13 +985,13 @@ const draw = function(text, id, version, diagObj) { padding: 20, maxHeight: maxSectionHeight }; - const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf2); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sectionHeight before draw", sectionHeight); + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionHeight before draw", sectionHeight); maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); }); let maxEventCount = 0; let maxEventLineLength = 0; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("tasks.length", tasks2.length); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("tasks.length", tasks2.length); for (const [i, task] of tasks2.entries()) { const taskNode = { number: i, @@ -1064,8 +1001,8 @@ const draw = function(text, id, version, diagObj) { padding: 20, maxHeight: maxTaskHeight }; - const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf2); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("taskHeight before draw", taskHeight); + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf); + _mermaid_04fb0060_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; @@ -1079,29 +1016,29 @@ const draw = function(text, id, version, diagObj) { padding: 20, maxHeight: 50 }; - maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf2); + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf); } maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); } - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("maxSectionHeight before draw", maxSectionHeight); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("maxTaskHeight before draw", maxTaskHeight); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _mermaid_04fb0060_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: 150, + width: 200 * Math.max(tasksForSection.length, 1) - 50, padding: 20, maxHeight: maxSectionHeight }; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sectionNode", sectionNode); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode", sectionNode); const sectionNodeWrapper = svg.append("g"); - const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf2); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("sectionNode output", node); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode output", node); sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); masterY += maxSectionHeight + 50; - const tasksForSection = tasks2.filter((task) => task.section === section); if (tasksForSection.length > 0) { drawTasks( svg, @@ -1110,7 +1047,7 @@ const draw = function(text, id, version, diagObj) { masterX, masterY, maxTaskHeight, - conf2, + conf, maxEventCount, maxEventLineLength, maxSectionHeight, @@ -1130,7 +1067,7 @@ const draw = function(text, id, version, diagObj) { masterX, masterY, maxTaskHeight, - conf2, + conf, maxEventCount, maxEventLineLength, maxSectionHeight, @@ -1138,21 +1075,22 @@ const draw = function(text, id, version, diagObj) { ); } const box = svg.node().getBBox(); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("bounds", box); + _mermaid_04fb0060_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_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.s)( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.o)( void 0, svg, - conf2.timeline.padding ? conf2.timeline.padding : 50, - conf2.timeline.useMaxWidth ? conf2.timeline.useMaxWidth : false + ((_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, conf2, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { +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, @@ -1162,18 +1100,18 @@ const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, max padding: 20, maxHeight: maxTaskHeight }; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("taskNode", taskNode); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskNode", taskNode); const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); - const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf2); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf); const taskHeight = node.height; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("taskHeight after draw", taskHeight); + _mermaid_04fb0060_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; + let lineLength = maxTaskHeight; masterY += 100; - linelength = linelength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf2); + 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", @@ -1181,13 +1119,13 @@ const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, max ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); } masterX = masterX + 200; - if (isWithoutSections && !(0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.g)().timeline.disableMulticolor) { + if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) { sectionColor++; } } masterY = masterY - 10; }; -const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf2) { +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) { let maxEventHeight = 0; const eventBeginY = masterY; masterY = masterY + 100; @@ -1200,9 +1138,9 @@ const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, co padding: 20, maxHeight: 50 }; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_11__.l.debug("eventNode", eventNode); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("eventNode", eventNode); const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); - const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf2); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf); const eventHeight = node.height; maxEventHeight = maxEventHeight + eventHeight; eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); @@ -1212,17 +1150,18 @@ const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, co return maxEventHeight; }; const renderer = { - setConf, + 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_12__/* ["default"] */ .Z)(options["lineColor" + i])) { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z)(options["lineColor" + i], 20); + if ((0,khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(options["lineColor" + i], 20); } else { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z)(options["lineColor" + i], 20); + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(options["lineColor" + i], 20); } } for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { @@ -1295,57 +1234,6 @@ const diagram = { styles }; -//# sourceMappingURL=timeline-definition-8e5a9bc6.js.map - - -/***/ }), - -/***/ 91619: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Z: () => (/* binding */ is_dark) -}); - -// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules -var utils = __webpack_require__(61691); -// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules -var dist_color = __webpack_require__(71610); -;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js -/* IMPORT */ - - -/* MAIN */ -//SOURCE: https://planetcalc.com/7779 -const luminance = (color) => { - const { r, g, b } = dist_color/* default */.Z.parse(color); - const luminance = .2126 * utils/* default */.Z.channel.toLinear(r) + .7152 * utils/* default */.Z.channel.toLinear(g) + .0722 * utils/* default */.Z.channel.toLinear(b); - return utils/* default */.Z.lang.round(luminance); -}; -/* EXPORT */ -/* harmony default export */ const methods_luminance = (luminance); - -;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js -/* IMPORT */ - -/* MAIN */ -const isLight = (color) => { - return methods_luminance(color) >= .5; -}; -/* EXPORT */ -/* harmony default export */ const is_light = (isLight); - -;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js -/* IMPORT */ - -/* MAIN */ -const isDark = (color) => { - return !is_light(color); -}; -/* EXPORT */ -/* harmony default export */ const is_dark = (isDark); /***/ }) diff --git a/assets/js/308.9f439c9e.js b/assets/js/308.9f439c9e.js new file mode 100644 index 000000000..cf339892a --- /dev/null +++ b/assets/js/308.9f439c9e.js @@ -0,0 +1,28209 @@ +"use strict"; +exports.id = 308; +exports.ids = [308]; +exports.modules = { + +/***/ 43349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225); + + + + +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 */ .bg(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; +} + + +/***/ }), + +/***/ 96225: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $p: () => (/* binding */ applyClass), +/* harmony export */ O1: () => (/* binding */ edgeToId), +/* harmony export */ WR: () => (/* binding */ applyTransition), +/* harmony export */ bF: () => (/* binding */ isSubgraph), +/* harmony export */ bg: () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234); + + +// 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"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** 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/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(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; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 33183: +/***/ ((__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-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +;// 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<unknown>} 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<string>} */ + 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<T>} 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<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + 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<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * 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<Extension>} 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<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | 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<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + 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<HtmlExtension>} 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<StackItem>} */ + 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<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + 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<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + 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<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + 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<Point, '_bufferIndex' | '_index'> | 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<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + 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> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + 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<Construct>} 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<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +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<Chunk>} */ + 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<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + 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<Code>} */ + 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 + * <a> + * <a\>b> + * <a b> + * <a)> + * 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 (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @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> + * ^ + * > | 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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <a\*a> + * ^ + * ``` + * + * @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<Code>} */ + 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<Code>} */ + 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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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 + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @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 `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @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 + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @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 + * > | <div/> + * ^ + * ``` + * + * @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 + * > | <x/> + * ^ + * ``` + * + * @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 + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @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 + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @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 + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @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 + * > | <!--xxx--> + * ^ + * ``` + * + * @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 + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | 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 + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @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 + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @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 + * > | <div> + * ^ + * | + * ``` + * + * @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<Code>} */ + 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<string, string>} + */ +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<Event>} */ + 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 + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @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<Event>} */ + 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<Code>} */ + 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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @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<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> 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 <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> 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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> 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 `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> 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 <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <![CDATA[>&<]]> 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 <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <!b> 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 <?b?> 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 <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> 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 </b> 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 `<x`, in opening tag name. + * + * ```markdown + * > | a <b> 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 <b> 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 <b c> 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 <b c> 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 <b c=d> 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 <b c="d"> 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 <b c=d> 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 <b c="d"> 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 <b c="d"> 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 <!--a + * ^ + * | b--> + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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<Chunk>} + */ + +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<Chunk>} */ + 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<Event>} events + * @returns {Array<Event>} + */ +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<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} 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<string, Handle>} 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<CompileContext, 'sliceSerialize'>} 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<CompileContext, 'sliceSerialize'>} 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<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(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 {<Kind extends Node>(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<Extension | Array<Extension>> | 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<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + 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<Event>} 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<StaticPhrasingContent>} */ + // @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<Extension | Array<Extension>>} 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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + 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( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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; + } +}; + + + +/***/ }), + +/***/ 52494: +/***/ ((__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 */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ k: () => (/* binding */ addEdgeMarkers), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33183); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_04fb0060_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 */ .Ys)(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( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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|<br\s*\/?>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_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_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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 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_04fb0060_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_04fb0060_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 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 = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_04fb0060_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("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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 */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + 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_04fb0060_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); + } + 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_04fb0060_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 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + 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 */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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, boundryNode) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + 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); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("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 */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_04fb0060_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, "\\)"); + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 94641: +/***/ ((__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__(64218); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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, "FirstStmtSeperator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "verticeStatement": 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + 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_04fb0060_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_04fb0060_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_04fb0060_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 */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.I.flowchart, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.r +}; +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" })); + + + +/***/ }), + +/***/ 11308: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/flowDb-f4777d50.js +var flowDb_f4777d50 = __webpack_require__(94641); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 64 modules +var dagre = __webpack_require__(41644); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/util.js +var util = __webpack_require__(96225); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/arrows.js + + + + +var arrows = { + normal, + vee, + undirected, +}; + +function setArrows(value) { + arrows = value; +} + +function normal(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function vee(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function undirected(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 5 L 10 5') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(43349); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js + + + + +function addSVGLabel(root, node) { + var domNode = root; + + domNode.node().appendChild(node.label); + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js + + + + +/* + * Attaches a text label to the specified root. Handles escape sequences. + */ +function addTextLabel(root, node) { + var domNode = root.append('text'); + + var lines = processEscapeSequences(node.label).split('\n'); + for (var i = 0; i < lines.length; i++) { + domNode + .append('tspan') + .attr('xml:space', 'preserve') + .attr('dy', '1em') + .attr('x', '1') + .text(lines[i]); + } + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +function processEscapeSequences(text) { + var newText = ''; + var escaped = false; + var ch; + for (var i = 0; i < text.length; ++i) { + ch = text[i]; + if (escaped) { + switch (ch) { + case 'n': + newText += '\n'; + break; + default: + newText += ch; + } + escaped = false; + } else if (ch === '\\') { + escaped = true; + } else { + newText += ch; + } + } + return newText; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-label.js + + + + + + +function addLabel(root, node, location) { + var label = node.label; + var labelSvg = root.append('g'); + + // Allow the label to be a string, a function that returns a DOM element, or + // a DOM element itself. + if (node.labelType === 'svg') { + addSVGLabel(labelSvg, node); + } else if (typeof label !== 'string' || node.labelType === 'html') { + (0,add_html_label/* addHtmlLabel */.a)(labelSvg, node); + } else { + addTextLabel(labelSvg, node); + } + + var labelBBox = labelSvg.node().getBBox(); + var y; + switch (location) { + case 'top': + y = -node.height / 2; + break; + case 'bottom': + y = node.height / 2 - labelBBox.height; + break; + default: + y = -labelBBox.height / 2; + } + labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')'); + + return labelSvg; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-clusters.js + + + + + + +var createClusters = function (selection, g) { + var clusters = g.nodes().filter(function (v) { + return util/* isSubgraph */.bF(g, v); + }); + var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) { + return v; + }); + + util/* applyTransition */.WR(svgClusters.exit(), g).style('opacity', 0).remove(); + + var enterSelection = svgClusters + .enter() + .append('g') + .attr('class', 'cluster') + .attr('id', function (v) { + var node = g.node(v); + return node.id; + }) + .style('opacity', 0) + .each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + src/* select */.Ys(this).append('rect'); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + addLabel(labelGroup, node, node.clusterLabelPos); + }); + + svgClusters = svgClusters.merge(enterSelection); + + svgClusters = util/* applyTransition */.WR(svgClusters, g).style('opacity', 1); + + svgClusters.selectAll('rect').each(function (c) { + var node = g.node(c); + var domCluster = src/* select */.Ys(this); + util/* applyStyle */.bg(domCluster, node.style); + }); + + return svgClusters; +}; + +function setCreateClusters(value) { + createClusters = value; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js + + + + + + + +let createEdgeLabels = function (selection, g) { + var svgEdgeLabels = selection + .selectAll('g.edgeLabel') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + svgEdgeLabels.exit().remove(); + svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0); + + svgEdgeLabels = selection.selectAll('g.edgeLabel'); + + svgEdgeLabels.each(function (e) { + var root = src/* select */.Ys(this); + root.select('.label').remove(); + var edge = g.edge(e); + var label = addLabel(root, g.edge(e), 0).classed('label', true); + var bbox = label.node().getBBox(); + + if (edge.labelId) { + label.attr('id', edge.labelId); + } + if (!has/* default */.Z(edge, 'width')) { + edge.width = bbox.width; + } + if (!has/* default */.Z(edge, 'height')) { + edge.height = bbox.height; + } + }); + + var exitSelection; + + if (svgEdgeLabels.exit) { + exitSelection = svgEdgeLabels.exit(); + } else { + exitSelection = svgEdgeLabels.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgEdgeLabels; +}; + +function setCreateEdgeLabels(value) { + createEdgeLabels = value; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js + + +function intersectNode(node, point) { + return node.intersect(point); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js + + + + + + + +var createEdgePaths = function (selection, g, arrows) { + var previousPaths = selection + .selectAll('g.edgePath') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + var newPaths = enter(previousPaths, g); + exit(previousPaths, g); + + var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths; + util/* applyTransition */.WR(svgPaths, g).style('opacity', 1); + + // Save DOM element in the path group, and set ID and class + svgPaths.each(function (e) { + var domEdge = src/* select */.Ys(this); + var edge = g.edge(e); + edge.elem = this; + + if (edge.id) { + domEdge.attr('id', edge.id); + } + + util/* applyClass */.$p( + domEdge, + edge['class'], + (domEdge.classed('update') ? 'update ' : '') + 'edgePath' + ); + }); + + svgPaths.selectAll('path.path').each(function (e) { + var edge = g.edge(e); + edge.arrowheadId = uniqueId/* default */.Z('arrowhead'); + + var domEdge = src/* select */.Ys(this) + .attr('marker-end', function () { + return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')'; + }) + .style('fill', 'none'); + + util/* applyTransition */.WR(domEdge, g).attr('d', function (e) { + return calcPoints(g, e); + }); + + util/* applyStyle */.bg(domEdge, edge.style); + }); + + svgPaths.selectAll('defs *').remove(); + svgPaths.selectAll('defs').each(function (e) { + var edge = g.edge(e); + var arrowhead = arrows[edge.arrowhead]; + arrowhead(src/* select */.Ys(this), edge.arrowheadId, edge, 'arrowhead'); + }); + + return svgPaths; +}; + +function setCreateEdgePaths(value) { + createEdgePaths = value; +} + +function makeFragmentRef(url, fragmentId) { + var baseUrl = url.split('#')[0]; + return baseUrl + '#' + fragmentId; +} + +function calcPoints(g, e) { + var edge = g.edge(e); + var tail = g.node(e.v); + var head = g.node(e.w); + var points = edge.points.slice(1, edge.points.length - 1); + points.unshift(intersectNode(tail, points[0])); + points.push(intersectNode(head, points[points.length - 1])); + + return createLine(edge, points); +} + +function createLine(edge, points) { + // @ts-expect-error + var line = (src/* line */.jvg || src/* svg */.YPS.line)() + .x(function (d) { + return d.x; + }) + .y(function (d) { + return d.y; + }); + + (line.curve || line.interpolate)(edge.curve); + + return line(points); +} + +function getCoords(elem) { + var bbox = elem.getBBox(); + var matrix = elem.ownerSVGElement + .getScreenCTM() + .inverse() + .multiply(elem.getScreenCTM()) + .translate(bbox.width / 2, bbox.height / 2); + return { x: matrix.e, y: matrix.f }; +} + +function enter(svgPaths, g) { + var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0); + svgPathsEnter + .append('path') + .attr('class', 'path') + .attr('d', function (e) { + var edge = g.edge(e); + var sourceElem = g.node(e.v).elem; + var points = range/* default */.Z(edge.points.length).map(function () { + return getCoords(sourceElem); + }); + return createLine(edge, points); + }); + svgPathsEnter.append('defs'); + return svgPathsEnter; +} + +function exit(svgPaths, g) { + var svgPathExit = svgPaths.exit(); + util/* applyTransition */.WR(svgPathExit, g).style('opacity', 0).remove(); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-nodes.js + + + + + + + +var createNodes = function (selection, g, shapes) { + var simpleNodes = g.nodes().filter(function (v) { + return !util/* isSubgraph */.bF(g, v); + }); + var svgNodes = selection + .selectAll('g.node') + .data(simpleNodes, function (v) { + return v; + }) + .classed('update', true); + + svgNodes.exit().remove(); + + svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0); + + svgNodes = selection.selectAll('g.node'); + + svgNodes.each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + util/* applyClass */.$p( + thisGroup, + node['class'], + (thisGroup.classed('update') ? 'update ' : '') + 'node' + ); + + thisGroup.select('g.label').remove(); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + var labelDom = addLabel(labelGroup, node); + var shape = shapes[node.shape]; + var bbox = pick/* default */.Z(labelDom.node().getBBox(), 'width', 'height'); + + node.elem = this; + + if (node.id) { + thisGroup.attr('id', node.id); + } + if (node.labelId) { + labelGroup.attr('id', node.labelId); + } + + if (has/* default */.Z(node, 'width')) { + bbox.width = node.width; + } + if (has/* default */.Z(node, 'height')) { + bbox.height = node.height; + } + + bbox.width += node.paddingLeft + node.paddingRight; + bbox.height += node.paddingTop + node.paddingBottom; + labelGroup.attr( + 'transform', + 'translate(' + + (node.paddingLeft - node.paddingRight) / 2 + + ',' + + (node.paddingTop - node.paddingBottom) / 2 + + ')' + ); + + var root = src/* select */.Ys(this); + root.select('.label-container').remove(); + var shapeSvg = shape(root, bbox, node).classed('label-container', true); + util/* applyStyle */.bg(shapeSvg, node.style); + + var shapeBBox = shapeSvg.node().getBBox(); + node.width = shapeBBox.width; + node.height = shapeBBox.height; + }); + + var exitSelection; + + if (svgNodes.exit) { + exitSelection = svgNodes.exit(); + } else { + exitSelection = svgNodes.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgNodes; +}; + +function setCreateNodes(value) { + createNodes = value; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-clusters.js + + + + + +function positionClusters(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); + + util/* applyTransition */.WR(created.selectAll('rect'), g) + .attr('width', function (v) { + return g.node(v).width; + }) + .attr('height', function (v) { + return g.node(v).height; + }) + .attr('x', function (v) { + var node = g.node(v); + return -node.width / 2; + }) + .attr('y', function (v) { + var node = g.node(v); + return -node.height / 2; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js + + + + + + +function positionEdgeLabels(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(e) { + var edge = g.edge(e); + return has/* default */.Z(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : ''; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-nodes.js + + + + + +function positionNodes(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js + + +function intersectEllipse(node, rx, ry, point) { + // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html + + var cx = node.x; + var cy = node.y; + + var px = cx - point.x; + var py = cy - point.y; + + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + + var dx = Math.abs((rx * ry * px) / det); + if (point.x < cx) { + dx = -dx; + } + var dy = Math.abs((rx * ry * py) / det); + if (point.y < cy) { + dy = -dy; + } + + return { x: cx + dx, y: cy + dy }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js + + + + +function intersectCircle(node, rx, point) { + return intersectEllipse(node, rx, rx, point); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js + + +/* + * Returns the point at which two lines, p and q, intersect or returns + * undefined if they do not intersect. + */ +function intersectLine(p1, p2, q1, q2) { + // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, + // p7 and p473. + + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + + // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + + // b1 y + c1 = 0. + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + + // Compute r3 and r4. + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + + // Check signs of r3 and r4. If both point 3 and point 4 lie on + // same side of line 1, the line segments do not intersect. + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return /*DONT_INTERSECT*/; + } + + // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + + // Compute r1 and r2 + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + + // Check signs of r1 and r2. If both point 1 and point 2 lie + // on same side of second line segment, the line segments do + // not intersect. + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return /*DONT_INTERSECT*/; + } + + // Line segments intersect: compute intersection point. + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return /*COLLINEAR*/; + } + + offset = Math.abs(denom / 2); + + // The denom/2 is to get rounding instead of truncating. It + // is added or subtracted to the numerator, depending upon the + // sign of the numerator. + 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: x, y: y }; +} + +function sameSign(r1, r2) { + return r1 * r2 > 0; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js + + + + +/* + * Returns the point ({x, y}) at which the point argument intersects with the + * node argument assuming that it has the shape specified by polygon. + */ +function intersectPolygon(node, polyPoints, point) { + var x1 = node.x; + var y1 = node.y; + + var intersections = []; + + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + polyPoints.forEach(function (entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.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 intersect = intersectLine( + node, + point, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect) { + intersections.push(intersect); + } + } + + if (!intersections.length) { + console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node); + return node; + } + + if (intersections.length > 1) { + // More intersections, find the one nearest to edge end point + intersections.sort(function (p, q) { + var pdx = p.x - point.x; + var pdy = p.y - point.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + + var qdx = q.x - point.x; + var qdy = q.y - point.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js + + +function intersectRect(node, point) { + var x = node.x; + var y = node.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 = node.width / 2; + var h = node.height / 2; + + 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 = dy === 0 ? 0 : (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/shapes.js + + + + + + + +var shapes = { + rect, + ellipse, + circle, + diamond, +}; + +function setShapes(value) { + shapes = value; +} + +function rect(parent, bbox, node) { + var shapeSvg = parent + .insert('rect', ':first-child') + .attr('rx', node.rx) + .attr('ry', node.ry) + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('width', bbox.width) + .attr('height', bbox.height); + + node.intersect = function (point) { + return intersectRect(node, point); + }; + + return shapeSvg; +} + +function ellipse(parent, bbox, node) { + var rx = bbox.width / 2; + var ry = bbox.height / 2; + var shapeSvg = parent + .insert('ellipse', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('rx', rx) + .attr('ry', ry); + + node.intersect = function (point) { + return intersectEllipse(node, rx, ry, point); + }; + + return shapeSvg; +} + +function circle(parent, bbox, node) { + var r = Math.max(bbox.width, bbox.height) / 2; + var shapeSvg = parent + .insert('circle', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('r', r); + + node.intersect = function (point) { + return intersectCircle(node, r, point); + }; + + return shapeSvg; +} + +// Circumscribe an ellipse for the bounding box with a diamond shape. I derived +// the function to calculate the diamond shape from: +// http://mathforum.org/kb/message.jspa?messageID=3750236 +function diamond(parent, bbox, node) { + var w = (bbox.width * Math.SQRT2) / 2; + var h = (bbox.height * Math.SQRT2) / 2; + var points = [ + { x: 0, y: -h }, + { x: -w, y: 0 }, + { x: 0, y: h }, + { x: w, y: 0 }, + ]; + var shapeSvg = parent.insert('polygon', ':first-child').attr( + 'points', + points + .map(function (p) { + return p.x + ',' + p.y; + }) + .join(' ') + ); + + node.intersect = function (p) { + return intersectPolygon(node, points, p); + }; + + return shapeSvg; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/render.js + + + + + + + + + + + + + + + +// This design is based on http://bost.ocks.org/mike/chart/. +function render() { + var fn = function (svg, g) { + preProcessGraph(g); + + var outputGroup = createOrSelectGroup(svg, 'output'); + var clustersGroup = createOrSelectGroup(outputGroup, 'clusters'); + var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths'); + var edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g); + var nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes); + + (0,dagre/* layout */.bK)(g); + + positionNodes(nodes, g); + positionEdgeLabels(edgeLabels, g); + createEdgePaths(edgePathsGroup, g, arrows); + + var clusters = createClusters(clustersGroup, g); + positionClusters(clusters, g); + + postProcessGraph(g); + }; + + fn.createNodes = function (value) { + if (!arguments.length) return createNodes; + setCreateNodes(value); + return fn; + }; + + fn.createClusters = function (value) { + if (!arguments.length) return createClusters; + setCreateClusters(value); + return fn; + }; + + fn.createEdgeLabels = function (value) { + if (!arguments.length) return createEdgeLabels; + setCreateEdgeLabels(value); + return fn; + }; + + fn.createEdgePaths = function (value) { + if (!arguments.length) return createEdgePaths; + setCreateEdgePaths(value); + return fn; + }; + + fn.shapes = function (value) { + if (!arguments.length) return shapes; + setShapes(value); + return fn; + }; + + fn.arrows = function (value) { + if (!arguments.length) return arrows; + setArrows(value); + return fn; + }; + + return fn; +} + +var NODE_DEFAULT_ATTRS = { + paddingLeft: 10, + paddingRight: 10, + paddingTop: 10, + paddingBottom: 10, + rx: 0, + ry: 0, + shape: 'rect', +}; + +var EDGE_DEFAULT_ATTRS = { + arrowhead: 'normal', + curve: src/* curveLinear */.c_6, +}; + +function preProcessGraph(g) { + g.nodes().forEach(function (v) { + var node = g.node(v); + if (!has/* default */.Z(node, 'label') && !g.children(v).length) { + node.label = v; + } + + if (has/* default */.Z(node, 'paddingX')) { + defaults/* default */.Z(node, { + paddingLeft: node.paddingX, + paddingRight: node.paddingX, + }); + } + + if (has/* default */.Z(node, 'paddingY')) { + defaults/* default */.Z(node, { + paddingTop: node.paddingY, + paddingBottom: node.paddingY, + }); + } + + if (has/* default */.Z(node, 'padding')) { + defaults/* default */.Z(node, { + paddingLeft: node.padding, + paddingRight: node.padding, + paddingTop: node.padding, + paddingBottom: node.padding, + }); + } + + defaults/* default */.Z(node, NODE_DEFAULT_ATTRS); + + forEach/* default */.Z(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) { + node[k] = Number(node[k]); + }); + + // Save dimensions for restore during post-processing + if (has/* default */.Z(node, 'width')) { + node._prevWidth = node.width; + } + if (has/* default */.Z(node, 'height')) { + node._prevHeight = node.height; + } + }); + + g.edges().forEach(function (e) { + var edge = g.edge(e); + if (!has/* default */.Z(edge, 'label')) { + edge.label = ''; + } + defaults/* default */.Z(edge, EDGE_DEFAULT_ATTRS); + }); +} + +function postProcessGraph(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + + // Restore original dimensions + if (has/* default */.Z(node, '_prevWidth')) { + node.width = node._prevWidth; + } else { + delete node.width; + } + + if (has/* default */.Z(node, '_prevHeight')) { + node.height = node._prevHeight; + } else { + delete node.height; + } + + delete node._prevWidth; + delete node._prevHeight; + }); +} + +function createOrSelectGroup(root, name) { + var selection = root.select('g.' + name); + if (selection.empty()) { + selection = root.append('g').attr('class', name); + } + return selection; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/index.js + + + + + + + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/styles-b39df0e1.js + 1 modules +var styles_b39df0e1 = __webpack_require__(94788); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(22424); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + 1 modules +var json = __webpack_require__(39354); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/flowDiagram-18ba08e1.js + + + + + + + + + + + + + + + + + + + + + + + + + +function question(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const s = (w + h) * 0.9; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, s, s, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function hexagon(parent, bbox, node) { + const f = 4; + const h = bbox.height; + const m = h / f; + const w = bbox.width + 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 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_left_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_right(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_left(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function inv_trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_right_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function stadium(parent, bbox, node) { + const h = bbox.height; + const w = bbox.width + h / 4; + const shapeSvg = parent.insert("rect", ":first-child").attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + node.intersect = function(point) { + return intersectRect(node, point); + }; + return shapeSvg; +} +function subroutine(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + 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 shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function cylinder(parent, bbox, node) { + const w = bbox.width; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry; + 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 shapeSvg = parent.attr("label-offset-y", ry).insert("path", ":first-child").attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + node.intersect = function(point) { + const pos = intersectRect(node, point); + 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 (point.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +} +function addToRender(render2) { + render2.shapes().question = question; + render2.shapes().hexagon = hexagon; + render2.shapes().stadium = stadium; + render2.shapes().subroutine = subroutine; + render2.shapes().cylinder = cylinder; + render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow; + render2.shapes().lean_right = lean_right; + render2.shapes().lean_left = lean_left; + render2.shapes().trapezoid = trapezoid; + render2.shapes().inv_trapezoid = inv_trapezoid; + render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow; +} +function addToRenderV2(addShape) { + addShape({ question }); + addShape({ hexagon }); + addShape({ stadium }); + addShape({ subroutine }); + addShape({ cylinder }); + addShape({ rect_left_inv_arrow }); + addShape({ lean_right }); + addShape({ lean_left }); + addShape({ trapezoid }); + addShape({ inv_trapezoid }); + addShape({ rect_right_inv_arrow }); +} +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("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +const flowChartShapes = { + addToRender, + addToRenderV2 +}; +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, _doc, diagObj) { + const svg = !root ? (0,src/* select */.Ys)(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); + const doc = !_doc ? document : _doc; + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + const styles = (0,mermaid_04fb0060.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + if ((0,mermaid_04fb0060.m)((0,mermaid_04fb0060.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(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_04fb0060.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 radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 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; + default: + _shape = "rect"; + } + mermaid_04fb0060.l.warn("Adding node", vertex.id, vertex.domId); + g.setNode(diagObj.db.lookUpDomId(vertex.id), { + labelType: "svg", + labelStyle: styles.labelStyle, + shape: _shape, + label: vertexNode, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: diagObj.db.lookUpDomId(vertex.id) + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + let cnt = 0; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_04fb0060.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkId = "L-" + edge.start + "-" + edge.end; + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = {}; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + let style = ""; + let labelStyle = ""; + if (edge.style !== void 0) { + const styles = (0,mermaid_04fb0060.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } else { + switch (edge.stroke) { + case "normal": + style = "fill:none"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + break; + case "dotted": + style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + style = " stroke-width: 3.5px;fill:none"; + break; + } + } + edgeData.style = style; + edgeData.labelStyle = labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,mermaid_04fb0060.n)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_04fb0060.n)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_04fb0060.n)(conf.curve, src/* curveLinear */.c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if ((0,mermaid_04fb0060.m)((0,mermaid_04fb0060.c)().flowchart.htmlLabels)) { + edgeData.labelType = "html"; + edgeData.label = `<span id="L-${linkId}" class="edgeLabel L-${linkNameStart}' L-${linkNameEnd}" style="${edgeData.labelStyle}">${edge.text.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + )}</span>`; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(mermaid_04fb0060.e.lineBreakRegex, "\n"); + 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.class = linkNameStart + " " + linkNameEnd; + edgeData.minlen = edge.length || 1; + g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + mermaid_04fb0060.l.info("Extracting classes"); + return diagObj.db.getClasses(); +}; +const draw = function(text, id, _version, diagObj) { + mermaid_04fb0060.l.info("Drawing flowchart"); + const { securityLevel, flowchart: conf2 } = (0,mermaid_04fb0060.c)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + const g = new graphlib/* Graph */.k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes); + } + const vert = diagObj.db.getVertices(); + mermaid_04fb0060.l.warn("Get vertices", vert); + const edges = diagObj.db.getEdges(); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_04fb0060.l.warn( + "Setting subgraph", + subG.nodes[j], + diagObj.db.lookUpDomId(subG.nodes[j]), + diagObj.db.lookUpDomId(subG.id) + ); + g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g, diagObj); + const render$1 = new render(); + flowChartShapes.addToRender(render$1); + render$1.arrows().none = function normal(parent, id2, edge, type) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + const path = marker.append("path").attr("d", "M 0 0 L 0 0 L 0 0 z"); + (0,util/* applyStyle */.bg)(path, edge[type + "Style"]); + }; + render$1.arrows().normal = function normal(parent, id2) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + marker.append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowheadPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + }; + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + render$1(element, g); + element.selectAll("g.node").attr("title", function() { + return diagObj.db.getTooltip(this.id); + }); + diagObj.db.indexNodes("subGraph" + i); + for (i = 0; i < subGraphs.length; i++) { + subG = subGraphs[i]; + if (subG.title !== "undefined") { + const clusterRects = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect' + ); + const clusterEl = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]' + ); + const xPos = clusterRects[0].x.baseVal.value; + const yPos = clusterRects[0].y.baseVal.value; + const _width = clusterRects[0].width.baseVal.value; + const cluster = (0,src/* select */.Ys)(clusterEl[0]); + const te = cluster.select(".label"); + te.attr("transform", `translate(${xPos + _width / 2}, ${yPos + 14})`); + te.attr("id", id + "Text"); + for (let j = 0; j < subG.classes.length; j++) { + clusterEl[0].classList.add(subG.classes[j]); + } + } + } + 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); + } + } + (0,mermaid_04fb0060.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = root.select("#" + id + ' [id="' + diagObj.db.lookUpDomId(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 flowRenderer = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const diagram = { + parser: flowDb_f4777d50.p, + db: flowDb_f4777d50.f, + renderer: styles_b39df0e1.f, + styles: styles_b39df0e1.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + flowRenderer.setConf(cnf.flowchart); + flowDb_f4777d50.f.clear(); + flowDb_f4777d50.f.setGen("gen-1"); + } +}; + + + +/***/ }), + +/***/ 74852: +/***/ ((__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__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(52494); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(33183); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + 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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_04fb0060_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_04fb0060_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) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_04fb0060_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 */ .c(clusterGraph)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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_04fb0060_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); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + 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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_04fb0060_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) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_04fb0060_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)); + const newEl = o.elem; + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_5ec2587c_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_04fb0060_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + await recursiveRender(elem, graph, diagramtype, id); +}; + + + +/***/ }), + +/***/ 94788: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ flowStyles), + f: () => (/* binding */ flowRendererV2) +}); + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/index-0980fb80.js +var index_0980fb80 = __webpack_require__(74852); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(43349); +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/channel.js +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return utils/* default */.Z.lang.round(dist_color/* default */.Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const methods_channel = (channel); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/rgba.js +var rgba = __webpack_require__(51117); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/styles-b39df0e1.js + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,mermaid_04fb0060.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + mermaid_04fb0060.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + mermaid_04fb0060.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,mermaid_04fb0060.m)((0,mermaid_04fb0060.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(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_04fb0060.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 radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 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"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + 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_04fb0060.c)().flowchart.padding + }); + mermaid_04fb0060.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + 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_04fb0060.c)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + mermaid_04fb0060.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_04fb0060.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + mermaid_04fb0060.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + mermaid_04fb0060.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + mermaid_04fb0060.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_04fb0060.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_04fb0060.n)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_04fb0060.n)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_04fb0060.n)(conf.curve, src/* curveLinear */.c_6); + } + 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 = edge.text.replace(mermaid_04fb0060.e.lineBreakRegex, "\n"); + 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_04fb0060.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,mermaid_04fb0060.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new graphlib/* Graph */.k({ + 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_04fb0060.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + mermaid_04fb0060.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_04fb0060.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_04fb0060.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,index_0980fb80.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + mermaid_04fb0060.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,mermaid_04fb0060.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,src/* select */.Ys)("#" + 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 = methods_channel; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return rgba/* default */.Z(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: + } + + .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/3177.66020859.js b/assets/js/3177.66020859.js new file mode 100644 index 000000000..59551c200 --- /dev/null +++ b/assets/js/3177.66020859.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3177],{3177:(t,e,a)=>{a.d(e,{diagram:()=>G});var r=a(6365),s=a(4218),i=a(2015),n=a(7967),o=(a(7484),a(7856),function(){var t=function(t,e,a,r){for(a=a||{},r=t.length;r--;a[t[r]]=e);return a},e=[1,2],a=[1,3],r=[1,4],s=[2,4],i=[1,9],n=[1,11],o=[1,13],c=[1,14],l=[1,16],d=[1,17],h=[1,18],p=[1,24],g=[1,25],u=[1,26],x=[1,27],y=[1,28],m=[1,29],b=[1,30],f=[1,31],T=[1,32],E=[1,33],w=[1,34],P=[1,35],_=[1,36],v=[1,37],L=[1,38],k=[1,39],I=[1,41],N=[1,42],M=[1,43],A=[1,44],S=[1,45],O=[1,46],D=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],R=[4,5,16,50,52,53],C=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],Y=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],B=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],V=[68,69,70],F=[1,120],q={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(t,e,a,r,s,i,n){var o=i.length-1;switch(s){case 3:return r.apply(i[o]),i[o];case 4:case 9:case 8:case 13:this.$=[];break;case 5:case 10:i[o-1].push(i[o]),this.$=i[o-1];break;case 6:case 7:case 11:case 12:case 62:this.$=i[o];break;case 15:i[o].type="createParticipant",this.$=i[o];break;case 16:i[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(i[o-2])}),i[o-1].push({type:"boxEnd",boxText:i[o-2]}),this.$=i[o-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-2]),sequenceIndexStep:Number(i[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]};break;case 23:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-1]};break;case 29:r.setDiagramTitle(i[o].substring(6)),this.$=i[o].substring(6);break;case 30:r.setDiagramTitle(i[o].substring(7)),this.$=i[o].substring(7);break;case 31:this.$=i[o].trim(),r.setAccTitle(this.$);break;case 32:case 33:this.$=i[o].trim(),r.setAccDescription(this.$);break;case 34:i[o-1].unshift({type:"loopStart",loopText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.LOOP_START}),i[o-1].push({type:"loopEnd",loopText:i[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=i[o-1];break;case 35:i[o-1].unshift({type:"rectStart",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_START}),i[o-1].push({type:"rectEnd",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=i[o-1];break;case 36:i[o-1].unshift({type:"optStart",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_START}),i[o-1].push({type:"optEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=i[o-1];break;case 37:i[o-1].unshift({type:"altStart",altText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.ALT_START}),i[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=i[o-1];break;case 38:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 39:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_OVER_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 40:i[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.CRITICAL_START}),i[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=i[o-1];break;case 41:i[o-1].unshift({type:"breakStart",breakText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_START}),i[o-1].push({type:"breakEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=i[o-1];break;case 43:this.$=i[o-3].concat([{type:"option",optionText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},i[o]]);break;case 45:this.$=i[o-3].concat([{type:"and",parText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.PAR_AND},i[o]]);break;case 47:this.$=i[o-3].concat([{type:"else",altText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.ALT_ELSE},i[o]]);break;case 48:i[o-3].draw="participant",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 49:i[o-1].draw="participant",i[o-1].type="addParticipant",this.$=i[o-1];break;case 50:i[o-3].draw="actor",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 51:i[o-1].draw="actor",i[o-1].type="addParticipant",this.$=i[o-1];break;case 52:i[o-1].type="destroyParticipant",this.$=i[o-1];break;case 53:this.$=[i[o-1],{type:"addNote",placement:i[o-2],actor:i[o-1].actor,text:i[o]}];break;case 54:i[o-2]=[].concat(i[o-1],i[o-1]).slice(0,2),i[o-2][0]=i[o-2][0].actor,i[o-2][1]=i[o-2][1].actor,this.$=[i[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:i[o-2].slice(0,2),text:i[o]}];break;case 55:this.$=[i[o-1],{type:"addLinks",actor:i[o-1].actor,text:i[o]}];break;case 56:this.$=[i[o-1],{type:"addALink",actor:i[o-1].actor,text:i[o]}];break;case 57:this.$=[i[o-1],{type:"addProperties",actor:i[o-1].actor,text:i[o]}];break;case 58:this.$=[i[o-1],{type:"addDetails",actor:i[o-1].actor,text:i[o]}];break;case 61:this.$=[i[o-2],i[o]];break;case 63:this.$=r.PLACEMENT.LEFTOF;break;case 64:this.$=r.PLACEMENT.RIGHTOF;break;case 65:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o],activate:!0},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]}];break;case 66:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-4]}];break;case 67:this.$=[i[o-3],i[o-1],{type:"addMessage",from:i[o-3].actor,to:i[o-1].actor,signalType:i[o-2],msg:i[o]}];break;case 68:this.$={type:"addParticipant",actor:i[o]};break;case 69:this.$=r.LINETYPE.SOLID_OPEN;break;case 70:this.$=r.LINETYPE.DOTTED_OPEN;break;case 71:this.$=r.LINETYPE.SOLID;break;case 72:this.$=r.LINETYPE.DOTTED;break;case 73:this.$=r.LINETYPE.SOLID_CROSS;break;case 74:this.$=r.LINETYPE.DOTTED_CROSS;break;case 75:this.$=r.LINETYPE.SOLID_POINT;break;case 76:this.$=r.LINETYPE.DOTTED_POINT;break;case 77:this.$=r.parseMessage(i[o].trim().substring(1))}},table:[{3:1,4:e,5:a,6:r},{1:[3]},{3:5,4:e,5:a,6:r},{3:6,4:e,5:a,6:r},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:n,8:8,9:10,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},t(D,[2,5]),{9:47,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},t(D,[2,7]),t(D,[2,8]),t(D,[2,14]),{12:48,50:v,52:L,53:k},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:O},{22:55,70:O},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(D,[2,29]),t(D,[2,30]),{32:[1,61]},{34:[1,62]},t(D,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:O},{22:72,70:O},{22:73,70:O},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:O},{22:88,70:O},{22:89,70:O},{22:90,70:O},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(D,[2,6]),t(D,[2,15]),t(R,[2,9],{10:91}),t(D,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(D,[2,21]),{5:[1,95]},{5:[1,96]},t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,31]),t(D,[2,32]),t(C,s,{7:97}),t(C,s,{7:98}),t(C,s,{7:99}),t(Y,s,{40:100,7:101}),t($,s,{42:102,7:103}),t($,s,{7:103,42:104}),t(B,s,{45:105,7:106}),t(C,s,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:O},t(V,[2,69]),t(V,[2,70]),t(V,[2,71]),t(V,[2,72]),t(V,[2,73]),t(V,[2,74]),t(V,[2,75]),t(V,[2,76]),{22:116,70:O},{22:118,58:117,70:O},{70:[2,63]},{70:[2,64]},{56:119,79:F},{56:121,79:F},{56:122,79:F},{56:123,79:F},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:v,52:L,53:k},{5:[1,129]},t(D,[2,19]),t(D,[2,20]),t(D,[2,22]),t(D,[2,23]),{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,130],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,131],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,132],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{16:[1,133]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,46],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,49:[1,134],50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{16:[1,135]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,44],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,48:[1,136],50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{16:[1,137]},{16:[1,138]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,42],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,47:[1,139],50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,140],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:N,60:M,61:A,62:S,70:O},{15:[1,141]},t(D,[2,49]),{15:[1,142]},t(D,[2,51]),t(D,[2,52]),{22:143,70:O},{22:144,70:O},{56:145,79:F},{56:146,79:F},{56:147,79:F},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(D,[2,16]),t(R,[2,10]),{12:149,50:v,52:L,53:k},t(R,[2,12]),t(R,[2,13]),t(D,[2,18]),t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),t(D,[2,37]),{15:[1,150]},t(D,[2,38]),{15:[1,151]},t(D,[2,39]),t(D,[2,40]),{15:[1,152]},t(D,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:F},{56:156,79:F},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:O},t(R,[2,11]),t(Y,s,{7:101,40:158}),t($,s,{7:103,42:159}),t(B,s,{7:106,45:160}),t(D,[2,48]),t(D,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(t,e){if(!e.recoverable){var a=new Error(t);throw a.hash=e,a}this.trace(t)},parse:function(t){var e=this,a=[0],r=[],s=[null],i=[],n=this.table,o="",c=0,l=0,d=i.slice.call(arguments,1),h=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);h.setInput(t,p.yy),p.yy.lexer=h,p.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var u=h.yylloc;i.push(u);var x=h.options&&h.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,m,b,f,T,E,w,P,_,v={};;){if(m=a[a.length-1],this.defaultActions[m]?b=this.defaultActions[m]:(null==y&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=e.symbols_[_]||_),y=_),b=n[m]&&n[m][y]),void 0===b||!b.length||!b[0]){var L="";for(T in P=[],n[m])this.terminals_[T]&&T>2&&P.push("'"+this.terminals_[T]+"'");L=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+P.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(L,{text:h.match,token:this.terminals_[y]||y,line:h.yylineno,loc:u,expected:P})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+y);switch(b[0]){case 1:a.push(y),s.push(h.yytext),i.push(h.yylloc),a.push(b[1]),y=null,l=h.yyleng,o=h.yytext,c=h.yylineno,u=h.yylloc;break;case 2:if(E=this.productions_[b[1]][1],v.$=s[s.length-E],v._$={first_line:i[i.length-(E||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(E||1)].first_column,last_column:i[i.length-1].last_column},x&&(v._$.range=[i[i.length-(E||1)].range[0],i[i.length-1].range[1]]),void 0!==(f=this.performAction.apply(v,[o,l,c,p.yy,b[1],s,i].concat(d))))return f;E&&(a=a.slice(0,-1*E*2),s=s.slice(0,-1*E),i=i.slice(0,-1*E)),a.push(this.productions_[b[1]][0]),s.push(v.$),i.push(v._$),w=n[a[a.length-2]][a[a.length-1]],a.push(w);break;case 3:return!0}}return!0}},W={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,a=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 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),a.length-1&&(this.yylineno-=a.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:a?(a.length===r.length?this.yylloc.first_column:0)+r[r.length-a.length].length-a[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 a,r,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))),(r=t[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+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],a=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,a,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;i<s.length;i++)if((a=this._input.match(this.rules[s[i]]))&&(!e||a[0].length>e[0].length)){if(e=a,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,s[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[r]))&&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,a,r){switch(a){case 0:case 51:case 64:return 5;case 1:case 2:case 3:case 4:case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 52:return e.yytext=e.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/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,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};function z(){this.yy={}}return q.lexer=W,z.prototype=q,q.Parser=z,new z}());o.parser=o;const c=o;const l=new class{constructor(t){this.init=t,this.records=this.init()}reset(){this.records=this.init()}}((()=>({prevActor:void 0,actors:{},createdActors:{},destroyedActors:{},boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}))),d=function(t,e,a,r){let s=l.records.currentBox;const i=l.records.actors[t];if(i){if(l.records.currentBox&&i.box&&l.records.currentBox!==i.box)throw new Error("A same participant should only be defined in one Box: "+i.name+" can't be in '"+i.box.name+"' and in '"+l.records.currentBox.name+"' at the same time.");if(s=i.box?i.box:l.records.currentBox,i.box=s,i&&e===i.name&&null==a)return}null!=a&&null!=a.text||(a={text:e,wrap:null,type:r}),null!=r&&null!=a.text||(a={text:e,wrap:null,type:r}),l.records.actors[t]={box:s,name:e,description:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,prevActor:l.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},l.records.prevActor&&l.records.actors[l.records.prevActor]&&(l.records.actors[l.records.prevActor].nextActor=t),l.records.currentBox&&l.records.currentBox.actorKeys.push(t),l.records.prevActor=t},h=function(t,e,a={text:void 0,wrap:void 0},r,s=!1){if(r===u.ACTIVE_END){if((t=>{let e,a=0;for(e=0;e<l.records.messages.length;e++)l.records.messages[e].type===u.ACTIVE_START&&l.records.messages[e].from.actor===t&&a++,l.records.messages[e].type===u.ACTIVE_END&&l.records.messages[e].from.actor===t&&a--;return a})(t.actor)<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:r,activate:s}),!0},p=function(t){return l.records.actors[t]},g=()=>void 0!==l.records.wrapEnabled?l.records.wrapEnabled:(0,r.c)().sequence.wrap,u={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,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},x=function(t,e,a){const r={actor:t,placement:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap},s=[].concat(t,t);l.records.notes.push(r),l.records.messages.push({from:s[0],to:s[1],message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:u.NOTE,placement:e})},y=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");m(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor link text",s)}};function m(t,e){if(null==t.links)t.links=e;else for(let a in e)t.links[a]=e[a]}const b=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());f(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor properties text",s)}};function f(t,e){if(null==t.properties)t.properties=e;else for(let a in e)t.properties[a]=e[a]}const T=function(t,e){const a=p(t),s=document.getElementById(e.text);try{const t=s.innerHTML,e=JSON.parse(t);e.properties&&f(a,e.properties),e.links&&m(a,e.links)}catch(i){r.l.error("error while parsing actor details text",i)}},E=function(t){if(Array.isArray(t))t.forEach((function(t){E(t)}));else switch(t.type){case"sequenceIndex":l.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":d(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(l.records.actors[t.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");l.records.lastCreated=t.actor,d(t.actor,t.actor,t.description,t.draw),l.records.createdActors[t.actor]=l.records.messages.length;break;case"destroyParticipant":l.records.lastDestroyed=t.actor,l.records.destroyedActors[t.actor]=l.records.messages.length;break;case"activeStart":case"activeEnd":h(t.actor,void 0,void 0,t.signalType);break;case"addNote":x(t.actor,t.placement,t.text);break;case"addLinks":y(t.actor,t.text);break;case"addALink":!function(t,e){const a=p(t);try{const t={};let o=(0,r.d)(e.text,(0,r.c)());var s=o.indexOf("@");o=o.replace(/&/g,"&"),o=o.replace(/=/g,"=");var i=o.slice(0,s-1).trim(),n=o.slice(s+1).trim();t[i]=n,m(a,t)}catch(o){r.l.error("error while parsing actor link text",o)}}(t.actor,t.text);break;case"addProperties":b(t.actor,t.text);break;case"addDetails":T(t.actor,t.text);break;case"addMessage":if(l.records.lastCreated){if(t.to!==l.records.lastCreated)throw new Error("The created participant "+l.records.lastCreated+" does not have an associated creating message after its declaration. Please check the sequence diagram.");l.records.lastCreated=void 0}else if(l.records.lastDestroyed){if(t.to!==l.records.lastDestroyed&&t.from!==l.records.lastDestroyed)throw new Error("The destroyed participant "+l.records.lastDestroyed+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");l.records.lastDestroyed=void 0}h(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":e=t.boxData,l.records.boxes.push({name:e.text,wrap:void 0===e.wrap&&g()||!!e.wrap,fill:e.color,actorKeys:[]}),l.records.currentBox=l.records.boxes.slice(-1)[0];break;case"boxEnd":l.records.currentBox=void 0;break;case"loopStart":h(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":h(void 0,void 0,void 0,t.signalType);break;case"rectStart":h(void 0,void 0,t.color,t.signalType);break;case"optStart":h(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":h(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":(0,r.s)(t.text);break;case"parStart":case"and":h(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":h(void 0,void 0,t.criticalText,t.signalType);break;case"option":h(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":h(void 0,void 0,t.breakText,t.signalType)}var e},w={addActor:d,addMessage:function(t,e,a,r){l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,answer:r})},addSignal:h,addLinks:y,addDetails:T,addProperties:b,autoWrap:g,setWrap:function(t){l.records.wrapEnabled=t},enableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!0},disableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!1},showSequenceNumbers:()=>l.records.sequenceNumbersEnabled,getMessages:function(){return l.records.messages},getActors:function(){return l.records.actors},getCreatedActors:function(){return l.records.createdActors},getDestroyedActors:function(){return l.records.destroyedActors},getActor:p,getActorKeys:function(){return Object.keys(l.records.actors)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:r.g,getBoxes:function(){return l.records.boxes},getDiagramTitle:r.r,setDiagramTitle:r.q,getConfig:()=>(0,r.c)().sequence,clear:function(){l.reset(),(0,r.t)()},parseMessage:function(t){const e=t.trim(),a={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return r.l.debug("parseMessage:",a),a},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let a=null!=e&&e[1]?e[1].trim():"transparent",s=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",a)||(a="transparent",s=t.trim());else{const e=(new Option).style;e.color=a,e.color!==a&&(a="transparent",s=t.trim())}return{color:a,text:void 0!==s?(0,r.d)(s.replace(/^:?(?:no)?wrap:/,""),(0,r.c)()):void 0,wrap:void 0!==s?null!==s.match(/^:?wrap:/)||null===s.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:u,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:x,setAccTitle:r.s,apply:E,setAccDescription:r.b,getAccDescription:r.a,hasAtLeastOneBox:function(){return l.records.boxes.length>0},hasAtLeastOneBoxWithTitle:function(){return l.records.boxes.some((t=>t.name))}},P=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,_=function(t,e){return(0,i.d)(t,e)},v=(t,e)=>{(0,r.F)((()=>{const a=document.querySelectorAll(t);0!==a.length&&(a[0].addEventListener("mouseover",(function(){L("actor"+e+"_popup")})),a[0].addEventListener("mouseout",(function(){k("actor"+e+"_popup")})))}))},L=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="block")},k=function(t){var e=document.getElementById(t);null!=e&&(e.style.display="none")},I=function(t,e){let a=0,s=0;const i=e.text.split(r.e.lineBreakRegex),[n,o]=(0,r.C)(e.fontSize);let c=[],l=0,d=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":d=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":d=()=>Math.round(e.y+(a+s+e.textMargin)/2);break;case"bottom":case"end":d=()=>Math.round(e.y+(a+s+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[h,p]of i.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==n&&(l=h*n);const i=t.append("text");i.attr("x",e.x),i.attr("y",d()),void 0!==e.anchor&&i.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&i.style("font-family",e.fontFamily),void 0!==o&&i.style("font-size",o),void 0!==e.fontWeight&&i.style("font-weight",e.fontWeight),void 0!==e.fill&&i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class),void 0!==e.dy?i.attr("dy",e.dy):0!==l&&i.attr("dy",l);const g=p||r.Z;if(e.tspan){const t=i.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(g)}else i.text(g);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(s+=(i._groups||i)[0][0].getBBox().height,a=s),c.push(i)}return c},N=function(t,e){const a=t.append("polygon");var r,s,i,n,o;return a.attr("points",(r=e.x,s=e.y,i=e.width,n=e.height,r+","+s+" "+(r+i)+","+s+" "+(r+i)+","+(s+n-(o=7))+" "+(r+i-1.2*o)+","+(s+n)+" "+r+","+(s+n))),a.attr("class","labelBox"),e.y=e.y+e.height/2,I(t,e),a};let M=-1;const A=(t,e,a,r)=>{t.select&&a.forEach((a=>{const s=e[a],i=t.select("#actor"+s.actorCnt);!r.mirrorActors&&s.stopy?i.attr("y2",s.stopy+s.height/2):r.mirrorActors&&i.attr("y2",s.stopy)}))},S=function(t,e){(0,i.a)(t,e)},O=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},D=function(){function t(t,e,a,r,i,n,o){s(e.append("text").attr("x",a+i/2).attr("y",r+n/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,a,i,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,[g,u]=(0,r.C)(d),x=t.split(r.e.lineBreakRegex);for(let r=0;r<x.length;r++){const t=r*g-g*(x.length-1)/2,l=e.append("text").attr("x",a+n/2).attr("y",i).style("text-anchor","middle").style("font-size",u).style("font-weight",p).style("font-family",h);l.append("tspan").attr("x",a+n/2).attr("dy",t).text(x[r]),l.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),s(l,c)}}function a(t,a,r,i,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",i).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,i,n,o,c,l),s(h,c)}function s(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),R=function(){function t(t,e,a,r,i,n,o){s(e.append("text").attr("x",a).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,a,i,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,g=t.split(r.e.lineBreakRegex);for(let r=0;r<g.length;r++){const t=r*d-d*(g.length-1)/2,n=e.append("text").attr("x",a).attr("y",i).style("text-anchor","start").style("font-size",d).style("font-weight",p).style("font-family",h);n.append("tspan").attr("x",a).attr("dy",t).text(g[r]),n.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),s(n,c)}}function a(t,a,r,i,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",i).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,i,0,o,c,l),s(h,c)}function s(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),C={drawRect:_,drawText:I,drawLabel:N,drawActor:function(t,e,a,r){switch(e.type){case"actor":return function(t,e,a,r){const s=r?e.stopy:e.starty,n=e.x+e.width/2,o=s+80;t.lower(),r||(M++,t.append("line").attr("id","actor"+M).attr("x1",n).attr("y1",o).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),e.actorCnt=M);const c=t.append("g");c.attr("class","actor-man");const l=(0,i.g)();l.x=e.x,l.y=s,l.fill="#eaeaea",l.width=e.width,l.height=e.height,l.class="actor",l.rx=3,l.ry=3,c.append("line").attr("id","actor-man-torso"+M).attr("x1",n).attr("y1",s+25).attr("x2",n).attr("y2",s+45),c.append("line").attr("id","actor-man-arms"+M).attr("x1",n-18).attr("y1",s+33).attr("x2",n+18).attr("y2",s+33),c.append("line").attr("x1",n-18).attr("y1",s+60).attr("x2",n).attr("y2",s+45),c.append("line").attr("x1",n).attr("y1",s+45).attr("x2",n+18-2).attr("y2",s+60);const d=c.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",s+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);const h=c.node().getBBox();return e.height=h.height,D(a)(e.description,c,l.x,l.y+35,l.width,l.height,{class:"actor"},a),e.height}(t,e,a,r);case"participant":return function(t,e,a,r){const s=r?e.stopy:e.starty,n=e.x+e.width/2,o=s+5,c=t.append("g").lower();var l=c;r||(M++,l.append("line").attr("id","actor"+M).attr("x1",n).attr("y1",o).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),l=c.append("g"),e.actorCnt=M,null!=e.links&&(l.attr("id","root-"+M),v("#root-"+M,M)));const d=(0,i.g)();var h="actor";null!=e.properties&&e.properties.class?h=e.properties.class:d.fill="#eaeaea",d.x=e.x,d.y=s,d.width=e.width,d.height=e.height,d.class=h,d.rx=3,d.ry=3;const p=_(l,d);if(e.rectData=d,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?(0,i.b)(l,d.x+d.width-20,d.y+10,t.substr(1)):(0,i.c)(l,d.x+d.width-20,d.y+10,t)}D(a)(e.description,l,d.x,d.y,d.width,d.height,{class:"actor"},a);let g=e.height;if(p.node){const t=p.node().getBBox();e.height=t.height,g=t.height}return g}(t,e,a,r)}},drawBox:function(t,e,a){const r=t.append("g");S(r,e),e.name&&D(a)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},a),r.lower()},drawPopup:function(t,e,a,r,s){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const i=e.links,o=e.actorCnt,c=e.rectData;var l="none";s&&(l="block !important");const d=t.append("g");d.attr("id","actor"+o+"_popup"),d.attr("class","actorPopupMenu"),d.attr("display",l),v("#actor"+o+"_popup",o);var h="";void 0!==c.class&&(h=" "+c.class);let p=c.width>a?c.width:a;const g=d.append("rect");if(g.attr("class","actorPopupMenuPanel"+h),g.attr("x",c.x),g.attr("y",c.height),g.attr("fill",c.fill),g.attr("stroke",c.stroke),g.attr("width",p),g.attr("height",c.height),g.attr("rx",c.rx),g.attr("ry",c.ry),null!=i){var u=20;for(let t in i){var x=d.append("a"),y=(0,n.Nm)(i[t]);x.attr("xlink:href",y),x.attr("target","_blank"),R(r)(t,x,c.x+10,c.height+u,p,20,{class:"actor"},r),u+=30}}return g.attr("height",u),{height:c.height+u,width:p}},anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,a,r,s){const n=(0,i.g)(),o=e.anchored;n.x=e.startx,n.y=e.starty,n.class="activation"+s%3,n.width=e.stopx-e.startx,n.height=a-e.starty,_(o,n)},drawLoop:function(t,e,a,r){const{boxMargin:s,boxTextMargin:n,labelBoxHeight:o,labelBoxWidth:c,messageFontFamily:l,messageFontSize:d,messageFontWeight:h}=r,p=t.append("g"),g=function(t,e,a,r){return p.append("line").attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",r).attr("class","loopLine")};g(e.startx,e.starty,e.stopx,e.starty),g(e.stopx,e.starty,e.stopx,e.stopy),g(e.startx,e.stopy,e.stopx,e.stopy),g(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){g(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let u=(0,i.e)();u.text=a,u.x=e.startx,u.y=e.starty,u.fontFamily=l,u.fontSize=d,u.fontWeight=h,u.anchor="middle",u.valign="middle",u.tspan=!1,u.width=c||50,u.height=o||20,u.textMargin=n,u.class="labelText",N(p,u),u=O(),u.text=e.title,u.x=e.startx+c/2+(e.stopx-e.startx)/2,u.y=e.starty+s+n,u.anchor="middle",u.valign="middle",u.textMargin=n,u.class="loopText",u.fontFamily=l,u.fontSize=d,u.fontWeight=h,u.wrap=!0;let x=I(p,u);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,a){if(t.message){u.text=t.message,u.x=e.startx+(e.stopx-e.startx)/2,u.y=e.sections[a].y+s+n,u.class="loopText",u.anchor="middle",u.valign="middle",u.tspan=!1,u.fontFamily=l,u.fontSize=d,u.fontWeight=h,u.wrap=e.wrap,x=I(p,u);let r=Math.round(x.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[a].height+=r-(s+n)}})),e.height=Math.round(e.stopy-e.starty),p},drawBackgroundRect:S,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.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")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).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")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon: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")},insertComputerIcon: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")},insertClockIcon: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")},getTextObj:O,getNoteRect:function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},popupMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},popdownMenu:function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},fixLifeLineHeights:A,sanitizeUrl:n.Nm};let Y={};const $={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,z((0,r.c)())},updateVal:function(t,e,a,r){void 0===t[e]?t[e]=a:t[e]=r(a,t[e])},updateBounds:function(t,e,a,r){const s=this;let i=0;function n(n){return function(o){i++;const c=s.sequenceItems.length-i+1;s.updateVal(o,"starty",e-c*Y.boxMargin,Math.min),s.updateVal(o,"stopy",r+c*Y.boxMargin,Math.max),s.updateVal($.data,"startx",t-c*Y.boxMargin,Math.min),s.updateVal($.data,"stopx",a+c*Y.boxMargin,Math.max),"activation"!==n&&(s.updateVal(o,"startx",t-c*Y.boxMargin,Math.min),s.updateVal(o,"stopx",a+c*Y.boxMargin,Math.max),s.updateVal($.data,"starty",e-c*Y.boxMargin,Math.min),s.updateVal($.data,"stopy",r+c*Y.boxMargin,Math.max))}}this.sequenceItems.forEach(n()),this.activations.forEach(n("activation"))},insert:function(t,e,a,s){const i=r.e.getMin(t,a),n=r.e.getMax(t,a),o=r.e.getMin(e,s),c=r.e.getMax(e,s);this.updateVal($.data,"startx",i,Math.min),this.updateVal($.data,"starty",o,Math.min),this.updateVal($.data,"stopx",n,Math.max),this.updateVal($.data,"stopy",c,Math.max),this.updateBounds(i,o,n,c)},newActivation:function(t,e,a){const r=a[t.from.actor],s=H(t.from.actor).length||0,i=r.x+r.width/2+(s-1)*Y.activationWidth/2;this.activations.push({startx:i,starty:this.verticalPos+2,stopx:i+Y.activationWidth,stopy:void 0,actor:t.from.actor,anchored:C.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return!!this.sequenceItems.length&&this.sequenceItems[this.sequenceItems.length-1].overlap},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:$.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=r.e.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},B=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),V=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),F=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const q=function(t,e,a,s){if(s){let s=0;$.bumpVerticalPos(2*Y.boxMargin);for(const i of a){const a=e[i];a.stopy||(a.stopy=$.getVerticalPos());const n=C.drawActor(t,a,Y,!0);s=r.e.getMax(s,n)}$.bumpVerticalPos(s+Y.boxMargin)}else for(const r of a){const a=e[r];C.drawActor(t,a,Y,!1)}},W=function(t,e,a,r){let s=0,i=0;for(const n of a){const a=e[n],o=K(a),c=C.drawPopup(t,a,o,Y,Y.forceMenus,r);c.height>s&&(s=c.height),c.width+a.x>i&&(i=c.width+a.x)}return{maxHeight:s,maxWidth:i}},z=function(t){(0,r.f)(Y,t),t.fontFamily&&(Y.actorFontFamily=Y.noteFontFamily=Y.messageFontFamily=t.fontFamily),t.fontSize&&(Y.actorFontSize=Y.noteFontSize=Y.messageFontSize=t.fontSize),t.fontWeight&&(Y.actorFontWeight=Y.noteFontWeight=Y.messageFontWeight=t.fontWeight)},H=function(t){return $.activations.filter((function(e){return e.actor===t}))},U=function(t,e){const a=e[t],s=H(t);return[s.reduce((function(t,e){return r.e.getMin(t,e.startx)}),a.x+a.width/2-1),s.reduce((function(t,e){return r.e.getMax(t,e.stopx)}),a.x+a.width/2+1)]};function j(t,e,a,s,i){$.bumpVerticalPos(a);let n=s;if(e.id&&e.message&&t[e.id]){const a=t[e.id].width,i=B(Y);e.message=r.u.wrapLabel(`[${e.message}]`,a-2*Y.wrapPadding,i),e.width=a,e.wrap=!0;const o=r.u.calculateTextDimensions(e.message,i),c=r.e.getMax(o.height,Y.labelBoxHeight);n=s+c,r.l.debug(`${c} - ${e.message}`)}i(e),$.bumpVerticalPos(n)}const K=function(t){let e=0;const a=F(Y);for(const s in t.links){const t=r.u.calculateTextDimensions(s,a).width+2*Y.wrapPadding+2*Y.boxMargin;e<t&&(e=t)}return e};const X=function(t,e,a,s){const i={},n=[];let o,c,l;return t.forEach((function(t){switch(t.id=r.u.random({length:10}),t.type){case s.db.LINETYPE.LOOP_START:case s.db.LINETYPE.ALT_START:case s.db.LINETYPE.OPT_START:case s.db.LINETYPE.PAR_START:case s.db.LINETYPE.PAR_OVER_START:case s.db.LINETYPE.CRITICAL_START:case s.db.LINETYPE.BREAK_START:n.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case s.db.LINETYPE.ALT_ELSE:case s.db.LINETYPE.PAR_AND:case s.db.LINETYPE.CRITICAL_OPTION:t.message&&(o=n.pop(),i[o.id]=o,i[t.id]=o,n.push(o));break;case s.db.LINETYPE.LOOP_END:case s.db.LINETYPE.ALT_END:case s.db.LINETYPE.OPT_END:case s.db.LINETYPE.PAR_END:case s.db.LINETYPE.CRITICAL_END:case s.db.LINETYPE.BREAK_END:o=n.pop(),i[o.id]=o;break;case s.db.LINETYPE.ACTIVE_START:{const a=e[t.from?t.from.actor:t.to.actor],r=H(t.from?t.from.actor:t.to.actor).length,s=a.x+a.width/2+(r-1)*Y.activationWidth/2,i={startx:s,stopx:s+Y.activationWidth,actor:t.from.actor,enabled:!0};$.activations.push(i)}break;case s.db.LINETYPE.ACTIVE_END:{const e=$.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete $.activations.splice(e,1)[0]}}void 0!==t.placement?(c=function(t,e,a){const s=e[t.from].x,i=e[t.to].x,n=t.wrap&&t.message;let o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,Y.width,V(Y)):t.message,V(Y));const c={width:n?Y.width:r.e.getMax(Y.width,o.width+2*Y.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===a.db.PLACEMENT.RIGHTOF?(c.width=n?r.e.getMax(Y.width,o.width):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*Y.noteMargin),c.startx=s+(e[t.from].width+Y.actorMargin)/2):t.placement===a.db.PLACEMENT.LEFTOF?(c.width=n?r.e.getMax(Y.width,o.width+2*Y.noteMargin):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*Y.noteMargin),c.startx=s-c.width+(e[t.from].width-Y.actorMargin)/2):t.to===t.from?(o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,r.e.getMax(Y.width,e[t.from].width),V(Y)):t.message,V(Y)),c.width=n?r.e.getMax(Y.width,e[t.from].width):r.e.getMax(e[t.from].width,Y.width,o.width+2*Y.noteMargin),c.startx=s+(e[t.from].width-c.width)/2):(c.width=Math.abs(s+e[t.from].width/2-(i+e[t.to].width/2))+Y.actorMargin,c.startx=s<i?s+e[t.from].width/2-Y.actorMargin/2:i+e[t.to].width/2-Y.actorMargin/2),n&&(c.message=r.u.wrapLabel(t.message,c.width-2*Y.wrapPadding,V(Y))),r.l.debug(`NM:[${c.startx},${c.stopx},${c.starty},${c.stopy}:${c.width},${c.height}=${t.message}]`),c}(t,e,s),t.noteModel=c,n.forEach((t=>{o=t,o.from=r.e.getMin(o.from,c.startx),o.to=r.e.getMax(o.to,c.startx+c.width),o.width=r.e.getMax(o.width,Math.abs(o.from-o.to))-Y.labelBoxWidth}))):(l=function(t,e,a){if(![a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN,a.db.LINETYPE.SOLID,a.db.LINETYPE.DOTTED,a.db.LINETYPE.SOLID_CROSS,a.db.LINETYPE.DOTTED_CROSS,a.db.LINETYPE.SOLID_POINT,a.db.LINETYPE.DOTTED_POINT].includes(t.type))return{};const[s,i]=U(t.from,e),[n,o]=U(t.to,e),c=s<=n,l=c?i:s;let d=c?n:o;const h=Math.abs(n-o)>2,p=t=>c?-t:t;t.from===t.to?d=l:(t.activate&&!h&&(d+=p(Y.activationWidth/2-1)),[a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(d+=p(3)));const g=[s,i,n,o],u=Math.abs(l-d);t.wrap&&t.message&&(t.message=r.u.wrapLabel(t.message,r.e.getMax(u+2*Y.wrapPadding,Y.width),B(Y)));const x=r.u.calculateTextDimensions(t.message,B(Y));return{width:r.e.getMax(t.wrap?0:x.width+2*Y.wrapPadding,u+2*Y.wrapPadding,Y.width),height:0,startx:l,stopx:d,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,g),toBounds:Math.max.apply(null,g)}}(t,e,s),t.msgModel=l,l.startx&&l.stopx&&n.length>0&&n.forEach((a=>{if(o=a,l.startx===l.stopx){const a=e[t.from],s=e[t.to];o.from=r.e.getMin(a.x-l.width/2,a.x-a.width/2,o.from),o.to=r.e.getMax(s.x+l.width/2,s.x+a.width/2,o.to),o.width=r.e.getMax(o.width,Math.abs(o.to-o.from))-Y.labelBoxWidth}else o.from=r.e.getMin(l.startx,o.from),o.to=r.e.getMax(l.stopx,o.to),o.width=r.e.getMax(o.width,l.width)-Y.labelBoxWidth})))})),$.activations=[],r.l.debug("Loop type widths:",i),i},G={parser:c,db:w,renderer:{bounds:$,drawActors:q,drawActorsPopup:W,setConf:z,draw:function(t,e,a,n){const{securityLevel:o,sequence:c}=(0,r.c)();let l;Y=c,"sandbox"===o&&(l=(0,s.Ys)("#i"+e));const d="sandbox"===o?(0,s.Ys)(l.nodes()[0].contentDocument.body):(0,s.Ys)("body"),h="sandbox"===o?l.nodes()[0].contentDocument:document;$.init(),r.l.debug(n.db);const p="sandbox"===o?d.select(`[id="${e}"]`):(0,s.Ys)(`[id="${e}"]`),g=n.db.getActors(),u=n.db.getCreatedActors(),x=n.db.getDestroyedActors(),y=n.db.getBoxes();let m=n.db.getActorKeys();const b=n.db.getMessages(),f=n.db.getDiagramTitle(),T=n.db.hasAtLeastOneBox(),E=n.db.hasAtLeastOneBoxWithTitle(),w=function(t,e,a){const s={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const i=t[e.to];if(e.placement===a.db.PLACEMENT.LEFTOF&&!i.prevActor)return;if(e.placement===a.db.PLACEMENT.RIGHTOF&&!i.nextActor)return;const n=void 0!==e.placement,o=!n,c=n?V(Y):B(Y),l=e.wrap?r.u.wrapLabel(e.message,Y.width-2*Y.wrapPadding,c):e.message,d=r.u.calculateTextDimensions(l,c).width+2*Y.wrapPadding;o&&e.from===i.nextActor?s[e.to]=r.e.getMax(s[e.to]||0,d):o&&e.from===i.prevActor?s[e.from]=r.e.getMax(s[e.from]||0,d):o&&e.from===e.to?(s[e.from]=r.e.getMax(s[e.from]||0,d/2),s[e.to]=r.e.getMax(s[e.to]||0,d/2)):e.placement===a.db.PLACEMENT.RIGHTOF?s[e.from]=r.e.getMax(s[e.from]||0,d):e.placement===a.db.PLACEMENT.LEFTOF?s[i.prevActor]=r.e.getMax(s[i.prevActor]||0,d):e.placement===a.db.PLACEMENT.OVER&&(i.prevActor&&(s[i.prevActor]=r.e.getMax(s[i.prevActor]||0,d/2)),i.nextActor&&(s[e.from]=r.e.getMax(s[e.from]||0,d/2)))}})),r.l.debug("maxMessageWidthPerActor:",s),s}(g,b,n);if(Y.height=function(t,e,a){let s=0;Object.keys(t).forEach((e=>{const a=t[e];a.wrap&&(a.description=r.u.wrapLabel(a.description,Y.width-2*Y.wrapPadding,F(Y)));const i=r.u.calculateTextDimensions(a.description,F(Y));a.width=a.wrap?Y.width:r.e.getMax(Y.width,i.width+2*Y.wrapPadding),a.height=a.wrap?r.e.getMax(i.height,Y.height):Y.height,s=r.e.getMax(s,a.height)}));for(const n in e){const a=t[n];if(!a)continue;const s=t[a.nextActor];if(!s){const t=e[n]+Y.actorMargin-a.width/2;a.margin=r.e.getMax(t,Y.actorMargin);continue}const i=e[n]+Y.actorMargin-a.width/2-s.width/2;a.margin=r.e.getMax(i,Y.actorMargin)}let i=0;return a.forEach((e=>{const a=B(Y);let s=e.actorKeys.reduce(((e,a)=>e+(t[a].width+(t[a].margin||0))),0);s-=2*Y.boxTextMargin,e.wrap&&(e.name=r.u.wrapLabel(e.name,s-2*Y.wrapPadding,a));const n=r.u.calculateTextDimensions(e.name,a);i=r.e.getMax(n.height,i);const o=r.e.getMax(s,n.width+2*Y.wrapPadding);if(e.margin=Y.boxTextMargin,s<o){const t=(o-s)/2;e.margin+=t}})),a.forEach((t=>t.textMaxHeight=i)),r.e.getMax(s,Y.height)}(g,w,y),C.insertComputerIcon(p),C.insertDatabaseIcon(p),C.insertClockIcon(p),T&&($.bumpVerticalPos(Y.boxMargin),E&&$.bumpVerticalPos(y[0].textMaxHeight)),!0===Y.hideUnusedParticipants){const t=new Set;b.forEach((e=>{t.add(e.from),t.add(e.to)})),m=m.filter((e=>t.has(e)))}!function(t,e,a,s,i,n,o){let c,l=0,d=0,h=0;for(const p of s){const t=e[p],s=t.box;c&&c!=s&&(o||$.models.addBox(c),d+=Y.boxMargin+c.margin),s&&s!=c&&(o||(s.x=l+d,s.y=i),d+=s.margin),t.width=t.width||Y.width,t.height=r.e.getMax(t.height||Y.height,Y.height),t.margin=t.margin||Y.actorMargin,h=r.e.getMax(h,t.height),a[t.name]&&(d+=t.width/2),t.x=l+d,t.starty=$.getVerticalPos(),$.insert(t.x,i,t.x+t.width,t.height),l+=t.width+d,t.box&&(t.box.width=l+s.margin-t.box.x),d=t.margin,c=t.box,$.models.addActor(t)}c&&!o&&$.models.addBox(c),$.bumpVerticalPos(h)}(0,g,u,m,0,0,!1);const P=X(b,g,w,n);C.insertArrowHead(p),C.insertArrowCrossHead(p),C.insertArrowFilledHead(p),C.insertSequenceNumber(p);let _=1,v=1;const L=[],k=[];b.forEach((function(t,e){let a,s,o;switch(t.type){case n.db.LINETYPE.NOTE:$.resetVerticalPos(),s=t.noteModel,function(t,e){$.bumpVerticalPos(Y.boxMargin),e.height=Y.boxMargin,e.starty=$.getVerticalPos();const a=(0,i.g)();a.x=e.startx,a.y=e.starty,a.width=e.width||Y.width,a.class="note";const r=t.append("g"),s=C.drawRect(r,a),n=(0,i.e)();n.x=e.startx,n.y=e.starty,n.width=a.width,n.dy="1em",n.text=e.message,n.class="noteText",n.fontFamily=Y.noteFontFamily,n.fontSize=Y.noteFontSize,n.fontWeight=Y.noteFontWeight,n.anchor=Y.noteAlign,n.textMargin=Y.noteMargin,n.valign="center";const o=I(r,n),c=Math.round(o.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));s.attr("height",c+2*Y.noteMargin),e.height+=c+2*Y.noteMargin,$.bumpVerticalPos(c+2*Y.noteMargin),e.stopy=e.starty+c+2*Y.noteMargin,e.stopx=e.startx+a.width,$.insert(e.startx,e.starty,e.stopx,e.stopy),$.models.addNote(e)}(p,s);break;case n.db.LINETYPE.ACTIVE_START:$.newActivation(t,p,g);break;case n.db.LINETYPE.ACTIVE_END:!function(t,e){const a=$.endActivation(t);a.starty+18>e&&(a.starty=e-6,e+=12),C.drawActivation(p,a,e,Y,H(t.from.actor).length),$.insert(a.startx,e-10,a.stopx,e)}(t,$.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:j(P,t,Y.boxMargin,Y.boxMargin+Y.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.LOOP_END:a=$.endLoop(),C.drawLoop(p,a,"loop",Y),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.RECT_START:j(P,t,Y.boxMargin,Y.boxMargin,(t=>$.newLoop(void 0,t.message)));break;case n.db.LINETYPE.RECT_END:a=$.endLoop(),k.push(a),$.models.addLoop(a),$.bumpVerticalPos(a.stopy-$.getVerticalPos());break;case n.db.LINETYPE.OPT_START:j(P,t,Y.boxMargin,Y.boxMargin+Y.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.OPT_END:a=$.endLoop(),C.drawLoop(p,a,"opt",Y),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.ALT_START:j(P,t,Y.boxMargin,Y.boxMargin+Y.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.ALT_ELSE:j(P,t,Y.boxMargin+Y.boxTextMargin,Y.boxMargin,(t=>$.addSectionToLoop(t)));break;case n.db.LINETYPE.ALT_END:a=$.endLoop(),C.drawLoop(p,a,"alt",Y),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:j(P,t,Y.boxMargin,Y.boxMargin+Y.boxTextMargin,(t=>$.newLoop(t))),$.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:j(P,t,Y.boxMargin+Y.boxTextMargin,Y.boxMargin,(t=>$.addSectionToLoop(t)));break;case n.db.LINETYPE.PAR_END:a=$.endLoop(),C.drawLoop(p,a,"par",Y),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.AUTONUMBER:_=t.message.start||_,v=t.message.step||v,t.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:j(P,t,Y.boxMargin,Y.boxMargin+Y.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.CRITICAL_OPTION:j(P,t,Y.boxMargin+Y.boxTextMargin,Y.boxMargin,(t=>$.addSectionToLoop(t)));break;case n.db.LINETYPE.CRITICAL_END:a=$.endLoop(),C.drawLoop(p,a,"critical",Y),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.BREAK_START:j(P,t,Y.boxMargin,Y.boxMargin+Y.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.BREAK_END:a=$.endLoop(),C.drawLoop(p,a,"break",Y),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;default:try{o=t.msgModel,o.starty=$.getVerticalPos(),o.sequenceIndex=_,o.sequenceVisible=n.db.showSequenceNumbers();const a=function(t,e){$.bumpVerticalPos(10);const{startx:a,stopx:s,message:i}=e,n=r.e.splitBreaks(i).length,o=r.u.calculateTextDimensions(i,B(Y)),c=o.height/n;let l;e.height+=c,$.bumpVerticalPos(c);let d=o.height-10;const h=o.width;if(a===s){l=$.getVerticalPos()+d,Y.rightAngles||(d+=Y.boxMargin,l=$.getVerticalPos()+d),d+=30;const t=r.e.getMax(h/2,Y.width/2);$.insert(a-t,$.getVerticalPos()-10+d,s+t,$.getVerticalPos()+30+d)}else d+=Y.boxMargin,l=$.getVerticalPos()+d,$.insert(a,l-10,s,l);return $.bumpVerticalPos(d),e.height+=d,e.stopy=e.starty+e.height,$.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l}(0,o);!function(t,e,a,r,s,i,n){function o(a,r){a.x<s[t.from].x?($.insert(e.stopx-r,e.starty,e.startx,e.stopy+a.height/2+Y.noteMargin),e.stopx=e.stopx+r):($.insert(e.startx,e.starty,e.stopx+r,e.stopy+a.height/2+Y.noteMargin),e.stopx=e.stopx-r)}if(i[t.to]==r){const e=s[t.to];o(e,"actor"==e.type?21:e.width/2+3),e.starty=a-e.height/2,$.bumpVerticalPos(e.height/2)}else if(n[t.from]==r){const r=s[t.from];Y.mirrorActors&&function(a,r){a.x<s[t.to].x?($.insert(e.startx-r,e.starty,e.stopx,e.stopy+a.height/2+Y.noteMargin),e.startx=e.startx+r):($.insert(e.stopx,e.starty,e.startx+r,e.stopy+a.height/2+Y.noteMargin),e.startx=e.startx-r)}(r,"actor"==r.type?18:r.width/2),r.stopy=a-r.height/2,$.bumpVerticalPos(r.height/2)}else if(n[t.to]==r){const e=s[t.to];Y.mirrorActors&&o(e,"actor"==e.type?21:e.width/2+3),e.stopy=a-e.height/2,$.bumpVerticalPos(e.height/2)}}(t,o,a,e,g,u,x),L.push({messageModel:o,lineStartY:a}),$.models.addMessage(o)}catch(c){r.l.error("error while drawing message",c)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(_+=v)})),r.l.debug("createdActors",u),r.l.debug("destroyedActors",x),q(p,g,m,!1),L.forEach((t=>function(t,e,a,s){const{startx:n,stopx:o,starty:c,message:l,type:d,sequenceIndex:h,sequenceVisible:p}=e,g=r.u.calculateTextDimensions(l,B(Y)),u=(0,i.e)();u.x=n,u.y=c+10,u.width=o-n,u.class="messageText",u.dy="1em",u.text=l,u.fontFamily=Y.messageFontFamily,u.fontSize=Y.messageFontSize,u.fontWeight=Y.messageFontWeight,u.anchor=Y.messageAlign,u.valign="center",u.textMargin=Y.wrapPadding,u.tspan=!1,I(t,u);const x=g.width;let y;n===o?y=Y.rightAngles?t.append("path").attr("d",`M ${n},${a} H ${n+r.e.getMax(Y.width/2,x/2)} V ${a+25} H ${n}`):t.append("path").attr("d","M "+n+","+a+" C "+(n+60)+","+(a-10)+" "+(n+60)+","+(a+30)+" "+n+","+(a+20)):(y=t.append("line"),y.attr("x1",n),y.attr("y1",a),y.attr("x2",o),y.attr("y2",a)),d===s.db.LINETYPE.DOTTED||d===s.db.LINETYPE.DOTTED_CROSS||d===s.db.LINETYPE.DOTTED_POINT||d===s.db.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");let m="";Y.arrowMarkerAbsolute&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","none"),y.style("fill","none"),d!==s.db.LINETYPE.SOLID&&d!==s.db.LINETYPE.DOTTED||y.attr("marker-end","url("+m+"#arrowhead)"),d!==s.db.LINETYPE.SOLID_POINT&&d!==s.db.LINETYPE.DOTTED_POINT||y.attr("marker-end","url("+m+"#filled-head)"),d!==s.db.LINETYPE.SOLID_CROSS&&d!==s.db.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+m+"#crosshead)"),(p||Y.showSequenceNumbers)&&(y.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",a+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))}(p,t.messageModel,t.lineStartY,n))),Y.mirrorActors&&q(p,g,m,!0),k.forEach((t=>C.drawBackgroundRect(p,t))),A(p,g,m,Y),$.models.boxes.forEach((function(t){t.height=$.getVerticalPos()-t.y,$.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",C.drawBox(p,t,Y)})),T&&$.bumpVerticalPos(Y.boxMargin);const N=W(p,g,m,h),{bounds:M}=$.getBounds();let S=M.stopy-M.starty;S<N.maxHeight&&(S=N.maxHeight);let O=S+2*Y.diagramMarginY;Y.mirrorActors&&(O=O-Y.boxMargin+Y.bottomMarginAdj);let D=M.stopx-M.startx;D<N.maxWidth&&(D=N.maxWidth);const R=D+2*Y.diagramMarginX;f&&p.append("text").text(f).attr("x",(M.stopx-M.startx)/2-2*Y.diagramMarginX).attr("y",-25),(0,r.i)(p,O,R,Y.useMaxWidth);const z=f?40:0;p.attr("viewBox",M.startx-Y.diagramMarginX+" -"+(Y.diagramMarginY+z)+" "+R+" "+(O+z)),r.l.debug("models:",$.models)}},styles:P,init:({wrap:t})=>{w.setWrap(t)}}},2015:(t,e,a)=>{a.d(e,{a:()=>n,b:()=>l,c:()=>c,d:()=>i,e:()=>h,f:()=>o,g:()=>d});var r=a(7967),s=a(6365);const i=(t,e)=>{const a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),void 0!==e.rx&&a.attr("rx",e.rx),void 0!==e.ry&&a.attr("ry",e.ry),void 0!==e.attrs)for(const r in e.attrs)a.attr(r,e.attrs[r]);return void 0!==e.class&&a.attr("class",e.class),a},n=(t,e)=>{const a={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};i(t,a).lower()},o=(t,e)=>{const a=e.text.replace(s.H," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);const i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(a),r},c=(t,e,a,s)=>{const i=t.append("image");i.attr("x",e),i.attr("y",a);const n=(0,r.Nm)(s);i.attr("xlink:href",n)},l=(t,e,a,s)=>{const i=t.append("use");i.attr("x",e),i.attr("y",a);const n=(0,r.Nm)(s);i.attr("xlink:href",`#${n}`)},d=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),h=()=>({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/3304.44ae58a6.js b/assets/js/3304.44ae58a6.js new file mode 100644 index 000000000..fa9c4271e --- /dev/null +++ b/assets/js/3304.44ae58a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3304],{3304:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(6365),s=n(4218),r=n(1619),a=n(2281),o=n(7201),l=(n(7484),n(7967),n(7856),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;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[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.K,f=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.t)()},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(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",c).style("text-anchor","middle").style("font-size",h).style("font-family",d);l.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),l.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,o)}}function n(t,n,s,r,a,o,l,c){const h=n.append("switch"),d=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,l,c),i(d,l)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}}();function E(t,e){t.each((function(){var t,n=(0,s.Ys)(this),i=n.text().split(/(\s+|<br>)/).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;s<i.length;s++)t=i[i.length-1-s],r.push(t),l.text(r.join(" ").trim()),(l.node().getComputedTextLength()>e||"<br>"===t)&&(r.pop(),l.text(r.join(" ").trim()),r="<br>"===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)},T=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")},C=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},L=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},A=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=C(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=C(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.Ys)("#i"+e));const u=("sandbox"===h?(0,s.Ys)(d.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+e);u.append("g");const p=r.db.getTasks(),y=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",p),T(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=L(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=L(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;i<I.events.length;i++){const t={descr:I.events[i],section:I.section,number:I.section,width:150,padding:20,maxHeight:50};n+=L(u,t,l)}$=Math.max($,n)}i.l.debug("maxSectionHeight before draw",f),i.l.debug("maxTaskHeight before draw",m),g&&g.length>0?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=C(s,n,v,l);i.l.debug("sectionNode output",r),s.attr("transform",`translate(${x}, 50)`),k+=f+50,e.length>0&&A(u,e,v,x,k,m,l,S,$,f,!1),x+=200*Math.max(e.length,1),k=50,v++})):(w=!1,A(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<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],(0,r.Z)(t["lineColor"+n])?t["lineColor"+n]=(0,a.Z)(t["lineColor"+n],20):t["lineColor"+n]=(0,o.Z)(t["lineColor"+n],20);for(let n=0;n<t.THEME_COLOR_LIMIT;n++){const i=""+(17-3*n);e+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} path {\n fill: ${t["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${t["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${t["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${t["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${i};\n }\n .section-${n-1} line {\n stroke: ${t["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .lineWrapper line{\n stroke: ${t["cScaleLabel"+n]} ;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return e})(t)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${t.git0};\n }\n .section-root text {\n fill: ${t.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/3343.99c6e554.js b/assets/js/3343.99c6e554.js new file mode 100644 index 000000000..b2e3e01de --- /dev/null +++ b/assets/js/3343.99c6e554.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3343],{3343:(e,t,s)=>{s.d(t,{diagram:()=>N});var o=s(885),i=s(5625),a=s(4218),r=s(6365),n=s(4852);s(7484),s(7967),s(7856),s(1644),s(9354);const d="rect",l="rectWithTitle",c="statediagram",p=`${c}-state`,b="transition",g=`${b} note-edge`,h=`${c}-note`,u=`${c}-cluster`,y=`${c}-cluster-alt`,f="parent",w="note",m="----",x=`${m}${w}`,$=`${m}${f}`,T="fill:none",S="fill: #333",k="text",D="normal";let A={},v=0;function B(e="",t=0,s="",o=m){return`state-${e}${null!==s&&s.length>0?`${o}${s}`:""}-${t}`}const C=(e,t,s,i,a,n)=>{const c=s.id,b=null==(m=i[c])?"":m.classes?m.classes.join(" "):"";var m;if("root"!==c){let t=d;!0===s.start&&(t="start"),!1===s.start&&(t="end"),s.type!==o.D&&(t=s.type),A[c]||(A[c]={id:c,shape:t,description:r.e.sanitizeText(c,(0,r.c)()),classes:`${b} ${p}`});const i=A[c];s.description&&(Array.isArray(i.description)?(i.shape=l,i.description.push(s.description)):i.description.length>0?(i.shape=l,i.description===c?i.description=[s.description]:i.description=[i.description,s.description]):(i.shape=d,i.description=s.description),i.description=r.e.sanitizeTextOrArray(i.description,(0,r.c)())),1===i.description.length&&i.shape===l&&(i.shape=d),!i.type&&s.doc&&(r.l.info("Setting cluster for ",c,R(s)),i.type="group",i.dir=R(s),i.shape=s.type===o.a?"divider":"roundedWithTitle",i.classes=i.classes+" "+u+" "+(n?y:""));const a={labelStyle:"",shape:i.shape,labelText:i.description,classes:i.classes,style:"",id:c,dir:i.dir,domId:B(c,v),type:i.type,padding:15,centerLabel:!0};if(s.note){const t={labelStyle:"",shape:"note",labelText:s.note.text,classes:h,style:"",id:c+x+"-"+v,domId:B(c,v,w),type:i.type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:s.note.text,classes:i.classes,style:"",id:c+$,domId:B(c,v,f),type:"group",padding:0};v++;const r=c+$;e.setNode(r,o),e.setNode(t.id,t),e.setNode(c,a),e.setParent(c,r),e.setParent(t.id,r);let n=c,d=t.id;"left of"===s.note.position&&(n=t.id,d=c),e.setEdge(n,d,{arrowhead:"none",arrowType:"",style:T,labelStyle:"",classes:g,arrowheadStyle:S,labelpos:"c",labelType:k,thickness:D})}else e.setNode(c,a)}t&&"root"!==t.id&&(r.l.trace("Setting node ",c," to be child of its parent ",t.id),e.setParent(c,t.id)),s.doc&&(r.l.trace("Adding nodes children "),E(e,s,s.doc,i,a,!n))},E=(e,t,s,i,a,n)=>{r.l.trace("items",s),s.forEach((s=>{switch(s.stmt){case o.b:case o.D:C(e,t,s,i,a,n);break;case o.S:{C(e,t,s.state1,i,a,n),C(e,t,s.state2,i,a,n);const o={id:"edge"+v,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:T,labelStyle:"",label:r.e.sanitizeText(s.description,(0,r.c)()),arrowheadStyle:S,labelpos:"c",labelType:k,thickness:D,classes:b};e.setEdge(s.state1.id,s.state2.id,o,v),v++}}}))},R=(e,t=o.c)=>{let s=t;if(e.doc)for(let o=0;o<e.doc.length;o++){const t=e.doc[o];"dir"===t.stmt&&(s=t.value)}return s},V={setConf:function(e){const t=Object.keys(e);for(const s of t)e[s]},getClasses:function(e,t){return t.db.extract(t.db.getRootDocV2()),t.db.getClasses()},draw:async function(e,t,s,o){r.l.info("Drawing state diagram (v2)",t),A={},o.db.getDirection();const{securityLevel:l,state:p}=(0,r.c)(),b=p.nodeSpacing||50,g=p.rankSpacing||50;r.l.info(o.db.getRootDocV2()),o.db.extract(o.db.getRootDocV2()),r.l.info(o.db.getRootDocV2());const h=o.db.getStates(),u=new i.k({multigraph:!0,compound:!0}).setGraph({rankdir:R(o.db.getRootDocV2()),nodesep:b,ranksep:g,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let y;C(u,void 0,o.db.getRootDocV2(),h,o.db,!0),"sandbox"===l&&(y=(0,a.Ys)("#i"+t));const f="sandbox"===l?(0,a.Ys)(y.nodes()[0].contentDocument.body):(0,a.Ys)("body"),w=f.select(`[id="${t}"]`),m=f.select("#"+t+" g");await(0,n.r)(m,u,["barb"],c,t);r.u.insertTitle(w,"statediagramTitleText",p.titleTopMargin,o.db.getDiagramTitle());const x=w.node().getBBox(),$=x.width+16,T=x.height+16;w.attr("class",c);const S=w.node().getBBox();(0,r.i)(w,T,$,p.useMaxWidth);const k=`${S.x-8} ${S.y-8} ${$} ${T}`;r.l.debug(`viewBox ${k}`),w.attr("viewBox",k);const D=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const i of D){const e=i.getBBox(),t=document.createElementNS("http://www.w3.org/2000/svg",d);t.setAttribute("rx",0),t.setAttribute("ry",0),t.setAttribute("width",e.width),t.setAttribute("height",e.height),i.insertBefore(t,i.firstChild)}}},N={parser:o.p,db:o.d,renderer:V,styles:o.s,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,o.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/3365a9e9.53894df1.js b/assets/js/3365a9e9.53894df1.js new file mode 100644 index 000000000..77e43594e --- /dev/null +++ b/assets/js/3365a9e9.53894df1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8645],{2099:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>h,toc:()=>g});var i=n(5893),a=n(1151),r=n(3992),o=n(425),s=n(1872),l=n(7271);const c={id:"sfmc-behavioral-triggers",title:"SFMC Behavioral Triggers",sidebar_label:"Behavioral Triggers",description:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",image:"img/og/og-image-sfmc-behavioral-triggers.png",tags:["Marketing Cloud","Configuration","Email","Journey","Personalisation","Behavioral Triggers","Einstein"]},d=void 0,h={id:"config/sfmc-behavioral-triggers",title:"SFMC Behavioral Triggers",description:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",source:"@site/docs/config/sfmc-behavioral-triggers.mdx",sourceDirName:"config",slug:"/config/sfmc-behavioral-triggers",permalink:"/docs/config/sfmc-behavioral-triggers",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-behavioral-triggers.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Email",permalink:"/docs/tags/email"},{label:"Journey",permalink:"/docs/tags/journey"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Behavioral Triggers",permalink:"/docs/tags/behavioral-triggers"},{label:"Einstein",permalink:"/docs/tags/einstein"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1704489222,formattedLastUpdatedAt:"Jan 5, 2024",frontMatter:{id:"sfmc-behavioral-triggers",title:"SFMC Behavioral Triggers",sidebar_label:"Behavioral Triggers",description:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",image:"img/og/og-image-sfmc-behavioral-triggers.png",tags:["Marketing Cloud","Configuration","Email","Journey","Personalisation","Behavioral Triggers","Einstein"]},sidebar:"docs",previous:{title:"Enhanced Send Log",permalink:"/docs/config/sfmc-enhanced-send-log"},next:{title:"AppExchange Solutions",permalink:"/docs/config/sfmc-appexchange-solutions"}},u={},g=[{value:"Marketing Cloud Behavioral Triggers",id:"marketing-cloud-behavioral-triggers",level:2},{value:"Behavioral Triggers Pre-Work",id:"behavioral-triggers-pre-work",level:3},{value:"How the Behavioral Triggers work",id:"how-the-behavioral-triggers-work",level:3},{value:"Marketing Cloud Configuration",id:"marketing-cloud-configuration",level:2},{value:"Email Recommendations Configuration",id:"email-recommendations-configuration",level:3},{value:"Catalog and Product Attributes",id:"catalog-and-product-attributes",level:4},{value:"User and Profile Attributes",id:"user-and-profile-attributes",level:4},{value:"Activity Tracking",id:"activity-tracking",level:4},{value:"Initial Catalog Upload",id:"initial-catalog-upload",level:4},{value:"Einstein Data Extension",id:"einstein-data-extension",level:4},{value:"Behavioral Triggers Configuration",id:"behavioral-triggers-configuration",level:3},{value:"Collect.js",id:"collectjs",level:2},{value:"Collect Code Script",id:"collect-code-script",level:3},{value:"Set Org ID",id:"set-org-id",level:3},{value:"Set User Info",id:"set-user-info",level:3},{value:"Catalog Update Streaming",id:"catalog-update-streaming",level:3},{value:"Track Page View",id:"track-page-view",level:3},{value:"Track Wishlist",id:"track-wishlist",level:3},{value:"Track Cart",id:"track-cart",level:3},{value:"Track Purchase",id:"track-purchase",level:3},{value:"Do Not Track",id:"do-not-track",level:3},{value:"More details on Collect.js",id:"more-details-on-collectjs",level:3},{value:"Behavioral Trigger Content Block",id:"behavioral-trigger-content-block",level:2},{value:"1. AMPScript personalisation",id:"1-ampscript-personalisation",level:3},{value:"2. Try/Catch block",id:"2-trycatch-block",level:3},{value:"3. Settings & Markup Fragments",id:"3-settings--markup-fragments",level:3},{value:"4. Pulling data",id:"4-pulling-data",level:3},{value:"5. Building the API query",id:"5-building-the-api-query",level:3},{value:"6. Response parsing",id:"6-response-parsing",level:3},{value:"API Responses",id:"api-responses",level:3},{value:"Debugging Behavioral Triggers",id:"debugging-behavioral-triggers",level:2},{value:"Debugging Collect.js",id:"debugging-collectjs",level:3},{value:"Debugging Data Flow",id:"debugging-data-flow",level:3},{value:"Debugging BT Content Block",id:"debugging-bt-content-block",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.m,{content:"Win-back your e-commerce customers with SFMC Behavioral Triggers."}),"\n",(0,i.jsx)(t.h2,{id:"marketing-cloud-behavioral-triggers",children:"Marketing Cloud Behavioral Triggers"}),"\n",(0,i.jsx)(t.p,{children:"Behavioral Triggers are a solution for smoothly moving abandoned engagement data from your e-commerce to Salesforce Marketing Cloud. They enable powerful win-back communication you can create with minimal technical knowledge in express time."}),"\n",(0,i.jsx)(t.p,{children:"Currently, there are three scenarios available:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Abandoned Cart"}),"\n",(0,i.jsx)(t.li,{children:"Abandoned Browse"}),"\n",(0,i.jsx)(t.li,{children:"Abandoned Wishlist"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"In each case, what Behavioral Triggers does is push relevant data (items left in the cart, browsed without conversion or added to wishlist) to the Einstein Backend and - after configured time - to Marketing Cloud Data Extension."}),"\n",(0,i.jsx)(t.p,{children:"You can then leverage this data extension as both Journey Entry and a source of personalisation using built-in Behavioral Trigger Content Block. The latter allows you to use clean UI to configure dynamic content using the obtained engagement data."}),"\n",(0,i.jsx)(t.h3,{id:"behavioral-triggers-pre-work",children:"Behavioral Triggers Pre-Work"}),"\n",(0,i.jsx)(t.p,{children:"Before you use the Behavioral Triggers, be sure to fulfil pre-requisites:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["As Behavioral Triggers are extending the ",(0,i.jsx)(t.strong,{children:"Einstein Recommendations"}),", ",(0,i.jsxs)(t.strong,{children:["get a license and ",(0,i.jsx)(t.a,{href:"#email-recommendations-configuration",children:"enable"})]})," it in your Business Unit."]}),"\n",(0,i.jsxs)(t.li,{children:["Many data leveraged by Triggers is coming from the ",(0,i.jsx)(t.strong,{children:"Product Catalog"}),", so be sure to ",(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.a,{href:"#initial-catalog-upload",children:"configure"})})," it before capturing the events."]}),"\n",(0,i.jsxs)(t.li,{children:["Behavioural data is saved only for records that have Einstein Profile (IGO_PROFILE), so you need to ",(0,i.jsx)(t.strong,{children:"enable Einstein Data Extensions"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsxs)(t.strong,{children:["Implement the ",(0,i.jsx)(t.a,{href:"#collectjs",children:"Collect.js"})]})," script on your e-commerce to capture session and engagement data."]}),"\n",(0,i.jsxs)(t.li,{children:["Finally, ",(0,i.jsx)(t.strong,{children:"configure Behavioral Triggers"})," to bring relevant data to Marketing Cloud Data Extensions."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"As you can see, if you already use Einstein Recommendations, most of the necessary work is already done, and full implementation should take you just a few minutes. In such a case, you will only need to update Collect.js and configure the Behavioral Triggers slightly."}),"\n",(0,i.jsx)(t.h3,{id:"how-the-behavioral-triggers-work",children:"How the Behavioral Triggers work"}),"\n",(0,i.jsx)(t.p,{children:"Behavioral Triggers seems to be easy to implement, but a lot is going in the backend. It is good to understand its basics, as it might help a lot when triaging a problem or customising the solution."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["A customer enters your e-commerce site - you trigger first ",(0,i.jsx)(t.a,{href:"#collectjs",children:"Collect.js"})," scripts to capture the Session and Page View."]}),"\n",(0,i.jsxs)(t.li,{children:["Customer clicks on a product page - you trigger the ",(0,i.jsx)(t.a,{href:"#page-view-data-layer",children:"Page View data layer"})," with a link to that product (Abandoned Browse scenario)."]}),"\n",(0,i.jsxs)(t.li,{children:["Customer finds an exciting product and adds it to the wishlist - you trigger the ",(0,i.jsx)(t.a,{href:"#wishlist-data-layer",children:"Wishlist data layer"})," (Abandoned Wishlist scenario)."]}),"\n",(0,i.jsxs)(t.li,{children:["A customer decides on one of the products and adds it to the cart - you trigger the ",(0,i.jsx)(t.a,{href:"#cart-data-layer",children:"Cart data layer"})," (Abandoned Cart scenario)."]}),"\n",(0,i.jsxs)(t.li,{children:["Customer goes through the purchase process and buys the product - you trigger the ",(0,i.jsx)(t.a,{href:"#cart-data-layer",children:"Cart data layer"})," with explicit parameter (This blocks Abandoned Cart from launching communication)."]}),"\n",(0,i.jsx)(t.li,{children:"Each of the above triggers is sent to Einstein Backend (IgoDigital) that stores the information."}),"\n",(0,i.jsx)(t.li,{children:"Marketing Cloud Behavioral Triggers query the Einstein Backend for any events that occurred some time ago - you can configure it in the range from 15 minutes to 3 hours (in 15 minutes increments)."}),"\n",(0,i.jsx)(t.li,{children:"If there is a matching event, it checks whether there is any other event that overwrites it. For example, if your customer viewed a product page, and a few minutes later, added this product to the cart, the page view will be ignored. The Behavioral Trigger will wait for the abandoned cart."}),"\n",(0,i.jsx)(t.li,{children:"Once there is an event ripe for reengagement, Behavioral Trigger will put it into a system created Data Extension (one per scenario) with three data points: subscriber key, timestamp and encrypted data."}),"\n",(0,i.jsx)(t.li,{children:"Now you can use this to add the customer to a Customer Journey."}),"\n",(0,i.jsx)(t.li,{children:"In the Journey, you can use an Email with a built-in Behavioral Trigger Content Block. At the moment of sending, this block makes a call to Einstein Backend (IgoDigital) and gets the real-time state of your customer interaction. It validates that he or she did not convert to purchase in the meantime and provides all the details required for creating personalised content in the email presenting the abandoned products."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"As you can see, a lot is happening, and it's time to dive deeper into each step to understand it better."}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"There are many quirks and tricks - read on to learn how to get more out of Behavioral Triggers."})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"marketing-cloud-configuration",children:"Marketing Cloud Configuration"}),"\n",(0,i.jsxs)(t.p,{children:["Before you implement the ",(0,i.jsx)(t.a,{href:"#collectjs",children:"Collect.js"}),", you have to make the basic configuration of the Behavioral Triggers."]}),"\n",(0,i.jsx)(t.h3,{id:"email-recommendations-configuration",children:"Email Recommendations Configuration"}),"\n",(0,i.jsx)(t.p,{children:"If you haven't yet configured the Einstein Email Recommendations, you will have to do it first. Go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Implementation, and it will guide you through the steps needed."}),"\n",(0,i.jsx)(t.p,{children:"If you already configured it previously, go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Options and make sure you have the additional options related to Behavioral Triggers enabled as described below."}),"\n",(0,i.jsx)(t.p,{children:"For the Behavioral Triggers, be sure to select Product Catalog implementation."}),"\n",(0,i.jsx)(t.h4,{id:"catalog-and-product-attributes",children:"Catalog and Product Attributes"}),"\n",(0,i.jsx)(t.p,{children:"On the next screen, you will be able to select which Standard Product Attributes you want to use, plus have the option to create Custom ones. It is a crucial step, as the data you choose and create here will be the basis for the Behavioral Trigger Content Block available in the win-back email."}),"\n",(0,i.jsx)(t.p,{children:"Just remember that those attributes are global (linked to a product, not to a particular Subscriber), so don't add here parameters that are individual (like PersonalisationString)."}),"\n",(0,i.jsx)(t.h4,{id:"user-and-profile-attributes",children:"User and Profile Attributes"}),"\n",(0,i.jsx)(t.p,{children:"The next step allows you to configure Custom Profile Attributes. It is beneficial for general Einstein purposes, but it is also crucial for Behavioral Triggers if you want to personalise your win-back email for unknown (to Marketing Cloud) customers."}),"\n",(0,i.jsx)(t.p,{children:"If this is something you want to do, enable Custom User Profile Attributes and add necessary ones."}),"\n",(0,i.jsx)(t.p,{children:"You can also enable localisation here, which will allow you to present the product name in the user's language."}),"\n",(0,i.jsx)(t.h4,{id:"activity-tracking",children:"Activity Tracking"}),"\n",(0,i.jsxs)(t.p,{children:["On this last step before Summary, you configure what you will be tracking. Category View and In-Site Search are nice to have for general Einstein features, but for Behavioral Triggers, be sure to check Cart Activity and Purchase Activity. You will need it for ",(0,i.jsx)(t.a,{href:"#collectjs",children:"Collect.js"}),"."]}),"\n",(0,i.jsx)(t.h4,{id:"initial-catalog-upload",children:"Initial Catalog Upload"}),"\n",(0,i.jsx)(t.p,{children:"Once you configure the Email Recommendations, it is time to make the first upload of the Catalog. Go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Catalog and click Connect a New Catalog. Select the Product Catalog, import method and format. Pass the column's name that contains Unique ID and tell SFMC whether it is complete or partial Catalog import."}),"\n",(0,i.jsx)(t.p,{children:"Once Marketing Cloud completes the upload, be sure to map the fields from your source to the Standard and Custom Fields available in the Catalog."}),"\n",(0,i.jsx)(t.h4,{id:"einstein-data-extension",children:"Einstein Data Extension"}),"\n",(0,i.jsx)(t.p,{children:"The last step here is to enable Einstein Data Extensions. To do this:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Status."}),"\n",(0,i.jsx)(t.li,{children:"Click on the cog icon in the top right and select Data Extension Settings."}),"\n",(0,i.jsx)(t.li,{children:"Enable them with a toggle."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"If the toggle is inactive, you need to:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Make sure your Catalog is ",(0,i.jsx)(t.a,{href:"#initial-catalog-upload",children:"uploaded and mapped"}),"."]}),"\n",(0,i.jsx)(t.li,{children:"Make test Collect.js push to initialise Einstein. To start, you can utilise ready-to-use base script:"}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'title="initialise Einstein with basic Collect.js"',children:'<script type="text/javascript" src="MID.collect.igodigital.com/collect.js"><\/script>\n<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "initialise Einstein"}]);\n _etmc.push(["trackPageView"]);\n<\/script>\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Create a Cloud Page, paste the above snippet in the HTML block - update both ",(0,i.jsx)(t.code,{children:"MID"}),"'s with the Business Unit you implement the Behavioral Triggers on - and publish it. After opening the website, you can delete the Cloud Page - so that it doesn't affect your future Einstein data."]}),"\n",(0,i.jsxs)(t.p,{children:["You will find details on what is happening in this script in the ",(0,i.jsx)(t.a,{href:"#collectjs",children:"Collect.js"})," section below. As for now, you have to wait for the initialisation to happen. It can take a day. To check whether it is ready, try to Enable the Einstein Data Extensions again. During the initialisation, the Status page won't be loading (you will see the circle spinning infinitely)."]}),"\n",(0,i.jsx)(t.h3,{id:"behavioral-triggers-configuration",children:"Behavioral Triggers Configuration"}),"\n",(0,i.jsx)(t.p,{children:"Once you configure and enable the Email Recommendations, it is time to set up the Behavioral Triggers themselves. It will be simpler and easier. Head to Journey Builder \xbb Behavioral Triggers."}),"\n",(0,i.jsx)(t.p,{children:"First, click New Trigger in the top right. You can select from the three available abandonment scenarios:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Abandoned Cart"}),"\n",(0,i.jsx)(t.li,{children:"Abandoned Browse"}),"\n",(0,i.jsx)(t.li,{children:"Abandoned Wishlist"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Select the one you want to start with, and you will be able to set suppression rules - one related to multiple triggers and the second to a recent purchase. For initial configuration, I recommend setting both to 0. It will make testing much more manageable. Once you go to production, change those appropriately as per your business requirements."}),"\n",(0,i.jsx)(t.p,{children:"When you confirm the setup, Marketing Cloud creates the system Data Extension to store Behavioral Trigger data (one per scenario)."}),"\n",(0,i.jsx)(t.p,{children:"The only left option is the Session Timeout Limit. You can access it by clicking the cog icon next to the New Trigger button. You can select from a range starting at 15 minutes and going in 15 minutes increments up to 3 hours. Again, for testing purposes, make it the shortest possible and later update based on business needs."}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"Currently, it is not working at all - it does not save the selected setting, and it always shows 1 hour. Until fixed, you can manage this by going to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Implementation and clicking Advanced Settings on the left pane. There will be a Session Length option with the same range. It is the same setting."})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"collectjs",children:"Collect.js"}),"\n",(0,i.jsx)(t.p,{children:"You have seen the Collect.js script mentioned multiple times here, and it is also the most technical elements of the standard Behavioral Triggers implementation. Time for details."}),"\n",(0,i.jsx)(t.h3,{id:"collect-code-script",children:"Collect Code Script"}),"\n",(0,i.jsx)(t.p,{children:"Before you start building the data layers, you first need to import the code responsible for pushing data to Einstein Backend (IgoDigital). You do this by putting this line on every page:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'title="Collect Code Script"',children:'<script type="text/javascript" src="MID.collect.igodigital.com/collect.js"><\/script>\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Be sure to change the ",(0,i.jsx)(t.code,{children:"MID"})," in the above URL to the ID of the Business Unit that you want to use for your Behavioral Triggers."]}),"\n",(0,i.jsx)(t.p,{children:"Once you have it, you may start building the data layers that will move the information from your e-commerce to Marketing Cloud. For simplicity, I won't be writing the above code in the snippets below."}),"\n",(0,i.jsx)(t.h3,{id:"set-org-id",children:"Set Org ID"}),"\n",(0,i.jsxs)(t.p,{children:["The first data layer you need to push contains, again, the MID of the Business Unit. Just as with the ",(0,i.jsx)(t.a,{href:"#collect-code-script",children:"Collect Code Script"}),", be sure to change the ",(0,i.jsx)(t.code,{children:"MID"})," to your SFMC BU's actual ID."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{2} title="Set Org ID Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.h3,{id:"set-user-info",children:"Set User Info"}),"\n",(0,i.jsx)(t.p,{children:"The second data layer that will be key for sending Behavioral Triggered communication pushes the customer's data. Remember that this layer must be added to your Collect.js before any tracking layer for proper attribution."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{3} title="Set User Info Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n<\/script>\n'})}),"\n",(0,i.jsxs)(t.p,{children:["The base function is pushing your customer's unique identifier (don't be intimidated by the ",(0,i.jsx)(t.code,{children:"email"})," in that code - you do not have to pass the email address there). Depending on your use case, it might be either:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Subscriber Key (if you plan on sending only to contacts known to Marketing Cloud or have an option to generate Subscriber straight from your e-commerce) or"}),"\n",(0,i.jsx)(t.li,{children:"Email Address (recommended if you want to push win-back emails to unknown users in your Marketing Cloud and you do not have an option to create them properly.)"}),"\n"]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"If you decide to push an Email Address to communicate with people not yet in the Marketing Cloud, be sure to make them Subscribers. You can easily do it using the classic Export-Transfer-Import Automation on the data stored in the Behavioral Triggers Data Extension. Leverage SQL Activity to copy the needed data to another Data Extension using this query:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",metastring:'title="Basic Subscriber data preparation"',children:"SELECT\n GUID() AS SubscriberKey, // OR: subscriber_key AS SubscriberKey,\n subscriber_key AS EmailAddress\nFROM abandoned_cart_123456789\n"})}),(0,i.jsx)(t.p,{children:"Be sure to update the name of the Behavioral Trigger Data Extension."}),(0,i.jsx)(t.p,{children:"You can leverage the same automation to trigger the Journey Entry to ensure that all records in the Journey already exist as Subscribers."})]}),"\n",(0,i.jsx)(t.p,{children:"You can provide more data in this data layer by adding Custom Einstein Profile Attributes as second parameter:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{5} title="Extended Set User Info Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {\n "email": "UniqueIdentifier",\n "details": {"gender": "male"}\n }]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"Remember that the snippet I shared above is just an example. You will probably use different Custom Profile Attributes. To get the snippet based on your configuration, go to Einstein \xbb Email Recommendations \xbb Admin \xbb Implementation."})}),"\n",(0,i.jsx)(t.p,{children:"Be sure to create all those Custom Profile Attributes in your Einstein implementation before pushing it via Collect.js."}),"\n",(0,i.jsx)(t.h3,{id:"catalog-update-streaming",children:"Catalog Update Streaming"}),"\n",(0,i.jsx)(t.p,{children:"There are two options to keep your Einstein Catalog up-to-date. Manual uploads and Catalog Update Streaming."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["With ",(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_rn_april_2021_collect_tracking_code_streaming.htm&type=5",children:"April 2021 Marketing Cloud Release"})," the Collect.js Streaming Updates will be deprecated. The way forward will be Streaming Updates via API. Read more ",(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_rn_april_2021_collect_tracking_code_streaming.htm&type=5",children:"here"}),"."]}),(0,i.jsx)(t.p,{children:"As existing implementation will be available for some time still to allow for migration, I'm keeping this section until the end of the grace period."})]}),"\n",(0,i.jsx)(t.p,{children:"Manual uploads might be fine if you nearly never update items or their parameters in your e-commerce. For all other use cases, you should be using Catalog Update Streaming Data Layer."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{4-16} title="Page View Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["updateItem", {\n "item_type": "product",\n "item": "ProductCode",\n "name": "ProductName",\n "description": "ProductDescription",\n "url": "ProductURL",\n "unique_id": "ProductSKU",\n "available": "y",\n "image_url": "ProductImage",\n "sale_price": "ProductSalePrice",\n "price": "ProductRegularPrice",\n "release_date": "ProductReleaseDate",\n "custom_attribute": "ProductAttribute"\n }]);\n<\/script>\n'})}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"Remember that the snippet I shared above is for a fully-fledged Catalog with one sample Custom Attribute. You may use only some of those parameters or utilise multiple custom attributes."}),(0,i.jsx)(t.p,{children:"You can get the complete list of the parameters you need to use by going to Einstein \xbb Email Recommendations \xbb Admin \xbb Implementation. If you have Streaming Updates enabled (and you should have to use this data layer) below, you will see the entire snippet adapted to your configuration."}),(0,i.jsx)(t.p,{children:"Be sure to check also the Domain table visible above it - you should add all the domains connected to your Streaming Update, so:"}),(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"The domain where the Stream is happening"}),"\n",(0,i.jsx)(t.li,{children:"The domain of the Product URL"}),"\n",(0,i.jsx)(t.li,{children:"The domain of the Product Image URL"}),"\n"]}),(0,i.jsxs)(t.p,{children:["In many cases, all those domains might be the same, but if you are using Content Delivery Network or a different subdomain for the backend, those might differ. If you cannot click ",(0,i.jsx)(t.code,{children:"Register"}),", be sure you pass just the domain - the bolded part of https://",(0,i.jsx)(t.strong,{children:"domain.name"}),"/folder/structure?query=string."]})]}),"\n",(0,i.jsx)(t.p,{children:"With this data layer, you can be sure that the Catalog stored in Marketing Cloud is always up-to-date. It is crucial, as everything in the Behavioral Trigger Content Block uses the Catalog data."}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"available"})," parameter is essential as it is the best way to make sure the personalisation in the email won't show the product that is no longer available even if it was in the abandoned cart. Of course, this is true for the moment of email send, not the moment of email open."]}),"\n",(0,i.jsx)(t.p,{children:"You can either:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Add this data layer to other pushes of Collect.js as shown in the snippet above or"}),"\n",(0,i.jsx)(t.li,{children:"Create a separate process on the backend of your e-commerce. It can shoot an update whenever there is a change in the product parameters."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The first approach is straightforward; the second is wise."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know that",type:"note",children:[(0,i.jsxs)(t.p,{children:["Remember that this data layer updates the Catalog. Even if you push it in the context of a specific subscriber and along the ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," data layer, it will still update the global Catalog for everyone."]}),(0,i.jsxs)(t.p,{children:["If your customer has a unique product price (for example, via VIP status or coupon), use the ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," data layer to share this information."]})]}),"\n",(0,i.jsxs)(t.p,{children:["If you are using localisation, you may also pass the translated product name using ",(0,i.jsx)(t.code,{children:'"locale_pl_name": "PolishProductName"'}),". The Behavioral Trigger Content Block can leverage it with a ",(0,i.jsx)(t.a,{href:"#4-pulling-data",children:"trick"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"track-page-view",children:"Track Page View"}),"\n",(0,i.jsx)(t.p,{children:"Time for our first real tracking - Page View. The basic data layer pushes just the information about the event:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{4} title="Page View Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView"]);\n<\/script>\n'})}),"\n",(0,i.jsxs)(t.p,{children:["However, you can do much more with this data layer by providing additional parameters. The most important for Behavioral Triggers is ",(0,i.jsx)(t.code,{children:"item"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{4} title="Page View Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView", {"item": "ProductCode"}]);\n<\/script>\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Once you swap ",(0,i.jsx)(t.code,{children:"ProductCode"})," for the actual product code matching one of the items in Einstein Product Catalog, you will be able to leverage the first Behavioral Trigger scenario - Abandoned Browse. Once you push this event and the customer does not convert further, this will populate Abandoned Browse Data Extension and allow win-back communication."]}),"\n",(0,i.jsx)(t.p,{children:"You can also add other parameters that are not used by the Behavioral Triggers but rather standard Einstein Recommendations - category and search:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{6-7} title="Page View Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView", {\n "item": "ProductCode",\n "category": "ProductCategory",\n "search": "SearchTerm"\n }]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.p,{children:"You do not have to use all three; you can trigger various ones depending on the page the user is on. The floor is yours."}),"\n",(0,i.jsx)(t.h3,{id:"track-wishlist",children:"Track Wishlist"}),"\n",(0,i.jsx)(t.p,{children:"The second Behavioral Trigger scenario - Abandoned Wishlist - has its own data layer:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{4-7} title="Track Cart Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackWishlist", { "wishlist": [\n {"item": "ProductCode", "unique_id": "ProductSKU"},\n {"item": "ProductCode", "unique_id": "ProductSKU"}\n ]}]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.p,{children:"As you can see, not much is configurable here - all of the product data come from the Einstein Catalog, so be sure to have it up to date."}),"\n",(0,i.jsx)(t.h3,{id:"track-cart",children:"Track Cart"}),"\n",(0,i.jsx)(t.p,{children:"The third Behavioral Trigger scenario - Abandoned Cart - also has its own data layer:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{4-7} title="Track Cart Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackCart", { "cart": [\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}\n ]}]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.p,{children:"Few things here are important to consider:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["As you can see, there are four possible parameters for each item - ",(0,i.jsx)(t.code,{children:"item"})," and ",(0,i.jsx)(t.code,{children:"unique_id"})," are required and must be available in your Einstein Product Catalog to work. The other two - ",(0,i.jsx)(t.code,{children:"quantity"})," and ",(0,i.jsx)(t.code,{children:"price"})," are optional."]}),"\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.code,{children:"price"})," parameter here is different from ",(0,i.jsx)(t.code,{children:"price"})," or ",(0,i.jsx)(t.code,{children:"sales_price"})," available in ",(0,i.jsx)(t.a,{href:"#catalog-update-streaming",children:"Catalog Update"}),". The Catalog ones are global - the same for all your customers. The ",(0,i.jsx)(t.code,{children:"price"})," pushed within Track Cart is unique for this customer and might differ from the global ones (think VIP status or a coupon used). It won't update your Einstein Catalog."]}),"\n",(0,i.jsx)(t.li,{children:"Always push the whole cart. If your customer has more than one item in it - put all of them in this data layer. If a customer deletes an item from the cart - push the data layer without the deleted one. The last version pushed is considered the final state of the cart for personalisation purposes."}),"\n",(0,i.jsxs)(t.li,{children:["Always be sure to clear the Track Cart data whenever the cart data is no longer needed. If the customer purchased the products, be sure to use the ",(0,i.jsx)(t.a,{href:"#track-purchase",children:"Track Purchase"})," data layer. If the customer deleted all the products from their cart, use the Clear Cart parameter:"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{4} title="Clear the Track Cart Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackCart", {"clear_cart": true}]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.p,{children:"Otherwise, your customers might receive win-back communication for products that they already bought."}),"\n",(0,i.jsx)(t.h3,{id:"track-purchase",children:"Track Purchase"}),"\n",(0,i.jsx)(t.p,{children:"Whenever the customer converts, be sure to track this purchase. It is not only crucial for Einstein Recommendations and Discover's ROI calculation. For Behavioral Triggers, it is vital, as it informs that the cart converted. It blocks win-back communication for already purchased products."}),"\n",(0,i.jsxs)(t.p,{children:["The basic structure of the Track Purchase data layer is very similar to the ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," one:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{5-8} title="Track Cart Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView", {"item": "ProductCode"}]);\n _etmc.push(["trackConversion", { "cart": [\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}\n ]}]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.h3,{id:"do-not-track",children:"Do Not Track"}),"\n",(0,i.jsx)(t.p,{children:"You may suppress all of the configured trackings by using a data layer based on customer decision and local laws."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'{3} title="Do Not Track Data Layer"',children:'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["doNotTrack"]);\n<\/script>\n'})}),"\n",(0,i.jsx)(t.h3,{id:"more-details-on-collectjs",children:"More details on Collect.js"}),"\n",(0,i.jsxs)(t.p,{children:["If you want even more details and implementation considerations related to the Collect.js code used by Behavioral Triggers and Einstein Recommendations, check the ",(0,i.jsx)(t.a,{href:"https://joernberkefeld.github.io/SFMC-Cookbook/einstein/recommendation/",children:"awesome documentation"})," by ",(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/joernberkefeld/",children:"J\xf6rn Berkefeld"})," and excellent ",(0,i.jsx)(t.a,{href:"https://resources.docs.salesforce.com/latest/latest/en-us/sfdc/pdf/mc_pb_implementation_guide.pdf",children:"PDF guide"})," directly from Salesforce."]}),"\n",(0,i.jsx)(l.V,{linkLeft:"https://joernberkefeld.github.io/SFMC-Cookbook/einstein/recommendation/",textLeft:"J\xf6rn's Cookbook",newTabLeft:"true",linkRight:"https://resources.docs.salesforce.com/latest/latest/en-us/sfdc/pdf/mc_pb_implementation_guide.pdf",textRight:"Salesforce's Guide",newTabRight:"true"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"behavioral-trigger-content-block",children:"Behavioral Trigger Content Block"}),"\n",(0,i.jsxs)(t.p,{children:["Now you can go forward with Behavioral Triggers. ",(0,i.jsx)(t.a,{href:"#collectjs",children:"Collect.js"})," will push the required data to Einstein backend, and after Session Timeout Limit, it will evaluate it against Suppression Rules as per your ",(0,i.jsx)(t.a,{href:"#Behavioral-triggers-configuration",children:"configuration"}),". Then, the Behavioral Triggers adds Abandoned Engagement data to the respective ",(0,i.jsx)(t.a,{href:"#Behavioral-triggers-configuration",children:"Data Extension"}),". Now it's time to use it."]}),"\n",(0,i.jsx)(t.p,{children:"The standard way the leverage this information is to use those abandonment Data Extensions as a Journey Entry Source. The real magic, however, will happen in the email you will be sending in this Journey. And that is thanks to the out-of-the-box Behavioral Trigger Content Block."}),"\n",(0,i.jsx)(t.p,{children:"To check it out, edit email, and on the bottom of the left pane containing all the Content Blocks, you will find the Behavioral Trigger one. Drag and drop it to the email so that you can start configuring it."}),"\n",(0,i.jsx)(t.p,{children:"When you click that block after adding it to the email, you will be able to limit the maximum number of products shown, control the layout with columns, change order and decide which data points should be visible for products."}),"\n",(0,i.jsx)(t.p,{children:"It's easy, it's quick, but there are multiple issues if you want anything a bit more customised for your needs. With the out-of-the-box solution:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"You don't have a straightforward way to control the style of this information. You can only go to the Styling tab of the editor and modify the CSS available there."}),"\n",(0,i.jsxs)(t.li,{children:["You are limited only to the fields that you ",(0,i.jsx)(t.a,{href:"#catalog-and-product-attributes",children:"configured for the Product Catalog"}),". For example, you cannot use the individual price you passed in the ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," data layer. You can vote for it on ",(0,i.jsx)(t.a,{href:"https://trailblazer.salesforce.com/ideaView?id=0874V0000003lCKQAY",children:"IdeaExchange"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["There is no information on how to access the data outside of the Content Block - but you can learn about it ",(0,i.jsx)(t.a,{href:"#6-response-parsing",children:"later in this article"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["You cannot leverage Einstein API's full potential, as the hard-coded request does not have a parameter responsible for pulling the ",(0,i.jsx)(t.a,{href:"#user-and-profile-attributes",children:"Einstein Custom Profile Attributes"}),". You can vote for it on ",(0,i.jsx)(t.a,{href:"https://trailblazer.salesforce.com/ideaView?id=0874V0000003lB7QAI",children:"IdeaExchange"}),"."]}),"\n",(0,i.jsx)(t.li,{children:"You cannot use multiple Content Blocks pointing to various Behavioral Trigger scenarios (for example,first focus on the cart and then present the wishlist)."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"As far as you can fix the first issue with good CSS knowledge, the rest require more work."}),"\n",(0,i.jsxs)(t.p,{children:["So what can you do? Configure the Content Block to be as close as possible to what you want, go to Code View of your Email and look for ",(0,i.jsx)(t.code,{children:"Concat('{\"trigger_payload\":\"', data, '\"}')"}),". It starts the code responsible for Behavioral Trigger Content Block."]}),"\n",(0,i.jsx)(t.p,{children:"Below you can see two tabs."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["In t ",(0,i.jsx)(t.strong,{children:"Original Code"}),", you will find the complete code of the built-in Behavioral Trigger Content Block. Shown configuration displays a product image with name and description plus regular/sale price. The number of items is limited to four in a two-column layout."]}),"\n",(0,i.jsxs)(t.li,{children:["In the ",(0,i.jsx)(t.strong,{children:"Code Highlights"})," tab, I focus on some part of the code that I found exciting and deserve some attention."]}),"\n"]}),"\n",(0,i.jsxs)(r.Z,{groupId:"BehavioralTriggerContentBlock",defaultValue:"highlights",values:[{label:"Original Code",value:"original"},{label:"Code Highlights",value:"highlights"}],children:[(0,i.jsxs)(o.Z,{value:"original",children:[(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'title="Original Behavioral Trigger Content Block code"',children:'%%[\n Set @data = Concat(\'{"trigger_payload":"\', data, \'"}\')\n Set @mid = memberid\n]%%\n\n\n<script runat="server">\n Platform.Load("Core", "1");\n try {\n var defaults = {\n "link" : "Link",\n "image_link" : "ImageLink",\n "product_code" : "ProductCode",\n "name" : "Name",\n "regular_price" : "RegularPrice",\n "sale_price" : "SalePrice",\n "sku_id" : "SkuID"\n };\n\n // Data from block settings\n var settings = {"fields":{"image_link":"ImageLink","name":"ProductName","description":"Description","regular_price":"RegularPrice","sale_price":"SalePrice"},"maxItems":4,"sortBy":"item_order","sortDirection":"desc","desktopCols":2,"mobileCols":0,"useSalePricing":true};\n var markupFragments = {\n "header" : \'<div class="wrapper" align="center" style="--max-table-width: 600px; --max-column-width: 210px; width: 100%; table-layout: fixed; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #ffffff;"><div class="webkit" style="max-width: 600px; margin: 0 auto;">\x3c!--[if (gte mso 9)|(IE)]><table width="600" align="center"><tr><td><![endif]--\x3e<table class="outer" align="center" style="border-spacing: 0; font-family: sans-serif; color: #333333; margin: 0 auto; width: 100%; max-width: 600px;"><tr><td class="multi-column" style="padding: 0; text-align: center; font-size: 0; padding-top: 10px; padding-bottom: 10px;">\',\n "product" : [\n \'<div class="column" style="--max-table-width: 600px; --max-column-width: 210px; width: 100%; max-width: 210px; display: inline-block; vertical-align: top;"><table width="100%" align="center" style="border-spacing: 0; font-family: sans-serif; color: #333333;"><tr> <td style="padding: 0;">\',\n\'<a href="--product_link--">\',\n\'\x3c!--[if (gte mso 9)|(IE)]>\',\n\'<table width="210" align="center"><tr><td width="210" valign="top">\',\n\'<img src="--image_link--" width="210" alt class="mcbt_image_link" align="center" style="--max-table-width: 600px; --max-column-width: 210px; border: 0; width: 100%; max-width: 210px; height: auto;">\',\n\'</td></tr></table>\',\n\'<div style="display:none;width:0px;max-height:0px;overflow:hidden;mso-hide:all;height:0;font-size:0;max-height:0;line-height:0;margin:0 auto;">\',\n\'<![endif]--\x3e\',\n\'<img src="--image_link--" alt class="mcbt_image_link" style="border: 0; width: 100%; max-width: 210px; height: auto;">\',\n\'\x3c!--[if (gte mso 9)|(IE)]>\',\n\'</div>\',\n\'<![endif]--\x3e\',\n\'</a>\',\n\'</td></tr><tr><td style="padding: 0;"><table class="text_table" align="center" style="border-spacing: 0; font-family: sans-serif; color: #333333; width: 100%; max-width: 210px;"><tr><td class="mcbt_name" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 210px;">--name--</td></tr><tr><td class="mcbt_description" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 210px;">--description--</td></tr><tr><td class="mcbt_regular_price" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 210px;">$--regular_price--</td></tr><tr><td class="mcbt_sale_price" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; color: red; width: 100%; max-width: 210px;">$--sale_price--</td></tr>\',\n\'</table></td></tr><tr></tr></table></div>\'\n ],\n "attributes" : {"image_link":"image_link","product_link":"link","name":"name","description":"description","regular_price":"regular_price","sale_price":"sale_price"},\n "footer" : \'</td></tr></table>\x3c!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]--\x3e</div></div>\',\n "salePricingStyle" : "text-decoration:line-through;"\n };\n var defaultProductMarkup = markupFragments["product"].join("");\n\n // Read data from MC\n var data = Platform.Variable.GetValue("@data");\n var mid = Platform.Variable.GetValue("@mid");\n var event_locale = Platform.Variable.GetValue("@event_locale");\n\n // Build the url\n var protocol = "https";\n var hostname = mid + ".recs.igodigital.com";\n var qs = "?item_count=" + settings["maxItems"] + "&sort_by=" + settings["sortBy"] + "&sort_direction=" + settings["sortDirection"];\n var includes = [];\n for (var key in settings["fields"]) {\n if(defaults[key] == null) {\n includes = includes.concat(settings["fields"][key]);\n }\n }\n if(includes.length > 0) {\n qs += "&include=" + includes.join("|")\n }\n if(event_locale){\n qs += "&locale=" + event_locale\n }\n var url = protocol + "://" + hostname + "/" + mid + "/trigger" + qs;\n\n var result = HTTP.Post(url, "application/json", data, []);\n if (result.StatusCode == 200) {\n var response = Platform.Function.ParseJSON(result.Response[0]);\n\n // Expose fields in response as Ampscript variables\n for(var responseField in response) {\n var value = response[responseField];\n\n if(responseField === "products" || responseField === "current_cart") {\n var prefix = (responseField === "products") ? "@item_" : "@cart_";\n for(var i=0; i<value.length; i++) {\n for(var itemField in value[i]) {\n var name = prefix + itemField + "_" + (i+1);\n var val = value[i][itemField];\n Platform.Variable.SetValue(name, val);\n }\n }\n }\n else if(responseField === "user") {\n var prefix = "@user_";\n for(var userField in value) {\n var name = prefix + userField;\n var val = value[userField];\n Platform.Variable.SetValue(name, val);\n }\n }\n else {\n Platform.Variable.SetValue("@"+responseField, value);\n }\n }\n\n // Use abandoned items or current items?\n var useRecentItems = false;\n if (useRecentItems && response["current_cart"] !== undefined) {\n var products = response["current_cart"];\n if(products.length === 0) {\n Write("User has an empty cart so stop send");\n Platform.Function.RaiseError("Trigger no longer valid - User has an empty cart.", true, "statusCode","3");\n }\n } else {\n var products = response["products"];\n }\n\n // Exit the send if the user made a purchase since the trigger\n if (response["purchased"] === true) {\n Write("User has purchased so stop send");\n Platform.Function.RaiseError("Trigger no longer valid - User has purchased since trigger.", true, "statusCode","3");\n };\n\n // true to use salePricing style, false if not\n var useSalePricing = true;\n\n // Write email contents\n Write(response["tracking_pixel"]);\n Write(markupFragments["header"].replace(\'\\"\', \'"\'));\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n Write(\'<table>\');\n Write(\'<![endif]--\x3e\');\n for (var i=0; i < products.length; i++) {\n var product = products[i];\n var productAttributes = markupFragments["attributes"];\n\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n if(i % 4 === 0) {\n Write(\'<tr>\');\n }\n Write(\'<td width="130px" valign="top">\');\n Write(\'<![endif]--\x3e\');\n\n var productMarkup = defaultProductMarkup;\n if(useSalePricing && product["sale_price"] > 0 && product["sale_price"] < product["regular_price"] && productMarkup.indexOf("regular_price") > 0) {\n var matches = productMarkup.match(\'(class="mcbt_regular_price" style=")(.*?)"\');\n if(matches != null && matches.length > 0) {\n productMarkup = productMarkup.replace(matches[0], matches[1] + matches[2] + \' \' + markupFragments["salePricingStyle"] + \'"\');\n }\n }\n\n for(var markupKey in productAttributes) {\n var productKey = productAttributes[markupKey];\n var pattern = "--" + markupKey + "--";\n var value = product[productKey];\n if (markupKey === "rating") {\n value = Math.round((value / 5) * 98);\n }\n else if (markupKey === "regular_price" || markupKey === "sale_price") {\n var parsed = value.toString().split(".");\n if (parsed.length > 1 && parsed[1].length === 1 && parsed[1] !== "0") {\n value = value.toString() + "0";\n }\n }\n while(productMarkup.indexOf(pattern) > 0) {\n productMarkup = productMarkup.replace(pattern, function(){return value});\n }\n }\n\n Write(productMarkup.replace(\'\\"\', \'"\'));\n\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n Write(\'</td>\');\n if( (i+1) % columnCount === 0 || i === products.length-1) {\n Write(\'</tr>\');\n }\n Write(\'<![endif]--\x3e\');\n }\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n Write(\'</table>\');\n Write(\'<![endif]--\x3e\');\n Write(markupFragments["footer"].replace(\'\\"\', \'"\'));\n }\n else {\n Write("Unable to retrieve product information: statusCode=" + result.StatusCode);\n Platform.Function.RaiseError("Quit send.", true, "statusCode","3");\n }\n } catch(e) {\n Write(e);\n Platform.Function.RaiseError("Quit send.", true, "statusCode","3");\n }\n<\/script>\n'})}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-css",metastring:'title="Original Behavioral Trigger Content Block CSS"',children:' :root {\n --max-table-width: 600px;\n --max-column-width: 210px;\n }\n\n .mcbt_name {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_regular_price {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_sale_price {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_on_sale {\n text-decoration: line-through;\n }\n\n .mcbt_image_link {\n width: 100%;\n max-width: var(--max-column-width);\n height: auto;\n }\n\n table {\n border-spacing: 0;\n font-family: sans-serif;\n color: #333333;\n }\n td {\n padding: 0;\n }\n img {\n border: 0;\n }\n div[style*="margin: 16px 0"] {\n margin:0 !important;\n }\n .wrapper {\n width: 100%;\n table-layout: fixed;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n background-color: #ffffff;\n }\n .webkit {\n max-width: var(--max-table-width);\n margin: 0 auto;\n }\n .outer {\n margin: 0 auto;\n width: 100%;\n max-width: var(--max-table-width);\n }\n .multi-column {\n text-align: center;\n font-size: 0;\n padding-top: 10px;\n padding-bottom: 10px;\n }\n .column {\n width: 100%;\n max-width: var(--max-column-width);\n display: inline-block;\n vertical-align: top;\n }\n .text_table {\n width: 100%;\n max-width: var(--max-column-width);\n }\n table.text_table td {\n width: 100%;\n max-width: var(--max-column-width);\n }\n .star {\n height: var(--star-size);\n }\n .empty-star {\n background-color: black;\n width: var(--star-empty-width);\n }\n .filled-star {\n background-color: #6699cc;\n width: var(--star-filled-width);\n }\n .image-star {\n width: var(--star-size);\n }\n\n .mcbt_description {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_custom1 {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_sku_id {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_num_reviews {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_online_availability {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_product_code {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n'})})]}),(0,i.jsxs)(o.Z,{value:"highlights",children:[(0,i.jsx)(t.h3,{id:"1-ampscript-personalisation",children:"1. AMPScript personalisation"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:"%%[\n Set @data = Concat('{\"trigger_payload\":\"', data, '\"}')\n Set @mid = memberid\n]%%\n"})}),(0,i.jsx)(t.p,{children:"The first four lines of the Behavioral Trigger Content Block code are already interesting. They are using AMPScript, although the rest is in SSJS. It could easily be written in SSJS altogether for more optimised execution."}),(0,i.jsxs)(t.p,{children:["You can also see that they are pulling the behavioural data by using a personalisation string on ",(0,i.jsx)(t.code,{children:"data"})," - the Abandoned Engagement Data Extension column containing encrypted information. If you want to have more control over the source of this information, you can think about making a lookup here. It would allow you to even use multiple Content Blocks in one email (or mix browsed, wishlisted and added to cart items in one block)."]}),(0,i.jsx)(t.h3,{id:"2-trycatch-block",children:"2. Try/Catch block"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:'try {\n // Behavioral Trigger Content Block code\n} catch(e) {\n Write(e);\n Platform.Function.RaiseError("Quit send.", true, "statusCode","3");\n}\n'})}),(0,i.jsxs)(t.p,{children:["The try/catch block is a great idea, but as it has separate scope in SSJS, it means that no SSJS variable from within will be available outside of it. Thankfully the ",(0,i.jsx)(t.a,{href:"#6-response-parsing",children:"other part of the code"})," is sharing the Behavioral Trigger data using AMPScript variables."]}),(0,i.jsx)(t.p,{children:"If you want to access the SSJS ones, you can declare them before the try/catch starts or pull them from the AMPScript."}),(0,i.jsx)(t.h3,{id:"3-settings--markup-fragments",children:"3. Settings & Markup Fragments"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:"var settings = {\n // Content Block settings from UI\n};\nvar markupFragments = {\n // HTML fragments\n};\n"})}),(0,i.jsx)(t.p,{children:"Those two variables store most options that you have selected when configuring the Behavioral Trigger Content Block. You can use them to make configuration impossible in the UI. You can also change the HTML used for the product presentation."}),(0,i.jsxs)(t.p,{children:["Remember, however, that the Behavioral Trigger Content Block use classes visible in the ",(0,i.jsx)(t.code,{children:"markupFragments"})," in the CSS. Changes might break the styling."]}),(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. Learn more ",(0,i.jsx)(t.a,{href:"../../../sites/ideas/marketing-cloud-ideas/#behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",children:"here"}),"."]}),(0,i.jsxs)(t.p,{children:["Fix it by changing ",(0,i.jsx)(t.code,{children:"rem"})," units in ",(0,i.jsx)(t.code,{children:"markupFragments"})," to ",(0,i.jsx)(t.code,{children:"px"})," ones."]})]}),(0,i.jsx)(t.p,{children:"Later there are also two other settings-related lines:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:"var useRecentItems = false;\n// Some code\nvar useSalePricing = true;\n"})}),(0,i.jsx)(t.p,{children:"You can also configure them within the Behavioral Trigger Content Block UI. Respectively, by checking either:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:'"If the subscriber\'s abandoned items have changed since the triggering event, include the updated items" or'}),"\n",(0,i.jsx)(t.li,{children:'"Only show sale price if sale price is > 0"'}),"\n"]}),(0,i.jsxs)(t.p,{children:["Both checkboxes are available in the Product Fields section. The second one, however, is visible only if you add the ",(0,i.jsx)(t.code,{children:"sale_price"})," field."]}),(0,i.jsxs)(t.p,{children:["If you don't enable the ",(0,i.jsx)(t.code,{children:"useRecentItems"}),", the Content Block will take the products initially pushed with ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," Collect.js. If you use it, it will instead take the latest data available that, in some cases, might be either bigger (if your customer added few items) or smaller (if he deleted some or just cleared the whole cart). There is also a block that stops the send if there are no more items in the current cart."]}),(0,i.jsxs)(t.p,{children:["As for ",(0,i.jsx)(t.code,{children:"useSalePricing"}),', it is much less straightforward. What "Only show sale price if sale price is > 0" enabled does is check whether there is sale price and whether it is lower than the regular price and - if yes - it adds strike-through style to the regular price \u2014 end of the story. For anything more attractive, you will need to play with custom CSS and maybe additional SSJS logic.']}),(0,i.jsx)(t.h3,{id:"4-pulling-data",children:"4. Pulling data"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:'var data = Platform.Variable.GetValue("@data");\nvar mid = Platform.Variable.GetValue("@mid");\nvar event_locale = Platform.Variable.GetValue("@event_locale");\n'})}),(0,i.jsx)(t.p,{children:"Two first lines here are pulling data from the AMPScript described in the first highlight. As mentioned, it can be optimised by making the personalisation here and removing AMPScript altogether."}),(0,i.jsxs)(t.p,{children:["More interesting, however, is the third line. You can configure localisation for your products in ",(0,i.jsx)(t.a,{href:"#user-and-profile-attributes",children:"Email Recommendations Configuration"}),", but it is not used by the Behavioral Triggers - officially. Thanks to this little line, you can - even with the built-in standard Content Block - declare the locale source for the Subscriber and set it to ",(0,i.jsx)(t.code,{children:"@event_locale"})," AMPScript variable. Bam, your Behavioral Triggers are now localised."]}),(0,i.jsx)(t.h3,{id:"5-building-the-api-query",children:"5. Building the API query"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:"{16}",children:'var protocol = "https";\nvar hostname = mid + ".recs.igodigital.com";\nvar qs = "?item_count=" + settings["maxItems"] + "&sort_by=" + settings["sortBy"] + "&sort_direction=" + settings["sortDirection"];\nvar includes = [];\nfor (var key in settings["fields"]) {\n if(defaults[key] == null) {\n includes = includes.concat(settings["fields"][key]);\n }\n}\nif(includes.length > 0) {\n qs += "&include=" + includes.join("|")\n}\nif(event_locale){\n qs += "&locale=" + event_locale\n}\nvar url = protocol + "://" + hostname + "/" + mid + "/trigger" + qs;\n'})}),(0,i.jsxs)(t.p,{children:["The above snippet is responsible for building the URL that is used for an ",(0,i.jsx)(t.code,{children:"HTTP.Post"})," API call to Einstein Backend (IgoDigital). You can make a simple addition that will enable you access to ",(0,i.jsx)(t.a,{href:"#user-and-profile-attributes",children:"Einstein Custom Profile Attributes"}),". Must-have if you want to boost engagement with personalisation for new customers."]}),(0,i.jsx)(t.p,{children:"To do so, just before the line highlighted in the snippet above add a new one with:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:'qs += "&user_attributes=CustomProfileAttribute1|CustomProfileAttribute2"\n'})}),(0,i.jsxs)(t.p,{children:["Just change the values after the equal sign to the exact names of your ",(0,i.jsx)(t.a,{href:"#user-and-profile-attributes",children:"Einstein Custom Profile Attributes"})," that you want to have available in your code (separated by ",(0,i.jsx)(t.code,{children:"|"}),")."]}),(0,i.jsx)(t.h3,{id:"6-response-parsing",children:"6. Response parsing"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:'for(var responseField in response) {\n var value = response[responseField];\n\n if(responseField === "products" || responseField === "current_cart") {\n var prefix = (responseField === "products") ? "@item_" : "@cart_";\n for(var i=0; i<value.length; i++) {\n for(var itemField in value[i]) {\n var name = prefix + itemField + "_" + (i+1);\n var val = value[i][itemField];\n Platform.Variable.SetValue(name, val);\n }\n }\n }\n else if(responseField === "user") {\n var prefix = "@user_";\n for(var userField in value) {\n var name = prefix + userField;\n var val = value[userField];\n Platform.Variable.SetValue(name, val);\n }\n }\n else {\n Platform.Variable.SetValue("@"+responseField, value);\n }\n}\n'})}),(0,i.jsx)(t.p,{children:"The code you see above is responsible for reading the response from Einstein Backend (Igodigital). It goes through each element of the response and creates a separate AMPScript variable with an appropriate value."}),(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["For each element of the ",(0,i.jsx)(t.code,{children:"products"})," key, it creates a variable build with ",(0,i.jsx)(t.code,{children:"item_"})," prefix, value name and ",(0,i.jsx)(t.code,{children:"_X"})," suffix, where X is the counter of the item (so 1 for the first item, 2 for the second and so on). It means you can get the first link to the first item by calling the ",(0,i.jsx)(t.code,{children:"@item_link_1"})," variable. To get the name of the second item goes with ",(0,i.jsx)(t.code,{children:"@item_name_2"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:["If the response contains the ",(0,i.jsx)(t.code,{children:"current_cart"})," key (it is available only if the ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," was triggered), it also creates variables for it. The structure is nearly the same - just the prefix changes to ",(0,i.jsx)(t.code,{children:"cart_"}),". The most compelling use case here? You can get the ",(0,i.jsx)(t.code,{children:"price"})," information that you pushed via ",(0,i.jsx)(t.a,{href:"#track-cart",children:"Track Cart"})," (the one unique to a specific cart, not coming from the Product Catalog) by calling ",(0,i.jsx)(t.code,{children:"@cart_amount_1"})," for the first item."]}),"\n",(0,i.jsxs)(t.li,{children:["There is even a system that gets ",(0,i.jsx)(t.a,{href:"#user-and-profile-attributes",children:"Custom Profile Attributes"})," as AMPScript variables! It uses ",(0,i.jsx)(t.code,{children:"user_"})," prefix, so if you want to get, for example, the gender - call ",(0,i.jsx)(t.code,{children:"@user_gender"})," variable."]}),"\n",(0,i.jsxs)(t.li,{children:["All other keys of the response are also created with just their name. So to get information on whether the cart converted, you can call ",(0,i.jsx)(t.code,{children:"@purchased"})," variable."]}),"\n"]}),(0,i.jsxs)(t.p,{children:["To check what is available to you, check example ",(0,i.jsx)(t.a,{href:"#api-responses",children:"API responses"})," coming from Einstein Backend."]}),(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.code,{children:"current_cart"})," key and the ",(0,i.jsx)(t.code,{children:"amount"})," variable is available only for the Abandoned Cart Behavioral Trigger. Wishlist and Browse only contain ",(0,i.jsx)(t.code,{children:"products"})," information coming from the Product Catalog."]}),"\n",(0,i.jsxs)(t.li,{children:["Even though there is already a code that parses ",(0,i.jsx)(t.a,{href:"#user-and-profile-attributes",children:"Custom Profile Attributes"}),", it won't give you anything on the built-in standard Behavioral Trigger Content Block. It won't have the ",(0,i.jsx)(t.code,{children:"user"})," key populated. You must enable each attribute in the ",(0,i.jsx)(t.a,{href:"#5-building-the-api-query",children:"API call"}),"."]}),"\n",(0,i.jsx)(t.li,{children:"If you want to use more than one Abandonment Engagement in one email, you will have to alter the prefixes in this code not to overwrite the AMPScript variables."}),"\n"]})}),(0,i.jsx)(t.p,{children:"Those AMPScript variables are a must if you want to create a Call to Action button that will rebuild the cart in your e-commerce. Remember, however, that it is custom development without any out-of-the-box snippets from Salesforce."}),(0,i.jsxs)(t.p,{children:["The rest of the code is just taking care of the proper display of the information in the email and stopping the send with ",(0,i.jsx)(t.code,{children:"RaiseError"})," if the customer purchased the cart or the API did not respond. It is added to the email using ",(0,i.jsx)(t.code,{children:"%%=treatascontentarea('BT Trigger', @content)=%%"}),"."]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"api-responses",children:"API Responses"}),"\n",(0,i.jsx)(t.p,{children:"To fully leverage the Behavioral Trigger Content Block's customisation options, you can check the sample responses from Einstein Backend (IgoDigital) available below. They will help you know what AMPScript variables can be available after the Content Block."}),"\n",(0,i.jsxs)(r.Z,{groupId:"BehavioralTriggerResponse",defaultValue:"cart",values:[{label:"Abandoned Cart",value:"cart"},{label:"Abandoned Wishlist",value:"wishlist"},{label:"Abandoned Browse",value:"browse"}],children:[(0,i.jsxs)(o.Z,{value:"cart",children:[(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'{\n "products": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n }\n ],\n "current_cart": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n }\n ],\n "same_products": "Y",\n "user": {\n "gender": "Male"\n },\n "purchased": false,\n "abandoned_items": "SKU2|SKU1",\n "tracking_pixel": " "\n}\n'})}),(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["You can see that there is ",(0,i.jsx)(t.code,{children:'"gender"'})," data in the ",(0,i.jsx)(t.code,{children:'"user"'})," key in the example above. You will see information here only if you ",(0,i.jsx)(t.a,{href:"#5-building-the-api-query",children:"alter your API call"}),". Otherwise, it will be empty."]}),"\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.code,{children:"amount"})," key is available in both ",(0,i.jsx)(t.code,{children:"products"})," and ",(0,i.jsx)(t.code,{children:"current_cart"})," keys, but it is in a string format. Other prices (",(0,i.jsx)(t.code,{children:"regular_price"})," and ",(0,i.jsx)(t.code,{children:"sale_price"}),") are integers."]}),"\n",(0,i.jsxs)(t.li,{children:["In ",(0,i.jsx)(t.code,{children:"same_products"}),", you will have information (",(0,i.jsx)(t.code,{children:'"Y"'}),"/",(0,i.jsx)(t.code,{children:'"N"'}),") whether the Cart content changed between the moment you pushed this data and the API call."]}),"\n"]})})]}),(0,i.jsxs)(o.Z,{value:"wishlist",children:[(0,i.jsx)(t.p,{children:"Response structure is the same as for Abandoned Browse."}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'{\n "products": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n }\n ],\n "user": {},\n "purchased": false,\n "abandoned_items": "SKU2|SKU1",\n "tracking_pixel": " "\n}\n'})})]}),(0,i.jsxs)(o.Z,{value:"browse",children:[(0,i.jsx)(t.p,{children:"Response structure is the same as for Abandoned Wishlist."}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'{\n "products": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n }\n ],\n "user": {},\n "purchased": false,\n "abandoned_items": "SKU2|SKU1",\n "tracking_pixel": " "\n}\n'})})]})]}),"\n",(0,i.jsx)(t.h2,{id:"debugging-behavioral-triggers",children:"Debugging Behavioral Triggers"}),"\n",(0,i.jsx)(t.p,{children:"There are three critical steps of Behavioral Trigger implementation when you might need to debug your solution. As you will be merging multiple systems and working on time-sensitive data using a new feature, look behind the curtain will be crucial. Thankfully, there are few options that we can use."}),"\n",(0,i.jsx)(t.h3,{id:"debugging-collectjs",children:"Debugging Collect.js"}),"\n",(0,i.jsxs)(t.p,{children:["The first thing to check is your frontend Collect.js implementation. To quickly review whether Collect.js is available on your website, open Developer Tools in your browser and go to the Console tab. In there, write ",(0,i.jsx)(t.code,{children:"_etmc"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["If you see ",(0,i.jsx)(t.code,{children:"ReferenceError: _etmc is not defined"}),", it means that the script is not available. Ensure that you are checking a page that is supposed to have Behavioral Triggers implemented and that the script is added correctly."]}),"\n",(0,i.jsx)(t.p,{children:"If the script is implemented, you will see an Object containing over a dozen of keys. Many of which are the functions that pass the data from your website to IgoDigital."}),"\n",(0,i.jsxs)(t.p,{children:["Now you can leverage its power by writing in the console ",(0,i.jsx)(t.code,{children:"_etmc.debug = true"})," to enable debugging mode of Collect.js. Once set, it will log every change applied to the dataLayer. Make a tracked action - like adding a product to a cart - to see it work."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Example data logged after enabling debug and adding product to the cart"',children:'{\n "cart": [\n {\n "item": "2020572",\n "unique_id": "2020572AEUAEL",\n "name": "Women\u2019s Red Box Pullover Hoodie",\n "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html",\n "price": 50,\n "sale_price": 50,\n "item_type": "product"\n }\n ],\n "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"\n}\n'})}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["You can check how Collect.js works by reviewing its contents. To do this, go to the link contained in your base Collect code. It should be: ",(0,i.jsx)(t.code,{children:"http://YOUR_MID.collect.igodigital.com/collect.js"}),"."]})}),"\n",(0,i.jsxs)(t.p,{children:["Another option to observe what Collect.js is sending to Einstein IgoDigital backend is to go to Network tab of the Developer Tools and look for calls made to ",(0,i.jsx)(t.code,{children:"igodigital.com"})," address. You will see the above data in form of API request payload:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'https://stack7.collect.igodigital.com/c2/northerntrailoutfitters/track_cart?payload={"cart":[{"item":"2020572","unique_id":"2020572AEUAEL","name":"Women\u2019s Red Box Pullover Hoodie","url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html","price":50,"sale_price":50,"item_type":"product"}],"url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"}\n'})}),"\n",(0,i.jsx)(t.p,{children:"Using either of those two tools will allow you to make sure that:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"You have correctly implemented the Collect.js script."}),"\n",(0,i.jsx)(t.li,{children:"It is correctly assigned to the website events you want to track."}),"\n",(0,i.jsx)(t.li,{children:"It captures necessary information, like price, name of the product, id."}),"\n",(0,i.jsx)(t.li,{children:"It passes the correctly structured JSON with this data to IgoDigital."}),"\n",(0,i.jsx)(t.li,{children:"You receive status 200 on the API call in the Network tab."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Once all of the above is validated, the correct data should be available to Salesforce Marketing Cloud Einstein and Behavioral Triggers."}),"\n",(0,i.jsx)(t.h3,{id:"debugging-data-flow",children:"Debugging Data Flow"}),"\n",(0,i.jsx)(t.p,{children:"Now it's time to check whether the data is coming through to your Salesforce Marketing Cloud."}),"\n",(0,i.jsx)(t.p,{children:"There are few things to check:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Go to Journey Builder \xbb Behavioral Triggers and check whether there is a required Trigger Type available with ",(0,i.jsx)(t.code,{children:"Active"})," status."]}),"\n",(0,i.jsxs)(t.li,{children:["Go to the Status tab and check whether the Status next to Collect Tracking Code Type is ",(0,i.jsx)(t.code,{children:"Ok"}),". Don't worry about the numbers in Collected Today - those are frequently not aligned with reality."]}),"\n",(0,i.jsxs)(t.li,{children:["Go to Audience Builder \xbb Contact Builder \xbb Data Extensions and in the main local folder look for ",(0,i.jsx)(t.code,{children:"IGO_PRODUCTS"})," and ",(0,i.jsx)(t.code,{children:"IGO_PROFILES"})," Data Extensions. You should see the captured users and products details. It validates that the data is flowing through Collect.js."]}),"\n",(0,i.jsxs)(t.li,{children:["Finally, it's time to check the Data Extension related to the Behavioral Trigger Type you have activated. It should be in the same main local folder, named ",(0,i.jsx)(t.code,{children:"abandoned_TYPE_01234"})," (with ",(0,i.jsx)(t.code,{children:"TYPE"})," being ",(0,i.jsx)(t.code,{children:"wishlist"}),", ",(0,i.jsx)(t.code,{children:"cart"})," or ",(0,i.jsx)(t.code,{children:"browse"})," depending on what you enabled)."]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Remember that the Behavioral Trigger data will be delayed by the amount of time ",(0,i.jsx)(t.a,{href:"#behavioral-triggers-configuration",children:"configured"})," during the setup (between 15 minutes and 3 hours). For debugging purposes, the shorter, the better."]}),"\n",(0,i.jsx)(t.p,{children:"If you do not see data in the above places - the most probable cause is Collect.js script implementation. Go to the previous debugging step and check whether everything is set up correctly. If you are confident that all is good and after waiting the required amount of time, contact Salesforce Support for help."}),"\n",(0,i.jsx)(t.h3,{id:"debugging-bt-content-block",children:"Debugging BT Content Block"}),"\n",(0,i.jsxs)(t.p,{children:["Once you complete the above steps, it's time to play with ",(0,i.jsx)(t.a,{href:"#behavioral-trigger-content-block",children:"Behavioral Trigger Content Block"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"The easiest way to check whether everything works fine is by adding the default one and checking whether the data makes sense. The hard part starts when there is an issue with the outcome (incorrect data, missing data or just no preview)."}),"\n",(0,i.jsx)(t.p,{children:"I use a simple script to find what might be the source of the issue:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:"<script runat=\"server\">\n\n Platform.Load('Core', '1');\n\n try {\n var defaults = {\n 'link' : 'Link',\n 'image_link' : 'ImageLink',\n 'product_code' : 'ProductCode',\n 'name' : 'Name',\n 'regular_price' : 'RegularPrice',\n 'sale_price' : 'SalePrice',\n 'sku_id' : 'SkuID'\n };\n\n // Data from Marketing Cloud\n var data = Platform.Variable.GetValue('@data');\n var mid = Platform.Variable.GetValue('@mid');\n var subKey = Attribute.GetValue('_subscriberkey');\n var email = Attribute.GetValue('emailaddr');\n\n // Data from block settings\n var settings = {'fields':{'image_link':'ImageLink','name':'ProductName','regular_price':'RegularPrice','quantity':'quantity'},'maxItems':3,'sortBy':'item_order','sortDirection':'desc','desktopCols':1,'mobileCols':0,'useSalePricing':false};\n\n // Build the url\n var protocol = 'https';\n var hostname = mid + '.recs.igodigital.com';\n var qs = '?item_count=' + settings['maxItems'] + '&sort_by=' + settings['sortBy'] + '&sort_direction=' + settings['sortDirection'] + '&user_attributes=gender';\n var includes = [];\n for (var key in settings['fields']) {\n if (defaults[key] == null) {\n includes = includes.concat(settings['fields'][key]);\n }\n }\n if (includes.length > 0) {\n qs += '&include=' + includes.join('|')\n }\n var url = protocol + '://' + hostname + '/' + mid + '/trigger' + qs;\n\n // Call IdoDigital Backend\n var result = HTTP.Post(url, 'application/json', data, []);\n if (result.StatusCode == 200) {\n var response = Platform.Function.ParseJSON(result.Response[0]);\n }\n\n // Print it in the Email\n Write('Your Subscriber Key: ' + subKey + '<br>')\n Write('Your Email: ' + email + '<br>')\n Write('Your Data: ' + data + '<br>')\n Write('Your Items: ' + Stringify(response) + '<br>');\n\n } catch(e) {\n Write(e);\n Platform.Function.RaiseError('Quit send.', true, 'statusCode','3');\n }\n<\/script>\n"})}),"\n",(0,i.jsxs)(t.p,{children:["It is a very basic script but helps with finding the source of an issue. As you can see, a lot of it is just a copy-paste of the original ",(0,i.jsx)(t.a,{href:"#behavioral-trigger-content-block",children:"Behavioral Trigger Content Block"}),". But instead of displaying a beautiful abandoned cart message, it will show you Subscriber Key, Email Address, raw data that is being shot to IdoDigital Backend and the response from it."]}),"\n",(0,i.jsx)(t.p,{children:"Using that information, you can validate whether the raw data, email address and subscriber key belong to the same Contact and whether the response is aligned with what you were pushing during your testing on the website."}),"\n",(0,i.jsx)(t.p,{children:"If there is anything wrong with that information, check whether you have a correct Collect.js implementation, whether it captures the accurate product information and assigns it to the right Contact data."}),"\n",(0,i.jsx)(t.p,{children:"If the response is correct, but there are still some issues with what the Behavioral Trigger Content Block displays - check Content Block settings. If something is still off - welcome to the new adventure - a Custom Behavioral Trigger Content Block creation."})]})}function m(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},425:(e,t,n)=>{n.d(t,{Z:()=>o});n(7294);var i=n(512);const a={tabItem:"tabItem_Ymn6"};var r=n(5893);function o(e){let{children:t,hidden:n,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(a.tabItem,o),hidden:n,children:t})}},3992:(e,t,n)=>{n.d(t,{Z:()=>w});var i=n(7294),a=n(512),r=n(2957),o=n(6550),s=n(1270),l=n(5238),c=n(3609),d=n(2560);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:i,default:a}}=e;return{value:t,label:n,attributes:i,default:a}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function g(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const a=(0,o.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=u(e),[o,l]=(0,i.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!g({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const i=n.find((e=>e.default))??n[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:t,tabValues:r}))),[c,h]=p({queryString:n,groupId:a}),[m,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,d.Nk)(n);return[a,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),b=(()=>{const e=c??m;return g({value:e,tabValues:r})?e:null})();(0,s.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!g({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),f(e)}),[h,f,r]),tabValues:r}}var f=n(1048);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(5893);function v(e){let{className:t,block:n,selectedValue:i,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),a=s[n].value;a!==i&&(c(t),o(a))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":n},t),children:s.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,ref:e=>l.push(e),onKeyDown:h,onClick:d,...r,className:(0,a.Z)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":i===t}),children:n??t},t)}))})}function y(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function j(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,a.Z)("tabs-container",b.tabList),children:[(0,x.jsx)(v,{...e,...t}),(0,x.jsx)(y,{...e,...t})]})}function w(e){const t=(0,f.Z)();return(0,x.jsx)(j,{...e,children:h(e.children)},String(t))}},7271:(e,t,n)=>{n.d(t,{V:()=>r,z:()=>a});n(7294);var i=n(5893);const a=e=>{let{link:t,text:n,newTab:a=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:a?"_blank":"_self",children:n})})},r=e=>{let{linkLeft:t,textLeft:n,newTabLeft:a=!1,linkRight:r,textRight:o,newTabRight:s=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{class:"col col--12",children:[(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:a?"_blank":"_self",children:n}),(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:r,target:s?"_blank":"_self",children:o})]})})}},1872:(e,t,n)=>{n.d(t,{m:()=>r});n(7294);const i="leadText_qzwo";var a=n(5893);const r=e=>{let{content:t}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var i=n(7294);const a={},r=i.createContext(a);function o(e){const t=i.useContext(r);return i.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(a):e.components||a:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3365a9e9.7010b386.js b/assets/js/3365a9e9.7010b386.js deleted file mode 100644 index b32d5d0b5..000000000 --- a/assets/js/3365a9e9.7010b386.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8645],{4137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,i=function(e,t){if(null==e)return{};var a,n,i={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=u(a),h=i,m=d["".concat(s,".").concat(h)]||d[h]||p[h]||r;return a?n.createElement(m,o(o({ref:t},c),{},{components:a})):n.createElement(m,o({ref:t},c))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:i,o[1]=l;for(var u=2;u<r;u++)o[u]=a[u];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"},425:(e,t,a)=>{a.d(t,{Z:()=>o});var n=a(7294),i=a(6010);const r={tabItem:"tabItem_Ymn6"};function o(e){let{children:t,hidden:a,className:o}=e;return n.createElement("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,o),hidden:a},t)}},3992:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),i=a(7294),r=a(6010),o=a(2957),l=a(6550),s=a(5238),u=a(3609),c=a(2560);function d(e){return function(e){return i.Children.map(e,(e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}function p(e){const{values:t,children:a}=e;return(0,i.useMemo)((()=>{const e=t??d(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function h(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const n=(0,l.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,s._X)(r),(0,i.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})}),[r,n])]}function g(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,r=p(e),[o,l]=(0,i.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!h({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[s,u]=m({queryString:a,groupId:n}),[d,g]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,r]=(0,c.Nk)(a);return[n,(0,i.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:n}),k=(()=>{const e=s??d;return h({value:e,tabValues:r})?e:null})();(0,i.useLayoutEffect)((()=>{k&&l(k)}),[k]);return{selectedValue:o,selectValue:(0,i.useCallback)((e=>{if(!h({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),g(e)}),[u,g,r]),tabValues:r}}var k=a(1048);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:t,block:a,selectedValue:l,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),p=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==l&&(d(t),s(n))},h=e=>{let t=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return i.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:o}=e;return i.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>c.push(e),onKeyDown:h,onClick:p},o,{className:(0,r.Z)("tabs__item",f.tabItem,o?.className,{"tabs__item--active":l===t})}),a??t)})))}function y(e){let{lazy:t,children:a,selectedValue:n}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return i.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function v(e){const t=g(e);return i.createElement("div",{className:(0,r.Z)("tabs-container",f.tabList)},i.createElement(b,(0,n.Z)({},e,t)),i.createElement(y,(0,n.Z)({},e,t)))}function w(e){const t=(0,k.Z)();return i.createElement(v,(0,n.Z)({key:String(t)},e))}},7271:(e,t,a)=>{a.d(t,{V:()=>r,z:()=>i});var n=a(7294);const i=e=>{let{link:t,text:a,newTab:i=!1}=e;return n.createElement(n.Fragment,null,n.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:i?"_blank":"_self"},a))},r=e=>{let{linkLeft:t,textLeft:a,newTabLeft:i=!1,linkRight:r,textRight:o,newTabRight:l=!1}=e;return n.createElement(n.Fragment,null,n.createElement("div",{class:"col col--12"},n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:i?"_blank":"_self"},a),n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:r,target:l?"_blank":"_self"},o)))}},1872:(e,t,a)=>{a.d(t,{m:()=>r});var n=a(7294);const i="leadText_qzwo",r=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:i},t))}},3005:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>b,frontMatter:()=>u,metadata:()=>d,toc:()=>h});var n=a(7462),i=(a(7294),a(4137)),r=a(3992),o=a(425),l=a(1872),s=a(7271);const u={id:"sfmc-behavioral-triggers",title:"SFMC Behavioral Triggers",sidebar_label:"Behavioral Triggers",description:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",image:"img/og/og-image-sfmc-behavioral-triggers.png",tags:["Marketing Cloud","Configuration","Email","Journey","Personalisation","Behavioral Triggers","Einstein"]},c=void 0,d={unversionedId:"config/sfmc-behavioral-triggers",id:"config/sfmc-behavioral-triggers",title:"SFMC Behavioral Triggers",description:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",source:"@site/docs/config/sfmc-behavioral-triggers.mdx",sourceDirName:"config",slug:"/config/sfmc-behavioral-triggers",permalink:"/docs/config/sfmc-behavioral-triggers",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-behavioral-triggers.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Email",permalink:"/docs/tags/email"},{label:"Journey",permalink:"/docs/tags/journey"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Behavioral Triggers",permalink:"/docs/tags/behavioral-triggers"},{label:"Einstein",permalink:"/docs/tags/einstein"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1701805081,formattedLastUpdatedAt:"Dec 5, 2023",frontMatter:{id:"sfmc-behavioral-triggers",title:"SFMC Behavioral Triggers",sidebar_label:"Behavioral Triggers",description:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",image:"img/og/og-image-sfmc-behavioral-triggers.png",tags:["Marketing Cloud","Configuration","Email","Journey","Personalisation","Behavioral Triggers","Einstein"]},sidebar:"docs",previous:{title:"Enhanced Send Log",permalink:"/docs/config/sfmc-enhanced-send-log"},next:{title:"AppExchange Solutions",permalink:"/docs/config/sfmc-appexchange-solutions"}},p={},h=[{value:"Marketing Cloud Behavioral Triggers",id:"marketing-cloud-behavioral-triggers",level:2},{value:"Behavioral Triggers Pre-Work",id:"behavioral-triggers-pre-work",level:3},{value:"How the Behavioral Triggers work",id:"how-the-behavioral-triggers-work",level:3},{value:"Marketing Cloud Configuration",id:"marketing-cloud-configuration",level:2},{value:"Email Recommendations Configuration",id:"email-recommendations-configuration",level:3},{value:"Catalog and Product Attributes",id:"catalog-and-product-attributes",level:4},{value:"User and Profile Attributes",id:"user-and-profile-attributes",level:4},{value:"Activity Tracking",id:"activity-tracking",level:4},{value:"Initial Catalog Upload",id:"initial-catalog-upload",level:4},{value:"Einstein Data Extension",id:"einstein-data-extension",level:4},{value:"Behavioral Triggers Configuration",id:"behavioral-triggers-configuration",level:3},{value:"Collect.js",id:"collectjs",level:2},{value:"Collect Code Script",id:"collect-code-script",level:3},{value:"Set Org ID",id:"set-org-id",level:3},{value:"Set User Info",id:"set-user-info",level:3},{value:"Catalog Update Streaming",id:"catalog-update-streaming",level:3},{value:"Track Page View",id:"track-page-view",level:3},{value:"Track Wishlist",id:"track-wishlist",level:3},{value:"Track Cart",id:"track-cart",level:3},{value:"Track Purchase",id:"track-purchase",level:3},{value:"Do Not Track",id:"do-not-track",level:3},{value:"More details on Collect.js",id:"more-details-on-collectjs",level:3},{value:"Behavioral Trigger Content Block",id:"behavioral-trigger-content-block",level:2},{value:"1. AMPScript personalisation",id:"1-ampscript-personalisation",level:3},{value:"2. Try/Catch block",id:"2-trycatch-block",level:3},{value:"3. Settings & Markup Fragments",id:"3-settings--markup-fragments",level:3},{value:"4. Pulling data",id:"4-pulling-data",level:3},{value:"5. Building the API query",id:"5-building-the-api-query",level:3},{value:"6. Response parsing",id:"6-response-parsing",level:3},{value:"API Responses",id:"api-responses",level:3},{value:"Debugging Behavioral Triggers",id:"debugging-behavioral-triggers",level:2},{value:"Debugging Collect.js",id:"debugging-collectjs",level:3},{value:"Debugging Data Flow",id:"debugging-data-flow",level:3},{value:"Debugging BT Content Block",id:"debugging-bt-content-block",level:3}],m=(g="Button",function(e){return console.warn("Component "+g+" was not imported, exported, or provided by MDXProvider as global scope"),(0,i.kt)("div",e)});var g;const k={toc:h},f="wrapper";function b(e){let{components:t,...a}=e;return(0,i.kt)(f,(0,n.Z)({},k,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(l.m,{content:"Win-back your e-commerce customers with SFMC Behavioral Triggers.",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"marketing-cloud-behavioral-triggers"},"Marketing Cloud Behavioral Triggers"),(0,i.kt)("p",null,"Behavioral Triggers are a solution for smoothly moving abandoned engagement data from your e-commerce to Salesforce Marketing Cloud. They enable powerful win-back communication you can create with minimal technical knowledge in express time."),(0,i.kt)("p",null,"Currently, there are three scenarios available:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Abandoned Cart"),(0,i.kt)("li",{parentName:"ol"},"Abandoned Browse"),(0,i.kt)("li",{parentName:"ol"},"Abandoned Wishlist")),(0,i.kt)("p",null,"In each case, what Behavioral Triggers does is push relevant data (items left in the cart, browsed without conversion or added to wishlist) to the Einstein Backend and - after configured time - to Marketing Cloud Data Extension."),(0,i.kt)("p",null,"You can then leverage this data extension as both Journey Entry and a source of personalisation using built-in Behavioral Trigger Content Block. The latter allows you to use clean UI to configure dynamic content using the obtained engagement data."),(0,i.kt)("h3",{id:"behavioral-triggers-pre-work"},"Behavioral Triggers Pre-Work"),(0,i.kt)("p",null,"Before you use the Behavioral Triggers, be sure to fulfil pre-requisites:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"As Behavioral Triggers are extending the ",(0,i.kt)("strong",{parentName:"li"},"Einstein Recommendations"),", ",(0,i.kt)("strong",{parentName:"li"},"get a license and ",(0,i.kt)("a",{parentName:"strong",href:"#email-recommendations-configuration"},"enable"))," it in your Business Unit."),(0,i.kt)("li",{parentName:"ol"},"Many data leveraged by Triggers is coming from the ",(0,i.kt)("strong",{parentName:"li"},"Product Catalog"),", so be sure to ",(0,i.kt)("strong",{parentName:"li"},(0,i.kt)("a",{parentName:"strong",href:"#initial-catalog-upload"},"configure"))," it before capturing the events."),(0,i.kt)("li",{parentName:"ol"},"Behavioural data is saved only for records that have Einstein Profile (IGO_PROFILE), so you need to ",(0,i.kt)("strong",{parentName:"li"},"enable Einstein Data Extensions"),"."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Implement the ",(0,i.kt)("a",{parentName:"strong",href:"#collectjs"},"Collect.js"))," script on your e-commerce to capture session and engagement data."),(0,i.kt)("li",{parentName:"ol"},"Finally, ",(0,i.kt)("strong",{parentName:"li"},"configure Behavioral Triggers")," to bring relevant data to Marketing Cloud Data Extensions.")),(0,i.kt)("p",null,"As you can see, if you already use Einstein Recommendations, most of the necessary work is already done, and full implementation should take you just a few minutes. In such a case, you will only need to update Collect.js and configure the Behavioral Triggers slightly."),(0,i.kt)("h3",{id:"how-the-behavioral-triggers-work"},"How the Behavioral Triggers work"),(0,i.kt)("p",null,"Behavioral Triggers seems to be easy to implement, but a lot is going in the backend. It is good to understand its basics, as it might help a lot when triaging a problem or customising the solution."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"A customer enters your e-commerce site - you trigger first ",(0,i.kt)("a",{parentName:"li",href:"#collectjs"},"Collect.js")," scripts to capture the Session and Page View."),(0,i.kt)("li",{parentName:"ol"},"Customer clicks on a product page - you trigger the ",(0,i.kt)("a",{parentName:"li",href:"#page-view-data-layer"},"Page View data layer")," with a link to that product (Abandoned Browse scenario)."),(0,i.kt)("li",{parentName:"ol"},"Customer finds an exciting product and adds it to the wishlist - you trigger the ",(0,i.kt)("a",{parentName:"li",href:"#wishlist-data-layer"},"Wishlist data layer")," (Abandoned Wishlist scenario)."),(0,i.kt)("li",{parentName:"ol"},"A customer decides on one of the products and adds it to the cart - you trigger the ",(0,i.kt)("a",{parentName:"li",href:"#cart-data-layer"},"Cart data layer")," (Abandoned Cart scenario)."),(0,i.kt)("li",{parentName:"ol"},"Customer goes through the purchase process and buys the product - you trigger the ",(0,i.kt)("a",{parentName:"li",href:"#cart-data-layer"},"Cart data layer")," with explicit parameter (This blocks Abandoned Cart from launching communication)."),(0,i.kt)("li",{parentName:"ol"},"Each of the above triggers is sent to Einstein Backend (IgoDigital) that stores the information."),(0,i.kt)("li",{parentName:"ol"},"Marketing Cloud Behavioral Triggers query the Einstein Backend for any events that occurred some time ago - you can configure it in the range from 15 minutes to 3 hours (in 15 minutes increments)."),(0,i.kt)("li",{parentName:"ol"},"If there is a matching event, it checks whether there is any other event that overwrites it. For example, if your customer viewed a product page, and a few minutes later, added this product to the cart, the page view will be ignored. The Behavioral Trigger will wait for the abandoned cart."),(0,i.kt)("li",{parentName:"ol"},"Once there is an event ripe for reengagement, Behavioral Trigger will put it into a system created Data Extension (one per scenario) with three data points: subscriber key, timestamp and encrypted data."),(0,i.kt)("li",{parentName:"ol"},"Now you can use this to add the customer to a Customer Journey."),(0,i.kt)("li",{parentName:"ol"},"In the Journey, you can use an Email with a built-in Behavioral Trigger Content Block. At the moment of sending, this block makes a call to Einstein Backend (IgoDigital) and gets the real-time state of your customer interaction. It validates that he or she did not convert to purchase in the meantime and provides all the details required for creating personalised content in the email presenting the abandoned products.")),(0,i.kt)("p",null,"As you can see, a lot is happening, and it's time to dive deeper into each step to understand it better."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"There are many quirks and tricks - read on to learn how to get more out of Behavioral Triggers.")),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"marketing-cloud-configuration"},"Marketing Cloud Configuration"),(0,i.kt)("p",null,"Before you implement the ",(0,i.kt)("a",{parentName:"p",href:"#collectjs"},"Collect.js"),", you have to make the basic configuration of the Behavioral Triggers."),(0,i.kt)("h3",{id:"email-recommendations-configuration"},"Email Recommendations Configuration"),(0,i.kt)("p",null,"If you haven't yet configured the Einstein Email Recommendations, you will have to do it first. Go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Implementation, and it will guide you through the steps needed."),(0,i.kt)("p",null,"If you already configured it previously, go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Options and make sure you have the additional options related to Behavioral Triggers enabled as described below."),(0,i.kt)("p",null,"For the Behavioral Triggers, be sure to select Product Catalog implementation."),(0,i.kt)("h4",{id:"catalog-and-product-attributes"},"Catalog and Product Attributes"),(0,i.kt)("p",null,"On the next screen, you will be able to select which Standard Product Attributes you want to use, plus have the option to create Custom ones. It is a crucial step, as the data you choose and create here will be the basis for the Behavioral Trigger Content Block available in the win-back email."),(0,i.kt)("p",null,"Just remember that those attributes are global (linked to a product, not to a particular Subscriber), so don't add here parameters that are individual (like PersonalisationString)."),(0,i.kt)("h4",{id:"user-and-profile-attributes"},"User and Profile Attributes"),(0,i.kt)("p",null,"The next step allows you to configure Custom Profile Attributes. It is beneficial for general Einstein purposes, but it is also crucial for Behavioral Triggers if you want to personalise your win-back email for unknown (to Marketing Cloud) customers."),(0,i.kt)("p",null,"If this is something you want to do, enable Custom User Profile Attributes and add necessary ones."),(0,i.kt)("p",null,"You can also enable localisation here, which will allow you to present the product name in the user's language."),(0,i.kt)("h4",{id:"activity-tracking"},"Activity Tracking"),(0,i.kt)("p",null,"On this last step before Summary, you configure what you will be tracking. Category View and In-Site Search are nice to have for general Einstein features, but for Behavioral Triggers, be sure to check Cart Activity and Purchase Activity. You will need it for ",(0,i.kt)("a",{parentName:"p",href:"#collectjs"},"Collect.js"),"."),(0,i.kt)("h4",{id:"initial-catalog-upload"},"Initial Catalog Upload"),(0,i.kt)("p",null,"Once you configure the Email Recommendations, it is time to make the first upload of the Catalog. Go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Catalog and click Connect a New Catalog. Select the Product Catalog, import method and format. Pass the column's name that contains Unique ID and tell SFMC whether it is complete or partial Catalog import."),(0,i.kt)("p",null,"Once Marketing Cloud completes the upload, be sure to map the fields from your source to the Standard and Custom Fields available in the Catalog."),(0,i.kt)("h4",{id:"einstein-data-extension"},"Einstein Data Extension"),(0,i.kt)("p",null,"The last step here is to enable Einstein Data Extensions. To do this:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Go to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Status."),(0,i.kt)("li",{parentName:"ol"},"Click on the cog icon in the top right and select Data Extension Settings."),(0,i.kt)("li",{parentName:"ol"},"Enable them with a toggle.")),(0,i.kt)("p",null,"If the toggle is inactive, you need to:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Make sure your Catalog is ",(0,i.kt)("a",{parentName:"li",href:"#initial-catalog-upload"},"uploaded and mapped"),"."),(0,i.kt)("li",{parentName:"ol"},"Make test Collect.js push to initialise Einstein. To start, you can utilise ready-to-use base script:")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="initialise Einstein with basic Collect.js"',title:'"initialise',Einstein:!0,with:!0,basic:!0,'Collect.js"':!0},'<script type="text/javascript" src="MID.collect.igodigital.com/collect.js"><\/script>\n<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "initialise Einstein"}]);\n _etmc.push(["trackPageView"]);\n<\/script>\n')),(0,i.kt)("p",null,"Create a Cloud Page, paste the above snippet in the HTML block - update both ",(0,i.kt)("inlineCode",{parentName:"p"},"MID"),"'s with the Business Unit you implement the Behavioral Triggers on - and publish it. After opening the website, you can delete the Cloud Page - so that it doesn't affect your future Einstein data."),(0,i.kt)("p",null,"You will find details on what is happening in this script in the ",(0,i.kt)("a",{parentName:"p",href:"#collectjs"},"Collect.js")," section below. As for now, you have to wait for the initialisation to happen. It can take a day. To check whether it is ready, try to Enable the Einstein Data Extensions again. During the initialisation, the Status page won't be loading (you will see the circle spinning infinitely)."),(0,i.kt)("h3",{id:"behavioral-triggers-configuration"},"Behavioral Triggers Configuration"),(0,i.kt)("p",null,"Once you configure and enable the Email Recommendations, it is time to set up the Behavioral Triggers themselves. It will be simpler and easier. Head to Journey Builder \xbb Behavioral Triggers."),(0,i.kt)("p",null,"First, click New Trigger in the top right. You can select from the three available abandonment scenarios:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Abandoned Cart"),(0,i.kt)("li",{parentName:"ol"},"Abandoned Browse"),(0,i.kt)("li",{parentName:"ol"},"Abandoned Wishlist")),(0,i.kt)("p",null,"Select the one you want to start with, and you will be able to set suppression rules - one related to multiple triggers and the second to a recent purchase. For initial configuration, I recommend setting both to 0. It will make testing much more manageable. Once you go to production, change those appropriately as per your business requirements."),(0,i.kt)("p",null,"When you confirm the setup, Marketing Cloud creates the system Data Extension to store Behavioral Trigger data (one per scenario)."),(0,i.kt)("p",null,"The only left option is the Session Timeout Limit. You can access it by clicking the cog icon next to the New Trigger button. You can select from a range starting at 15 minutes and going in 15 minutes increments up to 3 hours. Again, for testing purposes, make it the shortest possible and later update based on business needs."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Currently, it is not working at all - it does not save the selected setting, and it always shows 1 hour. Until fixed, you can manage this by going to Einstein \xbb Einstein Overview \xbb Email Recommendations \xbb Admin \xbb Implementation and clicking Advanced Settings on the left pane. There will be a Session Length option with the same range. It is the same setting.")),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"collectjs"},"Collect.js"),(0,i.kt)("p",null,"You have seen the Collect.js script mentioned multiple times here, and it is also the most technical elements of the standard Behavioral Triggers implementation. Time for details."),(0,i.kt)("h3",{id:"collect-code-script"},"Collect Code Script"),(0,i.kt)("p",null,"Before you start building the data layers, you first need to import the code responsible for pushing data to Einstein Backend (IgoDigital). You do this by putting this line on every page:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="Collect Code Script"',title:'"Collect',Code:!0,'Script"':!0},'<script type="text/javascript" src="MID.collect.igodigital.com/collect.js"><\/script>\n')),(0,i.kt)("p",null,"Be sure to change the ",(0,i.kt)("inlineCode",{parentName:"p"},"MID")," in the above URL to the ID of the Business Unit that you want to use for your Behavioral Triggers."),(0,i.kt)("p",null,"Once you have it, you may start building the data layers that will move the information from your e-commerce to Marketing Cloud. For simplicity, I won't be writing the above code in the snippets below."),(0,i.kt)("h3",{id:"set-org-id"},"Set Org ID"),(0,i.kt)("p",null,"The first data layer you need to push contains, again, the MID of the Business Unit. Just as with the ",(0,i.kt)("a",{parentName:"p",href:"#collect-code-script"},"Collect Code Script"),", be sure to change the ",(0,i.kt)("inlineCode",{parentName:"p"},"MID")," to your SFMC BU's actual ID."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{2} title="Set Org ID Data Layer"',"{2}":!0,title:'"Set',Org:!0,ID:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n<\/script>\n')),(0,i.kt)("h3",{id:"set-user-info"},"Set User Info"),(0,i.kt)("p",null,"The second data layer that will be key for sending Behavioral Triggered communication pushes the customer's data. Remember that this layer must be added to your Collect.js before any tracking layer for proper attribution."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{3} title="Set User Info Data Layer"',"{3}":!0,title:'"Set',User:!0,Info:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n<\/script>\n')),(0,i.kt)("p",null,"The base function is pushing your customer's unique identifier (don't be intimidated by the ",(0,i.kt)("inlineCode",{parentName:"p"},"email")," in that code - you do not have to pass the email address there). Depending on your use case, it might be either:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Subscriber Key (if you plan on sending only to contacts known to Marketing Cloud or have an option to generate Subscriber straight from your e-commerce) or"),(0,i.kt)("li",{parentName:"ol"},"Email Address (recommended if you want to push win-back emails to unknown users in your Marketing Cloud and you do not have an option to create them properly.)")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you decide to push an Email Address to communicate with people not yet in the Marketing Cloud, be sure to make them Subscribers. You can easily do it using the classic Export-Transfer-Import Automation on the data stored in the Behavioral Triggers Data Extension. Leverage SQL Activity to copy the needed data to another Data Extension using this query:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Basic Subscriber data preparation"',title:'"Basic',Subscriber:!0,data:!0,'preparation"':!0},"SELECT\n GUID() AS SubscriberKey, // OR: subscriber_key AS SubscriberKey,\n subscriber_key AS EmailAddress\nFROM abandoned_cart_123456789\n")),(0,i.kt)("p",{parentName:"admonition"},"Be sure to update the name of the Behavioral Trigger Data Extension."),(0,i.kt)("p",{parentName:"admonition"},"You can leverage the same automation to trigger the Journey Entry to ensure that all records in the Journey already exist as Subscribers.")),(0,i.kt)("p",null,"You can provide more data in this data layer by adding Custom Einstein Profile Attributes as second parameter:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{5} title="Extended Set User Info Data Layer"',"{5}":!0,title:'"Extended',Set:!0,User:!0,Info:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {\n "email": "UniqueIdentifier",\n "details": {"gender": "male"}\n }]);\n<\/script>\n')),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Remember that the snippet I shared above is just an example. You will probably use different Custom Profile Attributes. To get the snippet based on your configuration, go to Einstein \xbb Email Recommendations \xbb Admin \xbb Implementation.")),(0,i.kt)("p",null,"Be sure to create all those Custom Profile Attributes in your Einstein implementation before pushing it via Collect.js."),(0,i.kt)("h3",{id:"catalog-update-streaming"},"Catalog Update Streaming"),(0,i.kt)("p",null,"There are two options to keep your Einstein Catalog up-to-date. Manual uploads and Catalog Update Streaming."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"With ",(0,i.kt)("a",{parentName:"p",href:"https://help.salesforce.com/articleView?id=sf.mc_rn_april_2021_collect_tracking_code_streaming.htm&type=5"},"April 2021 Marketing Cloud Release")," the Collect.js Streaming Updates will be deprecated. The way forward will be Streaming Updates via API. Read more ",(0,i.kt)("a",{parentName:"p",href:"https://help.salesforce.com/articleView?id=sf.mc_rn_april_2021_collect_tracking_code_streaming.htm&type=5"},"here"),"."),(0,i.kt)("p",{parentName:"admonition"},"As existing implementation will be available for some time still to allow for migration, I'm keeping this section until the end of the grace period.")),(0,i.kt)("p",null,"Manual uploads might be fine if you nearly never update items or their parameters in your e-commerce. For all other use cases, you should be using Catalog Update Streaming Data Layer."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4-16} title="Page View Data Layer"',"{4-16}":!0,title:'"Page',View:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["updateItem", {\n "item_type": "product",\n "item": "ProductCode",\n "name": "ProductName",\n "description": "ProductDescription",\n "url": "ProductURL",\n "unique_id": "ProductSKU",\n "available": "y",\n "image_url": "ProductImage",\n "sale_price": "ProductSalePrice",\n "price": "ProductRegularPrice",\n "release_date": "ProductReleaseDate",\n "custom_attribute": "ProductAttribute"\n }]);\n<\/script>\n')),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Remember that the snippet I shared above is for a fully-fledged Catalog with one sample Custom Attribute. You may use only some of those parameters or utilise multiple custom attributes."),(0,i.kt)("p",{parentName:"admonition"},"You can get the complete list of the parameters you need to use by going to Einstein \xbb Email Recommendations \xbb Admin \xbb Implementation. If you have Streaming Updates enabled (and you should have to use this data layer) below, you will see the entire snippet adapted to your configuration."),(0,i.kt)("p",{parentName:"admonition"},"Be sure to check also the Domain table visible above it - you should add all the domains connected to your Streaming Update, so:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"The domain where the Stream is happening"),(0,i.kt)("li",{parentName:"ol"},"The domain of the Product URL"),(0,i.kt)("li",{parentName:"ol"},"The domain of the Product Image URL")),(0,i.kt)("p",{parentName:"admonition"},"In many cases, all those domains might be the same, but if you are using Content Delivery Network or a different subdomain for the backend, those might differ. If you cannot click ",(0,i.kt)("inlineCode",{parentName:"p"},"Register"),", be sure you pass just the domain - the bolded part of https://",(0,i.kt)("strong",{parentName:"p"},"domain.name"),"/folder/structure?query=string.")),(0,i.kt)("p",null,"With this data layer, you can be sure that the Catalog stored in Marketing Cloud is always up-to-date. It is crucial, as everything in the Behavioral Trigger Content Block uses the Catalog data."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"available")," parameter is essential as it is the best way to make sure the personalisation in the email won't show the product that is no longer available even if it was in the abandoned cart. Of course, this is true for the moment of email send, not the moment of email open."),(0,i.kt)("p",null,"You can either:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Add this data layer to other pushes of Collect.js as shown in the snippet above or"),(0,i.kt)("li",{parentName:"ol"},"Create a separate process on the backend of your e-commerce. It can shoot an update whenever there is a change in the product parameters.")),(0,i.kt)("p",null,"The first approach is straightforward; the second is wise."),(0,i.kt)("admonition",{title:"You Should Know that",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Remember that this data layer updates the Catalog. Even if you push it in the context of a specific subscriber and along the ",(0,i.kt)("a",{parentName:"p",href:"#track-cart"},"Track Cart")," data layer, it will still update the global Catalog for everyone."),(0,i.kt)("p",{parentName:"admonition"},"If your customer has a unique product price (for example, via VIP status or coupon), use the ",(0,i.kt)("a",{parentName:"p",href:"#track-cart"},"Track Cart")," data layer to share this information.")),(0,i.kt)("p",null,"If you are using localisation, you may also pass the translated product name using ",(0,i.kt)("inlineCode",{parentName:"p"},'"locale_pl_name": "PolishProductName"'),". The Behavioral Trigger Content Block can leverage it with a ",(0,i.kt)("a",{parentName:"p",href:"#4-pulling-data"},"trick"),"."),(0,i.kt)("h3",{id:"track-page-view"},"Track Page View"),(0,i.kt)("p",null,"Time for our first real tracking - Page View. The basic data layer pushes just the information about the event:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4} title="Page View Data Layer"',"{4}":!0,title:'"Page',View:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView"]);\n<\/script>\n')),(0,i.kt)("p",null,"However, you can do much more with this data layer by providing additional parameters. The most important for Behavioral Triggers is ",(0,i.kt)("inlineCode",{parentName:"p"},"item"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4} title="Page View Data Layer"',"{4}":!0,title:'"Page',View:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView", {"item": "ProductCode"}]);\n<\/script>\n')),(0,i.kt)("p",null,"Once you swap ",(0,i.kt)("inlineCode",{parentName:"p"},"ProductCode")," for the actual product code matching one of the items in Einstein Product Catalog, you will be able to leverage the first Behavioral Trigger scenario - Abandoned Browse. Once you push this event and the customer does not convert further, this will populate Abandoned Browse Data Extension and allow win-back communication."),(0,i.kt)("p",null,"You can also add other parameters that are not used by the Behavioral Triggers but rather standard Einstein Recommendations - category and search:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{6-7} title="Page View Data Layer"',"{6-7}":!0,title:'"Page',View:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView", {\n "item": "ProductCode",\n "category": "ProductCategory",\n "search": "SearchTerm"\n }]);\n<\/script>\n')),(0,i.kt)("p",null,"You do not have to use all three; you can trigger various ones depending on the page the user is on. The floor is yours."),(0,i.kt)("h3",{id:"track-wishlist"},"Track Wishlist"),(0,i.kt)("p",null,"The second Behavioral Trigger scenario - Abandoned Wishlist - has its own data layer:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4-7} title="Track Cart Data Layer"',"{4-7}":!0,title:'"Track',Cart:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackWishlist", { "wishlist": [\n {"item": "ProductCode", "unique_id": "ProductSKU"},\n {"item": "ProductCode", "unique_id": "ProductSKU"}\n ]}]);\n<\/script>\n')),(0,i.kt)("p",null,"As you can see, not much is configurable here - all of the product data come from the Einstein Catalog, so be sure to have it up to date."),(0,i.kt)("h3",{id:"track-cart"},"Track Cart"),(0,i.kt)("p",null,"The third Behavioral Trigger scenario - Abandoned Cart - also has its own data layer:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4-7} title="Track Cart Data Layer"',"{4-7}":!0,title:'"Track',Cart:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackCart", { "cart": [\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}\n ]}]);\n<\/script>\n')),(0,i.kt)("p",null,"Few things here are important to consider:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"As you can see, there are four possible parameters for each item - ",(0,i.kt)("inlineCode",{parentName:"li"},"item")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"unique_id")," are required and must be available in your Einstein Product Catalog to work. The other two - ",(0,i.kt)("inlineCode",{parentName:"li"},"quantity")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"price")," are optional."),(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"price")," parameter here is different from ",(0,i.kt)("inlineCode",{parentName:"li"},"price")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"sales_price")," available in ",(0,i.kt)("a",{parentName:"li",href:"#catalog-update-streaming"},"Catalog Update"),". The Catalog ones are global - the same for all your customers. The ",(0,i.kt)("inlineCode",{parentName:"li"},"price")," pushed within Track Cart is unique for this customer and might differ from the global ones (think VIP status or a coupon used). It won't update your Einstein Catalog."),(0,i.kt)("li",{parentName:"ol"},"Always push the whole cart. If your customer has more than one item in it - put all of them in this data layer. If a customer deletes an item from the cart - push the data layer without the deleted one. The last version pushed is considered the final state of the cart for personalisation purposes."),(0,i.kt)("li",{parentName:"ol"},"Always be sure to clear the Track Cart data whenever the cart data is no longer needed. If the customer purchased the products, be sure to use the ",(0,i.kt)("a",{parentName:"li",href:"#track-purchase"},"Track Purchase")," data layer. If the customer deleted all the products from their cart, use the Clear Cart parameter:")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4} title="Clear the Track Cart Data Layer"',"{4}":!0,title:'"Clear',the:!0,Track:!0,Cart:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackCart", {"clear_cart": true}]);\n<\/script>\n')),(0,i.kt)("p",null,"Otherwise, your customers might receive win-back communication for products that they already bought."),(0,i.kt)("h3",{id:"track-purchase"},"Track Purchase"),(0,i.kt)("p",null,"Whenever the customer converts, be sure to track this purchase. It is not only crucial for Einstein Recommendations and Discover's ROI calculation. For Behavioral Triggers, it is vital, as it informs that the cart converted. It blocks win-back communication for already purchased products."),(0,i.kt)("p",null,"The basic structure of the Track Purchase data layer is very similar to the ",(0,i.kt)("a",{parentName:"p",href:"#track-cart"},"Track Cart")," one:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{5-8} title="Track Cart Data Layer"',"{5-8}":!0,title:'"Track',Cart:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);\n _etmc.push(["trackPageView", {"item": "ProductCode"}]);\n _etmc.push(["trackConversion", { "cart": [\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},\n {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}\n ]}]);\n<\/script>\n')),(0,i.kt)("h3",{id:"do-not-track"},"Do Not Track"),(0,i.kt)("p",null,"You may suppress all of the configured trackings by using a data layer based on customer decision and local laws."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'{3} title="Do Not Track Data Layer"',"{3}":!0,title:'"Do',Not:!0,Track:!0,Data:!0,'Layer"':!0},'<script type="text/javascript">\n _etmc.push(["setOrgId", "MID"]);\n _etmc.push(["doNotTrack"]);\n<\/script>\n')),(0,i.kt)("h3",{id:"more-details-on-collectjs"},"More details on Collect.js"),(0,i.kt)("p",null,"If you want even more details and implementation considerations related to the Collect.js code used by Behavioral Triggers and Einstein Recommendations, check the ",(0,i.kt)("a",{parentName:"p",href:"https://joernberkefeld.github.io/SFMC-Cookbook/einstein/recommendation/"},"awesome documentation")," by ",(0,i.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/joernberkefeld/"},"J\xf6rn Berkefeld")," and excellent ",(0,i.kt)("a",{parentName:"p",href:"https://resources.docs.salesforce.com/latest/latest/en-us/sfdc/pdf/mc_pb_implementation_guide.pdf"},"PDF guide")," directly from Salesforce."),(0,i.kt)(m,{link:"https://joernberkefeld.github.io/SFMC-Cookbook/einstein/recommendation/",text:"Einstein Documentation",newTab:"true",mdxType:"Button"}),(0,i.kt)(s.V,{linkLeft:"https://joernberkefeld.github.io/SFMC-Cookbook/einstein/recommendation/",textLeft:"J\xf6rn's Cookbook",newTabLeft:"true",linkRight:"https://resources.docs.salesforce.com/latest/latest/en-us/sfdc/pdf/mc_pb_implementation_guide.pdf",textRight:"Salesforce's Guide",newTabRight:"true",mdxType:"ButtonRow"}),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"behavioral-trigger-content-block"},"Behavioral Trigger Content Block"),(0,i.kt)("p",null,"Now you can go forward with Behavioral Triggers. ",(0,i.kt)("a",{parentName:"p",href:"#collectjs"},"Collect.js")," will push the required data to Einstein backend, and after Session Timeout Limit, it will evaluate it against Suppression Rules as per your ",(0,i.kt)("a",{parentName:"p",href:"#Behavioral-triggers-configuration"},"configuration"),". Then, the Behavioral Triggers adds Abandoned Engagement data to the respective ",(0,i.kt)("a",{parentName:"p",href:"#Behavioral-triggers-configuration"},"Data Extension"),". Now it's time to use it."),(0,i.kt)("p",null,"The standard way the leverage this information is to use those abandonment Data Extensions as a Journey Entry Source. The real magic, however, will happen in the email you will be sending in this Journey. And that is thanks to the out-of-the-box Behavioral Trigger Content Block."),(0,i.kt)("p",null,"To check it out, edit email, and on the bottom of the left pane containing all the Content Blocks, you will find the Behavioral Trigger one. Drag and drop it to the email so that you can start configuring it."),(0,i.kt)("p",null,"When you click that block after adding it to the email, you will be able to limit the maximum number of products shown, control the layout with columns, change order and decide which data points should be visible for products."),(0,i.kt)("p",null,"It's easy, it's quick, but there are multiple issues if you want anything a bit more customised for your needs. With the out-of-the-box solution:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"You don't have a straightforward way to control the style of this information. You can only go to the Styling tab of the editor and modify the CSS available there."),(0,i.kt)("li",{parentName:"ol"},"You are limited only to the fields that you ",(0,i.kt)("a",{parentName:"li",href:"#catalog-and-product-attributes"},"configured for the Product Catalog"),". For example, you cannot use the individual price you passed in the ",(0,i.kt)("a",{parentName:"li",href:"#track-cart"},"Track Cart")," data layer. You can vote for it on ",(0,i.kt)("a",{parentName:"li",href:"https://trailblazer.salesforce.com/ideaView?id=0874V0000003lCKQAY"},"IdeaExchange"),"."),(0,i.kt)("li",{parentName:"ol"},"There is no information on how to access the data outside of the Content Block - but you can learn about it ",(0,i.kt)("a",{parentName:"li",href:"#6-response-parsing"},"later in this article"),"."),(0,i.kt)("li",{parentName:"ol"},"You cannot leverage Einstein API's full potential, as the hard-coded request does not have a parameter responsible for pulling the ",(0,i.kt)("a",{parentName:"li",href:"#user-and-profile-attributes"},"Einstein Custom Profile Attributes"),". You can vote for it on ",(0,i.kt)("a",{parentName:"li",href:"https://trailblazer.salesforce.com/ideaView?id=0874V0000003lB7QAI"},"IdeaExchange"),"."),(0,i.kt)("li",{parentName:"ol"},"You cannot use multiple Content Blocks pointing to various Behavioral Trigger scenarios (for example,first focus on the cart and then present the wishlist).")),(0,i.kt)("p",null,"As far as you can fix the first issue with good CSS knowledge, the rest require more work."),(0,i.kt)("p",null,"So what can you do? Configure the Content Block to be as close as possible to what you want, go to Code View of your Email and look for ",(0,i.kt)("inlineCode",{parentName:"p"},"Concat('{\"trigger_payload\":\"', data, '\"}')"),". It starts the code responsible for Behavioral Trigger Content Block."),(0,i.kt)("p",null,"Below you can see two tabs."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"In t ",(0,i.kt)("strong",{parentName:"li"},"Original Code"),", you will find the complete code of the built-in Behavioral Trigger Content Block. Shown configuration displays a product image with name and description plus regular/sale price. The number of items is limited to four in a two-column layout."),(0,i.kt)("li",{parentName:"ol"},"In the ",(0,i.kt)("strong",{parentName:"li"},"Code Highlights")," tab, I focus on some part of the code that I found exciting and deserve some attention.")),(0,i.kt)(r.Z,{groupId:"BehavioralTriggerContentBlock",defaultValue:"highlights",values:[{label:"Original Code",value:"original"},{label:"Code Highlights",value:"highlights"}],mdxType:"Tabs"},(0,i.kt)(o.Z,{value:"original",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="Original Behavioral Trigger Content Block code"',title:'"Original',"":!0,Behavioral:!0,Trigger:!0,Content:!0,Block:!0,'code"':!0},'%%[\n Set @data = Concat(\'{"trigger_payload":"\', data, \'"}\')\n Set @mid = memberid\n]%%\n\n\n<script runat="server">\n Platform.Load("Core", "1");\n try {\n var defaults = {\n "link" : "Link",\n "image_link" : "ImageLink",\n "product_code" : "ProductCode",\n "name" : "Name",\n "regular_price" : "RegularPrice",\n "sale_price" : "SalePrice",\n "sku_id" : "SkuID"\n };\n\n // Data from block settings\n var settings = {"fields":{"image_link":"ImageLink","name":"ProductName","description":"Description","regular_price":"RegularPrice","sale_price":"SalePrice"},"maxItems":4,"sortBy":"item_order","sortDirection":"desc","desktopCols":2,"mobileCols":0,"useSalePricing":true};\n var markupFragments = {\n "header" : \'<div class="wrapper" align="center" style="--max-table-width: 600px; --max-column-width: 210px; width: 100%; table-layout: fixed; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; background-color: #ffffff;"><div class="webkit" style="max-width: 600px; margin: 0 auto;">\x3c!--[if (gte mso 9)|(IE)]><table width="600" align="center"><tr><td><![endif]--\x3e<table class="outer" align="center" style="border-spacing: 0; font-family: sans-serif; color: #333333; margin: 0 auto; width: 100%; max-width: 600px;"><tr><td class="multi-column" style="padding: 0; text-align: center; font-size: 0; padding-top: 10px; padding-bottom: 10px;">\',\n "product" : [\n \'<div class="column" style="--max-table-width: 600px; --max-column-width: 210px; width: 100%; max-width: 210px; display: inline-block; vertical-align: top;"><table width="100%" align="center" style="border-spacing: 0; font-family: sans-serif; color: #333333;"><tr> <td style="padding: 0;">\',\n\'<a href="--product_link--">\',\n\'\x3c!--[if (gte mso 9)|(IE)]>\',\n\'<table width="210" align="center"><tr><td width="210" valign="top">\',\n\'<img src="--image_link--" width="210" alt class="mcbt_image_link" align="center" style="--max-table-width: 600px; --max-column-width: 210px; border: 0; width: 100%; max-width: 210px; height: auto;">\',\n\'</td></tr></table>\',\n\'<div style="display:none;width:0px;max-height:0px;overflow:hidden;mso-hide:all;height:0;font-size:0;max-height:0;line-height:0;margin:0 auto;">\',\n\'<![endif]--\x3e\',\n\'<img src="--image_link--" alt class="mcbt_image_link" style="border: 0; width: 100%; max-width: 210px; height: auto;">\',\n\'\x3c!--[if (gte mso 9)|(IE)]>\',\n\'</div>\',\n\'<![endif]--\x3e\',\n\'</a>\',\n\'</td></tr><tr><td style="padding: 0;"><table class="text_table" align="center" style="border-spacing: 0; font-family: sans-serif; color: #333333; width: 100%; max-width: 210px;"><tr><td class="mcbt_name" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 210px;">--name--</td></tr><tr><td class="mcbt_description" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 210px;">--description--</td></tr><tr><td class="mcbt_regular_price" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 210px;">$--regular_price--</td></tr><tr><td class="mcbt_sale_price" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; color: red; width: 100%; max-width: 210px;">$--sale_price--</td></tr>\',\n\'</table></td></tr><tr></tr></table></div>\'\n ],\n "attributes" : {"image_link":"image_link","product_link":"link","name":"name","description":"description","regular_price":"regular_price","sale_price":"sale_price"},\n "footer" : \'</td></tr></table>\x3c!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]--\x3e</div></div>\',\n "salePricingStyle" : "text-decoration:line-through;"\n };\n var defaultProductMarkup = markupFragments["product"].join("");\n\n // Read data from MC\n var data = Platform.Variable.GetValue("@data");\n var mid = Platform.Variable.GetValue("@mid");\n var event_locale = Platform.Variable.GetValue("@event_locale");\n\n // Build the url\n var protocol = "https";\n var hostname = mid + ".recs.igodigital.com";\n var qs = "?item_count=" + settings["maxItems"] + "&sort_by=" + settings["sortBy"] + "&sort_direction=" + settings["sortDirection"];\n var includes = [];\n for (var key in settings["fields"]) {\n if(defaults[key] == null) {\n includes = includes.concat(settings["fields"][key]);\n }\n }\n if(includes.length > 0) {\n qs += "&include=" + includes.join("|")\n }\n if(event_locale){\n qs += "&locale=" + event_locale\n }\n var url = protocol + "://" + hostname + "/" + mid + "/trigger" + qs;\n\n var result = HTTP.Post(url, "application/json", data, []);\n if (result.StatusCode == 200) {\n var response = Platform.Function.ParseJSON(result.Response[0]);\n\n // Expose fields in response as Ampscript variables\n for(var responseField in response) {\n var value = response[responseField];\n\n if(responseField === "products" || responseField === "current_cart") {\n var prefix = (responseField === "products") ? "@item_" : "@cart_";\n for(var i=0; i<value.length; i++) {\n for(var itemField in value[i]) {\n var name = prefix + itemField + "_" + (i+1);\n var val = value[i][itemField];\n Platform.Variable.SetValue(name, val);\n }\n }\n }\n else if(responseField === "user") {\n var prefix = "@user_";\n for(var userField in value) {\n var name = prefix + userField;\n var val = value[userField];\n Platform.Variable.SetValue(name, val);\n }\n }\n else {\n Platform.Variable.SetValue("@"+responseField, value);\n }\n }\n\n // Use abandoned items or current items?\n var useRecentItems = false;\n if (useRecentItems && response["current_cart"] !== undefined) {\n var products = response["current_cart"];\n if(products.length === 0) {\n Write("User has an empty cart so stop send");\n Platform.Function.RaiseError("Trigger no longer valid - User has an empty cart.", true, "statusCode","3");\n }\n } else {\n var products = response["products"];\n }\n\n // Exit the send if the user made a purchase since the trigger\n if (response["purchased"] === true) {\n Write("User has purchased so stop send");\n Platform.Function.RaiseError("Trigger no longer valid - User has purchased since trigger.", true, "statusCode","3");\n };\n\n // true to use salePricing style, false if not\n var useSalePricing = true;\n\n // Write email contents\n Write(response["tracking_pixel"]);\n Write(markupFragments["header"].replace(\'\\"\', \'"\'));\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n Write(\'<table>\');\n Write(\'<![endif]--\x3e\');\n for (var i=0; i < products.length; i++) {\n var product = products[i];\n var productAttributes = markupFragments["attributes"];\n\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n if(i % 4 === 0) {\n Write(\'<tr>\');\n }\n Write(\'<td width="130px" valign="top">\');\n Write(\'<![endif]--\x3e\');\n\n var productMarkup = defaultProductMarkup;\n if(useSalePricing && product["sale_price"] > 0 && product["sale_price"] < product["regular_price"] && productMarkup.indexOf("regular_price") > 0) {\n var matches = productMarkup.match(\'(class="mcbt_regular_price" style=")(.*?)"\');\n if(matches != null && matches.length > 0) {\n productMarkup = productMarkup.replace(matches[0], matches[1] + matches[2] + \' \' + markupFragments["salePricingStyle"] + \'"\');\n }\n }\n\n for(var markupKey in productAttributes) {\n var productKey = productAttributes[markupKey];\n var pattern = "--" + markupKey + "--";\n var value = product[productKey];\n if (markupKey === "rating") {\n value = Math.round((value / 5) * 98);\n }\n else if (markupKey === "regular_price" || markupKey === "sale_price") {\n var parsed = value.toString().split(".");\n if (parsed.length > 1 && parsed[1].length === 1 && parsed[1] !== "0") {\n value = value.toString() + "0";\n }\n }\n while(productMarkup.indexOf(pattern) > 0) {\n productMarkup = productMarkup.replace(pattern, function(){return value});\n }\n }\n\n Write(productMarkup.replace(\'\\"\', \'"\'));\n\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n Write(\'</td>\');\n if( (i+1) % columnCount === 0 || i === products.length-1) {\n Write(\'</tr>\');\n }\n Write(\'<![endif]--\x3e\');\n }\n Write(\'\x3c!--[if (gte mso 9)|(IE)]>\');\n Write(\'</table>\');\n Write(\'<![endif]--\x3e\');\n Write(markupFragments["footer"].replace(\'\\"\', \'"\'));\n }\n else {\n Write("Unable to retrieve product information: statusCode=" + result.StatusCode);\n Platform.Function.RaiseError("Quit send.", true, "statusCode","3");\n }\n } catch(e) {\n Write(e);\n Platform.Function.RaiseError("Quit send.", true, "statusCode","3");\n }\n<\/script>\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-css",metastring:'title="Original Behavioral Trigger Content Block CSS"',title:'"Original',Behavioral:!0,Trigger:!0,Content:!0,Block:!0,'CSS"':!0},' :root {\n --max-table-width: 600px;\n --max-column-width: 210px;\n }\n\n .mcbt_name {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_regular_price {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_sale_price {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_on_sale {\n text-decoration: line-through;\n }\n\n .mcbt_image_link {\n width: 100%;\n max-width: var(--max-column-width);\n height: auto;\n }\n\n table {\n border-spacing: 0;\n font-family: sans-serif;\n color: #333333;\n }\n td {\n padding: 0;\n }\n img {\n border: 0;\n }\n div[style*="margin: 16px 0"] {\n margin:0 !important;\n }\n .wrapper {\n width: 100%;\n table-layout: fixed;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n background-color: #ffffff;\n }\n .webkit {\n max-width: var(--max-table-width);\n margin: 0 auto;\n }\n .outer {\n margin: 0 auto;\n width: 100%;\n max-width: var(--max-table-width);\n }\n .multi-column {\n text-align: center;\n font-size: 0;\n padding-top: 10px;\n padding-bottom: 10px;\n }\n .column {\n width: 100%;\n max-width: var(--max-column-width);\n display: inline-block;\n vertical-align: top;\n }\n .text_table {\n width: 100%;\n max-width: var(--max-column-width);\n }\n table.text_table td {\n width: 100%;\n max-width: var(--max-column-width);\n }\n .star {\n height: var(--star-size);\n }\n .empty-star {\n background-color: black;\n width: var(--star-empty-width);\n }\n .filled-star {\n background-color: #6699cc;\n width: var(--star-filled-width);\n }\n .image-star {\n width: var(--star-size);\n }\n\n .mcbt_description {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_custom1 {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_sku_id {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_num_reviews {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_online_availability {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n\n .mcbt_product_code {\n font-size: 0.8125rem;\n padding-top: 10px;\n text-align: center;\n }\n'))),(0,i.kt)(o.Z,{value:"highlights",mdxType:"TabItem"},(0,i.kt)("h3",{id:"1-ampscript-personalisation"},"1. AMPScript personalisation"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"%%[\n Set @data = Concat('{\"trigger_payload\":\"', data, '\"}')\n Set @mid = memberid\n]%%\n")),(0,i.kt)("p",null,"The first four lines of the Behavioral Trigger Content Block code are already interesting. They are using AMPScript, although the rest is in SSJS. It could easily be written in SSJS altogether for more optimised execution."),(0,i.kt)("p",null,"You can also see that they are pulling the behavioural data by using a personalisation string on ",(0,i.kt)("inlineCode",{parentName:"p"},"data")," - the Abandoned Engagement Data Extension column containing encrypted information. If you want to have more control over the source of this information, you can think about making a lookup here. It would allow you to even use multiple Content Blocks in one email (or mix browsed, wishlisted and added to cart items in one block)."),(0,i.kt)("h3",{id:"2-trycatch-block"},"2. Try/Catch block"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'try {\n // Behavioral Trigger Content Block code\n} catch(e) {\n Write(e);\n Platform.Function.RaiseError("Quit send.", true, "statusCode","3");\n}\n')),(0,i.kt)("p",null,"The try/catch block is a great idea, but as it has separate scope in SSJS, it means that no SSJS variable from within will be available outside of it. Thankfully the ",(0,i.kt)("a",{parentName:"p",href:"#6-response-parsing"},"other part of the code")," is sharing the Behavioral Trigger data using AMPScript variables."),(0,i.kt)("p",null,"If you want to access the SSJS ones, you can declare them before the try/catch starts or pull them from the AMPScript."),(0,i.kt)("h3",{id:"3-settings--markup-fragments"},"3. Settings & Markup Fragments"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"var settings = {\n // Content Block settings from UI\n};\nvar markupFragments = {\n // HTML fragments\n};\n")),(0,i.kt)("p",null,"Those two variables store most options that you have selected when configuring the Behavioral Trigger Content Block. You can use them to make configuration impossible in the UI. You can also change the HTML used for the product presentation."),(0,i.kt)("p",null,"Remember, however, that the Behavioral Trigger Content Block use classes visible in the ",(0,i.kt)("inlineCode",{parentName:"p"},"markupFragments")," in the CSS. Changes might break the styling."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. Learn more ",(0,i.kt)("a",{parentName:"p",href:"../../../sites/ideas/marketing-cloud-ideas/#behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook"},"here"),"."),(0,i.kt)("p",{parentName:"admonition"},"Fix it by changing ",(0,i.kt)("inlineCode",{parentName:"p"},"rem")," units in ",(0,i.kt)("inlineCode",{parentName:"p"},"markupFragments")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"px")," ones.")),(0,i.kt)("p",null,"Later there are also two other settings-related lines:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"var useRecentItems = false;\n// Some code\nvar useSalePricing = true;\n")),(0,i.kt)("p",null,"You can also configure them within the Behavioral Trigger Content Block UI. Respectively, by checking either:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'"If the subscriber\'s abandoned items have changed since the triggering event, include the updated items" or'),(0,i.kt)("li",{parentName:"ul"},'"Only show sale price if sale price is > 0"')),(0,i.kt)("p",null,"Both checkboxes are available in the Product Fields section. The second one, however, is visible only if you add the ",(0,i.kt)("inlineCode",{parentName:"p"},"sale_price")," field."),(0,i.kt)("p",null,"If you don't enable the ",(0,i.kt)("inlineCode",{parentName:"p"},"useRecentItems"),", the Content Block will take the products initially pushed with ",(0,i.kt)("a",{parentName:"p",href:"#track-cart"},"Track Cart")," Collect.js. If you use it, it will instead take the latest data available that, in some cases, might be either bigger (if your customer added few items) or smaller (if he deleted some or just cleared the whole cart). There is also a block that stops the send if there are no more items in the current cart."),(0,i.kt)("p",null,"As for ",(0,i.kt)("inlineCode",{parentName:"p"},"useSalePricing"),', it is much less straightforward. What "Only show sale price if sale price is > 0" enabled does is check whether there is sale price and whether it is lower than the regular price and - if yes - it adds strike-through style to the regular price \u2014 end of the story. For anything more attractive, you will need to play with custom CSS and maybe additional SSJS logic.'),(0,i.kt)("h3",{id:"4-pulling-data"},"4. Pulling data"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'var data = Platform.Variable.GetValue("@data");\nvar mid = Platform.Variable.GetValue("@mid");\nvar event_locale = Platform.Variable.GetValue("@event_locale");\n')),(0,i.kt)("p",null,"Two first lines here are pulling data from the AMPScript described in the first highlight. As mentioned, it can be optimised by making the personalisation here and removing AMPScript altogether."),(0,i.kt)("p",null,"More interesting, however, is the third line. You can configure localisation for your products in ",(0,i.kt)("a",{parentName:"p",href:"#user-and-profile-attributes"},"Email Recommendations Configuration"),", but it is not used by the Behavioral Triggers - officially. Thanks to this little line, you can - even with the built-in standard Content Block - declare the locale source for the Subscriber and set it to ",(0,i.kt)("inlineCode",{parentName:"p"},"@event_locale")," AMPScript variable. Bam, your Behavioral Triggers are now localised."),(0,i.kt)("h3",{id:"5-building-the-api-query"},"5. Building the API query"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{16}","{16}":!0},'var protocol = "https";\nvar hostname = mid + ".recs.igodigital.com";\nvar qs = "?item_count=" + settings["maxItems"] + "&sort_by=" + settings["sortBy"] + "&sort_direction=" + settings["sortDirection"];\nvar includes = [];\nfor (var key in settings["fields"]) {\n if(defaults[key] == null) {\n includes = includes.concat(settings["fields"][key]);\n }\n}\nif(includes.length > 0) {\n qs += "&include=" + includes.join("|")\n}\nif(event_locale){\n qs += "&locale=" + event_locale\n}\nvar url = protocol + "://" + hostname + "/" + mid + "/trigger" + qs;\n')),(0,i.kt)("p",null,"The above snippet is responsible for building the URL that is used for an ",(0,i.kt)("inlineCode",{parentName:"p"},"HTTP.Post")," API call to Einstein Backend (IgoDigital). You can make a simple addition that will enable you access to ",(0,i.kt)("a",{parentName:"p",href:"#user-and-profile-attributes"},"Einstein Custom Profile Attributes"),". Must-have if you want to boost engagement with personalisation for new customers."),(0,i.kt)("p",null,"To do so, just before the line highlighted in the snippet above add a new one with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'qs += "&user_attributes=CustomProfileAttribute1|CustomProfileAttribute2"\n')),(0,i.kt)("p",null,"Just change the values after the equal sign to the exact names of your ",(0,i.kt)("a",{parentName:"p",href:"#user-and-profile-attributes"},"Einstein Custom Profile Attributes")," that you want to have available in your code (separated by ",(0,i.kt)("inlineCode",{parentName:"p"},"|"),")."),(0,i.kt)("h3",{id:"6-response-parsing"},"6. Response parsing"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'for(var responseField in response) {\n var value = response[responseField];\n\n if(responseField === "products" || responseField === "current_cart") {\n var prefix = (responseField === "products") ? "@item_" : "@cart_";\n for(var i=0; i<value.length; i++) {\n for(var itemField in value[i]) {\n var name = prefix + itemField + "_" + (i+1);\n var val = value[i][itemField];\n Platform.Variable.SetValue(name, val);\n }\n }\n }\n else if(responseField === "user") {\n var prefix = "@user_";\n for(var userField in value) {\n var name = prefix + userField;\n var val = value[userField];\n Platform.Variable.SetValue(name, val);\n }\n }\n else {\n Platform.Variable.SetValue("@"+responseField, value);\n }\n}\n')),(0,i.kt)("p",null,"The code you see above is responsible for reading the response from Einstein Backend (Igodigital). It goes through each element of the response and creates a separate AMPScript variable with an appropriate value."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"For each element of the ",(0,i.kt)("inlineCode",{parentName:"li"},"products")," key, it creates a variable build with ",(0,i.kt)("inlineCode",{parentName:"li"},"item_")," prefix, value name and ",(0,i.kt)("inlineCode",{parentName:"li"},"_X")," suffix, where X is the counter of the item (so 1 for the first item, 2 for the second and so on). It means you can get the first link to the first item by calling the ",(0,i.kt)("inlineCode",{parentName:"li"},"@item_link_1")," variable. To get the name of the second item goes with ",(0,i.kt)("inlineCode",{parentName:"li"},"@item_name_2"),"."),(0,i.kt)("li",{parentName:"ol"},"If the response contains the ",(0,i.kt)("inlineCode",{parentName:"li"},"current_cart")," key (it is available only if the ",(0,i.kt)("a",{parentName:"li",href:"#track-cart"},"Track Cart")," was triggered), it also creates variables for it. The structure is nearly the same - just the prefix changes to ",(0,i.kt)("inlineCode",{parentName:"li"},"cart_"),". The most compelling use case here? You can get the ",(0,i.kt)("inlineCode",{parentName:"li"},"price")," information that you pushed via ",(0,i.kt)("a",{parentName:"li",href:"#track-cart"},"Track Cart")," (the one unique to a specific cart, not coming from the Product Catalog) by calling ",(0,i.kt)("inlineCode",{parentName:"li"},"@cart_amount_1")," for the first item."),(0,i.kt)("li",{parentName:"ol"},"There is even a system that gets ",(0,i.kt)("a",{parentName:"li",href:"#user-and-profile-attributes"},"Custom Profile Attributes")," as AMPScript variables! It uses ",(0,i.kt)("inlineCode",{parentName:"li"},"user_")," prefix, so if you want to get, for example, the gender - call ",(0,i.kt)("inlineCode",{parentName:"li"},"@user_gender")," variable."),(0,i.kt)("li",{parentName:"ol"},"All other keys of the response are also created with just their name. So to get information on whether the cart converted, you can call ",(0,i.kt)("inlineCode",{parentName:"li"},"@purchased")," variable.")),(0,i.kt)("p",null,"To check what is available to you, check example ",(0,i.kt)("a",{parentName:"p",href:"#api-responses"},"API responses")," coming from Einstein Backend."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"current_cart")," key and the ",(0,i.kt)("inlineCode",{parentName:"li"},"amount")," variable is available only for the Abandoned Cart Behavioral Trigger. Wishlist and Browse only contain ",(0,i.kt)("inlineCode",{parentName:"li"},"products")," information coming from the Product Catalog."),(0,i.kt)("li",{parentName:"ol"},"Even though there is already a code that parses ",(0,i.kt)("a",{parentName:"li",href:"#user-and-profile-attributes"},"Custom Profile Attributes"),", it won't give you anything on the built-in standard Behavioral Trigger Content Block. It won't have the ",(0,i.kt)("inlineCode",{parentName:"li"},"user")," key populated. You must enable each attribute in the ",(0,i.kt)("a",{parentName:"li",href:"#5-building-the-api-query"},"API call"),"."),(0,i.kt)("li",{parentName:"ol"},"If you want to use more than one Abandonment Engagement in one email, you will have to alter the prefixes in this code not to overwrite the AMPScript variables."))),(0,i.kt)("p",null,"Those AMPScript variables are a must if you want to create a Call to Action button that will rebuild the cart in your e-commerce. Remember, however, that it is custom development without any out-of-the-box snippets from Salesforce."),(0,i.kt)("p",null,"The rest of the code is just taking care of the proper display of the information in the email and stopping the send with ",(0,i.kt)("inlineCode",{parentName:"p"},"RaiseError")," if the customer purchased the cart or the API did not respond. It is added to the email using ",(0,i.kt)("inlineCode",{parentName:"p"},"%%=treatascontentarea('BT Trigger', @content)=%%"),"."))),(0,i.kt)("h3",{id:"api-responses"},"API Responses"),(0,i.kt)("p",null,"To fully leverage the Behavioral Trigger Content Block's customisation options, you can check the sample responses from Einstein Backend (IgoDigital) available below. They will help you know what AMPScript variables can be available after the Content Block."),(0,i.kt)(r.Z,{groupId:"BehavioralTriggerResponse",defaultValue:"cart",values:[{label:"Abandoned Cart",value:"cart"},{label:"Abandoned Wishlist",value:"wishlist"},{label:"Abandoned Browse",value:"browse"}],mdxType:"Tabs"},(0,i.kt)(o.Z,{value:"cart",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'{\n "products": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n }\n ],\n "current_cart": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n }\n ],\n "same_products": "Y",\n "user": {\n "gender": "Male"\n },\n "purchased": false,\n "abandoned_items": "SKU2|SKU1",\n "tracking_pixel": " "\n}\n')),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"You can see that there is ",(0,i.kt)("inlineCode",{parentName:"li"},'"gender"')," data in the ",(0,i.kt)("inlineCode",{parentName:"li"},'"user"')," key in the example above. You will see information here only if you ",(0,i.kt)("a",{parentName:"li",href:"#5-building-the-api-query"},"alter your API call"),". Otherwise, it will be empty."),(0,i.kt)("li",{parentName:"ol"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"amount")," key is available in both ",(0,i.kt)("inlineCode",{parentName:"li"},"products")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"current_cart")," keys, but it is in a string format. Other prices (",(0,i.kt)("inlineCode",{parentName:"li"},"regular_price")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"sale_price"),") are integers."),(0,i.kt)("li",{parentName:"ol"},"In ",(0,i.kt)("inlineCode",{parentName:"li"},"same_products"),", you will have information (",(0,i.kt)("inlineCode",{parentName:"li"},'"Y"'),"/",(0,i.kt)("inlineCode",{parentName:"li"},'"N"'),") whether the Cart content changed between the moment you pushed this data and the API call.")))),(0,i.kt)(o.Z,{value:"wishlist",mdxType:"TabItem"},(0,i.kt)("p",null,"Response structure is the same as for Abandoned Browse."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'{\n "products": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n }\n ],\n "user": {},\n "purchased": false,\n "abandoned_items": "SKU2|SKU1",\n "tracking_pixel": " "\n}\n'))),(0,i.kt)(o.Z,{value:"browse",mdxType:"TabItem"},(0,i.kt)("p",null,"Response structure is the same as for Abandoned Wishlist."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'{\n "products": [\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode002",\n "name": "ProductName2",\n "regular_price": 88,\n "sale_price": 55,\n "sku_id": "SKU2",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "44.00"\n },\n {\n "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",\n "image_link": "https://your.product/image.png",\n "product_code": "ProductCode001",\n "name": "ProductName1",\n "regular_price": 99,\n "sale_price": 66,\n "sku_id": "SKU1",\n "online_availability": "Y",\n "quantity": 1,\n "amount": "33.00"\n }\n ],\n "user": {},\n "purchased": false,\n "abandoned_items": "SKU2|SKU1",\n "tracking_pixel": " "\n}\n')))),(0,i.kt)("h2",{id:"debugging-behavioral-triggers"},"Debugging Behavioral Triggers"),(0,i.kt)("p",null,"There are three critical steps of Behavioral Trigger implementation when you might need to debug your solution. As you will be merging multiple systems and working on time-sensitive data using a new feature, look behind the curtain will be crucial. Thankfully, there are few options that we can use."),(0,i.kt)("h3",{id:"debugging-collectjs"},"Debugging Collect.js"),(0,i.kt)("p",null,"The first thing to check is your frontend Collect.js implementation. To quickly review whether Collect.js is available on your website, open Developer Tools in your browser and go to the Console tab. In there, write ",(0,i.kt)("inlineCode",{parentName:"p"},"_etmc"),"."),(0,i.kt)("p",null,"If you see ",(0,i.kt)("inlineCode",{parentName:"p"},"ReferenceError: _etmc is not defined"),", it means that the script is not available. Ensure that you are checking a page that is supposed to have Behavioral Triggers implemented and that the script is added correctly."),(0,i.kt)("p",null,"If the script is implemented, you will see an Object containing over a dozen of keys. Many of which are the functions that pass the data from your website to IgoDigital."),(0,i.kt)("p",null,"Now you can leverage its power by writing in the console ",(0,i.kt)("inlineCode",{parentName:"p"},"_etmc.debug = true")," to enable debugging mode of Collect.js. Once set, it will log every change applied to the dataLayer. Make a tracked action - like adding a product to a cart - to see it work."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="Example data logged after enabling debug and adding product to the cart"',title:'"Example',data:!0,logged:!0,after:!0,enabling:!0,debug:!0,and:!0,adding:!0,product:!0,to:!0,the:!0,'cart"':!0},'{\n "cart": [\n {\n "item": "2020572",\n "unique_id": "2020572AEUAEL",\n "name": "Women\u2019s Red Box Pullover Hoodie",\n "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html",\n "price": 50,\n "sale_price": 50,\n "item_type": "product"\n }\n ],\n "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"\n}\n')),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can check how Collect.js works by reviewing its contents. To do this, go to the link contained in your base Collect code. It should be: ",(0,i.kt)("inlineCode",{parentName:"p"},"http://YOUR_MID.collect.igodigital.com/collect.js"),".")),(0,i.kt)("p",null,"Another option to observe what Collect.js is sending to Einstein IgoDigital backend is to go to Network tab of the Developer Tools and look for calls made to ",(0,i.kt)("inlineCode",{parentName:"p"},"igodigital.com")," address. You will see the above data in form of API request payload:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'https://stack7.collect.igodigital.com/c2/northerntrailoutfitters/track_cart?payload={"cart":[{"item":"2020572","unique_id":"2020572AEUAEL","name":"Women\u2019s Red Box Pullover Hoodie","url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html","price":50,"sale_price":50,"item_type":"product"}],"url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"}\n')),(0,i.kt)("p",null,"Using either of those two tools will allow you to make sure that:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"You have correctly implemented the Collect.js script."),(0,i.kt)("li",{parentName:"ol"},"It is correctly assigned to the website events you want to track."),(0,i.kt)("li",{parentName:"ol"},"It captures necessary information, like price, name of the product, id."),(0,i.kt)("li",{parentName:"ol"},"It passes the correctly structured JSON with this data to IgoDigital."),(0,i.kt)("li",{parentName:"ol"},"You receive status 200 on the API call in the Network tab.")),(0,i.kt)("p",null,"Once all of the above is validated, the correct data should be available to Salesforce Marketing Cloud Einstein and Behavioral Triggers."),(0,i.kt)("h3",{id:"debugging-data-flow"},"Debugging Data Flow"),(0,i.kt)("p",null,"Now it's time to check whether the data is coming through to your Salesforce Marketing Cloud."),(0,i.kt)("p",null,"There are few things to check:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Go to Journey Builder \xbb Behavioral Triggers and check whether there is a required Trigger Type available with ",(0,i.kt)("inlineCode",{parentName:"li"},"Active")," status."),(0,i.kt)("li",{parentName:"ol"},"Go to the Status tab and check whether the Status next to Collect Tracking Code Type is ",(0,i.kt)("inlineCode",{parentName:"li"},"Ok"),". Don't worry about the numbers in Collected Today - those are frequently not aligned with reality."),(0,i.kt)("li",{parentName:"ol"},"Go to Audience Builder \xbb Contact Builder \xbb Data Extensions and in the main local folder look for ",(0,i.kt)("inlineCode",{parentName:"li"},"IGO_PRODUCTS")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"IGO_PROFILES")," Data Extensions. You should see the captured users and products details. It validates that the data is flowing through Collect.js."),(0,i.kt)("li",{parentName:"ol"},"Finally, it's time to check the Data Extension related to the Behavioral Trigger Type you have activated. It should be in the same main local folder, named ",(0,i.kt)("inlineCode",{parentName:"li"},"abandoned_TYPE_01234")," (with ",(0,i.kt)("inlineCode",{parentName:"li"},"TYPE")," being ",(0,i.kt)("inlineCode",{parentName:"li"},"wishlist"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"cart")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"browse")," depending on what you enabled).")),(0,i.kt)("p",null,"Remember that the Behavioral Trigger data will be delayed by the amount of time ",(0,i.kt)("a",{parentName:"p",href:"#behavioral-triggers-configuration"},"configured")," during the setup (between 15 minutes and 3 hours). For debugging purposes, the shorter, the better."),(0,i.kt)("p",null,"If you do not see data in the above places - the most probable cause is Collect.js script implementation. Go to the previous debugging step and check whether everything is set up correctly. If you are confident that all is good and after waiting the required amount of time, contact Salesforce Support for help."),(0,i.kt)("h3",{id:"debugging-bt-content-block"},"Debugging BT Content Block"),(0,i.kt)("p",null,"Once you complete the above steps, it's time to play with ",(0,i.kt)("a",{parentName:"p",href:"#behavioral-trigger-content-block"},"Behavioral Trigger Content Block"),"."),(0,i.kt)("p",null,"The easiest way to check whether everything works fine is by adding the default one and checking whether the data makes sense. The hard part starts when there is an issue with the outcome (incorrect data, missing data or just no preview)."),(0,i.kt)("p",null,"I use a simple script to find what might be the source of the issue:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"<script runat=\"server\">\n\n Platform.Load('Core', '1');\n\n try {\n var defaults = {\n 'link' : 'Link',\n 'image_link' : 'ImageLink',\n 'product_code' : 'ProductCode',\n 'name' : 'Name',\n 'regular_price' : 'RegularPrice',\n 'sale_price' : 'SalePrice',\n 'sku_id' : 'SkuID'\n };\n\n // Data from Marketing Cloud\n var data = Platform.Variable.GetValue('@data');\n var mid = Platform.Variable.GetValue('@mid');\n var subKey = Attribute.GetValue('_subscriberkey');\n var email = Attribute.GetValue('emailaddr');\n\n // Data from block settings\n var settings = {'fields':{'image_link':'ImageLink','name':'ProductName','regular_price':'RegularPrice','quantity':'quantity'},'maxItems':3,'sortBy':'item_order','sortDirection':'desc','desktopCols':1,'mobileCols':0,'useSalePricing':false};\n\n // Build the url\n var protocol = 'https';\n var hostname = mid + '.recs.igodigital.com';\n var qs = '?item_count=' + settings['maxItems'] + '&sort_by=' + settings['sortBy'] + '&sort_direction=' + settings['sortDirection'] + '&user_attributes=gender';\n var includes = [];\n for (var key in settings['fields']) {\n if (defaults[key] == null) {\n includes = includes.concat(settings['fields'][key]);\n }\n }\n if (includes.length > 0) {\n qs += '&include=' + includes.join('|')\n }\n var url = protocol + '://' + hostname + '/' + mid + '/trigger' + qs;\n\n // Call IdoDigital Backend\n var result = HTTP.Post(url, 'application/json', data, []);\n if (result.StatusCode == 200) {\n var response = Platform.Function.ParseJSON(result.Response[0]);\n }\n\n // Print it in the Email\n Write('Your Subscriber Key: ' + subKey + '<br>')\n Write('Your Email: ' + email + '<br>')\n Write('Your Data: ' + data + '<br>')\n Write('Your Items: ' + Stringify(response) + '<br>');\n\n } catch(e) {\n Write(e);\n Platform.Function.RaiseError('Quit send.', true, 'statusCode','3');\n }\n<\/script>\n")),(0,i.kt)("p",null,"It is a very basic script but helps with finding the source of an issue. As you can see, a lot of it is just a copy-paste of the original ",(0,i.kt)("a",{parentName:"p",href:"#behavioral-trigger-content-block"},"Behavioral Trigger Content Block"),". But instead of displaying a beautiful abandoned cart message, it will show you Subscriber Key, Email Address, raw data that is being shot to IdoDigital Backend and the response from it."),(0,i.kt)("p",null,"Using that information, you can validate whether the raw data, email address and subscriber key belong to the same Contact and whether the response is aligned with what you were pushing during your testing on the website."),(0,i.kt)("p",null,"If there is anything wrong with that information, check whether you have a correct Collect.js implementation, whether it captures the accurate product information and assigns it to the right Contact data."),(0,i.kt)("p",null,"If the response is correct, but there are still some issues with what the Behavioral Trigger Content Block displays - check Content Block settings. If something is still off - welcome to the new adventure - a Custom Behavioral Trigger Content Block creation."))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/724.d7e60c08.js b/assets/js/339.2653dcec.js similarity index 75% rename from assets/js/724.d7e60c08.js rename to assets/js/339.2653dcec.js index 51dcae6e9..68e829497 100644 --- a/assets/js/724.d7e60c08.js +++ b/assets/js/339.2653dcec.js @@ -1,5 +1,5 @@ -exports.id = 724; -exports.ids = [724]; +exports.id = 339; +exports.ids = [339]; exports.modules = { /***/ 84182: @@ -1948,13 +1948,11 @@ module.exports = register; 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]; @@ -1964,7 +1962,6 @@ module.exports = register; Object.defineProperty(target, descriptor.key, descriptor); } } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); @@ -1973,7 +1970,6 @@ module.exports = register; }); return Constructor; } - function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { @@ -1985,32 +1981,24 @@ module.exports = register; } 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) { @@ -2023,10 +2011,8 @@ module.exports = register; if (_d) throw _e; } } - return _arr; } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -2035,15 +2021,11 @@ module.exports = register; 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."); } @@ -2052,15 +2034,10 @@ module.exports = register; var 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; }; @@ -2146,31 +2123,24 @@ module.exports = register; } 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; }; @@ -2194,7 +2164,6 @@ module.exports = register; if (emptyString(str)) { return str; } - return str.charAt(0).toUpperCase() + str.substring(1); }; @@ -2221,34 +2190,28 @@ module.exports = register; 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); @@ -2258,14 +2221,13 @@ module.exports = register; 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) + }; + // 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; @@ -2274,52 +2236,39 @@ module.exports = register; 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 + // 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 { @@ -2329,30 +2278,24 @@ module.exports = register; 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) + }; + // 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] } @@ -2361,32 +2304,24 @@ module.exports = register; 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) { @@ -2399,6 +2334,7 @@ module.exports = register; // special colour names transparent: [0, 0, 0, 0], // NB alpha === 0 + // regular colours aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], @@ -2549,53 +2485,46 @@ module.exports = register; 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 + }; + // 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; - }; // deletes the entry in the map + }; /** * Checks if `value` is the @@ -3118,7 +3047,6 @@ module.exports = register; } : function () { return Date.now(); }; - var raf = function () { if (_window) { if (_window.requestAnimationFrame) { @@ -3139,7 +3067,6 @@ module.exports = register; }; } } - return function (fn) { if (fn) { setTimeout(function () { @@ -3148,7 +3075,6 @@ module.exports = register; } }; }(); - var requestAnimationFrame = function requestAnimationFrame(fn) { return raf(fn); }; @@ -3156,24 +3082,19 @@ module.exports = register; 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) { @@ -3209,7 +3130,6 @@ module.exports = register; } else { entry.done = true; } - return entry; } }; @@ -3229,7 +3149,6 @@ module.exports = register; } else { entry.done = true; } - return entry; } }; @@ -3240,24 +3159,20 @@ module.exports = register; }; 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; @@ -3286,28 +3201,25 @@ module.exports = register; if (!warnings()) { return; } - if (warnSupported) { console.warn(msg); } else { console.log(msg); - if (traceSupported) { console.trace(); } } - }; - /* eslint-enable */ + }; /* eslint-enable */ var clone = function clone(obj) { return extend({}, obj); - }; // gets a shallow copy of the argument + }; + // 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)) { @@ -3319,22 +3231,24 @@ module.exports = register; 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; // + 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 + ? + // return a random number or 4 (a ^ 15 // if "a" is not 15 - ? // generate a random number from 0 to 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 = {}; @@ -3345,13 +3259,11 @@ module.exports = register; 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; }; }; @@ -3359,7 +3271,6 @@ module.exports = register; for (var i = arr.length - 1; i >= 0; i--) { if (arr[i] === ele) { arr.splice(i, 1); - if (oneCopy) { break; } @@ -3394,10 +3305,8 @@ module.exports = register; var ObjectMap = /*#__PURE__*/function () { function ObjectMap() { _classCallCheck(this, ObjectMap); - this._obj = {}; } - _createClass(ObjectMap, [{ key: "set", value: function set(key, val) { @@ -3426,37 +3335,30 @@ module.exports = register; return this._obj[key]; } }]); - return ObjectMap; }(); - var Map$2 = typeof Map !== 'undefined' ? Map : ObjectMap; /* global Set */ - var undef = "undefined" ; + 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() { @@ -3466,7 +3368,6 @@ module.exports = register; key: "add", value: function add(val) { var o = this._obj; - if (o[val] !== 1) { o[val] = 1; this.size++; @@ -3476,7 +3377,6 @@ module.exports = register; key: "delete", value: function _delete(val) { var o = this._obj; - if (o[val] === 1) { o[val] = 0; this.size--; @@ -3496,7 +3396,6 @@ module.exports = register; key: "toArray", value: function toArray() { var _this = this; - return Object.keys(this._obj).filter(function (key) { return _this.has(key); }); @@ -3507,40 +3406,39 @@ module.exports = register; 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; - var group = params.group; // try to automatically infer the group if unspecified - + // 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 - + } + // 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 - + } + // 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() + this[0] = this; + // NOTE: when something is added here, add also to ele.json() var _p = this._private = { cy: cy, single: true, @@ -3633,16 +3531,14 @@ module.exports = register; '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 - + } + // renderedPosition overrides if specified if (params.renderedPosition) { var rpos = params.renderedPosition; var pan = cy.pan(); @@ -3652,33 +3548,25 @@ module.exports = register; 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(); } @@ -3688,18 +3576,17 @@ module.exports = register; params = { bfs: params.bfs || !params.dfs, dfs: params.dfs || !params.bfs - }; // from pseudocode on wikipedia + }; + // 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; @@ -3711,41 +3598,33 @@ module.exports = register; var V = {}; var j = 0; var found; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; // enqueue v - + 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; @@ -3753,70 +3632,56 @@ module.exports = register; 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 - + }; + // search, spanning trees, etc var elesfn$v = { breadthFirstSearch: defineSearch({ bfs: true @@ -3824,8 +3689,9 @@ module.exports = register; depthFirstSearch: defineSearch({ dfs: true }) - }; // nice, short mathematical alias + }; + // nice, short mathematical alias elesfn$v.bfs = elesfn$v.breadthFirstSearch; elesfn$v.dfs = elesfn$v.depthFirstSearch; @@ -4222,86 +4088,68 @@ module.exports = register; directed: args[2] }; } - var _dijkstraDefaults = dijkstraDefaults(options), - root = _dijkstraDefaults.root, - weight = _dijkstraDefaults.weight, - directed = _dijkstraDefaults.directed; - + 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; - + 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] = { @@ -4310,10 +4158,8 @@ module.exports = register; }; } } // for - } // while - return { distanceTo: function distanceTo(node) { var target = string(node) ? nodes.filter(node)[0] : node[0]; @@ -4324,10 +4170,8 @@ module.exports = register; 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); @@ -4336,7 +4180,6 @@ module.exports = register; uid = u.id(); } } - return eles.spawn(S); } }; @@ -4350,11 +4193,9 @@ module.exports = register; weightFn = weightFn || function (edge) { return 1; }; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - + 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 @@ -4362,22 +4203,19 @@ module.exports = register; 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 - + }; + // 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]; @@ -4386,15 +4224,14 @@ module.exports = register; var setVIndex = findSetIndex(v); var setU = forest[setUIndex]; var setV = forest[setVIndex]; - if (setUIndex !== setVIndex) { - A.merge(edge); // combine forests for u and v + A.merge(edge); + // combine forests for u and v setU.merge(setV); forest.splice(setVIndex, 1); } } - return A; } }; @@ -4414,14 +4251,12 @@ module.exports = register; // 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 = _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(); @@ -4435,104 +4270,99 @@ module.exports = register; 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 + fScore[sid] = heuristic(root); - var steps = 0; // Main loop + // Counter + var steps = 0; + // Main loop while (openSet.size() > 0) { popFromOpenSet(); - steps++; // If we've found our goal, then we are done + 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 + } + // Add cMin to processed nodes + closedSetIds[cMinId] = true; - closedSetIds[cMinId] = true; // Update scores for neighbors of cMin + // 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 + 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 - + } + // 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 + 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 node is in closedSet, ignore it if (closedSetIds[wid]) { continue; - } // New tentative score for node w + } + // New tentative score for node w + var tempScore = gScore[cMinId] + weight(e); - var tempScore = gScore[cMinId] + weight(e); // Update gScore for node w if: + // Update gScore for node w if: // w not present in openSet // OR // tentative gScore is less than previous value - // w not in openSet + // w not in openSet if (!isInOpenSet(wid)) { gScore[wid] = tempScore; fScore[wid] = tempScore + heuristic(w); @@ -4540,9 +4370,9 @@ module.exports = register; cameFrom[wid] = cMin; cameFromEdge[wid] = e; continue; - } // w already in openSet, but with greater gScore - + } + // w already in openSet, but with greater gScore if (tempScore < gScore[wid]) { gScore[wid] = tempScore; fScore[wid] = tempScore + heuristic(w); @@ -4550,11 +4380,9 @@ module.exports = register; cameFromEdge[wid] = e; } } // End of neighbors update - } // End of main loop - // If we've reached here, then we've not reached our goal - + // If we've reached here, then we've not reached our goal return { found: false, distance: undefined, @@ -4574,71 +4402,61 @@ module.exports = register; // Implemented from pseudocode from wikipedia floydWarshall: function floydWarshall(options) { var cy = this.cy(); - var _floydWarshallDefault = floydWarshallDefaults(options), - weight = _floydWarshallDefault.weight, - directed = _floydWarshallDefault.directed; - + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; var weightFn = weight; - var _this$byGroup = this.byGroup(), - nodes = _this$byGroup.nodes, - edges = _this$byGroup.edges; - + 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 - + }; + // 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 - + } + // Initialize matrix used for path reconstruction + // Initialize distance matrix var next = new Array(Nsq); - var edgeNext = new Array(Nsq); // Process edges + 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); - var _weight = weightFn(edge); // Check if already process another edge between same 2 nodes - - + // 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 undirected graph, process 'reversed' edge if (!directed) { var ts = t * N + s; // target to source index @@ -4648,17 +4466,15 @@ module.exports = register; edgeNext[ts] = edge; } } - } // Main loop - + } + // 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]; @@ -4666,15 +4482,12 @@ module.exports = register; } } } - 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); @@ -4685,20 +4498,16 @@ module.exports = register; 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]; @@ -4706,13 +4515,11 @@ module.exports = register; path.merge(edge); path.merge(atIndex(i)); } - return path; } }; return res; } // floydWarshall - }; // elesfn var bellmanFordDefaults = defaults$g({ @@ -4726,20 +4533,16 @@ module.exports = register; // 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; - + 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; - + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; var numNodes = nodes.length; var infoMap = new Map$2(); var hasNegativeWeightCycle = false; @@ -4750,78 +4553,61 @@ module.exports = register; 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; - + 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 } - + }; + // 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 - + } + // 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; @@ -4829,95 +4615,74 @@ module.exports = register; 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 + 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); @@ -4929,7 +4694,6 @@ module.exports = register; } } } - return { distanceTo: distanceTo, pathTo: pathTo, @@ -4937,86 +4701,77 @@ module.exports = register; negativeWeightCycles: negativeWeightCycles }; } // bellmanFord - }; // elesfn - var sqrt2 = Math.sqrt(2); // Function which colapses 2 (meta) nodes into one + 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 + // 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 - + } + // 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 - + } + // 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 - + }; + // 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 + 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; - + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; edges.unmergeBy(function (edge) { return edge.isLoop(); }); @@ -5024,52 +4779,52 @@ module.exports = register; 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) - + } + // 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 - + } + // We will store the best cut found here var minCutSize = Infinity; var minCutEdgeIndexes = []; - var minCutNodeMap = new Array(numNodes); // Initial meta node partition + 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 - + }; + // 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) - + } + // 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 + // 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? + 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; @@ -5080,32 +4835,29 @@ module.exports = register; copyNodesMap(metaNodeMap2, minCutNodeMap); } } // end of main loop - // Construct result - + // 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 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 - + } + // 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) { @@ -5117,7 +4869,6 @@ module.exports = register; }); return component; }; - var components = [constructComponent(partition1), constructComponent(partition2)]; var ret = { cut: cut, @@ -5159,30 +4910,24 @@ module.exports = register; 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) { @@ -5190,16 +4935,13 @@ module.exports = register; 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) { @@ -5208,25 +4950,21 @@ module.exports = register; 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 - + } + // 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; @@ -5237,7 +4975,6 @@ module.exports = register; arr.splice(i, 1); } } - if (sort) { arr.sort(function (a, b) { return a - b; @@ -5246,7 +4983,6 @@ module.exports = register; var len = arr.length; var mid = Math.floor(len / 2); - if (len % 2 !== 0) { return arr[mid + 1 + off]; } else { @@ -5280,22 +5016,22 @@ module.exports = register; return dx * dx + dy * dy; }; var inPlaceSumNormalize = function inPlaceSumNormalize(v) { - var length = v.length; // First, get sum of all elements + 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 - + } + // 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; }; @@ -5324,8 +5060,9 @@ module.exports = register; }; 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 + }; + // makes a full bb (x1, y1, x2, y2, w, h) from implicit params var makeBoundingBox = function makeBoundingBox(bb) { if (bb == null) { return { @@ -5376,8 +5113,19 @@ module.exports = register; 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; @@ -5406,7 +5154,6 @@ module.exports = register; 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) { @@ -5414,13 +5161,11 @@ module.exports = register; 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; @@ -5430,6 +5175,7 @@ module.exports = register; return bb; }; + // assign the values of bb2 into bb1 var assignBoundingBox = function assignBoundingBox(bb1, bb2) { bb1.x1 = bb2.x1; bb1.y1 = bb2.y1; @@ -5443,39 +5189,35 @@ module.exports = register; if (bb1.x1 > bb2.x2) { return false; } - if (bb2.x1 > bb1.x2) { return false; - } // case: one bb to left of other - + } + // 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 - + } + // case: one bb above other if (bb1.y2 < bb2.y1) { return false; } - if (bb2.y2 < bb1.y1) { return false; - } // case: one bb below other - + } + // case: one bb below other if (bb1.y1 > bb2.y2) { return false; } - if (bb2.y1 > bb1.y2) { return false; - } // otherwise, must have some overlap - + } + // otherwise, must have some overlap return true; }; var inBoundingBox = function inBoundingBox(bb, x, y) { @@ -5490,101 +5232,112 @@ module.exports = register; var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { var cornerRadius = getRoundRectangleRadius(width, height); var halfWidth = width / 2; - var halfHeight = height / 2; // Check intersections with straight line segments + var halfHeight = height / 2; - var straightLineIntersections; // Top segment, left to right + // Check intersections with straight line segments + var straightLineIntersections; + // Top segment, left to right { 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 + } + // Right segment, top to bottom { 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 + } + // Bottom segment, left to right { 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 + } + // Left segment, top to bottom { 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 + // 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 + 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 + } + // 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 + 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 + } + // 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 + 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 + } + // 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 + 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); @@ -5599,8 +5352,9 @@ module.exports = register; 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 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; @@ -5612,11 +5366,9 @@ module.exports = register; 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; @@ -5626,14 +5378,16 @@ module.exports = register; 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 + 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; @@ -5644,7 +5398,6 @@ module.exports = register; 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); @@ -5658,16 +5411,13 @@ module.exports = register; 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)); @@ -5680,36 +5430,38 @@ module.exports = register; 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 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 + 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)); - + 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; @@ -5718,7 +5470,6 @@ module.exports = register; minDistanceSquared = distSquared; } } - return minDistanceSquared; }; var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { @@ -5728,27 +5479,24 @@ module.exports = register; 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; + 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]; @@ -5756,21 +5504,19 @@ module.exports = register; 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 ){ + } + + // if( y3 < y ){ // down++; // } - } else { continue; } } - if (up % 2 === 0) { return false; } else { @@ -5778,13 +5524,12 @@ module.exports = register; } }; var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { - var transformedPoints = new Array(basePoints.length); // Gives negative angle + 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 { @@ -5793,26 +5538,23 @@ module.exports = register; } else { angle = direction; } - var cos = Math.cos(-angle); - var sin = Math.sin(-angle); // console.log("base: " + basePoints); + 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) { @@ -5821,17 +5563,14 @@ module.exports = register; var halfH = height / 2; var cornerRadius = getRoundPolygonRadius(width, height); var squaredCornerRadius = cornerRadius * cornerRadius; - for (var i = 0; i < basePoints.length / 4; i++) { var sourceUv = void 0, - destUv = void 0; - + destUv = void 0; if (i === 0) { sourceUv = basePoints.length - 2; } else { sourceUv = i * 4 - 2; } - destUv = i * 4 + 2; var px = centerX + halfW * basePoints[i * 4]; var py = centerY + halfH * basePoints[i * 4 + 1]; @@ -5848,34 +5587,28 @@ module.exports = register; var orthx = basePoints[sourceUv + 1]; var orthy = -basePoints[sourceUv]; var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; - if (cosAlpha < 0) { orthx *= -1; orthy *= -1; } - var cx = cp0x + orthx * cornerRadius; var cy = cp0y + orthy * cornerRadius; var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); - if (squaredDistance <= squaredCornerRadius) { 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]; @@ -5887,35 +5620,34 @@ module.exports = register; 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 + } + // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + + // Assume CCW polygon winding var offsetX = nextPointY - currentPointY; - var offsetY = -(nextPointX - currentPointX); // Normalize + var offsetY = -(nextPointX - currentPointX); + // Normalize var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); var normalizedOffsetX = offsetX / offsetLength; var normalizedOffsetY = offsetY / offsetLength; @@ -5924,7 +5656,6 @@ module.exports = register; 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) { @@ -5934,11 +5665,9 @@ module.exports = register; 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]; }; @@ -5948,43 +5677,36 @@ module.exports = register; x /= width / 2 + padding; y /= height / 2 + padding; return x * x + y * y <= 1; - }; // Returns intersections of increasing distance from line's start point + }; + // 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]; @@ -6005,8 +5727,9 @@ module.exports = register; } else { return c; } - }; // (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) + }; + // (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; @@ -6017,16 +5740,12 @@ module.exports = register; 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 { @@ -6039,51 +5758,48 @@ module.exports = register; } 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 - + } + // Check start point of second line if (midOfThree(x1, x2, x3) === x3) { return [x3, y3]; - } // Endpoint of first line - + } + // 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 ) + }; + + // 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); @@ -6093,13 +5809,10 @@ module.exports = register; } 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]; @@ -6107,14 +5820,11 @@ module.exports = register; 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) { @@ -6124,17 +5834,14 @@ module.exports = register; var halfW = width / 2; var halfH = height / 2; var cornerRadius = getRoundPolygonRadius(width, height); - for (var i = 0; i < basePoints.length / 4; i++) { var sourceUv = void 0, - destUv = void 0; - + destUv = void 0; if (i === 0) { sourceUv = basePoints.length - 2; } else { sourceUv = i * 4 - 2; } - destUv = i * 4 + 2; var px = centerX + halfW * basePoints[i * 4]; var py = centerY + halfH * basePoints[i * 4 + 1]; @@ -6144,7 +5851,6 @@ module.exports = register; var cp0y = py - offset * basePoints[sourceUv + 1]; var cp1x = px + offset * basePoints[destUv]; var cp1y = py + offset * basePoints[destUv + 1]; - if (i === 0) { lines[basePoints.length - 2] = cp0x; lines[basePoints.length - 1] = cp0y; @@ -6152,63 +5858,50 @@ module.exports = register; lines[i * 4 - 2] = cp0x; lines[i * 4 - 1] = cp0y; } - lines[i * 4] = cp1x; lines[i * 4 + 1] = cp1y; var orthx = basePoints[sourceUv + 1]; var orthy = -basePoints[sourceUv]; var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; - if (cosAlpha < 0) { orthx *= -1; orthy *= -1; } - var cx = cp0x + orthx * cornerRadius; var cy = cp0y + orthy * cornerRadius; intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); - if (intersection.length !== 0) { intersections.push(intersection[0], intersection[1]); } } - for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 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 _i4 = 1; _i4 < intersections.length / 2; _i4++) { var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); - if (squaredDistance <= lowestSquaredDistance) { lowestIntersection[0] = intersections[_i4 * 2]; lowestIntersection[1] = intersections[_i4 * 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) { @@ -6220,10 +5913,9 @@ module.exports = register; var x, y; var sides = points.length / 2; var minX = Infinity, - minY = Infinity, - maxX = -Infinity, - maxY = -Infinity; - + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; for (var i = 0; i < sides; i++) { x = points[2 * i]; y = points[2 * i + 1]; @@ -6231,12 +5923,11 @@ module.exports = register; maxX = Math.max(maxX, x); minY = Math.min(minY, y); maxY = Math.max(maxY, y); - } // stretch factors - + } + // stretch factors var sx = 2 / (maxX - minX); var sy = 2 / (maxY - minY); - for (var _i5 = 0; _i5 < sides; _i5++) { x = points[2 * _i5] = points[2 * _i5] * sx; y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; @@ -6245,13 +5936,11 @@ module.exports = register; minY = Math.min(minY, y); maxY = Math.max(maxY, y); } - if (minY < -1) { for (var _i6 = 0; _i6 < sides; _i6++) { y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); } } - return points; }; var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { @@ -6260,21 +5949,21 @@ module.exports = register; 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 + }; + // 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 + }; + // Set the default radius var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { return Math.min(width / 10, height / 10, 8); }; @@ -6283,8 +5972,9 @@ module.exports = register; }; 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 + }; + // 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), @@ -6304,124 +5994,118 @@ module.exports = register; var elesfn$o = { pageRank: function pageRank(options) { var _pageRankDefaults = pageRankDefaults(options), - dampingFactor = _pageRankDefaults.dampingFactor, - precision = _pageRankDefaults.precision, - iterations = _pageRankDefaults.iterations, - weight = _pageRankDefaults.weight; - + 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; - + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; var numNodes = nodes.length; var numNodesSqd = numNodes * numNodes; - var numEdges = edges.length; // Construct transposed adjacency matrix + 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 + 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 - + } + // 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 + 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; - var _n = t * numNodes + s; // Update matrix - - - matrix[_n] += w; // Update column sum + // 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 - + } + // 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 + // 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 - + } + // 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 + 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 - + } + // 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 - + 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 difference is less than the desired threshold, stop iterating if (diff < precision) { break; } - } // Construct result - + } + // Construct result var res = { rank: function rank(node) { node = cy.collection(node)[0]; @@ -6430,7 +6114,6 @@ module.exports = register; }; return res; } // pageRank - }; // elesfn var defaults$f = defaults$g({ @@ -6447,35 +6130,29 @@ module.exports = register; 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 + 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; } }; @@ -6484,52 +6161,44 @@ module.exports = register; var outdegrees = {}; var maxIndegree = 0; var maxOutdegree = 0; - for (var _i = 0; _i < numNodes; _i++) { var _node = nodes[_i]; + var id = _node.id(); - var id = _node.id(); // add current node to the current options object and call degreeCentrality - - + // 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" @@ -6538,21 +6207,20 @@ module.exports = register; var cy = this.cy(); var callingEles = this; var _options = options, - root = _options.root, - weight = _options.weight, - directed = _options.directed, - alpha = _options.alpha; + 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 + 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) }; @@ -6567,27 +6235,26 @@ module.exports = register; var k_in = incoming.length; var k_out = outgoing.length; var s_in = 0; - var s_out = 0; // Now, sum incoming edge weights + 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 - + } + // 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 + // nice, short mathematical alias elesfn$n.dc = elesfn$n.degreeCentrality; elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; @@ -6602,10 +6269,9 @@ module.exports = register; var elesfn$m = { closenessCentralityNormalized: function closenessCentralityNormalized(options) { var _defaults = defaults$e(options), - harmonic = _defaults.harmonic, - weight = _defaults.weight, - directed = _defaults.directed; - + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; var cy = this.cy(); var closenesses = {}; var maxCloseness = 0; @@ -6613,16 +6279,15 @@ module.exports = register; var fw = this.floydWarshall({ weight: weight, directed: directed - }); // Compute closeness for every node and find the maximum closeness + }); + // 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 { @@ -6630,24 +6295,19 @@ module.exports = register; } } } - 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(); @@ -6655,7 +6315,6 @@ module.exports = register; // from is a node node = node.id(); } - return closenesses[node] / maxCloseness; } }; @@ -6663,13 +6322,13 @@ module.exports = register; // 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 + 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, @@ -6677,13 +6336,10 @@ module.exports = register; }); 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 { @@ -6691,13 +6347,11 @@ module.exports = register; } } } - return harmonic ? totalDistance : 1 / totalDistance; } // closenessCentrality - }; // elesfn - // nice, short mathematical alias + // nice, short mathematical alias elesfn$m.cc = elesfn$m.closenessCentrality; elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; @@ -6709,12 +6363,12 @@ module.exports = register; // 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; - + directed = _defaults.directed, + weight = _defaults.weight; var weighted = weight != null; - var cy = this.cy(); // starting + var cy = this.cy(); + // starting var V = this.nodes(); var A = {}; var _C = {}; @@ -6722,7 +6376,6 @@ module.exports = register; var C = { set: function set(key, val) { _C[key] = val; - if (val > max) { max = val; } @@ -6730,12 +6383,12 @@ module.exports = register; get: function get(key) { return _C[key]; } - }; // A contains the neighborhoods of every node + }; + // 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 { @@ -6744,56 +6397,44 @@ module.exports = register; 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 + // 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); @@ -6801,11 +6442,9 @@ module.exports = register; // 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); @@ -6814,45 +6453,35 @@ module.exports = register; } 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(); @@ -6862,24 +6491,23 @@ module.exports = register; if (max == 0) { return 0; } - var id = cy.collection(node).id(); return C.get(id) / max; } - }; // alias + }; + // alias ret.betweennessNormalised = ret.betweennessNormalized; return ret; } // betweennessCentrality - }; // elesfn - // nice, short mathematical alias + // nice, short mathematical alias elesfn$l.bc = elesfn$l.betweennessCentrality; // Implemented by Zoe Xi @zoexi for GSOC 2016 - /* eslint-disable no-unused-vars */ + /* eslint-disable no-unused-vars */ var defaults$c = defaults$g({ expandFactor: 2, // affects time of computation and cluster granularity to some extent: M * M @@ -6889,7 +6517,8 @@ module.exports = register; // 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 + attributes: [ + // attributes/features used to group nodes, ie. similarity values between nodes function (edge) { return 1; }] @@ -6901,130 +6530,98 @@ module.exports = register; }; /* 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? - + }; + // 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 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); - var inflate = function inflate(M, n, inflateFactor - /** r **/ - ) { - var _M = new Array(n * n); // M(i,j) ^ inflatePower - - + // 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++) { @@ -7033,118 +6630,106 @@ module.exports = register; } } } - return clusters; }; - var markovClustering = function markovClustering(options) { var nodes = this.nodes(); var edges = this.edges(); - var cy = this.cy(); // Set parameters of algorithm: + var cy = this.cy(); - var opts = setOptions$3(options); // Map each node to its position in node array + // 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) - + } + // Generate stochastic matrix M from input graph G (should be symmetric/undirected) var n = nodes.length, - n2 = n * n; - + n2 = n * n; var M = new Array(n2), - _M; - + _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 + } + // Begin Markov cluster algorithm - addLoops(M, n, opts.multFactor); // Step 2: M = normalize( M ); + // 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: + isStillMoving = false; - _M = expand(M, n, opts.expandFactor); // Step 4: + // Step 3: + _M = expand(M, n, opts.expandFactor); - M = inflate(_M, n, opts.inflateFactor); // Step 5: check to see if ~steady state has been reached + // 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 + // 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) { @@ -7163,19 +6748,18 @@ module.exports = register; max: function max(length, getP, getQ) { return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); } - }; // in case the user accidentally doesn't use camel case + }; + // 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 { @@ -7193,12 +6777,9 @@ module.exports = register; testMode: false, testCentroids: null }); - var setOptions$2 = function setOptions(options) { return defaults$b(options); }; - /* eslint-enable */ - var getDist = function getDist(type, node, centroid, attributes, mode) { var noNodeP = mode !== 'kMedoids'; @@ -7207,114 +6788,96 @@ module.exports = register; } : 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 + 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 - + } + // 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. + 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. + 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 { @@ -7323,31 +6886,29 @@ module.exports = register; 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 node = null; - var opts = setOptions$2(options); // Begin k-means algorithm + // 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 + var centroids; + // Step 1: Initialize centroid positions if (opts.testMode) { if (typeof opts.testCentroids === 'number') { // TODO: implement a seeded random number generator. @@ -7361,75 +6922,65 @@ module.exports = register; } 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 # - + 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 - + } + // 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. - + } + // 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; - newCentroid[d] = sum[d] / cluster.length; // Check to see if algorithm has converged, i.e. when centroids no longer change - + // 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 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 + // Step 1: Initialize k medoids if (opts.testMode) { if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { medoids = opts.testCentroids; @@ -7439,213 +6990,177 @@ module.exports = register; } 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 # - + 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, + 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 + // 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 - + 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 - + } + // 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 opts = setOptions$2(options); + // Begin fuzzy c-means algorithm var clusters; var centroids; var U; - var _U; + var weight; - var weight; // Step 1: Initialize letiables. - + // 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 - + } + // end init FCM var isStillMoving = true; var iterations = 0; - while (isStillMoving && iterations < opts.maxIterations) { - isStillMoving = false; // Step 2: Calculate the centroids for each step. + isStillMoving = false; - updateCentroids(centroids, nodes, U, weight, opts); // Step 3: Update the partition matrix U. + // Step 2: Calculate the centroids for each step. + updateCentroids(centroids, nodes, U, weight, opts); - updateMembership(U, _U, centroids, nodes, opts); // Step 4: Check for convergence. + // 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. - + } + // 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, @@ -7669,31 +7184,26 @@ module.exports = register; 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); @@ -7701,25 +7211,22 @@ module.exports = register; 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 + var merged; + // Merge two closest clusters if (opts.mode === 'dendrogram') { merged = { left: c1, @@ -7732,25 +7239,22 @@ module.exports = register; key: c1.key }; } - clusters[c1.index] = merged; clusters.splice(c2.index, 1); - index[c1.key] = merged; // Update distances with new merged cluster + 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]; } @@ -7759,39 +7263,31 @@ module.exports = register; } 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 - + } + // 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 - + } + // 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 { @@ -7799,10 +7295,8 @@ module.exports = register; 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); @@ -7831,13 +7325,11 @@ module.exports = register; return root.value.id(); } }; - var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { if (!root) return []; var left = [], - right = [], - leaves = []; - + right = [], + leaves = []; if (k === 0) { // don't cut tree, simply return all nodes as 1 single cluster if (root.left) getAllChildren(root.left, left); @@ -7846,6 +7338,7 @@ module.exports = register; return [cy.collection(leaves)]; } else if (k === 1) { // cut at root + if (root.value) { // leaf node return [cy.collection(root.value)]; @@ -7864,33 +7357,29 @@ module.exports = register; } } }; - /* eslint-enable */ - var hierarchicalClustering = function hierarchicalClustering(options) { var cy = this.cy(); - var nodes = this.nodes(); // Set parameters of algorithm: linkage type, distance metric, etc. + 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 - + }; + // 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 + // 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]], @@ -7901,45 +7390,42 @@ module.exports = register; index[n] = cluster; dists[n] = []; mins[n] = 0; - } // Calculate the distance between each pair of clusters - + } + // 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. - + } + // 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; - var retClusters; // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // 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 @@ -7947,10 +7433,8 @@ module.exports = register; retClusters[i] = cy.collection(cluster.value); }); } - return retClusters; }; - var hierarchicalClustering$1 = { hierarchicalClustering: hierarchicalClustering, hca: hierarchicalClustering @@ -7972,17 +7456,13 @@ module.exports = register; // 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))) { @@ -7990,29 +7470,24 @@ module.exports = register; return "'".concat(p, "'"); }).join(', '), "] or a number. Got: ").concat(pref)); } - return defaults$9(options); }; - /* eslint-enable */ - 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 - + }; + // 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') { @@ -8025,114 +7500,89 @@ module.exports = register; // 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 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 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 + } + // 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 + 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 } @@ -8143,60 +7593,50 @@ module.exports = register; S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); } } - } // Place preferences on the diagonal of S - + } + // 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 - + } + // Initialize R responsibility matrix R = new Array(n2); - for (var _i4 = 0; _i4 < n2; _i4++) { R[_i4] = 0.0; - } // Initialize A availability matrix - + } + // 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; - + 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; @@ -8205,96 +7645,77 @@ module.exports = register; 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 - + } + // 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 - + } + // 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 + // Identify exemplars (cluster centers) + var exemplarsIndices = findExemplars(n, R, A); + // Assign nodes to clusters var clusterIndices = 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 @@ -8313,11 +7734,9 @@ module.exports = register; directed: args[1] }; } - var _hierholzerDefaults = hierholzerDefaults(options), - root = _hierholzerDefaults.root, - directed = _hierholzerDefaults.directed; - + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; var eles = this; var dflag = false; var oddIn; @@ -8326,17 +7745,14 @@ module.exports = register; 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) { @@ -8344,7 +7760,6 @@ module.exports = register; } else if (d2 > 1 || d1 > 1) { dflag = true; } - nodes[id] = []; ele.outgoers().forEach(function (e) { if (e.isEdge()) nodes[id].push(e.id()); @@ -8356,14 +7771,11 @@ module.exports = register; } 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()); @@ -8373,7 +7785,6 @@ module.exports = register; } }); } - var result = { found: false, trail: undefined @@ -8383,7 +7794,6 @@ module.exports = register; if (startVertex && oddOut != startVertex) { return result; } - startVertex = oddOut; } else { if (startVertex && oddOut != startVertex && oddIn != startVertex) { @@ -8395,17 +7805,14 @@ module.exports = register; } 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; @@ -8417,18 +7824,14 @@ module.exports = register; }); 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())); @@ -8437,7 +7840,6 @@ module.exports = register; subtour = walk(subtour.shift()).concat(subtour); } } - trail.unshift(eles.getElementById(subtour.shift())); // final node for (var d in nodes) { @@ -8445,7 +7847,6 @@ module.exports = register; return result; } } - result.found = true; result.trail = this.spawn(trail, true); return result; @@ -8460,17 +7861,14 @@ module.exports = register; 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); @@ -8479,7 +7877,6 @@ module.exports = register; var nodeId = node.id(); var connectedEdges = node.connectedEdges().intersection(eles); component.merge(node); - if (!nodes[nodeId].cutVertex) { component.merge(connectedEdges); } else { @@ -8491,7 +7888,6 @@ module.exports = register; }); components.push(component); }; - var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { if (root === parent) edgeCount += 1; nodes[currentNode] = { @@ -8500,7 +7896,6 @@ module.exports = register; cutVertex: false }; var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); - if (edges.size() === 0) { components.push(eles.spawn(eles.getElementById(currentNode))); } else { @@ -8509,10 +7904,8 @@ module.exports = register; 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({ @@ -8521,11 +7914,9 @@ module.exports = register; 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); @@ -8537,11 +7928,9 @@ module.exports = register; }); } }; - eles.forEach(function (ele) { if (ele.isNode()) { var nodeId = ele.id(); - if (!(nodeId in nodes)) { edgeCount = 0; biconnectedSearch(nodeId, nodeId); @@ -8559,7 +7948,6 @@ module.exports = register; components: components }; }; - var hopcroftTarjanBiconnected$1 = { hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, htbc: hopcroftTarjanBiconnected, @@ -8574,7 +7962,6 @@ module.exports = register; var components = []; var stack = []; var cut = eles.spawn(eles); - var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { stack.push(sourceNodeId); nodes[sourceNodeId] = { @@ -8585,43 +7972,35 @@ module.exports = register; 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); } @@ -8632,7 +8011,6 @@ module.exports = register; components: components }; }; - var tarjanStronglyConnected$1 = { tarjanStronglyConnected: tarjanStronglyConnected, tsc: tarjanStronglyConnected, @@ -8652,54 +8030,33 @@ module.exports = register; */ /* 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] */ + 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 */ + /* 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 */ + 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 */ + /* support optional executor function */ if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); }; - /* promise API methods */ - + /* promise API methods */ api.prototype = { /* promise resolving methods */ fulfill: function fulfill(value) { @@ -8708,204 +8065,136 @@ module.exports = register; 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] */ - + 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] */ + return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */ } }; - /* deliver an action */ + /* 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] */ - + 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 */ - + /* 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 */ - + /* 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 */ + /* iterate over all handlers, exactly once */ var handlers = curr[name]; - curr[name] = []; - /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ - + 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] */ - + } /* [Promises/A+ 2.2.5] */ }; - /* execute procedure asynchronously */ - - /* [Promises/A+ 2.2.4, 3.1] */ - + /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */ if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); }; - /* generate a resolver function */ - + /* 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 { + 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] */ - + } /* [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] */ + resolve(next, result); /* [Promises/A+ 2.2.7.1] */ } }; }; - /* "Promise Resolution Procedure" */ - - /* [Promises/A+ 2.3] */ - + /* "Promise Resolution Procedure" */ /* [Promises/A+ 2.3] */ var resolve = function resolve(promise, x) { - /* sanity check arguments */ - - /* [Promises/A+ 2.3.1] */ + /* 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] */ - + } /* [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] */ + /* 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] */ + 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] */ + }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */ function (r) { if (resolved) return; - resolved = true; - /* [Promises/A+ 2.3.3.3.3] */ - + 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] */ + 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() + /* 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); @@ -8920,29 +8209,24 @@ module.exports = register; } }); }; - 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; @@ -8952,11 +8236,9 @@ module.exports = register; _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 || { @@ -8965,7 +8247,6 @@ module.exports = register; }; _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); } - if (isCore) { var pan = target.pan(); _p.startPan = { @@ -8973,13 +8254,12 @@ module.exports = register; y: pan.y }; _p.startZoom = target.zoom(); - } // for future timeline/animations impl - + } + // for future timeline/animations impl this.length = 1; this[0] = this; }; - var anifn = Animation.prototype; extend(anifn, { instanceString: function instanceString() { @@ -8987,41 +8267,38 @@ module.exports = register; }, 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); - q.push(this); // add to the animation loop pool - + // 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 + 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... + this.hook(); + + // the animation loop will start the animation... return this; }, @@ -9032,9 +8309,10 @@ module.exports = register; 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 + this.hook(); + + // the animation loop will apply the animation at this progress return this; }, @@ -9063,7 +8341,6 @@ module.exports = register; }, time: function time(t) { var _p = this._private; - if (t === undefined) { return _p.progress * _p.duration; } else { @@ -9073,22 +8350,18 @@ module.exports = register; 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() { @@ -9097,29 +8370,24 @@ module.exports = register; 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 + swap('position', 'startPosition'); + // swap styles if (_p.style) { for (var i = 0; i < _p.style.length; i++) { var prop = _p.style[i]; @@ -9129,28 +8397,23 @@ module.exports = register; _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(); @@ -9168,50 +8431,42 @@ module.exports = register; 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, @@ -9220,14 +8475,13 @@ module.exports = register; }; }, // 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, @@ -9236,24 +8490,21 @@ module.exports = register; }; }, // 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 } @@ -9261,30 +8512,26 @@ module.exports = register; 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 - + } + // override pan w/ panBy if set if (isCore && properties.panBy != null) { var panBy = properties.panBy; var cyPan = cy.pan(); @@ -9292,39 +8539,34 @@ module.exports = register; x: cyPan.x + panBy.x, y: cyPan.y + panBy.y }; - } // override pan w/ center if set - + } + // 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 - + } + // 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 - + } + // 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; } @@ -9337,23 +8579,21 @@ module.exports = register; }; }, // 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 - + } + // 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); @@ -9362,55 +8602,49 @@ module.exports = register; } : 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 - + } + // 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`) - + } + // we have to notify (the animation loop doesn't do it for us on `stop`) cy.notify('draw'); return this; }; } // stop - }; // define /** @@ -10641,42 +9875,40 @@ module.exports = register; 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; - var single = selfIsArrayLike ? self[0] : self; // .data('foo', ...) - + // .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); - var path = isPathLike && toPath_1(name); // .data('foo') - + // .data('foo') if (p.allowGetting && value === undefined) { // get - var ret; + var ret; if (single) { - p.beforeGet(single); // check if it's path and a field with the same name doesn't exist + 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; - return ret; // .data('foo', 'bar') + // .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); @@ -10684,78 +9916,75 @@ module.exports = register; ele._private[p.field][name] = value; } } - } // update mappers if asked - + } + // update mappers if asked if (p.updateStyle) { self.updateStyle(); - } // call onSet callback - + } + // call onSet callback p.onSet(self); - if (p.settingTriggersEvent) { self[p.triggerFnName](p.settingEvent); } } - } // .data({ 'foo': 'bar' }) + } + // .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 - + } + // update mappers if asked if (p.updateStyle) { self.updateStyle(); - } // call onSet callback - + } + // call onSet callback p.onSet(self); - if (p.settingTriggersEvent) { self[p.triggerFnName](p.settingEvent); - } // .data(function(){ ... }) + } + // .data(function(){ ... }) } else if (p.allowBinding && fn$6(name)) { // bind to event var fn = name; - self.on(p.bindingEvent, fn); // .data() + 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 = { @@ -10764,68 +9993,59 @@ module.exports = register; 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') + // .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() + } + // .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 = { @@ -10833,8 +10053,9 @@ module.exports = register; 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.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); @@ -10843,7 +10064,6 @@ module.exports = register; self.off.apply(self, offArgs); resolve(e); }; - var onArgs = args.concat([callback]); var offArgs = onArgs.concat([]); self.on.apply(self, onArgs); @@ -10871,55 +10091,50 @@ module.exports = register; 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 + 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 + 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 - + } + // 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 - + } + // 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) { @@ -10934,7 +10149,6 @@ module.exports = register; // extract classes from string classes = classes.match(/\S+/g) || []; } - var self = this; var toggleUndefd = toggle === undefined; var changed = []; // eles who had classes changed @@ -10943,12 +10157,10 @@ module.exports = register; 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; @@ -10956,21 +10168,17 @@ module.exports = register; 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 - + // 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) { @@ -10978,7 +10186,6 @@ module.exports = register; }, flashClass: function flashClass(classes, duration) { var self = this; - if (duration == null) { duration = 250; } else if (duration === 0) { @@ -10994,6 +10201,7 @@ module.exports = register; }; 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 @@ -11017,39 +10225,31 @@ module.exports = register; 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 + 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 - + } + // 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; } })(); @@ -11073,64 +10273,44 @@ module.exports = register; 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 }; @@ -11288,19 +10468,15 @@ module.exports = register; // 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); }; @@ -11308,22 +10484,21 @@ module.exports = register; 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; + }; + + // 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 @@ -11331,8 +10506,7 @@ module.exports = register; regex: '(' + tokens.group + ')', populate: function populate(selector, query, _ref) { var _ref2 = _slicedToArray(_ref, 1), - group = _ref2[0]; - + group = _ref2[0]; query.checks.push({ type: Type.GROUP, value: group === '*' ? group : group + 's' @@ -11344,8 +10518,7 @@ module.exports = register; regex: stateSelectorRegex, populate: function populate(selector, query, _ref3) { var _ref4 = _slicedToArray(_ref3, 1), - state = _ref4[0]; - + state = _ref4[0]; query.checks.push({ type: Type.STATE, value: state @@ -11357,8 +10530,7 @@ module.exports = register; regex: '\\#(' + tokens.id + ')', populate: function populate(selector, query, _ref5) { var _ref6 = _slicedToArray(_ref5, 1), - id = _ref6[0]; - + id = _ref6[0]; query.checks.push({ type: Type.ID, value: cleanMetaChars(id) @@ -11370,8 +10542,7 @@ module.exports = register; regex: '\\.(' + tokens.className + ')', populate: function populate(selector, query, _ref7) { var _ref8 = _slicedToArray(_ref7, 1), - className = _ref8[0]; - + className = _ref8[0]; query.checks.push({ type: Type.CLASS, value: cleanMetaChars(className) @@ -11383,8 +10554,7 @@ module.exports = register; regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', populate: function populate(selector, query, _ref9) { var _ref10 = _slicedToArray(_ref9, 1), - variable = _ref10[0]; - + variable = _ref10[0]; query.checks.push({ type: Type.DATA_EXIST, field: cleanMetaChars(variable) @@ -11396,18 +10566,15 @@ module.exports = register; 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]; - + 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), @@ -11421,9 +10588,8 @@ module.exports = register; 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]; - + boolOp = _ref14[0], + variable = _ref14[1]; query.checks.push({ type: Type.DATA_BOOL, field: cleanMetaChars(variable), @@ -11436,10 +10602,9 @@ module.exports = register; 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]; - + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; query.checks.push({ type: Type.META_COMPARE, field: cleanMetaChars(meta), @@ -11456,17 +10621,16 @@ module.exports = register; 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 + 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 } @@ -11484,25 +10648,26 @@ module.exports = register; type: Type.DIRECTED_EDGE, source: source, target: target - }); // the query in the selector should be the edge rather than the source + }); + // 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 + 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 + }); + // 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 @@ -11521,11 +10686,13 @@ module.exports = register; edgeQuery.checks.push({ type: Type.UNDIRECTED_EDGE, nodes: [source, target] - }); // the query in the selector should be the edge rather than the source + }); + // 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 + selector.edgeCount++; + // we're now populating the target query with expressions that follow return target; } else { // neighbourhood @@ -11536,8 +10703,9 @@ module.exports = register; type: Type.NODE_NEIGHBOR, node: node, neighbor: neighbor - }); // the query in the selector should be the neighbourhood rather than the node + }); + // 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 } @@ -11556,11 +10724,13 @@ module.exports = register; type: Type.CHILD, parent: parent, child: child - }); // the query in the selector should be the '>' itself + }); + // 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 + selector.compoundCount++; + // we're now populating the child query with expressions that follow return child; } else if (selector.currentSubject === query) { // compound split query @@ -11568,40 +10738,37 @@ module.exports = register; var left = selector[selector.length - 1]; var right = newQuery(); var subject = newQuery(); - var _child = newQuery(); + var _parent = newQuery(); - var _parent = newQuery(); // set up the root compound q - - + // 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 + }); + // 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 + // 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` + 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 @@ -11609,17 +10776,15 @@ module.exports = register; // 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 + }]; + // 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++; @@ -11640,11 +10805,13 @@ module.exports = register; type: Type.DESCENDANT, ancestor: ancestor, descendant: descendant - }); // the query in the selector should be the '>' itself + }); + // 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 + selector.compoundCount++; + // we're now populating the descendant query with expressions that follow return descendant; } else if (selector.currentSubject === query) { // compound split query @@ -11652,40 +10819,37 @@ module.exports = register; var left = selector[selector.length - 1]; var right = newQuery(); var subject = newQuery(); - var _descendant = newQuery(); + var _ancestor = newQuery(); - var _ancestor = newQuery(); // set up the root compound q - - + // 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 + }); + // 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 + // 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` + 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 @@ -11693,17 +10857,15 @@ module.exports = register; // 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 + }]; + // 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++; @@ -11719,24 +10881,24 @@ module.exports = register; 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]; - topChk.neighbor = topChk.nodes[0]; // clean up unused fields for new type - + // clean up unused fields for new type topChk.nodes = null; } } @@ -11750,17 +10912,14 @@ module.exports = register; * @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; @@ -11778,30 +10937,26 @@ module.exports = register; 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; @@ -11811,15 +10966,14 @@ module.exports = register; 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 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) { @@ -11827,30 +10981,27 @@ module.exports = register; } } - remaining = exprInfo.remaining; // we're done when there's nothing left to parse + 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 + 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; @@ -11858,21 +11009,18 @@ module.exports = register; 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 toString = function toString() { if (this.toStringCache != null) { return this.toStringCache; } - var clean = function clean(obj) { if (obj == null) { return ''; @@ -11880,7 +11028,6 @@ module.exports = register; return obj; } }; - var cleanVal = function cleanVal(val) { if (string(val)) { return '"' + val + '"'; @@ -11888,76 +11035,63 @@ module.exports = register; return clean(val); } }; - var space = function space(val) { return ' ' + val + ' '; }; - var checkToString = function checkToString(check, subject) { var type = check.type, - value = check.value; - + 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; + operator = check.operator; return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; } - case Type.DATA_BOOL: { var _operator = check.operator, - _field = check.field; + _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; + _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); @@ -11965,31 +11099,25 @@ module.exports = register; 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; }; @@ -12007,86 +11135,71 @@ module.exports = register; 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 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 - + } + // 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; } @@ -12102,66 +11215,56 @@ module.exports = register; }; /** 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; + 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; + 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; + operator = check.operator; return boolCmp(data$1(ele, field), operator); }; - match[Type.DATA_EXIST] = function (check, ele) { var field = check.field; - check.operator; + 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]; @@ -12169,114 +11272,94 @@ module.exports = register; 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 + 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? - + // 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 @@ -12288,7 +11371,6 @@ module.exports = register; this.compoundCount = 0; this.edgeCount = 0; this.length = 0; - if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { this.addQuery({ checks: [{ @@ -12311,32 +11393,25 @@ module.exports = register; 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 = { @@ -12355,23 +11430,19 @@ module.exports = register; 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) { @@ -12379,20 +11450,19 @@ module.exports = register; if (this === collection) { return true; } - collection = this.cy().collection(collection); var thisLength = this.length; - var collectionLength = collection.length; // cheap length check + var collectionLength = collection.length; + // cheap length check if (thisLength !== collectionLength) { return false; - } // cheap element ref check - + } + // cheap element ref check if (thisLength === 1) { return this[0] === collection[0]; } - return this.every(function (ele) { return collection.hasElementWithId(ele.id()); }); @@ -12427,20 +11497,17 @@ module.exports = register; 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 { @@ -12454,45 +11521,38 @@ module.exports = register; var elesfn$f = { parent: function parent(selector) { - var parents = []; // optimisation for single ele call + 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(); @@ -12514,16 +11574,13 @@ module.exports = register; }, 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) { @@ -12531,128 +11588,106 @@ module.exports = register; }, 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 - + } + // 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 - + }; + // aliases elesfn$f.ancestors = elesfn$f.parents; var fn$5, elesfn$e; @@ -12718,53 +11753,44 @@ module.exports = register; }), id: function id() { var ele = this[0]; - if (ele) { return ele._private.data.id; } } - }; // aliases + }; + // 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())) { @@ -12788,25 +11814,20 @@ module.exports = register; } }) }); - 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; @@ -12831,37 +11852,30 @@ module.exports = register; 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', @@ -12911,12 +11925,9 @@ module.exports = register; 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); @@ -12925,18 +11936,16 @@ module.exports = register; } } } - 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, @@ -12950,34 +11959,29 @@ module.exports = register; }; 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 + 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) { @@ -12986,7 +11990,6 @@ module.exports = register; } 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 @@ -12997,13 +12000,11 @@ module.exports = register; 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); @@ -13016,7 +12017,6 @@ module.exports = register; // getting var pos = ele.position(); rpos = modelToRenderedPosition(pos, zoom, pan); - if (dim === undefined) { // then return the whole rendered position return rpos; @@ -13031,6 +12031,7 @@ module.exports = register; return this; // chaining }, + // get/set the position relative to the parent relativePosition: function relativePosition(dim, val) { var ele = this[0]; @@ -13038,7 +12039,6 @@ module.exports = register; 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) { @@ -13047,16 +12047,13 @@ module.exports = register; 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]); @@ -13071,27 +12068,20 @@ module.exports = register; } 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; @@ -13106,8 +12096,9 @@ module.exports = register; return this; // chaining } - }; // aliases + }; + // 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; @@ -13116,7 +12107,6 @@ module.exports = register; var fn$3, elesfn$b; fn$3 = elesfn$b = {}; - elesfn$b.renderedBoundingBox = function (options) { var bb = this.boundingBox(options); var cy = this.cy(); @@ -13135,21 +12125,17 @@ module.exports = register; 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'); } @@ -13157,25 +12143,23 @@ module.exports = register; }); 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 + 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) - + } + // 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'; @@ -13198,8 +12182,9 @@ module.exports = register; // 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 + 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, @@ -13210,42 +12195,33 @@ module.exports = register; 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; } @@ -13255,31 +12231,22 @@ module.exports = register; 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; @@ -13292,42 +12259,34 @@ module.exports = register; _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 - + } + // 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; @@ -13335,31 +12294,25 @@ module.exports = register; 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; @@ -13370,9 +12323,9 @@ module.exports = register; } else { x = rstyle.midX; y = rstyle.midY; - } // always store the individual arrow bounds - + } + // always store the individual arrow bounds var bbs = _p.arrowBounds = _p.arrowBounds || {}; var bb = bbs[prefix] = bbs[prefix] || {}; bb.x1 = x - halfArW; @@ -13385,24 +12338,19 @@ module.exports = register; 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'); @@ -13425,7 +12373,6 @@ module.exports = register; 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; @@ -13437,42 +12384,38 @@ module.exports = register; 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 - + } + // 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 + 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] || {}; @@ -13484,37 +12427,32 @@ module.exports = register; 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 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; @@ -13523,7 +12461,6 @@ module.exports = register; y: x * sin + y * cos + yo }; }; - var px1y1 = rotate(lx1, ly1); var px1y2 = rotate(lx1, ly2); var px2y1 = rotate(lx2, ly1); @@ -13533,7 +12470,6 @@ module.exports = register; 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; @@ -13545,11 +12481,51 @@ module.exports = register; updateBounds(bounds, lx1, ly1, lx2, ly2); updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); } - return bounds; - }; // get the bounding box of the elements (in raw model position) - - + }; + 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(); @@ -13559,63 +12535,54 @@ module.exports = register; 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 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) - var displayed = !styleEnabled || isDisplayed(ele) // must take into account connected nodes b/c of implicit edge hiding on display:none node + // 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 + var halfH = h / 2; + + // handle node dimensions ///////////////////////// ex1 = x - halfW; @@ -13623,61 +12590,62 @@ module.exports = register; 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) + 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 + 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 + 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 === 'segments' || curveStyle === 'taxi') { var pts; - switch (curveStyle) { case 'bezier': case 'unbundled-bezier': pts = rstyle.bezierPts; break; - case 'segments': case 'taxi': pts = rstyle.linePts; break; } - if (pts != null) { for (var j = 0; j < pts.length; j++) { var pt = pts[j]; @@ -13689,11 +12657,12 @@ module.exports = register; } } } // 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(); @@ -13702,56 +12671,54 @@ module.exports = register; 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 - + } + // 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 - //////// + } + // 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 - + } + // 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 ////////// @@ -13761,66 +12728,57 @@ module.exports = register; 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 - + } + // 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 + 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); @@ -13829,24 +12787,21 @@ module.exports = register; 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; @@ -13856,30 +12811,25 @@ module.exports = register; 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 - + } + // 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); @@ -13887,7 +12837,6 @@ module.exports = register; updateBoundsFromBox(bb, _p.bodyBounds); } } - if (opts.includeLabels) { if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { updateBoundsFromBox(bb, _p.labelBounds.all); @@ -13895,24 +12844,19 @@ module.exports = register; 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, @@ -13922,23 +12866,23 @@ module.exports = register; 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 + 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(); @@ -13947,7 +12891,6 @@ module.exports = register; 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]; @@ -13958,15 +12901,12 @@ module.exports = register; 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); @@ -13975,7 +12915,6 @@ module.exports = register; 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; @@ -13995,47 +12934,39 @@ module.exports = register; _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 + }; + + // 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(); @@ -14046,7 +12977,6 @@ module.exports = register; useCache: false })); nodes.silentPositions(getOldPos); - if (hasCompoundNodes) { parents.dirtyCompoundBoundsCache(); parents.dirtyBoundingBoxCache(); @@ -14056,41 +12986,34 @@ module.exports = register; 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; } @@ -14099,18 +13022,15 @@ module.exports = register; } } }; - 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 { @@ -14118,40 +13038,32 @@ module.exports = register; } } }; - 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 { @@ -14161,17 +13073,14 @@ module.exports = register; 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) { @@ -14179,14 +13088,12 @@ module.exports = register; 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(); @@ -14197,27 +13104,21 @@ module.exports = register; }); } }; - 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, @@ -14237,19 +13138,15 @@ module.exports = register; 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); @@ -14259,7 +13156,6 @@ module.exports = register; return ifEdgeRenderedPosition(this, spec.get); }; } - return obj; }, {}); @@ -14272,31 +13168,30 @@ module.exports = register; 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 - + } + // 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.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 @@ -14304,9 +13199,9 @@ module.exports = register; } else { // Event string this.type = src; - } // Put explicitly provided properties onto the event object - + } + // Put explicitly provided properties onto the event object if (props != null) { // more efficient to manually copy fields we use this.originalEvent = props.originalEvent; @@ -14318,7 +13213,6 @@ module.exports = register; 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; @@ -14328,20 +13222,19 @@ module.exports = register; x: pos.x * zoom + pan.x, y: pos.y * zoom + pan.y }; - } // Create a timestamp if incoming event doesn't have one - + } + // 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 preventDefault exists run it on the original event if (e.preventDefault) { e.preventDefault(); } @@ -14349,12 +13242,11 @@ module.exports = register; stopPropagation: function stopPropagation() { this.isPropagationStopped = returnTrue; var e = this.originalEvent; - if (!e) { return; - } // if stopPropagation exists run it on the original event - + } + // if stopPropagation exists run it on the original event if (e.stopPropagation) { e.stopPropagation(); } @@ -14369,70 +13261,55 @@ module.exports = register; }; 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 - /*context, listener, eventObj*/ - eventMatches() { + eventMatches: function eventMatches( /*context, listener, eventObj*/ + ) { return true; }, - addEventFields: function - /*context, evt*/ - addEventFields() {}, - callbackContext: function callbackContext(context - /*, listener, eventObj*/ - ) { + addEventFields: function addEventFields( /*context, evt*/ + ) {}, + callbackContext: function callbackContext(context /*, listener, eventObj*/) { return context; }, - beforeEmit: function - /* context, listener, eventObj */ - beforeEmit() {}, - afterEmit: function - /* context, listener, eventObj */ - afterEmit() {}, - bubble: function - /*context*/ - bubble() { + beforeEmit: function beforeEmit( /* context, listener, eventObj */ + ) {}, + afterEmit: function afterEmit( /* context, listener, eventObj */ + ) {}, + bubble: function bubble( /*context*/ + ) { return false; }, - parent: function - /*context*/ - parent() { + 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; @@ -14440,27 +13317,21 @@ module.exports = register; 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 - } } }; @@ -14469,7 +13340,6 @@ module.exports = register; self.addEventFields(self.context, obj); return new Event(obj.type, obj); }; - var forEachEventObj = function forEachEventObj(self, handler, events) { if (event(events)) { handler(self, events); @@ -14478,16 +13348,12 @@ module.exports = register; 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) { @@ -14502,7 +13368,6 @@ module.exports = register; } } }; - p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { if (fn$6(callback)) { @@ -14518,60 +13383,46 @@ module.exports = register; 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*/ - ) { + 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 = [{ @@ -14582,42 +13433,32 @@ module.exports = register; }]; 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); } @@ -14636,11 +13477,9 @@ module.exports = register; }, eventMatches: function eventMatches(ele, listener, eventObj) { var selector = listener.qualifier; - if (selector != null) { return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); } - return true; }, addEventFields: function addEventFields(ele, evt) { @@ -14650,9 +13489,7 @@ module.exports = register; callbackContext: function callbackContext(ele, listener, eventObj) { return listener.qualifier != null ? eventObj.target : ele; }, - beforeEmit: function beforeEmit(context, listener - /*, eventObj*/ - ) { + beforeEmit: function beforeEmit(context, listener /*, eventObj*/) { if (listener.conf && listener.conf.once) { listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); } @@ -14664,7 +13501,6 @@ module.exports = register; return ele.isChild() ? ele.parent() : ele.cy(); } }; - var argSelector$1 = function argSelector(arg) { if (string(arg)) { return new Selector(arg); @@ -14672,18 +13508,15 @@ module.exports = register; 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() { @@ -14691,22 +13524,18 @@ module.exports = register; }, 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() { @@ -14714,22 +13543,18 @@ module.exports = register; 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, { @@ -14743,7 +13568,6 @@ module.exports = register; var ele = this[i]; ele.emitter().emit(events, extraParams); } - return this; }, emitAndNotify: function emitAndNotify(event, extraParams) { @@ -14751,9 +13575,8 @@ module.exports = register; if (this.length === 0) { return; } // empty collections don't need to notify anything - // notify renderer - + // notify renderer this.cy().notify(event, this); this.emit(event, extraParams); return this; @@ -14776,17 +13599,14 @@ module.exports = register; 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 @@ -14801,21 +13621,18 @@ module.exports = register; } 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; @@ -14823,18 +13640,14 @@ module.exports = register; 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; } }, @@ -14848,70 +13661,57 @@ module.exports = register; 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 { @@ -14919,7 +13719,6 @@ module.exports = register; } } }; - add(col1, col2, left); add(col2, col1, right); return { @@ -14930,50 +13729,39 @@ module.exports = register; }, 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; @@ -14983,19 +13771,21 @@ module.exports = register; }); } } - 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 + 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 + 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]; @@ -15006,9 +13796,9 @@ module.exports = register; ele: lastEle, index: i }); - } // the collection is now 1 ele smaller - + } + // the collection is now 1 ele smaller this.length--; return this; }, @@ -15019,7 +13809,6 @@ module.exports = register; var id = ele._private.data.id; var map = _p.map; var entry = map.get(id); - if (!entry) { return this; // no need to remove } @@ -15031,70 +13820,58 @@ module.exports = register; // 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 @@ -15104,24 +13881,22 @@ module.exports = register; 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 + }; + // 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; @@ -15145,7 +13920,6 @@ module.exports = register; }, group: function group() { var ele = this[0]; - if (ele) { return ele._private.group; } @@ -15164,56 +13938,42 @@ module.exports = register; * 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' - - + } + // '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' - - + } + // '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) - - + } + // compare indices in the core (order added to graph w/ last on top) return a.poolIndex() - b.poolIndex(); }; @@ -15221,15 +13981,12 @@ module.exports = register; 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 - } } @@ -15237,37 +13994,29 @@ module.exports = register; }, 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() { @@ -15292,7 +14041,6 @@ module.exports = register; if (!fn$6(sortFn)) { return this; } - var sorted = this.toArray().sort(sortFn); return this.spawn(sorted); }, @@ -15301,18 +14049,15 @@ module.exports = register; }, zDepth: function zDepth() { var ele = this[0]; - if (!ele) { return undefined; - } // let cy = ele.cy(); - + } + // 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 } @@ -15327,8 +14072,8 @@ module.exports = register; } } }; - elesfn$6.each = elesfn$6.forEach; + 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 @@ -15336,7 +14081,6 @@ module.exports = register; if (isIteratorSupported) { elesfn$6[Symbol.iterator] = function () { var _this = this; - // eslint-disable-line no-undef var entry = { value: undefined, @@ -15352,7 +14096,6 @@ module.exports = register; entry.value = undefined; entry.done = true; } - return entry; } }, Symbol.iterator, function () { @@ -15362,7 +14105,6 @@ module.exports = register; }; } }; - defineSymbolIterator(); var getLayoutDimensionOptions = defaults$g({ @@ -15373,7 +14115,6 @@ module.exports = register; layoutDimensions: function layoutDimensions(options) { options = getLayoutDimensionOptions(options); var dims; - if (!this.takesUpSpace()) { dims = { w: 0, @@ -15390,13 +14131,12 @@ module.exports = register; w: this.outerWidth(), h: this.outerHeight() }; - } // sanitise the dimensions for external layouts (avoid division by zero) - + } + // 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) @@ -15406,11 +14146,9 @@ module.exports = register; }); 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({ @@ -15418,7 +14156,6 @@ module.exports = register; layout: layout }); layout.animations = []; - var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { var center = { x: nodesBb.x1 + nodesBb.w / 2, @@ -15434,47 +14171,36 @@ module.exports = register; 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, @@ -15486,7 +14212,6 @@ module.exports = register; node.position(newPos); } } - if (options.fit) { var fitAni = cy.animation({ fit: { @@ -15506,7 +14231,6 @@ module.exports = register; }); layout.animations.push(zoomPanAni); } - layout.animations.forEach(function (ani) { return ani.play(); }); @@ -15526,19 +14250,15 @@ module.exports = register; }); } 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', @@ -15550,24 +14270,24 @@ module.exports = register; layout: layout }); } - return this; // chaining }, + layout: function layout(options) { var cy = this.cy(); return cy.makeLayout(extend({}, options, { eles: this })); } - }; // aliases: + }; + // 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 { @@ -15575,49 +14295,39 @@ module.exports = register; 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()); @@ -15629,17 +14339,14 @@ module.exports = register; 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); @@ -15649,15 +14356,13 @@ module.exports = register; 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 ); - + } + // let changedEles = style.apply( updatedEles ); var changedEles = updatedEles; - if (notifyRenderer) { changedEles.emitAndNotify('style'); // let renderer know we changed style } else { @@ -15669,17 +14374,15 @@ module.exports = register; }); 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; @@ -15692,15 +14395,12 @@ module.exports = register; 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) { @@ -15712,11 +14412,9 @@ module.exports = register; }, 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; @@ -15724,11 +14422,9 @@ module.exports = register; }, numericStyleUnits: function numericStyleUnits(property) { var ele = this[0]; - if (!ele.cy().styleEnabled()) { return; } - if (ele) { return ele.pstyle(property).units; } @@ -15737,13 +14433,10 @@ module.exports = register; // 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); } @@ -15751,14 +14444,11 @@ module.exports = register; // 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; @@ -15768,7 +14458,6 @@ module.exports = register; if (value === undefined) { // then get the property from the style var ele = this[0]; - if (ele) { return style.getStylePropertyValue(ele, name); } else { @@ -15782,7 +14471,6 @@ module.exports = register; } } else if (name === undefined) { var _ele = this[0]; - if (_ele) { return style.getRawStyle(_ele); } else { @@ -15790,20 +14478,17 @@ module.exports = register; 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]; @@ -15811,45 +14496,40 @@ module.exports = register; } } 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]; @@ -15857,20 +14537,16 @@ module.exports = register; 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; @@ -15881,54 +14557,42 @@ module.exports = register; }, 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 { @@ -15939,7 +14603,6 @@ module.exports = register; } }; } - var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); }); @@ -15957,15 +14620,12 @@ module.exports = register; 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); }); @@ -15974,20 +14634,16 @@ module.exports = register; 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; @@ -15996,83 +14652,72 @@ module.exports = register; 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 ) + 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 ) + } + + // 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. 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, @@ -16088,7 +14733,6 @@ module.exports = register; value: false }); } - defineSwitchSet({ field: 'locked', overrideField: function overrideField(ele) { @@ -16123,15 +14767,12 @@ module.exports = register; 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', @@ -16142,72 +14783,59 @@ module.exports = register; on: 'panify', off: 'unpanify' }); - elesfn$3.inactive = function () { var ele = this[0]; - if (ele) { return !ele._private.active; } }; - var elesfn$2 = {}; // DAG functions + 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); @@ -16217,56 +14845,44 @@ module.exports = register; } } } - 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({ @@ -16294,34 +14910,36 @@ module.exports = register; predecessors: defineDagAllHops({ incoming: true }) - }); // Neighbourhood functions + }); + + // 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 + 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 + 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 - + } + // add connected edge elements.push(edge[0]); } } - return this.spawn(elements, true).filter(selector); }, 'neighborhood'), closedNeighborhood: function closedNeighborhood(selector) { @@ -16330,32 +14948,31 @@ module.exports = register; openNeighborhood: function openNeighborhood(selector) { return this.neighborhood(selector); } - }); // aliases + }); + // aliases elesfn$2.neighbourhood = elesfn$2.neighborhood; elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; - elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; // Edge functions + 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({ @@ -16365,110 +14982,88 @@ module.exports = register; 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 + 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'), @@ -16476,7 +15071,6 @@ module.exports = register; codirected: true }), 'codirectedEdges') }); - function defineParallelEdgesFunction(params) { var defaults = { codirected: false @@ -16486,16 +15080,18 @@ module.exports = register; // micro-optimised for renderer var elements = []; var edges = this.edges(); - var p = params; // look at all the edges in the collection + 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 + 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; @@ -16503,18 +15099,17 @@ module.exports = register; 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 - ///////////////// + } + // Misc functions + ///////////////// extend(elesfn$2, { components: function components(root) { @@ -16523,7 +15118,6 @@ module.exports = register; 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 @@ -16534,11 +15128,9 @@ module.exports = register; 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(); @@ -16562,11 +15154,9 @@ module.exports = register; }); }); }; - do { _loop(); } while (unvisited.length > 0); - return components; }, component: function component() { @@ -16576,35 +15166,32 @@ module.exports = register; }); 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]) && !element(elements[0])) { - createdElements = true; // make elements from json and restore all at once later + 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; - var _data = json.data; // make sure newly created elements have valid ids - + // 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)) { @@ -16615,21 +15202,15 @@ module.exports = register; 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, { @@ -16637,32 +15218,25 @@ module.exports = register; 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(), { @@ -16672,47 +15246,40 @@ module.exports = register; } } }; - if (unique) { this._private.map = map; - } // restore the elements if we created them from json - + } + // restore the elements if we created them from json if (createdElements && !removed) { this.restore(); } - }; // Functions + }; + + // 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; @@ -16721,90 +15288,71 @@ module.exports = register; 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(); + 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); } @@ -16812,13 +15360,11 @@ module.exports = register; // 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 } @@ -16829,15 +15375,14 @@ module.exports = register; } } } - if (obj.position) { ele.position(obj.position); - } // ignore group -- immutable + } + // 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](); @@ -16846,22 +15391,20 @@ module.exports = register; } } }; - 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), @@ -16882,23 +15425,18 @@ module.exports = register; 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(); @@ -16906,33 +15444,29 @@ module.exports = register; 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 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 - + } + // keep nodes first in the array and edges after if (ele.isNode()) { // put to front of array if node nodes.push(ele); @@ -16941,66 +15475,65 @@ module.exports = register; edges.push(ele); } } - elements = nodes.concat(edges); var i; - var removeFromElements = function removeFromElements() { elements.splice(i, 1); i--; - }; // now, restore each element - + }; + // 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 + 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 + 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 + 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 + 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 } @@ -17015,62 +15548,50 @@ module.exports = register; 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 + 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 - + // 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 - + // 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; @@ -17081,71 +15602,57 @@ module.exports = register; } 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 + // 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]; - node._private.parent = parent[0]; // let the core know we have a compound graph - + // 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 + } + // 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 }; @@ -17153,46 +15660,40 @@ module.exports = register; 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 + 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 - + } + // 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 @@ -17201,30 +15702,28 @@ module.exports = register; } 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) + } + // 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 + 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]; @@ -17239,31 +15738,23 @@ module.exports = register; 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(); } @@ -17271,130 +15762,110 @@ module.exports = register; } 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 - + } + // 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 - + } + // 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 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); }); @@ -17402,57 +15873,56 @@ module.exports = register; var corefn$9 = { add: function add(opts) { var elements; - var cy = this; // add the 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 + } + + // specify an array of options else if (array(opts)) { var _jsons = opts; elements = new Collection(cy, _jsons); - } // specify via opts.nodes and opts.edges + } + + // 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 + } + + // specify options for one element else { var _json = opts; elements = new Element(cy, _json).collection(); } - return elements; }, remove: function remove(collection) { @@ -17460,7 +15930,6 @@ module.exports = register; var selector = collection; collection = this.$(selector); } - return collection.remove(); } }; @@ -17470,108 +15939,88 @@ module.exports = register; /*! 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. */ + 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. */ - + /* 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. */ - + /* 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; - + 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; - + 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); - + guessForT = intervalStart + dist * kSampleStepSize, + initialSlope = getSlope(guessForT, mX1, mX2); if (initialSlope >= NEWTON_MIN_SLOPE) { return newtonRaphsonIterate(aX, guessForT); } else if (initialSlope === 0.0) { @@ -17580,37 +16029,28 @@ module.exports = register; 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, @@ -17620,25 +16060,20 @@ module.exports = register; 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, @@ -17651,71 +16086,64 @@ module.exports = register; 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); + 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; + 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. */ + /* 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]; }; @@ -17728,7 +16156,6 @@ module.exports = register; return start + (end - start) * bezier(percent); }; }; - var easings = { 'linear': function linear(start, end, percent) { return start + (end - start) * percent; @@ -17767,6 +16194,7 @@ module.exports = register; '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 @@ -17785,32 +16213,24 @@ module.exports = register; 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 !== '%')) { @@ -17822,28 +16242,22 @@ module.exports = register; 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); @@ -17851,10 +16265,8 @@ module.exports = register; easedArr.push(ei); } } - return easedArr; } - return undefined; } @@ -17866,7 +16278,6 @@ module.exports = register; var startTime = ani_p.startTime; var cy = isCore ? self : self.cy(); var style = cy.style(); - if (!ani_p.easingImpl) { if (pEasing == null) { // use default @@ -17874,7 +16285,6 @@ module.exports = register; } else { // then define w/ name var easingVals; - if (string(pEasing)) { var easingProp = style.parse('transition-timing-function', pEasing); easingVals = easingProp.value; @@ -17882,9 +16292,7 @@ module.exports = register; // then assume preparsed array easingVals = pEasing; } - var name, args; - if (string(easingVals)) { name = easingVals; args = []; @@ -17894,7 +16302,6 @@ module.exports = register; return +n; }); } - if (args.length > 0) { // create with args if (name === 'spring') { @@ -17908,80 +16315,62 @@ module.exports = register; } } } - 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]; @@ -17993,27 +16382,22 @@ module.exports = register; 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; } @@ -18026,35 +16410,31 @@ module.exports = register; 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 + 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 - + }; + // 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; @@ -18063,32 +16443,25 @@ module.exports = register; callbacks(ani_p.frames); continue; } - if (!ani_p.playing && !ani_p.applying) { continue; - } // an apply() while playing shouldn't do anything - + } + // 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; @@ -18096,39 +16469,34 @@ module.exports = register; 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 - + // 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); - var ranCoreAni = stepOne(cy, true); // notify renderer - + // 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 - + } + // remove elements from list of currently animating if its queues are empty eles.unmerge(doneEles); cy.emit('step'); } // stepAll @@ -18144,12 +16512,10 @@ module.exports = register; stop: 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() { @@ -18158,27 +16524,23 @@ module.exports = register; 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) { @@ -18201,11 +16563,9 @@ module.exports = register; }, eventMatches: function eventMatches(cy, listener, eventObj) { var selector = listener.qualifier; - if (selector != null) { return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); } - return true; }, addEventFields: function addEventFields(cy, evt) { @@ -18216,7 +16576,6 @@ module.exports = register; return listener.qualifier != null ? eventObj.target : cy; } }; - var argSelector = function argSelector(arg) { if (string(arg)) { return new Selector(arg); @@ -18224,15 +16583,12 @@ module.exports = register; 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() { @@ -18288,33 +16644,26 @@ module.exports = register; 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 @@ -18327,15 +16676,12 @@ module.exports = register; 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 } @@ -18343,24 +16689,21 @@ module.exports = register; return; } // exit on disabled + var renderer = this.renderer(); - var renderer = this.renderer(); // exit if destroy() called on core or renderer in between frames #1499 #1528 - + // 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) { @@ -18373,37 +16716,30 @@ module.exports = register; }, 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(); - var renderer = this.renderer(); // notify the renderer of queued eles and event types - + // 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 { @@ -18411,7 +16747,6 @@ module.exports = register; } }); } - return this; }, batch: function batch(callback) { @@ -18425,7 +16760,6 @@ module.exports = register; 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]; @@ -18469,16 +16803,13 @@ module.exports = register; 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); @@ -18489,17 +16820,13 @@ module.exports = register; 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 = {}; @@ -18531,38 +16858,31 @@ module.exports = register; 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 { @@ -18572,75 +16892,65 @@ module.exports = register; mutableElements: function mutableElements() { return this._private.elements; } - }; // aliases + }; + // aliases corefn$3.elements = corefn$3.filter = corefn$3.$; - var styfn$8 = {}; // keys for style blocks, e.g. ttfftt + var styfn$8 = {}; + // keys for style blocks, e.g. ttfftt var TRUE = 't'; - var FALSE = 'f'; // (potentially expensive calculation) + 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) { @@ -18651,27 +16961,23 @@ module.exports = register; 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 + 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) { @@ -18679,22 +16985,19 @@ module.exports = register; 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 + 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' @@ -18706,7 +17009,6 @@ module.exports = register; } } // for context - diffProps = self.getPropertiesDiff(prevKey, cxtKey); ele._private.styleCxtKey = cxtKey; return { @@ -18714,53 +17016,46 @@ module.exports = register; diffPropNames: diffProps, empty: diffProps.length === 0 }; - }; // gets a computed ele style object based on matched contexts - + }; + // 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 + 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) { @@ -18777,14 +17072,14 @@ module.exports = register; "delete": true }; } - } // save cycles when the context prop doesn't need to be applied - + } + // 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 - + } + // 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 @@ -18792,141 +17087,125 @@ module.exports = register; ) { // 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'; - var isNode = _p.group === 'nodes'; // get the style key hashes per prop group + // 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 + }; + + // - 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 - + } + // 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) + 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 - // + } + // 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]); - _p.styleKey = combineHashes(hash[0], hash[1]); // label dims + // label dims // var sk = _p.styleKeys; @@ -18934,7 +17213,6 @@ module.exports = register; 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); @@ -18942,27 +17220,27 @@ module.exports = register; var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); _p.targetLabelKey = combineHashesArray(targetLabelKeys); _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); - } // node - // + } + // node + // if (isNode) { var _p$styleKeys = _p.styleKeys, - nodeBody = _p$styleKeys.nodeBody, - nodeBorder = _p$styleKeys.nodeBorder, - backgroundImage = _p$styleKeys.backgroundImage, - compound = _p$styleKeys.compound, - pie = _p$styleKeys.pie; - var nodeKeys = [nodeBody, nodeBorder, backgroundImage, compound, pie].filter(function (k) { + 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 = ''; @@ -18976,7 +17254,9 @@ module.exports = register; _p.targetLabelStyleKey = null; _p.nodeKey = null; _p.hasPie = null; - }; // apply a property to the style (for internal use) + }; + + // apply a property to the style (for internal use) // returns whether application was successful // // now, this function flattens the property, and here's how: @@ -18992,8 +17272,6 @@ module.exports = register; // // for parsedProp:{ bypass: true } // the generated flattenedProp:{ bypassed: parsedProp } - - styfn$8.applyParsedProperty = function (ele, parsedProp) { var self = this; var prop = parsedProp; @@ -19006,7 +17284,6 @@ module.exports = register; var origPropIsBypass = origProp && origProp.bypass; var _p = ele._private; var flatPropMapping = 'mapping'; - var getVal = function getVal(p) { if (p == null) { return null; @@ -19016,31 +17293,26 @@ module.exports = register; return p.value; } }; - var checkTriggers = function checkTriggers() { var fromVal = getVal(origProp); var toVal = getVal(prop); self.checkTriggers(ele, prop.name, fromVal, toVal); }; - if (prop && prop.name.substr(0, 3) === 'pie') { - warn('The pie style properties are deprecated. Create charts using background images instead.'); - } // 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 + // 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) { @@ -19054,9 +17326,9 @@ module.exports = register; } else { return false; // we're unsuccessful deleting the bypassed } - } // check if we need to delete the current bypass - + } + // 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) { @@ -19075,9 +17347,9 @@ module.exports = register; 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 - + }; + // put the property in the style objects switch (prop.mapped) { // flatten the property if mapped case types.mapData: @@ -19085,41 +17357,35 @@ module.exports = register; // 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 - + } + // 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]; @@ -19150,70 +17416,55 @@ module.exports = register; 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 + // 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 @@ -19221,9 +17472,9 @@ module.exports = register; default: return false; // not a valid mapping - } // if the property is a bypass property, then link the resultant property to the original one - + } + // 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 @@ -19232,7 +17483,6 @@ module.exports = register; // then link the orig prop to the new bypass prop.bypassed = origProp; } - style[prop.name] = prop; // and set } else { // prop is not bypass @@ -19244,28 +17494,23 @@ module.exports = register; 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; @@ -19276,37 +17521,34 @@ module.exports = register; } } } - }; // updates the visual style for all elements (useful for manual style modification after init) - + }; + // 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 } } - + }; + // 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 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; @@ -19316,38 +17558,36 @@ module.exports = register; if (!fromProp) { continue; - } // consider px values - + } + // 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; - initVal = fromProp.pfValue + initDt * diff; // consider numerical values + // 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; - initVal = fromProp.value + initDt * diff; // consider colour values + // 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 - + } + // 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 - + // 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) { @@ -19365,7 +17605,8 @@ module.exports = register; }).then(function () { // if( !isBypass ){ self.removeBypasses(ele, props); - ele.emitAndNotify('style'); // } + ele.emitAndNotify('style'); + // } _p.transitioning = false; }); @@ -19375,67 +17616,70 @@ module.exports = register; _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 + ele.dirtyBoundingBoxCache(); - if ( // only for beziers -- so performance of other edges isn't affected - prop.triggersBoundsOfParallelBeziers && (name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier') || name === 'display' && (fromValue === 'none' || toValue === 'none'))) { + // 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 + 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 + 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); } @@ -19444,7 +17688,6 @@ module.exports = register; } else if (string(name)) { // then parse the single property var _parsedProp = this.parse(name, value, true); - if (_parsedProp) { props.push(_parsedProp); } @@ -19453,19 +17696,15 @@ module.exports = register; 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); } @@ -19474,58 +17713,49 @@ module.exports = register; } else { // can't do anything without well defined properties return false; - } // we've failed if there are no valid properties - + } + // we've failed if there are no valid properties if (props.length === 0) { return false; - } // now, apply the bypass properties on the elements - + } + // 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 - + }; + // 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]; @@ -19533,17 +17763,14 @@ module.exports = register; 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) { @@ -19551,37 +17778,28 @@ module.exports = register; } 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 @@ -19590,111 +17808,95 @@ module.exports = register; 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 + 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 - + }; + // 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 + 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 - + }; + // 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; - + 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) { @@ -19716,19 +17918,15 @@ module.exports = register; 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)) { @@ -19737,48 +17935,38 @@ module.exports = register; 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) { @@ -19786,7 +17974,6 @@ module.exports = register; 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]); @@ -19794,17 +17981,13 @@ module.exports = register; } } } - 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; @@ -19820,52 +18003,47 @@ module.exports = register; } return style; - }; // accessible cy.style() function - + }; + // 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 - + }; + // 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 + 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) { @@ -19874,7 +18052,6 @@ module.exports = register; remaining = ''; } } - function removePropAndValFromRem() { // remove the parsed property and value from the remaining block text to parse if (blockRem.length > propAndValStr.length) { @@ -19883,104 +18060,87 @@ module.exports = register; 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]; - selAndBlockStr = selAndBlock[0]; // parse the selector - + // 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 + 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 - + } + // 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 + 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 + 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 - + } + // 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(); @@ -19989,25 +18149,22 @@ module.exports = register; }; 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)$', '^(.+)$']; - var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; // each visual style property has a type and needs to be validated according to it - + // each visual style property has a type and needs to be validated according to it styfn$2.types = { time: { number: true, @@ -20055,6 +18212,11 @@ module.exports = register; integer: true, unitless: true }, + nonNegativeNumber: { + number: true, + min: 0, + unitless: true + }, position: { enums: ['parent', 'origin'] }, @@ -20211,6 +18373,12 @@ module.exports = register; arrowFill: { enums: ['filled', 'hollow'] }, + arrowWidth: { + number: true, + units: '%|px|em', + implicitUnits: 'px', + enums: ['match-line'] + }, display: { enums: ['element', 'none'] }, @@ -20295,7 +18463,7 @@ module.exports = register; unitless: true }, edgeDistances: { - enums: ['intersection', 'node-position'] + enums: ['intersection', 'node-position', 'endpoints'] }, edgeEndpoint: { number: true, @@ -20309,11 +18477,9 @@ module.exports = register; 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; } @@ -20327,6 +18493,7 @@ module.exports = register; 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, @@ -20342,7 +18509,6 @@ module.exports = register; 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) { @@ -20359,7 +18525,9 @@ module.exports = register; var empty2 = emptyString(str2); return empty1 && !empty2 || !empty1 && empty2; } - }; // define visual style properties + }; + + // 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 @@ -20517,17 +18685,19 @@ module.exports = register; }]; var behavior = [{ name: 'events', - type: t.bool + type: t.bool, + triggersZOrder: diff.any }, { name: 'text-events', - type: t.bool + type: t.bool, + triggersZOrder: diff.any }]; var visibility = [{ name: 'display', type: t.display, triggersZOrder: diff.any, triggersBounds: diff.any, - triggersBoundsOfParallelBeziers: true + triggersBoundsOfConnectedEdges: true }, { name: 'visibility', type: t.visibility, @@ -20552,7 +18722,7 @@ module.exports = register; triggersZOrder: diff.any }, { name: 'z-index', - type: t.nonNegativeInt, + type: t.number, triggersZOrder: diff.any }]; var overlay = [{ @@ -20600,7 +18770,6 @@ module.exports = register; 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) @@ -20608,7 +18777,6 @@ module.exports = register; return parsedProp.pfValue; } }; - var nodeBody = [{ name: 'height', type: t.nodeSize, @@ -20675,6 +18843,24 @@ module.exports = register; name: 'border-style', type: t.borderStyle }]; + 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 @@ -20901,16 +19087,15 @@ module.exports = register; }, { name: 'outside-texture-bg-opacity', type: t.zeroOneNumber - }]; // pie backgrounds for nodes + }]; + // 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', @@ -20924,9 +19109,9 @@ module.exports = register; name: 'pie-' + i + '-background-opacity', type: t.zeroOneNumber }); - } // edge arrows - + } + // edge arrows var edgeArrow = []; var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; [{ @@ -20939,11 +19124,14 @@ module.exports = register; }, { 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; + triggersBounds = prop.triggersBounds; edgeArrow.push({ name: name, type: type, @@ -20951,7 +19139,7 @@ module.exports = register; }); }); }, {}); - var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + 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, @@ -20969,6 +19157,7 @@ module.exports = register; // node props nodeBody: nodeBody, nodeBorder: nodeBorder, + nodeOutline: nodeOutline, backgroundImage: backgroundImage, pie: pie, compound: compound, @@ -20986,8 +19175,9 @@ module.exports = register; propGroups[key].forEach(function (prop) { return prop.groupKey = key; }); - }); // define aliases + }); + // define aliases var aliases = styfn$2.aliases = [{ name: 'content', pointsTo: 'label' @@ -21012,18 +19202,20 @@ module.exports = register; }, { name: 'padding-bottom', pointsTo: 'padding' - }]; // list of property names + }]; + // 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 ) + }); + // 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 - + } + // map aliases for (var _i2 = 0; _i2 < aliases.length; _i2++) { var alias = aliases[_i2]; var pointsToProp = props[alias.pointsTo]; @@ -21031,8 +19223,9 @@ module.exports = register; name: alias.name, alias: true, pointsTo: pointsToProp - }; // add alias prop for parsing + }; + // add alias prop for parsing props.push(aliasProp); props[alias.name] = aliasProp; // allow lookup by name } @@ -21041,14 +19234,11 @@ module.exports = register; 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', @@ -21147,6 +19337,11 @@ module.exports = register; 'border-opacity': 1, 'border-width': 0, 'border-style': 'solid', + 'outline-color': '#999', + 'outline-opacity': 1, + 'outline-width': 0, + 'outline-offset': 0, + 'outline-style': 'solid', 'height': 30, 'width': 30, 'shape': 'ellipse', @@ -21190,7 +19385,6 @@ module.exports = register; var val = prop.value; css[name] = val; } - return css; }, {}), { // edge props @@ -21229,6 +19423,9 @@ module.exports = register; }, { 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; @@ -21238,24 +19435,19 @@ module.exports = register; 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', @@ -21289,32 +19481,31 @@ module.exports = register; this.defaultLength = this.length; }; - var styfn$1 = {}; // a caching layer for property parsing + 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 + 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 - + } + // - 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 } @@ -21322,27 +19513,23 @@ module.exports = register; 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 + }; + + // 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') @@ -21350,38 +19537,29 @@ module.exports = register; 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 - + // 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) - + // check if bypass is null or empty string (i.e. indication to delete bypass property) if (propIsBypass && (value === '' || value === null)) { return { name: name, @@ -21389,9 +19567,9 @@ module.exports = register; bypass: true, deleteBypass: true }; - } // check if value is a function used as a mapper - + } + // check if value is a function used as a mapper if (fn$6(value)) { return { name: name, @@ -21400,17 +19578,15 @@ module.exports = register; mapped: types.fn, bypass: propIsBypass }; - } // check if value is mapped - + } + // 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, @@ -21424,34 +19600,27 @@ module.exports = register; if (propIsBypass) { return false; } // mappers not allowed in bypass - - if (type.multiple) { return false; } // impossible to map to num + var _mapped = types.mapData; - var _mapped = types.mapData; // we can map only if the type is a colour or a number - + // 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 - + // 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 @@ -21461,7 +19630,8 @@ module.exports = register; var same = c1[0] === c2[0] // red && c1[1] === c2[1] // green && c1[2] === c2[2] // blue - && ( // optional alpha + && ( + // 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? @@ -21470,7 +19640,6 @@ module.exports = register; if (same) { return false; } // can't make a mapper without a range - } return { @@ -21487,10 +19656,8 @@ module.exports = register; bypass: propIsBypass }; } - if (type.multiple && propIsFlat !== 'multiple') { var vals; - if (valueIsString) { vals = value.split(/\s+/); } else if (array(value)) { @@ -21498,17 +19665,14 @@ module.exports = register; } 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); @@ -21517,11 +19681,9 @@ module.exports = register; 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 { @@ -21534,7 +19696,6 @@ module.exports = register; return null; } } - return { name: name, value: valArr, @@ -21543,13 +19704,12 @@ module.exports = register; bypass: propIsBypass, units: unitsArr }; - } // several types also allow enums - + } + // 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, @@ -21559,11 +19719,10 @@ module.exports = register; }; } } - return null; - }; // check the type and return the appropriate object - + }; + // check the type and return the appropriate object if (type.number) { var units; var implicitUnits = 'px'; // not set => px @@ -21572,22 +19731,16 @@ module.exports = register; // 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; @@ -21597,82 +19750,78 @@ module.exports = register; } } - value = parseFloat(value); // if not a number and enums not allowed, then the value is invalid + 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) - + } + // 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 - + } + // check if value must be an integer if (type.integer && !integer(value)) { return null; - } // check value is within range - + } + // 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 + }; + // 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 - + } + // normalise value in ms if (units === 'ms' || units === 's') { ret.pfValue = units === 'ms' ? value : 1000 * value; - } // normalise value in rad - + } + // normalise value in rad if (units === 'deg' || units === 'rad') { ret.pfValue = units === 'rad' ? value : deg2rad(value); - } // normalize value in % - + } + // 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+/); + 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, @@ -21681,11 +19830,9 @@ module.exports = register; }; } else if (type.color) { var tuple = color2tuple(value); - if (!tuple) { return null; } - return { name: name, value: tuple, @@ -21698,19 +19845,14 @@ module.exports = register; // 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 { @@ -21721,7 +19863,6 @@ module.exports = register; }; } } - return null; // didn't match any } else if (type.string) { // just return @@ -21743,12 +19884,10 @@ module.exports = register; 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: {} @@ -21756,23 +19895,19 @@ module.exports = register; this.length = 0; this.resetToDefault(); }; - var styfn = Style.prototype; - styfn.instanceString = function () { return 'style'; - }; // remove all contexts - + }; + // 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 = {}; @@ -21789,19 +19924,18 @@ module.exports = register; this.clear(); this.addDefaultStylesheet(); return this; - }; // builds a style object for the 'core' selector - + }; + // 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 - + }; + // 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: [], @@ -21809,42 +19943,41 @@ module.exports = register; index: i }; return this; // chaining - }; // add one or many css rules to the current context - + }; + // 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 + } + // do nothing if args are invalid return this; // chaining }; - styfn.style = styfn.css; // add a single css rule to the current context + 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 + 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); @@ -21853,19 +19986,16 @@ module.exports = register; 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 - + } + // add to core style if necessary var currentSelectorIsCore = !this[i].selector; - if (currentSelectorIsCore) { this._private.coreStyle[property.name] = property; } } - return this; // chaining }; @@ -21878,21 +20008,18 @@ module.exports = register; this.appendFromString(style); } // you probably wouldn't want to append a Style, since you'd duplicate the default parts - return this; - }; // static function - + }; + // 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); }); @@ -21908,12 +20035,10 @@ module.exports = register; 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)) { @@ -21923,7 +20048,6 @@ module.exports = register; } else { _p.style = Style(this); } - return _p.style; }, // e.g. cy.data() changed => recalc ele mappers @@ -21940,34 +20064,32 @@ module.exports = register; } 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; @@ -21975,7 +20097,6 @@ module.exports = register; } else { return _p.selectionType; } - return this; }, panningEnabled: function panningEnabled(bool) { @@ -21984,55 +20105,53 @@ module.exports = register; } 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') @@ -22043,37 +20162,28 @@ module.exports = register; 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 @@ -22082,15 +20192,14 @@ module.exports = register; 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)) { @@ -22098,29 +20207,22 @@ module.exports = register; 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 @@ -22129,9 +20231,9 @@ module.exports = register; 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; @@ -22139,22 +20241,19 @@ module.exports = register; 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); @@ -22172,21 +20271,19 @@ module.exports = register; } 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 = 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 = { @@ -22199,18 +20296,15 @@ module.exports = register; 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; @@ -22219,7 +20313,6 @@ module.exports = register; } else if (number$1(max) && min === undefined && max >= _p.minZoom) { _p.maxZoom = max; } - return this; }, minZoom: function minZoom(zoom) { @@ -22245,42 +20338,37 @@ module.exports = register; 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 - + } + // crop zoom zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; - zoom = zoom < _p.minZoom ? _p.minZoom : zoom; // can't zoom with invalid params + 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; @@ -22314,51 +20402,41 @@ module.exports = register; // 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 { @@ -22366,61 +20444,52 @@ module.exports = register; 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(); @@ -22436,7 +20505,6 @@ module.exports = register; if (!this._private.panningEnabled || !this._private.zoomingEnabled) { return this; } - this.viewport({ pan: { x: 0, @@ -22446,6 +20514,7 @@ module.exports = register; }); return this; // chaining }, + invalidateSize: function invalidateSize() { this._private.sizeCache = null; }, @@ -22455,11 +20524,9 @@ module.exports = register; 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') @@ -22506,10 +20573,12 @@ module.exports = register; if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; return this; // chaining } - }; // aliases + }; - corefn$1.centre = corefn$1.center; // backwards compatibility + // aliases + corefn$1.centre = corefn$1.center; + // backwards compatibility corefn$1.autolockNodes = corefn$1.autolock; corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; @@ -22550,37 +20619,33 @@ module.exports = register; triggerEvent: true, updateStyle: true }) - }; // aliases + }; + // 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') }) + 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; @@ -22590,7 +20655,6 @@ module.exports = register; options.renderer = extend({ name: head ? 'canvas' : 'null' }, options.renderer); - var defVal = function defVal(def, val, altVal) { if (val !== undefined) { return val; @@ -22600,7 +20664,6 @@ module.exports = register; return def; } }; - var _p = this._private = { container: container, // html dom ele container @@ -22648,51 +20711,46 @@ module.exports = register; hasCompoundNodes: false, multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) }; + this.createEmitter(); - this.createEmitter(); // set selection type - - this.selectionType(options.selectionType); // init zoom bounds + // 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 - + }; + // start with the default stylesheet so we have something before loading an external stylesheet if (_p.styleEnabled) { cy.setStyle([]); - } // create the renderer - + } + // 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 + 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 @@ -22707,41 +20765,39 @@ module.exports = register; 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 + var initEles = thens[1]; + // init style if (_p.styleEnabled) { cy.style().append(initStyle); - } // initial load - + } + // initial load setElesAndLayout(initEles, function () { // onready cy.startAnimationLoop(); - _p.ready = true; // if a ready callback is specified as an option, the bind it + _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 - + } + // 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, { @@ -22760,7 +20816,6 @@ module.exports = register; } else { this.on('ready', fn); } - return this; }, destroy: function destroy() { @@ -22789,12 +20844,11 @@ module.exports = register; }, 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() { @@ -22804,26 +20858,21 @@ module.exports = register; 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; @@ -22855,35 +20904,27 @@ module.exports = register; 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(); + 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({ @@ -22900,35 +20941,28 @@ module.exports = register; } } } - 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 = _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()]; @@ -22938,54 +20972,47 @@ module.exports = register; } else { ele.remove(); } - }); // so that children are not removed w/parent + }); + // 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 + }); + // 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(); @@ -22994,19 +21021,15 @@ module.exports = register; 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; @@ -23034,7 +21057,6 @@ module.exports = register; }); /* eslint-disable no-unused-vars */ - var defaults$7 = { fit: true, // whether to fit the viewport to the graph @@ -23075,28 +21097,25 @@ module.exports = register; 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; @@ -23116,18 +21135,15 @@ module.exports = register; 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); @@ -23137,7 +21153,6 @@ module.exports = register; } else { var components = eles.components(); roots = cy.collection(); - var _loop = function _loop(_i) { var comp = components[_i]; var maxDegree = comp.maxDegree(false); @@ -23146,21 +21161,17 @@ module.exports = register; }); 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, { @@ -23168,17 +21179,15 @@ module.exports = register; depth: d }); }; - var changeDepth = function changeDepth(ele, newDepth) { var _getInfo = getInfo(ele), - depth = _getInfo.depth, - index = _getInfo.index; - + depth = _getInfo.depth, + index = _getInfo.index; depths[depth][index] = null; addToDepth(ele, newDepth); - }; // find the depths of the nodes - + }; + // find the depths of the nodes graph.bfs({ roots: roots, directed: options.directed, @@ -23188,46 +21197,41 @@ module.exports = register; addToDepth(ele, depth); foundByBfs[id] = true; } - }); // check for nodes not found by bfs + }); + // 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 + } + // 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) { @@ -23235,49 +21239,39 @@ module.exports = register; }); 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) - + }; + // 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); @@ -23290,10 +21284,9 @@ module.exports = register; } assignDepths(); // clear holes - // find min distance we need to leave between nodes + // 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]; @@ -23302,101 +21295,84 @@ module.exports = register; var h = nbb.h; minDistance = Math.max(minDistance, w, h); } - } // get the weighted percent for an element based on its connectivity to other levels - + } + // 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 + 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 + }; + // 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 - + } + // 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 - + } + // 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 @@ -23404,18 +21380,15 @@ module.exports = register; 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; - + 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, @@ -23425,18 +21398,15 @@ module.exports = register; } 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 }; @@ -23481,13 +21451,11 @@ module.exports = register; 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; @@ -23495,11 +21463,9 @@ module.exports = register; 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, @@ -23514,7 +21480,6 @@ module.exports = register; 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); @@ -23522,16 +21487,15 @@ module.exports = register; 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 - + } + // 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 @@ -23539,10 +21503,8 @@ module.exports = register; 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); @@ -23553,7 +21515,6 @@ module.exports = register; }; return pos; }; - eles.nodes().layoutPositions(this, options, getPos); return this; // chaining }; @@ -23610,13 +21571,11 @@ module.exports = register; 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; @@ -23635,57 +21594,54 @@ module.exports = register; 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 + var value = void 0; + // calculate the node value value = options.concentric(node); nodeValues.push({ value: value, node: node - }); // for style mapping + }); + // 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 + // 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 - + } + // 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 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 + } + // create positions from levels var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes @@ -23695,16 +21651,16 @@ module.exports = register; 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 - + } + // 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 + 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); @@ -23713,43 +21669,34 @@ module.exports = register; 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 - + } + // 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; @@ -23759,9 +21706,9 @@ module.exports = register; }; pos[_val.node.id()] = p; } - } // position the nodes - + } + // position the nodes eles.nodes().layoutPositions(this, options, function (ele) { var id = ele.id(); return pos[id]; @@ -23779,10 +21726,10 @@ module.exports = register; Modifications tracked on Github. */ var DEBUG; + /** * @brief : default layout options */ - var defaults$4 = { // Called on `layoutready` ready: function ready() {}, @@ -23847,85 +21794,99 @@ module.exports = register; // 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 - + } + // 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 + // Initialize layout info + var layoutInfo = createLayoutInfo(cy, layout, options); + // Show LayoutInfo contents if debugging if (DEBUG) { printLayoutInfo(layoutInfo); - } // If required, randomize node positions - + } + // 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 + 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 + // Do one step in the phisical simulation + step(layoutInfo, options); - layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; // logDebug("New temperature: " + layoutInfo.temperature); + // 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 + refresh(); + // Layout has finished layout.one('layoutstop', options.stop); layout.emit({ type: 'layoutstop', @@ -23937,60 +21898,48 @@ module.exports = register; 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 }; @@ -23999,17 +21948,15 @@ module.exports = register; 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(); @@ -24036,17 +21983,15 @@ module.exports = register; }; 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 - + } + // Iterate over all nodes, creating layout nodes for (var i = 0; i < layoutInfo.nodeSize; i++) { var n = nodes[i]; var nbb = n.layoutDimensions(options); @@ -24069,28 +22014,30 @@ module.exports = register; 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 + tempNode.padBottom = parseFloat(n.style('padding')); - layoutInfo.layoutNodes.push(tempNode); // Add entry to id-index map + // 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 - + } + // 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 + 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 - + 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); @@ -24099,91 +22046,92 @@ module.exports = register; queue[++end] = n.id; tempGraph.push(n.id); } - } // Add root graph to graphSet - + } - layoutInfo.graphSet.push(tempGraph); // Traverse the graph, level by level, + // 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 - + 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 - + } + // 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 - + } + // 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 + 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 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 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 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 - + } + // 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 + + } + + // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + // ". Depth: " + depth); - // Update idealLength - + // Update idealLength idealLength *= depth * options.nestingFactor; } - tempEdge.idealLength = idealLength; tempEdge.elasticity = elasticity; layoutInfo.layoutEdges.push(tempEdge); - } // Finally, return layoutInfo object - + } + // Finally, return layoutInfo object return layoutInfo; }; + /** * @brief : This function finds the index of the lowest common * graph ancestor between 2 nodes in the subtree @@ -24195,12 +22143,9 @@ module.exports = register; * @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 @@ -24209,6 +22154,7 @@ module.exports = register; return res.graph; } }; + /** * @brief : Auxiliary function used for LCA computation * @@ -24223,40 +22169,35 @@ module.exports = register; * 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 - + 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 - + } + // 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 + 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; @@ -24266,38 +22207,34 @@ module.exports = register; 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 + 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 = { @@ -24306,7 +22243,6 @@ var printLayoutInfo; y1: Infinity, y2: -Infinity }; - if (options.boundingBox) { nodes.forEach(function (node) { var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; @@ -24318,10 +22254,8 @@ var printLayoutInfo; 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; @@ -24338,22 +22272,23 @@ var printLayoutInfo; } }; }; + /** * @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 + nodes.positions(getScaledPos); + // Trigger layoutReady only on first call if (true !== layoutInfo.ready) { // s = 'Triggering layoutready'; // logDebug(s); @@ -24365,6 +22300,7 @@ var printLayoutInfo; }); } }; + /** * @brief : Logs a debug message in JS console, if DEBUG is ON */ @@ -24380,29 +22316,27 @@ var printLayoutInfo; * @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 + // 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 @@ -24410,14 +22344,15 @@ var printLayoutInfo; // logDebug(s); for (var i = 0; i < layoutInfo.graphSet.length; i++) { var graph = layoutInfo.graphSet[i]; - var numNodes = graph.length; // s = "Set: " + graph.toString(); + 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); @@ -24425,113 +22360,110 @@ var printLayoutInfo; } } }; - 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 - + } + // 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 + 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 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 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 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 - + } + // 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); + } + // 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; @@ -24539,70 +22471,76 @@ var printLayoutInfo; 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 + + var nodeSlope = H / W; + + // var s = 'Computing clipping point of node ' + node.id + // " . Height: " + H + ", Width: " + W + // "\nDirection " + dX + ", " + dY; // // Compute intersection + var res = {}; - var res = {}; // Case: Vertical direction (up) - + // Case: Vertical direction (up) if (0 === dX && 0 < dY) { - res.x = X; // s += "\nUp direction"; - + res.x = X; + // s += "\nUp direction"; res.y = Y + H / 2; return res; - } // Case: Vertical direction (down) - + } + // Case: Vertical direction (down) if (0 === dX && 0 > dY) { res.x = X; - res.y = Y + H / 2; // s += "\nDown direction"; + res.y = Y + H / 2; + // s += "\nDown direction"; return res; - } // Case: Intersects the right border - + } + // 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"; + res.y = Y + W * dY / 2 / dX; + // s += "\nRightborder"; return res; - } // Case: Intersects the left border - + } + // 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"; + res.y = Y - W * dY / 2 / dX; + // s += "\nLeftborder"; return res; - } // Case: Intersects the top border - + } + // 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"; + res.y = Y + H / 2; + // s += "\nTop border"; return res; - } // Case: Intersects the bottom border - + } + // 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"; + res.y = Y - H / 2; + // s += "\nBottom border"; return res; - } // s += "\nClipping point found at " + res.x + ", " + res.y; - // logDebug(s); - + } + // 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++) { @@ -24611,66 +22549,68 @@ var printLayoutInfo; 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 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 + 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 - + } + // 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 - + } + // 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; + } + + // 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 distThreshold = 1; // var s = 'calculateGravityForces'; + // 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(); + var numNodes = graph.length; + + // s = "Set: " + graph.toString(); // logDebug(s); - // Compute graph center + // Compute graph center if (0 === i) { var centerX = layoutInfo.clientHeight / 2; var centerY = layoutInfo.clientWidth / 2; @@ -24680,32 +22620,33 @@ var printLayoutInfo; var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; var centerX = parent.positionX; var centerY = parent.positionY; - } // s = "Center found at: " + centerX + ", " + centerY; + } + // s = "Center found at: " + centerX + ", " + centerY; // logDebug(s); - // Apply force to all nodes in graph - + // 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; + 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); - + node.offsetY += fy; + // s += ": Applied force: " + fx + ", " + fy; + } + // logDebug(s); } } }; + /** * @brief : This function propagates the existing offsets from * parent nodes to its descendents. @@ -24713,62 +22654,63 @@ var printLayoutInfo; * @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 + // 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, + 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 + 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 + + 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 - + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; + // Propagate offset childNode.offsetX += offX; - childNode.offsetY += offY; // Add children to queue to be visited - + childNode.offsetY += offY; + // Add children to queue to be visited queue[++end] = children[i]; - } // Reset parent offsets - + } + // 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; @@ -24777,19 +22719,17 @@ var printLayoutInfo; 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: (" + + } + // s = "Node: " + n.id + " Previous position: (" + // n.positionX + ", " + n.positionY + ")."; - // Limit displacement in order to improve stability - + // Limit displacement in order to improve stability var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); n.positionX += tempForce.x; n.positionY += tempForce.y; @@ -24798,39 +22738,38 @@ var printLayoutInfo; 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 + ")."; + n.maxY = n.positionY + n.height; + // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; // logDebug(s); - // Update ancestry boudaries + // Update ancestry boudaries updateAncestryBoundaries(n, layoutInfo); - } // Update size, position of compund nodes - + } + // 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; + 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, @@ -24841,92 +22780,89 @@ var printLayoutInfo; x: forceX, y: forceY }; - } // s += ".\nResult: (" + res.x + ", " + res.y + ")"; - // logDebug(s); + } + // 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 - + } + // Get Parent Node var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; - var flag = false; // MaxX + 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 - + 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 - + 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 - + 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 - + 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); - + } + // 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); @@ -24934,12 +22870,10 @@ var printLayoutInfo; 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; }); @@ -24948,27 +22882,21 @@ var printLayoutInfo; 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; @@ -25020,31 +22948,26 @@ var printLayoutInfo; 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 { @@ -25058,13 +22981,11 @@ var printLayoutInfo; 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 { @@ -25072,13 +22993,11 @@ var printLayoutInfo; } } }; - 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 { @@ -25086,10 +23005,10 @@ var printLayoutInfo; } } }; - var oRows = options.rows; - var oCols = options.cols != null ? options.cols : options.columns; // if rows or columns were set in options, use those values + 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; @@ -25099,12 +23018,16 @@ var printLayoutInfo; } else if (oRows == null && oCols != null) { cols = oCols; rows = Math.ceil(cells / cols); - } // otherwise use the automatic values and adjust accordingly + } + + // 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 + 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) { @@ -25114,10 +23037,9 @@ var printLayoutInfo; // if rounding was too low, add rows or columns while (cols * rows < cells) { var _sm = small(); + var _lg = large(); - var _lg = large(); // try to add to larger side first (adds less in multiplication) - - + // try to add to larger side first (adds less in multiplication) if ((_lg + 1) * _sm >= cells) { large(_lg + 1); } else { @@ -25125,26 +23047,21 @@ var printLayoutInfo; } } } - 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; @@ -25153,143 +23070,131 @@ var printLayoutInfo; 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 - + }; + // 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 - + }; + // 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 - + } + // 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 + // constructor // options : object containing layout options - function NullLayout(options) { this.options = extend({}, defaults$2, options); - } // runs the layout - + } + // runs the layout NullLayout.prototype.run = function () { var options = this.options; var eles = options.eles; // elements to consider in the layout + var layout = this; - var layout = this; // cy is automatically populated for us in the constructor + // 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 + 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 + }); + // 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.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 - + }; + // called on continuous layouts to stop them before they finish NullLayout.prototype.stop = function () { return this; // chaining }; @@ -25305,6 +23210,8 @@ var printLayoutInfo; // 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, @@ -25322,44 +23229,34 @@ var printLayoutInfo; 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 @@ -25389,13 +23286,11 @@ var printLayoutInfo; 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; @@ -25406,14 +23301,12 @@ var printLayoutInfo; 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 }; @@ -25450,11 +23343,9 @@ var printLayoutInfo; } 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() { @@ -25470,10 +23361,11 @@ var printLayoutInfo; var BRp$f = {}; BRp$f.arrowShapeWidth = 0.3; - BRp$f.registerArrowShapes = function () { var arrowShapes = this.arrowShapes = {}; - var renderer = this; // Contract for arrow shapes: + var renderer = this; + + // Contract for arrow shapes: // 0, 0 is arrow tip // (0, 1) is direction towards node // (1, 0) is right @@ -25493,7 +23385,6 @@ var printLayoutInfo; 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); @@ -25506,39 +23397,30 @@ var printLayoutInfo; 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], @@ -25558,7 +23440,6 @@ var printLayoutInfo; gap: standardGap }, defn); }; - defineArrowShape('none', { collide: falsify, roughCollide: falsify, @@ -25618,8 +23499,10 @@ var printLayoutInfo; }); 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 + 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 @@ -25689,8 +23572,9 @@ var printLayoutInfo; }); }; - var BRp$e = {}; // Project mouse + var BRp$e = {}; + // Project mouse BRp$e.projectIntoViewport = function (clientX, clientY) { var cy = this.cy; var offsets = this.findContainerClientCoords(); @@ -25703,20 +23587,16 @@ var printLayoutInfo; 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'), @@ -25741,21 +23621,17 @@ var printLayoutInfo; 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; @@ -25764,11 +23640,9 @@ var printLayoutInfo; var minSqDist = Infinity; var nearEdge; var nearNode; - if (interactiveElementsOnly) { eles = eles.interactive; } - function addEle(ele, sqDist) { if (ele.isNode()) { if (nearNode) { @@ -25778,7 +23652,6 @@ var printLayoutInfo; near.push(ele); } } - if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { if (nearEdge) { // then replace existing edge @@ -25800,42 +23673,35 @@ var printLayoutInfo; } } } - 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(); - 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)) { 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); @@ -25844,15 +23710,15 @@ var printLayoutInfo; } } 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 + } + // 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; @@ -25878,12 +23744,10 @@ var printLayoutInfo; 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 @@ -25894,55 +23758,45 @@ var printLayoutInfo; 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) - + } + // 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; @@ -25951,14 +23805,13 @@ var printLayoutInfo; 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 + 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; @@ -25971,11 +23824,9 @@ var printLayoutInfo; } } } - 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 { @@ -25983,11 +23834,10 @@ var printLayoutInfo; checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); } } - return near; - }; // 'Give me everything from this box' - + }; + // 'Give me everything from this box' BRp$e.getAllInBox = function (x1, y1, x2, y2) { var eles = this.getCachedZSortedEles().interactive; var box = []; @@ -26005,10 +23855,8 @@ var printLayoutInfo; 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({ @@ -26016,7 +23864,6 @@ var printLayoutInfo; includeEdges: false, includeLabels: false }); - if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { box.push(node); } @@ -26024,26 +23871,21 @@ var printLayoutInfo; 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); } @@ -26052,12 +23894,10 @@ var printLayoutInfo; } } } - return box; }; var BRp$d = {}; - BRp$d.calculateArrowAngles = function (edge) { var rs = edge._private.rscratch; var isHaystack = rs.edgeType === 'haystack'; @@ -26065,11 +23905,11 @@ var printLayoutInfo; 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 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]; @@ -26081,9 +23921,10 @@ var printLayoutInfo; endX = rs.arrowEndX; endY = rs.arrowEndY; } - midX = rs.midX; - midY = rs.midY; // source + midY = rs.midY; + + // source // if (isSegments) { @@ -26099,24 +23940,21 @@ var printLayoutInfo; dispX = startX - midX; dispY = startY - midY; } + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); - rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); // mid target + // 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; @@ -26134,10 +23972,8 @@ var printLayoutInfo; 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); @@ -26146,9 +23982,7 @@ var printLayoutInfo; 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); @@ -26156,22 +23990,20 @@ var printLayoutInfo; 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 + rs.midDispY = dispY; + + // mid source // dispX *= -1; dispY *= -1; - if (isSegments) { var pts = rs.allpts; - if (pts.length / 2 % 2 === 0) ; else { var i2 = pts.length / 2 - 1; var i3 = i2 + 2; @@ -26179,8 +24011,9 @@ var printLayoutInfo; dispY = -(pts[i3 + 1] - pts[i2 + 1]); } } + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); - rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); // target + // target // if (isSegments) { @@ -26197,31 +24030,84 @@ var printLayoutInfo; 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; }; 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 = { @@ -26234,7 +24120,6 @@ var printLayoutInfo; y: Math.sin(angle) }; } - var src = _p.source; var tgt = _p.target; var srcPos = src.position(); @@ -26248,8 +24133,9 @@ var printLayoutInfo; 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.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); @@ -26258,26 +24144,23 @@ var printLayoutInfo; this.calculateLabelAngles(edge); } }; - BRp$c.findSegmentsPoints = function (edge, pairInfo) { // Segments (multiple straight lines) + var rs = edge._private.rscratch; - var posPts = pairInfo.posPts, - intersectionPts = pairInfo.intersectionPts, - vectorNormInverse = pairInfo.vectorNormInverse; - var edgeDistances = edge.pstyle('edge-distances').value; var segmentWs = edge.pstyle('segment-weights'); var segmentDs = edge.pstyle('segment-distances'); var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); rs.edgeType = 'segments'; rs.segpts = []; - 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 midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + 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 @@ -26285,12 +24168,12 @@ var printLayoutInfo; rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); } }; - BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { // Self-edge + var rs = edge._private.rscratch; var dirCounts = pairInfo.dirCounts, - srcPos = pairInfo.srcPos; + srcPos = pairInfo.srcPos; var ctrlptDists = edge.pstyle('control-point-distances'); var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; var loopDir = edge.pstyle('loop-direction').pfValue; @@ -26299,42 +24182,39 @@ var printLayoutInfo; 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 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; + 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, @@ -26347,58 +24227,53 @@ var printLayoutInfo; var loopPos = { x: Math.min(loopaPos.x, loopbPos.x), y: Math.min(loopaPos.y, loopbPos.y) - }; // avoids cases with impossible beziers + }; + // 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 vectorNormInverse = pairInfo.vectorNormInverse, - posPts = pairInfo.posPts, - intersectionPts = pairInfo.intersectionPts; - var edgeDistances = edge.pstyle('edge-distances').value; 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 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 midptPts = edgeDistances === 'node-position' ? posPts : intersectionPts; + 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 @@ -26406,9 +24281,9 @@ var printLayoutInfo; 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'; @@ -26419,26 +24294,25 @@ var printLayoutInfo; var UPWARD = 'upward'; var AUTO = 'auto'; var posPts = pairInfo.posPts, - srcW = pairInfo.srcW, - srcH = pairInfo.srcH, - tgtW = pairInfo.tgtW, - tgtH = pairInfo.tgtH; + 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 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); @@ -26446,11 +24320,9 @@ var printLayoutInfo; 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) { @@ -26460,22 +24332,18 @@ var printLayoutInfo; 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; @@ -26483,33 +24351,29 @@ var printLayoutInfo; 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; + 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; + x2 = posPts.x2; rs.segpts = [x1, y, x2, y]; } else { // L-shape fallback (turn distance not respected, but works well with tree siblings) @@ -26518,22 +24382,18 @@ var printLayoutInfo; } 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; + _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; + _y3 = posPts.y2; rs.segpts = [_x3, _y2, _x3, _y3]; } else { // L-shape (turn distance not respected, but works well for tree siblings) @@ -26544,33 +24404,31 @@ var printLayoutInfo; // ideal routing if (isVert) { var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); - var _x4 = posPts.x1, - _x5 = posPts.x2; + _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; + _y6 = posPts.y2; rs.segpts = [_x6, _y5, _x6, _y6]; } } }; - BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { - var rs = edge._private.rscratch; // can only correct beziers for now... + 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; + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape; 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); @@ -26595,18 +24453,17 @@ var printLayoutInfo; }); 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) + 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, @@ -26619,7 +24476,6 @@ var printLayoutInfo; y: rs.ctrlpts[1] + cpM.y * 2 * radius }; var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); - if (closeStartACp) { rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); @@ -26628,35 +24484,29 @@ var printLayoutInfo; 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) + 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); - if (closeEndACp) { rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); @@ -26665,33 +24515,28 @@ var printLayoutInfo; 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 + 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]; @@ -26704,8 +24549,9 @@ var printLayoutInfo; } } 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.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') { @@ -26713,7 +24559,6 @@ var printLayoutInfo; rs.allpts.push(rs.startX, rs.startY); rs.allpts.push.apply(rs.allpts, rs.segpts); rs.allpts.push(rs.endX, rs.endY); - if (rs.segpts.length % 4 === 0) { var i2 = rs.segpts.length / 2; var i1 = i2 - 2; @@ -26721,16 +24566,13 @@ var printLayoutInfo; rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; } else { var _i = rs.segpts.length / 2 - 1; - rs.midX = rs.segpts[_i]; rs.midY = rs.segpts[_i + 1]; } } }; - 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 { @@ -26740,14 +24582,11 @@ var printLayoutInfo; } } }; - 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(); @@ -26755,7 +24594,6 @@ var printLayoutInfo; map: new Map$2(), get: function get(pairId) { var map2 = this.map.get(pairId[0]); - if (map2 != null) { return map2.get(pairId[1]); } else { @@ -26764,33 +24602,31 @@ var printLayoutInfo; }, 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 + 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 + 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 === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; var src = _p.source; @@ -26799,7 +24635,6 @@ var printLayoutInfo; var tgtIndex = tgt.poolIndex(); var pairId = [srcIndex, tgtIndex].sort(); var tableEntry = hashTable.get(pairId); - if (tableEntry == null) { tableEntry = { eles: [] @@ -26807,25 +24642,21 @@ var printLayoutInfo; 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 - + } + // 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(); @@ -26833,34 +24664,31 @@ var printLayoutInfo; clearArray(pairInfo.eles); pllEdges.forEach(function (edge) { return pairInfo.eles.push(edge); - }); // for each pair id, the edges should be sorted by index + }); + // 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 + 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)]; - pairInfo.dirCounts = { 'north': 0, 'west': 0, @@ -26871,24 +24699,22 @@ var printLayoutInfo; '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 === 'segments' || _curveStyle === 'taxi'; - var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; // whether the normalised pair order is the reverse of the edge's src-tgt order - - + // 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 + 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); - var srcIntn = pairInfo.srcIntn = srcOutside; // pt outside tgt shape to calc distance/displacement from src to tgt + 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); var tgtIntn = pairInfo.tgtIntn = tgtOutside; var intersectionPts = pairInfo.intersectionPts = { @@ -26917,8 +24743,9 @@ var printLayoutInfo; var vectorNormInverse = { x: -vectorNorm.y, y: vectorNorm.x - }; // if node shapes overlap, then no ctrl pts to draw + }; + // 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) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); pairInfo.vectorNormInverse = vectorNormInverse; swappedpairInfo = { @@ -26964,12 +24791,10 @@ var printLayoutInfo; } }; } - var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; rs.nodesOverlap = passedPairInfo.nodesOverlap; rs.srcIntn = passedPairInfo.srcIntn; rs.tgtIntn = passedPairInfo.tgtIntn; - 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) { @@ -26983,42 +24808,28 @@ var printLayoutInfo; } 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.) - + // 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]; @@ -27027,30 +24838,24 @@ var printLayoutInfo; 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); @@ -27061,24 +24866,19 @@ var printLayoutInfo; }; var BRp$b = {}; - BRp$b.manualEndptToPx = function (node, prop) { var r = this; var npos = node.position(); var w = node.outerWidth(); var h = node.outerHeight(); - 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; @@ -27091,7 +24891,6 @@ var printLayoutInfo; return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); } }; - BRp$b.findEndpoints = function (edge) { var r = this; var intersect; @@ -27121,11 +24920,9 @@ var printLayoutInfo; 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) { @@ -27139,7 +24936,6 @@ var printLayoutInfo; p1 = tgtArrowFromPt; p2 = srcArrowFromPt; } - if (tgtManEndptVal === 'inside-to-node') { intersect = [tgtPos.x, tgtPos.y]; } else if (tgtManEndpt.units) { @@ -27152,9 +24948,7 @@ var printLayoutInfo; } 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); - if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { var trs = target._private.rscratch; var lw = trs.labelWidth; @@ -27164,40 +24958,32 @@ var printLayoutInfo; 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]]; } @@ -27205,14 +24991,12 @@ var printLayoutInfo; } } } - 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) { @@ -27225,58 +25009,42 @@ var printLayoutInfo; } 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); - 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]]; } @@ -27284,14 +25052,12 @@ var printLayoutInfo; } } } - 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; @@ -27300,18 +25066,15 @@ var printLayoutInfo; } } }; - 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, @@ -27319,18 +25082,15 @@ var printLayoutInfo; }; } }; - 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, @@ -27340,15 +25100,12 @@ var printLayoutInfo; }; 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({ @@ -27357,25 +25114,22 @@ var printLayoutInfo; }); } } - BRp$a.storeEdgeProjections = function (edge) { var _p = edge._private; var rs = _p.rscratch; - var et = rs.edgeType; // clear the cached points state + 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], @@ -27392,10 +25146,8 @@ var printLayoutInfo; 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); }; @@ -27403,14 +25155,11 @@ var printLayoutInfo; /* 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(); @@ -27421,35 +25170,28 @@ var printLayoutInfo; 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; @@ -27457,23 +25199,18 @@ var printLayoutInfo; 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); @@ -27481,7 +25218,6 @@ var printLayoutInfo; var lp1 = qbezierPtAt(p0, p1, p2, t1); return lineAngle(lp0, lp1); }; - BRp$9.recalculateEdgeLabelProjections = function (edge) { var p; var _p = edge._private; @@ -27492,36 +25228,32 @@ var printLayoutInfo; 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 - // - + } + // 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 = []; - var ctrlpts = []; // store each ctrlpt info init - + // store each ctrlpt info init for (var i = 0; i + 5 < rs.allpts.length; i += 4) { var p0 = { x: rs.allpts[i], @@ -27531,7 +25263,6 @@ var printLayoutInfo; x: rs.allpts[i + 2], y: rs.allpts[i + 3] }; // ctrlpt - var p2 = { x: rs.allpts[i + 4], y: rs.allpts[i + 5] @@ -27545,10 +25276,8 @@ var printLayoutInfo; 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]; @@ -27562,39 +25291,32 @@ var printLayoutInfo; }; cp.segments.push(segment); cp.length += length; - } // update each ctrlpt with segment info - + } + // 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': @@ -27604,17 +25326,16 @@ var printLayoutInfo; var cps = createControlPointInfo(); var selected; var startDist = 0; - var totalDist = 0; // find the segment we're on + 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, @@ -27623,12 +25344,10 @@ var printLayoutInfo; break; } } - if (selected) { break; } } - var cp = selected.cp; var seg = selected.segment; var tSegment = (offset - startDist) / seg.length; @@ -27639,17 +25358,15 @@ var printLayoutInfo; angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); break; } - case 'straight': case 'segments': case 'haystack': { var d = 0, - di, - d0; + di, + d0; var p0, p1; var l = rs.allpts.length; - for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { if (isSrc) { p0 = { @@ -27670,46 +25387,36 @@ var printLayoutInfo; 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); @@ -27728,13 +25435,11 @@ var printLayoutInfo; 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); @@ -27742,28 +25447,25 @@ var printLayoutInfo; } else { return getPrefixedProperty(_p.rscratch, propName, prefix); } - }; // for empty text, skip all processing - + }; + // 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 + 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; @@ -27772,28 +25474,23 @@ var printLayoutInfo; 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; @@ -27802,12 +25499,11 @@ var printLayoutInfo; if (subline) { wrappedLines.push(subline); } - subline = word + wordSeparator; } - } // if there's remaining text, put it in a wrapped line - + } + // if there's remaining text, put it in a wrapped line if (!subline.match(/^[\s\u200b]+$/)) { wrappedLines.push(subline); } @@ -27817,7 +25513,6 @@ var printLayoutInfo; } } // for - rscratch('labelWrapCachedLines', wrappedLines); text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); rscratch('labelWrapKey', labelKey); @@ -27826,50 +25521,38 @@ var printLayoutInfo; 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'; } @@ -27880,26 +25563,21 @@ var printLayoutInfo; 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'); @@ -27911,12 +25589,10 @@ var printLayoutInfo; 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); @@ -27925,7 +25601,6 @@ var printLayoutInfo; width = Math.max(w, width); height += h; } - width += padding; height += padding; return cache[cacheKey] = { @@ -27933,7 +25608,6 @@ var printLayoutInfo; height: height }; }; - BRp$9.calculateLabelAngle = function (ele, prefix) { var _p = ele._private; var rs = _p.rscratch; @@ -27941,7 +25615,6 @@ var printLayoutInfo; 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') { @@ -27952,14 +25625,12 @@ var printLayoutInfo; 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'); @@ -27969,20 +25640,16 @@ var printLayoutInfo; 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; @@ -27990,26 +25657,21 @@ var printLayoutInfo; 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]; @@ -28020,7 +25682,6 @@ var printLayoutInfo; } } }; - r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { var ele = e.target; enqueue(ele); @@ -28028,118 +25689,107 @@ var printLayoutInfo; 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) + 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() + 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 - + } + // 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) + 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 - + } + // only update if dirty and in graph if (useCache && rstyle.clean || ele.removed()) { continue; - } // only update if not display: none - + } + // 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 - + } + // 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); - this.recalculateEdgeProjections(edges); // update edge data from projections - + // 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 + var rs = _p3.rscratch; + // update rstyle positions _rstyle2.srcX = rs.arrowStartX; _rstyle2.srcY = rs.arrowStartY; _rstyle2.tgtX = rs.arrowEndX; @@ -28153,23 +25803,18 @@ var printLayoutInfo; }; 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) { @@ -28177,19 +25822,17 @@ var printLayoutInfo; } else { eles.nondrag.push(ele); } - } // put the grab target nodes last so it's on top of its neighbourhood - + } + // 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(); @@ -28202,7 +25845,6 @@ var printLayoutInfo; } else { eles = this.cachedZSortedEles; } - return eles; }; @@ -28212,17 +25854,14 @@ var printLayoutInfo; }); 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] || {}; @@ -28231,12 +25870,12 @@ var printLayoutInfo; 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 + }); + // #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; @@ -28249,25 +25888,22 @@ var printLayoutInfo; }; 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() { @@ -28276,15 +25912,13 @@ var printLayoutInfo; } }); containerWindow.addEventListener('test', null, opts); - } catch (err) {// not supported + } 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] = { @@ -28293,7 +25927,6 @@ var printLayoutInfo; once: false }; } - r.bindings.push({ target: tgt, args: args @@ -28301,7 +25934,6 @@ var printLayoutInfo; (tgt.addEventListener || tgt.on).apply(tgt, args); return this; }; - return { on: on, addEventListener: on, @@ -28309,28 +25941,22 @@ var printLayoutInfo; 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({ @@ -28340,19 +25966,18 @@ var printLayoutInfo; }); } }; - 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 + 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; @@ -28361,165 +25986,141 @@ var printLayoutInfo; } 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 - + }; + // 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 - + }; + // 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 + // 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 - + } + // 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). - + }; + // 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 + // 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 + 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; @@ -28528,7 +26129,6 @@ var printLayoutInfo; } } }); - if (r.container.parentNode) { r.removeObserver.observe(r.container.parentNode, { childList: true @@ -28540,20 +26140,18 @@ var printLayoutInfo; 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 - + } + // auto resize r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef if (haveResizeObserverApi) { @@ -28561,32 +26159,28 @@ var printLayoutInfo; 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 + }); + // 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(); @@ -28596,48 +26190,39 @@ var printLayoutInfo; 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 - + }; + // Primary key r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { if (!eventInContainer(e)) { return; } - e.preventDefault(); blurActiveDomElement(); r.hoverData.capture = true; @@ -28651,7 +26236,6 @@ var printLayoutInfo; 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); @@ -28660,7 +26244,6 @@ var printLayoutInfo; return; } else { var ele = r.hoverData.down; - if (ele) { ele.emit({ originalEvent: e, @@ -28682,9 +26265,9 @@ var printLayoutInfo; } } }, r.tapholdDuration); - }; // Right click button - + }; + // Right click button if (e.which == 3) { r.hoverData.cxtStarted = true; var cxtEvt = { @@ -28695,7 +26278,6 @@ var printLayoutInfo; y: pos[1] } }; - if (near) { near.activate(); near.emit(cxtEvt); @@ -28703,15 +26285,16 @@ var printLayoutInfo; } else { cy.emit(cxtEvt); } - r.hoverData.downTime = new Date().getTime(); - r.hoverData.cxtDragged = false; // Primary button + r.hoverData.cxtDragged = false; + + // Primary button } else if (e.which == 1) { if (near) { near.activate(); - } // Element dragging - + } + // Element dragging { // If something is under the cursor and it is draggable, prepare to grab it if (near != null) { @@ -28726,13 +26309,10 @@ var printLayoutInfo; } }; }; - var triggerGrab = function triggerGrab(ele) { ele.emit(makeEvent('grab')); }; - setGrabTarget(near); - if (!near.selected()) { draggedElements = r.dragData.possibleDragElements = cy.collection(); addNodeToDrag(near, { @@ -28750,12 +26330,10 @@ var printLayoutInfo; 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(); @@ -28764,7 +26342,6 @@ var printLayoutInfo; x: pos[0], y: pos[1] }); - if (near == null) { select[4] = 1; r.data.bgActivePosistion = { @@ -28778,20 +26355,18 @@ var printLayoutInfo; } checkForTaphold(); - } // Initialize selection box coordinates - + } + // 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(); @@ -28801,17 +26376,14 @@ var printLayoutInfo; 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; @@ -28820,16 +26392,12 @@ var printLayoutInfo; 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]); @@ -28838,16 +26406,13 @@ var printLayoutInfo; 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, @@ -28858,14 +26423,13 @@ var printLayoutInfo; } }); } - select[4] = 1; r.hoverData.selecting = true; r.redrawHint('select', true); r.redraw(); - }; // trigger context drag if rmouse down - + }; + // trigger context drag if rmouse down if (r.hoverData.which === 3) { // but only if over threshold if (isOverThresholdDrag) { @@ -28877,15 +26441,12 @@ var printLayoutInfo; 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({ @@ -28897,9 +26458,7 @@ var printLayoutInfo; } }); } - r.hoverData.cxtOver = near; - if (near) { near.emit({ originalEvent: e, @@ -28911,14 +26470,13 @@ var printLayoutInfo; }); } } - } // Check if we are drag panning the entire graph + } + // 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 = { @@ -28932,21 +26490,21 @@ var printLayoutInfo; y: disp[1] * zoom }; } - cy.panBy(deltaP); cy.emit('dragpan'); r.hoverData.dragged = true; - } // Needs reproject due to pan changing viewport + } + // Needs reproject due to pan changing viewport + pos = r.projectIntoViewport(e.clientX, e.clientY); - pos = r.projectIntoViewport(e.clientX, e.clientY); // Checks primary button down & out of time & mouse not moved much + // 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; @@ -28956,7 +26514,6 @@ var printLayoutInfo; r.redraw(); } } - if (down && down.pannable() && down.active()) { down.unactivate(); } @@ -28965,7 +26522,6 @@ var printLayoutInfo; if (down && down.pannable() && down.active()) { down.unactivate(); } - if ((!down || !down.grabbed()) && near != last) { if (last) { triggerEvents(last, ['mouseout', 'tapdragout'], e, { @@ -28973,70 +26529,59 @@ var printLayoutInfo; 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 + // 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); @@ -29046,15 +26591,13 @@ var printLayoutInfo; // 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 - + } + // 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(); @@ -29065,11 +26608,9 @@ var printLayoutInfo; 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); @@ -29078,19 +26619,16 @@ var printLayoutInfo; 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, @@ -29100,13 +26638,11 @@ var printLayoutInfo; y: pos[1] } }; - if (down) { down.emit(cxtEvt); } else { cy.emit(cxtEvt); } - if (!r.hoverData.cxtDragged) { var cxtTap = { originalEvent: e, @@ -29116,14 +26652,12 @@ var printLayoutInfo; 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) { @@ -29131,10 +26665,12 @@ var printLayoutInfo; 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 + 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, { @@ -29142,7 +26678,6 @@ var printLayoutInfo; y: pos[1] }); didDoubleClick = false; - if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { clickTimeout && clearTimeout(clickTimeout); didDoubleClick = true; @@ -29161,24 +26696,22 @@ var printLayoutInfo; }, cy.multiClickDebounceTime()); prevClickTimeStamp = e.timeStamp; } - } // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something - + } + // 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 - + } + // 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) { @@ -29193,19 +26726,15 @@ var printLayoutInfo; 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, @@ -29214,43 +26743,37 @@ var printLayoutInfo; 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 - + } + // always need redraw in case eles unselectable r.redraw(); - } // Cancel drag pan - + } + // 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'); @@ -29259,7 +26782,6 @@ var printLayoutInfo; } } // else not right mouse - select[4] = 0; r.hoverData.down = null; r.hoverData.cxtStarted = false; @@ -29272,25 +26794,21 @@ var printLayoutInfo; 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; @@ -29301,7 +26819,6 @@ var printLayoutInfo; r.redraw(); }, 150); var diff; - if (e.deltaY != null) { diff = e.deltaY / -250; } else if (e.wheelDeltaY != null) { @@ -29309,21 +26826,16 @@ var printLayoutInfo; } 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: { @@ -29333,11 +26845,13 @@ var printLayoutInfo; }); cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); } - }; // Functions to help with whether mouse wheel should trigger zooming - // -- + }; + // Functions to help with whether mouse wheel should trigger zooming + // -- + r.registerBinding(r.container, 'wheel', wheelHandler, true); - r.registerBinding(r.container, 'wheel', wheelHandler, true); // disable nonstandard wheel events + // 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 @@ -29349,11 +26863,11 @@ var printLayoutInfo; r.scrollingPageTimeout = setTimeout(function () { r.scrollingPage = false; }, 250); - }, true); // desktop safari pinch to zoom start + }, 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(); @@ -29364,9 +26878,10 @@ var printLayoutInfo; // 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 + }, 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({ @@ -29390,57 +26905,46 @@ var printLayoutInfo; }); }, 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 - + } + // record starting points for pinch-to-zoom if (e.touches[1]) { r.touchData.singleTouchMoved = true; freeDraggedElements(r.dragData.touchDragEles); @@ -29459,15 +26963,14 @@ var printLayoutInfo; 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 + 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, @@ -29498,11 +27001,9 @@ var printLayoutInfo; } }); } - if (r.touchData.start) { r.touchData.start._private.grabbed = false; } - r.touchData.cxt = true; r.touchData.cxtDragged = false; r.data.bgActivePosistion = undefined; @@ -29510,9 +27011,9 @@ var printLayoutInfo; 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(); @@ -29520,20 +27021,18 @@ var printLayoutInfo; } 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); }); @@ -29545,9 +27044,7 @@ var printLayoutInfo; addToList: draggedEles }); } - setGrabTarget(near); - var makeEvent = function makeEvent(type) { return { originalEvent: e, @@ -29558,9 +27055,7 @@ var printLayoutInfo; } }; }; - near.emit(makeEvent('grabon')); - if (selectedNodes) { selectedNodes.forEach(function (n) { n.emit(makeEvent('grab')); @@ -29570,12 +27065,10 @@ var printLayoutInfo; } } } - triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { x: now[0], y: now[1] }); - if (near == null) { r.data.bgActivePosistion = { x: pos[0], @@ -29583,9 +27076,10 @@ var printLayoutInfo; }; r.redrawHint('select', true); r.redraw(); - } // Tap, taphold - // ----- + } + // Tap, taphold + // ----- r.touchData.singleTouchMoved = false; r.touchData.singleTouchStartTime = +new Date(); @@ -29601,14 +27095,11 @@ var printLayoutInfo; } }, 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]; } @@ -29617,68 +27108,60 @@ var printLayoutInfo; 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 - + } + // context swipe cancelling if (capture && r.touchData.cxt) { e.preventDefault(); var f1x2 = e.touches[0].clientX - offsetLeft, - f1y2 = e.touches[0].clientY - offsetTop; + 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 ); - + 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 + 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; @@ -29691,7 +27174,6 @@ var printLayoutInfo; y: now[1] } }; - if (r.touchData.start) { r.touchData.start.unactivate().emit(cxtEvt); r.touchData.start = null; @@ -29699,9 +27181,9 @@ var printLayoutInfo; cy.emit(cxtEvt); } } - } // context swipe - + } + // context swipe if (capture && r.touchData.cxt) { var cxtEvt = { originalEvent: e, @@ -29713,20 +27195,16 @@ var printLayoutInfo; }; 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({ @@ -29738,9 +27216,7 @@ var printLayoutInfo; } }); } - r.touchData.cxtOver = near; - if (near) { near.emit({ originalEvent: e, @@ -29751,13 +27227,13 @@ var printLayoutInfo; } }); } - } // box selection + } + // 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, @@ -29768,11 +27244,9 @@ var printLayoutInfo; } }); } - 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; @@ -29782,9 +27256,10 @@ var printLayoutInfo; 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 + 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 @@ -29792,68 +27267,65 @@ var printLayoutInfo; 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; - var _start = r.touchData.start; // (x2, y2) for fingers 1 and 2 - + // (x2, y2) for fingers 1 and 2 var f1x2 = e.touches[0].clientX - offsetLeft, - f1y2 = e.touches[0].clientY - offsetTop; + 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 ); + 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 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 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 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 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 + }; + // 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, @@ -29866,21 +27338,19 @@ var printLayoutInfo; f2x1 = f2x2; f2y1 = f2y2; r.pinching = true; - } // Re-project - + } + // 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]; @@ -29891,62 +27361,51 @@ var printLayoutInfo; 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 - + } + // 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]); @@ -29955,15 +27414,14 @@ var printLayoutInfo; dragDelta[1] += disp[1]; } } - } // touchmove - + } + // touchmove { triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { x: now[0], y: now[1] }); - if ((!start || !start.grabbed()) && near != last) { if (last) { last.emit({ @@ -29975,7 +27433,6 @@ var printLayoutInfo; } }); } - if (near) { near.emit({ originalEvent: e, @@ -29987,29 +27444,26 @@ var printLayoutInfo; }); } } - r.touchData.last = near; - } // check to cancel taphold + } + // 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 - + } + // 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, @@ -30023,27 +27477,25 @@ var printLayoutInfo; y: dy * zoom }); cy.emit('dragpan'); - if (start) { start.unactivate(); r.redrawHint('select', true); r.touchData.start = null; } } - } // Re-project - + } + // 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 - + } + // 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); @@ -30055,7 +27507,6 @@ var printLayoutInfo; // eslint-disable-line no-unused-vars var start = r.touchData.start; r.touchData.capture = false; - if (start) { start.unactivate(); } @@ -30065,17 +27516,14 @@ var printLayoutInfo; // 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; @@ -30083,31 +27531,25 @@ var printLayoutInfo; 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, @@ -30117,13 +27559,11 @@ var printLayoutInfo; y: now[1] } }; - if (start) { start.emit(ctxTapend); } else { cy.emit(ctxTapend); } - if (!r.touchData.cxtDragged) { var ctxTap = { originalEvent: e, @@ -30133,25 +27573,22 @@ var printLayoutInfo; 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 - + } + // 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])); @@ -30169,24 +27606,18 @@ var printLayoutInfo; 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); @@ -30194,23 +27625,19 @@ var printLayoutInfo; 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] @@ -30224,25 +27651,23 @@ var printLayoutInfo; 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 + 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; @@ -30261,9 +27686,9 @@ var printLayoutInfo; }, cy.multiClickDebounceTime()); prevTouchTimeStamp = e.timeStamp; } - } // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance - + } + // 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 ) { @@ -30277,17 +27702,13 @@ var printLayoutInfo; 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) { @@ -30296,23 +27717,22 @@ var printLayoutInfo; 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 + //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, @@ -30328,29 +27748,24 @@ var printLayoutInfo; 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; @@ -30358,23 +27773,19 @@ var printLayoutInfo; 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); @@ -30385,7 +27796,6 @@ var printLayoutInfo; return; } // mouse already handled - removePointer(e); addTouchesToEvent(e); touchendHandler(e); @@ -30395,7 +27805,6 @@ var printLayoutInfo; return; } // mouse already handled - removePointer(e); addTouchesToEvent(e); touchcancelHandler(e); @@ -30405,7 +27814,6 @@ var printLayoutInfo; return; } // mouse already handled - e.preventDefault(); updatePointer(e); addTouchesToEvent(e); @@ -30415,7 +27823,6 @@ var printLayoutInfo; }; var BRp$2 = {}; - BRp$2.generatePolygon = function (name, points) { return this.nodeShapes[name] = { renderer: this, @@ -30432,7 +27839,6 @@ var printLayoutInfo; } }; }; - BRp$2.generateEllipse = function () { return this.nodeShapes['ellipse'] = { renderer: this, @@ -30448,7 +27854,6 @@ var printLayoutInfo; } }; }; - BRp$2.generateRoundPolygon = function (name, points) { // Pre-compute control points // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute @@ -30456,17 +27861,14 @@ var printLayoutInfo; // For simplicity the layout will be: // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] var allPoints = new Array(points.length * 2); - for (var i = 0; i < points.length / 2; i++) { var sourceIndex = i * 2; var destIndex = void 0; - if (i < points.length / 2 - 1) { destIndex = (i + 1) * 2; } else { destIndex = 0; } - allPoints[i * 4] = points[sourceIndex]; allPoints[i * 4 + 1] = points[sourceIndex + 1]; var xDest = points[destIndex] - points[sourceIndex]; @@ -30475,7 +27877,6 @@ var printLayoutInfo; allPoints[i * 4 + 2] = xDest / norm; allPoints[i * 4 + 3] = yDest / norm; } - return this.nodeShapes[name] = { renderer: this, name: name, @@ -30491,7 +27892,6 @@ var printLayoutInfo; } }; }; - BRp$2.generateRoundRectangle = function () { return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { renderer: this, @@ -30505,42 +27905,41 @@ var printLayoutInfo; }, checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { var cornerRadius = getRoundRectangleRadius(width, height); - var diam = cornerRadius * 2; // Check hBox + var diam = cornerRadius * 2; + // Check hBox if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { return true; - } // Check vBox - + } + // Check vBox if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { return true; - } // Check top left quarter circle - + } + // Check top left quarter circle if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { return true; - } // Check top right quarter circle - + } + // Check top right quarter circle if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { return true; - } // Check bottom right quarter circle - + } + // 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 - + } + // 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.generateCutRectangle = function () { return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { renderer: this, @@ -30557,8 +27956,9 @@ var printLayoutInfo; 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] + 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], @@ -30575,19 +27975,17 @@ var printLayoutInfo; // Check hBox if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { return true; - } // Check vBox - + } + // Check vBox if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, 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, @@ -30598,11 +27996,11 @@ var printLayoutInfo; }, intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { // 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({ @@ -30637,7 +28035,6 @@ var printLayoutInfo; }, 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); }, @@ -30651,8 +28048,9 @@ var printLayoutInfo; 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 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], @@ -30668,76 +28066,64 @@ var printLayoutInfo; checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { var curveConstants = getBarrelCurveConstants(width, height); var hOffset = curveConstants.heightOffset; - var wOffset = curveConstants.widthOffset; // Check hBox + 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 - + } + // 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 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, @@ -30752,50 +28138,46 @@ var printLayoutInfo; 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); }, checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { var cornerRadius = getRoundRectangleRadius(width, height); - var diam = 2 * cornerRadius; // Check hBox + var diam = 2 * cornerRadius; + // Check hBox if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { return true; - } // Check vBox - + } + // Check vBox if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { return true; - } // check non-rounded top side - + } + // 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 - + } + // 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 - + } + // 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; @@ -30824,16 +28206,15 @@ var printLayoutInfo; 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 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]; @@ -30852,156 +28233,132 @@ var printLayoutInfo; 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 - + } + // 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 + }); + // 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.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 + 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; @@ -31011,16 +28368,15 @@ var printLayoutInfo; 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.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; + //--Pointer-related data r.hoverData = { down: null, last: null, @@ -31050,15 +28406,12 @@ var printLayoutInfo; 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 = []; @@ -31081,84 +28434,70 @@ var printLayoutInfo; 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 + 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 + } 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); }); @@ -31170,43 +28509,39 @@ var printLayoutInfo; 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 + 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); + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); if (frameDuration >= opts.deqFastCost * timeAvailable) { break; } @@ -31219,9 +28554,7 @@ var printLayoutInfo; break; } } - var thisDeqd = opts.deq(self, pixelRatio, extent); - if (thisDeqd.length > 0) { for (var i = 0; i < thisDeqd.length; i++) { deqd.push(thisDeqd[i]); @@ -31229,32 +28562,28 @@ var printLayoutInfo; } else { break; } - } // callbacks on dequeue - + } + // 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(); @@ -31262,22 +28591,18 @@ var printLayoutInfo; 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; } }, { @@ -31338,15 +28663,13 @@ var printLayoutInfo; key: "getCachesAt", value: function getCachesAt(lvl) { var cachesByLvl = this.cachesByLvl, - lvls = this.lvls; + lvls = this.lvls; var caches = cachesByLvl.get(lvl); - if (!caches) { caches = new Map$2(); cachesByLvl.set(lvl, caches); lvls.push(lvl); } - return caches; } }, { @@ -31358,19 +28681,18 @@ var printLayoutInfo; 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 + 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; } @@ -31413,12 +28735,12 @@ var printLayoutInfo; 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) + } + // 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) { @@ -31427,53 +28749,33 @@ var printLayoutInfo; 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 = { @@ -31492,7 +28794,6 @@ var printLayoutInfo; allowEdgeTxrCaching: true, allowParentTxrCaching: true }); - var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { var self = this; self.renderer = renderer; @@ -31502,84 +28803,75 @@ var printLayoutInfo; 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.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) - + }; + // 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 - + }; + // 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) - + }; + // 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); - var eleCache = lookup.get(ele, lvl); // if this get was on an unused/invalidated cache, then restore the texture usage metric - + // 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) { @@ -31589,73 +28881,65 @@ var printLayoutInfo; } 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 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 - + }; + // 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 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 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 - + }; + // 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); @@ -31663,31 +28947,27 @@ var printLayoutInfo; } } 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, @@ -31703,92 +28983,89 @@ var printLayoutInfo; 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 + var txr = _cache.texture; - txr.invalidatedWidth += _cache.width; // mark the cache as invalidated + // remove space from the texture it belongs to + txr.invalidatedWidth += _cache.width; - _cache.invalidated = true; // retire the texture if its utility is low + // 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 - + } + // 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: + 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: + txr.retired = true; - var eleCaches = txr.eleCaches; + // 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); - clearArray(eleCaches); // add the texture to a retired queue so it can be recycled in future: + // 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); @@ -31804,15 +29081,12 @@ var printLayoutInfo; 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; @@ -31827,14 +29101,12 @@ var printLayoutInfo; } } }; - 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); @@ -31852,30 +29124,26 @@ var printLayoutInfo; k2q[key] = req; } }; - - ETCp.dequeue = function (pxRatio - /*, extent*/ - ) { + 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); - 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 + // 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); @@ -31883,17 +29151,14 @@ var printLayoutInfo; 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 @@ -31909,15 +29174,12 @@ var printLayoutInfo; } } }; - 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, @@ -31936,16 +29198,13 @@ var printLayoutInfo; 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) { @@ -31954,32 +29213,20 @@ var printLayoutInfo; }); 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) { @@ -32003,19 +29250,15 @@ var printLayoutInfo; 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); @@ -32032,36 +29275,38 @@ var printLayoutInfo; 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); + }; + + // 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) + 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); + 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); @@ -32069,123 +29314,114 @@ var printLayoutInfo; 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 + 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 ){ + } + + // if( tmpLayers ){ //self.queueLayer( layer ); // } - return layer; }; - if (self.skipping && !firstGet) { // log('skip layers'); return null; - } // log('do layers'); + } + // 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 caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; - var existingLayer = caches[lvl]; + // 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 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); + } + // log('new layer with id %s', layer.id); } if (tmpLayers || allowLazyQueueing) { @@ -32195,268 +29431,243 @@ var printLayoutInfo; // 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('--'); + } + // 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 - + }; + // 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 + 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 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 - + } + // 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) + } + // 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 + 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 + } + // 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 = element(eles[0]); // collect udpated elements (cascaded from the layers) and update each - // layer itself along the way + var isEles = 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 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(); - self.lastInvalidationTime = performanceNow(); // log('update invalidate layer time from eles'); + // 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(); + 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 ); + var layers = this.layersByLevel[lvl]; + + // log('invalidate layer', layer.id ); - removeFromArray(layers, layer); // layer.eles = []; + 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); + 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); + 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); + } + // 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 + 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); @@ -32465,97 +29676,90 @@ var printLayoutInfo; 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(); - var layer = q.peek(); // if a layer has been or will be replaced, then don't waste time with it - + // 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 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 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 + 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) + 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 + // 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); + } + // 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); @@ -32580,80 +29784,62 @@ var printLayoutInfo; 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, @@ -32666,62 +29852,49 @@ var printLayoutInfo; }; 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; + 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; @@ -32729,11 +29902,9 @@ var printLayoutInfo; 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; @@ -32741,24 +29912,18 @@ var printLayoutInfo; 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); } @@ -32771,107 +29936,82 @@ var printLayoutInfo; 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; + 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 { @@ -32882,44 +30022,37 @@ var printLayoutInfo; /* global Path2D */ 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 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 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); @@ -32936,30 +30069,23 @@ var printLayoutInfo; 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; @@ -32970,34 +30096,27 @@ var printLayoutInfo; 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; @@ -33005,21 +30124,17 @@ var printLayoutInfo; 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; @@ -33028,11 +30143,9 @@ var printLayoutInfo; 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; @@ -33042,32 +30155,26 @@ var printLayoutInfo; 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': @@ -33076,40 +30183,33 @@ var printLayoutInfo; 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 'segments': case 'haystack': for (var _i = 2; _i + 1 < pts.length; _i += 2) { context.lineTo(pts[_i], pts[_i + 1]); } - break; } } - context = canvasCxt; - if (usePaths) { context.stroke(path); } else { context.stroke(); - } // reset any line dashes - + } + // 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]); @@ -33123,63 +30223,53 @@ var printLayoutInfo; 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, x, y, angle); + 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, x, y, angle); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); }; - - CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, 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; @@ -33192,12 +30282,10 @@ var printLayoutInfo; 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; @@ -33206,12 +30294,10 @@ var printLayoutInfo; 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, { @@ -33221,21 +30307,17 @@ var printLayoutInfo; } 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); @@ -33243,18 +30325,15 @@ var printLayoutInfo; context.fill(); } } - if (fill === 'hollow' || fill === 'both') { - context.lineWidth = (shapeImpl.matchEdgeWidth ? edgeWidth : 1) / (usePaths ? size : 1); + 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); @@ -33264,20 +30343,17 @@ var printLayoutInfo; }; 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(); @@ -33298,8 +30374,9 @@ var printLayoutInfo; var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); var imgW = img.width || img.cachedW; - var imgH = img.height || img.cachedH; // workaround for broken browsers like ie + 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 @@ -33310,7 +30387,6 @@ var printLayoutInfo; 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; @@ -33318,7 +30394,6 @@ var printLayoutInfo; 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; @@ -33326,7 +30401,6 @@ var printLayoutInfo; 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) } @@ -33340,59 +30414,46 @@ var printLayoutInfo; 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; @@ -33400,11 +30461,9 @@ var printLayoutInfo; r.setImgSmoothing(context, true); isSmoothingSwitched = true; } - if (repeat === 'no-repeat') { if (shouldClip) { context.save(); - if (rs.pathCache) { context.clip(rs.pathCache); } else { @@ -33412,9 +30471,7 @@ var printLayoutInfo; context.clip(); } } - r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); - if (shouldClip) { context.restore(); } @@ -33426,16 +30483,13 @@ var printLayoutInfo; 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(); @@ -33444,21 +30498,16 @@ var printLayoutInfo; 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; @@ -33466,44 +30515,33 @@ var printLayoutInfo; } 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); @@ -33511,33 +30549,28 @@ var printLayoutInfo; } 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 - + }; + // 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 @@ -33554,11 +30587,12 @@ var printLayoutInfo; this.colorFillStyle(context, color[0], color[1], color[2], opacity); this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); - }; // TODO ensure re-used - + }; + // 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); @@ -33570,9 +30604,8 @@ var printLayoutInfo; ctx.lineTo(x, y + radius); ctx.quadraticCurveTo(x, y, x + radius, y); ctx.closePath(); - ctx.fill(); + if (stroke) ctx.stroke();else ctx.fill(); } - CRp$6.getTextAngle = function (ele, prefix) { var theta; var _p = ele._private; @@ -33580,7 +30613,6 @@ var printLayoutInfo; 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') { @@ -33588,32 +30620,26 @@ var printLayoutInfo; } 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) - + } + // 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 + '-' : ''; @@ -33624,22 +30650,18 @@ var printLayoutInfo; 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; @@ -33648,57 +30670,47 @@ var printLayoutInfo; 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 + ')'; - var styleShape = ele.pstyle('text-background-shape').strValue; - - if (styleShape.indexOf('round') === 0) { - roundRect(context, bgX, bgY, bgW, bgH, 2); + 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; @@ -33706,59 +30718,55 @@ var printLayoutInfo; 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; } } - - context.strokeRect(bgX, bgY, bgW, bgH); - + if (rounded) { + roundRect(context, bgX, bgY, bgW, bgH, roundRadius, 'stroke'); + } else { + context.strokeRect(bgX, bgY, bgW, bgH); + } if (textBorderStyle === 'double') { var whiteWidth = textBorderWidth / 2; - context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 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') { @@ -33766,7 +30774,6 @@ var printLayoutInfo; } else if (justification === 'center') { textX += -halfTextW; } // else same as auto - } else if (halign === 'center') { // auto justfication : center if (justification === 'left') { @@ -33774,7 +30781,6 @@ var printLayoutInfo; } else if (justification === 'right') { textX += halfTextW; } // else same as auto - } else if (halign === 'right') { // auto justification : left if (justification === 'center') { @@ -33782,25 +30788,21 @@ var printLayoutInfo; } 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; } @@ -33808,10 +30810,8 @@ var printLayoutInfo; if (lineWidth > 0) { context.strokeText(text, textX, textY); } - context.fillText(text, textX, textY); } - if (theta !== 0) { context.rotate(-theta); context.translate(-orgTextX, -orgTextY); @@ -33821,7 +30821,6 @@ var printLayoutInfo; /* 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; @@ -33831,7 +30830,6 @@ var printLayoutInfo; 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 } @@ -33839,47 +30837,48 @@ var printLayoutInfo; 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; // + nodeHeight = node.height() + 2 * padding; + + // // setup shift var bb; - if (shiftToOriginWithBb) { bb = shiftToOriginWithBb; context.translate(-bb.x1, -bb.y1); - } // - // load bg image + } + // + // 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 + 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 + } + // + // setup styles var darkness = node.pstyle('background-blacken').value; var borderWidth = node.pstyle('border-width').pfValue; @@ -33887,95 +30886,102 @@ var printLayoutInfo; var borderColor = node.pstyle('border-color').value; var borderStyle = node.pstyle('border-style').value; 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; context.lineJoin = 'miter'; // so borders are square with the node shape 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); - }; // - // setup shape - + }; + 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); + }; - var styleShape = node.pstyle('shape').strValue; - var shapePts = node.pstyle('shape-polygon-points').pfValue; + // + // setup shape - if (usePaths) { - context.translate(pos.x, pos.y); + var getPath = function getPath(width, height, shape, points) { var pathCache = r.nodePathCache = r.nodePathCache || []; - var key = hashStrings(styleShape === 'polygon' ? styleShape + ',' + shapePts.join(',') : styleShape, '' + nodeHeight, '' + nodeWidth); + var key = hashStrings(shape === 'polygon' ? shape + ',' + points.join(',') : shape, '' + height, '' + width); var cachedPath = pathCache[key]; - + var path; + var cacheHit = false; if (cachedPath != null) { path = cachedPath; - pathCacheHit = true; + 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); } - 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 + 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); @@ -33983,15 +30989,12 @@ var printLayoutInfo; } } }; - 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 { @@ -33999,82 +31002,180 @@ var printLayoutInfo; } } }; - var drawBorder = function drawBorder() { if (borderWidth > 0) { context.lineWidth = borderWidth; context.lineCap = 'butt'; - if (context.setLineDash) { // for very outofdate browsers switch (borderStyle) { case 'dotted': context.setLineDash([1, 1]); break; - case 'dashed': context.setLineDash([4, 2]); break; - case 'solid': case 'double': context.setLineDash([]); break; } } - if (usePaths) { context.stroke(path); } else { 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 - + } + // 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 scaleX = (nodeWidth + borderWidth + (outlineWidth + outlineOffset)) / nodeWidth; + var scaleY = (nodeHeight + borderWidth + (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 = (borderWidth + outlineOffset + outlineWidth) * 1.4; + } else if (shape === 'round-heptagon') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.075; + offsetY = -(borderWidth / 2 + outlineOffset + outlineWidth) / 35; + } else if (shape === 'round-hexagon') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.12; + } else if (shape === 'round-pentagon') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.13; + offsetY = -(borderWidth / 2 + outlineOffset + outlineWidth) / 15; + } else if (shape === 'round-tag') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.12; + offsetX = (borderWidth / 2 + outlineWidth + outlineOffset) * .07; + } else if (shape === 'round-triangle') { + sMult = (borderWidth + outlineOffset + outlineWidth) * (Math.PI / 2); + offsetY = -(borderWidth + outlineOffset / 2 + outlineWidth) / Math.PI; + } + if (sMult !== 0) { + scaleX = (nodeWidth + sMult) / nodeWidth; + scaleY = (nodeHeight + sMult) / nodeHeight; + } + r.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points); + } else if (['roundrectangle', 'round-rectangle'].includes(shape)) { + r.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (['cutrectangle', 'cut-rectangle'].includes(shape)) { + r.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (['bottomroundrectangle', 'bottom-round-rectangle'].includes(shape)) { + r.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } 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 = (borderWidth + outlineWidth + outlineOffset) / nodeWidth; + points = joinLines(expandPolygon(points, pad)); + r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); + } else { + var _pad = (borderWidth + 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 = 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 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); @@ -34085,17 +31186,15 @@ var printLayoutInfo; 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); @@ -34104,66 +31203,56 @@ var printLayoutInfo; drawPie(darkness !== 0 || borderWidth !== 0); drawImages(eleOpacity, false); darken(); - if (usePaths) { context.translate(-pos.x, -pos.y); } - drawText(); - drawOverlay(); // + 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; - 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); context.fill(); } }; }; - CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); - CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); // does the node have at least one pie piece? + 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'); @@ -34172,46 +31261,39 @@ var printLayoutInfo; 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 + // 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 + 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); @@ -34223,15 +31305,15 @@ var printLayoutInfo; }; var CRp$4 = {}; - var motionBlurDelay = 100; // var isFirefox = typeof InstallTrigger !== 'undefined'; + 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 }; @@ -34240,99 +31322,83 @@ var printLayoutInfo; 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; - + 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(); + 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(); + 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(); - + _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; - + 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); @@ -34340,30 +31406,28 @@ var printLayoutInfo; } } } - 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 + 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; // } @@ -34371,7 +31435,6 @@ var printLayoutInfo; 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 { @@ -34379,18 +31442,19 @@ var printLayoutInfo; 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 + 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; // } @@ -34398,16 +31462,15 @@ var printLayoutInfo; 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 - + }; + // Resize canvas CRp$4.matchCanvasSize = function (container) { var r = this; var data = r.data; @@ -34416,15 +31479,12 @@ var printLayoutInfo; 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 } @@ -34434,7 +31494,6 @@ var printLayoutInfo; 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; @@ -34442,7 +31501,6 @@ var printLayoutInfo; 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; @@ -34450,20 +31508,16 @@ var printLayoutInfo; 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, @@ -34473,7 +31527,6 @@ var printLayoutInfo; forcedPxRatio: pxRatio }); }; - CRp$4.render = function (options) { options = options || staticEmptyObject(); var forcedContext = options.forcedContext; @@ -34494,7 +31547,6 @@ var printLayoutInfo; 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(); @@ -34502,44 +31554,37 @@ var printLayoutInfo; 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) - + } + // 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 - + } + // 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; @@ -34556,22 +31601,22 @@ var printLayoutInfo; } }; 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) + 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 + } + // 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'; @@ -34579,10 +31624,8 @@ var printLayoutInfo; 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, @@ -34597,36 +31640,28 @@ var printLayoutInfo; 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(); @@ -34650,20 +31685,17 @@ var printLayoutInfo; 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); @@ -34676,81 +31708,65 @@ var printLayoutInfo; // 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; @@ -34759,9 +31775,7 @@ var printLayoutInfo; 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); @@ -34774,33 +31788,33 @@ var printLayoutInfo; 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 - + } + // 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 + 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 ); }; @@ -34809,21 +31823,17 @@ var printLayoutInfo; 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; @@ -34837,50 +31847,41 @@ var printLayoutInfo; r.redraw(); }, motionBlurDelay); } - if (!forcedContext) { cy.emit('render'); } }; - var CRp$3 = {}; // @O Polygon drawing + 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) { var halfW = width / 2; var halfH = height / 2; var cornerRadius = getRoundPolygonRadius(width, height); - if (context.beginPath) { context.beginPath(); } - for (var _i = 0; _i < points.length / 4; _i++) { var sourceUv = void 0, - destUv = void 0; - + destUv = void 0; if (_i === 0) { sourceUv = points.length - 2; } else { sourceUv = _i * 4 - 2; } - destUv = _i * 4 + 2; var px = x + halfW * points[_i * 4]; var py = y + halfH * points[_i * 4 + 1]; @@ -34890,54 +31891,48 @@ var printLayoutInfo; var cp0y = py - offset * points[sourceUv + 1]; var cp1x = px + offset * points[destUv]; var cp1y = py + offset * points[destUv + 1]; - if (_i === 0) { context.moveTo(cp0x, cp0y); } else { context.lineTo(cp0x, cp0y); } - context.arcTo(px, py, cp1x, cp1y, cornerRadius); } - context.closePath(); - }; // Round rectangle drawing - + }; + // Round rectangle drawing CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { var halfWidth = width / 2; var halfHeight = height / 2; var cornerRadius = getRoundRectangleRadius(width, height); - 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 + } + // 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) { var halfWidth = width / 2; var halfHeight = height / 2; var cornerRadius = getRoundRectangleRadius(width, height); - if (context.beginPath) { context.beginPath(); - } // Start at top middle - + } + // Start at top middle context.moveTo(x, y - halfHeight); context.lineTo(x + halfWidth, y - halfHeight); context.lineTo(x + halfWidth, y); @@ -34947,16 +31942,13 @@ var printLayoutInfo; context.lineTo(x, y - halfHeight); context.closePath(); }; - CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { var halfWidth = width / 2; var halfHeight = height / 2; var cornerLength = getCutRectangleCornerLength(); - 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); @@ -34967,7 +31959,6 @@ var printLayoutInfo; 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; @@ -34979,11 +31970,9 @@ var printLayoutInfo; 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); @@ -34995,34 +31984,28 @@ var printLayoutInfo; 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 { @@ -35030,21 +32013,17 @@ var printLayoutInfo; } } } - 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(); @@ -35055,7 +32034,6 @@ var printLayoutInfo; 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; @@ -35063,39 +32041,34 @@ var printLayoutInfo; } 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 + 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); @@ -35116,9 +32089,9 @@ var printLayoutInfo; 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 - + } + // 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; @@ -35126,34 +32099,27 @@ var printLayoutInfo; 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) { @@ -35169,52 +32135,40 @@ var printLayoutInfo; 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) { 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); - case 'roundrectangle': case 'round-rectangle': return this.drawRoundRectanglePath(context, centerX, centerY, width, height); - case 'cutrectangle': case 'cut-rectangle': return this.drawCutRectanglePath(context, centerX, centerY, width, height); - case 'bottomroundrectangle': case 'bottom-round-rectangle': return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); - case 'barrel': return this.drawBarrelPath(context, centerX, centerY, width, height); } @@ -35222,17 +32176,16 @@ var printLayoutInfo; var CR = CanvasRenderer; var CRp = CanvasRenderer.prototype; - CRp.CANVAS_LAYERS = 3; // - + CRp.CANVAS_LAYERS = 3; + // CRp.SELECT_BOX = 0; CRp.DRAG = 1; CRp.NODE = 2; - CRp.BUFFER_COUNT = 3; // - + 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 = { @@ -35245,7 +32198,6 @@ var printLayoutInfo; 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'; @@ -35261,15 +32213,12 @@ var printLayoutInfo; '-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]; @@ -35280,105 +32229,85 @@ var printLayoutInfo; 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.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 { @@ -35386,7 +32315,6 @@ var printLayoutInfo; y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue }; }; - var getRsPt = function getRsPt(ele, x, y) { var rs = ele[0]._private.rscratch; return { @@ -35394,60 +32322,47 @@ var printLayoutInfo; 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, @@ -35488,61 +32403,53 @@ var printLayoutInfo; eleTxrCache.invalidateElements(eles); lblTxrCache.invalidateElements(eles); slbTxrCache.invalidateElements(eles); - tlbTxrCache.invalidateElements(eles); // any change invalidates the layers + tlbTxrCache.invalidateElements(eles); - lyrTxrCache.invalidateElements(eles); // update the old bg timestamp so diffs can be done in the ele txr caches + // 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 - + }; + // 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; @@ -35552,7 +32459,6 @@ var printLayoutInfo; context.msImageSmoothingEnabled = bool; } }; - CRp.getImgSmoothing = function (context) { if (context.imageSmoothingEnabled != null) { return context.imageSmoothingEnabled; @@ -35560,22 +32466,17 @@ var printLayoutInfo; 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); }); @@ -35599,17 +32500,16 @@ var printLayoutInfo; extensions: renderer }]; - var extensions = {}; // registered modules for extensions, indexed by name + // 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); @@ -35624,31 +32524,29 @@ var printLayoutInfo; } } 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() + 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 - + } + // either .start() or .run() is defined, so autogen the other if (layoutProto.start && !layoutProto.run) { layoutProto.run = function () { this.start(); @@ -35660,45 +32558,35 @@ var printLayoutInfo; 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; @@ -35749,26 +32637,22 @@ var printLayoutInfo; 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 } @@ -35786,21 +32670,18 @@ var printLayoutInfo; // 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, @@ -35808,58 +32689,60 @@ var printLayoutInfo; 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', { ... }) + } + + // e.g. extension('renderer', 'svg', { ... }) else if (arguments.length === 3) { return setExtension.apply(null, arguments); - } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + } + + // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') else if (arguments.length === 4) { return getModule.apply(null, arguments); - } // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + } + + // 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 + // 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 - + }; + // just store the selector to be parsed later sheetfn.selector = function (selector) { var i = this.length++; this[i] = { @@ -35867,12 +32750,11 @@ var printLayoutInfo; properties: [] }; return this; // chaining - }; // just store the property to be parsed later - + }; + // 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, @@ -35881,21 +32763,16 @@ var printLayoutInfo; } 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({ @@ -35904,18 +32781,18 @@ var printLayoutInfo; }); } } - return this; // chaining }; - sheetfn.style = sheetfn.css; // generate a real style object from the dummy stylesheet + 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 - + }; + // 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]; @@ -35932,24 +32809,26 @@ var printLayoutInfo; return style; }; - var version = "3.26.0"; + var version = "3.28.1"; var cytoscape = function cytoscape(options) { // if no options specified, use default if (options === undefined) { options = {}; - } // create instance - + } + // create instance if (plainObject(options)) { return new Core(options); - } // allow for registration of extensions + } + + // allow for registration of extensions else if (string(options)) { return extension.apply(extension, arguments); } - }; // e.g. cytoscape.use( require('cytoscape-foo'), bar ) - + }; + // 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 @@ -35958,14 +32837,14 @@ var printLayoutInfo; 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) + // replaced by build system + cytoscape.version = version; + // expose public apis (mostly for extensions) cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; return cytoscape; @@ -40310,275 +37189,13059 @@ module.exports = Emitter; /***/ }), -/***/ 47724: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ 33183: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(87115); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); -/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71377); -/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14607); -/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(91619); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(12281); -/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(7201); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(20683); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70277); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(45625); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(39354); -/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(91518); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(59542); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(10285); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(28734); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_12__); +// 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-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +;// 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<unknown>} 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<string>} */ + 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<T>} 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<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + 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<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * 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<Extension>} 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 +} -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 parseError2(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; - } +/** + * 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<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | 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] : [] + ) } - return true; } - }; - var lexer = function() { - var lexer2 = { - EOF: 1, - parseError: function parseError2(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + 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<HtmlExtension>} 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<StackItem>} */ + 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<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + 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<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + 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<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + 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<Point, '_bufferIndex' | '_index'> | 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<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + 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> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + 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<Construct>} 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<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +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<Chunk>} */ + 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<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + 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<Code>} */ + 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 + * <a> + * <a\>b> + * <a b> + * <a)> + * 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 (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @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> + * ^ + * > | 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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <a\*a> + * ^ + * ``` + * + * @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<Code>} */ + 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<Code>} */ + 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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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 + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @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 `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @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 + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @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 + * > | <div/> + * ^ + * ``` + * + * @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 + * > | <x/> + * ^ + * ``` + * + * @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 + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @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 + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @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 + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @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 + * > | <!--xxx--> + * ^ + * ``` + * + * @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 + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | 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 + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @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 + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @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 + * > | <div> + * ^ + * | + * ``` + * + * @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<Code>} */ + 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<string, string>} + */ +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<Event>} */ + 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 + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @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<Event>} */ + 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<Code>} */ + 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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @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<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> 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 <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> 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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> 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 `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> 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 <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <![CDATA[>&<]]> 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 <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <!b> 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 <?b?> 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 <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> 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 </b> 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 `<x`, in opening tag name. + * + * ```markdown + * > | a <b> 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 <b> 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 <b c> 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 <b c> 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 <b c=d> 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 <b c="d"> 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 <b c=d> 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 <b c="d"> 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 <b c="d"> 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 <!--a + * ^ + * | b--> + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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<Chunk>} + */ + +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<Chunk>} */ + 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<Event>} events + * @returns {Array<Event>} + */ +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<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} 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<string, Handle>} 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<CompileContext, 'sliceSerialize'>} 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<CompileContext, 'sliceSerialize'>} 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<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(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 {<Kind extends Node>(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<Extension | Array<Extension>> | 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<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + 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<Event>} 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<StaticPhrasingContent>} */ + // @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<Extension | Array<Extension>>} 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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + 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( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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; + } +}; + + + +/***/ }), + +/***/ 80339: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(33183); +/* harmony import */ var cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71377); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14607); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7201); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + + + +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 parseError2(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 parseError2(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); } }, // resets the lexer, sets new input @@ -40855,7 +50518,7 @@ var parser = function() { switch ($avoiding_name_collisions) { case 0: yy.getLogger().trace("Found comment", yy_.yytext); - break; + return 6; case 1: return 8; case 2: @@ -40917,57 +50580,65 @@ var parser = function() { case 20: return 11; case 21: - yy.getLogger().trace("Starting NSTR"); - this.begin("NSTR"); + this.begin("NSTR2"); break; case 22: - yy.getLogger().trace("description:", yy_.yytext); 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 25: + case 28: this.popState(); yy.getLogger().trace("node end )"); return "NODE_DEND"; - case 26: + case 29: this.popState(); yy.getLogger().trace("node end ...", yy_.yytext); return "NODE_DEND"; - case 27: + case 30: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; - case 28: + case 31: this.popState(); yy.getLogger().trace("node end (-"); return "NODE_DEND"; - case 29: + case 32: this.popState(); yy.getLogger().trace("node end (-"); return "NODE_DEND"; - case 30: + case 33: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; - case 31: + case 34: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; - case 32: + case 35: yy.getLogger().trace("Long description:", yy_.yytext); return 20; - case 33: + 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], - conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR": { "rules": [22, 23], "inclusive": false }, "NODE": { "rules": [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + 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; }(); @@ -40981,7 +50652,7 @@ var parser = function() { }(); parser.parser = parser; const mindmapParser = parser; -const sanitizeText = (text) => (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.n)(text, (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)()); +const sanitizeText = (text) => (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.d)(text, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)()); let nodes = []; let cnt = 0; let elements = {}; @@ -41002,8 +50673,8 @@ const getMindmap = () => { return nodes.length > 0 ? nodes[0] : null; }; const addNode = (level, id, descr, type) => { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.info("addNode", level, id, descr, type); - const conf = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info("addNode", level, id, descr, type); + const conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)(); const node = { id: cnt++, nodeId: sanitizeText(id), @@ -41011,7 +50682,7 @@ const addNode = (level, id, descr, type) => { descr: sanitizeText(descr), type, children: [], - width: (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)().mindmap.maxNodeWidth + width: (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().mindmap.maxNodeWidth }; switch (node.type) { case nodeType.ROUNDED_RECT: @@ -41059,7 +50730,7 @@ const nodeType = { HEXAGON: 6 }; const getType = (startStr, endStr) => { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.debug("In get type", startStr, endStr); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("In get type", startStr, endStr); switch (startStr) { case "[": return nodeType.RECT; @@ -41113,7 +50784,7 @@ let parseError; const setErrorHandler = (handler) => { parseError = handler; }; -const getLogger = () => _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l; +const getLogger = () => _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l; const getNodeById = (id) => nodes[id]; const getElementById = (id) => elements[id]; const mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ @@ -41136,26 +50807,6 @@ const mindmapDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro type2Str }, Symbol.toStringTag, { value: "Module" })); const MAX_SECTIONS = 12; -function wrap(text, width) { - text.each(function() { - var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|<br>)/).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 === "<br>") { - line.pop(); - tspan.text(line.join(" ").trim()); - if (word === "<br>") { - line = [""]; - } else { - line = [word]; - } - tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); - } - } - }); -} const defaultBkg = function(elem, node, section) { const rd = 5; elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr( @@ -41250,6 +50901,7 @@ const roundedRectBkg = function(elem, node) { elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); }; const drawNode = function(elem, node, fullSection, conf) { + const htmlLabels = conf.htmlLabels; const section = fullSection % (MAX_SECTIONS - 1); const nodeElem = elem.append("g"); node.section = section; @@ -41260,8 +50912,16 @@ const drawNode = function(elem, node, fullSection, conf) { nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); 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 description = node.descr.replace(/(<br\/*>)/g, "\n"); + (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_7__.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 = conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; node.width = bbox.width + 2 * node.padding; @@ -41288,7 +50948,15 @@ const drawNode = function(elem, node, fullSection, conf) { ); } } else { - textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + 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 nodeType.DEFAULT: @@ -41339,7 +51007,7 @@ const positionNode = function(node) { nodeElem.attr("transform", "translate(" + x + "," + y + ")"); }; const svgDraw = { drawNode, positionNode, drawEdge }; -cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1___default().use((cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2___default())); +cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__.use(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_2__); function drawNodes(svg, mindmap, section, conf) { svgDraw.drawNode(svg, mindmap, section, conf); if (mindmap.children) { @@ -41353,7 +51021,7 @@ function drawEdges(edgesEl, cy) { const data = edge.data(); if (edge[0]._private.bodyBounds) { const bounds = edge[0]._private.rscratch; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.trace("Edge: ", id, data); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.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} ` @@ -41398,7 +51066,7 @@ function addNodes(mindmap, cy, conf, level) { function layoutMindmap(node, conf) { return new Promise((resolve) => { const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("id", "cy").attr("style", "display:none"); - const cy = cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1___default()({ + const cy = cytoscape_dist_cytoscape_umd_js__WEBPACK_IMPORTED_MODULE_1__({ container: document.getElementById("cy"), // container to render in style: [ @@ -41426,7 +51094,7 @@ function layoutMindmap(node, conf) { animate: false }).run(); cy.ready((e) => { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.info("Ready", e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Ready", e); resolve(cy); }); }); @@ -41438,7 +51106,7 @@ function positionNodes(cy) { data.y = node.position().y; svgDraw.positionNode(data); const el = getElementById(data.nodeId); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.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})` @@ -41447,11 +51115,10 @@ function positionNodes(cy) { }); } const draw = async (text, id, version, diagObj) => { - const conf = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)(); - diagObj.db.clear(); - diagObj.parser.parse(text); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.l.debug("Renering info diagram\n" + text); - const securityLevel = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.g)().securityLevel; + const conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)(); + conf.htmlLabels = false; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering mindmap diagram\n" + text, diagObj.parser); + const securityLevel = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); @@ -41468,7 +51135,7 @@ const draw = async (text, id, version, diagObj) => { const cy = await layoutMindmap(mm, conf); drawEdges(edgesElem, cy); positionNodes(cy); - (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_13__.s)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.o)(void 0, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth); }; const mindmapRenderer = { draw @@ -41477,10 +51144,10 @@ 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,khroma__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z)(options["lineColor" + i])) { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z)(options["lineColor" + i], 20); + if ((0,khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z)(options["lineColor" + i], 20); } else { - options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z)(options["lineColor" + i], 20); + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)(options["lineColor" + i], 20); } } for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { @@ -41537,6 +51204,13 @@ const getStyles = (options) => ` .edge { fill: none; } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } `; const mindmapStyles = getStyles; const diagram = { @@ -41546,58 +51220,6 @@ const diagram = { styles: mindmapStyles }; -//# sourceMappingURL=mindmap-definition-44684416.js.map - - -/***/ }), - -/***/ 91619: -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - Z: () => (/* binding */ is_dark) -}); - -// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules -var utils = __webpack_require__(61691); -// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules -var dist_color = __webpack_require__(71610); -;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/luminance.js -/* IMPORT */ - - -/* MAIN */ -//SOURCE: https://planetcalc.com/7779 -const luminance = (color) => { - const { r, g, b } = dist_color/* default */.Z.parse(color); - const luminance = .2126 * utils/* default */.Z.channel.toLinear(r) + .7152 * utils/* default */.Z.channel.toLinear(g) + .0722 * utils/* default */.Z.channel.toLinear(b); - return utils/* default */.Z.lang.round(luminance); -}; -/* EXPORT */ -/* harmony default export */ const methods_luminance = (luminance); - -;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_light.js -/* IMPORT */ - -/* MAIN */ -const isLight = (color) => { - return methods_luminance(color) >= .5; -}; -/* EXPORT */ -/* harmony default export */ const is_light = (isLight); - -;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/is_dark.js -/* IMPORT */ - -/* MAIN */ -const isDark = (color) => { - return !is_light(color); -}; -/* EXPORT */ -/* harmony default export */ const is_dark = (isDark); /***/ }) diff --git a/assets/js/339.5eb1b06a.js b/assets/js/339.5eb1b06a.js new file mode 100644 index 000000000..dc0ea04bc --- /dev/null +++ b/assets/js/339.5eb1b06a.js @@ -0,0 +1,2 @@ +/*! For license information please see 339.5eb1b06a.js.LICENSE.txt */ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[339],{4182: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;i<r.length;i++)null==(n=r[i]).getChild()?(n.moveBy(e,t),n.displacementX+=e,n.displacementY+=t):n.propogateDisplacementToChildren(e,t)},a.prototype.setPred1=function(e){this.pred1=e},a.prototype.getPred1=function(){return pred1},a.prototype.getPred2=function(){return pred2},a.prototype.setNext=function(e){this.next=e},a.prototype.getNext=function(){return next},a.prototype.setProcessed=function(e){this.processed=e},a.prototype.isProcessed=function(){return processed},e.exports=a},function(e,t,n){"use strict";var r=n(0).FDLayout,i=n(4),a=n(3),o=n(5),s=n(2),l=n(1),u=n(0).FDLayoutConstants,c=n(0).LayoutConstants,h=n(0).Point,d=n(0).PointD,p=n(0).Layout,g=n(0).Integer,f=n(0).IGeometry,v=n(0).LGraph,y=n(0).Transform;function m(){r.call(this),this.toBeTiled={}}for(var b in m.prototype=Object.create(r.prototype),r)m[b]=r[b];m.prototype.newGraphManager=function(){var e=new i(this);return this.graphManager=e,e},m.prototype.newGraph=function(e){return new a(null,this.graphManager,e)},m.prototype.newNode=function(e){return new o(this.graphManager,e)},m.prototype.newEdge=function(e){return new s(null,null,e)},m.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=u.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=u.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=u.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=u.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=u.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=u.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/u.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=u.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},m.prototype.layout=function(){return c.DEFAULT_CREATE_BENDS_AS_NEEDED&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},m.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental)l.TREE_REDUCTION_ON_INCREMENTAL&&(this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation(),t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)})),this.graphManager.setAllNodesToApplyGravitation(n));else{var e=this.getFlatForest();if(e.length>0)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;n<e.length;n++){var r=e[n].rect,i=e[n].id;t[i]={id:i,x:r.getCenterX(),y:r.getCenterY(),w:r.width,h:r.height}}return t},m.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var e=!1;if("during"===u.ANIMATE)this.emit("layoutstarted");else{for(;!e;)e=this.tick();this.graphManager.updateBounds()}},m.prototype.calculateNodesToApplyGravitationTo=function(){var e,t,n=[],r=this.graphManager.getGraphs(),i=r.length;for(t=0;t<i;t++)(e=r[t]).updateConnected(),e.isConnected||(n=n.concat(e.getNodes()));return n},m.prototype.createBendpoints=function(){var e=[];e=e.concat(this.graphManager.getAllEdges());var t,n=new Set;for(t=0;t<e.length;t++){var r=e[t];if(!n.has(r)){var i=r.getSource(),a=r.getTarget();if(i==a)r.getBendpoints().push(new d),r.getBendpoints().push(new d),this.createDummyNodesForBendpoints(r),n.add(r);else{var o=[];if(o=(o=o.concat(i.getEdgeListToNode(a))).concat(a.getEdgeListToNode(i)),!n.has(o[0])){var s;if(o.length>1)for(s=0;s<o.length;s++){var l=o[s];l.getBendpoints().push(new d),this.createDummyNodesForBendpoints(l)}o.forEach((function(e){n.add(e)}))}}}if(n.size==e.length)break}},m.prototype.positionNodesRadially=function(e){for(var t=new h(0,0),n=Math.ceil(Math.sqrt(e.length)),r=0,i=0,a=0,o=new d(0,0),s=0;s<e.length;s++){s%n==0&&(a=0,i=r,0!=s&&(i+=l.DEFAULT_COMPONENT_SEPERATION),r=0);var u=e[s],g=p.findCenterOfTree(u);t.x=a,t.y=i,(o=m.radialLayout(u,g,t)).y>r&&(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;o<e.length;o++)e[o].transform(a);var s=new d(i.getMaxX(),i.getMaxY());return a.inverseTransformPoint(s)},m.branchRadialLayout=function(e,t,n,r,i,a){var o=(r-n+1)/2;o<0&&(o+=180);var s=(o+n)%360*f.TWO_PI/360,l=(Math.cos(s),i*Math.cos(s)),u=i*Math.sin(s);e.setCenter(l,u);var c=[],h=(c=c.concat(e.getEdges())).length;null!=t&&h--;for(var d,p=0,g=c.length,v=e.getEdgesBetween(t);v.length>1;){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 T=(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;n<e.length;n++){var r=e[n].getDiagonal();r>t&&(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;i<r.length;i++){var a=(s=r[i]).getParent();0!==this.getNodeDegreeWithChildren(s)||null!=a.id&&this.getToBeTiled(a)||n.push(s)}for(i=0;i<n.length;i++){var s,l=(s=n[i]).getParent().id;void 0===t[l]&&(t[l]=[]),t[l]=t[l].concat(s)}Object.keys(t).forEach((function(n){if(t[n].length>1){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<t[n].length;u++){var c=t[n][u];l.remove(c),s.add(c)}}}))},m.prototype.clearCompounds=function(){var e={},t={};this.performDFSOnCompounds();for(var n=0;n<this.compoundOrder.length;n++)t[this.compoundOrder[n].id]=this.compoundOrder[n],e[this.compoundOrder[n].id]=[].concat(this.compoundOrder[n].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[n].getChild()),this.compoundOrder[n].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(e,t)},m.prototype.clearZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach((function(n){var r=e.idToDummyNode[n];t[n]=e.tileNodes(e.memberGroups[n],r.paddingLeft+r.paddingRight),r.rect.width=t[n].width,r.rect.height=t[n].height}))},m.prototype.repopulateCompounds=function(){for(var e=this.compoundOrder.length-1;e>=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;i<r.length;i++){var a=r[i];if(this.getNodeDegree(a)>0)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;r<t.length;r++){var i=t[r];i.getSource().id!==i.getTarget().id&&(n+=1)}return n},m.prototype.getNodeDegreeWithChildren=function(e){var t=this.getNodeDegree(e);if(null==e.getChild())return t;for(var n=e.getChild().getNodes(),r=0;r<n.length;r++){var i=n[r];t+=this.getNodeDegreeWithChildren(i)}return t},m.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},m.prototype.fillCompexOrderByDFS=function(e){for(var t=0;t<e.length;t++){var n=e[t];null!=n.getChild()&&this.fillCompexOrderByDFS(n.getChild().getNodes()),this.getToBeTiled(n)&&this.compoundOrder.push(n)}},m.prototype.adjustLocations=function(e,t,n,r,i){n+=i;for(var a=t+=r,o=0;o<e.rows.length;o++){var s=e.rows[o];t=a;for(var l=0,u=0;u<s.length;u++){var c=s[u];c.rect.x=t,c.rect.y=n,t+=c.rect.width+e.horizontalPadding,c.rect.height>l&&(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.height<t.rect.width*t.rect.height?1:0}));for(var r=0;r<e.length;r++){var i=e[r];0==n.rows.length?this.insertNodeToRow(n,i,0,t):this.canAddHorizontal(n,i.rect.width,i.rect.height)?this.insertNodeToRow(n,i,this.getShortestRowIndex(n),t):this.insertNodeToRow(n,i,n.rows.length,t),this.shiftToLastRow(n)}return n},m.prototype.insertNodeToRow=function(e,t,n,r){var i=r;n==e.rows.length&&(e.rows.push([]),e.rowWidth.push(i),e.rowHeight.push(0));var a=e.rowWidth[n]+t.rect.width;e.rows[n].length>0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width<a&&(e.width=a);var o=t.rect.height;n>0&&(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;r<e.rows.length;r++)e.rowWidth[r]<n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.getLongestRowIndex=function(e){for(var t=-1,n=Number.MIN_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]>n&&(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]<n&&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.width<t?(e.height+s)/t:(e.height+s)/e.width)<1&&(o=1/o),a<1&&(a=1/a),a<o},m.prototype.shiftToLastRow=function(e){var t=this.getLongestRowIndex(e),n=e.rowWidth.length-1,r=e.rows[t],i=r[r.length-1],a=i.width+e.horizontalPadding;if(e.width-e.rowWidth[n]>a&&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;s<r.length;s++)r[s].height>o&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]<i.height+e.verticalPadding&&(e.rowHeight[n]=i.height+e.verticalPadding);var u=e.rowHeight[t]+e.rowHeight[n];e.height+=u-l,this.shiftToLastRow(e)}},m.prototype.tilingPreLayout=function(){l.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},m.prototype.tilingPostLayout=function(){l.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},m.prototype.reduceTrees=function(){for(var e,t=[],n=!0;n;){var r=this.graphManager.getAllNodes(),i=[];n=!1;for(var a=0;a<r.length;a++)1!=(e=r[a]).getEdges().length||e.getEdges()[0].isInterGraph||null!=e.getChild()||(i.push([e,e.getEdges()[0],e.getOwner()]),n=!0);if(1==n){for(var o=[],s=0;s<i.length;s++)1==i[s][0].getEdges().length&&(o.push(i[s]),i[s][0].getOwner().remove(i[s][0]));t.push(o),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},m.prototype.growTree=function(e){for(var t,n=e[e.length-1],r=0;r<n.length;r++)t=n[r],this.findPlaceforPrunedNode(t),t[2].add(t[0]),t[2].add(t[1],t[1].source,t[1].target);e.splice(e.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},m.prototype.findPlaceforPrunedNode=function(e){var t,n,r=e[0],i=(n=r==e[1].source?e[1].target:e[1].source).startX,a=n.finishX,o=n.startY,s=n.finishY,l=[0,0,0,0];if(o>0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a<this.grid.length-1)for(c=o;c<=s;c++)l[1]+=this.grid[a+1][c].length+this.grid[a][c].length-1;if(s<this.grid[0].length-1)for(c=i;c<=a;c++)l[2]+=this.grid[c][s+1].length+this.grid[c][s].length-1;if(i>0)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;f<l.length;f++)l[f]<p?(p=l[f],h=1,d=f):l[f]==p&&h++;if(3==h&&0==p)0==l[0]&&0==l[1]&&0==l[2]?t=1:0==l[0]&&0==l[1]&&0==l[3]?t=0:0==l[0]&&0==l[2]&&0==l[3]?t=3:0==l[1]&&0==l[2]&&0==l[3]&&(t=2);else if(2==h&&0==p){var v=Math.floor(2*Math.random());t=0==l[0]&&0==l[1]?0==v?0:1:0==l[0]&&0==l[2]?0==v?0:2:0==l[0]&&0==l[3]?0==v?0:3:0==l[1]&&0==l[2]?0==v?1:2:0==l[1]&&0==l[3]?0==v?1:3:0==v?2:3}else t=4==h&&0==p?v=Math.floor(4*Math.random()):d;0==t?r.setCenter(n.getCenterX(),n.getCenterY()-n.getHeight()/2-u.DEFAULT_EDGE_LENGTH-r.getHeight()/2):1==t?r.setCenter(n.getCenterX()+n.getWidth()/2+u.DEFAULT_EDGE_LENGTH+r.getWidth()/2,n.getCenterY()):2==t?r.setCenter(n.getCenterX(),n.getCenterY()+n.getHeight()/2+u.DEFAULT_EDGE_LENGTH+r.getHeight()/2):r.setCenter(n.getCenterX()-n.getWidth()/2-u.DEFAULT_EDGE_LENGTH-r.getWidth()/2,n.getCenterY())},e.exports=m},function(e,t,n){"use strict";var r={};r.layoutBase=n(0),r.CoSEConstants=n(1),r.CoSEEdge=n(2),r.CoSEGraph=n(3),r.CoSEGraphManager=n(4),r.CoSELayout=n(6),r.CoSENode=n(5),e.exports=r}])},e.exports=r(n(2241))},4607: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=1)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).layoutBase.LayoutConstants,i=n(0).layoutBase.FDLayoutConstants,a=n(0).CoSEConstants,o=n(0).CoSELayout,s=n(0).CoSENode,l=n(0).layoutBase.PointD,u=n(0).layoutBase.DimensionD,c={ready:function(){},stop:function(){},quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function h(e){this.options=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(c,e),d(this.options)}var d=function(e){null!=e.nodeRepulsion&&(a.DEFAULT_REPULSION_STRENGTH=i.DEFAULT_REPULSION_STRENGTH=e.nodeRepulsion),null!=e.idealEdgeLength&&(a.DEFAULT_EDGE_LENGTH=i.DEFAULT_EDGE_LENGTH=e.idealEdgeLength),null!=e.edgeElasticity&&(a.DEFAULT_SPRING_STRENGTH=i.DEFAULT_SPRING_STRENGTH=e.edgeElasticity),null!=e.nestingFactor&&(a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=e.nestingFactor),null!=e.gravity&&(a.DEFAULT_GRAVITY_STRENGTH=i.DEFAULT_GRAVITY_STRENGTH=e.gravity),null!=e.numIter&&(a.MAX_ITERATIONS=i.MAX_ITERATIONS=e.numIter),null!=e.gravityRange&&(a.DEFAULT_GRAVITY_RANGE_FACTOR=i.DEFAULT_GRAVITY_RANGE_FACTOR=e.gravityRange),null!=e.gravityCompound&&(a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=e.gravityCompound),null!=e.gravityRangeCompound&&(a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=e.gravityRangeCompound),null!=e.initialEnergyOnIncremental&&(a.DEFAULT_COOLING_FACTOR_INCREMENTAL=i.DEFAULT_COOLING_FACTOR_INCREMENTAL=e.initialEnergyOnIncremental),"draft"==e.quality?r.QUALITY=0:"proof"==e.quality?r.QUALITY=2:r.QUALITY=1,a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=r.NODE_DIMENSIONS_INCLUDE_LABELS=e.nodeDimensionsIncludeLabels,a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=r.DEFAULT_INCREMENTAL=!e.randomize,a.ANIMATE=i.ANIMATE=r.ANIMATE=e.animate,a.TILE=e.tile,a.TILING_PADDING_VERTICAL="function"==typeof e.tilingPaddingVertical?e.tilingPaddingVertical.call():e.tilingPaddingVertical,a.TILING_PADDING_HORIZONTAL="function"==typeof e.tilingPaddingHorizontal?e.tilingPaddingHorizontal.call():e.tilingPaddingHorizontal};h.prototype.run=function(){var e,t,n=this.options,r=(this.idToLNode={},this.layout=new o),i=this;i.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var a=r.newGraphManager();this.gm=a;var s=this.options.eles.nodes(),l=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(s),r);for(var u=0;u<l.length;u++){var c=l[u],h=this.idToLNode[c.data("source")],d=this.idToLNode[c.data("target")];h!==d&&0==h.getEdgesBetween(d).length&&(a.add(r.newEdge(),h,d).id=c.id())}var p=function(e,t){"number"==typeof e&&(e=t);var n=e.data("id"),r=i.idToLNode[n];return{x:r.getRect().getCenterX(),y:r.getRect().getCenterY()}},g=function a(){for(var o,s=function(){n.fit&&n.cy.fit(n.eles,n.padding),e||(e=!0,i.cy.one("layoutready",n.ready),i.cy.trigger({type:"layoutready",layout:i}))},l=i.options.refresh,u=0;u<l&&!o;u++)o=i.stopped||i.layout.tick();if(o)return r.checkLayoutSuccess()&&!r.isSubLayout&&r.doPostLayout(),r.tilingPostLayout&&r.tilingPostLayout(),r.isLayoutFinished=!0,i.options.eles.nodes().positions(p),s(),i.cy.one("layoutstop",i.options.stop),i.cy.trigger({type:"layoutstop",layout:i}),t&&cancelAnimationFrame(t),void(e=!1);var c=i.layout.getPositionsData();n.eles.nodes().positions((function(e,t){if("number"==typeof e&&(e=t),!e.isParent()){for(var n=e.id(),r=c[n],i=e;null==r&&(r=c[i.data("parent")]||c["DummyCompound_"+i.data("parent")],c[n]=r,null!=(i=i.parent()[0])););return null!=r?{x:r.x,y:r.y}:{x:e.position("x"),y:e.position("y")}}})),s(),t=requestAnimationFrame(a)};return r.addListener("layoutstarted",(function(){"during"===i.options.animate&&(t=requestAnimationFrame(g))})),r.runLayout(),"during"!==this.options.animate&&(i.options.eles.nodes().not(":parent").layoutPositions(i,i.options,p),e=!1),this},h.prototype.getTopMostNodes=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].id()]=!0;var r=e.filter((function(e,n){"number"==typeof e&&(e=n);for(var r=e.parent()[0];null!=r;){if(t[r.id()])return!1;r=r.parent()[0]}return!0}));return r},h.prototype.processChildrenList=function(e,t,n){for(var r=t.length,i=0;i<r;i++){var a,o,c=t[i],h=c.children(),d=c.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if((a=null!=c.outerWidth()&&null!=c.outerHeight()?e.add(new s(n.graphManager,new l(c.position("x")-d.w/2,c.position("y")-d.h/2),new u(parseFloat(d.w),parseFloat(d.h)))):e.add(new s(this.graphManager))).id=c.data("id"),a.paddingLeft=parseInt(c.css("padding")),a.paddingTop=parseInt(c.css("padding")),a.paddingRight=parseInt(c.css("padding")),a.paddingBottom=parseInt(c.css("padding")),this.options.nodeDimensionsIncludeLabels&&c.isParent()){var p=c.boundingBox({includeLabels:!0,includeNodes:!1}).w,g=c.boundingBox({includeLabels:!0,includeNodes:!1}).h,f=c.css("text-halign");a.labelWidth=p,a.labelHeight=g,a.labelPos=f}this.idToLNode[c.data("id")]=a,isNaN(a.rect.x)&&(a.rect.x=0),isNaN(a.rect.y)&&(a.rect.y=0),null!=h&&h.length>0&&(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(4182))},1377:function(e,t,n){e.exports=function(){"use strict";function e(t){return e="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},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){return s(e)||l(e,t)||u(e,t)||h()}function s(e){if(Array.isArray(e))return e}function l(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(l){s=!0,i=l}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}}function u(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var d="undefined"==typeof window?null:window,p=d?d.navigator:null;d&&d.document;var g=e(""),f=e({}),v=e((function(){})),y="undefined"==typeof HTMLElement?"undefined":e(HTMLElement),m=function(e){return e&&e.instanceString&&x(e.instanceString)?e.instanceString():null},b=function(t){return null!=t&&e(t)==g},x=function(t){return null!=t&&e(t)===v},w=function(e){return!N(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},E=function(t){return null!=t&&e(t)===f&&!w(t)&&t.constructor===Object},T=function(t){return null!=t&&e(t)===f},_=function(t){return null!=t&&e(t)===e(1)&&!isNaN(t)},D=function(e){return _(e)&&Math.floor(e)===e},C=function(e){return"undefined"===y?void 0:null!=e&&e instanceof HTMLElement},N=function(e){return A(e)||L(e)},A=function(e){return"collection"===m(e)&&e._private.single},L=function(e){return"collection"===m(e)&&!e._private.single},S=function(e){return"core"===m(e)},O=function(e){return"stylesheet"===m(e)},k=function(e){return"event"===m(e)},I=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},M=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement},P=function(e){return E(e)&&_(e.x1)&&_(e.x2)&&_(e.y1)&&_(e.y2)},R=function(e){return T(e)&&x(e.then)},B=function(){return p&&p.userAgent.match(/msie|trident|edge/i)},F=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=this,a=arguments,o=t.apply(i,a),s=n.cache;return(r=s[o])||(r=s[o]=e.apply(i,a)),r};return n.cache={},n},z=F((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),G=F((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),Y=F((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),X=function(e){return I(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},V="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",U="rgb[a]?\\(("+V+"[%]?)\\s*,\\s*("+V+"[%]?)\\s*,\\s*("+V+"[%]?)(?:\\s*,\\s*("+V+"))?\\)",j="rgb[a]?\\((?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)(?:\\s*,\\s*(?:"+V+"))?\\)",H="hsl[a]?\\(("+V+")\\s*,\\s*("+V+"[%])\\s*,\\s*("+V+"[%])(?:\\s*,\\s*("+V+"))?\\)",q="hsl[a]?\\((?:"+V+")\\s*,\\s*(?:"+V+"[%])\\s*,\\s*(?:"+V+"[%])(?:\\s*,\\s*(?:"+V+"))?\\)",W="\\#[0-9a-fA-F]{3}",$="\\#[0-9a-fA-F]{6}",K=function(e,t){return e<t?-1:e>t?1:0},Z=function(e,t){return-1*K(e,t)},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},J=function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}},ee=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("^"+H+"$").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},te=function(e){var t,n=new RegExp("^"+U+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)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},ne=function(e){return ie[e.toLowerCase()]},re=function(e){return(w(e)?e:null)||ne(e)||J(e)||te(e)||ee(e)},ie={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]},ae=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},oe=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t};function se(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var le=se,ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function ce(e,t){return e(t={exports:{}},t.exports),t.exports}var he="object"==typeof ue&&ue&&ue.Object===Object&&ue,de="object"==typeof self&&self&&self.Object===Object&&self,pe=he||de||Function("return this")(),ge=function(){return pe.Date.now()},fe=/\s/;function ve(e){for(var t=e.length;t--&&fe.test(e.charAt(t)););return t}var ye=ve,me=/^\s+/;function be(e){return e?e.slice(0,ye(e)+1).replace(me,""):e}var xe=be,we=pe.Symbol,Ee=Object.prototype,Te=Ee.hasOwnProperty,_e=Ee.toString,De=we?we.toStringTag:void 0;function Ce(e){var t=Te.call(e,De),n=e[De];try{e[De]=void 0;var r=!0}catch(a){}var i=_e.call(e);return r&&(t?e[De]=n:delete e[De]),i}var Ne=Ce,Ae=Object.prototype.toString;function Le(e){return Ae.call(e)}var Se=Le,Oe="[object Null]",ke="[object Undefined]",Ie=we?we.toStringTag:void 0;function Me(e){return null==e?void 0===e?ke:Oe:Ie&&Ie in Object(e)?Ne(e):Se(e)}var Pe=Me;function Re(e){return null!=e&&"object"==typeof e}var Be=Re,Fe="[object Symbol]";function ze(e){return"symbol"==typeof e||Be(e)&&Pe(e)==Fe}var Ge=ze,Ye=NaN,Xe=/^[-+]0x[0-9a-f]+$/i,Ve=/^0b[01]+$/i,Ue=/^0o[0-7]+$/i,je=parseInt;function He(e){if("number"==typeof e)return e;if(Ge(e))return Ye;if(le(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=le(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=xe(e);var n=Ve.test(e);return n||Ue.test(e)?je(e.slice(2),n?2:8):Xe.test(e)?Ye:+e}var qe=He,We="Expected a function",$e=Math.max,Ke=Math.min;function Ze(e,t,n){var r,i,a,o,s,l,u=0,c=!1,h=!1,d=!0;if("function"!=typeof e)throw new TypeError(We);function p(t){var n=r,a=i;return r=i=void 0,u=t,o=e.apply(a,n)}function g(e){return u=e,s=setTimeout(y,t),c?p(e):o}function f(e){var n=t-(e-l);return h?Ke(n,a-(e-u)):n}function v(e){var n=e-l;return void 0===l||n>=t||n<0||h&&e-u>=a}function y(){var e=ge();if(v(e))return m(e);s=setTimeout(y,f(e))}function m(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function b(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0}function x(){return void 0===s?o:m(ge())}function w(){var e=ge(),n=v(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return g(l);if(h)return clearTimeout(s),s=setTimeout(y,t),p(l)}return void 0===s&&(s=setTimeout(y,t)),o}return t=qe(t)||0,le(n)&&(c=!!n.leading,a=(h="maxWait"in n)?$e(qe(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),w.cancel=b,w.flush=x,w}var Qe=Ze,Je=d?d.performance:null,et=Je&&Je.now?function(){return Je.now()}:function(){return Date.now()},tt=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(et())}),1e3/60)}}(),nt=function(e){return tt(e)},rt=et,it=9261,at=65599,ot=5381,st=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:it;!(t=e.next()).done;)n=n*at+t.value|0;return n},lt=function(e){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:it)*at+e|0},ut=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ot;return(t<<5)+t+e|0},ct=function(e,t){return 2097152*e+t},ht=function(e){return 2097152*e[0]+e[1]},dt=function(e,t){return[lt(e[0],t[0]),ut(e[1],t[1])]},pt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)},gt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},ft=function(){return vt(arguments)},vt=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?gt(r):gt(r,t)}return t},yt=!0,mt=null!=console.warn,bt=null!=console.trace,xt=Number.MAX_SAFE_INTEGER||9007199254740991,wt=function(){return!0},Et=function(){return!1},Tt=function(){return 0},_t=function(){},Dt=function(e){throw new Error(e)},Ct=function(e){if(void 0===e)return yt;yt=!!e},Nt=function(e){Ct()&&(mt?console.warn(e):(console.log(e),bt&&console.trace()))},At=function(e){return Q({},e)},Lt=function(e){return null==e?e:w(e)?e.slice():E(e)?At(e):e},St=function(e){return e.slice()},Ot=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},kt={},It=function(){return kt},Mt=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Pt=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Rt=function(e){e.splice(0,e.length)},Bt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}},Ft=function(e,t,n){return n&&(t=Y(n,t)),e[t]},zt=function(e,t,n,r){n&&(t=Y(n,t)),e[t]=r},Gt=function(){function e(){t(this,e),this._obj={}}return i(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}(),Yt="undefined"!=typeof Map?Map:Gt,Xt="undefined",Vt=function(){function e(n){if(t(this,e),this._obj=Object.create(null),this.size=0,null!=n){var r;r=null!=n.instanceString&&n.instanceString()===this.instanceString()?n.toArray():n;for(var i=0;i<r.length;i++)this.add(r[i])}}return i(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ut=("undefined"==typeof Set?"undefined":e(Set))!==Xt?Set:Vt,jt=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&S(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 Ut,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;u<c;u++){var h=l[u];h&&""!==h&&i.classes.add(h)}this.createEmitter();var d=t.style||t.css;d&&(Nt("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(d)),(void 0===n||n)&&this.restore()}else Dt("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else Dt("An element must have a core reference and parameters set")},Ht=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;E(t)&&!N(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||x(n)?r:n,n=x(n)?n:function(){};for(var a,o=this._private.cy,s=t=b(t)?this.filter(t):t,l=[],u=[],c={},h={},d={},p=0,g=this.byGroup(),f=g.nodes,v=g.edges,y=0;y<s.length;y++){var m=s[y],w=m.id();m.isNode()&&(l.unshift(m),e.bfs&&(d[w]=!0,u.push(m)),h[w]=0)}for(var T=function(){var t=e.bfs?l.shift():l.pop(),i=t.id();if(e.dfs){if(d[i])return"continue";d[i]=!0,u.push(t)}var o=h[i],s=c[i],g=null!=s?s.source():null,y=null!=s?s.target():null,m=null==s?void 0:t.same(g)?y[0]:g[0],b=void 0;if(!0===(b=n(t,s,m,p++,o)))return a=t,"break";if(!1===b)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&v.has(e)})),w=0;w<x.length;w++){var E=x[w],T=E.connectedNodes().filter((function(e){return!e.same(t)&&f.has(e)})),_=T.id();0===T.length||d[_]||(T=T[0],l.push(T),e.bfs&&(d[_]=!0,u.push(T)),c[_]=E,h[_]=h[i]+1)}};0!==l.length;){var _=T();if("continue"!==_&&"break"===_)break}for(var D=o.collection(),C=0;C<u.length;C++){var A=u[C],L=c[A.id()];null!=L&&D.push(L),D.push(A)}return{path:o.collection(D),found:o.collection(a)}}},qt={breadthFirstSearch:Ht({bfs:!0}),depthFirstSearch:Ht({dfs:!0})};qt.bfs=qt.breadthFirstSearch,qt.dfs=qt.depthFirstSearch;var Wt=ce((function(e,t){(function(){var t,n,r,i,a,o,s,l,u,c,h,d,p,g,f;r=Math.floor,c=Math.min,n=function(e,t){return e<t?-1:e>t?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);i<a;)o(t,e[s=r((i+a)/2)])<0?a=s:i=s+1;return[].splice.apply(e,[i,i-i].concat(t)),t},o=function(e,t,r){return null==r&&(r=n),e.push(t),g(e,0,e.length-1,r)},a=function(e,t){var r,i;return null==t&&(t=n),r=e.pop(),e.length?(i=e[0],e[0]=r,f(e,0,t)):i=r,i},l=function(e,t,r){var i;return null==r&&(r=n),i=e[0],e[0]=t,f(e,0,r),i},s=function(e,t,r){var i;return null==r&&(r=n),e.length&&r(e[0],t)<0&&(t=(i=[e[0],t])[0],e[0]=i[1],f(e,0,r)),t},i=function(e,t){var i,a,o,s,l,u;for(null==t&&(t=n),l=[],a=0,o=(s=function(){u=[];for(var t=0,n=r(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;a<o;a++)i=s[a],l.push(f(e,i,t));return l},p=function(e,t,r){var i;if(null==r&&(r=n),-1!==(i=e.indexOf(t)))return g(e,0,i,r),f(e,i,r)},h=function(e,t,r){var a,o,l,u,c;if(null==r&&(r=n),!(o=e.slice(0,t)).length)return o;for(i(o,r),l=0,u=(c=e.slice(t)).length;l<u;l++)a=c[l],s(o,a,r);return o.sort(r).reverse()},d=function(e,t,r){var o,s,l,h,d,p,g,f,v;if(null==r&&(r=n),10*t<=e.length){if(!(l=e.slice(0,t).sort(r)).length)return l;for(s=l[l.length-1],h=0,p=(g=e.slice(t)).length;h<p;h++)r(o=g[h],s)<0&&(u(l,o,0,null,r),l.pop(),s=l[l.length-1]);return l}for(i(e,r),v=[],d=0,f=c(t,e.length);0<=f?d<f:d>f;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;i<a;)(s=i+1)<a&&!(r(e[i],e[s])<0)&&(i=s),e[t]=e[i],i=2*(t=i)+1;return e[t]=o,g(e,l,t,r)},t=function(){function e(e){this.cmp=null!=e?e:n,this.nodes=[]}return e.push=o,e.pop=a,e.replace=l,e.pushpop=s,e.heapify=i,e.updateItem=p,e.nlargest=h,e.nsmallest=d,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return a(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return l(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return s(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return i(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return p(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),function(t,n){e.exports=n()}(0,(function(){return t}))}).call(ue)})),$t=Wt,Kt=Mt({root:null,weight:function(e){return 1},directed:!1}),Zt={dijkstra:function(e){if(!E(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Kt(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,l=b(r)?this.filter(r)[0]:r[0],u={},c={},h={},d=this.byGroup(),p=d.nodes,g=d.edges;g.unmergeBy((function(e){return e.isLoop()}));for(var f=function(e){return u[e.id()]},v=function(e,t){u[e.id()]=t,y.updateItem(e)},y=new $t((function(e,t){return f(e)-f(t)})),m=0;m<p.length;m++){var x=p[m];u[x.id()]=x.same(l)?0:1/0,y.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(g),i=1/0,o=0;o<r.length;o++){var l=r[o],u=s(l);(u<i||!n)&&(i=u,n=l)}return{edge:n,dist:i}};y.size()>0;){var T=y.pop(),_=f(T),D=T.id();if(h[D]=_,_!==1/0)for(var C=T.neighborhood().intersect(p),N=0;N<C.length;N++){var A=C[N],L=A.id(),S=w(T,A),O=_+S.dist;O<f(A)&&(v(A,O),c[L]={node:T,edge:S.edge})}}return{distanceTo:function(e){var t=b(e)?p.filter(e)[0]:e[0];return h[t.id()]},pathTo:function(e){var t=b(e)?p.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)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)}}}},Qt={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;t<a.length;t++)if(a[t].has(e))return t},l=0;l<i;l++)a[l]=this.spawn(n[l]);for(var u=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<u.length;c++){var h=u[c],d=h.source()[0],p=h.target()[0],g=s(d),f=s(p),v=a[g],y=a[f];g!==f&&(o.merge(h),v.merge(y),a.splice(f,1))}return o}},Jt=Mt({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),en={aStar:function(e){var t=this.cy(),n=Jt(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var l,u,c=r.id(),h=i.id(),d={},p={},g={},f=new $t((function(e,t){return p[e.id()]-p[t.id()]})),v=new Ut,y={},m={},b=function(e,t){f.push(e),v.add(t)},x=function(){l=f.pop(),u=l.id(),v.delete(u)},w=function(e){return v.has(e)};b(r,c),d[c]=0,p[c]=a(r);for(var E=0;f.size()>0;){if(x(),E++,u===h){for(var T=[],_=i,D=h,C=m[D];T.unshift(_),null!=C&&T.unshift(C),null!=(_=y[D]);)C=m[D=_.id()];return{found:!0,distance:d[u],path:this.spawn(T),steps:E}}g[u]=!0;for(var N=l._private.edges,A=0;A<N.length;A++){var L=N[A];if(this.hasElementWithId(L.id())&&(!o||L.data("source")===u)){var S=L.source(),O=L.target(),k=S.id()!==u?S:O,I=k.id();if(this.hasElementWithId(I)&&!g[I]){var M=d[u]+s(L);w(I)?M<d[I]&&(d[I]=M,p[I]=M+a(k),y[I]=l,m[I]=L):(d[I]=M,p[I]=M+a(k),b(k,I),y[I]=l,m[I]=L)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},tn=Mt({weight:function(e){return 1},directed:!1}),nn={floydWarshall:function(e){for(var t=this.cy(),n=tn(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,l=o.edges,u=s.length,c=u*u,h=function(e){return s.indexOf(e)},d=function(e){return s[e]},p=new Array(c),g=0;g<c;g++){var f=g%u,v=(g-f)/u;p[g]=v===f?0:1/0}for(var y=new Array(c),m=new Array(c),x=0;x<l.length;x++){var w=l[x],E=w.source()[0],T=w.target()[0];if(E!==T){var _=h(E),D=h(T),C=_*u+D,N=a(w);if(p[C]>N&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+_;!i&&p[A]>N&&(p[A]=N,y[A]=_,m[A]=w)}}}for(var L=0;L<u;L++)for(var S=0;S<u;S++)for(var O=S*u+L,k=0;k<u;k++){var I=S*u+k,M=L*u+k;p[O]+p[M]<p[I]&&(p[I]=p[O]+p[M],y[I]=y[O])}var P=function(e){return(b(e)?t.filter(e):e)[0]},R=function(e){return h(P(e))},B={distance:function(e,t){var n=R(e),r=R(t);return p[n*u+r]},path:function(e,n){var r=R(e),i=R(n),a=d(r);if(r===i)return a.collection();if(null==y[r*u+i])return t.collection();var o,s=t.collection(),l=r;for(s.merge(a);r!==i;)l=r,r=y[r*u+i],o=m[l*u+r],s.merge(o),s.merge(d(r));return s}};return B}},rn=Mt({weight:function(e){return 1},directed:!1,root:null}),an={bellmanFord:function(e){var t=this,n=rn(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,l=this.cy(),u=this.byGroup(),c=u.edges,h=u.nodes,d=h.length,p=new Yt,g=!1,f=[];a=l.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var v=c.length,y=function(e){var t=p.get(e.id());return t||(t={},p.set(e.id(),t)),t},m=function(e){return(b(e)?l.$(e):e)[0]},x=function(e){return y(m(e)).dist},w=function(e){for(var n=arguments.length>1&&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)},E=0;E<d;E++){var T=h[E],_=y(T);T.same(a)?_.dist=0:_.dist=1/0,_.pred=null,_.edge=null}for(var D=!1,C=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,D=!0)},N=1;N<d;N++){D=!1;for(var A=0;A<v;A++){var L=c[A],S=L.source(),O=L.target(),k=o(L),I=y(S),M=y(O);C(S,O,L,I,M,k),i||C(O,S,L,M,I,k)}if(!D)break}if(D)for(var P=[],R=0;R<v;R++){var B=c[R],F=B.source(),z=B.target(),G=o(B),Y=y(F).dist,X=y(z).dist;if(Y+G<X||!i&&X+G<Y){if(g||(Nt("Graph contains a negative weight cycle for Bellman-Ford"),g=!0),!1===e.findNegativeWeightCycles)break;var V=[];Y+G<X&&V.push(F),!i&&X+G<Y&&V.push(z);for(var U=V.length,j=0;j<U;j++){var H=V[j],q=[H];q.push(y(H).edge);for(var W=y(H).pred;-1===q.indexOf(W);)q.push(W),q.push(y(W).edge),W=y(W).pred;for(var $=(q=q.slice(q.indexOf(W)))[0].id(),K=0,Z=2;Z<q.length;Z+=2)q[Z].id()<$&&($=q[Z].id(),K=Z);(q=q.slice(K).concat(q.slice(0,K))).push(q[0]);var Q=q.map((function(e){return e.id()})).join(",");-1===P.indexOf(Q)&&(f.push(s.spawn(q)),P.push(Q))}}}return{distanceTo:x,pathTo:w,hasNegativeWeightCycle:g,negativeWeightCycles:f}}},on=Math.sqrt(2),sn=function(e,t,n){0===n.length&&Dt("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;p<l.length;p++){var g=l[p];g[1]===s?(l[p]=g.slice(),l[p][1]=o):g[2]===s&&(l[p]=g.slice(),l[p][2]=o)}for(var f=0;f<t.length;f++)t[f]===s&&(t[f]=o);return l},ln=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=sn(i,e,t),n--}return t},un={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/on);if(!(i<2)){for(var l=[],u=0;u<a;u++){var c=r[u];l.push([u,n.indexOf(c.source()),n.indexOf(c.target())])}for(var h=1/0,d=[],p=new Array(i),g=new Array(i),f=new Array(i),v=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)g[m]=m;var b=ln(g,l.slice(),i,s),x=b.slice();v(g,f);var w=ln(g,b,s,2),E=ln(f,x,s,2);w.length<=E.length&&w.length<h?(h=w.length,d=w,v(g,p)):E.length<=w.length&&E.length<h&&(h=E.length,d=E,v(f,p))}for(var T=this.spawn(d.map((function(e){return r[e[0]]}))),_=this.spawn(),D=this.spawn(),C=p[0],N=0;N<p.length;N++){var A=p[N],L=n[N];A===C?_.merge(L):D.merge(L)}var S=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!T.contains(t)&&n.merge(t)}))})),n},O=[S(_),S(D)];return{cut:T,components:O,partition1:_,partition2:D}}Dt("At least 2 nodes are required for Karger-Stein algorithm")}},cn=function(e){return{x:e.x,y:e.y}},hn=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},dn=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},pn=function(e){return{x:e[0],y:e[1]}},gn=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=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r},fn=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=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r},vn=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;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i},yn=function(e){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=!(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]?(n<e.length&&e.splice(n,e.length-n),t>0&&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},mn=function(e){return Math.PI*e/180},bn=function(e,t){return Math.atan2(t,e)-Math.PI/2},xn=Math.log2||function(e){return Math.log(e)/Math.log(2)},wn=function(e){return e>0?1:e<0?-1:0},En=function(e,t){return Math.sqrt(Tn(e,t))},Tn=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},_n=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},Dn=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},Cn=function(e,t,n,r){return{x:Dn(e.x,t.x,n.x,r),y:Dn(e.y,t.y,n.y,r)}},Nn=function(e,t,n,r){var i={x:t.x-e.x,y:t.y-e.y},a=En(e,t),o={x:i.x/a,y:i.y/a};return n=null==n?0:n,r=null!=r?r:n*a,{x:e.x+o.x*r,y:e.y+o.y*r}},An=function(e,t,n){return Math.max(e,Math.min(n,t))},Ln=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=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}}},Sn=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},On=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},kn=function(e,t,n){return{x1:e.x1+t,x2:e.x2+t,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},In=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},Mn=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},Pn=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},Rn=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 s=o(a,4);t=s[0],n=s[1],r=s[2],i=s[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},Bn=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},Fn=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2<t.x1||t.x2<e.x1||e.y2<t.y1||t.y2<e.y1||e.y1>t.y2||t.y1>e.y2)},zn=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},Gn=function(e,t){return zn(e,t.x,t.y)},Yn=function(e,t){return zn(e,t.x1,t.y1)&&zn(e,t.x2,t.y2)},Xn=function(e,t,n,r,i,a,o){var s,l=hr(i,a),u=i/2,c=a/2,h=r-c-o;if((s=ir(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=ir(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=ir(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=ir(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=nr(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=nr(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=nr(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,T=r+c-l;return(g=nr(e,t,n,r,E,T,l+o)).length>0&&g[0]<=E&&g[1]>=T?[g[0],g[1]]:[]},Vn=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},Un=function(e,t,n,r,i,a,o,s,l){var u={x1:Math.min(n,o,i)-l,x2:Math.max(n,o,i)+l,y1:Math.min(r,s,a)-l,y2:Math.max(r,s,a)+l};return!(e<u.x1||e>u.x2||t<u.y1||t>u.y2)},jn=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]},Hn=function(e,t,n,r,i){var a,o,s,l,u,c,h,d;return 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,void(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,void(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),void(i[4]=-h+d*Math.cos((l+4*Math.PI)/3))))},qn=function(e,t,n,r,i,a,o,s){var l=[];Hn(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=1e-7,c=[],h=0;h<6;h+=2)Math.abs(l[h+1])<u&&l[h]>=0&&l[h]<=1&&c.push(l[h]);c.push(1),c.push(0);for(var d,p,g,f=-1,v=0;v<c.length;v++)d=Math.pow(1-c[v],2)*n+2*(1-c[v])*c[v]*i+c[v]*c[v]*o,p=Math.pow(1-c[v],2)*r+2*(1-c[v])*c[v]*a+c[v]*c[v]*s,g=Math.pow(d-e,2)+Math.pow(p-t,2),f>=0?g<f&&(f=g):f=g;return f},Wn=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],h=c*c/l;return c<0?u:h>l?(e-i)*(e-i)+(t-a)*(t-a):u-h},$n=function(e,t,n){for(var r,i,a,o,s=0,l=0;l<n.length/2;l++)if(r=n[2*l],i=n[2*l+1],l+1<n.length/2?(a=n[2*(l+1)],o=n[2*(l+1)+1]):(a=n[2*(l+1-n.length/2)],o=n[2*(l+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},Kn=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;g<c.length/2;g++)c[2*g]=a/2*(n[2*g]*d-n[2*g+1]*p),c[2*g+1]=o/2*(n[2*g+1]*d+n[2*g]*p),c[2*g]+=r,c[2*g+1]+=i;if(l>0){var f=Jn(c,-l);h=Qn(f)}else h=c;return $n(e,t,h)},Zn=function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=dr(a,o),h=c*c,d=0;d<n.length/4;d++){var p=void 0,g=void 0;p=0===d?n.length-2:4*d-2,g=4*d+2;var f=r+l*n[4*d],v=i+u*n[4*d+1],y=-n[p]*n[g]-n[p+1]*n[g+1],m=c/Math.tan(Math.acos(y)/2),b=f-m*n[p],x=v-m*n[p+1],w=f+m*n[g],E=v+m*n[g+1];s[4*d]=b,s[4*d+1]=x,s[4*d+2]=w,s[4*d+3]=E;var T=n[p+1],_=-n[p];T*n[g]+_*n[g+1]<0&&(T*=-1,_*=-1);var D=b+T*c,C=x+_*c;if(Math.pow(D-e,2)+Math.pow(C-t,2)<=h)return!0}return $n(e,t,s)},Qn=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var h=ir(t,n,r,i,a,o,s,l,!0);u[2*c]=h[0],u[2*c+1]=h[1]}return u},Jn=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-r,u=-(i-n),c=Math.sqrt(l*l+u*u),h=l/c,d=u/c;o[4*s]=n+h*t,o[4*s+1]=r+d*t,o[4*s+2]=i+h*t,o[4*s+3]=a+d*t}return o},er=function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(u<0)return[];var c=u/l;return[(n-e)*c+e,(r-t)*c+t]},tr=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},nr=function(e,t,n,r,i,a,o){var s=[n-e,r-t],l=[e-i,t-a],u=s[0]*s[0]+s[1]*s[1],c=2*(l[0]*s[0]+l[1]*s[1]),h=c*c-4*u*(l[0]*l[0]+l[1]*l[1]-o*o);if(h<0)return[];var d=(-c+Math.sqrt(h))/(2*u),p=(-c-Math.sqrt(h))/(2*u),g=Math.min(d,p),f=Math.max(d,p),v=[];if(g>=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]},rr=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},ir=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,w=0-x,E=1+x;return w<=m&&m<=E&&w<=b&&b<=E||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?rr(e,n,o)===o?[o,s]:rr(e,n,i)===i?[i,a]:rr(i,o,n)===n?[n,r]:[]:[]},ar=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;y<f.length/2;y++)f[2*y]=n[2*y]*a+r,f[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=Jn(f,-s);u=Qn(m)}else u=f}else u=n;for(var b=0;b<u.length/2;b++)c=u[2*b],h=u[2*b+1],b<u.length/2-1?(d=u[2*(b+1)],p=u[2*(b+1)+1]):(d=u[0],p=u[1]),0!==(l=ir(e,t,r,i,c,h,d,p)).length&&g.push(l[0],l[1]);return g},or=function(e,t,n,r,i,a,o,s){for(var l,u=[],c=new Array(n.length),h=a/2,d=o/2,p=dr(a,o),g=0;g<n.length/4;g++){var f=void 0,v=void 0;f=0===g?n.length-2:4*g-2,v=4*g+2;var y=r+h*n[4*g],m=i+d*n[4*g+1],b=-n[f]*n[v]-n[f+1]*n[v+1],x=p/Math.tan(Math.acos(b)/2),w=y-x*n[f],E=m-x*n[f+1],T=y+x*n[v],_=m+x*n[v+1];0===g?(c[n.length-2]=w,c[n.length-1]=E):(c[4*g-2]=w,c[4*g-1]=E),c[4*g]=T,c[4*g+1]=_;var D=n[f+1],C=-n[f];D*n[v]+C*n[v+1]<0&&(D*=-1,C*=-1),0!==(l=nr(e,t,r,i,w+D*p,E+C*p,p)).length&&u.push(l[0],l[1])}for(var N=0;N<c.length/4;N++)0!==(l=ir(e,t,r,i,c[4*N],c[4*N+1],c[4*N+2],c[4*N+3],!1)).length&&u.push(l[0],l[1]);if(u.length>2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),S=1;S<u.length/2;S++){var O=Math.pow(u[2*S]-e,2)+Math.pow(u[2*S+1]-t,2);O<=L&&(A[0]=u[2*S],A[1]=u[2*S+1],L=O)}return A}return u},sr=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},lr=function(e,t){var n=cr(e,t);return n=ur(n)},ur=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,l=0;l<r;l++)t=e[2*l],n=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var u=2/(o-i),c=2/(s-a),h=0;h<r;h++)t=e[2*h]=e[2*h]*u,n=e[2*h+1]=e[2*h+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var d=0;d<r;d++)n=e[2*d+1]=e[2*d+1]+(-1-a);return e},cr=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},hr=function(e,t){return Math.min(e/4,t/4,8)},dr=function(e,t){return Math.min(e/10,t/10,8)},pr=function(){return 8},gr=function(e,t,n){return[e-2*t+n,2*(t-e),e]},fr=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},vr=Mt({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),yr={pageRank:function(e){for(var t=vr(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),l=s.nodes,u=s.edges,c=l.length,h=c*c,d=u.length,p=new Array(h),g=new Array(c),f=(1-n)/c,v=0;v<c;v++){for(var y=0;y<c;y++)p[v*c+y]=0;g[v]=0}for(var m=0;m<d;m++){var b=u[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=l.indexOfId(x),T=l.indexOfId(w),_=a(b);p[T*c+E]+=_,g[E]+=_}}for(var D=1/c+f,C=0;C<c;C++)if(0===g[C])for(var N=0;N<c;N++)p[N*c+C]=D;else for(var A=0;A<c;A++){var L=A*c+C;p[L]=p[L]/g[C]+f}for(var S,O=new Array(c),k=new Array(c),I=0;I<c;I++)O[I]=1;for(var M=0;M<i;M++){for(var P=0;P<c;P++)k[P]=0;for(var R=0;R<c;R++)for(var B=0;B<c;B++){var F=R*c+B;k[R]+=p[F]*O[B]}_n(k),S=O,O=k,k=S;for(var z=0,G=0;G<c;G++){var Y=S[G]-O[G];z+=Y*Y}if(z<r)break}return{rank:function(e){return e=o.collection(e)[0],O[l.indexOf(e)]}}}},mr=Mt({root:null,weight:function(e){return 1},directed:!1,alpha:0}),br={degreeCentralityNormalized:function(e){e=mr(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,l=0;l<r;l++){var u=n[l],c=u.id();e.root=u;var h=this.degreeCentrality(e);o<h.indegree&&(o=h.indegree),s<h.outdegree&&(s=h.outdegree),i[c]=h.indegree,a[c]=h.outdegree}return{indegree:function(e){return 0==o?0:(b(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(b(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var d={},p=0,g=0;g<r;g++){var f=n[g];e.root=f;var v=this.degreeCentrality(e);p<v.degree&&(p=v.degree),d[f.id()]=v.degree}return{degree:function(e){return 0===p?0:(b(e)&&(e=t.filter(e)),d[e.id()]/p)}}},degreeCentrality:function(e){e=mr(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var l=i.connectedEdges(),u=l.filter((function(e){return e.target().same(i)&&n.has(e)})),c=l.filter((function(e){return e.source().same(i)&&n.has(e)})),h=u.length,d=c.length,p=0,g=0,f=0;f<u.length;f++)p+=a(u[f]);for(var v=0;v<c.length;v++)g+=a(c[v]);return{indegree:Math.pow(h,1-s)*Math.pow(p,s),outdegree:Math.pow(d,1-s)*Math.pow(g,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};br.dc=br.degreeCentrality,br.dcn=br.degreeCentralityNormalised=br.degreeCentralityNormalized;var xr=Mt({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),wr={closenessCentralityNormalized:function(e){for(var t=xr(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,l=this.nodes(),u=this.floydWarshall({weight:r,directed:i}),c=0;c<l.length;c++){for(var h=0,d=l[c],p=0;p<l.length;p++)if(c!==p){var g=u.distance(d,l[p]);h+=n?1/g:g}n||(h=1/h),s<h&&(s=h),o[d.id()]=h}return{closeness:function(e){return 0==s?0:(e=b(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=xr(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++){var c=l[u];if(!c.same(n)){var h=o.distanceTo(c);s+=a?1/h:h}}return a?s:1/s}};wr.cc=wr.closenessCentrality,wr.ccn=wr.closenessCentralityNormalised=wr.closenessCentralityNormalized;var Er=Mt({weight:null,directed:!1}),Tr={betweennessCentrality:function(e){for(var t=Er(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},l={},u=0,c={set:function(e,t){l[e]=t,t>u&&(u=t)},get:function(e){return l[e]}},h=0;h<o.length;h++){var d=o[h],p=d.id();s[p]=n?d.outgoers().nodes():d.openNeighborhood().nodes(),c.set(p,0)}for(var g=function(e){for(var t=o[e].id(),n=[],l={},u={},h={},d=new $t((function(e,t){return h[e]-h[t]})),p=0;p<o.length;p++){var g=o[p].id();l[g]=[],u[g]=0,h[g]=1/0}for(u[t]=1,h[t]=0,d.push(t);!d.empty();){var f=d.pop();if(n.push(f),i)for(var v=0;v<s[f].length;v++){var y=s[f][v],m=a.getElementById(f),b=void 0;b=m.edgesTo(y).length>0?m.edgesTo(y)[0]:y.edgesTo(m)[0];var x=r(b);y=y.id(),h[y]>h[f]+x&&(h[y]=h[f]+x,d.nodes.indexOf(y)<0?d.push(y):d.updateItem(y),u[y]=0,l[y]=[]),h[y]==h[f]+x&&(u[y]=u[y]+u[f],l[y].push(f))}else for(var w=0;w<s[f].length;w++){var E=s[f][w].id();h[E]==1/0&&(d.push(E),h[E]=h[f]+1),h[E]==h[f]+1&&(u[E]=u[E]+u[f],l[E].push(f))}}for(var T={},_=0;_<o.length;_++)T[o[_].id()]=0;for(;n.length>0;){for(var D=n.pop(),C=0;C<l[D].length;C++){var N=l[D][C];T[N]=T[N]+u[N]/u[D]*(1+T[D])}D!=o[e].id()&&c.set(D,c.get(D)+T[D])}},f=0;f<o.length;f++)g(f);var v={betweenness:function(e){var t=a.collection(e).id();return c.get(t)},betweennessNormalized:function(e){if(0==u)return 0;var t=a.collection(e).id();return c.get(t)/u}};return v.betweennessNormalised=v.betweennessNormalized,v}};Tr.bc=Tr.betweennessCentrality;var _r=Mt({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),Dr=function(e){return _r(e)},Cr=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},Nr=function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n},Ar=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},Lr=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},Sr=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=Lr(e,r,t);return e},Or=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return Ar(r,t),r},kr=function(e,t,n,r){for(var i=0;i<n;i++)if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!=Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1;return!0},Ir=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i},Mr=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},Pr=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&Mr(e[t],e[n])&&e.splice(n,1);return e},Rr=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=Dr(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,l=t.length,u=l*l,c=new Array(u),h=0;h<u;h++)c[h]=0;for(var d=0;d<n.length;d++){var p=n[d],g=a[p.source().id()],f=a[p.target().id()],v=Cr(p,i.attributes);c[g*l+f]+=v,c[f*l+g]+=v}Nr(c,l,i.multFactor),Ar(c,l);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=Sr(c,l,i.expandFactor),c=Or(s,l,i.inflateFactor),kr(c,s,u,4)||(y=!0),m++;var b=Ir(c,l,t,r);return b=Pr(b)},Br={markovClustering:Rr,mcl:Rr},Fr=function(e){return e},zr=function(e,t){return Math.abs(t-e)},Gr=function(e,t,n){return e+zr(t,n)},Yr=function(e,t,n){return e+Math.pow(n-t,2)},Xr=function(e){return Math.sqrt(e)},Vr=function(e,t,n){return Math.max(e,zr(t,n))},Ur=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:Fr,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},jr={euclidean:function(e,t,n){return e>=2?Ur(e,t,n,0,Yr,Xr):Ur(e,t,n,0,Gr)},squaredEuclidean:function(e,t,n){return Ur(e,t,n,0,Yr)},manhattan:function(e,t,n){return Ur(e,t,n,0,Gr)},max:function(e,t,n){return Ur(e,t,n,-1/0,Vr)}};function Hr(e,t,n,r,i,a){var o;return o=x(e)?e:jr[e]||jr.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}jr["squared-euclidean"]=jr.squaredEuclidean,jr.squaredeuclidean=jr.squaredEuclidean;var qr=Mt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),Wr=function(e){return qr(e)},$r=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=function(e){return r[e](t)},s=n,l=t;return Hr(e,r.length,a,o,s,l)},Kr=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;l<r;l++)i[l]=e.min(n[l]).value,a[l]=e.max(n[l]).value;for(var u=0;u<t;u++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[u]=s}return o},Zr=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var l=$r(n,e,t[s],r,i);l<a&&(a=l,o=s)}return o},Qr=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},Jr=function(e,t,n){return Math.abs(t-e)<=n},ei=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++)if(Math.abs(e[r][i]-t[r][i])>n)return!1;return!0},ti=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},ni=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];ti(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},ri=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=$r("manhattan",t[i],e,n,"kMedoids");return r},ii=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var l=0;l<e.length;l++)r[s][l]=Math.pow(n[s][l],i.m);for(var u=0;u<e.length;u++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var h=0;h<t.length;h++)a+=r[h][u]*i.attributes[c](t[h]),o+=r[h][u];e[u][c]=a/o}},ai=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,l,u=2/(i.m-1),c=0;c<n.length;c++)for(var h=0;h<r.length;h++){o=0;for(var d=0;d<n.length;d++)s=$r(i.distance,r[h],n[c],i.attributes,"cmeans"),l=$r(i.distance,r[h],n[d],i.attributes,"cmeans"),o+=Math.pow(s/l,u);e[h][c]=1/o}},oi=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var l=0;l<t.length;l++){i=-1/0,a=-1;for(var u=0;u<t[0].length;u++)t[l][u]>i&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o},si=function(e){var t,n,r,i,a=this.cy(),o=this.nodes(),s=Wr(e);r=new Array(o.length);for(var l=0;l<o.length;l++)r[l]=new Array(s.k);n=new Array(o.length);for(var u=0;u<o.length;u++)n[u]=new Array(s.k);for(var c=0;c<o.length;c++){for(var h=0,d=0;d<s.k;d++)n[c][d]=Math.random(),h+=n[c][d];for(var p=0;p<s.k;p++)n[c][p]=n[c][p]/h}t=new Array(s.k);for(var g=0;g<s.k;g++)t[g]=new Array(s.attributes.length);i=new Array(o.length);for(var f=0;f<o.length;f++)i[f]=new Array(s.k);for(var v=!0,y=0;v&&y<s.maxIterations;)v=!1,ii(t,o,n,i,s),ai(n,r,t,o,s),ei(n,r,s.sensitivityThreshold)||(v=!0),y++;return{clusters:oi(o,n,s,a),degreeOfMembership:n}},li={kMeans:function(t){var n,r=this.cy(),i=this.nodes(),a=null,o=Wr(t),s=new Array(o.k),l={};o.testMode?"number"==typeof o.testCentroids?(o.testCentroids,n=Kr(i,o.k,o.attributes)):n="object"===e(o.testCentroids)?o.testCentroids:Kr(i,o.k,o.attributes):n=Kr(i,o.k,o.attributes);for(var u=!0,c=0;u&&c<o.maxIterations;){for(var h=0;h<i.length;h++)l[(a=i[h]).id()]=Zr(a,n,o.distance,o.attributes,"kMeans");u=!1;for(var d=0;d<o.k;d++){var p=Qr(d,i,l);if(0!==p.length){for(var g=o.attributes.length,f=n[d],v=new Array(g),y=new Array(g),m=0;m<g;m++){y[m]=0;for(var b=0;b<p.length;b++)a=p[b],y[m]+=o.attributes[m](a);v[m]=y[m]/p.length,Jr(v[m],f[m],o.sensitivityThreshold)||(u=!0)}n[d]=v,s[d]=r.collection(p)}}c++}return s},kMedoids:function(t){var n,r,i=this.cy(),a=this.nodes(),o=null,s=Wr(t),l=new Array(s.k),u={},c=new Array(s.k);s.testMode?"number"==typeof s.testCentroids||(n="object"===e(s.testCentroids)?s.testCentroids:ni(a,s.k)):n=ni(a,s.k);for(var h=!0,d=0;h&&d<s.maxIterations;){for(var p=0;p<a.length;p++)u[(o=a[p]).id()]=Zr(o,n,s.distance,s.attributes,"kMedoids");h=!1;for(var g=0;g<n.length;g++){var f=Qr(g,a,u);if(0!==f.length){c[g]=ri(n[g],f,s.attributes);for(var v=0;v<f.length;v++)(r=ri(f[v],f,s.attributes))<c[g]&&(c[g]=r,n[g]=f[v],h=!0);l[g]=i.collection(f)}}d++}return l},fuzzyCMeans:si,fcm:si},ui=Mt({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),ci={single:"min",complete:"max"},hi=function(e){var t=ui(e),n=ci[t.linkage];return null!=n&&(t.linkage=n),t},di=function(e,t,n,r,i){for(var a,o=0,s=1/0,l=i.attributes,u=function(e,t){return Hr(i.distance,l.length,(function(t){return l[t](e)}),(function(e){return l[e](t)}),e,t)},c=0;c<e.length;c++){var h=e[c].key,d=n[h][r[h]];d<s&&(o=h,s=d)}if("threshold"===i.mode&&s>=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;v<e.length;v++){var y=e[v];g.key===y.key?a=1/0:"min"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]>n[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]<n[f.key][y.key]&&(a=n[f.key][y.key])):a="mean"===i.linkage?(n[g.key][y.key]*g.size+n[f.key][y.key]*f.size)/(g.size+f.size):"dendrogram"===i.mode?u(y.value,g.value):u(y.value[0],g.value[0]),n[g.key][y.key]=n[y.key][g.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===g.key||r[b]===f.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return g.key=f.key=g.index=f.index=null,!0},pi=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},gi=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},fi=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&pi(t.left,i),t.right&&pi(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&pi(t.left,i),t.right&&pi(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},vi=function(e){for(var t=this.cy(),n=this.nodes(),r=hi(e),i=r.attributes,a=function(e,t){return Hr(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],l=[],u=[],c=0;c<n.length;c++){var h={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=h,u[c]=h,s[c]=[],l[c]=0}for(var d=0;d<o.length;d++)for(var p=0;p<=d;p++){var g=void 0;g="dendrogram"===r.mode?d===p?1/0:a(o[d].value,o[p].value):d===p?1/0:a(o[d].value[0],o[p].value[0]),s[d][p]=g,s[p][d]=g,g<s[d][l[d]]&&(l[d]=p)}for(var f,v=di(o,u,s,l,r);v;)v=di(o,u,s,l,r);return"dendrogram"===r.mode?(f=fi(o[0],r.dendrogramDepth,t),r.addDendrogram&&gi(o[0],t)):(f=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,f[n]=t.collection(e.value)}))),f},yi={hierarchicalClustering:vi,hca:vi},mi=Mt({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),bi=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||Dt("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||_(n)||Dt("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),mi(e)},xi=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-Hr(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},wi=function(e,t){return"median"===t?yn(e):"mean"===t?vn(e):"min"===t?gn(e):"max"===t?fn(e):t},Ei=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r},Ti=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var l=n[s];t[i*e+l]>o&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u<n.length;u++)r[n[u]]=n[u];return r},_i=function(e,t,n){for(var r=Ti(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,l=-1/0,u=0;u<a.length;u++){for(var c=0,h=0;h<a.length;h++)c+=t[a[h]*e+a[u]];c>l&&(s=u,l=c)}n[i]=a[s]}return r=Ti(e,t,n)},Di=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=bi(e),c={},h=0;h<l.length;h++)c[l[h].id()]=h;n=(t=l.length)*t,r=new Array(n);for(var d=0;d<n;d++)r[d]=-1/0;for(var p=0;p<t;p++)for(var g=0;g<t;g++)p!==g&&(r[p*t+g]=xi(u.distance,l[p],l[g],u.attributes));i=wi(r,u.preference);for(var f=0;f<t;f++)r[f*t+f]=i;a=new Array(n);for(var v=0;v<n;v++)a[v]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,T=new Array(t*u.minIterations),_=0;_<T.length;_++)T[_]=0;for(E=0;E<u.maxIterations;E++){for(var D=0;D<t;D++){for(var C=-1/0,N=-1/0,A=-1,L=0,S=0;S<t;S++)m[S]=a[D*t+S],(L=o[D*t+S]+r[D*t+S])>=C?(N=C,C=L,A=S):L>N&&(N=L);for(var O=0;O<t;O++)a[D*t+O]=(1-u.damping)*(r[D*t+O]-C)+u.damping*m[O];a[D*t+A]=(1-u.damping)*(r[D*t+A]-N)+u.damping*m[A]}for(var k=0;k<t;k++){for(var I=0,M=0;M<t;M++)m[M]=o[M*t+k],b[M]=Math.max(0,a[M*t+k]),I+=b[M];I-=b[k],b[k]=a[k*t+k],I+=b[k];for(var P=0;P<t;P++)o[P*t+k]=(1-u.damping)*Math.min(0,I-b[P])+u.damping*m[P];o[k*t+k]=(1-u.damping)*(I-b[k])+u.damping*m[k]}for(var R=0,B=0;B<t;B++){var F=o[B*t+B]+a[B*t+B]>0?1:0;T[E%u.minIterations*t+B]=F,R+=F}if(R>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var z=0,G=0;G<t;G++){x[G]=0;for(var Y=0;Y<u.minIterations;Y++)x[G]+=T[Y*t+G];0!==x[G]&&x[G]!==u.minIterations||z++}if(z===t)break}}for(var X=Ei(t,a,o),V=_i(t,r,X),U={},j=0;j<X.length;j++)U[X[j]]=[];for(var H=0;H<l.length;H++){var q=V[c[l[H].id()]];null!=q&&U[q].push(l[H])}for(var W=new Array(X.length),$=0;$<X.length;$++)W[$]=s.collection(U[X[$]]);return W},Ci={affinityPropagation:Di,ap:Di},Ni=Mt({root:void 0,directed:!1}),Ai={hierholzer:function(e){if(!E(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Ni(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=b(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||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}},Li=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=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)},l=function l(u,c,h){u===h&&(r+=1),t[c]={id:n,low:n++,cutVertex:!1};var d,p,g,f,v=e.getElementById(c).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(c))):v.forEach((function(e){d=e.source().id(),p=e.target().id(),(g=d===c?p:d)!==h&&(f=e.id(),o[f]||(o[f]=!0,a.push({x:c,y:g,edge:e})),g in t?t[c].low=Math.min(t[c].low,t[g].id):(l(u,g,c),t[c].low=Math.min(t[c].low,t[g].low),t[c].id<=t[g].low&&(t[c].cutVertex=!0,s(c,g))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,l(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Si=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}},Oi={};[qt,Zt,Qt,en,nn,an,un,yr,br,wr,Tr,Br,li,yi,Ci,Ai,{hopcroftTarjanBiconnected:Li,htbc:Li,htb:Li,hopcroftTarjanBiconnectedComponents:Li},{tarjanStronglyConnected:Si,tsc:Si,tscc:Si,tarjanStronglyConnectedComponents:Si}].forEach((function(e){Q(Oi,e)}));var ki=0,Ii=1,Mi=2,Pi=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=ki,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))};Pi.prototype={fulfill:function(e){return Ri(this,Ii,"fulfillValue",e)},reject:function(e){return Ri(this,Mi,"rejectReason",e)},then:function(e,t){var n=this,r=new Pi;return n.onFulfilled.push(zi(e,r,"fulfill")),n.onRejected.push(zi(t,r,"reject")),Bi(n),r.proxy}};var Ri=function(e,t,n,r){return e.state===ki&&(e.state=t,e[n]=r,Bi(e)),e},Bi=function(e){e.state===Ii?Fi(e,"onFulfilled",e.fulfillValue):e.state===Mi&&Fi(e,"onRejected",e.rejectReason)},Fi=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},zi=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}Gi(t,i)}}},Gi=function t(n,r){if(n!==r&&n.proxy!==r){var i;if("object"===e(r)&&null!==r||"function"==typeof r)try{i=r.then}catch(o){return void n.reject(o)}if("function"!=typeof i)n.fulfill(r);else{var a=!1;try{i.call(r,(function(e){a||(a=!0,e===r?n.reject(new TypeError("circular thenable chain")):t(n,e))}),(function(e){a||(a=!0,n.reject(e))}))}catch(o){a||n.reject(o)}}}else n.reject(new TypeError("cannot resolve promise with itself"))};Pi.all=function(e){return new Pi((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Pi.resolve=function(e){return new Pi((function(t,n){t(e)}))},Pi.reject=function(e){return new Pi((function(t,n){n(e)}))};var Yi="undefined"!=typeof Promise?Promise:Pi,Xi=function(e,t,n){var r=S(e),i=!r,a=this._private=Q({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&x(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},Vi=Xi.prototype;Q(Vi,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),N(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;return t="frame"===e?n.frames:n.completes,new Yi((function(e,n){t.push((function(){e()}))}))}}),Vi.complete=Vi.completed,Vi.run=Vi.play,Vi.running=Vi.playing;var Ui={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0: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<t.length;n++)t[n]._private.animation.queue=[];return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var l=a.style();if(e=Q({},e,t),0===Object.keys(e).length)return new Xi(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=l.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var u=e.renderedPosition,c=a.pan(),h=a.zoom();e.position=dn(u,h,c)}if(o&&null!=e.panBy){var d=e.panBy,p=a.pan();e.pan={x:p.x+d.x,y:p.y+d.y}}var g=e.center||e.centre;if(o&&null!=g){var f=a.getCenterPan(g.eles,e.zoom);null!=f&&(e.pan=f)}if(o&&null!=e.fit){var v=e.fit,y=a.getFitViewport(v.eles||v.boundingBox,v.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&E(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new Xi(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=Q({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,l=0;l<s.length;l++){var u=s[l]._private;t&&(u.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},ji=Array.isArray,Hi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qi=/^\w*$/;function Wi(e,t){if(ji(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ge(e))||qi.test(e)||!Hi.test(e)||null!=t&&e in Object(t)}var $i=Wi,Ki="[object AsyncFunction]",Zi="[object Function]",Qi="[object GeneratorFunction]",Ji="[object Proxy]";function ea(e){if(!le(e))return!1;var t=Pe(e);return t==Zi||t==Qi||t==Ki||t==Ji}var ta,na=ea,ra=pe["__core-js_shared__"],ia=(ta=/[^.]+$/.exec(ra&&ra.keys&&ra.keys.IE_PROTO||""))?"Symbol(src)_1."+ta:"";function aa(e){return!!ia&&ia in e}var oa=aa,sa=Function.prototype.toString;function la(e){if(null!=e){try{return sa.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var ua=la,ca=/[\\^$.*+?()[\]{}|]/g,ha=/^\[object .+?Constructor\]$/,da=Function.prototype,pa=Object.prototype,ga=da.toString,fa=pa.hasOwnProperty,va=RegExp("^"+ga.call(fa).replace(ca,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ya(e){return!(!le(e)||oa(e))&&(na(e)?va:ha).test(ua(e))}var ma=ya;function ba(e,t){return null==e?void 0:e[t]}var xa=ba;function wa(e,t){var n=xa(e,t);return ma(n)?n:void 0}var Ea=wa,Ta=Ea(Object,"create");function _a(){this.__data__=Ta?Ta(null):{},this.size=0}var Da=_a;function Ca(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Na=Ca,Aa="__lodash_hash_undefined__",La=Object.prototype.hasOwnProperty;function Sa(e){var t=this.__data__;if(Ta){var n=t[e];return n===Aa?void 0:n}return La.call(t,e)?t[e]:void 0}var Oa=Sa,ka=Object.prototype.hasOwnProperty;function Ia(e){var t=this.__data__;return Ta?void 0!==t[e]:ka.call(t,e)}var Ma=Ia,Pa="__lodash_hash_undefined__";function Ra(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Ta&&void 0===t?Pa:t,this}var Ba=Ra;function Fa(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Fa.prototype.clear=Da,Fa.prototype.delete=Na,Fa.prototype.get=Oa,Fa.prototype.has=Ma,Fa.prototype.set=Ba;var za=Fa;function Ga(){this.__data__=[],this.size=0}var Ya=Ga;function Xa(e,t){return e===t||e!=e&&t!=t}var Va=Xa;function Ua(e,t){for(var n=e.length;n--;)if(Va(e[n][0],t))return n;return-1}var ja=Ua,Ha=Array.prototype.splice;function qa(e){var t=this.__data__,n=ja(t,e);return!(n<0||(n==t.length-1?t.pop():Ha.call(t,n,1),--this.size,0))}var Wa=qa;function $a(e){var t=this.__data__,n=ja(t,e);return n<0?void 0:t[n][1]}var Ka=$a;function Za(e){return ja(this.__data__,e)>-1}var Qa=Za;function Ja(e,t){var n=this.__data__,r=ja(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var eo=Ja;function to(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}to.prototype.clear=Ya,to.prototype.delete=Wa,to.prototype.get=Ka,to.prototype.has=Qa,to.prototype.set=eo;var no=to,ro=Ea(pe,"Map");function io(){this.size=0,this.__data__={hash:new za,map:new(ro||no),string:new za}}var ao=io;function oo(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}var so=oo;function lo(e,t){var n=e.__data__;return so(t)?n["string"==typeof t?"string":"hash"]:n.map}var uo=lo;function co(e){var t=uo(this,e).delete(e);return this.size-=t?1:0,t}var ho=co;function po(e){return uo(this,e).get(e)}var go=po;function fo(e){return uo(this,e).has(e)}var vo=fo;function yo(e,t){var n=uo(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var mo=yo;function bo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}bo.prototype.clear=ao,bo.prototype.delete=ho,bo.prototype.get=go,bo.prototype.has=vo,bo.prototype.set=mo;var xo=bo,wo="Expected a function";function Eo(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(wo);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(Eo.Cache||xo),n}Eo.Cache=xo;var To=Eo,_o=500;function Do(e){var t=To(e,(function(e){return n.size===_o&&n.clear(),e})),n=t.cache;return t}var Co=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,No=/\\(\\)?/g,Ao=Do((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Co,(function(e,n,r,i){t.push(r?i.replace(No,"$1"):n||e)})),t}));function Lo(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var So=Lo,Oo=1/0,ko=we?we.prototype:void 0,Io=ko?ko.toString:void 0;function Mo(e){if("string"==typeof e)return e;if(ji(e))return So(e,Mo)+"";if(Ge(e))return Io?Io.call(e):"";var t=e+"";return"0"==t&&1/e==-Oo?"-0":t}var Po=Mo;function Ro(e){return null==e?"":Po(e)}var Bo=Ro;function Fo(e,t){return ji(e)?e:$i(e,t)?[e]:Ao(Bo(e))}var zo=Fo,Go=1/0;function Yo(e){if("string"==typeof e||Ge(e))return e;var t=e+"";return"0"==t&&1/e==-Go?"-0":t}var Xo=Yo;function Vo(e,t){for(var n=0,r=(t=zo(t,e)).length;null!=e&&n<r;)e=e[Xo(t[n++])];return n&&n==r?e:void 0}var Uo=Vo;function jo(e,t,n){var r=null==e?void 0:Uo(e,t);return void 0===r?n:r}var Ho=jo,qo=function(){try{var e=Ea(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();function Wo(e,t,n){"__proto__"==t&&qo?qo(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var $o=Wo,Ko=Object.prototype.hasOwnProperty;function Zo(e,t,n){var r=e[t];Ko.call(e,t)&&Va(r,n)&&(void 0!==n||t in e)||$o(e,t,n)}var Qo=Zo,Jo=9007199254740991,es=/^(?:0|[1-9]\d*)$/;function ts(e,t){var n=typeof e;return!!(t=null==t?Jo:t)&&("number"==n||"symbol"!=n&&es.test(e))&&e>-1&&e%1==0&&e<t}var ns=ts;function rs(e,t,n,r){if(!le(e))return e;for(var i=-1,a=(t=zo(t,e)).length,o=a-1,s=e;null!=s&&++i<a;){var l=Xo(t[i]),u=n;if("__proto__"===l||"constructor"===l||"prototype"===l)return e;if(i!=o){var c=s[l];void 0===(u=r?r(c,l,s):void 0)&&(u=le(c)?c:ns(t[i+1])?[]:{})}Qo(s,l,u),s=s[l]}return e}var is=rs;function as(e,t,n){return null==e?e:is(e,t,n)}var os=as;function ss(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}var ls=ss;function us(e){return ji(e)?So(e,Xo):Ge(e)?[e]:ls(Ao(Bo(e)))}var cs=us,hs={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new Yi((function(e,t){var i=function(t){n.off.apply(n,o),e(t)},a=r.concat([i]),o=a.concat([]);n.on.apply(n,a)}))}}},ds={};[Ui,{data:function(e){return e=Q({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,o=void 0!==i.length,s=o?i:[i],l=o?i[0]:i;if(b(t)){var u,c=-1!==t.indexOf(".")&&cs(t);if(r.allowGetting&&void 0===n)return l&&(r.beforeGet(l),u=c&&void 0===l._private[r.field][t]?Ho(l._private[r.field],c):l._private[r.field][t]),u;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var h=a({},t,n);r.beforeSet(i,h);for(var d=0,p=s.length;d<p;d++){var g=s[d];r.canSet(g)&&(c&&void 0===l._private[r.field][t]?os(g._private[r.field],c,n):g._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&E(t)){var f,v,y=t,m=Object.keys(y);r.beforeSet(i,y);for(var w=0;w<m.length;w++)if(v=y[f=m[w]],!r.immutableKeys[f])for(var T=0;T<s.length;T++){var _=s[T];r.canSet(_)&&(_._private[r.field][f]=v)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&x(t)){var D=t;i.on(r.bindingEvent,D)}else if(r.allowGetting&&void 0===t){var C;return l&&(r.beforeGet(l),C=l._private[r.field]),C}return i}},removeData:function(e){return e=Q({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(b(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var l=a[s];if(!I(l)&&!n.immutableKeys[l])for(var u=0,c=i.length;u<c;u++)i[u]._private[n.field][l]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var h=0,d=i.length;h<d;h++)for(var p=i[h]._private[n.field],g=Object.keys(p),f=0;f<g.length;f++){var v=g[f];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},hs].forEach((function(e){Q(ds,e)}));var ps={animate:ds.animate(),animation:ds.animation(),animated:ds.animated(),clearQueue:ds.clearQueue(),delay:ds.delay(),delayAnimation:ds.delayAnimation(),stop:ds.stop()},gs={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}w(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ut(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,l=s.classes,u=!1,c=0;c<e.length;c++){var h=e[c];if(!l.has(h)){u=!0;break}}u||(u=l.size!==e.length),u&&(s.classes=i,r.push(o))}return r.length>0&&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;a<o;a++)for(var s=n[a],l=s._private.classes,u=!1,c=0;c<e.length;c++){var h=e[c],d=l.has(h),p=!1;t||r&&!d?(l.add(h),p=!0):(!t||r&&d)&&(l.delete(h),p=!0),!u&&p&&(i.push(s),u=!0)}return i.length>0&&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}};gs.className=gs.classNames=gs.classes;var fs={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:V,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};fs.variable="(?:[\\w-.]|(?:\\\\"+fs.metaChar+"))+",fs.className="(?:[\\w-]|(?:\\\\"+fs.metaChar+"))+",fs.value=fs.string+"|"+fs.number,fs.id=fs.variable,function(){var e,t,n;for(e=fs.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],fs.comparatorOp+="|@"+t;for(e=fs.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(fs.comparatorOp+="|\\!"+t)}();var vs=function(){return{checks:[]}},ys={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},ms=[{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 Z(e.selector,t.selector)})),bs=function(){for(var e,t={},n=0;n<ms.length;n++)t[(e=ms[n]).selector]=e.matches;return t}(),xs=function(e,t){return bs[e](t)},ws="("+ms.map((function(e){return e.selector})).join("|")+")",Es=function(e){return e.replace(new RegExp("\\\\("+fs.metaChar+")","g"),(function(e,t){return t}))},Ts=function(e,t,n){e[e.length-1]=n},_s=[{name:"group",query:!0,regex:"("+fs.group+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:ys.GROUP,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:ws,populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:ys.STATE,value:r})}},{name:"id",query:!0,regex:"\\#("+fs.id+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:ys.ID,value:Es(r)})}},{name:"className",query:!0,regex:"\\.("+fs.className+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:ys.CLASS,value:Es(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+fs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:ys.DATA_EXIST,field:Es(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+fs.variable+")\\s*("+fs.comparatorOp+")\\s*("+fs.value+")\\s*\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];s=null!=new RegExp("^"+fs.string+"$").exec(s)?s.substring(1,s.length-1):parseFloat(s),t.checks.push({type:ys.DATA_COMPARE,field:Es(i),operator:a,value:s})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+fs.boolOp+")\\s*("+fs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,2),i=r[0],a=r[1];t.checks.push({type:ys.DATA_BOOL,field:Es(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+fs.meta+")\\s*("+fs.comparatorOp+")\\s*("+fs.number+")\\s*\\]\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];t.checks.push({type:ys.META_COMPARE,field:Es(i),operator:a,value:parseFloat(s)})}},{name:"nextQuery",separator:!0,regex:fs.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]=vs()}},{name:"directedEdge",separator:!0,regex:fs.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n=vs(),r=t,i=vs();return n.checks.push({type:ys.DIRECTED_EDGE,source:r,target:i}),Ts(e,t,n),e.edgeCount++,i}var a=vs(),o=t,s=vs();return a.checks.push({type:ys.NODE_SOURCE,source:o,target:s}),Ts(e,t,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:fs.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n=vs(),r=t,i=vs();return n.checks.push({type:ys.UNDIRECTED_EDGE,nodes:[r,i]}),Ts(e,t,n),e.edgeCount++,i}var a=vs(),o=t,s=vs();return a.checks.push({type:ys.NODE_NEIGHBOR,node:o,neighbor:s}),Ts(e,t,a),s}},{name:"child",separator:!0,regex:fs.child,populate:function(e,t){if(null==e.currentSubject){var n=vs(),r=vs(),i=e[e.length-1];return n.checks.push({type:ys.CHILD,parent:i,child:r}),Ts(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=vs(),o=e[e.length-1],s=vs(),l=vs(),u=vs(),c=vs();return a.checks.push({type:ys.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:ys.TRUE}],c.checks.push({type:ys.TRUE}),s.checks.push({type:ys.PARENT,parent:c,child:u}),Ts(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=vs(),d=vs(),p=[{type:ys.PARENT,parent:h,child:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"descendant",separator:!0,regex:fs.descendant,populate:function(e,t){if(null==e.currentSubject){var n=vs(),r=vs(),i=e[e.length-1];return n.checks.push({type:ys.DESCENDANT,ancestor:i,descendant:r}),Ts(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=vs(),o=e[e.length-1],s=vs(),l=vs(),u=vs(),c=vs();return a.checks.push({type:ys.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:ys.TRUE}],c.checks.push({type:ys.TRUE}),s.checks.push({type:ys.ANCESTOR,ancestor:c,descendant:u}),Ts(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=vs(),d=vs(),p=[{type:ys.ANCESTOR,ancestor:h,descendant:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"subject",modifier:!0,regex:fs.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Nt("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===ys.DIRECTED_EDGE?n.type=ys.NODE_TARGET:r===ys.UNDIRECTED_EDGE&&(n.type=ys.NODE_NEIGHBOR,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];_s.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var Ds=function(e){for(var t,n,r,i=0;i<_s.length;i++){var a=_s[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var l=s[0];e=e.substring(l.length);break}}return{expr:t,match:n,name:r,remaining:e}},Cs=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e},Ns={parse:function(e){var t=this,n=t.inputText=e,r=t[0]=vs();for(t.length=1,n=Cs(n);;){var i=Ds(n);if(null==i.expr)return Nt("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var l=0;l<t.length;l++){var u=t[l];if(u.compoundCount>0&&u.edgeCount>0)return Nt("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Nt("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Nt("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 ys.GROUP:var l=e(s);return l.substring(0,l.length-1);case ys.DATA_COMPARE:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case ys.DATA_BOOL:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case ys.DATA_EXIST:return"["+r.field+"]";case ys.META_COMPARE:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case ys.STATE:return s;case ys.ID:return"#"+s;case ys.CLASS:return"."+s;case ys.PARENT:case ys.CHILD:return i(r.parent,a)+n(">")+i(r.child,a);case ys.ANCESTOR:case ys.DESCENDANT:return i(r.ancestor,a)+" "+i(r.descendant,a);case ys.COMPOUND_SPLIT:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case ys.TRUE: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;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},As=function(e,t,n){var r,i,a,o=b(e),s=_(e),l=b(n),u=!1,c=!1,h=!1;switch(t.indexOf("!")>=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=e<n;break;case"<=":h=!0,r=e<=n;break;default:r=!1}return!c||null==e&&h||(r=!r),r},Ls=function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}},Ss=function(e){return void 0!==e},Os=function(e,t){return e.data(t)},ks=function(e,t){return e[t]()},Is=[],Ms=function(e,t){return e.checks.every((function(e){return Is[e.type](e,t)}))};Is[ys.GROUP]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Is[ys.STATE]=function(e,t){var n=e.value;return xs(n,t)},Is[ys.ID]=function(e,t){var n=e.value;return t.id()===n},Is[ys.CLASS]=function(e,t){var n=e.value;return t.hasClass(n)},Is[ys.META_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return As(ks(t,n),r,i)},Is[ys.DATA_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return As(Os(t,n),r,i)},Is[ys.DATA_BOOL]=function(e,t){var n=e.field,r=e.operator;return Ls(Os(t,n),r)},Is[ys.DATA_EXIST]=function(e,t){var n=e.field;return e.operator,Ss(Os(t,n))},Is[ys.UNDIRECTED_EDGE]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return Ms(n,i)&&Ms(r,a)||Ms(r,i)&&Ms(n,a)},Is[ys.NODE_NEIGHBOR]=function(e,t){return Ms(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&Ms(e.neighbor,t)}))},Is[ys.DIRECTED_EDGE]=function(e,t){return Ms(e.source,t.source())&&Ms(e.target,t.target())},Is[ys.NODE_SOURCE]=function(e,t){return Ms(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&Ms(e.target,t)}))},Is[ys.NODE_TARGET]=function(e,t){return Ms(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&Ms(e.source,t)}))},Is[ys.CHILD]=function(e,t){return Ms(e.child,t)&&Ms(e.parent,t.parent())},Is[ys.PARENT]=function(e,t){return Ms(e.parent,t)&&t.children().some((function(t){return Ms(e.child,t)}))},Is[ys.DESCENDANT]=function(e,t){return Ms(e.descendant,t)&&t.ancestors().some((function(t){return Ms(e.ancestor,t)}))},Is[ys.ANCESTOR]=function(e,t){return Ms(e.ancestor,t)&&t.descendants().some((function(t){return Ms(e.descendant,t)}))},Is[ys.COMPOUND_SPLIT]=function(e,t){return Ms(e.subject,t)&&Ms(e.left,t)&&Ms(e.right,t)},Is[ys.TRUE]=function(){return!0},Is[ys.COLLECTION]=function(e,t){return e.value.has(t)},Is[ys.FILTER]=function(e,t){return(0,e.value)(t)};var Ps={matches:function(e){for(var t=this,n=0;n<t.length;n++){var r=t[n];if(Ms(r,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===ys.ID)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(Ms(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Rs=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||b(e)&&e.match(/^\s*$/)||(N(e)?this.addQuery({checks:[{type:ys.COLLECTION,value:e.collection()}]}):x(e)?this.addQuery({checks:[{type:ys.FILTER,value:e}]}):b(e)?this.parse(e)||(this.invalid=!0):Dt("A selector must be created from a string; found "))},Bs=Rs.prototype;[Ns,Ps].forEach((function(e){return Q(Bs,e)})),Bs.text=function(){return this.inputText},Bs.size=function(){return this.length},Bs.eq=function(e){return this[e]},Bs.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Bs.addQuery=function(e){this[this.length++]=e},Bs.selector=Bs.toString;var Fs={allAre:function(e){var t=new Rs(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Rs(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++)if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0;return!1},every:function(e,t){for(var n=0;n<this.length;n++)if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1;return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};Fs.allAreNeighbours=Fs.allAreNeighbors,Fs.has=Fs.contains,Fs.equal=Fs.equals=Fs.same;var zs,Gs,Ys=function(e,t){return function(n,r,i,a){var o,s=n,l=this;if(null==s?o="":N(s)&&1===s.length&&(o=s.id()),1===l.length&&o){var u=l[0]._private,c=u.traversalCache=u.traversalCache||{},h=c[t]=c[t]||[],d=gt(o),p=h[d];return p||(h[d]=e.call(l,n,r,i,a))}return e.call(l,n,r,i,a)}},Xs={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Ys((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];function n(e){for(var r=0;r<e.length;r++){var i=e[r];t.push(i),i.children().nonempty()&&n(i.children())}}return n(this.children()),this.spawn(t,!0).filter(e)}};function Vs(e,t,n,r){for(var i=[],a=new Ut,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var l=e[s];n?i.push(l):o&&r(i,a,l)}for(;i.length>0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function Us(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function js(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function Hs(e,t,n){js(e,t,n),Us(e,t,n)}Xs.forEachDown=function(e){return Vs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Us)},Xs.forEachUp=function(e){return Vs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],js)},Xs.forEachUpAndDown=function(e){return Vs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Hs)},Xs.ancestors=Xs.parents,(zs=Gs={data:ds.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:ds.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ds.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ds.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ds.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ds.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=zs.data,zs.removeAttr=zs.removeData;var qs,Ws,$s=Gs,Ks={};function Zs(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;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function Qs(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}Q(Ks,{degree:Zs((function(e,t){return t.source().same(t.target())?2:1})),indegree:Zs((function(e,t){return t.target().same(e)?1:0})),outdegree:Zs((function(e,t){return t.source().same(e)?1:0}))}),Q(Ks,{minDegree:Qs("degree",(function(e,t){return e<t})),maxDegree:Qs("degree",(function(e,t){return e>t})),minIndegree:Qs("indegree",(function(e,t){return e<t})),maxIndegree:Qs("indegree",(function(e,t){return e>t})),minOutdegree:Qs("outdegree",(function(e,t){return e<t})),maxOutdegree:Qs("outdegree",(function(e,t){return e>t}))}),Q(Ks,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var Js=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},el={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){Js(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};(qs=Ws={position:ds.data(el),silentPosition:ds.data(Q({},el,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){Js(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(E(e))t?this.silentPosition(e):this.position(e);else if(x(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a=this[i],o=void 0;(o=n(a,i))&&(t?a.silentPosition(o):a.position(o))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(E(e)?(r={x:_(e.x)?e.x:0,y:_(e.y)?e.y:0},n=t):b(e)&&_(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),l={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(l):o.position(l)}}i.endBatch()}return this},silentShift:function(e,t){return E(e)?this.shift(e,!0):b(e)&&_(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=E(e)?e:void 0,s=void 0!==o||void 0!==t&&b(e);if(n&&n.isNode()){if(!s){var l=n.position();return o=hn(l,i,a),void 0===e?o:o[e]}for(var u=0;u<this.length;u++){var c=this[u];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(dn(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=E(e)?e:void 0,a=void 0!==i||void 0!==t&&b(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),l=o?n.parent():null,u=l&&l.length>0,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;d<this.length;d++){var p=this[d],g=o?p.parent():null,f=g&&g.length>0,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}}).modelPosition=qs.point=qs.position,qs.modelPositions=qs.points=qs.positions,qs.renderedPoint=qs.renderedPosition,qs.relativePoint=qs.relativePosition;var tl,nl,rl=Ws;tl=nl={},nl.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}},nl.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},nl.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=m(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}}function m(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}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var il=function(e){return e===1/0||e===-1/0?0:e},al=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},ol=function(e,t){return null==t?e:al(e,t.x1,t.y1,t.x2,t.y2)},sl=function(e,t,n){return Ft(e,t,n)},ll=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,Pn(u,1),al(e,u.x1,u.y1,u.x2,u.y2)}}},ul=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=sl(a,"labelWidth",n),p=sl(a,"labelHeight",n),g=sl(a,"labelX",n),f=sl(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,T=2,_=p,D=d,C=D/2,N=_/2;if(m)o=g-C,s=g+C,l=f-N,u=f+N;else{switch(c.value){case"left":o=g-D,s=g;break;case"center":o=g-C,s=g+C;break;case"right":o=g,s=g+D}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-N,u=f+N;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-T,s+=v+Math.max(x,w)+E+T,l+=y-Math.max(x,w)-E-T,u+=y+Math.max(x,w)+E+T;var A=n||"main",L=i.labelBounds,S=L[A]=L[A]||{};S.x1=o,S.y1=l,S.x2=s,S.y2=u,S.w=s-o,S.h=u-l;var O=m&&"autorotate"===b.strValue,k=null!=b.pfValue&&0!==b.pfValue;if(O||k){var I=O?sl(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(I),P=Math.sin(I),R=(o+s)/2,B=(l+u)/2;if(!m){switch(c.value){case"left":R=s;break;case"right":R=o}switch(h.value){case"top":B=u;break;case"bottom":B=l}}var F=function(e,t){return{x:(e-=R)*M-(t-=B)*P+R,y:e*P+t*M+B}},z=F(o,l),G=F(o,u),Y=F(s,l),X=F(s,u);o=Math.min(z.x,G.x,Y.x,X.x),s=Math.max(z.x,G.x,Y.x,X.x),l=Math.min(z.y,G.y,Y.y,X.y),u=Math.max(z.y,G.y,Y.y,X.y)}var V=A+"Rot",U=L[V]=L[V]||{};U.x1=o,U.y1=l,U.x2=s,U.y2=u,U.w=s-o,U.h=u-l,al(e,o,l,s,u),al(i.labelBounds.all,o,l,s,u)}return e}},cl=function(e,t){if(!t.cy().headless()){var n=t.pstyle("outline-opacity").value,r=t.pstyle("outline-width").value;if(n>0&&r>0){var i=t.pstyle("outline-offset").value,a=t.pstyle("shape").value,o=r+i,s=(e.w+2*o)/e.w,l=(e.h+2*o)/e.h,u=0,c=0;["diamond","pentagon","round-triangle"].includes(a)?(s=(e.w+2.4*o)/e.w,c=-o/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(a)?s=(e.w+2.4*o)/e.w:"star"===a?(s=(e.w+2.8*o)/e.w,l=(e.h+2.6*o)/e.h,c=-o/3.8):"triangle"===a?(s=(e.w+2.8*o)/e.w,l=(e.h+2.4*o)/e.h,c=-o/1.4):"vee"===a&&(s=(e.w+4.4*o)/e.w,l=(e.h+3.8*o)/e.h,c=.5*-o);var h=e.h*l-e.h,d=e.w*s-e.w;if(Rn(e,[Math.ceil(h/2),Math.ceil(d/2)]),0!=u||0!==c){var p=kn(e,u,c);In(e,p)}}}},hl=function(e,t){var n,r,i,a,o,s,l=e._private.cy,u=l.styleEnabled(),c=l.headless(),h=Ln(),d=e._private,p=e.isNode(),g=e.isEdge(),f=d.rstyle,v=p&&u?e.pstyle("bounds-expansion").pfValue:[0],y=function(e){return"none"!==e.pstyle("display").value},m=!u||y(e)&&(!g||y(e.source())&&y(e.target()));if(m){var b=0;u&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(b=e.pstyle("overlay-padding").value);var x=0;u&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(x=e.pstyle("underlay-padding").value);var w=Math.max(b,x),E=0;if(u&&(E=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var _=e.outerWidth()/2,D=e.outerHeight()/2;al(h,n=o-_,i=s-D,r=o+_,a=s+D),u&&t.includeOutlines&&cl(h,e)}else if(g&&t.includeEdges)if(u&&!c){var C=e.pstyle("curve-style").strValue;if(n=Math.min(f.srcX,f.midX,f.tgtX),r=Math.max(f.srcX,f.midX,f.tgtX),i=Math.min(f.srcY,f.midY,f.tgtY),a=Math.max(f.srcY,f.midY,f.tgtY),al(h,n-=E,i-=E,r+=E,a+=E),"haystack"===C){var N=f.haystackPts;if(N&&2===N.length){if(n=N[0].x,i=N[0].y,n>(r=N[1].x)){var A=n;n=r,r=A}if(i>(a=N[1].y)){var L=i;i=a,a=L}al(h,n-E,i-E,r+E,a+E)}}else if("bezier"===C||"unbundled-bezier"===C||"segments"===C||"taxi"===C){var S;switch(C){case"bezier":case"unbundled-bezier":S=f.bezierPts;break;case"segments":case"taxi":S=f.linePts}if(null!=S)for(var O=0;O<S.length;O++){var k=S[O];n=k.x-E,r=k.x+E,i=k.y-E,a=k.y+E,al(h,n,i,r,a)}}}else{var I=e.source().position(),M=e.target().position();if((n=I.x)>(r=M.x)){var P=n;n=r,r=P}if((i=I.y)>(a=M.y)){var R=i;i=a,a=R}al(h,n-=E,i-=E,r+=E,a+=E)}if(u&&t.includeEdges&&g&&(ll(h,e,"mid-source"),ll(h,e,"mid-target"),ll(h,e,"source"),ll(h,e,"target")),u&&"yes"===e.pstyle("ghost").value){var B=e.pstyle("ghost-offset-x").pfValue,F=e.pstyle("ghost-offset-y").pfValue;al(h,h.x1+B,h.y1+F,h.x2+B,h.y2+F)}var z=d.bodyBounds=d.bodyBounds||{};Bn(z,h),Rn(z,v),Pn(z,1),u&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,al(h,n-w,i-w,r+w,a+w));var G=d.overlayBounds=d.overlayBounds||{};Bn(G,h),Rn(G,v),Pn(G,1);var Y=d.labelBounds=d.labelBounds||{};null!=Y.all?On(Y.all):Y.all=Ln(),u&&t.includeLabels&&(t.includeMainLabels&&ul(h,e,null),g&&(t.includeSourceLabels&&ul(h,e,"source"),t.includeTargetLabels&&ul(h,e,"target")))}return h.x1=il(h.x1),h.y1=il(h.y1),h.x2=il(h.x2),h.y2=il(h.y2),h.w=il(h.x2-h.x1),h.h=il(h.y2-h.y1),h.w>0&&h.h>0&&m&&(Rn(h,v),Pn(h,1)),h},dl=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays),r+=n(e.includeOutlines)},pl=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return pt([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},gl=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?vl:dl(t))===vl,o=pl(e),s=r.bbCachePosKey===o,l=t.useCache&&s,u=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!l||u(e)||i&&u(e.source())||u(e.target())?(s||e.recalculateRenderedStyle(l),n=hl(e,fl),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=Ln(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?ol(n,r.overlayBounds):ol(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?ol(n,r.labelBounds.all):(t.includeMainLabels&&ol(n,r.labelBounds.mainRot),t.includeSourceLabels&&ol(n,r.labelBounds.sourceRot),t.includeTargetLabels&&ol(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},fl={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},vl=dl(fl),yl=Mt(fl);nl.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=Ln();var n=yl(e=e||fl),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=pl(a),l=o.bbCachePosKey===s,u=n.useCache&&l&&!o.styleDirty;a.recalculateRenderedStyle(u)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var h=r[c];ol(t,gl(h,n))}}else e=void 0===e?fl:yl(e),t=gl(this[0],e);return t.x1=il(t.x1),t.y1=il(t.y1),t.x2=il(t.x2),t.y2=il(t.y2),t.w=il(t.x2-t.x1),t.h=il(t.y2-t.y1),t},nl.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},nl.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),E(e)){var a=e;e=function(){return a}}var o=function(t,n){return t._private.bbAtOldPos=e(t,n)},s=function(e){return e._private.bbAtOldPos};n.startBatch(),t.forEach(o).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var l=Sn(this.boundingBox({useCache:!1}));return t.silentPositions(s),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),l},tl.boundingbox=tl.bb=tl.boundingBox,tl.renderedBoundingbox=tl.renderedBoundingBox;var ml,bl,xl=nl;ml=bl={};var wl=function(e){e.uppercaseName=X(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=X(e.outerName),ml[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},ml["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},ml["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},ml["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};wl({name:"width"}),wl({name:"height"}),bl.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},bl.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},bl.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var El=bl,Tl=function(e,t){if(e.isEdge())return t(e)},_l=function(e,t){if(e.isEdge()){var n=e.cy();return hn(t(e),n.zoom(),n.pan())}},Dl=function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return hn(e,i,r)}))}},Cl={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Nl=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},Al=Object.keys(Cl).reduce((function(e,t){var n=Cl[t],r=Nl(t);return e[t]=function(){return Tl(this,n.get)},n.mult?e[r]=function(){return Dl(this,n.get)}:e[r]=function(){return _l(this,n.get)},e}),{}),Ll=Q({},rl,xl,El,Al),Sl=function(e,t){this.recycle(e,t)};function Ol(){return!1}function kl(){return!0}Sl.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ol,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?kl:Ol):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=kl;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=kl;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=kl,this.stopPropagation()},isDefaultPrevented:Ol,isPropagationStopped:Ol,isImmediatePropagationStopped:Ol};var Il=/^([^.]+)(\.(?:[^.]+))?$/,Ml=".*",Pl={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Rl=Object.keys(Pl),Bl={};function Fl(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Bl,t=arguments.length>1?arguments[1]:void 0,n=0;n<Rl.length;n++){var r=Rl[n];this[r]=e[r]||Pl[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var zl=Fl.prototype,Gl=function(e,t,n,r,i,a,o){x(r)&&(i=r,r=null),o&&(a=null==a?o:Q({},a,o));for(var s=w(n)?n:n.split(/\s+/),l=0;l<s.length;l++){var u=s[l];if(!I(u)){var c=u.match(Il);if(c&&!1===t(e,u,c[1],c[2]?c[2]:null,r,i,a))break}}},Yl=function(e,t){return e.addEventFields(e.context,t),new Sl(t.type,t)},Xl=function(e,t,n){if(k(n))t(e,n);else if(E(n))t(e,Yl(e,n));else for(var r=w(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!I(a)){var o=a.match(Il);if(o){var s=o[1],l=o[2]?o[2]:null;t(e,Yl(e,{type:s,namespace:l,target:e.context}))}}}};zl.on=zl.addListener=function(e,t,n,r,i){return Gl(this,(function(e,t,n,r,i,a,o){x(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},zl.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},zl.removeListener=zl.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=St(this.listeners));for(var a=this.listeners,o=function(o){var s=a[o];Gl(i,(function(t,n,r,i,l,u){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!l||t.qualifierCompare(s.qualifier,l))&&(!u||s.callback===u))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},zl.removeAllListeners=function(){return this.removeListener("*")},zl.emit=zl.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,w(t)||(t=[t]),Xl(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===Ml)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&Bt(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Vl={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&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},Ul=function(e){return b(e)?new Rs(e):e},jl={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new Fl(Vl,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=Ul(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n);return this},removeListener:function(e,t,n){for(var r=Ul(t),i=0;i<this.length;i++)this[i].emitter().removeListener(e,r,n);return this},removeAllListeners:function(){for(var e=0;e<this.length;e++)this[e].emitter().removeAllListeners();return this},one:function(e,t,n){for(var r=Ul(t),i=0;i<this.length;i++)this[i].emitter().one(e,r,n);return this},once:function(e,t,n){for(var r=Ul(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})},emit:function(e,t){for(var n=0;n<this.length;n++)this[n].emitter().emit(e,t);return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};ds.eventAliasesOn(jl);var Hl={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(b(e)||N(e))return new Rs(e).filter(this);if(x(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){b(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(b(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=this,i=e,a=this.length<e.length,o=a?r:i,s=a?i:r,l=0;l<o.length;l++){var u=o[l];s.has(u)&&n.push(u)}return n},xor:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this,i=e,a=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return a(r,i),a(i,r),n},diff:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=this,o=e,s=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return s(a,o,n),s(o,a,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&b(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var l=this.length++;this[l]=o,i.set(s,{ele:o,index:l})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!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<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--)e(this[t])&&this.unmergeAt(t);return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},ql=Hl;ql.u=ql["|"]=ql["+"]=ql.union=ql.or=ql.add,ql["\\"]=ql["!"]=ql["-"]=ql.difference=ql.relativeComplement=ql.subtract=ql.not,ql.n=ql["&"]=ql["."]=ql.and=ql.intersection=ql.intersect,ql["^"]=ql["(+)"]=ql["(-)"]=ql.symmetricDifference=ql.symdiff=ql.xor,ql.fnFilter=ql.filterFn=ql.stdFilter=ql.filter,ql.complement=ql.abscomp=ql.absoluteComplement;var Wl,$l={isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},Kl=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?xt:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},Zl={forEach:function(e,t){if(x(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!x(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Kl)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:xt-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};Zl.each=Zl.forEach,Wl="undefined",("undefined"==typeof Symbol?"undefined":e(Symbol))!=Wl&&e(Symbol.iterator)!=Wl&&(Zl[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return a({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var Ql=Mt({nodeDimensionsIncludeLabels:!1}),Jl={layoutDimensions:function(e){var t;if(e=Ql(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=F(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var l=function(e,t,n){var r={x:t.x1+t.w/2,y:t.y1+t.h/2},i={x:(n.x-r.x)*e,y:(n.y-r.y)*e};return{x:r.x+i.x,y:r.y+i.y}},u=t.spacingFactor&&1!==t.spacingFactor,c=function(){if(!u)return null;for(var e=Ln(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);Mn(e,i.x,i.y)}return e},h=c(),d=F((function(e,n){var r=s(e,n);if(u){var i=Math.abs(t.spacingFactor);r=l(i,h,r)}return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var p=0;p<r.length;p++){var g=r[p],f=d(g,p);if(null==t.animateFilter||t.animateFilter(g,p)){var v=g.animation({position:f,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}else g.position(f)}if(t.fit){var y=i.animation({fit:{boundingBox:a.boundingBoxAt(d),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(y)}else if(void 0!==t.zoom&&void 0!==t.pan){var m=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(m)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),Yi.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(d),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(Q({},e,{eles:this}))}};function eu(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function tu(e,t){return e=gt(e),function(n){return eu(e,t,n)}}function nu(e,t){e=gt(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return eu(e,n,t)}}Jl.createLayout=Jl.makeLayout=Jl.layout;var ru={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};return t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)})),this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&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;a<i.length;a++){var o=i[a];r.removeAllBypasses(o,n)}else{e=e.split(/\s+/);for(var s=0;s<i.length;s++){var l=i[s];r.removeBypasses(l,e,n)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++)i*=a[o].pstyle("opacity").value;return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function iu(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++)if(!t(n[r]))return!1;return!0}function au(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||iu(i,r);var s=o.source,l=o.target;return n(s)&&(!a||iu(s,n))&&(s===l||n(l)&&(!a||iu(l,n)))}}}var ou=tu("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));ru.takesUpSpace=nu("takesUpSpace",au({ok:ou}));var su=tu("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&ou(e)})),lu=tu("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&ou(e)}));ru.interactive=nu("interactive",au({ok:su,parentOk:lu,edgeOkViaNode:ou})),ru.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var uu=tu("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&ou(e)})),cu=ou;ru.visible=nu("visible",au({ok:uu,edgeOkViaNode:cu})),ru.hidden=function(){var e=this[0];if(e)return!e.visible()},ru.isBundledBezier=nu("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace()})),ru.bypass=ru.css=ru.style,ru.renderedCss=ru.renderedStyle,ru.removeBypass=ru.removeCss=ru.removeStyle,ru.pstyle=ru.parsedStyle;var hu={};function du(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&x(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&w(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var l=this[s],u=!e.ableField||l._private[e.ableField],c=l._private[e.field]!=e.value;if(e.overrideAble){var h=e.overrideAble(l);if(void 0!==h&&(u=h,!h))return this}u&&(l._private[e.field]=e.value,c&&n.push(l))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event),o&&d.emit(o)}return this}}function pu(e){hu[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},hu[e.on]=du({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),hu[e.off]=du({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}pu({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),pu({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),pu({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),pu({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),hu.deselect=hu.unselect,hu.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},pu({field:"active",on:"activate",off:"unactivate"}),pu({field:"pannable",on:"panify",off:"unpanify"}),hu.inactive=function(){var e=this[0];if(e)return!e._private.active};var gu={},fu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode()){for(var o=!1,s=a.connectedEdges(),l=0;l<s.length;l++){var u=s[l],c=u.source(),h=u.target();if(e.noIncomingEdges&&h===a&&c!==a||e.noOutgoingEdges&&c===a&&h!==a){o=!0;break}}o||r.push(a)}}return this.spawn(r,!0).filter(t)}},vu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode())for(var o=a.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();e.outgoing&&u===a?(r.push(l),r.push(c)):e.incoming&&c===a&&(r.push(l),r.push(u))}}return this.spawn(r,!0).filter(t)}},yu=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,r.push(l),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function mu(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function bu(e){return function(t){var n=[],r=this._private.cy,i=e||{};b(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var l=o[s],u=l._private.data,c=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),h=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(c||h){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!h)continue}n.push(l)}}return this.spawn(n,!0)}}function xu(e){return e=Q({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,l=s._private.data.id,u=o.data.target,c=s._private.edges,h=0;h<c.length;h++){var d=c[h],p=d._private.data,g=p.target,f=p.source,v=g===u&&f===l,y=l===g&&u===f;(i.codirected&&v||!i.codirected&&(v||y))&&n.push(d)}return this.spawn(n,!0).filter(t)}}gu.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},Q(gu,{roots:fu({noIncomingEdges:!0}),leaves:fu({noOutgoingEdges:!0}),outgoers:Ys(vu({outgoing:!0}),"outgoers"),successors:yu({outgoing:!0}),incomers:Ys(vu({incoming:!0}),"incomers"),predecessors:yu({incoming:!0})}),Q(gu,{neighborhood:Ys((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&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)}}),gu.neighbourhood=gu.neighborhood,gu.closedNeighbourhood=gu.closedNeighborhood,gu.openNeighbourhood=gu.openNeighborhood,Q(gu,{source:Ys((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Ys((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:mu({attr:"source"}),targets:mu({attr:"target"})}),Q(gu,{edgesWith:Ys(bu(),"edgesWith"),edgesTo:Ys(bu({thisIsSrc:!0}),"edgesTo")}),Q(gu,{connectedEdges:Ys((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];if(i.isNode())for(var a=i._private.edges,o=0;o<a.length;o++){var s=a[o];t.push(s)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Ys((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];i.isEdge()&&(t.push(i.source()[0]),t.push(i.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Ys(xu(),"parallelEdges"),codirectedEdges:Ys(xu({codirected:!0}),"codirectedEdges")}),Q(gu,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),gu.componentsOf=gu.components;var wu=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 Yt,a=!1;if(t){if(t.length>0&&E(t[0])&&!A(t[0])){a=!0;for(var o=[],s=new Ut,l=0,u=t.length;l<u;l++){var c=t[l];null==c.data&&(c.data={});var h=c.data;if(null==h.id)h.id=Ot();else if(e.hasElementWithId(h.id)||s.has(h.id))continue;var d=new jt(e,c,!1);o.push(d),s.add(h.id)}t=o}}else t=[];this.length=0;for(var p=0,g=t.length;p<g;p++){var f=t[p][0];if(null!=f){var v=f._private.data.id;n&&i.has(v)||(n&&i.set(v,{index:this.length,ele:f}),this[this.length]=f,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new Yt,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else Dt("A collection must have a reference to the core")},Eu=jt.prototype=wu.prototype=Object.create(Array.prototype);Eu.instanceString=function(){return"collection"},Eu.spawn=function(e,t){return new wu(this.cy(),e,t)},Eu.spawnSelf=function(){return this.spawn(this)},Eu.cy=function(){return this._private.cy},Eu.renderer=function(){return this._private.cy.renderer()},Eu.element=function(){return this[0]},Eu.collection=function(){return L(this)?this:new wu(this._private.cy,[this])},Eu.unique=function(){return new wu(this._private.cy,this,!0)},Eu.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},Eu.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new wu(t)},Eu.$id=Eu.getElementById,Eu.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},Eu.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},Eu.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},Eu.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(E(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,l=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=l&&l!=i.target&&(o.target=""+l,a=!0),a&&(t=t.move(o))}else{var u="parent"in e.data,c=e.data.parent;!u||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var h=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return h("removed","remove","restore"),h("selected","select","unselect"),h("selectable","selectify","unselectify"),h("locked","lock","unlock"),h("grabbable","grabify","ungrabify"),h("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var d={data:Lt(r.data),position:Lt(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};d.classes="";var p=0;return r.classes.forEach((function(e){return d.classes+=0==p++?e:" "+e})),d}}},Eu.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},Eu.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new jt(e,r,!1);t.push(i)}return new wu(e,t)},Eu.copy=Eu.clone,Eu.restore=function(){for(var e,t,n=!(arguments.length>0&&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;u<c;u++){var h=i[u];r&&!h.removed()||(h.isNode()?s.push(h):l.push(h))}e=s.concat(l);var d=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var p=e[t],g=p._private,f=g.data;if(p.clearTraversalCache(),r||g.removed)if(void 0===f.id)f.id=Ot();else if(_(f.id))f.id=""+f.id;else{if(I(f.id)||!b(f.id)){Dt("Can not create element with invalid string ID `"+f.id+"`"),d();continue}if(a.hasElementWithId(f.id)){Dt("Can not create second element with ID `"+f.id+"`"),d();continue}}var v=f.id;if(p.isNode()){var y=g.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(p.isEdge()){for(var m=p,x=["source","target"],w=x.length,E=!1,T=0;T<w;T++){var D=x[T],C=f[D];_(C)&&(C=f[D]=""+f[D]),null==C||""===C?(Dt("Can not create edge `"+v+"` with unspecified "+D),E=!0):a.hasElementWithId(C)||(Dt("Can not create edge `"+v+"` with nonexistant "+D+" `"+C+"`"),E=!0)}if(E){d();continue}var N=a.getElementById(f.source),A=a.getElementById(f.target);N.same(A)?N._private.edges.push(m):(N._private.edges.push(m),A._private.edges.push(m)),m._private.source=N,m._private.target=A}g.map=new Yt,g.map.set(v,{ele:p,index:0}),g.removed=!1,r&&a.addToPool(p)}for(var L=0;L<s.length;L++){var S=s[L],O=S._private.data;_(O.parent)&&(O.parent=""+O.parent);var k=O.parent;if(null!=k||S._private.parent){var M=S._private.parent?a.collection().merge(S._private.parent):a.getElementById(k);if(M.empty())O.parent=void 0;else if(M[0].removed())Nt("Node added with missing parent, reference to parent removed"),O.parent=void 0,S._private.parent=null;else{for(var P=!1,R=M;!R.empty();){if(S.same(R)){P=!0,O.parent=void 0;break}R=R.parent()}P||(M[0]._private.children.push(S),S._private.parent=M[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var B=e.length===i.length?i:new wu(a,e),F=0;F<B.length;F++){var z=B[F];z.isNode()||(z.parallelEdges().clearTraversalCache(),z.source().clearTraversalCache(),z.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(B).merge(B.connectedNodes()).merge(B.parent()):B).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?B.emitAndNotify("add"):r&&B.emit("add")}return i},Eu.removed=function(){var e=this[0];return e&&e._private.removed},Eu.inside=function(){var e=this[0];return e&&!e._private.removed},Eu.remove=function(){var e=!(arguments.length>0&&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){for(var t=e._private.edges,n=0;n<t.length;n++)l(t[n])}function s(e){for(var t=e._private.children,n=0;n<t.length;n++)l(t[n])}function l(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),o(e),s(e)):r.unshift(e))}for(var u=0,c=n.length;u<c;u++)l(n[u]);function h(e,t){var n=e._private.edges;Pt(n,t),e.clearTraversalCache()}function d(e){e.clearTraversalCache()}var p=[];function g(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Pt(n,t),t._private.parent=null,p.ids[r]||(p.ids[r]=!0,p.push(e))}p.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var f=0;f<r.length;f++){var v=r[f];if(v.isEdge()){var y=v.source()[0],m=v.target()[0];h(y,v),h(m,v);for(var b=v.parallelEdges(),x=0;x<b.length;x++){var w=b[x];d(w),w.isBundledBezier()&&w.dirtyBoundingBoxCache()}}else{var E=v.parent();0!==E.length&&g(E,v)}t&&(v._private.removed=!0)}var T=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<T.length;_++)if(T[_].isParent()){a._private.hasCompoundNodes=!0;break}var D=new wu(this.cy(),r);D.size()>0&&(e?D.emitAndNotify("remove"):t&&D.emit("remove"));for(var C=0;C<p.length;C++){var N=p[C];t&&N.removed()||N.updateStyle()}return D},Eu.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),l=null!=o&&t.hasElementWithId(o),u=null!=s&&t.hasElementWithId(s);(l||u)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(l&&(a.source=o),u&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var h=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=h)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Oi,ps,gs,Fs,Xs,$s,Ks,Ll,jl,Hl,$l,Zl,Jl,ru,hu,gu].forEach((function(e){Q(Eu,e)}));var Tu={add:function(e){var t,n=this;if(N(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new wu(n,i)}}else if(w(e))t=new wu(n,e);else if(E(e)&&(w(e.nodes)||w(e.edges))){for(var s=e,l=[],u=["nodes","edges"],c=0,h=u.length;c<h;c++){var d=u[c],p=s[d];if(w(p))for(var g=0,f=p.length;g<f;g++){var v=Q({group:d},p[g]);l.push(v)}}t=new wu(n,l)}else t=new jt(n,e).collection();return t},remove:function(e){if(N(e));else if(b(e)){var t=e;e=this.$(t)}return e.remove()}};function _u(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,l=11,u=1/(l-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var h=0;h<4;++h)if("number"!=typeof arguments[h]||isNaN(arguments[h])||!isFinite(arguments[h]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var d=c?new Float32Array(l):new Array(l);function p(e,t){return 1-3*t+3*e}function g(e,t){return 3*t-6*e}function f(e){return 3*e}function v(e,t,n){return((p(t,n)*e+g(t,n))*e+f(t))*e}function y(e,t,n){return 3*p(t,n)*e*e+2*g(t,n)*e+f(t)}function m(t,r){for(var a=0;a<i;++a){var o=y(r,e,n);if(0===o)return r;r-=(v(r,e,n)-t)/o}return r}function b(){for(var t=0;t<l;++t)d[t]=v(t*u,e,n)}function x(t,r,i){var a,l,u=0;do{(a=v(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(a)>o&&++u<s);return l}function w(t){for(var r=0,i=1,o=l-1;i!==o&&d[i]<=t;++i)r+=u;--i;var s=r+(t-d[i])/(d[i+1]-d[i])*u,c=y(s,e,n);return c>=a?m(t,s):0===c?s:x(t,r,r+u)}var E=!1;function T(){E=!0,e===t&&n===r||b()}var _=function(i){return E||T(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var D="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return D},_}var Du=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4,d=.016;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*d:d;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),Cu=function(e,t,n,r){var i=_u(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Nu={linear:function(e,t,n){return e+(t-e)*n},ease:Cu(.25,.1,.25,1),"ease-in":Cu(.42,0,1,1),"ease-out":Cu(0,0,.58,1),"ease-in-out":Cu(.42,0,.58,1),"ease-in-sine":Cu(.47,0,.745,.715),"ease-out-sine":Cu(.39,.575,.565,1),"ease-in-out-sine":Cu(.445,.05,.55,.95),"ease-in-quad":Cu(.55,.085,.68,.53),"ease-out-quad":Cu(.25,.46,.45,.94),"ease-in-out-quad":Cu(.455,.03,.515,.955),"ease-in-cubic":Cu(.55,.055,.675,.19),"ease-out-cubic":Cu(.215,.61,.355,1),"ease-in-out-cubic":Cu(.645,.045,.355,1),"ease-in-quart":Cu(.895,.03,.685,.22),"ease-out-quart":Cu(.165,.84,.44,1),"ease-in-out-quart":Cu(.77,0,.175,1),"ease-in-quint":Cu(.755,.05,.855,.06),"ease-out-quint":Cu(.23,1,.32,1),"ease-in-out-quint":Cu(.86,0,.07,1),"ease-in-expo":Cu(.95,.05,.795,.035),"ease-out-expo":Cu(.19,1,.22,1),"ease-in-out-expo":Cu(1,0,0,1),"ease-in-circ":Cu(.6,.04,.98,.335),"ease-out-circ":Cu(.075,.82,.165,1),"ease-in-out-circ":Cu(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Nu.linear;var r=Du(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Cu};function Au(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 Lu(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Su(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Lu(e,i),s=Lu(t,i);if(_(o)&&_(s))return Au(a,o,s,n,r);if(w(o)&&w(s)){for(var l=[],u=0;u<s.length;u++){var c=o[u],h=s[u];if(null!=c&&null!=h){var d=Au(a,c,h,n,r);l.push(d)}else l.push(h)}return l}}function Ou(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,l=o.startTime,u=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Nu.linear;else{var c,h,d;c=b(s)?u.parse("transition-timing-function",s).value:s,b(c)?(h=c,d=[]):(h=c[1],d=c.slice(2).map((function(e){return+e}))),d.length>0?("spring"===h&&d.push(o.duration),o.easingImpl=Nu[h].apply(null,d)):o.easingImpl=Nu[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={};ku(f.x,v.x)&&(y.x=Su(f.x,v.x,p,g)),ku(f.y,v.y)&&(y.y=Su(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,x=o.pan,w=a.pan,E=null!=x&&r;E&&(ku(m.x,x.x)&&(w.x=Su(m.x,x.x,p,g)),ku(m.y,x.y)&&(w.y=Su(m.y,x.y,p,g)),e.emit("pan"));var T=o.startZoom,_=o.zoom,D=null!=_&&r;D&&(ku(T,_)&&(a.zoom=An(a.minZoom,Su(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<C.length;N++){var A=C[N],L=A.name,S=A,O=o.startStyle[L],k=Su(O,S,p,g,u.properties[O.name]);u.overrideBypass(e,L,k)}e.emit("style")}}return o.progress=p,p}function ku(e,t){return!!(null!=e&&null!=t&&(_(e)&&_(t)||e&&t))}function Iu(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Mu(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var l=o.shift();l&&a.push(l)}for(var u=function(e){for(var t=e.length-1;t>=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||Iu(t,h,e),Ou(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;o<n.length;o++){var s=i(n[o]);a=a||s}var l=i(t,!0);(a||l)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Pu={animate:ds.animate(),animation:ds.animation(),animated:ds.animated(),clearQueue:ds.clearQueue(),delay:ds.delay(),delayAnimation:ds.delayAnimation(),stop:ds.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._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){Mu(n,e)}),t.beforeRenderPriorities.animations):n()}function n(){e._private.animationsRunning&&nt((function(t){Mu(t,e),n()}))}}},Ru={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&&A(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}},Bu=function(e){return b(e)?new Rs(e):e},Fu={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Fl(Ru,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Bu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Bu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Bu(t),n),this},once:function(e,t,n){return this.emitter().one(e,Bu(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}};ds.eventAliasesOn(Fu);var zu={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)}};zu.jpeg=zu.jpg;var Gu={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(Q({},e,{cy:t,eles:i}));return a}Dt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Dt("A `name` must be specified to make a layout");else Dt("Layout options must be specified to make a layout")}};Gu.createLayout=Gu.makeLayout=Gu.layout;var Yu={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;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},Xu=Mt({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Vu={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Nt("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 r=Xu(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else Dt("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)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)}};Vu.invalidateDimensions=Vu.resize;var Uu={collection:function(e,t){return b(e)?this.$(e):N(e)?e.collection():w(e)?(t||(t={}),new wu(this,e,t.unique,t.removed)):new wu(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}};Uu.elements=Uu.filter=Uu.$;var ju={},Hu="t",qu="f";ju.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},ju.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},l=0;l<n.length;l++){var u=n[l],c=e[l]===Hu,h=t[l]===Hu,d=c!==h,p=u.mappedProperties.length>0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f<g.length;f++){for(var v=g[f],y=v.name,m=!1,b=l+1;b<n.length;b++){var x=n[b];if(t[b]===Hu&&(m=null!=x.properties[v.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},ju.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Hu:qu}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},ju.getContextStyle=function(e){var t=e.key,n=this,r=this._private.contextStyles=this._private.contextStyles||{};if(r[t])return r[t];for(var i={_private:{key:t}},a=0;a<n.length;a++){var o=n[a];if(t[a]===Hu)for(var s=0;s<o.properties.length;s++){var l=o.properties[s];i[l.name]=l}}return r[t]=i,i},ju.applyContextStyle=function(e,t,n){for(var r=this,i=e.diffPropNames,a={},o=r.types,s=0;s<i.length;s++){var l=i[s],u=t[l],c=n.pstyle(l);if(!u){if(!c)continue;u=c.bypass?{name:l,deleteBypassed:!0}:{name:l,delete:!0}}if(c!==u){if(u.mapped===o.fn&&null!=c&&null!=c.mapping&&c.mapping.value===u.value){var h=c.mapping;if((h.fnValue=u.value(n))===h.prevFnValue)continue}var d=a[l]={prev:c};r.applyParsedProperty(n,u),d.next=n.pstyle(l),d.next&&d.next.bypass&&(d.next=d.next.bypassed)}}return{diffProps:a}},ju.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,l=e._private.style;r=Object.keys(l);for(var u=0;u<i.length;u++){var c=i[u];t.styleKeys[c]=[it,ot]}for(var h=function(e,n){return t.styleKeys[n][0]=lt(e,t.styleKeys[n][0])},d=function(e,n){return t.styleKeys[n][1]=ut(e,t.styleKeys[n][1])},p=function(e,t){h(e,t),d(e,t)},g=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);h(r,t),d(r,t)}},f=2e9,v=function(e){return-128<e&&e<128&&Math.floor(e)!==e?f-(1024*e|0):e},y=0;y<r.length;y++){var m=r[y],b=l[m];if(null!=b){var x=this.properties[m],w=x.type,E=x.groupKey,T=void 0;null!=x.hashOverride?T=x.hashOverride(e,b):null!=b.pfValue&&(T=b.pfValue);var _=null==x.enums?b.value:null,D=null!=T,C=D||null!=_,N=b.units;w.number&&C&&!w.multiple?(p(v(D?T:_),E),D||null==N||g(N,E)):g(b.strValue,E)}}for(var A=[it,ot],L=0;L<i.length;L++){var S=i[L],O=t.styleKeys[S];A[0]=lt(O[0],A[0]),A[1]=ut(O[1],A[1])}t.styleKey=ct(A[0],A[1]);var k=t.styleKeys;t.labelDimsKey=ht(k.labelDimensions);var I=a(e,["label"],k.labelDimensions);if(t.labelKey=ht(I),t.labelStyleKey=ht(dt(k.commonLabel,I)),!s){var M=a(e,["source-label"],k.labelDimensions);t.sourceLabelKey=ht(M),t.sourceLabelStyleKey=ht(dt(k.commonLabel,M));var P=a(e,["target-label"],k.labelDimensions);t.targetLabelKey=ht(P),t.targetLabelStyleKey=ht(dt(k.commonLabel,P))}if(s){var R=t.styleKeys,B=R.nodeBody,F=R.nodeBorder,z=R.nodeOutline,G=R.backgroundImage,Y=R.compound,X=R.pie,V=[B,F,z,G,Y,X].filter((function(e){return null!=e})).reduce(dt,[it,ot]);t.nodeKey=ht(V),t.hasPie=null!=X&&X[0]!==it&&X[1]!==ot}return o!==t.styleKey},ju.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},ju.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,l=i.bypass,u=a[i.name],c=u&&u.bypass,h=e._private,d="mapping",p=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},g=function(){var t=p(u),n=p(i);r.checkTriggers(e,i.name,t,n)};if("curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",l)),i.delete)return a[i.name]=void 0,g(),!0;if(i.deleteBypassed)return u?!!u.bypass&&(u.bypassed=void 0,g(),!0):(g(),!0);if(i.deleteBypass)return u?!!u.bypass&&(a[i.name]=u.bypassed,g(),!0):(g(),!0);var f=function(){Nt("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var v,y=i.field.split("."),m=h.data,b=0;b<y.length&&m;b++)m=m[y[b]];if(null==m)return f(),!1;if(!_(m))return Nt("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((v=0===x?0:(m-i.fieldMin)/x)<0?v=0:v>1&&(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],S=[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:S,strValue:"rgb("+S[0]+", "+S[1]+", "+S[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,O,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var k=i.field.split("."),I=h.data,M=0;M<k.length&&I;M++)I=I[k[M]];if(null!=I&&(n=this.parse(i.name,I,i.bypass,d)),!n)return f(),!1;n.mapping=i,i=n;break;case o.fn:var P=i.value,R=null!=i.fnValue?i.fnValue:P(e);if(i.prevFnValue=R,null==R)return Nt("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,R,i.bypass,d)))return Nt("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Lt(i),i=n;break;case void 0:break;default:return!1}return l?(i.bypassed=c?u.bypassed:u,a[i.name]=i):c?u.bypassed=i:a[i.name]=i,g(),!0},ju.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],l=i[s];null!=l&&(l.bypass?l.bypassed=null:i[s]=null)}else r._private.style={}}},ju.update=function(){this._private.cy.mutableElements().updateStyle()},ju.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},l=!1,u=0;u<i.length;u++){var c=i[u],h=e.pstyle(c),d=t[c];if(d){var p=d.prev,g=null!=d.next?d.next:h,f=!1,v=void 0,y=1e-6;p&&(_(p.pfValue)&&_(g.pfValue)?(f=g.pfValue-p.pfValue,v=p.pfValue+y*f):_(p.value)&&_(g.value)?(f=g.value-p.value,v=p.value+y*f):w(p.value)&&w(g.value)&&(f=p.value[0]!==g.value[0]||p.value[1]!==g.value[1]||p.value[2]!==g.value[2],v=p.strValue),f&&(s[c]=g.strValue,this.applyBypass(e,c,v),l=!0))}}if(!l)return;r.transitioning=!0,new Yi((function(t){o>0?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)},ju.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},ju.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)}))},ju.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()}))}))},ju.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Wu={applyBypass:function(e,t,n,r){var i=this,a=[],o=!0;if("*"===t||"**"===t){if(void 0!==n)for(var s=0;s<i.properties.length;s++){var l=i.properties[s].name,u=this.parse(l,n,!0);u&&a.push(u)}}else if(b(t)){var c=this.parse(t,n,!0);c&&a.push(c)}else{if(!E(t))return!1;var h=t;r=n;for(var d=Object.keys(h),p=0;p<d.length;p++){var g=d[p],f=h[g];if(void 0===f&&(f=h[G(g)]),void 0!==f){var v=this.parse(g,f,!0);v&&a.push(v)}}}if(0===a.length)return!1;for(var y=!1,m=0;m<e.length;m++){for(var x=e[m],w={},T=void 0,_=0;_<a.length;_++){var D=a[_];if(r){var C=x.pstyle(D.name);T=w[D.name]={prev:C}}y=this.applyParsedProperty(x,Lt(D))||y,r&&(T.next=x.pstyle(D.name))}y&&this.updateStyleHints(x),r&&this.updateTransitions(x,w,o)}return y},overrideBypass:function(e,t,n){t=z(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,l=o.mutiple,u=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":l?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,u,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=!0,i=0;i<e.length;i++){for(var a=e[i],o={},s=0;s<t.length;s++){var l=t[s],u=this.properties[l],c=a.pstyle(u.name);if(c&&c.bypass){var h="",d=this.parse(l,h,!0),p=o[u.name]={prev:c};this.applyParsedProperty(a,d),p.next=a.pstyle(u.name)}}this.updateStyleHints(a),n&&this.updateTransitions(a,o,r)}}},$u={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy,n=t.container(),r=t.window();if(r&&n&&r.getComputedStyle)return r.getComputedStyle(n).getPropertyValue(e)}},Ku={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[G(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){var r=this;if(e=e[0]){var i=r.properties[t];i.alias&&(i=i.pointsTo);var a=i.type,o=e.pstyle(i.name);if(o){var s=o.value,l=o.units,u=o.strValue;if(n&&a.number&&null!=s&&_(s)){var c=e.cy().zoom(),h=function(e){return e*c},d=function(e,t){return h(e)+t},p=w(s);return(p?l.every((function(e){return null!=e})):null!=l)?p?s.map((function(e,t){return d(e,l[t])})).join(" "):d(s,l):p?s.map((function(e){return b(e)?e:""+h(e)})).join(" "):""+h(s)}if(null!=u)return u}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=E(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],l=r[o]||r[z(o)],u=this.parse(l.name,s);u&&t.push(u)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,l,u=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);else for(a=i.strValue,l=0;l<a.length;l++)o=a.charCodeAt(l),u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);return u}};Ku.getPropertiesHash=Ku.getNonDefaultPropertiesHash;var Zu={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},Qu={appendFromString:function(e){var t,n,r,i=this,a=this,o=""+e;function s(){o=o.length>t.length?o.substr(t.length):""}function l(){n=n.length>r.length?n.substr(r.length):""}for(o=o.replace(/[/][*](\s|.)+?[*][/]/g,"");!o.match(/^\s*$/);){var u=o.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Nt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+o);break}t=u[0];var c=u[1];if("core"!==c&&new Rs(c).invalid)Nt("Skipping parsing of block: Invalid selector found in string stylesheet: "+c),s();else{var h=u[2],d=!1;n=h;for(var p=[];!n.match(/^\s*$/);){var g=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){Nt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),d=!0;break}r=g[0];var f=g[1],v=g[2];i.properties[f]?a.parse(f,v)?(p.push({name:f,val:v}),l()):(Nt("Skipping property: Invalid property definition in: "+r),l()):(Nt("Skipping property: Invalid property name in: "+r),l())}if(d){s();break}a.selector(c);for(var y=0;y<p.length;y++){var m=p[y];a.css(m.name,m.val)}s()}}return a},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},Ju={};(function(){var e=V,t=j,n=q,r=W,i=$,a=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},o=function(a){var o=e+"|\\w+|"+t+"|"+n+"|"+r+"|"+i;return"^"+a+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+o+")\\s*\\,\\s*("+o+")\\)$"},s=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];Ju.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},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"]},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:!0,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:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:o("mapData")},mapLayoutData:{mapping:!0,regex:o("mapLayoutData")},mapScratch:{mapping:!0,regex:o("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:s,singleRegexMatchValue:!0},urls:{regexes:s,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,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:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return b(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\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"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var l={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||0==e&&0!=t||0!=e&&0==t},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=I(e),r=I(t);return n&&!r||!n&&r}},u=Ju.types,c=[{name:"label",type:u.text,triggersBounds:l.any,triggersZOrder:l.emptyNonEmpty},{name:"text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any}],h=[{name:"source-label",type:u.text,triggersBounds:l.any},{name:"source-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"source-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-offset",type:u.size,triggersBounds:l.any}],d=[{name:"target-label",type:u.text,triggersBounds:l.any},{name:"target-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"target-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-offset",type:u.size,triggersBounds:l.any}],p=[{name:"font-family",type:u.fontFamily,triggersBounds:l.any},{name:"font-style",type:u.fontStyle,triggersBounds:l.any},{name:"font-weight",type:u.fontWeight,triggersBounds:l.any},{name:"font-size",type:u.size,triggersBounds:l.any},{name:"text-transform",type:u.textTransform,triggersBounds:l.any},{name:"text-wrap",type:u.textWrap,triggersBounds:l.any},{name:"text-overflow-wrap",type:u.textOverflowWrap,triggersBounds:l.any},{name:"text-max-width",type:u.size,triggersBounds:l.any},{name:"text-outline-width",type:u.size,triggersBounds:l.any},{name:"line-height",type:u.positiveNumber,triggersBounds:l.any}],g=[{name:"text-valign",type:u.valign,triggersBounds:l.any},{name:"text-halign",type:u.halign,triggersBounds:l.any},{name:"color",type:u.color},{name:"text-outline-color",type:u.color},{name:"text-outline-opacity",type:u.zeroOneNumber},{name:"text-background-color",type:u.color},{name:"text-background-opacity",type:u.zeroOneNumber},{name:"text-background-padding",type:u.size,triggersBounds:l.any},{name:"text-border-opacity",type:u.zeroOneNumber},{name:"text-border-color",type:u.color},{name:"text-border-width",type:u.size,triggersBounds:l.any},{name:"text-border-style",type:u.borderStyle,triggersBounds:l.any},{name:"text-background-shape",type:u.textBackgroundShape,triggersBounds:l.any},{name:"text-justification",type:u.justification}],f=[{name:"events",type:u.bool,triggersZOrder:l.any},{name:"text-events",type:u.bool,triggersZOrder:l.any}],v=[{name:"display",type:u.display,triggersZOrder:l.any,triggersBounds:l.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:u.visibility,triggersZOrder:l.any},{name:"opacity",type:u.zeroOneNumber,triggersZOrder:l.zeroNonZero},{name:"text-opacity",type:u.zeroOneNumber},{name:"min-zoomed-font-size",type:u.size},{name:"z-compound-depth",type:u.zCompoundDepth,triggersZOrder:l.any},{name:"z-index-compare",type:u.zIndexCompare,triggersZOrder:l.any},{name:"z-index",type:u.number,triggersZOrder:l.any}],y=[{name:"overlay-padding",type:u.size,triggersBounds:l.any},{name:"overlay-color",type:u.color},{name:"overlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"overlay-shape",type:u.overlayShape,triggersBounds:l.any}],m=[{name:"underlay-padding",type:u.size,triggersBounds:l.any},{name:"underlay-color",type:u.color},{name:"underlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"underlay-shape",type:u.overlayShape,triggersBounds:l.any}],x=[{name:"transition-property",type:u.propList},{name:"transition-duration",type:u.time},{name:"transition-delay",type:u.time},{name:"transition-timing-function",type:u.easing}],w=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},E=[{name:"height",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"width",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"shape",type:u.nodeShape,triggersBounds:l.any},{name:"shape-polygon-points",type:u.polygonPointList,triggersBounds:l.any},{name:"background-color",type:u.color},{name:"background-fill",type:u.fill},{name:"background-opacity",type:u.zeroOneNumber},{name:"background-blacken",type:u.nOneOneNumber},{name:"background-gradient-stop-colors",type:u.colors},{name:"background-gradient-stop-positions",type:u.percentages},{name:"background-gradient-direction",type:u.gradientDirection},{name:"padding",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"padding-relative-to",type:u.paddingRelativeTo,triggersBounds:l.any},{name:"bounds-expansion",type:u.boundsExpansion,triggersBounds:l.any}],T=[{name:"border-color",type:u.color},{name:"border-opacity",type:u.zeroOneNumber},{name:"border-width",type:u.size,triggersBounds:l.any},{name:"border-style",type:u.borderStyle}],_=[{name:"outline-color",type:u.color},{name:"outline-opacity",type:u.zeroOneNumber},{name:"outline-width",type:u.size,triggersBounds:l.any},{name:"outline-style",type:u.borderStyle},{name:"outline-offset",type:u.size,triggersBounds:l.any}],D=[{name:"background-image",type:u.urls},{name:"background-image-crossorigin",type:u.bgCrossOrigin},{name:"background-image-opacity",type:u.zeroOneNumbers},{name:"background-image-containment",type:u.bgContainment},{name:"background-image-smoothing",type:u.bools},{name:"background-position-x",type:u.bgPos},{name:"background-position-y",type:u.bgPos},{name:"background-width-relative-to",type:u.bgRelativeTo},{name:"background-height-relative-to",type:u.bgRelativeTo},{name:"background-repeat",type:u.bgRepeat},{name:"background-fit",type:u.bgFit},{name:"background-clip",type:u.bgClip},{name:"background-width",type:u.bgWH},{name:"background-height",type:u.bgWH},{name:"background-offset-x",type:u.bgPos},{name:"background-offset-y",type:u.bgPos}],C=[{name:"position",type:u.position,triggersBounds:l.any},{name:"compound-sizing-wrt-labels",type:u.compoundIncludeLabels,triggersBounds:l.any},{name:"min-width",type:u.size,triggersBounds:l.any},{name:"min-width-bias-left",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-width-bias-right",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height",type:u.size,triggersBounds:l.any},{name:"min-height-bias-top",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height-bias-bottom",type:u.sizeMaybePercent,triggersBounds:l.any}],N=[{name:"line-style",type:u.lineStyle},{name:"line-color",type:u.color},{name:"line-fill",type:u.fill},{name:"line-cap",type:u.lineCap},{name:"line-opacity",type:u.zeroOneNumber},{name:"line-dash-pattern",type:u.numbers},{name:"line-dash-offset",type:u.number},{name:"line-gradient-stop-colors",type:u.colors},{name:"line-gradient-stop-positions",type:u.percentages},{name:"curve-style",type:u.curveStyle,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:u.zeroOneNumber,triggersBounds:l.any},{name:"source-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"target-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"control-point-step-size",type:u.size,triggersBounds:l.any},{name:"control-point-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"control-point-weights",type:u.numbers,triggersBounds:l.any},{name:"segment-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"segment-weights",type:u.numbers,triggersBounds:l.any},{name:"taxi-turn",type:u.bidirectionalSizeMaybePercent,triggersBounds:l.any},{name:"taxi-turn-min-distance",type:u.size,triggersBounds:l.any},{name:"taxi-direction",type:u.axisDirection,triggersBounds:l.any},{name:"edge-distances",type:u.edgeDistances,triggersBounds:l.any},{name:"arrow-scale",type:u.positiveNumber,triggersBounds:l.any},{name:"loop-direction",type:u.angle,triggersBounds:l.any},{name:"loop-sweep",type:u.angle,triggersBounds:l.any},{name:"source-distance-from-node",type:u.size,triggersBounds:l.any},{name:"target-distance-from-node",type:u.size,triggersBounds:l.any}],A=[{name:"ghost",type:u.bool,triggersBounds:l.any},{name:"ghost-offset-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-offset-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-opacity",type:u.zeroOneNumber}],L=[{name:"selection-box-color",type:u.color},{name:"selection-box-opacity",type:u.zeroOneNumber},{name:"selection-box-border-color",type:u.color},{name:"selection-box-border-width",type:u.size},{name:"active-bg-color",type:u.color},{name:"active-bg-opacity",type:u.zeroOneNumber},{name:"active-bg-size",type:u.size},{name:"outside-texture-bg-color",type:u.color},{name:"outside-texture-bg-opacity",type:u.zeroOneNumber}],S=[];Ju.pieBackgroundN=16,S.push({name:"pie-size",type:u.sizeMaybePercent});for(var O=1;O<=Ju.pieBackgroundN;O++)S.push({name:"pie-"+O+"-background-color",type:u.color}),S.push({name:"pie-"+O+"-background-size",type:u.percent}),S.push({name:"pie-"+O+"-background-opacity",type:u.zeroOneNumber});var k=[],M=Ju.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:u.arrowShape,triggersBounds:l.any},{name:"arrow-color",type:u.color},{name:"arrow-fill",type:u.arrowFill},{name:"arrow-width",type:u.arrowWidth}].forEach((function(e){M.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;k.push({name:n,type:r,triggersBounds:i})}))}),{});var P=Ju.properties=[].concat(f,x,v,y,m,A,g,p,c,h,d,E,T,_,D,S,C,N,k,L),R=Ju.propertyGroups={behavior:f,transition:x,visibility:v,overlay:y,underlay:m,ghost:A,commonLabel:g,labelDimensions:p,mainLabel:c,sourceLabel:h,targetLabel:d,nodeBody:E,nodeBorder:T,nodeOutline:_,backgroundImage:D,pie:S,compound:C,edgeLine:N,edgeArrow:k,core:L},B=Ju.propertyGroupNames={};(Ju.propertyGroupKeys=Object.keys(R)).forEach((function(e){B[e]=R[e].map((function(e){return e.name})),R[e].forEach((function(t){return t.groupKey=e}))}));var F=Ju.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{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"}];Ju.propertyNames=P.map((function(e){return e.name}));for(var z=0;z<P.length;z++){var G=P[z];P[G.name]=G}for(var Y=0;Y<F.length;Y++){var X=F[Y],U=P[X.pointsTo],H={name:X.name,alias:!0,pointsTo:U};P.push(H),P[X.name]=H}})(),Ju.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},Ju.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=Q({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,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","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","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","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","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,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},{"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(e,t){for(var n=1;n<=Ju.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"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":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","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(e,t){return Ju.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},Ju.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":.25}),this.defaultLength=this.length};var ec={parse:function(e,t,n,r){var i=this;if(x(t))return i.parseImplWarn(e,t,n,r);var a,o=ft(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Lt(a))&&(a.value=Lt(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Nt("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Nt("The style value of `label` is deprecated for `"+i.name+"`"),i},parseImpl:function(e,t,n,r){var i=this;e=z(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var l=b(t);l&&(t=t.trim());var u,c,h=a.type;if(!h)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(x(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!l||r||t.length<7||"a"!==t[1]);else{if(t.length>=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 Nt("`"+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=[],_=[],C="",N=!1,A=0;A<m.length;A++){var L=i.parse(e,m[A],n,"multiple");N=N||b(L.value),E.push(L.value),_.push(null!=L.pfValue?L.pfValue:L.value),T.push(L.units),C+=(A>0?" ":"")+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:_,strValue:C,bypass:n,units:T}}var S=function(){for(var r=0;r<h.enums.length;r++)if(h.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n};return null};if(h.number){var O,k="px";if(h.units&&(O=h.units),h.implicitUnits&&(k=h.implicitUnits),!h.unitless)if(l){var I="px|em"+(h.allowPercent?"|\\%":"");O&&(I=O);var M=t.match("^("+V+")("+I+")?$");M&&(t=M[1],O=M[2]||k)}else O&&!h.implicitUnits||(O=k);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=o,S();if(h.integer&&!D(t))return null;if(void 0!==h.min&&(t<h.min||h.strictMin&&t===h.min)||void 0!==h.max&&(t>h.max||h.strictMax&&t===h.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return h.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:mn(t)),"%"===O&&(P.pfValue=t/100),P}if(h.propList){var R=[],B=""+t;if("none"===B);else{for(var F=B.split(/\s*,\s*|\s+/),G=0;G<F.length;G++){var Y=F[G].trim();i.properties[Y]?R.push(Y):Nt("`"+Y+"` is not a valid property name")}if(0===R.length)return null}return{name:e,value:R,strValue:0===R.length?"none":R.join(" "),bypass:n}}if(h.color){var X=re(t);return X?{name:e,value:X,pfValue:X,strValue:"rgb("+X[0]+","+X[1]+","+X[2]+")",bypass:n}:null}if(h.regex||h.regexes){if(h.enums){var U=S();if(U)return U}for(var j=h.regexes?h.regexes:[h.regex],H=0;H<j.length;H++){var q=new RegExp(j[H]).exec(t);if(q)return{name:e,value:h.singleRegexMatchValue?q[1]:q,strValue:""+t,bypass:n}}return null}return h.string?{name:e,value:""+t,strValue:""+t,bypass:n}:h.enums?S():null}},tc=function e(t){if(!(this instanceof e))return new e(t);S(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):Dt("A style must have a core reference")},nc=tc.prototype;nc.instanceString=function(){return"style"},nc.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},nc.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},nc.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},nc.selector=function(e){var t="core"===e?null:new Rs(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},nc.css=function(){var e=this,t=arguments;if(1===t.length)for(var n=t[0],r=0;r<e.properties.length;r++){var i=e.properties[r],a=n[i.name];void 0===a&&(a=n[G(i.name)]),void 0!==a&&this.cssRule(i.name,a)}else 2===t.length&&this.cssRule(t[0],t[1]);return this},nc.style=nc.css,nc.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},nc.append=function(e){return O(e)?e.appendToStyle(this):w(e)?this.appendFromJson(e):b(e)&&this.appendFromString(e),this},tc.fromJson=function(e,t){var n=new tc(e);return n.fromJson(t),n},tc.fromString=function(e,t){return new tc(e).fromString(t)},[ju,Wu,$u,Ku,Zu,Qu,Ju,ec].forEach((function(e){Q(nc,e)})),tc.types=nc.types,tc.properties=nc.properties,tc.propertyGroups=nc.propertyGroups,tc.propertyGroupNames=nc.propertyGroupNames,tc.propertyGroupKeys=nc.propertyGroupKeys;var rc={style:function(e){return e&&this.setStyle(e).update(),this._private.style},setStyle:function(e){var t=this._private;return O(e)?t.style=e.generateStyle(this):w(e)?t.style=tc.fromJson(this,e):b(e)?t.style=tc.fromString(this,e):t.style=tc(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},ic="single",ac={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType=ic),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(b(a[0]))return o[e=a[0]];if(E(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,_(r)&&(o.x=r),_(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=a[0],t=a[1],"x"!==e&&"y"!==e||!_(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:E(e)&&(a=(i=s[0]).x,o=i.y,_(a)&&(l.x+=a),_(o)&&(l.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!_(r)||(l[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(_(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n;if(b(e)){var r=e;e=this.$(r)}else if(P(e)){var i=e;(n={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else N(e)||(e=this.mutableElements());if(!N(e)||!e.empty()){n=n||e.boundingBox();var a,o=this.width(),s=this.height();if(t=_(t)?t:0,!isNaN(o)&&!isNaN(s)&&o>0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((o-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:a)<this._private.minZoom?this._private.minZoom:a,pan:{x:(o-a*(n.x1+n.x2))/2,y:(s-a*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return _(e)&&_(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):_(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:_(t)&&void 0===e&&t>=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=hn(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!_(n)||n===a||null!=t&&(!_(t.x)||!_(t.y)))return null;if(null!=t){var s=i,l=a,u=n;return{zoomed:!0,panned:!0,zoom:u,pan:{x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(_(e.zoom)||(n=!1),E(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>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 N(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}};ac.centre=ac.center,ac.autolockNodes=ac.autolock,ac.autoungrabifyNodes=ac.autoungrabify;var oc={data:ds.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ds.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ds.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ds.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};oc.attr=oc.data,oc.removeAttr=oc.removeData;var sc=function(e){var t=this,n=(e=Q({},e)).container;n&&!C(n)&&C(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=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({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 wu(this),listeners:[],aniEles:new wu(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});var u=function(e,t){if(e.some(R))return Yi.all(e).then(t);t(e)};l.styleEnabled&&t.setStyle([]);var c=Q({},o,o.renderer);t.initRenderer(c);var h=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=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()};u([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),h(a,(function(){t.startAnimationLoop(),l.ready=!0,x(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},lc=sc.prototype;Q(lc,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){if(null==this._private.container)return d;var e=this._private.container.ownerDocument;return void 0===e||null==e?d:e.defaultView||d},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!C(e)&&C(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(Q({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Lt(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements(),i=function(e){return t.getElementById(e.id())};if(E(e)){if(t.startBatch(),e.elements){var a={},o=function(e,n){for(var r=[],i=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var l=""+s.data.id,u=t.getElementById(l);a[l]=!0,0!==u.length?i.push({ele:u,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Nt("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<i.length;c++){var h=i[c],d=h.ele,p=h.json;d.json(p)}};if(w(e.elements))o(e.elements);else for(var s=["nodes","edges"],l=0;l<s.length;l++){var u=s[l],c=e.elements[u];w(c)&&o(c,u)}var h=t.collection();r.filter((function(e){return!a[e.id()]})).forEach((function(e){e.isParent()?h.merge(e):e.remove()})),h.forEach((function(e){return e.children().move({parent:null})})),h.forEach((function(e){return i(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var d=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],p=0;p<d.length;p++){var g=d[p];null!=e[g]&&t[g](e[g])}return t.endBatch(),this}var f={};e?f.elements=this.elements().map((function(e){return e.json()})):(f.elements={},r.forEach((function(e){var t=e.group();f.elements[t]||(f.elements[t]=[]),f.elements[t].push(e.json())}))),this._private.styleEnabled&&(f.style=t.style().json()),f.data=Lt(t.data());var v=n.options;return f.zoomingEnabled=n.zoomingEnabled,f.userZoomingEnabled=n.userZoomingEnabled,f.zoom=n.zoom,f.minZoom=n.minZoom,f.maxZoom=n.maxZoom,f.panningEnabled=n.panningEnabled,f.userPanningEnabled=n.userPanningEnabled,f.pan=Lt(n.pan),f.boxSelectionEnabled=n.boxSelectionEnabled,f.renderer=Lt(v.renderer),f.hideEdgesOnViewport=v.hideEdgesOnViewport,f.textureOnViewport=v.textureOnViewport,f.wheelSensitivity=v.wheelSensitivity,f.motionBlur=v.motionBlur,f.multiClickDebounceTime=v.multiClickDebounceTime,f}}),lc.$id=lc.getElementById,[Tu,Pu,Fu,zu,Gu,Yu,Vu,Uu,rc,ac,oc].forEach((function(e){Q(lc,e)}));var uc={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort: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}},cc={maximal:!1,acyclic:!1},hc=function(e){return e.scratch("breadthfirst")},dc=function(e,t){return e.scratch("breadthfirst",t)};function pc(e){this.options=Q({},uc,cc,e)}pc.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,l=n.acyclic||n.maximal||n.maximalAdjustments>0,u=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(N(n.roots))e=n.roots;else if(w(n.roots)){for(var c=[],h=0;h<n.roots.length;h++){var d=n.roots[h],p=r.getElementById(d);c.push(p)}e=r.collection(c)}else if(b(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var g=i.components();e=r.collection();for(var f=function(t){var n=g[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},v=0;v<g.length;v++)f(v)}var y=[],m={},x=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),dc(e,{index:n,depth:t})},E=function(e,t){var n=hc(e),r=n.depth,i=n.index;y[r][i]=null,x(e,t)};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();x(a,i),m[o]=!0}});for(var T=[],_=0;_<a.length;_++){var D=a[_];m[D.id()]||T.push(D)}var C=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?dc(r,{depth:e,index:n}):(t.splice(n,1),n--)}},A=function(){for(var e=0;e<y.length;e++)C(e)},L=function(e,t){for(var r=hc(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),l=0;l<a.length;l++){var u=a[l],c=hc(u);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var h=o+1;return E(e,h),t[s]=h,!0}return!1};if(s&&l){var S=[],O={},k=function(e){return S.push(e)},I=function(){return S.shift()};for(a.forEach((function(e){return S.push(e)}));S.length>0;){var M=I(),P=L(M,O);if(P)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(k);else if(null===P){Nt("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var R=0;if(n.avoidOverlap)for(var B=0;B<a.length;B++){var F=a[B].layoutDimensions(n),z=F.w,G=F.h;R=Math.max(R,z,G)}var Y={},X=function(e){if(Y[e.id()])return Y[e.id()];for(var t=hc(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var l=hc(s);if(null!=l){var u=l.index,c=l.depth;if(null!=u&&null!=c){var h=y[c].length;c<t&&(r+=u/h,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),Y[e.id()]=r,r},V=function(e,t){var n=X(e)-X(t);return 0===n?K(e.id(),t.id()):n};void 0!==n.depthSort&&(V=n.depthSort);for(var U=0;U<y.length;U++)y[U].sort(V),C(U);for(var j=[],H=0;H<T.length;H++)j.push(T[H]);y.unshift(j),A();for(var q=0,W=0;W<y.length;W++)q=Math.max(y[W].length,q);var $={x:u.x1+u.w/2,y:u.x1+u.h/2},Z=y.reduce((function(e,t){return Math.max(e,t.length)}),0),Q=function(e){var t=hc(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(u.w/((n.grid?Z:a)+1),R),s=Math.max(u.h/(y.length+1),R),l=Math.min(u.w/2/y.length,u.h/2/y.length);if(l=Math.max(l,R),n.circle){var c=l*r+l-(y.length>0&&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:$.x+c*Math.cos(h),y:$.y+c*Math.sin(h)}}return{x:$.x+(i+1-(a+1)/2)*o,y:(r+1)*s}};return i.nodes().layoutPositions(this,n,Q),this};var gc={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 fc(e){this.options=Q({},gc,e)}fc.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=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),c=0,h=0;h<a.length;h++){var d=a[h].layoutDimensions(t),p=d.w,g=d.h;c=Math.max(c,p,g)}if(o=_(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-c,a.length>1&&t.avoidOverlap){c*=1.75;var f=Math.cos(u)-Math.cos(0),v=Math.sin(u)-Math.sin(0),y=Math.sqrt(c*c/(f*f+v*v));o=Math.max(y,o)}var m=function(e,n){var r=t.startAngle+n*u*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l.x+a,y:l.y+s}};return r.nodes().layoutPositions(this,t,m),this};var vc,yc={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 mc(e){this.options=Q({},yc,e)}mc.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=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s={x:o.x1+o.w/2,y:o.y1+o.h/2},l=[],u=0,c=0;c<a.length;c++){var h=a[c],d=void 0;d=t.concentric(h),l.push({value:d,node:h}),h._private.scratch.concentric=d}a.updateStyle();for(var p=0;p<a.length;p++){var g=a[p].layoutDimensions(t);u=Math.max(u,g.w,g.h)}l.sort((function(e,t){return t.value-e.value}));for(var f=t.levelWidth(a),v=[[]],y=v[0],m=0;m<l.length;m++){var b=l[m];y.length>0&&Math.abs(y[0].value-b.value)>=f&&(y=[],v.push(y)),y.push(b)}var x=u+t.minNodeSpacing;if(!t.avoidOverlap){var w=v.length>0&&v[0].length>1,E=(Math.min(o.w,o.h)/2-x)/(v.length+w?1:0);x=Math.min(x,E)}for(var T=0,_=0;_<v.length;_++){var D=v[_],C=void 0===t.sweep?2*Math.PI-2*Math.PI/D.length:t.sweep,N=D.dTheta=C/Math.max(1,D.length-1);if(D.length>1&&t.avoidOverlap){var A=Math.cos(N)-Math.cos(0),L=Math.sin(N)-Math.sin(0),S=Math.sqrt(x*x/(A*A+L*L));T=Math.max(S,T)}D.r=T,T+=x}if(t.equidistant){for(var O=0,k=0,I=0;I<v.length;I++){var M=v[I].r-k;O=Math.max(O,M)}k=0;for(var P=0;P<v.length;P++){var R=v[P];0===P&&(k=R.r),R.r=k,k+=O}}for(var B={},F=0;F<v.length;F++)for(var z=v[F],G=z.dTheta,Y=z.r,X=0;X<z.length;X++){var V=z[X],U=t.startAngle+(n?1:-1)*G*X,j={x:s.x+Y*Math.cos(U),y:s.y+Y*Math.sin(U)};B[V.node.id()]=j}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return B[t]})),this};var bc={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function xc(e){this.options=Q({},bc,e),this.options.layout=this;var t=this.options.eles.nodes(),n=this.options.eles.edges().filter((function(e){var n=e.source().data("id"),r=e.target().data("id"),i=t.some((function(e){return e.data("id")===n})),a=t.some((function(e){return e.data("id")===r}));return!i||!a}));this.options.eles=this.options.eles.not(n)}xc.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),vc=!0===e.debug;var r=Ec(t,n,e);vc&&wc(r),e.randomize&&Dc(r);var i=rt(),a=function(){Nc(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter||(Ac(r,e),r.temperature=r.temperature*e.coolingFactor,r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=Cc(r,e,t);t.layoutPositions(n,e,i)}},l=0,u=!0;if(!0===e.animate)!function t(){for(var n=0;u&&n<e.refresh;)u=o(l),l++,n++;u?(rt()-i>=e.animationThreshold&&a(),nt(t)):(Gc(r,e),s())}();else{for(;u;)u=o(l),l++;Gc(r,e),s()}return this},xc.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},xc.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var wc,Ec=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=Ln(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;u<s.length;u++)for(var c=s[u],h=0;h<c.length;h++)l[c[h].id()]=u;for(u=0;u<o.nodeSize;u++){var d=(y=i[u]).layoutDimensions(n);(M={}).isLocked=y.locked(),M.id=y.data("id"),M.parentId=y.data("parent"),M.cmptId=l[y.id()],M.children=[],M.positionX=y.position("x"),M.positionY=y.position("y"),M.offsetX=0,M.offsetY=0,M.height=d.w,M.width=d.h,M.maxX=M.positionX+M.width/2,M.minX=M.positionX-M.width/2,M.maxY=M.positionY+M.height/2,M.minY=M.positionY-M.height/2,M.padLeft=parseFloat(y.style("padding")),M.padRight=parseFloat(y.style("padding")),M.padTop=parseFloat(y.style("padding")),M.padBottom=parseFloat(y.style("padding")),M.nodeRepulsion=x(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(M),o.idToIndex[M.id]=u}var p=[],g=0,f=-1,v=[];for(u=0;u<o.nodeSize;u++){var y,m=(y=o.layoutNodes[u]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(p[++f]=y.id,v.push(y.id))}for(o.graphSet.push(v);g<=f;){var b=p[g++],w=o.idToIndex[b],E=o.layoutNodes[w].children;if(E.length>0)for(o.graphSet.push(E),u=0;u<E.length;u++)p[++f]=E[u]}for(u=0;u<o.graphSet.length;u++){var T=o.graphSet[u];for(h=0;h<T.length;h++){var _=o.idToIndex[T[h]];o.indexToGraph[_]=u}}for(u=0;u<o.edgeSize;u++){var D=r[u],C={};C.id=D.data("id"),C.sourceId=D.data("source"),C.targetId=D.data("target");var N=x(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,A=x(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,L=o.idToIndex[C.sourceId],S=o.idToIndex[C.targetId];if(o.indexToGraph[L]!=o.indexToGraph[S]){for(var O=Tc(C.sourceId,C.targetId,o),k=o.graphSet[O],I=0,M=o.layoutNodes[L];-1===k.indexOf(M.id);)M=o.layoutNodes[o.idToIndex[M.parentId]],I++;for(M=o.layoutNodes[S];-1===k.indexOf(M.id);)M=o.layoutNodes[o.idToIndex[M.parentId]],I++;N*=I*n.nestingFactor}C.idealLength=N,C.elasticity=A,o.layoutEdges.push(C)}return o},Tc=function(e,t,n){var r=_c(e,t,0,n);return 2>r.count?0:r.graph},_c=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var l=a[s],u=i.idToIndex[l],c=i.layoutNodes[u].children;if(0!==c.length){var h=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==h.count){if(1!==h.count)return h;if(2==++o)break}}}return{count:o,graph:r}},Dc=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},Cc=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,l=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+l*r.h}}return{x:o.positionX,y:o.positionY}}},Nc=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=Cc(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},Ac=function(e,t,n){Lc(e,t),Mc(e),Pc(e,t),Rc(e),Bc(e)},Lc=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var l=e.layoutNodes[e.idToIndex[r[s]]];Oc(o,l,e,t)}},Sc=function(e){return-e+2*e*Math.random()},Oc=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY,o=1;0===i&&0===a&&(i=Sc(o),a=Sc(o));var s=kc(e,t,i,a);if(s>0)var l=(c=r.nodeOverlap*s)*i/(v=Math.sqrt(i*i+a*a)),u=c*a/v;else{var c,h=Ic(e,i,a),d=Ic(t,-1*i,-1*a),p=d.x-h.x,g=d.y-h.y,f=p*p+g*g,v=Math.sqrt(f);l=(c=(e.nodeRepulsion+t.nodeRepulsion)/f)*p/v,u=c*g/v}e.isLocked||(e.offsetX-=l,e.offsetY-=u),t.isLocked||(t.offsetX+=l,t.offsetY+=u)}},kc=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},Ic=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&&0<n||0===t&&0>n?(u.x=r,u.y=i+a/2,u):0<t&&-1*l<=s&&s<=l?(u.x=r+o/2,u.y=i+o*n/2/t,u):0>t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0<n&&(s<=-1*l||s>=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},Mc=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,u=s.positionY-a.positionY;if(0!==l||0!==u){var c=Ic(a,l,u),h=Ic(s,-1*l,-1*u),d=h.x-c.x,p=h.y-c.y,g=Math.sqrt(d*d+p*p),f=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var v=f*d/g,y=f*p/g;else v=0,y=0;a.isLocked||(a.offsetX+=v,a.offsetY+=y),s.isLocked||(s.offsetX-=v,s.offsetY-=y)}}},Pc=function(e,t){if(0!==t.gravity)for(var n=1,r=0;r<e.graphSet.length;r++){var i=e.graphSet[r],a=i.length;if(0===r)var o=e.clientHeight/2,s=e.clientWidth/2;else{var l=e.layoutNodes[e.idToIndex[i[0]]],u=e.layoutNodes[e.idToIndex[l.parentId]];o=u.positionX,s=u.positionY}for(var c=0;c<a;c++){var h=e.layoutNodes[e.idToIndex[i[c]]];if(!h.isLocked){var d=o-h.positionX,p=s-h.positionY,g=Math.sqrt(d*d+p*p);if(g>n){var f=t.gravity*d/g,v=t.gravity*p/g;h.offsetX+=f,h.offsetY+=v}}}}},Rc=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(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,h=0;h<l.length;h++){var d=e.layoutNodes[e.idToIndex[l[h]]];d.offsetX+=u,d.offsetY+=c,n[++i]=l[h]}s.offsetX=0,s.offsetY=0}}},Bc=function(e,t){for(var n=0;n<e.nodeSize;n++)0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0);for(n=0;n<e.nodeSize;n++)if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Fc(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,zc(i,e)}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Fc=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},zc=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.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Gc=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++)if(f=r[i]){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var l=0;l<f.length;l++){var u=f[l];f.x1=Math.min(f.x1,u.positionX-u.width/2),f.x2=Math.max(f.x2,u.positionX+u.width/2),f.y1=Math.min(f.y1,u.positionY-u.height/2),f.y2=Math.max(f.y2,u.positionY+u.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,s+=f.w*f.h}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,h=0,d=0,p=0,g=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var f;if(f=r[i]){for(l=0;l<f.length;l++)(u=f[l]).isLocked||(u.positionX+=c-f.x1,u.positionY+=h-f.y1);c+=f.w+t.componentSpacing,d+=f.w+t.componentSpacing,p=Math.max(p,f.h),d>g&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},Yc={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 Xc(e){this.options=Q({},Yc,e)}Xc.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=Ln(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;){var v=c(),y=h();(y+1)*v>=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<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var T=w.layoutDimensions(t),_=t.avoidOverlapPadding,D=T.w+_,C=T.h+_;m=Math.max(m,D),b=Math.max(b,C)}for(var N={},A=function(e,t){return!!N["c-"+e+"-"+t]},L=function(e,t){N["c-"+e+"-"+t]=!0},S=0,O=0,k=function(){++O>=u&&(O=0,S++)},I={},M=0;M<i.length;M++){var P=i[M],R=t.position(P);if(R&&(void 0!==R.row||void 0!==R.col)){var B={row:R.row,col:R.col};if(void 0===B.col)for(B.col=0;A(B.row,B.col);)B.col++;else if(void 0===B.row)for(B.row=0;A(B.row,B.col);)B.row++;I[P.id()]=B,L(B.row,B.col)}}var F=function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=I[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;A(S,O);)k();n=O*m+m/2+a.x1,r=S*b+b/2+a.y1,L(S,O),k()}return{x:n,y:r}};i.layoutPositions(this,t,F)}return this};var Vc={ready:function(){},stop:function(){}};function Uc(e){this.options=Q({},Vc,e)}Uc.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},Uc.prototype.stop=function(){return this};var jc={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor: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 Hc(e){this.options=Q({},jc,e)}Hc.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=x(e.positions);function r(t){if(null==e.positions)return cn(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}return t.layoutPositions(this,e,(function(e,t){var n=r(e);return!e.locked()&&null!=n&&n})),this};var qc={fit:!0,padding:30,boundingBox: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 Wc(e){this.options=Q({},qc,e)}Wc.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=Ln(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),i=function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}};return n.nodes().layoutPositions(this,e,i),this};var $c=[{name:"breadthfirst",impl:pc},{name:"circle",impl:fc},{name:"concentric",impl:mc},{name:"cose",impl:xc},{name:"grid",impl:Xc},{name:"null",impl:Uc},{name:"preset",impl:Hc},{name:"random",impl:Wc}];function Kc(e){this.options=e,this.notifications=0}var Zc=function(){},Qc=function(){throw new Error("A headless instance can not render images")};Kc.prototype={recalculateRenderedStyle:Zc,notify:function(){this.notifications++},init:Zc,isHeadless:function(){return!0},png:Qc,jpg:Qc};var Jc={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,l=i.x+n/2+o,u=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=l&&u<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];a.push(r(s,l,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){b(s)&&(s=e[s]),e[r]=Q({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var l=a(i(this.points,n+2*s,r,o));return $n(e,t,l)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:Et,roughCollide:Et,draw:_t,spacing:Tt,gap:Tt}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var l=i(this.points,n,a,o),u=this.controlPoint,c=r(u[0],u[1],n,a,o);t.arrowShapeImpl(this.name)(e,l,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.pointsTee,n+2*l,r,o));return $n(e,t,u)||$n(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,l){var u=o,c=Math.pow(u.x-e,2)+Math.pow(u.y-t,2)<=Math.pow((n+2*l)*this.radius,2),h=a(i(this.points,n+2*l,r,o));return $n(e,t,h)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e,i=3,a=5;return n[i]=n[i]-r,n[a]=n[a]-r,n},collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.crossLinePts(n,s),n+2*l,r,o));return $n(e,t,u)||$n(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},eh={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),l=n.zoom();return[((e-i)/o-s.x)/l,((t-a)/o-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=this.cy.window().getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i={left:r("padding-left"),right:r("padding-right"),top:r("padding-top"),bottom:r("padding-bottom")},a={left:r("border-left-width"),right:r("border-right-width"),top:r("border-top-width"),bottom:r("border-bottom-width")},o=e.clientWidth,s=e.clientHeight,l=i.left+i.right,u=i.top+i.bottom,c=a.left+a.right,h=t.width/(o+c),d=o-l,p=s-u,g=t.left+i.left+a.left,f=t.top+i.top+a.top;return this.containerBB=[g,f,d,p,h]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,l=s.getCachedZSortedEles(),u=[],c=s.cy.zoom(),h=s.cy.hasCompoundNodes(),d=(r?24:8)/c,p=(r?8:2)/c,g=(r?8:2)/c,f=1/0;function v(e,t){if(e.isNode()){if(a)return;a=e,u.push(e)}if(e.isEdge()&&(null==t||t<f))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<u.length;n++)if(u[n].isEdge()){u[n]=e,i=e,f=null!=t?t:f;break}}else u.push(e),i=e,f=null!=t?t:f}function y(n){var r=n.outerWidth()+2*p,i=n.outerHeight()+2*p,a=r/2,l=i/2,u=n.position();if(u.x-a<=e&&e<=u.x+a&&u.y-l<=t&&t<=u.y+l&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,u.x,u.y))return v(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,l=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,p=l/2+d,g=p*p,f=2*p,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(Vn(e,t,x[w],x[w+1],x[w+2],x[w+3],f)&&g>(r=Wn(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<a.allpts.length;w+=4)if(Un(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],f)&&g>(r=qn(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),T=[{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<T.length;w++){var _=T[w],D=s.arrowShapes[n.pstyle(_.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,_.angle,{x:_.x,y:_.y},C,d)&&D.collide(e,t,E,_.angle,{x:_.x,y:_.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return Ft(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),T=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},_=T(f,m),D=T(f,x),C=T(y,m),N=T(y,x),A=[_.x+d,_.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if($n(e,t,A))return v(n),!0}else if(zn(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=this.getCachedZSortedEles().interactive,a=[],o=Math.min(e,n),s=Math.max(e,n),l=Math.min(t,r),u=Math.max(t,r),c=Ln({x1:e=o,y1:t=l,x2:n=s,y2:r=u}),h=0;h<i.length;h++){var d=i[h];if(d.isNode()){var p=d,g=p.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});Fn(c,g)&&!Yn(g,c)&&a.push(p)}else{var f=d,v=f._private,y=v.rscratch;if(null!=y.startX&&null!=y.startY&&!zn(c,y.startX,y.startY))continue;if(null!=y.endX&&null!=y.endY&&!zn(c,y.endX,y.endY))continue;if("bezier"===y.edgeType||"multibezier"===y.edgeType||"self"===y.edgeType||"compound"===y.edgeType||"segments"===y.edgeType||"haystack"===y.edgeType){for(var m=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,b=!0,x=0;x<m.length;x++)if(!Gn(c,m[x])){b=!1;break}b&&a.push(f)}else"haystack"!==y.edgeType&&"straight"!==y.edgeType||a.push(f)}}return a}},th={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,l="haystack"===s.edgeType,u="bezier"===s.edgeType,c="multibezier"===s.edgeType,h="segments"===s.edgeType,d="compound"===s.edgeType,p="self"===s.edgeType;if(l?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),f=s.midX,v=s.midY,h)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||d||p||u){var g=s.allpts;t=r-Dn(g[0],g[2],g[4],.1),n=i-Dn(g[1],g[3],g[5],.1)}else t=r-f,n=i-v;s.srcArrowAngle=bn(t,n);var f=s.midX,v=s.midY;if(l&&(f=(r+a)/2,v=(i+o)/2),t=a-r,n=o-i,h)if((g=s.allpts).length/2%2==0){var y=(m=g.length/2)-2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else{y=(m=g.length/2-1)-2;var m,b=m+2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else if(c||d||p){var x,w,E,T,g=s.allpts;if(s.ctrlpts.length/2%2==0){var _=2+(D=2+(C=g.length/2-1));x=Dn(g[C],g[D],g[_],0),w=Dn(g[C+1],g[D+1],g[_+1],0),E=Dn(g[C],g[D],g[_],1e-4),T=Dn(g[C+1],g[D+1],g[_+1],1e-4)}else{var D,C;_=2+(D=g.length/2-1),x=Dn(g[C=D-2],g[D],g[_],.4999),w=Dn(g[C+1],g[D+1],g[_+1],.4999),E=Dn(g[C],g[D],g[_],.5),T=Dn(g[C+1],g[D+1],g[_+1],.5)}t=E-x,n=T-w}if(s.midtgtArrowAngle=bn(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,h&&((g=s.allpts).length/2%2==0||(t=-(g[b=2+(m=g.length/2-1)]-g[m]),n=-(g[b+1]-g[m+1]))),s.midsrcArrowAngle=bn(t,n),h)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||d||p||u){var N=(g=s.allpts).length;t=a-Dn(g[N-6],g[N-4],g[N-2],.9),n=o-Dn(g[N-5],g[N-3],g[N-1],.9)}else t=a-f,n=o-v;s.tgtArrowAngle=bn(t,n)}};th.getArrowWidth=th.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var nh={};function rh(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}nh.findMidptPtsEtc=function(e,t){var n,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,s=e.pstyle("source-endpoint"),l=e.pstyle("target-endpoint"),u=null!=s.units&&null!=l.units,c=function(e,t,n,r){var i=r-t,a=n-e,o=Math.sqrt(a*a+i*i);return{x:-i/o,y:a/o}};switch(e.pstyle("edge-distances").value){case"node-position":n=r;break;case"intersection":n=i;break;case"endpoints":if(u){var h=o(this.manualEndptToPx(e.source()[0],s),2),d=h[0],p=h[1],g=o(this.manualEndptToPx(e.target()[0],l),2),f=g[0],v=g[1],y={x1:d,y1:p,x2:f,y2:v};a=c(d,p,f,v),n=y}else Nt("Edge ".concat(e.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),n=i}return{midptPts:n,vectorNormInverse:a}},nh.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,l=o.position(),u=s.position(),c=o.width(),h=s.width(),d=o.height(),p=s.height(),g=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*g+l.x,i.source.y*d*g+l.y,i.target.x*h*g+u.x,i.target.y*p*g+u.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},nh.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=e.pstyle("segment-weights"),i=e.pstyle("segment-distances"),a=Math.min(r.pfValue.length,i.pfValue.length);n.edgeType="segments",n.segpts=[];for(var o=0;o<a;o++){var s=r.pfValue[o],l=i.pfValue[o],u=1-s,c=s,h=this.findMidptPtsEtc(e,t),d=h.midptPts,p=h.vectorNormInverse,g={x:d.x1*u+d.x2*c,y:d.y1*u+d.y2*c};n.segpts.push(g.x+p.x*l,g.y+p.y*l)}},nh.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),l=s?s.pfValue[0]:void 0,u=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,h=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var d=n,p=h;r&&(d=0,p=l);var g=u-Math.PI/2,f=g-c/2,v=g+c/2,y=String(u+"_"+c);d=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(f)*p*(d/3+1),o.y+1.4*Math.sin(f)*p*(d/3+1),o.x+1.4*Math.cos(v)*p*(d/3+1),o.y+1.4*Math.sin(v)*p*(d/3+1)]},nh.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,l=t.srcH,u=t.tgtW,c=t.tgtH,h=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),p=d?d.pfValue[0]:void 0,g=n,f=h;r&&(g=0,f=p);var v=50,y={x:a.x-s/2,y:a.y-l/2},m={x:o.x-u/2,y:o.y-c/2},b={x:Math.min(y.x,m.x),y:Math.min(y.y,m.y)},x=.5,w=Math.max(x,Math.log(.01*s)),E=Math.max(x,Math.log(.01*u));i.ctrlpts=[b.x,b.y-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*w,b.x-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*E,b.y]},nh.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},nh.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=e.pstyle("control-point-step-size").pfValue,s=e.pstyle("control-point-distances"),l=e.pstyle("control-point-weights"),u=s&&l?Math.min(s.value.length,l.value.length):1,c=s?s.pfValue[0]:void 0,h=l.value[0],d=r;a.edgeType=d?"multibezier":"bezier",a.ctrlpts=[];for(var p=0;p<u;p++){var g=(.5-t.eles.length/2+n)*o*(i?-1:1),f=void 0,v=wn(g);d&&(c=s?s.pfValue[p]:o,h=l.value[p]);var y=void 0!==(f=r?c:void 0!==c?v*c:void 0)?f:g,m=1-h,b=h,x=this.findMidptPtsEtc(e,t),w=x.midptPts,E=x.vectorNormInverse,T={x:w.x1*m+w.x2*b,y:w.y1*m+w.y2*b};a.ctrlpts.push(T.x+E.x*y,T.y+E.y*y)}},nh.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",l="upward",u="auto",c=t.posPts,h=t.srcW,d=t.srcH,p=t.tgtW,g=t.tgtH,f="node-position"!==e.pstyle("edge-distances").value,v=e.pstyle("taxi-direction").value,y=v,m=e.pstyle("taxi-turn"),b="%"===m.units,x=m.pfValue,w=x<0,E=e.pstyle("taxi-turn-min-distance").pfValue,T=f?(h+p)/2:0,_=f?(d+g)/2:0,D=c.x2-c.x1,C=c.y2-c.y1,N=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},A=N(D,T),L=N(C,_),S=!1;y===u?v=Math.abs(A)>Math.abs(L)?i:r:y===l||y===s?(v=r,S=!0):y!==a&&y!==o||(v=i,S=!0);var O,k=v===r,I=k?L:A,M=k?C:D,P=wn(M),R=!1;S&&(b||w)||!(y===s&&M<0||y===l&&M>0||y===a&&M>0||y===o&&M<0)||(I=(P*=-1)*Math.abs(I),R=!0);var B=function(e){return Math.abs(e)<E||Math.abs(e)>=Math.abs(I)},F=B(O=b?(x<0?1+x:x)*I:(x<0?I:0)+x*P),z=B(Math.abs(I)-Math.abs(O));if(!F&&!z||R)if(k){var G=c.y1+O+(f?d/2*P:0),Y=c.x1,X=c.x2;n.segpts=[Y,G,X,G]}else{var V=c.x1+O+(f?h/2*P:0),U=c.y1,j=c.y2;n.segpts=[V,U,V,j]}else if(k){var H=Math.abs(M)<=d/2,q=Math.abs(D)<=p/2;if(H){var W=(c.x1+c.x2)/2,$=c.y1,K=c.y2;n.segpts=[W,$,W,K]}else if(q){var Z=(c.y1+c.y2)/2,Q=c.x1,J=c.x2;n.segpts=[Q,Z,J,Z]}else n.segpts=[c.x1,c.y2]}else{var ee=Math.abs(M)<=h/2,te=Math.abs(C)<=g/2;if(ee){var ne=(c.y1+c.y2)/2,re=c.x1,ie=c.x2;n.segpts=[re,ne,ie,ne]}else if(te){var ae=(c.x1+c.x2)/2,oe=c.y1,se=c.y2;n.segpts=[ae,oe,ae,se]}else n.segpts=[c.x2,c.y1]}},nh.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=!_(n.startX)||!_(n.startY),d=!_(n.arrowStartX)||!_(n.arrowStartY),p=!_(n.endX)||!_(n.endY),g=!_(n.arrowEndX)||!_(n.arrowEndY),f=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth*3,v=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=v<f,m=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<f,x=!1;if(h||d||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),T={x:w.x/E,y:w.y/E},D=Math.max(a,o),C={x:n.ctrlpts[0]+2*T.x*D,y:n.ctrlpts[1]+2*T.y*D},N=u.intersectLine(r.x,r.y,a,o,C.x,C.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+T.x*(f-v),n.ctrlpts[1]=n.ctrlpts[1]+T.y*(f-v)):(n.ctrlpts[0]=N[0]+T.x*f,n.ctrlpts[1]=N[1]+T.y*f)}if(p||g||b){x=!0;var A={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},L=Math.sqrt(A.x*A.x+A.y*A.y),S={x:A.x/L,y:A.y/L},O=Math.max(a,o),k={x:n.ctrlpts[0]+2*S.x*O,y:n.ctrlpts[1]+2*S.y*O},I=c.intersectLine(i.x,i.y,s,l,k.x,k.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+S.x*(f-m),n.ctrlpts[1]=n.ctrlpts[1]+S.y*(f-m)):(n.ctrlpts[0]=I[0]+S.x*f,n.ctrlpts[1]=I[1]+S.y*f)}x&&this.findEndpoints(e)}},nh.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r,i;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,i=.5,t.midX=Dn(t.allpts[r],t.allpts[r+2],t.allpts[r+4],i),t.midY=Dn(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],i))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var a=t.segpts.length/2,o=a-2;t.midX=(t.segpts[o]+t.segpts[a])/2,t.midY=(t.segpts[o+1]+t.segpts[a+1])/2}else{var s=t.segpts.length/2-1;t.midX=t.segpts[s],t.midY=t.segpts[s+1]}},nh.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||_(t.startX)&&_(t.startY)&&_(t.endX)&&_(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Nt("Edge `"+e.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."))},nh.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new Yt,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new Yt,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var l=e[s],u=l._private,c=l.pstyle("curve-style").value;if(!l.removed()&&l.takesUpSpace())if("haystack"!==c){var h="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,d="unbundled-bezier"===c||"bezier"===c,p=u.source,g=u.target,f=[p.poolIndex(),g.poolIndex()].sort(),v=i.get(f);null==v&&(v={eles:[]},i.set(f,v),a.push(f)),v.eles.push(l),h&&(v.hasUnbundled=!0),d&&(v.hasBezier=!0)}else o.push(l)}for(var y=function(e){var o=a[e],s=i.get(o),l=void 0;if(!s.hasUnbundled){var u=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Rt(s.eles),u.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],h=c.source(),d=c.target();if(h.poolIndex()>d.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)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var T=s.eles[E],D=T[0]._private.rscratch,C=T.pstyle("curve-style").value,N="unbundled-bezier"===C||"segments"===C||"taxi"===C,A=!h.same(T.source());if(!s.calculatedIntersection&&h!==d&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var L=x.intersectLine(g.x,g.y,v,y,f.x,f.y,0),S=s.srcIntn=L,O=w.intersectLine(f.x,f.y,m,b,g.x,g.y,0),k=s.tgtIntn=O,I=s.intersectionPts={x1:L[0],x2:O[0],y1:L[1],y2:O[1]},M=s.posPts={x1:g.x,x2:f.x,y1:g.y,y2:f.y},P=O[1]-L[1],R=O[0]-L[0],B=Math.sqrt(R*R+P*P),F=s.vector={x:R,y:P},z=s.vectorNorm={x:F.x/B,y:F.y/B},G={x:-z.y,y:z.x};s.nodesOverlap=!_(B)||w.checkPoint(L[0],L[1],0,m,b,f.x,f.y)||x.checkPoint(O[0],O[1],0,v,y,g.x,g.y),s.vectorNormInverse=G,l={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:f,tgtPos:g,srcW:m,srcH:b,tgtW:v,tgtH:y,srcIntn:k,tgtIntn:S,srcShape:w,tgtShape:x,posPts:{x1:M.x2,y1:M.y2,x2:M.x1,y2:M.y1},intersectionPts:{x1:I.x2,y1:I.y2,x2:I.x1,y2:I.y1},vector:{x:-F.x,y:-F.y},vectorNorm:{x:-z.x,y:-z.y},vectorNormInverse:{x:-G.x,y:-G.y}}}var Y=A?l:s;D.nodesOverlap=Y.nodesOverlap,D.srcIntn=Y.srcIntn,D.tgtIntn=Y.tgtIntn,r&&(h.isParent()||h.isChild()||d.isParent()||d.isChild())&&(h.parents().anySame(d)||d.parents().anySame(h)||h.same(d)&&h.isParent())?t.findCompoundLoopPoints(T,Y,E,N):h===d?t.findLoopPoints(T,Y,E,N):"segments"===C?t.findSegmentsPoints(T,Y):"taxi"===C?t.findTaxiPoints(T,Y):"straight"===C||!N&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(T):t.findBezierPoints(T,Y,E,N,A),t.findEndpoints(T),t.tryToCorrectInvalidPoints(T,Y),t.checkForInvalidEdgeWarning(T),t.storeAllpts(T),t.storeEdgeProjections(T),t.calculateArrowAngles(T),t.recalculateEdgeLabelProjections(T),t.calculateLabelAngles(T)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},nh.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),rh(t.segpts)},nh.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),rh(t.ctrlpts)},nh.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var ih={manualEndptToPx:function(e,t){var n=this,r=e.position(),i=e.outerWidth(),a=e.outerHeight();if(2===t.value.length){var o=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(o[0]=o[0]*i),"%"===t.units[1]&&(o[1]=o[1]*a),o[0]+=r.x,o[1]+=r.y,o}var s=t.pfValue[0];s=-Math.PI/2+s;var l=2*Math.max(i,a),u=[r.x+Math.cos(s)*l,r.y+Math.sin(s)*l];return n.nodeShapes[this.getNodeShape(e)].intersectLine(r.x,r.y,i,a,u[0],u[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],l=e.target()[0],u=s.position(),c=l.position(),h=e.pstyle("target-arrow-shape").value,d=e.pstyle("source-arrow-shape").value,p=e.pstyle("target-distance-from-node").pfValue,g=e.pstyle("source-distance-from-node").pfValue,f=e.pstyle("curve-style").value,v=e._private.rscratch,y=v.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,T=b||x||w,D=m||"taxi"===f,C=e.pstyle("source-endpoint"),N=D?"outside-to-node":C.value,A=e.pstyle("target-endpoint"),L=D?"outside-to-node":A.value;if(v.srcManEndpt=C,v.tgtManEndpt=A,b){var S=[v.ctrlpts[0],v.ctrlpts[1]];n=x?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:S,r=S}else if(w){var O=E?v.segpts.slice(0,2):[c.x,c.y];n=E?v.segpts.slice(v.segpts.length-2):[u.x,u.y],r=O}if("inside-to-node"===L)t=[c.x,c.y];else if(A.units)t=this.manualEndptToPx(l,A);else if("outside-to-line"===L)t=v.tgtIntn;else if("outside-to-node"===L||"outside-to-node-or-label"===L?i=n:"outside-to-line"!==L&&"outside-to-line-or-label"!==L||(i=[u.x,u.y]),t=o.nodeShapes[this.getNodeShape(l)].intersectLine(c.x,c.y,l.outerWidth(),l.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===L||"outside-to-line-or-label"===L){var k=l._private.rscratch,I=k.labelWidth,M=k.labelHeight,P=k.labelX,R=k.labelY,B=I/2,F=M/2,z=l.pstyle("text-valign").value;"top"===z?R-=F:"bottom"===z&&(R+=F);var G=l.pstyle("text-halign").value;"left"===G?P-=B:"right"===G&&(P+=B);var Y=ar(i[0],i[1],[P-B,R-F,P+B,R-F,P+B,R+F,P-B,R+F],c.x,c.y);if(Y.length>0){var X=u,V=Tn(X,pn(t)),U=Tn(X,pn(Y)),j=V;U<V&&(t=Y,j=U),Y.length>2&&Tn(X,{x:Y[2],y:Y[3]})<j&&(t=[Y[2],Y[3]])}}var H=sr(t,n,o.arrowShapes[h].spacing(e)+p),q=sr(t,n,o.arrowShapes[h].gap(e)+p);if(v.endX=q[0],v.endY=q[1],v.arrowEndX=H[0],v.arrowEndY=H[1],"inside-to-node"===N)t=[u.x,u.y];else if(C.units)t=this.manualEndptToPx(s,C);else if("outside-to-line"===N)t=v.srcIntn;else if("outside-to-node"===N||"outside-to-node-or-label"===N?a=r:"outside-to-line"!==N&&"outside-to-line-or-label"!==N||(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),"outside-to-node-or-label"===N||"outside-to-line-or-label"===N){var W=s._private.rscratch,$=W.labelWidth,K=W.labelHeight,Z=W.labelX,Q=W.labelY,J=$/2,ee=K/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?Z-=J:"right"===ne&&(Z+=J);var re=ar(a[0],a[1],[Z-J,Q-ee,Z+J,Q-ee,Z+J,Q+ee,Z-J,Q+ee],u.x,u.y);if(re.length>0){var ie=c,ae=Tn(ie,pn(t)),oe=Tn(ie,pn(re)),se=ae;oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2&&Tn(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var le=sr(t,r,o.arrowShapes[d].spacing(e)+g),ue=sr(t,r,o.arrowShapes[d].gap(e)+g);v.startX=ue[0],v.startY=ue[1],v.arrowStartX=le[0],v.arrowStartY=le[1],T&&(_(v.startX)&&_(v.startY)&&_(v.endX)&&_(v.endY)?v.badLine=!1:v.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},ah={};function oh(e,t,n){for(var r=function(e,t,n,r){return Dn(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}ah.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)oh(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},ah.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var sh={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!I(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),l=e.position(),u=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,h=i.rscratch,d=i.rstyle;switch(u){case"left":n=l.x-a/2-s;break;case"right":n=l.x+a/2+s;break;default:n=l.x}switch(c){case"top":r=l.y-o/2-s;break;case"bottom":r=l.y+o/2+s;break;default:r=l.y}h.labelX=n,h.labelY=r,d.labelX=n,d.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},lh=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},uh=function(e,t){var n=t.x-e.x,r=t.y-e.y;return lh(n,r)},ch=function(e,t,n,r){var i=An(0,r-.001,1),a=An(0,r+.001,1),o=Cn(e,t,n,i),s=Cn(e,t,n,a);return uh(o,s)};sh.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){zt(n.rscratch,e,t,r),zt(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=lh(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var l=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},l={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:l,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function h(e,t,n,r,i){var a=En(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var d=0;d<t.length;d++){var p=t[d],g=t[d-1];g&&(p.startDist=g.startDist+g.length),h(p,p.p0,u[d*c],0,i.bezierProjPcts[0]);for(var f=0;f<c-1;f++)h(p,u[d*c+f],u[d*c+f+1],i.bezierProjPcts[f],i.bezierProjPcts[f+1]);h(p,u[d*c+c-1],p.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},u=function(n){var i,s="source"===n;if(a[n]){var u=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,h=l(),d=0,p=0,g=0;g<h.length;g++){for(var f=h[s?g:h.length-1-g],v=0;v<f.segments.length;v++){var y=f.segments[s?v:f.segments.length-1-v],m=g===h.length-1&&v===f.segments.length-1;if(d=p,(p+=y.length)>=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,T=s?x.t0+E*w:x.t1-E*w;T=An(0,T,1),t=Cn(b.p0,b.p1,b.p2,T),i=ch(b.p0,b.p1,b.p2,T);break;case"straight":case"segments":case"haystack":for(var _,D,C,N,A=0,L=r.allpts.length,S=0;S+3<L&&(s?(C={x:r.allpts[S],y:r.allpts[S+1]},N={x:r.allpts[S+2],y:r.allpts[S+3]}):(C={x:r.allpts[L-2-S],y:r.allpts[L-1-S]},N={x:r.allpts[L-4-S],y:r.allpts[L-3-S]}),D=A,!((A+=_=En(C,N))>=u));S+=2);var O=(u-D)/_;O=An(0,O,1),t=Nn(C,N,O),i=uh(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},sh.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},sh.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=Ft(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;zt(n.rstyle,"labelWidth",t,h),zt(n.rscratch,"labelWidth",t,h),zt(n.rstyle,"labelHeight",t,d),zt(n.rscratch,"labelHeight",t,d),zt(n.rscratch,"labelLineHeight",t,c)},sh.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?(zt(n.rscratch,e,t,r),r):Ft(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="\u200b",c=i.split("\n"),h=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],g=/[\s\u200b]+/,f=d?"":" ",v=0;v<c.length;v++){var y=c[v],m=this.calculateLabelDimensions(e,y).width;if(d){var b=y.split("").join(u);y=b}if(m>h){for(var x=y.split(g),w="",E=0;E<x.length;E++){var T=x[E],_=0===w.length?T:w+f+T;this.calculateLabelDimensions(e,_).width<=h?w+=T+f:(w&&p.push(w),w=T+f)}w.match(/^[\s\u200b]+$/)||p.push(w)}else p.push(y)}o("labelWrapCachedLines",p),i=o("labelWrapCachedText",p.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var D=e.pstyle("text-max-width").pfValue,C="",N="\u2026",A=!1;if(this.calculateLabelDimensions(e,i).width<D)return i;for(var L=0;L<i.length&&!(this.calculateLabelDimensions(e,C+i[L]+N).width>D);L++)C+=i[L],L===i.length-1&&(A=!0);return A||(C+=N),C}return i},sh.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"}},sh.calculateLabelDimensions=function(e,t){var n=this,r=gt(t,e._private.labelDimsKey),i=n.labelDimCache||(n.labelDimCache=[]),a=i[r];if(null!=a)return a;var o=0,s=e.pstyle("font-style").strValue,l=e.pstyle("font-size").pfValue,u=e.pstyle("font-family").strValue,c=e.pstyle("font-weight").strValue,h=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!h){h=this.labelCalcCanvas=document.createElement("canvas"),d=this.labelCalcCanvasContext=h.getContext("2d");var p=h.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(c," ").concat(l,"px ").concat(u);for(var g=0,f=0,v=t.split("\n"),y=0;y<v.length;y++){var m=v[y],b=d.measureText(m),x=Math.ceil(b.width),w=l;g=Math.max(x,g),f+=w}return g+=o,f+=o,i[r]={width:g,height:f}},sh.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},sh.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var hh={},dh=28,ph=!1;hh.getNodeShape=function(e){var t=this,n=e.pstyle("shape").value;if("cutrectangle"===n&&(e.width()<dh||e.height()<dh))return ph||(Nt("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),ph=!0),"rectangle";if(e.isParent())return"rectangle"===n||"roundrectangle"===n||"round-rectangle"===n||"cutrectangle"===n||"cut-rectangle"===n||"barrel"===n?n:"rectangle";if("polygon"===n){var r=e.pstyle("shape-polygon-points").value;return t.nodeShapes.makePolygon(r).name}return n};var gh={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r]._private.rstyle;i.clean=!1,i.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],l=s._private.rstyle;s.isNode()&&!l.cleanConnected&&(r(s.connectedEdges()),l.cleanConnected=!0)}if(a)for(var u=0;u<a.length;u++)(0,a[u])(i,t);n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,l=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(l.clean=!1),t&&l.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),l.clean=!0)}for(var u=0;u<i.length;u++){var c=i[u],h=c._private.rstyle,d=c.position();this.recalculateNodeLabelProjection(c),h.nodeX=d.x,h.nodeY=d.y,h.nodeW=c.pstyle("width").pfValue,h.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var p=0;p<r.length;p++){var g=r[p]._private,f=g.rstyle,v=g.rscratch;f.srcX=v.arrowStartX,f.srcY=v.arrowStartY,f.tgtX=v.arrowEndX,f.tgtY=v.arrowEndY,f.midX=v.midX,f.midY=v.midY,f.labelAngle=v.labelAngle,f.sourceLabelAngle=v.sourceLabelAngle,f.targetLabelAngle=v.targetLabelAngle}}}},fh={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Kl),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},vh={};[eh,th,nh,ih,ah,sh,hh,gh,fh].forEach((function(e){Q(vh,e)}));var yh={getCachedImage:function(e,t,n){var r=this,i=r.imageCache=r.imageCache||{},a=i[e];if(a)return a.image.complete||a.image.addEventListener("load",n),a.image;var o=(a=i[e]=i[e]||{}).image=new Image;o.addEventListener("load",n),o.addEventListener("error",(function(){o.error=!0}));var s="data:";return e.substring(0,s.length).toLowerCase()===s||(t="null"===t?null:t,o.crossOrigin=t),o.src=e,o}},mh={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)},binder:function(e){var t=this,n=t.cy.window(),r=e===n||e===n.document||e===n.document.body||M(e);if(null==t.supportsPassiveEvents){var i=!1;try{var a=Object.defineProperty({},"passive",{get:function(){return i=!0,!0}});n.addEventListener("test",null,a)}catch(s){}t.supportsPassiveEvents=i}var o=function(n,i,a){var o=Array.prototype.slice.call(arguments);return r&&t.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),t.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:o,addEventListener:o,addListener:o,bind:o}},nodeIsDraggable:function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},nodeIsGrabbable:function(e){return this.nodeIsDraggable(e)&&e.interactive()},load:function(){var e=this,t=e.cy.window(),n=function(e){return e.selected()},r=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},i=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable()){for(var i=0;n&&i<n.length;i++)if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},o=function(e){e[0]._private.grabbed=!0},s=function(e){e[0]._private.grabbed=!1},l=function(e){e[0]._private.rscratch.inDragLayer=!0},u=function(e){e[0]._private.rscratch.inDragLayer=!1},c=function(e){e[0]._private.rscratch.isGrabTarget=!0},h=function(e){e[0]._private.rscratch.isGrabTarget=!1},d=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),o(e))},p=function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(l),n.connectedEdges().forEach(l)),t.addToList&&d(n,t)}},g=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(l),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(l)),n.addToList&&t.forEach((function(e){d(e,n)})),p(t,n),y(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},f=g,v=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){s(e),u(e),h(e)})),e.updateCachedGrabbedEles())},y=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(l),r.forEach(l)),t.addToList&&r.forEach((function(e){d(e,t)}))}}},m=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},b="undefined"!=typeof MutationObserver,x="undefined"!=typeof ResizeObserver;b?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++)if(r[i]===e.container){e.destroy();break}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var w=Qe((function(){e.cy.resize()}),100);b&&(e.styleObserver=new MutationObserver(w),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(t,"resize",w),x&&(e.resizeObserver=new ResizeObserver(w),e.resizeObserver.observe(e.container));var E=function(e,t){for(;null!=e;)t(e),e=e.parentNode},T=function(){e.invalidateContainerClientCoordsCache()};E(e.container,(function(t){e.registerBinding(t,"transitionend",T),e.registerBinding(t,"animationend",T),e.registerBinding(t,"scroll",T)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var D,C,N,A=function(){return 0!==e.selection[4]},L=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],l=!1,u=0;u<s.length;u++){var c=s[u];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){l=!0;break}}if(!l)return!1;for(var h=e.container,d=t.target.parentNode,p=!1;d;){if(d===h){p=!0;break}d=d.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(t){if(L(t)){t.preventDefault(),m(),e.hoverData.capture=!0,e.hoverData.which=t.which;var n=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,s=e.findNearestElements(a[0],a[1],!0,!1),l=s[0],u=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;var h=function(){e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var r=e.hoverData.down;r?r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)};if(3==t.which){e.hoverData.cxtStarted=!0;var d={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};l?(l.activate(),l.emit(d),e.hoverData.down=l):n.emit(d),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(l&&l.activate(),null!=l&&e.nodeIsGrabbable(l)){var p=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}},v=function(e){e.emit(p("grab"))};if(c(l),l.selected()){u=e.dragData.possibleDragElements=n.collection();var y=n.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));g(y,{addToList:u}),l.emit(p("grabon")),y.forEach(v)}else u=e.dragData.possibleDragElements=n.collection(),f(l,{addToList:u}),l.emit(p("grabon")).emit(p("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=l,e.hoverData.downs=s,e.hoverData.downTime=(new Date).getTime(),r(l,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==l?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):l.pannable()&&(o[4]=1),h()}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(t,"mousemove",(function(t){if(e.hoverData.capture||L(t)){var n=!1,o=e.cy,s=o.zoom(),l=[t.clientX,t.clientY],u=e.projectIntoViewport(l[0],l[1]),c=e.hoverData.mdownPos,h=e.hoverData.mdownGPos,d=e.selection,p=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(p=e.findNearestElement(u[0],u[1],!0,!1));var f,y=e.hoverData.last,m=e.hoverData.down,b=[u[0]-d[2],u[1]-d[3]],x=e.dragData.possibleDragElements;if(h){var w=l[0]-h[0],E=w*w,T=l[1]-h[1],D=E+T*T;e.hoverData.isOverThresholdDrag=f=D>=e.desktopTapThreshold2}var C=i(t);f&&(e.hoverData.tapholdCancelled=!0);var N=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,r(p,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var A=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),d[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(f){var S={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(S):o.emit(S),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&p===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=p,p&&p.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var O;if(e.hoverData.justStartedPan){var k=e.hoverData.mdownPos;O={x:(u[0]-k[0])*s,y:(u[1]-k[1])*s},e.hoverData.justStartedPan=!1}else O={x:b[0]*s,y:b[1]*s};o.panBy(O),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=d[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||p==y||(y&&r(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),p&&r(p,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=p),m)if(f){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(v(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 I=!e.dragData.didDrag;I&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||g(x,{inDragLayer:!0});var M={x:0,y:0};if(_(b[0])&&_(b[1])&&(M.x+=b[0],M.y+=b[1],I)){var P=e.hoverData.dragDelta;P&&_(P[0])&&_(P[1])&&(M.x+=P[0],M.y+=P[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else N();n=!0}else f&&(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()?!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()&&a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,d[4]=0,e.data.bgActivePosistion=pn(c),e.redrawHint("select",!0),e.redraw()):A(),m&&m.pannable()&&m.active()&&m.unactivate());return d[2]=u[0],d[3]=u[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,h=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 d={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):a.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}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]}),C=!1,t.timeStamp-N<=a.multiClickDebounceTime()?(D&&clearTimeout(D),C=!0,N=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(D=setTimeout((function(){C||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),N=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()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var f=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(n).unmerge(g).unselect(),g.emit("box").stdFilter(f).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();v(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 S,O,k,I,M,P,R,B,F,z,G,Y,X,V=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||A())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",V,!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||V(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 U,j,H,q,W,$,K,Z=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},Q=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",U=function(t){if(e.hasTouchStarted=!0,L(t)){m(),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]),t.touches[2]&&(o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),i[4]=o[0],i[5]=o[1]),t.touches[1]){e.touchData.singleTouchMoved=!0,v(e.dragData.touchDragEles);var s=e.findContainerClientCoords();F=s[0],z=s[1],G=s[2],Y=s[3],S=t.touches[0].clientX-F,O=t.touches[0].clientY-z,k=t.touches[1].clientX-F,I=t.touches[1].clientY-z,X=0<=S&&S<=G&&0<=k&&k<=G&&0<=O&&O<=Y&&0<=I&&I<=Y;var l=n.pan(),u=n.zoom();M=Z(S,O,k,I),P=Q(S,O,k,I),B=[((R=[(S+k)/2,(O+I)/2])[0]-l.x)/u,(R[1]-l.y)/u];var h=200;if(P<h*h&&!t.touches[2]){var d=e.findNearestElement(i[0],i[1],!0,!0),p=e.findNearestElement(i[2],i[3],!0,!0);return d&&d.isNode()?(d.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=d):p&&p.isNode()?(p.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=p):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),b=y[0];if(null!=b&&(b.activate(),e.touchData.start=b,e.touchData.starts=y,e.nodeIsGrabbable(b))){var x=e.dragData.touchDragEles=n.collection(),w=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),b.selected()?(w=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),g(w,{addToList:x})):f(b,{addToList:x}),c(b);var E=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};b.emit(E("grabon")),w?w.forEach((function(e){e.emit(E("grab"))})):b.emit(E("grab"))}r(b,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==b&&(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 T=e.touchData.startPosition=[null,null,null,null,null,null],_=0;_<i.length;_++)T[_]=a[_]=i[_];var D=t.touches[0];e.touchData.startGPosition=[D.clientX,D.clientY]}}},!1),e.registerBinding(window,"touchmove",j=function(t){var n=e.touchData.capture;if(n||L(t)){var i=e.selection,o=e.cy,s=e.touchData.now,l=e.touchData.earlier,u=o.zoom();if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=c[0],s[1]=c[1]}t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1]);var h,d=e.touchData.startGPosition;if(n&&t.touches[0]&&d){for(var p=[],f=0;f<s.length;f++)p[f]=s[f]-l[f];var y=t.touches[0].clientX-d[0],m=y*y,b=t.touches[0].clientY-d[1];h=m+b*b>=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-F,w=t.touches[0].clientY-z,E=t.touches[1].clientX-F,T=t.touches[1].clientY-z,D=Q(x,w,E,T),C=150,N=1.5;if(D/P>=N*N||D>=C*C){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var A={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(A),e.touchData.start=null):o.emit(A)}}if(n&&e.touchData.cxt){A={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(A):o.emit(A),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var R=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&R===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=R,R&&R.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),ne=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var G=0;G<ne.length;G++){var Y=ne[G]._private;Y.grabbed=!1,Y.rscratch.inDragLayer=!1}}var V=e.touchData.start,U=(x=t.touches[0].clientX-F,w=t.touches[0].clientY-z,E=t.touches[1].clientX-F,T=t.touches[1].clientY-z,Z(x,w,E,T)),j=U/M;if(X){var H=(x-S+(E-k))/2,q=(w-O+(T-I))/2,W=o.zoom(),$=W*j,K=o.pan(),J=B[0]*W+K.x,ee=B[1]*W+K.y,te={x:-$/W*(J-K.x-H)+J,y:-$/W*(ee-K.y-q)+ee};if(V&&V.active()){var ne=e.dragData.touchDragEles;v(ne),e.redrawHint("drag",!0),e.redrawHint("eles",!0),V.unactivate().emit("freeon"),ne.emit("free"),e.dragData.didDrag&&(V.emit("dragfreeon"),ne.emit("dragfree"))}o.viewport({zoom:$,pan:te,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),M=U,S=x,O=w,k=E,I=T,e.pinching=!0}t.touches[0]&&(c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1]),t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1])}else if(t.touches[0]&&!e.touchData.didSelect){var re=e.touchData.start,ie=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(R=e.findNearestElement(s[0],s[1],!0,!0)),n&&null!=re&&t.preventDefault(),n&&null!=re&&e.nodeIsDraggable(re))if(h){ne=e.dragData.touchDragEles;var ae=!e.dragData.didDrag;ae&&g(ne,{inDragLayer:!0}),e.dragData.didDrag=!0;var oe={x:0,y:0};_(p[0])&&_(p[1])&&(oe.x+=p[0],oe.y+=p[1],ae&&(e.redrawHint("eles",!0),(se=e.touchData.dragDelta)&&_(se[0])&&_(se[1])&&(oe.x+=se[0],oe.y+=se[1]))),e.hoverData.draggingEles=!0,ne.silentShift(oe).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==l[0]&&e.touchData.startPosition[1]==l[1]&&e.redrawHint("eles",!0),e.redraw()}else{var se;0===(se=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(se.push(p[0]),se.push(p[1])):(se[0]+=p[0],se[1]+=p[1])}if(r(re||R,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),re&&re.grabbed()||R==ie||(ie&&ie.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),R&&R.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=R,n)for(G=0;G<s.length;G++)s[G]&&e.touchData.startPosition[G]&&h&&(e.touchData.singleTouchMoved=!0);n&&(null==re||re.pannable())&&o.panningEnabled()&&o.userPanningEnabled()&&(a(re,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=pn(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:p[0]*u,y:p[1]*u}),o.emit("dragpan")):h&&(e.swipePanning=!0,o.panBy({x:y*u,y:b*u}),o.emit("dragpan"),re&&(re.unactivate(),e.redrawHint("select",!0),e.touchData.start=null))),c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1])}for(f=0;f<s.length;f++)l[f]=s[f];n&&t.touches.length>0&&!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",H=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",q=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 h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(t.touches[1]&&(h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),u[2]=h[0],u[3]=h[1]),t.touches[2]&&(h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),u[4]=h[0],u[5]=h[1]),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 d={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(d):s.emit(d)}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 p=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]}});var g=function(e){return e.selectable()&&!e.selected()};p.emit("box").stdFilter(g).select().emit("boxselect"),p.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 y=i._private.grabbed;v(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(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 m=e.findNearestElement(u[0],u[1],!0,!0);r(m,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var b=e.touchData.startPosition[0]-u[0],x=b*b,w=e.touchData.startPosition[1]-u[1],E=(x+w*w)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),W=!1,t.timeStamp-K<=s.multiClickDebounceTime()?($&&clearTimeout($),W=!0,K=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):($=setTimeout((function(){W||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),K=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&E<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(n).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var T=0;T<u.length;T++)c[T]=u[T];e.dragData.didDrag=!1,0===t.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=[null,null,null,null,null,null],e.touchData.startGPosition=null,e.touchData.didSelect=!1),t.touches.length<2&&(1===t.touches.length&&(e.touchData.startGPosition=[t.touches[0].clientX,t.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var J=[],ee=function(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}},te=function(e){return{event:e,touch:ee(e)}},ne=function(e){J.push(te(e))},re=function(e){for(var t=0;t<J.length;t++)if(J[t].event.pointerId===e.pointerId)return void J.splice(t,1)},ie=function(e){var t=J.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=ee(e)},ae=function(e){e.touches=J.map((function(e){return e.touch}))},oe=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){oe(e)||(e.preventDefault(),ne(e),ae(e),U(e))})),e.registerBinding(e.container,"pointerup",(function(e){oe(e)||(re(e),ae(e),q(e))})),e.registerBinding(e.container,"pointercancel",(function(e){oe(e)||(re(e),ae(e),H(e))})),e.registerBinding(e.container,"pointermove",(function(e){oe(e)||(e.preventDefault(),ie(e),ae(e),j(e))}))}}},bh={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ar(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return Kn(e,t,this.points,a,o,r,i,[0,-1],n)}}},generateEllipse:function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return er(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return tr(e,t,r,i,a,o,n)}}},generateRoundPolygon:function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],l=Math.sqrt(o*o+s*s);n[4*r+2]=o/l,n[4*r+3]=s/l}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return or(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return Zn(e,t,this.points,a,o,r,i)}}},generateRoundRectangle:function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:lr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Xn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=hr(r,i),l=2*s;return!!(Kn(e,t,this.points,a,o,r,i-l,[0,-1],n)||Kn(e,t,this.points,a,o,r-l,i,[0,-1],n)||tr(e,t,l,l,a-r/2+s,o-i/2+s,n)||tr(e,t,l,l,a+r/2-s,o-i/2+s,n)||tr(e,t,l,l,a+r/2-s,o+i/2-s,n)||tr(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},generateCutRectangle:function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:pr(),points:lr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,l=n+o,u=r-a,c=r+a;return{topLeft:[s,u+i,s+i,u,s+i,u+i],topRight:[l-i,u,l,u+i,l-i,u+i],bottomRight:[l,c-i,l-i,c,l-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),l=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return ar(i,a,l,e,t)},checkPoint:function(e,t,n,r,i,a,o){if(Kn(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if(Kn(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return $n(e,t,s.topLeft)||$n(e,t,s.topRight)||$n(e,t,s.bottomRight)||$n(e,t,s.bottomLeft)}}},generateBarrel:function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:lr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=.15,l=.5,u=.85,c=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),h=function(e){var t=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},s),n=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},l),r=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},u);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},d=[].concat(h(c.topLeft),h(c.topRight),h(c.bottomRight),h(c.bottomLeft));return ar(i,a,d,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,l=r-i,u=r+i,c=fr(e,t),h=c.heightOffset,d=c.widthOffset,p=c.ctrlPtOffsetPct*e,g={topLeft:[o,l+h,o+p,l,o+d,l],topRight:[s-d,l,s-p,l,s,l+h],bottomRight:[s,u-h,s-p,u,s-d,u],bottomLeft:[o+d,u,o+p,u,o,u-h]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,r,i,a,o){var s=fr(r,i),l=s.heightOffset,u=s.widthOffset;if(Kn(e,t,this.points,a,o,r,i-2*l,[0,-1],n))return!0;if(Kn(e,t,this.points,a,o,r-2*u,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),h=function(e,t,n){var r=n[4],i=n[2],a=n[0],o=n[5],s=n[1],l=Math.min(r,a),u=Math.max(r,a),c=Math.min(o,s),h=Math.max(o,s);if(l<=e&&e<=u&&c<=t&&t<=h){var d=gr(r,i,a),p=jn(d[0],d[1],d[2],e).filter((function(e){return 0<=e&&e<=1}));if(p.length>0)return p[0]}return null},d=Object.keys(c),p=0;p<d.length;p++){var g=c[d[p]],f=h(e,t,g);if(null!=f){var v=g[5],y=g[3],m=g[1],b=Dn(v,y,m,f);if(g.isTop&&b<=t)return!0;if(g.isBottom&&t<=b)return!0}}return!1}}},generateBottomRoundrectangle:function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:lr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),l=ir(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return l.length>0?l:Xn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=hr(r,i),l=2*s;if(Kn(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(Kn(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!!$n(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||!!tr(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!tr(e,t,l,l,a-r/2+s,o+i/2-s,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",lr(3,0)),this.generateRoundPolygon("round-triangle",lr(3,0)),this.generatePolygon("rectangle",lr(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",lr(5,0)),this.generateRoundPolygon("round-pentagon",lr(5,0)),this.generatePolygon("hexagon",lr(6,0)),this.generateRoundPolygon("round-hexagon",lr(6,0)),this.generatePolygon("heptagon",lr(7,0)),this.generateRoundPolygon("round-heptagon",lr(7,0)),this.generatePolygon("octagon",lr(8,0)),this.generateRoundPolygon("round-octagon",lr(8,0));var r=new Array(20),i=cr(5,0),a=cr(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=ur(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",l),this.generateRoundPolygon("round-tag",l),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}}},xh={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||It();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&Dt("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},wh=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};xh.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;var n=function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){wh(e,!0,r);var i=rt();e.render(e.renderOptions);var a=e.lastDrawTime=rt();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else wh(e,!1,r);e.skipFrame=!1,nt(n)}};nt(n)}};var Eh=function(e){this.init(e)},Th=Eh.prototype;Th.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],Th.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container(),r=t.cy.window();if(r){var i=r.document,a=i.head,o="__________cytoscape_stylesheet",s="__________cytoscape_container",l=null!=i.getElementById(o);if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!l){var u=i.createElement("style");u.id=o,u.textContent="."+s+" { position: relative; }",a.insertBefore(u,a.children[0])}"static"===r.getComputedStyle(n).getPropertyValue("position")&&Nt("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=_(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},Th.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},Th.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},Th.isHeadless=function(){return!1},[Jc,vh,yh,mh,bh,xh].forEach((function(e){Q(Th,e)}));var _h=1e3/60,Dh={setupDequeueing:function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=Qe((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=function(i,a){var o=rt(),s=n.averageRedrawTime,l=n.lastRedrawTime,u=[],c=n.cy.extent(),h=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var d=rt(),p=d-o,g=d-a;if(l<_h){var f=_h-(i?s:0);if(g>=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*_h)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y<v.length;y++)u.push(v[y])}u.length>0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())},a=e.priority||_t;n.beforeRender(i,a(t))}}}},Ch=function(){function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Et;t(this,e),this.idsByKey=new Yt,this.keyForId=new Yt,this.cachesByLvl=new Yt,this.lvls=[],this.getKey=n,this.doesEleInvalidateKey=r}return i(e,[{key:"getIdsFor",value:function(e){null==e&&Dt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ut,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 Yt,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}(),Nh=25,Ah=50,Lh=-4,Sh=3,Oh=7.99,kh=8,Ih=1024,Mh=1024,Ph=1024,Rh=.2,Bh=.8,Fh=10,zh=.15,Gh=.1,Yh=.9,Xh=.9,Vh=100,Uh=1,jh={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Hh=Mt({getKey:null,doesEleInvalidateKey:Et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:wt,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),qh=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Hh(t);Q(n,r),n.lookup=new Ch(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Wh=qh.prototype;Wh.reasons=jh,Wh.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Wh.getRetiredTextureQueue=function(e){var t=this,n=t.eleImgCaches.retired=t.eleImgCaches.retired||{};return n[e]=n[e]||[]},Wh.getElementQueue=function(){var e=this;return e.eleCacheQueue=e.eleCacheQueue||new $t((function(e,t){return t.reqs-e.reqs}))},Wh.getElementKeyToQueue=function(){var e=this;return e.eleKeyToCacheQueue=e.eleKeyToCacheQueue||{}},Wh.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(xn(s*n))),r<Lh)r=Lh;else if(s>=Oh||r>Sh)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<=Nh?Nh:c<=Ah?Ah:Math.ceil(c/Ah)*Ah,c>Ph||h>Mh)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.usedWidth<h&&(v=y());for(var m,b=function(e){return e&&e.scaledLabelShown===d},x=i&&i===jh.dequeue,w=i&&i===jh.highQuality,E=i&&i===jh.downscale,T=r+1;T<=Sh;T++){var _=l.get(e,T);if(_){m=_;break}}var D=m&&m.level===r+1?m:null,C=function(){v.context.drawImage(D.texture.canvas,D.x,0,D.width,D.height,v.usedWidth,0,h,c)};if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,h,p),b(D))C();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var N=m.level;N>r;N--)D=a.getElement(e,t,n,N,jh.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=Lh;L--){var S=l.get(e,L);if(S){A=S;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+kh),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},Wh.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},Wh.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=Lh;i<=Sh;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],l=s.texture;l.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(l)}t.removeFromQueue(e)}},Wh.checkTextureUtility=function(e){e.invalidatedWidth>=Rh*e.width&&this.retireTexture(e)},Wh.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>Bh&&e.fullnessChecks>=Fh?Pt(t,e):e.fullnessChecks++},Wh.retireTexture=function(e){var t=this,n=e.height,r=t.getTextureQueue(n),i=this.lookup;Pt(r,e),e.retired=!0;for(var a=e.eleCaches,o=0;o<a.length;o++){var s=a[o];i.deleteCache(s.key,s.level)}Rt(a),t.getRetiredTextureQueue(n).push(e)},Wh.addTexture=function(e,t){var n=this,r={};return n.getTextureQueue(e).push(r),r.eleCaches=[],r.height=e,r.width=Math.max(Ih,t),r.usedWidth=0,r.invalidatedWidth=0,r.fullnessChecks=0,r.canvas=n.renderer.makeOffscreenCanvas(r.width,r.height),r.context=r.canvas.getContext("2d"),r},Wh.recycleTexture=function(e,t){for(var n=this,r=n.getTextureQueue(e),i=n.getRetiredTextureQueue(e),a=0;a<i.length;a++){var o=i[a];if(o.width>=t)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,Rt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),Pt(i,o),r.push(o),o}},Wh.queueElement=function(e,t){var n=this,r=n.getElementQueue(),i=n.getElementKeyToQueue(),a=this.getKey(e),o=i[a];if(o)o.level=Math.max(o.level,t),o.eles.merge(e),o.reqs++,r.updateItem(o);else{var s={eles:e.spawn().merge(e),level:t,reqs:1,key:a};r.push(s),i[a]=s}},Wh.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<Uh&&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,jh.dequeue)}}return i},Wh.removeFromQueue=function(e){var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=this.getKey(e),a=r[i];null!=a&&(1===a.eles.length?(a.reqs=xt,n.updateItem(a),n.pop(),r[i]=null):a.eles.unmerge(e))},Wh.onDequeue=function(e){this.onDequeues.push(e)},Wh.offDequeue=function(e){Pt(this.onDequeues,e)},Wh.setupDequeueing=Dh.setupDequeueing({deqRedrawThreshold:Vh,deqCost:zh,deqAvgCost:Gh,deqNoDrawCost:Yh,deqFastCost:Xh,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++)(0,e.onDequeues[n])(t)},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(Fn(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var $h=1,Kh=-4,Zh=2,Qh=3.99,Jh=50,ed=50,td=.15,nd=.1,rd=.9,id=.9,ad=1,od=250,sd=16e6,ld=!0,ud=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=rt()-2*od,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=Qe((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),ed),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=od?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);var i=function(e,t){return t.reqs-e.reqs};t.layersQueue=new $t(i),t.setupDequeueing()},cd=ud.prototype,hd=0,dd=Math.pow(2,53)-1;cd.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:hd=++hd%dd,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(n,n),s.translate(l,u),o},cd.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(xn(i*t)))<Kh)n=Kh;else if(i>=Qh||n>Zh)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[],h=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;Kh<=r&&r<=Zh&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Pt(c,o)}};if(r.levelIsComplete(n,e))return c;h();var d=function(){if(!o){o=Ln();for(var t=0;t<e.length;t++)In(o,e[t].boundingBox())}return o},p=function(e){var t=(e=e||{}).after;if(d(),o.w*u*(o.h*u)>sd)return null;var i=r.makeLayer(o,n);if(null!=t){var a=c.indexOf(t)+1;c.splice(a,0,i)}else(void 0===e.insert||e.insert)&&c.unshift(i);return i};if(r.skipping&&!a)return null;for(var g=null,f=e.length/$h,v=!a,y=0;y<e.length;y++){var m=e[y],b=m._private.rscratch,x=b.imgLayerCaches=b.imgLayerCaches||{},w=x[n];if(w)g=w;else{if((!g||g.eles.length>=f||!Yn(g.bb,m.boundingBox()))&&!(g=p({insert:!0,after:g})))return null;s||v?r.queueLayer(g,m):r.drawEleInLayer(g,m,n,t),g.eles.push(m),x[n]=g}}return s||(v?null:c)},cd.getEleLevelForLayerLevel=function(e,t){return e},cd.drawEleInLayer=function(e,t,n,r){var i=this,a=this.renderer,o=e.context,s=t.boundingBox();0!==s.w&&0!==s.h&&t.visible()&&(n=i.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(o,!1),a.drawCachedElement(o,t,null,null,n,ld),a.setImgSmoothing(o,!0))},cd.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},cd.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},cd.updateElementsInLayers=function(e,t){for(var n=this,r=A(e[0]),i=0;i<e.length;i++)for(var a=r?null:e[i],o=r?e[i]:e[i].ele,s=o._private.rscratch,l=s.imgLayerCaches=s.imgLayerCaches||{},u=Kh;u<=Zh;u++){var c=l[u];c&&(a&&n.getEleLevelForLayerLevel(c.level)!==a.level||t(c,o,a))}},cd.haveLayers=function(){for(var e=this,t=!1,n=Kh;n<=Zh;n++){var r=e.layersByLevel[n];if(r&&r.length>0){t=!0;break}}return t},cd.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=rt(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},cd.invalidateLayer=function(e){if(this.lastInvalidationTime=rt(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Pt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},cd.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},cd.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},cd.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},cd.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<ad&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},cd.applyLayerReplacement=function(e){var t=this,n=t.layersByLevel[e.level],r=e.replaces,i=n.indexOf(r);if(!(i<0||r.invalid)){n[i]=e;for(var a=0;a<e.eles.length;a++){var o=e.eles[a]._private,s=o.imgLayerCaches=o.imgLayerCaches||{};s&&(s[e.level]=e)}t.requestRedraw()}},cd.requestRedraw=Qe((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),cd.setupDequeueing=Dh.setupDequeueing({deqRedrawThreshold:Jh,deqCost:td,deqAvgCost:nd,deqNoDrawCost:rd,deqFastCost:id,deq:function(e,t){return e.dequeue(t)},onDeqd:_t,shouldRedraw:wt,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var pd,gd={};function fd(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function vd(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function yd(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];for(e.moveTo(s.x,s.y),i=1;i<o.length;i++)a=o[i],e.lineTo(a.x,a.y);e.closePath&&e.closePath()}function md(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var l=a[s];e.lineTo(l.x,l.y)}e.closePath&&e.closePath()}function bd(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}gd.arrowShapeImpl=function(e){return(pd||(pd={polygon:fd,"triangle-backcurve":vd,"triangle-tee":yd,"circle-triangle":md,"triangle-cross":yd,circle:bd}))[e]};var xd={drawElement:function(e,t,n,r,i,a){var o=this;t.isNode()?o.drawNode(e,t,n,r,i,a):o.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){var n=this;t.isNode()?n.drawNodeOverlay(e,t):n.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){var n=this;t.isNode()?n.drawNodeUnderlay(e,t):n.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var l=this,u=n.getBoundingBox(t);if(0!==u.w&&0!==u.h){var c=n.getElement(t,u,r,i,a);if(null!=c){var h=s(l,t);if(0===h)return;var d,p,g,f,v,y,m=o(l,t),b=u.x1,x=u.y1,w=u.w,E=u.h;if(0!==m){var T=n.getRotationPoint(t);g=T.x,f=T.y,e.translate(g,f),e.rotate(m),(v=l.getImgSmoothing(e))||l.setImgSmoothing(e,!0);var _=n.getRotationOffset(t);d=_.x,p=_.y}else d=b,p=x;1!==h&&(y=e.globalAlpha,e.globalAlpha=y*h),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,d,p,w,E),1!==h&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-g,-f),v||l.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},wd=function(){return 0},Ed=function(e,t){return e.getTextAngle(t,null)},Td=function(e,t){return e.getTextAngle(t,"source")},_d=function(e,t){return e.getTextAngle(t,"target")},Dd=function(e,t){return t.effectiveOpacity()},Cd=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};xd.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,l=s.eleTxrCache,u=s.lblTxrCache,c=s.slbTxrCache,h=s.tlbTxrCache,d=t.boundingBox(),p=!0===a?l.reasons.highQuality:null;if(0!==d.w&&0!==d.h&&t.visible()&&(!r||Fn(d,r))){var g=t.isEdge(),f=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,l,n,i,p,wd,Dd),g&&f||o.drawCachedElementPortion(e,t,u,n,i,p,Ed,Cd),g&&!f&&(o.drawCachedElementPortion(e,t,c,n,i,p,Td,Cd),o.drawCachedElementPortion(e,t,h,n,i,p,_d,Cd)),o.drawElementOverlay(e,t)}},xd.drawElements=function(e,t){for(var n=this,r=0;r<t.length;r++){var i=t[r];n.drawElement(e,i)}},xd.drawCachedElements=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];i.drawCachedElement(e,o,n,r)}},xd.drawCachedNodes=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];o.isNode()&&i.drawCachedElement(e,o,n,r)}},xd.drawLayeredElements=function(e,t,n,r){var i=this,a=i.data.lyrTxrCache.getLayers(t,n);if(a)for(var o=0;o<a.length;o++){var s=a[o],l=s.bb;0!==l.w&&0!==l.h&&e.drawImage(s.canvas,l.x1,l.y1,l.w,l.h)}else i.drawCachedElements(e,t,n,r)};var Nd={drawEdge: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=!(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(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var E=t.pstyle("ghost-offset-x").pfValue,T=t.pstyle("ghost-offset-y").pfValue,_=t.pstyle("ghost-opacity").value,D=f*_;e.translate(E,T),y(D),x(D),e.translate(-E,-T)}b(),y(),x(),m(),w(),n&&e.translate(l.x1,l.y1)}}},Ad=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")}}}};Nd.drawEdgeOverlay=Ad("overlay"),Nd.drawEdgeUnderlay=Ad("underlay"),Nd.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,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;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 d=2;d+3<n.length;d+=4)t.quadraticCurveTo(n[d],n[d+1],n[d+2],n[d+3]);break;case"straight":case"segments":case"haystack":for(var p=2;p+1<n.length;p+=2)t.lineTo(n[p],n[p+1])}t=o,l?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},Nd.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],l=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-l[0],n[i+1]-l[1]),t.lineTo(n[i]+l[0],n[i+1]+l[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},Nd.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},Nd.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,l=t.pstyle(n+"-arrow-shape").value;if("none"!==l){var u="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,h=t.pstyle("width").pfValue,d=t.pstyle(n+"-arrow-width"),p="match-line"===d.value?h:d.pfValue;"%"===d.units&&(p*=h);var g=t.pstyle("opacity").value;void 0===o&&(o=g);var f=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,u,h,l,p,r,i,a),e.globalCompositeOperation=f);var v=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,v[0],v[1],v[2],o),s.colorStrokeStyle(e,v[0],v[1],v[2],o),s.drawArrowShape(t,e,c,h,l,p,r,i,a)}}},Nd.drawArrowShape=function(e,t,n,r,i,a,o,s,l){var u,c=this,h=this.usePaths()&&"triangle-cross"!==i,d=!1,p=t,g={x:o,y:s},f=e.pstyle("arrow-scale").value,v=this.getArrowWidth(r,f),y=c.arrowShapes[i];if(h){var m=c.arrowPathCache=c.arrowPathCache||[],b=gt(i),x=m[b];null!=x?(u=t=x,d=!0):(u=t=new Path2D,m[b]=u)}d||(t.beginPath&&t.beginPath(),h?y.draw(t,1,0,{x:0,y:0},1):y.draw(t,v,l,g,r),t.closePath&&t.closePath()),t=p,h&&(t.translate(o,s),t.rotate(l),t.scale(v,v)),"filled"!==n&&"both"!==n||(h?t.fill(u):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=a/(h?v:1),t.lineJoin="miter",h?t.stroke(u):t.stroke()),h&&(t.scale(1/v,1/v),t.rotate(-l),t.translate(-o,-s))};var Ld={safeDrawImage:function(e,t,n,r,i,a,o,s,l,u){if(!(i<=0||a<=0||l<=0||u<=0))try{e.drawImage(t,n,r,i,a,o,s,l,u)}catch(c){Nt(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,l=o.y,u=n.cy().style(),c=u.getIndexedStyle.bind(u),h=c(n,"background-fit","value",r),d=c(n,"background-repeat","value",r),p=n.width(),g=n.height(),f=2*n.padding(),v=p+("inner"===c(n,"background-width-relative-to","value",r)?0:f),y=g+("inner"===c(n,"background-height-relative-to","value",r)?0:f),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,T=t.height||t.cachedH;null!=E&&null!=T||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,T=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var _=E,D=T;if("auto"!==c(n,"background-width","value",r)&&(_="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*v:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(D="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==_&&0!==D){if("contain"===h)_*=C=Math.min(v/_,y/D),D*=C;else if("cover"===h){var C;_*=C=Math.max(v/_,y/D),D*=C}var N=s-v/2,A=c(n,"background-position-x","units",r),L=c(n,"background-position-x","pfValue",r);N+="%"===A?(v-_)*L:L;var S=c(n,"background-offset-x","units",r),O=c(n,"background-offset-x","pfValue",r);N+="%"===S?(v-_)*O:O;var k=l-y/2,I=c(n,"background-position-y","units",r),M=c(n,"background-position-y","pfValue",r);k+="%"===I?(y-D)*M:M;var P=c(n,"background-offset-y","units",r),R=c(n,"background-offset-y","pfValue",r);k+="%"===P?(y-D)*R:R,m.pathCache&&(N-=s,k-=l,s=0,l=0);var B=e.globalAlpha;e.globalAlpha=x;var F=a.getImgSmoothing(e),z=!1;if("no"===w&&F?(a.setImgSmoothing(e,!1),z=!0):"yes"!==w||F||(a.setImgSmoothing(e,!0),z=!0),"no-repeat"===d)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.clip())),a.safeDrawImage(e,t,0,0,E,T,N,k,_,D),b&&e.restore();else{var G=e.createPattern(t,d);e.fillStyle=G,a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.translate(N,k),e.fill(),e.translate(-N,-k)}e.globalAlpha=B,z&&a.setImgSmoothing(e,F)}}},Sd={};function Od(e,t,n,r,i){var a=arguments.length>5&&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()}Sd.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(xn(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Sd.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&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)},Sd.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Sd.setupTextStyle=function(e,t){var n=!(arguments.length>2&&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)},Sd.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ft(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Sd.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=Ft(a,"labelX",n),c=Ft(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=Ft(a,"labelWidth",n),f=Ft(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=t.pstyle("text-border-width").pfValue,_=t.pstyle("text-background-padding").pfValue,D=0===t.pstyle("text-background-shape").strValue.indexOf("round"),C=2;if(w>0||T>0&&E>0){var N=u-_;switch(b){case"left":N-=g;break;case"center":N-=g/2}var A=c-f-_,L=g+2*_,S=f+2*_;if(w>0){var O=e.fillStyle,k=t.pstyle("text-background-color").value;e.fillStyle="rgba("+k[0]+","+k[1]+","+k[2]+","+w*o+")",D?Od(e,N,A,L,S,C):e.fillRect(N,A,L,S),e.fillStyle=O}if(T>0&&E>0){var I=e.strokeStyle,M=e.lineWidth,P=t.pstyle("text-border-color").value,R=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+P[0]+","+P[1]+","+P[2]+","+E*o+")",e.lineWidth=T,e.setLineDash)switch(R){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(D?Od(e,N,A,L,S,C,"stroke"):e.strokeRect(N,A,L,S),"double"===R){var B=T/2;D?Od(e,N+B,A+B,L-2*B,S-2*B,C,"stroke"):e.strokeRect(N+B,A+B,L-2*B,S-2*B)}e.setLineDash&&e.setLineDash([]),e.lineWidth=M,e.strokeStyle=I}}var F=2*t.pstyle("text-outline-width").pfValue;if(F>0&&(e.lineWidth=F),"wrap"===t.pstyle("text-wrap").value){var z=Ft(a,"labelWrapCachedLines",n),G=Ft(a,"labelLineHeight",n),Y=g/2,X=this.getLabelJustification(t);switch("auto"===X||("left"===b?"left"===X?u+=-g:"center"===X&&(u+=-Y):"center"===b?"left"===X?u+=-Y:"right"===X&&(u+=Y):"right"===b&&("center"===X?u+=Y:"right"===X&&(u+=g))),x){case"top":case"center":case"bottom":c-=(z.length-1)*G}for(var V=0;V<z.length;V++)F>0&&e.strokeText(z[V],u,c),e.fillText(z[V],u,c),c+=G}else F>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var kd={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;E<m.length;E++){var T=m[E];if(b[E]=null!=T&&"none"!==T){var D=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",E);w++,x[E]=l.getCachedImage(T,D,(function(){u.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var C=t.pstyle("background-blacken").value,N=t.pstyle("border-width").pfValue,A=t.pstyle("background-opacity").value*g,L=t.pstyle("border-color").value,S=t.pstyle("border-style").value,O=t.pstyle("border-opacity").value*g,k=t.pstyle("outline-width").pfValue,I=t.pstyle("outline-color").value,M=t.pstyle("outline-style").value,P=t.pstyle("outline-opacity").value*g,R=t.pstyle("outline-offset").value;e.lineJoin="miter";var B=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},F=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:O;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},z=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:P;l.colorStrokeStyle(e,I[0],I[1],I[2],t)},G=function(e,t,n,r){var i,a=l.nodePathCache=l.nodePathCache||[],o=ft("polygon"===n?n+","+r.join(","):n,""+t,""+e),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}},Y=t.pstyle("shape").strValue,X=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var V=G(r,i,Y,X);d=V.path,v=V.cacheHit}var U=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)}f?e.fill(d):e.fill()},j=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;o<x.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:b[o]&&x[o].complete&&!x[o].error&&(a++,l.drawInscribedImage(e,x[o],t,o,n))}u.backgrounding=!(a===w),i!==u.backgrounding&&t.updateStyle(!1)},H=function(){var n=arguments.length>0&&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)))},q=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())},W=function(){if(N>0){if(e.lineWidth=N,e.lineCap="butt",e.setLineDash)switch(S){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===S){e.lineWidth=N/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},$=function(){if(k>0){if(e.lineWidth=k,e.lineCap="butt",e.setLineDash)switch(M){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,o=l.getNodeShape(t),s=(r+N+(k+R))/r,u=(i+N+(k+R))/i,c=r*s,d=i*u,p=l.nodeShapes[o].points;if(f&&(a=G(c,d,o,p).path),"ellipse"===o)l.drawEllipsePath(a||e,n.x,n.y,c,d);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(o)){var g=0,v=0,y=0;"round-diamond"===o?g=1.4*(N+R+k):"round-heptagon"===o?(g=1.075*(N+R+k),y=-(N/2+R+k)/35):"round-hexagon"===o?g=1.12*(N+R+k):"round-pentagon"===o?(g=1.13*(N+R+k),y=-(N/2+R+k)/15):"round-tag"===o?(g=1.12*(N+R+k),v=.07*(N/2+k+R)):"round-triangle"===o&&(g=(N+R+k)*(Math.PI/2),y=-(N+R/2+k)/Math.PI),0!==g&&(s=(r+g)/r,u=(i+g)/i),l.drawRoundPolygonPath(a||e,n.x+v,n.y+y,r*s,i*u,p)}else["roundrectangle","round-rectangle"].includes(o)?l.drawRoundRectanglePath(a||e,n.x,n.y,c,d):["cutrectangle","cut-rectangle"].includes(o)?l.drawCutRectanglePath(a||e,n.x,n.y,c,d):["bottomroundrectangle","bottom-round-rectangle"].includes(o)?l.drawBottomRoundRectanglePath(a||e,n.x,n.y,c,d):"barrel"===o?l.drawBarrelPath(a||e,n.x,n.y,c,d):o.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(o)?(p=Qn(Jn(p,(N+k+R)/r)),l.drawPolygonPath(a||e,n.x,n.y,r,i,p)):(p=Qn(Jn(p,-(N+k+R)/r)),l.drawPolygonPath(a||e,n.x,n.y,r,i,p));if(f?e.stroke(a):e.stroke(),"double"===M){e.lineWidth=N/3;var m=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(a):e.stroke(),e.globalCompositeOperation=m}e.setLineDash&&e.setLineDash([])}},K=function(){o&&l.drawNodeOverlay(e,t,h,r,i)},Z=function(){o&&l.drawNodeUnderlay(e,t,h,r,i)},Q=function(){l.drawElementText(e,t,null,a)};if("yes"===t.pstyle("ghost").value){var J=t.pstyle("ghost-offset-x").pfValue,ee=t.pstyle("ghost-offset-y").pfValue,te=t.pstyle("ghost-opacity").value,ne=te*g;e.translate(J,ee),z(),$(),B(te*A),U(),j(ne,!0),F(te*O),W(),H(0!==C||0!==N),j(ne,!1),q(ne),e.translate(-J,-ee)}f&&e.translate(-h.x,-h.y),Z(),f&&e.translate(h.x,h.y),z(),$(),B(),U(),j(g,!0),F(),W(),H(0!==C||0!==N),j(g,!1),q(),f&&e.translate(-h.x,-h.y),Q(),K(),n&&e.translate(p.x1,p.y1)}}},Id=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){var o=this;if(n.visible()){var s=n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,c=n.pstyle("".concat(e,"-shape")).value;if(l>0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}o.colorFillStyle(t,u[0],u[1],u[2],l),o.nodeShapes[c].draw(t,r.x,r.y,i+2*s,a+2*s),t.fill()}}}};kd.drawNodeOverlay=Id("overlay"),kd.drawNodeUnderlay=Id("underlay"),kd.hasPie=function(e){return(e=e[0])._private.hasPie},kd.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 Md={},Pd=100;Md.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},Md.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},Md.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,l=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var u=n.sourceEndpoint(),c=n.targetEndpoint(),h=n.midpoint(),d=En(u,h),p=En(c,h);a=e.createRadialGradient(h.x,h.y,0,h.x,h.y,Math.max(d,p))}else{var g=o?{x:0,y:0}:n.position(),f=n.paddedWidth(),v=n.paddedHeight();a=e.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(f,v))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=l.length===s.length,T=s.length,_=0;_<T;_++)a.addColorStop(E?l[_]:_/(T-1),"rgba("+s[_][0]+","+s[_][1]+","+s[_][2]+","+i+")");return a},Md.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},Md.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},Md.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},Md.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},Md.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},Md.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},Md.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var l,u=i*o,c=a*o;if(u!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var h=n.canvasContainer;h.style.width=i+"px",h.style.height=a+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)(l=n.canvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";for(d=0;d<t.BUFFER_COUNT;d++)(l=n.bufferCanvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";t.textureMult=1,o<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=u*t.textureMult,l.height=c*t.textureMult),t.canvasWidth=u,t.canvasHeight=c}},Md.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},Md.render=function(e){var t=(e=e||It()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,l=o.cy,u=o.data,c=u.canvasNeedsRedraw,h=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),d=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,p=o.motionBlurPxRatio,g=l.hasCompoundNodes(),f=o.hoverData.draggingEles,v=!(!o.hoverData.selecting&&!o.touchData.selecting),y=d=d&&!t&&o.motionBlurEnabled&&!v;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),d&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.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},T={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||T.zoom!==_.zoom||T.pan.x!==_.pan.x||T.pan.y!==_.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}),(T=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],S=o.textureCache.texture;T=o.textureCache.viewport,L.setTransform(1,0,0,1,0,0),d?C(L,0,0,T.width,T.height):L.clearRect(0,0,T.width,T.height);var O=m.core("outside-texture-bg-color").value,k=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,O[0],O[1],O[2],k),L.fillRect(0,0,T.width,T.height),b=l.zoom(),N(L,!1),L.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s),L.drawImage(S,T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var I=l.extent(),M=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&M,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)),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);var X=60;L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/X,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],U=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],j=u.contexts[o.DRAG],H=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,U,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(j,H,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=T,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()}),Pd)),t||l.emit("render")};for(var Rd={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;l<a.length/2;l++)e.lineTo(t+o*a[2*l],n+s*a[2*l+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,l=dr(r,i);e.beginPath&&e.beginPath();for(var u=0;u<a.length/4;u++){var c=void 0,h=void 0;c=0===u?a.length-2:4*u-2,h=4*u+2;var d=t+o*a[4*u],p=n+s*a[4*u+1],g=-a[c]*a[h]-a[c+1]*a[h+1],f=l/Math.tan(Math.acos(g)/2),v=d-f*a[c],y=p-f*a[c+1],m=d+f*a[h],b=p+f*a[h+1];0===u?e.moveTo(v,y):e.lineTo(v,y),e.arcTo(d,p,m,b,l)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=hr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=hr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=pr();e.beginPath&&e.beginPath(),e.moveTo(t-a+s,n-o),e.lineTo(t+a-s,n-o),e.lineTo(t+a,n-o+s),e.lineTo(t+a,n+o-s),e.lineTo(t+a-s,n+o),e.lineTo(t-a+s,n+o),e.lineTo(t-a,n+o-s),e.lineTo(t-a,n-o+s),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,l=t+a,u=n-o,c=n+o,h=fr(r,i),d=h.widthOffset,p=h.heightOffset,g=h.ctrlPtOffsetPct*d;e.beginPath&&e.beginPath(),e.moveTo(s,u+p),e.lineTo(s,c-p),e.quadraticCurveTo(s+g,c,s+d,c),e.lineTo(l-d,c),e.quadraticCurveTo(l-g,c,l,c-p),e.lineTo(l,u+p),e.quadraticCurveTo(l-g,u,l-d,u),e.lineTo(s+d,u),e.quadraticCurveTo(s+g,u,s,u+p),e.closePath()}},Bd=Math.sin(0),Fd=Math.cos(0),zd={},Gd={},Yd=Math.PI/40,Xd=0*Math.PI;Xd<2*Math.PI;Xd+=Yd)zd[Xd]=Math.sin(Xd),Gd[Xd]=Math.cos(Xd);Rd.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,l=i/2,u=0*Math.PI;u<2*Math.PI;u+=Yd)a=t-s*zd[u]*Bd+s*Gd[u]*Fd,o=n+l*Gd[u]*Bd+l*zd[u]*Fd,0===u?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var Vd={};function Ud(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}function jd(e){var t=e.indexOf(",");return e.substr(t+1)}function Hd(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new Yi((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return Ud(jd(r()),n);case"base64":return jd(r());default:return r()}}Vd.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},Vd.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=_(e.maxWidth)||_(e.maxHeight),s=this.getPixelRatio(),l=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,l=e.scale;else if(o){var u=1/0,c=1/0;_(e.maxWidth)&&(u=l*e.maxWidth/i),_(e.maxHeight)&&(c=l*e.maxHeight/a),i*=l=Math.min(u,c),a*=l}o||(i*=s,a*=s,l*=s);var h=document.createElement("canvas");h.width=i,h.height=a,h.style.width=i+"px",h.style.height=a+"px";var d=h.getContext("2d");if(i>0&&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},Vd.png=function(e){return Hd(e,this.bufferCanvasImage(e),"image/png")},Vd.jpg=function(e){return Hd(e,this.bufferCanvasImage(e),"image/jpeg")};var qd={nodeShapeImpl:function(e,t,n,r,i,a,o){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);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},Wd=Kd,$d=Kd.prototype;function Kd(e){var t=this;t.data={canvases:new Array($d.CANVAS_LAYERS),contexts:new Array($d.CANVAS_LAYERS),canvasNeedsRedraw:new Array($d.CANVAS_LAYERS),bufferCanvases:new Array($d.BUFFER_COUNT),bufferContexts:new Array($d.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"};B()&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<$d.CANVAS_LAYERS;s++){var l=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=l.getContext("2d"),Object.keys(o).forEach((function(e){l.style[e]=o[e]})),l.style.position="absolute",l.setAttribute("data-id","layer"+s),l.style.zIndex=String($d.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[s]=!1}for(t.data.topCanvas=t.data.canvases[0],t.data.canvases[$d.NODE].setAttribute("data-id","layer"+$d.NODE+"-node"),t.data.canvases[$d.SELECT_BOX].setAttribute("data-id","layer"+$d.SELECT_BOX+"-selectbox"),t.data.canvases[$d.DRAG].setAttribute("data-id","layer"+$d.DRAG+"-drag"),s=0;s<$d.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var u=Ln(),c=function(e){return{x:(e.x1+e.x2)/2,y:(e.y1+e.y2)/2}},h=function(e){return{x:-e.w/2,y:-e.h/2}},d=function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},p=function(e){return e[0]._private.nodeKey},g=function(e){return e[0]._private.labelStyleKey},f=function(e){return e[0]._private.sourceLabelStyleKey},v=function(e){return e[0]._private.targetLabelStyleKey},y=function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},m=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},b=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},x=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},w=function(e){return e.boundingBox(),e[0]._private.bodyBounds},E=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||u},T=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||u},_=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||u},D=function(e,t){return t},C=function(e){return c(w(e))},N=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},A=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},L=function(e){return N("",A(e,"labelX","labelY"),e)},S=function(e){return N("source",A(e,"sourceLabelX","sourceLabelY"),e)},O=function(e){return N("target",A(e,"targetLabelX","targetLabelY"),e)},k=function(e){return h(w(e))},I=function(e){return h(T(e))},M=function(e){return h(_(e))},P=function(e){var t=E(e),n=h(E(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},R=t.data.eleTxrCache=new qh(t,{getKey:p,doesEleInvalidateKey:d,drawElement:y,getBoundingBox:w,getRotationPoint:C,getRotationOffset:k,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),F=t.data.lblTxrCache=new qh(t,{getKey:g,drawElement:m,getBoundingBox:E,getRotationPoint:L,getRotationOffset:P,isVisible:D}),z=t.data.slbTxrCache=new qh(t,{getKey:f,drawElement:b,getBoundingBox:T,getRotationPoint:S,getRotationOffset:I,isVisible:D}),G=t.data.tlbTxrCache=new qh(t,{getKey:v,drawElement:x,getBoundingBox:_,getRotationPoint:O,getRotationOffset:M,isVisible:D}),Y=t.data.lyrTxrCache=new ud(t);t.onUpdateEleCalcs((function(e,t){R.invalidateElements(t),F.invalidateElements(t),z.invalidateElements(t),G.invalidateElements(t),Y.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var X=function(e){for(var t=0;t<e.length;t++)Y.enqueueElementRefinement(e[t].ele)};R.onDequeue(X),F.onDequeue(X),z.onDequeue(X),G.onDequeue(X)}$d.CANVAS_LAYERS=3,$d.SELECT_BOX=0,$d.DRAG=1,$d.NODE=2,$d.BUFFER_COUNT=3,$d.TEXTURE_BUFFER=0,$d.MOTIONBLUR_BUFFER_NODE=1,$d.MOTIONBLUR_BUFFER_DRAG=2,$d.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[$d.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[$d.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[$d.SELECT_BOX]=t}};var Zd="undefined"!=typeof Path2D;$d.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},$d.usePaths=function(){return Zd&&this.pathsEnabled},$d.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},$d.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},$d.makeOffscreenCanvas=function(t,n){var r;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":e(OffscreenCanvas))?r=new OffscreenCanvas(t,n):((r=document.createElement("canvas")).width=t,r.height=n),r},[gd,xd,Nd,Ld,Sd,kd,Md,Rd,Vd,qd].forEach((function(e){Q($d,e)}));var Qd=[{type:"layout",extensions:$c},{type:"renderer",extensions:[{name:"null",impl:Kc},{name:"base",impl:Eh},{name:"canvas",impl:Wd}]}],Jd={},ep={};function tp(e,t,n){var r=n,i=function(n){Nt("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(sc.prototype[t])return i(t);sc.prototype[t]=n}else if("collection"===e){if(wu.prototype[t])return i(t);wu.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),E(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],l=0;l<s.length;l++){var u=s[l];o[u]=o[u]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var h=function(e){return e._private.cy},d={addEventFields:function(e,t){t.layout=e,t.cy=h(e),t.target=e},bubble:function(){return!0},parent:function(e){return h(e)}};Q(o,{createEmitter:function(){return this._private.emitter=new Fl(d,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),ds.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var p=np("renderer","base"),g=p.prototype,f=n,v=n.prototype,y=function(){p.apply(this,arguments),f.apply(this,arguments)},m=y.prototype;for(var b in g){var x=g[b];if(null!=v[b])return i(b);m[b]=x}for(var w in v)m[w]=v[w];g.clientFunctions.forEach((function(e){m[e]=m[e]||function(){Dt("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return Dt(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return ae({map:Jd,keys:[e,t],value:r})}function np(e,t){return oe({map:Jd,keys:[e,t]})}function rp(e,t,n,r,i){return ae({map:ep,keys:[e,t,n,r],value:i})}function ip(e,t,n,r){return oe({map:ep,keys:[e,t,n,r]})}var ap=function(){return 2===arguments.length?np.apply(null,arguments):3===arguments.length?tp.apply(null,arguments):4===arguments.length?ip.apply(null,arguments):5===arguments.length?rp.apply(null,arguments):void Dt("Invalid extension access syntax")};sc.prototype.extension=ap,Qd.forEach((function(e){e.extensions.forEach((function(t){tp(e.type,t.name,t.impl)}))}));var op=function e(){if(!(this instanceof e))return new e;this.length=0},sp=op.prototype;sp.instanceString=function(){return"stylesheet"},sp.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},sp.css=function(e,t){var n=this.length-1;if(b(e))this[n].properties.push({name:e,value:t});else if(E(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var l=tc.properties[o]||tc.properties[G(o)];if(null!=l){var u=l.name,c=s;this[n].properties.push({name:u,value:c})}}}return this},sp.style=sp.css,sp.generateStyle=function(e){var t=new tc(e);return this.appendToStyle(t)},sp.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var lp="3.28.1",up=function(e){return void 0===e&&(e={}),E(e)?new sc(e):b(e)?ap.apply(ap,arguments):void 0};return up.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(up),e.apply(null,t),this},up.warnings=function(e){return Ct(e)},up.version=lp,up.stylesheet=up.Stylesheet=op,up}()},2241: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;n<t.length;n++)t[n].withChildren().forEach((function(t){e.add(t)}));return e},u.prototype.getNoOfChildren=function(){var e=0;if(null==this.child)e=1;else for(var t=this.child.getNodes(),n=0;n<t.length;n++)e+=t[n].getNoOfChildren();return 0==e&&(e=1),e},u.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},u.prototype.calcEstimatedSize=function(){return null==this.child?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},u.prototype.scatter=function(){var e,t,n=-o.INITIAL_WORLD_BOUNDARY,r=o.INITIAL_WORLD_BOUNDARY;e=o.WORLD_CENTER_X+s.nextDouble()*(r-n)+n;var i=-o.INITIAL_WORLD_BOUNDARY,a=o.INITIAL_WORLD_BOUNDARY;t=o.WORLD_CENTER_Y+s.nextDouble()*(a-i)+i,this.rect.x=e,this.rect.y=t},u.prototype.updateBounds=function(){if(null==this.getChild())throw"assert failed";if(0!=this.getChild().getNodes().length){var e=this.getChild();if(e.updateBounds(!0),this.rect.x=e.getLeft(),this.rect.y=e.getTop(),this.setWidth(e.getRight()-e.getLeft()),this.setHeight(e.getBottom()-e.getTop()),o.NODE_DIMENSIONS_INCLUDE_LABELS){var t=e.getRight()-e.getLeft(),n=e.getBottom()-e.getTop();this.labelWidth>t&&(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<r;i++)(a=n[i]).isInterGraph?this.graphManager.remove(a):a.source.owner.remove(a);if(-1==(o=this.nodes.indexOf(t)))throw"Node not in owner node list!";this.nodes.splice(o,1)}else if(e instanceof l){var a;if(null==(a=e))throw"Edge is null!";if(null==a.source||null==a.target)throw"Source and/or target is null!";if(null==a.source.owner||null==a.target.owner||a.source.owner!=this||a.target.owner!=this)throw"Source and/or target owner is invalid!";var o,u=a.source.edges.indexOf(a),c=a.target.edges.indexOf(a);if(!(u>-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<s;l++){var u=o[l];r>(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<p;g++){var f=d[g];e&&null!=f.child&&f.updateBounds(),s>(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<h;d++){var p=e[d];o>(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<n;r++)e+=t[r].calcEstimatedSize();return this.estimatedSize=0==e?a.EMPTY_COMPOUND_NODE_SIZE:e/Math.sqrt(this.nodes.length),this.estimatedSize},d.prototype.updateConnected=function(){var e=this;if(0!=this.nodes.length){var t,n,r=new h,i=new Set,a=this.nodes[0];for(a.withChildren().forEach((function(e){r.push(e),i.add(e)}));0!==r.length;)for(var o=(t=(a=r.shift()).getEdges()).length,s=0;s<o;s++)null==(n=t[s].getOtherEndInGraph(a,this))||i.has(n)||n.withChildren().forEach((function(e){r.push(e),i.add(e)}));if(this.isConnected=!1,i.size>=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<o;s++)n=a[s],t.remove(n);var l,u=[];for(o=(u=u.concat(t.getNodes())).length,s=0;s<o;s++)l=u[s],t.remove(l);t==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(t);this.graphs.splice(c,1),t.parent=null}else if(e instanceof i){if(null==(n=e))throw"Edge is null!";if(!n.isInterGraph)throw"Not an inter-graph edge!";if(null==n.source||null==n.target)throw"Source and/or target is null!";if(-1==n.source.edges.indexOf(n)||-1==n.target.edges.indexOf(n))throw"Source and/or target doesn't know this edge!";if(c=n.source.edges.indexOf(n),n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),null==n.source.owner||null==n.source.owner.getGraphManager())throw"Edge owner graph or owner graph manager is null!";if(-1==n.source.owner.getGraphManager().edges.indexOf(n))throw"Not in owner graph manager's edge list!";c=n.source.owner.getGraphManager().edges.indexOf(n),n.source.owner.getGraphManager().edges.splice(c,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(null==this.allNodes){for(var e=[],t=this.getGraphs(),n=t.length,r=0;r<n;r++)e=e.concat(t[r].getNodes());this.allNodes=e}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(null==this.allEdges){for(var e=[],t=this.getGraphs(),n=(t.length,0);n<t.length;n++)e=e.concat(t[n].getEdges());e=e.concat(this.edges),this.allEdges=e}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(e){if(null!=this.allNodesToApplyGravitation)throw"assert failed";this.allNodesToApplyGravitation=e},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(e){if(e.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=e,null==e.parent&&(e.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(e,t){if(null==e||null==t)throw"assert failed";if(e==t)return!0;for(var n,r=e.getOwner();null!=(n=r.getParent());){if(n==t)return!0;if(null==(r=n.getOwner()))break}for(r=t.getOwner();null!=(n=r.getParent());){if(n==e)return!0;if(null==(r=n.getOwner()))break}return!1},a.prototype.calcLowestCommonAncestors=function(){for(var e,t,n,r,i,a=this.getAllEdges(),o=a.length,s=0;s<o;s++)if(t=(e=a[s]).source,n=e.target,e.lca=null,e.sourceInLca=t,e.targetInLca=n,t!=n){for(r=t.getOwner();null==e.lca;){for(e.targetInLca=n,i=n.getOwner();null==e.lca;){if(i==r){e.lca=i;break}if(i==this.rootGraph)break;if(null!=e.lca)throw"assert failed";e.targetInLca=i.getParent(),i=e.targetInLca.getOwner()}if(r==this.rootGraph)break;null==e.lca&&(e.sourceInLca=r.getParent(),r=e.sourceInLca.getOwner())}if(null==e.lca)throw"assert failed"}else e.lca=t.getOwner()},a.prototype.calcLowestCommonAncestor=function(e,t){if(e==t)return e.getOwner();for(var n=e.getOwner();null!=n;){for(var r=t.getOwner();null!=r;){if(r==n)return r;r=r.getParent().getOwner()}n=n.getParent().getOwner()}return n},a.prototype.calcInclusionTreeDepths=function(e,t){var n;null==e&&null==t&&(e=this.rootGraph,t=1);for(var r=e.getNodes(),i=r.length,a=0;a<i;a++)(n=r[a]).inclusionTreeDepth=t,null!=n.child&&this.calcInclusionTreeDepths(n.child,t+1)},a.prototype.includesInvalidEdge=function(){for(var e,t=this.edges.length,n=0;n<t;n++)if(e=this.edges[n],this.isOneAncestorOfOther(e.source,e.target))return!0;return!1},e.exports=a},function(e,t,n){"use strict";var r=n(0);function i(){}for(var a in r)i[a]=r[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=3*i.MAX_NODE_DISPLACEMENT_INCREMENTAL,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=i},function(e,t,n){"use strict";var r=n(12);function i(){}i.calcSeparationAmount=function(e,t,n,r){if(!e.intersects(t))throw"assert failed";var i=new Array(2);this.decideDirectionsForOverlappingNodes(e,t,i),n[0]=Math.min(e.getRight(),t.getRight())-Math.max(e.x,t.x),n[1]=Math.min(e.getBottom(),t.getBottom())-Math.max(e.y,t.y),e.getX()<=t.getX()&&e.getRight()>=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]<s?s=n[0]:o=n[1],n[0]=-1*i[0]*(s/2+r),n[1]=-1*i[1]*(o/2+r)},i.decideDirectionsForOverlappingNodes=function(e,t,n){e.getCenterX()<t.getCenterX()?n[0]=-1:n[0]=1,e.getCenterY()<t.getCenterY()?n[1]=-1:n[1]=1},i.getIntersection2=function(e,t,n){var r=e.getCenterX(),i=e.getCenterY(),a=t.getCenterX(),o=t.getCenterY();if(e.intersects(t))return n[0]=r,n[1]=i,n[2]=a,n[3]=o,!0;var s=e.getX(),l=e.getY(),u=e.getRight(),c=e.getX(),h=e.getBottom(),d=e.getRight(),p=e.getWidthHalf(),g=e.getHeightHalf(),f=t.getX(),v=t.getY(),y=t.getRight(),m=t.getX(),b=t.getBottom(),x=t.getRight(),w=t.getWidthHalf(),E=t.getHeightHalf(),T=!1,_=!1;if(r===a){if(i>o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(i<o)return n[0]=r,n[1]=h,n[2]=a,n[3]=v,!1}else if(i===o){if(r>a)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(r<a)return n[0]=u,n[1]=i,n[2]=f,n[3]=o,!1}else{var D=e.height/e.width,C=t.height/t.width,N=(o-i)/(a-r),A=void 0,L=void 0,S=void 0,O=void 0,k=void 0,I=void 0;if(-D===N?r>a?(n[0]=c,n[1]=h,T=!0):(n[0]=u,n[1]=l,T=!0):D===N&&(r>a?(n[0]=s,n[1]=l,T=!0):(n[0]=d,n[1]=h,T=!0)),-C===N?a>r?(n[2]=m,n[3]=b,_=!0):(n[2]=y,n[3]=v,_=!0):C===N&&(a>r?(n[2]=f,n[3]=v,_=!0):(n[2]=x,n[3]=b,_=!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)),!T)switch(A){case 1:O=l,S=r+-g/N,n[0]=S,n[1]=O;break;case 2:S=d,O=i+p*N,n[0]=S,n[1]=O;break;case 3:O=h,S=r+g/N,n[0]=S,n[1]=O;break;case 4:S=c,O=i+-p*N,n[0]=S,n[1]=O}if(!_)switch(L){case 1:I=v,k=a+-E/N,n[2]=k,n[3]=I;break;case 2:k=x,I=o+w*N,n[2]=k,n[3]=I;break;case 3:I=b,k=a+E/N,n[2]=k,n[3]=I;break;case 4:k=m,I=o+-w*N,n[2]=k,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)),n<e?i+=Math.PI:r<t&&(i+=this.TWO_PI)):i=r<t?this.ONE_AND_HALF_PI:this.HALF_PI,i},i.doIntersect=function(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,l=n.x,u=n.y,c=r.x,h=r.y,d=(o-i)*(h-u)-(c-l)*(s-a);if(0===d)return!1;var p=((h-u)*(c-i)+(l-c)*(h-a))/d,g=((a-s)*(c-i)+(o-i)*(h-a))/d;return 0<p&&p<1&&0<g&&g<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,e.exports=i},function(e,t,n){"use strict";function r(){}r.sign=function(e){return e>0?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;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return{value:e,next:null,prev:null}},a=function(e,t,n,r){return null!==e?e.next=t:r.head=t,null!==n?n.prev=t:r.tail=t,t.prev=e,t.next=n,r.length++,t},o=function(e,t){var n=e.prev,r=e.next;return null!==n?n.next=r:t.head=r,null!==r?r.prev=n:t.tail=n,e.prev=e.next=null,t.length--,e},s=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.length=0,this.head=null,this.tail=null,null!=t&&t.forEach((function(e){return n.push(e)}))}return r(e,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(e,t){return a(t.prev,i(e),t,this)}},{key:"insertAfter",value:function(e,t){return a(t,i(e),t.next,this)}},{key:"insertNodeBefore",value:function(e,t){return a(t.prev,e,t,this)}},{key:"insertNodeAfter",value:function(e,t){return a(t,e,t.next,this)}},{key:"push",value:function(e){return a(this.tail,i(e),null,this)}},{key:"unshift",value:function(e){return a(null,i(e),this.head,this)}},{key:"remove",value:function(e){return o(e,this)}},{key:"pop",value:function(){return o(this.tail,this).value}},{key:"popNode",value:function(){return o(this.tail,this)}},{key:"shift",value:function(){return o(this.head,this).value}},{key:"shiftNode",value:function(){return o(this.head,this)}},{key:"get_object_at",value:function(e){if(e<=this.length()){for(var t=1,n=this.head;t<e;)n=n.next,t++;return n.value}}},{key:"set_object_at",value:function(e,t){if(e<=this.length()){for(var n=1,r=this.head;n<e;)r=r.next,n++;r.value=t}}}]),e}();e.exports=s},function(e,t,n){"use strict";function r(e,t,n){this.x=null,this.y=null,null==e&&null==t&&null==n?(this.x=0,this.y=0):"number"==typeof e&&"number"==typeof t&&null==n?(this.x=e,this.y=t):"Point"==e.constructor.name&&null==t&&null==n&&(n=e,this.x=n.x,this.y=n.y)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.getLocation=function(){return new r(this.x,this.y)},r.prototype.setLocation=function(e,t,n){"Point"==e.constructor.name&&null==t&&null==n?(n=e,this.setLocation(n.x,n.y)):"number"==typeof e&&"number"==typeof t&&null==n&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},r.prototype.move=function(e,t){this.x=e,this.y=t},r.prototype.translate=function(e,t){this.x+=e,this.y+=t},r.prototype.equals=function(e){if("Point"==e.constructor.name){var t=e;return this.x==t.x&&this.y==t.y}return this==e},r.prototype.toString=function(){return(new r).constructor.name+"[x="+this.x+",y="+this.y+"]"},e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.x=0,this.y=0,this.width=0,this.height=0,null!=e&&null!=t&&null!=n&&null!=r&&(this.x=e,this.y=t,this.width=n,this.height=r)}r.prototype.getX=function(){return this.x},r.prototype.setX=function(e){this.x=e},r.prototype.getY=function(){return this.y},r.prototype.setY=function(e){this.y=e},r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},r.prototype.getRight=function(){return this.x+this.width},r.prototype.getBottom=function(){return this.y+this.height},r.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},r.prototype.getCenterX=function(){return this.x+this.width/2},r.prototype.getMinX=function(){return this.getX()},r.prototype.getMaxX=function(){return this.getX()+this.width},r.prototype.getCenterY=function(){return this.y+this.height/2},r.prototype.getMinY=function(){return this.getY()},r.prototype.getMaxY=function(){return this.getY()+this.height},r.prototype.getWidthHalf=function(){return this.width/2},r.prototype.getHeightHalf=function(){return this.height/2},e.exports=r},function(e,t,n){"use strict";var r="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};function i(){}i.lastID=0,i.createID=function(e){return i.isPrimitive(e)?e:(null!=e.uniqueID||(e.uniqueID=i.getString(),i.lastID++),e.uniqueID)},i.getString=function(e){return null==e&&(e=i.lastID),"Object#"+e},i.isPrimitive=function(e){var t=void 0===e?"undefined":r(e);return null==e||"object"!=t&&"function"!=t},e.exports=i},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=n(0),a=n(6),o=n(3),s=n(1),l=n(5),u=n(4),c=n(17),h=n(27);function d(e){h.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,null!=e&&(this.isRemoteUse=e)}d.RANDOM_SEED=1,d.prototype=Object.create(h.prototype),d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},d.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},d.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},d.prototype.newGraphManager=function(){var e=new a(this);return this.graphManager=e,e},d.prototype.newGraph=function(e){return new l(null,this.graphManager,e)},d.prototype.newNode=function(e){return new o(this.graphManager,e)},d.prototype.newEdge=function(e){return new s(null,null,e)},d.prototype.checkLayoutSuccess=function(){return null==this.graphManager.getRoot()||0==this.graphManager.getRoot().getNodes().length||this.graphManager.includesInvalidEdge()},d.prototype.runLayout=function(){var e;return this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters(),e=!this.checkLayoutSuccess()&&this.layout(),"during"!==i.ANIMATE&&(e&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,e)},d.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},d.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var e=this.graphManager.getAllEdges(),t=0;t<e.length;t++)e[t];var n=this.graphManager.getRoot().getNodes();for(t=0;t<n.length;t++)n[t];this.update(this.graphManager.getRoot())}},d.prototype.update=function(e){if(null==e)this.update2();else if(e instanceof o){var t=e;if(null!=t.getChild())for(var n=t.getChild().getNodes(),r=0;r<n.length;r++)update(n[r]);null!=t.vGraphObject&&t.vGraphObject.update(t)}else if(e instanceof s){var i=e;null!=i.vGraphObject&&i.vGraphObject.update(i)}else if(e instanceof l){var a=e;null!=a.vGraphObject&&a.vGraphObject.update(a)}},d.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},d.prototype.transform=function(e){if(null==e)this.transform(new u(0,0));else{var t=new c,n=this.graphManager.getRoot().updateLeftTop();if(null!=n){t.setWorldOrgX(e.x),t.setWorldOrgY(e.y),t.setDeviceOrgX(n.x),t.setDeviceOrgY(n.y);for(var r=this.getAllNodes(),i=0;i<r.length;i++)r[i].transform(t)}}},d.prototype.positionNodesRandomly=function(e){if(null==e)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var t,n,r=e.getNodes(),i=0;i<r.length;i++)null==(n=(t=r[i]).getChild())||0==n.getNodes().length?t.scatter():(this.positionNodesRandomly(n),t.updateBounds())},d.prototype.getFlatForest=function(){for(var e=[],t=!0,n=this.graphManager.getRoot().getNodes(),i=!0,a=0;a<n.length;a++)null!=n[a].getChild()&&(i=!1);if(!i)return e;var o=new Set,s=[],l=new Map,u=[];for(u=u.concat(n);u.length>0&&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<h.length;a++){var d=h[a].getOtherEnd(c);if(l.get(c)!=d){if(o.has(d)){t=!1;break}s.push(d),l.set(d,c)}}}if(t){var p=[].concat(r(o));for(e.push(p),a=0;a<p.length;a++){var g=p[a],f=u.indexOf(g);f>-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;i<e.bendpoints.length;i++){var a=this.newNode(null);a.setRect(new Point(0,0),new Dimension(1,1)),r.add(a);var o=this.newEdge(null);this.graphManager.add(o,n,a),t.add(a),n=a}return o=this.newEdge(null),this.graphManager.add(o,n,e.target),this.edgeToDummyNodes.set(e,t),e.isInterGraph()?this.graphManager.remove(e):r.remove(e),t},d.prototype.createBendpointsFromDummyNodes=function(){var e=[];e=e.concat(this.graphManager.getAllEdges()),e=[].concat(r(this.edgeToDummyNodes.keys())).concat(e);for(var t=0;t<e.length;t++){var n=e[t];if(n.bendpoints.length>0){for(var i=this.edgeToDummyNodes.get(n),a=0;a<i.length;a++){var o=i[a],s=new u(o.getCenterX(),o.getCenterY()),l=n.bendpoints.get(a);l.x=s.x,l.y=s.y,o.getOwner().remove(o)}this.graphManager.add(n,n.source,n.target)}}},d.transform=function(e,t,n,r){if(null!=n&&null!=r){var i=t;return e<=50?i-=(t-t/n)/50*(50-e):i+=(t*r-t)/50*(e-50),i}var a,o;return e<=50?(a=9*t/500,o=t/10):(a=9*t/50,o=-8*t),a*e+o},d.findCenterOfTree=function(e){var t=[];t=t.concat(e);var n=[],r=new Map,i=!1,a=null;1!=t.length&&2!=t.length||(i=!0,a=t[0]);for(var o=0;o<t.length;o++){var s=(c=t[o]).getNeighborsList().size;r.set(c,c.getNeighborsList().size),1==s&&n.push(c)}var l=[];for(l=l.concat(n);!i;){var u=[];for(u=u.concat(l),l=[],o=0;o<t.length;o++){var c=t[o],h=t.indexOf(c);h>=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;u<l.length;u++)(e=l[u]).idealLength=this.idealEdgeLength,e.isInterGraph&&(n=e.getSource(),r=e.getTarget(),o=e.getSourceInLca().getEstimatedSize(),s=e.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(e.idealLength+=o+s-2*a.SIMPLE_NODE_SIZE),t=e.getLca().getInclusionTreeDepth(),e.idealLength+=i.DEFAULT_EDGE_LENGTH*i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(n.getInclusionTreeDepth()+r.getInclusionTreeDepth()-2*t))},l.prototype.initSpringEmbedder=function(){var e=this.getAllNodes().length;this.incremental?(e>i.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;n<t.length;n++)e=t[n],this.calcSpringForce(e,e.idealLength)},l.prototype.calcRepulsionForces=function(){var e,t,n,r,a,o=!(arguments.length>0&&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.length;e++)n=l[e],this.calculateRepulsionForceOfANode(n,a,o,s),a.add(n);else for(e=0;e<l.length;e++)for(n=l[e],t=e+1;t<l.length;t++)r=l[t],n.getOwner()==r.getOwner()&&this.calcRepulsionForce(n,r)},l.prototype.calcGravitationalForces=function(){for(var e,t=this.getAllNodesToApplyGravitation(),n=0;n<t.length;n++)e=t[n],this.calcGravitationalForce(e)},l.prototype.moveNodes=function(){for(var e=this.getAllNodes(),t=0;t<e.length;t++)e[t].move()},l.prototype.calcSpringForce=function(e,t){var n,r,i,a,o=e.getSource(),s=e.getTarget();if(this.uniformLeafNodeSizes&&null==o.getChild()&&null==s.getChild())e.updateLengthSimple();else if(e.updateLength(),e.isOverlapingSourceAndTarget)return;0!=(n=e.getLength())&&(i=(r=this.springConstant*(n-t))*(e.lengthX/n),a=r*(e.lengthY/n),o.springForceX+=i,o.springForceY+=a,s.springForceX-=i,s.springForceY-=a)},l.prototype.calcRepulsionForce=function(e,t){var n,r,a,l,u,c,h,d=e.getRect(),p=t.getRect(),g=new Array(2),f=new Array(4);if(d.intersects(p)){o.calcSeparationAmount(d,p,g,i.DEFAULT_EDGE_LENGTH/2),c=2*g[0],h=2*g[1];var v=e.noOfChildren*t.noOfChildren/(e.noOfChildren+t.noOfChildren);e.repulsionForceX-=v*c,e.repulsionForceY-=v*h,t.repulsionForceX+=v*c,t.repulsionForceY+=v*h}else this.uniformLeafNodeSizes&&null==e.getChild()&&null==t.getChild()?(n=p.getCenterX()-d.getCenterX(),r=p.getCenterY()-d.getCenterY()):(o.getIntersection(d,p,f),n=f[2]-f[0],r=f[3]-f[1]),Math.abs(n)<i.MIN_REPULSION_DIST&&(n=s.sign(n)*i.MIN_REPULSION_DIST),Math.abs(r)<i.MIN_REPULSION_DIST&&(r=s.sign(r)*i.MIN_REPULSION_DIST),a=n*n+r*r,l=Math.sqrt(a),c=(u=this.repulsionConstant*e.noOfChildren*t.noOfChildren/a)*n/l,h=u*r/l,e.repulsionForceX-=c,e.repulsionForceY-=h,t.repulsionForceX+=c,t.repulsionForceY+=h},l.prototype.calcGravitationalForce=function(e){var t,n,r,i,a,o,s,l;n=((t=e.getOwner()).getRight()+t.getLeft())/2,r=(t.getTop()+t.getBottom())/2,i=e.getCenterX()-n,a=e.getCenterY()-r,o=Math.abs(i)+e.getWidth()/2,s=Math.abs(a)+e.getHeight()/2,e.getOwner()==this.graphManager.getRoot()?(o>(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<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,e||t},l.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},l.prototype.calcNoOfChildrenForAllNodes=function(){for(var e,t=this.graphManager.getAllNodes(),n=0;n<t.length;n++)(e=t[n]).noOfChildren=e.getNoOfChildren()},l.prototype.calcGrid=function(e){var t,n;t=parseInt(Math.ceil((e.getRight()-e.getLeft())/this.repulsionRange)),n=parseInt(Math.ceil((e.getBottom()-e.getTop())/this.repulsionRange));for(var r=new Array(t),i=0;i<t;i++)r[i]=new Array(n);for(i=0;i<t;i++)for(var a=0;a<n;a++)r[i][a]=new Array;return r},l.prototype.addNodeToGrid=function(e,t,n){var r,i,a,o;r=parseInt(Math.floor((e.getRect().x-t)/this.repulsionRange)),i=parseInt(Math.floor((e.getRect().width+e.getRect().x-t)/this.repulsionRange)),a=parseInt(Math.floor((e.getRect().y-n)/this.repulsionRange)),o=parseInt(Math.floor((e.getRect().height+e.getRect().y-n)/this.repulsionRange));for(var s=r;s<=i;s++)for(var l=a;l<=o;l++)this.grid[s][l].push(e),e.setGridCoordinates(r,i,a,o)},l.prototype.updateGrid=function(){var e,t,n=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),e=0;e<n.length;e++)t=n[e],this.addNodeToGrid(t,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},l.prototype.calculateRepulsionForceOfANode=function(e,t,n,r){if(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&n||r){var a,o=new Set;e.surrounding=new Array;for(var s=this.grid,l=e.startX-1;l<e.finishX+2;l++)for(var u=e.startY-1;u<e.finishY+2;u++)if(!(l<0||u<0||l>=s.length||u>=s[0].length))for(var c=0;c<s[l][u].length;c++)if(a=s[l][u][c],e.getOwner()==a.getOwner()&&e!=a&&!t.has(a)&&!o.has(a)){var h=Math.abs(e.getCenterX()-a.getCenterX())-(e.getWidth()/2+a.getWidth()/2),d=Math.abs(e.getCenterY()-a.getCenterY())-(e.getHeight()/2+a.getHeight()/2);h<=this.repulsionRange&&d<=this.repulsionRange&&o.add(a)}e.surrounding=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(o))}for(l=0;l<e.surrounding.length;l++)this.calcRepulsionForce(e,e.surrounding[l])},l.prototype.calcRepulsionRange=function(){return 0},e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(7);function a(e,t,n){r.call(this,e,t,n),this.idealLength=i.DEFAULT_EDGE_LENGTH}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];e.exports=a},function(e,t,n){"use strict";var r=n(3);function i(e,t,n,i){r.call(this,e,t,n,i),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];i.prototype.setGridCoordinates=function(e,t,n,r){this.startX=e,this.finishX=t,this.startY=n,this.finishY=r},e.exports=i},function(e,t,n){"use strict";function r(e,t){this.width=0,this.height=0,null!==e&&null!==t&&(this.height=t,this.width=e)}r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},e.exports=r},function(e,t,n){"use strict";var r=n(14);function i(){this.map={},this.keys=[]}i.prototype.put=function(e,t){var n=r.createID(e);this.contains(n)||(this.map[n]=t,this.keys.push(e))},i.prototype.contains=function(e){return r.createID(e),null!=this.map[e]},i.prototype.get=function(e){var t=r.createID(e);return this.map[t]},i.prototype.keySet=function(){return this.keys},e.exports=i},function(e,t,n){"use strict";var r=n(14);function i(){this.set={}}i.prototype.add=function(e){var t=r.createID(e);this.contains(t)||(this.set[t]=e)},i.prototype.remove=function(e){delete this.set[r.createID(e)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(e){return this.set[r.createID(e)]==e},i.prototype.isEmpty=function(){return 0===this.size()},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(e){for(var t=Object.keys(this.set),n=t.length,r=0;r<n;r++)e.push(this.set[t[r]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(e){for(var t=e.length,n=0;n<t;n++){var r=e[n];this.add(r)}},e.exports=i},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(11),a=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),null===n&&void 0===n||(this.compareFunction=this._defaultCompareFunction);var r=void 0;r=t instanceof i?t.size():t.length,this._quicksort(t,0,r-1)}return r(e,[{key:"_quicksort",value:function(e,t,n){if(t<n){var r=this._partition(e,t,n);this._quicksort(e,t,r),this._quicksort(e,r+1,n)}}},{key:"_partition",value:function(e,t,n){for(var r=this._get(e,t),i=t,a=n;;){for(;this.compareFunction(r,this._get(e,a));)a--;for(;this.compareFunction(this._get(e,i),r);)i++;if(!(i<a))return a;this._swap(e,i,a),i++,a--}}},{key:"_get",value:function(e,t){return e instanceof i?e.get_object_at(t):e[t]}},{key:"_set",value:function(e,t,n){e instanceof i?e.set_object_at(t,n):e[t]=n}},{key:"_swap",value:function(e,t,n){var r=this._get(e,t);this._set(e,t,this._get(e,n)),this._set(e,n,r)}},{key:"_defaultCompareFunction",value:function(e,t){return t>e}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n){var r=arguments.length>2&&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<this.iMax;o++){this.grid[o]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[o][s]=0}this.tracebackGrid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.tracebackGrid[l]=new Array(this.jMax);for(var u=0;u<this.jMax;u++)this.tracebackGrid[l][u]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return r(e,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var e=1;e<this.jMax;e++)this.grid[0][e]=this.grid[0][e-1]+this.gap_penalty,this.tracebackGrid[0][e]=[!1,!1,!0];for(var t=1;t<this.iMax;t++)this.grid[t][0]=this.grid[t-1][0]+this.gap_penalty,this.tracebackGrid[t][0]=[!1,!0,!1];for(var n=1;n<this.iMax;n++)for(var r=1;r<this.jMax;r++){var i=[this.sequence1[n-1]===this.sequence2[r-1]?this.grid[n-1][r-1]+this.match_score:this.grid[n-1][r-1]+this.mismatch_penalty,this.grid[n-1][r]+this.gap_penalty,this.grid[n][r-1]+this.gap_penalty],a=this.arrayAllMaxIndexes(i);this.grid[n][r]=i[a[0]],this.tracebackGrid[n][r]=[a.includes(0),a.includes(1),a.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var e=[];for(e.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});e[0];){var t=e[0],n=this.tracebackGrid[t.pos[0]][t.pos[1]];n[0]&&e.push({pos:[t.pos[0]-1,t.pos[1]-1],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),n[1]&&e.push({pos:[t.pos[0]-1,t.pos[1]],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:"-"+t.seq2}),n[2]&&e.push({pos:[t.pos[0],t.pos[1]-1],seq1:"-"+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),0===t.pos[0]&&0===t.pos[1]&&this.alignments.push({sequence1:t.seq1,sequence2:t.seq2}),e.shift()}return this.alignments}},{key:"getAllIndexes",value:function(e,t){for(var n=[],r=-1;-1!==(r=e.indexOf(t,r+1));)n.push(r);return n}},{key:"arrayAllMaxIndexes",value:function(e){return this.getAllIndexes(e,Math.max.apply(null,e))}}]),e}();e.exports=i},function(e,t,n){"use strict";var r=function(){};r.FDLayout=n(18),r.FDLayoutConstants=n(7),r.FDLayoutEdge=n(19),r.FDLayoutNode=n(20),r.DimensionD=n(21),r.HashMap=n(22),r.HashSet=n(23),r.IGeometry=n(8),r.IMath=n(9),r.Integer=n(10),r.Point=n(12),r.PointD=n(4),r.RandomSeed=n(16),r.RectangleD=n(13),r.Transform=n(17),r.UniqueIDGeneretor=n(14),r.Quicksort=n(24),r.LinkedList=n(11),r.LGraphObject=n(2),r.LGraph=n(5),r.LEdge=n(1),r.LGraphManager=n(6),r.LNode=n(3),r.Layout=n(15),r.LayoutConstants=n(0),r.NeedlemanWunsch=n(25),e.exports=r},function(e,t,n){"use strict";function r(){this.listeners=[]}var i=r.prototype;i.addListener=function(e,t){this.listeners.push({event:e,callback:t})},i.removeListener=function(e,t){for(var n=this.listeners.length;n>=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<this.listeners.length;n++){var r=this.listeners[n];e===r.event&&r.callback(t)}},e.exports=r}])},e.exports=t()},339:(e,t,n)=>{"use strict";n.d(t,{diagram:()=>A});var r=n(6365),i=n(4218),a=n(9261),o=n(1377),s=n(4607),l=n(1619),u=n(2281),c=n(7201),h=(n(7484),n(7967),n(7856),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},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(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=a.slice.call(arguments,1),h=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]);h.setInput(e,d.yy),d.yy.lexer=h,d.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var g=h.yylloc;a.push(g);var f=h.options&&h.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,y,m,b,x,w,E,T,_,D={};;){if(y=n[n.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==v&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=t.symbols_[_]||_),v=_),m=o[y]&&o[y][v]),void 0===m||!m.length||!m[0]){var C="";for(x in T=[],o[y])this.terminals_[x]&&x>2&&T.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+T.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:T})}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}},m={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!t||n[0].length>t[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}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());h.parser=h;const d=h,p=e=>(0,r.d)(e,(0,r.c)());let g=[],f=0,v={};const y={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},m=(e,t)=>{v[e]=t},b=e=>{switch(e){case y.DEFAULT:return"no-border";case y.RECT:return"rect";case y.ROUNDED_RECT:return"rounded-rect";case y.CIRCLE:return"circle";case y.CLOUD:return"cloud";case y.BANG:return"bang";case y.HEXAGON:return"hexgon";default:return"no-border"}};let x;const w=e=>v[e],E=Object.freeze(Object.defineProperty({__proto__:null,addNode:(e,t,n,i)=>{r.l.info("addNode",e,t,n,i);const a=(0,r.c)(),o={id:f++,nodeId:p(t),level:e,descr:p(n),type:i,children:[],width:(0,r.c)().mindmap.maxNodeWidth};switch(o.type){case y.ROUNDED_RECT:case y.RECT:case y.HEXAGON:o.padding=2*a.mindmap.padding;break;default:o.padding=a.mindmap.padding}const s=function(e){for(let t=g.length-1;t>=0;t--)if(g[t].level<e)return g[t];return null}(e);if(s)s.children.push(o),g.push(o);else{if(0!==g.length){let e=new Error('There can be only one root. No parent could be found for ("'+o.descr+'")');throw e.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},e}g.push(o)}},clear:()=>{g=[],f=0,v={}},decorateNode:e=>{const t=g[g.length-1];e&&e.icon&&(t.icon=p(e.icon)),e&&e.class&&(t.class=p(e.class))},getElementById:w,getLogger:()=>r.l,getMindmap:()=>g.length>0?g[0]:null,getNodeById:e=>g[e],getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return y.RECT;case"(":return")"===t?y.ROUNDED_RECT:y.CLOUD;case"((":return y.CIRCLE;case")":return y.CLOUD;case"))":return y.BANG;case"{{":return y.HEXAGON;default:return y.DEFAULT}},nodeType:y,get parseError(){return x},sanitizeText:p,setElementForId:m,setErrorHandler:e=>{x=e},type2Str:b},Symbol.toStringTag,{value:"Module"}));const T=function(e,t,n,r){const i=r.htmlLabels,o=n%11,s=e.append("g");t.section=o;let l="section-"+o;o<0&&(l+=" section-root"),s.attr("class",(t.class?t.class+" ":"")+"mindmap-node "+l);const u=s.append("g"),c=s.append("g"),h=t.descr.replace(/(<br\/*>)/g,"\n");(0,a.a)(c,h,{useHtmlLabels:i,width:t.width,classes:"mindmap-node-label"}),i||c.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const d=c.node().getBBox(),p=r.fontSize.replace?r.fontSize.replace("px",""):r.fontSize;if(t.height=d.height+1.1*p*.5+t.padding,t.width=d.width+2*t.padding,t.icon)if(t.type===y.CIRCLE){t.height+=50,t.width+=50;s.append("foreignObject").attr("height","50px").attr("width",t.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+o+" "+t.icon),c.attr("transform","translate("+t.width/2+", "+(t.height/2-1.5*t.padding)+")")}else{t.width+=50;const e=t.height;t.height=Math.max(e,60);const n=Math.abs(t.height-e);s.append("foreignObject").attr("width","60px").attr("height",t.height).attr("style","text-align: center;margin-top:"+n/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+o+" "+t.icon),c.attr("transform","translate("+(25+t.width/2)+", "+(n/2+t.padding/2)+")")}else if(i){const e=(t.width-d.width)/2,n=(t.height-d.height)/2;c.attr("transform","translate("+e+", "+n+")")}else{const e=t.width/2,n=t.padding/2;c.attr("transform","translate("+e+", "+n+")")}switch(t.type){case y.DEFAULT:!function(e,t,n){e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("d",`M0 ${t.height-5} v${10-t.height} q0,-5 5,-5 h${t.width-10} q5,0 5,5 v${t.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)}(u,t,o);break;case y.ROUNDED_RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("height",t.height).attr("rx",t.padding).attr("ry",t.padding).attr("width",t.width)}(u,t);break;case y.RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("height",t.height).attr("width",t.width)}(u,t);break;case y.CIRCLE:u.attr("transform","translate("+t.width/2+", "+ +t.height/2+")"),function(e,t){e.append("circle").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("r",t.width/2)}(u,t);break;case y.CLOUD:!function(e,t){const n=t.width,r=t.height,i=.15*n,a=.25*n,o=.35*n,s=.2*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("d",`M0 0 a${i},${i} 0 0,1 ${.25*n},${-1*n*.1}\n a${o},${o} 1 0,1 ${.4*n},${-1*n*.1}\n a${a},${a} 1 0,1 ${.35*n},${1*n*.2}\n\n a${i},${i} 1 0,1 ${.15*n},${1*r*.35}\n a${s},${s} 1 0,1 ${-1*n*.15},${1*r*.65}\n\n a${a},${i} 1 0,1 ${-1*n*.25},${.15*n}\n a${o},${o} 1 0,1 ${-1*n*.5},0\n a${i},${i} 1 0,1 ${-1*n*.25},${-1*n*.15}\n\n a${i},${i} 1 0,1 ${-1*n*.1},${-1*r*.35}\n a${s},${s} 1 0,1 ${.1*n},${-1*r*.65}\n\n H0 V0 Z`)}(u,t);break;case y.BANG:!function(e,t){const n=t.width,r=t.height,i=.15*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+b(t.type)).attr("d",`M0 0 a${i},${i} 1 0,0 ${.25*n},${-1*r*.1}\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},${1*r*.1}\n\n a${i},${i} 1 0,0 ${.15*n},${1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${1*r*.34}\n a${i},${i} 1 0,0 ${-1*n*.15},${1*r*.33}\n\n a${i},${i} 1 0,0 ${-1*n*.25},${.15*r}\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},${-1*r*.15}\n\n a${i},${i} 1 0,0 ${-1*n*.1},${-1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${-1*r*.34}\n a${i},${i} 1 0,0 ${.1*n},${-1*r*.33}\n\n H0 V0 Z`)}(u,t);break;case y.HEXAGON:!function(e,t){const n=t.height,r=n/4,i=t.width-t.padding+2*r;!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+")")}(e,i,n,[{x:r,y:0},{x:i-r,y:0},{x:i,y:-n/2},{x:i-r,y:-n},{x:r,y:-n},{x:0,y:-n/2}],t)}(u,t)}return m(t.id,s),t.height},_=function(e){const t=w(e.id),n=e.x||0,r=e.y||0;t.attr("transform","translate("+n+","+r+")")};function D(e,t,n,r){T(e,t,n,r),t.children&&t.children.forEach(((t,i)=>{D(e,t,n<0?i:n,r)}))}function C(e,t,n,r){t.add({group:"nodes",data:{id:e.id,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=>{C(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 N(e,t){return new Promise((n=>{const a=(0,i.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),s=o({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),C(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}o.use(s);const A={db:E,renderer:{draw:async(e,t,n,a)=>{const o=(0,r.c)();o.htmlLabels=!1,r.l.debug("Rendering mindmap diagram\n"+e,a.parser);const s=(0,r.c)().securityLevel;let l;"sandbox"===s&&(l=(0,i.Ys)("#i"+t));const u=("sandbox"===s?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body")).select("#"+t);u.append("g");const c=a.db.getMindmap(),h=u.append("g");h.attr("class","mindmap-edges");const d=u.append("g");d.attr("class","mindmap-nodes"),D(d,c,-1,o);const p=await N(c,o);!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){e.nodes().map(((e,t)=>{const n=e.data();n.x=e.position().x,n.y=e.position().y,_(n);const i=w(n.nodeId);r.l.info("Id:",t,"Position: (",e.position().x,", ",e.position().y,")",n),i.attr("transform",`translate(${e.position().x-n.width/2}, ${e.position().y-n.height/2})`),i.attr("attr",`apa-${t})`)}))}(p),(0,r.o)(void 0,u,o.mindmap.padding,o.mindmap.useMaxWidth)}},parser:d,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n<e.THEME_COLOR_LIMIT;n++)e["lineColor"+n]=e["lineColor"+n]||e["cScaleInv"+n],(0,l.Z)(e["lineColor"+n])?e["lineColor"+n]=(0,u.Z)(e["lineColor"+n],20):e["lineColor"+n]=(0,c.Z)(e["lineColor"+n],20);for(let n=0;n<e.THEME_COLOR_LIMIT;n++){const r=""+(17-3*n);t+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {\n fill: ${e["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${e["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${e["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${e["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${r};\n }\n .section-${n-1} line {\n stroke: ${e["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return t})(e)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${e.git0};\n }\n .section-root text {\n fill: ${e.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/7724.4286755f.js.LICENSE.txt b/assets/js/339.5eb1b06a.js.LICENSE.txt similarity index 100% rename from assets/js/7724.4286755f.js.LICENSE.txt rename to assets/js/339.5eb1b06a.js.LICENSE.txt diff --git a/assets/js/33ffb019.c602af21.js b/assets/js/33ffb019.c602af21.js deleted file mode 100644 index 05d762cb0..000000000 --- a/assets/js/33ffb019.c602af21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6576],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>f});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function r(e,t){if(null==e)return{};var a,n,i=function(e,t){if(null==e)return{};var a,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var l=n.createContext({}),c=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,s=e.originalType,l=e.parentName,p=r(e,["components","mdxType","originalType","parentName"]),u=c(a),d=i,f=u["".concat(l,".").concat(d)]||u[d]||m[d]||s;return a?n.createElement(f,o(o({ref:t},p),{},{components:a})):n.createElement(f,o({ref:t},p))}));function f(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var s=a.length,o=new Array(s);o[0]=d;var r={};for(var l in t)hasOwnProperty.call(t,l)&&(r[l]=t[l]);r.originalType=e,r[u]="string"==typeof e?e:i,o[1]=r;for(var c=2;c<s;c++)o[c]=a[c];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},7271:(e,t,a)=>{a.d(t,{V:()=>s,z:()=>i});var n=a(7294);const i=e=>{let{link:t,text:a,newTab:i=!1}=e;return n.createElement(n.Fragment,null,n.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:i?"_blank":"_self"},a))},s=e=>{let{linkLeft:t,textLeft:a,newTabLeft:i=!1,linkRight:s,textRight:o,newTabRight:r=!1}=e;return n.createElement(n.Fragment,null,n.createElement("div",{class:"col col--12"},n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:i?"_blank":"_self"},a),n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:s,target:r?"_blank":"_self"},o)))}},1872:(e,t,a)=>{a.d(t,{m:()=>s});var n=a(7294);const i="leadText_qzwo",s=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:i},t))}},4770:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>f,frontMatter:()=>r,metadata:()=>c,toc:()=>u});var n=a(7462),i=(a(7294),a(4137)),s=a(1872),o=a(7271);const r={id:"docs-and-snippets",title:"Docs & Snippets",displayed_sidebar:"docs",slug:"/",description:"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",image:"img/og/og-image-docs-and-snippets.png"},l=void 0,c={unversionedId:"docs-and-snippets",id:"docs-and-snippets",title:"Docs & Snippets",description:"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",source:"@site/docs/docs-and-snippets.mdx",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/docs-and-snippets.mdx",tags:[],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"docs-and-snippets",title:"Docs & Snippets",displayed_sidebar:"docs",slug:"/",description:"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",image:"img/og/og-image-docs-and-snippets.png"},sidebar:"docs"},p={},u=[{value:"Zen of SFMC",id:"zen-of-sfmc",level:2},{value:"Server-Side JavaScript",id:"server-side-javascript",level:2},{value:"SSJS Documentation",id:"ssjs-documentation",level:3},{value:"SSJS Snippets",id:"ssjs-snippets",level:3},{value:"JavaScript",id:"javascript",level:2},{value:"JS Documentation",id:"js-documentation",level:3},{value:"JS Snippets",id:"js-snippets",level:3},{value:"AMPScript",id:"ampscript",level:2},{value:"AMPScript Documentation",id:"ampscript-documentation",level:3},{value:"AMPScript Snippets",id:"ampscript-snippets",level:3},{value:"SFMC SQL",id:"sfmc-sql",level:2},{value:"SQL Documentation",id:"sql-documentation",level:3},{value:"SQL Snippets",id:"sql-snippets",level:3},{value:"SFMC Config",id:"sfmc-config",level:2},{value:"Marketing Cloud Personalization",id:"marketing-cloud-personalization",level:2},{value:"MC Personalization Documentation",id:"mc-personalization-documentation",level:3},{value:"MC Personalization Snippets",id:"mc-personalization-snippets",level:3},{value:"Changes",id:"changes",level:2}],m={toc:u},d="wrapper";function f(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(s.m,{content:"SSJS + JS + AMPScript + SQL + SFMC & MCP Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"zen-of-sfmc"},"Zen of SFMC"),(0,i.kt)("p",null,"Salesforce Marketing Cloud is a complex and flexible tool. This combination is a dream-come-true set for enterprise Marketing Automation tools, but on the other hand, it enables mistakes and messy solutions. Find the right path to success through a best-practice fuelled checklist full of tool-based explanations and examples."),(0,i.kt)(o.z,{link:"./zen-of-sfmc/",text:"Read about Zen of SFMC",mdxType:"Button"}),(0,i.kt)("h2",{id:"server-side-javascript"},"Server-Side JavaScript"),(0,i.kt)("p",null,"SSJS is an XX-century version of JavaScript paired with proprietary libraries created by Salesforce. It is one of the programmatic tools useful to leverage Marketing Cloud to its fullest potential. I am creating this documentation to make my (and hopefully also yours) work easier."),(0,i.kt)("h3",{id:"ssjs-documentation"},"SSJS Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-if-and-switch"},"If & Switch")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-loops"},"Loops")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/debugging-ssjs"},"Debugging")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-style-guide"},"Style Guide")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-vs-ampscript-performance"},"Performance"))),(0,i.kt)("h3",{id:"ssjs-snippets"},"SSJS Snippets"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"AMPScript in SSJS")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},"MobileConnect Phone Change")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ssjs-script-template"},"SSJS Script Template")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/sfmc-cloud-page-apps"},"Solve with Cloud Page Apps"))),(0,i.kt)(o.z,{link:"./category/ssjs/",text:"Read about SSJS",mdxType:"Button"}),(0,i.kt)("h2",{id:"javascript"},"JavaScript"),(0,i.kt)("p",null,"In this part, I am gathering selected elements of modern vanilla JavaScript that I find helpful for marketing technologists. Expect guides on asynchronous calls to API and backend resources, form-focused DOM manipulation and playing with data objects."),(0,i.kt)("h3",{id:"js-documentation"},"JS Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/js-if-and-switch"},"If & Switch")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/js-loops"},"Loops")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/js-dom"},"Document Object Model (DOM)"))),(0,i.kt)("h3",{id:"js-snippets"},"JS Snippets"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/snippets/tailor-with-data"},"Tailor with Data")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/snippets/engage-with-countdown"},"Engage with Countdown")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/snippets/export-import-document-sfmc-roles"},"Export, Import & Document Roles in Salesforce Marketing Cloud"))),(0,i.kt)(o.z,{link:"./category/javascript/",text:"Read about JavaScript",mdxType:"Button"}),(0,i.kt)("h2",{id:"ampscript"},"AMPScript"),(0,i.kt)("p",null,"AMPScript is a proprietary scripting language in Salesforce Marketing Cloud along with ",(0,i.kt)("a",{parentName:"p",href:"#Server-Side-JavaScript"},"SSJS"),". Out of the two, it is simpler and more performant, but too limited for complex solutions. Good starting point for marketers without development experience. Best option for scripting in messaging."),(0,i.kt)("h3",{id:"ampscript-documentation"},"AMPScript Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ampscript/ampscript-style-guide"},"Style Guide")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-vs-ampscript-performance"},"Performance"))),(0,i.kt)("h3",{id:"ampscript-snippets"},"AMPScript Snippets"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"AMPScript in SSJS"))),(0,i.kt)(o.z,{link:"./category/ampscript/",text:"Read about AMPScript",mdxType:"Button"}),(0,i.kt)("h2",{id:"sfmc-sql"},"SFMC SQL"),(0,i.kt)("p",null,"To fully leverage the Salesforce Marketing Cloud Data Extensions and Automation Studio, SQL is a must-have. Here I gathered both the language basics and some of the most valuable snippets to copy and paste shamelessly."),(0,i.kt)("h3",{id:"sql-documentation"},"SQL Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-basics"},"SQL Basics")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select"},"Select")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-from"},"From")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},"Join")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},"Where")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case"},"Case")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-like"},"Like")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-string-functions"},"String Functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions"},"Date Functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-numeric-functions"},"Numeric Functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-conversion-functions"},"Conversion Functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-aggregate-functions"},"Aggregate Functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions"},"NULL Functions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-style-guide"},"Style Guide"))),(0,i.kt)("h3",{id:"sql-snippets"},"SQL Snippets"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},"Debugging Email Sends")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-value-length"},"Debugging Value Length"))),(0,i.kt)(o.z,{link:"./category/sfmc-sql/",text:"Read about SFMC SQL",mdxType:"Button"}),(0,i.kt)("h2",{id:"sfmc-config"},"SFMC Config"),(0,i.kt)("p",null,"Many things in Salesforce Marketing Cloud aren't coding but have a massive impact on the code. Permissions. System Data Views. Configuration options. Here I focus on the most important ones that are crucial for Marketing Cloud developers."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views"},"System Data Views")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-contact-deletion"},"Contact Deletion Process")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-mcc-integration-patterns"},"MCC Integration Patterns")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-enhanced-send-log"},"Enhanced Send Log")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-behavioral-triggers"},"Behavioral Triggers")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-code-resource"},"Power of Code Resources")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-appexchange-solutions"},"AppExchange Solutions")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/config/sfmc-features-on-demand"},"Features On Demand"))),(0,i.kt)(o.z,{link:"./category/sfmc-config/",text:"Read about SFMC Config",mdxType:"Button"}),(0,i.kt)("h2",{id:"marketing-cloud-personalization"},"Marketing Cloud Personalization"),(0,i.kt)("p",null,"Salesforce Marketing Cloud Personalization (Interaction Studio) is a cross-channel real-time hyper-personalisation engine in Salesforce Marketing Cloud. Behind that cool-looking description is a powerful tool that lets your company adapt every point of contact to each person. Neat!"),(0,i.kt)("h3",{id:"mc-personalization-documentation"},"MC Personalization Documentation"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/interaction-studio/mcp-catalog-architecture"},"Catalog Objects Architeture")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/interaction-studio/mcp-open-time-email"},"Open Time Email Template")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/interaction-studio/mcp-serverside-code-basics"},"Serverside Code Basics")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/interaction-studio/mcp-serverside-code-properties"},"Serverside Code Properties"))),(0,i.kt)("h3",{id:"mc-personalization-snippets"},"MC Personalization Snippets"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},"Catalog ETL Metadata Viewer"))),(0,i.kt)(o.z,{link:"./category/mc-personalization/",text:"Read about MC Personalization",mdxType:"Button"}),(0,i.kt)("h2",{id:"changes"},"Changes"),(0,i.kt)("p",null,"I'm updating the docs ongoingly, so expect changes. You can track those by watching and starring the website's ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl"},"Github Repository"),"."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/33ffb019.c8948b17.js b/assets/js/33ffb019.c8948b17.js new file mode 100644 index 000000000..23806fe94 --- /dev/null +++ b/assets/js/33ffb019.c8948b17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6576],{6203:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>a,toc:()=>h});var i=n(5893),t=n(1151),o=n(1872),c=n(7271);const l={id:"docs-and-snippets",title:"Docs & Snippets",displayed_sidebar:"docs",slug:"/",description:"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",image:"img/og/og-image-docs-and-snippets.png"},r=void 0,a={id:"docs-and-snippets",title:"Docs & Snippets",description:"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",source:"@site/docs/docs-and-snippets.mdx",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/docs-and-snippets.mdx",tags:[],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1704314212,formattedLastUpdatedAt:"Jan 3, 2024",frontMatter:{id:"docs-and-snippets",title:"Docs & Snippets",displayed_sidebar:"docs",slug:"/",description:"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.",image:"img/og/og-image-docs-and-snippets.png"},sidebar:"docs"},d={},h=[{value:"Zen of SFMC",id:"zen-of-sfmc",level:2},{value:"Server-Side JavaScript",id:"server-side-javascript",level:2},{value:"SSJS Documentation",id:"ssjs-documentation",level:3},{value:"SSJS Snippets",id:"ssjs-snippets",level:3},{value:"JavaScript",id:"javascript",level:2},{value:"JS Documentation",id:"js-documentation",level:3},{value:"JS Snippets",id:"js-snippets",level:3},{value:"AMPScript",id:"ampscript",level:2},{value:"AMPScript Documentation",id:"ampscript-documentation",level:3},{value:"AMPScript Snippets",id:"ampscript-snippets",level:3},{value:"SFMC SQL",id:"sfmc-sql",level:2},{value:"SQL Documentation",id:"sql-documentation",level:3},{value:"SQL Snippets",id:"sql-snippets",level:3},{value:"SFMC Config",id:"sfmc-config",level:2},{value:"Marketing Cloud Personalization",id:"marketing-cloud-personalization",level:2},{value:"MC Personalization Documentation",id:"mc-personalization-documentation",level:3},{value:"MC Personalization Snippets",id:"mc-personalization-snippets",level:3},{value:"Changes",id:"changes",level:2}];function p(e){const s={a:"a",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.m,{content:"SSJS + JS + AMPScript + SQL + SFMC & MCP Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud."}),"\n",(0,i.jsx)(s.h2,{id:"zen-of-sfmc",children:"Zen of SFMC"}),"\n",(0,i.jsx)(s.p,{children:"Salesforce Marketing Cloud is a complex and flexible tool. This combination is a dream-come-true set for enterprise Marketing Automation tools, but on the other hand, it enables mistakes and messy solutions. Find the right path to success through a best-practice fuelled checklist full of tool-based explanations and examples."}),"\n",(0,i.jsx)(c.z,{link:"./zen-of-sfmc/",text:"Read about Zen of SFMC"}),"\n",(0,i.jsx)(s.h2,{id:"server-side-javascript",children:"Server-Side JavaScript"}),"\n",(0,i.jsx)(s.p,{children:"SSJS is an XX-century version of JavaScript paired with proprietary libraries created by Salesforce. It is one of the programmatic tools useful to leverage Marketing Cloud to its fullest potential. I am creating this documentation to make my (and hopefully also yours) work easier."}),"\n",(0,i.jsx)(s.h3,{id:"ssjs-documentation",children:"SSJS Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/ssjs-if-and-switch",children:"If & Switch"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/ssjs-loops",children:"Loops"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/debugging-ssjs",children:"Debugging"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/ssjs-style-guide",children:"Style Guide"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/ssjs-vs-ampscript-performance",children:"Performance"})}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"ssjs-snippets",children:"SSJS Snippets"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"AMPScript in SSJS"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change",children:"MobileConnect Phone Change"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/snippets/ssjs-script-template",children:"SSJS Script Template"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/snippets/sfmc-cloud-page-apps",children:"Solve with Cloud Page Apps"})}),"\n"]}),"\n",(0,i.jsx)(c.z,{link:"./category/ssjs/",text:"Read about SSJS"}),"\n",(0,i.jsx)(s.h2,{id:"javascript",children:"JavaScript"}),"\n",(0,i.jsx)(s.p,{children:"In this part, I am gathering selected elements of modern vanilla JavaScript that I find helpful for marketing technologists. Expect guides on asynchronous calls to API and backend resources, form-focused DOM manipulation and playing with data objects."}),"\n",(0,i.jsx)(s.h3,{id:"js-documentation",children:"JS Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/js/js-if-and-switch",children:"If & Switch"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/js/js-loops",children:"Loops"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/js/js-dom",children:"Document Object Model (DOM)"})}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"js-snippets",children:"JS Snippets"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/js/snippets/tailor-with-data",children:"Tailor with Data"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/js/snippets/engage-with-countdown",children:"Engage with Countdown"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/js/snippets/export-import-document-sfmc-roles",children:"Export, Import & Document Roles in Salesforce Marketing Cloud"})}),"\n"]}),"\n",(0,i.jsx)(c.z,{link:"./category/javascript/",text:"Read about JavaScript"}),"\n",(0,i.jsx)(s.h2,{id:"ampscript",children:"AMPScript"}),"\n",(0,i.jsxs)(s.p,{children:["AMPScript is a proprietary scripting language in Salesforce Marketing Cloud along with ",(0,i.jsx)(s.a,{href:"#Server-Side-JavaScript",children:"SSJS"}),". Out of the two, it is simpler and more performant, but too limited for complex solutions. Good starting point for marketers without development experience. Best option for scripting in messaging."]}),"\n",(0,i.jsx)(s.h3,{id:"ampscript-documentation",children:"AMPScript Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ampscript/ampscript-style-guide",children:"Style Guide"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/ssjs-vs-ampscript-performance",children:"Performance"})}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"ampscript-snippets",children:"AMPScript Snippets"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"AMPScript in SSJS"})}),"\n"]}),"\n",(0,i.jsx)(c.z,{link:"./category/ampscript/",text:"Read about AMPScript"}),"\n",(0,i.jsx)(s.h2,{id:"sfmc-sql",children:"SFMC SQL"}),"\n",(0,i.jsx)(s.p,{children:"To fully leverage the Salesforce Marketing Cloud Data Extensions and Automation Studio, SQL is a must-have. Here I gathered both the language basics and some of the most valuable snippets to copy and paste shamelessly."}),"\n",(0,i.jsx)(s.h3,{id:"sql-documentation",children:"SQL Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-basics",children:"SQL Basics"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:"Select"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from",children:"From"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:"Join"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:"Where"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case",children:"Case"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-like",children:"Like"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions",children:"String Functions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions",children:"Date Functions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-numeric-functions",children:"Numeric Functions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-conversion-functions",children:"Conversion Functions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions",children:"Aggregate Functions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions",children:"NULL Functions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-style-guide",children:"Style Guide"})}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"sql-snippets",children:"SQL Snippets"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends",children:"Debugging Email Sends"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-value-length",children:"Debugging Value Length"})}),"\n"]}),"\n",(0,i.jsx)(c.z,{link:"./category/sfmc-sql/",text:"Read about SFMC SQL"}),"\n",(0,i.jsx)(s.h2,{id:"sfmc-config",children:"SFMC Config"}),"\n",(0,i.jsx)(s.p,{children:"Many things in Salesforce Marketing Cloud aren't coding but have a massive impact on the code. Permissions. System Data Views. Configuration options. Here I focus on the most important ones that are crucial for Marketing Cloud developers."}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views",children:"System Data Views"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-contact-deletion",children:"Contact Deletion Process"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-mcc-integration-patterns",children:"MCC Integration Patterns"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-enhanced-send-log",children:"Enhanced Send Log"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-behavioral-triggers",children:"Behavioral Triggers"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-code-resource",children:"Power of Code Resources"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-appexchange-solutions",children:"AppExchange Solutions"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/config/sfmc-features-on-demand",children:"Features On Demand"})}),"\n"]}),"\n",(0,i.jsx)(c.z,{link:"./category/sfmc-config/",text:"Read about SFMC Config"}),"\n",(0,i.jsx)(s.h2,{id:"marketing-cloud-personalization",children:"Marketing Cloud Personalization"}),"\n",(0,i.jsx)(s.p,{children:"Salesforce Marketing Cloud Personalization (Interaction Studio) is a cross-channel real-time hyper-personalisation engine in Salesforce Marketing Cloud. Behind that cool-looking description is a powerful tool that lets your company adapt every point of contact to each person. Neat!"}),"\n",(0,i.jsx)(s.h3,{id:"mc-personalization-documentation",children:"MC Personalization Documentation"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/interaction-studio/mcp-catalog-architecture",children:"Catalog Objects Architeture"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/interaction-studio/mcp-open-time-email",children:"Open Time Email Template"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics",children:"Serverside Code Basics"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/interaction-studio/mcp-serverside-code-properties",children:"Serverside Code Properties"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/interaction-studio/mcp-serverside-code-context",children:"Serverside Code Context"})}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"mc-personalization-snippets",children:"MC Personalization Snippets"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",children:"Catalog ETL Metadata Viewer"})}),"\n"]}),"\n",(0,i.jsx)(c.z,{link:"./category/mc-personalization/",text:"Read about MC Personalization"}),"\n",(0,i.jsx)(s.h2,{id:"changes",children:"Changes"}),"\n",(0,i.jsxs)(s.p,{children:["I'm updating the docs ongoingly, so expect changes. You can track those by watching and starring the website's ",(0,i.jsx)(s.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl",children:"Github Repository"}),"."]})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},7271:(e,s,n)=>{n.d(s,{V:()=>o,z:()=>t});n(7294);var i=n(5893);const t=e=>{let{link:s,text:n,newTab:t=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:s,target:t?"_blank":"_self",children:n})})},o=e=>{let{linkLeft:s,textLeft:n,newTabLeft:t=!1,linkRight:o,textRight:c,newTabRight:l=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{class:"col col--12",children:[(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:s,target:t?"_blank":"_self",children:n}),(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:l?"_blank":"_self",children:c})]})})}},1872:(e,s,n)=>{n.d(s,{m:()=>o});n(7294);const i="leadText_qzwo";var t=n(5893);const o=e=>{let{content:s}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("p",{id:i,children:s})})}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>c});var i=n(7294);const t={},o=i.createContext(t);function c(e){const s=i.useContext(o);return i.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:c(e.components),i.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/343.68f3c34d.js b/assets/js/343.68f3c34d.js new file mode 100644 index 000000000..a5b70d7eb --- /dev/null +++ b/assets/js/343.68f3c34d.js @@ -0,0 +1,25811 @@ +"use strict"; +exports.id = 343; +exports.ids = [343]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** 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/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(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; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 33183: +/***/ ((__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-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +;// 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<unknown>} 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<string>} */ + 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<T>} 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<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + 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<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * 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<Extension>} 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<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | 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<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + 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<HtmlExtension>} 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<StackItem>} */ + 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<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + 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<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + 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<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + 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<Point, '_bufferIndex' | '_index'> | 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<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + 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> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + 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<Construct>} 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<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +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<Chunk>} */ + 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<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + 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<Code>} */ + 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 + * <a> + * <a\>b> + * <a b> + * <a)> + * 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 (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @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> + * ^ + * > | 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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <a\*a> + * ^ + * ``` + * + * @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<Code>} */ + 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<Code>} */ + 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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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 + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @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 `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @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 + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @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 + * > | <div/> + * ^ + * ``` + * + * @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 + * > | <x/> + * ^ + * ``` + * + * @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 + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @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 + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @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 + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @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 + * > | <!--xxx--> + * ^ + * ``` + * + * @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 + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | 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 + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @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 + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @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 + * > | <div> + * ^ + * | + * ``` + * + * @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<Code>} */ + 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<string, string>} + */ +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<Event>} */ + 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 + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @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<Event>} */ + 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<Code>} */ + 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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @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<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> 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 <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> 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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> 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 `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> 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 <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <![CDATA[>&<]]> 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 <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <!b> 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 <?b?> 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 <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> 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 </b> 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 `<x`, in opening tag name. + * + * ```markdown + * > | a <b> 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 <b> 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 <b c> 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 <b c> 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 <b c=d> 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 <b c="d"> 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 <b c=d> 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 <b c="d"> 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 <b c="d"> 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 <!--a + * ^ + * | b--> + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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<Chunk>} + */ + +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<Chunk>} */ + 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<Event>} events + * @returns {Array<Event>} + */ +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<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} 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<string, Handle>} 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<CompileContext, 'sliceSerialize'>} 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<CompileContext, 'sliceSerialize'>} 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<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(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 {<Kind extends Node>(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<Extension | Array<Extension>> | 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<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + 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<Event>} 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<StaticPhrasingContent>} */ + // @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<Extension | Array<Extension>>} 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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + 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( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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; + } +}; + + + +/***/ }), + +/***/ 52494: +/***/ ((__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 */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ k: () => (/* binding */ addEdgeMarkers), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33183); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_04fb0060_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 */ .Ys)(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( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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|<br\s*\/?>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_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_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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 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_04fb0060_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_04fb0060_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 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 = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_04fb0060_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("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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 */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + 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_04fb0060_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); + } + 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_04fb0060_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 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + 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 */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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, boundryNode) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + 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); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("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 */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_04fb0060_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, "\\)"); + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 74852: +/***/ ((__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__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(52494); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(33183); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + 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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_04fb0060_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_04fb0060_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) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_04fb0060_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 */ .c(clusterGraph)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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_04fb0060_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); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + 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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_04fb0060_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) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_04fb0060_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)); + const newEl = o.elem; + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_5ec2587c_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_04fb0060_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + await recursiveRender(elem, graph, diagramtype, id); +}; + + + +/***/ }), + +/***/ 63343: +/***/ ((__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_401768ef_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(60885); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(76365); +/* harmony import */ var _index_0980fb80_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(74852); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22424); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(39354); + + + + + + + + + + + + + + + + + + + +const SHAPE_STATE = "rect"; +const SHAPE_STATE_WITH_DESC = "rectWithTitle"; +const SHAPE_START = "start"; +const SHAPE_END = "end"; +const SHAPE_DIVIDER = "divider"; +const SHAPE_GROUP = "roundedWithTitle"; +const SHAPE_NOTE = "note"; +const SHAPE_NOTEGROUP = "noteGroup"; +const CSS_DIAGRAM = "statediagram"; +const CSS_STATE = "state"; +const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`; +const CSS_EDGE = "transition"; +const CSS_NOTE = "note"; +const CSS_NOTE_EDGE = "note-edge"; +const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`; +const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`; +const CSS_CLUSTER = "cluster"; +const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`; +const CSS_CLUSTER_ALT = "cluster-alt"; +const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`; +const PARENT = "parent"; +const NOTE = "note"; +const DOMID_STATE = "state"; +const DOMID_TYPE_SPACER = "----"; +const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`; +const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`; +const G_EDGE_STYLE = "fill:none"; +const G_EDGE_ARROWHEADSTYLE = "fill: #333"; +const G_EDGE_LABELPOS = "c"; +const G_EDGE_LABELTYPE = "text"; +const G_EDGE_THICKNESS = "normal"; +let nodeDb = {}; +let graphItemCount = 0; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + cnf[key]; + } +}; +const getClasses = function(text, diagramObj) { + diagramObj.db.extract(diagramObj.db.getRootDocV2()); + return diagramObj.db.getClasses(); +}; +function getClassesFromDbInfo(dbInfoItem) { + if (dbInfoItem === void 0 || dbInfoItem === null) { + return ""; + } else { + if (dbInfoItem.classes) { + return dbInfoItem.classes.join(" "); + } else { + return ""; + } + } +} +function stateDomId(itemId = "", counter = 0, type = "", typeSpacer = DOMID_TYPE_SPACER) { + const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : ""; + return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`; +} +const setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => { + const itemId = parsedItem.id; + const classStr = getClassesFromDbInfo(diagramStates[itemId]); + if (itemId !== "root") { + let shape = SHAPE_STATE; + if (parsedItem.start === true) { + shape = SHAPE_START; + } + if (parsedItem.start === false) { + shape = SHAPE_END; + } + if (parsedItem.type !== _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.D) { + shape = parsedItem.type; + } + if (!nodeDb[itemId]) { + nodeDb[itemId] = { + id: itemId, + shape, + description: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(itemId, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.c)()), + classes: `${classStr} ${CSS_DIAGRAM_STATE}` + }; + } + const newNode = nodeDb[itemId]; + if (parsedItem.description) { + if (Array.isArray(newNode.description)) { + newNode.shape = SHAPE_STATE_WITH_DESC; + newNode.description.push(parsedItem.description); + } else { + if (newNode.description.length > 0) { + newNode.shape = SHAPE_STATE_WITH_DESC; + if (newNode.description === itemId) { + newNode.description = [parsedItem.description]; + } else { + newNode.description = [newNode.description, parsedItem.description]; + } + } else { + newNode.shape = SHAPE_STATE; + newNode.description = parsedItem.description; + } + } + newNode.description = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeTextOrArray(newNode.description, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.c)()); + } + if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) { + newNode.shape = SHAPE_STATE; + } + if (!newNode.type && parsedItem.doc) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Setting cluster for ", itemId, getDir(parsedItem)); + newNode.type = "group"; + newNode.dir = getDir(parsedItem); + newNode.shape = parsedItem.type === _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.a ? SHAPE_DIVIDER : SHAPE_GROUP; + newNode.classes = newNode.classes + " " + CSS_DIAGRAM_CLUSTER + " " + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""); + } + const nodeData = { + labelStyle: "", + shape: newNode.shape, + labelText: newNode.description, + // typeof newNode.description === 'object' + // ? newNode.description[0] + // : newNode.description, + classes: newNode.classes, + style: "", + //styles.style, + id: itemId, + dir: newNode.dir, + domId: stateDomId(itemId, graphItemCount), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + nodeData.centerLabel = true; + if (parsedItem.note) { + const noteData = { + labelStyle: "", + shape: SHAPE_NOTE, + labelText: parsedItem.note.text, + classes: CSS_DIAGRAM_NOTE, + // useHtmlLabels: false, + style: "", + // styles.style, + id: itemId + NOTE_ID + "-" + graphItemCount, + domId: stateDomId(itemId, graphItemCount, NOTE), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + const groupData = { + labelStyle: "", + shape: SHAPE_NOTEGROUP, + labelText: parsedItem.note.text, + classes: newNode.classes, + style: "", + // styles.style, + id: itemId + PARENT_ID, + domId: stateDomId(itemId, graphItemCount, PARENT), + type: "group", + padding: 0 + //getConfig().flowchart.padding + }; + graphItemCount++; + const parentNodeId = itemId + PARENT_ID; + g.setNode(parentNodeId, groupData); + g.setNode(noteData.id, noteData); + g.setNode(itemId, nodeData); + g.setParent(itemId, parentNodeId); + g.setParent(noteData.id, parentNodeId); + let from = itemId; + let to = noteData.id; + if (parsedItem.note.position === "left of") { + from = noteData.id; + to = itemId; + } + g.setEdge(from, to, { + arrowhead: "none", + arrowType: "", + style: G_EDGE_STYLE, + labelStyle: "", + classes: CSS_EDGE_NOTE_EDGE, + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS + }); + } else { + g.setNode(itemId, nodeData); + } + } + if (parent && parent.id !== "root") { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Setting node ", itemId, " to be child of its parent ", parent.id); + g.setParent(itemId, parent.id); + } + if (parsedItem.doc) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Adding nodes children "); + setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag); + } +}; +const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("items", doc); + doc.forEach((item) => { + switch (item.stmt) { + case _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.b: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.D: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.S: + { + setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag); + setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag); + const edgeData = { + id: "edge" + graphItemCount, + arrowhead: "normal", + arrowTypeEnd: "arrow_barb", + style: G_EDGE_STYLE, + labelStyle: "", + label: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(item.description, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.c)()), + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS, + classes: CSS_EDGE + }; + g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount); + graphItemCount++; + } + break; + } + }); +}; +const getDir = (parsedItem, defaultDir = _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.c) => { + let dir = defaultDir; + if (parsedItem.doc) { + for (let i = 0; i < parsedItem.doc.length; i++) { + const parsedItemDoc = parsedItem.doc[i]; + if (parsedItemDoc.stmt === "dir") { + dir = parsedItemDoc.value; + } + } + } + return dir; +}; +const draw = async function(text, id, _version, diag) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Drawing state diagram (v2)", id); + nodeDb = {}; + diag.db.getDirection(); + const { securityLevel, state: conf } = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.c)(); + const nodeSpacing = conf.nodeSpacing || 50; + const rankSpacing = conf.rankSpacing || 50; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + diag.db.extract(diag.db.getRootDocV2()); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + const diagramStates = diag.db.getStates(); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: getDir(diag.db.getRootDocV2()), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_0980fb80_js__WEBPACK_IMPORTED_MODULE_9__.r)(element, g, ["barb"], CSS_DIAGRAM, id); + const padding = 8; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.u.insertTitle(svg, "statediagramTitleText", conf.titleTopMargin, diag.db.getDiagramTitle()); + const bounds = svg.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + svg.attr("class", CSS_DIAGRAM); + const svgBounds = svg.node().getBBox(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.i)(svg, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(`viewBox ${vBox}`); + svg.attr("viewBox", vBox); + const labels = document.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = document.createElementNS("http://www.w3.org/2000/svg", SHAPE_STATE); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } +}; +const renderer = { + setConf, + getClasses, + draw +}; +const diagram = { + parser: _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_401768ef_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 60885: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76365); + +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, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.G)(), + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.t)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_0__.r +}; +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/364.c53c5088.js b/assets/js/364.c53c5088.js new file mode 100644 index 000000000..02922d268 --- /dev/null +++ b/assets/js/364.c53c5088.js @@ -0,0 +1,10824 @@ +"use strict"; +exports.id = 364; +exports.ids = [364]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 35364: +/***/ ((__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_9dd40fb9_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(42924); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76365); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + + +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 */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.v)(classDef.type) + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().class; + idCache = {}; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering diagram " + text); + const securityLevel = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Org height: " + node.height); + } + const relations = diagObj.db.getRelations(); + relations.forEach(function(relation) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info( + "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_04fb0060_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 */ .bK)(g); + g.nodes().forEach(function(v) { + if (v !== void 0 && g.node(v) !== void 0) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`viewBox ${vBox}`); + diagram2.attr("viewBox", vBox); +}; +const renderer = { + draw +}; +const diagram = { + parser: _styles_9dd40fb9_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_9dd40fb9_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_9dd40fb9_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_9dd40fb9_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 42924: +/***/ ((__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__(64218); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + this.parseMember(sanitizedInput); + } + getDisplayDetails() { + let displayText = this.visibility + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.id); + if (this.memberType === "method") { + displayText += `(${(0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.parameters.trim())})`; + if (this.returnType) { + displayText += " : " + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.v)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const splitClassNameAndType = function(_id) { + const id = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const { className, type } = splitClassNameAndType(id); + if (Object.hasOwn(classes, className)) { + return; + } + const name = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relation.relationTitle2 = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const config = (0,_mermaid_04fb0060_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_04fb0060_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 */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.r, + 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/369b6fa3.e8674569.js b/assets/js/369b6fa3.2659af38.js similarity index 93% rename from assets/js/369b6fa3.e8674569.js rename to assets/js/369b6fa3.2659af38.js index 671fc02a3..1a11ca606 100644 --- a/assets/js/369b6fa3.e8674569.js +++ b/assets/js/369b6fa3.2659af38.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3664],{4214:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud Personalization","permalink":"/sites/tags/marketing-cloud-personalization","allTagsPath":"/sites/tags","count":1,"items":[{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/mc-personalization-ideas"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3664],{4214:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud Personalization","permalink":"/sites/tags/marketing-cloud-personalization","allTagsPath":"/sites/tags","count":1,"items":[{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/mc-personalization-ideas"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/3720c009.465c883a.js b/assets/js/3720c009.465c883a.js deleted file mode 100644 index 63f7edd9b..000000000 --- a/assets/js/3720c009.465c883a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3751],{6495:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var l=a(7294),n=a(6010),r=a(7325);const c=()=>(0,r.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var s=a(9488),m=a(3702),g=a(241),o=a(3852);const u={tag:"tag_Nnez"};function i(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:u.tag},l.createElement(o.Z,e))))),l.createElement("hr",null))}function E(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(i,{key:e.letter,letterEntry:e}))))}var p=a(3647);function h(e){let{tags:t}=e;const a=c();return l.createElement(s.FG,{className:(0,n.Z)(m.k.wrapper.docsPages,m.k.page.docsTagsListPage)},l.createElement(s.d,{title:a}),l.createElement(p.Z,{tag:"doc_tags_list"}),l.createElement(g.Z,null,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement("main",{className:"col col--8 col--offset-2"},l.createElement("h1",null,a),l.createElement(E,{tags:t}))))))}},3852:(e,t,a)=>{a.d(t,{Z:()=>s});var l=a(7294),n=a(6010),r=a(3699);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function s(e){let{permalink:t,label:a,count:s}=e;return l.createElement(r.Z,{href:t,className:(0,n.Z)(c.tag,s?c.tagWithCount:c.tagRegular)},a,s&&l.createElement("span",null,s))}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.5613754b.js b/assets/js/3720c009.5613754b.js new file mode 100644 index 000000000..7121658a0 --- /dev/null +++ b/assets/js/3720c009.5613754b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3751],{6495:(t,e,a)=>{a.r(e),a.d(e,{default:()=>p});a(7294);var s=a(512),r=a(9488),l=a(3702),n=a(7325);const c=()=>(0,n.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(3852),g=a(3899);const o={tag:"tag_Nnez"};var u=a(5893);function h(t){let{letterEntry:e}=t;return(0,u.jsxs)("article",{children:[(0,u.jsx)(g.Z,{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:o.tag,children:(0,u.jsx)(i.Z,{...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(3647);function m(t){let{title:e}=t;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.d,{title:e}),(0,u.jsx)(j.Z,{tag:"doc_tags_list"})]})}function x(t){let{tags:e,title:a}=t;return(0,u.jsx)(r.FG,{className:(0,s.Z)(l.k.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)(g.Z,{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})]})}},3852:(t,e,a)=>{a.d(e,{Z:()=>c});a(7294);var s=a(512),r=a(4791);const l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var n=a(5893);function c(t){let{permalink:e,label:a,count:c}=t;return(0,n.jsxs)(r.Z,{href:e,className:(0,s.Z)(l.tag,c?l.tagWithCount:l.tagRegular),children:[a,c&&(0,n.jsx)("span",{children:c})]})}}}]); \ No newline at end of file diff --git a/assets/js/3b360413.da161dd4.js b/assets/js/3b360413.a59b8a66.js similarity index 95% rename from assets/js/3b360413.da161dd4.js rename to assets/js/3b360413.a59b8a66.js index 9be22ba3a..cd65bbd7a 100644 --- a/assets/js/3b360413.da161dd4.js +++ b/assets/js/3b360413.a59b8a66.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5831],{9961:e=>{e.exports=JSON.parse('{"label":"Automation","permalink":"/docs/tags/automation","allTagsPath":"/docs/tags","count":5,"items":[{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5831],{9961:e=>{e.exports=JSON.parse('{"label":"Automation","permalink":"/docs/tags/automation","allTagsPath":"/docs/tags","count":5,"items":[{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/3b7e54b4.19f43cb3.js b/assets/js/3b7e54b4.ee78072b.js similarity index 95% rename from assets/js/3b7e54b4.19f43cb3.js rename to assets/js/3b7e54b4.ee78072b.js index b817c1849..2a2abeb5a 100644 --- a/assets/js/3b7e54b4.19f43cb3.js +++ b/assets/js/3b7e54b4.ee78072b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8847],{9367:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud","permalink":"/sites/tags/marketing-cloud","allTagsPath":"/sites/tags","count":5,"items":[{"id":"faq/how-to-get-sfmc-hands-on-experience","title":"How to get hands-on experience with SFMC","description":"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?","permalink":"/sites/faq/how-to-get-sfmc-hands-on-experience"},{"id":"faq/how-to-get-sf-certification-vouchers","title":"How to get SF Certification vouchers?","description":"Salesforce Certifications. What, why and how (you can pay less).","permalink":"/sites/faq/how-to-get-sf-certification-vouchers"},{"id":"ideas/marketing-cloud-ideas","title":"Marketing Cloud Ideas","description":"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/marketing-cloud-ideas"},{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/mc-personalization-ideas"},{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC.","permalink":"/sites/newsletter"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8847],{9367:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud","permalink":"/sites/tags/marketing-cloud","allTagsPath":"/sites/tags","count":5,"items":[{"id":"faq/how-to-get-sfmc-hands-on-experience","title":"How to get hands-on experience with SFMC","description":"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?","permalink":"/sites/faq/how-to-get-sfmc-hands-on-experience"},{"id":"faq/how-to-get-sf-certification-vouchers","title":"How to get SF Certification vouchers?","description":"Salesforce Certifications. What, why and how (you can pay less).","permalink":"/sites/faq/how-to-get-sf-certification-vouchers"},{"id":"ideas/marketing-cloud-ideas","title":"Marketing Cloud Ideas","description":"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/marketing-cloud-ideas"},{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/mc-personalization-ideas"},{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC.","permalink":"/sites/newsletter"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/407fe916.9f16b5e1.js b/assets/js/407fe916.9f16b5e1.js deleted file mode 100644 index 14d5ea3bf..000000000 --- a/assets/js/407fe916.9f16b5e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1099],{4137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,i=function(e,t){if(null==e)return{};var a,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=u(a),m=i,h=c["".concat(s,".").concat(m)]||c[m]||p[m]||o;return a?n.createElement(h,r(r({ref:t},d),{},{components:a})):n.createElement(h,r({ref:t},d))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:i,r[1]=l;for(var u=2;u<o;u++)r[u]=a[u];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},425:(e,t,a)=>{a.d(t,{Z:()=>r});var n=a(7294),i=a(6010);const o={tabItem:"tabItem_Ymn6"};function r(e){let{children:t,hidden:a,className:r}=e;return n.createElement("div",{role:"tabpanel",className:(0,i.Z)(o.tabItem,r),hidden:a},t)}},3992:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),i=a(7294),o=a(6010),r=a(2957),l=a(6550),s=a(5238),u=a(3609),d=a(2560);function c(e){return function(e){return i.Children.map(e,(e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}function p(e){const{values:t,children:a}=e;return(0,i.useMemo)((()=>{const e=t??c(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,s._X)(o),(0,i.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function g(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=p(e),[r,l]=(0,i.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[s,u]=h({queryString:a,groupId:n}),[c,g]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,d.Nk)(a);return[n,(0,i.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),f=(()=>{const e=s??c;return m({value:e,tabValues:o})?e:null})();(0,i.useLayoutEffect)((()=>{f&&l(f)}),[f]);return{selectedValue:r,selectValue:(0,i.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),g(e)}),[u,g,o]),tabValues:o}}var f=a(1048);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:t,block:a,selectedValue:l,selectValue:s,tabValues:u}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),p=e=>{const t=e.currentTarget,a=d.indexOf(t),n=u[a].value;n!==l&&(c(t),s(n))},m=e=>{let t=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{const a=d.indexOf(e.currentTarget)+1;t=d[a]??d[0];break}case"ArrowLeft":{const a=d.indexOf(e.currentTarget)-1;t=d[a]??d[d.length-1];break}}t?.focus()};return i.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:r}=e;return i.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>d.push(e),onKeyDown:m,onClick:p},r,{className:(0,o.Z)("tabs__item",y.tabItem,r?.className,{"tabs__item--active":l===t})}),a??t)})))}function k(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return i.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function v(e){const t=g(e);return i.createElement("div",{className:(0,o.Z)("tabs-container",y.tabList)},i.createElement(b,(0,n.Z)({},e,t)),i.createElement(k,(0,n.Z)({},e,t)))}function w(e){const t=(0,f.Z)();return i.createElement(v,(0,n.Z)({key:String(t)},e))}},1872:(e,t,a)=>{a.d(t,{m:()=>o});var n=a(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:i},t))}},2637:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>d,toc:()=>p});var n=a(7462),i=(a(7294),a(4137)),o=a(3992),r=a(425),l=a(1872);const s={id:"tailor-with-data",title:"Tailor the experience with data logic",sidebar_label:"Tailor with Data",description:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",image:"img/og/og-image-tailor-with-data.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},u=void 0,d={unversionedId:"js/snippets/tailor-with-data",id:"js/snippets/tailor-with-data",title:"Tailor the experience with data logic",description:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",source:"@site/docs/js/snippets/tailor-with-data.mdx",sourceDirName:"js/snippets",slug:"/js/snippets/tailor-with-data",permalink:"/docs/js/snippets/tailor-with-data",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/snippets/tailor-with-data.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Eloqua",permalink:"/docs/tags/eloqua"},{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"tailor-with-data",title:"Tailor the experience with data logic",sidebar_label:"Tailor with Data",description:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",image:"img/og/og-image-tailor-with-data.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},sidebar:"snippets",previous:{title:"JS Snippets",permalink:"/docs/category/js-snippets"},next:{title:"Engage with Countdown",permalink:"/docs/js/snippets/engage-with-countdown"}},c={},p=[{value:"Outline",id:"outline",level:2},{value:"Leverage the data",id:"leverage-the-data",level:2},{value:"Change the structure of the landing page",id:"change-the-structure-of-the-landing-page",level:3},{value:"Create a genuinely dynamic form",id:"create-a-genuinely-dynamic-form",level:3},{value:"Enrich your data",id:"enrich-your-data",level:3},{value:"Script your solution",id:"script-your-solution",level:2},{value:"Hiding elements on the website",id:"hiding-elements-on-the-website",level:3},{value:"Changing elements on the website",id:"changing-elements-on-the-website",level:3},{value:"Create conditional logic",id:"create-conditional-logic",level:2},{value:"Possibilities are endless.",id:"possibilities-are-endless",level:3}],m={toc:p},h="wrapper";function g(e){let{components:t,...a}=e;return(0,i.kt)(h,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(l.m,{content:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"outline"},"Outline"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("a",{parentName:"li",href:"#leverage-the-data"},"Review the use cases possible thanks to the tailored data logic")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("a",{parentName:"li",href:"#script-your-solution"},"Check easy to implement script examples")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("a",{parentName:"li",href:"#create-conditional-logic"},"Create personalisation fueled conditional user flows"))),(0,i.kt)("h2",{id:"leverage-the-data"},"Leverage the data"),(0,i.kt)("p",null,"Most Marketing Automation tools allow you to use the contact and account data for personalisation. Are you inserting a user-specific value from a data model to landing page or email? Creating custom content tailored to the user? Easy and simple. ",(0,i.kt)("a",{parentName:"p",href:"https://www.oracle.com/marketingcloud/products/marketing-automation/",title:"Oracle Eloqua Marketing Automation Platform"},"Eloqua"),"'s ",(0,i.kt)("a",{parentName:"p",href:"https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/FieldMerges/FieldMerges.htm",title:"Field Merge Documentation"},"Field Merges")," or ",(0,i.kt)("a",{parentName:"p",href:"https://www.salesforce.com/eu/products/marketing-cloud/overview/",title:"Salesforce Marketing Cloud Platform"},"Marketing Cloud"),"'s personalisation strings. But you can do so much more!"),(0,i.kt)("h3",{id:"change-the-structure-of-the-landing-page"},"Change the structure of the landing page"),(0,i.kt)("p",null,"Part of your subscription centre should be visible only to your clients? Instead of creating and managing two separate pages, you can use personalisation to check whether the visitor has any license and unhide product-related data & subscription section."),(0,i.kt)("h3",{id:"create-a-genuinely-dynamic-form"},"Create a genuinely dynamic form"),(0,i.kt)("p",null,"Not keen on asking your customers, again and again, the same questions in your content form? Use personalisation to hide form fields that won't give you new knowledge. The shorter the form, the better."),(0,i.kt)("h3",{id:"enrich-your-data"},"Enrich your data"),(0,i.kt)("p",null,"You got multi picklist storing information on topics that are interesting to your customers? Want to use whitepaper download form to add such data point? Sure, all Marketing Automation Platforms have form processing that will be able to append such value. But unfortunately, in most, you won't be able to check whether it will result in a duplicate data point. You guessed it, personalisation with a simple script can fix it."),(0,i.kt)("h2",{id:"script-your-solution"},"Script your solution"),(0,i.kt)("p",null,"Time to create a script that will solve the problems mentioned above. Firstly, you will need to pull from your data model."),(0,i.kt)(o.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"sfmc",mdxType:"TabItem"},(0,i.kt)("p",null,"For Marketing Cloud, the easiest way is to use the personalisation string. The code is straightforward:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html"},"<ctrl:field name=ProfileAttributeName />\n")),(0,i.kt)("p",null,"The only thing you need is the name of the Profile Attribute or Data Extension field. It gets a bit more elaborate if you want to leverage other sources, but still viable. You can use the Lookup function for non-sendable Data Extensions. You can even dig into Salesforce Objects with a bit of AMPScript.")),(0,i.kt)(r.Z,{value:"eloqua",mdxType:"TabItem"},(0,i.kt)("p",null,"For Eloqua, the easiest way is to use the Field Merge. The code is straightforward:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html"},"<span class=eloquaemail>\u200bField_Merge_Name1\u200b</span>\n")),(0,i.kt)("p",null,"The only thing you need is the Field Merge name. Unfortunately, you can not add the asset name, as Eloqua is using in the code the automatically created HTML name."),(0,i.kt)("p",null,"In most cases it is very similar to the original Field Merge name, in some - like Field Merge created by copying another one - can be a surprise. To be sure you have the correct name I recommended creating an empty HTML landing page and drag and drop the Field Merge onto HTML editor. It will add whole needed code for you."))),(0,i.kt)("p",null,"To create a script that will allow for three use cases mentioned in the first part of the post, we need one more thing - an ",(0,i.kt)("inlineCode",{parentName:"p"},"id")," attribute. Some elements will already have it (for example, in Eloqua each form field exists in separate div element: ",(0,i.kt)("inlineCode",{parentName:"p"},"<div id='formElement1' ...>"),"). For others, you will have to add it to the HTML manually."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You are not limited to the ",(0,i.kt)("inlineCode",{parentName:"p"},"id")," attribute. Leverage any attribute and capture it with ",(0,i.kt)("a",{parentName:"p",href:"/docs/js/js-dom"},"DOM selectors"),", like ",(0,i.kt)("inlineCode",{parentName:"p"},"document.querySelector()")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"document.querySelectorAll()"),". For example, capturing ",(0,i.kt)("inlineCode",{parentName:"p"},"class")," is great to change multiple related parts of the website at once.")),(0,i.kt)("p",null,"With personalisation code and value of the ",(0,i.kt)("inlineCode",{parentName:"p"},"id")," attribute at hand, we can start the (short) scripting."),(0,i.kt)("h3",{id:"hiding-elements-on-the-website"},"Hiding elements on the website"),(0,i.kt)(o.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"sfmc",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:"title=\"Hide element with id='idName' if viewers EmailOptedIn attribute has value 'True'\"",title:'"Hide',element:!0,with:!0,id:"'idName'",if:!0,viewers:!0,EmailOptedIn:!0,attribute:!0,has:!0,value:!0,"'True'\"":!0},"<script>\n window.addEventListener('load', () => { // 1.\n if ('<ctrl:field name=EmailOptedIn />' === 'True') { // 2.\n document.querySelector('#idValue').display = 'none'; // 3.\n };\n };\n<\/script>\n"))),(0,i.kt)(r.Z,{value:"eloqua",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:"title=\"Hide element with id='idName' if viewers EmailOptedIn field has value 'True'\"",title:'"Hide',element:!0,with:!0,id:"'idName'",if:!0,viewers:!0,EmailOptedIn:!0,field:!0,has:!0,value:!0,"'True'\"":!0},"<script>\n window.addEventListener('load', () => { // 1.\n if ('<span class=eloquaemail>EmailOptedIn1</span>' === 'True') { //2.\n document.querySelector('#idValue').display = 'none'; // 3.\n };\n };\n<\/script>\n")))),(0,i.kt)("p",null,"Above script has three important lines that deserve some explanation."),(0,i.kt)("p",null,"First one uses ",(0,i.kt)("a",{parentName:"p",href:"/docs/js/js-dom#addeventlistener"},"Event Listener")," to launch the logic only after the whole page loaded. It is essential, as it guarantees that the browser already rendered the website element you want to hide."),(0,i.kt)("p",null,"Next is the ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement. It evaluates the data model value received via personalisation (left side of ==) with another value we choose (right side of ==). In this case, it checks whether Email Opted In for a particular user is set to True (names and values may differ in your data model)."),(0,i.kt)("p",null,"The third line looks for an HTML element with id equal to ",(0,i.kt)("inlineCode",{parentName:"p"},"'idValue'")," and hides it from the user."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can adapt this script to do almost anything. Once you have your element selected with ",(0,i.kt)("inlineCode",{parentName:"p"},"querySelector")," you can programmatically ",(0,i.kt)("a",{parentName:"p",href:"/docs/js/js-dom#changing-attributes"},"change its value"),", add or remove a class from it to impact the CSS applied or even create new elements around it.")),(0,i.kt)("p",null,"With this script, you can both modify the structure of your landing page and alter the form fields (or even just form field options) visible for the user. Hide some elements, show other, change the style of a web element to make it more prominent on the website. But that's not all!"),(0,i.kt)("h3",{id:"changing-elements-on-the-website"},"Changing elements on the website"),(0,i.kt)("p",null,"For our data enrichment use case, we will need to alter the script slightly."),(0,i.kt)(o.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"sfmc",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:"title=\"Change value of a hidden form field if Profile Attribute value includes 'Tax'\"",title:'"Change',value:!0,of:!0,a:!0,hidden:!0,form:!0,field:!0,if:!0,Profile:!0,Attribute:!0,includes:!0,"'Tax'\"":!0},"<script>\n window.addEventListener('load', () => { // 1.\n const regexSearchValue = /Tax/; // 2.\n if (regexSearchValue.test('<ctrl:field name=Interests />')) { // 3.\n document.querySelector('#alreadyInterested').value = 'True'; // 4.\n };\n };\n<\/script>\n"))),(0,i.kt)(r.Z,{value:"eloqua",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:"title=\"Change value of a hidden form field if Field Merge value includes 'Tax'\"",title:'"Change',value:!0,of:!0,a:!0,hidden:!0,form:!0,field:!0,if:!0,Field:!0,Merge:!0,includes:!0,"'Tax'\"":!0},"<script>\n window.addEventListener('load', () => { // 1.\n const regexSearchValue = /Tax/; // 2.\n if (regexSearchValue.test('<span class=eloquaemail>Interests1</span>')) { // 3.\n document.querySelector('#alreadyInterested').value = 'True'; // 4.\n };\n };\n<\/script>\n")))),(0,i.kt)("p",null,"In this scenario, we have a multi picklist field ",(0,i.kt)("inlineCode",{parentName:"p"},"Interests")," that captures what fascinates specific customer. If he is captivated by more than one topic, the names are semicolon-separated. A nice marketing tactic is to enrich this list each time the customer engages with something directly related to a particular topic. For example, downloads your new whitepaper."),(0,i.kt)("p",null,"In most Marketing Automation Platforms, it is straightforward to append a value to a column. Simple adding, however, leads to a (quite big) possibility of having duplicates. And this is neither good from the data quality perspective nor field length compliance."),(0,i.kt)("p",null,"So how to use the above script to enrich your data cleanly? We will need a hidden form field inside the whitepaper download form. In the HTML look for (or create) hidden field input (",(0,i.kt)("inlineCode",{parentName:"p"},"<input id='alreadyInterested' type='hidden' ...>"),"). The ",(0,i.kt)("inlineCode",{parentName:"p"},"id")," attribute will be useful again."),(0,i.kt)("p",null,"You already know the first line from the previous section. The new things come next. We declare value we want to check in our data model picklist. In this example, we will test whether the user is already interested in Tax topic. The ",(0,i.kt)("inlineCode",{parentName:"p"},"/")," before and after the word are special characters used for a ",(0,i.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions",title:"MDN Documentation on Regular_Expressions"},"regular expression"),"."),(0,i.kt)("p",null,"The third line is the fastest way to check whether the declared value is already in the ",(0,i.kt)("inlineCode",{parentName:"p"},"Interests")," field."),(0,i.kt)("p",null,"Finally, in case of the value already being in the multi picklist, we put True inside the hidden form field. It enables us to enforce on form processing to append new interest conditionally - only if the hidden field is blank in the submission data."),(0,i.kt)("h2",{id:"create-conditional-logic"},"Create conditional logic"),(0,i.kt)("p",null,"Simple manipulation of visibility and values on your landing page is just beginning. You can get even more out of scripted-backed personalisations and take control over user & data flows."),(0,i.kt)("p",null,"Looking for an excellent way to tell your Google Analytics whether the user just downloaded a whitepaper or did he also wanted to receive product presentation on top of that? Not keen on creating two mirror-like Thank You pages with different conversion script? Sure!"),(0,i.kt)(o.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"sfmc",mdxType:"TabItem"},(0,i.kt)("p",null,"Your form processing page should append date stamp to a data model field in case of the user becoming a lead (asking for a product presentation). This data, apart from being a great source of knowledge for your lead reporting and data processing trigger, will be handy for this solution."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html"},"<script>\n const leadCreationDate = '<ctrl:field name=leadCreationDate />';\n if (Date.now() - new Date(leadCreationDate) < 93600000) {\n dataLayer.push({\n // Your Lead conversion dataLayer model\n });\n } else {\n dataLayer.push({\n // Your Whitepaper conversion dataLayer model\n });\n }\n<\/script>\n"))),(0,i.kt)(r.Z,{value:"eloqua",mdxType:"TabItem"},(0,i.kt)("p",null,"Your form should have a processing step that appends date stamp to a data model field in case of the user becoming a lead (asking for a product presentation). This data, apart from being a great source of knowledge for your lead reporting and data processing trigger, will be handy for this solution."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html"},"<script>\n const leadCreationDate = '<span class=eloquaemail>LeadCreationTriggerDate1</span>';\n if (Date.now() - new Date(leadCreationDate) < 93600000) {\n dataLayer.push({\n // Your Lead conversion dataLayer model\n });\n } else {\n dataLayer.push({\n // Your Whitepaper conversion dataLayer model\n });\n }\n<\/script>\n")))),(0,i.kt)("p",null,"Why? Because once you have this script on your Thank You page, you can check how distant in the past the personalised date is. And if it is within minutes, you can be pretty sure the user just became your lead. Which tells the script to push the lead conversion data layer instead of the whitepaper data layer. Simple and quick."),(0,i.kt)("p",null,"Remember to take into consideration the difference between local time and server time, which might play a role depending on the Marketing Automation Platform and configuration."),(0,i.kt)("h3",{id:"possibilities-are-endless"},"Possibilities are endless."),(0,i.kt)("p",null,"Want to be sure only recognised users will enter your subscription centre?"),(0,i.kt)(o.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],mdxType:"Tabs"},(0,i.kt)(r.Z,{value:"sfmc",mdxType:"TabItem"},(0,i.kt)("p",null,"Add email address or contact key personalisation. If it is empty, it means Marketing Cloud did not recognise this user. JavaScript can automatically redirect him to your subscription centre entry form that will take care of authorization."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"}," if ('<ctrl:field name=\"Email Address\" />' == '') {\n window.location.replace(\u200b'https://redirect.here')\n}\n")),(0,i.kt)("p",null,"Want to double-check by querying the Salesforce Core? Add API call within the condition. You can also push some information from a data extension, or profile attributes to an external page. Personalise that data and use JavaScript to append it to redirect link as a query string or send it as a payload within POST call. Imagination is the only limit.")),(0,i.kt)(r.Z,{value:"eloqua",mdxType:"TabItem"},(0,i.kt)("p",null,"Add email address Field Merge. If it is empty, it means Eloqua did not recognise this user. JavaScript can automatically redirect him to your subscription centre entry form that will take care of authorization."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"if ('<span class=eloquaemail>\u200bEmailAddress\u200b</span>' == '') {\n window.location.replace(\u200b'https://redirect.here')\n}\n")),(0,i.kt)("p",null,"Want to push some information from a data model to an external page? Field Merge that data and use JavaScript to append it to redirect link as a query string."),(0,i.kt)("p",null,"You can get even more power with using dynamic content (perfect for simplifying javascript logic) or web data lookups (allows you to leverage email group subscription, shared list audience \u203a even on external websites). Imagination is the only limit."))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/407fe916.a95b4e8a.js b/assets/js/407fe916.a95b4e8a.js new file mode 100644 index 000000000..a087a651a --- /dev/null +++ b/assets/js/407fe916.a95b4e8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1099],{5124:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var n=a(5893),i=a(1151),r=a(3992),o=a(425),s=a(1872);const l={id:"tailor-with-data",title:"Tailor the experience with data logic",sidebar_label:"Tailor with Data",description:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",image:"img/og/og-image-tailor-with-data.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},d=void 0,c={id:"js/snippets/tailor-with-data",title:"Tailor the experience with data logic",description:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",source:"@site/docs/js/snippets/tailor-with-data.mdx",sourceDirName:"js/snippets",slug:"/js/snippets/tailor-with-data",permalink:"/docs/js/snippets/tailor-with-data",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/snippets/tailor-with-data.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Eloqua",permalink:"/docs/tags/eloqua"},{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"tailor-with-data",title:"Tailor the experience with data logic",sidebar_label:"Tailor with Data",description:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.",image:"img/og/og-image-tailor-with-data.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},sidebar:"snippets",previous:{title:"JS Snippets",permalink:"/docs/category/js-snippets"},next:{title:"Engage with Countdown",permalink:"/docs/js/snippets/engage-with-countdown"}},u={},h=[{value:"Outline",id:"outline",level:2},{value:"Leverage the data",id:"leverage-the-data",level:2},{value:"Change the structure of the landing page",id:"change-the-structure-of-the-landing-page",level:3},{value:"Create a genuinely dynamic form",id:"create-a-genuinely-dynamic-form",level:3},{value:"Enrich your data",id:"enrich-your-data",level:3},{value:"Script your solution",id:"script-your-solution",level:2},{value:"Hiding elements on the website",id:"hiding-elements-on-the-website",level:3},{value:"Changing elements on the website",id:"changing-elements-on-the-website",level:3},{value:"Create conditional logic",id:"create-conditional-logic",level:2},{value:"Possibilities are endless.",id:"possibilities-are-endless",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.m,{content:"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows."}),"\n",(0,n.jsx)(t.h2,{id:"outline",children:"Outline"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"#leverage-the-data",children:"Review the use cases possible thanks to the tailored data logic"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"#script-your-solution",children:"Check easy to implement script examples"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"#create-conditional-logic",children:"Create personalisation fueled conditional user flows"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"leverage-the-data",children:"Leverage the data"}),"\n",(0,n.jsxs)(t.p,{children:["Most Marketing Automation tools allow you to use the contact and account data for personalisation. Are you inserting a user-specific value from a data model to landing page or email? Creating custom content tailored to the user? Easy and simple. ",(0,n.jsx)(t.a,{href:"https://www.oracle.com/marketingcloud/products/marketing-automation/",title:"Oracle Eloqua Marketing Automation Platform",children:"Eloqua"}),"'s ",(0,n.jsx)(t.a,{href:"https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/FieldMerges/FieldMerges.htm",title:"Field Merge Documentation",children:"Field Merges"})," or ",(0,n.jsx)(t.a,{href:"https://www.salesforce.com/eu/products/marketing-cloud/overview/",title:"Salesforce Marketing Cloud Platform",children:"Marketing Cloud"}),"'s personalisation strings. But you can do so much more!"]}),"\n",(0,n.jsx)(t.h3,{id:"change-the-structure-of-the-landing-page",children:"Change the structure of the landing page"}),"\n",(0,n.jsx)(t.p,{children:"Part of your subscription centre should be visible only to your clients? Instead of creating and managing two separate pages, you can use personalisation to check whether the visitor has any license and unhide product-related data & subscription section."}),"\n",(0,n.jsx)(t.h3,{id:"create-a-genuinely-dynamic-form",children:"Create a genuinely dynamic form"}),"\n",(0,n.jsx)(t.p,{children:"Not keen on asking your customers, again and again, the same questions in your content form? Use personalisation to hide form fields that won't give you new knowledge. The shorter the form, the better."}),"\n",(0,n.jsx)(t.h3,{id:"enrich-your-data",children:"Enrich your data"}),"\n",(0,n.jsx)(t.p,{children:"You got multi picklist storing information on topics that are interesting to your customers? Want to use whitepaper download form to add such data point? Sure, all Marketing Automation Platforms have form processing that will be able to append such value. But unfortunately, in most, you won't be able to check whether it will result in a duplicate data point. You guessed it, personalisation with a simple script can fix it."}),"\n",(0,n.jsx)(t.h2,{id:"script-your-solution",children:"Script your solution"}),"\n",(0,n.jsx)(t.p,{children:"Time to create a script that will solve the problems mentioned above. Firstly, you will need to pull from your data model."}),"\n",(0,n.jsxs)(r.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],children:[(0,n.jsxs)(o.Z,{value:"sfmc",children:[(0,n.jsx)(t.p,{children:"For Marketing Cloud, the easiest way is to use the personalisation string. The code is straightforward:"}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:"<ctrl:field name=ProfileAttributeName />\n"})}),(0,n.jsx)(t.p,{children:"The only thing you need is the name of the Profile Attribute or Data Extension field. It gets a bit more elaborate if you want to leverage other sources, but still viable. You can use the Lookup function for non-sendable Data Extensions. You can even dig into Salesforce Objects with a bit of AMPScript."})]}),(0,n.jsxs)(o.Z,{value:"eloqua",children:[(0,n.jsx)(t.p,{children:"For Eloqua, the easiest way is to use the Field Merge. The code is straightforward:"}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:"<span class=eloquaemail>\u200bField_Merge_Name1\u200b</span>\n"})}),(0,n.jsx)(t.p,{children:"The only thing you need is the Field Merge name. Unfortunately, you can not add the asset name, as Eloqua is using in the code the automatically created HTML name."}),(0,n.jsx)(t.p,{children:"In most cases it is very similar to the original Field Merge name, in some - like Field Merge created by copying another one - can be a surprise. To be sure you have the correct name I recommended creating an empty HTML landing page and drag and drop the Field Merge onto HTML editor. It will add whole needed code for you."})]})]}),"\n",(0,n.jsxs)(t.p,{children:["To create a script that will allow for three use cases mentioned in the first part of the post, we need one more thing - an ",(0,n.jsx)(t.code,{children:"id"})," attribute. Some elements will already have it (for example, in Eloqua each form field exists in separate div element: ",(0,n.jsx)(t.code,{children:"<div id='formElement1' ...>"}),"). For others, you will have to add it to the HTML manually."]}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(t.p,{children:["You are not limited to the ",(0,n.jsx)(t.code,{children:"id"})," attribute. Leverage any attribute and capture it with ",(0,n.jsx)(t.a,{href:"/docs/js/js-dom",children:"DOM selectors"}),", like ",(0,n.jsx)(t.code,{children:"document.querySelector()"})," or ",(0,n.jsx)(t.code,{children:"document.querySelectorAll()"}),". For example, capturing ",(0,n.jsx)(t.code,{children:"class"})," is great to change multiple related parts of the website at once."]})}),"\n",(0,n.jsxs)(t.p,{children:["With personalisation code and value of the ",(0,n.jsx)(t.code,{children:"id"})," attribute at hand, we can start the (short) scripting."]}),"\n",(0,n.jsx)(t.h3,{id:"hiding-elements-on-the-website",children:"Hiding elements on the website"}),"\n",(0,n.jsxs)(r.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],children:[(0,n.jsx)(o.Z,{value:"sfmc",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:"title=\"Hide element with id='idName' if viewers EmailOptedIn attribute has value 'True'\"",children:"<script>\n window.addEventListener('load', () => { // 1.\n if ('<ctrl:field name=EmailOptedIn />' === 'True') { // 2.\n document.querySelector('#idValue').display = 'none'; // 3.\n };\n };\n<\/script>\n"})})}),(0,n.jsx)(o.Z,{value:"eloqua",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:"title=\"Hide element with id='idName' if viewers EmailOptedIn field has value 'True'\"",children:"<script>\n window.addEventListener('load', () => { // 1.\n if ('<span class=eloquaemail>EmailOptedIn1</span>' === 'True') { //2.\n document.querySelector('#idValue').display = 'none'; // 3.\n };\n };\n<\/script>\n"})})})]}),"\n",(0,n.jsx)(t.p,{children:"Above script has three important lines that deserve some explanation."}),"\n",(0,n.jsxs)(t.p,{children:["First one uses ",(0,n.jsx)(t.a,{href:"/docs/js/js-dom#addeventlistener",children:"Event Listener"})," to launch the logic only after the whole page loaded. It is essential, as it guarantees that the browser already rendered the website element you want to hide."]}),"\n",(0,n.jsxs)(t.p,{children:["Next is the ",(0,n.jsx)(t.code,{children:"if"})," statement. It evaluates the data model value received via personalisation (left side of ==) with another value we choose (right side of ==). In this case, it checks whether Email Opted In for a particular user is set to True (names and values may differ in your data model)."]}),"\n",(0,n.jsxs)(t.p,{children:["The third line looks for an HTML element with id equal to ",(0,n.jsx)(t.code,{children:"'idValue'"})," and hides it from the user."]}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(t.p,{children:["You can adapt this script to do almost anything. Once you have your element selected with ",(0,n.jsx)(t.code,{children:"querySelector"})," you can programmatically ",(0,n.jsx)(t.a,{href:"/docs/js/js-dom#changing-attributes",children:"change its value"}),", add or remove a class from it to impact the CSS applied or even create new elements around it."]})}),"\n",(0,n.jsx)(t.p,{children:"With this script, you can both modify the structure of your landing page and alter the form fields (or even just form field options) visible for the user. Hide some elements, show other, change the style of a web element to make it more prominent on the website. But that's not all!"}),"\n",(0,n.jsx)(t.h3,{id:"changing-elements-on-the-website",children:"Changing elements on the website"}),"\n",(0,n.jsx)(t.p,{children:"For our data enrichment use case, we will need to alter the script slightly."}),"\n",(0,n.jsxs)(r.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],children:[(0,n.jsx)(o.Z,{value:"sfmc",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:"title=\"Change value of a hidden form field if Profile Attribute value includes 'Tax'\"",children:"<script>\n window.addEventListener('load', () => { // 1.\n const regexSearchValue = /Tax/; // 2.\n if (regexSearchValue.test('<ctrl:field name=Interests />')) { // 3.\n document.querySelector('#alreadyInterested').value = 'True'; // 4.\n };\n };\n<\/script>\n"})})}),(0,n.jsx)(o.Z,{value:"eloqua",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:"title=\"Change value of a hidden form field if Field Merge value includes 'Tax'\"",children:"<script>\n window.addEventListener('load', () => { // 1.\n const regexSearchValue = /Tax/; // 2.\n if (regexSearchValue.test('<span class=eloquaemail>Interests1</span>')) { // 3.\n document.querySelector('#alreadyInterested').value = 'True'; // 4.\n };\n };\n<\/script>\n"})})})]}),"\n",(0,n.jsxs)(t.p,{children:["In this scenario, we have a multi picklist field ",(0,n.jsx)(t.code,{children:"Interests"})," that captures what fascinates specific customer. If he is captivated by more than one topic, the names are semicolon-separated. A nice marketing tactic is to enrich this list each time the customer engages with something directly related to a particular topic. For example, downloads your new whitepaper."]}),"\n",(0,n.jsx)(t.p,{children:"In most Marketing Automation Platforms, it is straightforward to append a value to a column. Simple adding, however, leads to a (quite big) possibility of having duplicates. And this is neither good from the data quality perspective nor field length compliance."}),"\n",(0,n.jsxs)(t.p,{children:["So how to use the above script to enrich your data cleanly? We will need a hidden form field inside the whitepaper download form. In the HTML look for (or create) hidden field input (",(0,n.jsx)(t.code,{children:"<input id='alreadyInterested' type='hidden' ...>"}),"). The ",(0,n.jsx)(t.code,{children:"id"})," attribute will be useful again."]}),"\n",(0,n.jsxs)(t.p,{children:["You already know the first line from the previous section. The new things come next. We declare value we want to check in our data model picklist. In this example, we will test whether the user is already interested in Tax topic. The ",(0,n.jsx)(t.code,{children:"/"})," before and after the word are special characters used for a ",(0,n.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions",title:"MDN Documentation on Regular_Expressions",children:"regular expression"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["The third line is the fastest way to check whether the declared value is already in the ",(0,n.jsx)(t.code,{children:"Interests"})," field."]}),"\n",(0,n.jsx)(t.p,{children:"Finally, in case of the value already being in the multi picklist, we put True inside the hidden form field. It enables us to enforce on form processing to append new interest conditionally - only if the hidden field is blank in the submission data."}),"\n",(0,n.jsx)(t.h2,{id:"create-conditional-logic",children:"Create conditional logic"}),"\n",(0,n.jsx)(t.p,{children:"Simple manipulation of visibility and values on your landing page is just beginning. You can get even more out of scripted-backed personalisations and take control over user & data flows."}),"\n",(0,n.jsx)(t.p,{children:"Looking for an excellent way to tell your Google Analytics whether the user just downloaded a whitepaper or did he also wanted to receive product presentation on top of that? Not keen on creating two mirror-like Thank You pages with different conversion script? Sure!"}),"\n",(0,n.jsxs)(r.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],children:[(0,n.jsxs)(o.Z,{value:"sfmc",children:[(0,n.jsx)(t.p,{children:"Your form processing page should append date stamp to a data model field in case of the user becoming a lead (asking for a product presentation). This data, apart from being a great source of knowledge for your lead reporting and data processing trigger, will be handy for this solution."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:"<script>\n const leadCreationDate = '<ctrl:field name=leadCreationDate />';\n if (Date.now() - new Date(leadCreationDate) < 93600000) {\n dataLayer.push({\n // Your Lead conversion dataLayer model\n });\n } else {\n dataLayer.push({\n // Your Whitepaper conversion dataLayer model\n });\n }\n<\/script>\n"})})]}),(0,n.jsxs)(o.Z,{value:"eloqua",children:[(0,n.jsx)(t.p,{children:"Your form should have a processing step that appends date stamp to a data model field in case of the user becoming a lead (asking for a product presentation). This data, apart from being a great source of knowledge for your lead reporting and data processing trigger, will be handy for this solution."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:"<script>\n const leadCreationDate = '<span class=eloquaemail>LeadCreationTriggerDate1</span>';\n if (Date.now() - new Date(leadCreationDate) < 93600000) {\n dataLayer.push({\n // Your Lead conversion dataLayer model\n });\n } else {\n dataLayer.push({\n // Your Whitepaper conversion dataLayer model\n });\n }\n<\/script>\n"})})]})]}),"\n",(0,n.jsx)(t.p,{children:"Why? Because once you have this script on your Thank You page, you can check how distant in the past the personalised date is. And if it is within minutes, you can be pretty sure the user just became your lead. Which tells the script to push the lead conversion data layer instead of the whitepaper data layer. Simple and quick."}),"\n",(0,n.jsx)(t.p,{children:"Remember to take into consideration the difference between local time and server time, which might play a role depending on the Marketing Automation Platform and configuration."}),"\n",(0,n.jsx)(t.h3,{id:"possibilities-are-endless",children:"Possibilities are endless."}),"\n",(0,n.jsx)(t.p,{children:"Want to be sure only recognised users will enter your subscription centre?"}),"\n",(0,n.jsxs)(r.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],children:[(0,n.jsxs)(o.Z,{value:"sfmc",children:[(0,n.jsx)(t.p,{children:"Add email address or contact key personalisation. If it is empty, it means Marketing Cloud did not recognise this user. JavaScript can automatically redirect him to your subscription centre entry form that will take care of authorization."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:" if ('<ctrl:field name=\"Email Address\" />' == '') {\n window.location.replace(\u200b'https://redirect.here')\n}\n"})}),(0,n.jsx)(t.p,{children:"Want to double-check by querying the Salesforce Core? Add API call within the condition. You can also push some information from a data extension, or profile attributes to an external page. Personalise that data and use JavaScript to append it to redirect link as a query string or send it as a payload within POST call. Imagination is the only limit."})]}),(0,n.jsxs)(o.Z,{value:"eloqua",children:[(0,n.jsx)(t.p,{children:"Add email address Field Merge. If it is empty, it means Eloqua did not recognise this user. JavaScript can automatically redirect him to your subscription centre entry form that will take care of authorization."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"if ('<span class=eloquaemail>\u200bEmailAddress\u200b</span>' == '') {\n window.location.replace(\u200b'https://redirect.here')\n}\n"})}),(0,n.jsx)(t.p,{children:"Want to push some information from a data model to an external page? Field Merge that data and use JavaScript to append it to redirect link as a query string."}),(0,n.jsx)(t.p,{children:"You can get even more power with using dynamic content (perfect for simplifying javascript logic) or web data lookups (allows you to leverage email group subscription, shared list audience \u203a even on external websites). Imagination is the only limit."})]})]})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},425:(e,t,a)=>{a.d(t,{Z:()=>o});a(7294);var n=a(512);const i={tabItem:"tabItem_Ymn6"};var r=a(5893);function o(e){let{children:t,hidden:a,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(i.tabItem,o),hidden:a,children:t})}},3992:(e,t,a)=>{a.d(t,{Z:()=>j});var n=a(7294),i=a(512),r=a(2957),o=a(6550),s=a(1270),l=a(5238),d=a(3609),c=a(2560);function u(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:i}}=e;return{value:t,label:a,attributes:n,default:i}}))}(a);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const i=(0,o.k6)(),r=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(i.location.search);t.set(r,e),i.replace({...i.location,search:t.toString()})}),[r,i])]}function g(e){const{defaultValue:t,queryString:a=!1,groupId:i}=e,r=h(e),[o,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:r}))),[d,u]=m({queryString:a,groupId:i}),[g,f]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[i,r]=(0,c.Nk)(a);return[i,(0,n.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:i}),v=(()=>{const e=d??g;return p({value:e,tabValues:r})?e:null})();(0,s.Z)((()=>{v&&l(v)}),[v]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),f(e)}),[u,f,r]),tabValues:r}}var f=a(1048);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var w=a(5893);function b(e){let{className:t,block:a,selectedValue:n,selectValue:o,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),c=e=>{const t=e.currentTarget,a=l.indexOf(t),i=s[a].value;i!==n&&(d(t),o(i))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,w.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t),children:s.map((e=>{let{value:t,label:a,attributes:r}=e;return(0,w.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:u,onClick:c,...r,className:(0,i.Z)("tabs__item",v.tabItem,r?.className,{"tabs__item--active":n===t}),children:a??t},t)}))})}function y(e){let{lazy:t,children:a,selectedValue:i}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===i));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,w.jsx)("div",{className:"margin-top--md",children:r.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function x(e){const t=g(e);return(0,w.jsxs)("div",{className:(0,i.Z)("tabs-container",v.tabList),children:[(0,w.jsx)(b,{...e,...t}),(0,w.jsx)(y,{...e,...t})]})}function j(e){const t=(0,f.Z)();return(0,w.jsx)(x,{...e,children:u(e.children)},String(t))}},1872:(e,t,a)=>{a.d(t,{m:()=>r});a(7294);const n="leadText_qzwo";var i=a(5893);const r=e=>{let{content:t}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:n,children:t})})}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(7294);const i={},r=n.createContext(i);function o(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(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/409b673b.246861c2.js b/assets/js/409b673b.4d59d03e.js similarity index 94% rename from assets/js/409b673b.246861c2.js rename to assets/js/409b673b.4d59d03e.js index 87cb73823..73dc94be1 100644 --- a/assets/js/409b673b.246861c2.js +++ b/assets/js/409b673b.4d59d03e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9021],{4646:e=>{e.exports=JSON.parse('{"label":"SMS","permalink":"/docs/tags/sms","allTagsPath":"/docs/tags","count":3,"items":[{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","permalink":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9021],{4646:e=>{e.exports=JSON.parse('{"label":"SMS","permalink":"/docs/tags/sms","allTagsPath":"/docs/tags","count":3,"items":[{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","permalink":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/4168.efe5e5a8.js b/assets/js/4168.efe5e5a8.js new file mode 100644 index 000000000..84e76668f --- /dev/null +++ b/assets/js/4168.efe5e5a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4168],{4168:(e,t,l)=>{l.d(t,{diagram:()=>f});var n=l(2924),a=l(4218),o=l(5625),i=l(6365),s=l(4852);l(7484),l(7967),l(7856),l(1644),l(9354);const d=e=>i.e.sanitizeText(e,(0,i.c)());let r={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const c=function(e,t,l,n,a){const o=Object.keys(e);i.l.info("keys:",o),i.l.info(e),o.filter((t=>e[t].parent==a)).forEach((function(l){var o,s;const r=e[l],c=r.cssClasses.join(" "),p=(0,i.k)(r.styles),b=r.label??r.id,f={labelStyle:p.labelStyle,shape:"class_box",labelText:d(b),classData:r,rx:0,ry:0,class:c,style:p.style,id:r.id,domId:r.domId,tooltip:n.db.getTooltip(r.id,a)||"",haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,f),a&&t.setParent(r.id,a),i.l.info("setNode",f)}))};function p(e){let t;switch(e){case 0:t="aggregation";break;case 1:t="extension";break;case 2:t="composition";break;case 3:t="dependency";break;case 4:t="lollipop";break;default:t="none"}return t}const b={setConf:function(e){r={...r,...e}},draw:async function(e,t,l,n){i.l.info("Drawing class - ",t);const b=(0,i.c)().flowchart??(0,i.c)().class,f=(0,i.c)().securityLevel;i.l.info("config:",b);const y=(null==b?void 0:b.nodeSpacing)??50,u=(null==b?void 0:b.rankSpacing)??50,g=new o.k({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:y,ranksep:u,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=n.db.getNamespaces(),v=n.db.getClasses(),w=n.db.getRelations(),k=n.db.getNotes();let m;i.l.info(w),function(e,t,l,n){const a=Object.keys(e);i.l.info("keys:",a),i.l.info(e),a.forEach((function(a){var o,s;const r=e[a],p={shape:"rect",id:r.id,domId:r.domId,labelText:d(r.id),labelStyle:"",style:"fill: none; stroke: black",padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,p),c(r.classes,t,l,n,r.id),i.l.info("setNode",p)}))}(h,g,t,n),c(v,g,t,n),function(e,t){const l=(0,i.c)().flowchart;let n=0;e.forEach((function(e){var o;n++;const s={classes:"relation",pattern:1==e.relation.lineType?"dashed":"solid",id:`id_${e.id1}_${e.id2}_${n}`,arrowhead:"arrow_open"===e.type?"none":"normal",startLabelRight:"none"===e.relationTitle1?"":e.relationTitle1,endLabelLeft:"none"===e.relationTitle2?"":e.relationTitle2,arrowTypeStart:p(e.relation.type1),arrowTypeEnd:p(e.relation.type2),style:"fill:none",labelStyle:"",curve:(0,i.n)(null==l?void 0:l.curve,a.c_6)};if(i.l.info(s,e),void 0!==e.style){const t=(0,i.k)(e.style);s.style=t.style,s.labelStyle=t.labelStyle}e.text=e.title,void 0===e.text?void 0!==e.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",s.labelpos="c",(null==(o=(0,i.c)().flowchart)?void 0:o.htmlLabels)??(0,i.c)().htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+e.text+"</span>"):(s.labelType="text",s.label=e.text.replace(i.e.lineBreakRegex,"\n"),void 0===e.style&&(s.style=s.style||"stroke: #333; stroke-width: 1.5px;fill:none"),s.labelStyle=s.labelStyle.replace("color:","fill:"))),t.setEdge(e.id1,e.id2,s,n)}))}(w,g),function(e,t,l,n){i.l.info(e),e.forEach((function(e,o){var s,c;const p=e,b="",f="",y=p.text,u={labelStyle:b,shape:"note",labelText:d(y),noteData:p,rx:0,ry:0,class:"",style:f,id:p.id,domId:p.id,tooltip:"",type:"note",padding:(null==(s=(0,i.c)().flowchart)?void 0:s.padding)??(null==(c=(0,i.c)().class)?void 0:c.padding)};if(t.setNode(p.id,u),i.l.info("setNode",u),!p.class||!(p.class in n))return;const g=l+o,h={id:`edgeNote${g}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:(0,i.n)(r.curve,a.c_6)};t.setEdge(p.id,p.class,h,g)}))}(k,g,w.length+1,v),"sandbox"===f&&(m=(0,a.Ys)("#i"+t));const x="sandbox"===f?(0,a.Ys)(m.nodes()[0].contentDocument.body):(0,a.Ys)("body"),T=x.select(`[id="${t}"]`),S=x.select("#"+t+" g");if(await(0,s.r)(S,g,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),i.u.insertTitle(T,"classTitleText",(null==b?void 0:b.titleTopMargin)??5,n.db.getDiagramTitle()),(0,i.o)(g,T,null==b?void 0:b.diagramPadding,null==b?void 0:b.useMaxWidth),!(null==b?void 0:b.htmlLabels)){const e="sandbox"===f?m.nodes()[0].contentDocument:document,l=e.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of l){const l=t.getBBox(),n=e.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",l.width),n.setAttribute("height",l.height),t.insertBefore(n,t.firstChild)}}}},f={parser:n.p,db:n.d,renderer:b,styles:n.s,init:e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute,n.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/420d9621.a7b1a4cb.js b/assets/js/420d9621.f692ed56.js similarity index 85% rename from assets/js/420d9621.a7b1a4cb.js rename to assets/js/420d9621.f692ed56.js index a888db0ae..d4d900778 100644 --- a/assets/js/420d9621.a7b1a4cb.js +++ b/assets/js/420d9621.f692ed56.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7279],{2451:e=>{e.exports=JSON.parse('{"label":"CRM","permalink":"/docs/tags/crm","allTagsPath":"/docs/tags","count":1,"items":[{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7279],{2451:e=>{e.exports=JSON.parse('{"label":"CRM","permalink":"/docs/tags/crm","allTagsPath":"/docs/tags","count":1,"items":[{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/4237.dd6d72d0.js b/assets/js/4237.dd6d72d0.js new file mode 100644 index 000000000..3113c25c8 --- /dev/null +++ b/assets/js/4237.dd6d72d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4237],{4237:(t,e,n)=>{n.d(e,{diagram:()=>j});var i=n(6365),s=n(4218),r=n(2015),a=(n(7484),n(7967),n(7856),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,18],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,14],l={trace:function(){},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(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.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 13:i.addTask(r[o-1],r[o]),this.$="task"}},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:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],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),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 d=y.yylloc;r.push(d);var f=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,x,m,k,_,b,v,$,w,M={};;){if(x=n[n.length-1],this.defaultActions[x]?m=this.defaultActions[x]:(null==g&&(w=void 0,"number"!=typeof(w=i.pop()||y.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),g=w),m=a[x]&&a[x][g]),void 0===m||!m.length||!m[0]){var E="";for(_ in $=[],a[x])this.terminals_[_]&&_>2&&$.push("'"+this.terminals_[_]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[g]||g,line:y.yylineno,loc:d,expected:$})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(m[0]){case 1:n.push(g),s.push(y.yytext),r.push(y.yylloc),n.push(m[1]),g=null,c=y.yyleng,o=y.yytext,l=y.yylineno,d=y.yylloc;break;case 2:if(b=this.productions_[m[1]][1],M.$=s[s.length-b],M._$={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},f&&(M._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(M,[o,c,l,u.yy,m[1],s,r].concat(h))))return k;b&&(n=n.slice(0,-1*b*2),s=s.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[m[1]][0]),s.push(M.$),r.push(M._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},c={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;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[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 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:!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,19],inclusive:!0}}};function h(){this.yy={}}return l.lexer=c,h.prototype=l,l.Parser=h,new h}());a.parser=a;const o=a;let l="";const c=[],h=[],y=[],u=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},p={getConfig:()=>(0,i.c)().journey,clear:function(){c.length=0,h.length=0,l="",y.length=0,(0,i.t)()},setDiagramTitle:i.q,getDiagramTitle:i.r,setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,addSection:function(t){l=t,c.push(t)},getSections:function(){return c},getTasks:function(){let t=u();let e=0;for(;!t&&e<100;)t=u(),e++;return h.push(...y),h},addTask:function(t,e){const n=e.substr(1).split(":");let i=0,s=[];1===n.length?(i=Number(n[0]),s=[]):(i=Number(n[0]),s=n[1].split(","));const r=s.map((t=>t.trim())),a={section:l,type:l,people:r,task:t,score:i};y.push(a)},addTaskOrg:function(t){const e={section:l,type:l,description:t,task:t,classes:[]};h.push(e)},getActors:function(){return function(){const t=[];return h.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},d=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\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 .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,f=function(t,e){return(0,r.d)(t,e)},g=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},x=function(t,e){return(0,r.f)(t,e)};let m=-1;const k=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:y}=l,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",c).style("text-anchor","middle").style("font-size",h).style("font-family",y);l.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),l.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,o)}}function n(t,n,s,r,a,o,l,c){const h=n.append("switch"),y=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,l,c),i(y,l)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),_=g,b=function(t,e,n){const i=t.append("g"),s=(0,r.g)();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,f(i,s),k(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},v=x,$=function(t,e,n){const i=e.x+n.width/2,a=t.append("g");m++;a.append("line").attr("id","task"+m).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),r=t.append("g");r.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),r.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const i=(0,s.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(r):e.score<3?function(t){const i=(0,s.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(r):r.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a,{cx:i,cy:300+30*(5-e.score),score:e.score});const o=(0,r.g)();o.x=e.x,o.y=e.y,o.fill=e.fill,o.width=n.width,o.height=n.height,o.class="task task-type-"+e.num,o.rx=3,o.ry=3,f(a,o);let l=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:l,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};g(a,i),l+=10})),k(n)(e.task,a,o.x,o.y,o.width,o.height,{class:"task"},n,e.colour)},w=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")},M={};const E=(0,i.c)().journey,T=E.leftMargin,S={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(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,s){const r=(0,i.c)().journey,a=this;let o=0;var l;this.sequenceItems.forEach((function(i){o++;const c=a.sequenceItems.length-o+1;a.updateVal(i,"starty",e-c*r.boxMargin,Math.min),a.updateVal(i,"stopy",s+c*r.boxMargin,Math.max),a.updateVal(S.data,"startx",t-c*r.boxMargin,Math.min),a.updateVal(S.data,"stopx",n+c*r.boxMargin,Math.max),"activation"!==l&&(a.updateVal(i,"startx",t-c*r.boxMargin,Math.min),a.updateVal(i,"stopx",n+c*r.boxMargin,Math.max),a.updateVal(S.data,"starty",e-c*r.boxMargin,Math.min),a.updateVal(S.data,"stopy",s+c*r.boxMargin,Math.max))}))},insert:function(t,e,n,i){const s=Math.min(t,n),r=Math.max(t,n),a=Math.min(e,i),o=Math.max(e,i);this.updateVal(S.data,"startx",s,Math.min),this.updateVal(S.data,"starty",a,Math.min),this.updateVal(S.data,"stopx",r,Math.max),this.updateVal(S.data,"stopy",o,Math.max),this.updateBounds(s,a,r,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},A=E.sectionFills,I=E.sectionColours,P=function(t,e,n){const s=(0,i.c)().journey;let r="";const a=n+(2*s.height+s.diagramMarginY);let o=0,l="#CCC",c="black",h=0;for(const[i,y]of e.entries()){if(r!==y.section){l=A[o%A.length],h=o%A.length,c=I[o%I.length];let n=0;const a=y.section;for(let t=i;t<e.length&&e[t].section==a;t++)n+=1;const u={x:i*s.taskMargin+i*s.width+T,y:50,text:y.section,fill:l,num:h,colour:c,taskCount:n};b(t,u,s),r=y.section,o++}const n=y.people.reduce(((t,e)=>(M[e]&&(t[e]=M[e]),t)),{});y.x=i*s.taskMargin+i*s.width+T,y.y=a,y.width=s.diagramMarginX,y.height=s.diagramMarginY,y.colour=c,y.fill=l,y.num=h,y.actors=n,$(t,y,s),S.insert(y.x,y.y,y.x+y.width+s.taskMargin,450)}},C={setConf:function(t){Object.keys(t).forEach((function(e){E[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.c)().journey,o=(0,i.c)().securityLevel;let l;"sandbox"===o&&(l=(0,s.Ys)("#i"+e));const c="sandbox"===o?(0,s.Ys)(l.nodes()[0].contentDocument.body):(0,s.Ys)("body");S.init();const h=c.select("#"+e);w(h);const y=r.db.getTasks(),u=r.db.getDiagramTitle(),p=r.db.getActors();for(const i in M)delete M[i];let d=0;p.forEach((t=>{M[t]={color:a.actorColours[d%a.actorColours.length],position:d},d++})),function(t){const e=(0,i.c)().journey;let n=60;Object.keys(M).forEach((i=>{const s=M[i].color,r={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:M[i].position};_(t,r);const a={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};v(t,a),n+=20}))}(h),S.insert(0,0,T,50*Object.keys(M).length),P(h,y,0);const f=S.getBounds();u&&h.append("text").text(u).attr("x",T).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*a.diagramMarginY,x=T+f.stopx+2*a.diagramMarginX;(0,i.i)(h,g,x,a.useMaxWidth),h.append("line").attr("x1",T).attr("y1",4*a.height).attr("x2",x-T-4).attr("y2",4*a.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=u?70:0;h.attr("viewBox",`${f.startx} -25 ${x} ${g+m}`),h.attr("preserveAspectRatio","xMinYMin meet"),h.attr("height",g+m+25)}},j={parser:o,db:p,renderer:C,styles:d,init:t=>{C.setConf(t.journey),p.clear()}}},2015:(t,e,n)=>{n.d(e,{a:()=>a,b:()=>c,c:()=>l,d:()=>r,e:()=>y,f:()=>o,g:()=>h});var i=n(7967),s=n(6365);const r=(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),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const i in e.attrs)n.attr(i,e.attrs[i]);return void 0!==e.class&&n.attr("class",e.class),n},a=(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"};r(t,n).lower()},o=(t,e)=>{const n=e.text.replace(s.H," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),i},l=(t,e,n,s)=>{const r=t.append("image");r.attr("x",e),r.attr("y",n);const a=(0,i.Nm)(s);r.attr("xlink:href",a)},c=(t,e,n,s)=>{const r=t.append("use");r.attr("x",e),r.attr("y",n);const a=(0,i.Nm)(s);r.attr("xlink:href",`#${a}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),y=()=>({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/4248.360e6c79.js b/assets/js/4248.360e6c79.js deleted file mode 100644 index 243ad2ab9..000000000 --- a/assets/js/4248.360e6c79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4248],{4248:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),l=n(7325),o=n(9488),r=n(241);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/js/4641.d2f189f5.js b/assets/js/4641.d2f189f5.js new file mode 100644 index 000000000..834712d45 --- /dev/null +++ b/assets/js/4641.d2f189f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4641],{4641:(t,e,s)=>{s.d(e,{d:()=>st,f:()=>et,p:()=>r});var u=s(4218),i=s(6365),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],Y=[1,89],K=[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],Yt=[1,232],Kt=[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,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement: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:Y,92:[1,80],94:[1,81],98:82,102:K,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:Y,102:K,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:Yt,107:Kt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:239,101:[1,240],102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:241,101:[1,242],102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{102:[1,243]},{10:Ut,58:Vt,81:Gt,89:244,102:Mt,104:229,105:230,106:Yt,107:Kt,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:Yt,107:Kt,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:Yt,107:Kt,108:jt,109:Xt},t(Wt,[2,126]),{14:V,42:G,58:M,86:Y,98:266,102:K,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{14:V,42:G,58:M,86:Y,98:267,102:K,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:Yt,107:Kt,108:jt,109:Xt}),t(St,[2,119],{117:160,10:[1,271],14:V,42:G,58:M,86:Y,102:K,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:Y,102:K,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:Yt,107:Kt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:276,102:Mt,104:229,105:230,106:Yt,107:Kt,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;n<i.length;n++)if((s=this._input.match(this.rules[i[n]]))&&(!e||s[0].length>e[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<t.length;u++)for(n=0;n<e.length;n++)T(t[u],e[n],s)},_=function(t,e){t.forEach((function(t){"default"===t?A.defaultInterpolate=e:A[t].interpolate=e}))},B=function(t,e){t.forEach((function(t){if(t>=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="RL"),a.match(/.*\^/)&&(a="BT"),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<n.length;t++){let e=n[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),n[t]=e}}0===n.length&&n.push(t),void 0!==h[t]&&(h[t].haveCallback=!0,k.push((function(){const t=document.querySelector(`[id="${u}"]`);null!==t&&t.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)})))}(t,e,s)})),x(t,"clickable")},R=function(t){k.forEach((function(e){e(t)}))},$=function(){return a.trim()},N=function(){return h},O=function(){return A},w=function(){return d},P=function(t){let e=(0,u.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,u.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,u.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,u.Ys)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.bottom+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,u.Ys)(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.t)()},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;i<r.length;i++)r[i]=b(r[i]);u=u||"subGraph"+f,n=n||"",n=D(n),f+=1;const l={id:u,nodes:r,title:n.trim(),classes:[],dir:o,labelType:s.type};return i.l.info("Adding",l.id,l.nodes,l.dir),l.nodes=J(l,p).nodes,p.push(l),y[u]=l,u},Y=function(t){for(const[e,s]of p.entries())if(s.id===t)return e;return-1};let K=-1;const j=[],X=function(t,e){const s=p[e].nodes;if(K+=1,K>2e3)return;if(j[K]=e,p[e].id===t)return{result:!0,count:0};let u=0,i=1;for(;u<s.length;){const e=Y(s[u]);if(e>=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(){K=-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<s;++i)e[i]===t&&++u;return u})(".",s);return r&&(i="dotted",n=r),{type:u,stroke:i,length:n}})(t);let u;if(e){if(u=(t=>{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.I.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.r},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/4852.480c4bbc.js b/assets/js/4852.480c4bbc.js new file mode 100644 index 000000000..c66bf5a2f --- /dev/null +++ b/assets/js/4852.480c4bbc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4852],{9354:(e,t,n)=>{n.d(t,{c:()=>l});var r=n(9360),i=n(8451);const a=function(e){return(0,i.Z)(e,4)};var d=n(3836);n(2544);function l(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:s(e)};return r.Z(e.graph())||(t.value=a(e.graph())),t}function o(e){return d.Z(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.Z(n)||(a.value=n),r.Z(i)||(a.parent=i),a}))}function s(e){return d.Z(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.Z(t.name)||(i.name=t.name),r.Z(n)||(i.value=n),i}))}},4852:(e,t,n)=>{n.d(t,{r:()=>X});var r=n(1644),i=n(9354),a=n(2494),d=n(6365),l=n(5625),o=n(9261),s=n(4218);let c={},h={},g={};const f=(e,t)=>(d.l.trace("In isDecendant",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 l=t.edges(i);d.l.debug("Copying Edges",l),l.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("Decendants 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 decendants"),!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(l){d.l.error(l)}}))}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.c(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 l.k({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.c(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.c(a)),d.l.debug("Old graph after copy",i.c(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())},m=(e,t)=>{if(0===t.length)return[];let n=Object.assign(t);return t.forEach((t=>{const r=e.children(t),i=m(e,r);n=[...n,...i]})),n},x={rect:(e,t)=>{d.l.info("Creating subgraph rect for ",t.id,t);const n=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),r=n.insert("rect",":first-child"),i=(0,d.m)((0,d.c)().flowchart.htmlLabels),l=n.insert("g").attr("class","cluster-label"),c="markdown"===t.labelType?(0,o.a)(l,t.labelText,{style:t.labelStyle,useHtmlLabels:i}):l.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,d.m)((0,d.c)().flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ys)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}const g=0*t.padding,f=g/2,u=t.width<=h.width+g?h.width+g:t.width;t.width<=h.width+g?t.diff=(h.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,d.l.trace("Data ",t,JSON.stringify(t)),r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-u/2).attr("y",t.y-t.height/2-f).attr("width",u).attr("height",t.height+g),i?l.attr("transform","translate("+(t.x-h.width/2)+", "+(t.y-t.height/2)+")"):l.attr("transform","translate("+t.x+", "+(t.y-t.height/2)+")");const w=r.node().getBBox();return t.width=w.width,t.height=w.height,t.intersect=function(e){return(0,a.i)(t,e)},n},roundedWithTitle:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),l=n.append("rect"),o=i.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let c=o.getBBox();if((0,d.m)((0,d.c)().flowchart.htmlLabels)){const e=o.children[0],t=(0,s.Ys)(o);c=e.getBoundingClientRect(),t.attr("width",c.width),t.attr("height",c.height)}c=o.getBBox();const h=0*t.padding,g=h/2,f=t.width<=c.width+t.padding?c.width+t.padding:t.width;t.width<=c.width+t.padding?t.diff=(c.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,r.attr("class","outer").attr("x",t.x-f/2-g).attr("y",t.y-t.height/2-g).attr("width",f+h).attr("height",t.height+h),l.attr("class","inner").attr("x",t.x-f/2-g).attr("y",t.y-t.height/2-g+c.height-1).attr("width",f+h).attr("height",t.height+h-c.height-3),i.attr("transform","translate("+(t.x-c.width/2)+", "+(t.y-t.height/2-t.padding/3+((0,d.m)((0,d.c)().flowchart.htmlLabels)?5:3))+")");const u=r.node().getBBox();return t.height=u.height,t.intersect=function(e){return(0,a.i)(t,e)},n},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 l=r.node().getBBox();return t.width=l.width,t.height=l.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 l=r.node().getBBox();return t.width=l.width,t.height=l.height,t.diff=-t.padding/2,t.intersect=function(e){return(0,a.i)(t,e)},n}};let b={};const N=async(e,t,n,l,o)=>{d.l.info("Graph in recursive render: XXX",i.c(t),o);const s=t.graph().rankdir;d.l.trace("Dir in recursive render - dir:",s);const h=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 g=h.insert("g").attr("class","clusters"),f=h.insert("g").attr("class","edgePaths"),u=h.insert("g").attr("class","edgeLabels"),w=h.insert("g").attr("class","nodes");await Promise.all(t.nodes().map((async function(e){const r=t.node(e);if(void 0!==o){const n=JSON.parse(JSON.stringify(o.clusterData));d.l.info("Setting data for cluster XXX (",e,") ",n,o),t.setNode(o.id,n),t.parent(e)||(d.l.trace("Setting parent",e,o.id),t.setParent(e,o.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 N(w,r.graph,n,l,t.node(e)),o=i.elem;(0,a.u)(r,o),r.diff=i.diff||0,d.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,a.s)(o,r),d.l.warn("Recursive render complete ",o,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)(w,t.node(e),s))}))),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,"Translateing: ",c[e.v],c[e.w]),(0,a.f)(u,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.bK)(t),d.l.info("Graph after layout:",i.c(t));let v=0;return(e=>m(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?(0,a.p)(n):t.children(e).length>0?(((e,t)=>{d.l.trace("Inserting cluster");const n=t.shape||"rect";b[t.id]=x[n](e,t)})(g,n),c[n.id].node=n):(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);const i=(0,a.g)(f,e,r,c,n,t,l);(0,a.h)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);d.l.info(e,n.type,n.diff),"group"===n.type&&(v=n.diff)})),{elem:h,diff:v}},X=async(e,t,n,r,l)=>{(0,a.a)(e,n,r,l),(0,a.b)(),(0,a.d)(),b={},h={},g={},c={},d.l.warn("Graph at first:",JSON.stringify(i.c(t))),((e,t)=>{!e||t>10?d.l.debug("Opting out, no graph "):(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("Decendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):d.l.debug("Not a cluster ",t,h)})),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 l=structuredClone(n),o=structuredClone(n);l.label="",l.arrowTypeEnd="none",o.label="",l.fromCluster=t.v,o.toCluster=t.v,e.setEdge(r,a,l,t.name+"-cyclic-special"),e.setEdge(a,i,o,t.name+"-cyclic-special")}else(c[t.v]||c[t.w])&&(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&&(n.fromCluster=t.v),i!==t.w&&(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.c(e)),y(e,0),d.l.trace(c))})(t),d.l.warn("Graph after:",JSON.stringify(i.c(t))),await N(e,t,r,l)}}}]); \ No newline at end of file diff --git a/assets/js/487.7b135b0c.js b/assets/js/487.7b135b0c.js deleted file mode 100644 index 9a656f422..000000000 --- a/assets/js/487.7b135b0c.js +++ /dev/null @@ -1,7370 +0,0 @@ -exports.id = 487; -exports.ids = [487]; -exports.modules = { - -/***/ 17295: -/***/ ((module) => { - -(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -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"); } } - -/******************************************************************************* - * Copyright (c) 2017 Kiel University and others. - * - * This program and the accompanying materials are made - * available under the terms of the Eclipse Public License 2.0 - * which is available at https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -var ELK = function () { - function ELK() { - var _this = this; - - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, - defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, - _ref$algorithms = _ref.algorithms, - algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, - workerFactory = _ref.workerFactory, - workerUrl = _ref.workerUrl; - - _classCallCheck(this, ELK); - - this.defaultLayoutOptions = defaultLayoutOptions; - this.initialized = false; - - // check valid worker construction possible - if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { - throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); - } - var factory = workerFactory; - if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { - // use default Web Worker - factory = function factory(url) { - return new Worker(url); - }; - } - - // create the worker - var worker = factory(workerUrl); - if (typeof worker.postMessage !== 'function') { - throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); - } - - // wrap the worker to return promises - this.worker = new PromisedWorker(worker); - - // initially register algorithms - this.worker.postMessage({ - cmd: 'register', - algorithms: algorithms - }).then(function (r) { - return _this.initialized = true; - }).catch(console.err); - } - - _createClass(ELK, [{ - key: 'layout', - value: function layout(graph) { - var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref2$layoutOptions = _ref2.layoutOptions, - layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, - _ref2$logging = _ref2.logging, - logging = _ref2$logging === undefined ? false : _ref2$logging, - _ref2$measureExecutio = _ref2.measureExecutionTime, - measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; - - if (!graph) { - return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); - } - return this.worker.postMessage({ - cmd: 'layout', - graph: graph, - layoutOptions: layoutOptions, - options: { - logging: logging, - measureExecutionTime: measureExecutionTime - } - }); - } - }, { - key: 'knownLayoutAlgorithms', - value: function knownLayoutAlgorithms() { - return this.worker.postMessage({ cmd: 'algorithms' }); - } - }, { - key: 'knownLayoutOptions', - value: function knownLayoutOptions() { - return this.worker.postMessage({ cmd: 'options' }); - } - }, { - key: 'knownLayoutCategories', - value: function knownLayoutCategories() { - return this.worker.postMessage({ cmd: 'categories' }); - } - }, { - key: 'terminateWorker', - value: function terminateWorker() { - this.worker.terminate(); - } - }]); - - return ELK; -}(); - -exports.default = ELK; - -var PromisedWorker = function () { - function PromisedWorker(worker) { - var _this2 = this; - - _classCallCheck(this, PromisedWorker); - - if (worker === undefined) { - throw new Error("Missing mandatory parameter 'worker'."); - } - this.resolvers = {}; - this.worker = worker; - this.worker.onmessage = function (answer) { - // why is this necessary? - setTimeout(function () { - _this2.receive(_this2, answer); - }, 0); - }; - } - - _createClass(PromisedWorker, [{ - key: 'postMessage', - value: function postMessage(msg) { - var id = this.id || 0; - this.id = id + 1; - msg.id = id; - var self = this; - return new Promise(function (resolve, reject) { - // prepare the resolver - self.resolvers[id] = function (err, res) { - if (err) { - self.convertGwtStyleError(err); - reject(err); - } else { - resolve(res); - } - }; - // post the message - self.worker.postMessage(msg); - }); - } - }, { - key: 'receive', - value: function receive(self, answer) { - var json = answer.data; - var resolver = self.resolvers[json.id]; - if (resolver) { - delete self.resolvers[json.id]; - if (json.error) { - resolver(json.error); - } else { - resolver(null, json.data); - } - } - } - }, { - key: 'terminate', - value: function terminate() { - if (this.worker.terminate) { - this.worker.terminate(); - } - } - }, { - key: 'convertGwtStyleError', - value: function convertGwtStyleError(err) { - if (!err) { - return; - } - // Somewhat flatten the way GWT stores nested exception(s) - var javaException = err['__java$exception']; - if (javaException) { - // Note that the property name of the nested exception is different - // in the non-minified ('cause') and the minified (not deterministic) version. - // Hence, the version below only works for the non-minified version. - // However, as the minified stack trace is not of much use anyway, one - // should switch the used version for debugging in such a case. - if (javaException.cause && javaException.cause.backingJsObject) { - err.cause = javaException.cause.backingJsObject; - this.convertGwtStyleError(err.cause); - } - delete err['__java$exception']; - } - } - }]); - - return PromisedWorker; -}(); -},{}],2:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- -var $wnd; -if (typeof window !== 'undefined') - $wnd = window -else if (typeof global !== 'undefined') - $wnd = global // nodejs -else if (typeof self !== 'undefined') - $wnd = self // web worker - -var $moduleName, - $moduleBase; - -// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- -var g, i, o; - -// -------------- GENERATED CODE -------------- -function nb(){} -function xb(){} -function Fd(){} -function $g(){} -function _p(){} -function yq(){} -function Sq(){} -function Es(){} -function Jw(){} -function Vw(){} -function VA(){} -function dA(){} -function MA(){} -function PA(){} -function PB(){} -function bx(){} -function cx(){} -function vy(){} -function Nz(){} -function Yz(){} -function Ylb(){} -function Ymb(){} -function xmb(){} -function Fmb(){} -function Qmb(){} -function gcb(){} -function ccb(){} -function jcb(){} -function jtb(){} -function otb(){} -function qtb(){} -function _fb(){} -function bpb(){} -function kpb(){} -function ppb(){} -function Gpb(){} -function drb(){} -function dzb(){} -function fzb(){} -function fxb(){} -function Vxb(){} -function Ovb(){} -function byb(){} -function zyb(){} -function Zyb(){} -function _yb(){} -function hzb(){} -function jzb(){} -function lzb(){} -function nzb(){} -function rzb(){} -function zzb(){} -function Czb(){} -function Ezb(){} -function Gzb(){} -function Izb(){} -function Mzb(){} -function bBb(){} -function NBb(){} -function PBb(){} -function RBb(){} -function iCb(){} -function OCb(){} -function SCb(){} -function GDb(){} -function JDb(){} -function fEb(){} -function xEb(){} -function CEb(){} -function GEb(){} -function yFb(){} -function KGb(){} -function tIb(){} -function vIb(){} -function xIb(){} -function zIb(){} -function OIb(){} -function SIb(){} -function TJb(){} -function VJb(){} -function XJb(){} -function XKb(){} -function fKb(){} -function VKb(){} -function VLb(){} -function jLb(){} -function nLb(){} -function GLb(){} -function KLb(){} -function MLb(){} -function OLb(){} -function RLb(){} -function YLb(){} -function bMb(){} -function gMb(){} -function lMb(){} -function pMb(){} -function wMb(){} -function zMb(){} -function CMb(){} -function FMb(){} -function LMb(){} -function zNb(){} -function PNb(){} -function kOb(){} -function pOb(){} -function tOb(){} -function yOb(){} -function FOb(){} -function GPb(){} -function aQb(){} -function cQb(){} -function eQb(){} -function gQb(){} -function iQb(){} -function CQb(){} -function MQb(){} -function OQb(){} -function ASb(){} -function fTb(){} -function kTb(){} -function STb(){} -function fUb(){} -function DUb(){} -function VUb(){} -function YUb(){} -function _Ub(){} -function _Wb(){} -function QWb(){} -function XWb(){} -function jVb(){} -function DVb(){} -function VVb(){} -function $Vb(){} -function dXb(){} -function hXb(){} -function lXb(){} -function gYb(){} -function HYb(){} -function SYb(){} -function VYb(){} -function dZb(){} -function P$b(){} -function T$b(){} -function h1b(){} -function m1b(){} -function q1b(){} -function u1b(){} -function y1b(){} -function C1b(){} -function e2b(){} -function g2b(){} -function m2b(){} -function q2b(){} -function u2b(){} -function S2b(){} -function U2b(){} -function W2b(){} -function _2b(){} -function e3b(){} -function h3b(){} -function p3b(){} -function t3b(){} -function w3b(){} -function y3b(){} -function A3b(){} -function M3b(){} -function Q3b(){} -function U3b(){} -function Y3b(){} -function l4b(){} -function q4b(){} -function s4b(){} -function u4b(){} -function w4b(){} -function y4b(){} -function L4b(){} -function N4b(){} -function P4b(){} -function R4b(){} -function T4b(){} -function X4b(){} -function I5b(){} -function Q5b(){} -function T5b(){} -function Z5b(){} -function l6b(){} -function o6b(){} -function t6b(){} -function z6b(){} -function L6b(){} -function M6b(){} -function P6b(){} -function X6b(){} -function $6b(){} -function a7b(){} -function c7b(){} -function g7b(){} -function j7b(){} -function m7b(){} -function r7b(){} -function x7b(){} -function D7b(){} -function D9b(){} -function b9b(){} -function h9b(){} -function j9b(){} -function l9b(){} -function w9b(){} -function F9b(){} -function hac(){} -function jac(){} -function pac(){} -function uac(){} -function Iac(){} -function Kac(){} -function Sac(){} -function obc(){} -function rbc(){} -function vbc(){} -function Fbc(){} -function Jbc(){} -function Xbc(){} -function ccc(){} -function fcc(){} -function lcc(){} -function occ(){} -function tcc(){} -function ycc(){} -function Acc(){} -function Ccc(){} -function Ecc(){} -function Gcc(){} -function Zcc(){} -function _cc(){} -function bdc(){} -function fdc(){} -function jdc(){} -function pdc(){} -function sdc(){} -function ydc(){} -function Adc(){} -function Cdc(){} -function Edc(){} -function Idc(){} -function Ndc(){} -function Qdc(){} -function Sdc(){} -function Udc(){} -function Wdc(){} -function Ydc(){} -function aec(){} -function hec(){} -function jec(){} -function lec(){} -function nec(){} -function uec(){} -function wec(){} -function yec(){} -function Aec(){} -function Fec(){} -function Jec(){} -function Lec(){} -function Nec(){} -function Rec(){} -function Uec(){} -function Zec(){} -function Zfc(){} -function lfc(){} -function tfc(){} -function xfc(){} -function zfc(){} -function Ffc(){} -function Jfc(){} -function Nfc(){} -function Pfc(){} -function Vfc(){} -function _fc(){} -function fgc(){} -function jgc(){} -function lgc(){} -function Bgc(){} -function ehc(){} -function ghc(){} -function ihc(){} -function khc(){} -function mhc(){} -function ohc(){} -function qhc(){} -function yhc(){} -function Ahc(){} -function Ghc(){} -function Ihc(){} -function Khc(){} -function Mhc(){} -function Shc(){} -function Uhc(){} -function Whc(){} -function dic(){} -function dlc(){} -function blc(){} -function flc(){} -function hlc(){} -function jlc(){} -function Glc(){} -function Ilc(){} -function Klc(){} -function Mlc(){} -function Mjc(){} -function Qjc(){} -function Qlc(){} -function Ulc(){} -function Ylc(){} -function Lkc(){} -function Nkc(){} -function Pkc(){} -function Rkc(){} -function Xkc(){} -function _kc(){} -function gmc(){} -function kmc(){} -function zmc(){} -function Fmc(){} -function Wmc(){} -function $mc(){} -function anc(){} -function mnc(){} -function wnc(){} -function Hnc(){} -function Jnc(){} -function Lnc(){} -function Nnc(){} -function Pnc(){} -function Ync(){} -function eoc(){} -function Aoc(){} -function Coc(){} -function Eoc(){} -function Joc(){} -function Loc(){} -function Zoc(){} -function _oc(){} -function bpc(){} -function hpc(){} -function kpc(){} -function ppc(){} -function pFc(){} -function Ryc(){} -function QCc(){} -function PDc(){} -function xGc(){} -function HGc(){} -function JGc(){} -function NGc(){} -function GIc(){} -function iKc(){} -function mKc(){} -function wKc(){} -function yKc(){} -function AKc(){} -function EKc(){} -function KKc(){} -function OKc(){} -function QKc(){} -function SKc(){} -function UKc(){} -function YKc(){} -function aLc(){} -function fLc(){} -function hLc(){} -function nLc(){} -function pLc(){} -function tLc(){} -function vLc(){} -function zLc(){} -function BLc(){} -function DLc(){} -function FLc(){} -function sMc(){} -function JMc(){} -function hNc(){} -function RNc(){} -function ZNc(){} -function _Nc(){} -function bOc(){} -function dOc(){} -function fOc(){} -function hOc(){} -function hRc(){} -function jRc(){} -function KRc(){} -function NRc(){} -function NQc(){} -function LQc(){} -function _Qc(){} -function cPc(){} -function iPc(){} -function kPc(){} -function mPc(){} -function xPc(){} -function zPc(){} -function zSc(){} -function BSc(){} -function GSc(){} -function ISc(){} -function NSc(){} -function TSc(){} -function NTc(){} -function NVc(){} -function oVc(){} -function SVc(){} -function VVc(){} -function XVc(){} -function ZVc(){} -function bWc(){} -function bXc(){} -function CXc(){} -function FXc(){} -function IXc(){} -function MXc(){} -function UXc(){} -function bYc(){} -function fYc(){} -function oYc(){} -function qYc(){} -function uYc(){} -function pZc(){} -function G$c(){} -function h0c(){} -function N0c(){} -function k1c(){} -function I1c(){} -function Q1c(){} -function f2c(){} -function i2c(){} -function k2c(){} -function w2c(){} -function O2c(){} -function S2c(){} -function Z2c(){} -function v3c(){} -function x3c(){} -function R3c(){} -function U3c(){} -function e4c(){} -function w4c(){} -function x4c(){} -function z4c(){} -function B4c(){} -function D4c(){} -function F4c(){} -function H4c(){} -function J4c(){} -function L4c(){} -function N4c(){} -function P4c(){} -function R4c(){} -function T4c(){} -function V4c(){} -function X4c(){} -function Z4c(){} -function _4c(){} -function _7c(){} -function b5c(){} -function d5c(){} -function f5c(){} -function h5c(){} -function H5c(){} -function Hfd(){} -function Zfd(){} -function Zed(){} -function ged(){} -function Jed(){} -function Ned(){} -function Red(){} -function Ved(){} -function bbd(){} -function mdd(){} -function _fd(){} -function fgd(){} -function kgd(){} -function Mgd(){} -function Ahd(){} -function Ald(){} -function Tld(){} -function xkd(){} -function rmd(){} -function knd(){} -function Jod(){} -function JCd(){} -function Bpd(){} -function BFd(){} -function oFd(){} -function bqd(){} -function bvd(){} -function jvd(){} -function yud(){} -function Hxd(){} -function EBd(){} -function aDd(){} -function MGd(){} -function vHd(){} -function RHd(){} -function wNd(){} -function zNd(){} -function CNd(){} -function KNd(){} -function XNd(){} -function $Nd(){} -function HPd(){} -function lUd(){} -function XUd(){} -function DWd(){} -function GWd(){} -function JWd(){} -function MWd(){} -function PWd(){} -function SWd(){} -function VWd(){} -function YWd(){} -function _Wd(){} -function xYd(){} -function BYd(){} -function mZd(){} -function EZd(){} -function GZd(){} -function JZd(){} -function MZd(){} -function PZd(){} -function SZd(){} -function VZd(){} -function YZd(){} -function _Zd(){} -function c$d(){} -function f$d(){} -function i$d(){} -function l$d(){} -function o$d(){} -function r$d(){} -function u$d(){} -function x$d(){} -function A$d(){} -function D$d(){} -function G$d(){} -function J$d(){} -function M$d(){} -function P$d(){} -function S$d(){} -function V$d(){} -function Y$d(){} -function _$d(){} -function c_d(){} -function f_d(){} -function i_d(){} -function l_d(){} -function o_d(){} -function r_d(){} -function u_d(){} -function x_d(){} -function A_d(){} -function D_d(){} -function G_d(){} -function J_d(){} -function M_d(){} -function P_d(){} -function S_d(){} -function V_d(){} -function Y_d(){} -function h5d(){} -function U6d(){} -function U9d(){} -function _8d(){} -function fae(){} -function hae(){} -function kae(){} -function nae(){} -function qae(){} -function tae(){} -function wae(){} -function zae(){} -function Cae(){} -function Fae(){} -function Iae(){} -function Lae(){} -function Oae(){} -function Rae(){} -function Uae(){} -function Xae(){} -function $ae(){} -function bbe(){} -function ebe(){} -function hbe(){} -function kbe(){} -function nbe(){} -function qbe(){} -function tbe(){} -function wbe(){} -function zbe(){} -function Cbe(){} -function Fbe(){} -function Ibe(){} -function Lbe(){} -function Obe(){} -function Rbe(){} -function Ube(){} -function Xbe(){} -function $be(){} -function bce(){} -function ece(){} -function hce(){} -function kce(){} -function nce(){} -function qce(){} -function tce(){} -function wce(){} -function zce(){} -function Cce(){} -function Fce(){} -function Ice(){} -function Lce(){} -function Oce(){} -function Rce(){} -function Uce(){} -function Xce(){} -function ude(){} -function Vge(){} -function dhe(){} -function s_b(a){} -function jSd(a){} -function ol(){wb()} -function oPb(){nPb()} -function EPb(){CPb()} -function gFb(){fFb()} -function TRb(){SRb()} -function ySb(){wSb()} -function PSb(){OSb()} -function dTb(){bTb()} -function i4b(){b4b()} -function D2b(){x2b()} -function J6b(){D6b()} -function u9b(){q9b()} -function $9b(){I9b()} -function Umc(){Imc()} -function abc(){Vac()} -function ZCc(){VCc()} -function kCc(){hCc()} -function rCc(){oCc()} -function Tcc(){Occ()} -function xkc(){gkc()} -function xDc(){rDc()} -function iDc(){cDc()} -function kwc(){jwc()} -function tJc(){jJc()} -function dJc(){aJc()} -function Pyc(){Nyc()} -function VBc(){SBc()} -function CFc(){yFc()} -function CUc(){wUc()} -function lUc(){fUc()} -function sUc(){pUc()} -function IUc(){GUc()} -function IWc(){HWc()} -function _Wc(){ZWc()} -function fHc(){dHc()} -function f0c(){d0c()} -function B0c(){A0c()} -function L0c(){J0c()} -function LTc(){JTc()} -function sTc(){rTc()} -function KLc(){ILc()} -function wNc(){tNc()} -function PYc(){OYc()} -function nZc(){lZc()} -function q3c(){p3c()} -function Z7c(){X7c()} -function Z9c(){Y9c()} -function _ad(){Zad()} -function kdd(){idd()} -function $md(){Smd()} -function HGd(){tGd()} -function hLd(){NKd()} -function J6d(){Uge()} -function Mvb(a){uCb(a)} -function Yb(a){this.a=a} -function cc(a){this.a=a} -function cj(a){this.a=a} -function ij(a){this.a=a} -function Dj(a){this.a=a} -function df(a){this.a=a} -function kf(a){this.a=a} -function ah(a){this.a=a} -function lh(a){this.a=a} -function th(a){this.a=a} -function Ph(a){this.a=a} -function vi(a){this.a=a} -function Ci(a){this.a=a} -function Fk(a){this.a=a} -function Ln(a){this.a=a} -function ap(a){this.a=a} -function zp(a){this.a=a} -function Yp(a){this.a=a} -function qq(a){this.a=a} -function Dq(a){this.a=a} -function wr(a){this.a=a} -function Ir(a){this.b=a} -function sj(a){this.c=a} -function sw(a){this.a=a} -function fw(a){this.a=a} -function xw(a){this.a=a} -function Cw(a){this.a=a} -function Qw(a){this.a=a} -function Rw(a){this.a=a} -function Xw(a){this.a=a} -function Xv(a){this.a=a} -function Sv(a){this.a=a} -function eu(a){this.a=a} -function Zx(a){this.a=a} -function _x(a){this.a=a} -function xy(a){this.a=a} -function xB(a){this.a=a} -function HB(a){this.a=a} -function TB(a){this.a=a} -function fC(a){this.a=a} -function wB(){this.a=[]} -function MBb(a,b){a.a=b} -function w_b(a,b){a.a=b} -function x_b(a,b){a.b=b} -function YOb(a,b){a.b=b} -function $Ob(a,b){a.b=b} -function ZGb(a,b){a.j=b} -function qNb(a,b){a.g=b} -function rNb(a,b){a.i=b} -function dRb(a,b){a.c=b} -function eRb(a,b){a.d=b} -function z_b(a,b){a.d=b} -function y_b(a,b){a.c=b} -function __b(a,b){a.k=b} -function E0b(a,b){a.c=b} -function njc(a,b){a.c=b} -function mjc(a,b){a.a=b} -function dFc(a,b){a.a=b} -function eFc(a,b){a.f=b} -function nOc(a,b){a.a=b} -function oOc(a,b){a.b=b} -function pOc(a,b){a.d=b} -function qOc(a,b){a.i=b} -function rOc(a,b){a.o=b} -function sOc(a,b){a.r=b} -function $Pc(a,b){a.a=b} -function _Pc(a,b){a.b=b} -function DVc(a,b){a.e=b} -function EVc(a,b){a.f=b} -function FVc(a,b){a.g=b} -function SZc(a,b){a.e=b} -function TZc(a,b){a.f=b} -function c$c(a,b){a.f=b} -function bJd(a,b){a.n=b} -function A1d(a,b){a.a=b} -function J1d(a,b){a.a=b} -function B1d(a,b){a.c=b} -function K1d(a,b){a.c=b} -function L1d(a,b){a.d=b} -function M1d(a,b){a.e=b} -function N1d(a,b){a.g=b} -function d2d(a,b){a.a=b} -function e2d(a,b){a.c=b} -function f2d(a,b){a.d=b} -function g2d(a,b){a.e=b} -function h2d(a,b){a.f=b} -function i2d(a,b){a.j=b} -function Z8d(a,b){a.a=b} -function $8d(a,b){a.b=b} -function g9d(a,b){a.a=b} -function Cic(a){a.b=a.a} -function Dg(a){a.c=a.d.d} -function vib(a){this.d=a} -function eib(a){this.a=a} -function Pib(a){this.a=a} -function Vib(a){this.a=a} -function $ib(a){this.a=a} -function mcb(a){this.a=a} -function Mcb(a){this.a=a} -function Xcb(a){this.a=a} -function Ndb(a){this.a=a} -function _db(a){this.a=a} -function teb(a){this.a=a} -function Qeb(a){this.a=a} -function djb(a){this.a=a} -function Gjb(a){this.a=a} -function Njb(a){this.a=a} -function Bjb(a){this.b=a} -function lnb(a){this.b=a} -function Dnb(a){this.b=a} -function anb(a){this.a=a} -function Mob(a){this.a=a} -function Rob(a){this.a=a} -function iob(a){this.c=a} -function olb(a){this.c=a} -function qub(a){this.c=a} -function Tub(a){this.a=a} -function Vub(a){this.a=a} -function Xub(a){this.a=a} -function Zub(a){this.a=a} -function tpb(a){this.a=a} -function _pb(a){this.a=a} -function Wqb(a){this.a=a} -function nsb(a){this.a=a} -function Rxb(a){this.a=a} -function Txb(a){this.a=a} -function Xxb(a){this.a=a} -function bzb(a){this.a=a} -function tzb(a){this.a=a} -function vzb(a){this.a=a} -function xzb(a){this.a=a} -function Kzb(a){this.a=a} -function Ozb(a){this.a=a} -function iAb(a){this.a=a} -function kAb(a){this.a=a} -function mAb(a){this.a=a} -function BAb(a){this.a=a} -function hBb(a){this.a=a} -function jBb(a){this.a=a} -function nBb(a){this.a=a} -function TBb(a){this.a=a} -function XBb(a){this.a=a} -function QCb(a){this.a=a} -function WCb(a){this.a=a} -function _Cb(a){this.a=a} -function dEb(a){this.a=a} -function QGb(a){this.a=a} -function YGb(a){this.a=a} -function tKb(a){this.a=a} -function CLb(a){this.a=a} -function JMb(a){this.a=a} -function RNb(a){this.a=a} -function kQb(a){this.a=a} -function mQb(a){this.a=a} -function FQb(a){this.a=a} -function ETb(a){this.a=a} -function UTb(a){this.a=a} -function dUb(a){this.a=a} -function hUb(a){this.a=a} -function EZb(a){this.a=a} -function j$b(a){this.a=a} -function v$b(a){this.e=a} -function J0b(a){this.a=a} -function M0b(a){this.a=a} -function R0b(a){this.a=a} -function U0b(a){this.a=a} -function i2b(a){this.a=a} -function k2b(a){this.a=a} -function o2b(a){this.a=a} -function s2b(a){this.a=a} -function G2b(a){this.a=a} -function I2b(a){this.a=a} -function K2b(a){this.a=a} -function M2b(a){this.a=a} -function W3b(a){this.a=a} -function $3b(a){this.a=a} -function V4b(a){this.a=a} -function u5b(a){this.a=a} -function A7b(a){this.a=a} -function G7b(a){this.a=a} -function J7b(a){this.a=a} -function M7b(a){this.a=a} -function Mbc(a){this.a=a} -function Pbc(a){this.a=a} -function lac(a){this.a=a} -function nac(a){this.a=a} -function qcc(a){this.a=a} -function Gdc(a){this.a=a} -function $dc(a){this.a=a} -function cec(a){this.a=a} -function _ec(a){this.a=a} -function pfc(a){this.a=a} -function Bfc(a){this.a=a} -function Lfc(a){this.a=a} -function ygc(a){this.a=a} -function Dgc(a){this.a=a} -function shc(a){this.a=a} -function uhc(a){this.a=a} -function whc(a){this.a=a} -function Chc(a){this.a=a} -function Ehc(a){this.a=a} -function Ohc(a){this.a=a} -function Yhc(a){this.a=a} -function Tkc(a){this.a=a} -function Vkc(a){this.a=a} -function Olc(a){this.a=a} -function pnc(a){this.a=a} -function rnc(a){this.a=a} -function dpc(a){this.a=a} -function fpc(a){this.a=a} -function GCc(a){this.a=a} -function KCc(a){this.a=a} -function mDc(a){this.a=a} -function jEc(a){this.a=a} -function HEc(a){this.a=a} -function FEc(a){this.c=a} -function qoc(a){this.b=a} -function bFc(a){this.a=a} -function GFc(a){this.a=a} -function iGc(a){this.a=a} -function kGc(a){this.a=a} -function mGc(a){this.a=a} -function $Gc(a){this.a=a} -function hIc(a){this.a=a} -function lIc(a){this.a=a} -function pIc(a){this.a=a} -function tIc(a){this.a=a} -function xIc(a){this.a=a} -function zIc(a){this.a=a} -function CIc(a){this.a=a} -function LIc(a){this.a=a} -function CKc(a){this.a=a} -function IKc(a){this.a=a} -function MKc(a){this.a=a} -function $Kc(a){this.a=a} -function cLc(a){this.a=a} -function jLc(a){this.a=a} -function rLc(a){this.a=a} -function xLc(a){this.a=a} -function OMc(a){this.a=a} -function ZOc(a){this.a=a} -function ZRc(a){this.a=a} -function aSc(a){this.a=a} -function I$c(a){this.a=a} -function K$c(a){this.a=a} -function M$c(a){this.a=a} -function O$c(a){this.a=a} -function U$c(a){this.a=a} -function n1c(a){this.a=a} -function z1c(a){this.a=a} -function B1c(a){this.a=a} -function Q2c(a){this.a=a} -function U2c(a){this.a=a} -function z3c(a){this.a=a} -function med(a){this.a=a} -function Xed(a){this.a=a} -function _ed(a){this.a=a} -function Qfd(a){this.a=a} -function Bgd(a){this.a=a} -function $gd(a){this.a=a} -function lrd(a){this.a=a} -function urd(a){this.a=a} -function vrd(a){this.a=a} -function wrd(a){this.a=a} -function xrd(a){this.a=a} -function yrd(a){this.a=a} -function zrd(a){this.a=a} -function Ard(a){this.a=a} -function Brd(a){this.a=a} -function Crd(a){this.a=a} -function Ird(a){this.a=a} -function Krd(a){this.a=a} -function Lrd(a){this.a=a} -function Mrd(a){this.a=a} -function Nrd(a){this.a=a} -function Prd(a){this.a=a} -function Srd(a){this.a=a} -function Yrd(a){this.a=a} -function Zrd(a){this.a=a} -function _rd(a){this.a=a} -function asd(a){this.a=a} -function bsd(a){this.a=a} -function csd(a){this.a=a} -function dsd(a){this.a=a} -function msd(a){this.a=a} -function osd(a){this.a=a} -function qsd(a){this.a=a} -function ssd(a){this.a=a} -function Wsd(a){this.a=a} -function Lsd(a){this.b=a} -function thd(a){this.f=a} -function qtd(a){this.a=a} -function yBd(a){this.a=a} -function GBd(a){this.a=a} -function MBd(a){this.a=a} -function SBd(a){this.a=a} -function iCd(a){this.a=a} -function YMd(a){this.a=a} -function GNd(a){this.a=a} -function EPd(a){this.a=a} -function EQd(a){this.a=a} -function NTd(a){this.a=a} -function qOd(a){this.b=a} -function lVd(a){this.c=a} -function VVd(a){this.e=a} -function iYd(a){this.a=a} -function RYd(a){this.a=a} -function ZYd(a){this.a=a} -function z0d(a){this.a=a} -function O0d(a){this.a=a} -function s0d(a){this.d=a} -function W5d(a){this.a=a} -function cge(a){this.a=a} -function xfe(a){this.e=a} -function Tfd(){this.a=0} -function jkb(){Vjb(this)} -function Rkb(){Ckb(this)} -function Lqb(){Uhb(this)} -function lEb(){kEb(this)} -function A_b(){s_b(this)} -function UQd(){this.c=FQd} -function v6d(a,b){b.Wb(a)} -function moc(a,b){a.b+=b} -function yXb(a){a.b=new Ji} -function vbb(a){return a.e} -function DB(a){return a.a} -function LB(a){return a.a} -function ZB(a){return a.a} -function lC(a){return a.a} -function EC(a){return a.a} -function wC(){return null} -function SB(){return null} -function hcb(){mvd();ovd()} -function zJb(a){a.b.tf(a.e)} -function j5b(a,b){a.b=b-a.b} -function g5b(a,b){a.a=b-a.a} -function PXc(a,b){b.ad(a.a)} -function plc(a,b){G0b(b,a)} -function hp(a,b,c){a.Od(c,b)} -function As(a,b){a.e=b;b.b=a} -function Zl(a){Ql();this.a=a} -function jq(a){Ql();this.a=a} -function sq(a){Ql();this.a=a} -function Fq(a){im();this.a=a} -function Sz(a){Rz();Qz.be(a)} -function gz(){Xy.call(this)} -function xcb(){Xy.call(this)} -function pcb(){gz.call(this)} -function tcb(){gz.call(this)} -function Bdb(){gz.call(this)} -function Vdb(){gz.call(this)} -function Ydb(){gz.call(this)} -function Geb(){gz.call(this)} -function bgb(){gz.call(this)} -function Apb(){gz.call(this)} -function Jpb(){gz.call(this)} -function utb(){gz.call(this)} -function x2c(){gz.call(this)} -function rQd(){this.a=this} -function MPd(){this.Bb|=256} -function tTb(){this.b=new mt} -function fA(){fA=ccb;new Lqb} -function rcb(){pcb.call(this)} -function dCb(a,b){a.length=b} -function Tvb(a,b){Ekb(a.a,b)} -function sKb(a,b){UHb(a.c,b)} -function SMc(a,b){Qqb(a.b,b)} -function vBd(a,b){uAd(a.a,b)} -function wBd(a,b){vAd(a.a,b)} -function GLd(a,b){Uhd(a.e,b)} -function d7d(a){D2d(a.c,a.b)} -function mj(a,b){a.kc().Nb(b)} -function Odb(a){this.a=Tdb(a)} -function Tqb(){this.a=new Lqb} -function gyb(){this.a=new Lqb} -function Wvb(){this.a=new Rkb} -function KFb(){this.a=new Rkb} -function PFb(){this.a=new Rkb} -function FFb(){this.a=new yFb} -function pGb(){this.a=new MFb} -function ZQb(){this.a=new MQb} -function Gxb(){this.a=new Pwb} -function jUb(){this.a=new PTb} -function sDb(){this.a=new oDb} -function zDb(){this.a=new tDb} -function CWb(){this.a=new Rkb} -function HXb(){this.a=new Rkb} -function nYb(){this.a=new Rkb} -function BYb(){this.a=new Rkb} -function fLb(){this.d=new Rkb} -function vYb(){this.a=new Tqb} -function a2b(){this.a=new Lqb} -function wZb(){this.b=new Lqb} -function TCc(){this.b=new Rkb} -function zJc(){this.e=new Rkb} -function uMc(){this.d=new Rkb} -function wdc(){this.a=new xkc} -function vKc(){Rkb.call(this)} -function twb(){Wvb.call(this)} -function oHb(){$Gb.call(this)} -function LXb(){HXb.call(this)} -function L_b(){H_b.call(this)} -function H_b(){A_b.call(this)} -function p0b(){A_b.call(this)} -function s0b(){p0b.call(this)} -function WMc(){VMc.call(this)} -function bNc(){VMc.call(this)} -function EPc(){CPc.call(this)} -function JPc(){CPc.call(this)} -function OPc(){CPc.call(this)} -function w1c(){s1c.call(this)} -function s7c(){Psb.call(this)} -function apd(){Ald.call(this)} -function ppd(){Ald.call(this)} -function lDd(){YCd.call(this)} -function NDd(){YCd.call(this)} -function mFd(){Lqb.call(this)} -function vFd(){Lqb.call(this)} -function GFd(){Lqb.call(this)} -function KPd(){Tqb.call(this)} -function OJd(){hJd.call(this)} -function aQd(){MPd.call(this)} -function SSd(){FId.call(this)} -function rUd(){FId.call(this)} -function oUd(){Lqb.call(this)} -function NYd(){Lqb.call(this)} -function cZd(){Lqb.call(this)} -function R8d(){MGd.call(this)} -function o9d(){MGd.call(this)} -function i9d(){R8d.call(this)} -function hee(){ude.call(this)} -function Dd(a){yd.call(this,a)} -function Hd(a){yd.call(this,a)} -function ph(a){lh.call(this,a)} -function Sh(a){Wc.call(this,a)} -function oi(a){Sh.call(this,a)} -function Ii(a){Wc.call(this,a)} -function Zdd(){this.a=new Psb} -function CPc(){this.a=new Tqb} -function s1c(){this.a=new Lqb} -function QSc(){this.a=new Rkb} -function D2c(){this.j=new Rkb} -function QXc(){this.a=new UXc} -function e_c(){this.a=new d_c} -function YCd(){this.a=new aDd} -function _k(){_k=ccb;$k=new al} -function Lk(){Lk=ccb;Kk=new Mk} -function wb(){wb=ccb;vb=new xb} -function hs(){hs=ccb;gs=new is} -function rs(a){Sh.call(this,a)} -function Gp(a){Sh.call(this,a)} -function xp(a){Lo.call(this,a)} -function Ep(a){Lo.call(this,a)} -function Tp(a){Wn.call(this,a)} -function wx(a){un.call(this,a)} -function ov(a){dv.call(this,a)} -function Mv(a){Br.call(this,a)} -function Ov(a){Br.call(this,a)} -function Lw(a){Br.call(this,a)} -function hz(a){Yy.call(this,a)} -function MB(a){hz.call(this,a)} -function eC(){fC.call(this,{})} -function Ftb(a){Atb();this.a=a} -function zwb(a){a.b=null;a.c=0} -function Vy(a,b){a.e=b;Sy(a,b)} -function LVb(a,b){a.a=b;NVb(a)} -function lIb(a,b,c){a.a[b.g]=c} -function vfd(a,b,c){Dfd(c,a,b)} -function Odc(a,b){rjc(b.i,a.n)} -function Wyc(a,b){Xyc(a).td(b)} -function ERb(a,b){return a*a/b} -function Xr(a,b){return a.g-b.g} -function tC(a){return new TB(a)} -function vC(a){return new yC(a)} -function ocb(a){hz.call(this,a)} -function qcb(a){hz.call(this,a)} -function ucb(a){hz.call(this,a)} -function vcb(a){Yy.call(this,a)} -function fGc(a){LFc();this.a=a} -function c0d(a){kzd();this.a=a} -function bhd(a){Rgd();this.f=a} -function dhd(a){Rgd();this.f=a} -function Cdb(a){hz.call(this,a)} -function Wdb(a){hz.call(this,a)} -function Zdb(a){hz.call(this,a)} -function Feb(a){hz.call(this,a)} -function Heb(a){hz.call(this,a)} -function Ccb(a){return uCb(a),a} -function Edb(a){return uCb(a),a} -function Gdb(a){return uCb(a),a} -function jfb(a){return uCb(a),a} -function tfb(a){return uCb(a),a} -function akb(a){return a.b==a.c} -function Hwb(a){return !!a&&a.b} -function pIb(a){return !!a&&a.k} -function qIb(a){return !!a&&a.j} -function amb(a){uCb(a);this.a=a} -function wVb(a){qVb(a);return a} -function Blb(a){Glb(a,a.length)} -function cgb(a){hz.call(this,a)} -function cqd(a){hz.call(this,a)} -function n8d(a){hz.call(this,a)} -function y2c(a){hz.call(this,a)} -function z2c(a){hz.call(this,a)} -function mde(a){hz.call(this,a)} -function pc(a){qc.call(this,a,0)} -function Ji(){Ki.call(this,12,3)} -function Kz(){Kz=ccb;Jz=new Nz} -function jz(){jz=ccb;iz=new nb} -function KA(){KA=ccb;JA=new MA} -function OB(){OB=ccb;NB=new PB} -function jc(){throw vbb(new bgb)} -function zh(){throw vbb(new bgb)} -function Pi(){throw vbb(new bgb)} -function Pj(){throw vbb(new bgb)} -function Qj(){throw vbb(new bgb)} -function Ym(){throw vbb(new bgb)} -function Gb(){this.a=GD(Qb(She))} -function oy(a){Ql();this.a=Qb(a)} -function Bs(a,b){a.Td(b);b.Sd(a)} -function iw(a,b){a.a.ec().Mc(b)} -function CYb(a,b,c){a.c.lf(b,c)} -function scb(a){qcb.call(this,a)} -function Oeb(a){Wdb.call(this,a)} -function Hfb(){mcb.call(this,'')} -function Ifb(){mcb.call(this,'')} -function Ufb(){mcb.call(this,'')} -function Vfb(){mcb.call(this,'')} -function Xfb(a){qcb.call(this,a)} -function zob(a){lnb.call(this,a)} -function Yob(a){Inb.call(this,a)} -function Gob(a){zob.call(this,a)} -function Mk(){Fk.call(this,null)} -function al(){Fk.call(this,null)} -function Az(){Az=ccb;!!(Rz(),Qz)} -function wrb(){wrb=ccb;vrb=yrb()} -function Mtb(a){return a.a?a.b:0} -function Vtb(a){return a.a?a.b:0} -function Lcb(a,b){return a.a-b.a} -function Wcb(a,b){return a.a-b.a} -function Peb(a,b){return a.a-b.a} -function eCb(a,b){return PC(a,b)} -function GC(a,b){return rdb(a,b)} -function _B(b,a){return a in b.a} -function _Db(a,b){a.f=b;return a} -function ZDb(a,b){a.b=b;return a} -function $Db(a,b){a.c=b;return a} -function aEb(a,b){a.g=b;return a} -function HGb(a,b){a.a=b;return a} -function IGb(a,b){a.f=b;return a} -function JGb(a,b){a.k=b;return a} -function dLb(a,b){a.a=b;return a} -function eLb(a,b){a.e=b;return a} -function zVb(a,b){a.e=b;return a} -function AVb(a,b){a.f=b;return a} -function KOb(a,b){a.b=true;a.d=b} -function DHb(a,b){a.b=new g7c(b)} -function uvb(a,b,c){b.td(a.a[c])} -function zvb(a,b,c){b.we(a.a[c])} -function wJc(a,b){return a.b-b.b} -function kOc(a,b){return a.g-b.g} -function WQc(a,b){return a.s-b.s} -function Lic(a,b){return a?0:b-1} -function SFc(a,b){return a?0:b-1} -function RFc(a,b){return a?b-1:0} -function M2c(a,b){return b.Yf(a)} -function M3c(a,b){a.b=b;return a} -function L3c(a,b){a.a=b;return a} -function N3c(a,b){a.c=b;return a} -function O3c(a,b){a.d=b;return a} -function P3c(a,b){a.e=b;return a} -function Q3c(a,b){a.f=b;return a} -function b4c(a,b){a.a=b;return a} -function c4c(a,b){a.b=b;return a} -function d4c(a,b){a.c=b;return a} -function z5c(a,b){a.c=b;return a} -function y5c(a,b){a.b=b;return a} -function A5c(a,b){a.d=b;return a} -function B5c(a,b){a.e=b;return a} -function C5c(a,b){a.f=b;return a} -function D5c(a,b){a.g=b;return a} -function E5c(a,b){a.a=b;return a} -function F5c(a,b){a.i=b;return a} -function G5c(a,b){a.j=b;return a} -function Vdd(a,b){a.k=b;return a} -function Wdd(a,b){a.j=b;return a} -function ykc(a,b){gkc();F0b(b,a)} -function T$c(a,b,c){R$c(a.a,b,c)} -function RGc(a){cEc.call(this,a)} -function iHc(a){cEc.call(this,a)} -function t7c(a){Qsb.call(this,a)} -function aPb(a){_Ob.call(this,a)} -function Ixd(a){zud.call(this,a)} -function dCd(a){ZBd.call(this,a)} -function fCd(a){ZBd.call(this,a)} -function p_b(){q_b.call(this,'')} -function d7c(){this.a=0;this.b=0} -function aPc(){this.b=0;this.a=0} -function NJd(a,b){a.b=0;DId(a,b)} -function X1d(a,b){a.c=b;a.b=true} -function Oc(a,b){return a.c._b(b)} -function gdb(a){return a.e&&a.e()} -function Vd(a){return !a?null:a.d} -function sn(a,b){return Gv(a.b,b)} -function Fv(a){return !a?null:a.g} -function Kv(a){return !a?null:a.i} -function hdb(a){fdb(a);return a.o} -function Fhd(){Fhd=ccb;Ehd=ond()} -function Hhd(){Hhd=ccb;Ghd=Cod()} -function LFd(){LFd=ccb;KFd=qZd()} -function p8d(){p8d=ccb;o8d=Y9d()} -function r8d(){r8d=ccb;q8d=dae()} -function mvd(){mvd=ccb;lvd=n4c()} -function Srb(){throw vbb(new bgb)} -function enb(){throw vbb(new bgb)} -function fnb(){throw vbb(new bgb)} -function gnb(){throw vbb(new bgb)} -function jnb(){throw vbb(new bgb)} -function Cnb(){throw vbb(new bgb)} -function Uqb(a){this.a=new Mqb(a)} -function tgb(a){lgb();ngb(this,a)} -function Hxb(a){this.a=new Qwb(a)} -function _ub(a,b){while(a.ye(b));} -function Sub(a,b){while(a.sd(b));} -function Bfb(a,b){a.a+=b;return a} -function Cfb(a,b){a.a+=b;return a} -function Ffb(a,b){a.a+=b;return a} -function Lfb(a,b){a.a+=b;return a} -function WAb(a){Tzb(a);return a.a} -function Wsb(a){return a.b!=a.d.c} -function pD(a){return a.l|a.m<<22} -function aIc(a,b){return a.d[b.p]} -function h2c(a,b){return c2c(a,b)} -function cCb(a,b,c){a.splice(b,c)} -function WHb(a){a.c?VHb(a):XHb(a)} -function jVc(a){this.a=0;this.b=a} -function ZUc(){this.a=new L2c(K$)} -function tRc(){this.b=new L2c(h$)} -function Q$c(){this.b=new L2c(J_)} -function d_c(){this.b=new L2c(J_)} -function OCd(){throw vbb(new bgb)} -function PCd(){throw vbb(new bgb)} -function QCd(){throw vbb(new bgb)} -function RCd(){throw vbb(new bgb)} -function SCd(){throw vbb(new bgb)} -function TCd(){throw vbb(new bgb)} -function UCd(){throw vbb(new bgb)} -function VCd(){throw vbb(new bgb)} -function WCd(){throw vbb(new bgb)} -function XCd(){throw vbb(new bgb)} -function ahe(){throw vbb(new utb)} -function bhe(){throw vbb(new utb)} -function Rge(a){this.a=new ege(a)} -function ege(a){dge(this,a,Vee())} -function Fhe(a){return !a||Ehe(a)} -function dde(a){return $ce[a]!=-1} -function Iz(){xz!=0&&(xz=0);zz=-1} -function Ybb(){Wbb==null&&(Wbb=[])} -function ONd(a,b){Rxd(ZKd(a.a),b)} -function TNd(a,b){Rxd(ZKd(a.a),b)} -function Yf(a,b){zf.call(this,a,b)} -function $f(a,b){Yf.call(this,a,b)} -function Hf(a,b){this.b=a;this.c=b} -function rk(a,b){this.b=a;this.a=b} -function ek(a,b){this.a=a;this.b=b} -function gk(a,b){this.a=a;this.b=b} -function pk(a,b){this.a=a;this.b=b} -function yk(a,b){this.a=a;this.b=b} -function Ak(a,b){this.a=a;this.b=b} -function Fj(a,b){this.a=a;this.b=b} -function _j(a,b){this.a=a;this.b=b} -function dr(a,b){this.a=a;this.b=b} -function zr(a,b){this.b=a;this.a=b} -function So(a,b){this.b=a;this.a=b} -function qp(a,b){this.b=a;this.a=b} -function $q(a,b){this.b=a;this.a=b} -function $r(a,b){this.f=a;this.g=b} -function ne(a,b){this.e=a;this.d=b} -function Wo(a,b){this.g=a;this.i=b} -function bu(a,b){this.a=a;this.b=b} -function qu(a,b){this.a=a;this.f=b} -function qv(a,b){this.b=a;this.c=b} -function ox(a,b){this.a=a;this.b=b} -function Px(a,b){this.a=a;this.b=b} -function mC(a,b){this.a=a;this.b=b} -function Wc(a){Lb(a.dc());this.c=a} -function rf(a){this.b=BD(Qb(a),83)} -function Zv(a){this.a=BD(Qb(a),83)} -function dv(a){this.a=BD(Qb(a),15)} -function $u(a){this.a=BD(Qb(a),15)} -function Br(a){this.b=BD(Qb(a),47)} -function eB(){this.q=new $wnd.Date} -function Zfb(){Zfb=ccb;Yfb=new jcb} -function Emb(){Emb=ccb;Dmb=new Fmb} -function Vhb(a){return a.f.c+a.g.c} -function hnb(a,b){return a.b.Hc(b)} -function inb(a,b){return a.b.Ic(b)} -function knb(a,b){return a.b.Qc(b)} -function Dob(a,b){return a.b.Hc(b)} -function dob(a,b){return a.c.uc(b)} -function Rqb(a,b){return a.a._b(b)} -function fob(a,b){return pb(a.c,b)} -function jt(a,b){return Mhb(a.b,b)} -function Lp(a,b){return a>b&&b<Iie} -function Ryb(a,b){return a.Gc(b),a} -function Syb(a,b){return ye(a,b),a} -function sC(a){return GB(),a?FB:EB} -function Mqb(a){Whb.call(this,a,0)} -function Pwb(){Qwb.call(this,null)} -function yAb(){Vzb.call(this,null)} -function Gqb(a){this.c=a;Dqb(this)} -function Psb(){Csb(this);Osb(this)} -function MAb(a,b){Tzb(a);a.a.Nb(b)} -function Myb(a,b){a.Gc(b);return a} -function qDb(a,b){a.a.f=b;return a} -function wDb(a,b){a.a.d=b;return a} -function xDb(a,b){a.a.g=b;return a} -function yDb(a,b){a.a.j=b;return a} -function BFb(a,b){a.a.a=b;return a} -function CFb(a,b){a.a.d=b;return a} -function DFb(a,b){a.a.e=b;return a} -function EFb(a,b){a.a.g=b;return a} -function oGb(a,b){a.a.f=b;return a} -function TGb(a){a.b=false;return a} -function Ltb(){Ltb=ccb;Ktb=new Otb} -function Utb(){Utb=ccb;Ttb=new Wtb} -function $xb(){$xb=ccb;Zxb=new byb} -function $Yb(){$Yb=ccb;ZYb=new dZb} -function cPb(){cPb=ccb;bPb=new dPb} -function EAb(){EAb=ccb;DAb=new PBb} -function a$b(){a$b=ccb;_Zb=new P$b} -function FDb(){FDb=ccb;EDb=new GDb} -function xUb(){xUb=ccb;wUb=new DUb} -function x2b(){x2b=ccb;w2b=new d7c} -function iVb(){iVb=ccb;hVb=new jVb} -function nVb(){nVb=ccb;mVb=new OVb} -function LWb(){LWb=ccb;KWb=new QWb} -function b4b(){b4b=ccb;a4b=new l4b} -function q9b(){q9b=ccb;p9b=new w9b} -function qgc(){qgc=ccb;pgc=new dic} -function Imc(){Imc=ccb;Hmc=new Wmc} -function GUc(){GUc=ccb;FUc=new j3c} -function i_c(){i_c=ccb;h_c=new k_c} -function s_c(){s_c=ccb;r_c=new t_c} -function R0c(){R0c=ccb;Q0c=new T0c} -function Vyc(){Vyc=ccb;Uyc=new Ved} -function DCc(){vCc();this.c=new Ji} -function k_c(){$r.call(this,Une,0)} -function r4c(a,b){Xrb(a.c.b,b.c,b)} -function s4c(a,b){Xrb(a.c.c,b.b,b)} -function B3c(a,b,c){Shb(a.d,b.f,c)} -function kKb(a,b,c,d){jKb(a,d,b,c)} -function E3b(a,b,c,d){J3b(d,a,b,c)} -function e9b(a,b,c,d){f9b(d,a,b,c)} -function g3c(a,b){a.a=b.g;return a} -function DQd(a,b){return qA(a.a,b)} -function nQd(a){return a.b?a.b:a.a} -function $Oc(a){return (a.c+a.a)/2} -function Pgd(){Pgd=ccb;Ogd=new Ahd} -function AFd(){AFd=ccb;zFd=new BFd} -function tFd(){tFd=ccb;sFd=new vFd} -function EFd(){EFd=ccb;DFd=new GFd} -function yFd(){yFd=ccb;xFd=new oUd} -function JFd(){JFd=ccb;IFd=new cZd} -function nRd(){nRd=ccb;mRd=new u4d} -function LRd(){LRd=ccb;KRd=new y4d} -function g5d(){g5d=ccb;f5d=new h5d} -function Q6d(){Q6d=ccb;P6d=new U6d} -function pEd(){pEd=ccb;oEd=new Lqb} -function tZd(){tZd=ccb;rZd=new Rkb} -function Xge(){Xge=ccb;Wge=new dhe} -function Hz(a){$wnd.clearTimeout(a)} -function jw(a){this.a=BD(Qb(a),224)} -function Lv(a){return BD(a,42).cd()} -function sib(a){return a.b<a.d.gc()} -function Lpb(a,b){return tqb(a.a,b)} -function Dbb(a,b){return ybb(a,b)>0} -function Gbb(a,b){return ybb(a,b)<0} -function Crb(a,b){return a.a.get(b)} -function icb(b,a){return a.split(b)} -function Vrb(a,b){return Mhb(a.e,b)} -function Nvb(a){return uCb(a),false} -function Rub(a){Kub.call(this,a,21)} -function wcb(a,b){Zy.call(this,a,b)} -function mxb(a,b){$r.call(this,a,b)} -function Gyb(a,b){$r.call(this,a,b)} -function zx(a){yx();Wn.call(this,a)} -function zlb(a,b){Dlb(a,a.length,b)} -function Alb(a,b){Flb(a,a.length,b)} -function ABb(a,b,c){b.ud(a.a.Ge(c))} -function uBb(a,b,c){b.we(a.a.Fe(c))} -function GBb(a,b,c){b.td(a.a.Kb(c))} -function Zq(a,b,c){a.Mb(c)&&b.td(c)} -function aCb(a,b,c){a.splice(b,0,c)} -function lDb(a,b){return uqb(a.e,b)} -function pjb(a,b){this.d=a;this.e=b} -function kqb(a,b){this.b=a;this.a=b} -function VBb(a,b){this.b=a;this.a=b} -function BEb(a,b){this.b=a;this.a=b} -function sBb(a,b){this.a=a;this.b=b} -function yBb(a,b){this.a=a;this.b=b} -function EBb(a,b){this.a=a;this.b=b} -function KBb(a,b){this.a=a;this.b=b} -function aDb(a,b){this.a=a;this.b=b} -function tMb(a,b){this.b=a;this.a=b} -function oOb(a,b){this.b=a;this.a=b} -function SOb(a,b){$r.call(this,a,b)} -function SMb(a,b){$r.call(this,a,b)} -function NEb(a,b){$r.call(this,a,b)} -function VEb(a,b){$r.call(this,a,b)} -function sFb(a,b){$r.call(this,a,b)} -function hHb(a,b){$r.call(this,a,b)} -function OHb(a,b){$r.call(this,a,b)} -function FIb(a,b){$r.call(this,a,b)} -function wLb(a,b){$r.call(this,a,b)} -function YRb(a,b){$r.call(this,a,b)} -function zTb(a,b){$r.call(this,a,b)} -function rUb(a,b){$r.call(this,a,b)} -function oWb(a,b){$r.call(this,a,b)} -function SXb(a,b){$r.call(this,a,b)} -function k0b(a,b){$r.call(this,a,b)} -function z5b(a,b){$r.call(this,a,b)} -function T8b(a,b){$r.call(this,a,b)} -function ibc(a,b){$r.call(this,a,b)} -function Cec(a,b){this.a=a;this.b=b} -function rfc(a,b){this.a=a;this.b=b} -function Rfc(a,b){this.a=a;this.b=b} -function Tfc(a,b){this.a=a;this.b=b} -function bgc(a,b){this.a=a;this.b=b} -function ngc(a,b){this.a=a;this.b=b} -function Qhc(a,b){this.a=a;this.b=b} -function $hc(a,b){this.a=a;this.b=b} -function Z0b(a,b){this.a=a;this.b=b} -function ZVb(a,b){this.b=a;this.a=b} -function Dfc(a,b){this.b=a;this.a=b} -function dgc(a,b){this.b=a;this.a=b} -function Bmc(a,b){this.b=a;this.a=b} -function cWb(a,b){this.c=a;this.d=b} -function I$b(a,b){this.e=a;this.d=b} -function Unc(a,b){this.a=a;this.b=b} -function Oic(a,b){this.b=b;this.c=a} -function Bjc(a,b){$r.call(this,a,b)} -function Yjc(a,b){$r.call(this,a,b)} -function Gkc(a,b){$r.call(this,a,b)} -function Bpc(a,b){$r.call(this,a,b)} -function Jpc(a,b){$r.call(this,a,b)} -function Tpc(a,b){$r.call(this,a,b)} -function cqc(a,b){$r.call(this,a,b)} -function oqc(a,b){$r.call(this,a,b)} -function yqc(a,b){$r.call(this,a,b)} -function Hqc(a,b){$r.call(this,a,b)} -function Uqc(a,b){$r.call(this,a,b)} -function arc(a,b){$r.call(this,a,b)} -function mrc(a,b){$r.call(this,a,b)} -function zrc(a,b){$r.call(this,a,b)} -function Prc(a,b){$r.call(this,a,b)} -function Yrc(a,b){$r.call(this,a,b)} -function fsc(a,b){$r.call(this,a,b)} -function nsc(a,b){$r.call(this,a,b)} -function nzc(a,b){$r.call(this,a,b)} -function zzc(a,b){$r.call(this,a,b)} -function Kzc(a,b){$r.call(this,a,b)} -function Xzc(a,b){$r.call(this,a,b)} -function Dtc(a,b){$r.call(this,a,b)} -function lAc(a,b){$r.call(this,a,b)} -function uAc(a,b){$r.call(this,a,b)} -function CAc(a,b){$r.call(this,a,b)} -function LAc(a,b){$r.call(this,a,b)} -function UAc(a,b){$r.call(this,a,b)} -function aBc(a,b){$r.call(this,a,b)} -function uBc(a,b){$r.call(this,a,b)} -function DBc(a,b){$r.call(this,a,b)} -function MBc(a,b){$r.call(this,a,b)} -function sGc(a,b){$r.call(this,a,b)} -function VIc(a,b){$r.call(this,a,b)} -function EIc(a,b){this.b=a;this.a=b} -function qKc(a,b){this.a=a;this.b=b} -function GKc(a,b){this.a=a;this.b=b} -function lLc(a,b){this.a=a;this.b=b} -function mMc(a,b){this.a=a;this.b=b} -function fMc(a,b){$r.call(this,a,b)} -function ZLc(a,b){$r.call(this,a,b)} -function ZMc(a,b){this.b=a;this.d=b} -function IOc(a,b){$r.call(this,a,b)} -function GQc(a,b){$r.call(this,a,b)} -function PQc(a,b){this.a=a;this.b=b} -function RQc(a,b){this.a=a;this.b=b} -function ARc(a,b){$r.call(this,a,b)} -function rSc(a,b){$r.call(this,a,b)} -function TTc(a,b){$r.call(this,a,b)} -function _Tc(a,b){$r.call(this,a,b)} -function RUc(a,b){$r.call(this,a,b)} -function uVc(a,b){$r.call(this,a,b)} -function hWc(a,b){$r.call(this,a,b)} -function rWc(a,b){$r.call(this,a,b)} -function kXc(a,b){$r.call(this,a,b)} -function uXc(a,b){$r.call(this,a,b)} -function AYc(a,b){$r.call(this,a,b)} -function l$c(a,b){$r.call(this,a,b)} -function Z$c(a,b){$r.call(this,a,b)} -function D_c(a,b){$r.call(this,a,b)} -function O_c(a,b){$r.call(this,a,b)} -function c1c(a,b){$r.call(this,a,b)} -function cVb(a,b){return uqb(a.c,b)} -function nnc(a,b){return uqb(b.b,a)} -function x1c(a,b){return -a.b.Je(b)} -function D3c(a,b){return uqb(a.g,b)} -function O5c(a,b){$r.call(this,a,b)} -function a6c(a,b){$r.call(this,a,b)} -function m2c(a,b){this.a=a;this.b=b} -function W2c(a,b){this.a=a;this.b=b} -function f7c(a,b){this.a=a;this.b=b} -function G7c(a,b){$r.call(this,a,b)} -function j8c(a,b){$r.call(this,a,b)} -function iad(a,b){$r.call(this,a,b)} -function rad(a,b){$r.call(this,a,b)} -function Bad(a,b){$r.call(this,a,b)} -function Nad(a,b){$r.call(this,a,b)} -function ibd(a,b){$r.call(this,a,b)} -function tbd(a,b){$r.call(this,a,b)} -function Ibd(a,b){$r.call(this,a,b)} -function Ubd(a,b){$r.call(this,a,b)} -function gcd(a,b){$r.call(this,a,b)} -function scd(a,b){$r.call(this,a,b)} -function Ycd(a,b){$r.call(this,a,b)} -function udd(a,b){$r.call(this,a,b)} -function Jdd(a,b){$r.call(this,a,b)} -function Eed(a,b){$r.call(this,a,b)} -function bfd(a,b){this.a=a;this.b=b} -function dfd(a,b){this.a=a;this.b=b} -function ffd(a,b){this.a=a;this.b=b} -function Kfd(a,b){this.a=a;this.b=b} -function Mfd(a,b){this.a=a;this.b=b} -function Ofd(a,b){this.a=a;this.b=b} -function vgd(a,b){this.a=a;this.b=b} -function qgd(a,b){$r.call(this,a,b)} -function jrd(a,b){this.a=a;this.b=b} -function krd(a,b){this.a=a;this.b=b} -function mrd(a,b){this.a=a;this.b=b} -function nrd(a,b){this.a=a;this.b=b} -function qrd(a,b){this.a=a;this.b=b} -function rrd(a,b){this.a=a;this.b=b} -function srd(a,b){this.b=a;this.a=b} -function trd(a,b){this.b=a;this.a=b} -function Drd(a,b){this.b=a;this.a=b} -function Frd(a,b){this.b=a;this.a=b} -function Hrd(a,b){this.a=a;this.b=b} -function Jrd(a,b){this.a=a;this.b=b} -function Ord(a,b){Xqd(a.a,BD(b,56))} -function BIc(a,b){gIc(a.a,BD(b,11))} -function fIc(a,b){FHc();return b!=a} -function Arb(){wrb();return new vrb} -function CMc(){wMc();this.b=new Tqb} -function NNc(){FNc();this.a=new Tqb} -function eCc(){ZBc();aCc.call(this)} -function Dsd(a,b){$r.call(this,a,b)} -function Urd(a,b){this.a=a;this.b=b} -function Wrd(a,b){this.a=a;this.b=b} -function kGd(a,b){this.a=a;this.b=b} -function nGd(a,b){this.a=a;this.b=b} -function bUd(a,b){this.a=a;this.b=b} -function zVd(a,b){this.a=a;this.b=b} -function C1d(a,b){this.d=a;this.b=b} -function MLd(a,b){this.d=a;this.e=b} -function Wud(a,b){this.f=a;this.c=b} -function f7d(a,b){this.b=a;this.c=b} -function _zd(a,b){this.i=a;this.g=b} -function Y1d(a,b){this.e=a;this.a=b} -function c8d(a,b){this.a=a;this.b=b} -function $Id(a,b){a.i=null;_Id(a,b)} -function ivd(a,b){!!a&&Rhb(cvd,a,b)} -function hCd(a,b){return qAd(a.a,b)} -function e7d(a){return R2d(a.c,a.b)} -function Wd(a){return !a?null:a.dd()} -function PD(a){return a==null?null:a} -function KD(a){return typeof a===Khe} -function LD(a){return typeof a===Lhe} -function ND(a){return typeof a===Mhe} -function Em(a,b){return a.Hd().Xb(b)} -function Kq(a,b){return hr(a.Kc(),b)} -function Bbb(a,b){return ybb(a,b)==0} -function Ebb(a,b){return ybb(a,b)>=0} -function Kbb(a,b){return ybb(a,b)!=0} -function Jdb(a){return ''+(uCb(a),a)} -function pfb(a,b){return a.substr(b)} -function cg(a){ag(a);return a.d.gc()} -function oVb(a){pVb(a,a.c);return a} -function RD(a){CCb(a==null);return a} -function Dfb(a,b){a.a+=''+b;return a} -function Efb(a,b){a.a+=''+b;return a} -function Nfb(a,b){a.a+=''+b;return a} -function Pfb(a,b){a.a+=''+b;return a} -function Qfb(a,b){a.a+=''+b;return a} -function Mfb(a,b){return a.a+=''+b,a} -function Esb(a,b){Gsb(a,b,a.a,a.a.a)} -function Fsb(a,b){Gsb(a,b,a.c.b,a.c)} -function Mqd(a,b,c){Rpd(b,kqd(a,c))} -function Nqd(a,b,c){Rpd(b,kqd(a,c))} -function Dhe(a,b){Hhe(new Fyd(a),b)} -function cB(a,b){a.q.setTime(Sbb(b))} -function fvb(a,b){bvb.call(this,a,b)} -function jvb(a,b){bvb.call(this,a,b)} -function nvb(a,b){bvb.call(this,a,b)} -function Nqb(a){Uhb(this);Ld(this,a)} -function wmb(a){tCb(a,0);return null} -function X6c(a){a.a=0;a.b=0;return a} -function f3c(a,b){a.a=b.g+1;return a} -function PJc(a,b){return a.j[b.p]==2} -function _Pb(a){return VPb(BD(a,79))} -function yJb(){yJb=ccb;xJb=as(wJb())} -function Y8b(){Y8b=ccb;X8b=as(W8b())} -function mt(){this.b=new Mqb(Cv(12))} -function Otb(){this.b=0;this.a=false} -function Wtb(){this.b=0;this.a=false} -function sl(a){this.a=a;ol.call(this)} -function vl(a){this.a=a;ol.call(this)} -function Nsd(a,b){Msd.call(this,a,b)} -function $zd(a,b){Cyd.call(this,a,b)} -function nNd(a,b){_zd.call(this,a,b)} -function s4d(a,b){p4d.call(this,a,b)} -function w4d(a,b){qRd.call(this,a,b)} -function rEd(a,b){pEd();Rhb(oEd,a,b)} -function lcb(a,b){return qfb(a.a,0,b)} -function ww(a,b){return a.a.a.a.cc(b)} -function mb(a,b){return PD(a)===PD(b)} -function Mdb(a,b){return Kdb(a.a,b.a)} -function $db(a,b){return beb(a.a,b.a)} -function seb(a,b){return ueb(a.a,b.a)} -function hfb(a,b){return a.indexOf(b)} -function Ny(a,b){return a==b?0:a?1:-1} -function kB(a){return a<10?'0'+a:''+a} -function Mq(a){return Qb(a),new sl(a)} -function SC(a){return TC(a.l,a.m,a.h)} -function Hdb(a){return QD((uCb(a),a))} -function Idb(a){return QD((uCb(a),a))} -function NIb(a,b){return beb(a.g,b.g)} -function Fbb(a){return typeof a===Lhe} -function mWb(a){return a==hWb||a==kWb} -function nWb(a){return a==hWb||a==iWb} -function G1b(a){return Jkb(a.b.b,a,0)} -function lrb(a){this.a=Arb();this.b=a} -function Frb(a){this.a=Arb();this.b=a} -function swb(a,b){Ekb(a.a,b);return b} -function Z1c(a,b){Ekb(a.c,b);return a} -function E2c(a,b){d3c(a.a,b);return a} -function _gc(a,b){Hgc();return b.a+=a} -function bhc(a,b){Hgc();return b.a+=a} -function ahc(a,b){Hgc();return b.c+=a} -function Nlb(a,b){Klb(a,0,a.length,b)} -function zsb(){Wqb.call(this,new $rb)} -function I_b(){B_b.call(this,0,0,0,0)} -function I6c(){J6c.call(this,0,0,0,0)} -function g7c(a){this.a=a.a;this.b=a.b} -function fad(a){return a==aad||a==bad} -function gad(a){return a==dad||a==_9c} -function Jzc(a){return a==Fzc||a==Ezc} -function fcd(a){return a!=bcd&&a!=ccd} -function oid(a){return a.Lg()&&a.Mg()} -function Gfd(a){return Kkd(BD(a,118))} -function k3c(a){return d3c(new j3c,a)} -function y2d(a,b){return new p4d(b,a)} -function z2d(a,b){return new p4d(b,a)} -function ukd(a,b,c){vkd(a,b);wkd(a,c)} -function _kd(a,b,c){cld(a,b);ald(a,c)} -function bld(a,b,c){dld(a,b);eld(a,c)} -function gmd(a,b,c){hmd(a,b);imd(a,c)} -function nmd(a,b,c){omd(a,b);pmd(a,c)} -function iKd(a,b){$Jd(a,b);_Jd(a,a.D)} -function _ud(a){Wud.call(this,a,true)} -function Xg(a,b,c){Vg.call(this,a,b,c)} -function Ygb(a){Hgb();Zgb.call(this,a)} -function rxb(){mxb.call(this,'Head',1)} -function wxb(){mxb.call(this,'Tail',3)} -function Ckb(a){a.c=KC(SI,Uhe,1,0,5,1)} -function Vjb(a){a.a=KC(SI,Uhe,1,8,5,1)} -function MGb(a){Hkb(a.xf(),new QGb(a))} -function xtb(a){return a!=null?tb(a):0} -function b2b(a,b){return ntd(b,mpd(a))} -function c2b(a,b){return ntd(b,mpd(a))} -function dAb(a,b){return a[a.length]=b} -function gAb(a,b){return a[a.length]=b} -function Vq(a){return lr(a.b.Kc(),a.a)} -function dqd(a,b){return _o(qo(a.d),b)} -function eqd(a,b){return _o(qo(a.g),b)} -function fqd(a,b){return _o(qo(a.j),b)} -function Osd(a,b){Msd.call(this,a.b,b)} -function q0b(a){B_b.call(this,a,a,a,a)} -function HOb(a){a.b&&LOb(a);return a.a} -function IOb(a){a.b&&LOb(a);return a.c} -function uyb(a,b){if(lyb){return}a.b=b} -function lzd(a,b,c){NC(a,b,c);return c} -function mBc(a,b,c){NC(a.c[b.g],b.g,c)} -function _Hd(a,b,c){BD(a.c,69).Xh(b,c)} -function wfd(a,b,c){bld(c,c.i+a,c.j+b)} -function UOd(a,b){wtd(VKd(a.a),XOd(b))} -function bTd(a,b){wtd(QSd(a.a),eTd(b))} -function Lge(a){wfe();xfe.call(this,a)} -function CAd(a){return a==null?0:tb(a)} -function fNc(){fNc=ccb;eNc=new Rpb(v1)} -function h0d(){h0d=ccb;new i0d;new Rkb} -function i0d(){new Lqb;new Lqb;new Lqb} -function GA(){GA=ccb;fA();FA=new Lqb} -function Iy(){Iy=ccb;$wnd.Math.log(2)} -function UVd(){UVd=ccb;TVd=(AFd(),zFd)} -function _ge(){throw vbb(new cgb(Cxe))} -function ohe(){throw vbb(new cgb(Cxe))} -function che(){throw vbb(new cgb(Dxe))} -function rhe(){throw vbb(new cgb(Dxe))} -function Mg(a){this.a=a;Gg.call(this,a)} -function up(a){this.a=a;rf.call(this,a)} -function Bp(a){this.a=a;rf.call(this,a)} -function Okb(a,b){Mlb(a.c,a.c.length,b)} -function llb(a){return a.a<a.c.c.length} -function Eqb(a){return a.a<a.c.a.length} -function Ntb(a,b){return a.a?a.b:b.De()} -function beb(a,b){return a<b?-1:a>b?1:0} -function Deb(a,b){return ybb(a,b)>0?a:b} -function TC(a,b,c){return {l:a,m:b,h:c}} -function Ctb(a,b){a.a!=null&&BIc(b,a.a)} -function Csb(a){a.a=new jtb;a.c=new jtb} -function hDb(a){this.b=a;this.a=new Rkb} -function dOb(a){this.b=new pOb;this.a=a} -function q_b(a){n_b.call(this);this.a=a} -function txb(){mxb.call(this,'Range',2)} -function bUb(){ZTb();this.a=new L2c(zP)} -function Bh(a,b){Qb(b);Ah(a).Jc(new Vw)} -function fKc(a,b){FJc();return b.n.b+=a} -function Tgc(a,b,c){return Rhb(a.g,c,b)} -function LJc(a,b,c){return Rhb(a.k,c,b)} -function r1c(a,b){return Rhb(a.a,b.a,b)} -function jBc(a,b,c){return hBc(b,c,a.c)} -function E6c(a){return new f7c(a.c,a.d)} -function F6c(a){return new f7c(a.c,a.d)} -function R6c(a){return new f7c(a.a,a.b)} -function CQd(a,b){return hA(a.a,b,null)} -function fec(a){QZb(a,null);RZb(a,null)} -function AOc(a){BOc(a,null);COc(a,null)} -function u4d(){qRd.call(this,null,null)} -function y4d(){RRd.call(this,null,null)} -function a7d(a){this.a=a;Lqb.call(this)} -function Pp(a){this.b=(mmb(),new iob(a))} -function Py(a){a.j=KC(VI,nie,310,0,0,1)} -function oAd(a,b,c){a.c.Vc(b,BD(c,133))} -function GAd(a,b,c){a.c.ji(b,BD(c,133))} -function JLd(a,b){Uxd(a);a.Gc(BD(b,15))} -function b7d(a,b){return t2d(a.c,a.b,b)} -function Bv(a,b){return new Qv(a.Kc(),b)} -function Lq(a,b){return rr(a.Kc(),b)!=-1} -function Sqb(a,b){return a.a.Bc(b)!=null} -function pr(a){return a.Ob()?a.Pb():null} -function yfb(a){return zfb(a,0,a.length)} -function JD(a,b){return a!=null&&AD(a,b)} -function $A(a,b){a.q.setHours(b);YA(a,b)} -function Yrb(a,b){if(a.c){jsb(b);isb(b)}} -function nk(a,b,c){BD(a.Kb(c),164).Nb(b)} -function RJc(a,b,c){SJc(a,b,c);return c} -function Eub(a,b,c){a.a=b^1502;a.b=c^kke} -function xHb(a,b,c){return a.a[b.g][c.g]} -function REc(a,b){return a.a[b.c.p][b.p]} -function aEc(a,b){return a.e[b.c.p][b.p]} -function tEc(a,b){return a.c[b.c.p][b.p]} -function OJc(a,b){return a.j[b.p]=aKc(b)} -function k5c(a,b){return cfb(a.f,b.tg())} -function Isd(a,b){return cfb(a.b,b.tg())} -function Sfd(a,b){return a.a<Kcb(b)?-1:1} -function ZDc(a,b,c){return c?b!=0:b!=a-1} -function _6c(a,b,c){a.a=b;a.b=c;return a} -function Y6c(a,b){a.a*=b;a.b*=b;return a} -function mud(a,b,c){NC(a.g,b,c);return c} -function CHb(a,b,c,d){NC(a.a[b.g],c.g,d)} -function EQb(a,b){O6c(b,a.a.a.a,a.a.a.b)} -function Ozd(a){a.a=BD(Ajd(a.b.a,4),126)} -function Wzd(a){a.a=BD(Ajd(a.b.a,4),126)} -function otd(a){ytb(a,hue);Rld(a,gtd(a))} -function Atb(){Atb=ccb;ztb=new Ftb(null)} -function Ivb(){Ivb=ccb;Ivb();Hvb=new Ovb} -function FId(){this.Bb|=256;this.Bb|=512} -function Fyd(a){this.i=a;this.f=this.i.j} -function xMd(a,b,c){pMd.call(this,a,b,c)} -function BMd(a,b,c){xMd.call(this,a,b,c)} -function K4d(a,b,c){xMd.call(this,a,b,c)} -function N4d(a,b,c){BMd.call(this,a,b,c)} -function X4d(a,b,c){pMd.call(this,a,b,c)} -function _4d(a,b,c){pMd.call(this,a,b,c)} -function C4d(a,b,c){k2d.call(this,a,b,c)} -function G4d(a,b,c){k2d.call(this,a,b,c)} -function I4d(a,b,c){C4d.call(this,a,b,c)} -function c5d(a,b,c){X4d.call(this,a,b,c)} -function zf(a,b){this.a=a;rf.call(this,b)} -function aj(a,b){this.a=a;pc.call(this,b)} -function kj(a,b){this.a=a;pc.call(this,b)} -function Jj(a,b){this.a=a;pc.call(this,b)} -function Rj(a){this.a=a;sj.call(this,a.d)} -function she(a){this.c=a;this.a=this.c.a} -function xl(a,b){this.a=b;pc.call(this,a)} -function Qo(a,b){this.a=b;Lo.call(this,a)} -function op(a,b){this.a=a;Lo.call(this,b)} -function rj(a,b){return Rl(Xm(a.c)).Xb(b)} -function Eb(a,b){return Db(a,new Ufb,b).a} -function ur(a,b){Qb(b);return new Gr(a,b)} -function Gr(a,b){this.a=b;Br.call(this,a)} -function Hs(a){this.b=a;this.a=this.b.a.e} -function Eg(a){a.b.Qb();--a.d.f.d;bg(a.d)} -function Uk(a){Fk.call(this,BD(Qb(a),35))} -function il(a){Fk.call(this,BD(Qb(a),35))} -function is(){$r.call(this,'INSTANCE',0)} -function Lb(a){if(!a){throw vbb(new Vdb)}} -function Ub(a){if(!a){throw vbb(new Ydb)}} -function ot(a){if(!a){throw vbb(new utb)}} -function I6d(){I6d=ccb;g5d();H6d=new J6d} -function Bcb(){Bcb=ccb;zcb=false;Acb=true} -function Jfb(a){mcb.call(this,(uCb(a),a))} -function Wfb(a){mcb.call(this,(uCb(a),a))} -function Inb(a){lnb.call(this,a);this.a=a} -function Xnb(a){Dnb.call(this,a);this.a=a} -function Zob(a){zob.call(this,a);this.a=a} -function Xy(){Py(this);Ry(this);this._d()} -function Qv(a,b){this.a=b;Br.call(this,a)} -function au(a,b){return new xu(a.a,a.b,b)} -function kfb(a,b){return a.lastIndexOf(b)} -function ifb(a,b,c){return a.indexOf(b,c)} -function xfb(a){return a==null?Xhe:fcb(a)} -function nz(a){return a==null?null:a.name} -function Etb(a){return a.a!=null?a.a:null} -function or(a){return Wsb(a.a)?nr(a):null} -function Fxb(a,b){return Jwb(a.a,b)!=null} -function uqb(a,b){return !!b&&a.b[b.g]==b} -function FCb(a){return a.$H||(a.$H=++ECb)} -function aD(a){return a.l+a.m*Hje+a.h*Ije} -function pDb(a,b){Ekb(b.a,a.a);return a.a} -function vDb(a,b){Ekb(b.b,a.a);return a.a} -function nGb(a,b){Ekb(b.a,a.a);return a.a} -function Btb(a){sCb(a.a!=null);return a.a} -function Asb(a){Wqb.call(this,new _rb(a))} -function GUb(a,b){HUb.call(this,a,b,null)} -function cxb(a){this.a=a;Bjb.call(this,a)} -function CKb(){CKb=ccb;BKb=new Msd(tle,0)} -function NFb(a,b){++a.b;return Ekb(a.a,b)} -function OFb(a,b){++a.b;return Lkb(a.a,b)} -function n6b(a,b){return Kdb(a.n.a,b.n.a)} -function WKb(a,b){return Kdb(a.c.d,b.c.d)} -function gLb(a,b){return Kdb(a.c.c,b.c.c)} -function zXb(a,b){return BD(Qc(a.b,b),15)} -function s7b(a,b){return a.n.b=(uCb(b),b)} -function t7b(a,b){return a.n.b=(uCb(b),b)} -function a1b(a){return llb(a.a)||llb(a.b)} -function fBc(a,b,c){return gBc(a,b,c,a.b)} -function iBc(a,b,c){return gBc(a,b,c,a.c)} -function i3c(a,b,c){BD(B2c(a,b),21).Fc(c)} -function xBd(a,b,c){vAd(a.a,c);uAd(a.a,b)} -function qRd(a,b){nRd();this.a=a;this.b=b} -function RRd(a,b){LRd();this.b=a;this.c=b} -function hhd(a,b){Rgd();this.f=b;this.d=a} -function qc(a,b){Sb(b,a);this.d=a;this.c=b} -function n5b(a){var b;b=a.a;a.a=a.b;a.b=b} -function chc(a){Hgc();return !!a&&!a.dc()} -function Afe(a){++vfe;return new lge(3,a)} -function jm(a,b){return new Vp(a,a.gc(),b)} -function ns(a){hs();return es((qs(),ps),a)} -function Oyd(a){this.d=a;Fyd.call(this,a)} -function $yd(a){this.c=a;Fyd.call(this,a)} -function bzd(a){this.c=a;Oyd.call(this,a)} -function sgc(){qgc();this.b=new ygc(this)} -function Pu(a){Xj(a,Jie);return new Skb(a)} -function Vz(a){Rz();return parseInt(a)||-1} -function qfb(a,b,c){return a.substr(b,c-b)} -function gfb(a,b,c){return ifb(a,wfb(b),c)} -function Pkb(a){return ZBb(a.c,a.c.length)} -function Yr(a){return a.f!=null?a.f:''+a.g} -function Zr(a){return a.f!=null?a.f:''+a.g} -function Hsb(a){sCb(a.b!=0);return a.a.a.c} -function Isb(a){sCb(a.b!=0);return a.c.b.c} -function Cmd(a){JD(a,150)&&BD(a,150).Gh()} -function Wwb(a){return a.b=BD(tib(a.a),42)} -function Ptb(a){Ltb();this.b=a;this.a=true} -function Xtb(a){Utb();this.b=a;this.a=true} -function Trb(a){a.d=new ksb(a);a.e=new Lqb} -function mkb(a){if(!a){throw vbb(new Apb)}} -function lCb(a){if(!a){throw vbb(new Vdb)}} -function yCb(a){if(!a){throw vbb(new Ydb)}} -function qCb(a){if(!a){throw vbb(new tcb)}} -function sCb(a){if(!a){throw vbb(new utb)}} -function ksb(a){lsb.call(this,a,null,null)} -function dPb(){$r.call(this,'POLYOMINO',0)} -function Cg(a,b,c,d){qg.call(this,a,b,c,d)} -function zkc(a,b){gkc();return Rc(a,b.e,b)} -function azc(a,b,c){Vyc();return c.qg(a,b)} -function wNb(a,b){return !!a.q&&Mhb(a.q,b)} -function JRb(a,b){return a>0?b*b/a:b*b*100} -function CRb(a,b){return a>0?b/(a*a):b*100} -function G2c(a,b,c){return Ekb(b,I2c(a,c))} -function t3c(a,b,c){p3c();a.Xe(b)&&c.td(a)} -function St(a,b,c){var d;d=a.Zc(b);d.Rb(c)} -function O6c(a,b,c){a.a+=b;a.b+=c;return a} -function Z6c(a,b,c){a.a*=b;a.b*=c;return a} -function b7c(a,b,c){a.a-=b;a.b-=c;return a} -function a7c(a,b){a.a=b.a;a.b=b.b;return a} -function V6c(a){a.a=-a.a;a.b=-a.b;return a} -function Dic(a){this.c=a;this.a=1;this.b=1} -function xed(a){this.c=a;dld(a,0);eld(a,0)} -function u7c(a){Psb.call(this);n7c(this,a)} -function AXb(a){xXb();yXb(this);this.mf(a)} -function GRd(a,b){nRd();qRd.call(this,a,b)} -function dSd(a,b){LRd();RRd.call(this,a,b)} -function hSd(a,b){LRd();RRd.call(this,a,b)} -function fSd(a,b){LRd();dSd.call(this,a,b)} -function sId(a,b,c){dId.call(this,a,b,c,2)} -function zXd(a,b){UVd();nXd.call(this,a,b)} -function BXd(a,b){UVd();zXd.call(this,a,b)} -function DXd(a,b){UVd();zXd.call(this,a,b)} -function FXd(a,b){UVd();DXd.call(this,a,b)} -function PXd(a,b){UVd();nXd.call(this,a,b)} -function RXd(a,b){UVd();PXd.call(this,a,b)} -function XXd(a,b){UVd();nXd.call(this,a,b)} -function pAd(a,b){return a.c.Fc(BD(b,133))} -function w1d(a,b,c){return V1d(p1d(a,b),c)} -function N2d(a,b,c){return b.Qk(a.e,a.c,c)} -function P2d(a,b,c){return b.Rk(a.e,a.c,c)} -function a3d(a,b){return xid(a.e,BD(b,49))} -function aTd(a,b,c){vtd(QSd(a.a),b,eTd(c))} -function TOd(a,b,c){vtd(VKd(a.a),b,XOd(c))} -function ypb(a,b){b.$modCount=a.$modCount} -function MUc(){MUc=ccb;LUc=new Lsd('root')} -function LCd(){LCd=ccb;KCd=new lDd;new NDd} -function KVc(){this.a=new Hp;this.b=new Hp} -function FUd(){hJd.call(this);this.Bb|=Tje} -function t_c(){$r.call(this,'GROW_TREE',0)} -function C9d(a){return a==null?null:cde(a)} -function G9d(a){return a==null?null:jde(a)} -function J9d(a){return a==null?null:fcb(a)} -function K9d(a){return a==null?null:fcb(a)} -function fdb(a){if(a.o!=null){return}vdb(a)} -function DD(a){CCb(a==null||KD(a));return a} -function ED(a){CCb(a==null||LD(a));return a} -function GD(a){CCb(a==null||ND(a));return a} -function gB(a){this.q=new $wnd.Date(Sbb(a))} -function Mf(a,b){this.c=a;ne.call(this,a,b)} -function Sf(a,b){this.a=a;Mf.call(this,a,b)} -function Hg(a,b){this.d=a;Dg(this);this.b=b} -function bAb(a,b){Vzb.call(this,a);this.a=b} -function vAb(a,b){Vzb.call(this,a);this.a=b} -function sNb(a){pNb.call(this,0,0);this.f=a} -function Vg(a,b,c){dg.call(this,a,b,c,null)} -function Yg(a,b,c){dg.call(this,a,b,c,null)} -function Pxb(a,b,c){return a.ue(b,c)<=0?c:b} -function Qxb(a,b,c){return a.ue(b,c)<=0?b:c} -function g4c(a,b){return BD(Wrb(a.b,b),149)} -function i4c(a,b){return BD(Wrb(a.c,b),229)} -function wic(a){return BD(Ikb(a.a,a.b),287)} -function B6c(a){return new f7c(a.c,a.d+a.a)} -function eLc(a){return FJc(),Jzc(BD(a,197))} -function $Jb(){$Jb=ccb;ZJb=pqb((tdd(),sdd))} -function fOb(a,b){b.a?gOb(a,b):Fxb(a.a,b.b)} -function qyb(a,b){if(lyb){return}Ekb(a.a,b)} -function F2b(a,b){x2b();return f_b(b.d.i,a)} -function _9b(a,b){I9b();return new gac(b,a)} -function _Hb(a,b){ytb(b,lle);a.f=b;return a} -function Kld(a,b,c){c=_hd(a,b,3,c);return c} -function bmd(a,b,c){c=_hd(a,b,6,c);return c} -function kpd(a,b,c){c=_hd(a,b,9,c);return c} -function Cvd(a,b,c){++a.j;a.Ki();Atd(a,b,c)} -function Avd(a,b,c){++a.j;a.Hi(b,a.oi(b,c))} -function bRd(a,b,c){var d;d=a.Zc(b);d.Rb(c)} -function c7d(a,b,c){return C2d(a.c,a.b,b,c)} -function DAd(a,b){return (b&Ohe)%a.d.length} -function Msd(a,b){Lsd.call(this,a);this.a=b} -function uVd(a,b){lVd.call(this,a);this.a=b} -function sYd(a,b){lVd.call(this,a);this.a=b} -function zyd(a,b){this.c=a;zud.call(this,b)} -function YOd(a,b){this.a=a;qOd.call(this,b)} -function fTd(a,b){this.a=a;qOd.call(this,b)} -function Xp(a){this.a=(Xj(a,Jie),new Skb(a))} -function cq(a){this.a=(Xj(a,Jie),new Skb(a))} -function LA(a){!a.a&&(a.a=new VA);return a.a} -function XMb(a){if(a>8){return 0}return a+1} -function Ecb(a,b){Bcb();return a==b?0:a?1:-1} -function Opb(a,b,c){return Npb(a,BD(b,22),c)} -function Bz(a,b,c){return a.apply(b,c);var d} -function Sfb(a,b,c){a.a+=zfb(b,0,c);return a} -function ijb(a,b){var c;c=a.e;a.e=b;return c} -function trb(a,b){var c;c=a[hke];c.call(a,b)} -function urb(a,b){var c;c=a[hke];c.call(a,b)} -function Aib(a,b){a.a.Vc(a.b,b);++a.b;a.c=-1} -function Urb(a){Uhb(a.e);a.d.b=a.d;a.d.a=a.d} -function _f(a){a.b?_f(a.b):a.f.c.zc(a.e,a.d)} -function _Ab(a,b,c){EAb();MBb(a,b.Ce(a.a,c))} -function Bxb(a,b){return Vd(Cwb(a.a,b,true))} -function Cxb(a,b){return Vd(Dwb(a.a,b,true))} -function _Bb(a,b){return eCb(new Array(b),a)} -function HD(a){return String.fromCharCode(a)} -function mz(a){return a==null?null:a.message} -function gRb(){this.a=new Rkb;this.b=new Rkb} -function iTb(){this.a=new MQb;this.b=new tTb} -function tDb(){this.b=new d7c;this.c=new Rkb} -function _Qb(){this.d=new d7c;this.e=new d7c} -function n_b(){this.n=new d7c;this.o=new d7c} -function $Gb(){this.n=new p0b;this.i=new I6c} -function sec(){this.a=new Umc;this.b=new mnc} -function NIc(){this.a=new Rkb;this.d=new Rkb} -function LDc(){this.b=new Tqb;this.a=new Tqb} -function hSc(){this.b=new Lqb;this.a=new Lqb} -function HRc(){this.b=new tRc;this.a=new hRc} -function aHb(){$Gb.call(this);this.a=new d7c} -function Ywb(a){Zwb.call(this,a,(lxb(),hxb))} -function J_b(a,b,c,d){B_b.call(this,a,b,c,d)} -function sqd(a,b,c){c!=null&&kmd(b,Wqd(a,c))} -function tqd(a,b,c){c!=null&&lmd(b,Wqd(a,c))} -function Tod(a,b,c){c=_hd(a,b,11,c);return c} -function P6c(a,b){a.a+=b.a;a.b+=b.b;return a} -function c7c(a,b){a.a-=b.a;a.b-=b.b;return a} -function u7b(a,b){return a.n.a=(uCb(b),b)+10} -function v7b(a,b){return a.n.a=(uCb(b),b)+10} -function dLd(a,b){return b==a||pud(UKd(b),a)} -function PYd(a,b){return Rhb(a.a,b,'')==null} -function E2b(a,b){x2b();return !f_b(b.d.i,a)} -function rjc(a,b){fad(a.f)?sjc(a,b):tjc(a,b)} -function h1d(a,b){var c;c=b.Hh(a.a);return c} -function Cyd(a,b){qcb.call(this,gve+a+mue+b)} -function gUd(a,b,c,d){cUd.call(this,a,b,c,d)} -function Q4d(a,b,c,d){cUd.call(this,a,b,c,d)} -function U4d(a,b,c,d){Q4d.call(this,a,b,c,d)} -function n5d(a,b,c,d){i5d.call(this,a,b,c,d)} -function p5d(a,b,c,d){i5d.call(this,a,b,c,d)} -function v5d(a,b,c,d){i5d.call(this,a,b,c,d)} -function t5d(a,b,c,d){p5d.call(this,a,b,c,d)} -function A5d(a,b,c,d){p5d.call(this,a,b,c,d)} -function y5d(a,b,c,d){v5d.call(this,a,b,c,d)} -function D5d(a,b,c,d){A5d.call(this,a,b,c,d)} -function d6d(a,b,c,d){Y5d.call(this,a,b,c,d)} -function Vp(a,b,c){this.a=a;qc.call(this,b,c)} -function tk(a,b,c){this.c=b;this.b=c;this.a=a} -function ik(a,b,c){return a.d=BD(b.Kb(c),164)} -function j6d(a,b){return a.Aj().Nh().Kh(a,b)} -function h6d(a,b){return a.Aj().Nh().Ih(a,b)} -function Fdb(a,b){return uCb(a),PD(a)===PD(b)} -function dfb(a,b){return uCb(a),PD(a)===PD(b)} -function Dxb(a,b){return Vd(Cwb(a.a,b,false))} -function Exb(a,b){return Vd(Dwb(a.a,b,false))} -function vBb(a,b){return a.b.sd(new yBb(a,b))} -function BBb(a,b){return a.b.sd(new EBb(a,b))} -function HBb(a,b){return a.b.sd(new KBb(a,b))} -function lfb(a,b,c){return a.lastIndexOf(b,c)} -function uTb(a,b,c){return Kdb(a[b.b],a[c.b])} -function RTb(a,b){return yNb(b,(Nyc(),Cwc),a)} -function fmc(a,b){return beb(b.a.d.p,a.a.d.p)} -function emc(a,b){return beb(a.a.d.p,b.a.d.p)} -function _Oc(a,b){return Kdb(a.c-a.s,b.c-b.s)} -function S_b(a){return !a.c?-1:Jkb(a.c.a,a,0)} -function Vxd(a){return a<100?null:new Ixd(a)} -function ecd(a){return a==Zbd||a==_bd||a==$bd} -function zAd(a,b){return JD(b,15)&&Btd(a.c,b)} -function vyb(a,b){if(lyb){return}!!b&&(a.d=b)} -function ujb(a,b){var c;c=b;return !!Awb(a,c)} -function czd(a,b){this.c=a;Pyd.call(this,a,b)} -function fBb(a){this.c=a;nvb.call(this,rie,0)} -function Avb(a,b){Bvb.call(this,a,a.length,b)} -function aId(a,b,c){return BD(a.c,69).lk(b,c)} -function bId(a,b,c){return BD(a.c,69).mk(b,c)} -function O2d(a,b,c){return N2d(a,BD(b,332),c)} -function Q2d(a,b,c){return P2d(a,BD(b,332),c)} -function i3d(a,b,c){return h3d(a,BD(b,332),c)} -function k3d(a,b,c){return j3d(a,BD(b,332),c)} -function tn(a,b){return b==null?null:Hv(a.b,b)} -function Kcb(a){return LD(a)?(uCb(a),a):a.ke()} -function Ldb(a){return !isNaN(a)&&!isFinite(a)} -function Wn(a){Ql();this.a=(mmb(),new zob(a))} -function dIc(a){FHc();this.d=a;this.a=new jkb} -function xqb(a,b,c){this.a=a;this.b=b;this.c=c} -function Nrb(a,b,c){this.a=a;this.b=b;this.c=c} -function $sb(a,b,c){this.d=a;this.b=c;this.a=b} -function Qsb(a){Csb(this);Osb(this);ye(this,a)} -function Tkb(a){Ckb(this);bCb(this.c,0,a.Pc())} -function Xwb(a){uib(a.a);Kwb(a.c,a.b);a.b=null} -function iyb(a){this.a=a;Zfb();Cbb(Date.now())} -function JCb(){JCb=ccb;GCb=new nb;ICb=new nb} -function ntb(){ntb=ccb;ltb=new otb;mtb=new qtb} -function kzd(){kzd=ccb;jzd=KC(SI,Uhe,1,0,5,1)} -function tGd(){tGd=ccb;sGd=KC(SI,Uhe,1,0,5,1)} -function $Gd(){$Gd=ccb;ZGd=KC(SI,Uhe,1,0,5,1)} -function Ql(){Ql=ccb;new Zl((mmb(),mmb(),jmb))} -function pxb(a){lxb();return es((zxb(),yxb),a)} -function Hyb(a){Fyb();return es((Kyb(),Jyb),a)} -function OEb(a){MEb();return es((REb(),QEb),a)} -function WEb(a){UEb();return es((ZEb(),YEb),a)} -function tFb(a){rFb();return es((wFb(),vFb),a)} -function iHb(a){gHb();return es((lHb(),kHb),a)} -function PHb(a){NHb();return es((SHb(),RHb),a)} -function GIb(a){EIb();return es((JIb(),IIb),a)} -function vJb(a){qJb();return es((yJb(),xJb),a)} -function xLb(a){vLb();return es((ALb(),zLb),a)} -function TMb(a){RMb();return es((WMb(),VMb),a)} -function TOb(a){ROb();return es((WOb(),VOb),a)} -function ePb(a){cPb();return es((hPb(),gPb),a)} -function ZRb(a){XRb();return es((aSb(),_Rb),a)} -function ATb(a){yTb();return es((DTb(),CTb),a)} -function sUb(a){qUb();return es((vUb(),uUb),a)} -function rWb(a){lWb();return es((uWb(),tWb),a)} -function TXb(a){RXb();return es((WXb(),VXb),a)} -function Mb(a,b){if(!a){throw vbb(new Wdb(b))}} -function l0b(a){j0b();return es((o0b(),n0b),a)} -function r0b(a){B_b.call(this,a.d,a.c,a.a,a.b)} -function K_b(a){B_b.call(this,a.d,a.c,a.a,a.b)} -function mKb(a,b,c){this.b=a;this.c=b;this.a=c} -function BZb(a,b,c){this.b=a;this.a=b;this.c=c} -function TNb(a,b,c){this.a=a;this.b=b;this.c=c} -function uOb(a,b,c){this.a=a;this.b=b;this.c=c} -function S3b(a,b,c){this.a=a;this.b=b;this.c=c} -function Z6b(a,b,c){this.a=a;this.b=b;this.c=c} -function n9b(a,b,c){this.b=a;this.a=b;this.c=c} -function x$b(a,b,c){this.e=b;this.b=a;this.d=c} -function $Ab(a,b,c){EAb();a.a.Od(b,c);return b} -function LGb(a){var b;b=new KGb;b.e=a;return b} -function iLb(a){var b;b=new fLb;b.b=a;return b} -function D6b(){D6b=ccb;B6b=new M6b;C6b=new P6b} -function Hgc(){Hgc=ccb;Fgc=new ghc;Ggc=new ihc} -function jbc(a){gbc();return es((mbc(),lbc),a)} -function Cjc(a){Ajc();return es((Fjc(),Ejc),a)} -function Clc(a){Alc();return es((Flc(),Elc),a)} -function Cpc(a){Apc();return es((Fpc(),Epc),a)} -function Kpc(a){Ipc();return es((Npc(),Mpc),a)} -function Wpc(a){Rpc();return es((Zpc(),Ypc),a)} -function $jc(a){Xjc();return es((bkc(),akc),a)} -function Hkc(a){Fkc();return es((Kkc(),Jkc),a)} -function dqc(a){bqc();return es((gqc(),fqc),a)} -function rqc(a){mqc();return es((uqc(),tqc),a)} -function zqc(a){xqc();return es((Cqc(),Bqc),a)} -function Iqc(a){Gqc();return es((Lqc(),Kqc),a)} -function Vqc(a){Sqc();return es((Yqc(),Xqc),a)} -function brc(a){_qc();return es((erc(),drc),a)} -function nrc(a){lrc();return es((qrc(),prc),a)} -function Arc(a){yrc();return es((Drc(),Crc),a)} -function Qrc(a){Orc();return es((Trc(),Src),a)} -function Zrc(a){Xrc();return es((asc(),_rc),a)} -function gsc(a){esc();return es((jsc(),isc),a)} -function osc(a){msc();return es((rsc(),qsc),a)} -function Etc(a){Ctc();return es((Htc(),Gtc),a)} -function qzc(a){lzc();return es((tzc(),szc),a)} -function Azc(a){xzc();return es((Dzc(),Czc),a)} -function Mzc(a){Izc();return es((Pzc(),Ozc),a)} -function MAc(a){KAc();return es((PAc(),OAc),a)} -function mAc(a){kAc();return es((pAc(),oAc),a)} -function vAc(a){tAc();return es((yAc(),xAc),a)} -function DAc(a){BAc();return es((GAc(),FAc),a)} -function VAc(a){TAc();return es((YAc(),XAc),a)} -function $zc(a){Vzc();return es((bAc(),aAc),a)} -function bBc(a){_Ac();return es((eBc(),dBc),a)} -function vBc(a){tBc();return es((yBc(),xBc),a)} -function EBc(a){CBc();return es((HBc(),GBc),a)} -function NBc(a){LBc();return es((QBc(),PBc),a)} -function tGc(a){rGc();return es((wGc(),vGc),a)} -function WIc(a){UIc();return es((ZIc(),YIc),a)} -function $Lc(a){YLc();return es((bMc(),aMc),a)} -function gMc(a){eMc();return es((jMc(),iMc),a)} -function JOc(a){HOc();return es((MOc(),LOc),a)} -function HQc(a){FQc();return es((KQc(),JQc),a)} -function DRc(a){yRc();return es((GRc(),FRc),a)} -function tSc(a){qSc();return es((wSc(),vSc),a)} -function UTc(a){STc();return es((XTc(),WTc),a)} -function UUc(a){PUc();return es((XUc(),WUc),a)} -function aUc(a){$Tc();return es((dUc(),cUc),a)} -function wVc(a){tVc();return es((zVc(),yVc),a)} -function iWc(a){fWc();return es((lWc(),kWc),a)} -function sWc(a){pWc();return es((vWc(),uWc),a)} -function lXc(a){iXc();return es((oXc(),nXc),a)} -function vXc(a){sXc();return es((yXc(),xXc),a)} -function BYc(a){zYc();return es((EYc(),DYc),a)} -function m$c(a){k$c();return es((p$c(),o$c),a)} -function $$c(a){Y$c();return es((b_c(),a_c),a)} -function n_c(a){i_c();return es((q_c(),p_c),a)} -function w_c(a){s_c();return es((z_c(),y_c),a)} -function E_c(a){C_c();return es((H_c(),G_c),a)} -function P_c(a){N_c();return es((S_c(),R_c),a)} -function W0c(a){R0c();return es((Z0c(),Y0c),a)} -function f1c(a){a1c();return es((i1c(),h1c),a)} -function P5c(a){N5c();return es((S5c(),R5c),a)} -function b6c(a){_5c();return es((e6c(),d6c),a)} -function H7c(a){F7c();return es((K7c(),J7c),a)} -function k8c(a){i8c();return es((n8c(),m8c),a)} -function V8b(a){S8b();return es((Y8b(),X8b),a)} -function A5b(a){y5b();return es((D5b(),C5b),a)} -function jad(a){ead();return es((mad(),lad),a)} -function sad(a){qad();return es((vad(),uad),a)} -function Cad(a){Aad();return es((Fad(),Ead),a)} -function Oad(a){Mad();return es((Rad(),Qad),a)} -function jbd(a){hbd();return es((mbd(),lbd),a)} -function ubd(a){rbd();return es((xbd(),wbd),a)} -function Kbd(a){Hbd();return es((Nbd(),Mbd),a)} -function Vbd(a){Tbd();return es((Ybd(),Xbd),a)} -function hcd(a){dcd();return es((kcd(),jcd),a)} -function vcd(a){rcd();return es((ycd(),xcd),a)} -function vdd(a){tdd();return es((ydd(),xdd),a)} -function Kdd(a){Idd();return es((Ndd(),Mdd),a)} -function $cd(a){Ucd();return es((cdd(),bdd),a)} -function Fed(a){Ded();return es((Ied(),Hed),a)} -function rgd(a){pgd();return es((ugd(),tgd),a)} -function Esd(a){Csd();return es((Hsd(),Gsd),a)} -function Yoc(a,b){return (uCb(a),a)+(uCb(b),b)} -function NNd(a,b){Zfb();return wtd(ZKd(a.a),b)} -function SNd(a,b){Zfb();return wtd(ZKd(a.a),b)} -function bPc(a,b){this.c=a;this.a=b;this.b=b-a} -function nYc(a,b,c){this.a=a;this.b=b;this.c=c} -function L1c(a,b,c){this.a=a;this.b=b;this.c=c} -function T1c(a,b,c){this.a=a;this.b=b;this.c=c} -function Rrd(a,b,c){this.a=a;this.b=b;this.c=c} -function zCd(a,b,c){this.a=a;this.b=b;this.c=c} -function IVd(a,b,c){this.e=a;this.a=b;this.c=c} -function kWd(a,b,c){UVd();cWd.call(this,a,b,c)} -function HXd(a,b,c){UVd();oXd.call(this,a,b,c)} -function TXd(a,b,c){UVd();oXd.call(this,a,b,c)} -function ZXd(a,b,c){UVd();oXd.call(this,a,b,c)} -function JXd(a,b,c){UVd();HXd.call(this,a,b,c)} -function LXd(a,b,c){UVd();HXd.call(this,a,b,c)} -function NXd(a,b,c){UVd();LXd.call(this,a,b,c)} -function VXd(a,b,c){UVd();TXd.call(this,a,b,c)} -function _Xd(a,b,c){UVd();ZXd.call(this,a,b,c)} -function $j(a,b){Qb(a);Qb(b);return new _j(a,b)} -function Nq(a,b){Qb(a);Qb(b);return new Wq(a,b)} -function Rq(a,b){Qb(a);Qb(b);return new ar(a,b)} -function lr(a,b){Qb(a);Qb(b);return new zr(a,b)} -function BD(a,b){CCb(a==null||AD(a,b));return a} -function Nu(a){var b;b=new Rkb;fr(b,a);return b} -function Ex(a){var b;b=new Tqb;fr(b,a);return b} -function Hx(a){var b;b=new Gxb;Jq(b,a);return b} -function Ru(a){var b;b=new Psb;Jq(b,a);return b} -function YEc(a){!a.e&&(a.e=new Rkb);return a.e} -function SMd(a){!a.c&&(a.c=new xYd);return a.c} -function Ekb(a,b){a.c[a.c.length]=b;return true} -function WA(a,b){this.c=a;this.b=b;this.a=false} -function Gg(a){this.d=a;Dg(this);this.b=ed(a.d)} -function pzb(){this.a=';,;';this.b='';this.c=''} -function Bvb(a,b,c){qvb.call(this,b,c);this.a=a} -function fAb(a,b,c){this.b=a;fvb.call(this,b,c)} -function lsb(a,b,c){this.c=a;pjb.call(this,b,c)} -function bCb(a,b,c){$Bb(c,0,a,b,c.length,false)} -function HVb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} -function eBb(a,b){if(b){a.b=b;a.a=(Tzb(b),b.a)}} -function v_b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} -function h5b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} -function k5b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} -function Lbb(a){return zbb(iD(Fbb(a)?Rbb(a):a))} -function rlc(a,b){return beb(D0b(a.d),D0b(b.d))} -function uic(a,b){return b==(Ucd(),Tcd)?a.c:a.d} -function FHc(){FHc=ccb;DHc=(Ucd(),Tcd);EHc=zcd} -function DRb(){this.b=Edb(ED(Ksd((wSb(),vSb))))} -function aBb(a){return EAb(),KC(SI,Uhe,1,a,5,1)} -function C6c(a){return new f7c(a.c+a.b,a.d+a.a)} -function Vmc(a,b){Imc();return beb(a.d.p,b.d.p)} -function Lsb(a){sCb(a.b!=0);return Nsb(a,a.a.a)} -function Msb(a){sCb(a.b!=0);return Nsb(a,a.c.b)} -function rCb(a,b){if(!a){throw vbb(new ucb(b))}} -function mCb(a,b){if(!a){throw vbb(new Wdb(b))}} -function dWb(a,b,c){cWb.call(this,a,b);this.b=c} -function pMd(a,b,c){MLd.call(this,a,b);this.c=c} -function Dnc(a,b,c){Cnc.call(this,b,c);this.d=a} -function _Gd(a){$Gd();MGd.call(this);this.th(a)} -function PNd(a,b,c){this.a=a;nNd.call(this,b,c)} -function UNd(a,b,c){this.a=a;nNd.call(this,b,c)} -function k2d(a,b,c){MLd.call(this,a,b);this.c=c} -function y1d(){T0d();z1d.call(this,(yFd(),xFd))} -function gFd(a){return a!=null&&!OEd(a,CEd,DEd)} -function dFd(a,b){return (jFd(a)<<4|jFd(b))&aje} -function ln(a,b){return Vm(),Wj(a,b),new iy(a,b)} -function Sdd(a,b){var c;if(a.n){c=b;Ekb(a.f,c)}} -function Upd(a,b,c){var d;d=new yC(c);cC(a,b,d)} -function WUd(a,b){var c;c=a.c;VUd(a,b);return c} -function Ydd(a,b){b<0?(a.g=-1):(a.g=b);return a} -function $6c(a,b){W6c(a);a.a*=b;a.b*=b;return a} -function G6c(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} -function Dsb(a,b){Gsb(a,b,a.c.b,a.c);return true} -function jsb(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} -function Aq(a){this.b=a;this.a=Wm(this.b.a).Ed()} -function Wq(a,b){this.b=a;this.a=b;ol.call(this)} -function ar(a,b){this.a=a;this.b=b;ol.call(this)} -function vvb(a,b){qvb.call(this,b,1040);this.a=a} -function Eeb(a){return a==0||isNaN(a)?a:a<0?-1:1} -function WPb(a){QPb();return jtd(a)==Xod(ltd(a))} -function XPb(a){QPb();return ltd(a)==Xod(jtd(a))} -function iYb(a,b){return hYb(a,new cWb(b.a,b.b))} -function NZb(a){return !OZb(a)&&a.c.i.c==a.d.i.c} -function _Gb(a){var b;b=a.n;return a.a.b+b.d+b.a} -function YHb(a){var b;b=a.n;return a.e.b+b.d+b.a} -function ZHb(a){var b;b=a.n;return a.e.a+b.b+b.c} -function zfe(a){wfe();++vfe;return new ige(0,a)} -function o_b(a){if(a.a){return a.a}return JZb(a)} -function CCb(a){if(!a){throw vbb(new Cdb(null))}} -function X6d(){X6d=ccb;W6d=(mmb(),new anb(Fwe))} -function ex(){ex=ccb;new gx((_k(),$k),(Lk(),Kk))} -function oeb(){oeb=ccb;neb=KC(JI,nie,19,256,0,1)} -function d$c(a,b,c,d){e$c.call(this,a,b,c,d,0,0)} -function sQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} -function tQc(a,b,c){return Rhb(a.b,BD(c.b,17),b)} -function xfd(a,b){return Ekb(a,new f7c(b.a,b.b))} -function Bic(a,b){return a.c<b.c?-1:a.c==b.c?0:1} -function B0b(a){return a.e.c.length+a.g.c.length} -function D0b(a){return a.e.c.length-a.g.c.length} -function Ojc(a){return a.b.c.length-a.e.c.length} -function dKc(a){FJc();return (Ucd(),Ecd).Hc(a.j)} -function lHd(a){$Gd();_Gd.call(this,a);this.a=-1} -function R7d(a,b){f7d.call(this,a,b);this.a=this} -function odb(a,b){var c;c=ldb(a,b);c.i=2;return c} -function Evd(a,b){var c;++a.j;c=a.Ti(b);return c} -function e3c(a,b,c){a.a=-1;i3c(a,b.g,c);return a} -function Qrd(a,b,c){Kqd(a.a,a.b,a.c,BD(b,202),c)} -function OHd(a,b){PHd(a,b==null?null:(uCb(b),b))} -function SUd(a,b){UUd(a,b==null?null:(uCb(b),b))} -function TUd(a,b){UUd(a,b==null?null:(uCb(b),b))} -function Zj(a,b,c){return new tk(oAb(a).Ie(),c,b)} -function IC(a,b,c,d,e,f){return JC(a,b,c,d,e,0,f)} -function Ucb(){Ucb=ccb;Tcb=KC(xI,nie,217,256,0,1)} -function Ceb(){Ceb=ccb;Beb=KC(MI,nie,162,256,0,1)} -function Yeb(){Yeb=ccb;Xeb=KC(UI,nie,184,256,0,1)} -function ddb(){ddb=ccb;cdb=KC(yI,nie,172,128,0,1)} -function IVb(){HVb(this,false,false,false,false)} -function my(a){im();this.a=(mmb(),new anb(Qb(a)))} -function ir(a){Qb(a);while(a.Ob()){a.Pb();a.Qb()}} -function Tw(a){a.a.cd();BD(a.a.dd(),14).gc();zh()} -function mf(a){this.c=a;this.b=this.c.d.vc().Kc()} -function fqb(a){this.c=a;this.a=new Gqb(this.c.a)} -function Vqb(a){this.a=new Mqb(a.gc());ye(this,a)} -function Bsb(a){Wqb.call(this,new $rb);ye(this,a)} -function Rfb(a,b){a.a+=zfb(b,0,b.length);return a} -function Ikb(a,b){tCb(b,a.c.length);return a.c[b]} -function $lb(a,b){tCb(b,a.a.length);return a.a[b]} -function YAb(a,b){EAb();Vzb.call(this,a);this.a=b} -function Qyb(a,b){return Aeb(wbb(Aeb(a.a).a,b.a))} -function jpb(a,b){return uCb(a),Fcb(a,(uCb(b),b))} -function opb(a,b){return uCb(b),Fcb(b,(uCb(a),a))} -function Oyb(a,b){return NC(b,0,Bzb(b[0],Aeb(1)))} -function Bzb(a,b){return Qyb(BD(a,162),BD(b,162))} -function vic(a){return a.c-BD(Ikb(a.a,a.b),287).b} -function uNb(a){return !a.q?(mmb(),mmb(),kmb):a.q} -function Xi(a){return a.e.Hd().gc()*a.c.Hd().gc()} -function onc(a,b,c){return beb(b.d[a.g],c.d[a.g])} -function YHc(a,b,c){return beb(a.d[b.p],a.d[c.p])} -function ZHc(a,b,c){return beb(a.d[b.p],a.d[c.p])} -function $Hc(a,b,c){return beb(a.d[b.p],a.d[c.p])} -function _Hc(a,b,c){return beb(a.d[b.p],a.d[c.p])} -function q$c(a,b,c){return $wnd.Math.min(c/a,1/b)} -function sEc(a,b){return a?0:$wnd.Math.max(0,b-1)} -function Elb(a,b){var c;for(c=0;c<b;++c){a[c]=-1}} -function bVc(a){var b;b=hVc(a);return !b?a:bVc(b)} -function Voc(a,b){a.a==null&&Toc(a);return a.a[b]} -function qed(a){if(a.c){return a.c.f}return a.e.b} -function red(a){if(a.c){return a.c.g}return a.e.a} -function pFd(a){zud.call(this,a.gc());ytd(this,a)} -function nXd(a,b){UVd();VVd.call(this,b);this.a=a} -function KYd(a,b,c){this.a=a;xMd.call(this,b,c,2)} -function B_b(a,b,c,d){s_b(this);v_b(this,a,b,c,d)} -function ige(a,b){wfe();xfe.call(this,a);this.a=b} -function jgd(a){this.b=new Psb;this.a=a;this.c=-1} -function MOb(){this.d=new f7c(0,0);this.e=new Tqb} -function Nr(a){qc.call(this,0,0);this.a=a;this.b=0} -function ejc(a){this.a=a;this.c=new Lqb;$ic(this)} -function ju(a){if(a.e.c!=a.b){throw vbb(new Apb)}} -function bt(a){if(a.c.e!=a.a){throw vbb(new Apb)}} -function Tbb(a){if(Fbb(a)){return a|0}return pD(a)} -function Bfe(a,b){wfe();++vfe;return new rge(a,b)} -function SEd(a,b){return a==null?b==null:dfb(a,b)} -function TEd(a,b){return a==null?b==null:efb(a,b)} -function Npb(a,b,c){rqb(a.a,b);return Qpb(a,b.g,c)} -function Mlb(a,b,c){oCb(0,b,a.length);Klb(a,0,b,c)} -function Dkb(a,b,c){wCb(b,a.c.length);aCb(a.c,b,c)} -function Dlb(a,b,c){var d;for(d=0;d<b;++d){a[d]=c}} -function qqb(a,b){var c;c=pqb(a);nmb(c,b);return c} -function Oz(a,b){!a&&(a=[]);a[a.length]=b;return a} -function Brb(a,b){return !(a.a.get(b)===undefined)} -function Wyb(a,b){return Nyb(new rzb,new bzb(a),b)} -function Itb(a){return a==null?ztb:new Ftb(uCb(a))} -function tqb(a,b){return JD(b,22)&&uqb(a,BD(b,22))} -function vqb(a,b){return JD(b,22)&&wqb(a,BD(b,22))} -function Aub(a){return Cub(a,26)*ike+Cub(a,27)*jke} -function MC(a){return Array.isArray(a)&&a.im===gcb} -function bg(a){a.b?bg(a.b):a.d.dc()&&a.f.c.Bc(a.e)} -function $Nb(a,b){P6c(a.c,b);a.b.c+=b.a;a.b.d+=b.b} -function ZNb(a,b){$Nb(a,c7c(new f7c(b.a,b.b),a.c))} -function BLb(a,b){this.b=new Psb;this.a=a;this.c=b} -function OVb(){this.b=new $Vb;this.c=new SVb(this)} -function oEb(){this.d=new CEb;this.e=new uEb(this)} -function aCc(){ZBc();this.f=new Psb;this.e=new Psb} -function $Jc(){FJc();this.k=new Lqb;this.d=new Tqb} -function Rgd(){Rgd=ccb;Qgd=new Osd((Y9c(),s9c),0)} -function Mr(){Mr=ccb;Lr=new Nr(KC(SI,Uhe,1,0,5,1))} -function gfc(a,b,c){bfc(c,a,1);Ekb(b,new Tfc(c,a))} -function hfc(a,b,c){cfc(c,a,1);Ekb(b,new dgc(c,a))} -function R$c(a,b,c){return Qqb(a,new aDb(b.a,c.a))} -function ACc(a,b,c){return -beb(a.f[b.p],a.f[c.p])} -function mHb(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} -function nHb(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} -function c3c(a,b,c){a.a=-1;i3c(a,b.g+1,c);return a} -function Dod(a,b,c){c=_hd(a,BD(b,49),7,c);return c} -function JHd(a,b,c){c=_hd(a,BD(b,49),3,c);return c} -function JMd(a,b,c){this.a=a;BMd.call(this,b,c,22)} -function UTd(a,b,c){this.a=a;BMd.call(this,b,c,14)} -function eXd(a,b,c,d){UVd();nWd.call(this,a,b,c,d)} -function lXd(a,b,c,d){UVd();nWd.call(this,a,b,c,d)} -function FNd(a,b){(b.Bb&ote)!=0&&!a.a.o&&(a.a.o=b)} -function MD(a){return a!=null&&OD(a)&&!(a.im===gcb)} -function ID(a){return !Array.isArray(a)&&a.im===gcb} -function ed(a){return JD(a,15)?BD(a,15).Yc():a.Kc()} -function De(a){return a.Qc(KC(SI,Uhe,1,a.gc(),5,1))} -function u1d(a,b){return W1d(p1d(a,b))?b.Qh():null} -function uvd(a){a?Ty(a,(Zfb(),Yfb),''):(Zfb(),Yfb)} -function Sr(a){this.a=(Mr(),Lr);this.d=BD(Qb(a),47)} -function qg(a,b,c,d){this.a=a;dg.call(this,a,b,c,d)} -function Yge(a){Xge();this.a=0;this.b=a-1;this.c=1} -function Yy(a){Py(this);this.g=a;Ry(this);this._d()} -function Wm(a){if(a.c){return a.c}return a.c=a.Id()} -function Xm(a){if(a.d){return a.d}return a.d=a.Jd()} -function Rl(a){var b;b=a.c;return !b?(a.c=a.Dd()):b} -function fe(a){var b;b=a.f;return !b?(a.f=a.Dc()):b} -function Ec(a){var b;b=a.i;return !b?(a.i=a.bc()):b} -function Ffe(a){wfe();++vfe;return new Hge(10,a,0)} -function Ubb(a){if(Fbb(a)){return ''+a}return qD(a)} -function a4d(a){if(a.e.j!=a.d){throw vbb(new Apb)}} -function Nbb(a,b){return zbb(kD(Fbb(a)?Rbb(a):a,b))} -function Obb(a,b){return zbb(lD(Fbb(a)?Rbb(a):a,b))} -function Pbb(a,b){return zbb(mD(Fbb(a)?Rbb(a):a,b))} -function Dcb(a,b){return Ecb((uCb(a),a),(uCb(b),b))} -function Ddb(a,b){return Kdb((uCb(a),a),(uCb(b),b))} -function fx(a,b){return Qb(b),a.a.Ad(b)&&!a.b.Ad(b)} -function dD(a,b){return TC(a.l&b.l,a.m&b.m,a.h&b.h)} -function jD(a,b){return TC(a.l|b.l,a.m|b.m,a.h|b.h)} -function rD(a,b){return TC(a.l^b.l,a.m^b.m,a.h^b.h)} -function QAb(a,b){return TAb(a,(uCb(b),new Rxb(b)))} -function RAb(a,b){return TAb(a,(uCb(b),new Txb(b)))} -function g1b(a){return z0b(),BD(a,11).e.c.length!=0} -function l1b(a){return z0b(),BD(a,11).g.c.length!=0} -function bac(a,b){I9b();return Kdb(b.a.o.a,a.a.o.a)} -function Rnc(a,b,c){return Snc(a,BD(b,11),BD(c,11))} -function koc(a){if(a.e){return poc(a.e)}return null} -function Iub(a){if(!a.d){a.d=a.b.Kc();a.c=a.b.gc()}} -function pBb(a,b,c){if(a.a.Mb(c)){a.b=true;b.td(c)}} -function _vb(a,b){if(a<0||a>=b){throw vbb(new rcb)}} -function Pyb(a,b,c){NC(b,0,Bzb(b[0],c[0]));return b} -function _yc(a,b,c){b.Ye(c,Edb(ED(Ohb(a.b,c)))*a.a)} -function n6c(a,b,c){i6c();return m6c(a,b)&&m6c(a,c)} -function tcd(a){rcd();return !a.Hc(ncd)&&!a.Hc(pcd)} -function D6c(a){return new f7c(a.c+a.b/2,a.d+a.a/2)} -function oOd(a,b){return b.kh()?xid(a.b,BD(b,49)):b} -function bvb(a,b){this.e=a;this.d=(b&64)!=0?b|oie:b} -function qvb(a,b){this.c=0;this.d=a;this.b=b|64|oie} -function gub(a){this.b=new Skb(11);this.a=(ipb(),a)} -function Qwb(a){this.b=null;this.a=(ipb(),!a?fpb:a)} -function nHc(a){this.a=lHc(a.a);this.b=new Tkb(a.b)} -function Pzd(a){this.b=a;Oyd.call(this,a);Ozd(this)} -function Xzd(a){this.b=a;bzd.call(this,a);Wzd(this)} -function jUd(a,b,c){this.a=a;gUd.call(this,b,c,5,6)} -function Y5d(a,b,c,d){this.b=a;xMd.call(this,b,c,d)} -function nSd(a,b,c,d,e){oSd.call(this,a,b,c,d,e,-1)} -function DSd(a,b,c,d,e){ESd.call(this,a,b,c,d,e,-1)} -function cUd(a,b,c,d){xMd.call(this,a,b,c);this.b=d} -function i5d(a,b,c,d){pMd.call(this,a,b,c);this.b=d} -function x0d(a){Wud.call(this,a,false);this.a=false} -function Lj(a,b){this.b=a;sj.call(this,a.b);this.a=b} -function px(a,b){im();ox.call(this,a,Dm(new amb(b)))} -function Cfe(a,b){wfe();++vfe;return new Dge(a,b,0)} -function Efe(a,b){wfe();++vfe;return new Dge(6,a,b)} -function nfb(a,b){return dfb(a.substr(0,b.length),b)} -function Mhb(a,b){return ND(b)?Qhb(a,b):!!irb(a.f,b)} -function Rrb(a,b){uCb(b);while(a.Ob()){b.td(a.Pb())}} -function Vgb(a,b,c){Hgb();this.e=a;this.d=b;this.a=c} -function amc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} -function xJc(a){var b;b=a;while(b.f){b=b.f}return b} -function fkb(a){var b;b=bkb(a);sCb(b!=null);return b} -function gkb(a){var b;b=ckb(a);sCb(b!=null);return b} -function cv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} -function Glb(a,b){var c;for(c=0;c<b;++c){a[c]=false}} -function Clb(a,b,c,d){var e;for(e=b;e<c;++e){a[e]=d}} -function ylb(a,b,c,d){oCb(b,c,a.length);Clb(a,b,c,d)} -function Vvb(a,b,c){_vb(c,a.a.c.length);Nkb(a.a,c,b)} -function Lyb(a,b,c){this.c=a;this.a=b;mmb();this.b=c} -function Qpb(a,b,c){var d;d=a.b[b];a.b[b]=c;return d} -function Qqb(a,b){var c;c=a.a.zc(b,a);return c==null} -function zjb(a){if(!a){throw vbb(new utb)}return a.d} -function vCb(a,b){if(a==null){throw vbb(new Heb(b))}} -function Goc(a,b){if(!b){return false}return ye(a,b)} -function K2c(a,b,c){C2c(a,b.g,c);rqb(a.c,b);return a} -function vVb(a){tVb(a,(ead(),aad));a.d=true;return a} -function c2d(a){!a.j&&i2d(a,d1d(a.g,a.b));return a.j} -function nlb(a){yCb(a.b!=-1);Kkb(a.c,a.a=a.b);a.b=-1} -function Uhb(a){a.f=new lrb(a);a.g=new Frb(a);zpb(a)} -function Plb(a){return new YAb(null,Olb(a,a.length))} -function ul(a){return new Sr(new xl(a.a.length,a.a))} -function iD(a){return TC(~a.l&Eje,~a.m&Eje,~a.h&Fje)} -function OD(a){return typeof a===Jhe||typeof a===Nhe} -function D9d(a){return a==Pje?Nwe:a==Qje?'-INF':''+a} -function F9d(a){return a==Pje?Nwe:a==Qje?'-INF':''+a} -function yRb(a,b){return a>0?$wnd.Math.log(a/b):-100} -function ueb(a,b){return ybb(a,b)<0?-1:ybb(a,b)>0?1:0} -function HMb(a,b,c){return IMb(a,BD(b,46),BD(c,167))} -function iq(a,b){return BD(Rl(Wm(a.a)).Xb(b),42).cd()} -function Olb(a,b){return avb(b,a.length),new vvb(a,b)} -function Pyd(a,b){this.d=a;Fyd.call(this,a);this.e=b} -function Lub(a){this.d=(uCb(a),a);this.a=0;this.c=rie} -function rge(a,b){xfe.call(this,1);this.a=a;this.b=b} -function Rzb(a,b){!a.c?Ekb(a.b,b):Rzb(a.c,b);return a} -function uB(a,b,c){var d;d=tB(a,b);vB(a,b,c);return d} -function ZBb(a,b){var c;c=a.slice(0,b);return PC(c,a)} -function Flb(a,b,c){var d;for(d=0;d<b;++d){NC(a,d,c)}} -function ffb(a,b,c,d,e){while(b<c){d[e++]=bfb(a,b++)}} -function hLb(a,b){return Kdb(a.c.c+a.c.b,b.c.c+b.c.b)} -function Axb(a,b){return Iwb(a.a,b,(Bcb(),zcb))==null} -function Vsb(a,b){Gsb(a.d,b,a.b.b,a.b);++a.a;a.c=null} -function d3d(a,b){JLd(a,JD(b,153)?b:BD(b,1937).gl())} -function hkc(a,b){MAb(NAb(a.Oc(),new Rkc),new Tkc(b))} -function kkc(a,b,c,d,e){jkc(a,BD(Qc(b.k,c),15),c,d,e)} -function lOc(a){a.s=NaN;a.c=NaN;mOc(a,a.e);mOc(a,a.j)} -function it(a){a.a=null;a.e=null;Uhb(a.b);a.d=0;++a.c} -function gKc(a){return $wnd.Math.abs(a.d.e-a.e.e)-a.a} -function MAd(a,b,c){return BD(a.c._c(b,BD(c,133)),42)} -function os(){hs();return OC(GC(yG,1),Kie,538,0,[gs])} -function VPb(a){QPb();return Xod(jtd(a))==Xod(ltd(a))} -function aRb(a){_Qb.call(this);this.a=a;Ekb(a.a,this)} -function tPc(a,b){this.d=DPc(a);this.c=b;this.a=0.5*b} -function A6d(){$rb.call(this);this.a=true;this.b=true} -function aLd(a){return (a.i==null&&TKd(a),a.i).length} -function oRd(a){return JD(a,99)&&(BD(a,18).Bb&ote)!=0} -function w2d(a,b){++a.j;t3d(a,a.i,b);v2d(a,BD(b,332))} -function vId(a,b){b=a.nk(null,b);return uId(a,null,b)} -function ytd(a,b){a.hi()&&(b=Dtd(a,b));return a.Wh(b)} -function mdb(a,b,c){var d;d=ldb(a,b);zdb(c,d);return d} -function ldb(a,b){var c;c=new jdb;c.j=a;c.d=b;return c} -function Qb(a){if(a==null){throw vbb(new Geb)}return a} -function Fc(a){var b;b=a.j;return !b?(a.j=new Cw(a)):b} -function Vi(a){var b;b=a.f;return !b?(a.f=new Rj(a)):b} -function ci(a){var b;return b=a.k,!b?(a.k=new th(a)):b} -function Uc(a){var b;return b=a.k,!b?(a.k=new th(a)):b} -function Pc(a){var b;return b=a.g,!b?(a.g=new lh(a)):b} -function Yi(a){var b;return b=a.i,!b?(a.i=new Ci(a)):b} -function qo(a){var b;b=a.d;return !b?(a.d=new ap(a)):b} -function Fb(a){Qb(a);return JD(a,475)?BD(a,475):fcb(a)} -function Ix(a){if(JD(a,607)){return a}return new by(a)} -function qj(a,b){Pb(b,a.c.b.c.gc());return new Fj(a,b)} -function Dfe(a,b,c){wfe();++vfe;return new zge(a,b,c)} -function NC(a,b,c){qCb(c==null||FC(a,c));return a[b]=c} -function bv(a,b){var c;c=a.a.gc();Pb(b,c);return c-1-b} -function Afb(a,b){a.a+=String.fromCharCode(b);return a} -function Kfb(a,b){a.a+=String.fromCharCode(b);return a} -function ovb(a,b){uCb(b);while(a.c<a.d){a.ze(b,a.c++)}} -function Ohb(a,b){return ND(b)?Phb(a,b):Wd(irb(a.f,b))} -function ZPb(a,b){QPb();return a==jtd(b)?ltd(b):jtd(b)} -function isd(a,b){Qpd(a,new yC(b.f!=null?b.f:''+b.g))} -function ksd(a,b){Qpd(a,new yC(b.f!=null?b.f:''+b.g))} -function dVb(a){this.b=new Rkb;this.a=new Rkb;this.c=a} -function H1b(a){this.c=new d7c;this.a=new Rkb;this.b=a} -function pRb(a){_Qb.call(this);this.a=new d7c;this.c=a} -function yC(a){if(a==null){throw vbb(new Geb)}this.a=a} -function HA(a){fA();this.b=new Rkb;this.a=a;sA(this,a)} -function v4c(a){this.c=a;this.a=new Psb;this.b=new Psb} -function GB(){GB=ccb;EB=new HB(false);FB=new HB(true)} -function im(){im=ccb;Ql();hm=new ux((mmb(),mmb(),jmb))} -function yx(){yx=ccb;Ql();xx=new zx((mmb(),mmb(),lmb))} -function NFd(){NFd=ccb;MFd=BZd();!!(jGd(),PFd)&&DZd()} -function aac(a,b){I9b();return BD(Mpb(a,b.d),15).Fc(b)} -function pTb(a,b,c,d){return c==0||(c-d)/c<a.e||b>=a.g} -function NHc(a,b,c){var d;d=THc(a,b,c);return MHc(a,d)} -function Qpd(a,b){var c;c=a.a.length;tB(a,c);vB(a,c,b)} -function gCb(a,b){var c;c=console[a];c.call(console,b)} -function Bvd(a,b){var c;++a.j;c=a.Vi();a.Ii(a.oi(c,b))} -function E1c(a,b,c){BD(b.b,65);Hkb(b.a,new L1c(a,c,b))} -function oXd(a,b,c){VVd.call(this,b);this.a=a;this.b=c} -function Dge(a,b,c){xfe.call(this,a);this.a=b;this.b=c} -function dYd(a,b,c){this.a=a;lVd.call(this,b);this.b=c} -function f0d(a,b,c){this.a=a;mxd.call(this,8,b,null,c)} -function z1d(a){this.a=(uCb(Rve),Rve);this.b=a;new oUd} -function ct(a){this.c=a;this.b=this.c.a;this.a=this.c.e} -function usb(a){this.c=a;this.b=a.a.d.a;ypb(a.a.e,this)} -function uib(a){yCb(a.c!=-1);a.d.$c(a.c);a.b=a.c;a.c=-1} -function U6c(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} -function Uvb(a,b){return _vb(b,a.a.c.length),Ikb(a.a,b)} -function Hb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} -function oAb(a){if(0>=a){return new yAb}return pAb(a-1)} -function Nfe(a){if(!bfe)return false;return Qhb(bfe,a)} -function Ehe(a){if(a)return a.dc();return !a.Kc().Ob()} -function Q_b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} -function LHd(a){!a.a&&(a.a=new xMd(m5,a,4));return a.a} -function LQd(a){!a.d&&(a.d=new xMd(j5,a,1));return a.d} -function uCb(a){if(a==null){throw vbb(new Geb)}return a} -function Qzb(a){if(!a.c){a.d=true;Szb(a)}else{a.c.He()}} -function Tzb(a){if(!a.c){Uzb(a);a.d=true}else{Tzb(a.c)}} -function Kpb(a){Ae(a.a);a.b=KC(SI,Uhe,1,a.b.length,5,1)} -function qlc(a,b){return beb(b.j.c.length,a.j.c.length)} -function igd(a,b){a.c<0||a.b.b<a.c?Fsb(a.b,b):a.a._e(b)} -function Did(a,b){var c;c=a.Yg(b);c>=0?a.Bh(c):vid(a,b)} -function WHc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} -function Wwd(a){if(a.p!=4)throw vbb(new Ydb);return a.e} -function Vwd(a){if(a.p!=3)throw vbb(new Ydb);return a.e} -function Ywd(a){if(a.p!=6)throw vbb(new Ydb);return a.f} -function fxd(a){if(a.p!=6)throw vbb(new Ydb);return a.k} -function cxd(a){if(a.p!=3)throw vbb(new Ydb);return a.j} -function dxd(a){if(a.p!=4)throw vbb(new Ydb);return a.j} -function AYd(a){!a.b&&(a.b=new RYd(new NYd));return a.b} -function $1d(a){a.c==-2&&e2d(a,X0d(a.g,a.b));return a.c} -function pdb(a,b){var c;c=ldb('',a);c.n=b;c.i=1;return c} -function MNb(a,b){$Nb(BD(b.b,65),a);Hkb(b.a,new RNb(a))} -function Cnd(a,b){wtd((!a.a&&(a.a=new fTd(a,a)),a.a),b)} -function Qzd(a,b){this.b=a;Pyd.call(this,a,b);Ozd(this)} -function Yzd(a,b){this.b=a;czd.call(this,a,b);Wzd(this)} -function Ms(a,b,c,d){Wo.call(this,a,b);this.d=c;this.a=d} -function $o(a,b,c,d){Wo.call(this,a,c);this.a=b;this.f=d} -function iy(a,b){Pp.call(this,umb(Qb(a),Qb(b)));this.a=b} -function cae(){fod.call(this,Ewe,(p8d(),o8d));$9d(this)} -function AZd(){fod.call(this,_ve,(LFd(),KFd));uZd(this)} -function T0c(){$r.call(this,'DELAUNAY_TRIANGULATION',0)} -function vfb(a){return String.fromCharCode.apply(null,a)} -function Rhb(a,b,c){return ND(b)?Shb(a,b,c):jrb(a.f,b,c)} -function tmb(a){mmb();return !a?(ipb(),ipb(),hpb):a.ve()} -function d2c(a,b,c){Y1c();return c.pg(a,BD(b.cd(),146))} -function ix(a,b){ex();return new gx(new il(a),new Uk(b))} -function Iu(a){Xj(a,Mie);return Oy(wbb(wbb(5,a),a/10|0))} -function Vm(){Vm=ccb;Um=new wx(OC(GC(CK,1),zie,42,0,[]))} -function hob(a){!a.d&&(a.d=new lnb(a.c.Cc()));return a.d} -function eob(a){!a.a&&(a.a=new Gob(a.c.vc()));return a.a} -function gob(a){!a.b&&(a.b=new zob(a.c.ec()));return a.b} -function keb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} -function wtb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)} -function Gbc(a,b){return Bcb(),BD(b.b,19).a<a?true:false} -function Hbc(a,b){return Bcb(),BD(b.a,19).a<a?true:false} -function Mpb(a,b){return tqb(a.a,b)?a.b[BD(b,22).g]:null} -function kcb(a,b,c,d){a.a=qfb(a.a,0,b)+(''+d)+pfb(a.a,c)} -function OJb(a,b){a.u.Hc((rcd(),ncd))&&MJb(a,b);QJb(a,b)} -function bfb(a,b){BCb(b,a.length);return a.charCodeAt(b)} -function vtb(){hz.call(this,'There is no more element.')} -function xkb(a){this.d=a;this.a=this.d.b;this.b=this.d.c} -function kEb(a){a.b=false;a.c=false;a.d=false;a.a=false} -function Znd(a,b,c,d){Ynd(a,b,c,false);LPd(a,d);return a} -function h3c(a){a.j.c=KC(SI,Uhe,1,0,5,1);a.a=-1;return a} -function Old(a){!a.c&&(a.c=new y5d(z2,a,5,8));return a.c} -function Nld(a){!a.b&&(a.b=new y5d(z2,a,4,7));return a.b} -function Kkd(a){!a.n&&(a.n=new cUd(D2,a,1,7));return a.n} -function Yod(a){!a.c&&(a.c=new cUd(F2,a,9,9));return a.c} -function a2d(a){a.e==Gwe&&g2d(a,a1d(a.g,a.b));return a.e} -function b2d(a){a.f==Gwe&&h2d(a,b1d(a.g,a.b));return a.f} -function Ah(a){var b;b=a.b;!b&&(a.b=b=new Ph(a));return b} -function Ae(a){var b;for(b=a.Kc();b.Ob();){b.Pb();b.Qb()}} -function Fg(a){ag(a.d);if(a.d.d!=a.c){throw vbb(new Apb)}} -function Xx(a,b){this.b=a;this.c=b;this.a=new Gqb(this.b)} -function Zeb(a,b,c){this.a=Zie;this.d=a;this.b=b;this.c=c} -function Mub(a,b){this.d=(uCb(a),a);this.a=16449;this.c=b} -function nqd(a,b){ctd(a,Edb(Xpd(b,'x')),Edb(Xpd(b,'y')))} -function Aqd(a,b){ctd(a,Edb(Xpd(b,'x')),Edb(Xpd(b,'y')))} -function JAb(a,b){Uzb(a);return new YAb(a,new qBb(b,a.a))} -function NAb(a,b){Uzb(a);return new YAb(a,new IBb(b,a.a))} -function OAb(a,b){Uzb(a);return new bAb(a,new wBb(b,a.a))} -function PAb(a,b){Uzb(a);return new vAb(a,new CBb(b,a.a))} -function Cy(a,b){return new Ay(BD(Qb(a),62),BD(Qb(b),62))} -function PWb(a,b){LWb();return Kdb((uCb(a),a),(uCb(b),b))} -function fPb(){cPb();return OC(GC(GO,1),Kie,481,0,[bPb])} -function o_c(){i_c();return OC(GC(N_,1),Kie,482,0,[h_c])} -function x_c(){s_c();return OC(GC(O_,1),Kie,551,0,[r_c])} -function X0c(){R0c();return OC(GC(W_,1),Kie,530,0,[Q0c])} -function cEc(a){this.a=new Rkb;this.e=KC(WD,nie,48,a,0,2)} -function l$b(a,b,c,d){this.a=a;this.e=b;this.d=c;this.c=d} -function QIc(a,b,c,d){this.a=a;this.c=b;this.b=c;this.d=d} -function rKc(a,b,c,d){this.c=a;this.b=b;this.a=c;this.d=d} -function WKc(a,b,c,d){this.c=a;this.b=b;this.d=c;this.a=d} -function J6c(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d} -function gPc(a,b,c,d){this.a=a;this.d=b;this.c=c;this.b=d} -function Blc(a,b,c,d){$r.call(this,a,b);this.a=c;this.b=d} -function Ggd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} -function pec(a,b,c){Pmc(a.a,c);dmc(c);enc(a.b,c);xmc(b,c)} -function Pid(a,b,c){var d,e;d=QEd(a);e=b.Kh(c,d);return e} -function KPb(a,b){var c,d;c=a/b;d=QD(c);c>d&&++d;return d} -function Nnd(a){var b,c;c=(b=new UQd,b);NQd(c,a);return c} -function Ond(a){var b,c;c=(b=new UQd,b);RQd(c,a);return c} -function hqd(a,b){var c;c=Ohb(a.f,b);Yqd(b,c);return null} -function JZb(a){var b;b=P2b(a);if(b){return b}return null} -function Wod(a){!a.b&&(a.b=new cUd(B2,a,12,3));return a.b} -function YEd(a){return a!=null&&hnb(GEd,a.toLowerCase())} -function ied(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} -function jed(a,b){return Kdb(red(a)*qed(a),red(b)*qed(b))} -function wEb(a,b){return Kdb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} -function UVb(a,b){return Kdb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} -function pQb(a,b,c){c.a?eld(a,b.b-a.f/2):dld(a,b.a-a.g/2)} -function prd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} -function ord(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} -function JVd(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} -function ZVd(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} -function cXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} -function jXd(a,b,c,d){UVd();mWd.call(this,b,c,d);this.a=a} -function Ng(a,b){this.a=a;Hg.call(this,a,BD(a.d,15).Zc(b))} -function ZBd(a){this.f=a;this.c=this.f.e;a.f>0&&YBd(this)} -function lBb(a,b,c,d){this.b=a;this.c=d;nvb.call(this,b,c)} -function tib(a){sCb(a.b<a.d.gc());return a.d.Xb(a.c=a.b++)} -function Osb(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} -function u_b(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} -function Ry(a){if(a.n){a.e!==Sie&&a._d();a.j=null}return a} -function FD(a){CCb(a==null||OD(a)&&!(a.im===gcb));return a} -function p4b(a){this.b=new Rkb;Gkb(this.b,this.b);this.a=a} -function QPb(){QPb=ccb;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb} -function mmb(){mmb=ccb;jmb=new xmb;kmb=new Qmb;lmb=new Ymb} -function ipb(){ipb=ccb;fpb=new kpb;gpb=new kpb;hpb=new ppb} -function ODb(){ODb=ccb;LDb=new JDb;NDb=new oEb;MDb=new fEb} -function MCb(){if(HCb==256){GCb=ICb;ICb=new nb;HCb=0}++HCb} -function nd(a){var b;return b=a.f,!b?(a.f=new ne(a,a.c)):b} -function d2b(a){return Qld(a)&&Ccb(DD(hkd(a,(Nyc(),gxc))))} -function mcc(a,b){return Rc(a,BD(vNb(b,(Nyc(),Nxc)),19),b)} -function POc(a,b){return vPc(a.j,b.s,b.c)+vPc(b.e,a.s,a.c)} -function ooc(a,b){if(!!a.e&&!a.e.a){moc(a.e,b);ooc(a.e,b)}} -function noc(a,b){if(!!a.d&&!a.d.a){moc(a.d,b);noc(a.d,b)}} -function hed(a,b){return -Kdb(red(a)*qed(a),red(b)*qed(b))} -function cgd(a){return BD(a.cd(),146).tg()+':'+fcb(a.dd())} -function Zgc(a){Hgc();var b;b=BD(a.g,10);b.n.a=a.d.c+b.d.b} -function wgc(a,b,c){qgc();return iEb(BD(Ohb(a.e,b),522),c)} -function Y2c(a,b){rb(a);rb(b);return Xr(BD(a,22),BD(b,22))} -function oic(a,b,c){a.i=0;a.e=0;if(b==c){return}kic(a,b,c)} -function pic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c)} -function Spd(a,b,c){var d,e;d=Kcb(c);e=new TB(d);cC(a,b,e)} -function FSd(a,b,c,d,e,f){ESd.call(this,a,b,c,d,e,f?-2:-1)} -function U5d(a,b,c,d){MLd.call(this,b,c);this.b=a;this.a=d} -function QRc(a,b){new Psb;this.a=new s7c;this.b=a;this.c=b} -function Hec(a,b){BD(vNb(a,(wtc(),Qsc)),15).Fc(b);return b} -function Rb(a,b){if(a==null){throw vbb(new Heb(b))}return a} -function WKd(a){!a.q&&(a.q=new cUd(n5,a,11,10));return a.q} -function ZKd(a){!a.s&&(a.s=new cUd(t5,a,21,17));return a.s} -function Vod(a){!a.a&&(a.a=new cUd(E2,a,10,11));return a.a} -function Dx(a){return JD(a,14)?new Vqb(BD(a,14)):Ex(a.Kc())} -function Ni(a){return new aj(a,a.e.Hd().gc()*a.c.Hd().gc())} -function Zi(a){return new kj(a,a.e.Hd().gc()*a.c.Hd().gc())} -function rz(a){return !!a&&!!a.hashCode?a.hashCode():FCb(a)} -function Qhb(a,b){return b==null?!!irb(a.f,null):Brb(a.g,b)} -function Oq(a){Qb(a);return mr(new Sr(ur(a.a.Kc(),new Sq)))} -function vmb(a){mmb();return JD(a,54)?new Yob(a):new Inb(a)} -function VDb(a,b,c){if(a.f){return a.f.Ne(b,c)}return false} -function Gfb(a,b){a.a=qfb(a.a,0,b)+''+pfb(a.a,b+1);return a} -function fVb(a,b){var c;c=Sqb(a.a,b);c&&(b.d=null);return c} -function zpb(a){var b,c;c=a;b=c.$modCount|0;c.$modCount=b+1} -function pu(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} -function hOb(a){this.b=a;this.a=new Hxb(BD(Qb(new kOb),62))} -function uEb(a){this.c=a;this.b=new Hxb(BD(Qb(new xEb),62))} -function SVb(a){this.c=a;this.b=new Hxb(BD(Qb(new VVb),62))} -function FYb(){this.a=new HXb;this.b=new LXb;this.d=new SYb} -function UZb(){this.a=new s7c;this.b=(Xj(3,Jie),new Skb(3))} -function VMc(){this.b=new Tqb;this.d=new Psb;this.e=new twb} -function K6c(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} -function Ay(a,b){oi.call(this,new Qwb(a));this.a=a;this.b=b} -function eod(){bod(this,new $md);this.wb=(NFd(),MFd);LFd()} -function eHc(a){Odd(a,'No crossing minimization',1);Qdd(a)} -function Gz(a){Az();$wnd.setTimeout(function(){throw a},0)} -function _Kd(a){if(!a.u){$Kd(a);a.u=new YOd(a,a)}return a.u} -function wjd(a){var b;b=BD(Ajd(a,16),26);return !b?a.zh():b} -function Jsd(a,b){return JD(b,146)&&dfb(a.b,BD(b,146).tg())} -function t0d(a,b){return a.a?b.Wg().Kc():BD(b.Wg(),69).Zh()} -function u3b(a){return a.k==(j0b(),h0b)&&wNb(a,(wtc(),Csc))} -function ux(a){this.a=(mmb(),JD(a,54)?new Yob(a):new Inb(a))} -function Rz(){Rz=ccb;var a,b;b=!Xz();a=new dA;Qz=b?new Yz:a} -function Wy(a,b){var c;c=hdb(a.gm);return b==null?c:c+': '+b} -function Eob(a,b){var c;c=a.b.Qc(b);Fob(c,a.b.gc());return c} -function ytb(a,b){if(a==null){throw vbb(new Heb(b))}return a} -function irb(a,b){return grb(a,b,hrb(a,b==null?0:a.b.se(b)))} -function ofb(a,b,c){return c>=0&&dfb(a.substr(c,b.length),b)} -function H2d(a,b,c,d,e,f,g){return new O7d(a.e,b,c,d,e,f,g)} -function Cxd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} -function vyd(a,b,c,d,e,f){this.a=a;nxd.call(this,b,c,d,e,f)} -function $Ec(a,b){this.g=a;this.d=OC(GC(OQ,1),kne,10,0,[b])} -function KVd(a,b){this.e=a;this.a=SI;this.b=R5d(b);this.c=b} -function cIb(a,b){$Gb.call(this);THb(this);this.a=a;this.c=b} -function kBc(a,b,c,d){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d)} -function nBc(a,b,c,d){NC(a.c[b.g],b.g,c);NC(a.b[b.g],b.g,d)} -function cBc(){_Ac();return OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])} -function crc(){_qc();return OC(GC(MW,1),Kie,479,0,[$qc,Zqc])} -function Aqc(){xqc();return OC(GC(JW,1),Kie,419,0,[vqc,wqc])} -function Lpc(){Ipc();return OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])} -function psc(){msc();return OC(GC(SW,1),Kie,420,0,[ksc,lsc])} -function EAc(){BAc();return OC(GC(cX,1),Kie,421,0,[zAc,AAc])} -function XIc(){UIc();return OC(GC(mY,1),Kie,523,0,[TIc,SIc])} -function KOc(){HOc();return OC(GC(DZ,1),Kie,520,0,[GOc,FOc])} -function _Lc(){YLc();return OC(GC(fZ,1),Kie,516,0,[XLc,WLc])} -function hMc(){eMc();return OC(GC(gZ,1),Kie,515,0,[cMc,dMc])} -function IQc(){FQc();return OC(GC(YZ,1),Kie,455,0,[DQc,EQc])} -function bUc(){$Tc();return OC(GC(F$,1),Kie,425,0,[ZTc,YTc])} -function VTc(){STc();return OC(GC(E$,1),Kie,480,0,[QTc,RTc])} -function VUc(){PUc();return OC(GC(K$,1),Kie,495,0,[NUc,OUc])} -function jWc(){fWc();return OC(GC(X$,1),Kie,426,0,[dWc,eWc])} -function g1c(){a1c();return OC(GC(X_,1),Kie,429,0,[_0c,$0c])} -function F_c(){C_c();return OC(GC(P_,1),Kie,430,0,[B_c,A_c])} -function PEb(){MEb();return OC(GC(aN,1),Kie,428,0,[LEb,KEb])} -function XEb(){UEb();return OC(GC(bN,1),Kie,427,0,[SEb,TEb])} -function $Rb(){XRb();return OC(GC(gP,1),Kie,424,0,[VRb,WRb])} -function B5b(){y5b();return OC(GC(ZR,1),Kie,511,0,[x5b,w5b])} -function lid(a,b,c,d){return c>=0?a.jh(b,c,d):a.Sg(null,c,d)} -function hgd(a){if(a.b.b==0){return a.a.$e()}return Lsb(a.b)} -function Xwd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.f)} -function exd(a){if(a.p!=5)throw vbb(new Ydb);return Tbb(a.k)} -function pNd(a){PD(a.a)===PD((NKd(),MKd))&&qNd(a);return a.a} -function by(a){this.a=BD(Qb(a),271);this.b=(mmb(),new Zob(a))} -function bQc(a,b){$Pc(this,new f7c(a.a,a.b));_Pc(this,Ru(b))} -function FQc(){FQc=ccb;DQc=new GQc(jle,0);EQc=new GQc(kle,1)} -function YLc(){YLc=ccb;XLc=new ZLc(kle,0);WLc=new ZLc(jle,1)} -function Hp(){Gp.call(this,new Mqb(Cv(12)));Lb(true);this.a=2} -function Hge(a,b,c){wfe();xfe.call(this,a);this.b=b;this.a=c} -function cWd(a,b,c){UVd();VVd.call(this,b);this.a=a;this.b=c} -function aIb(a){$Gb.call(this);THb(this);this.a=a;this.c=true} -function isb(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} -function $Cb(a){var b;NGb(a.a);MGb(a.a);b=new YGb(a.a);UGb(b)} -function iKb(a,b){hKb(a,true);Hkb(a.e.wf(),new mKb(a,true,b))} -function tlb(a,b){pCb(b);return vlb(a,KC(WD,oje,25,b,15,1),b)} -function YPb(a,b){QPb();return a==Xod(jtd(b))||a==Xod(ltd(b))} -function Phb(a,b){return b==null?Wd(irb(a.f,null)):Crb(a.g,b)} -function Ksb(a){return a.b==0?null:(sCb(a.b!=0),Nsb(a,a.a.a))} -function QD(a){return Math.max(Math.min(a,Ohe),-2147483648)|0} -function uz(a,b){var c=tz[a.charCodeAt(0)];return c==null?a:c} -function Cx(a,b){Rb(a,'set1');Rb(b,'set2');return new Px(a,b)} -function QUb(a,b){var c;c=zUb(a.f,b);return P6c(V6c(c),a.f.d)} -function Jwb(a,b){var c,d;c=b;d=new fxb;Lwb(a,c,d);return d.d} -function NJb(a,b,c,d){var e;e=new aHb;b.a[c.g]=e;Npb(a.b,d,e)} -function zid(a,b,c){var d;d=a.Yg(b);d>=0?a.sh(d,c):uid(a,b,c)} -function hvd(a,b,c){evd();!!a&&Rhb(dvd,a,b);!!a&&Rhb(cvd,a,c)} -function g_c(a,b,c){this.i=new Rkb;this.b=a;this.g=b;this.a=c} -function VZc(a,b,c){this.c=new Rkb;this.e=a;this.f=b;this.b=c} -function b$c(a,b,c){this.a=new Rkb;this.e=a;this.f=b;this.c=c} -function Zy(a,b){Py(this);this.f=b;this.g=a;Ry(this);this._d()} -function ZA(a,b){var c;c=a.q.getHours();a.q.setDate(b);YA(a,c)} -function no(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Od(c.g,c.i)}} -function Fx(a){var b;b=new Uqb(Cv(a.length));nmb(b,a);return b} -function ecb(a){function b(){} -;b.prototype=a||{};return new b} -function dkb(a,b){if(Zjb(a,b)){wkb(a);return true}return false} -function aC(a,b){if(b==null){throw vbb(new Geb)}return bC(a,b)} -function tdb(a){if(a.qe()){return null}var b=a.n;return _bb[b]} -function Mld(a){if(a.Db>>16!=3)return null;return BD(a.Cb,33)} -function mpd(a){if(a.Db>>16!=9)return null;return BD(a.Cb,33)} -function fmd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,79)} -function Ind(a){if(a.Db>>16!=7)return null;return BD(a.Cb,235)} -function Fod(a){if(a.Db>>16!=7)return null;return BD(a.Cb,160)} -function Xod(a){if(a.Db>>16!=11)return null;return BD(a.Cb,33)} -function nid(a,b){var c;c=a.Yg(b);return c>=0?a.lh(c):tid(a,b)} -function Dtd(a,b){var c;c=new Bsb(b);Ve(c,a);return new Tkb(c)} -function Uud(a){var b;b=a.d;b=a.si(a.f);wtd(a,b);return b.Ob()} -function t_b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} -function A4b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} -function Zod(a){return !a.a&&(a.a=new cUd(E2,a,10,11)),a.a.i>0} -function oDb(){this.a=new zsb;this.e=new Tqb;this.g=0;this.i=0} -function BGc(a){this.a=a;this.b=KC(SX,nie,1944,a.e.length,0,2)} -function RHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length)} -function eMc(){eMc=ccb;cMc=new fMc(vle,0);dMc=new fMc('UP',1)} -function STc(){STc=ccb;QTc=new TTc(Yqe,0);RTc=new TTc('FAN',1)} -function evd(){evd=ccb;dvd=new Lqb;cvd=new Lqb;ivd(hK,new jvd)} -function Swd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.f,0)} -function _wd(a){if(a.p!=0)throw vbb(new Ydb);return Kbb(a.k,0)} -function MHd(a){if(a.Db>>16!=3)return null;return BD(a.Cb,147)} -function ZJd(a){if(a.Db>>16!=6)return null;return BD(a.Cb,235)} -function WId(a){if(a.Db>>16!=17)return null;return BD(a.Cb,26)} -function rdb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.le(b))} -function hrb(a,b){var c;c=a.a.get(b);return c==null?new Array:c} -function aB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);YA(a,c)} -function Shb(a,b,c){return b==null?jrb(a.f,null,c):Drb(a.g,b,c)} -function FLd(a,b,c,d,e,f){return new pSd(a.e,b,a.aj(),c,d,e,f)} -function Tfb(a,b,c){a.a=qfb(a.a,0,b)+(''+c)+pfb(a.a,b);return a} -function bq(a,b,c){Ekb(a.a,(Vm(),Wj(b,c),new Wo(b,c)));return a} -function uu(a){ot(a.c);a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} -function vu(a){ot(a.e);a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} -function RZb(a,b){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Ekb(a.d.e,a)} -function QZb(a,b){!!a.c&&Lkb(a.c.g,a);a.c=b;!!a.c&&Ekb(a.c.g,a)} -function $_b(a,b){!!a.c&&Lkb(a.c.a,a);a.c=b;!!a.c&&Ekb(a.c.a,a)} -function F0b(a,b){!!a.i&&Lkb(a.i.j,a);a.i=b;!!a.i&&Ekb(a.i.j,a)} -function jDb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} -function qXb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new Tkb(c))} -function aOb(a,b){this.a=a;this.c=R6c(this.a);this.b=new K6c(b)} -function IAb(a){var b;Uzb(a);b=new Tqb;return JAb(a,new jBb(b))} -function wCb(a,b){if(a<0||a>b){throw vbb(new qcb(Ake+a+Bke+b))}} -function Ppb(a,b){return vqb(a.a,b)?Qpb(a,BD(b,22).g,null):null} -function WUb(a){LUb();return Bcb(),BD(a.a,81).d.e!=0?true:false} -function qs(){qs=ccb;ps=as((hs(),OC(GC(yG,1),Kie,538,0,[gs])))} -function SBc(){SBc=ccb;RBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} -function ZBc(){ZBc=ccb;YBc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} -function oCc(){oCc=ccb;nCc=c3c(new j3c,(qUb(),pUb),(S8b(),J8b))} -function aJc(){aJc=ccb;_Ic=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} -function FJc(){FJc=ccb;EJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} -function ILc(){ILc=ccb;HLc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} -function wMc(){wMc=ccb;vMc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b))} -function fUc(){fUc=ccb;eUc=c3c(new j3c,(yRc(),xRc),(qSc(),kSc))} -function DOc(a,b,c,d){this.c=a;this.d=d;BOc(this,b);COc(this,c)} -function W3c(a){this.c=new Psb;this.b=a.b;this.d=a.c;this.a=a.a} -function e7c(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} -function BOc(a,b){!!a.a&&Lkb(a.a.k,a);a.a=b;!!a.a&&Ekb(a.a.k,a)} -function COc(a,b){!!a.b&&Lkb(a.b.f,a);a.b=b;!!a.b&&Ekb(a.b.f,a)} -function D1c(a,b){E1c(a,a.b,a.c);BD(a.b.b,65);!!b&&BD(b.b,65).b} -function BUd(a,b){CUd(a,b);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2)} -function cJd(a,b){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,b)} -function lKd(a,b){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,b)} -function T2d(a,b){return Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)} -function jsd(a,b){var c,d;c=b.c;d=c!=null;d&&Qpd(a,new yC(b.c))} -function XOd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} -function eTd(a){var b,c;c=(LFd(),b=new UQd,b);NQd(c,a);return c} -function yCc(a,b){var c;c=new H1b(a);b.c[b.c.length]=c;return c} -function Aw(a,b){var c;c=BD(Hv(nd(a.a),b),14);return !c?0:c.gc()} -function UAb(a){var b;Uzb(a);b=(ipb(),ipb(),gpb);return VAb(a,b)} -function nr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} -function Ki(a,b){Ii.call(this,new Mqb(Cv(a)));Xj(b,mie);this.a=b} -function Jib(a,b,c){xCb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} -function Mkb(a,b,c){var d;xCb(b,c,a.c.length);d=c-b;cCb(a.c,b,d)} -function Fub(a,b){Eub(a,Tbb(xbb(Obb(b,24),nke)),Tbb(xbb(b,nke)))} -function tCb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ake+a+Bke+b))}} -function BCb(a,b){if(a<0||a>=b){throw vbb(new Xfb(Ake+a+Bke+b))}} -function Kub(a,b){this.b=(uCb(a),a);this.a=(b&Rje)==0?b|64|oie:b} -function kkb(a){Vjb(this);dCb(this.a,geb($wnd.Math.max(8,a))<<1)} -function A0b(a){return l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a]))} -function Iyb(){Fyb();return OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])} -function jHb(){gHb();return OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])} -function QHb(){NHb();return OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])} -function HIb(){EIb();return OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])} -function UXb(){RXb();return OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])} -function BTb(){yTb();return OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])} -function Bzc(){xzc();return OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])} -function Xpc(){Rpc();return OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])} -function eqc(){bqc();return OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])} -function Jqc(){Gqc();return OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])} -function Ikc(){Fkc();return OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])} -function hsc(){esc();return OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])} -function $rc(){Xrc();return OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])} -function NAc(){KAc();return OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])} -function wAc(){tAc();return OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])} -function WAc(){TAc();return OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])} -function OBc(){LBc();return OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])} -function wBc(){tBc();return OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])} -function FBc(){CBc();return OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])} -function uGc(){rGc();return OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])} -function xVc(){tVc();return OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])} -function tWc(){pWc();return OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])} -function CYc(){zYc();return OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])} -function wXc(){sXc();return OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])} -function _$c(){Y$c();return OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])} -function kbd(){hbd();return OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])} -function tad(){qad();return OC(GC(u1,1),Kie,272,0,[nad,oad,pad])} -function o3d(a,b){return p3d(a,b,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} -function LZc(a,b,c){var d;d=MZc(a,b,false);return d.b<=b&&d.a<=c} -function tMc(a,b,c){var d;d=new sMc;d.b=b;d.a=c;++b.b;Ekb(a.d,d)} -function fs(a,b){var c;c=(uCb(a),a).g;lCb(!!c);uCb(b);return c(b)} -function av(a,b){var c,d;d=cv(a,b);c=a.a.Zc(d);return new qv(a,c)} -function cKd(a){if(a.Db>>16!=6)return null;return BD(aid(a),235)} -function Uwd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.f)&aje} -function bxd(a){if(a.p!=2)throw vbb(new Ydb);return Tbb(a.k)&aje} -function Z1d(a){a.a==(T0d(),S0d)&&d2d(a,U0d(a.g,a.b));return a.a} -function _1d(a){a.d==(T0d(),S0d)&&f2d(a,Y0d(a.g,a.b));return a.d} -function mlb(a){sCb(a.a<a.c.c.length);a.b=a.a++;return a.c.c[a.b]} -function hEb(a,b){a.b=a.b|b.b;a.c=a.c|b.c;a.d=a.d|b.d;a.a=a.a|b.a} -function xbb(a,b){return zbb(dD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} -function Mbb(a,b){return zbb(jD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} -function Vbb(a,b){return zbb(rD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} -function Dub(a){return wbb(Nbb(Cbb(Cub(a,32)),32),Cbb(Cub(a,32)))} -function Mu(a){Qb(a);return JD(a,14)?new Tkb(BD(a,14)):Nu(a.Kc())} -function EWb(a,b){AWb();return a.c==b.c?Kdb(b.d,a.d):Kdb(a.c,b.c)} -function FWb(a,b){AWb();return a.c==b.c?Kdb(a.d,b.d):Kdb(a.c,b.c)} -function HWb(a,b){AWb();return a.c==b.c?Kdb(a.d,b.d):Kdb(b.c,a.c)} -function GWb(a,b){AWb();return a.c==b.c?Kdb(b.d,a.d):Kdb(b.c,a.c)} -function WGb(a,b){var c;c=Edb(ED(a.a.We((Y9c(),Q9c))));XGb(a,b,c)} -function Rgc(a,b){var c;c=BD(Ohb(a.g,b),57);Hkb(b.d,new Qhc(a,c))} -function GYb(a,b){var c,d;c=d_b(a);d=d_b(b);return c<d?-1:c>d?1:0} -function bjc(a,b){var c,d;c=ajc(b);d=c;return BD(Ohb(a.c,d),19).a} -function iSc(a,b){var c;c=a+'';while(c.length<b){c='0'+c}return c} -function WRc(a){return a.c==null||a.c.length==0?'n_'+a.g:'n_'+a.c} -function oRb(a){return a.c==null||a.c.length==0?'n_'+a.b:'n_'+a.c} -function qz(a,b){return !!a&&!!a.equals?a.equals(b):PD(a)===PD(b)} -function dkd(a,b){if(b==0){return !!a.o&&a.o.f!=0}return mid(a,b)} -function Tdd(a,b,c){var d;if(a.n&&!!b&&!!c){d=new kgd;Ekb(a.e,d)}} -function cIc(a,b,c){var d;d=a.d[b.p];a.d[b.p]=a.d[c.p];a.d[c.p]=d} -function kxd(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} -function lxd(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} -function zge(a,b,c){xfe.call(this,25);this.b=a;this.a=b;this.c=c} -function $fe(a){wfe();xfe.call(this,a);this.c=false;this.a=false} -function sSd(a,b,c,d,e,f){rSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function uSd(a,b,c,d,e,f){tSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function wSd(a,b,c,d,e,f){vSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function ySd(a,b,c,d,e,f){xSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function ASd(a,b,c,d,e,f){zSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function CSd(a,b,c,d,e,f){BSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function HSd(a,b,c,d,e,f){GSd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function JSd(a,b,c,d,e,f){ISd.call(this,a,b,c,d,e);f&&(this.o=-2)} -function nWd(a,b,c,d){VVd.call(this,c);this.b=a;this.c=b;this.d=d} -function x$c(a,b){this.a=new Rkb;this.d=new Rkb;this.f=a;this.c=b} -function PTb(){this.c=new bUb;this.a=new FYb;this.b=new wZb;$Yb()} -function b2c(){Y1c();this.b=new Lqb;this.a=new Lqb;this.c=new Rkb} -function j2d(a,b){this.g=a;this.d=(T0d(),S0d);this.a=S0d;this.b=b} -function O1d(a,b){this.f=a;this.a=(T0d(),R0d);this.c=R0d;this.b=b} -function h9d(a,b){!a.c&&(a.c=new u3d(a,0));f3d(a.c,(Q8d(),I8d),b)} -function $Tc(){$Tc=ccb;ZTc=new _Tc('DFS',0);YTc=new _Tc('BFS',1)} -function Cc(a,b,c){var d;d=BD(a.Zb().xc(b),14);return !!d&&d.Hc(c)} -function Gc(a,b,c){var d;d=BD(a.Zb().xc(b),14);return !!d&&d.Mc(c)} -function Ofb(a,b,c,d){a.a+=''+qfb(b==null?Xhe:fcb(b),c,d);return a} -function Xnd(a,b,c,d,e,f){Ynd(a,b,c,f);eLd(a,d);fLd(a,e);return a} -function Ysb(a){sCb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} -function Jgb(a){while(a.d>0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} -function wwb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} -function RSd(a){return !!a.a&&QSd(a.a.a).i!=0&&!(!!a.b&&QTd(a.b))} -function cLd(a){return !!a.u&&VKd(a.u.a).i!=0&&!(!!a.n&&FMd(a.n))} -function $i(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),16,new ij(a))} -function XA(a,b){return ueb(Cbb(a.q.getTime()),Cbb(b.q.getTime()))} -function k_b(a){return BD(Qkb(a,KC(AQ,jne,17,a.c.length,0,1)),474)} -function l_b(a){return BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193)} -function cKc(a){FJc();return !OZb(a)&&!(!OZb(a)&&a.c.i.c==a.d.i.c)} -function kDb(a,b,c){var d;d=(Qb(a),new Tkb(a));iDb(new jDb(d,b,c))} -function rXb(a,b,c){var d;d=(Qb(a),new Tkb(a));pXb(new qXb(d,b,c))} -function Nwb(a,b){var c;c=1-b;a.a[c]=Owb(a.a[c],c);return Owb(a,b)} -function YXc(a,b){var c;a.e=new QXc;c=gVc(b);Okb(c,a.c);ZXc(a,c,0)} -function o4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.a,e)} -function p4c(a,b,c,d){var e;e=new w4c;e.a=b;e.b=c;e.c=d;Dsb(a.b,e)} -function i6d(a){var b,c,d;b=new A6d;c=s6d(b,a);z6d(b);d=c;return d} -function vZd(){var a,b,c;b=(c=(a=new UQd,a),c);Ekb(rZd,b);return b} -function H2c(a){a.j.c=KC(SI,Uhe,1,0,5,1);Ae(a.c);h3c(a.a);return a} -function tgc(a){qgc();if(JD(a.g,10)){return BD(a.g,10)}return null} -function Zw(a){if(Ah(a).dc()){return false}Bh(a,new bx);return true} -function _y(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} -function Pb(a,b){if(a<0||a>=b){throw vbb(new qcb(Ib(a,b)))}return a} -function Tb(a,b,c){if(a<0||b<a||b>c){throw vbb(new qcb(Kb(a,b,c)))}} -function eVb(a,b){Qqb(a.a,b);if(b.d){throw vbb(new hz(Hke))}b.d=a} -function xpb(a,b){if(b.$modCount!=a.$modCount){throw vbb(new Apb)}} -function $pb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} -function dib(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} -function msb(a,b){if(JD(b,42)){return Jd(a.a,BD(b,42))}return false} -function qAb(a,b){if(a.a<=a.b){b.ud(a.a++);return true}return false} -function Sbb(a){var b;if(Fbb(a)){b=a;return b==-0.?0:b}return oD(a)} -function tAb(a){var b;Tzb(a);b=new drb;_ub(a.a,new BAb(b));return b} -function Yzb(a){var b;Tzb(a);b=new Gpb;_ub(a.a,new mAb(b));return b} -function Bib(a,b){this.a=a;vib.call(this,a);wCb(b,a.gc());this.b=b} -function orb(a){this.e=a;this.b=this.e.a.entries();this.a=new Array} -function Oi(a){return Zj(a.e.Hd().gc()*a.c.Hd().gc(),273,new cj(a))} -function Qu(a){return new Skb((Xj(a,Mie),Oy(wbb(wbb(5,a),a/10|0))))} -function m_b(a){return BD(Qkb(a,KC(aR,lne,11,a.c.length,0,1)),1943)} -function sMb(a,b,c){return c.f.c.length>0?HMb(a.a,b,c):HMb(a.b,b,c)} -function SZb(a,b,c){!!a.d&&Lkb(a.d.e,a);a.d=b;!!a.d&&Dkb(a.d.e,c,a)} -function a5b(a,b){i5b(b,a);k5b(a.d);k5b(BD(vNb(a,(Nyc(),wxc)),207))} -function _4b(a,b){f5b(b,a);h5b(a.d);h5b(BD(vNb(a,(Nyc(),wxc)),207))} -function Ypd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.fe());return d} -function Zpd(a,b){var c,d;c=tB(a,b);d=null;!!c&&(d=c.ie());return d} -function $pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=c.ie());return d} -function _pd(a,b){var c,d;c=aC(a,b);d=null;!!c&&(d=aqd(c));return d} -function Tqd(a,b,c){var d;d=Wpd(c);ro(a.g,d,b);ro(a.i,b,c);return b} -function Ez(a,b,c){var d;d=Cz();try{return Bz(a,b,c)}finally{Fz(d)}} -function C6d(a){var b;b=a.Wg();this.a=JD(b,69)?BD(b,69).Zh():b.Kc()} -function j3c(){D2c.call(this);this.j.c=KC(SI,Uhe,1,0,5,1);this.a=-1} -function mxd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} -function jk(a,b,c,d){this.e=d;this.d=null;this.c=a;this.a=b;this.b=c} -function uEc(a,b,c){this.d=new HEc(this);this.e=a;this.i=b;this.f=c} -function msc(){msc=ccb;ksc=new nsc(gle,0);lsc=new nsc('TOP_LEFT',1)} -function cDc(){cDc=ccb;bDc=ix(meb(1),meb(4));aDc=ix(meb(1),meb(2))} -function z_c(){z_c=ccb;y_c=as((s_c(),OC(GC(O_,1),Kie,551,0,[r_c])))} -function q_c(){q_c=ccb;p_c=as((i_c(),OC(GC(N_,1),Kie,482,0,[h_c])))} -function Z0c(){Z0c=ccb;Y0c=as((R0c(),OC(GC(W_,1),Kie,530,0,[Q0c])))} -function hPb(){hPb=ccb;gPb=as((cPb(),OC(GC(GO,1),Kie,481,0,[bPb])))} -function yLb(){vLb();return OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])} -function qxb(){lxb();return OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])} -function UOb(){ROb();return OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])} -function UMb(){RMb();return OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])} -function sWb(){lWb();return OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])} -function kbc(){gbc();return OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])} -function Vc(a,b,c,d){return JD(c,54)?new Cg(a,b,c,d):new qg(a,b,c,d)} -function Djc(){Ajc();return OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])} -function okc(a){var b;return a.j==(Ucd(),Rcd)&&(b=pkc(a),uqb(b,zcd))} -function Mdc(a,b){var c;c=b.a;QZb(c,b.c.d);RZb(c,b.d.d);q7c(c.a,a.n)} -function Smc(a,b){return BD(Btb(QAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} -function Tmc(a,b){return BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113)} -function _w(a){return new Kub(rmb(BD(a.a.dd(),14).gc(),a.a.cd()),16)} -function Qq(a){if(JD(a,14)){return BD(a,14).dc()}return !a.Kc().Ob()} -function ugc(a){qgc();if(JD(a.g,145)){return BD(a.g,145)}return null} -function Ko(a){if(a.e.g!=a.b){throw vbb(new Apb)}return !!a.c&&a.d>0} -function Xsb(a){sCb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} -function Xjb(a,b){uCb(b);NC(a.a,a.c,b);a.c=a.c+1&a.a.length-1;_jb(a)} -function Wjb(a,b){uCb(b);a.b=a.b-1&a.a.length-1;NC(a.a,a.b,b);_jb(a)} -function A2c(a,b){var c;for(c=a.j.c.length;c<b;c++){Ekb(a.j,a.rg())}} -function gBc(a,b,c,d){var e;e=d[b.g][c.g];return Edb(ED(vNb(a.a,e)))} -function goc(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} -function DZc(a,b,c,d,e){this.a=a;this.e=b;this.f=c;this.b=d;this.g=e} -function Fz(a){a&&Mz((Kz(),Jz));--xz;if(a){if(zz!=-1){Hz(zz);zz=-1}}} -function Nzc(){Izc();return OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])} -function ERc(){yRc();return OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])} -function mXc(){iXc();return OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])} -function wdd(){tdd();return OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])} -function vbd(){rbd();return OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])} -function Dad(){Aad();return OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])} -function Ged(){Ded();return OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])} -function sgd(){pgd();return OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])} -function gvd(a){evd();return Mhb(dvd,a)?BD(Ohb(dvd,a),331).ug():null} -function cid(a,b,c){return b<0?tid(a,c):BD(c,66).Nj().Sj(a,a.yh(),b)} -function Sqd(a,b,c){var d;d=Wpd(c);ro(a.d,d,b);Rhb(a.e,b,c);return b} -function Uqd(a,b,c){var d;d=Wpd(c);ro(a.j,d,b);Rhb(a.k,b,c);return b} -function dtd(a){var b,c;b=(Fhd(),c=new Tld,c);!!a&&Rld(b,a);return b} -function wud(a){var b;b=a.ri(a.i);a.i>0&&$fb(a.g,0,b,0,a.i);return b} -function qEd(a,b){pEd();var c;c=BD(Ohb(oEd,a),55);return !c||c.wj(b)} -function Twd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.f)<<24>>24} -function axd(a){if(a.p!=1)throw vbb(new Ydb);return Tbb(a.k)<<24>>24} -function gxd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.k)<<16>>16} -function Zwd(a){if(a.p!=7)throw vbb(new Ydb);return Tbb(a.f)<<16>>16} -function sr(a){var b;b=0;while(a.Ob()){a.Pb();b=wbb(b,1)}return Oy(b)} -function nx(a,b){var c;c=new Vfb;a.xd(c);c.a+='..';b.yd(c);return c.a} -function Sgc(a,b,c){var d;d=BD(Ohb(a.g,c),57);Ekb(a.a.c,new vgd(b,d))} -function VCb(a,b,c){return Ddb(ED(Wd(irb(a.f,b))),ED(Wd(irb(a.f,c))))} -function E2d(a,b,c){return F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} -function L2d(a,b,c){return M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} -function q3d(a,b,c){return r3d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)} -function JJc(a,b){return a==(j0b(),h0b)&&b==h0b?4:a==h0b||b==h0b?8:32} -function Nd(a,b){return PD(b)===PD(a)?'(this Map)':b==null?Xhe:fcb(b)} -function kFd(a,b){return BD(b==null?Wd(irb(a.f,null)):Crb(a.g,b),281)} -function Rqd(a,b,c){var d;d=Wpd(c);Rhb(a.b,d,b);Rhb(a.c,b,c);return b} -function Bfd(a,b){var c;c=b;while(c){O6c(a,c.i,c.j);c=Xod(c)}return a} -function kt(a,b){var c;c=vmb(Nu(new wu(a,b)));ir(new wu(a,b));return c} -function R6d(a,b){Q6d();var c;c=BD(a,66).Mj();kVd(c,b);return c.Ok(b)} -function TOc(a,b,c,d,e){var f;f=OOc(e,c,d);Ekb(b,tOc(e,f));XOc(a,e,b)} -function mic(a,b,c){a.i=0;a.e=0;if(b==c){return}lic(a,b,c);kic(a,b,c)} -function dB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+nje);YA(a,c)} -function dC(d,a,b){if(b){var c=b.ee();d.a[a]=c(b)}else{delete d.a[a]}} -function vB(d,a,b){if(b){var c=b.ee();b=c(b)}else{b=undefined}d.a[a]=b} -function pCb(a){if(a<0){throw vbb(new Feb('Negative array size: '+a))}} -function VKd(a){if(!a.n){$Kd(a);a.n=new JMd(a,j5,a);_Kd(a)}return a.n} -function Fqb(a){sCb(a.a<a.c.a.length);a.b=a.a;Dqb(a);return a.c.b[a.b]} -function Yjb(a){if(a.b==a.c){return}a.a=KC(SI,Uhe,1,8,5,1);a.b=0;a.c=0} -function AQb(a){this.b=new Lqb;this.c=new Lqb;this.d=new Lqb;this.a=a} -function lge(a,b){wfe();xfe.call(this,a);this.a=b;this.c=-1;this.b=-1} -function lSd(a,b,c,d){kxd.call(this,1,c,d);jSd(this);this.c=a;this.b=b} -function mSd(a,b,c,d){lxd.call(this,1,c,d);jSd(this);this.c=a;this.b=b} -function O7d(a,b,c,d,e,f,g){nxd.call(this,b,d,e,f,g);this.c=a;this.a=c} -function LVd(a,b,c){this.e=a;this.a=SI;this.b=R5d(b);this.c=b;this.d=c} -function Lo(a){this.e=a;this.c=this.e.a;this.b=this.e.g;this.d=this.e.i} -function nYd(a){this.c=a;this.a=BD(wId(a),148);this.b=this.a.Aj().Nh()} -function Irb(a){this.d=a;this.b=this.d.a.entries();this.a=this.b.next()} -function $rb(){Lqb.call(this);Trb(this);this.d.b=this.d;this.d.a=this.d} -function mRb(a,b){_Qb.call(this);this.a=a;this.b=b;Ekb(this.a.b,this)} -function uFd(a,b){var c;return c=b!=null?Phb(a,b):Wd(irb(a.f,b)),RD(c)} -function FFd(a,b){var c;return c=b!=null?Phb(a,b):Wd(irb(a.f,b)),RD(c)} -function Fob(a,b){var c;for(c=0;c<b;++c){NC(a,c,new Rob(BD(a[c],42)))}} -function Lgb(a,b){var c;for(c=a.d-1;c>=0&&a.a[c]===b[c];c--);return c<0} -function Ucc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} -function Dtb(a,b){uCb(b);if(a.a!=null){return Itb(b.Kb(a.a))}return ztb} -function Gx(a){var b;if(a){return new Bsb(a)}b=new zsb;Jq(b,a);return b} -function GAb(a,b){var c;return b.b.Kb(SAb(a,b.c.Ee(),(c=new TBb(b),c)))} -function Hub(a){zub();Eub(this,Tbb(xbb(Obb(a,24),nke)),Tbb(xbb(a,nke)))} -function REb(){REb=ccb;QEb=as((MEb(),OC(GC(aN,1),Kie,428,0,[LEb,KEb])))} -function ZEb(){ZEb=ccb;YEb=as((UEb(),OC(GC(bN,1),Kie,427,0,[SEb,TEb])))} -function aSb(){aSb=ccb;_Rb=as((XRb(),OC(GC(gP,1),Kie,424,0,[VRb,WRb])))} -function D5b(){D5b=ccb;C5b=as((y5b(),OC(GC(ZR,1),Kie,511,0,[x5b,w5b])))} -function Cqc(){Cqc=ccb;Bqc=as((xqc(),OC(GC(JW,1),Kie,419,0,[vqc,wqc])))} -function erc(){erc=ccb;drc=as((_qc(),OC(GC(MW,1),Kie,479,0,[$qc,Zqc])))} -function eBc(){eBc=ccb;dBc=as((_Ac(),OC(GC(fX,1),Kie,376,0,[$Ac,ZAc])))} -function GAc(){GAc=ccb;FAc=as((BAc(),OC(GC(cX,1),Kie,421,0,[zAc,AAc])))} -function Npc(){Npc=ccb;Mpc=as((Ipc(),OC(GC(FW,1),Kie,422,0,[Gpc,Hpc])))} -function rsc(){rsc=ccb;qsc=as((msc(),OC(GC(SW,1),Kie,420,0,[ksc,lsc])))} -function MOc(){MOc=ccb;LOc=as((HOc(),OC(GC(DZ,1),Kie,520,0,[GOc,FOc])))} -function ZIc(){ZIc=ccb;YIc=as((UIc(),OC(GC(mY,1),Kie,523,0,[TIc,SIc])))} -function bMc(){bMc=ccb;aMc=as((YLc(),OC(GC(fZ,1),Kie,516,0,[XLc,WLc])))} -function jMc(){jMc=ccb;iMc=as((eMc(),OC(GC(gZ,1),Kie,515,0,[cMc,dMc])))} -function KQc(){KQc=ccb;JQc=as((FQc(),OC(GC(YZ,1),Kie,455,0,[DQc,EQc])))} -function dUc(){dUc=ccb;cUc=as(($Tc(),OC(GC(F$,1),Kie,425,0,[ZTc,YTc])))} -function XUc(){XUc=ccb;WUc=as((PUc(),OC(GC(K$,1),Kie,495,0,[NUc,OUc])))} -function XTc(){XTc=ccb;WTc=as((STc(),OC(GC(E$,1),Kie,480,0,[QTc,RTc])))} -function lWc(){lWc=ccb;kWc=as((fWc(),OC(GC(X$,1),Kie,426,0,[dWc,eWc])))} -function i1c(){i1c=ccb;h1c=as((a1c(),OC(GC(X_,1),Kie,429,0,[_0c,$0c])))} -function H_c(){H_c=ccb;G_c=as((C_c(),OC(GC(P_,1),Kie,430,0,[B_c,A_c])))} -function UIc(){UIc=ccb;TIc=new VIc('UPPER',0);SIc=new VIc('LOWER',1)} -function Lqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} -function Oqd(a,b){var c;c=new eC;Spd(c,'x',b.a);Spd(c,'y',b.b);Qpd(a,c)} -function Jic(a,b){var c,d;d=false;do{c=Mic(a,b);d=d|c}while(c);return d} -function zHc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} -function Cfd(a,b){var c;c=b;while(c){O6c(a,-c.i,-c.j);c=Xod(c)}return a} -function reb(a,b){var c,d;uCb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.td(c)}} -function me(a,b){var c;c=b.cd();return new Wo(c,a.e.pc(c,BD(b.dd(),14)))} -function Gsb(a,b,c,d){var e;e=new jtb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} -function Nkb(a,b,c){var d;d=(tCb(b,a.c.length),a.c[b]);a.c[b]=c;return d} -function lFd(a,b,c){return BD(b==null?jrb(a.f,null,c):Drb(a.g,b,c),281)} -function fRb(a){return !!a.c&&!!a.d?oRb(a.c)+'->'+oRb(a.d):'e_'+FCb(a)} -function FAb(a,b){return (Uzb(a),WAb(new YAb(a,new qBb(b,a.a)))).sd(DAb)} -function tUb(){qUb();return OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])} -function _cd(){Ucd();return OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])} -function Dz(b){Az();return function(){return Ez(b,this,arguments);var a}} -function sz(){if(Date.now){return Date.now()}return (new Date).getTime()} -function OZb(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} -function pv(a){if(!a.c.Sb()){throw vbb(new utb)}a.a=true;return a.c.Ub()} -function ko(a){a.i=0;Alb(a.b,null);Alb(a.c,null);a.a=null;a.e=null;++a.g} -function ycb(a){wcb.call(this,a==null?Xhe:fcb(a),JD(a,78)?BD(a,78):null)} -function PYb(a){MYb();yXb(this);this.a=new Psb;NYb(this,a);Dsb(this.a,a)} -function jYb(){Ckb(this);this.b=new f7c(Pje,Pje);this.a=new f7c(Qje,Qje)} -function rAb(a,b){this.c=0;this.b=b;jvb.call(this,a,17493);this.a=this.c} -function wyb(a){oyb();if(lyb){return}this.c=a;this.e=true;this.a=new Rkb} -function oyb(){oyb=ccb;lyb=true;jyb=false;kyb=false;nyb=false;myb=false} -function C3c(a,b){if(JD(b,149)){return dfb(a.c,BD(b,149).c)}return false} -function zUc(a,b){var c;c=0;!!a&&(c+=a.f.a/2);!!b&&(c+=b.f.a/2);return c} -function j4c(a,b){var c;c=BD(Wrb(a.d,b),23);return c?c:BD(Wrb(a.e,b),23)} -function Lzd(a){this.b=a;Fyd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} -function Uzd(a){this.b=a;$yd.call(this,a);this.a=BD(Ajd(this.b.a,4),126)} -function $Kd(a){if(!a.t){a.t=new YMd(a);vtd(new c0d(a),0,a.t)}return a.t} -function kad(){ead();return OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])} -function Wbd(){Tbd();return OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])} -function Q5c(){N5c();return OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])} -function Q_c(){N_c();return OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])} -function _zc(){Vzc();return OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])} -function sqc(){mqc();return OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])} -function n$c(){k$c();return OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])} -function _jc(){Xjc();return OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])} -function Ftc(){Ctc();return OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])} -function T0d(){T0d=ccb;var a,b;R0d=(LFd(),b=new MPd,b);S0d=(a=new OJd,a)} -function yUd(a){var b;if(!a.c){b=a.r;JD(b,88)&&(a.c=BD(b,26))}return a.c} -function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} -function RC(a){var b,c,d;b=a&Eje;c=a>>22&Eje;d=a<0?Fje:0;return TC(b,c,d)} -function uy(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qzb(b)}} -function Tc(a,b){var c,d;c=BD(Iv(a.c,b),14);if(c){d=c.gc();c.$b();a.d-=d}} -function tjb(a,b){var c,d;c=b.cd();d=Awb(a,c);return !!d&&wtb(d.e,b.dd())} -function Qgb(a,b){if(b==0||a.e==0){return a}return b>0?ihb(a,b):lhb(a,-b)} -function Rgb(a,b){if(b==0||a.e==0){return a}return b>0?lhb(a,b):ihb(a,-b)} -function Rr(a){if(Qr(a)){a.c=a.a;return a.a.Pb()}else{throw vbb(new utb)}} -function Yac(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(j0b(),e0b)&&c.k==e0b} -function kZb(a){var b;b=new UZb;tNb(b,a);yNb(b,(Nyc(),jxc),null);return b} -function hid(a,b,c){var d;return d=a.Yg(b),d>=0?a._g(d,c,true):sid(a,b,c)} -function uHb(a,b,c,d){var e;for(e=0;e<rHb;e++){nHb(a.a[b.g][e],c,d[b.g])}} -function vHb(a,b,c,d){var e;for(e=0;e<sHb;e++){mHb(a.a[e][b.g],c,d[b.g])}} -function vSd(a,b,c,d,e){kxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} -function zSd(a,b,c,d,e){lxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} -function ISd(a,b,c,d,e){oxd.call(this,b,d,e);jSd(this);this.c=a;this.a=c} -function qSd(a,b,c,d,e){oxd.call(this,b,d,e);jSd(this);this.c=a;this.b=c} -function mWd(a,b,c){VVd.call(this,c);this.b=a;this.c=b;this.d=(CWd(),AWd)} -function oxd(a,b,c){this.d=a;this.k=b?1:0;this.f=c?1:0;this.o=-1;this.p=0} -function _6d(a,b,c){var d;d=new a7d(a.a);Ld(d,a.a.a);jrb(d.f,b,c);a.a.a=d} -function lud(a,b){a.qi(a.i+1);mud(a,a.i,a.oi(a.i,b));a.bi(a.i++,b);a.ci()} -function oud(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.di(c,b);a.ci()} -function Ou(a){var b,c;Qb(a);b=Iu(a.length);c=new Skb(b);nmb(c,a);return c} -function km(a){var b;b=(Qb(a),a?new Tkb(a):Nu(a.Kc()));smb(b);return Dm(b)} -function Kkb(a,b){var c;c=(tCb(b,a.c.length),a.c[b]);cCb(a.c,b,1);return c} -function Qc(a,b){var c;c=BD(a.c.xc(b),14);!c&&(c=a.ic(b));return a.pc(b,c)} -function cfb(a,b){var c,d;c=(uCb(a),a);d=(uCb(b),b);return c==d?0:c<d?-1:1} -function Fpb(a){var b;b=a.e+a.f;if(isNaN(b)&&Ldb(a.d)){return a.d}return b} -function uwb(a,b){!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Nfb(a.a,b);return a} -function Sb(a,b){if(a<0||a>b){throw vbb(new qcb(Jb(a,b,'index')))}return a} -function zhb(a,b,c,d){var e;e=KC(WD,oje,25,b,15,1);Ahb(e,a,b,c,d);return e} -function _A(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);YA(a,c)} -function A$c(a,b){return $wnd.Math.min(S6c(b.a,a.d.d.c),S6c(b.b,a.d.d.c))} -function Thb(a,b){return ND(b)?b==null?krb(a.f,null):Erb(a.g,b):krb(a.f,b)} -function b1b(a){this.c=a;this.a=new olb(this.c.a);this.b=new olb(this.c.b)} -function kRb(){this.e=new Rkb;this.c=new Rkb;this.d=new Rkb;this.b=new Rkb} -function MFb(){this.g=new PFb;this.b=new PFb;this.a=new Rkb;this.k=new Rkb} -function Gjc(a,b,c){this.a=a;this.c=b;this.d=c;Ekb(b.e,this);Ekb(c.b,this)} -function wBb(a,b){fvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} -function CBb(a,b){jvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} -function IBb(a,b){nvb.call(this,b.rd(),b.qd()&-6);uCb(a);this.a=a;this.b=b} -function BQc(a,b,c){this.a=a;this.b=b;this.c=c;Ekb(a.t,this);Ekb(b.i,this)} -function SRc(){this.b=new Psb;this.a=new Psb;this.b=new Psb;this.a=new Psb} -function g6c(){g6c=ccb;f6c=new Lsd('org.eclipse.elk.labels.labelManager')} -function Vac(){Vac=ccb;Uac=new Msd('separateLayerConnections',(gbc(),fbc))} -function HOc(){HOc=ccb;GOc=new IOc('REGULAR',0);FOc=new IOc('CRITICAL',1)} -function _Ac(){_Ac=ccb;$Ac=new aBc('STACKED',0);ZAc=new aBc('SEQUENCED',1)} -function C_c(){C_c=ccb;B_c=new D_c('FIXED',0);A_c=new D_c('CENTER_NODE',1)} -function PHc(a,b){var c;c=VHc(a,b);a.b=new BHc(c.c.length);return OHc(a,c)} -function KAd(a,b,c){var d;++a.e;--a.f;d=BD(a.d[b].$c(c),133);return d.dd()} -function JJd(a){var b;if(!a.a){b=a.r;JD(b,148)&&(a.a=BD(b,148))}return a.a} -function poc(a){if(a.a){if(a.e){return poc(a.e)}}else{return a}return null} -function ODc(a,b){if(a.p<b.p){return 1}else if(a.p>b.p){return -1}return 0} -function pvb(a,b){uCb(b);if(a.c<a.d){a.ze(b,a.c++);return true}return false} -function QYd(a,b){if(Mhb(a.a,b)){Thb(a.a,b);return true}else{return false}} -function fd(a){var b,c;b=a.cd();c=BD(a.dd(),14);return $j(c.Nc(),new ah(b))} -function sqb(a){var b;b=BD(ZBb(a.b,a.b.length),9);return new xqb(a.a,b,a.c)} -function _zb(a){var b;Uzb(a);b=new fAb(a,a.a.e,a.a.d|4);return new bAb(a,b)} -function HAb(a){var b;Tzb(a);b=0;while(a.a.sd(new RBb)){b=wbb(b,1)}return b} -function UDc(a,b,c){var d,e;d=0;for(e=0;e<b.length;e++){d+=a.$f(b[e],d,c)}} -function QJb(a,b){var c;if(a.C){c=BD(Mpb(a.b,b),124).n;c.d=a.C.d;c.a=a.C.a}} -function Mi(a,b,c){Pb(b,a.e.Hd().gc());Pb(c,a.c.Hd().gc());return a.a[b][c]} -function Ugb(a,b){Hgb();this.e=a;this.d=1;this.a=OC(GC(WD,1),oje,25,15,[b])} -function dg(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} -function o5b(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} -function Y2d(a,b,c,d){X2d(a,b,c,M2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0))} -function tac(a,b){Odd(b,'Label management',1);RD(vNb(a,(g6c(),f6c)));Qdd(b)} -function Skb(a){Ckb(this);mCb(a>=0,'Initial capacity must not be negative')} -function lHb(){lHb=ccb;kHb=as((gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])))} -function SHb(){SHb=ccb;RHb=as((NHb(),OC(GC(sN,1),Kie,461,0,[LHb,KHb,MHb])))} -function JIb(){JIb=ccb;IIb=as((EIb(),OC(GC(zN,1),Kie,462,0,[DIb,CIb,BIb])))} -function Kyb(){Kyb=ccb;Jyb=as((Fyb(),OC(GC(xL,1),Kie,132,0,[Cyb,Dyb,Eyb])))} -function DTb(){DTb=ccb;CTb=as((yTb(),OC(GC(oP,1),Kie,379,0,[wTb,vTb,xTb])))} -function WXb(){WXb=ccb;VXb=as((RXb(),OC(GC(hQ,1),Kie,423,0,[QXb,PXb,OXb])))} -function Zpc(){Zpc=ccb;Ypc=as((Rpc(),OC(GC(GW,1),Kie,314,0,[Ppc,Opc,Qpc])))} -function gqc(){gqc=ccb;fqc=as((bqc(),OC(GC(HW,1),Kie,337,0,[$pc,aqc,_pc])))} -function Lqc(){Lqc=ccb;Kqc=as((Gqc(),OC(GC(KW,1),Kie,450,0,[Eqc,Dqc,Fqc])))} -function Kkc(){Kkc=ccb;Jkc=as((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc])))} -function jsc(){jsc=ccb;isc=as((esc(),OC(GC(RW,1),Kie,303,0,[csc,dsc,bsc])))} -function asc(){asc=ccb;_rc=as((Xrc(),OC(GC(QW,1),Kie,292,0,[Vrc,Wrc,Urc])))} -function Dzc(){Dzc=ccb;Czc=as((xzc(),OC(GC(ZW,1),Kie,378,0,[uzc,vzc,wzc])))} -function YAc(){YAc=ccb;XAc=as((TAc(),OC(GC(eX,1),Kie,375,0,[QAc,RAc,SAc])))} -function yAc(){yAc=ccb;xAc=as((tAc(),OC(GC(bX,1),Kie,339,0,[rAc,qAc,sAc])))} -function PAc(){PAc=ccb;OAc=as((KAc(),OC(GC(dX,1),Kie,452,0,[JAc,HAc,IAc])))} -function QBc(){QBc=ccb;PBc=as((LBc(),OC(GC(jX,1),Kie,377,0,[JBc,KBc,IBc])))} -function yBc(){yBc=ccb;xBc=as((tBc(),OC(GC(hX,1),Kie,336,0,[qBc,rBc,sBc])))} -function HBc(){HBc=ccb;GBc=as((CBc(),OC(GC(iX,1),Kie,338,0,[BBc,zBc,ABc])))} -function wGc(){wGc=ccb;vGc=as((rGc(),OC(GC(PX,1),Kie,454,0,[oGc,pGc,qGc])))} -function zVc(){zVc=ccb;yVc=as((tVc(),OC(GC(O$,1),Kie,442,0,[sVc,qVc,rVc])))} -function vWc(){vWc=ccb;uWc=as((pWc(),OC(GC(Y$,1),Kie,380,0,[mWc,nWc,oWc])))} -function EYc(){EYc=ccb;DYc=as((zYc(),OC(GC(q_,1),Kie,381,0,[xYc,yYc,wYc])))} -function yXc(){yXc=ccb;xXc=as((sXc(),OC(GC(b_,1),Kie,293,0,[qXc,rXc,pXc])))} -function b_c(){b_c=ccb;a_c=as((Y$c(),OC(GC(J_,1),Kie,437,0,[V$c,W$c,X$c])))} -function mbd(){mbd=ccb;lbd=as((hbd(),OC(GC(z1,1),Kie,334,0,[fbd,ebd,gbd])))} -function vad(){vad=ccb;uad=as((qad(),OC(GC(u1,1),Kie,272,0,[nad,oad,pad])))} -function icd(){dcd();return OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])} -function ikd(a,b){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),qAd(a.o,b)} -function NAd(a){!a.g&&(a.g=new JCd);!a.g.d&&(a.g.d=new MBd(a));return a.g.d} -function yAd(a){!a.g&&(a.g=new JCd);!a.g.a&&(a.g.a=new SBd(a));return a.g.a} -function EAd(a){!a.g&&(a.g=new JCd);!a.g.b&&(a.g.b=new GBd(a));return a.g.b} -function FAd(a){!a.g&&(a.g=new JCd);!a.g.c&&(a.g.c=new iCd(a));return a.g.c} -function A2d(a,b,c){var d,e;e=new p4d(b,a);for(d=0;d<c;++d){d4d(e)}return e} -function Atd(a,b,c){var d,e;if(c!=null){for(d=0;d<b;++d){e=c[d];a.fi(d,e)}}} -function uhb(a,b,c,d){var e;e=KC(WD,oje,25,b+1,15,1);vhb(e,a,b,c,d);return e} -function KC(a,b,c,d,e,f){var g;g=LC(e,d);e!=10&&OC(GC(a,f),b,c,e,g);return g} -function bYd(a,b,c,d){!!c&&(d=c.gh(b,bLd(c.Tg(),a.c.Lj()),null,d));return d} -function cYd(a,b,c,d){!!c&&(d=c.ih(b,bLd(c.Tg(),a.c.Lj()),null,d));return d} -function KNb(a,b,c){BD(a.b,65);BD(a.b,65);BD(a.b,65);Hkb(a.a,new TNb(c,b,a))} -function ACb(a,b,c){if(a<0||b>c||b<a){throw vbb(new Xfb(xke+a+zke+b+oke+c))}} -function zCb(a){if(!a){throw vbb(new Zdb('Unable to add element to queue'))}} -function Vzb(a){if(!a){this.c=null;this.b=new Rkb}else{this.c=a;this.b=null}} -function exb(a,b){pjb.call(this,a,b);this.a=KC(dL,zie,436,2,0,1);this.b=true} -function _rb(a){Whb.call(this,a,0);Trb(this);this.d.b=this.d;this.d.a=this.d} -function VRc(a){var b;b=a.b;if(b.b==0){return null}return BD(Ut(b,0),188).b} -function Kwb(a,b){var c;c=new fxb;c.c=true;c.d=b.dd();return Lwb(a,b.cd(),c)} -function bB(a,b){var c;c=a.q.getHours()+(b/3600|0);a.q.setSeconds(b);YA(a,c)} -function zGc(a,b,c){var d;d=a.b[c.c.p][c.p];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} -function S6c(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} -function Ipc(){Ipc=ccb;Gpc=new Jpc('QUADRATIC',0);Hpc=new Jpc('SCANLINE',1)} -function hCc(){hCc=ccb;gCc=c3c(e3c(new j3c,(qUb(),lUb),(S8b(),n8b)),pUb,J8b)} -function l8c(){i8c();return OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])} -function I7c(){F7c();return OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])} -function Dpc(){Apc();return OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])} -function Brc(){yrc();return OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])} -function orc(){lrc();return OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])} -function rzc(){lzc();return OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])} -function Wqc(){Sqc();return OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])} -function uSc(){qSc();return OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])} -function wcd(){rcd();return OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])} -function Pad(){Mad();return OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])} -function m0b(){j0b();return OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])} -function mib(a){yCb(!!a.c);xpb(a.e,a);a.c.Qb();a.c=null;a.b=kib(a);ypb(a.e,a)} -function tsb(a){xpb(a.c.a.e,a);sCb(a.b!=a.c.a.d);a.a=a.b;a.b=a.b.a;return a.a} -function kSd(a){var b;if(!a.a&&a.b!=-1){b=a.c.Tg();a.a=XKd(b,a.b)}return a.a} -function wtd(a,b){if(a.hi()&&a.Hc(b)){return false}else{a.Yh(b);return true}} -function $Hb(a,b){ytb(b,'Horizontal alignment cannot be null');a.b=b;return a} -function Lfe(a,b,c){wfe();var d;d=Kfe(a,b);c&&!!d&&Nfe(a)&&(d=null);return d} -function vXb(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);uXb(d,b,c)}} -function tXb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=BD(d.Pb(),37);sXb(a,c,0,0)}} -function ojc(a,b,c){var d;a.d[b.g]=c;d=a.g.c;d[b.g]=$wnd.Math.max(d[b.g],c+1)} -function KZc(a,b){var c,d,e;e=a.r;d=a.d;c=MZc(a,b,true);return c.b!=e||c.a!=d} -function Jjc(a,b){Vrb(a.e,b)||Xrb(a.e,b,new Pjc(b));return BD(Wrb(a.e,b),113)} -function Byb(a,b,c,d){uCb(a);uCb(b);uCb(c);uCb(d);return new Lyb(a,b,new Vxb)} -function dId(a,b,c,d){this.rj();this.a=b;this.b=a;this.c=new Y5d(this,b,c,d)} -function oSd(a,b,c,d,e,f){mxd.call(this,b,d,e,f);jSd(this);this.c=a;this.b=c} -function ESd(a,b,c,d,e,f){mxd.call(this,b,d,e,f);jSd(this);this.c=a;this.a=c} -function Bqd(a,b,c){var d,e,f;d=aC(a,c);e=null;!!d&&(e=aqd(d));f=e;Vqd(b,c,f)} -function Cqd(a,b,c){var d,e,f;d=aC(a,c);e=null;!!d&&(e=aqd(d));f=e;Vqd(b,c,f)} -function v1d(a,b,c){var d,e;e=(d=nUd(a.b,b),d);return !e?null:V1d(p1d(a,e),c)} -function gid(a,b){var c;return c=a.Yg(b),c>=0?a._g(c,true,true):sid(a,b,true)} -function s6b(a,b){return Kdb(Edb(ED(vNb(a,(wtc(),htc)))),Edb(ED(vNb(b,htc))))} -function pUc(){pUc=ccb;oUc=b3c(b3c(g3c(new j3c,(yRc(),vRc)),(qSc(),pSc)),lSc)} -function IHc(a,b,c){var d;d=SHc(a,b,c);a.b=new BHc(d.c.length);return KHc(a,d)} -function qhe(a){if(a.b<=0)throw vbb(new utb);--a.b;a.a-=a.c.c;return meb(a.a)} -function ptd(a){var b;if(!a.a){throw vbb(new vtb)}b=a.a;a.a=Xod(a.a);return b} -function dBb(a){while(!a.a){if(!HBb(a.c,new hBb(a))){return false}}return true} -function vr(a){var b;Qb(a);if(JD(a,198)){b=BD(a,198);return b}return new wr(a)} -function r3c(a){p3c();BD(a.We((Y9c(),x9c)),174).Fc((rcd(),ocd));a.Ye(w9c,null)} -function p3c(){p3c=ccb;m3c=new v3c;o3c=new x3c;n3c=mn((Y9c(),w9c),m3c,b9c,o3c)} -function fWc(){fWc=ccb;dWc=new hWc('LEAF_NUMBER',0);eWc=new hWc('NODE_SIZE',1)} -function UMc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Osb(a.d);a.e.a.c=KC(SI,Uhe,1,0,5,1)} -function yHc(a){a.a=KC(WD,oje,25,a.b+1,15,1);a.c=KC(WD,oje,25,a.b,15,1);a.d=0} -function MWb(a,b){if(a.a.ue(b.d,a.b)>0){Ekb(a.c,new dWb(b.c,b.d,a.d));a.b=b.d}} -function nud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.g[b]} -function pOd(a,b,c){Itd(a,c);if(c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} -function KLd(a){var b;if(a.Ek()){for(b=a.i-1;b>=0;--b){qud(a,b)}}return wud(a)} -function Bwb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} -function ulb(a,b){var c,d;pCb(b);return c=(d=a.slice(0,b),PC(d,a)),c.length=b,c} -function Klb(a,b,c,d){var e;d=(ipb(),!d?fpb:d);e=a.slice(b,c);Llb(e,a,b,c,-b,d)} -function bid(a,b,c,d,e){return b<0?sid(a,c,d):BD(c,66).Nj().Pj(a,a.yh(),b,d,e)} -function hZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} -function iZd(a){if(JD(a,172)){return ''+BD(a,172).a}return a==null?null:fcb(a)} -function nDb(a,b){if(b.a){throw vbb(new hz(Hke))}Qqb(a.a,b);b.a=a;!a.j&&(a.j=b)} -function qBb(a,b){nvb.call(this,b.rd(),b.qd()&-16449);uCb(a);this.a=a;this.c=b} -function Ti(a,b){var c,d;d=b/a.c.Hd().gc()|0;c=b%a.c.Hd().gc();return Mi(a,d,c)} -function NHb(){NHb=ccb;LHb=new OHb(jle,0);KHb=new OHb(gle,1);MHb=new OHb(kle,2)} -function lxb(){lxb=ccb;hxb=new mxb('All',0);ixb=new rxb;jxb=new txb;kxb=new wxb} -function zxb(){zxb=ccb;yxb=as((lxb(),OC(GC(iL,1),Kie,297,0,[hxb,ixb,jxb,kxb])))} -function uWb(){uWb=ccb;tWb=as((lWb(),OC(GC(SP,1),Kie,405,0,[hWb,kWb,iWb,jWb])))} -function ALb(){ALb=ccb;zLb=as((vLb(),OC(GC(PN,1),Kie,406,0,[uLb,rLb,sLb,tLb])))} -function WMb(){WMb=ccb;VMb=as((RMb(),OC(GC(jO,1),Kie,323,0,[OMb,NMb,PMb,QMb])))} -function WOb(){WOb=ccb;VOb=as((ROb(),OC(GC(CO,1),Kie,394,0,[OOb,NOb,POb,QOb])))} -function GRc(){GRc=ccb;FRc=as((yRc(),OC(GC(h$,1),Kie,393,0,[uRc,vRc,wRc,xRc])))} -function mbc(){mbc=ccb;lbc=as((gbc(),OC(GC(VS,1),Kie,360,0,[fbc,dbc,ebc,cbc])))} -function oXc(){oXc=ccb;nXc=as((iXc(),OC(GC(a_,1),Kie,340,0,[hXc,fXc,gXc,eXc])))} -function Fjc(){Fjc=ccb;Ejc=as((Ajc(),OC(GC(mV,1),Kie,411,0,[wjc,xjc,yjc,zjc])))} -function Pzc(){Pzc=ccb;Ozc=as((Izc(),OC(GC($W,1),Kie,197,0,[Gzc,Hzc,Fzc,Ezc])))} -function ugd(){ugd=ccb;tgd=as((pgd(),OC(GC(k2,1),Kie,396,0,[mgd,ngd,lgd,ogd])))} -function xbd(){xbd=ccb;wbd=as((rbd(),OC(GC(A1,1),Kie,285,0,[qbd,nbd,obd,pbd])))} -function Fad(){Fad=ccb;Ead=as((Aad(),OC(GC(v1,1),Kie,218,0,[zad,xad,wad,yad])))} -function Ied(){Ied=ccb;Hed=as((Ded(),OC(GC(O1,1),Kie,311,0,[Ced,zed,Bed,Aed])))} -function ydd(){ydd=ccb;xdd=as((tdd(),OC(GC(I1,1),Kie,374,0,[rdd,sdd,qdd,pdd])))} -function A9d(){A9d=ccb;Smd();x9d=Pje;w9d=Qje;z9d=new Ndb(Pje);y9d=new Ndb(Qje)} -function _qc(){_qc=ccb;$qc=new arc(ane,0);Zqc=new arc('IMPROVE_STRAIGHTNESS',1)} -function eIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} -function gIc(a,b){FHc();return Ekb(a,new vgd(b,meb(b.e.c.length+b.g.c.length)))} -function PC(a,b){HC(b)!=10&&OC(rb(b),b.hm,b.__elementTypeId$,HC(b),a);return a} -function Lkb(a,b){var c;c=Jkb(a,b,0);if(c==-1){return false}Kkb(a,c);return true} -function Zrb(a,b){var c;c=BD(Thb(a.e,b),387);if(c){jsb(c);return c.e}return null} -function Jbb(a){var b;if(Fbb(a)){b=0-a;if(!isNaN(b)){return b}}return zbb(hD(a))} -function Jkb(a,b,c){for(;c<a.c.length;++c){if(wtb(b,a.c[c])){return c}}return -1} -function SAb(a,b,c){var d;Tzb(a);d=new NBb;d.a=b;a.a.Nb(new VBb(d,c));return d.a} -function aAb(a){var b;Tzb(a);b=KC(UD,Vje,25,0,15,1);_ub(a.a,new kAb(b));return b} -function ajc(a){var b,c;c=BD(Ikb(a.j,0),11);b=BD(vNb(c,(wtc(),$sc)),11);return b} -function yc(a){var b;if(!xc(a)){throw vbb(new utb)}a.e=1;b=a.d;a.d=null;return b} -function wu(a,b){var c;this.f=a;this.b=b;c=BD(Ohb(a.b,b),283);this.c=!c?null:c.b} -function Ygc(){Hgc();this.b=new Lqb;this.f=new Lqb;this.g=new Lqb;this.e=new Lqb} -function Tnc(a,b){this.a=KC(OQ,kne,10,a.a.c.length,0,1);Qkb(a.a,this.a);this.b=b} -function zoc(a){var b;for(b=a.p+1;b<a.c.a.c.length;++b){--BD(Ikb(a.c.a,b),10).p}} -function Rwd(a){var b;b=a.Ai();b!=null&&a.d!=-1&&BD(b,92).Ng(a);!!a.i&&a.i.Fi()} -function rFd(a){Py(this);this.g=!a?null:Wy(a,a.$d());this.f=a;Ry(this);this._d()} -function pSd(a,b,c,d,e,f,g){nxd.call(this,b,d,e,f,g);jSd(this);this.c=a;this.b=c} -function Ayb(a,b,c,d,e){uCb(a);uCb(b);uCb(c);uCb(d);uCb(e);return new Lyb(a,b,d)} -function B2c(a,b){if(b<0){throw vbb(new qcb(ese+b))}A2c(a,b+1);return Ikb(a.j,b)} -function Ob(a,b,c,d){if(!a){throw vbb(new Wdb(hc(b,OC(GC(SI,1),Uhe,1,5,[c,d]))))}} -function dDb(a,b){return wtb(b,Ikb(a.f,0))||wtb(b,Ikb(a.f,1))||wtb(b,Ikb(a.f,2))} -function ghd(a,b){ecd(BD(BD(a.f,33).We((Y9c(),t9c)),98))&&NCd(Yod(BD(a.f,33)),b)} -function p1d(a,b){var c,d;c=BD(b,675);d=c.Oh();!d&&c.Rh(d=new Y1d(a,b));return d} -function q1d(a,b){var c,d;c=BD(b,677);d=c.pk();!d&&c.tk(d=new j2d(a,b));return d} -function QSd(a){if(!a.b){a.b=new UTd(a,j5,a);!a.a&&(a.a=new fTd(a,a))}return a.b} -function yTb(){yTb=ccb;wTb=new zTb('XY',0);vTb=new zTb('X',1);xTb=new zTb('Y',2)} -function EIb(){EIb=ccb;DIb=new FIb('TOP',0);CIb=new FIb(gle,1);BIb=new FIb(mle,2)} -function esc(){esc=ccb;csc=new fsc(ane,0);dsc=new fsc('TOP',1);bsc=new fsc(mle,2)} -function BAc(){BAc=ccb;zAc=new CAc('INPUT_ORDER',0);AAc=new CAc('PORT_DEGREE',1)} -function wD(){wD=ccb;sD=TC(Eje,Eje,524287);tD=TC(0,0,Gje);uD=RC(1);RC(2);vD=RC(0)} -function WDc(a,b,c){a.a.c=KC(SI,Uhe,1,0,5,1);$Dc(a,b,c);a.a.c.length==0||TDc(a,b)} -function rfb(a){var b,c;c=a.length;b=KC(TD,$ie,25,c,15,1);ffb(a,0,c,b,0);return b} -function Aid(a){var b;if(!a.dh()){b=aLd(a.Tg())-a.Ah();a.ph().bk(b)}return a.Pg()} -function xjd(a){var b;b=CD(Ajd(a,32));if(b==null){yjd(a);b=CD(Ajd(a,32))}return b} -function iid(a,b){var c;c=bLd(a.d,b);return c>=0?fid(a,c,true,true):sid(a,b,true)} -function vgc(a,b){qgc();var c,d;c=ugc(a);d=ugc(b);return !!c&&!!d&&!omb(c.k,d.k)} -function Gqd(a,b){dld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} -function Hqd(a,b){eld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} -function Iqd(a,b){cld(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} -function Jqd(a,b){ald(a,b==null||Ldb((uCb(b),b))||isNaN((uCb(b),b))?0:(uCb(b),b))} -function agd(a){(!this.q?(mmb(),mmb(),kmb):this.q).Ac(!a.q?(mmb(),mmb(),kmb):a.q)} -function S2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} -function U2d(a,b){return JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a)} -function INb(a,b){HNb=new tOb;FNb=b;GNb=a;BD(GNb.b,65);KNb(GNb,HNb,null);JNb(GNb)} -function uud(a,b,c){var d;d=a.g[b];mud(a,b,a.oi(b,c));a.gi(b,c,d);a.ci();return d} -function Ftd(a,b){var c;c=a.Xc(b);if(c>=0){a.$c(c);return true}else{return false}} -function YId(a){var b;if(a.d!=a.r){b=wId(a);a.e=!!b&&b.Cj()==Bve;a.d=b}return a.e} -function fr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} -function Wrb(a,b){var c;c=BD(Ohb(a.e,b),387);if(c){Yrb(a,c);return c.e}return null} -function UA(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} -function LAb(a,b){var c,d;Uzb(a);d=new IBb(b,a.a);c=new fBb(d);return new YAb(a,c)} -function tB(d,a){var b=d.a[a];var c=(rC(),qC)[typeof b];return c?c(b):xC(typeof b)} -function yzc(a){switch(a.g){case 0:return Ohe;case 1:return -1;default:return 0;}} -function oD(a){if(eD(a,(wD(),vD))<0){return -aD(hD(a))}return a.l+a.m*Hje+a.h*Ije} -function HC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} -function dub(a){var b;b=a.b.c.length==0?null:Ikb(a.b,0);b!=null&&fub(a,0);return b} -function uA(a,b){while(b[0]<a.length&&hfb(' \t\r\n',wfb(bfb(a,b[0])))>=0){++b[0]}} -function sgb(a,b){this.e=b;this.a=vgb(a);this.a<54?(this.f=Sbb(a)):(this.c=ghb(a))} -function vge(a,b,c,d){wfe();xfe.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} -function EA(a,b,c){var d,e;d=10;for(e=0;e<c-1;e++){b<d&&(a.a+='0',a);d*=10}a.a+=b} -function Hhe(a,b){var c;c=0;while(a.e!=a.i.gc()){Qrd(b,Dyd(a),meb(c));c!=Ohe&&++c}} -function xHc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c<a.a.length){++a.a[c];c+=c&-c}} -function Qgc(a,b){var c,d,e;e=b.c.i;c=BD(Ohb(a.f,e),57);d=c.d.c-c.e.c;p7c(b.a,d,0)} -function Scb(a){var b,c;b=a+128;c=(Ucb(),Tcb)[b];!c&&(c=Tcb[b]=new Mcb(a));return c} -function es(a,b){var c;uCb(b);c=a[':'+b];nCb(!!c,OC(GC(SI,1),Uhe,1,5,[b]));return c} -function Mz(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=Pz(b,c)}while(a.b);a.b=c}} -function Lz(a){var b,c;if(a.a){c=null;do{b=a.a;a.a=null;c=Pz(b,c)}while(a.a);a.a=c}} -function Dqb(a){var b;++a.a;for(b=a.c.a.length;a.a<b;++a.a){if(a.c.b[a.a]){return}}} -function S9b(a,b){var c,d;d=b.c;for(c=d+1;c<=b.f;c++){a.a[c]>a.a[d]&&(d=c)}return d} -function fic(a,b){var c;c=Jy(a.e.c,b.e.c);if(c==0){return Kdb(a.e.d,b.e.d)}return c} -function Ogb(a,b){if(b.e==0){return Ggb}if(a.e==0){return Ggb}return Dhb(),Ehb(a,b)} -function nCb(a,b){if(!a){throw vbb(new Wdb(DCb('Enum constant undefined: %s',b)))}} -function AWb(){AWb=ccb;xWb=new XWb;yWb=new _Wb;vWb=new dXb;wWb=new hXb;zWb=new lXb} -function UEb(){UEb=ccb;SEb=new VEb('BY_SIZE',0);TEb=new VEb('BY_SIZE_AND_SHAPE',1)} -function XRb(){XRb=ccb;VRb=new YRb('EADES',0);WRb=new YRb('FRUCHTERMAN_REINGOLD',1)} -function xqc(){xqc=ccb;vqc=new yqc('READING_DIRECTION',0);wqc=new yqc('ROTATION',1)} -function uqc(){uqc=ccb;tqc=as((mqc(),OC(GC(IW,1),Kie,335,0,[iqc,hqc,kqc,lqc,jqc])))} -function bAc(){bAc=ccb;aAc=as((Vzc(),OC(GC(_W,1),Kie,315,0,[Uzc,Rzc,Szc,Qzc,Tzc])))} -function bkc(){bkc=ccb;akc=as((Xjc(),OC(GC(uV,1),Kie,363,0,[Tjc,Vjc,Wjc,Ujc,Sjc])))} -function Htc(){Htc=ccb;Gtc=as((Ctc(),OC(GC(TW,1),Kie,163,0,[Btc,xtc,ytc,ztc,Atc])))} -function S_c(){S_c=ccb;R_c=as((N_c(),OC(GC(Q_,1),Kie,316,0,[I_c,J_c,M_c,K_c,L_c])))} -function S5c(){S5c=ccb;R5c=as((N5c(),OC(GC(e1,1),Kie,175,0,[L5c,K5c,I5c,M5c,J5c])))} -function p$c(){p$c=ccb;o$c=as((k$c(),OC(GC(y_,1),Kie,355,0,[g$c,f$c,i$c,h$c,j$c])))} -function vUb(){vUb=ccb;uUb=as((qUb(),OC(GC(zP,1),Kie,356,0,[lUb,mUb,nUb,oUb,pUb])))} -function mad(){mad=ccb;lad=as((ead(),OC(GC(t1,1),Kie,103,0,[cad,bad,aad,_9c,dad])))} -function Ybd(){Ybd=ccb;Xbd=as((Tbd(),OC(GC(C1,1),Kie,249,0,[Qbd,Sbd,Obd,Pbd,Rbd])))} -function cdd(){cdd=ccb;bdd=as((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])))} -function _1c(a,b){var c;c=BD(Ohb(a.a,b),134);if(!c){c=new zNb;Rhb(a.a,b,c)}return c} -function hoc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.a==a}return false} -function ioc(a){var b;b=BD(vNb(a,(wtc(),usc)),305);if(b){return b.i==a}return false} -function Jub(a,b){uCb(b);Iub(a);if(a.d.Ob()){b.td(a.d.Pb());return true}return false} -function Oy(a){if(ybb(a,Ohe)>0){return Ohe}if(ybb(a,Rie)<0){return Rie}return Tbb(a)} -function Cv(a){if(a<3){Xj(a,Hie);return a+1}if(a<Iie){return QD(a/0.75+1)}return Ohe} -function XKd(a,b){var c;c=(a.i==null&&TKd(a),a.i);return b>=0&&b<c.length?c[b]:null} -function cC(a,b,c){var d;if(b==null){throw vbb(new Geb)}d=aC(a,b);dC(a,b,c);return d} -function Emc(a){a.a>=-0.01&&a.a<=ple&&(a.a=0);a.b>=-0.01&&a.b<=ple&&(a.b=0);return a} -function sfb(a,b){return b==(ntb(),ntb(),mtb)?a.toLocaleLowerCase():a.toLowerCase()} -function idb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(fdb(a),a.o)} -function Pnd(a){var b,c;c=(b=new SSd,b);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),c)} -function Pdd(a,b){var c;c=b>0?b-1:b;return Vdd(Wdd(Xdd(Ydd(new Zdd,c),a.n),a.j),a.k)} -function u2d(a,b,c,d){var e;a.j=-1;Qxd(a,I2d(a,b,c),(Q6d(),e=BD(b,66).Mj(),e.Ok(d)))} -function VWb(a){this.g=a;this.f=new Rkb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} -function mDb(a){this.b=new Rkb;this.a=new Rkb;this.c=new Rkb;this.d=new Rkb;this.e=a} -function Cnc(a,b){this.a=new Lqb;this.e=new Lqb;this.b=(xzc(),wzc);this.c=a;this.b=b} -function bIb(a,b,c){$Gb.call(this);THb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} -function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(hs(),gs)} -function zud(a){if(a<0){throw vbb(new Wdb('Illegal Capacity: '+a))}this.g=this.ri(a)} -function avb(a,b){if(0>a||a>b){throw vbb(new scb('fromIndex: 0, toIndex: '+a+oke+b))}} -function Gs(a){var b;if(a.a==a.b.a){throw vbb(new utb)}b=a.a;a.c=b;a.a=a.a.e;return b} -function Zsb(a){var b;yCb(!!a.c);b=a.c.a;Nsb(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} -function VAb(a,b){var c;Uzb(a);c=new lBb(a,a.a.rd(),a.a.qd()|4,b);return new YAb(a,c)} -function ke(a,b){var c,d;c=BD(Hv(a.d,b),14);if(!c){return null}d=b;return a.e.pc(d,c)} -function xac(a,b){var c,d;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),70);yNb(c,(wtc(),Ssc),b)}} -function t9b(a){var b;b=Edb(ED(vNb(a,(Nyc(),Zwc))));if(b<0){b=0;yNb(a,Zwc,b)}return b} -function ifc(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);cfc(c,d,1);Ekb(b,new rfc(c,d))} -function NMc(a,b,c){var d;d=a.a.e[BD(b.a,10).p]-a.a.e[BD(c.a,10).p];return QD(Eeb(d))} -function iZb(a,b,c,d,e,f){var g;g=kZb(d);QZb(g,e);RZb(g,f);Rc(a.a,d,new BZb(g,b,c.f))} -function Bid(a,b){var c;c=YKd(a.Tg(),b);if(!c){throw vbb(new Wdb(ite+b+lte))}return c} -function ntd(a,b){var c;c=a;while(Xod(c)){c=Xod(c);if(c==b){return true}}return false} -function Uw(a,b){var c,d,e;d=b.a.cd();c=BD(b.a.dd(),14).gc();for(e=0;e<c;e++){a.td(d)}} -function Hkb(a,b){var c,d,e,f;uCb(b);for(d=a.c,e=0,f=d.length;e<f;++e){c=d[e];b.td(c)}} -function Nsb(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} -function wqb(a,b){if(!!b&&a.b[b.g]==b){NC(a.b,b.g,null);--a.c;return true}return false} -function lo(a,b){return !!vo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15))))} -function w$b(a,b){ecd(BD(vNb(BD(a.e,10),(Nyc(),Vxc)),98))&&(mmb(),Okb(BD(a.e,10).j,b))} -function THb(a){a.b=(NHb(),KHb);a.f=(EIb(),CIb);a.d=(Xj(2,Jie),new Skb(2));a.e=new d7c} -function gHb(){gHb=ccb;dHb=new hHb('BEGIN',0);eHb=new hHb(gle,1);fHb=new hHb('END',2)} -function qad(){qad=ccb;nad=new rad(gle,0);oad=new rad('HEAD',1);pad=new rad('TAIL',2)} -function Fsd(){Csd();return OC(GC(O3,1),Kie,237,0,[Bsd,ysd,zsd,xsd,Asd,vsd,usd,wsd])} -function c6c(){_5c();return OC(GC(f1,1),Kie,277,0,[$5c,T5c,X5c,Z5c,U5c,V5c,W5c,Y5c])} -function Dlc(){Alc();return OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc])} -function nAc(){kAc();return OC(GC(aX,1),Kie,260,0,[iAc,dAc,gAc,eAc,fAc,cAc,hAc,jAc])} -function kcd(){kcd=ccb;jcd=as((dcd(),OC(GC(D1,1),Kie,98,0,[ccd,bcd,acd,Zbd,_bd,$bd])))} -function tHb(){tHb=ccb;sHb=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])).length;rHb=sHb} -function wed(a){this.b=(Qb(a),new Tkb(a));this.a=new Rkb;this.d=new Rkb;this.e=new d7c} -function W6c(a){var b;b=$wnd.Math.sqrt(a.a*a.a+a.b*a.b);if(b>0){a.a/=b;a.b/=b}return a} -function bKd(a){var b;if(a.w){return a.w}else{b=cKd(a);!!b&&!b.kh()&&(a.w=b);return b}} -function gZd(a){var b;if(a==null){return null}else{b=BD(a,190);return Umd(b,b.length)}} -function qud(a,b){if(a.g==null||b>=a.i)throw vbb(new $zd(b,a.i));return a.li(b,a.g[b])} -function Mmc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){rqb(a.b,b);b=Xcd(b)}rqb(a.b,b)} -function Jmc(a){var b;for(b=0;b<a.c.length;b++){(tCb(b,a.c.length),BD(a.c[b],11)).p=b}} -function bEc(a,b,c){var d,e,f;e=b[c];for(d=0;d<e.length;d++){f=e[d];a.e[f.c.p][f.p]=d}} -function ZEc(a,b){var c,d,e,f;for(d=a.d,e=0,f=d.length;e<f;++e){c=d[e];REc(a.g,c).a=b}} -function q7c(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);P6c(c,b)}return a} -function zUb(a,b){var c;c=c7c(R6c(BD(Ohb(a.g,b),8)),E6c(BD(Ohb(a.f,b),460).b));return c} -function lib(a){var b;xpb(a.e,a);sCb(a.b);a.c=a.a;b=BD(a.a.Pb(),42);a.b=kib(a);return b} -function CD(a){var b;CCb(a==null||Array.isArray(a)&&(b=HC(a),!(b>=14&&b<=16)));return a} -function dcb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} -function TLc(a,b,c){var d,e;d=b;do{e=Edb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} -function NQd(a,b){var c,d;d=a.a;c=OQd(a,b,null);d!=b&&!a.e&&(c=QQd(a,b,c));!!c&&c.Fi()} -function ADb(a,b){return Iy(),My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} -function Ky(a,b){Iy();My(Qie);return $wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)} -function Akc(a,b){gkc();return beb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} -function oo(a,b){return Kv(uo(a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} -function o0b(){o0b=ccb;n0b=as((j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])))} -function n8c(){n8c=ccb;m8c=as((i8c(),OC(GC(r1,1),Kie,291,0,[h8c,g8c,f8c,d8c,c8c,e8c])))} -function K7c(){K7c=ccb;J7c=as((F7c(),OC(GC(o1,1),Kie,248,0,[z7c,C7c,D7c,E7c,A7c,B7c])))} -function Fpc(){Fpc=ccb;Epc=as((Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])))} -function Drc(){Drc=ccb;Crc=as((yrc(),OC(GC(OW,1),Kie,275,0,[wrc,trc,xrc,vrc,urc,rrc])))} -function qrc(){qrc=ccb;prc=as((lrc(),OC(GC(NW,1),Kie,274,0,[irc,hrc,krc,grc,jrc,frc])))} -function tzc(){tzc=ccb;szc=as((lzc(),OC(GC(YW,1),Kie,313,0,[jzc,hzc,fzc,gzc,kzc,izc])))} -function Yqc(){Yqc=ccb;Xqc=as((Sqc(),OC(GC(LW,1),Kie,276,0,[Nqc,Mqc,Pqc,Oqc,Rqc,Qqc])))} -function wSc(){wSc=ccb;vSc=as((qSc(),OC(GC(t$,1),Kie,327,0,[pSc,lSc,nSc,mSc,oSc,kSc])))} -function ycd(){ycd=ccb;xcd=as((rcd(),OC(GC(E1,1),Kie,273,0,[pcd,ncd,ocd,mcd,lcd,qcd])))} -function Rad(){Rad=ccb;Qad=as((Mad(),OC(GC(w1,1),Kie,312,0,[Kad,Iad,Lad,Gad,Jad,Had])))} -function Lbd(){Hbd();return OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])} -function vkd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,0,c,a.a))} -function wkd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.b))} -function hmd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.b))} -function ald(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,3,c,a.f))} -function cld(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.g))} -function dld(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,5,c,a.i))} -function eld(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,6,c,a.j))} -function omd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,1,c,a.j))} -function imd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,4,c,a.c))} -function pmd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new lSd(a,2,c,a.k))} -function qQd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,2,c,a.d))} -function AId(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,4,c,a.s))} -function DId(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new mSd(a,5,c,a.t))} -function _Jd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,c,b))} -function izd(a,b){var c;c=BD(Ohb((pEd(),oEd),a),55);return c?c.xj(b):KC(SI,Uhe,1,b,5,1)} -function Xpd(a,b){var c,d;c=b in a.a;if(c){d=aC(a,b).he();if(d){return d.a}}return null} -function ftd(a,b){var c,d,e;c=(d=(Fhd(),e=new Jod,e),!!b&&God(d,b),d);Hod(c,a);return c} -function LLd(a,b,c){Itd(a,c);if(!a.Bk()&&c!=null&&!a.wj(c)){throw vbb(new tcb)}return c} -function Xdd(a,b){a.n=b;if(a.n){a.f=new Rkb;a.e=new Rkb}else{a.f=null;a.e=null}return a} -function ndb(a,b,c,d,e,f){var g;g=ldb(a,b);zdb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} -function rSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} -function tSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} -function BSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} -function GSd(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} -function xSd(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} -function rDb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];nDb(a.a,c)}return a} -function pl(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qb(b)}return new vl(a)} -function Uz(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||Xie} -function zdb(a,b){var c;if(!a){return}b.n=a;var d=tdb(b);if(!d){_bb[a]=[b];return}d.gm=b} -function vlb(a,b,c){var d,e;e=a.length;d=$wnd.Math.min(c,e);$Bb(a,0,b,0,d,true);return b} -function RPb(a,b,c){var d,e;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),79);Qqb(a,BD(c.Kb(d),33))}} -function Xbb(){Ybb();var a=Wbb;for(var b=0;b<arguments.length;b++){a.push(arguments[b])}} -function n7c(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Gsb(a,c,a.c.b,a.c)}} -function s$c(a,b){a.b=$wnd.Math.max(a.b,b.d);a.e+=b.r+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} -function wkb(a){yCb(a.c>=0);if(ekb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} -function pgb(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=fhb(a.f)),a.c).e} -function My(a){if(!(a>=0)){throw vbb(new Wdb('tolerance ('+a+') must be >= 0'))}return a} -function n4c(){if(!f4c){f4c=new m4c;l4c(f4c,OC(GC(C0,1),Uhe,130,0,[new Z9c]))}return f4c} -function KAc(){KAc=ccb;JAc=new LAc(ole,0);HAc=new LAc('INPUT',1);IAc=new LAc('OUTPUT',2)} -function bqc(){bqc=ccb;$pc=new cqc('ARD',0);aqc=new cqc('MSD',1);_pc=new cqc('MANUAL',2)} -function rGc(){rGc=ccb;oGc=new sGc('BARYCENTER',0);pGc=new sGc(Bne,1);qGc=new sGc(Cne,2)} -function ztd(a,b){var c;c=a.gc();if(b<0||b>c)throw vbb(new Cyd(b,c));return new czd(a,b)} -function JAd(a,b){var c;if(JD(b,42)){return a.c.Mc(b)}else{c=qAd(a,b);LAd(a,b);return c}} -function $nd(a,b,c){yId(a,b);pnd(a,c);AId(a,0);DId(a,1);CId(a,true);BId(a,true);return a} -function Xj(a,b){if(a<0){throw vbb(new Wdb(b+' cannot be negative but was: '+a))}return a} -function Bt(a,b){var c,d;for(c=0,d=a.gc();c<d;++c){if(wtb(b,a.Xb(c))){return c}}return -1} -function Nc(a){var b,c;for(c=a.c.Cc().Kc();c.Ob();){b=BD(c.Pb(),14);b.$b()}a.c.$b();a.d=0} -function Ri(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Flb(b,b.length,null)}} -function ieb(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} -function NGb(a){var b,c;for(c=new olb(ahd(a));c.a<c.c.c.length;){b=BD(mlb(c),680);b.Gf()}} -function CUb(a){xUb();this.g=new Lqb;this.f=new Lqb;this.b=new Lqb;this.c=new Hp;this.i=a} -function XZb(){this.f=new d7c;this.d=new s0b;this.c=new d7c;this.a=new Rkb;this.b=new Rkb} -function c6d(a,b,c,d){this.rj();this.a=b;this.b=a;this.c=null;this.c=new d6d(this,b,c,d)} -function nxd(a,b,c,d,e){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1;e||(this.o=-2-d-1)} -function hJd(){FId.call(this);this.n=-1;this.g=null;this.i=null;this.j=null;this.Bb|=zte} -function Ldd(){Idd();return OC(GC(J1,1),Kie,259,0,[Bdd,Ddd,Add,Edd,Fdd,Hdd,Gdd,Cdd,zdd])} -function uFb(){rFb();return OC(GC(dN,1),Kie,250,0,[qFb,lFb,mFb,kFb,oFb,pFb,nFb,jFb,iFb])} -function qeb(){qeb=ccb;peb=OC(GC(WD,1),oje,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} -function vCc(){vCc=ccb;uCc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} -function VCc(){VCc=ccb;UCc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} -function rDc(){rDc=ccb;qDc=e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)} -function yFc(){yFc=ccb;xFc=c3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb,y8b)} -function Rpc(){Rpc=ccb;Ppc=new Tpc('LAYER_SWEEP',0);Opc=new Tpc(Tne,1);Qpc=new Tpc(ane,2)} -function RLc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d>0){return BD(Ikb(c.a,d-1),10)}return null} -function Lkd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.k))} -function kmd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.f))} -function lmd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,c,a.i))} -function Hod(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,8,c,a.a))} -function zpd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} -function UUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,c,a.b))} -function VUd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} -function Apd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.c))} -function pQd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,c,a.c))} -function PHd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.d))} -function jKd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.D))} -function Rdd(a,b){if(a.r>0&&a.c<a.r){a.c+=b;!!a.i&&a.i.d>0&&a.g!=0&&Rdd(a.i,b/a.r*a.i.d)}} -function dge(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new hee:new ude;a.c=ode(d,a.b,a.a)} -function g3d(a,b){return T6d(a.e,b)?(Q6d(),YId(b)?new R7d(b,a):new f7d(b,a)):new c8d(b,a)} -function _o(a,b){return Fv(vo(a.a,b,Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)))))} -function Nyb(a,b,c){return Ayb(a,new Kzb(b),new Mzb,new Ozb(c),OC(GC(xL,1),Kie,132,0,[]))} -function pAb(a){var b,c;if(0>a){return new yAb}b=a+1;c=new rAb(b,a);return new vAb(null,c)} -function umb(a,b){mmb();var c;c=new Mqb(1);ND(a)?Shb(c,a,b):jrb(c.f,a,b);return new iob(c)} -function aMb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c<d){return -1}if(c==d){return 0}return 1} -function P2b(a){var b;b=vNb(a,(wtc(),$sc));if(JD(b,160)){return O2b(BD(b,160))}return null} -function Kp(a){var b;a=$wnd.Math.max(a,2);b=geb(a);if(a>b){b<<=1;return b>0?b:Iie}return b} -function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} -function T6c(a,b){var c;if(JD(b,8)){c=BD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} -function _Mb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=xbb(Pbb(a.n[c][f],Tbb(Nbb(e,1))),3);return d} -function IAd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);HAd(a,c.cd(),c.dd())}} -function N1c(a,b){var c;c=new tOb;BD(b.b,65);BD(b.b,65);BD(b.b,65);Hkb(b.a,new T1c(a,c,b))} -function DUd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,21,c,a.b))} -function jmd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,c,a.d))} -function _Id(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,13,c,a.j))} -function $jb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d<c;e=e+1&f,++d){NC(b,d,a.a[e])}} -function rqb(a,b){var c;uCb(b);c=b.g;if(!a.b[c]){NC(a.b,c,b);++a.c;return true}return false} -function eub(a,b){var c;c=b==null?-1:Jkb(a.b,b,0);if(c<0){return false}fub(a,c);return true} -function fub(a,b){var c;c=Kkb(a.b,a.b.c.length-1);if(b<a.b.c.length){Nkb(a.b,b,c);bub(a,b)}} -function eyb(a,b){((oyb(),lyb)?null:b.c).length==0&&qyb(b,new zyb);Shb(a.a,lyb?null:b.c,b)} -function M5b(a,b){Odd(b,'Hierarchical port constraint processing',1);N5b(a);P5b(a);Qdd(b)} -function GOb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=BD(d.Pb(),266);a.b=true;Qqb(a.e,c);c.b=a}} -function Owb(a,b){var c,d;c=1-b;d=a.a[c];a.a[c]=d.a[b];d.a[b]=a;a.b=true;d.b=false;return d} -function Gec(a,b){var c,d;c=BD(vNb(a,(Nyc(),ayc)),8);d=BD(vNb(b,ayc),8);return Kdb(c.b,d.b)} -function jfc(a){oEb.call(this);this.b=Edb(ED(vNb(a,(Nyc(),lyc))));this.a=BD(vNb(a,Swc),218)} -function XGc(a,b,c){uEc.call(this,a,b,c);this.a=new Lqb;this.b=new Lqb;this.d=new $Gc(this)} -function ku(a){this.e=a;this.d=new Uqb(Cv(Ec(this.e).gc()));this.c=this.e.a;this.b=this.e.c} -function BHc(a){this.b=a;this.a=KC(WD,oje,25,a+1,15,1);this.c=KC(WD,oje,25,a,15,1);this.d=0} -function THc(a,b,c){var d;d=new Rkb;UHc(a,b,d,c,true,true);a.b=new BHc(d.c.length);return d} -function nMc(a,b){var c;c=BD(Ohb(a.c,b),458);if(!c){c=new uMc;c.c=b;Rhb(a.c,c.c,c)}return c} -function $B(e,a){var b=e.a;var c=0;for(var d in b){b.hasOwnProperty(d)&&(a[c++]=d)}return a} -function pRd(a){var b;if(a.b==null){return LRd(),LRd(),KRd}b=a.Lk()?a.Kk():a.Jk();return b} -function r$c(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),33);dld(b,0);eld(b,0)}} -function HSb(){HSb=ccb;FSb=new Lsd(Ime);GSb=new Lsd(Jme);ESb=new Lsd(Kme);DSb=new Lsd(Lme)} -function y5b(){y5b=ccb;x5b=new z5b('TO_INTERNAL_LTR',0);w5b=new z5b('TO_INPUT_DIRECTION',1)} -function PUc(){PUc=ccb;NUc=new RUc('P1_NODE_PLACEMENT',0);OUc=new RUc('P2_EDGE_ROUTING',1)} -function Fkc(){Fkc=ccb;Ekc=new Gkc('START',0);Dkc=new Gkc('MIDDLE',1);Ckc=new Gkc('END',2)} -function I9b(){I9b=ccb;H9b=new Msd('edgelabelcenterednessanalysis.includelabel',(Bcb(),zcb))} -function Zyc(a,b){MAb(JAb(new YAb(null,new Kub(new Pib(a.b),1)),new bfd(a,b)),new ffd(a,b))} -function $Xc(){this.c=new jVc(0);this.b=new jVc(Tqe);this.d=new jVc(Sqe);this.a=new jVc(cme)} -function $Fc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=BD(c.Pb(),214);eFc(b,new oHc(b.e))}} -function ZFc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=BD(c.Pb(),214);dFc(b,new nHc(b.f))}} -function pnd(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,c,a.zb))} -function cod(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,c,a.xb))} -function dod(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,2,c,a.yb))} -function Knd(a,b){var c,d;c=(d=new OJd,d);c.n=b;wtd((!a.s&&(a.s=new cUd(t5,a,21,17)),a.s),c)} -function Qnd(a,b){var c,d;d=(c=new FUd,c);d.n=b;wtd((!a.s&&(a.s=new cUd(t5,a,21,17)),a.s),d)} -function ktb(a,b){var c,d;c=a.Pc();Klb(c,0,c.length,b);for(d=0;d<c.length;d++){a._c(d,c[d])}} -function ye(a,b){var c,d,e;uCb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();c=c|a.Fc(d)}return c} -function Bx(a){var b,c,d;b=0;for(d=a.Kc();d.Ob();){c=d.Pb();b+=c!=null?tb(c):0;b=~~b}return b} -function SA(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+UA(a)} -function Jq(a,b){var c;if(JD(b,14)){c=BD(b,14);return a.Gc(c)}return fr(a,BD(Qb(b),20).Kc())} -function Bnc(a,b,c){Cnc.call(this,b,c);this.d=KC(OQ,kne,10,a.a.c.length,0,1);Qkb(a.a,this.d)} -function IMc(a){a.a=null;a.e=null;a.b.c=KC(SI,Uhe,1,0,5,1);a.f.c=KC(SI,Uhe,1,0,5,1);a.c=null} -function gKd(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} -function Poc(a,b){return Edb(ED(Btb(TAb(NAb(new YAb(null,new Kub(a.c.b,16)),new fpc(a)),b))))} -function Soc(a,b){return Edb(ED(Btb(TAb(NAb(new YAb(null,new Kub(a.c.b,16)),new dpc(a)),b))))} -function Q2b(a,b){Odd(b,zne,1);MAb(LAb(new YAb(null,new Kub(a.b,16)),new U2b),new W2b);Qdd(b)} -function SXc(a,b){var c,d;c=BD(hkd(a,(ZWc(),SWc)),19);d=BD(hkd(b,SWc),19);return beb(c.a,d.a)} -function p7c(a,b,c){var d,e;for(e=Jsb(a,0);e.b!=e.d.c;){d=BD(Xsb(e),8);d.a+=b;d.b+=c}return a} -function uo(a,b,c){var d;for(d=a.b[c&a.f];d;d=d.b){if(c==d.a&&Hb(b,d.g)){return d}}return null} -function vo(a,b,c){var d;for(d=a.c[c&a.f];d;d=d.d){if(c==d.f&&Hb(b,d.i)){return d}}return null} -function khb(a,b,c){var d,e,f;d=0;for(e=0;e<c;e++){f=b[e];a[e]=f<<1|d;d=f>>>31}d!=0&&(a[c]=d)} -function rmb(a,b){mmb();var c,d;d=new Rkb;for(c=0;c<a;++c){d.c[d.c.length]=b}return new Yob(d)} -function Zzb(a){var b;b=Yzb(a);if(Bbb(b.a,0)){return Ltb(),Ltb(),Ktb}return Ltb(),new Ptb(b.b)} -function $zb(a){var b;b=Yzb(a);if(Bbb(b.a,0)){return Ltb(),Ltb(),Ktb}return Ltb(),new Ptb(b.c)} -function uAb(a){var b;b=tAb(a);if(Bbb(b.a,0)){return Utb(),Utb(),Ttb}return Utb(),new Xtb(b.b)} -function zZb(a){if(a.b.c.i.k==(j0b(),e0b)){return BD(vNb(a.b.c.i,(wtc(),$sc)),11)}return a.b.c} -function AZb(a){if(a.b.d.i.k==(j0b(),e0b)){return BD(vNb(a.b.d.i,(wtc(),$sc)),11)}return a.b.d} -function Vnd(a,b,c,d,e,f,g,h,i,j,k,l,m){aod(a,b,c,d,e,f,g,h,i,j,k,l,m);MJd(a,false);return a} -function tJb(a,b,c,d,e,f,g){$r.call(this,a,b);this.d=c;this.e=d;this.c=e;this.b=f;this.a=Ou(g)} -function $bb(a,b){typeof window===Jhe&&typeof window['$gwt']===Jhe&&(window['$gwt'][a]=b)} -function pWb(a,b){lWb();return a==hWb&&b==kWb||a==kWb&&b==hWb||a==jWb&&b==iWb||a==iWb&&b==jWb} -function qWb(a,b){lWb();return a==hWb&&b==iWb||a==hWb&&b==jWb||a==kWb&&b==jWb||a==kWb&&b==iWb} -function IJb(a,b){return Iy(),My(ple),$wnd.Math.abs(0-b)<=ple||0==b||isNaN(0)&&isNaN(b)?0:a/b} -function Rrc(){Orc();return OC(GC(PW,1),Kie,256,0,[Frc,Hrc,Irc,Jrc,Krc,Lrc,Nrc,Erc,Grc,Mrc])} -function NKd(){NKd=ccb;KKd=new KPd;MKd=OC(GC(t5,1),Mve,170,0,[]);LKd=OC(GC(n5,1),Nve,59,0,[])} -function CBc(){CBc=ccb;BBc=new DBc('NO',0);zBc=new DBc('GREEDY',1);ABc=new DBc('LOOK_BACK',2)} -function z0b(){z0b=ccb;w0b=new m1b;u0b=new h1b;v0b=new q1b;t0b=new u1b;x0b=new y1b;y0b=new C1b} -function J9b(a){var b,c,d;d=0;for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);b.p=d;++d}} -function nfd(a,b){var c;c=sfd(a);return mfd(new f7c(c.c,c.d),new f7c(c.b,c.a),a.rf(),b,a.Hf())} -function Udd(a,b){var c;if(a.b){return null}else{c=Pdd(a,a.g);Dsb(a.a,c);c.i=a;a.d=b;return c}} -function kUc(a,b,c){Odd(c,'DFS Treeifying phase',1);jUc(a,b);hUc(a,b);a.a=null;a.b=null;Qdd(c)} -function zic(a,b,c){this.g=a;this.d=b;this.e=c;this.a=new Rkb;xic(this);mmb();Okb(this.a,null)} -function Aud(a){this.i=a.gc();if(this.i>0){this.g=this.ri(this.i+(this.i/8|0)+1);a.Qc(this.g)}} -function u3d(a,b){k2d.call(this,D9,a,b);this.b=this;this.a=S6d(a.Tg(),XKd(this.e.Tg(),this.c))} -function Ld(a,b){var c,d;uCb(b);for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);a.zc(c.cd(),c.dd())}} -function G2d(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!E2d(a,b,d.Pb())){return false}}return true} -function sVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.gh(b,-1-(f==-1?d:f),null,e)}return e} -function tVd(a,b,c,d,e){var f;if(c){f=bLd(b.Tg(),a.c);e=c.ih(b,-1-(f==-1?d:f),null,e)}return e} -function Mgb(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} -function Z4b(a){switch(a.g){case 2:return Ucd(),Tcd;case 4:return Ucd(),zcd;default:return a;}} -function $4b(a){switch(a.g){case 1:return Ucd(),Rcd;case 3:return Ucd(),Acd;default:return a;}} -function nkc(a){var b,c,d;return a.j==(Ucd(),Acd)&&(b=pkc(a),c=uqb(b,zcd),d=uqb(b,Tcd),d||d&&c)} -function oqb(a){var b,c;b=BD(a.e&&a.e(),9);c=BD(ZBb(b,b.length),9);return new xqb(b,c,b.length)} -function l7b(a,b){Odd(b,zne,1);UGb(TGb(new YGb((a$b(),new l$b(a,false,false,new T$b)))));Qdd(b)} -function Fcb(a,b){Bcb();return ND(a)?cfb(a,GD(b)):LD(a)?Ddb(a,ED(b)):KD(a)?Dcb(a,DD(b)):a.wd(b)} -function WZc(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Ekb(a.a,b)} -function m6c(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.a<c&&b.b>f&&b.b<d} -function Ynd(a,b,c,d){JD(a.Cb,179)&&(BD(a.Cb,179).tb=null);pnd(a,c);!!b&&hKd(a,b);d&&a.xk(true)} -function Yqd(a,b){var c;c=BD(b,183);Spd(c,'x',a.i);Spd(c,'y',a.j);Spd(c,Gte,a.g);Spd(c,Fte,a.f)} -function LFc(){LFc=ccb;KFc=b3c(f3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb),y8b)} -function dHc(){dHc=ccb;cHc=b3c(f3c(e3c(e3c(new j3c,(qUb(),nUb),(S8b(),z8b)),oUb,p8b),pUb),y8b)} -function sXc(){sXc=ccb;qXc=new uXc(ane,0);rXc=new uXc('POLAR_COORDINATE',1);pXc=new uXc('ID',2)} -function TAc(){TAc=ccb;QAc=new UAc('EQUALLY',0);RAc=new UAc(xle,1);SAc=new UAc('NORTH_SOUTH',2)} -function pAc(){pAc=ccb;oAc=as((kAc(),OC(GC(aX,1),Kie,260,0,[iAc,dAc,gAc,eAc,fAc,cAc,hAc,jAc])))} -function Flc(){Flc=ccb;Elc=as((Alc(),OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc])))} -function e6c(){e6c=ccb;d6c=as((_5c(),OC(GC(f1,1),Kie,277,0,[$5c,T5c,X5c,Z5c,U5c,V5c,W5c,Y5c])))} -function Hsd(){Hsd=ccb;Gsd=as((Csd(),OC(GC(O3,1),Kie,237,0,[Bsd,ysd,zsd,xsd,Asd,vsd,usd,wsd])))} -function XNb(){XNb=ccb;VNb=new Msd('debugSVG',(Bcb(),false));WNb=new Msd('overlapsExisted',true)} -function Xyb(a,b){return Ayb(new tzb(a),new vzb(b),new xzb(b),new zzb,OC(GC(xL,1),Kie,132,0,[]))} -function hyb(){var a;if(!dyb){dyb=new gyb;a=new wyb('');uyb(a,($xb(),Zxb));eyb(dyb,a)}return dyb} -function hr(a,b){var c;Qb(b);while(a.Ob()){c=a.Pb();if(!QNc(BD(c,10))){return false}}return true} -function T3c(a,b){var c;c=h4c(n4c(),a);if(c){jkd(b,(Y9c(),F9c),c);return true}else{return false}} -function d3c(a,b){var c;for(c=0;c<b.j.c.length;c++){BD(B2c(a,c),21).Gc(BD(B2c(b,c),14))}return a} -function M9b(a,b){var c,d;for(d=new olb(b.b);d.a<d.c.c.length;){c=BD(mlb(d),29);a.a[c.p]=_$b(c)}} -function stb(a,b){var c,d;uCb(b);for(d=a.vc().Kc();d.Ob();){c=BD(d.Pb(),42);b.Od(c.cd(),c.dd())}} -function cId(a,b){var c;if(JD(b,83)){BD(a.c,76).Xj();c=BD(b,83);IAd(a,c)}else{BD(a.c,76).Wb(b)}} -function Su(a){return JD(a,152)?km(BD(a,152)):JD(a,131)?BD(a,131).a:JD(a,54)?new ov(a):new dv(a)} -function fac(a,b){return b<a.b.gc()?BD(a.b.Xb(b),10):b==a.b.gc()?a.a:BD(Ikb(a.e,b-a.b.gc()-1),10)} -function crb(a,b){a.a=wbb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d=wbb(a.d,b)} -function n3b(a,b){var c;Odd(b,'Edge and layer constraint edge reversal',1);c=m3b(a);l3b(c);Qdd(b)} -function tAd(a){var b;if(a.d==null){++a.e;a.f=0;sAd(null)}else{++a.e;b=a.d;a.d=null;a.f=0;sAd(b)}} -function zbb(a){var b;b=a.h;if(b==0){return a.l+a.m*Hje}if(b==Fje){return a.l+a.m*Hje-Ije}return a} -function aKb(a){$Jb();if(a.A.Hc((tdd(),pdd))){if(!a.B.Hc((Idd(),Ddd))){return _Jb(a)}}return null} -function Zgb(a){uCb(a);if(a.length==0){throw vbb(new Oeb('Zero length BigInteger'))}dhb(this,a)} -function Vb(a){if(!a){throw vbb(new Zdb('no calls to next() since the last call to remove()'))}} -function Cbb(a){if(Kje<a&&a<Ije){return a<0?$wnd.Math.ceil(a):$wnd.Math.floor(a)}return zbb(fD(a))} -function Yyb(a,b){var c,d,e;c=a.c.Ee();for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Od(c,d)}return a.b.Kb(c)} -function Uhd(a,b){var c,d,e;c=a.Jg();if(c!=null&&a.Mg()){for(d=0,e=c.length;d<e;++d){c[d].ui(b)}}} -function f_b(a,b){var c,d;c=a;d=Q_b(c).e;while(d){c=d;if(c==b){return true}d=Q_b(c).e}return false} -function lDc(a,b,c){var d,e;d=a.a.f[b.p];e=a.a.f[c.p];if(d<e){return -1}if(d==e){return 0}return 1} -function Si(a,b,c){var d,e;e=BD(tn(a.d,b),19);d=BD(tn(a.b,c),19);return !e||!d?null:Mi(a,e.a,d.a)} -function cYc(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),33);bld(c,c.i+b.b,c.j+b.d)}} -function qjc(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),70);Ekb(a.d,c);ujc(a,c)}} -function pQc(a,b){var c,d;d=new Rkb;c=b;do{d.c[d.c.length]=c;c=BD(Ohb(a.k,c),17)}while(c);return d} -function Ajd(a,b){var c;if((a.Db&b)!=0){c=zjd(a,b);return c==-1?a.Eb:CD(a.Eb)[c]}else{return null}} -function Lnd(a,b){var c,d;c=(d=new hLd,d);c.G=b;!a.rb&&(a.rb=new jUd(a,d5,a));wtd(a.rb,c);return c} -function Mnd(a,b){var c,d;c=(d=new MPd,d);c.G=b;!a.rb&&(a.rb=new jUd(a,d5,a));wtd(a.rb,c);return c} -function Hkd(a,b){switch(b){case 1:return !!a.n&&a.n.i!=0;case 2:return a.k!=null;}return dkd(a,b)} -function gNc(a){switch(a.a.g){case 1:return new NNc;case 3:return new vQc;default:return new wNc;}} -function MRd(a){var b;if(a.g>1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw vbb(new utb)}} -function kNc(a){fNc();var b;if(!Lpb(eNc,a)){b=new hNc;b.a=a;Opb(eNc,a,b)}return BD(Mpb(eNc,a),635)} -function Rbb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=Ije;d=Fje}c=QD(e/Hje);b=QD(e-c*Hje);return TC(b,c,d)} -function Ox(a){var b,c,d;d=0;for(c=new Gqb(a.a);c.a<c.c.a.length;){b=Fqb(c);a.b.Hc(b)&&++d}return d} -function Ku(a){var b,c,d;b=1;for(d=a.Kc();d.Ob();){c=d.Pb();b=31*b+(c==null?0:tb(c));b=~~b}return b} -function Zwb(a,b){var c;this.c=a;c=new Rkb;Ewb(a,c,b,a.b,null,false,null,false);this.a=new Bib(c,0)} -function p4d(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(Q6d(),BD(a,66).Oj());this.k=S6d(b.e.Tg(),a)} -function xwb(a,b,c){this.b=(uCb(a),a);this.d=(uCb(b),b);this.e=(uCb(c),c);this.c=this.d+(''+this.e)} -function xRb(){this.a=BD(Ksd((wSb(),eSb)),19).a;this.c=Edb(ED(Ksd(uSb)));this.b=Edb(ED(Ksd(qSb)))} -function Nbd(){Nbd=ccb;Mbd=as((Hbd(),OC(GC(B1,1),Kie,93,0,[zbd,ybd,Bbd,Gbd,Fbd,Ebd,Cbd,Dbd,Abd])))} -function wFb(){wFb=ccb;vFb=as((rFb(),OC(GC(dN,1),Kie,250,0,[qFb,lFb,mFb,kFb,oFb,pFb,nFb,jFb,iFb])))} -function vLb(){vLb=ccb;uLb=new wLb('UP',0);rLb=new wLb(vle,1);sLb=new wLb(jle,2);tLb=new wLb(kle,3)} -function rTc(){rTc=ccb;qTc=(STc(),QTc);pTc=new Nsd(Zqe,qTc);oTc=($Tc(),ZTc);nTc=new Nsd($qe,oTc)} -function Xrc(){Xrc=ccb;Vrc=new Yrc('ONE_SIDED',0);Wrc=new Yrc('TWO_SIDED',1);Urc=new Yrc('OFF',2)} -function TQc(a){a.r=new Tqb;a.w=new Tqb;a.t=new Rkb;a.i=new Rkb;a.d=new Tqb;a.a=new I6c;a.c=new Lqb} -function uOc(a){this.n=new Rkb;this.e=new Psb;this.j=new Psb;this.k=new Rkb;this.f=new Rkb;this.p=a} -function PEc(a,b){if(a.c){QEc(a,b,true);MAb(new YAb(null,new Kub(b,16)),new bFc(a))}QEc(a,b,false)} -function wFc(a,b,c){return a==(rGc(),qGc)?new pFc:Cub(b,1)!=0?new iHc(c.length):new RGc(c.length)} -function tNb(a,b){var c;if(!b){return a}c=b.Ve();c.dc()||(!a.q?(a.q=new Nqb(c)):Ld(a.q,c));return a} -function Erb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{urb(a.a,b);--a.c;zpb(a.b)}return c} -function UYb(a,b){var c,d,e;c=b.p-a.p;if(c==0){d=a.f.a*a.f.b;e=b.f.a*b.f.b;return Kdb(d,e)}return c} -function XLb(a,b){var c,d;c=a.f.c.length;d=b.f.c.length;if(c<d){return -1}if(c==d){return 0}return 1} -function KZb(a){if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}return JZb(a)} -function Pq(a){var b;if(a){b=a;if(b.dc()){throw vbb(new utb)}return b.Xb(b.gc()-1)}return nr(a.Kc())} -function vgb(a){var b;ybb(a,0)<0&&(a=Lbb(a));return b=Tbb(Obb(a,32)),64-(b!=0?heb(b):heb(Tbb(a))+32)} -function QNc(a){var b;b=BD(vNb(a,(wtc(),Hsc)),61);return a.k==(j0b(),e0b)&&(b==(Ucd(),Tcd)||b==zcd)} -function bZb(a,b,c){var d,e;e=BD(vNb(a,(Nyc(),jxc)),74);if(e){d=new s7c;o7c(d,0,e);q7c(d,c);ye(b,d)}} -function M_b(a,b,c){var d,e,f,g;g=Q_b(a);d=g.d;e=g.c;f=a.n;b&&(f.a=f.a-d.b-e.a);c&&(f.b=f.b-d.d-e.b)} -function dcc(a,b){var c,d;c=a.j;d=b.j;return c!=d?c.g-d.g:a.p==b.p?0:c==(Ucd(),Acd)?a.p-b.p:b.p-a.p} -function dmc(a){var b,c;bmc(a);for(c=new olb(a.d);c.a<c.c.c.length;){b=BD(mlb(c),101);!!b.i&&cmc(b)}} -function lBc(a,b,c,d,e){NC(a.c[b.g],c.g,d);NC(a.c[c.g],b.g,d);NC(a.b[b.g],c.g,e);NC(a.b[c.g],b.g,e)} -function G1c(a,b,c,d){BD(c.b,65);BD(c.b,65);BD(d.b,65);BD(d.b,65);BD(d.b,65);Hkb(d.a,new L1c(a,b,d))} -function WDb(a,b){a.d==(ead(),aad)||a.d==dad?BD(b.a,57).c.Fc(BD(b.b,57)):BD(b.b,57).c.Fc(BD(b.a,57))} -function Gkd(a,b,c,d){if(c==1){return !a.n&&(a.n=new cUd(D2,a,1,7)),Txd(a.n,b,d)}return ckd(a,b,c,d)} -function Gnd(a,b){var c,d;d=(c=new BYd,c);pnd(d,b);wtd((!a.A&&(a.A=new K4d(u5,a,7)),a.A),d);return d} -function Zqd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,Jte);d=new jrd(a,c);f=(lqd(d.a,d.b,e),e);return f} -function KJd(a){var b;if(!a.a||(a.Bb&1)==0&&a.a.kh()){b=wId(a);JD(b,148)&&(a.a=BD(b,148))}return a.a} -function Be(a,b){var c,d;uCb(b);for(d=b.Kc();d.Ob();){c=d.Pb();if(!a.Hc(c)){return false}}return true} -function cD(a,b){var c,d,e;c=a.l+b.l;d=a.m+b.m+(c>>22);e=a.h+b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} -function nD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return TC(c&Eje,d&Eje,e&Fje)} -function bdb(a){var b;if(a<128){b=(ddb(),cdb)[a];!b&&(b=cdb[a]=new Xcb(a));return b}return new Xcb(a)} -function ubb(a){var b;if(JD(a,78)){return a}b=a&&a.__java$exception;if(!b){b=new lz(a);Sz(b)}return b} -function btd(a){if(JD(a,186)){return BD(a,118)}else if(!a){throw vbb(new Heb(gue))}else{return null}} -function Zjb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,vkb(a))){return true}}return false} -function kib(a){if(a.a.Ob()){return true}if(a.a!=a.d){return false}a.a=new orb(a.e.f);return a.a.Ob()} -function Gkb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}bCb(a.c,a.c.length,c);return true} -function Vyb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=BD(e.Pb(),42);a.yc(d.cd(),d.dd(),c)}return a} -function yac(a,b){var c,d;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),70);yNb(c,(wtc(),Ssc),b)}} -function FZc(a,b,c){var d,e;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),33);bld(d,d.i+b,d.j+c)}} -function Nb(a,b){if(!a){throw vbb(new Wdb(hc('value already present: %s',OC(GC(SI,1),Uhe,1,5,[b]))))}} -function mEb(a,b){if(!a||!b||a==b){return false}return CDb(a.d.c,b.d.c+b.d.b)&&CDb(b.d.c,a.d.c+a.d.b)} -function xyb(){oyb();if(lyb){return new wyb(null)}return fyb(hyb(),'com.google.common.base.Strings')} -function J2c(a,b){var c;c=Pu(b.a.gc());MAb(VAb(new YAb(null,new Kub(b,1)),a.i),new W2c(a,c));return c} -function Hnd(a){var b,c;c=(b=new BYd,b);pnd(c,'T');wtd((!a.d&&(a.d=new K4d(u5,a,11)),a.d),c);return c} -function Etd(a){var b,c,d,e;b=1;for(c=0,e=a.gc();c<e;++c){d=a.ki(c);b=31*b+(d==null?0:tb(d))}return b} -function Wi(a,b,c,d){var e;Pb(b,a.e.Hd().gc());Pb(c,a.c.Hd().gc());e=a.a[b][c];NC(a.a[b],c,d);return e} -function OC(a,b,c,d,e){e.gm=a;e.hm=b;e.im=gcb;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} -function p6c(a,b,c,d,e){i6c();return $wnd.Math.min(A6c(a,b,c,d,e),A6c(c,d,a,b,V6c(new f7c(e.a,e.b))))} -function gbc(){gbc=ccb;fbc=new ibc(ane,0);dbc=new ibc(Gne,1);ebc=new ibc(Hne,2);cbc=new ibc('BOTH',3)} -function Ajc(){Ajc=ccb;wjc=new Bjc(gle,0);xjc=new Bjc(jle,1);yjc=new Bjc(kle,2);zjc=new Bjc('TOP',3)} -function lWb(){lWb=ccb;hWb=new oWb('Q1',0);kWb=new oWb('Q4',1);iWb=new oWb('Q2',2);jWb=new oWb('Q3',3)} -function LBc(){LBc=ccb;JBc=new MBc('OFF',0);KBc=new MBc('SINGLE_EDGE',1);IBc=new MBc('MULTI_EDGE',2)} -function a1c(){a1c=ccb;_0c=new c1c('MINIMUM_SPANNING_TREE',0);$0c=new c1c('MAXIMUM_SPANNING_TREE',1)} -function Y1c(){Y1c=ccb;new Lsd('org.eclipse.elk.addLayoutConfig');W1c=new k2c;V1c=new f2c;X1c=new i2c} -function URc(a){var b,c,d;b=new Psb;for(d=Jsb(a.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);Dsb(b,c.c)}return b} -function dVc(a){var b,c,d,e;e=new Rkb;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),33);b=gVc(c);Gkb(e,b)}return e} -function xcc(a){var b;PZb(a,true);b=_ie;wNb(a,(Nyc(),cyc))&&(b+=BD(vNb(a,cyc),19).a);yNb(a,cyc,meb(b))} -function q1c(a,b,c){var d;Uhb(a.a);Hkb(c.i,new B1c(a));d=new hDb(BD(Ohb(a.a,b.b),65));p1c(a,d,b);c.f=d} -function QLc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d<c.a.c.length-1){return BD(Ikb(c.a,d+1),10)}return null} -function rr(a,b){var c,d;Rb(b,'predicate');for(d=0;a.Ob();d++){c=a.Pb();if(b.Lb(c)){return d}}return -1} -function ZEd(a,b){var c,d;d=0;if(a<64&&a<=b){b=b<64?b:63;for(c=a;c<=b;c++){d=Mbb(d,Nbb(1,c))}}return d} -function pmb(a){mmb();var b,c,d;d=0;for(c=a.Kc();c.Ob();){b=c.Pb();d=d+(b!=null?tb(b):0);d=d|0}return d} -function etd(a){var b,c;c=(Fhd(),b=new rmd,b);!!a&&wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c);return c} -function TA(a){var b;b=new PA;b.a=a;b.b=RA(a);b.c=KC(ZI,nie,2,2,6,1);b.c[0]=SA(a);b.c[1]=SA(a);return b} -function fkd(a,b){switch(b){case 0:!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0));a.o.c.$b();return;}Cid(a,b)} -function jEb(a,b,c){switch(c.g){case 2:a.b=b;break;case 1:a.c=b;break;case 4:a.d=b;break;case 3:a.a=b;}} -function sbd(a){switch(a.g){case 1:return obd;case 2:return nbd;case 3:return pbd;default:return qbd;}} -function Zac(a){switch(BD(vNb(a,(Nyc(),mxc)),163).g){case 2:case 4:return true;default:return false;}} -function Trc(){Trc=ccb;Src=as((Orc(),OC(GC(PW,1),Kie,256,0,[Frc,Hrc,Irc,Jrc,Krc,Lrc,Nrc,Erc,Grc,Mrc])))} -function Ndd(){Ndd=ccb;Mdd=as((Idd(),OC(GC(J1,1),Kie,259,0,[Bdd,Ddd,Add,Edd,Fdd,Hdd,Gdd,Cdd,zdd])))} -function wUc(){wUc=ccb;vUc=e3c(b3c(b3c(g3c(e3c(new j3c,(yRc(),vRc),(qSc(),pSc)),wRc),mSc),nSc),xRc,oSc)} -function Gqc(){Gqc=ccb;Eqc=new Hqc(ane,0);Dqc=new Hqc('INCOMING_ONLY',1);Fqc=new Hqc('OUTGOING_ONLY',2)} -function rC(){rC=ccb;qC={'boolean':sC,'number':tC,'string':vC,'object':uC,'function':uC,'undefined':wC}} -function Whb(a,b){mCb(a>=0,'Negative initial capacity');mCb(b>=0,'Non-positive load factor');Uhb(this)} -function _Ed(a,b,c){if(a>=128)return false;return a<64?Kbb(xbb(Nbb(1,a),c),0):Kbb(xbb(Nbb(1,a-64),b),0)} -function bOb(a,b){if(!a||!b||a==b){return false}return Jy(a.b.c,b.b.c+b.b.b)<0&&Jy(b.b.c,a.b.c+a.b.b)<0} -function I4b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new J6c(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} -function $ic(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];djc(a,b,(Ucd(),Rcd));djc(a,b,Acd)}} -function Uy(a){var b,c,d,e;for(b=(a.j==null&&(a.j=(Rz(),e=Qz.ce(a),Tz(e))),a.j),c=0,d=b.length;c<d;++c);} -function hD(a){var b,c,d;b=~a.l+1&Eje;c=~a.m+(b==0?1:0)&Eje;d=~a.h+(b==0&&c==0?1:0)&Fje;return TC(b,c,d)} -function C$c(a,b){var c,d;c=BD(BD(Ohb(a.g,b.a),46).a,65);d=BD(BD(Ohb(a.g,b.b),46).a,65);return _Nb(c,d)} -function xtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));a.hi()&&(c=Dtd(a,c));return a.Vh(b,c)} -function xNb(a,b,c){return c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a} -function yNb(a,b,c){c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c));return a} -function TQb(a){var b,c;c=new kRb;tNb(c,a);yNb(c,(HSb(),FSb),a);b=new Lqb;VQb(a,c,b);UQb(a,c,b);return c} -function j6c(a){i6c();var b,c,d;c=KC(m1,nie,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=r6c(d,a)}return c} -function Mic(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f<d-1;f++){e=f+1;c=c|Nic(a,b,f,e)}return c} -function nNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){YMb(a,f,g)||aNb(a,f,g,true,false)}}} -function rNd(a,b){this.b=a;nNd.call(this,(BD(qud(ZKd((NFd(),MFd).o),10),18),b.i),b.g);this.a=(NKd(),MKd)} -function hj(a,b){this.c=a;this.d=b;this.b=this.d/this.c.c.Hd().gc()|0;this.a=this.d%this.c.c.Hd().gc()} -function jdb(){++edb;this.o=null;this.k=null;this.j=null;this.d=null;this.b=null;this.n=null;this.a=null} -function fB(a,b,c){this.q=new $wnd.Date;this.q.setFullYear(a+nje,b,c);this.q.setHours(0,0,0,0);YA(this,0)} -function tAc(){tAc=ccb;rAc=new uAc(ane,0);qAc=new uAc('NODES_AND_EDGES',1);sAc=new uAc('PREFER_EDGES',2)} -function RA(a){var b;if(a==0){return 'Etc/GMT'}if(a<0){a=-a;b='Etc/GMT-'}else{b='Etc/GMT+'}return b+UA(a)} -function geb(a){var b;if(a<0){return Rie}else if(a==0){return 0}else{for(b=Iie;(b&a)==0;b>>=1);return b}} -function $C(a){var b,c;c=heb(a.h);if(c==32){b=heb(a.m);return b==32?heb(a.l)+32:b+20-10}else{return c-12}} -function bkb(a){var b;b=a.a[a.b];if(b==null){return null}NC(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} -function EDc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} -function Iwb(a,b,c){var d,e;d=new exb(b,c);e=new fxb;a.b=Gwb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} -function djc(a,b,c){var d,e,f,g;g=CHc(b,c);f=0;for(e=g.Kc();e.Ob();){d=BD(e.Pb(),11);Rhb(a.c,d,meb(f++))}} -function xVb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.g.c=-b.g.c-b.g.b}sVb(a)} -function XDb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.d.c=-b.d.c-b.d.b}RDb(a)} -function AUd(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=wId(a);JD(b,88)&&(a.c=BD(b,26))}return a.c} -function ZC(a){var b,c,d;b=~a.l+1&Eje;c=~a.m+(b==0?1:0)&Eje;d=~a.h+(b==0&&c==0?1:0)&Fje;a.l=b;a.m=c;a.h=d} -function l7c(a){var b,c,d,e,f;b=new d7c;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b.a+=c.a;b.b+=c.b}return b} -function nmb(a,b){mmb();var c,d,e,f,g;g=false;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=g|a.Fc(c)}return g} -function w6c(a){i6c();var b,c;c=-1.7976931348623157E308;for(b=0;b<a.length;b++){a[b]>c&&(c=a[b])}return c} -function SHc(a,b,c){var d;d=new Rkb;UHc(a,b,d,(Ucd(),zcd),true,false);UHc(a,c,d,Tcd,false,false);return d} -function crd(a,b,c){var d,e,f,g;f=null;g=b;e=Ypd(g,'labels');d=new Hrd(a,c);f=(Dqd(d.a,d.b,e),e);return f} -function j1d(a,b,c,d){var e;e=r1d(a,b,c,d);if(!e){e=i1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} -function m1d(a,b,c,d){var e;e=s1d(a,b,c,d);if(!e){e=l1d(a,c,d);if(!!e&&!e1d(a,b,e)){return null}}return e} -function Xb(a,b){var c;for(c=0;c<a.a.a.length;c++){if(!BD($lb(a.a,c),169).Lb(b)){return false}}return true} -function Cb(a,b,c){Qb(b);if(c.Ob()){Mfb(b,Fb(c.Pb()));while(c.Ob()){Mfb(b,a.a);Mfb(b,Fb(c.Pb()))}}return b} -function qmb(a){mmb();var b,c,d;d=1;for(c=a.Kc();c.Ob();){b=c.Pb();d=31*d+(b!=null?tb(b):0);d=d|0}return d} -function WC(a,b,c,d,e){var f;f=lD(a,b);c&&ZC(f);if(e){a=YC(a,b);d?(QC=hD(a)):(QC=TC(a.l,a.m,a.h))}return f} -function Xzb(b,c){var d;try{c.Vd()}catch(a){a=ubb(a);if(JD(a,78)){d=a;b.c[b.c.length]=d}else throw vbb(a)}} -function jRb(a,b,c){var d,e;if(JD(b,144)&&!!c){d=BD(b,144);e=c;return a.a[d.b][e.b]+a.a[e.b][d.b]}return 0} -function xld(a,b){switch(b){case 7:return !!a.e&&a.e.i!=0;case 8:return !!a.d&&a.d.i!=0;}return Ykd(a,b)} -function YQb(a,b){switch(b.g){case 0:JD(a.b,631)||(a.b=new xRb);break;case 1:JD(a.b,632)||(a.b=new DRb);}} -function Ghe(a,b){while(a.g==null&&!a.c?Uud(a):a.g==null||a.i!=0&&BD(a.g[a.i-1],47).Ob()){Ord(b,Vud(a))}} -function kic(a,b,c){a.g=qic(a,b,(Ucd(),zcd),a.b);a.d=qic(a,c,zcd,a.b);if(a.g.c==0||a.d.c==0){return}nic(a)} -function lic(a,b,c){a.g=qic(a,b,(Ucd(),Tcd),a.j);a.d=qic(a,c,Tcd,a.j);if(a.g.c==0||a.d.c==0){return}nic(a)} -function $yc(a,b,c){return !WAb(JAb(new YAb(null,new Kub(a.c,16)),new Xxb(new dfd(b,c)))).sd((EAb(),DAb))} -function KAb(a){var b;Tzb(a);b=new NBb;if(a.a.sd(b)){return Atb(),new Ftb(uCb(b.a))}return Atb(),Atb(),ztb} -function nA(a){var b;if(a.b<=0){return false}b=hfb('MLydhHmsSDkK',wfb(bfb(a.c,0)));return b>1||b>=0&&a.b<3} -function w7c(a){var b,c,d;b=new s7c;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);St(b,0,new g7c(c))}return b} -function qVb(a){var b,c;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.f.$b()}LVb(a.b,a);rVb(a)} -function tb(a){return ND(a)?LCb(a):LD(a)?Hdb(a):KD(a)?(uCb(a),a)?1231:1237:ID(a)?a.Hb():MC(a)?FCb(a):rz(a)} -function rb(a){return ND(a)?ZI:LD(a)?BI:KD(a)?wI:ID(a)?a.gm:MC(a)?a.gm:a.gm||Array.isArray(a)&&GC(PH,1)||PH} -function j_c(a){switch(a.g){case 0:return new Q1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} -function S0c(a){switch(a.g){case 0:return new k1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} -function ekd(a,b,c){switch(b){case 0:!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0));cId(a.o,c);return;}yid(a,b,c)} -function XRc(a,b,c){this.g=a;this.e=new d7c;this.f=new d7c;this.d=new Psb;this.b=new Psb;this.a=b;this.c=c} -function PZc(a,b,c,d){this.b=new Rkb;this.n=new Rkb;this.i=d;this.j=c;this.s=a;this.t=b;this.r=0;this.d=0} -function nib(a){this.e=a;this.d=new Irb(this.e.g);this.a=this.d;this.b=kib(this);this.$modCount=a.$modCount} -function Pr(a){while(!a.d||!a.d.Ob()){if(!!a.b&&!akb(a.b)){a.d=BD(fkb(a.b),47)}else{return null}}return a.d} -function Xyc(a){Ekb(a.c,(Y1c(),W1c));if(Ky(a.a,Edb(ED(Ksd((dzc(),bzc)))))){return new Zed}return new _ed(a)} -function bRc(a){switch(a.g){case 1:return Sqe;default:case 2:return 0;case 3:return cme;case 4:return Tqe;}} -function Ife(){wfe();var a;if(dfe)return dfe;a=Afe(Kfe('M',true));a=Bfe(Kfe('M',false),a);dfe=a;return dfe} -function Awb(a,b){var c,d,e;e=a.b;while(e){c=a.a.ue(b,e.d);if(c==0){return e}d=c<0?0:1;e=e.a[d]}return null} -function Tyb(a,b,c){var d,e;d=(Bcb(),_Pb(c)?true:false);e=BD(b.xc(d),15);if(!e){e=new Rkb;b.zc(d,e)}e.Fc(c)} -function dYc(a,b){var c,d;c=BD(hkd(a,(lZc(),UYc)),19).a;d=BD(hkd(b,UYc),19).a;return c==d?-1:c<d?-1:c>d?1:0} -function NYb(a,b){if(OYb(a,b)){Rc(a.b,BD(vNb(b,(wtc(),Esc)),21),b);Dsb(a.a,b);return true}else{return false}} -function d3b(a){var b,c;b=BD(vNb(a,(wtc(),gtc)),10);if(b){c=b.c;Lkb(c.a,b);c.a.c.length==0&&Lkb(Q_b(b).b,c)}} -function syb(a){if(lyb){return KC(qL,tke,572,0,0,1)}return BD(Qkb(a.a,KC(qL,tke,572,a.a.c.length,0,1)),842)} -function mn(a,b,c,d){Vm();return new wx(OC(GC(CK,1),zie,42,0,[(Wj(a,b),new Wo(a,b)),(Wj(c,d),new Wo(c,d))]))} -function Dnd(a,b,c){var d,e;e=(d=new SSd,d);$nd(e,b,c);wtd((!a.q&&(a.q=new cUd(n5,a,11,10)),a.q),e);return e} -function Zmd(a){var b,c,d,e;e=icb(Rmd,a);c=e.length;d=KC(ZI,nie,2,c,6,1);for(b=0;b<c;++b){d[b]=e[b]}return d} -function l4c(a,b){var c,d,e,f,g;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=new v4c(a);c.Qe(g);q4c(g)}Uhb(a.f)} -function hw(a,b){var c;if(b===a){return true}if(JD(b,224)){c=BD(b,224);return pb(a.Zb(),c.Zb())}return false} -function aub(a,b){var c;if(b*2+1>=a.b.c.length){return}aub(a,2*b+1);c=2*b+2;c<a.b.c.length&&aub(a,c);bub(a,b)} -function Ss(a,b,c){var d,e;this.g=a;this.c=b;this.a=this;this.d=this;e=Kp(c);d=KC(BG,Gie,330,e,0,1);this.b=d} -function whb(a,b,c){var d;for(d=c-1;d>=0&&a[d]===b[d];d--);return d<0?0:Gbb(xbb(a[d],Yje),xbb(b[d],Yje))?-1:1} -function UFc(a,b){var c,d;for(d=Jsb(a,0);d.b!=d.d.c;){c=BD(Xsb(d),214);if(c.e.length>0){b.td(c);c.i&&_Fc(c)}}} -function nzd(a,b){var c,d;d=BD(Ajd(a.a,4),126);c=KC($3,hve,415,b,0,1);d!=null&&$fb(d,0,c,0,d.length);return c} -function JEd(a,b){var c;c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} -function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=BD(d.Pb(),14);if(c.Hc(b)){return true}}return false} -function oNb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(YMb(a,f,g)){return true}}}return false} -function Tt(a,b,c){var d,e,f,g;uCb(c);g=false;f=a.Zc(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} -function Dv(a,b){var c;if(a===b){return true}else if(JD(b,83)){c=BD(b,83);return Ax(Wm(a),c.vc())}return false} -function Nhb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=BD(e.Pb(),42);if(a.re(b,d.dd())){return true}}return false} -function Hic(a,b,c){if(!a.d[b.p][c.p]){Gic(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} -function Itd(a,b){if(!a.ai()&&b==null){throw vbb(new Wdb("The 'no null' constraint is violated"))}return b} -function $Jd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}jKd(a,b==null?null:(uCb(b),b));!!a.C&&a.yk(null)} -function XHc(a,b){var c;if(!a||a==b||!wNb(b,(wtc(),Psc))){return false}c=BD(vNb(b,(wtc(),Psc)),10);return c!=a} -function b4d(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.pl()}}} -function c4d(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a.ql()}}} -function Xdb(a){Zy.call(this,'The given string does not match the expected format for individual spacings.',a)} -function pgd(){pgd=ccb;mgd=new qgd('ELK',0);ngd=new qgd('JSON',1);lgd=new qgd('DOT',2);ogd=new qgd('SVG',3)} -function pWc(){pWc=ccb;mWc=new rWc(ane,0);nWc=new rWc('RADIAL_COMPACTION',1);oWc=new rWc('WEDGE_COMPACTION',2)} -function Fyb(){Fyb=ccb;Cyb=new Gyb('CONCURRENT',0);Dyb=new Gyb('IDENTITY_FINISH',1);Eyb=new Gyb('UNORDERED',2)} -function nPb(){nPb=ccb;kPb=(cPb(),bPb);jPb=new Nsd(Tle,kPb);iPb=new Lsd(Ule);lPb=new Lsd(Vle);mPb=new Lsd(Wle)} -function Occ(){Occ=ccb;Mcc=new Zcc;Ncc=new _cc;Lcc=new bdc;Kcc=new fdc;Jcc=new jdc;Icc=(uCb(Jcc),new bpb)} -function tBc(){tBc=ccb;qBc=new uBc('CONSERVATIVE',0);rBc=new uBc('CONSERVATIVE_SOFT',1);sBc=new uBc('SLOPPY',2)} -function Zad(){Zad=ccb;Xad=new q0b(15);Wad=new Osd((Y9c(),f9c),Xad);Yad=C9c;Sad=s8c;Tad=Y8c;Vad=_8c;Uad=$8c} -function o7c(a,b,c){var d,e,f;d=new Psb;for(f=Jsb(c,0);f.b!=f.d.c;){e=BD(Xsb(f),8);Dsb(d,new g7c(e))}Tt(a,b,d)} -function r7c(a){var b,c,d;b=0;d=KC(m1,nie,8,a.b,0,1);c=Jsb(a,0);while(c.b!=c.d.c){d[b++]=BD(Xsb(c),8)}return d} -function $Pd(a){var b;b=(!a.a&&(a.a=new cUd(g5,a,9,5)),a.a);if(b.i!=0){return nQd(BD(qud(b,0),678))}return null} -function Ly(a,b){var c;c=wbb(a,b);if(Gbb(Vbb(a,b),0)|Ebb(Vbb(a,c),0)){return c}return wbb(rie,Vbb(Pbb(c,63),1))} -function Yyc(a,b){var c;c=Ksd((dzc(),bzc))!=null&&b.wg()!=null?Edb(ED(b.wg()))/Edb(ED(Ksd(bzc))):1;Rhb(a.b,b,c)} -function le(a,b){var c,d;c=BD(a.d.Bc(b),14);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} -function AHc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c<a.a.length){a.a[c]-=d;c+=c&-c}} -function rwb(a){var b;b=a.a.c.length;if(b>0){return _vb(b-1,a.a.c.length),Kkb(a.a,b-1)}else{throw vbb(new Jpb)}} -function C2c(a,b,c){if(b<0){throw vbb(new qcb(ese+b))}if(b<a.j.c.length){Nkb(a.j,b,c)}else{A2c(a,b);Ekb(a.j,c)}} -function oCb(a,b,c){if(a>b){throw vbb(new Wdb(xke+a+yke+b))}if(a<0||b>c){throw vbb(new scb(xke+a+zke+b+oke+c))}} -function j5c(a){if(!a.a||(a.a.i&8)==0){throw vbb(new Zdb('Enumeration class expected for layout option '+a.f))}} -function vud(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i<a.g.length){b=a.g;a.g=a.ri(a.i);$fb(b,0,a.g,0,a.i)}} -function hkb(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;NC(a.a,b,a.a[d]);b=d}NC(a.a,a.c,null)} -function ikb(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;NC(a.a,b,a.a[d]);b=d}NC(a.a,a.b,null);a.b=a.b+1&c} -function Fkb(a,b,c){var d,e;wCb(b,a.c.length);d=c.Pc();e=d.length;if(e==0){return false}bCb(a.c,b,d);return true} -function VEd(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b<c;b++){if(!gFd(a[b]))return a[b]}return null} -function grb(a,b,c){var d,e,f,g;for(e=c,f=0,g=e.length;f<g;++f){d=e[f];if(a.b.re(b,d.cd())){return d}}return null} -function Hlb(a){var b,c,d,e,f;f=1;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=31*f+(b!=null?tb(b):0);f=f|0}return f} -function as(a){var b,c,d,e,f;b={};for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b[':'+(c.f!=null?c.f:''+c.g)]=c}return b} -function gr(a){var b;Qb(a);Mb(true,'numberToAdvance must be nonnegative');for(b=0;b<0&&Qr(a);b++){Rr(a)}return b} -function eDc(a){var b,c,d;d=0;for(c=new Sr(ur(a.a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);b.c.i==b.d.i||++d}return d} -function HZb(a,b){var c,d,e;c=a;e=0;do{if(c==b){return e}d=c.e;if(!d){throw vbb(new Vdb)}c=Q_b(d);++e}while(true)} -function w$c(a,b){var c,d,e;e=b-a.f;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),443);_Zc(c,c.e,c.f+e)}a.f=b} -function aRc(a,b,c){if($wnd.Math.abs(b-a)<Rqe||$wnd.Math.abs(c-a)<Rqe){return true}return b-a>Rqe?a-c>Rqe:c-a>Rqe} -function pHb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(JD(a,124)){if(BD(a,124).a.b==0){return 0}}return a.Re()} -function qHb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(JD(a,124)){if(BD(a,124).a.a==0){return 0}}return a.Se()} -function fhb(a){Hgb();if(a<0){if(a!=-1){return new Tgb(-1,-a)}return Bgb}else return a<=10?Dgb[QD(a)]:new Tgb(1,a)} -function xC(a){rC();throw vbb(new MB("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} -function lz(a){jz();Py(this);Ry(this);this.e=a;Sy(this,a);this.g=a==null?Xhe:fcb(a);this.a='';this.b=a;this.a=''} -function F$c(){this.a=new G$c;this.f=new I$c(this);this.b=new K$c(this);this.i=new M$c(this);this.e=new O$c(this)} -function ss(){rs.call(this,new _rb(Cv(16)));Xj(2,mie);this.b=2;this.a=new Ms(null,null,0,null);As(this.a,this.a)} -function xzc(){xzc=ccb;uzc=new zzc('DUMMY_NODE_OVER',0);vzc=new zzc('DUMMY_NODE_UNDER',1);wzc=new zzc('EQUAL',2)} -function LUb(){LUb=ccb;JUb=Fx(OC(GC(t1,1),Kie,103,0,[(ead(),aad),bad]));KUb=Fx(OC(GC(t1,1),Kie,103,0,[dad,_9c]))} -function VQc(a){return (Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b} -function DOb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=BD(c.Pb(),561);e=new MPb(b,a.e,a.f);Ekb(a.g,e)}} -function yId(a,b){var c,d,e;d=a.nk(b,null);e=null;if(b){e=(LFd(),c=new UQd,c);NQd(e,a.r)}d=xId(a,e,d);!!d&&d.Fi()} -function VFc(a,b){var c,d;d=Cub(a.d,1)!=0;c=true;while(c){c=false;c=b.c.Tf(b.e,d);c=c|dGc(a,b,d,false);d=!d}$Fc(a)} -function wZc(a,b){var c,d,e;d=false;c=b.q.d;if(b.d<a.b){e=ZZc(b.q,a.b);if(b.q.d>e){$Zc(b.q,e);d=c!=b.q.d}}return d} -function PVc(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} -function Rnd(a,b){var c,d;d=jid(a);if(!d){!And&&(And=new lUd);c=(IEd(),PEd(b));d=new s0d(c);wtd(d.Vk(),a)}return d} -function Sc(a,b){var c,d;c=BD(a.c.Bc(b),14);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} -function j7c(a,b){var c;for(c=0;c<b.length;c++){if(a==(BCb(c,b.length),b.charCodeAt(c))){return true}}return false} -function E_b(a,b){var c;for(c=0;c<b.length;c++){if(a==(BCb(c,b.length),b.charCodeAt(c))){return true}}return false} -function hFd(a){var b,c;if(a==null)return false;for(b=0,c=a.length;b<c;b++){if(!gFd(a[b]))return false}return true} -function Ngb(a){var b;if(a.c!=0){return a.c}for(b=0;b<a.a.length;b++){a.c=a.c*33+(a.a[b]&-1)}a.c=a.c*a.e;return a.c} -function vkb(a){var b;sCb(a.a!=a.b);b=a.d.a[a.a];mkb(a.b==a.d.c&&b!=null);a.c=a.a;a.a=a.a+1&a.d.a.length-1;return b} -function phe(a){var b;if(!(a.c.c<0?a.a>=a.c.b:a.a<=a.c.b)){throw vbb(new utb)}b=a.a;a.a+=a.c.c;++a.b;return meb(b)} -function BWb(a){var b;b=new VWb(a);rXb(a.a,zWb,new amb(OC(GC(bQ,1),Uhe,369,0,[b])));!!b.d&&Ekb(b.f,b.d);return b.f} -function Z1b(a){var b;b=new q_b(a.a);tNb(b,a);yNb(b,(wtc(),$sc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} -function A9b(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=BD(f.Pb(),70);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} -function UDb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);if(VDb(a,d,c)){return true}}return false} -function JDc(a){var b,c;for(c=new olb(a.r);c.a<c.c.c.length;){b=BD(mlb(c),10);if(a.n[b.p]<=0){return b}}return null} -function cVc(a){var b,c,d,e;e=new Tqb;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),33);b=fVc(c);ye(e,b)}return e} -function zFc(a){var b;b=k3c(xFc);BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Krc))&&e3c(b,(qUb(),nUb),(S8b(),H8b));return b} -function qKb(a,b,c){var d;d=new AJb(a,b);Rc(a.r,b.Hf(),d);if(c&&!tcd(a.u)){d.c=new aIb(a.d);Hkb(b.wf(),new tKb(d))}} -function ybb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(!isNaN(c)){return c}}return eD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b)} -function bFd(a,b){return b<a.length&&(BCb(b,a.length),a.charCodeAt(b)!=63)&&(BCb(b,a.length),a.charCodeAt(b)!=35)} -function Kic(a,b,c,d){var e,f;a.a=b;f=d?0:1;a.f=(e=new Iic(a.c,a.a,c,f),new jjc(c,a.a,e,a.e,a.b,a.c==(rGc(),pGc)))} -function Tmd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,1,e,b);!c?(c=d):c.Ei(d)}return c} -function GQd(a,b,c){var d,e;e=a.b;a.b=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,3,e,b);!c?(c=d):c.Ei(d)}return c} -function IQd(a,b,c){var d,e;e=a.f;a.f=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,0,e,b);!c?(c=d):c.Ei(d)}return c} -function xid(a,b){var c,d,e,f;f=(e=a?jid(a):null,q6d((d=b,e?e.Xk():null,d)));if(f==b){c=jid(a);!!c&&c.Xk()}return f} -function x6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} -function y6c(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} -function sAd(a){var b,c,d,e;if(a!=null){for(c=0;c<a.length;++c){b=a[c];if(b){BD(b.g,367);e=b.i;for(d=0;d<e;++d);}}}} -function YZc(a){var b,c,d;d=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);d=$wnd.Math.max(d,b.g)}return d} -function eGc(a){var b,c,d;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),214);b=c.c.Rf()?c.f:c.a;!!b&&mHc(b,c.j)}} -function hbd(){hbd=ccb;fbd=new ibd('INHERIT',0);ebd=new ibd('INCLUDE_CHILDREN',1);gbd=new ibd('SEPARATE_CHILDREN',2)} -function Jkd(a,b){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);return;case 2:Lkd(a,null);return;}fkd(a,b)} -function Dm(a){var b;switch(a.gc()){case 0:return hm;case 1:return new my(Qb(a.Xb(0)));default:b=a;return new ux(b);}} -function Vn(a){Ql();switch(a.gc()){case 0:return yx(),xx;case 1:return new oy(a.Kc().Pb());default:return new zx(a);}} -function Up(a){Ql();switch(a.c){case 0:return yx(),xx;case 1:return new oy(qr(new Gqb(a)));default:return new Tp(a);}} -function Hv(b,c){Qb(b);try{return b.xc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return null}else throw vbb(a)}} -function Iv(b,c){Qb(b);try{return b.Bc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return null}else throw vbb(a)}} -function Ck(b,c){Qb(b);try{return b.Hc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} -function Dk(b,c){Qb(b);try{return b.Mc(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} -function Gv(b,c){Qb(b);try{return b._b(c)}catch(a){a=ubb(a);if(JD(a,205)||JD(a,173)){return false}else throw vbb(a)}} -function KXb(a,b){var c;if(a.a.c.length>0){c=BD(Ikb(a.a,a.a.c.length-1),570);if(NYb(c,b)){return}}Ekb(a.a,new PYb(b))} -function $gc(a){Hgc();var b,c;b=a.d.c-a.e.c;c=BD(a.g,145);Hkb(c.b,new shc(b));Hkb(c.c,new uhc(b));reb(c.i,new whc(b))} -function gic(a){var b;b=new Ufb;b.a+='VerticalSegment ';Pfb(b,a.e);b.a+=' ';Qfb(b,Eb(new Gb,new olb(a.k)));return b.a} -function u4c(a){var b;b=BD(Wrb(a.c.c,''),229);if(!b){b=new W3c(d4c(c4c(new e4c,''),'Other'));Xrb(a.c.c,'',b)}return b} -function qnd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (name: ';Efb(b,a.zb);b.a+=')';return b.a} -function Jnd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}return c} -function _ic(a,b){var c,d,e;c=0;for(e=V_b(a,b).Kc();e.Ob();){d=BD(e.Pb(),11);c+=vNb(d,(wtc(),gtc))!=null?1:0}return c} -function vPc(a,b,c){var d,e,f;d=0;for(f=Jsb(a,0);f.b!=f.d.c;){e=Edb(ED(Xsb(f)));if(e>c){break}else e>=b&&++d}return d} -function RTd(a,b,c){var d,e;d=new pSd(a.e,3,13,null,(e=b.c,e?e:(jGd(),YFd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} -function STd(a,b,c){var d,e;d=new pSd(a.e,4,13,(e=b.c,e?e:(jGd(),YFd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} -function zId(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,8,e,a.r);!c?(c=d):c.Ei(d)}return c} -function o1d(a,b){var c,d;c=BD(b,676);d=c.vk();!d&&c.wk(d=JD(b,88)?new C1d(a,BD(b,26)):new O1d(a,BD(b,148)));return d} -function kud(a,b,c){var d;a.qi(a.i+1);d=a.oi(b,c);b!=a.i&&$fb(a.g,b,a.g,b+1,a.i-b);NC(a.g,b,d);++a.i;a.bi(b,c);a.ci()} -function vwb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new Wfb(a.d)):Qfb(a.a,a.b);Ofb(a.a,b.a,b.d.length,c)}return a} -function __d(a,b){var c,d,e,f;b.vi(a.a);f=BD(Ajd(a.a,8),1936);if(f!=null){for(c=f,d=0,e=c.length;d<e;++d){null.jm()}}} -function TAb(a,b){var c;c=new NBb;if(!a.a.sd(c)){Tzb(a);return Atb(),Atb(),ztb}return Atb(),new Ftb(uCb(SAb(a,c.a,b)))} -function CHc(a,b){switch(b.g){case 2:case 1:return V_b(a,b);case 3:case 4:return Su(V_b(a,b));}return mmb(),mmb(),jmb} -function pb(a,b){return ND(a)?dfb(a,b):LD(a)?Fdb(a,b):KD(a)?(uCb(a),PD(a)===PD(b)):ID(a)?a.Fb(b):MC(a)?mb(a,b):qz(a,b)} -function r6d(a){return !a?null:(a.i&1)!=0?a==sbb?wI:a==WD?JI:a==VD?FI:a==UD?BI:a==XD?MI:a==rbb?UI:a==SD?xI:yI:a} -function Fhb(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=Hhb(e,c,d,a[0])):d==1?(e[b]=Hhb(e,a,b,c[0])):Ghb(a,c,e,b,d)} -function c6b(a,b){var c;if(a.c.length==0){return}c=BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193);Nlb(c,new o6b);_5b(c,b)} -function i6b(a,b){var c;if(a.c.length==0){return}c=BD(Qkb(a,KC(OQ,kne,10,a.c.length,0,1)),193);Nlb(c,new t6b);_5b(c,b)} -function Ekd(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new cUd(D2,a,1,7)),a.n;case 2:return a.k;}return bkd(a,b,c,d)} -function ead(){ead=ccb;cad=new iad(ole,0);bad=new iad(kle,1);aad=new iad(jle,2);_9c=new iad(vle,3);dad=new iad('UP',4)} -function RXb(){RXb=ccb;QXb=new SXb(ane,0);PXb=new SXb('INSIDE_PORT_SIDE_GROUPS',1);OXb=new SXb('FORCE_MODEL_ORDER',2)} -function xCb(a,b,c){if(a<0||b>c){throw vbb(new qcb(xke+a+zke+b+', size: '+c))}if(a>b){throw vbb(new Wdb(xke+a+yke+b))}} -function eid(a,b,c){if(b<0){vid(a,c)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Vj(a,a.yh(),b)}} -function Jlb(a,b,c,d,e,f,g,h){var i;i=c;while(f<g){i>=d||b<c&&h.ue(a[b],a[i])<=0?NC(e,f++,a[b++]):NC(e,f++,a[i++])}} -function yZb(a,b,c,d,e,f){this.e=new Rkb;this.f=(KAc(),JAc);Ekb(this.e,a);this.d=b;this.a=c;this.b=d;this.f=e;this.c=f} -function VOd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),26);if(PD(b)===PD(c)){return true}}return false} -function uJb(a){qJb();var b,c,d,e;for(c=wJb(),d=0,e=c.length;d<e;++d){b=c[d];if(Jkb(b.a,a,0)!=-1){return b}}return pJb} -function jFd(a){if(a>=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} -function QHd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (source: ';Efb(b,a.d);b.a+=')';return b.a} -function OQd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,5,e,a.a);!c?(c=d):Qwd(c,d)}return c} -function BId(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,2,c,b))} -function eLd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} -function LPd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,8,c,b))} -function CId(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,3,c,b))} -function fLd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,9,c,b))} -function N7d(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.Gj();a.b=!c?bLd(a.c.Tg(),a.a):a.c.Xg(a.a.aj(),c)}return a.c.Og(a.b,b)} -function meb(a){var b,c;if(a>-129&&a<128){b=a+128;c=(oeb(),neb)[b];!c&&(c=neb[b]=new _db(a));return c}return new _db(a)} -function Web(a){var b,c;if(a>-129&&a<128){b=a+128;c=(Yeb(),Xeb)[b];!c&&(c=Xeb[b]=new Qeb(a));return c}return new Qeb(a)} -function L5b(a){var b,c;b=a.k;if(b==(j0b(),e0b)){c=BD(vNb(a,(wtc(),Hsc)),61);return c==(Ucd(),Acd)||c==Rcd}return false} -function i1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return r1d(a,d,b,c)}}return null} -function l1d(a,b,c){var d,e,f;f=(e=nUd(a.b,b),e);if(f){d=BD(V1d(p1d(a,f),''),26);if(d){return s1d(a,d,b,c)}}return null} -function cTd(a,b){var c,d;for(d=new Fyd(a);d.e!=d.i.gc();){c=BD(Dyd(d),138);if(PD(b)===PD(c)){return true}}return false} -function vtd(a,b,c){var d;d=a.gc();if(b>d)throw vbb(new Cyd(b,d));if(a.hi()&&a.Hc(c)){throw vbb(new Wdb(kue))}a.Xh(b,c)} -function iqd(a,b){var c;c=oo(a.i,b);if(c==null){throw vbb(new cqd('Node did not exist in input.'))}Yqd(b,c);return null} -function $hd(a,b){var c;c=YKd(a,b);if(JD(c,322)){return BD(c,34)}throw vbb(new Wdb(ite+b+"' is not a valid attribute"))} -function V2d(a,b,c){var d,e;e=JD(b,99)&&(BD(b,18).Bb&Tje)!=0?new s4d(b,a):new p4d(b,a);for(d=0;d<c;++d){d4d(e)}return e} -function ede(a){var b,c,d;d=0;c=a.length;for(b=0;b<c;b++){a[b]==32||a[b]==13||a[b]==10||a[b]==9||(a[d++]=a[b])}return d} -function lYb(a){var b,c,d;b=new Rkb;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),594);Gkb(b,BD(c.jf(),14))}return b} -function SSc(a){var b,c,d;b=BD(vNb(a,(mTc(),gTc)),15);for(d=b.Kc();d.Ob();){c=BD(d.Pb(),188);Dsb(c.b.d,c);Dsb(c.c.b,c)}} -function b5b(a){switch(BD(vNb(a,(wtc(),Osc)),303).g){case 1:yNb(a,Osc,(esc(),bsc));break;case 2:yNb(a,Osc,(esc(),dsc));}} -function _Fc(a){var b;if(a.g){b=a.c.Rf()?a.f:a.a;bGc(b.a,a.o,true);bGc(b.a,a.o,false);yNb(a.o,(Nyc(),Vxc),(dcd(),Zbd))}} -function loc(a){var b;if(!a.a){throw vbb(new Zdb('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;noc(a,b);ooc(a,b)} -function ckb(a){var b;b=a.a[a.c-1&a.a.length-1];if(b==null){return null}a.c=a.c-1&a.a.length-1;NC(a.a,a.c,null);return b} -function zGb(a){var b,c;for(c=a.p.a.ec().Kc();c.Ob();){b=BD(c.Pb(),213);if(b.f&&a.b[b.c]<-1.0E-10){return b}}return null} -function bLb(a,b){switch(a.b.g){case 0:case 1:return b;case 2:case 3:return new J6c(b.d,0,b.a,b.b);default:return null;}} -function had(a){switch(a.g){case 2:return bad;case 1:return aad;case 4:return _9c;case 3:return dad;default:return cad;}} -function Vcd(a){switch(a.g){case 1:return Tcd;case 2:return Acd;case 3:return zcd;case 4:return Rcd;default:return Scd;}} -function Wcd(a){switch(a.g){case 1:return Rcd;case 2:return Tcd;case 3:return Acd;case 4:return zcd;default:return Scd;}} -function Xcd(a){switch(a.g){case 1:return zcd;case 2:return Rcd;case 3:return Tcd;case 4:return Acd;default:return Scd;}} -function DPc(a){switch(a){case 0:return new OPc;case 1:return new EPc;case 2:return new JPc;default:throw vbb(new Vdb);}} -function Kdb(a,b){if(a<b){return -1}if(a>b){return 1}if(a==b){return a==0?Kdb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} -function f4b(a,b){Odd(b,'Sort end labels',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new q4b),new s4b),new u4b);Qdd(b)} -function Wxd(a,b,c){var d,e;if(a.ej()){e=a.fj();d=sud(a,b,c);a.$i(a.Zi(7,meb(c),d,b,e));return d}else{return sud(a,b,c)}} -function vAd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.cd();c=b.Sh();d=(c&Ohe)%a.d.length;KAd(a,d,xAd(a,d,c,e))}} -function ZId(a,b){var c;c=(a.Bb&zte)!=0;b?(a.Bb|=zte):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,10,c,b))} -function dJd(a,b){var c;c=(a.Bb&Rje)!=0;b?(a.Bb|=Rje):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,12,c,b))} -function eJd(a,b){var c;c=(a.Bb&Cve)!=0;b?(a.Bb|=Cve):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,15,c,b))} -function fJd(a,b){var c;c=(a.Bb&Dve)!=0;b?(a.Bb|=Dve):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,11,c,b))} -function jOb(a,b){var c;c=Kdb(a.b.c,b.b.c);if(c!=0){return c}c=Kdb(a.a.a,b.a.a);if(c!=0){return c}return Kdb(a.a.b,b.a.b)} -function jqd(a,b){var c;c=Ohb(a.k,b);if(c==null){throw vbb(new cqd('Port did not exist in input.'))}Yqd(b,c);return null} -function k6d(a){var b,c;for(c=l6d(bKd(a)).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b)){return uFd((tFd(),sFd),b)}}return null} -function n3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=0;c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];g.rl(d.ak())&&++f}return f} -function Vsd(a,b,c){var d,e;d=BD(b.We(a.a),35);e=BD(c.We(a.a),35);return d!=null&&e!=null?Fcb(d,e):d!=null?-1:e!=null?1:0} -function ved(a,b,c){var d,e;if(a.c){Efd(a.c,b,c)}else{for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),157);ved(d,b,c)}}} -function RUb(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),46);Lkb(a.b.b,c.b);fVb(BD(c.a,189),BD(c.b,81))}} -function tr(a){var b,c;c=Kfb(new Ufb,91);b=true;while(a.Ob()){b||(c.a+=She,c);b=false;Pfb(c,a.Pb())}return (c.a+=']',c).a} -function aJd(a,b){var c;c=(a.Bb&oie)!=0;b?(a.Bb|=oie):(a.Bb&=-16385);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,16,c,b))} -function MJd(a,b){var c;c=(a.Bb&ote)!=0;b?(a.Bb|=ote):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,18,c,b))} -function CUd(a,b){var c;c=(a.Bb&ote)!=0;b?(a.Bb|=ote):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,18,c,b))} -function EUd(a,b){var c;c=(a.Bb&Tje)!=0;b?(a.Bb|=Tje):(a.Bb&=-65537);(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new qSd(a,1,20,c,b))} -function Tee(a){var b;b=KC(TD,$ie,25,2,15,1);a-=Tje;b[0]=(a>>10)+Uje&aje;b[1]=(a&1023)+56320&aje;return zfb(b,0,b.length)} -function a_b(a){var b,c;c=BD(vNb(a,(Nyc(),Lwc)),103);if(c==(ead(),cad)){b=Edb(ED(vNb(a,owc)));return b>=1?bad:_9c}return c} -function rec(a){switch(BD(vNb(a,(Nyc(),Swc)),218).g){case 1:return new Fmc;case 3:return new wnc;default:return new zmc;}} -function Uzb(a){if(a.c){Uzb(a.c)}else if(a.d){throw vbb(new Zdb("Stream already terminated, can't be modified or used"))}} -function Mkd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (identifier: ';Efb(b,a.k);b.a+=')';return b.a} -function ctd(a,b,c){var d,e;d=(Fhd(),e=new xkd,e);vkd(d,b);wkd(d,c);!!a&&wtd((!a.a&&(a.a=new xMd(y2,a,5)),a.a),d);return d} -function ttb(a,b,c,d){var e,f;uCb(d);uCb(c);e=a.xc(b);f=e==null?c:Myb(BD(e,15),BD(c,14));f==null?a.Bc(b):a.zc(b,f);return f} -function pqb(a){var b,c,d,e;c=(b=BD(gdb((d=a.gm,e=d.f,e==CI?d:e)),9),new xqb(b,BD(_Bb(b,b.length),9),0));rqb(c,a);return c} -function hDc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),10);if(Be(c,BD(Ikb(b,d.p),14))){return d}}return null} -function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=ubb(a);if(JD(a,597)){e=a;throw vbb(new ycb(e))}else throw vbb(a)}return c} -function Qbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a-b;if(Kje<c&&c<Ije){return c}}return zbb(nD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} -function wbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a+b;if(Kje<c&&c<Ije){return c}}return zbb(cD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} -function Ibb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a*b;if(Kje<c&&c<Ije){return c}}return zbb(gD(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b))} -function V_b(a,b){var c;a.i||N_b(a);c=BD(Mpb(a.g,b),46);return !c?(mmb(),mmb(),jmb):new Jib(a.j,BD(c.a,19).a,BD(c.b,19).a)} -function Drb(a,b,c){var d;d=a.a.get(b);a.a.set(b,c===undefined?null:c);if(d===undefined){++a.c;zpb(a.b)}else{++a.d}return d} -function kNb(a,b,c){a.n=IC(XD,[nie,Sje],[364,25],14,[c,QD($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} -function Gub(){zub();var a,b,c;c=yub+++Date.now();a=QD($wnd.Math.floor(c*lke))&nke;b=QD(c-a*mke);this.a=a^1502;this.b=b^kke} -function O_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.b)}return Qb(b),new sl(b)} -function R_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.e)}return Qb(b),new sl(b)} -function U_b(a){var b,c,d;b=new Rkb;for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),11);Ekb(b,c.g)}return Qb(b),new sl(b)} -function n6d(a){var b,c;for(c=o6d(bKd(WId(a))).Kc();c.Ob();){b=GD(c.Pb());if(Dmd(a,b))return FFd((EFd(),DFd),b)}return null} -function wm(a){var b,c,d;for(c=0,d=a.length;c<d;c++){if(a[c]==null){throw vbb(new Heb('at index '+c))}}b=a;return new amb(b)} -function wid(a,b){var c;c=YKd(a.Tg(),b);if(JD(c,99)){return BD(c,18)}throw vbb(new Wdb(ite+b+"' is not a valid reference"))} -function Tdb(a){var b;b=Hcb(a);if(b>3.4028234663852886E38){return Pje}else if(b<-3.4028234663852886E38){return Qje}return b} -function aeb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} -function Ev(a){var b,c,d,e;b=new cq(a.Hd().gc());e=0;for(d=vr(a.Hd().Kc());d.Ob();){c=d.Pb();bq(b,c,meb(e++))}return fn(b.a)} -function Uyb(a,b){var c,d,e;e=new Lqb;for(d=b.vc().Kc();d.Ob();){c=BD(d.Pb(),42);Rhb(e,c.cd(),Yyb(a,BD(c.dd(),15)))}return e} -function EZc(a,b){a.n.c.length==0&&Ekb(a.n,new VZc(a.s,a.t,a.i));Ekb(a.b,b);QZc(BD(Ikb(a.n,a.n.c.length-1),211),b);GZc(a,b)} -function LFb(a){if(a.c!=a.b.b||a.i!=a.g.b){a.a.c=KC(SI,Uhe,1,0,5,1);Gkb(a.a,a.b);Gkb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} -function Ycc(a,b){var c,d,e;e=0;for(d=BD(b.Kb(a),20).Kc();d.Ob();){c=BD(d.Pb(),17);Ccb(DD(vNb(c,(wtc(),ltc))))||++e}return e} -function efc(a,b){var c,d,e;d=tgc(b);e=Edb(ED(pBc(d,(Nyc(),lyc))));c=$wnd.Math.max(0,e/2-0.5);cfc(b,c,1);Ekb(a,new Dfc(b,c))} -function Ctc(){Ctc=ccb;Btc=new Dtc(ane,0);xtc=new Dtc('FIRST',1);ytc=new Dtc(Gne,2);ztc=new Dtc('LAST',3);Atc=new Dtc(Hne,4)} -function Aad(){Aad=ccb;zad=new Bad(ole,0);xad=new Bad('POLYLINE',1);wad=new Bad('ORTHOGONAL',2);yad=new Bad('SPLINES',3)} -function zYc(){zYc=ccb;xYc=new AYc('ASPECT_RATIO_DRIVEN',0);yYc=new AYc('MAX_SCALE_DRIVEN',1);wYc=new AYc('AREA_DRIVEN',2)} -function Y$c(){Y$c=ccb;V$c=new Z$c('P1_STRUCTURE',0);W$c=new Z$c('P2_PROCESSING_ORDER',1);X$c=new Z$c('P3_EXECUTION',2)} -function tVc(){tVc=ccb;sVc=new uVc('OVERLAP_REMOVAL',0);qVc=new uVc('COMPACTION',1);rVc=new uVc('GRAPH_SIZE_CALCULATION',2)} -function Jy(a,b){Iy();return My(Qie),$wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b))} -function yOc(a,b){var c,d;c=Jsb(a,0);while(c.b!=c.d.c){d=Gdb(ED(Xsb(c)));if(d==b){return}else if(d>b){Ysb(c);break}}Vsb(c,b)} -function t4c(a,b){var c,d,e,f,g;c=b.f;Xrb(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;f<g;++f){d=e[f];Xrb(a.c.e,d,b)}}} -function Ilb(a,b,c,d){var e,f,g;for(e=b+1;e<c;++e){for(f=e;f>b&&d.ue(a[f-1],a[f])>0;--f){g=a[f];NC(a,f,a[f-1]);NC(a,f-1,g)}}} -function did(a,b,c,d){if(b<0){uid(a,c,d)}else{if(!c.Ij()){throw vbb(new Wdb(ite+c.ne()+jte))}BD(c,66).Nj().Tj(a,a.yh(),b,d)}} -function xFb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw vbb(new Wdb('Node '+b+' not part of edge '+a))}} -function iEb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} -function GVb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} -function Xkd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return Ekd(a,b,c,d)} -function Ljc(a){if(a.k!=(j0b(),h0b)){return false}return FAb(new YAb(null,new Lub(new Sr(ur(U_b(a).a.Kc(),new Sq)))),new Mjc)} -function MEd(a){if(a.e==null){return a}else !a.c&&(a.c=new NEd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} -function VC(a,b){if(a.h==Gje&&a.m==0&&a.l==0){b&&(QC=TC(0,0,0));return SC((wD(),uD))}b&&(QC=TC(a.l,a.m,a.h));return TC(0,0,0)} -function fcb(a){var b;if(Array.isArray(a)&&a.im===gcb){return hdb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} -function Rpb(a){var b;this.a=(b=BD(a.e&&a.e(),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.b=KC(SI,Uhe,1,this.a.a.length,5,1)} -function _Ob(a){var b,c,d;this.a=new zsb;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),14);b=new MOb;GOb(b,c);Qqb(this.a,b)}} -function cKb(a){$Jb();var b,c,d,e;b=a.o.b;for(d=BD(BD(Qc(a.r,(Ucd(),Rcd)),21),84).Kc();d.Ob();){c=BD(d.Pb(),111);e=c.e;e.b+=b}} -function ag(a){var b;if(a.b){ag(a.b);if(a.b.d!=a.c){throw vbb(new Apb)}}else if(a.d.dc()){b=BD(a.f.c.xc(a.e),14);!!b&&(a.d=b)}} -function fFd(a){var b;if(a==null)return true;b=a.length;return b>0&&(BCb(b-1,a.length),a.charCodeAt(b-1)==58)&&!OEd(a,CEd,DEd)} -function OEd(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++){if(_Ed((BCb(d,a.length),a.charCodeAt(d)),b,c))return true}return false} -function JOb(a,b){var c,d;for(d=a.e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),266);if(t6c(b,c.d)||o6c(b,c.d)){return true}}return false} -function Q9b(a,b){var c,d,e;d=N9b(a,b);e=d[d.length-1]/2;for(c=0;c<d.length;c++){if(d[c]>=e){return b.c+c}}return b.c+b.b.gc()} -function NCd(a,b){LCd();var c,d,e,f;d=KLd(a);e=b;Klb(d,0,d.length,e);for(c=0;c<d.length;c++){f=MCd(a,d[c],c);c!=f&&Wxd(a,c,f)}} -function EHb(a,b){var c,d,e,f,g,h;d=0;c=0;for(f=b,g=0,h=f.length;g<h;++g){e=f[g];if(e>0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} -function Htd(a){var b,c,d;d=new Hfb;d.a+='[';for(b=0,c=a.gc();b<c;){Efb(d,xfb(a.ki(b)));++b<c&&(d.a+=She,d)}d.a+=']';return d.a} -function fsd(a){var b,c,d,e,f;f=hsd(a);c=Fhe(a.c);d=!c;if(d){e=new wB;cC(f,'knownLayouters',e);b=new qsd(e);reb(a.c,b)}return f} -function Ce(a,b){var c,d,e;uCb(b);c=false;for(d=new olb(a);d.a<d.c.c.length;){e=mlb(d);if(ze(b,e,false)){nlb(d);c=true}}return c} -function UGb(a){var b,c,d;d=Edb(ED(a.a.We((Y9c(),Q9c))));for(c=new olb(a.a.xf());c.a<c.c.c.length;){b=BD(mlb(c),680);XGb(a,b,d)}} -function MUb(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),46);Ekb(a.b.b,BD(c.b,81));eVb(BD(c.a,189),BD(c.b,81))}} -function XCc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Dkb(e,0,new H1b(a.a))}$_b(b,BD(Ikb(e,e.c.length-c),29));a.b[b.p]=c} -function JTb(a,b,c){var d;d=c;!d&&(d=Ydd(new Zdd,0));Odd(d,Vme,2);qZb(a.b,b,Udd(d,1));LTb(a,b,Udd(d,1));_Yb(b,Udd(d,1));Qdd(d)} -function eKc(a,b,c,d,e){FJc();AFb(DFb(CFb(BFb(EFb(new FFb,0),e.d.e-a),b),e.d));AFb(DFb(CFb(BFb(EFb(new FFb,0),c-e.a.e),e.a),d))} -function e$c(a,b,c,d,e,f){this.a=a;this.c=b;this.b=c;this.f=d;this.d=e;this.e=f;this.c>0&&this.b>0&&q$c(this.c,this.b,this.a)} -function ezc(a){dzc();this.c=Ou(OC(GC(h0,1),Uhe,831,0,[Uyc]));this.b=new Lqb;this.a=a;Rhb(this.b,bzc,1);Hkb(czc,new Xed(this))} -function I2c(a,b){var c;if(a.d){if(Mhb(a.b,b)){return BD(Ohb(a.b,b),51)}else{c=b.Kf();Rhb(a.b,b,c);return c}}else{return b.Kf()}} -function Kgb(a,b){var c;if(PD(a)===PD(b)){return true}if(JD(b,91)){c=BD(b,91);return a.e==c.e&&a.d==c.d&&Lgb(a,c.a)}return false} -function Zcd(a){Ucd();switch(a.g){case 4:return Acd;case 1:return zcd;case 3:return Rcd;case 2:return Tcd;default:return Scd;}} -function Ykd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return Hkd(a,b)} -function gWc(a){switch(a.g){case 0:return new FXc;case 1:return new IXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} -function QUc(a){switch(a.g){case 0:return new CXc;case 1:return new MXc;default:throw vbb(new Wdb(Dne+(a.f!=null?a.f:''+a.g)));}} -function b1c(a){switch(a.g){case 0:return new s1c;case 1:return new w1c;default:throw vbb(new Wdb(Mre+(a.f!=null?a.f:''+a.g)));}} -function qWc(a){switch(a.g){case 1:return new SVc;case 2:return new KVc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} -function ryb(a){var b,c;if(a.b){return a.b}c=lyb?null:a.d;while(c){b=lyb?null:c.b;if(b){return b}c=lyb?null:c.d}return $xb(),Zxb} -function hhb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Mgb(a);if(d==a.d-1){--c;c=c|0}}b-=heb(c);return b} -function bhb(a){var b,c,d;if(a<Fgb.length){return Fgb[a]}c=a>>5;b=a&31;d=KC(WD,oje,25,c+1,15,1);d[c]=1<<b;return new Vgb(1,c+1,d)} -function O2b(a){var b,c,d;c=a.zg();if(c){b=a.Ug();if(JD(b,160)){d=O2b(BD(b,160));if(d!=null){return d+'.'+c}}return c}return null} -function ze(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=e.Pb();if(PD(b)===PD(d)||b!=null&&pb(b,d)){c&&e.Qb();return true}}return false} -function zvd(a,b,c){var d,e;++a.j;if(c.dc()){return false}else{for(e=c.Kc();e.Ob();){d=e.Pb();a.Hi(b,a.oi(b,d));++b}return true}} -function yA(a,b,c,d){var e,f;f=c-b;if(f<3){while(f<3){a*=10;++f}}else{e=1;while(f>3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} -function XUb(a){LUb();return Bcb(),GVb(BD(a.a,81).j,BD(a.b,103))||BD(a.a,81).d.e!=0&&GVb(BD(a.a,81).j,BD(a.b,103))?true:false} -function s3c(a){p3c();if(BD(a.We((Y9c(),b9c)),174).Hc((Idd(),Gdd))){BD(a.We(x9c),174).Fc((rcd(),qcd));BD(a.We(b9c),174).Mc(Gdd)}} -function Gxd(a,b){var c,d;if(!b){return false}else{for(c=0;c<a.i;++c){d=BD(a.g[c],366);if(d.Di(b)){return false}}return wtd(a,b)}} -function pvd(a){var b,c,d,e;b=new wB;for(e=new Dnb(a.b.Kc());e.b.Ob();){d=BD(e.b.Pb(),686);c=lsd(d);uB(b,b.a.length,c)}return b.a} -function cLb(a){var b;!a.c&&(a.c=new VKb);Okb(a.d,new jLb);_Kb(a);b=UKb(a);MAb(new YAb(null,new Kub(a.d,16)),new CLb(a));return b} -function mKd(a){var b;if((a.Db&64)!=0)return qnd(a);b=new Jfb(qnd(a));b.a+=' (instanceClassName: ';Efb(b,a.D);b.a+=')';return b.a} -function Pqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new bsd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new csd(a);imd(d.a,(uCb(f),f))}} -function Eqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new Yrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new _rd(a);pmd(d.a,(uCb(f),f))}} -function bLd(a,b){var c,d,e;c=(a.i==null&&TKd(a),a.i);d=b.aj();if(d!=-1){for(e=c.length;d<e;++d){if(c[d]==b){return d}}}return -1} -function tNd(a){var b,c,d,e,f;c=BD(a.g,674);for(d=a.i-1;d>=0;--d){b=c[d];for(e=0;e<d;++e){f=c[e];if(uNd(a,b,f)){tud(a,d);break}}}} -function jCb(b){var c=b.e;function d(a){if(!a||a.length==0){return ''}return '\t'+a.join('\n\t')} -return c&&(c.stack||d(b[Yie]))} -function nm(a){im();var b;b=a.Pc();switch(b.length){case 0:return hm;case 1:return new my(Qb(b[0]));default:return new ux(wm(b));}} -function W_b(a,b){switch(b.g){case 1:return Nq(a.j,(z0b(),u0b));case 2:return Nq(a.j,(z0b(),w0b));default:return mmb(),mmb(),jmb;}} -function $kd(a,b){switch(b){case 3:ald(a,0);return;case 4:cld(a,0);return;case 5:dld(a,0);return;case 6:eld(a,0);return;}Jkd(a,b)} -function dzc(){dzc=ccb;Vyc();bzc=(Nyc(),vyc);czc=Ou(OC(GC(Q3,1),zqe,146,0,[kyc,lyc,nyc,oyc,ryc,syc,tyc,uyc,xyc,zyc,myc,pyc,wyc]))} -function Y9b(a){var b,c;b=a.d==(Apc(),vpc);c=U9b(a);b&&!c||!b&&c?yNb(a.a,(Nyc(),mwc),(F7c(),D7c)):yNb(a.a,(Nyc(),mwc),(F7c(),C7c))} -function XAb(a,b){var c;c=BD(GAb(a,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);return c.Qc(aBb(c.gc()))} -function Ded(){Ded=ccb;Ced=new Eed('SIMPLE',0);zed=new Eed('GROUP_DEC',1);Bed=new Eed('GROUP_MIXED',2);Aed=new Eed('GROUP_INC',3)} -function CWd(){CWd=ccb;AWd=new DWd;tWd=new GWd;uWd=new JWd;vWd=new MWd;wWd=new PWd;xWd=new SWd;yWd=new VWd;zWd=new YWd;BWd=new _Wd} -function FHb(a,b,c){tHb();oHb.call(this);this.a=IC(oN,[nie,ile],[595,212],0,[sHb,rHb],2);this.c=new I6c;this.g=a;this.f=b;this.d=c} -function pNb(a,b){this.n=IC(XD,[nie,Sje],[364,25],14,[b,QD($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} -function r3b(a,b){Odd(b,'End label post-processing',1);MAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new w3b),new y3b),new A3b);Qdd(b)} -function NLc(a,b,c){var d,e;d=Edb(a.p[b.i.p])+Edb(a.d[b.i.p])+b.n.b+b.a.b;e=Edb(a.p[c.i.p])+Edb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} -function xhb(a,b,c){var d,e;d=xbb(c,Yje);for(e=0;ybb(d,0)!=0&&e<b;e++){d=wbb(d,xbb(a[e],Yje));a[e]=Tbb(d);d=Obb(d,32)}return Tbb(d)} -function $Ed(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BCb(c,a.length),a.charCodeAt(c));b<64&&(e=Mbb(e,Nbb(1,b)))}return e} -function S9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} -function T9d(a){var b;return a==null?null:new Ygb((b=Qge(a,true),b.length>0&&(BCb(0,b.length),b.charCodeAt(0)==43)?b.substr(1):b))} -function xud(a,b){var c;if(a.i>0){if(b.length<a.i){c=izd(rb(b).c,a.i);b=c}$fb(a.g,0,b,0,a.i)}b.length>a.i&&NC(b,a.i,null);return b} -function Sxd(a,b,c){var d,e,f;if(a.ej()){d=a.i;f=a.fj();kud(a,d,b);e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{kud(a,a.i,b)}return c} -function HMd(a,b,c){var d,e;d=new pSd(a.e,4,10,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),null,HLd(a,b),false);!c?(c=d):c.Ei(d);return c} -function GMd(a,b,c){var d,e;d=new pSd(a.e,3,10,null,(e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)),HLd(a,b),false);!c?(c=d):c.Ei(d);return c} -function _Jb(a){$Jb();var b;b=new g7c(BD(a.e.We((Y9c(),_8c)),8));if(a.B.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} -function Lzc(a){Izc();var b;(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Cxc))?(b=BD(vNb(a,Cxc),197)):(b=BD(vNb(Q_b(a),Dxc),197));return b} -function pBc(a,b){var c,d;d=null;if(wNb(a,(Nyc(),qyc))){c=BD(vNb(a,qyc),94);c.Xe(b)&&(d=c.We(b))}d==null&&(d=vNb(Q_b(a),b));return d} -function Ze(a,b){var c,d,e;if(JD(b,42)){c=BD(b,42);d=c.cd();e=Hv(a.Rc(),d);return Hb(e,c.dd())&&(e!=null||a.Rc()._b(d))}return false} -function qAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=xAd(a,e,d,b);return c!=-1}else{return false}} -function AAd(a,b){var c,d,e;if(a.f>0){a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){return c.dd()}}return null} -function R2d(a,b){var c,d,e,f;f=S6d(a.e.Tg(),b);c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];if(f.rl(d.ak())){return false}}return true} -function B6d(a){if(a.b==null){while(a.a.Ob()){a.b=a.a.Pb();if(!BD(a.b,49).Zg()){return true}}a.b=null;return false}else{return true}} -function Myd(b,c){b.mj();try{b.d.Vc(b.e++,c);b.f=b.d.j;b.g=-1}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} -function IA(a,b){GA();var c,d;c=LA((KA(),KA(),JA));d=null;b==c&&(d=BD(Phb(FA,a),615));if(!d){d=new HA(a);b==c&&Shb(FA,a,d)}return d} -function Epb(a,b){var c,d;a.a=wbb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d+=b;c=b-a.f;d=a.e+c;a.f=d-a.e-c;a.e=d} -function ogb(a,b){var c;a.c=b;a.a=hhb(b);a.a<54&&(a.f=(c=b.d>1?Mbb(Nbb(b.a[1],32),xbb(b.a[0],Yje)):xbb(b.a[0],Yje),Sbb(Ibb(b.e,c))))} -function Hbb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a%b;if(Kje<c&&c<Ije){return c}}return zbb((UC(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b,true),QC))} -function p5b(a,b){var c;m5b(b);c=BD(vNb(a,(Nyc(),Rwc)),276);!!c&&yNb(a,Rwc,Tqc(c));n5b(a.c);n5b(a.f);o5b(a.d);o5b(BD(vNb(a,wxc),207))} -function rHc(a){this.e=KC(WD,oje,25,a.length,15,1);this.c=KC(sbb,dle,25,a.length,16,1);this.b=KC(sbb,dle,25,a.length,16,1);this.f=0} -function BDc(a){var b,c;a.j=KC(UD,Vje,25,a.p.c.length,15,1);for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);a.j[b.p]=b.o.b/a.i}} -function yic(a){var b;if(a.c==0){return}b=BD(Ikb(a.a,a.b),287);b.b==1?(++a.b,a.b<a.a.c.length&&Cic(BD(Ikb(a.a,a.b),287))):--b.b;--a.c} -function eac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(U_b(b).a.Kc(),new Sq))),17).d.i;b.k==(j0b(),g0b)&&Ekb(a.e,b)}while(b.k==(j0b(),g0b))} -function idd(){idd=ccb;fdd=new q0b(15);edd=new Osd((Y9c(),f9c),fdd);hdd=new Osd(T9c,15);gdd=new Osd(E9c,meb(0));ddd=new Osd(r8c,tme)} -function tdd(){tdd=ccb;rdd=new udd('PORTS',0);sdd=new udd('PORT_LABELS',1);qdd=new udd('NODE_LABELS',2);pdd=new udd('MINIMUM_SIZE',3)} -function Ree(a,b){var c,d;d=b.length;for(c=0;c<d;c+=2)Ufe(a,(BCb(c,b.length),b.charCodeAt(c)),(BCb(c+1,b.length),b.charCodeAt(c+1)))} -function _Zc(a,b,c){var d,e,f,g;f=b-a.e;g=c-a.f;for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),187);OZc(d,d.s+f,d.t+g)}a.e=b;a.f=c} -function jUc(a,b){var c,d,e,f;f=b.b.b;a.a=new Psb;a.b=KC(WD,oje,25,f,15,1);c=0;for(e=Jsb(b.b,0);e.b!=e.d.c;){d=BD(Xsb(e),86);d.g=c++}} -function ihb(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=KC(WD,oje,25,e,15,1);jhb(d,a.a,c,b);f=new Vgb(a.e,e,d);Jgb(f);return f} -function Ofe(a,b,c){var d,e;d=BD(Phb(Zee,b),117);e=BD(Phb($ee,b),117);if(c){Shb(Zee,a,d);Shb($ee,a,e)}else{Shb($ee,a,d);Shb(Zee,a,e)}} -function Cwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} -function Dwb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.ue(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} -function Nic(a,b,c,d){var e,f,g;e=false;if(fjc(a.f,c,d)){ijc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} -function QHc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=BD(fkb(b),10);h=BD(V_b(f,d).Xb(0),11);a.d[h.p]=g++;c.c[c.c.length]=h}return g} -function hBc(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=ED(pBc(a,d));f=ED(pBc(b,d));return $wnd.Math.max((uCb(e),e),(uCb(f),f))} -function zZc(a,b,c){var d,e,f,g;d=c/a.c.length;e=0;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),200);w$c(f,f.f+d*e);t$c(f,b,d);++e}} -function hnc(a,b,c){var d,e,f,g;e=BD(Ohb(a.b,c),177);d=0;for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),113);e[f.d.p]&&++d}return d} -function mzd(a){var b,c;b=BD(Ajd(a.a,4),126);if(b!=null){c=KC($3,hve,415,b.length,0,1);$fb(b,0,c,0,b.length);return c}else{return jzd}} -function Cz(){var a;if(xz!=0){a=sz();if(a-yz>2000){yz=a;zz=$wnd.setTimeout(Iz,10)}}if(xz++==0){Lz((Kz(),Jz));return true}return false} -function wCc(a,b){var c,d,e;for(d=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=c.d.i;if(e.c==b){return false}}return true} -function Ek(b,c){var d,e;if(JD(c,245)){e=BD(c,245);try{d=b.vd(e);return d==0}catch(a){a=ubb(a);if(!JD(a,205))throw vbb(a)}}return false} -function Xz(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} -function BDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))>0} -function DDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))<0} -function CDb(a,b){return Iy(),Iy(),My(Qie),($wnd.Math.abs(a-b)<=Qie||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:Ny(isNaN(a),isNaN(b)))<=0} -function ydb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;c<b.length;c++){if(!b[c]||b[c]==''){continue}d+=a+b[c]}return d} -function zfb(a,b,c){var d,e,f,g;f=b+c;ACb(b,f,a.length);g='';for(e=b;e<f;){d=$wnd.Math.min(e+10000,f);g+=vfb(a.slice(e,d));e=d}return g} -function N9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} -function Q9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} -function R9d(a){var b,c,d,e,f;if(a==null)return null;f=new Rkb;for(c=Zmd(a),d=0,e=c.length;d<e;++d){b=c[d];Ekb(f,Qge(b,true))}return f} -function ted(a,b){var c,d,e;if(a.c){cld(a.c,b)}else{c=b-red(a);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),157);ted(d,red(d)+c)}}} -function sed(a,b){var c,d,e;if(a.c){ald(a.c,b)}else{c=b-qed(a);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),157);sed(d,qed(d)+c)}}} -function t6d(a,b){var c,d,e,f;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=d.Pb();f=s6d(a,BD(c,56));!!f&&(e.c[e.c.length]=f,true)}return e} -function LAd(a,b){var c,d,e;a.qj();d=b==null?0:tb(b);e=(d&Ohe)%a.d.length;c=wAd(a,e,d,b);if(c){JAd(a,c);return c.dd()}else{return null}} -function rde(a){var b,c;c=sde(a);b=null;while(a.c==2){nde(a);if(!b){b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,c);c=b}c.$l(sde(a))}return c} -function Wpd(a){var b,c,d;d=null;b=Vte in a.a;c=!b;if(c){throw vbb(new cqd('Every element must have an id.'))}d=Vpd(aC(a,Vte));return d} -function jid(a){var b,c,d;d=a.Zg();if(!d){b=0;for(c=a.eh();c;c=c.eh()){if(++b>Wje){return c.fh()}d=c.Zg();if(!!d||c==a){break}}}return d} -function fvd(a){evd();if(JD(a,156)){return BD(Ohb(cvd,hK),288).vg(a)}if(Mhb(cvd,rb(a))){return BD(Ohb(cvd,rb(a)),288).vg(a)}return null} -function fZd(a){if(efb(kse,a)){return Bcb(),Acb}else if(efb(lse,a)){return Bcb(),zcb}else{throw vbb(new Wdb('Expecting true or false'))}} -function uDc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw vbb(new Wdb('Input edge is not connected to the input port.'))} -function Igb(a,b){if(a.e>b.e){return 1}if(a.e<b.e){return -1}if(a.d>b.d){return a.e}if(a.d<b.d){return -b.e}return a.e*whb(a.a,b.a,a.d)} -function Zcb(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} -function Ue(a,b){var c;if(PD(b)===PD(a)){return true}if(!JD(b,21)){return false}c=BD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} -function ekb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;mkb(c<e);if(c>=f){hkb(a,b);return -1}else{ikb(a,b);return 1}} -function lA(a,b){var c,d;c=(BCb(b,a.length),a.charCodeAt(b));d=b+1;while(d<a.length&&(BCb(d,a.length),a.charCodeAt(d)==c)){++d}return d-b} -function sJb(a){switch(a.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return true;default:return false;}} -function bC(f,a){var b=f.a;var c;a=String(a);b.hasOwnProperty(a)&&(c=b[a]);var d=(rC(),qC)[typeof c];var e=d?d(c):xC(typeof c);return e} -function b3c(a,b){if(a.a<0){throw vbb(new Zdb('Did not call before(...) or after(...) before calling add(...).'))}i3c(a,a.a,b);return a} -function VOc(a,b,c,d){var e,f;if(b.c.length==0){return}e=ROc(c,d);f=QOc(b);MAb(VAb(new YAb(null,new Kub(f,1)),new cPc),new gPc(a,c,e,d))} -function Cjd(a,b,c){var d;if((a.Db&b)!=0){if(c==null){Bjd(a,b)}else{d=zjd(a,b);d==-1?(a.Eb=c):NC(CD(a.Eb),d,c)}}else c!=null&&vjd(a,b,c)} -function yjd(a){var b,c;if((a.Db&32)==0){c=(b=BD(Ajd(a,16),26),aLd(!b?a.zh():b)-aLd(a.zh()));c!=0&&Cjd(a,32,KC(SI,Uhe,1,c,5,1))}return a} -function W1d(a){var b;a.b||X1d(a,(b=h1d(a.e,a.a),!b||!dfb(lse,AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'qualified'))));return a.c} -function dTd(a,b,c){var d,e,f;d=BD(qud(QSd(a.a),b),87);f=(e=d.c,e?e:(jGd(),YFd));(f.kh()?xid(a.b,BD(f,49)):f)==c?KQd(d):NQd(d,c);return f} -function fCb(a,b){(!b&&console.groupCollapsed!=null?console.groupCollapsed:console.group!=null?console.group:console.log).call(console,a)} -function NNb(a,b,c,d){d==a?(BD(c.b,65),BD(c.b,65),BD(d.b,65),BD(d.b,65).c.b):(BD(c.b,65),BD(c.b,65),BD(d.b,65),BD(d.b,65).c.b);KNb(d,b,a)} -function EOb(a){var b,c,d;b=0;for(c=new olb(a.g);c.a<c.c.c.length;){BD(mlb(c),562);++b}d=new ENb(a.g,Edb(a.a),a.c);ELb(d);a.g=d.b;a.d=d.a} -function ymc(a,b,c){b.b=$wnd.Math.max(b.b,-c.a);b.c=$wnd.Math.max(b.c,c.a-a.a);b.d=$wnd.Math.max(b.d,-c.b);b.a=$wnd.Math.max(b.a,c.b-a.b)} -function MIc(a,b){if(a.e<b.e){return -1}else if(a.e>b.e){return 1}else if(a.f<b.f){return -1}else if(a.f>b.f){return 1}return tb(a)-tb(b)} -function efb(a,b){uCb(a);if(b==null){return false}if(dfb(a,b)){return true}return a.length==b.length&&dfb(a.toLowerCase(),b.toLowerCase())} -function x6d(a,b){var c,d,e,f;for(d=0,e=b.gc();d<e;++d){c=b.il(d);if(JD(c,99)&&(BD(c,18).Bb&ote)!=0){f=b.jl(d);f!=null&&s6d(a,BD(f,56))}}} -function p1c(a,b,c){var d,e,f;for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),221);d=new hDb(BD(Ohb(a.a,e.b),65));Ekb(b.a,d);p1c(a,d,e)}} -function Aeb(a){var b,c;if(ybb(a,-129)>0&&ybb(a,128)<0){b=Tbb(a)+128;c=(Ceb(),Beb)[b];!c&&(c=Beb[b]=new teb(a));return c}return new teb(a)} -function _0d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} -function a1d(a,b){var c,d;c=b.Hh(a.a);if(c){d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),fue));if(d!=null){return d}}return b.ne()} -function FMc(a,b){wMc();var c,d;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.d.i==b||c.c.i==b){return c}}return null} -function HUb(a,b,c){this.c=a;this.f=new Rkb;this.e=new d7c;this.j=new IVb;this.n=new IVb;this.b=b;this.g=new J6c(b.c,b.d,b.b,b.a);this.a=c} -function gVb(a){var b,c,d,e;this.a=new zsb;this.d=new Tqb;this.e=0;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!this.f&&(this.f=b);eVb(this,b)}} -function Xgb(a){Hgb();if(a.length==0){this.e=0;this.d=1;this.a=OC(GC(WD,1),oje,25,15,[0])}else{this.e=1;this.d=a.length;this.a=a;Jgb(this)}} -function mIb(a,b,c){oHb.call(this);this.a=KC(oN,ile,212,(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])).length,0,1);this.b=a;this.d=b;this.c=c} -function Kjc(a){this.d=new Rkb;this.e=new $rb;this.c=KC(WD,oje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=a} -function Vbc(a){var b,c,d,e,f,g;g=BD(vNb(a,(wtc(),$sc)),11);yNb(g,qtc,a.i.n.b);b=k_b(a.e);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];RZb(c,g)}} -function Wbc(a){var b,c,d,e,f,g;c=BD(vNb(a,(wtc(),$sc)),11);yNb(c,qtc,a.i.n.b);b=k_b(a.g);for(e=b,f=0,g=e.length;f<g;++f){d=e[f];QZb(d,c)}} -function vcc(a){var b,c;if(wNb(a.d.i,(Nyc(),Nxc))){b=BD(vNb(a.c.i,Nxc),19);c=BD(vNb(a.d.i,Nxc),19);return beb(b.a,c.a)>0}else{return false}} -function q2c(a){var b;if(PD(hkd(a,(Y9c(),J8c)))===PD((hbd(),fbd))){if(!Xod(a)){jkd(a,J8c,gbd)}else{b=BD(hkd(Xod(a),J8c),334);jkd(a,J8c,b)}}} -function ijc(a,b,c){var d,e;bIc(a.e,b,c,(Ucd(),Tcd));bIc(a.i,b,c,zcd);if(a.a){e=BD(vNb(b,(wtc(),$sc)),11);d=BD(vNb(c,$sc),11);cIc(a.g,e,d)}} -function OEc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new $Ec(a,b);if(c){a.a[d][f]=new FEc(b);e=BD(vNb(b,(wtc(),Psc)),10);!!e&&Rc(a.d,e,b)}} -function TPb(a,b){var c,d,e;Ekb(PPb,a);b.Fc(a);c=BD(Ohb(OPb,a),21);if(c){for(e=c.Kc();e.Ob();){d=BD(e.Pb(),33);Jkb(PPb,d,0)!=-1||TPb(d,b)}}} -function tyb(a,b,c){var d;(jyb?(ryb(a),true):kyb?($xb(),true):nyb?($xb(),true):myb&&($xb(),false))&&(d=new iyb(b),d.b=c,pyb(a,d),undefined)} -function xKb(a,b){var c;c=!a.A.Hc((tdd(),sdd))||a.q==(dcd(),$bd);a.u.Hc((rcd(),ncd))?c?vKb(a,b):zKb(a,b):a.u.Hc(pcd)&&(c?wKb(a,b):AKb(a,b))} -function b0d(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,JD(d,97)?BD(d,97).Jg():null);if(xlb(b,c)){Cjd(a.a,4,c);return}}Cjd(a.a,4,BD(b,126))} -function dYb(a,b,c){return new J6c($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} -function k4b(a,b){var c,d;c=beb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=beb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return beb(b.a.d.p,a.a.d.p)} -function _Dc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Kdb(d,e)}} -function HFb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new olb(LFb(b));e.a<e.c.c.length;){d=BD(mlb(e),213);f=xFb(d,b);HFb(a,f,c)}} -function umc(a,b,c){var d;d=c[a.g][b];switch(a.g){case 1:case 3:return new f7c(0,d);case 2:case 4:return new f7c(d,0);default:return null;}} -function r2c(b,c,d){var e,f;f=BD(hgd(c.f),209);try{f.Ze(b,d);igd(c.f,f)}catch(a){a=ubb(a);if(JD(a,102)){e=a;throw vbb(e)}else throw vbb(a)}} -function Vqd(a,b,c){var d,e,f,g,h,i;d=null;h=k4c(n4c(),b);f=null;if(h){e=null;i=o5c(h,c);g=null;i!=null&&(g=a.Ye(h,i));e=g;f=e}d=f;return d} -function TTd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,13,(g=b.c,g?g:(jGd(),YFd)),(f=c.c,f?f:(jGd(),YFd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} -function UEd(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b<e;b++){if(_Ed((BCb(b,a.length),a.charCodeAt(b)),c,d))break}return b} -function Qkb(a,b){var c,d;d=a.c.length;b.length<d&&(b=eCb(new Array(d),b));for(c=0;c<d;++c){NC(b,c,a.c[c])}b.length>d&&NC(b,d,null);return b} -function _lb(a,b){var c,d;d=a.a.length;b.length<d&&(b=eCb(new Array(d),b));for(c=0;c<d;++c){NC(b,c,a.a[c])}b.length>d&&NC(b,d,null);return b} -function Xrb(a,b,c){var d,e,f;e=BD(Ohb(a.e,b),387);if(!e){d=new lsb(a,b,c);Rhb(a.e,b,d);isb(d);return null}else{f=ijb(e,c);Yrb(a,e);return f}} -function P9d(a){var b;if(a==null)return null;b=ide(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid hexBinary value: '"+a+"'"))}return b} -function ghb(a){Hgb();if(ybb(a,0)<0){if(ybb(a,-1)!=0){return new Wgb(-1,Jbb(a))}return Bgb}else return ybb(a,10)<=0?Dgb[Tbb(a)]:new Wgb(1,a)} -function wJb(){qJb();return OC(GC(DN,1),Kie,159,0,[nJb,mJb,oJb,eJb,dJb,fJb,iJb,hJb,gJb,lJb,kJb,jJb,bJb,aJb,cJb,$Ib,ZIb,_Ib,XIb,WIb,YIb,pJb])} -function vjc(a){var b;this.d=new Rkb;this.j=new d7c;this.g=new d7c;b=a.g.b;this.f=BD(vNb(Q_b(b),(Nyc(),Lwc)),103);this.e=Edb(ED(c_b(b,ryc)))} -function Pjc(a){this.b=new Rkb;this.e=new Rkb;this.d=a;this.a=!WAb(JAb(new YAb(null,new Lub(new b1b(a.b))),new Xxb(new Qjc))).sd((EAb(),DAb))} -function N5c(){N5c=ccb;L5c=new O5c('PARENTS',0);K5c=new O5c('NODES',1);I5c=new O5c('EDGES',2);M5c=new O5c('PORTS',3);J5c=new O5c('LABELS',4)} -function Tbd(){Tbd=ccb;Qbd=new Ubd('DISTRIBUTED',0);Sbd=new Ubd('JUSTIFIED',1);Obd=new Ubd('BEGIN',2);Pbd=new Ubd(gle,3);Rbd=new Ubd('END',4)} -function UMd(a){var b;b=a.yi(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} -function cYb(a){switch(a.g){case 1:return ead(),dad;case 4:return ead(),aad;case 2:return ead(),bad;case 3:return ead(),_9c;}return ead(),cad} -function kA(a,b,c){var d;d=c.q.getFullYear()-nje+nje;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:EA(a,d%100,2);break;default:EA(a,d,b);}} -function Jsb(a,b){var c,d;wCb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c<b;++c){d=d.a}}return new $sb(a,b,d)} -function MEb(){MEb=ccb;LEb=new NEb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);KEb=new NEb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} -function h4b(a){var b,c,d,e;d=c4b(a);Okb(d,a4b);e=a.d;e.c=KC(SI,Uhe,1,0,5,1);for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),456);Gkb(e,b.b)}} -function gkd(a){var b,c,d;d=(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o);for(c=d.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),42);b.dd()}return FAd(d)} -function N5b(a){var b;if(!ecd(BD(vNb(a,(Nyc(),Vxc)),98))){return}b=a.b;O5b((tCb(0,b.c.length),BD(b.c[0],29)));O5b(BD(Ikb(b,b.c.length-1),29))} -function Roc(a,b){var c,d,e,f;c=0;for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=d.o.a+d.d.c+d.d.b+a.j;c=$wnd.Math.max(c,f)}return c} -function XEd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BCb(c,a.length),a.charCodeAt(c));b>=64&&b<128&&(e=Mbb(e,Nbb(1,b-64)))}return e} -function c_b(a,b){var c,d;d=null;if(wNb(a,(Y9c(),O9c))){c=BD(vNb(a,O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!Q_b(a)&&(d=vNb(Q_b(a),b));return d} -function oQc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(j0b(),h0b)||d==d0b){return}c=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(c)&&Rhb(a.k,b,BD(Rr(c),17))} -function mid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();return c<0?(e=a.Yg(d),e>=0?a.lh(e):tid(a,d)):c<0?tid(a,d):BD(d,66).Nj().Sj(a,a.yh(),c)} -function Ksd(a){var b;if(JD(a.a,4)){b=fvd(a.a);if(b==null){throw vbb(new Zdb(mse+a.b+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return b}else{return a.a}} -function L9d(a){var b;if(a==null)return null;b=bde(Qge(a,true));if(b==null){throw vbb(new n8d("Invalid base64Binary value: '"+a+"'"))}return b} -function Dyd(b){var c;try{c=b.i.Xb(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} -function Zyd(b){var c;try{c=b.c.ki(b.e);b.mj();b.g=b.e++;return c}catch(a){a=ubb(a);if(JD(a,73)){b.mj();throw vbb(new utb)}else throw vbb(a)}} -function CPb(){CPb=ccb;BPb=(Y9c(),K9c);vPb=G8c;qPb=r8c;wPb=f9c;zPb=(fFb(),bFb);yPb=_Eb;APb=dFb;xPb=$Eb;sPb=(nPb(),jPb);rPb=iPb;tPb=lPb;uPb=mPb} -function NWb(a){LWb();this.c=new Rkb;this.d=a;switch(a.g){case 0:case 2:this.a=tmb(KWb);this.b=Pje;break;case 3:case 1:this.a=KWb;this.b=Qje;}} -function ued(a,b,c){var d,e;if(a.c){dld(a.c,a.c.i+b);eld(a.c,a.c.j+c)}else{for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),157);ued(d,b,c)}}} -function KEd(a,b){var c,d;if(a.j.length!=b.j.length)return false;for(c=0,d=a.j.length;c<d;c++){if(!dfb(a.j[c],b.j[c]))return false}return true} -function gA(a,b,c){var d;if(b.a.length>0){Ekb(a.b,new WA(b.a,c));d=b.a.length;0<d?(b.a=b.a.substr(0,0)):0>d&&(b.a+=yfb(KC(TD,$ie,25,-d,15,1)))}} -function JKb(a,b){var c,d,e;c=a.o;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.a=DKb(d,c.a);d.e.b=c.b*Edb(ED(d.b.We(BKb)))}} -function S5b(a,b){var c,d,e,f;e=a.k;c=Edb(ED(vNb(a,(wtc(),htc))));f=b.k;d=Edb(ED(vNb(b,htc)));return f!=(j0b(),e0b)?-1:e!=e0b?1:c==d?0:c<d?-1:1} -function B$c(a,b){var c,d;c=BD(BD(Ohb(a.g,b.a),46).a,65);d=BD(BD(Ohb(a.g,b.b),46).a,65);return S6c(b.a,b.b)-S6c(b.a,E6c(c.b))-S6c(b.b,E6c(d.b))} -function aZb(a,b){var c;c=BD(vNb(a,(Nyc(),jxc)),74);if(Lq(b,ZYb)){if(!c){c=new s7c;yNb(a,jxc,c)}else{Osb(c)}}else !!c&&yNb(a,jxc,null);return c} -function a0b(a){var b;b=new Ufb;b.a+='n';a.k!=(j0b(),h0b)&&Qfb(Qfb((b.a+='(',b),Zr(a.k).toLowerCase()),')');Qfb((b.a+='_',b),P_b(a));return b.a} -function Kdc(a,b){Odd(b,'Self-Loop post-processing',1);MAb(JAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new Qdc),new Sdc),new Udc),new Wdc);Qdd(b)} -function kid(a,b,c,d){var e;if(c>=0){return a.hh(b,c,d)}else{!!a.eh()&&(d=(e=a.Vg(),e>=0?a.Qg(d):a.eh().ih(a,-1-e,null,d)));return a.Sg(b,c,d)}} -function zld(a,b){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);return;}$kd(a,b)} -function Ut(b,c){var d;d=b.Zc(c);try{return d.Pb()}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't get element "+c))}else throw vbb(a)}} -function Tgb(a,b){this.e=a;if(b<Zje){this.d=1;this.a=OC(GC(WD,1),oje,25,15,[b|0])}else{this.d=2;this.a=OC(GC(WD,1),oje,25,15,[b%Zje|0,b/Zje|0])}} -function omb(a,b){mmb();var c,d,e,f;c=a;f=b;if(JD(a,21)&&!JD(b,21)){c=b;f=a}for(e=c.Kc();e.Ob();){d=e.Pb();if(f.Hc(d)){return false}}return true} -function Txd(a,b,c){var d,e,f,g;d=a.Xc(b);if(d!=-1){if(a.ej()){f=a.fj();g=tud(a,d);e=a.Zi(4,g,null,d,f);!c?(c=e):c.Ei(e)}else{tud(a,d)}}return c} -function uwd(a,b,c){var d,e,f,g;d=a.Xc(b);if(d!=-1){if(a.ej()){f=a.fj();g=Evd(a,d);e=a.Zi(4,g,null,d,f);!c?(c=e):c.Ei(e)}else{Evd(a,d)}}return c} -function PJb(a,b){var c;c=BD(Mpb(a.b,b),124).n;switch(b.g){case 1:a.t>=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} -function RMb(){RMb=ccb;OMb=new SMb(xle,0);NMb=new SMb(yle,1);PMb=new SMb(zle,2);QMb=new SMb(Ale,3);OMb.a=false;NMb.a=true;PMb.a=false;QMb.a=true} -function ROb(){ROb=ccb;OOb=new SOb(xle,0);NOb=new SOb(yle,1);POb=new SOb(zle,2);QOb=new SOb(Ale,3);OOb.a=false;NOb.a=true;POb.a=false;QOb.a=true} -function dac(a){var b;b=a.a;do{b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i;b.k==(j0b(),g0b)&&a.b.Fc(b)}while(b.k==(j0b(),g0b));a.b=Su(a.b)} -function CDc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new Tkb(d));for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),10);b.p=GDc(b).a}mmb();Okb(a.p,new PDc)} -function eVc(a){var b,c,d,e;d=0;e=gVc(a);if(e.c.length==0){return 1}else{for(c=new olb(e);c.a<c.c.c.length;){b=BD(mlb(c),33);d+=eVc(b)}}return d} -function JJb(a,b){var c,d,e;e=0;d=BD(BD(Qc(a.r,b),21),84).Kc();while(d.Ob()){c=BD(d.Pb(),111);e+=c.d.b+c.b.rf().a+c.d.c;d.Ob()&&(e+=a.w)}return e} -function RKb(a,b){var c,d,e;e=0;d=BD(BD(Qc(a.r,b),21),84).Kc();while(d.Ob()){c=BD(d.Pb(),111);e+=c.d.d+c.b.rf().b+c.d.a;d.Ob()&&(e+=a.w)}return e} -function SOc(a,b,c,d){if(b.a<d.a){return true}else if(b.a==d.a){if(b.b<d.b){return true}else if(b.b==d.b){if(a.b>c.b){return true}}}return false} -function AD(a,b){if(ND(a)){return !!zD[b]}else if(a.hm){return !!a.hm[b]}else if(LD(a)){return !!yD[b]}else if(KD(a)){return !!xD[b]}return false} -function jkd(a,b,c){c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c));return a} -function jKb(a,b,c,d){var e,f;f=b.Xe((Y9c(),W8c))?BD(b.We(W8c),21):a.j;e=uJb(f);if(e==(qJb(),pJb)){return}if(c&&!sJb(e)){return}UHb(lKb(a,e,d),b)} -function fid(a,b,c,d){var e,f,g;f=XKd(a.Tg(),b);e=b-a.Ah();return e<0?(g=a.Yg(f),g>=0?a._g(g,c,true):sid(a,f,c)):BD(f,66).Nj().Pj(a,a.yh(),e,c,d)} -function u6d(a,b,c,d){var e,f,g;if(c.mh(b)){Q6d();if(YId(b)){e=BD(c.ah(b),153);x6d(a,e)}else{f=(g=b,!g?null:BD(d,49).xh(g));!!f&&v6d(c.ah(b),f)}}} -function H3b(a){switch(a.g){case 1:return vLb(),uLb;case 3:return vLb(),rLb;case 2:return vLb(),tLb;case 4:return vLb(),sLb;default:return null;}} -function kCb(a){switch(typeof(a)){case Mhe:return LCb(a);case Lhe:return QD(a);case Khe:return Bcb(),a?1231:1237;default:return a==null?0:FCb(a);}} -function Gic(a,b,c){if(a.e){switch(a.b){case 1:oic(a.c,b,c);break;case 0:pic(a.c,b,c);}}else{mic(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} -function lHc(a){var b,c;if(a==null){return null}c=KC(OQ,nie,193,a.length,0,2);for(b=0;b<c.length;b++){c[b]=BD(ulb(a[b],a[b].length),193)}return c} -function d4d(a){var b;if(b4d(a)){a4d(a);if(a.Lk()){b=b3d(a.e,a.b,a.c,a.a,a.j);a.j=b}a.g=a.a;++a.a;++a.c;a.i=0;return a.j}else{throw vbb(new utb)}} -function fMb(a,b){var c,d,e,f;f=a.o;c=a.p;f<c?(f*=f):(c*=c);d=f+c;f=b.o;c=b.p;f<c?(f*=f):(c*=c);e=f+c;if(d<e){return -1}if(d==e){return 0}return 1} -function HLd(a,b){var c,d,e;e=rud(a,b);if(e>=0)return e;if(a.Fk()){for(d=0;d<a.i;++d){c=a.Gk(BD(a.g[d],56));if(PD(c)===PD(b)){return d}}}return -1} -function Gtd(a,b,c){var d,e;e=a.gc();if(b>=e)throw vbb(new Cyd(b,e));if(a.hi()){d=a.Xc(c);if(d>=0&&d!=b){throw vbb(new Wdb(kue))}}return a.mi(b,c)} -function gx(a,b){this.a=BD(Qb(a),245);this.b=BD(Qb(b),245);if(a.vd(b)>0||a==(Lk(),Kk)||b==(_k(),$k)){throw vbb(new Wdb('Invalid range: '+nx(a,b)))}} -function mYb(a){var b,c;this.b=new Rkb;this.c=a;this.a=false;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),10);this.a=this.a|b.k==(j0b(),h0b)}} -function GFb(a,b){var c,d,e;c=nGb(new pGb,a);for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),121);AFb(DFb(CFb(EFb(BFb(new FFb,0),0),c),d))}return c} -function Nac(a,b,c){var d,e,f;for(e=new Sr(ur((b?R_b(a):U_b(a)).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);f=b?d.c.i:d.d.i;f.k==(j0b(),f0b)&&$_b(f,c)}} -function Izc(){Izc=ccb;Gzc=new Kzc(ane,0);Hzc=new Kzc('PORT_POSITION',1);Fzc=new Kzc('NODE_SIZE_WHERE_SPACE_PERMITS',2);Ezc=new Kzc('NODE_SIZE',3)} -function F7c(){F7c=ccb;z7c=new G7c('AUTOMATIC',0);C7c=new G7c(jle,1);D7c=new G7c(kle,2);E7c=new G7c('TOP',3);A7c=new G7c(mle,4);B7c=new G7c(gle,5)} -function Hhb(a,b,c,d){Dhb();var e,f;e=0;for(f=0;f<c;f++){e=wbb(Ibb(xbb(b[f],Yje),xbb(d,Yje)),xbb(Tbb(e),Yje));a[f]=Tbb(e);e=Pbb(e,32)}return Tbb(e)} -function zHb(a,b,c){var d,e;e=0;for(d=0;d<rHb;d++){e=$wnd.Math.max(e,pHb(a.a[b.g][d],c))}b==(gHb(),eHb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.b));return e} -function Bub(a,b){var c,d;lCb(b>0);if((b&-b)==b){return QD(b*Cub(a,31)*4.6566128730773926E-10)}do{c=Cub(a,31);d=c%b}while(c-d+(b-1)<0);return QD(d)} -function LCb(a){JCb();var b,c,d;c=':'+a;d=ICb[c];if(d!=null){return QD((uCb(d),d))}d=GCb[c];b=d==null?KCb(a):QD((uCb(d),d));MCb();ICb[c]=b;return b} -function qZb(a,b,c){Odd(c,'Compound graph preprocessor',1);a.a=new Hp;vZb(a,b,null);pZb(a,b);uZb(a);yNb(b,(wtc(),zsc),a.a);a.a=null;Uhb(a.b);Qdd(c)} -function X$b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} -function tkc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Vjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} -function ukc(a){var b,c,d;for(d=BD(Qc(a.a,(Xjc(),Wjc)),15).Kc();d.Ob();){c=BD(d.Pb(),101);b=Bkc(c);kkc(a,c,b[0],(Fkc(),Ckc),0);kkc(a,c,b[1],Ekc,1)}} -function tXc(a){switch(a.g){case 0:return null;case 1:return new $Xc;case 2:return new QXc;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} -function OZc(a,b,c){var d,e;FZc(a,b-a.s,c-a.t);for(e=new olb(a.n);e.a<e.c.c.length;){d=BD(mlb(e),211);SZc(d,d.e+b-a.s);TZc(d,d.f+c-a.t)}a.s=b;a.t=c} -function JFb(a){var b,c,d,e,f;c=0;for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),121);d.d=c++}b=IFb(a);f=null;b.c.length>1&&(f=GFb(a,b));return f} -function dmd(a){var b;if(!!a.f&&a.f.kh()){b=BD(a.f,49);a.f=BD(xid(a,b),82);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.f))}return a.f} -function emd(a){var b;if(!!a.i&&a.i.kh()){b=BD(a.i,49);a.i=BD(xid(a,b),82);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,7,b,a.i))}return a.i} -function zUd(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=BD(xid(a,b),18);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,21,b,a.b))}return a.b} -function uAd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Sh();BAd(a,a.f+1);e=(d&Ohe)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.uj());c.Fc(b);++a.f}} -function m3d(a,b,c){var d;if(b.Kj()){return false}else if(b.Zj()!=-2){d=b.zj();return d==null?c==null:pb(d,c)}else return b.Hj()==a.e.Tg()&&c==null} -function wo(){var a;Xj(16,Hie);a=Kp(16);this.b=KC(GF,Gie,317,a,0,1);this.c=KC(GF,Gie,317,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} -function b0b(a){n_b.call(this);this.k=(j0b(),h0b);this.j=(Xj(6,Jie),new Skb(6));this.b=(Xj(2,Jie),new Skb(2));this.d=new L_b;this.f=new s0b;this.a=a} -function Scc(a){var b,c;if(a.c.length<=1){return}b=Pcc(a,(Ucd(),Rcd));Rcc(a,BD(b.a,19).a,BD(b.b,19).a);c=Pcc(a,Tcd);Rcc(a,BD(c.a,19).a,BD(c.b,19).a)} -function Vzc(){Vzc=ccb;Uzc=new Xzc('SIMPLE',0);Rzc=new Xzc(Tne,1);Szc=new Xzc('LINEAR_SEGMENTS',2);Qzc=new Xzc('BRANDES_KOEPF',3);Tzc=new Xzc(Aqe,4)} -function XDc(a,b,c){if(!ecd(BD(vNb(b,(Nyc(),Vxc)),98))){WDc(a,b,Y_b(b,c));WDc(a,b,Y_b(b,(Ucd(),Rcd)));WDc(a,b,Y_b(b,Acd));mmb();Okb(b.j,new jEc(a))}} -function HVc(a,b,c,d){var e,f,g;e=d?BD(Qc(a.a,b),21):BD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=BD(g.Pb(),33);if(BVc(a,c,f)){return true}}return false} -function FMd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} -function QTd(a){var b,c;for(c=new Fyd(a);c.e!=c.i.gc();){b=BD(Dyd(c),87);if(!!b.e||(!b.d&&(b.d=new xMd(j5,b,1)),b.d).i!=0){return true}}return false} -function FDc(a){var b,c,d;b=0;for(d=new olb(a.c.a);d.a<d.c.c.length;){c=BD(mlb(d),10);b+=sr(new Sr(ur(U_b(c).a.Kc(),new Sq)))}return b/a.c.a.c.length} -function UPc(a){var b,c;a.c||XPc(a);c=new s7c;b=new olb(a.a);mlb(b);while(b.a<b.c.c.length){Dsb(c,BD(mlb(b),407).a)}sCb(c.b!=0);Nsb(c,c.c.b);return c} -function J0c(){J0c=ccb;I0c=(A0c(),z0c);G0c=new q0b(8);new Osd((Y9c(),f9c),G0c);new Osd(T9c,8);H0c=x0c;E0c=n0c;F0c=o0c;D0c=new Osd(y8c,(Bcb(),false))} -function uld(a,b,c,d){switch(b){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),a.e;case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),a.d;}return Xkd(a,b,c,d)} -function JQd(a){var b;if(!!a.a&&a.a.kh()){b=BD(a.a,49);a.a=BD(xid(a,b),138);a.a!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,5,b,a.a))}return a.a} -function yde(a){if(a<48)return -1;if(a>102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} -function Wj(a,b){if(a==null){throw vbb(new Heb('null key in entry: null='+b))}else if(b==null){throw vbb(new Heb('null value in entry: '+a+'=null'))}} -function kr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(PD(c)===PD(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} -function jIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[pHb(a.a[0],b),pHb(a.a[1],b),pHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} -function kIb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[qHb(a.a[0],b),qHb(a.a[1],b),qHb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} -function mqc(){mqc=ccb;iqc=new oqc('GREEDY',0);hqc=new oqc(Une,1);kqc=new oqc(Tne,2);lqc=new oqc('MODEL_ORDER',3);jqc=new oqc('GREEDY_MODEL_ORDER',4)} -function iUc(a,b){var c,d,e;a.b[b.g]=1;for(d=Jsb(b.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);e=c.c;a.b[e.g]==1?Dsb(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):iUc(a,e)}} -function V9b(a,b){var c,d,e;e=new Skb(b.gc());for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);c.c==c.f?K9b(a,c,c.c):L9b(a,c)||(e.c[e.c.length]=c,true)}return e} -function IZc(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new olb(a.n);g.a<g.c.c.length;){f=BD(mlb(g),211);RZc(f,h,d,e);++e}} -function tEb(a){var b,c,d;zwb(a.b.a);a.a=KC(PM,Uhe,57,a.c.c.a.b.c.length,0,1);b=0;for(d=new olb(a.c.c.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);c.f=b++}} -function RVb(a){var b,c,d;zwb(a.b.a);a.a=KC(IP,Uhe,81,a.c.a.a.b.c.length,0,1);b=0;for(d=new olb(a.c.a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);c.i=b++}} -function P1c(a,b,c){var d;Odd(c,'Shrinking tree compaction',1);if(Ccb(DD(vNb(b,(XNb(),VNb))))){N1c(a,b.f);INb(b.f,(d=b.c,d))}else{INb(b.f,b.c)}Qdd(c)} -function mr(a){var b;b=gr(a);if(!Qr(a)){throw vbb(new qcb('position (0) must be less than the number of elements that remained ('+b+')'))}return Rr(a)} -function hNb(b,c,d){var e;try{return YMb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} -function iNb(b,c,d){var e;try{return ZMb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} -function jNb(b,c,d){var e;try{return $Mb(b,c+b.j,d+b.k)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} -function s5b(a){switch(a.g){case 1:return Ucd(),Tcd;case 4:return Ucd(),Acd;case 3:return Ucd(),zcd;case 2:return Ucd(),Rcd;default:return Ucd(),Scd;}} -function cjc(a,b,c){if(b.k==(j0b(),h0b)&&c.k==g0b){a.d=_ic(b,(Ucd(),Rcd));a.b=_ic(b,Acd)}if(c.k==h0b&&b.k==g0b){a.d=_ic(c,(Ucd(),Acd));a.b=_ic(c,Rcd)}} -function gjc(a,b){var c,d,e;e=V_b(a,b);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),11);if(vNb(c,(wtc(),gtc))!=null||a1b(new b1b(c.b))){return true}}return false} -function QZc(a,b){dld(b,a.e+a.d+(a.c.c.length==0?0:a.b));eld(b,a.f);a.a=$wnd.Math.max(a.a,b.f);a.d+=b.g+(a.c.c.length==0?0:a.b);Ekb(a.c,b);return true} -function XZc(a,b,c){var d,e,f,g;g=0;d=c/a.a.c.length;for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),187);OZc(e,e.s,e.t+g*d);IZc(e,a.d-e.r+b,d);++g}} -function H4b(a){var b,c,d,e,f;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);b=0;for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);e.p=b++}}} -function r6c(a,b){var c,d,e,f,g,h;e=b.length-1;g=0;h=0;for(d=0;d<=e;d++){f=b[d];c=k6c(e,d)*x6c(1-a,e-d)*x6c(a,d);g+=f.a*c;h+=f.b*c}return new f7c(g,h)} -function jud(a,b){var c,d,e,f,g;c=b.gc();a.qi(a.i+c);f=b.Kc();g=a.i;a.i+=c;for(d=g;d<a.i;++d){e=f.Pb();mud(a,d,a.oi(d,e));a.bi(d,e);a.ci()}return c!=0} -function twd(a,b,c){var d,e,f;if(a.ej()){d=a.Vi();f=a.fj();++a.j;a.Hi(d,a.oi(d,b));e=a.Zi(3,null,b,d,f);!c?(c=e):c.Ei(e)}else{Avd(a,a.Vi(),b)}return c} -function WOd(a,b,c){var d,e,f;d=BD(qud(VKd(a.a),b),87);f=(e=d.c,JD(e,88)?BD(e,26):(jGd(),_Fd));((f.Db&64)!=0?xid(a.b,f):f)==c?KQd(d):NQd(d,c);return f} -function Ewb(a,b,c,d,e,f,g,h){var i,j;if(!d){return}i=d.a[0];!!i&&Ewb(a,b,c,i,e,f,g,h);Fwb(a,c,d.d,e,f,g,h)&&b.Fc(d);j=d.a[1];!!j&&Ewb(a,b,c,j,e,f,g,h)} -function eAb(a,b){var c;if(!a.a){c=KC(UD,Vje,25,0,15,1);_ub(a.b.a,new iAb(c));c.sort(dcb(Ylb.prototype.te,Ylb,[]));a.a=new Avb(c,a.d)}return pvb(a.a,b)} -function YMb(b,c,d){try{return Bbb(_Mb(b,c,d),1)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} -function ZMb(b,c,d){try{return Bbb(_Mb(b,c,d),0)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} -function $Mb(b,c,d){try{return Bbb(_Mb(b,c,d),2)}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} -function Nyd(b,c){if(b.g==-1){throw vbb(new Ydb)}b.mj();try{b.d._c(b.g,c);b.f=b.d.j}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} -function rJc(a,b,c){Odd(c,'Linear segments node placement',1);a.b=BD(vNb(b,(wtc(),otc)),304);sJc(a,b);nJc(a,b);kJc(a,b);qJc(a);a.a=null;a.b=null;Qdd(c)} -function Ee(a,b){var c,d,e,f;f=a.gc();b.length<f&&(b=eCb(new Array(f),b));e=b;d=a.Kc();for(c=0;c<f;++c){NC(e,c,d.Pb())}b.length>f&&NC(b,f,null);return b} -function Lu(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c<d;c++){if(a.Xb(c)==null){return c}}}else{for(c=0;c<d;c++){if(pb(b,a.Xb(c))){return c}}}return -1} -function Jd(a,b){var c,d,e;c=b.cd();e=b.dd();d=a.xc(c);if(!(PD(e)===PD(d)||e!=null&&pb(e,d))){return false}if(d==null&&!a._b(c)){return false}return true} -function YC(a,b){var c,d,e;if(b<=22){c=a.l&(1<<b)-1;d=e=0}else if(b<=44){c=a.l;d=a.m&(1<<b-22)-1;e=0}else{c=a.l;d=a.m;e=a.h&(1<<b-44)-1}return TC(c,d,e)} -function yKb(a,b){switch(b.g){case 1:return a.f.n.d+a.t;case 3:return a.f.n.a+a.t;case 2:return a.f.n.c+a.s;case 4:return a.f.n.b+a.s;default:return 0;}} -function aLb(a,b){var c,d;d=b.c;c=b.a;switch(a.b.g){case 0:c.d=a.e-d.a-d.d;break;case 1:c.d+=a.e;break;case 2:c.c=a.e-d.a-d.d;break;case 3:c.c=a.e+d.d;}} -function ZOb(a,b,c,d){var e,f;this.a=b;this.c=d;e=a.a;YOb(this,new f7c(-e.c,-e.d));P6c(this.b,c);f=d/2;b.a?b7c(this.b,0,f):b7c(this.b,f,0);Ekb(a.c,this)} -function iXc(){iXc=ccb;hXc=new kXc(ane,0);fXc=new kXc(Vne,1);gXc=new kXc('EDGE_LENGTH_BY_POSITION',2);eXc=new kXc('CROSSING_MINIMIZATION_BY_POSITION',3)} -function Wqd(a,b){var c,d;c=BD(oo(a.g,b),33);if(c){return c}d=BD(oo(a.j,b),118);if(d){return d}throw vbb(new cqd('Referenced shape does not exist: '+b))} -function rTb(a,b){if(a.c==b){return a.d}else if(a.d==b){return a.c}else{throw vbb(new Wdb("Node 'one' must be either source or target of edge 'edge'."))}} -function TMc(a,b){if(a.c.i==b){return a.d.i}else if(a.d.i==b){return a.c.i}else{throw vbb(new Wdb('Node '+b+' is neither source nor target of edge '+a))}} -function _lc(a,b){var c;switch(b.g){case 2:case 4:c=a.a;a.c.d.n.b<c.d.n.b&&(c=a.c);amc(a,b,(Ajc(),zjc),c);break;case 1:case 3:amc(a,b,(Ajc(),wjc),null);}} -function smc(a,b,c,d,e,f){var g,h,i,j,k;g=qmc(b,c,f);h=c==(Ucd(),Acd)||c==Tcd?-1:1;j=a[c.g];for(k=0;k<j.length;k++){i=j[k];i>0&&(i+=e);j[k]=g;g+=h*(i+d)}} -function Uoc(a){var b,c,d;d=a.f;a.n=KC(UD,Vje,25,d,15,1);a.d=KC(UD,Vje,25,d,15,1);for(b=0;b<d;b++){c=BD(Ikb(a.c.b,b),29);a.n[b]=Roc(a,c);a.d[b]=Qoc(a,c)}} -function zjd(a,b){var c,d,e;e=0;for(d=2;d<b;d<<=1){(a.Db&d)!=0&&++e}if(e==0){for(c=b<<=1;c<=128;c<<=1){if((a.Db&c)!=0){return 0}}return -1}else{return e}} -function s3d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);f=null;c=BD(a.g,119);for(e=0;e<a.i;++e){d=c[e];if(g.rl(d.ak())){!f&&(f=new yud);wtd(f,d)}}!!f&&Yxd(a,f)} -function H9d(a){var b,c,d;if(!a)return null;if(a.dc())return '';d=new Hfb;for(c=a.Kc();c.Ob();){b=c.Pb();Efb(d,GD(b));d.a+=' '}return lcb(d,d.a.length-1)} -function Ty(a,b,c){var d,e,f,g,h;Uy(a);for(e=(a.k==null&&(a.k=KC(_I,nie,78,0,0,1)),a.k),f=0,g=e.length;f<g;++f){d=e[f];Ty(d,b,'\t'+c)}h=a.f;!!h&&Ty(h,b,c)} -function LC(a,b){var c=new Array(b);var d;switch(a){case 14:case 15:d=0;break;case 16:d=false;break;default:return c;}for(var e=0;e<b;++e){c[e]=d}return c} -function PDb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b()}fad(a.d)?(d=a.a.c):(d=a.a.d);Hkb(d,new dEb(a));a.c.Me(a);QDb(a)} -function sRb(a){var b,c,d,e;for(c=new olb(a.e.c);c.a<c.c.c.length;){b=BD(mlb(c),282);for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),447);lRb(d)}cRb(b)}} -function a$c(a){var b,c,d,e,f;d=0;f=0;e=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);f=$wnd.Math.max(f,b.r);d+=b.d+(e>0?a.c:0);++e}a.b=d;a.d=f} -function BZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),200);d=$wnd.Math.max(d,f.e);e+=f.b+(c>0?a.g:0);++c}a.c=e;a.d=d} -function AHb(a,b){var c;c=OC(GC(UD,1),Vje,25,15,[zHb(a,(gHb(),dHb),b),zHb(a,eHb,b),zHb(a,fHb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} -function lNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,false,true)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} -function mNb(b,c,d){var e;try{aNb(b,c+b.j,d+b.k,true,false)}catch(a){a=ubb(a);if(JD(a,73)){e=a;throw vbb(new qcb(e.g+Gle+c+She+d+').'))}else throw vbb(a)}} -function d5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),zbd))){b.Mc(zbd);b.Fc(Bbd)}else if(b.Hc(Bbd)){b.Mc(Bbd);b.Fc(zbd)}} -function e5b(a){var b;if(!wNb(a,(Nyc(),xxc))){return}b=BD(vNb(a,xxc),21);if(b.Hc((Hbd(),Gbd))){b.Mc(Gbd);b.Fc(Ebd)}else if(b.Hc(Ebd)){b.Mc(Ebd);b.Fc(Gbd)}} -function udc(a,b,c){Odd(c,'Self-Loop ordering',1);MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new ydc),new Adc),new Cdc),new Edc),new Gdc(a));Qdd(c)} -function ikc(a,b,c,d){var e,f;for(e=b;e<a.c.length;e++){f=(tCb(e,a.c.length),BD(a.c[e],11));if(c.Mb(f)){d.c[d.c.length]=f}else{return e}}return a.c.length} -function Kmc(a,b,c,d){var e,f,g,h;a.a==null&&Nmc(a,b);g=b.b.j.c.length;f=c.d.p;h=d.d.p;e=h-1;e<0&&(e=g-1);return f<=e?a.a[e]-a.a[f]:a.a[g-1]-a.a[f]+a.a[e]} -function ehd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,33).Ag().i);for(c=new Fyd(BD(a.f,33).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} -function fhd(a){var b,c;if(!a.e){a.e=Qu(Yod(BD(a.f,33)).i);for(c=new Fyd(Yod(BD(a.f,33)));c.e!=c.i.gc();){b=BD(Dyd(c),118);Ekb(a.e,new thd(b))}}return a.e} -function ahd(a){var b,c;if(!a.a){a.a=Qu(Vod(BD(a.f,33)).i);for(c=new Fyd(Vod(BD(a.f,33)));c.e!=c.i.gc();){b=BD(Dyd(c),33);Ekb(a.a,new hhd(a,b))}}return a.a} -function dKd(b){var c;if(!b.C&&(b.D!=null||b.B!=null)){c=eKd(b);if(c){b.yk(c)}else{try{b.yk(null)}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}}return b.C} -function GJb(a){switch(a.q.g){case 5:DJb(a,(Ucd(),Acd));DJb(a,Rcd);break;case 4:EJb(a,(Ucd(),Acd));EJb(a,Rcd);break;default:FJb(a,(Ucd(),Acd));FJb(a,Rcd);}} -function PKb(a){switch(a.q.g){case 5:MKb(a,(Ucd(),zcd));MKb(a,Tcd);break;case 4:NKb(a,(Ucd(),zcd));NKb(a,Tcd);break;default:OKb(a,(Ucd(),zcd));OKb(a,Tcd);}} -function EXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,e.a,0);e.a+=c.f.a+b;e.b=$wnd.Math.max(e.b,c.f.b)}e.b>0&&(e.b+=b);return e} -function GXb(a,b){var c,d,e;e=new d7c;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),37);uXb(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} -function d_b(a){var b,c,d;d=Ohe;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),10);wNb(b,(wtc(),Zsc))&&(d=$wnd.Math.min(d,BD(vNb(b,Zsc),19).a))}return d} -function pHc(a,b){var c,d;if(b.length==0){return 0}c=NHc(a.a,b[0],(Ucd(),Tcd));c+=NHc(a.a,b[b.length-1],zcd);for(d=0;d<b.length;d++){c+=qHc(a,d,b)}return c} -function vQc(){hQc();this.c=new Rkb;this.i=new Rkb;this.e=new zsb;this.f=new zsb;this.g=new zsb;this.j=new Rkb;this.a=new Rkb;this.b=new Lqb;this.k=new Lqb} -function aKd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.ih(a,5,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function Wz(a){Rz();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} -function jeb(a){var b;b=(qeb(),peb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} -function _jb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=geb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=_Bb(a.a,c);$jb(a,b,d);a.a=b;a.b=0}else{dCb(a.a,c)}a.c=d} -function DKb(a,b){var c;c=a.b;return c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Tcd)?-c.rf().a-Edb(ED(c.We(s9c))):b+Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Tcd)?-c.rf().a:b} -function P_b(a){var b;if(a.b.c.length!=0&&!!BD(Ikb(a.b,0),70).a){return BD(Ikb(a.b,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.c?-1:Jkb(a.c.a,a,0))} -function C0b(a){var b;if(a.f.c.length!=0&&!!BD(Ikb(a.f,0),70).a){return BD(Ikb(a.f,0),70).a}b=JZb(a);if(b!=null){return b}return ''+(!a.i?-1:Jkb(a.i.j,a,0))} -function Ogc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c<a.gc();++c){d=BD(a.Xb(c),128);if(c==a.gc()-1||!d.o){return new vgd(meb(c),d)}}return null} -function uoc(a,b,c){var d,e,f,g,h;f=a.c;h=c?b:a;d=c?a:b;for(e=h.p+1;e<d.p;++e){g=BD(Ikb(f.a,e),10);if(!(g.k==(j0b(),d0b)||voc(g))){return false}}return true} -function u$c(a){var b,c,d,e,f;f=0;e=Qje;d=0;for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),187);f+=b.r+(d>0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} -function shd(a){var b,c;if(!a.b){a.b=Qu(BD(a.f,118).Ag().i);for(c=new Fyd(BD(a.f,118).Ag());c.e!=c.i.gc();){b=BD(Dyd(c),137);Ekb(a.b,new dhd(b))}}return a.b} -function Ctd(a,b){var c,d,e;if(b.dc()){return LCd(),LCd(),KCd}else{c=new zyd(a,b.gc());for(e=new Fyd(a);e.e!=e.i.gc();){d=Dyd(e);b.Hc(d)&&wtd(c,d)}return c}} -function bkd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),a.o):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),FAd(a.o))}return fid(a,b,c,d)} -function Tnd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b<c;++b){Cmd(qud(a.rb,b))}}if(a.vb){for(b=0,c=a.vb.i;b<c;++b){Cmd(qud(a.vb,b))}}u1d((O6d(),M6d),a);a.Bb|=1} -function _nd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){aod(a,b,d,null,e,f,g,h,i,j,m,true,n);CUd(a,k);JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),2);!!c&&DUd(a,c);EUd(a,l);return a} -function jZd(b){var c,d;if(b==null){return null}d=0;try{d=Icb(b,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){c=rfb(b);d=c[0]}else throw vbb(a)}return bdb(d)} -function kZd(b){var c,d;if(b==null){return null}d=0;try{d=Icb(b,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){c=rfb(b);d=c[0]}else throw vbb(a)}return bdb(d)} -function bD(a,b){var c,d,e;e=a.h-b.h;if(e<0){return false}c=a.l-b.l;d=a.m-b.m+(c>>22);e+=d>>22;if(e<0){return false}a.l=c&Eje;a.m=d&Eje;a.h=e&Fje;return true} -function Fwb(a,b,c,d,e,f,g){var h,i;if(b.Ae()&&(i=a.a.ue(c,d),i<0||!e&&i==0)){return false}if(b.Be()&&(h=a.a.ue(c,f),h>0||!g&&h==0)){return false}return true} -function Vcc(a,b){Occ();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Ycc(b,Ncc)-Ycc(a,Ncc);case 4:return Ycc(a,Mcc)-Ycc(b,Mcc);}return 0} -function Tqc(a){switch(a.g){case 0:return Mqc;case 1:return Nqc;case 2:return Oqc;case 3:return Pqc;case 4:return Qqc;case 5:return Rqc;default:return null;}} -function End(a,b,c){var d,e;d=(e=new rUd,yId(e,b),pnd(e,c),wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),e),e);AId(d,0);DId(d,1);CId(d,true);BId(d,true);return d} -function tud(a,b){var c,d;if(b>=a.i)throw vbb(new $zd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&$fb(a.g,b+1,a.g,b,d);NC(a.g,--a.i,null);a.fi(b,c);a.ci();return c} -function UId(a,b){var c,d;if(a.Db>>16==17){return a.Cb.ih(a,21,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?a.zh():c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function iDb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.a<e.c.c.length;){d=mlb(e);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),679);b.Ke(d)}}} -function pXb(a){var b,c,d,e;mmb();Okb(a.c,a.a);for(e=new olb(a.c);e.a<e.c.c.length;){d=mlb(e);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),369);b.Ke(d)}}} -function AGb(a){var b,c,d,e,f;e=Ohe;f=null;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),213);if(c.d.j^c.e.j){b=c.e.e-c.d.e-c.a;if(b<e){e=b;f=c}}}return f} -function OSb(){OSb=ccb;MSb=new Nsd(Mme,(Bcb(),false));ISb=new Nsd(Nme,100);KSb=(yTb(),wTb);JSb=new Nsd(Ome,KSb);LSb=new Nsd(Pme,qme);NSb=new Nsd(Qme,meb(Ohe))} -function ric(a,b,c){var d,e,f,g,h,i,j,k;j=0;for(e=a.a[b],f=0,g=e.length;f<g;++f){d=e[f];k=CHc(d,c);for(i=k.Kc();i.Ob();){h=BD(i.Pb(),11);Rhb(a.f,h,meb(j++))}}} -function uqd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new Yge(e);for(g=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);g.Ob();){f=BD(g.Pb(),19);Rc(a,b,Vpd(tB(c,f.a)))}}} -function vqd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new Yge(e);for(g=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);g.Ob();){f=BD(g.Pb(),19);Rc(a,b,Vpd(tB(c,f.a)))}}} -function Bkc(a){gkc();var b;b=BD(Ee(Ec(a.k),KC(F1,bne,61,2,0,1)),122);Klb(b,0,b.length,null);if(b[0]==(Ucd(),Acd)&&b[1]==Tcd){NC(b,0,Tcd);NC(b,1,Acd)}return b} -function JHc(a,b,c){var d,e,f;e=HHc(a,b,c);f=KHc(a,e);yHc(a.b);cIc(a,b,c);mmb();Okb(e,new hIc(a));d=KHc(a,e);yHc(a.b);cIc(a,c,b);return new vgd(meb(f),meb(d))} -function jJc(){jJc=ccb;gJc=e3c(new j3c,(qUb(),pUb),(S8b(),h8b));hJc=new Msd('linearSegments.inputPrio',meb(0));iJc=new Msd('linearSegments.outputPrio',meb(0))} -function yRc(){yRc=ccb;uRc=new ARc('P1_TREEIFICATION',0);vRc=new ARc('P2_NODE_ORDERING',1);wRc=new ARc('P3_NODE_PLACEMENT',2);xRc=new ARc('P4_EDGE_ROUTING',3)} -function ZWc(){ZWc=ccb;UWc=(Y9c(),C9c);XWc=T9c;NWc=Y8c;OWc=_8c;PWc=b9c;MWc=W8c;QWc=e9c;TWc=x9c;KWc=(HWc(),wWc);LWc=xWc;RWc=zWc;SWc=BWc;VWc=CWc;WWc=DWc;YWc=FWc} -function rbd(){rbd=ccb;qbd=new tbd('UNKNOWN',0);nbd=new tbd('ABOVE',1);obd=new tbd('BELOW',2);pbd=new tbd('INLINE',3);new Msd('org.eclipse.elk.labelSide',qbd)} -function rud(a,b){var c;if(a.ni()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return c}}}else{for(c=0;c<a.i;++c){if(PD(a.g[c])===PD(b)){return c}}}return -1} -function DZb(a,b,c){var d,e;if(b.c==(KAc(),IAc)&&c.c==HAc){return -1}else if(b.c==HAc&&c.c==IAc){return 1}d=HZb(b.a,a.a);e=HZb(c.a,a.a);return b.c==IAc?e-d:d-e} -function Z_b(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw vbb(new Wdb('index must be >= 0 and <= layer node count'))}!!a.c&&Lkb(a.c.a,a);a.c=c;!!c&&Dkb(c.a,b,a)} -function p7b(a,b){var c,d,e;for(d=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);e=BD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} -function rMc(a,b){this.c=new Lqb;this.a=a;this.b=b;this.d=BD(vNb(a,(wtc(),otc)),304);PD(vNb(a,(Nyc(),yxc)))===PD((_qc(),Zqc))?(this.e=new bNc):(this.e=new WMc)} -function $dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),33);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} -function bgd(a,b){var c,d;d=null;if(a.Xe((Y9c(),O9c))){c=BD(a.We(O9c),94);c.Xe(b)&&(d=c.We(b))}d==null&&!!a.yf()&&(d=a.yf().We(b));d==null&&(d=Ksd(b));return d} -function Vt(b,c){var d,e;d=b.Zc(c);try{e=d.Pb();d.Qb();return e}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't remove element "+c))}else throw vbb(a)}} -function qA(a,b){var c,d,e;d=new eB;e=new fB(d.q.getFullYear()-nje,d.q.getMonth(),d.q.getDate());c=pA(a,b,e);if(c==0||c<b.length){throw vbb(new Wdb(b))}return e} -function _tb(a,b){var c,d,e;uCb(b);lCb(b!=a);e=a.b.c.length;for(d=b.Kc();d.Ob();){c=d.Pb();Ekb(a.b,uCb(c))}if(e!=a.b.c.length){aub(a,0);return true}return false} -function bTb(){bTb=ccb;VSb=(Y9c(),O8c);new Osd(B8c,(Bcb(),true));YSb=Y8c;ZSb=_8c;$Sb=b9c;XSb=W8c;_Sb=e9c;aTb=x9c;USb=(OSb(),MSb);SSb=JSb;TSb=LSb;WSb=NSb;RSb=ISb} -function MZb(a,b){if(b==a.c){return a.d}else if(b==a.d){return a.c}else{throw vbb(new Wdb("'port' must be either the source port or target port of the edge."))}} -function C3b(a,b,c){var d,e;e=a.o;d=a.d;switch(b.g){case 1:return -d.d-c;case 3:return e.b+d.a+c;case 2:return e.a+d.c+c;case 4:return -d.b-c;default:return 0;}} -function H6b(a,b,c,d){var e,f,g,h;$_b(b,BD(d.Xb(0),29));h=d.bd(1,d.gc());for(f=BD(c.Kb(b),20).Kc();f.Ob();){e=BD(f.Pb(),17);g=e.c.i==b?e.d.i:e.c.i;H6b(a,g,c,h)}} -function Xec(a){var b;b=new Lqb;if(wNb(a,(wtc(),ttc))){return BD(vNb(a,ttc),83)}MAb(JAb(new YAb(null,new Kub(a.j,16)),new Zec),new _ec(b));yNb(a,ttc,b);return b} -function cmd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.ih(a,6,B2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Lhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function Eod(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,1,C2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Nhd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function lpd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.ih(a,9,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Phd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function mQd(a,b){var c,d;if(a.Db>>16==5){return a.Cb.ih(a,9,h5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),VFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function KHd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,0,k5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),OFd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function Snd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.ih(a,6,o5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),cGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function ird(){this.a=new bqd;this.g=new wo;this.j=new wo;this.b=new Lqb;this.d=new wo;this.i=new wo;this.k=new Lqb;this.c=new Lqb;this.e=new Lqb;this.f=new Lqb} -function MCd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;e<f;e++){d=qud(a,e);if(b==null){if(d==null){return e}}else if(PD(b)===PD(d)||pb(b,d)){return e}}return -1} -function b1d(a,b){var c,d;c=b.Hh(a.a);if(!c){return null}else{d=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Awe));return dfb(Bwe,d)?u1d(a,bKd(b.Hj())):d}} -function p6d(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=BD(b,49).eh();!!d&&d!=b;d=d.eh()){if(++c>Wje){return p6d(a,d)}if(d==a){return true}}}return false} -function HKb(a){CKb();switch(a.q.g){case 5:EKb(a,(Ucd(),Acd));EKb(a,Rcd);break;case 4:FKb(a,(Ucd(),Acd));FKb(a,Rcd);break;default:GKb(a,(Ucd(),Acd));GKb(a,Rcd);}} -function LKb(a){CKb();switch(a.q.g){case 5:IKb(a,(Ucd(),zcd));IKb(a,Tcd);break;case 4:JKb(a,(Ucd(),zcd));JKb(a,Tcd);break;default:KKb(a,(Ucd(),zcd));KKb(a,Tcd);}} -function XQb(a){var b,c;b=BD(vNb(a,(wSb(),pSb)),19);if(b){c=b.a;c==0?yNb(a,(HSb(),GSb),new Gub):yNb(a,(HSb(),GSb),new Hub(c))}else{yNb(a,(HSb(),GSb),new Hub(1))}} -function V$b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} -function hbc(a,b){switch(a.g){case 0:return b==(Ctc(),ytc)?dbc:ebc;case 1:return b==(Ctc(),ytc)?dbc:cbc;case 2:return b==(Ctc(),ytc)?cbc:ebc;default:return cbc;}} -function v$c(a,b){var c,d,e;Lkb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=ere;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);e=$wnd.Math.max(e,c.d)}a.b=e} -function Lld(a,b){var c,d;if(a.Db>>16==3){return a.Cb.ih(a,12,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Khd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function Uod(a,b){var c,d;if(a.Db>>16==11){return a.Cb.ih(a,10,E2,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(Thd(),Ohd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function PSd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,11,c5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),aGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function qUd(a,b){var c,d;if(a.Db>>16==10){return a.Cb.ih(a,12,n5,b)}return d=zUd(BD(XKd((c=BD(Ajd(a,16),26),!c?(jGd(),dGd):c),a.Db>>16),18)),a.Cb.ih(a,d.n,d.f,b)} -function wId(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.kh()){b=BD(a.r,49);a.r=BD(xid(a,b),138);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,8,b,a.r))}return a.r} -function yHb(a,b,c){var d;d=OC(GC(UD,1),Vje,25,15,[BHb(a,(gHb(),dHb),b,c),BHb(a,eHb,b,c),BHb(a,fHb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} -function O9b(a,b){var c,d,e;e=V9b(a,b);if(e.c.length==0){return}Okb(e,new pac);c=e.c.length;for(d=0;d<c;d++){K9b(a,(tCb(d,e.c.length),BD(e.c[d],286)),R9b(a,e,d))}} -function qkc(a){var b,c,d,e;for(e=BD(Qc(a.a,(Xjc(),Sjc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);for(c=Ec(d.k).Kc();c.Ob();){b=BD(c.Pb(),61);kkc(a,d,b,(Fkc(),Dkc),1)}}} -function voc(a){var b,c;if(a.k==(j0b(),g0b)){for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!OZb(b)&&a.c==LZb(b,a).c){return true}}}return false} -function JNc(a){var b,c;if(a.k==(j0b(),g0b)){for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!OZb(b)&&b.c.i.c==b.d.i.c){return true}}}return false} -function HUc(a,b){var c,d,e,f;Odd(b,'Dull edge routing',1);for(f=Jsb(a.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);for(d=Jsb(e.d,0);d.b!=d.d.c;){c=BD(Xsb(d),188);Osb(c.a)}}} -function xqd(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new Yge(e);for(g=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);g.Ob();){f=BD(g.Pb(),19);d=Zpd(b,f.a);!!d&&ard(a,d)}}} -function DZd(){tZd();var a,b;xZd((NFd(),MFd));wZd(MFd);Tnd(MFd);FQd=(jGd(),YFd);for(b=new olb(rZd);b.a<b.c.c.length;){a=BD(mlb(b),241);QQd(a,YFd,null)}return true} -function eD(a,b){var c,d,e,f,g,h,i,j;i=a.h>>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} -function fFb(){fFb=ccb;eFb=(rFb(),oFb);dFb=new Nsd(Yke,eFb);cFb=(UEb(),TEb);bFb=new Nsd(Zke,cFb);aFb=(MEb(),LEb);_Eb=new Nsd($ke,aFb);$Eb=new Nsd(_ke,(Bcb(),true))} -function cfc(a,b,c){var d,e;d=b*c;if(JD(a.g,145)){e=ugc(a);if(e.f.d){e.f.a||(a.d.a+=d+ple)}else{a.d.d-=d+ple;a.d.a+=d+ple}}else if(JD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} -function vmc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new olb(b.d);h.a<h.c.c.length;){g=BD(mlb(h),101);f=g.i;if(!!f&&f.i==c){d=g.d[c.g];e[d]=$wnd.Math.max(e[d],f.j.b)}}} -function AZc(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new olb(b.d);g.a<g.c.c.length;){f=BD(mlb(g),443);a$c(f);d=$wnd.Math.max(d,f.b);e+=f.d+(c>0?a.g:0);++c}b.b=d;b.e=e} -function to(a){var b,c,d;d=a.b;if(Lp(a.i,d.length)){c=d.length*2;a.b=KC(GF,Gie,317,c,0,1);a.c=KC(GF,Gie,317,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){po(a,b,b)}++a.g}} -function cNb(a,b,c,d){var e,f,g,h;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;YMb(b,e,g)?jNb(a,f,h)||lNb(a,f,h):$Mb(b,e,g)&&(hNb(a,f,h)||mNb(a,f,h))}}} -function Ooc(a,b,c){var d;d=b.c.i;if(d.k==(j0b(),g0b)){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11))}else{yNb(a,(wtc(),Vsc),b.c);yNb(a,Wsc,c.d)}} -function l6c(a,b,c){i6c();var d,e,f,g,h,i;g=b/2;f=c/2;d=$wnd.Math.abs(a.a);e=$wnd.Math.abs(a.b);h=1;i=1;d>g&&(h=g/d);e>f&&(i=f/e);Y6c(a,$wnd.Math.min(h,i));return a} -function ond(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),yte),2014);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new knd} -function Y9d(){A9d();var b,c;try{c=BD(mUd((yFd(),xFd),Ewe),2024);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new U9d} -function qZd(){Smd();var b,c;try{c=BD(mUd((yFd(),xFd),_ve),1941);if(c){return c}}catch(a){a=ubb(a);if(JD(a,102)){b=a;uvd((h0d(),b))}else throw vbb(a)}return new mZd} -function HQd(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,4,e,b);!c?(c=d):c.Ei(d)}e!=b&&(b?(c=QQd(a,MQd(a,b),c)):(c=QQd(a,a.a,c)));return c} -function nB(){eB.call(this);this.e=-1;this.a=false;this.p=Rie;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=Rie} -function qEb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} -function eOb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} -function PVb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Kdb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} -function ZTb(){ZTb=ccb;WTb=c3c(e3c(e3c(e3c(new j3c,(qUb(),oUb),(S8b(),m8b)),oUb,q8b),pUb,x8b),pUb,a8b);YTb=e3c(e3c(new j3c,oUb,S7b),oUb,b8b);XTb=c3c(new j3c,pUb,d8b)} -function s3b(a){var b,c,d,e,f;b=BD(vNb(a,(wtc(),Csc)),83);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=BD(d.Pb(),306);e=c.i;e.c+=f.a;e.d+=f.b;c.c?VHb(c):XHb(c)}yNb(a,Csc,null)} -function qmc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} -function BXc(a){var b,c,d,e,f;d=0;e=dme;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;zXc(a,a.d,0,0,dre,c);f=a.b.ig(a.d);if(f<e){d=c;e=f}}}zXc(a,a.d,0,0,dre,d)} -function E$c(a,b){var c,d,e,f;f=new Lqb;b.e=null;b.f=null;for(d=new olb(b.i);d.a<d.c.c.length;){c=BD(mlb(d),65);e=BD(Ohb(a.g,c.a),46);c.a=D6c(c.b);Rhb(f,c.a,e)}a.g=f} -function t$c(a,b,c){var d,e,f,g,h,i;e=b-a.e;f=e/a.d.c.length;g=0;for(i=new olb(a.d);i.a<i.c.c.length;){h=BD(mlb(i),443);d=a.b-h.b+c;_Zc(h,h.e+g*f,h.f);XZc(h,f,d);++g}} -function YBd(a){var b;a.f.qj();if(a.b!=-1){++a.b;b=a.f.d[a.a];if(a.b<b.i){return}++a.a}for(;a.a<a.f.d.length;++a.a){b=a.f.d[a.a];if(!!b&&b.i!=0){a.b=0;return}}a.b=-1} -function j0d(a,b){var c,d,e;e=b.c.length;c=l0d(a,e==0?'':(tCb(0,b.c.length),GD(b.c[0])));for(d=1;d<e&&!!c;++d){c=BD(c,49).oh((tCb(d,b.c.length),GD(b.c[d])))}return c} -function rEc(a,b){var c,d;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),10);a.c[c.c.p][c.p].a=Aub(a.i);a.c[c.c.p][c.p].d=Edb(a.c[c.c.p][c.p].a);a.c[c.c.p][c.p].b=1}} -function _dd(a,b){var c,d,e,f;f=0;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),157);f+=$wnd.Math.pow(red(c)*qed(c)-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} -function LHc(a,b,c,d){var e,f,g;f=GHc(a,b,c,d);g=MHc(a,f);bIc(a,b,c,d);yHc(a.b);mmb();Okb(f,new lIc(a));e=MHc(a,f);bIc(a,c,b,d);yHc(a.b);return new vgd(meb(g),meb(e))} -function cJc(a,b,c){var d,e;Odd(c,'Interactive node placement',1);a.a=BD(vNb(b,(wtc(),otc)),304);for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),29);bJc(a,d)}Qdd(c)} -function MVc(a,b){var c;Odd(b,'General Compactor',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));c=qWc(BD(hkd(a,(ZWc(),LWc)),380));c.hg(a);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} -function Dfd(a,b,c){var d,e;nmd(a,a.j+b,a.k+c);for(e=new Fyd((!a.a&&(a.a=new xMd(y2,a,5)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),469);ukd(d,d.a+b,d.b+c)}gmd(a,a.b+b,a.c+c)} -function vld(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),Sxd(a.e,b,d);case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),Sxd(a.d,b,d);}return Fkd(a,b,c,d)} -function wld(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new y5d(B2,a,7,4)),Txd(a.e,b,d);case 8:return !a.d&&(a.d=new y5d(B2,a,8,5)),Txd(a.d,b,d);}return Gkd(a,b,c,d)} -function lqd(a,b,c){var d,e,f,g,h;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&drd(a,e,b)}}} -function HAd(a,b,c){var d,e,f,g,h;a.qj();f=b==null?0:tb(b);if(a.f>0){g=(f&Ohe)%a.d.length;e=wAd(a,g,f,b);if(e){h=e.ed(c);return h}}d=a.tj(f,b,c);a.c.Fc(d);return null} -function t1d(a,b){var c,d,e,f;switch(o1d(a,b)._k()){case 3:case 2:{c=OKd(b);for(e=0,f=c.i;e<f;++e){d=BD(qud(c,e),34);if($1d(q1d(a,d))==5){return d}}break}}return null} -function Qs(a){var b,c,d,e,f;if(Lp(a.f,a.b.length)){d=KC(BG,Gie,330,a.b.length*2,0,1);a.b=d;e=d.length-1;for(c=a.a;c!=a;c=c.Rd()){f=BD(c,330);b=f.d&e;f.a=d[b];d[b]=f}}} -function DJb(a,b){var c,d,e,f;f=0;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);f=$wnd.Math.max(f,d.e.a+d.b.rf().a)}c=BD(Mpb(a.b,b),124);c.n.b=0;c.a.a=f} -function MKb(a,b){var c,d,e,f;c=0;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);c=$wnd.Math.max(c,e.e.b+e.b.rf().b)}d=BD(Mpb(a.b,b),124);d.n.d=0;d.a.b=c} -function INc(a){var b,c;c=BD(vNb(a,(wtc(),Ksc)),21);b=k3c(zNc);c.Hc((Orc(),Lrc))&&d3c(b,CNc);c.Hc(Nrc)&&d3c(b,ENc);c.Hc(Erc)&&d3c(b,ANc);c.Hc(Grc)&&d3c(b,BNc);return b} -function j1c(a,b){var c;Odd(b,'Delaunay triangulation',1);c=new Rkb;Hkb(a.i,new n1c(c));Ccb(DD(vNb(a,(XNb(),VNb))))&&'null10bw';!a.e?(a.e=NCb(c)):ye(a.e,NCb(c));Qdd(b)} -function q6c(a){if(a<0){throw vbb(new Wdb('The input must be positive'))}else return a<h6c.length?Sbb(h6c[a]):$wnd.Math.sqrt(dre*a)*(y6c(a,a)/x6c(2.718281828459045,a))} -function pud(a,b){var c;if(a.ni()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return true}}}else{for(c=0;c<a.i;++c){if(PD(a.g[c])===PD(b)){return true}}}return false} -function jr(a,b){if(b==null){while(a.a.Ob()){if(BD(a.a.Pb(),42).dd()==null){return true}}}else{while(a.a.Ob()){if(pb(b,BD(a.a.Pb(),42).dd())){return true}}}return false} -function zy(a,b){var c,d,e;if(b===a){return true}else if(JD(b,664)){e=BD(b,1947);return Ue((d=a.g,!d?(a.g=new vi(a)):d),(c=e.g,!c?(e.g=new vi(e)):c))}else{return false}} -function Tz(a){var b,c,d,e;b='Sz';c='ez';e=$wnd.Math.min(a.length,5);for(d=e-1;d>=0;d--){if(dfb(a[d].d,b)||dfb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} -function Abb(a,b){var c;if(Fbb(a)&&Fbb(b)){c=a/b;if(Kje<c&&c<Ije){return c<0?$wnd.Math.ceil(c):$wnd.Math.floor(c)}}return zbb(UC(Fbb(a)?Rbb(a):a,Fbb(b)?Rbb(b):b,false))} -function LZb(a,b){if(b==a.c.i){return a.d.i}else if(b==a.d.i){return a.c.i}else{throw vbb(new Wdb("'node' must either be the source node or target node of the edge."))}} -function C2b(a){var b,c,d,e;e=BD(vNb(a,(wtc(),xsc)),37);if(e){d=new d7c;b=Q_b(a.c.i);while(b!=e){c=b.e;b=Q_b(c);O6c(P6c(P6c(d,c.n),b.c),b.d.b,b.d.d)}return d}return w2b} -function Ldc(a){var b;b=BD(vNb(a,(wtc(),ntc)),403);MAb(LAb(new YAb(null,new Kub(b.d,16)),new Ydc),new $dc(a));MAb(JAb(new YAb(null,new Kub(b.d,16)),new aec),new cec(a))} -function woc(a,b){var c,d,e,f;e=b?U_b(a):R_b(a);for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);f=LZb(c,a);if(f.k==(j0b(),g0b)&&f.c!=a.c){return f}}return null} -function HDc(a){var b,c,d;for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);if(b.k!=(j0b(),h0b)){continue}d=b.o.b;a.i=$wnd.Math.min(a.i,d);a.g=$wnd.Math.max(a.g,d)}} -function oEc(a,b,c){var d,e,f;for(f=new olb(b);f.a<f.c.c.length;){d=BD(mlb(f),10);a.c[d.c.p][d.p].e=false}for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),10);nEc(a,d,c)}} -function WOc(a,b,c){var d,e;d=vPc(b.j,c.s,c.c)+vPc(c.e,b.s,b.c);e=vPc(c.j,b.s,b.c)+vPc(b.e,c.s,c.c);if(d==e){if(d>0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} -function Rpd(a,b){var c,d;d=false;if(ND(b)){d=true;Qpd(a,new yC(GD(b)))}if(!d){if(JD(b,236)){d=true;Qpd(a,(c=Kcb(BD(b,236)),new TB(c)))}}if(!d){throw vbb(new vcb(Ute))}} -function IMd(a,b,c,d){var e,f,g;e=new pSd(a.e,1,10,(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd)),(f=c.c,JD(f,88)?BD(f,26):(jGd(),_Fd)),HLd(a,b),false);!d?(d=e):d.Ei(e);return d} -function T_b(a){var b,c;switch(BD(vNb(Q_b(a),(Nyc(),ixc)),420).g){case 0:b=a.n;c=a.o;return new f7c(b.a+c.a/2,b.b+c.b/2);case 1:return new g7c(a.n);default:return null;}} -function lrc(){lrc=ccb;irc=new mrc(ane,0);hrc=new mrc('LEFTUP',1);krc=new mrc('RIGHTUP',2);grc=new mrc('LEFTDOWN',3);jrc=new mrc('RIGHTDOWN',4);frc=new mrc('BALANCED',5)} -function FFc(a,b,c){var d,e,f;d=Kdb(a.a[b.p],a.a[c.p]);if(d==0){e=BD(vNb(b,(wtc(),Qsc)),15);f=BD(vNb(c,Qsc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} -function jXc(a){switch(a.g){case 1:return new XVc;case 2:return new ZVc;case 3:return new VVc;case 0:return null;default:throw vbb(new Wdb(jre+(a.f!=null?a.f:''+a.g)));}} -function Ikd(a,b,c){switch(b){case 1:!a.n&&(a.n=new cUd(D2,a,1,7));Uxd(a.n);!a.n&&(a.n=new cUd(D2,a,1,7));ytd(a.n,BD(c,14));return;case 2:Lkd(a,GD(c));return;}ekd(a,b,c)} -function Zkd(a,b,c){switch(b){case 3:ald(a,Edb(ED(c)));return;case 4:cld(a,Edb(ED(c)));return;case 5:dld(a,Edb(ED(c)));return;case 6:eld(a,Edb(ED(c)));return;}Ikd(a,b,c)} -function Fnd(a,b,c){var d,e,f;f=(d=new rUd,d);e=xId(f,b,null);!!e&&e.Fi();pnd(f,c);wtd((!a.c&&(a.c=new cUd(p5,a,12,10)),a.c),f);AId(f,0);DId(f,1);CId(f,true);BId(f,true)} -function mUd(a,b){var c,d,e;c=Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e.Nh()}else if(JD(c,498)){d=BD(c,1938);e=d.b;return e}else{return null}} -function Ui(a,b,c,d){var e,f;Qb(b);Qb(c);f=BD(tn(a.d,b),19);Ob(!!f,'Row %s not in %s',b,a.e);e=BD(tn(a.b,c),19);Ob(!!e,'Column %s not in %s',c,a.c);return Wi(a,f.a,e.a,d)} -function JC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=LC(h,k);d!=10&&OC(GC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i<k;++i){l[i]=JC(a,b,c,d,e,f,g)}}return l} -function Eyd(b){if(b.g==-1){throw vbb(new Ydb)}b.mj();try{b.i.$c(b.g);b.f=b.i.j;b.g<b.e&&--b.e;b.g=-1}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}} -function hYb(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return a.c[a.c.length]=b,true} -function nZb(a){var b,c,d,e;e=-1;d=0;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),243);if(b.c==(KAc(),HAc)){e=d==0?0:d-1;break}else d==a.c.length-1&&(e=d);d+=1}return e} -function UZc(a){var b,c,d,e;e=0;b=0;for(d=new olb(a.c);d.a<d.c.c.length;){c=BD(mlb(d),33);dld(c,a.e+e);eld(c,a.f);e+=c.g+a.b;b=$wnd.Math.max(b,c.f+a.b)}a.d=e-a.b;a.a=b-a.b} -function bEb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);d=b.d.c;b.d.c=b.d.d;b.d.d=d;d=b.d.b;b.d.b=b.d.a;b.d.a=d;d=b.b.a;b.b.a=b.b.b;b.b.b=d}RDb(a)} -function BVb(a){var b,c,d;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=b.g.c;b.g.c=b.g.d;b.g.d=d;d=b.g.b;b.g.b=b.g.a;b.g.a=d;d=b.e.a;b.e.a=b.e.b;b.e.b=d}sVb(a)} -function Lmc(a){var b,c,d,e,f;f=Ec(a.k);for(c=(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])),d=0,e=c.length;d<e;++d){b=c[d];if(b!=Scd&&!f.Hc(b)){return b}}return null} -function znc(a,b){var c,d;d=BD(Etb(KAb(JAb(new YAb(null,new Kub(b.j,16)),new Pnc))),11);if(d){c=BD(Ikb(d.e,0),17);if(c){return BD(vNb(c,(wtc(),Zsc)),19).a}}return yzc(a.b)} -function CCc(a,b){var c,d,e,f;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);Blb(a.d);for(d=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);zCc(a,e,c.d.i)}}} -function NZc(a,b){var c,d;Lkb(a.b,b);for(d=new olb(a.n);d.a<d.c.c.length;){c=BD(mlb(d),211);if(Jkb(c.c,b,0)!=-1){Lkb(c.c,b);UZc(c);c.c.c.length==0&&Lkb(a.n,c);break}}HZc(a)} -function $Zc(a,b){var c,d,e,f,g;g=a.f;e=0;f=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);OZc(c,a.e,g);KZc(c,b);f=$wnd.Math.max(f,c.r);g+=c.d+a.c;e=g}a.d=f;a.b=e} -function hVc(a){var b,c;c=$sd(a);if(Qq(c)){return null}else{b=(Qb(c),BD(mr(new Sr(ur(c.a.Kc(),new Sq))),79));return atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82))}} -function XId(a){var b;if(!a.o){b=a.Lj();b?(a.o=new dYd(a,a,null)):a.rk()?(a.o=new uVd(a,null)):$1d(q1d((O6d(),M6d),a))==1?(a.o=new nYd(a)):(a.o=new sYd(a,null))}return a.o} -function w6d(a,b,c,d){var e,f,g,h,i;if(c.mh(b)){e=(g=b,!g?null:BD(d,49).xh(g));if(e){i=c.ah(b);h=b.t;if(h>1||h==-1){f=BD(i,15);e.Wb(t6d(a,f))}else{e.Wb(s6d(a,BD(i,56)))}}}} -function Zbb(b,c,d,e){Ybb();var f=Wbb;$moduleName=c;$moduleBase=d;tbb=e;function g(){for(var a=0;a<f.length;a++){f[a]()}} -if(b){try{Ihe(g)()}catch(a){b(c,a)}}else{Ihe(g)()}} -function Kgc(a){var b,c,d,e,f;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);b=BD(c.cd(),10);f=BD(BD(c.dd(),46).a,10);e=BD(BD(c.dd(),46).b,8);P6c(X6c(b.n),P6c(R6c(f.n),e))}} -function llc(a){switch(BD(vNb(a.b,(Nyc(),Vwc)),375).g){case 1:MAb(NAb(LAb(new YAb(null,new Kub(a.d,16)),new Glc),new Ilc),new Klc);break;case 2:nlc(a);break;case 0:mlc(a);}} -function KXc(a,b,c){var d;Odd(c,'Straight Line Edge Routing',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));d=BD(hkd(b,(MUc(),LUc)),33);LXc(a,d);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} -function i8c(){i8c=ccb;h8c=new j8c('V_TOP',0);g8c=new j8c('V_CENTER',1);f8c=new j8c('V_BOTTOM',2);d8c=new j8c('H_LEFT',3);c8c=new j8c('H_CENTER',4);e8c=new j8c('H_RIGHT',5)} -function gLd(a){var b;if((a.Db&64)!=0)return mKd(a);b=new Jfb(mKd(a));b.a+=' (abstract: ';Ffb(b,(a.Bb&256)!=0);b.a+=', interface: ';Ffb(b,(a.Bb&512)!=0);b.a+=')';return b.a} -function l3d(a,b,c,d){var e,f,g,h;if(oid(a.e)){e=b.ak();h=b.dd();f=c.dd();g=H2d(a,1,e,h,f,e.$j()?M2d(a,e,f,JD(e,99)&&(BD(e,18).Bb&Tje)!=0):-1,true);d?d.Ei(g):(d=g)}return d} -function kz(a){var b;if(a.c==null){b=PD(a.b)===PD(iz)?null:a.b;a.d=b==null?Xhe:MD(b)?nz(FD(b)):ND(b)?Vie:hdb(rb(b));a.a=a.a+': '+(MD(b)?mz(FD(b)):b+'');a.c='('+a.d+') '+a.a}} -function Wgb(a,b){this.e=a;if(Bbb(xbb(b,-4294967296),0)){this.d=1;this.a=OC(GC(WD,1),oje,25,15,[Tbb(b)])}else{this.d=2;this.a=OC(GC(WD,1),oje,25,15,[Tbb(b),Tbb(Obb(b,32))])}} -function yrb(){function b(){try{return (new Map).entries().next().done}catch(a){return false}} -if(typeof Map===Nhe&&Map.prototype.entries&&b()){return Map}else{return zrb()}} -function VPc(a,b){var c,d,e,f;f=new Bib(a.e,0);c=0;while(f.b<f.d.gc()){d=Edb((sCb(f.b<f.d.gc()),ED(f.d.Xb(f.c=f.b++))));e=d-b;if(e>Oqe){return c}else e>-1.0E-6&&++c}return c} -function PQd(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=lid(a.b,a,-4,c));!!b&&(c=kid(b,a,-4,c));c=GQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} -function SQd(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=lid(a.f,a,-1,c));!!b&&(c=kid(b,a,-1,c));c=IQd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,0,b,b))} -function E9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} -function I9d(a){var b,c,d;if(a==null)return null;c=BD(a,15);if(c.dc())return '';d=new Hfb;for(b=c.Kc();b.Ob();){Efb(d,(Q8d(),GD(b.Pb())));d.a+=' '}return lcb(d,d.a.length-1)} -function qEc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Ddb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} -function zqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new Crd(a);Aqd(d.a,e)}}} -function Qqd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new Yge(f);for(h=(c.b-c.a)*c.c<0?(Xge(),Wge):new she(c);h.Ob();){g=BD(h.Pb(),19);e=Zpd(b,g.a);d=new lrd(a);nqd(d.a,e)}}} -function eFd(b){var c;if(b!=null&&b.length>0&&bfb(b,b.length-1)==33){try{c=PEd(qfb(b,0,b.length-1));return c.e==null}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}return false} -function h3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,3,d,null,f,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,1,d,d.zj(),f,-1,true);c?c.Ei(e):(c=e);return c} -function Vee(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=Uee((BCb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw vbb(new mde('Unknown Option: '+'X'.substr(a)));b|=c}return b} -function mZb(a,b,c){var d,e,f;d=Q_b(b);e=a_b(d);f=new H0b;F0b(f,b);switch(c.g){case 1:G0b(f,Wcd(Zcd(e)));break;case 2:G0b(f,Zcd(e));}yNb(f,(Nyc(),Uxc),ED(vNb(a,Uxc)));return f} -function U9b(a){var b,c;b=BD(Rr(new Sr(ur(R_b(a.a).a.Kc(),new Sq))),17);c=BD(Rr(new Sr(ur(U_b(a.a).a.Kc(),new Sq))),17);return Ccb(DD(vNb(b,(wtc(),ltc))))||Ccb(DD(vNb(c,ltc)))} -function Xjc(){Xjc=ccb;Tjc=new Yjc('ONE_SIDE',0);Vjc=new Yjc('TWO_SIDES_CORNER',1);Wjc=new Yjc('TWO_SIDES_OPPOSING',2);Ujc=new Yjc('THREE_SIDES',3);Sjc=new Yjc('FOUR_SIDES',4)} -function jkc(a,b,c,d,e){var f,g;f=BD(GAb(JAb(b.Oc(),new _kc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);g=BD(Si(a.b,c,d),15);e==0?g.Wc(0,f):g.Gc(f)} -function KDc(a,b){var c,d,e,f,g;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);for(d=new Sr(ur(R_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=c.c.i.p;a.n[g]=a.n[g]-1}}} -function cnc(a,b){var c,d,e,f,g;for(f=new olb(b.d);f.a<f.c.c.length;){e=BD(mlb(f),101);g=BD(Ohb(a.c,e),112).o;for(d=new Gqb(e.b);d.a<d.c.a.length;){c=BD(Fqb(d),61);ojc(e,c,g)}}} -function HJc(a){var b,c;for(c=new olb(a.e.b);c.a<c.c.c.length;){b=BD(mlb(c),29);YJc(a,b)}MAb(JAb(LAb(LAb(new YAb(null,new Kub(a.e.b,16)),new YKc),new tLc),new vLc),new xLc(a))} -function Qwd(a,b){if(!b){return false}else{if(a.Di(b)){return false}if(!a.i){if(JD(b,143)){a.i=BD(b,143);return true}else{a.i=new Hxd;return a.i.Ei(b)}}else{return a.i.Ei(b)}}} -function B9d(a){a=Qge(a,true);if(dfb(kse,a)||dfb('1',a)){return Bcb(),Acb}else if(dfb(lse,a)||dfb('0',a)){return Bcb(),zcb}throw vbb(new n8d("Invalid boolean value: '"+a+"'"))} -function Kd(a,b,c){var d,e,f;for(e=a.vc().Kc();e.Ob();){d=BD(e.Pb(),42);f=d.cd();if(PD(b)===PD(f)||b!=null&&pb(b,f)){if(c){d=new pjb(d.cd(),d.dd());e.Qb()}return d}}return null} -function dKb(a){$Jb();var b,c,d;if(!a.B.Hc((Idd(),Add))){return}d=a.f.i;b=new K6c(a.a.c);c=new p0b;c.b=b.c-d.c;c.d=b.d-d.d;c.c=d.c+d.b-(b.c+b.b);c.a=d.d+d.a-(b.d+b.a);a.e.Ff(c)} -function LNb(a,b,c,d){var e,f,g;g=$wnd.Math.min(c,ONb(BD(a.b,65),b,c,d));for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),221);e!=b&&(g=$wnd.Math.min(g,LNb(e,b,g,d)))}return g} -function WZb(a){var b,c,d,e;e=KC(OQ,nie,193,a.b.c.length,0,2);d=new Bib(a.b,0);while(d.b<d.d.gc()){b=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),29));c=d.b-1;e[c]=l_b(b.a)}return e} -function K3b(a,b,c,d,e){var f,g,h,i;g=eLb(dLb(iLb(H3b(c)),d),C3b(a,c,e));for(i=Y_b(a,c).Kc();i.Ob();){h=BD(i.Pb(),11);if(b[h.p]){f=b[h.p].i;Ekb(g.d,new BLb(f,bLb(g,f)))}}cLb(g)} -function sic(a,b){this.f=new Lqb;this.b=new Lqb;this.j=new Lqb;this.a=a;this.c=b;this.c>0&&ric(this,this.c-1,(Ucd(),zcd));this.c<this.a.length-1&&ric(this,this.c+1,(Ucd(),Tcd))} -function SEc(a){a.length>0&&a[0].length>0&&(this.c=Ccb(DD(vNb(Q_b(a[0][0]),(wtc(),Rsc)))));this.a=KC(CX,nie,2018,a.length,0,2);this.b=KC(FX,nie,2019,a.length,0,2);this.d=new ss} -function tKc(a){if(a.c.length==0){return false}if((tCb(0,a.c.length),BD(a.c[0],17)).c.i.k==(j0b(),g0b)){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new wKc),new yKc)} -function rRc(a,b,c){Odd(c,'Tree layout',1);H2c(a.b);K2c(a.b,(yRc(),uRc),uRc);K2c(a.b,vRc,vRc);K2c(a.b,wRc,wRc);K2c(a.b,xRc,xRc);a.a=F2c(a.b,b);sRc(a,b,Udd(c,1));Qdd(c);return b} -function HXc(a,b){var c,d,e,f,g,h,i;h=gVc(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new olb(h);d.a<d.c.c.length;){c=BD(mlb(d),33);e+=HXc(a,c)}return $wnd.Math.max(e,g)} -function dcd(){dcd=ccb;ccd=new gcd(ole,0);bcd=new gcd('FREE',1);acd=new gcd('FIXED_SIDE',2);Zbd=new gcd('FIXED_ORDER',3);_bd=new gcd('FIXED_RATIO',4);$bd=new gcd('FIXED_POS',5)} -function c1d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Cwe));for(d=1;d<(O6d(),N6d).length;++d){if(dfb(N6d[d],e)){return d}}}return 0} -function Qlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function Wlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function Md(a){var b,c,d;d=new xwb(She,'{','}');for(c=a.vc().Kc();c.Ob();){b=BD(c.Pb(),42);uwb(d,Nd(a,b.cd())+'='+Nd(a,b.dd()))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} -function EGb(a){var b,c,d,e;while(!akb(a.o)){c=BD(fkb(a.o),46);d=BD(c.a,121);b=BD(c.b,213);e=xFb(b,d);if(b.e==d){NFb(e.g,b);d.e=e.e+b.a}else{NFb(e.b,b);d.e=e.e-b.a}Ekb(a.e.a,d)}} -function F6b(a,b){var c,d,e;c=null;for(e=BD(b.Kb(a),20).Kc();e.Ob();){d=BD(e.Pb(),17);if(!c){c=d.c.i==a?d.d.i:d.c.i}else{if((d.c.i==a?d.d.i:d.c.i)!=c){return false}}}return true} -function uPc(a,b){var c,d,e,f,g;c=WNc(a,false,b);for(e=new olb(c);e.a<e.c.c.length;){d=BD(mlb(e),129);d.d==0?(BOc(d,null),COc(d,null)):(f=d.a,g=d.b,BOc(d,g),COc(d,f),undefined)}} -function qQc(a){var b,c;b=new j3c;d3c(b,cQc);c=BD(vNb(a,(wtc(),Ksc)),21);c.Hc((Orc(),Nrc))&&d3c(b,gQc);c.Hc(Erc)&&d3c(b,dQc);c.Hc(Lrc)&&d3c(b,fQc);c.Hc(Grc)&&d3c(b,eQc);return b} -function Xac(a){var b,c,d,e;Wac(a);for(c=new Sr(ur(O_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);d=b.c.i==a;e=d?b.d:b.c;d?RZb(b,null):QZb(b,null);yNb(b,(wtc(),ctc),e);_ac(a,e.i)}} -function wmc(a,b,c,d){var e,f;f=b.i;e=c[f.g][a.d[f.g]];switch(f.g){case 1:e-=d+b.j.b;b.g.b=e;break;case 3:e+=d;b.g.b=e;break;case 4:e-=d+b.j.a;b.g.a=e;break;case 2:e+=d;b.g.a=e;}} -function aVc(a){var b,c,d;for(c=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),33);d=$sd(b);if(!Qr(new Sr(ur(d.a.Kc(),new Sq)))){return b}}return null} -function Cod(){var a;if(yod)return BD(nUd((yFd(),xFd),yte),2016);a=BD(JD(Phb((yFd(),xFd),yte),555)?Phb(xFd,yte):new Bod,555);yod=true;zod(a);Aod(a);Tnd(a);Shb(xFd,yte,a);return a} -function t3d(a,b,c){var d,e;if(a.j==0)return c;e=BD(LLd(a,b,c),72);d=c.ak();if(!d.Ij()||!a.a.rl(d)){throw vbb(new hz("Invalid entry feature '"+d.Hj().zb+'.'+d.ne()+"'"))}return e} -function Qi(a,b){var c,d,e,f,g,h,i,j;for(h=a.a,i=0,j=h.length;i<j;++i){g=h[i];for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(PD(b)===PD(c)||b!=null&&pb(b,c)){return true}}}return false} -function qhb(a){var b,c,d;if(ybb(a,0)>=0){c=Abb(a,Jje);d=Hbb(a,Jje)}else{b=Pbb(a,1);c=Abb(b,500000000);d=Hbb(b,500000000);d=wbb(Nbb(d,1),xbb(a,1))}return Mbb(Nbb(d,32),xbb(c,Yje))} -function oQb(a,b,c){var d,e;d=(sCb(b.b!=0),BD(Nsb(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Jsb(b,0);Vsb(e,d);return b} -function pmc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=umc(g,i.d[g.g],c);e=P6c(R6c(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Gsb(d,h,d.c.b,d.c)} -function yJc(a,b,c){var d,e,f,g;g=Jkb(a.e,b,0);f=new zJc;f.b=c;d=new Bib(a.e,g);while(d.b<d.d.gc()){e=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),10));e.p=c;Ekb(f.e,e);uib(d)}return f} -function sYc(a,b,c,d){var e,f,g,h,i;e=null;f=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);i=g.i+g.g;if(a<g.j+g.f+d){!e?(e=g):c.i-i<c.i-f&&(e=g);f=e.i+e.g}}return !e?0:f+d} -function tYc(a,b,c,d){var e,f,g,h,i;f=null;e=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);i=g.j+g.f;if(a<g.i+g.g+d){!f?(f=g):c.j-i<c.j-e&&(f=g);e=f.j+f.f}}return !f?0:e+d} -function mA(a){var b,c,d;b=false;d=a.b.c.length;for(c=0;c<d;c++){if(nA(BD(Ikb(a.b,c),434))){if(!b&&c+1<d&&nA(BD(Ikb(a.b,c+1),434))){b=true;BD(Ikb(a.b,c),434).a=true}}else{b=false}}} -function Ahb(a,b,c,d,e){var f,g;f=0;for(g=0;g<e;g++){f=wbb(f,Qbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<c;g++){f=wbb(f,xbb(b[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}} -function Jhb(a,b){Dhb();var c,d;d=(Hgb(),Cgb);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=Ogb(d,c));c.d==1?(c=Ogb(c,c)):(c=new Xgb(Lhb(c.a,c.d,KC(WD,oje,25,c.d<<1,15,1))))}d=Ogb(d,c);return d} -function zub(){zub=ccb;var a,b,c,d;wub=KC(UD,Vje,25,25,15,1);xub=KC(UD,Vje,25,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){xub[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){wub[a]=c;c*=0.5}} -function S1b(a){var b,c;if(Ccb(DD(hkd(a,(Nyc(),fxc))))){for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);if(Qld(b)){if(Ccb(DD(hkd(b,gxc)))){return true}}}}return false} -function kjc(a,b){var c,d,e;if(Qqb(a.f,b)){b.b=a;d=b.c;Jkb(a.j,d,0)!=-1||Ekb(a.j,d);e=b.d;Jkb(a.j,e,0)!=-1||Ekb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new vjc(a));qjc(a.i,c)}}} -function rmc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p<e.p?0:1}else if(Xcd(d)==f){return 0}else if(Vcd(d)==f){return 1}else{b=a.b;return uqb(b.b,Xcd(d))?0:1}} -function lzc(){lzc=ccb;jzc=new nzc(Aqe,0);hzc=new nzc('LONGEST_PATH',1);fzc=new nzc('COFFMAN_GRAHAM',2);gzc=new nzc(Tne,3);kzc=new nzc('STRETCH_WIDTH',4);izc=new nzc('MIN_WIDTH',5)} -function E3c(a){var b;this.d=new Lqb;this.c=a.c;this.e=a.d;this.b=a.b;this.f=new jgd(a.e);this.a=a.a;!a.f?(this.g=(b=BD(gdb(O3),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.g=a.f)} -function grd(a,b){var c,d,e,f,g,h;e=a;g=$pd(e,'layoutOptions');!g&&(g=$pd(e,Dte));if(g){h=g;d=null;!!h&&(d=(f=$B(h,KC(ZI,nie,2,0,6,1)),new mC(h,f)));if(d){c=new Drd(h,b);reb(d,c)}}} -function atd(a){if(JD(a,239)){return BD(a,33)}else if(JD(a,186)){return mpd(BD(a,118))}else if(!a){throw vbb(new Heb(gue))}else{throw vbb(new cgb('Only support nodes and ports.'))}} -function CA(a,b,c,d){if(b>=0&&dfb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return tA(a,c,d)}if(b>=0&&dfb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return tA(a,c,d)}return tA(a,c,d)} -function tjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.n;e.a=f;a.i==(Ucd(),Acd)?(e.b=g+a.j.b-c.o.b):(e.b=g);P6c(e,b);f+=c.o.a+a.e}} -function Odd(a,b,c){if(a.b){throw vbb(new Zdb('The task is already done.'))}else if(a.p!=null){return false}else{a.p=b;a.r=c;a.k&&(a.o=(Zfb(),Ibb(Cbb(Date.now()),_ie)));return true}} -function hsd(a){var b,c,d,e,f,g,h;h=new eC;c=a.tg();e=c!=null;e&&Upd(h,Vte,a.tg());d=a.ne();f=d!=null;f&&Upd(h,fue,a.ne());b=a.sg();g=b!=null;g&&Upd(h,'description',a.sg());return h} -function uId(a,b,c){var d,e,f;f=a.q;a.q=b;if((a.Db&4)!=0&&(a.Db&1)==0){e=new nSd(a,1,9,f,b);!c?(c=e):c.Ei(e)}if(!b){!!a.r&&(c=a.nk(null,c))}else{d=b.c;d!=a.r&&(c=a.nk(d,c))}return c} -function IYd(a,b,c){var d,e,f,g,h;c=(h=b,kid(h,a.e,-1-a.c,c));g=AYd(a.a);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,a.a),c)}return c} -function JYd(a,b,c){var d,e,f,g,h;c=(h=b,lid(h,a.e,-1-a.c,c));g=AYd(a.a);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,a.a),c)}return c} -function jhb(a,b,c,d){var e,f,g;if(d==0){$fb(b,0,a,c,a.length-c)}else{g=32-d;a[a.length-1]=0;for(f=a.length-1;f>c;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<<d}}for(e=0;e<c;e++){a[e]=0}} -function LJb(a){var b,c,d,e,f;b=0;c=0;for(f=a.Kc();f.Ob();){d=BD(f.Pb(),111);b=$wnd.Math.max(b,d.d.b);c=$wnd.Math.max(c,d.d.c)}for(e=a.Kc();e.Ob();){d=BD(e.Pb(),111);d.d.b=b;d.d.c=c}} -function TKb(a){var b,c,d,e,f;c=0;b=0;for(f=a.Kc();f.Ob();){d=BD(f.Pb(),111);c=$wnd.Math.max(c,d.d.d);b=$wnd.Math.max(b,d.d.a)}for(e=a.Kc();e.Ob();){d=BD(e.Pb(),111);d.d.d=c;d.d.a=b}} -function rpc(a,b){var c,d,e,f;f=new Rkb;e=0;d=b.Kc();while(d.Ob()){c=meb(BD(d.Pb(),19).a+e);while(c.a<a.f&&!Voc(a,c.a)){c=meb(c.a+1);++e}if(c.a>=a.f){break}f.c[f.c.length]=c}return f} -function sfd(a){var b,c,d,e;b=null;for(e=new olb(a.wf());e.a<e.c.c.length;){d=BD(mlb(e),181);c=new J6c(d.qf().a,d.qf().b,d.rf().a,d.rf().b);!b?(b=c):H6c(b,c)}!b&&(b=new I6c);return b} -function Fkd(a,b,c,d){var e,f;if(c==1){return !a.n&&(a.n=new cUd(D2,a,1,7)),Sxd(a.n,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Qj(a,yjd(a),c-aLd(a.zh()),b,d)} -function iud(a,b,c){var d,e,f,g,h;d=c.gc();a.qi(a.i+d);h=a.i-b;h>0&&$fb(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;e<d;++e){f=g.Pb();mud(a,b,a.oi(b,f));a.bi(b,f);a.ci();++b}return d!=0} -function xId(a,b,c){var d;if(b!=a.q){!!a.q&&(c=lid(a.q,a,-10,c));!!b&&(c=kid(b,a,-10,c));c=uId(a,b,c)}else if((a.Db&4)!=0&&(a.Db&1)==0){d=new nSd(a,1,9,b,b);!c?(c=d):c.Ei(d)}return c} -function Yj(a,b,c,d){Mb((c&oie)==0,'flatMap does not support SUBSIZED characteristic');Mb((c&4)==0,'flatMap does not support SORTED characteristic');Qb(a);Qb(b);return new jk(a,c,d,b)} -function Qy(a,b){vCb(b,'Cannot suppress a null exception.');mCb(b!=a,'Exception can not suppress itself.');if(a.i){return}a.k==null?(a.k=OC(GC(_I,1),nie,78,0,[b])):(a.k[a.k.length]=b)} -function oA(a,b,c,d){var e,f,g,h,i,j;g=c.length;f=0;e=-1;j=sfb(a.substr(b),(ntb(),ltb));for(h=0;h<g;++h){i=c[h].length;if(i>f&&nfb(j,sfb(c[h],ltb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} -function MIb(a,b){var c;c=NIb(a.b.Hf(),b.b.Hf());if(c!=0){return c}switch(a.b.Hf().g){case 1:case 2:return beb(a.b.sf(),b.b.sf());case 3:case 4:return beb(b.b.sf(),a.b.sf());}return 0} -function iRb(a){var b,c,d;d=a.e.c.length;a.a=IC(WD,[nie,oje],[48,25],15,[d,d],2);for(c=new olb(a.c);c.a<c.c.c.length;){b=BD(mlb(c),282);a.a[b.c.b][b.d.b]+=BD(vNb(b,(wSb(),oSb)),19).a}} -function H1c(a,b,c){Odd(c,'Grow Tree',1);a.b=b.f;if(Ccb(DD(vNb(b,(XNb(),VNb))))){a.c=new tOb;D1c(a,null)}else{a.c=new tOb}a.a=false;F1c(a,b.f);yNb(b,WNb,(Bcb(),a.a?true:false));Qdd(c)} -function Umd(a,b){var c,d,e,f,g;if(a==null){return null}else{g=KC(TD,$ie,25,2*b,15,1);for(d=0,e=0;d<b;++d){c=a[d]>>4&15;f=a[d]&15;g[e++]=Qmd[c];g[e++]=Qmd[f]}return zfb(g,0,g.length)}} -function j3d(a,b,c){var d,e,f;d=b.ak();f=b.dd();e=d.$j()?H2d(a,4,d,f,null,M2d(a,d,f,JD(d,99)&&(BD(d,18).Bb&Tje)!=0),true):H2d(a,d.Kj()?2:1,d,f,d.zj(),-1,true);c?c.Ei(e):(c=e);return c} -function wfb(a){var b,c;if(a>=Tje){b=Uje+(a-Tje>>10&1023)&aje;c=56320+(a-Tje&1023)&aje;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&aje)}} -function bKb(a,b){$Jb();var c,d,e,f;e=BD(BD(Qc(a.r,b),21),84);if(e.gc()>=2){d=BD(e.Kc().Pb(),111);c=a.u.Hc((rcd(),mcd));f=a.u.Hc(qcd);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} -function IVc(a,b,c,d,e){var f,g,h;f=JVc(a,b,c,d,e);h=false;while(!f){AVc(a,e,true);h=true;f=JVc(a,b,c,d,e)}h&&AVc(a,e,false);g=dVc(e);if(g.c.length!=0){!!a.d&&a.d.lg(g);IVc(a,e,c,d,g)}} -function Mad(){Mad=ccb;Kad=new Nad(ane,0);Iad=new Nad('DIRECTED',1);Lad=new Nad('UNDIRECTED',2);Gad=new Nad('ASSOCIATION',3);Jad=new Nad('GENERALIZATION',4);Had=new Nad('DEPENDENCY',5)} -function kfd(a,b){var c;if(!mpd(a)){throw vbb(new Zdb(Sse))}c=mpd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} -function cub(a,b){var c,d;uCb(b);d=a.b.c.length;Ekb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.ue(Ikb(a.b,d),b)<=0){Nkb(a.b,c,b);return true}Nkb(a.b,c,Ikb(a.b,d))}Nkb(a.b,d,b);return true} -function BHb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f<sHb;f++){e=$wnd.Math.max(e,qHb(a.a[f][b.g],d))}}else{e=qHb(a.a[c.g][b.g],d)}b==(gHb(),eHb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.a));return e} -function knc(a,b){var c,d,e,f,g,h;e=a.i;f=b.i;if(!e||!f){return false}if(e.i!=f.i||e.i==(Ucd(),zcd)||e.i==(Ucd(),Tcd)){return false}g=e.g.a;c=g+e.j.a;h=f.g.a;d=h+f.j.a;return g<=d&&c>=h} -function Tpd(a,b,c,d){var e;e=false;if(ND(d)){e=true;Upd(b,c,GD(d))}if(!e){if(KD(d)){e=true;Tpd(a,b,c,d)}}if(!e){if(JD(d,236)){e=true;Spd(b,c,BD(d,236))}}if(!e){throw vbb(new vcb(Ute))}} -function W0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),K6d).length;++d){if(dfb(K6d[d],e)){return d}}}}return 0} -function X0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Sve);if(e!=null){for(d=1;d<(O6d(),L6d).length;++d){if(dfb(L6d[d],e)){return d}}}}return 0} -function Ve(a,b){var c,d,e,f;uCb(b);f=a.a.gc();if(f<b.gc()){for(c=a.a.ec().Kc();c.Ob();){d=c.Pb();b.Hc(d)&&c.Qb()}}else{for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Bc(d)!=null}}return f!=a.a.gc()} -function bYb(a){var b,c;c=R6c(l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])));b=a.i.d;switch(a.j.g){case 1:c.b-=b.d;break;case 2:c.a+=b.c;break;case 3:c.b+=b.a;break;case 4:c.a-=b.b;}return c} -function P9b(a){var b;b=(I9b(),BD(Rr(new Sr(ur(R_b(a).a.Kc(),new Sq))),17).c.i);while(b.k==(j0b(),g0b)){yNb(b,(wtc(),Tsc),(Bcb(),true));b=BD(Rr(new Sr(ur(R_b(b).a.Kc(),new Sq))),17).c.i}} -function bIc(a,b,c,d){var e,f,g,h;h=CHc(b,d);for(g=h.Kc();g.Ob();){e=BD(g.Pb(),11);a.d[e.p]=a.d[e.p]+a.c[c.p]}h=CHc(c,d);for(f=h.Kc();f.Ob();){e=BD(f.Pb(),11);a.d[e.p]=a.d[e.p]-a.c[b.p]}} -function Efd(a,b,c){var d,e;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);bld(d,d.i+b,d.j+c)}reb((!a.b&&(a.b=new cUd(B2,a,12,3)),a.b),new Kfd(b,c))} -function Mwb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.ue(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.ue(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} -function ucd(a){rcd();var b,c;b=qqb(ncd,OC(GC(E1,1),Kie,273,0,[pcd]));if(Ox(Cx(b,a))>1){return false}c=qqb(mcd,OC(GC(E1,1),Kie,273,0,[lcd,qcd]));if(Ox(Cx(c,a))>1){return false}return true} -function fod(a,b){var c;c=Phb((yFd(),xFd),a);JD(c,498)?Shb(xFd,a,new bUd(this,b)):Shb(xFd,a,this);bod(this,b);if(b==(LFd(),KFd)){this.wb=BD(this,1939);BD(b,1941)}else{this.wb=(NFd(),MFd)}} -function lZd(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d<Pmd.length;++d){try{return DQd(Pmd[d],b)}catch(a){a=ubb(a);if(JD(a,32)){e=a;c=e}else throw vbb(a)}}throw vbb(new rFd(c))} -function Dpb(){Dpb=ccb;Bpb=OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);Cpb=OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} -function yyb(a){var b,c,d;b=dfb(typeof(b),uke)?null:new iCb;if(!b){return}$xb();c=(d=900,d>=_ie?'error':d>=900?'warn':d>=800?'info':'log');gCb(c,a.a);!!a.b&&hCb(b,c,a.b,'Exception: ',true)} -function vNb(a,b){var c,d;d=(!a.q&&(a.q=new Lqb),Ohb(a.q,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.q&&(a.q=new Lqb),Thb(a.q,b)):(!a.q&&(a.q=new Lqb),Rhb(a.q,b,c)),a);return c} -function qUb(){qUb=ccb;lUb=new rUb('P1_CYCLE_BREAKING',0);mUb=new rUb('P2_LAYERING',1);nUb=new rUb('P3_NODE_ORDERING',2);oUb=new rUb('P4_NODE_PLACEMENT',3);pUb=new rUb('P5_EDGE_ROUTING',4)} -function SUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Lkb(a.b.b,f.b);Lkb(a.b.a,BD(f.b,81).d)}}} -function IWb(a,b){AWb();var c;if(a.c==b.c){if(a.b==b.b||pWb(a.b,b.b)){c=mWb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return beb(a.b.g,b.b.g)}else{return Kdb(a.c,b.c)}} -function y6b(a,b){var c;Odd(b,'Hierarchical port position processing',1);c=a.b;c.c.length>0&&x6b((tCb(0,c.c.length),BD(c.c[0],29)),a);c.c.length>1&&x6b(BD(Ikb(c,c.c.length-1),29),a);Qdd(b)} -function RVc(a,b){var c,d,e;if(CVc(a,b)){return true}for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),33);e=hVc(c);if(BVc(a,c,e)){return true}if(PVc(a,c)-a.g<=a.a){return true}}return false} -function d0c(){d0c=ccb;c0c=(A0c(),z0c);__c=v0c;$_c=t0c;Y_c=p0c;Z_c=r0c;X_c=new q0b(8);W_c=new Osd((Y9c(),f9c),X_c);a0c=new Osd(T9c,8);b0c=x0c;T_c=k0c;U_c=m0c;V_c=new Osd(y8c,(Bcb(),false))} -function X7c(){X7c=ccb;U7c=new q0b(15);T7c=new Osd((Y9c(),f9c),U7c);W7c=new Osd(T9c,15);V7c=new Osd(D9c,meb(0));O7c=I8c;Q7c=Y8c;S7c=b9c;L7c=new Osd(r8c,pse);P7c=O8c;R7c=_8c;M7c=t8c;N7c=w8c} -function jtd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))} -function ktd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))} -function mtd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))} -function ltd(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i!=1){throw vbb(new Wdb(iue))}return atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))} -function Dvd(a,b,c){var d,e,f;++a.j;e=a.Vi();if(b>=e||b<0)throw vbb(new qcb(lue+b+mue+e));if(c>=e||c<0)throw vbb(new qcb(nue+c+mue+e));b!=c?(d=(f=a.Ti(c),a.Hi(b,f),f)):(d=a.Oi(c));return d} -function m6d(a){var b,c,d;d=a;if(a){b=0;for(c=a.Ug();c;c=c.Ug()){if(++b>Wje){return m6d(c)}d=c;if(c==a){throw vbb(new Zdb('There is a cycle in the containment hierarchy of '+a))}}}return d} -function Fe(a){var b,c,d;d=new xwb(She,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();uwb(d,PD(b)===PD(a)?'(this Collection)':b==null?Xhe:fcb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} -function CVc(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;c<b.gc();c++){c<b.gc()-1?(d=d|BVc(a,BD(b.Xb(c),33),BD(b.Xb(c+1),33))):(d=d|BVc(a,BD(b.Xb(c),33),BD(b.Xb(0),33)))}return d} -function Ymd(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=BD(a.a,49).ih(a,4,o5,c));!!b&&(c=BD(b,49).gh(a,4,o5,c));c=Tmd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,1,b,b))} -function RQd(a,b){var c;if(b!=a.e){!!a.e&&QYd(AYd(a.e),a);!!b&&(!b.b&&(b.b=new RYd(new NYd)),PYd(b.b,a));c=HQd(a,b,null);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} -function ufb(a){var b,c,d;c=a.length;d=0;while(d<c&&(BCb(d,a.length),a.charCodeAt(d)<=32)){++d}b=c;while(b>d&&(BCb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b<c?a.substr(d,b-d):a} -function ujc(a,b){var c;c=b.o;if(fad(a.f)){a.j.a=$wnd.Math.max(a.j.a,c.a);a.j.b+=c.b;a.d.c.length>1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} -function gkc(){gkc=ccb;dkc=OC(GC(F1,1),bne,61,0,[(Ucd(),Acd),zcd,Rcd]);ckc=OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd]);ekc=OC(GC(F1,1),bne,61,0,[Rcd,Tcd,Acd]);fkc=OC(GC(F1,1),bne,61,0,[Tcd,Acd,zcd])} -function omc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?Xcd(e):Vcd(e);f=umc(e,k.d[e.g],c);j=umc(i,k.d[i.g],c);Dsb(d,P6c(f,j));e=i}} -function oFc(a,b,c,d){var e,f,g,h,i;g=JHc(a.a,b,c);h=BD(g.a,19).a;f=BD(g.b,19).a;if(d){i=BD(vNb(b,(wtc(),gtc)),10);e=BD(vNb(c,gtc),10);if(!!i&&!!e){mic(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} -function oHc(a){var b,c,d,e,f,g,h,i,j;this.a=lHc(a);this.b=new Rkb;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=new Rkb;Ekb(this.b,f);for(h=b,i=0,j=h.length;i<j;++i){g=h[i];Ekb(f,new Tkb(g.j))}}} -function qHc(a,b,c){var d,e,f;f=0;d=c[b];if(b<c.length-1){e=c[b+1];if(a.b[b]){f=KIc(a.d,d,e);f+=NHc(a.a,d,(Ucd(),zcd));f+=NHc(a.a,e,Tcd)}else{f=IHc(a.a,d,e)}}a.c[b]&&(f+=PHc(a.a,d));return f} -function jZb(a,b,c,d,e){var f,g,h,i;i=null;for(h=new olb(d);h.a<h.c.c.length;){g=BD(mlb(h),441);if(g!=c&&Jkb(g.e,e,0)!=-1){i=g;break}}f=kZb(e);QZb(f,c.b);RZb(f,i.b);Rc(a.a,e,new BZb(f,b,c.f))} -function nic(a){while(a.g.c!=0&&a.d.c!=0){if(wic(a.g).c>wic(a.d).c){a.i+=a.g.c;yic(a.d)}else if(wic(a.d).c>wic(a.g).c){a.e+=a.d.c;yic(a.g)}else{a.i+=vic(a.g);a.e+=vic(a.d);yic(a.g);yic(a.d)}}} -function XOc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new DOc((HOc(),FOc),b,f,1);new DOc(FOc,f,g,1);for(e=new olb(c);e.a<e.c.c.length;){d=BD(mlb(e),112);if(d!=f&&d!=b&&d!=g){pPc(a.a,d,b);pPc(a.a,d,g)}}} -function XQc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(b<c){a.b=0.5*(b+c);a.g=Qqe*a.b+0.9*b;a.f=Qqe*a.b+0.9*c}else{a.b=0.5*(b+d);a.g=Qqe*a.b+0.9*d;a.f=Qqe*a.b+0.9*b}} -function acb(){_bb={};!Array.isArray&&(Array.isArray=function(a){return Object.prototype.toString.call(a)==='[object Array]'});function b(){return (new Date).getTime()} -!Date.now&&(Date.now=b)} -function $Tb(a,b){var c,d;d=BD(vNb(b,(Nyc(),Vxc)),98);yNb(b,(wtc(),dtc),d);c=b.e;!!c&&(MAb(new YAb(null,new Kub(c.a,16)),new dUb(a)),MAb(LAb(new YAb(null,new Kub(c.b,16)),new fUb),new hUb(a)))} -function _$b(a){var b,c,d,e;if(gad(BD(vNb(a.b,(Nyc(),Lwc)),103))){return 0}b=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(c.k==(j0b(),h0b)){e=c.o.a;b=$wnd.Math.max(b,e)}}return b} -function c5b(a){switch(BD(vNb(a,(Nyc(),mxc)),163).g){case 1:yNb(a,mxc,(Ctc(),ztc));break;case 2:yNb(a,mxc,(Ctc(),Atc));break;case 3:yNb(a,mxc,(Ctc(),xtc));break;case 4:yNb(a,mxc,(Ctc(),ytc));}} -function yrc(){yrc=ccb;wrc=new zrc(ane,0);trc=new zrc(jle,1);xrc=new zrc(kle,2);vrc=new zrc('LEFT_RIGHT_CONSTRAINT_LOCKING',3);urc=new zrc('LEFT_RIGHT_CONNECTION_LOCKING',4);rrc=new zrc(Vne,5)} -function qRc(a,b,c){var d,e,f,g,h,i,j;h=c.a/2;f=c.b/2;d=$wnd.Math.abs(b.a-a.a);e=$wnd.Math.abs(b.b-a.b);i=1;j=1;d>h&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} -function sZc(a,b,c,d,e){var f,g;g=false;f=BD(Ikb(c.b,0),33);while(yZc(a,b,f,d,e)){g=true;NZc(c,f);if(c.b.c.length==0){break}f=BD(Ikb(c.b,0),33)}c.b.c.length==0&&v$c(c.j,c);g&&a$c(b.q);return g} -function t6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(s6c(a,d,e)){return true}d=e}if(s6c(a,d,c)){return true}return false} -function ckd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),bId(a.o,b,d)}return f=BD(XKd((e=BD(Ajd(a,16),26),!e?a.zh():e),c),66),f.Nj().Rj(a,yjd(a),c-aLd(a.zh()),b,d)} -function bod(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=BD(a.sb,49).ih(a,1,i5,c));!!b&&(c=BD(b,49).gh(a,1,i5,c));c=Jnd(a,b,c);!!c&&c.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,4,b,b))} -function yqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new zrd(a);hmd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new Ard(a);imd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need an end point.'))}} -function wqd(a,b){var c,d,e,f;if(b){e=Xpd(b,'x');c=new wrd(a);omd(c.a,(uCb(e),e));f=Xpd(b,'y');d=new xrd(a);pmd(d.a,(uCb(f),f))}else{throw vbb(new cqd('All edge sections need a start point.'))}} -function pyb(a,b){var c,d,e,f,g,h,i;for(d=syb(a),f=0,h=d.length;f<h;++f){yyb(b)}i=!lyb&&a.e?lyb?null:a.d:null;while(i){for(c=syb(i),e=0,g=c.length;e<g;++e){yyb(b)}i=!lyb&&i.e?lyb?null:i.d:null}} -function j0b(){j0b=ccb;h0b=new k0b('NORMAL',0);g0b=new k0b('LONG_EDGE',1);e0b=new k0b('EXTERNAL_PORT',2);i0b=new k0b('NORTH_SOUTH_PORT',3);f0b=new k0b('LABEL',4);d0b=new k0b('BREAKING_POINT',5)} -function g4b(a){var b,c,d,e;b=false;if(wNb(a,(wtc(),Csc))){c=BD(vNb(a,Csc),83);for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);if(e4b(d)){if(!b){d4b(Q_b(a));b=true}h4b(BD(c.xc(d),306))}}}} -function qec(a,b,c){var d;Odd(c,'Self-Loop routing',1);d=rec(b);RD(vNb(b,(g6c(),f6c)));MAb(NAb(JAb(JAb(LAb(new YAb(null,new Kub(b.b,16)),new uec),new wec),new yec),new Aec),new Cec(a,d));Qdd(c)} -function gsd(a){var b,c,d,e,f,g,h,i,j;j=hsd(a);c=a.e;f=c!=null;f&&Upd(j,eue,a.e);h=a.k;g=!!h;g&&Upd(j,'type',Zr(a.k));d=Fhe(a.j);e=!d;if(e){i=new wB;cC(j,Mte,i);b=new ssd(i);reb(a.j,b)}return j} -function Jv(a){var b,c,d,e;e=Kfb((Xj(a.gc(),'size'),new Vfb),123);d=true;for(c=Wm(a).Kc();c.Ob();){b=BD(c.Pb(),42);d||(e.a+=She,e);d=false;Pfb(Kfb(Pfb(e,b.cd()),61),b.dd())}return (e.a+='}',e).a} -function kD(a,b){var c,d,e;b&=63;if(b<22){c=a.l<<b;d=a.m<<b|a.l>>22-b;e=a.h<<b|a.m>>22-b}else if(b<44){c=0;d=a.l<<b-22;e=a.m<<b-22|a.l>>44-b}else{c=0;d=0;e=a.l<<b-44}return TC(c&Eje,d&Eje,e&Fje)} -function Hcb(a){Gcb==null&&(Gcb=new RegExp('^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$'));if(!Gcb.test(a)){throw vbb(new Oeb(Oje+a+'"'))}return parseFloat(a)} -function IFb(a){var b,c,d,e;b=new Rkb;c=KC(sbb,dle,25,a.a.c.length,16,1);Glb(c,c.length);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),121);if(!c[d.d]){b.c[b.c.length]=d;HFb(a,d,c)}}return b} -function Nmc(a,b){var c,d,e,f;f=b.b.j;a.a=KC(WD,oje,25,f.c.length,15,1);e=0;for(d=0;d<f.c.length;d++){c=(tCb(d,f.c.length),BD(f.c[d],11));c.e.c.length==0&&c.g.c.length==0?(e+=1):(e+=3);a.a[d]=e}} -function Sqc(){Sqc=ccb;Nqc=new Uqc('ALWAYS_UP',0);Mqc=new Uqc('ALWAYS_DOWN',1);Pqc=new Uqc('DIRECTION_UP',2);Oqc=new Uqc('DIRECTION_DOWN',3);Rqc=new Uqc('SMART_UP',4);Qqc=new Uqc('SMART_DOWN',5)} -function k6c(a,b){if(a<0||b<0){throw vbb(new Wdb('k and n must be positive'))}else if(b>a){throw vbb(new Wdb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:q6c(a)/(q6c(b)*q6c(a-b))} -function jfd(a,b){var c,d,e,f;c=new _ud(a);while(c.g==null&&!c.c?Uud(c):c.g==null||c.i!=0&&BD(c.g[c.i-1],47).Ob()){f=BD(Vud(c),56);if(JD(f,160)){d=BD(f,160);for(e=0;e<b.length;e++){b[e].og(d)}}}} -function fld(a){var b;if((a.Db&64)!=0)return Mkd(a);b=new Jfb(Mkd(a));b.a+=' (height: ';Bfb(b,a.f);b.a+=', width: ';Bfb(b,a.g);b.a+=', x: ';Bfb(b,a.i);b.a+=', y: ';Bfb(b,a.j);b.a+=')';return b.a} -function un(a){var b,c,d,e,f,g,h;b=new $rb;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];g=Qb(c.cd());h=Xrb(b,g,Qb(c.dd()));if(h!=null){throw vbb(new Wdb('duplicate key: '+g))}}this.b=(mmb(),new iob(b))} -function Rlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];uwb(f,String.fromCharCode(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function SRb(){SRb=ccb;MRb=(XRb(),WRb);LRb=new Nsd(mme,MRb);meb(1);KRb=new Nsd(nme,meb(300));meb(0);PRb=new Nsd(ome,meb(0));new Tfd;QRb=new Nsd(pme,qme);new Tfd;NRb=new Nsd(rme,5);RRb=WRb;ORb=VRb} -function NUb(a,b){var c,d,e,f,g;e=b==1?KUb:JUb;for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),103);for(g=BD(Qc(a.f.c,c),21).Kc();g.Ob();){f=BD(g.Pb(),46);Ekb(a.b.b,BD(f.b,81));Ekb(a.b.a,BD(f.b,81).d)}}} -function kVd(a,b){var c;if(b!=null&&!a.c.Yj().wj(b)){c=JD(b,56)?BD(b,56).Tg().zb:hdb(rb(b));throw vbb(new Cdb(ite+a.c.ne()+"'s type '"+a.c.Yj().ne()+"' does not permit a value of type '"+c+"'"))}} -function cZb(a,b,c){var d,e;e=new Bib(a.b,0);while(e.b<e.d.gc()){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),70));if(PD(vNb(d,(wtc(),btc)))!==PD(b)){continue}Y$b(d.n,Q_b(a.c.i),c);uib(e);Ekb(b.b,d)}} -function vdc(a,b){if(b.a){switch(BD(vNb(b.b,(wtc(),dtc)),98).g){case 0:case 1:llc(b);case 2:MAb(new YAb(null,new Kub(b.d,16)),new Idc);wkc(a.a,b);}}else{MAb(new YAb(null,new Kub(b.d,16)),new Idc)}} -function Znc(a){var b,c;c=$wnd.Math.sqrt((a.k==null&&(a.k=Soc(a,new bpc)),Edb(a.k)/(a.b*(a.g==null&&(a.g=Poc(a,new _oc)),Edb(a.g)))));b=Tbb(Cbb($wnd.Math.round(c)));b=$wnd.Math.min(b,a.f);return b} -function H0b(){z0b();n_b.call(this);this.j=(Ucd(),Scd);this.a=new d7c;new L_b;this.f=(Xj(2,Jie),new Skb(2));this.e=(Xj(4,Jie),new Skb(4));this.g=(Xj(4,Jie),new Skb(4));this.b=new Z0b(this.e,this.g)} -function j3b(a,b){var c,d;if(Ccb(DD(vNb(b,(wtc(),ltc))))){return false}d=b.c.i;if(a==(Ctc(),xtc)){if(d.k==(j0b(),f0b)){return false}}c=BD(vNb(d,(Nyc(),mxc)),163);if(c==ytc){return false}return true} -function k3b(a,b){var c,d;if(Ccb(DD(vNb(b,(wtc(),ltc))))){return false}d=b.d.i;if(a==(Ctc(),ztc)){if(d.k==(j0b(),f0b)){return false}}c=BD(vNb(d,(Nyc(),mxc)),163);if(c==Atc){return false}return true} -function L3b(a,b){var c,d,e,f,g,h,i;g=a.d;i=a.o;h=new J6c(-g.b,-g.d,g.b+i.a+g.c,g.d+i.b+g.a);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];!!c&&H6c(h,c.i)}g.b=-h.c;g.d=-h.d;g.c=h.b-g.b-i.a;g.a=h.a-g.d-i.b} -function N_c(){N_c=ccb;I_c=new O_c('CENTER_DISTANCE',0);J_c=new O_c('CIRCLE_UNDERLAP',1);M_c=new O_c('RECTANGLE_UNDERLAP',2);K_c=new O_c('INVERTED_OVERLAP',3);L_c=new O_c('MINIMUM_ROOT_DISTANCE',4)} -function jde(a){hde();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=KC(TD,$ie,25,e,15,1);for(c=0;c<d;c++){f=a[c];f<0&&(f+=256);b[c*2]=gde[f>>4];b[c*2+1]=gde[f&15]}return zfb(b,0,b.length)} -function fn(a){Vm();var b,c,d;d=a.c.length;switch(d){case 0:return Um;case 1:b=BD(qr(new olb(a)),42);return ln(b.cd(),b.dd());default:c=BD(Qkb(a,KC(CK,zie,42,a.c.length,0,1)),165);return new wx(c);}} -function ITb(a){var b,c,d,e,f,g;b=new jkb;c=new jkb;Wjb(b,a);Wjb(c,a);while(c.b!=c.c){e=BD(fkb(c),37);for(g=new olb(e.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.e){d=f.e;Wjb(b,d);Wjb(c,d)}}}return b} -function Y_b(a,b){switch(b.g){case 1:return Nq(a.j,(z0b(),v0b));case 2:return Nq(a.j,(z0b(),t0b));case 3:return Nq(a.j,(z0b(),x0b));case 4:return Nq(a.j,(z0b(),y0b));default:return mmb(),mmb(),jmb;}} -function tic(a,b){var c,d,e;c=uic(b,a.e);d=BD(Ohb(a.g.f,c),19).a;e=a.a.c.length-1;if(a.a.c.length!=0&&BD(Ikb(a.a,e),287).c==d){++BD(Ikb(a.a,e),287).a;++BD(Ikb(a.a,e),287).b}else{Ekb(a.a,new Dic(d))}} -function VGc(a,b,c){var d,e;d=UGc(a,b,c);if(d!=0){return d}if(wNb(b,(wtc(),Zsc))&&wNb(c,Zsc)){e=beb(BD(vNb(b,Zsc),19).a,BD(vNb(c,Zsc),19).a);e<0?WGc(a,b,c):e>0&&WGc(a,c,b);return e}return TGc(a,b,c)} -function MSc(a,b,c){var d,e,f,g;if(b.b!=0){d=new Psb;for(g=Jsb(b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);ye(d,URc(f));e=f.e;e.a=BD(vNb(f,(mTc(),kTc)),19).a;e.b=BD(vNb(f,lTc),19).a}MSc(a,d,Udd(c,d.b/a.a|0))}} -function JZc(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(LZc(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+1<f){c=MZc(a,e,false);if(c.b<=e&&c.a<=b){g=e;f=e}else{d=e}e=(f-d)/2+d}return g} -function t2c(a,b,c){var d;d=o2c(a,b,true);Odd(c,'Recursive Graph Layout',d);jfd(b,OC(GC(g2,1),Uhe,527,0,[new q3c]));ikd(b,(Y9c(),F9c))||jfd(b,OC(GC(g2,1),Uhe,527,0,[new U3c]));u2c(a,b,null,c);Qdd(c)} -function Qdd(a){var b;if(a.p==null){throw vbb(new Zdb('The task has not begun yet.'))}if(!a.b){if(a.k){b=(Zfb(),Ibb(Cbb(Date.now()),_ie));a.q=Sbb(Qbb(b,a.o))*1.0E-9}a.c<a.r&&Rdd(a,a.r-a.c);a.b=true}} -function ofd(a){var b,c,d;d=new s7c;Dsb(d,new f7c(a.j,a.k));for(c=new Fyd((!a.a&&(a.a=new xMd(y2,a,5)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),469);Dsb(d,new f7c(b.a,b.b))}Dsb(d,new f7c(a.b,a.c));return d} -function qqd(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new Yge(i);for(k=(f.b-f.a)*f.c<0?(Xge(),Wge):new she(f);k.Ob();){j=BD(k.Pb(),19);h=Zpd(e,j.a);g=new prd(a,b,c,d);rqd(g.a,g.b,g.c,g.d,h)}}} -function Ax(b,c){var d;if(PD(b)===PD(c)){return true}if(JD(c,21)){d=BD(c,21);try{return b.gc()==d.gc()&&b.Ic(d)}catch(a){a=ubb(a);if(JD(a,173)||JD(a,205)){return false}else throw vbb(a)}}return false} -function UHb(a,b){var c;Ekb(a.d,b);c=b.rf();if(a.c){a.e.a=$wnd.Math.max(a.e.a,c.a);a.e.b+=c.b;a.d.c.length>1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} -function cmc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} -function Q6c(a,b,c,d,e){if(d<b||e<c){throw vbb(new Wdb('The highx must be bigger then lowx and the highy must be bigger then lowy'))}a.a<b?(a.a=b):a.a>d&&(a.a=d);a.b<c?(a.b=c):a.b>e&&(a.b=e);return a} -function lsd(a){if(JD(a,149)){return esd(BD(a,149))}else if(JD(a,229)){return fsd(BD(a,229))}else if(JD(a,23)){return gsd(BD(a,23))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[a])))))}} -function mhb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g<d;g++){f=f&c[g]==0}if(e==0){$fb(c,d,a,0,b);g=b}else{h=32-e;f=f&c[g]<<h==0;for(g=0;g<b-1;g++){a[g]=c[g+d]>>>e|c[g+d+1]<<h}a[g]=c[g+d]>>>e;++g}return f} -function zMc(a,b,c,d){var e,f,g;if(b.k==(j0b(),g0b)){for(f=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);g=e.c.i.k;if(g==g0b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} -function mD(a,b){var c,d,e,f;b&=63;c=a.h&Fje;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return TC(d&Eje,e&Eje,f&Fje)} -function Iic(a,b,c,d){var e;this.b=d;this.e=a==(rGc(),pGc);e=b[c];this.d=IC(sbb,[nie,dle],[177,25],16,[e.length,e.length],2);this.a=IC(WD,[nie,oje],[48,25],15,[e.length,e.length],2);this.c=new sic(b,c)} -function ljc(a){var b,c,d;a.k=new Ki((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,a.j.c.length);for(d=new olb(a.j);d.a<d.c.c.length;){c=BD(mlb(d),113);b=c.d.j;Rc(a.k,b,c)}a.e=Zjc(Ec(a.k))} -function UQc(a,b){var c,d,e;Qqb(a.d,b);c=new _Qc;Rhb(a.c,b,c);c.f=VQc(b.c);c.a=VQc(b.d);c.d=(hQc(),e=b.c.i.k,e==(j0b(),h0b)||e==d0b);c.e=(d=b.d.i.k,d==h0b||d==d0b);c.b=b.c.j==(Ucd(),Tcd);c.c=b.d.j==zcd} -function BGb(a){var b,c,d,e,f;f=Ohe;e=Ohe;for(d=new olb(LFb(a));d.a<d.c.c.length;){c=BD(mlb(d),213);b=c.e.e-c.d.e;c.e==a&&b<e?(e=b):b<f&&(f=b)}e==Ohe&&(e=-1);f==Ohe&&(f=-1);return new vgd(meb(e),meb(f))} -function zQb(a,b){var c,d,e;e=dme;d=(ROb(),OOb);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(c<e){e=c;d=POb}c=$wnd.Math.abs(a.a);if(c<e){e=c;d=QOb}c=$wnd.Math.abs(b.g-a.a);if(c<e){e=c;d=NOb}return d} -function L9b(a,b){var c,d,e,f;c=b.a.o.a;f=new Jib(Q_b(b.a).b,b.c,b.f+1);for(e=new vib(f);e.b<e.d.gc();){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),29));if(d.c.a>=c){K9b(a,b,d.p);return true}}return false} -function Iod(a){var b;if((a.Db&64)!=0)return fld(a);b=new Wfb(dte);!a.a||Qfb(Qfb((b.a+=' "',b),a.a),'"');Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} -function Z2d(a,b,c){var d,e,f,g,h;h=S6d(a.e.Tg(),b);e=BD(a.g,119);d=0;for(g=0;g<a.i;++g){f=e[g];if(h.rl(f.ak())){if(d==c){Xxd(a,g);return Q6d(),BD(b,66).Oj()?f:f.dd()}++d}}throw vbb(new qcb(gve+c+mue+d))} -function sde(a){var b,c,d;b=a.c;if(b==2||b==7||b==1){return wfe(),wfe(),ffe}else{d=qde(a);c=null;while((b=a.c)!=2&&b!=7&&b!=1){if(!c){c=(wfe(),wfe(),++vfe,new Lge(1));Kge(c,d);d=c}Kge(c,qde(a))}return d}} -function Kb(a,b,c){if(a<0||a>c){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',OC(GC(SI,1),Uhe,1,5,[meb(b),meb(a)]))} -function Pz(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].jm()&&(c=Oz(c,g)):g[0].jm()}catch(a){a=ubb(a);if(JD(a,78)){d=a;Az();Gz(JD(d,477)?BD(d,477).ae():d)}else throw vbb(a)}}return c} -function K9b(a,b,c){var d,e,f;c!=b.c+b.b.gc()&&Z9b(b.a,fac(b,c-b.c));f=b.a.c.p;a.a[f]=$wnd.Math.max(a.a[f],b.a.o.a);for(e=BD(vNb(b.a,(wtc(),ktc)),15).Kc();e.Ob();){d=BD(e.Pb(),70);yNb(d,H9b,(Bcb(),true))}} -function Wec(a,b){var c,d,e;e=Vec(b);yNb(b,(wtc(),Xsc),e);if(e){d=Ohe;!!irb(a.f,e)&&(d=BD(Wd(irb(a.f,e)),19).a);c=BD(Ikb(b.g,0),17);Ccb(DD(vNb(c,ltc)))||Rhb(a,e,meb($wnd.Math.min(BD(vNb(c,Zsc),19).a,d)))}} -function iCc(a,b,c){var d,e,f,g,h;b.p=-1;for(h=W_b(b,(KAc(),IAc)).Kc();h.Ob();){g=BD(h.Pb(),11);for(e=new olb(g.g);e.a<e.c.c.length;){d=BD(mlb(e),17);f=d.d.i;b!=f&&(f.p<0?c.Fc(d):f.p>0&&iCc(a,f,c))}}b.p=0} -function p5c(a){var b;this.c=new Psb;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=BD(gdb(e1),9),new xqb(b,BD(_Bb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} -function Wb(a){var b,c,d,e;b=Kfb(Qfb(new Wfb('Predicates.'),'and'),40);c=true;for(e=new vib(a);e.b<e.d.gc();){d=(sCb(e.b<e.d.gc()),e.d.Xb(e.c=e.b++));c||(b.a+=',',b);b.a+=''+d;c=false}return (b.a+=')',b).a} -function Rcc(a,b,c){var d,e,f;if(c<=b+2){return}e=(c-b)/2|0;for(d=0;d<e;++d){f=(tCb(b+d,a.c.length),BD(a.c[b+d],11));Nkb(a,b+d,(tCb(c-d-1,a.c.length),BD(a.c[c-d-1],11)));tCb(c-d-1,a.c.length);a.c[c-d-1]=f}} -function hjc(a,b,c){var d,e,f,g,h,i,j,k;f=a.d.p;h=f.e;i=f.r;a.g=new dIc(i);g=a.d.o.c.p;d=g>0?h[g-1]:KC(OQ,kne,10,0,0,1);e=h[g];j=g<h.length-1?h[g+1]:KC(OQ,kne,10,0,0,1);k=b==c-1;k?RHc(a.g,e,j):RHc(a.g,d,e)} -function pjc(a){var b;this.j=new Rkb;this.f=new Tqb;this.b=(b=BD(gdb(F1),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.d=KC(WD,oje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.g=a} -function QVc(a,b){var c,d,e;if(b.c.length!=0){c=RVc(a,b);e=false;while(!c){AVc(a,b,true);e=true;c=RVc(a,b)}e&&AVc(a,b,false);d=dVc(b);!!a.b&&a.b.lg(d);a.a=PVc(a,(tCb(0,b.c.length),BD(b.c[0],33)));QVc(a,d)}} -function Cid(a,b){var c,d,e;d=XKd(a.Tg(),b);c=b-a.Ah();if(c<0){if(!d){throw vbb(new Wdb(mte+b+nte))}else if(d.Ij()){e=a.Yg(d);e>=0?a.Bh(e):vid(a,d)}else{throw vbb(new Wdb(ite+d.ne()+jte))}}else{eid(a,c,d)}} -function aqd(a){var b,c;c=null;b=false;if(JD(a,204)){b=true;c=BD(a,204).a}if(!b){if(JD(a,258)){b=true;c=''+BD(a,258).a}}if(!b){if(JD(a,483)){b=true;c=''+BD(a,483).a}}if(!b){throw vbb(new vcb(Ute))}return c} -function ORd(a,b){var c,d;if(a.f){while(b.Ob()){c=BD(b.Pb(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Ub();return true}}return false}else{return b.Ob()}} -function QRd(a,b){var c,d;if(a.f){while(b.Sb()){c=BD(b.Ub(),72);d=c.ak();if(JD(d,99)&&(BD(d,18).Bb&ote)!=0&&(!a.e||d.Gj()!=x2||d.aj()!=0)&&c.dd()!=null){b.Pb();return true}}return false}else{return b.Sb()}} -function I2d(a,b,c){var d,e,f,g,h,i;i=S6d(a.e.Tg(),b);d=0;h=a.i;e=BD(a.g,119);for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){if(c==d){return g}++d;h=g+1}}if(c==d){return h}else{throw vbb(new qcb(gve+c+mue+d))}} -function d9b(a,b){var c,d,e,f;if(a.f.c.length==0){return null}else{f=new I6c;for(d=new olb(a.f);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.o;f.b=$wnd.Math.max(f.b,e.a);f.a+=e.b}f.a+=(a.f.c.length-1)*b;return f}} -function QJc(a,b,c){var d,e,f;for(e=new Sr(ur(O_b(c).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(!(!OZb(d)&&!(!OZb(d)&&d.c.i.c==d.d.i.c))){continue}f=IJc(a,d,c,new vKc);f.c.length>1&&(b.c[b.c.length]=f,true)}} -function TJc(a){var b,c,d,e;c=new Psb;ye(c,a.o);d=new twb;while(c.b!=0){b=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),508);e=KJc(a,b,true);e&&Ekb(d.a,b)}while(d.a.c.length!=0){b=BD(rwb(d),508);KJc(a,b,false)}} -function _5c(){_5c=ccb;$5c=new a6c(ole,0);T5c=new a6c('BOOLEAN',1);X5c=new a6c('INT',2);Z5c=new a6c('STRING',3);U5c=new a6c('DOUBLE',4);V5c=new a6c('ENUM',5);W5c=new a6c('ENUMSET',6);Y5c=new a6c('OBJECT',7)} -function H6c(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e<d){c=d;d=e;e=c}if(g<f){c=f;f=g;g=c}G6c(a,d,f,e-d,g-f)} -function O6d(){O6d=ccb;L6d=OC(GC(ZI,1),nie,2,6,[swe,twe,uwe,vwe,wwe,xwe,eue]);K6d=OC(GC(ZI,1),nie,2,6,[swe,'empty',twe,Qve,'elementOnly']);N6d=OC(GC(ZI,1),nie,2,6,[swe,'preserve','replace',ywe]);M6d=new y1d} -function Y$b(a,b,c){var d,e,f;if(b==c){return}d=b;do{P6c(a,d.c);e=d.e;if(e){f=d.d;O6c(a,f.b,f.d);P6c(a,e.n);d=Q_b(e)}}while(e);d=c;do{c7c(a,d.c);e=d.e;if(e){f=d.d;b7c(a,f.b,f.d);c7c(a,e.n);d=Q_b(e)}}while(e)} -function qic(a,b,c,d){var e,f,g,h,i;if(d.f.c+d.g.c==0){for(g=a.a[a.c],h=0,i=g.length;h<i;++h){f=g[h];Rhb(d,f,new zic(a,f,c))}}e=BD(Wd(irb(d.f,b)),663);e.b=0;e.c=e.f;e.c==0||Cic(BD(Ikb(e.a,e.b),287));return e} -function Apc(){Apc=ccb;wpc=new Bpc('MEDIAN_LAYER',0);ypc=new Bpc('TAIL_LAYER',1);vpc=new Bpc('HEAD_LAYER',2);xpc=new Bpc('SPACE_EFFICIENT_LAYER',3);zpc=new Bpc('WIDEST_LAYER',4);upc=new Bpc('CENTER_LAYER',5)} -function rJb(a){switch(a.g){case 0:case 1:case 2:return Ucd(),Acd;case 3:case 4:case 5:return Ucd(),Rcd;case 6:case 7:case 8:return Ucd(),Tcd;case 9:case 10:case 11:return Ucd(),zcd;default:return Ucd(),Scd;}} -function sKc(a,b){var c;if(a.c.length==0){return false}c=Lzc((tCb(0,a.c.length),BD(a.c[0],17)).c.i);FJc();if(c==(Izc(),Fzc)||c==Ezc){return true}return FAb(NAb(new YAb(null,new Kub(a,16)),new AKc),new CKc(b))} -function cRc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!d&&(d=new SRc);Dsb(d.b,b);for(f=a.a[b.g].Kc();f.Ob();){e=BD(f.Pb(),188);e.b!=b&&cRc(a,e.b,d);e.c!=b&&cRc(a,e.c,d);Dsb(d.a,e)}return d}return null} -function qSc(){qSc=ccb;pSc=new rSc('ROOT_PROC',0);lSc=new rSc('FAN_PROC',1);nSc=new rSc('NEIGHBORS_PROC',2);mSc=new rSc('LEVEL_HEIGHT',3);oSc=new rSc('NODE_POSITION_PROC',4);kSc=new rSc('DETREEIFYING_PROC',5)} -function kqd(a,b){if(JD(b,239)){return eqd(a,BD(b,33))}else if(JD(b,186)){return fqd(a,BD(b,118))}else if(JD(b,439)){return dqd(a,BD(b,202))}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} -function xu(a,b,c){var d,e;this.f=a;d=BD(Ohb(a.b,b),283);e=!d?0:d.a;Sb(c,e);if(c>=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++<e){vu(this)}}else{this.c=!d?null:d.b;while(c-->0){uu(this)}}this.b=b;this.a=null} -function rEb(a,b){var c,d;b.a?sEb(a,b):(c=BD(Exb(a.b,b.b),57),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=BD(Dxb(a.b,b.b),57),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),Fxb(a.b,b.b),undefined)} -function FJb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((tdd(),sdd))&&KJb(a,b);d=JJb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.a=d} -function OKb(a,b){var c,d;c=BD(Mpb(a.b,b),124);if(BD(BD(Qc(a.r,b),21),84).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((tdd(),sdd))&&SKb(a,b);d=RKb(a,b);KIb(a,b)==(Tbd(),Qbd)&&(d+=2*a.w);c.a.b=d} -function cOb(a,b){var c,d,e,f;f=new Rkb;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),65);Ekb(f,new oOb(c,true));Ekb(f,new oOb(c,false))}e=new hOb(a);zwb(e.a.a);kDb(f,a.b,new amb(OC(GC(JM,1),Uhe,679,0,[e])))} -function rQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.a;n=a.b;j=b.a;o=b.b;k=c.a;p=c.b;l=d.a;q=d.b;f=i*o-n*j;g=k*q-p*l;e=(i-j)*(p-q)-(n-o)*(k-l);h=(f*(k-l)-g*(i-j))/e;m=(f*(p-q)-g*(n-o))/e;return new f7c(h,m)} -function TBc(a,b){var c,d,e;if(a.d[b.p]){return}a.d[b.p]=true;a.a[b.p]=true;for(d=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)){continue}e=c.d.i;a.a[e.p]?Ekb(a.b,c):TBc(a,e)}a.a[b.p]=false} -function pCc(a,b,c){var d;d=0;switch(BD(vNb(b,(Nyc(),mxc)),163).g){case 2:d=2*-c+a.a;++a.a;break;case 1:d=-c;break;case 3:d=c;break;case 4:d=2*c+a.b;++a.b;}wNb(b,(wtc(),Zsc))&&(d+=BD(vNb(b,Zsc),19).a);return d} -function jOc(a,b,c){var d,e,f;c.zc(b,a);Ekb(a.n,b);f=a.p.eg(b);b.j==a.p.fg()?yOc(a.e,f):yOc(a.j,f);lOc(a);for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(b),new R0b(b)])));Qr(e);){d=BD(Rr(e),11);c._b(d)||jOc(a,d,c)}} -function rfd(a){var b,c,d;c=BD(hkd(a,(Y9c(),Y8c)),21);if(c.Hc((tdd(),pdd))){d=BD(hkd(a,b9c),21);b=new g7c(BD(hkd(a,_8c),8));if(d.Hc((Idd(),Bdd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}else{return new d7c}} -function PKd(a){var b,c,d;if(!a.b){d=new $Nd;for(c=new $yd(SKd(a));c.e!=c.i.gc();){b=BD(Zyd(c),18);(b.Bb&ote)!=0&&wtd(d,b)}vud(d);a.b=new nNd((BD(qud(ZKd((NFd(),MFd).o),8),18),d.i),d.g);$Kd(a).b&=-9}return a.b} -function Rmc(a,b){var c,d,e,f,g,h,i,j;i=BD(Ee(Ec(b.k),KC(F1,bne,61,2,0,1)),122);j=b.g;c=Tmc(b,i[0]);e=Smc(b,i[1]);d=Kmc(a,j,c,e);f=Tmc(b,i[1]);h=Smc(b,i[0]);g=Kmc(a,j,f,h);if(d<=g){b.a=c;b.c=e}else{b.a=f;b.c=h}} -function ESc(a,b,c){var d,e,f;Odd(c,'Processor set neighbors',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){f=BD(Xsb(d),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(e=f)}!!e&&FSc(a,new ZRc(e),c);Qdd(c)} -function PEd(a){IEd();var b,c,d,e;d=hfb(a,wfb(35));b=d==-1?a:a.substr(0,d);c=d==-1?null:a.substr(d+1);e=kFd(HEd,b);if(!e){e=aFd(b);lFd(HEd,b,e);c!=null&&(e=JEd(e,c))}else c!=null&&(e=JEd(e,(uCb(c),c)));return e} -function smb(a){var h;mmb();var b,c,d,e,f,g;if(JD(a,54)){for(e=0,d=a.gc()-1;e<d;++e,--d){h=a.Xb(e);a._c(e,a.Xb(d));a._c(d,h)}}else{b=a.Yc();f=a.Zc(a.gc());while(b.Tb()<f.Vb()){c=b.Pb();g=f.Ub();b.Wb(g);f.Wb(c)}}} -function I3b(a,b){var c,d,e;Odd(b,'End label pre-processing',1);c=Edb(ED(vNb(a,(Nyc(),nyc))));d=Edb(ED(vNb(a,ryc)));e=gad(BD(vNb(a,Lwc),103));MAb(LAb(new YAb(null,new Kub(a.b,16)),new Q3b),new S3b(c,d,e));Qdd(b)} -function NFc(a,b){var c,d,e,f,g,h;h=0;f=new jkb;Wjb(f,b);while(f.b!=f.c){g=BD(fkb(f),214);h+=pHc(g.d,g.e);for(e=new olb(g.b);e.a<e.c.c.length;){d=BD(mlb(e),37);c=BD(Ikb(a.b,d.p),214);c.s||(h+=NFc(a,c))}}return h} -function YQc(a,b,c){var d,e;TQc(this);b==(FQc(),DQc)?Qqb(this.r,a.c):Qqb(this.w,a.c);c==DQc?Qqb(this.r,a.d):Qqb(this.w,a.d);UQc(this,a);d=VQc(a.c);e=VQc(a.d);XQc(this,d,e,e);this.o=(hQc(),$wnd.Math.abs(d-e)<0.2)} -function a0d(a,b,c){var d,e,f,g,h,i;h=BD(Ajd(a.a,8),1936);if(h!=null){for(e=h,f=0,g=e.length;f<g;++f){null.jm()}}d=c;if((a.a.Db&1)==0){i=new f0d(a,c,b);d.ui(i)}JD(d,672)?BD(d,672).wi(a.a):d.ti()==a.a&&d.vi(null)} -function dae(){var a;if(Z9d)return BD(nUd((yFd(),xFd),Ewe),1945);eae();a=BD(JD(Phb((yFd(),xFd),Ewe),586)?Phb(xFd,Ewe):new cae,586);Z9d=true;aae(a);bae(a);Rhb((JFd(),IFd),a,new fae);Tnd(a);Shb(xFd,Ewe,a);return a} -function xA(a,b,c,d){var e;e=oA(a,c,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje]),b);e<0&&(e=oA(a,c,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} -function AA(a,b,c,d){var e;e=oA(a,c,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje]),b);e<0&&(e=oA(a,c,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} -function NVb(a){var b,c,d;KVb(a);d=new Rkb;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);Ekb(d,new ZVb(b,true));Ekb(d,new ZVb(b,false))}RVb(a.c);rXb(d,a.b,new amb(OC(GC(bQ,1),Uhe,369,0,[a.c])));MVb(a)} -function c4b(a){var b,c,d,e;c=new Lqb;for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);b=BD(d.We((wtc(),Dsc)),17);!!irb(c.f,b)||Rhb(c,b,new p4b(b));Ekb(BD(Wd(irb(c.f,b)),456).b,d)}return new Tkb(new $ib(c))} -function Gac(a,b){var c,d,e,f,g;d=new kkb(a.j.c.length);c=null;for(f=new olb(a.j);f.a<f.c.c.length;){e=BD(mlb(f),11);if(e.j!=c){d.b==d.c||Hac(d,c,b);Yjb(d);c=e.j}g=N3b(e);!!g&&(Xjb(d,g),true)}d.b==d.c||Hac(d,c,b)} -function wbc(a,b){var c,d,e;d=new Bib(a.b,0);while(d.b<d.d.gc()){c=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),70));e=BD(vNb(c,(Nyc(),Qwc)),272);if(e==(qad(),oad)){uib(d);Ekb(b.b,c);wNb(c,(wtc(),Dsc))||yNb(c,Dsc,a)}}} -function GDc(a){var b,c,d,e,f;b=sr(new Sr(ur(U_b(a).a.Kc(),new Sq)));for(e=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);c=d.c.i;f=sr(new Sr(ur(U_b(c).a.Kc(),new Sq)));b=$wnd.Math.max(b,f)}return meb(b)} -function rUc(a,b,c){var d,e,f,g;Odd(c,'Processor arrange node',1);e=null;f=new Psb;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){g=BD(Xsb(d),86);Ccb(DD(vNb(g,(mTc(),jTc))))&&(e=g)}Gsb(f,e,f.c.b,f.c);qUc(a,f,Udd(c,1));Qdd(c)} -function Ffd(a,b,c){var d,e,f;d=BD(hkd(a,(Y9c(),w8c)),21);e=0;f=0;b.a>c.a&&(d.Hc((i8c(),c8c))?(e=(b.a-c.a)/2):d.Hc(e8c)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((i8c(),g8c))?(f=(b.b-c.b)/2):d.Hc(f8c)&&(f=b.b-c.b));Efd(a,e,f)} -function aod(a,b,c,d,e,f,g,h,i,j,k,l,m){JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=g;dJd(a,h);fJd(a,i);ZId(a,j);eJd(a,k);CId(a,l);aJd(a,m);BId(a,true);AId(a,e);a.ok(f);yId(a,b);d!=null&&(a.i=null,_Id(a,d))} -function PRd(a){var b,c;if(a.f){while(a.n>0){b=BD(a.k.Xb(a.n-1),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{--a.n}}return false}else{return a.n>0}} -function Jb(a,b,c){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,[c,meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must not be greater than size (%s)',OC(GC(SI,1),Uhe,1,5,[c,meb(a),meb(b)]))}} -function Llb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Ilb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Llb(b,a,i,j,-e,f);Llb(b,a,j,h,-e,f);if(f.ue(a[j-1],a[j])<=0){while(c<d){NC(b,c++,a[i++])}return}Jlb(a,i,j,h,b,c,d,f)} -function nEb(a,b){var c,d,e;e=new Rkb;for(d=new olb(a.c.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);if(b.Lb(c)){Ekb(e,new BEb(c,true));Ekb(e,new BEb(c,false))}}tEb(a.e);kDb(e,a.d,new amb(OC(GC(JM,1),Uhe,679,0,[a.e])))} -function gnc(a,b){var c,d,e,f,g,h,i;i=b.d;e=b.b.j;for(h=new olb(i);h.a<h.c.c.length;){g=BD(mlb(h),101);f=KC(sbb,dle,25,e.c.length,16,1);Rhb(a.b,g,f);c=g.a.d.p-1;d=g.c.d.p;while(c!=d){c=(c+1)%e.c.length;f[c]=true}}} -function tOc(a,b){a.r=new uOc(a.p);sOc(a.r,a);ye(a.r.j,a.j);Osb(a.j);Dsb(a.j,b);Dsb(a.r.e,b);lOc(a);lOc(a.r);while(a.f.c.length!=0){AOc(BD(Ikb(a.f,0),129))}while(a.k.c.length!=0){AOc(BD(Ikb(a.k,0),129))}return a.r} -function yid(a,b,c){var d,e,f;e=XKd(a.Tg(),b);d=b-a.Ah();if(d<0){if(!e){throw vbb(new Wdb(mte+b+nte))}else if(e.Ij()){f=a.Yg(e);f>=0?a.sh(f,c):uid(a,e,c)}else{throw vbb(new Wdb(ite+e.ne()+jte))}}else{did(a,d,e,c)}} -function q6d(b){var c,d,e,f;d=BD(b,49).qh();if(d){try{e=null;c=nUd((yFd(),xFd),LEd(MEd(d)));if(c){f=c.rh();!!f&&(e=f.Wk(tfb(d.e)))}if(!!e&&e!=b){return q6d(e)}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}return b} -function jrb(a,b,c){var d,e,f,g;g=b==null?0:a.b.se(b);e=(d=a.a.get(g),d==null?new Array:d);if(e.length==0){a.a.set(g,e)}else{f=grb(a,b,e);if(f){return f.ed(c)}}NC(e,e.length,new pjb(b,c));++a.c;zpb(a.b);return null} -function YUc(a,b){var c,d;H2c(a.a);K2c(a.a,(PUc(),NUc),NUc);K2c(a.a,OUc,OUc);d=new j3c;e3c(d,OUc,(tVc(),sVc));PD(hkd(b,(ZWc(),LWc)))!==PD((pWc(),mWc))&&e3c(d,OUc,qVc);e3c(d,OUc,rVc);E2c(a.a,d);c=F2c(a.a,b);return c} -function uC(a){if(!a){return OB(),NB}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=qC[typeof b];return c?c(b):xC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new xB(a)}else{return new fC(a)}} -function RJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}hIb(d);iIb(d)} -function SJb(a,b,c){var d,e,f;f=a.o;d=BD(Mpb(a.p,c),244);e=d.i;e.b=gIb(d);e.a=fIb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}hIb(d);iIb(d)} -function Jgc(a,b){var c,d,e,f,g;if(b.dc()){return}e=BD(b.Xb(0),128);if(b.gc()==1){Igc(a,e,e,1,0,b);return}c=1;while(c<b.gc()){if(e.j||!e.o){f=Ogc(b,c);if(f){d=BD(f.a,19).a;g=BD(f.b,128);Igc(a,e,g,c,d,b);c=d+1;e=g}}}} -function mlc(a){var b,c,d,e,f,g;g=new Tkb(a.d);Okb(g,new Qlc);b=(Alc(),OC(GC(KV,1),Kie,270,0,[tlc,wlc,slc,zlc,vlc,ulc,ylc,xlc]));c=0;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),101);d=b[c%b.length];olc(e,d);++c}} -function o6c(a,b){i6c();var c,d,e,f;if(b.b<2){return false}f=Jsb(b,0);c=BD(Xsb(f),8);d=c;while(f.b!=f.d.c){e=BD(Xsb(f),8);if(!(m6c(a,d)&&m6c(a,e))){return false}d=e}if(!(m6c(a,d)&&m6c(a,c))){return false}return true} -function hrd(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;l=a;g=Xpd(l,'x');c=new Krd(b);Gqd(c.a,g);h=Xpd(l,'y');d=new Lrd(b);Hqd(d.a,h);i=Xpd(l,Gte);e=new Mrd(b);Iqd(e.a,i);j=Xpd(l,Fte);f=new Nrd(b);k=(Jqd(f.a,j),j);return k} -function XMd(a,b){TMd(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} -function l0d(b,c){var d,e,f;f=0;if(c.length>0){try{f=Icb(c,Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){e=a;throw vbb(new rFd(e))}else throw vbb(a)}}d=(!b.a&&(b.a=new z0d(b)),b.a);return f<d.i&&f>=0?BD(qud(d,f),56):null} -function Ib(a,b){if(a<0){return hc(The,OC(GC(SI,1),Uhe,1,5,['index',meb(a)]))}else if(b<0){throw vbb(new Wdb(Vhe+b))}else{return hc('%s (%s) must be less than size (%s)',OC(GC(SI,1),Uhe,1,5,['index',meb(a),meb(b)]))}} -function Slb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function Tlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function Ulb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function Xlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function bub(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=Ikb(a.b,b);while(b*2+1<c){d=(f=2*b+1,g=f+1,h=f,g<c&&a.a.ue(Ikb(a.b,g),Ikb(a.b,f))<0&&(h=g),h);if(a.a.ue(e,Ikb(a.b,d))<0){break}Nkb(a.b,b,Ikb(a.b,d));b=d}Nkb(a.b,b,e)} -function $Bb(a,b,c,d,e,f){var g,h,i,j,k;if(PD(a)===PD(c)){a=a.slice(b,b+e);b=0}i=c;for(h=b,j=b+e;h<j;){g=$wnd.Math.min(h+10000,j);e=g-h;k=a.slice(h,g);k.splice(0,0,d,f?e:0);Array.prototype.splice.apply(i,k);h=g;d+=e}} -function xGb(a,b,c){var d,e;d=c.d;e=c.e;if(a.g[d.d]<=a.i[b.d]&&a.i[b.d]<=a.i[d.d]&&a.g[e.d]<=a.i[b.d]&&a.i[b.d]<=a.i[e.d]){if(a.i[d.d]<a.i[e.d]){return false}return true}if(a.i[d.d]<a.i[e.d]){return true}return false} -function cRb(a){var b,c,d,e,f,g,h;d=a.a.c.length;if(d>0){g=a.c.d;h=a.d.d;e=Y6c(c7c(new f7c(h.a,h.b),g),1/(d+1));f=new f7c(g.a,g.b);for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),559);b.d.a=f.a;b.d.b=f.b;P6c(f,e)}}} -function YNb(a,b,c){var d,e,f,g,h,i;i=Pje;for(f=new olb(wOb(a.b));f.a<f.c.c.length;){e=BD(mlb(f),168);for(h=new olb(wOb(b.b));h.a<h.c.c.length;){g=BD(mlb(h),168);d=p6c(e.a,e.b,g.a,g.b,c);i=$wnd.Math.min(i,d)}}return i} -function G0b(a,b){if(!b){throw vbb(new Geb)}a.j=b;if(!a.d){switch(a.j.g){case 1:a.a.a=a.o.a/2;a.a.b=0;break;case 2:a.a.a=a.o.a;a.a.b=a.o.b/2;break;case 3:a.a.a=a.o.a/2;a.a.b=a.o.b;break;case 4:a.a.a=0;a.a.b=a.o.b/2;}}} -function dfc(a,b){var c,d,e;if(JD(b.g,10)&&BD(b.g,10).k==(j0b(),e0b)){return Pje}e=ugc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=tgc(b);if(c){d=Edb(ED(pBc(c,(Nyc(),vyc))));return $wnd.Math.max(0,d/2-0.5)}return Pje} -function ffc(a,b){var c,d,e;if(JD(b.g,10)&&BD(b.g,10).k==(j0b(),e0b)){return Pje}e=ugc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=tgc(b);if(c){d=Edb(ED(pBc(c,(Nyc(),vyc))));return $wnd.Math.max(0,d/2-0.5)}return Pje} -function xic(a){var b,c,d,e,f,g;g=CHc(a.d,a.e);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);d=a.e==(Ucd(),Tcd)?e.e:e.g;for(c=new olb(d);c.a<c.c.c.length;){b=BD(mlb(c),17);if(!OZb(b)&&b.c.i.c!=b.d.i.c){tic(a,b);++a.f;++a.c}}}} -function tpc(a,b){var c,d;if(b.dc()){return mmb(),mmb(),jmb}d=new Rkb;Ekb(d,meb(Rie));for(c=1;c<a.f;++c){a.a==null&&Toc(a);a.a[c]&&Ekb(d,meb(c))}if(d.c.length==1){return mmb(),mmb(),jmb}Ekb(d,meb(Ohe));return spc(b,d)} -function MJc(a,b){var c,d,e,f,g,h,i;g=b.c.i.k!=(j0b(),h0b);i=g?b.d:b.c;c=MZb(b,i).i;e=BD(Ohb(a.k,i),121);d=a.i[c.p].a;if(S_b(i.i)<(!c.c?-1:Jkb(c.c.a,c,0))){f=e;h=d}else{f=d;h=e}AFb(DFb(CFb(EFb(BFb(new FFb,0),4),f),h))} -function oqd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Wqd(a,Vpd(tB(c,g.a)));if(i){f=(!b.b&&(b.b=new y5d(z2,b,4,7)),b.b);wtd(f,i)}}}} -function pqd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Wqd(a,Vpd(tB(c,g.a)));if(i){f=(!b.c&&(b.c=new y5d(z2,b,5,8)),b.c);wtd(f,i)}}}} -function po(a,b,c){var d,e;d=b.a&a.f;b.b=a.b[d];a.b[d]=b;e=b.f&a.f;b.d=a.c[e];a.c[e]=b;if(!c){b.e=a.e;b.c=null;!a.e?(a.a=b):(a.e.c=b);a.e=b}else{b.e=c.e;!b.e?(a.a=b):(b.e.c=b);b.c=c.c;!b.c?(a.e=b):(b.c.e=b)}++a.i;++a.g} -function qr(a){var b,c,d;b=a.Pb();if(!a.Ob()){return b}d=Pfb(Qfb(new Ufb,'expected one element but was: <'),b);for(c=0;c<4&&a.Ob();c++){Pfb((d.a+=She,d),a.Pb())}a.Ob()&&(d.a+=', ...',d);d.a+='>';throw vbb(new Wdb(d.a))} -function lt(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=BD(Thb(a.b,b.a),283);c.a=0;++a.c}else{c=BD(Ohb(a.b,b.a),283);--c.a;!b.e?(c.b=b.c):(b.e.c=b.c);!b.c?(c.c=b.e):(b.c.e=b.e)}--a.d} -function OA(a){var b,c;c=-a.a;b=OC(GC(TD,1),$ie,25,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&aje;b[2]=b[2]+(c/60|0)%10&aje;b[3]=b[3]+(c%60/10|0)&aje;b[4]=b[4]+c%10&aje;return zfb(b,0,b.length)} -function uRb(a,b,c){var d,e;d=b.d;e=c.d;while(d.a-e.a==0&&d.b-e.b==0){d.a+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;d.b+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;e.a+=Cub(a,26)*ike+Cub(a,27)*jke-0.5;e.b+=Cub(a,26)*ike+Cub(a,27)*jke-0.5}} -function N_b(a){var b,c,d,e;a.g=new Rpb(BD(Qb(F1),290));d=0;c=(Ucd(),Acd);b=0;for(;b<a.j.c.length;b++){e=BD(Ikb(a.j,b),11);if(e.j!=c){d!=b&&Npb(a.g,c,new vgd(meb(d),meb(b)));c=e.j;d=b}}Npb(a.g,c,new vgd(meb(d),meb(b)))} -function d4b(a){var b,c,d,e,f,g,h;d=0;for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);e.p=d++;for(h=new olb(e.j);h.a<h.c.c.length;){g=BD(mlb(h),11);g.p=d++}}}} -function qPc(a,b,c,d,e){var f,g,h,i,j;if(b){for(h=b.Kc();h.Ob();){g=BD(h.Pb(),10);for(j=X_b(g,(KAc(),IAc),c).Kc();j.Ob();){i=BD(j.Pb(),11);f=BD(Wd(irb(e.f,i)),112);if(!f){f=new uOc(a.d);d.c[d.c.length]=f;jOc(f,i,e)}}}}} -function vid(a,b){var c,d,e;e=e1d((O6d(),M6d),a.Tg(),b);if(e){Q6d();BD(e,66).Oj()||(e=_1d(q1d(M6d,e)));d=(c=a.Yg(e),BD(c>=0?a._g(c,true,true):sid(a,e,true),153));BD(d,215).ol(b)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} -function ugb(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=QD($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return vgb(Cbb(a))} -function QOc(a){var b,c,d,e,f,g,h;f=new zsb;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),129);g=b.a;h=b.b;if(f.a._b(g)||f.a._b(h)){continue}e=g;d=h;if(g.e.b+g.j.b>2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} -function K5b(a,b){var c,d,e;d=new b0b(a);tNb(d,b);yNb(d,(wtc(),Gsc),b);yNb(d,(Nyc(),Vxc),(dcd(),$bd));yNb(d,mwc,(F7c(),B7c));__b(d,(j0b(),e0b));c=new H0b;F0b(c,d);G0b(c,(Ucd(),Tcd));e=new H0b;F0b(e,d);G0b(e,zcd);return d} -function Spc(a){switch(a.g){case 0:return new fGc((rGc(),oGc));case 1:return new CFc;case 2:return new fHc;default:throw vbb(new Wdb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} -function tDc(a,b){var c,d,e,f,g;a.c[b.p]=true;Ekb(a.a,b);for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(d=new b1b(f.b);llb(d.a)||llb(d.b);){c=BD(llb(d.a)?mlb(d.a):mlb(d.b),17);e=uDc(f,c).i;a.c[e.p]||tDc(a,e)}}} -function _Uc(a){var b,c,d,e,f,g,h;g=0;for(c=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));c.e!=c.i.gc();){b=BD(Dyd(c),33);h=b.g;e=b.f;d=$wnd.Math.sqrt(h*h+e*e);g=$wnd.Math.max(d,g);f=_Uc(b);g=$wnd.Math.max(f,g)}return g} -function rcd(){rcd=ccb;pcd=new scd('OUTSIDE',0);ncd=new scd('INSIDE',1);ocd=new scd('NEXT_TO_PORT_IF_POSSIBLE',2);mcd=new scd('ALWAYS_SAME_SIDE',3);lcd=new scd('ALWAYS_OTHER_SAME_SIDE',4);qcd=new scd('SPACE_EFFICIENT',5)} -function drd(a,b,c){var d,e,f,h,i,j;d=Tqd(a,(e=(Fhd(),f=new apd,f),!!c&&$od(e,c),e),b);Lkd(d,_pd(b,Vte));grd(b,d);brd(b,d);hrd(b,d);g=null;h=b;i=Ypd(h,'ports');j=new Jrd(a,d);Fqd(j.a,j.b,i);crd(a,b,d);Zqd(a,b,d);return d} -function NA(a){var b,c;c=-a.a;b=OC(GC(TD,1),$ie,25,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&aje;b[2]=b[2]+(c/60|0)%10&aje;b[4]=b[4]+(c%60/10|0)&aje;b[5]=b[5]+c%10&aje;return zfb(b,0,b.length)} -function QA(a){var b;b=OC(GC(TD,1),$ie,25,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&aje;b[5]=b[5]+(a/60|0)%10&aje;b[7]=b[7]+(a%60/10|0)&aje;b[8]=b[8]+a%10&aje;return zfb(b,0,b.length)} -function Vlb(a){var b,c,d,e,f;if(a==null){return Xhe}f=new xwb(She,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new Wfb(f.d)):Qfb(f.a,f.b);Nfb(f.a,''+Ubb(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} -function DGb(a,b){var c,d,e;e=Ohe;for(d=new olb(LFb(b));d.a<d.c.c.length;){c=BD(mlb(d),213);if(c.f&&!a.c[c.c]){a.c[c.c]=true;e=$wnd.Math.min(e,DGb(a,xFb(c,b)))}}a.i[b.d]=a.j;a.g[b.d]=$wnd.Math.min(e,a.j++);return a.g[b.d]} -function EKb(a,b){var c,d,e;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);d.e.b=(c=d.b,c.Xe((Y9c(),s9c))?c.Hf()==(Ucd(),Acd)?-c.rf().b-Edb(ED(c.We(s9c))):Edb(ED(c.We(s9c))):c.Hf()==(Ucd(),Acd)?-c.rf().b:0)}} -function LPb(a){var b,c,d,e,f,g,h;c=IOb(a.e);f=Y6c(b7c(R6c(HOb(a.e)),a.d*a.a,a.c*a.b),-0.5);b=c.a-f.a;e=c.b-f.b;for(h=0;h<a.c;h++){d=b;for(g=0;g<a.d;g++){JOb(a.e,new J6c(d,e,a.a,a.b))&&aNb(a,g,h,false,true);d+=a.a}e+=a.b}} -function s2c(a){var b,c,d;if(Ccb(DD(hkd(a,(Y9c(),M8c))))){d=new Rkb;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);Qld(b)&&Ccb(DD(hkd(b,N8c)))&&(d.c[d.c.length]=b,true)}return d}else{return mmb(),mmb(),jmb}} -function Vpd(a){var b,c;c=false;if(JD(a,204)){c=true;return BD(a,204).a}if(!c){if(JD(a,258)){b=BD(a,258).a%1==0;if(b){c=true;return meb(Idb(BD(a,258).a))}}}throw vbb(new cqd("Id must be a string or an integer: '"+a+"'."))} -function k0d(a,b){var c,d,e,f,g,h;f=null;for(e=new x0d((!a.a&&(a.a=new z0d(a)),a.a));u0d(e);){c=BD(Vud(e),56);d=(g=c.Tg(),h=(OKd(g),g.o),!h||!c.mh(h)?null:h6d(KJd(h),c.ah(h)));if(d!=null){if(dfb(d,b)){f=c;break}}}return f} -function Bw(a,b,c){var d,e,f,g,h;Xj(c,'occurrences');if(c==0){return h=BD(Hv(nd(a.a),b),14),!h?0:h.gc()}g=BD(Hv(nd(a.a),b),14);if(!g){return 0}f=g.gc();if(c>=f){g.$b()}else{e=g.Kc();for(d=0;d<c;d++){e.Pb();e.Qb()}}return f} -function ax(a,b,c){var d,e,f,g;Xj(c,'oldCount');Xj(0,'newCount');d=BD(Hv(nd(a.a),b),14);if((!d?0:d.gc())==c){Xj(0,'count');e=(f=BD(Hv(nd(a.a),b),14),!f?0:f.gc());g=-e;g>0?zh():g<0&&Bw(a,b,-g);return true}else{return false}} -function fIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=jIb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Mtb(Zzb(OAb(JAb(Plb(a.a),new xIb),new zIb)))}return h>0?h+a.n.d+a.n.a:0} -function gIb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Mtb(Zzb(OAb(JAb(Plb(a.a),new tIb),new vIb)))}else{g=kIb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} -function MJb(a,b){var c,d,e,f;f=BD(Mpb(a.b,b),124);c=f.a;for(e=BD(BD(Qc(a.r,b),21),84).Kc();e.Ob();){d=BD(e.Pb(),111);!!d.c&&(c.a=$wnd.Math.max(c.a,ZHb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} -function NQb(a,b){var c,d,e;c=BD(vNb(b,(wSb(),oSb)),19).a-BD(vNb(a,oSb),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(HSb(),DSb)),8)),BD(vNb(a,ESb),8));e=c7c(R6c(BD(vNb(b,DSb),8)),BD(vNb(b,ESb),8));return Kdb(d.a*d.b,e.a*e.b)}return c} -function iRc(a,b){var c,d,e;c=BD(vNb(b,(JTc(),ETc)),19).a-BD(vNb(a,ETc),19).a;if(c==0){d=c7c(R6c(BD(vNb(a,(mTc(),VSc)),8)),BD(vNb(a,WSc),8));e=c7c(R6c(BD(vNb(b,VSc),8)),BD(vNb(b,WSc),8));return Kdb(d.a*d.b,e.a*e.b)}return c} -function TZb(a){var b,c;c=new Ufb;c.a+='e_';b=KZb(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Qfb((c.a+=' ',c),C0b(a.c));Qfb(Pfb((c.a+='[',c),a.c.i),']');Qfb((c.a+=gne,c),C0b(a.d));Qfb(Pfb((c.a+='[',c),a.d.i),']')}return c.a} -function zRc(a){switch(a.g){case 0:return new lUc;case 1:return new sUc;case 2:return new CUc;case 3:return new IUc;default:throw vbb(new Wdb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} -function mfd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} -function mqd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new Yge(e);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);f=Zpd(c,g.a);Lte in f.a||Mte in f.a?$qd(a,f,b):erd(a,f,b);otd(BD(Ohb(a.b,Wpd(f)),79))}}} -function LJd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=wId(a);if(!!b&&(Q6d(),b.Cj()==Bve)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} -function k1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=BD(qud(d,e),170);switch($1d(q1d(a,c))){case 2:case 3:{!f&&(f=new Rkb);f.c[f.c.length]=c}}}return !f?(mmb(),mmb(),jmb):f} -function tde(a,b){var c,d,e,f;nde(a);if(a.c!=0||a.a!=123)throw vbb(new mde(tvd((h0d(),Fue))));f=b==112;d=a.d;c=gfb(a.i,125,d);if(c<0)throw vbb(new mde(tvd((h0d(),Gue))));e=qfb(a.i,d,c);a.d=c+1;return Lfe(e,f,(a.e&512)==512)} -function QTb(a){var b;b=BD(vNb(a,(Nyc(),Iwc)),314);if(b==(Rpc(),Ppc)){throw vbb(new z2c('The hierarchy aware processor '+b+' in child node '+a+' is only allowed if the root node specifies the same hierarchical processor.'))}} -function dhc(a,b){Hgc();var c,d,e,f,g,h;c=null;for(g=b.Kc();g.Ob();){f=BD(g.Pb(),128);if(f.o){continue}d=F6c(f.a);e=C6c(f.a);h=new hic(d,e,null,BD(f.d.a.ec().Kc().Pb(),17));Ekb(h.c,f.a);a.c[a.c.length]=h;!!c&&Ekb(c.d,h);c=h}} -function hKd(a,b){var c,d,e;if(!b){jKd(a,null);_Jd(a,null)}else if((b.i&4)!=0){d='[]';for(c=b.c;;c=c.c){if((c.i&4)==0){e=jfb((fdb(c),c.o+d));jKd(a,e);_Jd(a,e);break}d+='[]'}}else{e=jfb((fdb(b),b.o));jKd(a,e);_Jd(a,e)}a.yk(b)} -function b3d(a,b,c,d,e){var f,g,h,i;i=a3d(a,BD(e,56));if(PD(i)!==PD(e)){h=BD(a.g[c],72);f=R6d(b,i);mud(a,c,t3d(a,c,f));if(oid(a.e)){g=H2d(a,9,f.ak(),e,i,d,false);Qwd(g,new pSd(a.e,9,a.c,h,f,d,false));Rwd(g)}return i}return e} -function xCc(a,b,c){var d,e,f,g,h,i;d=BD(Qc(a.c,b),15);e=BD(Qc(a.c,c),15);f=d.Zc(d.gc());g=e.Zc(e.gc());while(f.Sb()&&g.Sb()){h=BD(f.Ub(),19);i=BD(g.Ub(),19);if(h!=i){return beb(h.a,i.a)}}return !f.Ob()&&!g.Ob()?0:f.Ob()?1:-1} -function m5c(c,d){var e,f,g;try{g=fs(c.a,d);return g}catch(b){b=ubb(b);if(JD(b,32)){try{f=Icb(d,Rie,Ohe);e=gdb(c.a);if(f>=0&&f<e.length){return e[f]}}catch(a){a=ubb(a);if(!JD(a,127))throw vbb(a)}return null}else throw vbb(b)}} -function tid(a,b){var c,d,e;e=e1d((O6d(),M6d),a.Tg(),b);if(e){Q6d();BD(e,66).Oj()||(e=_1d(q1d(M6d,e)));d=(c=a.Yg(e),BD(c>=0?a._g(c,true,true):sid(a,e,true),153));return BD(d,215).ll(b)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} -function BZd(){tZd();var a;if(sZd)return BD(nUd((yFd(),xFd),_ve),1939);rEd(CK,new J_d);CZd();a=BD(JD(Phb((yFd(),xFd),_ve),547)?Phb(xFd,_ve):new AZd,547);sZd=true;yZd(a);zZd(a);Rhb((JFd(),IFd),a,new EZd);Shb(xFd,_ve,a);return a} -function v2d(a,b){var c,d,e,f;a.j=-1;if(oid(a.e)){c=a.i;f=a.i!=0;lud(a,b);d=new pSd(a.e,3,a.c,null,b,c,f);e=b.Qk(a.e,a.c,null);e=h3d(a,b,e);if(!e){Uhd(a.e,d)}else{e.Ei(d);e.Fi()}}else{lud(a,b);e=b.Qk(a.e,a.c,null);!!e&&e.Fi()}} -function rA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BCb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BCb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} -function vMb(a){var b,c,d,e,f;e=BD(a.a,19).a;f=BD(a.b,19).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new vgd(meb(c),meb(d))} -function fNb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;if((i=f,j=h,i+=a.j,j+=a.k,i>=0&&j>=0&&i<a.o&&j<a.p)&&(!ZMb(b,e,g)&&hNb(a,f,h)||YMb(b,e,g)&&!iNb(a,f,h))){return true}}}return false} -function LNc(a,b,c){var d,e,f,g,h;g=a.c;h=a.d;f=l7c(OC(GC(m1,1),nie,8,0,[g.i.n,g.n,g.a])).b;e=(f+l7c(OC(GC(m1,1),nie,8,0,[h.i.n,h.n,h.a])).b)/2;d=null;g.j==(Ucd(),zcd)?(d=new f7c(b+g.i.c.c.a+c,e)):(d=new f7c(b-c,e));St(a.a,0,d)} -function Qld(a){var b,c,d,e;b=null;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));Qr(d);){c=BD(Rr(d),82);e=atd(c);if(!b){b=e}else if(b!=e){return false}}return true} -function sud(a,b,c){var d;++a.j;if(b>=a.i)throw vbb(new qcb(lue+b+mue+a.i));if(c>=a.i)throw vbb(new qcb(nue+c+mue+a.i));d=a.g[c];if(b!=c){b<c?$fb(a.g,b,a.g,b+1,c-b):$fb(a.g,c+1,a.g,c,b-c);NC(a.g,b,d);a.ei(b,d,c);a.ci()}return d} -function Rc(a,b,c){var d;d=BD(a.c.xc(b),14);if(!d){d=a.ic(b);if(d.Fc(c)){++a.d;a.c.zc(b,d);return true}else{throw vbb(new ycb('New Collection violated the Collection spec'))}}else if(d.Fc(c)){++a.d;return true}else{return false}} -function heb(a){var b,c,d;if(a<0){return 0}else if(a==0){return 32}else{d=-(a>>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-Rje;b=d>>16&4;c+=b;a<<=b;d=a-oie;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} -function $Pb(a){QPb();var b,c,d,e;PPb=new Rkb;OPb=new Lqb;NPb=new Rkb;b=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);SPb(b);for(e=new Fyd(b);e.e!=e.i.gc();){d=BD(Dyd(e),33);if(Jkb(PPb,d,0)==-1){c=new Rkb;Ekb(NPb,c);TPb(d,c)}}return NPb} -function BQb(a,b,c){var d,e,f,g;a.a=c.b.d;if(JD(b,352)){e=itd(BD(b,79),false,false);f=ofd(e);d=new FQb(a);reb(f,d);ifd(f,e);b.We((Y9c(),Q8c))!=null&&reb(BD(b.We(Q8c),74),d)}else{g=BD(b,470);g.Hg(g.Dg()+a.a.a);g.Ig(g.Eg()+a.a.b)}} -function _5b(a,b){var c,d,e,f,g,h,i,j;j=Edb(ED(vNb(b,(Nyc(),zyc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h<a.length;h++){d=a[h].n;e=a[h].o;c=a[h].d;f=d.a-c.b-i;f<0&&(d.a-=f);g=b.f;g.a=$wnd.Math.max(g.a,d.a+e.a);i=d.a+e.a+c.c+j}} -function D$c(a,b){var c,d,e,f,g,h;d=BD(BD(Ohb(a.g,b.a),46).a,65);e=BD(BD(Ohb(a.g,b.b),46).a,65);f=d.b;g=e.b;c=z6c(f,g);if(c>=0){return c}h=U6c(c7c(new f7c(g.c+g.b/2,g.d+g.a/2),new f7c(f.c+f.b/2,f.d+f.a/2)));return -(xOb(f,g)-1)*h} -function ufd(a,b,c){var d;MAb(new YAb(null,(!c.a&&(c.a=new cUd(A2,c,6,6)),new Kub(c.a,16))),new Mfd(a,b));MAb(new YAb(null,(!c.n&&(c.n=new cUd(D2,c,1,7)),new Kub(c.n,16))),new Ofd(a,b));d=BD(hkd(c,(Y9c(),Q8c)),74);!!d&&p7c(d,a,b)} -function sid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();BD(f,66).Oj()||(f=_1d(q1d(M6d,f)));e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));return BD(e,215).hl(b,c)}else{throw vbb(new Wdb(ite+b.ne()+lte))}} -function wAd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h<i;++h){g=BD(f[h],133);if(g.Sh()==c&&pb(d,g.cd())){return g}}}else{for(h=0;h<i;++h){g=BD(f[h],133);if(PD(g.cd())===PD(d)){return g}}}}return null} -function Pgb(a,b){var c;if(b<0){throw vbb(new ocb('Negative exponent'))}if(b==0){return Cgb}else if(b==1||Kgb(a,Cgb)||Kgb(a,Ggb)){return a}if(!Sgb(a,0)){c=1;while(!Sgb(a,c)){++c}return Ogb(bhb(c*b),Pgb(Rgb(a,c),b))}return Jhb(a,b)} -function xlb(a,b){var c,d,e;if(PD(a)===PD(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c<a.length;++c){d=a[c];e=b[c];if(!(PD(d)===PD(e)||d!=null&&pb(d,e))){return false}}return true} -function CVb(a){nVb();var b,c,d;this.b=mVb;this.c=(ead(),cad);this.f=(iVb(),hVb);this.a=a;zVb(this,new DVb);sVb(this);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);if(!c.d){b=new gVb(OC(GC(IP,1),Uhe,81,0,[c]));Ekb(a.a,b)}}} -function D3b(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new cIb(b,!c);for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),70);UHb(f,(a$b(),new v$b(d)))}g=f.i;g.a=(i=f.n,f.e.b+i.d+i.a);g.b=(h=f.n,f.e.a+h.b+h.c);return f} -function O5b(a){var b,c,d,e,f,g,h;h=l_b(a.a);Nlb(h,new T5b);c=null;for(e=h,f=0,g=e.length;f<g;++f){d=e[f];if(d.k!=(j0b(),e0b)){break}b=BD(vNb(d,(wtc(),Hsc)),61);if(b!=(Ucd(),Tcd)&&b!=zcd){continue}!!c&&BD(vNb(c,Qsc),15).Fc(d);c=d}} -function YOc(a,b,c){var d,e,f,g,h,i,j;i=(tCb(b,a.c.length),BD(a.c[b],329));Kkb(a,b);if(i.b/2>=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new bPc(i.c,g);Dkb(a,d++,e)}h=j+c;if(h<=i.a){f=new bPc(h,i.a);wCb(d,a.c.length);aCb(a.c,d,f)}}} -function u0d(a){var b;if(!a.c&&a.g==null){a.d=a.si(a.f);wtd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=BD(a.g[a.i-1],47)}}if(b==a.b&&null.km>=null.jm()){Vud(a);return u0d(a)}else{return b.Ob()}} -function KTb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Ydd(new Zdd,0));Odd(h,Vme,1);aUb(a.c,b);g=EYb(a.a,b);if(g.gc()==1){MTb(BD(g.Xb(0),37),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=BD(e.Pb(),37);MTb(d,Udd(h,f))}}CYb(a.a,g,b);NTb(b);Qdd(h)} -function qYb(a){this.a=a;if(a.c.i.k==(j0b(),e0b)){this.c=a.c;this.d=BD(vNb(a.c.i,(wtc(),Hsc)),61)}else if(a.d.i.k==e0b){this.c=a.d;this.d=BD(vNb(a.d.i,(wtc(),Hsc)),61)}else{throw vbb(new Wdb('Edge '+a+' is not an external edge.'))}} -function oQd(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,e,a.b));if(!b){pnd(a,null);qQd(a,0);pQd(a,null)}else if(b!=a){pnd(a,b.zb);qQd(a,b.d);c=(d=b.c,d==null?b.zb:d);pQd(a,c==null||dfb(c,b.zb)?null:c)}} -function NRd(a){var b,c;if(a.f){while(a.n<a.o){b=BD(!a.j?a.k.Xb(a.n):a.j.pi(a.n),72);c=b.ak();if(JD(c,99)&&(BD(c,18).Bb&ote)!=0&&(!a.e||c.Gj()!=x2||c.aj()!=0)&&b.dd()!=null){return true}else{++a.n}}return false}else{return a.n<a.o}} -function _i(a,b){var c;this.e=(im(),Qb(a),im(),nm(a));this.c=(Qb(b),nm(b));Lb(this.e.Hd().dc()==this.c.Hd().dc());this.d=Ev(this.e);this.b=Ev(this.c);c=IC(SI,[nie,Uhe],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2);this.a=c;Ri(this)} -function vz(b){var c=(!tz&&(tz=wz()),tz);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return uz(a,c)});return '"'+d+'"'} -function cEb(a){ODb();var b,c;this.b=LDb;this.c=NDb;this.g=(FDb(),EDb);this.d=(ead(),cad);this.a=a;RDb(this);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);!b.a&&pDb(rDb(new sDb,OC(GC(PM,1),Uhe,57,0,[b])),a);b.e=new K6c(b.d)}} -function HQb(a){var b,c,d,e,f,g;e=a.e.c.length;d=KC(yK,eme,15,e,0,1);for(g=new olb(a.e);g.a<g.c.c.length;){f=BD(mlb(g),144);d[f.b]=new Psb}for(c=new olb(a.c);c.a<c.c.c.length;){b=BD(mlb(c),282);d[b.c.b].Fc(b);d[b.d.b].Fc(b)}return d} -function fDc(a){var b,c,d,e,f,g,h;h=Pu(a.c.length);for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),10);g=new Tqb;f=U_b(d);for(c=new Sr(ur(f.a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);b.c.i==b.d.i||Qqb(g,b.d.i)}h.c[h.c.length]=g}return h} -function ozd(a,b){var c,d,e,f,g;c=BD(Ajd(a.a,4),126);g=c==null?0:c.length;if(b>=g)throw vbb(new Cyd(b,g));e=c[b];if(g==1){d=null}else{d=KC($3,hve,415,g-1,0,1);$fb(c,0,d,0,b);f=g-b-1;f>0&&$fb(c,b+1,d,b,f)}b0d(a,d);a0d(a,b,e);return e} -function m8d(){m8d=ccb;k8d=BD(qud(ZKd((r8d(),q8d).qb),6),34);h8d=BD(qud(ZKd(q8d.qb),3),34);i8d=BD(qud(ZKd(q8d.qb),4),34);j8d=BD(qud(ZKd(q8d.qb),5),18);XId(k8d);XId(h8d);XId(i8d);XId(j8d);l8d=new amb(OC(GC(t5,1),Mve,170,0,[k8d,h8d]))} -function AJb(a,b){var c;this.d=new H_b;this.b=b;this.e=new g7c(b.qf());c=a.u.Hc((rcd(),ocd));a.u.Hc(ncd)?a.D?(this.a=c&&!b.If()):(this.a=true):a.u.Hc(pcd)?c?(this.a=!(b.zf().Kc().Ob()||b.Bf().Kc().Ob())):(this.a=false):(this.a=false)} -function IKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Tcd)?-d.rf().a-Edb(ED(d.We(s9c))):c+Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Tcd)?-d.rf().a:c)}} -function Q1b(a,b){var c,d,e,f;c=BD(vNb(a,(Nyc(),Lwc)),103);f=BD(hkd(b,$xc),61);e=BD(vNb(a,Vxc),98);if(e!=(dcd(),bcd)&&e!=ccd){if(f==(Ucd(),Scd)){f=lfd(b,c);f==Scd&&(f=Zcd(c))}}else{d=M1b(b);d>0?(f=Zcd(c)):(f=Wcd(Zcd(c)))}jkd(b,$xc,f)} -function olc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&Okb(g,new Ulc);e=g.c.length/2|0;for(d=0;d<e;d++){f=(tCb(d,g.c.length),BD(g.c[d],113));f.c&&G0b(f.d,b.a)}for(c=e;c<g.c.length;c++){f=(tCb(c,g.c.length),BD(g.c[c],113));f.c&&G0b(f.d,b.b)}} -function TGc(a,b,c){var d,e,f;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){f=Ddb(d.a,e.a);f<0?WGc(a,b,c):f>0&&WGc(a,c,b);return f}else if(d.a!=null){WGc(a,b,c);return -1}else if(e.a!=null){WGc(a,c,b);return 1}return 0} -function swd(a,b){var c,d,e,f;if(a.ej()){c=a.Vi();f=a.fj();++a.j;a.Hi(c,a.oi(c,b));d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{Bvd(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} -function D2d(a,b){var c,d,e,f,g;g=S6d(a.e.Tg(),b);e=new yud;c=BD(a.g,119);for(f=a.i;--f>=0;){d=c[f];g.rl(d.ak())&&wtd(e,d)}!Yxd(a,e)&&oid(a.e)&&GLd(a,b.$j()?H2d(a,6,b,(mmb(),jmb),null,-1,false):H2d(a,b.Kj()?2:1,b,null,null,-1,false))} -function Dhb(){Dhb=ccb;var a,b;Bhb=KC(cJ,nie,91,32,0,1);Chb=KC(cJ,nie,91,32,0,1);a=1;for(b=0;b<=18;b++){Bhb[b]=ghb(a);Chb[b]=ghb(Nbb(a,b));a=Ibb(a,5)}for(;b<Chb.length;b++){Bhb[b]=Ogb(Bhb[b-1],Bhb[1]);Chb[b]=Ogb(Chb[b-1],(Hgb(),Egb))}} -function K4b(a,b){var c,d,e,f,g;if(a.a==(yrc(),wrc)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.j){d=b.A;g=d.c.c.a-d.o.a/2;e=f-(d.n.a+d.o.a);if(e>g){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} -function wcc(a,b){var c;Odd(b,'Partition preprocessing',1);c=BD(GAb(JAb(LAb(JAb(new YAb(null,new Kub(a.a,16)),new Acc),new Ccc),new Ecc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);MAb(c.Oc(),new Gcc);Qdd(b)} -function DMc(a){wMc();var b,c,d,e,f,g,h;c=new $rb;for(e=new olb(a.e.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);h=a.g[f.p];b=BD(Wrb(c,h),15);if(!b){b=new Rkb;Xrb(c,h,b)}b.Fc(f)}}return c} -function dRc(a,b){var c,d,e,f,g;e=b.b.b;a.a=KC(yK,eme,15,e,0,1);a.b=KC(sbb,dle,25,e,16,1);for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);a.a[f.g]=new Psb}for(d=Jsb(b.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);a.a[c.b.g].Fc(c);a.a[c.c.g].Fc(c)}} -function qmd(a){var b;if((a.Db&64)!=0)return Eid(a);b=new Jfb(Eid(a));b.a+=' (startX: ';Bfb(b,a.j);b.a+=', startY: ';Bfb(b,a.k);b.a+=', endX: ';Bfb(b,a.b);b.a+=', endY: ';Bfb(b,a.c);b.a+=', identifier: ';Efb(b,a.d);b.a+=')';return b.a} -function EId(a){var b;if((a.Db&64)!=0)return qnd(a);b=new Jfb(qnd(a));b.a+=' (ordered: ';Ffb(b,(a.Bb&256)!=0);b.a+=', unique: ';Ffb(b,(a.Bb&512)!=0);b.a+=', lowerBound: ';Cfb(b,a.s);b.a+=', upperBound: ';Cfb(b,a.t);b.a+=')';return b.a} -function Wnd(a,b,c,d,e,f,g,h){var i;JD(a.Cb,88)&&XMd($Kd(BD(a.Cb,88)),4);pnd(a,c);a.f=d;dJd(a,e);fJd(a,f);ZId(a,g);eJd(a,false);CId(a,true);aJd(a,h);BId(a,true);AId(a,0);a.b=0;DId(a,1);i=xId(a,b,null);!!i&&i.Fi();MJd(a,false);return a} -function fyb(a,b){var c,d,e,f;c=BD(Phb(a.a,b),512);if(!c){d=new wyb(b);e=(oyb(),lyb)?null:d.c;f=qfb(e,0,$wnd.Math.max(0,kfb(e,wfb(46))));vyb(d,fyb(a,f));(lyb?null:d.c).length==0&&qyb(d,new zyb);Shb(a.a,lyb?null:d.c,d);return d}return c} -function BOb(a,b){var c;a.b=b;a.g=new Rkb;c=COb(a.b);a.e=c;a.f=c;a.c=Ccb(DD(vNb(a.b,(fFb(),$Eb))));a.a=ED(vNb(a.b,(Y9c(),r8c)));a.a==null&&(a.a=1);Edb(a.a)>1?(a.e*=Edb(a.a)):(a.f/=Edb(a.a));DOb(a);EOb(a);AOb(a);yNb(a.b,(CPb(),uPb),a.g)} -function Y5b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new olb(a);f.a<f.c.c.length;){e=BD(mlb(f),10);yNb(e,(Nyc(),mwc),(F7c(),B7c));e.o.a=d;for(h=Y_b(e,(Ucd(),zcd)).Kc();h.Ob();){g=BD(h.Pb(),11);g.n.a=d}d+=i}} -function Qxd(a,b,c){var d,e,f;if(a.ej()){f=a.fj();kud(a,b,c);d=a.Zi(3,null,c,b,f);if(a.bj()){e=a.cj(c,null);a.ij()&&(e=a.jj(c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{kud(a,b,c);if(a.bj()){e=a.cj(c,null);!!e&&e.Fi()}}} -function ILd(a,b,c){var d,e,f,g,h,i;h=a.Gk(c);if(h!=c){g=a.g[b];i=h;mud(a,b,a.oi(b,i));f=g;a.gi(b,i,f);if(a.rk()){d=c;e=a.dj(d,null);!BD(h,49).eh()&&(e=a.cj(i,e));!!e&&e.Fi()}oid(a.e)&&GLd(a,a.Zi(9,c,h,b,false));return h}else{return c}} -function pVb(a,b){var c,d,e,f;for(d=new olb(a.a.a);d.a<d.c.c.length;){c=BD(mlb(d),189);c.g=true}for(f=new olb(a.a.b);f.a<f.c.c.length;){e=BD(mlb(f),81);e.k=Ccb(DD(a.e.Kb(new vgd(e,b))));e.d.g=e.d.g&Ccb(DD(a.e.Kb(new vgd(e,b))))}return a} -function pkc(a){var b,c,d,e,f;c=(b=BD(gdb(F1),9),new xqb(b,BD(_Bb(b,b.length),9),0));f=BD(vNb(a,(wtc(),gtc)),10);if(f){for(e=new olb(f.j);e.a<e.c.c.length;){d=BD(mlb(e),11);PD(vNb(d,$sc))===PD(a)&&a1b(new b1b(d.b))&&rqb(c,d.j)}}return c} -function zCc(a,b,c){var d,e,f,g,h;if(a.d[c.p]){return}for(e=new Sr(ur(U_b(c).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);h=d.d.i;for(g=new Sr(ur(R_b(h).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);f.c.i==b&&(a.a[f.p]=true)}zCc(a,b,h)}a.d[c.p]=true} -function Bjd(a,b){var c,d,e,f,g,h,i;d=aeb(a.Db&254);if(d==1){a.Eb=null}else{f=CD(a.Eb);if(d==2){e=zjd(a,b);a.Eb=f[e==0?1:0]}else{g=KC(SI,Uhe,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} -function n1d(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new cUd(t5,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=BD(qud(d,e),170);switch($1d(q1d(a,c))){case 4:case 5:case 6:{!f&&(f=new Rkb);f.c[f.c.length]=c;break}}}return !f?(mmb(),mmb(),jmb):f} -function Uee(a){var b;b=0;switch(a){case 105:b=2;break;case 109:b=8;break;case 115:b=4;break;case 120:b=16;break;case 117:b=32;break;case 119:b=64;break;case 70:b=256;break;case 72:b=128;break;case 88:b=512;break;case 44:b=zte;}return b} -function Ghb(a,b,c,d,e){var f,g,h,i;if(PD(a)===PD(b)&&d==e){Lhb(a,d,c);return}for(h=0;h<d;h++){g=0;f=a[h];for(i=0;i<e;i++){g=wbb(wbb(Ibb(xbb(f,Yje),xbb(b[i],Yje)),xbb(c[h+i],Yje)),xbb(Tbb(g),Yje));c[h+i]=Tbb(g);g=Pbb(g,32)}c[h+e]=Tbb(g)}} -function COb(a){var b,c,d,e,f,g,h,i,j,k,l;k=0;j=0;e=a.a;h=e.a.gc();for(d=e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),561);b=(c.b&&LOb(c),c.a);l=b.a;g=b.b;k+=l+g;j+=l*g}i=$wnd.Math.sqrt(400*h*j-4*j+k*k)+k;f=2*(100*h-1);if(f==0){return i}return i/f} -function mOc(a,b){if(b.b!=0){isNaN(a.s)?(a.s=Edb((sCb(b.b!=0),ED(b.a.a.c)))):(a.s=$wnd.Math.min(a.s,Edb((sCb(b.b!=0),ED(b.a.a.c)))));isNaN(a.c)?(a.c=Edb((sCb(b.b!=0),ED(b.c.b.c)))):(a.c=$wnd.Math.max(a.c,Edb((sCb(b.b!=0),ED(b.c.b.c)))))}} -function Pld(a){var b,c,d,e;b=null;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));Qr(d);){c=BD(Rr(d),82);e=atd(c);if(!b){b=Xod(e)}else if(b!=Xod(e)){return true}}return false} -function Rxd(a,b){var c,d,e,f;if(a.ej()){c=a.i;f=a.fj();lud(a,b);d=a.Zi(3,null,b,c,f);if(a.bj()){e=a.cj(b,null);a.ij()&&(e=a.jj(b,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{lud(a,b);if(a.bj()){e=a.cj(b,null);!!e&&e.Fi()}}} -function rwd(a,b,c){var d,e,f;if(a.ej()){f=a.fj();++a.j;a.Hi(b,a.oi(b,c));d=a.Zi(3,null,c,b,f);if(a.bj()){e=a.cj(c,null);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.$i(d)}}else{++a.j;a.Hi(b,a.oi(b,c));if(a.bj()){e=a.cj(c,null);!!e&&e.Fi()}}} -function Wee(a){var b,c,d,e;e=a.length;b=null;for(d=0;d<e;d++){c=(BCb(d,a.length),a.charCodeAt(d));if(hfb('.*+?{[()|\\^$',wfb(c))>=0){if(!b){b=new Ifb;d>0&&Efb(b,a.substr(0,d))}b.a+='\\';Afb(b,c&aje)}else !!b&&Afb(b,c&aje)}return b?b.a:a} -function l5c(a){var b;if(!a.a){throw vbb(new Zdb('IDataType class expected for layout option '+a.f))}b=gvd(a.a);if(b==null){throw vbb(new Zdb("Couldn't create new instance of property '"+a.f+"'. "+ise+(fdb(Y3),Y3.k)+jse))}return BD(b,414)} -function aid(a){var b,c,d,e,f;f=a.eh();if(f){if(f.kh()){e=xid(a,f);if(e!=f){c=a.Vg();d=(b=a.Vg(),b>=0?a.Qg(null):a.eh().ih(a,-1-b,null,null));a.Rg(BD(e,49),c);!!d&&d.Fi();a.Lg()&&a.Mg()&&c>-1&&Uhd(a,new nSd(a,9,c,f,e));return e}}}return f} -function nTb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d<f.c.length;++d){h=(tCb(d,f.c.length),BD(f.c[d],144));for(e=d+1;e<f.c.length;++e){i=(tCb(e,f.c.length),BD(f.c[e],144));c=S6c(h.d,i.d);b=c-a.a[h.b][i.b];g+=a.i[h.b][i.b]*b*b}}return g} -function _ac(a,b){var c;if(wNb(b,(Nyc(),mxc))){return}c=hbc(BD(vNb(b,Uac),360),BD(vNb(a,mxc),163));yNb(b,Uac,c);if(Qr(new Sr(ur(O_b(b).a.Kc(),new Sq)))){return}switch(c.g){case 1:yNb(b,mxc,(Ctc(),xtc));break;case 2:yNb(b,mxc,(Ctc(),ztc));}} -function wkc(a,b){var c;mkc(a);a.a=(c=new Ji,MAb(new YAb(null,new Kub(b.d,16)),new Vkc(c)),c);rkc(a,BD(vNb(b.b,(Nyc(),Wwc)),376));tkc(a);skc(a);qkc(a);ukc(a);vkc(a,b);MAb(LAb(new YAb(null,$i(Yi(a.b).a)),new Lkc),new Nkc);b.a=false;a.a=null} -function Bod(){fod.call(this,yte,(Fhd(),Ehd));this.p=null;this.a=null;this.f=null;this.n=null;this.g=null;this.c=null;this.i=null;this.j=null;this.d=null;this.b=null;this.e=null;this.k=null;this.o=null;this.s=null;this.q=false;this.r=false} -function Csd(){Csd=ccb;Bsd=new Dsd(Wne,0);ysd=new Dsd('INSIDE_SELF_LOOPS',1);zsd=new Dsd('MULTI_EDGES',2);xsd=new Dsd('EDGE_LABELS',3);Asd=new Dsd('PORTS',4);vsd=new Dsd('COMPOUND',5);usd=new Dsd('CLUSTERS',6);wsd=new Dsd('DISCONNECTED',7)} -function Sgb(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw vbb(new ocb('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Mgb(a);if(e<d){return false}else d==e?(c=-c):(c=~c)}return (c&b)!=0} -function O1c(a,b,c,d){var e;BD(c.b,65);BD(c.b,65);BD(d.b,65);BD(d.b,65);e=c7c(R6c(BD(c.b,65).c),BD(d.b,65).c);$6c(e,YNb(BD(c.b,65),BD(d.b,65),e));BD(d.b,65);BD(d.b,65);BD(d.b,65).c.a+e.a;BD(d.b,65).c.b+e.b;BD(d.b,65);Hkb(d.a,new T1c(a,b,d))} -function vNd(a,b){var c,d,e,f,g,h,i;f=b.e;if(f){c=aid(f);d=BD(a.g,674);for(g=0;g<a.i;++g){i=d[g];if(JQd(i)==c){e=(!i.d&&(i.d=new xMd(j5,i,1)),i.d);h=BD(c.ah(Nid(f,f.Cb,f.Db>>16)),15).Xc(f);if(h<e.i){return vNd(a,BD(qud(e,h),87))}}}}return b} -function bcb(a,b,c){var d=_bb,h;var e=d[a];var f=e instanceof Array?e[0]:null;if(e&&!f){_=e}else{_=(h=b&&b.prototype,!h&&(h=_bb[b]),ecb(h));_.hm=c;!b&&(_.im=gcb);d[a]=_}for(var g=3;g<arguments.length;++g){arguments[g].prototype=_}f&&(_.gm=f)} -function Qr(a){var b;while(!BD(Qb(a.a),47).Ob()){a.d=Pr(a);if(!a.d){return false}a.a=BD(a.d.Pb(),47);if(JD(a.a,39)){b=BD(a.a,39);a.a=b.a;!a.b&&(a.b=new jkb);Wjb(a.b,a.d);if(b.b){while(!akb(b.b)){Wjb(a.b,BD(gkb(b.b),47))}}a.d=b.d}}return true} -function krb(a,b){var c,d,e,f,g;f=b==null?0:a.b.se(b);d=(c=a.a.get(f),c==null?new Array:c);for(g=0;g<d.length;g++){e=d[g];if(a.b.re(b,e.cd())){if(d.length==1){d.length=0;trb(a.a,f)}else{d.splice(g,1)}--a.c;zpb(a.b);return e.dd()}}return null} -function GGb(a,b){var c,d,e,f;e=1;b.j=true;f=null;for(d=new olb(LFb(b));d.a<d.c.c.length;){c=BD(mlb(d),213);if(!a.c[c.c]){a.c[c.c]=true;f=xFb(c,b);if(c.f){e+=GGb(a,f)}else if(!f.j&&c.a==c.e.e-c.d.e){c.f=true;Qqb(a.p,c);e+=GGb(a,f)}}}return e} -function MVb(a){var b,c,d;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=(uCb(0),0);if(d>0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} -function N3b(a){var b,c,d,e,f;e=new Rkb;f=O3b(a,e);b=BD(vNb(a,(wtc(),gtc)),10);if(b){for(d=new olb(b.j);d.a<d.c.c.length;){c=BD(mlb(d),11);PD(vNb(c,$sc))===PD(a)&&(f=$wnd.Math.max(f,O3b(c,e)))}}e.c.length==0||yNb(a,Ysc,f);return f!=-1?e:null} -function a9b(a,b,c){var d,e,f,g,h,i;f=BD(Ikb(b.e,0),17).c;d=f.i;e=d.k;i=BD(Ikb(c.g,0),17).d;g=i.i;h=g.k;e==(j0b(),g0b)?yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11)):yNb(a,(wtc(),Vsc),f);h==g0b?yNb(a,(wtc(),Wsc),BD(vNb(g,Wsc),11)):yNb(a,(wtc(),Wsc),i)} -function Rs(a,b){var c,d,e,f;f=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));c=f&a.b.length-1;e=null;for(d=a.b[c];d;e=d,d=d.a){if(d.d==f&&Hb(d.i,b)){!e?(a.b[c]=d.a):(e.a=d.a);Bs(d.c,d.f);As(d.b,d.e);--a.f;++a.e;return true}}return false} -function lD(a,b){var c,d,e,f,g;b&=63;c=a.h;d=(c&Gje)!=0;d&&(c|=-1048576);if(b<22){g=c>>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?Fje:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?Fje:0;f=d?Eje:0;e=c>>b-44}return TC(e&Eje,f&Eje,g&Fje)} -function XOb(a){var b,c,d,e,f,g;this.c=new Rkb;this.d=a;d=Pje;e=Pje;b=Qje;c=Qje;for(g=Jsb(a,0);g.b!=g.d.c;){f=BD(Xsb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new J6c(d,e,b-d,c-e)} -function Dac(a,b){var c,d,e,f,g,h;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);g.k==(j0b(),f0b)&&zac(g,b);for(d=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);yac(c,b)}}}} -function Xoc(a){var b,c,d;this.c=a;d=BD(vNb(a,(Nyc(),Lwc)),103);b=Edb(ED(vNb(a,owc)));c=Edb(ED(vNb(a,Dyc)));d==(ead(),aad)||d==bad||d==cad?(this.b=b*c):(this.b=1/(b*c));this.j=Edb(ED(vNb(a,wyc)));this.e=Edb(ED(vNb(a,vyc)));this.f=a.b.c.length} -function ADc(a){var b,c;a.e=KC(WD,oje,25,a.p.c.length,15,1);a.k=KC(WD,oje,25,a.p.c.length,15,1);for(c=new olb(a.p);c.a<c.c.c.length;){b=BD(mlb(c),10);a.e[b.p]=sr(new Sr(ur(R_b(b).a.Kc(),new Sq)));a.k[b.p]=sr(new Sr(ur(U_b(b).a.Kc(),new Sq)))}} -function DDc(a){var b,c,d,e,f,g;e=0;a.q=new Rkb;b=new Tqb;for(g=new olb(a.p);g.a<g.c.c.length;){f=BD(mlb(g),10);f.p=e;for(d=new Sr(ur(U_b(f).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);Qqb(b,c.d.i)}b.a.Bc(f)!=null;Ekb(a.q,new Vqb(b));b.a.$b();++e}} -function JTc(){JTc=ccb;CTc=new q0b(20);BTc=new Osd((Y9c(),f9c),CTc);HTc=new Osd(T9c,20);uTc=new Osd(r8c,tme);ETc=new Osd(D9c,meb(1));GTc=new Osd(H9c,(Bcb(),true));vTc=y8c;xTc=Y8c;yTc=_8c;zTc=b9c;wTc=W8c;ATc=e9c;DTc=x9c;ITc=(rTc(),pTc);FTc=nTc} -function RBd(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&JD(b,42)){a.a.qj();j=BD(b,42);i=j.cd();f=i==null?0:tb(i);g=DAd(a.a,f);c=a.a.d[g];if(c){d=BD(c.g,367);k=c.i;for(h=0;h<k;++h){e=d[h];if(e.Sh()==f&&e.Fb(j)){RBd(a,j);return true}}}}return false} -function skc(a){var b,c,d,e;for(e=BD(Qc(a.a,(Xjc(),Ujc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);c=(b=Ec(d.k),b.Hc((Ucd(),Acd))?b.Hc(zcd)?b.Hc(Rcd)?b.Hc(Tcd)?null:dkc:fkc:ekc:ckc);kkc(a,d,c[0],(Fkc(),Ckc),0);kkc(a,d,c[1],Dkc,1);kkc(a,d,c[2],Ekc,1)}} -function enc(a,b){var c,d;c=fnc(b);inc(a,b,c);uPc(a.a,BD(vNb(Q_b(b.b),(wtc(),jtc)),230));dnc(a);cnc(a,b);d=KC(WD,oje,25,b.b.j.c.length,15,1);lnc(a,b,(Ucd(),Acd),d,c);lnc(a,b,zcd,d,c);lnc(a,b,Rcd,d,c);lnc(a,b,Tcd,d,c);a.a=null;a.c=null;a.b=null} -function OYc(){OYc=ccb;LYc=(zYc(),yYc);KYc=new Nsd(Bre,LYc);IYc=new Nsd(Cre,(Bcb(),true));meb(-1);FYc=new Nsd(Dre,meb(-1));meb(-1);GYc=new Nsd(Ere,meb(-1));JYc=new Nsd(Fre,false);MYc=new Nsd(Gre,true);HYc=new Nsd(Hre,false);NYc=new Nsd(Ire,-1)} -function yld(a,b,c){switch(b){case 7:!a.e&&(a.e=new y5d(B2,a,7,4));Uxd(a.e);!a.e&&(a.e=new y5d(B2,a,7,4));ytd(a.e,BD(c,14));return;case 8:!a.d&&(a.d=new y5d(B2,a,8,5));Uxd(a.d);!a.d&&(a.d=new y5d(B2,a,8,5));ytd(a.d,BD(c,14));return;}Zkd(a,b,c)} -function At(a,b){var c,d,e,f,g;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}g=BD(b,15);if(a.gc()!=g.gc()){return false}f=g.Kc();for(d=a.Kc();d.Ob();){c=d.Pb();e=f.Pb();if(!(PD(c)===PD(e)||c!=null&&pb(c,e))){return false}}return true} -function U6b(a,b){var c,d,e,f;f=BD(GAb(LAb(LAb(new YAb(null,new Kub(b.b,16)),new $6b),new a7b),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);f.Jc(new c7b);c=0;for(e=f.Kc();e.Ob();){d=BD(e.Pb(),11);d.p==-1&&T6b(a,d,c++)}} -function Wzc(a){switch(a.g){case 0:return new KLc;case 1:return new dJc;case 2:return new tJc;case 3:return new CMc;case 4:return new $Jc;default:throw vbb(new Wdb('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} -function nqc(a){switch(a.g){case 0:return new aCc;case 1:return new VBc;case 2:return new kCc;case 3:return new rCc;case 4:return new eCc;default:throw vbb(new Wdb('No implementation is available for the cycle breaker '+(a.f!=null?a.f:''+a.g)));}} -function HWc(){HWc=ccb;BWc=new Nsd(lre,meb(0));CWc=new Nsd(mre,0);yWc=(pWc(),mWc);xWc=new Nsd(nre,yWc);meb(0);wWc=new Nsd(ore,meb(1));EWc=(sXc(),qXc);DWc=new Nsd(pre,EWc);GWc=(fWc(),eWc);FWc=new Nsd(qre,GWc);AWc=(iXc(),hXc);zWc=new Nsd(rre,AWc)} -function XXb(a,b,c){var d;d=null;!!b&&(d=b.d);hYb(a,new cWb(b.n.a-d.b+c.a,b.n.b-d.d+c.b));hYb(a,new cWb(b.n.a-d.b+c.a,b.n.b+b.o.b+d.a+c.b));hYb(a,new cWb(b.n.a+b.o.a+d.c+c.a,b.n.b-d.d+c.b));hYb(a,new cWb(b.n.a+b.o.a+d.c+c.a,b.n.b+b.o.b+d.a+c.b))} -function T6b(a,b,c){var d,e,f;b.p=c;for(f=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(b),new R0b(b)])));Qr(f);){d=BD(Rr(f),11);d.p==-1&&T6b(a,d,c)}if(b.i.k==(j0b(),g0b)){for(e=new olb(b.i.j);e.a<e.c.c.length;){d=BD(mlb(e),11);d!=b&&d.p==-1&&T6b(a,d,c)}}} -function rPc(a){var b,c,d,e,f;e=BD(GAb(IAb(UAb(a)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=dme;if(e.gc()>=2){c=e.Kc();b=ED(c.Pb());while(c.Ob()){f=b;b=ED(c.Pb());d=$wnd.Math.min(d,(uCb(b),b)-(uCb(f),f))}}return d} -function gUc(a,b){var c,d,e,f,g;d=new Psb;Gsb(d,b,d.c.b,d.c);do{c=(sCb(d.b!=0),BD(Nsb(d,d.a.a),86));a.b[c.g]=1;for(f=Jsb(c.d,0);f.b!=f.d.c;){e=BD(Xsb(f),188);g=e.c;a.b[g.g]==1?Dsb(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Gsb(d,g,d.c.b,d.c)}}while(d.b!=0)} -function Ju(a,b){var c,d,e;if(PD(b)===PD(Qb(a))){return true}if(!JD(b,15)){return false}d=BD(b,15);e=a.gc();if(e!=d.gc()){return false}if(JD(d,54)){for(c=0;c<e;c++){if(!Hb(a.Xb(c),d.Xb(c))){return false}}return true}else{return kr(a.Kc(),d.Kc())}} -function Aac(a,b){var c,d;if(a.c.length!=0){if(a.c.length==2){zac((tCb(0,a.c.length),BD(a.c[0],10)),(rbd(),nbd));zac((tCb(1,a.c.length),BD(a.c[1],10)),obd)}else{for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),10);zac(c,b)}}a.c=KC(SI,Uhe,1,0,5,1)}} -function uKc(a){var b,c;if(a.c.length!=2){throw vbb(new Zdb('Order only allowed for two paths.'))}b=(tCb(0,a.c.length),BD(a.c[0],17));c=(tCb(1,a.c.length),BD(a.c[1],17));if(b.d.i!=c.c.i){a.c=KC(SI,Uhe,1,0,5,1);a.c[a.c.length]=c;a.c[a.c.length]=b}} -function EMc(a,b){var c,d,e,f,g,h;d=new $rb;g=Gx(new amb(a.g));for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),10);if(!e){Sdd(b,'There are no classes in a balanced layout.');break}h=a.j[e.p];c=BD(Wrb(d,h),15);if(!c){c=new Rkb;Xrb(d,h,c)}c.Fc(e)}return d} -function Dqd(a,b,c){var d,e,f,g,h,i,j;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);i=Zpd(c,g.a);if(i){j=ftd(_pd(i,Ite),b);Rhb(a.f,j,i);e=Vte in i.a;e&&Lkd(j,_pd(i,Vte));grd(i,j);hrd(i,j)}}}} -function ndc(a,b){var c,d,e,f,g;Odd(b,'Port side processing',1);for(g=new olb(a.a);g.a<g.c.c.length;){e=BD(mlb(g),10);odc(e)}for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);odc(e)}}Qdd(b)} -function bfc(a,b,c){var d,e,f,g,h;e=a.f;!e&&(e=BD(a.a.a.ec().Kc().Pb(),57));cfc(e,b,c);if(a.a.a.gc()==1){return}d=b*c;for(g=a.a.a.ec().Kc();g.Ob();){f=BD(g.Pb(),57);if(f!=e){h=ugc(f);if(h.f.d){f.d.d+=d+ple;f.d.a-=d+ple}else h.f.a&&(f.d.a-=d+ple)}}} -function tQb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+cme;j=f-cme;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return Ou(OC(GC(m1,1),nie,8,0,[new f7c(k,m),new f7c(l,n)]))} -function OLc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];h=(l=a.g[f.p],Edb(a.p[l.p])+Edb(a.d[f.p])-f.d.d);i=RLc(f,d);if(i){g=(j=a.g[i.p],Edb(a.p[j.p])+Edb(a.d[i.p])+i.o.b+i.d.a);e=$wnd.Math.min(e,h-(g+jBc(a.k,f,i)))}}while(k!=f);return e} -function PLc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];g=(l=a.g[f.p],Edb(a.p[l.p])+Edb(a.d[f.p])+f.o.b+f.d.a);i=QLc(f,d);if(i){h=(j=a.g[i.p],Edb(a.p[j.p])+Edb(a.d[i.p])-i.d.d);e=$wnd.Math.min(e,h-(g+jBc(a.k,f,i)))}}while(k!=f);return e} -function hkd(a,b){var c,d;d=(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),AAd(a.o,b));if(d!=null){return d}c=b.wg();JD(c,4)&&(c==null?(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),LAd(a.o,b)):(!a.o&&(a.o=new dId((Thd(),Qhd),S2,a,0)),HAd(a.o,b,c)),a);return c} -function Hbd(){Hbd=ccb;zbd=new Ibd('H_LEFT',0);ybd=new Ibd('H_CENTER',1);Bbd=new Ibd('H_RIGHT',2);Gbd=new Ibd('V_TOP',3);Fbd=new Ibd('V_CENTER',4);Ebd=new Ibd('V_BOTTOM',5);Cbd=new Ibd('INSIDE',6);Dbd=new Ibd('OUTSIDE',7);Abd=new Ibd('H_PRIORITY',8)} -function o6d(a){var b,c,d,e,f,g,h;b=a.Hh(_ve);if(b){h=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'settingDelegates'));if(h!=null){c=new Rkb;for(e=mfb(h,'\\w+'),f=0,g=e.length;f<g;++f){d=e[f];c.c[c.c.length]=d}return c}}return mmb(),mmb(),jmb} -function sGb(a,b){var c,d,e,f,g,h,i;if(!b.f){throw vbb(new Wdb('The input edge is not a tree edge.'))}f=null;e=Ohe;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),213);h=c.d;i=c.e;if(xGb(a,h,b)&&!xGb(a,i,b)){g=i.e-h.e-c.a;if(g<e){e=g;f=c}}}return f} -function qTb(a){var b,c,d,e,f,g;if(a.f.e.c.length<=1){return}b=0;e=nTb(a);c=Pje;do{b>0&&(e=c);for(g=new olb(a.f.e);g.a<g.c.c.length;){f=BD(mlb(g),144);if(Ccb(DD(vNb(f,(bTb(),USb))))){continue}d=mTb(a,f);P6c(X6c(f.d),d)}c=nTb(a)}while(!pTb(a,b++,e,c))} -function $ac(a,b){var c,d,e;Odd(b,'Layer constraint preprocessing',1);c=new Rkb;e=new Bib(a.a,0);while(e.b<e.d.gc()){d=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),10));if(Zac(d)){Xac(d);c.c[c.c.length]=d;uib(e)}}c.c.length==0||yNb(a,(wtc(),Lsc),c);Qdd(b)} -function sjc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),70);e=c.n;a.a==(Ajc(),xjc)||a.i==(Ucd(),zcd)?(e.a=f):a.a==yjc||a.i==(Ucd(),Tcd)?(e.a=f+a.j.a-c.o.a):(e.a=f+(a.j.a-c.o.a)/2);e.b=g;P6c(e,b);g+=c.o.b+a.e}} -function LSc(a,b,c){var d,e,f,g;Odd(c,'Processor set coordinates',1);a.a=b.b.b==0?1:b.b.b;f=null;d=Jsb(b.b,0);while(!f&&d.b!=d.d.c){g=BD(Xsb(d),86);if(Ccb(DD(vNb(g,(mTc(),jTc))))){f=g;e=g.e;e.a=BD(vNb(g,kTc),19).a;e.b=0}}MSc(a,URc(f),Udd(c,1));Qdd(c)} -function xSc(a,b,c){var d,e,f;Odd(c,'Processor determine the height for each level',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Jsb(b.b,0);while(!e&&d.b!=d.d.c){f=BD(Xsb(d),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(e=f)}!!e&&ySc(a,Ou(OC(GC(q$,1),fme,86,0,[e])),c);Qdd(c)} -function brd(a,b){var c,d,e,f,g,h,i,j,k,l;j=a;i=$pd(j,'individualSpacings');if(i){d=ikd(b,(Y9c(),O9c));g=!d;if(g){e=new _fd;jkd(b,O9c,e)}h=BD(hkd(b,O9c),373);l=i;f=null;!!l&&(f=(k=$B(l,KC(ZI,nie,2,0,6,1)),new mC(l,k)));if(f){c=new Frd(l,h);reb(f,c)}}} -function frd(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=null;l=a;k=null;if(cue in l.a||due in l.a||Ote in l.a){j=null;m=etd(b);g=$pd(l,cue);c=new Ird(m);Eqd(c.a,g);h=$pd(l,due);d=new asd(m);Pqd(d.a,h);f=Ypd(l,Ote);e=new dsd(m);j=(Qqd(e.a,f),f);k=j}i=k;return i} -function $w(a,b){var c,d,e;if(b===a){return true}if(JD(b,543)){e=BD(b,835);if(a.a.d!=e.a.d||Ah(a).gc()!=Ah(e).gc()){return false}for(d=Ah(e).Kc();d.Ob();){c=BD(d.Pb(),416);if(Aw(a,c.a.cd())!=BD(c.a.dd(),14).gc()){return false}}return true}return false} -function BMb(a){var b,c,d,e;d=BD(a.a,19).a;e=BD(a.b,19).a;b=d;c=e;if(d==0&&e==0){c-=1}else{if(d==-1&&e<=0){b=0;c-=2}else{if(d<=0&&e>0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new vgd(meb(b),meb(c))} -function PIc(a,b){if(a.c<b.c){return -1}else if(a.c>b.c){return 1}else if(a.b<b.b){return -1}else if(a.b>b.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(UIc(),TIc)&&b.d==SIc){return -1}else if(a.d==SIc&&b.d==TIc){return 1}return 0} -function aNc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=NLc(a.a,g,d);if(e>0&&e<dme){c=OLc(a.a,d.i,e,a.c);TLc(a.a,d.i,-c);return c>0}else if(e<0&&-e<dme){c=PLc(a.a,d.i,-e,a.c);TLc(a.a,d.i,c);return c>0}return false} -function RZc(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new olb(a.c);l.a<l.c.c.length;){k=BD(mlb(l),33);j=k.g;i=k.f;dld(k,k.i+f*e);eld(k,k.j+d*c);cld(k,k.g+e);ald(k,a.a);++f;h=k.g;g=k.f;Ffd(k,new f7c(h,g),new f7c(j,i))}} -function Xmd(a){var b,c,d,e,f,g,h;if(a==null){return null}h=a.length;e=(h+1)/2|0;g=KC(SD,wte,25,e,15,1);h%2!=0&&(g[--e]=jnd((BCb(h-1,a.length),a.charCodeAt(h-1))));for(c=0,d=0;c<e;++c){b=jnd(bfb(a,d++));f=jnd(bfb(a,d++));g[c]=(b<<4|f)<<24>>24}return g} -function vdb(a){if(a.pe()){var b=a.c;b.qe()?(a.o='['+b.n):!b.pe()?(a.o='[L'+b.ne()+';'):(a.o='['+b.ne());a.b=b.me()+'[]';a.k=b.oe()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=ydb('.',[c,ydb('$',d)]);a.b=ydb('.',[c,ydb('.',d)]);a.k=d[d.length-1]} -function qGb(a,b){var c,d,e,f,g;g=null;for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);if(e.b.a.c.length==e.g.a.c.length){d=e.e;g=BGb(e);for(c=e.e-BD(g.a,19).a+1;c<e.e+BD(g.b,19).a;c++){b[c]<b[d]&&(d=c)}if(b[d]<b[e.e]){--b[e.e];++b[d];e.e=d}}}} -function SLc(a){var b,c,d,e,f,g,h,i;e=Pje;d=Qje;for(c=new olb(a.e.b);c.a<c.c.c.length;){b=BD(mlb(c),29);for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);i=Edb(a.p[f.p]);h=i+Edb(a.b[a.g[f.p].p]);e=$wnd.Math.min(e,i);d=$wnd.Math.max(d,h)}}return d-e} -function r1d(a,b,c,d){var e,f,g,h,i,j;i=null;e=f1d(a,b);for(h=0,j=e.gc();h<j;++h){f=BD(e.Xb(h),170);if(dfb(d,a2d(q1d(a,f)))){g=b2d(q1d(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(dfb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} -function s1d(a,b,c,d){var e,f,g,h,i,j;i=null;e=g1d(a,b);for(h=0,j=e.gc();h<j;++h){f=BD(e.Xb(h),170);if(dfb(d,a2d(q1d(a,f)))){g=b2d(q1d(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(dfb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} -function p3d(a,b,c){var d,e,f,g,h,i;g=new yud;h=S6d(a.e.Tg(),b);d=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(f=0;f<a.i;++f){e=d[f];h.rl(e.ak())&&wtd(g,e)}}else{for(f=0;f<a.i;++f){e=d[f];if(h.rl(e.ak())){i=e.dd();wtd(g,c?b3d(a,b,f,g.i,i):i)}}}return wud(g)} -function T9b(a,b){var c,d,e,f,g;c=new Rpb(EW);for(e=(Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])),f=0,g=e.length;f<g;++f){d=e[f];Opb(c,d,new Rkb)}MAb(NAb(JAb(LAb(new YAb(null,new Kub(a.b,16)),new hac),new jac),new lac(b)),new nac(c));return c} -function AVc(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(f=b.Kc();f.Ob();){e=BD(f.Pb(),33);k=e.i+e.g/2;m=e.j+e.f/2;i=a.f;g=i.i+i.g/2;h=i.j+i.f/2;j=k-g;l=m-h;d=$wnd.Math.sqrt(j*j+l*l);j*=a.e/d;l*=a.e/d;if(c){k-=j;m-=l}else{k+=j;m+=l}dld(e,k-e.g/2);eld(e,m-e.f/2)}} -function Yfe(a){var b,c,d;if(a.c)return;if(a.b==null)return;for(b=a.b.length-4;b>=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} -function UUb(a,b){var c,d,e,f,g,h,i,j;g=b==1?KUb:JUb;for(f=g.a.ec().Kc();f.Ob();){e=BD(f.Pb(),103);for(i=BD(Qc(a.f.c,e),21).Kc();i.Ob();){h=BD(i.Pb(),46);d=BD(h.b,81);j=BD(h.a,189);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} -function PFc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h<i;++h){f=g[h];c=new Dnc(j==-1?a[0]:a[j],b,(xzc(),wzc));for(d=0;d<f.length;d++){for(e=d+1;e<f.length;e++){wNb(f[d],(wtc(),Zsc))&&wNb(f[e],Zsc)&&ync(c,f[d],f[e])>0&&++k}}++j}return k} -function Eid(a){var b,c;c=new Wfb(hdb(a.gm));c.a+='@';Qfb(c,(b=tb(a)>>>0,b.toString(16)));if(a.kh()){c.a+=' (eProxyURI: ';Pfb(c,a.qh());if(a.$g()){c.a+=' eClass: ';Pfb(c,a.$g())}c.a+=')'}else if(a.$g()){c.a+=' (eClass: ';Pfb(c,a.$g());c.a+=')'}return c.a} -function TDb(a){var b,c,d,e;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}a.d==(ead(),cad)&&SDb(a,aad);for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.g=b.i}for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);d.i=Qje}a.b.Le(a);return a} -function TPc(a,b){var c,d,e,f,g;if(b<2*a.b){throw vbb(new Wdb('The knot vector must have at least two time the dimension elements.'))}a.f=1;for(e=0;e<a.b;e++){Ekb(a.e,0)}g=b+1-2*a.b;c=g;for(f=1;f<g;f++){Ekb(a.e,f/c)}if(a.d){for(d=0;d<a.b;d++){Ekb(a.e,1)}}} -function ard(a,b){var c,d,e,f,g,h,i,j,k;j=b;k=BD(_o(qo(a.i),j),33);if(!k){e=_pd(j,Vte);h="Unable to find elk node for json object '"+e;i=h+"' Panic!";throw vbb(new cqd(i))}f=Ypd(j,'edges');c=new krd(a,k);mqd(c.a,c.b,f);g=Ypd(j,Jte);d=new vrd(a);xqd(d.a,g)} -function xAd(a,b,c,d){var e,f,g,h,i;if(d!=null){e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=BD(f[h],133);if(g.Sh()==c&&pb(d,g.cd())){return h}}}}else{e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=BD(f[h],133);if(PD(g.cd())===PD(d)){return h}}}}return -1} -function nUd(a,b){var c,d,e;c=b==null?Wd(irb(a.f,null)):Crb(a.g,b);if(JD(c,235)){e=BD(c,235);e.Qh()==null&&undefined;return e}else if(JD(c,498)){d=BD(c,1938);e=d.a;!!e&&(e.yb==null?undefined:b==null?jrb(a.f,null,e):Drb(a.g,b,e));return e}else{return null}} -function ide(a){hde();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=rfb(a);f=e/2|0;c=KC(SD,wte,25,f,15,1);for(d=0;d<f;d++){g=fde[b[d*2]];if(g==-1)return null;h=fde[b[d*2+1]];if(h==-1)return null;c[d]=(g<<4|h)<<24>>24}return c} -function lKb(a,b,c){var d,e,f;e=BD(Mpb(a.i,b),306);if(!e){e=new bIb(a.d,b,c);Npb(a.i,b,e);if(sJb(b)){CHb(a.a,b.c,b.b,e)}else{f=rJb(b);d=BD(Mpb(a.p,f),244);switch(f.g){case 1:case 3:e.j=true;lIb(d,b.b,e);break;case 4:case 2:e.k=true;lIb(d,b.c,e);}}}return e} -function r3d(a,b,c,d){var e,f,g,h,i,j;h=new yud;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];i.rl(f.ak())&&wtd(h,f)}}else{for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){j=f.dd();wtd(h,d?b3d(a,b,g,h.i,j):j)}}}return xud(h,c)} -function YCc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new olb(b.j);h.a<h.c.c.length;){g=BD(mlb(h),11);for(d=new olb(g.g);d.a<d.c.c.length;){c=BD(mlb(d),17);j=c.d.i;if(b!=j){i=YCc(a,j);f=$wnd.Math.max(f,i+1)}}}XCc(a,b,f);return f}} -function YGc(a,b,c){var d,e,f;for(d=1;d<a.c.length;d++){f=(tCb(d,a.c.length),BD(a.c[d],10));e=d;while(e>0&&b.ue((tCb(e-1,a.c.length),BD(a.c[e-1],10)),f)>0){Nkb(a,e,(tCb(e-1,a.c.length),BD(a.c[e-1],10)));--e}tCb(e,a.c.length);a.c[e]=f}c.a=new Lqb;c.b=new Lqb} -function n5c(a,b,c){var d,e,f,g,h,i,j,k;k=(d=BD(b.e&&b.e(),9),new xqb(d,BD(_Bb(d,d.length),9),0));i=mfb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g<h;++g){e=f[g];if(ufb(e).length==0){continue}j=m5c(a,e);if(j==null){return null}else{rqb(k,BD(j,22))}}return k} -function KVb(a){var b,c,d;for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);d=(uCb(0),0);if(d>0){!(fad(a.a.c)&&b.n.d)&&!(gad(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(fad(a.a.c)&&b.n.a)&&!(gad(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} -function Hac(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(Ucd(),Acd)||b==zcd){xac(BD(bkb(a),15),(rbd(),nbd));xac(BD(bkb(a),15),obd)}else{xac(BD(bkb(a),15),(rbd(),obd));xac(BD(bkb(a),15),nbd)}}else{for(e=new xkb(a);e.a!=e.b;){d=BD(vkb(e),15);xac(d,c)}}} -function htd(a,b){var c,d,e,f,g,h,i;e=Nu(new qtd(a));h=new Bib(e,e.c.length);f=Nu(new qtd(b));i=new Bib(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sCb(h.b>0),BD(h.a.Xb(h.c=--h.b),33));d=(sCb(i.b>0),BD(i.a.Xb(i.c=--i.b),33));if(c==d){g=c}else{break}}return g} -function Cub(a,b){var c,d,e,f,g,h;f=a.a*kke+a.b*1502;h=a.b*kke+11;c=$wnd.Math.floor(h*lke);f+=c;h-=c*mke;f%=mke;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*wub[b])}else{e=a.a*(1<<b-24);g=$wnd.Math.floor(a.b*xub[b]);d=e+g;d>=2147483648&&(d-=Zje);return d}} -function Zic(a,b,c){var d,e,f,g;if(bjc(a,b)>bjc(a,c)){d=V_b(c,(Ucd(),zcd));a.d=d.dc()?0:B0b(BD(d.Xb(0),11));g=V_b(b,Tcd);a.b=g.dc()?0:B0b(BD(g.Xb(0),11))}else{e=V_b(c,(Ucd(),Tcd));a.d=e.dc()?0:B0b(BD(e.Xb(0),11));f=V_b(b,zcd);a.b=f.dc()?0:B0b(BD(f.Xb(0),11))}} -function l6d(a){var b,c,d,e,f,g,h;if(a){b=a.Hh(_ve);if(b){g=GD(AAd((!b.b&&(b.b=new sId((jGd(),fGd),x6,b)),b.b),'conversionDelegates'));if(g!=null){h=new Rkb;for(d=mfb(g,'\\w+'),e=0,f=d.length;e<f;++e){c=d[e];h.c[h.c.length]=c}return h}}}return mmb(),mmb(),jmb} -function FKb(a,b){var c,d,e,f;c=a.o.a;for(f=BD(BD(Qc(a.r,b),21),84).Kc();f.Ob();){e=BD(f.Pb(),111);e.e.a=c*Edb(ED(e.b.We(BKb)));e.e.b=(d=e.b,d.Xe((Y9c(),s9c))?d.Hf()==(Ucd(),Acd)?-d.rf().b-Edb(ED(d.We(s9c))):Edb(ED(d.We(s9c))):d.Hf()==(Ucd(),Acd)?-d.rf().b:0)}} -function Woc(a){var b,c,d,e,f,g,h,i;b=true;e=null;f=null;j:for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);for(d=new Sr(ur(R_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(!!e&&e!=h){b=false;break j}e=h;g=c.c.i;if(!!f&&f!=g){b=false;break j}f=g}}return b} -function OOc(a,b,c){var d,e,f,g,h,i;f=-1;h=-1;for(g=0;g<b.c.length;g++){e=(tCb(g,b.c.length),BD(b.c[g],329));if(e.c>a.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=NOc(a,b,f,h);i=$Oc((tCb(d,b.c.length),BD(b.c[d],329)));YOc(b,d,c)}return i} -function lZc(){lZc=ccb;RYc=new Osd((Y9c(),r8c),1.3);VYc=I8c;gZc=new q0b(15);fZc=new Osd(f9c,gZc);jZc=new Osd(T9c,15);SYc=w8c;_Yc=Y8c;aZc=_8c;bZc=b9c;$Yc=W8c;cZc=e9c;hZc=x9c;eZc=(OYc(),KYc);ZYc=IYc;dZc=JYc;iZc=MYc;WYc=HYc;XYc=O8c;YYc=P8c;UYc=GYc;TYc=FYc;kZc=NYc} -function Bnd(a,b,c){var d,e,f,g,h,i,j;g=(f=new RHd,f);PHd(g,(uCb(b),b));j=(!g.b&&(g.b=new sId((jGd(),fGd),x6,g)),g.b);for(i=1;i<c.length;i+=2){HAd(j,c[i-1],c[i])}d=(!a.Ab&&(a.Ab=new cUd(a5,a,0,3)),a.Ab);for(h=0;h<0;++h){e=LHd(BD(qud(d,d.i-1),590));d=e}wtd(d,g)} -function MPb(a,b,c){var d,e,f;sNb.call(this,new Rkb);this.a=b;this.b=c;this.e=a;d=(a.b&&LOb(a),a.a);this.d=KPb(d.a,this.a);this.c=KPb(d.b,this.b);kNb(this,this.d,this.c);LPb(this);for(f=this.e.e.a.ec().Kc();f.Ob();){e=BD(f.Pb(),266);e.c.c.length>0&&JPb(this,e)}} -function IQb(a,b,c,d,e,f){var g,h,i;if(!e[b.b]){e[b.b]=true;g=d;!g&&(g=new kRb);Ekb(g.e,b);for(i=f[b.b].Kc();i.Ob();){h=BD(i.Pb(),282);if(h.d==c||h.c==c){continue}h.c!=b&&IQb(a,h.c,b,g,e,f);h.d!=b&&IQb(a,h.d,b,g,e,f);Ekb(g.c,h);Gkb(g.d,h.b)}return g}return null} -function e4b(a){var b,c,d,e,f,g,h;b=0;for(e=new olb(a.e);e.a<e.c.c.length;){d=BD(mlb(e),17);c=FAb(new YAb(null,new Kub(d.b,16)),new w4b);c&&++b}for(g=new olb(a.g);g.a<g.c.c.length;){f=BD(mlb(g),17);h=FAb(new YAb(null,new Kub(f.b,16)),new y4b);h&&++b}return b>=2} -function gec(a,b){var c,d,e,f;Odd(b,'Self-Loop pre-processing',1);for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(Ljc(c)){e=(f=new Kjc(c),yNb(c,(wtc(),ntc),f),Hjc(f),f);MAb(NAb(LAb(new YAb(null,new Kub(e.d,16)),new jec),new lec),new nec);eec(e)}}Qdd(b)} -function vnc(a,b,c,d,e){var f,g,h,i,j,k;f=a.c.d.j;g=BD(Ut(c,0),8);for(k=1;k<c.b;k++){j=BD(Ut(c,k),8);Gsb(d,g,d.c.b,d.c);h=Y6c(P6c(new g7c(g),j),0.5);i=Y6c(new e7c(bRc(f)),e);P6c(h,i);Gsb(d,h,d.c.b,d.c);g=j;f=b==0?Xcd(f):Vcd(f)}Dsb(d,(sCb(c.b!=0),BD(c.c.b.c,8)))} -function Jbd(a){Hbd();var b,c,d;c=qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Dbd]));if(Ox(Cx(c,a))>1){return false}b=qqb(zbd,OC(GC(B1,1),Kie,93,0,[ybd,Bbd]));if(Ox(Cx(b,a))>1){return false}d=qqb(Gbd,OC(GC(B1,1),Kie,93,0,[Fbd,Ebd]));if(Ox(Cx(d,a))>1){return false}return true} -function U0d(a,b){var c,d,e;c=b.Hh(a.a);if(c){e=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'affiliation'));if(e!=null){d=kfb(e,wfb(35));return d==-1?l1d(a,u1d(a,bKd(b.Hj())),e):d==0?l1d(a,null,e.substr(1)):l1d(a,e.substr(0,d),e.substr(d+1))}}return null} -function ic(b){var c,d,e;try{return b==null?Xhe:fcb(b)}catch(a){a=ubb(a);if(JD(a,102)){c=a;e=hdb(rb(b))+'@'+(d=(Zfb(),kCb(b))>>>0,d.toString(16));tyb(xyb(),($xb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+hdb(c.gm)+'>'}else throw vbb(a)}} -function mzc(a){switch(a.g){case 0:return new xDc;case 1:return new ZCc;case 2:return new DCc;case 3:return new QCc;case 4:return new LDc;case 5:return new iDc;default:throw vbb(new Wdb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} -function AQc(a,b,c){var d,e,f;for(f=new olb(a.t);f.a<f.c.c.length;){d=BD(mlb(f),268);if(d.b.s<0&&d.c>0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Dsb(b,d.b)}}for(e=new olb(a.i);e.a<e.c.c.length;){d=BD(mlb(e),268);if(d.a.s<0&&d.c>0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Dsb(c,d.a)}}} -function Vud(a){var b,c,d,e,f;if(a.g==null){a.d=a.si(a.f);wtd(a,a.d);if(a.c){f=a.f;return f}}b=BD(a.g[a.i-1],47);e=b.Pb();a.e=b;c=a.si(e);if(c.Ob()){a.d=c;wtd(a,c)}else{a.d=null;while(!b.Ob()){NC(a.g,--a.i,null);if(a.i==0){break}d=BD(a.g[a.i-1],47);b=d}}return e} -function r2d(a,b){var c,d,e,f,g,h;d=b;e=d.ak();if(T6d(a.e,e)){if(e.hi()&&E2d(a,e,d.dd())){return false}}else{h=S6d(a.e.Tg(),e);c=BD(a.g,119);for(f=0;f<a.i;++f){g=c[f];if(h.rl(g.ak())){if(pb(g,d)){return false}else{BD(Gtd(a,f,b),72);return true}}}}return wtd(a,b)} -function r9b(a,b,c,d){var e,f,g,h;e=new b0b(a);__b(e,(j0b(),f0b));yNb(e,(wtc(),$sc),b);yNb(e,ktc,d);yNb(e,(Nyc(),Vxc),(dcd(),$bd));yNb(e,Vsc,b.c);yNb(e,Wsc,b.d);zbc(b,e);h=$wnd.Math.floor(c/2);for(g=new olb(e.j);g.a<g.c.c.length;){f=BD(mlb(g),11);f.n.b=h}return e} -function wac(a,b){var c,d,e,f,g,h,i,j,k;i=Pu(a.c-a.b&a.a.length-1);j=null;k=null;for(f=new xkb(a);f.a!=f.b;){e=BD(vkb(f),10);c=(h=BD(vNb(e,(wtc(),Vsc)),11),!h?null:h.i);d=(g=BD(vNb(e,Wsc),11),!g?null:g.i);if(j!=c||k!=d){Aac(i,b);j=c;k=d}i.c[i.c.length]=e}Aac(i,b)} -function HNc(a){var b,c,d,e,f,g,h;b=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),10);for(f=new Sr(ur(U_b(c).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a==e.d.i.c&&e.c.j==(Ucd(),Tcd)){g=A0b(e.c).b;h=A0b(e.d).b;b=$wnd.Math.max(b,$wnd.Math.abs(h-g))}}}return b} -function aWc(a,b,c){var d,e,f;Odd(c,'Remove overlaps',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));d=BD(hkd(b,(MUc(),LUc)),33);a.f=d;a.a=tXc(BD(hkd(b,(ZWc(),WWc)),293));e=ED(hkd(b,(Y9c(),T9c)));FVc(a,(uCb(e),e));f=gVc(d);_Vc(a,b,f,c);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} -function aYb(a,b,c){switch(c.g){case 1:return new f7c(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new f7c($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new f7c(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new f7c($wnd.Math.min(b.a,a.d.a),b.b);}return new f7c(b.a,b.b)} -function mFc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(Ucd(),Tcd):(Ucd(),zcd);e=false;for(i=b[c],j=0,k=i.length;j<k;++j){h=i[j];if(ecd(BD(vNb(h,(Nyc(),Vxc)),98))){continue}g=h.e;m=!V_b(h,l).dc()&&!!g;if(m){f=WZb(g);a.b=new sic(f,d?0:f.length-1)}e=e|nFc(a,h,l,m)}return e} -function $sd(a){var b,c,d;b=Pu(1+(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c).i);Ekb(b,(!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));for(d=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Ekb(b,(!c.d&&(c.d=new y5d(B2,c,8,5)),c.d))}return Qb(b),new sl(b)} -function _sd(a){var b,c,d;b=Pu(1+(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c).i);Ekb(b,(!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));for(d=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Ekb(b,(!c.e&&(c.e=new y5d(B2,c,7,4)),c.e))}return Qb(b),new sl(b)} -function M9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return x9d}else if(b==45){return w9d}}else if(c==3){return x9d}}return Hcb(d)}} -function aKc(a){var b,c,d,e;b=0;c=0;for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);b=Tbb(wbb(b,HAb(JAb(new YAb(null,new Kub(d.e,16)),new nLc))));c=Tbb(wbb(c,HAb(JAb(new YAb(null,new Kub(d.g,16)),new pLc))));if(b>1||c>1){return 2}}if(b+c==1){return 2}return 0} -function WQb(a,b,c){var d,e,f,g,h;Odd(c,'ELK Force',1);Ccb(DD(hkd(b,(wSb(),jSb))))||$Cb((d=new _Cb((Pgd(),new bhd(b))),d));h=TQb(b);XQb(h);YQb(a,BD(vNb(h,fSb),424));g=LQb(a.a,h);for(f=g.Kc();f.Ob();){e=BD(f.Pb(),231);tRb(a.b,e,Udd(c,1/g.gc()))}h=KQb(g);SQb(h);Qdd(c)} -function yoc(a,b){var c,d,e,f,g;Odd(b,'Breaking Point Processor',1);xoc(a);if(Ccb(DD(vNb(a,(Nyc(),Jyc))))){for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);c=0;for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);f.p=c++}}soc(a);toc(a,true);toc(a,false)}Qdd(b)} -function $1c(a,b,c){var d,e,f,g,h,i;h=a.c;for(g=(!c.q?(mmb(),mmb(),kmb):c.q).vc().Kc();g.Ob();){f=BD(g.Pb(),42);d=!WAb(JAb(new YAb(null,new Kub(h,16)),new Xxb(new m2c(b,f)))).sd((EAb(),DAb));if(d){i=f.dd();if(JD(i,4)){e=fvd(i);e!=null&&(i=e)}b.Ye(BD(f.cd(),146),i)}}} -function MQd(a,b){var c,d,e,f,g;if(!b){return null}else{f=JD(a.Cb,88)||JD(a.Cb,99);g=!f&&JD(a.Cb,322);for(d=new Fyd((!b.a&&(b.a=new KYd(b,j5,b)),b.a));d.e!=d.i.gc();){c=BD(Dyd(d),87);e=KQd(c);if(f?JD(e,88):g?JD(e,148):!!e){return e}}return f?(jGd(),_Fd):(jGd(),YFd)}} -function g3b(a,b){var c,d,e,f,g,h;Odd(b,'Constraints Postprocessor',1);g=0;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);h=0;for(d=new olb(e.a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(c.k==(j0b(),h0b)){yNb(c,(Nyc(),nxc),meb(g));yNb(c,Gwc,meb(h));++h}}++g}Qdd(b)} -function eRc(a,b,c,d){var e,f,g,h,i,j,k;i=new f7c(c,d);c7c(i,BD(vNb(b,(mTc(),WSc)),8));for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);P6c(j.e,i);Dsb(a.b,j)}for(h=Jsb(b.a,0);h.b!=h.d.c;){g=BD(Xsb(h),188);for(f=Jsb(g.a,0);f.b!=f.d.c;){e=BD(Xsb(f),8);P6c(e,i)}Dsb(a.a,g)}} -function uid(a,b,c){var d,e,f;f=e1d((O6d(),M6d),a.Tg(),b);if(f){Q6d();if(!BD(f,66).Oj()){f=_1d(q1d(M6d,f));if(!f){throw vbb(new Wdb(ite+b.ne()+jte))}}e=(d=a.Yg(f),BD(d>=0?a._g(d,true,true):sid(a,f,true),153));BD(e,215).ml(b,c)}else{throw vbb(new Wdb(ite+b.ne()+jte))}} -function ROc(a,b){var c,d,e,f,g;c=new Rkb;e=LAb(new YAb(null,new Kub(a,16)),new iPc);f=LAb(new YAb(null,new Kub(a,16)),new kPc);g=aAb(_zb(OAb(ty(OC(GC(xM,1),Uhe,833,0,[e,f])),new mPc)));for(d=1;d<g.length;d++){g[d]-g[d-1]>=2*b&&Ekb(c,new bPc(g[d-1]+b,g[d]-b))}return c} -function AXc(a,b,c){Odd(c,'Eades radial',1);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd));a.d=BD(hkd(b,(MUc(),LUc)),33);a.c=Edb(ED(hkd(b,(ZWc(),VWc))));a.e=tXc(BD(hkd(b,WWc),293));a.a=gWc(BD(hkd(b,YWc),426));a.b=jXc(BD(hkd(b,RWc),340));BXc(a);c.n&&!!b&&Tdd(c,i6d(b),(pgd(),mgd))} -function Fqd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new Yge(f);for(h=(d.b-d.a)*d.c<0?(Xge(),Wge):new she(d);h.Ob();){g=BD(h.Pb(),19);e=Zpd(c,g.a);!!e&&(i=null,j=Uqd(a,(k=(Fhd(),l=new ppd,l),!!b&&npd(k,b),k),e),Lkd(j,_pd(e,Vte)),grd(e,j),hrd(e,j),crd(a,e,j))}}} -function UKd(a){var b,c,d,e,f,g;if(!a.j){g=new HPd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);e=UKd(c);ytd(g,e);wtd(g,c)}b.a.Bc(a)!=null}vud(g);a.j=new nNd((BD(qud(ZKd((NFd(),MFd).o),11),18),g.i),g.g);$Kd(a).b&=-33}return a.j} -function O9d(a){var b,c,d,e;if(a==null){return null}else{d=Qge(a,true);e=Nwe.length;if(dfb(d.substr(d.length-e,e),Nwe)){c=d.length;if(c==4){b=(BCb(0,d.length),d.charCodeAt(0));if(b==43){return z9d}else if(b==45){return y9d}}else if(c==3){return z9d}}return new Odb(d)}} -function _C(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ieb(c)}if(b==0&&d!=0&&c==0){return ieb(d)+22}if(b!=0&&d==0&&c==0){return ieb(b)+44}return -1} -function qbc(a,b){var c,d,e,f,g;Odd(b,'Edge joining',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);g=new Bib(d.a,0);while(g.b<g.d.gc()){f=(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),10));if(f.k==(j0b(),g0b)){sbc(f,c);uib(g)}}}Qdd(b)} -function c_c(a,b,c){var d,e;H2c(a.b);K2c(a.b,(Y$c(),V$c),(R0c(),Q0c));K2c(a.b,W$c,b.g);K2c(a.b,X$c,b.a);a.a=F2c(a.b,b);Odd(c,'Compaction by shrinking a tree',a.a.c.length);if(b.i.c.length>1){for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),51);d.pf(b,Udd(c,1))}}Qdd(c)} -function mo(a,b){var c,d,e,f,g;e=b.a&a.f;f=null;for(d=a.b[e];true;d=d.b){if(d==b){!f?(a.b[e]=b.b):(f.b=b.b);break}f=d}g=b.f&a.f;f=null;for(c=a.c[g];true;c=c.d){if(c==b){!f?(a.c[g]=b.d):(f.d=b.d);break}f=c}!b.e?(a.a=b.c):(b.e.c=b.c);!b.c?(a.e=b.e):(b.c.e=b.e);--a.i;++a.g} -function eNb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=Ohe;e=Rie;h=Ohe;f=Rie;for(j=0;j<c;++j){for(k=0;k<b;++k){if(YMb(a,j,k)){g=$wnd.Math.min(g,j);e=$wnd.Math.max(e,j);h=$wnd.Math.min(h,k);f=$wnd.Math.max(f,k)}}}i=e-g+1;d=f-h+1;return new Ggd(meb(g),meb(h),meb(i),meb(d))} -function DWb(a,b){var c,d,e,f;f=new Bib(a,0);c=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),140));while(f.b<f.d.gc()){d=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),140));e=new dWb(d.c,c.d,b);sCb(f.b>0);f.a.Xb(f.c=--f.b);Aib(f,e);sCb(f.b<f.d.gc());f.d.Xb(f.c=f.b++);e.a=false;c=d}} -function Y2b(a){var b,c,d,e,f,g;e=BD(vNb(a,(wtc(),vsc)),11);for(g=new olb(a.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(d=new olb(f.g);d.a<d.c.c.length;){b=BD(mlb(d),17);RZb(b,e);return f}for(c=new olb(f.e);c.a<c.c.c.length;){b=BD(mlb(c),17);QZb(b,e);return f}}return null} -function iA(a,b,c){var d,e;d=Cbb(c.q.getTime());if(ybb(d,0)<0){e=_ie-Tbb(Hbb(Jbb(d),_ie));e==_ie&&(e=0)}else{e=Tbb(Hbb(d,_ie))}if(b==1){e=$wnd.Math.min((e+50)/100|0,9);Kfb(a,48+e&aje)}else if(b==2){e=$wnd.Math.min((e+5)/10|0,99);EA(a,e,2)}else{EA(a,e,3);b>3&&EA(a,0,b-3)}} -function cUb(a){var b,c,d,e;if(PD(vNb(a,(Nyc(),axc)))===PD((hbd(),ebd))){return !a.e&&PD(vNb(a,Cwc))!==PD((Xrc(),Urc))}d=BD(vNb(a,Dwc),292);e=Ccb(DD(vNb(a,Hwc)))||PD(vNb(a,Iwc))===PD((Rpc(),Opc));b=BD(vNb(a,Bwc),19).a;c=a.a.c.length;return !e&&d!=(Xrc(),Urc)&&(b==0||b>c)} -function lkc(a){var b,c;c=0;for(;c<a.c.length;c++){if(Ojc((tCb(c,a.c.length),BD(a.c[c],113)))>0){break}}if(c>0&&c<a.c.length-1){return c}b=0;for(;b<a.c.length;b++){if(Ojc((tCb(b,a.c.length),BD(a.c[b],113)))>0){break}}if(b>0&&c<a.c.length-1){return b}return a.c.length/2|0} -function mmd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=6&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+qmd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cmd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,6,d));d=bmd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,6,b,b))} -function npd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+opd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?lpd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,9,d));d=kpd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,9,b,b))} -function Rld(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Sld(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Lld(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,12,d));d=Kld(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} -function VId(b){var c,d,e,f,g;e=wId(b);g=b.j;if(g==null&&!!e){return b.$j()?null:e.zj()}else if(JD(e,148)){d=e.Aj();if(d){f=d.Nh();if(f!=b.i){c=BD(e,148);if(c.Ej()){try{b.g=f.Kh(c,g)}catch(a){a=ubb(a);if(JD(a,78)){b.g=null}else throw vbb(a)}}b.i=f}}return b.g}return null} -function wOb(a){var b;b=new Rkb;Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c,a.d),new f7c(a.c,a.d+a.a)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c+a.b,a.d)));Ekb(b,new aDb(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a)));return b} -function IJc(a,b,c,d){var e,f,g;g=LZb(b,c);d.c[d.c.length]=b;if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new Sr(ur(O_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!(!OZb(e)&&!(!OZb(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return IJc(a,e,g,d)}return d} -function vQb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),79);d=BD(Ohb(a.b,e),266);!d&&(Xod(jtd(e))==Xod(ltd(e))?uQb(a,e,c):jtd(e)==Xod(ltd(e))?Ohb(a.c,e)==null&&Ohb(a.b,ltd(e))!=null&&xQb(a,e,c,false):Ohb(a.d,e)==null&&Ohb(a.b,jtd(e))!=null&&xQb(a,e,c,true))}} -function jcc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),10);h=new H0b;F0b(h,d);G0b(h,(Ucd(),zcd));yNb(h,(wtc(),ftc),(Bcb(),true));for(g=b.Kc();g.Ob();){f=BD(g.Pb(),10);i=new H0b;F0b(i,f);G0b(i,Tcd);yNb(i,ftc,true);c=new UZb;yNb(c,ftc,true);QZb(c,h);RZb(c,i)}}} -function jnc(a,b,c,d){var e,f,g,h;e=hnc(a,b,c);f=hnc(a,c,b);g=BD(Ohb(a.c,b),112);h=BD(Ohb(a.c,c),112);if(e<f){new DOc((HOc(),GOc),g,h,f-e)}else if(f<e){new DOc((HOc(),GOc),h,g,e-f)}else if(e!=0||!(!b.i||!c.i)&&d[b.i.c][c.i.c]){new DOc((HOc(),GOc),g,h,0);new DOc(GOc,h,g,0)}} -function Qoc(a,b){var c,d,e,f,g,h,i;e=0;for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);e+=f.o.b+f.d.a+f.d.d+a.e;for(d=new Sr(ur(R_b(f).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(c.c.i.k==(j0b(),i0b)){i=c.c.i;h=BD(vNb(i,(wtc(),$sc)),10);e+=h.o.b+h.d.a+h.d.d}}}return e} -function WNc(a,b,c){var d,e,f,g,h,i,j;f=new Rkb;j=new Psb;g=new Psb;XNc(a,j,g,b);VNc(a,j,g,b,c);for(i=new olb(a);i.a<i.c.c.length;){h=BD(mlb(i),112);for(e=new olb(h.k);e.a<e.c.c.length;){d=BD(mlb(e),129);(!b||d.c==(HOc(),FOc))&&h.g>d.b.g&&(f.c[f.c.length]=d,true)}}return f} -function k$c(){k$c=ccb;g$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);f$c=new l$c('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);i$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);h$c=new l$c('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);j$c=new l$c('WHOLE_DRAWING',4)} -function Xqd(a,b){if(JD(b,239)){return iqd(a,BD(b,33))}else if(JD(b,186)){return jqd(a,BD(b,118))}else if(JD(b,354)){return hqd(a,BD(b,137))}else if(JD(b,352)){return gqd(a,BD(b,79))}else if(b){return null}else{throw vbb(new Wdb(Xte+Fe(new amb(OC(GC(SI,1),Uhe,1,5,[b])))))}} -function aic(a){var b,c,d,e,f,g,h;f=new Psb;for(e=new olb(a.d.a);e.a<e.c.c.length;){d=BD(mlb(e),121);d.b.a.c.length==0&&(Gsb(f,d,f.c.b,f.c),true)}if(f.b>1){b=nGb((c=new pGb,++a.b,c),a.d);for(h=Jsb(f,0);h.b!=h.d.c;){g=BD(Xsb(h),121);AFb(DFb(CFb(EFb(BFb(new FFb,1),0),b),g))}}} -function $od(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+_od(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Uod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=kid(b,a,10,d));d=Tod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,11,b,b))} -function uZb(a){var b,c,d,e;for(d=new nib((new eib(a.b)).a);d.b;){c=lib(d);e=BD(c.cd(),11);b=BD(c.dd(),10);yNb(b,(wtc(),$sc),e);yNb(e,gtc,b);yNb(e,Nsc,(Bcb(),true));G0b(e,BD(vNb(b,Hsc),61));vNb(b,Hsc);yNb(e.i,(Nyc(),Vxc),(dcd(),acd));BD(vNb(Q_b(e.i),Ksc),21).Fc((Orc(),Krc))}} -function G4b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new olb(a.d.i.j);i.a<i.c.c.length;){h=BD(mlb(i),11);f+=h.e.c.length}}else{f=1}if(a.d){for(i=new olb(a.c.i.j);i.a<i.c.c.length;){h=BD(mlb(i),11);g+=h.g.c.length}}else{g=1}e=QD(Eeb(g-f));d=(c+b)/2+(c-b)*(0.4*e);return d} -function Zjc(a){Xjc();var b,c;if(a.Hc((Ucd(),Scd))){throw vbb(new Wdb('Port sides must not contain UNDEFINED'))}switch(a.gc()){case 1:return Tjc;case 2:b=a.Hc(zcd)&&a.Hc(Tcd);c=a.Hc(Acd)&&a.Hc(Rcd);return b||c?Wjc:Vjc;case 3:return Ujc;case 4:return Sjc;default:return null;}} -function Hoc(a,b,c){var d,e,f,g,h;Odd(c,'Breaking Point Removing',1);a.a=BD(vNb(b,(Nyc(),Swc)),218);for(f=new olb(b.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(Mu(e.a));h.a<h.c.c.length;){g=BD(mlb(h),10);if(hoc(g)){d=BD(vNb(g,(wtc(),usc)),305);!d.d&&Ioc(a,d)}}}Qdd(c)} -function s6c(a,b,c){i6c();if(m6c(a,b)&&m6c(a,c)){return false}return u6c(new f7c(a.c,a.d),new f7c(a.c+a.b,a.d),b,c)||u6c(new f7c(a.c+a.b,a.d),new f7c(a.c+a.b,a.d+a.a),b,c)||u6c(new f7c(a.c+a.b,a.d+a.a),new f7c(a.c,a.d+a.a),b,c)||u6c(new f7c(a.c,a.d+a.a),new f7c(a.c,a.d),b,c)} -function x1d(a,b){var c,d,e,f;if(!a.dc()){for(c=0,d=a.gc();c<d;++c){f=GD(a.Xb(c));if(f==null?b==null:dfb(f.substr(0,3),'!##')?b!=null&&(e=b.length,!dfb(f.substr(f.length-e,e),b)||f.length!=b.length+3)&&!dfb(Ewe,b):dfb(f,Fwe)&&!dfb(Ewe,b)||dfb(f,b)){return true}}}return false} -function J3b(a,b,c,d){var e,f,g,h,i,j;g=a.j.c.length;i=KC(tN,ile,306,g,0,1);for(h=0;h<g;h++){f=BD(Ikb(a.j,h),11);f.p=h;i[h]=D3b(N3b(f),c,d)}F3b(a,i,c,b,d);j=new Lqb;for(e=0;e<i.length;e++){!!i[e]&&Rhb(j,BD(Ikb(a.j,e),11),i[e])}if(j.f.c+j.g.c!=0){yNb(a,(wtc(),Csc),j);L3b(a,i)}} -function Lgc(a,b,c){var d,e,f;for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);f=tgc(d);if(f){if(f.k==(j0b(),e0b)){switch(BD(vNb(f,(wtc(),Hsc)),61).g){case 4:f.n.a=b.a;break;case 2:f.n.a=c.a-(f.o.a+f.d.c);break;case 1:f.n.b=b.b;break;case 3:f.n.b=c.b-(f.o.b+f.d.a);}}}}} -function kAc(){kAc=ccb;iAc=new lAc(ane,0);dAc=new lAc('NIKOLOV',1);gAc=new lAc('NIKOLOV_PIXEL',2);eAc=new lAc('NIKOLOV_IMPROVED',3);fAc=new lAc('NIKOLOV_IMPROVED_PIXEL',4);cAc=new lAc('DUMMYNODE_PERCENTAGE',5);hAc=new lAc('NODECOUNT_PERCENTAGE',6);jAc=new lAc('NO_BOUNDARY',7)} -function led(a,b,c){var d,e,f,g,h;e=BD(hkd(b,(X7c(),V7c)),19);!e&&(e=meb(0));f=BD(hkd(c,V7c),19);!f&&(f=meb(0));if(e.a>f.a){return -1}else if(e.a<f.a){return 1}else{if(a.a){d=Kdb(b.j,c.j);if(d!=0){return d}d=Kdb(b.i,c.i);if(d!=0){return d}}g=b.g*b.f;h=c.g*c.f;return Kdb(g,h)}} -function BAd(a,b){var c,d,e,f,g,h,i,j,k,l;++a.e;i=a.d==null?0:a.d.length;if(b>i){k=a.d;a.d=KC(y4,jve,63,2*i+4,0,1);for(f=0;f<i;++f){j=k[f];if(j){d=j.g;l=j.i;for(h=0;h<l;++h){e=BD(d[h],133);g=DAd(a,e.Sh());c=a.d[g];!c&&(c=a.d[g]=a.uj());c.Fc(e)}}}return true}else{return false}} -function o2d(a,b,c){var d,e,f,g,h,i;e=c;f=e.ak();if(T6d(a.e,f)){if(f.hi()){d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw vbb(new Wdb(kue))}}}}else{i=S6d(a.e.Tg(),f);d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(i.rl(h.ak())){throw vbb(new Wdb(Hwe))}}}vtd(a,b,c)} -function OYb(a,b){var c,d,e,f,g,h;c=BD(vNb(b,(wtc(),Esc)),21);g=BD(Qc((xXb(),wXb),c),21);h=BD(Qc(LYb,c),21);for(f=g.Kc();f.Ob();){d=BD(f.Pb(),21);if(!BD(Qc(a.b,d),15).dc()){return false}}for(e=h.Kc();e.Ob();){d=BD(e.Pb(),21);if(!BD(Qc(a.b,d),15).dc()){return false}}return true} -function scc(a,b){var c,d,e,f,g,h;Odd(b,'Partition postprocessing',1);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);h=new olb(e.j);while(h.a<h.c.c.length){g=BD(mlb(h),11);Ccb(DD(vNb(g,(wtc(),ftc))))&&nlb(h)}}}Qdd(b)} -function ZZc(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.c.length==1){return JZc(BD(Ikb(a.a,0),187),b)}g=YZc(a);i=0;j=a.d;f=g;k=a.d;h=(j-f)/2+f;while(f+1<j){i=0;for(d=new olb(a.a);d.a<d.c.c.length;){c=BD(mlb(d),187);i+=(e=MZc(c,h,false),e.a)}if(i<b){k=h;j=h}else{f=h}h=(j-f)/2+f}return k} -function fD(a){var b,c,d,e,f;if(isNaN(a)){return wD(),vD}if(a<-9223372036854775808){return wD(),tD}if(a>=9223372036854775807){return wD(),sD}e=false;if(a<0){e=true;a=-a}d=0;if(a>=Ije){d=QD(a/Ije);a-=d*Ije}c=0;if(a>=Hje){c=QD(a/Hje);a-=c*Hje}b=QD(a);f=TC(b,c,d);e&&ZC(f);return f} -function rKb(a,b){var c,d,e,f;c=!b||!a.u.Hc((rcd(),ncd));f=0;for(e=new olb(a.e.Cf());e.a<e.c.c.length;){d=BD(mlb(e),838);if(d.Hf()==(Ucd(),Scd)){throw vbb(new Wdb('Label and node size calculator can only be used with ports that have port sides assigned.'))}d.vf(f++);qKb(a,d,c)}} -function V0d(a,b){var c,d,e,f,g;e=b.Hh(a.a);if(e){d=(!e.b&&(e.b=new sId((jGd(),fGd),x6,e)),e.b);c=GD(AAd(d,cwe));if(c!=null){f=c.lastIndexOf('#');g=f==-1?w1d(a,b.Aj(),c):f==0?v1d(a,null,c.substr(1)):v1d(a,c.substr(0,f),c.substr(f+1));if(JD(g,148)){return BD(g,148)}}}return null} -function Z0d(a,b){var c,d,e,f,g;d=b.Hh(a.a);if(d){c=(!d.b&&(d.b=new sId((jGd(),fGd),x6,d)),d.b);f=GD(AAd(c,zwe));if(f!=null){e=f.lastIndexOf('#');g=e==-1?w1d(a,b.Aj(),f):e==0?v1d(a,null,f.substr(1)):v1d(a,f.substr(0,e),f.substr(e+1));if(JD(g,148)){return BD(g,148)}}}return null} -function RDb(a){var b,c,d,e,f;for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.j=null;for(f=b.a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),57);X6c(d.b);(!b.j||d.d.c<b.j.d.c)&&(b.j=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),57);d.b.a=d.d.c-b.j.d.c;d.b.b=d.d.d-b.j.d.d}}return a} -function sVb(a){var b,c,d,e,f;for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),189);b.f=null;for(f=b.a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),81);X6c(d.e);(!b.f||d.g.c<b.f.g.c)&&(b.f=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=BD(e.Pb(),81);d.e.a=d.g.c-b.f.g.c;d.e.b=d.g.d-b.f.g.d}}return a} -function EMb(a){var b,c,d;c=BD(a.a,19).a;d=BD(a.b,19).a;b=$wnd.Math.max($wnd.Math.abs(c),$wnd.Math.abs(d));if(c<b&&d==-b){return new vgd(meb(c+1),meb(d))}if(c==b&&d<b){return new vgd(meb(c),meb(d+1))}if(c>=-b&&d==b){return new vgd(meb(c-1),meb(d))}return new vgd(meb(c),meb(d-1))} -function W8b(){S8b();return OC(GC(AS,1),Kie,77,0,[Y7b,V7b,Z7b,n8b,G8b,r8b,M8b,w8b,E8b,i8b,A8b,v8b,F8b,e8b,O8b,P7b,z8b,I8b,o8b,H8b,Q8b,C8b,Q7b,D8b,R8b,K8b,P8b,p8b,b8b,q8b,m8b,N8b,T7b,_7b,t8b,S7b,u8b,k8b,f8b,x8b,h8b,W7b,U7b,l8b,g8b,y8b,L8b,R7b,B8b,j8b,s8b,c8b,a8b,J8b,$7b,d8b,X7b])} -function Yic(a,b,c){a.d=0;a.b=0;b.k==(j0b(),i0b)&&c.k==i0b&&BD(vNb(b,(wtc(),$sc)),10)==BD(vNb(c,$sc),10)&&(ajc(b).j==(Ucd(),Acd)?Zic(a,b,c):Zic(a,c,b));b.k==i0b&&c.k==g0b?ajc(b).j==(Ucd(),Acd)?(a.d=1):(a.b=1):c.k==i0b&&b.k==g0b&&(ajc(c).j==(Ucd(),Acd)?(a.b=1):(a.d=1));cjc(a,b,c)} -function esd(a){var b,c,d,e,f,g,h,i,j,k,l;l=hsd(a);b=a.a;i=b!=null;i&&Upd(l,'category',a.a);e=Fhe(new Pib(a.d));g=!e;if(g){j=new wB;cC(l,'knownOptions',j);c=new msd(j);reb(new Pib(a.d),c)}f=Fhe(a.g);h=!f;if(h){k=new wB;cC(l,'supportedFeatures',k);d=new osd(k);reb(a.g,d)}return l} -function ty(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new Xp(a.length);for(h=a,i=0,j=h.length;i<j;++i){g=h[i];d=d|(Uzb(g),false);e=(Tzb(g),g.a);Ekb(f.a,Qb(e));b&=e.qd();c=Ly(c,e.rd())}return BD(BD(Rzb(new YAb(null,Yj(new Kub((im(),nm(f.a)),16),new vy,b,c)),new xy(a)),670),833)} -function UWb(a,b){var c;if(!!a.d&&(b.c!=a.e.c||qWb(a.e.b,b.b))){Ekb(a.f,a.d);a.a=a.d.c+a.d.b;a.d=null;a.e=null}nWb(b.b)?(a.c=b):(a.b=b);if(b.b==(lWb(),hWb)&&!b.a||b.b==iWb&&b.a||b.b==jWb&&b.a||b.b==kWb&&!b.a){if(!!a.c&&!!a.b){c=new J6c(a.a,a.c.d,b.c-a.a,a.b.d-a.c.d);a.d=c;a.e=b}}} -function L2c(a){var b;D2c.call(this);this.i=new Z2c;this.g=a;this.f=BD(a.e&&a.e(),9).length;if(this.f==0){throw vbb(new Wdb('There must be at least one phase in the phase enumeration.'))}this.c=(b=BD(gdb(this.g),9),new xqb(b,BD(_Bb(b,b.length),9),0));this.a=new j3c;this.b=new Lqb} -function God(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=7&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+Iod(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Eod(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,1,C2,d));d=Dod(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,7,b,b))} -function NHd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(p6d(a,b))throw vbb(new Wdb(ste+QHd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?KHd(a,d):a.Cb.ih(a,-1-c,null,d)));!!b&&(d=BD(b,49).gh(a,0,k5,d));d=JHd(a,b,d);!!d&&d.Fi()}else (a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,3,b,b))} -function Ehb(a,b){Dhb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Ihb(a,b)}g=(a.d&-2)<<4;j=Rgb(a,g);k=Rgb(b,g);d=yhb(a,Qgb(j,g));e=yhb(b,Qgb(k,g));i=Ehb(j,k);c=Ehb(d,e);f=Ehb(yhb(j,d),yhb(e,k));f=thb(thb(f,i),c);f=Qgb(f,g);i=Qgb(i,g<<1);return thb(thb(i,f),c)} -function aGc(a,b,c){var d,e,f,g,h;g=CHc(a,c);h=KC(OQ,kne,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=BD(f.Pb(),11);Ccb(DD(vNb(e,(wtc(),Nsc))))&&(h[d++]=BD(vNb(e,gtc),10))}if(d<b.length){throw vbb(new Zdb('Expected '+b.length+' hierarchical ports, but found only '+d+'.'))}return h} -function Und(a,b){var c,d,e,f,g,h;if(!a.tb){f=(!a.rb&&(a.rb=new jUd(a,d5,a)),a.rb);h=new Mqb(f.i);for(e=new Fyd(f);e.e!=e.i.gc();){d=BD(Dyd(e),138);g=d.ne();c=BD(g==null?jrb(h.f,null,d):Drb(h.g,g,d),138);!!c&&(g==null?jrb(h.f,null,c):Drb(h.g,g,c))}a.tb=h}return BD(Phb(a.tb,b),138)} -function YKd(a,b){var c,d,e,f,g;(a.i==null&&TKd(a),a.i).length;if(!a.p){g=new Mqb((3*a.g.i/2|0)+1);for(e=new $yd(a.g);e.e!=e.i.gc();){d=BD(Zyd(e),170);f=d.ne();c=BD(f==null?jrb(g.f,null,d):Drb(g.g,f,d),170);!!c&&(f==null?jrb(g.f,null,c):Drb(g.g,f,c))}a.p=g}return BD(Phb(a.p,b),170)} -function hCb(a,b,c,d,e){var f,g,h,i,j;fCb(d+Wy(c,c.$d()),e);gCb(b,jCb(c));f=c.f;!!f&&hCb(a,b,f,'Caused by: ',false);for(h=(c.k==null&&(c.k=KC(_I,nie,78,0,0,1)),c.k),i=0,j=h.length;i<j;++i){g=h[i];hCb(a,b,g,'Suppressed: ',false)}console.groupEnd!=null&&console.groupEnd.call(console)} -function dGc(a,b,c,d){var e,f,g,h,i;i=b.e;h=i.length;g=b.q._f(i,c?0:h-1,c);e=i[c?0:h-1];g=g|cGc(a,e,c,d);for(f=c?1:h-2;c?f<h:f>=0;f+=c?1:-1){g=g|b.c.Sf(i,f,c,d&&!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,(wtc(),mtc)))));g=g|b.q._f(i,f,c);g=g|cGc(a,i[f],c,d)}Qqb(a.c,b);return g} -function o3b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=m_b(a.j),l=0,m=k.length;l<m;++l){j=k[l];if(c==(KAc(),HAc)||c==JAc){i=k_b(j.g);for(e=i,f=0,g=e.length;f<g;++f){d=e[f];k3b(b,d)&&PZb(d,true)}}if(c==IAc||c==JAc){h=k_b(j.e);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];j3b(b,d)&&PZb(d,true)}}}} -function Qmc(a){var b,c;b=null;c=null;switch(Lmc(a).g){case 1:b=(Ucd(),zcd);c=Tcd;break;case 2:b=(Ucd(),Rcd);c=Acd;break;case 3:b=(Ucd(),Tcd);c=zcd;break;case 4:b=(Ucd(),Acd);c=Rcd;}mjc(a,BD(Btb(RAb(BD(Qc(a.k,b),15).Oc(),Hmc)),113));njc(a,BD(Btb(QAb(BD(Qc(a.k,c),15).Oc(),Hmc)),113))} -function a6b(a){var b,c,d,e,f,g;e=BD(Ikb(a.j,0),11);if(e.e.c.length+e.g.c.length==0){a.n.a=0}else{g=0;for(d=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(e),new R0b(e)])));Qr(d);){c=BD(Rr(d),11);g+=c.i.n.a+c.n.a+c.a.a}b=BD(vNb(a,(Nyc(),Txc)),8);f=!b?0:b.a;a.n.a=g/(e.e.c.length+e.g.c.length)-f}} -function F1c(a,b){var c,d,e;for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),221);$Nb(BD(c.b,65),c7c(R6c(BD(b.b,65).c),BD(b.b,65).a));e=xOb(BD(b.b,65).b,BD(c.b,65).b);e>1&&(a.a=true);ZNb(BD(c.b,65),P6c(R6c(BD(b.b,65).c),Y6c(c7c(R6c(BD(c.b,65).a),BD(b.b,65).a),e)));D1c(a,b);F1c(a,c)}} -function rVb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a<f.c.c.length;){d=BD(mlb(f),189);d.e=0;d.d.a.$b()}for(e=new olb(a.a.a);e.a<e.c.c.length;){d=BD(mlb(e),189);for(c=d.a.a.ec().Kc();c.Ob();){b=BD(c.Pb(),81);for(h=b.f.Kc();h.Ob();){g=BD(h.Pb(),81);if(g.d!=d){Qqb(d.d,g);++g.d.e}}}}} -function bcc(a){var b,c,d,e,f,g,h,i;i=a.j.c.length;c=0;b=i;e=2*i;for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);switch(g.j.g){case 2:case 4:g.p=-1;break;case 1:case 3:d=g.e.c.length;f=g.g.c.length;d>0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}mmb();Okb(a.j,new fcc)} -function Vec(a){var b,c;c=null;b=BD(Ikb(a.g,0),17);do{c=b.d.i;if(wNb(c,(wtc(),Wsc))){return BD(vNb(c,Wsc),11).i}if(c.k!=(j0b(),h0b)&&Qr(new Sr(ur(U_b(c).a.Kc(),new Sq)))){b=BD(Rr(new Sr(ur(U_b(c).a.Kc(),new Sq))),17)}else if(c.k!=h0b){return null}}while(!!c&&c.k!=(j0b(),h0b));return c} -function Omc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=BD(Ikb(h,h.c.length-1),113);k=(tCb(0,h.c.length),BD(h.c[0],113));j=Kmc(a,g,i,k);for(f=1;f<h.c.length;f++){c=(tCb(f-1,h.c.length),BD(h.c[f-1],113));e=(tCb(f,h.c.length),BD(h.c[f],113));d=Kmc(a,g,c,e);if(d>j){i=c;k=e;j=d}}b.a=k;b.c=i} -function sEb(a,b){var c,d;d=Axb(a.b,b.b);if(!d){throw vbb(new Zdb('Invalid hitboxes for scanline constraint calculation.'))}(mEb(b.b,BD(Cxb(a.b,b.b),57))||mEb(b.b,BD(Bxb(a.b,b.b),57)))&&(Zfb(),b.b+' has overlap.');a.a[b.b.f]=BD(Exb(a.b,b.b),57);c=BD(Dxb(a.b,b.b),57);!!c&&(a.a[c.f]=b.b)} -function AFb(a){if(!a.a.d||!a.a.e){throw vbb(new Zdb((fdb(fN),fN.k+' must have a source and target '+(fdb(jN),jN.k)+' specified.')))}if(a.a.d==a.a.e){throw vbb(new Zdb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}NFb(a.a.d.g,a.a);NFb(a.a.e.b,a.a);return a.a} -function HHc(a,b,c){var d,e,f,g,h,i,j;j=new Hxb(new tIc(a));for(g=OC(GC(aR,1),lne,11,0,[b,c]),h=0,i=g.length;h<i;++h){f=g[h];Iwb(j.a,f,(Bcb(),zcb))==null;for(e=new b1b(f.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);d.c==d.d||Axb(j,f==d.c?d.d:d.c)}}return Qb(j),new Tkb(j)} -function oPc(a,b,c){var d,e,f,g,h,i;d=0;if(b.b!=0&&c.b!=0){f=Jsb(b,0);g=Jsb(c,0);h=Edb(ED(Xsb(f)));i=Edb(ED(Xsb(g)));e=true;do{if(h>i-a.b&&h<i+a.b){return -1}else h>i-a.a&&h<i+a.a&&++d;h<=i&&f.b!=f.d.c?(h=Edb(ED(Xsb(f)))):i<=h&&g.b!=g.d.c?(i=Edb(ED(Xsb(g)))):(e=false)}while(e)}return d} -function F3b(a,b,c,d,e){var f,g,h,i;i=(f=BD(gdb(F1),9),new xqb(f,BD(_Bb(f,f.length),9),0));for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);if(b[g.p]){G3b(g,b[g.p],d);rqb(i,g.j)}}if(e){K3b(a,b,(Ucd(),zcd),2*c,d);K3b(a,b,Tcd,2*c,d)}else{K3b(a,b,(Ucd(),Acd),2*c,d);K3b(a,b,Rcd,2*c,d)}} -function Szb(a){var b,c,d,e,f;f=new Rkb;Hkb(a.b,new XBb(f));a.b.c=KC(SI,Uhe,1,0,5,1);if(f.c.length!=0){b=(tCb(0,f.c.length),BD(f.c[0],78));for(c=1,d=f.c.length;c<d;++c){e=(tCb(c,f.c.length),BD(f.c[c],78));e!=b&&Qy(b,e)}if(JD(b,60)){throw vbb(BD(b,60))}if(JD(b,289)){throw vbb(BD(b,289))}}} -function DCb(a,b){var c,d,e,f;a=a==null?Xhe:(uCb(a),a);c=new Vfb;f=0;d=0;while(d<b.length){e=a.indexOf('%s',f);if(e==-1){break}Qfb(c,a.substr(f,e-f));Pfb(c,b[d++]);f=e+2}Qfb(c,a.substr(f));if(d<b.length){c.a+=' [';Pfb(c,b[d++]);while(d<b.length){c.a+=She;Pfb(c,b[d++])}c.a+=']'}return c.a} -function KCb(a){var b,c,d,e;b=0;d=a.length;e=d-4;c=0;while(c<e){b=(BCb(c+3,a.length),a.charCodeAt(c+3)+(BCb(c+2,a.length),31*(a.charCodeAt(c+2)+(BCb(c+1,a.length),31*(a.charCodeAt(c+1)+(BCb(c,a.length),31*(a.charCodeAt(c)+31*b)))))));b=b|0;c+=4}while(c<d){b=b*31+bfb(a,c++)}b=b|0;return b} -function Rac(a){var b,c;for(c=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.d.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST, but has at least one outgoing edge that "+' does not go to a LAST_SEPARATE node. That must not happen.'))}}} -function jQc(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=0;for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);h=0;for(f=new Sr(ur(R_b(j).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);l=A0b(e.c).b;m=A0b(e.d).b;h=$wnd.Math.max(h,$wnd.Math.abs(m-l))}i=$wnd.Math.max(i,h)}g=d*$wnd.Math.min(1,b/c)*i;return g} -function See(a){var b;b=new Ifb;(a&256)!=0&&(b.a+='F',b);(a&128)!=0&&(b.a+='H',b);(a&512)!=0&&(b.a+='X',b);(a&2)!=0&&(b.a+='i',b);(a&8)!=0&&(b.a+='m',b);(a&4)!=0&&(b.a+='s',b);(a&32)!=0&&(b.a+='u',b);(a&64)!=0&&(b.a+='w',b);(a&16)!=0&&(b.a+='x',b);(a&zte)!=0&&(b.a+=',',b);return jfb(b.a)} -function F5b(a,b){var c,d,e,f;Odd(b,'Resize child graph to fit parent.',1);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);Gkb(a.a,c.a);c.a.c=KC(SI,Uhe,1,0,5,1)}for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),10);$_b(e,null)}a.b.c=KC(SI,Uhe,1,0,5,1);G5b(a);!!a.e&&E5b(a.e,a);Qdd(b)} -function eec(a){var b,c,d,e,f,g,h,i,j;d=a.b;f=d.e;g=ecd(BD(vNb(d,(Nyc(),Vxc)),98));c=!!f&&BD(vNb(f,(wtc(),Ksc)),21).Hc((Orc(),Hrc));if(g||c){return}for(j=(h=(new $ib(a.e)).a.vc().Kc(),new djb(h));j.a.Ob();){i=(b=BD(j.a.Pb(),42),BD(b.dd(),113));if(i.a){e=i.d;F0b(e,null);i.c=true;a.a=true}}} -function QFc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;m=-1;n=0;for(j=a,k=0,l=j.length;k<l;++k){i=j[k];for(f=i,g=0,h=f.length;g<h;++g){e=f[g];b=new Unc(m==-1?a[0]:a[m],Xec(e));for(c=0;c<e.j.c.length;c++){for(d=c+1;d<e.j.c.length;d++){Rnc(b,BD(Ikb(e.j,c),11),BD(Ikb(e.j,d),11))>0&&++n}}}++m}return n} -function hUc(a,b){var c,d,e,f,g;g=BD(vNb(b,(JTc(),FTc)),425);for(f=Jsb(b.b,0);f.b!=f.d.c;){e=BD(Xsb(f),86);if(a.b[e.g]==0){switch(g.g){case 0:iUc(a,e);break;case 1:gUc(a,e);}a.b[e.g]=2}}for(d=Jsb(a.a,0);d.b!=d.d.c;){c=BD(Xsb(d),188);ze(c.b.d,c,true);ze(c.c.b,c,true)}yNb(b,(mTc(),gTc),a.a)} -function S6d(a,b){Q6d();var c,d,e,f;if(!b){return P6d}else if(b==(Q8d(),N8d)||(b==v8d||b==t8d||b==u8d)&&a!=s8d){return new Z6d(a,b)}else{d=BD(b,677);c=d.pk();if(!c){a2d(q1d((O6d(),M6d),b));c=d.pk()}f=(!c.i&&(c.i=new Lqb),c.i);e=BD(Wd(irb(f.f,a)),1942);!e&&Rhb(f,a,e=new Z6d(a,b));return e}} -function Tbc(a,b){var c,d,e,f,g,h,i,j,k;i=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=k_b(a.e);for(e=c,f=0,g=e.length;f<g;++f){d=e[f];RZb(d,i);Fsb(d.a,new f7c(j,k));if(b){h=BD(vNb(d,(Nyc(),jxc)),74);if(!h){h=new s7c;yNb(d,jxc,h)}Dsb(h,new f7c(j,k))}}} -function Ubc(a,b){var c,d,e,f,g,h,i,j,k;e=BD(vNb(a,(wtc(),$sc)),11);j=l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).a;k=a.i.n.b;c=k_b(a.g);for(g=c,h=0,i=g.length;h<i;++h){f=g[h];QZb(f,e);Esb(f.a,new f7c(j,k));if(b){d=BD(vNb(f,(Nyc(),jxc)),74);if(!d){d=new s7c;yNb(f,jxc,d)}Dsb(d,new f7c(j,k))}}} -function TFc(a,b){var c,d,e,f,g,h;a.b=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);a.e=Dub(a.d);f=new Psb;e=Ou(OC(GC(KQ,1),cne,37,0,[b]));g=0;while(g<e.c.length){d=(tCb(g,e.c.length),BD(e.c[g],37));d.p=g++;c=new fFc(d,a.a,a.b);Gkb(e,c.b);Ekb(a.b,c);c.s&&(h=Jsb(f,0),Vsb(h,c))}a.c=new Tqb;return f} -function HJb(a,b){var c,d,e,f,g,h;for(g=BD(BD(Qc(a.r,b),21),84).Kc();g.Ob();){f=BD(g.Pb(),111);c=f.c?ZHb(f.c):0;if(c>0){if(f.a){h=f.b.rf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(tcd(a.u)){d=sfd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.rf().a&&(f.d.c=d.c+d.b-f.b.rf().a)}}} -function Eec(a,b){var c,d,e,f;Odd(b,'Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);f=TAb(VAb(JAb(JAb(new YAb(null,new Kub(d.a,16)),new Jec),new Lec),new Nec),new Rec);c=c|f.a!=null}c&&yNb(a,(wtc(),Rsc),(Bcb(),true));Qdd(b)} -function sRc(a,b,c){var d,e,f,g,h;e=c;!e&&(e=new Zdd);Odd(e,'Layout',a.a.c.length);if(Ccb(DD(vNb(b,(JTc(),vTc))))){Zfb();for(d=0;d<a.a.c.length;d++){h=(d<10?'0':'')+d++;' Slot '+h+': '+hdb(rb(BD(Ikb(a.a,d),51)))}}for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),51);f.pf(b,Udd(e,1))}Qdd(e)} -function yMb(a){var b,c;b=BD(a.a,19).a;c=BD(a.b,19).a;if(b>=0){if(b==c){return new vgd(meb(-b-1),meb(-b-1))}if(b==-c){return new vgd(meb(-b),meb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new vgd(meb(-b),meb(c))}return new vgd(meb(-b),meb(c+1))}return new vgd(meb(b+1),meb(c))} -function q5b(a){var b,c;c=BD(vNb(a,(Nyc(),mxc)),163);b=BD(vNb(a,(wtc(),Osc)),303);if(c==(Ctc(),ytc)){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),dsc))}else if(c==Atc){yNb(a,mxc,Btc);yNb(a,Osc,(esc(),bsc))}else if(b==(esc(),dsc)){yNb(a,mxc,ytc);yNb(a,Osc,csc)}else if(b==bsc){yNb(a,mxc,Atc);yNb(a,Osc,csc)}} -function FNc(){FNc=ccb;DNc=new RNc;zNc=e3c(new j3c,(qUb(),nUb),(S8b(),o8b));CNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);ENc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);ANc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);BNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} -function hQc(){hQc=ccb;cQc=e3c(c3c(new j3c,(qUb(),pUb),(S8b(),c8b)),nUb,o8b);gQc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);dQc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);fQc=e3c(e3c(new j3c,nUb,C8b),pUb,B8b);eQc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} -function GNc(a,b,c,d,e){var f,g;if((!OZb(b)&&b.c.i.c==b.d.i.c||!T6c(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])),c))&&!OZb(b)){b.c==e?St(b.a,0,new g7c(c)):Dsb(b.a,new g7c(c));if(d&&!Rqb(a.a,c)){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(c);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}}} -function Qac(a){var b,c;for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(b.c.i.k!=(j0b(),f0b)){throw vbb(new y2c(Fne+P_b(a)+"' 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 vjd(a,b,c){var d,e,f,g,h,i,j;e=aeb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=KC(SI,Uhe,1,2,5,1);f=zjd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=KC(SI,Uhe,1,e+1,5,1);g=CD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} -function ENb(a,b,c){var d,e,f,g;this.b=new Rkb;e=0;d=0;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),167);c&&rMb(f);Ekb(this.b,f);e+=f.o;d+=f.p}if(this.b.c.length>0){f=BD(Ikb(this.b,0),167);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=QD($wnd.Math.ceil(e*b))):(d=QD($wnd.Math.ceil(d/b)));this.a=new pNb(e,d)} -function Igc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=BD(Ohb(a.f,b.A),57);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=BD(Ohb(a.f,c.C),57);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m<l;++m){g=BD(f.Xb(m),128);r=g.a.b;g.a.c=o-r/2;o+=h}} -function UHc(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=KC(WD,oje,25,b.length,15,1));for(g=e?0:b.length-1;e?g<b.length:g>=0;g+=e?1:-1){h=b[g];i=d==(Ucd(),zcd)?e?V_b(h,d):Su(V_b(h,d)):e?Su(V_b(h,d)):V_b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=BD(l.Pb(),11);a.d[k.p]=j++}Gkb(c,i)}} -function aQc(a,b,c){var d,e,f,g,h,i,j,k;f=Edb(ED(a.b.Kc().Pb()));j=Edb(ED(Pq(b.b)));d=Y6c(R6c(a.a),j-c);e=Y6c(R6c(b.a),c-f);k=P6c(d,e);Y6c(k,1/(j-f));this.a=k;this.b=new Rkb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Edb(ED(g.Pb()));if(h&&i-c>Oqe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} -function vGb(a){var b,c,d,e;yGb(a,a.n);if(a.d.c.length>0){Blb(a.c);while(GGb(a,BD(mlb(new olb(a.e.a)),121))<a.e.a.c.length){b=AGb(a);e=b.e.e-b.d.e-b.a;b.e.j&&(e=-e);for(d=new olb(a.e.a);d.a<d.c.c.length;){c=BD(mlb(d),121);c.j&&(c.e+=e)}Blb(a.c)}Blb(a.c);DGb(a,BD(mlb(new olb(a.e.a)),121));rGb(a)}} -function rkc(a,b){var c,d,e,f,g;for(e=BD(Qc(a.a,(Xjc(),Tjc)),15).Kc();e.Ob();){d=BD(e.Pb(),101);c=BD(Ikb(d.j,0),113).d.j;f=new Tkb(d.j);Okb(f,new Xkc);switch(b.g){case 1:jkc(a,f,c,(Fkc(),Dkc),1);break;case 0:g=lkc(f);jkc(a,new Jib(f,0,g),c,(Fkc(),Dkc),0);jkc(a,new Jib(f,g,f.c.length),c,Dkc,1);}}} -function c2c(a,b){Y1c();var c,d;c=j4c(n4c(),b.tg());if(c){d=c.j;if(JD(a,239)){return Zod(BD(a,33))?uqb(d,(N5c(),K5c))||uqb(d,L5c):uqb(d,(N5c(),K5c))}else if(JD(a,352)){return uqb(d,(N5c(),I5c))}else if(JD(a,186)){return uqb(d,(N5c(),M5c))}else if(JD(a,354)){return uqb(d,(N5c(),J5c))}}return true} -function c3d(a,b,c){var d,e,f,g,h,i;e=c;f=e.ak();if(T6d(a.e,f)){if(f.hi()){d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw vbb(new Wdb(kue))}}}}else{i=S6d(a.e.Tg(),f);d=BD(a.g,119);for(g=0;g<a.i;++g){h=d[g];if(i.rl(h.ak())&&g!=b){throw vbb(new Wdb(Hwe))}}}return BD(Gtd(a,b,c),72)} -function Sy(d,b){if(b instanceof Object){try{b.__java$exception=d;if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&$doc.documentMode<9){return}var c=d;Object.defineProperties(b,{cause:{get:function(){var a=c.Zd();return a&&a.Xd()}},suppressed:{get:function(){return c.Yd()}}})}catch(a){}}} -function lhb(a,b){var c,d,e,f,g;d=b>>5;b&=31;if(d>=a.d){return a.e<0?(Hgb(),Bgb):(Hgb(),Ggb)}f=a.d-d;e=KC(WD,oje,25,f+1,15,1);mhb(e,f,a.a,d,b);if(a.e<0){for(c=0;c<d&&a.a[c]==0;c++);if(c<d||b>0&&a.a[c]<<32-b!=0){for(c=0;c<f&&e[c]==-1;c++){e[c]=0}c==f&&++f;++e[c]}}g=new Vgb(a.e,f,e);Jgb(g);return g} -function UPb(a){var b,c,d,e;e=mpd(a);c=new kQb(e);d=new mQb(e);b=new Rkb;Gkb(b,(!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));Gkb(b,(!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));return BD(GAb(NAb(JAb(new YAb(null,new Kub(b,16)),c),d),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21)} -function p2d(a,b,c,d){var e,f,g,h,i;h=(Q6d(),BD(b,66).Oj());if(T6d(a.e,b)){if(b.hi()&&F2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){throw vbb(new Wdb(kue))}}else{i=S6d(a.e.Tg(),b);e=BD(a.g,119);for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())){throw vbb(new Wdb(Hwe))}}}vtd(a,I2d(a,b,c),h?BD(d,72):R6d(b,d))} -function T6d(a,b){Q6d();var c,d,e;if(b.$j()){return true}else if(b.Zj()==-2){if(b==(m8d(),k8d)||b==h8d||b==i8d||b==j8d){return true}else{e=a.Tg();if(bLd(e,b)>=0){return false}else{c=e1d((O6d(),M6d),e,b);if(!c){return true}else{d=c.Zj();return (d>1||d==-1)&&$1d(q1d(M6d,c))!=3}}}}else{return false}} -function R1b(a,b,c,d){var e,f,g,h,i;h=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));i=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));if(Xod(h)==Xod(i)){return null}if(ntd(i,h)){return null}g=Mld(b);if(g==c){return d}else{f=BD(Ohb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} -function Cac(a,b){var c;c=BD(vNb(a,(Nyc(),Rwc)),276);Odd(b,'Label side selection ('+c+')',1);switch(c.g){case 0:Dac(a,(rbd(),nbd));break;case 1:Dac(a,(rbd(),obd));break;case 2:Bac(a,(rbd(),nbd));break;case 3:Bac(a,(rbd(),obd));break;case 4:Eac(a,(rbd(),nbd));break;case 5:Eac(a,(rbd(),obd));}Qdd(b)} -function bGc(a,b,c){var d,e,f,g,h,i;d=RFc(c,a.length);g=a[d];if(g[0].k!=(j0b(),e0b)){return}f=SFc(c,g.length);i=b.j;for(e=0;e<i.c.length;e++){h=(tCb(e,i.c.length),BD(i.c[e],11));if((c?h.j==(Ucd(),zcd):h.j==(Ucd(),Tcd))&&Ccb(DD(vNb(h,(wtc(),Nsc))))){Nkb(i,e,BD(vNb(g[f],(wtc(),$sc)),11));f+=c?1:-1}}} -function rQc(a,b){var c,d,e,f,g;g=new Rkb;c=b;do{f=BD(Ohb(a.b,c),128);f.B=c.c;f.D=c.d;g.c[g.c.length]=f;c=BD(Ohb(a.k,c),17)}while(c);d=(tCb(0,g.c.length),BD(g.c[0],128));d.j=true;d.A=BD(d.d.a.ec().Kc().Pb(),17).c.i;e=BD(Ikb(g,g.c.length-1),128);e.q=true;e.C=BD(e.d.a.ec().Kc().Pb(),17).d.i;return g} -function $wd(a){if(a.g==null){switch(a.p){case 0:a.g=Swd(a)?(Bcb(),Acb):(Bcb(),zcb);break;case 1:a.g=Scb(Twd(a));break;case 2:a.g=bdb(Uwd(a));break;case 3:a.g=Vwd(a);break;case 4:a.g=new Ndb(Wwd(a));break;case 6:a.g=Aeb(Ywd(a));break;case 5:a.g=meb(Xwd(a));break;case 7:a.g=Web(Zwd(a));}}return a.g} -function hxd(a){if(a.n==null){switch(a.p){case 0:a.n=_wd(a)?(Bcb(),Acb):(Bcb(),zcb);break;case 1:a.n=Scb(axd(a));break;case 2:a.n=bdb(bxd(a));break;case 3:a.n=cxd(a);break;case 4:a.n=new Ndb(dxd(a));break;case 6:a.n=Aeb(fxd(a));break;case 5:a.n=meb(exd(a));break;case 7:a.n=Web(gxd(a));}}return a.n} -function QDb(a){var b,c,d,e,f,g,h;for(f=new olb(a.a.a);f.a<f.c.c.length;){d=BD(mlb(f),307);d.g=0;d.i=0;d.e.a.$b()}for(e=new olb(a.a.a);e.a<e.c.c.length;){d=BD(mlb(e),307);for(c=d.a.a.ec().Kc();c.Ob();){b=BD(c.Pb(),57);for(h=b.c.Kc();h.Ob();){g=BD(h.Pb(),57);if(g.a!=d){Qqb(d.e,g);++g.a.g;++g.a.i}}}}} -function gOb(a,b){var c,d,e,f,g,h;h=Axb(a.a,b.b);if(!h){throw vbb(new Zdb('Invalid hitboxes for scanline overlap calculation.'))}g=false;for(f=(d=new Ywb((new cxb((new Gjb(a.a.a)).a)).b),new Njb(d));sib(f.a.a);){e=(c=Wwb(f.a),BD(c.cd(),65));if(bOb(b.b,e)){T$c(a.b.a,b.b,e);g=true}else{if(g){break}}}} -function G5b(a){var b,c,d,e,f;e=BD(vNb(a,(Nyc(),Fxc)),21);f=BD(vNb(a,Ixc),21);c=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new g7c(c);if(e.Hc((tdd(),pdd))){d=BD(vNb(a,Hxc),8);if(f.Hc((Idd(),Bdd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}H5b(a,c,b)} -function toc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b?new Coc:new Eoc;f=false;do{f=false;j=b?Su(a.b):a.b;for(i=j.Kc();i.Ob();){h=BD(i.Pb(),29);m=Mu(h.a);b||new ov(m);for(l=new olb(m);l.a<l.c.c.length;){k=BD(mlb(l),10);if(e.Mb(k)){d=k;c=BD(vNb(k,(wtc(),usc)),305);g=b?c.b:c.k;f=roc(d,g,b,false)}}}}while(f)} -function WCc(a,b,c){var d,e,f,g,h;Odd(c,'Longest path layering',1);a.a=b;h=a.a.a;a.b=KC(WD,oje,25,h.c.length,15,1);d=0;for(g=new olb(h);g.a<g.c.c.length;){e=BD(mlb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),10);YCc(a,e)}h.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.b=null;Qdd(c)} -function QVb(a,b){var c,d,e;b.a?(Axb(a.b,b.b),a.a[b.b.i]=BD(Exb(a.b,b.b),81),c=BD(Dxb(a.b,b.b),81),!!c&&(a.a[c.i]=b.b),undefined):(d=BD(Exb(a.b,b.b),81),!!d&&d==a.a[b.b.i]&&!!d.d&&d.d!=b.b.d&&d.f.Fc(b.b),e=BD(Dxb(a.b,b.b),81),!!e&&a.a[e.i]==b.b&&!!e.d&&e.d!=b.b.d&&b.b.f.Fc(e),Fxb(a.b,b.b),undefined)} -function zbc(a,b){var c,d,e,f,g,h;f=a.d;h=Edb(ED(vNb(a,(Nyc(),Zwc))));if(h<0){h=0;yNb(a,Zwc,h)}b.o.b=h;g=$wnd.Math.floor(h/2);d=new H0b;G0b(d,(Ucd(),Tcd));F0b(d,b);d.n.b=g;e=new H0b;G0b(e,zcd);F0b(e,b);e.n.b=g;RZb(a,d);c=new UZb;tNb(c,a);yNb(c,jxc,null);QZb(c,e);RZb(c,f);ybc(b,a,c);wbc(a,c);return c} -function uNc(a){var b,c;c=BD(vNb(a,(wtc(),Ksc)),21);b=new j3c;if(c.Hc((Orc(),Irc))){d3c(b,oNc);d3c(b,qNc)}if(c.Hc(Krc)||Ccb(DD(vNb(a,(Nyc(),$wc))))){d3c(b,qNc);c.Hc(Lrc)&&d3c(b,rNc)}c.Hc(Hrc)&&d3c(b,nNc);c.Hc(Nrc)&&d3c(b,sNc);c.Hc(Jrc)&&d3c(b,pNc);c.Hc(Erc)&&d3c(b,lNc);c.Hc(Grc)&&d3c(b,mNc);return b} -function Ihb(a,b){var c,d,e,f,g,h,i,j,k,l,m;d=a.d;f=b.d;h=d+f;i=a.e!=b.e?-1:1;if(h==2){k=Ibb(xbb(a.a[0],Yje),xbb(b.a[0],Yje));m=Tbb(k);l=Tbb(Pbb(k,32));return l==0?new Ugb(i,m):new Vgb(i,2,OC(GC(WD,1),oje,25,15,[m,l]))}c=a.a;e=b.a;g=KC(WD,oje,25,h,15,1);Fhb(c,d,e,f,g);j=new Vgb(i,h,g);Jgb(j);return j} -function Gwb(a,b,c,d){var e,f;if(!b){return c}else{e=a.a.ue(c.d,b.d);if(e==0){d.d=ijb(b,c.e);d.b=true;return b}f=e<0?0:1;b.a[f]=Gwb(a,b.a[f],c,d);if(Hwb(b.a[f])){if(Hwb(b.a[1-f])){b.b=true;b.a[0].b=false;b.a[1].b=false}else{Hwb(b.a[f].a[f])?(b=Owb(b,1-f)):Hwb(b.a[f].a[1-f])&&(b=Nwb(b,1-f))}}}return b} -function wHb(a,b,c){var d,e,f,g;e=a.i;d=a.n;vHb(a,(gHb(),dHb),e.c+d.b,c);vHb(a,fHb,e.c+e.b-d.c-c[2],c);g=e.b-d.b-d.c;if(c[0]>0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);vHb(a,eHb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==eHb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} -function AYb(){this.c=KC(UD,Vje,25,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,15,1);this.b=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);this.a=KC(UD,Vje,25,OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]).length,15,1);zlb(this.c,Pje);zlb(this.b,Qje);zlb(this.a,Qje)} -function Ufe(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=KC(WD,oje,25,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=KC(WD,oje,25,d+2,15,1);$fb(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||Yfe(a)}} -function inc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new Skb(j.c.length);a.c=new Lqb;for(h=new olb(j);h.a<h.c.c.length;){g=BD(mlb(h),101);f=new uOc(null);Ekb(a.a,f);Rhb(a.c,g,f)}a.b=new Lqb;gnc(a,b);for(d=0;d<j.c.length-1;d++){i=BD(Ikb(b.d,d),101);for(e=d+1;e<j.c.length;e++){jnc(a,i,BD(Ikb(b.d,e),101),c)}}} -function ySc(a,b,c){var d,e,f,g,h,i;if(!Qq(b)){i=Udd(c,(JD(b,14)?BD(b,14).gc():sr(b.Kc()))/a.a|0);Odd(i,Xqe,1);h=new BSc;g=0;for(f=b.Kc();f.Ob();){d=BD(f.Pb(),86);h=pl(OC(GC(KI,1),Uhe,20,0,[h,new ZRc(d)]));g<d.f.b&&(g=d.f.b)}for(e=b.Kc();e.Ob();){d=BD(e.Pb(),86);yNb(d,(mTc(),bTc),g)}Qdd(i);ySc(a,h,c)}} -function bJc(a,b){var c,d,e,f,g,h,i;c=Qje;h=(j0b(),h0b);for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=d.k;if(f!=h0b){g=ED(vNb(d,(wtc(),atc)));if(g==null){c=$wnd.Math.max(c,0);d.n.b=c+iBc(a.a,f,h)}else{d.n.b=(uCb(g),g)}}i=iBc(a.a,f,h);d.n.b<c+i+d.d.d&&(d.n.b=c+i+d.d.d);c=d.n.b+d.o.b+d.d.a;h=f}} -function uQb(a,b,c){var d,e,f,g,h,i,j,k,l;f=itd(b,false,false);j=ofd(f);l=Edb(ED(hkd(b,(CPb(),vPb))));e=sQb(j,l+a.a);k=new XOb(e);tNb(k,b);Rhb(a.b,b,k);c.c[c.c.length]=k;i=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(h=new Fyd(i);h.e!=h.i.gc();){g=BD(Dyd(h),137);d=wQb(a,g,true,0,0);c.c[c.c.length]=d}return k} -function JVc(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.lg(e);f=BD(e.Xb(0),33);if(HVc(a,c,f,false)){return true}g=BD(e.Xb(e.gc()-1),33);if(HVc(a,d,g,true)){return true}if(CVc(a,e)){return true}for(k=e.Kc();k.Ob();){j=BD(k.Pb(),33);for(i=b.Kc();i.Ob();){h=BD(i.Pb(),33);if(BVc(a,j,h)){return true}}}return false} -function qid(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.Yg(c),BD(j>=0?a._g(j,false,true):sid(a,c,false),58));n:for(f=l.Kc();f.Ob();){e=BD(f.Pb(),56);for(k=0;k<m;++k){g=(tCb(k,b.c.length),BD(b.c[k],72));i=g.dd();h=g.ak();d=e.bh(h,false);if(i==null?d!=null:!pb(i,d)){continue n}}return e}return null} -function V6b(a,b,c,d){var e,f,g,h;e=BD(Y_b(b,(Ucd(),Tcd)).Kc().Pb(),11);f=BD(Y_b(b,zcd).Kc().Pb(),11);for(h=new olb(a.j);h.a<h.c.c.length;){g=BD(mlb(h),11);while(g.e.c.length!=0){RZb(BD(Ikb(g.e,0),17),e)}while(g.g.c.length!=0){QZb(BD(Ikb(g.g,0),17),f)}}c||yNb(b,(wtc(),Vsc),null);d||yNb(b,(wtc(),Wsc),null)} -function itd(a,b,c){var d,e;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){return etd(a)}else{d=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);if(b){Uxd((!d.a&&(d.a=new xMd(y2,d,5)),d.a));omd(d,0);pmd(d,0);hmd(d,0);imd(d,0)}if(c){e=(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a);while(e.i>1){Xxd(e,e.i-1)}}return d}} -function Z2b(a,b){var c,d,e,f,g,h,i;Odd(b,'Comment post-processing',1);for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);d=new Rkb;for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);i=BD(vNb(g,(wtc(),vtc)),15);c=BD(vNb(g,tsc),15);if(!!i||!!c){$2b(g,i,c);!!i&&Gkb(d,i);!!c&&Gkb(d,c)}}Gkb(e.a,d)}Qdd(b)} -function Eac(a,b){var c,d,e,f,g,h,i;c=new jkb;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);i=true;d=0;for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);switch(g.k.g){case 4:++d;case 1:Xjb(c,g);break;case 0:Gac(g,b);default:c.b==c.c||Fac(c,d,i,false,b);i=false;d=0;}}c.b==c.c||Fac(c,d,i,true,b)}} -function Ebc(a,b){var c,d,e,f,g,h,i;e=new Rkb;for(c=0;c<=a.i;c++){d=new H1b(b);d.p=a.i-c;e.c[e.c.length]=d}for(h=new olb(a.o);h.a<h.c.c.length;){g=BD(mlb(h),10);$_b(g,BD(Ikb(e,a.i-a.f[g.p]),29))}f=new olb(e);while(f.a<f.c.c.length){i=BD(mlb(f),29);i.a.c.length==0&&nlb(f)}b.b.c=KC(SI,Uhe,1,0,5,1);Gkb(b.b,e)} -function KHc(a,b){var c,d,e,f,g,h;c=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),11);AHc(a.b,a.d[g.p]);for(e=new b1b(g.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);f=aIc(a,g==d.c?d.d:d.c);if(f>a.d[g.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} -function o2c(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i==0||(f+=o2c(a,d,false))}if(c){g=Xod(b);while(g){f+=(!g.a&&(g.a=new cUd(E2,g,10,11)),g.a).i;g=Xod(g)}}return f} -function Xxd(a,b){var c,d,e,f;if(a.ej()){d=null;e=a.fj();a.ij()&&(d=a.kj(a.pi(b),null));c=a.Zi(4,f=tud(a,b),null,b,e);if(a.bj()&&f!=null){d=a.dj(f,d);if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}else{if(!d){a.$i(c)}else{d.Ei(c);d.Fi()}}return f}else{f=tud(a,b);if(a.bj()&&f!=null){d=a.dj(f,null);!!d&&d.Fi()}return f}} -function UKb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new Tqb;i=0;for(d=new olb(a.d);d.a<d.c.c.length;){c=BD(mlb(d),222);k=0;ktb(c.b,new XKb);for(g=Jsb(c.b,0);g.b!=g.d.c;){f=BD(Xsb(g),222);if(b.a._b(f)){e=c.c;h=f.c;k<h.d+h.a+j&&k+e.a+j>h.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} -function Orc(){Orc=ccb;Frc=new Prc('COMMENTS',0);Hrc=new Prc('EXTERNAL_PORTS',1);Irc=new Prc('HYPEREDGES',2);Jrc=new Prc('HYPERNODES',3);Krc=new Prc('NON_FREE_PORTS',4);Lrc=new Prc('NORTH_SOUTH_PORTS',5);Nrc=new Prc(Wne,6);Erc=new Prc('CENTER_LABELS',7);Grc=new Prc('END_LABELS',8);Mrc=new Prc('PARTITIONS',9)} -function gVc(a){var b,c,d,e,f;e=new Rkb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(d=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){f=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));b.a._b(f)||(e.c[e.c.length]=f,true)}}return e} -function fVc(a){var b,c,d,e,f,g;f=new Tqb;b=new Vqb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));for(e=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!JD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),186)){g=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} -function zA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} -function BA(a,b,c,d,e){if(d<0){d=oA(a,e,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje]),b);d<0&&(d=oA(a,e,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} -function DA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=bfb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=rA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new eB;j=i.q.getFullYear()-nje+nje-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d<g?100:0)}f.p=d;return true} -function L1b(a,b){var c,d,e,f,g;if(!Xod(a)){return}g=BD(vNb(b,(Nyc(),Fxc)),174);PD(hkd(a,Vxc))===PD((dcd(),ccd))&&jkd(a,Vxc,bcd);d=(Pgd(),new bhd(Xod(a)));f=new hhd(!Xod(a)?null:new bhd(Xod(a)),a);e=PGb(d,f,false,true);rqb(g,(tdd(),pdd));c=BD(vNb(b,Hxc),8);c.a=$wnd.Math.max(e.a,c.a);c.b=$wnd.Math.max(e.b,c.b)} -function Pac(a,b,c){var d,e,f,g,h,i;for(g=BD(vNb(a,(wtc(),Lsc)),15).Kc();g.Ob();){f=BD(g.Pb(),10);switch(BD(vNb(f,(Nyc(),mxc)),163).g){case 2:$_b(f,b);break;case 4:$_b(f,c);}for(e=new Sr(ur(O_b(f).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(!!d.c&&!!d.d){continue}h=!d.d;i=BD(vNb(d,ctc),11);h?RZb(d,i):QZb(d,i)}}} -function Alc(){Alc=ccb;tlc=new Blc(xle,0,(Ucd(),Acd),Acd);wlc=new Blc(zle,1,Rcd,Rcd);slc=new Blc(yle,2,zcd,zcd);zlc=new Blc(Ale,3,Tcd,Tcd);vlc=new Blc('NORTH_WEST_CORNER',4,Tcd,Acd);ulc=new Blc('NORTH_EAST_CORNER',5,Acd,zcd);ylc=new Blc('SOUTH_WEST_CORNER',6,Rcd,Tcd);xlc=new Blc('SOUTH_EAST_CORNER',7,zcd,Rcd)} -function i6c(){i6c=ccb;h6c=OC(GC(XD,1),Sje,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]);$wnd.Math.pow(2,-65)} -function Pcc(a,b){var c,d,e,f,g;if(a.c.length==0){return new vgd(meb(0),meb(0))}c=(tCb(0,a.c.length),BD(a.c[0],11)).j;g=0;f=b.g;d=b.g+1;while(g<a.c.length-1&&c.g<f){++g;c=(tCb(g,a.c.length),BD(a.c[g],11)).j}e=g;while(e<a.c.length-1&&c.g<d){++e;c=(tCb(g,a.c.length),BD(a.c[g],11)).j}return new vgd(meb(g),meb(e))} -function R9b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=b.c.length;g=(tCb(c,b.c.length),BD(b.c[c],286));h=g.a.o.a;l=g.c;m=0;for(j=g.c;j<=g.f;j++){if(h<=a.a[j]){return j}k=a.a[j];i=null;for(e=c+1;e<f;e++){d=(tCb(e,b.c.length),BD(b.c[e],286));d.c<=j&&d.f>=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} -function ode(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=Xee(a.i));a.j=a.i.length;nde(a);f=rde(a);if(a.d!=a.j)throw vbb(new mde(tvd((h0d(),sue))));if(a.g){for(d=0;d<a.g.a.c.length;d++){e=BD(Uvb(a.g,d),584);if(a.f<=e.a)throw vbb(new mde(tvd((h0d(),tue))))}a.g.a.c=KC(SI,Uhe,1,0,5,1)}return f} -function _Pd(a,b){var c,d,e;if(b==null){for(d=(!a.a&&(a.a=new cUd(g5,a,9,5)),new Fyd(a.a));d.e!=d.i.gc();){c=BD(Dyd(d),678);e=c.c;if((e==null?c.zb:e)==null){return c}}}else{for(d=(!a.a&&(a.a=new cUd(g5,a,9,5)),new Fyd(a.a));d.e!=d.i.gc();){c=BD(Dyd(d),678);if(dfb(b,(e=c.c,e==null?c.zb:e))){return c}}}return null} -function KIb(a,b){var c;c=null;switch(b.g){case 1:a.e.Xe((Y9c(),o9c))&&(c=BD(a.e.We(o9c),249));break;case 3:a.e.Xe((Y9c(),p9c))&&(c=BD(a.e.We(p9c),249));break;case 2:a.e.Xe((Y9c(),n9c))&&(c=BD(a.e.We(n9c),249));break;case 4:a.e.Xe((Y9c(),q9c))&&(c=BD(a.e.We(q9c),249));}!c&&(c=BD(a.e.We((Y9c(),l9c)),249));return c} -function OCc(a,b,c){var d,e,f,g,h,i,j,k,l;b.p=1;f=b.c;for(l=W_b(b,(KAc(),IAc)).Kc();l.Ob();){k=BD(l.Pb(),11);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);j=d.d.i;if(b!=j){g=j.c;if(g.p<=f.p){h=f.p+1;if(h==c.b.c.length){i=new H1b(c);i.p=h;Ekb(c.b,i);$_b(j,i)}else{i=BD(Ikb(c.b,h),29);$_b(j,i)}OCc(a,j,c)}}}}} -function ZXc(a,b,c){var d,e,f,g,h,i;e=c;f=0;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),33);jkd(g,(ZWc(),SWc),meb(e++));i=gVc(g);d=$wnd.Math.atan2(g.j+g.f/2,g.i+g.g/2);d+=d<0?dre:0;d<0.7853981633974483||d>vre?Okb(i,a.b):d<=vre&&d>wre?Okb(i,a.d):d<=wre&&d>xre?Okb(i,a.c):d<=xre&&Okb(i,a.a);f=ZXc(a,i,f)}return e} -function Hgb(){Hgb=ccb;var a;Cgb=new Ugb(1,1);Egb=new Ugb(1,10);Ggb=new Ugb(0,0);Bgb=new Ugb(-1,1);Dgb=OC(GC(cJ,1),nie,91,0,[Ggb,Cgb,new Ugb(1,2),new Ugb(1,3),new Ugb(1,4),new Ugb(1,5),new Ugb(1,6),new Ugb(1,7),new Ugb(1,8),new Ugb(1,9),Egb]);Fgb=KC(cJ,nie,91,32,0,1);for(a=0;a<Fgb.length;a++){Fgb[a]=ghb(Nbb(1,a))}} -function B9b(a,b,c,d,e,f){var g,h,i,j;h=!WAb(JAb(a.Oc(),new Xxb(new F9b))).sd((EAb(),DAb));g=a;f==(ead(),dad)&&(g=JD(g,152)?km(BD(g,152)):JD(g,131)?BD(g,131).a:JD(g,54)?new ov(g):new dv(g));for(j=g.Kc();j.Ob();){i=BD(j.Pb(),70);i.n.a=b.a;h?(i.n.b=b.b+(d.b-i.o.b)/2):e?(i.n.b=b.b):(i.n.b=b.b+d.b-i.o.b);b.a+=i.o.a+c}} -function UOc(a,b,c,d){var e,f,g,h,i,j;e=(d.c+d.a)/2;Osb(b.j);Dsb(b.j,e);Osb(c.e);Dsb(c.e,e);j=new aPc;for(h=new olb(a.f);h.a<h.c.c.length;){f=BD(mlb(h),129);i=f.a;WOc(j,b,i);WOc(j,c,i)}for(g=new olb(a.k);g.a<g.c.c.length;){f=BD(mlb(g),129);i=f.b;WOc(j,b,i);WOc(j,c,i)}j.b+=2;j.a+=POc(b,a.q);j.a+=POc(a.q,c);return j} -function FSc(a,b,c){var d,e,f,g,h;if(!Qq(b)){h=Udd(c,(JD(b,14)?BD(b,14).gc():sr(b.Kc()))/a.a|0);Odd(h,Xqe,1);g=new ISc;f=null;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),86);g=pl(OC(GC(KI,1),Uhe,20,0,[g,new ZRc(d)]));if(f){yNb(f,(mTc(),hTc),d);yNb(d,_Sc,f);if(VRc(d)==VRc(f)){yNb(f,iTc,d);yNb(d,aTc,f)}}f=d}Qdd(h);FSc(a,g,c)}} -function VHb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.d;a.f==(EIb(),CIb)?(h+=(c.a-a.e.b)/2):a.f==BIb&&(h+=c.a-a.e.b);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);g=d.rf();f=new d7c;f.b=h;h+=g.b+a.a;switch(a.b.g){case 0:f.a=c.c+b.b;break;case 1:f.a=c.c+b.b+(c.b-g.a)/2;break;case 2:f.a=c.c+c.b-b.c-g.a;}d.tf(f)}} -function XHb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.c;a.b==(NHb(),KHb)?(h+=(c.b-a.e.a)/2):a.b==MHb&&(h+=c.b-a.e.a);for(e=new olb(a.d);e.a<e.c.c.length;){d=BD(mlb(e),181);g=d.rf();f=new d7c;f.a=h;h+=g.a+a.a;switch(a.f.g){case 0:f.b=c.d+b.d;break;case 1:f.b=c.d+b.d+(c.a-g.b)/2;break;case 2:f.b=c.d+c.a-b.a-g.b;}d.tf(f)}} -function D4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=BD(Ohb(c.c,b),459);n=f.f;o=f.a;i=new f7c(k,n);l=new f7c(g,o);e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new f7c(e,n);m=new f7c(e,o);n7c(b.a,OC(GC(m1,1),nie,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} -function jdd(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Rse),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new mdd)));p4c(a,Rse,ame,fdd);p4c(a,Rse,wme,15);p4c(a,Rse,yme,meb(0));p4c(a,Rse,_le,tme)} -function hde(){hde=ccb;var a,b,c,d,e,f;fde=KC(SD,wte,25,255,15,1);gde=KC(TD,$ie,25,16,15,1);for(b=0;b<255;b++){fde[b]=-1}for(c=57;c>=48;c--){fde[c]=c-48<<24>>24}for(d=70;d>=65;d--){fde[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){fde[e]=e-97+10<<24>>24}for(f=0;f<10;f++)gde[f]=48+f&aje;for(a=10;a<=15;a++)gde[a]=65+a-10&aje} -function BVc(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g/2;g=c.g+a.g/2;d=b.f+a.g/2;e=c.f+a.g/2;if(h<i+g&&i<h&&j<k+e&&k<j){return true}else if(i<h+f&&h<i&&k<j+d&&j<k){return true}else if(h<i+g&&i<h&&j<k&&k<j+d){return true}else if(i<h+f&&h<i&&j<k+e&&k<j){return true}return false} -function NTb(a){var b,c,d,e,f;e=BD(vNb(a,(Nyc(),Fxc)),21);f=BD(vNb(a,Ixc),21);c=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new g7c(c);if(e.Hc((tdd(),pdd))){d=BD(vNb(a,Hxc),8);if(f.Hc((Idd(),Bdd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Ccb(DD(vNb(a,Gxc)))||OTb(a,c,b)} -function NJc(a,b){var c,d,e,f;for(f=V_b(b,(Ucd(),Rcd)).Kc();f.Ob();){d=BD(f.Pb(),11);c=BD(vNb(d,(wtc(),gtc)),10);!!c&&AFb(DFb(CFb(EFb(BFb(new FFb,0),0.1),a.i[b.p].d),a.i[c.p].a))}for(e=V_b(b,Acd).Kc();e.Ob();){d=BD(e.Pb(),11);c=BD(vNb(d,(wtc(),gtc)),10);!!c&&AFb(DFb(CFb(EFb(BFb(new FFb,0),0.1),a.i[c.p].d),a.i[b.p].a))}} -function QKd(a){var b,c,d,e,f,g;if(!a.c){g=new wNd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(VKd(a));d.e!=d.i.gc();){c=BD(Dyd(d),87);e=KQd(c);JD(e,88)&&ytd(g,QKd(BD(e,26)));wtd(g,c)}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}tNd(g);vud(g);a.c=new nNd((BD(qud(ZKd((NFd(),MFd).o),15),18),g.i),g.g);$Kd(a).b&=-33}return a.c} -function eee(a){var b;if(a.c!=10)throw vbb(new mde(tvd((h0d(),uue))));b=a.a;switch(b){case 110:b=10;break;case 114:b=13;break;case 116:b=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 vbb(new mde(tvd((h0d(),Yue))));}return b} -function qD(a){var b,c,d,e,f;if(a.l==0&&a.m==0&&a.h==0){return '0'}if(a.h==Gje&&a.m==0&&a.l==0){return '-9223372036854775808'}if(a.h>>19!=0){return '-'+qD(hD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=RC(Jje);c=UC(c,e,true);b=''+pD(QC);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} -function xrb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} -function Pgc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new olb(a.d.b);e.a<e.c.c.length;){d=BD(mlb(e),29);d.p=c++;for(g=new olb(d.a);g.a<g.c.c.length;){f=BD(mlb(g),10);!b&&!Qq(O_b(f))&&(b=true)}}h=qqb((ead(),cad),OC(GC(t1,1),Kie,103,0,[aad,bad]));if(!b){rqb(h,dad);rqb(h,_9c)}a.a=new mDb(h);Uhb(a.f);Uhb(a.b);Uhb(a.e);Uhb(a.g)} -function _Xb(a,b,c){var d,e,f,g,h,i,j,k,l;d=c.c;e=c.d;h=A0b(b.c);i=A0b(b.d);if(d==b.c){h=aYb(a,h,e);i=bYb(b.d)}else{h=bYb(b.c);i=aYb(a,i,e)}j=new t7c(b.a);Gsb(j,h,j.a,j.a.a);Gsb(j,i,j.c.b,j.c);g=b.c==d;l=new BYb;for(f=0;f<j.b-1;++f){k=new vgd(BD(Ut(j,f),8),BD(Ut(j,f+1),8));g&&f==0||!g&&f==j.b-2?(l.b=k):Ekb(l.a,k)}return l} -function O$b(a,b){var c,d,e,f;f=a.j.g-b.j.g;if(f!=0){return f}c=BD(vNb(a,(Nyc(),Wxc)),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} -function G6b(a,b,c,d){var e,f,g,h,i;if(sr((D6b(),new Sr(ur(O_b(b).a.Kc(),new Sq))))>=a.a){return -1}if(!F6b(b,c)){return -1}if(Qq(BD(d.Kb(b),20))){return 1}e=0;for(g=BD(d.Kb(b),20).Kc();g.Ob();){f=BD(g.Pb(),17);i=f.c.i==b?f.d.i:f.c.i;h=G6b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} -function Btd(a,b){var c,d,e,f,g,h;if(PD(b)===PD(a)){return true}if(!JD(b,15)){return false}d=BD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.ni()){for(c=0;c<h;++c){e=a.ki(c);f=g.Pb();if(e==null?f!=null:!pb(e,f)){return false}}}else{for(c=0;c<h;++c){e=a.ki(c);f=g.Pb();if(PD(e)!==PD(f)){return false}}}return true} -function rAd(a,b){var c,d,e,f,g,h;if(a.f>0){a.qj();if(b!=null){for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=BD(c.g,367);h=c.i;for(g=0;g<h;++g){e=d[g];if(pb(b,e.dd())){return true}}}}}else{for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=BD(c.g,367);h=c.i;for(g=0;g<h;++g){e=d[g];if(PD(b)===PD(e.dd())){return true}}}}}}return false} -function e6b(a,b,c){var d,e,f,g;Odd(c,'Orthogonally routing hierarchical port edges',1);a.a=0;d=h6b(b);k6b(b,d);j6b(a,b,d);f6b(b);e=BD(vNb(b,(Nyc(),Vxc)),98);f=b.b;d6b((tCb(0,f.c.length),BD(f.c[0],29)),e,b);d6b(BD(Ikb(f,f.c.length-1),29),e,b);g=b.b;b6b((tCb(0,g.c.length),BD(g.c[0],29)));b6b(BD(Ikb(g,g.c.length-1),29));Qdd(c)} -function jnd(a){switch(a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{return a-48<<24>>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw vbb(new Oeb('Invalid hexadecimal'))}}} -function AUc(a,b,c){var d,e,f,g;Odd(c,'Processor order nodes',2);a.a=Edb(ED(vNb(b,(JTc(),HTc))));e=new Psb;for(g=Jsb(b.b,0);g.b!=g.d.c;){f=BD(Xsb(g),86);Ccb(DD(vNb(f,(mTc(),jTc))))&&(Gsb(e,f,e.c.b,e.c),true)}d=(sCb(e.b!=0),BD(e.a.a.c,86));yUc(a,d);!c.b&&Rdd(c,1);BUc(a,d,0-Edb(ED(vNb(d,(mTc(),bTc))))/2,0);!c.b&&Rdd(c,1);Qdd(c)} -function rFb(){rFb=ccb;qFb=new sFb('SPIRAL',0);lFb=new sFb('LINE_BY_LINE',1);mFb=new sFb('MANHATTAN',2);kFb=new sFb('JITTER',3);oFb=new sFb('QUADRANTS_LINE_BY_LINE',4);pFb=new sFb('QUADRANTS_MANHATTAN',5);nFb=new sFb('QUADRANTS_JITTER',6);jFb=new sFb('COMBINE_LINE_BY_LINE_MANHATTAN',7);iFb=new sFb('COMBINE_JITTER_MANHATTAN',8)} -function roc(a,b,c,d){var e,f,g,h,i,j;i=woc(a,c);j=woc(b,c);e=false;while(!!i&&!!j){if(d||uoc(i,j,c)){g=woc(i,c);h=woc(j,c);zoc(b);zoc(a);f=i.c;sbc(i,false);sbc(j,false);if(c){Z_b(b,j.p,f);b.p=j.p;Z_b(a,i.p+1,f);a.p=i.p}else{Z_b(a,i.p,f);a.p=i.p;Z_b(b,j.p+1,f);b.p=j.p}$_b(i,null);$_b(j,null);i=g;j=h;e=true}else{break}}return e} -function VDc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new olb(d.j);h.a<h.c.c.length;){g=BD(mlb(h),11);PD(vNb(g,(wtc(),$sc)))===PD(c)&&(g.g.c.length==0?g.e.c.length==0||(e=true):(f=true))}i=0;e&&e^f?(i=c.j==(Ucd(),Acd)?-a.e[d.c.p][d.p]:b-a.e[d.c.p][d.p]):f&&e^f?(i=a.e[d.c.p][d.p]+1):e&&f&&(i=c.j==(Ucd(),Acd)?0:b/2);return i} -function NEd(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=LCb(b.toLowerCase()));c!=null&&(i^=LCb(c));d!=null&&(i^=LCb(d));g!=null&&(i^=LCb(g));h!=null&&(i^=LCb(h));for(j=0,k=f.length;j<k;j++){i^=LCb(f[j])}a?(i|=256):(i&=-257);e?(i|=16):(i&=-17);this.f=i;this.i=b==null?null:(uCb(b),b);this.a=c;this.d=d;this.j=f;this.g=g;this.e=h} -function X_b(a,b,c){var d,e;e=null;switch(b.g){case 1:e=(z0b(),u0b);break;case 2:e=(z0b(),w0b);}d=null;switch(c.g){case 1:d=(z0b(),v0b);break;case 2:d=(z0b(),t0b);break;case 3:d=(z0b(),x0b);break;case 4:d=(z0b(),y0b);}return !!e&&!!d?Nq(a.j,new Yb(new amb(OC(GC(_D,1),Uhe,169,0,[BD(Qb(e),169),BD(Qb(d),169)])))):(mmb(),mmb(),jmb)} -function t5b(a){var b,c,d;b=BD(vNb(a,(Nyc(),Hxc)),8);yNb(a,Hxc,new f7c(b.b,b.a));switch(BD(vNb(a,mwc),248).g){case 1:yNb(a,mwc,(F7c(),E7c));break;case 2:yNb(a,mwc,(F7c(),A7c));break;case 3:yNb(a,mwc,(F7c(),C7c));break;case 4:yNb(a,mwc,(F7c(),D7c));}if((!a.q?(mmb(),mmb(),kmb):a.q)._b(ayc)){c=BD(vNb(a,ayc),8);d=c.a;c.a=c.b;c.b=d}} -function jjc(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw vbb(new qcb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new dIc(d);THc(this.e,this.c,(Ucd(),Tcd));this.i=new dIc(d);THc(this.i,this.c,zcd);this.f=new ejc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(j0b(),e0b);this.a&&hjc(this,a,b.length)} -function hKb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((Idd(),zdd));g=a.B.Hc(Cdd);a.a=new FHb(g,f,a.c);!!a.n&&u_b(a.a.n,a.n);lIb(a.g,(gHb(),eHb),a.a);if(!b){d=new mIb(1,f,a.c);d.n.a=a.k;Npb(a.p,(Ucd(),Acd),d);e=new mIb(1,f,a.c);e.n.d=a.k;Npb(a.p,Rcd,e);h=new mIb(0,f,a.c);h.n.c=a.k;Npb(a.p,Tcd,h);c=new mIb(0,f,a.c);c.n.b=a.k;Npb(a.p,zcd,c)}} -function Vgc(a){var b,c,d;b=BD(vNb(a.d,(Nyc(),Swc)),218);switch(b.g){case 2:c=Ngc(a);break;case 3:c=(d=new Rkb,MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Shc),new Uhc),new Whc),new ehc),new Yhc(d)),d);break;default:throw vbb(new Zdb('Compaction not supported for '+b+' edges.'));}Ugc(a,c);reb(new Pib(a.g),new Ehc(a))} -function a2c(a,b){var c;c=new zNb;!!b&&tNb(c,BD(Ohb(a.a,C2),94));JD(b,470)&&tNb(c,BD(Ohb(a.a,G2),94));if(JD(b,354)){tNb(c,BD(Ohb(a.a,D2),94));return c}JD(b,82)&&tNb(c,BD(Ohb(a.a,z2),94));if(JD(b,239)){tNb(c,BD(Ohb(a.a,E2),94));return c}if(JD(b,186)){tNb(c,BD(Ohb(a.a,F2),94));return c}JD(b,352)&&tNb(c,BD(Ohb(a.a,B2),94));return c} -function wSb(){wSb=ccb;oSb=new Osd((Y9c(),D9c),meb(1));uSb=new Osd(T9c,80);tSb=new Osd(M9c,5);bSb=new Osd(r8c,tme);pSb=new Osd(E9c,meb(1));sSb=new Osd(H9c,(Bcb(),true));lSb=new q0b(50);kSb=new Osd(f9c,lSb);dSb=O8c;mSb=t9c;cSb=new Osd(B8c,false);jSb=e9c;iSb=b9c;hSb=Y8c;gSb=W8c;nSb=x9c;fSb=(SRb(),LRb);vSb=QRb;eSb=KRb;qSb=NRb;rSb=PRb} -function ZXb(a){var b,c,d,e,f,g,h,i;i=new jYb;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){continue}XXb(i,g,new d7c);for(f=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(e.c.i.k==e0b||e.d.i.k==e0b){continue}for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);b=c;hYb(i,new cWb(b.a,b.b))}}}return i} -function A0c(){A0c=ccb;z0c=new Lsd(Qre);y0c=(R0c(),Q0c);x0c=new Nsd(Vre,y0c);w0c=(a1c(),_0c);v0c=new Nsd(Rre,w0c);u0c=(N_c(),J_c);t0c=new Nsd(Sre,u0c);p0c=new Nsd(Tre,null);s0c=(C_c(),A_c);r0c=new Nsd(Ure,s0c);l0c=(i_c(),h_c);k0c=new Nsd(Wre,l0c);m0c=new Nsd(Xre,(Bcb(),false));n0c=new Nsd(Yre,meb(64));o0c=new Nsd(Zre,true);q0c=B_c} -function Toc(a){var b,c,d,e,f,g;if(a.a!=null){return}a.a=KC(sbb,dle,25,a.c.b.c.length,16,1);a.a[0]=false;if(wNb(a.c,(Nyc(),Lyc))){d=BD(vNb(a.c,Lyc),15);for(c=d.Kc();c.Ob();){b=BD(c.Pb(),19).a;b>0&&b<a.a.length&&(a.a[b]=false)}}else{g=new olb(a.c.b);g.a<g.c.c.length&&mlb(g);e=1;while(g.a<g.c.c.length){f=BD(mlb(g),29);a.a[e++]=Woc(f)}}} -function TMd(a,b){var c,d,e,f;e=a.b;switch(b){case 1:{a.b|=1;a.b|=4;a.b|=8;break}case 2:{a.b|=2;a.b|=4;a.b|=8;break}case 4:{a.b|=1;a.b|=2;a.b|=4;a.b|=8;break}case 3:{a.b|=16;a.b|=8;break}case 0:{a.b|=32;a.b|=16;a.b|=8;a.b|=1;a.b|=2;a.b|=4;break}}if(a.b!=e&&!!a.c){for(d=new Fyd(a.c);d.e!=d.i.gc();){f=BD(Dyd(d),473);c=$Kd(f);XMd(c,b)}}} -function cGc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;e=false;for(g=b,h=0,i=g.length;h<i;++h){f=g[h];Ccb((Bcb(),f.e?true:false))&&!BD(Ikb(a.b,f.e.p),214).s&&(e=e|(j=f.e,k=BD(Ikb(a.b,j.p),214),l=k.e,m=SFc(c,l.length),n=l[m][0],n.k==(j0b(),e0b)?(l[m]=aGc(f,l[m],c?(Ucd(),Tcd):(Ucd(),zcd))):k.c.Tf(l,c),o=dGc(a,k,c,d),bGc(k.e,k.o,c),o))}return e} -function p2c(a,b){var c,d,e,f,g;f=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);if(PD(hkd(d,(Y9c(),J8c)))!==PD((hbd(),gbd))){g=BD(hkd(b,F9c),149);c=BD(hkd(d,F9c),149);(g==c||!!g&&C3c(g,c))&&(!d.a&&(d.a=new cUd(E2,d,10,11)),d.a).i!=0&&(f+=p2c(a,d))}}return f} -function nlc(a){var b,c,d,e,f,g,h;d=0;h=0;for(g=new olb(a.d);g.a<g.c.c.length;){f=BD(mlb(g),101);e=BD(GAb(JAb(new YAb(null,new Kub(f.j,16)),new Ylc),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);c=null;if(d<=h){c=(Ucd(),Acd);d+=e.gc()}else if(h<d){c=(Ucd(),Rcd);h+=e.gc()}b=c;MAb(NAb(e.Oc(),new Mlc),new Olc(b))}} -function mkc(a){var b,c,d,e,f,g,h,i;a.b=new _i(new amb((Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]))),new amb((Fkc(),OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc]))));for(g=OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]),h=0,i=g.length;h<i;++h){f=g[h];for(c=OC(GC(vV,1),Kie,361,0,[Ekc,Dkc,Ckc]),d=0,e=c.length;d<e;++d){b=c[d];Ui(a.b,f,b,new Rkb)}}} -function KJb(a,b){var c,d,e,f,g,h,i,j,k,l;g=BD(BD(Qc(a.r,b),21),84);h=a.u.Hc((rcd(),pcd));c=a.u.Hc(mcd);d=a.u.Hc(lcd);j=a.u.Hc(qcd);l=a.B.Hc((Idd(),Hdd));k=!c&&!d&&(j||g.gc()==2);HJb(a,b);e=null;i=null;if(h){f=g.Kc();e=BD(f.Pb(),111);i=e;while(f.Ob()){i=BD(f.Pb(),111)}e.d.b=0;i.d.c=0;k&&!e.a&&(e.d.c=0)}if(l){LJb(g);if(h){e.d.b=0;i.d.c=0}}} -function SKb(a,b){var c,d,e,f,g,h,i,j,k,l;g=BD(BD(Qc(a.r,b),21),84);h=a.u.Hc((rcd(),pcd));c=a.u.Hc(mcd);d=a.u.Hc(lcd);i=a.u.Hc(qcd);l=a.B.Hc((Idd(),Hdd));j=!c&&!d&&(i||g.gc()==2);QKb(a,b);k=null;e=null;if(h){f=g.Kc();k=BD(f.Pb(),111);e=k;while(f.Ob()){e=BD(f.Pb(),111)}k.d.d=0;e.d.a=0;j&&!k.a&&(k.d.a=0)}if(l){TKb(g);if(h){k.d.d=0;e.d.a=0}}} -function oJc(a,b,c){var d,e,f,g,h,i,j,k;e=b.k;if(b.p>=0){return false}else{b.p=c.b;Ekb(c.e,b)}if(e==(j0b(),g0b)||e==i0b){for(g=new olb(b.j);g.a<g.c.c.length;){f=BD(mlb(g),11);for(k=(d=new olb((new R0b(f)).a.g),new U0b(d));llb(k.a);){j=BD(mlb(k.a),17).d;h=j.i;i=h.k;if(b.c!=h.c){if(i==g0b||i==i0b){if(oJc(a,h,c)){return true}}}}}}return true} -function gJd(a){var b;if((a.Db&64)!=0)return EId(a);b=new Jfb(EId(a));b.a+=' (changeable: ';Ffb(b,(a.Bb&zte)!=0);b.a+=', volatile: ';Ffb(b,(a.Bb&Dve)!=0);b.a+=', transient: ';Ffb(b,(a.Bb&Rje)!=0);b.a+=', defaultValueLiteral: ';Efb(b,a.j);b.a+=', unsettable: ';Ffb(b,(a.Bb&Cve)!=0);b.a+=', derived: ';Ffb(b,(a.Bb&oie)!=0);b.a+=')';return b.a} -function AOb(a){var b,c,d,e,f,g,h,i,j,k,l,m;e=eNb(a.d);g=BD(vNb(a.b,(CPb(),wPb)),116);h=g.b+g.c;i=g.d+g.a;k=e.d.a*a.e+h;j=e.b.a*a.f+i;$Ob(a.b,new f7c(k,j));for(m=new olb(a.g);m.a<m.c.c.length;){l=BD(mlb(m),562);b=l.g-e.a.a;c=l.i-e.c.a;d=P6c(Z6c(new f7c(b,c),l.a,l.b),Y6c(b7c(R6c(HOb(l.e)),l.d*l.a,l.c*l.b),-0.5));f=IOb(l.e);KOb(l.e,c7c(d,f))}} -function tmc(a,b,c,d){var e,f,g,h,i;i=KC(UD,nie,104,(Ucd(),OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd])).length,0,2);for(f=OC(GC(F1,1),bne,61,0,[Scd,Acd,zcd,Rcd,Tcd]),g=0,h=f.length;g<h;++g){e=f[g];i[e.g]=KC(UD,Vje,25,a.c[e.g],15,1)}vmc(i,a,Acd);vmc(i,a,Rcd);smc(i,a,Acd,b,c,d);smc(i,a,zcd,b,c,d);smc(i,a,Rcd,b,c,d);smc(i,a,Tcd,b,c,d);return i} -function UGc(a,b,c){if(Mhb(a.a,b)){if(Rqb(BD(Ohb(a.a,b),53),c)){return 1}}else{Rhb(a.a,b,new Tqb)}if(Mhb(a.a,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return -1}}else{Rhb(a.a,c,new Tqb)}if(Mhb(a.b,b)){if(Rqb(BD(Ohb(a.b,b),53),c)){return -1}}else{Rhb(a.b,b,new Tqb)}if(Mhb(a.b,c)){if(Rqb(BD(Ohb(a.b,c),53),b)){return 1}}else{Rhb(a.b,c,new Tqb)}return 0} -function x2d(a,b,c,d){var e,f,g,h,i,j;if(c==null){e=BD(a.g,119);for(h=0;h<a.i;++h){g=e[h];if(g.ak()==b){return Txd(a,g,d)}}}f=(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c));if(oid(a.e)){j=!R2d(a,b);d=Sxd(a,f,d);i=b.$j()?H2d(a,3,b,null,c,M2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0),j):H2d(a,1,b,b.zj(),c,-1,j);d?d.Ei(i):(d=i)}else{d=Sxd(a,f,d)}return d} -function CJb(a){var b,c,d,e,f,g;if(a.q==(dcd(),_bd)||a.q==$bd){return}e=a.f.n.d+_Gb(BD(Mpb(a.b,(Ucd(),Acd)),124))+a.c;b=a.f.n.a+_Gb(BD(Mpb(a.b,Rcd),124))+a.c;d=BD(Mpb(a.b,zcd),124);g=BD(Mpb(a.b,Tcd),124);f=$wnd.Math.max(0,d.n.d-e);f=$wnd.Math.max(f,g.n.d-e);c=$wnd.Math.max(0,d.n.a-b);c=$wnd.Math.max(c,g.n.a-b);d.n.d=f;g.n.d=f;d.n.a=c;g.n.a=c} -function rdc(a,b){var c,d,e,f,g,h,i,j,k,l,m;Odd(b,'Restoring reversed edges',1);for(i=new olb(a.b);i.a<i.c.c.length;){h=BD(mlb(i),29);for(k=new olb(h.a);k.a<k.c.c.length;){j=BD(mlb(k),10);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);g=k_b(l.g);for(d=g,e=0,f=d.length;e<f;++e){c=d[e];Ccb(DD(vNb(c,(wtc(),ltc))))&&PZb(c,false)}}}}Qdd(b)} -function m4c(){this.b=new $rb;this.d=new $rb;this.e=new $rb;this.c=new $rb;this.a=new Lqb;this.f=new Lqb;hvd(m1,new x4c,new z4c);hvd(l1,new V4c,new X4c);hvd(i1,new Z4c,new _4c);hvd(j1,new b5c,new d5c);hvd(i2,new f5c,new h5c);hvd(DJ,new B4c,new D4c);hvd(xK,new F4c,new H4c);hvd(jK,new J4c,new L4c);hvd(uK,new N4c,new P4c);hvd(kL,new R4c,new T4c)} -function R5d(a){var b,c,d,e,f,g;f=0;b=wId(a);!!b.Bj()&&(f|=4);(a.Bb&Cve)!=0&&(f|=2);if(JD(a,99)){c=BD(a,18);e=zUd(c);(c.Bb&ote)!=0&&(f|=32);if(e){aLd(WId(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&ote)!=0&&(f|=64)}(c.Bb&Tje)!=0&&(f|=Dve);f|=zte}else{if(JD(b,457)){f|=512}else{d=b.Bj();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} -function hc(a,b){var c,d,e,f,g;a=a==null?Xhe:(uCb(a),a);for(e=0;e<b.length;e++){b[e]=ic(b[e])}c=new Vfb;g=0;d=0;while(d<b.length){f=a.indexOf('%s',g);if(f==-1){break}c.a+=''+qfb(a==null?Xhe:(uCb(a),a),g,f);Pfb(c,b[d++]);g=f+2}Ofb(c,a,g,a.length);if(d<b.length){c.a+=' [';Pfb(c,b[d++]);while(d<b.length){c.a+=She;Pfb(c,b[d++])}c.a+=']'}return c.a} -function m3b(a){var b,c,d,e,f;f=new Skb(a.a.c.length);for(e=new olb(a.a);e.a<e.c.c.length;){d=BD(mlb(e),10);c=BD(vNb(d,(Nyc(),mxc)),163);b=null;switch(c.g){case 1:case 2:b=(Gqc(),Fqc);break;case 3:case 4:b=(Gqc(),Dqc);}if(b){yNb(d,(wtc(),Bsc),(Gqc(),Fqc));b==Dqc?o3b(d,c,(KAc(),HAc)):b==Fqc&&o3b(d,c,(KAc(),IAc))}else{f.c[f.c.length]=d}}return f} -function MHc(a,b){var c,d,e,f,g,h,i;c=0;for(i=new olb(b);i.a<i.c.c.length;){h=BD(mlb(i),11);AHc(a.b,a.d[h.p]);g=0;for(e=new b1b(h.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);if(WHc(d)){f=aIc(a,h==d.c?d.d:d.c);if(f>a.d[h.p]){c+=zHc(a.b,f);Wjb(a.a,meb(f))}}else{++g}}c+=a.b.d*g;while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} -function Y6d(a,b){var c;if(a.f==W6d){c=$1d(q1d((O6d(),M6d),b));return a.e?c==4&&b!=(m8d(),k8d)&&b!=(m8d(),h8d)&&b!=(m8d(),i8d)&&b!=(m8d(),j8d):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(_1d(q1d((O6d(),M6d),b)))||a.d.Hc(e1d((O6d(),M6d),a.b,b)))){return true}if(a.f){if(x1d((O6d(),a.f),b2d(q1d(M6d,b)))){c=$1d(q1d(M6d,b));return a.e?c==4:c==2}}return false} -function iVc(a,b,c,d){var e,f,g,h,i,j,k,l;g=BD(hkd(c,(Y9c(),C9c)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dre);e+=b;e>dre&&(e-=dre);h=BD(hkd(d,C9c),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dre);f+=b;f>dre&&(f-=dre);return Iy(),My(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:e<f?-1:e>f?1:Ny(isNaN(e),isNaN(f))} -function YDb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);Rhb(h,b,new Rkb)}for(e=new olb(a.a.b);e.a<e.c.c.length;){b=BD(mlb(e),57);b.i=Qje;for(g=b.c.Kc();g.Ob();){f=BD(g.Pb(),57);BD(Wd(irb(h.f,f)),15).Fc(b)}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b();b.c=BD(Wd(irb(h.f,b)),15)}QDb(a)} -function yVb(a){var b,c,d,e,f,g,h;h=new Lqb;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),81);Rhb(h,b,new Rkb)}for(e=new olb(a.a.b);e.a<e.c.c.length;){b=BD(mlb(e),81);b.o=Qje;for(g=b.f.Kc();g.Ob();){f=BD(g.Pb(),81);BD(Wd(irb(h.f,f)),15).Fc(b)}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.f.$b();b.f=BD(Wd(irb(h.f,b)),15)}rVb(a)} -function dNb(a,b,c,d){var e,f;cNb(a,b,c,d);qNb(b,a.j-b.j+c);rNb(b,a.k-b.k+d);for(f=new olb(b.f);f.a<f.c.c.length;){e=BD(mlb(f),324);switch(e.a.g){case 0:nNb(a,b.g+e.b.a,0,b.g+e.c.a,b.i-1);break;case 1:nNb(a,b.g+b.o,b.i+e.b.a,a.o-1,b.i+e.c.a);break;case 2:nNb(a,b.g+e.b.a,b.i+b.p,b.g+e.c.a,a.p-1);break;default:nNb(a,0,b.i+e.b.a,b.g-1,b.i+e.c.a);}}} -function aNb(b,c,d,e,f){var g,h,i;try{if(c>=b.o){throw vbb(new rcb)}i=c>>5;h=c&31;g=Nbb(1,Tbb(Nbb(h,1)));f?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)));g=Nbb(g,1);e?(b.n[d][i]=Mbb(b.n[d][i],g)):(b.n[d][i]=xbb(b.n[d][i],Lbb(g)))}catch(a){a=ubb(a);if(JD(a,320)){throw vbb(new qcb(Dle+b.o+'*'+b.p+Ele+c+She+d+Fle))}else throw vbb(a)}} -function BUc(a,b,c,d){var e,f,g;if(b){f=Edb(ED(vNb(b,(mTc(),fTc))))+d;g=c+Edb(ED(vNb(b,bTc)))/2;yNb(b,kTc,meb(Tbb(Cbb($wnd.Math.round(f)))));yNb(b,lTc,meb(Tbb(Cbb($wnd.Math.round(g)))));b.d.b==0||BUc(a,BD(pr((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86),c+Edb(ED(vNb(b,bTc)))+a.a,d+Edb(ED(vNb(b,cTc))));vNb(b,iTc)!=null&&BUc(a,BD(vNb(b,iTc),86),c,d)}} -function N9b(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Q_b(b.a);e=Edb(ED(vNb(i,(Nyc(),pyc))))*2;k=Edb(ED(vNb(i,wyc)));j=$wnd.Math.max(e,k);f=KC(UD,Vje,25,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=BD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new olb(b.e);m.a<m.c.c.length;){l=BD(mlb(m),10);d+=a.a[l.c.p]+j;f[c++]=d}return f} -function GHc(a,b,c,d){var e,f,g,h,i,j,k,l,m;m=new Hxb(new pIc(a));for(h=OC(GC(OQ,1),kne,10,0,[b,c]),i=0,j=h.length;i<j;++i){g=h[i];for(l=CHc(g,d).Kc();l.Ob();){k=BD(l.Pb(),11);for(f=new b1b(k.b);llb(f.a)||llb(f.b);){e=BD(llb(f.a)?mlb(f.a):mlb(f.b),17);if(!OZb(e)){Iwb(m.a,k,(Bcb(),zcb))==null;WHc(e)&&Axb(m,k==e.c?e.d:e.c)}}}}return Qb(m),new Tkb(m)} -function zhd(a,b){var c,d,e,f;f=BD(hkd(a,(Y9c(),A9c)),61).g-BD(hkd(b,A9c),61).g;if(f!=0){return f}c=BD(hkd(a,v9c),19);d=BD(hkd(b,v9c),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(BD(hkd(a,A9c),61).g){case 1:return Kdb(a.i,b.i);case 2:return Kdb(a.j,b.j);case 3:return Kdb(b.i,a.i);case 4:return Kdb(b.j,a.j);default:throw vbb(new Zdb(ine));}} -function _od(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(ete);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} -function opd(a){var b,c,d;if((a.Db&64)!=0)return fld(a);b=new Wfb(fte);c=a.k;if(!c){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!d||Qfb(Qfb((b.a+=' "',b),d),'"')}}else{Qfb(Qfb((b.a+=' "',b),c),'"')}Qfb(Lfb(Qfb(Lfb(Qfb(Lfb(Qfb(Lfb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} -function h4c(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=BD(Phb(a.a,b),149);if(!e){for(d=(h=(new $ib(a.b)).a.vc().Kc(),new djb(h));d.a.Ob();){c=(f=BD(d.a.Pb(),42),BD(f.dd(),149));g=c.c;i=b.length;if(dfb(g.substr(g.length-i,i),b)&&(b.length==g.length||bfb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&Shb(a.a,b,e)}return e} -function QLb(a,b){var c,d,e,f;c=new VLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();if(e<f){return -1}if(e==f){return 0}return 1} -function r5b(a){var b,c,d;if(!wNb(a,(Nyc(),xxc))){return}d=BD(vNb(a,xxc),21);if(d.dc()){return}c=(b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));d.Hc((Hbd(),Cbd))?rqb(c,Cbd):rqb(c,Dbd);d.Hc(Abd)||rqb(c,Abd);d.Hc(zbd)?rqb(c,Gbd):d.Hc(ybd)?rqb(c,Fbd):d.Hc(Bbd)&&rqb(c,Ebd);d.Hc(Gbd)?rqb(c,zbd):d.Hc(Fbd)?rqb(c,ybd):d.Hc(Ebd)&&rqb(c,Bbd);yNb(a,xxc,c)} -function kHc(a){var b,c,d,e,f,g,h;e=BD(vNb(a,(wtc(),Psc)),10);d=a.j;c=(tCb(0,d.c.length),BD(d.c[0],11));for(g=new olb(e.j);g.a<g.c.c.length;){f=BD(mlb(g),11);if(PD(f)===PD(vNb(c,$sc))){if(f.j==(Ucd(),Acd)&&a.p>e.p){G0b(f,Rcd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==Rcd&&e.p>a.p){G0b(f,Acd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} -function NOc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c<d){m=(n=new uOc(a.p),o=new uOc(a.p),ye(n.e,a.e),n.q=a.q,n.r=o,lOc(n),ye(o.j,a.j),o.r=n,lOc(o),new vgd(n,o));l=BD(m.a,112);k=BD(m.b,112);e=(tCb(f,b.c.length),BD(b.c[f],329));g=UOc(a,l,k,e);for(j=c+1;j<=d;j++){h=(tCb(j,b.c.length),BD(b.c[j],329));i=UOc(a,l,k,h);if(SOc(h,i,e,g)){e=h;g=i}}}return f} -function wQb(a,b,c,d,e){var f,g,h,i,j,k,l;if(!(JD(b,239)||JD(b,354)||JD(b,186))){throw vbb(new Wdb('Method only works for ElkNode-, ElkLabel and ElkPort-objects.'))}g=a.a/2;i=b.i+d-g;k=b.j+e-g;j=i+b.g+a.a;l=k+b.f+a.a;f=new s7c;Dsb(f,new f7c(i,k));Dsb(f,new f7c(i,l));Dsb(f,new f7c(j,l));Dsb(f,new f7c(j,k));h=new XOb(f);tNb(h,b);c&&Rhb(a.b,b,h);return h} -function uXb(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new f7c(b,c);for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);P6c(j.n,f);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);q7c(d.a,f);g=BD(vNb(d,(Nyc(),jxc)),74);!!g&&q7c(g,f);for(i=new olb(d.b);i.a<i.c.c.length;){h=BD(mlb(i),70);P6c(h.n,f)}}}}} -function g_b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new f7c(b,c);for(k=new olb(a.a);k.a<k.c.c.length;){j=BD(mlb(k),10);P6c(j.n,f);for(m=new olb(j.j);m.a<m.c.c.length;){l=BD(mlb(m),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);q7c(d.a,f);g=BD(vNb(d,(Nyc(),jxc)),74);!!g&&q7c(g,f);for(i=new olb(d.b);i.a<i.c.c.length;){h=BD(mlb(i),70);P6c(h.n,f)}}}}} -function N1b(a){if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==0){throw vbb(new z2c('Edges must have a source.'))}else if((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i==0){throw vbb(new z2c('Edges must have a target.'))}else{!a.b&&(a.b=new y5d(z2,a,4,7));if(!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1))){throw vbb(new z2c('Hyperedges are not supported.'))}}} -function OFc(a,b){var c,d,e,f,g,h,i,j,k,l;l=0;f=new jkb;Wjb(f,b);while(f.b!=f.c){i=BD(fkb(f),214);j=0;k=BD(vNb(b.j,(Nyc(),ywc)),339);g=Edb(ED(vNb(b.j,uwc)));h=Edb(ED(vNb(b.j,vwc)));if(k!=(tAc(),rAc)){j+=g*PFc(i.e,k);j+=h*QFc(i.e)}l+=pHc(i.d,i.e)+j;for(e=new olb(i.b);e.a<e.c.c.length;){d=BD(mlb(e),37);c=BD(Ikb(a.b,d.p),214);c.s||(l+=NFc(a,c))}}return l} -function dhb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;n=b.length;i=n;BCb(0,b.length);if(b.charCodeAt(0)==45){l=-1;m=1;--n}else{l=1;m=0}f=(phb(),ohb)[10];e=n/f|0;q=n%f;q!=0&&++e;h=KC(WD,oje,25,e,15,1);c=nhb[8];g=0;o=m+(q==0?f:q);for(p=m;p<i;p=o,o=p+f){d=Icb(b.substr(p,o-p),Rie,Ohe);j=(Dhb(),Hhb(h,h,g,c));j+=xhb(h,g,d);h[g++]=j}k=g;a.e=l;a.d=k;a.a=h;Jgb(a)} -function SGb(a,b,c,d,e,f,g){a.c=d.qf().a;a.d=d.qf().b;if(e){a.c+=e.qf().a;a.d+=e.qf().b}a.b=b.rf().a;a.a=b.rf().b;if(!e){c?(a.c-=g+b.rf().a):(a.c+=d.rf().a+g)}else{switch(e.Hf().g){case 0:case 2:a.c+=e.rf().a+g+f.a+g;break;case 4:a.c-=g+f.a+g+b.rf().a;break;case 1:a.c+=e.rf().a+g;a.d-=g+f.b+g+b.rf().b;break;case 3:a.c+=e.rf().a+g;a.d+=e.rf().b+g+f.b+g;}}} -function gac(a,b){var c,d;this.b=new Rkb;this.e=new Rkb;this.a=a;this.d=b;dac(this);eac(this);this.b.dc()?(this.c=a.c.p):(this.c=BD(this.b.Xb(0),10).c.p);this.e.c.length==0?(this.f=a.c.p):(this.f=BD(Ikb(this.e,this.e.c.length-1),10).c.p);for(d=BD(vNb(a,(wtc(),ktc)),15).Kc();d.Ob();){c=BD(d.Pb(),70);if(wNb(c,(Nyc(),Owc))){this.d=BD(vNb(c,Owc),227);break}}} -function Anc(a,b,c){var d,e,f,g,h,i,j,k;d=BD(Ohb(a.a,b),53);f=BD(Ohb(a.a,c),53);e=BD(Ohb(a.e,b),53);g=BD(Ohb(a.e,c),53);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=BD(k.Pb(),10);d.a.zc(j,d);Qqb(BD(Ohb(a.e,j),53),b);ye(BD(Ohb(a.e,j),53),e)}for(i=e.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);g.a.zc(h,g);Qqb(BD(Ohb(a.a,h),53),c);ye(BD(Ohb(a.a,h),53),f)}} -function WGc(a,b,c){var d,e,f,g,h,i,j,k;d=BD(Ohb(a.a,b),53);f=BD(Ohb(a.a,c),53);e=BD(Ohb(a.b,b),53);g=BD(Ohb(a.b,c),53);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=BD(k.Pb(),10);d.a.zc(j,d);Qqb(BD(Ohb(a.b,j),53),b);ye(BD(Ohb(a.b,j),53),e)}for(i=e.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);g.a.zc(h,g);Qqb(BD(Ohb(a.a,h),53),c);ye(BD(Ohb(a.a,h),53),f)}} -function doc(a,b){var c,d,e;Odd(b,'Breaking Point Insertion',1);d=new Xoc(a);switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:e=new hpc;case 0:e=new Ync;break;default:e=new kpc;}c=e.Vf(a,d);Ccb(DD(vNb(a,Iyc)))&&(c=coc(a,c));if(!e.Wf()&&wNb(a,Myc)){switch(BD(vNb(a,Myc),338).g){case 2:c=tpc(d,c);break;case 1:c=rpc(d,c);}}if(c.dc()){Qdd(b);return}aoc(a,c);Qdd(b)} -function $qd(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=null;m=b;l=Rqd(a,dtd(c),m);Lkd(l,_pd(m,Vte));g=Ypd(m,Lte);d=new mrd(a,l);oqd(d.a,d.b,g);h=Ypd(m,Mte);e=new nrd(a,l);pqd(e.a,e.b,h);if((!l.b&&(l.b=new y5d(z2,l,4,7)),l.b).i==0||(!l.c&&(l.c=new y5d(z2,l,5,8)),l.c).i==0){f=_pd(m,Vte);i=Zte+f;j=i+$te;throw vbb(new cqd(j))}grd(m,l);_qd(a,m,l);k=crd(a,m,l);return k} -function yGb(a,b){var c,d,e,f,g,h,i;e=KC(WD,oje,25,a.e.a.c.length,15,1);for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);e[f.d]+=f.b.a.c.length}h=Ru(b);while(h.b!=0){f=BD(h.b==0?null:(sCb(h.b!=0),Nsb(h,h.a.a)),121);for(d=vr(new olb(f.g.a));d.Ob();){c=BD(d.Pb(),213);i=c.e;i.e=$wnd.Math.max(i.e,f.e+c.a);--e[i.d];e[i.d]==0&&(Gsb(h,i,h.c.b,h.c),true)}}} -function CGb(a){var b,c,d,e,f,g,h,i,j,k,l;c=Rie;e=Ohe;for(h=new olb(a.e.a);h.a<h.c.c.length;){f=BD(mlb(h),121);e=$wnd.Math.min(e,f.e);c=$wnd.Math.max(c,f.e)}b=KC(WD,oje,25,c-e+1,15,1);for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);f.e-=e;++b[f.e]}d=0;if(a.k!=null){for(j=a.k,k=0,l=j.length;k<l;++k){i=j[k];b[d++]+=i;if(b.length==d){break}}}return b} -function ixd(a){switch(a.d){case 9:case 8:{return true}case 3:case 5:case 4:case 6:{return false}case 7:{return BD(hxd(a),19).a==a.o}case 1:case 2:{if(a.o==-2){return false}else{switch(a.p){case 0:case 1:case 2:case 6:case 5:case 7:{return Bbb(a.k,a.f)}case 3:case 4:{return a.j==a.e}default:{return a.n==null?a.g==null:pb(a.n,a.g)}}}}default:{return false}}} -function $ad(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Qse),'ELK Fixed'),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new bbd)));p4c(a,Qse,ame,Xad);p4c(a,Qse,uqe,Ksd(Yad));p4c(a,Qse,use,Ksd(Sad));p4c(a,Qse,Fme,Ksd(Tad));p4c(a,Qse,Tme,Ksd(Vad));p4c(a,Qse,bqe,Ksd(Uad))} -function ro(a,b,c){var d,e,f,g,h;d=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));h=Tbb(Ibb(Eie,keb(Tbb(Ibb(c==null?0:tb(c),Fie)),15)));f=uo(a,b,d);if(!!f&&h==f.f&&Hb(c,f.i)){return c}g=vo(a,c,h);if(g){throw vbb(new Wdb('value already present: '+c))}e=new $o(b,d,c,h);if(f){mo(a,f);po(a,e,f);f.e=null;f.c=null;return f.i}else{po(a,e,null);to(a);return null}} -function E4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=BD(Ohb(c.c,b),459);n=f.f;o=f.a;f.b?(i=new f7c(g,n)):(i=new f7c(k,n));f.c?(l=new f7c(k,o)):(l=new f7c(g,o));e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new f7c(e,n);m=new f7c(e,o);n7c(b.a,OC(GC(m1,1),nie,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new f7c(e,c.b);Dsb(b.a,d)}n7c(b.a,OC(GC(m1,1),nie,8,0,[m,l]))} -function Nid(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=XKd(b.Tg(),-1-c);if(JD(d,99)){return BD(d,18)}else{g=BD(b.ah(d),153);for(h=0,i=g.gc();h<i;++h){if(PD(g.jl(h))===PD(a)){e=g.il(h);if(JD(e,99)){f=BD(e,18);if((f.Bb&ote)!=0){return f}}}}throw vbb(new Zdb('The containment feature could not be located'))}}else{return zUd(BD(XKd(a.Tg(),c),18))}}} -function Xee(a){var b,c,d,e,f;d=a.length;b=new Ifb;f=0;while(f<d){c=bfb(a,f++);if(c==9||c==10||c==12||c==13||c==32)continue;if(c==35){while(f<d){c=bfb(a,f++);if(c==13||c==10)break}continue}if(c==92&&f<d){if((e=(BCb(f,a.length),a.charCodeAt(f)))==35||e==9||e==10||e==12||e==13||e==32){Afb(b,e&aje);++f}else{b.a+='\\';Afb(b,e&aje);++f}}else Afb(b,c&aje)}return b.a} -function GVc(a,b){var c,d,e;for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),33);Rc(a.a,c,c);Rc(a.b,c,c);e=gVc(c);if(e.c.length!=0){!!a.d&&a.d.lg(e);Rc(a.a,c,(tCb(0,e.c.length),BD(e.c[0],33)));Rc(a.b,c,BD(Ikb(e,e.c.length-1),33));while(dVc(e).c.length!=0){e=dVc(e);!!a.d&&a.d.lg(e);Rc(a.a,c,(tCb(0,e.c.length),BD(e.c[0],33)));Rc(a.b,c,BD(Ikb(e,e.c.length-1),33))}}}} -function fnc(a){var b,c,d,e,f,g,h,i,j,k;c=0;for(h=new olb(a.d);h.a<h.c.c.length;){g=BD(mlb(h),101);!!g.i&&(g.i.c=c++)}b=IC(sbb,[nie,dle],[177,25],16,[c,c],2);k=a.d;for(e=0;e<k.c.length;e++){i=(tCb(e,k.c.length),BD(k.c[e],101));if(i.i){for(f=e+1;f<k.c.length;f++){j=(tCb(f,k.c.length),BD(k.c[f],101));if(j.i){d=knc(i,j);b[i.i.c][j.i.c]=d;b[j.i.c][i.i.c]=d}}}}return b} -function ht(a,b,c,d){var e,f,g;g=new qu(b,c);if(!a.a){a.a=a.e=g;Rhb(a.b,b,new pu(g));++a.c}else if(!d){a.e.b=g;g.d=a.e;a.e=g;e=BD(Ohb(a.b,b),283);if(!e){Rhb(a.b,b,e=new pu(g));++a.c}else{++e.a;f=e.c;f.c=g;g.e=f;e.c=g}}else{e=BD(Ohb(a.b,b),283);++e.a;g.d=d.d;g.e=d.e;g.b=d;g.c=d;!d.e?(BD(Ohb(a.b,b),283).b=g):(d.e.c=g);!d.d?(a.a=g):(d.d.b=g);d.d=g;d.e=g}++a.d;return g} -function mfb(a,b){var c,d,e,f,g,h,i,j;c=new RegExp(b,'g');i=KC(ZI,nie,2,0,6,1);d=0;j=a;f=null;while(true){h=c.exec(j);if(h==null||j==''){i[d]=j;break}else{g=h.index;i[d]=j.substr(0,g);j=qfb(j,g+h[0].length,j.length);c.lastIndex=0;if(f==j){i[d]=j.substr(0,1);j=j.substr(1)}f=j;++d}}if(a.length>0){e=i.length;while(e>0&&i[e-1]==''){--e}e<i.length&&(i.length=e)}return i} -function f1d(a,b){var c,d,e,f,g,h,i,j,k,l;l=_Kd(b);j=null;e=false;for(h=0,k=VKd(l.a).i;h<k;++h){g=BD(nOd(l,h,(f=BD(qud(VKd(l.a),h),87),i=f.c,JD(i,88)?BD(i,26):(jGd(),_Fd))),26);c=f1d(a,g);if(!c.dc()){if(!j){j=c}else{if(!e){e=true;j=new pFd(j)}j.Gc(c)}}}d=k1d(a,b);if(d.dc()){return !j?(mmb(),mmb(),jmb):j}else{if(!j){return d}else{e||(j=new pFd(j));j.Gc(d);return j}}} -function g1d(a,b){var c,d,e,f,g,h,i,j,k,l;l=_Kd(b);j=null;d=false;for(h=0,k=VKd(l.a).i;h<k;++h){f=BD(nOd(l,h,(e=BD(qud(VKd(l.a),h),87),i=e.c,JD(i,88)?BD(i,26):(jGd(),_Fd))),26);c=g1d(a,f);if(!c.dc()){if(!j){j=c}else{if(!d){d=true;j=new pFd(j)}j.Gc(c)}}}g=n1d(a,b);if(g.dc()){return !j?(mmb(),mmb(),jmb):j}else{if(!j){return g}else{d||(j=new pFd(j));j.Gc(g);return j}}} -function B2d(a,b,c){var d,e,f,g,h,i;if(JD(b,72)){return Txd(a,b,c)}else{h=null;f=null;d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];if(pb(b,e.dd())){f=e.ak();if(JD(f,99)&&(BD(f,18).Bb&ote)!=0){h=e;break}}}if(h){if(oid(a.e)){i=f.$j()?H2d(a,4,f,b,null,M2d(a,f,b,JD(f,99)&&(BD(f,18).Bb&Tje)!=0),true):H2d(a,f.Kj()?2:1,f,b,f.zj(),-1,true);c?c.Ei(i):(c=i)}c=B2d(a,h,c)}return c}} -function pKb(a){var b,c,d,e;d=a.o;$Jb();if(a.A.dc()||pb(a.A,ZJb)){e=d.a}else{e=gIb(a.f);if(a.A.Hc((tdd(),qdd))&&!a.B.Hc((Idd(),Edd))){e=$wnd.Math.max(e,gIb(BD(Mpb(a.p,(Ucd(),Acd)),244)));e=$wnd.Math.max(e,gIb(BD(Mpb(a.p,Rcd),244)))}b=aKb(a);!!b&&(e=$wnd.Math.max(e,b.a))}Ccb(DD(a.e.yf().We((Y9c(),$8c))))?(d.a=$wnd.Math.max(d.a,e)):(d.a=e);c=a.f.i;c.c=0;c.b=e;hIb(a.f)} -function $0d(a,b){var c,d,e,f,g,h,i,j,k;c=b.Hh(a.a);if(c){i=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),'memberTypes'));if(i!=null){j=new Rkb;for(f=mfb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];d=e.lastIndexOf('#');k=d==-1?w1d(a,b.Aj(),e):d==0?v1d(a,null,e.substr(1)):v1d(a,e.substr(0,d),e.substr(d+1));JD(k,148)&&Ekb(j,BD(k,148))}return j}}return mmb(),mmb(),jmb} -function tRb(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,kme,1);a.bf(b);f=0;while(a.df(f)){for(k=new olb(b.e);k.a<k.c.c.length;){i=BD(mlb(k),144);for(h=ul(pl(OC(GC(KI,1),Uhe,20,0,[b.e,b.d,b.b])));Qr(h);){g=BD(Rr(h),357);if(g!=i){e=a.af(g,i);!!e&&P6c(i.a,e)}}}for(j=new olb(b.e);j.a<j.c.c.length;){i=BD(mlb(j),144);d=i.a;Q6c(d,-a.d,-a.d,a.d,a.d);P6c(i.d,d);X6c(d)}a.cf();++f}Qdd(c)} -function $2d(a,b,c){var d,e,f,g;g=S6d(a.e.Tg(),b);d=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(pb(e,c)){Xxd(a,f);return true}}}}else if(c!=null){for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(pb(c,e.dd())){Xxd(a,f);return true}}}}else{for(f=0;f<a.i;++f){e=d[f];if(g.rl(e.ak())){if(e.dd()==null){Xxd(a,f);return true}}}}return false} -function sDc(a,b){var c,d,e,f,g;a.c==null||a.c.length<b.c.length?(a.c=KC(sbb,dle,25,b.c.length,16,1)):Blb(a.c);a.a=new Rkb;d=0;for(g=new olb(b);g.a<g.c.c.length;){e=BD(mlb(g),10);e.p=d++}c=new Psb;for(f=new olb(b);f.a<f.c.c.length;){e=BD(mlb(f),10);if(!a.c[e.p]){tDc(a,e);c.b==0||(sCb(c.b!=0),BD(c.a.a.c,15)).gc()<a.a.c.length?Esb(c,a.a):Fsb(c,a.a);a.a=new Rkb}}return c} -function jYc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;g=BD(qud(b,0),33);dld(g,0);eld(g,0);m=new Rkb;m.c[m.c.length]=g;h=g;f=new d$c(a.a,g.g,g.f,(k$c(),j$c));for(n=1;n<b.i;n++){o=BD(qud(b,n),33);i=kYc(a,g$c,o,h,f,m,c);j=kYc(a,f$c,o,h,f,m,c);k=kYc(a,i$c,o,h,f,m,c);l=kYc(a,h$c,o,h,f,m,c);e=mYc(a,i,j,k,l,o,h,d);dld(o,e.d);eld(o,e.e);c$c(e,j$c);f=e;h=o;m.c[m.c.length]=o}return f} -function K0c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,ase),'ELK SPOrE Overlap Removal'),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new N0c)));p4c(a,ase,Qre,Ksd(I0c));p4c(a,ase,ame,G0c);p4c(a,ase,wme,8);p4c(a,ase,Vre,Ksd(H0c));p4c(a,ase,Yre,Ksd(E0c));p4c(a,ase,Zre,Ksd(F0c));p4c(a,ase,Zpe,(Bcb(),false))} -function sXb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;g=O6c(b.c,c,d);for(l=new olb(b.a);l.a<l.c.c.length;){k=BD(mlb(l),10);P6c(k.n,g);for(n=new olb(k.j);n.a<n.c.c.length;){m=BD(mlb(n),11);for(f=new olb(m.g);f.a<f.c.c.length;){e=BD(mlb(f),17);q7c(e.a,g);h=BD(vNb(e,(Nyc(),jxc)),74);!!h&&q7c(h,g);for(j=new olb(e.b);j.a<j.c.c.length;){i=BD(mlb(j),70);P6c(i.n,g)}}}Ekb(a.a,k);k.a=a}} -function g9b(a,b){var c,d,e,f,g;Odd(b,'Node and Port Label Placement and Node Sizing',1);MGb((a$b(),new l$b(a,true,true,new j9b)));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){f=BD(vNb(a,(Nyc(),Yxc)),21);e=f.Hc((rcd(),ocd));g=Ccb(DD(vNb(a,Zxc)));for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);MAb(JAb(new YAb(null,new Kub(c.a,16)),new l9b),new n9b(f,e,g))}}Qdd(b)} -function Y0d(a,b){var c,d,e,f,g,h;c=b.Hh(a.a);if(c){h=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),eue));if(h!=null){e=kfb(h,wfb(35));d=b.Hj();if(e==-1){g=u1d(a,bKd(d));f=h}else if(e==0){g=null;f=h.substr(1)}else{g=h.substr(0,e);f=h.substr(e+1)}switch($1d(q1d(a,b))){case 2:case 3:{return j1d(a,d,g,f)}case 0:case 4:case 5:case 6:{return m1d(a,d,g,f)}}}}return null} -function q2d(a,b,c){var d,e,f,g,h;g=(Q6d(),BD(b,66).Oj());if(T6d(a.e,b)){if(b.hi()&&F2d(a,b,c,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){return false}}else{h=S6d(a.e.Tg(),b);d=BD(a.g,119);for(f=0;f<a.i;++f){e=d[f];if(h.rl(e.ak())){if(g?pb(e,c):c==null?e.dd()==null:pb(c,e.dd())){return false}else{BD(Gtd(a,f,g?BD(c,72):R6d(b,c)),72);return true}}}}return wtd(a,g?BD(c,72):R6d(b,c))} -function uVb(a){var b,c,d,e,f,g,h,i;if(a.d){throw vbb(new Zdb((fdb(LP),Jke+LP.k+Kke)))}a.c==(ead(),cad)&&tVb(a,aad);for(c=new olb(a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),189);b.e=0}for(g=new olb(a.a.b);g.a<g.c.c.length;){f=BD(mlb(g),81);f.o=Qje;for(e=f.f.Kc();e.Ob();){d=BD(e.Pb(),81);++d.d.e}}JVb(a);for(i=new olb(a.a.b);i.a<i.c.c.length;){h=BD(mlb(i),81);h.k=true}return a} -function Ijc(a,b){var c,d,e,f,g,h,i,j;h=new pjc(a);c=new Psb;Gsb(c,b,c.c.b,c.c);while(c.b!=0){d=BD(c.b==0?null:(sCb(c.b!=0),Nsb(c,c.a.a)),113);d.d.p=1;for(g=new olb(d.e);g.a<g.c.c.length;){e=BD(mlb(g),409);kjc(h,e);j=e.d;j.d.p==0&&(Gsb(c,j,c.c.b,c.c),true)}for(f=new olb(d.b);f.a<f.c.c.length;){e=BD(mlb(f),409);kjc(h,e);i=e.c;i.d.p==0&&(Gsb(c,i,c.c.b,c.c),true)}}return h} -function hfd(a){var b,c,d,e,f;d=Edb(ED(hkd(a,(Y9c(),G9c))));if(d==1){return}_kd(a,d*a.g,d*a.f);c=Mq(Rq((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c),new Hfd));for(f=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.n&&(a.n=new cUd(D2,a,1,7)),a.n),(!a.c&&(a.c=new cUd(F2,a,9,9)),a.c),c])));Qr(f);){e=BD(Rr(f),470);e.Gg(d*e.Dg(),d*e.Eg());e.Fg(d*e.Cg(),d*e.Bg());b=BD(e.We(r9c),8);if(b){b.a*=d;b.b*=d}}} -function Mac(a,b,c,d,e){var f,g,h,i,j,k,l,m;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);m=l_b(f.a);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];switch(BD(vNb(i,(Nyc(),mxc)),163).g){case 1:Qac(i);$_b(i,b);Nac(i,true,d);break;case 3:Rac(i);$_b(i,c);Nac(i,false,e);}}}h=new Bib(a.b,0);while(h.b<h.d.gc()){(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29)).a.c.length==0&&uib(h)}} -function d1d(a,b){var c,d,e,f,g,h,i;c=b.Hh(a.a);if(c){i=GD(AAd((!c.b&&(c.b=new sId((jGd(),fGd),x6,c)),c.b),Dwe));if(i!=null){d=new Rkb;for(f=mfb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];dfb(e,'##other')?Ekb(d,'!##'+u1d(a,bKd(b.Hj()))):dfb(e,'##local')?(d.c[d.c.length]=null,true):dfb(e,Bwe)?Ekb(d,u1d(a,bKd(b.Hj()))):(d.c[d.c.length]=e,true)}return d}}return mmb(),mmb(),jmb} -function kMb(a,b){var c,d,e,f;c=new pMb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();e=e==1?1:0;f=f==1?1:0;if(e<f){return -1}if(e==f){return 0}return 1} -function hZb(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.i;e=Ccb(DD(vNb(h,(Nyc(),fxc))));k=0;d=0;for(j=new olb(a.g);j.a<j.c.c.length;){i=BD(mlb(j),17);g=OZb(i);f=g&&e&&Ccb(DD(vNb(i,gxc)));m=i.d.i;g&&f?++d:g&&!f?++k:Q_b(m).e==h?++d:++k}for(c=new olb(a.e);c.a<c.c.c.length;){b=BD(mlb(c),17);g=OZb(b);f=g&&e&&Ccb(DD(vNb(b,gxc)));l=b.c.i;g&&f?++k:g&&!f?++d:Q_b(l).e==h?++k:++d}return k-d} -function ULc(a,b,c,d){this.e=a;this.k=BD(vNb(a,(wtc(),otc)),304);this.g=KC(OQ,kne,10,b,0,1);this.b=KC(BI,nie,333,b,7,1);this.a=KC(OQ,kne,10,b,0,1);this.d=KC(BI,nie,333,b,7,1);this.j=KC(OQ,kne,10,b,0,1);this.i=KC(BI,nie,333,b,7,1);this.p=KC(BI,nie,333,b,7,1);this.n=KC(wI,nie,476,b,8,1);Alb(this.n,(Bcb(),false));this.f=KC(wI,nie,476,b,8,1);Alb(this.f,true);this.o=c;this.c=d} -function X9b(a,b){var c,d,e,f,g,h;if(b.dc()){return}if(BD(b.Xb(0),286).d==(Apc(),xpc)){O9b(a,b)}else{for(d=b.Kc();d.Ob();){c=BD(d.Pb(),286);switch(c.d.g){case 5:K9b(a,c,Q9b(a,c));break;case 0:K9b(a,c,(g=c.f-c.c+1,h=(g-1)/2|0,c.c+h));break;case 4:K9b(a,c,S9b(a,c));break;case 2:Y9b(c);K9b(a,c,(f=U9b(c),f?c.c:c.f));break;case 1:Y9b(c);K9b(a,c,(e=U9b(c),e?c.f:c.c));}P9b(c.a)}}} -function C4b(a,b){var c,d,e,f,g,h,i;if(b.e){return}b.e=true;for(d=b.d.a.ec().Kc();d.Ob();){c=BD(d.Pb(),17);if(b.o&&b.d.a.gc()<=1){g=b.a.c;h=b.a.c+b.a.b;i=new f7c(g+(h-g)/2,b.b);Dsb(BD(b.d.a.ec().Kc().Pb(),17).a,i);continue}e=BD(Ohb(b.c,c),459);if(e.b||e.c){E4b(a,c,b);continue}f=a.d==(tBc(),sBc)&&(e.d||e.e)&&K4b(a,b)&&b.d.a.gc()<=1;f?F4b(c,b):D4b(a,c,b)}b.k&&reb(b.d,new X4b)} -function zXc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=f;h=(d+e)/2+m;q=c*$wnd.Math.cos(h);r=c*$wnd.Math.sin(h);s=q-b.g/2;t=r-b.f/2;dld(b,s);eld(b,t);l=a.a.jg(b);p=2*$wnd.Math.acos(c/c+a.c);if(p<e-d){n=p/l;g=(d+e-p)/2}else{n=(e-d)/l;g=d}o=gVc(b);if(a.e){a.e.kg(a.d);a.e.lg(o)}for(j=new olb(o);j.a<j.c.c.length;){i=BD(mlb(j),33);k=a.a.jg(i);zXc(a,i,c+a.c,g,g+n*k,f);g+=n*k}} -function jA(a,b,c){var d;d=c.q.getMonth();switch(b){case 5:Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[d]);break;case 4:Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[d]);break;case 3:Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[d]);break;default:EA(a,d+1,b);}} -function uGb(a,b){var c,d,e,f,g;Odd(b,'Network simplex',1);if(a.e.a.c.length<1){Qdd(b);return}for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);e.e=0}g=a.e.a.c.length>=40;g&&FGb(a);wGb(a);vGb(a);c=zGb(a);d=0;while(!!c&&d<a.f){tGb(a,c,sGb(a,c));c=zGb(a);++d}g&&EGb(a);a.a?qGb(a,CGb(a)):CGb(a);a.b=null;a.d=null;a.p=null;a.c=null;a.g=null;a.i=null;a.n=null;a.o=null;Qdd(b)} -function JQb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new f7c(c,d);c7c(i,BD(vNb(b,(HSb(),ESb)),8));for(m=new olb(b.e);m.a<m.c.c.length;){l=BD(mlb(m),144);P6c(l.d,i);Ekb(a.e,l)}for(h=new olb(b.c);h.a<h.c.c.length;){g=BD(mlb(h),282);for(f=new olb(g.a);f.a<f.c.c.length;){e=BD(mlb(f),559);P6c(e.d,i)}Ekb(a.c,g)}for(k=new olb(b.d);k.a<k.c.c.length;){j=BD(mlb(k),447);P6c(j.d,i);Ekb(a.d,j)}} -function _Bc(a,b){var c,d,e,f,g,h,i,j;for(i=new olb(b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);for(e=new b1b(h.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);c=d.c==h?d.d:d.c;f=c.i;if(b==f){continue}j=BD(vNb(d,(Nyc(),cyc)),19).a;j<0&&(j=0);g=f.p;if(a.b[g]==0){if(d.d==c){a.a[g]-=j+1;a.a[g]<=0&&a.c[g]>0&&Dsb(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Dsb(a.e,f)}}}}} -function _Kb(a){var b,c,d,e,f,g,h,i,j;h=new Hxb(BD(Qb(new nLb),62));j=Qje;for(c=new olb(a.d);c.a<c.c.c.length;){b=BD(mlb(c),222);j=b.c.c;while(h.a.c!=0){i=BD(zjb(Bwb(h.a)),222);if(i.c.c+i.c.b<j){Jwb(h.a,i)!=null}else{break}}for(g=(e=new Ywb((new cxb((new Gjb(h.a)).a)).b),new Njb(e));sib(g.a.a);){f=(d=Wwb(g.a),BD(d.cd(),222));Dsb(f.b,b);Dsb(b.b,f)}Iwb(h.a,b,(Bcb(),zcb))==null}} -function QEc(a,b,c){var d,e,f,g,h,i,j,k,l;f=new Skb(b.c.length);for(j=new olb(b);j.a<j.c.c.length;){g=BD(mlb(j),10);Ekb(f,a.b[g.c.p][g.p])}LEc(a,f,c);l=null;while(l=MEc(f)){NEc(a,BD(l.a,233),BD(l.b,233),f)}b.c=KC(SI,Uhe,1,0,5,1);for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),233);for(h=d.d,i=0,k=h.length;i<k;++i){g=h[i];b.c[b.c.length]=g;a.a[g.c.p][g.p].a=REc(d.g,d.d[0]).a}}} -function JRc(a,b){var c,d,e,f;if(0<(JD(a,14)?BD(a,14).gc():sr(a.Kc()))){e=b;if(1<e){--e;f=new KRc;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),86);f=pl(OC(GC(KI,1),Uhe,20,0,[f,new ZRc(c)]))}return JRc(f,e)}if(e<0){f=new NRc;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),86);f=pl(OC(GC(KI,1),Uhe,20,0,[f,new ZRc(c)]))}if(0<(JD(f,14)?BD(f,14).gc():sr(f.Kc()))){return JRc(f,e)}}}return BD(pr(a.Kc()),86)} -function Idd(){Idd=ccb;Bdd=new Jdd('DEFAULT_MINIMUM_SIZE',0);Ddd=new Jdd('MINIMUM_SIZE_ACCOUNTS_FOR_PADDING',1);Add=new Jdd('COMPUTE_PADDING',2);Edd=new Jdd('OUTSIDE_NODE_LABELS_OVERHANG',3);Fdd=new Jdd('PORTS_OVERHANG',4);Hdd=new Jdd('UNIFORM_PORT_SPACING',5);Gdd=new Jdd('SPACE_EFFICIENT_PORT_LABELS',6);Cdd=new Jdd('FORCE_TABULAR_NODE_LABELS',7);zdd=new Jdd('ASYMMETRICAL',8)} -function s6d(a,b){var c,d,e,f,g,h,i,j;if(!b){return null}else{c=(f=b.Tg(),!f?null:bKd(f).Nh().Jh(f));if(c){Xrb(a,b,c);e=b.Tg();for(i=0,j=(e.i==null&&TKd(e),e.i).length;i<j;++i){h=(d=(e.i==null&&TKd(e),e.i),i>=0&&i<d.length?d[i]:null);if(h.Ij()&&!h.Jj()){if(JD(h,322)){u6d(a,BD(h,34),b,c)}else{g=BD(h,18);(g.Bb&ote)!=0&&w6d(a,g,b,c)}}}b.kh()&&BD(c,49).vh(BD(b,49).qh())}return c}} -function tGb(a,b,c){var d,e,f;if(!b.f){throw vbb(new Wdb('Given leave edge is no tree edge.'))}if(c.f){throw vbb(new Wdb('Given enter edge is a tree edge already.'))}b.f=false;Sqb(a.p,b);c.f=true;Qqb(a.p,c);d=c.e.e-c.d.e-c.a;xGb(a,c.e,b)||(d=-d);for(f=new olb(a.e.a);f.a<f.c.c.length;){e=BD(mlb(f),121);xGb(a,e,b)||(e.e+=d)}a.j=1;Blb(a.c);DGb(a,BD(mlb(new olb(a.e.a)),121));rGb(a)} -function x6b(a,b){var c,d,e,f,g,h;h=BD(vNb(b,(Nyc(),Vxc)),98);if(!(h==(dcd(),_bd)||h==$bd)){return}e=(new f7c(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a)).b;for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k!=(j0b(),e0b)){continue}c=BD(vNb(f,(wtc(),Hsc)),61);if(c!=(Ucd(),zcd)&&c!=Tcd){continue}d=Edb(ED(vNb(f,htc)));h==_bd&&(d*=e);f.n.b=d-BD(vNb(f,Txc),8).b;M_b(f,false,true)}} -function YDc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;bEc(a,b,c);f=b[c];n=d?(Ucd(),Tcd):(Ucd(),zcd);if(ZDc(b.length,c,d)){e=b[d?c-1:c+1];UDc(a,e,d?(KAc(),IAc):(KAc(),HAc));for(i=f,k=0,m=i.length;k<m;++k){g=i[k];XDc(a,g,n)}UDc(a,f,d?(KAc(),HAc):(KAc(),IAc));for(h=e,j=0,l=h.length;j<l;++j){g=h[j];!!g.e||XDc(a,g,Wcd(n))}}else{for(h=f,j=0,l=h.length;j<l;++j){g=h[j];XDc(a,g,n)}}return false} -function nFc(a,b,c,d){var e,f,g,h,i,j,k;i=V_b(b,c);(c==(Ucd(),Rcd)||c==Tcd)&&(i=JD(i,152)?km(BD(i,152)):JD(i,131)?BD(i,131).a:JD(i,54)?new ov(i):new dv(i));g=false;do{e=false;for(f=0;f<i.gc()-1;f++){j=BD(i.Xb(f),11);h=BD(i.Xb(f+1),11);if(oFc(a,j,h,d)){g=true;cIc(a.a,BD(i.Xb(f),11),BD(i.Xb(f+1),11));k=BD(i.Xb(f+1),11);i._c(f+1,BD(i.Xb(f),11));i._c(f,k);e=true}}}while(e);return g} -function W2d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(oid(a.e)){if(b!=c){e=BD(a.g,119);n=e[c];g=n.ak();if(T6d(a.e,g)){o=S6d(a.e.Tg(),g);i=-1;h=-1;d=0;for(j=0,l=b>c?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.rl(f.ak());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=BD(Wxd(a,b,c),72);h!=i&&GLd(a,new ESd(a.e,7,g,meb(h),n.dd(),i));return m}}}else{return BD(sud(a,b,c),72)}return BD(Wxd(a,b,c),72)} -function Qcc(a,b){var c,d,e,f,g,h,i;Odd(b,'Port order processing',1);i=BD(vNb(a,(Nyc(),_xc)),421);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);g=BD(vNb(e,Vxc),98);h=e.j;if(g==(dcd(),Zbd)||g==_bd||g==$bd){mmb();Okb(h,Icc)}else if(g!=bcd&&g!=ccd){mmb();Okb(h,Lcc);Scc(h);i==(BAc(),AAc)&&Okb(h,Kcc)}e.i=true;N_b(e)}}Qdd(b)} -function vDc(a){var b,c,d,e,f,g,h,i;i=new Lqb;b=new KFb;for(g=a.Kc();g.Ob();){e=BD(g.Pb(),10);h=nGb(oGb(new pGb,e),b);jrb(i.f,e,h)}for(f=a.Kc();f.Ob();){e=BD(f.Pb(),10);for(d=new Sr(ur(U_b(e).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)){continue}AFb(DFb(CFb(BFb(EFb(new FFb,$wnd.Math.max(1,BD(vNb(c,(Nyc(),dyc)),19).a)),1),BD(Ohb(i,c.c.i),121)),BD(Ohb(i,c.d.i),121)))}}return b} -function tNc(){tNc=ccb;oNc=e3c(new j3c,(qUb(),oUb),(S8b(),k8b));qNc=e3c(new j3c,nUb,o8b);rNc=c3c(e3c(new j3c,nUb,C8b),pUb,B8b);nNc=c3c(e3c(e3c(new j3c,nUb,e8b),oUb,f8b),pUb,g8b);sNc=b3c(b3c(g3c(c3c(e3c(new j3c,lUb,M8b),pUb,L8b),oUb),K8b),N8b);pNc=c3c(new j3c,pUb,l8b);lNc=c3c(e3c(e3c(e3c(new j3c,mUb,r8b),oUb,t8b),oUb,u8b),pUb,s8b);mNc=c3c(e3c(e3c(new j3c,oUb,u8b),oUb,_7b),pUb,$7b)} -function XC(a,b,c,d,e,f){var g,h,i,j,k,l,m;j=$C(b)-$C(a);g=kD(b,j);i=TC(0,0,0);while(j>=0){h=bD(a,g);if(h){j<22?(i.l|=1<<j,undefined):j<44?(i.m|=1<<j-22,undefined):(i.h|=1<<j-44,undefined);if(a.l==0&&a.m==0&&a.h==0){break}}k=g.m;l=g.h;m=g.l;g.h=l>>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&ZC(i);if(f){if(d){QC=hD(a);e&&(QC=nD(QC,(wD(),uD)))}else{QC=TC(a.l,a.m,a.h)}}return i} -function TDc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),11);l=0;f=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(g),new R0b(g)])));Qr(e);){d=BD(Rr(e),11);if(d.i.c==b.c){l+=aEc(a,d.i)+1;++f}}c=l/f;k=g.j;k==(Ucd(),zcd)?c<j?(a.f[g.p]=a.c-c):(a.f[g.p]=a.b+(i-c)):k==Tcd&&(c<j?(a.f[g.p]=a.b+c):(a.f[g.p]=a.c-(i-c)))}} -function Icb(a,b,c){var d,e,f,g,h;if(a==null){throw vbb(new Oeb(Xhe))}f=a.length;g=f>0&&(BCb(0,a.length),a.charCodeAt(0)==45||(BCb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;d<f;d++){if(Zcb((BCb(d,a.length),a.charCodeAt(d)))==-1){throw vbb(new Oeb(Oje+a+'"'))}}h=parseInt(a,10);e=h<b;if(isNaN(h)){throw vbb(new Oeb(Oje+a+'"'))}else if(e||h>c){throw vbb(new Oeb(Oje+a+'"'))}return h} -function dnc(a){var b,c,d,e,f,g,h;g=new Psb;for(f=new olb(a.a);f.a<f.c.c.length;){e=BD(mlb(f),112);pOc(e,e.f.c.length);qOc(e,e.k.c.length);if(e.i==0){e.o=0;Gsb(g,e,g.c.b,g.c)}}while(g.b!=0){e=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),112);d=e.o+1;for(c=new olb(e.f);c.a<c.c.c.length;){b=BD(mlb(c),129);h=b.a;rOc(h,$wnd.Math.max(h.o,d));qOc(h,h.i-1);h.i==0&&(Gsb(g,h,g.c.b,g.c),true)}}} -function v2c(a){var b,c,d,e,f,g,h,i;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),79);d=atd(BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));h=d.i;i=d.j;e=BD(qud((!f.a&&(f.a=new cUd(A2,f,6,6)),f.a),0),202);nmd(e,e.j+h,e.k+i);gmd(e,e.b+h,e.c+i);for(c=new Fyd((!e.a&&(e.a=new xMd(y2,e,5)),e.a));c.e!=c.i.gc();){b=BD(Dyd(c),469);ukd(b,b.a+h,b.b+i)}p7c(BD(hkd(f,(Y9c(),Q8c)),74),h,i)}} -function fee(a){var b;switch(a){case 100:return kee(nxe,true);case 68:return kee(nxe,false);case 119:return kee(oxe,true);case 87:return kee(oxe,false);case 115:return kee(pxe,true);case 83:return kee(pxe,false);case 99:return kee(qxe,true);case 67:return kee(qxe,false);case 105:return kee(rxe,true);case 73:return kee(rxe,false);default:throw vbb(new hz((b=a,mxe+b.toString(16))));}} -function $Xb(a){var b,c,d,e,f;e=BD(Ikb(a.a,0),10);b=new b0b(a);Ekb(a.a,b);b.o.a=$wnd.Math.max(1,e.o.a);b.o.b=$wnd.Math.max(1,e.o.b);b.n.a=e.n.a;b.n.b=e.n.b;switch(BD(vNb(e,(wtc(),Hsc)),61).g){case 4:b.n.a+=2;break;case 1:b.n.b+=2;break;case 2:b.n.a-=2;break;case 3:b.n.b-=2;}d=new H0b;F0b(d,b);c=new UZb;f=BD(Ikb(e.j,0),11);QZb(c,f);RZb(c,d);P6c(X6c(d.n),f.n);P6c(X6c(d.a),f.a);return b} -function Fac(a,b,c,d,e){if(c&&(!d||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.b],10).k==(j0b(),f0b)){zac(BD(a.a[a.b],10),(rbd(),nbd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&BD(a.a[a.c-1&a.a.length-1],10).k==(j0b(),f0b)){zac(BD(a.a[a.c-1&a.a.length-1],10),(rbd(),obd))}else if((a.c-a.b&a.a.length-1)==2){zac(BD(bkb(a),10),(rbd(),nbd));zac(BD(bkb(a),10),obd)}else{wac(a,e)}Yjb(a)} -function pRc(a,b,c){var d,e,f,g,h;f=0;for(e=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);g='';(!d.n&&(d.n=new cUd(D2,d,1,7)),d.n).i==0||(g=BD(qud((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n),0),137).a);h=new XRc(f++,b,g);tNb(h,d);yNb(h,(mTc(),dTc),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Dsb(b.b,h);jrb(c.f,d,h)}} -function B2b(a){var b,c,d,e,f;d=BD(vNb(a,(wtc(),$sc)),33);f=BD(hkd(d,(Nyc(),Fxc)),174).Hc((tdd(),sdd));if(!a.e){e=BD(vNb(a,Ksc),21);b=new f7c(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((Orc(),Hrc))){jkd(d,Vxc,(dcd(),$bd));Afd(d,b.a,b.b,false,true)}else{Ccb(DD(hkd(d,Gxc)))||Afd(d,b.a,b.b,true,true)}}f?jkd(d,Fxc,pqb(sdd)):jkd(d,Fxc,(c=BD(gdb(I1),9),new xqb(c,BD(_Bb(c,c.length),9),0)))} -function tA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(bfb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}if(b[0]<a.length&&bfb(a,b[0])==58){d=g*60;++b[0];f=b[0];g=rA(a,b);if(g==0&&b[0]==f){return false}d+=g}else{d=g;d<24&&b[0]-f<=2?(d*=60):(d=d%100+(d/100|0)*60)}d*=e;c.o=-d;return true} -function Hjc(a){var b,c,d,e,f,g,h,i,j;g=new Rkb;for(d=new Sr(ur(U_b(a.b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);OZb(c)&&Ekb(g,new Gjc(c,Jjc(a,c.c),Jjc(a,c.d)))}for(j=(f=(new $ib(a.e)).a.vc().Kc(),new djb(f));j.a.Ob();){h=(b=BD(j.a.Pb(),42),BD(b.dd(),113));h.d.p=0}for(i=(e=(new $ib(a.e)).a.vc().Kc(),new djb(e));i.a.Ob();){h=(b=BD(i.a.Pb(),42),BD(b.dd(),113));h.d.p==0&&Ekb(a.d,Ijc(a,h))}} -function W1b(a){var b,c,d,e,f,g,h;f=mpd(a);for(e=new Fyd((!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));e.e!=e.i.gc();){d=BD(Dyd(e),79);h=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82));if(!ntd(h,f)){return true}}for(c=new Fyd((!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));c.e!=c.i.gc();){b=BD(Dyd(c),79);g=atd(BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82));if(!ntd(g,f)){return true}}return false} -function Dmc(a){var b,c,d,e,f,g,h,i;i=new s7c;b=Jsb(a,0);h=null;c=BD(Xsb(b),8);e=BD(Xsb(b),8);while(b.b!=b.d.c){h=c;c=e;e=BD(Xsb(b),8);f=Emc(c7c(new f7c(h.a,h.b),c));g=Emc(c7c(new f7c(e.a,e.b),c));d=10;d=$wnd.Math.min(d,$wnd.Math.abs(f.a+f.b)/2);d=$wnd.Math.min(d,$wnd.Math.abs(g.a+g.b)/2);f.a=Eeb(f.a)*d;f.b=Eeb(f.b)*d;g.a=Eeb(g.a)*d;g.b=Eeb(g.b)*d;Dsb(i,P6c(f,c));Dsb(i,P6c(g,c))}return i} -function _hd(a,b,c,d){var e,f,g,h,i;g=a.eh();i=a.Zg();e=null;if(i){if(!!b&&(Nid(a,b,c).Bb&Tje)==0){d=Txd(i.Vk(),a,d);a.uh(null);e=b.fh()}else{i=null}}else{!!g&&(i=g.fh());!!b&&(e=b.fh())}i!=e&&!!i&&i.Zk(a);h=a.Vg();a.Rg(b,c);i!=e&&!!e&&e.Yk(a);if(a.Lg()&&a.Mg()){if(!!g&&h>=0&&h!=c){f=new nSd(a,1,h,g,null);!d?(d=f):d.Ei(f)}if(c>=0){f=new nSd(a,1,c,h==c?g:null,b);!d?(d=f):d.Ei(f)}}return d} -function LEd(a){var b,c,d;if(a.b==null){d=new Hfb;if(a.i!=null){Efb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){YEd(a.i)||(d.a+='//',d);Efb(d,a.a)}if(a.d!=null){d.a+='/';Efb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;b<c;b++){b!=0&&(d.a+='/',d);Efb(d,a.j[b])}if(a.g!=null){d.a+='?';Efb(d,a.g)}}else{Efb(d,a.a)}if(a.e!=null){d.a+='#';Efb(d,a.e)}a.b=d.a}return a.b} -function E5b(a,b){var c,d,e,f,g,h;for(e=new olb(b.a);e.a<e.c.c.length;){d=BD(mlb(e),10);f=vNb(d,(wtc(),$sc));if(JD(f,11)){g=BD(f,11);h=b_b(b,d,g.o.a,g.o.b);g.n.a=h.a;g.n.b=h.b;G0b(g,BD(vNb(d,Hsc),61))}}c=new f7c(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a);if(BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){yNb(a,(Nyc(),Vxc),(dcd(),$bd));BD(vNb(Q_b(a),Ksc),21).Fc(Krc);j_b(a,c,false)}else{j_b(a,c,true)}} -function YFc(a,b,c){var d,e,f,g,h,i;Odd(c,'Minimize Crossings '+a.a,1);d=b.b.c.length==0||!WAb(JAb(new YAb(null,new Kub(b.b,16)),new Xxb(new xGc))).sd((EAb(),DAb));i=b.b.c.length==1&&BD(Ikb(b.b,0),29).a.c.length==1;f=PD(vNb(b,(Nyc(),axc)))===PD((hbd(),ebd));if(d||i&&!f){Qdd(c);return}e=TFc(a,b);g=(h=BD(Ut(e,0),214),h.c.Rf()?h.c.Lf()?new kGc(a):new mGc(a):new iGc(a));UFc(e,g);eGc(a);Qdd(c)} -function so(a,b,c,d){var e,f,g,h,i;i=Tbb(Ibb(Eie,keb(Tbb(Ibb(b==null?0:tb(b),Fie)),15)));e=Tbb(Ibb(Eie,keb(Tbb(Ibb(c==null?0:tb(c),Fie)),15)));h=vo(a,b,i);g=uo(a,c,e);if(!!h&&e==h.a&&Hb(c,h.g)){return c}else if(!!g&&!d){throw vbb(new Wdb('key already present: '+c))}!!h&&mo(a,h);!!g&&mo(a,g);f=new $o(c,e,b,i);po(a,f,g);if(g){g.e=null;g.c=null}if(h){h.e=null;h.c=null}to(a);return !h?null:h.g} -function Lhb(a,b,c){var d,e,f,g,h;for(f=0;f<b;f++){d=0;for(h=f+1;h<b;h++){d=wbb(wbb(Ibb(xbb(a[f],Yje),xbb(a[h],Yje)),xbb(c[f+h],Yje)),xbb(Tbb(d),Yje));c[f+h]=Tbb(d);d=Pbb(d,32)}c[f+b]=Tbb(d)}khb(c,c,b<<1);d=0;for(e=0,g=0;e<b;++e,g++){d=wbb(wbb(Ibb(xbb(a[e],Yje),xbb(a[e],Yje)),xbb(c[g],Yje)),xbb(Tbb(d),Yje));c[g]=Tbb(d);d=Pbb(d,32);++g;d=wbb(d,xbb(c[g],Yje));c[g]=Tbb(d);d=Pbb(d,32)}return c} -function ZJc(a,b,c){var d,e,f,g,h,i,j,k;if(Qq(b)){return}i=Edb(ED(pBc(c.c,(Nyc(),zyc))));j=BD(pBc(c.c,yyc),142);!j&&(j=new H_b);d=c.a;e=null;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),11);k=0;if(!e){k=j.d}else{k=i;k+=e.o.b}f=nGb(oGb(new pGb,g),a.f);Rhb(a.k,g,f);AFb(DFb(CFb(BFb(EFb(new FFb,0),QD($wnd.Math.ceil(k))),d),f));e=g;d=f}AFb(DFb(CFb(BFb(EFb(new FFb,0),QD($wnd.Math.ceil(j.a+e.o.b))),d),c.d))} -function uZc(a,b,c,d,e,f,g,h){var i,j,k,l,m,n;n=false;m=f-c.s;k=c.t-b.f+(j=MZc(c,m,false),j.a);if(d.g+h>m){return false}l=(i=MZc(d,m,false),i.a);if(k+h+l<=b.b){KZc(c,f-c.s);c.c=true;KZc(d,f-c.s);OZc(d,c.s,c.t+c.d+h);d.k=true;WZc(c.q,d);n=true;if(e){s$c(b,d);d.j=b;if(a.c.length>g){v$c((tCb(g,a.c.length),BD(a.c[g],200)),d);(tCb(g,a.c.length),BD(a.c[g],200)).a.c.length==0&&Kkb(a,g)}}}return n} -function kcc(a,b){var c,d,e,f,g,h;Odd(b,'Partition midprocessing',1);e=new Hp;MAb(JAb(new YAb(null,new Kub(a.a,16)),new occ),new qcc(e));if(e.d==0){return}h=BD(GAb(UAb((f=e.i,new YAb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);d=h.Kc();c=BD(d.Pb(),19);while(d.Ob()){g=BD(d.Pb(),19);jcc(BD(Qc(e,c),21),BD(Qc(e,g),21));c=g}Qdd(b)} -function DYb(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new Rkb;f=(d=BD(gdb(F1),9),new xqb(d,BD(_Bb(d,d.length),9),0));g=new vgd(e,f)}BD(g.a,15).Fc(b);b.k==(j0b(),e0b)&&BD(g.b,21).Fc(BD(vNb(b,(wtc(),Hsc)),61));for(i=new olb(b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);for(k=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(h),new R0b(h)])));Qr(k);){j=BD(Rr(k),11);DYb(a,j.i,g)}}return g}return null} -function Dmd(a,b){var c,d,e,f,g;if(a.Ab){if(a.Ab){g=a.Ab.i;if(g>0){e=BD(a.Ab.g,1934);if(b==null){for(f=0;f<g;++f){c=e[f];if(c.d==null){return c}}}else{for(f=0;f<g;++f){c=e[f];if(dfb(b,c.d)){return c}}}}}else{if(b==null){for(d=new Fyd(a.Ab);d.e!=d.i.gc();){c=BD(Dyd(d),590);if(c.d==null){return c}}}else{for(d=new Fyd(a.Ab);d.e!=d.i.gc();){c=BD(Dyd(d),590);if(dfb(b,c.d)){return c}}}}}return null} -function gRc(a,b){var c,d,e,f,g,h,i,j;j=DD(vNb(b,(JTc(),GTc)));if(j==null||(uCb(j),j)){dRc(a,b);e=new Rkb;for(i=Jsb(b.b,0);i.b!=i.d.c;){g=BD(Xsb(i),86);c=cRc(a,g,null);if(c){tNb(c,b);e.c[e.c.length]=c}}a.a=null;a.b=null;if(e.c.length>1){for(d=new olb(e);d.a<d.c.c.length;){c=BD(mlb(d),135);f=0;for(h=Jsb(c.b,0);h.b!=h.d.c;){g=BD(Xsb(h),86);g.g=f++}}}return e}return Ou(OC(GC(n$,1),fme,135,0,[b]))} -function rqd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v;n=Sqd(a,etd(b),e);jmd(n,_pd(e,Vte));o=null;p=e;q=$pd(p,Yte);r=new urd(n);wqd(r.a,q);s=$pd(p,'endPoint');t=new yrd(n);yqd(t.a,s);u=Ypd(p,Ote);v=new Brd(n);zqd(v.a,u);l=_pd(e,Qte);f=new qrd(a,n);sqd(f.a,f.b,l);m=_pd(e,Pte);g=new rrd(a,n);tqd(g.a,g.b,m);j=Ypd(e,Ste);h=new srd(c,n);uqd(h.b,h.a,j);k=Ypd(e,Rte);i=new trd(d,n);vqd(i.b,i.a,k)} -function i_b(a,b,c){var d,e,f,g,h;h=null;switch(b.g){case 1:for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),11);if(Ccb(DD(vNb(d,(wtc(),Msc))))){return d}}h=new H0b;yNb(h,(wtc(),Msc),(Bcb(),true));break;case 2:for(g=new olb(a.j);g.a<g.c.c.length;){f=BD(mlb(g),11);if(Ccb(DD(vNb(f,(wtc(),etc))))){return f}}h=new H0b;yNb(h,(wtc(),etc),(Bcb(),true));}if(h){F0b(h,a);G0b(h,c);X$b(h.n,a.o,c)}return h} -function O3b(a,b){var c,d,e,f,g,h;h=-1;g=new Psb;for(d=new b1b(a.b);llb(d.a)||llb(d.b);){c=BD(llb(d.a)?mlb(d.a):mlb(d.b),17);h=$wnd.Math.max(h,Edb(ED(vNb(c,(Nyc(),Zwc)))));c.c==a?MAb(JAb(new YAb(null,new Kub(c.b,16)),new U3b),new W3b(g)):MAb(JAb(new YAb(null,new Kub(c.b,16)),new Y3b),new $3b(g));for(f=Jsb(g,0);f.b!=f.d.c;){e=BD(Xsb(f),70);wNb(e,(wtc(),Dsc))||yNb(e,Dsc,c)}Gkb(b,g);Osb(g)}return h} -function _bc(a,b,c,d,e){var f,g,h,i;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));yNb(f,(wtc(),$sc),b.c.i);g=new H0b;yNb(g,$sc,b.c);G0b(g,e);F0b(g,f);yNb(b.c,gtc,f);h=new b0b(a);__b(h,i0b);yNb(h,Vxc,$bd);yNb(h,$sc,b.d.i);i=new H0b;yNb(i,$sc,b.d);G0b(i,e);F0b(i,h);yNb(b.d,gtc,h);QZb(b,g);RZb(b,i);wCb(0,c.c.length);aCb(c.c,0,f);d.c[d.c.length]=h;yNb(f,ysc,meb(1));yNb(h,ysc,meb(1))} -function BPc(a,b,c,d,e){var f,g,h,i,j;h=e?d.b:d.a;if(Rqb(a.a,d)){return}j=h>c.s&&h<c.c;i=false;if(c.e.b!=0&&c.j.b!=0){i=i|($wnd.Math.abs(h-Edb(ED(Hsb(c.e))))<qme&&$wnd.Math.abs(h-Edb(ED(Hsb(c.j))))<qme);i=i|($wnd.Math.abs(h-Edb(ED(Isb(c.e))))<qme&&$wnd.Math.abs(h-Edb(ED(Isb(c.j))))<qme)}if(j||i){g=BD(vNb(b,(Nyc(),jxc)),74);if(!g){g=new s7c;yNb(b,jxc,g)}f=new g7c(d);Gsb(g,f,g.c.b,g.c);Qqb(a.a,f)}} -function gNb(a,b,c,d){var e,f,g,h,i,j,k;if(fNb(a,b,c,d)){return true}else{for(g=new olb(b.f);g.a<g.c.c.length;){f=BD(mlb(g),324);h=false;i=a.j-b.j+c;j=i+b.o;k=a.k-b.k+d;e=k+b.p;switch(f.a.g){case 0:h=oNb(a,i+f.b.a,0,i+f.c.a,k-1);break;case 1:h=oNb(a,j,k+f.b.a,a.o-1,k+f.c.a);break;case 2:h=oNb(a,i+f.b.a,e,i+f.c.a,a.p-1);break;default:h=oNb(a,0,k+f.b.a,i-1,k+f.c.a);}if(h){return true}}}return false} -function LMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(j=new olb(f.a);j.a<j.c.c.length;){i=BD(mlb(j),10);k=new Rkb;h=0;for(d=new Sr(ur(R_b(i).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)||!OZb(c)&&c.c.i.c==c.d.i.c){continue}e=BD(vNb(c,(Nyc(),eyc)),19).a;if(e>h){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.c.i,c))}mmb();Okb(k,a.c);Dkb(a.b,i.p,k)}}} -function MMc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new olb(b.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(j=new olb(f.a);j.a<j.c.c.length;){i=BD(mlb(j),10);k=new Rkb;h=0;for(d=new Sr(ur(U_b(i).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);if(OZb(c)||!OZb(c)&&c.c.i.c==c.d.i.c){continue}e=BD(vNb(c,(Nyc(),eyc)),19).a;if(e>h){h=e;k.c=KC(SI,Uhe,1,0,5,1)}e==h&&Ekb(k,new vgd(c.d.i,c))}mmb();Okb(k,a.c);Dkb(a.f,i.p,k)}}} -function Y7c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,qse),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new _7c)));p4c(a,qse,ame,U7c);p4c(a,qse,wme,15);p4c(a,qse,vme,meb(0));p4c(a,qse,Jre,Ksd(O7c));p4c(a,qse,Fme,Ksd(Q7c));p4c(a,qse,Eme,Ksd(S7c));p4c(a,qse,_le,pse);p4c(a,qse,Ame,Ksd(P7c));p4c(a,qse,Tme,Ksd(R7c));p4c(a,qse,rse,Ksd(M7c));p4c(a,qse,lqe,Ksd(N7c))} -function W$b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return Ucd(),Scd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return Ucd(),Tcd}else if(j+h>g){return Ucd(),zcd}break;case 4:case 3:if(k<0){return Ucd(),Acd}else if(k+c>f){return Ucd(),Rcd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(Ucd(),Tcd):i+d>=1&&i-d>=0?(Ucd(),zcd):d<0.5?(Ucd(),Acd):(Ucd(),Rcd)} -function pJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Edb(ED(vNb(b,(Nyc(),vyc))));o=Qie*k;for(e=new olb(b.b);e.a<e.c.c.length;){d=BD(mlb(e),29);j=new olb(d.a);f=BD(mlb(j),10);l=xJc(a.a[f.p]);while(j.a<j.c.c.length){h=BD(mlb(j),10);m=xJc(a.a[h.p]);if(l!=m){n=jBc(a.b,f,h);g=f.n.b+f.o.b+f.d.a+l.a+n;i=h.n.b-h.d.d+m.a;if(g>i+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} -function VGb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new I6c;for(j=b.Kc();j.Ob();){h=BD(j.Pb(),839);for(l=new olb(h.wf());l.a<l.c.c.length;){k=BD(mlb(l),181);if(PD(k.We((Y9c(),C8c)))===PD((qad(),pad))){SGb(m,k,false,d,e,f,g);H6c(a,m)}}}for(i=c.Kc();i.Ob();){h=BD(i.Pb(),839);for(l=new olb(h.wf());l.a<l.c.c.length;){k=BD(mlb(l),181);if(PD(k.We((Y9c(),C8c)))===PD((qad(),oad))){SGb(m,k,true,d,e,f,g);H6c(a,m)}}}} -function oRc(a,b,c){var d,e,f,g,h,i,j;for(g=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);for(e=new Sr(ur(_sd(f).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);if(!Pld(d)&&!Pld(d)&&!Qld(d)){i=BD(Wd(irb(c.f,f)),86);j=BD(Ohb(c,atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))),86);if(!!i&&!!j){h=new QRc(i,j);yNb(h,(mTc(),dTc),d);tNb(h,d);Dsb(i.d,h);Dsb(j.b,h);Dsb(b.a,h)}}}}} -function QKb(a,b){var c,d,e,f,g,h,i,j;for(i=BD(BD(Qc(a.r,b),21),84).Kc();i.Ob();){h=BD(i.Pb(),111);e=h.c?YHb(h.c):0;if(e>0){if(h.a){j=h.b.rf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=BD(Ikb(h.c.d,0),181).rf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(tcd(a.u)){f=sfd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.rf().b&&(h.d.a=f.d+f.a-h.b.rf().b)}}} -function FC(a,b){var c;switch(HC(a)){case 6:return ND(b);case 7:return LD(b);case 8:return KD(b);case 3:return Array.isArray(b)&&(c=HC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===Nhe;case 12:return b!=null&&(typeof b===Jhe||typeof b==Nhe);case 0:return AD(b,a.__elementTypeId$);case 2:return OD(b)&&!(b.im===gcb);case 1:return OD(b)&&!(b.im===gcb)||AD(b,a.__elementTypeId$);default:return true;}} -function xOb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} -function mgb(a,b){var c,d,e,f,g,h;e=pgb(a);h=pgb(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.f<b.f?-1:a.f>b.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*Xje)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*Xje)+1);if(c>d+1){return e}else if(c<d-1){return -e}else{f=(!a.c&&(a.c=fhb(a.f)),a.c);g=(!b.c&&(b.c=fhb(b.f)),b.c);d<0?(f=Ogb(f,Khb(-d))):d>0&&(g=Ogb(g,Khb(d)));return Igb(f,g)}}else return e<h?-1:1} -function mTb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new olb(a.f.e);e.a<e.c.c.length;){d=BD(mlb(e),144);if(b==d){continue}g=a.i[b.b][d.b];f+=g;c=S6c(b.d,d.d);c>0&&a.d!=(yTb(),xTb)&&(h+=g*(d.d.a+a.a[b.b][d.b]*(b.d.a-d.d.a)/c));c>0&&a.d!=(yTb(),vTb)&&(i+=g*(d.d.b+a.a[b.b][d.b]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new f7c(h/f,b.d.b);case 2:return new f7c(b.d.a,i/f);default:return new f7c(h/f,i/f);}} -function Wcc(a,b){Occ();var c,d,e,f,g;g=BD(vNb(a.i,(Nyc(),Vxc)),98);f=a.j.g-b.j.g;if(f!=0||!(g==(dcd(),Zbd)||g==_bd||g==$bd)){return 0}if(g==(dcd(),Zbd)){c=BD(vNb(a,Wxc),19);d=BD(vNb(b,Wxc),19);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Kdb(a.n.a,b.n.a);case 2:return Kdb(a.n.b,b.n.b);case 3:return Kdb(b.n.a,a.n.a);case 4:return Kdb(b.n.b,a.n.b);default:throw vbb(new Zdb(ine));}} -function tfd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new xMd(y2,a,5)),a.a).i+2;g=new Skb(c);Ekb(g,new f7c(a.j,a.k));MAb(new YAb(null,(!a.a&&(a.a=new xMd(y2,a,5)),new Kub(a.a,16))),new Qfd(g));Ekb(g,new f7c(a.b,a.c));b=1;while(b<g.c.length-1){d=(tCb(b-1,g.c.length),BD(g.c[b-1],8));e=(tCb(b,g.c.length),BD(g.c[b],8));f=(tCb(b+1,g.c.length),BD(g.c[b+1],8));d.a==e.a&&e.a==f.a||d.b==e.b&&e.b==f.b?Kkb(g,b):++b}return g} -function Xgc(a,b){var c,d,e,f,g,h,i;c=vDb(yDb(wDb(xDb(new zDb,b),new K6c(b.e)),Ggc),a.a);b.j.c.length==0||nDb(BD(Ikb(b.j,0),57).a,c);i=new lEb;Rhb(a.e,c,i);g=new Tqb;h=new Tqb;for(f=new olb(b.k);f.a<f.c.c.length;){e=BD(mlb(f),17);Qqb(g,e.c);Qqb(h,e.d)}d=g.a.gc()-h.a.gc();if(d<0){jEb(i,true,(ead(),aad));jEb(i,false,bad)}else if(d>0){jEb(i,false,(ead(),aad));jEb(i,true,bad)}Hkb(b.g,new $hc(a,c));Rhb(a.g,b,c)} -function Neb(){Neb=ccb;var a;Jeb=OC(GC(WD,1),oje,25,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]);Keb=KC(WD,oje,25,37,15,1);Leb=OC(GC(WD,1),oje,25,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]);Meb=KC(XD,Sje,25,37,14,1);for(a=2;a<=36;a++){Keb[a]=QD($wnd.Math.pow(a,Jeb[a]));Meb[a]=Abb(rie,Keb[a])}} -function pfd(a){var b;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}b=new s7c;!!btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)),false));!!btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))&&ye(b,qfd(a,btd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)),true));return b} -function _Mc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(YLc(),XLc)?R_b(b.b):U_b(b.b)):(e=a.a.c==(YLc(),WLc)?R_b(b.b):U_b(b.b));f=false;for(d=new Sr(ur(e.a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);g=Ccb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!OZb(c)&&c.c.i.c==c.d.i.c){continue}if(Ccb(a.a.n[a.a.g[b.b.p].p])||Ccb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Rqb(a.b,a.a.g[TMc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} -function bed(a,b,c,d,e){var f,g,h,i,j,k,l;mmb();Okb(a,new Red);h=new Bib(a,0);l=new Rkb;f=0;while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),157));if(l.c.length!=0&&red(g)*qed(g)>f*2){k=new wed(l);j=red(g)/qed(g);i=fed(k,b,new p0b,c,d,e,j);P6c(X6c(k.e),i);l.c=KC(SI,Uhe,1,0,5,1);f=0;l.c[l.c.length]=k;l.c[l.c.length]=g;f=red(k)*qed(k)+red(g)*qed(g)}else{l.c[l.c.length]=g;f+=red(g)*qed(g)}}return l} -function qwd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.ej()){i=a.fj();zvd(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,i):a.Zi(5,null,c,b,i);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){j=a.Oi(e);h=a.cj(j,h);h=h}if(!h){a.$i(g)}else{h.Ei(g);h.Fi()}}else{a.$i(g)}}else{zvd(a,b,c);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){h=a.cj(a.Oi(e),h)}!!h&&h.Fi()}}return true}} -function wwd(a,b,c){var d,e,f,g,h;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,h=(g=a.Ui(b,a.oi(b,c)),g),c,b,f);if(a.bj()&&!(a.ni()&&!!h?pb(h,c):PD(h)===PD(c))){!!h&&(e=a.dj(h,e));e=a.cj(c,e);if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return h}else{h=(g=a.Ui(b,a.oi(b,c)),g);if(a.bj()&&!(a.ni()&&!!h?pb(h,c):PD(h)===PD(c))){e=null;!!h&&(e=a.dj(h,null));e=a.cj(c,e);!!e&&e.Fi()}return h}} -function rRb(a,b){var c,d,e,f,g,h,i,j,k;a.e=b;a.f=BD(vNb(b,(HSb(),GSb)),230);iRb(b);a.d=$wnd.Math.max(b.e.c.length*16+b.c.c.length,256);if(!Ccb(DD(vNb(b,(wSb(),dSb))))){k=a.e.e.c.length;for(i=new olb(b.e);i.a<i.c.c.length;){h=BD(mlb(i),144);j=h.d;j.a=Aub(a.f)*k;j.b=Aub(a.f)*k}}c=b.b;for(f=new olb(b.c);f.a<f.c.c.length;){e=BD(mlb(f),282);d=BD(vNb(e,rSb),19).a;if(d>0){for(g=0;g<d;g++){Ekb(c,new aRb(e))}cRb(e)}}} -function zac(a,b){var c,d,e,f,g,h;if(a.k==(j0b(),f0b)){c=WAb(JAb(BD(vNb(a,(wtc(),ktc)),15).Oc(),new Xxb(new Kac))).sd((EAb(),DAb))?b:(rbd(),pbd);yNb(a,Ssc,c);if(c!=(rbd(),obd)){d=BD(vNb(a,$sc),17);h=Edb(ED(vNb(d,(Nyc(),Zwc))));g=0;if(c==nbd){g=a.o.b-$wnd.Math.ceil(h/2)}else if(c==pbd){a.o.b-=Edb(ED(vNb(Q_b(a),nyc)));g=(a.o.b-$wnd.Math.ceil(h))/2}for(f=new olb(a.j);f.a<f.c.c.length;){e=BD(mlb(f),11);e.n.b=g}}}} -function Uge(){Uge=ccb;g5d();Tge=new Vge;OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Xwe)])]);OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Ywe)])]);OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge(Zwe)]),OC(GC(w5,1),Axe,592,0,[new Rge(Ywe)])]);new Ygb('-1');OC(GC(w5,2),nie,368,0,[OC(GC(w5,1),Axe,592,0,[new Rge('\\c+')])]);new Ygb('0');new Ygb('0');new Ygb('1');new Ygb('0');new Ygb(hxe)} -function KQd(a){var b,c;if(!!a.c&&a.c.kh()){c=BD(a.c,49);a.c=BD(xid(a,c),138);if(a.c!=c){(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,9,2,c,a.c));if(JD(a.Cb,399)){a.Db>>16==-15&&a.Cb.nh()&&Rwd(new oSd(a.Cb,9,13,c,a.c,HLd(QSd(BD(a.Cb,59)),a)))}else if(JD(a.Cb,88)){if(a.Db>>16==-23&&a.Cb.nh()){b=a.c;JD(b,88)||(b=(jGd(),_Fd));JD(c,88)||(c=(jGd(),_Fd));Rwd(new oSd(a.Cb,9,10,c,b,HLd(VKd(BD(a.Cb,26)),a)))}}}}return a.c} -function f7b(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Hypernodes processing',1);for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(h=new olb(d.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(Ccb(DD(vNb(g,(Nyc(),exc))))&&g.j.c.length<=2){l=0;k=0;c=0;f=0;for(j=new olb(g.j);j.a<j.c.c.length;){i=BD(mlb(j),11);switch(i.j.g){case 1:++l;break;case 2:++k;break;case 3:++c;break;case 4:++f;}}l==0&&c==0&&e7b(a,g,f<=k)}}}Qdd(b)} -function i7b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Layer constraint edge reversal',1);for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);k=-1;c=new Rkb;j=l_b(f.a);for(e=0;e<j.length;e++){d=BD(vNb(j[e],(wtc(),Osc)),303);if(k==-1){d!=(esc(),dsc)&&(k=e)}else{if(d==(esc(),dsc)){$_b(j[e],null);Z_b(j[e],k++,f)}}d==(esc(),bsc)&&Ekb(c,j[e])}for(i=new olb(c);i.a<i.c.c.length;){h=BD(mlb(i),10);$_b(h,null);$_b(h,f)}}Qdd(b)} -function W6b(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Hyperedge merging',1);U6b(a,b);i=new Bib(b.b,0);while(i.b<i.d.gc()){h=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),29));k=h.a;if(k.c.length==0){continue}d=null;e=null;f=null;g=null;for(j=0;j<k.c.length;j++){d=(tCb(j,k.c.length),BD(k.c[j],10));e=d.k;if(e==(j0b(),g0b)&&g==g0b){l=S6b(d,f);if(l.a){V6b(d,f,l.b,l.c);tCb(j,k.c.length);cCb(k.c,j,1);--j;d=f;e=g}}f=d;g=e}}Qdd(c)} -function WFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=OFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=OFc(a,b)}while(e>c);return e} -function XFc(a,b){var c,d,e;d=Cub(a.d,1)!=0;!Ccb(DD(vNb(b.j,(wtc(),Jsc))))&&!Ccb(DD(vNb(b.j,mtc)))||PD(vNb(b.j,(Nyc(),ywc)))===PD((tAc(),rAc))?b.c.Tf(b.e,d):(d=Ccb(DD(vNb(b.j,Jsc))));dGc(a,b,d,true);Ccb(DD(vNb(b.j,mtc)))&&yNb(b.j,mtc,(Bcb(),false));if(Ccb(DD(vNb(b.j,Jsc)))){yNb(b.j,Jsc,(Bcb(),false));yNb(b.j,mtc,true)}c=NFc(a,b);do{$Fc(a);if(c==0){return 0}d=!d;e=c;dGc(a,b,d,false);c=NFc(a,b)}while(e>c);return e} -function uNd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=vNd(a,b);c=vNd(a,c);d=JQd(b);if(d){k=JQd(c);if(k!=d){if(!k){return false}else{i=d.Dj();o=k.Dj();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new xMd(j5,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new xMd(j5,c,1)),c.d);if(f==m.i){for(j=0;j<f;++j){e=BD(qud(g,j),87);l=BD(qud(m,j),87);if(!uNd(a,e,l)){return false}}}return true}}else{h=b.e;n=c.e;return h==n}}} -function X2d(a,b,c,d){var e,f,g,h,i,j,k,l;if(T6d(a.e,b)){l=S6d(a.e.Tg(),b);f=BD(a.g,119);k=null;i=-1;h=-1;e=0;for(j=0;j<a.i;++j){g=f[j];if(l.rl(g.ak())){e==c&&(i=j);if(e==d){h=j;k=g.dd()}++e}}if(i==-1){throw vbb(new qcb(lue+c+mue+e))}if(h==-1){throw vbb(new qcb(nue+d+mue+e))}Wxd(a,i,h);oid(a.e)&&GLd(a,H2d(a,7,b,meb(d),k,c,true));return k}else{throw vbb(new Wdb('The feature must be many-valued to support move'))}} -function b_b(a,b,c,d){var e,f,g,h,i;i=new g7c(b.n);i.a+=b.o.a/2;i.b+=b.o.b/2;h=Edb(ED(vNb(b,(Nyc(),Uxc))));f=a.f;g=a.d;e=a.c;switch(BD(vNb(b,(wtc(),Hsc)),61).g){case 1:i.a+=g.b+e.a-c/2;i.b=-d-h;b.n.b=-(g.d+h+e.b);break;case 2:i.a=f.a+g.b+g.c+h;i.b+=g.d+e.b-d/2;b.n.a=f.a+g.c+h-e.a;break;case 3:i.a+=g.b+e.a-c/2;i.b=f.b+g.d+g.a+h;b.n.b=f.b+g.a+h-e.b;break;case 4:i.a=-c-h;i.b+=g.d+e.b-d/2;b.n.a=-(g.b+h+e.a);}return i} -function P1b(a){var b,c,d,e,f,g;d=new XZb;tNb(d,a);PD(vNb(d,(Nyc(),Lwc)))===PD((ead(),cad))&&yNb(d,Lwc,a_b(d));if(vNb(d,(g6c(),f6c))==null){g=BD(m6d(a),160);yNb(d,f6c,RD(g.We(f6c)))}yNb(d,(wtc(),$sc),a);yNb(d,Ksc,(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));e=OGb((!Xod(a)?null:(Pgd(),new bhd(Xod(a))),Pgd(),new hhd(!Xod(a)?null:new bhd(Xod(a)),a)),bad);f=BD(vNb(d,Kxc),116);c=d.d;t_b(c,f);t_b(c,e);return d} -function ybc(a,b,c){var d,e;d=b.c.i;e=c.d.i;if(d.k==(j0b(),g0b)){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11));yNb(a,Usc,DD(vNb(d,Usc)))}else if(d.k==f0b){yNb(a,(wtc(),Vsc),BD(vNb(d,Vsc),11));yNb(a,Wsc,BD(vNb(d,Wsc),11));yNb(a,Usc,(Bcb(),true))}else if(e.k==f0b){yNb(a,(wtc(),Vsc),BD(vNb(e,Vsc),11));yNb(a,Wsc,BD(vNb(e,Wsc),11));yNb(a,Usc,(Bcb(),true))}else{yNb(a,(wtc(),Vsc),b.c);yNb(a,Wsc,c.d)}} -function FGb(a){var b,c,d,e,f,g,h;a.o=new jkb;d=new Psb;for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);LFb(f).c.length==1&&(Gsb(d,f,d.c.b,d.c),true)}while(d.b!=0){f=BD(d.b==0?null:(sCb(d.b!=0),Nsb(d,d.a.a)),121);if(LFb(f).c.length==0){continue}b=BD(Ikb(LFb(f),0),213);c=f.g.a.c.length>0;h=xFb(b,f);c?OFb(h.b,b):OFb(h.g,b);LFb(h).c.length==1&&(Gsb(d,h,d.c.b,d.c),true);e=new vgd(f,b);Wjb(a.o,e);Lkb(a.e.a,f)}} -function _Nb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(D6c(a.b).a-D6c(b.b).a);h=$wnd.Math.abs(D6c(a.b).b-D6c(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} -function lQc(a){var b,c,d,e;nQc(a,a.e,a.f,(FQc(),DQc),true,a.c,a.i);nQc(a,a.e,a.f,DQc,false,a.c,a.i);nQc(a,a.e,a.f,EQc,true,a.c,a.i);nQc(a,a.e,a.f,EQc,false,a.c,a.i);mQc(a,a.c,a.e,a.f,a.i);d=new Bib(a.i,0);while(d.b<d.d.gc()){b=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),128));e=new Bib(a.i,d.b);while(e.b<e.d.gc()){c=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),128));kQc(b,c)}}wQc(a.i,BD(vNb(a.d,(wtc(),jtc)),230));zQc(a.i)} -function fKd(a,b){var c,d;if(b!=null){d=dKd(a);if(d){if((d.i&1)!=0){if(d==sbb){return KD(b)}else if(d==WD){return JD(b,19)}else if(d==VD){return JD(b,155)}else if(d==SD){return JD(b,217)}else if(d==TD){return JD(b,172)}else if(d==UD){return LD(b)}else if(d==rbb){return JD(b,184)}else if(d==XD){return JD(b,162)}}else{return pEd(),c=BD(Ohb(oEd,d),55),!c||c.wj(b)}}else if(JD(b,56)){return a.uk(BD(b,56))}}return false} -function ade(){ade=ccb;var a,b,c,d,e,f,g,h,i;$ce=KC(SD,wte,25,255,15,1);_ce=KC(TD,$ie,25,64,15,1);for(b=0;b<255;b++){$ce[b]=-1}for(c=90;c>=65;c--){$ce[c]=c-65<<24>>24}for(d=122;d>=97;d--){$ce[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){$ce[e]=e-48+52<<24>>24}$ce[43]=62;$ce[47]=63;for(f=0;f<=25;f++)_ce[f]=65+f&aje;for(g=26,i=0;g<=51;++g,i++)_ce[g]=97+i&aje;for(a=52,h=0;a<=61;++a,h++)_ce[a]=48+h&aje;_ce[62]=43;_ce[63]=47} -function FXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new d7c}j=0;l=0;for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Edb(ED(vNb(BD(a.Kc().Pb(),37),(Nyc(),owc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}uXb(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new f7c(c+b,n+i+b)} -function mQc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),17);i=f.c;if(c.a._b(i)){j=(FQc(),DQc)}else if(d.a._b(i)){j=(FQc(),EQc)}else{throw vbb(new Wdb('Source port must be in one of the port sets.'))}k=f.d;if(c.a._b(k)){l=(FQc(),DQc)}else if(d.a._b(k)){l=(FQc(),EQc)}else{throw vbb(new Wdb('Target port must be in one of the port sets.'))}h=new YQc(f,j,l);Rhb(a.b,f,h);e.c[e.c.length]=h}} -function lfd(a,b){var c,d,e,f,g,h,i;if(!mpd(a)){throw vbb(new Zdb(Sse))}d=mpd(a);f=d.g;e=d.f;if(f<=0&&e<=0){return Ucd(),Scd}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return Ucd(),Tcd}else if(h+a.g>f){return Ucd(),zcd}break;case 4:case 3:if(i<0){return Ucd(),Acd}else if(i+a.f>e){return Ucd(),Rcd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(Ucd(),Tcd):g+c>=1&&g-c>=0?(Ucd(),zcd):c<0.5?(Ucd(),Acd):(Ucd(),Rcd)} -function vhb(a,b,c,d,e){var f,g;f=wbb(xbb(b[0],Yje),xbb(d[0],Yje));a[0]=Tbb(f);f=Obb(f,32);if(c>=e){for(g=1;g<e;g++){f=wbb(f,wbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<c;g++){f=wbb(f,xbb(b[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}}else{for(g=1;g<c;g++){f=wbb(f,wbb(xbb(b[g],Yje),xbb(d[g],Yje)));a[g]=Tbb(f);f=Obb(f,32)}for(;g<e;g++){f=wbb(f,xbb(d[g],Yje));a[g]=Tbb(f);f=Obb(f,32)}}ybb(f,0)!=0&&(a[g]=Tbb(f))} -function _fe(a){wfe();var b,c,d,e,f,g;if(a.e!=4&&a.e!=5)throw vbb(new Wdb('Token#complementRanges(): must be RANGE: '+a.e));f=a;Yfe(f);Vfe(f);d=f.b.length+2;f.b[0]==0&&(d-=2);c=f.b[f.b.length-1];c==lxe&&(d-=2);e=(++vfe,new $fe(4));e.b=KC(WD,oje,25,d,15,1);g=0;if(f.b[0]>0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b<f.b.length-2;b+=2){e.b[g++]=f.b[b]+1;e.b[g++]=f.b[b+1]-1}if(c!=lxe){e.b[g++]=c+1;e.b[g]=lxe}e.a=true;return e} -function Pxd(a,b,c){var d,e,f,g,h,i,j,k;d=c.gc();if(d==0){return false}else{if(a.ej()){j=a.fj();iud(a,b,c);g=d==1?a.Zi(3,null,c.Kc().Pb(),b,j):a.Zi(5,null,c,b,j);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){k=a.g[e];h=a.cj(k,h);h=a.jj(k,h)}if(!h){a.$i(g)}else{h.Ei(g);h.Fi()}}else{a.$i(g)}}else{iud(a,b,c);if(a.bj()){h=d<100?null:new Ixd(d);f=b+d;for(e=b;e<f;++e){i=a.g[e];h=a.cj(i,h)}!!h&&h.Fi()}}return true}} -function YNc(a,b,c,d){var e,f,g,h,i;for(g=new olb(a.k);g.a<g.c.c.length;){e=BD(mlb(g),129);if(!d||e.c==(HOc(),FOc)){i=e.b;if(i.g<0&&e.d>0){pOc(i,i.d-e.d);e.c==(HOc(),FOc)&&nOc(i,i.a-e.d);i.d<=0&&i.i>0&&(Gsb(b,i,b.c.b,b.c),true)}}}for(f=new olb(a.f);f.a<f.c.c.length;){e=BD(mlb(f),129);if(!d||e.c==(HOc(),FOc)){h=e.a;if(h.g<0&&e.d>0){qOc(h,h.i-e.d);e.c==(HOc(),FOc)&&oOc(h,h.b-e.d);h.i<=0&&h.d>0&&(Gsb(c,h,c.c.b,c.c),true)}}}} -function gSc(a,b,c){var d,e,f,g,h,i,j,k;Odd(c,'Processor compute fanout',1);Uhb(a.b);Uhb(a.a);h=null;f=Jsb(b.b,0);while(!h&&f.b!=f.d.c){j=BD(Xsb(f),86);Ccb(DD(vNb(j,(mTc(),jTc))))&&(h=j)}i=new Psb;Gsb(i,h,i.c.b,i.c);fSc(a,i);for(k=Jsb(b.b,0);k.b!=k.d.c;){j=BD(Xsb(k),86);g=GD(vNb(j,(mTc(),$Sc)));e=Phb(a.b,g)!=null?BD(Phb(a.b,g),19).a:0;yNb(j,ZSc,meb(e));d=1+(Phb(a.a,g)!=null?BD(Phb(a.a,g),19).a:0);yNb(j,XSc,meb(d))}Qdd(c)} -function WPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=VPc(a,c);for(i=0;i<b;i++){Aib(e,c);n=new Rkb;o=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),407));for(k=m+i;k<a.b;k++){h=o;o=(sCb(d.b<d.d.gc()),BD(d.d.Xb(d.c=d.b++),407));Ekb(n,new aQc(h,o,c))}for(l=m+i;l<a.b;l++){sCb(d.b>0);d.a.Xb(d.c=--d.b);l>m+i&&uib(d)}for(g=new olb(n);g.a<g.c.c.length;){f=BD(mlb(g),407);Aib(d,f)}if(i<b-1){for(j=m+i;j<a.b;j++){sCb(d.b>0);d.a.Xb(d.c=--d.b)}}}} -function Jfe(){wfe();var a,b,c,d,e,f;if(gfe)return gfe;a=(++vfe,new $fe(4));Xfe(a,Kfe(vxe,true));Zfe(a,Kfe('M',true));Zfe(a,Kfe('C',true));f=(++vfe,new $fe(4));for(d=0;d<11;d++){Ufe(f,d,d)}b=(++vfe,new $fe(4));Xfe(b,Kfe('M',true));Ufe(b,4448,4607);Ufe(b,65438,65439);e=(++vfe,new Lge(2));Kge(e,a);Kge(e,ffe);c=(++vfe,new Lge(2));c.$l(Bfe(f,Kfe('L',true)));c.$l(b);c=(++vfe,new lge(3,c));c=(++vfe,new rge(e,c));gfe=c;return gfe} -function S3c(a){var b,c;b=GD(hkd(a,(Y9c(),o8c)));if(T3c(b,a)){return}if(!ikd(a,F9c)&&((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i!=0||Ccb(DD(hkd(a,M8c))))){if(b==null||ufb(b).length==0){if(!T3c(sne,a)){c=Qfb(Qfb(new Wfb('Unable to load default layout algorithm '),sne),' for unconfigured node ');yfd(a,c);throw vbb(new y2c(c.a))}}else{c=Qfb(Qfb(new Wfb("Layout algorithm '"),b),"' not found for ");yfd(a,c);throw vbb(new y2c(c.a))}}} -function hIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];mHb(e,n,m)}}else{d=kIb(a,false);mHb(a.a[0],c.c+b.b,d[0]);mHb(a.a[2],c.c+c.b-b.c-d[2],d[2]);l=c.b-b.b-b.c;if(d[0]>0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);mHb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];JD(e,326)&&BD(e,326).Te()}} -function KMc(a){var b,c,d,e,f,g,h,i,j,k,l;l=new JMc;l.d=0;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);l.d+=f.a.c.length}d=0;e=0;l.a=KC(WD,oje,25,a.b.c.length,15,1);j=0;k=0;l.e=KC(WD,oje,25,l.d,15,1);for(c=new olb(a.b);c.a<c.c.c.length;){b=BD(mlb(c),29);b.p=d++;l.a[b.p]=e++;k=0;for(i=new olb(b.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p=j++;l.e[h.p]=k++}}l.c=new OMc(l);l.b=Pu(l.d);LMc(l,a);l.f=Pu(l.d);MMc(l,a);return l} -function GZc(a,b){var c,d,e,f;f=BD(Ikb(a.n,a.n.c.length-1),211).d;a.p=$wnd.Math.min(a.p,b.g);a.r=$wnd.Math.max(a.r,f);a.g=$wnd.Math.max(a.g,b.g+(a.b.c.length==1?0:a.i));a.o=$wnd.Math.min(a.o,b.f);a.e+=b.f+(a.b.c.length==1?0:a.i);a.f=$wnd.Math.max(a.f,b.f);e=a.n.c.length>0?(a.n.c.length-1)*a.i:0;for(d=new olb(a.n);d.a<d.c.c.length;){c=BD(mlb(d),211);e+=c.a}a.d=e;a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);u$c(a.j)} -function LQb(a,b){var c,d,e,f,g,h,i,j,k,l;k=DD(vNb(b,(wSb(),sSb)));if(k==null||(uCb(k),k)){l=KC(sbb,dle,25,b.e.c.length,16,1);g=HQb(b);e=new Psb;for(j=new olb(b.e);j.a<j.c.c.length;){h=BD(mlb(j),144);c=IQb(a,h,null,null,l,g);if(c){tNb(c,b);Gsb(e,c,e.c.b,e.c)}}if(e.b>1){for(d=Jsb(e,0);d.b!=d.d.c;){c=BD(Xsb(d),231);f=0;for(i=new olb(c.e);i.a<i.c.c.length;){h=BD(mlb(i),144);h.b=f++}}}return e}return Ou(OC(GC($O,1),fme,231,0,[b]))} -function TKd(a){var b,c,d,e,f,g,h;if(!a.g){h=new zNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);ytd(h,TKd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}e=h.i;for(f=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));f.e!=f.i.gc();++e){bJd(BD(Dyd(f),449),e)}ytd(h,(!a.s&&(a.s=new cUd(t5,a,21,17)),a.s));vud(h);a.g=new rNd(a,h);a.i=BD(h.g,247);a.i==null&&(a.i=MKd);a.p=null;$Kd(a).b&=-5}return a.g} -function iIb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;d=a.i;c=a.n;if(a.b==0){b=jIb(a,false);nHb(a.a[0],d.d+c.d,b[0]);nHb(a.a[2],d.d+d.a-c.a-b[2],b[2]);m=d.a-c.d-c.a;l=m;if(b[0]>0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);nHb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];nHb(e,o,n)}}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];JD(e,326)&&BD(e,326).Ue()}} -function boc(a){var b,c,d,e,f,g,h,i,j,k;k=KC(WD,oje,25,a.b.c.length+1,15,1);j=new Tqb;d=0;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);k[d++]=j.a.gc();for(i=new olb(e.a);i.a<i.c.c.length;){g=BD(mlb(i),10);for(c=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);j.a.zc(b,j)}}for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);for(c=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);j.a.Bc(b)!=null}}}return k} -function F2d(a,b,c,d){var e,f,g,h,i;i=S6d(a.e.Tg(),b);e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&pb(f,c)){return true}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(i.rl(f.ak())&&pb(c,f.dd())){return true}}if(d){for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&PD(c)===PD(a3d(a,BD(f.dd(),56)))){return true}}}}else{for(g=0;g<a.i;++g){f=e[g];if(i.rl(f.ak())&&f.dd()==null){return false}}}return false} -function e3d(a,b,c,d){var e,f,g,h,i,j;j=S6d(a.e.Tg(),b);g=BD(a.g,119);if(T6d(a.e,b)){if(b.hi()){f=M2d(a,b,d,JD(b,99)&&(BD(b,18).Bb&Tje)!=0);if(f>=0&&f!=c){throw vbb(new Wdb(kue))}}e=0;for(i=0;i<a.i;++i){h=g[i];if(j.rl(h.ak())){if(e==c){return BD(Gtd(a,i,(Q6d(),BD(b,66).Oj()?BD(d,72):R6d(b,d))),72)}++e}}throw vbb(new qcb(gve+c+mue+e))}else{for(i=0;i<a.i;++i){h=g[i];if(j.rl(h.ak())){return Q6d(),BD(b,66).Oj()?h:h.dd()}}return null}} -function ONb(a,b,c,d){var e,f,g,h;h=c;for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),221);e=BD(f.b,65);if(Jy(a.b.c,e.b.c+e.b.b)<=0&&Jy(e.b.c,a.b.c+a.b.b)<=0&&Jy(a.b.d,e.b.d+e.b.a)<=0&&Jy(e.b.d,a.b.d+a.b.a)<=0){if(Jy(e.b.c,a.b.c+a.b.b)==0&&d.a<0||Jy(e.b.c+e.b.b,a.b.c)==0&&d.a>0||Jy(e.b.d,a.b.d+a.b.a)==0&&d.b<0||Jy(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,YNb(a,e,d))}h=$wnd.Math.min(h,ONb(a,f,h,d))}return h} -function ifd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw vbb(new Wdb('The vector chain must contain at least a source and a target point.'))}e=(sCb(a.b!=0),BD(a.a.a.c,8));nmd(b,e.a,e.b);i=new Oyd((!b.a&&(b.a=new xMd(y2,b,5)),b.a));g=Jsb(a,1);while(g.a<a.b-1){h=BD(Xsb(g),8);if(i.e!=i.i.gc()){c=BD(Dyd(i),469)}else{c=(Fhd(),d=new xkd,d);Myd(i,c)}ukd(c,h.a,h.b)}while(i.e!=i.i.gc()){Dyd(i);Eyd(i)}f=(sCb(a.b!=0),BD(a.c.b.c,8));gmd(b,f.a,f.b)} -function $lc(a,b){var c,d,e,f,g,h,i,j,k;c=0;for(e=new olb((tCb(0,a.c.length),BD(a.c[0],101)).g.b.j);e.a<e.c.c.length;){d=BD(mlb(e),11);d.p=c++}b==(Ucd(),Acd)?Okb(a,new gmc):Okb(a,new kmc);h=0;k=a.c.length-1;while(h<k){g=(tCb(h,a.c.length),BD(a.c[h],101));j=(tCb(k,a.c.length),BD(a.c[k],101));f=b==Acd?g.c:g.a;i=b==Acd?j.a:j.c;amc(g,b,(Ajc(),yjc),f);amc(j,b,xjc,i);++h;--k}h==k&&amc((tCb(h,a.c.length),BD(a.c[h],101)),b,(Ajc(),wjc),null)} -function UVc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;l=a.a.i+a.a.g/2;m=a.a.i+a.a.g/2;o=b.i+b.g/2;q=b.j+b.f/2;h=new f7c(o,q);j=BD(hkd(b,(Y9c(),C9c)),8);j.a=j.a+l;j.b=j.b+m;f=(h.b-j.b)/(h.a-j.a);d=h.b-f*h.a;p=c.i+c.g/2;r=c.j+c.f/2;i=new f7c(p,r);k=BD(hkd(c,C9c),8);k.a=k.a+l;k.b=k.b+m;g=(i.b-k.b)/(i.a-k.a);e=i.b-g*i.a;n=(d-e)/(g-f);if(j.a<n&&h.a<n||n<j.a&&n<h.a){return false}else if(k.a<n&&i.a<n||n<k.a&&n<i.a){return false}return true} -function gqd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=BD(Ohb(a.c,b),183);if(!m){throw vbb(new cqd('Edge did not exist in input.'))}j=Wpd(m);f=Fhe((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a));h=!f;if(h){n=new wB;c=new Rrd(a,j,n);Dhe((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),c);cC(m,Nte,n)}e=ikd(b,(Y9c(),Q8c));if(e){k=BD(hkd(b,Q8c),74);g=!k||Ehe(k);i=!g;if(i){l=new wB;d=new Zrd(l);reb(k,d);cC(m,'junctionPoints',l)}}Upd(m,'container',Mld(b).k);return null} -function eDb(a,b,c){var d,e,f,g,h,i,j,k;this.a=a;this.b=b;this.c=c;this.e=Ou(OC(GC(GM,1),Uhe,168,0,[new aDb(a,b),new aDb(b,c),new aDb(c,a)]));this.f=Ou(OC(GC(m1,1),nie,8,0,[a,b,c]));this.d=(d=c7c(R6c(this.b),this.a),e=c7c(R6c(this.c),this.a),f=c7c(R6c(this.c),this.b),g=d.a*(this.a.a+this.b.a)+d.b*(this.a.b+this.b.b),h=e.a*(this.a.a+this.c.a)+e.b*(this.a.b+this.c.b),i=2*(d.a*f.b-d.b*f.a),j=(e.b*g-d.b*h)/i,k=(d.a*h-e.a*g)/i,new f7c(j,k))} -function nvd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;m=new yC(a.p);cC(b,fue,m);if(c&&!(!a.f?null:vmb(a.f)).a.dc()){k=new wB;cC(b,'logs',k);h=0;for(o=new Dnb((!a.f?null:vmb(a.f)).b.Kc());o.b.Ob();){n=GD(o.b.Pb());l=new yC(n);tB(k,h);vB(k,h,l);++h}}if(d){j=new TB(a.q);cC(b,'executionTime',j)}if(!vmb(a.a).a.dc()){g=new wB;cC(b,Jte,g);h=0;for(f=new Dnb(vmb(a.a).b.Kc());f.b.Ob();){e=BD(f.b.Pb(),1949);i=new eC;tB(g,h);vB(g,h,i);nvd(e,i,c,d);++h}}} -function PZb(a,b){var c,d,e,f,g,h;f=a.c;g=a.d;QZb(a,null);RZb(a,null);b&&Ccb(DD(vNb(g,(wtc(),Msc))))?QZb(a,i_b(g.i,(KAc(),IAc),(Ucd(),zcd))):QZb(a,g);b&&Ccb(DD(vNb(f,(wtc(),etc))))?RZb(a,i_b(f.i,(KAc(),HAc),(Ucd(),Tcd))):RZb(a,f);for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),70);e=BD(vNb(c,(Nyc(),Qwc)),272);e==(qad(),pad)?yNb(c,Qwc,oad):e==oad&&yNb(c,Qwc,pad)}h=Ccb(DD(vNb(a,(wtc(),ltc))));yNb(a,ltc,(Bcb(),h?false:true));a.a=w7c(a.a)} -function VQb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));f.e!=f.i.gc();){e=BD(Dyd(f),33);g='';(!e.n&&(e.n=new cUd(D2,e,1,7)),e.n).i==0||(g=BD(qud((!e.n&&(e.n=new cUd(D2,e,1,7)),e.n),0),137).a);h=new pRb(g);tNb(h,e);yNb(h,(HSb(),FSb),e);h.b=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);Ekb(b.e,h);jrb(c.f,e,h);i=BD(hkd(e,(wSb(),mSb)),98);i==(dcd(),ccd)&&(i=bcd)}} -function XJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=nGb(new pGb,a.f);j=a.i[b.c.i.p];n=a.i[b.d.i.p];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.n.b);n.b||(l+=m.n.b);k=QD($wnd.Math.max(0,h-l));g=QD($wnd.Math.max(0,l-h));o=(p=$wnd.Math.max(1,BD(vNb(b,(Nyc(),eyc)),19).a),q=JJc(b.c.i.k,b.d.i.k),p*q);e=AFb(DFb(CFb(BFb(EFb(new FFb,o),g),c),BD(Ohb(a.k,b.c),121)));f=AFb(DFb(CFb(BFb(EFb(new FFb,o),k),c),BD(Ohb(a.k,b.d),121)));d=new qKc(e,f);a.c[b.p]=d} -function NEc(a,b,c,d){var e,f,g,h,i,j;g=new _Ec(a,b,c);i=new Bib(d,0);e=false;while(i.b<i.d.gc()){h=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),233));if(h==b||h==c){uib(i)}else if(!e&&Edb(REc(h.g,h.d[0]).a)>Edb(REc(g.g,g.d[0]).a)){sCb(i.b>0);i.a.Xb(i.c=--i.b);Aib(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new Rkb),h.e).Mc(b);j=(!h.e&&(h.e=new Rkb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new Rkb),h.e).Fc(g);++g.c}}}e||(d.c[d.c.length]=g,true)} -function odc(a){var b,c,d;if(fcd(BD(vNb(a,(Nyc(),Vxc)),98))){for(c=new olb(a.j);c.a<c.c.c.length;){b=BD(mlb(c),11);b.j==(Ucd(),Scd)&&(d=BD(vNb(b,(wtc(),gtc)),10),d?G0b(b,BD(vNb(d,Hsc),61)):b.e.c.length-b.g.c.length<0?G0b(b,zcd):G0b(b,Tcd))}}else{for(c=new olb(a.j);c.a<c.c.c.length;){b=BD(mlb(c),11);d=BD(vNb(b,(wtc(),gtc)),10);d?G0b(b,BD(vNb(d,Hsc),61)):b.e.c.length-b.g.c.length<0?G0b(b,(Ucd(),zcd)):G0b(b,(Ucd(),Tcd))}yNb(a,Vxc,(dcd(),acd))}} -function age(a){var b,c,d;switch(a){case 91:case 93:case 45:case 94:case 44:case 92:d='\\'+String.fromCharCode(a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(a<32){c=(b=a>>>0,'0'+b.toString(16));d='\\x'+qfb(c,c.length-2,c.length)}else if(a>=Tje){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&aje);}return d} -function yhb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new Vgb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);g<0&&(c=Jbb(c));i<0&&(d=Jbb(d));return ghb(Qbb(c,d))}e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?zhb(b.a,h,a.a,f):uhb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Hgb(),Ggb}k=zhb(a.a,f,b.a,h)}else{k=uhb(a.a,f,b.a,h)}}j=new Vgb(l,k.length,k);Jgb(j);return j} -function YPc(a){var b,c,d,e,f,g;this.e=new Rkb;this.a=new Rkb;for(c=a.b-1;c<3;c++){St(a,0,BD(Ut(a,0),8))}if(a.b<4){throw vbb(new Wdb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;TPc(this,a.b+this.b-1);g=new Rkb;f=new olb(this.e);for(b=0;b<this.b-1;b++){Ekb(g,ED(mlb(f)))}for(e=Jsb(a,0);e.b!=e.d.c;){d=BD(Xsb(e),8);Ekb(g,ED(mlb(f)));Ekb(this.a,new bQc(d,g));tCb(0,g.c.length);g.c.splice(0,1)}}} -function Bac(a,b){var c,d,e,f,g,h,i,j,k;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),f0b)){i=(j=BD(Rr(new Sr(ur(R_b(g).a.Kc(),new Sq))),17),k=BD(Rr(new Sr(ur(U_b(g).a.Kc(),new Sq))),17),!Ccb(DD(vNb(j,(wtc(),ltc))))||!Ccb(DD(vNb(k,ltc))))?b:sbd(b);zac(g,i)}for(d=new Sr(ur(U_b(g).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);i=Ccb(DD(vNb(c,(wtc(),ltc))))?sbd(b):b;yac(c,i)}}}} -function yZc(a,b,c,d,e){var f,g,h;if(c.f>=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=BD(Ikb(b.n,b.n.c.length-1),211);if(g.e+g.d+c.g+e<=d&&(f=BD(Ikb(b.n,b.n.c.length-1),211),f.f-a.f+c.f<=a.b||a.a.c.length==1)){EZc(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Ekb(b.b,c);h=BD(Ikb(b.n,b.n.c.length-1),211);Ekb(b.n,new VZc(b.s,h.f+h.a+b.i,b.i));QZc(BD(Ikb(b.n,b.n.c.length-1),211),c);GZc(b,c);return true}}return false} -function Zxd(a,b,c){var d,e,f,g;if(a.ej()){e=null;f=a.fj();d=a.Zi(1,g=uud(a,b,c),c,b,f);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){g!=null&&(e=a.dj(g,e));e=a.cj(c,e);a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}else{a.ij()&&(e=a.lj(g,c,e));if(!e){a.$i(d)}else{e.Ei(d);e.Fi()}}return g}else{g=uud(a,b,c);if(a.bj()&&!(a.ni()&&g!=null?pb(g,c):PD(g)===PD(c))){e=null;g!=null&&(e=a.dj(g,null));e=a.cj(c,e);!!e&&e.Fi()}return g}} -function YA(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} -function opc(a,b){var c,d,e,f,g;Odd(b,'Path-Like Graph Wrapping',1);if(a.b.c.length==0){Qdd(b);return}e=new Xoc(a);g=(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i)*e.f);c=g/(e.i==null&&(e.i=Soc(e,new Zoc)),Edb(e.i));if(e.b>c){Qdd(b);return}switch(BD(vNb(a,(Nyc(),Gyc)),337).g){case 2:f=new hpc;break;case 0:f=new Ync;break;default:f=new kpc;}d=f.Vf(a,e);if(!f.Wf()){switch(BD(vNb(a,Myc),338).g){case 2:d=tpc(e,d);break;case 1:d=rpc(e,d);}}npc(a,e,d);Qdd(b)} -function MFc(a,b){var c,d,e,f;Fub(a.d,a.e);a.c.a.$b();if(Edb(ED(vNb(b.j,(Nyc(),uwc))))!=0||Edb(ED(vNb(b.j,uwc)))!=0){c=dme;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;e<f;e++){d=WFc(a,b);if(d<c){c=d;ZFc(a);if(c==0){break}}}}else{c=Ohe;PD(vNb(b.j,ywc))!==PD((tAc(),rAc))&&yNb(b.j,(wtc(),Jsc),(Bcb(),true));f=BD(vNb(b.j,Ayc),19).a;for(e=0;e<f;e++){d=XFc(a,b);if(d<c){c=d;ZFc(a);if(c==0){break}}}}} -function spc(a,b){var c,d,e,f,g,h,i,j;g=new Rkb;h=0;c=0;i=0;while(h<b.c.length-1&&c<a.gc()){d=BD(a.Xb(c),19).a+i;while((tCb(h+1,b.c.length),BD(b.c[h+1],19)).a<d){++h}j=0;f=d-(tCb(h,b.c.length),BD(b.c[h],19)).a;e=(tCb(h+1,b.c.length),BD(b.c[h+1],19)).a-d;f>e&&++j;Ekb(g,(tCb(h+j,b.c.length),BD(b.c[h+j],19)));i+=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a-d;++c;while(c<a.gc()&&BD(a.Xb(c),19).a+i<=(tCb(h+j,b.c.length),BD(b.c[h+j],19)).a){++c}h+=1+j}return g} -function RKd(a){var b,c,d,e,f,g,h;if(!a.d){h=new XNd;b=KKd;f=b.a.zc(a,b);if(f==null){for(d=new Fyd(_Kd(a));d.e!=d.i.gc();){c=BD(Dyd(d),26);ytd(h,RKd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new cUd(n5,a,11,10)),new Fyd(a.q));e.e!=e.i.gc();++g){BD(Dyd(e),399)}ytd(h,(!a.q&&(a.q=new cUd(n5,a,11,10)),a.q));vud(h);a.d=new nNd((BD(qud(ZKd((NFd(),MFd).o),9),18),h.i),h.g);a.e=BD(h.g,673);a.e==null&&(a.e=LKd);$Kd(a).b&=-17}return a.d} -function M2d(a,b,c,d){var e,f,g,h,i,j;j=S6d(a.e.Tg(),b);i=0;e=BD(a.g,119);Q6d();if(BD(b,66).Oj()){for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(pb(f,c)){return i}++i}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(j.rl(f.ak())){if(pb(c,f.dd())){return i}++i}}if(d){i=0;for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(PD(c)===PD(a3d(a,BD(f.dd(),56)))){return i}++i}}}}else{for(g=0;g<a.i;++g){f=e[g];if(j.rl(f.ak())){if(f.dd()==null){return i}++i}}}return -1} -function aed(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;mmb();Okb(a,new Jed);g=Ru(a);n=new Rkb;m=new Rkb;h=null;i=0;while(g.b!=0){f=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),157);if(!h||red(h)*qed(h)/2<red(f)*qed(f)){h=f;n.c[n.c.length]=f}else{i+=red(f)*qed(f);m.c[m.c.length]=f;if(m.c.length>1&&(i>red(h)*qed(h)/2||g.b==0)){l=new wed(m);k=red(h)/qed(h);j=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),j);h=l;n.c[n.c.length]=l;i=0;m.c=KC(SI,Uhe,1,0,5,1)}}}Gkb(n,m);return n} -function y6d(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.mh(b)){k=(n=b,!n?null:BD(d,49).xh(n));if(k){p=c.bh(b,a.a);o=b.t;if(o>1||o==-1){l=BD(p,69);m=BD(k,69);if(l.dc()){m.$b()}else{g=!!zUd(b);f=0;for(h=a.a?l.Kc():l.Zh();h.Ob();){j=BD(h.Pb(),56);e=BD(Wrb(a,j),56);if(!e){if(a.b&&!g){m.Xh(f,j);++f}}else{if(g){i=m.Xc(e);i==-1?m.Xh(f,e):f!=i&&m.ji(f,e)}else{m.Xh(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=Wrb(a,p);e==null?a.b&&!zUd(b)&&k.Wb(p):k.Wb(e)}}}}} -function E6b(a,b){var c,d,e,f,g,h,i,j;c=new L6b;for(e=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(OZb(d)){continue}h=d.c.i;if(F6b(h,C6b)){j=G6b(a,h,C6b,B6b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new Rkb);Ekb(c.a,h)}}for(g=new Sr(ur(U_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);if(OZb(f)){continue}i=f.d.i;if(F6b(i,B6b)){j=G6b(a,i,B6b,C6b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new Rkb);Ekb(c.c,i)}}return c} -function Khb(a){Dhb();var b,c,d,e;b=QD(a);if(a<Chb.length){return Chb[b]}else if(a<=50){return Pgb((Hgb(),Egb),b)}else if(a<=_ie){return Qgb(Pgb(Bhb[1],b),b)}if(a>1000000){throw vbb(new ocb('power of ten too big'))}if(a<=Ohe){return Qgb(Pgb(Bhb[1],b),b)}d=Pgb(Bhb[1],Ohe);e=d;c=Cbb(a-Ohe);b=QD(a%Ohe);while(ybb(c,Ohe)>0){e=Ogb(e,d);c=Qbb(c,Ohe)}e=Ogb(e,Pgb(Bhb[1],b));e=Qgb(e,Ohe);c=Cbb(a-Ohe);while(ybb(c,Ohe)>0){e=Qgb(e,Ohe);c=Qbb(c,Ohe)}e=Qgb(e,b);return e} -function X5b(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Hierarchical port dummy size processing',1);i=new Rkb;k=new Rkb;d=Edb(ED(vNb(a,(Nyc(),myc))));c=d*2;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);i.c=KC(SI,Uhe,1,0,5,1);k.c=KC(SI,Uhe,1,0,5,1);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){j=BD(vNb(g,(wtc(),Hsc)),61);j==(Ucd(),Acd)?(i.c[i.c.length]=g,true):j==Rcd&&(k.c[k.c.length]=g,true)}}Y5b(i,true,c);Y5b(k,false,c)}Qdd(b)} -function Oac(a,b){var c,d,e,f,g,h,i;Odd(b,'Layer constraint postprocessing',1);i=a.b;if(i.c.length!=0){d=(tCb(0,i.c.length),BD(i.c[0],29));g=BD(Ikb(i,i.c.length-1),29);c=new H1b(a);f=new H1b(a);Mac(a,d,g,c,f);c.a.c.length==0||(wCb(0,i.c.length),aCb(i.c,0,c));f.a.c.length==0||(i.c[i.c.length]=f,true)}if(wNb(a,(wtc(),Lsc))){e=new H1b(a);h=new H1b(a);Pac(a,e,h);e.a.c.length==0||(wCb(0,i.c.length),aCb(i.c,0,e));h.a.c.length==0||(i.c[i.c.length]=h,true)}Qdd(b)} -function b6b(a){var b,c,d,e,f,g,h,i,j,k;for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(h.k!=(j0b(),e0b)){continue}e=BD(vNb(h,(wtc(),Hsc)),61);if(e==(Ucd(),zcd)||e==Tcd){for(d=new Sr(ur(O_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);b=c.a;if(b.b==0){continue}j=c.c;if(j.i==h){f=(sCb(b.b!=0),BD(b.a.a.c,8));f.b=l7c(OC(GC(m1,1),nie,8,0,[j.i.n,j.n,j.a])).b}k=c.d;if(k.i==h){g=(sCb(b.b!=0),BD(b.c.b.c,8));g.b=l7c(OC(GC(m1,1),nie,8,0,[k.i.n,k.n,k.a])).b}}}}} -function Tec(a,b){var c,d,e,f,g,h,i;Odd(b,'Sort By Input Model '+vNb(a,(Nyc(),ywc)),1);e=0;for(d=new olb(a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);i=e==0?0:e-1;h=BD(Ikb(a.b,i),29);for(g=new olb(c.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(PD(vNb(f,Vxc))!==PD((dcd(),Zbd))&&PD(vNb(f,Vxc))!==PD($bd)){mmb();Okb(f.j,new Tnc(h,Xec(f)));Sdd(b,'Node '+f+' ports: '+f.j)}}mmb();Okb(c.a,new Bnc(h,BD(vNb(a,ywc),339),BD(vNb(a,wwc),378)));Sdd(b,'Layer '+e+': '+c);++e}Qdd(b)} -function U1b(a,b){var c,d,e,f;f=P1b(b);MAb(new YAb(null,(!b.c&&(b.c=new cUd(F2,b,9,9)),new Kub(b.c,16))),new i2b(f));e=BD(vNb(f,(wtc(),Ksc)),21);O1b(b,e);if(e.Hc((Orc(),Hrc))){for(d=new Fyd((!b.c&&(b.c=new cUd(F2,b,9,9)),b.c));d.e!=d.i.gc();){c=BD(Dyd(d),118);Y1b(a,b,f,c)}}BD(hkd(b,(Nyc(),Fxc)),174).gc()!=0&&L1b(b,f);Ccb(DD(vNb(f,Mxc)))&&e.Fc(Mrc);wNb(f,hyc)&&Wyc(new ezc(Edb(ED(vNb(f,hyc)))),f);PD(hkd(b,axc))===PD((hbd(),ebd))?V1b(a,b,f):T1b(a,b,f);return f} -function hic(a,b,c,d){var e,f,g;this.j=new Rkb;this.k=new Rkb;this.b=new Rkb;this.c=new Rkb;this.e=new I6c;this.i=new s7c;this.f=new lEb;this.d=new Rkb;this.g=new Rkb;Ekb(this.b,a);Ekb(this.b,b);this.e.c=$wnd.Math.min(a.a,b.a);this.e.d=$wnd.Math.min(a.b,b.b);this.e.b=$wnd.Math.abs(a.a-b.a);this.e.a=$wnd.Math.abs(a.b-b.b);e=BD(vNb(d,(Nyc(),jxc)),74);if(e){for(g=Jsb(e,0);g.b!=g.d.c;){f=BD(Xsb(g),8);ADb(f.a,a.a)&&Dsb(this.i,f)}}!!c&&Ekb(this.j,c);Ekb(this.k,d)} -function oTb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new gub(new ETb(c));h=KC(sbb,dle,25,a.f.e.c.length,16,1);Glb(h,h.length);c[b.b]=0;for(j=new olb(a.f.e);j.a<j.c.c.length;){i=BD(mlb(j),144);i.b!=b.b&&(c[i.b]=Ohe);zCb(cub(k,i))}while(k.b.c.length!=0){l=BD(dub(k),144);h[l.b]=true;for(f=au(new bu(a.b,l),0);f.c;){e=BD(uu(f),282);m=rTb(e,l);if(h[m.b]){continue}wNb(e,(bTb(),RSb))?(g=Edb(ED(vNb(e,RSb)))):(g=a.c);d=c[l.b]+g;if(d<c[m.b]){c[m.b]=d;eub(k,m);zCb(cub(k,m))}}}} -function xMc(a,b,c){var d,e,f,g,h,i,j,k,l;e=true;for(g=new olb(a.b);g.a<g.c.c.length;){f=BD(mlb(g),29);j=Qje;k=null;for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);l=Edb(b.p[h.p])+Edb(b.d[h.p])-h.d.d;d=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a;if(l>j&&d>j){k=h;j=Edb(b.p[h.p])+Edb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c.n&&Sdd(c,'bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c.n&&Sdd(c,b+' is feasible: '+e);return e} -function XNc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new olb(a);k.a<k.c.c.length;){j=BD(mlb(k),112);j.g=h--;e=Tbb(tAb(PAb(JAb(new YAb(null,new Kub(j.f,16)),new ZNc),new _Nc)).d);f=Tbb(tAb(PAb(JAb(new YAb(null,new Kub(j.k,16)),new bOc),new dOc)).d);g=e;i=f;if(!d){g=Tbb(tAb(PAb(new YAb(null,new Kub(j.f,16)),new fOc)).d);i=Tbb(tAb(PAb(new YAb(null,new Kub(j.k,16)),new hOc)).d)}j.d=g;j.a=e;j.i=i;j.b=f;i==0?(Gsb(c,j,c.c.b,c.c),true):g==0&&(Gsb(b,j,b.c.b,b.c),true)}} -function $8b(a,b,c,d){var e,f,g,h,i,j,k;if(c.d.i==b.i){return}e=new b0b(a);__b(e,(j0b(),g0b));yNb(e,(wtc(),$sc),c);yNb(e,(Nyc(),Vxc),(dcd(),$bd));d.c[d.c.length]=e;g=new H0b;F0b(g,e);G0b(g,(Ucd(),Tcd));h=new H0b;F0b(h,e);G0b(h,zcd);k=c.d;RZb(c,g);f=new UZb;tNb(f,c);yNb(f,jxc,null);QZb(f,h);RZb(f,k);j=new Bib(c.b,0);while(j.b<j.d.gc()){i=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),70));if(PD(vNb(i,Qwc))===PD((qad(),oad))){yNb(i,Dsc,c);uib(j);Ekb(f.b,i)}}a9b(e,g,h)} -function Z8b(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.i==b.i){return}e=new b0b(a);__b(e,(j0b(),g0b));yNb(e,(wtc(),$sc),c);yNb(e,(Nyc(),Vxc),(dcd(),$bd));d.c[d.c.length]=e;g=new H0b;F0b(g,e);G0b(g,(Ucd(),Tcd));h=new H0b;F0b(h,e);G0b(h,zcd);RZb(c,g);f=new UZb;tNb(f,c);yNb(f,jxc,null);QZb(f,h);RZb(f,b);a9b(e,g,h);j=new Bib(c.b,0);while(j.b<j.d.gc()){i=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),70));k=BD(vNb(i,Qwc),272);if(k==(qad(),oad)){wNb(i,Dsc)||yNb(i,Dsc,c);uib(j);Ekb(f.b,i)}}} -function dDc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=new Rkb;r=Gx(d);q=b*a.a;l=0;o=0;f=new Tqb;g=new Tqb;h=new Rkb;s=0;t=0;n=0;p=0;j=0;k=0;while(r.a.gc()!=0){i=hDc(r,e,g);if(i){r.a.Bc(i)!=null;h.c[h.c.length]=i;f.a.zc(i,f);o=a.f[i.p];s+=a.e[i.p]-o*a.b;l=a.c[i.p];t+=l*a.b;k+=o*a.b;p+=a.e[i.p]}if(!i||r.a.gc()==0||s>=q&&a.e[i.p]>o*a.b||t>=c*q){m.c[m.c.length]=h;h=new Rkb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new vgd(n,m)} -function q4c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new $ib(a.c.b)).a.vc().Kc(),new djb(j));c.a.Ob();){b=(h=BD(c.a.Pb(),42),BD(h.dd(),149));e=b.a;e==null&&(e='');d=i4c(a.c,e);!d&&e.length==0&&(d=u4c(a));!!d&&!ze(d.c,b,false)&&Dsb(d.c,b)}for(g=Jsb(a.a,0);g.b!=g.d.c;){f=BD(Xsb(g),478);k=j4c(a.c,f.a);n=j4c(a.c,f.b);!!k&&!!n&&Dsb(k.c,new vgd(n,f.c))}Osb(a.a);for(m=Jsb(a.b,0);m.b!=m.d.c;){l=BD(Xsb(m),478);b=g4c(a.c,l.a);i=j4c(a.c,l.b);!!b&&!!i&&B3c(b,i,l.c)}Osb(a.b)} -function qvd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new fC(a);g=new ird;e=(ko(g.g),ko(g.j),Uhb(g.b),ko(g.d),ko(g.i),Uhb(g.k),Uhb(g.c),Uhb(g.e),n=drd(g,f,null),ard(g,f),n);if(b){j=new fC(b);h=rvd(j);jfd(e,OC(GC(g2,1),Uhe,527,0,[h]))}m=false;l=false;if(c){j=new fC(c);que in j.a&&(m=aC(j,que).ge().a);rue in j.a&&(l=aC(j,rue).ge().a)}k=Vdd(Xdd(new Zdd,m),l);t2c(new w2c,e,k);que in f.a&&cC(f,que,null);if(m||l){i=new eC;nvd(k,i,m,l);cC(f,que,i)}d=new Prd(g);Ghe(new _ud(e),d)} -function pA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new nB;j=OC(GC(WD,1),oje,25,15,[0]);e=-1;f=0;d=0;for(i=0;i<a.b.c.length;++i){k=BD(Ikb(a.b,i),434);if(k.b>0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!wA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!wA(b,j,k,0,g)){return 0}}}else{e=-1;if(bfb(k.c,0)==32){l=j[0];uA(b,j);if(j[0]>l){continue}}else if(ofb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!mB(g,c)){return 0}return j[0]} -function SKd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new CNd;h=new CNd;b=KKd;g=b.a.zc(a,b);if(g==null){for(f=new Fyd(_Kd(a));f.e!=f.i.gc();){e=BD(Dyd(f),26);ytd(i,SKd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));d.e!=d.i.gc();){c=BD(Dyd(d),170);JD(c,99)&&wtd(h,BD(c,18))}vud(h);a.r=new UNd(a,(BD(qud(ZKd((NFd(),MFd).o),6),18),h.i),h.g);ytd(i,a.r);vud(i);a.f=new nNd((BD(qud(ZKd(MFd.o),5),18),i.i),i.g);$Kd(a).b&=-3}return a.f} -function rMb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=KC(WD,oje,25,g,15,1);e=KC(WD,oje,25,g,15,1);c=a.p;b=KC(WD,oje,25,c,15,1);f=KC(WD,oje,25,c,15,1);for(j=0;j<g;j++){l=0;while(l<c&&!YMb(a,j,l)){++l}d[j]=l}for(k=0;k<g;k++){l=c-1;while(l>=0&&!YMb(a,k,l)){--l}e[k]=l}for(n=0;n<c;n++){h=0;while(h<g&&!YMb(a,h,n)){++h}b[n]=h}for(o=0;o<c;o++){h=g-1;while(h>=0&&!YMb(a,h,o)){--h}f[o]=h}for(i=0;i<g;i++){for(m=0;m<c;m++){i<f[m]&&i>b[m]&&m<e[i]&&m>d[i]&&aNb(a,i,m,false,true)}}} -function lRb(a){var b,c,d,e,f,g,h,i;c=Ccb(DD(vNb(a,(wSb(),cSb))));f=a.a.c.d;h=a.a.d.d;if(c){g=Y6c(c7c(new f7c(h.a,h.b),f),0.5);i=Y6c(R6c(a.e),0.5);b=c7c(P6c(new f7c(f.a,f.b),g),i);a7c(a.d,b)}else{e=Edb(ED(vNb(a.a,tSb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} -function Qge(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=KC(TD,$ie,25,f,15,1);ACb(0,f,a.length);ACb(0,f,i.length);ffb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e<f;e++){d=i[e];lde();if(d<=32&&(kde[d]&2)!=0){if(h){!c&&(c=new Jfb(a));Gfb(c,e-g++)}else{h=b;if(d!=32){!c&&(c=new Jfb(a));kcb(c,e-g,e-g+1,String.fromCharCode(32))}}}else{h=false}}if(h){if(!c){return a.substr(0,f-1)}else{f=c.a.length;return f>0?qfb(c.a,0,f-1):''}}else{return !c?a:c.a}} -function DPb(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Yle),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new GPb)));p4c(a,Yle,Zle,Ksd(BPb));p4c(a,Yle,$le,Ksd(vPb));p4c(a,Yle,_le,Ksd(qPb));p4c(a,Yle,ame,Ksd(wPb));p4c(a,Yle,Zke,Ksd(zPb));p4c(a,Yle,$ke,Ksd(yPb));p4c(a,Yle,Yke,Ksd(APb));p4c(a,Yle,_ke,Ksd(xPb));p4c(a,Yle,Tle,Ksd(sPb));p4c(a,Yle,Ule,Ksd(rPb));p4c(a,Yle,Vle,Ksd(tPb));p4c(a,Yle,Wle,Ksd(uPb))} -function Zbc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new b0b(a);__b(f,(j0b(),i0b));yNb(f,(Nyc(),Vxc),(dcd(),$bd));e=0;if(b){g=new H0b;yNb(g,(wtc(),$sc),b);yNb(f,$sc,b.i);G0b(g,(Ucd(),Tcd));F0b(g,f);m=k_b(b.e);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];RZb(i,g)}yNb(b,gtc,f);++e}if(c){h=new H0b;yNb(f,(wtc(),$sc),c.i);yNb(h,$sc,c);G0b(h,(Ucd(),zcd));F0b(h,f);m=k_b(c.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];QZb(i,h)}yNb(c,gtc,f);++e}yNb(f,(wtc(),ysc),meb(e));d.c[d.c.length]=f;return f} -function Smd(){Smd=ccb;Qmd=OC(GC(TD,1),$ie,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);Rmd=new RegExp('[ \t\n\r\f]+');try{Pmd=OC(GC(c6,1),Uhe,2015,0,[new EQd((GA(),IA("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",LA((KA(),KA(),JA))))),new EQd(IA("yyyy-MM-dd'T'HH:mm:ss'.'SSS",LA((null,JA)))),new EQd(IA("yyyy-MM-dd'T'HH:mm:ss",LA((null,JA)))),new EQd(IA("yyyy-MM-dd'T'HH:mm",LA((null,JA)))),new EQd(IA('yyyy-MM-dd',LA((null,JA))))])}catch(a){a=ubb(a);if(!JD(a,78))throw vbb(a)}} -function qgb(a){var b,c,d,e;d=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=pgb(a)<0?1:0;c=a.e;e=(d.length+1+$wnd.Math.abs(QD(a.e)),new Vfb);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>egb.length;c-=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(c));Qfb(e,d.substr(b))}else{c=b-c;Qfb(e,qfb(d,b,QD(c)));e.a+='.';Qfb(e,pfb(d,QD(c)))}}else{Qfb(e,d.substr(b));for(;c<-egb.length;c+=egb.length){Rfb(e,egb)}Sfb(e,egb,QD(-c))}return e.a} -function v6c(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=c7c(new f7c(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=P6c(new f7c(c.a,c.b),Y6c(new f7c(d.a,d.b),0.5));f=S6c(a,e);g=S6c(P6c(new f7c(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f<g&&f<=h){return new f7c(a.a,a.b)}if(g<=h){return P6c(new f7c(a.a,a.b),b)}return null}else{return null}}else{return l>=0&&l<=1&&m>=0&&m<=1?P6c(new f7c(a.a,a.b),Y6c(new f7c(b.a,b.b),l)):null}} -function OTb(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k==(j0b(),e0b)){e=BD(vNb(g,Hsc),61);e==(Ucd(),zcd)?(g.n.a+=c.a-b.a):e==Rcd&&(g.n.b+=c.b-b.b)}}}f=a.d;a.f.a=c.a-f.b-f.c;a.f.b=c.b-f.d-f.a} -function H5b(a,b,c){var d,e,f,g,h;d=BD(vNb(a,(Nyc(),zwc)),21);c.a>b.a&&(d.Hc((i8c(),c8c))?(a.c.a+=(c.a-b.a)/2):d.Hc(e8c)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((i8c(),g8c))?(a.c.b+=(c.b-b.b)/2):d.Hc(f8c)&&(a.c.b+=c.b-b.b));if(BD(vNb(a,(wtc(),Ksc)),21).Hc((Orc(),Hrc))&&(c.a>b.a||c.b>b.b)){for(g=new olb(a.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k==(j0b(),e0b)){e=BD(vNb(f,Hsc),61);e==(Ucd(),zcd)?(f.n.a+=c.a-b.a):e==Rcd&&(f.n.b+=c.b-b.b)}}}h=a.d;a.f.a=c.a-h.b-h.c;a.f.b=c.b-h.d-h.a} -function kMc(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=DMc(a);for(k=(h=(new Pib(b)).a.vc().Kc(),new Vib(h));k.a.Ob();){j=(e=BD(k.a.Pb(),42),BD(e.cd(),10));l=0;m=0;l=j.d.d;m=j.o.b+j.d.a;a.d[j.p]=0;c=j;while((f=a.a[c.p])!=j){d=FMc(c,f);i=0;a.c==(YLc(),WLc)?(i=d.d.n.b+d.d.a.b-d.c.n.b-d.c.a.b):(i=d.c.n.b+d.c.a.b-d.d.n.b-d.d.a.b);g=Edb(a.d[c.p])+i;a.d[f.p]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.o.b+f.d.a);c=f}c=j;do{a.d[c.p]=Edb(a.d[c.p])+l;c=a.a[c.p]}while(c!=j);a.b[j.p]=l+m}} -function LOb(a){var b,c,d,e,f,g,h,i,j,k,l,m;a.b=false;l=Pje;i=Qje;m=Pje;j=Qje;for(d=a.e.a.ec().Kc();d.Ob();){c=BD(d.Pb(),266);e=c.a;l=$wnd.Math.min(l,e.c);i=$wnd.Math.max(i,e.c+e.b);m=$wnd.Math.min(m,e.d);j=$wnd.Math.max(j,e.d+e.a);for(g=new olb(c.c);g.a<g.c.c.length;){f=BD(mlb(g),395);b=f.a;if(b.a){k=e.d+f.b.b;h=k+f.c;m=$wnd.Math.min(m,k);j=$wnd.Math.max(j,h)}else{k=e.c+f.b.a;h=k+f.c;l=$wnd.Math.min(l,k);i=$wnd.Math.max(i,h)}}}a.a=new f7c(i-l,j-m);a.c=new f7c(l+a.d.a,m+a.d.b)} -function xZc(a,b,c){var d,e,f,g,h,i,j,k,l;l=new Rkb;k=new x$c(0,c);f=0;s$c(k,new PZc(0,0,k,c));e=0;for(j=new Fyd(a);j.e!=j.i.gc();){i=BD(Dyd(j),33);d=BD(Ikb(k.a,k.a.c.length-1),187);h=e+i.g+(BD(Ikb(k.a,0),187).b.c.length==0?0:c);if(h>b){e=0;f+=k.b+c;l.c[l.c.length]=k;k=new x$c(f,c);d=new PZc(0,k.f,k,c);s$c(k,d);e=0}if(d.b.c.length==0||i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f){EZc(d,i)}else{g=new PZc(d.s+d.r+c,k.f,k,c);s$c(k,g);EZc(g,i)}e=i.i+i.g}l.c[l.c.length]=k;return l} -function OKd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new GNd(a);b=new KNd;c=KKd;h=c.a.zc(a,c);if(h==null){for(g=new Fyd(_Kd(a));g.e!=g.i.gc();){f=BD(Dyd(g),26);ytd(i,OKd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new cUd(t5,a,21,17)),new Fyd(a.s));e.e!=e.i.gc();){d=BD(Dyd(e),170);JD(d,322)&&wtd(b,BD(d,34))}vud(b);a.k=new PNd(a,(BD(qud(ZKd((NFd(),MFd).o),7),18),b.i),b.g);ytd(i,a.k);vud(i);a.a=new nNd((BD(qud(ZKd(MFd.o),4),18),i.i),i.g);$Kd(a).b&=-2}return a.a} -function vZc(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=false;i=ZZc(c.q,b.f+b.b-c.q.f);m=e-(c.q.e+i-g);if(m<d.g){return false}j=f==a.c.length-1&&m>=(tCb(f,a.c.length),BD(a.c[f],200)).e;k=(h=MZc(d,m,false),h.a);if(k>b.b&&!j){return false}if(j||k<=b.b){if(j&&k>b.b){c.d=k;KZc(c,JZc(c,k))}else{$Zc(c.q,i);c.c=true}KZc(d,e-(c.s+c.r));OZc(d,c.q.e+c.q.d,b.f);s$c(b,d);if(a.c.length>f){v$c((tCb(f,a.c.length),BD(a.c[f],200)),d);(tCb(f,a.c.length),BD(a.c[f],200)).a.c.length==0&&Kkb(a,f)}l=true}return l} -function C2d(a,b,c,d){var e,f,g,h,i,j,k;k=S6d(a.e.Tg(),b);e=0;f=BD(a.g,119);i=null;Q6d();if(BD(b,66).Oj()){for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(pb(g,c)){i=g;break}++e}}}else if(c!=null){for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(pb(c,g.dd())){i=g;break}++e}}}else{for(h=0;h<a.i;++h){g=f[h];if(k.rl(g.ak())){if(g.dd()==null){i=g;break}++e}}}if(i){if(oid(a.e)){j=b.$j()?new O7d(a.e,4,b,c,null,e,true):H2d(a,b.Kj()?2:1,b,c,b.zj(),-1,true);d?d.Ei(j):(d=j)}d=B2d(a,i,d)}return d} -function kYc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;o=0;p=0;i=e.c;h=e.b;k=c.f;n=c.g;switch(b.g){case 0:o=d.i+d.g+g;a.c?(p=tYc(o,f,d,g)):(p=d.j);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 1:p=d.j+d.f+g;a.c?(o=sYc(p,f,d,g)):(o=d.i);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 2:o=i+g;p=0;m=i+g+n;j=$wnd.Math.max(h,k);break;case 3:o=0;p=h+g;m=$wnd.Math.max(i,n);j=h+g+k;break;default:throw vbb(new Wdb('IllegalPlacementOption.'));}l=new e$c(a.a,m,j,b,o,p);return l} -function R2b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.d;l=BD(vNb(a,(wtc(),vtc)),15);b=BD(vNb(a,tsc),15);if(!l&&!b){return}f=Edb(ED(pBc(a,(Nyc(),iyc))));g=Edb(ED(pBc(a,jyc)));m=0;if(l){j=0;for(e=l.Kc();e.Ob();){d=BD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);m+=d.o.a}m+=f*(l.gc()-1);h.d+=j+g}c=0;if(b){j=0;for(e=b.Kc();e.Ob();){d=BD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);c+=d.o.a}c+=f*(b.gc()-1);h.a+=j+g}i=$wnd.Math.max(m,c);if(i>a.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} -function rvd(a){var b,c,d,e,f,g,h,i;f=new b2c;Z1c(f,(Y1c(),V1c));for(d=(e=$B(a,KC(ZI,nie,2,0,6,1)),new vib(new amb((new mC(a,e)).b)));d.b<d.d.gc();){c=(sCb(d.b<d.d.gc()),GD(d.d.Xb(d.c=d.b++)));g=k4c(lvd,c);if(g){b=aC(a,c);b.je()?(h=b.je().a):b.ge()?(h=''+b.ge().a):b.he()?(h=''+b.he().a):(h=b.Ib());i=o5c(g,h);if(i!=null){(uqb(g.j,(N5c(),K5c))||uqb(g.j,L5c))&&xNb(_1c(f,E2),g,i);uqb(g.j,I5c)&&xNb(_1c(f,B2),g,i);uqb(g.j,M5c)&&xNb(_1c(f,F2),g,i);uqb(g.j,J5c)&&xNb(_1c(f,D2),g,i)}}}return f} -function J2d(a,b,c,d){var e,f,g,h,i,j;i=S6d(a.e.Tg(),b);f=BD(a.g,119);if(T6d(a.e,b)){e=0;for(h=0;h<a.i;++h){g=f[h];if(i.rl(g.ak())){if(e==c){Q6d();if(BD(b,66).Oj()){return g}else{j=g.dd();j!=null&&d&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(j=b3d(a,b,h,e,j));return j}}++e}}throw vbb(new qcb(gve+c+mue+e))}else{e=0;for(h=0;h<a.i;++h){g=f[h];if(i.rl(g.ak())){Q6d();if(BD(b,66).Oj()){return g}else{j=g.dd();j!=null&&d&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(j=b3d(a,b,h,e,j));return j}}++e}return b.zj()}} -function K2d(a,b,c){var d,e,f,g,h,i,j,k;e=BD(a.g,119);if(T6d(a.e,b)){return Q6d(),BD(b,66).Oj()?new R7d(b,a):new f7d(b,a)}else{j=S6d(a.e.Tg(),b);d=0;for(h=0;h<a.i;++h){f=e[h];g=f.ak();if(j.rl(g)){Q6d();if(BD(b,66).Oj()){return f}else if(g==(m8d(),k8d)||g==h8d){i=new Wfb(fcb(f.dd()));while(++h<a.i){f=e[h];g=f.ak();(g==k8d||g==h8d)&&Qfb(i,fcb(f.dd()))}return j6d(BD(b.Yj(),148),i.a)}else{k=f.dd();k!=null&&c&&JD(b,99)&&(BD(b,18).Bb&Tje)!=0&&(k=b3d(a,b,h,d,k));return k}}++d}return b.zj()}} -function MZc(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=0;g=a.t;e=0;d=0;i=0;m=0;l=0;if(c){a.n.c=KC(SI,Uhe,1,0,5,1);Ekb(a.n,new VZc(a.s,a.t,a.i))}h=0;for(k=new olb(a.b);k.a<k.c.c.length;){j=BD(mlb(k),33);if(f+j.g+(h>0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Ekb(a.n,new VZc(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&QZc(BD(Ikb(a.n,l),211),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;u$c(a.j)}return new J6c(a.s,a.t,e,d)} -function $fb(a,b,c,d,e){Zfb();var f,g,h,i,j,k,l,m,n;vCb(a,'src');vCb(c,'dest');m=rb(a);i=rb(c);rCb((m.i&4)!=0,'srcType is not an array');rCb((i.i&4)!=0,'destType is not an array');l=m.c;g=i.c;rCb((l.i&1)!=0?l==g:(g.i&1)==0,"Array types don't match");n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw vbb(new pcb)}if((l.i&1)==0&&m!=i){k=CD(a);f=CD(c);if(PD(a)===PD(c)&&b<d){b+=e;for(h=d+e;h-->d;){NC(f,h,k[--b])}}else{for(h=d+e;d<h;){NC(f,d++,k[b++])}}}else e>0&&$Bb(a,b,c,d,e,true)} -function phb(){phb=ccb;nhb=OC(GC(WD,1),oje,25,15,[Rie,1162261467,Iie,1220703125,362797056,1977326743,Iie,387420489,Jje,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,Iie,1291467969,1544804416,1838265625,60466176]);ohb=OC(GC(WD,1),oje,25,15,[-1,-1,31,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])} -function soc(a){var b,c,d,e,f,g,h,i;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);for(g=new olb(Mu(d.a));g.a<g.c.c.length;){f=BD(mlb(g),10);if(ioc(f)){c=BD(vNb(f,(wtc(),usc)),305);if(!c.g&&!!c.d){b=c;i=c.d;while(i){roc(i.i,i.k,false,true);zoc(b.a);zoc(i.i);zoc(i.k);zoc(i.b);RZb(i.c,b.c.d);RZb(b.c,null);$_b(b.a,null);$_b(i.i,null);$_b(i.k,null);$_b(i.b,null);h=new goc(b.i,i.a,b.e,i.j,i.f);h.k=b.k;h.n=b.n;h.b=b.b;h.c=i.c;h.g=b.g;h.d=i.d;yNb(b.i,usc,h);yNb(i.a,usc,h);i=i.d;b=h}}}}}} -function Xfe(a,b){var c,d,e,f,g;g=BD(b,136);Yfe(a);Yfe(g);if(g.b==null)return;a.c=true;if(a.b==null){a.b=KC(WD,oje,25,g.b.length,15,1);$fb(g.b,0,a.b,0,g.b.length);return}f=KC(WD,oje,25,a.b.length+g.b.length,15,1);for(c=0,d=0,e=0;c<a.b.length||d<g.b.length;){if(c>=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]<a.b[c]||g.b[d]===a.b[c]&&g.b[d+1]<a.b[c+1]){f[e++]=g.b[d++];f[e++]=g.b[d++]}else{f[e++]=a.b[c++];f[e++]=a.b[c++]}}a.b=f} -function S6b(a,b){var c,d,e,f,g,h,i,j,k,l;c=Ccb(DD(vNb(a,(wtc(),Usc))));h=Ccb(DD(vNb(b,Usc)));d=BD(vNb(a,Vsc),11);i=BD(vNb(b,Vsc),11);e=BD(vNb(a,Wsc),11);j=BD(vNb(b,Wsc),11);k=!!d&&d==i;l=!!e&&e==j;if(!c&&!h){return new Z6b(BD(mlb(new olb(a.j)),11).p==BD(mlb(new olb(b.j)),11).p,k,l)}f=(!Ccb(DD(vNb(a,Usc)))||Ccb(DD(vNb(a,Tsc))))&&(!Ccb(DD(vNb(b,Usc)))||Ccb(DD(vNb(b,Tsc))));g=(!Ccb(DD(vNb(a,Usc)))||!Ccb(DD(vNb(a,Tsc))))&&(!Ccb(DD(vNb(b,Usc)))||!Ccb(DD(vNb(b,Tsc))));return new Z6b(k&&f||l&&g,k,l)} -function HZc(a){var b,c,d,e,f,g,h,i;d=0;c=0;i=new Psb;b=0;for(h=new olb(a.n);h.a<h.c.c.length;){g=BD(mlb(h),211);if(g.c.c.length==0){Gsb(i,g,i.c.b,i.c)}else{d=$wnd.Math.max(d,g.d);c+=g.a+(b>0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=Pje;a.p=Pje;for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),33);a.p=$wnd.Math.min(a.p,e.g);a.g=$wnd.Math.max(a.g,e.g);a.f=$wnd.Math.max(a.f,e.f);a.o=$wnd.Math.min(a.o,e.f);a.e+=e.f+a.i}a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);u$c(a.j)} -function Sld(a){var b,c,d,e;if((a.Db&64)!=0)return Mkd(a);b=new Wfb(_se);d=a.k;if(!d){!a.n&&(a.n=new cUd(D2,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new cUd(D2,a,1,7)),BD(qud(a.n,0),137)).a;!e||Qfb(Qfb((b.a+=' "',b),e),'"')}}else{Qfb(Qfb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new y5d(z2,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Qfb(b,Eb(new Gb,new Fyd(a.b)));c&&(b.a+=']',b);b.a+=gne;c&&(b.a+='[',b);Qfb(b,Eb(new Gb,new Fyd(a.c)));c&&(b.a+=']',b);return b.a} -function TQd(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.ne();i=null;if(h!=null){b.a+=''+h}else{g=a.a.Dj();if(g!=null){f=hfb(g,wfb(91));if(f!=-1){i=g.substr(f);b.a+=''+qfb(g==null?Xhe:(uCb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new Fyd(a.d);d.e!=d.i.gc();){c=BD(Dyd(d),87);e?(e=false):(b.a+=She,b);TQd(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';TQd(a.b,b)}else{if(a.f){b.a+=' extends ';TQd(a.f,b)}}}} -function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Jkb(v.a,a,0);d=Jkb(w.a,b,0);t=BD(W_b(a,(KAc(),HAc)).Kc().Pb(),11);C=BD(W_b(a,IAc).Kc().Pb(),11);u=BD(W_b(b,HAc).Kc().Pb(),11);D=BD(W_b(b,IAc).Kc().Pb(),11);r=k_b(t.e);A=k_b(C.g);s=k_b(u.e);B=k_b(D.g);Z_b(a,d,w);for(g=s,k=0,o=g.length;k<o;++k){e=g[k];RZb(e,t)}for(h=B,l=0,p=h.length;l<p;++l){e=h[l];QZb(e,C)}Z_b(b,c,v);for(i=r,m=0,q=i.length;m<q;++m){e=i[m];RZb(e,u)}for(f=A,j=0,n=f.length;j<n;++j){e=f[j];QZb(e,D)}} -function $$b(a,b,c,d){var e,f,g,h,i,j,k;f=a_b(d);h=Ccb(DD(vNb(d,(Nyc(),uxc))));if((h||Ccb(DD(vNb(a,exc))))&&!fcd(BD(vNb(a,Vxc),98))){e=Zcd(f);i=i_b(a,c,c==(KAc(),IAc)?e:Wcd(e))}else{i=new H0b;F0b(i,a);if(b){k=i.n;k.a=b.a-a.n.a;k.b=b.b-a.n.b;Q6c(k,0,0,a.o.a,a.o.b);G0b(i,W$b(i,f))}else{e=Zcd(f);G0b(i,c==(KAc(),IAc)?e:Wcd(e))}g=BD(vNb(d,(wtc(),Ksc)),21);j=i.j;switch(f.g){case 2:case 1:(j==(Ucd(),Acd)||j==Rcd)&&g.Fc((Orc(),Lrc));break;case 4:case 3:(j==(Ucd(),zcd)||j==Tcd)&&g.Fc((Orc(),Lrc));}}return i} -function pPc(a,b,c){var d,e,f,g,h,i,j,k;if($wnd.Math.abs(b.s-b.c)<qme||$wnd.Math.abs(c.s-c.c)<qme){return 0}d=oPc(a,b.j,c.e);e=oPc(a,c.j,b.e);f=d==-1||e==-1;g=0;if(f){if(d==-1){new DOc((HOc(),FOc),c,b,1);++g}if(e==-1){new DOc((HOc(),FOc),b,c,1);++g}}else{h=vPc(b.j,c.s,c.c);h+=vPc(c.e,b.s,b.c);i=vPc(c.j,b.s,b.c);i+=vPc(b.e,c.s,c.c);j=d+16*h;k=e+16*i;if(j<k){new DOc((HOc(),GOc),b,c,k-j)}else if(j>k){new DOc((HOc(),GOc),c,b,j-k)}else if(j>0&&k>0){new DOc((HOc(),GOc),b,c,0);new DOc(GOc,c,b,0)}}return g} -function TUb(a,b){var c,d,e,f,g,h;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);e=BD(f.cd(),594);if(b==1){if(e.gf()!=(ead(),dad)&&e.gf()!=_9c){continue}}else{if(e.gf()!=(ead(),aad)&&e.gf()!=bad){continue}}d=BD(BD(f.dd(),46).b,81);h=BD(BD(f.dd(),46).a,189);c=h.c;switch(e.gf().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} -function nJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=KC(WD,oje,25,b.b.c.length,15,1);j=KC(NQ,Kie,267,b.b.c.length,0,1);i=KC(OQ,kne,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m<n;++m){k=l[m];p=0;for(g=new olb(k.e);g.a<g.c.c.length;){e=BD(mlb(g),10);d=G1b(e.c);++h[d];o=Edb(ED(vNb(b,(Nyc(),lyc))));h[d]>0&&!!i[d]&&(o=jBc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new olb(k.e);f.a<f.c.c.length;){e=BD(mlb(f),10);e.n.b=p+e.d.d;c=e.c;c.c.b=p+e.d.d+e.o.b+e.d.a;j[Jkb(c.b.b,c,0)]=e.k;i[Jkb(c.b.b,c,0)]=e}}} -function LXc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(d=new Sr(ur(_sd(b).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(!JD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),186)){i=atd(BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82));if(!Pld(c)){g=b.i+b.g/2;h=b.j+b.f/2;k=i.i+i.g/2;l=i.j+i.f/2;m=new d7c;m.a=k-g;m.b=l-h;f=new f7c(m.a,m.b);l6c(f,b.g,b.f);m.a-=f.a;m.b-=f.b;g=k-m.a;h=l-m.b;j=new f7c(m.a,m.b);l6c(j,i.g,i.f);m.a-=j.a;m.b-=j.b;k=g+m.a;l=h+m.b;e=itd(c,true,true);omd(e,g);pmd(e,h);hmd(e,k);imd(e,l);LXc(a,i)}}}} -function e0c(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Pre),'ELK SPOrE Compaction'),'ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree.'),new h0c)));p4c(a,Pre,Qre,Ksd(c0c));p4c(a,Pre,Rre,Ksd(__c));p4c(a,Pre,Sre,Ksd($_c));p4c(a,Pre,Tre,Ksd(Y_c));p4c(a,Pre,Ure,Ksd(Z_c));p4c(a,Pre,ame,X_c);p4c(a,Pre,wme,8);p4c(a,Pre,Vre,Ksd(b0c));p4c(a,Pre,Wre,Ksd(T_c));p4c(a,Pre,Xre,Ksd(U_c));p4c(a,Pre,Zpe,(Bcb(),false))} -function JLc(a,b){var c,d,e,f,g,h,i,j,k,l;Odd(b,'Simple node placement',1);l=BD(vNb(a,(wtc(),otc)),304);h=0;for(f=new olb(a.b);f.a<f.c.c.length;){d=BD(mlb(f),29);g=d.c;g.b=0;c=null;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);!!c&&(g.b+=hBc(i,c,l.c));g.b+=i.d.d+i.o.b+i.d.a;c=i}h=$wnd.Math.max(h,g.b)}for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);g=d.c;k=(h-g.b)/2;c=null;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);!!c&&(k+=hBc(i,c,l.c));k+=i.d.d;i.n.b=k;k+=i.o.b+i.d.a;c=i}}Qdd(b)} -function s2d(a,b,c,d){var e,f,g,h,i,j,k,l;if(d.gc()==0){return false}i=(Q6d(),BD(b,66).Oj());g=i?d:new zud(d.gc());if(T6d(a.e,b)){if(b.hi()){for(k=d.Kc();k.Ob();){j=k.Pb();if(!F2d(a,b,j,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){f=R6d(b,j);g.Fc(f)}}}else if(!i){for(k=d.Kc();k.Ob();){j=k.Pb();f=R6d(b,j);g.Fc(f)}}}else{l=S6d(a.e.Tg(),b);e=BD(a.g,119);for(h=0;h<a.i;++h){f=e[h];if(l.rl(f.ak())){throw vbb(new Wdb(Hwe))}}if(d.gc()>1){throw vbb(new Wdb(Hwe))}if(!i){f=R6d(b,d.Kc().Pb());g.Fc(f)}}return xtd(a,I2d(a,b,c),g)} -function Pmc(a,b){var c,d,e,f;Jmc(b.b.j);MAb(NAb(new YAb(null,new Kub(b.d,16)),new $mc),new anc);for(f=new olb(b.d);f.a<f.c.c.length;){e=BD(mlb(f),101);switch(e.e.g){case 0:c=BD(Ikb(e.j,0),113).d.j;mjc(e,BD(Btb(RAb(BD(Qc(e.k,c),15).Oc(),Hmc)),113));njc(e,BD(Btb(QAb(BD(Qc(e.k,c),15).Oc(),Hmc)),113));break;case 1:d=Bkc(e);mjc(e,BD(Btb(RAb(BD(Qc(e.k,d[0]),15).Oc(),Hmc)),113));njc(e,BD(Btb(QAb(BD(Qc(e.k,d[1]),15).Oc(),Hmc)),113));break;case 2:Rmc(a,e);break;case 3:Qmc(e);break;case 4:Omc(a,e);}Mmc(e)}a.a=null} -function $Mc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(eMc(),dMc)?Pje:Qje;h=_Mc(a,new ZMc(b,c));if(!h.a&&h.c){Dsb(a.d,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(YLc(),XLc)?i:e;f=a.a.c==XLc?e:i;g=a.a.g[f.i.p];k=Edb(a.a.p[g.p])+Edb(a.a.d[f.i.p])+f.n.b+f.a.b-Edb(a.a.d[j.i.p])-j.n.b-j.a.b}else{j=a.a.c==(YLc(),WLc)?i:e;f=a.a.c==WLc?e:i;k=Edb(a.a.p[a.a.g[f.i.p].p])+Edb(a.a.d[f.i.p])+f.n.b+f.a.b-Edb(a.a.d[j.i.p])-j.n.b-j.a.b}a.a.n[a.a.g[e.i.p].p]=(Bcb(),true);a.a.n[a.a.g[i.i.p].p]=true;return k}return d} -function f3d(a,b,c){var d,e,f,g,h,i,j,k;if(T6d(a.e,b)){i=(Q6d(),BD(b,66).Oj()?new R7d(b,a):new f7d(b,a));D2d(i.c,i.b);b7d(i,BD(c,14))}else{k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];f=e.ak();if(k.rl(f)){if(f==(m8d(),k8d)||f==h8d){j=m3d(a,b,c);h=g;j?Xxd(a,g):++g;while(g<a.i){e=d[g];f=e.ak();f==k8d||f==h8d?Xxd(a,g):++g}j||BD(Gtd(a,h,R6d(b,c)),72)}else m3d(a,b,c)?Xxd(a,g):BD(Gtd(a,g,(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c))),72);return}}m3d(a,b,c)||wtd(a,(Q6d(),BD(b,66).Oj()?BD(c,72):R6d(b,c)))}} -function IMb(a,b,c){var d,e,f,g,h,i,j,k;if(!pb(c,a.b)){a.b=c;f=new LMb;g=BD(GAb(NAb(new YAb(null,new Kub(c.f,16)),f),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);a.e=true;a.f=true;a.c=true;a.d=true;e=g.Hc((RMb(),OMb));d=g.Hc(PMb);e&&!d&&(a.f=false);!e&&d&&(a.d=false);e=g.Hc(NMb);d=g.Hc(QMb);e&&!d&&(a.c=false);!e&&d&&(a.e=false)}k=BD(a.a.Ce(b,c),46);i=BD(k.a,19).a;j=BD(k.b,19).a;h=false;i<0?a.c||(h=true):a.e||(h=true);j<0?a.d||(h=true):a.f||(h=true);return h?IMb(a,k,c):k} -function oKb(a){var b,c,d,e;e=a.o;$Jb();if(a.A.dc()||pb(a.A,ZJb)){b=e.b}else{b=fIb(a.f);if(a.A.Hc((tdd(),qdd))&&!a.B.Hc((Idd(),Edd))){b=$wnd.Math.max(b,fIb(BD(Mpb(a.p,(Ucd(),zcd)),244)));b=$wnd.Math.max(b,fIb(BD(Mpb(a.p,Tcd),244)))}c=aKb(a);!!c&&(b=$wnd.Math.max(b,c.b));if(a.A.Hc(rdd)){if(a.q==(dcd(),_bd)||a.q==$bd){b=$wnd.Math.max(b,_Gb(BD(Mpb(a.b,(Ucd(),zcd)),124)));b=$wnd.Math.max(b,_Gb(BD(Mpb(a.b,Tcd),124)))}}}Ccb(DD(a.e.yf().We((Y9c(),$8c))))?(e.b=$wnd.Math.max(e.b,b)):(e.b=b);d=a.f.i;d.d=0;d.a=b;iIb(a.f)} -function $Ic(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(l=0;l<b.length;l++){for(h=a.Kc();h.Ob();){f=BD(h.Pb(),225);f.Of(l,b)}for(m=0;m<b[l].length;m++){for(i=a.Kc();i.Ob();){f=BD(i.Pb(),225);f.Pf(l,m,b)}p=b[l][m].j;for(n=0;n<p.c.length;n++){for(j=a.Kc();j.Ob();){f=BD(j.Pb(),225);f.Qf(l,m,n,b)}o=(tCb(n,p.c.length),BD(p.c[n],11));c=0;for(e=new b1b(o.b);llb(e.a)||llb(e.b);){d=BD(llb(e.a)?mlb(e.a):mlb(e.b),17);for(k=a.Kc();k.Ob();){f=BD(k.Pb(),225);f.Nf(l,m,n,c++,d,b)}}}}}for(g=a.Kc();g.Ob();){f=BD(g.Pb(),225);f.Mf()}} -function J4b(a,b){var c,d,e,f,g,h,i;a.b=Edb(ED(vNb(b,(Nyc(),myc))));a.c=Edb(ED(vNb(b,pyc)));a.d=BD(vNb(b,Xwc),336);a.a=BD(vNb(b,swc),275);H4b(b);h=BD(GAb(JAb(JAb(LAb(LAb(new YAb(null,new Kub(b.b,16)),new N4b),new P4b),new R4b),new T4b),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);for(e=h.Kc();e.Ob();){c=BD(e.Pb(),17);g=BD(vNb(c,(wtc(),rtc)),15);g.Jc(new V4b(a));yNb(c,rtc,null)}for(d=h.Kc();d.Ob();){c=BD(d.Pb(),17);i=BD(vNb(c,(wtc(),stc)),17);f=BD(vNb(c,ptc),15);B4b(a,f,i);yNb(c,ptc,null)}} -function uZd(a){a.b=null;a.a=null;a.o=null;a.q=null;a.v=null;a.w=null;a.B=null;a.p=null;a.Q=null;a.R=null;a.S=null;a.T=null;a.U=null;a.V=null;a.W=null;a.bb=null;a.eb=null;a.ab=null;a.H=null;a.db=null;a.c=null;a.d=null;a.f=null;a.n=null;a.r=null;a.s=null;a.u=null;a.G=null;a.J=null;a.e=null;a.j=null;a.i=null;a.g=null;a.k=null;a.t=null;a.F=null;a.I=null;a.L=null;a.M=null;a.O=null;a.P=null;a.$=null;a.N=null;a.Z=null;a.cb=null;a.K=null;a.D=null;a.A=null;a.C=null;a._=null;a.fb=null;a.X=null;a.Y=null;a.gb=false;a.hb=false} -function bKc(a){var b,c,d,e,f,g,h,i,j;if(a.k!=(j0b(),h0b)){return false}if(a.j.c.length<=1){return false}f=BD(vNb(a,(Nyc(),Vxc)),98);if(f==(dcd(),$bd)){return false}e=(Izc(),(!a.q?(mmb(),mmb(),kmb):a.q)._b(Cxc)?(d=BD(vNb(a,Cxc),197)):(d=BD(vNb(Q_b(a),Dxc),197)),d);if(e==Gzc){return false}if(!(e==Fzc||e==Ezc)){g=Edb(ED(pBc(a,zyc)));b=BD(vNb(a,yyc),142);!b&&(b=new J_b(g,g,g,g));j=V_b(a,(Ucd(),Tcd));i=b.d+b.a+(j.gc()-1)*g;if(i>a.o.b){return false}c=V_b(a,zcd);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} -function thb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=xbb(a.a[0],Yje);d=xbb(b.a[0],Yje);if(g==i){k=wbb(c,d);o=Tbb(k);n=Tbb(Pbb(k,32));return n==0?new Ugb(g,o):new Vgb(g,2,OC(GC(WD,1),oje,25,15,[o,n]))}return ghb(g<0?Qbb(d,c):Qbb(c,d))}else if(g==i){m=g;l=f>=h?uhb(a.a,f,b.a,h):uhb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:whb(a.a,b.a,f);if(e==0){return Hgb(),Ggb}if(e==1){m=g;l=zhb(a.a,f,b.a,h)}else{m=i;l=zhb(b.a,h,a.a,f)}}j=new Vgb(m,l.length,l);Jgb(j);return j} -function oZb(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Ccb(DD(vNb(b,(Nyc(),vxc))));m=null;f==(KAc(),HAc)&&d.c.i==c?(m=d.c):f==IAc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(Ucd(),Scd);m?(k=m.j):fcd(BD(vNb(c,Vxc),98))&&(k=f==HAc?Tcd:zcd);i=lZb(a,b,c,f,k,d);h=kZb((Q_b(c),d));if(f==HAc){QZb(h,BD(Ikb(i.j,0),11));RZb(h,e)}else{QZb(h,e);RZb(h,BD(Ikb(i.j,0),11))}j=new yZb(d,h,i,BD(vNb(i,(wtc(),$sc)),11),f,!m)}else{Ekb(j.e,d);n=$wnd.Math.max(Edb(ED(vNb(j.d,Zwc))),Edb(ED(vNb(d,Zwc))));yNb(j.d,Zwc,n)}Rc(a.a,d,new BZb(j.d,b,f));return j} -function V1d(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=BD(Phb(a.d,b),138));if(!k){f=a.a.Mh();l=f.i;if(!a.d||Vhb(a.d)!=l){i=new Lqb;!!a.d&&Ld(i,a.d);j=i.f.c+i.g.c;for(h=j;h<l;++h){d=BD(qud(f,h),138);e=o1d(a.e,d).ne();c=BD(e==null?jrb(i.f,null,d):Drb(i.g,e,d),138);!!c&&c!=d&&(e==null?jrb(i.f,null,c):Drb(i.g,e,c))}if(i.f.c+i.g.c!=l){for(g=0;g<j;++g){d=BD(qud(f,g),138);e=o1d(a.e,d).ne();c=BD(e==null?jrb(i.f,null,d):Drb(i.g,e,d),138);!!c&&c!=d&&(e==null?jrb(i.f,null,c):Drb(i.g,e,c))}}a.d=i}k=BD(Phb(a.d,b),138)}return k} -function lZb(a,b,c,d,e,f){var g,h,i,j,k,l;g=null;j=d==(KAc(),HAc)?f.c:f.d;i=a_b(b);if(j.i==c){g=BD(Ohb(a.b,j),10);if(!g){g=Z$b(j,BD(vNb(c,(Nyc(),Vxc)),98),e,hZb(j),null,j.n,j.o,i,b);yNb(g,(wtc(),$sc),j);Rhb(a.b,j,g)}}else{g=Z$b((k=new zNb,l=Edb(ED(vNb(b,(Nyc(),lyc))))/2,xNb(k,Uxc,l),k),BD(vNb(c,Vxc),98),e,d==HAc?-1:1,null,new d7c,new f7c(0,0),i,b);h=mZb(g,c,d);yNb(g,(wtc(),$sc),h);Rhb(a.b,h,g)}BD(vNb(b,(wtc(),Ksc)),21).Fc((Orc(),Hrc));fcd(BD(vNb(b,(Nyc(),Vxc)),98))?yNb(b,Vxc,(dcd(),acd)):yNb(b,Vxc,(dcd(),bcd));return g} -function vNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(b,'Orthogonal edge routing',1);j=Edb(ED(vNb(a,(Nyc(),wyc))));c=Edb(ED(vNb(a,myc)));d=Edb(ED(vNb(a,pyc)));m=new tPc(0,c);q=0;g=new Bib(a.b,0);h=null;k=null;i=null;l=null;do{k=g.b<g.d.gc()?(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),29)):null;l=!k?null:k.a;if(h){h_b(h,q);q+=h.c.a}p=!h?q:q+d;o=sPc(m,a,i,l,p);e=!h||Kq(i,(FNc(),DNc));f=!k||Kq(l,(FNc(),DNc));if(o>0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n<j&&!e&&!f&&(n=j);q+=n}else !e&&!f&&(q+=j);h=k;i=l}while(k);a.f.a=q;Qdd(b)} -function IEd(){IEd=ccb;var a;HEd=new mFd;BEd=KC(ZI,nie,2,0,6,1);uEd=Mbb(ZEd(33,58),ZEd(1,26));vEd=Mbb(ZEd(97,122),ZEd(65,90));wEd=ZEd(48,57);sEd=Mbb(uEd,0);tEd=Mbb(vEd,wEd);xEd=Mbb(Mbb(0,ZEd(1,6)),ZEd(33,38));yEd=Mbb(Mbb(wEd,ZEd(65,70)),ZEd(97,102));EEd=Mbb(sEd,XEd("-_.!~*'()"));FEd=Mbb(tEd,$Ed("-_.!~*'()"));XEd(lve);$Ed(lve);Mbb(EEd,XEd(';:@&=+$,'));Mbb(FEd,$Ed(';:@&=+$,'));zEd=XEd(':/?#');AEd=$Ed(':/?#');CEd=XEd('/?#');DEd=$Ed('/?#');a=new Tqb;a.a.zc('jar',a);a.a.zc('zip',a);a.a.zc('archive',a);GEd=(mmb(),new zob(a))} -function yUc(a,b){var c,d,e,f,g,h,i,j,k,l;yNb(b,(mTc(),cTc),0);i=BD(vNb(b,aTc),86);if(b.d.b==0){if(i){k=Edb(ED(vNb(i,fTc)))+a.a+zUc(i,b);yNb(b,fTc,k)}else{yNb(b,fTc,0)}}else{for(d=(f=Jsb((new ZRc(b)).a.d,0),new aSc(f));Wsb(d.a);){c=BD(Xsb(d.a),188).c;yUc(a,c)}h=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);l=BD(or((e=Jsb((new ZRc(b)).a.d,0),new aSc(e))),86);j=(Edb(ED(vNb(l,fTc)))+Edb(ED(vNb(h,fTc))))/2;if(i){k=Edb(ED(vNb(i,fTc)))+a.a+zUc(i,b);yNb(b,fTc,k);yNb(b,cTc,Edb(ED(vNb(b,fTc)))-j);xUc(a,b)}else{yNb(b,fTc,j)}}} -function Dbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=0;o=0;i=tlb(a.f,a.f.length);f=a.d;g=a.i;d=a.a;e=a.b;do{n=0;for(k=new olb(a.p);k.a<k.c.c.length;){j=BD(mlb(k),10);m=Cbc(a,j);c=true;(a.q==(kAc(),dAc)||a.q==gAc)&&(c=Ccb(DD(m.b)));if(BD(m.a,19).a<0&&c){++n;i=tlb(a.f,a.f.length);a.d=a.d+BD(m.a,19).a;o+=f-a.d;f=a.d+BD(m.a,19).a;g=a.i;d=Mu(a.a);e=Mu(a.b)}else{a.f=tlb(i,i.length);a.d=f;a.a=(Qb(d),d?new Tkb(d):Nu(new olb(d)));a.b=(Qb(e),e?new Tkb(e):Nu(new olb(e)));a.i=g}}++h;l=n!=0&&Ccb(DD(b.Kb(new vgd(meb(o),meb(h)))))}while(l)} -function lYc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;g=a.f;m=b.f;h=g==(k$c(),f$c)||g==h$c;n=m==f$c||m==h$c;i=g==g$c||g==i$c;o=m==g$c||m==i$c;j=g==g$c||g==f$c;p=m==g$c||m==f$c;if(h&&n){return a.f==h$c?a:b}else if(i&&o){return a.f==i$c?a:b}else if(j&&p){if(g==g$c){l=a;k=b}else{l=b;k=a}f=(q=c.j+c.f,r=l.e+d.f,s=$wnd.Math.max(q,r),t=s-$wnd.Math.min(c.j,l.e),u=l.d+d.g-c.i,u*t);e=(v=c.i+c.g,w=k.d+d.g,A=$wnd.Math.max(v,w),B=A-$wnd.Math.min(c.i,k.d),C=k.e+d.f-c.j,B*C);return f<=e?a.f==g$c?a:b:a.f==f$c?a:b}return a} -function wGb(a){var b,c,d,e,f,g,h,i,j,k,l;k=a.e.a.c.length;for(g=new olb(a.e.a);g.a<g.c.c.length;){f=BD(mlb(g),121);f.j=false}a.i=KC(WD,oje,25,k,15,1);a.g=KC(WD,oje,25,k,15,1);a.n=new Rkb;e=0;l=new Rkb;for(i=new olb(a.e.a);i.a<i.c.c.length;){h=BD(mlb(i),121);h.d=e++;h.b.a.c.length==0&&Ekb(a.n,h);Gkb(l,h.g)}b=0;for(d=new olb(l);d.a<d.c.c.length;){c=BD(mlb(d),213);c.c=b++;c.f=false}j=l.c.length;if(a.b==null||a.b.length<j){a.b=KC(UD,Vje,25,j,15,1);a.c=KC(sbb,dle,25,j,16,1)}else{Blb(a.c)}a.d=l;a.p=new Asb(Cv(a.d.c.length));a.j=1} -function sTb(a,b){var c,d,e,f,g,h,i,j,k;if(b.e.c.length<=1){return}a.f=b;a.d=BD(vNb(a.f,(bTb(),SSb)),379);a.g=BD(vNb(a.f,WSb),19).a;a.e=Edb(ED(vNb(a.f,TSb)));a.c=Edb(ED(vNb(a.f,RSb)));it(a.b);for(e=new olb(a.f.c);e.a<e.c.c.length;){d=BD(mlb(e),282);ht(a.b,d.c,d,null);ht(a.b,d.d,d,null)}h=a.f.e.c.length;a.a=IC(UD,[nie,Vje],[104,25],15,[h,h],2);for(j=new olb(a.f.e);j.a<j.c.c.length;){i=BD(mlb(j),144);oTb(a,i,a.a[i.b])}a.i=IC(UD,[nie,Vje],[104,25],15,[h,h],2);for(f=0;f<h;++f){for(g=0;g<h;++g){c=a.a[f][g];k=1/(c*c);a.i[f][g]=k}}} -function Vfe(a){var b,c,d,e;if(a.b==null||a.b.length<=2)return;if(a.a)return;b=0;e=0;while(e<a.b.length){if(b!=e){a.b[b]=a.b[e++];a.b[b+1]=a.b[e++]}else e+=2;c=a.b[b+1];while(e<a.b.length){if(c+1<a.b[e])break;if(c+1==a.b[e]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else if(c>=a.b[e+1]){e+=2}else if(c<a.b[e+1]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else{throw vbb(new hz('Token#compactRanges(): Internel Error: ['+a.b[b]+','+a.b[b+1]+'] ['+a.b[e]+','+a.b[e+1]+']'))}}b+=2}if(b!=a.b.length){d=KC(WD,oje,25,b,15,1);$fb(a.b,0,d,0,b);a.b=d}a.a=true} -function pZb(a,b){var c,d,e,f,g,h,i;for(g=Ec(a.a).Kc();g.Ob();){f=BD(g.Pb(),17);if(f.b.c.length>0){d=new Tkb(BD(Qc(a.a,f),21));mmb();Okb(d,new EZb(b));e=new Bib(f.b,0);while(e.b<e.d.gc()){c=(sCb(e.b<e.d.gc()),BD(e.d.Xb(e.c=e.b++),70));h=-1;switch(BD(vNb(c,(Nyc(),Qwc)),272).g){case 1:h=d.c.length-1;break;case 0:h=nZb(d);break;case 2:h=0;}if(h!=-1){i=(tCb(h,d.c.length),BD(d.c[h],243));Ekb(i.b.b,c);BD(vNb(Q_b(i.b.c.i),(wtc(),Ksc)),21).Fc((Orc(),Grc));BD(vNb(Q_b(i.b.c.i),Ksc),21).Fc(Erc);uib(e);yNb(c,btc,f)}}}QZb(f,null);RZb(f,null)}} -function FLb(a,b){var c,d,e,f;c=new KLb;d=BD(GAb(NAb(new YAb(null,new Kub(a.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Eyb),Dyb]))),21);e=d.gc();e=e==2?1:0;e==1&&Bbb(Hbb(BD(GAb(JAb(d.Lc(),new MLb),Xyb(Aeb(0),new Czb)),162).a,2),0)&&(e=0);d=BD(GAb(NAb(new YAb(null,new Kub(b.f,16)),c),Ayb(new hzb,new jzb,new Gzb,new Izb,OC(GC(xL,1),Kie,132,0,[Eyb,Dyb]))),21);f=d.gc();f=f==2?1:0;f==1&&Bbb(Hbb(BD(GAb(JAb(d.Lc(),new OLb),Xyb(Aeb(0),new Czb)),162).a,2),0)&&(f=0);if(e<f){return -1}if(e==f){return 0}return 1} -function h6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;j=new Rkb;if(!wNb(a,(wtc(),Fsc))){return j}for(d=BD(vNb(a,Fsc),15).Kc();d.Ob();){b=BD(d.Pb(),10);g6b(b,a);j.c[j.c.length]=b}for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);for(h=new olb(e.a);h.a<h.c.c.length;){g=BD(mlb(h),10);if(g.k!=(j0b(),e0b)){continue}i=BD(vNb(g,Gsc),10);!!i&&(k=new H0b,F0b(k,g),l=BD(vNb(g,Hsc),61),G0b(k,l),m=BD(Ikb(i.j,0),11),n=new UZb,QZb(n,k),RZb(n,m),undefined)}}for(c=new olb(j);c.a<c.c.c.length;){b=BD(mlb(c),10);$_b(b,BD(Ikb(a.b,a.b.c.length-1),29))}return j} -function M1b(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=mpd(a);f=Ccb(DD(hkd(b,(Nyc(),fxc))));k=0;e=0;for(j=new Fyd((!a.e&&(a.e=new y5d(B2,a,7,4)),a.e));j.e!=j.i.gc();){i=BD(Dyd(j),79);h=Qld(i);g=h&&f&&Ccb(DD(hkd(i,gxc)));m=atd(BD(qud((!i.c&&(i.c=new y5d(z2,i,5,8)),i.c),0),82));h&&g?++e:h&&!g?++k:Xod(m)==b||m==b?++e:++k}for(d=new Fyd((!a.d&&(a.d=new y5d(B2,a,8,5)),a.d));d.e!=d.i.gc();){c=BD(Dyd(d),79);h=Qld(c);g=h&&f&&Ccb(DD(hkd(c,gxc)));l=atd(BD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),82));h&&g?++k:h&&!g?++e:Xod(l)==b||l==b?++k:++e}return k-e} -function ubc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;Odd(b,'Edge splitting',1);if(a.b.c.length<=2){Qdd(b);return}f=new Bib(a.b,0);g=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),29));while(f.b<f.d.gc()){e=g;g=(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),29));for(i=new olb(e.a);i.a<i.c.c.length;){h=BD(mlb(i),10);for(k=new olb(h.j);k.a<k.c.c.length;){j=BD(mlb(k),11);for(d=new olb(j.g);d.a<d.c.c.length;){c=BD(mlb(d),17);m=c.d;l=m.i.c;l!=e&&l!=g&&zbc(c,(n=new b0b(a),__b(n,(j0b(),g0b)),yNb(n,(wtc(),$sc),c),yNb(n,(Nyc(),Vxc),(dcd(),$bd)),$_b(n,g),n))}}}}Qdd(b)} -function MTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=b.p!=null&&!b.b;h||Odd(b,kme,1);c=BD(vNb(a,(wtc(),itc)),15);g=1/c.gc();if(b.n){Sdd(b,'ELK Layered uses the following '+c.gc()+' modules:');n=0;for(m=c.Kc();m.Ob();){k=BD(m.Pb(),51);d=(n<10?'0':'')+n++;Sdd(b,' Slot '+d+': '+hdb(rb(k)))}}o=0;for(l=c.Kc();l.Ob();){k=BD(l.Pb(),51);k.pf(a,Udd(b,g));++o}for(f=new olb(a.b);f.a<f.c.c.length;){e=BD(mlb(f),29);Gkb(a.a,e.a);e.a.c=KC(SI,Uhe,1,0,5,1)}for(j=new olb(a.a);j.a<j.c.c.length;){i=BD(mlb(j),10);$_b(i,null)}a.b.c=KC(SI,Uhe,1,0,5,1);h||Qdd(b)} -function kJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;d=Edb(ED(vNb(b,(Nyc(),Bxc))));v=BD(vNb(b,Ayc),19).a;m=4;e=3;w=20/v;n=false;i=0;g=Ohe;do{f=i!=1;l=i!=0;A=0;for(q=a.a,s=0,u=q.length;s<u;++s){o=q[s];o.f=null;lJc(a,o,f,l,d);A+=$wnd.Math.abs(o.a)}do{h=pJc(a,b)}while(h);for(p=a.a,r=0,t=p.length;r<t;++r){o=p[r];c=xJc(o).a;if(c!=0){for(k=new olb(o.e);k.a<k.c.c.length;){j=BD(mlb(k),10);j.n.b+=c}}}if(i==0||i==1){--m;if(m<=0&&(A<g||-m>v)){i=2;g=Ohe}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A<w;g=A;n&&--e}}while(!(n&&e<=0))} -function UCb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=new Lqb;for(f=a.a.ec().Kc();f.Ob();){d=BD(f.Pb(),168);Rhb(o,d,c.Je(d))}g=(Qb(a),a?new Tkb(a):Nu(a.a.ec().Kc()));Okb(g,new WCb(o));h=Gx(g);i=new hDb(b);n=new Lqb;jrb(n.f,b,i);while(h.a.gc()!=0){j=null;k=null;l=null;for(e=h.a.ec().Kc();e.Ob();){d=BD(e.Pb(),168);if(Edb(ED(Wd(irb(o.f,d))))<=Pje){if(Mhb(n,d.a)&&!Mhb(n,d.b)){k=d.b;l=d.a;j=d;break}if(Mhb(n,d.b)){if(!Mhb(n,d.a)){k=d.a;l=d.b;j=d;break}}}}if(!j){break}m=new hDb(k);Ekb(BD(Wd(irb(n.f,l)),221).a,m);jrb(n.f,k,m);h.a.Bc(j)!=null}return i} -function UBc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;Odd(c,'Depth-first cycle removal',1);l=b.a;k=l.c.length;a.c=new Rkb;a.d=KC(sbb,dle,25,k,16,1);a.a=KC(sbb,dle,25,k,16,1);a.b=new Rkb;g=0;for(j=new olb(l);j.a<j.c.c.length;){i=BD(mlb(j),10);i.p=g;Qq(R_b(i))&&Ekb(a.c,i);++g}for(n=new olb(a.c);n.a<n.c.c.length;){m=BD(mlb(n),10);TBc(a,m)}for(f=0;f<k;f++){if(!a.d[f]){h=(tCb(f,l.c.length),BD(l.c[f],10));TBc(a,h)}}for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true);yNb(b,(wtc(),Asc),(Bcb(),true))}a.c=null;a.d=null;a.a=null;a.b=null;Qdd(c)} -function PSc(a,b){var c,d,e,f,g,h,i;a.a.c=KC(SI,Uhe,1,0,5,1);for(d=Jsb(b.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);if(c.b.b==0){yNb(c,(mTc(),jTc),(Bcb(),true));Ekb(a.a,c)}}switch(a.a.c.length){case 0:e=new XRc(0,b,'DUMMY_ROOT');yNb(e,(mTc(),jTc),(Bcb(),true));yNb(e,YSc,true);Dsb(b.b,e);break;case 1:break;default:f=new XRc(0,b,'SUPER_ROOT');for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),86);i=new QRc(f,g);yNb(i,(mTc(),YSc),(Bcb(),true));Dsb(f.a.a,i);Dsb(f.d,i);Dsb(g.b,i);yNb(g,jTc,false)}yNb(f,(mTc(),jTc),(Bcb(),true));yNb(f,YSc,true);Dsb(b.b,f);}} -function z6c(a,b){i6c();var c,d,e,f,g,h;f=b.c-(a.c+a.b);e=a.c-(b.c+b.b);g=a.d-(b.d+b.a);c=b.d-(a.d+a.a);d=$wnd.Math.max(e,f);h=$wnd.Math.max(g,c);Iy();My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>=0^(null,My(Jqe),($wnd.Math.abs(h)<=Jqe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:Ny(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}My(Jqe);if(($wnd.Math.abs(d)<=Jqe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:Ny(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} -function Kge(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new Wvb);if(a.e==2){Tvb(a.a,b);return}if(b.e==1){for(e=0;e<b.em();e++)Kge(a,b.am(e));return}h=a.a.a.c.length;if(h==0){Tvb(a.a,b);return}g=BD(Uvb(a.a,h-1),117);if(!((g.e==0||g.e==10)&&(b.e==0||b.e==10))){Tvb(a.a,b);return}f=b.e==0?2:b.bm().length;if(g.e==0){c=new Ifb;d=g._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje);g=(++vfe,new Hge(10,null,0));Vvb(a.a,g,h-1)}else{c=(g.bm().length+f,new Ifb);Efb(c,g.bm())}if(b.e==0){d=b._l();d>=Tje?Efb(c,Tee(d)):Afb(c,d&aje)}else{Efb(c,b.bm())}BD(g,521).b=c.a} -function rgb(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=rhb(Cbb(a.f),QD(a.e));return a.g}e=shb((!a.c&&(a.c=fhb(a.f)),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=fhb(a.f)),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new Ufb;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){Tfb(f,c-QD(a.e),String.fromCharCode(46))}else{f.a=qfb(f.a,0,b-1)+'0.'+pfb(f.a,b-1);Tfb(f,b+1,zfb(egb,0,-QD(d)-1))}}else{if(c-b>=1){Tfb(f,b,String.fromCharCode(46));++c}Tfb(f,c,String.fromCharCode(69));d>0&&Tfb(f,++c,String.fromCharCode(43));Tfb(f,++c,''+Ubb(Cbb(d)))}a.g=f.a;return a.g} -function npc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=BD(d.Pb(),19).a;while(h<b.f){if(h==o){m=0;d.Ob()?(o=BD(d.Pb(),19).a):(o=b.f+1)}if(h!=m){q=BD(Ikb(a.b,h),29);n=BD(Ikb(a.b,m),29);p=Mu(q.a);for(l=new olb(p);l.a<l.c.c.length;){k=BD(mlb(l),10);Z_b(k,n.a.c.length,n);if(m==0){g=Mu(R_b(k));for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),17);PZb(e,true);yNb(a,(wtc(),Asc),(Bcb(),true));Noc(a,e,1)}}}}++m;++h}i=new Bib(a.b,0);while(i.b<i.d.gc()){j=(sCb(i.b<i.d.gc()),BD(i.d.Xb(i.c=i.b++),29));j.a.c.length==0&&uib(i)}} -function xmc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;g=b.b;k=g.o;i=g.d;d=Edb(ED(c_b(g,(Nyc(),lyc))));e=Edb(ED(c_b(g,nyc)));j=Edb(ED(c_b(g,xyc)));h=new L_b;v_b(h,i.d,i.c,i.a,i.b);m=tmc(b,d,e,j);for(r=new olb(b.d);r.a<r.c.c.length;){q=BD(mlb(r),101);for(o=q.f.a.ec().Kc();o.Ob();){n=BD(o.Pb(),409);f=n.a;l=rmc(n);c=(s=new s7c,pmc(n,n.c,m,s),omc(n,l,m,s),pmc(n,n.d,m,s),s);c=a.Uf(n,l,c);Osb(f.a);ye(f.a,c);MAb(new YAb(null,new Kub(c,16)),new Bmc(k,h))}p=q.i;if(p){wmc(q,p,m,e);t=new g7c(p.g);ymc(k,h,t);P6c(t,p.j);ymc(k,h,t)}}v_b(i,h.d,h.c,h.a,h.b)} -function rgc(a,b,c){var d,e,f;e=BD(vNb(b,(Nyc(),swc)),275);if(e==(yrc(),wrc)){return}Odd(c,'Horizontal Compaction',1);a.a=b;f=new Ygc;d=new cEb((f.d=b,f.c=BD(vNb(f.d,Swc),218),Pgc(f),Wgc(f),Vgc(f),f.a));aEb(d,a.b);switch(BD(vNb(b,rwc),422).g){case 1:$Db(d,new jfc(a.a));break;default:$Db(d,(ODb(),MDb));}switch(e.g){case 1:TDb(d);break;case 2:TDb(SDb(d,(ead(),bad)));break;case 3:TDb(_Db(SDb(TDb(d),(ead(),bad)),new Bgc));break;case 4:TDb(_Db(SDb(TDb(d),(ead(),bad)),new Dgc(f)));break;case 5:TDb(ZDb(d,pgc));}SDb(d,(ead(),aad));d.e=true;Mgc(f);Qdd(c)} -function mYc(a,b,c,d,e,f,g,h){var i,j,k,l;i=Ou(OC(GC(z_,1),Uhe,220,0,[b,c,d,e]));l=null;switch(a.b.g){case 1:l=Ou(OC(GC(o_,1),Uhe,526,0,[new uYc,new oYc,new qYc]));break;case 0:l=Ou(OC(GC(o_,1),Uhe,526,0,[new qYc,new oYc,new uYc]));break;case 2:l=Ou(OC(GC(o_,1),Uhe,526,0,[new oYc,new uYc,new qYc]));}for(k=new olb(l);k.a<k.c.c.length;){j=BD(mlb(k),526);i.c.length>1&&(i=j.mg(i,a.a,h))}if(i.c.length==1){return BD(Ikb(i,i.c.length-1),220)}if(i.c.length==2){return lYc((tCb(0,i.c.length),BD(i.c[0],220)),(tCb(1,i.c.length),BD(i.c[1],220)),g,f)}return null} -function JNb(a){var b,c,d,e,f,g;Hkb(a.a,new PNb);for(c=new olb(a.a);c.a<c.c.c.length;){b=BD(mlb(c),221);d=c7c(R6c(BD(a.b,65).c),BD(b.b,65).c);if(FNb){g=BD(a.b,65).b;f=BD(b.b,65).b;if($wnd.Math.abs(d.a)>=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.d<g.d+g.a&&$6c(d,$wnd.Math.max(g.c-(f.c+f.b),f.c-(g.c+g.b)))}else{d.a=0;f.c+f.b>g.c&&f.c<g.c+g.b&&$6c(d,$wnd.Math.max(g.d-(f.d+f.a),f.d-(g.d+g.a)))}}else{$6c(d,_Nb(BD(a.b,65),BD(b.b,65)))}e=$wnd.Math.sqrt(d.a*d.a+d.b*d.b);e=LNb(GNb,b,e,d);$6c(d,e);$Nb(BD(b.b,65),d);Hkb(b.a,new RNb(d));BD(GNb.b,65);KNb(GNb,HNb,b)}} -function VJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;a.f=new KFb;j=0;e=0;for(g=new olb(a.e.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p=j++;for(d=new Sr(ur(U_b(h).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),17);c.p=e++}b=bKc(h);for(m=new olb(h.j);m.a<m.c.c.length;){l=BD(mlb(m),11);if(b){o=l.a.b;if(o!=$wnd.Math.floor(o)){k=o-Sbb(Cbb($wnd.Math.round(o)));l.a.b-=k}}n=l.n.b+l.a.b;if(n!=$wnd.Math.floor(n)){k=n-Sbb(Cbb($wnd.Math.round(n)));l.n.b-=k}}}}a.g=j;a.b=e;a.i=KC(xY,Uhe,401,j,0,1);a.c=KC(wY,Uhe,649,e,0,1);a.d.a.$b()} -function Uxd(a){var b,c,d,e,f,g,h,i,j;if(a.ej()){i=a.fj();if(a.i>0){b=new _zd(a.i,a.g);c=a.i;f=c<100?null:new Ixd(c);if(a.ij()){for(d=0;d<a.i;++d){g=a.g[d];f=a.kj(g,f)}}oud(a);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new $yd(b);d.e!=d.i.gc();){f=a.dj(Zyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{oud(a);a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){if(a.i>0){h=a.g;j=a.i;oud(a);f=j<100?null:new Ixd(j);for(d=0;d<j;++d){g=h[d];f=a.dj(g,f)}!!f&&f.Fi()}else{oud(a)}}else{oud(a)}} -function ZQc(a,b,c){var d,e,f,g,h,i,j,k,l,m;TQc(this);c==(FQc(),DQc)?Qqb(this.r,a):Qqb(this.w,a);k=Pje;j=Qje;for(g=b.a.ec().Kc();g.Ob();){e=BD(g.Pb(),46);h=BD(e.a,455);d=BD(e.b,17);i=d.c;i==a&&(i=d.d);h==DQc?Qqb(this.r,i):Qqb(this.w,i);m=(Ucd(),Lcd).Hc(i.j)?Edb(ED(vNb(i,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=(Ucd(),Lcd).Hc(a.j)?Edb(ED(vNb(a,(wtc(),qtc)))):l7c(OC(GC(m1,1),nie,8,0,[a.i.n,a.n,a.a])).b;XQc(this,l,k,j);for(f=b.a.ec().Kc();f.Ob();){e=BD(f.Pb(),46);UQc(this,BD(e.b,17))}this.o=false} -function gD(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c=a.l&8191;d=a.l>>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&Eje;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=Eje;u+=p>>22;p&=Eje;u&=Fje;return TC(m,p,u)} -function o7b(a){var b,c,d,e,f,g,h;h=BD(Ikb(a.j,0),11);if(h.g.c.length!=0&&h.e.c.length!=0){throw vbb(new Zdb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=Pje;for(c=new olb(h.g);c.a<c.c.c.length;){b=BD(mlb(c),17);g=b.d.i;d=BD(vNb(g,(Nyc(),txc)),142);f=$wnd.Math.min(f,g.n.a-d.b)}return new cc(Qb(f))}if(h.e.c.length!=0){e=Qje;for(c=new olb(h.e);c.a<c.c.c.length;){b=BD(mlb(c),17);g=b.c.i;d=BD(vNb(g,(Nyc(),txc)),142);e=$wnd.Math.max(e,g.n.a+g.o.a+d.c)}return new cc(Qb(e))}return wb(),wb(),vb} -function ELd(a,b){var c,d,e,f,g,h,i;if(a.Fk()){if(a.i>4){if(a.wj(b)){if(a.rk()){e=BD(b,49);d=e.Ug();i=d==a.e&&(a.Dk()?e.Og(e.Vg(),a.zk())==a.Ak():-1-e.Vg()==a.aj());if(a.Ek()&&!i&&!d&&!!e.Zg()){for(f=0;f<a.i;++f){c=a.Gk(BD(a.g[f],56));if(PD(c)===PD(b)){return true}}}return i}else if(a.Dk()&&!a.Ck()){g=BD(b,56).ah(zUd(BD(a.ak(),18)));if(PD(g)===PD(a.e)){return true}else if(g==null||!BD(g,56).kh()){return false}}}else{return false}}h=pud(a,b);if(a.Ek()&&!h){for(f=0;f<a.i;++f){e=a.Gk(BD(a.g[f],56));if(PD(e)===PD(b)){return true}}}return h}else{return pud(a,b)}} -function mHc(a,b){var c,d,e,f,g,h,i,j,k,l,m;k=new Rkb;m=new Tqb;g=b.b;for(e=0;e<g.c.length;e++){j=(tCb(e,g.c.length),BD(g.c[e],29)).a;k.c=KC(SI,Uhe,1,0,5,1);for(f=0;f<j.c.length;f++){h=a.a[e][f];h.p=f;h.k==(j0b(),i0b)&&(k.c[k.c.length]=h,true);Nkb(BD(Ikb(b.b,e),29).a,f,h);h.j.c=KC(SI,Uhe,1,0,5,1);Gkb(h.j,BD(BD(Ikb(a.b,e),15).Xb(f),14));ecd(BD(vNb(h,(Nyc(),Vxc)),98))||yNb(h,Vxc,(dcd(),Zbd))}for(d=new olb(k);d.a<d.c.c.length;){c=BD(mlb(d),10);l=kHc(c);m.a.zc(l,m);m.a.zc(c,m)}}for(i=m.a.ec().Kc();i.Ob();){h=BD(i.Pb(),10);mmb();Okb(h.j,(Occ(),Icc));h.i=true;N_b(h)}} -function g6b(a,b){var c,d,e,f,g,h,i,j,k,l;k=BD(vNb(a,(wtc(),Hsc)),61);d=BD(Ikb(a.j,0),11);k==(Ucd(),Acd)?G0b(d,Rcd):k==Rcd&&G0b(d,Acd);if(BD(vNb(b,(Nyc(),Fxc)),174).Hc((tdd(),sdd))){i=Edb(ED(vNb(a,tyc)));j=Edb(ED(vNb(a,uyc)));g=Edb(ED(vNb(a,ryc)));h=BD(vNb(b,Yxc),21);if(h.Hc((rcd(),ncd))){c=j;l=a.o.a/2-d.n.a;for(f=new olb(d.f);f.a<f.c.c.length;){e=BD(mlb(f),70);e.n.b=c;e.n.a=l-e.o.a/2;c+=e.o.b+g}}else if(h.Hc(pcd)){for(f=new olb(d.f);f.a<f.c.c.length;){e=BD(mlb(f),70);e.n.a=i+a.o.a-d.n.a}}WGb(new YGb((a$b(),new l$b(b,false,false,new T$b))),new x$b(null,a,false))}} -function Ugc(a,b){var c,d,e,f,g,h,i,j,k;if(b.c.length==0){return}mmb();Mlb(b.c,b.c.length,null);e=new olb(b);d=BD(mlb(e),145);while(e.a<e.c.c.length){c=BD(mlb(e),145);if(ADb(d.e.c,c.e.c)&&!(DDb(B6c(d.e).b,c.e.d)||DDb(B6c(c.e).b,d.e.d))){d=(Gkb(d.k,c.k),Gkb(d.b,c.b),Gkb(d.c,c.c),ye(d.i,c.i),Gkb(d.d,c.d),Gkb(d.j,c.j),f=$wnd.Math.min(d.e.c,c.e.c),g=$wnd.Math.min(d.e.d,c.e.d),h=$wnd.Math.max(d.e.c+d.e.b,c.e.c+c.e.b),i=h-f,j=$wnd.Math.max(d.e.d+d.e.a,c.e.d+c.e.a),k=j-g,G6c(d.e,f,g,i,k),hEb(d.f,c.f),!d.a&&(d.a=c.a),Gkb(d.g,c.g),Ekb(d.g,c),d)}else{Xgc(a,d);d=c}}Xgc(a,d)} -function e_b(a,b,c,d){var e,f,g,h,i,j;h=a.j;if(h==(Ucd(),Scd)&&b!=(dcd(),bcd)&&b!=(dcd(),ccd)){h=W$b(a,c);G0b(a,h);!(!a.q?(mmb(),mmb(),kmb):a.q)._b((Nyc(),Uxc))&&h!=Scd&&(a.n.a!=0||a.n.b!=0)&&yNb(a,Uxc,V$b(a,h))}if(b==(dcd(),_bd)){j=0;switch(h.g){case 1:case 3:f=a.i.o.a;f>0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}yNb(a,(wtc(),htc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=bcd&&b!=ccd&&h!=Scd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} -function vwd(a){var b,c,d,e,f,g,h,i,j,k;if(a.ej()){k=a.Vi();i=a.fj();if(k>0){b=new Aud(a.Gi());c=k;f=c<100?null:new Ixd(c);Cvd(a,c,b.g);e=c==1?a.Zi(4,qud(b,0),null,0,i):a.Zi(6,b,null,-1,i);if(a.bj()){for(d=new Fyd(b);d.e!=d.i.gc();){f=a.dj(Dyd(d),f)}if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}else{if(!f){a.$i(e)}else{f.Ei(e);f.Fi()}}}else{Cvd(a,a.Vi(),a.Wi());a.$i(a.Zi(6,(mmb(),jmb),null,-1,i))}}else if(a.bj()){k=a.Vi();if(k>0){h=a.Wi();j=k;Cvd(a,k,h);f=j<100?null:new Ixd(j);for(d=0;d<j;++d){g=h[d];f=a.dj(g,f)}!!f&&f.Fi()}else{Cvd(a,a.Vi(),a.Wi())}}else{Cvd(a,a.Vi(),a.Wi())}} -function LEc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;for(h=new olb(b);h.a<h.c.c.length;){f=BD(mlb(h),233);f.e=null;f.c=0}i=null;for(g=new olb(b);g.a<g.c.c.length;){f=BD(mlb(g),233);l=f.d[0];if(c&&l.k!=(j0b(),h0b)){continue}for(n=BD(vNb(l,(wtc(),Qsc)),15).Kc();n.Ob();){m=BD(n.Pb(),10);if(!c||m.k==(j0b(),h0b)){(!f.e&&(f.e=new Rkb),f.e).Fc(a.b[m.c.p][m.p]);++a.b[m.c.p][m.p].c}}if(!c&&l.k==(j0b(),h0b)){if(i){for(k=BD(Qc(a.d,i),21).Kc();k.Ob();){j=BD(k.Pb(),10);for(e=BD(Qc(a.d,l),21).Kc();e.Ob();){d=BD(e.Pb(),10);YEc(a.b[j.c.p][j.p]).Fc(a.b[d.c.p][d.p]);++a.b[d.c.p][d.p].c}}}i=l}}} -function OHc(a,b){var c,d,e,f,g,h,i,j,k;c=0;k=new Rkb;for(h=new olb(b);h.a<h.c.c.length;){g=BD(mlb(h),11);AHc(a.b,a.d[g.p]);k.c=KC(SI,Uhe,1,0,5,1);switch(g.i.k.g){case 0:d=BD(vNb(g,(wtc(),gtc)),10);Hkb(d.j,new xIc(k));break;case 1:Ctb(KAb(JAb(new YAb(null,new Kub(g.i.j,16)),new zIc(g))),new CIc(k));break;case 3:e=BD(vNb(g,(wtc(),$sc)),11);Ekb(k,new vgd(e,meb(g.e.c.length+g.g.c.length)));}for(j=new olb(k);j.a<j.c.c.length;){i=BD(mlb(j),46);f=aIc(a,BD(i.a,11));if(f>a.d[g.p]){c+=zHc(a.b,f)*BD(i.b,19).a;Wjb(a.a,meb(f))}}while(!akb(a.a)){xHc(a.b,BD(fkb(a.a),19).a)}}return c} -function eed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new g7c(BD(hkd(a,(X7c(),R7c)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=ED(hkd(a,L7c));(e==null||(uCb(e),e)<=0)&&(e=1.3);h=new Rkb;for(o=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));o.e!=o.i.gc();){n=BD(Dyd(o),33);g=new xed(n);h.c[h.c.length]=g}m=BD(hkd(a,M7c),311);switch(m.g){case 3:q=bed(h,b,l.a,l.b,(j=d,uCb(e),e,j));break;case 1:q=aed(h,b,l.a,l.b,(k=d,uCb(e),e,k));break;default:q=ced(h,b,l.a,l.b,(i=d,uCb(e),e,i));}f=new wed(q);p=fed(f,b,c,l.a,l.b,d,(uCb(e),e));Afd(a,p.a,p.b,false,true)} -function vkc(a,b){var c,d,e,f;c=b.b;f=new Tkb(c.j);e=0;d=c.j;d.c=KC(SI,Uhe,1,0,5,1);hkc(BD(Si(a.b,(Ucd(),Acd),(Fkc(),Ekc)),15),c);e=ikc(f,e,new blc,d);hkc(BD(Si(a.b,Acd,Dkc),15),c);e=ikc(f,e,new dlc,d);hkc(BD(Si(a.b,Acd,Ckc),15),c);hkc(BD(Si(a.b,zcd,Ekc),15),c);hkc(BD(Si(a.b,zcd,Dkc),15),c);e=ikc(f,e,new flc,d);hkc(BD(Si(a.b,zcd,Ckc),15),c);hkc(BD(Si(a.b,Rcd,Ekc),15),c);e=ikc(f,e,new hlc,d);hkc(BD(Si(a.b,Rcd,Dkc),15),c);e=ikc(f,e,new jlc,d);hkc(BD(Si(a.b,Rcd,Ckc),15),c);hkc(BD(Si(a.b,Tcd,Ekc),15),c);e=ikc(f,e,new Pkc,d);hkc(BD(Si(a.b,Tcd,Dkc),15),c);hkc(BD(Si(a.b,Tcd,Ckc),15),c)} -function nbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Layer size calculation',1);k=Pje;j=Qje;e=false;for(h=new olb(a.b);h.a<h.c.c.length;){g=BD(mlb(h),29);i=g.c;i.a=0;i.b=0;if(g.a.c.length==0){continue}e=true;for(m=new olb(g.a);m.a<m.c.c.length;){l=BD(mlb(m),10);o=l.o;n=l.d;i.a=$wnd.Math.max(i.a,o.a+n.b+n.c)}d=BD(Ikb(g.a,0),10);p=d.n.b-d.d.d;d.k==(j0b(),e0b)&&(p-=BD(vNb(a,(Nyc(),yyc)),142).d);f=BD(Ikb(g.a,g.a.c.length-1),10);c=f.n.b+f.o.b+f.d.a;f.k==e0b&&(c+=BD(vNb(a,(Nyc(),yyc)),142).a);i.b=c-p;k=$wnd.Math.min(k,p);j=$wnd.Math.max(j,c)}if(!e){k=0;j=0}a.f.b=j-k;a.c.b-=k;Qdd(b)} -function h_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;f=0;g=0;for(j=new olb(a.a);j.a<j.c.c.length;){h=BD(mlb(j),10);f=$wnd.Math.max(f,h.d.b);g=$wnd.Math.max(g,h.d.c)}for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);c=BD(vNb(h,(Nyc(),mwc)),248);switch(c.g){case 1:o=0;break;case 2:o=1;break;case 5:o=0.5;break;default:d=0;l=0;for(n=new olb(h.j);n.a<n.c.c.length;){m=BD(mlb(n),11);m.e.c.length==0||++d;m.g.c.length==0||++l}d+l==0?(o=0.5):(o=l/(d+l));}q=a.c;k=h.o.a;r=(q.a-k)*o;o>0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;r<e&&(r=e);p=h.d.c;r>q.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} -function ced(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=KC(UD,Vje,25,a.c.length,15,1);m=new gub(new Ned);_tb(m,a);j=0;p=new Rkb;while(m.b.c.length!=0){g=BD(m.b.c.length==0?null:Ikb(m.b,0),157);if(j>1&&red(g)*qed(g)/2>h[0]){f=0;while(f<p.c.length-1&&red(g)*qed(g)/2>h[f]){++f}o=new Jib(p,0,f+1);l=new wed(o);k=red(g)/qed(g);i=fed(l,b,new p0b,c,d,e,k);P6c(X6c(l.e),i);zCb(cub(m,l));n=new Jib(p,f+1,p.c.length);_tb(m,n);p.c=KC(SI,Uhe,1,0,5,1);j=0;Dlb(h,h.length,0)}else{q=m.b.c.length==0?null:Ikb(m.b,0);q!=null&&fub(m,0);j>0&&(h[j]=h[j-1]);h[j]+=red(g)*qed(g);++j;p.c[p.c.length]=g}}return p} -function Wac(a){var b,c,d,e,f;d=BD(vNb(a,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){for(c=new Sr(ur(R_b(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),17);if(!Yac(b)){throw vbb(new y2c(Fne+P_b(a)+"' 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(d==Atc){for(f=new Sr(ur(U_b(a).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(!Yac(e)){throw vbb(new y2c(Fne+P_b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} -function C9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;Odd(b,'Label dummy removal',1);d=Edb(ED(vNb(a,(Nyc(),nyc))));e=Edb(ED(vNb(a,ryc)));j=BD(vNb(a,Lwc),103);for(i=new olb(a.b);i.a<i.c.c.length;){h=BD(mlb(i),29);l=new Bib(h.a,0);while(l.b<l.d.gc()){k=(sCb(l.b<l.d.gc()),BD(l.d.Xb(l.c=l.b++),10));if(k.k==(j0b(),f0b)){m=BD(vNb(k,(wtc(),$sc)),17);o=Edb(ED(vNb(m,Zwc)));g=PD(vNb(k,Ssc))===PD((rbd(),obd));c=new g7c(k.n);g&&(c.b+=o+d);f=new f7c(k.o.a,k.o.b-o-d);n=BD(vNb(k,ktc),15);j==(ead(),dad)||j==_9c?B9b(n,c,e,f,g,j):A9b(n,c,e,f);Gkb(m.b,n);sbc(k,PD(vNb(a,Swc))===PD((Aad(),xad)));uib(l)}}}Qdd(b)} -function tZb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;i=new Rkb;for(f=new olb(b.a);f.a<f.c.c.length;){e=BD(mlb(f),10);for(h=new olb(e.j);h.a<h.c.c.length;){g=BD(mlb(h),11);k=null;for(t=k_b(g.g),u=0,v=t.length;u<v;++u){s=t[u];if(!f_b(s.d.i,c)){r=oZb(a,b,c,s,s.c,(KAc(),IAc),k);r!=k&&(i.c[i.c.length]=r,true);r.c&&(k=r)}}j=null;for(o=k_b(g.e),p=0,q=o.length;p<q;++p){n=o[p];if(!f_b(n.c.i,c)){r=oZb(a,b,c,n,n.d,(KAc(),HAc),j);r!=j&&(i.c[i.c.length]=r,true);r.c&&(j=r)}}}}for(m=new olb(i);m.a<m.c.c.length;){l=BD(mlb(m),441);Jkb(b.a,l.a,0)!=-1||Ekb(b.a,l.a);l.c&&(d.c[d.c.length]=l,true)}} -function jCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(c,'Interactive cycle breaking',1);l=new Rkb;for(n=new olb(b.a);n.a<n.c.c.length;){m=BD(mlb(n),10);m.p=1;o=T_b(m).a;for(k=W_b(m,(KAc(),IAc)).Kc();k.Ob();){j=BD(k.Pb(),11);for(f=new olb(j.g);f.a<f.c.c.length;){d=BD(mlb(f),17);p=d.d.i;if(p!=m){q=T_b(p).a;q<o&&(l.c[l.c.length]=d,true)}}}}for(g=new olb(l);g.a<g.c.c.length;){d=BD(mlb(g),17);PZb(d,true)}l.c=KC(SI,Uhe,1,0,5,1);for(i=new olb(b.a);i.a<i.c.c.length;){h=BD(mlb(i),10);h.p>0&&iCc(a,h,l)}for(e=new olb(l);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true)}l.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} -function _z(a,b){var c,d,e,f,g,h,i,j,k;j='';if(b.length==0){return a.de(Zie,Xie,-1,-1)}k=ufb(b);dfb(k.substr(0,3),'at ')&&(k=k.substr(3));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=ufb(k.substr(g+1));k=ufb(k.substr(0,g))}}else{c=k.indexOf(')',g);j=k.substr(g+1,c-(g+1));k=ufb(k.substr(0,g))}g=hfb(k,wfb(46));g!=-1&&(k=k.substr(g+1));(k.length==0||dfb(k,'Anonymous function'))&&(k=Xie);h=kfb(j,wfb(58));e=lfb(j,wfb(58),h-1);i=-1;d=-1;f=Zie;if(h!=-1&&e!=-1){f=j.substr(0,e);i=Vz(j.substr(e+1,h-(e+1)));d=Vz(j.substr(h+1))}return a.de(f,k,i,d)} -function UC(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw vbb(new ocb('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(QC=TC(0,0,0));return TC(0,0,0)}if(b.h==Gje&&b.m==0&&b.l==0){return VC(a,c)}i=false;if(b.h>>19!=0){b=hD(b);i=!i}g=_C(b);f=false;e=false;d=false;if(a.h==Gje&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=SC((wD(),sD));d=true;i=!i}else{h=lD(a,g);i&&ZC(h);c&&(QC=TC(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=hD(a);d=true;i=!i}if(g!=-1){return WC(a,g,i,f,c)}if(eD(a,b)<0){c&&(f?(QC=hD(a)):(QC=TC(a.l,a.m,a.h)));return TC(0,0,0)}return XC(d?a:TC(a.l,a.m,a.h),b,i,f,e,c)} -function F2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.c<a.f){throw vbb(new Zdb('Expected '+a.f+' phases to be configured; '+'only found '+a.c.c))}k=BD(gdb(a.g),9);n=Pu(a.f);for(f=k,h=0,j=f.length;h<j;++h){d=f[h];l=BD(B2c(a,d.g),246);l?Ekb(n,BD(I2c(a,l),123)):(n.c[n.c.length]=null,true)}o=new j3c;MAb(JAb(NAb(JAb(new YAb(null,new Kub(n,16)),new O2c),new Q2c(b)),new S2c),new U2c(o));d3c(o,a.a);c=new Rkb;for(e=k,g=0,i=e.length;g<i;++g){d=e[g];Gkb(c,J2c(a,Dx(BD(B2c(o,d.g),20))));m=BD(Ikb(n,d.g),123);!!m&&(c.c[c.c.length]=m,true)}Gkb(c,J2c(a,Dx(BD(B2c(o,k[k.length-1].g+1),20))));return c} -function qCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;Odd(c,'Model order cycle breaking',1);a.a=0;a.b=0;n=new Rkb;k=b.a.c.length;for(j=new olb(b.a);j.a<j.c.c.length;){i=BD(mlb(j),10);wNb(i,(wtc(),Zsc))&&(k=$wnd.Math.max(k,BD(vNb(i,Zsc),19).a+1))}for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);g=pCc(a,o,k);for(m=W_b(o,(KAc(),IAc)).Kc();m.Ob();){l=BD(m.Pb(),11);for(f=new olb(l.g);f.a<f.c.c.length;){d=BD(mlb(f),17);q=d.d.i;h=pCc(a,q,k);h<g&&(n.c[n.c.length]=d,true)}}}for(e=new olb(n);e.a<e.c.c.length;){d=BD(mlb(e),17);PZb(d,true);yNb(b,(wtc(),Asc),(Bcb(),true))}n.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} -function kQc(a,b){var c,d,e,f,g,h,i;if(a.g>b.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=BD(g.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=BD(h.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=BD(i.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=BD(f.Pb(),11);aRc(l7c(OC(GC(m1,1),nie,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c<d){new BQc(a,b,d-c)}else if(d<c){new BQc(b,a,c-d)}else{new BQc(b,a,0);new BQc(a,b,0)}} -function JPb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=IOb(a.e);l=Y6c(b7c(R6c(HOb(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new olb(j);i.a<i.c.c.length;){h=BD(mlb(i),395);m=h.b;n=c+m.a;q=d+m.b;o=QD(n/a.a);r=QD(q/a.b);f=h.a;switch(f.g){case 0:k=(RMb(),OMb);break;case 1:k=(RMb(),NMb);break;case 2:k=(RMb(),PMb);break;default:k=(RMb(),QMb);}if(f.a){s=QD((q+h.c)/a.b);Ekb(a.f,new uOb(k,meb(r),meb(s)));f==(ROb(),QOb)?nNb(a,0,r,o,s):nNb(a,o,r,a.d-1,s)}else{p=QD((n+h.c)/a.a);Ekb(a.f,new uOb(k,meb(o),meb(p)));f==(ROb(),OOb)?nNb(a,o,0,p,r):nNb(a,o,r,p,a.c-1)}}} -function coc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;m=new Rkb;e=new Rkb;p=null;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),19);f=new qoc(g.a);e.c[e.c.length]=f;if(p){f.d=p;p.e=f}p=f}t=boc(a);for(k=0;k<e.c.length;++k){n=null;q=poc((tCb(0,e.c.length),BD(e.c[0],652)));c=null;d=Pje;for(l=1;l<a.b.c.length;++l){r=q?$wnd.Math.abs(q.b-l):$wnd.Math.abs(l-n.b)+1;o=n?$wnd.Math.abs(l-n.b):r+1;if(o<r){j=n;i=o}else{j=q;i=r}s=(u=Edb(ED(vNb(a,(Nyc(),Hyc)))),t[l]+$wnd.Math.pow(i,u));if(s<d){d=s;c=j;c.c=l}if(!!q&&l==q.b){n=q;q=koc(q)}}if(c){Ekb(m,meb(c.c));c.a=true;loc(c)}}mmb();Mlb(m.c,m.c.length,null);return m} -function qNd(a){var b,c,d,e,f,g,h,i,j,k;b=new zNd;c=new zNd;j=dfb(Qve,(e=Dmd(a.b,Rve),!e?null:GD(AAd((!e.b&&(e.b=new sId((jGd(),fGd),x6,e)),e.b),Sve))));for(i=0;i<a.i;++i){h=BD(a.g[i],170);if(JD(h,99)){g=BD(h,18);(g.Bb&ote)!=0?((g.Bb&oie)==0||!j&&(f=Dmd(g,Rve),(!f?null:GD(AAd((!f.b&&(f.b=new sId((jGd(),fGd),x6,f)),f.b),eue)))==null))&&wtd(b,g):(k=zUd(g),!!k&&(k.Bb&ote)!=0||((g.Bb&oie)==0||!j&&(d=Dmd(g,Rve),(!d?null:GD(AAd((!d.b&&(d.b=new sId((jGd(),fGd),x6,d)),d.b),eue)))==null))&&wtd(c,g))}else{Q6d();if(BD(h,66).Oj()){if(!h.Jj()){wtd(b,h);wtd(c,h)}}}}vud(b);vud(c);a.a=BD(b.g,247);BD(c.g,247)} -function LTb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=ITb(b);q=BD(vNb(b,(Nyc(),Iwc)),314);q!=(Rpc(),Ppc)&&reb(j,new STb);r=BD(vNb(b,Cwc),292);reb(j,new UTb(r));p=0;k=new Rkb;for(f=new xkb(j);f.a!=f.b;){e=BD(vkb(f),37);aUb(a.c,e);m=BD(vNb(e,(wtc(),itc)),15);p+=m.gc();d=m.Kc();Ekb(k,new vgd(e,d))}Odd(c,'Recursive hierarchical layout',p);o=0;n=BD(BD(Ikb(k,k.c.length-1),46).b,47);while(n.Ob()){for(i=new olb(k);i.a<i.c.c.length;){h=BD(mlb(i),46);m=BD(h.b,47);g=BD(h.a,37);while(m.Ob()){l=BD(m.Pb(),51);if(JD(l,507)){if(!g.e){l.pf(g,Udd(c,1));++o;break}else{break}}else{l.pf(g,Udd(c,1));++o}}}}Qdd(c)} -function rid(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=(BCb(j,c.length),c.charCodeAt(j));if(i==93){h=hfb(c,wfb(91));if(h>=0){f=wid(b,c.substr(1,h-1));l=c.substr(h+1,j-(h+1));return pid(b,l,f)}}else{d=-1;Vcb==null&&(Vcb=new RegExp('\\d'));if(Vcb.test(String.fromCharCode(i))){d=lfb(c,wfb(46),j-1);if(d>=0){e=BD(hid(b,Bid(b,c.substr(1,d-1)),false),58);k=0;try{k=Icb(c.substr(d+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){g=a;throw vbb(new rFd(g))}else throw vbb(a)}if(k<e.gc()){m=e.Xb(k);JD(m,72)&&(m=BD(m,72).dd());return BD(m,56)}}}if(d<0){return BD(hid(b,Bid(b,c.substr(1)),false),56)}}return null} -function e1d(a,b,c){var d,e,f,g,h,i,j,k,l;if(bLd(b,c)>=0){return c}switch($1d(q1d(a,c))){case 2:{if(dfb('',o1d(a,c.Hj()).ne())){i=b2d(q1d(a,c));h=a2d(q1d(a,c));k=r1d(a,b,i,h);if(k){return k}e=f1d(a,b);for(g=0,l=e.gc();g<l;++g){k=BD(e.Xb(g),170);if(x1d(c2d(q1d(a,k)),i)){return k}}}return null}case 4:{if(dfb('',o1d(a,c.Hj()).ne())){for(d=c;d;d=Z1d(q1d(a,d))){j=b2d(q1d(a,d));h=a2d(q1d(a,d));k=s1d(a,b,j,h);if(k){return k}}i=b2d(q1d(a,c));if(dfb(Ewe,i)){return t1d(a,b)}else{f=g1d(a,b);for(g=0,l=f.gc();g<l;++g){k=BD(f.Xb(g),170);if(x1d(c2d(q1d(a,k)),i)){return k}}}}return null}default:{return null}}} -function t2d(a,b,c){var d,e,f,g,h,i,j,k;if(c.gc()==0){return false}h=(Q6d(),BD(b,66).Oj());f=h?c:new zud(c.gc());if(T6d(a.e,b)){if(b.hi()){for(j=c.Kc();j.Ob();){i=j.Pb();if(!F2d(a,b,i,JD(b,99)&&(BD(b,18).Bb&Tje)!=0)){e=R6d(b,i);f.Hc(e)||f.Fc(e)}}}else if(!h){for(j=c.Kc();j.Ob();){i=j.Pb();e=R6d(b,i);f.Fc(e)}}}else{if(c.gc()>1){throw vbb(new Wdb(Hwe))}k=S6d(a.e.Tg(),b);d=BD(a.g,119);for(g=0;g<a.i;++g){e=d[g];if(k.rl(e.ak())){if(c.Hc(h?e:e.dd())){return false}else{for(j=c.Kc();j.Ob();){i=j.Pb();BD(Gtd(a,g,h?BD(i,72):R6d(b,i)),72)}return true}}}if(!h){e=R6d(b,c.Kc().Pb());f.Fc(e)}}return ytd(a,f)} -function qMc(a,b){var c,d,e,f,g,h,i,j,k;k=new Psb;for(h=(j=(new $ib(a.c)).a.vc().Kc(),new djb(j));h.a.Ob();){f=(e=BD(h.a.Pb(),42),BD(e.dd(),458));f.b==0&&(Gsb(k,f,k.c.b,k.c),true)}while(k.b!=0){f=BD(k.b==0?null:(sCb(k.b!=0),Nsb(k,k.a.a)),458);f.a==null&&(f.a=0);for(d=new olb(f.d);d.a<d.c.c.length;){c=BD(mlb(d),654);c.b.a==null?(c.b.a=Edb(f.a)+c.a):b.o==(eMc(),cMc)?(c.b.a=$wnd.Math.min(Edb(c.b.a),Edb(f.a)+c.a)):(c.b.a=$wnd.Math.max(Edb(c.b.a),Edb(f.a)+c.a));--c.b.b;c.b.b==0&&Dsb(k,c.b)}}for(g=(i=(new $ib(a.c)).a.vc().Kc(),new djb(i));g.a.Ob();){f=(e=BD(g.a.Pb(),42),BD(e.dd(),458));b.i[f.c.p]=f.a}} -function mTc(){mTc=ccb;dTc=new Lsd(Ime);new Lsd(Jme);new Msd('DEPTH',meb(0));ZSc=new Msd('FAN',meb(0));XSc=new Msd(Yqe,meb(0));jTc=new Msd('ROOT',(Bcb(),false));_Sc=new Msd('LEFTNEIGHBOR',null);hTc=new Msd('RIGHTNEIGHBOR',null);aTc=new Msd('LEFTSIBLING',null);iTc=new Msd('RIGHTSIBLING',null);YSc=new Msd('DUMMY',false);new Msd('LEVEL',meb(0));gTc=new Msd('REMOVABLE_EDGES',new Psb);kTc=new Msd('XCOOR',meb(0));lTc=new Msd('YCOOR',meb(0));bTc=new Msd('LEVELHEIGHT',0);$Sc=new Msd('ID','');eTc=new Msd('POSITION',meb(0));fTc=new Msd('PRELIM',0);cTc=new Msd('MODIFIER',0);WSc=new Lsd(Kme);VSc=new Lsd(Lme)} -function MNc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;k=c+b.c.c.a;for(n=new olb(b.j);n.a<n.c.c.length;){m=BD(mlb(n),11);e=l7c(OC(GC(m1,1),nie,8,0,[m.i.n,m.n,m.a]));if(b.k==(j0b(),i0b)){h=BD(vNb(m,(wtc(),$sc)),11);e.a=l7c(OC(GC(m1,1),nie,8,0,[h.i.n,h.n,h.a])).a;b.n.a=e.a}g=new f7c(0,e.b);if(m.j==(Ucd(),zcd)){g.a=k}else if(m.j==Tcd){g.a=c}else{continue}o=$wnd.Math.abs(e.a-g.a);if(o<=d&&!JNc(b)){continue}f=m.g.c.length+m.e.c.length>1;for(j=new b1b(m.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);l=i.c==m?i.d:i.c;$wnd.Math.abs(l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&GNc(a,i,g,f,m)}}} -function XPc(a){var b,c,d,e,f,g;e=new Bib(a.e,0);d=new Bib(a.a,0);if(a.d){for(c=0;c<a.b;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}}else{for(c=0;c<a.b-1;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);uib(e)}}b=Edb((sCb(e.b<e.d.gc()),ED(e.d.Xb(e.c=e.b++))));while(a.f-b>Oqe){f=b;g=0;while($wnd.Math.abs(b-f)<Oqe){++g;b=Edb((sCb(e.b<e.d.gc()),ED(e.d.Xb(e.c=e.b++))));sCb(d.b<d.d.gc());d.d.Xb(d.c=d.b++)}if(g<a.b){sCb(e.b>0);e.a.Xb(e.c=--e.b);WPc(a,a.b-g,f,d,e);sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}sCb(d.b>0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c<a.b-1;c++){sCb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);uib(e)}}a.d=true;a.c=true} -function Q8d(){Q8d=ccb;s8d=(r8d(),q8d).b;v8d=BD(qud(ZKd(q8d.b),0),34);t8d=BD(qud(ZKd(q8d.b),1),34);u8d=BD(qud(ZKd(q8d.b),2),34);F8d=q8d.bb;BD(qud(ZKd(q8d.bb),0),34);BD(qud(ZKd(q8d.bb),1),34);H8d=q8d.fb;I8d=BD(qud(ZKd(q8d.fb),0),34);BD(qud(ZKd(q8d.fb),1),34);BD(qud(ZKd(q8d.fb),2),18);K8d=q8d.qb;N8d=BD(qud(ZKd(q8d.qb),0),34);BD(qud(ZKd(q8d.qb),1),18);BD(qud(ZKd(q8d.qb),2),18);L8d=BD(qud(ZKd(q8d.qb),3),34);M8d=BD(qud(ZKd(q8d.qb),4),34);P8d=BD(qud(ZKd(q8d.qb),6),34);O8d=BD(qud(ZKd(q8d.qb),5),18);w8d=q8d.j;x8d=q8d.k;y8d=q8d.q;z8d=q8d.w;A8d=q8d.B;B8d=q8d.A;C8d=q8d.C;D8d=q8d.D;E8d=q8d._;G8d=q8d.cb;J8d=q8d.hb} -function $Dc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.Kc();l.Ob();){k=BD(l.Pb(),11);h=k.j==(Ucd(),Acd)||k.j==Rcd;n=0;if(h){m=BD(vNb(k,(wtc(),gtc)),10);if(!m){continue}n+=VDc(a,d,k,m)}else{for(j=new olb(k.g);j.a<j.c.c.length;){i=BD(mlb(j),17);e=i.d;if(e.i.c==b.c){Ekb(a.a,k);continue o}else{n+=a.g[e.p]}}for(g=new olb(k.e);g.a<g.c.c.length;){f=BD(mlb(g),17);e=f.c;if(e.i.c==b.c){Ekb(a.a,k);continue o}else{n-=a.g[e.p]}}}if(k.e.c.length+k.g.c.length>0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} -function $9d(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} -function l5b(a,b,c){var d,e,f,g;Odd(c,'Graph transformation ('+a.a+')',1);g=Mu(b.a);for(f=new olb(b.b);f.a<f.c.c.length;){e=BD(mlb(f),29);Gkb(g,e.a)}d=BD(vNb(b,(Nyc(),Mwc)),419);if(d==(xqc(),vqc)){switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);break;case 3:p5b(b,g);break;case 4:if(a.a==(y5b(),x5b)){p5b(b,g);a5b(b,g)}else{a5b(b,g);p5b(b,g)}}}else{if(a.a==(y5b(),x5b)){switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);a5b(b,g);break;case 3:p5b(b,g);_4b(b,g);break;case 4:_4b(b,g);p5b(b,g);}}else{switch(BD(vNb(b,Lwc),103).g){case 2:_4b(b,g);a5b(b,g);break;case 3:_4b(b,g);p5b(b,g);break;case 4:p5b(b,g);_4b(b,g);}}}Qdd(c)} -function j6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;j=new zsb;k=new zsb;o=new zsb;p=new zsb;i=Edb(ED(vNb(b,(Nyc(),vyc))));f=Edb(ED(vNb(b,lyc)));for(h=new olb(c);h.a<h.c.c.length;){g=BD(mlb(h),10);l=BD(vNb(g,(wtc(),Hsc)),61);if(l==(Ucd(),Acd)){k.a.zc(g,k);for(e=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);Qqb(j,d.c.i)}}else if(l==Rcd){p.a.zc(g,p);for(e=new Sr(ur(R_b(g).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);Qqb(o,d.c.i)}}}if(j.a.gc()!=0){m=new tPc(2,f);n=sPc(m,b,j,k,-i-b.c.b);if(n>0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new tPc(1,f);n=sPc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} -function kKd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;$Jd(a,null)}else{a.F=(uCb(b),b);d=hfb(b,wfb(60));if(d!=-1){e=b.substr(0,d);hfb(b,wfb(46))==-1&&!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)&&(e=Lve);c=kfb(b,wfb(62));c!=-1&&(e+=''+b.substr(c+1));$Jd(a,e)}else{e=b;if(hfb(b,wfb(46))==-1){d=hfb(b,wfb(91));d!=-1&&(e=b.substr(0,d));if(!dfb(e,Khe)&&!dfb(e,Eve)&&!dfb(e,Fve)&&!dfb(e,Gve)&&!dfb(e,Hve)&&!dfb(e,Ive)&&!dfb(e,Jve)&&!dfb(e,Kve)){e=Lve;d!=-1&&(e+=''+b.substr(d))}else{e=b}}$Jd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&Uhd(a,new nSd(a,1,5,f,b))} -function AMc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=KC(WD,oje,25,p,15,1);l=0;for(k=new olb(b.b);k.a<k.c.c.length;){j=BD(mlb(k),29);n[l++]=j.a.c.length}m=new Bib(b.b,2);for(d=1;d<p-1;d++){c=(sCb(m.b<m.d.gc()),BD(m.d.Xb(m.c=m.b++),29));o=new olb(c.a);f=0;h=0;for(i=0;i<n[d+1];i++){t=BD(mlb(o),10);if(i==n[d+1]-1||zMc(a,t,d+1,d)){g=n[d]-1;zMc(a,t,d+1,d)&&(g=a.c.e[BD(BD(BD(Ikb(a.c.b,t.p),15).Xb(0),46).a,10).p]);while(h<=i){s=BD(Ikb(c.a,h),10);if(!zMc(a,s,d+1,d)){for(r=BD(Ikb(a.c.b,s.p),15).Kc();r.Ob();){q=BD(r.Pb(),46);e=a.c.e[BD(q.a,10).p];(e<f||e>g)&&Qqb(a.b,BD(q.b,17))}}++h}f=g}}}} -function o5c(b,c){var d;if(c==null||dfb(c,Xhe)){return null}if(c.length==0&&b.k!=(_5c(),W5c)){return null}switch(b.k.g){case 1:return efb(c,kse)?(Bcb(),Acb):efb(c,lse)?(Bcb(),zcb):null;case 2:try{return meb(Icb(c,Rie,Ohe))}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 4:try{return Hcb(c)}catch(a){a=ubb(a);if(JD(a,127)){return null}else throw vbb(a)}case 3:return c;case 5:j5c(b);return m5c(b,c);case 6:j5c(b);return n5c(b,b.a,c);case 7:try{d=l5c(b);d.Jf(c);return d}catch(a){a=ubb(a);if(JD(a,32)){return null}else throw vbb(a)}default:throw vbb(new Zdb('Invalid type set for this layout option.'));}} -function JWb(a){AWb();var b,c,d,e,f,g,h;h=new CWb;for(c=new olb(a);c.a<c.c.c.length;){b=BD(mlb(c),140);(!h.b||b.c>=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new NWb((lWb(),hWb));rXb(a,yWb,new amb(OC(GC(bQ,1),Uhe,369,0,[d])));g=new NWb(kWb);rXb(a,xWb,new amb(OC(GC(bQ,1),Uhe,369,0,[g])));e=new NWb(iWb);rXb(a,wWb,new amb(OC(GC(bQ,1),Uhe,369,0,[e])));f=new NWb(jWb);rXb(a,vWb,new amb(OC(GC(bQ,1),Uhe,369,0,[f])));DWb(d.c,hWb);DWb(e.c,iWb);DWb(f.c,jWb);DWb(g.c,kWb);h.a.c=KC(SI,Uhe,1,0,5,1);Gkb(h.a,d.c);Gkb(h.a,Su(e.c));Gkb(h.a,f.c);Gkb(h.a,Su(g.c));return h} -function jxd(a){var b;switch(a.d){case 1:{if(a.hj()){return a.o!=-2}break}case 2:{if(a.hj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.gj();switch(a.p){case 0:return b!=null&&Ccb(DD(b))!=Kbb(a.k,0);case 1:return b!=null&&BD(b,217).a!=Tbb(a.k)<<24>>24;case 2:return b!=null&&BD(b,172).a!=(Tbb(a.k)&aje);case 6:return b!=null&&Kbb(BD(b,162).a,a.k);case 5:return b!=null&&BD(b,19).a!=Tbb(a.k);case 7:return b!=null&&BD(b,184).a!=Tbb(a.k)<<16>>16;case 3:return b!=null&&Edb(ED(b))!=a.j;case 4:return b!=null&&BD(b,155).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} -function nOd(a,b,c){var d,e,f,g;if(a.Fk()&&a.Ek()){g=oOd(a,BD(c,56));if(PD(g)!==PD(c)){a.Oi(b);a.Ui(b,pOd(a,b,g));if(a.rk()){f=(e=BD(c,49),a.Dk()?a.Bk()?e.ih(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),null):e.ih(a.b,bLd(e.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,null):e.ih(a.b,-1-a.aj(),null,null));!BD(g,49).eh()&&(f=(d=BD(g,49),a.Dk()?a.Bk()?d.gh(a.b,zUd(BD(XKd(wjd(a.b),a.aj()),18)).n,BD(XKd(wjd(a.b),a.aj()).Yj(),26).Bj(),f):d.gh(a.b,bLd(d.Tg(),zUd(BD(XKd(wjd(a.b),a.aj()),18))),null,f):d.gh(a.b,-1-a.aj(),null,f)));!!f&&f.Fi()}oid(a.b)&&a.$i(a.Zi(9,c,g,b,false));return g}}return c} -function Noc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Edb(ED(vNb(a,(Nyc(),oyc))));d=Edb(ED(vNb(a,Cyc)));m=new _fd;yNb(m,oyc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=G1b(p.c);t=G1b(s.c);e=new Rkb;for(l=q;l<=t;l++){h=new b0b(a);__b(h,(j0b(),g0b));yNb(h,(wtc(),$sc),j);yNb(h,Vxc,(dcd(),$bd));yNb(h,qyc,m);n=BD(Ikb(a.b,l),29);l==q?Z_b(h,n.a.c.length-c,n):$_b(h,n);u=Edb(ED(vNb(j,Zwc)));if(u<0){u=0;yNb(j,Zwc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new H0b;G0b(g,(Ucd(),Tcd));F0b(g,h);g.n.b=o;i=new H0b;G0b(i,zcd);F0b(i,h);i.n.b=o;RZb(j,g);f=new UZb;tNb(f,j);yNb(f,jxc,null);QZb(f,i);RZb(f,r);Ooc(h,j,f);e.c[e.c.length]=f;j=f}return e} -function sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=BD(Y_b(a,(Ucd(),Tcd)).Kc().Pb(),11).e;n=BD(Y_b(a,zcd).Kc().Pb(),11).g;h=i.c.length;t=A0b(BD(Ikb(a.j,0),11));while(h-->0){p=(tCb(0,i.c.length),BD(i.c[0],17));e=(tCb(0,n.c.length),BD(n.c[0],17));s=e.d.e;f=Jkb(s,e,0);SZb(p,e.d,f);QZb(e,null);RZb(e,null);o=p.a;b&&Dsb(o,new g7c(t));for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);Dsb(o,new g7c(c))}r=p.b;for(m=new olb(e.b);m.a<m.c.c.length;){l=BD(mlb(m),70);r.c[r.c.length]=l}q=BD(vNb(p,(Nyc(),jxc)),74);g=BD(vNb(e,jxc),74);if(g){if(!q){q=new s7c;yNb(p,jxc,q)}for(k=Jsb(g,0);k.b!=k.d.c;){j=BD(Xsb(k),8);Dsb(q,new g7c(j))}}}} -function EJb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.b=0;c.n.c=0;return}j=a.u.Hc((rcd(),ncd));g=0;h=i.Kc();k=null;l=0;m=0;while(h.Ob()){d=BD(h.Pb(),111);e=Edb(ED(d.b.We((CKb(),BKb))));f=d.b.rf().a;a.A.Hc((tdd(),sdd))&&KJb(a,b);if(!k){!!a.C&&a.C.b>0&&(g=$wnd.Math.max(g,IJb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-e)<=ple||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(l-1)<=ple||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} -function NKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=BD(Mpb(a.b,b),124);i=BD(BD(Qc(a.r,b),21),84);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((rcd(),ncd));g=0;a.A.Hc((tdd(),sdd))&&SKb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=BD(h.Pb(),111);f=Edb(ED(d.b.We((CKb(),BKb))));e=d.b.rf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,IJb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-f)<=ple||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Iy(),My(ple),$wnd.Math.abs(m-1)<=ple||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} -function _Ec(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=KC(OQ,kne,10,h+i,0,1);for(g=0;g<h;g++){this.d[g]=b.d[g]}for(f=0;f<i;f++){this.d[h+f]=c.d[f]}if(b.e){this.e=Ru(b.e);this.e.Mc(c);if(c.e){for(e=c.e.Kc();e.Ob();){d=BD(e.Pb(),233);if(d==b){continue}else this.e.Hc(d)?--d.c:this.e.Fc(d)}}}else if(c.e){this.e=Ru(c.e);this.e.Mc(b)}this.f=b.f+c.f;this.a=b.a+c.a;this.a>0?ZEc(this,this.f/this.a):REc(b.g,b.d[0]).a!=null&&REc(c.g,c.d[0]).a!=null?ZEc(this,(Edb(REc(b.g,b.d[0]).a)+Edb(REc(c.g,c.d[0]).a))/2):REc(b.g,b.d[0]).a!=null?ZEc(this,REc(b.g,b.d[0]).a):REc(c.g,c.d[0]).a!=null&&ZEc(this,REc(c.g,c.d[0]).a)} -function BUb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new dVb(oqb(t1));for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),841);h=new gVb(OC(GC(IP,1),Uhe,81,0,[]));Ekb(a.a.a,h);for(j=new olb(c.d);j.a<j.c.c.length;){i=BD(mlb(j),110);k=new GUb(a,i);AUb(k,BD(vNb(c.c,(wtc(),Esc)),21));if(!Mhb(a.g,c)){Rhb(a.g,c,new f7c(i.c,i.d));Rhb(a.f,c,k)}Ekb(a.a.b,k);eVb(h,k)}for(g=new olb(c.b);g.a<g.c.c.length;){f=BD(mlb(g),594);k=new GUb(a,f.kf());Rhb(a.b,f,new vgd(h,k));AUb(k,BD(vNb(c.c,(wtc(),Esc)),21));if(f.hf()){l=new HUb(a,f.hf(),1);AUb(l,BD(vNb(c.c,Esc),21));e=new gVb(OC(GC(IP,1),Uhe,81,0,[]));eVb(e,l);Rc(a.c,f.gf(),new vgd(h,l))}}}return a.a} -function oBc(a){var b;this.a=a;b=(j0b(),OC(GC(NQ,1),Kie,267,0,[h0b,g0b,e0b,i0b,f0b,d0b])).length;this.b=IC(Q3,[nie,zqe],[593,146],0,[b,b],2);this.c=IC(Q3,[nie,zqe],[593,146],0,[b,b],2);nBc(this,h0b,(Nyc(),vyc),wyc);lBc(this,h0b,g0b,oyc,pyc);kBc(this,h0b,i0b,oyc);kBc(this,h0b,e0b,oyc);lBc(this,h0b,f0b,vyc,wyc);nBc(this,g0b,lyc,myc);kBc(this,g0b,i0b,lyc);kBc(this,g0b,e0b,lyc);lBc(this,g0b,f0b,oyc,pyc);mBc(this,i0b,lyc);kBc(this,i0b,e0b,lyc);kBc(this,i0b,f0b,syc);mBc(this,e0b,zyc);lBc(this,e0b,f0b,uyc,tyc);nBc(this,f0b,lyc,lyc);nBc(this,d0b,lyc,myc);lBc(this,d0b,h0b,oyc,pyc);lBc(this,d0b,f0b,oyc,pyc);lBc(this,d0b,g0b,oyc,pyc)} -function _2d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;g=c.ak();if(JD(g,99)&&(BD(g,18).Bb&Tje)!=0){m=BD(c.dd(),49);p=xid(a.e,m);if(p!=m){k=R6d(g,p);mud(a,b,t3d(a,b,k));l=null;if(oid(a.e)){d=e1d((O6d(),M6d),a.e.Tg(),g);if(d!=XKd(a.e.Tg(),a.c)){q=S6d(a.e.Tg(),g);h=0;f=BD(a.g,119);for(i=0;i<b;++i){e=f[i];q.rl(e.ak())&&++h}l=new O7d(a.e,9,d,m,p,h,false);l.Ei(new pSd(a.e,9,a.c,c,k,b,false))}}o=BD(g,18);n=zUd(o);if(n){l=m.ih(a.e,bLd(m.Tg(),n),null,l);l=BD(p,49).gh(a.e,bLd(p.Tg(),n),null,l)}else if((o.Bb&ote)!=0){j=-1-bLd(a.e.Tg(),o);l=m.ih(a.e,j,null,null);!BD(p,49).eh()&&(l=BD(p,49).gh(a.e,j,null,l))}!!l&&l.Fi();return k}}return c} -function yUb(a){var b,c,d,e,f,g,h,i;for(f=new olb(a.a.b);f.a<f.c.c.length;){e=BD(mlb(f),81);e.b.c=e.g.c;e.b.d=e.g.d}i=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(d=new olb(a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),81);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}for(h=Uc(a.c).a.nc();h.Ob();){g=BD(h.Pb(),46);c=BD(g.b,81);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}a.d=V6c(new f7c(i.a,i.b));a.e=c7c(new f7c(b.a,b.b),i);a.a.a.c=KC(SI,Uhe,1,0,5,1);a.a.b.c=KC(SI,Uhe,1,0,5,1)} -function svd(a){var b,c,d;l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new Z9c]));c=new xB(a);for(d=0;d<c.a.length;++d){b=tB(c,d).je().a;dfb(b,'layered')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new kwc])):dfb(b,'force')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new TRb])):dfb(b,'stress')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new PSb])):dfb(b,'mrtree')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new sTc])):dfb(b,'radial')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new IWc])):dfb(b,'disco')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new gFb,new oPb])):dfb(b,'sporeOverlap')||dfb(b,'sporeCompaction')?l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new B0c])):dfb(b,'rectpacking')&&l4c(lvd,OC(GC(C0,1),Uhe,130,0,[new PYc]))}} -function j_b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;m=new g7c(a.o);r=b.a/m.a;h=b.b/m.b;p=b.a-m.a;f=b.b-m.b;if(c){e=PD(vNb(a,(Nyc(),Vxc)))===PD((dcd(),$bd));for(o=new olb(a.j);o.a<o.c.c.length;){n=BD(mlb(o),11);switch(n.j.g){case 1:e||(n.n.a*=r);break;case 2:n.n.a+=p;e||(n.n.b*=h);break;case 3:e||(n.n.a*=r);n.n.b+=f;break;case 4:e||(n.n.b*=h);}}}for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),70);k=i.n.a+i.o.a/2;l=i.n.b+i.o.b/2;q=k/m.a;g=l/m.b;if(q+g>=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;yNb(a,(Nyc(),Fxc),(tdd(),d=BD(gdb(I1),9),new xqb(d,BD(_Bb(d,d.length),9),0)))} -function iFd(a,b,c,d,e,f){var g;if(!(b==null||!OEd(b,zEd,AEd))){throw vbb(new Wdb('invalid scheme: '+b))}if(!a&&!(c!=null&&hfb(c,wfb(35))==-1&&c.length>0&&(BCb(0,c.length),c.charCodeAt(0)!=47))){throw vbb(new Wdb('invalid opaquePart: '+c))}if(a&&!(b!=null&&hnb(GEd,b.toLowerCase()))&&!(c==null||!OEd(c,CEd,DEd))){throw vbb(new Wdb(mve+c))}if(a&&b!=null&&hnb(GEd,b.toLowerCase())&&!eFd(c)){throw vbb(new Wdb(mve+c))}if(!fFd(d)){throw vbb(new Wdb('invalid device: '+d))}if(!hFd(e)){g=e==null?'invalid segments: null':'invalid segment: '+VEd(e);throw vbb(new Wdb(g))}if(!(f==null||hfb(f,wfb(35))==-1)){throw vbb(new Wdb('invalid query: '+f))}} -function nVc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Calculate Graph Size',1);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));h=dme;i=dme;f=ere;g=ere;for(l=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));l.e!=l.i.gc();){j=BD(Dyd(l),33);o=j.i;p=j.j;r=j.g;d=j.f;e=BD(hkd(j,(Y9c(),S8c)),142);h=$wnd.Math.min(h,o-e.b);i=$wnd.Math.min(i,p-e.d);f=$wnd.Math.max(f,o+r+e.c);g=$wnd.Math.max(g,p+d+e.a)}n=BD(hkd(a,(Y9c(),f9c)),116);m=new f7c(h-n.b,i-n.d);for(k=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));k.e!=k.i.gc();){j=BD(Dyd(k),33);dld(j,j.i-m.a);eld(j,j.j-m.b)}q=f-h+(n.b+n.c);c=g-i+(n.d+n.a);cld(a,q);ald(a,c);b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))} -function rGb(a){var b,c,d,e,f,g,h,i,j,k;d=new Rkb;for(g=new olb(a.e.a);g.a<g.c.c.length;){e=BD(mlb(g),121);k=0;e.k.c=KC(SI,Uhe,1,0,5,1);for(c=new olb(LFb(e));c.a<c.c.c.length;){b=BD(mlb(c),213);if(b.f){Ekb(e.k,b);++k}}k==1&&(d.c[d.c.length]=e,true)}for(f=new olb(d);f.a<f.c.c.length;){e=BD(mlb(f),121);while(e.k.c.length==1){j=BD(mlb(new olb(e.k)),213);a.b[j.c]=j.g;h=j.d;i=j.e;for(c=new olb(LFb(e));c.a<c.c.c.length;){b=BD(mlb(c),213);pb(b,j)||(b.f?h==b.d||i==b.e?(a.b[j.c]-=a.b[b.c]-b.g):(a.b[j.c]+=a.b[b.c]-b.g):e==h?b.d==e?(a.b[j.c]+=b.g):(a.b[j.c]-=b.g):b.d==e?(a.b[j.c]-=b.g):(a.b[j.c]+=b.g))}Lkb(h.k,j);Lkb(i.k,j);h==e?(e=j.e):(e=j.d)}}} -function k4c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(b==null||b.length==0){return null}f=BD(Phb(a.f,b),23);if(!f){for(e=(n=(new $ib(a.d)).a.vc().Kc(),new djb(n));e.a.Ob();){c=(g=BD(e.a.Pb(),42),BD(g.dd(),23));h=c.f;o=b.length;if(dfb(h.substr(h.length-o,o),b)&&(b.length==h.length||bfb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(m=(new $ib(a.d)).a.vc().Kc(),new djb(m));d.a.Ob();){c=(g=BD(d.a.Pb(),42),BD(g.dd(),23));l=c.g;if(l!=null){for(i=l,j=0,k=i.length;j<k;++j){h=i[j];o=b.length;if(dfb(h.substr(h.length-o,o),b)&&(b.length==h.length||bfb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}}}}!!f&&Shb(a.f,b,f)}return f} -function sA(a,b){var c,d,e,f,g;c=new Vfb;g=false;for(f=0;f<b.length;f++){d=(BCb(f,b.length),b.charCodeAt(f));if(d==32){gA(a,c,0);c.a+=' ';gA(a,c,0);while(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==32)){++f}continue}if(g){if(d==39){if(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+=String.fromCharCode(d);++f}else{g=false}}else{c.a+=String.fromCharCode(d)}continue}if(hfb('GyMLdkHmsSEcDahKzZv',wfb(d))>0){gA(a,c,0);c.a+=String.fromCharCode(d);e=lA(b,f);gA(a,c,e);f+=e-1;continue}if(d==39){if(f+1<b.length&&(BCb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+="'";++f}else{g=true}}else{c.a+=String.fromCharCode(d)}}gA(a,c,0);mA(a)} -function wDc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(c,'Network simplex layering',1);a.b=b;r=BD(vNb(b,(Nyc(),Ayc)),19).a*4;q=a.b.a;if(q.c.length<1){Qdd(c);return}f=sDc(a,q);p=null;for(e=Jsb(f,0);e.b!=e.d.c;){d=BD(Xsb(e),15);h=r*QD($wnd.Math.sqrt(d.gc()));g=vDc(d);uGb(HGb(JGb(IGb(LGb(g),h),p),true),Udd(c,1));m=a.b.b;for(o=new olb(g.a);o.a<o.c.c.length;){n=BD(mlb(o),121);while(m.c.length<=n.e){Dkb(m,m.c.length,new H1b(a.b))}k=BD(n.f,10);$_b(k,BD(Ikb(m,n.e),29))}if(f.b>1){p=KC(WD,oje,25,a.b.b.c.length,15,1);l=0;for(j=new olb(a.b.b);j.a<j.c.c.length;){i=BD(mlb(j),29);p[l++]=i.a.c.length}}}q.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.b=null;a.c=null;Qdd(c)} -function OUb(a){var b,c,d,e,f,g,h;b=0;for(f=new olb(a.b.a);f.a<f.c.c.length;){d=BD(mlb(f),189);d.b=0;d.c=0}NUb(a,0);MUb(a,a.g);sVb(a.c);wVb(a.c);c=(ead(),aad);uVb(oVb(tVb(uVb(oVb(tVb(uVb(tVb(a.c,c)),had(c)))),c)));tVb(a.c,aad);RUb(a,a.g);SUb(a,0);TUb(a,0);UUb(a,1);NUb(a,1);MUb(a,a.d);sVb(a.c);for(g=new olb(a.b.a);g.a<g.c.c.length;){d=BD(mlb(g),189);b+=$wnd.Math.abs(d.c)}for(h=new olb(a.b.a);h.a<h.c.c.length;){d=BD(mlb(h),189);d.b=0;d.c=0}c=dad;uVb(oVb(tVb(uVb(oVb(tVb(uVb(wVb(tVb(a.c,c))),had(c)))),c)));tVb(a.c,aad);RUb(a,a.d);SUb(a,1);TUb(a,1);UUb(a,0);wVb(a.c);for(e=new olb(a.b.a);e.a<e.c.c.length;){d=BD(mlb(e),189);b+=$wnd.Math.abs(d.c)}return b} -function Wfe(a,b){var c,d,e,f,g,h,i,j,k;j=b;if(j.b==null||a.b==null)return;Yfe(a);Vfe(a);Yfe(j);Vfe(j);c=KC(WD,oje,25,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){d+=2}else if(f>=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(i<e){g+=2}else{throw vbb(new hz('Token#intersectRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] & ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=KC(WD,oje,25,k,15,1);$fb(c,0,a.b,0,k)} -function PUb(a){var b,c,d,e,f,g,h;b=new Rkb;a.g=new Rkb;a.d=new Rkb;for(g=new nib((new eib(a.f.b)).a);g.b;){f=lib(g);Ekb(b,BD(BD(f.dd(),46).b,81));fad(BD(f.cd(),594).gf())?Ekb(a.d,BD(f.dd(),46)):Ekb(a.g,BD(f.dd(),46))}MUb(a,a.d);MUb(a,a.g);a.c=new CVb(a.b);AVb(a.c,(xUb(),wUb));RUb(a,a.d);RUb(a,a.g);Gkb(b,a.c.a.b);a.e=new f7c(Pje,Pje);a.a=new f7c(Qje,Qje);for(d=new olb(b);d.a<d.c.c.length;){c=BD(mlb(d),81);a.e.a=$wnd.Math.min(a.e.a,c.g.c);a.e.b=$wnd.Math.min(a.e.b,c.g.d);a.a.a=$wnd.Math.max(a.a.a,c.g.c+c.g.b);a.a.b=$wnd.Math.max(a.a.b,c.g.d+c.g.a)}zVb(a.c,new YUb);h=0;do{e=OUb(a);++h}while((h<2||e>Qie)&&h<10);zVb(a.c,new _Ub);OUb(a);vVb(a.c);yUb(a.f)} -function sZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Ccb(DD(vNb(c,(Nyc(),fxc))))){return}for(h=new olb(c.j);h.a<h.c.c.length;){g=BD(mlb(h),11);m=k_b(g.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];f=i.d.i==c;e=f&&Ccb(DD(vNb(i,gxc)));if(e){o=i.c;n=BD(Ohb(a.b,o),10);if(!n){n=Z$b(o,(dcd(),bcd),o.j,-1,null,null,o.o,BD(vNb(b,Lwc),103),b);yNb(n,(wtc(),$sc),o);Rhb(a.b,o,n);Ekb(b.a,n)}q=i.d;p=BD(Ohb(a.b,q),10);if(!p){p=Z$b(q,(dcd(),bcd),q.j,1,null,null,q.o,BD(vNb(b,Lwc),103),b);yNb(p,(wtc(),$sc),q);Rhb(a.b,q,p);Ekb(b.a,p)}d=kZb(i);QZb(d,BD(Ikb(n.j,0),11));RZb(d,BD(Ikb(p.j,0),11));Rc(a.a,i,new BZb(d,b,(KAc(),IAc)));BD(vNb(b,(wtc(),Ksc)),21).Fc((Orc(),Hrc))}}}} -function W9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;Odd(c,'Label dummy switching',1);d=BD(vNb(b,(Nyc(),Owc)),227);J9b(b);e=T9b(b,d);a.a=KC(UD,Vje,25,b.b.c.length,15,1);for(h=(Apc(),OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc])),k=0,n=h.length;k<n;++k){f=h[k];if((f==zpc||f==upc||f==xpc)&&!BD(uqb(e.a,f)?e.b[f.g]:null,15).dc()){M9b(a,b);break}}for(i=OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc]),l=0,o=i.length;l<o;++l){f=i[l];f==zpc||f==upc||f==xpc||X9b(a,BD(uqb(e.a,f)?e.b[f.g]:null,15))}for(g=OC(GC(EW,1),Kie,227,0,[wpc,ypc,vpc,xpc,zpc,upc]),j=0,m=g.length;j<m;++j){f=g[j];(f==zpc||f==upc||f==xpc)&&X9b(a,BD(uqb(e.a,f)?e.b[f.g]:null,15))}a.a=null;Qdd(c)} -function AFc(a,b){var c,d,e,f,g,h,i,j,k,l,m;switch(a.k.g){case 1:d=BD(vNb(a,(wtc(),$sc)),17);c=BD(vNb(d,_sc),74);!c?(c=new s7c):Ccb(DD(vNb(d,ltc)))&&(c=w7c(c));j=BD(vNb(a,Vsc),11);if(j){k=l7c(OC(GC(m1,1),nie,8,0,[j.i.n,j.n,j.a]));if(b<=k.a){return k.b}Gsb(c,k,c.a,c.a.a)}l=BD(vNb(a,Wsc),11);if(l){m=l7c(OC(GC(m1,1),nie,8,0,[l.i.n,l.n,l.a]));if(m.a<=b){return m.b}Gsb(c,m,c.c.b,c.c)}if(c.b>=2){i=Jsb(c,0);g=BD(Xsb(i),8);h=BD(Xsb(i),8);while(h.a<b&&i.b!=i.d.c){g=h;h=BD(Xsb(i),8)}return g.b+(b-g.a)/(h.a-g.a)*(h.b-g.b)}break;case 3:f=BD(vNb(BD(Ikb(a.j,0),11),(wtc(),$sc)),11);e=f.i;switch(f.j.g){case 1:return e.n.b;case 3:return e.n.b+e.o.b;}}return T_b(a).b} -function Wgc(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new olb(a.d.b);g.a<g.c.c.length;){f=BD(mlb(g),29);for(i=new olb(f.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(Ccb(DD(vNb(h,(Nyc(),pwc))))){if(!Qq(O_b(h))){d=BD(Oq(O_b(h)),17);k=d.c.i;k==h&&(k=d.d.i);l=new vgd(k,c7c(R6c(h.n),k.n));Rhb(a.b,h,l);continue}}e=new J6c(h.n.a-h.d.b,h.n.b-h.d.d,h.o.a+h.d.b+h.d.c,h.o.b+h.d.d+h.d.a);b=vDb(yDb(wDb(xDb(new zDb,h),e),Fgc),a.a);pDb(qDb(rDb(new sDb,OC(GC(PM,1),Uhe,57,0,[b])),b),a.a);j=new lEb;Rhb(a.e,b,j);c=sr(new Sr(ur(R_b(h).a.Kc(),new Sq)))-sr(new Sr(ur(U_b(h).a.Kc(),new Sq)));c<0?jEb(j,true,(ead(),aad)):c>0&&jEb(j,true,(ead(),bad));h.k==(j0b(),e0b)&&kEb(j);Rhb(a.f,h,b)}}} -function Bbc(a,b,c){var d,e,f,g,h,i,j,k,l,m;Odd(c,'Node promotion heuristic',1);a.g=b;Abc(a);a.q=BD(vNb(b,(Nyc(),rxc)),260);k=BD(vNb(a.g,qxc),19).a;f=new Jbc;switch(a.q.g){case 2:case 1:Dbc(a,f);break;case 3:a.q=(kAc(),jAc);Dbc(a,f);i=0;for(h=new olb(a.a);h.a<h.c.c.length;){g=BD(mlb(h),19);i=$wnd.Math.max(i,g.a)}if(i>a.j){a.q=dAc;Dbc(a,f)}break;case 4:a.q=(kAc(),jAc);Dbc(a,f);j=0;for(e=new olb(a.b);e.a<e.c.c.length;){d=ED(mlb(e));j=$wnd.Math.max(j,(uCb(d),d))}if(j>a.k){a.q=gAc;Dbc(a,f)}break;case 6:m=QD($wnd.Math.ceil(a.f.length*k/100));Dbc(a,new Mbc(m));break;case 5:l=QD($wnd.Math.ceil(a.d*k/100));Dbc(a,new Pbc(l));break;default:Dbc(a,f);}Ebc(a,b);Qdd(c)} -function fFc(a,b,c){var d,e,f,g;this.j=a;this.e=WZb(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?BD(Ikb(c,Q_b(this.o).p),214):null;e=BD(vNb(a,(wtc(),Ksc)),21);this.g=e.Hc((Orc(),Hrc));this.b=new Rkb;this.d=new rHc(this.e);g=BD(vNb(this.j,jtc),230);this.q=wFc(b,g,this.e);this.k=new BGc(this);f=Ou(OC(GC(qY,1),Uhe,225,0,[this,this.d,this.k,this.q]));if(b==(rGc(),oGc)&&!Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new uEc(d,g,BD(this.q,402))}else if(b==oGc&&Ccb(DD(vNb(a,(Nyc(),Awc))))){d=new SEc(this.e);f.c[f.c.length]=d;this.c=new XGc(d,g,BD(this.q,402))}else{this.c=new Oic(b,this)}Ekb(f,this.c);$Ic(f,this.e);this.s=AGc(this.k)} -function xUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=BD(pr((g=Jsb((new ZRc(b)).a.d,0),new aSc(g))),86);o=l?BD(vNb(l,(mTc(),_Sc)),86):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h<e;h++){c=VRc(c);d=VRc(d);u+=Edb(ED(vNb(c,(mTc(),cTc))));i+=Edb(ED(vNb(d,cTc)))}t=Edb(ED(vNb(o,(mTc(),fTc))));s=Edb(ED(vNb(l,fTc)));m=zUc(l,o);n=t+i+a.a+m-s-u;if(0<n){j=b;k=0;while(!!j&&j!=d){++k;j=BD(vNb(j,aTc),86)}if(j){r=n/k;j=b;while(j!=d){q=Edb(ED(vNb(j,fTc)))+n;yNb(j,fTc,q);p=Edb(ED(vNb(j,cTc)))+n;yNb(j,cTc,p);n-=r;j=BD(vNb(j,aTc),86)}}else{return}}++e;l.d.b==0?(l=JRc(new ZRc(b),e)):(l=BD(pr((f=Jsb((new ZRc(l)).a.d,0),new aSc(f))),86));o=l?BD(vNb(l,_Sc),86):null}} -function Cbc(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.f[b.p];k=b.o.b+a.n;c=a.c[b.p][2];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a-1+c));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))-k+c*a.e);++j;if(j>=a.i){++a.i;Ekb(a.a,meb(1));Ekb(a.b,k)}else{d=a.c[b.p][1];Nkb(a.a,j,meb(BD(Ikb(a.a,j),19).a+1-d));Nkb(a.b,j,Edb(ED(Ikb(a.b,j)))+k-d*a.e)}(a.q==(kAc(),dAc)&&(BD(Ikb(a.a,j),19).a>a.j||BD(Ikb(a.a,j-1),19).a>a.j)||a.q==gAc&&(Edb(ED(Ikb(a.b,j)))>a.k||Edb(ED(Ikb(a.b,j-1)))>a.k))&&(i=false);for(g=new Sr(ur(R_b(b).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);h=f.c.i;if(a.f[h.p]==j){l=Cbc(a,h);e=e+BD(l.a,19).a;i=i&&Ccb(DD(l.b))}}a.f[b.p]=j;e=e+a.c[b.p][0];return new vgd(meb(e),(Bcb(),i?true:false))} -function sPc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Lqb;g=new Rkb;qPc(a,c,a.d.fg(),g,l);qPc(a,d,a.d.gg(),g,l);a.b=0.2*(p=rPc(LAb(new YAb(null,new Kub(g,16)),new xPc)),q=rPc(LAb(new YAb(null,new Kub(g,16)),new zPc)),$wnd.Math.min(p,q));f=0;for(h=0;h<g.c.length-1;h++){i=(tCb(h,g.c.length),BD(g.c[h],112));for(o=h+1;o<g.c.length;o++){f+=pPc(a,i,(tCb(o,g.c.length),BD(g.c[o],112)))}}m=BD(vNb(b,(wtc(),jtc)),230);f>=2&&(r=WNc(g,true,m),!a.e&&(a.e=new ZOc(a)),VOc(a.e,r,g,a.b),undefined);uPc(g,m);wPc(g);n=-1;for(k=new olb(g);k.a<k.c.c.length;){j=BD(mlb(k),112);if($wnd.Math.abs(j.s-j.c)<qme){continue}n=$wnd.Math.max(n,j.o);a.d.dg(j,e,a.c)}a.d.a.a.$b();return n+1} -function aUb(a,b){var c,d,e,f,g;c=Edb(ED(vNb(b,(Nyc(),lyc))));c<2&&yNb(b,lyc,2);d=BD(vNb(b,Lwc),103);d==(ead(),cad)&&yNb(b,Lwc,a_b(b));e=BD(vNb(b,fyc),19);e.a==0?yNb(b,(wtc(),jtc),new Gub):yNb(b,(wtc(),jtc),new Hub(e.a));f=DD(vNb(b,Axc));f==null&&yNb(b,Axc,(Bcb(),PD(vNb(b,Swc))===PD((Aad(),wad))?true:false));MAb(new YAb(null,new Kub(b.a,16)),new dUb(a));MAb(LAb(new YAb(null,new Kub(b.b,16)),new fUb),new hUb(a));g=new oBc(b);yNb(b,(wtc(),otc),g);H2c(a.a);K2c(a.a,(qUb(),lUb),BD(vNb(b,Jwc),246));K2c(a.a,mUb,BD(vNb(b,sxc),246));K2c(a.a,nUb,BD(vNb(b,Iwc),246));K2c(a.a,oUb,BD(vNb(b,Exc),246));K2c(a.a,pUb,kNc(BD(vNb(b,Swc),218)));E2c(a.a,_Tb(b));yNb(b,itc,F2c(a.a,b))} -function fjc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=BD(vNb(m,(wtc(),Qsc)),15),!!o&&o.gc()!=0&&o.Hc(n))||(p=m.k!=(j0b(),g0b)&&n.k!=g0b,q=BD(vNb(m,Psc),10),r=BD(vNb(n,Psc),10),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=gjc(m,(Ucd(),Acd)),v=gjc(n,Rcd),t=t|(gjc(m,Rcd)||gjc(n,Acd)),w=t&&s||u||v,p&&w)||m.k==(j0b(),i0b)&&n.k==h0b||n.k==(j0b(),i0b)&&m.k==h0b){return false}k=a.c[b];f=a.c[c];e=LHc(a.e,k,f,(Ucd(),Tcd));i=LHc(a.i,k,f,zcd);Yic(a.f,k,f);j=Hic(a.b,k,f)+BD(e.a,19).a+BD(i.a,19).a+a.f.d;h=Hic(a.b,f,k)+BD(e.b,19).a+BD(i.b,19).a+a.f.b;if(a.a){l=BD(vNb(k,$sc),11);g=BD(vNb(f,$sc),11);d=JHc(a.g,l,g);j+=BD(d.a,19).a;h+=BD(d.b,19).a}return j>h} -function k6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=BD(vNb(a,(Nyc(),Vxc)),98);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new Rkb;l=new Rkb;for(e=new olb(b);e.a<e.c.c.length;){d=BD(mlb(e),10);switch(c.g){case 1:case 2:case 3:a6b(d);break;case 4:m=BD(vNb(d,Txc),8);n=!m?0:m.a;d.n.a=h*Edb(ED(vNb(d,(wtc(),htc))))-n;M_b(d,true,false);break;case 5:o=BD(vNb(d,Txc),8);p=!o?0:o.a;d.n.a=Edb(ED(vNb(d,(wtc(),htc))))-p;M_b(d,true,false);g.a=$wnd.Math.max(g.a,d.n.a+d.o.a/2);}switch(BD(vNb(d,(wtc(),Hsc)),61).g){case 1:d.n.b=i;j.c[j.c.length]=d;break;case 3:d.n.b=k;l.c[l.c.length]=d;}}switch(c.g){case 1:case 2:c6b(j,a);c6b(l,a);break;case 3:i6b(j,a);i6b(l,a);}} -function VHc(a,b){var c,d,e,f,g,h,i,j,k,l;k=new Rkb;l=new jkb;f=null;e=0;for(d=0;d<b.length;++d){c=b[d];XHc(f,c)&&(e=QHc(a,l,k,EHc,e));wNb(c,(wtc(),Psc))&&(f=BD(vNb(c,Psc),10));switch(c.k.g){case 0:for(i=Vq(Nq(V_b(c,(Ucd(),Acd)),new GIc));xc(i);){g=BD(yc(i),11);a.d[g.p]=e++;k.c[k.c.length]=g}e=QHc(a,l,k,EHc,e);for(j=Vq(Nq(V_b(c,Rcd),new GIc));xc(j);){g=BD(yc(j),11);a.d[g.p]=e++;k.c[k.c.length]=g}break;case 3:if(!V_b(c,DHc).dc()){g=BD(V_b(c,DHc).Xb(0),11);a.d[g.p]=e++;k.c[k.c.length]=g}V_b(c,EHc).dc()||Wjb(l,c);break;case 1:for(h=V_b(c,(Ucd(),Tcd)).Kc();h.Ob();){g=BD(h.Pb(),11);a.d[g.p]=e++;k.c[k.c.length]=g}V_b(c,zcd).Jc(new EIc(l,c));}}QHc(a,l,k,EHc,e);return k} -function y$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=Pje;k=Pje;h=Qje;i=Qje;for(m=new olb(b.i);m.a<m.c.c.length;){l=BD(mlb(m),65);e=BD(BD(Ohb(a.g,l.a),46).b,33);bld(e,l.b.c,l.b.d);j=$wnd.Math.min(j,e.i);k=$wnd.Math.min(k,e.j);h=$wnd.Math.max(h,e.i+e.g);i=$wnd.Math.max(i,e.j+e.f)}n=BD(hkd(a.c,(d0c(),W_c)),116);Afd(a.c,h-j+(n.b+n.c),i-k+(n.d+n.a),true,true);Efd(a.c,-j+n.b,-k+n.d);for(d=new Fyd(Wod(a.c));d.e!=d.i.gc();){c=BD(Dyd(d),79);g=itd(c,true,true);o=jtd(c);q=ltd(c);p=new f7c(o.i+o.g/2,o.j+o.f/2);f=new f7c(q.i+q.g/2,q.j+q.f/2);r=c7c(new f7c(f.a,f.b),p);l6c(r,o.g,o.f);P6c(p,r);s=c7c(new f7c(p.a,p.b),f);l6c(s,q.g,q.f);P6c(f,s);nmd(g,p.a,p.b);gmd(g,f.a,f.b)}} -function EYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;a.c=a.d;o=DD(vNb(b,(Nyc(),gyc)));n=o==null||(uCb(o),o);f=BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc));e=BD(vNb(b,Vxc),98);c=!(e==(dcd(),Zbd)||e==_bd||e==$bd);if(n&&(c||!f)){for(l=new olb(b.a);l.a<l.c.c.length;){j=BD(mlb(l),10);j.p=0}m=new Rkb;for(k=new olb(b.a);k.a<k.c.c.length;){j=BD(mlb(k),10);d=DYb(a,j,null);if(d){i=new XZb;tNb(i,b);yNb(i,Esc,BD(d.b,21));u_b(i.d,b.d);yNb(i,Hxc,null);for(h=BD(d.a,15).Kc();h.Ob();){g=BD(h.Pb(),10);Ekb(i.a,g);g.a=i}m.Fc(i)}}f&&(PD(vNb(b,twc))===PD((RXb(),OXb))?(a.c=a.b):(a.c=a.a))}else{m=new amb(OC(GC(KQ,1),cne,37,0,[b]))}PD(vNb(b,twc))!==PD((RXb(),QXb))&&(mmb(),m.ad(new HYb));return m} -function KTc(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,are),'ELK Mr. Tree'),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new NTc),bre),pqb((Csd(),wsd)))));p4c(a,are,ame,CTc);p4c(a,are,wme,20);p4c(a,are,_le,tme);p4c(a,are,vme,meb(1));p4c(a,are,zme,(Bcb(),true));p4c(a,are,Zpe,Ksd(vTc));p4c(a,are,Fme,Ksd(xTc));p4c(a,are,Tme,Ksd(yTc));p4c(a,are,Eme,Ksd(zTc));p4c(a,are,Gme,Ksd(wTc));p4c(a,are,Dme,Ksd(ATc));p4c(a,are,Hme,Ksd(DTc));p4c(a,are,Zqe,Ksd(ITc));p4c(a,are,$qe,Ksd(FTc))} -function zod(a){if(a.q)return;a.q=true;a.p=Lnd(a,0);a.a=Lnd(a,1);Qnd(a.a,0);a.f=Lnd(a,2);Qnd(a.f,1);Knd(a.f,2);a.n=Lnd(a,3);Knd(a.n,3);Knd(a.n,4);Knd(a.n,5);Knd(a.n,6);a.g=Lnd(a,4);Qnd(a.g,7);Knd(a.g,8);a.c=Lnd(a,5);Qnd(a.c,7);Qnd(a.c,8);a.i=Lnd(a,6);Qnd(a.i,9);Qnd(a.i,10);Qnd(a.i,11);Qnd(a.i,12);Knd(a.i,13);a.j=Lnd(a,7);Qnd(a.j,9);a.d=Lnd(a,8);Qnd(a.d,3);Qnd(a.d,4);Qnd(a.d,5);Qnd(a.d,6);Knd(a.d,7);Knd(a.d,8);Knd(a.d,9);Knd(a.d,10);a.b=Lnd(a,9);Knd(a.b,0);Knd(a.b,1);a.e=Lnd(a,10);Knd(a.e,1);Knd(a.e,2);Knd(a.e,3);Knd(a.e,4);Qnd(a.e,5);Qnd(a.e,6);Qnd(a.e,7);Qnd(a.e,8);Qnd(a.e,9);Qnd(a.e,10);Knd(a.e,11);a.k=Lnd(a,11);Knd(a.k,0);Knd(a.k,1);a.o=Mnd(a,12);a.s=Mnd(a,13)} -function AUb(a,b){b.dc()&&HVb(a.j,true,true,true,true);pb(b,(Ucd(),Gcd))&&HVb(a.j,true,true,true,false);pb(b,Bcd)&&HVb(a.j,false,true,true,true);pb(b,Ocd)&&HVb(a.j,true,true,false,true);pb(b,Qcd)&&HVb(a.j,true,false,true,true);pb(b,Hcd)&&HVb(a.j,false,true,true,false);pb(b,Ccd)&&HVb(a.j,false,true,false,true);pb(b,Pcd)&&HVb(a.j,true,false,false,true);pb(b,Ncd)&&HVb(a.j,true,false,true,false);pb(b,Lcd)&&HVb(a.j,true,true,true,true);pb(b,Ecd)&&HVb(a.j,true,true,true,true);pb(b,Lcd)&&HVb(a.j,true,true,true,true);pb(b,Dcd)&&HVb(a.j,true,true,true,true);pb(b,Mcd)&&HVb(a.j,true,true,true,true);pb(b,Kcd)&&HVb(a.j,true,true,true,true);pb(b,Jcd)&&HVb(a.j,true,true,true,true)} -function rZb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;f=new Rkb;for(j=new olb(d);j.a<j.c.c.length;){h=BD(mlb(j),441);g=null;if(h.f==(KAc(),IAc)){for(o=new olb(h.e);o.a<o.c.c.length;){n=BD(mlb(o),17);q=n.d.i;if(Q_b(q)==b){iZb(a,b,h,n,h.b,n.d)}else if(!c||f_b(q,c)){jZb(a,b,h,d,n)}else{m=oZb(a,b,c,n,h.b,IAc,g);m!=g&&(f.c[f.c.length]=m,true);m.c&&(g=m)}}}else{for(l=new olb(h.e);l.a<l.c.c.length;){k=BD(mlb(l),17);p=k.c.i;if(Q_b(p)==b){iZb(a,b,h,k,k.c,h.b)}else if(!c||f_b(p,c)){continue}else{m=oZb(a,b,c,k,h.b,HAc,g);m!=g&&(f.c[f.c.length]=m,true);m.c&&(g=m)}}}}for(i=new olb(f);i.a<i.c.c.length;){h=BD(mlb(i),441);Jkb(b.a,h.a,0)!=-1||Ekb(b.a,h.a);h.c&&(e.c[e.c.length]=h,true)}} -function SJc(a,b,c){var d,e,f,g,h,i,j,k,l,m;j=new Rkb;for(i=new olb(b.a);i.a<i.c.c.length;){g=BD(mlb(i),10);for(m=V_b(g,(Ucd(),zcd)).Kc();m.Ob();){l=BD(m.Pb(),11);for(e=new olb(l.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(!OZb(d)&&d.c.i.c==d.d.i.c||OZb(d)||d.d.i.c!=c){continue}j.c[j.c.length]=d}}}for(h=Su(c.a).Kc();h.Ob();){g=BD(h.Pb(),10);for(m=V_b(g,(Ucd(),Tcd)).Kc();m.Ob();){l=BD(m.Pb(),11);for(e=new olb(l.e);e.a<e.c.c.length;){d=BD(mlb(e),17);if(!OZb(d)&&d.c.i.c==d.d.i.c||OZb(d)||d.c.i.c!=b){continue}k=new Bib(j,j.c.length);f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sCb(k.b>0),BD(k.a.Xb(k.c=--k.b),17))}k.b>0&&uib(k)}}}} -function Vmd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}e=o1d((O6d(),M6d),c).$k();if(e){return e.Aj().Nh().Ih(e,d)}h=o1d(M6d,c).al();if(h){if(d==null){return null}i=BD(d,15);if(i.dc()){return ''}m=new Hfb;for(g=i.Kc();g.Ob();){f=g.Pb();Efb(m,h.Aj().Nh().Ih(h,f));m.a+=' '}return lcb(m,m.a.length-1)}l=o1d(M6d,c).bl();if(!l.dc()){for(k=l.Kc();k.Ob();){j=BD(k.Pb(),148);if(j.wj(d)){try{m=j.Aj().Nh().Ih(j,d);if(m!=null){return m}}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}}}throw vbb(new Wdb("Invalid value: '"+d+"' for datatype :"+c.ne()))}BD(c,834).Fj();return d==null?null:JD(d,172)?''+BD(d,172).a:rb(d)==$J?CQd(Pmd[0],BD(d,199)):fcb(d)} -function zQc(a){var b,c,d,e,f,g,h,i,j,k;j=new Psb;h=new Psb;for(f=new olb(a);f.a<f.c.c.length;){d=BD(mlb(f),128);d.v=0;d.n=d.i.c.length;d.u=d.t.c.length;d.n==0&&(Gsb(j,d,j.c.b,j.c),true);d.u==0&&d.r.a.gc()==0&&(Gsb(h,d,h.c.b,h.c),true)}g=-1;while(j.b!=0){d=BD(Vt(j,0),128);for(c=new olb(d.t);c.a<c.c.c.length;){b=BD(mlb(c),268);k=b.b;k.v=$wnd.Math.max(k.v,d.v+1);g=$wnd.Math.max(g,k.v);--k.n;k.n==0&&(Gsb(j,k,j.c.b,j.c),true)}}if(g>-1){for(e=Jsb(h,0);e.b!=e.d.c;){d=BD(Xsb(e),128);d.v=g}while(h.b!=0){d=BD(Vt(h,0),128);for(c=new olb(d.i);c.a<c.c.c.length;){b=BD(mlb(c),268);i=b.a;if(i.r.a.gc()!=0){continue}i.v=$wnd.Math.min(i.v,d.v-1);--i.u;i.u==0&&(Gsb(h,i,h.c.b,h.c),true)}}}} -function A6c(a,b,c,d,e){var f,g,h,i;i=Pje;g=false;h=v6c(a,c7c(new f7c(b.a,b.b),a),P6c(new f7c(c.a,c.b),e),c7c(new f7c(d.a,d.b),c));f=!!h&&!($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse||$wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse);h=v6c(a,c7c(new f7c(b.a,b.b),a),c,e);!!h&&(($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse)==($wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse)||f?(i=$wnd.Math.min(i,U6c(c7c(h,c)))):(g=true));h=v6c(a,c7c(new f7c(b.a,b.b),a),d,e);!!h&&(g||($wnd.Math.abs(h.a-a.a)<=nse&&$wnd.Math.abs(h.b-a.b)<=nse)==($wnd.Math.abs(h.a-b.a)<=nse&&$wnd.Math.abs(h.b-b.b)<=nse)||f)&&(i=$wnd.Math.min(i,U6c(c7c(h,d))));return i} -function cTb(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,Rme),Sme),"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 fTb),ume)));p4c(a,Rme,Ame,Ksd(VSb));p4c(a,Rme,Cme,(Bcb(),true));p4c(a,Rme,Fme,Ksd(YSb));p4c(a,Rme,Tme,Ksd(ZSb));p4c(a,Rme,Eme,Ksd($Sb));p4c(a,Rme,Gme,Ksd(XSb));p4c(a,Rme,Dme,Ksd(_Sb));p4c(a,Rme,Hme,Ksd(aTb));p4c(a,Rme,Mme,Ksd(USb));p4c(a,Rme,Ome,Ksd(SSb));p4c(a,Rme,Pme,Ksd(TSb));p4c(a,Rme,Qme,Ksd(WSb));p4c(a,Rme,Nme,Ksd(RSb))} -function BFc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Interactive crossing minimization',1);g=0;for(f=new olb(a.b);f.a<f.c.c.length;){d=BD(mlb(f),29);d.p=g++}m=WZb(a);q=new iHc(m.length);$Ic(new amb(OC(GC(qY,1),Uhe,225,0,[q])),m);p=0;g=0;for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);c=0;l=0;for(k=new olb(d.a);k.a<k.c.c.length;){i=BD(mlb(k),10);if(i.n.a>0){c+=i.n.a+i.o.a/2;++l}for(o=new olb(i.j);o.a<o.c.c.length;){n=BD(mlb(o),11);n.p=p++}}l>0&&(c/=l);r=KC(UD,Vje,25,d.a.c.length,15,1);h=0;for(j=new olb(d.a);j.a<j.c.c.length;){i=BD(mlb(j),10);i.p=h++;r[i.p]=AFc(i,c);i.k==(j0b(),g0b)&&yNb(i,(wtc(),atc),r[i.p])}mmb();Okb(d.a,new GFc(r));YDc(q,m,g,true);++g}Qdd(b)} -function Zfe(a,b){var c,d,e,f,g,h,i,j,k;if(b.e==5){Wfe(a,b);return}j=b;if(j.b==null||a.b==null)return;Yfe(a);Vfe(a);Yfe(j);Vfe(j);c=KC(WD,oje,25,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){c[k++]=a.b[d++];c[k++]=a.b[d++]}else if(f>=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i<e){g+=2}else{throw vbb(new hz('Token#subtractRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] - ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=KC(WD,oje,25,k,15,1);$fb(c,0,a.b,0,k)} -function BJb(a){var b,c,d,e,f,g,h;if(a.A.dc()){return}if(a.A.Hc((tdd(),rdd))){BD(Mpb(a.b,(Ucd(),Acd)),124).k=true;BD(Mpb(a.b,Rcd),124).k=true;b=a.q!=(dcd(),_bd)&&a.q!=$bd;ZGb(BD(Mpb(a.b,zcd),124),b);ZGb(BD(Mpb(a.b,Tcd),124),b);ZGb(a.g,b);if(a.A.Hc(sdd)){BD(Mpb(a.b,Acd),124).j=true;BD(Mpb(a.b,Rcd),124).j=true;BD(Mpb(a.b,zcd),124).k=true;BD(Mpb(a.b,Tcd),124).k=true;a.g.k=true}}if(a.A.Hc(qdd)){a.a.j=true;a.a.k=true;a.g.j=true;a.g.k=true;h=a.B.Hc((Idd(),Edd));for(e=wJb(),f=0,g=e.length;f<g;++f){d=e[f];c=BD(Mpb(a.i,d),306);if(c){if(sJb(d)){c.j=true;c.k=true}else{c.j=!h;c.k=!h}}}}if(a.A.Hc(pdd)&&a.B.Hc((Idd(),Ddd))){a.g.j=true;a.g.j=true;if(!a.a.j){a.a.j=true;a.a.k=true;a.a.e=true}}} -function GJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(d=new olb(a.e.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);n=a.i[e.p];j=n.a.e;i=n.d.e;e.n.b=j;r=i-j-e.o.b;b=bKc(e);m=(Izc(),(!e.q?(mmb(),mmb(),kmb):e.q)._b((Nyc(),Cxc))?(l=BD(vNb(e,Cxc),197)):(l=BD(vNb(Q_b(e),Dxc),197)),l);b&&(m==Fzc||m==Ezc)&&(e.o.b+=r);if(b&&(m==Hzc||m==Fzc||m==Ezc)){for(p=new olb(e.j);p.a<p.c.c.length;){o=BD(mlb(p),11);if((Ucd(),Ecd).Hc(o.j)){k=BD(Ohb(a.k,o),121);o.n.b=k.e-j}}for(h=new olb(e.b);h.a<h.c.c.length;){g=BD(mlb(h),70);q=BD(vNb(e,xxc),21);q.Hc((Hbd(),Ebd))?(g.n.b+=r):q.Hc(Fbd)&&(g.n.b+=r/2)}(m==Fzc||m==Ezc)&&V_b(e,(Ucd(),Rcd)).Jc(new $Kc(r))}}}} -function Lwb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;if(!a.b){return false}g=null;m=null;i=new exb(null,null);e=1;i.a[1]=a.b;l=i;while(l.a[e]){j=e;h=m;m=l;l=l.a[e];d=a.a.ue(b,l.d);e=d<0?0:1;d==0&&(!c.c||wtb(l.e,c.d))&&(g=l);if(!(!!l&&l.b)&&!Hwb(l.a[e])){if(Hwb(l.a[1-e])){m=m.a[j]=Owb(l,e)}else if(!Hwb(l.a[1-e])){n=m.a[1-j];if(n){if(!Hwb(n.a[1-j])&&!Hwb(n.a[j])){m.b=false;n.b=true;l.b=true}else{f=h.a[1]==m?1:0;Hwb(n.a[j])?(h.a[f]=Nwb(m,j)):Hwb(n.a[1-j])&&(h.a[f]=Owb(m,j));l.b=h.a[f].b=true;h.a[f].a[0].b=false;h.a[f].a[1].b=false}}}}}if(g){c.b=true;c.d=g.e;if(l!=g){k=new exb(l.d,l.e);Mwb(a,i,g,k);m==g&&(m=k)}m.a[m.a[1]==l?1:0]=l.a[!l.a[0]?1:0];--a.c}a.b=i.a[1];!!a.b&&(a.b.b=false);return c.b} -function cic(a){var b,c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);for(i=d.c.Kc();i.Ob();){h=BD(i.Pb(),57);if(d.a==h.a){continue}fad(a.a.d)?(l=a.a.g.Oe(d,h)):(l=a.a.g.Pe(d,h));f=d.b.a+d.d.b+l-h.b.a;f=$wnd.Math.ceil(f);f=$wnd.Math.max(0,f);if(vgc(d,h)){g=nGb(new pGb,a.d);j=QD($wnd.Math.ceil(h.b.a-d.b.a));b=j-(h.b.a-d.b.a);k=ugc(d).a;c=d;if(!k){k=ugc(h).a;b=-b;c=h}if(k){c.b.a-=b;k.n.a-=b}AFb(DFb(CFb(EFb(BFb(new FFb,$wnd.Math.max(0,j)),1),g),a.c[d.a.d]));AFb(DFb(CFb(EFb(BFb(new FFb,$wnd.Math.max(0,-j)),1),g),a.c[h.a.d]))}else{m=1;(JD(d.g,145)&&JD(h.g,10)||JD(h.g,145)&&JD(d.g,10))&&(m=2);AFb(DFb(CFb(EFb(BFb(new FFb,QD(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} -function pEc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(c){d=-1;k=new Bib(b,0);while(k.b<k.d.gc()){h=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),10));l=a.c[h.c.p][h.p].a;if(l==null){g=d+1;f=new Bib(b,k.b);while(f.b<f.d.gc()){m=tEc(a,(sCb(f.b<f.d.gc()),BD(f.d.Xb(f.c=f.b++),10))).a;if(m!=null){g=(uCb(m),m);break}}l=(d+g)/2;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=(uCb(l),l);a.c[h.c.p][h.p].b=1}d=(uCb(l),l)}}else{e=0;for(j=new olb(b);j.a<j.c.c.length;){h=BD(mlb(j),10);a.c[h.c.p][h.p].a!=null&&(e=$wnd.Math.max(e,Edb(a.c[h.c.p][h.p].a)))}e+=2;for(i=new olb(b);i.a<i.c.c.length;){h=BD(mlb(i),10);if(a.c[h.c.p][h.p].a==null){l=Cub(a.i,24)*lke*e-1;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=l;a.c[h.c.p][h.p].b=1}}}} -function CZd(){rEd(b5,new i$d);rEd(a5,new P$d);rEd(c5,new u_d);rEd(d5,new M_d);rEd(f5,new P_d);rEd(h5,new S_d);rEd(g5,new V_d);rEd(i5,new Y_d);rEd(k5,new GZd);rEd(l5,new JZd);rEd(m5,new MZd);rEd(n5,new PZd);rEd(o5,new SZd);rEd(p5,new VZd);rEd(q5,new YZd);rEd(t5,new _Zd);rEd(v5,new c$d);rEd(x6,new f$d);rEd(j5,new l$d);rEd(u5,new o$d);rEd(wI,new r$d);rEd(GC(SD,1),new u$d);rEd(xI,new x$d);rEd(yI,new A$d);rEd($J,new D$d);rEd(O4,new G$d);rEd(BI,new J$d);rEd(T4,new M$d);rEd(U4,new S$d);rEd(O9,new V$d);rEd(E9,new Y$d);rEd(FI,new _$d);rEd(JI,new c_d);rEd(AI,new f_d);rEd(MI,new i_d);rEd(DK,new l_d);rEd(v8,new o_d);rEd(u8,new r_d);rEd(UI,new x_d);rEd(ZI,new A_d);rEd(X4,new D_d);rEd(V4,new G_d)} -function hA(a,b,c){var d,e,f,g,h,i,j,k,l;!c&&(c=TA(b.q.getTimezoneOffset()));e=(b.q.getTimezoneOffset()-c.a)*60000;h=new gB(wbb(Cbb(b.q.getTime()),e));i=h;if(h.q.getTimezoneOffset()!=b.q.getTimezoneOffset()){e>0?(e-=86400000):(e+=86400000);i=new gB(wbb(Cbb(b.q.getTime()),e))}k=new Vfb;j=a.a.length;for(f=0;f<j;){d=bfb(a.a,f);if(d>=97&&d<=122||d>=65&&d<=90){for(g=f+1;g<j&&bfb(a.a,g)==d;++g);vA(k,d,g-f,h,i,c);f=g}else if(d==39){++f;if(f<j&&bfb(a.a,f)==39){k.a+="'";++f;continue}l=false;while(!l){g=f;while(g<j&&bfb(a.a,g)!=39){++g}if(g>=j){throw vbb(new Wdb("Missing trailing '"))}g+1<j&&bfb(a.a,g+1)==39?++g:(l=true);Qfb(k,qfb(a.a,f,g));f=g+1}}else{k.a+=String.fromCharCode(d);++f}}return k.a} -function MEc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),233);Edb(REc(c.g,c.d[0]).a);c.b=null;if(!!c.e&&c.e.gc()>0&&c.c==0){!b&&(b=new Rkb);b.c[b.c.length]=c}}if(b){while(b.c.length!=0){c=BD(Kkb(b,0),233);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new Rkb),new olb(c.b));f.a<f.c.c.length;){e=BD(mlb(f),233);if(Gdb(REc(e.g,e.d[0]).a)==Gdb(REc(c.g,c.d[0]).a)){if(Jkb(a,e,0)>Jkb(a,c,0)){return new vgd(e,c)}}else if(Edb(REc(e.g,e.d[0]).a)>Edb(REc(c.g,c.d[0]).a)){return new vgd(e,c)}}}for(h=(!c.e&&(c.e=new Rkb),c.e).Kc();h.Ob();){g=BD(h.Pb(),233);i=(!g.b&&(g.b=new Rkb),g.b);wCb(0,i.c.length);aCb(i.c,0,c);g.c==i.c.length&&(b.c[b.c.length]=g,true)}}}return null} -function wlb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return Xhe}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new xwb(She,'[',']');for(e=a,f=0,g=e.length;f<g;++f){d=e[f];if(d!=null&&(rb(d).i&4)!=0){if(Array.isArray(d)&&(k=HC(d),!(k>=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new Wfb(c.d)):Qfb(c.a,c.b);Nfb(c.a,'[...]')}else{h=CD(d);j=new Vqb(b);uwb(c,wlb(h,j))}}else JD(d,177)?uwb(c,Xlb(BD(d,177))):JD(d,190)?uwb(c,Qlb(BD(d,190))):JD(d,195)?uwb(c,Rlb(BD(d,195))):JD(d,2012)?uwb(c,Wlb(BD(d,2012))):JD(d,48)?uwb(c,Ulb(BD(d,48))):JD(d,364)?uwb(c,Vlb(BD(d,364))):JD(d,832)?uwb(c,Tlb(BD(d,832))):JD(d,104)&&uwb(c,Slb(BD(d,104)))}else{uwb(c,d==null?Xhe:fcb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} -function xQb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=itd(b,false,false);r=ofd(h);d&&(r=w7c(r));t=Edb(ED(hkd(b,(CPb(),vPb))));q=(sCb(r.b!=0),BD(r.a.a.c,8));l=BD(Ut(r,1),8);if(r.b>2){k=new Rkb;Gkb(k,new Jib(r,1,r.b));f=sQb(k,t+a.a);s=new XOb(f);tNb(s,b);c.c[c.c.length]=s}else{d?(s=BD(Ohb(a.b,jtd(b)),266)):(s=BD(Ohb(a.b,ltd(b)),266))}i=jtd(b);d&&(i=ltd(b));g=zQb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new f7c(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new f7c((l.a+q.a)/2,l.b)}d?Rhb(a.d,b,new ZOb(s,g,p,j)):Rhb(a.c,b,new ZOb(s,g,p,j));Rhb(a.b,b,s);o=(!b.n&&(b.n=new cUd(D2,b,1,7)),b.n);for(n=new Fyd(o);n.e!=n.i.gc();){m=BD(Dyd(n),137);e=wQb(a,m,true,0,0);c.c[c.c.length]=e}} -function wPc(a){var b,c,d,e,f,g,h,i,j,k;j=new Rkb;h=new Rkb;for(g=new olb(a);g.a<g.c.c.length;){e=BD(mlb(g),112);pOc(e,e.f.c.length);qOc(e,e.k.c.length);e.d==0&&(j.c[j.c.length]=e,true);e.i==0&&e.e.b==0&&(h.c[h.c.length]=e,true)}d=-1;while(j.c.length!=0){e=BD(Kkb(j,0),112);for(c=new olb(e.k);c.a<c.c.c.length;){b=BD(mlb(c),129);k=b.b;rOc(k,$wnd.Math.max(k.o,e.o+1));d=$wnd.Math.max(d,k.o);pOc(k,k.d-1);k.d==0&&(j.c[j.c.length]=k,true)}}if(d>-1){for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),112);e.o=d}while(h.c.length!=0){e=BD(Kkb(h,0),112);for(c=new olb(e.f);c.a<c.c.c.length;){b=BD(mlb(c),129);i=b.a;if(i.e.b>0){continue}rOc(i,$wnd.Math.min(i.o,e.o-1));qOc(i,i.i-1);i.i==0&&(h.c[h.c.length]=i,true)}}}} -function QQd(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=FQd);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new nSd(a,1,2,j,a.c);!c?(c=i):c.Ei(i)}if(j!=b){if(JD(a.Cb,284)){if(a.Db>>16==-10){c=BD(a.Cb,284).nk(b,c)}else if(a.Db>>16==-15){!b&&(b=(jGd(),YFd));!j&&(j=(jGd(),YFd));if(a.Cb.nh()){i=new pSd(a.Cb,1,13,j,b,HLd(QSd(BD(a.Cb,59)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,88)){if(a.Db>>16==-23){JD(b,88)||(b=(jGd(),_Fd));JD(j,88)||(j=(jGd(),_Fd));if(a.Cb.nh()){i=new pSd(a.Cb,1,10,j,b,HLd(VKd(BD(a.Cb,26)),a),false);!c?(c=i):c.Ei(i)}}}else if(JD(a.Cb,444)){h=BD(a.Cb,836);g=(!h.b&&(h.b=new RYd(new NYd)),h.b);for(f=(d=new nib((new eib(g.a)).a),new ZYd(d));f.a.b;){e=BD(lib(f.a).cd(),87);c=QQd(e,MQd(e,h),c)}}}return c} -function O1b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Ccb(DD(hkd(a,(Nyc(),fxc))));m=BD(hkd(a,Yxc),21);i=false;j=false;l=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=BD(Dyd(l),118);h=0;for(e=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!f.d&&(f.d=new y5d(B2,f,8,5)),f.d),(!f.e&&(f.e=new y5d(B2,f,7,4)),f.e)])));Qr(e);){d=BD(Rr(e),79);k=g&&Qld(d)&&Ccb(DD(hkd(d,gxc)));c=ELd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),f)?a==Xod(atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))):a==Xod(atd(BD(qud((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b),0),82)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((rcd(),ncd))&&(!f.n&&(f.n=new cUd(D2,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((Orc(),Hrc));j&&b.Fc((Orc(),Irc))} -function zfd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=BD(hkd(a,(Y9c(),Y8c)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((tdd(),rdd))){k=BD(hkd(a,t9c),98);d=2;c=2;e=2;f=2;b=!Xod(a)?BD(hkd(a,z8c),103):BD(hkd(Xod(a),z8c),103);for(j=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));j.e!=j.i.gc();){i=BD(Dyd(j),118);l=BD(hkd(i,A9c),61);if(l==(Ucd(),Scd)){l=lfd(i,b);jkd(i,A9c,l)}if(k==(dcd(),$bd)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Afd(a,h,g,true,true)} -function lnc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=BD(GAb(VAb(JAb(new YAb(null,new Kub(b.d,16)),new pnc(c)),new rnc(c)),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)]))),15);l=Ohe;k=Rie;for(i=new olb(b.b.j);i.a<i.c.c.length;){h=BD(mlb(i),11);if(h.j==c){l=$wnd.Math.min(l,h.p);k=$wnd.Math.max(k,h.p)}}if(l==Ohe){for(g=0;g<s.gc();g++){ojc(BD(s.Xb(g),101),c,g)}}else{t=KC(WD,oje,25,e.length,15,1);Elb(t,t.length);for(r=s.Kc();r.Ob();){q=BD(r.Pb(),101);f=BD(Ohb(a.b,q),177);j=0;for(p=l;p<=k;p++){f[p]&&(j=$wnd.Math.max(j,d[p]))}if(q.i){n=q.i.c;u=new Tqb;for(m=0;m<e.length;m++){e[n][m]&&Qqb(u,meb(t[m]))}while(Rqb(u,meb(j))){++j}}ojc(q,c,j);for(o=l;o<=k;o++){f[o]&&(d[o]=j+1)}!!q.i&&(t[q.i.c]=j)}}} -function YJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;e=null;for(d=new olb(b.a);d.a<d.c.c.length;){c=BD(mlb(d),10);bKc(c)?(f=(h=nGb(oGb(new pGb,c),a.f),i=nGb(oGb(new pGb,c),a.f),j=new rKc(c,true,h,i),k=c.o.b,l=(Izc(),(!c.q?(mmb(),mmb(),kmb):c.q)._b((Nyc(),Cxc))?(m=BD(vNb(c,Cxc),197)):(m=BD(vNb(Q_b(c),Dxc),197)),m),n=10000,l==Ezc&&(n=1),o=AFb(DFb(CFb(BFb(EFb(new FFb,n),QD($wnd.Math.ceil(k))),h),i)),l==Fzc&&Qqb(a.d,o),ZJc(a,Su(V_b(c,(Ucd(),Tcd))),j),ZJc(a,V_b(c,zcd),j),j)):(f=(p=nGb(oGb(new pGb,c),a.f),MAb(JAb(new YAb(null,new Kub(c.j,16)),new EKc),new GKc(a,p)),new rKc(c,false,p,p)));a.i[c.p]=f;if(e){g=e.c.d.a+jBc(a.n,e.c,c)+c.d.d;e.b||(g+=e.c.o.b);AFb(DFb(CFb(EFb(BFb(new FFb,QD($wnd.Math.ceil(g))),0),e.d),f.a))}e=f}} -function s9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;Odd(b,'Label dummy insertions',1);l=new Rkb;g=Edb(ED(vNb(a,(Nyc(),nyc))));j=Edb(ED(vNb(a,ryc)));k=BD(vNb(a,Lwc),103);for(n=new olb(a.a);n.a<n.c.c.length;){m=BD(mlb(n),10);for(f=new Sr(ur(U_b(m).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(e.c.i!=e.d.i&&Lq(e.b,p9b)){p=t9b(e);o=Pu(e.b.c.length);c=r9b(a,e,p,o);l.c[l.c.length]=c;d=c.o;h=new Bib(e.b,0);while(h.b<h.d.gc()){i=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),70));if(PD(vNb(i,Qwc))===PD((qad(),nad))){if(k==(ead(),dad)||k==_9c){d.a+=i.o.a+j;d.b=$wnd.Math.max(d.b,i.o.b)}else{d.a=$wnd.Math.max(d.a,i.o.a);d.b+=i.o.b+j}o.c[o.c.length]=i;uib(h)}}if(k==(ead(),dad)||k==_9c){d.a-=j;d.b+=g+p}else{d.b+=g-j+p}}}}Gkb(a.a,l);Qdd(b)} -function eYb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;f=new qYb(b);l=_Xb(a,b,f);n=$wnd.Math.max(Edb(ED(vNb(b,(Nyc(),Zwc)))),1);for(k=new olb(l.a);k.a<k.c.c.length;){j=BD(mlb(k),46);i=dYb(BD(j.a,8),BD(j.b,8),n);o=true;o=o&iYb(c,new f7c(i.c,i.d));o=o&iYb(c,O6c(new f7c(i.c,i.d),i.b,0));o=o&iYb(c,O6c(new f7c(i.c,i.d),0,i.a));o&iYb(c,O6c(new f7c(i.c,i.d),i.b,i.a))}m=f.d;h=dYb(BD(l.b.a,8),BD(l.b.b,8),n);if(m==(Ucd(),Tcd)||m==zcd){d.c[m.g]=$wnd.Math.min(d.c[m.g],h.d);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.d+h.a)}else{d.c[m.g]=$wnd.Math.min(d.c[m.g],h.c);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.c+h.b)}e=Qje;g=f.c.i.d;switch(m.g){case 4:e=g.c;break;case 2:e=g.b;break;case 1:e=g.a;break;case 3:e=g.d;}d.a[m.g]=$wnd.Math.max(d.a[m.g],e);return f} -function eKd(b){var c,d,e,f;d=b.D!=null?b.D:b.B;c=hfb(d,wfb(91));if(c!=-1){e=d.substr(0,c);f=new Hfb;do f.a+='[';while((c=gfb(d,91,++c))!=-1);if(dfb(e,Khe))f.a+='Z';else if(dfb(e,Eve))f.a+='B';else if(dfb(e,Fve))f.a+='C';else if(dfb(e,Gve))f.a+='D';else if(dfb(e,Hve))f.a+='F';else if(dfb(e,Ive))f.a+='I';else if(dfb(e,Jve))f.a+='J';else if(dfb(e,Kve))f.a+='S';else{f.a+='L';f.a+=''+e;f.a+=';'}try{return null}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}else if(hfb(d,wfb(46))==-1){if(dfb(d,Khe))return sbb;else if(dfb(d,Eve))return SD;else if(dfb(d,Fve))return TD;else if(dfb(d,Gve))return UD;else if(dfb(d,Hve))return VD;else if(dfb(d,Ive))return WD;else if(dfb(d,Jve))return XD;else if(dfb(d,Kve))return rbb}return null} -function $1b(a,b,c){var d,e,f,g,h,i,j,k;j=new b0b(c);tNb(j,b);yNb(j,(wtc(),$sc),b);j.o.a=b.g;j.o.b=b.f;j.n.a=b.i;j.n.b=b.j;Ekb(c.a,j);Rhb(a.a,b,j);((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0||Ccb(DD(hkd(b,(Nyc(),fxc)))))&&yNb(j,wsc,(Bcb(),true));i=BD(vNb(c,Ksc),21);k=BD(vNb(j,(Nyc(),Vxc)),98);k==(dcd(),ccd)?yNb(j,Vxc,bcd):k!=bcd&&i.Fc((Orc(),Krc));d=BD(vNb(c,Lwc),103);for(h=new Fyd((!b.c&&(b.c=new cUd(F2,b,9,9)),b.c));h.e!=h.i.gc();){g=BD(Dyd(h),118);Ccb(DD(hkd(g,Jxc)))||_1b(a,g,j,i,d,k)}for(f=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));f.e!=f.i.gc();){e=BD(Dyd(f),137);!Ccb(DD(hkd(e,Jxc)))&&!!e.a&&Ekb(j.b,Z1b(e))}Ccb(DD(vNb(j,pwc)))&&i.Fc((Orc(),Frc));if(Ccb(DD(vNb(j,exc)))){i.Fc((Orc(),Jrc));i.Fc(Irc);yNb(j,Vxc,bcd)}return j} -function F4b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;h=BD(Ohb(b.c,a),459);s=b.a.c;i=b.a.c+b.a.b;C=h.f;D=h.a;g=C<D;p=new f7c(s,C);t=new f7c(i,D);e=(s+i)/2;q=new f7c(e,C);u=new f7c(e,D);f=G4b(a,C,D);w=A0b(b.B);A=new f7c(e,f);B=A0b(b.D);c=j6c(OC(GC(m1,1),nie,8,0,[w,A,B]));n=false;r=b.B.i;if(!!r&&!!r.c&&h.d){j=g&&r.p<r.c.a.c.length-1||!g&&r.p>0;if(j){if(j){m=r.p;g?++m:--m;l=BD(Ikb(r.c.a,m),10);d=I4b(l);n=!(s6c(d,w,c[0])||n6c(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p<v.c.a.c.length-1;if(k){m=v.p;g?--m:++m;l=BD(Ikb(v.c.a,m),10);d=I4b(l);o=!(s6c(d,c[0],B)||n6c(d,c[0],B))}else{o=true}}n&&o&&Dsb(a.a,A);n||n7c(a.a,OC(GC(m1,1),nie,8,0,[p,q]));o||n7c(a.a,OC(GC(m1,1),nie,8,0,[u,t]))} -function yfd(a,b){var c,d,e,f,g,h,i,j;if(JD(a.Ug(),160)){yfd(BD(a.Ug(),160),b);b.a+=' > '}else{b.a+='Root '}c=a.Tg().zb;dfb(c.substr(0,3),'Elk')?Qfb(b,c.substr(3)):(b.a+=''+c,b);e=a.zg();if(e){Qfb((b.a+=' ',b),e);return}if(JD(a,354)){j=BD(a,137).a;if(j){Qfb((b.a+=' ',b),j);return}}for(g=new Fyd(a.Ag());g.e!=g.i.gc();){f=BD(Dyd(g),137);j=f.a;if(j){Qfb((b.a+=' ',b),j);return}}if(JD(a,352)){d=BD(a,79);!d.b&&(d.b=new y5d(z2,d,4,7));if(d.b.i!=0&&(!d.c&&(d.c=new y5d(z2,d,5,8)),d.c.i!=0)){b.a+=' (';h=new Oyd((!d.b&&(d.b=new y5d(z2,d,4,7)),d.b));while(h.e!=h.i.gc()){h.e>0&&(b.a+=She,b);yfd(BD(Dyd(h),160),b)}b.a+=gne;i=new Oyd((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=She,b);yfd(BD(Dyd(i),160),b)}b.a+=')'}}} -function y2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=BD(vNb(a,(wtc(),$sc)),79);if(!f){return}d=a.a;e=new g7c(c);P6c(e,C2b(a));if(f_b(a.d.i,a.c.i)){m=a.c;l=l7c(OC(GC(m1,1),nie,8,0,[m.n,m.a]));c7c(l,c)}else{l=A0b(a.c)}Gsb(d,l,d.a,d.a.a);n=A0b(a.d);vNb(a,utc)!=null&&P6c(n,BD(vNb(a,utc),8));Gsb(d,n,d.c.b,d.c);q7c(d,e);g=itd(f,true,true);kmd(g,BD(qud((!f.b&&(f.b=new y5d(z2,f,4,7)),f.b),0),82));lmd(g,BD(qud((!f.c&&(f.c=new y5d(z2,f,5,8)),f.c),0),82));ifd(d,g);for(k=new olb(a.b);k.a<k.c.c.length;){j=BD(mlb(k),70);h=BD(vNb(j,$sc),137);cld(h,j.o.a);ald(h,j.o.b);bld(h,j.n.a+e.a,j.n.b+e.b);jkd(h,(I9b(),H9b),DD(vNb(j,H9b)))}i=BD(vNb(a,(Nyc(),jxc)),74);if(i){q7c(i,e);jkd(f,jxc,i)}else{jkd(f,jxc,null)}b==(Aad(),yad)?jkd(f,Swc,yad):jkd(f,Swc,null)} -function mJc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;n=b.c.length;m=0;for(l=new olb(a.b);l.a<l.c.c.length;){k=BD(mlb(l),29);r=k.a;if(r.c.length==0){continue}q=new olb(r);j=0;s=null;e=BD(mlb(q),10);f=null;while(e){f=BD(Ikb(b,e.p),257);if(f.c>=0){i=null;h=new Bib(k.a,j+1);while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),10));i=BD(Ikb(b,g.p),257);if(i.d==f.d&&i.c<f.c){break}else{i=null}}if(i){if(s){Nkb(d,e.p,meb(BD(Ikb(d,e.p),19).a-1));BD(Ikb(c,s.p),15).Mc(f)}f=yJc(f,e,n++);b.c[b.c.length]=f;Ekb(c,new Rkb);if(s){BD(Ikb(c,s.p),15).Fc(f);Ekb(d,meb(1))}else{Ekb(d,meb(0))}}}o=null;if(q.a<q.c.c.length){o=BD(mlb(q),10);p=BD(Ikb(b,o.p),257);BD(Ikb(c,e.p),15).Fc(p);Nkb(d,o.p,meb(BD(Ikb(d,o.p),19).a+1))}f.d=m;f.c=j++;s=e;e=o}++m}} -function u6c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=a;k=c7c(new f7c(b.a,b.b),a);j=c;l=c7c(new f7c(d.a,d.b),c);m=i.a;q=i.b;o=j.a;s=j.b;n=k.a;r=k.b;p=l.a;t=l.b;e=p*r-n*t;Iy();My(Jqe);if($wnd.Math.abs(0-e)<=Jqe||0==e||isNaN(0)&&isNaN(e)){return false}g=1/e*((m-o)*r-(q-s)*n);h=1/e*-(-(m-o)*t+(q-s)*p);f=(null,My(Jqe),($wnd.Math.abs(0-g)<=Jqe||0==g||isNaN(0)&&isNaN(g)?0:0<g?-1:0>g?1:Ny(isNaN(0),isNaN(g)))<0&&(null,My(Jqe),($wnd.Math.abs(g-1)<=Jqe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:Ny(isNaN(g),isNaN(1)))<0)&&(null,My(Jqe),($wnd.Math.abs(0-h)<=Jqe||0==h||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:Ny(isNaN(0),isNaN(h)))<0)&&(null,My(Jqe),($wnd.Math.abs(h-1)<=Jqe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:Ny(isNaN(h),isNaN(1)))<0));return f} -function z6d(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new usb(new nsb(a));l.b!=l.c.a.d;){k=tsb(l);h=BD(k.d,56);b=BD(k.e,56);g=h.Tg();for(p=0,u=(g.i==null&&TKd(g),g.i).length;p<u;++p){j=(f=(g.i==null&&TKd(g),g.i),p>=0&&p<f.length?f[p]:null);if(j.Ij()&&!j.Jj()){if(JD(j,99)){i=BD(j,18);(i.Bb&ote)==0&&(w=zUd(i),!(!!w&&(w.Bb&ote)!=0))&&y6d(a,i,h,b)}else{Q6d();if(BD(j,66).Oj()){c=(v=j,BD(!v?null:BD(b,49).xh(v),153));if(c){n=BD(h.ah(j),153);d=c.gc();for(q=0,o=n.gc();q<o;++q){m=n.il(q);if(JD(m,99)){t=n.jl(q);e=Wrb(a,t);if(e==null&&t!=null){s=BD(m,18);if(!a.b||(s.Bb&ote)!=0||!!zUd(s)){continue}e=t}if(!c.dl(m,e)){for(r=0;r<d;++r){if(c.il(r)==m&&PD(c.jl(r))===PD(e)){c.ii(c.gc()-1,r);--d;break}}}}else{c.dl(n.il(q),n.jl(q))}}}}}}}}} -function CZc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;r=xZc(b,c,a.g);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));if(a.b){for(q=0;q<r.c.length;q++){l=(tCb(q,r.c.length),BD(r.c[q],200));if(q!=0){n=(tCb(q-1,r.c.length),BD(r.c[q-1],200));w$c(l,n.f+n.b+a.g)}tZc(q,r,c,a.g);AZc(a,l);e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd))}}else{for(p=new olb(r);p.a<p.c.c.length;){o=BD(mlb(p),200);for(k=new olb(o.a);k.a<k.c.c.length;){j=BD(mlb(k),187);s=new b$c(j.s,j.t,a.g);WZc(s,j);Ekb(o.d,s)}}}BZc(a,r);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));t=$wnd.Math.max(a.d,d.a-(g.b+g.c));m=$wnd.Math.max(a.c,d.b-(g.d+g.a));h=m-a.c;if(a.e&&a.f){i=t/m;i<a.a?(t=m*a.a):(h+=t/a.a-m)}a.e&&zZc(r,t,h);e.n&&e.n&&!!f&&Tdd(e,i6d(f),(pgd(),mgd));return new d$c(a.a,t,a.c+h,(k$c(),j$c))} -function UJc(a){var b,c,d,e,f,g,h,i,j,k,l;a.j=KC(WD,oje,25,a.g,15,1);a.o=new Rkb;MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new aLc),new cLc(a));a.a=KC(sbb,dle,25,a.b,16,1);TAb(new YAb(null,new Kub(a.e.b,16)),new rLc(a));d=(l=new Rkb,MAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new hLc),new jLc(a)),new lLc(a,l)),l);for(i=new olb(d);i.a<i.c.c.length;){h=BD(mlb(i),508);if(h.c.length<=1){continue}if(h.c.length==2){uKc(h);bKc((tCb(0,h.c.length),BD(h.c[0],17)).d.i)||Ekb(a.o,h);continue}if(tKc(h)||sKc(h,new fLc)){continue}j=new olb(h);e=null;while(j.a<j.c.c.length){b=BD(mlb(j),17);c=a.c[b.p];!e||j.a>=j.c.c.length?(k=JJc((j0b(),h0b),g0b)):(k=JJc((j0b(),g0b),g0b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} -function VNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;v=Hx(a);k=new Rkb;h=a.c.length;l=h-1;m=h+1;while(v.a.c!=0){while(c.b!=0){t=(sCb(c.b!=0),BD(Nsb(c,c.a.a),112));Jwb(v.a,t)!=null;t.g=l--;YNc(t,b,c,d)}while(b.b!=0){u=(sCb(b.b!=0),BD(Nsb(b,b.a.a),112));Jwb(v.a,u)!=null;u.g=m++;YNc(u,b,c,d)}j=Rie;for(r=(g=new Ywb((new cxb((new Gjb(v.a)).a)).b),new Njb(g));sib(r.a.a);){q=(f=Wwb(r.a),BD(f.cd(),112));if(!d&&q.b>0&&q.a<=0){k.c=KC(SI,Uhe,1,0,5,1);k.c[k.c.length]=q;break}p=q.i-q.d;if(p>=j){if(p>j){k.c=KC(SI,Uhe,1,0,5,1);j=p}k.c[k.c.length]=q}}if(k.c.length!=0){i=BD(Ikb(k,Bub(e,k.c.length)),112);Jwb(v.a,i)!=null;i.g=m++;YNc(i,b,c,d);k.c=KC(SI,Uhe,1,0,5,1)}}s=a.c.length+1;for(o=new olb(a);o.a<o.c.c.length;){n=BD(mlb(o),112);n.g<h&&(n.g=n.g+s)}} -function SDb(a,b){var c;if(a.e){throw vbb(new Zdb((fdb(TM),Jke+TM.k+Kke)))}if(!lDb(a.a,b)){throw vbb(new hz(Lke+b+Mke))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:PDb(a);break;case 1:XDb(a);PDb(a);break;case 4:bEb(a);PDb(a);break;case 3:bEb(a);XDb(a);PDb(a);}break;case 2:switch(b.g){case 1:XDb(a);YDb(a);break;case 4:bEb(a);PDb(a);break;case 3:bEb(a);XDb(a);PDb(a);}break;case 1:switch(b.g){case 2:XDb(a);YDb(a);break;case 4:XDb(a);bEb(a);PDb(a);break;case 3:XDb(a);bEb(a);XDb(a);PDb(a);}break;case 4:switch(b.g){case 2:bEb(a);PDb(a);break;case 1:bEb(a);XDb(a);PDb(a);break;case 3:XDb(a);YDb(a);}break;case 3:switch(b.g){case 2:XDb(a);bEb(a);PDb(a);break;case 1:XDb(a);bEb(a);XDb(a);PDb(a);break;case 4:XDb(a);YDb(a);}}return a} -function tVb(a,b){var c;if(a.d){throw vbb(new Zdb((fdb(LP),Jke+LP.k+Kke)))}if(!cVb(a.a,b)){throw vbb(new hz(Lke+b+Mke))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:qVb(a);break;case 1:xVb(a);qVb(a);break;case 4:BVb(a);qVb(a);break;case 3:BVb(a);xVb(a);qVb(a);}break;case 2:switch(b.g){case 1:xVb(a);yVb(a);break;case 4:BVb(a);qVb(a);break;case 3:BVb(a);xVb(a);qVb(a);}break;case 1:switch(b.g){case 2:xVb(a);yVb(a);break;case 4:xVb(a);BVb(a);qVb(a);break;case 3:xVb(a);BVb(a);xVb(a);qVb(a);}break;case 4:switch(b.g){case 2:BVb(a);qVb(a);break;case 1:BVb(a);xVb(a);qVb(a);break;case 3:xVb(a);yVb(a);}break;case 3:switch(b.g){case 2:xVb(a);BVb(a);qVb(a);break;case 1:xVb(a);BVb(a);xVb(a);qVb(a);break;case 4:xVb(a);yVb(a);}}return a} -function UQb(a,b,c){var d,e,f,g,h,i,j,k;for(i=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));i.e!=i.i.gc();){h=BD(Dyd(i),33);for(e=new Sr(ur(_sd(h).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),79);!d.b&&(d.b=new y5d(z2,d,4,7));if(!(d.b.i<=1&&(!d.c&&(d.c=new y5d(z2,d,5,8)),d.c.i<=1))){throw vbb(new z2c('Graph must not contain hyperedges.'))}if(!Pld(d)&&h!=atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))){j=new gRb;tNb(j,d);yNb(j,(HSb(),FSb),d);dRb(j,BD(Wd(irb(c.f,h)),144));eRb(j,BD(Ohb(c,atd(BD(qud((!d.c&&(d.c=new y5d(z2,d,5,8)),d.c),0),82))),144));Ekb(b.c,j);for(g=new Fyd((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=new mRb(j,f.a);tNb(k,f);yNb(k,FSb,f);k.e.a=$wnd.Math.max(f.g,1);k.e.b=$wnd.Math.max(f.f,1);lRb(k);Ekb(b.d,k)}}}}} -function OGb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=new LIb(a);iKb(l,!(b==(ead(),dad)||b==_9c));k=l.a;m=new p0b;for(e=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),g=0,i=e.length;g<i;++g){c=e[g];j=xHb(k,dHb,c);!!j&&(m.d=$wnd.Math.max(m.d,j.Re()))}for(d=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),f=0,h=d.length;f<h;++f){c=d[f];j=xHb(k,fHb,c);!!j&&(m.a=$wnd.Math.max(m.a,j.Re()))}for(p=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),r=0,t=p.length;r<t;++r){n=p[r];j=xHb(k,n,dHb);!!j&&(m.b=$wnd.Math.max(m.b,j.Se()))}for(o=OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb]),q=0,s=o.length;q<s;++q){n=o[q];j=xHb(k,n,fHb);!!j&&(m.c=$wnd.Math.max(m.c,j.Se()))}if(m.d>0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} -function d6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new f7c(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new olb(a.a);j.a<j.c.c.length;){h=BD(mlb(j),10);if(h.k!=(j0b(),e0b)){continue}d=BD(vNb(h,(wtc(),Hsc)),61);e=BD(vNb(h,Isc),8);k=h.n;switch(d.g){case 2:k.a=c.f.a+m.c-l.a;break;case 4:k.a=-l.a-m.b;}o=0;switch(d.g){case 2:case 4:if(b==(dcd(),_bd)){n=Edb(ED(vNb(h,htc)));k.b=f.b*n-BD(vNb(h,(Nyc(),Txc)),8).b;o=k.b+e.b;M_b(h,false,true)}else if(b==$bd){k.b=Edb(ED(vNb(h,htc)))-BD(vNb(h,(Nyc(),Txc)),8).b;o=k.b+e.b;M_b(h,false,true)}}g=$wnd.Math.max(g,o)}c.f.b+=g-f.b;for(i=new olb(a.a);i.a<i.c.c.length;){h=BD(mlb(i),10);if(h.k!=(j0b(),e0b)){continue}d=BD(vNb(h,(wtc(),Hsc)),61);k=h.n;switch(d.g){case 1:k.b=-l.b-m.d;break;case 3:k.b=c.f.b+m.a-l.b;}}} -function nRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;e=BD(vNb(a,(mTc(),dTc)),33);j=Ohe;k=Ohe;h=Rie;i=Rie;for(w=Jsb(a.b,0);w.b!=w.d.c;){u=BD(Xsb(w),86);p=u.e;q=u.f;j=$wnd.Math.min(j,p.a-q.a/2);k=$wnd.Math.min(k,p.b-q.b/2);h=$wnd.Math.max(h,p.a+q.a/2);i=$wnd.Math.max(i,p.b+q.b/2)}o=BD(hkd(e,(JTc(),BTc)),116);n=new f7c(o.b-j,o.d-k);for(v=Jsb(a.b,0);v.b!=v.d.c;){u=BD(Xsb(v),86);m=vNb(u,dTc);if(JD(m,239)){f=BD(m,33);l=P6c(u.e,n);bld(f,l.a-f.g/2,l.b-f.f/2)}}for(t=Jsb(a.a,0);t.b!=t.d.c;){s=BD(Xsb(t),188);d=BD(vNb(s,dTc),79);if(d){b=s.a;r=new g7c(s.b.e);Gsb(b,r,b.a,b.a.a);A=new g7c(s.c.e);Gsb(b,A,b.c.b,b.c);qRc(r,BD(Ut(b,1),8),s.b.f);qRc(A,BD(Ut(b,b.b-2),8),s.c.f);c=itd(d,true,true);ifd(b,c)}}B=h-j+(o.b+o.c);g=i-k+(o.d+o.a);Afd(e,B,g,false,false)} -function xoc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=a.b;k=new Bib(l,0);Aib(k,new H1b(a));s=false;g=1;while(k.b<k.d.gc()){j=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),29));p=(tCb(g,l.c.length),BD(l.c[g],29));q=Mu(j.a);r=q.c.length;for(o=new olb(q);o.a<o.c.c.length;){m=BD(mlb(o),10);$_b(m,p)}if(s){for(n=av(new ov(q),0);n.c.Sb();){m=BD(pv(n),10);for(f=new olb(Mu(R_b(m)));f.a<f.c.c.length;){e=BD(mlb(f),17);PZb(e,true);yNb(a,(wtc(),Asc),(Bcb(),true));d=Noc(a,e,r);c=BD(vNb(m,usc),305);t=BD(Ikb(d,d.c.length-1),17);c.k=t.c.i;c.n=t;c.b=e.d.i;c.c=e}}s=false}else{if(q.c.length!=0){b=(tCb(0,q.c.length),BD(q.c[0],10));if(b.k==(j0b(),d0b)){s=true;g=-1}}}++g}h=new Bib(a.b,0);while(h.b<h.d.gc()){i=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29));i.a.c.length==0&&uib(h)}} -function wKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;k=BD(BD(Qc(a.r,b),21),84);if(k.gc()<=2||b==(Ucd(),zcd)||b==(Ucd(),Tcd)){AKb(a,b);return}p=a.u.Hc((rcd(),qcd));c=b==(Ucd(),Acd)?(vLb(),uLb):(vLb(),rLb);r=b==Acd?(EIb(),BIb):(EIb(),DIb);d=dLb(iLb(c),a.s);q=b==Acd?Pje:Qje;for(j=k.Kc();j.Ob();){h=BD(j.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}o=h.b.rf();n=h.e;l=h.c;m=l.i;m.b=(f=l.n,l.e.a+f.b+f.c);m.a=(g=l.n,l.e.b+g.d+g.a);if(p){m.c=n.a-(e=l.n,l.e.a+e.b+e.c)-a.s;p=false}else{m.c=n.a+o.a+a.s}ytb(r,lle);l.f=r;$Hb(l,(NHb(),MHb));Ekb(d.d,new BLb(m,bLb(d,m)));q=b==Acd?$wnd.Math.min(q,n.b):$wnd.Math.max(q,n.b+h.b.rf().b)}q+=b==Acd?-a.t:a.t;cLb((d.e=q,d));for(i=k.Kc();i.Ob();){h=BD(i.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}m=h.c.i;m.c-=h.e.a;m.d-=h.e.b}} -function IDc(a,b,c){var d;Odd(c,'StretchWidth layering',1);if(b.a.c.length==0){Qdd(c);return}a.c=b;a.t=0;a.u=0;a.i=Pje;a.g=Qje;a.d=Edb(ED(vNb(b,(Nyc(),lyc))));CDc(a);DDc(a);ADc(a);HDc(a);BDc(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=FDc(a);d=new H1b(a.c);Ekb(a.c.b,d);a.r=Mu(a.p);a.n=tlb(a.k,a.k.length);while(a.r.c.length!=0){a.o=JDc(a);if(!a.o||EDc(a)&&a.b.a.gc()!=0){KDc(a,d);d=new H1b(a.c);Ekb(a.c.b,d);ye(a.a,a.b);a.b.a.$b();a.t=a.u;a.u=0}else{if(EDc(a)){a.c.b.c=KC(SI,Uhe,1,0,5,1);d=new H1b(a.c);Ekb(a.c.b,d);a.t=0;a.u=0;a.b.a.$b();a.a.a.$b();++a.f;a.r=Mu(a.p);a.n=tlb(a.k,a.k.length)}else{$_b(a.o,d);Lkb(a.r,a.o);Qqb(a.b,a.o);a.t=a.t-a.k[a.o.p]*a.d+a.j[a.o.p];a.u+=a.e[a.o.p]*a.d}}}b.a.c=KC(SI,Uhe,1,0,5,1);smb(b.b);Qdd(c)} -function Mgc(a){var b,c,d,e;MAb(JAb(new YAb(null,new Kub(a.a.b,16)),new khc),new mhc);Kgc(a);MAb(JAb(new YAb(null,new Kub(a.a.b,16)),new ohc),new qhc);if(a.c==(Aad(),yad)){MAb(JAb(LAb(new YAb(null,new Kub(new Pib(a.f),1)),new yhc),new Ahc),new Chc(a));MAb(JAb(NAb(LAb(LAb(new YAb(null,new Kub(a.d.b,16)),new Ghc),new Ihc),new Khc),new Mhc),new Ohc(a))}e=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(d=new olb(a.a.b);d.a<d.c.c.length;){c=BD(mlb(d),57);e.a=$wnd.Math.min(e.a,c.d.c);e.b=$wnd.Math.min(e.b,c.d.d);b.a=$wnd.Math.max(b.a,c.d.c+c.d.b);b.b=$wnd.Math.max(b.b,c.d.d+c.d.a)}P6c(X6c(a.d.c),V6c(new f7c(e.a,e.b)));P6c(X6c(a.d.f),c7c(new f7c(b.a,b.b),e));Lgc(a,e,b);Uhb(a.f);Uhb(a.b);Uhb(a.g);Uhb(a.e);a.a.a.c=KC(SI,Uhe,1,0,5,1);a.a.b.c=KC(SI,Uhe,1,0,5,1);a.a=null;a.d=null} -function vZb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;e=new Rkb;for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);n=o.e;if(n){d=vZb(a,n,o);Gkb(e,d);sZb(a,n,o);if(BD(vNb(n,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){s=BD(vNb(o,(Nyc(),Vxc)),98);m=BD(vNb(o,Yxc),174).Hc((rcd(),ncd));for(r=new olb(o.j);r.a<r.c.c.length;){q=BD(mlb(r),11);f=BD(Ohb(a.b,q),10);if(!f){f=Z$b(q,s,q.j,-(q.e.c.length-q.g.c.length),null,new d7c,q.o,BD(vNb(n,Lwc),103),n);yNb(f,$sc,q);Rhb(a.b,q,f);Ekb(n.a,f)}g=BD(Ikb(f.j,0),11);for(k=new olb(q.f);k.a<k.c.c.length;){j=BD(mlb(k),70);h=new p_b;h.o.a=j.o.a;h.o.b=j.o.b;Ekb(g.f,h);if(!m){t=q.j;l=0;tcd(BD(vNb(o,Yxc),21))&&(l=mfd(j.n,j.o,q.o,0,t));s==(dcd(),bcd)||(Ucd(),Ecd).Hc(t)?(h.o.a=l):(h.o.b=l)}}}}}}i=new Rkb;rZb(a,b,c,e,i);!!c&&tZb(a,b,c,i);return i} -function nEc(a,b,c){var d,e,f,g,h,i,j,k,l;if(a.c[b.c.p][b.p].e){return}else{a.c[b.c.p][b.p].e=true}a.c[b.c.p][b.p].b=0;a.c[b.c.p][b.p].d=0;a.c[b.c.p][b.p].a=null;for(k=new olb(b.j);k.a<k.c.c.length;){j=BD(mlb(k),11);l=c?new J0b(j):new R0b(j);for(i=l.Kc();i.Ob();){h=BD(i.Pb(),11);g=h.i;if(g.c==b.c){if(g!=b){nEc(a,g,c);a.c[b.c.p][b.p].b+=a.c[g.c.p][g.p].b;a.c[b.c.p][b.p].d+=a.c[g.c.p][g.p].d}}else{a.c[b.c.p][b.p].d+=a.g[h.p];++a.c[b.c.p][b.p].b}}}f=BD(vNb(b,(wtc(),ssc)),15);if(f){for(e=f.Kc();e.Ob();){d=BD(e.Pb(),10);if(b.c==d.c){nEc(a,d,c);a.c[b.c.p][b.p].b+=a.c[d.c.p][d.p].b;a.c[b.c.p][b.p].d+=a.c[d.c.p][d.p].d}}}if(a.c[b.c.p][b.p].b>0){a.c[b.c.p][b.p].d+=Cub(a.i,24)*lke*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} -function m5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new olb(a);o.a<o.c.c.length;){n=BD(mlb(o),10);n5b(n.n);n5b(n.o);o5b(n.f);r5b(n);t5b(n);for(q=new olb(n.j);q.a<q.c.c.length;){p=BD(mlb(q),11);n5b(p.n);n5b(p.a);n5b(p.o);G0b(p,s5b(p.j));f=BD(vNb(p,(Nyc(),Wxc)),19);!!f&&yNb(p,Wxc,meb(-f.a));for(e=new olb(p.g);e.a<e.c.c.length;){d=BD(mlb(e),17);for(c=Jsb(d.a,0);c.b!=c.d.c;){b=BD(Xsb(c),8);n5b(b)}i=BD(vNb(d,jxc),74);if(i){for(h=Jsb(i,0);h.b!=h.d.c;){g=BD(Xsb(h),8);n5b(g)}}for(l=new olb(d.b);l.a<l.c.c.length;){j=BD(mlb(l),70);n5b(j.n);n5b(j.o)}}for(m=new olb(p.f);m.a<m.c.c.length;){j=BD(mlb(m),70);n5b(j.n);n5b(j.o)}}if(n.k==(j0b(),e0b)){yNb(n,(wtc(),Hsc),s5b(BD(vNb(n,Hsc),61)));q5b(n)}for(k=new olb(n.b);k.a<k.c.c.length;){j=BD(mlb(k),70);r5b(j);n5b(j.o);n5b(j.n)}}} -function yQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=$Pb(b);w=new Rkb;for(d=new olb(h);d.a<d.c.c.length;){c=BD(mlb(d),15);A=new Rkb;w.c[w.c.length]=A;i=new Tqb;for(o=c.Kc();o.Ob();){n=BD(o.Pb(),33);f=wQb(a,n,true,0,0);A.c[A.c.length]=f;p=n.i;q=n.j;new f7c(p,q);m=(!n.n&&(n.n=new cUd(D2,n,1,7)),n.n);for(l=new Fyd(m);l.e!=l.i.gc();){j=BD(Dyd(l),137);e=wQb(a,j,false,p,q);A.c[A.c.length]=e}v=(!n.c&&(n.c=new cUd(F2,n,9,9)),n.c);for(s=new Fyd(v);s.e!=s.i.gc();){r=BD(Dyd(s),118);g=wQb(a,r,false,p,q);A.c[A.c.length]=g;t=r.i+p;u=r.j+q;m=(!r.n&&(r.n=new cUd(D2,r,1,7)),r.n);for(k=new Fyd(m);k.e!=k.i.gc();){j=BD(Dyd(k),137);e=wQb(a,j,false,t,u);A.c[A.c.length]=e}}ye(i,Dx(pl(OC(GC(KI,1),Uhe,20,0,[_sd(n),$sd(n)]))))}vQb(a,i,A)}a.f=new aPb(w);tNb(a.f,b);return a.f} -function Kqd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=Ohb(a.e,d);if(D==null){D=new eC;n=BD(D,183);s=b+'_s';t=s+e;m=new yC(t);cC(n,Vte,m)}C=BD(D,183);Qpd(c,C);G=new eC;Spd(G,'x',d.j);Spd(G,'y',d.k);cC(C,Yte,G);A=new eC;Spd(A,'x',d.b);Spd(A,'y',d.c);cC(C,'endPoint',A);l=Fhe((!d.a&&(d.a=new xMd(y2,d,5)),d.a));o=!l;if(o){w=new wB;f=new Srd(w);reb((!d.a&&(d.a=new xMd(y2,d,5)),d.a),f);cC(C,Ote,w)}i=dmd(d);u=!!i;u&&Tpd(a.a,C,Qte,kqd(a,dmd(d)));r=emd(d);v=!!r;v&&Tpd(a.a,C,Pte,kqd(a,emd(d)));j=(!d.e&&(d.e=new y5d(A2,d,10,9)),d.e).i==0;p=!j;if(p){B=new wB;g=new Urd(a,B);reb((!d.e&&(d.e=new y5d(A2,d,10,9)),d.e),g);cC(C,Ste,B)}k=(!d.g&&(d.g=new y5d(A2,d,9,10)),d.g).i==0;q=!k;if(q){F=new wB;h=new Wrd(a,F);reb((!d.g&&(d.g=new y5d(A2,d,9,10)),d.g),h);cC(C,Rte,F)}} -function eKb(a){$Jb();var b,c,d,e,f,g,h;d=a.f.n;for(g=ci(a.r).a.nc();g.Ob();){f=BD(g.Pb(),111);e=0;if(f.b.Xe((Y9c(),s9c))){e=Edb(ED(f.b.We(s9c)));if(e<0){switch(f.b.Hf().g){case 1:d.d=$wnd.Math.max(d.d,-e);break;case 3:d.a=$wnd.Math.max(d.a,-e);break;case 2:d.c=$wnd.Math.max(d.c,-e);break;case 4:d.b=$wnd.Math.max(d.b,-e);}}}if(tcd(a.u)){b=nfd(f.b,e);h=!BD(a.e.We(b9c),174).Hc((Idd(),zdd));c=false;switch(f.b.Hf().g){case 1:c=b>d.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} -function l3b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new olb(a);j.a<j.c.c.length;){i=BD(mlb(j),10);g=BD(vNb(i,(Nyc(),mxc)),163);f=null;switch(g.g){case 1:case 2:f=(Gqc(),Fqc);break;case 3:case 4:f=(Gqc(),Dqc);}if(f){yNb(i,(wtc(),Bsc),(Gqc(),Fqc));f==Dqc?o3b(i,g,(KAc(),HAc)):f==Fqc&&o3b(i,g,(KAc(),IAc))}else{if(fcd(BD(vNb(i,Vxc),98))&&i.j.c.length!=0){b=true;for(l=new olb(i.j);l.a<l.c.c.length;){k=BD(mlb(l),11);if(!(k.j==(Ucd(),zcd)&&k.e.c.length-k.g.c.length>0||k.j==Tcd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new olb(k.g);e.a<e.c.c.length;){c=BD(mlb(e),17);h=BD(vNb(c.d.i,mxc),163);if(h==(Ctc(),ztc)||h==Atc){b=false;break}}for(d=new olb(k.e);d.a<d.c.c.length;){c=BD(mlb(d),17);h=BD(vNb(c.c.i,mxc),163);if(h==(Ctc(),xtc)||h==ytc){b=false;break}}}b&&o3b(i,g,(KAc(),JAc))}}}} -function lJc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;w=0;n=0;for(l=new olb(b.e);l.a<l.c.c.length;){k=BD(mlb(l),10);m=0;h=0;i=c?BD(vNb(k,hJc),19).a:Rie;r=d?BD(vNb(k,iJc),19).a:Rie;j=$wnd.Math.max(i,r);for(t=new olb(k.j);t.a<t.c.c.length;){s=BD(mlb(t),11);u=k.n.b+s.n.b+s.a.b;if(d){for(g=new olb(s.g);g.a<g.c.c.length;){f=BD(mlb(g),17);p=f.d;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(BD(vNb(o,hJc),19).a,BD(vNb(o,iJc),19).a);v=BD(vNb(f,(Nyc(),eyc)),19).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new olb(s.e);g.a<g.c.c.length;){f=BD(mlb(g),17);p=f.c;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(BD(vNb(o,hJc),19).a,BD(vNb(o,iJc),19).a);v=BD(vNb(f,(Nyc(),eyc)),19).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} -function oMc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new olb(a.a.b);e.a<e.c.c.length;){c=BD(mlb(e),29);for(i=new olb(c.a);i.a<i.c.c.length;){h=BD(mlb(i),10);b.j[h.p]=h;b.i[h.p]=b.o==(eMc(),dMc)?Qje:Pje}}Uhb(a.c);g=a.a.b;b.c==(YLc(),WLc)&&(g=JD(g,152)?km(BD(g,152)):JD(g,131)?BD(g,131).a:JD(g,54)?new ov(g):new dv(g));UMc(a.e,b,a.b);Alb(b.p,null);for(f=g.Kc();f.Ob();){c=BD(f.Pb(),29);j=c.a;b.o==(eMc(),dMc)&&(j=JD(j,152)?km(BD(j,152)):JD(j,131)?BD(j,131).a:JD(j,54)?new ov(j):new dv(j));for(m=j.Kc();m.Ob();){l=BD(m.Pb(),10);b.g[l.p]==l&&pMc(a,l,b)}}qMc(a,b);for(d=g.Kc();d.Ob();){c=BD(d.Pb(),29);for(m=new olb(c.a);m.a<m.c.c.length;){l=BD(mlb(m),10);b.p[l.p]=b.p[b.g[l.p].p];if(l==b.g[l.p]){k=Edb(b.i[b.j[l.p].p]);(b.o==(eMc(),dMc)&&k>Qje||b.o==cMc&&k<Pje)&&(b.p[l.p]=Edb(b.p[l.p])+k)}}}a.e.cg()} -function PGb(a,b,c,d){var e,f,g,h,i;h=new LIb(b);rKb(h,d);e=true;if(!!a&&a.Xe((Y9c(),z8c))){f=BD(a.We((Y9c(),z8c)),103);e=f==(ead(),cad)||f==aad||f==bad}hKb(h,false);Hkb(h.e.wf(),new mKb(h,false,e));NJb(h,h.f,(gHb(),dHb),(Ucd(),Acd));NJb(h,h.f,fHb,Rcd);NJb(h,h.g,dHb,Tcd);NJb(h,h.g,fHb,zcd);PJb(h,Acd);PJb(h,Rcd);OJb(h,zcd);OJb(h,Tcd);$Jb();g=h.A.Hc((tdd(),pdd))&&h.B.Hc((Idd(),Ddd))?_Jb(h):null;!!g&&DHb(h.a,g);eKb(h);GJb(h);PKb(h);BJb(h);pKb(h);HKb(h);xKb(h,Acd);xKb(h,Rcd);CJb(h);oKb(h);if(!c){return h.o}cKb(h);LKb(h);xKb(h,zcd);xKb(h,Tcd);i=h.B.Hc((Idd(),Edd));RJb(h,i,Acd);RJb(h,i,Rcd);SJb(h,i,zcd);SJb(h,i,Tcd);MAb(new YAb(null,new Kub(new $ib(h.i),0)),new TJb);MAb(JAb(new YAb(null,ci(h.r).a.oc()),new VJb),new XJb);dKb(h);h.e.uf(h.o);MAb(new YAb(null,ci(h.r).a.oc()),new fKb);return h.o} -function JVb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),81);j=$wnd.Math.min(j,b.d.f.g.c+b.e.a)}n=new Psb;for(g=new olb(a.a.a);g.a<g.c.c.length;){f=BD(mlb(g),189);f.i=j;f.e==0&&(Gsb(n,f,n.c.b,n.c),true)}while(n.b!=0){f=BD(n.b==0?null:(sCb(n.b!=0),Nsb(n,n.a.a)),189);e=f.f.g.c;for(m=f.a.a.ec().Kc();m.Ob();){k=BD(m.Pb(),81);p=f.i+k.e.a;k.d.g||k.g.c<p?(k.o=p):(k.o=k.g.c)}e-=f.f.o;f.b+=e;a.c==(ead(),bad)||a.c==_9c?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=BD(l.Pb(),81);for(i=k.f.Kc();i.Ob();){h=BD(i.Pb(),81);fad(a.c)?(o=a.f.ef(k,h)):(o=a.f.ff(k,h));h.d.i=$wnd.Math.max(h.d.i,k.o+k.g.b+o-h.e.a);h.k||(h.d.i=$wnd.Math.max(h.d.i,h.g.c-h.e.a));--h.d.e;h.d.e==0&&Dsb(n,h.d)}}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),81);b.g.c=b.o}} -function ELb(a){var b,c,d,e,f,g,h,i;h=a.b;b=a.a;switch(BD(vNb(a,(fFb(),bFb)),427).g){case 0:Okb(h,new tpb(new bMb));break;case 1:default:Okb(h,new tpb(new gMb));}switch(BD(vNb(a,_Eb),428).g){case 1:Okb(h,new YLb);Okb(h,new lMb);Okb(h,new GLb);break;case 0:default:Okb(h,new YLb);Okb(h,new RLb);}switch(BD(vNb(a,dFb),250).g){case 0:i=new FMb;break;case 1:i=new zMb;break;case 2:i=new CMb;break;case 3:i=new wMb;break;case 5:i=new JMb(new CMb);break;case 4:i=new JMb(new zMb);break;case 7:i=new tMb(new JMb(new zMb),new JMb(new CMb));break;case 8:i=new tMb(new JMb(new wMb),new JMb(new CMb));break;case 6:default:i=new JMb(new wMb);}for(g=new olb(h);g.a<g.c.c.length;){f=BD(mlb(g),167);d=0;e=0;c=new vgd(meb(d),meb(e));while(gNb(b,f,d,e)){c=BD(i.Ce(c,f),46);d=BD(c.a,19).a;e=BD(c.b,19).a}dNb(b,f,d,e)}} -function qQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;f=a.f.b;m=f.a;k=f.b;o=a.e.g;n=a.e.f;_kd(a.e,f.a,f.b);w=m/o;A=k/n;for(j=new Fyd(Kkd(a.e));j.e!=j.i.gc();){i=BD(Dyd(j),137);dld(i,i.i*w);eld(i,i.j*A)}for(s=new Fyd(Yod(a.e));s.e!=s.i.gc();){r=BD(Dyd(s),118);u=r.i;v=r.j;u>0&&dld(r,u*w);v>0&&eld(r,v*A)}stb(a.b,new CQb);b=new Rkb;for(h=new nib((new eib(a.c)).a);h.b;){g=lib(h);d=BD(g.cd(),79);c=BD(g.dd(),395).a;e=itd(d,false,false);l=oQb(jtd(d),ofd(e),c);ifd(l,e);t=ktd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.a.a.c,8)),c)}}for(q=new nib((new eib(a.d)).a);q.b;){p=lib(q);d=BD(p.cd(),79);c=BD(p.dd(),395).a;e=itd(d,false,false);l=oQb(ltd(d),w7c(ofd(e)),c);l=w7c(l);ifd(l,e);t=mtd(d);if(!!t&&Jkb(b,t,0)==-1){b.c[b.c.length]=t;pQb(t,(sCb(l.b!=0),BD(l.c.b.c,8)),c)}}} -function _Vc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new Rkb;for(n=new olb(c);n.a<n.c.c.length;){m=BD(mlb(n),33);Ekb(o,new f7c(m.i,m.j))}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));while(CVc(a,c)){AVc(a,c,false)}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));h=0;i=0;e=null;if(c.c.length!=0){e=(tCb(0,c.c.length),BD(c.c[0],33));h=e.i-(tCb(0,o.c.length),BD(o.c[0],8)).a;i=e.j-(tCb(0,o.c.length),BD(o.c[0],8)).b}g=$wnd.Math.sqrt(h*h+i*i);l=cVc(c);f=1;while(l.a.gc()!=0){for(k=l.a.ec().Kc();k.Ob();){j=BD(k.Pb(),33);p=a.f;q=p.i+p.g/2;r=p.j+p.f/2;s=j.i+j.g/2;t=j.j+j.f/2;u=s-q;v=t-r;w=$wnd.Math.sqrt(u*u+v*v);A=u/w;B=v/w;dld(j,j.i+A*g);eld(j,j.j+B*g)}d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));l=cVc(new Tkb(l));++f}!!a.a&&a.a.lg(new Tkb(l));d.n&&!!b&&Tdd(d,i6d(b),(pgd(),mgd));_Vc(a,b,new Tkb(l),d)}} -function $2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.n;q=a.o;m=a.d;l=Edb(ED(pBc(a,(Nyc(),iyc))));if(b){k=l*(b.gc()-1);n=0;for(i=b.Kc();i.Ob();){g=BD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b-m.d+n;d=q.a/(b.gc()+1);e=d;for(h=b.Kc();h.Ob();){g=BD(h.Pb(),10);g.n.a=r;g.n.b=f-g.o.b;r+=g.o.a+l;j=Y2b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=g.o.b;o=BD(vNb(g,(wtc(),vsc)),11);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=0;F0b(o,a)}e+=d}}if(c){k=l*(c.gc()-1);n=0;for(i=c.Kc();i.Ob();){g=BD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b+q.b+m.a-n;d=q.a/(c.gc()+1);e=d;for(h=c.Kc();h.Ob();){g=BD(h.Pb(),10);g.n.a=r;g.n.b=f;r+=g.o.a+l;j=Y2b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=0;o=BD(vNb(g,(wtc(),vsc)),11);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=q.b;F0b(o,a)}e+=d}}} -function q7b(a,b){var c,d,e,f,g,h;if(!BD(vNb(b,(wtc(),Ksc)),21).Hc((Orc(),Hrc))){return}for(h=new olb(b.a);h.a<h.c.c.length;){f=BD(mlb(h),10);if(f.k==(j0b(),h0b)){e=BD(vNb(f,(Nyc(),txc)),142);a.c=$wnd.Math.min(a.c,f.n.a-e.b);a.a=$wnd.Math.max(a.a,f.n.a+f.o.a+e.c);a.d=$wnd.Math.min(a.d,f.n.b-e.d);a.b=$wnd.Math.max(a.b,f.n.b+f.o.b+e.a)}}for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);if(f.k!=(j0b(),h0b)){switch(f.k.g){case 2:d=BD(vNb(f,(Nyc(),mxc)),163);if(d==(Ctc(),ytc)){f.n.a=a.c-10;p7b(f,new x7b).Jb(new A7b(f));break}if(d==Atc){f.n.a=a.a+10;p7b(f,new D7b).Jb(new G7b(f));break}c=BD(vNb(f,Osc),303);if(c==(esc(),dsc)){o7b(f).Jb(new J7b(f));f.n.b=a.d-10;break}if(c==bsc){o7b(f).Jb(new M7b(f));f.n.b=a.b+10;break}break;default:throw vbb(new Wdb('The node type '+f.k+' is not supported by the '+zS));}}}} -function Y1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=new f7c(d.i+d.g/2,d.j+d.f/2);n=M1b(d);o=BD(hkd(b,(Nyc(),Vxc)),98);q=BD(hkd(d,$xc),61);if(!hCd(gkd(d),Uxc)){d.i==0&&d.j==0?(p=0):(p=kfd(d,q));jkd(d,Uxc,p)}j=new f7c(b.g,b.f);e=Z$b(d,o,q,n,j,i,new f7c(d.g,d.f),BD(vNb(c,Lwc),103),c);yNb(e,(wtc(),$sc),d);f=BD(Ikb(e.j,0),11);E0b(f,W1b(d));yNb(e,Yxc,(rcd(),pqb(pcd)));l=BD(hkd(b,Yxc),174).Hc(ncd);for(h=new Fyd((!d.n&&(d.n=new cUd(D2,d,1,7)),d.n));h.e!=h.i.gc();){g=BD(Dyd(h),137);if(!Ccb(DD(hkd(g,Jxc)))&&!!g.a){m=Z1b(g);Ekb(f.f,m);if(!l){k=0;tcd(BD(hkd(b,Yxc),21))&&(k=mfd(new f7c(g.i,g.j),new f7c(g.g,g.f),new f7c(d.g,d.f),0,q));switch(q.g){case 2:case 4:m.o.a=k;break;case 1:case 3:m.o.b=k;}}}}yNb(e,tyc,ED(hkd(Xod(b),tyc)));yNb(e,uyc,ED(hkd(Xod(b),uyc)));yNb(e,ryc,ED(hkd(Xod(b),ryc)));Ekb(c.a,e);Rhb(a.a,d,e)} -function qUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(c,'Processor arrange level',1);k=0;mmb();ktb(b,new Wsd((mTc(),ZSc)));f=b.b;h=Jsb(b,b.b);j=true;while(j&&h.b.b!=h.d.a){r=BD(Ysb(h),86);BD(vNb(r,ZSc),19).a==0?--f:(j=false)}v=new Jib(b,0,f);g=new Qsb(v);v=new Jib(b,f,b.b);i=new Qsb(v);if(g.b==0){for(o=Jsb(i,0);o.b!=o.d.c;){n=BD(Xsb(o),86);yNb(n,eTc,meb(k++))}}else{l=g.b;for(u=Jsb(g,0);u.b!=u.d.c;){t=BD(Xsb(u),86);yNb(t,eTc,meb(k++));d=URc(t);qUc(a,d,Udd(c,1/l|0));ktb(d,tmb(new Wsd(eTc)));m=new Psb;for(s=Jsb(d,0);s.b!=s.d.c;){r=BD(Xsb(s),86);for(q=Jsb(t.d,0);q.b!=q.d.c;){p=BD(Xsb(q),188);p.c==r&&(Gsb(m,p,m.c.b,m.c),true)}}Osb(t.d);ye(t.d,m);h=Jsb(i,i.b);e=t.d.b;j=true;while(0<e&&j&&h.b.b!=h.d.a){r=BD(Ysb(h),86);if(BD(vNb(r,ZSc),19).a==0){yNb(r,eTc,meb(k++));--e;Zsb(h)}else{j=false}}}}Qdd(c)} -function _8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;Odd(b,'Inverted port preprocessing',1);k=a.b;j=new Bib(k,0);c=null;t=new Rkb;while(j.b<j.d.gc()){s=c;c=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),29));for(n=new olb(t);n.a<n.c.c.length;){l=BD(mlb(n),10);$_b(l,s)}t.c=KC(SI,Uhe,1,0,5,1);for(o=new olb(c.a);o.a<o.c.c.length;){l=BD(mlb(o),10);if(l.k!=(j0b(),h0b)){continue}if(!fcd(BD(vNb(l,(Nyc(),Vxc)),98))){continue}for(r=X_b(l,(KAc(),HAc),(Ucd(),zcd)).Kc();r.Ob();){p=BD(r.Pb(),11);i=p.e;h=BD(Qkb(i,KC(AQ,jne,17,i.c.length,0,1)),474);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];Z8b(a,p,d,t)}}for(q=X_b(l,IAc,Tcd).Kc();q.Ob();){p=BD(q.Pb(),11);i=p.g;h=BD(Qkb(i,KC(AQ,jne,17,i.c.length,0,1)),474);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];$8b(a,p,d,t)}}}}for(m=new olb(t);m.a<m.c.c.length;){l=BD(mlb(m),10);$_b(l,c)}Qdd(b)} -function _1b(a,b,c,d,e,f){var g,h,i,j,k,l;j=new H0b;tNb(j,b);G0b(j,BD(hkd(b,(Nyc(),$xc)),61));yNb(j,(wtc(),$sc),b);F0b(j,c);l=j.o;l.a=b.g;l.b=b.f;k=j.n;k.a=b.i;k.b=b.j;Rhb(a.a,b,j);g=FAb(NAb(LAb(new YAb(null,(!b.e&&(b.e=new y5d(B2,b,7,4)),new Kub(b.e,16))),new m2b),new e2b),new o2b(b));g||(g=FAb(NAb(LAb(new YAb(null,(!b.d&&(b.d=new y5d(B2,b,8,5)),new Kub(b.d,16))),new q2b),new g2b),new s2b(b)));g||(g=FAb(new YAb(null,(!b.e&&(b.e=new y5d(B2,b,7,4)),new Kub(b.e,16))),new u2b));yNb(j,Nsc,(Bcb(),g?true:false));e_b(j,f,e,BD(hkd(b,Txc),8));for(i=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);!Ccb(DD(hkd(h,Jxc)))&&!!h.a&&Ekb(j.f,Z1b(h))}switch(e.g){case 2:case 1:(j.j==(Ucd(),Acd)||j.j==Rcd)&&d.Fc((Orc(),Lrc));break;case 4:case 3:(j.j==(Ucd(),zcd)||j.j==Tcd)&&d.Fc((Orc(),Lrc));}return j} -function nQc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;m=null;d==(FQc(),DQc)?(m=b):d==EQc&&(m=c);for(p=m.a.ec().Kc();p.Ob();){o=BD(p.Pb(),11);q=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).b;t=new Tqb;h=new Tqb;for(j=new b1b(o.b);llb(j.a)||llb(j.b);){i=BD(llb(j.a)?mlb(j.a):mlb(j.b),17);if(Ccb(DD(vNb(i,(wtc(),ltc))))!=e){continue}if(Jkb(f,i,0)!=-1){i.d==o?(r=i.c):(r=i.d);s=l7c(OC(GC(m1,1),nie,8,0,[r.i.n,r.n,r.a])).b;if($wnd.Math.abs(s-q)<0.2){continue}s<q?b.a._b(r)?Qqb(t,new vgd(DQc,i)):Qqb(t,new vgd(EQc,i)):b.a._b(r)?Qqb(h,new vgd(DQc,i)):Qqb(h,new vgd(EQc,i))}}if(t.a.gc()>1){n=new ZQc(o,t,d);reb(t,new PQc(a,n));g.c[g.c.length]=n;for(l=t.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}if(h.a.gc()>1){n=new ZQc(o,h,d);reb(h,new RQc(a,n));g.c[g.c.length]=n;for(l=h.a.ec().Kc();l.Ob();){k=BD(l.Pb(),46);Lkb(f,k.b)}}}} -function $Wc(a){r4c(a,new E3c(L3c(P3c(M3c(O3c(N3c(new R3c,sre),'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 bXc),sre)));p4c(a,sre,uqe,Ksd(UWc));p4c(a,sre,wme,Ksd(XWc));p4c(a,sre,Fme,Ksd(NWc));p4c(a,sre,Tme,Ksd(OWc));p4c(a,sre,Eme,Ksd(PWc));p4c(a,sre,Gme,Ksd(MWc));p4c(a,sre,Dme,Ksd(QWc));p4c(a,sre,Hme,Ksd(TWc));p4c(a,sre,ore,Ksd(KWc));p4c(a,sre,nre,Ksd(LWc));p4c(a,sre,rre,Ksd(RWc));p4c(a,sre,lre,Ksd(SWc));p4c(a,sre,mre,Ksd(VWc));p4c(a,sre,pre,Ksd(WWc));p4c(a,sre,qre,Ksd(YWc))} -function LIb(a){var b;this.r=Cy(new OIb,new SIb);this.b=new Rpb(BD(Qb(F1),290));this.p=new Rpb(BD(Qb(F1),290));this.i=new Rpb(BD(Qb(DN),290));this.e=a;this.o=new g7c(a.rf());this.D=a.Df()||Ccb(DD(a.We((Y9c(),M8c))));this.A=BD(a.We((Y9c(),Y8c)),21);this.B=BD(a.We(b9c),21);this.q=BD(a.We(t9c),98);this.u=BD(a.We(x9c),21);if(!ucd(this.u)){throw vbb(new y2c('Invalid port label placement: '+this.u))}this.v=Ccb(DD(a.We(z9c)));this.j=BD(a.We(W8c),21);if(!Jbd(this.j)){throw vbb(new y2c('Invalid node label placement: '+this.j))}this.n=BD(bgd(a,U8c),116);this.k=Edb(ED(bgd(a,Q9c)));this.d=Edb(ED(bgd(a,P9c)));this.w=Edb(ED(bgd(a,X9c)));this.s=Edb(ED(bgd(a,R9c)));this.t=Edb(ED(bgd(a,S9c)));this.C=BD(bgd(a,V9c),142);this.c=2*this.d;b=!this.B.Hc((Idd(),zdd));this.f=new mIb(0,b,0);this.g=new mIb(1,b,0);lIb(this.f,(gHb(),eHb),this.g)} -function Lgd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);m+=sr(new Sr(ur(_sd(q).a.Kc(),new Sq)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);C=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(i-q.g);D=e.b+(Cub(b,26)*ike+Cub(b,27)*jke)*(h-q.f);dld(q,C);eld(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));v.e!=v.i.gc();){u=BD(Dyd(v),33);for(k=new Sr(ur(_sd(u).a.Kc(),new Sq));Qr(k);){j=BD(Rr(k),79);Pld(j)||Kgd(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Afd(a,A,w,false,true)} -function Jcb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw vbb(new Oeb(Xhe))}j=a;f=a.length;i=false;if(f>0){b=(BCb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=a.substr(1);--f;i=b==45}}if(f==0){throw vbb(new Oeb(Oje+j+'"'))}while(a.length>0&&(BCb(0,a.length),a.charCodeAt(0)==48)){a=a.substr(1);--f}if(f>(Neb(),Leb)[10]){throw vbb(new Oeb(Oje+j+'"'))}for(e=0;e<f;e++){if(Zcb((BCb(e,a.length),a.charCodeAt(e)))==-1){throw vbb(new Oeb(Oje+j+'"'))}}l=0;g=Jeb[10];k=Keb[10];h=Jbb(Meb[10]);c=true;d=f%g;if(d>0){l=-parseInt(a.substr(0,d),10);a=a.substr(d);f-=d;c=false}while(f>=g){d=parseInt(a.substr(0,g),10);a=a.substr(g);f-=g;if(c){c=false}else{if(ybb(l,h)<0){throw vbb(new Oeb(Oje+j+'"'))}l=Ibb(l,k)}l=Qbb(l,d)}if(ybb(l,0)>0){throw vbb(new Oeb(Oje+j+'"'))}if(!i){l=Jbb(l);if(ybb(l,0)<0){throw vbb(new Oeb(Oje+j+'"'))}}return l} -function Z6d(a,b){X6d();var c,d,e,f,g,h,i;this.a=new a7d(this);this.b=a;this.c=b;this.f=c2d(q1d((O6d(),M6d),b));if(this.f.dc()){if((h=t1d(M6d,a))==b){this.e=true;this.d=new Rkb;this.f=new oFd;this.f.Fc(Ewe);BD(V1d(p1d(M6d,bKd(a)),''),26)==a&&this.f.Fc(u1d(M6d,bKd(a)));for(e=g1d(M6d,a).Kc();e.Ob();){d=BD(e.Pb(),170);switch($1d(q1d(M6d,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(c2d(q1d(M6d,d)));break}}}}else{Q6d();if(BD(b,66).Oj()){this.e=true;this.f=null;this.d=new Rkb;for(g=0,i=(a.i==null&&TKd(a),a.i).length;g<i;++g){d=(c=(a.i==null&&TKd(a),a.i),g>=0&&g<c.length?c[g]:null);for(f=_1d(q1d(M6d,d));f;f=_1d(q1d(M6d,f))){f==b&&this.d.Fc(d)}}}else if($1d(q1d(M6d,b))==1&&!!h){this.f=null;this.d=(m8d(),l8d)}else{this.f=null;this.e=true;this.d=(mmb(),new anb(b))}}}else{this.e=$1d(q1d(M6d,b))==5;this.f.Fb(W6d)&&(this.f=W6d)}} -function zKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;c=0;d=yKb(a,b);m=a.s;n=a.t;for(j=BD(BD(Qc(a.r,b),21),84).Kc();j.Ob();){i=BD(j.Pb(),111);if(!i.c||i.c.d.c.length<=0){continue}o=i.b.rf();h=i.b.Xe((Y9c(),s9c))?Edb(ED(i.b.We(s9c))):0;k=i.c;l=k.i;l.b=(g=k.n,k.e.a+g.b+g.c);l.a=(f=k.n,k.e.b+f.d+f.a);switch(b.g){case 1:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=o.b+h+d;$Hb(k,(NHb(),KHb));_Hb(k,(EIb(),DIb));break;case 3:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=-h-d-l.a;$Hb(k,(NHb(),KHb));_Hb(k,(EIb(),BIb));break;case 2:l.c=-h-d-l.b;if(i.a){e=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}$Hb(k,(NHb(),MHb));_Hb(k,(EIb(),CIb));break;case 4:l.c=o.a+h+d;if(i.a){e=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}$Hb(k,(NHb(),LHb));_Hb(k,(EIb(),CIb));}(b==(Ucd(),Acd)||b==Rcd)&&(c=$wnd.Math.max(c,l.a))}c>0&&(BD(Mpb(a.b,b),124).a.b=c)} -function b3b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(b,'Comment pre-processing',1);c=0;i=new olb(a.a);while(i.a<i.c.c.length){h=BD(mlb(i),10);if(Ccb(DD(vNb(h,(Nyc(),pwc))))){++c;e=0;d=null;j=null;for(o=new olb(h.j);o.a<o.c.c.length;){m=BD(mlb(o),11);e+=m.e.c.length+m.g.c.length;if(m.e.c.length==1){d=BD(Ikb(m.e,0),17);j=d.c}if(m.g.c.length==1){d=BD(Ikb(m.g,0),17);j=d.d}}if(e==1&&j.e.c.length+j.g.c.length==1&&!Ccb(DD(vNb(j.i,pwc)))){c3b(h,d,j,j.i);nlb(i)}else{r=new Rkb;for(n=new olb(h.j);n.a<n.c.c.length;){m=BD(mlb(n),11);for(l=new olb(m.g);l.a<l.c.c.length;){k=BD(mlb(l),17);k.d.g.c.length==0||(r.c[r.c.length]=k,true)}for(g=new olb(m.e);g.a<g.c.c.length;){f=BD(mlb(g),17);f.c.e.c.length==0||(r.c[r.c.length]=f,true)}}for(q=new olb(r);q.a<q.c.c.length;){p=BD(mlb(q),17);PZb(p,true)}}}}b.n&&Sdd(b,'Found '+c+' comment boxes');Qdd(b)} -function f9b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;m=Edb(ED(vNb(a,(Nyc(),tyc))));n=Edb(ED(vNb(a,uyc)));l=Edb(ED(vNb(a,ryc)));h=a.o;f=BD(Ikb(a.j,0),11);g=f.n;p=d9b(f,l);if(!p){return}if(b.Hc((rcd(),ncd))){switch(BD(vNb(a,(wtc(),Hsc)),61).g){case 1:p.c=(h.a-p.b)/2-g.a;p.d=n;break;case 3:p.c=(h.a-p.b)/2-g.a;p.d=-n-p.a;break;case 2:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=-m-p.b;break;case 4:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=m;}}else if(b.Hc(pcd)){switch(BD(vNb(a,(wtc(),Hsc)),61).g){case 1:case 3:p.c=g.a+m;break;case 2:case 4:if(c&&!f.c){k=d?p.a:BD(Ikb(f.f,0),70).o.b;p.d=(h.b-k)/2-g.b}else{p.d=g.b+n}}}e=p.d;for(j=new olb(f.f);j.a<j.c.c.length;){i=BD(mlb(j),70);o=i.n;o.a=p.c;o.b=e;e+=i.o.b+l}} -function eae(){rEd(Q9,new Lae);rEd(S9,new qbe);rEd(T9,new Xbe);rEd(U9,new Cce);rEd(ZI,new Oce);rEd(GC(SD,1),new Rce);rEd(wI,new Uce);rEd(xI,new Xce);rEd(ZI,new hae);rEd(ZI,new kae);rEd(ZI,new nae);rEd(BI,new qae);rEd(ZI,new tae);rEd(yK,new wae);rEd(yK,new zae);rEd(ZI,new Cae);rEd(FI,new Fae);rEd(ZI,new Iae);rEd(ZI,new Oae);rEd(ZI,new Rae);rEd(ZI,new Uae);rEd(ZI,new Xae);rEd(GC(SD,1),new $ae);rEd(ZI,new bbe);rEd(ZI,new ebe);rEd(yK,new hbe);rEd(yK,new kbe);rEd(ZI,new nbe);rEd(JI,new tbe);rEd(ZI,new wbe);rEd(MI,new zbe);rEd(ZI,new Cbe);rEd(ZI,new Fbe);rEd(ZI,new Ibe);rEd(ZI,new Lbe);rEd(yK,new Obe);rEd(yK,new Rbe);rEd(ZI,new Ube);rEd(ZI,new $be);rEd(ZI,new bce);rEd(ZI,new ece);rEd(ZI,new hce);rEd(ZI,new kce);rEd(UI,new nce);rEd(ZI,new qce);rEd(ZI,new tce);rEd(ZI,new wce);rEd(UI,new zce);rEd(MI,new Fce);rEd(ZI,new Ice);rEd(JI,new Lce)} -function Bmd(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=(BCb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BCb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=c.substr(1,m-1);u=dfb('%',h)?null:QEd(h);e=0;if(k){try{e=Icb(c.substr(m+2),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){i=a;throw vbb(new rFd(i))}else throw vbb(a)}}for(r=pRd(b.Wg());r.Ob();){p=MRd(r);if(JD(p,510)){f=BD(p,590);t=f.d;if((u==null?t==null:dfb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:c.substr(0,l);d=0;if(l!=-1){try{d=Icb(c.substr(l+1),Rie,Ohe)}catch(a){a=ubb(a);if(JD(a,127)){o=c}else throw vbb(a)}}o=dfb('%',o)?null:QEd(o);for(q=pRd(b.Wg());q.Ob();){p=MRd(q);if(JD(p,191)){g=BD(p,191);s=g.ne();if((o==null?s==null:dfb(o,s))&&d--==0){return g}}}return null}}return rid(b,c)} -function f6b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new Rkb;for(o=new olb(a.b);o.a<o.c.c.length;){n=BD(mlb(o),29);for(r=new olb(n.a);r.a<r.c.c.length;){p=BD(mlb(r),10);if(p.k!=(j0b(),e0b)){continue}if(!wNb(p,(wtc(),Gsc))){continue}s=null;u=null;t=null;for(C=new olb(p.j);C.a<C.c.c.length;){B=BD(mlb(C),11);switch(B.j.g){case 4:s=B;break;case 2:u=B;break;default:t=B;}}v=BD(Ikb(t.g,0),17);k=new t7c(v.a);j=new g7c(t.n);P6c(j,p.n);l=Jsb(k,0);Vsb(l,j);A=w7c(v.a);m=new g7c(t.n);P6c(m,p.n);Gsb(A,m,A.c.b,A.c);D=BD(vNb(p,Gsc),10);F=BD(Ikb(D.j,0),11);i=BD(Qkb(s.e,KC(AQ,jne,17,0,0,1)),474);for(d=i,f=0,h=d.length;f<h;++f){b=d[f];RZb(b,F);o7c(b.a,b.a.b,k)}i=k_b(u.g);for(c=i,e=0,g=c.length;e<g;++e){b=c[e];QZb(b,F);o7c(b.a,0,A)}QZb(v,null);RZb(v,null);w.c[w.c.length]=p}}for(q=new olb(w);q.a<q.c.c.length;){p=BD(mlb(q),10);$_b(p,null)}} -function lgb(){lgb=ccb;var a,b,c;new sgb(1,0);new sgb(10,0);new sgb(0,0);dgb=KC(bJ,nie,240,11,0,1);egb=KC(TD,$ie,25,100,15,1);fgb=OC(GC(UD,1),Vje,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);ggb=KC(WD,oje,25,fgb.length,15,1);hgb=OC(GC(UD,1),Vje,25,15,[1,10,100,_ie,10000,Wje,1000000,10000000,100000000,Jje,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);igb=KC(WD,oje,25,hgb.length,15,1);jgb=KC(bJ,nie,240,11,0,1);a=0;for(;a<jgb.length;a++){dgb[a]=new sgb(a,0);jgb[a]=new sgb(0,a);egb[a]=48}for(;a<egb.length;a++){egb[a]=48}for(c=0;c<ggb.length;c++){ggb[c]=ugb(fgb[c])}for(b=0;b<igb.length;b++){igb[b]=ugb(hgb[b])}Dhb()} -function zrb(){function e(){this.obj=this.createObject()} -;e.prototype.createObject=function(a){return Object.create(null)};e.prototype.get=function(a){return this.obj[a]};e.prototype.set=function(a,b){this.obj[a]=b};e.prototype[hke]=function(a){delete this.obj[a]};e.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)};e.prototype.entries=function(){var b=this.keys();var c=this;var d=0;return {next:function(){if(d>=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!xrb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[hke]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} -function cde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=KC(TD,$ie,25,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i<n;i++){b=a[e++];c=a[e++];d=a[e++];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2|q];f[g++]=_ce[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=_ce[o];f[g++]=_ce[p|j<<4];f[g++]=_ce[k<<2];f[g++]=61}return zfb(f,0,f.length)} -function mB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>Rie&&dB(b,a.p-nje);g=b.q.getDate();ZA(b,1);a.k>=0&&aB(b,a.k);if(a.c>=0){ZA(b,a.c)}else if(a.k>=0){i=new fB(b.q.getFullYear()-nje,b.q.getMonth(),35);d=35-i.q.getDate();ZA(b,$wnd.Math.min(d,g))}else{ZA(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);$A(b,a.f==24&&a.g?0:a.f);a.j>=0&&_A(b,a.j);a.n>=0&&bB(b,a.n);a.i>=0&&cB(b,wbb(Ibb(Abb(Cbb(b.q.getTime()),_ie),_ie),a.i));if(a.a){e=new eB;dB(e,e.q.getFullYear()-nje-80);Gbb(Cbb(b.q.getTime()),Cbb(e.q.getTime()))&&dB(b,e.q.getFullYear()-nje+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();ZA(b,b.q.getDate()+c);b.q.getMonth()!=h&&ZA(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>Rie){f=b.q.getTimezoneOffset();cB(b,wbb(Cbb(b.q.getTime()),(a.o-f)*60*_ie))}return true} -function z2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=vNb(b,(wtc(),$sc));if(!JD(e,239)){return}o=BD(e,33);p=b.e;m=new g7c(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=BD(hkd(o,(Nyc(),Ixc)),174);if(uqb(u,(Idd(),Add))){n=BD(hkd(o,Kxc),116);w_b(n,f.a);z_b(n,f.d);x_b(n,f.b);y_b(n,f.c)}c=new Rkb;for(k=new olb(b.a);k.a<k.c.c.length;){i=BD(mlb(k),10);if(JD(vNb(i,$sc),239)){A2b(i,m)}else if(JD(vNb(i,$sc),186)&&!p){d=BD(vNb(i,$sc),118);s=b_b(b,i,d.g,d.f);bld(d,s.a,s.b)}for(r=new olb(i.j);r.a<r.c.c.length;){q=BD(mlb(r),11);MAb(JAb(new YAb(null,new Kub(q.g,16)),new G2b(i)),new I2b(c))}}if(p){for(r=new olb(p.j);r.a<r.c.c.length;){q=BD(mlb(r),11);MAb(JAb(new YAb(null,new Kub(q.g,16)),new K2b(p)),new M2b(c))}}t=BD(hkd(o,Swc),218);for(h=new olb(c);h.a<h.c.c.length;){g=BD(mlb(h),17);y2b(g,t,m)}B2b(b);for(j=new olb(b.a);j.a<j.c.c.length;){i=BD(mlb(j),10);l=i.e;!!l&&z2b(a,l)}} -function xSb(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,ume),'ELK Force'),'Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported.'),new ASb),ume),qqb((Csd(),zsd),OC(GC(O3,1),Kie,237,0,[xsd])))));p4c(a,ume,vme,meb(1));p4c(a,ume,wme,80);p4c(a,ume,xme,5);p4c(a,ume,_le,tme);p4c(a,ume,yme,meb(1));p4c(a,ume,zme,(Bcb(),true));p4c(a,ume,ame,lSb);p4c(a,ume,Ame,Ksd(dSb));p4c(a,ume,Bme,Ksd(mSb));p4c(a,ume,Cme,false);p4c(a,ume,Dme,Ksd(jSb));p4c(a,ume,Eme,Ksd(iSb));p4c(a,ume,Fme,Ksd(hSb));p4c(a,ume,Gme,Ksd(gSb));p4c(a,ume,Hme,Ksd(nSb));p4c(a,ume,mme,Ksd(fSb));p4c(a,ume,pme,Ksd(vSb));p4c(a,ume,nme,Ksd(eSb));p4c(a,ume,rme,Ksd(qSb));p4c(a,ume,ome,Ksd(rSb))} -function GKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(BD(BD(Qc(a.r,b),21),84).dc()){return}g=BD(Mpb(a.b,b),124);i=g.i;h=g.n;k=KIb(a,b);d=i.b-h.b-h.c;e=g.a.a;f=i.c+h.b;n=a.w;if((k==(Tbd(),Qbd)||k==Sbd)&&BD(BD(Qc(a.r,b),21),84).gc()==1){e=k==Qbd?e-2*a.w:e;k=Pbd}if(d<e&&!a.B.Hc((Idd(),Fdd))){if(k==Qbd){n+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);f+=n}else{n+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1)}}else{if(d<e){e=k==Qbd?e-2*a.w:e;k=Pbd}switch(k.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);n+=$wnd.Math.max(0,c);f+=n;break;case 1:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1);n+=$wnd.Math.max(0,c);}}for(m=BD(BD(Qc(a.r,b),21),84).Kc();m.Ob();){l=BD(m.Pb(),111);l.e.a=f+l.d.b;l.e.b=(j=l.b,j.Xe((Y9c(),s9c))?j.Hf()==(Ucd(),Acd)?-j.rf().b-Edb(ED(j.We(s9c))):Edb(ED(j.We(s9c))):j.Hf()==(Ucd(),Acd)?-j.rf().b:0);f+=l.d.b+l.b.rf().a+l.d.c+n}} -function KKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(BD(BD(Qc(a.r,b),21),84).dc()){return}g=BD(Mpb(a.b,b),124);i=g.i;h=g.n;l=KIb(a,b);d=i.a-h.d-h.a;e=g.a.b;f=i.d+h.d;o=a.w;j=a.o.a;if((l==(Tbd(),Qbd)||l==Sbd)&&BD(BD(Qc(a.r,b),21),84).gc()==1){e=l==Qbd?e-2*a.w:e;l=Pbd}if(d<e&&!a.B.Hc((Idd(),Fdd))){if(l==Qbd){o+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);f+=o}else{o+=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1)}}else{if(d<e){e=l==Qbd?e-2*a.w:e;l=Pbd}switch(l.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()+1);o+=$wnd.Math.max(0,c);f+=o;break;case 1:c=(d-e)/(BD(BD(Qc(a.r,b),21),84).gc()-1);o+=$wnd.Math.max(0,c);}}for(n=BD(BD(Qc(a.r,b),21),84).Kc();n.Ob();){m=BD(n.Pb(),111);m.e.a=(k=m.b,k.Xe((Y9c(),s9c))?k.Hf()==(Ucd(),Tcd)?-k.rf().a-Edb(ED(k.We(s9c))):j+Edb(ED(k.We(s9c))):k.Hf()==(Ucd(),Tcd)?-k.rf().a:j);m.e.b=f+m.d.d;f+=m.d.d+m.b.rf().b+m.d.a+o}} -function Abc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;a.n=Edb(ED(vNb(a.g,(Nyc(),vyc))));a.e=Edb(ED(vNb(a.g,pyc)));a.i=a.g.b.c.length;h=a.i-1;m=0;a.j=0;a.k=0;a.a=Ou(KC(JI,nie,19,a.i,0,1));a.b=Ou(KC(BI,nie,333,a.i,7,1));for(g=new olb(a.g.b);g.a<g.c.c.length;){e=BD(mlb(g),29);e.p=h;for(l=new olb(e.a);l.a<l.c.c.length;){k=BD(mlb(l),10);k.p=m;++m}--h}a.f=KC(WD,oje,25,m,15,1);a.c=IC(WD,[nie,oje],[48,25],15,[m,3],2);a.o=new Rkb;a.p=new Rkb;b=0;a.d=0;for(f=new olb(a.g.b);f.a<f.c.c.length;){e=BD(mlb(f),29);h=e.p;d=0;p=0;i=e.a.c.length;j=0;for(l=new olb(e.a);l.a<l.c.c.length;){k=BD(mlb(l),10);m=k.p;a.f[m]=k.c.p;j+=k.o.b+a.n;c=sr(new Sr(ur(R_b(k).a.Kc(),new Sq)));o=sr(new Sr(ur(U_b(k).a.Kc(),new Sq)));a.c[m][0]=o-c;a.c[m][1]=c;a.c[m][2]=o;d+=c;p+=o;c>0&&Ekb(a.p,k);Ekb(a.o,k)}b-=d;n=i+b;j+=b*a.e;Nkb(a.a,h,meb(n));Nkb(a.b,h,j);a.j=$wnd.Math.max(a.j,n);a.k=$wnd.Math.max(a.k,j);a.d+=b;b+=p}} -function Ucd(){Ucd=ccb;var a;Scd=new Ycd(ole,0);Acd=new Ycd(xle,1);zcd=new Ycd(yle,2);Rcd=new Ycd(zle,3);Tcd=new Ycd(Ale,4);Fcd=(mmb(),new zob((a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0))));Gcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[])));Bcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[])));Ocd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[])));Qcd=Up(qqb(Tcd,OC(GC(F1,1),bne,61,0,[])));Lcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd])));Ecd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ncd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Tcd])));Hcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd])));Pcd=Up(qqb(Rcd,OC(GC(F1,1),bne,61,0,[Tcd])));Ccd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd])));Kcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Tcd])));Dcd=Up(qqb(zcd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Mcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[Rcd,Tcd])));Icd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd])));Jcd=Up(qqb(Acd,OC(GC(F1,1),bne,61,0,[zcd,Rcd,Tcd])))} -function fSc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Psb;h=null;o=null;d=QD($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Jsb(b,0);t.b!=t.d.c;){r=BD(Xsb(t),86);if(PD(o)!==PD(vNb(r,(mTc(),$Sc)))){o=GD(vNb(r,$Sc));i=0}o!=null?(h=o+iSc(i++,d)):(h=iSc(i++,d));yNb(r,$Sc,h);for(q=(e=Jsb((new ZRc(r)).a.d,0),new aSc(e));Wsb(q.a);){p=BD(Xsb(q.a),188).c;Gsb(n,p,n.c.b,n.c);yNb(p,$Sc,h)}}m=new Lqb;for(g=0;g<h.length-d;g++){for(s=Jsb(b,0);s.b!=s.d.c;){r=BD(Xsb(s),86);j=qfb(GD(vNb(r,(mTc(),$Sc))),0,g+1);c=(j==null?Wd(irb(m.f,null)):Crb(m.g,j))!=null?BD(j==null?Wd(irb(m.f,null)):Crb(m.g,j),19).a+1:1;Shb(m,j,meb(c))}}for(l=new nib((new eib(m)).a);l.b;){k=lib(l);f=meb(Ohb(a.a,k.cd())!=null?BD(Ohb(a.a,k.cd()),19).a:0);Shb(a.a,GD(k.cd()),meb(BD(k.dd(),19).a+f.a));f=BD(Ohb(a.b,k.cd()),19);(!f||f.a<BD(k.dd(),19).a)&&Shb(a.b,GD(k.cd()),BD(k.dd(),19))}fSc(a,n)}} -function PCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;Odd(c,'Interactive node layering',1);d=new Rkb;for(n=new olb(b.a);n.a<n.c.c.length;){l=BD(mlb(n),10);j=l.n.a;i=j+l.o.a;i=$wnd.Math.max(j+1,i);r=new Bib(d,0);e=null;while(r.b<r.d.gc()){p=(sCb(r.b<r.d.gc()),BD(r.d.Xb(r.c=r.b++),569));if(p.c>=i){sCb(r.b>0);r.a.Xb(r.c=--r.b);break}else if(p.a>j){if(!e){Ekb(p.b,l);p.c=$wnd.Math.min(p.c,j);p.a=$wnd.Math.max(p.a,i);e=p}else{Gkb(e.b,p.b);e.a=$wnd.Math.max(e.a,p.a);uib(r)}}}if(!e){e=new TCc;e.c=j;e.a=i;Aib(r,e);Ekb(e.b,l)}}h=b.b;k=0;for(q=new olb(d);q.a<q.c.c.length;){p=BD(mlb(q),569);f=new H1b(b);f.p=k++;h.c[h.c.length]=f;for(o=new olb(p.b);o.a<o.c.c.length;){l=BD(mlb(o),10);$_b(l,f);l.p=0}}for(m=new olb(b.a);m.a<m.c.c.length;){l=BD(mlb(m),10);l.p==0&&OCc(a,l,b)}g=new Bib(h,0);while(g.b<g.d.gc()){(sCb(g.b<g.d.gc()),BD(g.d.Xb(g.c=g.b++),29)).a.c.length==0&&uib(g)}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} -function Snc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(b.e.c.length!=0&&c.e.c.length!=0){d=BD(Ikb(b.e,0),17).c.i;g=BD(Ikb(c.e,0),17).c.i;if(d==g){return beb(BD(vNb(BD(Ikb(b.e,0),17),(wtc(),Zsc)),19).a,BD(vNb(BD(Ikb(c.e,0),17),Zsc),19).a)}for(k=a.a,l=0,m=k.length;l<m;++l){j=k[l];if(j==d){return 1}else if(j==g){return -1}}}if(b.g.c.length!=0&&c.g.c.length!=0){f=BD(vNb(b,(wtc(),Xsc)),10);i=BD(vNb(c,Xsc),10);e=0;h=0;wNb(BD(Ikb(b.g,0),17),Zsc)&&(e=BD(vNb(BD(Ikb(b.g,0),17),Zsc),19).a);wNb(BD(Ikb(c.g,0),17),Zsc)&&(h=BD(vNb(BD(Ikb(b.g,0),17),Zsc),19).a);if(!!f&&f==i){if(Ccb(DD(vNb(BD(Ikb(b.g,0),17),ltc)))&&!Ccb(DD(vNb(BD(Ikb(c.g,0),17),ltc)))){return 1}else if(!Ccb(DD(vNb(BD(Ikb(b.g,0),17),ltc)))&&Ccb(DD(vNb(BD(Ikb(c.g,0),17),ltc)))){return -1}return e<h?-1:e>h?1:0}if(a.b){a.b._b(f)&&(e=BD(a.b.xc(f),19).a);a.b._b(i)&&(h=BD(a.b.xc(i),19).a)}return e<h?-1:e>h?1:0}return b.e.c.length!=0&&c.g.c.length!=0?1:-1} -function acc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;Odd(b,Ine,1);p=new Rkb;w=new Rkb;for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),29);r=-1;o=l_b(i.a);for(l=o,m=0,n=l.length;m<n;++m){k=l[m];++r;if(!(k.k==(j0b(),h0b)&&fcd(BD(vNb(k,(Nyc(),Vxc)),98)))){continue}ecd(BD(vNb(k,(Nyc(),Vxc)),98))||bcc(k);yNb(k,(wtc(),Psc),k);p.c=KC(SI,Uhe,1,0,5,1);w.c=KC(SI,Uhe,1,0,5,1);c=new Rkb;u=new Psb;Jq(u,Y_b(k,(Ucd(),Acd)));$bc(a,u,p,w,c);h=r;A=k;for(f=new olb(p);f.a<f.c.c.length;){d=BD(mlb(f),10);Z_b(d,h,i);++r;yNb(d,Psc,k);g=BD(Ikb(d.j,0),11);q=BD(vNb(g,$sc),11);Ccb(DD(vNb(q,nwc)))||BD(vNb(d,Qsc),15).Fc(A)}Osb(u);for(t=Y_b(k,Rcd).Kc();t.Ob();){s=BD(t.Pb(),11);Gsb(u,s,u.a,u.a.a)}$bc(a,u,w,null,c);v=k;for(e=new olb(w);e.a<e.c.c.length;){d=BD(mlb(e),10);Z_b(d,++r,i);yNb(d,Psc,k);g=BD(Ikb(d.j,0),11);q=BD(vNb(g,$sc),11);Ccb(DD(vNb(q,nwc)))||BD(vNb(v,Qsc),15).Fc(d)}c.c.length==0||yNb(k,ssc,c)}}Qdd(b)} -function SQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;l=BD(vNb(a,(HSb(),FSb)),33);r=Ohe;s=Ohe;p=Rie;q=Rie;for(u=new olb(a.e);u.a<u.c.c.length;){t=BD(mlb(u),144);C=t.d;D=t.e;r=$wnd.Math.min(r,C.a-D.a/2);s=$wnd.Math.min(s,C.b-D.b/2);p=$wnd.Math.max(p,C.a+D.a/2);q=$wnd.Math.max(q,C.b+D.b/2)}B=BD(hkd(l,(wSb(),kSb)),116);A=new f7c(B.b-r,B.d-s);for(h=new olb(a.e);h.a<h.c.c.length;){g=BD(mlb(h),144);w=vNb(g,FSb);if(JD(w,239)){n=BD(w,33);v=P6c(g.d,A);bld(n,v.a-n.g/2,v.b-n.f/2)}}for(d=new olb(a.c);d.a<d.c.c.length;){c=BD(mlb(d),282);j=BD(vNb(c,FSb),79);k=itd(j,true,true);F=(H=c7c(R6c(c.d.d),c.c.d),l6c(H,c.c.e.a,c.c.e.b),P6c(H,c.c.d));nmd(k,F.a,F.b);b=(I=c7c(R6c(c.c.d),c.d.d),l6c(I,c.d.e.a,c.d.e.b),P6c(I,c.d.d));gmd(k,b.a,b.b)}for(f=new olb(a.d);f.a<f.c.c.length;){e=BD(mlb(f),447);m=BD(vNb(e,FSb),137);o=P6c(e.d,A);bld(m,o.a,o.b)}G=p-r+(B.b+B.c);i=q-s+(B.d+B.a);Afd(l,G,i,false,true)} -function bmc(a){var b,c,d,e,f,g,h,i,j,k,l,m;c=null;i=null;e=BD(vNb(a.b,(Nyc(),Wwc)),376);if(e==(_Ac(),ZAc)){c=new Rkb;i=new Rkb}for(h=new olb(a.d);h.a<h.c.c.length;){g=BD(mlb(h),101);f=g.i;if(!f){continue}switch(g.e.g){case 0:b=BD(Fqb(new Gqb(g.b)),61);e==ZAc&&b==(Ucd(),Acd)?(c.c[c.c.length]=g,true):e==ZAc&&b==(Ucd(),Rcd)?(i.c[i.c.length]=g,true):_lc(g,b);break;case 1:j=g.a.d.j;k=g.c.d.j;j==(Ucd(),Acd)?amc(g,Acd,(Ajc(),xjc),g.a):k==Acd?amc(g,Acd,(Ajc(),yjc),g.c):j==Rcd?amc(g,Rcd,(Ajc(),yjc),g.a):k==Rcd&&amc(g,Rcd,(Ajc(),xjc),g.c);break;case 2:case 3:d=g.b;uqb(d,(Ucd(),Acd))?uqb(d,Rcd)?uqb(d,Tcd)?uqb(d,zcd)||amc(g,Acd,(Ajc(),yjc),g.c):amc(g,Acd,(Ajc(),xjc),g.a):amc(g,Acd,(Ajc(),wjc),null):amc(g,Rcd,(Ajc(),wjc),null);break;case 4:l=g.a.d.j;m=g.a.d.j;l==(Ucd(),Acd)||m==Acd?amc(g,Rcd,(Ajc(),wjc),null):amc(g,Acd,(Ajc(),wjc),null);}}if(c){c.c.length==0||$lc(c,(Ucd(),Acd));i.c.length==0||$lc(i,(Ucd(),Rcd))}} -function A2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;d=BD(vNb(a,(wtc(),$sc)),33);o=BD(vNb(a,(Nyc(),Gwc)),19).a;f=BD(vNb(a,nxc),19).a;jkd(d,Gwc,meb(o));jkd(d,nxc,meb(f));dld(d,a.n.a+b.a);eld(d,a.n.b+b.b);if(BD(hkd(d,Fxc),174).gc()!=0||!!a.e||PD(vNb(Q_b(a),Exc))===PD((Vzc(),Tzc))&&Jzc((Izc(),(!a.q?(mmb(),mmb(),kmb):a.q)._b(Cxc)?(m=BD(vNb(a,Cxc),197)):(m=BD(vNb(Q_b(a),Dxc),197)),m))){cld(d,a.o.a);ald(d,a.o.b)}for(l=new olb(a.j);l.a<l.c.c.length;){j=BD(mlb(l),11);p=vNb(j,$sc);if(JD(p,186)){e=BD(p,118);bld(e,j.n.a,j.n.b);jkd(e,$xc,j.j)}}n=BD(vNb(a,xxc),174).gc()!=0;for(i=new olb(a.b);i.a<i.c.c.length;){g=BD(mlb(i),70);if(n||BD(vNb(g,xxc),174).gc()!=0){c=BD(vNb(g,$sc),137);_kd(c,g.o.a,g.o.b);bld(c,g.n.a,g.n.b)}}if(!tcd(BD(vNb(a,Yxc),21))){for(k=new olb(a.j);k.a<k.c.c.length;){j=BD(mlb(k),11);for(h=new olb(j.f);h.a<h.c.c.length;){g=BD(mlb(h),70);c=BD(vNb(g,$sc),137);cld(c,g.o.a);ald(c,g.o.b);bld(c,g.n.a,g.n.b)}}}} -function gtd(a){var b,c,d,e,f;ytb(a,hue);switch((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i+(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i){case 0:throw vbb(new Wdb('The edge must have at least one source or target.'));case 1:return (!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==0?Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82))):Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));}if((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b).i==1&&(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c).i==1){e=atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82));f=atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82));if(Xod(e)==Xod(f)){return Xod(e)}else if(e==Xod(f)){return e}else if(f==Xod(e)){return f}}d=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),(!a.c&&(a.c=new y5d(z2,a,5,8)),a.c)])));b=atd(BD(Rr(d),82));while(Qr(d)){c=atd(BD(Rr(d),82));if(c!=b&&!ntd(c,b)){if(Xod(c)==Xod(b)){b=Xod(c)}else{b=htd(b,c);if(!b){return null}}}}return b} -function KNc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;Odd(c,'Polyline edge routing',1);q=Edb(ED(vNb(b,(Nyc(),Uwc))));n=Edb(ED(vNb(b,wyc)));e=Edb(ED(vNb(b,myc)));d=$wnd.Math.min(1,e/n);t=0;i=0;if(b.b.c.length!=0){u=HNc(BD(Ikb(b.b,0),29));t=0.4*d*u}h=new Bib(b.b,0);while(h.b<h.d.gc()){g=(sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29));f=Kq(g,DNc);f&&t>0&&(t-=n);h_b(g,t);k=0;for(m=new olb(g.a);m.a<m.c.c.length;){l=BD(mlb(m),10);j=0;for(p=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(p);){o=BD(Rr(p),17);r=A0b(o.c).b;s=A0b(o.d).b;if(g==o.d.i.c&&!OZb(o)){LNc(o,t,0.4*d*$wnd.Math.abs(r-s));if(o.c.j==(Ucd(),Tcd)){r=0;s=0}}j=$wnd.Math.max(j,$wnd.Math.abs(s-r))}switch(l.k.g){case 0:case 4:case 1:case 3:case 5:MNc(a,l,t,q);}k=$wnd.Math.max(k,j)}if(h.b<h.d.gc()){u=HNc((sCb(h.b<h.d.gc()),BD(h.d.Xb(h.c=h.b++),29)));k=$wnd.Math.max(k,u);sCb(h.b>0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.b<h.d.gc()&&(i+=n);t+=g.c.a+i}a.a.a.$b();b.f.a=t;Qdd(c)} -function bic(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;k=new Lqb;i=new Hp;for(d=new olb(a.a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);j=tgc(b);if(j){jrb(k.f,j,b)}else{s=ugc(b);if(s){for(f=new olb(s.k);f.a<f.c.c.length;){e=BD(mlb(f),17);Rc(i,e,b)}}}}for(c=new olb(a.a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);j=tgc(b);if(j){for(h=new Sr(ur(U_b(j).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(OZb(g)){continue}o=g.c;r=g.d;if((Ucd(),Lcd).Hc(g.c.j)&&Lcd.Hc(g.d.j)){continue}p=BD(Ohb(k,g.d.i),57);AFb(DFb(CFb(EFb(BFb(new FFb,0),100),a.c[b.a.d]),a.c[p.a.d]));if(o.j==Tcd&&l1b((z0b(),w0b,o))){for(m=BD(Qc(i,g),21).Kc();m.Ob();){l=BD(m.Pb(),57);if(l.d.c<b.d.c){n=a.c[l.a.d];q=a.c[b.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}if(r.j==zcd&&g1b((z0b(),u0b,r))){for(m=BD(Qc(i,g),21).Kc();m.Ob();){l=BD(m.Pb(),57);if(l.d.c>b.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}AFb(DFb(CFb(EFb(BFb(new FFb,1),100),n),q))}}}}}}} -function QEd(a){IEd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=hfb(a,wfb(37));if(e<0){return a}else{i=new Wfb(a.substr(0,e));b=KC(SD,wte,25,4,15,1);h=0;d=0;for(g=a.length;e<g;e++){BCb(e,a.length);if(a.charCodeAt(e)==37&&a.length>e+2&&_Ed((BCb(e+1,a.length),a.charCodeAt(e+1)),xEd,yEd)&&_Ed((BCb(e+2,a.length),a.charCodeAt(e+2)),xEd,yEd)){c=dFd((BCb(e+1,a.length),a.charCodeAt(e+1)),(BCb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Kfb(i,((b[0]&31)<<6|b[1]&63)&aje);break}case 3:{Kfb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&aje);break}}h=0;d=0}}else{for(f=0;f<h;++f){Kfb(i,b[f]&aje)}h=0;i.a+=String.fromCharCode(c)}}else{for(f=0;f<h;++f){Kfb(i,b[f]&aje)}h=0;Kfb(i,(BCb(e,a.length),a.charCodeAt(e)))}}return i.a}} -function wA(a,b,c,d,e){var f,g,h;uA(a,b);g=b[0];f=bfb(c.c,0);h=-1;if(nA(c)){if(d>0){if(g+d>a.length){return false}h=rA(a.substr(0,g+d),b)}else{h=rA(a,b)}}switch(f){case 71:h=oA(a,g,OC(GC(ZI,1),nie,2,6,[pje,qje]),b);e.e=h;return true;case 77:return zA(a,b,e,h,g);case 76:return BA(a,b,e,h,g);case 69:return xA(a,b,g,e);case 99:return AA(a,b,g,e);case 97:h=oA(a,g,OC(GC(ZI,1),nie,2,6,['AM','PM']),b);e.b=h;return true;case 121:return DA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return yA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(g<a.length&&(BCb(g,a.length),a.charCodeAt(g)==90)){++b[0];e.o=0;return true}case 122:case 118:return CA(a,g,b,e);default:return false;}} -function vKb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=BD(BD(Qc(a.r,b),21),84);if(b==(Ucd(),zcd)||b==Tcd){zKb(a,b);return}f=b==Acd?(vLb(),rLb):(vLb(),uLb);u=b==Acd?(EIb(),DIb):(EIb(),BIb);c=BD(Mpb(a.b,b),124);d=c.i;e=d.c+w6c(OC(GC(UD,1),Vje,25,15,[c.n.b,a.C.b,a.k]));r=d.c+d.b-w6c(OC(GC(UD,1),Vje,25,15,[c.n.c,a.C.c,a.k]));g=dLb(iLb(f),a.t);s=b==Acd?Qje:Pje;for(l=m.Kc();l.Ob();){j=BD(l.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.rf();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);ytb(u,lle);n.f=u;$Hb(n,(NHb(),MHb));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.c<v?(o.c=v):o.c+o.b>w&&(o.c=w-o.b);Ekb(g.d,new BLb(o,bLb(g,o)));s=b==Acd?$wnd.Math.max(s,p.b+j.b.rf().b):$wnd.Math.min(s,p.b)}s+=b==Acd?a.t:-a.t;t=cLb((g.e=s,g));t>0&&(BD(Mpb(a.b,b),124).a.b=t);for(k=m.Kc();k.Ob();){j=BD(k.Pb(),111);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} -function SPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Lqb;for(i=new Fyd(a);i.e!=i.i.gc();){h=BD(Dyd(i),33);c=new Tqb;Rhb(OPb,h,c);n=new aQb;e=BD(GAb(new YAb(null,new Lub(new Sr(ur($sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[(Fyb(),Dyb)])))),83);RPb(c,BD(e.xc((Bcb(),true)),14),new cQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new eQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),79);m=ktd(f);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}e=BD(GAb(new YAb(null,new Lub(new Sr(ur(_sd(h).a.Kc(),new Sq)))),Wyb(n,Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb])))),83);RPb(c,BD(e.xc(true),14),new gQb);d=BD(GAb(JAb(BD(e.xc(false),15).Lc(),new iQb),Byb(new fzb,new dzb,new Ezb,OC(GC(xL,1),Kie,132,0,[Dyb]))),15);for(l=d.Kc();l.Ob();){k=BD(l.Pb(),79);m=mtd(k);if(m){j=BD(Wd(irb(b.f,m)),21);if(!j){j=UPb(m);jrb(b.f,m,j)}ye(c,j)}}}} -function rhb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=ybb(a,0)<0;i&&(a=Jbb(a));if(ybb(a,0)==0){switch(b){case 0:return '0';case 1:return $je;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:n=new Ufb;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==Rie?'2147483648':''+-b;return n.a;}}k=18;l=KC(TD,$ie,25,k+1,15,1);c=k;p=a;do{j=p;p=Abb(p,10);l[--c]=Tbb(wbb(48,Qbb(j,Ibb(p,10))))&aje}while(ybb(p,0)!=0);e=Qbb(Qbb(Qbb(k,c),b),1);if(b==0){i&&(l[--c]=45);return zfb(l,c,k-c)}if(b>0&&ybb(e,-6)>=0){if(ybb(e,0)>=0){f=c+Tbb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return zfb(l,c,k-c+1)}for(g=2;Gbb(g,wbb(Jbb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return zfb(l,c,k-c)}o=c+1;d=k;m=new Vfb;i&&(m.a+='-',m);if(d-o>=1){Kfb(m,l[c]);m.a+='.';m.a+=zfb(l,c+1,k-c-1)}else{m.a+=zfb(l,c,k-c)}m.a+='E';ybb(e,0)>0&&(m.a+='+',m);m.a+=''+Ubb(e);return m.a} -function iQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c=KC(SI,Uhe,1,0,5,1);a.i.c=KC(SI,Uhe,1,0,5,1);a.g.a.$b();if(b){for(g=new olb(b.a);g.a<g.c.c.length;){f=BD(mlb(g),10);for(l=Y_b(f,(Ucd(),zcd)).Kc();l.Ob();){k=BD(l.Pb(),11);Qqb(a.e,k);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(OZb(d)){continue}Ekb(a.c,d);oQc(a,d);h=d.c.i.k;(h==(j0b(),h0b)||h==i0b||h==e0b||h==d0b)&&Ekb(a.j,d);n=d.d;m=n.i.c;m==c?Qqb(a.f,n):m==b?Qqb(a.e,n):Lkb(a.c,d)}}}}if(c){for(g=new olb(c.a);g.a<g.c.c.length;){f=BD(mlb(g),10);for(j=new olb(f.j);j.a<j.c.c.length;){i=BD(mlb(j),11);for(e=new olb(i.g);e.a<e.c.c.length;){d=BD(mlb(e),17);OZb(d)&&Qqb(a.g,d)}}for(l=Y_b(f,(Ucd(),Tcd)).Kc();l.Ob();){k=BD(l.Pb(),11);Qqb(a.f,k);for(e=new olb(k.g);e.a<e.c.c.length;){d=BD(mlb(e),17);if(OZb(d)){continue}Ekb(a.c,d);oQc(a,d);h=d.c.i.k;(h==(j0b(),h0b)||h==i0b||h==e0b||h==d0b)&&Ekb(a.j,d);n=d.d;m=n.i.c;m==c?Qqb(a.f,n):m==b?Qqb(a.e,n):Lkb(a.c,d)}}}}} -function Afd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;q=new f7c(a.g,a.f);p=rfd(a);p.a=$wnd.Math.max(p.a,b);p.b=$wnd.Math.max(p.b,c);w=p.a/q.a;k=p.b/q.b;u=p.a-q.a;i=p.b-q.b;if(d){g=!Xod(a)?BD(hkd(a,(Y9c(),z8c)),103):BD(hkd(Xod(a),(Y9c(),z8c)),103);h=PD(hkd(a,(Y9c(),t9c)))===PD((dcd(),$bd));for(s=new Fyd((!a.c&&(a.c=new cUd(F2,a,9,9)),a.c));s.e!=s.i.gc();){r=BD(Dyd(s),118);t=BD(hkd(r,A9c),61);if(t==(Ucd(),Scd)){t=lfd(r,g);jkd(r,A9c,t)}switch(t.g){case 1:h||dld(r,r.i*w);break;case 2:dld(r,r.i+u);h||eld(r,r.j*k);break;case 3:h||dld(r,r.i*w);eld(r,r.j+i);break;case 4:h||eld(r,r.j*k);}}}_kd(a,p.a,p.b);if(e){for(m=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);n=l.i+l.g/2;o=l.j+l.f/2;v=n/q.a;j=o/q.b;if(v+j>=1){if(v-j>0&&o>=0){dld(l,l.i+u);eld(l,l.j+i*j)}else if(v-j<0&&n>=0){dld(l,l.i+u*v);eld(l,l.j+i)}}}}jkd(a,(Y9c(),Y8c),(tdd(),f=BD(gdb(I1),9),new xqb(f,BD(_Bb(f,f.length),9),0)));return new f7c(w,k)} -function Yfd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=Xod(atd(BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82)));o=Xod(atd(BD(qud((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c),0),82)));l=n==o;h=new d7c;b=BD(hkd(a,(Zad(),Sad)),74);if(!!b&&b.b>=2){if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){c=(Fhd(),e=new rmd,e);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){m=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(m.e!=m.i.gc()){Eyd(m)}}ifd(b,BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202))}if(l){for(d=new Fyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));d.e!=d.i.gc();){c=BD(Dyd(d),202);for(j=new Fyd((!c.a&&(c.a=new xMd(y2,c,5)),c.a));j.e!=j.i.gc();){i=BD(Dyd(j),469);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new Fyd((!a.n&&(a.n=new cUd(D2,a,1,7)),a.n));g.e!=g.i.gc();){f=BD(Dyd(g),137);k=BD(hkd(f,Yad),8);!!k&&bld(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} -function yMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new ULc(a.a,c,null,null);B=KC(UD,Vje,25,t,15,1);p=KC(UD,Vje,25,t,15,1);o=KC(UD,Vje,25,t,15,1);q=0;for(h=0;h<t;h++){p[h]=Ohe;o[h]=Rie}for(i=0;i<t;i++){d=(tCb(i,b.c.length),BD(b.c[i],180));B[i]=SLc(d);B[q]>B[i]&&(q=i);for(l=new olb(a.a.b);l.a<l.c.c.length;){k=BD(mlb(l),29);for(s=new olb(k.a);s.a<s.c.c.length;){r=BD(mlb(s),10);w=Edb(d.p[r.p])+Edb(d.d[r.p]);p[i]=$wnd.Math.min(p[i],w);o[i]=$wnd.Math.max(o[i],w+r.o.b)}}}A=KC(UD,Vje,25,t,15,1);for(j=0;j<t;j++){(tCb(j,b.c.length),BD(b.c[j],180)).o==(eMc(),cMc)?(A[j]=p[q]-p[j]):(A[j]=o[q]-o[j])}f=KC(UD,Vje,25,t,15,1);for(n=new olb(a.a.b);n.a<n.c.c.length;){m=BD(mlb(n),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);for(g=0;g<t;g++){f[g]=Edb((tCb(g,b.c.length),BD(b.c[g],180)).p[u.p])+Edb((tCb(g,b.c.length),BD(b.c[g],180)).d[u.p])+A[g]}f.sort(dcb(Ylb.prototype.te,Ylb,[]));e.p[u.p]=(f[1]+f[2])/2;e.d[u.p]=0}}return e} -function G3b(a,b,c){var d,e,f,g,h;d=b.i;f=a.i.o;e=a.i.d;h=a.n;g=l7c(OC(GC(m1,1),nie,8,0,[h,a.a]));switch(a.j.g){case 1:_Hb(b,(EIb(),BIb));d.d=-e.d-c-d.a;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){$Hb(b,(NHb(),MHb));d.c=g.a-Edb(ED(vNb(a,Ysc)))-c-d.b}else{$Hb(b,(NHb(),LHb));d.c=g.a+Edb(ED(vNb(a,Ysc)))+c}break;case 2:$Hb(b,(NHb(),LHb));d.c=f.a+e.c+c;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){_Hb(b,(EIb(),BIb));d.d=g.b-Edb(ED(vNb(a,Ysc)))-c-d.a}else{_Hb(b,(EIb(),DIb));d.d=g.b+Edb(ED(vNb(a,Ysc)))+c}break;case 3:_Hb(b,(EIb(),DIb));d.d=f.b+e.a+c;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){$Hb(b,(NHb(),MHb));d.c=g.a-Edb(ED(vNb(a,Ysc)))-c-d.b}else{$Hb(b,(NHb(),LHb));d.c=g.a+Edb(ED(vNb(a,Ysc)))+c}break;case 4:$Hb(b,(NHb(),MHb));d.c=-e.b-c-d.b;if(BD(BD(Ikb(b.d,0),181).We((wtc(),Ssc)),285)==(rbd(),nbd)){_Hb(b,(EIb(),BIb));d.d=g.b-Edb(ED(vNb(a,Ysc)))-c-d.a}else{_Hb(b,(EIb(),DIb));d.d=g.b+Edb(ED(vNb(a,Ysc)))+c}}} -function ded(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=0;D=0;for(i=new olb(a);i.a<i.c.c.length;){h=BD(mlb(i),33);zfd(h);n=$wnd.Math.max(n,h.g);D+=h.g*h.f}o=D/a.c.length;C=$dd(a,o);D+=a.c.length*C;n=$wnd.Math.max(n,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;m=0;k=c.b+c.c;B=new Psb;Dsb(B,meb(0));w=new Psb;j=new Bib(a,0);while(j.b<j.d.gc()){h=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),33));G=h.g;l=h.f;if(H+G>n){if(f){Fsb(w,m);Fsb(B,meb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}dld(h,H);eld(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(F<e){m+=e-F;F=e}if(f){H=c.b;j=new Bib(a,0);Fsb(B,meb(a.c.length));A=Jsb(B,0);r=BD(Xsb(A),19).a;Fsb(w,m);v=Jsb(w,0);u=0;while(j.b<j.d.gc()){if(j.b==r){H=c.b;u=Edb(ED(Xsb(v)));r=BD(Xsb(A),19).a}h=(sCb(j.b<j.d.gc()),BD(j.d.Xb(j.c=j.b++),33));s=h.f;ald(h,u);p=u;if(j.b==r){q=k-H-c.c;t=h.g;cld(h,q);Ffd(h,new f7c(q,p),new f7c(t,s))}H+=h.g+b}}return new f7c(k,F)} -function _Yb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;Odd(b,'Compound graph postprocessor',1);c=Ccb(DD(vNb(a,(Nyc(),Byc))));h=BD(vNb(a,(wtc(),zsc)),224);k=new Tqb;for(r=h.ec().Kc();r.Ob();){q=BD(r.Pb(),17);g=new Tkb(h.cc(q));mmb();Okb(g,new EZb(a));v=zZb((tCb(0,g.c.length),BD(g.c[0],243)));A=AZb(BD(Ikb(g,g.c.length-1),243));t=v.i;f_b(A.i,t)?(s=t.e):(s=Q_b(t));l=aZb(q,g);Osb(q.a);m=null;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),243);p=new d7c;Y$b(p,e.a,s);n=e.b;d=new s7c;o7c(d,0,n.a);q7c(d,p);u=new g7c(A0b(n.c));w=new g7c(A0b(n.d));P6c(u,p);P6c(w,p);if(m){d.b==0?(o=w):(o=(sCb(d.b!=0),BD(d.a.a.c,8)));B=$wnd.Math.abs(m.a-o.a)>qme;C=$wnd.Math.abs(m.b-o.b)>qme;(!c&&B&&C||c&&(B||C))&&Dsb(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sCb(d.b!=0),BD(d.c.b.c,8)));bZb(n,l,p);if(AZb(e)==A){if(Q_b(A.i)!=e.a){p=new d7c;Y$b(p,Q_b(A.i),s)}yNb(q,utc,p)}cZb(n,q,s);k.a.zc(n,k)}QZb(q,v);RZb(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=BD(j.Pb(),17);QZb(i,null);RZb(i,null)}Qdd(b)} -function KQb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return BD(a.Xb(0),231)}else if(a.gc()<=0){return new kRb}for(e=a.Kc();e.Ob();){c=BD(e.Pb(),231);o=0;k=Ohe;l=Ohe;i=Rie;j=Rie;for(n=new olb(c.e);n.a<n.c.c.length;){m=BD(mlb(n),144);o+=BD(vNb(m,(wSb(),oSb)),19).a;k=$wnd.Math.min(k,m.d.a-m.e.a/2);l=$wnd.Math.min(l,m.d.b-m.e.b/2);i=$wnd.Math.max(i,m.d.a+m.e.a/2);j=$wnd.Math.max(j,m.d.b+m.e.b/2)}yNb(c,(wSb(),oSb),meb(o));yNb(c,(HSb(),ESb),new f7c(k,l));yNb(c,DSb,new f7c(i,j))}mmb();a.ad(new OQb);p=new kRb;tNb(p,BD(a.Xb(0),94));h=0;s=0;for(f=a.Kc();f.Ob();){c=BD(f.Pb(),231);q=c7c(R6c(BD(vNb(c,(HSb(),DSb)),8)),BD(vNb(c,ESb),8));h=$wnd.Math.max(h,q.a);s+=q.a*q.b}h=$wnd.Math.max(h,$wnd.Math.sqrt(s)*Edb(ED(vNb(p,(wSb(),bSb)))));r=Edb(ED(vNb(p,uSb)));t=0;u=0;g=0;b=r;for(d=a.Kc();d.Ob();){c=BD(d.Pb(),231);q=c7c(R6c(BD(vNb(c,(HSb(),DSb)),8)),BD(vNb(c,ESb),8));if(t+q.a>h){t=0;u+=g+r;g=0}JQb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} -function Ioc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new s7c;switch(a.a.g){case 3:m=BD(vNb(b.e,(wtc(),rtc)),15);n=BD(vNb(b.j,rtc),15);o=BD(vNb(b.f,rtc),15);c=BD(vNb(b.e,ptc),15);d=BD(vNb(b.j,ptc),15);e=BD(vNb(b.f,ptc),15);g=new Rkb;Gkb(g,m);n.Jc(new Loc);Gkb(g,JD(n,152)?km(BD(n,152)):JD(n,131)?BD(n,131).a:JD(n,54)?new ov(n):new dv(n));Gkb(g,o);f=new Rkb;Gkb(f,c);Gkb(f,JD(d,152)?km(BD(d,152)):JD(d,131)?BD(d,131).a:JD(d,54)?new ov(d):new dv(d));Gkb(f,e);yNb(b.f,rtc,g);yNb(b.f,ptc,f);yNb(b.f,stc,b.f);yNb(b.e,rtc,null);yNb(b.e,ptc,null);yNb(b.j,rtc,null);yNb(b.j,ptc,null);break;case 1:ye(k,b.e.a);Dsb(k,b.i.n);ye(k,Su(b.j.a));Dsb(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,Su(b.j.a));ye(k,b.f.a);}Osb(b.f.a);ye(b.f.a,k);QZb(b.f,b.e.c);h=BD(vNb(b.e,(Nyc(),jxc)),74);j=BD(vNb(b.j,jxc),74);i=BD(vNb(b.f,jxc),74);if(!!h||!!j||!!i){l=new s7c;Goc(l,i);Goc(l,j);Goc(l,h);yNb(b.f,jxc,l)}QZb(b.j,null);RZb(b.j,null);QZb(b.e,null);RZb(b.e,null);$_b(b.a,null);$_b(b.i,null);!!b.g&&Ioc(a,b.g)} -function bde(a){ade();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=rfb(a);o=ede(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return KC(SD,wte,25,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=KC(SD,wte,25,p*3,15,1);for(;n<p-1;n++){if(!dde(g=f[k++])||!dde(h=f[k++])||!dde(i=f[k++])||!dde(j=f[k++]))return null;b=$ce[g];c=$ce[h];d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!dde(g=f[k++])||!dde(h=f[k++])){return null}b=$ce[g];c=$ce[h];i=f[k++];j=f[k++];if($ce[i]==-1||$ce[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=KC(SD,wte,25,n*3+1,15,1);$fb(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=$ce[i];if((d&3)!=0)return null;q=KC(SD,wte,25,n*3+2,15,1);$fb(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=$ce[i];e=$ce[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} -function Sbc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(b,Ine,1);o=BD(vNb(a,(Nyc(),Swc)),218);for(e=new olb(a.b);e.a<e.c.c.length;){d=BD(mlb(e),29);j=l_b(d.a);for(g=j,h=0,i=g.length;h<i;++h){f=g[h];if(f.k!=(j0b(),i0b)){continue}if(o==(Aad(),yad)){for(l=new olb(f.j);l.a<l.c.c.length;){k=BD(mlb(l),11);k.e.c.length==0||Vbc(k);k.g.c.length==0||Wbc(k)}}else if(JD(vNb(f,(wtc(),$sc)),17)){q=BD(vNb(f,$sc),17);r=BD(Y_b(f,(Ucd(),Tcd)).Kc().Pb(),11);s=BD(Y_b(f,zcd).Kc().Pb(),11);t=BD(vNb(r,$sc),11);u=BD(vNb(s,$sc),11);QZb(q,u);RZb(q,t);v=new g7c(s.i.n);v.a=l7c(OC(GC(m1,1),nie,8,0,[u.i.n,u.n,u.a])).a;Dsb(q.a,v);v=new g7c(r.i.n);v.a=l7c(OC(GC(m1,1),nie,8,0,[t.i.n,t.n,t.a])).a;Dsb(q.a,v)}else{if(f.j.c.length>=2){p=true;m=new olb(f.j);c=BD(mlb(m),11);n=null;while(m.a<m.c.c.length){n=c;c=BD(mlb(m),11);if(!pb(vNb(n,$sc),vNb(c,$sc))){p=false;break}}}else{p=false}for(l=new olb(f.j);l.a<l.c.c.length;){k=BD(mlb(l),11);k.e.c.length==0||Tbc(k,p);k.g.c.length==0||Ubc(k,p)}}$_b(f,null)}}Qdd(b)} -function KJc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=a.c[(tCb(0,b.c.length),BD(b.c[0],17)).p];A=a.c[(tCb(1,b.c.length),BD(b.c[1],17)).p];if(t.a.e.e-t.a.a-(t.b.e.e-t.b.a)==0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)==0){return false}r=t.b.e.f;if(!JD(r,10)){return false}q=BD(r,10);v=a.i[q.p];w=!q.c?-1:Jkb(q.c.a,q,0);f=Pje;if(w>0){e=BD(Ikb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(jBc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=Pje;if(w<q.c.a.c.length-1){i=BD(Ikb(q.c.a,w+1),10);k=a.i[i.p];B=$wnd.Math.ceil(jBc(a.n,i,q));j=k.a.e-i.d.d-(v.a.e+q.o.b+q.d.a)-B}if(c&&(Iy(),My(Jqe),$wnd.Math.abs(f-j)<=Jqe||f==j||isNaN(f)&&isNaN(j))){return true}d=gKc(t.a);h=-gKc(t.b);l=-gKc(A.a);s=gKc(A.b);p=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)>0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.a<A.b.e.e+A.a.a;m=t.a.e.e+t.b.a>A.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} -function XGb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new J6c(b.qf().a,b.qf().b,b.rf().a,b.rf().b);e=new I6c;if(a.c){for(g=new olb(b.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);e.c=f.qf().a+b.qf().a;e.d=f.qf().b+b.qf().b;e.b=f.rf().a;e.a=f.rf().b;H6c(d,e)}}for(j=new olb(b.Cf());j.a<j.c.c.length;){i=BD(mlb(j),838);k=i.qf().a+b.qf().a;l=i.qf().b+b.qf().b;if(a.e){e.c=k;e.d=l;e.b=i.rf().a;e.a=i.rf().b;H6c(d,e)}if(a.d){for(g=new olb(i.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);e.c=f.qf().a+k;e.d=f.qf().b+l;e.b=f.rf().a;e.a=f.rf().b;H6c(d,e)}}if(a.b){m=new f7c(-c,-c);if(BD(b.We((Y9c(),x9c)),174).Hc((rcd(),pcd))){for(g=new olb(i.wf());g.a<g.c.c.length;){f=BD(mlb(g),181);m.a+=f.rf().a+c;m.b+=f.rf().b+c}}m.a=$wnd.Math.max(m.a,0);m.b=$wnd.Math.max(m.b,0);VGb(d,i.Bf(),i.zf(),b,i,m,c)}}a.b&&VGb(d,b.Bf(),b.zf(),b,null,null,c);h=new K_b(b.Af());h.d=$wnd.Math.max(0,b.qf().b-d.d);h.a=$wnd.Math.max(0,d.d+d.a-(b.qf().b+b.rf().b));h.b=$wnd.Math.max(0,b.qf().a-d.c);h.c=$wnd.Math.max(0,d.c+d.b-(b.qf().a+b.rf().a));b.Ef(h)} -function wz(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} -function pid(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new Rkb;l=b.length;g=AUd(c);for(j=0;j<l;++j){k=ifb(b,wfb(61),j);d=$hd(g,b.substr(j,k-j));e=KJd(d);f=e.Aj().Nh();switch(bfb(b,++k)){case 39:{h=gfb(b,39,++k);Ekb(i,new kGd(d,Pid(b.substr(k,h-k),f,e)));j=h+1;break}case 34:{h=gfb(b,34,++k);Ekb(i,new kGd(d,Pid(b.substr(k,h-k),f,e)));j=h+1;break}case 91:{m=new Rkb;Ekb(i,new kGd(d,m));n:for(;;){switch(bfb(b,++k)){case 39:{h=gfb(b,39,++k);Ekb(m,Pid(b.substr(k,h-k),f,e));k=h+1;break}case 34:{h=gfb(b,34,++k);Ekb(m,Pid(b.substr(k,h-k),f,e));k=h+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){m.c[m.c.length]=null}else{throw vbb(new hz(kte))}k+=3;break}}if(k<l){switch(BCb(k,b.length),b.charCodeAt(k)){case 44:{break}case 93:{break n}default:{throw vbb(new hz('Expecting , or ]'))}}}else{break}}j=k+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){Ekb(i,new kGd(d,null))}else{throw vbb(new hz(kte))}j=k+3;break}}if(j<l){BCb(j,b.length);if(b.charCodeAt(j)!=44){throw vbb(new hz('Expecting ,'))}}else{break}}return qid(a,i,c)} -function AKb(a,b){var c,d,e,f,g,h,i,j,k,l,m;j=BD(BD(Qc(a.r,b),21),84);g=bKb(a,b);c=a.u.Hc((rcd(),lcd));for(i=j.Kc();i.Ob();){h=BD(i.Pb(),111);if(!h.c||h.c.d.c.length<=0){continue}m=h.b.rf();k=h.c;l=k.i;l.b=(f=k.n,k.e.a+f.b+f.c);l.a=(e=k.n,k.e.b+e.d+e.a);switch(b.g){case 1:if(h.a){l.c=(m.a-l.b)/2;$Hb(k,(NHb(),KHb))}else if(g||c){l.c=-l.b-a.s;$Hb(k,(NHb(),MHb))}else{l.c=m.a+a.s;$Hb(k,(NHb(),LHb))}l.d=-l.a-a.t;_Hb(k,(EIb(),BIb));break;case 3:if(h.a){l.c=(m.a-l.b)/2;$Hb(k,(NHb(),KHb))}else if(g||c){l.c=-l.b-a.s;$Hb(k,(NHb(),MHb))}else{l.c=m.a+a.s;$Hb(k,(NHb(),LHb))}l.d=m.b+a.t;_Hb(k,(EIb(),DIb));break;case 2:if(h.a){d=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(m.b-d)/2;_Hb(k,(EIb(),CIb))}else if(g||c){l.d=-l.a-a.t;_Hb(k,(EIb(),BIb))}else{l.d=m.b+a.t;_Hb(k,(EIb(),DIb))}l.c=m.a+a.s;$Hb(k,(NHb(),LHb));break;case 4:if(h.a){d=a.v?l.a:BD(Ikb(k.d,0),181).rf().b;l.d=(m.b-d)/2;_Hb(k,(EIb(),CIb))}else if(g||c){l.d=-l.a-a.t;_Hb(k,(EIb(),BIb))}else{l.d=m.b+a.t;_Hb(k,(EIb(),DIb))}l.c=-l.b-a.s;$Hb(k,(NHb(),MHb));}g=false}} -function Kfe(a,b){wfe();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(Vhb(Zee)==0){l=KC(lbb,nie,117,_ee.length,0,1);for(g=0;g<l.length;g++){l[g]=(++vfe,new $fe(4))}d=new Ifb;for(f=0;f<Yee.length;f++){k=(++vfe,new $fe(4));if(f<84){h=f*2;n=(BCb(h,wxe.length),wxe.charCodeAt(h));m=(BCb(h+1,wxe.length),wxe.charCodeAt(h+1));Ufe(k,n,m)}else{h=(f-84)*2;Ufe(k,afe[h],afe[h+1])}i=Yee[f];dfb(i,'Specials')&&Ufe(k,65520,65533);if(dfb(i,uxe)){Ufe(k,983040,1048573);Ufe(k,1048576,1114109)}Shb(Zee,i,k);Shb($ee,i,_fe(k));j=d.a.length;0<j?(d.a=d.a.substr(0,0)):0>j&&(d.a+=yfb(KC(TD,$ie,25,-j,15,1)));d.a+='Is';if(hfb(i,wfb(32))>=0){for(e=0;e<i.length;e++){BCb(e,i.length);i.charCodeAt(e)!=32&&Afb(d,(BCb(e,i.length),i.charCodeAt(e)))}}else{d.a+=''+i}Ofe(d.a,i,true)}Ofe(vxe,'Cn',false);Ofe(xxe,'Cn',true);c=(++vfe,new $fe(4));Ufe(c,0,lxe);Shb(Zee,'ALL',c);Shb($ee,'ALL',_fe(c));!bfe&&(bfe=new Lqb);Shb(bfe,vxe,vxe);!bfe&&(bfe=new Lqb);Shb(bfe,xxe,xxe);!bfe&&(bfe=new Lqb);Shb(bfe,'ALL','ALL')}o=b?BD(Phb(Zee,a),136):BD(Phb($ee,a),136);return o} -function c3b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;m=false;l=false;if(fcd(BD(vNb(d,(Nyc(),Vxc)),98))){g=false;h=false;t:for(o=new olb(d.j);o.a<o.c.c.length;){n=BD(mlb(o),11);for(q=ul(pl(OC(GC(KI,1),Uhe,20,0,[new J0b(n),new R0b(n)])));Qr(q);){p=BD(Rr(q),11);if(!Ccb(DD(vNb(p.i,pwc)))){if(n.j==(Ucd(),Acd)){g=true;break t}if(n.j==Rcd){h=true;break t}}}}m=h&&!g;l=g&&!h}if(!m&&!l&&d.b.c.length!=0){k=0;for(j=new olb(d.b);j.a<j.c.c.length;){i=BD(mlb(j),70);k+=i.n.b+i.o.b/2}k/=d.b.c.length;s=k>=d.o.b/2}else{s=!l}if(s){r=BD(vNb(d,(wtc(),vtc)),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else if(m){f=r}else{e=BD(vNb(d,tsc),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=BD(vNb(d,(wtc(),tsc)),15);if(!e){f=new Rkb;yNb(d,tsc,f)}else if(l){f=e}else{r=BD(vNb(d,vtc),15);if(!r){f=new Rkb;yNb(d,vtc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);yNb(a,(wtc(),vsc),c);if(b.d==c){RZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null);d3b(c)}else{QZb(b,null);c.e.c.length+c.g.c.length==0&&F0b(c,null)}Osb(b.a)} -function aoc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Bib(a.b,0);k=b.Kc();o=0;j=BD(k.Pb(),19).a;v=0;c=new Tqb;A=new zsb;while(s.b<s.d.gc()){r=(sCb(s.b<s.d.gc()),BD(s.d.Xb(s.c=s.b++),29));for(u=new olb(r.a);u.a<u.c.c.length;){t=BD(mlb(u),10);for(n=new Sr(ur(U_b(t).a.Kc(),new Sq));Qr(n);){l=BD(Rr(n),17);A.a.zc(l,A)}for(m=new Sr(ur(R_b(t).a.Kc(),new Sq));Qr(m);){l=BD(Rr(m),17);A.a.Bc(l)!=null}}if(o+1==j){e=new H1b(a);Aib(s,e);f=new H1b(a);Aib(s,f);for(C=A.a.ec().Kc();C.Ob();){B=BD(C.Pb(),17);if(!c.a._b(B)){++v;c.a.zc(B,c)}g=new b0b(a);yNb(g,(Nyc(),Vxc),(dcd(),acd));$_b(g,e);__b(g,(j0b(),d0b));p=new H0b;F0b(p,g);G0b(p,(Ucd(),Tcd));D=new H0b;F0b(D,g);G0b(D,zcd);d=new b0b(a);yNb(d,Vxc,acd);$_b(d,f);__b(d,d0b);q=new H0b;F0b(q,d);G0b(q,Tcd);F=new H0b;F0b(F,d);G0b(F,zcd);w=new UZb;QZb(w,B.c);RZb(w,p);H=new UZb;QZb(H,D);RZb(H,q);QZb(B,F);h=new goc(g,d,w,H,B);yNb(g,(wtc(),usc),h);yNb(d,usc,h);G=w.c.i;if(G.k==d0b){i=BD(vNb(G,usc),305);i.d=h;h.g=i}}if(k.Ob()){j=BD(k.Pb(),19).a}else{break}}++o}return meb(v)} -function T1b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;l=0;for(e=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);if(!Ccb(DD(hkd(d,(Nyc(),Jxc))))){if((PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&!Ccb(DD(hkd(d,xwc)))){jkd(d,(wtc(),Zsc),meb(l));++l}$1b(a,d,c)}}l=0;for(j=new Fyd((!b.b&&(b.b=new cUd(B2,b,12,3)),b.b));j.e!=j.i.gc();){h=BD(Dyd(j),79);if(PD(hkd(b,(Nyc(),ywc)))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb))){jkd(h,(wtc(),Zsc),meb(l));++l}o=jtd(h);p=ltd(h);k=Ccb(DD(hkd(o,fxc)));n=!Ccb(DD(hkd(h,Jxc)));m=k&&Qld(h)&&Ccb(DD(hkd(h,gxc)));f=Xod(o)==b&&Xod(o)==Xod(p);g=(Xod(o)==b&&p==b)^(Xod(p)==b&&o==b);n&&!m&&(g||f)&&X1b(a,h,b,c)}if(Xod(b)){for(i=new Fyd(Wod(Xod(b)));i.e!=i.i.gc();){h=BD(Dyd(i),79);o=jtd(h);if(o==b&&Qld(h)){m=Ccb(DD(hkd(o,(Nyc(),fxc))))&&Ccb(DD(hkd(h,gxc)));m&&X1b(a,h,b,c)}}}} -function gDc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;Odd(c,'MinWidth layering',1);n=b.b;A=b.a;I=BD(vNb(b,(Nyc(),oxc)),19).a;h=BD(vNb(b,pxc),19).a;a.b=Edb(ED(vNb(b,lyc)));a.d=Pje;for(u=new olb(A);u.a<u.c.c.length;){s=BD(mlb(u),10);if(s.k!=(j0b(),h0b)){continue}D=s.o.b;a.d=$wnd.Math.min(a.d,D)}a.d=$wnd.Math.max(1,a.d);B=A.c.length;a.c=KC(WD,oje,25,B,15,1);a.f=KC(WD,oje,25,B,15,1);a.e=KC(UD,Vje,25,B,15,1);j=0;a.a=0;for(v=new olb(A);v.a<v.c.c.length;){s=BD(mlb(v),10);s.p=j++;a.c[s.p]=eDc(R_b(s));a.f[s.p]=eDc(U_b(s));a.e[s.p]=s.o.b/a.d;a.a+=a.e[s.p]}a.b/=a.d;a.a/=B;w=fDc(A);Okb(A,tmb(new mDc(a)));p=Pje;o=Ohe;g=null;H=I;G=I;f=h;e=h;if(I<0){H=BD(bDc.a.zd(),19).a;G=BD(bDc.b.zd(),19).a}if(h<0){f=BD(aDc.a.zd(),19).a;e=BD(aDc.b.zd(),19).a}for(F=H;F<=G;F++){for(d=f;d<=e;d++){C=dDc(a,F,d,A,w);r=Edb(ED(C.a));m=BD(C.b,15);q=m.gc();if(r<p||r==p&&q<o){p=r;o=q;g=m}}}for(l=g.Kc();l.Ob();){k=BD(l.Pb(),15);i=new H1b(b);for(t=k.Kc();t.Ob();){s=BD(t.Pb(),10);$_b(s,i)}n.c[n.c.length]=i}smb(n);A.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} -function I6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;a.b=b;a.a=BD(vNb(b,(Nyc(),bxc)),19).a;a.c=BD(vNb(b,dxc),19).a;a.c==0&&(a.c=Ohe);q=new Bib(b.b,0);while(q.b<q.d.gc()){p=(sCb(q.b<q.d.gc()),BD(q.d.Xb(q.c=q.b++),29));h=new Rkb;k=-1;u=-1;for(t=new olb(p.a);t.a<t.c.c.length;){s=BD(mlb(t),10);if(sr((D6b(),new Sr(ur(O_b(s).a.Kc(),new Sq))))>=a.a){d=E6b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Ekb(h,new vgd(s,d))}}B=new Rkb;for(j=0;j<k;++j){Dkb(B,0,(sCb(q.b>0),q.a.Xb(q.c=--q.b),C=new H1b(a.b),Aib(q,C),sCb(q.b<q.d.gc()),q.d.Xb(q.c=q.b++),C))}for(g=new olb(h);g.a<g.c.c.length;){e=BD(mlb(g),46);n=BD(e.b,571).a;if(!n){continue}for(m=new olb(n);m.a<m.c.c.length;){l=BD(mlb(m),10);H6b(a,l,B6b,B)}}c=new Rkb;for(i=0;i<u;++i){Ekb(c,(D=new H1b(a.b),Aib(q,D),D))}for(f=new olb(h);f.a<f.c.c.length;){e=BD(mlb(f),46);A=BD(e.b,571).c;if(!A){continue}for(w=new olb(A);w.a<w.c.c.length;){v=BD(mlb(w),10);H6b(a,v,C6b,c)}}}r=new Bib(b.b,0);while(r.b<r.d.gc()){o=(sCb(r.b<r.d.gc()),BD(r.d.Xb(r.c=r.b++),29));o.a.c.length==0&&uib(r)}} -function uQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;Odd(c,'Spline edge routing',1);if(b.b.c.length==0){b.f.a=0;Qdd(c);return}s=Edb(ED(vNb(b,(Nyc(),wyc))));h=Edb(ED(vNb(b,pyc)));g=Edb(ED(vNb(b,myc)));r=BD(vNb(b,Xwc),336);B=r==(tBc(),sBc);A=Edb(ED(vNb(b,Ywc)));a.d=b;a.j.c=KC(SI,Uhe,1,0,5,1);a.a.c=KC(SI,Uhe,1,0,5,1);Uhb(a.k);i=BD(Ikb(b.b,0),29);k=Kq(i.a,(FNc(),DNc));o=BD(Ikb(b.b,b.b.c.length-1),29);l=Kq(o.a,DNc);p=new olb(b.b);q=null;G=0;do{t=p.a<p.c.c.length?BD(mlb(p),29):null;iQc(a,q,t);lQc(a);C=Vtb(uAb(PAb(JAb(new YAb(null,new Kub(a.i,16)),new LQc),new NQc)));F=0;u=G;m=!q||k&&q==i;n=!t||l&&t==o;if(C>0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,jQc(t,g,s,A)));if(j<s&&!m&&!n){F=(s-j)/2;j=s}u+=j}else !m&&!n&&(u+=s);!!t&&h_b(t,u);for(w=new olb(a.i);w.a<w.c.c.length;){v=BD(mlb(w),128);v.a.c=G;v.a.b=u-G;v.F=F;v.p=!q}Gkb(a.a,a.i);G=u;!!t&&(G+=t.c.a);q=t;m=n}while(t);for(e=new olb(a.j);e.a<e.c.c.length;){d=BD(mlb(e),17);f=pQc(a,d);yNb(d,(wtc(),ptc),f);D=rQc(a,d);yNb(d,rtc,D)}b.f.a=G;a.d=null;Qdd(c)} -function Yxd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;p=a.i!=0;t=false;r=null;if(oid(a.e)){k=b.gc();if(k>0){m=k<100?null:new Ixd(k);j=new Aud(b);o=j.g;r=KC(WD,oje,25,k,15,1);d=0;u=new zud(k);for(e=0;e<a.i;++e){h=a.g[e];n=h;v:for(s=0;s<2;++s){for(i=k;--i>=0;){if(n!=null?pb(n,o[i]):PD(n)===PD(o[i])){if(r.length<=d){q=r;r=KC(WD,oje,25,2*r.length,15,1);$fb(q,0,r,0,d)}r[d++]=e;wtd(u,o[i]);break v}}n=n;if(PD(n)===PD(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}if(d>0){t=true;for(f=0;f<d;++f){n=o[f];m=k3d(a,BD(n,72),m)}for(g=d;--g>=0;){tud(a,r[g])}if(d!=k){for(e=k;--e>=d;){tud(j,e)}q=r;r=KC(WD,oje,25,d,15,1);$fb(q,0,r,0,d)}b=j}}}else{b=Ctd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){tud(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?FLd(a,4,b.Kc().Pb(),null,r[0],p):FLd(a,6,b,r,r[0],p);m=c<100?null:new Ixd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}if(!m){Uhd(a.e,l)}else{m.Ei(l);m.Fi()}}else{m=Vxd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=Q2d(a,BD(n,72),m)}!!m&&m.Fi()}return true}else{return false}} -function fYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new mYb(b);c.a||$Xb(b);j=ZXb(b);i=new Hp;q=new AYb;for(p=new olb(b.a);p.a<p.c.c.length;){o=BD(mlb(p),10);for(e=new Sr(ur(U_b(o).a.Kc(),new Sq));Qr(e);){d=BD(Rr(e),17);if(d.c.i.k==(j0b(),e0b)||d.d.i.k==e0b){k=eYb(a,d,j,q);Rc(i,cYb(k.d),k.a)}}}g=new Rkb;for(t=BD(vNb(c.c,(wtc(),Esc)),21).Kc();t.Ob();){s=BD(t.Pb(),61);n=q.c[s.g];m=q.b[s.g];h=q.a[s.g];f=null;r=null;switch(s.g){case 4:f=new J6c(a.d.a,n,j.b.a-a.d.a,m-n);r=new J6c(a.d.a,n,h,m-n);iYb(j,new f7c(f.c+f.b,f.d));iYb(j,new f7c(f.c+f.b,f.d+f.a));break;case 2:f=new J6c(j.a.a,n,a.c.a-j.a.a,m-n);r=new J6c(a.c.a-h,n,h,m-n);iYb(j,new f7c(f.c,f.d));iYb(j,new f7c(f.c,f.d+f.a));break;case 1:f=new J6c(n,a.d.b,m-n,j.b.b-a.d.b);r=new J6c(n,a.d.b,m-n,h);iYb(j,new f7c(f.c,f.d+f.a));iYb(j,new f7c(f.c+f.b,f.d+f.a));break;case 3:f=new J6c(n,j.a.b,m-n,a.c.b-j.a.b);r=new J6c(n,a.c.b-h,m-n,h);iYb(j,new f7c(f.c,f.d));iYb(j,new f7c(f.c+f.b,f.d));}if(f){l=new vYb;l.d=s;l.b=f;l.c=r;l.a=Dx(BD(Qc(i,cYb(s)),21));g.c[g.c.length]=l}}Gkb(c.b,g);c.d=BWb(JWb(j));return c} -function pMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(c.p[b.p]!=null){return}h=true;c.p[b.p]=0;g=b;p=c.o==(eMc(),cMc)?Qje:Pje;do{e=a.b.e[g.p];f=g.c.a.c.length;if(c.o==cMc&&e>0||c.o==dMc&&e<f-1){i=null;j=null;c.o==dMc?(i=BD(Ikb(g.c.a,e+1),10)):(i=BD(Ikb(g.c.a,e-1),10));j=c.g[i.p];pMc(a,j,c);p=a.e.bg(p,b,g);c.j[b.p]==b&&(c.j[b.p]=c.j[j.p]);if(c.j[b.p]==c.j[j.p]){o=jBc(a.d,g,i);if(c.o==dMc){d=Edb(c.p[b.p]);l=Edb(c.p[j.p])+Edb(c.d[i.p])-i.d.d-o-g.d.a-g.o.b-Edb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.min(l,p)}else{c.p[b.p]=$wnd.Math.min(d,$wnd.Math.min(l,p))}}else{d=Edb(c.p[b.p]);l=Edb(c.p[j.p])+Edb(c.d[i.p])+i.o.b+i.d.a+o+g.d.d-Edb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.max(l,p)}else{c.p[b.p]=$wnd.Math.max(d,$wnd.Math.max(l,p))}}}else{o=Edb(ED(vNb(a.a,(Nyc(),vyc))));n=nMc(a,c.j[b.p]);k=nMc(a,c.j[j.p]);if(c.o==dMc){m=Edb(c.p[b.p])+Edb(c.d[g.p])+g.o.b+g.d.a+o-(Edb(c.p[j.p])+Edb(c.d[i.p])-i.d.d);tMc(n,k,m)}else{m=Edb(c.p[b.p])+Edb(c.d[g.p])-g.d.d-Edb(c.p[j.p])-Edb(c.d[i.p])-i.o.b-i.d.a-o;tMc(n,k,m)}}}else{p=a.e.bg(p,b,g)}g=c.a[g.p]}while(g!=b);SMc(a.e,b)} -function _qd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;t=b;s=new Hp;u=new Hp;k=Ypd(t,Nte);d=new ord(a,c,s,u);qqd(d.a,d.b,d.c,d.d,k);i=(A=s.i,!A?(s.i=new zf(s,s.c)):A);for(C=i.Kc();C.Ob();){B=BD(C.Pb(),202);e=BD(Qc(s,B),21);for(p=e.Kc();p.Ob();){o=p.Pb();v=BD(oo(a.d,o),202);if(v){h=(!B.e&&(B.e=new y5d(A2,B,10,9)),B.e);wtd(h,v)}else{g=_pd(t,Vte);m=_te+o+aue+g;n=m+$te;throw vbb(new cqd(n))}}}j=(w=u.i,!w?(u.i=new zf(u,u.c)):w);for(F=j.Kc();F.Ob();){D=BD(F.Pb(),202);f=BD(Qc(u,D),21);for(r=f.Kc();r.Ob();){q=r.Pb();v=BD(oo(a.d,q),202);if(v){l=(!D.g&&(D.g=new y5d(A2,D,9,10)),D.g);wtd(l,v)}else{g=_pd(t,Vte);m=_te+q+aue+g;n=m+$te;throw vbb(new cqd(n))}}}!c.b&&(c.b=new y5d(z2,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new y5d(z2,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new y5d(z2,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new y5d(z2,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new cUd(A2,c,6,6)),c.a).i==1){G=BD(qud((!c.a&&(c.a=new cUd(A2,c,6,6)),c.a),0),202);if(!dmd(G)&&!emd(G)){kmd(G,BD(qud((!c.b&&(c.b=new y5d(z2,c,4,7)),c.b),0),82));lmd(G,BD(qud((!c.c&&(c.c=new y5d(z2,c,5,8)),c.c),0),82))}}} -function qJc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;for(t=a.a,u=0,v=t.length;u<v;++u){s=t[u];j=Ohe;k=Ohe;for(o=new olb(s.e);o.a<o.c.c.length;){m=BD(mlb(o),10);g=!m.c?-1:Jkb(m.c.a,m,0);if(g>0){l=BD(Ikb(m.c.a,g-1),10);B=jBc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(g<m.c.a.c.length-1){l=BD(Ikb(m.c.a,g+1),10);B=jBc(a.b,m,l);r=l.n.b-l.d.d-(m.n.b+m.o.b+m.d.a+B)}else{r=2*m.n.b}k=$wnd.Math.min(r,k)}i=Ohe;f=false;e=BD(Ikb(s.e,0),10);for(D=new olb(e.j);D.a<D.c.c.length;){C=BD(mlb(D),11);p=e.n.b+C.n.b+C.a.b;for(d=new olb(C.e);d.a<d.c.c.length;){c=BD(mlb(d),17);w=c.c;b=w.i.n.b+w.n.b+w.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}h=BD(Ikb(s.e,s.e.c.length-1),10);for(A=new olb(h.j);A.a<A.c.c.length;){w=BD(mlb(A),11);p=h.n.b+w.n.b+w.a.b;for(d=new olb(w.g);d.a<d.c.c.length;){c=BD(mlb(d),17);C=c.d;b=C.i.n.b+C.n.b+C.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}if(f&&i!=0){for(n=new olb(s.e);n.a<n.c.c.length;){m=BD(mlb(n),10);m.n.b+=i}}}} -function ync(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(Mhb(a.a,b)){if(Rqb(BD(Ohb(a.a,b),53),c)){return 1}}else{Rhb(a.a,b,new Tqb)}if(Mhb(a.a,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return -1}}else{Rhb(a.a,c,new Tqb)}if(Mhb(a.e,b)){if(Rqb(BD(Ohb(a.e,b),53),c)){return -1}}else{Rhb(a.e,b,new Tqb)}if(Mhb(a.e,c)){if(Rqb(BD(Ohb(a.a,c),53),b)){return 1}}else{Rhb(a.e,c,new Tqb)}if(a.c==(tAc(),sAc)||!wNb(b,(wtc(),Zsc))||!wNb(c,(wtc(),Zsc))){i=BD(Etb(Dtb(KAb(JAb(new YAb(null,new Kub(b.j,16)),new Hnc)),new Jnc)),11);k=BD(Etb(Dtb(KAb(JAb(new YAb(null,new Kub(c.j,16)),new Lnc)),new Nnc)),11);if(!!i&&!!k){h=i.i;j=k.i;if(!!h&&h==j){for(m=new olb(h.j);m.a<m.c.c.length;){l=BD(mlb(m),11);if(l==i){Anc(a,c,b);return -1}else if(l==k){Anc(a,b,c);return 1}}return beb(znc(a,b),znc(a,c))}for(o=a.d,p=0,q=o.length;p<q;++p){n=o[p];if(n==h){Anc(a,c,b);return -1}else if(n==j){Anc(a,b,c);return 1}}}if(!wNb(b,(wtc(),Zsc))||!wNb(c,Zsc)){e=znc(a,b);g=znc(a,c);e>g?Anc(a,b,c):Anc(a,c,b);return e<g?-1:e>g?1:0}}d=BD(vNb(b,(wtc(),Zsc)),19).a;f=BD(vNb(c,Zsc),19).a;d>f?Anc(a,b,c):Anc(a,c,b);return d<f?-1:d>f?1:0} -function u2c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;if(Ccb(DD(hkd(b,(Y9c(),d9c))))){return mmb(),mmb(),jmb}j=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i!=0;l=s2c(b);k=!l.dc();if(j||k){e=BD(hkd(b,F9c),149);if(!e){throw vbb(new y2c('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}s=D3c(e,(Csd(),ysd));q2c(b);if(!j&&k&&!s){return mmb(),mmb(),jmb}i=new Rkb;if(PD(hkd(b,J8c))===PD((hbd(),ebd))&&(D3c(e,vsd)||D3c(e,usd))){n=p2c(a,b);o=new Psb;ye(o,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(o.b!=0){m=BD(o.b==0?null:(sCb(o.b!=0),Nsb(o,o.a.a)),33);q2c(m);r=PD(hkd(m,J8c))===PD(gbd);if(r||ikd(m,o8c)&&!C3c(e,hkd(m,F9c))){h=u2c(a,m,c,d);Gkb(i,h);jkd(m,J8c,gbd);hfd(m)}else{ye(o,(!m.a&&(m.a=new cUd(E2,m,10,11)),m.a))}}}else{n=(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a).i;for(g=new Fyd((!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));g.e!=g.i.gc();){f=BD(Dyd(g),33);h=u2c(a,f,c,d);Gkb(i,h);hfd(f)}}for(q=new olb(i);q.a<q.c.c.length;){p=BD(mlb(q),79);jkd(p,d9c,(Bcb(),true))}r2c(b,e,Udd(d,n));v2c(i);return k&&s?l:(mmb(),mmb(),jmb)}else{return mmb(),mmb(),jmb}} -function Z$b(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p;n=c;k=new b0b(i);__b(k,(j0b(),e0b));yNb(k,(wtc(),Isc),g);yNb(k,(Nyc(),Vxc),(dcd(),$bd));p=Edb(ED(a.We(Uxc)));yNb(k,Uxc,p);l=new H0b;F0b(l,k);if(!(b!=bcd&&b!=ccd)){d>=0?(n=Zcd(h)):(n=Wcd(Zcd(h)));a.Ye($xc,n)}j=new d7c;m=false;if(a.Xe(Txc)){a7c(j,BD(a.We(Txc),8));m=true}else{_6c(j,g.a/2,g.b/2)}switch(n.g){case 4:yNb(k,mxc,(Ctc(),ytc));yNb(k,Bsc,(Gqc(),Fqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),zcd));m||(j.a=g.a);j.a-=g.a;break;case 2:yNb(k,mxc,(Ctc(),Atc));yNb(k,Bsc,(Gqc(),Dqc));k.o.b=g.b;p<0&&(k.o.a=-p);G0b(l,(Ucd(),Tcd));m||(j.a=0);break;case 1:yNb(k,Osc,(esc(),dsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Rcd));m||(j.b=g.b);j.b-=g.b;break;case 3:yNb(k,Osc,(esc(),bsc));k.o.a=g.a;p<0&&(k.o.b=-p);G0b(l,(Ucd(),Acd));m||(j.b=0);}a7c(l.n,j);yNb(k,Txc,j);if(b==Zbd||b==_bd||b==$bd){o=0;if(b==Zbd&&a.Xe(Wxc)){switch(n.g){case 1:case 2:o=BD(a.We(Wxc),19).a;break;case 3:case 4:o=-BD(a.We(Wxc),19).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==_bd&&(o/=e.b);break;case 1:case 3:o=f.a;b==_bd&&(o/=e.a);}}yNb(k,htc,o)}yNb(k,Hsc,n);return k} -function AGc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Edb(ED(vNb(a.a.j,(Nyc(),Ewc))));if(c<-1||!a.a.i||ecd(BD(vNb(a.a.o,Vxc),98))||V_b(a.a.o,(Ucd(),zcd)).gc()<2&&V_b(a.a.o,Tcd).gc()<2){return true}if(a.a.c.Rf()){return false}v=0;u=0;t=new Rkb;for(i=a.a.e,j=0,k=i.length;j<k;++j){h=i[j];for(m=h,n=0,p=m.length;n<p;++n){l=m[n];if(l.k==(j0b(),i0b)){t.c[t.c.length]=l;continue}d=a.b[l.c.p][l.p];if(l.k==e0b){d.b=1;BD(vNb(l,(wtc(),$sc)),11).j==(Ucd(),zcd)&&(u+=d.a)}else{C=V_b(l,(Ucd(),Tcd));C.dc()||!Lq(C,new NGc)?(d.c=1):(e=V_b(l,zcd),(e.dc()||!Lq(e,new JGc))&&(v+=d.a))}for(g=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);v+=d.c;u+=d.b;B=f.d.i;zGc(a,d,B)}r=pl(OC(GC(KI,1),Uhe,20,0,[V_b(l,(Ucd(),Acd)),V_b(l,Rcd)]));for(A=new Sr(new xl(r.a.length,r.a));Qr(A);){w=BD(Rr(A),11);s=BD(vNb(w,(wtc(),gtc)),10);if(s){v+=d.c;u+=d.b;zGc(a,d,s)}}}for(o=new olb(t);o.a<o.c.c.length;){l=BD(mlb(o),10);d=a.b[l.c.p][l.p];for(g=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(g);){f=BD(Rr(g),17);v+=d.c;u+=d.b;B=f.d.i;zGc(a,d,B)}}t.c=KC(SI,Uhe,1,0,5,1)}b=v+u;q=b==0?Pje:(v-u)/b;return q>=c} -function ovd(){mvd();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=pvd((mmb(),new lnb(new $ib(lvd.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=pvd((mmb(),new lnb(new $ib(lvd.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=pvd((mmb(),new lnb(new $ib(lvd.d))));f.postMessage({id:b.id,data:e});break;case 'register':svd(b.algorithms);f.postMessage({id:b.id});break;case 'layout':qvd(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} -function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} -if(typeof document===uke&&typeof self!==uke){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==uke&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} -function aae(a){if(a.N)return;a.N=true;a.b=Lnd(a,0);Knd(a.b,0);Knd(a.b,1);Knd(a.b,2);a.bb=Lnd(a,1);Knd(a.bb,0);Knd(a.bb,1);a.fb=Lnd(a,2);Knd(a.fb,3);Knd(a.fb,4);Qnd(a.fb,5);a.qb=Lnd(a,3);Knd(a.qb,0);Qnd(a.qb,1);Qnd(a.qb,2);Knd(a.qb,3);Knd(a.qb,4);Qnd(a.qb,5);Knd(a.qb,6);a.a=Mnd(a,4);a.c=Mnd(a,5);a.d=Mnd(a,6);a.e=Mnd(a,7);a.f=Mnd(a,8);a.g=Mnd(a,9);a.i=Mnd(a,10);a.j=Mnd(a,11);a.k=Mnd(a,12);a.n=Mnd(a,13);a.o=Mnd(a,14);a.p=Mnd(a,15);a.q=Mnd(a,16);a.s=Mnd(a,17);a.r=Mnd(a,18);a.t=Mnd(a,19);a.u=Mnd(a,20);a.v=Mnd(a,21);a.w=Mnd(a,22);a.B=Mnd(a,23);a.A=Mnd(a,24);a.C=Mnd(a,25);a.D=Mnd(a,26);a.F=Mnd(a,27);a.G=Mnd(a,28);a.H=Mnd(a,29);a.J=Mnd(a,30);a.I=Mnd(a,31);a.K=Mnd(a,32);a.M=Mnd(a,33);a.L=Mnd(a,34);a.P=Mnd(a,35);a.Q=Mnd(a,36);a.R=Mnd(a,37);a.S=Mnd(a,38);a.T=Mnd(a,39);a.U=Mnd(a,40);a.V=Mnd(a,41);a.X=Mnd(a,42);a.W=Mnd(a,43);a.Y=Mnd(a,44);a.Z=Mnd(a,45);a.$=Mnd(a,46);a._=Mnd(a,47);a.ab=Mnd(a,48);a.cb=Mnd(a,49);a.db=Mnd(a,50);a.eb=Mnd(a,51);a.gb=Mnd(a,52);a.hb=Mnd(a,53);a.ib=Mnd(a,54);a.jb=Mnd(a,55);a.kb=Mnd(a,56);a.lb=Mnd(a,57);a.mb=Mnd(a,58);a.nb=Mnd(a,59);a.ob=Mnd(a,60);a.pb=Mnd(a,61)} -function f5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new olb(a);q.a<q.c.c.length;){o=BD(mlb(q),10);s=$wnd.Math.max(s,o.n.a+o.o.a+o.d.c)}}else{s=b.f.a-b.c.a}s-=b.c.a;for(p=new olb(a);p.a<p.c.c.length;){o=BD(mlb(p),10);g5b(o.n,s-o.o.a);h5b(o.f);d5b(o);(!o.q?(mmb(),mmb(),kmb):o.q)._b((Nyc(),ayc))&&g5b(BD(vNb(o,ayc),8),s-o.o.a);switch(BD(vNb(o,mwc),248).g){case 1:yNb(o,mwc,(F7c(),D7c));break;case 2:yNb(o,mwc,(F7c(),C7c));}r=o.o;for(u=new olb(o.j);u.a<u.c.c.length;){t=BD(mlb(u),11);g5b(t.n,r.a-t.o.a);g5b(t.a,t.o.a);G0b(t,Z4b(t.j));g=BD(vNb(t,Wxc),19);!!g&&yNb(t,Wxc,meb(-g.a));for(f=new olb(t.g);f.a<f.c.c.length;){e=BD(mlb(f),17);for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);c.a=s-c.a}j=BD(vNb(e,jxc),74);if(j){for(i=Jsb(j,0);i.b!=i.d.c;){h=BD(Xsb(i),8);h.a=s-h.a}}for(m=new olb(e.b);m.a<m.c.c.length;){k=BD(mlb(m),70);g5b(k.n,s-k.o.a)}}for(n=new olb(t.f);n.a<n.c.c.length;){k=BD(mlb(n),70);g5b(k.n,t.o.a-k.o.a)}}if(o.k==(j0b(),e0b)){yNb(o,(wtc(),Hsc),Z4b(BD(vNb(o,Hsc),61)));c5b(o)}for(l=new olb(o.b);l.a<l.c.c.length;){k=BD(mlb(l),70);d5b(k);g5b(k.n,r.a-k.o.a)}}} -function i5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.b==0){for(q=new olb(a);q.a<q.c.c.length;){o=BD(mlb(q),10);s=$wnd.Math.max(s,o.n.b+o.o.b+o.d.a)}}else{s=b.f.b-b.c.b}s-=b.c.b;for(p=new olb(a);p.a<p.c.c.length;){o=BD(mlb(p),10);j5b(o.n,s-o.o.b);k5b(o.f);e5b(o);(!o.q?(mmb(),mmb(),kmb):o.q)._b((Nyc(),ayc))&&j5b(BD(vNb(o,ayc),8),s-o.o.b);switch(BD(vNb(o,mwc),248).g){case 3:yNb(o,mwc,(F7c(),A7c));break;case 4:yNb(o,mwc,(F7c(),E7c));}r=o.o;for(u=new olb(o.j);u.a<u.c.c.length;){t=BD(mlb(u),11);j5b(t.n,r.b-t.o.b);j5b(t.a,t.o.b);G0b(t,$4b(t.j));g=BD(vNb(t,Wxc),19);!!g&&yNb(t,Wxc,meb(-g.a));for(f=new olb(t.g);f.a<f.c.c.length;){e=BD(mlb(f),17);for(d=Jsb(e.a,0);d.b!=d.d.c;){c=BD(Xsb(d),8);c.b=s-c.b}j=BD(vNb(e,jxc),74);if(j){for(i=Jsb(j,0);i.b!=i.d.c;){h=BD(Xsb(i),8);h.b=s-h.b}}for(m=new olb(e.b);m.a<m.c.c.length;){k=BD(mlb(m),70);j5b(k.n,s-k.o.b)}}for(n=new olb(t.f);n.a<n.c.c.length;){k=BD(mlb(n),70);j5b(k.n,t.o.b-k.o.b)}}if(o.k==(j0b(),e0b)){yNb(o,(wtc(),Hsc),$4b(BD(vNb(o,Hsc),61)));b5b(o)}for(l=new olb(o.b);l.a<l.c.c.length;){k=BD(mlb(l),70);e5b(k);j5b(k.n,r.b-k.o.b)}}} -function tZc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;l=false;j=a+1;k=(tCb(a,b.c.length),BD(b.c[a],200));g=k.a;h=null;for(f=0;f<k.a.c.length;f++){e=(tCb(f,g.c.length),BD(g.c[f],187));if(e.c){continue}if(e.b.c.length==0){Zfb();v$c(k,e);--f;l=true;continue}if(!e.k){!!h&&a$c(h);h=new b$c(!h?0:h.e+h.d+d,k.f,d);OZc(e,h.e+h.d,k.f);Ekb(k.d,h);WZc(h,e);e.k=true}i=null;i=(n=null,f<k.a.c.length-1?(n=BD(Ikb(k.a,f+1),187)):j<b.c.length&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length!=0&&(n=BD(Ikb((tCb(j,b.c.length),BD(b.c[j],200)).a,0),187)),n);m=false;!!i&&(m=!pb(i.j,k));if(i){if(i.b.c.length==0){v$c(k,i);break}else{KZc(e,c-e.s);a$c(e.q);l=l|sZc(k,e,i,c,d)}if(i.b.c.length==0){v$c((tCb(j,b.c.length),BD(b.c[j],200)),i);i=null;while(b.c.length>j&&(tCb(j,b.c.length),BD(b.c[j],200)).a.c.length==0){Lkb(b,(tCb(j,b.c.length),b.c[j]))}}if(!i){--f;continue}if(uZc(b,k,e,i,m,c,j,d)){l=true;continue}if(m){if(vZc(b,k,e,i,c,j,d)){l=true;continue}else if(wZc(k,e)){e.c=true;l=true;continue}}else if(wZc(k,e)){e.c=true;l=true;continue}if(l){continue}}if(wZc(k,e)){e.c=true;l=true;!!i&&(i.k=false);continue}else{a$c(e.q)}}return l} -function fed(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new olb(a.b);j.a<j.c.c.length;){i=BD(mlb(j),157);!!i.c&&zfd(i.c);p=$wnd.Math.max(p,red(i));D+=red(i)*qed(i)}q=D/a.b.c.length;C=_dd(a.b,q);D+=a.b.c.length*C;p=$wnd.Math.max(p,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;n=0;l=c.b+c.c;B=new Psb;Dsb(B,meb(0));w=new Psb;k=new Bib(a.b,0);o=null;h=new Rkb;while(k.b<k.d.gc()){i=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),157));G=red(i);m=qed(i);if(H+G>p){if(f){Fsb(w,n);Fsb(B,meb(k.b-1));Ekb(a.d,o);h.c=KC(SI,Uhe,1,0,5,1)}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}h.c[h.c.length]=i;ued(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Gkb(a.a,h);Ekb(a.d,BD(Ikb(h,h.c.length-1),157));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F<e){n+=e-F;F=e}if(f){H=c.b;k=new Bib(a.b,0);Fsb(B,meb(a.b.c.length));A=Jsb(B,0);s=BD(Xsb(A),19).a;Fsb(w,n);v=Jsb(w,0);u=0;while(k.b<k.d.gc()){if(k.b==s){H=c.b;u=Edb(ED(Xsb(v)));s=BD(Xsb(A),19).a}i=(sCb(k.b<k.d.gc()),BD(k.d.Xb(k.c=k.b++),157));sed(i,u);if(k.b==s){r=l-H-c.c;t=red(i);ted(i,r);ved(i,(r-t)/2,0)}H+=red(i)+b}}return new f7c(l,F)} -function pde(a){var b,c,d,e,f;b=a.c;f=null;switch(b){case 6:return a.Vl();case 13:return a.Wl();case 23:return a.Nl();case 22:return a.Sl();case 18:return a.Pl();case 8:nde(a);f=(wfe(),efe);break;case 9:return a.vl(true);case 19:return a.wl();case 10:switch(a.a){case 100:case 68:case 119:case 87:case 115:case 83:f=a.ul(a.a);nde(a);return f;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:{c=a.tl();c<Tje?(f=(wfe(),wfe(),++vfe,new ige(0,c))):(f=Ffe(Tee(c)))}break;case 99:return a.Fl();case 67:return a.Al();case 105:return a.Il();case 73:return a.Bl();case 103:return a.Gl();case 88:return a.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return a.xl();case 80:case 112:f=tde(a,a.a);if(!f)throw vbb(new mde(tvd((h0d(),Iue))));break;default:f=zfe(a.a);}nde(a);break;case 0:if(a.a==93||a.a==123||a.a==125)throw vbb(new mde(tvd((h0d(),Hue))));f=zfe(a.a);d=a.a;nde(a);if((d&64512)==Uje&&a.c==0&&(a.a&64512)==56320){e=KC(TD,$ie,25,2,15,1);e[0]=d&aje;e[1]=a.a&aje;f=Efe(Ffe(zfb(e,0,e.length)),0);nde(a)}break;default:throw vbb(new mde(tvd((h0d(),Hue))));}return f} -function e7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;e=Ohe;f=Ohe;g=Ohe;if(c){e=a.f.a;for(p=new olb(b.j);p.a<p.c.c.length;){o=BD(mlb(p),11);for(i=new olb(o.g);i.a<i.c.c.length;){h=BD(mlb(i),17);if(h.a.b!=0){k=BD(Hsb(h.a),8);if(k.a<e){f=e-k.a;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=k.a}if(k.a<=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,1),8).b-k.b)))}}}}}else{for(p=new olb(b.j);p.a<p.c.c.length;){o=BD(mlb(p),11);for(i=new olb(o.e);i.a<i.c.c.length;){h=BD(mlb(i),17);if(h.a.b!=0){m=BD(Isb(h.a),8);if(m.a>e){f=m.a-e;g=Ohe;d.c=KC(SI,Uhe,1,0,5,1);e=m.a}if(m.a>=e){d.c[d.c.length]=h;h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(BD(Ut(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new H0b;F0b(n,b);G0b(n,(Ucd(),Acd));n.n.a=b.o.a/2;r=new H0b;F0b(r,b);G0b(r,Rcd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new olb(d);i.a<i.c.c.length;){h=BD(mlb(i),17);if(c){j=BD(Lsb(h.a),8);q=h.a.b==0?A0b(h.d):BD(Hsb(h.a),8);q.b>=j.b?QZb(h,r):QZb(h,n)}else{j=BD(Msb(h.a),8);q=h.a.b==0?A0b(h.c):BD(Isb(h.a),8);q.b>=j.b?RZb(h,r):RZb(h,n)}l=BD(vNb(h,(Nyc(),jxc)),74);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} -function erd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=Rqd(a,dtd(c),G);Lkd(F,_pd(G,Vte));H=BD(oo(a.g,Vpd(aC(G,Cte))),33);m=aC(G,'sourcePort');d=null;!!m&&(d=Vpd(m));I=BD(oo(a.j,d),118);if(!H){h=Wpd(G);o="An edge must have a source node (edge id: '"+h;p=o+$te;throw vbb(new cqd(p))}if(!!I&&!Hb(mpd(I),H)){i=_pd(G,Vte);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+$te;throw vbb(new cqd(r))}B=(!F.b&&(F.b=new y5d(z2,F,4,7)),F.b);f=null;I?(f=I):(f=H);wtd(B,f);J=BD(oo(a.g,Vpd(aC(G,bue))),33);n=aC(G,'targetPort');e=null;!!n&&(e=Vpd(n));K=BD(oo(a.j,e),118);if(!J){l=Wpd(G);s="An edge must have a target node (edge id: '"+l;t=s+$te;throw vbb(new cqd(t))}if(!!K&&!Hb(mpd(K),J)){j=_pd(G,Vte);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+$te;throw vbb(new cqd(v))}C=(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c);g=null;K?(g=K):(g=J);wtd(C,g);if((!F.b&&(F.b=new y5d(z2,F,4,7)),F.b).i==0||(!F.c&&(F.c=new y5d(z2,F,5,8)),F.c).i==0){k=_pd(G,Vte);w=Zte+k;A=w+$te;throw vbb(new cqd(A))}grd(G,F);frd(G,F);D=crd(a,G,F);return D} -function DXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=FXb(zXb(a,(Ucd(),Fcd)),b);o=EXb(zXb(a,Gcd),b);u=EXb(zXb(a,Ocd),b);B=GXb(zXb(a,Qcd),b);m=GXb(zXb(a,Bcd),b);s=EXb(zXb(a,Ncd),b);p=EXb(zXb(a,Hcd),b);w=EXb(zXb(a,Pcd),b);v=EXb(zXb(a,Ccd),b);C=GXb(zXb(a,Ecd),b);r=EXb(zXb(a,Lcd),b);t=EXb(zXb(a,Kcd),b);A=EXb(zXb(a,Dcd),b);D=GXb(zXb(a,Mcd),b);n=GXb(zXb(a,Icd),b);q=EXb(zXb(a,Jcd),b);c=w6c(OC(GC(UD,1),Vje,25,15,[s.a,B.a,w.a,D.a]));d=w6c(OC(GC(UD,1),Vje,25,15,[o.a,l.a,u.a,q.a]));e=r.a;f=w6c(OC(GC(UD,1),Vje,25,15,[p.a,m.a,v.a,n.a]));j=w6c(OC(GC(UD,1),Vje,25,15,[s.b,o.b,p.b,t.b]));i=w6c(OC(GC(UD,1),Vje,25,15,[B.b,l.b,m.b,q.b]));k=C.b;h=w6c(OC(GC(UD,1),Vje,25,15,[w.b,u.b,v.b,A.b]));vXb(zXb(a,Fcd),c+e,j+k);vXb(zXb(a,Jcd),c+e,j+k);vXb(zXb(a,Gcd),c+e,0);vXb(zXb(a,Ocd),c+e,j+k+i);vXb(zXb(a,Qcd),0,j+k);vXb(zXb(a,Bcd),c+e+d,j+k);vXb(zXb(a,Hcd),c+e+d,0);vXb(zXb(a,Pcd),0,j+k+i);vXb(zXb(a,Ccd),c+e+d,j+k+i);vXb(zXb(a,Ecd),0,j);vXb(zXb(a,Lcd),c,0);vXb(zXb(a,Dcd),0,j+k+i);vXb(zXb(a,Icd),c+e+d,0);g=new d7c;g.a=w6c(OC(GC(UD,1),Vje,25,15,[c+d+e+f,C.a,t.a,A.a]));g.b=w6c(OC(GC(UD,1),Vje,25,15,[j+i+k+h,r.b,D.b,n.b]));return g} -function Ngc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new Rkb;for(m=new olb(a.d.b);m.a<m.c.c.length;){l=BD(mlb(m),29);for(o=new olb(l.a);o.a<o.c.c.length;){n=BD(mlb(o),10);e=BD(Ohb(a.f,n),57);for(i=new Sr(ur(U_b(n).a.Kc(),new Sq));Qr(i);){g=BD(Rr(i),17);d=Jsb(g.a,0);j=true;k=null;if(d.b!=d.d.c){b=BD(Xsb(d),8);c=null;if(g.c.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.c;p.c[p.c.length]=q}if(g.c.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.c;p.c[p.c.length]=q}while(d.b!=d.d.c){c=BD(Xsb(d),8);if(!ADb(b.b,c.b)){k=new hic(b,c,null,g);p.c[p.c.length]=k;if(j){j=false;if(c.b<e.d.d){k.f.a=true}else if(c.b>e.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=BD(Ohb(a.f,g.d.i),57);if(b.b<f.d.d){k.f.a=true}else if(b.b>f.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new Sr(ur(R_b(n).a.Kc(),new Sq));Qr(h);){g=BD(Rr(h),17);if(g.a.b!=0){b=BD(Isb(g.a),8);if(g.d.j==(Ucd(),Acd)){q=new hic(b,new f7c(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;p.c[p.c.length]=q}if(g.d.j==Rcd){q=new hic(b,new f7c(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;p.c[p.c.length]=q}}}}}return p} -function WJc(a,b,c){var d,e,f,g,h,i,j,k,l;Odd(c,'Network simplex node placement',1);a.e=b;a.n=BD(vNb(b,(wtc(),otc)),304);VJc(a);HJc(a);MAb(LAb(new YAb(null,new Kub(a.e.b,16)),new KKc),new MKc(a));MAb(JAb(LAb(JAb(LAb(new YAb(null,new Kub(a.e.b,16)),new zLc),new BLc),new DLc),new FLc),new IKc(a));if(Ccb(DD(vNb(a.e,(Nyc(),Axc))))){g=Udd(c,1);Odd(g,'Straight Edges Pre-Processing',1);UJc(a);Qdd(g)}JFb(a.f);f=BD(vNb(b,Ayc),19).a*a.f.a.c.length;uGb(HGb(IGb(LGb(a.f),f),false),Udd(c,1));if(a.d.a.gc()!=0){g=Udd(c,1);Odd(g,'Flexible Where Space Processing',1);h=BD(Btb(RAb(NAb(new YAb(null,new Kub(a.f.a,16)),new OKc),new iKc)),19).a;i=BD(Btb(QAb(NAb(new YAb(null,new Kub(a.f.a,16)),new QKc),new mKc)),19).a;j=i-h;k=nGb(new pGb,a.f);l=nGb(new pGb,a.f);AFb(DFb(CFb(BFb(EFb(new FFb,20000),j),k),l));MAb(JAb(JAb(Plb(a.i),new SKc),new UKc),new WKc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=BD(e.Pb(),213);d.g=1}uGb(HGb(IGb(LGb(a.f),f),false),Udd(g,1));Qdd(g)}if(Ccb(DD(vNb(b,Axc)))){g=Udd(c,1);Odd(g,'Straight Edges Post-Processing',1);TJc(a);Qdd(g)}GJc(a);a.e=null;a.f=null;a.i=null;a.c=null;Uhb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();Qdd(c)} -function lMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new olb(a.a.b);h.a<h.c.c.length;){f=BD(mlb(h),29);for(t=new olb(f.a);t.a<t.c.c.length;){s=BD(mlb(t),10);b.g[s.p]=s;b.a[s.p]=s;b.d[s.p]=0}}i=a.a.b;b.c==(YLc(),WLc)&&(i=JD(i,152)?km(BD(i,152)):JD(i,131)?BD(i,131).a:JD(i,54)?new ov(i):new dv(i));for(g=i.Kc();g.Ob();){f=BD(g.Pb(),29);n=-1;m=f.a;if(b.o==(eMc(),dMc)){n=Ohe;m=JD(m,152)?km(BD(m,152)):JD(m,131)?BD(m,131).a:JD(m,54)?new ov(m):new dv(m)}for(v=m.Kc();v.Ob();){u=BD(v.Pb(),10);l=null;b.c==WLc?(l=BD(Ikb(a.b.f,u.p),15)):(l=BD(Ikb(a.b.b,u.p),15));if(l.gc()>0){d=l.gc();j=QD($wnd.Math.floor((d+1)/2))-1;e=QD($wnd.Math.ceil((d+1)/2))-1;if(b.o==dMc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=BD(l.Xb(k),46);o=BD(p.a,10);if(!Rqb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=BD(l.Xb(k),46);q=BD(r.a,10);if(!Rqb(c,r.b)&&n<a.b.e[q.p]){b.a[q.p]=u;b.g[u.p]=b.g[q.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Bcb(),Ccb(b.f[b.g[u.p].p])&u.k==(j0b(),g0b)?true:false);n=a.b.e[q.p]}}}}}}}} -function Thd(){Thd=ccb;Hhd();Shd=Ghd.a;BD(qud(ZKd(Ghd.a),0),18);Mhd=Ghd.f;BD(qud(ZKd(Ghd.f),0),18);BD(qud(ZKd(Ghd.f),1),34);Rhd=Ghd.n;BD(qud(ZKd(Ghd.n),0),34);BD(qud(ZKd(Ghd.n),1),34);BD(qud(ZKd(Ghd.n),2),34);BD(qud(ZKd(Ghd.n),3),34);Nhd=Ghd.g;BD(qud(ZKd(Ghd.g),0),18);BD(qud(ZKd(Ghd.g),1),34);Jhd=Ghd.c;BD(qud(ZKd(Ghd.c),0),18);BD(qud(ZKd(Ghd.c),1),18);Ohd=Ghd.i;BD(qud(ZKd(Ghd.i),0),18);BD(qud(ZKd(Ghd.i),1),18);BD(qud(ZKd(Ghd.i),2),18);BD(qud(ZKd(Ghd.i),3),18);BD(qud(ZKd(Ghd.i),4),34);Phd=Ghd.j;BD(qud(ZKd(Ghd.j),0),18);Khd=Ghd.d;BD(qud(ZKd(Ghd.d),0),18);BD(qud(ZKd(Ghd.d),1),18);BD(qud(ZKd(Ghd.d),2),18);BD(qud(ZKd(Ghd.d),3),18);BD(qud(ZKd(Ghd.d),4),34);BD(qud(ZKd(Ghd.d),5),34);BD(qud(ZKd(Ghd.d),6),34);BD(qud(ZKd(Ghd.d),7),34);Ihd=Ghd.b;BD(qud(ZKd(Ghd.b),0),34);BD(qud(ZKd(Ghd.b),1),34);Lhd=Ghd.e;BD(qud(ZKd(Ghd.e),0),34);BD(qud(ZKd(Ghd.e),1),34);BD(qud(ZKd(Ghd.e),2),34);BD(qud(ZKd(Ghd.e),3),34);BD(qud(ZKd(Ghd.e),4),18);BD(qud(ZKd(Ghd.e),5),18);BD(qud(ZKd(Ghd.e),6),18);BD(qud(ZKd(Ghd.e),7),18);BD(qud(ZKd(Ghd.e),8),18);BD(qud(ZKd(Ghd.e),9),18);BD(qud(ZKd(Ghd.e),10),34);Qhd=Ghd.k;BD(qud(ZKd(Ghd.k),0),34);BD(qud(ZKd(Ghd.k),1),34)} -function wQc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new Psb;w=new Psb;q=-1;for(i=new olb(a);i.a<i.c.c.length;){g=BD(mlb(i),128);g.s=q--;k=0;t=0;for(f=new olb(g.t);f.a<f.c.c.length;){d=BD(mlb(f),268);t+=d.c}for(e=new olb(g.i);e.a<e.c.c.length;){d=BD(mlb(e),268);k+=d.c}g.n=k;g.u=t;t==0?(Gsb(w,g,w.c.b,w.c),true):k==0&&(Gsb(C,g,C.c.b,C.c),true)}F=Gx(a);l=a.c.length;p=l+1;r=l-1;n=new Rkb;while(F.a.gc()!=0){while(w.b!=0){v=(sCb(w.b!=0),BD(Nsb(w,w.a.a),128));F.a.Bc(v)!=null;v.s=r--;AQc(v,C,w)}while(C.b!=0){A=(sCb(C.b!=0),BD(Nsb(C,C.a.a),128));F.a.Bc(A)!=null;A.s=p++;AQc(A,C,w)}o=Rie;for(j=F.a.ec().Kc();j.Ob();){g=BD(j.Pb(),128);s=g.u-g.n;if(s>=o){if(s>o){n.c=KC(SI,Uhe,1,0,5,1);o=s}n.c[n.c.length]=g}}if(n.c.length!=0){m=BD(Ikb(n,Bub(b,n.c.length)),128);F.a.Bc(m)!=null;m.s=p++;AQc(m,C,w);n.c=KC(SI,Uhe,1,0,5,1)}}u=a.c.length+1;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),128);g.s<l&&(g.s+=u)}for(B=new olb(a);B.a<B.c.c.length;){A=BD(mlb(B),128);c=new Bib(A.t,0);while(c.b<c.d.gc()){d=(sCb(c.b<c.d.gc()),BD(c.d.Xb(c.c=c.b++),268));D=d.b;if(A.s>D.s){uib(c);Lkb(D.i,d);if(d.c>0){d.a=D;Ekb(D.t,d);d.b=A;Ekb(A.i,d)}}}}} -function qde(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.Ml();case 12:return a.Ol();case 14:return a.Ql();case 15:return a.Tl();case 16:return a.Rl();case 17:return a.Ul();case 21:nde(a);return wfe(),wfe(),ffe;case 10:switch(a.a){case 65:return a.yl();case 90:return a.Dl();case 122:return a.Kl();case 98:return a.El();case 66:return a.zl();case 60:return a.Jl();case 62:return a.Hl();}}f=pde(a);b=a.c;switch(b){case 3:return a.Zl(f);case 4:return a.Xl(f);case 5:return a.Yl(f);case 0:if(a.a==123&&a.d<a.j){e=a.d;d=0;c=-1;if((b=bfb(a.i,e++))>=48&&b<=57){d=b-48;while(e<a.j&&(b=bfb(a.i,e++))>=48&&b<=57){d=d*10+b-48;if(d<0)throw vbb(new mde(tvd((h0d(),bve))))}}else{throw vbb(new mde(tvd((h0d(),Zue))))}c=d;if(b==44){if(e>=a.j){throw vbb(new mde(tvd((h0d(),_ue))))}else if((b=bfb(a.i,e++))>=48&&b<=57){c=b-48;while(e<a.j&&(b=bfb(a.i,e++))>=48&&b<=57){c=c*10+b-48;if(c<0)throw vbb(new mde(tvd((h0d(),bve))))}if(d>c)throw vbb(new mde(tvd((h0d(),ave))))}else{c=-1}}if(b!=125)throw vbb(new mde(tvd((h0d(),$ue))));if(a.sl(e)){f=(wfe(),wfe(),++vfe,new lge(9,f));a.d=e+1}else{f=(wfe(),wfe(),++vfe,new lge(3,f));a.d=e}f.dm(d);f.cm(c);nde(a)}}return f} -function $bc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new Skb(b.b);u=new Skb(b.b);m=new Skb(b.b);B=new Skb(b.b);q=new Skb(b.b);for(A=Jsb(b,0);A.b!=A.d.c;){v=BD(Xsb(A),11);for(h=new olb(v.g);h.a<h.c.c.length;){f=BD(mlb(h),17);if(f.c.i==f.d.i){if(v.j==f.d.j){B.c[B.c.length]=f;continue}else if(v.j==(Ucd(),Acd)&&f.d.j==Rcd){q.c[q.c.length]=f;continue}}}}for(i=new olb(q);i.a<i.c.c.length;){f=BD(mlb(i),17);_bc(a,f,c,d,(Ucd(),zcd))}for(g=new olb(B);g.a<g.c.c.length;){f=BD(mlb(g),17);C=new b0b(a);__b(C,(j0b(),i0b));yNb(C,(Nyc(),Vxc),(dcd(),$bd));yNb(C,(wtc(),$sc),f);D=new H0b;yNb(D,$sc,f.d);G0b(D,(Ucd(),Tcd));F0b(D,C);F=new H0b;yNb(F,$sc,f.c);G0b(F,zcd);F0b(F,C);yNb(f.c,gtc,C);yNb(f.d,gtc,C);QZb(f,null);RZb(f,null);c.c[c.c.length]=C;yNb(C,ysc,meb(2))}for(w=Jsb(b,0);w.b!=w.d.c;){v=BD(Xsb(w),11);j=v.e.c.length>0;r=v.g.c.length>0;j&&r?(m.c[m.c.length]=v,true):j?(p.c[p.c.length]=v,true):r&&(u.c[u.c.length]=v,true)}for(o=new olb(p);o.a<o.c.c.length;){n=BD(mlb(o),11);Ekb(e,Zbc(a,n,null,c))}for(t=new olb(u);t.a<t.c.c.length;){s=BD(mlb(t),11);Ekb(e,Zbc(a,null,s,c))}for(l=new olb(m);l.a<l.c.c.length;){k=BD(mlb(l),11);Ekb(e,Zbc(a,k,k,c))}} -function NCb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;s=new f7c(Pje,Pje);b=new f7c(Qje,Qje);for(B=new olb(a);B.a<B.c.c.length;){A=BD(mlb(B),8);s.a=$wnd.Math.min(s.a,A.a);s.b=$wnd.Math.min(s.b,A.b);b.a=$wnd.Math.max(b.a,A.a);b.b=$wnd.Math.max(b.b,A.b)}m=new f7c(b.a-s.a,b.b-s.b);j=new f7c(s.a-50,s.b-m.a-50);k=new f7c(s.a-50,b.b+m.a+50);l=new f7c(b.a+m.b/2+50,s.b+m.b/2);n=new eDb(j,k,l);w=new Tqb;f=new Rkb;c=new Rkb;w.a.zc(n,w);for(D=new olb(a);D.a<D.c.c.length;){C=BD(mlb(D),8);f.c=KC(SI,Uhe,1,0,5,1);for(v=w.a.ec().Kc();v.Ob();){t=BD(v.Pb(),308);d=t.d;S6c(d,t.a);Jy(S6c(t.d,C),S6c(t.d,t.a))<0&&(f.c[f.c.length]=t,true)}c.c=KC(SI,Uhe,1,0,5,1);for(u=new olb(f);u.a<u.c.c.length;){t=BD(mlb(u),308);for(q=new olb(t.e);q.a<q.c.c.length;){o=BD(mlb(q),168);g=true;for(i=new olb(f);i.a<i.c.c.length;){h=BD(mlb(i),308);h!=t&&(wtb(o,Ikb(h.e,0))||wtb(o,Ikb(h.e,1))||wtb(o,Ikb(h.e,2)))&&(g=false)}g&&(c.c[c.c.length]=o,true)}}Ve(w,f);reb(w,new OCb);for(p=new olb(c);p.a<p.c.c.length;){o=BD(mlb(p),168);Qqb(w,new eDb(C,o.a,o.b))}}r=new Tqb;reb(w,new QCb(r));e=r.a.ec().Kc();while(e.Ob()){o=BD(e.Pb(),168);(dDb(n,o.a)||dDb(n,o.b))&&e.Qb()}reb(r,new SCb);return r} -function _Tb(a){var b,c,d,e,f;c=BD(vNb(a,(wtc(),Ksc)),21);b=k3c(WTb);e=BD(vNb(a,(Nyc(),axc)),334);e==(hbd(),ebd)&&d3c(b,XTb);Ccb(DD(vNb(a,$wc)))?e3c(b,(qUb(),lUb),(S8b(),I8b)):e3c(b,(qUb(),nUb),(S8b(),I8b));vNb(a,(g6c(),f6c))!=null&&d3c(b,YTb);(Ccb(DD(vNb(a,hxc)))||Ccb(DD(vNb(a,_wc))))&&c3c(b,(qUb(),pUb),(S8b(),W7b));switch(BD(vNb(a,Lwc),103).g){case 2:case 3:case 4:c3c(e3c(b,(qUb(),lUb),(S8b(),Y7b)),pUb,X7b);}c.Hc((Orc(),Frc))&&c3c(e3c(e3c(b,(qUb(),lUb),(S8b(),V7b)),oUb,T7b),pUb,U7b);PD(vNb(a,rxc))!==PD((kAc(),iAc))&&e3c(b,(qUb(),nUb),(S8b(),A8b));if(c.Hc(Mrc)){e3c(b,(qUb(),lUb),(S8b(),G8b));e3c(b,mUb,E8b);e3c(b,nUb,F8b)}PD(vNb(a,swc))!==PD((yrc(),wrc))&&PD(vNb(a,Swc))!==PD((Aad(),xad))&&c3c(b,(qUb(),pUb),(S8b(),j8b));Ccb(DD(vNb(a,cxc)))&&e3c(b,(qUb(),nUb),(S8b(),i8b));Ccb(DD(vNb(a,Hwc)))&&e3c(b,(qUb(),nUb),(S8b(),O8b));if(cUb(a)){PD(vNb(a,axc))===PD(ebd)?(d=BD(vNb(a,Cwc),292)):(d=BD(vNb(a,Dwc),292));f=d==(Xrc(),Vrc)?(S8b(),D8b):(S8b(),R8b);e3c(b,(qUb(),oUb),f)}switch(BD(vNb(a,Kyc),377).g){case 1:e3c(b,(qUb(),oUb),(S8b(),P8b));break;case 2:c3c(e3c(e3c(b,(qUb(),nUb),(S8b(),P7b)),oUb,Q7b),pUb,R7b);}PD(vNb(a,ywc))!==PD((tAc(),rAc))&&e3c(b,(qUb(),nUb),(S8b(),Q8b));return b} -function mZc(a){r4c(a,new E3c(P3c(M3c(O3c(N3c(new R3c,Kre),'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 pZc)));p4c(a,Kre,_le,1.3);p4c(a,Kre,Jre,Ksd(VYc));p4c(a,Kre,ame,gZc);p4c(a,Kre,wme,15);p4c(a,Kre,lqe,Ksd(SYc));p4c(a,Kre,Fme,Ksd(_Yc));p4c(a,Kre,Tme,Ksd(aZc));p4c(a,Kre,Eme,Ksd(bZc));p4c(a,Kre,Gme,Ksd($Yc));p4c(a,Kre,Dme,Ksd(cZc));p4c(a,Kre,Hme,Ksd(hZc));p4c(a,Kre,Bre,Ksd(eZc));p4c(a,Kre,Cre,Ksd(ZYc));p4c(a,Kre,Fre,Ksd(dZc));p4c(a,Kre,Gre,Ksd(iZc));p4c(a,Kre,Hre,Ksd(WYc));p4c(a,Kre,Ame,Ksd(XYc));p4c(a,Kre,xqe,Ksd(YYc));p4c(a,Kre,Ere,Ksd(UYc));p4c(a,Kre,Dre,Ksd(TYc));p4c(a,Kre,Ire,Ksd(kZc))} -function Wmd(b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;if(d==null){return null}if(b.a!=c.Aj()){throw vbb(new Wdb(tte+c.ne()+ute))}if(JD(c,457)){r=_Pd(BD(c,671),d);if(!r){throw vbb(new Wdb(vte+d+"' is not a valid enumerator of '"+c.ne()+"'"))}return r}switch(o1d((O6d(),M6d),c).cl()){case 2:{d=Qge(d,false);break}case 3:{d=Qge(d,true);break}}e=o1d(M6d,c).$k();if(e){return e.Aj().Nh().Kh(e,d)}n=o1d(M6d,c).al();if(n){r=new Rkb;for(k=Zmd(d),l=0,m=k.length;l<m;++l){j=k[l];Ekb(r,n.Aj().Nh().Kh(n,j))}return r}q=o1d(M6d,c).bl();if(!q.dc()){for(p=q.Kc();p.Ob();){o=BD(p.Pb(),148);try{r=o.Aj().Nh().Kh(o,d);if(r!=null){return r}}catch(a){a=ubb(a);if(!JD(a,60))throw vbb(a)}}throw vbb(new Wdb(vte+d+"' does not match any member types of the union datatype '"+c.ne()+"'"))}BD(c,834).Fj();f=r6d(c.Bj());if(!f)return null;if(f==yI){h=0;try{h=Icb(d,Rie,Ohe)&aje}catch(a){a=ubb(a);if(JD(a,127)){g=rfb(d);h=g[0]}else throw vbb(a)}return bdb(h)}if(f==$J){for(i=0;i<Pmd.length;++i){try{return DQd(Pmd[i],d)}catch(a){a=ubb(a);if(!JD(a,32))throw vbb(a)}}throw vbb(new Wdb(vte+d+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw vbb(new Wdb(vte+d+"' is invalid. "))} -function ngb(a,b){var c,d,e,f,g,h,i,j;c=0;g=0;f=b.length;h=null;j=new Vfb;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43)){++g;++c;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43||(BCb(g,b.length),b.charCodeAt(g)==45))){throw vbb(new Oeb(Oje+b+'"'))}}while(g<f&&(BCb(g,b.length),b.charCodeAt(g)!=46)&&(BCb(g,b.length),b.charCodeAt(g)!=101)&&(BCb(g,b.length),b.charCodeAt(g)!=69)){++g}j.a+=''+qfb(b==null?Xhe:(uCb(b),b),c,g);if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==46)){++g;c=g;while(g<f&&(BCb(g,b.length),b.charCodeAt(g)!=101)&&(BCb(g,b.length),b.charCodeAt(g)!=69)){++g}a.e=g-c;j.a+=''+qfb(b==null?Xhe:(uCb(b),b),c,g)}else{a.e=0}if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==101||(BCb(g,b.length),b.charCodeAt(g)==69))){++g;c=g;if(g<f&&(BCb(g,b.length),b.charCodeAt(g)==43)){++g;g<f&&(BCb(g,b.length),b.charCodeAt(g)!=45)&&++c}h=b.substr(c,f-c);a.e=a.e-Icb(h,Rie,Ohe);if(a.e!=QD(a.e)){throw vbb(new Oeb('Scale out of range.'))}}i=j.a;if(i.length<16){a.f=(kgb==null&&(kgb=new RegExp('^[+-]?\\d*$','i')),kgb.test(i)?parseInt(i,10):NaN);if(isNaN(a.f)){throw vbb(new Oeb(Oje+b+'"'))}a.a=ugb(a.f)}else{ogb(a,new Ygb(i))}a.d=j.a.length;for(e=0;e<j.a.length;++e){d=bfb(j.a,e);if(d!=45&&d!=48){break}--a.d}a.d==0&&(a.d=1)} -function xXb(){xXb=ccb;wXb=new Hp;Rc(wXb,(Ucd(),Fcd),Jcd);Rc(wXb,Qcd,Jcd);Rc(wXb,Qcd,Mcd);Rc(wXb,Bcd,Icd);Rc(wXb,Bcd,Jcd);Rc(wXb,Gcd,Jcd);Rc(wXb,Gcd,Kcd);Rc(wXb,Ocd,Dcd);Rc(wXb,Ocd,Jcd);Rc(wXb,Lcd,Ecd);Rc(wXb,Lcd,Jcd);Rc(wXb,Lcd,Kcd);Rc(wXb,Lcd,Dcd);Rc(wXb,Ecd,Lcd);Rc(wXb,Ecd,Mcd);Rc(wXb,Ecd,Icd);Rc(wXb,Ecd,Jcd);Rc(wXb,Ncd,Ncd);Rc(wXb,Ncd,Kcd);Rc(wXb,Ncd,Mcd);Rc(wXb,Hcd,Hcd);Rc(wXb,Hcd,Kcd);Rc(wXb,Hcd,Icd);Rc(wXb,Pcd,Pcd);Rc(wXb,Pcd,Dcd);Rc(wXb,Pcd,Mcd);Rc(wXb,Ccd,Ccd);Rc(wXb,Ccd,Dcd);Rc(wXb,Ccd,Icd);Rc(wXb,Kcd,Gcd);Rc(wXb,Kcd,Lcd);Rc(wXb,Kcd,Ncd);Rc(wXb,Kcd,Hcd);Rc(wXb,Kcd,Jcd);Rc(wXb,Kcd,Kcd);Rc(wXb,Kcd,Mcd);Rc(wXb,Kcd,Icd);Rc(wXb,Dcd,Ocd);Rc(wXb,Dcd,Lcd);Rc(wXb,Dcd,Pcd);Rc(wXb,Dcd,Ccd);Rc(wXb,Dcd,Dcd);Rc(wXb,Dcd,Mcd);Rc(wXb,Dcd,Icd);Rc(wXb,Dcd,Jcd);Rc(wXb,Mcd,Qcd);Rc(wXb,Mcd,Ecd);Rc(wXb,Mcd,Ncd);Rc(wXb,Mcd,Pcd);Rc(wXb,Mcd,Kcd);Rc(wXb,Mcd,Dcd);Rc(wXb,Mcd,Mcd);Rc(wXb,Mcd,Jcd);Rc(wXb,Icd,Bcd);Rc(wXb,Icd,Ecd);Rc(wXb,Icd,Hcd);Rc(wXb,Icd,Ccd);Rc(wXb,Icd,Kcd);Rc(wXb,Icd,Dcd);Rc(wXb,Icd,Icd);Rc(wXb,Icd,Jcd);Rc(wXb,Jcd,Fcd);Rc(wXb,Jcd,Qcd);Rc(wXb,Jcd,Bcd);Rc(wXb,Jcd,Gcd);Rc(wXb,Jcd,Ocd);Rc(wXb,Jcd,Lcd);Rc(wXb,Jcd,Ecd);Rc(wXb,Jcd,Kcd);Rc(wXb,Jcd,Dcd);Rc(wXb,Jcd,Mcd);Rc(wXb,Jcd,Icd);Rc(wXb,Jcd,Jcd)} -function YXb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new f7c(Pje,Pje);a.c=new f7c(Qje,Qje);for(m=b.Kc();m.Ob();){k=BD(m.Pb(),37);for(t=new olb(k.a);t.a<t.c.c.length;){s=BD(mlb(t),10);a.d.a=$wnd.Math.min(a.d.a,s.n.a-s.d.b);a.d.b=$wnd.Math.min(a.d.b,s.n.b-s.d.d);a.c.a=$wnd.Math.max(a.c.a,s.n.a+s.o.a+s.d.c);a.c.b=$wnd.Math.max(a.c.b,s.n.b+s.o.b+s.d.a)}}h=new nYb;for(l=b.Kc();l.Ob();){k=BD(l.Pb(),37);d=fYb(a,k);Ekb(h.a,d);d.a=d.a|!BD(vNb(d.c,(wtc(),Esc)),21).dc()}a.b=(LUb(),B=new VUb,B.f=new CUb(c),B.b=BUb(B.f,h),B);PUb((o=a.b,new Zdd,o));a.e=new d7c;a.a=a.b.f.e;for(g=new olb(h.a);g.a<g.c.c.length;){e=BD(mlb(g),841);u=QUb(a.b,e);g_b(e.c,u.a,u.b);for(q=new olb(e.c.a);q.a<q.c.c.length;){p=BD(mlb(q),10);if(p.k==(j0b(),e0b)){r=aYb(a,p.n,BD(vNb(p,(wtc(),Hsc)),61));P6c(X6c(p.n),r)}}}for(f=new olb(h.a);f.a<f.c.c.length;){e=BD(mlb(f),841);for(j=new olb(lYb(e));j.a<j.c.c.length;){i=BD(mlb(j),17);A=new t7c(i.a);St(A,0,A0b(i.c));Dsb(A,A0b(i.d));n=null;for(w=Jsb(A,0);w.b!=w.d.c;){v=BD(Xsb(w),8);if(!n){n=v;continue}if(Ky(n.a,v.a)){a.e.a=$wnd.Math.min(a.e.a,n.a);a.a.a=$wnd.Math.max(a.a.a,n.a)}else if(Ky(n.b,v.b)){a.e.b=$wnd.Math.min(a.e.b,n.b);a.a.b=$wnd.Math.max(a.a.b,n.b)}n=v}}}V6c(a.e);P6c(a.a,a.e)} -function wZd(a){Bnd(a.b,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentTransient']));Bnd(a.a,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedSourceURI']));Bnd(a.o,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures']));Bnd(a.p,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedInstanceTypeName UniqueTypeParameterNames']));Bnd(a.v,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'UniqueEnumeratorNames UniqueEnumeratorLiterals']));Bnd(a.R,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedName']));Bnd(a.T,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid']));Bnd(a.U,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs']));Bnd(a.W,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer']));Bnd(a.bb,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ValidDefaultValueLiteral']));Bnd(a.eb,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ValidLowerBound ValidUpperBound ConsistentBounds ValidType']));Bnd(a.H,_ve,OC(GC(ZI,1),nie,2,6,[bwe,'ConsistentType ConsistentBounds ConsistentArguments']))} -function B4b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;if(b.dc()){return}e=new s7c;h=c?c:BD(b.Xb(0),17);o=h.c;hQc();m=o.i.k;if(!(m==(j0b(),h0b)||m==i0b||m==e0b||m==d0b)){throw vbb(new Wdb('The target node of the edge must be a normal node or a northSouthPort.'))}Fsb(e,l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])));if((Ucd(),Lcd).Hc(o.j)){q=Edb(ED(vNb(o,(wtc(),qtc))));l=new f7c(l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a,q);Gsb(e,l,e.c.b,e.c)}k=null;d=false;i=b.Kc();while(i.Ob()){g=BD(i.Pb(),17);f=g.a;if(f.b!=0){if(d){j=Y6c(P6c(k,(sCb(f.b!=0),BD(f.a.a.c,8))),0.5);Gsb(e,j,e.c.b,e.c);d=false}else{d=true}k=R6c((sCb(f.b!=0),BD(f.c.b.c,8)));ye(e,f);Osb(f)}}p=h.d;if(Lcd.Hc(p.j)){q=Edb(ED(vNb(p,(wtc(),qtc))));l=new f7c(l7c(OC(GC(m1,1),nie,8,0,[p.i.n,p.n,p.a])).a,q);Gsb(e,l,e.c.b,e.c)}Fsb(e,l7c(OC(GC(m1,1),nie,8,0,[p.i.n,p.n,p.a])));a.d==(tBc(),qBc)&&(r=(sCb(e.b!=0),BD(e.a.a.c,8)),s=BD(Ut(e,1),8),t=new e7c(bRc(o.j)),t.a*=5,t.b*=5,u=c7c(new f7c(s.a,s.b),r),v=new f7c(A4b(t.a,u.a),A4b(t.b,u.b)),P6c(v,r),w=Jsb(e,1),Vsb(w,v),A=(sCb(e.b!=0),BD(e.c.b.c,8)),B=BD(Ut(e,e.b-2),8),t=new e7c(bRc(p.j)),t.a*=5,t.b*=5,u=c7c(new f7c(B.a,B.b),A),C=new f7c(A4b(t.a,u.a),A4b(t.b,u.b)),P6c(C,A),St(e,e.b-1,C),undefined);n=new YPc(e);ye(h.a,UPc(n))} -function Kgd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82);v=t.Dg();w=t.Eg();u=t.Cg()/2;p=t.Bg()/2;if(JD(t,186)){s=BD(t,118);v+=mpd(s).i;v+=mpd(s).i}v+=u;w+=p;F=BD(qud((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b),0),82);H=F.Dg();I=F.Eg();G=F.Cg()/2;A=F.Bg()/2;if(JD(F,186)){D=BD(F,118);H+=mpd(D).i;H+=mpd(D).i}H+=G;I+=A;if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i==0){h=(Fhd(),j=new rmd,j);wtd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i>1){o=new Oyd((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a));while(o.e!=o.i.gc()){Eyd(o)}}g=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);q=H;H>v+u?(q=v+u):H<v-u&&(q=v-u);r=I;I>w+p?(r=w+p):I<w-p&&(r=w-p);q>v-u&&q<v+u&&r>w-p&&r<w+p&&(q=v+u);omd(g,q);pmd(g,r);B=v;v>H+G?(B=H+G):v<H-G&&(B=H-G);C=w;w>I+A?(C=I+A):w<I-A&&(C=I-A);B>H-G&&B<H+G&&C>I-A&&C<I+A&&(C=I+A);hmd(g,B);imd(g,C);Uxd((!g.a&&(g.a=new xMd(y2,g,5)),g.a));f=Bub(b,5);t==F&&++f;L=B-q;O=C-r;J=$wnd.Math.sqrt(L*L+O*O);l=J*0.20000000298023224;M=L/(f+1);P=O/(f+1);K=q;N=r;for(k=0;k<f;k++){K+=M;N+=P;m=K+Cub(b,24)*lke*l-l/2;m<0?(m=1):m>c&&(m=c-1);n=N+Cub(b,24)*lke*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(Fhd(),i=new xkd,i);vkd(e,m);wkd(e,n);wtd((!g.a&&(g.a=new xMd(y2,g,5)),g.a),e)}} -function Nyc(){Nyc=ccb;iyc=(Y9c(),I9c);jyc=J9c;kyc=K9c;lyc=L9c;nyc=M9c;oyc=N9c;ryc=P9c;tyc=R9c;uyc=S9c;syc=Q9c;vyc=T9c;xyc=U9c;zyc=X9c;qyc=O9c;hyc=(jwc(),Bvc);myc=Cvc;pyc=Dvc;wyc=Evc;byc=new Osd(D9c,meb(0));cyc=yvc;dyc=zvc;eyc=Avc;Kyc=awc;Cyc=Hvc;Dyc=Kvc;Gyc=Svc;Eyc=Nvc;Fyc=Pvc;Myc=fwc;Lyc=cwc;Iyc=Yvc;Hyc=Wvc;Jyc=$vc;Cxc=pvc;Dxc=qvc;Xwc=Auc;Ywc=Duc;Lxc=new q0b(12);Kxc=new Osd(f9c,Lxc);Twc=(Aad(),wad);Swc=new Osd(E8c,Twc);Uxc=new Osd(s9c,0);fyc=new Osd(E9c,meb(1));owc=new Osd(r8c,tme);Jxc=d9c;Vxc=t9c;$xc=A9c;Kwc=y8c;mwc=p8c;axc=J8c;gyc=new Osd(H9c,(Bcb(),true));fxc=M8c;gxc=N8c;Fxc=Y8c;Ixc=b9c;Gxc=$8c;Nwc=(ead(),cad);Lwc=new Osd(z8c,Nwc);xxc=W8c;wxc=U8c;Yxc=x9c;Xxc=w9c;Zxc=z9c;Oxc=(Tbd(),Sbd);new Osd(l9c,Oxc);Qxc=o9c;Rxc=p9c;Sxc=q9c;Pxc=n9c;Byc=Gvc;sxc=avc;rxc=$uc;Ayc=Fvc;mxc=Suc;Jwc=muc;Iwc=kuc;Awc=Xtc;Bwc=Ytc;Dwc=buc;Cwc=Ztc;Hwc=iuc;uxc=cvc;vxc=dvc;ixc=Luc;Exc=uvc;zxc=hvc;$wc=Guc;Bxc=nvc;Vwc=wuc;Wwc=yuc;zwc=w8c;yxc=evc;swc=Mtc;rwc=Ktc;qwc=Jtc;cxc=Juc;bxc=Iuc;dxc=Kuc;Hxc=_8c;jxc=Q8c;Zwc=G8c;Qwc=C8c;Pwc=B8c;Ewc=euc;Wxc=v9c;pwc=v8c;exc=L8c;Txc=r9c;Mxc=h9c;Nxc=j9c;oxc=Vuc;pxc=Xuc;ayc=C9c;nwc=Itc;qxc=Zuc;Rwc=suc;Owc=quc;txc=S8c;kxc=Puc;Axc=kvc;yyc=V9c;Mwc=ouc;_xc=wvc;Uwc=uuc;lxc=Ruc;Fwc=guc;hxc=P8c;nxc=Uuc;Gwc=huc;ywc=Vtc;wwc=Stc;uwc=Qtc;vwc=Rtc;xwc=Utc;twc=Otc;_wc=Huc} -function shb(a,b){phb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return $je;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:w=new Ufb;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=KC(TD,$ie,25,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=xbb(h,Yje);do{p=H;H=Abb(H,10);u[--c]=48+Tbb(Qbb(p,Ibb(H,10)))&aje}while(ybb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&aje}while(H!=0)}}else{D=KC(WD,oje,25,o,15,1);G=o;$fb(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=wbb(Nbb(A,32),xbb(D[j],Yje));r=qhb(F);D[j]=Tbb(r);A=Tbb(Obb(r,32))}s=Tbb(A);q=c;do{u[--c]=48+s%10&aje}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i<d&&c>0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return zfb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return zfb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return zfb(u,c,t-c)}C=c+1;f=t;v=new Vfb;n&&(v.a+='-',v);if(f-C>=1){Kfb(v,u[c]);v.a+='.';v.a+=zfb(u,c+1,t-c-1)}else{v.a+=zfb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} -function z$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Lqb;c=(Pgd(),new bhd(a.c));d=new YGb(c);UGb(d);t=GD(hkd(a.c,(d0c(),Y_c)));i=BD(hkd(a.c,$_c),316);v=BD(hkd(a.c,__c),429);g=BD(hkd(a.c,T_c),482);u=BD(hkd(a.c,Z_c),430);a.j=Edb(ED(hkd(a.c,a0c)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw vbb(new Wdb(Mre+(i.f!=null?i.f:''+i.g)));}a.d=new g_c(h,v,g);yNb(a.d,(XNb(),VNb),DD(hkd(a.c,V_c)));a.d.c=Ccb(DD(hkd(a.c,U_c)));if(Vod(a.c).i==0){return a.d}for(l=new Fyd(Vod(a.c));l.e!=l.i.gc();){k=BD(Dyd(l),33);n=k.g/2;m=k.f/2;w=new f7c(k.i+n,k.j+m);while(Mhb(a.g,w)){O6c(w,($wnd.Math.random()-0.5)*qme,($wnd.Math.random()-0.5)*qme)}p=BD(hkd(k,(Y9c(),S8c)),142);q=new aOb(w,new J6c(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Ekb(a.d.i,q);Rhb(a.g,w,new vgd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=BD(Ikb(a.d.i,0),65)}else{for(s=new olb(a.d.i);s.a<s.c.c.length;){q=BD(mlb(s),65);o=BD(BD(Ohb(a.g,q.a),46).b,33).zg();o!=null&&dfb(o,t)&&(a.d.d=q)}}break;case 1:e=new f7c(a.c.g,a.c.f);e.a*=0.5;e.b*=0.5;O6c(e,a.c.i,a.c.j);f=Pje;for(r=new olb(a.d.i);r.a<r.c.c.length;){q=BD(mlb(r),65);j=S6c(q.a,e);if(j<f){f=j;a.d.d=q}}break;default:throw vbb(new Wdb(Mre+(u.f!=null?u.f:''+u.g)));}return a.d} -function qfd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;v=BD(qud((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a),0),202);k=new s7c;u=new Lqb;w=tfd(v);jrb(u.f,v,w);m=new Lqb;d=new Psb;for(o=ul(pl(OC(GC(KI,1),Uhe,20,0,[(!b.d&&(b.d=new y5d(B2,b,8,5)),b.d),(!b.e&&(b.e=new y5d(B2,b,7,4)),b.e)])));Qr(o);){n=BD(Rr(o),79);if((!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i!=1){throw vbb(new Wdb(Tse+(!a.a&&(a.a=new cUd(A2,a,6,6)),a.a).i))}if(n!=a){q=BD(qud((!n.a&&(n.a=new cUd(A2,n,6,6)),n.a),0),202);Gsb(d,q,d.c.b,d.c);p=BD(Wd(irb(u.f,q)),12);if(!p){p=tfd(q);jrb(u.f,q,p)}l=c?c7c(new g7c(BD(Ikb(w,w.c.length-1),8)),BD(Ikb(p,p.c.length-1),8)):c7c(new g7c((tCb(0,w.c.length),BD(w.c[0],8))),(tCb(0,p.c.length),BD(p.c[0],8)));jrb(m.f,q,l)}}if(d.b!=0){r=BD(Ikb(w,c?w.c.length-1:0),8);for(j=1;j<w.c.length;j++){s=BD(Ikb(w,c?w.c.length-1-j:j),8);e=Jsb(d,0);while(e.b!=e.d.c){q=BD(Xsb(e),202);p=BD(Wd(irb(u.f,q)),12);if(p.c.length<=j){Zsb(e)}else{t=P6c(new g7c(BD(Ikb(p,c?p.c.length-1-j:j),8)),BD(Wd(irb(m.f,q)),8));if(s.a!=t.a||s.b!=t.b){f=s.a-r.a;h=s.b-r.b;g=t.a-r.a;i=t.b-r.b;g*h==i*f&&(f==0||isNaN(f)?f:f<0?-1:1)==(g==0||isNaN(g)?g:g<0?-1:1)&&(h==0||isNaN(h)?h:h<0?-1:1)==(i==0||isNaN(i)?i:i<0?-1:1)?($wnd.Math.abs(f)<$wnd.Math.abs(g)||$wnd.Math.abs(h)<$wnd.Math.abs(i))&&(Gsb(k,s,k.c.b,k.c),true):j>1&&(Gsb(k,r,k.c.b,k.c),true);Zsb(e)}}}r=s}}return k} -function $Bc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;Odd(c,'Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=KC(WD,oje,25,L,15,1);a.c=KC(WD,oje,25,L,15,1);a.b=KC(WD,oje,25,L,15,1);j=0;for(r=new olb(t);r.a<r.c.c.length;){p=BD(mlb(r),10);p.p=j;for(C=new olb(p.j);C.a<C.c.c.length;){w=BD(mlb(C),11);for(h=new olb(w.e);h.a<h.c.c.length;){d=BD(mlb(h),17);if(d.c.i==p){continue}G=BD(vNb(d,(Nyc(),cyc)),19).a;a.a[j]+=G>0?G+1:1}for(g=new olb(w.g);g.a<g.c.c.length;){d=BD(mlb(g),17);if(d.d.i==p){continue}G=BD(vNb(d,(Nyc(),cyc)),19).a;a.c[j]+=G>0?G+1:1}}a.c[j]==0?Dsb(a.e,p):a.a[j]==0&&Dsb(a.f,p);++j}o=-1;n=1;l=new Rkb;a.d=BD(vNb(b,(wtc(),jtc)),230);while(L>0){while(a.e.b!=0){I=BD(Lsb(a.e),10);a.b[I.p]=o--;_Bc(a,I);--L}while(a.f.b!=0){J=BD(Lsb(a.f),10);a.b[J.p]=n++;_Bc(a,J);--L}if(L>0){m=Rie;for(s=new olb(t);s.a<s.c.c.length;){p=BD(mlb(s),10);if(a.b[p.p]==0){u=a.c[p.p]-a.a[p.p];if(u>=m){if(u>m){l.c=KC(SI,Uhe,1,0,5,1);m=u}l.c[l.c.length]=p}}}k=a.Zf(l);a.b[k.p]=n++;_Bc(a,k);--L}}H=t.c.length+1;for(j=0;j<t.c.length;j++){a.b[j]<0&&(a.b[j]+=H)}for(q=new olb(t);q.a<q.c.c.length;){p=BD(mlb(q),10);F=m_b(p.j);for(A=F,B=0,D=A.length;B<D;++B){w=A[B];v=k_b(w.g);for(e=v,f=0,i=e.length;f<i;++f){d=e[f];K=d.d.i.p;if(a.b[p.p]>a.b[K]){PZb(d,true);yNb(b,Asc,(Bcb(),true))}}}}a.a=null;a.c=null;a.b=null;Osb(a.f);Osb(a.e);Qdd(c)} -function sQb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new Rkb;h=new Rkb;q=b/2;n=a.gc();e=BD(a.Xb(0),8);r=BD(a.Xb(1),8);o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)));for(j=2;j<n;j++){p=e;e=r;r=BD(a.Xb(j),8);o=tQb(e.a,e.b,p.a,p.b,q);Ekb(d,(tCb(1,o.c.length),BD(o.c[1],8)));Ekb(h,(tCb(0,o.c.length),BD(o.c[0],8)));o=tQb(e.a,e.b,r.a,r.b,q);Ekb(d,(tCb(0,o.c.length),BD(o.c[0],8)));Ekb(h,(tCb(1,o.c.length),BD(o.c[1],8)))}o=tQb(r.a,r.b,e.a,e.b,q);Ekb(d,(tCb(1,o.c.length),BD(o.c[1],8)));Ekb(h,(tCb(0,o.c.length),BD(o.c[0],8)));c=new s7c;g=new Rkb;Dsb(c,(tCb(0,d.c.length),BD(d.c[0],8)));for(k=1;k<d.c.length-2;k+=2){f=(tCb(k,d.c.length),BD(d.c[k],8));m=rQb((tCb(k-1,d.c.length),BD(d.c[k-1],8)),f,(tCb(k+1,d.c.length),BD(d.c[k+1],8)),(tCb(k+2,d.c.length),BD(d.c[k+2],8)));!isFinite(m.a)||!isFinite(m.b)?(Gsb(c,f,c.c.b,c.c),true):(Gsb(c,m,c.c.b,c.c),true)}Dsb(c,BD(Ikb(d,d.c.length-1),8));Ekb(g,(tCb(0,h.c.length),BD(h.c[0],8)));for(l=1;l<h.c.length-2;l+=2){f=(tCb(l,h.c.length),BD(h.c[l],8));m=rQb((tCb(l-1,h.c.length),BD(h.c[l-1],8)),f,(tCb(l+1,h.c.length),BD(h.c[l+1],8)),(tCb(l+2,h.c.length),BD(h.c[l+2],8)));!isFinite(m.a)||!isFinite(m.b)?(g.c[g.c.length]=f,true):(g.c[g.c.length]=m,true)}Ekb(g,BD(Ikb(h,h.c.length-1),8));for(i=g.c.length-1;i>=0;i--){Dsb(c,(tCb(i,g.c.length),BD(g.c[i],8)))}return c} -function aFd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=BEd;j=null;f=null;h=0;i=UEd(a,h,zEd,AEd);if(i<a.length&&(BCb(i,a.length),a.charCodeAt(i)==58)){l=a.substr(h,i-h);h=i+1}c=l!=null&&hnb(GEd,l.toLowerCase());if(c){i=a.lastIndexOf('!/');if(i==-1){throw vbb(new Wdb('no archive separator'))}g=true;d=qfb(a,h,++i);h=i}else if(h>=0&&dfb(a.substr(h,'//'.length),'//')){h+=2;i=UEd(a,h,CEd,DEd);d=a.substr(h,i-h);h=i}else if(l!=null&&(h==a.length||(BCb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=ifb(a,wfb(35),h);i==-1&&(i=a.length);d=a.substr(h,i-h);h=i}if(!c&&h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)){i=UEd(a,h+1,CEd,DEd);k=a.substr(h+1,i-(h+1));if(k.length>0&&bfb(k,k.length-1)==58){e=k;h=i}}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)){++h;b=true}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)!=63)&&(BCb(h,a.length),a.charCodeAt(h)!=35)){m=new Rkb;while(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)!=63)&&(BCb(h,a.length),a.charCodeAt(h)!=35)){i=UEd(a,h,CEd,DEd);Ekb(m,a.substr(h,i-h));h=i;h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==47)&&(bFd(a,++h)||(m.c[m.c.length]='',true))}n=KC(ZI,nie,2,m.c.length,6,1);Qkb(m,n)}if(h<a.length&&(BCb(h,a.length),a.charCodeAt(h)==63)){i=gfb(a,35,++h);i==-1&&(i=a.length);j=a.substr(h,i-h);h=i}h<a.length&&(f=pfb(a,++h));iFd(g,l,d,e,n,j);return new NEd(g,l,d,e,b,n,j,f)} -function sJc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;I=new Rkb;for(o=new olb(b.b);o.a<o.c.c.length;){m=BD(mlb(o),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);u.p=-1;l=Rie;B=Rie;for(D=new olb(u.j);D.a<D.c.c.length;){C=BD(mlb(D),11);for(e=new olb(C.e);e.a<e.c.c.length;){c=BD(mlb(e),17);F=BD(vNb(c,(Nyc(),eyc)),19).a;l=$wnd.Math.max(l,F)}for(d=new olb(C.g);d.a<d.c.c.length;){c=BD(mlb(d),17);F=BD(vNb(c,(Nyc(),eyc)),19).a;B=$wnd.Math.max(B,F)}}yNb(u,hJc,meb(l));yNb(u,iJc,meb(B))}}r=0;for(n=new olb(b.b);n.a<n.c.c.length;){m=BD(mlb(n),29);for(v=new olb(m.a);v.a<v.c.c.length;){u=BD(mlb(v),10);if(u.p<0){H=new zJc;H.b=r++;oJc(a,u,H);I.c[I.c.length]=H}}}A=Pu(I.c.length);k=Pu(I.c.length);for(g=0;g<I.c.length;g++){Ekb(A,new Rkb);Ekb(k,meb(0))}mJc(b,I,A,k);J=BD(Qkb(I,KC(sY,Iqe,257,I.c.length,0,1)),840);w=BD(Qkb(A,KC(yK,eme,15,A.c.length,0,1)),192);j=KC(WD,oje,25,k.c.length,15,1);for(h=0;h<j.length;h++){j[h]=(tCb(h,k.c.length),BD(k.c[h],19)).a}s=0;t=new Rkb;for(i=0;i<J.length;i++){j[i]==0&&Ekb(t,J[i])}q=KC(WD,oje,25,J.length,15,1);while(t.c.length!=0){H=BD(Kkb(t,0),257);q[H.b]=s++;while(!w[H.b].dc()){K=BD(w[H.b].$c(0),257);--j[K.b];j[K.b]==0&&(t.c[t.c.length]=K,true)}}a.a=KC(sY,Iqe,257,J.length,0,1);for(f=0;f<J.length;f++){p=J[f];G=q[f];a.a[G]=p;p.b=G;for(v=new olb(p.e);v.a<v.c.c.length;){u=BD(mlb(v),10);u.p=G}}return a.a} -function nde(a){var b,c,d;if(a.d>=a.j){a.a=-1;a.c=1;return}b=bfb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d<a.j&&bfb(a.i,a.d)==91){++a.d;d=24}else d=0;break;case 91:if((a.e&512)!=512&&a.d<a.j&&bfb(a.i,a.d)==58){++a.d;d=20;break}default:if((b&64512)==Uje&&a.d<a.j){c=bfb(a.i,a.d);if((c&64512)==56320){a.a=Tje+(b-Uje<<10)+c-56320;++a.d}}d=0;}a.c=d;return}switch(b){case 124:d=2;break;case 42:d=3;break;case 43:d=4;break;case 63:d=5;break;case 41:d=7;break;case 46:d=8;break;case 91:d=9;break;case 94:d=11;break;case 36:d=12;break;case 40:d=6;if(a.d>=a.j)break;if(bfb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),vue))));b=bfb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw vbb(new mde(tvd((h0d(),wue))));break;case 35:while(a.d<a.j){b=bfb(a.i,a.d++);if(b==41)break}if(b!=41)throw vbb(new mde(tvd((h0d(),xue))));d=21;break;default:if(b==45||97<=b&&b<=122||65<=b&&b<=90){--a.d;d=22;break}else if(b==40){d=23;break}throw vbb(new mde(tvd((h0d(),vue))));}break;case 92:d=10;if(a.d>=a.j)throw vbb(new mde(tvd((h0d(),uue))));a.a=bfb(a.i,a.d++);break;default:d=0;}a.c=d} -function P5b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=BD(vNb(a,(Nyc(),Vxc)),98);if(!(A!=(dcd(),bcd)&&A!=ccd)){return}o=a.b;n=o.c.length;k=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));p=new Skb((Xj(n+2,Mie),Oy(wbb(wbb(5,n+2),(n+2)/10|0))));Ekb(k,new Lqb);Ekb(k,new Lqb);Ekb(p,new Rkb);Ekb(p,new Rkb);w=new Rkb;for(b=0;b<n;b++){c=(tCb(b,o.c.length),BD(o.c[b],29));B=(tCb(b,k.c.length),BD(k.c[b],83));q=new Lqb;k.c[k.c.length]=q;D=(tCb(b,p.c.length),BD(p.c[b],15));s=new Rkb;p.c[p.c.length]=s;for(e=new olb(c.a);e.a<e.c.c.length;){d=BD(mlb(e),10);if(L5b(d)){w.c[w.c.length]=d;continue}for(j=new Sr(ur(R_b(d).a.Kc(),new Sq));Qr(j);){h=BD(Rr(j),17);F=h.c.i;if(!L5b(F)){continue}C=BD(B.xc(vNb(F,(wtc(),$sc))),10);if(!C){C=K5b(a,F);B.zc(vNb(F,$sc),C);D.Fc(C)}QZb(h,BD(Ikb(C.j,1),11))}for(i=new Sr(ur(U_b(d).a.Kc(),new Sq));Qr(i);){h=BD(Rr(i),17);G=h.d.i;if(!L5b(G)){continue}r=BD(Ohb(q,vNb(G,(wtc(),$sc))),10);if(!r){r=K5b(a,G);Rhb(q,vNb(G,$sc),r);s.c[s.c.length]=r}RZb(h,BD(Ikb(r.j,0),11))}}}for(l=0;l<p.c.length;l++){t=(tCb(l,p.c.length),BD(p.c[l],15));if(t.dc()){continue}m=null;if(l==0){m=new H1b(a);wCb(0,o.c.length);aCb(o.c,0,m)}else if(l==k.c.length-1){m=new H1b(a);o.c[o.c.length]=m}else{m=(tCb(l-1,o.c.length),BD(o.c[l-1],29))}for(g=t.Kc();g.Ob();){f=BD(g.Pb(),10);$_b(f,m)}}for(v=new olb(w);v.a<v.c.c.length;){u=BD(mlb(v),10);$_b(u,null)}yNb(a,(wtc(),Fsc),w)} -function BCc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;Odd(c,'Coffman-Graham Layering',1);if(b.a.c.length==0){Qdd(c);return}v=BD(vNb(b,(Nyc(),kxc)),19).a;i=0;g=0;for(m=new olb(b.a);m.a<m.c.c.length;){l=BD(mlb(m),10);l.p=i++;for(f=new Sr(ur(U_b(l).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);e.p=g++}}a.d=KC(sbb,dle,25,i,16,1);a.a=KC(sbb,dle,25,g,16,1);a.b=KC(WD,oje,25,i,15,1);a.e=KC(WD,oje,25,i,15,1);a.f=KC(WD,oje,25,i,15,1);Nc(a.c);CCc(a,b);o=new gub(new GCc(a));for(u=new olb(b.a);u.a<u.c.c.length;){s=BD(mlb(u),10);for(f=new Sr(ur(R_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);a.a[e.p]||++a.b[s.p]}a.b[s.p]==0&&(zCb(cub(o,s)),true)}h=0;while(o.b.c.length!=0){s=BD(dub(o),10);a.f[s.p]=h++;for(f=new Sr(ur(U_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}q=e.d.i;--a.b[q.p];Rc(a.c,q,meb(a.f[s.p]));a.b[q.p]==0&&(zCb(cub(o,q)),true)}}n=new gub(new KCc(a));for(t=new olb(b.a);t.a<t.c.c.length;){s=BD(mlb(t),10);for(f=new Sr(ur(U_b(s).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);a.a[e.p]||++a.e[s.p]}a.e[s.p]==0&&(zCb(cub(n,s)),true)}k=new Rkb;d=yCc(b,k);while(n.b.c.length!=0){r=BD(dub(n),10);(d.a.c.length>=v||!wCc(r,d))&&(d=yCc(b,k));$_b(r,d);for(f=new Sr(ur(R_b(r).a.Kc(),new Sq));Qr(f);){e=BD(Rr(f),17);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zCb(cub(n,p)),true)}}for(j=k.c.length-1;j>=0;--j){Ekb(b.b,(tCb(j,k.c.length),BD(k.c[j],29)))}b.a.c=KC(SI,Uhe,1,0,5,1);Qdd(c)} -function gee(a){var b,c,d,e,f,g,h,i,j;a.b=1;nde(a);b=null;if(a.c==0&&a.a==94){nde(a);b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);h=(null,++vfe,new $fe(4))}else{h=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){Zfe(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(h,fee(c));d=true;break;case 105:case 73:case 99:case 67:c=(Xfe(h,fee(c)),-1);c<0&&(d=true);break;case 112:case 80:i=tde(a,c);if(!i)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(h,i);d=true;break;default:c=eee(a);}}else if(j==24&&!e){if(b){Zfe(b,h);h=b}f=gee(a);Zfe(h,f);if(a.c!=0||a.a!=93)throw vbb(new mde(tvd((h0d(),Mue))));break}nde(a);if(!d){if(j==0){if(c==91)throw vbb(new mde(tvd((h0d(),Nue))));if(c==93)throw vbb(new mde(tvd((h0d(),Oue))));if(c==45&&!e&&a.a!=93)throw vbb(new mde(tvd((h0d(),Pue))))}if(a.c!=0||a.a!=45||c==45&&e){Ufe(h,c,c)}else{nde(a);if((j=a.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(j==0&&a.a==93){Ufe(h,c,c);Ufe(h,45,45)}else if(j==0&&a.a==93||j==24){throw vbb(new mde(tvd((h0d(),Pue))))}else{g=a.a;if(j==0){if(g==91)throw vbb(new mde(tvd((h0d(),Nue))));if(g==93)throw vbb(new mde(tvd((h0d(),Oue))));if(g==45)throw vbb(new mde(tvd((h0d(),Pue))))}else j==10&&(g=eee(a));nde(a);if(c>g)throw vbb(new mde(tvd((h0d(),Sue))));Ufe(h,c,g)}}}e=false}if(a.c==1)throw vbb(new mde(tvd((h0d(),Kue))));Yfe(h);Vfe(h);a.b=0;nde(a);return h} -function xZd(a){Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#decimal']));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#integer']));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#boolean']));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EBoolean',fue,'EBoolean:Object']));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#byte']));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#hexBinary']));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EByte',fue,'EByte:Object']));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EChar',fue,'EChar:Object']));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#double']));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EDouble',fue,'EDouble:Object']));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#float']));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EFloat',fue,'EFloat:Object']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#int']));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EInt',fue,'EInt:Object']));Bnd(a.N,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#long']));Bnd(a.O,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'ELong',fue,'ELong:Object']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#short']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'EShort',fue,'EShort:Object']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[cwe,'http://www.w3.org/2001/XMLSchema#string']))} -function fRc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){return tCb(0,a.c.length),BD(a.c[0],135)}else if(a.c.length<=0){return new SRc}for(i=new olb(a);i.a<i.c.c.length;){g=BD(mlb(i),135);s=0;o=Ohe;p=Ohe;m=Rie;n=Rie;for(r=Jsb(g.b,0);r.b!=r.d.c;){q=BD(Xsb(r),86);s+=BD(vNb(q,(JTc(),ETc)),19).a;o=$wnd.Math.min(o,q.e.a);p=$wnd.Math.min(p,q.e.b);m=$wnd.Math.max(m,q.e.a+q.f.a);n=$wnd.Math.max(n,q.e.b+q.f.b)}yNb(g,(JTc(),ETc),meb(s));yNb(g,(mTc(),WSc),new f7c(o,p));yNb(g,VSc,new f7c(m,n))}mmb();Okb(a,new jRc);v=new SRc;tNb(v,(tCb(0,a.c.length),BD(a.c[0],94)));l=0;D=0;for(j=new olb(a);j.a<j.c.c.length;){g=BD(mlb(j),135);w=c7c(R6c(BD(vNb(g,(mTc(),VSc)),8)),BD(vNb(g,WSc),8));l=$wnd.Math.max(l,w.a);D+=w.a*w.b}l=$wnd.Math.max(l,$wnd.Math.sqrt(D)*Edb(ED(vNb(v,(JTc(),uTc)))));A=Edb(ED(vNb(v,HTc)));F=0;G=0;k=0;b=A;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),135);w=c7c(R6c(BD(vNb(g,(mTc(),VSc)),8)),BD(vNb(g,WSc),8));if(F+w.a>l){F=0;G+=k+A;k=0}eRc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Lqb;c=new Lqb;for(C=new olb(a);C.a<C.c.c.length;){B=BD(mlb(C),135);d=Ccb(DD(vNb(B,(Y9c(),y8c))));t=!B.q?(null,kmb):B.q;for(f=t.vc().Kc();f.Ob();){e=BD(f.Pb(),42);if(Mhb(u,e.cd())){if(PD(BD(e.cd(),146).wg())!==PD(e.dd())){if(d&&Mhb(c,e.cd())){Zfb();'Found different values for property '+BD(e.cd(),146).tg()+' in components.'}else{Rhb(u,BD(e.cd(),146),e.dd());yNb(v,BD(e.cd(),146),e.dd());d&&Rhb(c,BD(e.cd(),146),e.dd())}}}else{Rhb(u,BD(e.cd(),146),e.dd());yNb(v,BD(e.cd(),146),e.dd())}}}return v} -function MYb(){MYb=ccb;xXb();LYb=new Hp;Rc(LYb,(Ucd(),Gcd),Fcd);Rc(LYb,Qcd,Fcd);Rc(LYb,Hcd,Fcd);Rc(LYb,Ncd,Fcd);Rc(LYb,Mcd,Fcd);Rc(LYb,Kcd,Fcd);Rc(LYb,Ncd,Gcd);Rc(LYb,Fcd,Bcd);Rc(LYb,Gcd,Bcd);Rc(LYb,Qcd,Bcd);Rc(LYb,Hcd,Bcd);Rc(LYb,Lcd,Bcd);Rc(LYb,Ncd,Bcd);Rc(LYb,Mcd,Bcd);Rc(LYb,Kcd,Bcd);Rc(LYb,Ecd,Bcd);Rc(LYb,Fcd,Ocd);Rc(LYb,Gcd,Ocd);Rc(LYb,Bcd,Ocd);Rc(LYb,Qcd,Ocd);Rc(LYb,Hcd,Ocd);Rc(LYb,Lcd,Ocd);Rc(LYb,Ncd,Ocd);Rc(LYb,Ecd,Ocd);Rc(LYb,Pcd,Ocd);Rc(LYb,Mcd,Ocd);Rc(LYb,Icd,Ocd);Rc(LYb,Kcd,Ocd);Rc(LYb,Gcd,Qcd);Rc(LYb,Hcd,Qcd);Rc(LYb,Ncd,Qcd);Rc(LYb,Kcd,Qcd);Rc(LYb,Gcd,Hcd);Rc(LYb,Qcd,Hcd);Rc(LYb,Ncd,Hcd);Rc(LYb,Hcd,Hcd);Rc(LYb,Mcd,Hcd);Rc(LYb,Fcd,Ccd);Rc(LYb,Gcd,Ccd);Rc(LYb,Bcd,Ccd);Rc(LYb,Ocd,Ccd);Rc(LYb,Qcd,Ccd);Rc(LYb,Hcd,Ccd);Rc(LYb,Lcd,Ccd);Rc(LYb,Ncd,Ccd);Rc(LYb,Pcd,Ccd);Rc(LYb,Ecd,Ccd);Rc(LYb,Kcd,Ccd);Rc(LYb,Mcd,Ccd);Rc(LYb,Jcd,Ccd);Rc(LYb,Fcd,Pcd);Rc(LYb,Gcd,Pcd);Rc(LYb,Bcd,Pcd);Rc(LYb,Qcd,Pcd);Rc(LYb,Hcd,Pcd);Rc(LYb,Lcd,Pcd);Rc(LYb,Ncd,Pcd);Rc(LYb,Ecd,Pcd);Rc(LYb,Kcd,Pcd);Rc(LYb,Icd,Pcd);Rc(LYb,Jcd,Pcd);Rc(LYb,Gcd,Ecd);Rc(LYb,Qcd,Ecd);Rc(LYb,Hcd,Ecd);Rc(LYb,Ncd,Ecd);Rc(LYb,Pcd,Ecd);Rc(LYb,Kcd,Ecd);Rc(LYb,Mcd,Ecd);Rc(LYb,Fcd,Dcd);Rc(LYb,Gcd,Dcd);Rc(LYb,Bcd,Dcd);Rc(LYb,Qcd,Dcd);Rc(LYb,Hcd,Dcd);Rc(LYb,Lcd,Dcd);Rc(LYb,Ncd,Dcd);Rc(LYb,Ecd,Dcd);Rc(LYb,Kcd,Dcd);Rc(LYb,Gcd,Mcd);Rc(LYb,Bcd,Mcd);Rc(LYb,Ocd,Mcd);Rc(LYb,Hcd,Mcd);Rc(LYb,Fcd,Icd);Rc(LYb,Gcd,Icd);Rc(LYb,Ocd,Icd);Rc(LYb,Qcd,Icd);Rc(LYb,Hcd,Icd);Rc(LYb,Lcd,Icd);Rc(LYb,Ncd,Icd);Rc(LYb,Ncd,Jcd);Rc(LYb,Hcd,Jcd);Rc(LYb,Ecd,Fcd);Rc(LYb,Ecd,Qcd);Rc(LYb,Ecd,Bcd);Rc(LYb,Lcd,Fcd);Rc(LYb,Lcd,Gcd);Rc(LYb,Lcd,Ocd)} -function HVd(a,b){switch(a.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new U5d(a.b,a.a,b,a.c);case 1:return new BMd(a.a,b,bLd(b.Tg(),a.c));case 43:return new N4d(a.a,b,bLd(b.Tg(),a.c));case 3:return new xMd(a.a,b,bLd(b.Tg(),a.c));case 45:return new K4d(a.a,b,bLd(b.Tg(),a.c));case 41:return new dId(BD(wId(a.c),26),a.a,b,bLd(b.Tg(),a.c));case 50:return new c6d(BD(wId(a.c),26),a.a,b,bLd(b.Tg(),a.c));case 5:return new Q4d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 47:return new U4d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 7:return new cUd(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 49:return new gUd(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 9:return new I4d(a.a,b,bLd(b.Tg(),a.c));case 11:return new G4d(a.a,b,bLd(b.Tg(),a.c));case 13:return new C4d(a.a,b,bLd(b.Tg(),a.c));case 15:return new k2d(a.a,b,bLd(b.Tg(),a.c));case 17:return new c5d(a.a,b,bLd(b.Tg(),a.c));case 19:return new _4d(a.a,b,bLd(b.Tg(),a.c));case 21:return new X4d(a.a,b,bLd(b.Tg(),a.c));case 23:return new pMd(a.a,b,bLd(b.Tg(),a.c));case 25:return new D5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 27:return new y5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 29:return new t5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 31:return new n5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 33:return new A5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 35:return new v5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 37:return new p5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 39:return new i5d(a.a,b,bLd(b.Tg(),a.c),a.d.n);case 40:return new u3d(b,bLd(b.Tg(),a.c));default:throw vbb(new hz('Unknown feature style: '+a.e));}} -function BMc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;Odd(c,'Brandes & Koepf node placement',1);a.a=b;a.c=KMc(b);d=BD(vNb(b,(Nyc(),zxc)),274);n=Ccb(DD(vNb(b,Axc)));a.d=d==(lrc(),irc)&&!n||d==frc;AMc(a,b);v=null;w=null;r=null;s=null;q=(Xj(4,Jie),new Skb(4));switch(BD(vNb(b,zxc),274).g){case 3:r=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),WLc));q.c[q.c.length]=r;break;case 1:s=new ULc(b,a.c.d,(eMc(),dMc),(YLc(),WLc));q.c[q.c.length]=s;break;case 4:v=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),XLc));q.c[q.c.length]=v;break;case 2:w=new ULc(b,a.c.d,(eMc(),dMc),(YLc(),XLc));q.c[q.c.length]=w;break;default:r=new ULc(b,a.c.d,(eMc(),cMc),(YLc(),WLc));s=new ULc(b,a.c.d,dMc,WLc);v=new ULc(b,a.c.d,cMc,XLc);w=new ULc(b,a.c.d,dMc,XLc);q.c[q.c.length]=v;q.c[q.c.length]=w;q.c[q.c.length]=r;q.c[q.c.length]=s;}e=new mMc(b,a.c);for(h=new olb(q);h.a<h.c.c.length;){f=BD(mlb(h),180);lMc(e,f,a.b);kMc(f)}m=new rMc(b,a.c);for(i=new olb(q);i.a<i.c.c.length;){f=BD(mlb(i),180);oMc(m,f)}if(c.n){for(j=new olb(q);j.a<j.c.c.length;){f=BD(mlb(j),180);Sdd(c,f+' size is '+SLc(f))}}l=null;if(a.d){k=yMc(a,q,a.c.d);xMc(b,k,c)&&(l=k)}if(!l){for(j=new olb(q);j.a<j.c.c.length;){f=BD(mlb(j),180);xMc(b,f,c)&&(!l||SLc(l)>SLc(f))&&(l=f)}}!l&&(l=(tCb(0,q.c.length),BD(q.c[0],180)));for(p=new olb(b.b);p.a<p.c.c.length;){o=BD(mlb(p),29);for(u=new olb(o.a);u.a<u.c.c.length;){t=BD(mlb(u),10);t.n.b=Edb(l.p[t.p])+Edb(l.d[t.p])}}if(c.n){Sdd(c,'Chosen node placement: '+l);Sdd(c,'Blocks: '+DMc(l));Sdd(c,'Classes: '+EMc(l,c));Sdd(c,'Marked edges: '+a.b)}for(g=new olb(q);g.a<g.c.c.length;){f=BD(mlb(g),180);f.g=null;f.b=null;f.a=null;f.d=null;f.j=null;f.i=null;f.p=null}IMc(a.c);a.b.a.$b();Qdd(c)} -function V1b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;g=new Psb;v=BD(vNb(c,(Nyc(),Lwc)),103);o=0;ye(g,(!b.a&&(b.a=new cUd(E2,b,10,11)),b.a));while(g.b!=0){j=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),33);(PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&!Ccb(DD(hkd(j,xwc)))&&jkd(j,(wtc(),Zsc),meb(o++));q=!Ccb(DD(hkd(j,Jxc)));if(q){l=(!j.a&&(j.a=new cUd(E2,j,10,11)),j.a).i!=0;n=S1b(j);m=PD(hkd(j,axc))===PD((hbd(),ebd));F=!ikd(j,(Y9c(),o8c))||dfb(GD(hkd(j,o8c)),sne);t=null;if(F&&m&&(l||n)){t=P1b(j);yNb(t,Lwc,v);wNb(t,hyc)&&Wyc(new ezc(Edb(ED(vNb(t,hyc)))),t);if(BD(hkd(j,Fxc),174).gc()!=0){k=t;MAb(new YAb(null,(!j.c&&(j.c=new cUd(F2,j,9,9)),new Kub(j.c,16))),new k2b(k));L1b(j,t)}}w=c;A=BD(Ohb(a.a,Xod(j)),10);!!A&&(w=A.e);s=$1b(a,j,w);if(t){s.e=t;t.e=s;ye(g,(!j.a&&(j.a=new cUd(E2,j,10,11)),j.a))}}}o=0;Gsb(g,b,g.c.b,g.c);while(g.b!=0){f=BD(g.b==0?null:(sCb(g.b!=0),Nsb(g,g.a.a)),33);for(i=new Fyd((!f.b&&(f.b=new cUd(B2,f,12,3)),f.b));i.e!=i.i.gc();){h=BD(Dyd(i),79);N1b(h);(PD(hkd(b,ywc))!==PD((tAc(),rAc))||PD(hkd(b,Jwc))===PD((mqc(),lqc))||PD(hkd(b,Jwc))===PD((mqc(),jqc))||Ccb(DD(hkd(b,Awc)))||PD(hkd(b,twc))!==PD((RXb(),QXb)))&&jkd(h,(wtc(),Zsc),meb(o++));C=atd(BD(qud((!h.b&&(h.b=new y5d(z2,h,4,7)),h.b),0),82));D=atd(BD(qud((!h.c&&(h.c=new y5d(z2,h,5,8)),h.c),0),82));if(Ccb(DD(hkd(h,Jxc)))||Ccb(DD(hkd(C,Jxc)))||Ccb(DD(hkd(D,Jxc)))){continue}p=Qld(h)&&Ccb(DD(hkd(C,fxc)))&&Ccb(DD(hkd(h,gxc)));u=f;p||ntd(D,C)?(u=C):ntd(C,D)&&(u=D);w=c;A=BD(Ohb(a.a,u),10);!!A&&(w=A.e);r=X1b(a,h,u,w);yNb(r,(wtc(),xsc),R1b(a,h,b,c))}m=PD(hkd(f,axc))===PD((hbd(),ebd));if(m){for(e=new Fyd((!f.a&&(f.a=new cUd(E2,f,10,11)),f.a));e.e!=e.i.gc();){d=BD(Dyd(e),33);F=!ikd(d,(Y9c(),o8c))||dfb(GD(hkd(d,o8c)),sne);B=PD(hkd(d,axc))===PD(ebd);F&&B&&(Gsb(g,d,g.c.b,g.c),true)}}}} -function vA(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;switch(b){case 71:h=d.q.getFullYear()-nje>=-1900?1:0;c>=4?Qfb(a,OC(GC(ZI,1),nie,2,6,[pje,qje])[h]):Qfb(a,OC(GC(ZI,1),nie,2,6,['BC','AD'])[h]);break;case 121:kA(a,c,d);break;case 77:jA(a,c,d);break;case 107:i=e.q.getHours();i==0?EA(a,24,c):EA(a,i,c);break;case 83:iA(a,c,e);break;case 69:k=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[k]):Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[1]):Qfb(a,OC(GC(ZI,1),nie,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?EA(a,12,c):EA(a,l,c);break;case 75:m=e.q.getHours()%12;EA(a,m,c);break;case 72:n=e.q.getHours();EA(a,n,c);break;case 99:o=d.q.getDay();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[rje,sje,tje,uje,vje,wje,xje])[o]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):EA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Qfb(a,OC(GC(ZI,1),nie,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Qfb(a,OC(GC(ZI,1),nie,2,6,[bje,cje,dje,eje,fje,gje,hje,ije,jje,kje,lje,mje])[p]):c==3?Qfb(a,OC(GC(ZI,1),nie,2,6,['Jan','Feb','Mar','Apr',fje,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):EA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Qfb(a,OC(GC(ZI,1),nie,2,6,['Q1','Q2','Q3','Q4'])[q]):Qfb(a,OC(GC(ZI,1),nie,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();EA(a,r,c);break;case 109:j=e.q.getMinutes();EA(a,j,c);break;case 115:g=e.q.getSeconds();EA(a,g,c);break;case 122:c<4?Qfb(a,f.c[0]):Qfb(a,f.c[1]);break;case 118:Qfb(a,f.b);break;case 90:c<3?Qfb(a,OA(f)):c==3?Qfb(a,NA(f)):Qfb(a,QA(f.a));break;default:return false;}return true} -function X1b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;N1b(b);i=BD(qud((!b.b&&(b.b=new y5d(z2,b,4,7)),b.b),0),82);k=BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82);h=atd(i);j=atd(k);g=(!b.a&&(b.a=new cUd(A2,b,6,6)),b.a).i==0?null:BD(qud((!b.a&&(b.a=new cUd(A2,b,6,6)),b.a),0),202);A=BD(Ohb(a.a,h),10);F=BD(Ohb(a.a,j),10);B=null;G=null;if(JD(i,186)){w=BD(Ohb(a.a,i),299);if(JD(w,11)){B=BD(w,11)}else if(JD(w,10)){A=BD(w,10);B=BD(Ikb(A.j,0),11)}}if(JD(k,186)){D=BD(Ohb(a.a,k),299);if(JD(D,11)){G=BD(D,11)}else if(JD(D,10)){F=BD(D,10);G=BD(Ikb(F.j,0),11)}}if(!A||!F){throw vbb(new z2c('The source or the target of edge '+b+' 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.'))}p=new UZb;tNb(p,b);yNb(p,(wtc(),$sc),b);yNb(p,(Nyc(),jxc),null);n=BD(vNb(d,Ksc),21);A==F&&n.Fc((Orc(),Nrc));if(!B){v=(KAc(),IAc);C=null;if(!!g&&fcd(BD(vNb(A,Vxc),98))){C=new f7c(g.j,g.k);Bfd(C,Mld(b));Cfd(C,c);if(ntd(j,h)){v=HAc;P6c(C,A.n)}}B=$$b(A,C,v,d)}if(!G){v=(KAc(),HAc);H=null;if(!!g&&fcd(BD(vNb(F,Vxc),98))){H=new f7c(g.b,g.c);Bfd(H,Mld(b));Cfd(H,c)}G=$$b(F,H,v,Q_b(F))}QZb(p,B);RZb(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((Orc(),Irc));for(m=new Fyd((!b.n&&(b.n=new cUd(D2,b,1,7)),b.n));m.e!=m.i.gc();){l=BD(Dyd(m),137);if(!Ccb(DD(hkd(l,Jxc)))&&!!l.a){q=Z1b(l);Ekb(p.b,q);switch(BD(vNb(q,Qwc),272).g){case 1:case 2:n.Fc((Orc(),Grc));break;case 0:n.Fc((Orc(),Erc));yNb(q,Qwc,(qad(),nad));}}}f=BD(vNb(d,Iwc),314);r=BD(vNb(d,Exc),315);e=f==(Rpc(),Opc)||r==(Vzc(),Rzc);if(!!g&&(!g.a&&(g.a=new xMd(y2,g,5)),g.a).i!=0&&e){s=ofd(g);o=new s7c;for(u=Jsb(s,0);u.b!=u.d.c;){t=BD(Xsb(u),8);Dsb(o,new g7c(t))}yNb(p,_sc,o)}return p} -function yZd(a){if(a.gb)return;a.gb=true;a.b=Lnd(a,0);Knd(a.b,18);Qnd(a.b,19);a.a=Lnd(a,1);Knd(a.a,1);Qnd(a.a,2);Qnd(a.a,3);Qnd(a.a,4);Qnd(a.a,5);a.o=Lnd(a,2);Knd(a.o,8);Knd(a.o,9);Qnd(a.o,10);Qnd(a.o,11);Qnd(a.o,12);Qnd(a.o,13);Qnd(a.o,14);Qnd(a.o,15);Qnd(a.o,16);Qnd(a.o,17);Qnd(a.o,18);Qnd(a.o,19);Qnd(a.o,20);Qnd(a.o,21);Qnd(a.o,22);Qnd(a.o,23);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);Pnd(a.o);a.p=Lnd(a,3);Knd(a.p,2);Knd(a.p,3);Knd(a.p,4);Knd(a.p,5);Qnd(a.p,6);Qnd(a.p,7);Pnd(a.p);Pnd(a.p);a.q=Lnd(a,4);Knd(a.q,8);a.v=Lnd(a,5);Qnd(a.v,9);Pnd(a.v);Pnd(a.v);Pnd(a.v);a.w=Lnd(a,6);Knd(a.w,2);Knd(a.w,3);Knd(a.w,4);Qnd(a.w,5);a.B=Lnd(a,7);Qnd(a.B,1);Pnd(a.B);Pnd(a.B);Pnd(a.B);a.Q=Lnd(a,8);Qnd(a.Q,0);Pnd(a.Q);a.R=Lnd(a,9);Knd(a.R,1);a.S=Lnd(a,10);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);Pnd(a.S);a.T=Lnd(a,11);Qnd(a.T,10);Qnd(a.T,11);Qnd(a.T,12);Qnd(a.T,13);Qnd(a.T,14);Pnd(a.T);Pnd(a.T);a.U=Lnd(a,12);Knd(a.U,2);Knd(a.U,3);Qnd(a.U,4);Qnd(a.U,5);Qnd(a.U,6);Qnd(a.U,7);Pnd(a.U);a.V=Lnd(a,13);Qnd(a.V,10);a.W=Lnd(a,14);Knd(a.W,18);Knd(a.W,19);Knd(a.W,20);Qnd(a.W,21);Qnd(a.W,22);Qnd(a.W,23);a.bb=Lnd(a,15);Knd(a.bb,10);Knd(a.bb,11);Knd(a.bb,12);Knd(a.bb,13);Knd(a.bb,14);Knd(a.bb,15);Knd(a.bb,16);Qnd(a.bb,17);Pnd(a.bb);Pnd(a.bb);a.eb=Lnd(a,16);Knd(a.eb,2);Knd(a.eb,3);Knd(a.eb,4);Knd(a.eb,5);Knd(a.eb,6);Knd(a.eb,7);Qnd(a.eb,8);Qnd(a.eb,9);a.ab=Lnd(a,17);Knd(a.ab,0);Knd(a.ab,1);a.H=Lnd(a,18);Qnd(a.H,0);Qnd(a.H,1);Qnd(a.H,2);Qnd(a.H,3);Qnd(a.H,4);Qnd(a.H,5);Pnd(a.H);a.db=Lnd(a,19);Qnd(a.db,2);a.c=Mnd(a,20);a.d=Mnd(a,21);a.e=Mnd(a,22);a.f=Mnd(a,23);a.i=Mnd(a,24);a.g=Mnd(a,25);a.j=Mnd(a,26);a.k=Mnd(a,27);a.n=Mnd(a,28);a.r=Mnd(a,29);a.s=Mnd(a,30);a.t=Mnd(a,31);a.u=Mnd(a,32);a.fb=Mnd(a,33);a.A=Mnd(a,34);a.C=Mnd(a,35);a.D=Mnd(a,36);a.F=Mnd(a,37);a.G=Mnd(a,38);a.I=Mnd(a,39);a.J=Mnd(a,40);a.L=Mnd(a,41);a.M=Mnd(a,42);a.N=Mnd(a,43);a.O=Mnd(a,44);a.P=Mnd(a,45);a.X=Mnd(a,46);a.Y=Mnd(a,47);a.Z=Mnd(a,48);a.$=Mnd(a,49);a._=Mnd(a,50);a.cb=Mnd(a,51);a.K=Mnd(a,52)} -function Y9c(){Y9c=ccb;var a,b;o8c=new Lsd(sse);F9c=new Lsd(tse);q8c=(F7c(),z7c);p8c=new Nsd($pe,q8c);new Tfd;r8c=new Nsd(_le,null);s8c=new Lsd(use);x8c=(i8c(),qqb(h8c,OC(GC(r1,1),Kie,291,0,[d8c])));w8c=new Nsd(lqe,x8c);y8c=new Nsd(Zpe,(Bcb(),false));A8c=(ead(),cad);z8c=new Nsd(cqe,A8c);F8c=(Aad(),zad);E8c=new Nsd(ype,F8c);I8c=new Nsd(Jre,false);K8c=(hbd(),fbd);J8c=new Nsd(tpe,K8c);g9c=new q0b(12);f9c=new Nsd(ame,g9c);O8c=new Nsd(Ame,false);P8c=new Nsd(xqe,false);e9c=new Nsd(Dme,false);u9c=(dcd(),ccd);t9c=new Nsd(Bme,u9c);C9c=new Lsd(uqe);D9c=new Lsd(vme);E9c=new Lsd(yme);H9c=new Lsd(zme);R8c=new s7c;Q8c=new Nsd(mqe,R8c);v8c=new Nsd(pqe,false);L8c=new Nsd(qqe,false);new Lsd(vse);T8c=new H_b;S8c=new Nsd(vqe,T8c);d9c=new Nsd(Xpe,false);new Tfd;G9c=new Nsd(wse,1);new Nsd(xse,true);meb(0);new Nsd(yse,meb(100));new Nsd(zse,false);meb(0);new Nsd(Ase,meb(4000));meb(0);new Nsd(Bse,meb(400));new Nsd(Cse,false);new Nsd(Dse,false);new Nsd(Ese,true);new Nsd(Fse,false);u8c=(Ded(),Ced);t8c=new Nsd(rse,u8c);I9c=new Nsd(Lpe,10);J9c=new Nsd(Mpe,10);K9c=new Nsd(Zle,20);L9c=new Nsd(Npe,10);M9c=new Nsd(xme,2);N9c=new Nsd(Ope,10);P9c=new Nsd(Ppe,0);Q9c=new Nsd(Spe,5);R9c=new Nsd(Qpe,1);S9c=new Nsd(Rpe,1);T9c=new Nsd(wme,20);U9c=new Nsd(Tpe,10);X9c=new Nsd(Upe,10);O9c=new Lsd(Vpe);W9c=new I_b;V9c=new Nsd(wqe,W9c);j9c=new Lsd(tqe);i9c=false;h9c=new Nsd(sqe,i9c);V8c=new q0b(5);U8c=new Nsd(dqe,V8c);X8c=(Hbd(),b=BD(gdb(B1),9),new xqb(b,BD(_Bb(b,b.length),9),0));W8c=new Nsd(Gme,X8c);m9c=(Tbd(),Qbd);l9c=new Nsd(gqe,m9c);o9c=new Lsd(hqe);p9c=new Lsd(iqe);q9c=new Lsd(jqe);n9c=new Lsd(kqe);Z8c=(a=BD(gdb(I1),9),new xqb(a,BD(_Bb(a,a.length),9),0));Y8c=new Nsd(Fme,Z8c);c9c=pqb((Idd(),Bdd));b9c=new Nsd(Eme,c9c);a9c=new f7c(0,0);_8c=new Nsd(Tme,a9c);$8c=new Nsd(bqe,false);D8c=(qad(),nad);C8c=new Nsd(nqe,D8c);B8c=new Nsd(Cme,false);new Lsd(Gse);meb(1);new Nsd(Hse,null);r9c=new Lsd(rqe);v9c=new Lsd(oqe);B9c=(Ucd(),Scd);A9c=new Nsd(Ype,B9c);s9c=new Lsd(Wpe);y9c=(rcd(),pqb(pcd));x9c=new Nsd(Hme,y9c);w9c=new Nsd(eqe,false);z9c=new Nsd(fqe,true);M8c=new Nsd(_pe,false);N8c=new Nsd(aqe,false);G8c=new Nsd($le,1);H8c=(Mad(),Kad);new Nsd(Ise,H8c);k9c=true} -function wtc(){wtc=ccb;var a,b;$sc=new Lsd(Ime);xsc=new Lsd('coordinateOrigin');itc=new Lsd('processors');wsc=new Msd('compoundNode',(Bcb(),false));Nsc=new Msd('insideConnections',false);_sc=new Lsd('originalBendpoints');atc=new Lsd('originalDummyNodePosition');btc=new Lsd('originalLabelEdge');ktc=new Lsd('representedLabels');Csc=new Lsd('endLabels');Dsc=new Lsd('endLabel.origin');Ssc=new Msd('labelSide',(rbd(),qbd));Ysc=new Msd('maxEdgeThickness',0);ltc=new Msd('reversed',false);jtc=new Lsd(Jme);Vsc=new Msd('longEdgeSource',null);Wsc=new Msd('longEdgeTarget',null);Usc=new Msd('longEdgeHasLabelDummies',false);Tsc=new Msd('longEdgeBeforeLabelDummy',false);Bsc=new Msd('edgeConstraint',(Gqc(),Eqc));Psc=new Lsd('inLayerLayoutUnit');Osc=new Msd('inLayerConstraint',(esc(),csc));Qsc=new Msd('inLayerSuccessorConstraint',new Rkb);Rsc=new Msd('inLayerSuccessorConstraintBetweenNonDummies',false);gtc=new Lsd('portDummy');ysc=new Msd('crossingHint',meb(0));Ksc=new Msd('graphProperties',(b=BD(gdb(PW),9),new xqb(b,BD(_Bb(b,b.length),9),0)));Hsc=new Msd('externalPortSide',(Ucd(),Scd));Isc=new Msd('externalPortSize',new d7c);Fsc=new Lsd('externalPortReplacedDummies');Gsc=new Lsd('externalPortReplacedDummy');Esc=new Msd('externalPortConnections',(a=BD(gdb(F1),9),new xqb(a,BD(_Bb(a,a.length),9),0)));htc=new Msd(tle,0);ssc=new Lsd('barycenterAssociates');vtc=new Lsd('TopSideComments');tsc=new Lsd('BottomSideComments');vsc=new Lsd('CommentConnectionPort');Msc=new Msd('inputCollect',false);etc=new Msd('outputCollect',false);Asc=new Msd('cyclic',false);zsc=new Lsd('crossHierarchyMap');utc=new Lsd('targetOffset');new Msd('splineLabelSize',new d7c);otc=new Lsd('spacings');ftc=new Msd('partitionConstraint',false);usc=new Lsd('breakingPoint.info');stc=new Lsd('splines.survivingEdge');rtc=new Lsd('splines.route.start');ptc=new Lsd('splines.edgeChain');dtc=new Lsd('originalPortConstraints');ntc=new Lsd('selfLoopHolder');qtc=new Lsd('splines.nsPortY');Zsc=new Lsd('modelOrder');Xsc=new Lsd('longEdgeTargetNode');Jsc=new Msd(Xne,false);mtc=new Msd(Xne,false);Lsc=new Lsd('layerConstraints.hiddenNodes');ctc=new Lsd('layerConstraints.opposidePort');ttc=new Lsd('targetNode.modelOrder')} -function jwc(){jwc=ccb;puc=(xqc(),vqc);ouc=new Nsd(Yne,puc);Guc=new Nsd(Zne,(Bcb(),false));Muc=(msc(),ksc);Luc=new Nsd($ne,Muc);cvc=new Nsd(_ne,false);dvc=new Nsd(aoe,true);Itc=new Nsd(boe,false);xvc=(BAc(),zAc);wvc=new Nsd(coe,xvc);meb(1);Fvc=new Nsd(doe,meb(7));Gvc=new Nsd(eoe,false);Huc=new Nsd(foe,false);nuc=(mqc(),iqc);muc=new Nsd(goe,nuc);bvc=(lzc(),jzc);avc=new Nsd(hoe,bvc);Tuc=(Ctc(),Btc);Suc=new Nsd(ioe,Tuc);meb(-1);Ruc=new Nsd(joe,meb(-1));meb(-1);Uuc=new Nsd(koe,meb(-1));meb(-1);Vuc=new Nsd(loe,meb(4));meb(-1);Xuc=new Nsd(moe,meb(2));_uc=(kAc(),iAc);$uc=new Nsd(noe,_uc);meb(0);Zuc=new Nsd(ooe,meb(0));Puc=new Nsd(poe,meb(Ohe));luc=(Rpc(),Ppc);kuc=new Nsd(qoe,luc);Xtc=new Nsd(roe,false);euc=new Nsd(soe,0.1);iuc=new Nsd(toe,false);meb(-1);guc=new Nsd(uoe,meb(-1));meb(-1);huc=new Nsd(voe,meb(-1));meb(0);Ytc=new Nsd(woe,meb(40));cuc=(Xrc(),Wrc);buc=new Nsd(xoe,cuc);$tc=Urc;Ztc=new Nsd(yoe,$tc);vvc=(Vzc(),Qzc);uvc=new Nsd(zoe,vvc);kvc=new Lsd(Aoe);fvc=(_qc(),Zqc);evc=new Nsd(Boe,fvc);ivc=(lrc(),irc);hvc=new Nsd(Coe,ivc);new Tfd;nvc=new Nsd(Doe,0.3);pvc=new Lsd(Eoe);rvc=(Izc(),Gzc);qvc=new Nsd(Foe,rvc);xuc=(TAc(),RAc);wuc=new Nsd(Goe,xuc);zuc=(_Ac(),$Ac);yuc=new Nsd(Hoe,zuc);Buc=(tBc(),sBc);Auc=new Nsd(Ioe,Buc);Duc=new Nsd(Joe,0.2);uuc=new Nsd(Koe,2);Bvc=new Nsd(Loe,null);Dvc=new Nsd(Moe,10);Cvc=new Nsd(Noe,10);Evc=new Nsd(Ooe,20);meb(0);yvc=new Nsd(Poe,meb(0));meb(0);zvc=new Nsd(Qoe,meb(0));meb(0);Avc=new Nsd(Roe,meb(0));Jtc=new Nsd(Soe,false);Ntc=(yrc(),wrc);Mtc=new Nsd(Toe,Ntc);Ltc=(Ipc(),Hpc);Ktc=new Nsd(Uoe,Ltc);Juc=new Nsd(Voe,false);meb(0);Iuc=new Nsd(Woe,meb(16));meb(0);Kuc=new Nsd(Xoe,meb(5));bwc=(LBc(),JBc);awc=new Nsd(Yoe,bwc);Hvc=new Nsd(Zoe,10);Kvc=new Nsd($oe,1);Tvc=(bqc(),aqc);Svc=new Nsd(_oe,Tvc);Nvc=new Lsd(ape);Qvc=meb(1);meb(0);Pvc=new Nsd(bpe,Qvc);gwc=(CBc(),zBc);fwc=new Nsd(cpe,gwc);cwc=new Lsd(dpe);Yvc=new Nsd(epe,true);Wvc=new Nsd(fpe,2);$vc=new Nsd(gpe,true);tuc=(Sqc(),Qqc);suc=new Nsd(hpe,tuc);ruc=(Apc(),wpc);quc=new Nsd(ipe,ruc);Wtc=(tAc(),rAc);Vtc=new Nsd(jpe,Wtc);Utc=new Nsd(kpe,false);Ptc=(RXb(),QXb);Otc=new Nsd(lpe,Ptc);Ttc=(xzc(),uzc);Stc=new Nsd(mpe,Ttc);Qtc=new Nsd(npe,0);Rtc=new Nsd(ope,0);Ouc=kqc;Nuc=Opc;Wuc=izc;Yuc=izc;Quc=fzc;fuc=(hbd(),ebd);juc=Ppc;duc=Ppc;_tc=Ppc;auc=ebd;lvc=Tzc;mvc=Qzc;gvc=Qzc;jvc=Qzc;ovc=Szc;tvc=Tzc;svc=Tzc;Cuc=(Aad(),yad);Euc=yad;Fuc=sBc;vuc=xad;Ivc=KBc;Jvc=IBc;Lvc=KBc;Mvc=IBc;Uvc=KBc;Vvc=IBc;Ovc=_pc;Rvc=aqc;hwc=KBc;iwc=IBc;dwc=KBc;ewc=IBc;Zvc=IBc;Xvc=IBc;_vc=IBc} -function S8b(){S8b=ccb;Y7b=new T8b('DIRECTION_PREPROCESSOR',0);V7b=new T8b('COMMENT_PREPROCESSOR',1);Z7b=new T8b('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);n8b=new T8b('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);G8b=new T8b('PARTITION_PREPROCESSOR',4);r8b=new T8b('LABEL_DUMMY_INSERTER',5);M8b=new T8b('SELF_LOOP_PREPROCESSOR',6);w8b=new T8b('LAYER_CONSTRAINT_PREPROCESSOR',7);E8b=new T8b('PARTITION_MIDPROCESSOR',8);i8b=new T8b('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);A8b=new T8b('NODE_PROMOTION',10);v8b=new T8b('LAYER_CONSTRAINT_POSTPROCESSOR',11);F8b=new T8b('PARTITION_POSTPROCESSOR',12);e8b=new T8b('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);O8b=new T8b('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);P7b=new T8b('BREAKING_POINT_INSERTER',15);z8b=new T8b('LONG_EDGE_SPLITTER',16);I8b=new T8b('PORT_SIDE_PROCESSOR',17);o8b=new T8b('INVERTED_PORT_PROCESSOR',18);H8b=new T8b('PORT_LIST_SORTER',19);Q8b=new T8b('SORT_BY_INPUT_ORDER_OF_MODEL',20);C8b=new T8b('NORTH_SOUTH_PORT_PREPROCESSOR',21);Q7b=new T8b('BREAKING_POINT_PROCESSOR',22);D8b=new T8b(Bne,23);R8b=new T8b(Cne,24);K8b=new T8b('SELF_LOOP_PORT_RESTORER',25);P8b=new T8b('SINGLE_EDGE_GRAPH_WRAPPER',26);p8b=new T8b('IN_LAYER_CONSTRAINT_PROCESSOR',27);b8b=new T8b('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);q8b=new T8b('LABEL_AND_NODE_SIZE_PROCESSOR',29);m8b=new T8b('INNERMOST_NODE_MARGIN_CALCULATOR',30);N8b=new T8b('SELF_LOOP_ROUTER',31);T7b=new T8b('COMMENT_NODE_MARGIN_CALCULATOR',32);_7b=new T8b('END_LABEL_PREPROCESSOR',33);t8b=new T8b('LABEL_DUMMY_SWITCHER',34);S7b=new T8b('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);u8b=new T8b('LABEL_SIDE_SELECTOR',36);k8b=new T8b('HYPEREDGE_DUMMY_MERGER',37);f8b=new T8b('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);x8b=new T8b('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);h8b=new T8b('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);W7b=new T8b('CONSTRAINTS_POSTPROCESSOR',41);U7b=new T8b('COMMENT_POSTPROCESSOR',42);l8b=new T8b('HYPERNODE_PROCESSOR',43);g8b=new T8b('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);y8b=new T8b('LONG_EDGE_JOINER',45);L8b=new T8b('SELF_LOOP_POSTPROCESSOR',46);R7b=new T8b('BREAKING_POINT_REMOVER',47);B8b=new T8b('NORTH_SOUTH_PORT_POSTPROCESSOR',48);j8b=new T8b('HORIZONTAL_COMPACTOR',49);s8b=new T8b('LABEL_DUMMY_REMOVER',50);c8b=new T8b('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);a8b=new T8b('END_LABEL_SORTER',52);J8b=new T8b('REVERSED_EDGE_RESTORER',53);$7b=new T8b('END_LABEL_POSTPROCESSOR',54);d8b=new T8b('HIERARCHICAL_NODE_RESIZER',55);X7b=new T8b('DIRECTION_POSTPROCESSOR',56)} -function KIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K<N;++K){F=H[K];for(V=new olb(F.j);V.a<V.c.c.length;){U=BD(mlb(V),11);X=0;for(h=new olb(U.g);h.a<h.c.c.length;){g=BD(mlb(h),17);F.c!=g.d.i.c&&++X}X>0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L<O;++L){F=I[L];P=0;for(V=new olb(F.j);V.a<V.c.c.length;){U=BD(mlb(V),11);if(U.j==(Ucd(),Acd)){for(h=new olb(U.e);h.a<h.c.c.length;){g=BD(mlb(h),17);if(F.c!=g.c.i.c){++P;break}}}else{break}}R=0;Y=new Bib(F.j,F.j.c.length);while(Y.b>0){U=(sCb(Y.b>0),BD(Y.a.Xb(Y.c=--Y.b),11));X=0;for(h=new olb(U.e);h.a<h.c.c.length;){g=BD(mlb(h),17);F.c!=g.c.i.c&&++X}if(X>0){if(U.j==(Ucd(),Acd)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Lqb;o=new zsb;for(G=b,J=0,M=G.length;J<M;++J){F=G[J];for(fb=new olb(F.j);fb.a<fb.c.c.length;){eb=BD(mlb(fb),11);for(h=new olb(eb.g);h.a<h.c.c.length;){g=BD(mlb(h),17);jb=g.d;if(F.c!=jb.i.c){db=BD(Wd(irb(W.f,eb)),467);ib=BD(Wd(irb(W.f,jb)),467);if(!db&&!ib){n=new NIc;o.a.zc(n,o);Ekb(n.a,g);Ekb(n.d,eb);jrb(W.f,eb,n);Ekb(n.d,jb);jrb(W.f,jb,n)}else if(!db){Ekb(ib.a,g);Ekb(ib.d,eb);jrb(W.f,eb,ib)}else if(!ib){Ekb(db.a,g);Ekb(db.d,jb);jrb(W.f,jb,db)}else if(db==ib){Ekb(db.a,g)}else{Ekb(db.a,g);for(T=new olb(ib.d);T.a<T.c.c.length;){S=BD(mlb(T),11);jrb(W.f,S,db)}Gkb(db.a,ib.a);Gkb(db.d,ib.d);o.a.Bc(ib)!=null}}}}}p=BD(Ee(o,KC(oY,{3:1,4:1,5:1,1946:1},467,o.a.gc(),0,1)),1946);D=b[0].c;bb=c[0].c;for(k=p,l=0,m=k.length;l<m;++l){j=k[l];j.e=cb;j.f=hb;for(V=new olb(j.d);V.a<V.c.c.length;){U=BD(mlb(V),11);Z=a.a[U.p];if(U.i.c==D){Z<j.e&&(j.e=Z);Z>j.b&&(j.b=Z)}else if(U.i.c==bb){Z<j.f&&(j.f=Z);Z>j.c&&(j.c=Z)}}}Klb(p,0,p.length,null);gb=KC(WD,oje,25,p.length,15,1);d=KC(WD,oje,25,hb+1,15,1);for(r=0;r<p.length;r++){gb[r]=p[r].f;d[gb[r]]=1}f=0;for(s=0;s<d.length;s++){d[s]==1?(d[s]=f):--f}$=0;for(t=0;t<gb.length;t++){gb[t]+=d[gb[t]];$=$wnd.Math.max($,gb[t]+1)}i=1;while(i<$){i*=2}lb=2*i-1;i-=1;kb=KC(WD,oje,25,lb,15,1);e=0;for(B=0;B<gb.length;B++){A=gb[B]+i;++kb[A];while(A>0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=KC(nY,Uhe,362,p.length*2,0,1);for(u=0;u<p.length;u++){C[2*u]=new QIc(p[u],p[u].e,p[u].b,(UIc(),TIc));C[2*u+1]=new QIc(p[u],p[u].b,p[u].e,SIc)}Klb(C,0,C.length,null);Q=0;for(v=0;v<C.length;v++){switch(C[v].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}ab=KC(nY,Uhe,362,p.length*2,0,1);for(w=0;w<p.length;w++){ab[2*w]=new QIc(p[w],p[w].f,p[w].c,(UIc(),TIc));ab[2*w+1]=new QIc(p[w],p[w].c,p[w].f,SIc)}Klb(ab,0,ab.length,null);Q=0;for(q=0;q<ab.length;q++){switch(ab[q].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}return e} -function wfe(){wfe=ccb;ffe=new xfe(7);hfe=(++vfe,new ige(8,94));++vfe;new ige(8,64);ife=(++vfe,new ige(8,36));ofe=(++vfe,new ige(8,65));pfe=(++vfe,new ige(8,122));qfe=(++vfe,new ige(8,90));tfe=(++vfe,new ige(8,98));mfe=(++vfe,new ige(8,66));rfe=(++vfe,new ige(8,60));ufe=(++vfe,new ige(8,62));efe=new xfe(11);cfe=(++vfe,new $fe(4));Ufe(cfe,48,57);sfe=(++vfe,new $fe(4));Ufe(sfe,48,57);Ufe(sfe,65,90);Ufe(sfe,95,95);Ufe(sfe,97,122);nfe=(++vfe,new $fe(4));Ufe(nfe,9,9);Ufe(nfe,10,10);Ufe(nfe,12,12);Ufe(nfe,13,13);Ufe(nfe,32,32);jfe=_fe(cfe);lfe=_fe(sfe);kfe=_fe(nfe);Zee=new Lqb;$ee=new Lqb;_ee=OC(GC(ZI,1),nie,2,6,['Cn','Lu','Ll','Lt','Lm','Lo','Mn','Me','Mc','Nd','Nl','No','Zs','Zl','Zp','Cc','Cf',null,'Co','Cs','Pd','Ps','Pe','Pc','Po','Sm','Sc','Sk','So','Pi','Pf','L','M','N','Z','C','P','S']);Yee=OC(GC(ZI,1),nie,2,6,['Basic Latin','Latin-1 Supplement','Latin Extended-A','Latin Extended-B','IPA Extensions','Spacing Modifier Letters','Combining Diacritical Marks','Greek','Cyrillic','Armenian','Hebrew','Arabic','Syriac','Thaana','Devanagari','Bengali','Gurmukhi','Gujarati','Oriya','Tamil','Telugu','Kannada','Malayalam','Sinhala','Thai','Lao','Tibetan','Myanmar','Georgian','Hangul Jamo','Ethiopic','Cherokee','Unified Canadian Aboriginal Syllabics','Ogham','Runic','Khmer','Mongolian','Latin Extended Additional','Greek Extended','General Punctuation','Superscripts and Subscripts','Currency Symbols','Combining Marks for Symbols','Letterlike Symbols','Number Forms','Arrows','Mathematical Operators','Miscellaneous Technical','Control Pictures','Optical Character Recognition','Enclosed Alphanumerics','Box Drawing','Block Elements','Geometric Shapes','Miscellaneous Symbols','Dingbats','Braille Patterns','CJK Radicals Supplement','Kangxi Radicals','Ideographic Description Characters','CJK Symbols and Punctuation','Hiragana','Katakana','Bopomofo','Hangul Compatibility Jamo','Kanbun','Bopomofo Extended','Enclosed CJK Letters and Months','CJK Compatibility','CJK Unified Ideographs Extension A','CJK Unified Ideographs','Yi Syllables','Yi Radicals','Hangul Syllables',uxe,'CJK Compatibility Ideographs','Alphabetic Presentation Forms','Arabic Presentation Forms-A','Combining Half Marks','CJK Compatibility Forms','Small Form Variants','Arabic Presentation Forms-B','Specials','Halfwidth and Fullwidth Forms','Old Italic','Gothic','Deseret','Byzantine Musical Symbols','Musical Symbols','Mathematical Alphanumeric Symbols','CJK Unified Ideographs Extension B','CJK Compatibility Ideographs Supplement','Tags']);afe=OC(GC(WD,1),oje,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])} -function qJb(){qJb=ccb;nJb=new tJb('OUT_T_L',0,(NHb(),LHb),(EIb(),BIb),(gHb(),dHb),dHb,OC(GC(LK,1),Uhe,21,0,[qqb((Hbd(),Dbd),OC(GC(B1,1),Kie,93,0,[Gbd,zbd]))]));mJb=new tJb('OUT_T_C',1,KHb,BIb,dHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd,Abd]))]));oJb=new tJb('OUT_T_R',2,MHb,BIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd]))]));eJb=new tJb('OUT_B_L',3,LHb,DIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd]))]));dJb=new tJb('OUT_B_C',4,KHb,DIb,fHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd,Abd]))]));fJb=new tJb('OUT_B_R',5,MHb,DIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd]))]));iJb=new tJb('OUT_L_T',6,MHb,DIb,dHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Gbd,Abd]))]));hJb=new tJb('OUT_L_C',7,MHb,CIb,eHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Fbd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Fbd,Abd]))]));gJb=new tJb('OUT_L_B',8,MHb,BIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[zbd,Ebd,Abd]))]));lJb=new tJb('OUT_R_T',9,LHb,DIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Gbd,Abd]))]));kJb=new tJb('OUT_R_C',10,LHb,CIb,eHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Fbd])),qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Fbd,Abd]))]));jJb=new tJb('OUT_R_B',11,LHb,BIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Dbd,OC(GC(B1,1),Kie,93,0,[Bbd,Ebd,Abd]))]));bJb=new tJb('IN_T_L',12,LHb,DIb,dHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,zbd,Abd]))]));aJb=new tJb('IN_T_C',13,KHb,DIb,dHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,ybd,Abd]))]));cJb=new tJb('IN_T_R',14,MHb,DIb,dHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Gbd,Bbd,Abd]))]));$Ib=new tJb('IN_C_L',15,LHb,CIb,eHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,zbd,Abd]))]));ZIb=new tJb('IN_C_C',16,KHb,CIb,eHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,ybd,Abd]))]));_Ib=new tJb('IN_C_R',17,MHb,CIb,eHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Fbd,Bbd,Abd]))]));XIb=new tJb('IN_B_L',18,LHb,BIb,fHb,dHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,zbd,Abd]))]));WIb=new tJb('IN_B_C',19,KHb,BIb,fHb,eHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,ybd,Abd]))]));YIb=new tJb('IN_B_R',20,MHb,BIb,fHb,fHb,OC(GC(LK,1),Uhe,21,0,[qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd])),qqb(Cbd,OC(GC(B1,1),Kie,93,0,[Ebd,Bbd,Abd]))]));pJb=new tJb(ole,21,null,null,null,null,OC(GC(LK,1),Uhe,21,0,[]))} -function jGd(){jGd=ccb;PFd=(NFd(),MFd).b;BD(qud(ZKd(MFd.b),0),34);BD(qud(ZKd(MFd.b),1),18);OFd=MFd.a;BD(qud(ZKd(MFd.a),0),34);BD(qud(ZKd(MFd.a),1),18);BD(qud(ZKd(MFd.a),2),18);BD(qud(ZKd(MFd.a),3),18);BD(qud(ZKd(MFd.a),4),18);QFd=MFd.o;BD(qud(ZKd(MFd.o),0),34);BD(qud(ZKd(MFd.o),1),34);SFd=BD(qud(ZKd(MFd.o),2),18);BD(qud(ZKd(MFd.o),3),18);BD(qud(ZKd(MFd.o),4),18);BD(qud(ZKd(MFd.o),5),18);BD(qud(ZKd(MFd.o),6),18);BD(qud(ZKd(MFd.o),7),18);BD(qud(ZKd(MFd.o),8),18);BD(qud(ZKd(MFd.o),9),18);BD(qud(ZKd(MFd.o),10),18);BD(qud(ZKd(MFd.o),11),18);BD(qud(ZKd(MFd.o),12),18);BD(qud(ZKd(MFd.o),13),18);BD(qud(ZKd(MFd.o),14),18);BD(qud(ZKd(MFd.o),15),18);BD(qud(WKd(MFd.o),0),59);BD(qud(WKd(MFd.o),1),59);BD(qud(WKd(MFd.o),2),59);BD(qud(WKd(MFd.o),3),59);BD(qud(WKd(MFd.o),4),59);BD(qud(WKd(MFd.o),5),59);BD(qud(WKd(MFd.o),6),59);BD(qud(WKd(MFd.o),7),59);BD(qud(WKd(MFd.o),8),59);BD(qud(WKd(MFd.o),9),59);RFd=MFd.p;BD(qud(ZKd(MFd.p),0),34);BD(qud(ZKd(MFd.p),1),34);BD(qud(ZKd(MFd.p),2),34);BD(qud(ZKd(MFd.p),3),34);BD(qud(ZKd(MFd.p),4),18);BD(qud(ZKd(MFd.p),5),18);BD(qud(WKd(MFd.p),0),59);BD(qud(WKd(MFd.p),1),59);TFd=MFd.q;BD(qud(ZKd(MFd.q),0),34);UFd=MFd.v;BD(qud(ZKd(MFd.v),0),18);BD(qud(WKd(MFd.v),0),59);BD(qud(WKd(MFd.v),1),59);BD(qud(WKd(MFd.v),2),59);VFd=MFd.w;BD(qud(ZKd(MFd.w),0),34);BD(qud(ZKd(MFd.w),1),34);BD(qud(ZKd(MFd.w),2),34);BD(qud(ZKd(MFd.w),3),18);WFd=MFd.B;BD(qud(ZKd(MFd.B),0),18);BD(qud(WKd(MFd.B),0),59);BD(qud(WKd(MFd.B),1),59);BD(qud(WKd(MFd.B),2),59);ZFd=MFd.Q;BD(qud(ZKd(MFd.Q),0),18);BD(qud(WKd(MFd.Q),0),59);$Fd=MFd.R;BD(qud(ZKd(MFd.R),0),34);_Fd=MFd.S;BD(qud(WKd(MFd.S),0),59);BD(qud(WKd(MFd.S),1),59);BD(qud(WKd(MFd.S),2),59);BD(qud(WKd(MFd.S),3),59);BD(qud(WKd(MFd.S),4),59);BD(qud(WKd(MFd.S),5),59);BD(qud(WKd(MFd.S),6),59);BD(qud(WKd(MFd.S),7),59);BD(qud(WKd(MFd.S),8),59);BD(qud(WKd(MFd.S),9),59);BD(qud(WKd(MFd.S),10),59);BD(qud(WKd(MFd.S),11),59);BD(qud(WKd(MFd.S),12),59);BD(qud(WKd(MFd.S),13),59);BD(qud(WKd(MFd.S),14),59);aGd=MFd.T;BD(qud(ZKd(MFd.T),0),18);BD(qud(ZKd(MFd.T),2),18);bGd=BD(qud(ZKd(MFd.T),3),18);BD(qud(ZKd(MFd.T),4),18);BD(qud(WKd(MFd.T),0),59);BD(qud(WKd(MFd.T),1),59);BD(qud(ZKd(MFd.T),1),18);cGd=MFd.U;BD(qud(ZKd(MFd.U),0),34);BD(qud(ZKd(MFd.U),1),34);BD(qud(ZKd(MFd.U),2),18);BD(qud(ZKd(MFd.U),3),18);BD(qud(ZKd(MFd.U),4),18);BD(qud(ZKd(MFd.U),5),18);BD(qud(WKd(MFd.U),0),59);dGd=MFd.V;BD(qud(ZKd(MFd.V),0),18);eGd=MFd.W;BD(qud(ZKd(MFd.W),0),34);BD(qud(ZKd(MFd.W),1),34);BD(qud(ZKd(MFd.W),2),34);BD(qud(ZKd(MFd.W),3),18);BD(qud(ZKd(MFd.W),4),18);BD(qud(ZKd(MFd.W),5),18);gGd=MFd.bb;BD(qud(ZKd(MFd.bb),0),34);BD(qud(ZKd(MFd.bb),1),34);BD(qud(ZKd(MFd.bb),2),34);BD(qud(ZKd(MFd.bb),3),34);BD(qud(ZKd(MFd.bb),4),34);BD(qud(ZKd(MFd.bb),5),34);BD(qud(ZKd(MFd.bb),6),34);BD(qud(ZKd(MFd.bb),7),18);BD(qud(WKd(MFd.bb),0),59);BD(qud(WKd(MFd.bb),1),59);hGd=MFd.eb;BD(qud(ZKd(MFd.eb),0),34);BD(qud(ZKd(MFd.eb),1),34);BD(qud(ZKd(MFd.eb),2),34);BD(qud(ZKd(MFd.eb),3),34);BD(qud(ZKd(MFd.eb),4),34);BD(qud(ZKd(MFd.eb),5),34);BD(qud(ZKd(MFd.eb),6),18);BD(qud(ZKd(MFd.eb),7),18);fGd=MFd.ab;BD(qud(ZKd(MFd.ab),0),34);BD(qud(ZKd(MFd.ab),1),34);XFd=MFd.H;BD(qud(ZKd(MFd.H),0),18);BD(qud(ZKd(MFd.H),1),18);BD(qud(ZKd(MFd.H),2),18);BD(qud(ZKd(MFd.H),3),18);BD(qud(ZKd(MFd.H),4),18);BD(qud(ZKd(MFd.H),5),18);BD(qud(WKd(MFd.H),0),59);iGd=MFd.db;BD(qud(ZKd(MFd.db),0),18);YFd=MFd.M} -function bae(a){var b;if(a.O)return;a.O=true;pnd(a,'type');cod(a,'ecore.xml.type');dod(a,Ewe);b=BD(nUd((yFd(),xFd),Ewe),1945);wtd(_Kd(a.fb),a.b);Xnd(a.b,Q9,'AnyType',false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.wb.D,Qve,null,0,-1,Q9,false,false,true,false,false,false);Vnd(BD(qud(ZKd(a.b),1),34),a.wb.D,'any',null,0,-1,Q9,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.b),2),34),a.wb.D,'anyAttribute',null,0,-1,Q9,false,false,true,false,false,false);Xnd(a.bb,S9,Jwe,false,false,true);Vnd(BD(qud(ZKd(a.bb),0),34),a.gb,'data',null,0,1,S9,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),1),34),a.gb,bue,null,1,1,S9,false,false,true,false,true,false);Xnd(a.fb,T9,Kwe,false,false,true);Vnd(BD(qud(ZKd(a.fb),0),34),b.gb,'rawValue',null,0,1,T9,true,true,true,false,true,true);Vnd(BD(qud(ZKd(a.fb),1),34),b.a,Bte,null,0,1,T9,true,true,true,false,true,true);_nd(BD(qud(ZKd(a.fb),2),18),a.wb.q,null,'instanceType',1,1,T9,false,false,true,false,false,false,false);Xnd(a.qb,U9,Lwe,false,false,true);Vnd(BD(qud(ZKd(a.qb),0),34),a.wb.D,Qve,null,0,-1,null,false,false,true,false,false,false);_nd(BD(qud(ZKd(a.qb),1),18),a.wb.ab,null,'xMLNSPrefixMap',0,-1,null,true,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.qb),2),18),a.wb.ab,null,'xSISchemaLocation',0,-1,null,true,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.qb),3),34),a.gb,'cDATA',null,0,-2,null,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.qb),4),34),a.gb,'comment',null,0,-2,null,true,true,true,false,false,true);_nd(BD(qud(ZKd(a.qb),5),18),a.bb,null,jxe,0,-2,null,true,true,true,true,false,false,true);Vnd(BD(qud(ZKd(a.qb),6),34),a.gb,Ite,null,0,-2,null,true,true,true,false,false,true);Znd(a.a,SI,'AnySimpleType',true);Znd(a.c,ZI,'AnyURI',true);Znd(a.d,GC(SD,1),'Base64Binary',true);Znd(a.e,sbb,'Boolean',true);Znd(a.f,wI,'BooleanObject',true);Znd(a.g,SD,'Byte',true);Znd(a.i,xI,'ByteObject',true);Znd(a.j,ZI,'Date',true);Znd(a.k,ZI,'DateTime',true);Znd(a.n,bJ,'Decimal',true);Znd(a.o,UD,'Double',true);Znd(a.p,BI,'DoubleObject',true);Znd(a.q,ZI,'Duration',true);Znd(a.s,yK,'ENTITIES',true);Znd(a.r,yK,'ENTITIESBase',true);Znd(a.t,ZI,Rwe,true);Znd(a.u,VD,'Float',true);Znd(a.v,FI,'FloatObject',true);Znd(a.w,ZI,'GDay',true);Znd(a.B,ZI,'GMonth',true);Znd(a.A,ZI,'GMonthDay',true);Znd(a.C,ZI,'GYear',true);Znd(a.D,ZI,'GYearMonth',true);Znd(a.F,GC(SD,1),'HexBinary',true);Znd(a.G,ZI,'ID',true);Znd(a.H,ZI,'IDREF',true);Znd(a.J,yK,'IDREFS',true);Znd(a.I,yK,'IDREFSBase',true);Znd(a.K,WD,'Int',true);Znd(a.M,cJ,'Integer',true);Znd(a.L,JI,'IntObject',true);Znd(a.P,ZI,'Language',true);Znd(a.Q,XD,'Long',true);Znd(a.R,MI,'LongObject',true);Znd(a.S,ZI,'Name',true);Znd(a.T,ZI,Swe,true);Znd(a.U,cJ,'NegativeInteger',true);Znd(a.V,ZI,axe,true);Znd(a.X,yK,'NMTOKENS',true);Znd(a.W,yK,'NMTOKENSBase',true);Znd(a.Y,cJ,'NonNegativeInteger',true);Znd(a.Z,cJ,'NonPositiveInteger',true);Znd(a.$,ZI,'NormalizedString',true);Znd(a._,ZI,'NOTATION',true);Znd(a.ab,ZI,'PositiveInteger',true);Znd(a.cb,ZI,'QName',true);Znd(a.db,rbb,'Short',true);Znd(a.eb,UI,'ShortObject',true);Znd(a.gb,ZI,Vie,true);Znd(a.hb,ZI,'Time',true);Znd(a.ib,ZI,'Token',true);Znd(a.jb,rbb,'UnsignedByte',true);Znd(a.kb,UI,'UnsignedByteObject',true);Znd(a.lb,XD,'UnsignedInt',true);Znd(a.mb,MI,'UnsignedIntObject',true);Znd(a.nb,cJ,'UnsignedLong',true);Znd(a.ob,WD,'UnsignedShort',true);Znd(a.pb,JI,'UnsignedShortObject',true);Rnd(a,Ewe);_9d(a)} -function Oyc(a){r4c(a,new E3c(Q3c(L3c(P3c(M3c(O3c(N3c(new R3c,sne),'ELK Layered'),'Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.'),new Ryc),sne),qqb((Csd(),Bsd),OC(GC(O3,1),Kie,237,0,[ysd,zsd,xsd,Asd,vsd,usd])))));p4c(a,sne,Lpe,Ksd(iyc));p4c(a,sne,Mpe,Ksd(jyc));p4c(a,sne,Zle,Ksd(kyc));p4c(a,sne,Npe,Ksd(lyc));p4c(a,sne,xme,Ksd(nyc));p4c(a,sne,Ope,Ksd(oyc));p4c(a,sne,Ppe,Ksd(ryc));p4c(a,sne,Qpe,Ksd(tyc));p4c(a,sne,Rpe,Ksd(uyc));p4c(a,sne,Spe,Ksd(syc));p4c(a,sne,wme,Ksd(vyc));p4c(a,sne,Tpe,Ksd(xyc));p4c(a,sne,Upe,Ksd(zyc));p4c(a,sne,Vpe,Ksd(qyc));p4c(a,sne,Loe,Ksd(hyc));p4c(a,sne,Noe,Ksd(myc));p4c(a,sne,Moe,Ksd(pyc));p4c(a,sne,Ooe,Ksd(wyc));p4c(a,sne,vme,meb(0));p4c(a,sne,Poe,Ksd(cyc));p4c(a,sne,Qoe,Ksd(dyc));p4c(a,sne,Roe,Ksd(eyc));p4c(a,sne,Yoe,Ksd(Kyc));p4c(a,sne,Zoe,Ksd(Cyc));p4c(a,sne,$oe,Ksd(Dyc));p4c(a,sne,_oe,Ksd(Gyc));p4c(a,sne,ape,Ksd(Eyc));p4c(a,sne,bpe,Ksd(Fyc));p4c(a,sne,cpe,Ksd(Myc));p4c(a,sne,dpe,Ksd(Lyc));p4c(a,sne,epe,Ksd(Iyc));p4c(a,sne,fpe,Ksd(Hyc));p4c(a,sne,gpe,Ksd(Jyc));p4c(a,sne,Eoe,Ksd(Cxc));p4c(a,sne,Foe,Ksd(Dxc));p4c(a,sne,Ioe,Ksd(Xwc));p4c(a,sne,Joe,Ksd(Ywc));p4c(a,sne,ame,Lxc);p4c(a,sne,ype,Twc);p4c(a,sne,Wpe,0);p4c(a,sne,yme,meb(1));p4c(a,sne,_le,tme);p4c(a,sne,Xpe,Ksd(Jxc));p4c(a,sne,Bme,Ksd(Vxc));p4c(a,sne,Ype,Ksd($xc));p4c(a,sne,Zpe,Ksd(Kwc));p4c(a,sne,$pe,Ksd(mwc));p4c(a,sne,tpe,Ksd(axc));p4c(a,sne,zme,(Bcb(),true));p4c(a,sne,_pe,Ksd(fxc));p4c(a,sne,aqe,Ksd(gxc));p4c(a,sne,Fme,Ksd(Fxc));p4c(a,sne,Eme,Ksd(Ixc));p4c(a,sne,bqe,Ksd(Gxc));p4c(a,sne,cqe,Nwc);p4c(a,sne,Gme,Ksd(xxc));p4c(a,sne,dqe,Ksd(wxc));p4c(a,sne,Hme,Ksd(Yxc));p4c(a,sne,eqe,Ksd(Xxc));p4c(a,sne,fqe,Ksd(Zxc));p4c(a,sne,gqe,Oxc);p4c(a,sne,hqe,Ksd(Qxc));p4c(a,sne,iqe,Ksd(Rxc));p4c(a,sne,jqe,Ksd(Sxc));p4c(a,sne,kqe,Ksd(Pxc));p4c(a,sne,eoe,Ksd(Byc));p4c(a,sne,hoe,Ksd(sxc));p4c(a,sne,noe,Ksd(rxc));p4c(a,sne,doe,Ksd(Ayc));p4c(a,sne,ioe,Ksd(mxc));p4c(a,sne,goe,Ksd(Jwc));p4c(a,sne,qoe,Ksd(Iwc));p4c(a,sne,roe,Ksd(Awc));p4c(a,sne,woe,Ksd(Bwc));p4c(a,sne,xoe,Ksd(Dwc));p4c(a,sne,yoe,Ksd(Cwc));p4c(a,sne,toe,Ksd(Hwc));p4c(a,sne,_ne,Ksd(uxc));p4c(a,sne,aoe,Ksd(vxc));p4c(a,sne,$ne,Ksd(ixc));p4c(a,sne,zoe,Ksd(Exc));p4c(a,sne,Coe,Ksd(zxc));p4c(a,sne,Zne,Ksd($wc));p4c(a,sne,Doe,Ksd(Bxc));p4c(a,sne,Goe,Ksd(Vwc));p4c(a,sne,Hoe,Ksd(Wwc));p4c(a,sne,lqe,Ksd(zwc));p4c(a,sne,Boe,Ksd(yxc));p4c(a,sne,Toe,Ksd(swc));p4c(a,sne,Uoe,Ksd(rwc));p4c(a,sne,Soe,Ksd(qwc));p4c(a,sne,Voe,Ksd(cxc));p4c(a,sne,Woe,Ksd(bxc));p4c(a,sne,Xoe,Ksd(dxc));p4c(a,sne,Tme,Ksd(Hxc));p4c(a,sne,mqe,Ksd(jxc));p4c(a,sne,$le,Ksd(Zwc));p4c(a,sne,nqe,Ksd(Qwc));p4c(a,sne,Cme,Ksd(Pwc));p4c(a,sne,soe,Ksd(Ewc));p4c(a,sne,oqe,Ksd(Wxc));p4c(a,sne,pqe,Ksd(pwc));p4c(a,sne,qqe,Ksd(exc));p4c(a,sne,rqe,Ksd(Txc));p4c(a,sne,sqe,Ksd(Mxc));p4c(a,sne,tqe,Ksd(Nxc));p4c(a,sne,loe,Ksd(oxc));p4c(a,sne,moe,Ksd(pxc));p4c(a,sne,uqe,Ksd(ayc));p4c(a,sne,boe,Ksd(nwc));p4c(a,sne,ooe,Ksd(qxc));p4c(a,sne,hpe,Ksd(Rwc));p4c(a,sne,ipe,Ksd(Owc));p4c(a,sne,vqe,Ksd(txc));p4c(a,sne,poe,Ksd(kxc));p4c(a,sne,Aoe,Ksd(Axc));p4c(a,sne,wqe,Ksd(yyc));p4c(a,sne,Yne,Ksd(Mwc));p4c(a,sne,coe,Ksd(_xc));p4c(a,sne,Koe,Ksd(Uwc));p4c(a,sne,joe,Ksd(lxc));p4c(a,sne,uoe,Ksd(Fwc));p4c(a,sne,xqe,Ksd(hxc));p4c(a,sne,koe,Ksd(nxc));p4c(a,sne,voe,Ksd(Gwc));p4c(a,sne,jpe,Ksd(ywc));p4c(a,sne,mpe,Ksd(wwc));p4c(a,sne,npe,Ksd(uwc));p4c(a,sne,ope,Ksd(vwc));p4c(a,sne,kpe,Ksd(xwc));p4c(a,sne,lpe,Ksd(twc));p4c(a,sne,foe,Ksd(_wc))} -function kee(a,b){var c,d;if(!cee){cee=new Lqb;dee=new Lqb;d=(wfe(),wfe(),++vfe,new $fe(4));Ree(d,'\t\n\r\r ');Shb(cee,pxe,d);Shb(dee,pxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,sxe);Shb(cee,nxe,d);Shb(dee,nxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,sxe);Shb(cee,nxe,d);Shb(dee,nxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,txe);Xfe(d,BD(Phb(cee,nxe),117));Shb(cee,oxe,d);Shb(dee,oxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,'-.0:AZ__az\xB7\xB7\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u02D0\u02D1\u0300\u0345\u0360\u0361\u0386\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\u0483\u0486\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05A1\u05A3\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0640\u0652\u0660\u0669\u0670\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06E8\u06EA\u06ED\u06F0\u06F9\u0901\u0903\u0905\u0939\u093C\u094D\u0951\u0954\u0958\u0963\u0966\u096F\u0981\u0983\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BC\u09BE\u09C4\u09C7\u09C8\u09CB\u09CD\u09D7\u09D7\u09DC\u09DD\u09DF\u09E3\u09E6\u09F1\u0A02\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A3E\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A66\u0A74\u0A81\u0A83\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0AC5\u0AC7\u0AC9\u0ACB\u0ACD\u0AE0\u0AE0\u0AE6\u0AEF\u0B01\u0B03\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3C\u0B43\u0B47\u0B48\u0B4B\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F\u0B61\u0B66\u0B6F\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0BBE\u0BC2\u0BC6\u0BC8\u0BCA\u0BCD\u0BD7\u0BD7\u0BE7\u0BEF\u0C01\u0C03\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C44\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C66\u0C6F\u0C82\u0C83\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBE\u0CC4\u0CC6\u0CC8\u0CCA\u0CCD\u0CD5\u0CD6\u0CDE\u0CDE\u0CE0\u0CE1\u0CE6\u0CEF\u0D02\u0D03\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D3E\u0D43\u0D46\u0D48\u0D4A\u0D4D\u0D57\u0D57\u0D60\u0D61\u0D66\u0D6F\u0E01\u0E2E\u0E30\u0E3A\u0E40\u0E4E\u0E50\u0E59\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\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0ED0\u0ED9\u0F18\u0F19\u0F20\u0F29\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F3E\u0F47\u0F49\u0F69\u0F71\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD\u0FB1\u0FB7\u0FB9\u0FB9\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\u20D0\u20DC\u20E1\u20E1\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302F\u3031\u3035\u3041\u3094\u3099\u309A\u309D\u309E\u30A1\u30FA\u30FC\u30FE\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3');Shb(cee,qxe,d);Shb(dee,qxe,_fe(d));d=(null,++vfe,new $fe(4));Ree(d,txe);Ufe(d,95,95);Ufe(d,58,58);Shb(cee,rxe,d);Shb(dee,rxe,_fe(d))}c=b?BD(Phb(cee,a),136):BD(Phb(dee,a),136);return c} -function _9d(a){Bnd(a.a,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anySimpleType']));Bnd(a.b,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anyType',Sve,Qve]));Bnd(BD(qud(ZKd(a.b),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,fue,':mixed']));Bnd(BD(qud(ZKd(a.b),1),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,Dwe,Fwe,fue,':1',Owe,'lax']));Bnd(BD(qud(ZKd(a.b),2),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,vwe,Dwe,Fwe,fue,':2',Owe,'lax']));Bnd(a.c,Rve,OC(GC(ZI,1),nie,2,6,[fue,'anyURI',Cwe,ywe]));Bnd(a.d,Rve,OC(GC(ZI,1),nie,2,6,[fue,'base64Binary',Cwe,ywe]));Bnd(a.e,Rve,OC(GC(ZI,1),nie,2,6,[fue,Khe,Cwe,ywe]));Bnd(a.f,Rve,OC(GC(ZI,1),nie,2,6,[fue,'boolean:Object',cwe,Khe]));Bnd(a.g,Rve,OC(GC(ZI,1),nie,2,6,[fue,Eve]));Bnd(a.i,Rve,OC(GC(ZI,1),nie,2,6,[fue,'byte:Object',cwe,Eve]));Bnd(a.j,Rve,OC(GC(ZI,1),nie,2,6,[fue,'date',Cwe,ywe]));Bnd(a.k,Rve,OC(GC(ZI,1),nie,2,6,[fue,'dateTime',Cwe,ywe]));Bnd(a.n,Rve,OC(GC(ZI,1),nie,2,6,[fue,'decimal',Cwe,ywe]));Bnd(a.o,Rve,OC(GC(ZI,1),nie,2,6,[fue,Gve,Cwe,ywe]));Bnd(a.p,Rve,OC(GC(ZI,1),nie,2,6,[fue,'double:Object',cwe,Gve]));Bnd(a.q,Rve,OC(GC(ZI,1),nie,2,6,[fue,'duration',Cwe,ywe]));Bnd(a.s,Rve,OC(GC(ZI,1),nie,2,6,[fue,'ENTITIES',cwe,Pwe,Qwe,'1']));Bnd(a.r,Rve,OC(GC(ZI,1),nie,2,6,[fue,Pwe,zwe,Rwe]));Bnd(a.t,Rve,OC(GC(ZI,1),nie,2,6,[fue,Rwe,cwe,Swe]));Bnd(a.u,Rve,OC(GC(ZI,1),nie,2,6,[fue,Hve,Cwe,ywe]));Bnd(a.v,Rve,OC(GC(ZI,1),nie,2,6,[fue,'float:Object',cwe,Hve]));Bnd(a.w,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gDay',Cwe,ywe]));Bnd(a.B,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gMonth',Cwe,ywe]));Bnd(a.A,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gMonthDay',Cwe,ywe]));Bnd(a.C,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gYear',Cwe,ywe]));Bnd(a.D,Rve,OC(GC(ZI,1),nie,2,6,[fue,'gYearMonth',Cwe,ywe]));Bnd(a.F,Rve,OC(GC(ZI,1),nie,2,6,[fue,'hexBinary',Cwe,ywe]));Bnd(a.G,Rve,OC(GC(ZI,1),nie,2,6,[fue,'ID',cwe,Swe]));Bnd(a.H,Rve,OC(GC(ZI,1),nie,2,6,[fue,'IDREF',cwe,Swe]));Bnd(a.J,Rve,OC(GC(ZI,1),nie,2,6,[fue,'IDREFS',cwe,Twe,Qwe,'1']));Bnd(a.I,Rve,OC(GC(ZI,1),nie,2,6,[fue,Twe,zwe,'IDREF']));Bnd(a.K,Rve,OC(GC(ZI,1),nie,2,6,[fue,Ive]));Bnd(a.M,Rve,OC(GC(ZI,1),nie,2,6,[fue,Uwe]));Bnd(a.L,Rve,OC(GC(ZI,1),nie,2,6,[fue,'int:Object',cwe,Ive]));Bnd(a.P,Rve,OC(GC(ZI,1),nie,2,6,[fue,'language',cwe,Vwe,Wwe,Xwe]));Bnd(a.Q,Rve,OC(GC(ZI,1),nie,2,6,[fue,Jve]));Bnd(a.R,Rve,OC(GC(ZI,1),nie,2,6,[fue,'long:Object',cwe,Jve]));Bnd(a.S,Rve,OC(GC(ZI,1),nie,2,6,[fue,'Name',cwe,Vwe,Wwe,Ywe]));Bnd(a.T,Rve,OC(GC(ZI,1),nie,2,6,[fue,Swe,cwe,'Name',Wwe,Zwe]));Bnd(a.U,Rve,OC(GC(ZI,1),nie,2,6,[fue,'negativeInteger',cwe,$we,_we,'-1']));Bnd(a.V,Rve,OC(GC(ZI,1),nie,2,6,[fue,axe,cwe,Vwe,Wwe,'\\c+']));Bnd(a.X,Rve,OC(GC(ZI,1),nie,2,6,[fue,'NMTOKENS',cwe,bxe,Qwe,'1']));Bnd(a.W,Rve,OC(GC(ZI,1),nie,2,6,[fue,bxe,zwe,axe]));Bnd(a.Y,Rve,OC(GC(ZI,1),nie,2,6,[fue,cxe,cwe,Uwe,dxe,'0']));Bnd(a.Z,Rve,OC(GC(ZI,1),nie,2,6,[fue,$we,cwe,Uwe,_we,'0']));Bnd(a.$,Rve,OC(GC(ZI,1),nie,2,6,[fue,exe,cwe,Mhe,Cwe,'replace']));Bnd(a._,Rve,OC(GC(ZI,1),nie,2,6,[fue,'NOTATION',Cwe,ywe]));Bnd(a.ab,Rve,OC(GC(ZI,1),nie,2,6,[fue,'positiveInteger',cwe,cxe,dxe,'1']));Bnd(a.bb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'processingInstruction_._type',Sve,'empty']));Bnd(BD(qud(ZKd(a.bb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'data']));Bnd(BD(qud(ZKd(a.bb),1),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,bue]));Bnd(a.cb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'QName',Cwe,ywe]));Bnd(a.db,Rve,OC(GC(ZI,1),nie,2,6,[fue,Kve]));Bnd(a.eb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'short:Object',cwe,Kve]));Bnd(a.fb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'simpleAnyType',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[fue,':3',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),1),34),Rve,OC(GC(ZI,1),nie,2,6,[fue,':4',Sve,twe]));Bnd(BD(qud(ZKd(a.fb),2),18),Rve,OC(GC(ZI,1),nie,2,6,[fue,':5',Sve,twe]));Bnd(a.gb,Rve,OC(GC(ZI,1),nie,2,6,[fue,Mhe,Cwe,'preserve']));Bnd(a.hb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'time',Cwe,ywe]));Bnd(a.ib,Rve,OC(GC(ZI,1),nie,2,6,[fue,Vwe,cwe,exe,Cwe,ywe]));Bnd(a.jb,Rve,OC(GC(ZI,1),nie,2,6,[fue,fxe,_we,'255',dxe,'0']));Bnd(a.kb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedByte:Object',cwe,fxe]));Bnd(a.lb,Rve,OC(GC(ZI,1),nie,2,6,[fue,gxe,_we,'4294967295',dxe,'0']));Bnd(a.mb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedInt:Object',cwe,gxe]));Bnd(a.nb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedLong',cwe,cxe,_we,hxe,dxe,'0']));Bnd(a.ob,Rve,OC(GC(ZI,1),nie,2,6,[fue,ixe,_we,'65535',dxe,'0']));Bnd(a.pb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'unsignedShort:Object',cwe,ixe]));Bnd(a.qb,Rve,OC(GC(ZI,1),nie,2,6,[fue,'',Sve,Qve]));Bnd(BD(qud(ZKd(a.qb),0),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,xwe,fue,':mixed']));Bnd(BD(qud(ZKd(a.qb),1),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'xmlns:prefix']));Bnd(BD(qud(ZKd(a.qb),2),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,uwe,fue,'xsi:schemaLocation']));Bnd(BD(qud(ZKd(a.qb),3),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,'cDATA',Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),4),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,'comment',Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),5),18),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,jxe,Awe,Bwe]));Bnd(BD(qud(ZKd(a.qb),6),34),Rve,OC(GC(ZI,1),nie,2,6,[Sve,wwe,fue,Ite,Awe,Bwe]))} -function tvd(a){return dfb('_UI_EMFDiagnostic_marker',a)?'EMF Problem':dfb('_UI_CircularContainment_diagnostic',a)?'An object may not circularly contain itself':dfb(sue,a)?'Wrong character.':dfb(tue,a)?'Invalid reference number.':dfb(uue,a)?'A character is required after \\.':dfb(vue,a)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":dfb(wue,a)?"'(?<' or '(?<!' is expected.":dfb(xue,a)?'A comment is not terminated.':dfb(yue,a)?"')' is expected.":dfb(zue,a)?'Unexpected end of the pattern in a modifier group.':dfb(Aue,a)?"':' is expected.":dfb(Bue,a)?'Unexpected end of the pattern in a conditional group.':dfb(Cue,a)?'A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.':dfb(Due,a)?'There are more than three choices in a conditional group.':dfb(Eue,a)?'A character in U+0040-U+005f must follow \\c.':dfb(Fue,a)?"A '{' is required before a character category.":dfb(Gue,a)?"A property name is not closed by '}'.":dfb(Hue,a)?'Unexpected meta character.':dfb(Iue,a)?'Unknown property.':dfb(Jue,a)?"A POSIX character class must be closed by ':]'.":dfb(Kue,a)?'Unexpected end of the pattern in a character class.':dfb(Lue,a)?'Unknown name for a POSIX character class.':dfb('parser.cc.4',a)?"'-' is invalid here.":dfb(Mue,a)?"']' is expected.":dfb(Nue,a)?"'[' is invalid in a character class. Write '\\['.":dfb(Oue,a)?"']' is invalid in a character class. Write '\\]'.":dfb(Pue,a)?"'-' is an invalid character range. Write '\\-'.":dfb(Que,a)?"'[' is expected.":dfb(Rue,a)?"')' or '-[' or '+[' or '&[' is expected.":dfb(Sue,a)?'The range end code point is less than the start code point.':dfb(Tue,a)?'Invalid Unicode hex notation.':dfb(Uue,a)?'Overflow in a hex notation.':dfb(Vue,a)?"'\\x{' must be closed by '}'.":dfb(Wue,a)?'Invalid Unicode code point.':dfb(Xue,a)?'An anchor must not be here.':dfb(Yue,a)?'This expression is not supported in the current option setting.':dfb(Zue,a)?'Invalid quantifier. A digit is expected.':dfb($ue,a)?"Invalid quantifier. Invalid quantity or a '}' is missing.":dfb(_ue,a)?"Invalid quantifier. A digit or '}' is expected.":dfb(ave,a)?'Invalid quantifier. A min quantity must be <= a max quantity.':dfb(bve,a)?'Invalid quantifier. A quantity value overflow.':dfb('_UI_PackageRegistry_extensionpoint',a)?'Ecore Package Registry for Generated Packages':dfb('_UI_DynamicPackageRegistry_extensionpoint',a)?'Ecore Package Registry for Dynamic Packages':dfb('_UI_FactoryRegistry_extensionpoint',a)?'Ecore Factory Override Registry':dfb('_UI_URIExtensionParserRegistry_extensionpoint',a)?'URI Extension Parser Registry':dfb('_UI_URIProtocolParserRegistry_extensionpoint',a)?'URI Protocol Parser Registry':dfb('_UI_URIContentParserRegistry_extensionpoint',a)?'URI Content Parser Registry':dfb('_UI_ContentHandlerRegistry_extensionpoint',a)?'Content Handler Registry':dfb('_UI_URIMappingRegistry_extensionpoint',a)?'URI Converter Mapping Registry':dfb('_UI_PackageRegistryImplementation_extensionpoint',a)?'Ecore Package Registry Implementation':dfb('_UI_ValidationDelegateRegistry_extensionpoint',a)?'Validation Delegate Registry':dfb('_UI_SettingDelegateRegistry_extensionpoint',a)?'Feature Setting Delegate Factory Registry':dfb('_UI_InvocationDelegateRegistry_extensionpoint',a)?'Operation Invocation Delegate Factory Registry':dfb('_UI_EClassInterfaceNotAbstract_diagnostic',a)?'A class that is an interface must also be abstract':dfb('_UI_EClassNoCircularSuperTypes_diagnostic',a)?'A class may not be a super type of itself':dfb('_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic',a)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":dfb('_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic',a)?'The opposite of the opposite may not be a reference different from this one':dfb('_UI_EReferenceOppositeNotFeatureOfType_diagnostic',a)?"The opposite must be a feature of the reference's type":dfb('_UI_EReferenceTransientOppositeNotTransient_diagnostic',a)?'The opposite of a transient reference must be transient if it is proxy resolving':dfb('_UI_EReferenceOppositeBothContainment_diagnostic',a)?'The opposite of a containment reference must not be a containment reference':dfb('_UI_EReferenceConsistentUnique_diagnostic',a)?'A containment or bidirectional reference must be unique if its upper bound is different from 1':dfb('_UI_ETypedElementNoType_diagnostic',a)?'The typed element must have a type':dfb('_UI_EAttributeNoDataType_diagnostic',a)?'The generic attribute type must not refer to a class':dfb('_UI_EReferenceNoClass_diagnostic',a)?'The generic reference type must not refer to a data type':dfb('_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic',a)?"A generic type can't refer to both a type parameter and a classifier":dfb('_UI_EGenericTypeNoClass_diagnostic',a)?'A generic super type must refer to a class':dfb('_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic',a)?'A generic type in this context must refer to a classifier or a type parameter':dfb('_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic',a)?'A generic type may have bounds only when used as a type argument':dfb('_UI_EGenericTypeNoUpperAndLowerBound_diagnostic',a)?'A generic type must not have both a lower and an upper bound':dfb('_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic',a)?'A generic type with bounds must not also refer to a type parameter or classifier':dfb('_UI_EGenericTypeNoArguments_diagnostic',a)?'A generic type may have arguments only if it refers to a classifier':dfb('_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic',a)?'A generic type may only refer to a type parameter that is in scope':a} -function Aod(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(a.r)return;a.r=true;pnd(a,'graph');cod(a,'graph');dod(a,yte);Gnd(a.o,'T');wtd(_Kd(a.a),a.p);wtd(_Kd(a.f),a.a);wtd(_Kd(a.n),a.f);wtd(_Kd(a.g),a.n);wtd(_Kd(a.c),a.n);wtd(_Kd(a.i),a.c);wtd(_Kd(a.j),a.c);wtd(_Kd(a.d),a.f);wtd(_Kd(a.e),a.a);Xnd(a.p,P3,Ile,true,true,false);o=Dnd(a.p,a.p,'setProperty');p=Hnd(o);j=Nnd(a.o);k=(c=(d=new UQd,d),c);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);l=Ond(p);PQd(k,l);Fnd(o,j,Ate);j=Ond(p);Fnd(o,j,Bte);o=Dnd(a.p,null,'getProperty');p=Hnd(o);j=Nnd(a.o);k=Ond(p);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Fnd(o,j,Ate);j=Ond(p);n=xId(o,j,null);!!n&&n.Fi();o=Dnd(a.p,a.wb.e,'hasProperty');j=Nnd(a.o);k=(e=(f=new UQd,f),e);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Fnd(o,j,Ate);o=Dnd(a.p,a.p,'copyProperties');End(o,a.p,Cte);o=Dnd(a.p,null,'getAllProperties');j=Nnd(a.wb.P);k=Nnd(a.o);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);l=(g=(h=new UQd,h),g);wtd((!k.d&&(k.d=new xMd(j5,k,1)),k.d),l);k=Nnd(a.wb.M);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);m=xId(o,j,null);!!m&&m.Fi();Xnd(a.a,x2,Xse,true,false,true);_nd(BD(qud(ZKd(a.a),0),18),a.k,null,Dte,0,-1,x2,false,false,true,true,false,false,false);Xnd(a.f,C2,Zse,true,false,true);_nd(BD(qud(ZKd(a.f),0),18),a.g,BD(qud(ZKd(a.g),0),18),'labels',0,-1,C2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.f),1),34),a.wb._,Ete,null,0,1,C2,false,false,true,false,true,false);Xnd(a.n,G2,'ElkShape',true,false,true);Vnd(BD(qud(ZKd(a.n),0),34),a.wb.t,Fte,$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),1),34),a.wb.t,Gte,$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),2),34),a.wb.t,'x',$je,1,1,G2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.n),3),34),a.wb.t,'y',$je,1,1,G2,false,false,true,false,true,false);o=Dnd(a.n,null,'setDimensions');End(o,a.wb.t,Gte);End(o,a.wb.t,Fte);o=Dnd(a.n,null,'setLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.g,D2,dte,false,false,true);_nd(BD(qud(ZKd(a.g),0),18),a.f,BD(qud(ZKd(a.f),0),18),Hte,0,1,D2,false,false,true,false,false,false,false);Vnd(BD(qud(ZKd(a.g),1),34),a.wb._,Ite,'',0,1,D2,false,false,true,false,true,false);Xnd(a.c,z2,$se,true,false,true);_nd(BD(qud(ZKd(a.c),0),18),a.d,BD(qud(ZKd(a.d),1),18),'outgoingEdges',0,-1,z2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.c),1),18),a.d,BD(qud(ZKd(a.d),2),18),'incomingEdges',0,-1,z2,false,false,true,false,true,false,false);Xnd(a.i,E2,ete,false,false,true);_nd(BD(qud(ZKd(a.i),0),18),a.j,BD(qud(ZKd(a.j),0),18),'ports',0,-1,E2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.i),1),18),a.i,BD(qud(ZKd(a.i),2),18),Jte,0,-1,E2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.i),2),18),a.i,BD(qud(ZKd(a.i),1),18),Hte,0,1,E2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.i),3),18),a.d,BD(qud(ZKd(a.d),0),18),'containedEdges',0,-1,E2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.i),4),34),a.wb.e,Kte,null,0,1,E2,true,true,false,false,true,true);Xnd(a.j,F2,fte,false,false,true);_nd(BD(qud(ZKd(a.j),0),18),a.i,BD(qud(ZKd(a.i),0),18),Hte,0,1,F2,false,false,true,false,false,false,false);Xnd(a.d,B2,_se,false,false,true);_nd(BD(qud(ZKd(a.d),0),18),a.i,BD(qud(ZKd(a.i),3),18),'containingNode',0,1,B2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.d),1),18),a.c,BD(qud(ZKd(a.c),0),18),Lte,0,-1,B2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.d),2),18),a.c,BD(qud(ZKd(a.c),1),18),Mte,0,-1,B2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.d),3),18),a.e,BD(qud(ZKd(a.e),5),18),Nte,0,-1,B2,false,false,true,true,false,false,false);Vnd(BD(qud(ZKd(a.d),4),34),a.wb.e,'hyperedge',null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),5),34),a.wb.e,Kte,null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),6),34),a.wb.e,'selfloop',null,0,1,B2,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.d),7),34),a.wb.e,'connected',null,0,1,B2,true,true,false,false,true,true);Xnd(a.b,y2,Yse,false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.wb.t,'x',$je,1,1,y2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.b),1),34),a.wb.t,'y',$je,1,1,y2,false,false,true,false,true,false);o=Dnd(a.b,null,'set');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.e,A2,ate,false,false,true);Vnd(BD(qud(ZKd(a.e),0),34),a.wb.t,'startX',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),1),34),a.wb.t,'startY',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),2),34),a.wb.t,'endX',null,0,1,A2,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.e),3),34),a.wb.t,'endY',null,0,1,A2,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.e),4),18),a.b,null,Ote,0,-1,A2,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.e),5),18),a.d,BD(qud(ZKd(a.d),3),18),Hte,0,1,A2,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.e),6),18),a.c,null,Pte,0,1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),7),18),a.c,null,Qte,0,1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),8),18),a.e,BD(qud(ZKd(a.e),9),18),Rte,0,-1,A2,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.e),9),18),a.e,BD(qud(ZKd(a.e),8),18),Ste,0,-1,A2,false,false,true,false,true,false,false);Vnd(BD(qud(ZKd(a.e),10),34),a.wb._,Ete,null,0,1,A2,false,false,true,false,true,false);o=Dnd(a.e,null,'setStartLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');o=Dnd(a.e,null,'setEndLocation');End(o,a.wb.t,'x');End(o,a.wb.t,'y');Xnd(a.k,CK,'ElkPropertyToValueMapEntry',false,false,false);j=Nnd(a.o);k=(i=(b=new UQd,b),i);wtd((!j.d&&(j.d=new xMd(j5,j,1)),j.d),k);Wnd(BD(qud(ZKd(a.k),0),34),j,'key',CK,false,false,true,false);Vnd(BD(qud(ZKd(a.k),1),34),a.s,Bte,null,0,1,CK,false,false,true,false,true,false);Znd(a.o,Q3,'IProperty',true);Znd(a.s,SI,'PropertyValue',true);Rnd(a,yte)} -function lde(){lde=ccb;kde=KC(SD,wte,25,Tje,15,1);kde[9]=35;kde[10]=19;kde[13]=19;kde[32]=51;kde[33]=49;kde[34]=33;ylb(kde,35,38,49);kde[38]=1;ylb(kde,39,45,49);ylb(kde,45,47,-71);kde[47]=49;ylb(kde,48,58,-71);kde[58]=61;kde[59]=49;kde[60]=1;kde[61]=49;kde[62]=33;ylb(kde,63,65,49);ylb(kde,65,91,-3);ylb(kde,91,93,33);kde[93]=1;kde[94]=33;kde[95]=-3;kde[96]=33;ylb(kde,97,123,-3);ylb(kde,123,183,33);kde[183]=-87;ylb(kde,184,192,33);ylb(kde,192,215,-19);kde[215]=33;ylb(kde,216,247,-19);kde[247]=33;ylb(kde,248,306,-19);ylb(kde,306,308,33);ylb(kde,308,319,-19);ylb(kde,319,321,33);ylb(kde,321,329,-19);kde[329]=33;ylb(kde,330,383,-19);kde[383]=33;ylb(kde,384,452,-19);ylb(kde,452,461,33);ylb(kde,461,497,-19);ylb(kde,497,500,33);ylb(kde,500,502,-19);ylb(kde,502,506,33);ylb(kde,506,536,-19);ylb(kde,536,592,33);ylb(kde,592,681,-19);ylb(kde,681,699,33);ylb(kde,699,706,-19);ylb(kde,706,720,33);ylb(kde,720,722,-87);ylb(kde,722,768,33);ylb(kde,768,838,-87);ylb(kde,838,864,33);ylb(kde,864,866,-87);ylb(kde,866,902,33);kde[902]=-19;kde[903]=-87;ylb(kde,904,907,-19);kde[907]=33;kde[908]=-19;kde[909]=33;ylb(kde,910,930,-19);kde[930]=33;ylb(kde,931,975,-19);kde[975]=33;ylb(kde,976,983,-19);ylb(kde,983,986,33);kde[986]=-19;kde[987]=33;kde[988]=-19;kde[989]=33;kde[990]=-19;kde[991]=33;kde[992]=-19;kde[993]=33;ylb(kde,994,1012,-19);ylb(kde,1012,1025,33);ylb(kde,1025,1037,-19);kde[1037]=33;ylb(kde,1038,1104,-19);kde[1104]=33;ylb(kde,1105,1117,-19);kde[1117]=33;ylb(kde,1118,1154,-19);kde[1154]=33;ylb(kde,1155,1159,-87);ylb(kde,1159,1168,33);ylb(kde,1168,1221,-19);ylb(kde,1221,1223,33);ylb(kde,1223,1225,-19);ylb(kde,1225,1227,33);ylb(kde,1227,1229,-19);ylb(kde,1229,1232,33);ylb(kde,1232,1260,-19);ylb(kde,1260,1262,33);ylb(kde,1262,1270,-19);ylb(kde,1270,1272,33);ylb(kde,1272,1274,-19);ylb(kde,1274,1329,33);ylb(kde,1329,1367,-19);ylb(kde,1367,1369,33);kde[1369]=-19;ylb(kde,1370,1377,33);ylb(kde,1377,1415,-19);ylb(kde,1415,1425,33);ylb(kde,1425,1442,-87);kde[1442]=33;ylb(kde,1443,1466,-87);kde[1466]=33;ylb(kde,1467,1470,-87);kde[1470]=33;kde[1471]=-87;kde[1472]=33;ylb(kde,1473,1475,-87);kde[1475]=33;kde[1476]=-87;ylb(kde,1477,1488,33);ylb(kde,1488,1515,-19);ylb(kde,1515,1520,33);ylb(kde,1520,1523,-19);ylb(kde,1523,1569,33);ylb(kde,1569,1595,-19);ylb(kde,1595,1600,33);kde[1600]=-87;ylb(kde,1601,1611,-19);ylb(kde,1611,1619,-87);ylb(kde,1619,1632,33);ylb(kde,1632,1642,-87);ylb(kde,1642,1648,33);kde[1648]=-87;ylb(kde,1649,1720,-19);ylb(kde,1720,1722,33);ylb(kde,1722,1727,-19);kde[1727]=33;ylb(kde,1728,1743,-19);kde[1743]=33;ylb(kde,1744,1748,-19);kde[1748]=33;kde[1749]=-19;ylb(kde,1750,1765,-87);ylb(kde,1765,1767,-19);ylb(kde,1767,1769,-87);kde[1769]=33;ylb(kde,1770,1774,-87);ylb(kde,1774,1776,33);ylb(kde,1776,1786,-87);ylb(kde,1786,2305,33);ylb(kde,2305,2308,-87);kde[2308]=33;ylb(kde,2309,2362,-19);ylb(kde,2362,2364,33);kde[2364]=-87;kde[2365]=-19;ylb(kde,2366,2382,-87);ylb(kde,2382,2385,33);ylb(kde,2385,2389,-87);ylb(kde,2389,2392,33);ylb(kde,2392,2402,-19);ylb(kde,2402,2404,-87);ylb(kde,2404,2406,33);ylb(kde,2406,2416,-87);ylb(kde,2416,2433,33);ylb(kde,2433,2436,-87);kde[2436]=33;ylb(kde,2437,2445,-19);ylb(kde,2445,2447,33);ylb(kde,2447,2449,-19);ylb(kde,2449,2451,33);ylb(kde,2451,2473,-19);kde[2473]=33;ylb(kde,2474,2481,-19);kde[2481]=33;kde[2482]=-19;ylb(kde,2483,2486,33);ylb(kde,2486,2490,-19);ylb(kde,2490,2492,33);kde[2492]=-87;kde[2493]=33;ylb(kde,2494,2501,-87);ylb(kde,2501,2503,33);ylb(kde,2503,2505,-87);ylb(kde,2505,2507,33);ylb(kde,2507,2510,-87);ylb(kde,2510,2519,33);kde[2519]=-87;ylb(kde,2520,2524,33);ylb(kde,2524,2526,-19);kde[2526]=33;ylb(kde,2527,2530,-19);ylb(kde,2530,2532,-87);ylb(kde,2532,2534,33);ylb(kde,2534,2544,-87);ylb(kde,2544,2546,-19);ylb(kde,2546,2562,33);kde[2562]=-87;ylb(kde,2563,2565,33);ylb(kde,2565,2571,-19);ylb(kde,2571,2575,33);ylb(kde,2575,2577,-19);ylb(kde,2577,2579,33);ylb(kde,2579,2601,-19);kde[2601]=33;ylb(kde,2602,2609,-19);kde[2609]=33;ylb(kde,2610,2612,-19);kde[2612]=33;ylb(kde,2613,2615,-19);kde[2615]=33;ylb(kde,2616,2618,-19);ylb(kde,2618,2620,33);kde[2620]=-87;kde[2621]=33;ylb(kde,2622,2627,-87);ylb(kde,2627,2631,33);ylb(kde,2631,2633,-87);ylb(kde,2633,2635,33);ylb(kde,2635,2638,-87);ylb(kde,2638,2649,33);ylb(kde,2649,2653,-19);kde[2653]=33;kde[2654]=-19;ylb(kde,2655,2662,33);ylb(kde,2662,2674,-87);ylb(kde,2674,2677,-19);ylb(kde,2677,2689,33);ylb(kde,2689,2692,-87);kde[2692]=33;ylb(kde,2693,2700,-19);kde[2700]=33;kde[2701]=-19;kde[2702]=33;ylb(kde,2703,2706,-19);kde[2706]=33;ylb(kde,2707,2729,-19);kde[2729]=33;ylb(kde,2730,2737,-19);kde[2737]=33;ylb(kde,2738,2740,-19);kde[2740]=33;ylb(kde,2741,2746,-19);ylb(kde,2746,2748,33);kde[2748]=-87;kde[2749]=-19;ylb(kde,2750,2758,-87);kde[2758]=33;ylb(kde,2759,2762,-87);kde[2762]=33;ylb(kde,2763,2766,-87);ylb(kde,2766,2784,33);kde[2784]=-19;ylb(kde,2785,2790,33);ylb(kde,2790,2800,-87);ylb(kde,2800,2817,33);ylb(kde,2817,2820,-87);kde[2820]=33;ylb(kde,2821,2829,-19);ylb(kde,2829,2831,33);ylb(kde,2831,2833,-19);ylb(kde,2833,2835,33);ylb(kde,2835,2857,-19);kde[2857]=33;ylb(kde,2858,2865,-19);kde[2865]=33;ylb(kde,2866,2868,-19);ylb(kde,2868,2870,33);ylb(kde,2870,2874,-19);ylb(kde,2874,2876,33);kde[2876]=-87;kde[2877]=-19;ylb(kde,2878,2884,-87);ylb(kde,2884,2887,33);ylb(kde,2887,2889,-87);ylb(kde,2889,2891,33);ylb(kde,2891,2894,-87);ylb(kde,2894,2902,33);ylb(kde,2902,2904,-87);ylb(kde,2904,2908,33);ylb(kde,2908,2910,-19);kde[2910]=33;ylb(kde,2911,2914,-19);ylb(kde,2914,2918,33);ylb(kde,2918,2928,-87);ylb(kde,2928,2946,33);ylb(kde,2946,2948,-87);kde[2948]=33;ylb(kde,2949,2955,-19);ylb(kde,2955,2958,33);ylb(kde,2958,2961,-19);kde[2961]=33;ylb(kde,2962,2966,-19);ylb(kde,2966,2969,33);ylb(kde,2969,2971,-19);kde[2971]=33;kde[2972]=-19;kde[2973]=33;ylb(kde,2974,2976,-19);ylb(kde,2976,2979,33);ylb(kde,2979,2981,-19);ylb(kde,2981,2984,33);ylb(kde,2984,2987,-19);ylb(kde,2987,2990,33);ylb(kde,2990,2998,-19);kde[2998]=33;ylb(kde,2999,3002,-19);ylb(kde,3002,3006,33);ylb(kde,3006,3011,-87);ylb(kde,3011,3014,33);ylb(kde,3014,3017,-87);kde[3017]=33;ylb(kde,3018,3022,-87);ylb(kde,3022,3031,33);kde[3031]=-87;ylb(kde,3032,3047,33);ylb(kde,3047,3056,-87);ylb(kde,3056,3073,33);ylb(kde,3073,3076,-87);kde[3076]=33;ylb(kde,3077,3085,-19);kde[3085]=33;ylb(kde,3086,3089,-19);kde[3089]=33;ylb(kde,3090,3113,-19);kde[3113]=33;ylb(kde,3114,3124,-19);kde[3124]=33;ylb(kde,3125,3130,-19);ylb(kde,3130,3134,33);ylb(kde,3134,3141,-87);kde[3141]=33;ylb(kde,3142,3145,-87);kde[3145]=33;ylb(kde,3146,3150,-87);ylb(kde,3150,3157,33);ylb(kde,3157,3159,-87);ylb(kde,3159,3168,33);ylb(kde,3168,3170,-19);ylb(kde,3170,3174,33);ylb(kde,3174,3184,-87);ylb(kde,3184,3202,33);ylb(kde,3202,3204,-87);kde[3204]=33;ylb(kde,3205,3213,-19);kde[3213]=33;ylb(kde,3214,3217,-19);kde[3217]=33;ylb(kde,3218,3241,-19);kde[3241]=33;ylb(kde,3242,3252,-19);kde[3252]=33;ylb(kde,3253,3258,-19);ylb(kde,3258,3262,33);ylb(kde,3262,3269,-87);kde[3269]=33;ylb(kde,3270,3273,-87);kde[3273]=33;ylb(kde,3274,3278,-87);ylb(kde,3278,3285,33);ylb(kde,3285,3287,-87);ylb(kde,3287,3294,33);kde[3294]=-19;kde[3295]=33;ylb(kde,3296,3298,-19);ylb(kde,3298,3302,33);ylb(kde,3302,3312,-87);ylb(kde,3312,3330,33);ylb(kde,3330,3332,-87);kde[3332]=33;ylb(kde,3333,3341,-19);kde[3341]=33;ylb(kde,3342,3345,-19);kde[3345]=33;ylb(kde,3346,3369,-19);kde[3369]=33;ylb(kde,3370,3386,-19);ylb(kde,3386,3390,33);ylb(kde,3390,3396,-87);ylb(kde,3396,3398,33);ylb(kde,3398,3401,-87);kde[3401]=33;ylb(kde,3402,3406,-87);ylb(kde,3406,3415,33);kde[3415]=-87;ylb(kde,3416,3424,33);ylb(kde,3424,3426,-19);ylb(kde,3426,3430,33);ylb(kde,3430,3440,-87);ylb(kde,3440,3585,33);ylb(kde,3585,3631,-19);kde[3631]=33;kde[3632]=-19;kde[3633]=-87;ylb(kde,3634,3636,-19);ylb(kde,3636,3643,-87);ylb(kde,3643,3648,33);ylb(kde,3648,3654,-19);ylb(kde,3654,3663,-87);kde[3663]=33;ylb(kde,3664,3674,-87);ylb(kde,3674,3713,33);ylb(kde,3713,3715,-19);kde[3715]=33;kde[3716]=-19;ylb(kde,3717,3719,33);ylb(kde,3719,3721,-19);kde[3721]=33;kde[3722]=-19;ylb(kde,3723,3725,33);kde[3725]=-19;ylb(kde,3726,3732,33);ylb(kde,3732,3736,-19);kde[3736]=33;ylb(kde,3737,3744,-19);kde[3744]=33;ylb(kde,3745,3748,-19);kde[3748]=33;kde[3749]=-19;kde[3750]=33;kde[3751]=-19;ylb(kde,3752,3754,33);ylb(kde,3754,3756,-19);kde[3756]=33;ylb(kde,3757,3759,-19);kde[3759]=33;kde[3760]=-19;kde[3761]=-87;ylb(kde,3762,3764,-19);ylb(kde,3764,3770,-87);kde[3770]=33;ylb(kde,3771,3773,-87);kde[3773]=-19;ylb(kde,3774,3776,33);ylb(kde,3776,3781,-19);kde[3781]=33;kde[3782]=-87;kde[3783]=33;ylb(kde,3784,3790,-87);ylb(kde,3790,3792,33);ylb(kde,3792,3802,-87);ylb(kde,3802,3864,33);ylb(kde,3864,3866,-87);ylb(kde,3866,3872,33);ylb(kde,3872,3882,-87);ylb(kde,3882,3893,33);kde[3893]=-87;kde[3894]=33;kde[3895]=-87;kde[3896]=33;kde[3897]=-87;ylb(kde,3898,3902,33);ylb(kde,3902,3904,-87);ylb(kde,3904,3912,-19);kde[3912]=33;ylb(kde,3913,3946,-19);ylb(kde,3946,3953,33);ylb(kde,3953,3973,-87);kde[3973]=33;ylb(kde,3974,3980,-87);ylb(kde,3980,3984,33);ylb(kde,3984,3990,-87);kde[3990]=33;kde[3991]=-87;kde[3992]=33;ylb(kde,3993,4014,-87);ylb(kde,4014,4017,33);ylb(kde,4017,4024,-87);kde[4024]=33;kde[4025]=-87;ylb(kde,4026,4256,33);ylb(kde,4256,4294,-19);ylb(kde,4294,4304,33);ylb(kde,4304,4343,-19);ylb(kde,4343,4352,33);kde[4352]=-19;kde[4353]=33;ylb(kde,4354,4356,-19);kde[4356]=33;ylb(kde,4357,4360,-19);kde[4360]=33;kde[4361]=-19;kde[4362]=33;ylb(kde,4363,4365,-19);kde[4365]=33;ylb(kde,4366,4371,-19);ylb(kde,4371,4412,33);kde[4412]=-19;kde[4413]=33;kde[4414]=-19;kde[4415]=33;kde[4416]=-19;ylb(kde,4417,4428,33);kde[4428]=-19;kde[4429]=33;kde[4430]=-19;kde[4431]=33;kde[4432]=-19;ylb(kde,4433,4436,33);ylb(kde,4436,4438,-19);ylb(kde,4438,4441,33);kde[4441]=-19;ylb(kde,4442,4447,33);ylb(kde,4447,4450,-19);kde[4450]=33;kde[4451]=-19;kde[4452]=33;kde[4453]=-19;kde[4454]=33;kde[4455]=-19;kde[4456]=33;kde[4457]=-19;ylb(kde,4458,4461,33);ylb(kde,4461,4463,-19);ylb(kde,4463,4466,33);ylb(kde,4466,4468,-19);kde[4468]=33;kde[4469]=-19;ylb(kde,4470,4510,33);kde[4510]=-19;ylb(kde,4511,4520,33);kde[4520]=-19;ylb(kde,4521,4523,33);kde[4523]=-19;ylb(kde,4524,4526,33);ylb(kde,4526,4528,-19);ylb(kde,4528,4535,33);ylb(kde,4535,4537,-19);kde[4537]=33;kde[4538]=-19;kde[4539]=33;ylb(kde,4540,4547,-19);ylb(kde,4547,4587,33);kde[4587]=-19;ylb(kde,4588,4592,33);kde[4592]=-19;ylb(kde,4593,4601,33);kde[4601]=-19;ylb(kde,4602,7680,33);ylb(kde,7680,7836,-19);ylb(kde,7836,7840,33);ylb(kde,7840,7930,-19);ylb(kde,7930,7936,33);ylb(kde,7936,7958,-19);ylb(kde,7958,7960,33);ylb(kde,7960,7966,-19);ylb(kde,7966,7968,33);ylb(kde,7968,8006,-19);ylb(kde,8006,8008,33);ylb(kde,8008,8014,-19);ylb(kde,8014,8016,33);ylb(kde,8016,8024,-19);kde[8024]=33;kde[8025]=-19;kde[8026]=33;kde[8027]=-19;kde[8028]=33;kde[8029]=-19;kde[8030]=33;ylb(kde,8031,8062,-19);ylb(kde,8062,8064,33);ylb(kde,8064,8117,-19);kde[8117]=33;ylb(kde,8118,8125,-19);kde[8125]=33;kde[8126]=-19;ylb(kde,8127,8130,33);ylb(kde,8130,8133,-19);kde[8133]=33;ylb(kde,8134,8141,-19);ylb(kde,8141,8144,33);ylb(kde,8144,8148,-19);ylb(kde,8148,8150,33);ylb(kde,8150,8156,-19);ylb(kde,8156,8160,33);ylb(kde,8160,8173,-19);ylb(kde,8173,8178,33);ylb(kde,8178,8181,-19);kde[8181]=33;ylb(kde,8182,8189,-19);ylb(kde,8189,8400,33);ylb(kde,8400,8413,-87);ylb(kde,8413,8417,33);kde[8417]=-87;ylb(kde,8418,8486,33);kde[8486]=-19;ylb(kde,8487,8490,33);ylb(kde,8490,8492,-19);ylb(kde,8492,8494,33);kde[8494]=-19;ylb(kde,8495,8576,33);ylb(kde,8576,8579,-19);ylb(kde,8579,12293,33);kde[12293]=-87;kde[12294]=33;kde[12295]=-19;ylb(kde,12296,12321,33);ylb(kde,12321,12330,-19);ylb(kde,12330,12336,-87);kde[12336]=33;ylb(kde,12337,12342,-87);ylb(kde,12342,12353,33);ylb(kde,12353,12437,-19);ylb(kde,12437,12441,33);ylb(kde,12441,12443,-87);ylb(kde,12443,12445,33);ylb(kde,12445,12447,-87);ylb(kde,12447,12449,33);ylb(kde,12449,12539,-19);kde[12539]=33;ylb(kde,12540,12543,-87);ylb(kde,12543,12549,33);ylb(kde,12549,12589,-19);ylb(kde,12589,19968,33);ylb(kde,19968,40870,-19);ylb(kde,40870,44032,33);ylb(kde,44032,55204,-19);ylb(kde,55204,Uje,33);ylb(kde,57344,65534,33)} -function zZd(a){var b,c,d,e,f,g,h;if(a.hb)return;a.hb=true;pnd(a,'ecore');cod(a,'ecore');dod(a,_ve);Gnd(a.fb,'E');Gnd(a.L,'T');Gnd(a.P,'K');Gnd(a.P,'V');Gnd(a.cb,'E');wtd(_Kd(a.b),a.bb);wtd(_Kd(a.a),a.Q);wtd(_Kd(a.o),a.p);wtd(_Kd(a.p),a.R);wtd(_Kd(a.q),a.p);wtd(_Kd(a.v),a.q);wtd(_Kd(a.w),a.R);wtd(_Kd(a.B),a.Q);wtd(_Kd(a.R),a.Q);wtd(_Kd(a.T),a.eb);wtd(_Kd(a.U),a.R);wtd(_Kd(a.V),a.eb);wtd(_Kd(a.W),a.bb);wtd(_Kd(a.bb),a.eb);wtd(_Kd(a.eb),a.R);wtd(_Kd(a.db),a.R);Xnd(a.b,b5,qve,false,false,true);Vnd(BD(qud(ZKd(a.b),0),34),a.e,'iD',null,0,1,b5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.b),1),18),a.q,null,'eAttributeType',1,1,b5,true,true,false,false,true,false,true);Xnd(a.a,a5,nve,false,false,true);Vnd(BD(qud(ZKd(a.a),0),34),a._,Cte,null,0,1,a5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.a),1),18),a.ab,null,'details',0,-1,a5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.a),2),18),a.Q,BD(qud(ZKd(a.Q),0),18),'eModelElement',0,1,a5,true,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.a),3),18),a.S,null,'contents',0,-1,a5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.a),4),18),a.S,null,'references',0,-1,a5,false,false,true,false,true,false,false);Xnd(a.o,c5,'EClass',false,false,true);Vnd(BD(qud(ZKd(a.o),0),34),a.e,'abstract',null,0,1,c5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.o),1),34),a.e,'interface',null,0,1,c5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.o),2),18),a.o,null,'eSuperTypes',0,-1,c5,false,false,true,false,true,true,false);_nd(BD(qud(ZKd(a.o),3),18),a.T,BD(qud(ZKd(a.T),0),18),'eOperations',0,-1,c5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.o),4),18),a.b,null,'eAllAttributes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),5),18),a.W,null,'eAllReferences',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),6),18),a.W,null,'eReferences',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),7),18),a.b,null,'eAttributes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),8),18),a.W,null,'eAllContainments',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),9),18),a.T,null,'eAllOperations',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),10),18),a.bb,null,'eAllStructuralFeatures',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),11),18),a.o,null,'eAllSuperTypes',0,-1,c5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.o),12),18),a.b,null,'eIDAttribute',0,1,c5,true,true,false,false,false,false,true);_nd(BD(qud(ZKd(a.o),13),18),a.bb,BD(qud(ZKd(a.bb),7),18),'eStructuralFeatures',0,-1,c5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.o),14),18),a.H,null,'eGenericSuperTypes',0,-1,c5,false,false,true,true,false,true,false);_nd(BD(qud(ZKd(a.o),15),18),a.H,null,'eAllGenericSuperTypes',0,-1,c5,true,true,false,false,true,false,true);h=$nd(BD(qud(WKd(a.o),0),59),a.e,'isSuperTypeOf');End(h,a.o,'someClass');$nd(BD(qud(WKd(a.o),1),59),a.I,'getFeatureCount');h=$nd(BD(qud(WKd(a.o),2),59),a.bb,dwe);End(h,a.I,'featureID');h=$nd(BD(qud(WKd(a.o),3),59),a.I,ewe);End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.o),4),59),a.bb,dwe);End(h,a._,'featureName');$nd(BD(qud(WKd(a.o),5),59),a.I,'getOperationCount');h=$nd(BD(qud(WKd(a.o),6),59),a.T,'getEOperation');End(h,a.I,'operationID');h=$nd(BD(qud(WKd(a.o),7),59),a.I,gwe);End(h,a.T,hwe);h=$nd(BD(qud(WKd(a.o),8),59),a.T,'getOverride');End(h,a.T,hwe);h=$nd(BD(qud(WKd(a.o),9),59),a.H,'getFeatureType');End(h,a.bb,fwe);Xnd(a.p,d5,rve,true,false,true);Vnd(BD(qud(ZKd(a.p),0),34),a._,'instanceClassName',null,0,1,d5,false,true,true,true,true,false);b=Nnd(a.L);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);Wnd(BD(qud(ZKd(a.p),1),34),b,'instanceClass',d5,true,true,false,true);Vnd(BD(qud(ZKd(a.p),2),34),a.M,iwe,null,0,1,d5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.p),3),34),a._,'instanceTypeName',null,0,1,d5,false,true,true,true,true,false);_nd(BD(qud(ZKd(a.p),4),18),a.U,BD(qud(ZKd(a.U),3),18),'ePackage',0,1,d5,true,false,false,false,true,false,false);_nd(BD(qud(ZKd(a.p),5),18),a.db,null,jwe,0,-1,d5,false,false,true,true,true,false,false);h=$nd(BD(qud(WKd(a.p),0),59),a.e,kwe);End(h,a.M,Jhe);$nd(BD(qud(WKd(a.p),1),59),a.I,'getClassifierID');Xnd(a.q,f5,'EDataType',false,false,true);Vnd(BD(qud(ZKd(a.q),0),34),a.e,'serializable',kse,0,1,f5,false,false,true,false,true,false);Xnd(a.v,h5,'EEnum',false,false,true);_nd(BD(qud(ZKd(a.v),0),18),a.w,BD(qud(ZKd(a.w),3),18),'eLiterals',0,-1,h5,false,false,true,true,false,false,false);h=$nd(BD(qud(WKd(a.v),0),59),a.w,lwe);End(h,a._,fue);h=$nd(BD(qud(WKd(a.v),1),59),a.w,lwe);End(h,a.I,Bte);h=$nd(BD(qud(WKd(a.v),2),59),a.w,'getEEnumLiteralByLiteral');End(h,a._,'literal');Xnd(a.w,g5,sve,false,false,true);Vnd(BD(qud(ZKd(a.w),0),34),a.I,Bte,null,0,1,g5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.w),1),34),a.A,'instance',null,0,1,g5,true,false,true,false,true,false);Vnd(BD(qud(ZKd(a.w),2),34),a._,'literal',null,0,1,g5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.w),3),18),a.v,BD(qud(ZKd(a.v),0),18),'eEnum',0,1,g5,true,false,false,false,false,false,false);Xnd(a.B,i5,'EFactory',false,false,true);_nd(BD(qud(ZKd(a.B),0),18),a.U,BD(qud(ZKd(a.U),2),18),'ePackage',1,1,i5,true,false,true,false,false,false,false);h=$nd(BD(qud(WKd(a.B),0),59),a.S,'create');End(h,a.o,'eClass');h=$nd(BD(qud(WKd(a.B),1),59),a.M,'createFromString');End(h,a.q,'eDataType');End(h,a._,'literalValue');h=$nd(BD(qud(WKd(a.B),2),59),a._,'convertToString');End(h,a.q,'eDataType');End(h,a.M,'instanceValue');Xnd(a.Q,k5,bte,true,false,true);_nd(BD(qud(ZKd(a.Q),0),18),a.a,BD(qud(ZKd(a.a),2),18),'eAnnotations',0,-1,k5,false,false,true,true,false,false,false);h=$nd(BD(qud(WKd(a.Q),0),59),a.a,'getEAnnotation');End(h,a._,Cte);Xnd(a.R,l5,cte,true,false,true);Vnd(BD(qud(ZKd(a.R),0),34),a._,fue,null,0,1,l5,false,false,true,false,true,false);Xnd(a.S,m5,'EObject',false,false,true);$nd(BD(qud(WKd(a.S),0),59),a.o,'eClass');$nd(BD(qud(WKd(a.S),1),59),a.e,'eIsProxy');$nd(BD(qud(WKd(a.S),2),59),a.X,'eResource');$nd(BD(qud(WKd(a.S),3),59),a.S,'eContainer');$nd(BD(qud(WKd(a.S),4),59),a.bb,'eContainingFeature');$nd(BD(qud(WKd(a.S),5),59),a.W,'eContainmentFeature');h=$nd(BD(qud(WKd(a.S),6),59),null,'eContents');b=Nnd(a.fb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);e=xId(h,b,null);!!e&&e.Fi();h=$nd(BD(qud(WKd(a.S),7),59),null,'eAllContents');b=Nnd(a.cb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);f=xId(h,b,null);!!f&&f.Fi();h=$nd(BD(qud(WKd(a.S),8),59),null,'eCrossReferences');b=Nnd(a.fb);c=Nnd(a.S);wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);g=xId(h,b,null);!!g&&g.Fi();h=$nd(BD(qud(WKd(a.S),9),59),a.M,'eGet');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),10),59),a.M,'eGet');End(h,a.bb,fwe);End(h,a.e,'resolve');h=$nd(BD(qud(WKd(a.S),11),59),null,'eSet');End(h,a.bb,fwe);End(h,a.M,'newValue');h=$nd(BD(qud(WKd(a.S),12),59),a.e,'eIsSet');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),13),59),null,'eUnset');End(h,a.bb,fwe);h=$nd(BD(qud(WKd(a.S),14),59),a.M,'eInvoke');End(h,a.T,hwe);b=Nnd(a.fb);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);Fnd(h,b,'arguments');Cnd(h,a.K);Xnd(a.T,n5,uve,false,false,true);_nd(BD(qud(ZKd(a.T),0),18),a.o,BD(qud(ZKd(a.o),3),18),mwe,0,1,n5,true,false,false,false,false,false,false);_nd(BD(qud(ZKd(a.T),1),18),a.db,null,jwe,0,-1,n5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.T),2),18),a.V,BD(qud(ZKd(a.V),0),18),'eParameters',0,-1,n5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.T),3),18),a.p,null,'eExceptions',0,-1,n5,false,false,true,false,true,true,false);_nd(BD(qud(ZKd(a.T),4),18),a.H,null,'eGenericExceptions',0,-1,n5,false,false,true,true,false,true,false);$nd(BD(qud(WKd(a.T),0),59),a.I,gwe);h=$nd(BD(qud(WKd(a.T),1),59),a.e,'isOverrideOf');End(h,a.T,'someOperation');Xnd(a.U,o5,'EPackage',false,false,true);Vnd(BD(qud(ZKd(a.U),0),34),a._,'nsURI',null,0,1,o5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.U),1),34),a._,'nsPrefix',null,0,1,o5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.U),2),18),a.B,BD(qud(ZKd(a.B),0),18),'eFactoryInstance',1,1,o5,true,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.U),3),18),a.p,BD(qud(ZKd(a.p),4),18),'eClassifiers',0,-1,o5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.U),4),18),a.U,BD(qud(ZKd(a.U),5),18),'eSubpackages',0,-1,o5,false,false,true,true,true,false,false);_nd(BD(qud(ZKd(a.U),5),18),a.U,BD(qud(ZKd(a.U),4),18),'eSuperPackage',0,1,o5,true,false,false,false,true,false,false);h=$nd(BD(qud(WKd(a.U),0),59),a.p,'getEClassifier');End(h,a._,fue);Xnd(a.V,p5,vve,false,false,true);_nd(BD(qud(ZKd(a.V),0),18),a.T,BD(qud(ZKd(a.T),2),18),'eOperation',0,1,p5,true,false,false,false,false,false,false);Xnd(a.W,q5,wve,false,false,true);Vnd(BD(qud(ZKd(a.W),0),34),a.e,'containment',null,0,1,q5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.W),1),34),a.e,'container',null,0,1,q5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.W),2),34),a.e,'resolveProxies',kse,0,1,q5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.W),3),18),a.W,null,'eOpposite',0,1,q5,false,false,true,false,true,false,false);_nd(BD(qud(ZKd(a.W),4),18),a.o,null,'eReferenceType',1,1,q5,true,true,false,false,true,false,true);_nd(BD(qud(ZKd(a.W),5),18),a.b,null,'eKeys',0,-1,q5,false,false,true,false,true,false,false);Xnd(a.bb,t5,pve,true,false,true);Vnd(BD(qud(ZKd(a.bb),0),34),a.e,'changeable',kse,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),1),34),a.e,'volatile',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),2),34),a.e,'transient',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),3),34),a._,'defaultValueLiteral',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),4),34),a.M,iwe,null,0,1,t5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.bb),5),34),a.e,'unsettable',null,0,1,t5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.bb),6),34),a.e,'derived',null,0,1,t5,false,false,true,false,true,false);_nd(BD(qud(ZKd(a.bb),7),18),a.o,BD(qud(ZKd(a.o),13),18),mwe,0,1,t5,true,false,false,false,false,false,false);$nd(BD(qud(WKd(a.bb),0),59),a.I,ewe);h=$nd(BD(qud(WKd(a.bb),1),59),null,'getContainerClass');b=Nnd(a.L);c=vZd();wtd((!b.d&&(b.d=new xMd(j5,b,1)),b.d),c);d=xId(h,b,null);!!d&&d.Fi();Xnd(a.eb,v5,ove,true,false,true);Vnd(BD(qud(ZKd(a.eb),0),34),a.e,'ordered',kse,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),1),34),a.e,'unique',kse,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),2),34),a.I,'lowerBound',null,0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),3),34),a.I,'upperBound','1',0,1,v5,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.eb),4),34),a.e,'many',null,0,1,v5,true,true,false,false,true,true);Vnd(BD(qud(ZKd(a.eb),5),34),a.e,'required',null,0,1,v5,true,true,false,false,true,true);_nd(BD(qud(ZKd(a.eb),6),18),a.p,null,'eType',0,1,v5,false,true,true,false,true,true,false);_nd(BD(qud(ZKd(a.eb),7),18),a.H,null,'eGenericType',0,1,v5,false,true,true,true,false,true,false);Xnd(a.ab,CK,'EStringToStringMapEntry',false,false,false);Vnd(BD(qud(ZKd(a.ab),0),34),a._,'key',null,0,1,CK,false,false,true,false,true,false);Vnd(BD(qud(ZKd(a.ab),1),34),a._,Bte,null,0,1,CK,false,false,true,false,true,false);Xnd(a.H,j5,tve,false,false,true);_nd(BD(qud(ZKd(a.H),0),18),a.H,null,'eUpperBound',0,1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),1),18),a.H,null,'eTypeArguments',0,-1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),2),18),a.p,null,'eRawType',1,1,j5,true,false,false,false,true,false,true);_nd(BD(qud(ZKd(a.H),3),18),a.H,null,'eLowerBound',0,1,j5,false,false,true,true,false,false,false);_nd(BD(qud(ZKd(a.H),4),18),a.db,null,'eTypeParameter',0,1,j5,false,false,true,false,false,false,false);_nd(BD(qud(ZKd(a.H),5),18),a.p,null,'eClassifier',0,1,j5,false,false,true,false,true,false,false);h=$nd(BD(qud(WKd(a.H),0),59),a.e,kwe);End(h,a.M,Jhe);Xnd(a.db,u5,xve,false,false,true);_nd(BD(qud(ZKd(a.db),0),18),a.H,null,'eBounds',0,-1,u5,false,false,true,true,false,false,false);Znd(a.c,bJ,'EBigDecimal',true);Znd(a.d,cJ,'EBigInteger',true);Znd(a.e,sbb,'EBoolean',true);Znd(a.f,wI,'EBooleanObject',true);Znd(a.i,SD,'EByte',true);Znd(a.g,GC(SD,1),'EByteArray',true);Znd(a.j,xI,'EByteObject',true);Znd(a.k,TD,'EChar',true);Znd(a.n,yI,'ECharacterObject',true);Znd(a.r,$J,'EDate',true);Znd(a.s,O4,'EDiagnosticChain',false);Znd(a.t,UD,'EDouble',true);Znd(a.u,BI,'EDoubleObject',true);Znd(a.fb,T4,'EEList',false);Znd(a.A,U4,'EEnumerator',false);Znd(a.C,O9,'EFeatureMap',false);Znd(a.D,E9,'EFeatureMapEntry',false);Znd(a.F,VD,'EFloat',true);Znd(a.G,FI,'EFloatObject',true);Znd(a.I,WD,'EInt',true);Znd(a.J,JI,'EIntegerObject',true);Znd(a.L,AI,'EJavaClass',true);Znd(a.M,SI,'EJavaObject',true);Znd(a.N,XD,'ELong',true);Znd(a.O,MI,'ELongObject',true);Znd(a.P,DK,'EMap',false);Znd(a.X,v8,'EResource',false);Znd(a.Y,u8,'EResourceSet',false);Znd(a.Z,rbb,'EShort',true);Znd(a.$,UI,'EShortObject',true);Znd(a._,ZI,'EString',true);Znd(a.cb,X4,'ETreeIterator',false);Znd(a.K,V4,'EInvocationTargetException',false);Rnd(a,_ve)} -var Jhe='object',Khe='boolean',Lhe='number',Mhe='string',Nhe='function',Ohe=2147483647,Phe='java.lang',Qhe={3:1},Rhe='com.google.common.base',She=', ',The='%s (%s) must not be negative',Uhe={3:1,4:1,5:1},Vhe='negative size: ',Whe='Optional.of(',Xhe='null',Yhe={198:1,47:1},Zhe='com.google.common.collect',$he={198:1,47:1,125:1},_he={224:1,3:1},aie={47:1},bie='java.util',cie={83:1},die={20:1,28:1,14:1},eie=1965,fie={20:1,28:1,14:1,21:1},gie={83:1,171:1,161:1},hie={20:1,28:1,14:1,21:1,84:1},iie={20:1,28:1,14:1,271:1,21:1,84:1},jie={47:1,125:1},kie={345:1,42:1},lie='AbstractMapEntry',mie='expectedValuesPerKey',nie={3:1,6:1,4:1,5:1},oie=16384,pie={164:1},qie={38:1},rie={l:4194303,m:4194303,h:524287},sie={196:1},tie={245:1,3:1,35:1},uie='range unbounded on this side',vie={20:1},wie={20:1,14:1},xie={3:1,20:1,28:1,14:1},yie={152:1,3:1,20:1,28:1,14:1,15:1,54:1},zie={3:1,4:1,5:1,165:1},Aie={3:1,83:1},Bie={20:1,14:1,21:1},Cie={3:1,20:1,28:1,14:1,21:1},Die={20:1,14:1,21:1,84:1},Eie=461845907,Fie=-862048943,Gie={3:1,6:1,4:1,5:1,165:1},Hie='expectedSize',Iie=1073741824,Jie='initialArraySize',Kie={3:1,6:1,4:1,9:1,5:1},Lie={20:1,28:1,52:1,14:1,15:1},Mie='arraySize',Nie={20:1,28:1,52:1,14:1,15:1,54:1},Oie={45:1},Pie={365:1},Qie=1.0E-4,Rie=-2147483648,Sie='__noinit__',Tie={3:1,102:1,60:1,78:1},Uie='com.google.gwt.core.client.impl',Vie='String',Wie='com.google.gwt.core.client',Xie='anonymous',Yie='fnStack',Zie='Unknown',$ie={195:1,3:1,4:1},_ie=1000,aje=65535,bje='January',cje='February',dje='March',eje='April',fje='May',gje='June',hje='July',ije='August',jje='September',kje='October',lje='November',mje='December',nje=1900,oje={48:1,3:1,4:1},pje='Before Christ',qje='Anno Domini',rje='Sunday',sje='Monday',tje='Tuesday',uje='Wednesday',vje='Thursday',wje='Friday',xje='Saturday',yje='com.google.gwt.i18n.shared',zje='DateTimeFormat',Aje='com.google.gwt.i18n.client',Bje='DefaultDateTimeFormatInfo',Cje={3:1,4:1,35:1,199:1},Dje='com.google.gwt.json.client',Eje=4194303,Fje=1048575,Gje=524288,Hje=4194304,Ije=17592186044416,Jje=1000000000,Kje=-17592186044416,Lje='java.io',Mje={3:1,102:1,73:1,60:1,78:1},Nje={3:1,289:1,78:1},Oje='For input string: "',Pje=Infinity,Qje=-Infinity,Rje=4096,Sje={3:1,4:1,364:1},Tje=65536,Uje=55296,Vje={104:1,3:1,4:1},Wje=100000,Xje=0.3010299956639812,Yje=4294967295,Zje=4294967296,$je='0.0',_je={42:1},ake={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},bke={3:1,20:1,28:1,52:1,14:1,15:1,54:1},cke={20:1,14:1,15:1},dke={3:1,62:1},eke={182:1},fke={3:1,4:1,83:1},gke={3:1,4:1,20:1,28:1,14:1,53:1,21:1},hke='delete',ike=1.4901161193847656E-8,jke=1.1102230246251565E-16,kke=15525485,lke=5.9604644775390625E-8,mke=16777216,nke=16777215,oke=', length: ',pke={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},qke={3:1,35:1,22:1,297:1},rke='java.util.function',ske='java.util.logging',tke={3:1,4:1,5:1,842:1},uke='undefined',vke='java.util.stream',wke={525:1,670:1},xke='fromIndex: ',yke=' > toIndex: ',zke=', toIndex: ',Ake='Index: ',Bke=', Size: ',Cke='org.eclipse.elk.alg.common',Dke={62:1},Eke='org.eclipse.elk.alg.common.compaction',Fke='Scanline/EventHandler',Gke='org.eclipse.elk.alg.common.compaction.oned',Hke='CNode belongs to another CGroup.',Ike='ISpacingsHandler/1',Jke='The ',Kke=' instance has been finished already.',Lke='The direction ',Mke=' is not supported by the CGraph instance.',Nke='OneDimensionalCompactor',Oke='OneDimensionalCompactor/lambda$0$Type',Pke='Quadruplet',Qke='ScanlineConstraintCalculator',Rke='ScanlineConstraintCalculator/ConstraintsScanlineHandler',Ske='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',Tke='ScanlineConstraintCalculator/Timestamp',Uke='ScanlineConstraintCalculator/lambda$0$Type',Vke={169:1,45:1},Wke='org.eclipse.elk.alg.common.compaction.options',Xke='org.eclipse.elk.core.data',Yke='org.eclipse.elk.polyomino.traversalStrategy',Zke='org.eclipse.elk.polyomino.lowLevelSort',$ke='org.eclipse.elk.polyomino.highLevelSort',_ke='org.eclipse.elk.polyomino.fill',ale={130:1},ble='polyomino',cle='org.eclipse.elk.alg.common.networksimplex',dle={177:1,3:1,4:1},ele='org.eclipse.elk.alg.common.nodespacing',fle='org.eclipse.elk.alg.common.nodespacing.cellsystem',gle='CENTER',hle={212:1,326:1},ile={3:1,4:1,5:1,595:1},jle='LEFT',kle='RIGHT',lle='Vertical alignment cannot be null',mle='BOTTOM',nle='org.eclipse.elk.alg.common.nodespacing.internal',ole='UNDEFINED',ple=0.01,qle='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',rle='LabelPlacer/lambda$0$Type',sle='LabelPlacer/lambda$1$Type',tle='portRatioOrPosition',ule='org.eclipse.elk.alg.common.overlaps',vle='DOWN',wle='org.eclipse.elk.alg.common.polyomino',xle='NORTH',yle='EAST',zle='SOUTH',Ale='WEST',Ble='org.eclipse.elk.alg.common.polyomino.structures',Cle='Direction',Dle='Grid is only of size ',Ele='. Requested point (',Fle=') is out of bounds.',Gle=' Given center based coordinates were (',Hle='org.eclipse.elk.graph.properties',Ile='IPropertyHolder',Jle={3:1,94:1,134:1},Kle='org.eclipse.elk.alg.common.spore',Lle='org.eclipse.elk.alg.common.utils',Mle={209:1},Nle='org.eclipse.elk.core',Ole='Connected Components Compaction',Ple='org.eclipse.elk.alg.disco',Qle='org.eclipse.elk.alg.disco.graph',Rle='org.eclipse.elk.alg.disco.options',Sle='CompactionStrategy',Tle='org.eclipse.elk.disco.componentCompaction.strategy',Ule='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',Vle='org.eclipse.elk.disco.debug.discoGraph',Wle='org.eclipse.elk.disco.debug.discoPolys',Xle='componentCompaction',Yle='org.eclipse.elk.disco',Zle='org.eclipse.elk.spacing.componentComponent',$le='org.eclipse.elk.edge.thickness',_le='org.eclipse.elk.aspectRatio',ame='org.eclipse.elk.padding',bme='org.eclipse.elk.alg.disco.transform',cme=1.5707963267948966,dme=1.7976931348623157E308,eme={3:1,4:1,5:1,192:1},fme={3:1,6:1,4:1,5:1,106:1,120:1},gme='org.eclipse.elk.alg.force',hme='ComponentsProcessor',ime='ComponentsProcessor/1',jme='org.eclipse.elk.alg.force.graph',kme='Component Layout',lme='org.eclipse.elk.alg.force.model',mme='org.eclipse.elk.force.model',nme='org.eclipse.elk.force.iterations',ome='org.eclipse.elk.force.repulsivePower',pme='org.eclipse.elk.force.temperature',qme=0.001,rme='org.eclipse.elk.force.repulsion',sme='org.eclipse.elk.alg.force.options',tme=1.600000023841858,ume='org.eclipse.elk.force',vme='org.eclipse.elk.priority',wme='org.eclipse.elk.spacing.nodeNode',xme='org.eclipse.elk.spacing.edgeLabel',yme='org.eclipse.elk.randomSeed',zme='org.eclipse.elk.separateConnectedComponents',Ame='org.eclipse.elk.interactive',Bme='org.eclipse.elk.portConstraints',Cme='org.eclipse.elk.edgeLabels.inline',Dme='org.eclipse.elk.omitNodeMicroLayout',Eme='org.eclipse.elk.nodeSize.options',Fme='org.eclipse.elk.nodeSize.constraints',Gme='org.eclipse.elk.nodeLabels.placement',Hme='org.eclipse.elk.portLabels.placement',Ime='origin',Jme='random',Kme='boundingBox.upLeft',Lme='boundingBox.lowRight',Mme='org.eclipse.elk.stress.fixed',Nme='org.eclipse.elk.stress.desiredEdgeLength',Ome='org.eclipse.elk.stress.dimension',Pme='org.eclipse.elk.stress.epsilon',Qme='org.eclipse.elk.stress.iterationLimit',Rme='org.eclipse.elk.stress',Sme='ELK Stress',Tme='org.eclipse.elk.nodeSize.minimum',Ume='org.eclipse.elk.alg.force.stress',Vme='Layered layout',Wme='org.eclipse.elk.alg.layered',Xme='org.eclipse.elk.alg.layered.compaction.components',Yme='org.eclipse.elk.alg.layered.compaction.oned',Zme='org.eclipse.elk.alg.layered.compaction.oned.algs',$me='org.eclipse.elk.alg.layered.compaction.recthull',_me='org.eclipse.elk.alg.layered.components',ane='NONE',bne={3:1,6:1,4:1,9:1,5:1,122:1},cne={3:1,6:1,4:1,5:1,141:1,106:1,120:1},dne='org.eclipse.elk.alg.layered.compound',ene={51:1},fne='org.eclipse.elk.alg.layered.graph',gne=' -> ',hne='Not supported by LGraph',ine='Port side is undefined',jne={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},kne={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},lne={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},mne='([{"\' \t\r\n',nne=')]}"\' \t\r\n',one='The given string contains parts that cannot be parsed as numbers.',pne='org.eclipse.elk.core.math',qne={3:1,4:1,142:1,207:1,414:1},rne={3:1,4:1,116:1,207:1,414:1},sne='org.eclipse.elk.layered',tne='org.eclipse.elk.alg.layered.graph.transform',une='ElkGraphImporter',vne='ElkGraphImporter/lambda$0$Type',wne='ElkGraphImporter/lambda$1$Type',xne='ElkGraphImporter/lambda$2$Type',yne='ElkGraphImporter/lambda$4$Type',zne='Node margin calculation',Ane='org.eclipse.elk.alg.layered.intermediate',Bne='ONE_SIDED_GREEDY_SWITCH',Cne='TWO_SIDED_GREEDY_SWITCH',Dne='No implementation is available for the layout processor ',Ene='IntermediateProcessorStrategy',Fne="Node '",Gne='FIRST_SEPARATE',Hne='LAST_SEPARATE',Ine='Odd port side processing',Jne='org.eclipse.elk.alg.layered.intermediate.compaction',Kne='org.eclipse.elk.alg.layered.intermediate.greedyswitch',Lne='org.eclipse.elk.alg.layered.p3order.counting',Mne={225:1},Nne='org.eclipse.elk.alg.layered.intermediate.loops',One='org.eclipse.elk.alg.layered.intermediate.loops.ordering',Pne='org.eclipse.elk.alg.layered.intermediate.loops.routing',Qne='org.eclipse.elk.alg.layered.intermediate.preserveorder',Rne='org.eclipse.elk.alg.layered.intermediate.wrapping',Sne='org.eclipse.elk.alg.layered.options',Tne='INTERACTIVE',Une='DEPTH_FIRST',Vne='EDGE_LENGTH',Wne='SELF_LOOPS',Xne='firstTryWithInitialOrder',Yne='org.eclipse.elk.layered.directionCongruency',Zne='org.eclipse.elk.layered.feedbackEdges',$ne='org.eclipse.elk.layered.interactiveReferencePoint',_ne='org.eclipse.elk.layered.mergeEdges',aoe='org.eclipse.elk.layered.mergeHierarchyEdges',boe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',coe='org.eclipse.elk.layered.portSortingStrategy',doe='org.eclipse.elk.layered.thoroughness',eoe='org.eclipse.elk.layered.unnecessaryBendpoints',foe='org.eclipse.elk.layered.generatePositionAndLayerIds',goe='org.eclipse.elk.layered.cycleBreaking.strategy',hoe='org.eclipse.elk.layered.layering.strategy',ioe='org.eclipse.elk.layered.layering.layerConstraint',joe='org.eclipse.elk.layered.layering.layerChoiceConstraint',koe='org.eclipse.elk.layered.layering.layerId',loe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',moe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',noe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ooe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',poe='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',qoe='org.eclipse.elk.layered.crossingMinimization.strategy',roe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',soe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',toe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',uoe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',voe='org.eclipse.elk.layered.crossingMinimization.positionId',woe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',xoe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',yoe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',zoe='org.eclipse.elk.layered.nodePlacement.strategy',Aoe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',Boe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',Coe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',Doe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',Eoe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',Foe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',Goe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',Hoe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',Ioe='org.eclipse.elk.layered.edgeRouting.splines.mode',Joe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',Koe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',Loe='org.eclipse.elk.layered.spacing.baseValue',Moe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',Noe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',Ooe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',Poe='org.eclipse.elk.layered.priority.direction',Qoe='org.eclipse.elk.layered.priority.shortness',Roe='org.eclipse.elk.layered.priority.straightness',Soe='org.eclipse.elk.layered.compaction.connectedComponents',Toe='org.eclipse.elk.layered.compaction.postCompaction.strategy',Uoe='org.eclipse.elk.layered.compaction.postCompaction.constraints',Voe='org.eclipse.elk.layered.highDegreeNodes.treatment',Woe='org.eclipse.elk.layered.highDegreeNodes.threshold',Xoe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',Yoe='org.eclipse.elk.layered.wrapping.strategy',Zoe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',$oe='org.eclipse.elk.layered.wrapping.correctionFactor',_oe='org.eclipse.elk.layered.wrapping.cutting.strategy',ape='org.eclipse.elk.layered.wrapping.cutting.cuts',bpe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',cpe='org.eclipse.elk.layered.wrapping.validify.strategy',dpe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',epe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',fpe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',gpe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',hpe='org.eclipse.elk.layered.edgeLabels.sideSelection',ipe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',jpe='org.eclipse.elk.layered.considerModelOrder.strategy',kpe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',lpe='org.eclipse.elk.layered.considerModelOrder.components',mpe='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',npe='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',ope='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',ppe='layering',qpe='layering.minWidth',rpe='layering.nodePromotion',spe='crossingMinimization',tpe='org.eclipse.elk.hierarchyHandling',upe='crossingMinimization.greedySwitch',vpe='nodePlacement',wpe='nodePlacement.bk',xpe='edgeRouting',ype='org.eclipse.elk.edgeRouting',zpe='spacing',Ape='priority',Bpe='compaction',Cpe='compaction.postCompaction',Dpe='Specifies whether and how post-process compaction is applied.',Epe='highDegreeNodes',Fpe='wrapping',Gpe='wrapping.cutting',Hpe='wrapping.validify',Ipe='wrapping.multiEdge',Jpe='edgeLabels',Kpe='considerModelOrder',Lpe='org.eclipse.elk.spacing.commentComment',Mpe='org.eclipse.elk.spacing.commentNode',Npe='org.eclipse.elk.spacing.edgeEdge',Ope='org.eclipse.elk.spacing.edgeNode',Ppe='org.eclipse.elk.spacing.labelLabel',Qpe='org.eclipse.elk.spacing.labelPortHorizontal',Rpe='org.eclipse.elk.spacing.labelPortVertical',Spe='org.eclipse.elk.spacing.labelNode',Tpe='org.eclipse.elk.spacing.nodeSelfLoop',Upe='org.eclipse.elk.spacing.portPort',Vpe='org.eclipse.elk.spacing.individual',Wpe='org.eclipse.elk.port.borderOffset',Xpe='org.eclipse.elk.noLayout',Ype='org.eclipse.elk.port.side',Zpe='org.eclipse.elk.debugMode',$pe='org.eclipse.elk.alignment',_pe='org.eclipse.elk.insideSelfLoops.activate',aqe='org.eclipse.elk.insideSelfLoops.yo',bqe='org.eclipse.elk.nodeSize.fixedGraphSize',cqe='org.eclipse.elk.direction',dqe='org.eclipse.elk.nodeLabels.padding',eqe='org.eclipse.elk.portLabels.nextToPortIfPossible',fqe='org.eclipse.elk.portLabels.treatAsGroup',gqe='org.eclipse.elk.portAlignment.default',hqe='org.eclipse.elk.portAlignment.north',iqe='org.eclipse.elk.portAlignment.south',jqe='org.eclipse.elk.portAlignment.west',kqe='org.eclipse.elk.portAlignment.east',lqe='org.eclipse.elk.contentAlignment',mqe='org.eclipse.elk.junctionPoints',nqe='org.eclipse.elk.edgeLabels.placement',oqe='org.eclipse.elk.port.index',pqe='org.eclipse.elk.commentBox',qqe='org.eclipse.elk.hypernode',rqe='org.eclipse.elk.port.anchor',sqe='org.eclipse.elk.partitioning.activate',tqe='org.eclipse.elk.partitioning.partition',uqe='org.eclipse.elk.position',vqe='org.eclipse.elk.margins',wqe='org.eclipse.elk.spacing.portsSurrounding',xqe='org.eclipse.elk.interactiveLayout',yqe='org.eclipse.elk.core.util',zqe={3:1,4:1,5:1,593:1},Aqe='NETWORK_SIMPLEX',Bqe={123:1,51:1},Cqe='org.eclipse.elk.alg.layered.p1cycles',Dqe='org.eclipse.elk.alg.layered.p2layers',Eqe={402:1,225:1},Fqe={832:1,3:1,4:1},Gqe='org.eclipse.elk.alg.layered.p3order',Hqe='org.eclipse.elk.alg.layered.p4nodes',Iqe={3:1,4:1,5:1,840:1},Jqe=1.0E-5,Kqe='org.eclipse.elk.alg.layered.p4nodes.bk',Lqe='org.eclipse.elk.alg.layered.p5edges',Mqe='org.eclipse.elk.alg.layered.p5edges.orthogonal',Nqe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',Oqe=1.0E-6,Pqe='org.eclipse.elk.alg.layered.p5edges.splines',Qqe=0.09999999999999998,Rqe=1.0E-8,Sqe=4.71238898038469,Tqe=3.141592653589793,Uqe='org.eclipse.elk.alg.mrtree',Vqe='org.eclipse.elk.alg.mrtree.graph',Wqe='org.eclipse.elk.alg.mrtree.intermediate',Xqe='Set neighbors in level',Yqe='DESCENDANTS',Zqe='org.eclipse.elk.mrtree.weighting',$qe='org.eclipse.elk.mrtree.searchOrder',_qe='org.eclipse.elk.alg.mrtree.options',are='org.eclipse.elk.mrtree',bre='org.eclipse.elk.tree',cre='org.eclipse.elk.alg.radial',dre=6.283185307179586,ere=4.9E-324,fre='org.eclipse.elk.alg.radial.intermediate',gre='org.eclipse.elk.alg.radial.intermediate.compaction',hre={3:1,4:1,5:1,106:1},ire='org.eclipse.elk.alg.radial.intermediate.optimization',jre='No implementation is available for the layout option ',kre='org.eclipse.elk.alg.radial.options',lre='org.eclipse.elk.radial.orderId',mre='org.eclipse.elk.radial.radius',nre='org.eclipse.elk.radial.compactor',ore='org.eclipse.elk.radial.compactionStepSize',pre='org.eclipse.elk.radial.sorter',qre='org.eclipse.elk.radial.wedgeCriteria',rre='org.eclipse.elk.radial.optimizationCriteria',sre='org.eclipse.elk.radial',tre='org.eclipse.elk.alg.radial.p1position.wedge',ure='org.eclipse.elk.alg.radial.sorting',vre=5.497787143782138,wre=3.9269908169872414,xre=2.356194490192345,yre='org.eclipse.elk.alg.rectpacking',zre='org.eclipse.elk.alg.rectpacking.firstiteration',Are='org.eclipse.elk.alg.rectpacking.options',Bre='org.eclipse.elk.rectpacking.optimizationGoal',Cre='org.eclipse.elk.rectpacking.lastPlaceShift',Dre='org.eclipse.elk.rectpacking.currentPosition',Ere='org.eclipse.elk.rectpacking.desiredPosition',Fre='org.eclipse.elk.rectpacking.onlyFirstIteration',Gre='org.eclipse.elk.rectpacking.rowCompaction',Hre='org.eclipse.elk.rectpacking.expandToAspectRatio',Ire='org.eclipse.elk.rectpacking.targetWidth',Jre='org.eclipse.elk.expandNodes',Kre='org.eclipse.elk.rectpacking',Lre='org.eclipse.elk.alg.rectpacking.util',Mre='No implementation available for ',Nre='org.eclipse.elk.alg.spore',Ore='org.eclipse.elk.alg.spore.options',Pre='org.eclipse.elk.sporeCompaction',Qre='org.eclipse.elk.underlyingLayoutAlgorithm',Rre='org.eclipse.elk.processingOrder.treeConstruction',Sre='org.eclipse.elk.processingOrder.spanningTreeCostFunction',Tre='org.eclipse.elk.processingOrder.preferredRoot',Ure='org.eclipse.elk.processingOrder.rootSelection',Vre='org.eclipse.elk.structure.structureExtractionStrategy',Wre='org.eclipse.elk.compaction.compactionStrategy',Xre='org.eclipse.elk.compaction.orthogonal',Yre='org.eclipse.elk.overlapRemoval.maxIterations',Zre='org.eclipse.elk.overlapRemoval.runScanline',$re='processingOrder',_re='overlapRemoval',ase='org.eclipse.elk.sporeOverlap',bse='org.eclipse.elk.alg.spore.p1structure',cse='org.eclipse.elk.alg.spore.p2processingorder',dse='org.eclipse.elk.alg.spore.p3execution',ese='Invalid index: ',fse='org.eclipse.elk.core.alg',gse={331:1},hse={288:1},ise='Make sure its type is registered with the ',jse=' utility class.',kse='true',lse='false',mse="Couldn't clone property '",nse=0.05,ose='org.eclipse.elk.core.options',pse=1.2999999523162842,qse='org.eclipse.elk.box',rse='org.eclipse.elk.box.packingMode',sse='org.eclipse.elk.algorithm',tse='org.eclipse.elk.resolvedAlgorithm',use='org.eclipse.elk.bendPoints',vse='org.eclipse.elk.labelManager',wse='org.eclipse.elk.scaleFactor',xse='org.eclipse.elk.animate',yse='org.eclipse.elk.animTimeFactor',zse='org.eclipse.elk.layoutAncestors',Ase='org.eclipse.elk.maxAnimTime',Bse='org.eclipse.elk.minAnimTime',Cse='org.eclipse.elk.progressBar',Dse='org.eclipse.elk.validateGraph',Ese='org.eclipse.elk.validateOptions',Fse='org.eclipse.elk.zoomToFit',Gse='org.eclipse.elk.font.name',Hse='org.eclipse.elk.font.size',Ise='org.eclipse.elk.edge.type',Jse='partitioning',Kse='nodeLabels',Lse='portAlignment',Mse='nodeSize',Nse='port',Ose='portLabels',Pse='insideSelfLoops',Qse='org.eclipse.elk.fixed',Rse='org.eclipse.elk.random',Sse='port must have a parent node to calculate the port side',Tse='The edge needs to have exactly one edge section. Found: ',Use='org.eclipse.elk.core.util.adapters',Vse='org.eclipse.emf.ecore',Wse='org.eclipse.elk.graph',Xse='EMapPropertyHolder',Yse='ElkBendPoint',Zse='ElkGraphElement',$se='ElkConnectableShape',_se='ElkEdge',ate='ElkEdgeSection',bte='EModelElement',cte='ENamedElement',dte='ElkLabel',ete='ElkNode',fte='ElkPort',gte={92:1,90:1},hte='org.eclipse.emf.common.notify.impl',ite="The feature '",jte="' is not a valid changeable feature",kte='Expecting null',lte="' is not a valid feature",mte='The feature ID',nte=' is not a valid feature ID',ote=32768,pte={105:1,92:1,90:1,56:1,49:1,97:1},qte='org.eclipse.emf.ecore.impl',rte='org.eclipse.elk.graph.impl',ste='Recursive containment not allowed for ',tte="The datatype '",ute="' is not a valid classifier",vte="The value '",wte={190:1,3:1,4:1},xte="The class '",yte='http://www.eclipse.org/elk/ElkGraph',zte=1024,Ate='property',Bte='value',Cte='source',Dte='properties',Ete='identifier',Fte='height',Gte='width',Hte='parent',Ite='text',Jte='children',Kte='hierarchical',Lte='sources',Mte='targets',Nte='sections',Ote='bendPoints',Pte='outgoingShape',Qte='incomingShape',Rte='outgoingSections',Ste='incomingSections',Tte='org.eclipse.emf.common.util',Ute='Severe implementation error in the Json to ElkGraph importer.',Vte='id',Wte='org.eclipse.elk.graph.json',Xte='Unhandled parameter types: ',Yte='startPoint',Zte="An edge must have at least one source and one target (edge id: '",$te="').",_te='Referenced edge section does not exist: ',aue=" (edge id: '",bue='target',cue='sourcePoint',due='targetPoint',eue='group',fue='name',gue='connectableShape cannot be null',hue='edge cannot be null',iue="Passed edge is not 'simple'.",jue='org.eclipse.elk.graph.util',kue="The 'no duplicates' constraint is violated",lue='targetIndex=',mue=', size=',nue='sourceIndex=',oue={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},pue={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},que='logging',rue='measureExecutionTime',sue='parser.parse.1',tue='parser.parse.2',uue='parser.next.1',vue='parser.next.2',wue='parser.next.3',xue='parser.next.4',yue='parser.factor.1',zue='parser.factor.2',Aue='parser.factor.3',Bue='parser.factor.4',Cue='parser.factor.5',Due='parser.factor.6',Eue='parser.atom.1',Fue='parser.atom.2',Gue='parser.atom.3',Hue='parser.atom.4',Iue='parser.atom.5',Jue='parser.cc.1',Kue='parser.cc.2',Lue='parser.cc.3',Mue='parser.cc.5',Nue='parser.cc.6',Oue='parser.cc.7',Pue='parser.cc.8',Que='parser.ope.1',Rue='parser.ope.2',Sue='parser.ope.3',Tue='parser.descape.1',Uue='parser.descape.2',Vue='parser.descape.3',Wue='parser.descape.4',Xue='parser.descape.5',Yue='parser.process.1',Zue='parser.quantifier.1',$ue='parser.quantifier.2',_ue='parser.quantifier.3',ave='parser.quantifier.4',bve='parser.quantifier.5',cve='org.eclipse.emf.common.notify',dve={415:1,672:1},eve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},fve={366:1,143:1},gve='index=',hve={3:1,4:1,5:1,126:1},ive={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},jve={3:1,6:1,4:1,5:1,192:1},kve={3:1,4:1,5:1,165:1,367:1},lve=';/?:@&=+$,',mve='invalid authority: ',nve='EAnnotation',ove='ETypedElement',pve='EStructuralFeature',qve='EAttribute',rve='EClassifier',sve='EEnumLiteral',tve='EGenericType',uve='EOperation',vve='EParameter',wve='EReference',xve='ETypeParameter',yve='org.eclipse.emf.ecore.util',zve={76:1},Ave={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},Bve='org.eclipse.emf.ecore.util.FeatureMap$Entry',Cve=8192,Dve=2048,Eve='byte',Fve='char',Gve='double',Hve='float',Ive='int',Jve='long',Kve='short',Lve='java.lang.Object',Mve={3:1,4:1,5:1,247:1},Nve={3:1,4:1,5:1,673:1},Ove={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},Pve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},Qve='mixed',Rve='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',Sve='kind',Tve={3:1,4:1,5:1,674:1},Uve={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},Vve={20:1,28:1,52:1,14:1,15:1,58:1,69:1},Wve={47:1,125:1,279:1},Xve={72:1,332:1},Yve="The value of type '",Zve="' must be of type '",$ve=1316,_ve='http://www.eclipse.org/emf/2002/Ecore',awe=-32768,bwe='constraints',cwe='baseType',dwe='getEStructuralFeature',ewe='getFeatureID',fwe='feature',gwe='getOperationID',hwe='operation',iwe='defaultValue',jwe='eTypeParameters',kwe='isInstance',lwe='getEEnumLiteral',mwe='eContainingClass',nwe={55:1},owe={3:1,4:1,5:1,119:1},pwe='org.eclipse.emf.ecore.resource',qwe={92:1,90:1,591:1,1935:1},rwe='org.eclipse.emf.ecore.resource.impl',swe='unspecified',twe='simple',uwe='attribute',vwe='attributeWildcard',wwe='element',xwe='elementWildcard',ywe='collapse',zwe='itemType',Awe='namespace',Bwe='##targetNamespace',Cwe='whiteSpace',Dwe='wildcards',Ewe='http://www.eclipse.org/emf/2003/XMLType',Fwe='##any',Gwe='uninitialized',Hwe='The multiplicity constraint is violated',Iwe='org.eclipse.emf.ecore.xml.type',Jwe='ProcessingInstruction',Kwe='SimpleAnyType',Lwe='XMLTypeDocumentRoot',Mwe='org.eclipse.emf.ecore.xml.type.impl',Nwe='INF',Owe='processing',Pwe='ENTITIES_._base',Qwe='minLength',Rwe='ENTITY',Swe='NCName',Twe='IDREFS_._base',Uwe='integer',Vwe='token',Wwe='pattern',Xwe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',Ywe='\\i\\c*',Zwe='[\\i-[:]][\\c-[:]]*',$we='nonPositiveInteger',_we='maxInclusive',axe='NMTOKEN',bxe='NMTOKENS_._base',cxe='nonNegativeInteger',dxe='minInclusive',exe='normalizedString',fxe='unsignedByte',gxe='unsignedInt',hxe='18446744073709551615',ixe='unsignedShort',jxe='processingInstruction',kxe='org.eclipse.emf.ecore.xml.type.internal',lxe=1114111,mxe='Internal Error: shorthands: \\u',nxe='xml:isDigit',oxe='xml:isWord',pxe='xml:isSpace',qxe='xml:isNameChar',rxe='xml:isInitialNameChar',sxe='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',txe='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',uxe='Private Use',vxe='ASSIGNED',wxe='\x00\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',xxe='UNASSIGNED',yxe={3:1,117:1},zxe='org.eclipse.emf.ecore.xml.type.util',Axe={3:1,4:1,5:1,368:1},Bxe='org.eclipse.xtext.xbase.lib',Cxe='Cannot add elements to a Range',Dxe='Cannot set elements in a Range',Exe='Cannot remove elements from a Range',Fxe='locale',Gxe='default',Hxe='user.agent';var _,_bb,Wbb,tbb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;acb();bcb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.gm};_.Hb=function sb(){return FCb(this)};_.Ib=function ub(){var a;return hdb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var xD,yD,zD;bcb(290,1,{290:1,2026:1},jdb);_.le=function kdb(a){var b;b=new jdb;b.i=4;a>1?(b.c=rdb(this,a-1)):(b.c=this);return b};_.me=function qdb(){fdb(this);return this.b};_.ne=function sdb(){return hdb(this)};_.oe=function udb(){return fdb(this),this.k};_.pe=function wdb(){return (this.i&4)!=0};_.qe=function xdb(){return (this.i&1)!=0};_.Ib=function Adb(){return idb(this)};_.i=0;var edb=1;var SI=mdb(Phe,'Object',1);var AI=mdb(Phe,'Class',290);bcb(1998,1,Qhe);var $D=mdb(Rhe,'Optional',1998);bcb(1170,1998,Qhe,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var YD=mdb(Rhe,'Absent',1170);bcb(628,1,{},Gb);var ZD=mdb(Rhe,'Joiner',628);var _D=odb(Rhe,'Predicate');bcb(582,1,{169:1,582:1,3:1,45:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(JD(a,582)){b=BD(a,582);return At(this.a,b.a)}return false};_.Hb=function _b(){return qmb(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var aE=mdb(Rhe,'Predicates/AndPredicate',582);bcb(408,1998,{408:1,3:1},cc);_.Fb=function dc(a){var b;if(JD(a,408)){b=BD(a,408);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return Whe+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var bE=mdb(Rhe,'Present',408);bcb(198,1,Yhe);_.Nb=function kc(a){Rrb(this,a)};_.Qb=function lc(){jc()};var MH=mdb(Zhe,'UnmodifiableIterator',198);bcb(1978,198,$he);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw vbb(new bgb)};_.Wb=function oc(a){throw vbb(new bgb)};var NH=mdb(Zhe,'UnmodifiableListIterator',1978);bcb(386,1978,$he);_.Ob=function rc(){return this.c<this.d};_.Sb=function sc(){return this.c>0};_.Pb=function tc(){if(this.c>=this.d){throw vbb(new utb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw vbb(new utb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var cE=mdb(Zhe,'AbstractIndexedListIterator',386);bcb(699,198,Yhe);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var dE=mdb(Zhe,'AbstractIterator',699);bcb(1986,1,{224:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return hw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return fcb(this.Zb())};var IE=mdb(Zhe,'AbstractMultimap',1986);bcb(726,1986,_he);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return Yj(this.c.vc().Nc(),new $g,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return mmb(),new lnb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return Yj(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new dg(this,a,b,null)};_.d=0;var DE=mdb(Zhe,'AbstractMapBasedMultimap',726);bcb(1631,726,_he);_.hc=function pd(){return new Skb(this.a)};_.jc=function qd(){return mmb(),mmb(),jmb};_.cc=function sd(a){return BD(Qc(this,a),15)};_.fc=function ud(a){return BD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return hw(this,a)};_.qc=function td(a){return BD(Qc(this,a),15)};_.rc=function vd(a){return BD(Sc(this,a),15)};_.mc=function wd(a){return vmb(BD(a,15))};_.pc=function xd(a,b){return Vc(this,a,BD(b,15),null)};var eE=mdb(Zhe,'AbstractListMultimap',1631);bcb(732,1,aie);_.Nb=function zd(a){Rrb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=BD(this.c.Pb(),42);this.b=a.cd();this.a=BD(a.dd(),14);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();this.a.dc()&&this.c.Qb();--this.d.d};var mE=mdb(Zhe,'AbstractMapBasedMultimap/Itr',732);bcb(1099,732,aie,Dd);_.sc=function Ed(a,b){return b};var fE=mdb(Zhe,'AbstractMapBasedMultimap/1',1099);bcb(1100,1,{},Fd);_.Kb=function Gd(a){return BD(a,14).Nc()};var gE=mdb(Zhe,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1100);bcb(1101,732,aie,Hd);_.sc=function Id(a,b){return new Wo(a,b)};var hE=mdb(Zhe,'AbstractMapBasedMultimap/2',1101);var DK=odb(bie,'Map');bcb(1967,1,cie);_.wc=function Td(a){stb(this,a)};_.yc=function $d(a,b,c){return ttb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=BD(c.Pb(),42);d=b.dd();if(PD(a)===PD(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!JD(a,83)){return false}d=BD(a,83);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=BD(c.Pb(),42);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return pmb(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Pib(this)};_.zc=function _d(a,b){throw vbb(new cgb('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new $ib(this)};var sJ=mdb(bie,'AbstractMap',1967);bcb(1987,1967,cie);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new Zv(this)):a};var bH=mdb(Zhe,'Maps/ViewCachingAbstractMap',1987);bcb(389,1987,cie,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():ir(new mf(this))};_._b=function pe(a){return Gv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return fcb(this.d)};var lE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap',389);var KI=odb(Phe,'Iterable');bcb(28,1,die);_.Jc=function Le(a){reb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Kub(this,0)};_.Oc=function Qe(){return new YAb(null,this.Nc())};_.Fc=function Ge(a){throw vbb(new cgb('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var dJ=mdb(bie,'AbstractCollection',28);var LK=odb(bie,'Set');bcb(eie,28,fie);_.Nc=function Ye(){return new Kub(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return pmb(this)};var zJ=mdb(bie,'AbstractSet',eie);bcb(1970,eie,fie);var BH=mdb(Zhe,'Sets/ImprovedAbstractSet',1970);bcb(1971,1970,fie);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)){b=BD(a,42);return this.Rc().ec().Mc(b.cd())}return false};_.gc=function cf(){return this.Rc().gc()};var WG=mdb(Zhe,'Maps/EntrySet',1971);bcb(1097,1971,fie,df);_.Hc=function ef(a){return Ck(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Ck(this.a.d.vc(),a)){return false}b=BD(a,42);Tc(this.a.e,b.cd());return true};_.Nc=function jf(){return $j(this.a.d.vc().Nc(),new kf(this.a))};var jE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1097);bcb(1098,1,{},kf);_.Kb=function lf(a){return me(this.a,BD(a,42))};var iE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1098);bcb(730,1,aie,mf);_.Nb=function nf(a){Rrb(this,a)};_.Pb=function pf(){var a;return a=BD(this.b.Pb(),42),this.a=BD(a.dd(),14),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var kE=mdb(Zhe,'AbstractMapBasedMultimap/AsMap/AsMapIterator',730);bcb(532,1970,fie,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new Xv(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new Mv(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var $G=mdb(Zhe,'Maps/KeySet',532);bcb(318,532,fie,zf);_.$b=function Af(){var a;ir((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=BD(this.b.Bc(a),14);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var oE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet',318);bcb(731,1,aie,Hf);_.Nb=function If(a){Rrb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=BD(this.c.Pb(),42);return this.a.cd()};_.Qb=function Lf(){var a;Vb(!!this.a);a=BD(this.a.dd(),14);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var nE=mdb(Zhe,'AbstractMapBasedMultimap/KeySet/1',731);bcb(491,389,{83:1,161:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Pf(){return this.Tc()};_.Sc=function Of(){return new Yf(this.c,this.Uc())};_.Tc=function Qf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Uc=function Rf(){return BD(this.d,161)};var sE=mdb(Zhe,'AbstractMapBasedMultimap/SortedAsMap',491);bcb(542,491,gie,Sf);_.bc=function Tf(){return new $f(this.a,BD(BD(this.d,161),171))};_.Sc=function Uf(){return new $f(this.a,BD(BD(this.d,161),171))};_.ec=function Vf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Tc=function Wf(){var a;return a=this.b,BD(!a?(this.b=new $f(this.a,BD(BD(this.d,161),171))):a,271)};_.Uc=function Xf(){return BD(BD(this.d,161),171)};var pE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableAsMap',542);bcb(490,318,hie,Yf);_.Nc=function Zf(){return this.b.ec().Nc()};var tE=mdb(Zhe,'AbstractMapBasedMultimap/SortedKeySet',490);bcb(388,490,iie,$f);var qE=mdb(Zhe,'AbstractMapBasedMultimap/NavigableKeySet',388);bcb(541,28,die,dg);_.Fc=function eg(a){var b,c;ag(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&_f(this)}return b};_.Gc=function fg(a){var b,c,d;if(a.dc()){return false}d=(ag(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&_f(this)}return b};_.$b=function gg(){var a;a=(ag(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;bg(this)};_.Hc=function hg(a){ag(this);return this.d.Hc(a)};_.Ic=function ig(a){ag(this);return this.d.Ic(a)};_.Fb=function jg(a){if(a===this){return true}ag(this);return pb(this.d,a)};_.Hb=function kg(){ag(this);return tb(this.d)};_.Kc=function lg(){ag(this);return new Gg(this)};_.Mc=function mg(a){var b;ag(this);b=this.d.Mc(a);if(b){--this.f.d;bg(this)}return b};_.gc=function ng(){return cg(this)};_.Nc=function og(){return ag(this),this.d.Nc()};_.Ib=function pg(){ag(this);return fcb(this.d)};var vE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection',541);var yK=odb(bie,'List');bcb(728,541,{20:1,28:1,14:1,15:1},qg);_.ad=function zg(a){ktb(this,a)};_.Nc=function Ag(){return ag(this),this.d.Nc()};_.Vc=function rg(a,b){var c;ag(this);c=this.d.dc();BD(this.d,15).Vc(a,b);++this.a.d;c&&_f(this)};_.Wc=function sg(a,b){var c,d,e;if(b.dc()){return false}e=(ag(this),this.d.gc());c=BD(this.d,15).Wc(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&_f(this)}return c};_.Xb=function tg(a){ag(this);return BD(this.d,15).Xb(a)};_.Xc=function ug(a){ag(this);return BD(this.d,15).Xc(a)};_.Yc=function vg(){ag(this);return new Mg(this)};_.Zc=function wg(a){ag(this);return new Ng(this,a)};_.$c=function xg(a){var b;ag(this);b=BD(this.d,15).$c(a);--this.a.d;bg(this);return b};_._c=function yg(a,b){ag(this);return BD(this.d,15)._c(a,b)};_.bd=function Bg(a,b){ag(this);return Vc(this.a,this.e,BD(this.d,15).bd(a,b),!this.b?this:this.b)};var xE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList',728);bcb(1096,728,{20:1,28:1,14:1,15:1,54:1},Cg);var rE=mdb(Zhe,'AbstractMapBasedMultimap/RandomAccessWrappedList',1096);bcb(620,1,aie,Gg);_.Nb=function Ig(a){Rrb(this,a)};_.Ob=function Jg(){Fg(this);return this.b.Ob()};_.Pb=function Kg(){Fg(this);return this.b.Pb()};_.Qb=function Lg(){Eg(this)};var uE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',620);bcb(729,620,jie,Mg,Ng);_.Qb=function Tg(){Eg(this)};_.Rb=function Og(a){var b;b=cg(this.a)==0;(Fg(this),BD(this.b,125)).Rb(a);++this.a.a.d;b&&_f(this.a)};_.Sb=function Pg(){return (Fg(this),BD(this.b,125)).Sb()};_.Tb=function Qg(){return (Fg(this),BD(this.b,125)).Tb()};_.Ub=function Rg(){return (Fg(this),BD(this.b,125)).Ub()};_.Vb=function Sg(){return (Fg(this),BD(this.b,125)).Vb()};_.Wb=function Ug(a){(Fg(this),BD(this.b,125)).Wb(a)};var wE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',729);bcb(727,541,hie,Vg);_.Nc=function Wg(){return ag(this),this.d.Nc()};var AE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSortedSet',727);bcb(1095,727,iie,Xg);var yE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedNavigableSet',1095);bcb(1094,541,fie,Yg);_.Nc=function Zg(){return ag(this),this.d.Nc()};var zE=mdb(Zhe,'AbstractMapBasedMultimap/WrappedSet',1094);bcb(1103,1,{},$g);_.Kb=function _g(a){return fd(BD(a,42))};var BE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$1$Type',1103);bcb(1102,1,{},ah);_.Kb=function bh(a){return new Wo(this.a,a)};var CE=mdb(Zhe,'AbstractMapBasedMultimap/lambda$2$Type',1102);var CK=odb(bie,'Map/Entry');bcb(345,1,kie);_.Fb=function dh(a){var b;if(JD(a,42)){b=BD(a,42);return Hb(this.cd(),b.cd())&&Hb(this.dd(),b.dd())}return false};_.Hb=function eh(){var a,b;a=this.cd();b=this.dd();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.ed=function fh(a){throw vbb(new bgb)};_.Ib=function gh(){return this.cd()+'='+this.dd()};var EE=mdb(Zhe,lie,345);bcb(1988,28,die);_.$b=function hh(){this.fd().$b()};_.Hc=function ih(a){var b;if(JD(a,42)){b=BD(a,42);return Cc(this.fd(),b.cd(),b.dd())}return false};_.Mc=function jh(a){var b;if(JD(a,42)){b=BD(a,42);return Gc(this.fd(),b.cd(),b.dd())}return false};_.gc=function kh(){return this.fd().d};var fH=mdb(Zhe,'Multimaps/Entries',1988);bcb(733,1988,die,lh);_.Kc=function mh(){return this.a.kc()};_.fd=function nh(){return this.a};_.Nc=function oh(){return this.a.lc()};var FE=mdb(Zhe,'AbstractMultimap/Entries',733);bcb(734,733,fie,ph);_.Nc=function sh(){return this.a.lc()};_.Fb=function qh(a){return Ax(this,a)};_.Hb=function rh(){return Bx(this)};var GE=mdb(Zhe,'AbstractMultimap/EntrySet',734);bcb(735,28,die,th);_.$b=function uh(){this.a.$b()};_.Hc=function vh(a){return Dc(this.a,a)};_.Kc=function wh(){return this.a.nc()};_.gc=function xh(){return this.a.d};_.Nc=function yh(){return this.a.oc()};var HE=mdb(Zhe,'AbstractMultimap/Values',735);bcb(1989,28,{835:1,20:1,28:1,14:1});_.Jc=function Gh(a){Qb(a);Ah(this).Jc(new Xw(a))};_.Nc=function Kh(){var a;return a=Ah(this).Nc(),Yj(a,new cx,64|a.qd()&1296,this.a.d)};_.Fc=function Ch(a){zh();return true};_.Gc=function Dh(a){return Qb(this),Qb(a),JD(a,543)?Zw(BD(a,835)):!a.dc()&&fr(this,a.Kc())};_.Hc=function Eh(a){var b;return b=BD(Hv(nd(this.a),a),14),(!b?0:b.gc())>0};_.Fb=function Fh(a){return $w(this,a)};_.Hb=function Hh(){return tb(Ah(this))};_.dc=function Ih(){return Ah(this).dc()};_.Mc=function Jh(a){return Bw(this,a,1)>0};_.Ib=function Lh(){return fcb(Ah(this))};var KE=mdb(Zhe,'AbstractMultiset',1989);bcb(1991,1970,fie);_.$b=function Mh(){Nc(this.a.a)};_.Hc=function Nh(a){var b,c;if(JD(a,492)){c=BD(a,416);if(BD(c.a.dd(),14).gc()<=0){return false}b=Aw(this.a,c.a.cd());return b==BD(c.a.dd(),14).gc()}return false};_.Mc=function Oh(a){var b,c,d,e;if(JD(a,492)){c=BD(a,416);b=c.a.cd();d=BD(c.a.dd(),14).gc();if(d!=0){e=this.a;return ax(e,b,d)}}return false};var pH=mdb(Zhe,'Multisets/EntrySet',1991);bcb(1109,1991,fie,Ph);_.Kc=function Qh(){return new Lw(fe(nd(this.a.a)).Kc())};_.gc=function Rh(){return nd(this.a.a).gc()};var JE=mdb(Zhe,'AbstractMultiset/EntrySet',1109);bcb(619,726,_he);_.hc=function Uh(){return this.gd()};_.jc=function Vh(){return this.hd()};_.cc=function Yh(a){return this.jd(a)};_.fc=function $h(a){return this.kd(a)};_.Zb=function Th(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.hd=function Wh(){return mmb(),mmb(),lmb};_.Fb=function Xh(a){return hw(this,a)};_.jd=function Zh(a){return BD(Qc(this,a),21)};_.kd=function _h(a){return BD(Sc(this,a),21)};_.mc=function ai(a){return mmb(),new zob(BD(a,21))};_.pc=function bi(a,b){return new Yg(this,a,BD(b,21))};var LE=mdb(Zhe,'AbstractSetMultimap',619);bcb(1657,619,_he);_.hc=function ei(){return new Hxb(this.b)};_.gd=function fi(){return new Hxb(this.b)};_.jc=function gi(){return Ix(new Hxb(this.b))};_.hd=function hi(){return Ix(new Hxb(this.b))};_.cc=function ii(a){return BD(BD(Qc(this,a),21),84)};_.jd=function ji(a){return BD(BD(Qc(this,a),21),84)};_.fc=function ki(a){return BD(BD(Sc(this,a),21),84)};_.kd=function li(a){return BD(BD(Sc(this,a),21),84)};_.mc=function mi(a){return JD(a,271)?Ix(BD(a,271)):(mmb(),new Zob(BD(a,84)))};_.Zb=function di(){var a;return a=this.f,!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a};_.pc=function ni(a,b){return JD(b,271)?new Xg(this,a,BD(b,271)):new Vg(this,a,BD(b,84))};var NE=mdb(Zhe,'AbstractSortedSetMultimap',1657);bcb(1658,1657,_he);_.Zb=function pi(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.ec=function ri(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.bc=function qi(){return JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)};var ME=mdb(Zhe,'AbstractSortedKeySortedSetMultimap',1658);bcb(2010,1,{1947:1});_.Fb=function si(a){return zy(this,a)};_.Hb=function ti(){var a;return pmb((a=this.g,!a?(this.g=new vi(this)):a))};_.Ib=function ui(){var a;return Md((a=this.f,!a?(this.f=new Rj(this)):a))};var QE=mdb(Zhe,'AbstractTable',2010);bcb(665,eie,fie,vi);_.$b=function wi(){Pi()};_.Hc=function xi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Ck(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.Kc=function yi(){return Ni(this.a)};_.Mc=function zi(a){var b,c;if(JD(a,468)){b=BD(a,682);c=BD(Hv(Vi(this.a),Em(b.c.e,b.b)),83);return !!c&&Dk(c.vc(),new Wo(Em(b.c.c,b.a),Mi(b.c,b.b,b.a)))}return false};_.gc=function Ai(){return Xi(this.a)};_.Nc=function Bi(){return Oi(this.a)};var OE=mdb(Zhe,'AbstractTable/CellSet',665);bcb(1928,28,die,Ci);_.$b=function Di(){Pi()};_.Hc=function Ei(a){return Qi(this.a,a)};_.Kc=function Fi(){return Zi(this.a)};_.gc=function Gi(){return Xi(this.a)};_.Nc=function Hi(){return $i(this.a)};var PE=mdb(Zhe,'AbstractTable/Values',1928);bcb(1632,1631,_he);var RE=mdb(Zhe,'ArrayListMultimapGwtSerializationDependencies',1632);bcb(513,1632,_he,Ji,Ki);_.hc=function Li(){return new Skb(this.a)};_.a=0;var SE=mdb(Zhe,'ArrayListMultimap',513);bcb(664,2010,{664:1,1947:1,3:1},_i);var cF=mdb(Zhe,'ArrayTable',664);bcb(1924,386,$he,aj);_.Xb=function bj(a){return new hj(this.a,a)};var TE=mdb(Zhe,'ArrayTable/1',1924);bcb(1925,1,{},cj);_.ld=function dj(a){return new hj(this.a,a)};var UE=mdb(Zhe,'ArrayTable/1methodref$getCell$Type',1925);bcb(2011,1,{682:1});_.Fb=function ej(a){var b;if(a===this){return true}if(JD(a,468)){b=BD(a,682);return Hb(Em(this.c.e,this.b),Em(b.c.e,b.b))&&Hb(Em(this.c.c,this.a),Em(b.c.c,b.a))&&Hb(Mi(this.c,this.b,this.a),Mi(b.c,b.b,b.a))}return false};_.Hb=function fj(){return Hlb(OC(GC(SI,1),Uhe,1,5,[Em(this.c.e,this.b),Em(this.c.c,this.a),Mi(this.c,this.b,this.a)]))};_.Ib=function gj(){return '('+Em(this.c.e,this.b)+','+Em(this.c.c,this.a)+')='+Mi(this.c,this.b,this.a)};var JH=mdb(Zhe,'Tables/AbstractCell',2011);bcb(468,2011,{468:1,682:1},hj);_.a=0;_.b=0;_.d=0;var VE=mdb(Zhe,'ArrayTable/2',468);bcb(1927,1,{},ij);_.ld=function jj(a){return Ti(this.a,a)};var WE=mdb(Zhe,'ArrayTable/2methodref$getValue$Type',1927);bcb(1926,386,$he,kj);_.Xb=function lj(a){return Ti(this.a,a)};var XE=mdb(Zhe,'ArrayTable/3',1926);bcb(1979,1967,cie);_.$b=function nj(){ir(this.kc())};_.vc=function oj(){return new Sv(this)};_.lc=function pj(){return new Mub(this.kc(),this.gc())};var YG=mdb(Zhe,'Maps/IteratorBasedAbstractMap',1979);bcb(828,1979,cie);_.$b=function tj(){throw vbb(new bgb)};_._b=function uj(a){return sn(this.c,a)};_.kc=function vj(){return new Jj(this,this.c.b.c.gc())};_.lc=function wj(){return Zj(this.c.b.c.gc(),16,new Dj(this))};_.xc=function xj(a){var b;b=BD(tn(this.c,a),19);return !b?null:this.nd(b.a)};_.dc=function yj(){return this.c.b.c.dc()};_.ec=function zj(){return Xm(this.c)};_.zc=function Aj(a,b){var c;c=BD(tn(this.c,a),19);if(!c){throw vbb(new Wdb(this.md()+' '+a+' not in '+Xm(this.c)))}return this.od(c.a,b)};_.Bc=function Bj(a){throw vbb(new bgb)};_.gc=function Cj(){return this.c.b.c.gc()};var _E=mdb(Zhe,'ArrayTable/ArrayMap',828);bcb(1923,1,{},Dj);_.ld=function Ej(a){return qj(this.a,a)};var YE=mdb(Zhe,'ArrayTable/ArrayMap/0methodref$getEntry$Type',1923);bcb(1921,345,kie,Fj);_.cd=function Gj(){return rj(this.a,this.b)};_.dd=function Hj(){return this.a.nd(this.b)};_.ed=function Ij(a){return this.a.od(this.b,a)};_.b=0;var ZE=mdb(Zhe,'ArrayTable/ArrayMap/1',1921);bcb(1922,386,$he,Jj);_.Xb=function Kj(a){return qj(this.a,a)};var $E=mdb(Zhe,'ArrayTable/ArrayMap/2',1922);bcb(1920,828,cie,Lj);_.md=function Mj(){return 'Column'};_.nd=function Nj(a){return Mi(this.b,this.a,a)};_.od=function Oj(a,b){return Wi(this.b,this.a,a,b)};_.a=0;var bF=mdb(Zhe,'ArrayTable/Row',1920);bcb(829,828,cie,Rj);_.nd=function Tj(a){return new Lj(this.a,a)};_.zc=function Uj(a,b){return BD(b,83),Pj()};_.od=function Vj(a,b){return BD(b,83),Qj()};_.md=function Sj(){return 'Row'};var aF=mdb(Zhe,'ArrayTable/RowMap',829);bcb(1120,1,pie,_j);_.qd=function ak(){return this.a.qd()&-262};_.rd=function bk(){return this.a.rd()};_.Nb=function ck(a){this.a.Nb(new gk(a,this.b))};_.sd=function dk(a){return this.a.sd(new ek(a,this.b))};var lF=mdb(Zhe,'CollectSpliterators/1',1120);bcb(1121,1,qie,ek);_.td=function fk(a){this.a.td(this.b.Kb(a))};var dF=mdb(Zhe,'CollectSpliterators/1/lambda$0$Type',1121);bcb(1122,1,qie,gk);_.td=function hk(a){this.a.td(this.b.Kb(a))};var eF=mdb(Zhe,'CollectSpliterators/1/lambda$1$Type',1122);bcb(1123,1,pie,jk);_.qd=function kk(){return this.a};_.rd=function lk(){!!this.d&&(this.b=Deb(this.b,this.d.rd()));return Deb(this.b,0)};_.Nb=function mk(a){if(this.d){this.d.Nb(a);this.d=null}this.c.Nb(new rk(this.e,a));this.b=0};_.sd=function ok(a){while(true){if(!!this.d&&this.d.sd(a)){Kbb(this.b,rie)&&(this.b=Qbb(this.b,1));return true}else{this.d=null}if(!this.c.sd(new pk(this,this.e))){return false}}};_.a=0;_.b=0;var hF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator',1123);bcb(1124,1,qie,pk);_.td=function qk(a){ik(this.a,this.b,a)};var fF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$0$Type',1124);bcb(1125,1,qie,rk);_.td=function sk(a){nk(this.b,this.a,a)};var gF=mdb(Zhe,'CollectSpliterators/1FlatMapSpliterator/lambda$1$Type',1125);bcb(1117,1,pie,tk);_.qd=function uk(){return 16464|this.b};_.rd=function vk(){return this.a.rd()};_.Nb=function wk(a){this.a.xe(new Ak(a,this.c))};_.sd=function xk(a){return this.a.ye(new yk(a,this.c))};_.b=0;var kF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics',1117);bcb(1118,1,sie,yk);_.ud=function zk(a){this.a.td(this.b.ld(a))};var iF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1118);bcb(1119,1,sie,Ak);_.ud=function Bk(a){this.a.td(this.b.ld(a))};var jF=mdb(Zhe,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1119);bcb(245,1,tie);_.wd=function Hk(a){return this.vd(BD(a,245))};_.vd=function Gk(a){var b;if(a==(_k(),$k)){return 1}if(a==(Lk(),Kk)){return -1}b=(ex(),Fcb(this.a,a.a));if(b!=0){return b}return JD(this,519)==JD(a,519)?0:JD(this,519)?1:-1};_.zd=function Ik(){return this.a};_.Fb=function Jk(a){return Ek(this,a)};var qF=mdb(Zhe,'Cut',245);bcb(1761,245,tie,Mk);_.vd=function Nk(a){return a==this?0:1};_.xd=function Ok(a){throw vbb(new xcb)};_.yd=function Pk(a){a.a+='+\u221E)'};_.zd=function Qk(){throw vbb(new Zdb(uie))};_.Hb=function Rk(){return Zfb(),kCb(this)};_.Ad=function Sk(a){return false};_.Ib=function Tk(){return '+\u221E'};var Kk;var mF=mdb(Zhe,'Cut/AboveAll',1761);bcb(519,245,{245:1,519:1,3:1,35:1},Uk);_.xd=function Vk(a){Pfb((a.a+='(',a),this.a)};_.yd=function Wk(a){Kfb(Pfb(a,this.a),93)};_.Hb=function Xk(){return ~tb(this.a)};_.Ad=function Yk(a){return ex(),Fcb(this.a,a)<0};_.Ib=function Zk(){return '/'+this.a+'\\'};var nF=mdb(Zhe,'Cut/AboveValue',519);bcb(1760,245,tie,al);_.vd=function bl(a){return a==this?0:-1};_.xd=function cl(a){a.a+='(-\u221E'};_.yd=function dl(a){throw vbb(new xcb)};_.zd=function el(){throw vbb(new Zdb(uie))};_.Hb=function fl(){return Zfb(),kCb(this)};_.Ad=function gl(a){return true};_.Ib=function hl(){return '-\u221E'};var $k;var oF=mdb(Zhe,'Cut/BelowAll',1760);bcb(1762,245,tie,il);_.xd=function jl(a){Pfb((a.a+='[',a),this.a)};_.yd=function kl(a){Kfb(Pfb(a,this.a),41)};_.Hb=function ll(){return tb(this.a)};_.Ad=function ml(a){return ex(),Fcb(this.a,a)<=0};_.Ib=function nl(){return '\\'+this.a+'/'};var pF=mdb(Zhe,'Cut/BelowValue',1762);bcb(537,1,vie);_.Jc=function ql(a){reb(this,a)};_.Ib=function rl(){return tr(BD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var uF=mdb(Zhe,'FluentIterable',537);bcb(433,537,vie,sl);_.Kc=function tl(){return new Sr(ur(this.a.Kc(),new Sq))};var rF=mdb(Zhe,'FluentIterable/2',433);bcb(1046,537,vie,vl);_.Kc=function wl(){return ul(this)};var tF=mdb(Zhe,'FluentIterable/3',1046);bcb(708,386,$he,xl);_.Xb=function yl(a){return this.a[a].Kc()};var sF=mdb(Zhe,'FluentIterable/3/1',708);bcb(1972,1,{});_.Ib=function zl(){return fcb(this.Bd().b)};var BF=mdb(Zhe,'ForwardingObject',1972);bcb(1973,1972,wie);_.Bd=function Fl(){return this.Cd()};_.Jc=function Gl(a){reb(this,a)};_.Lc=function Jl(){return this.Oc()};_.Nc=function Ml(){return new Kub(this,0)};_.Oc=function Nl(){return new YAb(null,this.Nc())};_.Fc=function Al(a){return this.Cd(),enb()};_.Gc=function Bl(a){return this.Cd(),fnb()};_.$b=function Cl(){this.Cd(),gnb()};_.Hc=function Dl(a){return this.Cd().Hc(a)};_.Ic=function El(a){return this.Cd().Ic(a)};_.dc=function Hl(){return this.Cd().b.dc()};_.Kc=function Il(){return this.Cd().Kc()};_.Mc=function Kl(a){return this.Cd(),jnb()};_.gc=function Ll(){return this.Cd().b.gc()};_.Pc=function Ol(){return this.Cd().Pc()};_.Qc=function Pl(a){return this.Cd().Qc(a)};var vF=mdb(Zhe,'ForwardingCollection',1973);bcb(1980,28,xie);_.Kc=function Xl(){return this.Ed()};_.Fc=function Sl(a){throw vbb(new bgb)};_.Gc=function Tl(a){throw vbb(new bgb)};_.$b=function Ul(){throw vbb(new bgb)};_.Hc=function Vl(a){return a!=null&&ze(this,a,false)};_.Dd=function Wl(){switch(this.gc()){case 0:return im(),im(),hm;case 1:return im(),new my(Qb(this.Ed().Pb()));default:return new px(this,this.Pc());}};_.Mc=function Yl(a){throw vbb(new bgb)};var WF=mdb(Zhe,'ImmutableCollection',1980);bcb(712,1980,xie,Zl);_.Kc=function cm(){return vr(this.a.Kc())};_.Hc=function $l(a){return a!=null&&this.a.Hc(a)};_.Ic=function _l(a){return this.a.Ic(a)};_.dc=function am(){return this.a.dc()};_.Ed=function bm(){return vr(this.a.Kc())};_.gc=function dm(){return this.a.gc()};_.Pc=function em(){return this.a.Pc()};_.Qc=function fm(a){return this.a.Qc(a)};_.Ib=function gm(){return fcb(this.a)};var wF=mdb(Zhe,'ForwardingImmutableCollection',712);bcb(152,1980,yie);_.Kc=function sm(){return this.Ed()};_.Yc=function tm(){return this.Fd(0)};_.Zc=function vm(a){return this.Fd(a)};_.ad=function zm(a){ktb(this,a)};_.Nc=function Am(){return new Kub(this,16)};_.bd=function Cm(a,b){return this.Gd(a,b)};_.Vc=function lm(a,b){throw vbb(new bgb)};_.Wc=function mm(a,b){throw vbb(new bgb)};_.Fb=function om(a){return Ju(this,a)};_.Hb=function pm(){return Ku(this)};_.Xc=function qm(a){return a==null?-1:Lu(this,a)};_.Ed=function rm(){return this.Fd(0)};_.Fd=function um(a){return jm(this,a)};_.$c=function xm(a){throw vbb(new bgb)};_._c=function ym(a,b){throw vbb(new bgb)};_.Gd=function Bm(a,b){var c;return Dm((c=new $u(this),new Jib(c,a,b)))};var hm;var _F=mdb(Zhe,'ImmutableList',152);bcb(2006,152,yie);_.Kc=function Nm(){return vr(this.Hd().Kc())};_.bd=function Qm(a,b){return Dm(this.Hd().bd(a,b))};_.Hc=function Fm(a){return a!=null&&this.Hd().Hc(a)};_.Ic=function Gm(a){return this.Hd().Ic(a)};_.Fb=function Hm(a){return pb(this.Hd(),a)};_.Xb=function Im(a){return Em(this,a)};_.Hb=function Jm(){return tb(this.Hd())};_.Xc=function Km(a){return this.Hd().Xc(a)};_.dc=function Lm(){return this.Hd().dc()};_.Ed=function Mm(){return vr(this.Hd().Kc())};_.gc=function Om(){return this.Hd().gc()};_.Gd=function Pm(a,b){return Dm(this.Hd().bd(a,b))};_.Pc=function Rm(){return this.Hd().Qc(KC(SI,Uhe,1,this.Hd().gc(),5,1))};_.Qc=function Sm(a){return this.Hd().Qc(a)};_.Ib=function Tm(){return fcb(this.Hd())};var xF=mdb(Zhe,'ForwardingImmutableList',2006);bcb(714,1,Aie);_.vc=function cn(){return Wm(this)};_.wc=function en(a){stb(this,a)};_.ec=function jn(){return Xm(this)};_.yc=function kn(a,b,c){return ttb(this,a,b,c)};_.Cc=function rn(){return this.Ld()};_.$b=function Zm(){throw vbb(new bgb)};_._b=function $m(a){return this.xc(a)!=null};_.uc=function _m(a){return this.Ld().Hc(a)};_.Jd=function an(){return new jq(this)};_.Kd=function bn(){return new sq(this)};_.Fb=function dn(a){return Dv(this,a)};_.Hb=function gn(){return Wm(this).Hb()};_.dc=function hn(){return this.gc()==0};_.zc=function nn(a,b){return Ym()};_.Bc=function on(a){throw vbb(new bgb)};_.Ib=function pn(){return Jv(this)};_.Ld=function qn(){if(this.e){return this.e}return this.e=this.Kd()};_.c=null;_.d=null;_.e=null;var Um;var iG=mdb(Zhe,'ImmutableMap',714);bcb(715,714,Aie);_._b=function vn(a){return sn(this,a)};_.uc=function wn(a){return dob(this.b,a)};_.Id=function xn(){return Vn(new Ln(this))};_.Jd=function yn(){return Vn(gob(this.b))};_.Kd=function zn(){return Ql(),new Zl(hob(this.b))};_.Fb=function An(a){return fob(this.b,a)};_.xc=function Bn(a){return tn(this,a)};_.Hb=function Cn(){return tb(this.b.c)};_.dc=function Dn(){return this.b.c.dc()};_.gc=function En(){return this.b.c.gc()};_.Ib=function Fn(){return fcb(this.b.c)};var zF=mdb(Zhe,'ForwardingImmutableMap',715);bcb(1974,1973,Bie);_.Bd=function Gn(){return this.Md()};_.Cd=function Hn(){return this.Md()};_.Nc=function Kn(){return new Kub(this,1)};_.Fb=function In(a){return a===this||this.Md().Fb(a)};_.Hb=function Jn(){return this.Md().Hb()};var CF=mdb(Zhe,'ForwardingSet',1974);bcb(1069,1974,Bie,Ln);_.Bd=function Nn(){return eob(this.a.b)};_.Cd=function On(){return eob(this.a.b)};_.Hc=function Mn(b){if(JD(b,42)&&BD(b,42).cd()==null){return false}try{return Dob(eob(this.a.b),b)}catch(a){a=ubb(a);if(JD(a,205)){return false}else throw vbb(a)}};_.Md=function Pn(){return eob(this.a.b)};_.Qc=function Qn(a){var b;b=Eob(eob(this.a.b),a);eob(this.a.b).b.gc()<b.length&&NC(b,eob(this.a.b).b.gc(),null);return b};var yF=mdb(Zhe,'ForwardingImmutableMap/1',1069);bcb(1981,1980,Cie);_.Kc=function Tn(){return this.Ed()};_.Nc=function Un(){return new Kub(this,1)};_.Fb=function Rn(a){return Ax(this,a)};_.Hb=function Sn(){return Bx(this)};var jG=mdb(Zhe,'ImmutableSet',1981);bcb(703,1981,Cie);_.Kc=function ao(){return vr(new Dnb(this.a.b.Kc()))};_.Hc=function Xn(a){return a!=null&&hnb(this.a,a)};_.Ic=function Yn(a){return inb(this.a,a)};_.Hb=function Zn(){return tb(this.a.b)};_.dc=function $n(){return this.a.b.dc()};_.Ed=function _n(){return vr(new Dnb(this.a.b.Kc()))};_.gc=function bo(){return this.a.b.gc()};_.Pc=function co(){return this.a.b.Pc()};_.Qc=function eo(a){return knb(this.a,a)};_.Ib=function fo(){return fcb(this.a.b)};var AF=mdb(Zhe,'ForwardingImmutableSet',703);bcb(1975,1974,Die);_.Bd=function go(){return this.b};_.Cd=function ho(){return this.b};_.Md=function io(){return this.b};_.Nc=function jo(){return new Rub(this)};var DF=mdb(Zhe,'ForwardingSortedSet',1975);bcb(533,1979,Aie,wo);_.Ac=function Fo(a){Ld(this,a)};_.Cc=function Io(){var a;return a=this.d,new up(!a?(this.d=new ap(this)):a)};_.$b=function xo(){ko(this)};_._b=function yo(a){return !!uo(this,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))))};_.uc=function zo(a){return lo(this,a)};_.kc=function Ao(){return new Qo(this,this)};_.wc=function Bo(a){no(this,a)};_.xc=function Co(a){return oo(this,a)};_.ec=function Do(){return new Bp(this)};_.zc=function Eo(a,b){return ro(this,a,b)};_.Bc=function Go(a){var b;b=uo(this,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return null}else{mo(this,b);b.e=null;b.c=null;return b.i}};_.gc=function Ho(){return this.i};_.pd=function Jo(){var a;return a=this.d,new up(!a?(this.d=new ap(this)):a)};_.f=0;_.g=0;_.i=0;var QF=mdb(Zhe,'HashBiMap',533);bcb(534,1,aie);_.Nb=function Mo(a){Rrb(this,a)};_.Ob=function No(){return Ko(this)};_.Pb=function Oo(){var a;if(!Ko(this)){throw vbb(new utb)}a=this.c;this.c=a.c;this.f=a;--this.d;return this.Nd(a)};_.Qb=function Po(){if(this.e.g!=this.b){throw vbb(new Apb)}Vb(!!this.f);mo(this.e,this.f);this.b=this.e.g;this.f=null};_.b=0;_.d=0;_.f=null;var NF=mdb(Zhe,'HashBiMap/Itr',534);bcb(1011,534,aie,Qo);_.Nd=function Ro(a){return new So(this,a)};var FF=mdb(Zhe,'HashBiMap/1',1011);bcb(1012,345,kie,So);_.cd=function To(){return this.a.g};_.dd=function Uo(){return this.a.i};_.ed=function Vo(a){var b,c,d;c=this.a.i;d=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));if(d==this.a.f&&(PD(a)===PD(c)||a!=null&&pb(a,c))){return a}Nb(!vo(this.b.a,a,d),a);mo(this.b.a,this.a);b=new $o(this.a.g,this.a.a,a,d);po(this.b.a,b,this.a);this.a.e=null;this.a.c=null;this.b.b=this.b.a.g;this.b.f==this.a&&(this.b.f=b);this.a=b;return c};var EF=mdb(Zhe,'HashBiMap/1/MapEntry',1012);bcb(238,345,{345:1,238:1,3:1,42:1},Wo);_.cd=function Xo(){return this.g};_.dd=function Yo(){return this.i};_.ed=function Zo(a){throw vbb(new bgb)};var XF=mdb(Zhe,'ImmutableEntry',238);bcb(317,238,{345:1,317:1,238:1,3:1,42:1},$o);_.a=0;_.f=0;var GF=mdb(Zhe,'HashBiMap/BiEntry',317);bcb(610,1979,Aie,ap);_.Ac=function jp(a){Ld(this,a)};_.Cc=function mp(){return new Bp(this.a)};_.$b=function bp(){ko(this.a)};_._b=function cp(a){return lo(this.a,a)};_.kc=function dp(){return new op(this,this.a)};_.wc=function ep(a){Qb(a);no(this.a,new zp(a))};_.xc=function fp(a){return _o(this,a)};_.ec=function gp(){return new up(this)};_.zc=function ip(a,b){return so(this.a,a,b,false)};_.Bc=function kp(a){var b;b=vo(this.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return null}else{mo(this.a,b);b.e=null;b.c=null;return b.g}};_.gc=function lp(){return this.a.i};_.pd=function np(){return new Bp(this.a)};var MF=mdb(Zhe,'HashBiMap/Inverse',610);bcb(1008,534,aie,op);_.Nd=function pp(a){return new qp(this,a)};var IF=mdb(Zhe,'HashBiMap/Inverse/1',1008);bcb(1009,345,kie,qp);_.cd=function rp(){return this.a.i};_.dd=function sp(){return this.a.g};_.ed=function tp(a){var b,c,d;d=this.a.g;b=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));if(b==this.a.a&&(PD(a)===PD(d)||a!=null&&pb(a,d))){return a}Nb(!uo(this.b.a.a,a,b),a);mo(this.b.a.a,this.a);c=new $o(a,b,this.a.i,this.a.f);this.a=c;po(this.b.a.a,c,null);this.b.b=this.b.a.a.g;return d};var HF=mdb(Zhe,'HashBiMap/Inverse/1/InverseEntry',1009);bcb(611,532,fie,up);_.Kc=function vp(){return new xp(this.a.a)};_.Mc=function wp(a){var b;b=vo(this.a.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return false}else{mo(this.a.a,b);return true}};var KF=mdb(Zhe,'HashBiMap/Inverse/InverseKeySet',611);bcb(1007,534,aie,xp);_.Nd=function yp(a){return a.i};var JF=mdb(Zhe,'HashBiMap/Inverse/InverseKeySet/1',1007);bcb(1010,1,{},zp);_.Od=function Ap(a,b){hp(this.a,a,b)};var LF=mdb(Zhe,'HashBiMap/Inverse/lambda$0$Type',1010);bcb(609,532,fie,Bp);_.Kc=function Cp(){return new Ep(this.a)};_.Mc=function Dp(a){var b;b=uo(this.a,a,Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15))));if(!b){return false}else{mo(this.a,b);b.e=null;b.c=null;return true}};var PF=mdb(Zhe,'HashBiMap/KeySet',609);bcb(1006,534,aie,Ep);_.Nd=function Fp(a){return a.g};var OF=mdb(Zhe,'HashBiMap/KeySet/1',1006);bcb(1093,619,_he);var RF=mdb(Zhe,'HashMultimapGwtSerializationDependencies',1093);bcb(265,1093,_he,Hp);_.hc=function Ip(){return new Uqb(Cv(this.a))};_.gd=function Jp(){return new Uqb(Cv(this.a))};_.a=2;var SF=mdb(Zhe,'HashMultimap',265);bcb(1999,152,yie);_.Hc=function Mp(a){return this.Pd().Hc(a)};_.dc=function Np(){return this.Pd().dc()};_.gc=function Op(){return this.Pd().gc()};var TF=mdb(Zhe,'ImmutableAsList',1999);bcb(1931,715,Aie);_.Ld=function Qp(){return Ql(),new oy(this.a)};_.Cc=function Rp(){return Ql(),new oy(this.a)};_.pd=function Sp(){return Ql(),new oy(this.a)};var UF=mdb(Zhe,'ImmutableBiMap',1931);bcb(1977,1,{});var VF=mdb(Zhe,'ImmutableCollection/Builder',1977);bcb(1022,703,Cie,Tp);var YF=mdb(Zhe,'ImmutableEnumSet',1022);bcb(969,386,$he,Vp);_.Xb=function Wp(a){return this.a.Xb(a)};var ZF=mdb(Zhe,'ImmutableList/1',969);bcb(968,1977,{},Xp);var $F=mdb(Zhe,'ImmutableList/Builder',968);bcb(614,198,Yhe,Yp);_.Ob=function Zp(){return this.a.Ob()};_.Pb=function $p(){return BD(this.a.Pb(),42).cd()};var aG=mdb(Zhe,'ImmutableMap/1',614);bcb(1041,1,{},_p);_.Kb=function aq(a){return BD(a,42).cd()};var bG=mdb(Zhe,'ImmutableMap/2methodref$getKey$Type',1041);bcb(1040,1,{},cq);var cG=mdb(Zhe,'ImmutableMap/Builder',1040);bcb(2000,1981,Cie);_.Kc=function gq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.Dd=function dq(){return new Fq(this)};_.Jc=function eq(a){var b,c;Qb(a);c=this.gc();for(b=0;b<c;b++){a.td(BD(Rl(Wm(this.a)).Xb(b),42).cd())}};_.Ed=function fq(){var a;return (a=this.c,!a?(this.c=new Fq(this)):a).Ed()};_.Nc=function hq(){return Zj(this.gc(),1296,new Dq(this))};var mG=mdb(Zhe,'IndexedImmutableSet',2000);bcb(1180,2000,Cie,jq);_.Kc=function nq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.Hc=function kq(a){return this.a._b(a)};_.Jc=function lq(a){Qb(a);stb(this.a,new qq(a))};_.Ed=function mq(){var a;return a=Wm(this.a).Ed(),new Yp(a)};_.gc=function oq(){return this.a.gc()};_.Nc=function pq(){return $j(Wm(this.a).Nc(),new _p)};var eG=mdb(Zhe,'ImmutableMapKeySet',1180);bcb(1181,1,{},qq);_.Od=function rq(a,b){Ql();this.a.td(a)};var dG=mdb(Zhe,'ImmutableMapKeySet/lambda$0$Type',1181);bcb(1178,1980,xie,sq);_.Kc=function vq(){return new Aq(this)};_.Hc=function tq(a){return a!=null&&jr(new Aq(this),a)};_.Ed=function uq(){return new Aq(this)};_.gc=function wq(){return this.a.gc()};_.Nc=function xq(){return $j(Wm(this.a).Nc(),new yq)};var hG=mdb(Zhe,'ImmutableMapValues',1178);bcb(1179,1,{},yq);_.Kb=function zq(a){return BD(a,42).dd()};var fG=mdb(Zhe,'ImmutableMapValues/0methodref$getValue$Type',1179);bcb(626,198,Yhe,Aq);_.Ob=function Bq(){return this.a.Ob()};_.Pb=function Cq(){return BD(this.a.Pb(),42).dd()};var gG=mdb(Zhe,'ImmutableMapValues/1',626);bcb(1182,1,{},Dq);_.ld=function Eq(a){return iq(this.a,a)};var kG=mdb(Zhe,'IndexedImmutableSet/0methodref$get$Type',1182);bcb(752,1999,yie,Fq);_.Pd=function Gq(){return this.a};_.Xb=function Hq(a){return iq(this.a,a)};_.gc=function Iq(){return this.a.a.gc()};var lG=mdb(Zhe,'IndexedImmutableSet/1',752);bcb(44,1,{},Sq);_.Kb=function Tq(a){return BD(a,20).Kc()};_.Fb=function Uq(a){return this===a};var nG=mdb(Zhe,'Iterables/10',44);bcb(1042,537,vie,Wq);_.Jc=function Xq(a){Qb(a);this.b.Jc(new $q(this.a,a))};_.Kc=function Yq(){return Vq(this)};var pG=mdb(Zhe,'Iterables/4',1042);bcb(1043,1,qie,$q);_.td=function _q(a){Zq(this.b,this.a,a)};var oG=mdb(Zhe,'Iterables/4/lambda$0$Type',1043);bcb(1044,537,vie,ar);_.Jc=function br(a){Qb(a);reb(this.a,new dr(a,this.b))};_.Kc=function cr(){return ur(new Fyd(this.a),this.b)};var rG=mdb(Zhe,'Iterables/5',1044);bcb(1045,1,qie,dr);_.td=function er(a){this.a.td(Gfd(a))};var qG=mdb(Zhe,'Iterables/5/lambda$0$Type',1045);bcb(1071,198,Yhe,wr);_.Ob=function xr(){return this.a.Ob()};_.Pb=function yr(){return this.a.Pb()};var sG=mdb(Zhe,'Iterators/1',1071);bcb(1072,699,Yhe,zr);_.Yb=function Ar(){var a;while(this.b.Ob()){a=this.b.Pb();if(this.a.Lb(a)){return a}}return this.e=2,null};var tG=mdb(Zhe,'Iterators/5',1072);bcb(487,1,aie);_.Nb=function Cr(a){Rrb(this,a)};_.Ob=function Dr(){return this.b.Ob()};_.Pb=function Er(){return this.Qd(this.b.Pb())};_.Qb=function Fr(){this.b.Qb()};var KH=mdb(Zhe,'TransformedIterator',487);bcb(1073,487,aie,Gr);_.Qd=function Hr(a){return this.a.Kb(a)};var uG=mdb(Zhe,'Iterators/6',1073);bcb(717,198,Yhe,Ir);_.Ob=function Jr(){return !this.a};_.Pb=function Kr(){if(this.a){throw vbb(new utb)}this.a=true;return this.b};_.a=false;var vG=mdb(Zhe,'Iterators/9',717);bcb(1070,386,$he,Nr);_.Xb=function Or(a){return this.a[this.b+a]};_.b=0;var Lr;var wG=mdb(Zhe,'Iterators/ArrayItr',1070);bcb(39,1,{39:1,47:1},Sr);_.Nb=function Tr(a){Rrb(this,a)};_.Ob=function Ur(){return Qr(this)};_.Pb=function Vr(){return Rr(this)};_.Qb=function Wr(){Vb(!!this.c);this.c.Qb();this.c=null};var xG=mdb(Zhe,'Iterators/ConcatenatedIterator',39);bcb(22,1,{3:1,35:1,22:1});_.wd=function _r(a){return Xr(this,BD(a,22))};_.Fb=function bs(a){return this===a};_.Hb=function cs(){return FCb(this)};_.Ib=function ds(){return Zr(this)};_.g=0;var CI=mdb(Phe,'Enum',22);bcb(538,22,{538:1,3:1,35:1,22:1,47:1},is);_.Nb=function js(a){Rrb(this,a)};_.Ob=function ks(){return false};_.Pb=function ls(){throw vbb(new utb)};_.Qb=function ms(){Vb(false)};var gs;var yG=ndb(Zhe,'Iterators/EmptyModifiableIterator',538,CI,os,ns);var ps;bcb(1834,619,_he);var EG=mdb(Zhe,'LinkedHashMultimapGwtSerializationDependencies',1834);bcb(1835,1834,_he,ss);_.hc=function us(){return new Asb(Cv(this.b))};_.$b=function ts(){Nc(this);As(this.a,this.a)};_.gd=function vs(){return new Asb(Cv(this.b))};_.ic=function ws(a){return new Ss(this,a,this.b)};_.kc=function xs(){return new Hs(this)};_.lc=function ys(){var a;return new Kub((a=this.g,BD(!a?(this.g=new ph(this)):a,21)),17)};_.ec=function zs(){var a;return a=this.i,!a?(this.i=new zf(this,this.c)):a};_.nc=function Cs(){return new Ov(new Hs(this))};_.oc=function Ds(){var a;return $j(new Kub((a=this.g,BD(!a?(this.g=new ph(this)):a,21)),17),new Es)};_.b=2;var FG=mdb(Zhe,'LinkedHashMultimap',1835);bcb(1838,1,{},Es);_.Kb=function Fs(a){return BD(a,42).dd()};var zG=mdb(Zhe,'LinkedHashMultimap/0methodref$getValue$Type',1838);bcb(824,1,aie,Hs);_.Nb=function Is(a){Rrb(this,a)};_.Pb=function Ks(){return Gs(this)};_.Ob=function Js(){return this.a!=this.b.a};_.Qb=function Ls(){Vb(!!this.c);Gc(this.b,this.c.g,this.c.i);this.c=null};var AG=mdb(Zhe,'LinkedHashMultimap/1',824);bcb(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},Ms);_.Rd=function Ns(){return this.f};_.Sd=function Os(a){this.c=a};_.Td=function Ps(a){this.f=a};_.d=0;var BG=mdb(Zhe,'LinkedHashMultimap/ValueEntry',330);bcb(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Ss);_.Fc=function Ts(a){var b,c,d,e,f;f=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new Ms(this.c,a,f,e);Bs(this.d,d);d.f=this;this.d=d;As(this.g.a.b,d);As(d,this.g.a);this.b[b]=d;++this.f;++this.e;Qs(this);return true};_.$b=function Us(){var a,b;Alb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a.Rd()){b=BD(a,330);As(b.b,b.e)}this.a=this;this.d=this;++this.e};_.Hc=function Vs(a){var b,c;c=Tbb(Ibb(Eie,keb(Tbb(Ibb(a==null?0:tb(a),Fie)),15)));for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.Jc=function Ws(a){var b;Qb(a);for(b=this.a;b!=this;b=b.Rd()){a.td(BD(b,330).i)}};_.Rd=function Xs(){return this.a};_.Kc=function Ys(){return new ct(this)};_.Mc=function Zs(a){return Rs(this,a)};_.Sd=function $s(a){this.d=a};_.Td=function _s(a){this.a=a};_.gc=function at(){return this.f};_.e=0;_.f=0;var DG=mdb(Zhe,'LinkedHashMultimap/ValueSet',1836);bcb(1837,1,aie,ct);_.Nb=function dt(a){Rrb(this,a)};_.Ob=function et(){return bt(this),this.b!=this.c};_.Pb=function ft(){var a,b;bt(this);if(this.b==this.c){throw vbb(new utb)}a=BD(this.b,330);b=a.i;this.d=a;this.b=a.f;return b};_.Qb=function gt(){bt(this);Vb(!!this.d);Rs(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var CG=mdb(Zhe,'LinkedHashMultimap/ValueSet/1',1837);bcb(766,1986,_he,mt);_.Zb=function nt(){var a;return a=this.f,!a?(this.f=new jw(this)):a};_.Fb=function tt(a){return hw(this,a)};_.cc=function ut(a){return new bu(this,a)};_.fc=function xt(a){return kt(this,a)};_.$b=function pt(){it(this)};_._b=function qt(a){return jt(this,a)};_.ac=function rt(){return new jw(this)};_.bc=function st(){return new eu(this)};_.qc=function vt(a){return new bu(this,a)};_.dc=function wt(){return !this.a};_.rc=function yt(a){return kt(this,a)};_.gc=function zt(){return this.d};_.c=0;_.d=0;var MG=mdb(Zhe,'LinkedListMultimap',766);bcb(52,28,Lie);_.ad=function Pt(a){ktb(this,a)};_.Nc=function Qt(){return new Kub(this,16)};_.Vc=function Ct(a,b){throw vbb(new cgb('Add not supported on this list'))};_.Fc=function Dt(a){this.Vc(this.gc(),a);return true};_.Wc=function Et(a,b){var c,d,e;uCb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();this.Vc(a++,d);c=true}return c};_.$b=function Ft(){this.Ud(0,this.gc())};_.Fb=function Gt(a){return At(this,a)};_.Hb=function Ht(){return qmb(this)};_.Xc=function It(a){return Bt(this,a)};_.Kc=function Jt(){return new vib(this)};_.Yc=function Kt(){return this.Zc(0)};_.Zc=function Lt(a){return new Bib(this,a)};_.$c=function Mt(a){throw vbb(new cgb('Remove not supported on this list'))};_.Ud=function Nt(a,b){var c,d;d=this.Zc(a);for(c=a;c<b;++c){d.Pb();d.Qb()}};_._c=function Ot(a,b){throw vbb(new cgb('Set not supported on this list'))};_.bd=function Rt(a,b){return new Jib(this,a,b)};_.j=0;var kJ=mdb(bie,'AbstractList',52);bcb(1964,52,Lie);_.Vc=function Wt(a,b){St(this,a,b)};_.Wc=function Xt(a,b){return Tt(this,a,b)};_.Xb=function Yt(a){return Ut(this,a)};_.Kc=function Zt(){return this.Zc(0)};_.$c=function $t(a){return Vt(this,a)};_._c=function _t(b,c){var d,e;d=this.Zc(b);try{e=d.Pb();d.Wb(c);return e}catch(a){a=ubb(a);if(JD(a,109)){throw vbb(new qcb("Can't set element "+b))}else throw vbb(a)}};var yJ=mdb(bie,'AbstractSequentialList',1964);bcb(636,1964,Lie,bu);_.Zc=function cu(a){return au(this,a)};_.gc=function du(){var a;a=BD(Ohb(this.a.b,this.b),283);return !a?0:a.a};var HG=mdb(Zhe,'LinkedListMultimap/1',636);bcb(1297,1970,fie,eu);_.Hc=function fu(a){return jt(this.a,a)};_.Kc=function gu(){return new ku(this.a)};_.Mc=function hu(a){return !kt(this.a,a).a.dc()};_.gc=function iu(){return Vhb(this.a.b)};var GG=mdb(Zhe,'LinkedListMultimap/1KeySetImpl',1297);bcb(1296,1,aie,ku);_.Nb=function lu(a){Rrb(this,a)};_.Ob=function mu(){ju(this);return !!this.c};_.Pb=function nu(){ju(this);ot(this.c);this.a=this.c;Qqb(this.d,this.a.a);do{this.c=this.c.b}while(!!this.c&&!Qqb(this.d,this.c.a));return this.a.a};_.Qb=function ou(){ju(this);Vb(!!this.a);ir(new wu(this.e,this.a.a));this.a=null;this.b=this.e.c};_.b=0;var IG=mdb(Zhe,'LinkedListMultimap/DistinctKeyIterator',1296);bcb(283,1,{283:1},pu);_.a=0;var JG=mdb(Zhe,'LinkedListMultimap/KeyList',283);bcb(1295,345,kie,qu);_.cd=function ru(){return this.a};_.dd=function su(){return this.f};_.ed=function tu(a){var b;b=this.f;this.f=a;return b};var KG=mdb(Zhe,'LinkedListMultimap/Node',1295);bcb(560,1,jie,wu,xu);_.Nb=function zu(a){Rrb(this,a)};_.Rb=function yu(a){this.e=ht(this.f,this.b,a,this.c);++this.d;this.a=null};_.Ob=function Au(){return !!this.c};_.Sb=function Bu(){return !!this.e};_.Pb=function Cu(){return uu(this)};_.Tb=function Du(){return this.d};_.Ub=function Eu(){return vu(this)};_.Vb=function Fu(){return this.d-1};_.Qb=function Gu(){Vb(!!this.a);if(this.a!=this.c){this.e=this.a.e;--this.d}else{this.c=this.a.c}lt(this.f,this.a);this.a=null};_.Wb=function Hu(a){Ub(!!this.a);this.a.f=a};_.d=0;var LG=mdb(Zhe,'LinkedListMultimap/ValueForKeyIterator',560);bcb(1018,52,Lie);_.Vc=function Tu(a,b){this.a.Vc(a,b)};_.Wc=function Uu(a,b){return this.a.Wc(a,b)};_.Hc=function Vu(a){return this.a.Hc(a)};_.Xb=function Wu(a){return this.a.Xb(a)};_.$c=function Xu(a){return this.a.$c(a)};_._c=function Yu(a,b){return this.a._c(a,b)};_.gc=function Zu(){return this.a.gc()};var OG=mdb(Zhe,'Lists/AbstractListWrapper',1018);bcb(1019,1018,Nie);var PG=mdb(Zhe,'Lists/RandomAccessListWrapper',1019);bcb(1021,1019,Nie,$u);_.Zc=function _u(a){return this.a.Zc(a)};var NG=mdb(Zhe,'Lists/1',1021);bcb(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},dv);_.Vc=function ev(a,b){this.a.Vc(cv(this,a),b)};_.$b=function fv(){this.a.$b()};_.Xb=function gv(a){return this.a.Xb(bv(this,a))};_.Kc=function hv(){return av(this,0)};_.Zc=function iv(a){return av(this,a)};_.$c=function jv(a){return this.a.$c(bv(this,a))};_.Ud=function kv(a,b){(Tb(a,b,this.a.gc()),Su(this.a.bd(cv(this,b),cv(this,a)))).$b()};_._c=function lv(a,b){return this.a._c(bv(this,a),b)};_.gc=function mv(){return this.a.gc()};_.bd=function nv(a,b){return Tb(a,b,this.a.gc()),Su(this.a.bd(cv(this,b),cv(this,a)))};var SG=mdb(Zhe,'Lists/ReverseList',131);bcb(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},ov);var QG=mdb(Zhe,'Lists/RandomAccessReverseList',280);bcb(1020,1,jie,qv);_.Nb=function sv(a){Rrb(this,a)};_.Rb=function rv(a){this.c.Rb(a);this.c.Ub();this.a=false};_.Ob=function tv(){return this.c.Sb()};_.Sb=function uv(){return this.c.Ob()};_.Pb=function vv(){return pv(this)};_.Tb=function wv(){return cv(this.b,this.c.Tb())};_.Ub=function xv(){if(!this.c.Ob()){throw vbb(new utb)}this.a=true;return this.c.Pb()};_.Vb=function yv(){return cv(this.b,this.c.Tb())-1};_.Qb=function zv(){Vb(this.a);this.c.Qb();this.a=false};_.Wb=function Av(a){Ub(this.a);this.c.Wb(a)};_.a=false;var RG=mdb(Zhe,'Lists/ReverseList/1',1020);bcb(432,487,aie,Mv);_.Qd=function Nv(a){return Lv(a)};var TG=mdb(Zhe,'Maps/1',432);bcb(698,487,aie,Ov);_.Qd=function Pv(a){return BD(a,42).dd()};var UG=mdb(Zhe,'Maps/2',698);bcb(962,487,aie,Qv);_.Qd=function Rv(a){return new Wo(a,ww(this.a,a))};var VG=mdb(Zhe,'Maps/3',962);bcb(959,1971,fie,Sv);_.Jc=function Tv(a){mj(this.a,a)};_.Kc=function Uv(){return this.a.kc()};_.Rc=function Vv(){return this.a};_.Nc=function Wv(){return this.a.lc()};var XG=mdb(Zhe,'Maps/IteratorBasedAbstractMap/1',959);bcb(960,1,{},Xv);_.Od=function Yv(a,b){this.a.td(a)};var ZG=mdb(Zhe,'Maps/KeySet/lambda$0$Type',960);bcb(958,28,die,Zv);_.$b=function $v(){this.a.$b()};_.Hc=function _v(a){return this.a.uc(a)};_.Jc=function aw(a){Qb(a);this.a.wc(new fw(a))};_.dc=function bw(){return this.a.dc()};_.Kc=function cw(){return new Ov(this.a.vc().Kc())};_.Mc=function dw(b){var c,d;try{return ze(this,b,true)}catch(a){a=ubb(a);if(JD(a,41)){for(d=this.a.vc().Kc();d.Ob();){c=BD(d.Pb(),42);if(Hb(b,c.dd())){this.a.Bc(c.cd());return true}}return false}else throw vbb(a)}};_.gc=function ew(){return this.a.gc()};var aH=mdb(Zhe,'Maps/Values',958);bcb(961,1,{},fw);_.Od=function gw(a,b){this.a.td(b)};var _G=mdb(Zhe,'Maps/Values/lambda$0$Type',961);bcb(736,1987,cie,jw);_.xc=function nw(a){return this.a._b(a)?this.a.cc(a):null};_.Bc=function qw(a){return this.a._b(a)?this.a.fc(a):null};_.$b=function kw(){this.a.$b()};_._b=function lw(a){return this.a._b(a)};_.Ec=function mw(){return new sw(this)};_.Dc=function(){return this.Ec()};_.dc=function ow(){return this.a.dc()};_.ec=function pw(){return this.a.ec()};_.gc=function rw(){return this.a.ec().gc()};var eH=mdb(Zhe,'Multimaps/AsMap',736);bcb(1104,1971,fie,sw);_.Kc=function tw(){return Bv(this.a.a.ec(),new xw(this))};_.Rc=function uw(){return this.a};_.Mc=function vw(a){var b;if(!Ze(this,a)){return false}b=BD(a,42);iw(this.a,b.cd());return true};var dH=mdb(Zhe,'Multimaps/AsMap/EntrySet',1104);bcb(1108,1,{},xw);_.Kb=function yw(a){return ww(this,a)};_.Fb=function zw(a){return this===a};var cH=mdb(Zhe,'Multimaps/AsMap/EntrySet/1',1108);bcb(543,1989,{543:1,835:1,20:1,28:1,14:1},Cw);_.$b=function Dw(){Nc(this.a)};_.Hc=function Ew(a){return Oc(this.a,a)};_.Jc=function Fw(a){Qb(a);reb(Pc(this.a),new Rw(a))};_.Kc=function Gw(){return new Mv(Pc(this.a).a.kc())};_.gc=function Hw(){return this.a.d};_.Nc=function Iw(){return $j(Pc(this.a).Nc(),new Jw)};var kH=mdb(Zhe,'Multimaps/Keys',543);bcb(1106,1,{},Jw);_.Kb=function Kw(a){return BD(a,42).cd()};var gH=mdb(Zhe,'Multimaps/Keys/0methodref$getKey$Type',1106);bcb(1105,487,aie,Lw);_.Qd=function Mw(a){return new Qw(BD(a,42))};var iH=mdb(Zhe,'Multimaps/Keys/1',1105);bcb(1990,1,{416:1});_.Fb=function Nw(a){var b;if(JD(a,492)){b=BD(a,416);return BD(this.a.dd(),14).gc()==BD(b.a.dd(),14).gc()&&Hb(this.a.cd(),b.a.cd())}return false};_.Hb=function Ow(){var a;a=this.a.cd();return (a==null?0:tb(a))^BD(this.a.dd(),14).gc()};_.Ib=function Pw(){var a,b;b=xfb(this.a.cd());a=BD(this.a.dd(),14).gc();return a==1?b:b+' x '+a};var oH=mdb(Zhe,'Multisets/AbstractEntry',1990);bcb(492,1990,{492:1,416:1},Qw);var hH=mdb(Zhe,'Multimaps/Keys/1/1',492);bcb(1107,1,qie,Rw);_.td=function Sw(a){this.a.td(BD(a,42).cd())};var jH=mdb(Zhe,'Multimaps/Keys/lambda$1$Type',1107);bcb(1110,1,qie,Vw);_.td=function Ww(a){Tw(BD(a,416))};var lH=mdb(Zhe,'Multiset/lambda$0$Type',1110);bcb(737,1,qie,Xw);_.td=function Yw(a){Uw(this.a,BD(a,416))};var mH=mdb(Zhe,'Multiset/lambda$1$Type',737);bcb(1111,1,{},bx);var nH=mdb(Zhe,'Multisets/0methodref$add$Type',1111);bcb(738,1,{},cx);_.Kb=function dx(a){return _w(BD(a,416))};var qH=mdb(Zhe,'Multisets/lambda$3$Type',738);bcb(2008,1,Qhe);var rH=mdb(Zhe,'RangeGwtSerializationDependencies',2008);bcb(514,2008,{169:1,514:1,3:1,45:1},gx);_.Lb=function hx(a){return fx(this,BD(a,35))};_.Mb=function lx(a){return fx(this,BD(a,35))};_.Fb=function jx(a){var b;if(JD(a,514)){b=BD(a,514);return Ek(this.a,b.a)&&Ek(this.b,b.b)}return false};_.Hb=function kx(){return this.a.Hb()*31+this.b.Hb()};_.Ib=function mx(){return nx(this.a,this.b)};var sH=mdb(Zhe,'Range',514);bcb(778,1999,yie,px);_.Zc=function tx(a){return jm(this.b,a)};_.Pd=function qx(){return this.a};_.Xb=function rx(a){return Em(this.b,a)};_.Fd=function sx(a){return jm(this.b,a)};var tH=mdb(Zhe,'RegularImmutableAsList',778);bcb(646,2006,yie,ux);_.Hd=function vx(){return this.a};var uH=mdb(Zhe,'RegularImmutableList',646);bcb(616,715,Aie,wx);var vH=mdb(Zhe,'RegularImmutableMap',616);bcb(716,703,Cie,zx);var xx;var wH=mdb(Zhe,'RegularImmutableSet',716);bcb(1976,eie,fie);_.Kc=function Mx(){return new Xx(this.a,this.b)};_.Fc=function Jx(a){throw vbb(new bgb)};_.Gc=function Kx(a){throw vbb(new bgb)};_.$b=function Lx(){throw vbb(new bgb)};_.Mc=function Nx(a){throw vbb(new bgb)};var CH=mdb(Zhe,'Sets/SetView',1976);bcb(963,1976,fie,Px);_.Kc=function Tx(){return new Xx(this.a,this.b)};_.Hc=function Qx(a){return tqb(this.a,a)&&this.b.Hc(a)};_.Ic=function Rx(a){return Be(this.a,a)&&this.b.Ic(a)};_.dc=function Sx(){return omb(this.b,this.a)};_.Lc=function Ux(){return JAb(new YAb(null,new Kub(this.a,1)),new _x(this.b))};_.gc=function Vx(){return Ox(this)};_.Oc=function Wx(){return JAb(new YAb(null,new Kub(this.a,1)),new Zx(this.b))};var AH=mdb(Zhe,'Sets/2',963);bcb(700,699,Yhe,Xx);_.Yb=function Yx(){var a;while(Eqb(this.a)){a=Fqb(this.a);if(this.c.Hc(a)){return a}}return this.e=2,null};var xH=mdb(Zhe,'Sets/2/1',700);bcb(964,1,Oie,Zx);_.Mb=function $x(a){return this.a.Hc(a)};var yH=mdb(Zhe,'Sets/2/4methodref$contains$Type',964);bcb(965,1,Oie,_x);_.Mb=function ay(a){return this.a.Hc(a)};var zH=mdb(Zhe,'Sets/2/5methodref$contains$Type',965);bcb(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},by);_.Bd=function cy(){return this.b};_.Cd=function dy(){return this.b};_.Md=function ey(){return this.b};_.Jc=function fy(a){this.a.Jc(a)};_.Lc=function gy(){return this.a.Lc()};_.Oc=function hy(){return this.a.Oc()};var DH=mdb(Zhe,'Sets/UnmodifiableNavigableSet',607);bcb(1932,1931,Aie,iy);_.Ld=function jy(){return Ql(),new oy(this.a)};_.Cc=function ky(){return Ql(),new oy(this.a)};_.pd=function ly(){return Ql(),new oy(this.a)};var EH=mdb(Zhe,'SingletonImmutableBiMap',1932);bcb(647,2006,yie,my);_.Hd=function ny(){return this.a};var FH=mdb(Zhe,'SingletonImmutableList',647);bcb(350,1981,Cie,oy);_.Kc=function ry(){return new Ir(this.a)};_.Hc=function py(a){return pb(this.a,a)};_.Ed=function qy(){return new Ir(this.a)};_.gc=function sy(){return 1};var GH=mdb(Zhe,'SingletonImmutableSet',350);bcb(1115,1,{},vy);_.Kb=function wy(a){return BD(a,164)};var HH=mdb(Zhe,'Streams/lambda$0$Type',1115);bcb(1116,1,Pie,xy);_.Vd=function yy(){uy(this.a)};var IH=mdb(Zhe,'Streams/lambda$1$Type',1116);bcb(1659,1658,_he,Ay);_.Zb=function By(){var a;return a=this.f,BD(BD(!a?(this.f=JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)):a,161),171)};_.hc=function Ey(){return new Hxb(this.b)};_.gd=function Fy(){return new Hxb(this.b)};_.ec=function Hy(){var a;return a=this.i,BD(BD(!a?(this.i=JD(this.c,171)?new $f(this,BD(this.c,171)):JD(this.c,161)?new Yf(this,BD(this.c,161)):new zf(this,this.c)):a,84),271)};_.ac=function Dy(){return JD(this.c,171)?new Sf(this,BD(this.c,171)):JD(this.c,161)?new Mf(this,BD(this.c,161)):new ne(this,this.c)};_.ic=function Gy(a){a==null&&this.a.ue(a,a);return new Hxb(this.b)};var LH=mdb(Zhe,'TreeMultimap',1659);bcb(78,1,{3:1,78:1});_.Wd=function $y(a){return new Error(a)};_.Xd=function az(){return this.e};_.Yd=function bz(){return XAb(NAb(Plb((this.k==null&&(this.k=KC(_I,nie,78,0,0,1)),this.k)),new _fb),new bBb)};_.Zd=function cz(){return this.f};_.$d=function dz(){return this.g};_._d=function ez(){Vy(this,_y(this.Wd(Wy(this,this.g))));Sz(this)};_.Ib=function fz(){return Wy(this,this.$d())};_.e=Sie;_.i=false;_.n=true;var _I=mdb(Phe,'Throwable',78);bcb(102,78,{3:1,102:1,78:1});var EI=mdb(Phe,'Exception',102);bcb(60,102,Tie,gz,hz);var TI=mdb(Phe,'RuntimeException',60);bcb(598,60,Tie);var LI=mdb(Phe,'JsException',598);bcb(863,598,Tie);var RH=mdb(Uie,'JavaScriptExceptionBase',863);bcb(477,863,{477:1,3:1,102:1,60:1,78:1},lz);_.$d=function oz(){kz(this);return this.c};_.ae=function pz(){return PD(this.b)===PD(iz)?null:this.b};var iz;var OH=mdb(Wie,'JavaScriptException',477);var PH=mdb(Wie,'JavaScriptObject$',0);var tz;bcb(1948,1,{});var QH=mdb(Wie,'Scheduler',1948);var xz=0,yz=0,zz=-1;bcb(890,1948,{},Nz);var Jz;var SH=mdb(Uie,'SchedulerImpl',890);var Qz;bcb(1960,1,{});var WH=mdb(Uie,'StackTraceCreator/Collector',1960);bcb(864,1960,{},Yz);_.be=function Zz(a){var b={},j;var c=[];a[Yie]=c;var d=arguments.callee.caller;while(d){var e=(Rz(),d.name||(d.name=Uz(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h<i;h++){if(g[h]===d){return}}}(g||(b[f]=[])).push(d);d=d.caller}};_.ce=function $z(a){var b,c,d,e;d=(Rz(),a&&a[Yie]?a[Yie]:[]);c=d.length;e=KC(VI,nie,310,c,0,1);for(b=0;b<c;b++){e[b]=new Zeb(d[b],null,-1)}return e};var TH=mdb(Uie,'StackTraceCreator/CollectorLegacy',864);bcb(1961,1960,{});_.be=function aA(a){};_.de=function bA(a,b,c,d){return new Zeb(b,a+'@'+d,c<0?-1:c)};_.ce=function cA(a){var b,c,d,e,f,g;e=Wz(a);f=KC(VI,nie,310,0,0,1);b=0;d=e.length;if(d==0){return f}g=_z(this,e[0]);dfb(g.d,Xie)||(f[b++]=g);for(c=1;c<d;c++){f[b++]=_z(this,e[c])}return f};var VH=mdb(Uie,'StackTraceCreator/CollectorModern',1961);bcb(865,1961,{},dA);_.de=function eA(a,b,c,d){return new Zeb(b,a,-1)};var UH=mdb(Uie,'StackTraceCreator/CollectorModernNoSourceMap',865);bcb(1050,1,{});var cI=mdb(yje,zje,1050);bcb(615,1050,{615:1},HA);var FA;var XH=mdb(Aje,zje,615);bcb(2001,1,{});var dI=mdb(yje,Bje,2001);bcb(2002,2001,{});var YH=mdb(Aje,Bje,2002);bcb(1090,1,{},MA);var JA;var ZH=mdb(Aje,'LocaleInfo',1090);bcb(1918,1,{},PA);_.a=0;var _H=mdb(Aje,'TimeZone',1918);bcb(1258,2002,{},VA);var aI=mdb('com.google.gwt.i18n.client.impl.cldr','DateTimeFormatInfoImpl',1258);bcb(434,1,{434:1},WA);_.a=false;_.b=0;var bI=mdb(yje,'DateTimeFormat/PatternPart',434);bcb(199,1,Cje,eB,fB,gB);_.wd=function hB(a){return XA(this,BD(a,199))};_.Fb=function iB(a){return JD(a,199)&&Bbb(Cbb(this.q.getTime()),Cbb(BD(a,199).q.getTime()))};_.Hb=function jB(){var a;a=Cbb(this.q.getTime());return Tbb(Vbb(a,Pbb(a,32)))};_.Ib=function lB(){var a,b,c;c=-this.q.getTimezoneOffset();a=(c>=0?'+':'')+(c/60|0);b=kB($wnd.Math.abs(c)%60);return (Dpb(),Bpb)[this.q.getDay()]+' '+Cpb[this.q.getMonth()]+' '+kB(this.q.getDate())+' '+kB(this.q.getHours())+':'+kB(this.q.getMinutes())+':'+kB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var $J=mdb(bie,'Date',199);bcb(1915,199,Cje,nB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var eI=mdb('com.google.gwt.i18n.shared.impl','DateRecord',1915);bcb(1966,1,{});_.fe=function oB(){return null};_.ge=function pB(){return null};_.he=function qB(){return null};_.ie=function rB(){return null};_.je=function sB(){return null};var nI=mdb(Dje,'JSONValue',1966);bcb(216,1966,{216:1},wB,xB);_.Fb=function yB(a){if(!JD(a,216)){return false}return qz(this.a,BD(a,216).a)};_.ee=function zB(){return DB};_.Hb=function AB(){return rz(this.a)};_.fe=function BB(){return this};_.Ib=function CB(){var a,b,c;c=new Wfb('[');for(b=0,a=this.a.length;b<a;b++){b>0&&(c.a+=',',c);Pfb(c,tB(this,b))}c.a+=']';return c.a};var fI=mdb(Dje,'JSONArray',216);bcb(483,1966,{483:1},HB);_.ee=function IB(){return LB};_.ge=function JB(){return this};_.Ib=function KB(){return Bcb(),''+this.a};_.a=false;var EB,FB;var gI=mdb(Dje,'JSONBoolean',483);bcb(985,60,Tie,MB);var hI=mdb(Dje,'JSONException',985);bcb(1023,1966,{},PB);_.ee=function QB(){return SB};_.Ib=function RB(){return Xhe};var NB;var iI=mdb(Dje,'JSONNull',1023);bcb(258,1966,{258:1},TB);_.Fb=function UB(a){if(!JD(a,258)){return false}return this.a==BD(a,258).a};_.ee=function VB(){return ZB};_.Hb=function WB(){return Hdb(this.a)};_.he=function XB(){return this};_.Ib=function YB(){return this.a+''};_.a=0;var jI=mdb(Dje,'JSONNumber',258);bcb(183,1966,{183:1},eC,fC);_.Fb=function gC(a){if(!JD(a,183)){return false}return qz(this.a,BD(a,183).a)};_.ee=function hC(){return lC};_.Hb=function iC(){return rz(this.a)};_.ie=function jC(){return this};_.Ib=function kC(){var a,b,c,d,e,f,g;g=new Wfb('{');a=true;f=$B(this,KC(ZI,nie,2,0,6,1));for(c=f,d=0,e=c.length;d<e;++d){b=c[d];a?(a=false):(g.a+=She,g);Qfb(g,vz(b));g.a+=':';Pfb(g,aC(this,b))}g.a+='}';return g.a};var lI=mdb(Dje,'JSONObject',183);bcb(596,eie,fie,mC);_.Hc=function nC(a){return ND(a)&&_B(this.a,GD(a))};_.Kc=function oC(){return new vib(new amb(this.b))};_.gc=function pC(){return this.b.length};var kI=mdb(Dje,'JSONObject/1',596);var qC;bcb(204,1966,{204:1},yC);_.Fb=function zC(a){if(!JD(a,204)){return false}return dfb(this.a,BD(a,204).a)};_.ee=function AC(){return EC};_.Hb=function BC(){return LCb(this.a)};_.je=function CC(){return this};_.Ib=function DC(){return vz(this.a)};var mI=mdb(Dje,'JSONString',204);var QC;var sD,tD,uD,vD;bcb(1962,1,{525:1});var pI=mdb(Lje,'OutputStream',1962);bcb(1963,1962,{525:1});var oI=mdb(Lje,'FilterOutputStream',1963);bcb(866,1963,{525:1},jcb);var qI=mdb(Lje,'PrintStream',866);bcb(418,1,{475:1});_.Ib=function ncb(){return this.a};var rI=mdb(Phe,'AbstractStringBuilder',418);bcb(529,60,Tie,ocb);var sI=mdb(Phe,'ArithmeticException',529);bcb(73,60,Mje,pcb,qcb);var II=mdb(Phe,'IndexOutOfBoundsException',73);bcb(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},rcb,scb);var tI=mdb(Phe,'ArrayIndexOutOfBoundsException',320);bcb(528,60,Tie,tcb,ucb);var uI=mdb(Phe,'ArrayStoreException',528);bcb(289,78,Nje,vcb);var DI=mdb(Phe,'Error',289);bcb(194,289,Nje,xcb,ycb);var vI=mdb(Phe,'AssertionError',194);xD={3:1,476:1,35:1};var zcb,Acb;var wI=mdb(Phe,'Boolean',476);bcb(236,1,{3:1,236:1});var Gcb;var RI=mdb(Phe,'Number',236);bcb(217,236,{3:1,217:1,35:1,236:1},Mcb);_.wd=function Ncb(a){return Lcb(this,BD(a,217))};_.ke=function Ocb(){return this.a};_.Fb=function Pcb(a){return JD(a,217)&&BD(a,217).a==this.a};_.Hb=function Qcb(){return this.a};_.Ib=function Rcb(){return ''+this.a};_.a=0;var xI=mdb(Phe,'Byte',217);var Tcb;bcb(172,1,{3:1,172:1,35:1},Xcb);_.wd=function Ycb(a){return Wcb(this,BD(a,172))};_.Fb=function $cb(a){return JD(a,172)&&BD(a,172).a==this.a};_.Hb=function _cb(){return this.a};_.Ib=function adb(){return String.fromCharCode(this.a)};_.a=0;var Vcb;var yI=mdb(Phe,'Character',172);var cdb;bcb(205,60,{3:1,205:1,102:1,60:1,78:1},Bdb,Cdb);var zI=mdb(Phe,'ClassCastException',205);yD={3:1,35:1,333:1,236:1};var BI=mdb(Phe,'Double',333);bcb(155,236,{3:1,35:1,155:1,236:1},Ndb,Odb);_.wd=function Pdb(a){return Mdb(this,BD(a,155))};_.ke=function Qdb(){return this.a};_.Fb=function Rdb(a){return JD(a,155)&&Fdb(this.a,BD(a,155).a)};_.Hb=function Sdb(){return QD(this.a)};_.Ib=function Udb(){return ''+this.a};_.a=0;var FI=mdb(Phe,'Float',155);bcb(32,60,{3:1,102:1,32:1,60:1,78:1},Vdb,Wdb,Xdb);var GI=mdb(Phe,'IllegalArgumentException',32);bcb(71,60,Tie,Ydb,Zdb);var HI=mdb(Phe,'IllegalStateException',71);bcb(19,236,{3:1,35:1,19:1,236:1},_db);_.wd=function ceb(a){return $db(this,BD(a,19))};_.ke=function deb(){return this.a};_.Fb=function eeb(a){return JD(a,19)&&BD(a,19).a==this.a};_.Hb=function feb(){return this.a};_.Ib=function leb(){return ''+this.a};_.a=0;var JI=mdb(Phe,'Integer',19);var neb;var peb;bcb(162,236,{3:1,35:1,162:1,236:1},teb);_.wd=function veb(a){return seb(this,BD(a,162))};_.ke=function web(){return Sbb(this.a)};_.Fb=function xeb(a){return JD(a,162)&&Bbb(BD(a,162).a,this.a)};_.Hb=function yeb(){return Tbb(this.a)};_.Ib=function zeb(){return ''+Ubb(this.a)};_.a=0;var MI=mdb(Phe,'Long',162);var Beb;bcb(2039,1,{});bcb(1831,60,Tie,Feb);var NI=mdb(Phe,'NegativeArraySizeException',1831);bcb(173,598,{3:1,102:1,173:1,60:1,78:1},Geb,Heb);_.Wd=function Ieb(a){return new TypeError(a)};var OI=mdb(Phe,'NullPointerException',173);var Jeb,Keb,Leb,Meb;bcb(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Oeb);var QI=mdb(Phe,'NumberFormatException',127);bcb(184,236,{3:1,35:1,236:1,184:1},Qeb);_.wd=function Reb(a){return Peb(this,BD(a,184))};_.ke=function Seb(){return this.a};_.Fb=function Teb(a){return JD(a,184)&&BD(a,184).a==this.a};_.Hb=function Ueb(){return this.a};_.Ib=function Veb(){return ''+this.a};_.a=0;var UI=mdb(Phe,'Short',184);var Xeb;bcb(310,1,{3:1,310:1},Zeb);_.Fb=function $eb(a){var b;if(JD(a,310)){b=BD(a,310);return this.c==b.c&&this.d==b.d&&this.a==b.a&&this.b==b.b}return false};_.Hb=function _eb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[meb(this.c),this.a,this.d,this.b]))};_.Ib=function afb(){return this.a+'.'+this.d+'('+(this.b!=null?this.b:'Unknown Source')+(this.c>=0?':'+this.c:'')+')'};_.c=0;var VI=mdb(Phe,'StackTraceElement',310);zD={3:1,475:1,35:1,2:1};var ZI=mdb(Phe,Vie,2);bcb(107,418,{475:1},Hfb,Ifb,Jfb);var WI=mdb(Phe,'StringBuffer',107);bcb(100,418,{475:1},Ufb,Vfb,Wfb);var XI=mdb(Phe,'StringBuilder',100);bcb(687,73,Mje,Xfb);var YI=mdb(Phe,'StringIndexOutOfBoundsException',687);bcb(2043,1,{});var Yfb;bcb(844,1,{},_fb);_.Kb=function agb(a){return BD(a,78).e};var $I=mdb(Phe,'Throwable/lambda$0$Type',844);bcb(41,60,{3:1,102:1,60:1,78:1,41:1},bgb,cgb);var aJ=mdb(Phe,'UnsupportedOperationException',41);bcb(240,236,{3:1,35:1,236:1,240:1},sgb,tgb);_.wd=function wgb(a){return mgb(this,BD(a,240))};_.ke=function xgb(){return Hcb(rgb(this))};_.Fb=function ygb(a){var b;if(this===a){return true}if(JD(a,240)){b=BD(a,240);return this.e==b.e&&mgb(this,b)==0}return false};_.Hb=function zgb(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Cbb(this.f);this.b=Tbb(xbb(a,-1));this.b=33*this.b+Tbb(xbb(Obb(a,32),-1));this.b=17*this.b+QD(this.e);return this.b}this.b=17*Ngb(this.c)+QD(this.e);return this.b};_.Ib=function Agb(){return rgb(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var dgb,egb,fgb,ggb,hgb,igb,jgb,kgb;var bJ=mdb('java.math','BigDecimal',240);bcb(91,236,{3:1,35:1,236:1,91:1},Tgb,Ugb,Vgb,Wgb,Xgb,Ygb);_.wd=function $gb(a){return Igb(this,BD(a,91))};_.ke=function _gb(){return Hcb(shb(this,0))};_.Fb=function ahb(a){return Kgb(this,a)};_.Hb=function chb(){return Ngb(this)};_.Ib=function ehb(){return shb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Bgb,Cgb,Dgb,Egb,Fgb,Ggb;var cJ=mdb('java.math','BigInteger',91);var nhb,ohb;var Bhb,Chb;bcb(488,1967,cie);_.$b=function Xhb(){Uhb(this)};_._b=function Yhb(a){return Mhb(this,a)};_.uc=function Zhb(a){return Nhb(this,a,this.g)||Nhb(this,a,this.f)};_.vc=function $hb(){return new eib(this)};_.xc=function _hb(a){return Ohb(this,a)};_.zc=function aib(a,b){return Rhb(this,a,b)};_.Bc=function bib(a){return Thb(this,a)};_.gc=function cib(){return Vhb(this)};var gJ=mdb(bie,'AbstractHashMap',488);bcb(261,eie,fie,eib);_.$b=function fib(){this.a.$b()};_.Hc=function gib(a){return dib(this,a)};_.Kc=function hib(){return new nib(this.a)};_.Mc=function iib(a){var b;if(dib(this,a)){b=BD(a,42).cd();this.a.Bc(b);return true}return false};_.gc=function jib(){return this.a.gc()};var fJ=mdb(bie,'AbstractHashMap/EntrySet',261);bcb(262,1,aie,nib);_.Nb=function oib(a){Rrb(this,a)};_.Pb=function qib(){return lib(this)};_.Ob=function pib(){return this.b};_.Qb=function rib(){mib(this)};_.b=false;var eJ=mdb(bie,'AbstractHashMap/EntrySetIterator',262);bcb(417,1,aie,vib);_.Nb=function wib(a){Rrb(this,a)};_.Ob=function xib(){return sib(this)};_.Pb=function yib(){return tib(this)};_.Qb=function zib(){uib(this)};_.b=0;_.c=-1;var hJ=mdb(bie,'AbstractList/IteratorImpl',417);bcb(96,417,jie,Bib);_.Qb=function Hib(){uib(this)};_.Rb=function Cib(a){Aib(this,a)};_.Sb=function Dib(){return this.b>0};_.Tb=function Eib(){return this.b};_.Ub=function Fib(){return sCb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Gib(){return this.b-1};_.Wb=function Iib(a){yCb(this.c!=-1);this.a._c(this.c,a)};var iJ=mdb(bie,'AbstractList/ListIteratorImpl',96);bcb(219,52,Lie,Jib);_.Vc=function Kib(a,b){wCb(a,this.b);this.c.Vc(this.a+a,b);++this.b};_.Xb=function Lib(a){tCb(a,this.b);return this.c.Xb(this.a+a)};_.$c=function Mib(a){var b;tCb(a,this.b);b=this.c.$c(this.a+a);--this.b;return b};_._c=function Nib(a,b){tCb(a,this.b);return this.c._c(this.a+a,b)};_.gc=function Oib(){return this.b};_.a=0;_.b=0;var jJ=mdb(bie,'AbstractList/SubList',219);bcb(384,eie,fie,Pib);_.$b=function Qib(){this.a.$b()};_.Hc=function Rib(a){return this.a._b(a)};_.Kc=function Sib(){var a;return a=this.a.vc().Kc(),new Vib(a)};_.Mc=function Tib(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function Uib(){return this.a.gc()};var mJ=mdb(bie,'AbstractMap/1',384);bcb(691,1,aie,Vib);_.Nb=function Wib(a){Rrb(this,a)};_.Ob=function Xib(){return this.a.Ob()};_.Pb=function Yib(){var a;return a=BD(this.a.Pb(),42),a.cd()};_.Qb=function Zib(){this.a.Qb()};var lJ=mdb(bie,'AbstractMap/1/1',691);bcb(226,28,die,$ib);_.$b=function _ib(){this.a.$b()};_.Hc=function ajb(a){return this.a.uc(a)};_.Kc=function bjb(){var a;return a=this.a.vc().Kc(),new djb(a)};_.gc=function cjb(){return this.a.gc()};var oJ=mdb(bie,'AbstractMap/2',226);bcb(294,1,aie,djb);_.Nb=function ejb(a){Rrb(this,a)};_.Ob=function fjb(){return this.a.Ob()};_.Pb=function gjb(){var a;return a=BD(this.a.Pb(),42),a.dd()};_.Qb=function hjb(){this.a.Qb()};var nJ=mdb(bie,'AbstractMap/2/1',294);bcb(484,1,{484:1,42:1});_.Fb=function jjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.d,b.cd())&&wtb(this.e,b.dd())};_.cd=function kjb(){return this.d};_.dd=function ljb(){return this.e};_.Hb=function mjb(){return xtb(this.d)^xtb(this.e)};_.ed=function njb(a){return ijb(this,a)};_.Ib=function ojb(){return this.d+'='+this.e};var pJ=mdb(bie,'AbstractMap/AbstractEntry',484);bcb(383,484,{484:1,383:1,42:1},pjb);var qJ=mdb(bie,'AbstractMap/SimpleEntry',383);bcb(1984,1,_je);_.Fb=function qjb(a){var b;if(!JD(a,42)){return false}b=BD(a,42);return wtb(this.cd(),b.cd())&&wtb(this.dd(),b.dd())};_.Hb=function rjb(){return xtb(this.cd())^xtb(this.dd())};_.Ib=function sjb(){return this.cd()+'='+this.dd()};var rJ=mdb(bie,lie,1984);bcb(1992,1967,gie);_.tc=function vjb(a){return tjb(this,a)};_._b=function wjb(a){return ujb(this,a)};_.vc=function xjb(){return new Bjb(this)};_.xc=function yjb(a){var b;b=a;return Wd(Awb(this,b))};_.ec=function Ajb(){return new Gjb(this)};var wJ=mdb(bie,'AbstractNavigableMap',1992);bcb(739,eie,fie,Bjb);_.Hc=function Cjb(a){return JD(a,42)&&tjb(this.b,BD(a,42))};_.Kc=function Djb(){return new Ywb(this.b)};_.Mc=function Ejb(a){var b;if(JD(a,42)){b=BD(a,42);return Kwb(this.b,b)}return false};_.gc=function Fjb(){return this.b.c};var tJ=mdb(bie,'AbstractNavigableMap/EntrySet',739);bcb(493,eie,iie,Gjb);_.Nc=function Mjb(){return new Rub(this)};_.$b=function Hjb(){zwb(this.a)};_.Hc=function Ijb(a){return ujb(this.a,a)};_.Kc=function Jjb(){var a;return a=new Ywb((new cxb(this.a)).b),new Njb(a)};_.Mc=function Kjb(a){if(ujb(this.a,a)){Jwb(this.a,a);return true}return false};_.gc=function Ljb(){return this.a.c};var vJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet',493);bcb(494,1,aie,Njb);_.Nb=function Ojb(a){Rrb(this,a)};_.Ob=function Pjb(){return sib(this.a.a)};_.Pb=function Qjb(){var a;return a=Wwb(this.a),a.cd()};_.Qb=function Rjb(){Xwb(this.a)};var uJ=mdb(bie,'AbstractNavigableMap/NavigableKeySet/1',494);bcb(2004,28,die);_.Fc=function Sjb(a){return zCb(cub(this,a)),true};_.Gc=function Tjb(a){uCb(a);mCb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function Ujb(){while(dub(this)!=null);};var xJ=mdb(bie,'AbstractQueue',2004);bcb(302,28,{4:1,20:1,28:1,14:1},jkb,kkb);_.Fc=function lkb(a){return Xjb(this,a),true};_.$b=function nkb(){Yjb(this)};_.Hc=function okb(a){return Zjb(new xkb(this),a)};_.dc=function pkb(){return akb(this)};_.Kc=function qkb(){return new xkb(this)};_.Mc=function rkb(a){return dkb(new xkb(this),a)};_.gc=function skb(){return this.c-this.b&this.a.length-1};_.Nc=function tkb(){return new Kub(this,272)};_.Qc=function ukb(a){var b;b=this.c-this.b&this.a.length-1;a.length<b&&(a=eCb(new Array(b),a));$jb(this,a,b);a.length>b&&NC(a,b,null);return a};_.b=0;_.c=0;var BJ=mdb(bie,'ArrayDeque',302);bcb(446,1,aie,xkb);_.Nb=function ykb(a){Rrb(this,a)};_.Ob=function zkb(){return this.a!=this.b};_.Pb=function Akb(){return vkb(this)};_.Qb=function Bkb(){wkb(this)};_.a=0;_.b=0;_.c=-1;var AJ=mdb(bie,'ArrayDeque/IteratorImpl',446);bcb(12,52,ake,Rkb,Skb,Tkb);_.Vc=function Ukb(a,b){Dkb(this,a,b)};_.Fc=function Vkb(a){return Ekb(this,a)};_.Wc=function Wkb(a,b){return Fkb(this,a,b)};_.Gc=function Xkb(a){return Gkb(this,a)};_.$b=function Ykb(){this.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function Zkb(a){return Jkb(this,a,0)!=-1};_.Jc=function $kb(a){Hkb(this,a)};_.Xb=function _kb(a){return Ikb(this,a)};_.Xc=function alb(a){return Jkb(this,a,0)};_.dc=function blb(){return this.c.length==0};_.Kc=function clb(){return new olb(this)};_.$c=function dlb(a){return Kkb(this,a)};_.Mc=function elb(a){return Lkb(this,a)};_.Ud=function flb(a,b){Mkb(this,a,b)};_._c=function glb(a,b){return Nkb(this,a,b)};_.gc=function hlb(){return this.c.length};_.ad=function ilb(a){Okb(this,a)};_.Pc=function jlb(){return Pkb(this)};_.Qc=function klb(a){return Qkb(this,a)};var DJ=mdb(bie,'ArrayList',12);bcb(7,1,aie,olb);_.Nb=function plb(a){Rrb(this,a)};_.Ob=function qlb(){return llb(this)};_.Pb=function rlb(){return mlb(this)};_.Qb=function slb(){nlb(this)};_.a=0;_.b=-1;var CJ=mdb(bie,'ArrayList/1',7);bcb(2013,$wnd.Function,{},Ylb);_.te=function Zlb(a,b){return Kdb(a,b)};bcb(154,52,bke,amb);_.Hc=function bmb(a){return Bt(this,a)!=-1};_.Jc=function cmb(a){var b,c,d,e;uCb(a);for(c=this.a,d=0,e=c.length;d<e;++d){b=c[d];a.td(b)}};_.Xb=function dmb(a){return $lb(this,a)};_._c=function emb(a,b){var c;c=(tCb(a,this.a.length),this.a[a]);NC(this.a,a,b);return c};_.gc=function fmb(){return this.a.length};_.ad=function gmb(a){Mlb(this.a,this.a.length,a)};_.Pc=function hmb(){return _lb(this,KC(SI,Uhe,1,this.a.length,5,1))};_.Qc=function imb(a){return _lb(this,a)};var EJ=mdb(bie,'Arrays/ArrayList',154);var jmb,kmb,lmb;bcb(940,52,bke,xmb);_.Hc=function ymb(a){return false};_.Xb=function zmb(a){return wmb(a)};_.Kc=function Amb(){return mmb(),Emb(),Dmb};_.Yc=function Bmb(){return mmb(),Emb(),Dmb};_.gc=function Cmb(){return 0};var GJ=mdb(bie,'Collections/EmptyList',940);bcb(941,1,jie,Fmb);_.Nb=function Hmb(a){Rrb(this,a)};_.Rb=function Gmb(a){throw vbb(new bgb)};_.Ob=function Imb(){return false};_.Sb=function Jmb(){return false};_.Pb=function Kmb(){throw vbb(new utb)};_.Tb=function Lmb(){return 0};_.Ub=function Mmb(){throw vbb(new utb)};_.Vb=function Nmb(){return -1};_.Qb=function Omb(){throw vbb(new Ydb)};_.Wb=function Pmb(a){throw vbb(new Ydb)};var Dmb;var FJ=mdb(bie,'Collections/EmptyListIterator',941);bcb(943,1967,Aie,Qmb);_._b=function Rmb(a){return false};_.uc=function Smb(a){return false};_.vc=function Tmb(){return mmb(),lmb};_.xc=function Umb(a){return null};_.ec=function Vmb(){return mmb(),lmb};_.gc=function Wmb(){return 0};_.Cc=function Xmb(){return mmb(),jmb};var HJ=mdb(bie,'Collections/EmptyMap',943);bcb(942,eie,Cie,Ymb);_.Hc=function Zmb(a){return false};_.Kc=function $mb(){return mmb(),Emb(),Dmb};_.gc=function _mb(){return 0};var IJ=mdb(bie,'Collections/EmptySet',942);bcb(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},anb);_.Hc=function bnb(a){return wtb(this.a,a)};_.Xb=function cnb(a){tCb(a,1);return this.a};_.gc=function dnb(){return 1};var JJ=mdb(bie,'Collections/SingletonList',599);bcb(372,1,wie,lnb);_.Jc=function rnb(a){reb(this,a)};_.Lc=function unb(){return new YAb(null,this.Nc())};_.Nc=function xnb(){return new Kub(this,0)};_.Oc=function ynb(){return new YAb(null,this.Nc())};_.Fc=function mnb(a){return enb()};_.Gc=function nnb(a){return fnb()};_.$b=function onb(){gnb()};_.Hc=function pnb(a){return hnb(this,a)};_.Ic=function qnb(a){return inb(this,a)};_.dc=function snb(){return this.b.dc()};_.Kc=function tnb(){return new Dnb(this.b.Kc())};_.Mc=function vnb(a){return jnb()};_.gc=function wnb(){return this.b.gc()};_.Pc=function znb(){return this.b.Pc()};_.Qc=function Anb(a){return knb(this,a)};_.Ib=function Bnb(){return fcb(this.b)};var LJ=mdb(bie,'Collections/UnmodifiableCollection',372);bcb(371,1,aie,Dnb);_.Nb=function Enb(a){Rrb(this,a)};_.Ob=function Fnb(){return this.b.Ob()};_.Pb=function Gnb(){return this.b.Pb()};_.Qb=function Hnb(){Cnb()};var KJ=mdb(bie,'Collections/UnmodifiableCollectionIterator',371);bcb(531,372,cke,Inb);_.Nc=function Vnb(){return new Kub(this,16)};_.Vc=function Jnb(a,b){throw vbb(new bgb)};_.Wc=function Knb(a,b){throw vbb(new bgb)};_.Fb=function Lnb(a){return pb(this.a,a)};_.Xb=function Mnb(a){return this.a.Xb(a)};_.Hb=function Nnb(){return tb(this.a)};_.Xc=function Onb(a){return this.a.Xc(a)};_.dc=function Pnb(){return this.a.dc()};_.Yc=function Qnb(){return new Xnb(this.a.Zc(0))};_.Zc=function Rnb(a){return new Xnb(this.a.Zc(a))};_.$c=function Snb(a){throw vbb(new bgb)};_._c=function Tnb(a,b){throw vbb(new bgb)};_.ad=function Unb(a){throw vbb(new bgb)};_.bd=function Wnb(a,b){return new Inb(this.a.bd(a,b))};var NJ=mdb(bie,'Collections/UnmodifiableList',531);bcb(690,371,jie,Xnb);_.Qb=function bob(){Cnb()};_.Rb=function Ynb(a){throw vbb(new bgb)};_.Sb=function Znb(){return this.a.Sb()};_.Tb=function $nb(){return this.a.Tb()};_.Ub=function _nb(){return this.a.Ub()};_.Vb=function aob(){return this.a.Vb()};_.Wb=function cob(a){throw vbb(new bgb)};var MJ=mdb(bie,'Collections/UnmodifiableListIterator',690);bcb(600,1,cie,iob);_.wc=function oob(a){stb(this,a)};_.yc=function tob(a,b,c){return ttb(this,a,b,c)};_.$b=function job(){throw vbb(new bgb)};_._b=function kob(a){return this.c._b(a)};_.uc=function lob(a){return dob(this,a)};_.vc=function mob(){return eob(this)};_.Fb=function nob(a){return fob(this,a)};_.xc=function pob(a){return this.c.xc(a)};_.Hb=function qob(){return tb(this.c)};_.dc=function rob(){return this.c.dc()};_.ec=function sob(){return gob(this)};_.zc=function uob(a,b){throw vbb(new bgb)};_.Bc=function vob(a){throw vbb(new bgb)};_.gc=function wob(){return this.c.gc()};_.Ib=function xob(){return fcb(this.c)};_.Cc=function yob(){return hob(this)};var RJ=mdb(bie,'Collections/UnmodifiableMap',600);bcb(382,372,Bie,zob);_.Nc=function Cob(){return new Kub(this,1)};_.Fb=function Aob(a){return pb(this.b,a)};_.Hb=function Bob(){return tb(this.b)};var TJ=mdb(bie,'Collections/UnmodifiableSet',382);bcb(944,382,Bie,Gob);_.Hc=function Hob(a){return Dob(this,a)};_.Ic=function Iob(a){return this.b.Ic(a)};_.Kc=function Job(){var a;a=this.b.Kc();return new Mob(a)};_.Pc=function Kob(){var a;a=this.b.Pc();Fob(a,a.length);return a};_.Qc=function Lob(a){return Eob(this,a)};var QJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet',944);bcb(945,1,aie,Mob);_.Nb=function Nob(a){Rrb(this,a)};_.Pb=function Pob(){return new Rob(BD(this.a.Pb(),42))};_.Ob=function Oob(){return this.a.Ob()};_.Qb=function Qob(){throw vbb(new bgb)};var OJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet/1',945);bcb(688,1,_je,Rob);_.Fb=function Sob(a){return this.a.Fb(a)};_.cd=function Tob(){return this.a.cd()};_.dd=function Uob(){return this.a.dd()};_.Hb=function Vob(){return this.a.Hb()};_.ed=function Wob(a){throw vbb(new bgb)};_.Ib=function Xob(){return fcb(this.a)};var PJ=mdb(bie,'Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry',688);bcb(601,531,{20:1,14:1,15:1,54:1},Yob);var SJ=mdb(bie,'Collections/UnmodifiableRandomAccessList',601);bcb(689,382,Die,Zob);_.Nc=function apb(){return new Rub(this)};_.Fb=function $ob(a){return pb(this.a,a)};_.Hb=function _ob(){return tb(this.a)};var UJ=mdb(bie,'Collections/UnmodifiableSortedSet',689);bcb(847,1,dke,bpb);_.ue=function cpb(a,b){var c;return c=Ucc(BD(a,11),BD(b,11)),c!=0?c:Wcc(BD(a,11),BD(b,11))};_.Fb=function dpb(a){return this===a};_.ve=function epb(){return new tpb(this)};var VJ=mdb(bie,'Comparator/lambda$0$Type',847);var fpb,gpb,hpb;bcb(751,1,dke,kpb);_.ue=function lpb(a,b){return jpb(BD(a,35),BD(b,35))};_.Fb=function mpb(a){return this===a};_.ve=function npb(){return ipb(),hpb};var WJ=mdb(bie,'Comparators/NaturalOrderComparator',751);bcb(1177,1,dke,ppb);_.ue=function qpb(a,b){return opb(BD(a,35),BD(b,35))};_.Fb=function rpb(a){return this===a};_.ve=function spb(){return ipb(),gpb};var XJ=mdb(bie,'Comparators/ReverseNaturalOrderComparator',1177);bcb(64,1,dke,tpb);_.Fb=function vpb(a){return this===a};_.ue=function upb(a,b){return this.a.ue(b,a)};_.ve=function wpb(){return this.a};var YJ=mdb(bie,'Comparators/ReversedComparator',64);bcb(166,60,Tie,Apb);var ZJ=mdb(bie,'ConcurrentModificationException',166);var Bpb,Cpb;bcb(1904,1,eke,Gpb);_.we=function Hpb(a){Epb(this,a)};_.Ib=function Ipb(){return 'DoubleSummaryStatistics[count = '+Ubb(this.a)+', avg = '+(Dbb(this.a,0)?Fpb(this)/Sbb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Fpb(this)+']'};_.a=0;_.b=Qje;_.c=Pje;_.d=0;_.e=0;_.f=0;var _J=mdb(bie,'DoubleSummaryStatistics',1904);bcb(1805,60,Tie,Jpb);var aK=mdb(bie,'EmptyStackException',1805);bcb(451,1967,cie,Rpb);_.zc=function Xpb(a,b){return Opb(this,a,b)};_.$b=function Spb(){Kpb(this)};_._b=function Tpb(a){return Lpb(this,a)};_.uc=function Upb(a){var b,c;for(c=new Gqb(this.a);c.a<c.c.a.length;){b=Fqb(c);if(wtb(a,this.b[b.g])){return true}}return false};_.vc=function Vpb(){return new _pb(this)};_.xc=function Wpb(a){return Mpb(this,a)};_.Bc=function Ypb(a){return Ppb(this,a)};_.gc=function Zpb(){return this.a.c};var eK=mdb(bie,'EnumMap',451);bcb(1352,eie,fie,_pb);_.$b=function aqb(){Kpb(this.a)};_.Hc=function bqb(a){return $pb(this,a)};_.Kc=function cqb(){return new fqb(this.a)};_.Mc=function dqb(a){var b;if($pb(this,a)){b=BD(a,42).cd();Ppb(this.a,b);return true}return false};_.gc=function eqb(){return this.a.a.c};var cK=mdb(bie,'EnumMap/EntrySet',1352);bcb(1353,1,aie,fqb);_.Nb=function gqb(a){Rrb(this,a)};_.Pb=function iqb(){return this.b=Fqb(this.a),new kqb(this.c,this.b)};_.Ob=function hqb(){return Eqb(this.a)};_.Qb=function jqb(){yCb(!!this.b);Ppb(this.c,this.b);this.b=null};var bK=mdb(bie,'EnumMap/EntrySetIterator',1353);bcb(1354,1984,_je,kqb);_.cd=function lqb(){return this.a};_.dd=function mqb(){return this.b.b[this.a.g]};_.ed=function nqb(a){return Qpb(this.b,this.a.g,a)};var dK=mdb(bie,'EnumMap/MapEntry',1354);bcb(174,eie,{20:1,28:1,14:1,174:1,21:1});var hK=mdb(bie,'EnumSet',174);bcb(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},xqb);_.Fc=function yqb(a){return rqb(this,BD(a,22))};_.Hc=function zqb(a){return tqb(this,a)};_.Kc=function Aqb(){return new Gqb(this)};_.Mc=function Bqb(a){return vqb(this,a)};_.gc=function Cqb(){return this.c};_.c=0;var gK=mdb(bie,'EnumSet/EnumSetImpl',156);bcb(343,1,aie,Gqb);_.Nb=function Hqb(a){Rrb(this,a)};_.Pb=function Jqb(){return Fqb(this)};_.Ob=function Iqb(){return Eqb(this)};_.Qb=function Kqb(){yCb(this.b!=-1);NC(this.c.b,this.b,null);--this.c.c;this.b=-1};_.a=-1;_.b=-1;var fK=mdb(bie,'EnumSet/EnumSetImpl/IteratorImpl',343);bcb(43,488,fke,Lqb,Mqb,Nqb);_.re=function Oqb(a,b){return PD(a)===PD(b)||a!=null&&pb(a,b)};_.se=function Pqb(a){var b;b=tb(a);return b|0};var iK=mdb(bie,'HashMap',43);bcb(53,eie,gke,Tqb,Uqb,Vqb);_.Fc=function Xqb(a){return Qqb(this,a)};_.$b=function Yqb(){this.a.$b()};_.Hc=function Zqb(a){return Rqb(this,a)};_.dc=function $qb(){return this.a.gc()==0};_.Kc=function _qb(){return this.a.ec().Kc()};_.Mc=function arb(a){return Sqb(this,a)};_.gc=function brb(){return this.a.gc()};var jK=mdb(bie,'HashSet',53);bcb(1781,1,sie,drb);_.ud=function erb(a){crb(this,a)};_.Ib=function frb(){return 'IntSummaryStatistics[count = '+Ubb(this.a)+', avg = '+(Dbb(this.a,0)?Sbb(this.d)/Sbb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Ubb(this.d)+']'};_.a=0;_.b=Rie;_.c=Ohe;_.d=0;var kK=mdb(bie,'IntSummaryStatistics',1781);bcb(1049,1,vie,lrb);_.Jc=function mrb(a){reb(this,a)};_.Kc=function nrb(){return new orb(this)};_.c=0;var mK=mdb(bie,'InternalHashCodeMap',1049);bcb(711,1,aie,orb);_.Nb=function prb(a){Rrb(this,a)};_.Pb=function rrb(){return this.d=this.a[this.c++],this.d};_.Ob=function qrb(){var a;if(this.c<this.a.length){return true}a=this.b.next();if(!a.done){this.a=a.value[1];this.c=0;return true}return false};_.Qb=function srb(){krb(this.e,this.d.cd());this.c!=0&&--this.c};_.c=0;_.d=null;var lK=mdb(bie,'InternalHashCodeMap/1',711);var vrb;bcb(1047,1,vie,Frb);_.Jc=function Grb(a){reb(this,a)};_.Kc=function Hrb(){return new Irb(this)};_.c=0;_.d=0;var pK=mdb(bie,'InternalStringMap',1047);bcb(710,1,aie,Irb);_.Nb=function Jrb(a){Rrb(this,a)};_.Pb=function Lrb(){return this.c=this.a,this.a=this.b.next(),new Nrb(this.d,this.c,this.d.d)};_.Ob=function Krb(){return !this.a.done};_.Qb=function Mrb(){Erb(this.d,this.c.value[0])};var nK=mdb(bie,'InternalStringMap/1',710);bcb(1048,1984,_je,Nrb);_.cd=function Orb(){return this.b.value[0]};_.dd=function Prb(){if(this.a.d!=this.c){return Crb(this.a,this.b.value[0])}return this.b.value[1]};_.ed=function Qrb(a){return Drb(this.a,this.b.value[0],a)};_.c=0;var oK=mdb(bie,'InternalStringMap/2',1048);bcb(228,43,fke,$rb,_rb);_.$b=function asb(){Urb(this)};_._b=function bsb(a){return Vrb(this,a)};_.uc=function csb(a){var b;b=this.d.a;while(b!=this.d){if(wtb(b.e,a)){return true}b=b.a}return false};_.vc=function dsb(){return new nsb(this)};_.xc=function esb(a){return Wrb(this,a)};_.zc=function fsb(a,b){return Xrb(this,a,b)};_.Bc=function gsb(a){return Zrb(this,a)};_.gc=function hsb(){return Vhb(this.e)};_.c=false;var tK=mdb(bie,'LinkedHashMap',228);bcb(387,383,{484:1,383:1,387:1,42:1},ksb,lsb);var qK=mdb(bie,'LinkedHashMap/ChainEntry',387);bcb(701,eie,fie,nsb);_.$b=function osb(){Urb(this.a)};_.Hc=function psb(a){return msb(this,a)};_.Kc=function qsb(){return new usb(this)};_.Mc=function rsb(a){var b;if(msb(this,a)){b=BD(a,42).cd();Zrb(this.a,b);return true}return false};_.gc=function ssb(){return Vhb(this.a.e)};var sK=mdb(bie,'LinkedHashMap/EntrySet',701);bcb(702,1,aie,usb);_.Nb=function vsb(a){Rrb(this,a)};_.Pb=function xsb(){return tsb(this)};_.Ob=function wsb(){return this.b!=this.c.a.d};_.Qb=function ysb(){yCb(!!this.a);xpb(this.c.a.e,this);jsb(this.a);Thb(this.c.a.e,this.a.d);ypb(this.c.a.e,this);this.a=null};var rK=mdb(bie,'LinkedHashMap/EntrySet/EntryIterator',702);bcb(178,53,gke,zsb,Asb,Bsb);var uK=mdb(bie,'LinkedHashSet',178);bcb(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},Psb,Qsb);_.Fc=function Rsb(a){return Dsb(this,a)};_.$b=function Ssb(){Osb(this)};_.Zc=function Tsb(a){return Jsb(this,a)};_.gc=function Usb(){return this.b};_.b=0;var xK=mdb(bie,'LinkedList',68);bcb(970,1,jie,$sb);_.Nb=function atb(a){Rrb(this,a)};_.Rb=function _sb(a){Vsb(this,a)};_.Ob=function btb(){return Wsb(this)};_.Sb=function ctb(){return this.b.b!=this.d.a};_.Pb=function dtb(){return Xsb(this)};_.Tb=function etb(){return this.a};_.Ub=function ftb(){return Ysb(this)};_.Vb=function gtb(){return this.a-1};_.Qb=function htb(){Zsb(this)};_.Wb=function itb(a){yCb(!!this.c);this.c.c=a};_.a=0;_.c=null;var vK=mdb(bie,'LinkedList/ListIteratorImpl',970);bcb(608,1,{},jtb);var wK=mdb(bie,'LinkedList/Node',608);bcb(1959,1,{});var ltb,mtb;var BK=mdb(bie,'Locale',1959);bcb(861,1959,{},otb);_.Ib=function ptb(){return ''};var zK=mdb(bie,'Locale/1',861);bcb(862,1959,{},qtb);_.Ib=function rtb(){return 'unknown'};var AK=mdb(bie,'Locale/4',862);bcb(109,60,{3:1,102:1,60:1,78:1,109:1},utb,vtb);var EK=mdb(bie,'NoSuchElementException',109);bcb(404,1,{404:1},Ftb);_.Fb=function Gtb(a){var b;if(a===this){return true}if(!JD(a,404)){return false}b=BD(a,404);return wtb(this.a,b.a)};_.Hb=function Htb(){return xtb(this.a)};_.Ib=function Jtb(){return this.a!=null?Whe+xfb(this.a)+')':'Optional.empty()'};var ztb;var HK=mdb(bie,'Optional',404);bcb(463,1,{463:1},Otb,Ptb);_.Fb=function Qtb(a){var b;if(a===this){return true}if(!JD(a,463)){return false}b=BD(a,463);return this.a==b.a&&Kdb(this.b,b.b)==0};_.Hb=function Rtb(){return this.a?QD(this.b):0};_.Ib=function Stb(){return this.a?'OptionalDouble.of('+(''+this.b)+')':'OptionalDouble.empty()'};_.a=false;_.b=0;var Ktb;var FK=mdb(bie,'OptionalDouble',463);bcb(517,1,{517:1},Wtb,Xtb);_.Fb=function Ytb(a){var b;if(a===this){return true}if(!JD(a,517)){return false}b=BD(a,517);return this.a==b.a&&beb(this.b,b.b)==0};_.Hb=function Ztb(){return this.a?this.b:0};_.Ib=function $tb(){return this.a?'OptionalInt.of('+(''+this.b)+')':'OptionalInt.empty()'};_.a=false;_.b=0;var Ttb;var GK=mdb(bie,'OptionalInt',517);bcb(503,2004,die,gub);_.Gc=function hub(a){return _tb(this,a)};_.$b=function iub(){this.b.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function jub(a){return (a==null?-1:Jkb(this.b,a,0))!=-1};_.Kc=function kub(){return new qub(this)};_.Mc=function lub(a){return eub(this,a)};_.gc=function mub(){return this.b.c.length};_.Nc=function nub(){return new Kub(this,256)};_.Pc=function oub(){return Pkb(this.b)};_.Qc=function pub(a){return Qkb(this.b,a)};var JK=mdb(bie,'PriorityQueue',503);bcb(1277,1,aie,qub);_.Nb=function rub(a){Rrb(this,a)};_.Ob=function tub(){return this.a<this.c.b.c.length};_.Pb=function uub(){sCb(this.a<this.c.b.c.length);this.b=this.a++;return Ikb(this.c.b,this.b)};_.Qb=function vub(){yCb(this.b!=-1);fub(this.c,this.a=this.b);this.b=-1};_.a=0;_.b=-1;var IK=mdb(bie,'PriorityQueue/1',1277);bcb(230,1,{230:1},Gub,Hub);_.a=0;_.b=0;var wub,xub,yub=0;var KK=mdb(bie,'Random',230);bcb(27,1,pie,Kub,Lub,Mub);_.qd=function Nub(){return this.a};_.rd=function Oub(){Iub(this);return this.c};_.Nb=function Pub(a){Iub(this);this.d.Nb(a)};_.sd=function Qub(a){return Jub(this,a)};_.a=0;_.c=0;var $K=mdb(bie,'Spliterators/IteratorSpliterator',27);bcb(485,27,pie,Rub);var MK=mdb(bie,'SortedSet/1',485);bcb(602,1,eke,Tub);_.we=function Uub(a){this.a.td(a)};var NK=mdb(bie,'Spliterator/OfDouble/0methodref$accept$Type',602);bcb(603,1,eke,Vub);_.we=function Wub(a){this.a.td(a)};var OK=mdb(bie,'Spliterator/OfDouble/1methodref$accept$Type',603);bcb(604,1,sie,Xub);_.ud=function Yub(a){this.a.td(meb(a))};var PK=mdb(bie,'Spliterator/OfInt/2methodref$accept$Type',604);bcb(605,1,sie,Zub);_.ud=function $ub(a){this.a.td(meb(a))};var QK=mdb(bie,'Spliterator/OfInt/3methodref$accept$Type',605);bcb(617,1,pie);_.Nb=function evb(a){Sub(this,a)};_.qd=function cvb(){return this.d};_.rd=function dvb(){return this.e};_.d=0;_.e=0;var WK=mdb(bie,'Spliterators/BaseSpliterator',617);bcb(721,617,pie);_.xe=function gvb(a){_ub(this,a)};_.Nb=function hvb(a){JD(a,182)?_ub(this,BD(a,182)):_ub(this,new Vub(a))};_.sd=function ivb(a){return JD(a,182)?this.ye(BD(a,182)):this.ye(new Tub(a))};var RK=mdb(bie,'Spliterators/AbstractDoubleSpliterator',721);bcb(720,617,pie);_.xe=function kvb(a){_ub(this,a)};_.Nb=function lvb(a){JD(a,196)?_ub(this,BD(a,196)):_ub(this,new Zub(a))};_.sd=function mvb(a){return JD(a,196)?this.ye(BD(a,196)):this.ye(new Xub(a))};var SK=mdb(bie,'Spliterators/AbstractIntSpliterator',720);bcb(540,617,pie);var TK=mdb(bie,'Spliterators/AbstractSpliterator',540);bcb(692,1,pie);_.Nb=function tvb(a){Sub(this,a)};_.qd=function rvb(){return this.b};_.rd=function svb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var VK=mdb(bie,'Spliterators/BaseArraySpliterator',692);bcb(947,692,pie,vvb);_.ze=function wvb(a,b){uvb(this,BD(a,38),b)};_.Nb=function xvb(a){ovb(this,a)};_.sd=function yvb(a){return pvb(this,a)};var UK=mdb(bie,'Spliterators/ArraySpliterator',947);bcb(693,692,pie,Avb);_.ze=function Cvb(a,b){zvb(this,BD(a,182),b)};_.xe=function Dvb(a){ovb(this,a)};_.Nb=function Evb(a){JD(a,182)?ovb(this,BD(a,182)):ovb(this,new Vub(a))};_.ye=function Fvb(a){return pvb(this,a)};_.sd=function Gvb(a){return JD(a,182)?pvb(this,BD(a,182)):pvb(this,new Tub(a))};var XK=mdb(bie,'Spliterators/DoubleArraySpliterator',693);bcb(1968,1,pie);_.Nb=function Lvb(a){Sub(this,a)};_.qd=function Jvb(){return 16448};_.rd=function Kvb(){return 0};var Hvb;var ZK=mdb(bie,'Spliterators/EmptySpliterator',1968);bcb(946,1968,pie,Ovb);_.xe=function Pvb(a){Mvb(a)};_.Nb=function Qvb(a){JD(a,196)?Mvb(BD(a,196)):Mvb(new Zub(a))};_.ye=function Rvb(a){return Nvb(a)};_.sd=function Svb(a){return JD(a,196)?Nvb(BD(a,196)):Nvb(new Xub(a))};var YK=mdb(bie,'Spliterators/EmptySpliterator/OfInt',946);bcb(580,52,pke,Wvb);_.Vc=function Xvb(a,b){_vb(a,this.a.c.length+1);Dkb(this.a,a,b)};_.Fc=function Yvb(a){return Ekb(this.a,a)};_.Wc=function Zvb(a,b){_vb(a,this.a.c.length+1);return Fkb(this.a,a,b)};_.Gc=function $vb(a){return Gkb(this.a,a)};_.$b=function awb(){this.a.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function bwb(a){return Jkb(this.a,a,0)!=-1};_.Ic=function cwb(a){return Be(this.a,a)};_.Jc=function dwb(a){Hkb(this.a,a)};_.Xb=function ewb(a){return _vb(a,this.a.c.length),Ikb(this.a,a)};_.Xc=function fwb(a){return Jkb(this.a,a,0)};_.dc=function gwb(){return this.a.c.length==0};_.Kc=function hwb(){return new olb(this.a)};_.$c=function iwb(a){return _vb(a,this.a.c.length),Kkb(this.a,a)};_.Ud=function jwb(a,b){Mkb(this.a,a,b)};_._c=function kwb(a,b){return _vb(a,this.a.c.length),Nkb(this.a,a,b)};_.gc=function lwb(){return this.a.c.length};_.ad=function mwb(a){Okb(this.a,a)};_.bd=function nwb(a,b){return new Jib(this.a,a,b)};_.Pc=function owb(){return Pkb(this.a)};_.Qc=function pwb(a){return Qkb(this.a,a)};_.Ib=function qwb(){return Fe(this.a)};var lL=mdb(bie,'Vector',580);bcb(809,580,pke,twb);var _K=mdb(bie,'Stack',809);bcb(206,1,{206:1},xwb);_.Ib=function ywb(){return wwb(this)};var aL=mdb(bie,'StringJoiner',206);bcb(544,1992,{3:1,83:1,171:1,161:1},Pwb,Qwb);_.$b=function Rwb(){zwb(this)};_.vc=function Swb(){return new cxb(this)};_.zc=function Twb(a,b){return Iwb(this,a,b)};_.Bc=function Uwb(a){return Jwb(this,a)};_.gc=function Vwb(){return this.c};_.c=0;var jL=mdb(bie,'TreeMap',544);bcb(390,1,aie,Ywb);_.Nb=function $wb(a){Rrb(this,a)};_.Pb=function axb(){return Wwb(this)};_.Ob=function _wb(){return sib(this.a)};_.Qb=function bxb(){Xwb(this)};var bL=mdb(bie,'TreeMap/EntryIterator',390);bcb(435,739,fie,cxb);_.$b=function dxb(){zwb(this.a)};var cL=mdb(bie,'TreeMap/EntrySet',435);bcb(436,383,{484:1,383:1,42:1,436:1},exb);_.b=false;var dL=mdb(bie,'TreeMap/Node',436);bcb(621,1,{},fxb);_.Ib=function gxb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var eL=mdb(bie,'TreeMap/State',621);bcb(297,22,qke,mxb);_.Ae=function nxb(){return false};_.Be=function oxb(){return false};var hxb,ixb,jxb,kxb;var iL=ndb(bie,'TreeMap/SubMapType',297,CI,qxb,pxb);bcb(1112,297,qke,rxb);_.Be=function sxb(){return true};var fL=ndb(bie,'TreeMap/SubMapType/1',1112,iL,null,null);bcb(1113,297,qke,txb);_.Ae=function uxb(){return true};_.Be=function vxb(){return true};var gL=ndb(bie,'TreeMap/SubMapType/2',1113,iL,null,null);bcb(1114,297,qke,wxb);_.Ae=function xxb(){return true};var hL=ndb(bie,'TreeMap/SubMapType/3',1114,iL,null,null);var yxb;bcb(208,eie,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},Gxb,Hxb);_.Nc=function Oxb(){return new Rub(this)};_.Fc=function Ixb(a){return Axb(this,a)};_.$b=function Jxb(){zwb(this.a)};_.Hc=function Kxb(a){return ujb(this.a,a)};_.Kc=function Lxb(){var a;return a=new Ywb((new cxb((new Gjb(this.a)).a)).b),new Njb(a)};_.Mc=function Mxb(a){return Fxb(this,a)};_.gc=function Nxb(){return this.a.c};var kL=mdb(bie,'TreeSet',208);bcb(966,1,{},Rxb);_.Ce=function Sxb(a,b){return Pxb(this.a,a,b)};var mL=mdb(rke,'BinaryOperator/lambda$0$Type',966);bcb(967,1,{},Txb);_.Ce=function Uxb(a,b){return Qxb(this.a,a,b)};var nL=mdb(rke,'BinaryOperator/lambda$1$Type',967);bcb(846,1,{},Vxb);_.Kb=function Wxb(a){return a};var oL=mdb(rke,'Function/lambda$0$Type',846);bcb(431,1,Oie,Xxb);_.Mb=function Yxb(a){return !this.a.Mb(a)};var pL=mdb(rke,'Predicate/lambda$2$Type',431);bcb(572,1,{572:1});var qL=mdb(ske,'Handler',572);bcb(2007,1,Qhe);_.ne=function _xb(){return 'DUMMY'};_.Ib=function ayb(){return this.ne()};var Zxb;var sL=mdb(ske,'Level',2007);bcb(1621,2007,Qhe,byb);_.ne=function cyb(){return 'INFO'};var rL=mdb(ske,'Level/LevelInfo',1621);bcb(1640,1,{},gyb);var dyb;var tL=mdb(ske,'LogManager',1640);bcb(1780,1,Qhe,iyb);_.b=null;var uL=mdb(ske,'LogRecord',1780);bcb(512,1,{512:1},wyb);_.e=false;var jyb=false,kyb=false,lyb=false,myb=false,nyb=false;var vL=mdb(ske,'Logger',512);bcb(819,572,{572:1},zyb);var wL=mdb(ske,'SimpleConsoleLogHandler',819);bcb(132,22,{3:1,35:1,22:1,132:1},Gyb);var Cyb,Dyb,Eyb;var xL=ndb(vke,'Collector/Characteristics',132,CI,Iyb,Hyb);var Jyb;bcb(744,1,{},Lyb);var yL=mdb(vke,'CollectorImpl',744);bcb(1060,1,{},Zyb);_.Ce=function $yb(a,b){return vwb(BD(a,206),BD(b,206))};var zL=mdb(vke,'Collectors/10methodref$merge$Type',1060);bcb(1061,1,{},_yb);_.Kb=function azb(a){return wwb(BD(a,206))};var AL=mdb(vke,'Collectors/11methodref$toString$Type',1061);bcb(1062,1,{},bzb);_.Kb=function czb(a){return Bcb(),_Pb(a)?true:false};var BL=mdb(vke,'Collectors/12methodref$test$Type',1062);bcb(251,1,{},dzb);_.Od=function ezb(a,b){BD(a,14).Fc(b)};var CL=mdb(vke,'Collectors/20methodref$add$Type',251);bcb(253,1,{},fzb);_.Ee=function gzb(){return new Rkb};var DL=mdb(vke,'Collectors/21methodref$ctor$Type',253);bcb(346,1,{},hzb);_.Ee=function izb(){return new Tqb};var EL=mdb(vke,'Collectors/23methodref$ctor$Type',346);bcb(347,1,{},jzb);_.Od=function kzb(a,b){Qqb(BD(a,53),b)};var FL=mdb(vke,'Collectors/24methodref$add$Type',347);bcb(1055,1,{},lzb);_.Ce=function mzb(a,b){return Myb(BD(a,15),BD(b,14))};var GL=mdb(vke,'Collectors/4methodref$addAll$Type',1055);bcb(1059,1,{},nzb);_.Od=function ozb(a,b){uwb(BD(a,206),BD(b,475))};var HL=mdb(vke,'Collectors/9methodref$add$Type',1059);bcb(1058,1,{},pzb);_.Ee=function qzb(){return new xwb(this.a,this.b,this.c)};var IL=mdb(vke,'Collectors/lambda$15$Type',1058);bcb(1063,1,{},rzb);_.Ee=function szb(){var a;return a=new $rb,Xrb(a,(Bcb(),false),new Rkb),Xrb(a,true,new Rkb),a};var JL=mdb(vke,'Collectors/lambda$22$Type',1063);bcb(1064,1,{},tzb);_.Ee=function uzb(){return OC(GC(SI,1),Uhe,1,5,[this.a])};var KL=mdb(vke,'Collectors/lambda$25$Type',1064);bcb(1065,1,{},vzb);_.Od=function wzb(a,b){Oyb(this.a,CD(a))};var LL=mdb(vke,'Collectors/lambda$26$Type',1065);bcb(1066,1,{},xzb);_.Ce=function yzb(a,b){return Pyb(this.a,CD(a),CD(b))};var ML=mdb(vke,'Collectors/lambda$27$Type',1066);bcb(1067,1,{},zzb);_.Kb=function Azb(a){return CD(a)[0]};var NL=mdb(vke,'Collectors/lambda$28$Type',1067);bcb(713,1,{},Czb);_.Ce=function Dzb(a,b){return Bzb(a,b)};var OL=mdb(vke,'Collectors/lambda$4$Type',713);bcb(252,1,{},Ezb);_.Ce=function Fzb(a,b){return Ryb(BD(a,14),BD(b,14))};var PL=mdb(vke,'Collectors/lambda$42$Type',252);bcb(348,1,{},Gzb);_.Ce=function Hzb(a,b){return Syb(BD(a,53),BD(b,53))};var QL=mdb(vke,'Collectors/lambda$50$Type',348);bcb(349,1,{},Izb);_.Kb=function Jzb(a){return BD(a,53)};var RL=mdb(vke,'Collectors/lambda$51$Type',349);bcb(1054,1,{},Kzb);_.Od=function Lzb(a,b){Tyb(this.a,BD(a,83),b)};var SL=mdb(vke,'Collectors/lambda$7$Type',1054);bcb(1056,1,{},Mzb);_.Ce=function Nzb(a,b){return Vyb(BD(a,83),BD(b,83),new lzb)};var TL=mdb(vke,'Collectors/lambda$8$Type',1056);bcb(1057,1,{},Ozb);_.Kb=function Pzb(a){return Uyb(this.a,BD(a,83))};var UL=mdb(vke,'Collectors/lambda$9$Type',1057);bcb(539,1,{});_.He=function Wzb(){Qzb(this)};_.d=false;var zM=mdb(vke,'TerminatableStream',539);bcb(812,539,wke,bAb);_.He=function cAb(){Qzb(this)};var ZL=mdb(vke,'DoubleStreamImpl',812);bcb(1784,721,pie,fAb);_.ye=function hAb(a){return eAb(this,BD(a,182))};_.a=null;var WL=mdb(vke,'DoubleStreamImpl/2',1784);bcb(1785,1,eke,iAb);_.we=function jAb(a){gAb(this.a,a)};var VL=mdb(vke,'DoubleStreamImpl/2/lambda$0$Type',1785);bcb(1782,1,eke,kAb);_.we=function lAb(a){dAb(this.a,a)};var XL=mdb(vke,'DoubleStreamImpl/lambda$0$Type',1782);bcb(1783,1,eke,mAb);_.we=function nAb(a){Epb(this.a,a)};var YL=mdb(vke,'DoubleStreamImpl/lambda$2$Type',1783);bcb(1358,720,pie,rAb);_.ye=function sAb(a){return qAb(this,BD(a,196))};_.a=0;_.b=0;_.c=0;var $L=mdb(vke,'IntStream/5',1358);bcb(787,539,wke,vAb);_.He=function wAb(){Qzb(this)};_.Ie=function xAb(){return Tzb(this),this.a};var bM=mdb(vke,'IntStreamImpl',787);bcb(788,539,wke,yAb);_.He=function zAb(){Qzb(this)};_.Ie=function AAb(){return Tzb(this),Ivb(),Hvb};var _L=mdb(vke,'IntStreamImpl/Empty',788);bcb(1463,1,sie,BAb);_.ud=function CAb(a){crb(this.a,a)};var aM=mdb(vke,'IntStreamImpl/lambda$4$Type',1463);var xM=odb(vke,'Stream');bcb(30,539,{525:1,670:1,833:1},YAb);_.He=function ZAb(){Qzb(this)};var DAb;var wM=mdb(vke,'StreamImpl',30);bcb(845,1,{},bBb);_.ld=function cBb(a){return aBb(a)};var cM=mdb(vke,'StreamImpl/0methodref$lambda$2$Type',845);bcb(1084,540,pie,fBb);_.sd=function gBb(a){while(dBb(this)){if(this.a.sd(a)){return true}else{Qzb(this.b);this.b=null;this.a=null}}return false};var eM=mdb(vke,'StreamImpl/1',1084);bcb(1085,1,qie,hBb);_.td=function iBb(a){eBb(this.a,BD(a,833))};var dM=mdb(vke,'StreamImpl/1/lambda$0$Type',1085);bcb(1086,1,Oie,jBb);_.Mb=function kBb(a){return Qqb(this.a,a)};var fM=mdb(vke,'StreamImpl/1methodref$add$Type',1086);bcb(1087,540,pie,lBb);_.sd=function mBb(a){var b;if(!this.a){b=new Rkb;this.b.a.Nb(new nBb(b));mmb();Okb(b,this.c);this.a=new Kub(b,16)}return Jub(this.a,a)};_.a=null;var hM=mdb(vke,'StreamImpl/5',1087);bcb(1088,1,qie,nBb);_.td=function oBb(a){Ekb(this.a,a)};var gM=mdb(vke,'StreamImpl/5/2methodref$add$Type',1088);bcb(722,540,pie,qBb);_.sd=function rBb(a){this.b=false;while(!this.b&&this.c.sd(new sBb(this,a)));return this.b};_.b=false;var jM=mdb(vke,'StreamImpl/FilterSpliterator',722);bcb(1079,1,qie,sBb);_.td=function tBb(a){pBb(this.a,this.b,a)};var iM=mdb(vke,'StreamImpl/FilterSpliterator/lambda$0$Type',1079);bcb(1075,721,pie,wBb);_.ye=function xBb(a){return vBb(this,BD(a,182))};var lM=mdb(vke,'StreamImpl/MapToDoubleSpliterator',1075);bcb(1078,1,qie,yBb);_.td=function zBb(a){uBb(this.a,this.b,a)};var kM=mdb(vke,'StreamImpl/MapToDoubleSpliterator/lambda$0$Type',1078);bcb(1074,720,pie,CBb);_.ye=function DBb(a){return BBb(this,BD(a,196))};var nM=mdb(vke,'StreamImpl/MapToIntSpliterator',1074);bcb(1077,1,qie,EBb);_.td=function FBb(a){ABb(this.a,this.b,a)};var mM=mdb(vke,'StreamImpl/MapToIntSpliterator/lambda$0$Type',1077);bcb(719,540,pie,IBb);_.sd=function JBb(a){return HBb(this,a)};var pM=mdb(vke,'StreamImpl/MapToObjSpliterator',719);bcb(1076,1,qie,KBb);_.td=function LBb(a){GBb(this.a,this.b,a)};var oM=mdb(vke,'StreamImpl/MapToObjSpliterator/lambda$0$Type',1076);bcb(618,1,qie,NBb);_.td=function OBb(a){MBb(this,a)};var qM=mdb(vke,'StreamImpl/ValueConsumer',618);bcb(1080,1,qie,PBb);_.td=function QBb(a){EAb()};var rM=mdb(vke,'StreamImpl/lambda$0$Type',1080);bcb(1081,1,qie,RBb);_.td=function SBb(a){EAb()};var sM=mdb(vke,'StreamImpl/lambda$1$Type',1081);bcb(1082,1,{},TBb);_.Ce=function UBb(a,b){return $Ab(this.a,a,b)};var uM=mdb(vke,'StreamImpl/lambda$4$Type',1082);bcb(1083,1,qie,VBb);_.td=function WBb(a){_Ab(this.b,this.a,a)};var vM=mdb(vke,'StreamImpl/lambda$5$Type',1083);bcb(1089,1,qie,XBb);_.td=function YBb(a){Xzb(this.a,BD(a,365))};var yM=mdb(vke,'TerminatableStream/lambda$0$Type',1089);bcb(2041,1,{});bcb(1914,1,{},iCb);var AM=mdb('javaemul.internal','ConsoleLogger',1914);bcb(2038,1,{});var ECb=0;var GCb,HCb=0,ICb;bcb(1768,1,qie,OCb);_.td=function PCb(a){BD(a,308)};var BM=mdb(Cke,'BowyerWatsonTriangulation/lambda$0$Type',1768);bcb(1769,1,qie,QCb);_.td=function RCb(a){ye(this.a,BD(a,308).e)};var CM=mdb(Cke,'BowyerWatsonTriangulation/lambda$1$Type',1769);bcb(1770,1,qie,SCb);_.td=function TCb(a){BD(a,168)};var DM=mdb(Cke,'BowyerWatsonTriangulation/lambda$2$Type',1770);bcb(1765,1,Dke,WCb);_.ue=function XCb(a,b){return VCb(this.a,BD(a,168),BD(b,168))};_.Fb=function YCb(a){return this===a};_.ve=function ZCb(){return new tpb(this)};var EM=mdb(Cke,'NaiveMinST/lambda$0$Type',1765);bcb(499,1,{},_Cb);var FM=mdb(Cke,'NodeMicroLayout',499);bcb(168,1,{168:1},aDb);_.Fb=function bDb(a){var b;if(JD(a,168)){b=BD(a,168);return wtb(this.a,b.a)&&wtb(this.b,b.b)||wtb(this.a,b.b)&&wtb(this.b,b.a)}else{return false}};_.Hb=function cDb(){return xtb(this.a)+xtb(this.b)};var GM=mdb(Cke,'TEdge',168);bcb(308,1,{308:1},eDb);_.Fb=function fDb(a){var b;if(JD(a,308)){b=BD(a,308);return dDb(this,b.a)&&dDb(this,b.b)&&dDb(this,b.c)}else{return false}};_.Hb=function gDb(){return xtb(this.a)+xtb(this.b)+xtb(this.c)};var HM=mdb(Cke,'TTriangle',308);bcb(221,1,{221:1},hDb);var IM=mdb(Cke,'Tree',221);bcb(1254,1,{},jDb);var KM=mdb(Eke,'Scanline',1254);var JM=odb(Eke,Fke);bcb(1692,1,{},mDb);var LM=mdb(Gke,'CGraph',1692);bcb(307,1,{307:1},oDb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=Qje;var NM=mdb(Gke,'CGroup',307);bcb(815,1,{},sDb);var MM=mdb(Gke,'CGroup/CGroupBuilder',815);bcb(57,1,{57:1},tDb);_.Ib=function uDb(){var a;if(this.j){return GD(this.j.Kb(this))}return fdb(PM),PM.o+'@'+(a=FCb(this)>>>0,a.toString(16))};_.f=0;_.i=Qje;var PM=mdb(Gke,'CNode',57);bcb(814,1,{},zDb);var OM=mdb(Gke,'CNode/CNodeBuilder',814);var EDb;bcb(1525,1,{},GDb);_.Oe=function HDb(a,b){return 0};_.Pe=function IDb(a,b){return 0};var QM=mdb(Gke,Ike,1525);bcb(1790,1,{},JDb);_.Le=function KDb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=Pje;for(d=new olb(a.a.b);d.a<d.c.c.length;){b=BD(mlb(d),57);j=$wnd.Math.min(j,b.a.j.d.c+b.b.a)}n=new Psb;for(g=new olb(a.a.a);g.a<g.c.c.length;){f=BD(mlb(g),307);f.k=j;f.g==0&&(Gsb(n,f,n.c.b,n.c),true)}while(n.b!=0){f=BD(n.b==0?null:(sCb(n.b!=0),Nsb(n,n.a.a)),307);e=f.j.d.c;for(m=f.a.a.ec().Kc();m.Ob();){k=BD(m.Pb(),57);p=f.k+k.b.a;!UDb(a,f,a.d)||k.d.c<p?(k.i=p):(k.i=k.d.c)}e-=f.j.i;f.b+=e;a.d==(ead(),bad)||a.d==_9c?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=BD(l.Pb(),57);for(i=k.c.Kc();i.Ob();){h=BD(i.Pb(),57);fad(a.d)?(o=a.g.Oe(k,h)):(o=a.g.Pe(k,h));h.a.k=$wnd.Math.max(h.a.k,k.i+k.d.b+o-h.b.a);VDb(a,h,a.d)&&(h.a.k=$wnd.Math.max(h.a.k,h.d.c-h.b.a));--h.a.g;h.a.g==0&&Dsb(n,h.a)}}}for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.d.c=b.i}};var RM=mdb(Gke,'LongestPathCompaction',1790);bcb(1690,1,{},cEb);_.e=false;var LDb,MDb,NDb;var TM=mdb(Gke,Nke,1690);bcb(1691,1,qie,dEb);_.td=function eEb(a){WDb(this.a,BD(a,46))};var SM=mdb(Gke,Oke,1691);bcb(1791,1,{},fEb);_.Me=function gEb(a){var b,c,d,e,f,g,h;for(c=new olb(a.a.b);c.a<c.c.c.length;){b=BD(mlb(c),57);b.c.$b()}for(e=new olb(a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);for(g=new olb(a.a.b);g.a<g.c.c.length;){f=BD(mlb(g),57);if(d==f){continue}if(!!d.a&&d.a==f.a){continue}fad(a.d)?(h=a.g.Pe(d,f)):(h=a.g.Oe(d,f));(f.d.c>d.d.c||d.d.c==f.d.c&&d.d.b<f.d.b)&&BDb(f.d.d+f.d.a+h,d.d.d)&&DDb(f.d.d,d.d.d+d.d.a+h)&&d.c.Fc(f)}}};var UM=mdb(Gke,'QuadraticConstraintCalculation',1791);bcb(522,1,{522:1},lEb);_.a=false;_.b=false;_.c=false;_.d=false;var VM=mdb(Gke,Pke,522);bcb(803,1,{},oEb);_.Me=function pEb(a){this.c=a;nEb(this,new GEb)};var _M=mdb(Gke,Qke,803);bcb(1718,1,{679:1},uEb);_.Ke=function vEb(a){rEb(this,BD(a,464))};var XM=mdb(Gke,Rke,1718);bcb(1719,1,Dke,xEb);_.ue=function yEb(a,b){return wEb(BD(a,57),BD(b,57))};_.Fb=function zEb(a){return this===a};_.ve=function AEb(){return new tpb(this)};var WM=mdb(Gke,Ske,1719);bcb(464,1,{464:1},BEb);_.a=false;var YM=mdb(Gke,Tke,464);bcb(1720,1,Dke,CEb);_.ue=function DEb(a,b){return qEb(BD(a,464),BD(b,464))};_.Fb=function EEb(a){return this===a};_.ve=function FEb(){return new tpb(this)};var ZM=mdb(Gke,Uke,1720);bcb(1721,1,Vke,GEb);_.Lb=function HEb(a){return BD(a,57),true};_.Fb=function IEb(a){return this===a};_.Mb=function JEb(a){return BD(a,57),true};var $M=mdb(Gke,'ScanlineConstraintCalculator/lambda$1$Type',1721);bcb(428,22,{3:1,35:1,22:1,428:1},NEb);var KEb,LEb;var aN=ndb(Wke,'HighLevelSortingCriterion',428,CI,PEb,OEb);var QEb;bcb(427,22,{3:1,35:1,22:1,427:1},VEb);var SEb,TEb;var bN=ndb(Wke,'LowLevelSortingCriterion',427,CI,XEb,WEb);var YEb;var C0=odb(Xke,'ILayoutMetaDataProvider');bcb(853,1,ale,gFb);_.Qe=function hFb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yke),ble),'Polyomino Traversal Strategy'),'Traversal strategy for trying different candidate positions for polyominoes.'),eFb),(_5c(),V5c)),dN),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zke),ble),'Polyomino Secondary Sorting Criterion'),'Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion.'),cFb),V5c),bN),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ke),ble),'Polyomino Primary Sorting Criterion'),'Possible primary sorting criteria for the processing order of polyominoes.'),aFb),V5c),aN),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ke),ble),'Fill Polyominoes'),'Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area.'),(Bcb(),true)),T5c),wI),pqb(L5c))))};var $Eb,_Eb,aFb,bFb,cFb,dFb,eFb;var cN=mdb(Wke,'PolyominoOptions',853);bcb(250,22,{3:1,35:1,22:1,250:1},sFb);var iFb,jFb,kFb,lFb,mFb,nFb,oFb,pFb,qFb;var dN=ndb(Wke,'TraversalStrategy',250,CI,uFb,tFb);var vFb;bcb(213,1,{213:1},yFb);_.Ib=function zFb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var fN=mdb(cle,'NEdge',213);bcb(176,1,{},FFb);var eN=mdb(cle,'NEdge/NEdgeBuilder',176);bcb(653,1,{},KFb);var gN=mdb(cle,'NGraph',653);bcb(121,1,{121:1},MFb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var jN=mdb(cle,'NNode',121);bcb(795,1,cke,PFb);_.Jc=function XFb(a){reb(this,a)};_.Lc=function cGb(){return new YAb(null,new Kub(this,16))};_.ad=function hGb(a){ktb(this,a)};_.Nc=function iGb(){return new Kub(this,16)};_.Oc=function jGb(){return new YAb(null,new Kub(this,16))};_.Vc=function QFb(a,b){++this.b;Dkb(this.a,a,b)};_.Fc=function RFb(a){return NFb(this,a)};_.Wc=function SFb(a,b){++this.b;return Fkb(this.a,a,b)};_.Gc=function TFb(a){++this.b;return Gkb(this.a,a)};_.$b=function UFb(){++this.b;this.a.c=KC(SI,Uhe,1,0,5,1)};_.Hc=function VFb(a){return Jkb(this.a,a,0)!=-1};_.Ic=function WFb(a){return Be(this.a,a)};_.Xb=function YFb(a){return Ikb(this.a,a)};_.Xc=function ZFb(a){return Jkb(this.a,a,0)};_.dc=function $Fb(){return this.a.c.length==0};_.Kc=function _Fb(){return vr(new olb(this.a))};_.Yc=function aGb(){throw vbb(new bgb)};_.Zc=function bGb(a){throw vbb(new bgb)};_.$c=function dGb(a){++this.b;return Kkb(this.a,a)};_.Mc=function eGb(a){return OFb(this,a)};_._c=function fGb(a,b){++this.b;return Nkb(this.a,a,b)};_.gc=function gGb(){return this.a.c.length};_.bd=function kGb(a,b){return new Jib(this.a,a,b)};_.Pc=function lGb(){return Pkb(this.a)};_.Qc=function mGb(a){return Qkb(this.a,a)};_.b=0;var hN=mdb(cle,'NNode/ChangeAwareArrayList',795);bcb(269,1,{},pGb);var iN=mdb(cle,'NNode/NNodeBuilder',269);bcb(1630,1,{},KGb);_.a=false;_.f=Ohe;_.j=0;var kN=mdb(cle,'NetworkSimplex',1630);bcb(1294,1,qie,QGb);_.td=function RGb(a){PGb(this.a,BD(a,680),true,false)};var lN=mdb(ele,'NodeLabelAndSizeCalculator/lambda$0$Type',1294);bcb(558,1,{},YGb);_.b=true;_.c=true;_.d=true;_.e=true;var mN=mdb(ele,'NodeMarginCalculator',558);bcb(212,1,{212:1});_.j=false;_.k=false;var oN=mdb(fle,'Cell',212);bcb(124,212,{124:1,212:1},aHb);_.Re=function bHb(){return _Gb(this)};_.Se=function cHb(){var a;a=this.n;return this.a.a+a.b+a.c};var nN=mdb(fle,'AtomicCell',124);bcb(232,22,{3:1,35:1,22:1,232:1},hHb);var dHb,eHb,fHb;var pN=ndb(fle,'ContainerArea',232,CI,jHb,iHb);var kHb;bcb(326,212,hle);var qN=mdb(fle,'ContainerCell',326);bcb(1473,326,hle,FHb);_.Re=function GHb(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].Re()):(a=EHb(this,AHb(this,true)));return a>0?a+this.n.d+this.n.a:0};_.Se=function HHb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].Se())}else if(this.g){e=EHb(this,yHb(this,null,true))}else{for(b=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),c=0,d=b.length;c<d;++c){a=b[c];e=$wnd.Math.max(e,EHb(this,yHb(this,a,true)))}}return e>0?e+this.n.b+this.n.c:0};_.Te=function IHb(){var a,b,c,d,e;if(this.g){a=yHb(this,null,false);for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d<e;++d){b=c[d];wHb(this,b,a)}}else{for(c=(gHb(),OC(GC(pN,1),Kie,232,0,[dHb,eHb,fHb])),d=0,e=c.length;d<e;++d){b=c[d];a=yHb(this,b,false);wHb(this,b,a)}}};_.Ue=function JHb(){var a,b,c,d;b=this.i;a=this.n;d=AHb(this,false);uHb(this,(gHb(),dHb),b.d+a.d,d);uHb(this,fHb,b.d+b.a-a.a-d[2],d);c=b.a-a.d-a.a;if(d[0]>0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);uHb(this,eHb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var rHb=0,sHb=0;var rN=mdb(fle,'GridContainerCell',1473);bcb(461,22,{3:1,35:1,22:1,461:1},OHb);var KHb,LHb,MHb;var sN=ndb(fle,'HorizontalLabelAlignment',461,CI,QHb,PHb);var RHb;bcb(306,212,{212:1,306:1},aIb,bIb,cIb);_.Re=function dIb(){return YHb(this)};_.Se=function eIb(){return ZHb(this)};_.a=0;_.c=false;var tN=mdb(fle,'LabelCell',306);bcb(244,326,{212:1,326:1,244:1},mIb);_.Re=function nIb(){return fIb(this)};_.Se=function oIb(){return gIb(this)};_.Te=function rIb(){hIb(this)};_.Ue=function sIb(){iIb(this)};_.b=0;_.c=0;_.d=false;var yN=mdb(fle,'StripContainerCell',244);bcb(1626,1,Oie,tIb);_.Mb=function uIb(a){return pIb(BD(a,212))};var uN=mdb(fle,'StripContainerCell/lambda$0$Type',1626);bcb(1627,1,{},vIb);_.Fe=function wIb(a){return BD(a,212).Se()};var vN=mdb(fle,'StripContainerCell/lambda$1$Type',1627);bcb(1628,1,Oie,xIb);_.Mb=function yIb(a){return qIb(BD(a,212))};var wN=mdb(fle,'StripContainerCell/lambda$2$Type',1628);bcb(1629,1,{},zIb);_.Fe=function AIb(a){return BD(a,212).Re()};var xN=mdb(fle,'StripContainerCell/lambda$3$Type',1629);bcb(462,22,{3:1,35:1,22:1,462:1},FIb);var BIb,CIb,DIb;var zN=ndb(fle,'VerticalLabelAlignment',462,CI,HIb,GIb);var IIb;bcb(789,1,{},LIb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var CN=mdb(nle,'NodeContext',789);bcb(1471,1,Dke,OIb);_.ue=function PIb(a,b){return NIb(BD(a,61),BD(b,61))};_.Fb=function QIb(a){return this===a};_.ve=function RIb(){return new tpb(this)};var AN=mdb(nle,'NodeContext/0methodref$comparePortSides$Type',1471);bcb(1472,1,Dke,SIb);_.ue=function TIb(a,b){return MIb(BD(a,111),BD(b,111))};_.Fb=function UIb(a){return this===a};_.ve=function VIb(){return new tpb(this)};var BN=mdb(nle,'NodeContext/1methodref$comparePortContexts$Type',1472);bcb(159,22,{3:1,35:1,22:1,159:1},tJb);var WIb,XIb,YIb,ZIb,$Ib,_Ib,aJb,bJb,cJb,dJb,eJb,fJb,gJb,hJb,iJb,jJb,kJb,lJb,mJb,nJb,oJb,pJb;var DN=ndb(nle,'NodeLabelLocation',159,CI,wJb,vJb);var xJb;bcb(111,1,{111:1},AJb);_.a=false;var EN=mdb(nle,'PortContext',111);bcb(1476,1,qie,TJb);_.td=function UJb(a){WHb(BD(a,306))};var FN=mdb(qle,rle,1476);bcb(1477,1,Oie,VJb);_.Mb=function WJb(a){return !!BD(a,111).c};var GN=mdb(qle,sle,1477);bcb(1478,1,qie,XJb);_.td=function YJb(a){WHb(BD(a,111).c)};var HN=mdb(qle,'LabelPlacer/lambda$2$Type',1478);var ZJb;bcb(1475,1,qie,fKb);_.td=function gKb(a){$Jb();zJb(BD(a,111))};var IN=mdb(qle,'NodeLabelAndSizeUtilities/lambda$0$Type',1475);bcb(790,1,qie,mKb);_.td=function nKb(a){kKb(this.b,this.c,this.a,BD(a,181))};_.a=false;_.c=false;var JN=mdb(qle,'NodeLabelCellCreator/lambda$0$Type',790);bcb(1474,1,qie,tKb);_.td=function uKb(a){sKb(this.a,BD(a,181))};var KN=mdb(qle,'PortContextCreator/lambda$0$Type',1474);var BKb;bcb(1829,1,{},VKb);var MN=mdb(ule,'GreedyRectangleStripOverlapRemover',1829);bcb(1830,1,Dke,XKb);_.ue=function YKb(a,b){return WKb(BD(a,222),BD(b,222))};_.Fb=function ZKb(a){return this===a};_.ve=function $Kb(){return new tpb(this)};var LN=mdb(ule,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1830);bcb(1786,1,{},fLb);_.a=5;_.e=0;var SN=mdb(ule,'RectangleStripOverlapRemover',1786);bcb(1787,1,Dke,jLb);_.ue=function kLb(a,b){return gLb(BD(a,222),BD(b,222))};_.Fb=function lLb(a){return this===a};_.ve=function mLb(){return new tpb(this)};var NN=mdb(ule,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1787);bcb(1789,1,Dke,nLb);_.ue=function oLb(a,b){return hLb(BD(a,222),BD(b,222))};_.Fb=function pLb(a){return this===a};_.ve=function qLb(){return new tpb(this)};var ON=mdb(ule,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1789);bcb(406,22,{3:1,35:1,22:1,406:1},wLb);var rLb,sLb,tLb,uLb;var PN=ndb(ule,'RectangleStripOverlapRemover/OverlapRemovalDirection',406,CI,yLb,xLb);var zLb;bcb(222,1,{222:1},BLb);var QN=mdb(ule,'RectangleStripOverlapRemover/RectangleNode',222);bcb(1788,1,qie,CLb);_.td=function DLb(a){aLb(this.a,BD(a,222))};var RN=mdb(ule,'RectangleStripOverlapRemover/lambda$1$Type',1788);bcb(1304,1,Dke,GLb);_.ue=function HLb(a,b){return FLb(BD(a,167),BD(b,167))};_.Fb=function ILb(a){return this===a};_.ve=function JLb(){return new tpb(this)};var WN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1304);bcb(1307,1,{},KLb);_.Kb=function LLb(a){return BD(a,324).a};var TN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1307);bcb(1308,1,Oie,MLb);_.Mb=function NLb(a){return BD(a,323).a};var UN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1308);bcb(1309,1,Oie,OLb);_.Mb=function PLb(a){return BD(a,323).a};var VN=mdb(wle,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1309);bcb(1302,1,Dke,RLb);_.ue=function SLb(a,b){return QLb(BD(a,167),BD(b,167))};_.Fb=function TLb(a){return this===a};_.ve=function ULb(){return new tpb(this)};var YN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1302);bcb(1305,1,{},VLb);_.Kb=function WLb(a){return BD(a,324).a};var XN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1305);bcb(767,1,Dke,YLb);_.ue=function ZLb(a,b){return XLb(BD(a,167),BD(b,167))};_.Fb=function $Lb(a){return this===a};_.ve=function _Lb(){return new tpb(this)};var ZN=mdb(wle,'PolyominoCompactor/MinNumOfExtensionsComparator',767);bcb(1300,1,Dke,bMb);_.ue=function cMb(a,b){return aMb(BD(a,321),BD(b,321))};_.Fb=function dMb(a){return this===a};_.ve=function eMb(){return new tpb(this)};var _N=mdb(wle,'PolyominoCompactor/MinPerimeterComparator',1300);bcb(1301,1,Dke,gMb);_.ue=function hMb(a,b){return fMb(BD(a,321),BD(b,321))};_.Fb=function iMb(a){return this===a};_.ve=function jMb(){return new tpb(this)};var $N=mdb(wle,'PolyominoCompactor/MinPerimeterComparatorWithShape',1301);bcb(1303,1,Dke,lMb);_.ue=function mMb(a,b){return kMb(BD(a,167),BD(b,167))};_.Fb=function nMb(a){return this===a};_.ve=function oMb(){return new tpb(this)};var bO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1303);bcb(1306,1,{},pMb);_.Kb=function qMb(a){return BD(a,324).a};var aO=mdb(wle,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1306);bcb(777,1,{},tMb);_.Ce=function uMb(a,b){return sMb(this,BD(a,46),BD(b,167))};var cO=mdb(wle,'SuccessorCombination',777);bcb(644,1,{},wMb);_.Ce=function xMb(a,b){var c;return vMb((c=BD(a,46),BD(b,167),c))};var dO=mdb(wle,'SuccessorJitter',644);bcb(643,1,{},zMb);_.Ce=function AMb(a,b){var c;return yMb((c=BD(a,46),BD(b,167),c))};var eO=mdb(wle,'SuccessorLineByLine',643);bcb(568,1,{},CMb);_.Ce=function DMb(a,b){var c;return BMb((c=BD(a,46),BD(b,167),c))};var fO=mdb(wle,'SuccessorManhattan',568);bcb(1356,1,{},FMb);_.Ce=function GMb(a,b){var c;return EMb((c=BD(a,46),BD(b,167),c))};var gO=mdb(wle,'SuccessorMaxNormWindingInMathPosSense',1356);bcb(400,1,{},JMb);_.Ce=function KMb(a,b){return HMb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var iO=mdb(wle,'SuccessorQuadrantsGeneric',400);bcb(1357,1,{},LMb);_.Kb=function MMb(a){return BD(a,324).a};var hO=mdb(wle,'SuccessorQuadrantsGeneric/lambda$0$Type',1357);bcb(323,22,{3:1,35:1,22:1,323:1},SMb);_.a=false;var NMb,OMb,PMb,QMb;var jO=ndb(Ble,Cle,323,CI,UMb,TMb);var VMb;bcb(1298,1,{});_.Ib=function bNb(){var a,b,c,d,e,f;c=' ';a=meb(0);for(e=0;e<this.o;e++){c+=''+a.a;a=meb(XMb(a.a))}c+='\n';a=meb(0);for(f=0;f<this.p;f++){c+=''+a.a;a=meb(XMb(a.a));for(d=0;d<this.o;d++){b=_Mb(this,d,f);ybb(b,0)==0?(c+='_'):ybb(b,1)==0?(c+='X'):(c+='0')}c+='\n'}return qfb(c,0,c.length-1)};_.o=0;_.p=0;var nO=mdb(Ble,'TwoBitGrid',1298);bcb(321,1298,{321:1},pNb);_.j=0;_.k=0;var kO=mdb(Ble,'PlanarGrid',321);bcb(167,321,{321:1,167:1});_.g=0;_.i=0;var lO=mdb(Ble,'Polyomino',167);var P3=odb(Hle,Ile);bcb(134,1,Jle,zNb);_.Ye=function DNb(a,b){return xNb(this,a,b)};_.Ve=function ANb(){return uNb(this)};_.We=function BNb(a){return vNb(this,a)};_.Xe=function CNb(a){return wNb(this,a)};var R3=mdb(Hle,'MapPropertyHolder',134);bcb(1299,134,Jle,ENb);var mO=mdb(Ble,'Polyominoes',1299);var FNb=false,GNb,HNb;bcb(1766,1,qie,PNb);_.td=function QNb(a){JNb(BD(a,221))};var oO=mdb(Kle,'DepthFirstCompaction/0methodref$compactTree$Type',1766);bcb(810,1,qie,RNb);_.td=function SNb(a){MNb(this.a,BD(a,221))};var pO=mdb(Kle,'DepthFirstCompaction/lambda$1$Type',810);bcb(1767,1,qie,TNb);_.td=function UNb(a){NNb(this.a,this.b,this.c,BD(a,221))};var qO=mdb(Kle,'DepthFirstCompaction/lambda$2$Type',1767);var VNb,WNb;bcb(65,1,{65:1},aOb);var rO=mdb(Kle,'Node',65);bcb(1250,1,{},dOb);var wO=mdb(Kle,'ScanlineOverlapCheck',1250);bcb(1251,1,{679:1},hOb);_.Ke=function iOb(a){fOb(this,BD(a,440))};var tO=mdb(Kle,'ScanlineOverlapCheck/OverlapsScanlineHandler',1251);bcb(1252,1,Dke,kOb);_.ue=function lOb(a,b){return jOb(BD(a,65),BD(b,65))};_.Fb=function mOb(a){return this===a};_.ve=function nOb(){return new tpb(this)};var sO=mdb(Kle,'ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type',1252);bcb(440,1,{440:1},oOb);_.a=false;var uO=mdb(Kle,'ScanlineOverlapCheck/Timestamp',440);bcb(1253,1,Dke,pOb);_.ue=function qOb(a,b){return eOb(BD(a,440),BD(b,440))};_.Fb=function rOb(a){return this===a};_.ve=function sOb(){return new tpb(this)};var vO=mdb(Kle,'ScanlineOverlapCheck/lambda$0$Type',1253);bcb(550,1,{},tOb);var xO=mdb(Lle,'SVGImage',550);bcb(324,1,{324:1},uOb);_.Ib=function vOb(){return '('+this.a+She+this.b+She+this.c+')'};var yO=mdb(Lle,'UniqueTriple',324);bcb(209,1,Mle);var g0=mdb(Nle,'AbstractLayoutProvider',209);bcb(1132,209,Mle,yOb);_.Ze=function zOb(a,b){var c,d,e,f;Odd(b,Ole,1);this.a=Edb(ED(hkd(a,(CPb(),BPb))));if(ikd(a,rPb)){e=GD(hkd(a,rPb));c=h4c(n4c(),e);if(c){d=BD(hgd(c.f),209);d.Ze(a,Udd(b,1))}}f=new AQb(this.a);this.b=yQb(f,a);switch(BD(hkd(a,(nPb(),jPb)),481).g){case 0:BOb(new FOb,this.b);jkd(a,uPb,vNb(this.b,uPb));break;default:Zfb();}qQb(f);jkd(a,tPb,this.b);Qdd(b)};_.a=0;var zO=mdb(Ple,'DisCoLayoutProvider',1132);bcb(1244,1,{},FOb);_.c=false;_.e=0;_.f=0;var AO=mdb(Ple,'DisCoPolyominoCompactor',1244);bcb(561,1,{561:1},MOb);_.b=true;var BO=mdb(Qle,'DCComponent',561);bcb(394,22,{3:1,35:1,22:1,394:1},SOb);_.a=false;var NOb,OOb,POb,QOb;var CO=ndb(Qle,'DCDirection',394,CI,UOb,TOb);var VOb;bcb(266,134,{3:1,266:1,94:1,134:1},XOb);var DO=mdb(Qle,'DCElement',266);bcb(395,1,{395:1},ZOb);_.c=0;var EO=mdb(Qle,'DCExtension',395);bcb(755,134,Jle,aPb);var FO=mdb(Qle,'DCGraph',755);bcb(481,22,{3:1,35:1,22:1,481:1},dPb);var bPb;var GO=ndb(Rle,Sle,481,CI,fPb,ePb);var gPb;bcb(854,1,ale,oPb);_.Qe=function pPb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tle),Xle),'Connected Components Compaction Strategy'),'Strategy for packing different connected components in order to save space and enhance readability of a graph.'),kPb),(_5c(),V5c)),GO),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Ule),Xle),'Connected Components Layout Algorithm'),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),Z5c),ZI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vle),'debug'),'DCGraph'),'Access to the DCGraph is intended for the debug view,'),Y5c),SI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wle),'debug'),'List of Polyominoes'),'Access to the polyominoes is intended for the debug view,'),Y5c),SI),pqb(L5c))));DPb((new EPb,a))};var iPb,jPb,kPb,lPb,mPb;var HO=mdb(Rle,'DisCoMetaDataProvider',854);bcb(998,1,ale,EPb);_.Qe=function FPb(a){DPb(a)};var qPb,rPb,sPb,tPb,uPb,vPb,wPb,xPb,yPb,zPb,APb,BPb;var JO=mdb(Rle,'DisCoOptions',998);bcb(999,1,{},GPb);_.$e=function HPb(){var a;return a=new yOb,a};_._e=function IPb(a){};var IO=mdb(Rle,'DisCoOptions/DiscoFactory',999);bcb(562,167,{321:1,167:1,562:1},MPb);_.a=0;_.b=0;_.c=0;_.d=0;var KO=mdb('org.eclipse.elk.alg.disco.structures','DCPolyomino',562);var NPb,OPb,PPb;bcb(1268,1,Oie,aQb);_.Mb=function bQb(a){return _Pb(a)};var LO=mdb(bme,'ElkGraphComponentsProcessor/lambda$0$Type',1268);bcb(1269,1,{},cQb);_.Kb=function dQb(a){return QPb(),jtd(BD(a,79))};var MO=mdb(bme,'ElkGraphComponentsProcessor/lambda$1$Type',1269);bcb(1270,1,Oie,eQb);_.Mb=function fQb(a){return WPb(BD(a,79))};var NO=mdb(bme,'ElkGraphComponentsProcessor/lambda$2$Type',1270);bcb(1271,1,{},gQb);_.Kb=function hQb(a){return QPb(),ltd(BD(a,79))};var OO=mdb(bme,'ElkGraphComponentsProcessor/lambda$3$Type',1271);bcb(1272,1,Oie,iQb);_.Mb=function jQb(a){return XPb(BD(a,79))};var PO=mdb(bme,'ElkGraphComponentsProcessor/lambda$4$Type',1272);bcb(1273,1,Oie,kQb);_.Mb=function lQb(a){return YPb(this.a,BD(a,79))};var QO=mdb(bme,'ElkGraphComponentsProcessor/lambda$5$Type',1273);bcb(1274,1,{},mQb);_.Kb=function nQb(a){return ZPb(this.a,BD(a,79))};var RO=mdb(bme,'ElkGraphComponentsProcessor/lambda$6$Type',1274);bcb(1241,1,{},AQb);_.a=0;var UO=mdb(bme,'ElkGraphTransformer',1241);bcb(1242,1,{},CQb);_.Od=function DQb(a,b){BQb(this,BD(a,160),BD(b,266))};var TO=mdb(bme,'ElkGraphTransformer/OffsetApplier',1242);bcb(1243,1,qie,FQb);_.td=function GQb(a){EQb(this,BD(a,8))};var SO=mdb(bme,'ElkGraphTransformer/OffsetApplier/OffSetToChainApplier',1243);bcb(753,1,{},MQb);var WO=mdb(gme,hme,753);bcb(1232,1,Dke,OQb);_.ue=function PQb(a,b){return NQb(BD(a,231),BD(b,231))};_.Fb=function QQb(a){return this===a};_.ve=function RQb(){return new tpb(this)};var VO=mdb(gme,ime,1232);bcb(740,209,Mle,ZQb);_.Ze=function $Qb(a,b){WQb(this,a,b)};var XO=mdb(gme,'ForceLayoutProvider',740);bcb(357,134,{3:1,357:1,94:1,134:1});var bP=mdb(jme,'FParticle',357);bcb(559,357,{3:1,559:1,357:1,94:1,134:1},aRb);_.Ib=function bRb(){var a;if(this.a){a=Jkb(this.a.a,this,0);return a>=0?'b'+a+'['+fRb(this.a)+']':'b['+fRb(this.a)+']'}return 'b_'+FCb(this)};var YO=mdb(jme,'FBendpoint',559);bcb(282,134,{3:1,282:1,94:1,134:1},gRb);_.Ib=function hRb(){return fRb(this)};var ZO=mdb(jme,'FEdge',282);bcb(231,134,{3:1,231:1,94:1,134:1},kRb);var $O=mdb(jme,'FGraph',231);bcb(447,357,{3:1,447:1,357:1,94:1,134:1},mRb);_.Ib=function nRb(){return this.b==null||this.b.length==0?'l['+fRb(this.a)+']':'l_'+this.b};var _O=mdb(jme,'FLabel',447);bcb(144,357,{3:1,144:1,357:1,94:1,134:1},pRb);_.Ib=function qRb(){return oRb(this)};_.b=0;var aP=mdb(jme,'FNode',144);bcb(2003,1,{});_.bf=function vRb(a){rRb(this,a)};_.cf=function wRb(){sRb(this)};_.d=0;var cP=mdb(lme,'AbstractForceModel',2003);bcb(631,2003,{631:1},xRb);_.af=function zRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);c=jRb(this.e,a,b);c>0?(f=-yRb(d,this.c)*c):(f=CRb(d,this.b)*BD(vNb(a,(wSb(),oSb)),19).a);Y6c(e,f/g);return e};_.bf=function ARb(a){rRb(this,a);this.a=BD(vNb(a,(wSb(),eSb)),19).a;this.c=Edb(ED(vNb(a,uSb)));this.b=Edb(ED(vNb(a,qSb)))};_.df=function BRb(a){return a<this.a};_.a=0;_.b=0;_.c=0;var dP=mdb(lme,'EadesModel',631);bcb(632,2003,{632:1},DRb);_.af=function FRb(a,b){var c,d,e,f,g;uRb(this.f,a,b);e=c7c(R6c(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-U6c(a.e)/2-U6c(b.e)/2);f=JRb(d,this.a)*BD(vNb(a,(wSb(),oSb)),19).a;c=jRb(this.e,a,b);c>0&&(f-=ERb(d,this.a)*c);Y6c(e,f*this.b/g);return e};_.bf=function GRb(a){var b,c,d,e,f,g,h;rRb(this,a);this.b=Edb(ED(vNb(a,(wSb(),vSb))));this.c=this.b/BD(vNb(a,eSb),19).a;d=a.e.c.length;f=0;e=0;for(h=new olb(a.e);h.a<h.c.c.length;){g=BD(mlb(h),144);f+=g.e.a;e+=g.e.b}b=f*e;c=Edb(ED(vNb(a,uSb)))*ple;this.a=$wnd.Math.sqrt(b/(2*d))*c};_.cf=function HRb(){sRb(this);this.b-=this.c};_.df=function IRb(a){return this.b>0};_.a=0;_.b=0;_.c=0;var eP=mdb(lme,'FruchtermanReingoldModel',632);bcb(849,1,ale,TRb);_.Qe=function URb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mme),''),'Force Model'),'Determines the model for force calculation.'),MRb),(_5c(),V5c)),gP),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nme),''),'Iterations'),'The number of iterations on the force model.'),meb(300)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ome),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pme),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),qme),U5c),BI),pqb(L5c))));o4c(a,pme,mme,RRb);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rme),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),U5c),BI),pqb(L5c))));o4c(a,rme,mme,ORb);xSb((new ySb,a))};var KRb,LRb,MRb,NRb,ORb,PRb,QRb,RRb;var fP=mdb(sme,'ForceMetaDataProvider',849);bcb(424,22,{3:1,35:1,22:1,424:1},YRb);var VRb,WRb;var gP=ndb(sme,'ForceModelStrategy',424,CI,$Rb,ZRb);var _Rb;bcb(988,1,ale,ySb);_.Qe=function zSb(a){xSb(a)};var bSb,cSb,dSb,eSb,fSb,gSb,hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb,tSb,uSb,vSb;var iP=mdb(sme,'ForceOptions',988);bcb(989,1,{},ASb);_.$e=function BSb(){var a;return a=new ZQb,a};_._e=function CSb(a){};var hP=mdb(sme,'ForceOptions/ForceFactory',989);var DSb,ESb,FSb,GSb;bcb(850,1,ale,PSb);_.Qe=function QSb(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mme),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Bcb(),false)),(_5c(),T5c)),wI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Nme),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ome),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),KSb),V5c),oP),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Pme),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),qme),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qme),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),meb(Ohe)),X5c),JI),pqb(L5c))));cTb((new dTb,a))};var ISb,JSb,KSb,LSb,MSb,NSb;var jP=mdb(sme,'StressMetaDataProvider',850);bcb(992,1,ale,dTb);_.Qe=function eTb(a){cTb(a)};var RSb,SSb,TSb,USb,VSb,WSb,XSb,YSb,ZSb,$Sb,_Sb,aTb;var lP=mdb(sme,'StressOptions',992);bcb(993,1,{},fTb);_.$e=function gTb(){var a;return a=new iTb,a};_._e=function hTb(a){};var kP=mdb(sme,'StressOptions/StressFactory',993);bcb(1128,209,Mle,iTb);_.Ze=function jTb(a,b){var c,d,e,f,g;Odd(b,Sme,1);Ccb(DD(hkd(a,(bTb(),VSb))))?Ccb(DD(hkd(a,_Sb)))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c)):WQb(new ZQb,a,Udd(b,1));e=TQb(a);d=LQb(this.a,e);for(g=d.Kc();g.Ob();){f=BD(g.Pb(),231);if(f.e.c.length<=1){continue}sTb(this.b,f);qTb(this.b);Hkb(f.d,new kTb)}e=KQb(d);SQb(e);Qdd(b)};var nP=mdb(Ume,'StressLayoutProvider',1128);bcb(1129,1,qie,kTb);_.td=function lTb(a){lRb(BD(a,447))};var mP=mdb(Ume,'StressLayoutProvider/lambda$0$Type',1129);bcb(990,1,{},tTb);_.c=0;_.e=0;_.g=0;var qP=mdb(Ume,'StressMajorization',990);bcb(379,22,{3:1,35:1,22:1,379:1},zTb);var vTb,wTb,xTb;var oP=ndb(Ume,'StressMajorization/Dimension',379,CI,BTb,ATb);var CTb;bcb(991,1,Dke,ETb);_.ue=function FTb(a,b){return uTb(this.a,BD(a,144),BD(b,144))};_.Fb=function GTb(a){return this===a};_.ve=function HTb(){return new tpb(this)};var pP=mdb(Ume,'StressMajorization/lambda$0$Type',991);bcb(1229,1,{},PTb);var tP=mdb(Wme,'ElkLayered',1229);bcb(1230,1,qie,STb);_.td=function TTb(a){QTb(BD(a,37))};var rP=mdb(Wme,'ElkLayered/lambda$0$Type',1230);bcb(1231,1,qie,UTb);_.td=function VTb(a){RTb(this.a,BD(a,37))};var sP=mdb(Wme,'ElkLayered/lambda$1$Type',1231);bcb(1263,1,{},bUb);var WTb,XTb,YTb;var xP=mdb(Wme,'GraphConfigurator',1263);bcb(759,1,qie,dUb);_.td=function eUb(a){$Tb(this.a,BD(a,10))};var uP=mdb(Wme,'GraphConfigurator/lambda$0$Type',759);bcb(760,1,{},fUb);_.Kb=function gUb(a){return ZTb(),new YAb(null,new Kub(BD(a,29).a,16))};var vP=mdb(Wme,'GraphConfigurator/lambda$1$Type',760);bcb(761,1,qie,hUb);_.td=function iUb(a){$Tb(this.a,BD(a,10))};var wP=mdb(Wme,'GraphConfigurator/lambda$2$Type',761);bcb(1127,209,Mle,jUb);_.Ze=function kUb(a,b){var c;c=U1b(new a2b,a);PD(hkd(a,(Nyc(),axc)))===PD((hbd(),ebd))?JTb(this.a,c,b):KTb(this.a,c,b);z2b(new D2b,c)};var yP=mdb(Wme,'LayeredLayoutProvider',1127);bcb(356,22,{3:1,35:1,22:1,356:1},rUb);var lUb,mUb,nUb,oUb,pUb;var zP=ndb(Wme,'LayeredPhases',356,CI,tUb,sUb);var uUb;bcb(1651,1,{},CUb);_.i=0;var wUb;var CP=mdb(Xme,'ComponentsToCGraphTransformer',1651);var hVb;bcb(1652,1,{},DUb);_.ef=function EUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function FUb(a,b){return $wnd.Math.min(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var AP=mdb(Xme,'ComponentsToCGraphTransformer/1',1652);bcb(81,1,{81:1});_.i=0;_.k=true;_.o=Qje;var IP=mdb(Yme,'CNode',81);bcb(460,81,{460:1,81:1},GUb,HUb);_.Ib=function IUb(){return ''};var BP=mdb(Xme,'ComponentsToCGraphTransformer/CRectNode',460);bcb(1623,1,{},VUb);var JUb,KUb;var FP=mdb(Xme,'OneDimensionalComponentsCompaction',1623);bcb(1624,1,{},YUb);_.Kb=function ZUb(a){return WUb(BD(a,46))};_.Fb=function $Ub(a){return this===a};var DP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$0$Type',1624);bcb(1625,1,{},_Ub);_.Kb=function aVb(a){return XUb(BD(a,46))};_.Fb=function bVb(a){return this===a};var EP=mdb(Xme,'OneDimensionalComponentsCompaction/lambda$1$Type',1625);bcb(1654,1,{},dVb);var GP=mdb(Yme,'CGraph',1654);bcb(189,1,{189:1},gVb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=Qje;var HP=mdb(Yme,'CGroup',189);bcb(1653,1,{},jVb);_.ef=function kVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};_.ff=function lVb(a,b){return $wnd.Math.max(a.a!=null?Edb(a.a):a.c.i,b.a!=null?Edb(b.a):b.c.i)};var JP=mdb(Yme,Ike,1653);bcb(1655,1,{},CVb);_.d=false;var mVb;var LP=mdb(Yme,Nke,1655);bcb(1656,1,{},DVb);_.Kb=function EVb(a){return nVb(),Bcb(),BD(BD(a,46).a,81).d.e!=0?true:false};_.Fb=function FVb(a){return this===a};var KP=mdb(Yme,Oke,1656);bcb(823,1,{},IVb);_.a=false;_.b=false;_.c=false;_.d=false;var MP=mdb(Yme,Pke,823);bcb(1825,1,{},OVb);var RP=mdb(Zme,Qke,1825);var bQ=odb($me,Fke);bcb(1826,1,{369:1},SVb);_.Ke=function TVb(a){QVb(this,BD(a,466))};var OP=mdb(Zme,Rke,1826);bcb(1827,1,Dke,VVb);_.ue=function WVb(a,b){return UVb(BD(a,81),BD(b,81))};_.Fb=function XVb(a){return this===a};_.ve=function YVb(){return new tpb(this)};var NP=mdb(Zme,Ske,1827);bcb(466,1,{466:1},ZVb);_.a=false;var PP=mdb(Zme,Tke,466);bcb(1828,1,Dke,$Vb);_.ue=function _Vb(a,b){return PVb(BD(a,466),BD(b,466))};_.Fb=function aWb(a){return this===a};_.ve=function bWb(){return new tpb(this)};var QP=mdb(Zme,Uke,1828);bcb(140,1,{140:1},cWb,dWb);_.Fb=function eWb(a){var b;if(a==null){return false}if(TP!=rb(a)){return false}b=BD(a,140);return wtb(this.c,b.c)&&wtb(this.d,b.d)};_.Hb=function fWb(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d]))};_.Ib=function gWb(){return '('+this.c+She+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var TP=mdb($me,'Point',140);bcb(405,22,{3:1,35:1,22:1,405:1},oWb);var hWb,iWb,jWb,kWb;var SP=ndb($me,'Point/Quadrant',405,CI,sWb,rWb);var tWb;bcb(1642,1,{},CWb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var vWb,wWb,xWb,yWb,zWb;var aQ=mdb($me,'RectilinearConvexHull',1642);bcb(574,1,{369:1},NWb);_.Ke=function OWb(a){MWb(this,BD(a,140))};_.b=0;var KWb;var VP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler',574);bcb(1644,1,Dke,QWb);_.ue=function RWb(a,b){return PWb(ED(a),ED(b))};_.Fb=function SWb(a){return this===a};_.ve=function TWb(){return new tpb(this)};var UP=mdb($me,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1644);bcb(1643,1,{369:1},VWb);_.Ke=function WWb(a){UWb(this,BD(a,140))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var WP=mdb($me,'RectilinearConvexHull/RectangleEventHandler',1643);bcb(1645,1,Dke,XWb);_.ue=function YWb(a,b){return EWb(BD(a,140),BD(b,140))};_.Fb=function ZWb(a){return this===a};_.ve=function $Wb(){return new tpb(this)};var XP=mdb($me,'RectilinearConvexHull/lambda$0$Type',1645);bcb(1646,1,Dke,_Wb);_.ue=function aXb(a,b){return FWb(BD(a,140),BD(b,140))};_.Fb=function bXb(a){return this===a};_.ve=function cXb(){return new tpb(this)};var YP=mdb($me,'RectilinearConvexHull/lambda$1$Type',1646);bcb(1647,1,Dke,dXb);_.ue=function eXb(a,b){return GWb(BD(a,140),BD(b,140))};_.Fb=function fXb(a){return this===a};_.ve=function gXb(){return new tpb(this)};var ZP=mdb($me,'RectilinearConvexHull/lambda$2$Type',1647);bcb(1648,1,Dke,hXb);_.ue=function iXb(a,b){return HWb(BD(a,140),BD(b,140))};_.Fb=function jXb(a){return this===a};_.ve=function kXb(){return new tpb(this)};var $P=mdb($me,'RectilinearConvexHull/lambda$3$Type',1648);bcb(1649,1,Dke,lXb);_.ue=function mXb(a,b){return IWb(BD(a,140),BD(b,140))};_.Fb=function nXb(a){return this===a};_.ve=function oXb(){return new tpb(this)};var _P=mdb($me,'RectilinearConvexHull/lambda$4$Type',1649);bcb(1650,1,{},qXb);var cQ=mdb($me,'Scanline',1650);bcb(2005,1,{});var dQ=mdb(_me,'AbstractGraphPlacer',2005);bcb(325,1,{325:1},AXb);_.mf=function BXb(a){if(this.nf(a)){Rc(this.b,BD(vNb(a,(wtc(),Esc)),21),a);return true}else{return false}};_.nf=function CXb(a){var b,c,d,e;b=BD(vNb(a,(wtc(),Esc)),21);e=BD(Qc(wXb,b),21);for(d=e.Kc();d.Ob();){c=BD(d.Pb(),21);if(!BD(Qc(this.b,c),15).dc()){return false}}return true};var wXb;var gQ=mdb(_me,'ComponentGroup',325);bcb(765,2005,{},HXb);_.of=function IXb(a){var b,c;for(c=new olb(this.a);c.a<c.c.c.length;){b=BD(mlb(c),325);if(b.mf(a)){return}}Ekb(this.a,new AXb(a))};_.lf=function JXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c=KC(SI,Uhe,1,0,5,1);b.a.c=KC(SI,Uhe,1,0,5,1);if(a.dc()){b.f.a=0;b.f.b=0;return}g=BD(a.Xb(0),37);tNb(b,g);for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);this.of(d)}o=new d7c;f=Edb(ED(vNb(g,(Nyc(),kyc))));for(j=new olb(this.a);j.a<j.c.c.length;){h=BD(mlb(j),325);k=DXb(h,f);vXb(Uc(h.b),o.a,o.b);o.a+=k.a;o.b+=k.b}b.f.a=o.a-f;b.f.b=o.b-f;if(Ccb(DD(vNb(g,qwc)))&&PD(vNb(g,Swc))===PD((Aad(),wad))){for(n=a.Kc();n.Ob();){l=BD(n.Pb(),37);uXb(l,l.c.a,l.c.b)}c=new gYb;YXb(c,a,f);for(m=a.Kc();m.Ob();){l=BD(m.Pb(),37);P6c(X6c(l.c),c.e)}P6c(X6c(b.f),c.a)}for(i=new olb(this.a);i.a<i.c.c.length;){h=BD(mlb(i),325);tXb(b,Uc(h.b))}};var eQ=mdb(_me,'ComponentGroupGraphPlacer',765);bcb(1293,765,{},LXb);_.of=function MXb(a){KXb(this,a)};_.lf=function NXb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;this.a.c=KC(SI,Uhe,1,0,5,1);b.a.c=KC(SI,Uhe,1,0,5,1);if(a.dc()){b.f.a=0;b.f.b=0;return}g=BD(a.Xb(0),37);tNb(b,g);for(e=a.Kc();e.Ob();){d=BD(e.Pb(),37);KXb(this,d)}t=new d7c;s=new d7c;p=new d7c;o=new d7c;f=Edb(ED(vNb(g,(Nyc(),kyc))));for(j=new olb(this.a);j.a<j.c.c.length;){h=BD(mlb(j),325);if(fad(BD(vNb(b,(Y9c(),z8c)),103))){p.a=t.a;for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Acd))){p.a=s.a;break}}}else if(gad(BD(vNb(b,z8c),103))){p.b=t.b;for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Tcd))){p.b=s.b;break}}}k=DXb(BD(h,570),f);vXb(Uc(h.b),p.a,p.b);if(fad(BD(vNb(b,z8c),103))){s.a=p.a+k.a;o.a=$wnd.Math.max(o.a,s.a);for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),Rcd))){t.a=p.a+k.a;break}}s.b=p.b+k.b;p.b=s.b;o.b=$wnd.Math.max(o.b,p.b)}else if(gad(BD(vNb(b,z8c),103))){s.b=p.b+k.b;o.b=$wnd.Math.max(o.b,s.b);for(r=new Mv(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=BD(Lv(r.b.Pb()),21);if(q.Hc((Ucd(),zcd))){t.b=p.b+k.b;break}}s.a=p.a+k.a;p.a=s.a;o.a=$wnd.Math.max(o.a,p.a)}}b.f.a=o.a-f;b.f.b=o.b-f;if(Ccb(DD(vNb(g,qwc)))&&PD(vNb(g,Swc))===PD((Aad(),wad))){for(n=a.Kc();n.Ob();){l=BD(n.Pb(),37);uXb(l,l.c.a,l.c.b)}c=new gYb;YXb(c,a,f);for(m=a.Kc();m.Ob();){l=BD(m.Pb(),37);P6c(X6c(l.c),c.e)}P6c(X6c(b.f),c.a)}for(i=new olb(this.a);i.a<i.c.c.length;){h=BD(mlb(i),325);tXb(b,Uc(h.b))}};var fQ=mdb(_me,'ComponentGroupModelOrderGraphPlacer',1293);bcb(423,22,{3:1,35:1,22:1,423:1},SXb);var OXb,PXb,QXb;var hQ=ndb(_me,'ComponentOrderingStrategy',423,CI,UXb,TXb);var VXb;bcb(650,1,{},gYb);var pQ=mdb(_me,'ComponentsCompactor',650);bcb(1468,12,ake,jYb);_.Fc=function kYb(a){return hYb(this,BD(a,140))};var iQ=mdb(_me,'ComponentsCompactor/Hullpoints',1468);bcb(1465,1,{841:1},mYb);_.a=false;var jQ=mdb(_me,'ComponentsCompactor/InternalComponent',1465);bcb(1464,1,vie,nYb);_.Jc=function oYb(a){reb(this,a)};_.Kc=function pYb(){return new olb(this.a)};var kQ=mdb(_me,'ComponentsCompactor/InternalConnectedComponents',1464);bcb(1467,1,{594:1},qYb);_.hf=function sYb(){return null};_.jf=function tYb(){return this.a};_.gf=function rYb(){return cYb(this.d)};_.kf=function uYb(){return this.b};var lQ=mdb(_me,'ComponentsCompactor/InternalExternalExtension',1467);bcb(1466,1,{594:1},vYb);_.jf=function yYb(){return this.a};_.gf=function wYb(){return cYb(this.d)};_.hf=function xYb(){return this.c};_.kf=function zYb(){return this.b};var mQ=mdb(_me,'ComponentsCompactor/InternalUnionExternalExtension',1466);bcb(1470,1,{},AYb);var nQ=mdb(_me,'ComponentsCompactor/OuterSegments',1470);bcb(1469,1,{},BYb);var oQ=mdb(_me,'ComponentsCompactor/Segments',1469);bcb(1264,1,{},FYb);var rQ=mdb(_me,hme,1264);bcb(1265,1,Dke,HYb);_.ue=function IYb(a,b){return GYb(BD(a,37),BD(b,37))};_.Fb=function JYb(a){return this===a};_.ve=function KYb(){return new tpb(this)};var qQ=mdb(_me,'ComponentsProcessor/lambda$0$Type',1265);bcb(570,325,{325:1,570:1},PYb);_.mf=function QYb(a){return NYb(this,a)};_.nf=function RYb(a){return OYb(this,a)};var LYb;var sQ=mdb(_me,'ModelOrderComponentGroup',570);bcb(1291,2005,{},SYb);_.lf=function TYb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(a.gc()==1){t=BD(a.Xb(0),37);if(t!=b){b.a.c=KC(SI,Uhe,1,0,5,1);sXb(b,t,0,0);tNb(b,t);u_b(b.d,t.d);b.f.a=t.f.a;b.f.b=t.f.b}return}else if(a.dc()){b.a.c=KC(SI,Uhe,1,0,5,1);b.f.a=0;b.f.b=0;return}if(PD(vNb(b,(Nyc(),twc)))===PD((RXb(),QXb))){for(i=a.Kc();i.Ob();){g=BD(i.Pb(),37);r=0;for(p=new olb(g.a);p.a<p.c.c.length;){o=BD(mlb(p),10);r+=BD(vNb(o,byc),19).a}g.p=r}mmb();a.ad(new VYb)}f=BD(a.Xb(0),37);b.a.c=KC(SI,Uhe,1,0,5,1);tNb(b,f);n=0;u=0;for(j=a.Kc();j.Ob();){g=BD(j.Pb(),37);s=g.f;n=$wnd.Math.max(n,s.a);u+=s.a*s.b}n=$wnd.Math.max(n,$wnd.Math.sqrt(u)*Edb(ED(vNb(b,owc))));e=Edb(ED(vNb(b,kyc)));v=0;w=0;m=0;c=e;for(h=a.Kc();h.Ob();){g=BD(h.Pb(),37);s=g.f;if(v+s.a>n){v=0;w+=m+e;m=0}q=g.c;uXb(g,v+q.a,w+q.b);X6c(q);c=$wnd.Math.max(c,v+s.a);m=$wnd.Math.max(m,s.b);v+=s.a+e}b.f.a=c;b.f.b=w+m;if(Ccb(DD(vNb(f,qwc)))){d=new gYb;YXb(d,a,e);for(l=a.Kc();l.Ob();){k=BD(l.Pb(),37);P6c(X6c(k.c),d.e)}P6c(X6c(b.f),d.a)}tXb(b,a)};var uQ=mdb(_me,'SimpleRowGraphPlacer',1291);bcb(1292,1,Dke,VYb);_.ue=function WYb(a,b){return UYb(BD(a,37),BD(b,37))};_.Fb=function XYb(a){return this===a};_.ve=function YYb(){return new tpb(this)};var tQ=mdb(_me,'SimpleRowGraphPlacer/1',1292);var ZYb;bcb(1262,1,Vke,dZb);_.Lb=function eZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};_.Fb=function fZb(a){return this===a};_.Mb=function gZb(a){var b;return b=BD(vNb(BD(a,243).b,(Nyc(),jxc)),74),!!b&&b.b!=0};var vQ=mdb(dne,'CompoundGraphPostprocessor/1',1262);bcb(1261,1,ene,wZb);_.pf=function xZb(a,b){qZb(this,BD(a,37),b)};var xQ=mdb(dne,'CompoundGraphPreprocessor',1261);bcb(441,1,{441:1},yZb);_.c=false;var wQ=mdb(dne,'CompoundGraphPreprocessor/ExternalPort',441);bcb(243,1,{243:1},BZb);_.Ib=function CZb(){return Zr(this.c)+':'+TZb(this.b)};var zQ=mdb(dne,'CrossHierarchyEdge',243);bcb(763,1,Dke,EZb);_.ue=function FZb(a,b){return DZb(this,BD(a,243),BD(b,243))};_.Fb=function GZb(a){return this===a};_.ve=function IZb(){return new tpb(this)};var yQ=mdb(dne,'CrossHierarchyEdgeComparator',763);bcb(299,134,{3:1,299:1,94:1,134:1});_.p=0;var JQ=mdb(fne,'LGraphElement',299);bcb(17,299,{3:1,17:1,299:1,94:1,134:1},UZb);_.Ib=function VZb(){return TZb(this)};var AQ=mdb(fne,'LEdge',17);bcb(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},XZb);_.Jc=function YZb(a){reb(this,a)};_.Kc=function ZZb(){return new olb(this.b)};_.Ib=function $Zb(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var KQ=mdb(fne,'LGraph',37);var _Zb;bcb(657,1,{});_.qf=function b$b(){return this.e.n};_.We=function c$b(a){return vNb(this.e,a)};_.rf=function d$b(){return this.e.o};_.sf=function e$b(){return this.e.p};_.Xe=function f$b(a){return wNb(this.e,a)};_.tf=function g$b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.uf=function h$b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.vf=function i$b(a){this.e.p=a};var BQ=mdb(fne,'LGraphAdapters/AbstractLShapeAdapter',657);bcb(577,1,{839:1},j$b);_.wf=function k$b(){var a,b;if(!this.b){this.b=Pu(this.a.b.c.length);for(b=new olb(this.a.b);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.b,new v$b(a))}}return this.b};_.b=null;var CQ=mdb(fne,'LGraphAdapters/LEdgeAdapter',577);bcb(656,1,{},l$b);_.xf=function m$b(){var a,b,c,d,e,f;if(!this.b){this.b=new Rkb;for(d=new olb(this.a.b);d.a<d.c.c.length;){c=BD(mlb(d),29);for(f=new olb(c.a);f.a<f.c.c.length;){e=BD(mlb(f),10);if(this.c.Mb(e)){Ekb(this.b,new x$b(this,e,this.e));if(this.d){if(wNb(e,(wtc(),vtc))){for(b=BD(vNb(e,vtc),15).Kc();b.Ob();){a=BD(b.Pb(),10);Ekb(this.b,new x$b(this,a,false))}}if(wNb(e,tsc)){for(b=BD(vNb(e,tsc),15).Kc();b.Ob();){a=BD(b.Pb(),10);Ekb(this.b,new x$b(this,a,false))}}}}}}}return this.b};_.qf=function n$b(){throw vbb(new cgb(hne))};_.We=function o$b(a){return vNb(this.a,a)};_.rf=function p$b(){return this.a.f};_.sf=function q$b(){return this.a.p};_.Xe=function r$b(a){return wNb(this.a,a)};_.tf=function s$b(a){throw vbb(new cgb(hne))};_.uf=function t$b(a){this.a.f.a=a.a;this.a.f.b=a.b};_.vf=function u$b(a){this.a.p=a};_.b=null;_.d=false;_.e=false;var DQ=mdb(fne,'LGraphAdapters/LGraphAdapter',656);bcb(576,657,{181:1},v$b);var EQ=mdb(fne,'LGraphAdapters/LLabelAdapter',576);bcb(575,657,{680:1},x$b);_.yf=function y$b(){return this.b};_.zf=function z$b(){return mmb(),mmb(),jmb};_.wf=function A$b(){var a,b;if(!this.a){this.a=Pu(BD(this.e,10).b.c.length);for(b=new olb(BD(this.e,10).b);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.a,new v$b(a))}}return this.a};_.Af=function B$b(){var a;a=BD(this.e,10).d;return new J_b(a.d,a.c,a.a,a.b)};_.Bf=function C$b(){return mmb(),mmb(),jmb};_.Cf=function D$b(){var a,b;if(!this.c){this.c=Pu(BD(this.e,10).j.c.length);for(b=new olb(BD(this.e,10).j);b.a<b.c.c.length;){a=BD(mlb(b),11);Ekb(this.c,new I$b(a,this.d))}}return this.c};_.Df=function E$b(){return Ccb(DD(vNb(BD(this.e,10),(wtc(),wsc))))};_.Ef=function F$b(a){BD(this.e,10).d.b=a.b;BD(this.e,10).d.d=a.d;BD(this.e,10).d.c=a.c;BD(this.e,10).d.a=a.a};_.Ff=function G$b(a){BD(this.e,10).f.b=a.b;BD(this.e,10).f.d=a.d;BD(this.e,10).f.c=a.c;BD(this.e,10).f.a=a.a};_.Gf=function H$b(){w$b(this,(a$b(),_Zb))};_.a=null;_.b=null;_.c=null;_.d=false;var FQ=mdb(fne,'LGraphAdapters/LNodeAdapter',575);bcb(1722,657,{838:1},I$b);_.zf=function J$b(){var a,b,c,d;if(this.d&&BD(this.e,11).i.k==(j0b(),i0b)){return mmb(),mmb(),jmb}else if(!this.a){this.a=new Rkb;for(c=new olb(BD(this.e,11).e);c.a<c.c.c.length;){a=BD(mlb(c),17);Ekb(this.a,new j$b(a))}if(this.d){d=BD(vNb(BD(this.e,11),(wtc(),gtc)),10);if(d){for(b=new Sr(ur(R_b(d).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),17);Ekb(this.a,new j$b(a))}}}}return this.a};_.wf=function K$b(){var a,b;if(!this.b){this.b=Pu(BD(this.e,11).f.c.length);for(b=new olb(BD(this.e,11).f);b.a<b.c.c.length;){a=BD(mlb(b),70);Ekb(this.b,new v$b(a))}}return this.b};_.Bf=function L$b(){var a,b,c,d;if(this.d&&BD(this.e,11).i.k==(j0b(),i0b)){return mmb(),mmb(),jmb}else if(!this.c){this.c=new Rkb;for(c=new olb(BD(this.e,11).g);c.a<c.c.c.length;){a=BD(mlb(c),17);Ekb(this.c,new j$b(a))}if(this.d){d=BD(vNb(BD(this.e,11),(wtc(),gtc)),10);if(d){for(b=new Sr(ur(U_b(d).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),17);Ekb(this.c,new j$b(a))}}}}return this.c};_.Hf=function M$b(){return BD(this.e,11).j};_.If=function N$b(){return Ccb(DD(vNb(BD(this.e,11),(wtc(),Nsc))))};_.a=null;_.b=null;_.c=null;_.d=false;var GQ=mdb(fne,'LGraphAdapters/LPortAdapter',1722);bcb(1723,1,Dke,P$b);_.ue=function Q$b(a,b){return O$b(BD(a,11),BD(b,11))};_.Fb=function R$b(a){return this===a};_.ve=function S$b(){return new tpb(this)};var HQ=mdb(fne,'LGraphAdapters/PortComparator',1723);bcb(804,1,Oie,T$b);_.Mb=function U$b(a){return BD(a,10),a$b(),true};var IQ=mdb(fne,'LGraphAdapters/lambda$0$Type',804);bcb(392,299,{3:1,299:1,392:1,94:1,134:1});var bR=mdb(fne,'LShape',392);bcb(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},p_b,q_b);_.Ib=function r_b(){var a;a=o_b(this);return a==null?'label':'l_'+a};var LQ=mdb(fne,'LLabel',70);bcb(207,1,{3:1,4:1,207:1,414:1});_.Fb=function C_b(a){var b;if(JD(a,207)){b=BD(a,207);return this.d==b.d&&this.a==b.a&&this.b==b.b&&this.c==b.c}else{return false}};_.Hb=function D_b(){var a,b;a=Hdb(this.b)<<16;a|=Hdb(this.a)&aje;b=Hdb(this.c)<<16;b|=Hdb(this.d)&aje;return a^b};_.Jf=function F_b(b){var c,d,e,f,g,h,i,j,k,l,m;g=0;while(g<b.length&&E_b((BCb(g,b.length),b.charCodeAt(g)),mne)){++g}c=b.length;while(c>0&&E_b((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(g<c){l=mfb(b.substr(g,c-g),',|;');try{for(i=l,j=0,k=i.length;j<k;++j){h=i[j];f=mfb(h,'=');if(f.length!=2){throw vbb(new Wdb('Expecting a list of key-value pairs.'))}e=ufb(f[0]);m=Hcb(ufb(f[1]));dfb(e,'top')?(this.d=m):dfb(e,'left')?(this.b=m):dfb(e,'bottom')?(this.a=m):dfb(e,'right')&&(this.c=m)}}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}}};_.Ib=function G_b(){return '[top='+this.d+',left='+this.b+',bottom='+this.a+',right='+this.c+']'};_.a=0;_.b=0;_.c=0;_.d=0;var n1=mdb(pne,'Spacing',207);bcb(142,207,qne,H_b,I_b,J_b,K_b);var i1=mdb(pne,'ElkMargin',142);bcb(651,142,qne,L_b);var MQ=mdb(fne,'LMargin',651);bcb(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},b0b);_.Ib=function c0b(){return a0b(this)};_.i=false;var OQ=mdb(fne,'LNode',10);bcb(267,22,{3:1,35:1,22:1,267:1},k0b);var d0b,e0b,f0b,g0b,h0b,i0b;var NQ=ndb(fne,'LNode/NodeType',267,CI,m0b,l0b);var n0b;bcb(116,207,rne,p0b,q0b,r0b);var j1=mdb(pne,'ElkPadding',116);bcb(764,116,rne,s0b);var PQ=mdb(fne,'LPadding',764);bcb(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},H0b);_.Ib=function I0b(){var a,b,c;a=new Ufb;Qfb((a.a+='p_',a),C0b(this));!!this.i&&Qfb(Pfb((a.a+='[',a),this.i),']');if(this.e.c.length==1&&this.g.c.length==0&&BD(Ikb(this.e,0),17).c!=this){b=BD(Ikb(this.e,0),17).c;Qfb((a.a+=' << ',a),C0b(b));Qfb(Pfb((a.a+='[',a),b.i),']')}if(this.e.c.length==0&&this.g.c.length==1&&BD(Ikb(this.g,0),17).d!=this){c=BD(Ikb(this.g,0),17).d;Qfb((a.a+=' >> ',a),C0b(c));Qfb(Pfb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var t0b,u0b,v0b,w0b,x0b,y0b;var aR=mdb(fne,'LPort',11);bcb(397,1,vie,J0b);_.Jc=function K0b(a){reb(this,a)};_.Kc=function L0b(){var a;a=new olb(this.a.e);return new M0b(a)};var RQ=mdb(fne,'LPort/1',397);bcb(1290,1,aie,M0b);_.Nb=function N0b(a){Rrb(this,a)};_.Pb=function P0b(){return BD(mlb(this.a),17).c};_.Ob=function O0b(){return llb(this.a)};_.Qb=function Q0b(){nlb(this.a)};var QQ=mdb(fne,'LPort/1/1',1290);bcb(359,1,vie,R0b);_.Jc=function S0b(a){reb(this,a)};_.Kc=function T0b(){var a;return a=new olb(this.a.g),new U0b(a)};var TQ=mdb(fne,'LPort/2',359);bcb(762,1,aie,U0b);_.Nb=function V0b(a){Rrb(this,a)};_.Pb=function X0b(){return BD(mlb(this.a),17).d};_.Ob=function W0b(){return llb(this.a)};_.Qb=function Y0b(){nlb(this.a)};var SQ=mdb(fne,'LPort/2/1',762);bcb(1283,1,vie,Z0b);_.Jc=function $0b(a){reb(this,a)};_.Kc=function _0b(){return new b1b(this)};var VQ=mdb(fne,'LPort/CombineIter',1283);bcb(201,1,aie,b1b);_.Nb=function c1b(a){Rrb(this,a)};_.Qb=function f1b(){Srb()};_.Ob=function d1b(){return a1b(this)};_.Pb=function e1b(){return llb(this.a)?mlb(this.a):mlb(this.b)};var UQ=mdb(fne,'LPort/CombineIter/1',201);bcb(1285,1,Vke,h1b);_.Lb=function i1b(a){return g1b(a)};_.Fb=function j1b(a){return this===a};_.Mb=function k1b(a){return z0b(),BD(a,11).e.c.length!=0};var WQ=mdb(fne,'LPort/lambda$0$Type',1285);bcb(1284,1,Vke,m1b);_.Lb=function n1b(a){return l1b(a)};_.Fb=function o1b(a){return this===a};_.Mb=function p1b(a){return z0b(),BD(a,11).g.c.length!=0};var XQ=mdb(fne,'LPort/lambda$1$Type',1284);bcb(1286,1,Vke,q1b);_.Lb=function r1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};_.Fb=function s1b(a){return this===a};_.Mb=function t1b(a){return z0b(),BD(a,11).j==(Ucd(),Acd)};var YQ=mdb(fne,'LPort/lambda$2$Type',1286);bcb(1287,1,Vke,u1b);_.Lb=function v1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};_.Fb=function w1b(a){return this===a};_.Mb=function x1b(a){return z0b(),BD(a,11).j==(Ucd(),zcd)};var ZQ=mdb(fne,'LPort/lambda$3$Type',1287);bcb(1288,1,Vke,y1b);_.Lb=function z1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};_.Fb=function A1b(a){return this===a};_.Mb=function B1b(a){return z0b(),BD(a,11).j==(Ucd(),Rcd)};var $Q=mdb(fne,'LPort/lambda$4$Type',1288);bcb(1289,1,Vke,C1b);_.Lb=function D1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};_.Fb=function E1b(a){return this===a};_.Mb=function F1b(a){return z0b(),BD(a,11).j==(Ucd(),Tcd)};var _Q=mdb(fne,'LPort/lambda$5$Type',1289);bcb(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},H1b);_.Jc=function I1b(a){reb(this,a)};_.Kc=function J1b(){return new olb(this.a)};_.Ib=function K1b(){return 'L_'+Jkb(this.b.b,this,0)+Fe(this.a)};var cR=mdb(fne,'Layer',29);bcb(1342,1,{},a2b);var mR=mdb(tne,une,1342);bcb(1346,1,{},e2b);_.Kb=function f2b(a){return atd(BD(a,82))};var dR=mdb(tne,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1346);bcb(1349,1,{},g2b);_.Kb=function h2b(a){return atd(BD(a,82))};var eR=mdb(tne,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1349);bcb(1343,1,qie,i2b);_.td=function j2b(a){Q1b(this.a,BD(a,118))};var fR=mdb(tne,vne,1343);bcb(1344,1,qie,k2b);_.td=function l2b(a){Q1b(this.a,BD(a,118))};var gR=mdb(tne,wne,1344);bcb(1345,1,{},m2b);_.Kb=function n2b(a){return new YAb(null,new Kub(Old(BD(a,79)),16))};var hR=mdb(tne,xne,1345);bcb(1347,1,Oie,o2b);_.Mb=function p2b(a){return b2b(this.a,BD(a,33))};var iR=mdb(tne,yne,1347);bcb(1348,1,{},q2b);_.Kb=function r2b(a){return new YAb(null,new Kub(Nld(BD(a,79)),16))};var jR=mdb(tne,'ElkGraphImporter/lambda$5$Type',1348);bcb(1350,1,Oie,s2b);_.Mb=function t2b(a){return c2b(this.a,BD(a,33))};var kR=mdb(tne,'ElkGraphImporter/lambda$7$Type',1350);bcb(1351,1,Oie,u2b);_.Mb=function v2b(a){return d2b(BD(a,79))};var lR=mdb(tne,'ElkGraphImporter/lambda$8$Type',1351);bcb(1278,1,{},D2b);var w2b;var rR=mdb(tne,'ElkGraphLayoutTransferrer',1278);bcb(1279,1,Oie,G2b);_.Mb=function H2b(a){return E2b(this.a,BD(a,17))};var nR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$0$Type',1279);bcb(1280,1,qie,I2b);_.td=function J2b(a){x2b();Ekb(this.a,BD(a,17))};var oR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$1$Type',1280);bcb(1281,1,Oie,K2b);_.Mb=function L2b(a){return F2b(this.a,BD(a,17))};var pR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$2$Type',1281);bcb(1282,1,qie,M2b);_.td=function N2b(a){x2b();Ekb(this.a,BD(a,17))};var qR=mdb(tne,'ElkGraphLayoutTransferrer/lambda$3$Type',1282);bcb(1485,1,ene,S2b);_.pf=function T2b(a,b){Q2b(BD(a,37),b)};var uR=mdb(Ane,'CommentNodeMarginCalculator',1485);bcb(1486,1,{},U2b);_.Kb=function V2b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var sR=mdb(Ane,'CommentNodeMarginCalculator/lambda$0$Type',1486);bcb(1487,1,qie,W2b);_.td=function X2b(a){R2b(BD(a,10))};var tR=mdb(Ane,'CommentNodeMarginCalculator/lambda$1$Type',1487);bcb(1488,1,ene,_2b);_.pf=function a3b(a,b){Z2b(BD(a,37),b)};var vR=mdb(Ane,'CommentPostprocessor',1488);bcb(1489,1,ene,e3b);_.pf=function f3b(a,b){b3b(BD(a,37),b)};var wR=mdb(Ane,'CommentPreprocessor',1489);bcb(1490,1,ene,h3b);_.pf=function i3b(a,b){g3b(BD(a,37),b)};var xR=mdb(Ane,'ConstraintsPostprocessor',1490);bcb(1491,1,ene,p3b);_.pf=function q3b(a,b){n3b(BD(a,37),b)};var yR=mdb(Ane,'EdgeAndLayerConstraintEdgeReverser',1491);bcb(1492,1,ene,t3b);_.pf=function v3b(a,b){r3b(BD(a,37),b)};var CR=mdb(Ane,'EndLabelPostprocessor',1492);bcb(1493,1,{},w3b);_.Kb=function x3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var zR=mdb(Ane,'EndLabelPostprocessor/lambda$0$Type',1493);bcb(1494,1,Oie,y3b);_.Mb=function z3b(a){return u3b(BD(a,10))};var AR=mdb(Ane,'EndLabelPostprocessor/lambda$1$Type',1494);bcb(1495,1,qie,A3b);_.td=function B3b(a){s3b(BD(a,10))};var BR=mdb(Ane,'EndLabelPostprocessor/lambda$2$Type',1495);bcb(1496,1,ene,M3b);_.pf=function P3b(a,b){I3b(BD(a,37),b)};var JR=mdb(Ane,'EndLabelPreprocessor',1496);bcb(1497,1,{},Q3b);_.Kb=function R3b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DR=mdb(Ane,'EndLabelPreprocessor/lambda$0$Type',1497);bcb(1498,1,qie,S3b);_.td=function T3b(a){E3b(this.a,this.b,this.c,BD(a,10))};_.a=0;_.b=0;_.c=false;var ER=mdb(Ane,'EndLabelPreprocessor/lambda$1$Type',1498);bcb(1499,1,Oie,U3b);_.Mb=function V3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var FR=mdb(Ane,'EndLabelPreprocessor/lambda$2$Type',1499);bcb(1500,1,qie,W3b);_.td=function X3b(a){Dsb(this.a,BD(a,70))};var GR=mdb(Ane,'EndLabelPreprocessor/lambda$3$Type',1500);bcb(1501,1,Oie,Y3b);_.Mb=function Z3b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var HR=mdb(Ane,'EndLabelPreprocessor/lambda$4$Type',1501);bcb(1502,1,qie,$3b);_.td=function _3b(a){Dsb(this.a,BD(a,70))};var IR=mdb(Ane,'EndLabelPreprocessor/lambda$5$Type',1502);bcb(1551,1,ene,i4b);_.pf=function j4b(a,b){f4b(BD(a,37),b)};var a4b;var RR=mdb(Ane,'EndLabelSorter',1551);bcb(1552,1,Dke,l4b);_.ue=function m4b(a,b){return k4b(BD(a,456),BD(b,456))};_.Fb=function n4b(a){return this===a};_.ve=function o4b(){return new tpb(this)};var KR=mdb(Ane,'EndLabelSorter/1',1552);bcb(456,1,{456:1},p4b);var LR=mdb(Ane,'EndLabelSorter/LabelGroup',456);bcb(1553,1,{},q4b);_.Kb=function r4b(a){return b4b(),new YAb(null,new Kub(BD(a,29).a,16))};var MR=mdb(Ane,'EndLabelSorter/lambda$0$Type',1553);bcb(1554,1,Oie,s4b);_.Mb=function t4b(a){return b4b(),BD(a,10).k==(j0b(),h0b)};var NR=mdb(Ane,'EndLabelSorter/lambda$1$Type',1554);bcb(1555,1,qie,u4b);_.td=function v4b(a){g4b(BD(a,10))};var OR=mdb(Ane,'EndLabelSorter/lambda$2$Type',1555);bcb(1556,1,Oie,w4b);_.Mb=function x4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),oad))};var PR=mdb(Ane,'EndLabelSorter/lambda$3$Type',1556);bcb(1557,1,Oie,y4b);_.Mb=function z4b(a){return b4b(),PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),pad))};var QR=mdb(Ane,'EndLabelSorter/lambda$4$Type',1557);bcb(1503,1,ene,L4b);_.pf=function M4b(a,b){J4b(this,BD(a,37))};_.b=0;_.c=0;var YR=mdb(Ane,'FinalSplineBendpointsCalculator',1503);bcb(1504,1,{},N4b);_.Kb=function O4b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var SR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$0$Type',1504);bcb(1505,1,{},P4b);_.Kb=function Q4b(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var TR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$1$Type',1505);bcb(1506,1,Oie,R4b);_.Mb=function S4b(a){return !OZb(BD(a,17))};var UR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$2$Type',1506);bcb(1507,1,Oie,T4b);_.Mb=function U4b(a){return wNb(BD(a,17),(wtc(),rtc))};var VR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$3$Type',1507);bcb(1508,1,qie,V4b);_.td=function W4b(a){C4b(this.a,BD(a,128))};var WR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$4$Type',1508);bcb(1509,1,qie,X4b);_.td=function Y4b(a){smb(BD(a,17).a)};var XR=mdb(Ane,'FinalSplineBendpointsCalculator/lambda$5$Type',1509);bcb(792,1,ene,u5b);_.pf=function v5b(a,b){l5b(this,BD(a,37),b)};var $R=mdb(Ane,'GraphTransformer',792);bcb(511,22,{3:1,35:1,22:1,511:1},z5b);var w5b,x5b;var ZR=ndb(Ane,'GraphTransformer/Mode',511,CI,B5b,A5b);var C5b;bcb(1510,1,ene,I5b);_.pf=function J5b(a,b){F5b(BD(a,37),b)};var _R=mdb(Ane,'HierarchicalNodeResizingProcessor',1510);bcb(1511,1,ene,Q5b);_.pf=function R5b(a,b){M5b(BD(a,37),b)};var bS=mdb(Ane,'HierarchicalPortConstraintProcessor',1511);bcb(1512,1,Dke,T5b);_.ue=function U5b(a,b){return S5b(BD(a,10),BD(b,10))};_.Fb=function V5b(a){return this===a};_.ve=function W5b(){return new tpb(this)};var aS=mdb(Ane,'HierarchicalPortConstraintProcessor/NodeComparator',1512);bcb(1513,1,ene,Z5b);_.pf=function $5b(a,b){X5b(BD(a,37),b)};var cS=mdb(Ane,'HierarchicalPortDummySizeProcessor',1513);bcb(1514,1,ene,l6b);_.pf=function m6b(a,b){e6b(this,BD(a,37),b)};_.a=0;var fS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter',1514);bcb(1515,1,Dke,o6b);_.ue=function p6b(a,b){return n6b(BD(a,10),BD(b,10))};_.Fb=function q6b(a){return this===a};_.ve=function r6b(){return new tpb(this)};var dS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/1',1515);bcb(1516,1,Dke,t6b);_.ue=function u6b(a,b){return s6b(BD(a,10),BD(b,10))};_.Fb=function v6b(a){return this===a};_.ve=function w6b(){return new tpb(this)};var eS=mdb(Ane,'HierarchicalPortOrthogonalEdgeRouter/2',1516);bcb(1517,1,ene,z6b);_.pf=function A6b(a,b){y6b(BD(a,37),b)};var gS=mdb(Ane,'HierarchicalPortPositionProcessor',1517);bcb(1518,1,ene,J6b);_.pf=function K6b(a,b){I6b(this,BD(a,37))};_.a=0;_.c=0;var B6b,C6b;var kS=mdb(Ane,'HighDegreeNodeLayeringProcessor',1518);bcb(571,1,{571:1},L6b);_.b=-1;_.d=-1;var hS=mdb(Ane,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',571);bcb(1519,1,{},M6b);_.Kb=function N6b(a){return D6b(),R_b(BD(a,10))};_.Fb=function O6b(a){return this===a};var iS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1519);bcb(1520,1,{},P6b);_.Kb=function Q6b(a){return D6b(),U_b(BD(a,10))};_.Fb=function R6b(a){return this===a};var jS=mdb(Ane,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1520);bcb(1526,1,ene,X6b);_.pf=function Y6b(a,b){W6b(this,BD(a,37),b)};var pS=mdb(Ane,'HyperedgeDummyMerger',1526);bcb(793,1,{},Z6b);_.a=false;_.b=false;_.c=false;var lS=mdb(Ane,'HyperedgeDummyMerger/MergeState',793);bcb(1527,1,{},$6b);_.Kb=function _6b(a){return new YAb(null,new Kub(BD(a,29).a,16))};var mS=mdb(Ane,'HyperedgeDummyMerger/lambda$0$Type',1527);bcb(1528,1,{},a7b);_.Kb=function b7b(a){return new YAb(null,new Kub(BD(a,10).j,16))};var nS=mdb(Ane,'HyperedgeDummyMerger/lambda$1$Type',1528);bcb(1529,1,qie,c7b);_.td=function d7b(a){BD(a,11).p=-1};var oS=mdb(Ane,'HyperedgeDummyMerger/lambda$2$Type',1529);bcb(1530,1,ene,g7b);_.pf=function h7b(a,b){f7b(BD(a,37),b)};var qS=mdb(Ane,'HypernodesProcessor',1530);bcb(1531,1,ene,j7b);_.pf=function k7b(a,b){i7b(BD(a,37),b)};var rS=mdb(Ane,'InLayerConstraintProcessor',1531);bcb(1532,1,ene,m7b);_.pf=function n7b(a,b){l7b(BD(a,37),b)};var sS=mdb(Ane,'InnermostNodeMarginCalculator',1532);bcb(1533,1,ene,r7b);_.pf=function w7b(a,b){q7b(this,BD(a,37))};_.a=Qje;_.b=Qje;_.c=Pje;_.d=Pje;var zS=mdb(Ane,'InteractiveExternalPortPositioner',1533);bcb(1534,1,{},x7b);_.Kb=function y7b(a){return BD(a,17).d.i};_.Fb=function z7b(a){return this===a};var tS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$0$Type',1534);bcb(1535,1,{},A7b);_.Kb=function B7b(a){return s7b(this.a,ED(a))};_.Fb=function C7b(a){return this===a};var uS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$1$Type',1535);bcb(1536,1,{},D7b);_.Kb=function E7b(a){return BD(a,17).c.i};_.Fb=function F7b(a){return this===a};var vS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$2$Type',1536);bcb(1537,1,{},G7b);_.Kb=function H7b(a){return t7b(this.a,ED(a))};_.Fb=function I7b(a){return this===a};var wS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$3$Type',1537);bcb(1538,1,{},J7b);_.Kb=function K7b(a){return u7b(this.a,ED(a))};_.Fb=function L7b(a){return this===a};var xS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$4$Type',1538);bcb(1539,1,{},M7b);_.Kb=function N7b(a){return v7b(this.a,ED(a))};_.Fb=function O7b(a){return this===a};var yS=mdb(Ane,'InteractiveExternalPortPositioner/lambda$5$Type',1539);bcb(77,22,{3:1,35:1,22:1,77:1,234:1},T8b);_.Kf=function U8b(){switch(this.g){case 15:return new eoc;case 22:return new Aoc;case 47:return new Joc;case 28:case 35:return new uac;case 32:return new S2b;case 42:return new _2b;case 1:return new e3b;case 41:return new h3b;case 56:return new u5b((y5b(),x5b));case 0:return new u5b((y5b(),w5b));case 2:return new p3b;case 54:return new t3b;case 33:return new M3b;case 51:return new L4b;case 55:return new I5b;case 13:return new Q5b;case 38:return new Z5b;case 44:return new l6b;case 40:return new z6b;case 9:return new J6b;case 49:return new sgc;case 37:return new X6b;case 43:return new g7b;case 27:return new j7b;case 30:return new m7b;case 3:return new r7b;case 18:return new b9b;case 29:return new h9b;case 5:return new u9b;case 50:return new D9b;case 34:return new $9b;case 36:return new Iac;case 52:return new i4b;case 11:return new Sac;case 7:return new abc;case 39:return new obc;case 45:return new rbc;case 16:return new vbc;case 10:return new Fbc;case 48:return new Xbc;case 21:return new ccc;case 23:return new fGc((rGc(),pGc));case 8:return new lcc;case 12:return new tcc;case 4:return new ycc;case 19:return new Tcc;case 17:return new pdc;case 53:return new sdc;case 6:return new hec;case 25:return new wdc;case 46:return new Ndc;case 31:return new sec;case 14:return new Fec;case 26:return new ppc;case 20:return new Uec;case 24:return new fGc((rGc(),qGc));default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var P7b,Q7b,R7b,S7b,T7b,U7b,V7b,W7b,X7b,Y7b,Z7b,$7b,_7b,a8b,b8b,c8b,d8b,e8b,f8b,g8b,h8b,i8b,j8b,k8b,l8b,m8b,n8b,o8b,p8b,q8b,r8b,s8b,t8b,u8b,v8b,w8b,x8b,y8b,z8b,A8b,B8b,C8b,D8b,E8b,F8b,G8b,H8b,I8b,J8b,K8b,L8b,M8b,N8b,O8b,P8b,Q8b,R8b;var AS=ndb(Ane,Ene,77,CI,W8b,V8b);var X8b;bcb(1540,1,ene,b9b);_.pf=function c9b(a,b){_8b(BD(a,37),b)};var BS=mdb(Ane,'InvertedPortProcessor',1540);bcb(1541,1,ene,h9b);_.pf=function i9b(a,b){g9b(BD(a,37),b)};var FS=mdb(Ane,'LabelAndNodeSizeProcessor',1541);bcb(1542,1,Oie,j9b);_.Mb=function k9b(a){return BD(a,10).k==(j0b(),h0b)};var CS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$0$Type',1542);bcb(1543,1,Oie,l9b);_.Mb=function m9b(a){return BD(a,10).k==(j0b(),e0b)};var DS=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$1$Type',1543);bcb(1544,1,qie,n9b);_.td=function o9b(a){e9b(this.b,this.a,this.c,BD(a,10))};_.a=false;_.c=false;var ES=mdb(Ane,'LabelAndNodeSizeProcessor/lambda$2$Type',1544);bcb(1545,1,ene,u9b);_.pf=function v9b(a,b){s9b(BD(a,37),b)};var p9b;var HS=mdb(Ane,'LabelDummyInserter',1545);bcb(1546,1,Vke,w9b);_.Lb=function x9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};_.Fb=function y9b(a){return this===a};_.Mb=function z9b(a){return PD(vNb(BD(a,70),(Nyc(),Qwc)))===PD((qad(),nad))};var GS=mdb(Ane,'LabelDummyInserter/1',1546);bcb(1547,1,ene,D9b);_.pf=function E9b(a,b){C9b(BD(a,37),b)};var JS=mdb(Ane,'LabelDummyRemover',1547);bcb(1548,1,Oie,F9b);_.Mb=function G9b(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var IS=mdb(Ane,'LabelDummyRemover/lambda$0$Type',1548);bcb(1359,1,ene,$9b);_.pf=function cac(a,b){W9b(this,BD(a,37),b)};_.a=null;var H9b;var QS=mdb(Ane,'LabelDummySwitcher',1359);bcb(286,1,{286:1},gac);_.c=0;_.d=null;_.f=0;var KS=mdb(Ane,'LabelDummySwitcher/LabelDummyInfo',286);bcb(1360,1,{},hac);_.Kb=function iac(a){return I9b(),new YAb(null,new Kub(BD(a,29).a,16))};var LS=mdb(Ane,'LabelDummySwitcher/lambda$0$Type',1360);bcb(1361,1,Oie,jac);_.Mb=function kac(a){return I9b(),BD(a,10).k==(j0b(),f0b)};var MS=mdb(Ane,'LabelDummySwitcher/lambda$1$Type',1361);bcb(1362,1,{},lac);_.Kb=function mac(a){return _9b(this.a,BD(a,10))};var NS=mdb(Ane,'LabelDummySwitcher/lambda$2$Type',1362);bcb(1363,1,qie,nac);_.td=function oac(a){aac(this.a,BD(a,286))};var OS=mdb(Ane,'LabelDummySwitcher/lambda$3$Type',1363);bcb(1364,1,Dke,pac);_.ue=function qac(a,b){return bac(BD(a,286),BD(b,286))};_.Fb=function rac(a){return this===a};_.ve=function sac(){return new tpb(this)};var PS=mdb(Ane,'LabelDummySwitcher/lambda$4$Type',1364);bcb(791,1,ene,uac);_.pf=function vac(a,b){tac(BD(a,37),b)};var RS=mdb(Ane,'LabelManagementProcessor',791);bcb(1549,1,ene,Iac);_.pf=function Jac(a,b){Cac(BD(a,37),b)};var TS=mdb(Ane,'LabelSideSelector',1549);bcb(1550,1,Oie,Kac);_.Mb=function Lac(a){return Ccb(DD(vNb(BD(a,70),(Nyc(),Pwc))))};var SS=mdb(Ane,'LabelSideSelector/lambda$0$Type',1550);bcb(1558,1,ene,Sac);_.pf=function Tac(a,b){Oac(BD(a,37),b)};var US=mdb(Ane,'LayerConstraintPostprocessor',1558);bcb(1559,1,ene,abc);_.pf=function bbc(a,b){$ac(BD(a,37),b)};var Uac;var WS=mdb(Ane,'LayerConstraintPreprocessor',1559);bcb(360,22,{3:1,35:1,22:1,360:1},ibc);var cbc,dbc,ebc,fbc;var VS=ndb(Ane,'LayerConstraintPreprocessor/HiddenNodeConnections',360,CI,kbc,jbc);var lbc;bcb(1560,1,ene,obc);_.pf=function pbc(a,b){nbc(BD(a,37),b)};var XS=mdb(Ane,'LayerSizeAndGraphHeightCalculator',1560);bcb(1561,1,ene,rbc);_.pf=function tbc(a,b){qbc(BD(a,37),b)};var YS=mdb(Ane,'LongEdgeJoiner',1561);bcb(1562,1,ene,vbc);_.pf=function xbc(a,b){ubc(BD(a,37),b)};var ZS=mdb(Ane,'LongEdgeSplitter',1562);bcb(1563,1,ene,Fbc);_.pf=function Ibc(a,b){Bbc(this,BD(a,37),b)};_.d=0;_.e=0;_.i=0;_.j=0;_.k=0;_.n=0;var bT=mdb(Ane,'NodePromotion',1563);bcb(1564,1,{},Jbc);_.Kb=function Kbc(a){return BD(a,46),Bcb(),true};_.Fb=function Lbc(a){return this===a};var $S=mdb(Ane,'NodePromotion/lambda$0$Type',1564);bcb(1565,1,{},Mbc);_.Kb=function Nbc(a){return Gbc(this.a,BD(a,46))};_.Fb=function Obc(a){return this===a};_.a=0;var _S=mdb(Ane,'NodePromotion/lambda$1$Type',1565);bcb(1566,1,{},Pbc);_.Kb=function Qbc(a){return Hbc(this.a,BD(a,46))};_.Fb=function Rbc(a){return this===a};_.a=0;var aT=mdb(Ane,'NodePromotion/lambda$2$Type',1566);bcb(1567,1,ene,Xbc);_.pf=function Ybc(a,b){Sbc(BD(a,37),b)};var cT=mdb(Ane,'NorthSouthPortPostprocessor',1567);bcb(1568,1,ene,ccc);_.pf=function ecc(a,b){acc(BD(a,37),b)};var eT=mdb(Ane,'NorthSouthPortPreprocessor',1568);bcb(1569,1,Dke,fcc);_.ue=function gcc(a,b){return dcc(BD(a,11),BD(b,11))};_.Fb=function hcc(a){return this===a};_.ve=function icc(){return new tpb(this)};var dT=mdb(Ane,'NorthSouthPortPreprocessor/lambda$0$Type',1569);bcb(1570,1,ene,lcc);_.pf=function ncc(a,b){kcc(BD(a,37),b)};var hT=mdb(Ane,'PartitionMidprocessor',1570);bcb(1571,1,Oie,occ);_.Mb=function pcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var fT=mdb(Ane,'PartitionMidprocessor/lambda$0$Type',1571);bcb(1572,1,qie,qcc);_.td=function rcc(a){mcc(this.a,BD(a,10))};var gT=mdb(Ane,'PartitionMidprocessor/lambda$1$Type',1572);bcb(1573,1,ene,tcc);_.pf=function ucc(a,b){scc(BD(a,37),b)};var iT=mdb(Ane,'PartitionPostprocessor',1573);bcb(1574,1,ene,ycc);_.pf=function zcc(a,b){wcc(BD(a,37),b)};var nT=mdb(Ane,'PartitionPreprocessor',1574);bcb(1575,1,Oie,Acc);_.Mb=function Bcc(a){return wNb(BD(a,10),(Nyc(),Nxc))};var jT=mdb(Ane,'PartitionPreprocessor/lambda$0$Type',1575);bcb(1576,1,{},Ccc);_.Kb=function Dcc(a){return new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var kT=mdb(Ane,'PartitionPreprocessor/lambda$1$Type',1576);bcb(1577,1,Oie,Ecc);_.Mb=function Fcc(a){return vcc(BD(a,17))};var lT=mdb(Ane,'PartitionPreprocessor/lambda$2$Type',1577);bcb(1578,1,qie,Gcc);_.td=function Hcc(a){xcc(BD(a,17))};var mT=mdb(Ane,'PartitionPreprocessor/lambda$3$Type',1578);bcb(1579,1,ene,Tcc);_.pf=function Xcc(a,b){Qcc(BD(a,37),b)};var Icc,Jcc,Kcc,Lcc,Mcc,Ncc;var tT=mdb(Ane,'PortListSorter',1579);bcb(1580,1,{},Zcc);_.Kb=function $cc(a){return Occ(),BD(a,11).e};var oT=mdb(Ane,'PortListSorter/lambda$0$Type',1580);bcb(1581,1,{},_cc);_.Kb=function adc(a){return Occ(),BD(a,11).g};var pT=mdb(Ane,'PortListSorter/lambda$1$Type',1581);bcb(1582,1,Dke,bdc);_.ue=function cdc(a,b){return Ucc(BD(a,11),BD(b,11))};_.Fb=function ddc(a){return this===a};_.ve=function edc(){return new tpb(this)};var qT=mdb(Ane,'PortListSorter/lambda$2$Type',1582);bcb(1583,1,Dke,fdc);_.ue=function gdc(a,b){return Vcc(BD(a,11),BD(b,11))};_.Fb=function hdc(a){return this===a};_.ve=function idc(){return new tpb(this)};var rT=mdb(Ane,'PortListSorter/lambda$3$Type',1583);bcb(1584,1,Dke,jdc);_.ue=function kdc(a,b){return Wcc(BD(a,11),BD(b,11))};_.Fb=function ldc(a){return this===a};_.ve=function mdc(){return new tpb(this)};var sT=mdb(Ane,'PortListSorter/lambda$4$Type',1584);bcb(1585,1,ene,pdc);_.pf=function qdc(a,b){ndc(BD(a,37),b)};var uT=mdb(Ane,'PortSideProcessor',1585);bcb(1586,1,ene,sdc);_.pf=function tdc(a,b){rdc(BD(a,37),b)};var vT=mdb(Ane,'ReversedEdgeRestorer',1586);bcb(1591,1,ene,wdc);_.pf=function xdc(a,b){udc(this,BD(a,37),b)};var CT=mdb(Ane,'SelfLoopPortRestorer',1591);bcb(1592,1,{},ydc);_.Kb=function zdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var wT=mdb(Ane,'SelfLoopPortRestorer/lambda$0$Type',1592);bcb(1593,1,Oie,Adc);_.Mb=function Bdc(a){return BD(a,10).k==(j0b(),h0b)};var xT=mdb(Ane,'SelfLoopPortRestorer/lambda$1$Type',1593);bcb(1594,1,Oie,Cdc);_.Mb=function Ddc(a){return wNb(BD(a,10),(wtc(),ntc))};var yT=mdb(Ane,'SelfLoopPortRestorer/lambda$2$Type',1594);bcb(1595,1,{},Edc);_.Kb=function Fdc(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var zT=mdb(Ane,'SelfLoopPortRestorer/lambda$3$Type',1595);bcb(1596,1,qie,Gdc);_.td=function Hdc(a){vdc(this.a,BD(a,403))};var AT=mdb(Ane,'SelfLoopPortRestorer/lambda$4$Type',1596);bcb(794,1,qie,Idc);_.td=function Jdc(a){ljc(BD(a,101))};var BT=mdb(Ane,'SelfLoopPortRestorer/lambda$5$Type',794);bcb(1597,1,ene,Ndc);_.pf=function Pdc(a,b){Kdc(BD(a,37),b)};var LT=mdb(Ane,'SelfLoopPostProcessor',1597);bcb(1598,1,{},Qdc);_.Kb=function Rdc(a){return new YAb(null,new Kub(BD(a,29).a,16))};var DT=mdb(Ane,'SelfLoopPostProcessor/lambda$0$Type',1598);bcb(1599,1,Oie,Sdc);_.Mb=function Tdc(a){return BD(a,10).k==(j0b(),h0b)};var ET=mdb(Ane,'SelfLoopPostProcessor/lambda$1$Type',1599);bcb(1600,1,Oie,Udc);_.Mb=function Vdc(a){return wNb(BD(a,10),(wtc(),ntc))};var FT=mdb(Ane,'SelfLoopPostProcessor/lambda$2$Type',1600);bcb(1601,1,qie,Wdc);_.td=function Xdc(a){Ldc(BD(a,10))};var GT=mdb(Ane,'SelfLoopPostProcessor/lambda$3$Type',1601);bcb(1602,1,{},Ydc);_.Kb=function Zdc(a){return new YAb(null,new Kub(BD(a,101).f,1))};var HT=mdb(Ane,'SelfLoopPostProcessor/lambda$4$Type',1602);bcb(1603,1,qie,$dc);_.td=function _dc(a){Mdc(this.a,BD(a,409))};var IT=mdb(Ane,'SelfLoopPostProcessor/lambda$5$Type',1603);bcb(1604,1,Oie,aec);_.Mb=function bec(a){return !!BD(a,101).i};var JT=mdb(Ane,'SelfLoopPostProcessor/lambda$6$Type',1604);bcb(1605,1,qie,cec);_.td=function dec(a){Odc(this.a,BD(a,101))};var KT=mdb(Ane,'SelfLoopPostProcessor/lambda$7$Type',1605);bcb(1587,1,ene,hec);_.pf=function iec(a,b){gec(BD(a,37),b)};var PT=mdb(Ane,'SelfLoopPreProcessor',1587);bcb(1588,1,{},jec);_.Kb=function kec(a){return new YAb(null,new Kub(BD(a,101).f,1))};var MT=mdb(Ane,'SelfLoopPreProcessor/lambda$0$Type',1588);bcb(1589,1,{},lec);_.Kb=function mec(a){return BD(a,409).a};var NT=mdb(Ane,'SelfLoopPreProcessor/lambda$1$Type',1589);bcb(1590,1,qie,nec);_.td=function oec(a){fec(BD(a,17))};var OT=mdb(Ane,'SelfLoopPreProcessor/lambda$2$Type',1590);bcb(1606,1,ene,sec);_.pf=function tec(a,b){qec(this,BD(a,37),b)};var VT=mdb(Ane,'SelfLoopRouter',1606);bcb(1607,1,{},uec);_.Kb=function vec(a){return new YAb(null,new Kub(BD(a,29).a,16))};var QT=mdb(Ane,'SelfLoopRouter/lambda$0$Type',1607);bcb(1608,1,Oie,wec);_.Mb=function xec(a){return BD(a,10).k==(j0b(),h0b)};var RT=mdb(Ane,'SelfLoopRouter/lambda$1$Type',1608);bcb(1609,1,Oie,yec);_.Mb=function zec(a){return wNb(BD(a,10),(wtc(),ntc))};var ST=mdb(Ane,'SelfLoopRouter/lambda$2$Type',1609);bcb(1610,1,{},Aec);_.Kb=function Bec(a){return BD(vNb(BD(a,10),(wtc(),ntc)),403)};var TT=mdb(Ane,'SelfLoopRouter/lambda$3$Type',1610);bcb(1611,1,qie,Cec);_.td=function Dec(a){pec(this.a,this.b,BD(a,403))};var UT=mdb(Ane,'SelfLoopRouter/lambda$4$Type',1611);bcb(1612,1,ene,Fec);_.pf=function Iec(a,b){Eec(BD(a,37),b)};var $T=mdb(Ane,'SemiInteractiveCrossMinProcessor',1612);bcb(1613,1,Oie,Jec);_.Mb=function Kec(a){return BD(a,10).k==(j0b(),h0b)};var WT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1613);bcb(1614,1,Oie,Lec);_.Mb=function Mec(a){return uNb(BD(a,10))._b((Nyc(),ayc))};var XT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1614);bcb(1615,1,Dke,Nec);_.ue=function Oec(a,b){return Gec(BD(a,10),BD(b,10))};_.Fb=function Pec(a){return this===a};_.ve=function Qec(){return new tpb(this)};var YT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1615);bcb(1616,1,{},Rec);_.Ce=function Sec(a,b){return Hec(BD(a,10),BD(b,10))};var ZT=mdb(Ane,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1616);bcb(1618,1,ene,Uec);_.pf=function Yec(a,b){Tec(BD(a,37),b)};var bU=mdb(Ane,'SortByInputModelProcessor',1618);bcb(1619,1,Oie,Zec);_.Mb=function $ec(a){return BD(a,11).g.c.length!=0};var _T=mdb(Ane,'SortByInputModelProcessor/lambda$0$Type',1619);bcb(1620,1,qie,_ec);_.td=function afc(a){Wec(this.a,BD(a,11))};var aU=mdb(Ane,'SortByInputModelProcessor/lambda$1$Type',1620);bcb(1693,803,{},jfc);_.Me=function kfc(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new Rkb;MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new lgc),new ngc(this,b));nEb(this,new tfc);Hkb(b,new xfc);b.c=KC(SI,Uhe,1,0,5,1);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new zfc),new Bfc(b));nEb(this,new Ffc);Hkb(b,new Jfc);b.c=KC(SI,Uhe,1,0,5,1);c=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new Lfc(this))),new Nfc);MAb(new YAb(null,new Kub(this.c.a.a,16)),new Rfc(c,b));nEb(this,new Vfc);Hkb(b,new Zfc);b.c=KC(SI,Uhe,1,0,5,1);break;case 3:d=new Rkb;nEb(this,new lfc);e=Ntb($zb(OAb(new YAb(null,new Kub(this.c.a.b,16)),new pfc(this))),new Pfc);MAb(JAb(new YAb(null,new Kub(this.c.a.b,16)),new _fc),new bgc(e,d));nEb(this,new fgc);Hkb(d,new jgc);d.c=KC(SI,Uhe,1,0,5,1);break;default:throw vbb(new x2c);}};_.b=0;var AU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation',1693);bcb(1694,1,Vke,lfc);_.Lb=function mfc(a){return JD(BD(a,57).g,145)};_.Fb=function nfc(a){return this===a};_.Mb=function ofc(a){return JD(BD(a,57).g,145)};var cU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1694);bcb(1695,1,{},pfc);_.Fe=function qfc(a){return dfc(this.a,BD(a,57))};var dU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1695);bcb(1703,1,Pie,rfc);_.Vd=function sfc(){cfc(this.a,this.b,-1)};_.b=0;var eU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1703);bcb(1705,1,Vke,tfc);_.Lb=function ufc(a){return JD(BD(a,57).g,145)};_.Fb=function vfc(a){return this===a};_.Mb=function wfc(a){return JD(BD(a,57).g,145)};var fU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1705);bcb(1706,1,qie,xfc);_.td=function yfc(a){BD(a,365).Vd()};var gU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1706);bcb(1707,1,Oie,zfc);_.Mb=function Afc(a){return JD(BD(a,57).g,10)};var hU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1707);bcb(1709,1,qie,Bfc);_.td=function Cfc(a){efc(this.a,BD(a,57))};var iU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1709);bcb(1708,1,Pie,Dfc);_.Vd=function Efc(){cfc(this.b,this.a,-1)};_.a=0;var jU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1708);bcb(1710,1,Vke,Ffc);_.Lb=function Gfc(a){return JD(BD(a,57).g,10)};_.Fb=function Hfc(a){return this===a};_.Mb=function Ifc(a){return JD(BD(a,57).g,10)};var kU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1710);bcb(1711,1,qie,Jfc);_.td=function Kfc(a){BD(a,365).Vd()};var lU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1711);bcb(1712,1,{},Lfc);_.Fe=function Mfc(a){return ffc(this.a,BD(a,57))};var mU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1712);bcb(1713,1,{},Nfc);_.De=function Ofc(){return 0};var nU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1713);bcb(1696,1,{},Pfc);_.De=function Qfc(){return 0};var oU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1696);bcb(1715,1,qie,Rfc);_.td=function Sfc(a){gfc(this.a,this.b,BD(a,307))};_.a=0;var pU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1715);bcb(1714,1,Pie,Tfc);_.Vd=function Ufc(){bfc(this.a,this.b,-1)};_.b=0;var qU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1714);bcb(1716,1,Vke,Vfc);_.Lb=function Wfc(a){return BD(a,57),true};_.Fb=function Xfc(a){return this===a};_.Mb=function Yfc(a){return BD(a,57),true};var rU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1716);bcb(1717,1,qie,Zfc);_.td=function $fc(a){BD(a,365).Vd()};var sU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1717);bcb(1697,1,Oie,_fc);_.Mb=function agc(a){return JD(BD(a,57).g,10)};var tU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1697);bcb(1699,1,qie,bgc);_.td=function cgc(a){hfc(this.a,this.b,BD(a,57))};_.a=0;var uU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1699);bcb(1698,1,Pie,dgc);_.Vd=function egc(){cfc(this.b,this.a,-1)};_.a=0;var vU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1698);bcb(1700,1,Vke,fgc);_.Lb=function ggc(a){return BD(a,57),true};_.Fb=function hgc(a){return this===a};_.Mb=function igc(a){return BD(a,57),true};var wU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1700);bcb(1701,1,qie,jgc);_.td=function kgc(a){BD(a,365).Vd()};var xU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1701);bcb(1702,1,Oie,lgc);_.Mb=function mgc(a){return JD(BD(a,57).g,145)};var yU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1702);bcb(1704,1,qie,ngc);_.td=function ogc(a){ifc(this.a,this.b,BD(a,57))};var zU=mdb(Jne,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1704);bcb(1521,1,ene,sgc);_.pf=function xgc(a,b){rgc(this,BD(a,37),b)};var pgc;var EU=mdb(Jne,'HorizontalGraphCompactor',1521);bcb(1522,1,{},ygc);_.Oe=function zgc(a,b){var c,d,e;if(vgc(a,b)){return 0}c=tgc(a);d=tgc(b);if(!!c&&c.k==(j0b(),e0b)||!!d&&d.k==(j0b(),e0b)){return 0}e=BD(vNb(this.a.a,(wtc(),otc)),304);return fBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};_.Pe=function Agc(a,b){var c,d,e;if(vgc(a,b)){return 1}c=tgc(a);d=tgc(b);e=BD(vNb(this.a.a,(wtc(),otc)),304);return iBc(e,c?c.k:(j0b(),g0b),d?d.k:(j0b(),g0b))};var BU=mdb(Jne,'HorizontalGraphCompactor/1',1522);bcb(1523,1,{},Bgc);_.Ne=function Cgc(a,b){return qgc(),a.a.i==0};var CU=mdb(Jne,'HorizontalGraphCompactor/lambda$0$Type',1523);bcb(1524,1,{},Dgc);_.Ne=function Egc(a,b){return wgc(this.a,a,b)};var DU=mdb(Jne,'HorizontalGraphCompactor/lambda$1$Type',1524);bcb(1664,1,{},Ygc);var Fgc,Ggc;var cV=mdb(Jne,'LGraphToCGraphTransformer',1664);bcb(1672,1,Oie,ehc);_.Mb=function fhc(a){return a!=null};var FU=mdb(Jne,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1672);bcb(1665,1,{},ghc);_.Kb=function hhc(a){return Hgc(),fcb(vNb(BD(BD(a,57).g,10),(wtc(),$sc)))};var GU=mdb(Jne,'LGraphToCGraphTransformer/lambda$0$Type',1665);bcb(1666,1,{},ihc);_.Kb=function jhc(a){return Hgc(),gic(BD(BD(a,57).g,145))};var HU=mdb(Jne,'LGraphToCGraphTransformer/lambda$1$Type',1666);bcb(1675,1,Oie,khc);_.Mb=function lhc(a){return Hgc(),JD(BD(a,57).g,10)};var IU=mdb(Jne,'LGraphToCGraphTransformer/lambda$10$Type',1675);bcb(1676,1,qie,mhc);_.td=function nhc(a){Zgc(BD(a,57))};var JU=mdb(Jne,'LGraphToCGraphTransformer/lambda$11$Type',1676);bcb(1677,1,Oie,ohc);_.Mb=function phc(a){return Hgc(),JD(BD(a,57).g,145)};var KU=mdb(Jne,'LGraphToCGraphTransformer/lambda$12$Type',1677);bcb(1681,1,qie,qhc);_.td=function rhc(a){$gc(BD(a,57))};var LU=mdb(Jne,'LGraphToCGraphTransformer/lambda$13$Type',1681);bcb(1678,1,qie,shc);_.td=function thc(a){_gc(this.a,BD(a,8))};_.a=0;var MU=mdb(Jne,'LGraphToCGraphTransformer/lambda$14$Type',1678);bcb(1679,1,qie,uhc);_.td=function vhc(a){ahc(this.a,BD(a,110))};_.a=0;var NU=mdb(Jne,'LGraphToCGraphTransformer/lambda$15$Type',1679);bcb(1680,1,qie,whc);_.td=function xhc(a){bhc(this.a,BD(a,8))};_.a=0;var OU=mdb(Jne,'LGraphToCGraphTransformer/lambda$16$Type',1680);bcb(1682,1,{},yhc);_.Kb=function zhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var PU=mdb(Jne,'LGraphToCGraphTransformer/lambda$17$Type',1682);bcb(1683,1,Oie,Ahc);_.Mb=function Bhc(a){return Hgc(),OZb(BD(a,17))};var QU=mdb(Jne,'LGraphToCGraphTransformer/lambda$18$Type',1683);bcb(1684,1,qie,Chc);_.td=function Dhc(a){Qgc(this.a,BD(a,17))};var RU=mdb(Jne,'LGraphToCGraphTransformer/lambda$19$Type',1684);bcb(1668,1,qie,Ehc);_.td=function Fhc(a){Rgc(this.a,BD(a,145))};var SU=mdb(Jne,'LGraphToCGraphTransformer/lambda$2$Type',1668);bcb(1685,1,{},Ghc);_.Kb=function Hhc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var TU=mdb(Jne,'LGraphToCGraphTransformer/lambda$20$Type',1685);bcb(1686,1,{},Ihc);_.Kb=function Jhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var UU=mdb(Jne,'LGraphToCGraphTransformer/lambda$21$Type',1686);bcb(1687,1,{},Khc);_.Kb=function Lhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var VU=mdb(Jne,'LGraphToCGraphTransformer/lambda$22$Type',1687);bcb(1688,1,Oie,Mhc);_.Mb=function Nhc(a){return chc(BD(a,15))};var WU=mdb(Jne,'LGraphToCGraphTransformer/lambda$23$Type',1688);bcb(1689,1,qie,Ohc);_.td=function Phc(a){Jgc(this.a,BD(a,15))};var XU=mdb(Jne,'LGraphToCGraphTransformer/lambda$24$Type',1689);bcb(1667,1,qie,Qhc);_.td=function Rhc(a){Sgc(this.a,this.b,BD(a,145))};var YU=mdb(Jne,'LGraphToCGraphTransformer/lambda$3$Type',1667);bcb(1669,1,{},Shc);_.Kb=function Thc(a){return Hgc(),new YAb(null,new Kub(BD(a,29).a,16))};var ZU=mdb(Jne,'LGraphToCGraphTransformer/lambda$4$Type',1669);bcb(1670,1,{},Uhc);_.Kb=function Vhc(a){return Hgc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var $U=mdb(Jne,'LGraphToCGraphTransformer/lambda$5$Type',1670);bcb(1671,1,{},Whc);_.Kb=function Xhc(a){return Hgc(),BD(vNb(BD(a,17),(wtc(),rtc)),15)};var _U=mdb(Jne,'LGraphToCGraphTransformer/lambda$6$Type',1671);bcb(1673,1,qie,Yhc);_.td=function Zhc(a){dhc(this.a,BD(a,15))};var aV=mdb(Jne,'LGraphToCGraphTransformer/lambda$8$Type',1673);bcb(1674,1,qie,$hc);_.td=function _hc(a){Tgc(this.a,this.b,BD(a,145))};var bV=mdb(Jne,'LGraphToCGraphTransformer/lambda$9$Type',1674);bcb(1663,1,{},dic);_.Le=function eic(a){var b,c,d,e,f;this.a=a;this.d=new KFb;this.c=KC(jN,Uhe,121,this.a.a.a.c.length,0,1);this.b=0;for(c=new olb(this.a.a.a);c.a<c.c.c.length;){b=BD(mlb(c),307);b.d=this.b;f=nGb(oGb(new pGb,b),this.d);this.c[this.b]=f;++this.b}cic(this);bic(this);aic(this);uGb(LGb(this.d),new Zdd);for(e=new olb(this.a.a.b);e.a<e.c.c.length;){d=BD(mlb(e),57);d.d.c=this.c[d.a.d].e+d.b.a}};_.b=0;var dV=mdb(Jne,'NetworkSimplexCompaction',1663);bcb(145,1,{35:1,145:1},hic);_.wd=function iic(a){return fic(this,BD(a,145))};_.Ib=function jic(){return gic(this)};var eV=mdb(Jne,'VerticalSegment',145);bcb(827,1,{},sic);_.c=0;_.e=0;_.i=0;var hV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter',827);bcb(663,1,{663:1},zic);_.Ib=function Aic(){return 'AdjacencyList [node='+this.d+', adjacencies= '+this.a+']'};_.b=0;_.c=0;_.f=0;var gV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList',663);bcb(287,1,{35:1,287:1},Dic);_.wd=function Eic(a){return Bic(this,BD(a,287))};_.Ib=function Fic(){return 'Adjacency [position='+this.c+', cardinality='+this.a+', currentCardinality='+this.b+']'};_.a=0;_.b=0;_.c=0;var fV=mdb(Kne,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency',287);bcb(1929,1,{},Iic);_.b=0;_.e=false;var iV=mdb(Kne,'CrossingMatrixFiller',1929);var qY=odb(Lne,'IInitializable');bcb(1804,1,Mne,Oic);_.Nf=function Ric(a,b,c,d,e,f){};_.Pf=function Tic(a,b,c){};_.Lf=function Pic(){return this.c!=(rGc(),pGc)};_.Mf=function Qic(){this.e=KC(WD,oje,25,this.d,15,1)};_.Of=function Sic(a,b){b[a][0].c.p=a};_.Qf=function Uic(a,b,c,d){++this.d};_.Rf=function Vic(){return true};_.Sf=function Wic(a,b,c,d){Kic(this,a,b,c);return Jic(this,b)};_.Tf=function Xic(a,b){var c;c=Lic(b,a.length);Kic(this,a,c,b);return Mic(this,c)};_.d=0;var jV=mdb(Kne,'GreedySwitchHeuristic',1804);bcb(1930,1,{},ejc);_.b=0;_.d=0;var kV=mdb(Kne,'NorthSouthEdgeNeighbouringNodeCrossingsCounter',1930);bcb(1917,1,{},jjc);_.a=false;var lV=mdb(Kne,'SwitchDecider',1917);bcb(101,1,{101:1},pjc);_.a=null;_.c=null;_.i=null;var oV=mdb(Nne,'SelfHyperLoop',101);bcb(1916,1,{},vjc);_.c=0;_.e=0;var nV=mdb(Nne,'SelfHyperLoopLabels',1916);bcb(411,22,{3:1,35:1,22:1,411:1},Bjc);var wjc,xjc,yjc,zjc;var mV=ndb(Nne,'SelfHyperLoopLabels/Alignment',411,CI,Djc,Cjc);var Ejc;bcb(409,1,{409:1},Gjc);var pV=mdb(Nne,'SelfLoopEdge',409);bcb(403,1,{403:1},Kjc);_.a=false;var rV=mdb(Nne,'SelfLoopHolder',403);bcb(1724,1,Oie,Mjc);_.Mb=function Njc(a){return OZb(BD(a,17))};var qV=mdb(Nne,'SelfLoopHolder/lambda$0$Type',1724);bcb(113,1,{113:1},Pjc);_.a=false;_.c=false;var tV=mdb(Nne,'SelfLoopPort',113);bcb(1792,1,Oie,Qjc);_.Mb=function Rjc(a){return OZb(BD(a,17))};var sV=mdb(Nne,'SelfLoopPort/lambda$0$Type',1792);bcb(363,22,{3:1,35:1,22:1,363:1},Yjc);var Sjc,Tjc,Ujc,Vjc,Wjc;var uV=ndb(Nne,'SelfLoopType',363,CI,_jc,$jc);var akc;bcb(1732,1,{},xkc);var ckc,dkc,ekc,fkc;var JV=mdb(One,'PortRestorer',1732);bcb(361,22,{3:1,35:1,22:1,361:1},Gkc);var Ckc,Dkc,Ekc;var vV=ndb(One,'PortRestorer/PortSideArea',361,CI,Ikc,Hkc);var Jkc;bcb(1733,1,{},Lkc);_.Kb=function Mkc(a){return gkc(),BD(a,15).Oc()};var wV=mdb(One,'PortRestorer/lambda$0$Type',1733);bcb(1734,1,qie,Nkc);_.td=function Okc(a){gkc();BD(a,113).c=false};var xV=mdb(One,'PortRestorer/lambda$1$Type',1734);bcb(1743,1,Oie,Pkc);_.Mb=function Qkc(a){return gkc(),BD(a,11).j==(Ucd(),Tcd)};var yV=mdb(One,'PortRestorer/lambda$10$Type',1743);bcb(1744,1,{},Rkc);_.Kb=function Skc(a){return gkc(),BD(a,113).d};var zV=mdb(One,'PortRestorer/lambda$11$Type',1744);bcb(1745,1,qie,Tkc);_.td=function Ukc(a){ykc(this.a,BD(a,11))};var AV=mdb(One,'PortRestorer/lambda$12$Type',1745);bcb(1735,1,qie,Vkc);_.td=function Wkc(a){zkc(this.a,BD(a,101))};var BV=mdb(One,'PortRestorer/lambda$2$Type',1735);bcb(1736,1,Dke,Xkc);_.ue=function Ykc(a,b){return Akc(BD(a,113),BD(b,113))};_.Fb=function Zkc(a){return this===a};_.ve=function $kc(){return new tpb(this)};var CV=mdb(One,'PortRestorer/lambda$3$Type',1736);bcb(1737,1,Oie,_kc);_.Mb=function alc(a){return gkc(),BD(a,113).c};var DV=mdb(One,'PortRestorer/lambda$4$Type',1737);bcb(1738,1,Oie,blc);_.Mb=function clc(a){return nkc(BD(a,11))};var EV=mdb(One,'PortRestorer/lambda$5$Type',1738);bcb(1739,1,Oie,dlc);_.Mb=function elc(a){return gkc(),BD(a,11).j==(Ucd(),Acd)};var FV=mdb(One,'PortRestorer/lambda$6$Type',1739);bcb(1740,1,Oie,flc);_.Mb=function glc(a){return gkc(),BD(a,11).j==(Ucd(),zcd)};var GV=mdb(One,'PortRestorer/lambda$7$Type',1740);bcb(1741,1,Oie,hlc);_.Mb=function ilc(a){return okc(BD(a,11))};var HV=mdb(One,'PortRestorer/lambda$8$Type',1741);bcb(1742,1,Oie,jlc);_.Mb=function klc(a){return gkc(),BD(a,11).j==(Ucd(),Rcd)};var IV=mdb(One,'PortRestorer/lambda$9$Type',1742);bcb(270,22,{3:1,35:1,22:1,270:1},Blc);var slc,tlc,ulc,vlc,wlc,xlc,ylc,zlc;var KV=ndb(One,'PortSideAssigner/Target',270,CI,Dlc,Clc);var Elc;bcb(1725,1,{},Glc);_.Kb=function Hlc(a){return JAb(new YAb(null,new Kub(BD(a,101).j,16)),new Ylc)};var LV=mdb(One,'PortSideAssigner/lambda$1$Type',1725);bcb(1726,1,{},Ilc);_.Kb=function Jlc(a){return BD(a,113).d};var MV=mdb(One,'PortSideAssigner/lambda$2$Type',1726);bcb(1727,1,qie,Klc);_.td=function Llc(a){G0b(BD(a,11),(Ucd(),Acd))};var NV=mdb(One,'PortSideAssigner/lambda$3$Type',1727);bcb(1728,1,{},Mlc);_.Kb=function Nlc(a){return BD(a,113).d};var OV=mdb(One,'PortSideAssigner/lambda$4$Type',1728);bcb(1729,1,qie,Olc);_.td=function Plc(a){plc(this.a,BD(a,11))};var PV=mdb(One,'PortSideAssigner/lambda$5$Type',1729);bcb(1730,1,Dke,Qlc);_.ue=function Rlc(a,b){return qlc(BD(a,101),BD(b,101))};_.Fb=function Slc(a){return this===a};_.ve=function Tlc(){return new tpb(this)};var QV=mdb(One,'PortSideAssigner/lambda$6$Type',1730);bcb(1731,1,Dke,Ulc);_.ue=function Vlc(a,b){return rlc(BD(a,113),BD(b,113))};_.Fb=function Wlc(a){return this===a};_.ve=function Xlc(){return new tpb(this)};var RV=mdb(One,'PortSideAssigner/lambda$7$Type',1731);bcb(805,1,Oie,Ylc);_.Mb=function Zlc(a){return BD(a,113).c};var SV=mdb(One,'PortSideAssigner/lambda$8$Type',805);bcb(2009,1,{});var TV=mdb(Pne,'AbstractSelfLoopRouter',2009);bcb(1750,1,Dke,gmc);_.ue=function hmc(a,b){return emc(BD(a,101),BD(b,101))};_.Fb=function imc(a){return this===a};_.ve=function jmc(){return new tpb(this)};var UV=mdb(Pne,rle,1750);bcb(1751,1,Dke,kmc);_.ue=function lmc(a,b){return fmc(BD(a,101),BD(b,101))};_.Fb=function mmc(a){return this===a};_.ve=function nmc(){return new tpb(this)};var VV=mdb(Pne,sle,1751);bcb(1793,2009,{},zmc);_.Uf=function Amc(a,b,c){return c};var XV=mdb(Pne,'OrthogonalSelfLoopRouter',1793);bcb(1795,1,qie,Bmc);_.td=function Cmc(a){ymc(this.b,this.a,BD(a,8))};var WV=mdb(Pne,'OrthogonalSelfLoopRouter/lambda$0$Type',1795);bcb(1794,1793,{},Fmc);_.Uf=function Gmc(a,b,c){var d,e;d=a.c.d;St(c,0,P6c(R6c(d.n),d.a));e=a.d.d;Dsb(c,P6c(R6c(e.n),e.a));return Dmc(c)};var YV=mdb(Pne,'PolylineSelfLoopRouter',1794);bcb(1746,1,{},Umc);_.a=null;var Hmc;var aW=mdb(Pne,'RoutingDirector',1746);bcb(1747,1,Dke,Wmc);_.ue=function Xmc(a,b){return Vmc(BD(a,113),BD(b,113))};_.Fb=function Ymc(a){return this===a};_.ve=function Zmc(){return new tpb(this)};var ZV=mdb(Pne,'RoutingDirector/lambda$0$Type',1747);bcb(1748,1,{},$mc);_.Kb=function _mc(a){return Imc(),BD(a,101).j};var $V=mdb(Pne,'RoutingDirector/lambda$1$Type',1748);bcb(1749,1,qie,anc);_.td=function bnc(a){Imc();BD(a,15).ad(Hmc)};var _V=mdb(Pne,'RoutingDirector/lambda$2$Type',1749);bcb(1752,1,{},mnc);var dW=mdb(Pne,'RoutingSlotAssigner',1752);bcb(1753,1,Oie,pnc);_.Mb=function qnc(a){return nnc(this.a,BD(a,101))};var bW=mdb(Pne,'RoutingSlotAssigner/lambda$0$Type',1753);bcb(1754,1,Dke,rnc);_.ue=function snc(a,b){return onc(this.a,BD(a,101),BD(b,101))};_.Fb=function tnc(a){return this===a};_.ve=function unc(){return new tpb(this)};var cW=mdb(Pne,'RoutingSlotAssigner/lambda$1$Type',1754);bcb(1796,1793,{},wnc);_.Uf=function xnc(a,b,c){var d,e,f,g;d=Edb(ED(c_b(a.b.g.b,(Nyc(),nyc))));g=new u7c(OC(GC(m1,1),nie,8,0,[(f=a.c.d,P6c(new g7c(f.n),f.a))]));vnc(a,b,c,g,d);Dsb(g,(e=a.d.d,P6c(new g7c(e.n),e.a)));return UPc(new YPc(g))};var eW=mdb(Pne,'SplineSelfLoopRouter',1796);bcb(578,1,Dke,Bnc,Dnc);_.ue=function Enc(a,b){return ync(this,BD(a,10),BD(b,10))};_.Fb=function Fnc(a){return this===a};_.ve=function Gnc(){return new tpb(this)};var kW=mdb(Qne,'ModelOrderNodeComparator',578);bcb(1755,1,Oie,Hnc);_.Mb=function Inc(a){return BD(a,11).e.c.length!=0};var fW=mdb(Qne,'ModelOrderNodeComparator/lambda$0$Type',1755);bcb(1756,1,{},Jnc);_.Kb=function Knc(a){return BD(Ikb(BD(a,11).e,0),17).c};var gW=mdb(Qne,'ModelOrderNodeComparator/lambda$1$Type',1756);bcb(1757,1,Oie,Lnc);_.Mb=function Mnc(a){return BD(a,11).e.c.length!=0};var hW=mdb(Qne,'ModelOrderNodeComparator/lambda$2$Type',1757);bcb(1758,1,{},Nnc);_.Kb=function Onc(a){return BD(Ikb(BD(a,11).e,0),17).c};var iW=mdb(Qne,'ModelOrderNodeComparator/lambda$3$Type',1758);bcb(1759,1,Oie,Pnc);_.Mb=function Qnc(a){return BD(a,11).e.c.length!=0};var jW=mdb(Qne,'ModelOrderNodeComparator/lambda$4$Type',1759);bcb(806,1,Dke,Tnc,Unc);_.ue=function Vnc(a,b){return Rnc(this,a,b)};_.Fb=function Wnc(a){return this===a};_.ve=function Xnc(){return new tpb(this)};var lW=mdb(Qne,'ModelOrderPortComparator',806);bcb(801,1,{},Ync);_.Vf=function $nc(a,b){var c,d,e,f;e=Znc(b);c=new Rkb;f=b.f/e;for(d=1;d<e;++d){Ekb(c,meb(Tbb(Cbb($wnd.Math.round(d*f)))))}return c};_.Wf=function _nc(){return false};var mW=mdb(Rne,'ARDCutIndexHeuristic',801);bcb(1479,1,ene,eoc);_.pf=function foc(a,b){doc(BD(a,37),b)};var pW=mdb(Rne,'BreakingPointInserter',1479);bcb(305,1,{305:1},goc);_.Ib=function joc(){var a;a=new Ufb;a.a+='BPInfo[';a.a+='\n\tstart=';Pfb(a,this.i);a.a+='\n\tend=';Pfb(a,this.a);a.a+='\n\tnodeStartEdge=';Pfb(a,this.e);a.a+='\n\tstartEndEdge=';Pfb(a,this.j);a.a+='\n\toriginalEdge=';Pfb(a,this.f);a.a+='\n\tstartInLayerDummy=';Pfb(a,this.k);a.a+='\n\tstartInLayerEdge=';Pfb(a,this.n);a.a+='\n\tendInLayerDummy=';Pfb(a,this.b);a.a+='\n\tendInLayerEdge=';Pfb(a,this.c);return a.a};var nW=mdb(Rne,'BreakingPointInserter/BPInfo',305);bcb(652,1,{652:1},qoc);_.a=false;_.b=0;_.c=0;var oW=mdb(Rne,'BreakingPointInserter/Cut',652);bcb(1480,1,ene,Aoc);_.pf=function Boc(a,b){yoc(BD(a,37),b)};var sW=mdb(Rne,'BreakingPointProcessor',1480);bcb(1481,1,Oie,Coc);_.Mb=function Doc(a){return hoc(BD(a,10))};var qW=mdb(Rne,'BreakingPointProcessor/0methodref$isEnd$Type',1481);bcb(1482,1,Oie,Eoc);_.Mb=function Foc(a){return ioc(BD(a,10))};var rW=mdb(Rne,'BreakingPointProcessor/1methodref$isStart$Type',1482);bcb(1483,1,ene,Joc);_.pf=function Koc(a,b){Hoc(this,BD(a,37),b)};var uW=mdb(Rne,'BreakingPointRemover',1483);bcb(1484,1,qie,Loc);_.td=function Moc(a){BD(a,128).k=true};var tW=mdb(Rne,'BreakingPointRemover/lambda$0$Type',1484);bcb(797,1,{},Xoc);_.b=0;_.e=0;_.f=0;_.j=0;var AW=mdb(Rne,'GraphStats',797);bcb(798,1,{},Zoc);_.Ce=function $oc(a,b){return $wnd.Math.max(Edb(ED(a)),Edb(ED(b)))};var vW=mdb(Rne,'GraphStats/0methodref$max$Type',798);bcb(799,1,{},_oc);_.Ce=function apc(a,b){return $wnd.Math.max(Edb(ED(a)),Edb(ED(b)))};var wW=mdb(Rne,'GraphStats/2methodref$max$Type',799);bcb(1660,1,{},bpc);_.Ce=function cpc(a,b){return Yoc(ED(a),ED(b))};var xW=mdb(Rne,'GraphStats/lambda$1$Type',1660);bcb(1661,1,{},dpc);_.Kb=function epc(a){return Roc(this.a,BD(a,29))};var yW=mdb(Rne,'GraphStats/lambda$2$Type',1661);bcb(1662,1,{},fpc);_.Kb=function gpc(a){return Qoc(this.a,BD(a,29))};var zW=mdb(Rne,'GraphStats/lambda$6$Type',1662);bcb(800,1,{},hpc);_.Vf=function ipc(a,b){var c;c=BD(vNb(a,(Nyc(),Eyc)),15);return c?c:(mmb(),mmb(),jmb)};_.Wf=function jpc(){return false};var BW=mdb(Rne,'ICutIndexCalculator/ManualCutIndexCalculator',800);bcb(802,1,{},kpc);_.Vf=function lpc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=(b.n==null&&Uoc(b),b.n);i=(b.d==null&&Uoc(b),b.d);t=KC(UD,Vje,25,u.length,15,1);t[0]=u[0];r=u[0];for(j=1;j<u.length;j++){t[j]=t[j-1]+u[j];r+=u[j]}e=Znc(b)-1;g=BD(vNb(a,(Nyc(),Fyc)),19).a;d=Qje;c=new Rkb;for(m=$wnd.Math.max(0,e-g);m<=$wnd.Math.min(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new Rkb;s=Qje;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=Poc(b,new _oc)),Edb(b.g))}else{while(k<b.f){if(t[k-1]-q>=p){Ekb(f,meb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.Wf=function mpc(){return false};var CW=mdb(Rne,'MSDCutIndexHeuristic',802);bcb(1617,1,ene,ppc);_.pf=function qpc(a,b){opc(BD(a,37),b)};var DW=mdb(Rne,'SingleEdgeGraphWrapper',1617);bcb(227,22,{3:1,35:1,22:1,227:1},Bpc);var upc,vpc,wpc,xpc,ypc,zpc;var EW=ndb(Sne,'CenterEdgeLabelPlacementStrategy',227,CI,Dpc,Cpc);var Epc;bcb(422,22,{3:1,35:1,22:1,422:1},Jpc);var Gpc,Hpc;var FW=ndb(Sne,'ConstraintCalculationStrategy',422,CI,Lpc,Kpc);var Mpc;bcb(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},Tpc);_.Kf=function Vpc(){return Spc(this)};_.Xf=function Upc(){return Spc(this)};var Opc,Ppc,Qpc;var GW=ndb(Sne,'CrossingMinimizationStrategy',314,CI,Xpc,Wpc);var Ypc;bcb(337,22,{3:1,35:1,22:1,337:1},cqc);var $pc,_pc,aqc;var HW=ndb(Sne,'CuttingStrategy',337,CI,eqc,dqc);var fqc;bcb(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},oqc);_.Kf=function qqc(){return nqc(this)};_.Xf=function pqc(){return nqc(this)};var hqc,iqc,jqc,kqc,lqc;var IW=ndb(Sne,'CycleBreakingStrategy',335,CI,sqc,rqc);var tqc;bcb(419,22,{3:1,35:1,22:1,419:1},yqc);var vqc,wqc;var JW=ndb(Sne,'DirectionCongruency',419,CI,Aqc,zqc);var Bqc;bcb(450,22,{3:1,35:1,22:1,450:1},Hqc);var Dqc,Eqc,Fqc;var KW=ndb(Sne,'EdgeConstraint',450,CI,Jqc,Iqc);var Kqc;bcb(276,22,{3:1,35:1,22:1,276:1},Uqc);var Mqc,Nqc,Oqc,Pqc,Qqc,Rqc;var LW=ndb(Sne,'EdgeLabelSideSelection',276,CI,Wqc,Vqc);var Xqc;bcb(479,22,{3:1,35:1,22:1,479:1},arc);var Zqc,$qc;var MW=ndb(Sne,'EdgeStraighteningStrategy',479,CI,crc,brc);var drc;bcb(274,22,{3:1,35:1,22:1,274:1},mrc);var frc,grc,hrc,irc,jrc,krc;var NW=ndb(Sne,'FixedAlignment',274,CI,orc,nrc);var prc;bcb(275,22,{3:1,35:1,22:1,275:1},zrc);var rrc,trc,urc,vrc,wrc,xrc;var OW=ndb(Sne,'GraphCompactionStrategy',275,CI,Brc,Arc);var Crc;bcb(256,22,{3:1,35:1,22:1,256:1},Prc);var Erc,Frc,Grc,Hrc,Irc,Jrc,Krc,Lrc,Mrc,Nrc;var PW=ndb(Sne,'GraphProperties',256,CI,Rrc,Qrc);var Src;bcb(292,22,{3:1,35:1,22:1,292:1},Yrc);var Urc,Vrc,Wrc;var QW=ndb(Sne,'GreedySwitchType',292,CI,$rc,Zrc);var _rc;bcb(303,22,{3:1,35:1,22:1,303:1},fsc);var bsc,csc,dsc;var RW=ndb(Sne,'InLayerConstraint',303,CI,hsc,gsc);var isc;bcb(420,22,{3:1,35:1,22:1,420:1},nsc);var ksc,lsc;var SW=ndb(Sne,'InteractiveReferencePoint',420,CI,psc,osc);var qsc;var ssc,tsc,usc,vsc,wsc,xsc,ysc,zsc,Asc,Bsc,Csc,Dsc,Esc,Fsc,Gsc,Hsc,Isc,Jsc,Ksc,Lsc,Msc,Nsc,Osc,Psc,Qsc,Rsc,Ssc,Tsc,Usc,Vsc,Wsc,Xsc,Ysc,Zsc,$sc,_sc,atc,btc,ctc,dtc,etc,ftc,gtc,htc,itc,jtc,ktc,ltc,mtc,ntc,otc,ptc,qtc,rtc,stc,ttc,utc,vtc;bcb(163,22,{3:1,35:1,22:1,163:1},Dtc);var xtc,ytc,ztc,Atc,Btc;var TW=ndb(Sne,'LayerConstraint',163,CI,Ftc,Etc);var Gtc;bcb(848,1,ale,kwc);_.Qe=function lwc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yne),''),'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.'),puc),(_5c(),V5c)),JW),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zne),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$ne),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),Muc),V5c),SW),pqb(L5c))));o4c(a,$ne,goe,Ouc);o4c(a,$ne,qoe,Nuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_ne),''),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aoe),''),'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.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(C5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,boe),''),'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."),false),T5c),wI),pqb(M5c)),OC(GC(ZI,1),nie,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,coe),''),'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."),xvc),V5c),cX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,doe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),meb(7)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eoe),''),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,foe),''),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,goe),'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).'),nuc),V5c),IW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hoe),ppe),'Node Layering Strategy'),'Strategy for node layering.'),bvc),V5c),YW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ioe),ppe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),Tuc),V5c),TW),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,joe),ppe),'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."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,koe),ppe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,loe),qpe),'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."),meb(4)),X5c),JI),pqb(L5c))));o4c(a,loe,hoe,Wuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,moe),qpe),'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."),meb(2)),X5c),JI),pqb(L5c))));o4c(a,moe,hoe,Yuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,noe),rpe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),_uc),V5c),aX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ooe),rpe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),meb(0)),X5c),JI),pqb(L5c))));o4c(a,ooe,noe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,poe),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),meb(Ohe)),X5c),JI),pqb(L5c))));o4c(a,poe,hoe,Quc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qoe),spe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),luc),V5c),GW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,roe),spe),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,soe),spe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),U5c),BI),pqb(L5c))));o4c(a,soe,tpe,fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,toe),spe),'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."),false),T5c),wI),pqb(L5c))));o4c(a,toe,qoe,juc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,uoe),spe),'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."),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,voe),spe),'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.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,woe),upe),'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."),meb(40)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xoe),upe),'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."),cuc),V5c),QW),pqb(L5c))));o4c(a,xoe,qoe,duc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yoe),'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."),$tc),V5c),QW),pqb(L5c))));o4c(a,yoe,qoe,_tc);o4c(a,yoe,tpe,auc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zoe),vpe),'Node Placement Strategy'),'Strategy for node placement.'),vvc),V5c),_W),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Aoe),vpe),'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."),T5c),wI),pqb(L5c))));o4c(a,Aoe,zoe,lvc);o4c(a,Aoe,zoe,mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Boe),wpe),'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."),fvc),V5c),MW),pqb(L5c))));o4c(a,Boe,zoe,gvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Coe),wpe),'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.'),ivc),V5c),NW),pqb(L5c))));o4c(a,Coe,zoe,jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Doe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),U5c),BI),pqb(L5c))));o4c(a,Doe,zoe,ovc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Eoe),'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."),V5c),$W),pqb(K5c))));o4c(a,Eoe,zoe,tvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Foe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),rvc),V5c),$W),pqb(L5c))));o4c(a,Foe,zoe,svc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Goe),xpe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),xuc),V5c),eX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hoe),xpe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),zuc),V5c),fX),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ioe),'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.'),Buc),V5c),hX),pqb(L5c))));o4c(a,Ioe,ype,Cuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Joe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),U5c),BI),pqb(L5c))));o4c(a,Joe,ype,Euc);o4c(a,Joe,Ioe,Fuc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Koe),'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),U5c),BI),pqb(L5c))));o4c(a,Koe,ype,vuc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Loe),zpe),'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."),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Moe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Noe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ooe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Poe),Ape),'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.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qoe),Ape),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Roe),Ape),'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.'),meb(0)),X5c),JI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Soe),Bpe),Ole),'Tries to further compact components (disconnected sub-graphs).'),false),T5c),wI),pqb(L5c))));o4c(a,Soe,zme,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Toe),Cpe),'Post Compaction Strategy'),Dpe),Ntc),V5c),OW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Uoe),Cpe),'Post Compaction Constraint Calculation'),Dpe),Ltc),V5c),FW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Voe),Epe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Woe),Epe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),meb(16)),X5c),JI),pqb(L5c))));o4c(a,Woe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xoe),Epe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),meb(5)),X5c),JI),pqb(L5c))));o4c(a,Xoe,Voe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yoe),Fpe),'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'."),bwc),V5c),jX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zoe),Fpe),'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),U5c),BI),pqb(L5c))));o4c(a,Zoe,Yoe,Ivc);o4c(a,Zoe,Yoe,Jvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$oe),Fpe),'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),U5c),BI),pqb(L5c))));o4c(a,$oe,Yoe,Lvc);o4c(a,$oe,Yoe,Mvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_oe),Gpe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),Tvc),V5c),HW),pqb(L5c))));o4c(a,_oe,Yoe,Uvc);o4c(a,_oe,Yoe,Vvc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,ape),Gpe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),Y5c),yK),pqb(L5c))));o4c(a,ape,_oe,Ovc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bpe),'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.'),Qvc),X5c),JI),pqb(L5c))));o4c(a,bpe,_oe,Rvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cpe),Hpe),'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.'),gwc),V5c),iX),pqb(L5c))));o4c(a,cpe,Yoe,hwc);o4c(a,cpe,Yoe,iwc);t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,dpe),Hpe),'Valid Indices for Wrapping'),null),Y5c),yK),pqb(L5c))));o4c(a,dpe,Yoe,dwc);o4c(a,dpe,Yoe,ewc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,epe),Ipe),'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.'),true),T5c),wI),pqb(L5c))));o4c(a,epe,Yoe,Zvc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fpe),Ipe),'Distance Penalty When Improving Cuts'),null),2),U5c),BI),pqb(L5c))));o4c(a,fpe,Yoe,Xvc);o4c(a,fpe,epe,true);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gpe),Ipe),'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.'),true),T5c),wI),pqb(L5c))));o4c(a,gpe,Yoe,_vc);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,hpe),Jpe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),tuc),V5c),LW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ipe),Jpe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),ruc),V5c),EW),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,jpe),Kpe),'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.'),Wtc),V5c),bX),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,kpe),Kpe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lpe),Kpe),'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.'),Ptc),V5c),hQ),pqb(L5c))));o4c(a,lpe,zme,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mpe),Kpe),'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.'),Ttc),V5c),ZW),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,npe),Kpe),'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),U5c),BI),pqb(L5c))));o4c(a,npe,jpe,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ope),Kpe),'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),U5c),BI),pqb(L5c))));o4c(a,ope,jpe,null);Oyc((new Pyc,a))};var Itc,Jtc,Ktc,Ltc,Mtc,Ntc,Otc,Ptc,Qtc,Rtc,Stc,Ttc,Utc,Vtc,Wtc,Xtc,Ytc,Ztc,$tc,_tc,auc,buc,cuc,duc,euc,fuc,guc,huc,iuc,juc,kuc,luc,muc,nuc,ouc,puc,quc,ruc,suc,tuc,uuc,vuc,wuc,xuc,yuc,zuc,Auc,Buc,Cuc,Duc,Euc,Fuc,Guc,Huc,Iuc,Juc,Kuc,Luc,Muc,Nuc,Ouc,Puc,Quc,Ruc,Suc,Tuc,Uuc,Vuc,Wuc,Xuc,Yuc,Zuc,$uc,_uc,avc,bvc,cvc,dvc,evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc,ovc,pvc,qvc,rvc,svc,tvc,uvc,vvc,wvc,xvc,yvc,zvc,Avc,Bvc,Cvc,Dvc,Evc,Fvc,Gvc,Hvc,Ivc,Jvc,Kvc,Lvc,Mvc,Nvc,Ovc,Pvc,Qvc,Rvc,Svc,Tvc,Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc;var UW=mdb(Sne,'LayeredMetaDataProvider',848);bcb(986,1,ale,Pyc);_.Qe=function Qyc(a){Oyc(a)};var mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc,Ywc,Zwc,$wc,_wc,axc,bxc,cxc,dxc,exc,fxc,gxc,hxc,ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc;var WW=mdb(Sne,'LayeredOptions',986);bcb(987,1,{},Ryc);_.$e=function Syc(){var a;return a=new jUb,a};_._e=function Tyc(a){};var VW=mdb(Sne,'LayeredOptions/LayeredFactory',987);bcb(1372,1,{});_.a=0;var Uyc;var $1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder',1372);bcb(779,1372,{},ezc);var bzc,czc;var XW=mdb(Sne,'LayeredSpacings/LayeredSpacingsBuilder',779);bcb(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},nzc);_.Kf=function pzc(){return mzc(this)};_.Xf=function ozc(){return mzc(this)};var fzc,gzc,hzc,izc,jzc,kzc;var YW=ndb(Sne,'LayeringStrategy',313,CI,rzc,qzc);var szc;bcb(378,22,{3:1,35:1,22:1,378:1},zzc);var uzc,vzc,wzc;var ZW=ndb(Sne,'LongEdgeOrderingStrategy',378,CI,Bzc,Azc);var Czc;bcb(197,22,{3:1,35:1,22:1,197:1},Kzc);var Ezc,Fzc,Gzc,Hzc;var $W=ndb(Sne,'NodeFlexibility',197,CI,Nzc,Mzc);var Ozc;bcb(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},Xzc);_.Kf=function Zzc(){return Wzc(this)};_.Xf=function Yzc(){return Wzc(this)};var Qzc,Rzc,Szc,Tzc,Uzc;var _W=ndb(Sne,'NodePlacementStrategy',315,CI,_zc,$zc);var aAc;bcb(260,22,{3:1,35:1,22:1,260:1},lAc);var cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc;var aX=ndb(Sne,'NodePromotionStrategy',260,CI,nAc,mAc);var oAc;bcb(339,22,{3:1,35:1,22:1,339:1},uAc);var qAc,rAc,sAc;var bX=ndb(Sne,'OrderingStrategy',339,CI,wAc,vAc);var xAc;bcb(421,22,{3:1,35:1,22:1,421:1},CAc);var zAc,AAc;var cX=ndb(Sne,'PortSortingStrategy',421,CI,EAc,DAc);var FAc;bcb(452,22,{3:1,35:1,22:1,452:1},LAc);var HAc,IAc,JAc;var dX=ndb(Sne,'PortType',452,CI,NAc,MAc);var OAc;bcb(375,22,{3:1,35:1,22:1,375:1},UAc);var QAc,RAc,SAc;var eX=ndb(Sne,'SelfLoopDistributionStrategy',375,CI,WAc,VAc);var XAc;bcb(376,22,{3:1,35:1,22:1,376:1},aBc);var ZAc,$Ac;var fX=ndb(Sne,'SelfLoopOrderingStrategy',376,CI,cBc,bBc);var dBc;bcb(304,1,{304:1},oBc);var gX=mdb(Sne,'Spacings',304);bcb(336,22,{3:1,35:1,22:1,336:1},uBc);var qBc,rBc,sBc;var hX=ndb(Sne,'SplineRoutingMode',336,CI,wBc,vBc);var xBc;bcb(338,22,{3:1,35:1,22:1,338:1},DBc);var zBc,ABc,BBc;var iX=ndb(Sne,'ValidifyStrategy',338,CI,FBc,EBc);var GBc;bcb(377,22,{3:1,35:1,22:1,377:1},MBc);var IBc,JBc,KBc;var jX=ndb(Sne,'WrappingStrategy',377,CI,OBc,NBc);var PBc;bcb(1383,1,Bqe,VBc);_.Yf=function WBc(a){return BD(a,37),RBc};_.pf=function XBc(a,b){UBc(this,BD(a,37),b)};var RBc;var kX=mdb(Cqe,'DepthFirstCycleBreaker',1383);bcb(782,1,Bqe,aCc);_.Yf=function cCc(a){return BD(a,37),YBc};_.pf=function dCc(a,b){$Bc(this,BD(a,37),b)};_.Zf=function bCc(a){return BD(Ikb(a,Bub(this.d,a.c.length)),10)};var YBc;var lX=mdb(Cqe,'GreedyCycleBreaker',782);bcb(1386,782,Bqe,eCc);_.Zf=function fCc(a){var b,c,d,e;e=null;b=Ohe;for(d=new olb(a);d.a<d.c.c.length;){c=BD(mlb(d),10);if(wNb(c,(wtc(),Zsc))&&BD(vNb(c,Zsc),19).a<b){b=BD(vNb(c,Zsc),19).a;e=c}}if(!e){return BD(Ikb(a,Bub(this.d,a.c.length)),10)}return e};var mX=mdb(Cqe,'GreedyModelOrderCycleBreaker',1386);bcb(1384,1,Bqe,kCc);_.Yf=function lCc(a){return BD(a,37),gCc};_.pf=function mCc(a,b){jCc(this,BD(a,37),b)};var gCc;var nX=mdb(Cqe,'InteractiveCycleBreaker',1384);bcb(1385,1,Bqe,rCc);_.Yf=function sCc(a){return BD(a,37),nCc};_.pf=function tCc(a,b){qCc(this,BD(a,37),b)};_.a=0;_.b=0;var nCc;var oX=mdb(Cqe,'ModelOrderCycleBreaker',1385);bcb(1389,1,Bqe,DCc);_.Yf=function ECc(a){return BD(a,37),uCc};_.pf=function FCc(a,b){BCc(this,BD(a,37),b)};var uCc;var rX=mdb(Dqe,'CoffmanGrahamLayerer',1389);bcb(1390,1,Dke,GCc);_.ue=function HCc(a,b){return xCc(this.a,BD(a,10),BD(b,10))};_.Fb=function ICc(a){return this===a};_.ve=function JCc(){return new tpb(this)};var pX=mdb(Dqe,'CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type',1390);bcb(1391,1,Dke,KCc);_.ue=function LCc(a,b){return ACc(this.a,BD(a,10),BD(b,10))};_.Fb=function MCc(a){return this===a};_.ve=function NCc(){return new tpb(this)};var qX=mdb(Dqe,'CoffmanGrahamLayerer/lambda$1$Type',1391);bcb(1392,1,Bqe,QCc);_.Yf=function RCc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),n8b)),mUb,w8b),nUb,v8b)};_.pf=function SCc(a,b){PCc(this,BD(a,37),b)};var tX=mdb(Dqe,'InteractiveLayerer',1392);bcb(569,1,{569:1},TCc);_.a=0;_.c=0;var sX=mdb(Dqe,'InteractiveLayerer/LayerSpan',569);bcb(1388,1,Bqe,ZCc);_.Yf=function $Cc(a){return BD(a,37),UCc};_.pf=function _Cc(a,b){WCc(this,BD(a,37),b)};var UCc;var uX=mdb(Dqe,'LongestPathLayerer',1388);bcb(1395,1,Bqe,iDc);_.Yf=function jDc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)};_.pf=function kDc(a,b){gDc(this,BD(a,37),b)};_.a=0;_.b=0;_.d=0;var aDc,bDc;var wX=mdb(Dqe,'MinWidthLayerer',1395);bcb(1396,1,Dke,mDc);_.ue=function nDc(a,b){return lDc(this,BD(a,10),BD(b,10))};_.Fb=function oDc(a){return this===a};_.ve=function pDc(){return new tpb(this)};var vX=mdb(Dqe,'MinWidthLayerer/MinOutgoingEdgesComparator',1396);bcb(1387,1,Bqe,xDc);_.Yf=function yDc(a){return BD(a,37),qDc};_.pf=function zDc(a,b){wDc(this,BD(a,37),b)};var qDc;var xX=mdb(Dqe,'NetworkSimplexLayerer',1387);bcb(1393,1,Bqe,LDc);_.Yf=function MDc(a){return BD(a,37),e3c(e3c(e3c(new j3c,(qUb(),lUb),(S8b(),Z7b)),mUb,w8b),nUb,v8b)};_.pf=function NDc(a,b){IDc(this,BD(a,37),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var zX=mdb(Dqe,'StretchWidthLayerer',1393);bcb(1394,1,Dke,PDc);_.ue=function QDc(a,b){return ODc(BD(a,10),BD(b,10))};_.Fb=function RDc(a){return this===a};_.ve=function SDc(){return new tpb(this)};var yX=mdb(Dqe,'StretchWidthLayerer/1',1394);bcb(402,1,Eqe);_.Nf=function fEc(a,b,c,d,e,f){};_._f=function dEc(a,b,c){return YDc(this,a,b,c)};_.Mf=function eEc(){this.g=KC(VD,Fqe,25,this.d,15,1);this.f=KC(VD,Fqe,25,this.d,15,1)};_.Of=function gEc(a,b){this.e[a]=KC(WD,oje,25,b[a].length,15,1)};_.Pf=function hEc(a,b,c){var d;d=c[a][b];d.p=b;this.e[a][b]=b};_.Qf=function iEc(a,b,c,d){BD(Ikb(d[a][b].j,c),11).p=this.d++};_.b=0;_.c=0;_.d=0;var BX=mdb(Gqe,'AbstractBarycenterPortDistributor',402);bcb(1633,1,Dke,jEc);_.ue=function kEc(a,b){return _Dc(this.a,BD(a,11),BD(b,11))};_.Fb=function lEc(a){return this===a};_.ve=function mEc(){return new tpb(this)};var AX=mdb(Gqe,'AbstractBarycenterPortDistributor/lambda$0$Type',1633);bcb(817,1,Mne,uEc);_.Nf=function xEc(a,b,c,d,e,f){};_.Pf=function zEc(a,b,c){};_.Qf=function AEc(a,b,c,d){};_.Lf=function vEc(){return false};_.Mf=function wEc(){this.c=this.e.a;this.g=this.f.g};_.Of=function yEc(a,b){b[a][0].c.p=a};_.Rf=function BEc(){return false};_.ag=function CEc(a,b,c,d){if(c){rEc(this,a)}else{oEc(this,a,d);pEc(this,a,b)}if(a.c.length>1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,BD(this,660)):(mmb(),Okb(a,this.d));PEc(this.e,a)}};_.Sf=function DEc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=sEc(c,a.length)){f=a[b-(c?1:-1)];UDc(this.f,f,c?(KAc(),IAc):(KAc(),HAc))}e=a[b][0];k=!d||e.k==(j0b(),e0b);j=Ou(a[b]);this.ag(j,k,false,c);g=0;for(i=new olb(j);i.a<i.c.c.length;){h=BD(mlb(i),10);a[b][g++]=h}return false};_.Tf=function EEc(a,b){var c,d,e,f,g;g=sEc(b,a.length);f=Ou(a[g]);this.ag(f,false,true,b);c=0;for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),10);a[g][c++]=d}return false};var EX=mdb(Gqe,'BarycenterHeuristic',817);bcb(658,1,{658:1},FEc);_.Ib=function GEc(){return 'BarycenterState [node='+this.c+', summedWeight='+this.d+', degree='+this.b+', barycenter='+this.a+', visited='+this.e+']'};_.b=0;_.d=0;_.e=false;var CX=mdb(Gqe,'BarycenterHeuristic/BarycenterState',658);bcb(1802,1,Dke,HEc);_.ue=function IEc(a,b){return qEc(this.a,BD(a,10),BD(b,10))};_.Fb=function JEc(a){return this===a};_.ve=function KEc(){return new tpb(this)};var DX=mdb(Gqe,'BarycenterHeuristic/lambda$0$Type',1802);bcb(816,1,Mne,SEc);_.Mf=function TEc(){};_.Nf=function UEc(a,b,c,d,e,f){};_.Qf=function XEc(a,b,c,d){};_.Of=function VEc(a,b){this.a[a]=KC(CX,{3:1,4:1,5:1,2018:1},658,b[a].length,0,1);this.b[a]=KC(FX,{3:1,4:1,5:1,2019:1},233,b[a].length,0,1)};_.Pf=function WEc(a,b,c){OEc(this,c[a][b],true)};_.c=false;var HX=mdb(Gqe,'ForsterConstraintResolver',816);bcb(233,1,{233:1},$Ec,_Ec);_.Ib=function aFc(){var a,b;b=new Ufb;b.a+='[';for(a=0;a<this.d.length;a++){Qfb(b,a0b(this.d[a]));REc(this.g,this.d[0]).a!=null&&Qfb(Qfb((b.a+='<',b),Jdb(REc(this.g,this.d[0]).a)),'>');a<this.d.length-1&&(b.a+=She,b)}return (b.a+=']',b).a};_.a=0;_.c=0;_.f=0;var FX=mdb(Gqe,'ForsterConstraintResolver/ConstraintGroup',233);bcb(1797,1,qie,bFc);_.td=function cFc(a){OEc(this.a,BD(a,10),false)};var GX=mdb(Gqe,'ForsterConstraintResolver/lambda$0$Type',1797);bcb(214,1,{214:1,225:1},fFc);_.Nf=function hFc(a,b,c,d,e,f){};_.Of=function iFc(a,b){};_.Mf=function gFc(){this.r=KC(WD,oje,25,this.n,15,1)};_.Pf=function jFc(a,b,c){var d,e;e=c[a][b];d=e.e;!!d&&Ekb(this.b,d)};_.Qf=function kFc(a,b,c,d){++this.n};_.Ib=function lFc(){return wlb(this.e,new Tqb)};_.g=false;_.i=false;_.n=0;_.s=false;var IX=mdb(Gqe,'GraphInfoHolder',214);bcb(1832,1,Mne,pFc);_.Nf=function sFc(a,b,c,d,e,f){};_.Of=function tFc(a,b){};_.Qf=function vFc(a,b,c,d){};_._f=function qFc(a,b,c){c&&b>0?(RHc(this.a,a[b-1],a[b]),undefined):!c&&b<a.length-1?(RHc(this.a,a[b],a[b+1]),undefined):THc(this.a,a[b],c?(Ucd(),Tcd):(Ucd(),zcd));return mFc(this,a,b,c)};_.Mf=function rFc(){this.d=KC(WD,oje,25,this.c,15,1);this.a=new dIc(this.d)};_.Pf=function uFc(a,b,c){var d;d=c[a][b];this.c+=d.j.c.length};_.c=0;var JX=mdb(Gqe,'GreedyPortDistributor',1832);bcb(1401,1,Bqe,CFc);_.Yf=function DFc(a){return zFc(BD(a,37))};_.pf=function EFc(a,b){BFc(BD(a,37),b)};var xFc;var LX=mdb(Gqe,'InteractiveCrossingMinimizer',1401);bcb(1402,1,Dke,GFc);_.ue=function HFc(a,b){return FFc(this,BD(a,10),BD(b,10))};_.Fb=function IFc(a){return this===a};_.ve=function JFc(){return new tpb(this)};var KX=mdb(Gqe,'InteractiveCrossingMinimizer/1',1402);bcb(507,1,{507:1,123:1,51:1},fGc);_.Yf=function gGc(a){var b;return BD(a,37),b=k3c(KFc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hGc(a,b){YFc(this,BD(a,37),b)};_.e=0;var KFc;var RX=mdb(Gqe,'LayerSweepCrossingMinimizer',507);bcb(1398,1,qie,iGc);_.td=function jGc(a){MFc(this.a,BD(a,214))};var MX=mdb(Gqe,'LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type',1398);bcb(1399,1,qie,kGc);_.td=function lGc(a){VFc(this.a,BD(a,214))};var NX=mdb(Gqe,'LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type',1399);bcb(1400,1,qie,mGc);_.td=function nGc(a){XFc(this.a,BD(a,214))};var OX=mdb(Gqe,'LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type',1400);bcb(454,22,{3:1,35:1,22:1,454:1},sGc);var oGc,pGc,qGc;var PX=ndb(Gqe,'LayerSweepCrossingMinimizer/CrossMinType',454,CI,uGc,tGc);var vGc;bcb(1397,1,Oie,xGc);_.Mb=function yGc(a){return LFc(),BD(a,29).a.c.length==0};var QX=mdb(Gqe,'LayerSweepCrossingMinimizer/lambda$0$Type',1397);bcb(1799,1,Mne,BGc);_.Mf=function CGc(){};_.Nf=function DGc(a,b,c,d,e,f){};_.Qf=function GGc(a,b,c,d){};_.Of=function EGc(a,b){b[a][0].c.p=a;this.b[a]=KC(SX,{3:1,4:1,5:1,1944:1},659,b[a].length,0,1)};_.Pf=function FGc(a,b,c){var d;d=c[a][b];d.p=b;NC(this.b[a],b,new HGc)};var VX=mdb(Gqe,'LayerSweepTypeDecider',1799);bcb(659,1,{659:1},HGc);_.Ib=function IGc(){return 'NodeInfo [connectedEdges='+this.a+', hierarchicalInfluence='+this.b+', randomInfluence='+this.c+']'};_.a=0;_.b=0;_.c=0;var SX=mdb(Gqe,'LayerSweepTypeDecider/NodeInfo',659);bcb(1800,1,Vke,JGc);_.Lb=function KGc(a){return a1b(new b1b(BD(a,11).b))};_.Fb=function LGc(a){return this===a};_.Mb=function MGc(a){return a1b(new b1b(BD(a,11).b))};var TX=mdb(Gqe,'LayerSweepTypeDecider/lambda$0$Type',1800);bcb(1801,1,Vke,NGc);_.Lb=function OGc(a){return a1b(new b1b(BD(a,11).b))};_.Fb=function PGc(a){return this===a};_.Mb=function QGc(a){return a1b(new b1b(BD(a,11).b))};var UX=mdb(Gqe,'LayerSweepTypeDecider/lambda$1$Type',1801);bcb(1833,402,Eqe,RGc);_.$f=function SGc(a,b,c){var d,e,f,g,h,i,j,k,l;j=this.g;switch(c.g){case 1:{d=0;e=0;for(i=new olb(a.j);i.a<i.c.c.length;){g=BD(mlb(i),11);if(g.e.c.length!=0){++d;g.j==(Ucd(),Acd)&&++e}}f=b+e;l=b+d;for(h=W_b(a,(KAc(),HAc)).Kc();h.Ob();){g=BD(h.Pb(),11);if(g.j==(Ucd(),Acd)){j[g.p]=f;--f}else{j[g.p]=l;--l}}return d}case 2:{k=0;for(h=W_b(a,(KAc(),IAc)).Kc();h.Ob();){g=BD(h.Pb(),11);++k;j[g.p]=b+k}return k}default:throw vbb(new Vdb);}};var WX=mdb(Gqe,'LayerTotalPortDistributor',1833);bcb(660,817,{660:1,225:1},XGc);_.ag=function ZGc(a,b,c,d){if(c){rEc(this,a)}else{oEc(this,a,d);pEc(this,a,b)}if(a.c.length>1){Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),(Nyc(),Awc))))?YGc(a,this.d,this):(mmb(),Okb(a,this.d));Ccb(DD(vNb(Q_b((tCb(0,a.c.length),BD(a.c[0],10))),Awc)))||PEc(this.e,a)}};var YX=mdb(Gqe,'ModelOrderBarycenterHeuristic',660);bcb(1803,1,Dke,$Gc);_.ue=function _Gc(a,b){return VGc(this.a,BD(a,10),BD(b,10))};_.Fb=function aHc(a){return this===a};_.ve=function bHc(){return new tpb(this)};var XX=mdb(Gqe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1803);bcb(1403,1,Bqe,fHc);_.Yf=function gHc(a){var b;return BD(a,37),b=k3c(cHc),e3c(b,(qUb(),nUb),(S8b(),H8b)),b};_.pf=function hHc(a,b){eHc((BD(a,37),b))};var cHc;var ZX=mdb(Gqe,'NoCrossingMinimizer',1403);bcb(796,402,Eqe,iHc);_.$f=function jHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new olb(a.j);k.a<k.c.c.length;){i=BD(mlb(k),11);if(i.e.c.length!=0){++e;i.j==(Ucd(),Acd)&&++f}}d=1/(e+1);g=b+f*d;n=b+1-d;for(j=W_b(a,(KAc(),HAc)).Kc();j.Ob();){i=BD(j.Pb(),11);if(i.j==(Ucd(),Acd)){l[i.p]=g;g-=d}else{l[i.p]=n;n-=d}}break}case 2:{h=0;for(k=new olb(a.j);k.a<k.c.c.length;){i=BD(mlb(k),11);i.g.c.length==0||++h}d=1/(h+1);m=b+d;for(j=W_b(a,(KAc(),IAc)).Kc();j.Ob();){i=BD(j.Pb(),11);l[i.p]=m;m+=d}break}default:throw vbb(new Wdb('Port type is undefined'));}return 1};var $X=mdb(Gqe,'NodeRelativePortDistributor',796);bcb(807,1,{},nHc,oHc);var _X=mdb(Gqe,'SweepCopy',807);bcb(1798,1,Mne,rHc);_.Of=function uHc(a,b){};_.Mf=function sHc(){var a;a=KC(WD,oje,25,this.f,15,1);this.d=new LIc(a);this.a=new dIc(a)};_.Nf=function tHc(a,b,c,d,e,f){var g;g=BD(Ikb(f[a][b].j,c),11);e.c==g&&e.c.i.c==e.d.i.c&&++this.e[a]};_.Pf=function vHc(a,b,c){var d;d=c[a][b];this.c[a]=this.c[a]|d.k==(j0b(),i0b)};_.Qf=function wHc(a,b,c,d){var e;e=BD(Ikb(d[a][b].j,c),11);e.p=this.f++;e.g.c.length+e.e.c.length>1&&(e.j==(Ucd(),zcd)?(this.b[a]=true):e.j==Tcd&&a>0&&(this.b[a-1]=true))};_.f=0;var aY=mdb(Lne,'AllCrossingsCounter',1798);bcb(587,1,{},BHc);_.b=0;_.d=0;var bY=mdb(Lne,'BinaryIndexedTree',587);bcb(524,1,{},dIc);var DHc,EHc;var lY=mdb(Lne,'CrossingsCounter',524);bcb(1906,1,Dke,hIc);_.ue=function iIc(a,b){return YHc(this.a,BD(a,11),BD(b,11))};_.Fb=function jIc(a){return this===a};_.ve=function kIc(){return new tpb(this)};var cY=mdb(Lne,'CrossingsCounter/lambda$0$Type',1906);bcb(1907,1,Dke,lIc);_.ue=function mIc(a,b){return ZHc(this.a,BD(a,11),BD(b,11))};_.Fb=function nIc(a){return this===a};_.ve=function oIc(){return new tpb(this)};var dY=mdb(Lne,'CrossingsCounter/lambda$1$Type',1907);bcb(1908,1,Dke,pIc);_.ue=function qIc(a,b){return $Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function rIc(a){return this===a};_.ve=function sIc(){return new tpb(this)};var eY=mdb(Lne,'CrossingsCounter/lambda$2$Type',1908);bcb(1909,1,Dke,tIc);_.ue=function uIc(a,b){return _Hc(this.a,BD(a,11),BD(b,11))};_.Fb=function vIc(a){return this===a};_.ve=function wIc(){return new tpb(this)};var fY=mdb(Lne,'CrossingsCounter/lambda$3$Type',1909);bcb(1910,1,qie,xIc);_.td=function yIc(a){eIc(this.a,BD(a,11))};var gY=mdb(Lne,'CrossingsCounter/lambda$4$Type',1910);bcb(1911,1,Oie,zIc);_.Mb=function AIc(a){return fIc(this.a,BD(a,11))};var hY=mdb(Lne,'CrossingsCounter/lambda$5$Type',1911);bcb(1912,1,qie,CIc);_.td=function DIc(a){BIc(this,a)};var iY=mdb(Lne,'CrossingsCounter/lambda$6$Type',1912);bcb(1913,1,qie,EIc);_.td=function FIc(a){var b;FHc();Wjb(this.b,(b=this.a,BD(a,11),b))};var jY=mdb(Lne,'CrossingsCounter/lambda$7$Type',1913);bcb(826,1,Vke,GIc);_.Lb=function HIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};_.Fb=function IIc(a){return this===a};_.Mb=function JIc(a){return FHc(),wNb(BD(a,11),(wtc(),gtc))};var kY=mdb(Lne,'CrossingsCounter/lambda$8$Type',826);bcb(1905,1,{},LIc);var pY=mdb(Lne,'HyperedgeCrossingsCounter',1905);bcb(467,1,{35:1,467:1},NIc);_.wd=function OIc(a){return MIc(this,BD(a,467))};_.b=0;_.c=0;_.e=0;_.f=0;var oY=mdb(Lne,'HyperedgeCrossingsCounter/Hyperedge',467);bcb(362,1,{35:1,362:1},QIc);_.wd=function RIc(a){return PIc(this,BD(a,362))};_.b=0;_.c=0;var nY=mdb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner',362);bcb(523,22,{3:1,35:1,22:1,523:1},VIc);var SIc,TIc;var mY=ndb(Lne,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',523,CI,XIc,WIc);var YIc;bcb(1405,1,Bqe,dJc);_.Yf=function eJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?_Ic:null};_.pf=function fJc(a,b){cJc(this,BD(a,37),b)};var _Ic;var rY=mdb(Hqe,'InteractiveNodePlacer',1405);bcb(1406,1,Bqe,tJc);_.Yf=function uJc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?gJc:null};_.pf=function vJc(a,b){rJc(this,BD(a,37),b)};var gJc,hJc,iJc;var tY=mdb(Hqe,'LinearSegmentsNodePlacer',1406);bcb(257,1,{35:1,257:1},zJc);_.wd=function AJc(a){return wJc(this,BD(a,257))};_.Fb=function BJc(a){var b;if(JD(a,257)){b=BD(a,257);return this.b==b.b}return false};_.Hb=function CJc(){return this.b};_.Ib=function DJc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var sY=mdb(Hqe,'LinearSegmentsNodePlacer/LinearSegment',257);bcb(1408,1,Bqe,$Jc);_.Yf=function _Jc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?EJc:null};_.pf=function hKc(a,b){WJc(this,BD(a,37),b)};_.b=0;_.g=0;var EJc;var dZ=mdb(Hqe,'NetworkSimplexPlacer',1408);bcb(1427,1,Dke,iKc);_.ue=function jKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function kKc(a){return this===a};_.ve=function lKc(){return new tpb(this)};var uY=mdb(Hqe,'NetworkSimplexPlacer/0methodref$compare$Type',1427);bcb(1429,1,Dke,mKc);_.ue=function nKc(a,b){return beb(BD(a,19).a,BD(b,19).a)};_.Fb=function oKc(a){return this===a};_.ve=function pKc(){return new tpb(this)};var vY=mdb(Hqe,'NetworkSimplexPlacer/1methodref$compare$Type',1429);bcb(649,1,{649:1},qKc);var wY=mdb(Hqe,'NetworkSimplexPlacer/EdgeRep',649);bcb(401,1,{401:1},rKc);_.b=false;var xY=mdb(Hqe,'NetworkSimplexPlacer/NodeRep',401);bcb(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},vKc);var CY=mdb(Hqe,'NetworkSimplexPlacer/Path',508);bcb(1409,1,{},wKc);_.Kb=function xKc(a){return BD(a,17).d.i.k};var yY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$0$Type',1409);bcb(1410,1,Oie,yKc);_.Mb=function zKc(a){return BD(a,267)==(j0b(),g0b)};var zY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$1$Type',1410);bcb(1411,1,{},AKc);_.Kb=function BKc(a){return BD(a,17).d.i};var AY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$2$Type',1411);bcb(1412,1,Oie,CKc);_.Mb=function DKc(a){return eLc(Lzc(BD(a,10)))};var BY=mdb(Hqe,'NetworkSimplexPlacer/Path/lambda$3$Type',1412);bcb(1413,1,Oie,EKc);_.Mb=function FKc(a){return dKc(BD(a,11))};var DY=mdb(Hqe,'NetworkSimplexPlacer/lambda$0$Type',1413);bcb(1414,1,qie,GKc);_.td=function HKc(a){LJc(this.a,this.b,BD(a,11))};var EY=mdb(Hqe,'NetworkSimplexPlacer/lambda$1$Type',1414);bcb(1423,1,qie,IKc);_.td=function JKc(a){MJc(this.a,BD(a,17))};var FY=mdb(Hqe,'NetworkSimplexPlacer/lambda$10$Type',1423);bcb(1424,1,{},KKc);_.Kb=function LKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var GY=mdb(Hqe,'NetworkSimplexPlacer/lambda$11$Type',1424);bcb(1425,1,qie,MKc);_.td=function NKc(a){NJc(this.a,BD(a,10))};var HY=mdb(Hqe,'NetworkSimplexPlacer/lambda$12$Type',1425);bcb(1426,1,{},OKc);_.Kb=function PKc(a){return FJc(),meb(BD(a,121).e)};var IY=mdb(Hqe,'NetworkSimplexPlacer/lambda$13$Type',1426);bcb(1428,1,{},QKc);_.Kb=function RKc(a){return FJc(),meb(BD(a,121).e)};var JY=mdb(Hqe,'NetworkSimplexPlacer/lambda$15$Type',1428);bcb(1430,1,Oie,SKc);_.Mb=function TKc(a){return FJc(),BD(a,401).c.k==(j0b(),h0b)};var KY=mdb(Hqe,'NetworkSimplexPlacer/lambda$17$Type',1430);bcb(1431,1,Oie,UKc);_.Mb=function VKc(a){return FJc(),BD(a,401).c.j.c.length>1};var LY=mdb(Hqe,'NetworkSimplexPlacer/lambda$18$Type',1431);bcb(1432,1,qie,WKc);_.td=function XKc(a){eKc(this.c,this.b,this.d,this.a,BD(a,401))};_.c=0;_.d=0;var MY=mdb(Hqe,'NetworkSimplexPlacer/lambda$19$Type',1432);bcb(1415,1,{},YKc);_.Kb=function ZKc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var NY=mdb(Hqe,'NetworkSimplexPlacer/lambda$2$Type',1415);bcb(1433,1,qie,$Kc);_.td=function _Kc(a){fKc(this.a,BD(a,11))};_.a=0;var OY=mdb(Hqe,'NetworkSimplexPlacer/lambda$20$Type',1433);bcb(1434,1,{},aLc);_.Kb=function bLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var PY=mdb(Hqe,'NetworkSimplexPlacer/lambda$21$Type',1434);bcb(1435,1,qie,cLc);_.td=function dLc(a){OJc(this.a,BD(a,10))};var QY=mdb(Hqe,'NetworkSimplexPlacer/lambda$22$Type',1435);bcb(1436,1,Oie,fLc);_.Mb=function gLc(a){return eLc(a)};var RY=mdb(Hqe,'NetworkSimplexPlacer/lambda$23$Type',1436);bcb(1437,1,{},hLc);_.Kb=function iLc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var SY=mdb(Hqe,'NetworkSimplexPlacer/lambda$24$Type',1437);bcb(1438,1,Oie,jLc);_.Mb=function kLc(a){return PJc(this.a,BD(a,10))};var TY=mdb(Hqe,'NetworkSimplexPlacer/lambda$25$Type',1438);bcb(1439,1,qie,lLc);_.td=function mLc(a){QJc(this.a,this.b,BD(a,10))};var UY=mdb(Hqe,'NetworkSimplexPlacer/lambda$26$Type',1439);bcb(1440,1,Oie,nLc);_.Mb=function oLc(a){return FJc(),!OZb(BD(a,17))};var VY=mdb(Hqe,'NetworkSimplexPlacer/lambda$27$Type',1440);bcb(1441,1,Oie,pLc);_.Mb=function qLc(a){return FJc(),!OZb(BD(a,17))};var WY=mdb(Hqe,'NetworkSimplexPlacer/lambda$28$Type',1441);bcb(1442,1,{},rLc);_.Ce=function sLc(a,b){return RJc(this.a,BD(a,29),BD(b,29))};var XY=mdb(Hqe,'NetworkSimplexPlacer/lambda$29$Type',1442);bcb(1416,1,{},tLc);_.Kb=function uLc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(U_b(BD(a,10)).a.Kc(),new Sq))))};var YY=mdb(Hqe,'NetworkSimplexPlacer/lambda$3$Type',1416);bcb(1417,1,Oie,vLc);_.Mb=function wLc(a){return FJc(),cKc(BD(a,17))};var ZY=mdb(Hqe,'NetworkSimplexPlacer/lambda$4$Type',1417);bcb(1418,1,qie,xLc);_.td=function yLc(a){XJc(this.a,BD(a,17))};var $Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$5$Type',1418);bcb(1419,1,{},zLc);_.Kb=function ALc(a){return FJc(),new YAb(null,new Kub(BD(a,29).a,16))};var _Y=mdb(Hqe,'NetworkSimplexPlacer/lambda$6$Type',1419);bcb(1420,1,Oie,BLc);_.Mb=function CLc(a){return FJc(),BD(a,10).k==(j0b(),h0b)};var aZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$7$Type',1420);bcb(1421,1,{},DLc);_.Kb=function ELc(a){return FJc(),new YAb(null,new Lub(new Sr(ur(O_b(BD(a,10)).a.Kc(),new Sq))))};var bZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$8$Type',1421);bcb(1422,1,Oie,FLc);_.Mb=function GLc(a){return FJc(),NZb(BD(a,17))};var cZ=mdb(Hqe,'NetworkSimplexPlacer/lambda$9$Type',1422);bcb(1404,1,Bqe,KLc);_.Yf=function LLc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?HLc:null};_.pf=function MLc(a,b){JLc(BD(a,37),b)};var HLc;var eZ=mdb(Hqe,'SimpleNodePlacer',1404);bcb(180,1,{180:1},ULc);_.Ib=function VLc(){var a;a='';this.c==(YLc(),XLc)?(a+=kle):this.c==WLc&&(a+=jle);this.o==(eMc(),cMc)?(a+=vle):this.o==dMc?(a+='UP'):(a+='BALANCED');return a};var hZ=mdb(Kqe,'BKAlignedLayout',180);bcb(516,22,{3:1,35:1,22:1,516:1},ZLc);var WLc,XLc;var fZ=ndb(Kqe,'BKAlignedLayout/HDirection',516,CI,_Lc,$Lc);var aMc;bcb(515,22,{3:1,35:1,22:1,515:1},fMc);var cMc,dMc;var gZ=ndb(Kqe,'BKAlignedLayout/VDirection',515,CI,hMc,gMc);var iMc;bcb(1634,1,{},mMc);var iZ=mdb(Kqe,'BKAligner',1634);bcb(1637,1,{},rMc);var lZ=mdb(Kqe,'BKCompactor',1637);bcb(654,1,{654:1},sMc);_.a=0;var jZ=mdb(Kqe,'BKCompactor/ClassEdge',654);bcb(458,1,{458:1},uMc);_.a=null;_.b=0;var kZ=mdb(Kqe,'BKCompactor/ClassNode',458);bcb(1407,1,Bqe,CMc);_.Yf=function GMc(a){return BD(vNb(BD(a,37),(wtc(),Ksc)),21).Hc((Orc(),Hrc))?vMc:null};_.pf=function HMc(a,b){BMc(this,BD(a,37),b)};_.d=false;var vMc;var mZ=mdb(Kqe,'BKNodePlacer',1407);bcb(1635,1,{},JMc);_.d=0;var oZ=mdb(Kqe,'NeighborhoodInformation',1635);bcb(1636,1,Dke,OMc);_.ue=function PMc(a,b){return NMc(this,BD(a,46),BD(b,46))};_.Fb=function QMc(a){return this===a};_.ve=function RMc(){return new tpb(this)};var nZ=mdb(Kqe,'NeighborhoodInformation/NeighborComparator',1636);bcb(808,1,{});var sZ=mdb(Kqe,'ThresholdStrategy',808);bcb(1763,808,{},WMc);_.bg=function XMc(a,b,c){return this.a.o==(eMc(),dMc)?Pje:Qje};_.cg=function YMc(){};var pZ=mdb(Kqe,'ThresholdStrategy/NullThresholdStrategy',1763);bcb(579,1,{579:1},ZMc);_.c=false;_.d=false;var qZ=mdb(Kqe,'ThresholdStrategy/Postprocessable',579);bcb(1764,808,{},bNc);_.bg=function cNc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(YLc(),XLc)){e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}else{e&&(f=$Mc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=$Mc(this,c,false))}return f};_.cg=function dNc(){var a,b,c,d,e;while(this.d.b!=0){e=BD(Ksb(this.d),579);d=_Mc(this,e);if(!d.a){continue}a=d.a;c=Ccb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!OZb(a)&&a.c.i.c==a.d.i.c){continue}b=aNc(this,e);b||swb(this.e,e)}while(this.e.a.c.length!=0){aNc(this,BD(rwb(this.e),579))}};var rZ=mdb(Kqe,'ThresholdStrategy/SimpleThresholdStrategy',1764);bcb(635,1,{635:1,246:1,234:1},hNc);_.Kf=function jNc(){return gNc(this)};_.Xf=function iNc(){return gNc(this)};var eNc;var tZ=mdb(Lqe,'EdgeRouterFactory',635);bcb(1458,1,Bqe,wNc);_.Yf=function xNc(a){return uNc(BD(a,37))};_.pf=function yNc(a,b){vNc(BD(a,37),b)};var lNc,mNc,nNc,oNc,pNc,qNc,rNc,sNc;var uZ=mdb(Lqe,'OrthogonalEdgeRouter',1458);bcb(1451,1,Bqe,NNc);_.Yf=function ONc(a){return INc(BD(a,37))};_.pf=function PNc(a,b){KNc(this,BD(a,37),b)};var zNc,ANc,BNc,CNc,DNc,ENc;var wZ=mdb(Lqe,'PolylineEdgeRouter',1451);bcb(1452,1,Vke,RNc);_.Lb=function SNc(a){return QNc(BD(a,10))};_.Fb=function TNc(a){return this===a};_.Mb=function UNc(a){return QNc(BD(a,10))};var vZ=mdb(Lqe,'PolylineEdgeRouter/1',1452);bcb(1809,1,Oie,ZNc);_.Mb=function $Nc(a){return BD(a,129).c==(HOc(),FOc)};var xZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$0$Type',1809);bcb(1810,1,{},_Nc);_.Ge=function aOc(a){return BD(a,129).d};var yZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$1$Type',1810);bcb(1811,1,Oie,bOc);_.Mb=function cOc(a){return BD(a,129).c==(HOc(),FOc)};var zZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$2$Type',1811);bcb(1812,1,{},dOc);_.Ge=function eOc(a){return BD(a,129).d};var AZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$3$Type',1812);bcb(1813,1,{},fOc);_.Ge=function gOc(a){return BD(a,129).d};var BZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$4$Type',1813);bcb(1814,1,{},hOc);_.Ge=function iOc(a){return BD(a,129).d};var CZ=mdb(Mqe,'HyperEdgeCycleDetector/lambda$5$Type',1814);bcb(112,1,{35:1,112:1},uOc);_.wd=function vOc(a){return kOc(this,BD(a,112))};_.Fb=function wOc(a){var b;if(JD(a,112)){b=BD(a,112);return this.g==b.g}return false};_.Hb=function xOc(){return this.g};_.Ib=function zOc(){var a,b,c,d;a=new Wfb('{');d=new olb(this.n);while(d.a<d.c.c.length){c=BD(mlb(d),11);b=P_b(c.i);b==null&&(b='n'+S_b(c.i));a.a+=''+b;d.a<d.c.c.length&&(a.a+=',',a)}a.a+='}';return a.a};_.a=0;_.b=0;_.c=NaN;_.d=0;_.g=0;_.i=0;_.o=0;_.s=NaN;var NZ=mdb(Mqe,'HyperEdgeSegment',112);bcb(129,1,{129:1},DOc);_.Ib=function EOc(){return this.a+'->'+this.b+' ('+Yr(this.c)+')'};_.d=0;var EZ=mdb(Mqe,'HyperEdgeSegmentDependency',129);bcb(520,22,{3:1,35:1,22:1,520:1},IOc);var FOc,GOc;var DZ=ndb(Mqe,'HyperEdgeSegmentDependency/DependencyType',520,CI,KOc,JOc);var LOc;bcb(1815,1,{},ZOc);var MZ=mdb(Mqe,'HyperEdgeSegmentSplitter',1815);bcb(1816,1,{},aPc);_.a=0;_.b=0;var FZ=mdb(Mqe,'HyperEdgeSegmentSplitter/AreaRating',1816);bcb(329,1,{329:1},bPc);_.a=0;_.b=0;_.c=0;var GZ=mdb(Mqe,'HyperEdgeSegmentSplitter/FreeArea',329);bcb(1817,1,Dke,cPc);_.ue=function dPc(a,b){return _Oc(BD(a,112),BD(b,112))};_.Fb=function ePc(a){return this===a};_.ve=function fPc(){return new tpb(this)};var HZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$0$Type',1817);bcb(1818,1,qie,gPc);_.td=function hPc(a){TOc(this.a,this.d,this.c,this.b,BD(a,112))};_.b=0;var IZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$1$Type',1818);bcb(1819,1,{},iPc);_.Kb=function jPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var JZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$2$Type',1819);bcb(1820,1,{},kPc);_.Kb=function lPc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var KZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$3$Type',1820);bcb(1821,1,{},mPc);_.Fe=function nPc(a){return Edb(ED(a))};var LZ=mdb(Mqe,'HyperEdgeSegmentSplitter/lambda$4$Type',1821);bcb(655,1,{},tPc);_.a=0;_.b=0;_.c=0;var QZ=mdb(Mqe,'OrthogonalRoutingGenerator',655);bcb(1638,1,{},xPc);_.Kb=function yPc(a){return new YAb(null,new Kub(BD(a,112).e,16))};var OZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$0$Type',1638);bcb(1639,1,{},zPc);_.Kb=function APc(a){return new YAb(null,new Kub(BD(a,112).j,16))};var PZ=mdb(Mqe,'OrthogonalRoutingGenerator/lambda$1$Type',1639);bcb(661,1,{});var RZ=mdb(Nqe,'BaseRoutingDirectionStrategy',661);bcb(1807,661,{},EPc);_.dg=function FPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b+m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function GPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function HPc(){return Ucd(),Rcd};_.gg=function IPc(){return Ucd(),Acd};var SZ=mdb(Nqe,'NorthToSouthRoutingStrategy',1807);bcb(1808,661,{},JPc);_.dg=function KPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).a;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(l,f);Dsb(g.a,d);BPc(this,g,e,d,false);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false);f=b-m.o*c;e=m;d=new f7c(n,f);Dsb(g.a,d);BPc(this,g,e,d,false)}d=new f7c(p,f);Dsb(g.a,d);BPc(this,g,e,d,false)}}}}};_.eg=function LPc(a){return a.i.n.a+a.n.a+a.a.a};_.fg=function MPc(){return Ucd(),Acd};_.gg=function NPc(){return Ucd(),Rcd};var TZ=mdb(Nqe,'SouthToNorthRoutingStrategy',1808);bcb(1806,661,{},OPc);_.dg=function PPc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new olb(a.n);j.a<j.c.c.length;){i=BD(mlb(j),11);l=l7c(OC(GC(m1,1),nie,8,0,[i.i.n,i.n,i.a])).b;for(h=new olb(i.g);h.a<h.c.c.length;){g=BD(mlb(h),17);if(!OZb(g)){o=g.d;p=l7c(OC(GC(m1,1),nie,8,0,[o.i.n,o.n,o.a])).b;if($wnd.Math.abs(l-p)>qme){f=k;e=a;d=new f7c(f,l);Dsb(g.a,d);BPc(this,g,e,d,true);m=a.r;if(m){n=Edb(ED(Ut(m.e,0)));d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true);f=b+m.o*c;e=m;d=new f7c(f,n);Dsb(g.a,d);BPc(this,g,e,d,true)}d=new f7c(f,p);Dsb(g.a,d);BPc(this,g,e,d,true)}}}}};_.eg=function QPc(a){return a.i.n.b+a.n.b+a.a.b};_.fg=function RPc(){return Ucd(),zcd};_.gg=function SPc(){return Ucd(),Tcd};var UZ=mdb(Nqe,'WestToEastRoutingStrategy',1806);bcb(813,1,{},YPc);_.Ib=function ZPc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var WZ=mdb(Pqe,'NubSpline',813);bcb(407,1,{407:1},aQc,bQc);var VZ=mdb(Pqe,'NubSpline/PolarCP',407);bcb(1453,1,Bqe,vQc);_.Yf=function xQc(a){return qQc(BD(a,37))};_.pf=function yQc(a,b){uQc(this,BD(a,37),b)};var cQc,dQc,eQc,fQc,gQc;var b$=mdb(Pqe,'SplineEdgeRouter',1453);bcb(268,1,{268:1},BQc);_.Ib=function CQc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var XZ=mdb(Pqe,'SplineEdgeRouter/Dependency',268);bcb(455,22,{3:1,35:1,22:1,455:1},GQc);var DQc,EQc;var YZ=ndb(Pqe,'SplineEdgeRouter/SideToProcess',455,CI,IQc,HQc);var JQc;bcb(1454,1,Oie,LQc);_.Mb=function MQc(a){return hQc(),!BD(a,128).o};var ZZ=mdb(Pqe,'SplineEdgeRouter/lambda$0$Type',1454);bcb(1455,1,{},NQc);_.Ge=function OQc(a){return hQc(),BD(a,128).v+1};var $Z=mdb(Pqe,'SplineEdgeRouter/lambda$1$Type',1455);bcb(1456,1,qie,PQc);_.td=function QQc(a){sQc(this.a,this.b,BD(a,46))};var _Z=mdb(Pqe,'SplineEdgeRouter/lambda$2$Type',1456);bcb(1457,1,qie,RQc);_.td=function SQc(a){tQc(this.a,this.b,BD(a,46))};var a$=mdb(Pqe,'SplineEdgeRouter/lambda$3$Type',1457);bcb(128,1,{35:1,128:1},YQc,ZQc);_.wd=function $Qc(a){return WQc(this,BD(a,128))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var d$=mdb(Pqe,'SplineSegment',128);bcb(459,1,{459:1},_Qc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var c$=mdb(Pqe,'SplineSegment/EdgeInformation',459);bcb(1234,1,{},hRc);var f$=mdb(Uqe,hme,1234);bcb(1235,1,Dke,jRc);_.ue=function kRc(a,b){return iRc(BD(a,135),BD(b,135))};_.Fb=function lRc(a){return this===a};_.ve=function mRc(){return new tpb(this)};var e$=mdb(Uqe,ime,1235);bcb(1233,1,{},tRc);var g$=mdb(Uqe,'MrTree',1233);bcb(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},ARc);_.Kf=function CRc(){return zRc(this)};_.Xf=function BRc(){return zRc(this)};var uRc,vRc,wRc,xRc;var h$=ndb(Uqe,'TreeLayoutPhases',393,CI,ERc,DRc);var FRc;bcb(1130,209,Mle,HRc);_.Ze=function IRc(a,b){var c,d,e,f,g,h,i;Ccb(DD(hkd(a,(JTc(),ATc))))||$Cb((c=new _Cb((Pgd(),new bhd(a))),c));g=(h=new SRc,tNb(h,a),yNb(h,(mTc(),dTc),a),i=new Lqb,pRc(a,h,i),oRc(a,h,i),h);f=gRc(this.a,g);for(e=new olb(f);e.a<e.c.c.length;){d=BD(mlb(e),135);rRc(this.b,d,Udd(b,1/f.c.length))}g=fRc(f);nRc(g)};var i$=mdb(Uqe,'TreeLayoutProvider',1130);bcb(1847,1,vie,KRc);_.Jc=function LRc(a){reb(this,a)};_.Kc=function MRc(){return mmb(),Emb(),Dmb};var j$=mdb(Uqe,'TreeUtil/1',1847);bcb(1848,1,vie,NRc);_.Jc=function ORc(a){reb(this,a)};_.Kc=function PRc(){return mmb(),Emb(),Dmb};var k$=mdb(Uqe,'TreeUtil/2',1848);bcb(502,134,{3:1,502:1,94:1,134:1});_.g=0;var m$=mdb(Vqe,'TGraphElement',502);bcb(188,502,{3:1,188:1,502:1,94:1,134:1},QRc);_.Ib=function RRc(){return !!this.b&&!!this.c?WRc(this.b)+'->'+WRc(this.c):'e_'+tb(this)};var l$=mdb(Vqe,'TEdge',188);bcb(135,134,{3:1,135:1,94:1,134:1},SRc);_.Ib=function TRc(){var a,b,c,d,e;e=null;for(d=Jsb(this.b,0);d.b!=d.d.c;){c=BD(Xsb(d),86);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Jsb(this.a,0);b.b!=b.d.c;){a=BD(Xsb(b),188);e+=(!!a.b&&!!a.c?WRc(a.b)+'->'+WRc(a.c):'e_'+tb(a))+'\n'}return e};var n$=mdb(Vqe,'TGraph',135);bcb(633,502,{3:1,502:1,633:1,94:1,134:1});var r$=mdb(Vqe,'TShape',633);bcb(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},XRc);_.Ib=function YRc(){return WRc(this)};var q$=mdb(Vqe,'TNode',86);bcb(255,1,vie,ZRc);_.Jc=function $Rc(a){reb(this,a)};_.Kc=function _Rc(){var a;return a=Jsb(this.a.d,0),new aSc(a)};var p$=mdb(Vqe,'TNode/2',255);bcb(358,1,aie,aSc);_.Nb=function bSc(a){Rrb(this,a)};_.Pb=function dSc(){return BD(Xsb(this.a),188).c};_.Ob=function cSc(){return Wsb(this.a)};_.Qb=function eSc(){Zsb(this.a)};var o$=mdb(Vqe,'TNode/2/1',358);bcb(1840,1,ene,hSc);_.pf=function jSc(a,b){gSc(this,BD(a,135),b)};var s$=mdb(Wqe,'FanProcessor',1840);bcb(327,22,{3:1,35:1,22:1,327:1,234:1},rSc);_.Kf=function sSc(){switch(this.g){case 0:return new QSc;case 1:return new hSc;case 2:return new GSc;case 3:return new zSc;case 4:return new NSc;case 5:return new TSc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var kSc,lSc,mSc,nSc,oSc,pSc;var t$=ndb(Wqe,Ene,327,CI,uSc,tSc);var vSc;bcb(1843,1,ene,zSc);_.pf=function ASc(a,b){xSc(this,BD(a,135),b)};_.a=0;var v$=mdb(Wqe,'LevelHeightProcessor',1843);bcb(1844,1,vie,BSc);_.Jc=function CSc(a){reb(this,a)};_.Kc=function DSc(){return mmb(),Emb(),Dmb};var u$=mdb(Wqe,'LevelHeightProcessor/1',1844);bcb(1841,1,ene,GSc);_.pf=function HSc(a,b){ESc(this,BD(a,135),b)};_.a=0;var x$=mdb(Wqe,'NeighborsProcessor',1841);bcb(1842,1,vie,ISc);_.Jc=function JSc(a){reb(this,a)};_.Kc=function KSc(){return mmb(),Emb(),Dmb};var w$=mdb(Wqe,'NeighborsProcessor/1',1842);bcb(1845,1,ene,NSc);_.pf=function OSc(a,b){LSc(this,BD(a,135),b)};_.a=0;var y$=mdb(Wqe,'NodePositionProcessor',1845);bcb(1839,1,ene,QSc);_.pf=function RSc(a,b){PSc(this,BD(a,135))};var z$=mdb(Wqe,'RootProcessor',1839);bcb(1846,1,ene,TSc);_.pf=function USc(a,b){SSc(BD(a,135))};var A$=mdb(Wqe,'Untreeifyer',1846);var VSc,WSc,XSc,YSc,ZSc,$Sc,_Sc,aTc,bTc,cTc,dTc,eTc,fTc,gTc,hTc,iTc,jTc,kTc,lTc;bcb(851,1,ale,sTc);_.Qe=function tTc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zqe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),qTc),(_5c(),V5c)),E$),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$qe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),oTc),V5c),F$),pqb(L5c))));KTc((new LTc,a))};var nTc,oTc,pTc,qTc;var B$=mdb(_qe,'MrTreeMetaDataProvider',851);bcb(994,1,ale,LTc);_.Qe=function MTc(a){KTc(a)};var uTc,vTc,wTc,xTc,yTc,zTc,ATc,BTc,CTc,DTc,ETc,FTc,GTc,HTc,ITc;var D$=mdb(_qe,'MrTreeOptions',994);bcb(995,1,{},NTc);_.$e=function OTc(){var a;return a=new HRc,a};_._e=function PTc(a){};var C$=mdb(_qe,'MrTreeOptions/MrtreeFactory',995);bcb(480,22,{3:1,35:1,22:1,480:1},TTc);var QTc,RTc;var E$=ndb(_qe,'OrderWeighting',480,CI,VTc,UTc);var WTc;bcb(425,22,{3:1,35:1,22:1,425:1},_Tc);var YTc,ZTc;var F$=ndb(_qe,'TreeifyingOrder',425,CI,bUc,aUc);var cUc;bcb(1459,1,Bqe,lUc);_.Yf=function mUc(a){return BD(a,135),eUc};_.pf=function nUc(a,b){kUc(this,BD(a,135),b)};var eUc;var G$=mdb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1459);bcb(1460,1,Bqe,sUc);_.Yf=function tUc(a){return BD(a,135),oUc};_.pf=function uUc(a,b){rUc(this,BD(a,135),b)};var oUc;var H$=mdb('org.eclipse.elk.alg.mrtree.p2order','NodeOrderer',1460);bcb(1461,1,Bqe,CUc);_.Yf=function DUc(a){return BD(a,135),vUc};_.pf=function EUc(a,b){AUc(this,BD(a,135),b)};_.a=0;var vUc;var I$=mdb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1461);bcb(1462,1,Bqe,IUc);_.Yf=function JUc(a){return BD(a,135),FUc};_.pf=function KUc(a,b){HUc(BD(a,135),b)};var FUc;var J$=mdb('org.eclipse.elk.alg.mrtree.p4route','EdgeRouter',1462);var LUc;bcb(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},RUc);_.Kf=function TUc(){return QUc(this)};_.Xf=function SUc(){return QUc(this)};var NUc,OUc;var K$=ndb(cre,'RadialLayoutPhases',495,CI,VUc,UUc);var WUc;bcb(1131,209,Mle,ZUc);_.Ze=function $Uc(a,b){var c,d,e,f,g,h;c=YUc(this,a);Odd(b,'Radial layout',c.c.length);Ccb(DD(hkd(a,(ZWc(),QWc))))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));h=aVc(a);jkd(a,(MUc(),LUc),h);if(!h){throw vbb(new Wdb('The given graph is not a tree!'))}e=Edb(ED(hkd(a,VWc)));e==0&&(e=_Uc(a));jkd(a,VWc,e);for(g=new olb(YUc(this,a));g.a<g.c.c.length;){f=BD(mlb(g),51);f.pf(a,Udd(b,1))}Qdd(b)};var L$=mdb(cre,'RadialLayoutProvider',1131);bcb(549,1,Dke,jVc);_.ue=function kVc(a,b){return iVc(this.a,this.b,BD(a,33),BD(b,33))};_.Fb=function lVc(a){return this===a};_.ve=function mVc(){return new tpb(this)};_.a=0;_.b=0;var M$=mdb(cre,'RadialUtil/lambda$0$Type',549);bcb(1375,1,ene,oVc);_.pf=function pVc(a,b){nVc(BD(a,33),b)};var N$=mdb(fre,'CalculateGraphSize',1375);bcb(442,22,{3:1,35:1,22:1,442:1,234:1},uVc);_.Kf=function vVc(){switch(this.g){case 0:return new bWc;case 1:return new NVc;case 2:return new oVc;default:throw vbb(new Wdb(Dne+(this.f!=null?this.f:''+this.g)));}};var qVc,rVc,sVc;var O$=ndb(fre,Ene,442,CI,xVc,wVc);var yVc;bcb(645,1,{});_.e=1;_.g=0;var P$=mdb(gre,'AbstractRadiusExtensionCompaction',645);bcb(1772,645,{},KVc);_.hg=function LVc(a){var b,c,d,e,f,g,h,i,j;this.c=BD(hkd(a,(MUc(),LUc)),33);EVc(this,this.c);this.d=tXc(BD(hkd(a,(ZWc(),WWc)),293));i=BD(hkd(a,KWc),19);!!i&&DVc(this,i.a);h=ED(hkd(a,(Y9c(),T9c)));FVc(this,(uCb(h),h));j=gVc(this.c);!!this.d&&this.d.lg(j);GVc(this,j);g=new amb(OC(GC(E2,1),hre,33,0,[this.c]));for(c=0;c<2;c++){for(b=0;b<j.c.length;b++){e=new amb(OC(GC(E2,1),hre,33,0,[(tCb(b,j.c.length),BD(j.c[b],33))]));f=b<j.c.length-1?(tCb(b+1,j.c.length),BD(j.c[b+1],33)):(tCb(0,j.c.length),BD(j.c[0],33));d=b==0?BD(Ikb(j,j.c.length-1),33):(tCb(b-1,j.c.length),BD(j.c[b-1],33));IVc(this,(tCb(b,j.c.length),BD(j.c[b],33),g),d,f,e)}}};var Q$=mdb(gre,'AnnulusWedgeCompaction',1772);bcb(1374,1,ene,NVc);_.pf=function OVc(a,b){MVc(BD(a,33),b)};var R$=mdb(gre,'GeneralCompactor',1374);bcb(1771,645,{},SVc);_.hg=function TVc(a){var b,c,d,e;c=BD(hkd(a,(MUc(),LUc)),33);this.f=c;this.b=tXc(BD(hkd(a,(ZWc(),WWc)),293));e=BD(hkd(a,KWc),19);!!e&&DVc(this,e.a);d=ED(hkd(a,(Y9c(),T9c)));FVc(this,(uCb(d),d));b=gVc(c);!!this.b&&this.b.lg(b);QVc(this,b)};_.a=0;var S$=mdb(gre,'RadialCompaction',1771);bcb(1779,1,{},VVc);_.ig=function WVc(a){var b,c,d,e,f,g;this.a=a;b=0;g=gVc(a);d=0;for(f=new olb(g);f.a<f.c.c.length;){e=BD(mlb(f),33);++d;for(c=d;c<g.c.length;c++){UVc(this,e,(tCb(c,g.c.length),BD(g.c[c],33)))&&(b+=1)}}return b};var T$=mdb(ire,'CrossingMinimizationPosition',1779);bcb(1777,1,{},XVc);_.ig=function YVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=0;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);h=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));j=h.i+h.g/2;k=h.j+h.f/2;e=a.i+a.g/2;f=a.j+a.f/2;l=new d7c;l.a=j-e;l.b=k-f;g=new f7c(l.a,l.b);l6c(g,a.g,a.f);l.a-=g.a;l.b-=g.b;e=j-l.a;f=k-l.b;i=new f7c(l.a,l.b);l6c(i,h.g,h.f);l.a-=i.a;l.b-=i.b;j=e+l.a;k=f+l.b;m=j-e;n=k-f;d+=$wnd.Math.sqrt(m*m+n*n)}return d};var U$=mdb(ire,'EdgeLengthOptimization',1777);bcb(1778,1,{},ZVc);_.ig=function $Vc(a){var b,c,d,e,f,g,h,i,j,k,l;d=0;for(c=new Sr(ur(_sd(a).a.Kc(),new Sq));Qr(c);){b=BD(Rr(c),79);h=atd(BD(qud((!b.c&&(b.c=new y5d(z2,b,5,8)),b.c),0),82));i=h.i+h.g/2;j=h.j+h.f/2;e=BD(hkd(h,(Y9c(),C9c)),8);f=a.i+e.a+a.g/2;g=a.j+e.b+a.f;k=i-f;l=j-g;d+=$wnd.Math.sqrt(k*k+l*l)}return d};var V$=mdb(ire,'EdgeLengthPositionOptimization',1778);bcb(1373,645,ene,bWc);_.pf=function cWc(a,b){aWc(this,BD(a,33),b)};var W$=mdb('org.eclipse.elk.alg.radial.intermediate.overlaps','RadiusExtensionOverlapRemoval',1373);bcb(426,22,{3:1,35:1,22:1,426:1},hWc);var dWc,eWc;var X$=ndb(kre,'AnnulusWedgeCriteria',426,CI,jWc,iWc);var kWc;bcb(380,22,{3:1,35:1,22:1,380:1},rWc);var mWc,nWc,oWc;var Y$=ndb(kre,Sle,380,CI,tWc,sWc);var uWc;bcb(852,1,ale,IWc);_.Qe=function JWc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lre),''),'Order ID'),'The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly.'),meb(0)),(_5c(),X5c)),JI),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mre),''),'Radius'),'The radius option can be used to set the initial radius for the radial layouter.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nre),''),'Compaction'),'With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately.'),yWc),V5c),Y$),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ore),''),'Compaction Step Size'),'Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration.'),meb(1)),X5c),JI),pqb(L5c))));o4c(a,ore,nre,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pre),''),'Sorter'),'Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates.'),EWc),V5c),b_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qre),''),'Annulus Wedge Criteria'),'Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals.'),GWc),V5c),X$),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rre),''),'Translation Optimization'),'Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized.'),AWc),V5c),a_),pqb(L5c))));$Wc((new _Wc,a))};var wWc,xWc,yWc,zWc,AWc,BWc,CWc,DWc,EWc,FWc,GWc;var Z$=mdb(kre,'RadialMetaDataProvider',852);bcb(996,1,ale,_Wc);_.Qe=function aXc(a){$Wc(a)};var KWc,LWc,MWc,NWc,OWc,PWc,QWc,RWc,SWc,TWc,UWc,VWc,WWc,XWc,YWc;var _$=mdb(kre,'RadialOptions',996);bcb(997,1,{},bXc);_.$e=function cXc(){var a;return a=new ZUc,a};_._e=function dXc(a){};var $$=mdb(kre,'RadialOptions/RadialFactory',997);bcb(340,22,{3:1,35:1,22:1,340:1},kXc);var eXc,fXc,gXc,hXc;var a_=ndb(kre,'RadialTranslationStrategy',340,CI,mXc,lXc);var nXc;bcb(293,22,{3:1,35:1,22:1,293:1},uXc);var pXc,qXc,rXc;var b_=ndb(kre,'SortingStrategy',293,CI,wXc,vXc);var xXc;bcb(1449,1,Bqe,CXc);_.Yf=function DXc(a){return BD(a,33),null};_.pf=function EXc(a,b){AXc(this,BD(a,33),b)};_.c=0;var c_=mdb('org.eclipse.elk.alg.radial.p1position','EadesRadial',1449);bcb(1775,1,{},FXc);_.jg=function GXc(a){return eVc(a)};var d_=mdb(tre,'AnnulusWedgeByLeafs',1775);bcb(1776,1,{},IXc);_.jg=function JXc(a){return HXc(this,a)};var e_=mdb(tre,'AnnulusWedgeByNodeSpace',1776);bcb(1450,1,Bqe,MXc);_.Yf=function NXc(a){return BD(a,33),null};_.pf=function OXc(a,b){KXc(this,BD(a,33),b)};var f_=mdb('org.eclipse.elk.alg.radial.p2routing','StraightLineEdgeRouter',1450);bcb(811,1,{},QXc);_.kg=function RXc(a){};_.lg=function TXc(a){PXc(this,a)};var h_=mdb(ure,'IDSorter',811);bcb(1774,1,Dke,UXc);_.ue=function VXc(a,b){return SXc(BD(a,33),BD(b,33))};_.Fb=function WXc(a){return this===a};_.ve=function XXc(){return new tpb(this)};var g_=mdb(ure,'IDSorter/lambda$0$Type',1774);bcb(1773,1,{},$Xc);_.kg=function _Xc(a){YXc(this,a)};_.lg=function aYc(a){var b;if(!a.dc()){if(!this.e){b=bVc(BD(a.Xb(0),33));YXc(this,b)}PXc(this.e,a)}};var i_=mdb(ure,'PolarCoordinateSorter',1773);bcb(1136,209,Mle,bYc);_.Ze=function eYc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;Odd(b,'Rectangle Packing',1);b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));c=Edb(ED(hkd(a,(lZc(),RYc))));p=BD(hkd(a,eZc),381);s=Ccb(DD(hkd(a,ZYc)));w=Ccb(DD(hkd(a,dZc)));l=Ccb(DD(hkd(a,VYc)));A=BD(hkd(a,fZc),116);v=Edb(ED(hkd(a,jZc)));e=Ccb(DD(hkd(a,iZc)));m=Ccb(DD(hkd(a,WYc)));r=Ccb(DD(hkd(a,XYc)));F=Edb(ED(hkd(a,kZc)));C=(!a.a&&(a.a=new cUd(E2,a,10,11)),a.a);r$c(C);if(r){o=new Rkb;for(i=new Fyd(C);i.e!=i.i.gc();){g=BD(Dyd(i),33);ikd(g,UYc)&&(o.c[o.c.length]=g,true)}for(j=new olb(o);j.a<j.c.c.length;){g=BD(mlb(j),33);Ftd(C,g)}mmb();Okb(o,new fYc);for(k=new olb(o);k.a<k.c.c.length;){g=BD(mlb(k),33);B=BD(hkd(g,UYc),19).a;B=$wnd.Math.min(B,C.i);vtd(C,B,g)}q=0;for(h=new Fyd(C);h.e!=h.i.gc();){g=BD(Dyd(h),33);jkd(g,TYc,meb(q));++q}}u=rfd(a);u.a-=A.b+A.c;u.b-=A.d+A.a;t=u.a;if(F<0||F<u.a){n=new nYc(c,p,s);f=jYc(n,C,v,A);b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd))}else{f=new d$c(c,F,0,(k$c(),j$c))}u.a+=A.b+A.c;u.b+=A.d+A.a;if(!w){r$c(C);D=new DZc(c,l,m,e,v);t=$wnd.Math.max(u.a,f.c);f=CZc(D,C,t,u,b,a,A)}cYc(C,A);Afd(a,f.c+(A.b+A.c),f.b+(A.d+A.a),false,true);Ccb(DD(hkd(a,cZc)))||$Cb((d=new _Cb((Pgd(),new bhd(a))),d));b.n&&b.n&&!!a&&Tdd(b,i6d(a),(pgd(),mgd));Qdd(b)};var k_=mdb(yre,'RectPackingLayoutProvider',1136);bcb(1137,1,Dke,fYc);_.ue=function gYc(a,b){return dYc(BD(a,33),BD(b,33))};_.Fb=function hYc(a){return this===a};_.ve=function iYc(){return new tpb(this)};var j_=mdb(yre,'RectPackingLayoutProvider/lambda$0$Type',1137);bcb(1256,1,{},nYc);_.a=0;_.c=false;var l_=mdb(zre,'AreaApproximation',1256);var o_=odb(zre,'BestCandidateFilter');bcb(638,1,{526:1},oYc);_.mg=function pYc(a,b,c){var d,e,f,g,h,i;i=new Rkb;f=Pje;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),220);f=$wnd.Math.min(f,(g.c+(c.b+c.c))*(g.b+(c.d+c.a)))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);(d.c+(c.b+c.c))*(d.b+(c.d+c.a))==f&&(i.c[i.c.length]=d,true)}return i};var m_=mdb(zre,'AreaFilter',638);bcb(639,1,{526:1},qYc);_.mg=function rYc(a,b,c){var d,e,f,g,h,i;h=new Rkb;i=Pje;for(g=new olb(a);g.a<g.c.c.length;){f=BD(mlb(g),220);i=$wnd.Math.min(i,$wnd.Math.abs((f.c+(c.b+c.c))/(f.b+(c.d+c.a))-b))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);$wnd.Math.abs((d.c+(c.b+c.c))/(d.b+(c.d+c.a))-b)==i&&(h.c[h.c.length]=d,true)}return h};var n_=mdb(zre,'AspectRatioFilter',639);bcb(637,1,{526:1},uYc);_.mg=function vYc(a,b,c){var d,e,f,g,h,i;i=new Rkb;f=Qje;for(h=new olb(a);h.a<h.c.c.length;){g=BD(mlb(h),220);f=$wnd.Math.max(f,q$c(g.c+(c.b+c.c),g.b+(c.d+c.a),g.a))}for(e=new olb(a);e.a<e.c.c.length;){d=BD(mlb(e),220);q$c(d.c+(c.b+c.c),d.b+(c.d+c.a),d.a)==f&&(i.c[i.c.length]=d,true)}return i};var p_=mdb(zre,'ScaleMeasureFilter',637);bcb(381,22,{3:1,35:1,22:1,381:1},AYc);var wYc,xYc,yYc;var q_=ndb(Are,'OptimizationGoal',381,CI,CYc,BYc);var DYc;bcb(856,1,ale,PYc);_.Qe=function QYc(a){t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bre),''),'Optimization Goal'),'Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored.'),LYc),(_5c(),V5c)),q_),pqb((N5c(),K5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cre),''),'Shift Last Placed.'),'When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces.'),(Bcb(),true)),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dre),''),'Current position of a node in the order of nodes'),'The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ere),''),'Desired index of node'),'The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position.'),meb(-1)),X5c),JI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fre),''),'Only Area Approximation'),'If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gre),''),'Compact Rows'),'Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hre),''),'Fit Aspect Ratio'),'Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion.'),false),T5c),wI),pqb(K5c))));o4c(a,Hre,Jre,null);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ire),''),'Target Width'),'Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding.'),-1),U5c),BI),pqb(K5c))));mZc((new nZc,a))};var FYc,GYc,HYc,IYc,JYc,KYc,LYc,MYc,NYc;var r_=mdb(Are,'RectPackingMetaDataProvider',856);bcb(1004,1,ale,nZc);_.Qe=function oZc(a){mZc(a)};var RYc,SYc,TYc,UYc,VYc,WYc,XYc,YYc,ZYc,$Yc,_Yc,aZc,bZc,cZc,dZc,eZc,fZc,gZc,hZc,iZc,jZc,kZc;var t_=mdb(Are,'RectPackingOptions',1004);bcb(1005,1,{},pZc);_.$e=function qZc(){var a;return a=new bYc,a};_._e=function rZc(a){};var s_=mdb(Are,'RectPackingOptions/RectpackingFactory',1005);bcb(1257,1,{},DZc);_.a=0;_.b=false;_.c=0;_.d=0;_.e=false;_.f=false;_.g=0;var u_=mdb('org.eclipse.elk.alg.rectpacking.seconditeration','RowFillingAndCompaction',1257);bcb(187,1,{187:1},PZc);_.a=0;_.c=false;_.d=0;_.e=0;_.f=0;_.g=0;_.i=0;_.k=false;_.o=Pje;_.p=Pje;_.r=0;_.s=0;_.t=0;var x_=mdb(Lre,'Block',187);bcb(211,1,{211:1},VZc);_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var v_=mdb(Lre,'BlockRow',211);bcb(443,1,{443:1},b$c);_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;var w_=mdb(Lre,'BlockStack',443);bcb(220,1,{220:1},d$c,e$c);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;var z_=mdb(Lre,'DrawingData',220);bcb(355,22,{3:1,35:1,22:1,355:1},l$c);var f$c,g$c,h$c,i$c,j$c;var y_=ndb(Lre,'DrawingDataDescriptor',355,CI,n$c,m$c);var o$c;bcb(200,1,{200:1},x$c);_.b=0;_.c=0;_.e=0;_.f=0;var A_=mdb(Lre,'RectRow',200);bcb(756,1,{},F$c);_.j=0;var G_=mdb(Nre,une,756);bcb(1245,1,{},G$c);_.Je=function H$c(a){return S6c(a.a,a.b)};var B_=mdb(Nre,vne,1245);bcb(1246,1,{},I$c);_.Je=function J$c(a){return A$c(this.a,a)};var C_=mdb(Nre,wne,1246);bcb(1247,1,{},K$c);_.Je=function L$c(a){return B$c(this.a,a)};var D_=mdb(Nre,xne,1247);bcb(1248,1,{},M$c);_.Je=function N$c(a){return C$c(this.a,a)};var E_=mdb(Nre,'ElkGraphImporter/lambda$3$Type',1248);bcb(1249,1,{},O$c);_.Je=function P$c(a){return D$c(this.a,a)};var F_=mdb(Nre,yne,1249);bcb(1133,209,Mle,Q$c);_.Ze=function S$c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(ikd(a,(d0c(),c0c))){n=GD(hkd(a,(J0c(),I0c)));f=h4c(n4c(),n);if(f){g=BD(hgd(f.f),209);g.Ze(a,Udd(b,1))}}jkd(a,Z_c,(C_c(),A_c));jkd(a,$_c,(N_c(),K_c));jkd(a,__c,(a1c(),_0c));h=BD(hkd(a,(J0c(),E0c)),19).a;Odd(b,'Overlap removal',1);Ccb(DD(hkd(a,D0c)))&&'null45scanlineOverlaps';i=new Tqb;j=new U$c(i);d=new F$c;c=z$c(d,a);k=true;e=0;while(e<h&&k){if(Ccb(DD(hkd(a,F0c)))){i.a.$b();cOb(new dOb(j),c.i);if(i.a.gc()==0){break}c.e=i}H2c(this.b);K2c(this.b,(Y$c(),V$c),(R0c(),Q0c));K2c(this.b,W$c,c.g);K2c(this.b,X$c,(s_c(),r_c));this.a=F2c(this.b,c);for(m=new olb(this.a);m.a<m.c.c.length;){l=BD(mlb(m),51);l.pf(c,Udd(b,1))}E$c(d,c);k=Ccb(DD(vNb(c,(XNb(),WNb))));++e}y$c(d,c);Qdd(b)};var I_=mdb(Nre,'OverlapRemovalLayoutProvider',1133);bcb(1134,1,{},U$c);var H_=mdb(Nre,'OverlapRemovalLayoutProvider/lambda$0$Type',1134);bcb(437,22,{3:1,35:1,22:1,437:1},Z$c);var V$c,W$c,X$c;var J_=ndb(Nre,'SPOrEPhases',437,CI,_$c,$$c);var a_c;bcb(1255,1,{},d_c);var L_=mdb(Nre,'ShrinkTree',1255);bcb(1135,209,Mle,e_c);_.Ze=function f_c(a,b){var c,d,e,f,g;if(ikd(a,(d0c(),c0c))){g=GD(hkd(a,c0c));e=h4c(n4c(),g);if(e){f=BD(hgd(e.f),209);f.Ze(a,Udd(b,1))}}d=new F$c;c=z$c(d,a);c_c(this.a,c,Udd(b,1));y$c(d,c)};var K_=mdb(Nre,'ShrinkTreeLayoutProvider',1135);bcb(300,134,{3:1,300:1,94:1,134:1},g_c);_.c=false;var M_=mdb('org.eclipse.elk.alg.spore.graph','Graph',300);bcb(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},k_c);_.Kf=function m_c(){return j_c(this)};_.Xf=function l_c(){return j_c(this)};var h_c;var N_=ndb(Ore,Sle,482,CI,o_c,n_c);var p_c;bcb(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},t_c);_.Kf=function v_c(){return new I1c};_.Xf=function u_c(){return new I1c};var r_c;var O_=ndb(Ore,'OverlapRemovalStrategy',551,CI,x_c,w_c);var y_c;bcb(430,22,{3:1,35:1,22:1,430:1},D_c);var A_c,B_c;var P_=ndb(Ore,'RootSelection',430,CI,F_c,E_c);var G_c;bcb(316,22,{3:1,35:1,22:1,316:1},O_c);var I_c,J_c,K_c,L_c,M_c;var Q_=ndb(Ore,'SpanningTreeCostFunction',316,CI,Q_c,P_c);var R_c;bcb(1002,1,ale,f0c);_.Qe=function g0c(a){e0c(a)};var T_c,U_c,V_c,W_c,X_c,Y_c,Z_c,$_c,__c,a0c,b0c,c0c;var S_=mdb(Ore,'SporeCompactionOptions',1002);bcb(1003,1,{},h0c);_.$e=function i0c(){var a;return a=new e_c,a};_._e=function j0c(a){};var R_=mdb(Ore,'SporeCompactionOptions/SporeCompactionFactory',1003);bcb(855,1,ale,B0c);_.Qe=function C0c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Qre),''),'Underlying Layout Algorithm'),'A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Vre),'structure'),'Structure Extraction Strategy'),'This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices.'),y0c),V5c),W_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rre),$re),'Tree Construction Strategy'),'Whether a minimum spanning tree or a maximum spanning tree should be constructed.'),w0c),V5c),X_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Sre),$re),'Cost Function for Spanning Tree'),'The cost function is used in the creation of the spanning tree.'),u0c),V5c),Q_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tre),$re),'Root node for spanning tree construction'),'The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen.'),null),Z5c),ZI),pqb(L5c))));o4c(a,Tre,Ure,q0c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ure),$re),'Root selection for spanning tree'),'This sets the method used to select a root node for the construction of a spanning tree'),s0c),V5c),P_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Wre),Bpe),'Compaction Strategy'),'This option defines how the compaction is applied.'),l0c),V5c),N_),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xre),Bpe),'Orthogonal Compaction'),'Restricts the translation of nodes to orthogonal directions in the compaction phase.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Yre),_re),'Upper limit for iterations of overlap removal'),null),meb(64)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zre),_re),'Whether to run a supplementary scanline overlap check.'),null),true),T5c),wI),pqb(L5c))));K0c((new L0c,a));e0c((new f0c,a))};var k0c,l0c,m0c,n0c,o0c,p0c,q0c,r0c,s0c,t0c,u0c,v0c,w0c,x0c,y0c,z0c;var T_=mdb(Ore,'SporeMetaDataProvider',855);bcb(_ie,1,ale,L0c);_.Qe=function M0c(a){K0c(a)};var D0c,E0c,F0c,G0c,H0c,I0c;var V_=mdb(Ore,'SporeOverlapRemovalOptions',_ie);bcb(1001,1,{},N0c);_.$e=function O0c(){var a;return a=new Q$c,a};_._e=function P0c(a){};var U_=mdb(Ore,'SporeOverlapRemovalOptions/SporeOverlapFactory',1001);bcb(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},T0c);_.Kf=function V0c(){return S0c(this)};_.Xf=function U0c(){return S0c(this)};var Q0c;var W_=ndb(Ore,'StructureExtractionStrategy',530,CI,X0c,W0c);var Y0c;bcb(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},c1c);_.Kf=function e1c(){return b1c(this)};_.Xf=function d1c(){return b1c(this)};var $0c,_0c;var X_=ndb(Ore,'TreeConstructionStrategy',429,CI,g1c,f1c);var h1c;bcb(1443,1,Bqe,k1c);_.Yf=function l1c(a){return BD(a,300),new j3c};_.pf=function m1c(a,b){j1c(BD(a,300),b)};var Z_=mdb(bse,'DelaunayTriangulationPhase',1443);bcb(1444,1,qie,n1c);_.td=function o1c(a){Ekb(this.a,BD(a,65).a)};var Y_=mdb(bse,'DelaunayTriangulationPhase/lambda$0$Type',1444);bcb(783,1,Bqe,s1c);_.Yf=function t1c(a){return BD(a,300),new j3c};_.pf=function u1c(a,b){this.ng(BD(a,300),b)};_.ng=function v1c(a,b){var c,d,e;Odd(b,'Minimum spanning tree construction',1);a.d?(d=a.d.a):(d=BD(Ikb(a.i,0),65).a);Ccb(DD(vNb(a,(XNb(),VNb))))?(e=UCb(a.e,d,(c=a.b,c))):(e=UCb(a.e,d,a.b));q1c(this,e,a);Qdd(b)};var b0=mdb(cse,'MinSTPhase',783);bcb(1446,783,Bqe,w1c);_.ng=function y1c(a,b){var c,d,e,f;Odd(b,'Maximum spanning tree construction',1);c=new z1c(a);a.d?(e=a.d.c):(e=BD(Ikb(a.i,0),65).c);Ccb(DD(vNb(a,(XNb(),VNb))))?(f=UCb(a.e,e,(d=c,d))):(f=UCb(a.e,e,c));q1c(this,f,a);Qdd(b)};var __=mdb(cse,'MaxSTPhase',1446);bcb(1447,1,{},z1c);_.Je=function A1c(a){return x1c(this.a,a)};var $_=mdb(cse,'MaxSTPhase/lambda$0$Type',1447);bcb(1445,1,qie,B1c);_.td=function C1c(a){r1c(this.a,BD(a,65))};var a0=mdb(cse,'MinSTPhase/lambda$0$Type',1445);bcb(785,1,Bqe,I1c);_.Yf=function J1c(a){return BD(a,300),new j3c};_.pf=function K1c(a,b){H1c(this,BD(a,300),b)};_.a=false;var d0=mdb(dse,'GrowTreePhase',785);bcb(786,1,qie,L1c);_.td=function M1c(a){G1c(this.a,this.b,this.c,BD(a,221))};var c0=mdb(dse,'GrowTreePhase/lambda$0$Type',786);bcb(1448,1,Bqe,Q1c);_.Yf=function R1c(a){return BD(a,300),new j3c};_.pf=function S1c(a,b){P1c(this,BD(a,300),b)};var f0=mdb(dse,'ShrinkTreeCompactionPhase',1448);bcb(784,1,qie,T1c);_.td=function U1c(a){O1c(this.a,this.b,this.c,BD(a,221))};var e0=mdb(dse,'ShrinkTreeCompactionPhase/lambda$0$Type',784);var g2=odb(yqe,'IGraphElementVisitor');bcb(860,1,{527:1},b2c);_.og=function e2c(a){var b;b=a2c(this,a);tNb(b,BD(Ohb(this.b,a),94));$1c(this,a,b)};var V1c,W1c,X1c;var m0=mdb(Nle,'LayoutConfigurator',860);var h0=odb(Nle,'LayoutConfigurator/IPropertyHolderOptionFilter');bcb(932,1,{1933:1},f2c);_.pg=function g2c(a,b){return Y1c(),!a.Xe(b)};var i0=mdb(Nle,'LayoutConfigurator/lambda$0$Type',932);bcb(933,1,{1933:1},i2c);_.pg=function j2c(a,b){return h2c(a,b)};var j0=mdb(Nle,'LayoutConfigurator/lambda$1$Type',933);bcb(931,1,{831:1},k2c);_.qg=function l2c(a,b){return Y1c(),!a.Xe(b)};var k0=mdb(Nle,'LayoutConfigurator/lambda$2$Type',931);bcb(934,1,Oie,m2c);_.Mb=function n2c(a){return d2c(this.a,this.b,BD(a,1933))};var l0=mdb(Nle,'LayoutConfigurator/lambda$3$Type',934);bcb(858,1,{},w2c);var n0=mdb(Nle,'RecursiveGraphLayoutEngine',858);bcb(296,60,Tie,x2c,y2c);var o0=mdb(Nle,'UnsupportedConfigurationException',296);bcb(453,60,Tie,z2c);var p0=mdb(Nle,'UnsupportedGraphException',453);bcb(754,1,{});var K1=mdb(yqe,'AbstractRandomListAccessor',754);bcb(500,754,{},L2c);_.rg=function N2c(){return null};_.d=true;_.e=true;_.f=0;var v0=mdb(fse,'AlgorithmAssembler',500);bcb(1236,1,Oie,O2c);_.Mb=function P2c(a){return !!BD(a,123)};var q0=mdb(fse,'AlgorithmAssembler/lambda$0$Type',1236);bcb(1237,1,{},Q2c);_.Kb=function R2c(a){return M2c(this.a,BD(a,123))};var r0=mdb(fse,'AlgorithmAssembler/lambda$1$Type',1237);bcb(1238,1,Oie,S2c);_.Mb=function T2c(a){return !!BD(a,80)};var s0=mdb(fse,'AlgorithmAssembler/lambda$2$Type',1238);bcb(1239,1,qie,U2c);_.td=function V2c(a){d3c(this.a,BD(a,80))};var t0=mdb(fse,'AlgorithmAssembler/lambda$3$Type',1239);bcb(1240,1,qie,W2c);_.td=function X2c(a){G2c(this.a,this.b,BD(a,234))};var u0=mdb(fse,'AlgorithmAssembler/lambda$4$Type',1240);bcb(1355,1,Dke,Z2c);_.ue=function $2c(a,b){return Y2c(BD(a,234),BD(b,234))};_.Fb=function _2c(a){return this===a};_.ve=function a3c(){return new tpb(this)};var w0=mdb(fse,'EnumBasedFactoryComparator',1355);bcb(80,754,{80:1},j3c);_.rg=function l3c(){return new Tqb};_.a=0;var x0=mdb(fse,'LayoutProcessorConfiguration',80);bcb(1013,1,{527:1},q3c);_.og=function u3c(a){stb(n3c,new z3c(a))};var m3c,n3c,o3c;var B0=mdb(Xke,'DeprecatedLayoutOptionReplacer',1013);bcb(1014,1,qie,v3c);_.td=function w3c(a){r3c(BD(a,160))};var y0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$0$Type',1014);bcb(1015,1,qie,x3c);_.td=function y3c(a){s3c(BD(a,160))};var z0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$1$Type',1015);bcb(1016,1,{},z3c);_.Od=function A3c(a,b){t3c(this.a,BD(a,146),BD(b,38))};var A0=mdb(Xke,'DeprecatedLayoutOptionReplacer/lambda$2$Type',1016);bcb(149,1,{686:1,149:1},E3c);_.Fb=function F3c(a){return C3c(this,a)};_.sg=function G3c(){return this.b};_.tg=function H3c(){return this.c};_.ne=function I3c(){return this.e};_.Hb=function J3c(){return LCb(this.c)};_.Ib=function K3c(){return 'Layout Algorithm: '+this.c};var E0=mdb(Xke,'LayoutAlgorithmData',149);bcb(263,1,{},R3c);var D0=mdb(Xke,'LayoutAlgorithmData/Builder',263);bcb(1017,1,{527:1},U3c);_.og=function V3c(a){JD(a,239)&&!Ccb(DD(a.We((Y9c(),d9c))))&&S3c(BD(a,33))};var F0=mdb(Xke,'LayoutAlgorithmResolver',1017);bcb(229,1,{686:1,229:1},W3c);_.Fb=function X3c(a){if(JD(a,229)){return dfb(this.b,BD(a,229).b)}return false};_.sg=function Y3c(){return this.a};_.tg=function Z3c(){return this.b};_.ne=function $3c(){return this.d};_.Hb=function _3c(){return LCb(this.b)};_.Ib=function a4c(){return 'Layout Type: '+this.b};var H0=mdb(Xke,'LayoutCategoryData',229);bcb(344,1,{},e4c);var G0=mdb(Xke,'LayoutCategoryData/Builder',344);bcb(867,1,{},m4c);var f4c;var c1=mdb(Xke,'LayoutMetaDataService',867);bcb(868,1,{},v4c);var J0=mdb(Xke,'LayoutMetaDataService/Registry',868);bcb(478,1,{478:1},w4c);var I0=mdb(Xke,'LayoutMetaDataService/Registry/Triple',478);bcb(869,1,gse,x4c);_.ug=function y4c(){return new d7c};var K0=mdb(Xke,'LayoutMetaDataService/lambda$0$Type',869);bcb(870,1,hse,z4c);_.vg=function A4c(a){return R6c(BD(a,8))};var L0=mdb(Xke,'LayoutMetaDataService/lambda$1$Type',870);bcb(879,1,gse,B4c);_.ug=function C4c(){return new Rkb};var M0=mdb(Xke,'LayoutMetaDataService/lambda$10$Type',879);bcb(880,1,hse,D4c);_.vg=function E4c(a){return new Tkb(BD(a,12))};var N0=mdb(Xke,'LayoutMetaDataService/lambda$11$Type',880);bcb(881,1,gse,F4c);_.ug=function G4c(){return new Psb};var O0=mdb(Xke,'LayoutMetaDataService/lambda$12$Type',881);bcb(882,1,hse,H4c);_.vg=function I4c(a){return Ru(BD(a,68))};var P0=mdb(Xke,'LayoutMetaDataService/lambda$13$Type',882);bcb(883,1,gse,J4c);_.ug=function K4c(){return new Tqb};var Q0=mdb(Xke,'LayoutMetaDataService/lambda$14$Type',883);bcb(884,1,hse,L4c);_.vg=function M4c(a){return Dx(BD(a,53))};var R0=mdb(Xke,'LayoutMetaDataService/lambda$15$Type',884);bcb(885,1,gse,N4c);_.ug=function O4c(){return new zsb};var S0=mdb(Xke,'LayoutMetaDataService/lambda$16$Type',885);bcb(886,1,hse,P4c);_.vg=function Q4c(a){return Gx(BD(a,53))};var T0=mdb(Xke,'LayoutMetaDataService/lambda$17$Type',886);bcb(887,1,gse,R4c);_.ug=function S4c(){return new Gxb};var U0=mdb(Xke,'LayoutMetaDataService/lambda$18$Type',887);bcb(888,1,hse,T4c);_.vg=function U4c(a){return Hx(BD(a,208))};var V0=mdb(Xke,'LayoutMetaDataService/lambda$19$Type',888);bcb(871,1,gse,V4c);_.ug=function W4c(){return new s7c};var W0=mdb(Xke,'LayoutMetaDataService/lambda$2$Type',871);bcb(872,1,hse,X4c);_.vg=function Y4c(a){return new t7c(BD(a,74))};var X0=mdb(Xke,'LayoutMetaDataService/lambda$3$Type',872);bcb(873,1,gse,Z4c);_.ug=function $4c(){return new H_b};var Y0=mdb(Xke,'LayoutMetaDataService/lambda$4$Type',873);bcb(874,1,hse,_4c);_.vg=function a5c(a){return new K_b(BD(a,142))};var Z0=mdb(Xke,'LayoutMetaDataService/lambda$5$Type',874);bcb(875,1,gse,b5c);_.ug=function c5c(){return new p0b};var $0=mdb(Xke,'LayoutMetaDataService/lambda$6$Type',875);bcb(876,1,hse,d5c);_.vg=function e5c(a){return new r0b(BD(a,116))};var _0=mdb(Xke,'LayoutMetaDataService/lambda$7$Type',876);bcb(877,1,gse,f5c);_.ug=function g5c(){return new _fd};var a1=mdb(Xke,'LayoutMetaDataService/lambda$8$Type',877);bcb(878,1,hse,h5c);_.vg=function i5c(a){return new agd(BD(a,373))};var b1=mdb(Xke,'LayoutMetaDataService/lambda$9$Type',878);var Q3=odb(Hle,'IProperty');bcb(23,1,{35:1,686:1,23:1,146:1},p5c);_.wd=function q5c(a){return k5c(this,BD(a,146))};_.Fb=function r5c(a){return JD(a,23)?dfb(this.f,BD(a,23).f):JD(a,146)&&dfb(this.f,BD(a,146).tg())};_.wg=function s5c(){var a;if(JD(this.b,4)){a=fvd(this.b);if(a==null){throw vbb(new Zdb(mse+this.f+"'. "+"Make sure it's type is registered with the "+(fdb(Y3),Y3.k)+jse))}return a}else{return this.b}};_.sg=function t5c(){return this.d};_.tg=function u5c(){return this.f};_.ne=function v5c(){return this.i};_.Hb=function w5c(){return LCb(this.f)};_.Ib=function x5c(){return 'Layout Option: '+this.f};var g1=mdb(Xke,'LayoutOptionData',23);bcb(24,1,{},H5c);var d1=mdb(Xke,'LayoutOptionData/Builder',24);bcb(175,22,{3:1,35:1,22:1,175:1},O5c);var I5c,J5c,K5c,L5c,M5c;var e1=ndb(Xke,'LayoutOptionData/Target',175,CI,Q5c,P5c);var R5c;bcb(277,22,{3:1,35:1,22:1,277:1},a6c);var T5c,U5c,V5c,W5c,X5c,Y5c,Z5c,$5c;var f1=ndb(Xke,'LayoutOptionData/Type',277,CI,c6c,b6c);var d6c;var f6c;var h6c;bcb(110,1,{110:1},I6c,J6c,K6c);_.Fb=function L6c(a){var b;if(a==null||!JD(a,110)){return false}b=BD(a,110);return wtb(this.c,b.c)&&wtb(this.d,b.d)&&wtb(this.b,b.b)&&wtb(this.a,b.a)};_.Hb=function M6c(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.c,this.d,this.b,this.a]))};_.Ib=function N6c(){return 'Rect[x='+this.c+',y='+this.d+',w='+this.b+',h='+this.a+']'};_.a=0;_.b=0;_.c=0;_.d=0;var k1=mdb(pne,'ElkRectangle',110);bcb(8,1,{3:1,4:1,8:1,414:1},d7c,e7c,f7c,g7c);_.Fb=function h7c(a){return T6c(this,a)};_.Hb=function i7c(){return Hdb(this.a)+jeb(Hdb(this.b))};_.Jf=function k7c(b){var c,d,e,f;e=0;while(e<b.length&&j7c((BCb(e,b.length),b.charCodeAt(e)),mne)){++e}c=b.length;while(c>0&&j7c((BCb(c-1,b.length),b.charCodeAt(c-1)),nne)){--c}if(e>=c){throw vbb(new Wdb('The given string does not contain any numbers.'))}f=mfb(b.substr(e,c-e),',|;|\r|\n');if(f.length!=2){throw vbb(new Wdb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Hcb(ufb(f[0]));this.b=Hcb(ufb(f[1]))}catch(a){a=ubb(a);if(JD(a,127)){d=a;throw vbb(new Wdb(one+d))}else throw vbb(a)}};_.Ib=function m7c(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var m1=mdb(pne,'KVector',8);bcb(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},s7c,t7c,u7c);_.Pc=function x7c(){return r7c(this)};_.Jf=function v7c(b){var c,d,e,f,g,h;e=mfb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Osb(this);try{d=0;g=0;f=0;h=0;while(d<e.length){if(e[d]!=null&&ufb(e[d]).length>0){g%2==0?(f=Hcb(e[d])):(h=Hcb(e[d]));g>0&&g%2!=0&&Dsb(this,new f7c(f,h));++g}++d}}catch(a){a=ubb(a);if(JD(a,127)){c=a;throw vbb(new Wdb('The given string does not match the expected format for vectors.'+c))}else throw vbb(a)}};_.Ib=function y7c(){var a,b,c;a=new Wfb('(');b=Jsb(this,0);while(b.b!=b.d.c){c=BD(Xsb(b),8);Qfb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var l1=mdb(pne,'KVectorChain',74);bcb(248,22,{3:1,35:1,22:1,248:1},G7c);var z7c,A7c,B7c,C7c,D7c,E7c;var o1=ndb(ose,'Alignment',248,CI,I7c,H7c);var J7c;bcb(979,1,ale,Z7c);_.Qe=function $7c(a){Y7c(a)};var L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var q1=mdb(ose,'BoxLayouterOptions',979);bcb(980,1,{},_7c);_.$e=function a8c(){var a;return a=new ged,a};_._e=function b8c(a){};var p1=mdb(ose,'BoxLayouterOptions/BoxFactory',980);bcb(291,22,{3:1,35:1,22:1,291:1},j8c);var c8c,d8c,e8c,f8c,g8c,h8c;var r1=ndb(ose,'ContentAlignment',291,CI,l8c,k8c);var m8c;bcb(684,1,ale,Z9c);_.Qe=function $9c(a){t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,sse),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(_5c(),Z5c)),ZI),pqb((N5c(),L5c)))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tse),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),Y5c),E0),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$pe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),q8c),V5c),o1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,_le),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,use),''),'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."),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,lqe),''),'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.'),x8c),W5c),r1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zpe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Bcb(),false)),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,cqe),''),Cle),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),A8c),V5c),t1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ype),''),'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.'),F8c),V5c),v1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Jre),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,tpe),''),'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`."),K8c),V5c),z1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,ame),''),'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."),g9c),Y5c),j1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ame),''),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xqe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dme),''),'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."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bme),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),u9c),V5c),D1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,uqe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),Y5c),m1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vme),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),X5c),JI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,yme),''),'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).'),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,zme),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,mqe),''),'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.'),R8c),Y5c),l1),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,pqe),''),'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.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,qqe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,vse),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),Y5c),h1),qqb(L5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,vqe),''),'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."),T8c),Y5c),i1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Xpe),''),'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."),false),T5c),wI),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wse),''),'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),U5c),BI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xse),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,yse),''),'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'."),meb(100)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,zse),''),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ase),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),meb(4000)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Bse),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),meb(400)),X5c),JI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cse),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Dse),''),'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.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ese),''),'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.'),true),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fse),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,rse),'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.'),u8c),V5c),O1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Lpe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Mpe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Zle),zpe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Npe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,xme),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ope),zpe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ppe),zpe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Spe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Qpe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Rpe),zpe),'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),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wme),zpe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tpe),zpe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),U5c),BI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Upe),zpe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),U5c),BI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Vpe),zpe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),Y5c),i2),qqb(K5c,OC(GC(e1,1),Kie,175,0,[I5c,M5c,J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,wqe),zpe),'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.'),W9c),Y5c),i1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,tqe),Jse),'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).'),X5c),JI),qqb(L5c,OC(GC(e1,1),Kie,175,0,[K5c])))));o4c(a,tqe,sqe,k9c);t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,sqe),Jse),'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.'),i9c),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,dqe),Kse),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),V8c),Y5c),j1),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Gme),Kse),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),X8c),W5c),B1),qqb(K5c,OC(GC(e1,1),Kie,175,0,[J5c])))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,gqe),Lse),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),m9c),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,hqe),Lse),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,iqe),Lse),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,jqe),Lse),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,kqe),Lse),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),V5c),C1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Fme),Mse),'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."),Z8c),W5c),I1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Eme),Mse),'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.'),c9c),W5c),J1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Tme),Mse),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),a9c),Y5c),m1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,bqe),Mse),'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."),false),T5c),wI),pqb(L5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,nqe),Jpe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),D8c),V5c),u1),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Cme),Jpe),'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."),false),T5c),wI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Gse),'font'),'Font Name'),'Font name used for a label.'),Z5c),ZI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Hse),'font'),'Font Size'),'Font size used for a label.'),X5c),JI),pqb(J5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,rqe),Nse),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),Y5c),m1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,oqe),Nse),'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."),X5c),JI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ype),Nse),'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."),B9c),V5c),F1),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(z5c(D5c(A5c(B5c(new H5c,Wpe),Nse),'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."),U5c),BI),pqb(M5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Hme),Ose),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),y9c),W5c),E1),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,eqe),Ose),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,fqe),Ose),'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.'),true),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,_pe),Pse),'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."),false),T5c),wI),pqb(K5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,aqe),Pse),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),T5c),wI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,$le),'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),U5c),BI),pqb(I5c))));t4c(a,new p5c(F5c(E5c(G5c(y5c(z5c(D5c(A5c(B5c(new H5c,Ise),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),H8c),V5c),w1),pqb(I5c))));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sne),'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.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'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.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,ume),'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.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'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.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,bre),'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.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,'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.')));s4c(a,new W3c(b4c(d4c(c4c(new e4c,sre),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));$ad((new _ad,a));Y7c((new Z7c,a));jdd((new kdd,a))};var o8c,p8c,q8c,r8c,s8c,t8c,u8c,v8c,w8c,x8c,y8c,z8c,A8c,B8c,C8c,D8c,E8c,F8c,G8c,H8c,I8c,J8c,K8c,L8c,M8c,N8c,O8c,P8c,Q8c,R8c,S8c,T8c,U8c,V8c,W8c,X8c,Y8c,Z8c,$8c,_8c,a9c,b9c,c9c,d9c,e9c,f9c,g9c,h9c,i9c,j9c,k9c,l9c,m9c,n9c,o9c,p9c,q9c,r9c,s9c,t9c,u9c,v9c,w9c,x9c,y9c,z9c,A9c,B9c,C9c,D9c,E9c,F9c,G9c,H9c,I9c,J9c,K9c,L9c,M9c,N9c,O9c,P9c,Q9c,R9c,S9c,T9c,U9c,V9c,W9c,X9c;var s1=mdb(ose,'CoreOptions',684);bcb(103,22,{3:1,35:1,22:1,103:1},iad);var _9c,aad,bad,cad,dad;var t1=ndb(ose,Cle,103,CI,kad,jad);var lad;bcb(272,22,{3:1,35:1,22:1,272:1},rad);var nad,oad,pad;var u1=ndb(ose,'EdgeLabelPlacement',272,CI,tad,sad);var uad;bcb(218,22,{3:1,35:1,22:1,218:1},Bad);var wad,xad,yad,zad;var v1=ndb(ose,'EdgeRouting',218,CI,Dad,Cad);var Ead;bcb(312,22,{3:1,35:1,22:1,312:1},Nad);var Gad,Had,Iad,Jad,Kad,Lad;var w1=ndb(ose,'EdgeType',312,CI,Pad,Oad);var Qad;bcb(977,1,ale,_ad);_.Qe=function abd(a){$ad(a)};var Sad,Tad,Uad,Vad,Wad,Xad,Yad;var y1=mdb(ose,'FixedLayouterOptions',977);bcb(978,1,{},bbd);_.$e=function cbd(){var a;return a=new Zfd,a};_._e=function dbd(a){};var x1=mdb(ose,'FixedLayouterOptions/FixedFactory',978);bcb(334,22,{3:1,35:1,22:1,334:1},ibd);var ebd,fbd,gbd;var z1=ndb(ose,'HierarchyHandling',334,CI,kbd,jbd);var lbd;bcb(285,22,{3:1,35:1,22:1,285:1},tbd);var nbd,obd,pbd,qbd;var A1=ndb(ose,'LabelSide',285,CI,vbd,ubd);var wbd;bcb(93,22,{3:1,35:1,22:1,93:1},Ibd);var ybd,zbd,Abd,Bbd,Cbd,Dbd,Ebd,Fbd,Gbd;var B1=ndb(ose,'NodeLabelPlacement',93,CI,Lbd,Kbd);var Mbd;bcb(249,22,{3:1,35:1,22:1,249:1},Ubd);var Obd,Pbd,Qbd,Rbd,Sbd;var C1=ndb(ose,'PortAlignment',249,CI,Wbd,Vbd);var Xbd;bcb(98,22,{3:1,35:1,22:1,98:1},gcd);var Zbd,$bd,_bd,acd,bcd,ccd;var D1=ndb(ose,'PortConstraints',98,CI,icd,hcd);var jcd;bcb(273,22,{3:1,35:1,22:1,273:1},scd);var lcd,mcd,ncd,ocd,pcd,qcd;var E1=ndb(ose,'PortLabelPlacement',273,CI,wcd,vcd);var xcd;bcb(61,22,{3:1,35:1,22:1,61:1},Ycd);var zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd,Kcd,Lcd,Mcd,Ncd,Ocd,Pcd,Qcd,Rcd,Scd,Tcd;var F1=ndb(ose,'PortSide',61,CI,_cd,$cd);var bdd;bcb(981,1,ale,kdd);_.Qe=function ldd(a){jdd(a)};var ddd,edd,fdd,gdd,hdd;var H1=mdb(ose,'RandomLayouterOptions',981);bcb(982,1,{},mdd);_.$e=function ndd(){var a;return a=new Mgd,a};_._e=function odd(a){};var G1=mdb(ose,'RandomLayouterOptions/RandomFactory',982);bcb(374,22,{3:1,35:1,22:1,374:1},udd);var pdd,qdd,rdd,sdd;var I1=ndb(ose,'SizeConstraint',374,CI,wdd,vdd);var xdd;bcb(259,22,{3:1,35:1,22:1,259:1},Jdd);var zdd,Add,Bdd,Cdd,Ddd,Edd,Fdd,Gdd,Hdd;var J1=ndb(ose,'SizeOptions',259,CI,Ldd,Kdd);var Mdd;bcb(370,1,{1949:1},Zdd);_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var L1=mdb(yqe,'BasicProgressMonitor',370);bcb(972,209,Mle,ged);_.Ze=function ked(a,b){var c,d,e,f,g,h,i,j,k;Odd(b,'Box layout',2);e=Gdb(ED(hkd(a,(X7c(),W7c))));f=BD(hkd(a,T7c),116);c=Ccb(DD(hkd(a,O7c)));d=Ccb(DD(hkd(a,P7c)));switch(BD(hkd(a,M7c),311).g){case 0:g=(h=new Tkb((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a)),mmb(),Okb(h,new med(d)),h);i=rfd(a);j=ED(hkd(a,L7c));(j==null||(uCb(j),j)<=0)&&(j=1.3);k=ded(g,e,f,i.a,i.b,c,(uCb(j),j));Afd(a,k.a,k.b,false,true);break;default:eed(a,e,f,c);}Qdd(b)};var S1=mdb(yqe,'BoxLayoutProvider',972);bcb(973,1,Dke,med);_.ue=function ned(a,b){return led(this,BD(a,33),BD(b,33))};_.Fb=function oed(a){return this===a};_.ve=function ped(){return new tpb(this)};_.a=false;var M1=mdb(yqe,'BoxLayoutProvider/1',973);bcb(157,1,{157:1},wed,xed);_.Ib=function yed(){return this.c?_od(this.c):Fe(this.b)};var N1=mdb(yqe,'BoxLayoutProvider/Group',157);bcb(311,22,{3:1,35:1,22:1,311:1},Eed);var zed,Aed,Bed,Ced;var O1=ndb(yqe,'BoxLayoutProvider/PackingMode',311,CI,Ged,Fed);var Hed;bcb(974,1,Dke,Jed);_.ue=function Ked(a,b){return hed(BD(a,157),BD(b,157))};_.Fb=function Led(a){return this===a};_.ve=function Med(){return new tpb(this)};var P1=mdb(yqe,'BoxLayoutProvider/lambda$0$Type',974);bcb(975,1,Dke,Ned);_.ue=function Oed(a,b){return ied(BD(a,157),BD(b,157))};_.Fb=function Ped(a){return this===a};_.ve=function Qed(){return new tpb(this)};var Q1=mdb(yqe,'BoxLayoutProvider/lambda$1$Type',975);bcb(976,1,Dke,Red);_.ue=function Sed(a,b){return jed(BD(a,157),BD(b,157))};_.Fb=function Ted(a){return this===a};_.ve=function Ued(){return new tpb(this)};var R1=mdb(yqe,'BoxLayoutProvider/lambda$2$Type',976);bcb(1365,1,{831:1},Ved);_.qg=function Wed(a,b){return Vyc(),!JD(b,160)||h2c((Y1c(),X1c,BD(a,160)),b)};var T1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1365);bcb(1366,1,qie,Xed);_.td=function Yed(a){Yyc(this.a,BD(a,146))};var U1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1366);bcb(1367,1,qie,Zed);_.td=function $ed(a){BD(a,94);Vyc()};var V1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1367);bcb(1371,1,qie,_ed);_.td=function afd(a){Zyc(this.a,BD(a,94))};var W1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1371);bcb(1369,1,Oie,bfd);_.Mb=function cfd(a){return $yc(this.a,this.b,BD(a,146))};var X1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1369);bcb(1368,1,Oie,dfd);_.Mb=function efd(a){return azc(this.a,this.b,BD(a,831))};var Y1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1368);bcb(1370,1,qie,ffd);_.td=function gfd(a){_yc(this.a,this.b,BD(a,146))};var Z1=mdb(yqe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1370);bcb(935,1,{},Hfd);_.Kb=function Ifd(a){return Gfd(a)};_.Fb=function Jfd(a){return this===a};var _1=mdb(yqe,'ElkUtil/lambda$0$Type',935);bcb(936,1,qie,Kfd);_.td=function Lfd(a){ufd(this.a,this.b,BD(a,79))};_.a=0;_.b=0;var a2=mdb(yqe,'ElkUtil/lambda$1$Type',936);bcb(937,1,qie,Mfd);_.td=function Nfd(a){vfd(this.a,this.b,BD(a,202))};_.a=0;_.b=0;var b2=mdb(yqe,'ElkUtil/lambda$2$Type',937);bcb(938,1,qie,Ofd);_.td=function Pfd(a){wfd(this.a,this.b,BD(a,137))};_.a=0;_.b=0;var c2=mdb(yqe,'ElkUtil/lambda$3$Type',938);bcb(939,1,qie,Qfd);_.td=function Rfd(a){xfd(this.a,BD(a,469))};var d2=mdb(yqe,'ElkUtil/lambda$4$Type',939);bcb(342,1,{35:1,342:1},Tfd);_.wd=function Ufd(a){return Sfd(this,BD(a,236))};_.Fb=function Vfd(a){var b;if(JD(a,342)){b=BD(a,342);return this.a==b.a}return false};_.Hb=function Wfd(){return QD(this.a)};_.Ib=function Xfd(){return this.a+' (exclusive)'};_.a=0;var e2=mdb(yqe,'ExclusiveBounds/ExclusiveLowerBound',342);bcb(1138,209,Mle,Zfd);_.Ze=function $fd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;Odd(b,'Fixed Layout',1);f=BD(hkd(a,(Y9c(),E8c)),218);l=0;m=0;for(s=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));s.e!=s.i.gc();){q=BD(Dyd(s),33);B=BD(hkd(q,(Zad(),Yad)),8);if(B){bld(q,B.a,B.b);if(BD(hkd(q,Tad),174).Hc((tdd(),pdd))){n=BD(hkd(q,Vad),8);n.a>0&&n.b>0&&Afd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new Fyd((!q.n&&(q.n=new cUd(D2,q,1,7)),q.n));j.e!=j.i.gc();){h=BD(Dyd(j),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new Fyd((!q.c&&(q.c=new cUd(F2,q,9,9)),q.c));v.e!=v.i.gc();){u=BD(Dyd(v),118);B=BD(hkd(u,Yad),8);!!B&&bld(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new Fyd((!u.n&&(u.n=new cUd(D2,u,1,7)),u.n));i.e!=i.i.gc();){h=BD(Dyd(i),137);B=BD(hkd(h,Yad),8);!!B&&bld(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(e);){c=BD(Rr(e),79);k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new Sr(ur($sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);if(Xod(jtd(c))!=a){k=Yfd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Aad(),wad)){for(r=new Fyd((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a));r.e!=r.i.gc();){q=BD(Dyd(r),33);for(d=new Sr(ur(_sd(q).a.Kc(),new Sq));Qr(d);){c=BD(Rr(d),79);g=pfd(c);g.b==0?jkd(c,Q8c,null):jkd(c,Q8c,g)}}}if(!Ccb(DD(hkd(a,(Zad(),Uad))))){t=BD(hkd(a,Wad),116);p=l+t.b+t.c;o=m+t.d+t.a;Afd(a,p,o,true,true)}Qdd(b)};var f2=mdb(yqe,'FixedLayoutProvider',1138);bcb(373,134,{3:1,414:1,373:1,94:1,134:1},_fd,agd);_.Jf=function dgd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=mfb(b,';,;');for(g=j,h=0,i=g.length;h<i;++h){f=g[h];d=mfb(f,'\\:');e=k4c(n4c(),d[0]);if(!e){throw vbb(new Wdb('Invalid option id: '+d[0]))}k=o5c(e,d[1]);if(k==null){throw vbb(new Wdb('Invalid option value: '+d[1]))}k==null?(!this.q&&(this.q=new Lqb),Thb(this.q,e)):(!this.q&&(this.q=new Lqb),Rhb(this.q,e,k))}}catch(a){a=ubb(a);if(JD(a,102)){c=a;throw vbb(new Xdb(c))}else throw vbb(a)}};_.Ib=function egd(){var a;a=GD(GAb(NAb((!this.q?(mmb(),mmb(),kmb):this.q).vc().Oc(),new fgd),Ayb(new pzb,new nzb,new Zyb,new _yb,OC(GC(xL,1),Kie,132,0,[]))));return a};var i2=mdb(yqe,'IndividualSpacings',373);bcb(971,1,{},fgd);_.Kb=function ggd(a){return cgd(BD(a,42))};var h2=mdb(yqe,'IndividualSpacings/lambda$0$Type',971);bcb(709,1,{},jgd);_.c=0;var j2=mdb(yqe,'InstancePool',709);bcb(1275,1,{},kgd);var l2=mdb(yqe,'LoggedGraph',1275);bcb(396,22,{3:1,35:1,22:1,396:1},qgd);var lgd,mgd,ngd,ogd;var k2=ndb(yqe,'LoggedGraph/Type',396,CI,sgd,rgd);var tgd;bcb(46,1,{20:1,46:1},vgd);_.Jc=function xgd(a){reb(this,a)};_.Fb=function wgd(a){var b,c,d;if(JD(a,46)){c=BD(a,46);b=this.a==null?c.a==null:pb(this.a,c.a);d=this.b==null?c.b==null:pb(this.b,c.b);return b&&d}else{return false}};_.Hb=function ygd(){var a,b,c,d,e,f;c=this.a==null?0:tb(this.a);a=c&aje;b=c&-65536;f=this.b==null?0:tb(this.b);d=f&aje;e=f&-65536;return a^e>>16&aje|b^d<<16};_.Kc=function zgd(){return new Bgd(this)};_.Ib=function Agd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+fcb(this.b)+')':this.b==null?'pair('+fcb(this.a)+',null)':'pair('+fcb(this.a)+','+fcb(this.b)+')'};var n2=mdb(yqe,'Pair',46);bcb(983,1,aie,Bgd);_.Nb=function Cgd(a){Rrb(this,a)};_.Ob=function Dgd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Egd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw vbb(new utb)};_.Qb=function Fgd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw vbb(new Ydb)};_.b=false;_.c=false;var m2=mdb(yqe,'Pair/1',983);bcb(448,1,{448:1},Ggd);_.Fb=function Hgd(a){return wtb(this.a,BD(a,448).a)&&wtb(this.c,BD(a,448).c)&&wtb(this.d,BD(a,448).d)&&wtb(this.b,BD(a,448).b)};_.Hb=function Igd(){return Hlb(OC(GC(SI,1),Uhe,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function Jgd(){return '('+this.a+She+this.c+She+this.d+She+this.b+')'};var o2=mdb(yqe,'Quadruple',448);bcb(1126,209,Mle,Mgd);_.Ze=function Ngd(a,b){var c,d,e,f,g;Odd(b,'Random Layout',1);if((!a.a&&(a.a=new cUd(E2,a,10,11)),a.a).i==0){Qdd(b);return}f=BD(hkd(a,(idd(),gdd)),19);!!f&&f.a!=0?(e=new Hub(f.a)):(e=new Gub);c=Gdb(ED(hkd(a,ddd)));g=Gdb(ED(hkd(a,hdd)));d=BD(hkd(a,edd),116);Lgd(a,e,c,g,d);Qdd(b)};var p2=mdb(yqe,'RandomLayoutProvider',1126);var Ogd;bcb(553,1,{});_.qf=function Sgd(){return new f7c(this.f.i,this.f.j)};_.We=function Tgd(a){if(Jsd(a,(Y9c(),s9c))){return hkd(this.f,Qgd)}return hkd(this.f,a)};_.rf=function Ugd(){return new f7c(this.f.g,this.f.f)};_.sf=function Vgd(){return this.g};_.Xe=function Wgd(a){return ikd(this.f,a)};_.tf=function Xgd(a){dld(this.f,a.a);eld(this.f,a.b)};_.uf=function Ygd(a){cld(this.f,a.a);ald(this.f,a.b)};_.vf=function Zgd(a){this.g=a};_.g=0;var Qgd;var q2=mdb(Use,'ElkGraphAdapters/AbstractElkGraphElementAdapter',553);bcb(554,1,{839:1},$gd);_.wf=function _gd(){var a,b;if(!this.b){this.b=Qu(Kkd(this.a).i);for(b=new Fyd(Kkd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),137);Ekb(this.b,new dhd(a))}}return this.b};_.b=null;var r2=mdb(Use,'ElkGraphAdapters/ElkEdgeAdapter',554);bcb(301,553,{},bhd);_.xf=function chd(){return ahd(this)};_.a=null;var s2=mdb(Use,'ElkGraphAdapters/ElkGraphAdapter',301);bcb(630,553,{181:1},dhd);var t2=mdb(Use,'ElkGraphAdapters/ElkLabelAdapter',630);bcb(629,553,{680:1},hhd);_.wf=function khd(){return ehd(this)};_.Af=function lhd(){var a;return a=BD(hkd(this.f,(Y9c(),S8c)),142),!a&&(a=new H_b),a};_.Cf=function nhd(){return fhd(this)};_.Ef=function phd(a){var b;b=new K_b(a);jkd(this.f,(Y9c(),S8c),b)};_.Ff=function qhd(a){jkd(this.f,(Y9c(),f9c),new r0b(a))};_.yf=function ihd(){return this.d};_.zf=function jhd(){var a,b;if(!this.a){this.a=new Rkb;for(b=new Sr(ur($sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function mhd(){var a,b;if(!this.c){this.c=new Rkb;for(b=new Sr(ur(_sd(BD(this.f,33)).a.Kc(),new Sq));Qr(b);){a=BD(Rr(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Df=function ohd(){return Vod(BD(this.f,33)).i!=0||Ccb(DD(BD(this.f,33).We((Y9c(),M8c))))};_.Gf=function rhd(){ghd(this,(Pgd(),Ogd))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var u2=mdb(Use,'ElkGraphAdapters/ElkNodeAdapter',629);bcb(1266,553,{838:1},thd);_.wf=function vhd(){return shd(this)};_.zf=function uhd(){var a,b;if(!this.a){this.a=Pu(BD(this.f,118).xg().i);for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.a,new $gd(a))}}return this.a};_.Bf=function whd(){var a,b;if(!this.c){this.c=Pu(BD(this.f,118).yg().i);for(b=new Fyd(BD(this.f,118).yg());b.e!=b.i.gc();){a=BD(Dyd(b),79);Ekb(this.c,new $gd(a))}}return this.c};_.Hf=function xhd(){return BD(BD(this.f,118).We((Y9c(),A9c)),61)};_.If=function yhd(){var a,b,c,d,e,f,g,h;d=mpd(BD(this.f,118));for(c=new Fyd(BD(this.f,118).yg());c.e!=c.i.gc();){a=BD(Dyd(c),79);for(h=new Fyd((!a.c&&(a.c=new y5d(z2,a,5,8)),a.c));h.e!=h.i.gc();){g=BD(Dyd(h),82);if(ntd(atd(g),d)){return true}else if(atd(g)==d&&Ccb(DD(hkd(a,(Y9c(),N8c))))){return true}}}for(b=new Fyd(BD(this.f,118).xg());b.e!=b.i.gc();){a=BD(Dyd(b),79);for(f=new Fyd((!a.b&&(a.b=new y5d(z2,a,4,7)),a.b));f.e!=f.i.gc();){e=BD(Dyd(f),82);if(ntd(atd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var v2=mdb(Use,'ElkGraphAdapters/ElkPortAdapter',1266);bcb(1267,1,Dke,Ahd);_.ue=function Bhd(a,b){return zhd(BD(a,118),BD(b,118))};_.Fb=function Chd(a){return this===a};_.ve=function Dhd(){return new tpb(this)};var w2=mdb(Use,'ElkGraphAdapters/PortComparator',1267);var m5=odb(Vse,'EObject');var x2=odb(Wse,Xse);var y2=odb(Wse,Yse);var C2=odb(Wse,Zse);var G2=odb(Wse,'ElkShape');var z2=odb(Wse,$se);var B2=odb(Wse,_se);var A2=odb(Wse,ate);var k5=odb(Vse,bte);var i5=odb(Vse,'EFactory');var Ehd;var l5=odb(Vse,cte);var o5=odb(Vse,'EPackage');var Ghd;var Ihd,Jhd,Khd,Lhd,Mhd,Nhd,Ohd,Phd,Qhd,Rhd,Shd;var D2=odb(Wse,dte);var E2=odb(Wse,ete);var F2=odb(Wse,fte);bcb(90,1,gte);_.Jg=function Vhd(){this.Kg();return null};_.Kg=function Whd(){return null};_.Lg=function Xhd(){return this.Kg(),false};_.Mg=function Yhd(){return false};_.Ng=function Zhd(a){Uhd(this,a)};var b4=mdb(hte,'BasicNotifierImpl',90);bcb(97,90,pte);_.nh=function fjd(){return oid(this)};_.Og=function Fid(a,b){return a};_.Pg=function Gid(){throw vbb(new bgb)};_.Qg=function Hid(a){var b;return b=zUd(BD(XKd(this.Tg(),this.Vg()),18)),this.eh().ih(this,b.n,b.f,a)};_.Rg=function Iid(a,b){throw vbb(new bgb)};_.Sg=function Jid(a,b,c){return _hd(this,a,b,c)};_.Tg=function Kid(){var a;if(this.Pg()){a=this.Pg().ck();if(a){return a}}return this.zh()};_.Ug=function Lid(){return aid(this)};_.Vg=function Mid(){throw vbb(new bgb)};_.Wg=function Oid(){var a,b;b=this.ph().dk();!b&&this.Pg().ik(b=(nRd(),a=pNd(TKd(this.Tg())),a==null?mRd:new qRd(this,a)));return b};_.Xg=function Qid(a,b){return a};_.Yg=function Rid(a){var b;b=a.Gj();return !b?bLd(this.Tg(),a):a.aj()};_.Zg=function Sid(){var a;a=this.Pg();return !a?null:a.fk()};_.$g=function Tid(){return !this.Pg()?null:this.Pg().ck()};_._g=function Uid(a,b,c){return fid(this,a,b,c)};_.ah=function Vid(a){return gid(this,a)};_.bh=function Wid(a,b){return hid(this,a,b)};_.dh=function Xid(){var a;a=this.Pg();return !!a&&a.gk()};_.eh=function Yid(){throw vbb(new bgb)};_.fh=function Zid(){return jid(this)};_.gh=function $id(a,b,c,d){return kid(this,a,b,d)};_.hh=function _id(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Qj(this,this.yh(),b-this.Ah(),a,c)};_.ih=function ajd(a,b,c,d){return lid(this,a,b,d)};_.jh=function bjd(a,b,c){var d;return d=BD(XKd(this.Tg(),b),66),d.Nj().Rj(this,this.yh(),b-this.Ah(),a,c)};_.kh=function cjd(){return !!this.Pg()&&!!this.Pg().ek()};_.lh=function djd(a){return mid(this,a)};_.mh=function ejd(a){return nid(this,a)};_.oh=function gjd(a){return rid(this,a)};_.ph=function hjd(){throw vbb(new bgb)};_.qh=function ijd(){return !this.Pg()?null:this.Pg().ek()};_.rh=function jjd(){return jid(this)};_.sh=function kjd(a,b){yid(this,a,b)};_.th=function ljd(a){this.ph().hk(a)};_.uh=function mjd(a){this.ph().kk(a)};_.vh=function njd(a){this.ph().jk(a)};_.wh=function ojd(a,b){var c,d,e,f;f=this.Zg();if(!!f&&!!a){b=Txd(f.Vk(),this,b);f.Zk(this)}d=this.eh();if(d){if((Nid(this,this.eh(),this.Vg()).Bb&Tje)!=0){e=d.fh();!!e&&(!a?e.Yk(this):!f&&e.Zk(this))}else{b=(c=this.Vg(),c>=0?this.Qg(b):this.eh().ih(this,-1-c,null,b));b=this.Sg(null,-1,b)}}this.uh(a);return b};_.xh=function pjd(a){var b,c,d,e,f,g,h,i;c=this.Tg();f=bLd(c,a);b=this.Ah();if(f>=b){return BD(a,66).Nj().Uj(this,this.yh(),f-b)}else if(f<=-1){g=e1d((O6d(),M6d),c,a);if(g){Q6d();BD(g,66).Oj()||(g=_1d(q1d(M6d,g)));e=(d=this.Yg(g),BD(d>=0?this._g(d,true,true):sid(this,g,true),153));i=g.Zj();if(i>1||i==-1){return BD(BD(e,215).hl(a,false),76)}}else{throw vbb(new Wdb(ite+a.ne()+lte))}}else if(a.$j()){return d=this.Yg(a),BD(d>=0?this._g(d,false,true):sid(this,a,false),76)}h=new nGd(this,a);return h};_.yh=function qjd(){return Aid(this)};_.zh=function rjd(){return (NFd(),MFd).S};_.Ah=function sjd(){return aLd(this.zh())};_.Bh=function tjd(a){Cid(this,a)};_.Ib=function ujd(){return Eid(this)};var B5=mdb(qte,'BasicEObjectImpl',97);var zFd;bcb(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1});_.Ch=function Djd(a){var b;b=xjd(this);return b[a]};_.Dh=function Ejd(a,b){var c;c=xjd(this);NC(c,a,b)};_.Eh=function Fjd(a){var b;b=xjd(this);NC(b,a,null)};_.Jg=function Gjd(){return BD(Ajd(this,4),126)};_.Kg=function Hjd(){throw vbb(new bgb)};_.Lg=function Ijd(){return (this.Db&4)!=0};_.Pg=function Jjd(){throw vbb(new bgb)};_.Fh=function Kjd(a){Cjd(this,2,a)};_.Rg=function Ljd(a,b){this.Db=b<<16|this.Db&255;this.Fh(a)};_.Tg=function Mjd(){return wjd(this)};_.Vg=function Njd(){return this.Db>>16};_.Wg=function Ojd(){var a,b;return nRd(),b=pNd(TKd((a=BD(Ajd(this,16),26),!a?this.zh():a))),b==null?(null,mRd):new qRd(this,b)};_.Mg=function Pjd(){return (this.Db&1)==0};_.Zg=function Qjd(){return BD(Ajd(this,128),1935)};_.$g=function Rjd(){return BD(Ajd(this,16),26)};_.dh=function Sjd(){return (this.Db&32)!=0};_.eh=function Tjd(){return BD(Ajd(this,2),49)};_.kh=function Ujd(){return (this.Db&64)!=0};_.ph=function Vjd(){throw vbb(new bgb)};_.qh=function Wjd(){return BD(Ajd(this,64),281)};_.th=function Xjd(a){Cjd(this,16,a)};_.uh=function Yjd(a){Cjd(this,128,a)};_.vh=function Zjd(a){Cjd(this,64,a)};_.yh=function $jd(){return yjd(this)};_.Db=0;var s8=mdb(qte,'MinimalEObjectImpl',114);bcb(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_.Fh=function _jd(a){this.Cb=a};_.eh=function akd(){return this.Cb};var r8=mdb(qte,'MinimalEObjectImpl/Container',115);bcb(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function kkd(a,b,c){return bkd(this,a,b,c)};_.jh=function lkd(a,b,c){return ckd(this,a,b,c)};_.lh=function mkd(a){return dkd(this,a)};_.sh=function nkd(a,b){ekd(this,a,b)};_.zh=function okd(){return Thd(),Shd};_.Bh=function pkd(a){fkd(this,a)};_.Ve=function qkd(){return gkd(this)};_.We=function rkd(a){return hkd(this,a)};_.Xe=function skd(a){return ikd(this,a)};_.Ye=function tkd(a,b){return jkd(this,a,b)};var H2=mdb(rte,'EMapPropertyHolderImpl',1985);bcb(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},xkd);_._g=function ykd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return fid(this,a,b,c)};_.lh=function zkd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return mid(this,a)};_.sh=function Akd(a,b){switch(a){case 0:vkd(this,Edb(ED(b)));return;case 1:wkd(this,Edb(ED(b)));return;}yid(this,a,b)};_.zh=function Bkd(){return Thd(),Ihd};_.Bh=function Ckd(a){switch(a){case 0:vkd(this,0);return;case 1:wkd(this,0);return;}Cid(this,a)};_.Ib=function Dkd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (x: ';Bfb(a,this.a);a.a+=', y: ';Bfb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var I2=mdb(rte,'ElkBendPointImpl',567);bcb(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Nkd(a,b,c){return Ekd(this,a,b,c)};_.hh=function Okd(a,b,c){return Fkd(this,a,b,c)};_.jh=function Pkd(a,b,c){return Gkd(this,a,b,c)};_.lh=function Qkd(a){return Hkd(this,a)};_.sh=function Rkd(a,b){Ikd(this,a,b)};_.zh=function Skd(){return Thd(),Mhd};_.Bh=function Tkd(a){Jkd(this,a)};_.zg=function Ukd(){return this.k};_.Ag=function Vkd(){return Kkd(this)};_.Ib=function Wkd(){return Mkd(this)};_.k=null;var M2=mdb(rte,'ElkGraphElementImpl',723);bcb(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function gld(a,b,c){return Xkd(this,a,b,c)};_.lh=function hld(a){return Ykd(this,a)};_.sh=function ild(a,b){Zkd(this,a,b)};_.zh=function jld(){return Thd(),Rhd};_.Bh=function kld(a){$kd(this,a)};_.Bg=function lld(){return this.f};_.Cg=function mld(){return this.g};_.Dg=function nld(){return this.i};_.Eg=function old(){return this.j};_.Fg=function pld(a,b){_kd(this,a,b)};_.Gg=function qld(a,b){bld(this,a,b)};_.Hg=function rld(a){dld(this,a)};_.Ig=function sld(a){eld(this,a)};_.Ib=function tld(){return fld(this)};_.f=0;_.g=0;_.i=0;_.j=0;var T2=mdb(rte,'ElkShapeImpl',724);bcb(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1});_._g=function Bld(a,b,c){return uld(this,a,b,c)};_.hh=function Cld(a,b,c){return vld(this,a,b,c)};_.jh=function Dld(a,b,c){return wld(this,a,b,c)};_.lh=function Eld(a){return xld(this,a)};_.sh=function Fld(a,b){yld(this,a,b)};_.zh=function Gld(){return Thd(),Jhd};_.Bh=function Hld(a){zld(this,a)};_.xg=function Ild(){return !this.d&&(this.d=new y5d(B2,this,8,5)),this.d};_.yg=function Jld(){return !this.e&&(this.e=new y5d(B2,this,7,4)),this.e};var J2=mdb(rte,'ElkConnectableShapeImpl',725);bcb(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Tld);_.Qg=function Uld(a){return Lld(this,a)};_._g=function Vld(a,b,c){switch(a){case 3:return Mld(this);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b;case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),this.c;case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),this.a;case 7:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1)?false:true;case 8:return Bcb(),Pld(this)?true:false;case 9:return Bcb(),Qld(this)?true:false;case 10:return Bcb(),!this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0)?true:false;}return Ekd(this,a,b,c)};_.hh=function Wld(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Lld(this,c):this.Cb.ih(this,-1-d,null,c)));return Kld(this,BD(a,33),c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Sxd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Sxd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Sxd(this.a,a,c);}return Fkd(this,a,b,c)};_.jh=function Xld(a,b,c){switch(b){case 3:return Kld(this,null,c);case 4:return !this.b&&(this.b=new y5d(z2,this,4,7)),Txd(this.b,a,c);case 5:return !this.c&&(this.c=new y5d(z2,this,5,8)),Txd(this.c,a,c);case 6:return !this.a&&(this.a=new cUd(A2,this,6,6)),Txd(this.a,a,c);}return Gkd(this,a,b,c)};_.lh=function Yld(a){switch(a){case 3:return !!Mld(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new y5d(z2,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i<=1));case 8:return Pld(this);case 9:return Qld(this);case 10:return !this.b&&(this.b=new y5d(z2,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new y5d(z2,this,5,8)),this.c.i!=0);}return Hkd(this,a)};_.sh=function Zld(a,b){switch(a){case 3:Rld(this,BD(b,33));return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);!this.b&&(this.b=new y5d(z2,this,4,7));ytd(this.b,BD(b,14));return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);!this.c&&(this.c=new y5d(z2,this,5,8));ytd(this.c,BD(b,14));return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);!this.a&&(this.a=new cUd(A2,this,6,6));ytd(this.a,BD(b,14));return;}Ikd(this,a,b)};_.zh=function $ld(){return Thd(),Khd};_.Bh=function _ld(a){switch(a){case 3:Rld(this,null);return;case 4:!this.b&&(this.b=new y5d(z2,this,4,7));Uxd(this.b);return;case 5:!this.c&&(this.c=new y5d(z2,this,5,8));Uxd(this.c);return;case 6:!this.a&&(this.a=new cUd(A2,this,6,6));Uxd(this.a);return;}Jkd(this,a)};_.Ib=function amd(){return Sld(this)};var K2=mdb(rte,'ElkEdgeImpl',352);bcb(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},rmd);_.Qg=function smd(a){return cmd(this,a)};_._g=function tmd(a,b,c){switch(a){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 xMd(y2,this,5)),this.a;case 6:return fmd(this);case 7:if(b)return emd(this);return this.i;case 8:if(b)return dmd(this);return this.f;case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),this.g;case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),this.e;case 11:return this.d;}return bkd(this,a,b,c)};_.hh=function umd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?cmd(this,c):this.Cb.ih(this,-1-e,null,c)));return bmd(this,BD(a,79),c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Sxd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Sxd(this.e,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(Thd(),Lhd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((Thd(),Lhd)),a,c)};_.jh=function vmd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new xMd(y2,this,5)),Txd(this.a,a,c);case 6:return bmd(this,null,c);case 9:return !this.g&&(this.g=new y5d(A2,this,9,10)),Txd(this.g,a,c);case 10:return !this.e&&(this.e=new y5d(A2,this,10,9)),Txd(this.e,a,c);}return ckd(this,a,b,c)};_.lh=function wmd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!fmd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return dkd(this,a)};_.sh=function xmd(a,b){switch(a){case 1:omd(this,Edb(ED(b)));return;case 2:pmd(this,Edb(ED(b)));return;case 3:hmd(this,Edb(ED(b)));return;case 4:imd(this,Edb(ED(b)));return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);!this.a&&(this.a=new xMd(y2,this,5));ytd(this.a,BD(b,14));return;case 6:mmd(this,BD(b,79));return;case 7:lmd(this,BD(b,82));return;case 8:kmd(this,BD(b,82));return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);!this.g&&(this.g=new y5d(A2,this,9,10));ytd(this.g,BD(b,14));return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);!this.e&&(this.e=new y5d(A2,this,10,9));ytd(this.e,BD(b,14));return;case 11:jmd(this,GD(b));return;}ekd(this,a,b)};_.zh=function ymd(){return Thd(),Lhd};_.Bh=function zmd(a){switch(a){case 1:omd(this,0);return;case 2:pmd(this,0);return;case 3:hmd(this,0);return;case 4:imd(this,0);return;case 5:!this.a&&(this.a=new xMd(y2,this,5));Uxd(this.a);return;case 6:mmd(this,null);return;case 7:lmd(this,null);return;case 8:kmd(this,null);return;case 9:!this.g&&(this.g=new y5d(A2,this,9,10));Uxd(this.g);return;case 10:!this.e&&(this.e=new y5d(A2,this,10,9));Uxd(this.e);return;case 11:jmd(this,null);return;}fkd(this,a)};_.Ib=function Amd(){return qmd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var L2=mdb(rte,'ElkEdgeSectionImpl',439);bcb(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_._g=function Emd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function Fmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function Gmd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c)}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function Hmd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.oh=function Imd(a){return Bmd(this,a)};_.sh=function Jmd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.uh=function Kmd(a){Cjd(this,128,a)};_.zh=function Lmd(){return jGd(),ZFd};_.Bh=function Mmd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function Nmd(){this.Bb|=1};_.Hh=function Omd(a){return Dmd(this,a)};_.Bb=0;var f6=mdb(qte,'EModelElementImpl',150);bcb(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},$md);_.Ih=function _md(a,b){return Vmd(this,a,b)};_.Jh=function and(a){var b,c,d,e,f;if(this.a!=bKd(a)||(a.Bb&256)!=0){throw vbb(new Wdb(xte+a.zb+ute))}for(d=_Kd(a);VKd(d.a).i!=0;){c=BD(nOd(d,0,(b=BD(qud(VKd(d.a),0),87),f=b.c,JD(f,88)?BD(f,26):(jGd(),_Fd))),26);if(dKd(c)){e=bKd(c).Nh().Jh(c);BD(e,49).th(a);return e}d=_Kd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new lHd(a):new _Gd(a)};_.Kh=function bnd(a,b){return Wmd(this,a,b)};_._g=function cnd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.a;}return bid(this,a-aLd((jGd(),WFd)),XKd((d=BD(Ajd(this,16),26),!d?WFd:d),a),b,c)};_.hh=function dnd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 1:!!this.a&&(c=BD(this.a,49).ih(this,4,o5,c));return Tmd(this,BD(a,235),c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Qj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.jh=function end(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 1:return Tmd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),WFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),WFd)),a,c)};_.lh=function fnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return cid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};_.sh=function gnd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:Ymd(this,BD(b,235));return;}did(this,a-aLd((jGd(),WFd)),XKd((c=BD(Ajd(this,16),26),!c?WFd:c),a),b)};_.zh=function hnd(){return jGd(),WFd};_.Bh=function ind(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:Ymd(this,null);return;}eid(this,a-aLd((jGd(),WFd)),XKd((b=BD(Ajd(this,16),26),!b?WFd:b),a))};var Pmd,Qmd,Rmd;var d6=mdb(qte,'EFactoryImpl',704);bcb(zte,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},knd);_.Ih=function lnd(a,b){switch(a.yj()){case 12:return BD(b,146).tg();case 13:return fcb(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function mnd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=bKd(a),b?HLd(b.Mh(),a):-1)),a.G){case 4:return f=new Jod,f;case 6:return g=new apd,g;case 7:return h=new ppd,h;case 8:return d=new Tld,d;case 9:return c=new xkd,c;case 10:return e=new rmd,e;case 11:return i=new Bpd,i;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function nnd(a,b){switch(a.yj()){case 13:case 12:return null;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var N2=mdb(rte,'ElkGraphFactoryImpl',zte);bcb(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1});_.Wg=function rnd(){var a,b;b=(a=BD(Ajd(this,16),26),pNd(TKd(!a?this.zh():a)));return b==null?(nRd(),nRd(),mRd):new GRd(this,b)};_._g=function snd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.ne();}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function tnd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function und(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vnd(){return jGd(),$Fd};_.Bh=function wnd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.ne=function xnd(){return this.zb};_.Lh=function ynd(a){pnd(this,a)};_.Ib=function znd(){return qnd(this)};_.zb=null;var j6=mdb(qte,'ENamedElementImpl',438);bcb(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},eod);_.Qg=function god(a){return Snd(this,a)};_._g=function hod(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,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 jUd(this,d5,this)),this.rb;case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?BD(this.Cb,235):null;return Ind(this);}return bid(this,a-aLd((jGd(),cGd)),XKd((d=BD(Ajd(this,16),26),!d?cGd:d),a),b,c)};_.hh=function iod(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 4:!!this.sb&&(c=BD(this.sb,49).ih(this,1,i5,c));return Jnd(this,BD(a,471),c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Sxd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Sxd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Snd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,7,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.jh=function jod(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 4:return Jnd(this,null,c);case 5:return !this.rb&&(this.rb=new jUd(this,d5,this)),Txd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new gUd(o5,this,6,7)),Txd(this.vb,a,c);case 7:return _hd(this,null,7,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),cGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),cGd)),a,c)};_.lh=function kod(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!Ind(this);}return cid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.oh=function lod(a){var b;b=Und(this,a);return b?b:Bmd(this,a)};_.sh=function mod(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:dod(this,GD(b));return;case 3:cod(this,GD(b));return;case 4:bod(this,BD(b,471));return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);!this.rb&&(this.rb=new jUd(this,d5,this));ytd(this.rb,BD(b,14));return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);!this.vb&&(this.vb=new gUd(o5,this,6,7));ytd(this.vb,BD(b,14));return;}did(this,a-aLd((jGd(),cGd)),XKd((c=BD(Ajd(this,16),26),!c?cGd:c),a),b)};_.vh=function nod(a){var b,c;if(!!a&&!!this.rb){for(c=new Fyd(this.rb);c.e!=c.i.gc();){b=Dyd(c);JD(b,351)&&(BD(b,351).w=null)}}Cjd(this,64,a)};_.zh=function ood(){return jGd(),cGd};_.Bh=function pod(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:dod(this,null);return;case 3:cod(this,null);return;case 4:bod(this,null);return;case 5:!this.rb&&(this.rb=new jUd(this,d5,this));Uxd(this.rb);return;case 6:!this.vb&&(this.vb=new gUd(o5,this,6,7));Uxd(this.vb);return;}eid(this,a-aLd((jGd(),cGd)),XKd((b=BD(Ajd(this,16),26),!b?cGd:b),a))};_.Gh=function qod(){Tnd(this)};_.Mh=function rod(){return !this.rb&&(this.rb=new jUd(this,d5,this)),this.rb};_.Nh=function sod(){return this.sb};_.Oh=function tod(){return this.ub};_.Ph=function uod(){return this.xb};_.Qh=function vod(){return this.yb};_.Rh=function wod(a){this.ub=a};_.Ib=function xod(){var a;if((this.Db&64)!=0)return qnd(this);a=new Jfb(qnd(this));a.a+=' (nsURI: ';Efb(a,this.yb);a.a+=', nsPrefix: ';Efb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var And;var t6=mdb(qte,'EPackageImpl',179);bcb(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},Bod);_.q=false;_.r=false;var yod=false;var O2=mdb(rte,'ElkGraphPackageImpl',555);bcb(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Jod);_.Qg=function Kod(a){return Eod(this,a)};_._g=function Lod(a,b,c){switch(a){case 7:return Fod(this);case 8:return this.a;}return Xkd(this,a,b,c)};_.hh=function Mod(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Eod(this,c):this.Cb.ih(this,-1-d,null,c)));return Dod(this,BD(a,160),c);}return Fkd(this,a,b,c)};_.jh=function Nod(a,b,c){if(b==7){return Dod(this,null,c)}return Gkd(this,a,b,c)};_.lh=function Ood(a){switch(a){case 7:return !!Fod(this);case 8:return !dfb('',this.a);}return Ykd(this,a)};_.sh=function Pod(a,b){switch(a){case 7:God(this,BD(b,160));return;case 8:Hod(this,GD(b));return;}Zkd(this,a,b)};_.zh=function Qod(){return Thd(),Nhd};_.Bh=function Rod(a){switch(a){case 7:God(this,null);return;case 8:Hod(this,'');return;}$kd(this,a)};_.Ib=function Sod(){return Iod(this)};_.a='';var P2=mdb(rte,'ElkLabelImpl',354);bcb(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},apd);_.Qg=function bpd(a){return Uod(this,a)};_._g=function cpd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),this.c;case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a;case 11:return Xod(this);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),this.b;case 13:return Bcb(),!this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0?true:false;}return uld(this,a,b,c)};_.hh=function dpd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Sxd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Sxd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?Uod(this,c):this.Cb.ih(this,-1-d,null,c)));return Tod(this,BD(a,33),c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Sxd(this.b,a,c);}return vld(this,a,b,c)};_.jh=function epd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new cUd(F2,this,9,9)),Txd(this.c,a,c);case 10:return !this.a&&(this.a=new cUd(E2,this,10,11)),Txd(this.a,a,c);case 11:return Tod(this,null,c);case 12:return !this.b&&(this.b=new cUd(B2,this,12,3)),Txd(this.b,a,c);}return wld(this,a,b,c)};_.lh=function fpd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!Xod(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new cUd(E2,this,10,11)),this.a.i>0;}return xld(this,a)};_.sh=function gpd(a,b){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);!this.c&&(this.c=new cUd(F2,this,9,9));ytd(this.c,BD(b,14));return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);!this.a&&(this.a=new cUd(E2,this,10,11));ytd(this.a,BD(b,14));return;case 11:$od(this,BD(b,33));return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);!this.b&&(this.b=new cUd(B2,this,12,3));ytd(this.b,BD(b,14));return;}yld(this,a,b)};_.zh=function hpd(){return Thd(),Ohd};_.Bh=function ipd(a){switch(a){case 9:!this.c&&(this.c=new cUd(F2,this,9,9));Uxd(this.c);return;case 10:!this.a&&(this.a=new cUd(E2,this,10,11));Uxd(this.a);return;case 11:$od(this,null);return;case 12:!this.b&&(this.b=new cUd(B2,this,12,3));Uxd(this.b);return;}zld(this,a)};_.Ib=function jpd(){return _od(this)};var Q2=mdb(rte,'ElkNodeImpl',239);bcb(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ppd);_.Qg=function qpd(a){return lpd(this,a)};_._g=function rpd(a,b,c){if(a==9){return mpd(this)}return uld(this,a,b,c)};_.hh=function spd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?lpd(this,c):this.Cb.ih(this,-1-d,null,c)));return kpd(this,BD(a,33),c);}return vld(this,a,b,c)};_.jh=function tpd(a,b,c){if(b==9){return kpd(this,null,c)}return wld(this,a,b,c)};_.lh=function upd(a){if(a==9){return !!mpd(this)}return xld(this,a)};_.sh=function vpd(a,b){switch(a){case 9:npd(this,BD(b,33));return;}yld(this,a,b)};_.zh=function wpd(){return Thd(),Phd};_.Bh=function xpd(a){switch(a){case 9:npd(this,null);return;}zld(this,a)};_.Ib=function ypd(){return opd(this)};var R2=mdb(rte,'ElkPortImpl',186);var J4=odb(Tte,'BasicEMap/Entry');bcb(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},Bpd);_.Fb=function Hpd(a){return this===a};_.cd=function Jpd(){return this.b};_.Hb=function Lpd(){return FCb(this)};_.Uh=function Npd(a){zpd(this,BD(a,146))};_._g=function Cpd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return fid(this,a,b,c)};_.lh=function Dpd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return mid(this,a)};_.sh=function Epd(a,b){switch(a){case 0:zpd(this,BD(b,146));return;case 1:Apd(this,b);return;}yid(this,a,b)};_.zh=function Fpd(){return Thd(),Qhd};_.Bh=function Gpd(a){switch(a){case 0:zpd(this,null);return;case 1:Apd(this,null);return;}Cid(this,a)};_.Sh=function Ipd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.dd=function Kpd(){return this.c};_.Th=function Mpd(a){this.a=a};_.ed=function Opd(a){var b;b=this.c;Apd(this,a);return b};_.Ib=function Ppd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Ufb;Qfb(Qfb(Qfb(a,this.b?this.b.tg():Xhe),gne),xfb(this.c));return a.a};_.a=-1;_.c=null;var S2=mdb(rte,'ElkPropertyToValueMapEntryImpl',1092);bcb(984,1,{},bqd);var U2=mdb(Wte,'JsonAdapter',984);bcb(210,60,Tie,cqd);var V2=mdb(Wte,'JsonImportException',210);bcb(857,1,{},ird);var J3=mdb(Wte,'JsonImporter',857);bcb(891,1,{},jrd);var W2=mdb(Wte,'JsonImporter/lambda$0$Type',891);bcb(892,1,{},krd);var X2=mdb(Wte,'JsonImporter/lambda$1$Type',892);bcb(900,1,{},lrd);var Y2=mdb(Wte,'JsonImporter/lambda$10$Type',900);bcb(902,1,{},mrd);var Z2=mdb(Wte,'JsonImporter/lambda$11$Type',902);bcb(903,1,{},nrd);var $2=mdb(Wte,'JsonImporter/lambda$12$Type',903);bcb(909,1,{},ord);var _2=mdb(Wte,'JsonImporter/lambda$13$Type',909);bcb(908,1,{},prd);var a3=mdb(Wte,'JsonImporter/lambda$14$Type',908);bcb(904,1,{},qrd);var b3=mdb(Wte,'JsonImporter/lambda$15$Type',904);bcb(905,1,{},rrd);var c3=mdb(Wte,'JsonImporter/lambda$16$Type',905);bcb(906,1,{},srd);var d3=mdb(Wte,'JsonImporter/lambda$17$Type',906);bcb(907,1,{},trd);var e3=mdb(Wte,'JsonImporter/lambda$18$Type',907);bcb(912,1,{},urd);var f3=mdb(Wte,'JsonImporter/lambda$19$Type',912);bcb(893,1,{},vrd);var g3=mdb(Wte,'JsonImporter/lambda$2$Type',893);bcb(910,1,{},wrd);var h3=mdb(Wte,'JsonImporter/lambda$20$Type',910);bcb(911,1,{},xrd);var i3=mdb(Wte,'JsonImporter/lambda$21$Type',911);bcb(915,1,{},yrd);var j3=mdb(Wte,'JsonImporter/lambda$22$Type',915);bcb(913,1,{},zrd);var k3=mdb(Wte,'JsonImporter/lambda$23$Type',913);bcb(914,1,{},Ard);var l3=mdb(Wte,'JsonImporter/lambda$24$Type',914);bcb(917,1,{},Brd);var m3=mdb(Wte,'JsonImporter/lambda$25$Type',917);bcb(916,1,{},Crd);var n3=mdb(Wte,'JsonImporter/lambda$26$Type',916);bcb(918,1,qie,Drd);_.td=function Erd(a){Bqd(this.b,this.a,GD(a))};var o3=mdb(Wte,'JsonImporter/lambda$27$Type',918);bcb(919,1,qie,Frd);_.td=function Grd(a){Cqd(this.b,this.a,GD(a))};var p3=mdb(Wte,'JsonImporter/lambda$28$Type',919);bcb(920,1,{},Hrd);var q3=mdb(Wte,'JsonImporter/lambda$29$Type',920);bcb(896,1,{},Ird);var r3=mdb(Wte,'JsonImporter/lambda$3$Type',896);bcb(921,1,{},Jrd);var s3=mdb(Wte,'JsonImporter/lambda$30$Type',921);bcb(922,1,{},Krd);var t3=mdb(Wte,'JsonImporter/lambda$31$Type',922);bcb(923,1,{},Lrd);var u3=mdb(Wte,'JsonImporter/lambda$32$Type',923);bcb(924,1,{},Mrd);var v3=mdb(Wte,'JsonImporter/lambda$33$Type',924);bcb(925,1,{},Nrd);var w3=mdb(Wte,'JsonImporter/lambda$34$Type',925);bcb(859,1,{},Prd);var x3=mdb(Wte,'JsonImporter/lambda$35$Type',859);bcb(929,1,{},Rrd);var y3=mdb(Wte,'JsonImporter/lambda$36$Type',929);bcb(926,1,qie,Srd);_.td=function Trd(a){Lqd(this.a,BD(a,469))};var z3=mdb(Wte,'JsonImporter/lambda$37$Type',926);bcb(927,1,qie,Urd);_.td=function Vrd(a){Mqd(this.a,this.b,BD(a,202))};var A3=mdb(Wte,'JsonImporter/lambda$38$Type',927);bcb(928,1,qie,Wrd);_.td=function Xrd(a){Nqd(this.a,this.b,BD(a,202))};var B3=mdb(Wte,'JsonImporter/lambda$39$Type',928);bcb(894,1,{},Yrd);var C3=mdb(Wte,'JsonImporter/lambda$4$Type',894);bcb(930,1,qie,Zrd);_.td=function $rd(a){Oqd(this.a,BD(a,8))};var D3=mdb(Wte,'JsonImporter/lambda$40$Type',930);bcb(895,1,{},_rd);var E3=mdb(Wte,'JsonImporter/lambda$5$Type',895);bcb(899,1,{},asd);var F3=mdb(Wte,'JsonImporter/lambda$6$Type',899);bcb(897,1,{},bsd);var G3=mdb(Wte,'JsonImporter/lambda$7$Type',897);bcb(898,1,{},csd);var H3=mdb(Wte,'JsonImporter/lambda$8$Type',898);bcb(901,1,{},dsd);var I3=mdb(Wte,'JsonImporter/lambda$9$Type',901);bcb(948,1,qie,msd);_.td=function nsd(a){Qpd(this.a,new yC(GD(a)))};var K3=mdb(Wte,'JsonMetaDataConverter/lambda$0$Type',948);bcb(949,1,qie,osd);_.td=function psd(a){isd(this.a,BD(a,237))};var L3=mdb(Wte,'JsonMetaDataConverter/lambda$1$Type',949);bcb(950,1,qie,qsd);_.td=function rsd(a){jsd(this.a,BD(a,149))};var M3=mdb(Wte,'JsonMetaDataConverter/lambda$2$Type',950);bcb(951,1,qie,ssd);_.td=function tsd(a){ksd(this.a,BD(a,175))};var N3=mdb(Wte,'JsonMetaDataConverter/lambda$3$Type',951);bcb(237,22,{3:1,35:1,22:1,237:1},Dsd);var usd,vsd,wsd,xsd,ysd,zsd,Asd,Bsd;var O3=ndb(Hle,'GraphFeature',237,CI,Fsd,Esd);var Gsd;bcb(13,1,{35:1,146:1},Lsd,Msd,Nsd,Osd);_.wd=function Psd(a){return Isd(this,BD(a,146))};_.Fb=function Qsd(a){return Jsd(this,a)};_.wg=function Rsd(){return Ksd(this)};_.tg=function Ssd(){return this.b};_.Hb=function Tsd(){return LCb(this.b)};_.Ib=function Usd(){return this.b};var T3=mdb(Hle,'Property',13);bcb(818,1,Dke,Wsd);_.ue=function Xsd(a,b){return Vsd(this,BD(a,94),BD(b,94))};_.Fb=function Ysd(a){return this===a};_.ve=function Zsd(){return new tpb(this)};var S3=mdb(Hle,'PropertyHolderComparator',818);bcb(695,1,aie,qtd);_.Nb=function rtd(a){Rrb(this,a)};_.Pb=function ttd(){return ptd(this)};_.Qb=function utd(){Srb()};_.Ob=function std(){return !!this.a};var U3=mdb(jue,'ElkGraphUtil/AncestorIterator',695);var T4=odb(Tte,'EList');bcb(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1});_.Vc=function Jtd(a,b){vtd(this,a,b)};_.Fc=function Ktd(a){return wtd(this,a)};_.Wc=function Ltd(a,b){return xtd(this,a,b)};_.Gc=function Mtd(a){return ytd(this,a)};_.Zh=function Ntd(){return new $yd(this)};_.$h=function Otd(){return new bzd(this)};_._h=function Ptd(a){return ztd(this,a)};_.ai=function Qtd(){return true};_.bi=function Rtd(a,b){};_.ci=function Std(){};_.di=function Ttd(a,b){Atd(this,a,b)};_.ei=function Utd(a,b,c){};_.fi=function Vtd(a,b){};_.gi=function Wtd(a,b,c){};_.Fb=function Xtd(a){return Btd(this,a)};_.Hb=function Ytd(){return Etd(this)};_.hi=function Ztd(){return false};_.Kc=function $td(){return new Fyd(this)};_.Yc=function _td(){return new Oyd(this)};_.Zc=function aud(a){var b;b=this.gc();if(a<0||a>b)throw vbb(new Cyd(a,b));return new Pyd(this,a)};_.ji=function bud(a,b){this.ii(a,this.Xc(b))};_.Mc=function cud(a){return Ftd(this,a)};_.li=function dud(a,b){return b};_._c=function eud(a,b){return Gtd(this,a,b)};_.Ib=function fud(){return Htd(this)};_.ni=function gud(){return true};_.oi=function hud(a,b){return Itd(this,b)};var p4=mdb(Tte,'AbstractEList',67);bcb(63,67,oue,yud,zud,Aud);_.Vh=function Bud(a,b){return iud(this,a,b)};_.Wh=function Cud(a){return jud(this,a)};_.Xh=function Dud(a,b){kud(this,a,b)};_.Yh=function Eud(a){lud(this,a)};_.pi=function Fud(a){return nud(this,a)};_.$b=function Gud(){oud(this)};_.Hc=function Hud(a){return pud(this,a)};_.Xb=function Iud(a){return qud(this,a)};_.qi=function Jud(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b<a&&(b=a);this.g=this.ri(b);d!=null&&$fb(d,0,this.g,0,this.i)}};_.Xc=function Kud(a){return rud(this,a)};_.dc=function Lud(){return this.i==0};_.ii=function Mud(a,b){return sud(this,a,b)};_.ri=function Nud(a){return KC(SI,Uhe,1,a,5,1)};_.ki=function Oud(a){return this.g[a]};_.$c=function Pud(a){return tud(this,a)};_.mi=function Qud(a,b){return uud(this,a,b)};_.gc=function Rud(){return this.i};_.Pc=function Sud(){return wud(this)};_.Qc=function Tud(a){return xud(this,a)};_.i=0;var y4=mdb(Tte,'BasicEList',63);var X4=odb(Tte,'TreeIterator');bcb(694,63,pue);_.Nb=function Xud(a){Rrb(this,a)};_.Ob=function Yud(){return this.g==null&&!this.c?Uud(this):this.g==null||this.i!=0&&BD(this.g[this.i-1],47).Ob()};_.Pb=function Zud(){return Vud(this)};_.Qb=function $ud(){if(!this.e){throw vbb(new Zdb('There is no valid object to remove.'))}this.e.Qb()};_.c=false;var q4=mdb(Tte,'AbstractTreeIterator',694);bcb(685,694,pue,_ud);_.si=function avd(a){var b;b=BD(a,56).Wg().Kc();JD(b,279)&&BD(b,279).Nk(new bvd);return b};var W3=mdb(jue,'ElkGraphUtil/PropertiesSkippingTreeIterator',685);bcb(952,1,{},bvd);var V3=mdb(jue,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',952);var cvd,dvd;var Y3=mdb(jue,'ElkReflect',null);bcb(889,1,hse,jvd);_.vg=function kvd(a){return evd(),sqb(BD(a,174))};var X3=mdb(jue,'ElkReflect/lambda$0$Type',889);var lvd;var W4=odb(Tte,'ResourceLocator');bcb(1051,1,{});var N4=mdb(Tte,'DelegatingResourceLocator',1051);bcb(1052,1051,{});var Z3=mdb('org.eclipse.emf.common','EMFPlugin',1052);var $3=odb(cve,'Adapter');var _3=odb(cve,'Notification');bcb(1153,1,dve);_.ti=function vvd(){return this.d};_.ui=function wvd(a){};_.vi=function xvd(a){this.d=a};_.wi=function yvd(a){this.d==a&&(this.d=null)};_.d=null;var a4=mdb(hte,'AdapterImpl',1153);bcb(1995,67,eve);_.Vh=function Fvd(a,b){return zvd(this,a,b)};_.Wh=function Gvd(a){var b,c,d;++this.j;if(a.dc()){return false}else{b=this.Vi();for(d=a.Kc();d.Ob();){c=d.Pb();this.Ii(this.oi(b,c));++b}return true}};_.Xh=function Hvd(a,b){Avd(this,a,b)};_.Yh=function Ivd(a){Bvd(this,a)};_.Gi=function Jvd(){return this.Ji()};_.$b=function Kvd(){Cvd(this,this.Vi(),this.Wi())};_.Hc=function Lvd(a){return this.Li(a)};_.Ic=function Mvd(a){return this.Mi(a)};_.Hi=function Nvd(a,b){this.Si().jm()};_.Ii=function Ovd(a){this.Si().jm()};_.Ji=function Pvd(){return this.Si()};_.Ki=function Qvd(){this.Si().jm()};_.Li=function Rvd(a){return this.Si().jm()};_.Mi=function Svd(a){return this.Si().jm()};_.Ni=function Tvd(a){return this.Si().jm()};_.Oi=function Uvd(a){return this.Si().jm()};_.Pi=function Vvd(){return this.Si().jm()};_.Qi=function Wvd(a){return this.Si().jm()};_.Ri=function Xvd(){return this.Si().jm()};_.Ti=function Yvd(a){return this.Si().jm()};_.Ui=function Zvd(a,b){return this.Si().jm()};_.Vi=function $vd(){return this.Si().jm()};_.Wi=function _vd(){return this.Si().jm()};_.Xi=function awd(a){return this.Si().jm()};_.Yi=function bwd(){return this.Si().jm()};_.Fb=function cwd(a){return this.Ni(a)};_.Xb=function dwd(a){return this.li(a,this.Oi(a))};_.Hb=function ewd(){return this.Pi()};_.Xc=function fwd(a){return this.Qi(a)};_.dc=function gwd(){return this.Ri()};_.ii=function hwd(a,b){return Dvd(this,a,b)};_.ki=function iwd(a){return this.Oi(a)};_.$c=function jwd(a){return Evd(this,a)};_.Mc=function kwd(a){var b;b=this.Xc(a);if(b>=0){this.$c(b);return true}else{return false}};_.mi=function lwd(a,b){return this.Ui(a,this.oi(a,b))};_.gc=function mwd(){return this.Vi()};_.Pc=function nwd(){return this.Wi()};_.Qc=function owd(a){return this.Xi(a)};_.Ib=function pwd(){return this.Yi()};var M4=mdb(Tte,'DelegatingEList',1995);bcb(1996,1995,eve);_.Vh=function xwd(a,b){return qwd(this,a,b)};_.Wh=function ywd(a){return this.Vh(this.Vi(),a)};_.Xh=function zwd(a,b){rwd(this,a,b)};_.Yh=function Awd(a){swd(this,a)};_.ai=function Bwd(){return !this.bj()};_.$b=function Cwd(){vwd(this)};_.Zi=function Dwd(a,b,c,d,e){return new Cxd(this,a,b,c,d,e)};_.$i=function Ewd(a){Uhd(this.Ai(),a)};_._i=function Fwd(){return null};_.aj=function Gwd(){return -1};_.Ai=function Hwd(){return null};_.bj=function Iwd(){return false};_.cj=function Jwd(a,b){return b};_.dj=function Kwd(a,b){return b};_.ej=function Lwd(){return false};_.fj=function Mwd(){return !this.Ri()};_.ii=function Nwd(a,b){var c,d;if(this.ej()){d=this.fj();c=Dvd(this,a,b);this.$i(this.Zi(7,meb(b),c,a,d));return c}else{return Dvd(this,a,b)}};_.$c=function Owd(a){var b,c,d,e;if(this.ej()){c=null;d=this.fj();b=this.Zi(4,e=Evd(this,a),null,a,d);if(this.bj()&&!!e){c=this.dj(e,c);if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}else{if(!c){this.$i(b)}else{c.Ei(b);c.Fi()}}return e}else{e=Evd(this,a);if(this.bj()&&!!e){c=this.dj(e,null);!!c&&c.Fi()}return e}};_.mi=function Pwd(a,b){return wwd(this,a,b)};var d4=mdb(hte,'DelegatingNotifyingListImpl',1996);bcb(143,1,fve);_.Ei=function pxd(a){return Qwd(this,a)};_.Fi=function qxd(){Rwd(this)};_.xi=function rxd(){return this.d};_._i=function sxd(){return null};_.gj=function txd(){return null};_.yi=function uxd(a){return -1};_.zi=function vxd(){return $wd(this)};_.Ai=function wxd(){return null};_.Bi=function xxd(){return hxd(this)};_.Ci=function yxd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.hj=function zxd(){return false};_.Di=function Axd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.xi();switch(e){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}}}}case 4:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.Ci();this.d=6;l=new zud(2);if(i<=g){wtd(l,this.n);wtd(l,a.Bi());this.g=OC(GC(WD,1),oje,25,15,[this.o=i,g+1])}else{wtd(l,a.Bi());wtd(l,this.n);this.g=OC(GC(WD,1),oje,25,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.Ai())&&this.yi(null)==a.yi(null)){j=jxd(this);g=a.Ci();k=BD(this.g,48);d=KC(WD,oje,25,k.length+1,15,1);b=0;while(b<k.length){h=k[b];if(h<=g){d[b++]=h;++g}else{break}}c=BD(this.n,15);c.Vc(b,a.Bi());d[b]=g;while(++b<d.length){d[b]=k[b-1]}this.g=d;j||(this.o=-2-d[0]);return true}break}}break}}return false};_.Ib=function Bxd(){var a,b,c,d;d=new Jfb(hdb(this.gm)+'@'+(b=tb(this)>>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Cfb(d,this.d);break}}ixd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Cfb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Dfb(d,this.Ai());d.a+=', feature: ';Dfb(d,this._i());d.a+=', oldValue: ';Dfb(d,hxd(this));d.a+=', newValue: ';if(this.d==6&&JD(this.g,48)){c=BD(this.g,48);d.a+='[';for(a=0;a<c.length;){d.a+=c[a];++a<c.length&&(d.a+=She,d)}d.a+=']'}else{Dfb(d,$wd(this))}d.a+=', isTouch: ';Ffb(d,ixd(this));d.a+=', wasSet: ';Ffb(d,jxd(this));d.a+=')';return d.a};_.d=0;_.e=0;_.f=0;_.j=0;_.k=0;_.o=0;_.p=0;var f4=mdb(hte,'NotificationImpl',143);bcb(1167,143,fve,Cxd);_._i=function Dxd(){return this.a._i()};_.yi=function Exd(a){return this.a.aj()};_.Ai=function Fxd(){return this.a.Ai()};var c4=mdb(hte,'DelegatingNotifyingListImpl/1',1167);bcb(242,63,oue,Hxd,Ixd);_.Fc=function Jxd(a){return Gxd(this,BD(a,366))};_.Ei=function Kxd(a){return Gxd(this,a)};_.Fi=function Lxd(){var a,b,c;for(a=0;a<this.i;++a){b=BD(this.g[a],366);c=b.Ai();c!=null&&b.xi()!=-1&&BD(c,92).Ng(b)}};_.ri=function Mxd(a){return KC(_3,Uhe,366,a,0,1)};var e4=mdb(hte,'NotificationChainImpl',242);bcb(1378,90,gte);_.Kg=function Nxd(){return this.e};_.Mg=function Oxd(){return (this.f&1)!=0};_.f=1;var g4=mdb(hte,'NotifierImpl',1378);bcb(1993,63,oue);_.Vh=function $xd(a,b){return Pxd(this,a,b)};_.Wh=function _xd(a){return this.Vh(this.i,a)};_.Xh=function ayd(a,b){Qxd(this,a,b)};_.Yh=function byd(a){Rxd(this,a)};_.ai=function cyd(){return !this.bj()};_.$b=function dyd(){Uxd(this)};_.Zi=function eyd(a,b,c,d,e){return new vyd(this,a,b,c,d,e)};_.$i=function fyd(a){Uhd(this.Ai(),a)};_._i=function gyd(){return null};_.aj=function hyd(){return -1};_.Ai=function iyd(){return null};_.bj=function jyd(){return false};_.ij=function kyd(){return false};_.cj=function lyd(a,b){return b};_.dj=function myd(a,b){return b};_.ej=function nyd(){return false};_.fj=function oyd(){return this.i!=0};_.ii=function pyd(a,b){return Wxd(this,a,b)};_.$c=function qyd(a){return Xxd(this,a)};_.mi=function ryd(a,b){return Zxd(this,a,b)};_.jj=function syd(a,b){return b};_.kj=function tyd(a,b){return b};_.lj=function uyd(a,b,c){return c};var i4=mdb(hte,'NotifyingListImpl',1993);bcb(1166,143,fve,vyd);_._i=function wyd(){return this.a._i()};_.yi=function xyd(a){return this.a.aj()};_.Ai=function yyd(){return this.a.Ai()};var h4=mdb(hte,'NotifyingListImpl/1',1166);bcb(953,63,oue,zyd);_.Hc=function Ayd(a){if(this.i>10){if(!this.b||this.c.j!=this.a){this.b=new Vqb(this);this.a=this.j}return Rqb(this.b,a)}else{return pud(this,a)}};_.ni=function Byd(){return true};_.a=0;var j4=mdb(Tte,'AbstractEList/1',953);bcb(295,73,Mje,Cyd);var k4=mdb(Tte,'AbstractEList/BasicIndexOutOfBoundsException',295);bcb(40,1,aie,Fyd);_.Nb=function Iyd(a){Rrb(this,a)};_.mj=function Gyd(){if(this.i.j!=this.f){throw vbb(new Apb)}};_.nj=function Hyd(){return Dyd(this)};_.Ob=function Jyd(){return this.e!=this.i.gc()};_.Pb=function Kyd(){return this.nj()};_.Qb=function Lyd(){Eyd(this)};_.e=0;_.f=0;_.g=-1;var l4=mdb(Tte,'AbstractEList/EIterator',40);bcb(278,40,jie,Oyd,Pyd);_.Qb=function Xyd(){Eyd(this)};_.Rb=function Qyd(a){Myd(this,a)};_.oj=function Ryd(){var b;try{b=this.d.Xb(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.pj=function Syd(a){Nyd(this,a)};_.Sb=function Tyd(){return this.e!=0};_.Tb=function Uyd(){return this.e};_.Ub=function Vyd(){return this.oj()};_.Vb=function Wyd(){return this.e-1};_.Wb=function Yyd(a){this.pj(a)};var m4=mdb(Tte,'AbstractEList/EListIterator',278);bcb(341,40,aie,$yd);_.nj=function _yd(){return Zyd(this)};_.Qb=function azd(){throw vbb(new bgb)};var n4=mdb(Tte,'AbstractEList/NonResolvingEIterator',341);bcb(385,278,jie,bzd,czd);_.Rb=function dzd(a){throw vbb(new bgb)};_.nj=function ezd(){var b;try{b=this.c.ki(this.e);this.mj();this.g=this.e++;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.oj=function fzd(){var b;try{b=this.c.ki(--this.e);this.mj();this.g=this.e;return b}catch(a){a=ubb(a);if(JD(a,73)){this.mj();throw vbb(new utb)}else throw vbb(a)}};_.Qb=function gzd(){throw vbb(new bgb)};_.Wb=function hzd(a){throw vbb(new bgb)};var o4=mdb(Tte,'AbstractEList/NonResolvingEListIterator',385);bcb(1982,67,ive);_.Vh=function pzd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=BD(Ajd(this.a,4),126);k=j==null?0:j.length;m=k+e;d=nzd(this,m);l=k-a;l>0&&$fb(j,a,d,a+e,l);i=b.Kc();for(g=0;g<e;++g){h=i.Pb();c=a+g;lzd(d,c,Itd(this,h))}b0d(this,d);for(f=0;f<e;++f){h=d[a];this.bi(a,h);++a}return true}else{++this.j;return false}};_.Wh=function qzd(a){var b,c,d,e,f,g,h,i,j;d=a.gc();if(d!=0){i=(c=BD(Ajd(this.a,4),126),c==null?0:c.length);j=i+d;b=nzd(this,j);h=a.Kc();for(f=i;f<j;++f){g=h.Pb();lzd(b,f,Itd(this,g))}b0d(this,b);for(e=i;e<j;++e){g=b[e];this.bi(e,g)}return true}else{++this.j;return false}};_.Xh=function rzd(a,b){var c,d,e,f;d=BD(Ajd(this.a,4),126);e=d==null?0:d.length;c=nzd(this,e+1);f=Itd(this,b);a!=e&&$fb(d,a,c,a+1,e-a);NC(c,a,f);b0d(this,c);this.bi(a,b)};_.Yh=function szd(a){var b,c,d;d=(c=BD(Ajd(this.a,4),126),c==null?0:c.length);b=nzd(this,d+1);lzd(b,d,Itd(this,a));b0d(this,b);this.bi(d,a)};_.Zh=function tzd(){return new Uzd(this)};_.$h=function uzd(){return new Xzd(this)};_._h=function vzd(a){var b,c;c=(b=BD(Ajd(this.a,4),126),b==null?0:b.length);if(a<0||a>c)throw vbb(new Cyd(a,c));return new Yzd(this,a)};_.$b=function wzd(){var a,b;++this.j;a=BD(Ajd(this.a,4),126);b=a==null?0:a.length;b0d(this,null);Atd(this,b,a)};_.Hc=function xzd(a){var b,c,d,e,f;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(pb(a,c)){return true}}}else{for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(PD(c)===PD(a)){return true}}}}return false};_.Xb=function yzd(a){var b,c;b=BD(Ajd(this.a,4),126);c=b==null?0:b.length;if(a>=c)throw vbb(new Cyd(a,c));return b[a]};_.Xc=function zzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);if(b!=null){if(a!=null){for(c=0,d=b.length;c<d;++c){if(pb(a,b[c])){return c}}}else{for(c=0,d=b.length;c<d;++c){if(PD(b[c])===PD(a)){return c}}}}return -1};_.dc=function Azd(){return BD(Ajd(this.a,4),126)==null};_.Kc=function Bzd(){return new Lzd(this)};_.Yc=function Czd(){return new Pzd(this)};_.Zc=function Dzd(a){var b,c;c=(b=BD(Ajd(this.a,4),126),b==null?0:b.length);if(a<0||a>c)throw vbb(new Cyd(a,c));return new Qzd(this,a)};_.ii=function Ezd(a,b){var c,d,e;c=mzd(this);e=c==null?0:c.length;if(a>=e)throw vbb(new qcb(lue+a+mue+e));if(b>=e)throw vbb(new qcb(nue+b+mue+e));d=c[b];if(a!=b){a<b?$fb(c,a,c,a+1,b-a):$fb(c,b+1,c,b,a-b);NC(c,a,d);b0d(this,c)}return d};_.ki=function Fzd(a){return BD(Ajd(this.a,4),126)[a]};_.$c=function Gzd(a){return ozd(this,a)};_.mi=function Hzd(a,b){var c,d;c=mzd(this);d=c[a];lzd(c,a,Itd(this,b));b0d(this,c);return d};_.gc=function Izd(){var a;return a=BD(Ajd(this.a,4),126),a==null?0:a.length};_.Pc=function Jzd(){var a,b,c;a=BD(Ajd(this.a,4),126);c=a==null?0:a.length;b=KC($3,hve,415,c,0,1);c>0&&$fb(a,0,b,0,c);return b};_.Qc=function Kzd(a){var b,c,d;b=BD(Ajd(this.a,4),126);d=b==null?0:b.length;if(d>0){if(a.length<d){c=izd(rb(a).c,d);a=c}$fb(b,0,a,0,d)}a.length>d&&NC(a,d,null);return a};var jzd;var v4=mdb(Tte,'ArrayDelegatingEList',1982);bcb(1038,40,aie,Lzd);_.mj=function Mzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.Qb=function Nzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var r4=mdb(Tte,'ArrayDelegatingEList/EIterator',1038);bcb(706,278,jie,Pzd,Qzd);_.mj=function Rzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};_.pj=function Szd(a){Nyd(this,a);this.a=BD(Ajd(this.b.a,4),126)};_.Qb=function Tzd(){Eyd(this);this.a=BD(Ajd(this.b.a,4),126)};var s4=mdb(Tte,'ArrayDelegatingEList/EListIterator',706);bcb(1039,341,aie,Uzd);_.mj=function Vzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var t4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEIterator',1039);bcb(707,385,jie,Xzd,Yzd);_.mj=function Zzd(){if(this.b.j!=this.f||PD(BD(Ajd(this.b.a,4),126))!==PD(this.a)){throw vbb(new Apb)}};var u4=mdb(Tte,'ArrayDelegatingEList/NonResolvingEListIterator',707);bcb(606,295,Mje,$zd);var w4=mdb(Tte,'BasicEList/BasicIndexOutOfBoundsException',606);bcb(696,63,oue,_zd);_.Vc=function aAd(a,b){throw vbb(new bgb)};_.Fc=function bAd(a){throw vbb(new bgb)};_.Wc=function cAd(a,b){throw vbb(new bgb)};_.Gc=function dAd(a){throw vbb(new bgb)};_.$b=function eAd(){throw vbb(new bgb)};_.qi=function fAd(a){throw vbb(new bgb)};_.Kc=function gAd(){return this.Zh()};_.Yc=function hAd(){return this.$h()};_.Zc=function iAd(a){return this._h(a)};_.ii=function jAd(a,b){throw vbb(new bgb)};_.ji=function kAd(a,b){throw vbb(new bgb)};_.$c=function lAd(a){throw vbb(new bgb)};_.Mc=function mAd(a){throw vbb(new bgb)};_._c=function nAd(a,b){throw vbb(new bgb)};var x4=mdb(Tte,'BasicEList/UnmodifiableEList',696);bcb(705,1,{3:1,20:1,14:1,15:1,58:1,589:1});_.Vc=function OAd(a,b){oAd(this,a,BD(b,42))};_.Fc=function PAd(a){return pAd(this,BD(a,42))};_.Jc=function XAd(a){reb(this,a)};_.Xb=function YAd(a){return BD(qud(this.c,a),133)};_.ii=function fBd(a,b){return BD(this.c.ii(a,b),42)};_.ji=function gBd(a,b){GAd(this,a,BD(b,42))};_.Lc=function jBd(){return new YAb(null,new Kub(this,16))};_.$c=function kBd(a){return BD(this.c.$c(a),42)};_._c=function mBd(a,b){return MAd(this,a,BD(b,42))};_.ad=function oBd(a){ktb(this,a)};_.Nc=function pBd(){return new Kub(this,16)};_.Oc=function qBd(){return new YAb(null,new Kub(this,16))};_.Wc=function QAd(a,b){return this.c.Wc(a,b)};_.Gc=function RAd(a){return this.c.Gc(a)};_.$b=function SAd(){this.c.$b()};_.Hc=function TAd(a){return this.c.Hc(a)};_.Ic=function UAd(a){return Be(this.c,a)};_.qj=function VAd(){var a,b,c;if(this.d==null){this.d=KC(y4,jve,63,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=BD(b.nj(),133);uAd(this,a)}this.e=c}};_.Fb=function WAd(a){return zAd(this,a)};_.Hb=function ZAd(){return Etd(this.c)};_.Xc=function $Ad(a){return this.c.Xc(a)};_.rj=function _Ad(){this.c=new yBd(this)};_.dc=function aBd(){return this.f==0};_.Kc=function bBd(){return this.c.Kc()};_.Yc=function cBd(){return this.c.Yc()};_.Zc=function dBd(a){return this.c.Zc(a)};_.sj=function eBd(){return FAd(this)};_.tj=function hBd(a,b,c){return new zCd(a,b,c)};_.uj=function iBd(){return new EBd};_.Mc=function lBd(a){return JAd(this,a)};_.gc=function nBd(){return this.f};_.bd=function rBd(a,b){return new Jib(this.c,a,b)};_.Pc=function sBd(){return this.c.Pc()};_.Qc=function tBd(a){return this.c.Qc(a)};_.Ib=function uBd(){return Htd(this.c)};_.e=0;_.f=0;var L4=mdb(Tte,'BasicEMap',705);bcb(1033,63,oue,yBd);_.bi=function zBd(a,b){vBd(this,BD(b,133))};_.ei=function BBd(a,b,c){var d;++(d=this,BD(b,133),d).a.e};_.fi=function CBd(a,b){wBd(this,BD(b,133))};_.gi=function DBd(a,b,c){xBd(this,BD(b,133),BD(c,133))};_.di=function ABd(a,b){tAd(this.a)};var z4=mdb(Tte,'BasicEMap/1',1033);bcb(1034,63,oue,EBd);_.ri=function FBd(a){return KC(I4,kve,612,a,0,1)};var A4=mdb(Tte,'BasicEMap/2',1034);bcb(1035,eie,fie,GBd);_.$b=function HBd(){this.a.c.$b()};_.Hc=function IBd(a){return qAd(this.a,a)};_.Kc=function JBd(){return this.a.f==0?(LCd(),KCd.a):new dCd(this.a)};_.Mc=function KBd(a){var b;b=this.a.f;LAd(this.a,a);return this.a.f!=b};_.gc=function LBd(){return this.a.f};var B4=mdb(Tte,'BasicEMap/3',1035);bcb(1036,28,die,MBd);_.$b=function NBd(){this.a.c.$b()};_.Hc=function OBd(a){return rAd(this.a,a)};_.Kc=function PBd(){return this.a.f==0?(LCd(),KCd.a):new fCd(this.a)};_.gc=function QBd(){return this.a.f};var C4=mdb(Tte,'BasicEMap/4',1036);bcb(1037,eie,fie,SBd);_.$b=function TBd(){this.a.c.$b()};_.Hc=function UBd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&JD(a,42)){this.a.qj();i=BD(a,42);h=i.cd();e=h==null?0:tb(h);f=DAd(this.a,e);b=this.a.d[f];if(b){c=BD(b.g,367);j=b.i;for(g=0;g<j;++g){d=c[g];if(d.Sh()==e&&d.Fb(i)){return true}}}}return false};_.Kc=function VBd(){return this.a.f==0?(LCd(),KCd.a):new ZBd(this.a)};_.Mc=function WBd(a){return RBd(this,a)};_.gc=function XBd(){return this.a.f};var D4=mdb(Tte,'BasicEMap/5',1037);bcb(613,1,aie,ZBd);_.Nb=function $Bd(a){Rrb(this,a)};_.Ob=function _Bd(){return this.b!=-1};_.Pb=function aCd(){var a;if(this.f.e!=this.c){throw vbb(new Apb)}if(this.b==-1){throw vbb(new utb)}this.d=this.a;this.e=this.b;YBd(this);a=BD(this.f.d[this.d].g[this.e],133);return this.vj(a)};_.Qb=function bCd(){if(this.f.e!=this.c){throw vbb(new Apb)}if(this.e==-1){throw vbb(new Ydb)}this.f.c.Mc(qud(this.f.d[this.d],this.e));this.c=this.f.e;this.e=-1;this.a==this.d&&this.b!=-1&&--this.b};_.vj=function cCd(a){return a};_.a=0;_.b=-1;_.c=0;_.d=0;_.e=0;var E4=mdb(Tte,'BasicEMap/BasicEMapIterator',613);bcb(1031,613,aie,dCd);_.vj=function eCd(a){return a.cd()};var F4=mdb(Tte,'BasicEMap/BasicEMapKeyIterator',1031);bcb(1032,613,aie,fCd);_.vj=function gCd(a){return a.dd()};var G4=mdb(Tte,'BasicEMap/BasicEMapValueIterator',1032);bcb(1030,1,cie,iCd);_.wc=function oCd(a){stb(this,a)};_.yc=function tCd(a,b,c){return ttb(this,a,b,c)};_.$b=function jCd(){this.a.c.$b()};_._b=function kCd(a){return hCd(this,a)};_.uc=function lCd(a){return rAd(this.a,a)};_.vc=function mCd(){return yAd(this.a)};_.Fb=function nCd(a){return zAd(this.a,a)};_.xc=function pCd(a){return AAd(this.a,a)};_.Hb=function qCd(){return Etd(this.a.c)};_.dc=function rCd(){return this.a.f==0};_.ec=function sCd(){return EAd(this.a)};_.zc=function uCd(a,b){return HAd(this.a,a,b)};_.Bc=function vCd(a){return LAd(this.a,a)};_.gc=function wCd(){return this.a.f};_.Ib=function xCd(){return Htd(this.a.c)};_.Cc=function yCd(){return NAd(this.a)};var H4=mdb(Tte,'BasicEMap/DelegatingMap',1030);bcb(612,1,{42:1,133:1,612:1},zCd);_.Fb=function ACd(a){var b;if(JD(a,42)){b=BD(a,42);return (this.b!=null?pb(this.b,b.cd()):PD(this.b)===PD(b.cd()))&&(this.c!=null?pb(this.c,b.dd()):PD(this.c)===PD(b.dd()))}else{return false}};_.Sh=function BCd(){return this.a};_.cd=function CCd(){return this.b};_.dd=function DCd(){return this.c};_.Hb=function ECd(){return this.a^(this.c==null?0:tb(this.c))};_.Th=function FCd(a){this.a=a};_.Uh=function GCd(a){throw vbb(new gz)};_.ed=function HCd(a){var b;b=this.c;this.c=a;return b};_.Ib=function ICd(){return this.b+'->'+this.c};_.a=0;var I4=mdb(Tte,'BasicEMap/EntryImpl',612);bcb(536,1,{},JCd);var K4=mdb(Tte,'BasicEMap/View',536);var KCd;bcb(768,1,{});_.Fb=function ZCd(a){return At((mmb(),jmb),a)};_.Hb=function $Cd(){return qmb((mmb(),jmb))};_.Ib=function _Cd(){return Fe((mmb(),jmb))};var Q4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList',768);bcb(1312,1,jie,aDd);_.Nb=function cDd(a){Rrb(this,a)};_.Rb=function bDd(a){throw vbb(new bgb)};_.Ob=function dDd(){return false};_.Sb=function eDd(){return false};_.Pb=function fDd(){throw vbb(new utb)};_.Tb=function gDd(){return 0};_.Ub=function hDd(){throw vbb(new utb)};_.Vb=function iDd(){return -1};_.Qb=function jDd(){throw vbb(new bgb)};_.Wb=function kDd(a){throw vbb(new bgb)};var P4=mdb(Tte,'ECollections/BasicEmptyUnmodifiableEList/1',1312);bcb(1310,768,{20:1,14:1,15:1,58:1},lDd);_.Vc=function mDd(a,b){OCd()};_.Fc=function nDd(a){return PCd()};_.Wc=function oDd(a,b){return QCd()};_.Gc=function pDd(a){return RCd()};_.$b=function qDd(){SCd()};_.Hc=function rDd(a){return false};_.Ic=function sDd(a){return false};_.Jc=function tDd(a){reb(this,a)};_.Xb=function uDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function vDd(a){return -1};_.dc=function wDd(){return true};_.Kc=function xDd(){return this.a};_.Yc=function yDd(){return this.a};_.Zc=function zDd(a){return this.a};_.ii=function ADd(a,b){return TCd()};_.ji=function BDd(a,b){UCd()};_.Lc=function CDd(){return new YAb(null,new Kub(this,16))};_.$c=function DDd(a){return VCd()};_.Mc=function EDd(a){return WCd()};_._c=function FDd(a,b){return XCd()};_.gc=function GDd(){return 0};_.ad=function HDd(a){ktb(this,a)};_.Nc=function IDd(){return new Kub(this,16)};_.Oc=function JDd(){return new YAb(null,new Kub(this,16))};_.bd=function KDd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function LDd(){return De((mmb(),jmb))};_.Qc=function MDd(a){return mmb(),Ee(jmb,a)};var R4=mdb(Tte,'ECollections/EmptyUnmodifiableEList',1310);bcb(1311,768,{20:1,14:1,15:1,58:1,589:1},NDd);_.Vc=function ODd(a,b){OCd()};_.Fc=function PDd(a){return PCd()};_.Wc=function QDd(a,b){return QCd()};_.Gc=function RDd(a){return RCd()};_.$b=function SDd(){SCd()};_.Hc=function TDd(a){return false};_.Ic=function UDd(a){return false};_.Jc=function VDd(a){reb(this,a)};_.Xb=function WDd(a){return wmb((mmb(),jmb,a)),null};_.Xc=function XDd(a){return -1};_.dc=function YDd(){return true};_.Kc=function ZDd(){return this.a};_.Yc=function $Dd(){return this.a};_.Zc=function _Dd(a){return this.a};_.ii=function bEd(a,b){return TCd()};_.ji=function cEd(a,b){UCd()};_.Lc=function dEd(){return new YAb(null,new Kub(this,16))};_.$c=function eEd(a){return VCd()};_.Mc=function fEd(a){return WCd()};_._c=function gEd(a,b){return XCd()};_.gc=function hEd(){return 0};_.ad=function iEd(a){ktb(this,a)};_.Nc=function jEd(){return new Kub(this,16)};_.Oc=function kEd(){return new YAb(null,new Kub(this,16))};_.bd=function lEd(a,b){return mmb(),new Jib(jmb,a,b)};_.Pc=function mEd(){return De((mmb(),jmb))};_.Qc=function nEd(a){return mmb(),Ee(jmb,a)};_.sj=function aEd(){return mmb(),mmb(),kmb};var S4=mdb(Tte,'ECollections/EmptyUnmodifiableEMap',1311);var U4=odb(Tte,'Enumerator');var oEd;bcb(281,1,{281:1},NEd);_.Fb=function REd(a){var b;if(this===a)return true;if(!JD(a,281))return false;b=BD(a,281);return this.f==b.f&&TEd(this.i,b.i)&&SEd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&SEd(this.d,b.d)&&SEd(this.g,b.g)&&SEd(this.e,b.e)&&KEd(this,b)};_.Hb=function WEd(){return this.f};_.Ib=function cFd(){return LEd(this)};_.f=0;var sEd=0,tEd=0,uEd=0,vEd=0,wEd=0,xEd=0,yEd=0,zEd=0,AEd=0,BEd,CEd=0,DEd=0,EEd=0,FEd=0,GEd,HEd;var Z4=mdb(Tte,'URI',281);bcb(1091,43,fke,mFd);_.zc=function nFd(a,b){return BD(Shb(this,GD(a),BD(b,281)),281)};var Y4=mdb(Tte,'URI/URICache',1091);bcb(497,63,oue,oFd,pFd);_.hi=function qFd(){return true};var $4=mdb(Tte,'UniqueEList',497);bcb(581,60,Tie,rFd);var _4=mdb(Tte,'WrappedException',581);var a5=odb(Vse,nve);var v5=odb(Vse,ove);var t5=odb(Vse,pve);var b5=odb(Vse,qve);var d5=odb(Vse,rve);var c5=odb(Vse,'EClass');var f5=odb(Vse,'EDataType');var sFd;bcb(1183,43,fke,vFd);_.xc=function wFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var e5=mdb(Vse,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1183);var h5=odb(Vse,'EEnum');var g5=odb(Vse,sve);var j5=odb(Vse,tve);var n5=odb(Vse,uve);var xFd;var p5=odb(Vse,vve);var q5=odb(Vse,wve);bcb(1029,1,{},BFd);_.Ib=function CFd(){return 'NIL'};var r5=mdb(Vse,'EStructuralFeature/Internal/DynamicValueHolder/1',1029);var DFd;bcb(1028,43,fke,GFd);_.xc=function HFd(a){return ND(a)?Phb(this,a):Wd(irb(this.f,a))};var s5=mdb(Vse,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1028);var u5=odb(Vse,xve);var w5=odb(Vse,'EValidator/PatternMatcher');var IFd;var KFd;var MFd;var OFd,PFd,QFd,RFd,SFd,TFd,UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd,aGd,bGd,cGd,dGd,eGd,fGd,gGd,hGd,iGd;var E9=odb(yve,'FeatureMap/Entry');bcb(535,1,{72:1},kGd);_.ak=function lGd(){return this.a};_.dd=function mGd(){return this.b};var x5=mdb(qte,'BasicEObjectImpl/1',535);bcb(1027,1,zve,nGd);_.Wj=function oGd(a){return hid(this.a,this.b,a)};_.fj=function pGd(){return nid(this.a,this.b)};_.Wb=function qGd(a){zid(this.a,this.b,a)};_.Xj=function rGd(){Did(this.a,this.b)};var y5=mdb(qte,'BasicEObjectImpl/4',1027);bcb(1983,1,{108:1});_.bk=function uGd(a){this.e=a==0?sGd:KC(SI,Uhe,1,a,5,1)};_.Ch=function vGd(a){return this.e[a]};_.Dh=function wGd(a,b){this.e[a]=b};_.Eh=function xGd(a){this.e[a]=null};_.ck=function yGd(){return this.c};_.dk=function zGd(){throw vbb(new bgb)};_.ek=function AGd(){throw vbb(new bgb)};_.fk=function BGd(){return this.d};_.gk=function CGd(){return this.e!=null};_.hk=function DGd(a){this.c=a};_.ik=function EGd(a){throw vbb(new bgb)};_.jk=function FGd(a){throw vbb(new bgb)};_.kk=function GGd(a){this.d=a};var sGd;var z5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderBaseImpl',1983);bcb(185,1983,{108:1},HGd);_.dk=function IGd(){return this.a};_.ek=function JGd(){return this.b};_.ik=function KGd(a){this.a=a};_.jk=function LGd(a){this.b=a};var A5=mdb(qte,'BasicEObjectImpl/EPropertiesHolderImpl',185);bcb(506,97,pte,MGd);_.Kg=function NGd(){return this.f};_.Pg=function OGd(){return this.k};_.Rg=function PGd(a,b){this.g=a;this.i=b};_.Tg=function QGd(){return (this.j&2)==0?this.zh():this.ph().ck()};_.Vg=function RGd(){return this.i};_.Mg=function SGd(){return (this.j&1)!=0};_.eh=function TGd(){return this.g};_.kh=function UGd(){return (this.j&4)!=0};_.ph=function VGd(){return !this.k&&(this.k=new HGd),this.k};_.th=function WGd(a){this.ph().hk(a);a?(this.j|=2):(this.j&=-3)};_.vh=function XGd(a){this.ph().jk(a);a?(this.j|=4):(this.j&=-5)};_.zh=function YGd(){return (NFd(),MFd).S};_.i=0;_.j=1;var l6=mdb(qte,'EObjectImpl',506);bcb(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},_Gd);_.Ch=function aHd(a){return this.e[a]};_.Dh=function bHd(a,b){this.e[a]=b};_.Eh=function cHd(a){this.e[a]=null};_.Tg=function dHd(){return this.d};_.Yg=function eHd(a){return bLd(this.d,a)};_.$g=function fHd(){return this.d};_.dh=function gHd(){return this.e!=null};_.ph=function hHd(){!this.k&&(this.k=new vHd);return this.k};_.th=function iHd(a){this.d=a};_.yh=function jHd(){var a;if(this.e==null){a=aLd(this.d);this.e=a==0?ZGd:KC(SI,Uhe,1,a,5,1)}return this};_.Ah=function kHd(){return 0};var ZGd;var E5=mdb(qte,'DynamicEObjectImpl',780);bcb(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},lHd);_.Fb=function nHd(a){return this===a};_.Hb=function rHd(){return FCb(this)};_.th=function mHd(a){this.d=a;this.b=YKd(a,'key');this.c=YKd(a,Bte)};_.Sh=function oHd(){var a;if(this.a==-1){a=iid(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.cd=function pHd(){return iid(this,this.b)};_.dd=function qHd(){return iid(this,this.c)};_.Th=function sHd(a){this.a=a};_.Uh=function tHd(a){zid(this,this.b,a)};_.ed=function uHd(a){var b;b=iid(this,this.c);zid(this,this.c,a);return b};_.a=0;var C5=mdb(qte,'DynamicEObjectImpl/BasicEMapEntry',1376);bcb(1377,1,{108:1},vHd);_.bk=function wHd(a){throw vbb(new bgb)};_.Ch=function xHd(a){throw vbb(new bgb)};_.Dh=function yHd(a,b){throw vbb(new bgb)};_.Eh=function zHd(a){throw vbb(new bgb)};_.ck=function AHd(){throw vbb(new bgb)};_.dk=function BHd(){return this.a};_.ek=function CHd(){return this.b};_.fk=function DHd(){return this.c};_.gk=function EHd(){throw vbb(new bgb)};_.hk=function FHd(a){throw vbb(new bgb)};_.ik=function GHd(a){this.a=a};_.jk=function HHd(a){this.b=a};_.kk=function IHd(a){this.c=a};var D5=mdb(qte,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1377);bcb(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},RHd);_.Qg=function SHd(a){return KHd(this,a)};_._g=function THd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),this.b):(!this.b&&(this.b=new sId((jGd(),fGd),x6,this)),FAd(this.b));case 3:return MHd(this);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),this.a;case 5:return !this.c&&(this.c=new _4d(m5,this,5)),this.c;}return bid(this,a-aLd((jGd(),OFd)),XKd((d=BD(Ajd(this,16),26),!d?OFd:d),a),b,c)};_.hh=function UHd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?KHd(this,c):this.Cb.ih(this,-1-e,null,c)));return JHd(this,BD(a,147),c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.jh=function VHd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.b&&(this.b=new sId((jGd(),fGd),x6,this)),bId(this.b,a,c);case 3:return JHd(this,null,c);case 4:return !this.a&&(this.a=new xMd(m5,this,4)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),OFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),OFd)),a,c)};_.lh=function WHd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!MHd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return cid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.sh=function XHd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:OHd(this,GD(b));return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));cId(this.b,b);return;case 3:NHd(this,BD(b,147));return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);!this.a&&(this.a=new xMd(m5,this,4));ytd(this.a,BD(b,14));return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);!this.c&&(this.c=new _4d(m5,this,5));ytd(this.c,BD(b,14));return;}did(this,a-aLd((jGd(),OFd)),XKd((c=BD(Ajd(this,16),26),!c?OFd:c),a),b)};_.zh=function YHd(){return jGd(),OFd};_.Bh=function ZHd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:PHd(this,null);return;case 2:!this.b&&(this.b=new sId((jGd(),fGd),x6,this));this.b.c.$b();return;case 3:NHd(this,null);return;case 4:!this.a&&(this.a=new xMd(m5,this,4));Uxd(this.a);return;case 5:!this.c&&(this.c=new _4d(m5,this,5));Uxd(this.c);return;}eid(this,a-aLd((jGd(),OFd)),XKd((b=BD(Ajd(this,16),26),!b?OFd:b),a))};_.Ib=function $Hd(){return QHd(this)};_.d=null;var G5=mdb(qte,'EAnnotationImpl',510);bcb(151,705,Ave,dId);_.Xh=function eId(a,b){_Hd(this,a,BD(b,42))};_.lk=function fId(a,b){return aId(this,BD(a,42),b)};_.pi=function gId(a){return BD(BD(this.c,69).pi(a),133)};_.Zh=function hId(){return BD(this.c,69).Zh()};_.$h=function iId(){return BD(this.c,69).$h()};_._h=function jId(a){return BD(this.c,69)._h(a)};_.mk=function kId(a,b){return bId(this,a,b)};_.Wj=function lId(a){return BD(this.c,76).Wj(a)};_.rj=function mId(){};_.fj=function nId(){return BD(this.c,76).fj()};_.tj=function oId(a,b,c){var d;d=BD(bKd(this.b).Nh().Jh(this.b),133);d.Th(a);d.Uh(b);d.ed(c);return d};_.uj=function pId(){return new W5d(this)};_.Wb=function qId(a){cId(this,a)};_.Xj=function rId(){BD(this.c,76).Xj()};var y9=mdb(yve,'EcoreEMap',151);bcb(158,151,Ave,sId);_.qj=function tId(){var a,b,c,d,e,f;if(this.d==null){f=KC(y4,jve,63,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=BD(c.nj(),133);d=b.Sh();e=(d&Ohe)%f.length;a=f[e];!a&&(a=f[e]=new W5d(this));a.Fc(b)}this.d=f}};var F5=mdb(qte,'EAnnotationImpl/1',158);bcb(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1});_._g=function GId(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.jh=function HId(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function IId(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function JId(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:this.Lh(GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function KId(){return jGd(),hGd};_.Bh=function LId(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:this.Lh(null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function MId(){wId(this);this.Bb|=1};_.Yj=function NId(){return wId(this)};_.Zj=function OId(){return this.t};_.$j=function PId(){var a;return a=this.t,a>1||a==-1};_.hi=function QId(){return (this.Bb&512)!=0};_.nk=function RId(a,b){return zId(this,a,b)};_.ok=function SId(a){DId(this,a)};_.Ib=function TId(){return EId(this)};_.s=0;_.t=1;var v7=mdb(qte,'ETypedElementImpl',284);bcb(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1});_.Qg=function iJd(a){return UId(this,a)};_._g=function jJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),this.$j()?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function kJd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?UId(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,17,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function lJd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 17:return _hd(this,null,17,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function mJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.$j();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function nJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:this.ok(BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function oJd(){return jGd(),gGd};_.Bh=function pJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.ok(1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function qJd(){a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Gj=function rJd(){return this.f};_.zj=function sJd(){return VId(this)};_.Hj=function tJd(){return WId(this)};_.Lj=function uJd(){return null};_.pk=function vJd(){return this.k};_.aj=function wJd(){return this.n};_.Mj=function xJd(){return XId(this)};_.Nj=function yJd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=WId(this);(c.i==null&&TKd(c),c.i).length;d=this.Lj();!!d&&aLd(WId(d));e=wId(this);g=e.Bj();a=!g?null:(g.i&1)!=0?g==sbb?wI:g==WD?JI:g==VD?FI:g==UD?BI:g==XD?MI:g==rbb?UI:g==SD?xI:yI:g;b=VId(this);h=e.zj();n6d(this);(this.Bb&oie)!=0&&(!!(f=t1d((O6d(),M6d),c))&&f!=this||!!(f=_1d(q1d(M6d,this))))?(this.p=new zVd(this,f)):this.$j()?this.rk()?!d?(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new KVd(42,this)):(this.p=new KVd(0,this)):a==CK?(this.p=new IVd(50,J4,this)):this.sk()?(this.p=new IVd(43,a,this)):(this.p=new IVd(1,a,this)):!a?this.sk()?(this.p=new KVd(44,this)):(this.p=new KVd(2,this)):a==CK?(this.p=new IVd(41,J4,this)):this.sk()?(this.p=new IVd(45,a,this)):(this.p=new IVd(3,a,this)):(this.Bb&Cve)!=0?!a?this.sk()?(this.p=new LVd(46,this,d)):(this.p=new LVd(4,this,d)):this.sk()?(this.p=new JVd(47,a,this,d)):(this.p=new JVd(5,a,this,d)):!a?this.sk()?(this.p=new LVd(48,this,d)):(this.p=new LVd(6,this,d)):this.sk()?(this.p=new JVd(49,a,this,d)):(this.p=new JVd(7,a,this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&512)!=0?(this.Bb&Cve)!=0?!a?(this.p=new KVd(8,this)):(this.p=new IVd(9,a,this)):!a?(this.p=new KVd(10,this)):(this.p=new IVd(11,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(12,this)):(this.p=new IVd(13,a,this)):!a?(this.p=new KVd(14,this)):(this.p=new IVd(15,a,this)):!d?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new KVd(16,this)):(this.p=new IVd(17,a,this)):!a?(this.p=new KVd(18,this)):(this.p=new IVd(19,a,this)):(this.Bb&Cve)!=0?!a?(this.p=new KVd(20,this)):(this.p=new IVd(21,a,this)):!a?(this.p=new KVd(22,this)):(this.p=new IVd(23,a,this)):(i=d.t,i>1||i==-1?this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(24,this,d)):(this.p=new JVd(25,a,this,d)):!a?(this.p=new LVd(26,this,d)):(this.p=new JVd(27,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(28,this,d)):(this.p=new JVd(29,a,this,d)):!a?(this.p=new LVd(30,this,d)):(this.p=new JVd(31,a,this,d)):this.sk()?(this.Bb&Cve)!=0?!a?(this.p=new LVd(32,this,d)):(this.p=new JVd(33,a,this,d)):!a?(this.p=new LVd(34,this,d)):(this.p=new JVd(35,a,this,d)):(this.Bb&Cve)!=0?!a?(this.p=new LVd(36,this,d)):(this.p=new JVd(37,a,this,d)):!a?(this.p=new LVd(38,this,d)):(this.p=new JVd(39,a,this,d))):this.qk()?this.sk()?(this.p=new kWd(BD(e,26),this,d)):(this.p=new cWd(BD(e,26),this,d)):JD(e,148)?a==E9?(this.p=new KVd(40,this)):(this.Bb&Cve)!=0?!a?(this.p=new jXd(BD(e,148),b,h,this)):(this.p=new lXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):!a?(this.p=new cXd(BD(e,148),b,h,this)):(this.p=new eXd(b,h,this,(CWd(),g==WD?yWd:g==sbb?tWd:g==XD?zWd:g==VD?xWd:g==UD?wWd:g==rbb?BWd:g==SD?uWd:g==TD?vWd:AWd))):this.rk()?!d?(this.Bb&Cve)!=0?this.sk()?(this.p=new FXd(BD(e,26),this)):(this.p=new DXd(BD(e,26),this)):this.sk()?(this.p=new BXd(BD(e,26),this)):(this.p=new zXd(BD(e,26),this)):(this.Bb&Cve)!=0?this.sk()?(this.p=new NXd(BD(e,26),this,d)):(this.p=new LXd(BD(e,26),this,d)):this.sk()?(this.p=new JXd(BD(e,26),this,d)):(this.p=new HXd(BD(e,26),this,d)):this.sk()?!d?(this.Bb&Cve)!=0?(this.p=new RXd(BD(e,26),this)):(this.p=new PXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new VXd(BD(e,26),this,d)):(this.p=new TXd(BD(e,26),this,d)):!d?(this.Bb&Cve)!=0?(this.p=new XXd(BD(e,26),this)):(this.p=new nXd(BD(e,26),this)):(this.Bb&Cve)!=0?(this.p=new _Xd(BD(e,26),this,d)):(this.p=new ZXd(BD(e,26),this,d))}return this.p};_.Ij=function zJd(){return (this.Bb&zte)!=0};_.qk=function AJd(){return false};_.rk=function BJd(){return false};_.Jj=function CJd(){return (this.Bb&oie)!=0};_.Oj=function DJd(){return YId(this)};_.sk=function EJd(){return false};_.Kj=function FJd(){return (this.Bb&Cve)!=0};_.tk=function GJd(a){this.k=a};_.Lh=function HJd(a){cJd(this,a)};_.Ib=function IJd(){return gJd(this)};_.e=false;_.n=0;var n7=mdb(qte,'EStructuralFeatureImpl',449);bcb(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},OJd);_._g=function PJd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),LJd(this)?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:if(b)return KJd(this);return JJd(this);}return bid(this,a-aLd((jGd(),PFd)),XKd((d=BD(Ajd(this,16),26),!d?PFd:d),a),b,c)};_.lh=function QJd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return LJd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return !!JJd(this);}return cid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.sh=function RJd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:NJd(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:MJd(this,Ccb(DD(b)));return;}did(this,a-aLd((jGd(),PFd)),XKd((c=BD(Ajd(this,16),26),!c?PFd:c),a),b)};_.zh=function SJd(){return jGd(),PFd};_.Bh=function TJd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:this.b=0;DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:MJd(this,false);return;}eid(this,a-aLd((jGd(),PFd)),XKd((b=BD(Ajd(this,16),26),!b?PFd:b),a))};_.Gh=function UJd(){KJd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.$j=function VJd(){return LJd(this)};_.nk=function WJd(a,b){this.b=0;this.a=null;return zId(this,a,b)};_.ok=function XJd(a){NJd(this,a)};_.Ib=function YJd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (iD: ';Ffb(a,(this.Bb&ote)!=0);a.a+=')';return a.a};_.b=0;var H5=mdb(qte,'EAttributeImpl',322);bcb(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1});_.uk=function nKd(a){return a.Tg()==this};_.Qg=function oKd(a){return aKd(this,a)};_.Rg=function pKd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_._g=function qKd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.hh=function rKd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),f.Nj().Qj(this,yjd(this),b-aLd(this.zh()),a,c)};_.jh=function sKd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),b),66),e.Nj().Rj(this,yjd(this),b-aLd(this.zh()),a,c)};_.lh=function tKd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function uKd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function vKd(){return jGd(),RFd};_.Bh=function wKd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.yj=function xKd(){var a;return this.G==-1&&(this.G=(a=bKd(this),a?HLd(a.Mh(),this):-1)),this.G};_.zj=function yKd(){return null};_.Aj=function zKd(){return bKd(this)};_.vk=function AKd(){return this.v};_.Bj=function BKd(){return dKd(this)};_.Cj=function CKd(){return this.D!=null?this.D:this.B};_.Dj=function DKd(){return this.F};_.wj=function EKd(a){return fKd(this,a)};_.wk=function FKd(a){this.v=a};_.xk=function GKd(a){gKd(this,a)};_.yk=function HKd(a){this.C=a};_.Lh=function IKd(a){lKd(this,a)};_.Ib=function JKd(){return mKd(this)};_.C=null;_.D=null;_.G=-1;var Z5=mdb(qte,'EClassifierImpl',351);bcb(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},hLd);_.uk=function iLd(a){return dLd(this,a.Tg())};_._g=function jLd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return null;case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return Bcb(),(this.Bb&512)!=0?true:false;case 10:return _Kd(this);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),this.q;case 12:return OKd(this);case 13:return SKd(this);case 14:return SKd(this),this.r;case 15:return OKd(this),this.k;case 16:return PKd(this);case 17:return RKd(this);case 18:return TKd(this);case 19:return UKd(this);case 20:return OKd(this),this.o;case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),this.s;case 22:return VKd(this);case 23:return QKd(this);}return bid(this,a-aLd((jGd(),QFd)),XKd((d=BD(Ajd(this,16),26),!d?QFd:d),a),b,c)};_.hh=function kLd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Sxd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Sxd(this.s,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.jh=function lLd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 11:return !this.q&&(this.q=new cUd(n5,this,11,10)),Txd(this.q,a,c);case 21:return !this.s&&(this.s=new cUd(t5,this,21,17)),Txd(this.s,a,c);case 22:return Txd(VKd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),QFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),QFd)),a,c)};_.lh=function mLd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&VKd(this.u.a).i!=0&&!(!!this.n&&FMd(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return OKd(this).i!=0;case 13:return SKd(this).i!=0;case 14:return SKd(this),this.r.i!=0;case 15:return OKd(this),this.k.i!=0;case 16:return PKd(this).i!=0;case 17:return RKd(this).i!=0;case 18:return TKd(this).i!=0;case 19:return UKd(this).i!=0;case 20:return OKd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&FMd(this.n);case 23:return QKd(this).i!=0;}return cid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.oh=function nLd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:YKd(this,a);return b?b:Bmd(this,a)};_.sh=function oLd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:eLd(this,Ccb(DD(b)));return;case 9:fLd(this,Ccb(DD(b)));return;case 10:vwd(_Kd(this));ytd(_Kd(this),BD(b,14));return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);!this.q&&(this.q=new cUd(n5,this,11,10));ytd(this.q,BD(b,14));return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);!this.s&&(this.s=new cUd(t5,this,21,17));ytd(this.s,BD(b,14));return;case 22:Uxd(VKd(this));ytd(VKd(this),BD(b,14));return;}did(this,a-aLd((jGd(),QFd)),XKd((c=BD(Ajd(this,16),26),!c?QFd:c),a),b)};_.zh=function pLd(){return jGd(),QFd};_.Bh=function qLd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:eLd(this,false);return;case 9:fLd(this,false);return;case 10:!!this.u&&vwd(this.u);return;case 11:!this.q&&(this.q=new cUd(n5,this,11,10));Uxd(this.q);return;case 21:!this.s&&(this.s=new cUd(t5,this,21,17));Uxd(this.s);return;case 22:!!this.n&&Uxd(this.n);return;}eid(this,a-aLd((jGd(),QFd)),XKd((b=BD(Ajd(this,16),26),!b?QFd:b),a))};_.Gh=function rLd(){var a,b;OKd(this);SKd(this);PKd(this);RKd(this);TKd(this);UKd(this);QKd(this);oud(SMd($Kd(this)));if(this.s){for(a=0,b=this.s.i;a<b;++a){Cmd(qud(this.s,a))}}if(this.q){for(a=0,b=this.q.i;a<b;++a){Cmd(qud(this.q,a))}}o1d((O6d(),M6d),this).ne();this.Bb|=1};_.Ib=function sLd(){return gLd(this)};_.k=null;_.r=null;var KKd,LKd,MKd;var Y5=mdb(qte,'EClassImpl',88);bcb(1994,1993,Ove);_.Vh=function tLd(a,b){return Pxd(this,a,b)};_.Wh=function uLd(a){return Pxd(this,this.i,a)};_.Xh=function vLd(a,b){Qxd(this,a,b)};_.Yh=function wLd(a){Rxd(this,a)};_.lk=function xLd(a,b){return Sxd(this,a,b)};_.pi=function yLd(a){return nud(this,a)};_.mk=function CLd(a,b){return Txd(this,a,b)};_.mi=function DLd(a,b){return Zxd(this,a,b)};_.Zh=function zLd(){return new $yd(this)};_.$h=function ALd(){return new bzd(this)};_._h=function BLd(a){return ztd(this,a)};var P9=mdb(yve,'NotifyingInternalEListImpl',1994);bcb(622,1994,Pve);_.Hc=function NLd(a){return ELd(this,a)};_.Zi=function OLd(a,b,c,d,e){return FLd(this,a,b,c,d,e)};_.$i=function PLd(a){GLd(this,a)};_.Wj=function QLd(a){return this};_.ak=function RLd(){return XKd(this.e.Tg(),this.aj())};_._i=function SLd(){return this.ak()};_.aj=function TLd(){return bLd(this.e.Tg(),this.ak())};_.zk=function ULd(){return BD(this.ak().Yj(),26).Bj()};_.Ak=function VLd(){return zUd(BD(this.ak(),18)).n};_.Ai=function WLd(){return this.e};_.Bk=function XLd(){return true};_.Ck=function YLd(){return false};_.Dk=function ZLd(){return false};_.Ek=function $Ld(){return false};_.Xc=function _Ld(a){return HLd(this,a)};_.cj=function aMd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.gh(this.e,this.Ak(),this.zk(),b):c.gh(this.e,bLd(c.Tg(),zUd(BD(this.ak(),18))),null,b):c.gh(this.e,-1-this.aj(),null,b)};_.dj=function bMd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.ih(this.e,this.Ak(),this.zk(),b):c.ih(this.e,bLd(c.Tg(),zUd(BD(this.ak(),18))),null,b):c.ih(this.e,-1-this.aj(),null,b)};_.rk=function cMd(){return false};_.Fk=function dMd(){return true};_.wj=function eMd(a){return qEd(this.d,a)};_.ej=function fMd(){return oid(this.e)};_.fj=function gMd(){return this.i!=0};_.ri=function hMd(a){return izd(this.d,a)};_.li=function iMd(a,b){return this.Fk()&&this.Ek()?ILd(this,a,BD(b,56)):b};_.Gk=function jMd(a){return a.kh()?xid(this.e,BD(a,49)):a};_.Wb=function kMd(a){JLd(this,a)};_.Pc=function lMd(){return KLd(this)};_.Qc=function mMd(a){var b;if(this.Ek()){for(b=this.i-1;b>=0;--b){qud(this,b)}}return xud(this,a)};_.Xj=function nMd(){Uxd(this)};_.oi=function oMd(a,b){return LLd(this,a,b)};var t9=mdb(yve,'EcoreEList',622);bcb(496,622,Pve,pMd);_.ai=function qMd(){return false};_.aj=function rMd(){return this.c};_.bj=function sMd(){return false};_.Fk=function tMd(){return true};_.hi=function uMd(){return true};_.li=function vMd(a,b){return b};_.ni=function wMd(){return false};_.c=0;var d9=mdb(yve,'EObjectEList',496);bcb(85,496,Pve,xMd);_.bj=function yMd(){return true};_.Dk=function zMd(){return false};_.rk=function AMd(){return true};var Z8=mdb(yve,'EObjectContainmentEList',85);bcb(545,85,Pve,BMd);_.ci=function CMd(){this.b=true};_.fj=function DMd(){return this.b};_.Xj=function EMd(){var a;Uxd(this);if(oid(this.e)){a=this.b;this.b=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var Y8=mdb(yve,'EObjectContainmentEList/Unsettable',545);bcb(1140,545,Pve,JMd);_.ii=function NMd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),SFd),meb(b),(d=c.c,JD(d,88)?BD(d,26):_Fd),a)),c};_.jj=function OMd(a,b){return GMd(this,BD(a,87),b)};_.kj=function PMd(a,b){return HMd(this,BD(a,87),b)};_.lj=function QMd(a,b,c){return IMd(this,BD(a,87),BD(b,87),c)};_.Zi=function KMd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function LMd(){return true};_.fj=function MMd(){return FMd(this)};_.Xj=function RMd(){Uxd(this)};var N5=mdb(qte,'EClassImpl/1',1140);bcb(1154,1153,dve);_.ui=function VMd(a){var b,c,d,e,f,g,h;c=a.xi();if(c!=8){d=UMd(a);if(d==0){switch(c){case 1:case 9:{h=a.Bi();if(h!=null){b=$Kd(BD(h,473));!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 3:{g=a.zi();if(g!=null){e=BD(g,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}break}case 5:{g=a.zi();if(g!=null){for(f=BD(g,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);wtd(b.c,BD(a.Ai(),26))}}}break}case 4:{h=a.Bi();if(h!=null){e=BD(h,473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}break}case 6:{h=a.Bi();if(h!=null){for(f=BD(h,14).Kc();f.Ob();){e=BD(f.Pb(),473);if((e.Bb&1)==0){b=$Kd(e);!b.c&&(b.c=new xYd);Ftd(b.c,a.Ai())}}}break}}}this.Hk(d)}};_.Hk=function WMd(a){TMd(this,a)};_.b=63;var p7=mdb(qte,'ESuperAdapter',1154);bcb(1155,1154,dve,YMd);_.Hk=function ZMd(a){XMd(this,a)};var I5=mdb(qte,'EClassImpl/10',1155);bcb(1144,696,Pve);_.Vh=function $Md(a,b){return iud(this,a,b)};_.Wh=function _Md(a){return jud(this,a)};_.Xh=function aNd(a,b){kud(this,a,b)};_.Yh=function bNd(a){lud(this,a)};_.pi=function dNd(a){return nud(this,a)};_.mi=function lNd(a,b){return uud(this,a,b)};_.lk=function cNd(a,b){throw vbb(new bgb)};_.Zh=function eNd(){return new $yd(this)};_.$h=function fNd(){return new bzd(this)};_._h=function gNd(a){return ztd(this,a)};_.mk=function hNd(a,b){throw vbb(new bgb)};_.Wj=function iNd(a){return this};_.fj=function jNd(){return this.i!=0};_.Wb=function kNd(a){throw vbb(new bgb)};_.Xj=function mNd(){throw vbb(new bgb)};var s9=mdb(yve,'EcoreEList/UnmodifiableEList',1144);bcb(319,1144,Pve,nNd);_.ni=function oNd(){return false};var r9=mdb(yve,'EcoreEList/UnmodifiableEList/FastCompare',319);bcb(1147,319,Pve,rNd);_.Xc=function sNd(a){var b,c,d;if(JD(a,170)){b=BD(a,170);c=b.aj();if(c!=-1){for(d=this.i;c<d;++c){if(PD(this.g[c])===PD(a)){return c}}}}return -1};var J5=mdb(qte,'EClassImpl/1EAllStructuralFeaturesList',1147);bcb(1141,497,oue,wNd);_.ri=function xNd(a){return KC(j5,Tve,87,a,0,1)};_.ni=function yNd(){return false};var K5=mdb(qte,'EClassImpl/1EGenericSuperTypeEList',1141);bcb(623,497,oue,zNd);_.ri=function ANd(a){return KC(t5,Mve,170,a,0,1)};_.ni=function BNd(){return false};var L5=mdb(qte,'EClassImpl/1EStructuralFeatureUniqueEList',623);bcb(741,497,oue,CNd);_.ri=function DNd(a){return KC(q5,Mve,18,a,0,1)};_.ni=function ENd(){return false};var M5=mdb(qte,'EClassImpl/1ReferenceList',741);bcb(1142,497,oue,GNd);_.bi=function HNd(a,b){FNd(this,BD(b,34))};_.ri=function INd(a){return KC(b5,Mve,34,a,0,1)};_.ni=function JNd(){return false};var O5=mdb(qte,'EClassImpl/2',1142);bcb(1143,497,oue,KNd);_.ri=function LNd(a){return KC(b5,Mve,34,a,0,1)};_.ni=function MNd(){return false};var P5=mdb(qte,'EClassImpl/3',1143);bcb(1145,319,Pve,PNd);_.Fc=function QNd(a){return NNd(this,BD(a,34))};_.Yh=function RNd(a){ONd(this,BD(a,34))};var Q5=mdb(qte,'EClassImpl/4',1145);bcb(1146,319,Pve,UNd);_.Fc=function VNd(a){return SNd(this,BD(a,18))};_.Yh=function WNd(a){TNd(this,BD(a,18))};var R5=mdb(qte,'EClassImpl/5',1146);bcb(1148,497,oue,XNd);_.ri=function YNd(a){return KC(n5,Nve,59,a,0,1)};_.ni=function ZNd(){return false};var S5=mdb(qte,'EClassImpl/6',1148);bcb(1149,497,oue,$Nd);_.ri=function _Nd(a){return KC(q5,Mve,18,a,0,1)};_.ni=function aOd(){return false};var T5=mdb(qte,'EClassImpl/7',1149);bcb(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1});_.Vh=function bOd(a,b){return qwd(this,a,b)};_.Wh=function cOd(a){return qwd(this,this.Vi(),a)};_.Xh=function dOd(a,b){rwd(this,a,b)};_.Yh=function eOd(a){swd(this,a)};_.lk=function fOd(a,b){return twd(this,a,b)};_.mk=function lOd(a,b){return uwd(this,a,b)};_.mi=function mOd(a,b){return wwd(this,a,b)};_.pi=function gOd(a){return this.Oi(a)};_.Zh=function hOd(){return new $yd(this)};_.Gi=function iOd(){return this.Ji()};_.$h=function jOd(){return new bzd(this)};_._h=function kOd(a){return ztd(this,a)};var L8=mdb(yve,'DelegatingNotifyingInternalEListImpl',1997);bcb(742,1997,Uve);_.ai=function rOd(){var a;a=XKd(wjd(this.b),this.aj()).Yj();return JD(a,148)&&!JD(a,457)&&(a.Bj().i&1)==0};_.Hc=function sOd(a){var b,c,d,e,f,g,h,i;if(this.Fk()){i=this.Vi();if(i>4){if(this.wj(a)){if(this.rk()){d=BD(a,49);c=d.Ug();h=c==this.b&&(this.Dk()?d.Og(d.Vg(),BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj())==zUd(BD(XKd(wjd(this.b),this.aj()),18)).n:-1-d.Vg()==this.aj());if(this.Ek()&&!h&&!c&&!!d.Zg()){for(e=0;e<i;++e){b=oOd(this,this.Oi(e));if(PD(b)===PD(a)){return true}}}return h}else if(this.Dk()&&!this.Ck()){f=BD(a,56).ah(zUd(BD(XKd(wjd(this.b),this.aj()),18)));if(PD(f)===PD(this.b)){return true}else if(f==null||!BD(f,56).kh()){return false}}}else{return false}}g=this.Li(a);if(this.Ek()&&!g){for(e=0;e<i;++e){d=oOd(this,this.Oi(e));if(PD(d)===PD(a)){return true}}}return g}else{return this.Li(a)}};_.Zi=function tOd(a,b,c,d,e){return new pSd(this.b,a,this.aj(),b,c,d,e)};_.$i=function uOd(a){Uhd(this.b,a)};_.Wj=function vOd(a){return this};_._i=function wOd(){return XKd(wjd(this.b),this.aj())};_.aj=function xOd(){return bLd(wjd(this.b),XKd(wjd(this.b),this.aj()))};_.Ai=function yOd(){return this.b};_.Bk=function zOd(){return !!XKd(wjd(this.b),this.aj()).Yj().Bj()};_.bj=function AOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&ote)!=0||!!zUd(BD(b,18))}else{return false}};_.Ck=function BOd(){var a,b,c,d;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c&&(d=c.t,d>1||d==-1)}else{return false}};_.Dk=function COd(){var a,b,c;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);c=zUd(a);return !!c}else{return false}};_.Ek=function DOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&Tje)!=0}else{return false}};_.Xc=function EOd(a){var b,c,d,e;d=this.Qi(a);if(d>=0)return d;if(this.Fk()){for(c=0,e=this.Vi();c<e;++c){b=oOd(this,this.Oi(c));if(PD(b)===PD(a)){return c}}}return -1};_.cj=function FOd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.gh(this.b,zUd(BD(XKd(wjd(this.b),this.aj()),18)).n,BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj(),b):c.gh(this.b,bLd(c.Tg(),zUd(BD(XKd(wjd(this.b),this.aj()),18))),null,b):c.gh(this.b,-1-this.aj(),null,b)};_.dj=function GOd(a,b){var c;return c=BD(a,49),this.Dk()?this.Bk()?c.ih(this.b,zUd(BD(XKd(wjd(this.b),this.aj()),18)).n,BD(XKd(wjd(this.b),this.aj()).Yj(),26).Bj(),b):c.ih(this.b,bLd(c.Tg(),zUd(BD(XKd(wjd(this.b),this.aj()),18))),null,b):c.ih(this.b,-1-this.aj(),null,b)};_.rk=function HOd(){var a,b;b=XKd(wjd(this.b),this.aj());if(JD(b,99)){a=BD(b,18);return (a.Bb&ote)!=0}else{return false}};_.Fk=function IOd(){return JD(XKd(wjd(this.b),this.aj()).Yj(),88)};_.wj=function JOd(a){return XKd(wjd(this.b),this.aj()).Yj().wj(a)};_.ej=function KOd(){return oid(this.b)};_.fj=function LOd(){return !this.Ri()};_.hi=function MOd(){return XKd(wjd(this.b),this.aj()).hi()};_.li=function NOd(a,b){return nOd(this,a,b)};_.Wb=function OOd(a){vwd(this);ytd(this,BD(a,15))};_.Pc=function POd(){var a;if(this.Ek()){for(a=this.Vi()-1;a>=0;--a){nOd(this,a,this.Oi(a))}}return this.Wi()};_.Qc=function QOd(a){var b;if(this.Ek()){for(b=this.Vi()-1;b>=0;--b){nOd(this,b,this.Oi(b))}}return this.Xi(a)};_.Xj=function ROd(){vwd(this)};_.oi=function SOd(a,b){return pOd(this,a,b)};var K8=mdb(yve,'DelegatingEcoreEList',742);bcb(1150,742,Uve,YOd);_.Hi=function _Od(a,b){TOd(this,a,BD(b,26))};_.Ii=function aPd(a){UOd(this,BD(a,26))};_.Oi=function gPd(a){var b,c;return b=BD(qud(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ti=function lPd(a){var b,c;return b=BD(Xxd(VKd(this.a),a),87),c=b.c,JD(c,88)?BD(c,26):(jGd(),_Fd)};_.Ui=function mPd(a,b){return WOd(this,a,BD(b,26))};_.ai=function ZOd(){return false};_.Zi=function $Od(a,b,c,d,e){return null};_.Ji=function bPd(){return new EPd(this)};_.Ki=function cPd(){Uxd(VKd(this.a))};_.Li=function dPd(a){return VOd(this,a)};_.Mi=function ePd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!VOd(this,b)){return false}}return true};_.Ni=function fPd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==VKd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function hPd(){var a,b,c,d,e;c=1;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,JD(e,88)?BD(e,26):(jGd(),_Fd));c=31*c+(!d?0:FCb(d))}return c};_.Qi=function iPd(a){var b,c,d,e;d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,JD(e,88)?BD(e,26):(jGd(),_Fd)))){return d}++d}return -1};_.Ri=function jPd(){return VKd(this.a).i==0};_.Si=function kPd(){return null};_.Vi=function nPd(){return VKd(this.a).i};_.Wi=function oPd(){var a,b,c,d,e,f;f=VKd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(VKd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,JD(d,88)?BD(d,26):(jGd(),_Fd))}return e};_.Xi=function pPd(a){var b,c,d,e,f,g,h;h=VKd(this.a).i;if(a.length<h){e=izd(rb(a).c,h);a=e}a.length>h&&NC(a,h,null);d=0;for(c=new Fyd(VKd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,JD(g,88)?BD(g,26):(jGd(),_Fd));NC(a,d++,f)}return a};_.Yi=function qPd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=VKd(this.a);for(b=0,d=VKd(this.a).i;b<d;){Efb(e,xfb((c=BD(qud(a,b),87).c,JD(c,88)?BD(c,26):(jGd(),_Fd))));++b<d&&(e.a+=She,e)}e.a+=']';return e.a};_.$i=function rPd(a){};_.aj=function sPd(){return 10};_.Bk=function tPd(){return true};_.bj=function uPd(){return false};_.Ck=function vPd(){return false};_.Dk=function wPd(){return false};_.Ek=function xPd(){return true};_.rk=function yPd(){return false};_.Fk=function zPd(){return true};_.wj=function APd(a){return JD(a,88)};_.fj=function BPd(){return cLd(this.a)};_.hi=function CPd(){return true};_.ni=function DPd(){return true};var V5=mdb(qte,'EClassImpl/8',1150);bcb(1151,1964,Lie,EPd);_.Zc=function FPd(a){return ztd(this.a,a)};_.gc=function GPd(){return VKd(this.a.a).i};var U5=mdb(qte,'EClassImpl/8/1',1151);bcb(1152,497,oue,HPd);_.ri=function IPd(a){return KC(d5,Uhe,138,a,0,1)};_.ni=function JPd(){return false};var W5=mdb(qte,'EClassImpl/9',1152);bcb(1139,53,gke,KPd);var X5=mdb(qte,'EClassImpl/MyHashSet',1139);bcb(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},MPd);_._g=function NPd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return this.zj();case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;}return bid(this,a-aLd(this.zh()),XKd((d=BD(Ajd(this,16),26),!d?this.zh():d),a),b,c)};_.lh=function OPd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return this.zj()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;}return cid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.sh=function PPd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;}did(this,a-aLd(this.zh()),XKd((c=BD(Ajd(this,16),26),!c?this.zh():c),a),b)};_.zh=function QPd(){return jGd(),TFd};_.Bh=function RPd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;}eid(this,a-aLd(this.zh()),XKd((b=BD(Ajd(this,16),26),!b?this.zh():b),a))};_.Gh=function SPd(){o1d((O6d(),M6d),this).ne();this.Bb|=1};_.Fj=function TPd(){var a,b,c;if(!this.c){a=l6d(bKd(this));if(!a.dc()){for(c=a.Kc();c.Ob();){b=GD(c.Pb());!!Dmd(this,b)&&k6d(this)}}}return this.b};_.zj=function UPd(){var b;if(!this.e){b=null;try{b=dKd(this)}catch(a){a=ubb(a);if(!JD(a,102))throw vbb(a)}this.d=null;!!b&&(b.i&1)!=0&&(b==sbb?(this.d=(Bcb(),zcb)):b==WD?(this.d=meb(0)):b==VD?(this.d=new Ndb(0)):b==UD?(this.d=0):b==XD?(this.d=Aeb(0)):b==rbb?(this.d=Web(0)):b==SD?(this.d=Scb(0)):(this.d=bdb(0)));this.e=true}return this.d};_.Ej=function VPd(){return (this.Bb&256)!=0};_.Ik=function WPd(a){a&&(this.D='org.eclipse.emf.common.util.AbstractEnumerator')};_.xk=function XPd(a){gKd(this,a);this.Ik(a)};_.yk=function YPd(a){this.C=a;this.e=false};_.Ib=function ZPd(){var a;if((this.Db&64)!=0)return mKd(this);a=new Jfb(mKd(this));a.a+=' (serializable: ';Ffb(a,(this.Bb&256)!=0);a.a+=')';return a.a};_.c=false;_.d=null;_.e=false;var $5=mdb(qte,'EDataTypeImpl',566);bcb(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},aQd);_._g=function bQd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return dKd(this);case 4:return $Pd(this);case 5:return this.F;case 6:if(b)return bKd(this);return ZJd(this);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),this.A;case 8:return Bcb(),(this.Bb&256)!=0?true:false;case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),this.a;}return bid(this,a-aLd((jGd(),UFd)),XKd((d=BD(Ajd(this,16),26),!d?UFd:d),a),b,c)};_.hh=function cQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?aKd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,6,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Sxd(this.a,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.jh=function dQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 6:return _hd(this,null,6,c);case 7:return !this.A&&(this.A=new K4d(u5,this,7)),Txd(this.A,a,c);case 9:return !this.a&&(this.a=new cUd(g5,this,9,5)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),UFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),UFd)),a,c)};_.lh=function eQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!dKd(this);case 4:return !!$Pd(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!ZJd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.sh=function fQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:lKd(this,GD(b));return;case 2:iKd(this,GD(b));return;case 5:kKd(this,GD(b));return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);!this.A&&(this.A=new K4d(u5,this,7));ytd(this.A,BD(b,14));return;case 8:LPd(this,Ccb(DD(b)));return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);!this.a&&(this.a=new cUd(g5,this,9,5));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),UFd)),XKd((c=BD(Ajd(this,16),26),!c?UFd:c),a),b)};_.zh=function gQd(){return jGd(),UFd};_.Bh=function hQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,179)&&(BD(this.Cb,179).tb=null);pnd(this,null);return;case 2:$Jd(this,null);_Jd(this,this.D);return;case 5:kKd(this,null);return;case 7:!this.A&&(this.A=new K4d(u5,this,7));Uxd(this.A);return;case 8:LPd(this,true);return;case 9:!this.a&&(this.a=new cUd(g5,this,9,5));Uxd(this.a);return;}eid(this,a-aLd((jGd(),UFd)),XKd((b=BD(Ajd(this,16),26),!b?UFd:b),a))};_.Gh=function iQd(){var a,b;if(this.a){for(a=0,b=this.a.i;a<b;++a){Cmd(qud(this.a,a))}}o1d((O6d(),M6d),this).ne();this.Bb|=1};_.zj=function jQd(){return $Pd(this)};_.wj=function kQd(a){if(a!=null){return true}return false};_.Ik=function lQd(a){};var _5=mdb(qte,'EEnumImpl',457);bcb(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},rQd);_.ne=function AQd(){return this.zb};_.Qg=function sQd(a){return mQd(this,a)};_._g=function tQd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return meb(this.d);case 3:return this.b?this.b:this.a;case 4:return e=this.c,e==null?this.zb:e;case 5:return this.Db>>16==5?BD(this.Cb,671):null;}return bid(this,a-aLd((jGd(),VFd)),XKd((d=BD(Ajd(this,16),26),!d?VFd:d),a),b,c)};_.hh=function uQd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?mQd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,5,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.jh=function vQd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 5:return _hd(this,null,5,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),VFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),VFd)),a,c)};_.lh=function wQd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?BD(this.Cb,671):null);}return cid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.sh=function xQd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:qQd(this,BD(b,19).a);return;case 3:oQd(this,BD(b,1940));return;case 4:pQd(this,GD(b));return;}did(this,a-aLd((jGd(),VFd)),XKd((c=BD(Ajd(this,16),26),!c?VFd:c),a),b)};_.zh=function yQd(){return jGd(),VFd};_.Bh=function zQd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:qQd(this,0);return;case 3:oQd(this,null);return;case 4:pQd(this,null);return;}eid(this,a-aLd((jGd(),VFd)),XKd((b=BD(Ajd(this,16),26),!b?VFd:b),a))};_.Ib=function BQd(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var a6=mdb(qte,'EEnumLiteralImpl',573);var c6=odb(qte,'EFactoryImpl/InternalEDateTimeFormat');bcb(489,1,{2015:1},EQd);var b6=mdb(qte,'EFactoryImpl/1ClientInternalEDateTimeFormat',489);bcb(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},UQd);_.Sg=function VQd(a,b,c){var d;c=_hd(this,a,b,c);if(!!this.e&&JD(a,170)){d=MQd(this,this.e);d!=this.c&&(c=QQd(this,d,c))}return c};_._g=function WQd(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new xMd(j5,this,1)),this.d;case 2:if(b)return KQd(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return JQd(this);return this.a;}return bid(this,a-aLd((jGd(),XFd)),XKd((d=BD(Ajd(this,16),26),!d?XFd:d),a),b,c)};_.jh=function XQd(a,b,c){var d,e;switch(b){case 0:return IQd(this,null,c);case 1:return !this.d&&(this.d=new xMd(j5,this,1)),Txd(this.d,a,c);case 3:return GQd(this,null,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),XFd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),XFd)),a,c)};_.lh=function YQd(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return cid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.sh=function ZQd(a,b){var c;switch(a){case 0:SQd(this,BD(b,87));return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);!this.d&&(this.d=new xMd(j5,this,1));ytd(this.d,BD(b,14));return;case 3:PQd(this,BD(b,87));return;case 4:RQd(this,BD(b,836));return;case 5:NQd(this,BD(b,138));return;}did(this,a-aLd((jGd(),XFd)),XKd((c=BD(Ajd(this,16),26),!c?XFd:c),a),b)};_.zh=function $Qd(){return jGd(),XFd};_.Bh=function _Qd(a){var b;switch(a){case 0:SQd(this,null);return;case 1:!this.d&&(this.d=new xMd(j5,this,1));Uxd(this.d);return;case 3:PQd(this,null);return;case 4:RQd(this,null);return;case 5:NQd(this,null);return;}eid(this,a-aLd((jGd(),XFd)),XKd((b=BD(Ajd(this,16),26),!b?XFd:b),a))};_.Ib=function aRd(){var a;a=new Wfb(Eid(this));a.a+=' (expression: ';TQd(this,a);a.a+=')';return a.a};var FQd;var e6=mdb(qte,'EGenericTypeImpl',241);bcb(1969,1964,Vve);_.Xh=function cRd(a,b){bRd(this,a,b)};_.lk=function dRd(a,b){bRd(this,this.gc(),a);return b};_.pi=function eRd(a){return Ut(this.Gi(),a)};_.Zh=function fRd(){return this.$h()};_.Gi=function gRd(){return new O0d(this)};_.$h=function hRd(){return this._h(0)};_._h=function iRd(a){return this.Gi().Zc(a)};_.mk=function jRd(a,b){ze(this,a,true);return b};_.ii=function kRd(a,b){var c,d;d=Vt(this,b);c=this.Zc(a);c.Rb(d);return d};_.ji=function lRd(a,b){var c;ze(this,b,true);c=this.Zc(a);c.Rb(b)};var B8=mdb(yve,'AbstractSequentialInternalEList',1969);bcb(486,1969,Vve,qRd);_.pi=function rRd(a){return Ut(this.Gi(),a)};_.Zh=function sRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_.Gi=function tRd(){return new w4d(this.a,this.b)};_.$h=function uRd(){if(this.b==null){return LRd(),LRd(),KRd}return this.Jk()};_._h=function vRd(a){var b,c;if(this.b==null){if(a<0||a>1){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Jk();for(b=0;b<a;++b){MRd(c)}return c};_.dc=function wRd(){var a,b,c,d,e,f;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.Mk()||this.a.mh(a)){f=this.a.bh(a,false);Q6d();if(BD(a,66).Oj()){b=BD(f,153);for(d=0,e=b.gc();d<e;++d){if(oRd(b.il(d))&&b.jl(d)!=null){return false}}}else if(a.$j()){if(!BD(f,14).dc()){return false}}else if(f!=null){return false}}}}return true};_.Kc=function xRd(){return pRd(this)};_.Zc=function yRd(a){var b,c;if(this.b==null){if(a!=0){throw vbb(new qcb(gve+a+', size=0'))}return LRd(),LRd(),KRd}c=this.Lk()?this.Kk():this.Jk();for(b=0;b<a;++b){MRd(c)}return c};_.ii=function zRd(a,b){throw vbb(new bgb)};_.ji=function ARd(a,b){throw vbb(new bgb)};_.Jk=function BRd(){return new RRd(this.a,this.b)};_.Kk=function CRd(){return new dSd(this.a,this.b)};_.Lk=function DRd(){return true};_.gc=function ERd(){var a,b,c,d,e,f,g;e=0;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.Mk()||this.a.mh(a)){g=this.a.bh(a,false);Q6d();if(BD(a,66).Oj()){b=BD(g,153);for(d=0,f=b.gc();d<f;++d){oRd(b.il(d))&&b.jl(d)!=null&&++e}}else a.$j()?(e+=BD(g,14).gc()):g!=null&&++e}}}return e};_.Mk=function FRd(){return true};var mRd;var R8=mdb(yve,'EContentsEList',486);bcb(1156,486,Vve,GRd);_.Jk=function HRd(){return new hSd(this.a,this.b)};_.Kk=function IRd(){return new fSd(this.a,this.b)};_.Mk=function JRd(){return false};var i6=mdb(qte,'ENamedElementImpl/1',1156);bcb(279,1,Wve,RRd);_.Nb=function URd(a){Rrb(this,a)};_.Rb=function SRd(a){throw vbb(new bgb)};_.Nk=function TRd(a){if(this.g!=0||!!this.e){throw vbb(new Zdb('Iterator already in use or already filtered'))}this.e=a};_.Ob=function VRd(){var a,b,c,d,e,f;switch(this.g){case 3:case 2:{return true}case 1:{return false}case -3:{!this.p?++this.n:this.p.Pb()}default:{if(!this.k||(!this.p?!NRd(this):!ORd(this,this.p))){while(this.d<this.c.length){b=this.c[this.d++];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.p=null;this.o=this.k.gc();this.n=0}else{this.p=!this.j?this.k.Yc():this.j.$h()}if(!this.p?NRd(this):ORd(this,this.p)){e=!this.p?!this.j?this.k.Xb(this.n++):this.j.pi(this.n++):this.p.Pb();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=2;return true}}}this.k=null;this.p=null;this.f=false;this.g=1;return false}else{e=!this.p?!this.j?this.k.Xb(this.n++):this.j.pi(this.n++):this.p.Pb();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=3;return true}}}};_.Sb=function WRd(){var a,b,c,d,e,f;switch(this.g){case -3:case -2:{return true}case -1:{return false}case 3:{!this.p?--this.n:this.p.Ub()}default:{if(!this.k||(!this.p?!PRd(this):!QRd(this,this.p))){while(this.d>0){b=this.c[--this.d];if((!this.e||b.Gj()!=x2||b.aj()!=0)&&(!this.Mk()||this.b.mh(b))){f=this.b.bh(b,this.Lk());this.f=(Q6d(),BD(b,66).Oj());if(this.f||b.$j()){if(this.Lk()){d=BD(f,15);this.k=d}else{d=BD(f,69);this.k=this.j=d}if(JD(this.k,54)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.Zc(this.k.gc()):this.j._h(this.k.gc())}if(!this.p?PRd(this):QRd(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.pi(--this.n):this.p.Ub();if(this.f){a=BD(e,72);a.ak();c=a.dd();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function XRd(){return MRd(this)};_.Tb=function YRd(){return this.a};_.Ub=function ZRd(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw vbb(new utb)}};_.Vb=function $Rd(){return this.a-1};_.Qb=function _Rd(){throw vbb(new bgb)};_.Lk=function aSd(){return false};_.Wb=function bSd(a){throw vbb(new bgb)};_.Mk=function cSd(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var KRd;var P8=mdb(yve,'EContentsEList/FeatureIteratorImpl',279);bcb(697,279,Wve,dSd);_.Lk=function eSd(){return true};var Q8=mdb(yve,'EContentsEList/ResolvingFeatureIteratorImpl',697);bcb(1157,697,Wve,fSd);_.Mk=function gSd(){return false};var g6=mdb(qte,'ENamedElementImpl/1/1',1157);bcb(1158,279,Wve,hSd);_.Mk=function iSd(){return false};var h6=mdb(qte,'ENamedElementImpl/1/2',1158);bcb(36,143,fve,lSd,mSd,nSd,oSd,pSd,qSd,rSd,sSd,tSd,uSd,vSd,wSd,xSd,ySd,zSd,ASd,BSd,CSd,DSd,ESd,FSd,GSd,HSd,ISd,JSd);_._i=function KSd(){return kSd(this)};_.gj=function LSd(){var a;a=kSd(this);if(a){return a.zj()}return null};_.yi=function MSd(a){this.b==-1&&!!this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj()));return this.c.Og(this.b,a)};_.Ai=function NSd(){return this.c};_.hj=function OSd(){var a;a=kSd(this);if(a){return a.Kj()}return false};_.b=-1;var k6=mdb(qte,'ENotificationImpl',36);bcb(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},SSd);_.Qg=function TSd(a){return PSd(this,a)};_._g=function USd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,26):null;case 11:return !this.d&&(this.d=new K4d(u5,this,11)),this.d;case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),this.c;case 13:return !this.a&&(this.a=new fTd(this,this)),this.a;case 14:return QSd(this);}return bid(this,a-aLd((jGd(),aGd)),XKd((d=BD(Ajd(this,16),26),!d?aGd:d),a),b,c)};_.hh=function VSd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?PSd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Sxd(this.c,a,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.jh=function WSd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);case 11:return !this.d&&(this.d=new K4d(u5,this,11)),Txd(this.d,a,c);case 12:return !this.c&&(this.c=new cUd(p5,this,12,10)),Txd(this.c,a,c);case 14:return Txd(QSd(this),a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),aGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),aGd)),a,c)};_.lh=function XSd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,26):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&QSd(this.a.a).i!=0&&!(!!this.b&&QTd(this.b));case 14:return !!this.b&&QTd(this.b);}return cid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.sh=function YSd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);!this.d&&(this.d=new K4d(u5,this,11));ytd(this.d,BD(b,14));return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);!this.c&&(this.c=new cUd(p5,this,12,10));ytd(this.c,BD(b,14));return;case 13:!this.a&&(this.a=new fTd(this,this));vwd(this.a);!this.a&&(this.a=new fTd(this,this));ytd(this.a,BD(b,14));return;case 14:Uxd(QSd(this));ytd(QSd(this),BD(b,14));return;}did(this,a-aLd((jGd(),aGd)),XKd((c=BD(Ajd(this,16),26),!c?aGd:c),a),b)};_.zh=function ZSd(){return jGd(),aGd};_.Bh=function $Sd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 11:!this.d&&(this.d=new K4d(u5,this,11));Uxd(this.d);return;case 12:!this.c&&(this.c=new cUd(p5,this,12,10));Uxd(this.c);return;case 13:!!this.a&&vwd(this.a);return;case 14:!!this.b&&Uxd(this.b);return;}eid(this,a-aLd((jGd(),aGd)),XKd((b=BD(Ajd(this,16),26),!b?aGd:b),a))};_.Gh=function _Sd(){var a,b;if(this.c){for(a=0,b=this.c.i;a<b;++a){Cmd(qud(this.c,a))}}wId(this);this.Bb|=1};var p6=mdb(qte,'EOperationImpl',399);bcb(505,742,Uve,fTd);_.Hi=function iTd(a,b){aTd(this,a,BD(b,138))};_.Ii=function jTd(a){bTd(this,BD(a,138))};_.Oi=function pTd(a){var b,c;return b=BD(qud(QSd(this.a),a),87),c=b.c,c?c:(jGd(),YFd)};_.Ti=function uTd(a){var b,c;return b=BD(Xxd(QSd(this.a),a),87),c=b.c,c?c:(jGd(),YFd)};_.Ui=function vTd(a,b){return dTd(this,a,BD(b,138))};_.ai=function gTd(){return false};_.Zi=function hTd(a,b,c,d,e){return null};_.Ji=function kTd(){return new NTd(this)};_.Ki=function lTd(){Uxd(QSd(this.a))};_.Li=function mTd(a){return cTd(this,a)};_.Mi=function nTd(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!cTd(this,b)){return false}}return true};_.Ni=function oTd(a){var b,c,d;if(JD(a,15)){d=BD(a,15);if(d.gc()==QSd(this.a).i){for(b=d.Kc(),c=new Fyd(this);b.Ob();){if(PD(b.Pb())!==PD(Dyd(c))){return false}}return true}}return false};_.Pi=function qTd(){var a,b,c,d,e;c=1;for(b=new Fyd(QSd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);d=(e=a.c,e?e:(jGd(),YFd));c=31*c+(!d?0:tb(d))}return c};_.Qi=function rTd(a){var b,c,d,e;d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);if(PD(a)===PD((e=b.c,e?e:(jGd(),YFd)))){return d}++d}return -1};_.Ri=function sTd(){return QSd(this.a).i==0};_.Si=function tTd(){return null};_.Vi=function wTd(){return QSd(this.a).i};_.Wi=function xTd(){var a,b,c,d,e,f;f=QSd(this.a).i;e=KC(SI,Uhe,1,f,5,1);c=0;for(b=new Fyd(QSd(this.a));b.e!=b.i.gc();){a=BD(Dyd(b),87);e[c++]=(d=a.c,d?d:(jGd(),YFd))}return e};_.Xi=function yTd(a){var b,c,d,e,f,g,h;h=QSd(this.a).i;if(a.length<h){e=izd(rb(a).c,h);a=e}a.length>h&&NC(a,h,null);d=0;for(c=new Fyd(QSd(this.a));c.e!=c.i.gc();){b=BD(Dyd(c),87);f=(g=b.c,g?g:(jGd(),YFd));NC(a,d++,f)}return a};_.Yi=function zTd(){var a,b,c,d,e;e=new Hfb;e.a+='[';a=QSd(this.a);for(b=0,d=QSd(this.a).i;b<d;){Efb(e,xfb((c=BD(qud(a,b),87).c,c?c:(jGd(),YFd))));++b<d&&(e.a+=She,e)}e.a+=']';return e.a};_.$i=function ATd(a){};_.aj=function BTd(){return 13};_.Bk=function CTd(){return true};_.bj=function DTd(){return false};_.Ck=function ETd(){return false};_.Dk=function FTd(){return false};_.Ek=function GTd(){return true};_.rk=function HTd(){return false};_.Fk=function ITd(){return true};_.wj=function JTd(a){return JD(a,138)};_.fj=function KTd(){return RSd(this.a)};_.hi=function LTd(){return true};_.ni=function MTd(){return true};var n6=mdb(qte,'EOperationImpl/1',505);bcb(1340,1964,Lie,NTd);_.Zc=function OTd(a){return ztd(this.a,a)};_.gc=function PTd(){return QSd(this.a.a).i};var m6=mdb(qte,'EOperationImpl/1/1',1340);bcb(1341,545,Pve,UTd);_.ii=function YTd(a,b){var c,d;return c=BD(Wxd(this,a,b),87),oid(this.e)&&GLd(this,new ESd(this.a,7,(jGd(),bGd),meb(b),(d=c.c,d?d:YFd),a)),c};_.jj=function ZTd(a,b){return RTd(this,BD(a,87),b)};_.kj=function $Td(a,b){return STd(this,BD(a,87),b)};_.lj=function _Td(a,b,c){return TTd(this,BD(a,87),BD(b,87),c)};_.Zi=function VTd(a,b,c,d,e){switch(a){case 3:{return FLd(this,a,b,c,d,this.i>1)}case 5:{return FLd(this,a,b,c,d,this.i-BD(c,15).gc()>0)}default:{return new pSd(this.e,a,this.c,b,c,d,true)}}};_.ij=function WTd(){return true};_.fj=function XTd(){return QTd(this)};_.Xj=function aUd(){Uxd(this)};var o6=mdb(qte,'EOperationImpl/2',1341);bcb(498,1,{1938:1,498:1},bUd);var q6=mdb(qte,'EPackageImpl/1',498);bcb(16,85,Pve,cUd);_.zk=function dUd(){return this.d};_.Ak=function eUd(){return this.b};_.Dk=function fUd(){return true};_.b=0;var b9=mdb(yve,'EObjectContainmentWithInverseEList',16);bcb(353,16,Pve,gUd);_.Ek=function hUd(){return true};_.li=function iUd(a,b){return ILd(this,a,BD(b,56))};var $8=mdb(yve,'EObjectContainmentWithInverseEList/Resolving',353);bcb(298,353,Pve,jUd);_.ci=function kUd(){this.a.tb=null};var r6=mdb(qte,'EPackageImpl/2',298);bcb(1228,1,{},lUd);var s6=mdb(qte,'EPackageImpl/3',1228);bcb(718,43,fke,oUd);_._b=function pUd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};var u6=mdb(qte,'EPackageRegistryImpl',718);bcb(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},rUd);_.Qg=function sUd(a){return qUd(this,a)};_._g=function tUd(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),f=this.t,f>1||f==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?BD(this.Cb,59):null;}return bid(this,a-aLd((jGd(),dGd)),XKd((d=BD(Ajd(this,16),26),!d?dGd:d),a),b,c)};_.hh=function uUd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Sxd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qUd(this,c):this.Cb.ih(this,-1-e,null,c)));return _hd(this,a,10,c);}return f=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),f.Nj().Qj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.jh=function vUd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 9:return vId(this,c);case 10:return _hd(this,null,10,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),dGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),dGd)),a,c)};_.lh=function wUd(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return !!(this.Db>>16==10?BD(this.Cb,59):null);}return cid(this,a-aLd((jGd(),dGd)),XKd((b=BD(Ajd(this,16),26),!b?dGd:b),a))};_.zh=function xUd(){return jGd(),dGd};var v6=mdb(qte,'EParameterImpl',509);bcb(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},FUd);_._g=function GUd(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Bcb(),(this.Bb&256)!=0?true:false;case 3:return Bcb(),(this.Bb&512)!=0?true:false;case 4:return meb(this.s);case 5:return meb(this.t);case 6:return Bcb(),g=this.t,g>1||g==-1?true:false;case 7:return Bcb(),e=this.s,e>=1?true:false;case 8:if(b)return wId(this);return this.r;case 9:return this.q;case 10:return Bcb(),(this.Bb&zte)!=0?true:false;case 11:return Bcb(),(this.Bb&Dve)!=0?true:false;case 12:return Bcb(),(this.Bb&Rje)!=0?true:false;case 13:return this.j;case 14:return VId(this);case 15:return Bcb(),(this.Bb&Cve)!=0?true:false;case 16:return Bcb(),(this.Bb&oie)!=0?true:false;case 17:return WId(this);case 18:return Bcb(),(this.Bb&ote)!=0?true:false;case 19:return Bcb(),f=zUd(this),!!f&&(f.Bb&ote)!=0?true:false;case 20:return Bcb(),(this.Bb&Tje)!=0?true:false;case 21:if(b)return zUd(this);return this.b;case 22:if(b)return AUd(this);return yUd(this);case 23:return !this.a&&(this.a=new _4d(b5,this,23)),this.a;}return bid(this,a-aLd((jGd(),eGd)),XKd((d=BD(Ajd(this,16),26),!d?eGd:d),a),b,c)};_.lh=function HUd(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&LQd(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&LQd(this.q).i==0);case 10:return (this.Bb&zte)==0;case 11:return (this.Bb&Dve)!=0;case 12:return (this.Bb&Rje)!=0;case 13:return this.j!=null;case 14:return VId(this)!=null;case 15:return (this.Bb&Cve)!=0;case 16:return (this.Bb&oie)!=0;case 17:return !!WId(this);case 18:return (this.Bb&ote)!=0;case 19:return d=zUd(this),!!d&&(d.Bb&ote)!=0;case 20:return (this.Bb&Tje)==0;case 21:return !!this.b;case 22:return !!yUd(this);case 23:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.sh=function IUd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:cJd(this,GD(b));return;case 2:BId(this,Ccb(DD(b)));return;case 3:CId(this,Ccb(DD(b)));return;case 4:AId(this,BD(b,19).a);return;case 5:DId(this,BD(b,19).a);return;case 8:yId(this,BD(b,138));return;case 9:d=xId(this,BD(b,87),null);!!d&&d.Fi();return;case 10:ZId(this,Ccb(DD(b)));return;case 11:fJd(this,Ccb(DD(b)));return;case 12:dJd(this,Ccb(DD(b)));return;case 13:$Id(this,GD(b));return;case 15:eJd(this,Ccb(DD(b)));return;case 16:aJd(this,Ccb(DD(b)));return;case 18:BUd(this,Ccb(DD(b)));return;case 20:EUd(this,Ccb(DD(b)));return;case 21:DUd(this,BD(b,18));return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);!this.a&&(this.a=new _4d(b5,this,23));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),eGd)),XKd((c=BD(Ajd(this,16),26),!c?eGd:c),a),b)};_.zh=function JUd(){return jGd(),eGd};_.Bh=function KUd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),4);pnd(this,null);return;case 2:BId(this,true);return;case 3:CId(this,true);return;case 4:AId(this,0);return;case 5:DId(this,1);return;case 8:yId(this,null);return;case 9:c=xId(this,null,null);!!c&&c.Fi();return;case 10:ZId(this,true);return;case 11:fJd(this,false);return;case 12:dJd(this,false);return;case 13:this.i=null;_Id(this,null);return;case 15:eJd(this,false);return;case 16:aJd(this,false);return;case 18:CUd(this,false);JD(this.Cb,88)&&XMd($Kd(BD(this.Cb,88)),2);return;case 20:EUd(this,true);return;case 21:DUd(this,null);return;case 23:!this.a&&(this.a=new _4d(b5,this,23));Uxd(this.a);return;}eid(this,a-aLd((jGd(),eGd)),XKd((b=BD(Ajd(this,16),26),!b?eGd:b),a))};_.Gh=function LUd(){AUd(this);a2d(q1d((O6d(),M6d),this));wId(this);this.Bb|=1};_.Lj=function MUd(){return zUd(this)};_.qk=function NUd(){var a;return a=zUd(this),!!a&&(a.Bb&ote)!=0};_.rk=function OUd(){return (this.Bb&ote)!=0};_.sk=function PUd(){return (this.Bb&Tje)!=0};_.nk=function QUd(a,b){this.c=null;return zId(this,a,b)};_.Ib=function RUd(){var a;if((this.Db&64)!=0)return gJd(this);a=new Jfb(gJd(this));a.a+=' (containment: ';Ffb(a,(this.Bb&ote)!=0);a.a+=', resolveProxies: ';Ffb(a,(this.Bb&Tje)!=0);a.a+=')';return a.a};var w6=mdb(qte,'EReferenceImpl',99);bcb(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},XUd);_.Fb=function bVd(a){return this===a};_.cd=function dVd(){return this.b};_.dd=function eVd(){return this.c};_.Hb=function fVd(){return FCb(this)};_.Uh=function hVd(a){SUd(this,GD(a))};_.ed=function iVd(a){return WUd(this,GD(a))};_._g=function YUd(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return bid(this,a-aLd((jGd(),fGd)),XKd((d=BD(Ajd(this,16),26),!d?fGd:d),a),b,c)};_.lh=function ZUd(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return cid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.sh=function $Ud(a,b){var c;switch(a){case 0:TUd(this,GD(b));return;case 1:VUd(this,GD(b));return;}did(this,a-aLd((jGd(),fGd)),XKd((c=BD(Ajd(this,16),26),!c?fGd:c),a),b)};_.zh=function _Ud(){return jGd(),fGd};_.Bh=function aVd(a){var b;switch(a){case 0:UUd(this,null);return;case 1:VUd(this,null);return;}eid(this,a-aLd((jGd(),fGd)),XKd((b=BD(Ajd(this,16),26),!b?fGd:b),a))};_.Sh=function cVd(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:LCb(a)}return this.a};_.Th=function gVd(a){this.a=a};_.Ib=function jVd(){var a;if((this.Db&64)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (key: ';Efb(a,this.b);a.a+=', value: ';Efb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var x6=mdb(qte,'EStringToStringMapEntryImpl',548);var D9=odb(yve,'FeatureMap/Entry/Internal');bcb(565,1,Xve);_.Ok=function mVd(a){return this.Pk(BD(a,49))};_.Pk=function nVd(a){return this.Ok(a)};_.Fb=function oVd(a){var b,c;if(this===a){return true}else if(JD(a,72)){b=BD(a,72);if(b.ak()==this.c){c=this.dd();return c==null?b.dd()==null:pb(c,b.dd())}else{return false}}else{return false}};_.ak=function pVd(){return this.c};_.Hb=function qVd(){var a;a=this.dd();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function rVd(){var a,b;a=this.c;b=bKd(a.Hj()).Ph();a.ne();return (b!=null&&b.length!=0?b+':'+a.ne():a.ne())+'='+this.dd()};var y6=mdb(qte,'EStructuralFeatureImpl/BasicFeatureMapEntry',565);bcb(776,565,Xve,uVd);_.Pk=function vVd(a){return new uVd(this.c,a)};_.dd=function wVd(){return this.a};_.Qk=function xVd(a,b,c){return sVd(this,a,this.a,b,c)};_.Rk=function yVd(a,b,c){return tVd(this,a,this.a,b,c)};var z6=mdb(qte,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',776);bcb(1314,1,{},zVd);_.Pj=function AVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.nl(this.a).Wj(d)};_.Qj=function BVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.el(this.a,d,e)};_.Rj=function CVd(a,b,c,d,e){var f;f=BD(gid(a,this.b),215);return f.fl(this.a,d,e)};_.Sj=function DVd(a,b,c){var d;d=BD(gid(a,this.b),215);return d.nl(this.a).fj()};_.Tj=function EVd(a,b,c,d){var e;e=BD(gid(a,this.b),215);e.nl(this.a).Wb(d)};_.Uj=function FVd(a,b,c){return BD(gid(a,this.b),215).nl(this.a)};_.Vj=function GVd(a,b,c){var d;d=BD(gid(a,this.b),215);d.nl(this.a).Xj()};var A6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1314);bcb(89,1,{},IVd,JVd,KVd,LVd);_.Pj=function MVd(a,b,c,d,e){var f;f=b.Ch(c);f==null&&b.Dh(c,f=HVd(this,a));if(!e){switch(this.e){case 50:case 41:return BD(f,589).sj();case 40:return BD(f,215).kl();}}return f};_.Qj=function NVd(a,b,c,d,e){var f,g;g=b.Ch(c);g==null&&b.Dh(c,g=HVd(this,a));f=BD(g,69).lk(d,e);return f};_.Rj=function OVd(a,b,c,d,e){var f;f=b.Ch(c);f!=null&&(e=BD(f,69).mk(d,e));return e};_.Sj=function PVd(a,b,c){var d;d=b.Ch(c);return d!=null&&BD(d,76).fj()};_.Tj=function QVd(a,b,c,d){var e;e=BD(b.Ch(c),76);!e&&b.Dh(c,e=HVd(this,a));e.Wb(d)};_.Uj=function RVd(a,b,c){var d,e;e=b.Ch(c);e==null&&b.Dh(c,e=HVd(this,a));if(JD(e,76)){return BD(e,76)}else{d=BD(b.Ch(c),15);return new iYd(d)}};_.Vj=function SVd(a,b,c){var d;d=BD(b.Ch(c),76);!d&&b.Dh(c,d=HVd(this,a));d.Xj()};_.b=0;_.e=0;var B6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateMany',89);bcb(504,1,{});_.Qj=function WVd(a,b,c,d,e){throw vbb(new bgb)};_.Rj=function XVd(a,b,c,d,e){throw vbb(new bgb)};_.Uj=function YVd(a,b,c){return new ZVd(this,a,b,c)};var TVd;var i7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle',504);bcb(1331,1,zve,ZVd);_.Wj=function $Vd(a){return this.a.Pj(this.c,this.d,this.b,a,true)};_.fj=function _Vd(){return this.a.Sj(this.c,this.d,this.b)};_.Wb=function aWd(a){this.a.Tj(this.c,this.d,this.b,a)};_.Xj=function bWd(){this.a.Vj(this.c,this.d,this.b)};_.b=0;var C6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1331);bcb(769,504,{},cWd);_.Pj=function dWd(a,b,c,d,e){return Nid(a,a.eh(),a.Vg())==this.b?this.sk()&&d?aid(a):a.eh():null};_.Qj=function eWd(a,b,c,d,e){var f,g;!!a.eh()&&(e=(f=a.Vg(),f>=0?a.Qg(e):a.eh().ih(a,-1-f,null,e)));g=bLd(a.Tg(),this.e);return a.Sg(d,g,e)};_.Rj=function fWd(a,b,c,d,e){var f;f=bLd(a.Tg(),this.e);return a.Sg(null,f,e)};_.Sj=function gWd(a,b,c){var d;d=bLd(a.Tg(),this.e);return !!a.eh()&&a.Vg()==d};_.Tj=function hWd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}e=a.eh();g=bLd(a.Tg(),this.e);if(PD(d)!==PD(e)||a.Vg()!=g&&d!=null){if(p6d(a,BD(d,56)))throw vbb(new Wdb(ste+a.Ib()));i=null;!!e&&(i=(f=a.Vg(),f>=0?a.Qg(i):a.eh().ih(a,-1-f,null,i)));h=BD(d,49);!!h&&(i=h.gh(a,bLd(h.Tg(),this.b),null,i));i=a.Sg(h,g,i);!!i&&i.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new nSd(a,1,g,d,d))}};_.Vj=function iWd(a,b,c){var d,e,f,g;d=a.eh();if(d){g=(e=a.Vg(),e>=0?a.Qg(null):a.eh().ih(a,-1-e,null,null));f=bLd(a.Tg(),this.e);g=a.Sg(null,f,g);!!g&&g.Fi()}else{a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,1,this.e,null,null))}};_.sk=function jWd(){return false};var E6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',769);bcb(1315,769,{},kWd);_.sk=function lWd(){return true};var D6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1315);bcb(563,504,{});_.Pj=function oWd(a,b,c,d,e){var f;return f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f};_.Sj=function pWd(a,b,c){var d;d=b.Ch(c);return d!=null&&(PD(d)===PD(TVd)||!pb(d,this.b))};_.Tj=function qWd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=(f=b.Ch(c),f==null?this.b:PD(f)===PD(TVd)?null:f);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Tk(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.Dh(c,null):this.b!=null?b.Dh(c,TVd):b.Dh(c,null)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function rWd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=(e=b.Ch(c),e==null?this.b:PD(e)===PD(TVd)?null:e);b.Eh(c);Uhd(a,this.d.Tk(a,1,this.e,d,this.b))}else{b.Eh(c)}};_.Sk=function sWd(a){throw vbb(new Bdb)};var T6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',563);bcb($ve,1,{},DWd);_.Tk=function EWd(a,b,c,d,e){return new DSd(a,b,c,d,e)};_.Uk=function FWd(a,b,c,d,e,f){return new FSd(a,b,c,d,e,f)};var tWd,uWd,vWd,wWd,xWd,yWd,zWd,AWd,BWd;var N6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',$ve);bcb(1332,$ve,{},GWd);_.Tk=function HWd(a,b,c,d,e){return new ISd(a,b,c,Ccb(DD(d)),Ccb(DD(e)))};_.Uk=function IWd(a,b,c,d,e,f){return new JSd(a,b,c,Ccb(DD(d)),Ccb(DD(e)),f)};var F6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1332);bcb(1333,$ve,{},JWd);_.Tk=function KWd(a,b,c,d,e){return new rSd(a,b,c,BD(d,217).a,BD(e,217).a)};_.Uk=function LWd(a,b,c,d,e,f){return new sSd(a,b,c,BD(d,217).a,BD(e,217).a,f)};var G6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1333);bcb(1334,$ve,{},MWd);_.Tk=function NWd(a,b,c,d,e){return new tSd(a,b,c,BD(d,172).a,BD(e,172).a)};_.Uk=function OWd(a,b,c,d,e,f){return new uSd(a,b,c,BD(d,172).a,BD(e,172).a,f)};var H6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1334);bcb(1335,$ve,{},PWd);_.Tk=function QWd(a,b,c,d,e){return new vSd(a,b,c,Edb(ED(d)),Edb(ED(e)))};_.Uk=function RWd(a,b,c,d,e,f){return new wSd(a,b,c,Edb(ED(d)),Edb(ED(e)),f)};var I6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1335);bcb(1336,$ve,{},SWd);_.Tk=function TWd(a,b,c,d,e){return new xSd(a,b,c,BD(d,155).a,BD(e,155).a)};_.Uk=function UWd(a,b,c,d,e,f){return new ySd(a,b,c,BD(d,155).a,BD(e,155).a,f)};var J6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1336);bcb(1337,$ve,{},VWd);_.Tk=function WWd(a,b,c,d,e){return new zSd(a,b,c,BD(d,19).a,BD(e,19).a)};_.Uk=function XWd(a,b,c,d,e,f){return new ASd(a,b,c,BD(d,19).a,BD(e,19).a,f)};var K6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1337);bcb(1338,$ve,{},YWd);_.Tk=function ZWd(a,b,c,d,e){return new BSd(a,b,c,BD(d,162).a,BD(e,162).a)};_.Uk=function $Wd(a,b,c,d,e,f){return new CSd(a,b,c,BD(d,162).a,BD(e,162).a,f)};var L6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1338);bcb(1339,$ve,{},_Wd);_.Tk=function aXd(a,b,c,d,e){return new GSd(a,b,c,BD(d,184).a,BD(e,184).a)};_.Uk=function bXd(a,b,c,d,e,f){return new HSd(a,b,c,BD(d,184).a,BD(e,184).a,f)};var M6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1339);bcb(1317,563,{},cXd);_.Sk=function dXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var O6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1317);bcb(1318,563,{},eXd);_.Sk=function fXd(a){};var P6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1318);bcb(770,563,{});_.Sj=function gXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function hXd(a,b,c,d){var e,f;if(a.Lg()&&a.Mg()){e=true;f=b.Ch(c);if(f==null){e=false;f=this.b}else PD(f)===PD(TVd)&&(f=null);if(d==null){if(this.c!=null){b.Dh(c,null);d=this.b}else{b.Dh(c,TVd)}}else{this.Sk(d);b.Dh(c,d)}Uhd(a,this.d.Uk(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.Dh(c,null):b.Dh(c,TVd)}else{this.Sk(d);b.Dh(c,d)}}};_.Vj=function iXd(a,b,c){var d,e;if(a.Lg()&&a.Mg()){d=true;e=b.Ch(c);if(e==null){d=false;e=this.b}else PD(e)===PD(TVd)&&(e=null);b.Eh(c);Uhd(a,this.d.Uk(a,2,this.e,e,this.b,d))}else{b.Eh(c)}};var S6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',770);bcb(1319,770,{},jXd);_.Sk=function kXd(a){if(!this.a.wj(a)){throw vbb(new Cdb(Yve+rb(a)+Zve+this.a+"'"))}};var Q6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1319);bcb(1320,770,{},lXd);_.Sk=function mXd(a){};var R6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1320);bcb(398,504,{},nXd);_.Pj=function pXd(a,b,c,d,e){var f,g,h,i,j;j=b.Ch(c);if(this.Kj()&&PD(j)===PD(TVd)){return null}else if(this.sk()&&d&&j!=null){h=BD(j,49);if(h.kh()){i=xid(a,h);if(h!=i){if(!fKd(this.a,i)){throw vbb(new Cdb(Yve+rb(i)+Zve+this.a+"'"))}b.Dh(c,j=i);if(this.rk()){f=BD(i,49);g=h.ih(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(h.Tg(),this.b),null,null);!f.eh()&&(g=f.gh(a,!this.b?-1-bLd(a.Tg(),this.e):bLd(f.Tg(),this.b),null,g));!!g&&g.Fi()}a.Lg()&&a.Mg()&&Uhd(a,new DSd(a,9,this.e,h,i))}}return j}else{return j}};_.Qj=function qXd(a,b,c,d,e){var f,g;g=b.Ch(c);PD(g)===PD(TVd)&&(g=null);b.Dh(c,d);if(this.bj()){if(PD(g)!==PD(d)&&g!=null){f=BD(g,49);e=f.ih(a,bLd(f.Tg(),this.b),null,e)}}else this.rk()&&g!=null&&(e=BD(g,49).ih(a,-1-bLd(a.Tg(),this.e),null,e));if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));e.Ei(new DSd(a,1,this.e,g,d))}return e};_.Rj=function rXd(a,b,c,d,e){var f;f=b.Ch(c);PD(f)===PD(TVd)&&(f=null);b.Eh(c);if(a.Lg()&&a.Mg()){!e&&(e=new Ixd(4));this.Kj()?e.Ei(new DSd(a,2,this.e,f,null)):e.Ei(new DSd(a,1,this.e,f,null))}return e};_.Sj=function sXd(a,b,c){var d;d=b.Ch(c);return d!=null};_.Tj=function tXd(a,b,c,d){var e,f,g,h,i;if(d!=null&&!fKd(this.a,d)){throw vbb(new Cdb(Yve+(JD(d,56)?gLd(BD(d,56).Tg()):idb(rb(d)))+Zve+this.a+"'"))}i=b.Ch(c);h=i!=null;this.Kj()&&PD(i)===PD(TVd)&&(i=null);g=null;if(this.bj()){if(PD(i)!==PD(d)){if(i!=null){e=BD(i,49);g=e.ih(a,bLd(e.Tg(),this.b),null,g)}if(d!=null){e=BD(d,49);g=e.gh(a,bLd(e.Tg(),this.b),null,g)}}}else if(this.rk()){if(PD(i)!==PD(d)){i!=null&&(g=BD(i,49).ih(a,-1-bLd(a.Tg(),this.e),null,g));d!=null&&(g=BD(d,49).gh(a,-1-bLd(a.Tg(),this.e),null,g))}}d==null&&this.Kj()?b.Dh(c,TVd):b.Dh(c,d);if(a.Lg()&&a.Mg()){f=new FSd(a,1,this.e,i,d,this.Kj()&&!h);if(!g){Uhd(a,f)}else{g.Ei(f);g.Fi()}}else !!g&&g.Fi()};_.Vj=function uXd(a,b,c){var d,e,f,g,h;h=b.Ch(c);g=h!=null;this.Kj()&&PD(h)===PD(TVd)&&(h=null);f=null;if(h!=null){if(this.bj()){d=BD(h,49);f=d.ih(a,bLd(d.Tg(),this.b),null,f)}else this.rk()&&(f=BD(h,49).ih(a,-1-bLd(a.Tg(),this.e),null,f))}b.Eh(c);if(a.Lg()&&a.Mg()){e=new FSd(a,this.Kj()?2:1,this.e,h,null,g);if(!f){Uhd(a,e)}else{f.Ei(e);f.Fi()}}else !!f&&f.Fi()};_.bj=function vXd(){return false};_.rk=function wXd(){return false};_.sk=function xXd(){return false};_.Kj=function yXd(){return false};var h7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',398);bcb(564,398,{},zXd);_.rk=function AXd(){return true};var _6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',564);bcb(1323,564,{},BXd);_.sk=function CXd(){return true};var U6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1323);bcb(772,564,{},DXd);_.Kj=function EXd(){return true};var W6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',772);bcb(1325,772,{},FXd);_.sk=function GXd(){return true};var V6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1325);bcb(640,564,{},HXd);_.bj=function IXd(){return true};var $6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',640);bcb(1324,640,{},JXd);_.sk=function KXd(){return true};var X6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1324);bcb(773,640,{},LXd);_.Kj=function MXd(){return true};var Z6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',773);bcb(1326,773,{},NXd);_.sk=function OXd(){return true};var Y6=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1326);bcb(641,398,{},PXd);_.sk=function QXd(){return true};var d7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',641);bcb(1327,641,{},RXd);_.Kj=function SXd(){return true};var a7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1327);bcb(774,641,{},TXd);_.bj=function UXd(){return true};var c7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',774);bcb(1328,774,{},VXd);_.Kj=function WXd(){return true};var b7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1328);bcb(1321,398,{},XXd);_.Kj=function YXd(){return true};var e7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1321);bcb(771,398,{},ZXd);_.bj=function $Xd(){return true};var g7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',771);bcb(1322,771,{},_Xd);_.Kj=function aYd(){return true};var f7=mdb(qte,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1322);bcb(775,565,Xve,dYd);_.Pk=function eYd(a){return new dYd(this.a,this.c,a)};_.dd=function fYd(){return this.b};_.Qk=function gYd(a,b,c){return bYd(this,a,this.b,c)};_.Rk=function hYd(a,b,c){return cYd(this,a,this.b,c)};var j7=mdb(qte,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',775);bcb(1329,1,zve,iYd);_.Wj=function jYd(a){return this.a};_.fj=function kYd(){return JD(this.a,95)?BD(this.a,95).fj():!this.a.dc()};_.Wb=function lYd(a){this.a.$b();this.a.Gc(BD(a,15))};_.Xj=function mYd(){JD(this.a,95)?BD(this.a,95).Xj():this.a.$b()};var k7=mdb(qte,'EStructuralFeatureImpl/SettingMany',1329);bcb(1330,565,Xve,nYd);_.Ok=function oYd(a){return new sYd((Q8d(),P8d),this.b.Ih(this.a,a))};_.dd=function pYd(){return null};_.Qk=function qYd(a,b,c){return c};_.Rk=function rYd(a,b,c){return c};var l7=mdb(qte,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1330);bcb(642,565,Xve,sYd);_.Ok=function tYd(a){return new sYd(this.c,a)};_.dd=function uYd(){return this.a};_.Qk=function vYd(a,b,c){return c};_.Rk=function wYd(a,b,c){return c};var m7=mdb(qte,'EStructuralFeatureImpl/SimpleFeatureMapEntry',642);bcb(391,497,oue,xYd);_.ri=function yYd(a){return KC(c5,Uhe,26,a,0,1)};_.ni=function zYd(){return false};var o7=mdb(qte,'ESuperAdapter/1',391);bcb(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},BYd);_._g=function CYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new KYd(this,j5,this)),this.a;}return bid(this,a-aLd((jGd(),iGd)),XKd((d=BD(Ajd(this,16),26),!d?iGd:d),a),b,c)};_.jh=function DYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new cUd(a5,this,0,3)),Txd(this.Ab,a,c);case 2:return !this.a&&(this.a=new KYd(this,j5,this)),Txd(this.a,a,c);}return e=BD(XKd((d=BD(Ajd(this,16),26),!d?(jGd(),iGd):d),b),66),e.Nj().Rj(this,yjd(this),b-aLd((jGd(),iGd)),a,c)};_.lh=function EYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return cid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};_.sh=function FYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);!this.Ab&&(this.Ab=new cUd(a5,this,0,3));ytd(this.Ab,BD(b,14));return;case 1:pnd(this,GD(b));return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);!this.a&&(this.a=new KYd(this,j5,this));ytd(this.a,BD(b,14));return;}did(this,a-aLd((jGd(),iGd)),XKd((c=BD(Ajd(this,16),26),!c?iGd:c),a),b)};_.zh=function GYd(){return jGd(),iGd};_.Bh=function HYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new cUd(a5,this,0,3));Uxd(this.Ab);return;case 1:pnd(this,null);return;case 2:!this.a&&(this.a=new KYd(this,j5,this));Uxd(this.a);return;}eid(this,a-aLd((jGd(),iGd)),XKd((b=BD(Ajd(this,16),26),!b?iGd:b),a))};var u7=mdb(qte,'ETypeParameterImpl',444);bcb(445,85,Pve,KYd);_.cj=function LYd(a,b){return IYd(this,BD(a,87),b)};_.dj=function MYd(a,b){return JYd(this,BD(a,87),b)};var q7=mdb(qte,'ETypeParameterImpl/1',445);bcb(634,43,fke,NYd);_.ec=function OYd(){return new RYd(this)};var t7=mdb(qte,'ETypeParameterImpl/2',634);bcb(556,eie,fie,RYd);_.Fc=function SYd(a){return PYd(this,BD(a,87))};_.Gc=function TYd(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=BD(c.Pb(),87);Rhb(this.a,b,'')==null&&(d=true)}return d};_.$b=function UYd(){Uhb(this.a)};_.Hc=function VYd(a){return Mhb(this.a,a)};_.Kc=function WYd(){var a;return a=new nib((new eib(this.a)).a),new ZYd(a)};_.Mc=function XYd(a){return QYd(this,a)};_.gc=function YYd(){return Vhb(this.a)};var s7=mdb(qte,'ETypeParameterImpl/2/1',556);bcb(557,1,aie,ZYd);_.Nb=function $Yd(a){Rrb(this,a)};_.Pb=function aZd(){return BD(lib(this.a).cd(),87)};_.Ob=function _Yd(){return this.a.b};_.Qb=function bZd(){mib(this.a)};var r7=mdb(qte,'ETypeParameterImpl/2/1/1',557);bcb(1276,43,fke,cZd);_._b=function dZd(a){return ND(a)?Qhb(this,a):!!irb(this.f,a)};_.xc=function eZd(a){var b,c;b=ND(a)?Phb(this,a):Wd(irb(this.f,a));if(JD(b,837)){c=BD(b,837);b=c._j();Rhb(this,BD(a,235),b);return b}else return b!=null?b:a==null?(g5d(),f5d):null};var w7=mdb(qte,'EValidatorRegistryImpl',1276);bcb(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},mZd);_.Ih=function nZd(a,b){switch(a.yj()){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 b==null?null:fcb(b);case 25:return gZd(b);case 27:return hZd(b);case 28:return iZd(b);case 29:return b==null?null:CQd(Pmd[0],BD(b,199));case 41:return b==null?'':hdb(BD(b,290));case 42:return fcb(b);case 50:return GD(b);default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function oZd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=bKd(a),m?HLd(m.Mh(),a):-1)),a.G){case 0:return c=new OJd,c;case 1:return b=new RHd,b;case 2:return d=new hLd,d;case 4:return e=new MPd,e;case 5:return f=new aQd,f;case 6:return g=new rQd,g;case 7:return h=new $md,h;case 10:return j=new MGd,j;case 11:return k=new SSd,k;case 12:return l=new eod,l;case 13:return n=new rUd,n;case 14:return o=new FUd,o;case 17:return p=new XUd,p;case 18:return i=new UQd,i;case 19:return q=new BYd,q;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function pZd(a,b){switch(a.yj()){case 20:return b==null?null:new tgb(b);case 21:return b==null?null:new Ygb(b);case 23:case 22:return b==null?null:fZd(b);case 26:case 24:return b==null?null:Scb(Icb(b,-128,127)<<24>>24);case 25:return Xmd(b);case 27:return jZd(b);case 28:return kZd(b);case 29:return lZd(b);case 32:case 31:return b==null?null:Hcb(b);case 38:case 37:return b==null?null:new Odb(b);case 40:case 39:return b==null?null:meb(Icb(b,Rie,Ohe));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Aeb(Jcb(b));case 49:case 48:return b==null?null:Web(Icb(b,awe,32767)<<16>>16);case 50:return b;default:throw vbb(new Wdb(tte+a.ne()+ute));}};var x7=mdb(qte,'EcoreFactoryImpl',1313);bcb(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},AZd);_.gb=false;_.hb=false;var rZd,sZd=false;var o8=mdb(qte,'EcorePackageImpl',547);bcb(1184,1,{837:1},EZd);_._j=function FZd(){return I6d(),H6d};var I7=mdb(qte,'EcorePackageImpl/1',1184);bcb(1193,1,nwe,GZd);_.wj=function HZd(a){return JD(a,147)};_.xj=function IZd(a){return KC(k5,Uhe,147,a,0,1)};var y7=mdb(qte,'EcorePackageImpl/10',1193);bcb(1194,1,nwe,JZd);_.wj=function KZd(a){return JD(a,191)};_.xj=function LZd(a){return KC(l5,Uhe,191,a,0,1)};var z7=mdb(qte,'EcorePackageImpl/11',1194);bcb(1195,1,nwe,MZd);_.wj=function NZd(a){return JD(a,56)};_.xj=function OZd(a){return KC(m5,Uhe,56,a,0,1)};var A7=mdb(qte,'EcorePackageImpl/12',1195);bcb(1196,1,nwe,PZd);_.wj=function QZd(a){return JD(a,399)};_.xj=function RZd(a){return KC(n5,Nve,59,a,0,1)};var B7=mdb(qte,'EcorePackageImpl/13',1196);bcb(1197,1,nwe,SZd);_.wj=function TZd(a){return JD(a,235)};_.xj=function UZd(a){return KC(o5,Uhe,235,a,0,1)};var C7=mdb(qte,'EcorePackageImpl/14',1197);bcb(1198,1,nwe,VZd);_.wj=function WZd(a){return JD(a,509)};_.xj=function XZd(a){return KC(p5,Uhe,2017,a,0,1)};var D7=mdb(qte,'EcorePackageImpl/15',1198);bcb(1199,1,nwe,YZd);_.wj=function ZZd(a){return JD(a,99)};_.xj=function $Zd(a){return KC(q5,Mve,18,a,0,1)};var E7=mdb(qte,'EcorePackageImpl/16',1199);bcb(1200,1,nwe,_Zd);_.wj=function a$d(a){return JD(a,170)};_.xj=function b$d(a){return KC(t5,Mve,170,a,0,1)};var F7=mdb(qte,'EcorePackageImpl/17',1200);bcb(1201,1,nwe,c$d);_.wj=function d$d(a){return JD(a,472)};_.xj=function e$d(a){return KC(v5,Uhe,472,a,0,1)};var G7=mdb(qte,'EcorePackageImpl/18',1201);bcb(1202,1,nwe,f$d);_.wj=function g$d(a){return JD(a,548)};_.xj=function h$d(a){return KC(x6,kve,548,a,0,1)};var H7=mdb(qte,'EcorePackageImpl/19',1202);bcb(1185,1,nwe,i$d);_.wj=function j$d(a){return JD(a,322)};_.xj=function k$d(a){return KC(b5,Mve,34,a,0,1)};var T7=mdb(qte,'EcorePackageImpl/2',1185);bcb(1203,1,nwe,l$d);_.wj=function m$d(a){return JD(a,241)};_.xj=function n$d(a){return KC(j5,Tve,87,a,0,1)};var J7=mdb(qte,'EcorePackageImpl/20',1203);bcb(1204,1,nwe,o$d);_.wj=function p$d(a){return JD(a,444)};_.xj=function q$d(a){return KC(u5,Uhe,836,a,0,1)};var K7=mdb(qte,'EcorePackageImpl/21',1204);bcb(1205,1,nwe,r$d);_.wj=function s$d(a){return KD(a)};_.xj=function t$d(a){return KC(wI,nie,476,a,8,1)};var L7=mdb(qte,'EcorePackageImpl/22',1205);bcb(1206,1,nwe,u$d);_.wj=function v$d(a){return JD(a,190)};_.xj=function w$d(a){return KC(SD,nie,190,a,0,2)};var M7=mdb(qte,'EcorePackageImpl/23',1206);bcb(1207,1,nwe,x$d);_.wj=function y$d(a){return JD(a,217)};_.xj=function z$d(a){return KC(xI,nie,217,a,0,1)};var N7=mdb(qte,'EcorePackageImpl/24',1207);bcb(1208,1,nwe,A$d);_.wj=function B$d(a){return JD(a,172)};_.xj=function C$d(a){return KC(yI,nie,172,a,0,1)};var O7=mdb(qte,'EcorePackageImpl/25',1208);bcb(1209,1,nwe,D$d);_.wj=function E$d(a){return JD(a,199)};_.xj=function F$d(a){return KC($J,nie,199,a,0,1)};var P7=mdb(qte,'EcorePackageImpl/26',1209);bcb(1210,1,nwe,G$d);_.wj=function H$d(a){return false};_.xj=function I$d(a){return KC(O4,Uhe,2110,a,0,1)};var Q7=mdb(qte,'EcorePackageImpl/27',1210);bcb(1211,1,nwe,J$d);_.wj=function K$d(a){return LD(a)};_.xj=function L$d(a){return KC(BI,nie,333,a,7,1)};var R7=mdb(qte,'EcorePackageImpl/28',1211);bcb(1212,1,nwe,M$d);_.wj=function N$d(a){return JD(a,58)};_.xj=function O$d(a){return KC(T4,eme,58,a,0,1)};var S7=mdb(qte,'EcorePackageImpl/29',1212);bcb(1186,1,nwe,P$d);_.wj=function Q$d(a){return JD(a,510)};_.xj=function R$d(a){return KC(a5,{3:1,4:1,5:1,1934:1},590,a,0,1)};var c8=mdb(qte,'EcorePackageImpl/3',1186);bcb(1213,1,nwe,S$d);_.wj=function T$d(a){return JD(a,573)};_.xj=function U$d(a){return KC(U4,Uhe,1940,a,0,1)};var U7=mdb(qte,'EcorePackageImpl/30',1213);bcb(1214,1,nwe,V$d);_.wj=function W$d(a){return JD(a,153)};_.xj=function X$d(a){return KC(O9,eme,153,a,0,1)};var V7=mdb(qte,'EcorePackageImpl/31',1214);bcb(1215,1,nwe,Y$d);_.wj=function Z$d(a){return JD(a,72)};_.xj=function $$d(a){return KC(E9,owe,72,a,0,1)};var W7=mdb(qte,'EcorePackageImpl/32',1215);bcb(1216,1,nwe,_$d);_.wj=function a_d(a){return JD(a,155)};_.xj=function b_d(a){return KC(FI,nie,155,a,0,1)};var X7=mdb(qte,'EcorePackageImpl/33',1216);bcb(1217,1,nwe,c_d);_.wj=function d_d(a){return JD(a,19)};_.xj=function e_d(a){return KC(JI,nie,19,a,0,1)};var Y7=mdb(qte,'EcorePackageImpl/34',1217);bcb(1218,1,nwe,f_d);_.wj=function g_d(a){return JD(a,290)};_.xj=function h_d(a){return KC(AI,Uhe,290,a,0,1)};var Z7=mdb(qte,'EcorePackageImpl/35',1218);bcb(1219,1,nwe,i_d);_.wj=function j_d(a){return JD(a,162)};_.xj=function k_d(a){return KC(MI,nie,162,a,0,1)};var $7=mdb(qte,'EcorePackageImpl/36',1219);bcb(1220,1,nwe,l_d);_.wj=function m_d(a){return JD(a,83)};_.xj=function n_d(a){return KC(DK,Uhe,83,a,0,1)};var _7=mdb(qte,'EcorePackageImpl/37',1220);bcb(1221,1,nwe,o_d);_.wj=function p_d(a){return JD(a,591)};_.xj=function q_d(a){return KC(v8,Uhe,591,a,0,1)};var a8=mdb(qte,'EcorePackageImpl/38',1221);bcb(1222,1,nwe,r_d);_.wj=function s_d(a){return false};_.xj=function t_d(a){return KC(u8,Uhe,2111,a,0,1)};var b8=mdb(qte,'EcorePackageImpl/39',1222);bcb(1187,1,nwe,u_d);_.wj=function v_d(a){return JD(a,88)};_.xj=function w_d(a){return KC(c5,Uhe,26,a,0,1)};var i8=mdb(qte,'EcorePackageImpl/4',1187);bcb(1223,1,nwe,x_d);_.wj=function y_d(a){return JD(a,184)};_.xj=function z_d(a){return KC(UI,nie,184,a,0,1)};var d8=mdb(qte,'EcorePackageImpl/40',1223);bcb(1224,1,nwe,A_d);_.wj=function B_d(a){return ND(a)};_.xj=function C_d(a){return KC(ZI,nie,2,a,6,1)};var e8=mdb(qte,'EcorePackageImpl/41',1224);bcb(1225,1,nwe,D_d);_.wj=function E_d(a){return JD(a,588)};_.xj=function F_d(a){return KC(X4,Uhe,588,a,0,1)};var f8=mdb(qte,'EcorePackageImpl/42',1225);bcb(1226,1,nwe,G_d);_.wj=function H_d(a){return false};_.xj=function I_d(a){return KC(V4,nie,2112,a,0,1)};var g8=mdb(qte,'EcorePackageImpl/43',1226);bcb(1227,1,nwe,J_d);_.wj=function K_d(a){return JD(a,42)};_.xj=function L_d(a){return KC(CK,zie,42,a,0,1)};var h8=mdb(qte,'EcorePackageImpl/44',1227);bcb(1188,1,nwe,M_d);_.wj=function N_d(a){return JD(a,138)};_.xj=function O_d(a){return KC(d5,Uhe,138,a,0,1)};var j8=mdb(qte,'EcorePackageImpl/5',1188);bcb(1189,1,nwe,P_d);_.wj=function Q_d(a){return JD(a,148)};_.xj=function R_d(a){return KC(f5,Uhe,148,a,0,1)};var k8=mdb(qte,'EcorePackageImpl/6',1189);bcb(1190,1,nwe,S_d);_.wj=function T_d(a){return JD(a,457)};_.xj=function U_d(a){return KC(h5,Uhe,671,a,0,1)};var l8=mdb(qte,'EcorePackageImpl/7',1190);bcb(1191,1,nwe,V_d);_.wj=function W_d(a){return JD(a,573)};_.xj=function X_d(a){return KC(g5,Uhe,678,a,0,1)};var m8=mdb(qte,'EcorePackageImpl/8',1191);bcb(1192,1,nwe,Y_d);_.wj=function Z_d(a){return JD(a,471)};_.xj=function $_d(a){return KC(i5,Uhe,471,a,0,1)};var n8=mdb(qte,'EcorePackageImpl/9',1192);bcb(1025,1982,ive,c0d);_.bi=function d0d(a,b){__d(this,BD(b,415))};_.fi=function e0d(a,b){a0d(this,a,BD(b,415))};var q8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1025);bcb(1026,143,fve,f0d);_.Ai=function g0d(){return this.a.a};var p8=mdb(qte,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1026);bcb(1053,1052,{},i0d);var t8=mdb('org.eclipse.emf.ecore.plugin','EcorePlugin',1053);var v8=odb(pwe,'Resource');bcb(781,1378,qwe);_.Yk=function m0d(a){};_.Zk=function n0d(a){};_.Vk=function o0d(){return !this.a&&(this.a=new z0d(this)),this.a};_.Wk=function p0d(a){var b,c,d,e,f;d=a.length;if(d>0){BCb(0,a.length);if(a.charCodeAt(0)==47){f=new Skb(4);e=1;for(b=1;b<d;++b){BCb(b,a.length);if(a.charCodeAt(b)==47){Ekb(f,e==b?'':a.substr(e,b-e));e=b+1}}Ekb(f,a.substr(e));return j0d(this,f)}else{BCb(d-1,a.length);if(a.charCodeAt(d-1)==63){c=lfb(a,wfb(63),d-2);c>0&&(a=a.substr(0,c))}}}return k0d(this,a)};_.Xk=function q0d(){return this.c};_.Ib=function r0d(){var a;return hdb(this.gm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var z8=mdb(rwe,'ResourceImpl',781);bcb(1379,781,qwe,s0d);var w8=mdb(rwe,'BinaryResourceImpl',1379);bcb(1169,694,pue);_.si=function v0d(a){return JD(a,56)?t0d(this,BD(a,56)):JD(a,591)?new Fyd(BD(a,591).Vk()):PD(a)===PD(this.f)?BD(a,14).Kc():(LCd(),KCd.a)};_.Ob=function w0d(){return u0d(this)};_.a=false;var z9=mdb(yve,'EcoreUtil/ContentTreeIterator',1169);bcb(1380,1169,pue,x0d);_.si=function y0d(a){return PD(a)===PD(this.f)?BD(a,15).Kc():new C6d(BD(a,56))};var x8=mdb(rwe,'ResourceImpl/5',1380);bcb(648,1994,Ove,z0d);_.Hc=function A0d(a){return this.i<=4?pud(this,a):JD(a,49)&&BD(a,49).Zg()==this.a};_.bi=function B0d(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.di=function C0d(a,b){a==0?this.a.b||(this.a.b=true,null):Atd(this,a,b)};_.fi=function D0d(a,b){};_.gi=function E0d(a,b,c){};_.aj=function F0d(){return 2};_.Ai=function G0d(){return this.a};_.bj=function H0d(){return true};_.cj=function I0d(a,b){var c;c=BD(a,49);b=c.wh(this.a,b);return b};_.dj=function J0d(a,b){var c;c=BD(a,49);return c.wh(null,b)};_.ej=function K0d(){return false};_.hi=function L0d(){return true};_.ri=function M0d(a){return KC(m5,Uhe,56,a,0,1)};_.ni=function N0d(){return false};var y8=mdb(rwe,'ResourceImpl/ContentsEList',648);bcb(957,1964,Lie,O0d);_.Zc=function P0d(a){return this.a._h(a)};_.gc=function Q0d(){return this.a.gc()};var A8=mdb(yve,'AbstractSequentialInternalEList/1',957);var K6d,L6d,M6d,N6d;bcb(624,1,{},y1d);var R0d,S0d;var G8=mdb(yve,'BasicExtendedMetaData',624);bcb(1160,1,{},C1d);_.$k=function D1d(){return null};_._k=function E1d(){this.a==-2&&A1d(this,W0d(this.d,this.b));return this.a};_.al=function F1d(){return null};_.bl=function G1d(){return mmb(),mmb(),jmb};_.ne=function H1d(){this.c==Gwe&&B1d(this,_0d(this.d,this.b));return this.c};_.cl=function I1d(){return 0};_.a=-2;_.c=Gwe;var C8=mdb(yve,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1160);bcb(1161,1,{},O1d);_.$k=function P1d(){this.a==(T0d(),R0d)&&J1d(this,V0d(this.f,this.b));return this.a};_._k=function Q1d(){return 0};_.al=function R1d(){this.c==(T0d(),R0d)&&K1d(this,Z0d(this.f,this.b));return this.c};_.bl=function S1d(){!this.d&&L1d(this,$0d(this.f,this.b));return this.d};_.ne=function T1d(){this.e==Gwe&&M1d(this,_0d(this.f,this.b));return this.e};_.cl=function U1d(){this.g==-2&&N1d(this,c1d(this.f,this.b));return this.g};_.e=Gwe;_.g=-2;var D8=mdb(yve,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1161);bcb(1159,1,{},Y1d);_.b=false;_.c=false;var E8=mdb(yve,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1159);bcb(1162,1,{},j2d);_.c=-2;_.e=Gwe;_.f=Gwe;var F8=mdb(yve,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1162);bcb(585,622,Pve,k2d);_.aj=function l2d(){return this.c};_.Fk=function m2d(){return false};_.li=function n2d(a,b){return b};_.c=0;var T8=mdb(yve,'EDataTypeEList',585);var O9=odb(yve,'FeatureMap');bcb(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},u3d);_.Vc=function v3d(a,b){o2d(this,a,BD(b,72))};_.Fc=function w3d(a){return r2d(this,BD(a,72))};_.Yh=function B3d(a){w2d(this,BD(a,72))};_.cj=function M3d(a,b){return O2d(this,BD(a,72),b)};_.dj=function N3d(a,b){return Q2d(this,BD(a,72),b)};_.ii=function P3d(a,b){return W2d(this,a,b)};_.li=function R3d(a,b){return _2d(this,a,BD(b,72))};_._c=function T3d(a,b){return c3d(this,a,BD(b,72))};_.jj=function X3d(a,b){return i3d(this,BD(a,72),b)};_.kj=function Y3d(a,b){return k3d(this,BD(a,72),b)};_.lj=function Z3d(a,b,c){return l3d(this,BD(a,72),BD(b,72),c)};_.oi=function _3d(a,b){return t3d(this,a,BD(b,72))};_.dl=function x3d(a,b){return q2d(this,a,b)};_.Wc=function y3d(a,b){var c,d,e,f,g,h,i,j,k;j=new zud(b.gc());for(e=b.Kc();e.Ob();){d=BD(e.Pb(),72);f=d.ak();if(T6d(this.e,f)){(!f.hi()||!E2d(this,f,d.dd())&&!pud(j,d))&&wtd(j,d)}else{k=S6d(this.e.Tg(),f);c=BD(this.g,119);g=true;for(h=0;h<this.i;++h){i=c[h];if(k.rl(i.ak())){BD(Gtd(this,h,d),72);g=false;break}}g&&wtd(j,d)}}return xtd(this,a,j)};_.Gc=function z3d(a){var b,c,d,e,f,g,h,i,j;i=new zud(a.gc());for(d=a.Kc();d.Ob();){c=BD(d.Pb(),72);e=c.ak();if(T6d(this.e,e)){(!e.hi()||!E2d(this,e,c.dd())&&!pud(i,c))&&wtd(i,c)}else{j=S6d(this.e.Tg(),e);b=BD(this.g,119);f=true;for(g=0;g<this.i;++g){h=b[g];if(j.rl(h.ak())){BD(Gtd(this,g,c),72);f=false;break}}f&&wtd(i,c)}}return ytd(this,i)};_.Wh=function A3d(a){this.j=-1;return Pxd(this,this.i,a)};_.el=function C3d(a,b,c){return x2d(this,a,b,c)};_.mk=function D3d(a,b){return B2d(this,a,b)};_.fl=function E3d(a,b,c){return C2d(this,a,b,c)};_.gl=function F3d(){return this};_.hl=function G3d(a,b){return K2d(this,a,b)};_.il=function H3d(a){return BD(qud(this,a),72).ak()};_.jl=function I3d(a){return BD(qud(this,a),72).dd()};_.kl=function J3d(){return this.b};_.bj=function K3d(){return true};_.ij=function L3d(){return true};_.ll=function O3d(a){return !R2d(this,a)};_.ri=function Q3d(a){return KC(D9,owe,332,a,0,1)};_.Gk=function S3d(a){return a3d(this,a)};_.Wb=function U3d(a){d3d(this,a)};_.ml=function V3d(a,b){f3d(this,a,b)};_.nl=function W3d(a){return g3d(this,a)};_.ol=function $3d(a){s3d(this,a)};var J8=mdb(yve,'BasicFeatureMap',75);bcb(1851,1,jie);_.Nb=function f4d(a){Rrb(this,a)};_.Rb=function e4d(b){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{p2d(this.e,this.b,this.a,b);this.d=this.e.j;d4d(this)}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.Ob=function g4d(){return b4d(this)};_.Sb=function h4d(){return c4d(this)};_.Pb=function i4d(){return d4d(this)};_.Tb=function j4d(){return this.a};_.Ub=function k4d(){var a;if(c4d(this)){a4d(this);this.g=--this.a;if(this.Lk()){a=b3d(this.e,this.b,this.c,this.a,this.j);this.j=a}this.i=0;return this.j}else{throw vbb(new utb)}};_.Vb=function l4d(){return this.a-1};_.Qb=function m4d(){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{Z2d(this.e,this.b,this.g);this.d=this.e.j;if(this.g<this.a){--this.a;--this.c}--this.g}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.Lk=function n4d(){return false};_.Wb=function o4d(b){if(this.g==-1){throw vbb(new Ydb)}a4d(this);try{e3d(this.e,this.b,this.g,b);this.d=this.e.j}catch(a){a=ubb(a);if(JD(a,73)){throw vbb(new Apb)}else throw vbb(a)}};_.a=0;_.c=0;_.d=0;_.f=false;_.g=0;_.i=0;var G9=mdb(yve,'FeatureMapUtil/BasicFeatureEIterator',1851);bcb(410,1851,jie,p4d);_.pl=function q4d(){var a,b,c;c=this.e.i;a=BD(this.e.g,119);while(this.c<c){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=2;return true}++this.c}this.i=1;this.g=-1;return false};_.ql=function r4d(){var a,b;a=BD(this.e.g,119);while(--this.c>=0){b=a[this.c];if(this.k.rl(b.ak())){this.j=this.f?b:b.dd();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var H8=mdb(yve,'BasicFeatureMap/FeatureEIterator',410);bcb(662,410,jie,s4d);_.Lk=function t4d(){return true};var I8=mdb(yve,'BasicFeatureMap/ResolvingFeatureEIterator',662);bcb(955,486,Vve,u4d);_.Gi=function v4d(){return this};var M8=mdb(yve,'EContentsEList/1',955);bcb(956,486,Vve,w4d);_.Lk=function x4d(){return false};var N8=mdb(yve,'EContentsEList/2',956);bcb(954,279,Wve,y4d);_.Nk=function z4d(a){};_.Ob=function A4d(){return false};_.Sb=function B4d(){return false};var O8=mdb(yve,'EContentsEList/FeatureIteratorImpl/1',954);bcb(825,585,Pve,C4d);_.ci=function D4d(){this.a=true};_.fj=function E4d(){return this.a};_.Xj=function F4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var S8=mdb(yve,'EDataTypeEList/Unsettable',825);bcb(1849,585,Pve,G4d);_.hi=function H4d(){return true};var V8=mdb(yve,'EDataTypeUniqueEList',1849);bcb(1850,825,Pve,I4d);_.hi=function J4d(){return true};var U8=mdb(yve,'EDataTypeUniqueEList/Unsettable',1850);bcb(139,85,Pve,K4d);_.Ek=function L4d(){return true};_.li=function M4d(a,b){return ILd(this,a,BD(b,56))};var W8=mdb(yve,'EObjectContainmentEList/Resolving',139);bcb(1163,545,Pve,N4d);_.Ek=function O4d(){return true};_.li=function P4d(a,b){return ILd(this,a,BD(b,56))};var X8=mdb(yve,'EObjectContainmentEList/Unsettable/Resolving',1163);bcb(748,16,Pve,Q4d);_.ci=function R4d(){this.a=true};_.fj=function S4d(){return this.a};_.Xj=function T4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var a9=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable',748);bcb(1173,748,Pve,U4d);_.Ek=function V4d(){return true};_.li=function W4d(a,b){return ILd(this,a,BD(b,56))};var _8=mdb(yve,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1173);bcb(743,496,Pve,X4d);_.ci=function Y4d(){this.a=true};_.fj=function Z4d(){return this.a};_.Xj=function $4d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var c9=mdb(yve,'EObjectEList/Unsettable',743);bcb(328,496,Pve,_4d);_.Ek=function a5d(){return true};_.li=function b5d(a,b){return ILd(this,a,BD(b,56))};var f9=mdb(yve,'EObjectResolvingEList',328);bcb(1641,743,Pve,c5d);_.Ek=function d5d(){return true};_.li=function e5d(a,b){return ILd(this,a,BD(b,56))};var e9=mdb(yve,'EObjectResolvingEList/Unsettable',1641);bcb(1381,1,{},h5d);var f5d;var g9=mdb(yve,'EObjectValidator',1381);bcb(546,496,Pve,i5d);_.zk=function j5d(){return this.d};_.Ak=function k5d(){return this.b};_.bj=function l5d(){return true};_.Dk=function m5d(){return true};_.b=0;var k9=mdb(yve,'EObjectWithInverseEList',546);bcb(1176,546,Pve,n5d);_.Ck=function o5d(){return true};var h9=mdb(yve,'EObjectWithInverseEList/ManyInverse',1176);bcb(625,546,Pve,p5d);_.ci=function q5d(){this.a=true};_.fj=function r5d(){return this.a};_.Xj=function s5d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var j9=mdb(yve,'EObjectWithInverseEList/Unsettable',625);bcb(1175,625,Pve,t5d);_.Ck=function u5d(){return true};var i9=mdb(yve,'EObjectWithInverseEList/Unsettable/ManyInverse',1175);bcb(749,546,Pve,v5d);_.Ek=function w5d(){return true};_.li=function x5d(a,b){return ILd(this,a,BD(b,56))};var o9=mdb(yve,'EObjectWithInverseResolvingEList',749);bcb(31,749,Pve,y5d);_.Ck=function z5d(){return true};var l9=mdb(yve,'EObjectWithInverseResolvingEList/ManyInverse',31);bcb(750,625,Pve,A5d);_.Ek=function B5d(){return true};_.li=function C5d(a,b){return ILd(this,a,BD(b,56))};var n9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable',750);bcb(1174,750,Pve,D5d);_.Ck=function E5d(){return true};var m9=mdb(yve,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1174);bcb(1164,622,Pve);_.ai=function F5d(){return (this.b&1792)==0};_.ci=function G5d(){this.b|=1};_.Bk=function H5d(){return (this.b&4)!=0};_.bj=function I5d(){return (this.b&40)!=0};_.Ck=function J5d(){return (this.b&16)!=0};_.Dk=function K5d(){return (this.b&8)!=0};_.Ek=function L5d(){return (this.b&Dve)!=0};_.rk=function M5d(){return (this.b&32)!=0};_.Fk=function N5d(){return (this.b&zte)!=0};_.wj=function O5d(a){return !this.d?this.ak().Yj().wj(a):qEd(this.d,a)};_.fj=function P5d(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.hi=function Q5d(){return (this.b&128)!=0};_.Xj=function S5d(){var a;Uxd(this);if((this.b&2)!=0){if(oid(this.e)){a=(this.b&1)!=0;this.b&=-2;GLd(this,new qSd(this.e,2,bLd(this.e.Tg(),this.ak()),a,false))}else{this.b&=-2}}};_.ni=function T5d(){return (this.b&1536)==0};_.b=0;var q9=mdb(yve,'EcoreEList/Generic',1164);bcb(1165,1164,Pve,U5d);_.ak=function V5d(){return this.a};var p9=mdb(yve,'EcoreEList/Dynamic',1165);bcb(747,63,oue,W5d);_.ri=function X5d(a){return izd(this.a.a,a)};var u9=mdb(yve,'EcoreEMap/1',747);bcb(746,85,Pve,Y5d);_.bi=function Z5d(a,b){uAd(this.b,BD(b,133))};_.di=function $5d(a,b){tAd(this.b)};_.ei=function _5d(a,b,c){var d;++(d=this.b,BD(b,133),d).e};_.fi=function a6d(a,b){vAd(this.b,BD(b,133))};_.gi=function b6d(a,b,c){vAd(this.b,BD(c,133));PD(c)===PD(b)&&BD(c,133).Th(CAd(BD(b,133).cd()));uAd(this.b,BD(b,133))};var v9=mdb(yve,'EcoreEMap/DelegateEObjectContainmentEList',746);bcb(1171,151,Ave,c6d);var x9=mdb(yve,'EcoreEMap/Unsettable',1171);bcb(1172,746,Pve,d6d);_.ci=function e6d(){this.a=true};_.fj=function f6d(){return this.a};_.Xj=function g6d(){var a;Uxd(this);if(oid(this.e)){a=this.a;this.a=false;Uhd(this.e,new qSd(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var w9=mdb(yve,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1172);bcb(1168,228,fke,A6d);_.a=false;_.b=false;var A9=mdb(yve,'EcoreUtil/Copier',1168);bcb(745,1,aie,C6d);_.Nb=function D6d(a){Rrb(this,a)};_.Ob=function E6d(){return B6d(this)};_.Pb=function F6d(){var a;B6d(this);a=this.b;this.b=null;return a};_.Qb=function G6d(){this.a.Qb()};var B9=mdb(yve,'EcoreUtil/ProperContentIterator',745);bcb(1382,1381,{},J6d);var H6d;var C9=mdb(yve,'EcoreValidator',1382);var P6d;var N9=odb(yve,'FeatureMapUtil/Validator');bcb(1260,1,{1942:1},U6d);_.rl=function V6d(a){return true};var F9=mdb(yve,'FeatureMapUtil/1',1260);bcb(757,1,{1942:1},Z6d);_.rl=function $6d(a){var b;if(this.c==a)return true;b=DD(Ohb(this.a,a));if(b==null){if(Y6d(this,a)){_6d(this.a,a,(Bcb(),Acb));return true}else{_6d(this.a,a,(Bcb(),zcb));return false}}else{return b==(Bcb(),Acb)}};_.e=false;var W6d;var I9=mdb(yve,'FeatureMapUtil/BasicValidator',757);bcb(758,43,fke,a7d);var H9=mdb(yve,'FeatureMapUtil/BasicValidator/Cache',758);bcb(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},f7d);_.Vc=function g7d(a,b){p2d(this.c,this.b,a,b)};_.Fc=function h7d(a){return q2d(this.c,this.b,a)};_.Wc=function i7d(a,b){return s2d(this.c,this.b,a,b)};_.Gc=function j7d(a){return b7d(this,a)};_.Xh=function k7d(a,b){u2d(this.c,this.b,a,b)};_.lk=function l7d(a,b){return x2d(this.c,this.b,a,b)};_.pi=function m7d(a){return J2d(this.c,this.b,a,false)};_.Zh=function n7d(){return y2d(this.c,this.b)};_.$h=function o7d(){return z2d(this.c,this.b)};_._h=function p7d(a){return A2d(this.c,this.b,a)};_.mk=function q7d(a,b){return c7d(this,a,b)};_.$b=function r7d(){d7d(this)};_.Hc=function s7d(a){return E2d(this.c,this.b,a)};_.Ic=function t7d(a){return G2d(this.c,this.b,a)};_.Xb=function u7d(a){return J2d(this.c,this.b,a,true)};_.Wj=function v7d(a){return this};_.Xc=function w7d(a){return L2d(this.c,this.b,a)};_.dc=function x7d(){return e7d(this)};_.fj=function y7d(){return !R2d(this.c,this.b)};_.Kc=function z7d(){return S2d(this.c,this.b)};_.Yc=function A7d(){return U2d(this.c,this.b)};_.Zc=function B7d(a){return V2d(this.c,this.b,a)};_.ii=function C7d(a,b){return X2d(this.c,this.b,a,b)};_.ji=function D7d(a,b){Y2d(this.c,this.b,a,b)};_.$c=function E7d(a){return Z2d(this.c,this.b,a)};_.Mc=function F7d(a){return $2d(this.c,this.b,a)};_._c=function G7d(a,b){return e3d(this.c,this.b,a,b)};_.Wb=function H7d(a){D2d(this.c,this.b);b7d(this,BD(a,15))};_.gc=function I7d(){return n3d(this.c,this.b)};_.Pc=function J7d(){return o3d(this.c,this.b)};_.Qc=function K7d(a){return q3d(this.c,this.b,a)};_.Ib=function L7d(){var a,b;b=new Hfb;b.a+='[';for(a=y2d(this.c,this.b);b4d(a);){Efb(b,xfb(d4d(a)));b4d(a)&&(b.a+=She,b)}b.a+=']';return b.a};_.Xj=function M7d(){D2d(this.c,this.b)};var J9=mdb(yve,'FeatureMapUtil/FeatureEList',501);bcb(627,36,fve,O7d);_.yi=function P7d(a){return N7d(this,a)};_.Di=function Q7d(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.g=a.zi();a.xi()==1&&(this.d=1);return true}break}case 3:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=5;b=new zud(2);wtd(b,this.g);wtd(b,a.zi());this.g=b;return true}break}}break}case 5:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.g,14);c.Fc(a.zi());return true}break}}break}case 4:{e=a.xi();switch(e){case 3:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=1;this.g=a.zi();return true}break}case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){this.d=6;h=new zud(2);wtd(h,this.n);wtd(h,a.Bi());this.n=h;g=OC(GC(WD,1),oje,25,15,[this.o,a.Ci()]);this.g=g;return true}break}}break}case 6:{e=a.xi();switch(e){case 4:{f=a.Ai();if(PD(f)===PD(this.c)&&N7d(this,null)==a.yi(null)){c=BD(this.n,14);c.Fc(a.Bi());g=BD(this.g,48);d=KC(WD,oje,25,g.length+1,15,1);$fb(g,0,d,0,g.length);d[g.length]=a.Ci();this.g=d;return true}break}}break}}return false};var K9=mdb(yve,'FeatureMapUtil/FeatureENotificationImpl',627);bcb(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},R7d);_.dl=function S7d(a,b){return q2d(this.c,a,b)};_.el=function T7d(a,b,c){return x2d(this.c,a,b,c)};_.fl=function U7d(a,b,c){return C2d(this.c,a,b,c)};_.gl=function V7d(){return this};_.hl=function W7d(a,b){return K2d(this.c,a,b)};_.il=function X7d(a){return BD(J2d(this.c,this.b,a,false),72).ak()};_.jl=function Y7d(a){return BD(J2d(this.c,this.b,a,false),72).dd()};_.kl=function Z7d(){return this.a};_.ll=function $7d(a){return !R2d(this.c,a)};_.ml=function _7d(a,b){f3d(this.c,a,b)};_.nl=function a8d(a){return g3d(this.c,a)};_.ol=function b8d(a){s3d(this.c,a)};var L9=mdb(yve,'FeatureMapUtil/FeatureFeatureMap',552);bcb(1259,1,zve,c8d);_.Wj=function d8d(a){return J2d(this.b,this.a,-1,a)};_.fj=function e8d(){return !R2d(this.b,this.a)};_.Wb=function f8d(a){f3d(this.b,this.a,a)};_.Xj=function g8d(){D2d(this.b,this.a)};var M9=mdb(yve,'FeatureMapUtil/FeatureValue',1259);var h8d,i8d,j8d,k8d,l8d;var Q9=odb(Iwe,'AnyType');bcb(666,60,Tie,n8d);var R9=mdb(Iwe,'InvalidDatatypeValueException',666);var S9=odb(Iwe,Jwe);var T9=odb(Iwe,Kwe);var U9=odb(Iwe,Lwe);var o8d;var q8d;var s8d,t8d,u8d,v8d,w8d,x8d,y8d,z8d,A8d,B8d,C8d,D8d,E8d,F8d,G8d,H8d,I8d,J8d,K8d,L8d,M8d,N8d,O8d,P8d;bcb(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},R8d);_._g=function S8d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;}return bid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function T8d(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new u3d(this,0)),B2d(this.c,a,c);case 1:return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),69)).mk(a,c);case 2:return !this.b&&(this.b=new u3d(this,2)),B2d(this.b,a,c);}return d=BD(XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd(this.zh()),a,c)};_.lh=function U8d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;}return cid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function V8d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;}did(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function W8d(){return Q8d(),s8d};_.Bh=function X8d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;}eid(this,a-aLd(this.zh()),XKd((this.j&2)==0?this.zh():(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function Y8d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.c);a.a+=', anyAttribute: ';Dfb(a,this.b);a.a+=')';return a.a};var V9=mdb(Mwe,'AnyTypeImpl',830);bcb(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},_8d);_._g=function a9d(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return bid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function b9d(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return cid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function c9d(a,b){switch(a){case 0:Z8d(this,GD(b));return;case 1:$8d(this,GD(b));return;}did(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function d9d(){return Q8d(),F8d};_.Bh=function e9d(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}eid(this,a-aLd((Q8d(),F8d)),XKd((this.j&2)==0?F8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function f9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (data: ';Efb(a,this.a);a.a+=', target: ';Efb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var W9=mdb(Mwe,'ProcessingInstructionImpl',667);bcb(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},i9d);_._g=function j9d(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new u3d(this,0)),this.c;return !this.c&&(this.c=new u3d(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153);return (!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).kl();case 2:if(c)return !this.b&&(this.b=new u3d(this,2)),this.b;return !this.b&&(this.b=new u3d(this,2)),this.b.b;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true));case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))));case 5:return this.a;}return bid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.lh=function k9d(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))!=null;case 4:return j6d(this.a,(!this.c&&(this.c=new u3d(this,0)),GD(K2d(this.c,(Q8d(),I8d),true))))!=null;case 5:return !!this.a;}return cid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function l9d(a,b){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));d3d(this.c,b);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(BD(T2d(this.c,(Q8d(),t8d)),153),215)).Wb(b);return;case 2:!this.b&&(this.b=new u3d(this,2));d3d(this.b,b);return;case 3:h9d(this,GD(b));return;case 4:h9d(this,h6d(this.a,b));return;case 5:g9d(this,BD(b,148));return;}did(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function m9d(){return Q8d(),H8d};_.Bh=function n9d(a){switch(a){case 0:!this.c&&(this.c=new u3d(this,0));Uxd(this.c);return;case 1:(!this.c&&(this.c=new u3d(this,0)),BD(T2d(this.c,(Q8d(),t8d)),153)).$b();return;case 2:!this.b&&(this.b=new u3d(this,2));Uxd(this.b);return;case 3:!this.c&&(this.c=new u3d(this,0));f3d(this.c,(Q8d(),I8d),null);return;case 4:h9d(this,h6d(this.a,null));return;case 5:this.a=null;return;}eid(this,a-aLd((Q8d(),H8d)),XKd((this.j&2)==0?H8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};var X9=mdb(Mwe,'SimpleAnyTypeImpl',668);bcb(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},o9d);_._g=function p9d(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new u3d(this,0)),this.a;return !this.a&&(this.a=new u3d(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),this.b):(!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),FAd(this.b));case 2:return c?(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),this.c):(!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),FAd(this.c));case 3:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),L8d));case 4:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),M8d));case 5:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),O8d));case 6:return !this.a&&(this.a=new u3d(this,0)),T2d(this.a,(Q8d(),P8d));}return bid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b,c)};_.jh=function q9d(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new u3d(this,0)),B2d(this.a,a,c);case 1:return !this.b&&(this.b=new dId((jGd(),fGd),x6,this,1)),bId(this.b,a,c);case 2:return !this.c&&(this.c=new dId((jGd(),fGd),x6,this,2)),bId(this.c,a,c);case 5:return !this.a&&(this.a=new u3d(this,0)),c7d(T2d(this.a,(Q8d(),O8d)),a,c);}return d=BD(XKd((this.j&2)==0?(Q8d(),K8d):(!this.k&&(this.k=new HGd),this.k).ck(),b),66),d.Nj().Rj(this,Aid(this),b-aLd((Q8d(),K8d)),a,c)};_.lh=function r9d(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),L8d)));case 4:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),M8d)));case 5:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),O8d)));case 6:return !this.a&&(this.a=new u3d(this,0)),!e7d(T2d(this.a,(Q8d(),P8d)));}return cid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.sh=function s9d(a,b){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));d3d(this.a,b);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));cId(this.b,b);return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));cId(this.c,b);return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,L8d),BD(b,14));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,M8d),BD(b,14));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,O8d),BD(b,14));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));!this.a&&(this.a=new u3d(this,0));b7d(T2d(this.a,P8d),BD(b,14));return;}did(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a),b)};_.zh=function t9d(){return Q8d(),K8d};_.Bh=function u9d(a){switch(a){case 0:!this.a&&(this.a=new u3d(this,0));Uxd(this.a);return;case 1:!this.b&&(this.b=new dId((jGd(),fGd),x6,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new dId((jGd(),fGd),x6,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),L8d)));return;case 4:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),M8d)));return;case 5:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),O8d)));return;case 6:!this.a&&(this.a=new u3d(this,0));d7d(T2d(this.a,(Q8d(),P8d)));return;}eid(this,a-aLd((Q8d(),K8d)),XKd((this.j&2)==0?K8d:(!this.k&&(this.k=new HGd),this.k).ck(),a))};_.Ib=function v9d(){var a;if((this.j&4)!=0)return Eid(this);a=new Jfb(Eid(this));a.a+=' (mixed: ';Dfb(a,this.a);a.a+=')';return a.a};var Y9=mdb(Mwe,'XMLTypeDocumentRootImpl',669);bcb(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},U9d);_.Ih=function V9d(a,b){switch(a.yj()){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 b==null?null:fcb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return GD(b);case 6:return C9d(BD(b,190));case 12:case 47:case 49:case 11:return Vmd(this,a,b);case 13:return b==null?null:qgb(BD(b,240));case 15:case 14:return b==null?null:D9d(Edb(ED(b)));case 17:return E9d((Q8d(),b));case 18:return E9d(b);case 21:case 20:return b==null?null:F9d(BD(b,155).a);case 27:return G9d(BD(b,190));case 30:return H9d((Q8d(),BD(b,15)));case 31:return H9d(BD(b,15));case 40:return K9d((Q8d(),b));case 42:return I9d((Q8d(),b));case 43:return I9d(b);case 59:case 48:return J9d((Q8d(),b));default:throw vbb(new Wdb(tte+a.ne()+ute));}};_.Jh=function W9d(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=bKd(a),c?HLd(c.Mh(),a):-1)),a.G){case 0:return b=new R8d,b;case 1:return d=new _8d,d;case 2:return e=new i9d,e;case 3:return f=new o9d,f;default:throw vbb(new Wdb(xte+a.zb+ute));}};_.Kh=function X9d(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.yj()){case 5:case 52:case 4:return b;case 6:return L9d(b);case 8:case 7:return b==null?null:B9d(b);case 9:return b==null?null:Scb(Icb((d=Qge(b,true),d.length>0&&(BCb(0,d.length),d.charCodeAt(0)==43)?d.substr(1):d),-128,127)<<24>>24);case 10:return b==null?null:Scb(Icb((e=Qge(b,true),e.length>0&&(BCb(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e),-128,127)<<24>>24);case 11:return GD(Wmd(this,(Q8d(),w8d),b));case 12:return GD(Wmd(this,(Q8d(),x8d),b));case 13:return b==null?null:new tgb(Qge(b,true));case 15:case 14:return M9d(b);case 16:return GD(Wmd(this,(Q8d(),y8d),b));case 17:return N9d((Q8d(),b));case 18:return N9d(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Qge(b,true);case 21:case 20:return O9d(b);case 22:return GD(Wmd(this,(Q8d(),z8d),b));case 23:return GD(Wmd(this,(Q8d(),A8d),b));case 24:return GD(Wmd(this,(Q8d(),B8d),b));case 25:return GD(Wmd(this,(Q8d(),C8d),b));case 26:return GD(Wmd(this,(Q8d(),D8d),b));case 27:return P9d(b);case 30:return Q9d((Q8d(),b));case 31:return Q9d(b);case 32:return b==null?null:meb(Icb((k=Qge(b,true),k.length>0&&(BCb(0,k.length),k.charCodeAt(0)==43)?k.substr(1):k),Rie,Ohe));case 33:return b==null?null:new Ygb((l=Qge(b,true),l.length>0&&(BCb(0,l.length),l.charCodeAt(0)==43)?l.substr(1):l));case 34:return b==null?null:meb(Icb((m=Qge(b,true),m.length>0&&(BCb(0,m.length),m.charCodeAt(0)==43)?m.substr(1):m),Rie,Ohe));case 36:return b==null?null:Aeb(Jcb((n=Qge(b,true),n.length>0&&(BCb(0,n.length),n.charCodeAt(0)==43)?n.substr(1):n)));case 37:return b==null?null:Aeb(Jcb((o=Qge(b,true),o.length>0&&(BCb(0,o.length),o.charCodeAt(0)==43)?o.substr(1):o)));case 40:return T9d((Q8d(),b));case 42:return R9d((Q8d(),b));case 43:return R9d(b);case 44:return b==null?null:new Ygb((p=Qge(b,true),p.length>0&&(BCb(0,p.length),p.charCodeAt(0)==43)?p.substr(1):p));case 45:return b==null?null:new Ygb((q=Qge(b,true),q.length>0&&(BCb(0,q.length),q.charCodeAt(0)==43)?q.substr(1):q));case 46:return Qge(b,false);case 47:return GD(Wmd(this,(Q8d(),E8d),b));case 59:case 48:return S9d((Q8d(),b));case 49:return GD(Wmd(this,(Q8d(),G8d),b));case 50:return b==null?null:Web(Icb((r=Qge(b,true),r.length>0&&(BCb(0,r.length),r.charCodeAt(0)==43)?r.substr(1):r),awe,32767)<<16>>16);case 51:return b==null?null:Web(Icb((f=Qge(b,true),f.length>0&&(BCb(0,f.length),f.charCodeAt(0)==43)?f.substr(1):f),awe,32767)<<16>>16);case 53:return GD(Wmd(this,(Q8d(),J8d),b));case 55:return b==null?null:Web(Icb((g=Qge(b,true),g.length>0&&(BCb(0,g.length),g.charCodeAt(0)==43)?g.substr(1):g),awe,32767)<<16>>16);case 56:return b==null?null:Web(Icb((h=Qge(b,true),h.length>0&&(BCb(0,h.length),h.charCodeAt(0)==43)?h.substr(1):h),awe,32767)<<16>>16);case 57:return b==null?null:Aeb(Jcb((i=Qge(b,true),i.length>0&&(BCb(0,i.length),i.charCodeAt(0)==43)?i.substr(1):i)));case 58:return b==null?null:Aeb(Jcb((j=Qge(b,true),j.length>0&&(BCb(0,j.length),j.charCodeAt(0)==43)?j.substr(1):j)));case 60:return b==null?null:meb(Icb((c=Qge(b,true),c.length>0&&(BCb(0,c.length),c.charCodeAt(0)==43)?c.substr(1):c),Rie,Ohe));case 61:return b==null?null:meb(Icb(Qge(b,true),Rie,Ohe));default:throw vbb(new Wdb(tte+a.ne()+ute));}};var w9d,x9d,y9d,z9d;var Z9=mdb(Mwe,'XMLTypeFactoryImpl',1919);bcb(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},cae);_.N=false;_.O=false;var Z9d=false;var Yab=mdb(Mwe,'XMLTypePackageImpl',586);bcb(1852,1,{837:1},fae);_._j=function gae(){return Uge(),Tge};var iab=mdb(Mwe,'XMLTypePackageImpl/1',1852);bcb(1861,1,nwe,hae);_.wj=function iae(a){return ND(a)};_.xj=function jae(a){return KC(ZI,nie,2,a,6,1)};var $9=mdb(Mwe,'XMLTypePackageImpl/10',1861);bcb(1862,1,nwe,kae);_.wj=function lae(a){return ND(a)};_.xj=function mae(a){return KC(ZI,nie,2,a,6,1)};var _9=mdb(Mwe,'XMLTypePackageImpl/11',1862);bcb(1863,1,nwe,nae);_.wj=function oae(a){return ND(a)};_.xj=function pae(a){return KC(ZI,nie,2,a,6,1)};var aab=mdb(Mwe,'XMLTypePackageImpl/12',1863);bcb(1864,1,nwe,qae);_.wj=function rae(a){return LD(a)};_.xj=function sae(a){return KC(BI,nie,333,a,7,1)};var bab=mdb(Mwe,'XMLTypePackageImpl/13',1864);bcb(1865,1,nwe,tae);_.wj=function uae(a){return ND(a)};_.xj=function vae(a){return KC(ZI,nie,2,a,6,1)};var cab=mdb(Mwe,'XMLTypePackageImpl/14',1865);bcb(1866,1,nwe,wae);_.wj=function xae(a){return JD(a,15)};_.xj=function yae(a){return KC(yK,eme,15,a,0,1)};var dab=mdb(Mwe,'XMLTypePackageImpl/15',1866);bcb(1867,1,nwe,zae);_.wj=function Aae(a){return JD(a,15)};_.xj=function Bae(a){return KC(yK,eme,15,a,0,1)};var eab=mdb(Mwe,'XMLTypePackageImpl/16',1867);bcb(1868,1,nwe,Cae);_.wj=function Dae(a){return ND(a)};_.xj=function Eae(a){return KC(ZI,nie,2,a,6,1)};var fab=mdb(Mwe,'XMLTypePackageImpl/17',1868);bcb(1869,1,nwe,Fae);_.wj=function Gae(a){return JD(a,155)};_.xj=function Hae(a){return KC(FI,nie,155,a,0,1)};var gab=mdb(Mwe,'XMLTypePackageImpl/18',1869);bcb(1870,1,nwe,Iae);_.wj=function Jae(a){return ND(a)};_.xj=function Kae(a){return KC(ZI,nie,2,a,6,1)};var hab=mdb(Mwe,'XMLTypePackageImpl/19',1870);bcb(1853,1,nwe,Lae);_.wj=function Mae(a){return JD(a,843)};_.xj=function Nae(a){return KC(Q9,Uhe,843,a,0,1)};var tab=mdb(Mwe,'XMLTypePackageImpl/2',1853);bcb(1871,1,nwe,Oae);_.wj=function Pae(a){return ND(a)};_.xj=function Qae(a){return KC(ZI,nie,2,a,6,1)};var jab=mdb(Mwe,'XMLTypePackageImpl/20',1871);bcb(1872,1,nwe,Rae);_.wj=function Sae(a){return ND(a)};_.xj=function Tae(a){return KC(ZI,nie,2,a,6,1)};var kab=mdb(Mwe,'XMLTypePackageImpl/21',1872);bcb(1873,1,nwe,Uae);_.wj=function Vae(a){return ND(a)};_.xj=function Wae(a){return KC(ZI,nie,2,a,6,1)};var lab=mdb(Mwe,'XMLTypePackageImpl/22',1873);bcb(1874,1,nwe,Xae);_.wj=function Yae(a){return ND(a)};_.xj=function Zae(a){return KC(ZI,nie,2,a,6,1)};var mab=mdb(Mwe,'XMLTypePackageImpl/23',1874);bcb(1875,1,nwe,$ae);_.wj=function _ae(a){return JD(a,190)};_.xj=function abe(a){return KC(SD,nie,190,a,0,2)};var nab=mdb(Mwe,'XMLTypePackageImpl/24',1875);bcb(1876,1,nwe,bbe);_.wj=function cbe(a){return ND(a)};_.xj=function dbe(a){return KC(ZI,nie,2,a,6,1)};var oab=mdb(Mwe,'XMLTypePackageImpl/25',1876);bcb(1877,1,nwe,ebe);_.wj=function fbe(a){return ND(a)};_.xj=function gbe(a){return KC(ZI,nie,2,a,6,1)};var pab=mdb(Mwe,'XMLTypePackageImpl/26',1877);bcb(1878,1,nwe,hbe);_.wj=function ibe(a){return JD(a,15)};_.xj=function jbe(a){return KC(yK,eme,15,a,0,1)};var qab=mdb(Mwe,'XMLTypePackageImpl/27',1878);bcb(1879,1,nwe,kbe);_.wj=function lbe(a){return JD(a,15)};_.xj=function mbe(a){return KC(yK,eme,15,a,0,1)};var rab=mdb(Mwe,'XMLTypePackageImpl/28',1879);bcb(1880,1,nwe,nbe);_.wj=function obe(a){return ND(a)};_.xj=function pbe(a){return KC(ZI,nie,2,a,6,1)};var sab=mdb(Mwe,'XMLTypePackageImpl/29',1880);bcb(1854,1,nwe,qbe);_.wj=function rbe(a){return JD(a,667)};_.xj=function sbe(a){return KC(S9,Uhe,2021,a,0,1)};var Eab=mdb(Mwe,'XMLTypePackageImpl/3',1854);bcb(1881,1,nwe,tbe);_.wj=function ube(a){return JD(a,19)};_.xj=function vbe(a){return KC(JI,nie,19,a,0,1)};var uab=mdb(Mwe,'XMLTypePackageImpl/30',1881);bcb(1882,1,nwe,wbe);_.wj=function xbe(a){return ND(a)};_.xj=function ybe(a){return KC(ZI,nie,2,a,6,1)};var vab=mdb(Mwe,'XMLTypePackageImpl/31',1882);bcb(1883,1,nwe,zbe);_.wj=function Abe(a){return JD(a,162)};_.xj=function Bbe(a){return KC(MI,nie,162,a,0,1)};var wab=mdb(Mwe,'XMLTypePackageImpl/32',1883);bcb(1884,1,nwe,Cbe);_.wj=function Dbe(a){return ND(a)};_.xj=function Ebe(a){return KC(ZI,nie,2,a,6,1)};var xab=mdb(Mwe,'XMLTypePackageImpl/33',1884);bcb(1885,1,nwe,Fbe);_.wj=function Gbe(a){return ND(a)};_.xj=function Hbe(a){return KC(ZI,nie,2,a,6,1)};var yab=mdb(Mwe,'XMLTypePackageImpl/34',1885);bcb(1886,1,nwe,Ibe);_.wj=function Jbe(a){return ND(a)};_.xj=function Kbe(a){return KC(ZI,nie,2,a,6,1)};var zab=mdb(Mwe,'XMLTypePackageImpl/35',1886);bcb(1887,1,nwe,Lbe);_.wj=function Mbe(a){return ND(a)};_.xj=function Nbe(a){return KC(ZI,nie,2,a,6,1)};var Aab=mdb(Mwe,'XMLTypePackageImpl/36',1887);bcb(1888,1,nwe,Obe);_.wj=function Pbe(a){return JD(a,15)};_.xj=function Qbe(a){return KC(yK,eme,15,a,0,1)};var Bab=mdb(Mwe,'XMLTypePackageImpl/37',1888);bcb(1889,1,nwe,Rbe);_.wj=function Sbe(a){return JD(a,15)};_.xj=function Tbe(a){return KC(yK,eme,15,a,0,1)};var Cab=mdb(Mwe,'XMLTypePackageImpl/38',1889);bcb(1890,1,nwe,Ube);_.wj=function Vbe(a){return ND(a)};_.xj=function Wbe(a){return KC(ZI,nie,2,a,6,1)};var Dab=mdb(Mwe,'XMLTypePackageImpl/39',1890);bcb(1855,1,nwe,Xbe);_.wj=function Ybe(a){return JD(a,668)};_.xj=function Zbe(a){return KC(T9,Uhe,2022,a,0,1)};var Pab=mdb(Mwe,'XMLTypePackageImpl/4',1855);bcb(1891,1,nwe,$be);_.wj=function _be(a){return ND(a)};_.xj=function ace(a){return KC(ZI,nie,2,a,6,1)};var Fab=mdb(Mwe,'XMLTypePackageImpl/40',1891);bcb(1892,1,nwe,bce);_.wj=function cce(a){return ND(a)};_.xj=function dce(a){return KC(ZI,nie,2,a,6,1)};var Gab=mdb(Mwe,'XMLTypePackageImpl/41',1892);bcb(1893,1,nwe,ece);_.wj=function fce(a){return ND(a)};_.xj=function gce(a){return KC(ZI,nie,2,a,6,1)};var Hab=mdb(Mwe,'XMLTypePackageImpl/42',1893);bcb(1894,1,nwe,hce);_.wj=function ice(a){return ND(a)};_.xj=function jce(a){return KC(ZI,nie,2,a,6,1)};var Iab=mdb(Mwe,'XMLTypePackageImpl/43',1894);bcb(1895,1,nwe,kce);_.wj=function lce(a){return ND(a)};_.xj=function mce(a){return KC(ZI,nie,2,a,6,1)};var Jab=mdb(Mwe,'XMLTypePackageImpl/44',1895);bcb(1896,1,nwe,nce);_.wj=function oce(a){return JD(a,184)};_.xj=function pce(a){return KC(UI,nie,184,a,0,1)};var Kab=mdb(Mwe,'XMLTypePackageImpl/45',1896);bcb(1897,1,nwe,qce);_.wj=function rce(a){return ND(a)};_.xj=function sce(a){return KC(ZI,nie,2,a,6,1)};var Lab=mdb(Mwe,'XMLTypePackageImpl/46',1897);bcb(1898,1,nwe,tce);_.wj=function uce(a){return ND(a)};_.xj=function vce(a){return KC(ZI,nie,2,a,6,1)};var Mab=mdb(Mwe,'XMLTypePackageImpl/47',1898);bcb(1899,1,nwe,wce);_.wj=function xce(a){return ND(a)};_.xj=function yce(a){return KC(ZI,nie,2,a,6,1)};var Nab=mdb(Mwe,'XMLTypePackageImpl/48',1899);bcb(nje,1,nwe,zce);_.wj=function Ace(a){return JD(a,184)};_.xj=function Bce(a){return KC(UI,nie,184,a,0,1)};var Oab=mdb(Mwe,'XMLTypePackageImpl/49',nje);bcb(1856,1,nwe,Cce);_.wj=function Dce(a){return JD(a,669)};_.xj=function Ece(a){return KC(U9,Uhe,2023,a,0,1)};var Tab=mdb(Mwe,'XMLTypePackageImpl/5',1856);bcb(1901,1,nwe,Fce);_.wj=function Gce(a){return JD(a,162)};_.xj=function Hce(a){return KC(MI,nie,162,a,0,1)};var Qab=mdb(Mwe,'XMLTypePackageImpl/50',1901);bcb(1902,1,nwe,Ice);_.wj=function Jce(a){return ND(a)};_.xj=function Kce(a){return KC(ZI,nie,2,a,6,1)};var Rab=mdb(Mwe,'XMLTypePackageImpl/51',1902);bcb(1903,1,nwe,Lce);_.wj=function Mce(a){return JD(a,19)};_.xj=function Nce(a){return KC(JI,nie,19,a,0,1)};var Sab=mdb(Mwe,'XMLTypePackageImpl/52',1903);bcb(1857,1,nwe,Oce);_.wj=function Pce(a){return ND(a)};_.xj=function Qce(a){return KC(ZI,nie,2,a,6,1)};var Uab=mdb(Mwe,'XMLTypePackageImpl/6',1857);bcb(1858,1,nwe,Rce);_.wj=function Sce(a){return JD(a,190)};_.xj=function Tce(a){return KC(SD,nie,190,a,0,2)};var Vab=mdb(Mwe,'XMLTypePackageImpl/7',1858);bcb(1859,1,nwe,Uce);_.wj=function Vce(a){return KD(a)};_.xj=function Wce(a){return KC(wI,nie,476,a,8,1)};var Wab=mdb(Mwe,'XMLTypePackageImpl/8',1859);bcb(1860,1,nwe,Xce);_.wj=function Yce(a){return JD(a,217)};_.xj=function Zce(a){return KC(xI,nie,217,a,0,1)};var Xab=mdb(Mwe,'XMLTypePackageImpl/9',1860);var $ce,_ce;var fde,gde;var kde;bcb(50,60,Tie,mde);var Zab=mdb(kxe,'RegEx/ParseException',50);bcb(820,1,{},ude);_.sl=function vde(a){return a<this.j&&bfb(this.i,a)==63};_.tl=function wde(){var a,b,c,d,e;if(this.c!=10)throw vbb(new mde(tvd((h0d(),uue))));a=this.a;switch(a){case 101:a=27;break;case 102:a=12;break;case 110:a=10;break;case 114:a=13;break;case 116:a=9;break;case 120:nde(this);if(this.c!=0)throw vbb(new mde(tvd((h0d(),Tue))));if(this.a==123){e=0;c=0;do{nde(this);if(this.c!=0)throw vbb(new mde(tvd((h0d(),Tue))));if((e=yde(this.a))<0)break;if(c>c*16)throw vbb(new mde(tvd((h0d(),Uue))));c=c*16+e}while(true);if(this.a!=125)throw vbb(new mde(tvd((h0d(),Vue))));if(c>lxe)throw vbb(new mde(tvd((h0d(),Wue))));a=c}else{e=0;if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=e;nde(this);if(this.c!=0||(e=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));c=c*16+e;a=c}break;case 117:d=0;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;a=b;break;case 118:nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;nde(this);if(this.c!=0||(d=yde(this.a))<0)throw vbb(new mde(tvd((h0d(),Tue))));b=b*16+d;if(b>lxe)throw vbb(new mde(tvd((h0d(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw vbb(new mde(tvd((h0d(),Xue))));}return a};_.ul=function xde(a){var b,c;switch(a){case 100:c=(this.e&32)==32?Kfe('Nd',true):(wfe(),cfe);break;case 68:c=(this.e&32)==32?Kfe('Nd',false):(wfe(),jfe);break;case 119:c=(this.e&32)==32?Kfe('IsWord',true):(wfe(),sfe);break;case 87:c=(this.e&32)==32?Kfe('IsWord',false):(wfe(),lfe);break;case 115:c=(this.e&32)==32?Kfe('IsSpace',true):(wfe(),nfe);break;case 83:c=(this.e&32)==32?Kfe('IsSpace',false):(wfe(),kfe);break;default:throw vbb(new hz((b=a,mxe+b.toString(16))));}return c};_.vl=function zde(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;nde(this);b=null;if(this.c==0&&this.a==94){nde(this);if(a){k=(wfe(),wfe(),++vfe,new $fe(5))}else{b=(wfe(),wfe(),++vfe,new $fe(4));Ufe(b,0,lxe);k=(null,++vfe,new $fe(4))}}else{k=(wfe(),wfe(),++vfe,new $fe(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:Xfe(k,this.ul(c));d=true;break;case 105:case 73:case 99:case 67:c=this.Ll(k,c);c<0&&(d=true);break;case 112:case 80:l=tde(this,c);if(!l)throw vbb(new mde(tvd((h0d(),Iue))));Xfe(k,l);d=true;break;default:c=this.tl();}}else if(m==20){g=gfb(this.i,58,this.d);if(g<0)throw vbb(new mde(tvd((h0d(),Jue))));h=true;if(bfb(this.i,this.d)==94){++this.d;h=false}f=qfb(this.i,this.d,g);i=Lfe(f,h,(this.e&512)==512);if(!i)throw vbb(new mde(tvd((h0d(),Lue))));Xfe(k,i);d=true;if(g+1>=this.j||bfb(this.i,g+1)!=93)throw vbb(new mde(tvd((h0d(),Jue))));this.d=g+2}nde(this);if(!d){if(this.c!=0||this.a!=45){Ufe(k,c,c)}else{nde(this);if((m=this.c)==1)throw vbb(new mde(tvd((h0d(),Kue))));if(m==0&&this.a==93){Ufe(k,c,c);Ufe(k,45,45)}else{j=this.a;m==10&&(j=this.tl());nde(this);Ufe(k,c,j)}}}(this.e&zte)==zte&&this.c==0&&this.a==44&&nde(this)}if(this.c==1)throw vbb(new mde(tvd((h0d(),Kue))));if(b){Zfe(b,k);k=b}Yfe(k);Vfe(k);this.b=0;nde(this);return k};_.wl=function Ade(){var a,b,c,d;c=this.vl(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){nde(this);if(this.c!=9)throw vbb(new mde(tvd((h0d(),Que))));b=this.vl(false);if(d==4)Xfe(c,b);else if(a==45)Zfe(c,b);else if(a==38)Wfe(c,b);else throw vbb(new hz('ASSERT'))}else{throw vbb(new mde(tvd((h0d(),Rue))))}}nde(this);return c};_.xl=function Bde(){var a,b;a=this.a-48;b=(wfe(),wfe(),++vfe,new Hge(12,null,a));!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(a));nde(this);return b};_.yl=function Cde(){nde(this);return wfe(),ofe};_.zl=function Dde(){nde(this);return wfe(),mfe};_.Al=function Ede(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Bl=function Fde(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Cl=function Gde(){nde(this);return Ife()};_.Dl=function Hde(){nde(this);return wfe(),qfe};_.El=function Ide(){nde(this);return wfe(),tfe};_.Fl=function Jde(){var a;if(this.d>=this.j||((a=bfb(this.i,this.d++))&65504)!=64)throw vbb(new mde(tvd((h0d(),Eue))));nde(this);return wfe(),wfe(),++vfe,new ige(0,a-64)};_.Gl=function Kde(){nde(this);return Jfe()};_.Hl=function Lde(){nde(this);return wfe(),ufe};_.Il=function Mde(){var a;a=(wfe(),wfe(),++vfe,new ige(0,105));nde(this);return a};_.Jl=function Nde(){nde(this);return wfe(),rfe};_.Kl=function Ode(){nde(this);return wfe(),pfe};_.Ll=function Pde(a,b){return this.tl()};_.Ml=function Qde(){nde(this);return wfe(),hfe};_.Nl=function Rde(){var a,b,c,d,e;if(this.d+1>=this.j)throw vbb(new mde(tvd((h0d(),Bue))));d=-1;b=null;a=bfb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new Wvb);Tvb(this.g,new cge(d));++this.d;if(bfb(this.i,this.d)!=41)throw vbb(new mde(tvd((h0d(),yue))));++this.d}else{a==63&&--this.d;nde(this);b=qde(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));break;default:throw vbb(new mde(tvd((h0d(),Cue))));}}nde(this);e=rde(this);c=null;if(e.e==2){if(e.em()!=2)throw vbb(new mde(tvd((h0d(),Due))));c=e.am(1);e=e.am(0)}if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return wfe(),wfe(),++vfe,new vge(d,b,e,c)};_.Ol=function Sde(){nde(this);return wfe(),ife};_.Pl=function Tde(){var a;nde(this);a=Cfe(24,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ql=function Ude(){var a;nde(this);a=Cfe(20,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Rl=function Vde(){var a;nde(this);a=Cfe(22,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Sl=function Wde(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d<this.j){b=bfb(this.i,this.d);e=Uee(b);if(e==0)break;a|=e;++this.d}if(this.d>=this.j)throw vbb(new mde(tvd((h0d(),zue))));if(b==45){++this.d;while(this.d<this.j){b=bfb(this.i,this.d);e=Uee(b);if(e==0)break;c|=e;++this.d}if(this.d>=this.j)throw vbb(new mde(tvd((h0d(),zue))))}if(b==58){++this.d;nde(this);d=Dfe(rde(this),a,c);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this)}else if(b==41){++this.d;nde(this);d=Dfe(rde(this),a,c)}else throw vbb(new mde(tvd((h0d(),Aue))));return d};_.Tl=function Xde(){var a;nde(this);a=Cfe(21,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Ul=function Yde(){var a;nde(this);a=Cfe(23,rde(this));if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Vl=function Zde(){var a,b;nde(this);a=this.f++;b=Efe(rde(this),a);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return b};_.Wl=function $de(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Xl=function _de(a){nde(this);if(this.c==5){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(9,a)))}else return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function aee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));if(this.c==5){nde(this);Kge(b,(null,ffe));Kge(b,a)}else{Kge(b,a);Kge(b,(null,ffe))}return b};_.Zl=function bee(a){nde(this);if(this.c==5){nde(this);return wfe(),wfe(),++vfe,new lge(9,a)}else return wfe(),wfe(),++vfe,new lge(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var bbb=mdb(kxe,'RegEx/RegexParser',820);bcb(1824,820,{},hee);_.sl=function iee(a){return false};_.tl=function jee(){return eee(this)};_.ul=function lee(a){return fee(a)};_.vl=function mee(a){return gee(this)};_.wl=function nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.xl=function oee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.yl=function pee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.zl=function qee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Al=function ree(){nde(this);return fee(67)};_.Bl=function see(){nde(this);return fee(73)};_.Cl=function tee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Dl=function uee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.El=function vee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Fl=function wee(){nde(this);return fee(99)};_.Gl=function xee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Hl=function yee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Il=function zee(){nde(this);return fee(105)};_.Jl=function Aee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Kl=function Bee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ll=function Cee(a,b){return Xfe(a,fee(b)),-1};_.Ml=function Dee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,94)};_.Nl=function Eee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ol=function Fee(){nde(this);return wfe(),wfe(),++vfe,new ige(0,36)};_.Pl=function Gee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ql=function Hee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Rl=function Iee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Sl=function Jee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Tl=function Kee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Ul=function Lee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Vl=function Mee(){var a;nde(this);a=Efe(rde(this),0);if(this.c!=7)throw vbb(new mde(tvd((h0d(),yue))));nde(this);return a};_.Wl=function Nee(){throw vbb(new mde(tvd((h0d(),Yue))))};_.Xl=function Oee(a){nde(this);return Bfe(a,(wfe(),wfe(),++vfe,new lge(3,a)))};_.Yl=function Pee(a){var b;nde(this);b=(wfe(),wfe(),++vfe,new Lge(2));Kge(b,a);Kge(b,(null,ffe));return b};_.Zl=function Qee(a){nde(this);return wfe(),wfe(),++vfe,new lge(3,a)};var cee=null,dee=null;var $ab=mdb(kxe,'RegEx/ParserForXMLSchema',1824);bcb(117,1,yxe,xfe);_.$l=function yfe(a){throw vbb(new hz('Not supported.'))};_._l=function Gfe(){return -1};_.am=function Hfe(a){return null};_.bm=function Mfe(){return null};_.cm=function Pfe(a){};_.dm=function Qfe(a){};_.em=function Rfe(){return 0};_.Ib=function Sfe(){return this.fm(0)};_.fm=function Tfe(a){return this.e==11?'.':''};_.e=0;var Yee,Zee,$ee,_ee,afe,bfe=null,cfe,dfe=null,efe,ffe,gfe=null,hfe,ife,jfe,kfe,lfe,mfe,nfe,ofe,pfe,qfe,rfe,sfe,tfe,ufe,vfe=0;var lbb=mdb(kxe,'RegEx/Token',117);bcb(136,117,{3:1,136:1,117:1},$fe);_.fm=function bge(a){var b,c,d;if(this.e==4){if(this==efe)c='.';else if(this==cfe)c='\\d';else if(this==sfe)c='\\w';else if(this==nfe)c='\\s';else{d=new Hfb;d.a+='[';for(b=0;b<this.b.length;b+=2){(a&zte)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==jfe)c='\\D';else if(this==lfe)c='\\W';else if(this==kfe)c='\\S';else{d=new Hfb;d.a+='[^';for(b=0;b<this.b.length;b+=2){(a&zte)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Efb(d,age(this.b[b]))}else{Efb(d,age(this.b[b]));d.a+='-';Efb(d,age(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var _ab=mdb(kxe,'RegEx/RangeToken',136);bcb(584,1,{584:1},cge);_.a=0;var abb=mdb(kxe,'RegEx/RegexParser/ReferencePosition',584);bcb(583,1,{3:1,583:1},ege);_.Fb=function fge(a){var b;if(a==null)return false;if(!JD(a,583))return false;b=BD(a,583);return dfb(this.b,b.b)&&this.a==b.a};_.Hb=function gge(){return LCb(this.b+'/'+See(this.a))};_.Ib=function hge(){return this.c.fm(this.a)};_.a=0;var cbb=mdb(kxe,'RegEx/RegularExpression',583);bcb(223,117,yxe,ige);_._l=function jge(){return this.a};_.fm=function kge(a){var b,c,d;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:d='\\'+HD(this.a&aje);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=Tje){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+qfb(c,c.length-6,c.length)}else d=''+HD(this.a&aje);}break;case 8:this==hfe||this==ife?(d=''+HD(this.a&aje)):(d='\\'+HD(this.a&aje));break;default:d=null;}return d};_.a=0;var dbb=mdb(kxe,'RegEx/Token/CharToken',223);bcb(309,117,yxe,lge);_.am=function mge(a){return this.a};_.cm=function nge(a){this.b=a};_.dm=function oge(a){this.c=a};_.em=function pge(){return 1};_.fm=function qge(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.fm(a)+'*'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}'}else throw vbb(new hz('Token#toString(): CLOSURE '+this.c+She+this.b))}else{if(this.c<0&&this.b<0){b=this.a.fm(a)+'*?'}else if(this.c==this.b){b=this.a.fm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.fm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.fm(a)+'{'+this.c+',}?'}else throw vbb(new hz('Token#toString(): NONGREEDYCLOSURE '+this.c+She+this.b))}return b};_.b=0;_.c=0;var ebb=mdb(kxe,'RegEx/Token/ClosureToken',309);bcb(821,117,yxe,rge);_.am=function sge(a){return a==0?this.a:this.b};_.em=function tge(){return 2};_.fm=function uge(a){var b;this.b.e==3&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+'):this.b.e==9&&this.b.am(0)==this.a?(b=this.a.fm(a)+'+?'):(b=this.a.fm(a)+(''+this.b.fm(a)));return b};var fbb=mdb(kxe,'RegEx/Token/ConcatToken',821);bcb(1822,117,yxe,vge);_.am=function wge(a){if(a==0)return this.d;if(a==1)return this.b;throw vbb(new hz('Internal Error: '+a))};_.em=function xge(){return !this.b?1:2};_.fm=function yge(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var gbb=mdb(kxe,'RegEx/Token/ConditionToken',1822);bcb(1823,117,yxe,zge);_.am=function Age(a){return this.b};_.em=function Bge(){return 1};_.fm=function Cge(a){return '(?'+(this.a==0?'':See(this.a))+(this.c==0?'':See(this.c))+':'+this.b.fm(a)+')'};_.a=0;_.c=0;var hbb=mdb(kxe,'RegEx/Token/ModifierToken',1823);bcb(822,117,yxe,Dge);_.am=function Ege(a){return this.a};_.em=function Fge(){return 1};_.fm=function Gge(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.fm(a)+')'):(b='('+this.a.fm(a)+')');break;case 20:b='(?='+this.a.fm(a)+')';break;case 21:b='(?!'+this.a.fm(a)+')';break;case 22:b='(?<='+this.a.fm(a)+')';break;case 23:b='(?<!'+this.a.fm(a)+')';break;case 24:b='(?>'+this.a.fm(a)+')';}return b};_.b=0;var ibb=mdb(kxe,'RegEx/Token/ParenToken',822);bcb(521,117,{3:1,117:1,521:1},Hge);_.bm=function Ige(){return this.b};_.fm=function Jge(a){return this.e==12?'\\'+this.a:Wee(this.b)};_.a=0;var jbb=mdb(kxe,'RegEx/Token/StringToken',521);bcb(465,117,yxe,Lge);_.$l=function Mge(a){Kge(this,a)};_.am=function Nge(a){return BD(Uvb(this.a,a),117)};_.em=function Oge(){return !this.a?0:this.a.a.c.length};_.fm=function Pge(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=BD(Uvb(this.a,0),117);c=BD(Uvb(this.a,1),117);c.e==3&&c.am(0)==b?(e=b.fm(a)+'+'):c.e==9&&c.am(0)==b?(e=b.fm(a)+'+?'):(e=b.fm(a)+(''+c.fm(a)))}else{f=new Hfb;for(d=0;d<this.a.a.c.length;d++){Efb(f,BD(Uvb(this.a,d),117).fm(a))}e=f.a}return e}if(this.a.a.c.length==2&&BD(Uvb(this.a,1),117).e==7){e=BD(Uvb(this.a,0),117).fm(a)+'?'}else if(this.a.a.c.length==2&&BD(Uvb(this.a,0),117).e==7){e=BD(Uvb(this.a,1),117).fm(a)+'??'}else{f=new Hfb;Efb(f,BD(Uvb(this.a,0),117).fm(a));for(d=1;d<this.a.a.c.length;d++){f.a+='|';Efb(f,BD(Uvb(this.a,d),117).fm(a))}e=f.a}return e};var kbb=mdb(kxe,'RegEx/Token/UnionToken',465);bcb(518,1,{592:1},Rge);_.Ib=function Sge(){return this.a.b};var mbb=mdb(zxe,'XMLTypeUtil/PatternMatcherImpl',518);bcb(1622,1381,{},Vge);var Tge;var nbb=mdb(zxe,'XMLTypeValidator',1622);bcb(264,1,vie,Yge);_.Jc=function Zge(a){reb(this,a)};_.Kc=function $ge(){return (this.b-this.a)*this.c<0?Wge:new she(this)};_.a=0;_.b=0;_.c=0;var Wge;var qbb=mdb(Bxe,'ExclusiveRange',264);bcb(1068,1,jie,dhe);_.Rb=function ehe(a){BD(a,19);_ge()};_.Nb=function fhe(a){Rrb(this,a)};_.Pb=function ihe(){return ahe()};_.Ub=function khe(){return bhe()};_.Wb=function nhe(a){BD(a,19);che()};_.Ob=function ghe(){return false};_.Sb=function hhe(){return false};_.Tb=function jhe(){return -1};_.Vb=function lhe(){return -1};_.Qb=function mhe(){throw vbb(new cgb(Exe))};var obb=mdb(Bxe,'ExclusiveRange/1',1068);bcb(254,1,jie,she);_.Rb=function the(a){BD(a,19);ohe()};_.Nb=function uhe(a){Rrb(this,a)};_.Pb=function xhe(){return phe(this)};_.Ub=function zhe(){return qhe(this)};_.Wb=function Che(a){BD(a,19);rhe()};_.Ob=function vhe(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b};_.Sb=function whe(){return this.b>0};_.Tb=function yhe(){return this.b};_.Vb=function Ahe(){return this.b-1};_.Qb=function Bhe(){throw vbb(new cgb(Exe))};_.a=0;_.b=0;var pbb=mdb(Bxe,'ExclusiveRange/RangeIterator',254);var TD=pdb(Fve,'C');var WD=pdb(Ive,'I');var sbb=pdb(Khe,'Z');var XD=pdb(Jve,'J');var SD=pdb(Eve,'B');var UD=pdb(Gve,'D');var VD=pdb(Hve,'F');var rbb=pdb(Kve,'S');var h1=odb('org.eclipse.elk.core.labels','ILabelManager');var O4=odb(Tte,'DiagnosticChain');var u8=odb(pwe,'ResourceSet');var V4=mdb(Tte,'InvocationTargetException',null);var Ihe=(Az(),Dz);var gwtOnLoad=gwtOnLoad=Zbb;Xbb(hcb);$bb('permProps',[[[Fxe,Gxe],[Hxe,'gecko1_8']],[[Fxe,Gxe],[Hxe,'ie10']],[[Fxe,Gxe],[Hxe,'ie8']],[[Fxe,Gxe],[Hxe,'ie9']],[[Fxe,Gxe],[Hxe,'safari']]]); -// -------------- RUN GWT INITIALIZATION CODE -------------- -gwtOnLoad(null, 'elk', null); - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],3:[function(require,module,exports){ -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/******************************************************************************* - * Copyright (c) 2021 Kiel University and others. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - *******************************************************************************/ -var ELK = require('./elk-api.js').default; - -var ELKNode = function (_ELK) { - _inherits(ELKNode, _ELK); - - function ELKNode() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, ELKNode); - - var optionsClone = Object.assign({}, options); - - var workerThreadsExist = false; - try { - require.resolve('web-worker'); - workerThreadsExist = true; - } catch (e) {} - - // user requested a worker - if (options.workerUrl) { - if (workerThreadsExist) { - var Worker = require('web-worker'); - optionsClone.workerFactory = function (url) { - return new Worker(url); - }; - } 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.'); - } - } - - // unless no other workerFactory is registered, use the fake worker - if (!optionsClone.workerFactory) { - var _require = require('./elk-worker.min.js'), - _Worker = _require.Worker; - - optionsClone.workerFactory = function (url) { - return new _Worker(url); - }; - } - - return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); - } - - return ELKNode; -}(ELK); - -Object.defineProperty(module.exports, "__esModule", { - value: true -}); -module.exports = ELKNode; -ELKNode.default = ELKNode; -},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ -/** - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -module.exports = Worker; -},{}]},{},[3])(3) -}); - - -/***/ }), - -/***/ 19487: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ diagram: () => (/* binding */ diagram) -/* harmony export */ }); -/* harmony import */ var _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(87115); -/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59373); -/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(43349); -/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17295); -/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); -/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); -/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20683); -/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(70277); -/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(45625); -/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39354); -/* harmony import */ var dagre_d3_es__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(91518); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(59542); -/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(10285); -/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(28734); -/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_11__); - - - - - - - - - - - - - - - - - - - - - - - -const findCommonAncestor = (id1, id2, treeData) => { - const { parentById } = treeData; - const visited = /* @__PURE__ */ new Set(); - let currentId = id1; - while (currentId) { - visited.add(currentId); - if (currentId === id2) { - return currentId; - } - currentId = parentById[currentId]; - } - currentId = id2; - while (currentId) { - if (visited.has(currentId)) { - return currentId; - } - currentId = parentById[currentId]; - } - return "root"; -}; -const elk = new (elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1___default())(); -const portPos = {}; -const conf = {}; -let nodeDb = {}; -const addVertices = function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { - const svg = root.select(`[id="${svgId}"]`); - const nodes = svg.insert("g").attr("class", "nodes"); - const keys = Object.keys(vert); - keys.forEach(function(id) { - const vertex = vert[id]; - let classStr = "default"; - if (vertex.classes.length > 0) { - classStr = vertex.classes.join(" "); - } - const styles2 = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.a)(vertex.styles); - let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; - let vertexNode; - const labelData = { width: 0, height: 0 }; - if ((0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.e)((0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.g)().flowchart.htmlLabels)) { - const node2 = { - label: vertexText.replace( - /fa[blrs]?:fa-[\w-]+/g, - (s) => `<i class='${s.replace(":", " ")}'></i>` - ) - }; - vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_13__/* .addHtmlLabel */ .a)(svg, node2).node(); - const bbox = vertexNode.getBBox(); - labelData.width = bbox.width; - labelData.height = bbox.height; - labelData.labelNode = vertexNode; - vertexNode.parentNode.removeChild(vertexNode); - } else { - const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); - svgLabel.setAttribute("style", styles2.labelStyle.replace("color:", "fill:")); - const rows = vertexText.split(_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.c.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; - const bbox = vertexNode.getBBox(); - labelData.width = bbox.width; - labelData.height = bbox.height; - labelData.labelNode = vertexNode; - } - const ports = [ - { - id: vertex.id + "-west", - layoutOptions: { - "port.side": "WEST" - } - }, - { - id: vertex.id + "-east", - layoutOptions: { - "port.side": "EAST" - } - }, - { - id: vertex.id + "-south", - layoutOptions: { - "port.side": "SOUTH" - } - }, - { - id: vertex.id + "-north", - layoutOptions: { - "port.side": "NORTH" - } - } - ]; - let radious = 0; - let _shape = ""; - let layoutOptions = {}; - switch (vertex.type) { - case "round": - radious = 5; - _shape = "rect"; - break; - case "square": - _shape = "rect"; - break; - case "diamond": - _shape = "question"; - layoutOptions = { - portConstraints: "FIXED_SIDE" - }; - 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 node = { - labelStyle: styles2.labelStyle, - shape: _shape, - labelText: vertexText, - rx: radious, - ry: radious, - class: classStr, - style: styles2.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_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.g)().flowchart.padding - }; - let boundingBox; - let nodeEl; - if (node.type !== "group") { - nodeEl = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.b)(nodes, node, vertex.dir); - boundingBox = nodeEl.node().getBBox(); - } - const data = { - id: vertex.id, - ports: vertex.type === "diamond" ? ports : [], - // labelStyle: styles.labelStyle, - // shape: _shape, - layoutOptions, - labelText: vertexText, - labelData, - // labels: [{ text: vertexText }], - // rx: radius, - // ry: radius, - // class: classStr, - // style: styles.style, - // link: vertex.link, - // linkTarget: vertex.linkTarget, - // tooltip: diagObj.db.getTooltip(vertex.id) || '', - domId: diagObj.db.lookUpDomId(vertex.id), - // haveCallback: vertex.haveCallback, - width: boundingBox == null ? void 0 : boundingBox.width, - height: boundingBox == null ? void 0 : boundingBox.height, - // dir: vertex.dir, - type: vertex.type, - // props: vertex.props, - // padding: getConfig().flowchart.padding, - // boundingBox, - el: nodeEl, - parent: parentLookupDb.parentById[vertex.id] - }; - nodeDb[node.id] = data; - }); - return graph; -}; -const getNextPosition = (position, edgeDirection, graphDirection) => { - const portPos2 = { - 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" - } - } - }; - portPos2.TD = portPos2.TB; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc88", graphDirection, edgeDirection, position); - return portPos2[graphDirection][edgeDirection][position]; -}; -const getNextPort = (node, edgeDirection, graphDirection) => { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("getNextPort abc88", { node, edgeDirection, graphDirection }); - if (!portPos[node]) { - switch (graphDirection) { - case "TB": - case "TD": - portPos[node] = { - inPosition: "north", - outPosition: "south" - }; - break; - case "BT": - portPos[node] = { - inPosition: "south", - outPosition: "north" - }; - break; - case "RL": - portPos[node] = { - inPosition: "east", - outPosition: "west" - }; - break; - case "LR": - portPos[node] = { - inPosition: "west", - outPosition: "east" - }; - break; - } - } - const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; - if (edgeDirection === "in") { - portPos[node].inPosition = getNextPosition( - portPos[node].inPosition, - edgeDirection, - graphDirection - ); - } else { - portPos[node].outPosition = getNextPosition( - portPos[node].outPosition, - edgeDirection, - graphDirection - ); - } - return result; -}; -const getEdgeStartEndPoint = (edge, dir) => { - let source = edge.start; - let target = edge.end; - const startNode = nodeDb[source]; - const endNode = nodeDb[target]; - if (!startNode || !endNode) { - return { source, target }; - } - if (startNode.type === "diamond") { - source = `${source}-${getNextPort(source, "out", dir)}`; - } - if (endNode.type === "diamond") { - target = `${target}-${getNextPort(target, "in", dir)}`; - } - return { source, target }; -}; -const addEdges = function(edges, diagObj, graph, svg) { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 edges = ", edges); - const labelsEl = svg.insert("g").attr("class", "edgeLabels"); - let linkIdCnt = {}; - let dir = diagObj.db.getDirection(); - let defaultStyle; - let defaultLabelStyle; - if (edges.defaultStyle !== void 0) { - const defaultStyles = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.a)(edges.defaultStyle); - defaultStyle = defaultStyles.style; - defaultLabelStyle = defaultStyles.labelStyle; - } - edges.forEach(function(edge) { - var linkIdBase = "L-" + edge.start + "-" + edge.end; - if (linkIdCnt[linkIdBase] === void 0) { - linkIdCnt[linkIdBase] = 0; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } else { - linkIdCnt[linkIdBase]++; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); - } - let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); - var linkNameStart = "LS-" + edge.start; - var 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; - } - if (edge.style !== void 0) { - const styles2 = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.a)(edge.style); - style = styles2.style; - labelStyle = styles2.labelStyle; - } - edgeData.style = edgeData.style += style; - edgeData.labelStyle = edgeData.labelStyle += labelStyle; - if (edge.interpolate !== void 0) { - edgeData.curve = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.d)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); - } else if (edges.defaultInterpolate !== void 0) { - edgeData.curve = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.d)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); - } else { - edgeData.curve = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.d)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); - } - if (edge.text === void 0) { - if (edge.style !== void 0) { - edgeData.arrowheadStyle = "fill: #333"; - } - } else { - edgeData.arrowheadStyle = "fill: #333"; - edgeData.labelpos = "c"; - } - edgeData.labelType = "text"; - edgeData.label = edge.text.replace(_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.c.lineBreakRegex, "\n"); - 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; - const labelEl = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.f)(labelsEl, edgeData); - const { source, target } = getEdgeStartEndPoint(edge, dir); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.debug("abc78 source and target", source, target); - graph.edges.push({ - id: "e" + edge.start + edge.end, - sources: [source], - targets: [target], - labelEl, - labels: [ - { - width: edgeData.width, - height: edgeData.height, - orgWidth: edgeData.width, - orgHeight: edgeData.height, - text: edgeData.label, - layoutOptions: { - "edgeLabels.inline": "true", - "edgeLabels.placement": "CENTER" - } - } - ], - edgeData - }); - }); - return graph; -}; -const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute) { - let url = ""; - if (arrowMarkerAbsolute) { - url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; - url = url.replace(/\(/g, "\\("); - url = url.replace(/\)/g, "\\)"); - } - switch (edgeData.arrowTypeStart) { - case "arrow_cross": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)"); - break; - case "arrow_point": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)"); - break; - case "arrow_barb": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)"); - break; - case "arrow_circle": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)"); - break; - case "aggregation": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)"); - break; - case "extension": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)"); - break; - case "composition": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)"); - break; - case "dependency": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)"); - break; - case "lollipop": - svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)"); - break; - } - switch (edgeData.arrowTypeEnd) { - case "arrow_cross": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)"); - break; - case "arrow_point": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)"); - break; - case "arrow_barb": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)"); - break; - case "arrow_circle": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)"); - break; - case "aggregation": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)"); - break; - case "extension": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)"); - break; - case "composition": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)"); - break; - case "dependency": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)"); - break; - case "lollipop": - svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)"); - break; - } -}; -const getClasses = function(text, diagObj) { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Extracting classes"); - diagObj.db.clear("ver-2"); - try { - diagObj.parse(text); - return diagObj.db.getClasses(); - } catch (e) { - return {}; - } -}; -const addSubGraphs = function(db2) { - const parentLookupDb = { parentById: {}, childrenById: {} }; - const subgraphs = db2.getSubGraphs(); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Subgraphs - ", subgraphs); - subgraphs.forEach(function(subgraph) { - subgraph.nodes.forEach(function(node) { - parentLookupDb.parentById[node] = subgraph.id; - if (parentLookupDb.childrenById[subgraph.id] === void 0) { - parentLookupDb.childrenById[subgraph.id] = []; - } - parentLookupDb.childrenById[subgraph.id].push(node); - }); - }); - subgraphs.forEach(function(subgraph) { - ({ id: subgraph.id }); - if (parentLookupDb.parentById[subgraph.id] !== void 0) { - parentLookupDb.parentById[subgraph.id]; - } - }); - return parentLookupDb; -}; -const calcOffset = function(src, dest, parentLookupDb) { - const ancestor = findCommonAncestor(src, dest, parentLookupDb); - if (ancestor === void 0 || ancestor === "root") { - return { x: 0, y: 0 }; - } - const ancestorOffset = nodeDb[ancestor].offset; - return { x: ancestorOffset.posX, y: ancestorOffset.posY }; -}; -const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb) { - const offset = calcOffset(edge.sources[0], edge.targets[0], parentLookupDb); - const src = edge.sections[0].startPoint; - const dest = edge.sections[0].endPoint; - const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; - const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); - const points = [ - [src.x + offset.x, src.y + offset.y], - ...segPoints, - [dest.x + offset.x, dest.y + offset.y] - ]; - const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); - const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path").attr("fill", "none"); - const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); - const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); - const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); - edgeWithLabel.attr("width", box.width); - edgeWithLabel.attr("height", box.height); - edgeG.attr( - "transform", - `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` - ); - addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute); -}; -const insertChildren = (nodeArray, parentLookupDb) => { - nodeArray.forEach((node) => { - if (!node.children) { - node.children = []; - } - const childIds = parentLookupDb.childrenById[node.id]; - if (childIds) { - childIds.forEach((childId) => { - node.children.push(nodeDb[childId]); - }); - } - insertChildren(node.children, parentLookupDb); - }); -}; -const draw = async function(text, id, _version, diagObj) { - var _a; - diagObj.db.clear(); - nodeDb = {}; - diagObj.db.setGen("gen-2"); - diagObj.parser.parse(text); - const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); - let graph = { - 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.layered.mergeEdges': 'true', - "elk.direction": "DOWN" - // 'elk.ports.sameLayerEdges': true, - // 'nodePlacement.strategy': 'SIMPLE', - }, - children: [], - edges: [] - }; - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Drawing flowchart using v3 renderer", elk); - let dir = diagObj.db.getDirection(); - switch (dir) { - case "BT": - graph.layoutOptions["elk.direction"] = "UP"; - break; - case "TB": - graph.layoutOptions["elk.direction"] = "DOWN"; - break; - case "LR": - graph.layoutOptions["elk.direction"] = "RIGHT"; - break; - case "RL": - graph.layoutOptions["elk.direction"] = "LEFT"; - break; - } - const { securityLevel, flowchart: conf2 } = (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.g)(); - let sandboxElement; - if (securityLevel === "sandbox") { - sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); - } - const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); - const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; - const svg = root.select(`[id="${id}"]`); - const markers = ["point", "circle", "cross"]; - (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.i)(svg, markers, diagObj.type, diagObj.arrowMarkerAbsolute); - const vert = diagObj.db.getVertices(); - let subG; - const subGraphs = diagObj.db.getSubGraphs(); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Subgraphs - ", subGraphs); - for (let i = subGraphs.length - 1; i >= 0; i--) { - subG = subGraphs[i]; - diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes, subG.dir); - } - const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); - const parentLookupDb = addSubGraphs(diagObj.db); - graph = addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); - const edgesEl = svg.insert("g").attr("class", "edges edgePath"); - const edges = diagObj.db.getEdges(); - graph = addEdges(edges, diagObj, graph, svg); - const nodes = Object.keys(nodeDb); - nodes.forEach((nodeId) => { - const node = nodeDb[nodeId]; - if (!node.parent) { - graph.children.push(node); - } - if (parentLookupDb.childrenById[nodeId] !== void 0) { - node.labels = [ - { - text: node.labelText, - layoutOptions: { - "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" - }, - width: node.labelData.width, - height: node.labelData.height - } - ]; - delete node.x; - delete node.y; - delete node.width; - delete node.height; - } - }); - insertChildren(graph.children, parentLookupDb); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("after layout", JSON.stringify(graph, null, 2)); - const g = await elk.layout(graph); - drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("after layout", g); - (_a = g.edges) == null ? void 0 : _a.map((edge) => { - insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb); - }); - (0,_mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.s)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); - renderEl.remove(); -}; -const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { - nodeArray.forEach(function(node) { - if (node) { - nodeDb[node.id].offset = { - posX: node.x + relX, - posY: node.y + relY, - x: relX, - y: relY, - depth, - width: node.width, - height: node.height - }; - if (node.type === "group") { - const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); - subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); - const label = subgraphEl.insert("g").attr("class", "label"); - label.attr( - "transform", - `translate(${node.labels[0].x + relX + node.x}, ${node.labels[0].y + relY + node.y})` - ); - label.node().appendChild(node.labelData.labelNode); - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Id (UGH)= ", node.type, node.labels); - } else { - _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.l.info("Id (UGH)= ", node.id); - node.el.attr( - "transform", - `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` - ); - } - } - }); - nodeArray.forEach(function(node) { - if (node && node.type === "group") { - drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); - } - }); -}; -const renderer = { - getClasses, - draw -}; -const genSections = (options) => { - let sections = ""; - for (let i = 0; i < 5; i++) { - sections += ` - .subgraph-lvl-${i} { - fill: ${options[`surface${i}`]}; - stroke: ${options[`surfacePeer${i}`]}; - } - `; - } - return sections; -}; -const getStyles = (options) => `.label { - font-family: ${options.fontFamily}; - color: ${options.nodeTextColor || options.textColor}; - } - .cluster-label text { - fill: ${options.titleColor}; - } - .cluster-label span { - color: ${options.titleColor}; - } - - .label text,span { - 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; - } - - .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; - } - - .cluster rect { - fill: ${options.clusterBkg}; - stroke: ${options.clusterBorder}; - stroke-width: 1px; - } - - .cluster text { - fill: ${options.titleColor}; - } - - .cluster span { - 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}; - } - .subgraph { - stroke-width:2; - rx:3; - } - // .subgraph-lvl-1 { - // fill:#ccc; - // // stroke:black; - // } - ${genSections(options)} -`; -const styles = getStyles; -const diagram = { - db: _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.h, - renderer, - parser: _mermaid_ae477ddf_js__WEBPACK_IMPORTED_MODULE_12__.p, - styles -}; - -//# sourceMappingURL=flowchart-elk-definition-170a3958.js.map - - -/***/ }) - -}; -; \ No newline at end of file diff --git a/assets/js/48b2f688.6b3adc53.js b/assets/js/48b2f688.6b3adc53.js new file mode 100644 index 000000000..c584f21c2 --- /dev/null +++ b/assets/js/48b2f688.6b3adc53.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3637],{556:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud","permalink":"/docs/tags/marketing-cloud","allTagsPath":"/docs/tags","count":48,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-context","title":"MCP Serverside Code Context","description":"Context is king. Also when writing MCP Template Serverside Code.","permalink":"/docs/interaction-studio/mcp-serverside-code-context"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"},{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","permalink":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","permalink":"/docs/config/sfmc-appexchange-solutions"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/sfmc-sql-aggregate-functions","title":"SFMC SQL Aggregate Functions","description":"Group rows and apply aggregate functions to see the big picture in your data extensions.","permalink":"/docs/sql/sfmc-sql-aggregate-functions"},{"id":"sql/sfmc-sql-basics","title":"SFMC SQL Basics","description":"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.","permalink":"/docs/sql/sfmc-sql-basics"},{"id":"sql/sfmc-sql-case","title":"SFMC SQL Case","description":"Empower your Marketing Cloud queries with conditional SQL CASE logic.","permalink":"/docs/sql/sfmc-sql-case"},{"id":"sql/sfmc-sql-conversion-functions","title":"SFMC SQL Conversion Functions","description":"Break from the limits of Data Extension data types. Use full power of SQL to control your values.","permalink":"/docs/sql/sfmc-sql-conversion-functions"},{"id":"sql/sfmc-sql-date-functions","title":"SFMC SQL Date Functions","description":"Take control over dates with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-date-functions"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"sql/sfmc-sql-from","title":"SFMC SQL From","description":"Tell the SQL query FROM where you need the data.","permalink":"/docs/sql/sfmc-sql-from"},{"id":"sql/sfmc-sql-join","title":"SFMC SQL Join","description":"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.","permalink":"/docs/sql/sfmc-sql-join"},{"id":"sql/sfmc-sql-like","title":"SFMC SQL Like","description":"Get a LIKE and build more flexible SQL queries.","permalink":"/docs/sql/sfmc-sql-like"},{"id":"sql/sfmc-sql-null-functions","title":"SFMC SQL NULL Functions","description":"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-null-functions"},{"id":"sql/sfmc-sql-numeric-functions","title":"SFMC SQL Numeric Functions","description":"Take control over numbers with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-numeric-functions"},{"id":"sql/sfmc-sql-select","title":"SFMC SQL Select","description":"Selected information on the SELECT statement in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-select"},{"id":"sql/sfmc-sql-string-functions","title":"SFMC SQL String Functions","description":"Take control over strings with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-string-functions"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"sql/sfmc-sql-where","title":"SFMC SQL Where","description":"Use WHERE to make your query lean and to the point. Less is more.","permalink":"/docs/sql/sfmc-sql-where"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"},{"id":"ssjs/ssjs-if-and-switch","title":"SSJS If & Switch","description":"Deep dive into the two pillars of SSJS flow control.","permalink":"/docs/ssjs/ssjs-if-and-switch"},{"id":"ssjs/ssjs-loops","title":"SSJS Loops","description":"Let\'s dive into limited looping options of the SSJS.","permalink":"/docs/ssjs/ssjs-loops"},{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","permalink":"/docs/ssjs/snippets/ssjs-script-template"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"},{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"},{"id":"zen-of-sfmc","title":"Zen of SFMC","description":"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.","permalink":"/docs/zen-of-sfmc"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/48b2f688.f0eeff23.js b/assets/js/48b2f688.f0eeff23.js deleted file mode 100644 index 093ccbb73..000000000 --- a/assets/js/48b2f688.f0eeff23.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3637],{556:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud","permalink":"/docs/tags/marketing-cloud","allTagsPath":"/docs/tags","count":47,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"},{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","permalink":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","permalink":"/docs/config/sfmc-appexchange-solutions"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/sfmc-sql-aggregate-functions","title":"SFMC SQL Aggregate Functions","description":"Group rows and apply aggregate functions to see the big picture in your data extensions.","permalink":"/docs/sql/sfmc-sql-aggregate-functions"},{"id":"sql/sfmc-sql-basics","title":"SFMC SQL Basics","description":"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.","permalink":"/docs/sql/sfmc-sql-basics"},{"id":"sql/sfmc-sql-case","title":"SFMC SQL Case","description":"Empower your Marketing Cloud queries with conditional SQL CASE logic.","permalink":"/docs/sql/sfmc-sql-case"},{"id":"sql/sfmc-sql-conversion-functions","title":"SFMC SQL Conversion Functions","description":"Break from the limits of Data Extension data types. Use full power of SQL to control your values.","permalink":"/docs/sql/sfmc-sql-conversion-functions"},{"id":"sql/sfmc-sql-date-functions","title":"SFMC SQL Date Functions","description":"Take control over dates with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-date-functions"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"sql/sfmc-sql-from","title":"SFMC SQL From","description":"Tell the SQL query FROM where you need the data.","permalink":"/docs/sql/sfmc-sql-from"},{"id":"sql/sfmc-sql-join","title":"SFMC SQL Join","description":"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.","permalink":"/docs/sql/sfmc-sql-join"},{"id":"sql/sfmc-sql-like","title":"SFMC SQL Like","description":"Get a LIKE and build more flexible SQL queries.","permalink":"/docs/sql/sfmc-sql-like"},{"id":"sql/sfmc-sql-null-functions","title":"SFMC SQL NULL Functions","description":"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-null-functions"},{"id":"sql/sfmc-sql-numeric-functions","title":"SFMC SQL Numeric Functions","description":"Take control over numbers with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-numeric-functions"},{"id":"sql/sfmc-sql-select","title":"SFMC SQL Select","description":"Selected information on the SELECT statement in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-select"},{"id":"sql/sfmc-sql-string-functions","title":"SFMC SQL String Functions","description":"Take control over strings with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-string-functions"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"sql/sfmc-sql-where","title":"SFMC SQL Where","description":"Use WHERE to make your query lean and to the point. Less is more.","permalink":"/docs/sql/sfmc-sql-where"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"},{"id":"ssjs/ssjs-if-and-switch","title":"SSJS If & Switch","description":"Deep dive into the two pillars of SSJS flow control.","permalink":"/docs/ssjs/ssjs-if-and-switch"},{"id":"ssjs/ssjs-loops","title":"SSJS Loops","description":"Let\'s dive into limited looping options of the SSJS.","permalink":"/docs/ssjs/ssjs-loops"},{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","permalink":"/docs/ssjs/snippets/ssjs-script-template"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"},{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"},{"id":"zen-of-sfmc","title":"Zen of SFMC","description":"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.","permalink":"/docs/zen-of-sfmc"}]}')}}]); \ No newline at end of file diff --git a/assets/js/491.ef9cc416.js b/assets/js/491.ef9cc416.js new file mode 100644 index 000000000..e29782f49 --- /dev/null +++ b/assets/js/491.ef9cc416.js @@ -0,0 +1,1788 @@ +"use strict"; +exports.id = 491; +exports.ids = [491]; +exports.modules = { + +/***/ 42491: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +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, 6], $V2 = [1, 4], $V3 = [1, 5], $V4 = [2, 5], $V5 = [1, 12], $V6 = [5, 7, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40, 47], $V7 = [7, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40], $V8 = [7, 12, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40], $V9 = [7, 13, 47], $Va = [1, 42], $Vb = [1, 41], $Vc = [7, 13, 29, 32, 35, 38, 47], $Vd = [1, 55], $Ve = [1, 56], $Vf = [1, 57], $Vg = [7, 13, 32, 35, 42, 47]; + var parser2 = { + trace: function trace() { + }, + 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 anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + return $$[$0]; + case 3: + return $$[$0 - 1]; + case 4: + yy.setDirection($$[$0 - 3]); + return $$[$0 - 1]; + case 6: + yy.setOptions($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 7: + $$[$0 - 1] += $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 9: + this.$ = []; + break; + case 10: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 11: + this.$ = $$[$0 - 1]; + break; + case 16: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 17: + case 18: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 19: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 21: + yy.checkout($$[$0]); + break; + case 22: + yy.branch($$[$0]); + break; + case 23: + yy.branch($$[$0 - 2], $$[$0]); + break; + case 24: + yy.cherryPick($$[$0], "", void 0); + break; + case 25: + yy.cherryPick($$[$0 - 2], "", void 0, $$[$0]); + break; + case 26: + yy.cherryPick($$[$0 - 2], "", $$[$0]); + break; + case 27: + yy.cherryPick($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 28: + yy.cherryPick($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 29: + yy.cherryPick($$[$0], "", $$[$0 - 2]); + break; + case 30: + yy.cherryPick($$[$0], "", ""); + break; + case 31: + yy.cherryPick($$[$0 - 2], "", ""); + break; + case 32: + yy.cherryPick($$[$0 - 4], "", "", $$[$0 - 2]); + break; + case 33: + yy.cherryPick($$[$0 - 4], "", "", $$[$0]); + break; + case 34: + yy.cherryPick($$[$0 - 2], "", $$[$0 - 4], $$[$0]); + break; + case 35: + yy.cherryPick($$[$0 - 2], "", "", $$[$0]); + break; + case 36: + yy.merge($$[$0], "", "", ""); + break; + case 37: + yy.merge($$[$0 - 2], $$[$0], "", ""); + break; + case 38: + yy.merge($$[$0 - 2], "", $$[$0], ""); + break; + case 39: + yy.merge($$[$0 - 2], "", "", $$[$0]); + break; + case 40: + yy.merge($$[$0 - 4], $$[$0], "", $$[$0 - 2]); + break; + case 41: + yy.merge($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 42: + yy.merge($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 43: + yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 44: + yy.merge($$[$0 - 4], $$[$0 - 2], "", $$[$0]); + break; + case 45: + yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 46: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 47: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 48: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 49: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 50: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 51: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 52: + yy.commit($$[$0]); + break; + case 53: + yy.commit("", "", yy.commitType.NORMAL, $$[$0]); + break; + case 54: + yy.commit("", "", $$[$0], ""); + break; + case 55: + yy.commit("", "", $$[$0], $$[$0 - 2]); + break; + case 56: + yy.commit("", "", $$[$0 - 2], $$[$0]); + break; + case 57: + yy.commit("", $$[$0], yy.commitType.NORMAL, ""); + break; + case 58: + yy.commit("", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 59: + yy.commit("", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 60: + yy.commit("", $$[$0 - 2], $$[$0], ""); + break; + case 61: + yy.commit("", $$[$0], $$[$0 - 2], ""); + break; + case 62: + yy.commit("", $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 63: + yy.commit("", $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 64: + yy.commit("", $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 65: + yy.commit("", $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 66: + yy.commit("", $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 67: + yy.commit("", $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 68: + yy.commit($$[$0], "", yy.commitType.NORMAL, ""); + break; + case 69: + yy.commit($$[$0], "", yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 70: + yy.commit($$[$0 - 2], "", yy.commitType.NORMAL, $$[$0]); + break; + case 71: + yy.commit($$[$0 - 2], "", $$[$0], ""); + break; + case 72: + yy.commit($$[$0], "", $$[$0 - 2], ""); + break; + case 73: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, ""); + break; + case 74: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, ""); + break; + case 75: + yy.commit($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 76: + yy.commit($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 77: + yy.commit($$[$0 - 2], "", $$[$0 - 4], $$[$0]); + break; + case 78: + yy.commit($$[$0], "", $$[$0 - 4], $$[$0 - 2]); + break; + case 79: + yy.commit($$[$0], "", $$[$0 - 2], $$[$0 - 4]); + break; + case 80: + yy.commit($$[$0 - 2], "", $$[$0], $$[$0 - 4]); + break; + case 81: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 82: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 83: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], ""); + break; + case 84: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], ""); + break; + case 85: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], ""); + break; + case 86: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], ""); + break; + case 87: + yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 88: + yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 89: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 90: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 91: + yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 92: + yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]); + break; + case 93: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 94: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 95: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 96: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 97: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 98: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 99: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]); + break; + case 100: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]); + break; + case 101: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]); + break; + case 102: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]); + break; + case 103: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]); + break; + case 104: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]); + break; + case 105: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]); + break; + case 106: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]); + break; + case 107: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]); + break; + case 108: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]); + break; + case 109: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]); + break; + case 110: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]); + break; + case 111: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]); + break; + case 112: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]); + break; + case 113: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]); + break; + case 114: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]); + break; + case 115: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]); + break; + case 116: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]); + break; + case 117: + this.$ = ""; + break; + case 118: + this.$ = $$[$0]; + break; + case 119: + this.$ = yy.commitType.NORMAL; + break; + case 120: + this.$ = yy.commitType.REVERSE; + break; + case 121: + this.$ = yy.commitType.HIGHLIGHT; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 7: $V1, 13: $V2, 47: $V3 }, { 1: [3] }, { 3: 7, 4: 2, 5: $V0, 7: $V1, 13: $V2, 47: $V3 }, { 6: 8, 7: $V4, 8: [1, 9], 9: [1, 10], 10: 11, 13: $V5 }, o($V6, [2, 124]), o($V6, [2, 125]), o($V6, [2, 126]), { 1: [2, 1] }, { 7: [1, 13] }, { 6: 14, 7: $V4, 10: 11, 13: $V5 }, { 8: [1, 15] }, o($V7, [2, 9], { 11: 16, 12: [1, 17] }), o($V8, [2, 8]), { 1: [2, 2] }, { 7: [1, 18] }, { 6: 19, 7: $V4, 10: 11, 13: $V5 }, { 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] }, o($V8, [2, 7]), { 1: [2, 3] }, { 7: [1, 36] }, o($V7, [2, 10]), { 4: 37, 7: $V1, 13: $V2, 47: $V3 }, o($V7, [2, 12]), o($V9, [2, 13]), o($V9, [2, 14]), o($V9, [2, 15]), { 20: [1, 38] }, { 22: [1, 39] }, o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), { 27: 40, 33: $Va, 46: $Vb }, o($V9, [2, 117], { 41: 43, 32: [1, 46], 33: [1, 48], 35: [1, 44], 38: [1, 45], 42: [1, 47] }), { 27: 49, 33: $Va, 46: $Vb }, { 32: [1, 50], 35: [1, 51] }, { 27: 52, 33: $Va, 46: $Vb }, { 1: [2, 4] }, o($V7, [2, 11]), o($V9, [2, 16]), o($V9, [2, 17]), o($V9, [2, 21]), o($Vc, [2, 122]), o($Vc, [2, 123]), o($V9, [2, 52]), { 33: [1, 53] }, { 39: 54, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 58] }, { 33: [1, 59] }, o($V9, [2, 118]), o($V9, [2, 36], { 32: [1, 60], 35: [1, 62], 38: [1, 61] }), { 33: [1, 63] }, { 33: [1, 64], 36: [1, 65] }, o($V9, [2, 22], { 29: [1, 66] }), o($V9, [2, 53], { 32: [1, 68], 38: [1, 67], 42: [1, 69] }), o($V9, [2, 54], { 32: [1, 71], 35: [1, 70], 42: [1, 72] }), o($Vg, [2, 119]), o($Vg, [2, 120]), o($Vg, [2, 121]), o($V9, [2, 57], { 35: [1, 73], 38: [1, 74], 42: [1, 75] }), o($V9, [2, 68], { 32: [1, 78], 35: [1, 76], 38: [1, 77] }), { 33: [1, 79] }, { 39: 80, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 81] }, o($V9, [2, 24], { 34: [1, 82], 35: [1, 83] }), { 32: [1, 84] }, { 32: [1, 85] }, { 30: [1, 86] }, { 39: 87, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 88] }, { 33: [1, 89] }, { 33: [1, 90] }, { 33: [1, 91] }, { 33: [1, 92] }, { 33: [1, 93] }, { 39: 94, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 95] }, { 33: [1, 96] }, { 39: 97, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 98] }, o($V9, [2, 37], { 35: [1, 100], 38: [1, 99] }), o($V9, [2, 38], { 32: [1, 102], 35: [1, 101] }), o($V9, [2, 39], { 32: [1, 103], 38: [1, 104] }), { 33: [1, 105] }, { 33: [1, 106], 36: [1, 107] }, { 33: [1, 108] }, { 33: [1, 109] }, o($V9, [2, 23]), o($V9, [2, 55], { 32: [1, 110], 42: [1, 111] }), o($V9, [2, 59], { 38: [1, 112], 42: [1, 113] }), o($V9, [2, 69], { 32: [1, 115], 38: [1, 114] }), o($V9, [2, 56], { 32: [1, 116], 42: [1, 117] }), o($V9, [2, 61], { 35: [1, 118], 42: [1, 119] }), o($V9, [2, 72], { 32: [1, 121], 35: [1, 120] }), o($V9, [2, 58], { 38: [1, 122], 42: [1, 123] }), o($V9, [2, 60], { 35: [1, 124], 42: [1, 125] }), o($V9, [2, 73], { 35: [1, 127], 38: [1, 126] }), o($V9, [2, 70], { 32: [1, 129], 38: [1, 128] }), o($V9, [2, 71], { 32: [1, 131], 35: [1, 130] }), o($V9, [2, 74], { 35: [1, 133], 38: [1, 132] }), { 39: 134, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 135] }, { 33: [1, 136] }, { 33: [1, 137] }, { 33: [1, 138] }, { 39: 139, 43: $Vd, 44: $Ve, 45: $Vf }, o($V9, [2, 25], { 35: [1, 140] }), o($V9, [2, 26], { 34: [1, 141] }), o($V9, [2, 31], { 34: [1, 142] }), o($V9, [2, 29], { 34: [1, 143] }), o($V9, [2, 30], { 34: [1, 144] }), { 33: [1, 145] }, { 33: [1, 146] }, { 39: 147, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 148] }, { 39: 149, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 150] }, { 33: [1, 151] }, { 33: [1, 152] }, { 33: [1, 153] }, { 33: [1, 154] }, { 33: [1, 155] }, { 33: [1, 156] }, { 39: 157, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 158] }, { 33: [1, 159] }, { 33: [1, 160] }, { 39: 161, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 162] }, { 39: 163, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 164] }, { 33: [1, 165] }, { 33: [1, 166] }, { 39: 167, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 168] }, o($V9, [2, 43], { 35: [1, 169] }), o($V9, [2, 44], { 38: [1, 170] }), o($V9, [2, 42], { 32: [1, 171] }), o($V9, [2, 45], { 35: [1, 172] }), o($V9, [2, 40], { 38: [1, 173] }), o($V9, [2, 41], { 32: [1, 174] }), { 33: [1, 175], 36: [1, 176] }, { 33: [1, 177] }, { 33: [1, 178] }, { 33: [1, 179] }, { 33: [1, 180] }, o($V9, [2, 66], { 42: [1, 181] }), o($V9, [2, 79], { 32: [1, 182] }), o($V9, [2, 67], { 42: [1, 183] }), o($V9, [2, 90], { 38: [1, 184] }), o($V9, [2, 80], { 32: [1, 185] }), o($V9, [2, 89], { 38: [1, 186] }), o($V9, [2, 65], { 42: [1, 187] }), o($V9, [2, 78], { 32: [1, 188] }), o($V9, [2, 64], { 42: [1, 189] }), o($V9, [2, 84], { 35: [1, 190] }), o($V9, [2, 77], { 32: [1, 191] }), o($V9, [2, 83], { 35: [1, 192] }), o($V9, [2, 63], { 42: [1, 193] }), o($V9, [2, 91], { 38: [1, 194] }), o($V9, [2, 62], { 42: [1, 195] }), o($V9, [2, 85], { 35: [1, 196] }), o($V9, [2, 86], { 35: [1, 197] }), o($V9, [2, 92], { 38: [1, 198] }), o($V9, [2, 76], { 32: [1, 199] }), o($V9, [2, 87], { 38: [1, 200] }), o($V9, [2, 75], { 32: [1, 201] }), o($V9, [2, 81], { 35: [1, 202] }), o($V9, [2, 82], { 35: [1, 203] }), o($V9, [2, 88], { 38: [1, 204] }), { 33: [1, 205] }, { 39: 206, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 207] }, { 33: [1, 208] }, { 39: 209, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 210] }, o($V9, [2, 27]), o($V9, [2, 32]), o($V9, [2, 28]), o($V9, [2, 33]), o($V9, [2, 34]), o($V9, [2, 35]), { 33: [1, 211] }, { 33: [1, 212] }, { 33: [1, 213] }, { 39: 214, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 215] }, { 39: 216, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 217] }, { 33: [1, 218] }, { 33: [1, 219] }, { 33: [1, 220] }, { 33: [1, 221] }, { 33: [1, 222] }, { 33: [1, 223] }, { 39: 224, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 225] }, { 33: [1, 226] }, { 33: [1, 227] }, { 39: 228, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 229] }, { 39: 230, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 231] }, { 33: [1, 232] }, { 33: [1, 233] }, { 39: 234, 43: $Vd, 44: $Ve, 45: $Vf }, o($V9, [2, 46]), o($V9, [2, 48]), o($V9, [2, 47]), o($V9, [2, 49]), o($V9, [2, 51]), o($V9, [2, 50]), o($V9, [2, 107]), o($V9, [2, 108]), o($V9, [2, 105]), o($V9, [2, 106]), o($V9, [2, 110]), o($V9, [2, 109]), o($V9, [2, 114]), o($V9, [2, 113]), o($V9, [2, 112]), o($V9, [2, 111]), o($V9, [2, 116]), o($V9, [2, 115]), o($V9, [2, 104]), o($V9, [2, 103]), o($V9, [2, 102]), o($V9, [2, 101]), o($V9, [2, 99]), o($V9, [2, 100]), o($V9, [2, 98]), o($V9, [2, 97]), o($V9, [2, 96]), o($V9, [2, 95]), o($V9, [2, 93]), o($V9, [2, 94])], + defaultActions: { 7: [2, 1], 13: [2, 2], 18: [2, 3], 36: [2, 4] }, + 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: + this.begin("acc_title"); + return 19; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 21; + 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: + return 13; + case 8: + break; + 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: + return 9; + case 26: + return 9; + case 27: + return 8; + case 28: + return "CARET"; + case 29: + this.begin("options"); + break; + case 30: + this.popState(); + break; + case 31: + return 12; + case 32: + return 36; + case 33: + this.begin("string"); + break; + case 34: + this.popState(); + 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": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "options": { "rules": [30, 31], "inclusive": false }, "string": { "rules": [34, 35], "inclusive": false }, "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": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const gitGraphParser = parser; +let mainBranchName = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; +let mainBranchOrder = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; +let commits = {}; +let head = null; +let branchesConfig = {}; +branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder }; +let branches = {}; +branches[mainBranchName] = head; +let curBranch = mainBranchName; +let direction = "LR"; +let seq = 0; +function getId() { + return (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.x)({ length: 7 }); +} +function uniqBy(list, fn) { + const recordMap = /* @__PURE__ */ Object.create(null); + return list.reduce((out, item) => { + const key = fn(item); + if (!recordMap[key]) { + recordMap[key] = true; + out.push(item); + } + return out; + }, []); +} +const setDirection = function(dir2) { + direction = dir2; +}; +let options = {}; +const setOptions = function(rawOptString) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("options str", rawOptString); + rawOptString = rawOptString && rawOptString.trim(); + rawOptString = rawOptString || "{}"; + try { + options = JSON.parse(rawOptString); + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing gitGraph options", e.message); + } +}; +const getOptions = function() { + return options; +}; +const commit = function(msg, id, type, tag) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering commit:", msg, id, type, tag); + id = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(id, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + msg = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(msg, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + tag = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const commit2 = { + id: id ? id : seq + "-" + getId(), + message: msg, + seq: seq++, + type: type ? type : commitType$1.NORMAL, + tag: tag ? tag : "", + parents: head == null ? [] : [head.id], + branch: curBranch + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in pushCommit " + commit2.id); +}; +const branch = function(name, order) { + name = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(name, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (branches[name] === void 0) { + branches[name] = head != null ? head.id : null; + branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null }; + checkout(name); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in createBranch"); + } else { + let error = 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 ' + name + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } +}; +const merge = function(otherBranch, custom_id, override_type, custom_tag) { + otherBranch = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(otherBranch, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + custom_id = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(custom_id, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const currentCommit = commits[branches[curBranch]]; + const otherCommit = commits[branches[otherBranch]]; + if (curBranch === otherBranch) { + let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "merge". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["commit"] + }; + throw error; + } else if (branches[otherBranch] === void 0) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch " + otherBranch] + }; + throw error; + } else if (otherCommit === void 0 || !otherCommit) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"commit"'] + }; + throw error; + } else if (currentCommit === otherCommit) { + let error = new Error('Incorrect usage of "merge". Both branches have same head'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (custom_id && commits[custom_id] !== void 0) { + let error = new Error( + 'Incorrect usage of "merge". Commit with id:' + custom_id + " already exists, use different custom Id" + ); + error.hash = { + text: "merge " + otherBranch + custom_id + override_type + custom_tag, + token: "merge " + otherBranch + custom_id + override_type + custom_tag, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: [ + "merge " + otherBranch + " " + custom_id + "_UNIQUE " + override_type + " " + custom_tag + ] + }; + throw error; + } + const commit2 = { + id: custom_id ? custom_id : seq + "-" + getId(), + message: "merged branch " + otherBranch + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, branches[otherBranch]], + branch: curBranch, + type: commitType$1.MERGE, + customType: override_type, + customId: custom_id ? true : false, + tag: custom_tag ? custom_tag : "" + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in mergeBranch"); +}; +const cherryPick = function(sourceId, targetId, tag, parentCommitId) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering cherryPick:", sourceId, targetId, tag); + sourceId = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(sourceId, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + targetId = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(targetId, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + tag = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + parentCommitId = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(parentCommitId, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (!sourceId || commits[sourceId] === void 0) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit id should exist and provided' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + let sourceCommit = commits[sourceId]; + let sourceCommitBranch = sourceCommit.branch; + if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) { + let error = new Error( + "Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit." + ); + throw error; + } + if (sourceCommit.type === commitType$1.MERGE && !parentCommitId) { + let error = new Error( + "Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified." + ); + throw error; + } + if (!targetId || commits[targetId] === void 0) { + if (sourceCommitBranch === curBranch) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit is already on current branch' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const currentCommit = commits[branches[curBranch]]; + if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const commit2 = { + id: seq + "-" + getId(), + message: "cherry-picked " + sourceCommit + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, sourceCommit.id], + branch: curBranch, + type: commitType$1.CHERRY_PICK, + tag: tag ?? `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType$1.MERGE ? `|parent:${parentCommitId}` : ""}` + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in cherryPick"); + } +}; +const checkout = function(branch2) { + branch2 = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(branch2, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (branches[branch2] === void 0) { + let error = new Error( + 'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch2 + '")' + ); + error.hash = { + text: "checkout " + branch2, + token: "checkout " + branch2, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"branch ' + branch2 + '"'] + }; + throw error; + } else { + curBranch = branch2; + const id = branches[curBranch]; + head = commits[id]; + } +}; +function upsert(arr, key, newVal) { + const index = arr.indexOf(key); + if (index === -1) { + arr.push(newVal); + } else { + arr.splice(index, 1, newVal); + } +} +function prettyPrintCommitHistory(commitArr) { + const commit2 = commitArr.reduce((out, commit3) => { + if (out.seq > commit3.seq) { + return out; + } + return commit3; + }, commitArr[0]); + let line = ""; + commitArr.forEach(function(c) { + if (c === commit2) { + line += " *"; + } else { + line += " |"; + } + }); + const label = [line, commit2.id, commit2.seq]; + for (let branch2 in branches) { + if (branches[branch2] === commit2.id) { + label.push(branch2); + } + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(label.join(" ")); + if (commit2.parents && commit2.parents.length == 2) { + const newCommit = commits[commit2.parents[0]]; + upsert(commitArr, commit2, newCommit); + commitArr.push(commits[commit2.parents[1]]); + } else if (commit2.parents.length == 0) { + return; + } else { + const nextCommit = commits[commit2.parents]; + upsert(commitArr, commit2, nextCommit); + } + commitArr = uniqBy(commitArr, (c) => c.id); + prettyPrintCommitHistory(commitArr); +} +const prettyPrint = function() { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(commits); + const node = getCommitsArray()[0]; + prettyPrintCommitHistory([node]); +}; +const clear$1 = function() { + commits = {}; + head = null; + let mainBranch = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; + let mainBranchOrder2 = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; + branches = {}; + branches[mainBranch] = null; + branchesConfig = {}; + branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 }; + curBranch = mainBranch; + seq = 0; + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const getBranchesAsObjArray = function() { + const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => { + if (branchConfig.order !== null) { + return branchConfig; + } + return { + ...branchConfig, + order: parseFloat(`0.${i}`, 10) + }; + }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name })); + return branchesArray; +}; +const getBranches = function() { + return branches; +}; +const getCommits = function() { + return commits; +}; +const getCommitsArray = function() { + const commitArr = Object.keys(commits).map(function(key) { + return commits[key]; + }); + commitArr.forEach(function(o) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(o.id); + }); + commitArr.sort((a, b) => a.seq - b.seq); + return commitArr; +}; +const getCurrentBranch = function() { + return curBranch; +}; +const getDirection = function() { + return direction; +}; +const getHead = function() { + return head; +}; +const commitType$1 = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const gitGraphDb = { + getConfig: () => (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph, + setDirection, + setOptions, + getOptions, + commit, + branch, + merge, + cherryPick, + checkout, + //reset, + prettyPrint, + clear: clear$1, + getBranchesAsObjArray, + getBranches, + getCommits, + getCommitsArray, + getCurrentBranch, + getDirection, + getHead, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.b, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.r, + commitType: commitType$1 +}; +let allCommitsDict = {}; +const commitType = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const THEME_COLOR_LIMIT = 8; +let branchPos = {}; +let commitPos = {}; +let lanes = []; +let maxPos = 0; +let dir = "LR"; +const clear = () => { + branchPos = {}; + commitPos = {}; + allCommitsDict = {}; + maxPos = 0; + lanes = []; + dir = "LR"; +}; +const drawText = (txt) => { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + let rows = []; + if (typeof txt === "string") { + rows = txt.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(txt)) { + rows = txt; + } 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"); + tspan.setAttribute("class", "row"); + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; +}; +const drawCommits = (svg, commits2, modifyGraph) => { + const gitGraphConfig = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph; + const gBullets = svg.append("g").attr("class", "commit-bullets"); + const gLabels = svg.append("g").attr("class", "commit-labels"); + let pos = 0; + if (dir === "TB") { + pos = 30; + } + const keys = Object.keys(commits2); + const sortedKeys = keys.sort((a, b) => { + return commits2[a].seq - commits2[b].seq; + }); + sortedKeys.forEach((key) => { + const commit2 = commits2[key]; + const y = dir === "TB" ? pos + 10 : branchPos[commit2.branch].pos; + const x = dir === "TB" ? branchPos[commit2.branch].pos : pos + 10; + if (modifyGraph) { + let typeClass; + let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== "" ? commit2.customType : commit2.type; + switch (commitSymbolType) { + case commitType.NORMAL: + typeClass = "commit-normal"; + break; + case commitType.REVERSE: + typeClass = "commit-reverse"; + break; + case commitType.HIGHLIGHT: + typeClass = "commit-highlight"; + break; + case commitType.MERGE: + typeClass = "commit-merge"; + break; + case commitType.CHERRY_PICK: + typeClass = "commit-cherry-pick"; + break; + default: + typeClass = "commit-normal"; + } + if (commitSymbolType === commitType.HIGHLIGHT) { + const circle = gBullets.append("rect"); + circle.attr("x", x - 10); + circle.attr("y", y - 10); + circle.attr("height", 20); + circle.attr("width", 20); + circle.attr( + "class", + `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer` + ); + gBullets.append("rect").attr("x", x - 6).attr("y", y - 6).attr("height", 12).attr("width", 12).attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner` + ); + } else if (commitSymbolType === commitType.CHERRY_PICK) { + gBullets.append("circle").attr("cx", x).attr("cy", y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x - 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x + 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x + 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x - 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + } else { + const circle = gBullets.append("circle"); + circle.attr("cx", x); + circle.attr("cy", y); + circle.attr("r", commit2.type === commitType.MERGE ? 9 : 10); + circle.attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + if (commitSymbolType === commitType.MERGE) { + const circle2 = gBullets.append("circle"); + circle2.attr("cx", x); + circle2.attr("cy", y); + circle2.attr("r", 6); + circle2.attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + if (commitSymbolType === commitType.REVERSE) { + const cross = gBullets.append("path"); + cross.attr("d", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + } + } + if (dir === "TB") { + commitPos[commit2.id] = { x, y: pos + 10 }; + } else { + commitPos[commit2.id] = { x: pos + 10, y }; + } + if (modifyGraph) { + const px = 4; + const py = 2; + if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) { + const wrapper = gLabels.append("g"); + const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); + const text = wrapper.append("text").attr("x", pos).attr("y", y + 25).attr("class", "commit-label").text(commit2.id); + let bbox = text.node().getBBox(); + labelBkg.attr("x", pos + 10 - bbox.width / 2 - py).attr("y", y + 13.5).attr("width", bbox.width + 2 * py).attr("height", bbox.height + 2 * py); + if (dir === "TB") { + labelBkg.attr("x", x - (bbox.width + 4 * px + 5)).attr("y", y - 12); + text.attr("x", x - (bbox.width + 4 * px)).attr("y", y + bbox.height - 12); + } + if (dir !== "TB") { + text.attr("x", pos + 10 - bbox.width / 2); + } + if (gitGraphConfig.rotateCommitLabel) { + if (dir === "TB") { + text.attr("transform", "rotate(-45, " + x + ", " + y + ")"); + labelBkg.attr("transform", "rotate(-45, " + x + ", " + y + ")"); + } else { + let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5; + let r_y = 10 + bbox.width / 25 * 8.5; + wrapper.attr( + "transform", + "translate(" + r_x + ", " + r_y + ") rotate(-45, " + pos + ", " + y + ")" + ); + } + } + } + if (commit2.tag) { + const rect = gLabels.insert("polygon"); + const hole = gLabels.append("circle"); + const tag = gLabels.append("text").attr("y", y - 16).attr("class", "tag-label").text(commit2.tag); + let tagBbox = tag.node().getBBox(); + tag.attr("x", pos + 10 - tagBbox.width / 2); + const h2 = tagBbox.height / 2; + const ly = y - 19.2; + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${pos - tagBbox.width / 2 - px / 2},${ly + py} + ${pos - tagBbox.width / 2 - px / 2},${ly - py} + ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py} + ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py} + ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py} + ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}` + ); + hole.attr("cx", pos - tagBbox.width / 2 + px / 2).attr("cy", ly).attr("r", 1.5).attr("class", "tag-hole"); + if (dir === "TB") { + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${x},${pos + py} + ${x},${pos - py} + ${x + 10},${pos - h2 - py} + ${x + 10 + tagBbox.width + px},${pos - h2 - py} + ${x + 10 + tagBbox.width + px},${pos + h2 + py} + ${x + 10},${pos + h2 + py}` + ).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); + hole.attr("cx", x + px / 2).attr("cy", pos).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); + tag.attr("x", x + 5).attr("y", pos + 3).attr("transform", "translate(14,14) rotate(45, " + x + "," + pos + ")"); + } + } + } + pos += 50; + if (pos > maxPos) { + maxPos = pos; + } + }); +}; +const shouldRerouteArrow = (commitA, commitB, p1, p2, allCommits) => { + const commitBIsFurthest = dir === "TB" ? p1.x < p2.x : p1.y < p2.y; + const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch; + const isOnBranchToGetCurve = (x) => x.branch === branchToGetCurve; + const isBetweenCommits = (x) => x.seq > commitA.seq && x.seq < commitB.seq; + return Object.values(allCommits).some((commitX) => { + return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX); + }); +}; +const findLane = (y1, y2, depth = 0) => { + const candidate = y1 + Math.abs(y1 - y2) / 2; + if (depth > 5) { + return candidate; + } + let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10); + if (ok) { + lanes.push(candidate); + return candidate; + } + const diff = Math.abs(y1 - y2); + return findLane(y1, y2 - diff / 5, depth + 1); +}; +const drawArrow = (svg, commitA, commitB, allCommits) => { + const p1 = commitPos[commitA.id]; + const p2 = commitPos[commitB.id]; + const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits); + let arc = ""; + let arc2 = ""; + let radius = 0; + let offset = 0; + let colorClassNum = branchPos[commitB.branch].index; + let lineDef; + if (arrowNeedsRerouting) { + arc = "A 10 10, 0, 0, 0,"; + arc2 = "A 10 10, 0, 0, 1,"; + radius = 10; + offset = 10; + const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y); + const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x); + if (dir === "TB") { + if (p1.x < p2.x) { + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } else { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`; + } else { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`; + } + } + } else { + if (dir === "TB") { + if (p1.x < p2.x) { + arc = "A 20 20, 0, 0, 0,"; + arc2 = "A 20 20, 0, 0, 1,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`; + } + if (p1.x > p2.x) { + arc = "A 20 20, 0, 0, 0,"; + arc2 = "A 20 20, 0, 0, 1,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.x === p2.x) { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x + radius} ${p1.y} ${arc} ${p1.x + offset} ${p2.y + radius} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.y > p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`; + } + if (p1.y === p2.y) { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } + } + svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); +}; +const drawArrows = (svg, commits2) => { + const gArrows = svg.append("g").attr("class", "commit-arrows"); + Object.keys(commits2).forEach((key) => { + const commit2 = commits2[key]; + if (commit2.parents && commit2.parents.length > 0) { + commit2.parents.forEach((parent) => { + drawArrow(gArrows, commits2[parent], commit2, commits2); + }); + } + }); +}; +const drawBranches = (svg, branches2) => { + const gitGraphConfig = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph; + const g = svg.append("g"); + branches2.forEach((branch2, index) => { + const adjustIndexForTheme = index % THEME_COLOR_LIMIT; + const pos = branchPos[branch2.name].pos; + const line = g.append("line"); + line.attr("x1", 0); + line.attr("y1", pos); + line.attr("x2", maxPos); + line.attr("y2", pos); + line.attr("class", "branch branch" + adjustIndexForTheme); + if (dir === "TB") { + line.attr("y1", 30); + line.attr("x1", pos); + line.attr("y2", maxPos); + line.attr("x2", pos); + } + lanes.push(pos); + let name = branch2.name; + const labelElement = drawText(name); + const bkg = g.insert("rect"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); + label.attr( + "transform", + "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" + ); + if (dir === "TB") { + bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0); + label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)"); + } + if (dir !== "TB") { + bkg.attr("transform", "translate(-19, " + (pos - bbox.height / 2) + ")"); + } + }); +}; +const draw = function(txt, id, ver, diagObj) { + clear(); + const conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const gitGraphConfig = conf.gitGraph; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in gitgraph renderer", txt + "\n", "id:", id, ver); + allCommitsDict = diagObj.db.getCommits(); + const branches2 = diagObj.db.getBranchesAsObjArray(); + dir = diagObj.db.getDirection(); + const diagram2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + let pos = 0; + branches2.forEach((branch2, index) => { + const labelElement = drawText(branch2.name); + const g = diagram2.append("g"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + branchPos[branch2.name] = { pos, index }; + pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0) + (dir === "TB" ? bbox.width / 2 : 0); + label.remove(); + branchLabel.remove(); + g.remove(); + }); + drawCommits(diagram2, allCommitsDict, false); + if (gitGraphConfig.showBranches) { + drawBranches(diagram2, branches2); + } + drawArrows(diagram2, allCommitsDict); + drawCommits(diagram2, allCommitsDict, true); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.u.insertTitle( + diagram2, + "gitTitleText", + gitGraphConfig.titleTopMargin, + diagObj.db.getDiagramTitle() + ); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.y)( + void 0, + diagram2, + gitGraphConfig.diagramPadding, + gitGraphConfig.useMaxWidth ?? conf.useMaxWidth + ); +}; +const gitGraphRenderer = { + draw +}; +const getStyles = (options2) => ` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0, 1, 2, 3, 4, 5, 6, 7].map( + (i) => ` + .branch-label${i} { fill: ${options2["gitBranchLabel" + i]}; } + .commit${i} { stroke: ${options2["git" + i]}; fill: ${options2["git" + i]}; } + .commit-highlight${i} { stroke: ${options2["gitInv" + i]}; fill: ${options2["gitInv" + i]}; } + .label${i} { fill: ${options2["git" + i]}; } + .arrow${i} { stroke: ${options2["git" + i]}; } + ` +).join("\n")} + + .branch { + stroke-width: 1; + stroke: ${options2.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};} + .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};} + .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; } + .tag-hole { fill: ${options2.textColor}; } + + .commit-merge { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + .commit-reverse { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options2.textColor}; + } +`; +const gitGraphStyles = getStyles; +const diagram = { + parser: gitGraphParser, + db: gitGraphDb, + renderer: gitGraphRenderer, + styles: gitGraphStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/4d6aece4.4cba0721.js b/assets/js/4d6aece4.4cba0721.js new file mode 100644 index 000000000..1e6a9de8b --- /dev/null +++ b/assets/js/4d6aece4.4cba0721.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3466],{1246:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>p});var s=a(5893),n=a(1151),i=a(1872),o=a(7577);const r={id:"sfmc-webinar-cloud-page-apps",title:"SFMC Cloud Page Apps",sidebar_label:"Cloud Page Apps",description:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",image:"img/og/og-image-webinar-cloud-page-apps.png",tags:["Webinar","Marketing Cloud","AppExchange","SSJS","Cloud Page","App","Snippet","Configuration"]},l=void 0,d={id:"webinars/sfmc-webinar-cloud-page-apps",title:"SFMC Cloud Page Apps",description:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",source:"@site/docs/webinars/sfmc-webinar-cloud-page-apps.mdx",sourceDirName:"webinars",slug:"/webinars/sfmc-webinar-cloud-page-apps",permalink:"/docs/webinars/sfmc-webinar-cloud-page-apps",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/webinars/sfmc-webinar-cloud-page-apps.mdx",tags:[{label:"Webinar",permalink:"/docs/tags/webinar"},{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"AppExchange",permalink:"/docs/tags/app-exchange"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"App",permalink:"/docs/tags/app"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Configuration",permalink:"/docs/tags/configuration"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1704489222,formattedLastUpdatedAt:"Jan 5, 2024",frontMatter:{id:"sfmc-webinar-cloud-page-apps",title:"SFMC Cloud Page Apps",sidebar_label:"Cloud Page Apps",description:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",image:"img/og/og-image-webinar-cloud-page-apps.png",tags:["Webinar","Marketing Cloud","AppExchange","SSJS","Cloud Page","App","Snippet","Configuration"]},sidebar:"webinars",previous:{title:"Architecting Web Solutions",permalink:"/docs/webinars/sfmc-webinar-architecting-web-solutions"}},c={},p=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Video",id:"video",level:2},{value:"Materials",id:"materials",level:2}];function u(e){const t={a:"a",h2:"h2",li:"li",ol:"ol",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.m,{content:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages."}),"\n",(0,s.jsx)(t.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["SFMC Solutioning 101 (",(0,s.jsx)(t.a,{href:"https://youtu.be/3ngC9OLKaEI?t=256",children:"4:15"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Cloud Page App 101 (",(0,s.jsx)(t.a,{href:"https://youtu.be/3ngC9OLKaEI?t=731",children:"12:11"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["AppExchange Menu Magic (",(0,s.jsx)(t.a,{href:"https://youtu.be/3ngC9OLKaEI?t=860",children:"14:20"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Cloud Page App SSO (",(0,s.jsx)(t.a,{href:"https://youtu.be/3ngC9OLKaEI?t=1326",children:"22:06"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Simple Cloud Page App (",(0,s.jsx)(t.a,{href:"https://youtu.be/3ngC9OLKaEI?t=1613",children:"26:53"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Complex Cloud Page App (",(0,s.jsx)(t.a,{href:"https://youtu.be/3ngC9OLKaEI?t=2796",children:"43:36"}),")"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"video",children:"Video"}),"\n",(0,s.jsx)(o._,{videoId:"3ngC9OLKaEI",title:"When AppExchange is right and what to do when it's wrong Webinar Recording"}),"\n",(0,s.jsx)(t.h2,{id:"materials",children:"Materials"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"19 October 2022"}),(0,s.jsx)(t.th,{children:"When AppExchange is right and what to do when it's wrong"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Recording"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"https://www.youtube.com/watch?v=3ngC9OLKaEI&list=PL_o00w2Z5LYF91zZDfjY03RWg2P-wdZr9",children:"YouTube"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Slides"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/blob/master/static/pdf/%5B2022-05%5D%20Architecting%20Web%20Solutions%20in%20SFMC.pdf",children:"PDF"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Snippets"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/sfmc-cloud-page-app-template",children:"GitHub"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Articles"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"../../ssjs/snippets/sfmc-cloud-page-apps/",children:"Solve with Cloud Page Apps"})," & ",(0,s.jsx)(t.a,{href:"../../config/sfmc-code-resource/",children:"Power of Code Resources"})]})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1872:(e,t,a)=>{a.d(t,{m:()=>i});a(7294);const s="leadText_qzwo";var n=a(5893);const i=e=>{let{content:t}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:s,children:t})})}},7577:(e,t,a)=>{a.d(t,{_:()=>n});a(7294);var s=a(5893);const n=e=>{let{videoId:t,title:a="YouTube video player"}=e;const n="https://www.youtube-nocookie.com/embed/"+t;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("div",{class:"video--container",children:(0,s.jsx)("iframe",{src:n,title:a,class:"video",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen;",allowfullscreen:!0})})})}},1151:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>o});var s=a(7294);const n={},i=s.createContext(n);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4d6aece4.ad869df5.js b/assets/js/4d6aece4.ad869df5.js deleted file mode 100644 index 7062b79ad..000000000 --- a/assets/js/4d6aece4.ad869df5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3466],{4137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=s(a),m=r,g=u["".concat(p,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(g,l(l({ref:t},c),{},{components:a})):n.createElement(g,l({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:r,l[1]=i;for(var s=2;s<o;s++)l[s]=a[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},1872:(e,t,a)=>{a.d(t,{m:()=>o});var n=a(7294);const r="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},t))}},7577:(e,t,a)=>{a.d(t,{_:()=>r});var n=a(7294);const r=e=>{let{videoId:t,title:a="YouTube video player"}=e;const r="https://www.youtube-nocookie.com/embed/"+t;return n.createElement(n.Fragment,null,n.createElement("div",{class:"video--container"},n.createElement("iframe",{src:r,title:a,class:"video",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen;",allowfullscreen:!0})))}},2611:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var n=a(7462),r=(a(7294),a(4137)),o=a(1872),l=a(7577);const i={id:"sfmc-webinar-cloud-page-apps",title:"SFMC Cloud Page Apps",sidebar_label:"Cloud Page Apps",description:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",image:"img/og/og-image-webinar-cloud-page-apps.png",tags:["Webinar","Marketing Cloud","AppExchange","SSJS","Cloud Page","App","Snippet","Configuration"]},p=void 0,s={unversionedId:"webinars/sfmc-webinar-cloud-page-apps",id:"webinars/sfmc-webinar-cloud-page-apps",title:"SFMC Cloud Page Apps",description:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",source:"@site/docs/webinars/sfmc-webinar-cloud-page-apps.mdx",sourceDirName:"webinars",slug:"/webinars/sfmc-webinar-cloud-page-apps",permalink:"/docs/webinars/sfmc-webinar-cloud-page-apps",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/webinars/sfmc-webinar-cloud-page-apps.mdx",tags:[{label:"Webinar",permalink:"/docs/tags/webinar"},{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"AppExchange",permalink:"/docs/tags/app-exchange"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"App",permalink:"/docs/tags/app"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Configuration",permalink:"/docs/tags/configuration"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1675034465,formattedLastUpdatedAt:"Jan 29, 2023",frontMatter:{id:"sfmc-webinar-cloud-page-apps",title:"SFMC Cloud Page Apps",sidebar_label:"Cloud Page Apps",description:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",image:"img/og/og-image-webinar-cloud-page-apps.png",tags:["Webinar","Marketing Cloud","AppExchange","SSJS","Cloud Page","App","Snippet","Configuration"]},sidebar:"webinars",previous:{title:"Architecting Web Solutions",permalink:"/docs/webinars/sfmc-webinar-architecting-web-solutions"}},c={},u=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Video",id:"video",level:2},{value:"Materials",id:"materials",level:2}],d={toc:u},m="wrapper";function g(e){let{components:t,...a}=e;return(0,r.kt)(m,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"table-of-contents"},"Table of Contents"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"SFMC Solutioning 101 (",(0,r.kt)("a",{parentName:"li",href:"https://youtu.be/3ngC9OLKaEI?t=256"},"4:15"),")"),(0,r.kt)("li",{parentName:"ol"},"Cloud Page App 101 (",(0,r.kt)("a",{parentName:"li",href:"https://youtu.be/3ngC9OLKaEI?t=731"},"12:11"),")"),(0,r.kt)("li",{parentName:"ol"},"AppExchange Menu Magic (",(0,r.kt)("a",{parentName:"li",href:"https://youtu.be/3ngC9OLKaEI?t=860"},"14:20"),")"),(0,r.kt)("li",{parentName:"ol"},"Cloud Page App SSO (",(0,r.kt)("a",{parentName:"li",href:"https://youtu.be/3ngC9OLKaEI?t=1326"},"22:06"),")"),(0,r.kt)("li",{parentName:"ol"},"Simple Cloud Page App (",(0,r.kt)("a",{parentName:"li",href:"https://youtu.be/3ngC9OLKaEI?t=1613"},"26:53"),")"),(0,r.kt)("li",{parentName:"ol"},"Complex Cloud Page App (",(0,r.kt)("a",{parentName:"li",href:"https://youtu.be/3ngC9OLKaEI?t=2796"},"43:36"),")")),(0,r.kt)("h2",{id:"video"},"Video"),(0,r.kt)(l._,{videoId:"3ngC9OLKaEI",title:"When AppExchange is right and what to do when it's wrong Webinar Recording",mdxType:"YouTube"}),(0,r.kt)("h2",{id:"materials"},"Materials"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"19 October 2022"),(0,r.kt)("th",{parentName:"tr",align:null},"When AppExchange is right and what to do when it's wrong"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Recording"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.youtube.com/watch?v=3ngC9OLKaEI&list=PL_o00w2Z5LYF91zZDfjY03RWg2P-wdZr9"},"YouTube"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Slides"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/blob/master/static/pdf/%5B2022-05%5D%20Architecting%20Web%20Solutions%20in%20SFMC.pdf"},"PDF"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Snippets"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/MateuszDabrowski/sfmc-cloud-page-app-template"},"GitHub"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Articles"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"../../ssjs/snippets/sfmc-cloud-page-apps/"},"Solve with Cloud Page Apps")," & ",(0,r.kt)("a",{parentName:"td",href:"../../config/sfmc-code-resource/"},"Power of Code Resources"))))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/509f2ea4.2daddc7a.js b/assets/js/509f2ea4.2daddc7a.js new file mode 100644 index 000000000..4371fc26e --- /dev/null +++ b/assets/js/509f2ea4.2daddc7a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9134],{7041:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=t(5893),r=t(1151),i=t(1872);const o={id:"sfmc-sql-where",title:"SFMC SQL Where",sidebar_label:"Where",description:"Use WHERE to make your query lean and to the point. Less is more.",image:"img/og/og-image-sql-where.png",tags:["Marketing Cloud","SQL"]},a=void 0,l={id:"sql/sfmc-sql-where",title:"SFMC SQL Where",description:"Use WHERE to make your query lean and to the point. Less is more.",source:"@site/docs/sql/sfmc-sql-where.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-where",permalink:"/docs/sql/sfmc-sql-where",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-where.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1657131299,formattedLastUpdatedAt:"Jul 6, 2022",frontMatter:{id:"sfmc-sql-where",title:"SFMC SQL Where",sidebar_label:"Where",description:"Use WHERE to make your query lean and to the point. Less is more.",image:"img/og/og-image-sql-where.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Join",permalink:"/docs/sql/sfmc-sql-join"},next:{title:"Case",permalink:"/docs/sql/sfmc-sql-case"}},d={},c=[{value:"Basic operators",id:"basic-operators",level:2},{value:"Equality operators",id:"equality-operators",level:3},{value:"Comparison operators",id:"comparison-operators",level:3},{value:"LIKE operator",id:"like-operator",level:2},{value:"Logical operators",id:"logical-operators",level:2},{value:"BETWEEN shorthand",id:"between-shorthand",level:3},{value:"IN shorthand",id:"in-shorthand",level:3},{value:"NOT operator",id:"not-operator",level:2},{value:"CASE operator",id:"case-operator",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.m,{content:"Use WHERE to make your query lean and to the point. Less is more."}),"\n",(0,n.jsxs)(s.p,{children:["With just ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:(0,n.jsx)(s.code,{children:"SELECT"})})," and ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from",children:(0,n.jsx)(s.code,{children:"FROM"})})," statements, you can already start building your queries. With the addition of ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})}),", you can do much more than in the Salesforce Marketing Cloud UI. ",(0,n.jsx)(s.code,{children:"WHERE"})," grants you even more power by allowing you to filter your queries' outcomes."]}),"\n",(0,n.jsxs)(s.p,{children:["The concept behind it is straightforward. It takes all the results you obtained with the query above the ",(0,n.jsx)(s.code,{children:"WHERE"}),", and for each, it applies one or more conditions. If they evaluate to ",(0,n.jsx)(s.code,{children:"TRUE"})," - this particular result will be available in the output Data Extension. If evaluation ends with ",(0,n.jsx)(s.code,{children:"FALSE"}),", ",(0,n.jsx)(s.code,{children:"WHERE"})," will filter it out."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:"{5} title=\"All subscribers with domain equal to 'mateuszdabrowski.pl'\"",children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Domain = 'mateuszdabrowski.pl'\n"})}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"WHERE"})," statement is heavily impacted by ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions",children:(0,n.jsx)(s.code,{children:"NULL"})})," values - be sure to check ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions",children:"dedicated guide"})," on how to solve those issues."]})}),"\n",(0,n.jsx)(s.h2,{id:"basic-operators",children:"Basic operators"}),"\n",(0,n.jsxs)(s.p,{children:["In many scenarios, you will be using the basic operators in your ",(0,n.jsx)(s.code,{children:"WHERE"})," clauses. In the example above, you already saw the equality operator (",(0,n.jsx)(s.code,{children:"="}),"). There are a few more available."]}),"\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:"Operator"}),(0,n.jsx)(s.th,{children:"Description"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"="})}),(0,n.jsx)(s.td,{children:"Equal to"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"!="})," or ",(0,n.jsx)(s.code,{children:"<>"})]}),(0,n.jsx)(s.td,{children:"Not equal to"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:">"})}),(0,n.jsx)(s.td,{children:"Greater than"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"<"})}),(0,n.jsx)(s.td,{children:"Less than"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:">="})}),(0,n.jsx)(s.td,{children:"Greater or equal to"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"<="})}),(0,n.jsx)(s.td,{children:"Less or equal to"})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"equality-operators",children:"Equality operators"}),"\n",(0,n.jsxs)(s.p,{children:["Equality operators (",(0,n.jsx)(s.code,{children:"="}),", ",(0,n.jsx)(s.code,{children:"!="}),") are great when you have a controlled value. Think booleans (for example Opt-in information) and picklists (for example Status field on ",(0,n.jsx)(s.code,{children:"_Subscribers"})," System Data View that is limited to four values)."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5} title="All subscribers that do not have the unsubscribed status"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Status != 'unsubscribed'\n"})}),"\n",(0,n.jsx)(s.h3,{id:"comparison-operators",children:"Comparison operators"}),"\n",(0,n.jsxs)(s.p,{children:["Comparison operators (",(0,n.jsx)(s.code,{children:"<"}),", ",(0,n.jsx)(s.code,{children:">"}),", ",(0,n.jsx)(s.code,{children:">="}),", ",(0,n.jsx)(s.code,{children:"<="}),") are perfect when you are operating on numbers (for example selecting contacts with low Customer Lifetime Value) or dates."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5} title="All subscribers that joined within the last month"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE CONVERT(DATE, DateJoined) >= DATEADD(MONTH, -1, CONVERT(DATE, GETUTCDATE()))\n"})}),"\n",(0,n.jsxs)(s.p,{children:["With dates, you will frequently want to use a bit more complex structure for the comparison to work correctly. In this case, we are converting the ",(0,n.jsx)(s.code,{children:"DateJoined"})," value to a simple date (day, month, year without the time). We are also getting a current date in UTC format and converting it to a simple date. Next, we subtract one month and compare it to the ",(0,n.jsx)(s.code,{children:"DateJoined"})," transformed value. I cover more such examples in the ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions",children:"SFMC SQL Date Functions"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"like-operator",children:"LIKE operator"}),"\n",(0,n.jsxs)(s.p,{children:["Another handy operator is ",(0,n.jsx)(s.code,{children:"LIKE"}),". It allows you to leverage wildcards to search for matching records based on value fragment. You may know it from the ",(0,n.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-case#like-in-case",children:[(0,n.jsx)(s.code,{children:"SELECT"})," ",(0,n.jsx)(s.code,{children:"CASE"})," statement"]}),", but it is much more useful with ",(0,n.jsx)(s.code,{children:"WHERE"}),". Think about filtering with just a part of the value (for example email domain in ",(0,n.jsx)(s.code,{children:"EmailAddress"})," field) or with a single element within multi picklist (for instance finding one value within the comma-separated list of all purchased products)."]}),"\n",(0,n.jsxs)(s.p,{children:["However, in the marketing automation world, the ",(0,n.jsx)(s.code,{children:"LIKE"})," operator is handy for selecting contacts based on the multi-picklist columns. Consider ",(0,n.jsx)(s.code,{children:"ActiveSubscriptions"})," field with any combination of values ",(0,n.jsx)(s.code,{children:"Phone"}),", ",(0,n.jsx)(s.code,{children:"TV"}),", or ",(0,n.jsx)(s.code,{children:"Internet"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use ",(0,n.jsx)(s.a,{href:"#equality",children:"equality operator"})," (",(0,n.jsx)(s.code,{children:"WHERE ActiveSubscription = 'Phone'"}),"), as it would return only contacts that have just this one subscription. However, some of your customers might have multiple (phone and tv or phone and internet plans). For SQL, a field containing ",(0,n.jsx)(s.code,{children:"'Phone'"})," is not equal to having a value of ",(0,n.jsx)(s.code,{children:"'Phone', Internet'"}),". ",(0,n.jsx)(s.code,{children:"LIKE"})," operator is here to save the day."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5} title="All subscribers that have at least Phone subscription"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE ActiveSubscription LIKE '%Phone%'\n"})}),"\n",(0,n.jsxs)(s.p,{children:["It is also an excellent tool for database cleaning by finding incorrect values within automation. To learn more about the possibilities, check out the ",(0,n.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-like",children:[(0,n.jsx)(s.code,{children:"LIKE"})," guide"]}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"logical-operators",children:"Logical operators"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"WHERE"})," statement supports standard logical operators - ",(0,n.jsx)(s.code,{children:"AND"})," & ",(0,n.jsx)(s.code,{children:"OR"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["They allow you to create more fine-tuned filters evaluating either multiple values or a single value from various points of view. You can use as many ",(0,n.jsx)(s.code,{children:"AND"}),"s and ",(0,n.jsx)(s.code,{children:"OR"}),"s as you want, but keep in mind the AutoKill 30 minute limit for query execution."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5-8} title="All subscribers that have at least Phone subscription AND are in its twelfth month"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n ActiveSubscription LIKE '%Phone%'\n AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))\n AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The standard order of execution evaluates the pairs joined by ",(0,n.jsx)(s.code,{children:"AND"})," first and then considers the ones with ",(0,n.jsx)(s.code,{children:"OR"}),". But you can use parentheses ",(0,n.jsx)(s.code,{children:"()"})," to enforce your order:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{6} title="All subscribers that have at least either Phone OR Internet subscription AND are in its twelfth month"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')\n AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))\n AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))\n"})}),"\n",(0,n.jsxs)(s.p,{children:["There are many use cases for using ",(0,n.jsx)(s.code,{children:"AND"})," or ",(0,n.jsx)(s.code,{children:"OR"}),". The most popular ones are filtering by range (numerical or date-based) and capturing records fulfilling at least one of multiple criteria. For both, there is an optional shorthand."]}),"\n",(0,n.jsx)(s.h3,{id:"between-shorthand",children:"BETWEEN shorthand"}),"\n",(0,n.jsxs)(s.p,{children:["Whenever you want to work on ranges, instead of binding ",(0,n.jsx)(s.code,{children:">="})," & ",(0,n.jsx)(s.code,{children:"<="})," scopes (closed range) with ",(0,n.jsx)(s.code,{children:"AND"}),", you can leverage ",(0,n.jsx)(s.code,{children:"BETWEEN"})," statement."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:"{8}",children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')\n AND CONVERT(DATE, SubscriptionStart)\n BETWEEN DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))\n AND DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))\n"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"BETWEEN"})," is replacing only a range greater or equal to the first value and smaller or equal to the second value. Additionally, it behaves weird when working with dates or datetime values."]}),"\n",(0,n.jsxs)(s.p,{children:["For example: ",(0,n.jsx)(s.code,{children:'WHERE Date BETWEEN "01/01/2020" AND "31/01/2020"'})," will work as if you wrote ",(0,n.jsx)(s.code,{children:'WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 00:00:00"'}),". It would result in a lack of data for the last day of the range. In most cases you would rather want ",(0,n.jsx)(s.code,{children:'WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 23:59:59"'}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Due to the above, I recommended not use ",(0,n.jsx)(s.code,{children:"BETWEEN"})," statement, unless you are sure the range is correct."]}),"\n",(0,n.jsx)(s.h3,{id:"in-shorthand",children:"IN shorthand"}),"\n",(0,n.jsxs)(s.p,{children:["There is another shorthand available - the ",(0,n.jsx)(s.code,{children:"IN"})," statement. And it is much more interesting than the ",(0,n.jsx)(s.code,{children:"BETWEEN"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["It allows you to simplify ",(0,n.jsx)(s.code,{children:"WHERE"})," statement with multiple ",(0,n.jsx)(s.code,{children:"OR"})," operators (like ",(0,n.jsx)(s.code,{children:"WHERE Status = 'held' OR Status = 'unsubscribed' OR Status = 'bounced'"}),") by using a list of searched values:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5} title="All subscribers with the unsubscribed, bounced or temporarily held status"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Status IN ('held', 'unsubscribed', 'bounced')\n"})}),"\n",(0,n.jsx)(s.p,{children:"As you can see above, the syntax is much shorter and more readable."}),"\n",(0,n.jsxs)(s.p,{children:["But the beauty of ",(0,n.jsx)(s.code,{children:"IN"})," statement doesn't end there. It additionally optimizes the search speed by sorting the data and performing the binary search. Thanks to it, using ",(0,n.jsx)(s.code,{children:"IN"})," instead of multiple ",(0,n.jsx)(s.code,{children:"OR"}),"s can lead to significant performance improvements."]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:["Unfortunately, you cannot use ",(0,n.jsx)(s.code,{children:"IN"})," statement together with ",(0,n.jsx)(s.code,{children:"LIKE"})," statement. You need to use one or more ",(0,n.jsx)(s.code,{children:"OR"})," operators for such use case."]})}),"\n",(0,n.jsx)(s.h2,{id:"not-operator",children:"NOT operator"}),"\n",(0,n.jsxs)(s.p,{children:["Sometimes you want to rather exclude some records instead of searching for them. In many cases, you can do it by just adjusting the operators (for example ",(0,n.jsx)(s.code,{children:"!="})," instead of ",(0,n.jsx)(s.code,{children:"="}),"). There are, however, some situations where the ",(0,n.jsx)(s.code,{children:"NOT"})," operator is the best tool for the job."]}),"\n",(0,n.jsxs)(s.p,{children:["It is especially apparent when working with ",(0,n.jsx)(s.code,{children:"LIKE"}),", ",(0,n.jsx)(s.code,{children:"BETWEEN"}),", ",(0,n.jsx)(s.code,{children:"IN"})," and ",(0,n.jsx)(s.code,{children:"EXISTS"})," operators."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5} title="All subscribers NOT with unsubscribed, bounced or temporarily held status"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Status NOT IN ('held', 'unsubscribed', 'bounced')\n"})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{5} title="All subscribers that have email address NOT ending with @mateuszdabrowski.pl"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE EmailAddress NOT LIKE '%@mateuszdabrowski.pl'\n"})}),"\n",(0,n.jsx)(s.h2,{id:"case-operator",children:"CASE operator"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"CASE"})," statement is not only useful in a ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:(0,n.jsx)(s.code,{children:"SELECT"})})," part of the query. You can use it also within the ",(0,n.jsx)(s.code,{children:"WHERE"}),". There are two approaches to do this."]}),"\n",(0,n.jsxs)(s.p,{children:["The first compare ",(0,n.jsx)(s.code,{children:"1"})," to the outcome of the ",(0,n.jsx)(s.code,{children:"CASE"})," statement that evaluates each of its conditions to either ",(0,n.jsx)(s.code,{children:"1"})," or ",(0,n.jsx)(s.code,{children:"0"}),". If the comparison evaluates to ",(0,n.jsx)(s.code,{children:"WHERE 1 = 1"})," it will resolve to ",(0,n.jsx)(s.code,{children:"TRUE"})," and return the result."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{6-11} title="All subscribers NOT with unsubscribed, bounced or temporarily held status"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE\n 1 = CASE Status\n WHEN 'active' THEN 1\n WHEN 'held' THEN 0\n WHEN 'unsubscribed' THEN 0\n WHEN 'bounced' THEN 0\n END\n"})}),"\n",(0,n.jsxs)(s.p,{children:["It works, but you can write it better with other means mentioned above in most cases. This query was previously coded with single-line ",(0,n.jsx)(s.code,{children:"WHERE"})," utilizing ",(0,n.jsx)(s.code,{children:"NOT IN"})," statement."]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:["You can do better even with the ",(0,n.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-case#search-version-of-case",children:["search version of ",(0,n.jsx)(s.code,{children:"CASE"})]}),", as it allows you to use ",(0,n.jsx)(s.code,{children:"AND"}),"/",(0,n.jsx)(s.code,{children:"OR"}),"/",(0,n.jsx)(s.code,{children:"IN"})," within the ",(0,n.jsx)(s.code,{children:"CASE"}),":"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{6-9} title="All subscribers NOT with unsubscribed, bounced or temporarily held status"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE\n 1 = CASE\n WHEN Status = 'active' THEN 1\n WHEN Status IN ('held', 'unsubscribed', 'bounced') THEN 0\n END\n"})}),(0,n.jsxs)(s.p,{children:["Notice the lack of ",(0,n.jsx)(s.code,{children:"Status"})," column name right after ",(0,n.jsx)(s.code,{children:"CASE"})," keyword and its addition in each ",(0,n.jsx)(s.code,{children:"WHEN"}),"."]})]}),"\n",(0,n.jsxs)(s.p,{children:["The second approach compares a field to the ",(0,n.jsx)(s.code,{children:"CASE"})," statement evaluation and is much more useful:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'{6-9} title="All subscribers that have EmailAddress different from the Preferred Email"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n EmailAddress != CASE\n WHEN PreferredEmail = 'Personal Email' THEN PersonalEmail\n WHEN PreferredEmail = 'Work Email' THEN WorkEmail\n END\n"})}),"\n",(0,n.jsxs)(s.p,{children:["It can still be written using multiple ",(0,n.jsx)(s.code,{children:"AND"})," & ",(0,n.jsx)(s.code,{children:"OR"})," statements, but it is shorter and more readable thanks to the ",(0,n.jsx)(s.code,{children:"CASE"})," statement."]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CASE"})," statement returns ",(0,n.jsx)(s.code,{children:"THEN"})," value of the first condition that evaluated to ",(0,n.jsx)(s.code,{children:"TRUE"}),". It means that if in your query first condition is true, the rest will be ignored. Even if for the selected contact, all of them would be true."]}),(0,n.jsxs)(s.p,{children:["Always consider the order of the conditions in your ",(0,n.jsx)(s.code,{children:"CASE"})," statement. It might lead to errors if you don't expect behaviour mentioned above, and make your life much easier if you know it works that way."]})]}),"\n",(0,n.jsxs)(s.p,{children:["To learn more about the possibilities and ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case#iif-shorthand",children:"shorthands"}),", check out the ",(0,n.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-case",children:[(0,n.jsx)(s.code,{children:"CASE"})," guide"]}),"."]})]})}function u(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1872:(e,s,t)=>{t.d(s,{m:()=>i});t(7294);const n="leadText_qzwo";var r=t(5893);const i=e=>{let{content:s}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:n,children:s})})}},1151:(e,s,t)=>{t.d(s,{Z:()=>a,a:()=>o});var n=t(7294);const r={},i=n.createContext(r);function o(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/509f2ea4.61b2f7a5.js b/assets/js/509f2ea4.61b2f7a5.js deleted file mode 100644 index 01662b33f..000000000 --- a/assets/js/509f2ea4.61b2f7a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9134],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=p(n),c=r,h=d["".concat(l,".").concat(c)]||d[c]||m[c]||i;return n?a.createElement(h,o(o({ref:t},u),{},{components:n})):a.createElement(h,o({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,o[1]=s;for(var p=2;p<i;p++)o[p]=n[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>i});var a=n(7294);const r="leadText_qzwo",i=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}},9682:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=n(7462),r=(n(7294),n(4137)),i=n(1872);const o={id:"sfmc-sql-where",title:"SFMC SQL Where",sidebar_label:"Where",description:"Use WHERE to make your query lean and to the point. Less is more.",image:"img/og/og-image-sql-where.png",tags:["Marketing Cloud","SQL"]},s=void 0,l={unversionedId:"sql/sfmc-sql-where",id:"sql/sfmc-sql-where",title:"SFMC SQL Where",description:"Use WHERE to make your query lean and to the point. Less is more.",source:"@site/docs/sql/sfmc-sql-where.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-where",permalink:"/docs/sql/sfmc-sql-where",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-where.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1657131299,formattedLastUpdatedAt:"Jul 6, 2022",frontMatter:{id:"sfmc-sql-where",title:"SFMC SQL Where",sidebar_label:"Where",description:"Use WHERE to make your query lean and to the point. Less is more.",image:"img/og/og-image-sql-where.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Join",permalink:"/docs/sql/sfmc-sql-join"},next:{title:"Case",permalink:"/docs/sql/sfmc-sql-case"}},p={},u=[{value:"Basic operators",id:"basic-operators",level:2},{value:"Equality operators",id:"equality-operators",level:3},{value:"Comparison operators",id:"comparison-operators",level:3},{value:"LIKE operator",id:"like-operator",level:2},{value:"Logical operators",id:"logical-operators",level:2},{value:"BETWEEN shorthand",id:"between-shorthand",level:3},{value:"IN shorthand",id:"in-shorthand",level:3},{value:"NOT operator",id:"not-operator",level:2},{value:"CASE operator",id:"case-operator",level:2}],d={toc:u},m="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.m,{content:"Use WHERE to make your query lean and to the point. Less is more.",mdxType:"LeadText"}),(0,r.kt)("p",null,"With just ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT"))," and ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,r.kt)("inlineCode",{parentName:"a"},"FROM"))," statements, you can already start building your queries. With the addition of ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,r.kt)("inlineCode",{parentName:"a"},"JOIN")),", you can do much more than in the Salesforce Marketing Cloud UI. ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," grants you even more power by allowing you to filter your queries' outcomes."),(0,r.kt)("p",null,"The concept behind it is straightforward. It takes all the results you obtained with the query above the ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE"),", and for each, it applies one or more conditions. If they evaluate to ",(0,r.kt)("inlineCode",{parentName:"p"},"TRUE")," - this particular result will be available in the output Data Extension. If evaluation ends with ",(0,r.kt)("inlineCode",{parentName:"p"},"FALSE"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," will filter it out."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{5} title=\"All subscribers with domain equal to 'mateuszdabrowski.pl'\"","{5}":!0,title:'"All',subscribers:!0,with:!0,domain:!0,equal:!0,to:!0,"'mateuszdabrowski.pl'\"":!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Domain = 'mateuszdabrowski.pl'\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," statement is heavily impacted by ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-null-functions"},(0,r.kt)("inlineCode",{parentName:"a"},"NULL"))," values - be sure to check ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-null-functions"},"dedicated guide")," on how to solve those issues.")),(0,r.kt)("h2",{id:"basic-operators"},"Basic operators"),(0,r.kt)("p",null,"In many scenarios, you will be using the basic operators in your ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," clauses. In the example above, you already saw the equality operator (",(0,r.kt)("inlineCode",{parentName:"p"},"="),"). There are a few more available."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Operator"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"=")),(0,r.kt)("td",{parentName:"tr",align:null},"Equal to")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"!=")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"<>")),(0,r.kt)("td",{parentName:"tr",align:null},"Not equal to")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},">")),(0,r.kt)("td",{parentName:"tr",align:null},"Greater than")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<")),(0,r.kt)("td",{parentName:"tr",align:null},"Less than")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},">=")),(0,r.kt)("td",{parentName:"tr",align:null},"Greater or equal to")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"<=")),(0,r.kt)("td",{parentName:"tr",align:null},"Less or equal to")))),(0,r.kt)("h3",{id:"equality-operators"},"Equality operators"),(0,r.kt)("p",null,"Equality operators (",(0,r.kt)("inlineCode",{parentName:"p"},"="),", ",(0,r.kt)("inlineCode",{parentName:"p"},"!="),") are great when you have a controlled value. Think booleans (for example Opt-in information) and picklists (for example Status field on ",(0,r.kt)("inlineCode",{parentName:"p"},"_Subscribers")," System Data View that is limited to four values)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers that do not have the unsubscribed status"',"{5}":!0,title:'"All',subscribers:!0,that:!0,do:!0,not:!0,have:!0,the:!0,unsubscribed:!0,'status"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Status != 'unsubscribed'\n")),(0,r.kt)("h3",{id:"comparison-operators"},"Comparison operators"),(0,r.kt)("p",null,"Comparison operators (",(0,r.kt)("inlineCode",{parentName:"p"},"<"),", ",(0,r.kt)("inlineCode",{parentName:"p"},">"),", ",(0,r.kt)("inlineCode",{parentName:"p"},">="),", ",(0,r.kt)("inlineCode",{parentName:"p"},"<="),") are perfect when you are operating on numbers (for example selecting contacts with low Customer Lifetime Value) or dates."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers that joined within the last month"',"{5}":!0,title:'"All',subscribers:!0,that:!0,joined:!0,within:!0,the:!0,last:!0,'month"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE CONVERT(DATE, DateJoined) >= DATEADD(MONTH, -1, CONVERT(DATE, GETUTCDATE()))\n")),(0,r.kt)("p",null,"With dates, you will frequently want to use a bit more complex structure for the comparison to work correctly. In this case, we are converting the ",(0,r.kt)("inlineCode",{parentName:"p"},"DateJoined")," value to a simple date (day, month, year without the time). We are also getting a current date in UTC format and converting it to a simple date. Next, we subtract one month and compare it to the ",(0,r.kt)("inlineCode",{parentName:"p"},"DateJoined")," transformed value. I cover more such examples in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions"},"SFMC SQL Date Functions"),"."),(0,r.kt)("h2",{id:"like-operator"},"LIKE operator"),(0,r.kt)("p",null,"Another handy operator is ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE"),". It allows you to leverage wildcards to search for matching records based on value fragment. You may know it from the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#like-in-case"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT")," ",(0,r.kt)("inlineCode",{parentName:"a"},"CASE")," statement"),", but it is much more useful with ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE"),". Think about filtering with just a part of the value (for example email domain in ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailAddress")," field) or with a single element within multi picklist (for instance finding one value within the comma-separated list of all purchased products)."),(0,r.kt)("p",null,"However, in the marketing automation world, the ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," operator is handy for selecting contacts based on the multi-picklist columns. Consider ",(0,r.kt)("inlineCode",{parentName:"p"},"ActiveSubscriptions")," field with any combination of values ",(0,r.kt)("inlineCode",{parentName:"p"},"Phone"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"TV"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"Internet"),"."),(0,r.kt)("p",null,"Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use ",(0,r.kt)("a",{parentName:"p",href:"#equality"},"equality operator")," (",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE ActiveSubscription = 'Phone'"),"), as it would return only contacts that have just this one subscription. However, some of your customers might have multiple (phone and tv or phone and internet plans). For SQL, a field containing ",(0,r.kt)("inlineCode",{parentName:"p"},"'Phone'")," is not equal to having a value of ",(0,r.kt)("inlineCode",{parentName:"p"},"'Phone', Internet'"),". ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," operator is here to save the day."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers that have at least Phone subscription"',"{5}":!0,title:'"All',subscribers:!0,that:!0,have:!0,at:!0,least:!0,Phone:!0,'subscription"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE ActiveSubscription LIKE '%Phone%'\n")),(0,r.kt)("p",null,"It is also an excellent tool for database cleaning by finding incorrect values within automation. To learn more about the possibilities, check out the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-like"},(0,r.kt)("inlineCode",{parentName:"a"},"LIKE")," guide"),"."),(0,r.kt)("h2",{id:"logical-operators"},"Logical operators"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," statement supports standard logical operators - ",(0,r.kt)("inlineCode",{parentName:"p"},"AND")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),"."),(0,r.kt)("p",null,"They allow you to create more fine-tuned filters evaluating either multiple values or a single value from various points of view. You can use as many ",(0,r.kt)("inlineCode",{parentName:"p"},"AND"),"s and ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),"s as you want, but keep in mind the AutoKill 30 minute limit for query execution."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5-8} title="All subscribers that have at least Phone subscription AND are in its twelfth month"',"{5-8}":!0,title:'"All',subscribers:!0,that:!0,have:!0,at:!0,least:!0,Phone:!0,subscription:!0,AND:!0,are:!0,in:!0,its:!0,twelfth:!0,'month"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n ActiveSubscription LIKE '%Phone%'\n AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))\n AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))\n")),(0,r.kt)("p",null,"The standard order of execution evaluates the pairs joined by ",(0,r.kt)("inlineCode",{parentName:"p"},"AND")," first and then considers the ones with ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),". But you can use parentheses ",(0,r.kt)("inlineCode",{parentName:"p"},"()")," to enforce your order:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6} title="All subscribers that have at least either Phone OR Internet subscription AND are in its twelfth month"',"{6}":!0,title:'"All',subscribers:!0,that:!0,have:!0,at:!0,least:!0,either:!0,Phone:!0,OR:!0,Internet:!0,subscription:!0,AND:!0,are:!0,in:!0,its:!0,twelfth:!0,'month"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')\n AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))\n AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))\n")),(0,r.kt)("p",null,"There are many use cases for using ",(0,r.kt)("inlineCode",{parentName:"p"},"AND")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),". The most popular ones are filtering by range (numerical or date-based) and capturing records fulfilling at least one of multiple criteria. For both, there is an optional shorthand."),(0,r.kt)("h3",{id:"between-shorthand"},"BETWEEN shorthand"),(0,r.kt)("p",null,"Whenever you want to work on ranges, instead of binding ",(0,r.kt)("inlineCode",{parentName:"p"},">=")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"<=")," scopes (closed range) with ",(0,r.kt)("inlineCode",{parentName:"p"},"AND"),", you can leverage ",(0,r.kt)("inlineCode",{parentName:"p"},"BETWEEN")," statement."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{8}","{8}":!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')\n AND CONVERT(DATE, SubscriptionStart)\n BETWEEN DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))\n AND DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"BETWEEN")," is replacing only a range greater or equal to the first value and smaller or equal to the second value. Additionally, it behaves weird when working with dates or datetime values."),(0,r.kt)("p",null,"For example: ",(0,r.kt)("inlineCode",{parentName:"p"},'WHERE Date BETWEEN "01/01/2020" AND "31/01/2020"')," will work as if you wrote ",(0,r.kt)("inlineCode",{parentName:"p"},'WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 00:00:00"'),". It would result in a lack of data for the last day of the range. In most cases you would rather want ",(0,r.kt)("inlineCode",{parentName:"p"},'WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 23:59:59"'),"."),(0,r.kt)("p",null,"Due to the above, I recommended not use ",(0,r.kt)("inlineCode",{parentName:"p"},"BETWEEN")," statement, unless you are sure the range is correct."),(0,r.kt)("h3",{id:"in-shorthand"},"IN shorthand"),(0,r.kt)("p",null,"There is another shorthand available - the ",(0,r.kt)("inlineCode",{parentName:"p"},"IN")," statement. And it is much more interesting than the ",(0,r.kt)("inlineCode",{parentName:"p"},"BETWEEN"),"."),(0,r.kt)("p",null,"It allows you to simplify ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," statement with multiple ",(0,r.kt)("inlineCode",{parentName:"p"},"OR")," operators (like ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE Status = 'held' OR Status = 'unsubscribed' OR Status = 'bounced'"),") by using a list of searched values:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers with the unsubscribed, bounced or temporarily held status"',"{5}":!0,title:'"All',subscribers:!0,with:!0,the:!0,"unsubscribed,":!0,bounced:!0,or:!0,temporarily:!0,held:!0,'status"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Status IN ('held', 'unsubscribed', 'bounced')\n")),(0,r.kt)("p",null,"As you can see above, the syntax is much shorter and more readable."),(0,r.kt)("p",null,"But the beauty of ",(0,r.kt)("inlineCode",{parentName:"p"},"IN")," statement doesn't end there. It additionally optimizes the search speed by sorting the data and performing the binary search. Thanks to it, using ",(0,r.kt)("inlineCode",{parentName:"p"},"IN")," instead of multiple ",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),"s can lead to significant performance improvements."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Unfortunately, you cannot use ",(0,r.kt)("inlineCode",{parentName:"p"},"IN")," statement together with ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," statement. You need to use one or more ",(0,r.kt)("inlineCode",{parentName:"p"},"OR")," operators for such use case.")),(0,r.kt)("h2",{id:"not-operator"},"NOT operator"),(0,r.kt)("p",null,"Sometimes you want to rather exclude some records instead of searching for them. In many cases, you can do it by just adjusting the operators (for example ",(0,r.kt)("inlineCode",{parentName:"p"},"!=")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"="),"). There are, however, some situations where the ",(0,r.kt)("inlineCode",{parentName:"p"},"NOT")," operator is the best tool for the job."),(0,r.kt)("p",null,"It is especially apparent when working with ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"BETWEEN"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"IN")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"EXISTS")," operators."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers NOT with unsubscribed, bounced or temporarily held status"',"{5}":!0,title:'"All',subscribers:!0,NOT:!0,with:!0,"unsubscribed,":!0,bounced:!0,or:!0,temporarily:!0,held:!0,'status"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE Status NOT IN ('held', 'unsubscribed', 'bounced')\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers that have email address NOT ending with @mateuszdabrowski.pl"',"{5}":!0,title:'"All',subscribers:!0,that:!0,have:!0,email:!0,address:!0,NOT:!0,ending:!0,with:!0,'@mateuszdabrowski.pl"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE EmailAddress NOT LIKE '%@mateuszdabrowski.pl'\n")),(0,r.kt)("h2",{id:"case-operator"},"CASE operator"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement is not only useful in a ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT"))," part of the query. You can use it also within the ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE"),". There are two approaches to do this."),(0,r.kt)("p",null,"The first compare ",(0,r.kt)("inlineCode",{parentName:"p"},"1")," to the outcome of the ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement that evaluates each of its conditions to either ",(0,r.kt)("inlineCode",{parentName:"p"},"1")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"0"),". If the comparison evaluates to ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE 1 = 1")," it will resolve to ",(0,r.kt)("inlineCode",{parentName:"p"},"TRUE")," and return the result."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-11} title="All subscribers NOT with unsubscribed, bounced or temporarily held status"',"{6-11}":!0,title:'"All',subscribers:!0,NOT:!0,with:!0,"unsubscribed,":!0,bounced:!0,or:!0,temporarily:!0,held:!0,'status"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE\n 1 = CASE Status\n WHEN 'active' THEN 1\n WHEN 'held' THEN 0\n WHEN 'unsubscribed' THEN 0\n WHEN 'bounced' THEN 0\n END\n")),(0,r.kt)("p",null,"It works, but you can write it better with other means mentioned above in most cases. This query was previously coded with single-line ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," utilizing ",(0,r.kt)("inlineCode",{parentName:"p"},"NOT IN")," statement."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can do better even with the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#search-version-of-case"},"search version of ",(0,r.kt)("inlineCode",{parentName:"a"},"CASE")),", as it allows you to use ",(0,r.kt)("inlineCode",{parentName:"p"},"AND"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"OR"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"IN")," within the ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-9} title="All subscribers NOT with unsubscribed, bounced or temporarily held status"',"{6-9}":!0,title:'"All',subscribers:!0,NOT:!0,with:!0,"unsubscribed,":!0,bounced:!0,or:!0,temporarily:!0,held:!0,'status"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM _Subscribers\nWHERE\n 1 = CASE\n WHEN Status = 'active' THEN 1\n WHEN Status IN ('held', 'unsubscribed', 'bounced') THEN 0\n END\n")),(0,r.kt)("p",{parentName:"admonition"},"Notice the lack of ",(0,r.kt)("inlineCode",{parentName:"p"},"Status")," column name right after ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," keyword and its addition in each ",(0,r.kt)("inlineCode",{parentName:"p"},"WHEN"),".")),(0,r.kt)("p",null,"The second approach compares a field to the ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement evaluation and is much more useful:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-9} title="All subscribers that have EmailAddress different from the Preferred Email"',"{6-9}":!0,title:'"All',subscribers:!0,that:!0,have:!0,EmailAddress:!0,different:!0,from:!0,the:!0,Preferred:!0,'Email"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE\n EmailAddress != CASE\n WHEN PreferredEmail = 'Personal Email' THEN PersonalEmail\n WHEN PreferredEmail = 'Work Email' THEN WorkEmail\n END\n")),(0,r.kt)("p",null,"It can still be written using multiple ",(0,r.kt)("inlineCode",{parentName:"p"},"AND")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"OR")," statements, but it is shorter and more readable thanks to the ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement returns ",(0,r.kt)("inlineCode",{parentName:"p"},"THEN")," value of the first condition that evaluated to ",(0,r.kt)("inlineCode",{parentName:"p"},"TRUE"),". It means that if in your query first condition is true, the rest will be ignored. Even if for the selected contact, all of them would be true."),(0,r.kt)("p",{parentName:"admonition"},"Always consider the order of the conditions in your ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement. It might lead to errors if you don't expect behaviour mentioned above, and make your life much easier if you know it works that way.")),(0,r.kt)("p",null,"To learn more about the possibilities and ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#iif-shorthand"},"shorthands"),", check out the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case"},(0,r.kt)("inlineCode",{parentName:"a"},"CASE")," guide"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5364.d6ef04bc.js b/assets/js/5364.d6ef04bc.js new file mode 100644 index 000000000..7eb99fecd --- /dev/null +++ b/assets/js/5364.d6ef04bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5364],{5364:(t,e,a)=>{a.d(e,{diagram:()=>y});var r=a(2924),i=a(4218),n=a(1644),d=a(5625),o=a(6365);a(7484),a(7967),a(7856);let s=0;const l=function(t){let e=t.id;return t.type&&(e+="<"+(0,o.v)(t.type)+">"),e},p=function(t,e,a,r){const{displayText:i,cssStyle:n}=e.getDisplayDetails(),d=t.append("tspan").attr("x",r.padding).text(i);""!==n&&d.attr("style",e.cssStyle),a||d.attr("dy",r.textHeight)},c=function(t,e,a,r){o.l.debug("Rendering class ",e,a);const i=e.id,n={id:i,label:e.id,width:0,height:0},d=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let s;s=e.link?d.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=s.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",a.textHeight),c=!1}));let g=l(e);const h=s.append("tspan").text(g).attr("class","title");c||h.attr("dy",a.textHeight);const f=s.node().getBBox().height;let x,u,y;if(e.members.length>0){x=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin/2).attr("y2",a.padding+f+a.dividerMargin/2);const t=d.append("text").attr("x",a.padding).attr("y",f+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(e){p(t,e,c,a),c=!1})),u=t.node().getBBox()}if(e.methods.length>0){y=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin+u.height).attr("y2",a.padding+f+a.dividerMargin+u.height);const t=d.append("text").attr("x",a.padding).attr("y",f+2*a.dividerMargin+u.height+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(e){p(t,e,c,a),c=!1}))}const b=d.node().getBBox();var m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));const k=d.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",b.width+2*a.padding).attr("height",b.height+a.padding+.5*a.dividerMargin).attr("class",m).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(k-t.getBBox().width)/2)})),e.tooltip&&s.insert("title").text(e.tooltip),x&&x.attr("x2",k),y&&y.attr("x2",k),n.width=k,n.height=b.height+a.padding+.5*a.dividerMargin,n},g=function(t,e,a,r,n){const d=function(t){switch(t){case n.db.relationType.AGGREGATION:return"aggregation";case n.db.relationType.EXTENSION:return"extension";case n.db.relationType.COMPOSITION:return"composition";case n.db.relationType.DEPENDENCY:return"dependency";case n.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const l=e.points,p=(0,i.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(i.$0Z),c=t.append("path").attr("d",p(l)).attr("id","edge"+s).attr("class","relation");let g,h,f="";r.arrowMarkerAbsolute&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),1==a.relation.lineType&&c.attr("class","relation dashed-line"),10==a.relation.lineType&&c.attr("class","relation dotted-line"),"none"!==a.relation.type1&&c.attr("marker-start","url("+f+"#"+d(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&c.attr("marker-end","url("+f+"#"+d(a.relation.type2)+"End)");const x=e.points.length;let u,y,b,m,k=o.u.calcLabelPosition(e.points);if(g=k.x,h=k.y,x%2!=0&&x>1){let t=o.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=o.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[x-1]);o.l.debug("cardinality_1_point "+JSON.stringify(t)),o.l.debug("cardinality_2_point "+JSON.stringify(r)),u=t.x,y=t.y,b=r.x,m=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),i=e.append("text").attr("class","label").attr("x",g).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=i;const n=i.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",n.x-r.padding/2).attr("y",n.y-r.padding/2).attr("width",n.width+r.padding).attr("height",n.height+r.padding)}if(o.l.info("Rendering relation "+JSON.stringify(a)),void 0!==a.relationTitle1&&"none"!==a.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",y).attr("fill","black").attr("font-size","6").text(a.relationTitle1)}if(void 0!==a.relationTitle2&&"none"!==a.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",m).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}s++},h=function(t,e,a,r){o.l.debug("Rendering note ",e,a);const i=e.id,n={id:i,text:e.text,width:0,height:0},d=t.append("g").attr("id",i).attr("class","classGroup");let s=d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){o.l.debug(`Adding line: ${t}`),s.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const p=d.node().getBBox(),c=d.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",p.width+2*a.padding).attr("height",p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(c-t.getBBox().width)/2)})),n.width=c,n.height=p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin,n};let f={};const x=function(t){const e=Object.entries(f).find((e=>e[1].label===t));if(e)return e[0]},u={draw:function(t,e,a,r){const s=(0,o.c)().class;f={},o.l.info("Rendering diagram "+t);const l=(0,o.c)().securityLevel;let p;"sandbox"===l&&(p=(0,i.Ys)("#i"+e));const u="sandbox"===l?(0,i.Ys)(p.nodes()[0].contentDocument.body):(0,i.Ys)("body"),y=u.select(`[id='${e}']`);var b;(b=y).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"),b.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"),b.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"),b.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"),b.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"),b.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"),b.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"),b.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 m=new d.k({multigraph:!0});m.setGraph({isMultiGraph:!0}),m.setDefaultEdgeLabel((function(){return{}}));const k=r.db.getClasses(),w=Object.keys(k);for(const i of w){const t=k[i],e=c(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),o.l.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){o.l.info("tjoho"+x(t.id1)+x(t.id2)+JSON.stringify(t)),m.setEdge(x(t.id1),x(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){o.l.debug(`Adding note: ${JSON.stringify(t)}`);const e=h(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),t.class&&t.class in k&&m.setEdge(t.id,x(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,n.bK)(m),m.nodes().forEach((function(t){void 0!==t&&void 0!==m.node(t)&&(o.l.debug("Node "+t+": "+JSON.stringify(m.node(t))),u.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(m.node(t).x-m.node(t).width/2)+","+(m.node(t).y-m.node(t).height/2)+" )"))})),m.edges().forEach((function(t){void 0!==t&&void 0!==m.edge(t)&&(o.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(m.edge(t))),g(y,m.edge(t),m.edge(t).relation,s,r))}));const L=y.node().getBBox(),v=L.width+40,E=L.height+40;(0,o.i)(y,E,v,s.useMaxWidth);const M=`${L.x-20} ${L.y-20} ${v} ${E}`;o.l.debug(`viewBox ${M}`),y.attr("viewBox",M)}},y={parser:r.p,db:r.d,renderer:u,styles:r.s,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,r.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.d90f5bbc.js b/assets/js/55960ee5.f30931d4.js similarity index 87% rename from assets/js/55960ee5.d90f5bbc.js rename to assets/js/55960ee5.f30931d4.js index 6ed5804cd..59b358dfe 100644 --- a/assets/js/55960ee5.d90f5bbc.js +++ b/assets/js/55960ee5.f30931d4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4121],{8070:a=>{a.exports=JSON.parse('[{"label":"Marketing Cloud","permalink":"/docs/tags/marketing-cloud","count":47},{"label":"AMPScript","permalink":"/docs/tags/amp-script","count":6},{"label":"Style Guide","permalink":"/docs/tags/style-guide","count":3},{"label":"Best Practice","permalink":"/docs/tags/best-practice","count":5},{"label":"App","permalink":"/docs/tags/app","count":4},{"label":"AppExchange","permalink":"/docs/tags/app-exchange","count":2},{"label":"Configuration","permalink":"/docs/tags/configuration","count":8},{"label":"Email","permalink":"/docs/tags/email","count":7},{"label":"Journey","permalink":"/docs/tags/journey","count":3},{"label":"Personalisation","permalink":"/docs/tags/personalisation","count":7},{"label":"Behavioral Triggers","permalink":"/docs/tags/behavioral-triggers","count":1},{"label":"Einstein","permalink":"/docs/tags/einstein","count":1},{"label":"SSJS","permalink":"/docs/tags/ssjs","count":13},{"label":"Snippet","permalink":"/docs/tags/snippet","count":9},{"label":"Cloud Page","permalink":"/docs/tags/cloud-page","count":8},{"label":"SQL","permalink":"/docs/tags/sql","count":20},{"label":"Data Extensions","permalink":"/docs/tags/data-extensions","count":5},{"label":"Data Management","permalink":"/docs/tags/data-management","count":3},{"label":"Debugging","permalink":"/docs/tags/debugging","count":4},{"label":"Analytics","permalink":"/docs/tags/analytics","count":5},{"label":"Deliverability","permalink":"/docs/tags/deliverability","count":2},{"label":"SMS","permalink":"/docs/tags/sms","count":3},{"label":"Automation","permalink":"/docs/tags/automation","count":5},{"label":"Setup","permalink":"/docs/tags/setup","count":5},{"label":"CRM","permalink":"/docs/tags/crm","count":1},{"label":"Integration","permalink":"/docs/tags/integration","count":1},{"label":"Marketing Cloud Personalization","permalink":"/docs/tags/marketing-cloud-personalization","count":5},{"label":"Interaction Studio","permalink":"/docs/tags/interaction-studio","count":5},{"label":"TypeScript","permalink":"/docs/tags/type-script","count":3},{"label":"JavaScript","permalink":"/docs/tags/java-script","count":7},{"label":"Eloqua","permalink":"/docs/tags/eloqua","count":2},{"label":"Users","permalink":"/docs/tags/users","count":1},{"label":"Performance","permalink":"/docs/tags/performance","count":1},{"label":"Webinar","permalink":"/docs/tags/webinar","count":3}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4121],{8070:a=>{a.exports=JSON.parse('[{"label":"Marketing Cloud","permalink":"/docs/tags/marketing-cloud","count":48},{"label":"AMPScript","permalink":"/docs/tags/amp-script","count":6},{"label":"Style Guide","permalink":"/docs/tags/style-guide","count":3},{"label":"Best Practice","permalink":"/docs/tags/best-practice","count":5},{"label":"App","permalink":"/docs/tags/app","count":4},{"label":"AppExchange","permalink":"/docs/tags/app-exchange","count":2},{"label":"Configuration","permalink":"/docs/tags/configuration","count":8},{"label":"Email","permalink":"/docs/tags/email","count":7},{"label":"Journey","permalink":"/docs/tags/journey","count":3},{"label":"Personalisation","permalink":"/docs/tags/personalisation","count":8},{"label":"Behavioral Triggers","permalink":"/docs/tags/behavioral-triggers","count":1},{"label":"Einstein","permalink":"/docs/tags/einstein","count":1},{"label":"SSJS","permalink":"/docs/tags/ssjs","count":13},{"label":"Snippet","permalink":"/docs/tags/snippet","count":9},{"label":"Cloud Page","permalink":"/docs/tags/cloud-page","count":8},{"label":"SQL","permalink":"/docs/tags/sql","count":20},{"label":"Data Extensions","permalink":"/docs/tags/data-extensions","count":5},{"label":"Data Management","permalink":"/docs/tags/data-management","count":3},{"label":"Debugging","permalink":"/docs/tags/debugging","count":4},{"label":"Analytics","permalink":"/docs/tags/analytics","count":5},{"label":"Deliverability","permalink":"/docs/tags/deliverability","count":2},{"label":"SMS","permalink":"/docs/tags/sms","count":3},{"label":"Automation","permalink":"/docs/tags/automation","count":5},{"label":"Setup","permalink":"/docs/tags/setup","count":5},{"label":"CRM","permalink":"/docs/tags/crm","count":1},{"label":"Integration","permalink":"/docs/tags/integration","count":1},{"label":"Marketing Cloud Personalization","permalink":"/docs/tags/marketing-cloud-personalization","count":6},{"label":"Interaction Studio","permalink":"/docs/tags/interaction-studio","count":6},{"label":"TypeScript","permalink":"/docs/tags/type-script","count":4},{"label":"JavaScript","permalink":"/docs/tags/java-script","count":7},{"label":"Eloqua","permalink":"/docs/tags/eloqua","count":2},{"label":"Users","permalink":"/docs/tags/users","count":1},{"label":"Performance","permalink":"/docs/tags/performance","count":1},{"label":"Webinar","permalink":"/docs/tags/webinar","count":3}]')}}]); \ No newline at end of file diff --git a/assets/js/5622.8bc30185.js b/assets/js/5622.8bc30185.js new file mode 100644 index 000000000..5f918b5ba --- /dev/null +++ b/assets/js/5622.8bc30185.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5622],{5622:(t,n,e)=>{e.d(n,{diagram:()=>H});var i=e(6365),s=e(4218);function r(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e>i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e>s||void 0===e&&s>=s)&&(e=s)}return e}function o(t){return t.target.depth}function l(t,n){return t.sourceLinks.length?t.depth:n-1}function c(t,n){let e=0;if(void 0===n)for(let i of t)(i=+i)&&(e+=i);else{let i=-1;for(let s of t)(s=+n(s,++i,t))&&(e+=s)}return e}function h(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e<i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e<s||void 0===e&&s>=s)&&(e=s)}return e}function a(t){return function(){return t}}function u(t,n){return y(t.source,n.source)||t.index-n.index}function f(t,n){return y(t.target,n.target)||t.index-n.index}function y(t,n){return t.y0-n.y0}function d(t){return t.value}function p(t){return t.index}function g(t){return t.nodes}function _(t){return t.links}function x(t,n){const e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function k({nodes:t}){for(const n of t){let t=n.y0,e=t;for(const i of n.sourceLinks)i.y0=t+i.width/2,t+=i.width;for(const i of n.targetLinks)i.y1=e+i.width/2,e+=i.width}}function m(){let t,n,e,i=0,s=0,o=1,m=1,v=24,b=8,w=p,E=l,L=g,A=_,S=6;function M(){const l={nodes:L.apply(null,arguments),links:A.apply(null,arguments)};return function({nodes:t,links:n}){for(const[e,s]of t.entries())s.index=e,s.sourceLinks=[],s.targetLinks=[];const i=new Map(t.map(((n,e)=>[w(n,e,t),n])));for(const[e,s]of n.entries()){s.index=e;let{source:t,target:n}=s;"object"!=typeof t&&(t=s.source=x(i,t)),"object"!=typeof n&&(n=s.target=x(i,n)),t.sourceLinks.push(s),n.targetLinks.push(s)}if(null!=e)for(const{sourceLinks:s,targetLinks:r}of t)s.sort(e),r.sort(e)}(l),function({nodes:t}){for(const n of t)n.value=void 0===n.fixedValue?Math.max(c(n.sourceLinks,d),c(n.targetLinks,d)):n.fixedValue}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.depth=s;for(const{target:n}of t.sourceLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.height=s;for(const{source:n}of t.targetLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function(e){const l=function({nodes:t}){const e=h(t,(t=>t.depth))+1,s=(o-i-v)/(e-1),r=new Array(e);for(const n of t){const t=Math.max(0,Math.min(e-1,Math.floor(E.call(null,n,e))));n.layer=t,n.x0=i+t*s,n.x1=n.x0+v,r[t]?r[t].push(n):r[t]=[n]}if(n)for(const i of r)i.sort(n);return r}(e);t=Math.min(b,(m-s)/(h(l,(t=>t.length))-1)),function(n){const e=r(n,(n=>(m-s-(n.length-1)*t)/c(n,d)));for(const i of n){let n=s;for(const s of i){s.y0=n,s.y1=n+s.value*e,n=s.y1+t;for(const t of s.sourceLinks)t.width=t.value*e}n=(m-n+t)/(i.length+1);for(let t=0;t<i.length;++t){const e=i[t];e.y0+=n*(t+1),e.y1+=n*(t+1)}N(i)}}(l);for(let t=0;t<S;++t){const n=Math.pow(.99,t),e=Math.max(1-n,(t+1)/S);T(l,n,e),I(l,n,e)}}(l),k(l),l}function I(t,e,i){for(let s=1,r=t.length;s<r;++s){const r=t[s];for(const t of r){let n=0,i=0;for(const{source:e,value:r}of t.targetLinks){let s=r*(t.layer-e.layer);n+=$(e,t)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,D(t)}void 0===n&&r.sort(y),O(r,i)}}function T(t,e,i){for(let s=t.length-2;s>=0;--s){const r=t[s];for(const t of r){let n=0,i=0;for(const{target:e,value:r}of t.sourceLinks){let s=r*(e.layer-t.layer);n+=j(t,e)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,D(t)}void 0===n&&r.sort(y),O(r,i)}}function O(n,e){const i=n.length>>1,r=n[i];C(n,r.y0-t,i-1,e),P(n,r.y1+t,i+1,e),C(n,m,n.length-1,e),P(n,s,0,e)}function P(n,e,i,s){for(;i<n.length;++i){const r=n[i],o=(e-r.y0)*s;o>1e-6&&(r.y0+=o,r.y1+=o),e=r.y1+t}}function C(n,e,i,s){for(;i>=0;--i){const r=n[i],o=(r.y1-e)*s;o>1e-6&&(r.y0-=o,r.y1-=o),e=r.y0-t}}function D({sourceLinks:t,targetLinks:n}){if(void 0===e){for(const{source:{sourceLinks:t}}of n)t.sort(f);for(const{target:{targetLinks:n}}of t)n.sort(u)}}function N(t){if(void 0===e)for(const{sourceLinks:n,targetLinks:e}of t)n.sort(f),e.sort(u)}function $(n,e){let i=n.y0-(n.sourceLinks.length-1)*t/2;for(const{target:s,width:r}of n.sourceLinks){if(s===e)break;i+=r+t}for(const{source:t,width:s}of e.targetLinks){if(t===n)break;i-=s}return i}function j(n,e){let i=e.y0-(e.targetLinks.length-1)*t/2;for(const{source:s,width:r}of e.targetLinks){if(s===n)break;i+=r+t}for(const{target:t,width:s}of n.sourceLinks){if(t===e)break;i-=s}return i}return M.update=function(t){return k(t),t},M.nodeId=function(t){return arguments.length?(w="function"==typeof t?t:a(t),M):w},M.nodeAlign=function(t){return arguments.length?(E="function"==typeof t?t:a(t),M):E},M.nodeSort=function(t){return arguments.length?(n=t,M):n},M.nodeWidth=function(t){return arguments.length?(v=+t,M):v},M.nodePadding=function(n){return arguments.length?(b=t=+n,M):b},M.nodes=function(t){return arguments.length?(L="function"==typeof t?t:a(t),M):L},M.links=function(t){return arguments.length?(A="function"==typeof t?t:a(t),M):A},M.linkSort=function(t){return arguments.length?(e=t,M):e},M.size=function(t){return arguments.length?(i=s=0,o=+t[0],m=+t[1],M):[o-i,m-s]},M.extent=function(t){return arguments.length?(i=+t[0][0],o=+t[1][0],s=+t[0][1],m=+t[1][1],M):[[i,s],[o,m]]},M.iterations=function(t){return arguments.length?(S=+t,M):S},M}var v=Math.PI,b=2*v,w=1e-6,E=b-w;function L(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A(){return new L}L.prototype=A.prototype={constructor:L,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,s,r){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+s)+","+(this._y1=+r)},arcTo:function(t,n,e,i,s){t=+t,n=+n,e=+e,i=+i,s=+s;var r=this._x1,o=this._y1,l=e-t,c=i-n,h=r-t,a=o-n,u=h*h+a*a;if(s<0)throw new Error("negative radius: "+s);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(u>w)if(Math.abs(a*l-c*h)>w&&s){var f=e-r,y=i-o,d=l*l+c*c,p=f*f+y*y,g=Math.sqrt(d),_=Math.sqrt(u),x=s*Math.tan((v-Math.acos((d+u-p)/(2*g*_)))/2),k=x/_,m=x/g;Math.abs(k-1)>w&&(this._+="L"+(t+k*h)+","+(n+k*a)),this._+="A"+s+","+s+",0,0,"+ +(a*f>h*y)+","+(this._x1=t+m*l)+","+(this._y1=n+m*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,s,r){t=+t,n=+n,r=!!r;var o=(e=+e)*Math.cos(i),l=e*Math.sin(i),c=t+o,h=n+l,a=1^r,u=r?i-s:s-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+h:(Math.abs(this._x1-c)>w||Math.abs(this._y1-h)>w)&&(this._+="L"+c+","+h),e&&(u<0&&(u=u%b+b),u>E?this._+="A"+e+","+e+",0,1,"+a+","+(t-o)+","+(n-l)+"A"+e+","+e+",0,1,"+a+","+(this._x1=c)+","+(this._y1=h):u>w&&(this._+="A"+e+","+e+",0,"+ +(u>=v)+","+a+","+(this._x1=t+e*Math.cos(s))+","+(this._y1=n+e*Math.sin(s))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};const S=A;var M=Array.prototype.slice;function I(t){return function(){return t}}function T(t){return t[0]}function O(t){return t[1]}function P(t){return t.source}function C(t){return t.target}function D(t){var n=P,e=C,i=T,s=O,r=null;function o(){var o,l=M.call(arguments),c=n.apply(this,l),h=e.apply(this,l);if(r||(r=o=S()),t(r,+i.apply(this,(l[0]=c,l)),+s.apply(this,l),+i.apply(this,(l[0]=h,l)),+s.apply(this,l)),o)return r=null,o+""||null}return o.source=function(t){return arguments.length?(n=t,o):n},o.target=function(t){return arguments.length?(e=t,o):e},o.x=function(t){return arguments.length?(i="function"==typeof t?t:I(+t),o):i},o.y=function(t){return arguments.length?(s="function"==typeof t?t:I(+t),o):s},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o}function N(t,n,e,i,s){t.moveTo(n,e),t.bezierCurveTo(n=(n+i)/2,e,n,s,i,s)}function $(t){return[t.source.x1,t.y0]}function j(t){return[t.target.x0,t.y1]}function z(){return D(N).source($).target(j)}e(7484),e(7967),e(7856);var Y=function(){var t=function(t,n,e,i){for(e=e||{},i=t.length;i--;e[t[i]]=n);return e},n=[1,9],e=[1,10],i=[1,5,10,12],s={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(t,n,e,i,s,r,o){var l=r.length-1;switch(s){case 7:const t=i.findOrCreateNode(r[l-4].trim().replaceAll('""','"')),n=i.findOrCreateNode(r[l-2].trim().replaceAll('""','"')),e=parseFloat(r[l].trim());i.addLink(t,n,e);break;case 8:case 9:case 11:this.$=r[l];break;case 10:this.$=r[l-1]}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:e},{1:[2,6],7:11,10:[1,12]},t(e,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(e,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:e},{15:18,16:7,17:8,18:n,20:e},{18:[1,19]},t(e,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:n,20:e},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(t,n){if(!n.recoverable){var e=new Error(t);throw e.hash=n,e}this.trace(t)},parse:function(t){var n=this,e=[0],i=[],s=[null],r=[],o=this.table,l="",c=0,h=0,a=r.slice.call(arguments,1),u=Object.create(this.lexer),f={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(f.yy[y]=this.yy[y]);u.setInput(t,f.yy),f.yy.lexer=u,f.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var p=u.options&&u.options.ranges;"function"==typeof f.yy.parseError?this.parseError=f.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,_,x,k,m,v,b,w,E,L={};;){if(_=e[e.length-1],this.defaultActions[_]?x=this.defaultActions[_]:(null==g&&(E=void 0,"number"!=typeof(E=i.pop()||u.lex()||1)&&(E instanceof Array&&(E=(i=E).pop()),E=n.symbols_[E]||E),g=E),x=o[_]&&o[_][g]),void 0===x||!x.length||!x[0]){var A="";for(m in w=[],o[_])this.terminals_[m]&&m>2&&w.push("'"+this.terminals_[m]+"'");A=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(A,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:d,expected:w})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+g);switch(x[0]){case 1:e.push(g),s.push(u.yytext),r.push(u.yylloc),e.push(x[1]),g=null,h=u.yyleng,l=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(v=this.productions_[x[1]][1],L.$=s[s.length-v],L._$={first_line:r[r.length-(v||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(v||1)].first_column,last_column:r[r.length-1].last_column},p&&(L._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(L,[l,h,c,f.yy,x[1],s,r].concat(a))))return k;v&&(e=e.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),e.push(this.productions_[x[1]][0]),s.push(L.$),r.push(L._$),b=o[e[e.length-2]][e[e.length-1]],e.push(b);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,n){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,n)},setInput:function(t,n){return this.yy=n||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 n=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;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),e.length-1&&(this.yylineno-=e.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:e?(e.length===i.length?this.yylloc.first_column:0)+i[i.length-e.length].length-e[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),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(),n=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+n+"^"},test_match:function(t,n){var e,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],e=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;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,n,e,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((e=this._input.match(this.rules[s[r]]))&&(!n||e[0].length>n[0].length)){if(n=e,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,s[r])))return t;if(this._backtrack){n=!1;continue}return!1}if(!this.options.flex)break}return n?!1!==(t=this.test_match(n,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:{easy_keword_rules:!0},performAction:function(t,n,e,i){switch(e){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};function o(){this.yy={}}return s.lexer=r,o.prototype=s,s.Parser=o,new o}();Y.parser=Y;const F=Y;let U=[],W=[],q={};class G{constructor(t,n,e=0){this.source=t,this.target=n,this.value=e}}class K{constructor(t){this.ID=t}}const V={nodesMap:q,getConfig:()=>(0,i.c)().sankey,getNodes:()=>W,getLinks:()=>U,getGraph:()=>({nodes:W.map((t=>({id:t.ID}))),links:U.map((t=>({source:t.source.ID,target:t.target.ID,value:t.value})))}),addLink:(t,n,e)=>{U.push(new G(t,n,e))},findOrCreateNode:t=>(t=i.e.sanitizeText(t,(0,i.c)()),q[t]||(q[t]=new K(t),W.push(q[t])),q[t]),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,getDiagramTitle:i.r,setDiagramTitle:i.q,clear:()=>{U=[],W=[],q={},(0,i.t)()}},X=class t{static next(n){return new t(n+ ++t.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}};X.count=0;let Q=X;const B={left:function(t){return t.depth},right:function(t,n){return n-1-t.height},center:function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?r(t.sourceLinks,o)-1:0},justify:l},R={draw:function(t,n,e,r){const{securityLevel:o,sankey:l}=(0,i.c)(),c=i.I.sankey;let h;"sandbox"===o&&(h=(0,s.Ys)("#i"+n));const a="sandbox"===o?(0,s.Ys)(h.nodes()[0].contentDocument.body):(0,s.Ys)("body"),u="sandbox"===o?a.select(`[id="${n}"]`):(0,s.Ys)(`[id="${n}"]`),f=(null==l?void 0:l.width)??c.width,y=(null==l?void 0:l.height)??c.width,d=(null==l?void 0:l.useMaxWidth)??c.useMaxWidth,p=(null==l?void 0:l.nodeAlignment)??c.nodeAlignment,g=(null==l?void 0:l.prefix)??c.prefix,_=(null==l?void 0:l.suffix)??c.suffix,x=(null==l?void 0:l.showValues)??c.showValues,k=r.db.getGraph(),v=B[p];m().nodeId((t=>t.id)).nodeWidth(10).nodePadding(10+(x?15:0)).nodeAlign(v).extent([[0,0],[f,y]])(k);const b=(0,s.PKp)(s.K2I);u.append("g").attr("class","nodes").selectAll(".node").data(k.nodes).join("g").attr("class","node").attr("id",(t=>(t.uid=Q.next("node-")).id)).attr("transform",(function(t){return"translate("+t.x0+","+t.y0+")"})).attr("x",(t=>t.x0)).attr("y",(t=>t.y0)).append("rect").attr("height",(t=>t.y1-t.y0)).attr("width",(t=>t.x1-t.x0)).attr("fill",(t=>b(t.id)));u.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(k.nodes).join("text").attr("x",(t=>t.x0<f/2?t.x1+6:t.x0-6)).attr("y",(t=>(t.y1+t.y0)/2)).attr("dy",(x?"0":"0.35")+"em").attr("text-anchor",(t=>t.x0<f/2?"start":"end")).text((({id:t,value:n})=>x?`${t}\n${g}${Math.round(100*n)/100}${_}`:t));const w=u.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(k.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),E=(null==l?void 0:l.linkColor)||"gradient";if("gradient"===E){const t=w.append("linearGradient").attr("id",(t=>(t.uid=Q.next("linearGradient-")).id)).attr("gradientUnits","userSpaceOnUse").attr("x1",(t=>t.source.x1)).attr("x2",(t=>t.target.x0));t.append("stop").attr("offset","0%").attr("stop-color",(t=>b(t.source.id))),t.append("stop").attr("offset","100%").attr("stop-color",(t=>b(t.target.id)))}let L;switch(E){case"gradient":L=t=>t.uid;break;case"source":L=t=>b(t.source.id);break;case"target":L=t=>b(t.target.id);break;default:L=E}w.append("path").attr("d",z()).attr("stroke",L).attr("stroke-width",(t=>Math.max(1,t.width))),(0,i.o)(void 0,u,0,d)}},Z=F.parse.bind(F);F.parse=t=>Z((t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,"\n").trim())(t));const H={parser:F,db:V,renderer:R}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.d98fe6f3.js b/assets/js/5e95c892.d98fe6f3.js new file mode 100644 index 000000000..2f75445ad --- /dev/null +++ b/assets/js/5e95c892.d98fe6f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9661],{4942:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(7294);var u=r(512),a=r(9488),c=r(3702),d=r(8790),n=r(4960),t=r(5893);function l(e){return(0,t.jsx)(a.FG,{className:(0,u.Z)(c.k.wrapper.docsPages),children:(0,t.jsx)(n.Z,{children:(0,d.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5ee690fc.579e0ecc.js b/assets/js/5ee690fc.579e0ecc.js deleted file mode 100644 index 6f4e3acfd..000000000 --- a/assets/js/5ee690fc.579e0ecc.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9484],{3059:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png 640w,"+a.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.0c6c1a0.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png",width:640,height:2713},{path:a.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.0c6c1a0.1030.png",width:1030,height:4367}],src:a.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.8d34395.640.png"},placeholder:void 0,width:640,height:2713},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAArCAYAAABBwhkuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAExUlEQVQ4jUWV3Ysk5RXG63/SXO2aG0XCRrKui8YPUAjkJgERXVZQBFEMgZAQEQxLWAlCQi6NRlezajbuuuvs7uz0zPRMTfe0PdVV1V3fH13fVW9V/eStNnouquDUw3nP85znvKXopkueZMjoun5412FI6bg0WY4QgrZtUUZTi52pRy06/h+h72OZBus8JwgjiqJAGVuCb04KVLumqNsBWNU1CzvCHh9QxTaiFSg7U53tickdVWNi5eh+SVh2bI90jh57imL3Gn2XoxBPIVLB25HNbSq2PdNFhPHe+4jVEX0vUKoopnAcqiyjrkvqukGs15RBSNk01E09EFIcx8FwXdZFSZYVNE2D67qY+gI38PHTdMgpZVWy/N91goMxeR4PUpRlgelFOGMV/9YWjayYXP+aw9MPMXviGarFCNqCpIadQwv18Wc5PPUg8Vc3ULK9MZMnn0O7cJHamUJXkzU947nP9MVXOH7qOSRG6duWamFQWStEntG1HX1RUGUF2dKm1BbIUSiWYaBpGr7rsQ5ChGhwViv02YyVYSDJ1nIyQbJmqesE1ookSxFtSxiGmJaFt7KIfR8hK1azbzl5+TW00Q4iX4GoqEXPzK+ZbO+hXXyV8niGEn3yGaMz5xjtjMi9I2hSwrxlax6xPdpn98w5JEaRjYcfXWE9m9K1GX3X0dcNQVLh7KtE/75CLwWPXJc4iqjKiizNhimkYUhgmsSWRRRFFGWJ4scxK98nrWvyViCtK5kulkvCLCMYipQo1cpCe/0t5hdfRXvz91SuRy4EznyOd3BI4XobHWWj+/efQv3pw+z/5AHSrTs0yxWz37yA+ulVjp+/QL67h1LGCebf/sHyL3/F/fs/h6OTrTvsP3Kee//5kr1zTxJf/QLFjBq0FOwKglaadrM3xd6Y5N6IYncf+h4lsW1iXSc2TNa+T9t1JI5DHASkcUxSFENOcVwXXdeHsQVBMDBcrlYcqSqh5+E5Lnmeo0gNdd0YQL7vkecFeZaiGyZ+lhKEIUmSopRNx8TOmWsaIjGga6g6ODbW6JfeQ1jfL5cn53ptl4PnXyI5uAFdTlj13L5xgHr2l6xvXaGT6yrFtNU57sefUJ5MB3mG6cx07KtfUMxUenoUSZ0ip/EDurrZaCNzVUnj+T/kFNc0sU40/OWSZB0PycCysLQF4WCKkLquUWxpAH1BkiSkaTokfc/jRNdJsmzjHrkKyXqNttDx5LJ7DlmWUYqGxWSCuzQJomAoomRVy4FdcqyqNMF8oCI3b/7r37K48DK1NaHvahS/gu0/X0Z99lckhzeHHpOtu4xPP8TRmUdZ3746OF+RUgSffU7wwQeUy8UgjYzo8//i/etDCn1OL01BXYMQiCj6UZ62HSQSUUzfiO/lMQzsxYLQthFNvTnaDwjMJeHKGq7p4TYzTJPj2fEggxx+VVWDk7TlkrgsiNJ0UEIpi4Kl5eCHAaG/sVQlBMbOCPvOXdzxAam0WdLAvmpz8sZbCEcdjs7HKsfnn2Z69gkmv3ic9PZdlKCG3T9e4ujUg1iX3x2A6Wgf9eePDUD1Z2dZ39xCkR/M3/2BvftOsXp7A5RhX7rM3v2nWf3pnQ1r+ZAyRF9eo03TH4BdWZLeG9Fmm7/adwLmHYbe4QzUAAAAAElFTkSuQmCC"}},5828:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.d379e7d.640.png 640w,"+a.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.530ad23.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.d379e7d.640.png",width:640,height:323},{path:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.530ad23.1030.png",width:1030,height:519}],src:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.d379e7d.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.d379e7d.640.png"},placeholder:void 0,width:640,height:323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAqElEQVQImR2NO3LCMBQAdeLUISdIxRXouABnYDgA5tOgAgggWwZL72Ej/zYJO7Mz261xznG7XvHeU/qSl+rbpq4Zh4ExRvoQML4oOP2ceVQVGiMigqjSdR2qQlAhpYQptWVzKKij0vQj2eGCs2u6JrA/B+w2o5UbJs8r1h+fyHLFE8i+p+SzKS09u/kC+zUh3Y8YXwqy2ZKc45/GWp7Wvrt1Dt3tGf7WvxlsuYBWwbd9AAAAAElFTkSuQmCC"}},7479:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png 640w,"+a.p+"assets/ideal-img/article-image-sql-join-inner-left-join.9dcc67e.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png",width:640,height:323},{path:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join.9dcc67e.1030.png",width:1030,height:519}],src:a.p+"assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png"},placeholder:void 0,width:640,height:323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAq0lEQVQImSXOMWsCMRiA4fxx/QOd3LtacBAc2kUQXKU4FBG8oRVu0ETPNncx9yVf6L0t7Ts942ucc9jzmc/bjS/v0ZxJIvQiFFUQYUgJ01yv1NbStC2d9wQRQk6UUrjHSKuZrAXTZDgslsTXNRHYr7e45zlKoqpO1NMpGizGZdg9zoirBQF4e3rBTh5QhP2m4mM0Ri/vmMYLOsDAf727EOv6z9p2hOOR79/HH/bbudrXPGWrAAAAAElFTkSuQmCC"}},7271:(e,t,a)=>{"use strict";a.d(t,{V:()=>o,z:()=>i});var n=a(7294);const i=e=>{let{link:t,text:a,newTab:i=!1}=e;return n.createElement(n.Fragment,null,n.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:i?"_blank":"_self"},a))},o=e=>{let{linkLeft:t,textLeft:a,newTabLeft:i=!1,linkRight:o,textRight:l,newTabRight:r=!1}=e;return n.createElement(n.Fragment,null,n.createElement("div",{class:"col col--12"},n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:i?"_blank":"_self"},a),n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:r?"_blank":"_self"},l)))}},1872:(e,t,a)=>{"use strict";a.d(t,{m:()=>o});var n=a(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:i},t))}},3599:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>f,contentTitle:()=>g,default:()=>y,frontMatter:()=>h,metadata:()=>N,toc:()=>k});var n=a(7462),i=(a(7294),a(4137)),o=a(1872),l=a(7271),r=a(5944),s=a(3059),m=a.n(s),p=a(7479),u=a.n(p),d=a(5828),c=a.n(d);const h={id:"sfmc-sql-join",title:"SFMC SQL Join",sidebar_label:"Join",description:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",image:"img/og/og-image-sql-join.png",tags:["Marketing Cloud","SQL"]},g=void 0,N={unversionedId:"sql/sfmc-sql-join",id:"sql/sfmc-sql-join",title:"SFMC SQL Join",description:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",source:"@site/docs/sql/sfmc-sql-join.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-join",permalink:"/docs/sql/sfmc-sql-join",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-join.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-join",title:"SFMC SQL Join",sidebar_label:"Join",description:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",image:"img/og/og-image-sql-join.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"From",permalink:"/docs/sql/sfmc-sql-from"},next:{title:"Where",permalink:"/docs/sql/sfmc-sql-where"}},f={},k=[{value:"JOIN Types",id:"join-types",level:2},{value:"Inner Join",id:"inner-join",level:3},{value:"Left and Right Joins",id:"left-and-right-joins",level:3},{value:"Full Join",id:"full-join",level:3},{value:"Self-join",id:"self-join",level:3},{value:"Joining ON",id:"joining-on",level:2},{value:"Table Name Prefix",id:"table-name-prefix",level:2},{value:"Multiple Joins",id:"multiple-joins",level:2},{value:"Multiple Inner Joins",id:"multiple-inner-joins",level:3},{value:"Multiple Left Joins",id:"multiple-left-joins",level:3},{value:"Multiple Various Joins",id:"multiple-various-joins",level:3},{value:"UNION",id:"union",level:2},{value:"INTERSECT",id:"intersect",level:2},{value:"EXCEPT",id:"except",level:2},{value:"SFMC SQL JOIN Cheat Sheet",id:"sfmc-sql-join-cheat-sheet",level:2}],b={toc:k},w="wrapper";function y(e){let{components:t,...a}=e;return(0,i.kt)(w,(0,n.Z)({},b,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(o.m,{content:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",mdxType:"LeadText"}),(0,i.kt)("p",null,"There are cases where all you need is to pull (and maybe transform) data ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,i.kt)("inlineCode",{parentName:"a"},"FROM"))," a single Data Extension. But the real magic of SQL is visible when you need to combine information from multiple data points. Here comes the ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," statement."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-7} title="Check who opened the email and when by querying the _Open System Data View"',"{6-7}":!0,title:'"Check',who:!0,opened:!0,the:!0,email:!0,and:!0,when:!0,by:!0,querying:!0,_Open:!0,System:!0,Data:!0,'View"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n")),(0,i.kt)("p",null,"Let's dive in the details of what you see above."),(0,i.kt)("h2",{id:"join-types"},"JOIN Types"),(0,i.kt)("p",null,"In the example above, you can see the ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," word. There are many ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," statement types available in SQL. The appropriate joining will allow you to segment your records precisely the way you want and without the need for extensive ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE"))," clauses. Understanding differences between various types and using the correct one for the task at hand will make your code shorter, easier to read and optimised. Let's check what is in the quiver:"),(0,i.kt)("h3",{id:"inner-join"},"Inner Join"),(0,i.kt)("p",null,"The most straightforward join is ",(0,i.kt)("inlineCode",{parentName:"p"},"INNER JOIN"),". It takes records from the first table (",(0,i.kt)("inlineCode",{parentName:"p"},"Welcome-Campaign-Segment")," Data Extension in the above example) and the second table (",(0,i.kt)("inlineCode",{parentName:"p"},"_Open")," System Data View in this case) to output records available in both of them (based on selected relation)."),(0,i.kt)("p",null,"In our query, it will be contacts that are in the Data Extension and at the same time have some email opens in ",(0,i.kt)("inlineCode",{parentName:"p"},"_Open")," System Data View. It will ignore all contacts that are not visible in the ",(0,i.kt)("inlineCode",{parentName:"p"},"_Open")," System Data View, and all the email opens that are not related to contacts in the ",(0,i.kt)("inlineCode",{parentName:"p"},"Welcome-Campaign-Segment")," Data Extension."),(0,i.kt)("p",null,"Of course, this query in its current state is not perfect and could output wrong results (like tracked opens for the contacts from our Data Extension, but coming from the entirely different campaign) as it doesn't limit the scope to just one campaign or Job."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6-7}","{6-7}":!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n")),(0,i.kt)("p",null,"When using ",(0,i.kt)("inlineCode",{parentName:"p"},"INNER JOIN"),", you can write just the word ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN"),", as in the first example, to have the same result. However, it is best practice to state this type explicitly by writing the full name. It makes it easier to differentiate from the following types of ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN"),"."),(0,i.kt)("h3",{id:"left-and-right-joins"},"Left and Right Joins"),(0,i.kt)("p",null,"The following joins are ",(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN")," (also known as LEFT OUTER JOIN) and ",(0,i.kt)("inlineCode",{parentName:"p"},"RIGHT JOIN")," (also known as RIGHT OUTER JOIN). Instead of limiting the output to records available in both tables, they take complete data from one table and append the additional information from the second one (if it is available)."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN")," will take complete data of the first table (in our example, Data Extension selected by ",(0,i.kt)("inlineCode",{parentName:"p"},"FROM"),") and extend it with information from the second one (",(0,i.kt)("inlineCode",{parentName:"p"},"_Open")," System Data View joined with ",(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN"),")."),(0,i.kt)("p",null,"You can go the other way around with ",(0,i.kt)("inlineCode",{parentName:"p"},"RIGHT JOIN")," (in our example, it would output everything in ",(0,i.kt)("inlineCode",{parentName:"p"},"_Open")," System Data View and append to it the data from the Data Extension - not that useful)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-7} title="The same query, but this time joined with LEFT JOIN"',"{6-7}":!0,title:'"The',same:!0,"query,":!0,but:!0,this:!0,time:!0,joined:!0,with:!0,LEFT:!0,'JOIN"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n")),(0,i.kt)("p",null,"As you can see, the only thing we changed in the above query is the type of ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN"),". This simple change will alter our outcomes to show a complete list of all Subscriber Keys and Email Addresses from ",(0,i.kt)("inlineCode",{parentName:"p"},"Welcome-Campaign-Segment")," Data Extension with the email open date for those contacts who engaged with the communication. Unengaged ones would have ",(0,i.kt)("inlineCode",{parentName:"p"},"null")," values in the ",(0,i.kt)("inlineCode",{parentName:"p"},"OpenDate")," column. Again, it is not a proper way of building such a report. There will be the ready-to-use snippet at the bottom."),(0,i.kt)("p",null,"Due to the similarity of ",(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"RIGHT JOIN"),", I highly recommend choosing one type and use it consistently to lower the risk of an error."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you would want to see all contacts from our Data Extension that did not open the email, you could use ",(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN")," with exclusion (called LEFT EXCLUDING JOIN):"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-8} title="Example of exclusion applied to LEFT JOIN"',"{6-8}":!0,title:'"Example',of:!0,exclusion:!0,applied:!0,to:!0,LEFT:!0,'JOIN"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\nWHERE o.SubscriberKey IS NULL\n")),(0,i.kt)("p",{parentName:"admonition"},"Find more about it in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},"WHERE statement guide"),".")),(0,i.kt)("h3",{id:"full-join"},"Full Join"),(0,i.kt)("p",null,"The last classic SQL ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," is the ",(0,i.kt)("inlineCode",{parentName:"p"},"FULL JOIN")," (also known as ",(0,i.kt)("inlineCode",{parentName:"p"},"FULL OUTER JOIN"),") that allows you to get data from both sources."),(0,i.kt)("p",null,"In our example, it would mean all contacts from ",(0,i.kt)("inlineCode",{parentName:"p"},"Welcome-Campaign-Segment")," Data Extension and all records from ",(0,i.kt)("inlineCode",{parentName:"p"},"_Open")," System Data View, with ",(0,i.kt)("inlineCode",{parentName:"p"},"null")," values in the columns without a match. Contacts that did not open and tracked opens nor related to contacts available in the Data Extension we selected."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-7} title="Not a best use case for the FULL JOIN"',"{6-7}":!0,title:'"Not',a:!0,best:!0,use:!0,case:!0,for:!0,the:!0,FULL:!0,'JOIN"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n FULL JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"FULL JOIN")," is an excellent tool when you, for example, want to create a master segment from multiple smaller ones. Another use case - checking multiple tracking data points with a clear view which are missing (for example, which users have a tracked email click without open and vice versa)."),(0,i.kt)("h3",{id:"self-join"},"Self-join"),(0,i.kt)("p",null,"Then there is Self-join. It is not a separate type of ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," statement but rather a specific use case for the above types. It joins the table to itself. Useful when you have columns in your data extension that point to other columns in the same extension."),(0,i.kt)("p",null,"A use case I can think of in the world of Salesforce Marketing Cloud could be, for example, a Data Extension that stores product categories and subcategories."),(0,i.kt)("p",null,"Input Data Extension:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"CategoryName"),(0,i.kt)("th",{parentName:"tr",align:null},"CategoryID"),(0,i.kt)("th",{parentName:"tr",align:null},"ParentCategoryID"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Wristwatches"),(0,i.kt)("td",{parentName:"tr",align:null},"1"),(0,i.kt)("td",{parentName:"tr",align:null})),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Diver Watches"),(0,i.kt)("td",{parentName:"tr",align:null},"2"),(0,i.kt)("td",{parentName:"tr",align:null},"1")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Pilot Watches"),(0,i.kt)("td",{parentName:"tr",align:null},"3"),(0,i.kt)("td",{parentName:"tr",align:null},"1")))),(0,i.kt)("p",null,"In such a scenario, you can use Self-join to build a more readable table that might be useful for personalisation:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5-6} title="Self-join using INNER JOIN will output only categories that have a parent category"',"{5-6}":!0,title:'"Self-join',using:!0,INNER:!0,JOIN:!0,will:!0,output:!0,only:!0,categories:!0,that:!0,have:!0,a:!0,parent:!0,'category"':!0},"SELECT\n c.CategoryName AS Category\n , pc.CategoryName AS ParentCategory\nFROM WristwatchesDE AS c\n INNER JOIN WristwatchesDE AS pc\n ON pc.ParentCategoryID = c.CategoryID\n")),(0,i.kt)("p",null,"Output Data Extension:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Category"),(0,i.kt)("th",{parentName:"tr",align:null},"ParentCategory"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Diver Watches"),(0,i.kt)("td",{parentName:"tr",align:null},"Wristwatches")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Pilot Watches"),(0,i.kt)("td",{parentName:"tr",align:null},"Wristwatches")))),(0,i.kt)("p",null,"Another use case? You might have a product table for your e-commerce wherein one column store recommended products that are often purchased together. To personalise an email with such offers, self-join on that column would be perfect."),(0,i.kt)("p",null,"You won't be using Self-join a lot, but it might be a colossal timesaver when needed."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Self-join might be the perfect tool for working with data coming from Salesforce through Marketing Cloud Connect to Synchronized Data Extensions."),(0,i.kt)("p",{parentName:"admonition"},"Very often, you might encounter Accounts that are related to another Account. This hierarchical structure uses the ParentId field. You can flatten this relationship for use in personalisation and journeys with self-join."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{8-12} title="Flattening three levels of Salesforce Account hierarchy"',"{8-12}":!0,title:'"Flattening',three:!0,levels:!0,of:!0,Salesforce:!0,Account:!0,'hierarchy"':!0},"SELECT\n a1.Id AS Level1AccountId\n , a1.Name AS Level1AccountName\n , a2.Id AS Level2AccountId\n , a2.Name AS Level2AccountName\n , a3.Id AS Level3AccountId\n , a3.Name AS Level3AccountName\nFROM Account_Salesforce AS a1\n LEFT JOIN Account_Salesforce AS a2\n ON a2.Id = a1.ParentId\n LEFT JOIN Account_Salesforce AS a3\n ON a3.Id = a2.ParentId\n"))),(0,i.kt)("p",null,"Thinking about how much easier it would be with a neat visual cheat sheet? Perfect - I prepared one for you ",(0,i.kt)("a",{parentName:"p",href:"#sfmc-sql-join-cheat-sheet"},"at the bottom")," :)"),(0,i.kt)("h2",{id:"joining-on"},"Joining ON"),(0,i.kt)("p",null,"I was writing a lot about the various ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," statements, but there is also the ",(0,i.kt)("inlineCode",{parentName:"p"},"ON")," element. We use it to define the relationship between the joined data sources. It tells the query which value it should consider to decide whether the record is available in both columns."),(0,i.kt)("p",null,"In our example, we used ",(0,i.kt)("inlineCode",{parentName:"p"},"ON de.SubscriberKey = o.SubscriberKey")," that takes the SubscriberKey from the Data Extension and the System Data View and matches the rows based on it. You can use any other but always think about edge cases. Is the email address always unique? It is a very similar experience to what you do in the Salesforce Marketing Cloud Data Designer."),(0,i.kt)("p",null,"This column does not have to be the Primary Key of the Data Extension or System Data View. You can select any as long as its values have a match in the second source."),(0,i.kt)("p",null,"You can also add a bit of logic to it by leveraging ",(0,i.kt)("inlineCode",{parentName:"p"},"AND"),"/",(0,i.kt)("inlineCode",{parentName:"p"},"OR")," statements. It is handy when either:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"You are not sure which column will have a match. For example, you have separate columns for 15 characters Salesforce ID and 18 characters one and want to match on either one."),(0,i.kt)("li",{parentName:"ol"},"You want to match multiple criteria. For example, not only the ",(0,i.kt)("inlineCode",{parentName:"li"},"EmailAddress")," field but also ",(0,i.kt)("inlineCode",{parentName:"li"},"LastName")," to cover shared email address."),(0,i.kt)("li",{parentName:"ol"},"You want to join more than two data sources together using convoluted logic. You will find an example soon in the ",(0,i.kt)("a",{parentName:"li",href:"#multiple-various-joins"},"Multiple Various Joins")," section.")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You are not limited to the simple ",(0,i.kt)("inlineCode",{parentName:"p"},"ON ColumnA = ColumnB"),". If needed, you can go for more dynamic joins that leverage SQL functions:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{7} title="Joining on a normalised phone number from Data View and potentially prefixed phone of Data Extension"',"{7}":!0,title:'"Joining',on:!0,a:!0,normalised:!0,phone:!0,number:!0,from:!0,Data:!0,View:!0,and:!0,potentially:!0,prefixed:!0,of:!0,'Extension"':!0},"SELECT\n wel.SubscriberKey\n , sms.OptInStatusID\n , sms.OptOutStatusID\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN _SMSSubscriptionLog AS sms\n ON sms.MobileNumber LIKE CONCAT('%', wel.MobilePhone)\n")),(0,i.kt)("p",{parentName:"admonition"},"Remember that such an approach will have a significant impact on performance.")),(0,i.kt)("h2",{id:"table-name-prefix"},"Table Name Prefix"),(0,i.kt)("p",null,"When you are joining multiple data sources with columns of the same name, you will have to tell the SQL from which source you select each column. You can do it by using the table name prefix before the column name:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Example of SQL with full table name prefixes"',title:'"Example',of:!0,SQL:!0,with:!0,full:!0,table:!0,name:!0,'prefixes"':!0},"SELECT\n _Sent.SubscriberKey\n , _Job.EmailName\nFROM _Sent\n LEFT JOIN _Job\n ON _Job.JobID = _Sent.JobID\n")),(0,i.kt)("p",null,"However, you probably saw in the previous examples that there is another way. You don't have to write the full name of the data source every time. You can leverage aliases just as with columns to make it shorter:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Example of SQL with aliased table name prefixes"',title:'"Example',of:!0,SQL:!0,with:!0,aliased:!0,table:!0,name:!0,'prefixes"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n")),(0,i.kt)("p",null,"All you need to do is write your alias after a data source name. For readability purposes, I recommend using the ",(0,i.kt)("inlineCode",{parentName:"p"},"AS")," keyword between. Now you can leverage the shortened name to prefix the selected columns. It's instrumental when pulling data from multiple Data Extensions."),(0,i.kt)("p",null,"Using table name prefixes is not always required (for example, when the two sources you ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," don't have any columns of the same name). You might see some examples without it. However, it is best practice to leverage this feature for consistency, readability and error-deferring purposes."),(0,i.kt)("h2",{id:"multiple-joins"},"Multiple Joins"),(0,i.kt)("p",null,"Joining two tables is just the beginning. Working with multiple columns can be much more mind-boggling, and in some cases taking paper and pencil to draw some ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Venn_diagram"},"Venn Diagrams")," can make a huge difference. Let's check some of the most popular use cases."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Order of joining the tables is always important, but it is crucial with multi-table JOINs as it can have enormous impact on the final outcome:"),(0,i.kt)(r.Z,{img:u(),alt:"Example diagram of a three table INNER > LEFT JOIN",mdxType:"Image"}),(0,i.kt)(r.Z,{img:c(),alt:"Example diagram of a three table INNER > LEFT JOIN with reversed order of second and third table",mdxType:"Image"}),(0,i.kt)("p",{parentName:"admonition"},"As you can see, changing the order of second and third table creates significantly different outcome. And there is more - based on what you use in the ",(0,i.kt)("a",{parentName:"p",href:"#joining-on"},(0,i.kt)("inlineCode",{parentName:"a"},"ON")),", the order might also impact to which records enriching data is applied."),(0,i.kt)("p",{parentName:"admonition"},"For example, if you enrich data with the first joined table and then add some new records with the another - only the records from the initial table will be enriched. The ones added in last step will not have this added context. Changing order of ",(0,i.kt)("a",{parentName:"p",href:"#join-types"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN")),"s can solve it.")),(0,i.kt)("h3",{id:"multiple-inner-joins"},"Multiple Inner Joins"),(0,i.kt)("p",null,"In many cases, you will want to get a segment of people who simultaneously fulfil multiple requirements. For example, contacts that were part of three different ToFu campaigns related to a particular product. Such data might make an ideal audience for your next campaign further down in the marketing funnel. For such a scenario, you will use multiple ",(0,i.kt)("inlineCode",{parentName:"p"},"INNER JOIN")," statements chained in one query:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-10} title="Contacts used for three different ToFu campaigns that are ready for a MoFu campaign"',"{6-10}":!0,title:'"Contacts',used:!0,for:!0,three:!0,different:!0,ToFu:!0,campaigns:!0,that:!0,are:!0,ready:!0,a:!0,MoFu:!0,'campaign"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , nsl.PhoneNumber\n , ebo.EbookName\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN NewsletterPromoCampaignSegment AS nsl\n ON nsl.SubscriberKey = wel.SubscriberKey\n INNER JOIN EbookDownloadCampaignSegment AS ebo\n ON ebo.SubscriberKey = wel.SubscriberKey\n")),(0,i.kt)("p",null,"This SQL will only give you those contacts that were in all three Data Extensions."),(0,i.kt)("h3",{id:"multiple-left-joins"},"Multiple Left Joins"),(0,i.kt)("p",null,"Another huge group of cases you might encounter are queries with multiple ",(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN")," statements. They are great when you want to extend the data for your main data source with multiple other data points without losing records that do not have a match. Awesome for building a segment for a campaign from Data Extensions with extensive personalisation:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{7-11} title="To the list of contacts, add the product details we want to use in the email content along with a special offer description"',"{7-11}":!0,title:'"To',the:!0,list:!0,of:!0,"contacts,":!0,add:!0,product:!0,details:!0,we:!0,want:!0,to:!0,use:!0,in:!0,email:!0,content:!0,along:!0,with:!0,a:!0,special:!0,offer:!0,'description"':!0},"SELECT\n up.SubscriberKey\n , up.EmailAddress\n , prod.ProductName\n , prod.ProductPrice\n , promo.Offer\nFROM UpSellCampaignSegment AS up\n LEFT JOIN ProductDetailsList AS prod\n ON prod.ProductId = up.OfferedProduct\n LEFT JOIN CustomOfferList AS promo\n ON promo.PromotionId = up.OfferedPromotion\n")),(0,i.kt)("p",null,"Notice that we joined additional Data Extensions on different columns in this case. What is more, we don't need to ",(0,i.kt)("inlineCode",{parentName:"p"},"SELECT")," those columns to filter on them. Thanks to using ",(0,i.kt)("inlineCode",{parentName:"p"},"LEFT JOIN")," instead of ",(0,i.kt)("inlineCode",{parentName:"p"},"INNER JOIN"),", this query will return to us also contacts that do not have any custom offer applied (we can hide appropriate content block with personalisation for them)."),(0,i.kt)("h3",{id:"multiple-various-joins"},"Multiple Various Joins"),(0,i.kt)("p",null,"You are not limited to just one type of join when creating your query. You can mix and match different types of joins to extract precisely the data you need. However, the more complexity you add (either by the number of sources or by the number of various joins), the more recommended drawing the ",(0,i.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Venn_diagram"},"Venn Diagrams")," will be."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{7-11} title="Same query as above, but this time with a mix of INNER JOIN and LEFT JOIN"',"{7-11}":!0,title:'"Same',query:!0,as:!0,"above,":!0,but:!0,this:!0,time:!0,with:!0,a:!0,mix:!0,of:!0,INNER:!0,JOIN:!0,and:!0,LEFT:!0,'JOIN"':!0},"SELECT\n up.SubscriberKey\n , up.EmailAddress\n , prod.ProductName\n , prod.ProductPrice\n , promo.Offer\nFROM UpSellCampaignSegment AS up\n INNER JOIN ProductDetailsList AS prod\n ON prod.ProductId = up.OfferedProduct\n LEFT JOIN CustomOfferList AS promo\n ON promo.PromotionId = up.OfferedPromotion\n")),(0,i.kt)("p",null,"In the example above, we took the same query as for the Multiple Left Joins, but we changed the first ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," type to ",(0,i.kt)("inlineCode",{parentName:"p"},"INNER"),". What is the impact? This time, we will get only those contacts from ",(0,i.kt)("inlineCode",{parentName:"p"},"Up-Sell-Campaign-Segment")," that have a matching product in ",(0,i.kt)("inlineCode",{parentName:"p"},"Product-Details-List")," and only then we would extend them with optional information about the custom offer."),(0,i.kt)("p",null,"This approach might be better for our needs, as we would be sure that all contacts have available data for Product Name and Product Price. A great way to make our content better and more comfortable to create."),(0,i.kt)("p",null,"How complex can a ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," can get? Very. You will encounter such monstrosities, especially in the world of reporting queries that require information from multiple System Data Views - for example, when you want to ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},"debug your email sends"),"."),(0,i.kt)("p",null,"One thing to remember - the more complex query you create, the more error-prone it is and the closer you are to the 30 minutes AutoKill limit for the query execution. Always minimise your query to only the data you truly need."),(0,i.kt)("h2",{id:"union"},"UNION"),(0,i.kt)("p",null,"Apart from the ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN"),", a ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," operator also serves a similar purpose. It concatenates the outcomes of multiple ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))," statements."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6} title="Group subscribers from two Data Extensions"',"{6}":!0,title:'"Group',subscribers:!0,from:!0,two:!0,Data:!0,'Extensions"':!0},"SELECT\n jan.SubscriberKey\n , jan.EmailAddress\nFROM JanuaryEventParticipants AS jan\n\nUNION\n\nSELECT\n feb.SubscriberKey\n , feb.EmailAddress\nFROM FebruaryEventParticipantsSegment AS feb\n")),(0,i.kt)("p",null,"As you can see in the above example, the ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," doesn't require any relationship between the two queries. There is no ",(0,i.kt)("a",{parentName:"p",href:"#joining-on"},(0,i.kt)("inlineCode",{parentName:"a"},"ON")," element"),". On the other hand, the ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," cannot add any new columns."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," works only if:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Both queries have the same number of columns."),(0,i.kt)("li",{parentName:"ol"},"Both queries have the same order of columns."),(0,i.kt)("li",{parentName:"ol"},"Columns in both queries have the same data types.")),(0,i.kt)("p",null,"The names do not have to be the same. You don't even have to add aliases for static values. However, it is best practice to match the aliases across all queries for readability purposes."),(0,i.kt)("p",null,"To simplify the difference between ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If you want to add columns - use ",(0,i.kt)("inlineCode",{parentName:"li"},"JOIN"),"."),(0,i.kt)("li",{parentName:"ul"},"If you want to add rows - use ",(0,i.kt)("inlineCode",{parentName:"li"},"UNION"),"."),(0,i.kt)("li",{parentName:"ul"},"If you want to add both - use both (or ",(0,i.kt)("a",{parentName:"li",href:"#full-join"},(0,i.kt)("inlineCode",{parentName:"a"},"FULL JOIN")),")")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"By default, the ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," will ignore duplicates. If you want to keep them, use ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION ALL"),"."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6} title="Group subscribers from two Data Extensions"',"{6}":!0,title:'"Group',subscribers:!0,from:!0,two:!0,Data:!0,'Extensions"':!0},"SELECT\n jan.SubscriberKey\n , jan.EmailAddress\nFROM JanuaryEventParticipantsSegment AS jan\n\nUNION ALL\n\nSELECT\n feb.SubscriberKey\n , feb.EmailAddress\nFROM FebruaryEventParticipantsSegment AS feb\n"))),(0,i.kt)("p",null,"The obvious use case for ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," is gathering subscribers from multiple Data Extensions to build a master segment."),(0,i.kt)("p",null,"There is, however, another use case that I find perfect for ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," - attaching Seedlists."),(0,i.kt)("p",null,"If you are using a deliverability monitoring suite, you probably are using seedlist. If not - a seedlist is a list of bot email addresses used to estimate your communication inbox placement."),(0,i.kt)("p",null,"In most cases, you will store your seedlist in a separate Data Extension and will have only Email Address and fake Subscriber Key columns filled in. How to push them quickly into your segment? With ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION"),", of course:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{8} title="Append Seedlist to your Segment"',"{8}":!0,title:'"Append',Seedlist:!0,to:!0,your:!0,'Segment"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , wel.FirstName\n , wel.Interest\nFROM WelcomeCampaignSegment AS wel\n\nUNION\n\nSELECT\n sl.SubscriberKey\n , sl.EmailAddress\n , 'Seed' AS FirstName\n , 'Estimating' AS Interest\nFROM Seedlist AS sl\n")),(0,i.kt)("p",null,"In the example above, we add the Seedlist to the master segment and provide static value placeholders for columns used in personalisation."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can mix and match ",(0,i.kt)("inlineCode",{parentName:"p"},"JOIN")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"UNION")," to create your perfect segment. And even add arbitrary data without a ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,i.kt)("inlineCode",{parentName:"a"},"FROM")),"."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{10,19} title="AutoKill is the limit of your imagination"',"{10,19}":!0,title:'"AutoKill',is:!0,the:!0,limit:!0,of:!0,your:!0,'imagination"':!0},"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , wel.FirstName\n , i.Interest\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN InterestsDataPoint AS i\n ON i.SubscriberKey = wel.SubscriberKey\n\nUNION\n\nSELECT\n sl.SubscriberKey\n , sl.EmailAddress\n , 'Seed' AS FirstName\n , 'Estimating' AS Interest\nFROM Seedlist AS sl\n\nUNION ALL\n\nSELECT\n '123456789987654321' AS SubscriberKey\n , 'sales@company.com' AS EmailAddress\n , 'SalesDepartment' AS FirstName\n , 'Leads' AS Interest\n"))),(0,i.kt)("h2",{id:"intersect"},"INTERSECT"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"INTERSECT")," operator is very similar in usage to ",(0,i.kt)("a",{parentName:"p",href:"#union"},(0,i.kt)("inlineCode",{parentName:"a"},"UNION")),", but instead of concatenating outcomes, it outputs only those that exist in both queries."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Let\'s check who converted from our Black Friday promotion"',"{4}":!0,title:"\"Let's",check:!0,who:!0,converted:!0,from:!0,our:!0,Black:!0,Friday:!0,'promotion"':!0},"SELECT bf.SubscriberKey\nFROM BlackFridayPromoSegment AS bf\n\nINTERSECT\n\nSELECT p.SubscriberKey\nFROM PurchasesDataPoint AS p\n")),(0,i.kt)("p",null,"As with ",(0,i.kt)("a",{parentName:"p",href:"#union"},(0,i.kt)("inlineCode",{parentName:"a"},"UNION")),", ",(0,i.kt)("inlineCode",{parentName:"p"},"INTERSECT")," works only if:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Both queries have the same number of columns."),(0,i.kt)("li",{parentName:"ol"},"Both queries have the same order of columns."),(0,i.kt)("li",{parentName:"ol"},"Columns in both queries have the same data types.")),(0,i.kt)("p",null,"The check for rows existing in both queries is done considering data in all provided columns."),(0,i.kt)("p",null,"You can have the same outcome with more control over comparison logic with a mix of ",(0,i.kt)("a",{parentName:"p",href:"#join-types"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE")),"."),(0,i.kt)("h2",{id:"except"},"EXCEPT"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"EXCEPT")," operator is very similar in usage to ",(0,i.kt)("a",{parentName:"p",href:"#union"},(0,i.kt)("inlineCode",{parentName:"a"},"UNION")),", but instead of concatenating outcomes, it outputs only those that exist in the first query."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Let\'s check who did not convert from our Black Friday promotion"',"{4}":!0,title:"\"Let's",check:!0,who:!0,did:!0,not:!0,convert:!0,from:!0,our:!0,Black:!0,Friday:!0,'promotion"':!0},"SELECT bf.SubscriberKey\nFROM BlackFridayPromoSegment AS bf\n\nEXCEPT\n\nSELECT p.SubscriberKey\nFROM PurchasesDataPoint AS p\n")),(0,i.kt)("p",null,"As with ",(0,i.kt)("a",{parentName:"p",href:"#union"},(0,i.kt)("inlineCode",{parentName:"a"},"UNION")),", ",(0,i.kt)("inlineCode",{parentName:"p"},"EXCEPT")," works only if:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Both queries have the same number of columns."),(0,i.kt)("li",{parentName:"ol"},"Both queries have the same order of columns."),(0,i.kt)("li",{parentName:"ol"},"Columns in both queries have the same data types.")),(0,i.kt)("p",null,"The check for rows existing in both queries is done considering data in all provided columns."),(0,i.kt)("p",null,"You can have the same outcome with more control over comparison logic with a mix of ",(0,i.kt)("a",{parentName:"p",href:"#join-types"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE")),"."),(0,i.kt)("h2",{id:"sfmc-sql-join-cheat-sheet"},"SFMC SQL JOIN Cheat Sheet"),(0,i.kt)("p",null,"All standard SQL JOINs in a single image with name, example SFMC-focused use case, key part of the SQL query and diagrams visualising the output. Ready to bookmark or download. Full size version linked below the preview."),(0,i.kt)(r.Z,{img:m(),alt:"Salesforce Marketing Cloud SQL JOIN Cheat Sheet",mdxType:"Image"}),(0,i.kt)("br",null),(0,i.kt)("br",null),(0,i.kt)(l.z,{link:"https://raw.githubusercontent.com/MateuszDabrowski/mateuszdabrowski.pl/master/static/img/article/article-image-sql-join-cheat-sheet.png",text:"View full size",newTab:"true",mdxType:"Button"}))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5ee690fc.f9c9811f.js b/assets/js/5ee690fc.f9c9811f.js new file mode 100644 index 000000000..c02546bb2 --- /dev/null +++ b/assets/js/5ee690fc.f9c9811f.js @@ -0,0 +1 @@ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9484],{3059:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png 640w,"+t.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.fe36765.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png",width:640,height:2713},{path:t.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.fe36765.1030.png",width:1030,height:4367}],src:t.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png",toString:function(){return t.p+"assets/ideal-img/article-image-sql-join-cheat-sheet.5f50f25.640.png"},placeholder:void 0,width:640,height:2713},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAqCAYAAACKnsqLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEt0lEQVR4nEWVSY8d1RmG6z+RHSiBRUQkI0ANBqMEIW8SCykGJFigKApkBGURKZsgx1gKe2SCArKxLZs4YNp2X7d7uG3fse7QNZ+qU9OpuZ6o6jJ8m5KOXtX53ucbjjYcLbFMny7atqUFYiGQhkkahsRJQlEUaEfrhO2JRMQl30UUhhxbFkGaIqUkzwu0O7ri1jRle65Y+SUyrVBlw0gXLP9xnnJ9RNuWaObyiPXiiPVkgBOE+ElNkLfcvb/iwUuvoPa+pG0UGolFG65pk2Moo02uZYkQCeFkCnnY565Jx8VbG8RhTKoysiwj8gTSMpG+TxiGFHmOJsKQtesSqZQkTWnaFt/3WR2vEVFEEMfUTYNW2DaL3/8F8/x5crmmqQrKqmFmxczPfcTqD++RmRaaf+kKe488yuipLbLpHWgVftZyZ3fB8MRz7D/yKMGlq2h1GOKcu4D45BNq5UHbUNcNpswxL36Ge+5D6jBCU1ISuS6p8MkCSVVVZH5A7DiEtkPseVRlibZer5kuFziOi5QhdV1jGAbTyRjTMHB8n7ITZkrh3PgvYjwiz6Je2OGwZIo1muHf/N/mj+HV6xxsvcTB/ftk/gSqhFDV3FtE7N7b53DrFJ1GU4dDxmffYro7oIzXUOeoouHIVhzd22f62puowyO0SimS6ZzcdSiKrL+6ThLSQBLNdNK5vgFuGyaW56HqGlUUvVB4gmNdR7gujmmikgRNZRnmYBd3Z4D/4GFfQk8IDM9FRhFpUfTItOib2zw4scXDp57nwdMnSfYPqWgxPv0Pqy+uIS5foemaIt0ZMH3h50xffJnJqZcpFkvi23c5OLHF7tfb7D17Cvn5ZTQva1gOdcy9Ef5sRQOUhsnid39k/Oln/TefztBcJ8R2I0SQIpOComqgLKnjmNL16Kh0oQW2hbtcEBgG0nN71/ZqxWI8QVg2rmVtptBxXXRdJ/B9XE+Qpimu5zEej/CjEE/4RFG0qfXKkdhxRBp5fQNUVcmxK3HmOqnsClGgBVnDYGgy/PgimXkIjSIs4d7+ivHpM2TDr6DN0OKyZf/mLrO3f0t8cAuoSKuWg9tDJr95h2jnBk1ToHWOMtcnmc6ofPH9tshFQDKZUnruxnURJ2RCkJomhcr6wzJNyaVEWTZFlvcktOPViuV8ju+6xFHULynbMNAnEwLHwffFxowQgqWuEwYBwg96PFEcoZsmMk37syiO0ZRSzJ0QQ0oSafV4yqJgdfHfWNeuksQueZ6hiaxlZ/shwwv/Qi13N2tv+y5Hjz/J+OmTpMOvaJsULW1g9P7fWfz6NZKHg43jtcHs1deZv/Em8d4t2u/wFJaN6vBI+T2e0nFRozFVEHyLxw/IhY+yHeqi2IiiuMeTuV4/ul3Xa8vlktl02s9Hh6HDE3SjsFgibBvPtim61Sw8j4U+I4hiPE+QJAlRkqBbJoFSBKrDFaOVVYVuhVh3d8hCi6quKOOE1T8voP/1b6w+OE/mCTSvgMGVO0xe+AXJ4HqfY3jzFsMnfsb4mZMMf/IkwaUv0LIOz9vvcvijx1j96c+9sAokszNnGf74p0xO/5LSdjZ4/M8vMzn9K8LrX/7w1nz9DdMzZ5HXbvR4/g+Y3vfK5vXl0gAAAABJRU5ErkJggg=="}},5828:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png 640w,"+t.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.b324a8b.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png",width:640,height:323},{path:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.b324a8b.1030.png",width:1030,height:519}],src:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png",toString:function(){return t.p+"assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png"},placeholder:void 0,width:640,height:323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAqklEQVR4nB3GQU7DMBBAUZ+YNULsWbHhCHABrtFtpaAWRVRtiZQ4TpPO2BhPMR+VLz3pO+8Hhr4nhInTNFFS4vsqZ2qtVFGqKi6MI8fuk3lZiCqcRRBVzAoiyqJCKQU3ReOtHcia+Lr80rQd48eaSxE2x4Vds+YneZzvZ5qbW+JqRQKah0fG5yeMyublld39HXbucKc5ErfvWAhcy/s9+XD4f/Oe1LZUM/4AKOO5ziBMlEMAAAAASUVORK5CYII="}},7479:(e,n,t)=>{e.exports={src:{srcSet:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png 640w,"+t.p+"assets/ideal-img/article-image-sql-join-inner-left-join.f8ce751.1030.png 1030w",images:[{path:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png",width:640,height:323},{path:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join.f8ce751.1030.png",width:1030,height:519}],src:t.p+"assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png",toString:function(){return t.p+"assets/ideal-img/article-image-sql-join-inner-left-join.142d389.640.png"},placeholder:void 0,width:640,height:323},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAApklEQVR4nB3KPQ/BUBhA4f50/8BktBCLsDWxic1gE5+bFJHbVnN7W7f3fUuPMJzkGU5k0hRjDEVRYK1FVZEQaEJARemaQCdClGcZyeNBbi2lLXF1jfMeVcFVFdZ75Dc+BU6zBX6zogb2yw15PKdFOB9vXMcj3j4jMgK74RS/iqmA7STGDPq0BA7rI5deD30mRIULtJ8O+AVNltPc739r6XglVz4ifAH2ibn+oUxDCAAAAABJRU5ErkJggg=="}},4529:(e,n,t)=>{"use strict";t.r(n),t.d(n,{assets:()=>j,contentTitle:()=>g,default:()=>w,frontMatter:()=>p,metadata:()=>x,toc:()=>f});var i=t(5893),s=t(1151),a=t(1872),o=t(7271),r=t(5944),l=t(3059),c=t.n(l),d=t(7479),h=t.n(d),m=t(5828),u=t.n(m);const p={id:"sfmc-sql-join",title:"SFMC SQL Join",sidebar_label:"Join",description:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",image:"img/og/og-image-sql-join.png",tags:["Marketing Cloud","SQL"]},g=void 0,x={id:"sql/sfmc-sql-join",title:"SFMC SQL Join",description:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",source:"@site/docs/sql/sfmc-sql-join.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-join",permalink:"/docs/sql/sfmc-sql-join",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-join.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-join",title:"SFMC SQL Join",sidebar_label:"Join",description:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.",image:"img/og/og-image-sql-join.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"From",permalink:"/docs/sql/sfmc-sql-from"},next:{title:"Where",permalink:"/docs/sql/sfmc-sql-where"}},j={},f=[{value:"JOIN Types",id:"join-types",level:2},{value:"Inner Join",id:"inner-join",level:3},{value:"Left and Right Joins",id:"left-and-right-joins",level:3},{value:"Full Join",id:"full-join",level:3},{value:"Self-join",id:"self-join",level:3},{value:"Joining ON",id:"joining-on",level:2},{value:"Table Name Prefix",id:"table-name-prefix",level:2},{value:"Multiple Joins",id:"multiple-joins",level:2},{value:"Multiple Inner Joins",id:"multiple-inner-joins",level:3},{value:"Multiple Left Joins",id:"multiple-left-joins",level:3},{value:"Multiple Various Joins",id:"multiple-various-joins",level:3},{value:"UNION",id:"union",level:2},{value:"INTERSECT",id:"intersect",level:2},{value:"EXCEPT",id:"except",level:2},{value:"SFMC SQL JOIN Cheat Sheet",id:"sfmc-sql-join-cheat-sheet",level:2}];function b(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.m,{content:"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all."}),"\n",(0,i.jsxs)(n.p,{children:["There are cases where all you need is to pull (and maybe transform) data ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-from",children:(0,i.jsx)(n.code,{children:"FROM"})})," a single Data Extension. But the real magic of SQL is visible when you need to combine information from multiple data points. Here comes the ",(0,i.jsx)(n.code,{children:"JOIN"})," statement."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6-7} title="Check who opened the email and when by querying the _Open System Data View"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n"})}),"\n",(0,i.jsx)(n.p,{children:"Let's dive in the details of what you see above."}),"\n",(0,i.jsx)(n.h2,{id:"join-types",children:"JOIN Types"}),"\n",(0,i.jsxs)(n.p,{children:["In the example above, you can see the ",(0,i.jsx)(n.code,{children:"JOIN"})," word. There are many ",(0,i.jsx)(n.code,{children:"JOIN"})," statement types available in SQL. The appropriate joining will allow you to segment your records precisely the way you want and without the need for extensive ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(n.code,{children:"WHERE"})})," clauses. Understanding differences between various types and using the correct one for the task at hand will make your code shorter, easier to read and optimised. Let's check what is in the quiver:"]}),"\n",(0,i.jsx)(n.h3,{id:"inner-join",children:"Inner Join"}),"\n",(0,i.jsxs)(n.p,{children:["The most straightforward join is ",(0,i.jsx)(n.code,{children:"INNER JOIN"}),". It takes records from the first table (",(0,i.jsx)(n.code,{children:"Welcome-Campaign-Segment"})," Data Extension in the above example) and the second table (",(0,i.jsx)(n.code,{children:"_Open"})," System Data View in this case) to output records available in both of them (based on selected relation)."]}),"\n",(0,i.jsxs)(n.p,{children:["In our query, it will be contacts that are in the Data Extension and at the same time have some email opens in ",(0,i.jsx)(n.code,{children:"_Open"})," System Data View. It will ignore all contacts that are not visible in the ",(0,i.jsx)(n.code,{children:"_Open"})," System Data View, and all the email opens that are not related to contacts in the ",(0,i.jsx)(n.code,{children:"Welcome-Campaign-Segment"})," Data Extension."]}),"\n",(0,i.jsx)(n.p,{children:"Of course, this query in its current state is not perfect and could output wrong results (like tracked opens for the contacts from our Data Extension, but coming from the entirely different campaign) as it doesn't limit the scope to just one campaign or Job."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{6-7}",children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n"})}),"\n",(0,i.jsxs)(n.p,{children:["When using ",(0,i.jsx)(n.code,{children:"INNER JOIN"}),", you can write just the word ",(0,i.jsx)(n.code,{children:"JOIN"}),", as in the first example, to have the same result. However, it is best practice to state this type explicitly by writing the full name. It makes it easier to differentiate from the following types of ",(0,i.jsx)(n.code,{children:"JOIN"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"left-and-right-joins",children:"Left and Right Joins"}),"\n",(0,i.jsxs)(n.p,{children:["The following joins are ",(0,i.jsx)(n.code,{children:"LEFT JOIN"})," (also known as LEFT OUTER JOIN) and ",(0,i.jsx)(n.code,{children:"RIGHT JOIN"})," (also known as RIGHT OUTER JOIN). Instead of limiting the output to records available in both tables, they take complete data from one table and append the additional information from the second one (if it is available)."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"LEFT JOIN"})," will take complete data of the first table (in our example, Data Extension selected by ",(0,i.jsx)(n.code,{children:"FROM"}),") and extend it with information from the second one (",(0,i.jsx)(n.code,{children:"_Open"})," System Data View joined with ",(0,i.jsx)(n.code,{children:"LEFT JOIN"}),")."]}),"\n",(0,i.jsxs)(n.p,{children:["You can go the other way around with ",(0,i.jsx)(n.code,{children:"RIGHT JOIN"})," (in our example, it would output everything in ",(0,i.jsx)(n.code,{children:"_Open"})," System Data View and append to it the data from the Data Extension - not that useful)."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6-7} title="The same query, but this time joined with LEFT JOIN"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As you can see, the only thing we changed in the above query is the type of ",(0,i.jsx)(n.code,{children:"JOIN"}),". This simple change will alter our outcomes to show a complete list of all Subscriber Keys and Email Addresses from ",(0,i.jsx)(n.code,{children:"Welcome-Campaign-Segment"})," Data Extension with the email open date for those contacts who engaged with the communication. Unengaged ones would have ",(0,i.jsx)(n.code,{children:"null"})," values in the ",(0,i.jsx)(n.code,{children:"OpenDate"})," column. Again, it is not a proper way of building such a report. There will be the ready-to-use snippet at the bottom."]}),"\n",(0,i.jsxs)(n.p,{children:["Due to the similarity of ",(0,i.jsx)(n.code,{children:"LEFT JOIN"})," and ",(0,i.jsx)(n.code,{children:"RIGHT JOIN"}),", I highly recommend choosing one type and use it consistently to lower the risk of an error."]}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:["If you would want to see all contacts from our Data Extension that did not open the email, you could use ",(0,i.jsx)(n.code,{children:"LEFT JOIN"})," with exclusion (called LEFT EXCLUDING JOIN):"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6-8} title="Example of exclusion applied to LEFT JOIN"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\nWHERE o.SubscriberKey IS NULL\n"})}),(0,i.jsxs)(n.p,{children:["Find more about it in the ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:"WHERE statement guide"}),"."]})]}),"\n",(0,i.jsx)(n.h3,{id:"full-join",children:"Full Join"}),"\n",(0,i.jsxs)(n.p,{children:["The last classic SQL ",(0,i.jsx)(n.code,{children:"JOIN"})," is the ",(0,i.jsx)(n.code,{children:"FULL JOIN"})," (also known as ",(0,i.jsx)(n.code,{children:"FULL OUTER JOIN"}),") that allows you to get data from both sources."]}),"\n",(0,i.jsxs)(n.p,{children:["In our example, it would mean all contacts from ",(0,i.jsx)(n.code,{children:"Welcome-Campaign-Segment"})," Data Extension and all records from ",(0,i.jsx)(n.code,{children:"_Open"})," System Data View, with ",(0,i.jsx)(n.code,{children:"null"})," values in the columns without a match. Contacts that did not open and tracked opens nor related to contacts available in the Data Extension we selected."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6-7} title="Not a best use case for the FULL JOIN"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n FULL JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"FULL JOIN"})," is an excellent tool when you, for example, want to create a master segment from multiple smaller ones. Another use case - checking multiple tracking data points with a clear view which are missing (for example, which users have a tracked email click without open and vice versa)."]}),"\n",(0,i.jsx)(n.h3,{id:"self-join",children:"Self-join"}),"\n",(0,i.jsxs)(n.p,{children:["Then there is Self-join. It is not a separate type of ",(0,i.jsx)(n.code,{children:"JOIN"})," statement but rather a specific use case for the above types. It joins the table to itself. Useful when you have columns in your data extension that point to other columns in the same extension."]}),"\n",(0,i.jsx)(n.p,{children:"A use case I can think of in the world of Salesforce Marketing Cloud could be, for example, a Data Extension that stores product categories and subcategories."}),"\n",(0,i.jsx)(n.p,{children:"Input Data Extension:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"CategoryName"}),(0,i.jsx)(n.th,{children:"CategoryID"}),(0,i.jsx)(n.th,{children:"ParentCategoryID"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Wristwatches"}),(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Diver Watches"}),(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Pilot Watches"}),(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"1"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"In such a scenario, you can use Self-join to build a more readable table that might be useful for personalisation:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{5-6} title="Self-join using INNER JOIN will output only categories that have a parent category"',children:"SELECT\n c.CategoryName AS Category\n , pc.CategoryName AS ParentCategory\nFROM WristwatchesDE AS c\n INNER JOIN WristwatchesDE AS pc\n ON pc.ParentCategoryID = c.CategoryID\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output Data Extension:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Category"}),(0,i.jsx)(n.th,{children:"ParentCategory"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Diver Watches"}),(0,i.jsx)(n.td,{children:"Wristwatches"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Pilot Watches"}),(0,i.jsx)(n.td,{children:"Wristwatches"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Another use case? You might have a product table for your e-commerce wherein one column store recommended products that are often purchased together. To personalise an email with such offers, self-join on that column would be perfect."}),"\n",(0,i.jsx)(n.p,{children:"You won't be using Self-join a lot, but it might be a colossal timesaver when needed."}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(n.p,{children:"Self-join might be the perfect tool for working with data coming from Salesforce through Marketing Cloud Connect to Synchronized Data Extensions."}),(0,i.jsx)(n.p,{children:"Very often, you might encounter Accounts that are related to another Account. This hierarchical structure uses the ParentId field. You can flatten this relationship for use in personalisation and journeys with self-join."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{8-12} title="Flattening three levels of Salesforce Account hierarchy"',children:"SELECT\n a1.Id AS Level1AccountId\n , a1.Name AS Level1AccountName\n , a2.Id AS Level2AccountId\n , a2.Name AS Level2AccountName\n , a3.Id AS Level3AccountId\n , a3.Name AS Level3AccountName\nFROM Account_Salesforce AS a1\n LEFT JOIN Account_Salesforce AS a2\n ON a2.Id = a1.ParentId\n LEFT JOIN Account_Salesforce AS a3\n ON a3.Id = a2.ParentId\n"})})]}),"\n",(0,i.jsxs)(n.p,{children:["Thinking about how much easier it would be with a neat visual cheat sheet? Perfect - I prepared one for you ",(0,i.jsx)(n.a,{href:"#sfmc-sql-join-cheat-sheet",children:"at the bottom"})," :)"]}),"\n",(0,i.jsx)(n.h2,{id:"joining-on",children:"Joining ON"}),"\n",(0,i.jsxs)(n.p,{children:["I was writing a lot about the various ",(0,i.jsx)(n.code,{children:"JOIN"})," statements, but there is also the ",(0,i.jsx)(n.code,{children:"ON"})," element. We use it to define the relationship between the joined data sources. It tells the query which value it should consider to decide whether the record is available in both columns."]}),"\n",(0,i.jsxs)(n.p,{children:["In our example, we used ",(0,i.jsx)(n.code,{children:"ON de.SubscriberKey = o.SubscriberKey"})," that takes the SubscriberKey from the Data Extension and the System Data View and matches the rows based on it. You can use any other but always think about edge cases. Is the email address always unique? It is a very similar experience to what you do in the Salesforce Marketing Cloud Data Designer."]}),"\n",(0,i.jsx)(n.p,{children:"This column does not have to be the Primary Key of the Data Extension or System Data View. You can select any as long as its values have a match in the second source."}),"\n",(0,i.jsxs)(n.p,{children:["You can also add a bit of logic to it by leveraging ",(0,i.jsx)(n.code,{children:"AND"}),"/",(0,i.jsx)(n.code,{children:"OR"})," statements. It is handy when either:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"You are not sure which column will have a match. For example, you have separate columns for 15 characters Salesforce ID and 18 characters one and want to match on either one."}),"\n",(0,i.jsxs)(n.li,{children:["You want to match multiple criteria. For example, not only the ",(0,i.jsx)(n.code,{children:"EmailAddress"})," field but also ",(0,i.jsx)(n.code,{children:"LastName"})," to cover shared email address."]}),"\n",(0,i.jsxs)(n.li,{children:["You want to join more than two data sources together using convoluted logic. You will find an example soon in the ",(0,i.jsx)(n.a,{href:"#multiple-various-joins",children:"Multiple Various Joins"})," section."]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:["You are not limited to the simple ",(0,i.jsx)(n.code,{children:"ON ColumnA = ColumnB"}),". If needed, you can go for more dynamic joins that leverage SQL functions:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{7} title="Joining on a normalised phone number from Data View and potentially prefixed phone of Data Extension"',children:"SELECT\n wel.SubscriberKey\n , sms.OptInStatusID\n , sms.OptOutStatusID\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN _SMSSubscriptionLog AS sms\n ON sms.MobileNumber LIKE CONCAT('%', wel.MobilePhone)\n"})}),(0,i.jsx)(n.p,{children:"Remember that such an approach will have a significant impact on performance."})]}),"\n",(0,i.jsx)(n.h2,{id:"table-name-prefix",children:"Table Name Prefix"}),"\n",(0,i.jsx)(n.p,{children:"When you are joining multiple data sources with columns of the same name, you will have to tell the SQL from which source you select each column. You can do it by using the table name prefix before the column name:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="Example of SQL with full table name prefixes"',children:"SELECT\n _Sent.SubscriberKey\n , _Job.EmailName\nFROM _Sent\n LEFT JOIN _Job\n ON _Job.JobID = _Sent.JobID\n"})}),"\n",(0,i.jsx)(n.p,{children:"However, you probably saw in the previous examples that there is another way. You don't have to write the full name of the data source every time. You can leverage aliases just as with columns to make it shorter:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="Example of SQL with aliased table name prefixes"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n"})}),"\n",(0,i.jsxs)(n.p,{children:["All you need to do is write your alias after a data source name. For readability purposes, I recommend using the ",(0,i.jsx)(n.code,{children:"AS"})," keyword between. Now you can leverage the shortened name to prefix the selected columns. It's instrumental when pulling data from multiple Data Extensions."]}),"\n",(0,i.jsxs)(n.p,{children:["Using table name prefixes is not always required (for example, when the two sources you ",(0,i.jsx)(n.code,{children:"JOIN"})," don't have any columns of the same name). You might see some examples without it. However, it is best practice to leverage this feature for consistency, readability and error-deferring purposes."]}),"\n",(0,i.jsx)(n.h2,{id:"multiple-joins",children:"Multiple Joins"}),"\n",(0,i.jsxs)(n.p,{children:["Joining two tables is just the beginning. Working with multiple columns can be much more mind-boggling, and in some cases taking paper and pencil to draw some ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Venn_diagram",children:"Venn Diagrams"})," can make a huge difference. Let's check some of the most popular use cases."]}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(n.p,{children:"Order of joining the tables is always important, but it is crucial with multi-table JOINs as it can have enormous impact on the final outcome:"}),(0,i.jsx)(r.Z,{img:h(),alt:"Example diagram of a three table INNER > LEFT JOIN"}),(0,i.jsx)(r.Z,{img:u(),alt:"Example diagram of a three table INNER > LEFT JOIN with reversed order of second and third table"}),(0,i.jsxs)(n.p,{children:["As you can see, changing the order of second and third table creates significantly different outcome. And there is more - based on what you use in the ",(0,i.jsx)(n.a,{href:"#joining-on",children:(0,i.jsx)(n.code,{children:"ON"})}),", the order might also impact to which records enriching data is applied."]}),(0,i.jsxs)(n.p,{children:["For example, if you enrich data with the first joined table and then add some new records with the another - only the records from the initial table will be enriched. The ones added in last step will not have this added context. Changing order of ",(0,i.jsx)(n.a,{href:"#join-types",children:(0,i.jsx)(n.code,{children:"JOIN"})}),"s can solve it."]})]}),"\n",(0,i.jsx)(n.h3,{id:"multiple-inner-joins",children:"Multiple Inner Joins"}),"\n",(0,i.jsxs)(n.p,{children:["In many cases, you will want to get a segment of people who simultaneously fulfil multiple requirements. For example, contacts that were part of three different ToFu campaigns related to a particular product. Such data might make an ideal audience for your next campaign further down in the marketing funnel. For such a scenario, you will use multiple ",(0,i.jsx)(n.code,{children:"INNER JOIN"})," statements chained in one query:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6-10} title="Contacts used for three different ToFu campaigns that are ready for a MoFu campaign"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , nsl.PhoneNumber\n , ebo.EbookName\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN NewsletterPromoCampaignSegment AS nsl\n ON nsl.SubscriberKey = wel.SubscriberKey\n INNER JOIN EbookDownloadCampaignSegment AS ebo\n ON ebo.SubscriberKey = wel.SubscriberKey\n"})}),"\n",(0,i.jsx)(n.p,{children:"This SQL will only give you those contacts that were in all three Data Extensions."}),"\n",(0,i.jsx)(n.h3,{id:"multiple-left-joins",children:"Multiple Left Joins"}),"\n",(0,i.jsxs)(n.p,{children:["Another huge group of cases you might encounter are queries with multiple ",(0,i.jsx)(n.code,{children:"LEFT JOIN"})," statements. They are great when you want to extend the data for your main data source with multiple other data points without losing records that do not have a match. Awesome for building a segment for a campaign from Data Extensions with extensive personalisation:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{7-11} title="To the list of contacts, add the product details we want to use in the email content along with a special offer description"',children:"SELECT\n up.SubscriberKey\n , up.EmailAddress\n , prod.ProductName\n , prod.ProductPrice\n , promo.Offer\nFROM UpSellCampaignSegment AS up\n LEFT JOIN ProductDetailsList AS prod\n ON prod.ProductId = up.OfferedProduct\n LEFT JOIN CustomOfferList AS promo\n ON promo.PromotionId = up.OfferedPromotion\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Notice that we joined additional Data Extensions on different columns in this case. What is more, we don't need to ",(0,i.jsx)(n.code,{children:"SELECT"})," those columns to filter on them. Thanks to using ",(0,i.jsx)(n.code,{children:"LEFT JOIN"})," instead of ",(0,i.jsx)(n.code,{children:"INNER JOIN"}),", this query will return to us also contacts that do not have any custom offer applied (we can hide appropriate content block with personalisation for them)."]}),"\n",(0,i.jsx)(n.h3,{id:"multiple-various-joins",children:"Multiple Various Joins"}),"\n",(0,i.jsxs)(n.p,{children:["You are not limited to just one type of join when creating your query. You can mix and match different types of joins to extract precisely the data you need. However, the more complexity you add (either by the number of sources or by the number of various joins), the more recommended drawing the ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Venn_diagram",children:"Venn Diagrams"})," will be."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{7-11} title="Same query as above, but this time with a mix of INNER JOIN and LEFT JOIN"',children:"SELECT\n up.SubscriberKey\n , up.EmailAddress\n , prod.ProductName\n , prod.ProductPrice\n , promo.Offer\nFROM UpSellCampaignSegment AS up\n INNER JOIN ProductDetailsList AS prod\n ON prod.ProductId = up.OfferedProduct\n LEFT JOIN CustomOfferList AS promo\n ON promo.PromotionId = up.OfferedPromotion\n"})}),"\n",(0,i.jsxs)(n.p,{children:["In the example above, we took the same query as for the Multiple Left Joins, but we changed the first ",(0,i.jsx)(n.code,{children:"JOIN"})," type to ",(0,i.jsx)(n.code,{children:"INNER"}),". What is the impact? This time, we will get only those contacts from ",(0,i.jsx)(n.code,{children:"Up-Sell-Campaign-Segment"})," that have a matching product in ",(0,i.jsx)(n.code,{children:"Product-Details-List"})," and only then we would extend them with optional information about the custom offer."]}),"\n",(0,i.jsx)(n.p,{children:"This approach might be better for our needs, as we would be sure that all contacts have available data for Product Name and Product Price. A great way to make our content better and more comfortable to create."}),"\n",(0,i.jsxs)(n.p,{children:["How complex can a ",(0,i.jsx)(n.code,{children:"JOIN"})," can get? Very. You will encounter such monstrosities, especially in the world of reporting queries that require information from multiple System Data Views - for example, when you want to ",(0,i.jsx)(n.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends",children:"debug your email sends"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"One thing to remember - the more complex query you create, the more error-prone it is and the closer you are to the 30 minutes AutoKill limit for the query execution. Always minimise your query to only the data you truly need."}),"\n",(0,i.jsx)(n.h2,{id:"union",children:"UNION"}),"\n",(0,i.jsxs)(n.p,{children:["Apart from the ",(0,i.jsx)(n.code,{children:"JOIN"}),", a ",(0,i.jsx)(n.code,{children:"UNION"})," operator also serves a similar purpose. It concatenates the outcomes of multiple ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(n.code,{children:"SELECT"})})," statements."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6} title="Group subscribers from two Data Extensions"',children:"SELECT\n jan.SubscriberKey\n , jan.EmailAddress\nFROM JanuaryEventParticipants AS jan\n\nUNION\n\nSELECT\n feb.SubscriberKey\n , feb.EmailAddress\nFROM FebruaryEventParticipantsSegment AS feb\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As you can see in the above example, the ",(0,i.jsx)(n.code,{children:"UNION"})," doesn't require any relationship between the two queries. There is no ",(0,i.jsxs)(n.a,{href:"#joining-on",children:[(0,i.jsx)(n.code,{children:"ON"})," element"]}),". On the other hand, the ",(0,i.jsx)(n.code,{children:"UNION"})," cannot add any new columns."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"UNION"})," works only if:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Both queries have the same number of columns."}),"\n",(0,i.jsx)(n.li,{children:"Both queries have the same order of columns."}),"\n",(0,i.jsx)(n.li,{children:"Columns in both queries have the same data types."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The names do not have to be the same. You don't even have to add aliases for static values. However, it is best practice to match the aliases across all queries for readability purposes."}),"\n",(0,i.jsxs)(n.p,{children:["To simplify the difference between ",(0,i.jsx)(n.code,{children:"JOIN"})," and ",(0,i.jsx)(n.code,{children:"UNION"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you want to add columns - use ",(0,i.jsx)(n.code,{children:"JOIN"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["If you want to add rows - use ",(0,i.jsx)(n.code,{children:"UNION"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["If you want to add both - use both (or ",(0,i.jsx)(n.a,{href:"#full-join",children:(0,i.jsx)(n.code,{children:"FULL JOIN"})}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:["By default, the ",(0,i.jsx)(n.code,{children:"UNION"})," will ignore duplicates. If you want to keep them, use ",(0,i.jsx)(n.code,{children:"UNION ALL"}),"."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{6} title="Group subscribers from two Data Extensions"',children:"SELECT\n jan.SubscriberKey\n , jan.EmailAddress\nFROM JanuaryEventParticipantsSegment AS jan\n\nUNION ALL\n\nSELECT\n feb.SubscriberKey\n , feb.EmailAddress\nFROM FebruaryEventParticipantsSegment AS feb\n"})})]}),"\n",(0,i.jsxs)(n.p,{children:["The obvious use case for ",(0,i.jsx)(n.code,{children:"UNION"})," is gathering subscribers from multiple Data Extensions to build a master segment."]}),"\n",(0,i.jsxs)(n.p,{children:["There is, however, another use case that I find perfect for ",(0,i.jsx)(n.code,{children:"UNION"})," - attaching Seedlists."]}),"\n",(0,i.jsx)(n.p,{children:"If you are using a deliverability monitoring suite, you probably are using seedlist. If not - a seedlist is a list of bot email addresses used to estimate your communication inbox placement."}),"\n",(0,i.jsxs)(n.p,{children:["In most cases, you will store your seedlist in a separate Data Extension and will have only Email Address and fake Subscriber Key columns filled in. How to push them quickly into your segment? With ",(0,i.jsx)(n.code,{children:"UNION"}),", of course:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{8} title="Append Seedlist to your Segment"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , wel.FirstName\n , wel.Interest\nFROM WelcomeCampaignSegment AS wel\n\nUNION\n\nSELECT\n sl.SubscriberKey\n , sl.EmailAddress\n , 'Seed' AS FirstName\n , 'Estimating' AS Interest\nFROM Seedlist AS sl\n"})}),"\n",(0,i.jsx)(n.p,{children:"In the example above, we add the Seedlist to the master segment and provide static value placeholders for columns used in personalisation."}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:["You can mix and match ",(0,i.jsx)(n.code,{children:"JOIN"})," and ",(0,i.jsx)(n.code,{children:"UNION"})," to create your perfect segment. And even add arbitrary data without a ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-from",children:(0,i.jsx)(n.code,{children:"FROM"})}),"."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{10,19} title="AutoKill is the limit of your imagination"',children:"SELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , wel.FirstName\n , i.Interest\nFROM WelcomeCampaignSegment AS wel\n LEFT JOIN InterestsDataPoint AS i\n ON i.SubscriberKey = wel.SubscriberKey\n\nUNION\n\nSELECT\n sl.SubscriberKey\n , sl.EmailAddress\n , 'Seed' AS FirstName\n , 'Estimating' AS Interest\nFROM Seedlist AS sl\n\nUNION ALL\n\nSELECT\n '123456789987654321' AS SubscriberKey\n , 'sales@company.com' AS EmailAddress\n , 'SalesDepartment' AS FirstName\n , 'Leads' AS Interest\n"})})]}),"\n",(0,i.jsx)(n.h2,{id:"intersect",children:"INTERSECT"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"INTERSECT"})," operator is very similar in usage to ",(0,i.jsx)(n.a,{href:"#union",children:(0,i.jsx)(n.code,{children:"UNION"})}),", but instead of concatenating outcomes, it outputs only those that exist in both queries."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Let\'s check who converted from our Black Friday promotion"',children:"SELECT bf.SubscriberKey\nFROM BlackFridayPromoSegment AS bf\n\nINTERSECT\n\nSELECT p.SubscriberKey\nFROM PurchasesDataPoint AS p\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As with ",(0,i.jsx)(n.a,{href:"#union",children:(0,i.jsx)(n.code,{children:"UNION"})}),", ",(0,i.jsx)(n.code,{children:"INTERSECT"})," works only if:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Both queries have the same number of columns."}),"\n",(0,i.jsx)(n.li,{children:"Both queries have the same order of columns."}),"\n",(0,i.jsx)(n.li,{children:"Columns in both queries have the same data types."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The check for rows existing in both queries is done considering data in all provided columns."}),"\n",(0,i.jsxs)(n.p,{children:["You can have the same outcome with more control over comparison logic with a mix of ",(0,i.jsx)(n.a,{href:"#join-types",children:(0,i.jsx)(n.code,{children:"JOIN"})})," and ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(n.code,{children:"WHERE"})}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"except",children:"EXCEPT"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"EXCEPT"})," operator is very similar in usage to ",(0,i.jsx)(n.a,{href:"#union",children:(0,i.jsx)(n.code,{children:"UNION"})}),", but instead of concatenating outcomes, it outputs only those that exist in the first query."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Let\'s check who did not convert from our Black Friday promotion"',children:"SELECT bf.SubscriberKey\nFROM BlackFridayPromoSegment AS bf\n\nEXCEPT\n\nSELECT p.SubscriberKey\nFROM PurchasesDataPoint AS p\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As with ",(0,i.jsx)(n.a,{href:"#union",children:(0,i.jsx)(n.code,{children:"UNION"})}),", ",(0,i.jsx)(n.code,{children:"EXCEPT"})," works only if:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Both queries have the same number of columns."}),"\n",(0,i.jsx)(n.li,{children:"Both queries have the same order of columns."}),"\n",(0,i.jsx)(n.li,{children:"Columns in both queries have the same data types."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The check for rows existing in both queries is done considering data in all provided columns."}),"\n",(0,i.jsxs)(n.p,{children:["You can have the same outcome with more control over comparison logic with a mix of ",(0,i.jsx)(n.a,{href:"#join-types",children:(0,i.jsx)(n.code,{children:"JOIN"})})," and ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(n.code,{children:"WHERE"})}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"sfmc-sql-join-cheat-sheet",children:"SFMC SQL JOIN Cheat Sheet"}),"\n",(0,i.jsx)(n.p,{children:"All standard SQL JOINs in a single image with name, example SFMC-focused use case, key part of the SQL query and diagrams visualising the output. Ready to bookmark or download. Full size version linked below the preview."}),"\n",(0,i.jsx)(r.Z,{img:c(),alt:"Salesforce Marketing Cloud SQL JOIN Cheat Sheet"}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(o.z,{link:"https://raw.githubusercontent.com/MateuszDabrowski/mateuszdabrowski.pl/master/static/img/article/article-image-sql-join-cheat-sheet.png",text:"View full size",newTab:"true"})]})}function w(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(b,{...e})}):b(e)}},7271:(e,n,t)=>{"use strict";t.d(n,{V:()=>a,z:()=>s});t(7294);var i=t(5893);const s=e=>{let{link:n,text:t,newTab:s=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:n,target:s?"_blank":"_self",children:t})})},a=e=>{let{linkLeft:n,textLeft:t,newTabLeft:s=!1,linkRight:a,textRight:o,newTabRight:r=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{class:"col col--12",children:[(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:n,target:s?"_blank":"_self",children:t}),(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:a,target:r?"_blank":"_self",children:o})]})})}},1872:(e,n,t)=>{"use strict";t.d(n,{m:()=>a});t(7294);const i="leadText_qzwo";var s=t(5893);const a=e=>{let{content:n}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:i,children:n})})}}}]); \ No newline at end of file diff --git a/assets/js/5ee7ecad.03eab702.js b/assets/js/5ee7ecad.03eab702.js new file mode 100644 index 000000000..20694420b --- /dev/null +++ b/assets/js/5ee7ecad.03eab702.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[840],{3180:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var i=t(5893),s=t(1151),r=t(1872);const o={id:"sfmc-sql-string-functions",title:"SFMC SQL String Functions",sidebar_label:"String Functions",description:"Take control over strings with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-string-functions.png",tags:["Marketing Cloud","SQL"]},a=void 0,c={id:"sql/sfmc-sql-string-functions",title:"SFMC SQL String Functions",description:"Take control over strings with built-in SQL functions. Let the query do the job.",source:"@site/docs/sql/sfmc-sql-string-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-string-functions",permalink:"/docs/sql/sfmc-sql-string-functions",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-string-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1703804667,formattedLastUpdatedAt:"Dec 28, 2023",frontMatter:{id:"sfmc-sql-string-functions",title:"SFMC SQL String Functions",sidebar_label:"String Functions",description:"Take control over strings with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-string-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Like",permalink:"/docs/sql/sfmc-sql-like"},next:{title:"Date Functions",permalink:"/docs/sql/sfmc-sql-date-functions"}},l={},d=[{value:"LEFT & RIGHT",id:"left--right",level:2},{value:"LEN",id:"len",level:2},{value:"CHARINDEX",id:"charindex",level:2},{value:"PATINDEX",id:"patindex",level:2},{value:"CONCAT",id:"concat",level:2},{value:"LTRIM, RTRIM and TRIM",id:"ltrim-rtrim-and-trim",level:2},{value:"NEWID",id:"newid",level:2},{value:"LOWER, UPPER and Title Case",id:"lower-upper-and-title-case",level:2},{value:"FORMAT with Strings",id:"format-with-strings",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.m,{content:"Take control over strings with built-in SQL functions. Let the query do the job."}),"\n",(0,i.jsx)(n.p,{children:"Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries."}),"\n",(0,i.jsx)(n.p,{children:"Here, I will cover only selected string functions that I find most useful for Marketing Automation purposes. They will help you change the values, split and concatenate them, or find elements within."}),"\n",(0,i.jsx)(n.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(n.p,{children:"All string functions in SQL use a 1-based index instead of 0-based indexing known from, for example, JavaScript. The first character starts at index 1. It is crucial to provide the correct value to the arguments and correctly interpret the results."})}),"\n",(0,i.jsx)(n.h2,{id:"left--right",children:"LEFT & RIGHT"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"LEFT"})," and ",(0,i.jsx)(n.code,{children:"RIGHT"})," functions allow you to cut down the string to just part of it."]}),"\n",(0,i.jsx)(n.p,{children:"Both require source value and the number of characters to return."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="LEFT and RIGHT can work both on strings as well as on other data types"',children:"SELECT\n LEFT(FirstName, 1) AS FirstNameInitialLetter\n , RIGHT(FirstName, 1) AS FirstNameEndingLetter\n , LEFT(s.DateJoined, 3) AS MonthJoined\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Both those functions can be beneficial to clean and streamline your data by themselves, but their real power becomes evident when you mix them with ",(0,i.jsx)(n.a,{href:"#charindex",children:(0,i.jsx)(n.code,{children:"CHARINDEX"})})," for content-aware cuts."]}),"\n",(0,i.jsx)(n.h2,{id:"len",children:"LEN"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"LEN"})," function returns a count of characters in the value."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{3} title="If you use Salesforce Contact ID as Subscriber Key, use LEN to find invalid records quickly"',children:"SELECT SubscriberKey\nFROM _Subscribers\nWHERE LEN(SubscriberKey) != 18\n"})}),"\n",(0,i.jsxs)(n.p,{children:["It is less useful for segmentation but awesome for various administrative purposes. Apart from the example above, I highly recommend checking how this function combines with ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-numeric-functions#min--max",children:[(0,i.jsx)(n.code,{children:"MAX"})," function"]}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"charindex",children:"CHARINDEX"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"CHARINDEX"})," function lets you find if and where one string is in another. You pass the value you want to find, the value in which you wish to search and, optionally, the index from which you want to start the search."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"title=\"Search for 'Manager' in the JobTitle column starting with the first index\"",children:'CHARINDEX("Manager", JobTitle, 1)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["I used the optional starting index in the example above, but you will not be using it in most cases. The ",(0,i.jsx)(n.code,{children:"CHARINDEX"})," defaults to starting from the beginning so that we can write the above line shorter as ",(0,i.jsx)(n.code,{children:'CHARINDEX("Manager", JobTitle)'}),"."]}),"\n",(0,i.jsx)(n.p,{children:"The function returns one of the three possible values:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"NULL - if either value to find or searched value is NULL"}),"\n",(0,i.jsx)(n.li,{children:"0 - if the value to find is not within the searched value"}),"\n",(0,i.jsx)(n.li,{children:"any other digit - the index where the value to find starts within the searched value - if there are multiple occurrences, the result will show the starting index of just the first one."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["By default, ",(0,i.jsx)(n.code,{children:"CHARINDEX"})," in SFMC is case-insensitive in its searches. You can, however, enforce case sensitivity by adding ",(0,i.jsx)(n.code,{children:"COLLATE"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="Case sensitive CHARINDEX search - note lack of a comma between the value and COLLATE"',children:'CHARINDEX("Manager", JobTitle COLLATE Latin1_General_CS_AS)\n'})}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"CHARINDEX"})," is especially useful when combined with ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case#conditional-values-with-case",children:(0,i.jsx)(n.code,{children:"CASE"})})," and ",(0,i.jsx)(n.a,{href:"#left--right",children:(0,i.jsx)(n.code,{children:"LEFT"})}),"/",(0,i.jsx)(n.a,{href:"#left--right",children:(0,i.jsx)(n.code,{children:"RIGHT"})})," functions, as it allows for smart string operations:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{3} title="Dynamically pull part of the Institution Name value"',children:"SELECT\n CASE\n WHEN CHARINDEX(' ', InstitutionName) > 0 THEN LEFT(InstitutionName, CHARINDEX(' ', InstitutionName) - 1)\n ELSE InstitutionName\n END AS InstitutionType\nFROM Accounts\n"})}),(0,i.jsxs)(n.p,{children:["The above query checks whether there is a space within the ",(0,i.jsx)(n.code,{children:"InstitutionName"})," value and if yes - it captures only the first word. Think about all the educational institution names with ",(0,i.jsx)(n.code,{children:"University of..."}),", ",(0,i.jsx)(n.code,{children:"School of..."})," - by taking only the first part, we can create a new simplified data point categorising records by type."]})]}),"\n",(0,i.jsx)(n.h2,{id:"patindex",children:"PATINDEX"}),"\n",(0,i.jsxs)(n.p,{children:["While ",(0,i.jsx)(n.a,{href:"#charindex",children:(0,i.jsx)(n.code,{children:"CHARINDEX"})})," is great for searching the position of a specific string in a value, ",(0,i.jsx)(n.code,{children:"PATINDEX"})," gives you even more power by supporting the wildcard patterns used with ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-like",children:(0,i.jsx)(n.code,{children:"LIKE"})})," operator:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Wildcards & Operators"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"%"})}),(0,i.jsx)(n.td,{children:"Zero, one or more characters"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"_"})}),(0,i.jsx)(n.td,{children:"Exactly one character"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"[]"})}),(0,i.jsx)(n.td,{children:"Any single character from the list specified inside"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"-"})}),(0,i.jsxs)(n.td,{children:["Range operator for ",(0,i.jsx)(n.code,{children:"[]"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"^"})}),(0,i.jsxs)(n.td,{children:["Exclusion operator for ",(0,i.jsx)(n.code,{children:"[]"})]})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["To learn more about specific wildcards and advanced operators, check out the ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-like",children:[(0,i.jsx)(n.code,{children:"LIKE"})," guide"]}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="Broad C-Suite hunt with PATINDEX"',children:"PATINDEX('%C_O%', JobTitle)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["While wildcards give ",(0,i.jsx)(n.code,{children:"PATINDEX"})," an edge over ",(0,i.jsx)(n.a,{href:"#charindex",children:(0,i.jsx)(n.code,{children:"CHARINDEX"})}),", it misses one feature of the latter - an optional argument for starting the search from a specific string. Either can be better depending on the use case at hand."]}),"\n",(0,i.jsx)(n.h2,{id:"concat",children:"CONCAT"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"CONCAT"})," function allows you to join two or more strings together."]}),"\n",(0,i.jsx)(n.p,{children:"You can use it on both existing values pulled from source data extension, as well as on custom strings and digits added directly in the query. In most cases, you will mix both."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Perfect for preparing your data for personalization"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , CONCAT(FirstName, ' ', LastName) AS FullName\n"})}),"\n",(0,i.jsx)(n.p,{children:"You can concatenate any number of strings by just adding them comma-separated."}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(n.p,{children:"In many cases, you might see concatenation done with the plus sign notation."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Same as above, but with the plus notation"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , FirstName + ' ' + LastName AS FullName\n"})}),(0,i.jsx)(n.p,{children:"It might seem cleaner, but there are two downsides to this method:"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["With the plus notation, if at least one provided value is ",(0,i.jsx)(n.code,{children:"NULL"}),", the outcome becomes ",(0,i.jsx)(n.code,{children:"NULL"}),". ",(0,i.jsx)(n.code,{children:"CONCAT"})," function treats such values as empty strings."]}),"\n",(0,i.jsxs)(n.li,{children:["If you want to join a string with a date type value, you need to use ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-conversion-functions#cast--convert",children:(0,i.jsx)(n.code,{children:"CONVERT"})}),", but ",(0,i.jsx)(n.code,{children:"CONCAT"})," will do the implicit conversion for you."]}),"\n"]})]}),"\n",(0,i.jsx)(n.h2,{id:"ltrim-rtrim-and-trim",children:"LTRIM, RTRIM and TRIM"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"LTRIM"})," and ",(0,i.jsx)(n.code,{children:"RTRIM"})," functions allow you to quickly clean your data by deleting unneeded spaces from the beginning or the end of the provided string."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="Noone likes useless whitespace in their database"',children:"SELECT\n LTRIM(' data from webform ') AS CleanLeftSide /* Output: 'data from webform ' */\n , RTRIM(' data from webform ') AS CleanRightSide /* Output: ' data from webform' */\n , TRIM(' data from webform ') AS CleanBothSides /* Output: 'data from webform' */\n"})}),"\n",(0,i.jsx)(n.h2,{id:"newid",children:"NEWID"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"NEWID"})," function creates a pseudorandom identifier in the form of a 36-character string GUID (RFC4122 compliant)."]}),"\n",(0,i.jsxs)(n.p,{children:["The output structure is the same as for the SSJS ",(0,i.jsx)(n.code,{children:"Platform.Function.GUID()"})," or AMPScript ",(0,i.jsx)(n.code,{children:"GUID()"})," functions - five alphanumerical strings joined by hyphens."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'{1} title="Returns GUID in the form of XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"',children:"SELECT NEWID() AS UniqueID\n"})}),"\n",(0,i.jsx)(n.h2,{id:"lower-upper-and-title-case",children:"LOWER, UPPER and Title Case"}),"\n",(0,i.jsx)(n.p,{children:"When working with SQL, you will frequently encounter dirty data that needs some cleaning before being leveraged for personalisation in marketing sends. One of the frequent issues is inconsistent letter cases, especially on self-filled data points like first and last names coming from lead forms."}),"\n",(0,i.jsxs)(n.p,{children:["Thankfully, SQL can clean up such data with built-in ",(0,i.jsx)(n.code,{children:"LOWER"})," and ",(0,i.jsx)(n.code,{children:"UPPER"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{3-4}",children:"SELECT\n 'DIRTY Data' AS SampleData\n , LOWER('DIRTY Data') AS Lowercase /* Output: 'dirty data' */\n , UPPER('DIRTY Data') AS Uppercase /* Output: 'DIRTY DATA' */\n"})}),"\n",(0,i.jsx)(n.p,{children:"However, there is no out-of-the-box function for Proper Case - a popular requirement, especially around names and titles. The basic solution for single-word strings is straightforward:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{3}",children:"SELECT\n FirstName /* Output: 'MATEUSZ' */\n , UPPER(LEFT(FirstName, 1)) + LOWER(RIGHT(FirstName, LEN(FirstName) - 1)) AS Propercase /* Output: 'Mateusz' */\n"})}),"\n",(0,i.jsxs)(n.p,{children:["However, it will not work with complex (like names with a hyphen in the middle) or multi-word values. The standard SQL solution - User Defined Function - doesn't work in a limited Salesforce Marketing Cloud SQL environment. The alternative - using ",(0,i.jsx)(n.a,{href:"#charindex",children:(0,i.jsx)(n.code,{children:"CHARINDEX"})}),"/",(0,i.jsx)(n.a,{href:"#patindex",children:(0,i.jsx)(n.code,{children:"PATINDEX"})})," to find each word - gets awful as soon as you hit three words and more."]}),"\n",(0,i.jsxs)(n.p,{children:["Recommended approach? Either clean the data before ingestion to SFMC or do it directly in the email with the built-in AMPScript ",(0,i.jsx)(n.code,{children:"ProperCase"})," function."]}),"\n",(0,i.jsx)(n.h2,{id:"format-with-strings",children:"FORMAT with Strings"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"FORMAT"})," function lets you quickly change the data into a different format. In Salesforce Marketing Cloud, it is especially useful, as you cannot create your functions. ",(0,i.jsx)(n.code,{children:"FORMAT"})," might save you massive headaches."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"FORMAT"})," works only with datetime and numeric values. Why I'm writing about it here then? Because you can use ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-conversion-functions#cast--convert",children:(0,i.jsx)(n.code,{children:"CONVERT"})})," function to change some of your strings into compliant data types. Consider changing string dates into datetime or phone numbers into integers to format them easily. Check out ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-date-functions#format-with-dates",children:[(0,i.jsx)(n.code,{children:"FORMAT"})," with Dates"]})," and ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-numeric-functions#format-with-numbers",children:[(0,i.jsx)(n.code,{children:"FORMAT"})," with Numbers"]})," for more information. The outcome of formatting both number and date types with this function is a string."]})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,n,t)=>{t.d(n,{m:()=>r});t(7294);const i="leadText_qzwo";var s=t(5893);const r=e=>{let{content:n}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:i,children:n})})}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var i=t(7294);const s={},r=i.createContext(s);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(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5ee7ecad.7dfd9771.js b/assets/js/5ee7ecad.7dfd9771.js deleted file mode 100644 index 257094adc..000000000 --- a/assets/js/5ee7ecad.7dfd9771.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[840],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=u(n),m=i,h=c["".concat(s,".").concat(m)]||c[m]||p[m]||r;return n?a.createElement(h,o(o({ref:t},d),{},{components:n})):a.createElement(h,o({ref:t},d))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:i,o[1]=l;for(var u=2;u<r;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>r});var a=n(7294);const i="leadText_qzwo",r=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},5657:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var a=n(7462),i=(n(7294),n(4137)),r=n(1872);const o={id:"sfmc-sql-string-functions",title:"SFMC SQL String Functions",sidebar_label:"String Functions",description:"Take control over strings with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-string-functions.png",tags:["Marketing Cloud","SQL"]},l=void 0,s={unversionedId:"sql/sfmc-sql-string-functions",id:"sql/sfmc-sql-string-functions",title:"SFMC SQL String Functions",description:"Take control over strings with built-in SQL functions. Let the query do the job.",source:"@site/docs/sql/sfmc-sql-string-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-string-functions",permalink:"/docs/sql/sfmc-sql-string-functions",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-string-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1657131299,formattedLastUpdatedAt:"Jul 6, 2022",frontMatter:{id:"sfmc-sql-string-functions",title:"SFMC SQL String Functions",sidebar_label:"String Functions",description:"Take control over strings with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-string-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Like",permalink:"/docs/sql/sfmc-sql-like"},next:{title:"Date Functions",permalink:"/docs/sql/sfmc-sql-date-functions"}},u={},d=[{value:"LEFT & RIGHT",id:"left--right",level:2},{value:"LEN",id:"len",level:2},{value:"CHARINDEX",id:"charindex",level:2},{value:"PATINDEX",id:"patindex",level:2},{value:"CONCAT",id:"concat",level:2},{value:"LTRIM and RTRIM",id:"ltrim-and-rtrim",level:2},{value:"NEWID",id:"newid",level:2},{value:"LOWER, UPPER and Title Case",id:"lower-upper-and-title-case",level:2},{value:"FORMAT with Strings",id:"format-with-strings",level:2}],c={toc:d},p="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(p,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(r.m,{content:"Take control over strings with built-in SQL functions. Let the query do the job.",mdxType:"LeadText"}),(0,i.kt)("p",null,"Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries."),(0,i.kt)("p",null,"Here, I will cover only selected string functions that I find most useful for Marketing Automation purposes. They will help you change the values, split and concatenate them, or find elements within."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"All string functions in SQL use a 1-based index instead of 0-based indexing known from, for example, JavaScript. The first character starts at index 1. It is crucial to provide the correct value to the arguments and correctly interpret the results.")),(0,i.kt)("h2",{id:"left--right"},"LEFT & RIGHT"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"LEFT")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"RIGHT")," functions allow you to cut down the string to just part of it."),(0,i.kt)("p",null,"Both require source value and the number of characters to return."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="LEFT and RIGHT can work both on strings as well as on other data types"',title:'"LEFT',and:!0,RIGHT:!0,can:!0,work:!0,both:!0,on:!0,strings:!0,as:!0,well:!0,other:!0,data:!0,'types"':!0},"SELECT\n LEFT(FirstName, 1) AS FirstNameInitialLetter\n , RIGHT(FirstName, 1) AS FirstNameEndingLetter\n , LEFT(s.DateJoined, 3) AS MonthJoined\n")),(0,i.kt)("p",null,"Both those functions can be beneficial to clean and streamline your data by themselves, but their real power becomes evident when you mix them with ",(0,i.kt)("a",{parentName:"p",href:"#charindex"},(0,i.kt)("inlineCode",{parentName:"a"},"CHARINDEX"))," for content-aware cuts."),(0,i.kt)("h2",{id:"len"},"LEN"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"LEN")," function returns a count of characters in the value."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="If you use Salesforce Contact ID as Subscriber Key, use LEN to find invalid records quickly"',"{3}":!0,title:'"If',you:!0,use:!0,Salesforce:!0,Contact:!0,ID:!0,as:!0,Subscriber:!0,"Key,":!0,LEN:!0,to:!0,find:!0,invalid:!0,records:!0,'quickly"':!0},"SELECT SubscriberKey\nFROM _Subscribers\nWHERE LEN(SubscriberKey) != 18\n")),(0,i.kt)("p",null,"It is less useful for segmentation but awesome for various administrative purposes. Apart from the example above, I highly recommend checking how this function combines with ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-numeric-functions#min--max"},(0,i.kt)("inlineCode",{parentName:"a"},"MAX")," function"),"."),(0,i.kt)("h2",{id:"charindex"},"CHARINDEX"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"CHARINDEX")," function lets you find if and where one string is in another. You pass the value you want to find, the value in which you wish to search and, optionally, the index from which you want to start the search."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"title=\"Search for 'Manager' in the JobTitle column starting with the first index\"",title:'"Search',for:!0,"'Manager'":!0,in:!0,the:!0,JobTitle:!0,column:!0,starting:!0,with:!0,first:!0,'index"':!0},'CHARINDEX("Manager", JobTitle, 1)\n')),(0,i.kt)("p",null,"I used the optional starting index in the example above, but you will not be using it in most cases. The ",(0,i.kt)("inlineCode",{parentName:"p"},"CHARINDEX")," defaults to starting from the beginning so that we can write the above line shorter as ",(0,i.kt)("inlineCode",{parentName:"p"},'CHARINDEX("Manager", JobTitle)'),"."),(0,i.kt)("p",null,"The function returns one of the three possible values:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"NULL - if either value to find or searched value is NULL"),(0,i.kt)("li",{parentName:"ol"},"0 - if the value to find is not within the searched value"),(0,i.kt)("li",{parentName:"ol"},"any other digit - the index where the value to find starts within the searched value - if there are multiple occurrences, the result will show the starting index of just the first one.")),(0,i.kt)("p",null,"By default, ",(0,i.kt)("inlineCode",{parentName:"p"},"CHARINDEX")," in SFMC is case-insensitive in its searches. You can, however, enforce case sensitivity by adding ",(0,i.kt)("inlineCode",{parentName:"p"},"COLLATE"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Case sensitive CHARINDEX search - note lack of a comma between the value and COLLATE"',title:'"Case',sensitive:!0,CHARINDEX:!0,search:!0,"-":!0,note:!0,lack:!0,of:!0,a:!0,comma:!0,between:!0,the:!0,value:!0,and:!0,'COLLATE"':!0},'CHARINDEX("Manager", JobTitle COLLATE Latin1_General_CS_AS)\n')),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"CHARINDEX")," is especially useful when combined with ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#conditional-values-with-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE"))," and ",(0,i.kt)("a",{parentName:"p",href:"#left--right"},(0,i.kt)("inlineCode",{parentName:"a"},"LEFT")),"/",(0,i.kt)("a",{parentName:"p",href:"#left--right"},(0,i.kt)("inlineCode",{parentName:"a"},"RIGHT"))," functions, as it allows for smart string operations:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Dynamically pull part of the Institution Name value"',"{3}":!0,title:'"Dynamically',pull:!0,part:!0,of:!0,the:!0,Institution:!0,Name:!0,'value"':!0},"SELECT\n CASE\n WHEN CHARINDEX(' ', InstitutionName) > 0 THEN LEFT(InstitutionName, CHARINDEX(' ', InstitutionName) - 1)\n ELSE InstitutionName\n END AS InstitutionType\nFROM Accounts\n")),(0,i.kt)("p",{parentName:"admonition"},"The above query checks whether there is a space within the ",(0,i.kt)("inlineCode",{parentName:"p"},"InstitutionName")," value and if yes - it captures only the first word. Think about all the educational institution names with ",(0,i.kt)("inlineCode",{parentName:"p"},"University of..."),", ",(0,i.kt)("inlineCode",{parentName:"p"},"School of...")," - by taking only the first part, we can create a new simplified data point categorising records by type.")),(0,i.kt)("h2",{id:"patindex"},"PATINDEX"),(0,i.kt)("p",null,"While ",(0,i.kt)("a",{parentName:"p",href:"#charindex"},(0,i.kt)("inlineCode",{parentName:"a"},"CHARINDEX"))," is great for searching the position of a specific string in a value, ",(0,i.kt)("inlineCode",{parentName:"p"},"PATINDEX")," gives you even more power by supporting the wildcard patterns used with ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-like"},(0,i.kt)("inlineCode",{parentName:"a"},"LIKE"))," operator:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Wildcards & Operators"),(0,i.kt)("th",{parentName:"tr",align:null},"Description"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"%")),(0,i.kt)("td",{parentName:"tr",align:null},"Zero, one or more characters")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"_")),(0,i.kt)("td",{parentName:"tr",align:null},"Exactly one character")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"[]")),(0,i.kt)("td",{parentName:"tr",align:null},"Any single character from the list specified inside")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"-")),(0,i.kt)("td",{parentName:"tr",align:null},"Range operator for ",(0,i.kt)("inlineCode",{parentName:"td"},"[]"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"^")),(0,i.kt)("td",{parentName:"tr",align:null},"Exclusion operator for ",(0,i.kt)("inlineCode",{parentName:"td"},"[]"))))),(0,i.kt)("p",null,"To learn more about specific wildcards and advanced operators, check out the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-like"},(0,i.kt)("inlineCode",{parentName:"a"},"LIKE")," guide"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Broad C-Suite hunt with PATINDEX"',title:'"Broad',"C-Suite":!0,hunt:!0,with:!0,'PATINDEX"':!0},"PATINDEX('%C_O%', JobTitle)\n")),(0,i.kt)("p",null,"While wildcards give ",(0,i.kt)("inlineCode",{parentName:"p"},"PATINDEX")," an edge over ",(0,i.kt)("a",{parentName:"p",href:"#charindex"},(0,i.kt)("inlineCode",{parentName:"a"},"CHARINDEX")),", it misses one feature of the latter - an optional argument for starting the search from a specific string. Either can be better depending on the use case at hand."),(0,i.kt)("h2",{id:"concat"},"CONCAT"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"CONCAT")," function allows you to join two or more strings together."),(0,i.kt)("p",null,"You can use it on both existing values pulled from source data extension, as well as on custom strings and digits added directly in the query. In most cases, you will mix both."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Perfect for preparing your data for personalization"',"{4}":!0,title:'"Perfect',for:!0,preparing:!0,your:!0,data:!0,'personalization"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , CONCAT(FirstName, ' ', LastName) AS FullName\n")),(0,i.kt)("p",null,"You can concatenate any number of strings by just adding them comma-separated."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"In many cases, you might see concatenation done with the plus sign notation."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Same as above, but with the plus notation"',"{4}":!0,title:'"Same',as:!0,"above,":!0,but:!0,with:!0,the:!0,plus:!0,'notation"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , FirstName + ' ' + LastName AS FullName\n")),(0,i.kt)("p",{parentName:"admonition"},"It might seem cleaner, but there are two downsides to this method:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"With the plus notation, if at least one provided value is ",(0,i.kt)("inlineCode",{parentName:"li"},"NULL"),", the outcome becomes ",(0,i.kt)("inlineCode",{parentName:"li"},"NULL"),". ",(0,i.kt)("inlineCode",{parentName:"li"},"CONCAT")," function treats such values as empty strings."),(0,i.kt)("li",{parentName:"ol"},"If you want to join a string with a date type value, you need to use ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-conversion-functions#cast--convert"},(0,i.kt)("inlineCode",{parentName:"a"},"CONVERT")),", but ",(0,i.kt)("inlineCode",{parentName:"li"},"CONCAT")," will do the implicit conversion for you."))),(0,i.kt)("h2",{id:"ltrim-and-rtrim"},"LTRIM and RTRIM"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"LTRIM")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"RTRIM")," functions allow you to quickly clean your data by deleting unneeded spaces from the beginning or the end of the provided string."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Noone likes useless whitespace in their database"',title:'"Noone',likes:!0,useless:!0,whitespace:!0,in:!0,their:!0,'database"':!0},"SELECT\n LTRIM(' data from webform ') AS CleanLeftSide /* Output: 'data from webform ' */\n , RTRIM(' data from webform ') AS CleanRightSide /* Output: ' data from webform' */\n , LTRIM(RTRIM(' data from webform ')) AS CleanBothSides /* Output: 'data from webform' */\n")),(0,i.kt)("h2",{id:"newid"},"NEWID"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"NEWID")," function creates a pseudorandom identifier in the form of a 36-character string GUID (RFC4122 compliant)."),(0,i.kt)("p",null,"The output structure is the same as for the SSJS ",(0,i.kt)("inlineCode",{parentName:"p"},"Platform.Function.GUID()")," or AMPScript ",(0,i.kt)("inlineCode",{parentName:"p"},"GUID()")," functions - five alphanumerical strings joined by hyphens."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="Returns GUID in the form of XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"',"{1}":!0,title:'"Returns',GUID:!0,in:!0,the:!0,form:!0,of:!0,'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"':!0},"SELECT NEWID() AS UniqueID\n")),(0,i.kt)("h2",{id:"lower-upper-and-title-case"},"LOWER, UPPER and Title Case"),(0,i.kt)("p",null,"When working with SQL, you will frequently encounter dirty data that needs some cleaning before being leveraged for personalisation in marketing sends. One of the frequent issues is inconsistent letter cases, especially on self-filled data points like first and last names coming from lead forms."),(0,i.kt)("p",null,"Thankfully, SQL can clean up such data with built-in ",(0,i.kt)("inlineCode",{parentName:"p"},"LOWER")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"UPPER"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3-4}","{3-4}":!0},"SELECT\n 'DIRTY Data' AS SampleData\n , LOWER('DIRTY Data') AS Lowercase /* Output: 'dirty data' */\n , UPPER('DIRTY Data') AS Uppercase /* Output: 'DIRTY DATA' */\n")),(0,i.kt)("p",null,"However, there is no out-of-the-box function for Proper Case - a popular requirement, especially around names and titles. The basic solution for single-word strings is straightforward:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3}","{3}":!0},"SELECT\n FirstName /* Output: 'MATEUSZ' */\n , UPPER(LEFT(FirstName, 1)) + LOWER(RIGHT(FirstName, LEN(FirstName) - 1)) AS Propercase /* Output: 'Mateusz' */\n")),(0,i.kt)("p",null,"However, it will not work with complex (like names with a hyphen in the middle) or multi-word values. The standard SQL solution - User Defined Function - doesn't work in a limited Salesforce Marketing Cloud SQL environment. The alternative - using ",(0,i.kt)("a",{parentName:"p",href:"#charindex"},(0,i.kt)("inlineCode",{parentName:"a"},"CHARINDEX")),"/",(0,i.kt)("a",{parentName:"p",href:"#patindex"},(0,i.kt)("inlineCode",{parentName:"a"},"PATINDEX"))," to find each word - gets awful as soon as you hit three words and more."),(0,i.kt)("p",null,"Recommended approach? Either clean the data before ingestion to SFMC or do it directly in the email with the built-in AMPScript ",(0,i.kt)("inlineCode",{parentName:"p"},"ProperCase")," function."),(0,i.kt)("h2",{id:"format-with-strings"},"FORMAT with Strings"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"FORMAT")," function lets you quickly change the data into a different format. In Salesforce Marketing Cloud, it is especially useful, as you cannot create your functions. ",(0,i.kt)("inlineCode",{parentName:"p"},"FORMAT")," might save you massive headaches."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"FORMAT")," works only with datetime and numeric values. Why I'm writing about it here then? Because you can use ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#cast--convert"},(0,i.kt)("inlineCode",{parentName:"a"},"CONVERT"))," function to change some of your strings into compliant data types. Consider changing string dates into datetime or phone numbers into integers to format them easily. Check out ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#format-with-dates"},(0,i.kt)("inlineCode",{parentName:"a"},"FORMAT")," with Dates")," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-numeric-functions#format-with-numbers"},(0,i.kt)("inlineCode",{parentName:"a"},"FORMAT")," with Numbers")," for more information. The outcome of formatting both number and date types with this function is a string."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/612d51b5.6e1d1434.js b/assets/js/612d51b5.6e1d1434.js deleted file mode 100644 index efbe3d57e..000000000 --- a/assets/js/612d51b5.6e1d1434.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3108],{4137:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>N});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?l(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function o(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},l=Object.keys(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var d=n.createContext({}),m=function(t){var e=n.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=m(t.components);return n.createElement(d.Provider,{value:e},t.children)},s="mdxType",p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,d=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,N=s["".concat(d,".").concat(k)]||s[k]||p[k]||l;return a?n.createElement(N,i(i({ref:e},u),{},{components:a})):n.createElement(N,i({ref:e},u))}));function N(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[s]="string"==typeof t?t:r,i[1]=o;for(var m=2;m<l;m++)i[m]=a[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}k.displayName="MDXCreateElement"},425:(t,e,a)=>{a.d(e,{Z:()=>i});var n=a(7294),r=a(6010);const l={tabItem:"tabItem_Ymn6"};function i(t){let{children:e,hidden:a,className:i}=t;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(l.tabItem,i),hidden:a},e)}},3992:(t,e,a)=>{a.d(e,{Z:()=>f});var n=a(7462),r=a(7294),l=a(6010),i=a(2957),o=a(6550),d=a(5238),m=a(3609),u=a(2560);function s(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function p(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??s(a);return function(t){const e=(0,m.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(t),t}),[e,a])}function k(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function N(t){let{queryString:e=!1,groupId:a}=t;const n=(0,o.k6)(),l=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,d._X)(l),(0,r.useCallback)((t=>{if(!l)return;const e=new URLSearchParams(n.location.search);e.set(l,t),n.replace({...n.location,search:e.toString()})}),[l,n])]}function g(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,l=p(t),[i,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!k({value:e,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:l}))),[d,m]=N({queryString:a,groupId:n}),[s,g]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,l]=(0,u.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&l.set(t)}),[a,l])]}({groupId:n}),b=(()=>{const t=d??s;return k({value:t,tabValues:l})?t:null})();(0,r.useLayoutEffect)((()=>{b&&o(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((t=>{if(!k({value:t,tabValues:l}))throw new Error(`Can't select invalid tab value=${t}`);o(t),m(t),g(t)}),[m,g,l]),tabValues:l}}var b=a(1048);const c={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function h(t){let{className:e,block:a,selectedValue:o,selectValue:d,tabValues:m}=t;const u=[],{blockElementScrollPositionUntilNextRender:s}=(0,i.o5)(),p=t=>{const e=t.currentTarget,a=u.indexOf(e),n=m[a].value;n!==o&&(s(e),d(n))},k=t=>{let e=null;switch(t.key){case"Enter":p(t);break;case"ArrowRight":{const a=u.indexOf(t.currentTarget)+1;e=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(t.currentTarget)-1;e=u[a]??u[u.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},e)},m.map((t=>{let{value:e,label:a,attributes:i}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,key:e,ref:t=>u.push(t),onKeyDown:k,onClick:p},i,{className:(0,l.Z)("tabs__item",c.tabItem,i?.className,{"tabs__item--active":o===e})}),a??e)})))}function y(t){let{lazy:e,children:a,selectedValue:n}=t;const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=l.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function S(t){const e=g(t);return r.createElement("div",{className:(0,l.Z)("tabs-container",c.tabList)},r.createElement(h,(0,n.Z)({},t,e)),r.createElement(y,(0,n.Z)({},t,e)))}function f(t){const e=(0,b.Z)();return r.createElement(S,(0,n.Z)({key:String(e)},t))}},1872:(t,e,a)=>{a.d(e,{m:()=>l});var n=a(7294);const r="leadText_qzwo",l=t=>{let{content:e}=t;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},e))}},7591:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>m,default:()=>g,frontMatter:()=>d,metadata:()=>u,toc:()=>p});var n=a(7462),r=(a(7294),a(4137)),l=a(3992),i=a(425),o=a(1872);const d={id:"sfmc-mobile-connect-data-views",title:"SFMC Mobile Connect Data Views",sidebar_label:"Mobile Connect Data Views",description:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-mobile-connect-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","SMS"]},m=void 0,u={unversionedId:"config/sfmc-mobile-connect-data-views",id:"config/sfmc-mobile-connect-data-views",title:"SFMC Mobile Connect Data Views",description:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",source:"@site/docs/config/sfmc-mobile-connect-data-views.mdx",sourceDirName:"config",slug:"/config/sfmc-mobile-connect-data-views",permalink:"/docs/config/sfmc-mobile-connect-data-views",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-mobile-connect-data-views.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Analytics",permalink:"/docs/tags/analytics"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"SMS",permalink:"/docs/tags/sms"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1680272562,formattedLastUpdatedAt:"Mar 31, 2023",frontMatter:{id:"sfmc-mobile-connect-data-views",title:"SFMC Mobile Connect Data Views",sidebar_label:"Mobile Connect Data Views",description:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-mobile-connect-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","SMS"]},sidebar:"docs",previous:{title:"System Data Views",permalink:"/docs/config/sfmc-system-data-views"},next:{title:"MCC Integration Patterns",permalink:"/docs/config/sfmc-mcc-integration-patterns"}},s={},p=[{value:"System Data Views",id:"system-data-views",level:2},{value:"MobileConnect Data Views",id:"mobileconnect-data-views",level:2},{value:"_MobileAddress",id:"_mobileaddress",level:3},{value:"_MobileSubscription",id:"_mobilesubscription",level:3},{value:"_SubscriberSMS",id:"_subscribersms",level:3},{value:"_SMSSubscriptionLog",id:"_smssubscriptionlog",level:3},{value:"_SMSMessageTracking",id:"_smsmessagetracking",level:3},{value:"SMS Status Codes",id:"sms-status-codes",level:4},{value:"_UndeliverableSMS",id:"_undeliverablesms",level:3}],k={toc:p},N="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(N,(0,n.Z)({},k,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"system-data-views"},"System Data Views"),(0,r.kt)("p",null,"Learn about SFMC ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#data-views-basics"},"System Data Views Basics")," and specific backend tables covering ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#subscriber-data-views"},"Email Studio"),", ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#journey-data-views"},"Journey Builder")," & ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#automation-data-views"},"Automation Studio")," data ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views"},"here"),"."),(0,r.kt)("h2",{id:"mobileconnect-data-views"},"MobileConnect Data Views"),(0,r.kt)("p",null,"MobileConnect Data Views are unique, as most of them are no longer supported by Salesforce. But some still works. All those data views show data limited to a specific Business Unit."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Most of the MobileConnect data is assigned to Mobile Number, not Contact. It means that it might be shared by a few contacts (if multiple have the same mobile number set) or migrate between them (if the mobile number gets reassigned)."),(0,r.kt)("p",{parentName:"admonition"},"It shouldn't be a big problem in B2C environments, as most people will have their mobile number and keep it long. However, remember that unused numbers might be recycled after a few years by telecom and go back to the market and given to a new user."),(0,r.kt)("p",{parentName:"admonition"},"Mobile number recycling is much more present in the B2B scenario, where there is a bigger chance for shared mobile numbers and much faster recycling of the numbers. Many companies reuse the phone number of the employees that left."),(0,r.kt)("p",{parentName:"admonition"},"When working with Mobile Number history of engagement and subscription, take this into consideration.")),(0,r.kt)("h3",{id:"_mobileaddress"},"_MobileAddress"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_MobileAddress")," Data View is officially not supported by Salesforce. But it's too good not to use it. And there is no replacement for it. Why? Because Marketing Cloud still uses this Data View as a backend data source for the MobileConnect Demographics Data."),(0,r.kt)(l.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_MobileID"),(0,r.kt)("td",{parentName:"tr",align:null},"MobileConnect Contact ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_ContactID"),(0,r.kt)("td",{parentName:"tr",align:null},"Global Contact ID (not Contact Key)"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_MobileNumber"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile number for the subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_Status"),(0,r.kt)("td",{parentName:"tr",align:null},"Status of the Contact"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_Source"),(0,r.kt)("td",{parentName:"tr",align:null},"Source of the Contact"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_SourceObjectId"),(0,r.kt)("td",{parentName:"tr",align:null},"ID of the object if ",(0,r.kt)("inlineCode",{parentName:"td"},"_Source")," = 10"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_Priority"),(0,r.kt)("td",{parentName:"tr",align:null},"In case the contact uses multiple mobile numbers, the Priority field's value establishes the order in which to use those mobile numbers. ",(0,r.kt)("inlineCode",{parentName:"td"},"_Priority")," = 1 is first in order"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_Channel"),(0,r.kt)("td",{parentName:"tr",align:null},"Communication channel. Used to be Mobile, now not in use"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_CarrierID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric code for the mobile carrier used by the contact"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_CountryCode"),(0,r.kt)("td",{parentName:"tr",align:null},"Two letter country code"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_CreatedDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date the subscription was created"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_CreatedBy"),(0,r.kt)("td",{parentName:"tr",align:null},"Person responsible for contact creation"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_ModifiedBy"),(0,r.kt)("td",{parentName:"tr",align:null},"Person responsible for contact modification"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_City"),(0,r.kt)("td",{parentName:"tr",align:null},"Contact's City"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_State"),(0,r.kt)("td",{parentName:"tr",align:null},"Contact's State"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_ZipCode"),(0,r.kt)("td",{parentName:"tr",align:null},"Contact's Zip Code"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_FirstName"),(0,r.kt)("td",{parentName:"tr",align:null},"Contact's First Name"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_LastName"),(0,r.kt)("td",{parentName:"tr",align:null},"Contact's Last Name"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_UTCOffset"),(0,r.kt)("td",{parentName:"tr",align:null},"The number of hours from which the user's time zone deviates from UTC. Defaults to 0"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_IsHonorDST"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the user's time zone observers Daylight Savings Time or not. Defaults to false"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X"))))),(0,r.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_Status")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"Active")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"Inactive")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"Deleted")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_Source")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"Unspecified")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"Webcollect")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"API")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"FTAF")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"MoveCopy")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Manual")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"SalesForce")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"Segmentation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"GenericExtension")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"CustomObject")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"FacebookAPI")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"SmartCapture")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"13"),(0,r.kt)("td",{parentName:"tr",align:null},"MobileOptIn")))),(0,r.kt)("hr",null)),(0,r.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n mobileAddress._MobileID AS MobileID\n , mobileAddress._ContactID AS ContactID\n , mobileAddress._MobileNumber AS MobileNumber\n , mobileAddress._Status AS Status\n , mobileAddress._Source AS Source\n , mobileAddress._SourceObjectId AS SourceObjectId\n , mobileAddress._Priority AS Priority\n , mobileAddress._Channel AS Channel\n , mobileAddress._CarrierID AS CarrierID\n , mobileAddress._CountryCode AS CountryCode\n , mobileAddress._CreatedDate AS CreatedDate\n , mobileAddress._CreatedBy AS CreatedBy\n , mobileAddress._ModifiedBy AS ModifiedBy\n , mobileAddress._City AS City\n , mobileAddress._State AS State\n , mobileAddress._ZipCode AS ZipCode\n , mobileAddress._FirstName AS FirstName\n , mobileAddress._LastName AS LastName\n , mobileAddress._UTCOffset AS UTCOffset\n , mobileAddress._IsHonorDST AS IsHonorDST\nFROM _MobileAddress AS mobileAddress\n")))),(0,r.kt)("p",null,"When working with ",(0,r.kt)("inlineCode",{parentName:"p"},"_MobileAddress")," Data View:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"There is no guarantee of how long it will work and how long the data will be correct. Be sure you are checking it periodically or - even better - have validation in your code."),(0,r.kt)("li",{parentName:"ol"},"The rule of thumb when working with MobileConnect is to use the official, supported solutions. Only when they cannot deliver - check whether ",(0,r.kt)("inlineCode",{parentName:"li"},"_MobileAddress")," can help."),(0,r.kt)("li",{parentName:"ol"},"Do not use the User Interface editor in MobileConnect Demographics part of the Contact to edit information in this Data View. It is broken and overwrites all connected Mobile Numbers with a change made to just one. However, the changes are possible with ",(0,r.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},"SSJS")," - including ContactID and MobileNumber changes and limited merging. It is the most significant selling point of this Data View."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"_MobileAddress")," Data View is available in Data Designer within MobileConnect Attribute Group. It allows you to add custom fields to it that you can later leverage in sends."),(0,r.kt)("li",{parentName:"ol"},"Whenever creating a MobileConnect Contact, be sure to provide the ",(0,r.kt)("inlineCode",{parentName:"li"},"_MobileNumber")," with the dialling code prefix (without the ",(0,r.kt)("inlineCode",{parentName:"li"},"+")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"00"),"). For example, Poland has a ",(0,r.kt)("inlineCode",{parentName:"li"},"+48")," dialling code and nine-digit numbers, so the correct format is 48123456789. Double-check whether ",(0,r.kt)("inlineCode",{parentName:"li"},"_CountryCode")," is an appropriate two-letter code (for example, ",(0,r.kt)("inlineCode",{parentName:"li"},"PL"),")."),(0,r.kt)("li",{parentName:"ol"},"The Contact may have multiple Mobile Numbers assigned, but it will receive communication only to the one with the highest ",(0,r.kt)("inlineCode",{parentName:"li"},"_Priority"),"."),(0,r.kt)("li",{parentName:"ol"},"Whenever you add a Mobile Number to a new Contact, for all other Contacts with this number, it gets lower ",(0,r.kt)("inlineCode",{parentName:"li"},"_Priority")," (SFMC assumes that it was transferred)."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"_ContactID")," makes this Data View useful for cross-channel applications. New Data Views (",(0,r.kt)("a",{parentName:"li",href:"#_smssubscriptionlog"},(0,r.kt)("inlineCode",{parentName:"a"},"_SMSSubscriptionLog"))," and ",(0,r.kt)("a",{parentName:"li",href:"#_smsmessagetracking"},(0,r.kt)("inlineCode",{parentName:"a"},"_SMSMessageTracking")),") have Subscriber Key information, but if the Mobile Number is shared, it won't provide the data.")),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"_mobilesubscription"},"_MobileSubscription"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_MobileSubscription")," Data View is officially unsupported by Salesforce. Marketing Cloud still fills it with data, but there is no guarantee of how long it will persist or whether it will be correct."),(0,r.kt)("p",null,"Worry not, there is a nearly identical Data View available and supported - ",(0,r.kt)("a",{parentName:"p",href:"#_smssubscriptionlog"},(0,r.kt)("inlineCode",{parentName:"a"},"_SMSSubscriptionLog")),"."),(0,r.kt)("p",null,"The new Data View contains nearly all the same fields (sans ",(0,r.kt)("inlineCode",{parentName:"p"},"_CreatedBy")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"_ModifiedBy"),") and even adds three more (",(0,r.kt)("inlineCode",{parentName:"p"},"LogDate"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"SubscriberKey")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MovileSubscriptionID"),")."),(0,r.kt)(l.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_SubscriptionDefinitionID"),(0,r.kt)("td",{parentName:"tr",align:null},"The unique ID of the subscription record"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_MobileNumber"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile number for the subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_OptOutStatusID"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted out of SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_OptOutMethodID"),(0,r.kt)("td",{parentName:"tr",align:null},"Method the subscriber used to opt-out of SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_OptOutDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted out of SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_OptInStatusID"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted-in to the SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_OptInMethodID"),(0,r.kt)("td",{parentName:"tr",align:null},"Method the subscriber used to opt-in to the SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_OptInDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted-in to the SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_Source"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscription source"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_CreatedDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date the subscription was created"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_CreatedBy"),(0,r.kt)("td",{parentName:"tr",align:null},"Person responsible for subscription creation"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_ModifiedDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date the subscription was modified"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"_ModifiedBy"),(0,r.kt)("td",{parentName:"tr",align:null},"Person responsible for the modification"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X"))))),(0,r.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_OptOutStatusID")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"NotOptedOut")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"OptedOut")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingNotOptedOut")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingOptedOut")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_OptOutMethodID")," possible values (more can come in the future):"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Application")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"MobileOriginated")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"15"),(0,r.kt)("td",{parentName:"tr",align:null},"Suppression")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"NULL"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber texted an Opt-Out Keyword")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_OptInStatusID")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"NotOptedIn")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"OptInPending")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"OptedIn")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingNotOptedIn")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingOptInPending")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingOptedIn")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_OptInMethodID")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"Unspecified")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"WebCollect")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"API")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"FTAF")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"MoveCopy")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Application")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"SalesForce")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"Segmentation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"GenericExtension")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"CustomObject")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"RMM")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile Opt-In")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"13"),(0,r.kt)("td",{parentName:"tr",align:null},"DeviceRegistration")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_Source")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"API")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Application")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"CustomObject")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"MobileOptIn")))),(0,r.kt)("hr",null)),(0,r.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n mobileSub._SubscriptionDefinitionID AS SubscriptionDefinitionID\n , mobileSub._MobileNumber AS MobileNumber\n , mobileSub._OptOutStatusID AS OptOutStatusID\n , mobileSub._OptOutMethodID AS OptOutMethodID\n , mobileSub._OptOutDate AS OptOutDate\n , mobileSub._OptInStatusID AS OptInStatusID\n , mobileSub._OptInMethodID AS OptInMethodID\n , mobileSub._OptInDate AS OptInDate\n , mobileSub._Source AS Source\n , mobileSub._CreatedDate AS CreatedDate\n , mobileSub._CreatedBy AS CreatedBy\n , mobileSub._ModifiedDate AS ModifiedDate\n , mobileSub._ModifiedBy AS ModifiedBy\nFROM _MobileSubscription AS mobileSub\n")))),(0,r.kt)("p",null,"You shouldn't be working with ",(0,r.kt)("inlineCode",{parentName:"p"},"_MobileSubscription")," Data View. Use ",(0,r.kt)("a",{parentName:"p",href:"#_smssubscriptionlog"},(0,r.kt)("inlineCode",{parentName:"a"},"_SMSSubscriptionLog"))," instead."),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"_subscribersms"},"_SubscriberSMS"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_SubscriberSMS")," Data View is a ",(0,r.kt)("strong",{parentName:"p"},"legacy table"),". It is neither supported nor updated, and you won't have records there. Marketing Cloud used it in pre-MobileConnect times, so I do not recommend using it for any projects."),(0,r.kt)(l.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MobileNumber"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile number for the subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Phone"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TransactionalOptIn"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted-in to Transactional SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TransactionalOptInDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted-in to Transactional SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TransactionalOptOutDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted out of Transactional SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MarketingOptIn"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted-in to Marketing SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MarketingOptInDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted-in to Marketing SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MarketingOptOutDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted out of Marketing SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SMSCarrierName"),(0,r.kt)("td",{parentName:"tr",align:null},"Name of the SMS Carrier used for delivery"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X"))))),(0,r.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n smsSub.SubscriberID\n , smsSub.SubscriberKey\n , smsSub.MobileNumber\n , smsSub.TransactionalOptIn\n , smsSub.TransactionalOptInDate\n , smsSub.TransactionalOptOutDate\n , smsSub.MarketingOptIn\n , smsSub.MarketingOptInDate\n , smsSub.MarketingOptOutDate\n , smsSub.SMSCarrierName\nFROM _SubscriberSMS AS smsSub\n")))),(0,r.kt)("p",null,"You shouldn't be working with ",(0,r.kt)("inlineCode",{parentName:"p"},"_SubscriberSMS")," Data View."),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"_smssubscriptionlog"},"_SMSSubscriptionLog"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"_SMSSubscriptionLog")," Data View stores complete information about subscription status for each Mobile Number. It replaced the unsupported ",(0,r.kt)("a",{parentName:"p",href:"#_mobilesubscription"},(0,r.kt)("inlineCode",{parentName:"a"},"_MobileSubscription"))," Data View."),(0,r.kt)(l.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"LogDate"),(0,r.kt)("td",{parentName:"tr",align:null},"The date the subscription is logged"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MobileSubscriptionID"),(0,r.kt)("td",{parentName:"tr",align:null},"The unique ID of the subscription record"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriptionDefinitionID"),(0,r.kt)("td",{parentName:"tr",align:null},"The unique Keyword ID (",(0,r.kt)("inlineCode",{parentName:"td"},"GUID()"),")"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MobileNumber"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile number for the subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Phone"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptOutStatusID"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted out of SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptOutMethodID"),(0,r.kt)("td",{parentName:"tr",align:null},"Method the subscriber used to opt-out of SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptOutDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted out of SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptInStatusID"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted-in to the SMS message"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptInMethodID"),(0,r.kt)("td",{parentName:"tr",align:null},"Method the subscriber used to opt-in to the SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptInDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date, the subscriber, opted-in to the SMS messages"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Source"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscription source"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CreatedDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date the subscription was created"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ModifiedDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date the subscription was modified"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}))))),(0,r.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"OptOutStatusID")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"NotOptedOut")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"OptedOut")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingNotOptedOut")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingOptedOut")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"OptOutMethodID")," possible values (more can come in the future):"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Application")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"MobileOriginated")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"15"),(0,r.kt)("td",{parentName:"tr",align:null},"Suppression")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"NULL"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber texted an Opt-Out Keyword")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"OptInStatusID")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"NotOptedIn")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"OptInPending")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"OptedIn")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingNotOptedIn")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingOptInPending")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"DeletingOptedIn")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"OptInMethodID")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"Unspecified")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"WebCollect")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"API")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"FTAF")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"MoveCopy")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Application")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"SalesForce")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"Segmentation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"GenericExtension")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"CustomObject")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"RMM")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile Opt-In")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"13"),(0,r.kt)("td",{parentName:"tr",align:null},"DeviceRegistration")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Source")," possible values:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"API")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Import")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Application")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"CustomObject")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"MobileOptIn")))),(0,r.kt)("hr",null)),(0,r.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n smsSubLog.LogDate\n , smsSubLog.SubscriberKey\n , smsSubLog.MobileSubscriptionID\n , smsSubLog.SubscriptionDefinitionID\n , smsSubLog.MobileNumber\n , smsSubLog.OptOutStatusID\n , smsSubLog.OptOutMethodID\n , smsSubLog.OptOutDate\n , smsSubLog.OptInStatusID\n , smsSubLog.OptInMethodID\n , smsSubLog.OptInDate\n , smsSubLog.Source\n , smsSubLog.CreatedDate\n , smsSubLog.ModifiedDate\nFROM _SMSSubscriptionLog AS smsSubLog\n")))),(0,r.kt)("p",null,"When working with ",(0,r.kt)("inlineCode",{parentName:"p"},"_SMSSubscriptionLog")," Data View:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"SFMC assigns subscription data to Mobile Number, not particular SubscriberKey or Contact. If you reassign the Phone Number to a different contact - Subscriptions will follow."),(0,r.kt)("li",{parentName:"ol"},"SubscriberKey will be correctly populated if there is one (and only one) Subscriber with the same Mobile Number. Otherwise, it will have either have a ",(0,r.kt)("inlineCode",{parentName:"li"},"No MobileAddress record has been found or this mobile number")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"Multiple subscriber keys found for this mobile number")," as a value."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"SubscriptionDefinitionID")," is a GUID, and there is no apparent connection to a specific Keyword. But there are two tricks.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,r.kt)("inlineCode",{parentName:"a"},"JOIN"))," ",(0,r.kt)("a",{parentName:"li",href:"#_smsmessagetracking"},(0,r.kt)("inlineCode",{parentName:"a"},"_SMSMessageTracking"))," Data View and use ",(0,r.kt)("inlineCode",{parentName:"li"},"KeywordID")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SharedKeyword")," columns to map the GUID to readable Keyword name. If you cannot find this information there, there is a second option:"),(0,r.kt)("li",{parentName:"ul"},"Go to MobileConnect Contacts, open your test contact and make sure he is subscribed to all your Keywords. Click the Attributes tab and scroll to MobileConnect Data. Click on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Carrier ID")," value. It will open a MobileConnect Subscriptions view - the above Data View in User Interface format. If you check the Keyword column, you will see your MobileConnect Short or Long Code along with Keyword in a readable format. Write it down and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Edit"),". Now you will see the same data, but with Keyword GUID. With those two values, you can use a SQL ",(0,r.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#conditional-values-with-case"},(0,r.kt)("inlineCode",{parentName:"a"},"CASE"))," statement to convert this Data View to a more readable format.")))),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"_smsmessagetracking"},"_SMSMessageTracking"),(0,r.kt)(l.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MobileMessageTrackingID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique Tracking ID - one for each SMS sent"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"EID"),(0,r.kt)("td",{parentName:"tr",align:null},"Enterprise ID number for the sender"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MID"),(0,r.kt)("td",{parentName:"tr",align:null},"Member ID (Business Unit ID)"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Mobile"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile number for the subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Phone"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MessageID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique Mobile Message ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"KeywordID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique identifier for the keyword (GUID)"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CodeID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique identifier for the SMS code (GUID)"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ConversationID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique identifier for the SMS conversation. Currently always null."),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CampaignID"),(0,r.kt)("td",{parentName:"tr",align:null},"The SMS campaign tied to the record"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Sent"),(0,r.kt)("td",{parentName:"tr",align:null},"If the message was sent"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Delivered"),(0,r.kt)("td",{parentName:"tr",align:null},"If the message was delivered"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Undelivered"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the message was delivered successfully or not"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Unsub"),(0,r.kt)("td",{parentName:"tr",align:null},"If the subscriber unsubscribed. Currently always null."),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptIn"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted-in to the SMS messages. Currently always null."),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"OptOut"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber has opted out of SMS messages. Currently always null."),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Outbound"),(0,r.kt)("td",{parentName:"tr",align:null},"If the message was outgoing"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Inbound"),(0,r.kt)("td",{parentName:"tr",align:null},"If the message was incoming"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CreateDateTime"),(0,r.kt)("td",{parentName:"tr",align:null},"The date and time the tracking record was created"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ModifiedDateTime"),(0,r.kt)("td",{parentName:"tr",align:null},"The date and CST time the tracking record was modified"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ActionDateTime"),(0,r.kt)("td",{parentName:"tr",align:null},"The actual date/time the Marketing Cloud received a delivery or non-delivery event. Timestamps for delivery receipts are not indicative of when a message was received on a handset. The SMS industry does not support read receipts, and the data returned in this view are based on when a delivery receipt is returned to our system."),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MessageText"),(0,r.kt)("td",{parentName:"tr",align:null},"The text of the message"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"IsTest"),(0,r.kt)("td",{parentName:"tr",align:null},"If the message was a test message"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MobileMessageRecurrenceID"),(0,r.kt)("td",{parentName:"tr",align:null},"The ID of the recurrence schedule for the message. Can be used for troubleshooting send issues."),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ResponseToMobileMessageTrackingID"),(0,r.kt)("td",{parentName:"tr",align:null},"The tracking ID of the response to the message"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"IsValid"),(0,r.kt)("td",{parentName:"tr",align:null},"Populates to 1 for inbound message and 0 for Outbound message"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"InvalidationCode"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalidation code for the message. Currently always null."),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SMSJobID"),(0,r.kt)("td",{parentName:"tr",align:null},"GUID with JobID matching value in ",(0,r.kt)("a",{parentName:"td",href:"/docs/config/sfmc-enhanced-send-log"},"SMS Send Log"),". Filled only for sends since Spring 2023."),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SMSBatchID"),(0,r.kt)("td",{parentName:"tr",align:null},"BatchID matching value in ",(0,r.kt)("a",{parentName:"td",href:"/docs/config/sfmc-enhanced-send-log"},"SMS Send Log"),". Filled only for sends since Spring 2023."),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SendID"),(0,r.kt)("td",{parentName:"tr",align:null},"The send ID number for the SMS send"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SendSplitID"),(0,r.kt)("td",{parentName:"tr",align:null},"If the message was split, the ID of the split"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SendSegmentID"),(0,r.kt)("td",{parentName:"tr",align:null},"The ID of the segment tied to the message"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SendJobID"),(0,r.kt)("td",{parentName:"tr",align:null},"The job ID for the SMS send"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SendGroupID"),(0,r.kt)("td",{parentName:"tr",align:null},"The group ID for the SMS send"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SendPersonID"),(0,r.kt)("td",{parentName:"tr",align:null},"The sendperson ID for the SMS send"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SMSStandardStatusCodeId"),(0,r.kt)("td",{parentName:"tr",align:null},"SFMC delivery status code"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Description"),(0,r.kt)("td",{parentName:"tr",align:null},"Detailed description of the status code"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Name"),(0,r.kt)("td",{parentName:"tr",align:null},"The SMS Message or Journey Activity name"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ShortCode"),(0,r.kt)("td",{parentName:"tr",align:null},"The short code or long code used to send your message"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SharedKeyword"),(0,r.kt)("td",{parentName:"tr",align:null},"The keyword used in your message"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Ordinal"),(0,r.kt)("td",{parentName:"tr",align:null},"Represents the parts in a multi-part message. Represented in ascending order starting at 0."),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"FromName"),(0,r.kt)("td",{parentName:"tr",align:null},"From Name that an individual message was deployed with. Maximum length: 11 characters"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JBDefinitionID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique identifier for the related journey"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JBActivityID"),(0,r.kt)("td",{parentName:"tr",align:null},"Unique identifier for the related journey activity"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null},"X"))))),(0,r.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n smsTracking.MobileMessageTrackingID\n , smsTracking.EID\n , smsTracking.MID\n , smsTracking.Mobile\n , smsTracking.MessageID\n , smsTracking.KeywordID\n , smsTracking.CodeID\n , smsTracking.ConversationID\n , smsTracking.CampaignID\n , smsTracking.Sent\n , smsTracking.Delivered\n , smsTracking.Undelivered\n , smsTracking.Unsub\n , smsTracking.OptIn\n , smsTracking.OptOut\n , smsTracking.Outbound\n , smsTracking.Inbound\n , smsTracking.CreateDateTime\n , smsTracking.ModifiedDateTime\n , smsTracking.ActionDateTime\n , smsTracking.MessageText\n , smsTracking.IsTest\n , smsTracking.MobileMessageRecurrenceID\n , smsTracking.ResponseToMobileMessageTrackingID\n , smsTracking.IsValid\n , smsTracking.InvalidationCode\n , smsTracking.SMSJobID\n , smsTracking.SMSBatchID\n , smsTracking.SendID\n , smsTracking.SendSplitID\n , smsTracking.SendSegmentID\n , smsTracking.SendJobID\n , smsTracking.SendGroupID\n , smsTracking.SendPersonID\n , smsTracking.SubscriberID\n , smsTracking.SubscriberKey\n , smsTracking.SMSStandardStatusCodeId\n , smsTracking.Description\n , smsTracking.Name\n , smsTracking.ShortCode\n , smsTracking.SharedKeyword\n , smsTracking.Ordinal\n , smsTracking.FromName\n , smsTracking.JBDefinitionID\n , smsTracking.JBActivityID\nFROM _SMSMessageTracking AS smsTracking\n")))),(0,r.kt)("p",null,"When working with ",(0,r.kt)("inlineCode",{parentName:"p"},"_SMSMessageTracking")," Data View:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"If you send one SMS to multiple Subscribers, you will have multiple rows of data with different ",(0,r.kt)("inlineCode",{parentName:"li"},"MobileMessageTrackingID")," but the same ",(0,r.kt)("inlineCode",{parentName:"li"},"MessageID"),". Apart from ",(0,r.kt)("inlineCode",{parentName:"li"},"MessageID")," you may also use the ",(0,r.kt)("inlineCode",{parentName:"li"},"Name")," field that contains the asset name from MobileConnect."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"KeywordID")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"CodeID")," are GUIDs, but the same table also has the readable versions of those columns - ",(0,r.kt)("inlineCode",{parentName:"li"},"ShortCode")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SharedKeyword"),". ",(0,r.kt)("inlineCode",{parentName:"li"},"ShortCode"),", despite the name, also displays Long Codes."),(0,r.kt)("li",{parentName:"ol"},"The fields marked above as boolean (like ",(0,r.kt)("inlineCode",{parentName:"li"},"Sent"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Delivered"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"IsTest"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"Outbound"),") have the value in the form of a number: ",(0,r.kt)("inlineCode",{parentName:"li"},"0")," = false, ",(0,r.kt)("inlineCode",{parentName:"li"},"1")," = true. Some might also be ",(0,r.kt)("inlineCode",{parentName:"li"},"null")," - for example, if a message was outbound, ",(0,r.kt)("inlineCode",{parentName:"li"},"Outbound")," will have the value of ",(0,r.kt)("inlineCode",{parentName:"li"},"1"),", whereas ",(0,r.kt)("inlineCode",{parentName:"li"},"Inbound")," will be ",(0,r.kt)("inlineCode",{parentName:"li"},"null"),"."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"MessageText")," will not only show you the text you sent in your SMS - it will also display it after personalisation is applied. On the one hand, it is great for debugging, as it allows you to check the final content the user received. On the other hand, you won't be able to assess personalisations used across your messaging."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"ResponseToMobileMessageTrackingID")," is an excellent way to check customer response. You can make ",(0,r.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#self-join"},"Self-Join")," between inbound ",(0,r.kt)("inlineCode",{parentName:"li"},"ResponseToMobileMessageTrackingID")," and outbound ",(0,r.kt)("inlineCode",{parentName:"li"},"MobileMessageTrackingID")," to output response data in the same line."),(0,r.kt)("li",{parentName:"ol"},"Some fields in this Data View are filled only under specific conditions:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CampaignID")," is populated only when an SMS is sent to Data Extension as Audience or send type is Send to Data Extension. SMS must be connected to a Campaign for the field to be populated."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SendID"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"SendJobID")," are populated only for SMS messages sent via Automation Studio's Send SMS Activity or when an SMS is sent to Data Extension as Audience."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SendSplitID"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"SendSegmentID"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"SendGroupID"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"SendPersonID")," are populated only when SMS is sent to Data Extension as Audience."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ConversationID")," is populated only when a conversation is created with a MO user using AMPScript ",(0,r.kt)("a",{parentName:"li",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/CreateSmsConversation.htm"},(0,r.kt)("inlineCode",{parentName:"a"},"CreateSMSConversation")),"."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"Unsub"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"OptIn"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"OptOut")," are currently not populated at all. You should pull that data from ",(0,r.kt)("a",{parentName:"li",href:"#_smssubscriptionlog"},(0,r.kt)("inlineCode",{parentName:"a"},"_SMSSubscriptionLog")),"."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"JBDefinitionID")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"JBActivityID")," let you cleanly match SMS data to ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_journey"},(0,r.kt)("inlineCode",{parentName:"a"},"Journey"))," and ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_journeyactivity"},(0,r.kt)("inlineCode",{parentName:"a"},"_JourneyActivity"))," Data Views using ",(0,r.kt)("inlineCode",{parentName:"li"},"VersionID")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"ActivityID")," respectively. However, it won't work for old (created before October 2020) SMS Activities - for those you can make a ",(0,r.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,r.kt)("inlineCode",{parentName:"a"},"JOIN"))," using ",(0,r.kt)("inlineCode",{parentName:"li"},"Name")," field: ",(0,r.kt)("inlineCode",{parentName:"li"},"ON smsTracking.Name = journeyActivity.ActivityName"),"."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"SMSStandardStatusCodeId")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"Description")," are great for understanding your SMS send's current status."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"SMSJobID")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SMSBatchID")," are the only way to connect _SMSMessageTracking Data View to ",(0,r.kt)("a",{parentName:"li",href:"/docs/config/sfmc-enhanced-send-log"},"SMS Send Log"),". You can ",(0,r.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,r.kt)("inlineCode",{parentName:"a"},"JOIN"))," ",(0,r.kt)("inlineCode",{parentName:"li"},"ON smsTracking.SubscriberID = sendLog.SubID AND smsTracking.SMSJobID = sendLog.SMSJobID AND smsTracking.SMSBatchID = sendLog.BatchID"),".")),(0,r.kt)("h4",{id:"sms-status-codes"},"SMS Status Codes"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Code"),(0,r.kt)("th",{parentName:"tr",align:null},"Status"),(0,r.kt)("th",{parentName:"tr",align:null},"Definition"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1000"),(0,r.kt)("td",{parentName:"tr",align:null},"QueuedToSfmcSendService"),(0,r.kt)("td",{parentName:"tr",align:null},"Message queued to internal send service.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1500"),(0,r.kt)("td",{parentName:"tr",align:null},"QueueFailureToSfmcSendService"),(0,r.kt)("td",{parentName:"tr",align:null},"Message failed to queue to internal send service. Retry your send.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1501"),(0,r.kt)("td",{parentName:"tr",align:null},"ValidationError"),(0,r.kt)("td",{parentName:"tr",align:null},"Internal validation error. Retry your send.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2000"),(0,r.kt)("td",{parentName:"tr",align:null},"DeliveredToAggregator"),(0,r.kt)("td",{parentName:"tr",align:null},"Message delivered to the aggregator. The status will be updated when the delivery confirmation comes from the carrier or mobile device. For shared codes, this is the final status.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2500"),(0,r.kt)("td",{parentName:"tr",align:null},"FailedToAggregator"),(0,r.kt)("td",{parentName:"tr",align:null},"Message not delivered to the aggregator. Retry your send.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2501"),(0,r.kt)("td",{parentName:"tr",align:null},"UnknownToAggregator"),(0,r.kt)("td",{parentName:"tr",align:null},"Unknown aggregator error.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2600"),(0,r.kt)("td",{parentName:"tr",align:null},"ThrottledToAggregator"),(0,r.kt)("td",{parentName:"tr",align:null},"Message not accepted by aggregator due to capacity issues. Send will be retried automatically.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3000"),(0,r.kt)("td",{parentName:"tr",align:null},"Enroute"),(0,r.kt)("td",{parentName:"tr",align:null},"Message is en route to carrier. Waiting on carrier confirmation.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3001"),(0,r.kt)("td",{parentName:"tr",align:null},"SentToCarrier"),(0,r.kt)("td",{parentName:"tr",align:null},"Message sent to carrier. Waiting to be accepted by carrier.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3002"),(0,r.kt)("td",{parentName:"tr",align:null},"AcceptedByCarrier"),(0,r.kt)("td",{parentName:"tr",align:null},"Message accepted by carrier. Waiting for delivery confirmation.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3400"),(0,r.kt)("td",{parentName:"tr",align:null},"Unknown"),(0,r.kt)("td",{parentName:"tr",align:null},"Unknown error")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4000"),(0,r.kt)("td",{parentName:"tr",align:null},"Delivered"),(0,r.kt)("td",{parentName:"tr",align:null},"Message delivered to mobile device.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4500"),(0,r.kt)("td",{parentName:"tr",align:null},"Undeliverable"),(0,r.kt)("td",{parentName:"tr",align:null},"Message not delivered to mobile device.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4501"),(0,r.kt)("td",{parentName:"tr",align:null},"Expired"),(0,r.kt)("td",{parentName:"tr",align:null},"Message expired. Message exhausted the carrier retry process. Mobile device may be out of carrier range.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4502"),(0,r.kt)("td",{parentName:"tr",align:null},"Deleted"),(0,r.kt)("td",{parentName:"tr",align:null},"Message deleted by the carrier.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4503"),(0,r.kt)("td",{parentName:"tr",align:null},"Rejected"),(0,r.kt)("td",{parentName:"tr",align:null},"Message rejected. Carrier may have detected a loop or assumed that message is spam. This status can indicate an administrative or financial problem between the operator and the end-users.")))),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"_undeliverablesms"},"_UndeliverableSMS"),(0,r.kt)("p",null,"Stores information about failed message deliveries from MobileConnect."),(0,r.kt)("p",null,"There might be multiple reasons for the SMS to be undelivered, for example:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The mobile device is powered off."),(0,r.kt)("li",{parentName:"ul"},"The user is out of range of cellular networks"),(0,r.kt)("li",{parentName:"ul"},"The number is for a landline")),(0,r.kt)(l.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MobileNumber"),(0,r.kt)("td",{parentName:"tr",align:null},"Mobile number for the subscriber"),(0,r.kt)("td",{parentName:"tr",align:null},"Text"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Undeliverable"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the subscriber is eligible for future deliveries"),(0,r.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BounceCount"),(0,r.kt)("td",{parentName:"tr",align:null},"Number of times message was not delivered"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"FirstBounceDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date of the first unsuccessful delivery"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"HoldDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date when the subscriber can be used in sends again"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null},"X"))))),(0,r.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n undeliverableSMS.MobileNumber\n , undeliverableSMS.Undeliverable\n , undeliverableSMS.BounceCount\n , undeliverableSMS.FirstBounceDate\n , undeliverableSMS.HoldDate\nFROM _UndeliverableSMS AS undeliverableSMS\n")))),(0,r.kt)("p",null,"When working with ",(0,r.kt)("inlineCode",{parentName:"p"},"_JourneyActivity")," Data View:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"If ",(0,r.kt)("inlineCode",{parentName:"li"},"Undeliverable")," is ",(0,r.kt)("inlineCode",{parentName:"li"},"TRUE"),", check ",(0,r.kt)("inlineCode",{parentName:"li"},"HoldDate")," to know when the number will be reachable again."),(0,r.kt)("li",{parentName:"ol"},"Monitor this data view and blocklist numbers with significant ",(0,r.kt)("inlineCode",{parentName:"li"},"BounceCount")," values to clean up your database, save money and protect from spamming potential future owners of the recycled phone number."),(0,r.kt)("li",{parentName:"ol"},"It's impossible to know the actual delivery status for SMS sends - Marketing Cloud reports only whether the SMS carrier accepted the message. It does not know what happens with it after the carrier takes over. However, most of the SMS messages accepted by carriers are delivered.")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/612d51b5.e39fe4d5.js b/assets/js/612d51b5.e39fe4d5.js new file mode 100644 index 000000000..d264b4f9e --- /dev/null +++ b/assets/js/612d51b5.e39fe4d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3108],{6178:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>h,default:()=>u,frontMatter:()=>c,metadata:()=>a,toc:()=>x});var r=t(5893),n=t(1151),d=t(3992),i=t(425),l=t(1872);const c={id:"sfmc-mobile-connect-data-views",title:"SFMC Mobile Connect Data Views",sidebar_label:"Mobile Connect Data Views",description:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-mobile-connect-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","SMS"]},h=void 0,a={id:"config/sfmc-mobile-connect-data-views",title:"SFMC Mobile Connect Data Views",description:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",source:"@site/docs/config/sfmc-mobile-connect-data-views.mdx",sourceDirName:"config",slug:"/config/sfmc-mobile-connect-data-views",permalink:"/docs/config/sfmc-mobile-connect-data-views",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-mobile-connect-data-views.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Analytics",permalink:"/docs/tags/analytics"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"SMS",permalink:"/docs/tags/sms"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1680272562,formattedLastUpdatedAt:"Mar 31, 2023",frontMatter:{id:"sfmc-mobile-connect-data-views",title:"SFMC Mobile Connect Data Views",sidebar_label:"Mobile Connect Data Views",description:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-mobile-connect-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","SMS"]},sidebar:"docs",previous:{title:"System Data Views",permalink:"/docs/config/sfmc-system-data-views"},next:{title:"MCC Integration Patterns",permalink:"/docs/config/sfmc-mcc-integration-patterns"}},o={},x=[{value:"System Data Views",id:"system-data-views",level:2},{value:"MobileConnect Data Views",id:"mobileconnect-data-views",level:2},{value:"_MobileAddress",id:"_mobileaddress",level:3},{value:"_MobileSubscription",id:"_mobilesubscription",level:3},{value:"_SubscriberSMS",id:"_subscribersms",level:3},{value:"_SMSSubscriptionLog",id:"_smssubscriptionlog",level:3},{value:"_SMSMessageTracking",id:"_smsmessagetracking",level:3},{value:"SMS Status Codes",id:"sms-status-codes",level:4},{value:"_UndeliverableSMS",id:"_undeliverablesms",level:3}];function j(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l.m,{content:"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await."}),"\n",(0,r.jsx)(s.h2,{id:"system-data-views",children:"System Data Views"}),"\n",(0,r.jsxs)(s.p,{children:["Learn about SFMC ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#data-views-basics",children:"System Data Views Basics"})," and specific backend tables covering ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#subscriber-data-views",children:"Email Studio"}),", ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#journey-data-views",children:"Journey Builder"})," & ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#automation-data-views",children:"Automation Studio"})," data ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views",children:"here"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"mobileconnect-data-views",children:"MobileConnect Data Views"}),"\n",(0,r.jsx)(s.p,{children:"MobileConnect Data Views are unique, as most of them are no longer supported by Salesforce. But some still works. All those data views show data limited to a specific Business Unit."}),"\n",(0,r.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,r.jsx)(s.p,{children:"Most of the MobileConnect data is assigned to Mobile Number, not Contact. It means that it might be shared by a few contacts (if multiple have the same mobile number set) or migrate between them (if the mobile number gets reassigned)."}),(0,r.jsx)(s.p,{children:"It shouldn't be a big problem in B2C environments, as most people will have their mobile number and keep it long. However, remember that unused numbers might be recycled after a few years by telecom and go back to the market and given to a new user."}),(0,r.jsx)(s.p,{children:"Mobile number recycling is much more present in the B2B scenario, where there is a bigger chance for shared mobile numbers and much faster recycling of the numbers. Many companies reuse the phone number of the employees that left."}),(0,r.jsx)(s.p,{children:"When working with Mobile Number history of engagement and subscription, take this into consideration."})]}),"\n",(0,r.jsx)(s.h3,{id:"_mobileaddress",children:"_MobileAddress"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_MobileAddress"})," Data View is officially not supported by Salesforce. But it's too good not to use it. And there is no replacement for it. Why? Because Marketing Cloud still uses this Data View as a backend data source for the MobileConnect Demographics Data."]}),"\n",(0,r.jsxs)(d.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,r.jsx)(i.Z,{value:"fields",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Data Type"}),(0,r.jsx)(s.th,{children:"Nullable"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_MobileID"}),(0,r.jsx)(s.td,{children:"MobileConnect Contact ID"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_ContactID"}),(0,r.jsx)(s.td,{children:"Global Contact ID (not Contact Key)"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_MobileNumber"}),(0,r.jsx)(s.td,{children:"Mobile number for the subscriber"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_Status"}),(0,r.jsx)(s.td,{children:"Status of the Contact"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_Source"}),(0,r.jsx)(s.td,{children:"Source of the Contact"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_SourceObjectId"}),(0,r.jsxs)(s.td,{children:["ID of the object if ",(0,r.jsx)(s.code,{children:"_Source"})," = 10"]}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_Priority"}),(0,r.jsxs)(s.td,{children:["In case the contact uses multiple mobile numbers, the Priority field's value establishes the order in which to use those mobile numbers. ",(0,r.jsx)(s.code,{children:"_Priority"})," = 1 is first in order"]}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_Channel"}),(0,r.jsx)(s.td,{children:"Communication channel. Used to be Mobile, now not in use"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_CarrierID"}),(0,r.jsx)(s.td,{children:"Numeric code for the mobile carrier used by the contact"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_CountryCode"}),(0,r.jsx)(s.td,{children:"Two letter country code"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_CreatedDate"}),(0,r.jsx)(s.td,{children:"Date the subscription was created"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_CreatedBy"}),(0,r.jsx)(s.td,{children:"Person responsible for contact creation"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_ModifiedBy"}),(0,r.jsx)(s.td,{children:"Person responsible for contact modification"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_City"}),(0,r.jsx)(s.td,{children:"Contact's City"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_State"}),(0,r.jsx)(s.td,{children:"Contact's State"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_ZipCode"}),(0,r.jsx)(s.td,{children:"Contact's Zip Code"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_FirstName"}),(0,r.jsx)(s.td,{children:"Contact's First Name"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_LastName"}),(0,r.jsx)(s.td,{children:"Contact's Last Name"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_UTCOffset"}),(0,r.jsx)(s.td,{children:"The number of hours from which the user's time zone deviates from UTC. Defaults to 0"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_IsHonorDST"}),(0,r.jsx)(s.td,{children:"Whether the user's time zone observers Daylight Savings Time or not. Defaults to false"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]})]})]})}),(0,r.jsxs)(i.Z,{value:"values",children:[(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_Status"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"Active"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"Inactive"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3"}),(0,r.jsx)(s.td,{children:"Deleted"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_Source"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"Unspecified"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"Webcollect"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"API"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3"}),(0,r.jsx)(s.td,{children:"FTAF"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"5"}),(0,r.jsx)(s.td,{children:"MoveCopy"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Manual"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"7"}),(0,r.jsx)(s.td,{children:"SalesForce"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"8"}),(0,r.jsx)(s.td,{children:"Segmentation"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"9"}),(0,r.jsx)(s.td,{children:"GenericExtension"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"CustomObject"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"FacebookAPI"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"SmartCapture"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"13"}),(0,r.jsx)(s.td,{children:"MobileOptIn"})]})]})]}),(0,r.jsx)(s.hr,{})]}),(0,r.jsx)(i.Z,{value:"sql",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",children:"SELECT\n mobileAddress._MobileID AS MobileID\n , mobileAddress._ContactID AS ContactID\n , mobileAddress._MobileNumber AS MobileNumber\n , mobileAddress._Status AS Status\n , mobileAddress._Source AS Source\n , mobileAddress._SourceObjectId AS SourceObjectId\n , mobileAddress._Priority AS Priority\n , mobileAddress._Channel AS Channel\n , mobileAddress._CarrierID AS CarrierID\n , mobileAddress._CountryCode AS CountryCode\n , mobileAddress._CreatedDate AS CreatedDate\n , mobileAddress._CreatedBy AS CreatedBy\n , mobileAddress._ModifiedBy AS ModifiedBy\n , mobileAddress._City AS City\n , mobileAddress._State AS State\n , mobileAddress._ZipCode AS ZipCode\n , mobileAddress._FirstName AS FirstName\n , mobileAddress._LastName AS LastName\n , mobileAddress._UTCOffset AS UTCOffset\n , mobileAddress._IsHonorDST AS IsHonorDST\nFROM _MobileAddress AS mobileAddress\n"})})})]}),"\n",(0,r.jsxs)(s.p,{children:["When working with ",(0,r.jsx)(s.code,{children:"_MobileAddress"})," Data View:"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsx)(s.li,{children:"There is no guarantee of how long it will work and how long the data will be correct. Be sure you are checking it periodically or - even better - have validation in your code."}),"\n",(0,r.jsxs)(s.li,{children:["The rule of thumb when working with MobileConnect is to use the official, supported solutions. Only when they cannot deliver - check whether ",(0,r.jsx)(s.code,{children:"_MobileAddress"})," can help."]}),"\n",(0,r.jsxs)(s.li,{children:["Do not use the User Interface editor in MobileConnect Demographics part of the Contact to edit information in this Data View. It is broken and overwrites all connected Mobile Numbers with a change made to just one. However, the changes are possible with ",(0,r.jsx)(s.a,{href:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change",children:"SSJS"})," - including ContactID and MobileNumber changes and limited merging. It is the most significant selling point of this Data View."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"_MobileAddress"})," Data View is available in Data Designer within MobileConnect Attribute Group. It allows you to add custom fields to it that you can later leverage in sends."]}),"\n",(0,r.jsxs)(s.li,{children:["Whenever creating a MobileConnect Contact, be sure to provide the ",(0,r.jsx)(s.code,{children:"_MobileNumber"})," with the dialling code prefix (without the ",(0,r.jsx)(s.code,{children:"+"})," or ",(0,r.jsx)(s.code,{children:"00"}),"). For example, Poland has a ",(0,r.jsx)(s.code,{children:"+48"})," dialling code and nine-digit numbers, so the correct format is 48123456789. Double-check whether ",(0,r.jsx)(s.code,{children:"_CountryCode"})," is an appropriate two-letter code (for example, ",(0,r.jsx)(s.code,{children:"PL"}),")."]}),"\n",(0,r.jsxs)(s.li,{children:["The Contact may have multiple Mobile Numbers assigned, but it will receive communication only to the one with the highest ",(0,r.jsx)(s.code,{children:"_Priority"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["Whenever you add a Mobile Number to a new Contact, for all other Contacts with this number, it gets lower ",(0,r.jsx)(s.code,{children:"_Priority"})," (SFMC assumes that it was transferred)."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"_ContactID"})," makes this Data View useful for cross-channel applications. New Data Views (",(0,r.jsx)(s.a,{href:"#_smssubscriptionlog",children:(0,r.jsx)(s.code,{children:"_SMSSubscriptionLog"})})," and ",(0,r.jsx)(s.a,{href:"#_smsmessagetracking",children:(0,r.jsx)(s.code,{children:"_SMSMessageTracking"})}),") have Subscriber Key information, but if the Mobile Number is shared, it won't provide the data."]}),"\n"]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsx)(s.h3,{id:"_mobilesubscription",children:"_MobileSubscription"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_MobileSubscription"})," Data View is officially unsupported by Salesforce. Marketing Cloud still fills it with data, but there is no guarantee of how long it will persist or whether it will be correct."]}),"\n",(0,r.jsxs)(s.p,{children:["Worry not, there is a nearly identical Data View available and supported - ",(0,r.jsx)(s.a,{href:"#_smssubscriptionlog",children:(0,r.jsx)(s.code,{children:"_SMSSubscriptionLog"})}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["The new Data View contains nearly all the same fields (sans ",(0,r.jsx)(s.code,{children:"_CreatedBy"})," and ",(0,r.jsx)(s.code,{children:"_ModifiedBy"}),") and even adds three more (",(0,r.jsx)(s.code,{children:"LogDate"}),", ",(0,r.jsx)(s.code,{children:"SubscriberKey"})," and ",(0,r.jsx)(s.code,{children:"MovileSubscriptionID"}),")."]}),"\n",(0,r.jsxs)(d.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,r.jsx)(i.Z,{value:"fields",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Data Type"}),(0,r.jsx)(s.th,{children:"Nullable"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_SubscriptionDefinitionID"}),(0,r.jsx)(s.td,{children:"The unique ID of the subscription record"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_MobileNumber"}),(0,r.jsx)(s.td,{children:"Mobile number for the subscriber"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_OptOutStatusID"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted out of SMS messages"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_OptOutMethodID"}),(0,r.jsx)(s.td,{children:"Method the subscriber used to opt-out of SMS messages"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_OptOutDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted out of SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_OptInStatusID"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted-in to the SMS messages"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_OptInMethodID"}),(0,r.jsx)(s.td,{children:"Method the subscriber used to opt-in to the SMS messages"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_OptInDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted-in to the SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_Source"}),(0,r.jsx)(s.td,{children:"The subscription source"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_CreatedDate"}),(0,r.jsx)(s.td,{children:"Date the subscription was created"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_CreatedBy"}),(0,r.jsx)(s.td,{children:"Person responsible for subscription creation"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_ModifiedDate"}),(0,r.jsx)(s.td,{children:"Date the subscription was modified"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"_ModifiedBy"}),(0,r.jsx)(s.td,{children:"Person responsible for the modification"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]})]})]})}),(0,r.jsxs)(i.Z,{value:"values",children:[(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_OptOutStatusID"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"NotOptedOut"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"OptedOut"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"DeletingNotOptedOut"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"DeletingOptedOut"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_OptOutMethodID"})," possible values (more can come in the future):"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Application"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"14"}),(0,r.jsx)(s.td,{children:"MobileOriginated"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"15"}),(0,r.jsx)(s.td,{children:"Suppression"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"NULL"}),(0,r.jsx)(s.td,{children:"Subscriber texted an Opt-Out Keyword"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_OptInStatusID"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"NotOptedIn"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"OptInPending"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"OptedIn"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"DeletingNotOptedIn"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"DeletingOptInPending"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"DeletingOptedIn"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_OptInMethodID"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"Unspecified"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"WebCollect"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"API"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3"}),(0,r.jsx)(s.td,{children:"FTAF"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"5"}),(0,r.jsx)(s.td,{children:"MoveCopy"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Application"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"7"}),(0,r.jsx)(s.td,{children:"SalesForce"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"8"}),(0,r.jsx)(s.td,{children:"Segmentation"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"9"}),(0,r.jsx)(s.td,{children:"GenericExtension"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"CustomObject"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"RMM"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"Mobile Opt-In"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"13"}),(0,r.jsx)(s.td,{children:"DeviceRegistration"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_Source"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"API"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Application"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"CustomObject"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"MobileOptIn"})]})]})]}),(0,r.jsx)(s.hr,{})]}),(0,r.jsx)(i.Z,{value:"sql",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",children:"SELECT\n mobileSub._SubscriptionDefinitionID AS SubscriptionDefinitionID\n , mobileSub._MobileNumber AS MobileNumber\n , mobileSub._OptOutStatusID AS OptOutStatusID\n , mobileSub._OptOutMethodID AS OptOutMethodID\n , mobileSub._OptOutDate AS OptOutDate\n , mobileSub._OptInStatusID AS OptInStatusID\n , mobileSub._OptInMethodID AS OptInMethodID\n , mobileSub._OptInDate AS OptInDate\n , mobileSub._Source AS Source\n , mobileSub._CreatedDate AS CreatedDate\n , mobileSub._CreatedBy AS CreatedBy\n , mobileSub._ModifiedDate AS ModifiedDate\n , mobileSub._ModifiedBy AS ModifiedBy\nFROM _MobileSubscription AS mobileSub\n"})})})]}),"\n",(0,r.jsxs)(s.p,{children:["You shouldn't be working with ",(0,r.jsx)(s.code,{children:"_MobileSubscription"})," Data View. Use ",(0,r.jsx)(s.a,{href:"#_smssubscriptionlog",children:(0,r.jsx)(s.code,{children:"_SMSSubscriptionLog"})})," instead."]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsx)(s.h3,{id:"_subscribersms",children:"_SubscriberSMS"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_SubscriberSMS"})," Data View is a ",(0,r.jsx)(s.strong,{children:"legacy table"}),". It is neither supported nor updated, and you won't have records there. Marketing Cloud used it in pre-MobileConnect times, so I do not recommend using it for any projects."]}),"\n",(0,r.jsxs)(d.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,r.jsx)(i.Z,{value:"fields",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Data Type"}),(0,r.jsx)(s.th,{children:"Nullable"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SubscriberID"}),(0,r.jsx)(s.td,{children:"The subscriber ID for the affected subscriber"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SubscriberKey"}),(0,r.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MobileNumber"}),(0,r.jsx)(s.td,{children:"Mobile number for the subscriber"}),(0,r.jsx)(s.td,{children:"Phone"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"TransactionalOptIn"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted-in to Transactional SMS messages"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"TransactionalOptInDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted-in to Transactional SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"TransactionalOptOutDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted out of Transactional SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MarketingOptIn"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted-in to Marketing SMS messages"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MarketingOptInDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted-in to Marketing SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MarketingOptOutDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted out of Marketing SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SMSCarrierName"}),(0,r.jsx)(s.td,{children:"Name of the SMS Carrier used for delivery"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]})]})]})}),(0,r.jsx)(i.Z,{value:"sql",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",children:"SELECT\n smsSub.SubscriberID\n , smsSub.SubscriberKey\n , smsSub.MobileNumber\n , smsSub.TransactionalOptIn\n , smsSub.TransactionalOptInDate\n , smsSub.TransactionalOptOutDate\n , smsSub.MarketingOptIn\n , smsSub.MarketingOptInDate\n , smsSub.MarketingOptOutDate\n , smsSub.SMSCarrierName\nFROM _SubscriberSMS AS smsSub\n"})})})]}),"\n",(0,r.jsxs)(s.p,{children:["You shouldn't be working with ",(0,r.jsx)(s.code,{children:"_SubscriberSMS"})," Data View."]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsx)(s.h3,{id:"_smssubscriptionlog",children:"_SMSSubscriptionLog"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"_SMSSubscriptionLog"})," Data View stores complete information about subscription status for each Mobile Number. It replaced the unsupported ",(0,r.jsx)(s.a,{href:"#_mobilesubscription",children:(0,r.jsx)(s.code,{children:"_MobileSubscription"})})," Data View."]}),"\n",(0,r.jsxs)(d.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,r.jsx)(i.Z,{value:"fields",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Data Type"}),(0,r.jsx)(s.th,{children:"Nullable"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"LogDate"}),(0,r.jsx)(s.td,{children:"The date the subscription is logged"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SubscriberKey"}),(0,r.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MobileSubscriptionID"}),(0,r.jsx)(s.td,{children:"The unique ID of the subscription record"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SubscriptionDefinitionID"}),(0,r.jsxs)(s.td,{children:["The unique Keyword ID (",(0,r.jsx)(s.code,{children:"GUID()"}),")"]}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MobileNumber"}),(0,r.jsx)(s.td,{children:"Mobile number for the subscriber"}),(0,r.jsx)(s.td,{children:"Phone"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptOutStatusID"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted out of SMS messages"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptOutMethodID"}),(0,r.jsx)(s.td,{children:"Method the subscriber used to opt-out of SMS messages"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptOutDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted out of SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptInStatusID"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted-in to the SMS message"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptInMethodID"}),(0,r.jsx)(s.td,{children:"Method the subscriber used to opt-in to the SMS messages"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptInDate"}),(0,r.jsx)(s.td,{children:"Date, the subscriber, opted-in to the SMS messages"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Source"}),(0,r.jsx)(s.td,{children:"The subscription source"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"CreatedDate"}),(0,r.jsx)(s.td,{children:"Date the subscription was created"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ModifiedDate"}),(0,r.jsx)(s.td,{children:"Date the subscription was modified"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]})]})]})}),(0,r.jsxs)(i.Z,{value:"values",children:[(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"OptOutStatusID"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"NotOptedOut"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"OptedOut"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"DeletingNotOptedOut"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"DeletingOptedOut"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"OptOutMethodID"})," possible values (more can come in the future):"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Application"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"14"}),(0,r.jsx)(s.td,{children:"MobileOriginated"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"15"}),(0,r.jsx)(s.td,{children:"Suppression"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"NULL"}),(0,r.jsx)(s.td,{children:"Subscriber texted an Opt-Out Keyword"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"OptInStatusID"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"NotOptedIn"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"OptInPending"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"OptedIn"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"DeletingNotOptedIn"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"DeletingOptInPending"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"DeletingOptedIn"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"OptInMethodID"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"Unspecified"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1"}),(0,r.jsx)(s.td,{children:"WebCollect"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"API"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3"}),(0,r.jsx)(s.td,{children:"FTAF"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"5"}),(0,r.jsx)(s.td,{children:"MoveCopy"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Application"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"7"}),(0,r.jsx)(s.td,{children:"SalesForce"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"8"}),(0,r.jsx)(s.td,{children:"Segmentation"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"9"}),(0,r.jsx)(s.td,{children:"GenericExtension"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"CustomObject"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"11"}),(0,r.jsx)(s.td,{children:"RMM"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"Mobile Opt-In"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"13"}),(0,r.jsx)(s.td,{children:"DeviceRegistration"})]})]})]}),(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"Source"})," possible values:"]}),(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Value"}),(0,r.jsx)(s.th,{children:"Meaning"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2"}),(0,r.jsx)(s.td,{children:"API"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4"}),(0,r.jsx)(s.td,{children:"Import"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6"}),(0,r.jsx)(s.td,{children:"Application"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"CustomObject"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"12"}),(0,r.jsx)(s.td,{children:"MobileOptIn"})]})]})]}),(0,r.jsx)(s.hr,{})]}),(0,r.jsx)(i.Z,{value:"sql",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",children:"SELECT\n smsSubLog.LogDate\n , smsSubLog.SubscriberKey\n , smsSubLog.MobileSubscriptionID\n , smsSubLog.SubscriptionDefinitionID\n , smsSubLog.MobileNumber\n , smsSubLog.OptOutStatusID\n , smsSubLog.OptOutMethodID\n , smsSubLog.OptOutDate\n , smsSubLog.OptInStatusID\n , smsSubLog.OptInMethodID\n , smsSubLog.OptInDate\n , smsSubLog.Source\n , smsSubLog.CreatedDate\n , smsSubLog.ModifiedDate\nFROM _SMSSubscriptionLog AS smsSubLog\n"})})})]}),"\n",(0,r.jsxs)(s.p,{children:["When working with ",(0,r.jsx)(s.code,{children:"_SMSSubscriptionLog"})," Data View:"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsx)(s.li,{children:"SFMC assigns subscription data to Mobile Number, not particular SubscriberKey or Contact. If you reassign the Phone Number to a different contact - Subscriptions will follow."}),"\n",(0,r.jsxs)(s.li,{children:["SubscriberKey will be correctly populated if there is one (and only one) Subscriber with the same Mobile Number. Otherwise, it will have either have a ",(0,r.jsx)(s.code,{children:"No MobileAddress record has been found or this mobile number"})," or ",(0,r.jsx)(s.code,{children:"Multiple subscriber keys found for this mobile number"})," as a value."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"SubscriptionDefinitionID"})," is a GUID, and there is no apparent connection to a specific Keyword. But there are two tricks.","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,r.jsx)(s.code,{children:"JOIN"})})," ",(0,r.jsx)(s.a,{href:"#_smsmessagetracking",children:(0,r.jsx)(s.code,{children:"_SMSMessageTracking"})})," Data View and use ",(0,r.jsx)(s.code,{children:"KeywordID"})," and ",(0,r.jsx)(s.code,{children:"SharedKeyword"})," columns to map the GUID to readable Keyword name. If you cannot find this information there, there is a second option:"]}),"\n",(0,r.jsxs)(s.li,{children:["Go to MobileConnect Contacts, open your test contact and make sure he is subscribed to all your Keywords. Click the Attributes tab and scroll to MobileConnect Data. Click on the ",(0,r.jsx)(s.code,{children:"Carrier ID"})," value. It will open a MobileConnect Subscriptions view - the above Data View in User Interface format. If you check the Keyword column, you will see your MobileConnect Short or Long Code along with Keyword in a readable format. Write it down and click ",(0,r.jsx)(s.code,{children:"Edit"}),". Now you will see the same data, but with Keyword GUID. With those two values, you can use a SQL ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#conditional-values-with-case",children:(0,r.jsx)(s.code,{children:"CASE"})})," statement to convert this Data View to a more readable format."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsx)(s.h3,{id:"_smsmessagetracking",children:"_SMSMessageTracking"}),"\n",(0,r.jsxs)(d.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,r.jsx)(i.Z,{value:"fields",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Data Type"}),(0,r.jsx)(s.th,{children:"Nullable"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MobileMessageTrackingID"}),(0,r.jsx)(s.td,{children:"Unique Tracking ID - one for each SMS sent"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"EID"}),(0,r.jsx)(s.td,{children:"Enterprise ID number for the sender"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MID"}),(0,r.jsx)(s.td,{children:"Member ID (Business Unit ID)"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Mobile"}),(0,r.jsx)(s.td,{children:"Mobile number for the subscriber"}),(0,r.jsx)(s.td,{children:"Phone"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MessageID"}),(0,r.jsx)(s.td,{children:"Unique Mobile Message ID"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"KeywordID"}),(0,r.jsx)(s.td,{children:"Unique identifier for the keyword (GUID)"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"CodeID"}),(0,r.jsx)(s.td,{children:"Unique identifier for the SMS code (GUID)"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ConversationID"}),(0,r.jsx)(s.td,{children:"Unique identifier for the SMS conversation. Currently always null."}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"CampaignID"}),(0,r.jsx)(s.td,{children:"The SMS campaign tied to the record"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Sent"}),(0,r.jsx)(s.td,{children:"If the message was sent"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Delivered"}),(0,r.jsx)(s.td,{children:"If the message was delivered"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Undelivered"}),(0,r.jsx)(s.td,{children:"Whether the message was delivered successfully or not"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Unsub"}),(0,r.jsx)(s.td,{children:"If the subscriber unsubscribed. Currently always null."}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptIn"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted-in to the SMS messages. Currently always null."}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OptOut"}),(0,r.jsx)(s.td,{children:"Whether the subscriber has opted out of SMS messages. Currently always null."}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Outbound"}),(0,r.jsx)(s.td,{children:"If the message was outgoing"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Inbound"}),(0,r.jsx)(s.td,{children:"If the message was incoming"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"CreateDateTime"}),(0,r.jsx)(s.td,{children:"The date and time the tracking record was created"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ModifiedDateTime"}),(0,r.jsx)(s.td,{children:"The date and CST time the tracking record was modified"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ActionDateTime"}),(0,r.jsx)(s.td,{children:"The actual date/time the Marketing Cloud received a delivery or non-delivery event. Timestamps for delivery receipts are not indicative of when a message was received on a handset. The SMS industry does not support read receipts, and the data returned in this view are based on when a delivery receipt is returned to our system."}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"The text of the message"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"IsTest"}),(0,r.jsx)(s.td,{children:"If the message was a test message"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MobileMessageRecurrenceID"}),(0,r.jsx)(s.td,{children:"The ID of the recurrence schedule for the message. Can be used for troubleshooting send issues."}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ResponseToMobileMessageTrackingID"}),(0,r.jsx)(s.td,{children:"The tracking ID of the response to the message"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"IsValid"}),(0,r.jsx)(s.td,{children:"Populates to 1 for inbound message and 0 for Outbound message"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"InvalidationCode"}),(0,r.jsx)(s.td,{children:"Invalidation code for the message. Currently always null."}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SMSJobID"}),(0,r.jsxs)(s.td,{children:["GUID with JobID matching value in ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-enhanced-send-log",children:"SMS Send Log"}),". Filled only for sends since Spring 2023."]}),(0,r.jsx)(s.td,{children:"String"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SMSBatchID"}),(0,r.jsxs)(s.td,{children:["BatchID matching value in ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-enhanced-send-log",children:"SMS Send Log"}),". Filled only for sends since Spring 2023."]}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SendID"}),(0,r.jsx)(s.td,{children:"The send ID number for the SMS send"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SendSplitID"}),(0,r.jsx)(s.td,{children:"If the message was split, the ID of the split"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SendSegmentID"}),(0,r.jsx)(s.td,{children:"The ID of the segment tied to the message"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SendJobID"}),(0,r.jsx)(s.td,{children:"The job ID for the SMS send"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SendGroupID"}),(0,r.jsx)(s.td,{children:"The group ID for the SMS send"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SendPersonID"}),(0,r.jsx)(s.td,{children:"The sendperson ID for the SMS send"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SubscriberID"}),(0,r.jsx)(s.td,{children:"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SubscriberKey"}),(0,r.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SMSStandardStatusCodeId"}),(0,r.jsx)(s.td,{children:"SFMC delivery status code"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Description"}),(0,r.jsx)(s.td,{children:"Detailed description of the status code"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Name"}),(0,r.jsx)(s.td,{children:"The SMS Message or Journey Activity name"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ShortCode"}),(0,r.jsx)(s.td,{children:"The short code or long code used to send your message"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"SharedKeyword"}),(0,r.jsx)(s.td,{children:"The keyword used in your message"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Ordinal"}),(0,r.jsx)(s.td,{children:"Represents the parts in a multi-part message. Represented in ascending order starting at 0."}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"FromName"}),(0,r.jsx)(s.td,{children:"From Name that an individual message was deployed with. Maximum length: 11 characters"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"JBDefinitionID"}),(0,r.jsx)(s.td,{children:"Unique identifier for the related journey"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"JBActivityID"}),(0,r.jsx)(s.td,{children:"Unique identifier for the related journey activity"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{children:"X"})]})]})]})}),(0,r.jsx)(i.Z,{value:"sql",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",children:"SELECT\n smsTracking.MobileMessageTrackingID\n , smsTracking.EID\n , smsTracking.MID\n , smsTracking.Mobile\n , smsTracking.MessageID\n , smsTracking.KeywordID\n , smsTracking.CodeID\n , smsTracking.ConversationID\n , smsTracking.CampaignID\n , smsTracking.Sent\n , smsTracking.Delivered\n , smsTracking.Undelivered\n , smsTracking.Unsub\n , smsTracking.OptIn\n , smsTracking.OptOut\n , smsTracking.Outbound\n , smsTracking.Inbound\n , smsTracking.CreateDateTime\n , smsTracking.ModifiedDateTime\n , smsTracking.ActionDateTime\n , smsTracking.MessageText\n , smsTracking.IsTest\n , smsTracking.MobileMessageRecurrenceID\n , smsTracking.ResponseToMobileMessageTrackingID\n , smsTracking.IsValid\n , smsTracking.InvalidationCode\n , smsTracking.SMSJobID\n , smsTracking.SMSBatchID\n , smsTracking.SendID\n , smsTracking.SendSplitID\n , smsTracking.SendSegmentID\n , smsTracking.SendJobID\n , smsTracking.SendGroupID\n , smsTracking.SendPersonID\n , smsTracking.SubscriberID\n , smsTracking.SubscriberKey\n , smsTracking.SMSStandardStatusCodeId\n , smsTracking.Description\n , smsTracking.Name\n , smsTracking.ShortCode\n , smsTracking.SharedKeyword\n , smsTracking.Ordinal\n , smsTracking.FromName\n , smsTracking.JBDefinitionID\n , smsTracking.JBActivityID\nFROM _SMSMessageTracking AS smsTracking\n"})})})]}),"\n",(0,r.jsxs)(s.p,{children:["When working with ",(0,r.jsx)(s.code,{children:"_SMSMessageTracking"})," Data View:"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["If you send one SMS to multiple Subscribers, you will have multiple rows of data with different ",(0,r.jsx)(s.code,{children:"MobileMessageTrackingID"})," but the same ",(0,r.jsx)(s.code,{children:"MessageID"}),". Apart from ",(0,r.jsx)(s.code,{children:"MessageID"})," you may also use the ",(0,r.jsx)(s.code,{children:"Name"})," field that contains the asset name from MobileConnect."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"KeywordID"})," and ",(0,r.jsx)(s.code,{children:"CodeID"})," are GUIDs, but the same table also has the readable versions of those columns - ",(0,r.jsx)(s.code,{children:"ShortCode"})," and ",(0,r.jsx)(s.code,{children:"SharedKeyword"}),". ",(0,r.jsx)(s.code,{children:"ShortCode"}),", despite the name, also displays Long Codes."]}),"\n",(0,r.jsxs)(s.li,{children:["The fields marked above as boolean (like ",(0,r.jsx)(s.code,{children:"Sent"}),", ",(0,r.jsx)(s.code,{children:"Delivered"}),", ",(0,r.jsx)(s.code,{children:"IsTest"}),", ",(0,r.jsx)(s.code,{children:"Outbound"}),") have the value in the form of a number: ",(0,r.jsx)(s.code,{children:"0"})," = false, ",(0,r.jsx)(s.code,{children:"1"})," = true. Some might also be ",(0,r.jsx)(s.code,{children:"null"})," - for example, if a message was outbound, ",(0,r.jsx)(s.code,{children:"Outbound"})," will have the value of ",(0,r.jsx)(s.code,{children:"1"}),", whereas ",(0,r.jsx)(s.code,{children:"Inbound"})," will be ",(0,r.jsx)(s.code,{children:"null"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"MessageText"})," will not only show you the text you sent in your SMS - it will also display it after personalisation is applied. On the one hand, it is great for debugging, as it allows you to check the final content the user received. On the other hand, you won't be able to assess personalisations used across your messaging."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"ResponseToMobileMessageTrackingID"})," is an excellent way to check customer response. You can make ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#self-join",children:"Self-Join"})," between inbound ",(0,r.jsx)(s.code,{children:"ResponseToMobileMessageTrackingID"})," and outbound ",(0,r.jsx)(s.code,{children:"MobileMessageTrackingID"})," to output response data in the same line."]}),"\n",(0,r.jsxs)(s.li,{children:["Some fields in this Data View are filled only under specific conditions:","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"CampaignID"})," is populated only when an SMS is sent to Data Extension as Audience or send type is Send to Data Extension. SMS must be connected to a Campaign for the field to be populated."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"SendID"}),", ",(0,r.jsx)(s.code,{children:"SendJobID"})," are populated only for SMS messages sent via Automation Studio's Send SMS Activity or when an SMS is sent to Data Extension as Audience."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"SendSplitID"}),", ",(0,r.jsx)(s.code,{children:"SendSegmentID"}),", ",(0,r.jsx)(s.code,{children:"SendGroupID"}),", ",(0,r.jsx)(s.code,{children:"SendPersonID"})," are populated only when SMS is sent to Data Extension as Audience."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"ConversationID"})," is populated only when a conversation is created with a MO user using AMPScript ",(0,r.jsx)(s.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/CreateSmsConversation.htm",children:(0,r.jsx)(s.code,{children:"CreateSMSConversation"})}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"Unsub"}),", ",(0,r.jsx)(s.code,{children:"OptIn"}),", ",(0,r.jsx)(s.code,{children:"OptOut"})," are currently not populated at all. You should pull that data from ",(0,r.jsx)(s.a,{href:"#_smssubscriptionlog",children:(0,r.jsx)(s.code,{children:"_SMSSubscriptionLog"})}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"JBDefinitionID"})," and ",(0,r.jsx)(s.code,{children:"JBActivityID"})," let you cleanly match SMS data to ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_journey",children:(0,r.jsx)(s.code,{children:"Journey"})})," and ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_journeyactivity",children:(0,r.jsx)(s.code,{children:"_JourneyActivity"})})," Data Views using ",(0,r.jsx)(s.code,{children:"VersionID"})," and ",(0,r.jsx)(s.code,{children:"ActivityID"})," respectively. However, it won't work for old (created before October 2020) SMS Activities - for those you can make a ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,r.jsx)(s.code,{children:"JOIN"})})," using ",(0,r.jsx)(s.code,{children:"Name"})," field: ",(0,r.jsx)(s.code,{children:"ON smsTracking.Name = journeyActivity.ActivityName"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"SMSStandardStatusCodeId"})," and ",(0,r.jsx)(s.code,{children:"Description"})," are great for understanding your SMS send's current status."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"SMSJobID"})," and ",(0,r.jsx)(s.code,{children:"SMSBatchID"})," are the only way to connect _SMSMessageTracking Data View to ",(0,r.jsx)(s.a,{href:"/docs/config/sfmc-enhanced-send-log",children:"SMS Send Log"}),". You can ",(0,r.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,r.jsx)(s.code,{children:"JOIN"})})," ",(0,r.jsx)(s.code,{children:"ON smsTracking.SubscriberID = sendLog.SubID AND smsTracking.SMSJobID = sendLog.SMSJobID AND smsTracking.SMSBatchID = sendLog.BatchID"}),"."]}),"\n"]}),"\n",(0,r.jsx)(s.h4,{id:"sms-status-codes",children:"SMS Status Codes"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Code"}),(0,r.jsx)(s.th,{children:"Status"}),(0,r.jsx)(s.th,{children:"Definition"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1000"}),(0,r.jsx)(s.td,{children:"QueuedToSfmcSendService"}),(0,r.jsx)(s.td,{children:"Message queued to internal send service."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1500"}),(0,r.jsx)(s.td,{children:"QueueFailureToSfmcSendService"}),(0,r.jsx)(s.td,{children:"Message failed to queue to internal send service. Retry your send."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1501"}),(0,r.jsx)(s.td,{children:"ValidationError"}),(0,r.jsx)(s.td,{children:"Internal validation error. Retry your send."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2000"}),(0,r.jsx)(s.td,{children:"DeliveredToAggregator"}),(0,r.jsx)(s.td,{children:"Message delivered to the aggregator. The status will be updated when the delivery confirmation comes from the carrier or mobile device. For shared codes, this is the final status."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2500"}),(0,r.jsx)(s.td,{children:"FailedToAggregator"}),(0,r.jsx)(s.td,{children:"Message not delivered to the aggregator. Retry your send."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2501"}),(0,r.jsx)(s.td,{children:"UnknownToAggregator"}),(0,r.jsx)(s.td,{children:"Unknown aggregator error."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2600"}),(0,r.jsx)(s.td,{children:"ThrottledToAggregator"}),(0,r.jsx)(s.td,{children:"Message not accepted by aggregator due to capacity issues. Send will be retried automatically."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3000"}),(0,r.jsx)(s.td,{children:"Enroute"}),(0,r.jsx)(s.td,{children:"Message is en route to carrier. Waiting on carrier confirmation."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3001"}),(0,r.jsx)(s.td,{children:"SentToCarrier"}),(0,r.jsx)(s.td,{children:"Message sent to carrier. Waiting to be accepted by carrier."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3002"}),(0,r.jsx)(s.td,{children:"AcceptedByCarrier"}),(0,r.jsx)(s.td,{children:"Message accepted by carrier. Waiting for delivery confirmation."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"3400"}),(0,r.jsx)(s.td,{children:"Unknown"}),(0,r.jsx)(s.td,{children:"Unknown error"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4000"}),(0,r.jsx)(s.td,{children:"Delivered"}),(0,r.jsx)(s.td,{children:"Message delivered to mobile device."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4500"}),(0,r.jsx)(s.td,{children:"Undeliverable"}),(0,r.jsx)(s.td,{children:"Message not delivered to mobile device."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4501"}),(0,r.jsx)(s.td,{children:"Expired"}),(0,r.jsx)(s.td,{children:"Message expired. Message exhausted the carrier retry process. Mobile device may be out of carrier range."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4502"}),(0,r.jsx)(s.td,{children:"Deleted"}),(0,r.jsx)(s.td,{children:"Message deleted by the carrier."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4503"}),(0,r.jsx)(s.td,{children:"Rejected"}),(0,r.jsx)(s.td,{children:"Message rejected. Carrier may have detected a loop or assumed that message is spam. This status can indicate an administrative or financial problem between the operator and the end-users."})]})]})]}),"\n",(0,r.jsx)(s.hr,{}),"\n",(0,r.jsx)(s.h3,{id:"_undeliverablesms",children:"_UndeliverableSMS"}),"\n",(0,r.jsx)(s.p,{children:"Stores information about failed message deliveries from MobileConnect."}),"\n",(0,r.jsx)(s.p,{children:"There might be multiple reasons for the SMS to be undelivered, for example:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"The mobile device is powered off."}),"\n",(0,r.jsx)(s.li,{children:"The user is out of range of cellular networks"}),"\n",(0,r.jsx)(s.li,{children:"The number is for a landline"}),"\n"]}),"\n",(0,r.jsxs)(d.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,r.jsx)(i.Z,{value:"fields",children:(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Data Type"}),(0,r.jsx)(s.th,{children:"Nullable"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"MobileNumber"}),(0,r.jsx)(s.td,{children:"Mobile number for the subscriber"}),(0,r.jsx)(s.td,{children:"Text"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Undeliverable"}),(0,r.jsx)(s.td,{children:"Whether the subscriber is eligible for future deliveries"}),(0,r.jsx)(s.td,{children:"Boolean"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"BounceCount"}),(0,r.jsx)(s.td,{children:"Number of times message was not delivered"}),(0,r.jsx)(s.td,{children:"Number"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"FirstBounceDate"}),(0,r.jsx)(s.td,{children:"Date of the first unsuccessful delivery"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"HoldDate"}),(0,r.jsx)(s.td,{children:"Date when the subscriber can be used in sends again"}),(0,r.jsx)(s.td,{children:"Date"}),(0,r.jsx)(s.td,{children:"X"})]})]})]})}),(0,r.jsx)(i.Z,{value:"sql",children:(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-sql",children:"SELECT\n undeliverableSMS.MobileNumber\n , undeliverableSMS.Undeliverable\n , undeliverableSMS.BounceCount\n , undeliverableSMS.FirstBounceDate\n , undeliverableSMS.HoldDate\nFROM _UndeliverableSMS AS undeliverableSMS\n"})})})]}),"\n",(0,r.jsxs)(s.p,{children:["When working with ",(0,r.jsx)(s.code,{children:"_JourneyActivity"})," Data View:"]}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["If ",(0,r.jsx)(s.code,{children:"Undeliverable"})," is ",(0,r.jsx)(s.code,{children:"TRUE"}),", check ",(0,r.jsx)(s.code,{children:"HoldDate"})," to know when the number will be reachable again."]}),"\n",(0,r.jsxs)(s.li,{children:["Monitor this data view and blocklist numbers with significant ",(0,r.jsx)(s.code,{children:"BounceCount"})," values to clean up your database, save money and protect from spamming potential future owners of the recycled phone number."]}),"\n",(0,r.jsx)(s.li,{children:"It's impossible to know the actual delivery status for SMS sends - Marketing Cloud reports only whether the SMS carrier accepted the message. It does not know what happens with it after the carrier takes over. However, most of the SMS messages accepted by carriers are delivered."}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(j,{...e})}):j(e)}},425:(e,s,t)=>{t.d(s,{Z:()=>i});t(7294);var r=t(512);const n={tabItem:"tabItem_Ymn6"};var d=t(5893);function i(e){let{children:s,hidden:t,className:i}=e;return(0,d.jsx)("div",{role:"tabpanel",className:(0,r.Z)(n.tabItem,i),hidden:t,children:s})}},3992:(e,s,t)=>{t.d(s,{Z:()=>M});var r=t(7294),n=t(512),d=t(2957),i=t(6550),l=t(1270),c=t(5238),h=t(3609),a=t(2560);function o(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:s,children:t}=e;return(0,r.useMemo)((()=>{const e=s??function(e){return o(e).map((e=>{let{props:{value:s,label:t,attributes:r,default:n}}=e;return{value:s,label:t,attributes:r,default:n}}))}(t);return function(e){const s=(0,h.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,t])}function j(e){let{value:s,tabValues:t}=e;return t.some((e=>e.value===s))}function u(e){let{queryString:s=!1,groupId:t}=e;const n=(0,i.k6)(),d=function(e){let{queryString:s=!1,groupId:t}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:s,groupId:t});return[(0,c._X)(d),(0,r.useCallback)((e=>{if(!d)return;const s=new URLSearchParams(n.location.search);s.set(d,e),n.replace({...n.location,search:s.toString()})}),[d,n])]}function b(e){const{defaultValue:s,queryString:t=!1,groupId:n}=e,d=x(e),[i,c]=(0,r.useState)((()=>function(e){let{defaultValue:s,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(s){if(!j({value:s,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:s,tabValues:d}))),[h,o]=u({queryString:t,groupId:n}),[b,m]=function(e){let{groupId:s}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(s),[n,d]=(0,a.Nk)(t);return[n,(0,r.useCallback)((e=>{t&&d.set(e)}),[t,d])]}({groupId:n}),p=(()=>{const e=h??b;return j({value:e,tabValues:d})?e:null})();(0,l.Z)((()=>{p&&c(p)}),[p]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!j({value:e,tabValues:d}))throw new Error(`Can't select invalid tab value=${e}`);c(e),o(e),m(e)}),[o,m,d]),tabValues:d}}var m=t(1048);const p={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var S=t(5893);function g(e){let{className:s,block:t,selectedValue:r,selectValue:i,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:h}=(0,d.o5)(),a=e=>{const s=e.currentTarget,t=c.indexOf(s),n=l[t].value;n!==r&&(h(s),i(n))},o=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;s=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;s=c[t]??c[c.length-1];break}}s?.focus()};return(0,S.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.Z)("tabs",{"tabs--block":t},s),children:l.map((e=>{let{value:s,label:t,attributes:d}=e;return(0,S.jsx)("li",{role:"tab",tabIndex:r===s?0:-1,"aria-selected":r===s,ref:e=>c.push(e),onKeyDown:o,onClick:a,...d,className:(0,n.Z)("tabs__item",p.tabItem,d?.className,{"tabs__item--active":r===s}),children:t??s},s)}))})}function f(e){let{lazy:s,children:t,selectedValue:n}=e;const d=(Array.isArray(t)?t:[t]).filter(Boolean);if(s){const e=d.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,S.jsx)("div",{className:"margin-top--md",children:d.map(((e,s)=>(0,r.cloneElement)(e,{key:s,hidden:e.props.value!==n})))})}function D(e){const s=b(e);return(0,S.jsxs)("div",{className:(0,n.Z)("tabs-container",p.tabList),children:[(0,S.jsx)(g,{...e,...s}),(0,S.jsx)(f,{...e,...s})]})}function M(e){const s=(0,m.Z)();return(0,S.jsx)(D,{...e,children:o(e.children)},String(s))}},1872:(e,s,t)=>{t.d(s,{m:()=>d});t(7294);const r="leadText_qzwo";var n=t(5893);const d=e=>{let{content:s}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:r,children:s})})}},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>i});var r=t(7294);const n={},d=r.createContext(n);function i(e){const s=r.useContext(d);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(d.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/622.6b0ea3ef.js b/assets/js/622.6b0ea3ef.js new file mode 100644 index 000000000..c49d69bc0 --- /dev/null +++ b/assets/js/622.6b0ea3ef.js @@ -0,0 +1,1410 @@ +"use strict"; +exports.id = 622; +exports.ids = [622]; +exports.modules = { + +/***/ 85622: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/min.js +function min(values, valueof) { + let min; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } + return min; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/align.js + + +function targetDepth(d) { + return d.target.depth; +} + +function left(node) { + return node.depth; +} + +function right(node, n) { + return n - 1 - node.height; +} + +function justify(node, n) { + return node.sourceLinks.length ? node.depth : n - 1; +} + +function center(node) { + return node.targetLinks.length ? node.depth + : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1 + : 0; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/sum.js +function sum(values, valueof) { + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value = +value) { + sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if (value = +valueof(value, ++index, values)) { + sum += value; + } + } + } + return sum; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/max.js +function max(values, valueof) { + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } + return max; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/constant.js +function constant(x) { + return function() { + return x; + }; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/sankey.js + + + + +function ascendingSourceBreadth(a, b) { + return ascendingBreadth(a.source, b.source) || a.index - b.index; +} + +function ascendingTargetBreadth(a, b) { + return ascendingBreadth(a.target, b.target) || a.index - b.index; +} + +function ascendingBreadth(a, b) { + return a.y0 - b.y0; +} + +function value(d) { + return d.value; +} + +function defaultId(d) { + return d.index; +} + +function defaultNodes(graph) { + return graph.nodes; +} + +function defaultLinks(graph) { + return graph.links; +} + +function find(nodeById, id) { + const node = nodeById.get(id); + if (!node) throw new Error("missing: " + id); + return node; +} + +function computeLinkBreadths({nodes}) { + for (const node of nodes) { + let y0 = node.y0; + let y1 = y0; + for (const link of node.sourceLinks) { + link.y0 = y0 + link.width / 2; + y0 += link.width; + } + for (const link of node.targetLinks) { + link.y1 = y1 + link.width / 2; + y1 += link.width; + } + } +} + +function Sankey() { + let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent + let dx = 24; // nodeWidth + let dy = 8, py; // nodePadding + let id = defaultId; + let align = justify; + let sort; + let linkSort; + let nodes = defaultNodes; + let links = defaultLinks; + let iterations = 6; + + function sankey() { + const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)}; + computeNodeLinks(graph); + computeNodeValues(graph); + computeNodeDepths(graph); + computeNodeHeights(graph); + computeNodeBreadths(graph); + computeLinkBreadths(graph); + return graph; + } + + sankey.update = function(graph) { + computeLinkBreadths(graph); + return graph; + }; + + sankey.nodeId = function(_) { + return arguments.length ? (id = typeof _ === "function" ? _ : constant(_), sankey) : id; + }; + + sankey.nodeAlign = function(_) { + return arguments.length ? (align = typeof _ === "function" ? _ : constant(_), sankey) : align; + }; + + sankey.nodeSort = function(_) { + return arguments.length ? (sort = _, sankey) : sort; + }; + + sankey.nodeWidth = function(_) { + return arguments.length ? (dx = +_, sankey) : dx; + }; + + sankey.nodePadding = function(_) { + return arguments.length ? (dy = py = +_, sankey) : dy; + }; + + sankey.nodes = function(_) { + return arguments.length ? (nodes = typeof _ === "function" ? _ : constant(_), sankey) : nodes; + }; + + sankey.links = function(_) { + return arguments.length ? (links = typeof _ === "function" ? _ : constant(_), sankey) : links; + }; + + sankey.linkSort = function(_) { + return arguments.length ? (linkSort = _, sankey) : linkSort; + }; + + sankey.size = function(_) { + return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0]; + }; + + sankey.extent = function(_) { + return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]]; + }; + + sankey.iterations = function(_) { + return arguments.length ? (iterations = +_, sankey) : iterations; + }; + + function computeNodeLinks({nodes, links}) { + for (const [i, node] of nodes.entries()) { + node.index = i; + node.sourceLinks = []; + node.targetLinks = []; + } + const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])); + for (const [i, link] of links.entries()) { + link.index = i; + let {source, target} = link; + if (typeof source !== "object") source = link.source = find(nodeById, source); + if (typeof target !== "object") target = link.target = find(nodeById, target); + source.sourceLinks.push(link); + target.targetLinks.push(link); + } + if (linkSort != null) { + for (const {sourceLinks, targetLinks} of nodes) { + sourceLinks.sort(linkSort); + targetLinks.sort(linkSort); + } + } + } + + function computeNodeValues({nodes}) { + for (const node of nodes) { + node.value = node.fixedValue === undefined + ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value)) + : node.fixedValue; + } + } + + function computeNodeDepths({nodes}) { + const n = nodes.length; + let current = new Set(nodes); + let next = new Set; + let x = 0; + while (current.size) { + for (const node of current) { + node.depth = x; + for (const {target} of node.sourceLinks) { + next.add(target); + } + } + if (++x > n) throw new Error("circular link"); + current = next; + next = new Set; + } + } + + function computeNodeHeights({nodes}) { + const n = nodes.length; + let current = new Set(nodes); + let next = new Set; + let x = 0; + while (current.size) { + for (const node of current) { + node.height = x; + for (const {source} of node.targetLinks) { + next.add(source); + } + } + if (++x > n) throw new Error("circular link"); + current = next; + next = new Set; + } + } + + function computeNodeLayers({nodes}) { + const x = max(nodes, d => d.depth) + 1; + const kx = (x1 - x0 - dx) / (x - 1); + const columns = new Array(x); + for (const node of nodes) { + const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x)))); + node.layer = i; + node.x0 = x0 + i * kx; + node.x1 = node.x0 + dx; + if (columns[i]) columns[i].push(node); + else columns[i] = [node]; + } + if (sort) for (const column of columns) { + column.sort(sort); + } + return columns; + } + + function initializeNodeBreadths(columns) { + const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value)); + for (const nodes of columns) { + let y = y0; + for (const node of nodes) { + node.y0 = y; + node.y1 = y + node.value * ky; + y = node.y1 + py; + for (const link of node.sourceLinks) { + link.width = link.value * ky; + } + } + y = (y1 - y + py) / (nodes.length + 1); + for (let i = 0; i < nodes.length; ++i) { + const node = nodes[i]; + node.y0 += y * (i + 1); + node.y1 += y * (i + 1); + } + reorderLinks(nodes); + } + } + + function computeNodeBreadths(graph) { + const columns = computeNodeLayers(graph); + py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1)); + initializeNodeBreadths(columns); + for (let i = 0; i < iterations; ++i) { + const alpha = Math.pow(0.99, i); + const beta = Math.max(1 - alpha, (i + 1) / iterations); + relaxRightToLeft(columns, alpha, beta); + relaxLeftToRight(columns, alpha, beta); + } + } + + // Reposition each node based on its incoming (target) links. + function relaxLeftToRight(columns, alpha, beta) { + for (let i = 1, n = columns.length; i < n; ++i) { + const column = columns[i]; + for (const target of column) { + let y = 0; + let w = 0; + for (const {source, value} of target.targetLinks) { + let v = value * (target.layer - source.layer); + y += targetTop(source, target) * v; + w += v; + } + if (!(w > 0)) continue; + let dy = (y / w - target.y0) * alpha; + target.y0 += dy; + target.y1 += dy; + reorderNodeLinks(target); + } + if (sort === undefined) column.sort(ascendingBreadth); + resolveCollisions(column, beta); + } + } + + // Reposition each node based on its outgoing (source) links. + function relaxRightToLeft(columns, alpha, beta) { + for (let n = columns.length, i = n - 2; i >= 0; --i) { + const column = columns[i]; + for (const source of column) { + let y = 0; + let w = 0; + for (const {target, value} of source.sourceLinks) { + let v = value * (target.layer - source.layer); + y += sourceTop(source, target) * v; + w += v; + } + if (!(w > 0)) continue; + let dy = (y / w - source.y0) * alpha; + source.y0 += dy; + source.y1 += dy; + reorderNodeLinks(source); + } + if (sort === undefined) column.sort(ascendingBreadth); + resolveCollisions(column, beta); + } + } + + function resolveCollisions(nodes, alpha) { + const i = nodes.length >> 1; + const subject = nodes[i]; + resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha); + resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha); + resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha); + resolveCollisionsTopToBottom(nodes, y0, 0, alpha); + } + + // Push any overlapping nodes down. + function resolveCollisionsTopToBottom(nodes, y, i, alpha) { + for (; i < nodes.length; ++i) { + const node = nodes[i]; + const dy = (y - node.y0) * alpha; + if (dy > 1e-6) node.y0 += dy, node.y1 += dy; + y = node.y1 + py; + } + } + + // Push any overlapping nodes up. + function resolveCollisionsBottomToTop(nodes, y, i, alpha) { + for (; i >= 0; --i) { + const node = nodes[i]; + const dy = (node.y1 - y) * alpha; + if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy; + y = node.y0 - py; + } + } + + function reorderNodeLinks({sourceLinks, targetLinks}) { + if (linkSort === undefined) { + for (const {source: {sourceLinks}} of targetLinks) { + sourceLinks.sort(ascendingTargetBreadth); + } + for (const {target: {targetLinks}} of sourceLinks) { + targetLinks.sort(ascendingSourceBreadth); + } + } + } + + function reorderLinks(nodes) { + if (linkSort === undefined) { + for (const {sourceLinks, targetLinks} of nodes) { + sourceLinks.sort(ascendingTargetBreadth); + targetLinks.sort(ascendingSourceBreadth); + } + } + } + + // Returns the target.y0 that would produce an ideal link from source to target. + function targetTop(source, target) { + let y = source.y0 - (source.sourceLinks.length - 1) * py / 2; + for (const {target: node, width} of source.sourceLinks) { + if (node === target) break; + y += width + py; + } + for (const {source: node, width} of target.targetLinks) { + if (node === source) break; + y -= width; + } + return y; + } + + // Returns the source.y0 that would produce an ideal link from source to target. + function sourceTop(source, target) { + let y = target.y0 - (target.targetLinks.length - 1) * py / 2; + for (const {source: node, width} of target.targetLinks) { + if (node === source) break; + y += width + py; + } + for (const {target: node, width} of source.sourceLinks) { + if (node === target) break; + y -= width; + } + return y; + } + + return sankey; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-path/src/path.js +var pi = Math.PI, + tau = 2 * pi, + epsilon = 1e-6, + tauEpsilon = tau - epsilon; + +function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; +} + +function path() { + return new Path; +} + +Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); + }, + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } + }, + lineTo: function(x, y) { + this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); + }, + quadraticCurveTo: function(x1, y1, x, y) { + this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon)); + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { + this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon) { + this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); + } + + this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); + } + }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r, ccw = !!ccw; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._ += "M" + x0 + "," + y0; + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { + this._ += "L" + x0 + "," + y0; + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau + tau; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); + } + + // Is this arc non-empty? Draw an arc! + else if (da > epsilon) { + this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + } + }, + rect: function(x, y, w, h) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; + }, + toString: function() { + return this._; + } +}; + +/* harmony default export */ const src_path = (path); + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/array.js +var slice = Array.prototype.slice; + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/constant.js +/* harmony default export */ function src_constant(x) { + return function constant() { + return x; + }; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/point.js +function point_x(p) { + return p[0]; +} + +function point_y(p) { + return p[1]; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/link/index.js + + + + + + +function linkSource(d) { + return d.source; +} + +function linkTarget(d) { + return d.target; +} + +function link_link(curve) { + var source = linkSource, + target = linkTarget, + x = point_x, + y = point_y, + context = null; + + function link() { + var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); + if (!context) context = buffer = src_path(); + curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); + if (buffer) return context = null, buffer + "" || null; + } + + link.source = function(_) { + return arguments.length ? (source = _, link) : source; + }; + + link.target = function(_) { + return arguments.length ? (target = _, link) : target; + }; + + link.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : src_constant(+_), link) : x; + }; + + link.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : src_constant(+_), link) : y; + }; + + link.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), link) : context; + }; + + return link; +} + +function curveHorizontal(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); +} + +function curveVertical(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); +} + +function curveRadial(context, x0, y0, x1, y1) { + var p0 = pointRadial(x0, y0), + p1 = pointRadial(x0, y0 = (y0 + y1) / 2), + p2 = pointRadial(x1, y0), + p3 = pointRadial(x1, y1); + context.moveTo(p0[0], p0[1]); + context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); +} + +function linkHorizontal() { + return link_link(curveHorizontal); +} + +function linkVertical() { + return link_link(curveVertical); +} + +function linkRadial() { + var l = link_link(curveRadial); + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + return l; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/sankeyLinkHorizontal.js + + +function horizontalSource(d) { + return [d.source.x1, d.y0]; +} + +function horizontalTarget(d) { + return [d.target.x0, d.y1]; +} + +/* harmony default export */ function sankeyLinkHorizontal() { + return linkHorizontal() + .source(horizontalSource) + .target(horizontalTarget); +} + +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(22424); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/sankeyDiagram-86f1d020.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, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SANKEY": 4, "NEWLINE": 5, "csv": 6, "opt_eof": 7, "record": 8, "csv_tail": 9, "EOF": 10, "field[source]": 11, "COMMA": 12, "field[target]": 13, "field[value]": 14, "field": 15, "escaped": 16, "non_escaped": 17, "DQUOTE": 18, "ESCAPED_TEXT": 19, "NON_ESCAPED_TEXT": 20, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SANKEY", 5: "NEWLINE", 10: "EOF", 11: "field[source]", 12: "COMMA", 13: "field[target]", 14: "field[value]", 18: "DQUOTE", 19: "ESCAPED_TEXT", 20: "NON_ESCAPED_TEXT" }, + productions_: [0, [3, 4], [6, 2], [9, 2], [9, 0], [7, 1], [7, 0], [8, 5], [15, 1], [15, 1], [16, 3], [17, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 7: + const source = yy.findOrCreateNode($$[$0 - 4].trim().replaceAll('""', '"')); + const target = yy.findOrCreateNode($$[$0 - 2].trim().replaceAll('""', '"')); + const value = parseFloat($$[$0].trim()); + yy.addLink(source, target, value); + break; + case 8: + case 9: + case 11: + this.$ = $$[$0]; + break; + case 10: + this.$ = $$[$0 - 1]; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, { 5: [1, 3] }, { 6: 4, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 1: [2, 6], 7: 11, 10: [1, 12] }, o($V1, [2, 4], { 9: 13, 5: [1, 14] }), { 12: [1, 15] }, o($V2, [2, 8]), o($V2, [2, 9]), { 19: [1, 16] }, o($V2, [2, 11]), { 1: [2, 1] }, { 1: [2, 5] }, o($V1, [2, 2]), { 6: 17, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 15: 18, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 18: [1, 19] }, o($V1, [2, 3]), { 12: [1, 20] }, o($V2, [2, 10]), { 15: 21, 16: 7, 17: 8, 18: $V0, 20: $V1 }, o([1, 5, 10], [2, 7])], + defaultActions: { 11: [2, 1], 12: [2, 5] }, + 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: { "easy_keword_rules": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.pushState("csv"); + return 4; + case 1: + return 10; + case 2: + return 5; + case 3: + return 12; + case 4: + this.pushState("escaped_text"); + return 18; + case 5: + return 20; + case 6: + this.popState("escaped_text"); + return 18; + case 7: + return 19; + } + }, + rules: [/^(?:sankey-beta\b)/, /^(?:$)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:(\u002C))/, /^(?:(\u0022))/, /^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/, /^(?:(\u0022)(?!(\u0022)))/, /^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/], + conditions: { "csv": { "rules": [1, 2, 3, 4, 5, 6, 7], "inclusive": false }, "escaped_text": { "rules": [6, 7], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7], "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 links = []; +let nodes = []; +let nodesMap = {}; +const clear = () => { + links = []; + nodes = []; + nodesMap = {}; + (0,mermaid_04fb0060.t)(); +}; +class SankeyLink { + constructor(source, target, value = 0) { + this.source = source; + this.target = target; + this.value = value; + } +} +const addLink = (source, target, value) => { + links.push(new SankeyLink(source, target, value)); +}; +class SankeyNode { + constructor(ID) { + this.ID = ID; + } +} +const findOrCreateNode = (ID) => { + ID = mermaid_04fb0060.e.sanitizeText(ID, (0,mermaid_04fb0060.c)()); + if (!nodesMap[ID]) { + nodesMap[ID] = new SankeyNode(ID); + nodes.push(nodesMap[ID]); + } + return nodesMap[ID]; +}; +const getNodes = () => nodes; +const getLinks = () => links; +const getGraph = () => ({ + nodes: nodes.map((node) => ({ id: node.ID })), + links: links.map((link) => ({ + source: link.source.ID, + target: link.target.ID, + value: link.value + })) +}); +const db = { + nodesMap, + getConfig: () => (0,mermaid_04fb0060.c)().sankey, + getNodes, + getLinks, + getGraph, + addLink, + findOrCreateNode, + getAccTitle: mermaid_04fb0060.g, + setAccTitle: mermaid_04fb0060.s, + getAccDescription: mermaid_04fb0060.a, + setAccDescription: mermaid_04fb0060.b, + getDiagramTitle: mermaid_04fb0060.r, + setDiagramTitle: mermaid_04fb0060.q, + clear +}; +const _Uid = class _Uid2 { + static next(name) { + return new _Uid2(name + ++_Uid2.count); + } + constructor(id) { + this.id = id; + this.href = `#${id}`; + } + toString() { + return "url(" + this.href + ")"; + } +}; +_Uid.count = 0; +let Uid = _Uid; +const alignmentsMap = { + left: left, + right: right, + center: center, + justify: justify +}; +const draw = function(text, id, _version, diagObj) { + const { securityLevel, sankey: conf } = (0,mermaid_04fb0060.c)(); + const defaultSankeyConfig = mermaid_04fb0060.I.sankey; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,src/* select */.Ys)(`[id="${id}"]`); + const width = (conf == null ? void 0 : conf.width) ?? defaultSankeyConfig.width; + const height = (conf == null ? void 0 : conf.height) ?? defaultSankeyConfig.width; + const useMaxWidth = (conf == null ? void 0 : conf.useMaxWidth) ?? defaultSankeyConfig.useMaxWidth; + const nodeAlignment = (conf == null ? void 0 : conf.nodeAlignment) ?? defaultSankeyConfig.nodeAlignment; + const prefix = (conf == null ? void 0 : conf.prefix) ?? defaultSankeyConfig.prefix; + const suffix = (conf == null ? void 0 : conf.suffix) ?? defaultSankeyConfig.suffix; + const showValues = (conf == null ? void 0 : conf.showValues) ?? defaultSankeyConfig.showValues; + const graph = diagObj.db.getGraph(); + const nodeAlign = alignmentsMap[nodeAlignment]; + const nodeWidth = 10; + const sankey$1 = Sankey().nodeId((d) => d.id).nodeWidth(nodeWidth).nodePadding(10 + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([ + [0, 0], + [width, height] + ]); + sankey$1(graph); + const colorScheme = (0,src/* scaleOrdinal */.PKp)(src/* schemeTableau10 */.K2I); + svg.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d) => (d.uid = Uid.next("node-")).id).attr("transform", function(d) { + return "translate(" + d.x0 + "," + d.y0 + ")"; + }).attr("x", (d) => d.x0).attr("y", (d) => d.y0).append("rect").attr("height", (d) => { + return d.y1 - d.y0; + }).attr("width", (d) => d.x1 - d.x0).attr("fill", (d) => colorScheme(d.id)); + const getText = ({ id: id2, value }) => { + if (!showValues) { + return id2; + } + return `${id2} +${prefix}${Math.round(value * 100) / 100}${suffix}`; + }; + svg.append("g").attr("class", "node-labels").attr("font-family", "sans-serif").attr("font-size", 14).selectAll("text").data(graph.nodes).join("text").attr("x", (d) => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6).attr("y", (d) => (d.y1 + d.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d) => d.x0 < width / 2 ? "start" : "end").text(getText); + const link = svg.append("g").attr("class", "links").attr("fill", "none").attr("stroke-opacity", 0.5).selectAll(".link").data(graph.links).join("g").attr("class", "link").style("mix-blend-mode", "multiply"); + const linkColor = (conf == null ? void 0 : conf.linkColor) || "gradient"; + if (linkColor === "gradient") { + const gradient = link.append("linearGradient").attr("id", (d) => (d.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d) => d.source.x1).attr("x2", (d) => d.target.x0); + gradient.append("stop").attr("offset", "0%").attr("stop-color", (d) => colorScheme(d.source.id)); + gradient.append("stop").attr("offset", "100%").attr("stop-color", (d) => colorScheme(d.target.id)); + } + let coloring; + switch (linkColor) { + case "gradient": + coloring = (d) => d.uid; + break; + case "source": + coloring = (d) => colorScheme(d.source.id); + break; + case "target": + coloring = (d) => colorScheme(d.target.id); + break; + default: + coloring = linkColor; + } + link.append("path").attr("d", sankeyLinkHorizontal()).attr("stroke", coloring).attr("stroke-width", (d) => Math.max(1, d.width)); + (0,mermaid_04fb0060.o)(void 0, svg, 0, useMaxWidth); +}; +const renderer = { + draw +}; +const prepareTextForParsing = (text) => { + const textToParse = text.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim(); + return textToParse; +}; +const originalParse = parser$1.parse.bind(parser$1); +parser$1.parse = (text) => originalParse(prepareTextForParsing(text)); +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/6316.2009feb9.js b/assets/js/6316.2009feb9.js deleted file mode 100644 index 23442866b..000000000 --- a/assets/js/6316.2009feb9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6316],{6316:(t,e,n)=>{n.d(e,{diagram:()=>A});var i=n(6432),s=n(9373),r=n(1619),a=n(5920),o=n(7201),c=(n(7484),n(7967),n(7856),n(277),n(5625),n(9354),n(1518),n(9542),n(285),n(8734),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[1,2],n=[1,5],i=[6,9,11,17,18,20,22,23,26,27,28],s=[1,15],r=[1,16],a=[1,17],o=[1,18],c=[1,19],l=[1,23],h=[1,24],d=[1,27],u=[4,6,9,11,17,18,20,22,23,26,27,28],p={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,period_statement:24,event_statement:25,period:26,event:27,open_directive:28,type_directive:29,arg_directive:30,close_directive:31,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",26:"period",27:"event",28:"open_directive",29:"type_directive",30:"arg_directive",31:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[24,1],[25,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 3:case 7:case 8:this.$=[];break;case 4:r[o-1].push(r[o]),this.$=r[o-1];break;case 5:case 6:this.$=r[o];break;case 11:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 12:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 13:case 14:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 15:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 19:i.addTask(r[o],0,""),this.$=r[o];break;case 20:i.addEvent(r[o].substr(2)),this.$=r[o];break;case 21:i.parseDirective("%%{","open_directive");break;case 22:i.parseDirective(r[o],"type_directive");break;case 23:r[o]=r[o].trim().replace(/'/g,'"'),i.parseDirective(r[o],"arg_directive");break;case 24:i.parseDirective("}%%","close_directive","timeline")}},table:[{3:1,4:e,7:3,12:4,28:n},{1:[3]},t(i,[2,3],{5:6}),{3:7,4:e,7:3,12:4,28:n},{13:8,29:[1,9]},{29:[2,21]},{6:[1,10],7:22,8:11,9:[1,12],10:13,11:[1,14],12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},{1:[2,2]},{14:25,15:[1,26],31:d},t([15,31],[2,22]),t(i,[2,8],{1:[2,1]}),t(i,[2,4]),{7:22,10:28,12:4,17:s,18:r,20:a,22:o,23:c,24:20,25:21,26:l,27:h,28:n},t(i,[2,6]),t(i,[2,7]),t(i,[2,11]),{19:[1,29]},{21:[1,30]},t(i,[2,14]),t(i,[2,15]),t(i,[2,16]),t(i,[2,17]),t(i,[2,18]),t(i,[2,19]),t(i,[2,20]),{11:[1,31]},{16:32,30:[1,33]},{11:[2,24]},t(i,[2,5]),t(i,[2,12]),t(i,[2,13]),t(u,[2,9]),{14:34,31:d},{31:[2,23]},{11:[1,35]},t(u,[2,10])],defaultActions:{5:[2,21],7:[2,2],27:[2,24],33:[2,23]},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="",c=0,l=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,k,x,v,S,w,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(w=void 0,"number"!=typeof(w=i.pop()||d.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),f=w),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(k in S=[],a[m])this.terminals_[k]&&k>2&&S.push("'"+this.terminals_[k]+"'");E=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+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:S})}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,l=d.yyleng,o=d.yytext,c=d.yylineno,y=d.yylloc;break;case 2:if(x=this.productions_[_[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,u.yy,_[1],s,r].concat(h))))return b;x&&(n=n.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),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}},y={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;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[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:return this.begin("open_directive"),28;case 1:return this.begin("type_directive"),29;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),31;case 4:return 30;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 27;case 21:return 26;case 22:return 6;case 23:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\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:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23],inclusive:!0}}};function g(){this.yy={}}return p.lexer=y,g.prototype=p,p.Parser=g,new g}());c.parser=c;const l=c;let h="",d=0;const u=[],p=[],y=[],g=()=>i.j,f=(t,e,n)=>{(0,i.k)(globalThis,t,e,n)},m=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.m)()},_=function(t){h=t,u.push(t)},b=function(){return u},k=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)},v=function(t){y.find((t=>t.id===d-1)).events.push(t)},S=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},$={clear:m,getCommonDb:g,addSection:_,getSections:b,getTasks:k,addTask:x,addTaskOrg:S,addEvent:v,parseDirective:f},E=Object.freeze(Object.defineProperty({__proto__:null,addEvent:v,addSection:_,addTask:x,addTaskOrg:S,clear:m,default:$,getCommonDb:g,getSections:b,getTasks:k,parseDirective:f},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,c=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",l).style("text-anchor","middle").style("font-size",h).style("font-family",d);c.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),c.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(c,o)}}function n(t,n,s,r,a,o,c,l){const h=n.append("switch"),d=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,c,l),i(d,c)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}}();function I(t,e){t.each((function(){var t,n=(0,s.Ys)(this),i=n.text().split(/(\s+|<br>)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;s<i.length;s++)t=i[i.length-1-s],r.push(t),c.text(r.join(" ").trim()),(c.node().getComputedTextLength()>e||"<br>"===t)&&(r.pop(),c.text(r.join(" ").trim()),r="<br>"===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const T=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)},D=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")},L=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"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(I,e.width).node().getBBox(),l=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.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+")"),T(a,e,s),e},C=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(I,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},M=function(t,e,n,s,r,a,o,c,l,h,d){for(const u of e){const e={descr:u.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),p=L(c,e,n,o).height;if(i.l.debug("taskHeight after draw",p),c.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,p),u.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=O(t,u.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)+l+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(0,i.g)().timeline.disableMulticolor&&n++}r-=10},O=function(t,e,n,s,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=L(c,e,n,a).height;o+=h,c.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=c,o},A={db:E,renderer:{setConf:function(t){Object.keys(t).forEach((function(e){conf[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.g)(),o=a.leftMargin?a.leftMargin:50;r.db.clear(),r.parser.parse(t+"\n"),i.l.debug("timeline",r.db);const c=a.securityLevel;let l;"sandbox"===c&&(l=(0,s.Ys)("#i"+e));const h=("sandbox"===c?(0,s.Ys)(l.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+e);h.append("g");const d=r.db.getTasks(),u=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",d),D(h);const p=r.db.getSections();i.l.debug("sections",p);let y=0,g=0,f=0,m=0,_=50+o,b=50;m=50;let k=0,x=!0;p.forEach((function(t){const e=C(h,{number:k,descr:t,section:k,width:150,padding:20,maxHeight:y},a);i.l.debug("sectionHeight before draw",e),y=Math.max(y,e+20)}));let v=0,S=0;i.l.debug("tasks.length",d.length);for(const[s,$]of d.entries()){const t={number:s,descr:$,section:$.section,width:150,padding:20,maxHeight:g},e=C(h,t,a);i.l.debug("taskHeight before draw",e),g=Math.max(g,e+20),v=Math.max(v,$.events.length);let n=0;for(let i=0;i<$.events.length;i++){const t={descr:$.events[i],section:$.section,number:$.section,width:150,padding:20,maxHeight:50};n+=C(h,t,a)}S=Math.max(S,n)}i.l.debug("maxSectionHeight before draw",y),i.l.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach((t=>{const e={number:k,descr:t,section:k,width:150,padding:20,maxHeight:y};i.l.debug("sectionNode",e);const n=h.append("g"),s=L(n,e,k,a);i.l.debug("sectionNode output",s),n.attr("transform",`translate(${_}, 50)`),b+=y+50;const r=d.filter((e=>e.section===t));r.length>0&&M(h,r,k,_,b,g,a,v,S,y,!1),_+=200*Math.max(r.length,1),b=50,k++})):(x=!1,M(h,d,k,_,b,g,a,v,S,y,!0));const w=h.node().getBBox();i.l.debug("bounds",w),u&&h.append("text").text(u).attr("x",w.width/2-o).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),f=x?y+g+150:g+100;h.append("g").attr("class","lineWrapper").append("line").attr("x1",o).attr("y1",f).attr("x2",w.width+3*o).attr("y2",f).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.s)(void 0,h,a.timeline.padding?a.timeline.padding:50,!!a.timeline.useMaxWidth&&a.timeline.useMaxWidth)}},parser:l,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],(0,r.Z)(t["lineColor"+n])?t["lineColor"+n]=(0,a.Z)(t["lineColor"+n],20):t["lineColor"+n]=(0,o.Z)(t["lineColor"+n],20);for(let n=0;n<t.THEME_COLOR_LIMIT;n++){const i=""+(17-3*n);e+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} path {\n fill: ${t["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${t["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${t["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${t["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${i};\n }\n .section-${n-1} line {\n stroke: ${t["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .lineWrapper line{\n stroke: ${t["cScaleLabel"+n]} ;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return e})(t)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${t.git0};\n }\n .section-root text {\n fill: ${t.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`}},1619:(t,e,n)=>{n.d(e,{Z:()=>o});var i=n(1691),s=n(1610);const r=t=>{const{r:e,g:n,b:r}=s.Z.parse(t),a=.2126*i.Z.channel.toLinear(e)+.7152*i.Z.channel.toLinear(n)+.0722*i.Z.channel.toLinear(r);return i.Z.lang.round(a)},a=t=>r(t)>=.5,o=t=>!a(t)}}]); \ No newline at end of file diff --git a/assets/js/655aa231.fc8c5aed.js b/assets/js/655aa231.8a8da211.js similarity index 92% rename from assets/js/655aa231.fc8c5aed.js rename to assets/js/655aa231.8a8da211.js index 228e79771..ca270bf31 100644 --- a/assets/js/655aa231.fc8c5aed.js +++ b/assets/js/655aa231.8a8da211.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2831],{301:e=>{e.exports=JSON.parse('{"label":"Style Guide","permalink":"/docs/tags/style-guide","allTagsPath":"/docs/tags","count":3,"items":[{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2831],{301:e=>{e.exports=JSON.parse('{"label":"Style Guide","permalink":"/docs/tags/style-guide","allTagsPath":"/docs/tags","count":3,"items":[{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/6648.874be767.js b/assets/js/6648.874be767.js new file mode 100644 index 000000000..49904fae0 --- /dev/null +++ b/assets/js/6648.874be767.js @@ -0,0 +1,2 @@ +/*! For license information please see 6648.874be767.js.LICENSE.txt */ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6648],{8221:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(5816));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"}))};t.default=s},5802:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(5816));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M6,2V8H6V8L10,12L6,16V16H6V22H18V16H18V16L14,12L18,8V8H18V2H6M16,16.5V20H8V16.5L12,12.5L16,16.5M12,11.5L8,7.5V4H16V7.5L12,11.5Z"}))};t.default=s},8524:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(5816));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73z"}))};t.default=s},8551:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(5816));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var s=function(e){return r.default.createElement(o.default,a({},e,{path:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}))};t.default=s},5816:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=i(n(7294)),o=i(n(5697));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){var t=e.size,n=void 0===t?24:t,o=e.fill,i=void 0===o?"#000":o,a=e.className,s=e.path;return r.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",className:a},r.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),r.default.createElement("path",{fill:i,d:s}))};a.propTypes={size:o.default.number,fill:o.default.string,className:o.default.string,path:o.default.string.isRequired};var s=a;t.default=s},1688:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=f(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(r,i,a):r[i]=e[i]}r.default=e,n&&n.set(e,r);return r}(n(7294)),o=u(n(5697)),i=n(3824),a=u(n(8374)),s=n(2863),l=n(5082),c=n(6889);function u(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(f=function(e){return e?n:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},d.apply(this,arguments)}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?p(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){return g=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},g(e,t)}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=s.loadStates.initial,b=s.loadStates.loading,y=s.loadStates.loaded,O=s.loadStates.error,S=function(e){var t,n;function o(t){var n;return m(v(n=e.call(this,t)||this),"onClick",(function(){var e=n.state,t=e.loadState,r=e.onLine,o=e.overThreshold;if(r)switch(t){case b:return void(o&&n.cancel(!0));case y:return;case w:case O:return void n.load(!0);default:throw new Error("Wrong state: "+t)}})),m(v(n),"load",(function(e){var t=n.state,r=t.loadState,o=t.url;if(!c.ssr&&y!==r&&b!==r){n.loadStateChange(b,e);var i=n.props.threshold,a="xhr"===n.props.loader?(0,l.xhrLoader)(o):(0,l.imageLoader)(o);if(a.then((function(){n.clear(),n.loadStateChange(y,!1)})).catch((function(e){n.clear(),404===e.status?n.loadStateChange(O,!1,404):n.loadStateChange(O,!1)})),i){var s=(0,l.timeout)(i);s.then((function(){n.loader&&(window.document.dispatchEvent(new CustomEvent("possiblySlowNetwork",{detail:{possiblySlowNetwork:!0}})),n.setState({overThreshold:!0}),n.state.userTriggered||n.cancel(!0))})),n.loader=(0,l.combineCancel)(a,s)}else n.loader=a}})),m(v(n),"onEnter",(function(){if(!n.state.inViewport){n.setState({inViewport:!0});var e=(0,c.selectSrc)({srcSet:n.props.srcSet,maxImageWidth:n.props.srcSet.length>1?(0,c.guessMaxImageWidth)(n.state.dimensions):0,supportsWebp:c.supportsWebp}),t=n.props.getUrl,r=t?t(e):e.src,o=n.props.shouldAutoDownload(h(h({},n.state),{},{size:e.size}));n.setState({pickedSrc:e,shouldAutoDownload:o,url:r},(function(){o&&n.load(!1)}))}})),m(v(n),"onLeave",(function(){n.state.loadState!==b||n.state.userTriggered||(n.setState({inViewport:!1}),n.cancel(!1))})),n.state={loadState:w,connection:c.nativeConnection?{downlink:navigator.connection.downlink,rtt:navigator.connection.rtt,effectiveType:navigator.connection.effectiveType}:null,onLine:!0,overThreshold:!1,inViewport:!1,userTriggered:!1,possiblySlowNetwork:!1},n}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,g(t,n);var s=o.prototype;return s.componentDidMount=function(){var e=this;c.nativeConnection?(this.updateConnection=function(){navigator.onLine&&e.state.loadState===w&&e.setState({connection:{effectiveType:navigator.connection.effectiveType,downlink:navigator.connection.downlink,rtt:navigator.connection.rtt}})},navigator.connection.addEventListener("onchange",this.updateConnection)):this.props.threshold&&(this.possiblySlowNetworkListener=function(t){if(e.state.loadState===w){var n=t.detail.possiblySlowNetwork;!e.state.possiblySlowNetwork&&n&&e.setState({possiblySlowNetwork:n})}},window.document.addEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener)),this.updateOnlineStatus=function(){return e.setState({onLine:navigator.onLine})},this.updateOnlineStatus(),window.addEventListener("online",this.updateOnlineStatus),window.addEventListener("offline",this.updateOnlineStatus)},s.componentWillUnmount=function(){this.clear(),c.nativeConnection?navigator.connection.removeEventListener("onchange",this.updateConnection):this.props.threshold&&window.document.removeEventListener("possiblySlowNetwork",this.possiblySlowNetworkListener),window.removeEventListener("online",this.updateOnlineStatus),window.removeEventListener("offline",this.updateOnlineStatus)},s.clear=function(){this.loader&&(this.loader.cancel(),this.loader=void 0)},s.cancel=function(e){b===this.state.loadState&&(this.clear(),this.loadStateChange(w,e))},s.loadStateChange=function(e,t,n){void 0===n&&(n=null),this.setState({loadState:e,overThreshold:!1,userTriggered:!!t,loadInfo:n})},s.render=function(){var e=this,t=this.props.getIcon(this.state),n=this.props.getMessage(t,this.state);return r.default.createElement(i.Waypoint,{onEnter:this.onEnter,onLeave:this.onLeave},r.default.createElement(a.default,d({},this.props,(0,c.fallbackParams)(this.props),{onClick:this.onClick,icon:t,src:this.state.url||"",onDimensions:function(t){return e.setState({dimensions:t})},message:n})))},o}(r.Component);t.default=S,m(S,"propTypes",{threshold:o.default.number,getUrl:o.default.func,srcSet:o.default.arrayOf(o.default.shape({width:o.default.number.isRequired,src:o.default.string,size:o.default.number,format:o.default.oneOf(["jpeg","jpg","webp","png","gif"])})).isRequired,shouldAutoDownload:o.default.func,getMessage:o.default.func,getIcon:o.default.func,loader:o.default.oneOf(["image","xhr"]),width:o.default.number.isRequired,height:o.default.number.isRequired,placeholder:o.default.oneOfType([o.default.shape({color:o.default.string.isRequired}),o.default.shape({lqip:o.default.string.isRequired})]).isRequired,icons:o.default.object.isRequired,theme:o.default.object.isRequired}),m(S,"defaultProps",{shouldAutoDownload:function(e){var t=e.connection,n=e.size,r=e.threshold;if(e.possiblySlowNetwork)return!1;if(!t)return!0;var o=t.downlink,i=t.rtt;switch(t.effectiveType){case"slow-2g":case"2g":return!1;case"3g":return!!(o&&n&&r)&&8*n/(1e3*o)+i<r;default:return!0}},getMessage:function(e,t){switch(e){case s.icons.noicon:case s.icons.loaded:return null;case s.icons.loading:return"Loading...";case s.icons.load:var n=t.pickedSrc.size;return n?["Click to load (",r.default.createElement("nobr",{key:"nb"},(0,c.bytesToSize)(n)),")"]:"Click to load";case s.icons.offline:return"Your browser is offline. Image not loaded";case s.icons.error:return 404===t.loadInfo?"404. Image not found":"Error. Click to reload";default:throw new Error("Wrong icon: "+e)}},getIcon:function(e){var t=e.loadState,n=e.onLine,r=e.overThreshold,o=e.userTriggered;if(c.ssr)return s.icons.noicon;switch(t){case y:return s.icons.loaded;case b:return r?s.icons.loading:s.icons.noicon;case w:if(n){var i=e.shouldAutoDownload;return void 0===i?s.icons.noicon:o||!i?s.icons.load:s.icons.noicon}return s.icons.offline;case O:return n?s.icons.error:s.icons.offline;default:throw new Error("Wrong state: "+t)}},loader:"xhr"})},2830:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=s(n(7294)),o=s(n(1688)),i=s(n(4891)),a=s(n(4125));function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=function(e){return r.default.createElement(o.default,e)};f.defaultProps=c(c({},o.default.defaultProps),{},{icons:i.default,theme:a.default}),f.propTypes=o.default.propTypes;var d=f;t.default=d},8374:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(r,i,a):r[i]=e[i]}r.default=e,n&&n.set(e,r);return r}(n(7294)),o=s(n(5697)),i=s(n(2185)),a=n(2863);function s(e){return e&&e.__esModule?e:{default:e}}function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},c.apply(this,arguments)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function f(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=a.icons.load,p=a.icons.loading,h=a.icons.loaded,v=a.icons.error,g=a.icons.noicon,m=a.icons.offline,w=function(e){var t,n;function o(t){var n;return(n=e.call(this,t)||this).state={isMounted:!1},n}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n);var a=o.prototype;return a.componentDidMount=function(){this.setState({isMounted:!0}),this.props.onDimensions&&this.dimensionElement&&this.props.onDimensions({width:this.dimensionElement.clientWidth||this.dimensionElement.parentNode.clientWidth,height:this.dimensionElement.clientHeight||this.dimensionElement.parentNode.clientHeight})},a.renderIcon=function(e){var t=e.icon,n=e.icons,o=e.iconColor,a=e.iconSize,s=e.theme,l=n[t];if(!l)return null;var c=(0,i.default)({width:a+100,height:a,color:o},s.icon);return r.default.createElement("div",c,[r.default.createElement(l,{fill:o,size:a,key:"icon"}),r.default.createElement("br",{key:"br"}),this.props.message])},a.renderImage=function(e){var t=this;return e.icon===h?r.default.createElement("img",c({},(0,i.default)(e.theme.img),{src:e.src,alt:e.alt,width:e.width,height:e.height})):r.default.createElement("svg",c({},(0,i.default)(e.theme.img),{width:e.width,height:e.height,ref:function(e){return t.dimensionElement=e}}))},a.renderNoscript=function(e){return this.state.isMounted?null:r.default.createElement("noscript",null,r.default.createElement("img",c({},(0,i.default)(e.theme.img,e.theme.noscript),{src:e.nsSrc,srcSet:e.nsSrcSet,alt:e.alt,width:e.width,height:e.height})))},a.render=function(){var e,t=this.props,n=t.placeholder,o=t.theme;return e=t.icon===h?{}:n.lqip?{backgroundImage:'url("'+n.lqip+'")'}:{backgroundColor:n.color},r.default.createElement("div",c({},(0,i.default)(o.placeholder,e,t.style,t.className),{onClick:this.props.onClick,onKeyPress:this.props.onClick,ref:this.props.innerRef}),this.renderImage(t),this.renderNoscript(t),this.renderIcon(t))},o}(r.PureComponent);t.default=w,f(w,"propTypes",{src:o.default.string.isRequired,width:o.default.number.isRequired,height:o.default.number.isRequired,placeholder:o.default.oneOfType([o.default.shape({color:o.default.string.isRequired}),o.default.shape({lqip:o.default.string.isRequired})]).isRequired,icon:o.default.oneOf([d,p,h,v,g,m]).isRequired,icons:o.default.object.isRequired,theme:o.default.object.isRequired,alt:o.default.string,iconColor:o.default.string,iconSize:o.default.number,style:o.default.object,className:o.default.string,onClick:o.default.func,onDimensions:o.default.func,message:o.default.node,innerRef:o.default.func,nsSrc:o.default.string,nsSrcSet:o.default.string}),f(w,"defaultProps",{iconColor:"#fff",iconSize:64})},2185:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(){for(var e,t=[],n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];for(var i=0,a=r;i<a.length;i++){var s=a[i];if(s instanceof Object)Object.assign(e||(e={}),s);else if(void 0===s||!1===s);else{if("string"!=typeof s)throw new Error("Unexpected value "+s);t.push(s)}}return{className:t.length>1?t.join(" "):t[0],style:e}}},2863:(e,t)=>{t.__esModule=!0,t.loadStates=t.icons=void 0;var n="loading",r="loaded",o="error",i={load:"load",loading:n,loaded:r,error:o,noicon:"noicon",offline:"offline"};t.icons=i;var a={initial:"initial",loading:n,loaded:r,error:o};t.loadStates=a},6889:(e,t)=>{t.__esModule=!0,t.supportsWebp=t.ssr=t.selectSrc=t.nativeConnection=t.guessMaxImageWidth=t.fallbackParams=t.bytesToSize=void 0;var n="undefined"==typeof window||"ReactSnap"===window.navigator.userAgent;t.ssr=n;var r=!n&&!!window.navigator.connection;t.nativeConnection=r;t.guessMaxImageWidth=function(e,t){if(n)return 0;t||(t=window);var r,o=e.width,i=t.screen,a=i.width,s=i.height,l=document.documentElement,c=t.innerWidth||l.clientWidth,u=t.innerHeight||l.clientHeight,f=t.devicePixelRatio||1;if(a>c){var d=document.getElementsByTagName("body")[0],p=c-o;r=(d.clientHeight>u||d.clientHeight>s)&&p<=15?a-p:o/c*a}else r=o;return r*f};t.bytesToSize=function(e){var t=["Bytes","KB","MB","GB","TB"];if(0===e)return"n/a";var n=parseInt(Math.floor(Math.log(e)/Math.log(1024)),10);return 0===n?e+" "+t[n]:(e/Math.pow(1024,n)).toFixed(1)+" "+t[n]};var o=function(){if(n)return!1;var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))&&0===e.toDataURL("image/webp").indexOf("data:image/webp")}();t.supportsWebp=o;var i=function(e){return"webp"===e.format||e.src&&e.src.match(/\.webp($|\?.*)/i)};t.selectSrc=function(e){var t,n,r=e.srcSet,o=e.maxImageWidth,a=e.supportsWebp;if(0===r.length)throw new Error("Need at least one item in srcSet");if(a)0===(t=r.filter(i)).length&&(t=r);else if(0===(t=r.filter((function(e){return!i(e)}))).length)throw new Error("Need at least one supported format item in srcSet");var s=t.filter((function(e){return e.width>=o}));return 0===s.length?(s=t,n=Math.max.apply(null,s.map((function(e){return e.width})))):n=Math.min.apply(null,s.map((function(e){return e.width}))),t.filter((function(e){return e.width===n}))[0]};t.fallbackParams=function(e){var t=e.srcSet,r=e.getUrl;if(!n)return{};var o=t.filter((function(e){return!i(e)})),a=o[0];return{nsSrcSet:o.map((function(e){return(r?r(e):e.src)+" "+e.width+"w"})).join(","),nsSrc:r?r(a):a.src,ssr:n}}},4891:(e,t,n)=>{t.__esModule=!0,t.default=void 0;var r,o=c(n(8221)),i=c(n(8524)),a=c(n(8551)),s=c(n(5802)),l=n(2863);function c(e){return e&&e.__esModule?e:{default:e}}var u=l.icons.load,f=l.icons.loading,d=l.icons.loaded,p=l.icons.error,h=l.icons.noicon,v=l.icons.offline,g=((r={})[u]=o.default,r[f]=s.default,r[d]=null,r[p]=a.default,r[h]=null,r[v]=i.default,r);t.default=g},5082:(e,t,n)=>{t.__esModule=!0,t.xhrLoader=t.timeout=t.imageLoader=t.combineCancel=void 0;var r=n(1499);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.combineCancel=function(e,t){if(!t)return e;var n=e.then((function(e){return e}),(function(e){return e}));return n.cancel=function(){e.cancel(),t.cancel()},n};t.timeout=function(e){var t,n=new Promise((function(n){t=setTimeout(n,e)}));return n.cancel=function(){clearTimeout(t),t=void 0},n};var s=function(e){var t=new Image,n=new Promise((function(n,r){t.onload=n,t.onabort=t.onerror=function(){return r({})},t.src=e}));return n.cancel=function(){if(!t)throw new Error("Already canceled");t.onload=t.onabort=t.onerror=void 0,t.src="",t=void 0},n};t.imageLoader=s;t.xhrLoader=function(e,t){var n=new r.UnfetchAbortController,o=n.signal,a=new Promise((function(n,a){return(0,r.unfetch)(e,i(i({},t),{},{signal:o})).then((function(t){t.ok?t.blob().then((function(){return s(e)})).then(n):a({status:t.status})}),a)}));return a.cancel=function(){if(!n)throw new Error("Already canceled");n.abort(),n=void 0},a}},4125:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default={placeholder:{backgroundSize:"cover",backgroundRepeat:"no-repeat",position:"relative"},img:{width:"100%",height:"auto",maxWidth:"100%",marginBottom:"-4px"},icon:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",textAlign:"center"},noscript:{position:"absolute",top:0,left:0}}},1499:(e,t)=>{t.__esModule=!0,t.unfetch=t.UnfetchAbortController=void 0;t.UnfetchAbortController=function(){var e=this;this.signal={onabort:function(){}},this.abort=function(){return e.signal.onabort()}};t.unfetch=function(e,t){return t=t||{},new Promise((function(n,r){var o=new XMLHttpRequest;for(var i in o.open(t.method||"get",e,!0),t.headers)o.setRequestHeader(i,t.headers[i]);function a(){var e,t=[],n=[],r={};return o.getAllResponseHeaders().replace(/^(.*?):\s*?([\s\S]*?)$/gm,(function(o,i,a){t.push(i=i.toLowerCase()),n.push([i,a]),e=r[i],r[i]=e?e+","+a:a})),{ok:2==(o.status/100|0),status:o.status,statusText:o.statusText,url:o.responseURL,clone:a,text:function(){return Promise.resolve(o.responseText)},json:function(){return Promise.resolve(o.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([o.response]))},headers:{keys:function(){return t},entries:function(){return n},get:function(e){return r[e.toLowerCase()]},has:function(e){return e.toLowerCase()in r}}}}o.withCredentials="include"===t.credentials,o.onload=function(){n(a())},o.onerror=r,t.signal&&(t.signal.onabort=function(){o.onerror=o.onload=void 0,o.abort()}),o.send(t.body)}))}},7164:(e,t,n)=>{var r;t.Z=void 0;var o=((r=n(2830))&&r.__esModule?r:{default:r}).default;t.Z=o},5944:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var r=n(7164),o=n(7325),i=n(5893);function a(e,t){switch(e){case"noicon":case"loaded":return null;case"loading":return(0,o.I)({id:"theme.IdealImageMessage.loading",message:"Loading...",description:"When the full-scale image is loading"});case"load":{const{pickedSrc:e}=t,{size:n}=e,r=n?` (${function(e){const t=["B","KB","MB","GB","TB"];if(0===e)return"n/a";const n=Math.floor(Math.log(e)/Math.log(1024));return 0===n?`${e} ${t[n]}`:`${(e/1024**n).toFixed(1)} ${t[n]}`}(n)})`:"";return(0,o.I)({id:"theme.IdealImageMessage.load",message:"Click to load{sizeMessage}",description:"To prompt users to load the full image. sizeMessage is a parenthesized size figure."},{sizeMessage:r})}case"offline":return(0,o.I)({id:"theme.IdealImageMessage.offline",message:"Your browser is offline. Image not loaded",description:"When the user is viewing an offline document"});case"error":{const{loadInfo:e}=t;return 404===e?(0,o.I)({id:"theme.IdealImageMessage.404error",message:"404. Image not found",description:"When the image is not found"}):(0,o.I)({id:"theme.IdealImageMessage.error",message:"Error. Click to reload",description:"When the image fails to load for unknown error"})}default:throw new Error(`Wrong icon: ${e}`)}}function s(e){const{img:t,...n}=e;return"string"==typeof t||"default"in t?(0,i.jsx)("img",{src:"string"==typeof t?t:t.default,...n}):(0,i.jsx)(r.Z,{...n,height:t.src.height??100,width:t.src.width??100,placeholder:{lqip:t.preSrc},src:t.src.src,srcSet:t.src.images.map((e=>({...e,src:e.path}))),getMessage:a})}},3824:(e,t,n)=>{n.r(t),n.d(t,{Waypoint:()=>j});var r=n(5068),o=!("undefined"==typeof window||!window.document||!window.document.createElement);var i=void 0;function a(){return void 0===i&&(i=function(){if(!o)return!1;if(!window.addEventListener||!window.removeEventListener||!Object.defineProperty)return!1;var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t)}catch(r){}return e}()),i}function s(e){e.handlers===e.nextHandlers&&(e.nextHandlers=e.handlers.slice())}function l(e){this.target=e,this.events={}}l.prototype.getEventHandlers=function(e,t){var n,r=String(e)+" "+String((n=t)?!0===n?100:(n.capture<<0)+(n.passive<<1)+(n.once<<2):0);return this.events[r]||(this.events[r]={handlers:[],handleEvent:void 0},this.events[r].nextHandlers=this.events[r].handlers),this.events[r]},l.prototype.handleEvent=function(e,t,n){var r=this.getEventHandlers(e,t);r.handlers=r.nextHandlers,r.handlers.forEach((function(e){e&&e(n)}))},l.prototype.add=function(e,t,n){var r=this,o=this.getEventHandlers(e,n);s(o),0===o.nextHandlers.length&&(o.handleEvent=this.handleEvent.bind(this,e,n),this.target.addEventListener(e,o.handleEvent,n)),o.nextHandlers.push(t);var i=!0;return function(){if(i){i=!1,s(o);var a=o.nextHandlers.indexOf(t);o.nextHandlers.splice(a,1),0===o.nextHandlers.length&&(r.target&&r.target.removeEventListener(e,o.handleEvent,n),o.handleEvent=void 0)}}};var c="__consolidated_events_handlers__";function u(e,t,n,r){e[c]||(e[c]=new l(e));var o=function(e){if(e)return a()?e:!!e.capture}(r);return e[c].add(t,n,o)}var f=n(7294),d=n(5834);function p(e,t){var n,r=(n=e,!isNaN(parseFloat(n))&&isFinite(n)?parseFloat(n):"px"===n.slice(-2)?parseFloat(n.slice(0,-2)):void 0);if("number"==typeof r)return r;var o=function(e){if("%"===e.slice(-1))return parseFloat(e.slice(0,-1))/100}(e);return"number"==typeof o?o*t:void 0}var h="above",v="inside",g="below",m="invisible";function w(e){return"string"==typeof e.type}var b;var y=[];function O(e){y.push(e),b||(b=setTimeout((function(){var e;for(b=null;e=y.shift();)e()}),0));var t=!0;return function(){if(t){t=!1;var n=y.indexOf(e);-1!==n&&(y.splice(n,1),!y.length&&b&&(clearTimeout(b),b=null))}}}var S="undefined"!=typeof window,E={debug:!1,scrollableAncestor:void 0,children:void 0,topOffset:"0px",bottomOffset:"0px",horizontal:!1,onEnter:function(){},onLeave:function(){},onPositionChange:function(){},fireOnRapidScroll:!0},j=function(e){function t(t){var n;return(n=e.call(this,t)||this).refElement=function(e){n._ref=e},n}(0,r.Z)(t,e);var o=t.prototype;return o.componentDidMount=function(){var e=this;S&&(this.cancelOnNextTick=O((function(){e.cancelOnNextTick=null;var t=e.props,n=t.children;t.debug;!function(e,t){if(e&&!w(e)&&!t)throw new Error("<Waypoint> needs a DOM element to compute boundaries. The child you passed is neither a DOM element (e.g. <div>) nor does it use the innerRef prop.\n\nSee https://goo.gl/LrBNgw for more info.")}(n,e._ref),e._handleScroll=e._handleScroll.bind(e),e.scrollableAncestor=e._findScrollableAncestor(),e.scrollEventListenerUnsubscribe=u(e.scrollableAncestor,"scroll",e._handleScroll,{passive:!0}),e.resizeEventListenerUnsubscribe=u(window,"resize",e._handleScroll,{passive:!0}),e._handleScroll(null)})))},o.componentDidUpdate=function(){var e=this;S&&this.scrollableAncestor&&(this.cancelOnNextTick||(this.cancelOnNextTick=O((function(){e.cancelOnNextTick=null,e._handleScroll(null)}))))},o.componentWillUnmount=function(){S&&(this.scrollEventListenerUnsubscribe&&this.scrollEventListenerUnsubscribe(),this.resizeEventListenerUnsubscribe&&this.resizeEventListenerUnsubscribe(),this.cancelOnNextTick&&this.cancelOnNextTick())},o._findScrollableAncestor=function(){var e=this.props,t=e.horizontal,r=e.scrollableAncestor;if(r)return function(e){return"window"===e?n.g.window:e}(r);for(var o=this._ref;o.parentNode;){if((o=o.parentNode)===document.body)return window;var i=window.getComputedStyle(o),a=(t?i.getPropertyValue("overflow-x"):i.getPropertyValue("overflow-y"))||i.getPropertyValue("overflow");if("auto"===a||"scroll"===a||"overlay"===a)return o}return window},o._handleScroll=function(e){if(this._ref){var t=this._getBounds(),n=function(e){return e.viewportBottom-e.viewportTop==0?m:e.viewportTop<=e.waypointTop&&e.waypointTop<=e.viewportBottom||e.viewportTop<=e.waypointBottom&&e.waypointBottom<=e.viewportBottom||e.waypointTop<=e.viewportTop&&e.viewportBottom<=e.waypointBottom?v:e.viewportBottom<e.waypointTop?g:e.waypointTop<e.viewportTop?h:m}(t),r=this._previousPosition,o=this.props,i=(o.debug,o.onPositionChange),a=o.onEnter,s=o.onLeave,l=o.fireOnRapidScroll;if(this._previousPosition=n,r!==n){var c={currentPosition:n,previousPosition:r,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom};i.call(this,c),n===v?a.call(this,c):r===v&&s.call(this,c),l&&(r===g&&n===h||r===h&&n===g)&&(a.call(this,{currentPosition:v,previousPosition:r,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom}),s.call(this,{currentPosition:n,previousPosition:v,event:e,waypointTop:t.waypointTop,waypointBottom:t.waypointBottom,viewportTop:t.viewportTop,viewportBottom:t.viewportBottom}))}}},o._getBounds=function(){var e,t,n=this.props,r=n.horizontal,o=(n.debug,this._ref.getBoundingClientRect()),i=o.left,a=o.top,s=o.right,l=o.bottom,c=r?i:a,u=r?s:l;this.scrollableAncestor===window?(e=r?window.innerWidth:window.innerHeight,t=0):(e=r?this.scrollableAncestor.offsetWidth:this.scrollableAncestor.offsetHeight,t=r?this.scrollableAncestor.getBoundingClientRect().left:this.scrollableAncestor.getBoundingClientRect().top);var f=this.props,d=f.bottomOffset;return{waypointTop:c,waypointBottom:u,viewportTop:t+p(f.topOffset,e),viewportBottom:t+e-p(d,e)}},o.render=function(){var e=this,t=this.props.children;if(!t)return f.createElement("span",{ref:this.refElement,style:{fontSize:0}});if(w(t)||(0,d.isForwardRef)(t)){return f.cloneElement(t,{ref:function(n){e.refElement(n),t.ref&&("function"==typeof t.ref?t.ref(n):t.ref.current=n)}})}return f.cloneElement(t,{innerRef:this.refElement})},t}(f.PureComponent);j.above=h,j.below=g,j.inside=v,j.invisible=m,j.defaultProps=E,j.displayName="Waypoint"},5058:(e,t)=>{var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),f=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),g=Symbol.for("react.offscreen");function m(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case i:case s:case a:case d:case p:return e;default:switch(e=e&&e.$$typeof){case u:case c:case f:case v:case h:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.isForwardRef=function(e){return m(e)===f}},5834:(e,t,n)=>{e.exports=n(5058)},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>a});var r=n(7294);const o={},i=r.createContext(o);function a(e){const t=r.useContext(i);return r.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:a(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1765.bbf8e0e8.js.LICENSE.txt b/assets/js/6648.874be767.js.LICENSE.txt similarity index 100% rename from assets/js/1765.bbf8e0e8.js.LICENSE.txt rename to assets/js/6648.874be767.js.LICENSE.txt diff --git a/assets/js/67a57efa.0470c88d.js b/assets/js/67a57efa.0470c88d.js new file mode 100644 index 000000000..4a2b11ca6 --- /dev/null +++ b/assets/js/67a57efa.0470c88d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[945],{642:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=s(5893),i=s(1151),o=s(1872);const r={id:"ssjs-if-and-switch",title:"SSJS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of SSJS flow control.",image:"img/og/og-image-ssjs-if-and-switch.png",tags:["Marketing Cloud","SSJS"]},a=void 0,l={id:"ssjs/ssjs-if-and-switch",title:"SSJS If & Switch",description:"Deep dive into the two pillars of SSJS flow control.",source:"@site/docs/ssjs/ssjs-if-and-switch.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-if-and-switch",permalink:"/docs/ssjs/ssjs-if-and-switch",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-if-and-switch.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1632606565,formattedLastUpdatedAt:"Sep 25, 2021",frontMatter:{id:"ssjs-if-and-switch",title:"SSJS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of SSJS flow control.",image:"img/og/og-image-ssjs-if-and-switch.png",tags:["Marketing Cloud","SSJS"]},sidebar:"docs",previous:{title:"SSJS",permalink:"/docs/category/ssjs"},next:{title:"Loops",permalink:"/docs/ssjs/ssjs-loops"}},c={},d=[{value:"If Statements",id:"if-statements",level:2},{value:"And, Or, Brackets",id:"and-or-brackets",level:3},{value:"Boolean evaluation",id:"boolean-evaluation",level:3},{value:"Flip Booleans with Bang",id:"flip-booleans-with-bang",level:3},{value:"If Shorthand",id:"if-shorthand",level:3},{value:"Ternary",id:"ternary",level:3},{value:"Shortcircuiting",id:"shortcircuiting",level:2},{value:"Shortcircuiting OR",id:"shortcircuiting-or",level:3},{value:"Shortcircuiting AND",id:"shortcircuiting-and",level:3},{value:"Switch Statement",id:"switch-statement",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.m,{content:"Deep dive into the two pillars of SSJS flow control"}),"\n",(0,n.jsx)(t.h2,{id:"if-statements",children:"If Statements"}),"\n",(0,n.jsxs)(t.p,{children:["The most popular way of handling conditional logic is with the ",(0,n.jsx)(t.code,{children:"if"})," statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{2} title="Create a segment of customers that made more than two purchases"',children:"for (var customer in customers) {\n if (customer.purchases > 2) {\n marketingSegment.push(customer.email);\n };\n};\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Basic ",(0,n.jsx)(t.code,{children:"if"})," can be extended by adding optional ",(0,n.jsx)(t.code,{children:"else if"})," for an additional condition with the different outcome or optional ",(0,n.jsx)(t.code,{children:"else"})," for all scenarios not caught by above conditions."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{2,4,6} title="Create multiple segments for different levels of customers"',children:"for (var customer in customers) {\n if (customer.purchases > 10) {\n goldCustomerSegment.push(customer.email);\n } else if (customer.purchases > 5) {\n silverCustomerSegment.push(customer.email);\n } else {\n bronzeCustomerSegment.push(customer.email);\n };\n};\n"})}),"\n",(0,n.jsx)(t.h3,{id:"and-or-brackets",children:"And, Or, Brackets"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"if"})," statement is even more powerful if you enhance your conditions with the ORs (",(0,n.jsx)(t.code,{children:"||"}),"), ANDs (",(0,n.jsx)(t.code,{children:"&&"}),") and brackets:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{2,4} title="Split customers into two segments depending on a condition group"',children:"for (var customer in customers) {\n if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {\n reengagementCampaignSegment.push(customer);\n } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {\n upsellCampaignSegment.push(customer);\n };\n};\n"})}),"\n",(0,n.jsx)(t.h3,{id:"boolean-evaluation",children:"Boolean evaluation"}),"\n",(0,n.jsx)(t.p,{children:"You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{3} title="If the customer has domain of your competiton, add him to blocklist"',children:"for (var customer in customers) {\n var competitionUser = customer.email.includes('@competition.com');\n if (competitionUser) { // if comptetitionUser is true, block will be exectuted\n blocklist.push(customer);\n };\n};\n"})}),"\n",(0,n.jsx)(t.h3,{id:"flip-booleans-with-bang",children:"Flip Booleans with Bang"}),"\n",(0,n.jsxs)(t.p,{children:["Bang symbol (",(0,n.jsx)(t.code,{children:"!"}),") can be used to flip the value of a boolean:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{3} title="If the customer does not have competition domain in email, add him to campaign"',children:"for (var customer in customers) {\n var competitionUser = customer.email.toLowerCase().indexOf('@competition.com') >= 0;\n if (!competitionUser) { // if not competition user, execute content\n campaignSegment.push(customer);\n };\n};\n"})}),"\n",(0,n.jsx)(t.p,{children:"Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean."}),"\n",(0,n.jsxs)(t.p,{children:["Falsy values in JavaScript are: ",(0,n.jsx)(t.code,{children:"false"}),", ",(0,n.jsx)(t.code,{children:"0"}),", empty string ",(0,n.jsx)(t.code,{children:'""'}),", ",(0,n.jsx)(t.code,{children:"null"}),", ",(0,n.jsx)(t.code,{children:"undefined"}),", ",(0,n.jsx)(t.code,{children:"NaN"}),".\nAll other possible values are considered truthy."]}),"\n",(0,n.jsx)(t.p,{children:"This is very useful, as it allows you to leverage boolean evaluation on truthy values:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{3} title="Applies either personalized name or default value"',children:"for (var customer in customers) {\n var helloPersonalization;\n if (customer.firstName) { // if customer.firstName has characters, it is truthy\n helloPersonalization = customer.firstName;\n } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy\n helloPersonalization = 'Valued Customer';\n };\n};\n"})}),"\n",(0,n.jsxs)(t.p,{children:['To make it clear - above code is very "dirty" and can be written much better (for example without ',(0,n.jsx)(t.code,{children:"else if"})," by applying default value on variable initialization). You will find an example of how to write it better later."]}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["You can level up the use of this feature by leveraging double bang ",(0,n.jsx)(t.code,{children:"!!"})," to convert truthy/falsy value into an (appropriate) boolean."]}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true"',children:"var isOptedIn = !!optInDate;\n"})})]}),"\n",(0,n.jsx)(t.h3,{id:"if-shorthand",children:"If Shorthand"}),"\n",(0,n.jsxs)(t.p,{children:["For simple, one-line ",(0,n.jsx)(t.code,{children:"if"})," statements, there is also a one-line shorthand:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="If the customer is opted in, send an email"',children:"if (isOptedIn) sendEmail(emailAddress, emailID);\n"})}),"\n",(0,n.jsxs)(t.p,{children:["You could probably use simple ",(0,n.jsx)(t.code,{children:"if"})," conditions for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out."]}),"\n",(0,n.jsx)(t.h3,{id:"ternary",children:"Ternary"}),"\n",(0,n.jsxs)(t.p,{children:["If a simple ",(0,n.jsx)(t.code,{children:"if"})," statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:"{2-7} title=\"Dirty if statement using basic 'if'\"",children:"for (var customer in customers) {\n var helloPersonalization;\n if (customer.firstName) {\n helloPersonalization = 'Hello' + customer.firstName;\n } else if (!customer.firstName) {\n helloPersonalization = 'Hello Valued Customer';\n };\n};\n"})}),"\n",(0,n.jsx)(t.p,{children:"we can use a clean ternary:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{2} title="Same logic changed to a ternary"',children:"for (var customer in customers) {\n var helloPersonalization = customer.firstName ? 'Hello' + customer.firstName : 'Hello Valued Customer';\n};\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: ",(0,n.jsx)(t.code,{children:"variable = condition ? valueIfTrue : valueIfFalse;"}),". So in the example above, if the ",(0,n.jsx)(t.code,{children:"customer.firstName"})," is not empty (is truthy), it will be pushed as the value of ",(0,n.jsx)(t.code,{children:"helloPersonalization"}),". If it is empty, the default value will be assigned instead."]}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["The ternary has more uses not than just the standard ",(0,n.jsx)(t.code,{children:"if"})," statement. It is awesome text customization with pseudo-interpolation:"]}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Fill in the sentence with different words depending on boolean value of isOptedIn"',children:"Write('You are ' + (isOptedIn ? 'opted in' : 'not opted in'));\n"})}),(0,n.jsxs)(t.p,{children:["Ternaries are not limited to variables and strings. They can also run functions or ",(0,n.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs#debugging-variable",children:"debugging"}),":"]}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="If isLoggedIn is false, the redirectToLogInPage function will be executed"',children:"!isLoggedIn ? redirectToLogInPage() : null;\n"})})]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"shortcircuiting",children:"Shortcircuiting"}),"\n",(0,n.jsxs)(t.p,{children:["We already covered using OR ",(0,n.jsx)(t.code,{children:"||"})," + AND ",(0,n.jsx)(t.code,{children:"&&"})," operators. But by using them correctly, you can optimize the speed of your scripts greatly."]}),"\n",(0,n.jsx)(t.h3,{id:"shortcircuiting-or",children:"Shortcircuiting OR"}),"\n",(0,n.jsxs)(t.p,{children:["OR evaluates to ",(0,n.jsx)(t.code,{children:"true"})," if ",(0,n.jsx)(t.em,{children:"at least one"})," value is equal to ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["If the left side of the OR evaluates to ",(0,n.jsx)(t.code,{children:"true"}),", we know for sure that the whole statement is ",(0,n.jsx)(t.code,{children:"true"}),". Checking the value of the right side is not needed. And JavaScript knows this too."]}),"\n",(0,n.jsx)(t.p,{children:"Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{2} title="If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign"',children:"for (var customer in customers) {\n if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {\n exclusionSegment.push(customer);\n };\n};\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the ",(0,n.jsx)(t.code,{children:"lastPurchaseDate"})," is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish."]}),"\n",(0,n.jsx)(t.h3,{id:"shortcircuiting-and",children:"Shortcircuiting AND"}),"\n",(0,n.jsxs)(t.p,{children:["Similar logic can be applied to AND operator. ",(0,n.jsx)(t.code,{children:"&&"})," evaluates to ",(0,n.jsx)(t.code,{children:"true"})," only if ",(0,n.jsx)(t.em,{children:"both sides"})," are ",(0,n.jsx)(t.code,{children:"true"}),". If we have a more straightforward condition or we suspect it might frequently evaluate to ",(0,n.jsx)(t.code,{children:"false"}),", we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{1} title="If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid"',children:"if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {\n var isLoggedIn = true;\n};\n"})}),"\n",(0,n.jsx)(t.p,{children:"In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password."}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"switch-statement",children:"Switch Statement"}),"\n",(0,n.jsxs)(t.p,{children:["Sometimes you have many options for a single condition. You could write it with a simple ",(0,n.jsx)(t.code,{children:"if"}),", but the ",(0,n.jsx)(t.code,{children:"switch"})," might be much more readable than a long list of ",(0,n.jsx)(t.code,{children:"else if"})," statements with nearly identical conditions. In SSJS switch is especially useful for centralized handler page you query from multiple front ends."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Return the error type based on the code"',children:"function errorDescription(error) {\n switch (error.code) {\n case 400:\n return 'Bad Request';\n case 401:\n return 'Unauthorized';\n case 403:\n return 'Forbidden';\n case 404:\n return 'Not Found'\n default:\n return 'Unknown Error';\n };\n};\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Some things to remember when working with a ",(0,n.jsx)(t.code,{children:"switch"}),":"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["If multiple cases fulfil the condition, a ",(0,n.jsx)(t.code,{children:"switch"})," will execute the first from the top."]}),"\n",(0,n.jsx)(t.li,{children:"You can assign multiple cases to the same code block:"}),"\n"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{3-5,8-9} title="Return either sum or difference of two values (sum by default)"',children:"var outcome;\nswitch (a, operation, b) {\n default:\n case '+':\n case 'plus':\n outcome = a + b;\n break;\n case '-':\n case 'minus':\n outcome = a - b;\n break;\n};\n"})}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Use either ",(0,n.jsx)(t.code,{children:"break"})," statement to end each case or use the ",(0,n.jsx)(t.code,{children:"return"})," statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen."]}),"\n",(0,n.jsxs)(t.li,{children:["Always use ",(0,n.jsx)(t.code,{children:"default"})," statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered."]}),"\n",(0,n.jsxs)(t.li,{children:["Cases in a ",(0,n.jsx)(t.code,{children:"switch"})," are using strict comparison (",(0,n.jsx)(t.code,{children:"==="}),") for evaluation, so the provided value must match the case not only by value but also by type. A string value of ",(0,n.jsx)(t.code,{children:"'0'"})," won't trigger an integer ",(0,n.jsx)(t.code,{children:"0"})," case."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1872:(e,t,s)=>{s.d(t,{m:()=>o});s(7294);const n="leadText_qzwo";var i=s(5893);const o=e=>{let{content:t}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:n,children:t})})}},1151:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>r});var n=s(7294);const i={},o=n.createContext(i);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67a57efa.7afccd58.js b/assets/js/67a57efa.7afccd58.js deleted file mode 100644 index 746185974..000000000 --- a/assets/js/67a57efa.7afccd58.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[945],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),u=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=u(n),d=i,h=m["".concat(l,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(h,r(r({ref:t},c),{},{components:n})):a.createElement(h,r({ref:t},c))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var u=2;u<o;u++)r[u]=n[u];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>o});var a=n(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},8188:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var a=n(7462),i=(n(7294),n(4137)),o=n(1872);const r={id:"ssjs-if-and-switch",title:"SSJS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of SSJS flow control.",image:"img/og/og-image-ssjs-if-and-switch.png",tags:["Marketing Cloud","SSJS"]},s=void 0,l={unversionedId:"ssjs/ssjs-if-and-switch",id:"ssjs/ssjs-if-and-switch",title:"SSJS If & Switch",description:"Deep dive into the two pillars of SSJS flow control.",source:"@site/docs/ssjs/ssjs-if-and-switch.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-if-and-switch",permalink:"/docs/ssjs/ssjs-if-and-switch",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-if-and-switch.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1632606565,formattedLastUpdatedAt:"Sep 25, 2021",frontMatter:{id:"ssjs-if-and-switch",title:"SSJS If & Switch",sidebar_label:"If & Switch",description:"Deep dive into the two pillars of SSJS flow control.",image:"img/og/og-image-ssjs-if-and-switch.png",tags:["Marketing Cloud","SSJS"]},sidebar:"docs",previous:{title:"SSJS",permalink:"/docs/category/ssjs"},next:{title:"Loops",permalink:"/docs/ssjs/ssjs-loops"}},u={},c=[{value:"If Statements",id:"if-statements",level:2},{value:"And, Or, Brackets",id:"and-or-brackets",level:3},{value:"Boolean evaluation",id:"boolean-evaluation",level:3},{value:"Flip Booleans with Bang",id:"flip-booleans-with-bang",level:3},{value:"If Shorthand",id:"if-shorthand",level:3},{value:"Ternary",id:"ternary",level:3},{value:"Shortcircuiting",id:"shortcircuiting",level:2},{value:"Shortcircuiting OR",id:"shortcircuiting-or",level:3},{value:"Shortcircuiting AND",id:"shortcircuiting-and",level:3},{value:"Switch Statement",id:"switch-statement",level:2}],m={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,i.kt)(p,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(o.m,{content:"Deep dive into the two pillars of SSJS flow control",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"if-statements"},"If Statements"),(0,i.kt)("p",null,"The most popular way of handling conditional logic is with the ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2} title="Create a segment of customers that made more than two purchases"',"{2}":!0,title:'"Create',a:!0,segment:!0,of:!0,customers:!0,that:!0,made:!0,more:!0,than:!0,two:!0,'purchases"':!0},"for (var customer in customers) {\n if (customer.purchases > 2) {\n marketingSegment.push(customer.email);\n };\n};\n")),(0,i.kt)("p",null,"Basic ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," can be extended by adding optional ",(0,i.kt)("inlineCode",{parentName:"p"},"else if")," for an additional condition with the different outcome or optional ",(0,i.kt)("inlineCode",{parentName:"p"},"else")," for all scenarios not caught by above conditions."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2,4,6} title="Create multiple segments for different levels of customers"',"{2,4,6}":!0,title:'"Create',multiple:!0,segments:!0,for:!0,different:!0,levels:!0,of:!0,'customers"':!0},"for (var customer in customers) {\n if (customer.purchases > 10) {\n goldCustomerSegment.push(customer.email);\n } else if (customer.purchases > 5) {\n silverCustomerSegment.push(customer.email);\n } else {\n bronzeCustomerSegment.push(customer.email);\n };\n};\n")),(0,i.kt)("h3",{id:"and-or-brackets"},"And, Or, Brackets"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement is even more powerful if you enhance your conditions with the ORs (",(0,i.kt)("inlineCode",{parentName:"p"},"||"),"), ANDs (",(0,i.kt)("inlineCode",{parentName:"p"},"&&"),") and brackets:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2,4} title="Split customers into two segments depending on a condition group"',"{2,4}":!0,title:'"Split',customers:!0,into:!0,two:!0,segments:!0,depending:!0,on:!0,a:!0,condition:!0,'group"':!0},"for (var customer in customers) {\n if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {\n reengagementCampaignSegment.push(customer);\n } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {\n upsellCampaignSegment.push(customer);\n };\n};\n")),(0,i.kt)("h3",{id:"boolean-evaluation"},"Boolean evaluation"),(0,i.kt)("p",null,"You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="If the customer has domain of your competiton, add him to blocklist"',"{3}":!0,title:'"If',the:!0,customer:!0,has:!0,domain:!0,of:!0,your:!0,"competiton,":!0,add:!0,him:!0,to:!0,'blocklist"':!0},"for (var customer in customers) {\n var competitionUser = customer.email.includes('@competition.com');\n if (competitionUser) { // if comptetitionUser is true, block will be exectuted\n blocklist.push(customer);\n };\n};\n")),(0,i.kt)("h3",{id:"flip-booleans-with-bang"},"Flip Booleans with Bang"),(0,i.kt)("p",null,"Bang symbol (",(0,i.kt)("inlineCode",{parentName:"p"},"!"),") can be used to flip the value of a boolean:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="If the customer does not have competition domain in email, add him to campaign"',"{3}":!0,title:'"If',the:!0,customer:!0,does:!0,not:!0,have:!0,competition:!0,domain:!0,in:!0,"email,":!0,add:!0,him:!0,to:!0,'campaign"':!0},"for (var customer in customers) {\n var competitionUser = customer.email.toLowerCase().indexOf('@competition.com') >= 0;\n if (!competitionUser) { // if not competition user, execute content\n campaignSegment.push(customer);\n };\n};\n")),(0,i.kt)("p",null,"Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean."),(0,i.kt)("p",null,"Falsy values in JavaScript are: ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"0"),", empty string ",(0,i.kt)("inlineCode",{parentName:"p"},'""'),", ",(0,i.kt)("inlineCode",{parentName:"p"},"null"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"undefined"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"NaN"),".\nAll other possible values are considered truthy."),(0,i.kt)("p",null,"This is very useful, as it allows you to leverage boolean evaluation on truthy values:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3} title="Applies either personalized name or default value"',"{3}":!0,title:'"Applies',either:!0,personalized:!0,name:!0,or:!0,default:!0,'value"':!0},"for (var customer in customers) {\n var helloPersonalization;\n if (customer.firstName) { // if customer.firstName has characters, it is truthy\n helloPersonalization = customer.firstName;\n } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy\n helloPersonalization = 'Valued Customer';\n };\n};\n")),(0,i.kt)("p",null,'To make it clear - above code is very "dirty" and can be written much better (for example without ',(0,i.kt)("inlineCode",{parentName:"p"},"else if")," by applying default value on variable initialization). You will find an example of how to write it better later."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can level up the use of this feature by leveraging double bang ",(0,i.kt)("inlineCode",{parentName:"p"},"!!")," to convert truthy/falsy value into an (appropriate) boolean."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true"',title:'"If',optInDate:!0,has:!0,any:!0,value:!0,"(is":!0,not:!0,"empty)":!0,the:!0,isOptedIn:!0,variable:!0,will:!0,evaluate:!0,to:!0,'true"':!0},"var isOptedIn = !!optInDate;\n"))),(0,i.kt)("h3",{id:"if-shorthand"},"If Shorthand"),(0,i.kt)("p",null,"For simple, one-line ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statements, there is also a one-line shorthand:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If the customer is opted in, send an email"',title:'"If',the:!0,customer:!0,is:!0,opted:!0,"in,":!0,send:!0,an:!0,'email"':!0},"if (isOptedIn) sendEmail(emailAddress, emailID);\n")),(0,i.kt)("p",null,"You could probably use simple ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," conditions for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out."),(0,i.kt)("h3",{id:"ternary"},"Ternary"),(0,i.kt)("p",null,"If a simple ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{2-7} title=\"Dirty if statement using basic 'if'\"","{2-7}":!0,title:'"Dirty',if:!0,statement:!0,using:!0,basic:!0,"'if'\"":!0},"for (var customer in customers) {\n var helloPersonalization;\n if (customer.firstName) {\n helloPersonalization = 'Hello' + customer.firstName;\n } else if (!customer.firstName) {\n helloPersonalization = 'Hello Valued Customer';\n };\n};\n")),(0,i.kt)("p",null,"we can use a clean ternary:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{2} title="Same logic changed to a ternary"',"{2}":!0,title:'"Same',logic:!0,changed:!0,to:!0,a:!0,'ternary"':!0},"for (var customer in customers) {\n var helloPersonalization = customer.firstName ? 'Hello' + customer.firstName : 'Hello Valued Customer';\n};\n")),(0,i.kt)("p",null,"Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: ",(0,i.kt)("inlineCode",{parentName:"p"},"variable = condition ? valueIfTrue : valueIfFalse;"),". So in the example above, if the ",(0,i.kt)("inlineCode",{parentName:"p"},"customer.firstName")," is not empty (is truthy), it will be pushed as the value of ",(0,i.kt)("inlineCode",{parentName:"p"},"helloPersonalization"),". If it is empty, the default value will be assigned instead."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ternary has more uses not than just the standard ",(0,i.kt)("inlineCode",{parentName:"p"},"if")," statement. It is awesome text customization with pseudo-interpolation:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Fill in the sentence with different words depending on boolean value of isOptedIn"',title:'"Fill',in:!0,the:!0,sentence:!0,with:!0,different:!0,words:!0,depending:!0,on:!0,boolean:!0,value:!0,of:!0,'isOptedIn"':!0},"Write('You are ' + (isOptedIn ? 'opted in' : 'not opted in'));\n")),(0,i.kt)("p",{parentName:"admonition"},"Ternaries are not limited to variables and strings. They can also run functions or ",(0,i.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#debugging-variable"},"debugging"),":"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="If isLoggedIn is false, the redirectToLogInPage function will be executed"',title:'"If',isLoggedIn:!0,is:!0,"false,":!0,the:!0,redirectToLogInPage:!0,function:!0,will:!0,be:!0,'executed"':!0},"!isLoggedIn ? redirectToLogInPage() : null;\n"))),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"shortcircuiting"},"Shortcircuiting"),(0,i.kt)("p",null,"We already covered using OR ",(0,i.kt)("inlineCode",{parentName:"p"},"||")," + AND ",(0,i.kt)("inlineCode",{parentName:"p"},"&&")," operators. But by using them correctly, you can optimize the speed of your scripts greatly."),(0,i.kt)("h3",{id:"shortcircuiting-or"},"Shortcircuiting OR"),(0,i.kt)("p",null,"OR evaluates to ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," if ",(0,i.kt)("em",{parentName:"p"},"at least one")," value is equal to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"If the left side of the OR evaluates to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),", we know for sure that the whole statement is ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),". Checking the value of the right side is not needed. And JavaScript knows this too."),(0,i.kt)("p",null,"Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",2020:!0,className:"language-js",metastring:'{2} title="If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign"',"{2}":!0,title:'"If',last:!0,purchase:!0,was:!0,before:!0,or:!0,a:!0,very:!0,complex:!0,check:!0,requiring:!0,calls:!0,to:!0,eCommerce:!0,API:!0,evaluates:!0,"false,":!0,filter:!0,out:!0,the:!0,customer:!0,from:!0,'campaign"':!0},"for (var customer in customers) {\n if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {\n exclusionSegment.push(customer);\n };\n};\n")),(0,i.kt)("p",null,"Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the ",(0,i.kt)("inlineCode",{parentName:"p"},"lastPurchaseDate")," is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish."),(0,i.kt)("h3",{id:"shortcircuiting-and"},"Shortcircuiting AND"),(0,i.kt)("p",null,"Similar logic can be applied to AND operator. ",(0,i.kt)("inlineCode",{parentName:"p"},"&&")," evaluates to ",(0,i.kt)("inlineCode",{parentName:"p"},"true")," only if ",(0,i.kt)("em",{parentName:"p"},"both sides")," are ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),". If we have a more straightforward condition or we suspect it might frequently evaluate to ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),", we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1} title="If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid"',"{1}":!0,title:'"If',the:!0,email:!0,provided:!0,for:!0,login:!0,is:!0,in:!0,correct:!0,"format,":!0,check:!0,if:!0,password:!0,has:!0,required:!0,"length.":!0,Once:!0,"validated,":!0,this:!0,and:!0,are:!0,matching:!0,pair:!0,a:!0,"user.":!0,Only:!0,then:!0,consider:!0,to:!0,be:!0,'valid"':!0},"if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {\n var isLoggedIn = true;\n};\n")),(0,i.kt)("p",null,"In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password."),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"switch-statement"},"Switch Statement"),(0,i.kt)("p",null,"Sometimes you have many options for a single condition. You could write it with a simple ",(0,i.kt)("inlineCode",{parentName:"p"},"if"),", but the ",(0,i.kt)("inlineCode",{parentName:"p"},"switch")," might be much more readable than a long list of ",(0,i.kt)("inlineCode",{parentName:"p"},"else if")," statements with nearly identical conditions. In SSJS switch is especially useful for centralized handler page you query from multiple front ends."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Return the error type based on the code"',title:'"Return',the:!0,error:!0,type:!0,based:!0,on:!0,'code"':!0},"function errorDescription(error) {\n switch (error.code) {\n case 400:\n return 'Bad Request';\n case 401:\n return 'Unauthorized';\n case 403:\n return 'Forbidden';\n case 404:\n return 'Not Found'\n default:\n return 'Unknown Error';\n };\n};\n")),(0,i.kt)("p",null,"Some things to remember when working with a ",(0,i.kt)("inlineCode",{parentName:"p"},"switch"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If multiple cases fulfil the condition, a ",(0,i.kt)("inlineCode",{parentName:"li"},"switch")," will execute the first from the top."),(0,i.kt)("li",{parentName:"ul"},"You can assign multiple cases to the same code block:")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{3-5,8-9} title="Return either sum or difference of two values (sum by default)"',"{3-5,8-9}":!0,title:'"Return',either:!0,sum:!0,or:!0,difference:!0,of:!0,two:!0,values:!0,"(sum":!0,by:!0,'default)"':!0},"var outcome;\nswitch (a, operation, b) {\n default:\n case '+':\n case 'plus':\n outcome = a + b;\n break;\n case '-':\n case 'minus':\n outcome = a - b;\n break;\n};\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Use either ",(0,i.kt)("inlineCode",{parentName:"li"},"break")," statement to end each case or use the ",(0,i.kt)("inlineCode",{parentName:"li"},"return")," statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen."),(0,i.kt)("li",{parentName:"ul"},"Always use ",(0,i.kt)("inlineCode",{parentName:"li"},"default")," statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered."),(0,i.kt)("li",{parentName:"ul"},"Cases in a ",(0,i.kt)("inlineCode",{parentName:"li"},"switch")," are using strict comparison (",(0,i.kt)("inlineCode",{parentName:"li"},"==="),") for evaluation, so the provided value must match the case not only by value but also by type. A string value of ",(0,i.kt)("inlineCode",{parentName:"li"},"'0'")," won't trigger an integer ",(0,i.kt)("inlineCode",{parentName:"li"},"0")," case.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6a99b79c.df1b5be0.js b/assets/js/6a99b79c.b0c3b401.js similarity index 52% rename from assets/js/6a99b79c.df1b5be0.js rename to assets/js/6a99b79c.b0c3b401.js index a0cbffa02..aa4dfe990 100644 --- a/assets/js/6a99b79c.df1b5be0.js +++ b/assets/js/6a99b79c.b0c3b401.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7008],{8526:e=>{e.exports=JSON.parse('{"label":"Personalisation","permalink":"/docs/tags/personalisation","allTagsPath":"/docs/tags","count":7,"items":[{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","permalink":"/docs/js/js-dom"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7008],{8526:e=>{e.exports=JSON.parse('{"label":"Personalisation","permalink":"/docs/tags/personalisation","allTagsPath":"/docs/tags","count":8,"items":[{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","permalink":"/docs/js/js-dom"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-context","title":"MCP Serverside Code Context","description":"Context is king. Also when writing MCP Template Serverside Code.","permalink":"/docs/interaction-studio/mcp-serverside-code-context"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/6d83c2a5.0534db3b.js b/assets/js/6d83c2a5.0534db3b.js deleted file mode 100644 index e86c7fc30..000000000 --- a/assets/js/6d83c2a5.0534db3b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4134],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),d=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=d(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=d(a),p=r,h=c["".concat(s,".").concat(p)]||c[p]||m[p]||o;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var d=2;d<o;d++)i[d]=a[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}p.displayName="MDXCreateElement"},425:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),r=a(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:a},t)}},3992:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),o=a(6010),i=a(2957),l=a(6550),s=a(5238),d=a(3609),u=a(2560);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function m(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??c(a);return function(e){const t=(0,d.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function p(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function E(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=m(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[s,d]=h({queryString:a,groupId:n}),[c,E]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,u.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),b=(()=>{const e=s??c;return p({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),E(e)}),[d,E,o]),tabValues:o}}var b=a(1048);const k={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function N(e){let{className:t,block:a,selectedValue:l,selectValue:s,tabValues:d}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),m=e=>{const t=e.currentTarget,a=u.indexOf(t),n=d[a].value;n!==l&&(c(t),s(n))},p=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},d.map((e=>{let{value:t,label:a,attributes:i}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>u.push(e),onKeyDown:p,onClick:m},i,{className:(0,o.Z)("tabs__item",k.tabItem,i?.className,{"tabs__item--active":l===t})}),a??t)})))}function g(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function f(e){const t=E(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",k.tabList)},r.createElement(N,(0,n.Z)({},e,t)),r.createElement(g,(0,n.Z)({},e,t)))}function w(e){const t=(0,b.Z)();return r.createElement(f,(0,n.Z)({key:String(t)},e))}},1872:(e,t,a)=>{a.d(t,{m:()=>o});var n=a(7294);const r="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},t))}},4183:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>E,frontMatter:()=>s,metadata:()=>u,toc:()=>m});var n=a(7462),r=(a(7294),a(4137)),o=a(3992),i=a(425),l=a(1872);const s={id:"sfmc-sql-like",title:"SFMC SQL Like",sidebar_label:"Like",description:"Get a LIKE and build more flexible SQL queries.",image:"img/og/og-image-sql-like.png",tags:["Marketing Cloud","SQL"]},d=void 0,u={unversionedId:"sql/sfmc-sql-like",id:"sql/sfmc-sql-like",title:"SFMC SQL Like",description:"Get a LIKE and build more flexible SQL queries.",source:"@site/docs/sql/sfmc-sql-like.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-like",permalink:"/docs/sql/sfmc-sql-like",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-like.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672788479,formattedLastUpdatedAt:"Jan 3, 2023",frontMatter:{id:"sfmc-sql-like",title:"SFMC SQL Like",sidebar_label:"Like",description:"Get a LIKE and build more flexible SQL queries.",image:"img/og/og-image-sql-like.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Case",permalink:"/docs/sql/sfmc-sql-case"},next:{title:"String Functions",permalink:"/docs/sql/sfmc-sql-string-functions"}},c={},m=[{value:"LIKE with Wildcard",id:"like-with-wildcard",level:2},{value:"% Wildcard",id:"-wildcard",level:3},{value:"_ Wildcard",id:"_-wildcard",level:3},{value:"LIKE with Group",id:"like-with-group",level:2},{value:"[] Operator",id:"-operator",level:3},{value:"- Operator",id:"--operator",level:3},{value:"^ Operator",id:"-operator-1",level:3},{value:"NOT LIKE",id:"not-like",level:2}],p={toc:m},h="wrapper";function E(e){let{components:t,...a}=e;return(0,r.kt)(h,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(l.m,{content:"Get a LIKE and build more flexible SQL queries.",mdxType:"LeadText"}),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," operator allows you to leverage wildcards and groups to search for matching records based on value fragment. You may use it in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#like-in-case"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT CASE"))," and ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#like-operator"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE"))," statements."),(0,r.kt)("p",null,"In ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#like-in-case"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT")),", think about normalizing and categorizing data. In ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#like-operator"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE"))," - about filtering with just a part of the value (for example email domain in ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailAddress")," field) or with a single element of multi picklist (for instance finding one value within the comma-separated list of all purchased products)."),(0,r.kt)("p",null,"There are two levels of ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," usage. First is focused on two essential character wildcards and is very straightforward \u2014 the second use full potential of group operator. Let's go through both with practical examples."),(0,r.kt)("h2",{id:"like-with-wildcard"},"LIKE with Wildcard"),(0,r.kt)("p",null,"Wildcards available in ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE"),":"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Wildcard"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"%")),(0,r.kt)("td",{parentName:"tr",align:null},"Zero, one or more characters")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"_")),(0,r.kt)("td",{parentName:"tr",align:null},"Exactly one character")))),(0,r.kt)("h3",{id:"-wildcard"},"% Wildcard"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"%")," symbol allows you to match zero, one or more characters within your ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," search."),(0,r.kt)("p",null,"For example, you can search for ",(0,r.kt)("inlineCode",{parentName:"p"},"%@mateuszdabrowski.pl")," domain in ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailAddress")," to get all contacts with an email address ending with ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.pl"),"."),(0,r.kt)("p",null,"You can change this filter to ",(0,r.kt)("inlineCode",{parentName:"p"},"%@mateuszdabrowski.%"),". With the second wildcard at the end, it will be looking for any email address that contains ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.")," but may have more text on either side of it. It will capture all emails ending with ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.pl")," domain just as the previous filter, but also match those with ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.com"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.sfmc.eu")," and other top-level domains."),(0,r.kt)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"where",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4} title=\"All subscribers that have an email address ending with 'mateuszdabrowski.pl' domain\"","{4}":!0,title:'"All',subscribers:!0,that:!0,have:!0,an:!0,email:!0,address:!0,ending:!0,with:!0,"'mateuszdabrowski.pl'":!0,'domain"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n FROM _Subscribers\n WHERE EmailAddress LIKE '%@%mateuszdabrowski.pl'\n")),(0,r.kt)("p",null,"In the above example, I used two wildcards - one before and one just after ",(0,r.kt)("inlineCode",{parentName:"p"},"@")," symbol. It allows not only to catch contacts in ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.pl")," domain, but also any subdomain, like ",(0,r.kt)("inlineCode",{parentName:"p"},"@dev.mateuszdabrowski.pl"),"."),(0,r.kt)("p",null,"In the marketing automation world, however, ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," operator is especially useful for selecting contacts based on the multi picklist columns. Consider ",(0,r.kt)("inlineCode",{parentName:"p"},"ActiveSubscriptions")," field that can have any combination of values ",(0,r.kt)("inlineCode",{parentName:"p"},"Phone"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"TV"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"Internet"),"."),(0,r.kt)("p",null,"Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#equality"},"equality operator")," (",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE ActiveSubscription = 'Phone'"),"), as it would return only contacts that have just this one subscription. Some of your customers might, however, have multiple (phone and tv or phone and internet plans). For SQL, a field containing ",(0,r.kt)("inlineCode",{parentName:"p"},"'Phone'")," is not equal with the one having a value of ",(0,r.kt)("inlineCode",{parentName:"p"},"'Phone', Internet'"),". ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," operator is here to save the day."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="All subscribers that have at least Phone subscription"',"{5}":!0,title:'"All',subscribers:!0,that:!0,have:!0,at:!0,least:!0,Phone:!0,'subscription"':!0},"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE ActiveSubscription LIKE '%Phone%'\n"))),(0,r.kt)(i.Z,{value:"select",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Categorize your database into either Internal or External records based on email domain"',"{4}":!0,title:'"Categorize',your:!0,database:!0,into:!0,either:!0,Internal:!0,or:!0,External:!0,records:!0,based:!0,on:!0,email:!0,'domain"':!0},"SELECT\n SubscriberKey\n , CASE\n WHEN EmailAddress LIKE '%@%mateuszdabrowski.pl' THEN 'Internal'\n ELSE 'External'\n END AS ContactType\nFROM _Subscribers\n")),(0,r.kt)("p",null,"In the above example, I used two wildcards - one before and one just after ",(0,r.kt)("inlineCode",{parentName:"p"},"@")," symbol. It allows not only to catch contacts in ",(0,r.kt)("inlineCode",{parentName:"p"},"@mateuszdabrowski.pl")," domain, but also any subdomain, like ",(0,r.kt)("inlineCode",{parentName:"p"},"@dev.mateuszdabrowski.pl"),"."))),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Always be sure to check whether you apply the wildcards correctly. Popular error is to have either too narrow or too wide scope of your filter. A common issue is lack of ",(0,r.kt)("inlineCode",{parentName:"p"},"%")," operator in the end or beginning of the searched string. For your query, it means that the value should end there."),(0,r.kt)("p",{parentName:"admonition"},"For example, ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE EmailAddress LIKE '@gmail.com'")," should provide you zero results, as it would be looking for precisely the ",(0,r.kt)("inlineCode",{parentName:"p"},"@gmail.com")," value in the ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailAddress")," field - without any characters before the ",(0,r.kt)("inlineCode",{parentName:"p"},"@")," symbol.")),(0,r.kt)("h3",{id:"_-wildcard"},"_ Wildcard"),(0,r.kt)("p",null,"Another wildcard working with ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," is the underscore ",(0,r.kt)("inlineCode",{parentName:"p"},"_"),". It is much simpler as all it does it pretending to be any single character."),(0,r.kt)("p",null,"Let's consider a scenario, where you have a multi picklist field containing comma-separated product IDs. For example, a customer with three recommended products might have a value ",(0,r.kt)("inlineCode",{parentName:"p"},"1,14,27"),". The system codes single digit values to subscriptions, and two-digit codes to various product categories. Let's use it in the query."),(0,r.kt)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"where",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-10} title="All subscribers with at least one subscription product in their recommendations"',"{6-10}":!0,title:'"All',subscribers:!0,with:!0,at:!0,least:!0,one:!0,subscription:!0,product:!0,in:!0,their:!0,'recommendations"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '_'\n OR RecommendedProducts LIKE '_,%'\n OR RecommendedProducts LIKE '%,_,%'\n OR RecommendedProducts LIKE '%,_'\n")),(0,r.kt)("p",null,"In the query above, we are filtering our database with ",(0,r.kt)("inlineCode",{parentName:"p"},"RecommendedProducts")," field. To add a contact to our segment, in four steps, we check if at least one condition is true:")),(0,r.kt)(i.Z,{value:"select",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5-8} title="Create boolean field from a multipicklist one to split database on recommendation type"',"{5-8}":!0,title:'"Create',boolean:!0,field:!0,from:!0,a:!0,multipicklist:!0,one:!0,to:!0,split:!0,database:!0,on:!0,recommendation:!0,'type"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '_' THEN 'True'\n WHEN RecommendedProducts LIKE '_,%' THEN 'True'\n WHEN RecommendedProducts LIKE '%,_,%' THEN 'True'\n WHEN RecommendedProducts LIKE '_,%' THEN 'True'\n ELSE 'False'\n END AS IsSubscriptionRecommended\nFROM EcommerceUpsellDE\n")),(0,r.kt)("p",null,"In the query above, we are creating new boolean field that will tell us whether the contact has at least one subscription product in their recommended lists. Great for personalized communication emphasizing this recommendation. We do this by assigning value ",(0,r.kt)("inlineCode",{parentName:"p"},"True")," if at least one of four steps evaluates to true:"))),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"If the record has exactly one recommended product that has a single-digit code (subscription)"),(0,r.kt)("li",{parentName:"ol"},"If the record has multiple recommended products and the first one is a single-digit (subscription)"),(0,r.kt)("li",{parentName:"ol"},"If the record has multiple recommended products and one in the middle is a single-digit (subscription)"),(0,r.kt)("li",{parentName:"ol"},"If the record has multiple recommended products and the last one is a single-digit (subscription)")),(0,r.kt)("h2",{id:"like-with-group"},"LIKE with Group"),(0,r.kt)("p",null,"There is also a group operator ",(0,r.kt)("inlineCode",{parentName:"p"},"[]")," for ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," statements. It allows you to create even more complex conditions:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Advanced Operator"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"[]")),(0,r.kt)("td",{parentName:"tr",align:null},"Any single character from the list specified inside")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"-")),(0,r.kt)("td",{parentName:"tr",align:null},"Range operator for ",(0,r.kt)("inlineCode",{parentName:"td"},"[]"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"^")),(0,r.kt)("td",{parentName:"tr",align:null},"Exclusion operator for ",(0,r.kt)("inlineCode",{parentName:"td"},"[]"))))),(0,r.kt)("h3",{id:"-operator"},"[] Operator"),(0,r.kt)("p",null,"The group operator ",(0,r.kt)("inlineCode",{parentName:"p"},"[]")," allows you to provide a list of characters that you want to find a match."),(0,r.kt)("p",null,"Consider the previous example with a field containing multiple IDs of your subscription and standard products. The field stores subscriptions in the form of single-digit product IDs. First four IDs are related to Premium subscriptions. IDs from 5 to 9 are Standard subscriptions."),(0,r.kt)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"where",mdxType:"TabItem"},(0,r.kt)("p",null,"If we would like to output only the Premium subscriptions, we would have to create a separate filter for each ID."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",16:!0,className:"language-sql",metastring:'{6-15} title="This approach would require 16 lines to cover the use case"',"{6-15}":!0,title:'"This',approach:!0,would:!0,require:!0,lines:!0,to:!0,cover:!0,the:!0,use:!0,'case"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '1'\n OR RecommendedProducts LIKE '1,%'\n OR RecommendedProducts LIKE '%,1,%'\n OR RecommendedProducts LIKE '%,1'\n OR RecommendedProducts LIKE '2'\n OR RecommendedProducts LIKE '2,%'\n OR RecommendedProducts LIKE '%,2,%'\n OR RecommendedProducts LIKE '%,2'\n ...\n")),(0,r.kt)("p",null,"With a group, we can optimize it \u2014 a lot."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",4:!0,className:"language-sql",metastring:'{6-10} title="Same outcome with just 4 lines"',"{6-10}":!0,title:'"Same',outcome:!0,with:!0,just:!0,'lines"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '[1234]'\n OR RecommendedProducts LIKE '[1234],%'\n OR RecommendedProducts LIKE '%,[1234],%'\n OR RecommendedProducts LIKE '%,[1234]'\n"))),(0,r.kt)(i.Z,{value:"select",mdxType:"TabItem"},(0,r.kt)("p",null,"If we would like to categorize them using Wildcards, we would have to create a separate WHEN for each ID."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",36:!0,className:"language-sql",metastring:'{5-14} title="This approach would require 36 WHEN/THEN lines to cover the use case"',"{5-14}":!0,title:'"This',approach:!0,would:!0,require:!0,"WHEN/THEN":!0,lines:!0,to:!0,cover:!0,the:!0,use:!0,'case"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '1' THEN 'Premium'\n WHEN RecommendedProducts LIKE '1,%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '%,1,%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '1,%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '2' THEN 'Premium'\n WHEN RecommendedProducts LIKE '2,%' THEN 'Premium'\n ...\n WHEN RecommendedProducts LIKE '5' THEN 'Standard'\n WHEN RecommendedProducts LIKE '5,%' THEN 'Standard'\n ...\n ELSE 'No Subscription'\n END AS RecommendedSubscriptionType\nFROM EcommerceUpsellDE\n")),(0,r.kt)("p",null,"With a group, we can optimize it \u2014 a lot."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",8:!0,className:"language-sql",metastring:'{5-12} title="Same outcome with just 8 WHEN/THEN lines"',"{5-12}":!0,title:'"Same',outcome:!0,with:!0,just:!0,"WHEN/THEN":!0,'lines"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '[1234]' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1234],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '%,[1234],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1234],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[56789]' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[56789],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '%,[56789],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[56789],%' THEN 'Standard'\n ELSE 'No Subscription'\n END AS RecommendedSubscriptionType\nFROM EcommerceUpsellDE\n")))),(0,r.kt)("p",null,"Thanks to the group operator, instead of covering every single case, we can provide all values within the ",(0,r.kt)("inlineCode",{parentName:"p"},"[]"),". Short, clean and readable. And it can get even better."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Group wildcard (",(0,r.kt)("inlineCode",{parentName:"p"},"[]"),") is also useful as a way to escape character in the ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," statement. For example, you might want to look for all values, including a per cent sign (",(0,r.kt)("inlineCode",{parentName:"p"},"%"),")."),(0,r.kt)("p",{parentName:"admonition"},"Writing ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE '10%'")," is not a good idea, as it would return you all values starting with ",(0,r.kt)("inlineCode",{parentName:"p"},"10")," - as the per cent sign is a wildcard meaning zero, one or more characters. You can, however, obtain what you want by writing:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",1:!0,className:"language-sql",metastring:'{4-5} title="If the client has a discount between 1 and 9%, let\'s bump it up to either 5% or 10%. If he or she has a higher one - leave it as it is. If no discount is available, make it 2%"',"{4-5}":!0,title:'"If',the:!0,client:!0,has:!0,a:!0,discount:!0,between:!0,and:!0,"9%,":!0,"let's":!0,bump:!0,it:!0,up:!0,to:!0,either:!0,"5%":!0,or:!0,"10%.":!0,If:!0,he:!0,she:!0,higher:!0,one:!0,"-":!0,leave:!0,as:!0,"is.":!0,no:!0,is:!0,"available,":!0,make:!0,'2%"':!0},"SELECT\n ContactKey\n , CASE\n WHEN Discount LIKE '[56789][%]' THEN '10%'\n WHEN Discount LIKE '[01234][%]' THEN '5%'\n WHEN Discount IS NOT NULL THEN Discount\n ELSE '2%'\n END AS NewDiscount\n")),(0,r.kt)("p",{parentName:"admonition"},"By wrapping the ",(0,r.kt)("inlineCode",{parentName:"p"},"%")," with the grouping sign ",(0,r.kt)("inlineCode",{parentName:"p"},"[]"),", we are telling SQL to look for exactly the per cent sign. Thanks to it ",(0,r.kt)("inlineCode",{parentName:"p"},"'[1234][%]'")," search will look for ",(0,r.kt)("inlineCode",{parentName:"p"},"1%"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"2%"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"3%")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"4%")," values only."),(0,r.kt)("p",{parentName:"admonition"},"Same works with ",(0,r.kt)("inlineCode",{parentName:"p"},"_")," wildcard.")),(0,r.kt)("h3",{id:"--operator"},"- Operator"),(0,r.kt)("p",null,"We can simplify more with the use of range operator ",(0,r.kt)("inlineCode",{parentName:"p"},"-"),". Instead of writing each possible character within our group ",(0,r.kt)("inlineCode",{parentName:"p"},"[]")," (it gets awful when we are looking for any letter - lower or uppercase), we can ask for a range:"),(0,r.kt)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"where",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{6-10} title="Now with range operator"',"{6-10}":!0,title:'"Now',with:!0,range:!0,'operator"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '[1-4]'\n OR RecommendedProducts LIKE '[1-4],%'\n OR RecommendedProducts LIKE '%,[1-4],%'\n OR RecommendedProducts LIKE '%,[1-4]'\n"))),(0,r.kt)(i.Z,{value:"select",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5-12} title="Now with range operator"',"{5-12}":!0,title:'"Now',with:!0,range:!0,'operator"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '[1-4]' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1-4],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '%,[1-4],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1-4],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[5-9]' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[5-9],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '%,[5-9],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[5-9],%' THEN 'Standard'\n ELSE 'No Subscription'\n END AS RecommendedSubscriptionType\nFROM EcommerceUpsellDE\n")))),(0,r.kt)("p",null,"As you can see, all we need to do, it to put range operator ",(0,r.kt)("inlineCode",{parentName:"p"},"-")," between the first and last value that we want to catch. For alphabetical searches where we want both lowercase and uppercase letters, you will need to write it like this: ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE '[a-zA-Z]'"),"."),(0,r.kt)("p",null,"If you want to search for a hyphen '-' within a grouping operator that uses a range, add it in the very beginning. ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE '[-0-9]")," will look for either ",(0,r.kt)("inlineCode",{parentName:"p"},"-")," or any digit."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can mix and match groups, ranges and wildcards."),(0,r.kt)("p",{parentName:"admonition"},"It is an excellent tool to create essential categorization solutions for uncontrolled data. For example, to clean up free text job title coming from web forms."),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Simplified Job Title categorization"',title:'"Simplified',Job:!0,Title:!0,'categorization"':!0},"SELECT\n SubscriberKey\n , CASE\n WHEN FreeTextJobTitle LIKE '[Cc]_[Oo]' THEN 'C-Suite'\n WHEN FreeTextJobTitle LIKE '%[Mm]anager%' THEN 'Management'\n WHEN FreeTextJobTitle LIKE '%[Ss]pecialist%' THEN 'Specialists'\n END AS CorporateJobTitleGroup\nFROM _Subscriber\n"))),(0,r.kt)("h3",{id:"-operator-1"},"^ Operator"),(0,r.kt)("p",null,"There is one more operator that is sometimes useful - the exclusion operator ",(0,r.kt)("inlineCode",{parentName:"p"},"^"),". Add it to the beginning of your group, and SQL will not look for any of the grouped characters. For example, ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE '[^0-9]'")," will look for any character that is not a digit."),(0,r.kt)("p",null,"This operator is especially useful for the use in ",(0,r.kt)("inlineCode",{parentName:"p"},"WHERE")," statement. Best example? SQL for finding contacts with Subscriber Key not being correct Salesforce ID:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Find all records in All Subscribers with Subscriber Key other than Salesforce ID"',"{4}":!0,title:'"Find',all:!0,records:!0,in:!0,All:!0,Subscribers:!0,with:!0,Subscriber:!0,Key:!0,other:!0,than:!0,Salesforce:!0,'ID"':!0},"SELECT SubscriberKey\nFROM _Subscribers\nWHERE\n SubscriberKey LIKE '%[^a-zA-Z0-9]%'\n AND LEN(SubscriberKey) != 18\n")),(0,r.kt)("p",null,"This short and straightforward query will look into each SubscriberKey and check whether in there is any character other the letter or digit (case-insensitive) or whether the length is not equal to 18. All such records have incorrect value and are eligible for cleanup or investigation. Perfect for Automation with deletion SSJS script or Verification Activity to alert administrator about issues."),(0,r.kt)("h2",{id:"not-like"},"NOT LIKE"),(0,r.kt)("p",null,"Finally, just as with other statements, you can add ",(0,r.kt)("inlineCode",{parentName:"p"},"NOT")," statement before ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," to search for not matching records:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Same query as at the beginning of our CASE journey, but flipped"',"{4}":!0,title:'"Same',query:!0,as:!0,at:!0,the:!0,beginning:!0,of:!0,our:!0,CASE:!0,"journey,":!0,but:!0,'flipped"':!0},"SELECT\n ContactKey\n , CASE\n WHEN EmailAddress NOT LIKE '%@mateuszdabrowski.pl' THEN 'External'\n ELSE 'Internal'\n END AS ContactType\n")))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6d83c2a5.900a528b.js b/assets/js/6d83c2a5.900a528b.js new file mode 100644 index 000000000..fc68482ec --- /dev/null +++ b/assets/js/6d83c2a5.900a528b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4134],{5138:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>u,contentTitle:()=>d,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var t=n(5893),s=n(1151),o=n(3992),i=n(425),a=n(1872);const l={id:"sfmc-sql-like",title:"SFMC SQL Like",sidebar_label:"Like",description:"Get a LIKE and build more flexible SQL queries.",image:"img/og/og-image-sql-like.png",tags:["Marketing Cloud","SQL"]},d=void 0,c={id:"sql/sfmc-sql-like",title:"SFMC SQL Like",description:"Get a LIKE and build more flexible SQL queries.",source:"@site/docs/sql/sfmc-sql-like.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-like",permalink:"/docs/sql/sfmc-sql-like",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-like.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672788479,formattedLastUpdatedAt:"Jan 3, 2023",frontMatter:{id:"sfmc-sql-like",title:"SFMC SQL Like",sidebar_label:"Like",description:"Get a LIKE and build more flexible SQL queries.",image:"img/og/og-image-sql-like.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Case",permalink:"/docs/sql/sfmc-sql-case"},next:{title:"String Functions",permalink:"/docs/sql/sfmc-sql-string-functions"}},u={},h=[{value:"LIKE with Wildcard",id:"like-with-wildcard",level:2},{value:"% Wildcard",id:"-wildcard",level:3},{value:"_ Wildcard",id:"_-wildcard",level:3},{value:"LIKE with Group",id:"like-with-group",level:2},{value:"[] Operator",id:"-operator",level:3},{value:"- Operator",id:"--operator",level:3},{value:"^ Operator",id:"-operator-1",level:3},{value:"NOT LIKE",id:"not-like",level:2}];function m(e){const r={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.m,{content:"Get a LIKE and build more flexible SQL queries."}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.code,{children:"LIKE"})," operator allows you to leverage wildcards and groups to search for matching records based on value fragment. You may use it in the ",(0,t.jsx)(r.a,{href:"/docs/sql/sfmc-sql-case#like-in-case",children:(0,t.jsx)(r.code,{children:"SELECT CASE"})})," and ",(0,t.jsx)(r.a,{href:"/docs/sql/sfmc-sql-where#like-operator",children:(0,t.jsx)(r.code,{children:"WHERE"})})," statements."]}),"\n",(0,t.jsxs)(r.p,{children:["In ",(0,t.jsx)(r.a,{href:"/docs/sql/sfmc-sql-case#like-in-case",children:(0,t.jsx)(r.code,{children:"SELECT"})}),", think about normalizing and categorizing data. In ",(0,t.jsx)(r.a,{href:"/docs/sql/sfmc-sql-where#like-operator",children:(0,t.jsx)(r.code,{children:"WHERE"})})," - about filtering with just a part of the value (for example email domain in ",(0,t.jsx)(r.code,{children:"EmailAddress"})," field) or with a single element of multi picklist (for instance finding one value within the comma-separated list of all purchased products)."]}),"\n",(0,t.jsxs)(r.p,{children:["There are two levels of ",(0,t.jsx)(r.code,{children:"LIKE"})," usage. First is focused on two essential character wildcards and is very straightforward \u2014 the second use full potential of group operator. Let's go through both with practical examples."]}),"\n",(0,t.jsx)(r.h2,{id:"like-with-wildcard",children:"LIKE with Wildcard"}),"\n",(0,t.jsxs)(r.p,{children:["Wildcards available in ",(0,t.jsx)(r.code,{children:"LIKE"}),":"]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Wildcard"}),(0,t.jsx)(r.th,{children:"Description"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"%"})}),(0,t.jsx)(r.td,{children:"Zero, one or more characters"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"_"})}),(0,t.jsx)(r.td,{children:"Exactly one character"})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"-wildcard",children:"% Wildcard"}),"\n",(0,t.jsxs)(r.p,{children:["The ",(0,t.jsx)(r.code,{children:"%"})," symbol allows you to match zero, one or more characters within your ",(0,t.jsx)(r.code,{children:"LIKE"})," search."]}),"\n",(0,t.jsxs)(r.p,{children:["For example, you can search for ",(0,t.jsx)(r.code,{children:"%@mateuszdabrowski.pl"})," domain in ",(0,t.jsx)(r.code,{children:"EmailAddress"})," to get all contacts with an email address ending with ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski.pl"}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["You can change this filter to ",(0,t.jsx)(r.code,{children:"%@mateuszdabrowski.%"}),". With the second wildcard at the end, it will be looking for any email address that contains ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski."})," but may have more text on either side of it. It will capture all emails ending with ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski.pl"})," domain just as the previous filter, but also match those with ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski.com"}),", ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski.sfmc.eu"})," and other top-level domains."]}),"\n",(0,t.jsxs)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],children:[(0,t.jsxs)(i.Z,{value:"where",children:[(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:"{4} title=\"All subscribers that have an email address ending with 'mateuszdabrowski.pl' domain\"",children:"SELECT\n SubscriberKey\n , EmailAddress\n FROM _Subscribers\n WHERE EmailAddress LIKE '%@%mateuszdabrowski.pl'\n"})}),(0,t.jsxs)(r.p,{children:["In the above example, I used two wildcards - one before and one just after ",(0,t.jsx)(r.code,{children:"@"})," symbol. It allows not only to catch contacts in ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski.pl"})," domain, but also any subdomain, like ",(0,t.jsx)(r.code,{children:"@dev.mateuszdabrowski.pl"}),"."]}),(0,t.jsxs)(r.p,{children:["In the marketing automation world, however, ",(0,t.jsx)(r.code,{children:"LIKE"})," operator is especially useful for selecting contacts based on the multi picklist columns. Consider ",(0,t.jsx)(r.code,{children:"ActiveSubscriptions"})," field that can have any combination of values ",(0,t.jsx)(r.code,{children:"Phone"}),", ",(0,t.jsx)(r.code,{children:"TV"}),", ",(0,t.jsx)(r.code,{children:"Internet"}),"."]}),(0,t.jsxs)(r.p,{children:["Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use ",(0,t.jsx)(r.a,{href:"/docs/sql/sfmc-sql-where#equality",children:"equality operator"})," (",(0,t.jsx)(r.code,{children:"WHERE ActiveSubscription = 'Phone'"}),"), as it would return only contacts that have just this one subscription. Some of your customers might, however, have multiple (phone and tv or phone and internet plans). For SQL, a field containing ",(0,t.jsx)(r.code,{children:"'Phone'"})," is not equal with the one having a value of ",(0,t.jsx)(r.code,{children:"'Phone', Internet'"}),". ",(0,t.jsx)(r.code,{children:"LIKE"})," operator is here to save the day."]}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{5} title="All subscribers that have at least Phone subscription"',children:"SELECT\n SubscriberKey\n , EmailAddress\nFROM MasterSubscriberDE\nWHERE ActiveSubscription LIKE '%Phone%'\n"})})]}),(0,t.jsxs)(i.Z,{value:"select",children:[(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{4} title="Categorize your database into either Internal or External records based on email domain"',children:"SELECT\n SubscriberKey\n , CASE\n WHEN EmailAddress LIKE '%@%mateuszdabrowski.pl' THEN 'Internal'\n ELSE 'External'\n END AS ContactType\nFROM _Subscribers\n"})}),(0,t.jsxs)(r.p,{children:["In the above example, I used two wildcards - one before and one just after ",(0,t.jsx)(r.code,{children:"@"})," symbol. It allows not only to catch contacts in ",(0,t.jsx)(r.code,{children:"@mateuszdabrowski.pl"})," domain, but also any subdomain, like ",(0,t.jsx)(r.code,{children:"@dev.mateuszdabrowski.pl"}),"."]})]})]}),"\n",(0,t.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsxs)(r.p,{children:["Always be sure to check whether you apply the wildcards correctly. Popular error is to have either too narrow or too wide scope of your filter. A common issue is lack of ",(0,t.jsx)(r.code,{children:"%"})," operator in the end or beginning of the searched string. For your query, it means that the value should end there."]}),(0,t.jsxs)(r.p,{children:["For example, ",(0,t.jsx)(r.code,{children:"WHERE EmailAddress LIKE '@gmail.com'"})," should provide you zero results, as it would be looking for precisely the ",(0,t.jsx)(r.code,{children:"@gmail.com"})," value in the ",(0,t.jsx)(r.code,{children:"EmailAddress"})," field - without any characters before the ",(0,t.jsx)(r.code,{children:"@"})," symbol."]})]}),"\n",(0,t.jsx)(r.h3,{id:"_-wildcard",children:"_ Wildcard"}),"\n",(0,t.jsxs)(r.p,{children:["Another wildcard working with ",(0,t.jsx)(r.code,{children:"LIKE"})," is the underscore ",(0,t.jsx)(r.code,{children:"_"}),". It is much simpler as all it does it pretending to be any single character."]}),"\n",(0,t.jsxs)(r.p,{children:["Let's consider a scenario, where you have a multi picklist field containing comma-separated product IDs. For example, a customer with three recommended products might have a value ",(0,t.jsx)(r.code,{children:"1,14,27"}),". The system codes single digit values to subscriptions, and two-digit codes to various product categories. Let's use it in the query."]}),"\n",(0,t.jsxs)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],children:[(0,t.jsxs)(i.Z,{value:"where",children:[(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{6-10} title="All subscribers with at least one subscription product in their recommendations"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '_'\n OR RecommendedProducts LIKE '_,%'\n OR RecommendedProducts LIKE '%,_,%'\n OR RecommendedProducts LIKE '%,_'\n"})}),(0,t.jsxs)(r.p,{children:["In the query above, we are filtering our database with ",(0,t.jsx)(r.code,{children:"RecommendedProducts"})," field. To add a contact to our segment, in four steps, we check if at least one condition is true:"]})]}),(0,t.jsxs)(i.Z,{value:"select",children:[(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{5-8} title="Create boolean field from a multipicklist one to split database on recommendation type"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '_' THEN 'True'\n WHEN RecommendedProducts LIKE '_,%' THEN 'True'\n WHEN RecommendedProducts LIKE '%,_,%' THEN 'True'\n WHEN RecommendedProducts LIKE '_,%' THEN 'True'\n ELSE 'False'\n END AS IsSubscriptionRecommended\nFROM EcommerceUpsellDE\n"})}),(0,t.jsxs)(r.p,{children:["In the query above, we are creating new boolean field that will tell us whether the contact has at least one subscription product in their recommended lists. Great for personalized communication emphasizing this recommendation. We do this by assigning value ",(0,t.jsx)(r.code,{children:"True"})," if at least one of four steps evaluates to true:"]})]})]}),"\n",(0,t.jsxs)(r.ol,{children:["\n",(0,t.jsx)(r.li,{children:"If the record has exactly one recommended product that has a single-digit code (subscription)"}),"\n",(0,t.jsx)(r.li,{children:"If the record has multiple recommended products and the first one is a single-digit (subscription)"}),"\n",(0,t.jsx)(r.li,{children:"If the record has multiple recommended products and one in the middle is a single-digit (subscription)"}),"\n",(0,t.jsx)(r.li,{children:"If the record has multiple recommended products and the last one is a single-digit (subscription)"}),"\n"]}),"\n",(0,t.jsx)(r.h2,{id:"like-with-group",children:"LIKE with Group"}),"\n",(0,t.jsxs)(r.p,{children:["There is also a group operator ",(0,t.jsx)(r.code,{children:"[]"})," for ",(0,t.jsx)(r.code,{children:"LIKE"})," statements. It allows you to create even more complex conditions:"]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Advanced Operator"}),(0,t.jsx)(r.th,{children:"Description"})]})}),(0,t.jsxs)(r.tbody,{children:[(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"[]"})}),(0,t.jsx)(r.td,{children:"Any single character from the list specified inside"})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"-"})}),(0,t.jsxs)(r.td,{children:["Range operator for ",(0,t.jsx)(r.code,{children:"[]"})]})]}),(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"^"})}),(0,t.jsxs)(r.td,{children:["Exclusion operator for ",(0,t.jsx)(r.code,{children:"[]"})]})]})]})]}),"\n",(0,t.jsx)(r.h3,{id:"-operator",children:"[] Operator"}),"\n",(0,t.jsxs)(r.p,{children:["The group operator ",(0,t.jsx)(r.code,{children:"[]"})," allows you to provide a list of characters that you want to find a match."]}),"\n",(0,t.jsx)(r.p,{children:"Consider the previous example with a field containing multiple IDs of your subscription and standard products. The field stores subscriptions in the form of single-digit product IDs. First four IDs are related to Premium subscriptions. IDs from 5 to 9 are Standard subscriptions."}),"\n",(0,t.jsxs)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],children:[(0,t.jsxs)(i.Z,{value:"where",children:[(0,t.jsx)(r.p,{children:"If we would like to output only the Premium subscriptions, we would have to create a separate filter for each ID."}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{6-15} title="This approach would require 16 lines to cover the use case"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '1'\n OR RecommendedProducts LIKE '1,%'\n OR RecommendedProducts LIKE '%,1,%'\n OR RecommendedProducts LIKE '%,1'\n OR RecommendedProducts LIKE '2'\n OR RecommendedProducts LIKE '2,%'\n OR RecommendedProducts LIKE '%,2,%'\n OR RecommendedProducts LIKE '%,2'\n ...\n"})}),(0,t.jsx)(r.p,{children:"With a group, we can optimize it \u2014 a lot."}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{6-10} title="Same outcome with just 4 lines"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '[1234]'\n OR RecommendedProducts LIKE '[1234],%'\n OR RecommendedProducts LIKE '%,[1234],%'\n OR RecommendedProducts LIKE '%,[1234]'\n"})})]}),(0,t.jsxs)(i.Z,{value:"select",children:[(0,t.jsx)(r.p,{children:"If we would like to categorize them using Wildcards, we would have to create a separate WHEN for each ID."}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{5-14} title="This approach would require 36 WHEN/THEN lines to cover the use case"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '1' THEN 'Premium'\n WHEN RecommendedProducts LIKE '1,%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '%,1,%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '1,%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '2' THEN 'Premium'\n WHEN RecommendedProducts LIKE '2,%' THEN 'Premium'\n ...\n WHEN RecommendedProducts LIKE '5' THEN 'Standard'\n WHEN RecommendedProducts LIKE '5,%' THEN 'Standard'\n ...\n ELSE 'No Subscription'\n END AS RecommendedSubscriptionType\nFROM EcommerceUpsellDE\n"})}),(0,t.jsx)(r.p,{children:"With a group, we can optimize it \u2014 a lot."}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{5-12} title="Same outcome with just 8 WHEN/THEN lines"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '[1234]' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1234],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '%,[1234],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1234],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[56789]' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[56789],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '%,[56789],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[56789],%' THEN 'Standard'\n ELSE 'No Subscription'\n END AS RecommendedSubscriptionType\nFROM EcommerceUpsellDE\n"})})]})]}),"\n",(0,t.jsxs)(r.p,{children:["Thanks to the group operator, instead of covering every single case, we can provide all values within the ",(0,t.jsx)(r.code,{children:"[]"}),". Short, clean and readable. And it can get even better."]}),"\n",(0,t.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsxs)(r.p,{children:["Group wildcard (",(0,t.jsx)(r.code,{children:"[]"}),") is also useful as a way to escape character in the ",(0,t.jsx)(r.code,{children:"LIKE"})," statement. For example, you might want to look for all values, including a per cent sign (",(0,t.jsx)(r.code,{children:"%"}),")."]}),(0,t.jsxs)(r.p,{children:["Writing ",(0,t.jsx)(r.code,{children:"LIKE '10%'"})," is not a good idea, as it would return you all values starting with ",(0,t.jsx)(r.code,{children:"10"})," - as the per cent sign is a wildcard meaning zero, one or more characters. You can, however, obtain what you want by writing:"]}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{4-5} title="If the client has a discount between 1 and 9%, let\'s bump it up to either 5% or 10%. If he or she has a higher one - leave it as it is. If no discount is available, make it 2%"',children:"SELECT\n ContactKey\n , CASE\n WHEN Discount LIKE '[56789][%]' THEN '10%'\n WHEN Discount LIKE '[01234][%]' THEN '5%'\n WHEN Discount IS NOT NULL THEN Discount\n ELSE '2%'\n END AS NewDiscount\n"})}),(0,t.jsxs)(r.p,{children:["By wrapping the ",(0,t.jsx)(r.code,{children:"%"})," with the grouping sign ",(0,t.jsx)(r.code,{children:"[]"}),", we are telling SQL to look for exactly the per cent sign. Thanks to it ",(0,t.jsx)(r.code,{children:"'[1234][%]'"})," search will look for ",(0,t.jsx)(r.code,{children:"1%"}),", ",(0,t.jsx)(r.code,{children:"2%"}),", ",(0,t.jsx)(r.code,{children:"3%"})," or ",(0,t.jsx)(r.code,{children:"4%"})," values only."]}),(0,t.jsxs)(r.p,{children:["Same works with ",(0,t.jsx)(r.code,{children:"_"})," wildcard."]})]}),"\n",(0,t.jsx)(r.h3,{id:"--operator",children:"- Operator"}),"\n",(0,t.jsxs)(r.p,{children:["We can simplify more with the use of range operator ",(0,t.jsx)(r.code,{children:"-"}),". Instead of writing each possible character within our group ",(0,t.jsx)(r.code,{children:"[]"})," (it gets awful when we are looking for any letter - lower or uppercase), we can ask for a range:"]}),"\n",(0,t.jsxs)(o.Z,{defaultValue:"where",values:[{label:"WHERE",value:"where"},{label:"SELECT",value:"select"}],children:[(0,t.jsx)(i.Z,{value:"where",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{6-10} title="Now with range operator"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , RecommendedProducts\nFROM EcommerceUpsellDE\nWHERE\n RecommendedProducts LIKE '[1-4]'\n OR RecommendedProducts LIKE '[1-4],%'\n OR RecommendedProducts LIKE '%,[1-4],%'\n OR RecommendedProducts LIKE '%,[1-4]'\n"})})}),(0,t.jsx)(i.Z,{value:"select",children:(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{5-12} title="Now with range operator"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , CASE\n WHEN RecommendedProducts LIKE '[1-4]' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1-4],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '%,[1-4],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[1-4],%' THEN 'Premium'\n WHEN RecommendedProducts LIKE '[5-9]' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[5-9],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '%,[5-9],%' THEN 'Standard'\n WHEN RecommendedProducts LIKE '[5-9],%' THEN 'Standard'\n ELSE 'No Subscription'\n END AS RecommendedSubscriptionType\nFROM EcommerceUpsellDE\n"})})})]}),"\n",(0,t.jsxs)(r.p,{children:["As you can see, all we need to do, it to put range operator ",(0,t.jsx)(r.code,{children:"-"})," between the first and last value that we want to catch. For alphabetical searches where we want both lowercase and uppercase letters, you will need to write it like this: ",(0,t.jsx)(r.code,{children:"LIKE '[a-zA-Z]'"}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["If you want to search for a hyphen '-' within a grouping operator that uses a range, add it in the very beginning. ",(0,t.jsx)(r.code,{children:"LIKE '[-0-9]"})," will look for either ",(0,t.jsx)(r.code,{children:"-"})," or any digit."]}),"\n",(0,t.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsx)(r.p,{children:"You can mix and match groups, ranges and wildcards."}),(0,t.jsx)(r.p,{children:"It is an excellent tool to create essential categorization solutions for uncontrolled data. For example, to clean up free text job title coming from web forms."}),(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'title="Simplified Job Title categorization"',children:"SELECT\n SubscriberKey\n , CASE\n WHEN FreeTextJobTitle LIKE '[Cc]_[Oo]' THEN 'C-Suite'\n WHEN FreeTextJobTitle LIKE '%[Mm]anager%' THEN 'Management'\n WHEN FreeTextJobTitle LIKE '%[Ss]pecialist%' THEN 'Specialists'\n END AS CorporateJobTitleGroup\nFROM _Subscriber\n"})})]}),"\n",(0,t.jsx)(r.h3,{id:"-operator-1",children:"^ Operator"}),"\n",(0,t.jsxs)(r.p,{children:["There is one more operator that is sometimes useful - the exclusion operator ",(0,t.jsx)(r.code,{children:"^"}),". Add it to the beginning of your group, and SQL will not look for any of the grouped characters. For example, ",(0,t.jsx)(r.code,{children:"LIKE '[^0-9]'"})," will look for any character that is not a digit."]}),"\n",(0,t.jsxs)(r.p,{children:["This operator is especially useful for the use in ",(0,t.jsx)(r.code,{children:"WHERE"})," statement. Best example? SQL for finding contacts with Subscriber Key not being correct Salesforce ID:"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{4} title="Find all records in All Subscribers with Subscriber Key other than Salesforce ID"',children:"SELECT SubscriberKey\nFROM _Subscribers\nWHERE\n SubscriberKey LIKE '%[^a-zA-Z0-9]%'\n AND LEN(SubscriberKey) != 18\n"})}),"\n",(0,t.jsx)(r.p,{children:"This short and straightforward query will look into each SubscriberKey and check whether in there is any character other the letter or digit (case-insensitive) or whether the length is not equal to 18. All such records have incorrect value and are eligible for cleanup or investigation. Perfect for Automation with deletion SSJS script or Verification Activity to alert administrator about issues."}),"\n",(0,t.jsx)(r.h2,{id:"not-like",children:"NOT LIKE"}),"\n",(0,t.jsxs)(r.p,{children:["Finally, just as with other statements, you can add ",(0,t.jsx)(r.code,{children:"NOT"})," statement before ",(0,t.jsx)(r.code,{children:"LIKE"})," to search for not matching records:"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sql",metastring:'{4} title="Same query as at the beginning of our CASE journey, but flipped"',children:"SELECT\n ContactKey\n , CASE\n WHEN EmailAddress NOT LIKE '%@mateuszdabrowski.pl' THEN 'External'\n ELSE 'Internal'\n END AS ContactType\n"})})]})}function p(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(m,{...e})}):m(e)}},425:(e,r,n)=>{n.d(r,{Z:()=>i});n(7294);var t=n(512);const s={tabItem:"tabItem_Ymn6"};var o=n(5893);function i(e){let{children:r,hidden:n,className:i}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,t.Z)(s.tabItem,i),hidden:n,children:r})}},3992:(e,r,n)=>{n.d(r,{Z:()=>v});var t=n(7294),s=n(512),o=n(2957),i=n(6550),a=n(1270),l=n(5238),d=n(3609),c=n(2560);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:r,children:n}=e;return(0,t.useMemo)((()=>{const e=r??function(e){return u(e).map((e=>{let{props:{value:r,label:n,attributes:t,default:s}}=e;return{value:r,label:n,attributes:t,default:s}}))}(n);return function(e){const r=(0,d.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,n])}function m(e){let{value:r,tabValues:n}=e;return n.some((e=>e.value===r))}function p(e){let{queryString:r=!1,groupId:n}=e;const s=(0,i.k6)(),o=function(e){let{queryString:r=!1,groupId:n}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:r,groupId:n});return[(0,l._X)(o),(0,t.useCallback)((e=>{if(!o)return;const r=new URLSearchParams(s.location.search);r.set(o,e),s.replace({...s.location,search:r.toString()})}),[o,s])]}function E(e){const{defaultValue:r,queryString:n=!1,groupId:s}=e,o=h(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:r,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(r){if(!m({value:r,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:r,tabValues:o}))),[d,u]=p({queryString:n,groupId:s}),[E,x]=function(e){let{groupId:r}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(r),[s,o]=(0,c.Nk)(n);return[s,(0,t.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:s}),b=(()=>{const e=d??E;return m({value:e,tabValues:o})?e:null})();(0,a.Z)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),x(e)}),[u,x,o]),tabValues:o}}var x=n(1048);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=n(5893);function g(e){let{className:r,block:n,selectedValue:t,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.o5)(),c=e=>{const r=e.currentTarget,n=l.indexOf(r),s=a[n].value;s!==t&&(d(r),i(s))},u=e=>{let r=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;r=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;r=l[n]??l[l.length-1];break}}r?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},r),children:a.map((e=>{let{value:r,label:n,attributes:o}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:t===r?0:-1,"aria-selected":t===r,ref:e=>l.push(e),onKeyDown:u,onClick:c,...o,className:(0,s.Z)("tabs__item",b.tabItem,o?.className,{"tabs__item--active":t===r}),children:n??r},r)}))})}function f(e){let{lazy:r,children:n,selectedValue:s}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(r){const e=o.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:o.map(((e,r)=>(0,t.cloneElement)(e,{key:r,hidden:e.props.value!==s})))})}function w(e){const r=E(e);return(0,j.jsxs)("div",{className:(0,s.Z)("tabs-container",b.tabList),children:[(0,j.jsx)(g,{...e,...r}),(0,j.jsx)(f,{...e,...r})]})}function v(e){const r=(0,x.Z)();return(0,j.jsx)(w,{...e,children:u(e.children)},String(r))}},1872:(e,r,n)=>{n.d(r,{m:()=>o});n(7294);const t="leadText_qzwo";var s=n(5893);const o=e=>{let{content:r}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:t,children:r})})}},1151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>i});var t=n(7294);const s={},o=t.createContext(s);function i(e){const r=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6f35f557.0bd177a2.js b/assets/js/6f35f557.12b190b2.js similarity index 98% rename from assets/js/6f35f557.0bd177a2.js rename to assets/js/6f35f557.12b190b2.js index 1152ea149..e9f1e49dd 100644 --- a/assets/js/6f35f557.0bd177a2.js +++ b/assets/js/6f35f557.12b190b2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5295],{3591:e=>{e.exports=JSON.parse('{"label":"Cloud Page","permalink":"/docs/tags/cloud-page","allTagsPath":"/docs/tags","count":8,"items":[{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","permalink":"/docs/js/js-dom"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5295],{3591:e=>{e.exports=JSON.parse('{"label":"Cloud Page","permalink":"/docs/tags/cloud-page","allTagsPath":"/docs/tags","count":8,"items":[{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","permalink":"/docs/js/js-dom"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/7273.b7681d25.js b/assets/js/7273.b7681d25.js new file mode 100644 index 000000000..2648a98e4 --- /dev/null +++ b/assets/js/7273.b7681d25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7273],{7273:(t,i,n)=>{n.d(i,{diagram:()=>o});var s=n(6365),e=(n(7484),n(7967),n(4218),n(7856),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;r<e.length;r++)if((n=this._input.match(this.rules[e[r]]))&&(!i||n[0].length>i[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.z)(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/734af923.f5f662e0.js b/assets/js/734af923.66e54a0c.js similarity index 81% rename from assets/js/734af923.f5f662e0.js rename to assets/js/734af923.66e54a0c.js index b4cb7e76b..da0b39727 100644 --- a/assets/js/734af923.f5f662e0.js +++ b/assets/js/734af923.66e54a0c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3265],{7980:e=>{e.exports=JSON.parse('{"label":"FAQ","permalink":"/sites/tags/faq","allTagsPath":"/sites/tags","count":2,"items":[{"id":"faq/how-to-get-sfmc-hands-on-experience","title":"How to get hands-on experience with SFMC","description":"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?","permalink":"/sites/faq/how-to-get-sfmc-hands-on-experience"},{"id":"faq/how-to-get-sf-certification-vouchers","title":"How to get SF Certification vouchers?","description":"Salesforce Certifications. What, why and how (you can pay less).","permalink":"/sites/faq/how-to-get-sf-certification-vouchers"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3265],{2693:e=>{e.exports=JSON.parse('{"label":"FAQ","permalink":"/sites/tags/faq","allTagsPath":"/sites/tags","count":2,"items":[{"id":"faq/how-to-get-sfmc-hands-on-experience","title":"How to get hands-on experience with SFMC","description":"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?","permalink":"/sites/faq/how-to-get-sfmc-hands-on-experience"},{"id":"faq/how-to-get-sf-certification-vouchers","title":"How to get SF Certification vouchers?","description":"Salesforce Certifications. What, why and how (you can pay less).","permalink":"/sites/faq/how-to-get-sf-certification-vouchers"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/75f11010.669b6480.js b/assets/js/75f11010.51fb09b8.js similarity index 70% rename from assets/js/75f11010.669b6480.js rename to assets/js/75f11010.51fb09b8.js index 2173ddc85..dc7fb9442 100644 --- a/assets/js/75f11010.669b6480.js +++ b/assets/js/75f11010.51fb09b8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[362],{7772:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud Personalization","permalink":"/docs/tags/marketing-cloud-personalization","allTagsPath":"/docs/tags","count":5,"items":[{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[362],{7772:e=>{e.exports=JSON.parse('{"label":"Marketing Cloud Personalization","permalink":"/docs/tags/marketing-cloud-personalization","allTagsPath":"/docs/tags","count":6,"items":[{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-context","title":"MCP Serverside Code Context","description":"Context is king. Also when writing MCP Template Serverside Code.","permalink":"/docs/interaction-studio/mcp-serverside-code-context"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/765.736383f9.js b/assets/js/765.736383f9.js new file mode 100644 index 000000000..e171fb6bb --- /dev/null +++ b/assets/js/765.736383f9.js @@ -0,0 +1,10065 @@ +"use strict"; +exports.id = 765; +exports.ids = [765]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 29765: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + +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 = [5, 6, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63], $V5 = [1, 18], $V6 = [2, 7], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 20], $Ve = [1, 28], $Vf = [1, 29], $Vg = [62, 63], $Vh = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 51, 53, 62, 63], $Vi = [1, 47], $Vj = [1, 48], $Vk = [1, 49], $Vl = [1, 50], $Vm = [1, 51], $Vn = [1, 52], $Vo = [1, 53], $Vp = [53, 54], $Vq = [1, 64], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 65], $Vw = [1, 69], $Vx = [1, 70], $Vy = [1, 67], $Vz = [1, 68], $VA = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63]; + var parser2 = { + trace: function trace() { + }, + 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 anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 5: + case 6: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 7: + this.$ = []; + break; + case 13: + yy.addRequirement($$[$0 - 3], $$[$0 - 4]); + break; + case 14: + yy.setNewReqId($$[$0 - 2]); + break; + case 15: + yy.setNewReqText($$[$0 - 2]); + break; + case 16: + yy.setNewReqRisk($$[$0 - 2]); + break; + case 17: + yy.setNewReqVerifyMethod($$[$0 - 2]); + break; + case 20: + this.$ = yy.RequirementType.REQUIREMENT; + break; + case 21: + this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; + break; + case 22: + this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; + break; + case 23: + this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; + break; + case 24: + this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; + break; + case 25: + this.$ = yy.RequirementType.DESIGN_CONSTRAINT; + break; + case 26: + this.$ = yy.RiskLevel.LOW_RISK; + break; + case 27: + this.$ = yy.RiskLevel.MED_RISK; + break; + case 28: + this.$ = yy.RiskLevel.HIGH_RISK; + break; + case 29: + this.$ = yy.VerifyType.VERIFY_ANALYSIS; + break; + case 30: + this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; + break; + case 31: + this.$ = yy.VerifyType.VERIFY_INSPECTION; + break; + case 32: + this.$ = yy.VerifyType.VERIFY_TEST; + break; + case 33: + yy.addElement($$[$0 - 3]); + break; + case 34: + yy.setNewElementType($$[$0 - 2]); + break; + case 35: + yy.setNewElementDocRef($$[$0 - 2]); + break; + case 38: + yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 39: + yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 40: + this.$ = yy.Relationships.CONTAINS; + break; + case 41: + this.$ = yy.Relationships.COPIES; + break; + case 42: + this.$ = yy.Relationships.DERIVES; + break; + case 43: + this.$ = yy.Relationships.SATISFIES; + break; + case 44: + this.$ = yy.Relationships.VERIFIES; + break; + case 45: + this.$ = yy.Relationships.REFINES; + break; + case 46: + this.$ = yy.Relationships.TRACES; + break; + } + }, + table: [{ 3: 1, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [3] }, { 3: 8, 4: 2, 5: [1, 7], 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 5: [1, 9] }, { 10: [1, 10] }, { 12: [1, 11] }, o($V4, [2, 6]), { 3: 12, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [2, 2] }, { 4: 17, 5: $V5, 7: 13, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, o($V4, [2, 4]), o($V4, [2, 5]), { 1: [2, 1] }, { 8: [1, 30] }, { 4: 17, 5: $V5, 7: 31, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 32, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 33, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 34, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 35, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 18: 36, 62: [1, 37], 63: [1, 38] }, { 45: 39, 62: [1, 40], 63: [1, 41] }, { 51: [1, 42], 53: [1, 43] }, o($Vg, [2, 20]), o($Vg, [2, 21]), o($Vg, [2, 22]), o($Vg, [2, 23]), o($Vg, [2, 24]), o($Vg, [2, 25]), o($Vh, [2, 49]), o($Vh, [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: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 52: 54, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 5: [1, 55] }, { 5: [1, 56] }, { 53: [1, 57] }, o($Vp, [2, 40]), o($Vp, [2, 41]), o($Vp, [2, 42]), o($Vp, [2, 43]), o($Vp, [2, 44]), o($Vp, [2, 45]), o($Vp, [2, 46]), { 54: [1, 58] }, { 5: $Vq, 20: 59, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 66, 47: $Vy, 49: $Vz }, { 23: 71, 62: $Ve, 63: $Vf }, { 23: 72, 62: $Ve, 63: $Vf }, o($VA, [2, 13]), { 22: [1, 73] }, { 22: [1, 74] }, { 22: [1, 75] }, { 22: [1, 76] }, { 5: $Vq, 20: 77, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, o($VA, [2, 19]), o($VA, [2, 33]), { 22: [1, 78] }, { 22: [1, 79] }, { 5: $Vw, 30: $Vx, 46: 80, 47: $Vy, 49: $Vz }, o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), { 23: 81, 62: $Ve, 63: $Vf }, { 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] }, o($VA, [2, 18]), { 48: 94, 62: [1, 95], 63: [1, 96] }, { 50: 97, 62: [1, 98], 63: [1, 99] }, o($VA, [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: $Vq, 20: 106, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 107, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 108, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 109, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 110, 47: $Vy, 49: $Vz }, { 5: $Vw, 30: $Vx, 46: 111, 47: $Vy, 49: $Vz }, o($VA, [2, 14]), o($VA, [2, 15]), o($VA, [2, 16]), o($VA, [2, 17]), o($VA, [2, 34]), o($VA, [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 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 "title"; + case 1: + this.begin("acc_title"); + return 9; + case 2: + this.popState(); + return "acc_title_value"; + case 3: + this.begin("acc_descr"); + return 11; + case 4: + this.popState(); + return "acc_descr_value"; + case 5: + this.begin("acc_descr_multiline"); + break; + case 6: + this.popState(); + break; + case 7: + return "acc_descr_multiline_value"; + case 8: + return 5; + case 9: + break; + case 10: + break; + 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 48: + this.popState(); + break; + case 49: + return "qString"; + case 50: + yy_.yytext = yy_.yytext.trim(); + return 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": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [48, 49], "inclusive": false }, "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": 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 relations = []; +let latestRequirement = {}; +let requirements = {}; +let latestElement = {}; +let elements = {}; +const RequirementType = { + REQUIREMENT: "Requirement", + FUNCTIONAL_REQUIREMENT: "Functional Requirement", + INTERFACE_REQUIREMENT: "Interface Requirement", + PERFORMANCE_REQUIREMENT: "Performance Requirement", + PHYSICAL_REQUIREMENT: "Physical Requirement", + DESIGN_CONSTRAINT: "Design Constraint" +}; +const RiskLevel = { + LOW_RISK: "Low", + MED_RISK: "Medium", + HIGH_RISK: "High" +}; +const VerifyType = { + VERIFY_ANALYSIS: "Analysis", + VERIFY_DEMONSTRATION: "Demonstration", + VERIFY_INSPECTION: "Inspection", + VERIFY_TEST: "Test" +}; +const Relationships = { + CONTAINS: "contains", + COPIES: "copies", + DERIVES: "derives", + SATISFIES: "satisfies", + VERIFIES: "verifies", + REFINES: "refines", + TRACES: "traces" +}; +const addRequirement = (name, type) => { + if (requirements[name] === void 0) { + requirements[name] = { + name, + type, + id: latestRequirement.id, + text: latestRequirement.text, + risk: latestRequirement.risk, + verifyMethod: latestRequirement.verifyMethod + }; + } + latestRequirement = {}; + return requirements[name]; +}; +const getRequirements = () => requirements; +const setNewReqId = (id) => { + if (latestRequirement !== void 0) { + latestRequirement.id = id; + } +}; +const setNewReqText = (text) => { + if (latestRequirement !== void 0) { + latestRequirement.text = text; + } +}; +const setNewReqRisk = (risk) => { + if (latestRequirement !== void 0) { + latestRequirement.risk = risk; + } +}; +const setNewReqVerifyMethod = (verifyMethod) => { + if (latestRequirement !== void 0) { + latestRequirement.verifyMethod = verifyMethod; + } +}; +const addElement = (name) => { + if (elements[name] === void 0) { + elements[name] = { + name, + type: latestElement.type, + docRef: latestElement.docRef + }; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", name); + } + latestElement = {}; + return elements[name]; +}; +const getElements = () => elements; +const setNewElementType = (type) => { + if (latestElement !== void 0) { + latestElement.type = type; + } +}; +const setNewElementDocRef = (docRef) => { + if (latestElement !== void 0) { + latestElement.docRef = docRef; + } +}; +const addRelationship = (type, src, dst) => { + relations.push({ + type, + src, + dst + }); +}; +const getRelationships = () => relations; +const clear = () => { + relations = []; + latestRequirement = {}; + requirements = {}; + latestElement = {}; + elements = {}; + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.t)(); +}; +const db = { + RequirementType, + RiskLevel, + VerifyType, + Relationships, + getConfig: () => (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().req, + addRequirement, + getRequirements, + setNewReqId, + setNewReqText, + setNewReqRisk, + setNewReqVerifyMethod, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.g, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.b, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.a, + addElement, + getElements, + setNewElementType, + setNewElementDocRef, + addRelationship, + getRelationships, + clear +}; +const getStyles = (options) => ` + + marker { + fill: ${options.relationColor}; + stroke: ${options.relationColor}; + } + + marker.cross { + stroke: ${options.lineColor}; + } + + svg { + font-family: ${options.fontFamily}; + font-size: ${options.fontSize}; + } + + .reqBox { + fill: ${options.requirementBackground}; + fill-opacity: 1.0; + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${options.requirementTextColor}; + } + .reqLabelBox { + fill: ${options.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + .relationshipLine { + stroke: ${options.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${options.relationLabelColor}; + } + +`; +const styles = getStyles; +const ReqMarkers = { + CONTAINS: "contains", + ARROW: "arrow" +}; +const insertLineEndings = (parentNode, conf2) => { + let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf2.line_height / 2).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("g"); + containsNode.append("circle").attr("cx", conf2.line_height / 2).attr("cy", conf2.line_height / 2).attr("r", conf2.line_height / 2).attr("fill", "none"); + containsNode.append("line").attr("x1", 0).attr("x2", conf2.line_height).attr("y1", conf2.line_height / 2).attr("y2", conf2.line_height / 2).attr("stroke-width", 1); + containsNode.append("line").attr("y1", 0).attr("y2", conf2.line_height).attr("x1", conf2.line_height / 2).attr("x2", conf2.line_height / 2).attr("stroke-width", 1); + parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf2.line_height).attr("refY", 0.5 * conf2.line_height).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("path").attr( + "d", + `M0,0 + L${conf2.line_height},${conf2.line_height / 2} + M${conf2.line_height},${conf2.line_height / 2} + L0,${conf2.line_height}` + ).attr("stroke-width", 1); +}; +const markers = { + ReqMarkers, + insertLineEndings +}; +let conf = {}; +let relCnt = 0; +const newRectNode = (parentNode, id) => { + return parentNode.insert("rect", "#" + id).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf.rect_min_width + "px").attr("height", conf.rect_min_height + "px"); +}; +const newTitleNode = (parentNode, id, txts) => { + let x = conf.rect_min_width / 2; + let title = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id).attr("x", x).attr("y", conf.rect_padding).attr("dominant-baseline", "hanging"); + let i = 0; + txts.forEach((textStr) => { + if (i == 0) { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", 0).text(textStr); + } else { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", conf.line_height * 0.75).text(textStr); + } + i++; + }); + let yPadding = 1.5 * conf.rect_padding; + let linePadding = i * conf.line_height * 0.75; + let totalY = yPadding + linePadding; + parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf.rect_min_width).attr("y1", totalY).attr("y2", totalY); + return { + titleNode: title, + y: totalY + }; +}; +const newBodyNode = (parentNode, id, txts, yStart) => { + let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id).attr("x", conf.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging"); + let currentRow = 0; + const charLimit = 30; + let wrappedTxts = []; + txts.forEach((textStr) => { + let currentTextLen = textStr.length; + while (currentTextLen > charLimit && currentRow < 3) { + let firstPart = textStr.substring(0, charLimit); + textStr = textStr.substring(charLimit, textStr.length); + currentTextLen = textStr.length; + wrappedTxts[wrappedTxts.length] = firstPart; + currentRow++; + } + if (currentRow == 3) { + let lastStr = wrappedTxts[wrappedTxts.length - 1]; + wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "..."; + } else { + wrappedTxts[wrappedTxts.length] = textStr; + } + currentRow = 0; + }); + wrappedTxts.forEach((textStr) => { + body.append("tspan").attr("x", conf.rect_padding).attr("dy", conf.line_height).text(textStr); + }); + return body; +}; +const addEdgeLabel = (parentNode, svgPath, conf2, txt) => { + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + relCnt++; + const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt); + const labelBBox = labelNode.node().getBBox(); + parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%"); +}; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + const edge = g.edge(elementString(rel.src), elementString(rel.dst)); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }); + const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none"); + if (rel.type == diagObj.db.Relationships.CONTAINS) { + svgPath.attr( + "marker-start", + "url(" + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + rel.type + "_line_ending)" + ); + } else { + svgPath.attr("stroke-dasharray", "10,7"); + svgPath.attr( + "marker-end", + "url(" + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + markers.ReqMarkers.ARROW + "_line_ending)" + ); + } + addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`); + return; +}; +const drawReqs = (reqs, graph, svgNode) => { + Object.keys(reqs).forEach((reqName) => { + let req = reqs[reqName]; + reqName = elementString(reqName); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", reqName); + const groupNode = svgNode.append("g").attr("id", reqName); + const textId = "req-" + reqName; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [ + `<<${req.type}>>`, + `${req.name}` + ]); + newBodyNode( + groupNode, + reqName + "_body", + [ + `Id: ${req.id}`, + `Text: ${req.text}`, + `Risk: ${req.risk}`, + `Verification: ${req.verifyMethod}` + ], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(reqName, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: reqName + }); + }); +}; +const drawElements = (els, graph, svgNode) => { + Object.keys(els).forEach((elName) => { + let el = els[elName]; + const id = elementString(elName); + const groupNode = svgNode.append("g").attr("id", id); + const textId = "element-" + id; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<<Element>>`, `${elName}`]); + newBodyNode( + groupNode, + textId + "_body", + [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(id, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id + }); + }); +}; +const addRelationships = (relationships, g) => { + relationships.forEach(function(r) { + let src = elementString(r.src); + let dst = elementString(r.dst); + g.setEdge(src, dst, { relationship: r }); + }); + return relationships; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v); + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); + return; +}; +const elementString = (str) => { + return str.replace(/\s/g, "").replace(/\./g, "_"); +}; +const draw = (text, id, _version, diagObj) => { + conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.c)().requirement; + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id='${id}']`); + markers.insertLineEndings(svg, conf); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: false, + compound: false, + directed: true + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let requirements2 = diagObj.db.getRequirements(); + let elements2 = diagObj.db.getElements(); + let relationships = diagObj.db.getRelationships(); + drawReqs(requirements2, g, svg); + drawElements(elements2, g, svg); + addRelationships(relationships, g); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + adjustEntities(svg, g); + relationships.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, id, diagObj); + }); + const padding = conf.rect_padding; + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_6__.i)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/7724.4286755f.js b/assets/js/7724.4286755f.js deleted file mode 100644 index 0d672d205..000000000 --- a/assets/js/7724.4286755f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 7724.4286755f.js.LICENSE.txt */ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7724],{4182: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;i<r.length;i++)null==(n=r[i]).getChild()?(n.moveBy(e,t),n.displacementX+=e,n.displacementY+=t):n.propogateDisplacementToChildren(e,t)},a.prototype.setPred1=function(e){this.pred1=e},a.prototype.getPred1=function(){return pred1},a.prototype.getPred2=function(){return pred2},a.prototype.setNext=function(e){this.next=e},a.prototype.getNext=function(){return next},a.prototype.setProcessed=function(e){this.processed=e},a.prototype.isProcessed=function(){return processed},e.exports=a},function(e,t,n){"use strict";var r=n(0).FDLayout,i=n(4),a=n(3),o=n(5),s=n(2),l=n(1),u=n(0).FDLayoutConstants,c=n(0).LayoutConstants,h=n(0).Point,d=n(0).PointD,p=n(0).Layout,g=n(0).Integer,f=n(0).IGeometry,v=n(0).LGraph,y=n(0).Transform;function m(){r.call(this),this.toBeTiled={}}for(var b in m.prototype=Object.create(r.prototype),r)m[b]=r[b];m.prototype.newGraphManager=function(){var e=new i(this);return this.graphManager=e,e},m.prototype.newGraph=function(e){return new a(null,this.graphManager,e)},m.prototype.newNode=function(e){return new o(this.graphManager,e)},m.prototype.newEdge=function(e){return new s(null,null,e)},m.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=u.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=u.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=u.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=u.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=u.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=u.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/u.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=u.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},m.prototype.layout=function(){return c.DEFAULT_CREATE_BENDS_AS_NEEDED&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},m.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental)l.TREE_REDUCTION_ON_INCREMENTAL&&(this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation(),t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)})),this.graphManager.setAllNodesToApplyGravitation(n));else{var e=this.getFlatForest();if(e.length>0)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;n<e.length;n++){var r=e[n].rect,i=e[n].id;t[i]={id:i,x:r.getCenterX(),y:r.getCenterY(),w:r.width,h:r.height}}return t},m.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var e=!1;if("during"===u.ANIMATE)this.emit("layoutstarted");else{for(;!e;)e=this.tick();this.graphManager.updateBounds()}},m.prototype.calculateNodesToApplyGravitationTo=function(){var e,t,n=[],r=this.graphManager.getGraphs(),i=r.length;for(t=0;t<i;t++)(e=r[t]).updateConnected(),e.isConnected||(n=n.concat(e.getNodes()));return n},m.prototype.createBendpoints=function(){var e=[];e=e.concat(this.graphManager.getAllEdges());var t,n=new Set;for(t=0;t<e.length;t++){var r=e[t];if(!n.has(r)){var i=r.getSource(),a=r.getTarget();if(i==a)r.getBendpoints().push(new d),r.getBendpoints().push(new d),this.createDummyNodesForBendpoints(r),n.add(r);else{var o=[];if(o=(o=o.concat(i.getEdgeListToNode(a))).concat(a.getEdgeListToNode(i)),!n.has(o[0])){var s;if(o.length>1)for(s=0;s<o.length;s++){var l=o[s];l.getBendpoints().push(new d),this.createDummyNodesForBendpoints(l)}o.forEach((function(e){n.add(e)}))}}}if(n.size==e.length)break}},m.prototype.positionNodesRadially=function(e){for(var t=new h(0,0),n=Math.ceil(Math.sqrt(e.length)),r=0,i=0,a=0,o=new d(0,0),s=0;s<e.length;s++){s%n==0&&(a=0,i=r,0!=s&&(i+=l.DEFAULT_COMPONENT_SEPERATION),r=0);var u=e[s],g=p.findCenterOfTree(u);t.x=a,t.y=i,(o=m.radialLayout(u,g,t)).y>r&&(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;o<e.length;o++)e[o].transform(a);var s=new d(i.getMaxX(),i.getMaxY());return a.inverseTransformPoint(s)},m.branchRadialLayout=function(e,t,n,r,i,a){var o=(r-n+1)/2;o<0&&(o+=180);var s=(o+n)%360*f.TWO_PI/360,l=(Math.cos(s),i*Math.cos(s)),u=i*Math.sin(s);e.setCenter(l,u);var c=[],h=(c=c.concat(e.getEdges())).length;null!=t&&h--;for(var d,p=0,g=c.length,v=e.getEdgesBetween(t);v.length>1;){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 T=(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;n<e.length;n++){var r=e[n].getDiagonal();r>t&&(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;i<r.length;i++){var a=(s=r[i]).getParent();0!==this.getNodeDegreeWithChildren(s)||null!=a.id&&this.getToBeTiled(a)||n.push(s)}for(i=0;i<n.length;i++){var s,l=(s=n[i]).getParent().id;void 0===t[l]&&(t[l]=[]),t[l]=t[l].concat(s)}Object.keys(t).forEach((function(n){if(t[n].length>1){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<t[n].length;u++){var c=t[n][u];l.remove(c),s.add(c)}}}))},m.prototype.clearCompounds=function(){var e={},t={};this.performDFSOnCompounds();for(var n=0;n<this.compoundOrder.length;n++)t[this.compoundOrder[n].id]=this.compoundOrder[n],e[this.compoundOrder[n].id]=[].concat(this.compoundOrder[n].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[n].getChild()),this.compoundOrder[n].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(e,t)},m.prototype.clearZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach((function(n){var r=e.idToDummyNode[n];t[n]=e.tileNodes(e.memberGroups[n],r.paddingLeft+r.paddingRight),r.rect.width=t[n].width,r.rect.height=t[n].height}))},m.prototype.repopulateCompounds=function(){for(var e=this.compoundOrder.length-1;e>=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;i<r.length;i++){var a=r[i];if(this.getNodeDegree(a)>0)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;r<t.length;r++){var i=t[r];i.getSource().id!==i.getTarget().id&&(n+=1)}return n},m.prototype.getNodeDegreeWithChildren=function(e){var t=this.getNodeDegree(e);if(null==e.getChild())return t;for(var n=e.getChild().getNodes(),r=0;r<n.length;r++){var i=n[r];t+=this.getNodeDegreeWithChildren(i)}return t},m.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},m.prototype.fillCompexOrderByDFS=function(e){for(var t=0;t<e.length;t++){var n=e[t];null!=n.getChild()&&this.fillCompexOrderByDFS(n.getChild().getNodes()),this.getToBeTiled(n)&&this.compoundOrder.push(n)}},m.prototype.adjustLocations=function(e,t,n,r,i){n+=i;for(var a=t+=r,o=0;o<e.rows.length;o++){var s=e.rows[o];t=a;for(var l=0,u=0;u<s.length;u++){var c=s[u];c.rect.x=t,c.rect.y=n,t+=c.rect.width+e.horizontalPadding,c.rect.height>l&&(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.height<t.rect.width*t.rect.height?1:0}));for(var r=0;r<e.length;r++){var i=e[r];0==n.rows.length?this.insertNodeToRow(n,i,0,t):this.canAddHorizontal(n,i.rect.width,i.rect.height)?this.insertNodeToRow(n,i,this.getShortestRowIndex(n),t):this.insertNodeToRow(n,i,n.rows.length,t),this.shiftToLastRow(n)}return n},m.prototype.insertNodeToRow=function(e,t,n,r){var i=r;n==e.rows.length&&(e.rows.push([]),e.rowWidth.push(i),e.rowHeight.push(0));var a=e.rowWidth[n]+t.rect.width;e.rows[n].length>0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width<a&&(e.width=a);var o=t.rect.height;n>0&&(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;r<e.rows.length;r++)e.rowWidth[r]<n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.getLongestRowIndex=function(e){for(var t=-1,n=Number.MIN_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]>n&&(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]<n&&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.width<t?(e.height+s)/t:(e.height+s)/e.width)<1&&(o=1/o),a<1&&(a=1/a),a<o},m.prototype.shiftToLastRow=function(e){var t=this.getLongestRowIndex(e),n=e.rowWidth.length-1,r=e.rows[t],i=r[r.length-1],a=i.width+e.horizontalPadding;if(e.width-e.rowWidth[n]>a&&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;s<r.length;s++)r[s].height>o&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]<i.height+e.verticalPadding&&(e.rowHeight[n]=i.height+e.verticalPadding);var u=e.rowHeight[t]+e.rowHeight[n];e.height+=u-l,this.shiftToLastRow(e)}},m.prototype.tilingPreLayout=function(){l.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},m.prototype.tilingPostLayout=function(){l.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},m.prototype.reduceTrees=function(){for(var e,t=[],n=!0;n;){var r=this.graphManager.getAllNodes(),i=[];n=!1;for(var a=0;a<r.length;a++)1!=(e=r[a]).getEdges().length||e.getEdges()[0].isInterGraph||null!=e.getChild()||(i.push([e,e.getEdges()[0],e.getOwner()]),n=!0);if(1==n){for(var o=[],s=0;s<i.length;s++)1==i[s][0].getEdges().length&&(o.push(i[s]),i[s][0].getOwner().remove(i[s][0]));t.push(o),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},m.prototype.growTree=function(e){for(var t,n=e[e.length-1],r=0;r<n.length;r++)t=n[r],this.findPlaceforPrunedNode(t),t[2].add(t[0]),t[2].add(t[1],t[1].source,t[1].target);e.splice(e.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},m.prototype.findPlaceforPrunedNode=function(e){var t,n,r=e[0],i=(n=r==e[1].source?e[1].target:e[1].source).startX,a=n.finishX,o=n.startY,s=n.finishY,l=[0,0,0,0];if(o>0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a<this.grid.length-1)for(c=o;c<=s;c++)l[1]+=this.grid[a+1][c].length+this.grid[a][c].length-1;if(s<this.grid[0].length-1)for(c=i;c<=a;c++)l[2]+=this.grid[c][s+1].length+this.grid[c][s].length-1;if(i>0)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;f<l.length;f++)l[f]<p?(p=l[f],h=1,d=f):l[f]==p&&h++;if(3==h&&0==p)0==l[0]&&0==l[1]&&0==l[2]?t=1:0==l[0]&&0==l[1]&&0==l[3]?t=0:0==l[0]&&0==l[2]&&0==l[3]?t=3:0==l[1]&&0==l[2]&&0==l[3]&&(t=2);else if(2==h&&0==p){var v=Math.floor(2*Math.random());t=0==l[0]&&0==l[1]?0==v?0:1:0==l[0]&&0==l[2]?0==v?0:2:0==l[0]&&0==l[3]?0==v?0:3:0==l[1]&&0==l[2]?0==v?1:2:0==l[1]&&0==l[3]?0==v?1:3:0==v?2:3}else t=4==h&&0==p?v=Math.floor(4*Math.random()):d;0==t?r.setCenter(n.getCenterX(),n.getCenterY()-n.getHeight()/2-u.DEFAULT_EDGE_LENGTH-r.getHeight()/2):1==t?r.setCenter(n.getCenterX()+n.getWidth()/2+u.DEFAULT_EDGE_LENGTH+r.getWidth()/2,n.getCenterY()):2==t?r.setCenter(n.getCenterX(),n.getCenterY()+n.getHeight()/2+u.DEFAULT_EDGE_LENGTH+r.getHeight()/2):r.setCenter(n.getCenterX()-n.getWidth()/2-u.DEFAULT_EDGE_LENGTH-r.getWidth()/2,n.getCenterY())},e.exports=m},function(e,t,n){"use strict";var r={};r.layoutBase=n(0),r.CoSEConstants=n(1),r.CoSEEdge=n(2),r.CoSEGraph=n(3),r.CoSEGraphManager=n(4),r.CoSELayout=n(6),r.CoSENode=n(5),e.exports=r}])},e.exports=r(n(2241))},4607: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=1)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).layoutBase.LayoutConstants,i=n(0).layoutBase.FDLayoutConstants,a=n(0).CoSEConstants,o=n(0).CoSELayout,s=n(0).CoSENode,l=n(0).layoutBase.PointD,u=n(0).layoutBase.DimensionD,c={ready:function(){},stop:function(){},quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function h(e){this.options=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(c,e),d(this.options)}var d=function(e){null!=e.nodeRepulsion&&(a.DEFAULT_REPULSION_STRENGTH=i.DEFAULT_REPULSION_STRENGTH=e.nodeRepulsion),null!=e.idealEdgeLength&&(a.DEFAULT_EDGE_LENGTH=i.DEFAULT_EDGE_LENGTH=e.idealEdgeLength),null!=e.edgeElasticity&&(a.DEFAULT_SPRING_STRENGTH=i.DEFAULT_SPRING_STRENGTH=e.edgeElasticity),null!=e.nestingFactor&&(a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=e.nestingFactor),null!=e.gravity&&(a.DEFAULT_GRAVITY_STRENGTH=i.DEFAULT_GRAVITY_STRENGTH=e.gravity),null!=e.numIter&&(a.MAX_ITERATIONS=i.MAX_ITERATIONS=e.numIter),null!=e.gravityRange&&(a.DEFAULT_GRAVITY_RANGE_FACTOR=i.DEFAULT_GRAVITY_RANGE_FACTOR=e.gravityRange),null!=e.gravityCompound&&(a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=e.gravityCompound),null!=e.gravityRangeCompound&&(a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=e.gravityRangeCompound),null!=e.initialEnergyOnIncremental&&(a.DEFAULT_COOLING_FACTOR_INCREMENTAL=i.DEFAULT_COOLING_FACTOR_INCREMENTAL=e.initialEnergyOnIncremental),"draft"==e.quality?r.QUALITY=0:"proof"==e.quality?r.QUALITY=2:r.QUALITY=1,a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=r.NODE_DIMENSIONS_INCLUDE_LABELS=e.nodeDimensionsIncludeLabels,a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=r.DEFAULT_INCREMENTAL=!e.randomize,a.ANIMATE=i.ANIMATE=r.ANIMATE=e.animate,a.TILE=e.tile,a.TILING_PADDING_VERTICAL="function"==typeof e.tilingPaddingVertical?e.tilingPaddingVertical.call():e.tilingPaddingVertical,a.TILING_PADDING_HORIZONTAL="function"==typeof e.tilingPaddingHorizontal?e.tilingPaddingHorizontal.call():e.tilingPaddingHorizontal};h.prototype.run=function(){var e,t,n=this.options,r=(this.idToLNode={},this.layout=new o),i=this;i.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var a=r.newGraphManager();this.gm=a;var s=this.options.eles.nodes(),l=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(s),r);for(var u=0;u<l.length;u++){var c=l[u],h=this.idToLNode[c.data("source")],d=this.idToLNode[c.data("target")];h!==d&&0==h.getEdgesBetween(d).length&&(a.add(r.newEdge(),h,d).id=c.id())}var p=function(e,t){"number"==typeof e&&(e=t);var n=e.data("id"),r=i.idToLNode[n];return{x:r.getRect().getCenterX(),y:r.getRect().getCenterY()}},g=function a(){for(var o,s=function(){n.fit&&n.cy.fit(n.eles,n.padding),e||(e=!0,i.cy.one("layoutready",n.ready),i.cy.trigger({type:"layoutready",layout:i}))},l=i.options.refresh,u=0;u<l&&!o;u++)o=i.stopped||i.layout.tick();if(o)return r.checkLayoutSuccess()&&!r.isSubLayout&&r.doPostLayout(),r.tilingPostLayout&&r.tilingPostLayout(),r.isLayoutFinished=!0,i.options.eles.nodes().positions(p),s(),i.cy.one("layoutstop",i.options.stop),i.cy.trigger({type:"layoutstop",layout:i}),t&&cancelAnimationFrame(t),void(e=!1);var c=i.layout.getPositionsData();n.eles.nodes().positions((function(e,t){if("number"==typeof e&&(e=t),!e.isParent()){for(var n=e.id(),r=c[n],i=e;null==r&&(r=c[i.data("parent")]||c["DummyCompound_"+i.data("parent")],c[n]=r,null!=(i=i.parent()[0])););return null!=r?{x:r.x,y:r.y}:{x:e.position("x"),y:e.position("y")}}})),s(),t=requestAnimationFrame(a)};return r.addListener("layoutstarted",(function(){"during"===i.options.animate&&(t=requestAnimationFrame(g))})),r.runLayout(),"during"!==this.options.animate&&(i.options.eles.nodes().not(":parent").layoutPositions(i,i.options,p),e=!1),this},h.prototype.getTopMostNodes=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].id()]=!0;var r=e.filter((function(e,n){"number"==typeof e&&(e=n);for(var r=e.parent()[0];null!=r;){if(t[r.id()])return!1;r=r.parent()[0]}return!0}));return r},h.prototype.processChildrenList=function(e,t,n){for(var r=t.length,i=0;i<r;i++){var a,o,c=t[i],h=c.children(),d=c.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if((a=null!=c.outerWidth()&&null!=c.outerHeight()?e.add(new s(n.graphManager,new l(c.position("x")-d.w/2,c.position("y")-d.h/2),new u(parseFloat(d.w),parseFloat(d.h)))):e.add(new s(this.graphManager))).id=c.data("id"),a.paddingLeft=parseInt(c.css("padding")),a.paddingTop=parseInt(c.css("padding")),a.paddingRight=parseInt(c.css("padding")),a.paddingBottom=parseInt(c.css("padding")),this.options.nodeDimensionsIncludeLabels&&c.isParent()){var p=c.boundingBox({includeLabels:!0,includeNodes:!1}).w,g=c.boundingBox({includeLabels:!0,includeNodes:!1}).h,f=c.css("text-halign");a.labelWidth=p,a.labelHeight=g,a.labelPos=f}this.idToLNode[c.data("id")]=a,isNaN(a.rect.x)&&(a.rect.x=0),isNaN(a.rect.y)&&(a.rect.y=0),null!=h&&h.length>0&&(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(4182))},1377:function(e,t,n){e.exports=function(){"use strict";function e(t){return e="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},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){return s(e)||l(e,t)||u(e,t)||h()}function s(e){if(Array.isArray(e))return e}function l(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(l){s=!0,i=l}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}}function u(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var d="undefined"==typeof window?null:window,p=d?d.navigator:null;d&&d.document;var g=e(""),f=e({}),v=e((function(){})),y="undefined"==typeof HTMLElement?"undefined":e(HTMLElement),m=function(e){return e&&e.instanceString&&x(e.instanceString)?e.instanceString():null},b=function(t){return null!=t&&e(t)==g},x=function(t){return null!=t&&e(t)===v},w=function(e){return!N(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},E=function(t){return null!=t&&e(t)===f&&!w(t)&&t.constructor===Object},T=function(t){return null!=t&&e(t)===f},_=function(t){return null!=t&&e(t)===e(1)&&!isNaN(t)},D=function(e){return _(e)&&Math.floor(e)===e},C=function(e){return"undefined"===y?void 0:null!=e&&e instanceof HTMLElement},N=function(e){return A(e)||L(e)},A=function(e){return"collection"===m(e)&&e._private.single},L=function(e){return"collection"===m(e)&&!e._private.single},S=function(e){return"core"===m(e)},O=function(e){return"stylesheet"===m(e)},I=function(e){return"event"===m(e)},k=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},M=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement},P=function(e){return E(e)&&_(e.x1)&&_(e.x2)&&_(e.y1)&&_(e.y2)},R=function(e){return T(e)&&x(e.then)},B=function(){return p&&p.userAgent.match(/msie|trident|edge/i)},F=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=this,a=arguments,o=t.apply(i,a),s=n.cache;return(r=s[o])||(r=s[o]=e.apply(i,a)),r};return n.cache={},n},z=F((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),G=F((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),Y=F((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),X=function(e){return k(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},V="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",U="rgb[a]?\\(("+V+"[%]?)\\s*,\\s*("+V+"[%]?)\\s*,\\s*("+V+"[%]?)(?:\\s*,\\s*("+V+"))?\\)",j="rgb[a]?\\((?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)\\s*,\\s*(?:"+V+"[%]?)(?:\\s*,\\s*(?:"+V+"))?\\)",H="hsl[a]?\\(("+V+")\\s*,\\s*("+V+"[%])\\s*,\\s*("+V+"[%])(?:\\s*,\\s*("+V+"))?\\)",q="hsl[a]?\\((?:"+V+")\\s*,\\s*(?:"+V+"[%])\\s*,\\s*(?:"+V+"[%])(?:\\s*,\\s*(?:"+V+"))?\\)",W="\\#[0-9a-fA-F]{3}",$="\\#[0-9a-fA-F]{6}",K=function(e,t){return e<t?-1:e>t?1:0},Z=function(e,t){return-1*K(e,t)},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},J=function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}},ee=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("^"+H+"$").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},te=function(e){var t,n=new RegExp("^"+U+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)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},ne=function(e){return ie[e.toLowerCase()]},re=function(e){return(w(e)?e:null)||ne(e)||J(e)||te(e)||ee(e)},ie={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]},ae=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},oe=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(E(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t};function se(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var le=se,ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function ce(e,t){return e(t={exports:{}},t.exports),t.exports}var he="object"==typeof ue&&ue&&ue.Object===Object&&ue,de="object"==typeof self&&self&&self.Object===Object&&self,pe=he||de||Function("return this")(),ge=function(){return pe.Date.now()},fe=/\s/;function ve(e){for(var t=e.length;t--&&fe.test(e.charAt(t)););return t}var ye=ve,me=/^\s+/;function be(e){return e?e.slice(0,ye(e)+1).replace(me,""):e}var xe=be,we=pe.Symbol,Ee=Object.prototype,Te=Ee.hasOwnProperty,_e=Ee.toString,De=we?we.toStringTag:void 0;function Ce(e){var t=Te.call(e,De),n=e[De];try{e[De]=void 0;var r=!0}catch(a){}var i=_e.call(e);return r&&(t?e[De]=n:delete e[De]),i}var Ne=Ce,Ae=Object.prototype.toString;function Le(e){return Ae.call(e)}var Se=Le,Oe="[object Null]",Ie="[object Undefined]",ke=we?we.toStringTag:void 0;function Me(e){return null==e?void 0===e?Ie:Oe:ke&&ke in Object(e)?Ne(e):Se(e)}var Pe=Me;function Re(e){return null!=e&&"object"==typeof e}var Be=Re,Fe="[object Symbol]";function ze(e){return"symbol"==typeof e||Be(e)&&Pe(e)==Fe}var Ge=ze,Ye=NaN,Xe=/^[-+]0x[0-9a-f]+$/i,Ve=/^0b[01]+$/i,Ue=/^0o[0-7]+$/i,je=parseInt;function He(e){if("number"==typeof e)return e;if(Ge(e))return Ye;if(le(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=le(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=xe(e);var n=Ve.test(e);return n||Ue.test(e)?je(e.slice(2),n?2:8):Xe.test(e)?Ye:+e}var qe=He,We="Expected a function",$e=Math.max,Ke=Math.min;function Ze(e,t,n){var r,i,a,o,s,l,u=0,c=!1,h=!1,d=!0;if("function"!=typeof e)throw new TypeError(We);function p(t){var n=r,a=i;return r=i=void 0,u=t,o=e.apply(a,n)}function g(e){return u=e,s=setTimeout(y,t),c?p(e):o}function f(e){var n=t-(e-l);return h?Ke(n,a-(e-u)):n}function v(e){var n=e-l;return void 0===l||n>=t||n<0||h&&e-u>=a}function y(){var e=ge();if(v(e))return m(e);s=setTimeout(y,f(e))}function m(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function b(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0}function x(){return void 0===s?o:m(ge())}function w(){var e=ge(),n=v(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return g(l);if(h)return clearTimeout(s),s=setTimeout(y,t),p(l)}return void 0===s&&(s=setTimeout(y,t)),o}return t=qe(t)||0,le(n)&&(c=!!n.leading,a=(h="maxWait"in n)?$e(qe(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),w.cancel=b,w.flush=x,w}var Qe=Ze,Je=d?d.performance:null,et=Je&&Je.now?function(){return Je.now()}:function(){return Date.now()},tt=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(et())}),1e3/60)}}(),nt=function(e){return tt(e)},rt=et,it=9261,at=65599,ot=5381,st=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:it;!(t=e.next()).done;)n=n*at+t.value|0;return n},lt=function(e){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:it)*at+e|0},ut=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ot;return(t<<5)+t+e|0},ct=function(e,t){return 2097152*e+t},ht=function(e){return 2097152*e[0]+e[1]},dt=function(e,t){return[lt(e[0],t[0]),ut(e[1],t[1])]},pt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)},gt=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return st({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},ft=function(){return vt(arguments)},vt=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?gt(r):gt(r,t)}return t},yt=!0,mt=null!=console.warn,bt=null!=console.trace,xt=Number.MAX_SAFE_INTEGER||9007199254740991,wt=function(){return!0},Et=function(){return!1},Tt=function(){return 0},_t=function(){},Dt=function(e){throw new Error(e)},Ct=function(e){if(void 0===e)return yt;yt=!!e},Nt=function(e){Ct()&&(mt?console.warn(e):(console.log(e),bt&&console.trace()))},At=function(e){return Q({},e)},Lt=function(e){return null==e?e:w(e)?e.slice():E(e)?At(e):e},St=function(e){return e.slice()},Ot=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},It={},kt=function(){return It},Mt=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Pt=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Rt=function(e){e.splice(0,e.length)},Bt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}},Ft=function(e,t,n){return n&&(t=Y(n,t)),e[t]},zt=function(e,t,n,r){n&&(t=Y(n,t)),e[t]=r},Gt=function(){function e(){t(this,e),this._obj={}}return i(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}(),Yt="undefined"!=typeof Map?Map:Gt,Xt="undefined",Vt=function(){function e(n){if(t(this,e),this._obj=Object.create(null),this.size=0,null!=n){var r;r=null!=n.instanceString&&n.instanceString()===this.instanceString()?n.toArray():n;for(var i=0;i<r.length;i++)this.add(r[i])}}return i(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ut=("undefined"==typeof Set?"undefined":e(Set))!==Xt?Set:Vt,jt=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&S(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 Ut,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;u<c;u++){var h=l[u];h&&""!==h&&i.classes.add(h)}this.createEmitter();var d=t.style||t.css;d&&(Nt("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(d)),(void 0===n||n)&&this.restore()}else Dt("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else Dt("An element must have a core reference and parameters set")},Ht=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;E(t)&&!N(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||x(n)?r:n,n=x(n)?n:function(){};for(var a,o=this._private.cy,s=t=b(t)?this.filter(t):t,l=[],u=[],c={},h={},d={},p=0,g=this.byGroup(),f=g.nodes,v=g.edges,y=0;y<s.length;y++){var m=s[y],w=m.id();m.isNode()&&(l.unshift(m),e.bfs&&(d[w]=!0,u.push(m)),h[w]=0)}for(var T=function(){var t=e.bfs?l.shift():l.pop(),i=t.id();if(e.dfs){if(d[i])return"continue";d[i]=!0,u.push(t)}var o=h[i],s=c[i],g=null!=s?s.source():null,y=null!=s?s.target():null,m=null==s?void 0:t.same(g)?y[0]:g[0],b=void 0;if(!0===(b=n(t,s,m,p++,o)))return a=t,"break";if(!1===b)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&v.has(e)})),w=0;w<x.length;w++){var E=x[w],T=E.connectedNodes().filter((function(e){return!e.same(t)&&f.has(e)})),_=T.id();0===T.length||d[_]||(T=T[0],l.push(T),e.bfs&&(d[_]=!0,u.push(T)),c[_]=E,h[_]=h[i]+1)}};0!==l.length;){var _=T();if("continue"!==_&&"break"===_)break}for(var D=o.collection(),C=0;C<u.length;C++){var A=u[C],L=c[A.id()];null!=L&&D.push(L),D.push(A)}return{path:o.collection(D),found:o.collection(a)}}},qt={breadthFirstSearch:Ht({bfs:!0}),depthFirstSearch:Ht({dfs:!0})};qt.bfs=qt.breadthFirstSearch,qt.dfs=qt.depthFirstSearch;var Wt=ce((function(e,t){(function(){var t,n,r,i,a,o,s,l,u,c,h,d,p,g,f;r=Math.floor,c=Math.min,n=function(e,t){return e<t?-1:e>t?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);i<a;)o(t,e[s=r((i+a)/2)])<0?a=s:i=s+1;return[].splice.apply(e,[i,i-i].concat(t)),t},o=function(e,t,r){return null==r&&(r=n),e.push(t),g(e,0,e.length-1,r)},a=function(e,t){var r,i;return null==t&&(t=n),r=e.pop(),e.length?(i=e[0],e[0]=r,f(e,0,t)):i=r,i},l=function(e,t,r){var i;return null==r&&(r=n),i=e[0],e[0]=t,f(e,0,r),i},s=function(e,t,r){var i;return null==r&&(r=n),e.length&&r(e[0],t)<0&&(t=(i=[e[0],t])[0],e[0]=i[1],f(e,0,r)),t},i=function(e,t){var i,a,o,s,l,u;for(null==t&&(t=n),l=[],a=0,o=(s=function(){u=[];for(var t=0,n=r(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;a<o;a++)i=s[a],l.push(f(e,i,t));return l},p=function(e,t,r){var i;if(null==r&&(r=n),-1!==(i=e.indexOf(t)))return g(e,0,i,r),f(e,i,r)},h=function(e,t,r){var a,o,l,u,c;if(null==r&&(r=n),!(o=e.slice(0,t)).length)return o;for(i(o,r),l=0,u=(c=e.slice(t)).length;l<u;l++)a=c[l],s(o,a,r);return o.sort(r).reverse()},d=function(e,t,r){var o,s,l,h,d,p,g,f,v;if(null==r&&(r=n),10*t<=e.length){if(!(l=e.slice(0,t).sort(r)).length)return l;for(s=l[l.length-1],h=0,p=(g=e.slice(t)).length;h<p;h++)r(o=g[h],s)<0&&(u(l,o,0,null,r),l.pop(),s=l[l.length-1]);return l}for(i(e,r),v=[],d=0,f=c(t,e.length);0<=f?d<f:d>f;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;i<a;)(s=i+1)<a&&!(r(e[i],e[s])<0)&&(i=s),e[t]=e[i],i=2*(t=i)+1;return e[t]=o,g(e,l,t,r)},t=function(){function e(e){this.cmp=null!=e?e:n,this.nodes=[]}return e.push=o,e.pop=a,e.replace=l,e.pushpop=s,e.heapify=i,e.updateItem=p,e.nlargest=h,e.nsmallest=d,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return a(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return l(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return s(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return i(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return p(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),function(t,n){e.exports=n()}(0,(function(){return t}))}).call(ue)})),$t=Wt,Kt=Mt({root:null,weight:function(e){return 1},directed:!1}),Zt={dijkstra:function(e){if(!E(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Kt(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,l=b(r)?this.filter(r)[0]:r[0],u={},c={},h={},d=this.byGroup(),p=d.nodes,g=d.edges;g.unmergeBy((function(e){return e.isLoop()}));for(var f=function(e){return u[e.id()]},v=function(e,t){u[e.id()]=t,y.updateItem(e)},y=new $t((function(e,t){return f(e)-f(t)})),m=0;m<p.length;m++){var x=p[m];u[x.id()]=x.same(l)?0:1/0,y.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(g),i=1/0,o=0;o<r.length;o++){var l=r[o],u=s(l);(u<i||!n)&&(i=u,n=l)}return{edge:n,dist:i}};y.size()>0;){var T=y.pop(),_=f(T),D=T.id();if(h[D]=_,_!==1/0)for(var C=T.neighborhood().intersect(p),N=0;N<C.length;N++){var A=C[N],L=A.id(),S=w(T,A),O=_+S.dist;O<f(A)&&(v(A,O),c[L]={node:T,edge:S.edge})}}return{distanceTo:function(e){var t=b(e)?p.filter(e)[0]:e[0];return h[t.id()]},pathTo:function(e){var t=b(e)?p.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)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)}}}},Qt={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;t<a.length;t++)if(a[t].has(e))return t},l=0;l<i;l++)a[l]=this.spawn(n[l]);for(var u=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<u.length;c++){var h=u[c],d=h.source()[0],p=h.target()[0],g=s(d),f=s(p),v=a[g],y=a[f];g!==f&&(o.merge(h),v.merge(y),a.splice(f,1))}return o}},Jt=Mt({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),en={aStar:function(e){var t=this.cy(),n=Jt(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var l,u,c=r.id(),h=i.id(),d={},p={},g={},f=new $t((function(e,t){return p[e.id()]-p[t.id()]})),v=new Ut,y={},m={},b=function(e,t){f.push(e),v.add(t)},x=function(){l=f.pop(),u=l.id(),v.delete(u)},w=function(e){return v.has(e)};b(r,c),d[c]=0,p[c]=a(r);for(var E=0;f.size()>0;){if(x(),E++,u===h){for(var T=[],_=i,D=h,C=m[D];T.unshift(_),null!=C&&T.unshift(C),null!=(_=y[D]);)C=m[D=_.id()];return{found:!0,distance:d[u],path:this.spawn(T),steps:E}}g[u]=!0;for(var N=l._private.edges,A=0;A<N.length;A++){var L=N[A];if(this.hasElementWithId(L.id())&&(!o||L.data("source")===u)){var S=L.source(),O=L.target(),I=S.id()!==u?S:O,k=I.id();if(this.hasElementWithId(k)&&!g[k]){var M=d[u]+s(L);w(k)?M<d[k]&&(d[k]=M,p[k]=M+a(I),y[k]=l,m[k]=L):(d[k]=M,p[k]=M+a(I),b(I,k),y[k]=l,m[k]=L)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},tn=Mt({weight:function(e){return 1},directed:!1}),nn={floydWarshall:function(e){for(var t=this.cy(),n=tn(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,l=o.edges,u=s.length,c=u*u,h=function(e){return s.indexOf(e)},d=function(e){return s[e]},p=new Array(c),g=0;g<c;g++){var f=g%u,v=(g-f)/u;p[g]=v===f?0:1/0}for(var y=new Array(c),m=new Array(c),x=0;x<l.length;x++){var w=l[x],E=w.source()[0],T=w.target()[0];if(E!==T){var _=h(E),D=h(T),C=_*u+D,N=a(w);if(p[C]>N&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+_;!i&&p[A]>N&&(p[A]=N,y[A]=_,m[A]=w)}}}for(var L=0;L<u;L++)for(var S=0;S<u;S++)for(var O=S*u+L,I=0;I<u;I++){var k=S*u+I,M=L*u+I;p[O]+p[M]<p[k]&&(p[k]=p[O]+p[M],y[k]=y[O])}var P=function(e){return(b(e)?t.filter(e):e)[0]},R=function(e){return h(P(e))},B={distance:function(e,t){var n=R(e),r=R(t);return p[n*u+r]},path:function(e,n){var r=R(e),i=R(n),a=d(r);if(r===i)return a.collection();if(null==y[r*u+i])return t.collection();var o,s=t.collection(),l=r;for(s.merge(a);r!==i;)l=r,r=y[r*u+i],o=m[l*u+r],s.merge(o),s.merge(d(r));return s}};return B}},rn=Mt({weight:function(e){return 1},directed:!1,root:null}),an={bellmanFord:function(e){var t=this,n=rn(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,l=this.cy(),u=this.byGroup(),c=u.edges,h=u.nodes,d=h.length,p=new Yt,g=!1,f=[];a=l.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var v=c.length,y=function(e){var t=p.get(e.id());return t||(t={},p.set(e.id(),t)),t},m=function(e){return(b(e)?l.$(e):e)[0]},x=function(e){return y(m(e)).dist},w=function(e){for(var n=arguments.length>1&&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)},E=0;E<d;E++){var T=h[E],_=y(T);T.same(a)?_.dist=0:_.dist=1/0,_.pred=null,_.edge=null}for(var D=!1,C=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,D=!0)},N=1;N<d;N++){D=!1;for(var A=0;A<v;A++){var L=c[A],S=L.source(),O=L.target(),I=o(L),k=y(S),M=y(O);C(S,O,L,k,M,I),i||C(O,S,L,M,k,I)}if(!D)break}if(D)for(var P=[],R=0;R<v;R++){var B=c[R],F=B.source(),z=B.target(),G=o(B),Y=y(F).dist,X=y(z).dist;if(Y+G<X||!i&&X+G<Y){if(g||(Nt("Graph contains a negative weight cycle for Bellman-Ford"),g=!0),!1===e.findNegativeWeightCycles)break;var V=[];Y+G<X&&V.push(F),!i&&X+G<Y&&V.push(z);for(var U=V.length,j=0;j<U;j++){var H=V[j],q=[H];q.push(y(H).edge);for(var W=y(H).pred;-1===q.indexOf(W);)q.push(W),q.push(y(W).edge),W=y(W).pred;for(var $=(q=q.slice(q.indexOf(W)))[0].id(),K=0,Z=2;Z<q.length;Z+=2)q[Z].id()<$&&($=q[Z].id(),K=Z);(q=q.slice(K).concat(q.slice(0,K))).push(q[0]);var Q=q.map((function(e){return e.id()})).join(",");-1===P.indexOf(Q)&&(f.push(s.spawn(q)),P.push(Q))}}}return{distanceTo:x,pathTo:w,hasNegativeWeightCycle:g,negativeWeightCycles:f}}},on=Math.sqrt(2),sn=function(e,t,n){0===n.length&&Dt("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;p<l.length;p++){var g=l[p];g[1]===s?(l[p]=g.slice(),l[p][1]=o):g[2]===s&&(l[p]=g.slice(),l[p][2]=o)}for(var f=0;f<t.length;f++)t[f]===s&&(t[f]=o);return l},ln=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=sn(i,e,t),n--}return t},un={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/on);if(!(i<2)){for(var l=[],u=0;u<a;u++){var c=r[u];l.push([u,n.indexOf(c.source()),n.indexOf(c.target())])}for(var h=1/0,d=[],p=new Array(i),g=new Array(i),f=new Array(i),v=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)g[m]=m;var b=ln(g,l.slice(),i,s),x=b.slice();v(g,f);var w=ln(g,b,s,2),E=ln(f,x,s,2);w.length<=E.length&&w.length<h?(h=w.length,d=w,v(g,p)):E.length<=w.length&&E.length<h&&(h=E.length,d=E,v(f,p))}for(var T=this.spawn(d.map((function(e){return r[e[0]]}))),_=this.spawn(),D=this.spawn(),C=p[0],N=0;N<p.length;N++){var A=p[N],L=n[N];A===C?_.merge(L):D.merge(L)}var S=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!T.contains(t)&&n.merge(t)}))})),n},O=[S(_),S(D)];return{cut:T,components:O,partition1:_,partition2:D}}Dt("At least 2 nodes are required for Karger-Stein algorithm")}},cn=function(e){return{x:e.x,y:e.y}},hn=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},dn=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},pn=function(e){return{x:e[0],y:e[1]}},gn=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=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r},fn=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=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r},vn=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;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i},yn=function(e){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=!(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]?(n<e.length&&e.splice(n,e.length-n),t>0&&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},mn=function(e){return Math.PI*e/180},bn=function(e,t){return Math.atan2(t,e)-Math.PI/2},xn=Math.log2||function(e){return Math.log(e)/Math.log(2)},wn=function(e){return e>0?1:e<0?-1:0},En=function(e,t){return Math.sqrt(Tn(e,t))},Tn=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},_n=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},Dn=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},Cn=function(e,t,n,r){return{x:Dn(e.x,t.x,n.x,r),y:Dn(e.y,t.y,n.y,r)}},Nn=function(e,t,n,r){var i={x:t.x-e.x,y:t.y-e.y},a=En(e,t),o={x:i.x/a,y:i.y/a};return n=null==n?0:n,r=null!=r?r:n*a,{x:e.x+o.x*r,y:e.y+o.y*r}},An=function(e,t,n){return Math.max(e,Math.min(n,t))},Ln=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=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}}},Sn=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},On=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},In=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},kn=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},Mn=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},Pn=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 s=o(a,4);t=s[0],n=s[1],r=s[2],i=s[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},Rn=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},Bn=function(e,t){return!(e.x1>t.x2||t.x1>e.x2||e.x2<t.x1||t.x2<e.x1||e.y2<t.y1||t.y2<e.y1||e.y1>t.y2||t.y1>e.y2)},Fn=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},zn=function(e,t){return Fn(e,t.x,t.y)},Gn=function(e,t){return Fn(e,t.x1,t.y1)&&Fn(e,t.x2,t.y2)},Yn=function(e,t,n,r,i,a,o){var s,l=cr(i,a),u=i/2,c=a/2,h=r-c-o;if((s=rr(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=rr(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=rr(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=rr(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=tr(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=tr(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=tr(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,T=r+c-l;return(g=tr(e,t,n,r,E,T,l+o)).length>0&&g[0]<=E&&g[1]>=T?[g[0],g[1]]:[]},Xn=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},Vn=function(e,t,n,r,i,a,o,s,l){var u={x1:Math.min(n,o,i)-l,x2:Math.max(n,o,i)+l,y1:Math.min(r,s,a)-l,y2:Math.max(r,s,a)+l};return!(e<u.x1||e>u.x2||t<u.y1||t>u.y2)},Un=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]},jn=function(e,t,n,r,i){var a,o,s,l,u,c,h,d;return 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,void(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,void(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),void(i[4]=-h+d*Math.cos((l+4*Math.PI)/3))))},Hn=function(e,t,n,r,i,a,o,s){var l=[];jn(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=1e-7,c=[],h=0;h<6;h+=2)Math.abs(l[h+1])<u&&l[h]>=0&&l[h]<=1&&c.push(l[h]);c.push(1),c.push(0);for(var d,p,g,f=-1,v=0;v<c.length;v++)d=Math.pow(1-c[v],2)*n+2*(1-c[v])*c[v]*i+c[v]*c[v]*o,p=Math.pow(1-c[v],2)*r+2*(1-c[v])*c[v]*a+c[v]*c[v]*s,g=Math.pow(d-e,2)+Math.pow(p-t,2),f>=0?g<f&&(f=g):f=g;return f},qn=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],h=c*c/l;return c<0?u:h>l?(e-i)*(e-i)+(t-a)*(t-a):u-h},Wn=function(e,t,n){for(var r,i,a,o,s=0,l=0;l<n.length/2;l++)if(r=n[2*l],i=n[2*l+1],l+1<n.length/2?(a=n[2*(l+1)],o=n[2*(l+1)+1]):(a=n[2*(l+1-n.length/2)],o=n[2*(l+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},$n=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;g<c.length/2;g++)c[2*g]=a/2*(n[2*g]*d-n[2*g+1]*p),c[2*g+1]=o/2*(n[2*g+1]*d+n[2*g]*p),c[2*g]+=r,c[2*g+1]+=i;if(l>0){var f=Qn(c,-l);h=Zn(f)}else h=c;return Wn(e,t,h)},Kn=function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=hr(a,o),h=c*c,d=0;d<n.length/4;d++){var p=void 0,g=void 0;p=0===d?n.length-2:4*d-2,g=4*d+2;var f=r+l*n[4*d],v=i+u*n[4*d+1],y=-n[p]*n[g]-n[p+1]*n[g+1],m=c/Math.tan(Math.acos(y)/2),b=f-m*n[p],x=v-m*n[p+1],w=f+m*n[g],E=v+m*n[g+1];s[4*d]=b,s[4*d+1]=x,s[4*d+2]=w,s[4*d+3]=E;var T=n[p+1],_=-n[p];T*n[g]+_*n[g+1]<0&&(T*=-1,_*=-1);var D=b+T*c,C=x+_*c;if(Math.pow(D-e,2)+Math.pow(C-t,2)<=h)return!0}return Wn(e,t,s)},Zn=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var h=rr(t,n,r,i,a,o,s,l,!0);u[2*c]=h[0],u[2*c+1]=h[1]}return u},Qn=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-r,u=-(i-n),c=Math.sqrt(l*l+u*u),h=l/c,d=u/c;o[4*s]=n+h*t,o[4*s+1]=r+d*t,o[4*s+2]=i+h*t,o[4*s+3]=a+d*t}return o},Jn=function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(u<0)return[];var c=u/l;return[(n-e)*c+e,(r-t)*c+t]},er=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},tr=function(e,t,n,r,i,a,o){var s=[n-e,r-t],l=[e-i,t-a],u=s[0]*s[0]+s[1]*s[1],c=2*(l[0]*s[0]+l[1]*s[1]),h=c*c-4*u*(l[0]*l[0]+l[1]*l[1]-o*o);if(h<0)return[];var d=(-c+Math.sqrt(h))/(2*u),p=(-c-Math.sqrt(h))/(2*u),g=Math.min(d,p),f=Math.max(d,p),v=[];if(g>=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]},nr=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},rr=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,w=0-x,E=1+x;return w<=m&&m<=E&&w<=b&&b<=E||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?nr(e,n,o)===o?[o,s]:nr(e,n,i)===i?[i,a]:nr(i,o,n)===n?[n,r]:[]:[]},ir=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;y<f.length/2;y++)f[2*y]=n[2*y]*a+r,f[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=Qn(f,-s);u=Zn(m)}else u=f}else u=n;for(var b=0;b<u.length/2;b++)c=u[2*b],h=u[2*b+1],b<u.length/2-1?(d=u[2*(b+1)],p=u[2*(b+1)+1]):(d=u[0],p=u[1]),0!==(l=rr(e,t,r,i,c,h,d,p)).length&&g.push(l[0],l[1]);return g},ar=function(e,t,n,r,i,a,o,s){for(var l,u=[],c=new Array(n.length),h=a/2,d=o/2,p=hr(a,o),g=0;g<n.length/4;g++){var f=void 0,v=void 0;f=0===g?n.length-2:4*g-2,v=4*g+2;var y=r+h*n[4*g],m=i+d*n[4*g+1],b=-n[f]*n[v]-n[f+1]*n[v+1],x=p/Math.tan(Math.acos(b)/2),w=y-x*n[f],E=m-x*n[f+1],T=y+x*n[v],_=m+x*n[v+1];0===g?(c[n.length-2]=w,c[n.length-1]=E):(c[4*g-2]=w,c[4*g-1]=E),c[4*g]=T,c[4*g+1]=_;var D=n[f+1],C=-n[f];D*n[v]+C*n[v+1]<0&&(D*=-1,C*=-1),0!==(l=tr(e,t,r,i,w+D*p,E+C*p,p)).length&&u.push(l[0],l[1])}for(var N=0;N<c.length/4;N++)0!==(l=rr(e,t,r,i,c[4*N],c[4*N+1],c[4*N+2],c[4*N+3],!1)).length&&u.push(l[0],l[1]);if(u.length>2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),S=1;S<u.length/2;S++){var O=Math.pow(u[2*S]-e,2)+Math.pow(u[2*S+1]-t,2);O<=L&&(A[0]=u[2*S],A[1]=u[2*S+1],L=O)}return A}return u},or=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},sr=function(e,t){var n=ur(e,t);return n=lr(n)},lr=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,l=0;l<r;l++)t=e[2*l],n=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var u=2/(o-i),c=2/(s-a),h=0;h<r;h++)t=e[2*h]=e[2*h]*u,n=e[2*h+1]=e[2*h+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var d=0;d<r;d++)n=e[2*d+1]=e[2*d+1]+(-1-a);return e},ur=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},cr=function(e,t){return Math.min(e/4,t/4,8)},hr=function(e,t){return Math.min(e/10,t/10,8)},dr=function(){return 8},pr=function(e,t,n){return[e-2*t+n,2*(t-e),e]},gr=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},fr=Mt({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),vr={pageRank:function(e){for(var t=fr(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),l=s.nodes,u=s.edges,c=l.length,h=c*c,d=u.length,p=new Array(h),g=new Array(c),f=(1-n)/c,v=0;v<c;v++){for(var y=0;y<c;y++)p[v*c+y]=0;g[v]=0}for(var m=0;m<d;m++){var b=u[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=l.indexOfId(x),T=l.indexOfId(w),_=a(b);p[T*c+E]+=_,g[E]+=_}}for(var D=1/c+f,C=0;C<c;C++)if(0===g[C])for(var N=0;N<c;N++)p[N*c+C]=D;else for(var A=0;A<c;A++){var L=A*c+C;p[L]=p[L]/g[C]+f}for(var S,O=new Array(c),I=new Array(c),k=0;k<c;k++)O[k]=1;for(var M=0;M<i;M++){for(var P=0;P<c;P++)I[P]=0;for(var R=0;R<c;R++)for(var B=0;B<c;B++){var F=R*c+B;I[R]+=p[F]*O[B]}_n(I),S=O,O=I,I=S;for(var z=0,G=0;G<c;G++){var Y=S[G]-O[G];z+=Y*Y}if(z<r)break}return{rank:function(e){return e=o.collection(e)[0],O[l.indexOf(e)]}}}},yr=Mt({root:null,weight:function(e){return 1},directed:!1,alpha:0}),mr={degreeCentralityNormalized:function(e){e=yr(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,l=0;l<r;l++){var u=n[l],c=u.id();e.root=u;var h=this.degreeCentrality(e);o<h.indegree&&(o=h.indegree),s<h.outdegree&&(s=h.outdegree),i[c]=h.indegree,a[c]=h.outdegree}return{indegree:function(e){return 0==o?0:(b(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(b(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var d={},p=0,g=0;g<r;g++){var f=n[g];e.root=f;var v=this.degreeCentrality(e);p<v.degree&&(p=v.degree),d[f.id()]=v.degree}return{degree:function(e){return 0===p?0:(b(e)&&(e=t.filter(e)),d[e.id()]/p)}}},degreeCentrality:function(e){e=yr(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var l=i.connectedEdges(),u=l.filter((function(e){return e.target().same(i)&&n.has(e)})),c=l.filter((function(e){return e.source().same(i)&&n.has(e)})),h=u.length,d=c.length,p=0,g=0,f=0;f<u.length;f++)p+=a(u[f]);for(var v=0;v<c.length;v++)g+=a(c[v]);return{indegree:Math.pow(h,1-s)*Math.pow(p,s),outdegree:Math.pow(d,1-s)*Math.pow(g,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};mr.dc=mr.degreeCentrality,mr.dcn=mr.degreeCentralityNormalised=mr.degreeCentralityNormalized;var br=Mt({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),xr={closenessCentralityNormalized:function(e){for(var t=br(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,l=this.nodes(),u=this.floydWarshall({weight:r,directed:i}),c=0;c<l.length;c++){for(var h=0,d=l[c],p=0;p<l.length;p++)if(c!==p){var g=u.distance(d,l[p]);h+=n?1/g:g}n||(h=1/h),s<h&&(s=h),o[d.id()]=h}return{closeness:function(e){return 0==s?0:(e=b(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=br(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++){var c=l[u];if(!c.same(n)){var h=o.distanceTo(c);s+=a?1/h:h}}return a?s:1/s}};xr.cc=xr.closenessCentrality,xr.ccn=xr.closenessCentralityNormalised=xr.closenessCentralityNormalized;var wr=Mt({weight:null,directed:!1}),Er={betweennessCentrality:function(e){for(var t=wr(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},l={},u=0,c={set:function(e,t){l[e]=t,t>u&&(u=t)},get:function(e){return l[e]}},h=0;h<o.length;h++){var d=o[h],p=d.id();s[p]=n?d.outgoers().nodes():d.openNeighborhood().nodes(),c.set(p,0)}for(var g=function(e){for(var t=o[e].id(),n=[],l={},u={},h={},d=new $t((function(e,t){return h[e]-h[t]})),p=0;p<o.length;p++){var g=o[p].id();l[g]=[],u[g]=0,h[g]=1/0}for(u[t]=1,h[t]=0,d.push(t);!d.empty();){var f=d.pop();if(n.push(f),i)for(var v=0;v<s[f].length;v++){var y=s[f][v],m=a.getElementById(f),b=void 0;b=m.edgesTo(y).length>0?m.edgesTo(y)[0]:y.edgesTo(m)[0];var x=r(b);y=y.id(),h[y]>h[f]+x&&(h[y]=h[f]+x,d.nodes.indexOf(y)<0?d.push(y):d.updateItem(y),u[y]=0,l[y]=[]),h[y]==h[f]+x&&(u[y]=u[y]+u[f],l[y].push(f))}else for(var w=0;w<s[f].length;w++){var E=s[f][w].id();h[E]==1/0&&(d.push(E),h[E]=h[f]+1),h[E]==h[f]+1&&(u[E]=u[E]+u[f],l[E].push(f))}}for(var T={},_=0;_<o.length;_++)T[o[_].id()]=0;for(;n.length>0;){for(var D=n.pop(),C=0;C<l[D].length;C++){var N=l[D][C];T[N]=T[N]+u[N]/u[D]*(1+T[D])}D!=o[e].id()&&c.set(D,c.get(D)+T[D])}},f=0;f<o.length;f++)g(f);var v={betweenness:function(e){var t=a.collection(e).id();return c.get(t)},betweennessNormalized:function(e){if(0==u)return 0;var t=a.collection(e).id();return c.get(t)/u}};return v.betweennessNormalised=v.betweennessNormalized,v}};Er.bc=Er.betweennessCentrality;var Tr=Mt({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),_r=function(e){return Tr(e)},Dr=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},Cr=function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n},Nr=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},Ar=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},Lr=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=Ar(e,r,t);return e},Sr=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return Nr(r,t),r},Or=function(e,t,n,r){for(var i=0;i<n;i++)if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!=Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1;return!0},Ir=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i},kr=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},Mr=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&kr(e[t],e[n])&&e.splice(n,1);return e},Pr=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=_r(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,l=t.length,u=l*l,c=new Array(u),h=0;h<u;h++)c[h]=0;for(var d=0;d<n.length;d++){var p=n[d],g=a[p.source().id()],f=a[p.target().id()],v=Dr(p,i.attributes);c[g*l+f]+=v,c[f*l+g]+=v}Cr(c,l,i.multFactor),Nr(c,l);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=Lr(c,l,i.expandFactor),c=Sr(s,l,i.inflateFactor),Or(c,s,u,4)||(y=!0),m++;var b=Ir(c,l,t,r);return b=Mr(b)},Rr={markovClustering:Pr,mcl:Pr},Br=function(e){return e},Fr=function(e,t){return Math.abs(t-e)},zr=function(e,t,n){return e+Fr(t,n)},Gr=function(e,t,n){return e+Math.pow(n-t,2)},Yr=function(e){return Math.sqrt(e)},Xr=function(e,t,n){return Math.max(e,Fr(t,n))},Vr=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:Br,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},Ur={euclidean:function(e,t,n){return e>=2?Vr(e,t,n,0,Gr,Yr):Vr(e,t,n,0,zr)},squaredEuclidean:function(e,t,n){return Vr(e,t,n,0,Gr)},manhattan:function(e,t,n){return Vr(e,t,n,0,zr)},max:function(e,t,n){return Vr(e,t,n,-1/0,Xr)}};function jr(e,t,n,r,i,a){var o;return o=x(e)?e:Ur[e]||Ur.euclidean,0===t&&x(e)?o(i,a):o(t,n,r,i,a)}Ur["squared-euclidean"]=Ur.squaredEuclidean,Ur.squaredeuclidean=Ur.squaredEuclidean;var Hr=Mt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),qr=function(e){return Hr(e)},Wr=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=function(e){return r[e](t)},s=n,l=t;return jr(e,r.length,a,o,s,l)},$r=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;l<r;l++)i[l]=e.min(n[l]).value,a[l]=e.max(n[l]).value;for(var u=0;u<t;u++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[u]=s}return o},Kr=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var l=Wr(n,e,t[s],r,i);l<a&&(a=l,o=s)}return o},Zr=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},Qr=function(e,t,n){return Math.abs(t-e)<=n},Jr=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++)if(Math.abs(e[r][i]-t[r][i])>n)return!1;return!0},ei=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},ti=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];ei(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},ni=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=Wr("manhattan",t[i],e,n,"kMedoids");return r},ri=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var l=0;l<e.length;l++)r[s][l]=Math.pow(n[s][l],i.m);for(var u=0;u<e.length;u++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var h=0;h<t.length;h++)a+=r[h][u]*i.attributes[c](t[h]),o+=r[h][u];e[u][c]=a/o}},ii=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,l,u=2/(i.m-1),c=0;c<n.length;c++)for(var h=0;h<r.length;h++){o=0;for(var d=0;d<n.length;d++)s=Wr(i.distance,r[h],n[c],i.attributes,"cmeans"),l=Wr(i.distance,r[h],n[d],i.attributes,"cmeans"),o+=Math.pow(s/l,u);e[h][c]=1/o}},ai=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var l=0;l<t.length;l++){i=-1/0,a=-1;for(var u=0;u<t[0].length;u++)t[l][u]>i&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o},oi=function(e){var t,n,r,i,a=this.cy(),o=this.nodes(),s=qr(e);r=new Array(o.length);for(var l=0;l<o.length;l++)r[l]=new Array(s.k);n=new Array(o.length);for(var u=0;u<o.length;u++)n[u]=new Array(s.k);for(var c=0;c<o.length;c++){for(var h=0,d=0;d<s.k;d++)n[c][d]=Math.random(),h+=n[c][d];for(var p=0;p<s.k;p++)n[c][p]=n[c][p]/h}t=new Array(s.k);for(var g=0;g<s.k;g++)t[g]=new Array(s.attributes.length);i=new Array(o.length);for(var f=0;f<o.length;f++)i[f]=new Array(s.k);for(var v=!0,y=0;v&&y<s.maxIterations;)v=!1,ri(t,o,n,i,s),ii(n,r,t,o,s),Jr(n,r,s.sensitivityThreshold)||(v=!0),y++;return{clusters:ai(o,n,s,a),degreeOfMembership:n}},si={kMeans:function(t){var n,r=this.cy(),i=this.nodes(),a=null,o=qr(t),s=new Array(o.k),l={};o.testMode?"number"==typeof o.testCentroids?(o.testCentroids,n=$r(i,o.k,o.attributes)):n="object"===e(o.testCentroids)?o.testCentroids:$r(i,o.k,o.attributes):n=$r(i,o.k,o.attributes);for(var u=!0,c=0;u&&c<o.maxIterations;){for(var h=0;h<i.length;h++)l[(a=i[h]).id()]=Kr(a,n,o.distance,o.attributes,"kMeans");u=!1;for(var d=0;d<o.k;d++){var p=Zr(d,i,l);if(0!==p.length){for(var g=o.attributes.length,f=n[d],v=new Array(g),y=new Array(g),m=0;m<g;m++){y[m]=0;for(var b=0;b<p.length;b++)a=p[b],y[m]+=o.attributes[m](a);v[m]=y[m]/p.length,Qr(v[m],f[m],o.sensitivityThreshold)||(u=!0)}n[d]=v,s[d]=r.collection(p)}}c++}return s},kMedoids:function(t){var n,r,i=this.cy(),a=this.nodes(),o=null,s=qr(t),l=new Array(s.k),u={},c=new Array(s.k);s.testMode?"number"==typeof s.testCentroids||(n="object"===e(s.testCentroids)?s.testCentroids:ti(a,s.k)):n=ti(a,s.k);for(var h=!0,d=0;h&&d<s.maxIterations;){for(var p=0;p<a.length;p++)u[(o=a[p]).id()]=Kr(o,n,s.distance,s.attributes,"kMedoids");h=!1;for(var g=0;g<n.length;g++){var f=Zr(g,a,u);if(0!==f.length){c[g]=ni(n[g],f,s.attributes);for(var v=0;v<f.length;v++)(r=ni(f[v],f,s.attributes))<c[g]&&(c[g]=r,n[g]=f[v],h=!0);l[g]=i.collection(f)}}d++}return l},fuzzyCMeans:oi,fcm:oi},li=Mt({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),ui={single:"min",complete:"max"},ci=function(e){var t=li(e),n=ui[t.linkage];return null!=n&&(t.linkage=n),t},hi=function(e,t,n,r,i){for(var a,o=0,s=1/0,l=i.attributes,u=function(e,t){return jr(i.distance,l.length,(function(t){return l[t](e)}),(function(e){return l[e](t)}),e,t)},c=0;c<e.length;c++){var h=e[c].key,d=n[h][r[h]];d<s&&(o=h,s=d)}if("threshold"===i.mode&&s>=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;v<e.length;v++){var y=e[v];g.key===y.key?a=1/0:"min"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]>n[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]<n[f.key][y.key]&&(a=n[f.key][y.key])):a="mean"===i.linkage?(n[g.key][y.key]*g.size+n[f.key][y.key]*f.size)/(g.size+f.size):"dendrogram"===i.mode?u(y.value,g.value):u(y.value[0],g.value[0]),n[g.key][y.key]=n[y.key][g.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===g.key||r[b]===f.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return g.key=f.key=g.index=f.index=null,!0},di=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},pi=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},gi=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&di(t.left,i),t.right&&di(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&di(t.left,i),t.right&&di(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},fi=function(e){for(var t=this.cy(),n=this.nodes(),r=ci(e),i=r.attributes,a=function(e,t){return jr(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],l=[],u=[],c=0;c<n.length;c++){var h={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=h,u[c]=h,s[c]=[],l[c]=0}for(var d=0;d<o.length;d++)for(var p=0;p<=d;p++){var g=void 0;g="dendrogram"===r.mode?d===p?1/0:a(o[d].value,o[p].value):d===p?1/0:a(o[d].value[0],o[p].value[0]),s[d][p]=g,s[p][d]=g,g<s[d][l[d]]&&(l[d]=p)}for(var f,v=hi(o,u,s,l,r);v;)v=hi(o,u,s,l,r);return"dendrogram"===r.mode?(f=gi(o[0],r.dendrogramDepth,t),r.addDendrogram&&pi(o[0],t)):(f=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,f[n]=t.collection(e.value)}))),f},vi={hierarchicalClustering:fi,hca:fi},yi=Mt({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),mi=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||Dt("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||_(n)||Dt("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),yi(e)},bi=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-jr(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},xi=function(e,t){return"median"===t?yn(e):"mean"===t?vn(e):"min"===t?gn(e):"max"===t?fn(e):t},wi=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r},Ei=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var l=n[s];t[i*e+l]>o&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u<n.length;u++)r[n[u]]=n[u];return r},Ti=function(e,t,n){for(var r=Ei(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,l=-1/0,u=0;u<a.length;u++){for(var c=0,h=0;h<a.length;h++)c+=t[a[h]*e+a[u]];c>l&&(s=u,l=c)}n[i]=a[s]}return r=Ei(e,t,n)},_i=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=mi(e),c={},h=0;h<l.length;h++)c[l[h].id()]=h;n=(t=l.length)*t,r=new Array(n);for(var d=0;d<n;d++)r[d]=-1/0;for(var p=0;p<t;p++)for(var g=0;g<t;g++)p!==g&&(r[p*t+g]=bi(u.distance,l[p],l[g],u.attributes));i=xi(r,u.preference);for(var f=0;f<t;f++)r[f*t+f]=i;a=new Array(n);for(var v=0;v<n;v++)a[v]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,T=new Array(t*u.minIterations),_=0;_<T.length;_++)T[_]=0;for(E=0;E<u.maxIterations;E++){for(var D=0;D<t;D++){for(var C=-1/0,N=-1/0,A=-1,L=0,S=0;S<t;S++)m[S]=a[D*t+S],(L=o[D*t+S]+r[D*t+S])>=C?(N=C,C=L,A=S):L>N&&(N=L);for(var O=0;O<t;O++)a[D*t+O]=(1-u.damping)*(r[D*t+O]-C)+u.damping*m[O];a[D*t+A]=(1-u.damping)*(r[D*t+A]-N)+u.damping*m[A]}for(var I=0;I<t;I++){for(var k=0,M=0;M<t;M++)m[M]=o[M*t+I],b[M]=Math.max(0,a[M*t+I]),k+=b[M];k-=b[I],b[I]=a[I*t+I],k+=b[I];for(var P=0;P<t;P++)o[P*t+I]=(1-u.damping)*Math.min(0,k-b[P])+u.damping*m[P];o[I*t+I]=(1-u.damping)*(k-b[I])+u.damping*m[I]}for(var R=0,B=0;B<t;B++){var F=o[B*t+B]+a[B*t+B]>0?1:0;T[E%u.minIterations*t+B]=F,R+=F}if(R>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var z=0,G=0;G<t;G++){x[G]=0;for(var Y=0;Y<u.minIterations;Y++)x[G]+=T[Y*t+G];0!==x[G]&&x[G]!==u.minIterations||z++}if(z===t)break}}for(var X=wi(t,a,o),V=Ti(t,r,X),U={},j=0;j<X.length;j++)U[X[j]]=[];for(var H=0;H<l.length;H++){var q=V[c[l[H].id()]];null!=q&&U[q].push(l[H])}for(var W=new Array(X.length),$=0;$<X.length;$++)W[$]=s.collection(U[X[$]]);return W},Di={affinityPropagation:_i,ap:_i},Ci=Mt({root:void 0,directed:!1}),Ni={hierholzer:function(e){if(!E(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Ci(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=b(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||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}},Ai=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=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)},l=function l(u,c,h){u===h&&(r+=1),t[c]={id:n,low:n++,cutVertex:!1};var d,p,g,f,v=e.getElementById(c).connectedEdges().intersection(e);0===v.size()?i.push(e.spawn(e.getElementById(c))):v.forEach((function(e){d=e.source().id(),p=e.target().id(),(g=d===c?p:d)!==h&&(f=e.id(),o[f]||(o[f]=!0,a.push({x:c,y:g,edge:e})),g in t?t[c].low=Math.min(t[c].low,t[g].id):(l(u,g,c),t[c].low=Math.min(t[c].low,t[g].low),t[c].id<=t[g].low&&(t[c].cutVertex=!0,s(c,g))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,l(n,n),t[n].cutVertex=r>1)}}));var u=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(u),components:i}},Li=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}},Si={};[qt,Zt,Qt,en,nn,an,un,vr,mr,xr,Er,Rr,si,vi,Di,Ni,{hopcroftTarjanBiconnected:Ai,htbc:Ai,htb:Ai,hopcroftTarjanBiconnectedComponents:Ai},{tarjanStronglyConnected:Li,tsc:Li,tscc:Li,tarjanStronglyConnectedComponents:Li}].forEach((function(e){Q(Si,e)}));var Oi=0,Ii=1,ki=2,Mi=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=Oi,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))};Mi.prototype={fulfill:function(e){return Pi(this,Ii,"fulfillValue",e)},reject:function(e){return Pi(this,ki,"rejectReason",e)},then:function(e,t){var n=this,r=new Mi;return n.onFulfilled.push(Fi(e,r,"fulfill")),n.onRejected.push(Fi(t,r,"reject")),Ri(n),r.proxy}};var Pi=function(e,t,n,r){return e.state===Oi&&(e.state=t,e[n]=r,Ri(e)),e},Ri=function(e){e.state===Ii?Bi(e,"onFulfilled",e.fulfillValue):e.state===ki&&Bi(e,"onRejected",e.rejectReason)},Bi=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},Fi=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}zi(t,i)}}},zi=function t(n,r){if(n!==r&&n.proxy!==r){var i;if("object"===e(r)&&null!==r||"function"==typeof r)try{i=r.then}catch(o){return void n.reject(o)}if("function"!=typeof i)n.fulfill(r);else{var a=!1;try{i.call(r,(function(e){a||(a=!0,e===r?n.reject(new TypeError("circular thenable chain")):t(n,e))}),(function(e){a||(a=!0,n.reject(e))}))}catch(o){a||n.reject(o)}}}else n.reject(new TypeError("cannot resolve promise with itself"))};Mi.all=function(e){return new Mi((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Mi.resolve=function(e){return new Mi((function(t,n){t(e)}))},Mi.reject=function(e){return new Mi((function(t,n){n(e)}))};var Gi="undefined"!=typeof Promise?Promise:Mi,Yi=function(e,t,n){var r=S(e),i=!r,a=this._private=Q({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&x(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},Xi=Yi.prototype;Q(Xi,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),N(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;return t="frame"===e?n.frames:n.completes,new Gi((function(e,n){t.push((function(){e()}))}))}}),Xi.complete=Xi.completed,Xi.run=Xi.play,Xi.running=Xi.playing;var Vi={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0: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<t.length;n++)t[n]._private.animation.queue=[];return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var l=a.style();if(e=Q({},e,t),0===Object.keys(e).length)return new Yi(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=l.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var u=e.renderedPosition,c=a.pan(),h=a.zoom();e.position=dn(u,h,c)}if(o&&null!=e.panBy){var d=e.panBy,p=a.pan();e.pan={x:p.x+d.x,y:p.y+d.y}}var g=e.center||e.centre;if(o&&null!=g){var f=a.getCenterPan(g.eles,e.zoom);null!=f&&(e.pan=f)}if(o&&null!=e.fit){var v=e.fit,y=a.getFitViewport(v.eles||v.boundingBox,v.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&E(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new Yi(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=Q({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,l=0;l<s.length;l++){var u=s[l]._private;t&&(u.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},Ui=Array.isArray,ji=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Hi=/^\w*$/;function qi(e,t){if(Ui(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ge(e))||Hi.test(e)||!ji.test(e)||null!=t&&e in Object(t)}var Wi=qi,$i="[object AsyncFunction]",Ki="[object Function]",Zi="[object GeneratorFunction]",Qi="[object Proxy]";function Ji(e){if(!le(e))return!1;var t=Pe(e);return t==Ki||t==Zi||t==$i||t==Qi}var ea,ta=Ji,na=pe["__core-js_shared__"],ra=(ea=/[^.]+$/.exec(na&&na.keys&&na.keys.IE_PROTO||""))?"Symbol(src)_1."+ea:"";function ia(e){return!!ra&&ra in e}var aa=ia,oa=Function.prototype.toString;function sa(e){if(null!=e){try{return oa.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var la=sa,ua=/[\\^$.*+?()[\]{}|]/g,ca=/^\[object .+?Constructor\]$/,ha=Function.prototype,da=Object.prototype,pa=ha.toString,ga=da.hasOwnProperty,fa=RegExp("^"+pa.call(ga).replace(ua,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function va(e){return!(!le(e)||aa(e))&&(ta(e)?fa:ca).test(la(e))}var ya=va;function ma(e,t){return null==e?void 0:e[t]}var ba=ma;function xa(e,t){var n=ba(e,t);return ya(n)?n:void 0}var wa=xa,Ea=wa(Object,"create");function Ta(){this.__data__=Ea?Ea(null):{},this.size=0}var _a=Ta;function Da(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Ca=Da,Na="__lodash_hash_undefined__",Aa=Object.prototype.hasOwnProperty;function La(e){var t=this.__data__;if(Ea){var n=t[e];return n===Na?void 0:n}return Aa.call(t,e)?t[e]:void 0}var Sa=La,Oa=Object.prototype.hasOwnProperty;function Ia(e){var t=this.__data__;return Ea?void 0!==t[e]:Oa.call(t,e)}var ka=Ia,Ma="__lodash_hash_undefined__";function Pa(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Ea&&void 0===t?Ma:t,this}var Ra=Pa;function Ba(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Ba.prototype.clear=_a,Ba.prototype.delete=Ca,Ba.prototype.get=Sa,Ba.prototype.has=ka,Ba.prototype.set=Ra;var Fa=Ba;function za(){this.__data__=[],this.size=0}var Ga=za;function Ya(e,t){return e===t||e!=e&&t!=t}var Xa=Ya;function Va(e,t){for(var n=e.length;n--;)if(Xa(e[n][0],t))return n;return-1}var Ua=Va,ja=Array.prototype.splice;function Ha(e){var t=this.__data__,n=Ua(t,e);return!(n<0||(n==t.length-1?t.pop():ja.call(t,n,1),--this.size,0))}var qa=Ha;function Wa(e){var t=this.__data__,n=Ua(t,e);return n<0?void 0:t[n][1]}var $a=Wa;function Ka(e){return Ua(this.__data__,e)>-1}var Za=Ka;function Qa(e,t){var n=this.__data__,r=Ua(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Ja=Qa;function eo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}eo.prototype.clear=Ga,eo.prototype.delete=qa,eo.prototype.get=$a,eo.prototype.has=Za,eo.prototype.set=Ja;var to=eo,no=wa(pe,"Map");function ro(){this.size=0,this.__data__={hash:new Fa,map:new(no||to),string:new Fa}}var io=ro;function ao(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}var oo=ao;function so(e,t){var n=e.__data__;return oo(t)?n["string"==typeof t?"string":"hash"]:n.map}var lo=so;function uo(e){var t=lo(this,e).delete(e);return this.size-=t?1:0,t}var co=uo;function ho(e){return lo(this,e).get(e)}var po=ho;function go(e){return lo(this,e).has(e)}var fo=go;function vo(e,t){var n=lo(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var yo=vo;function mo(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}mo.prototype.clear=io,mo.prototype.delete=co,mo.prototype.get=po,mo.prototype.has=fo,mo.prototype.set=yo;var bo=mo,xo="Expected a function";function wo(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(xo);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(wo.Cache||bo),n}wo.Cache=bo;var Eo=wo,To=500;function _o(e){var t=Eo(e,(function(e){return n.size===To&&n.clear(),e})),n=t.cache;return t}var Do=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Co=/\\(\\)?/g,No=_o((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Do,(function(e,n,r,i){t.push(r?i.replace(Co,"$1"):n||e)})),t}));function Ao(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var Lo=Ao,So=1/0,Oo=we?we.prototype:void 0,Io=Oo?Oo.toString:void 0;function ko(e){if("string"==typeof e)return e;if(Ui(e))return Lo(e,ko)+"";if(Ge(e))return Io?Io.call(e):"";var t=e+"";return"0"==t&&1/e==-So?"-0":t}var Mo=ko;function Po(e){return null==e?"":Mo(e)}var Ro=Po;function Bo(e,t){return Ui(e)?e:Wi(e,t)?[e]:No(Ro(e))}var Fo=Bo,zo=1/0;function Go(e){if("string"==typeof e||Ge(e))return e;var t=e+"";return"0"==t&&1/e==-zo?"-0":t}var Yo=Go;function Xo(e,t){for(var n=0,r=(t=Fo(t,e)).length;null!=e&&n<r;)e=e[Yo(t[n++])];return n&&n==r?e:void 0}var Vo=Xo;function Uo(e,t,n){var r=null==e?void 0:Vo(e,t);return void 0===r?n:r}var jo=Uo,Ho=function(){try{var e=wa(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();function qo(e,t,n){"__proto__"==t&&Ho?Ho(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Wo=qo,$o=Object.prototype.hasOwnProperty;function Ko(e,t,n){var r=e[t];$o.call(e,t)&&Xa(r,n)&&(void 0!==n||t in e)||Wo(e,t,n)}var Zo=Ko,Qo=9007199254740991,Jo=/^(?:0|[1-9]\d*)$/;function es(e,t){var n=typeof e;return!!(t=null==t?Qo:t)&&("number"==n||"symbol"!=n&&Jo.test(e))&&e>-1&&e%1==0&&e<t}var ts=es;function ns(e,t,n,r){if(!le(e))return e;for(var i=-1,a=(t=Fo(t,e)).length,o=a-1,s=e;null!=s&&++i<a;){var l=Yo(t[i]),u=n;if("__proto__"===l||"constructor"===l||"prototype"===l)return e;if(i!=o){var c=s[l];void 0===(u=r?r(c,l,s):void 0)&&(u=le(c)?c:ts(t[i+1])?[]:{})}Zo(s,l,u),s=s[l]}return e}var rs=ns;function is(e,t,n){return null==e?e:rs(e,t,n)}var as=is;function os(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}var ss=os;function ls(e){return Ui(e)?Lo(e,Yo):Ge(e)?[e]:ss(No(Ro(e)))}var us=ls,cs={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new Gi((function(e,t){var i=function(t){n.off.apply(n,o),e(t)},a=r.concat([i]),o=a.concat([]);n.on.apply(n,a)}))}}},hs={};[Vi,{data:function(e){return e=Q({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,o=void 0!==i.length,s=o?i:[i],l=o?i[0]:i;if(b(t)){var u,c=-1!==t.indexOf(".")&&us(t);if(r.allowGetting&&void 0===n)return l&&(r.beforeGet(l),u=c&&void 0===l._private[r.field][t]?jo(l._private[r.field],c):l._private[r.field][t]),u;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var h=a({},t,n);r.beforeSet(i,h);for(var d=0,p=s.length;d<p;d++){var g=s[d];r.canSet(g)&&(c&&void 0===l._private[r.field][t]?as(g._private[r.field],c,n):g._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&E(t)){var f,v,y=t,m=Object.keys(y);r.beforeSet(i,y);for(var w=0;w<m.length;w++)if(v=y[f=m[w]],!r.immutableKeys[f])for(var T=0;T<s.length;T++){var _=s[T];r.canSet(_)&&(_._private[r.field][f]=v)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&x(t)){var D=t;i.on(r.bindingEvent,D)}else if(r.allowGetting&&void 0===t){var C;return l&&(r.beforeGet(l),C=l._private[r.field]),C}return i}},removeData:function(e){return e=Q({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(b(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var l=a[s];if(!k(l)&&!n.immutableKeys[l])for(var u=0,c=i.length;u<c;u++)i[u]._private[n.field][l]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var h=0,d=i.length;h<d;h++)for(var p=i[h]._private[n.field],g=Object.keys(p),f=0;f<g.length;f++){var v=g[f];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},cs].forEach((function(e){Q(hs,e)}));var ds={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop()},ps={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}w(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ut(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,l=s.classes,u=!1,c=0;c<e.length;c++){var h=e[c];if(!l.has(h)){u=!0;break}}u||(u=l.size!==e.length),u&&(s.classes=i,r.push(o))}return r.length>0&&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;a<o;a++)for(var s=n[a],l=s._private.classes,u=!1,c=0;c<e.length;c++){var h=e[c],d=l.has(h),p=!1;t||r&&!d?(l.add(h),p=!0):(!t||r&&d)&&(l.delete(h),p=!0),!u&&p&&(i.push(s),u=!0)}return i.length>0&&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}};ps.className=ps.classNames=ps.classes;var gs={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:V,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};gs.variable="(?:[\\w-.]|(?:\\\\"+gs.metaChar+"))+",gs.className="(?:[\\w-]|(?:\\\\"+gs.metaChar+"))+",gs.value=gs.string+"|"+gs.number,gs.id=gs.variable,function(){var e,t,n;for(e=gs.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],gs.comparatorOp+="|@"+t;for(e=gs.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(gs.comparatorOp+="|\\!"+t)}();var fs=function(){return{checks:[]}},vs={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},ys=[{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 Z(e.selector,t.selector)})),ms=function(){for(var e,t={},n=0;n<ys.length;n++)t[(e=ys[n]).selector]=e.matches;return t}(),bs=function(e,t){return ms[e](t)},xs="("+ys.map((function(e){return e.selector})).join("|")+")",ws=function(e){return e.replace(new RegExp("\\\\("+gs.metaChar+")","g"),(function(e,t){return t}))},Es=function(e,t,n){e[e.length-1]=n},Ts=[{name:"group",query:!0,regex:"("+gs.group+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.GROUP,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:xs,populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.STATE,value:r})}},{name:"id",query:!0,regex:"\\#("+gs.id+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.ID,value:ws(r)})}},{name:"className",query:!0,regex:"\\.("+gs.className+")",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.CLASS,value:ws(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+gs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,1)[0];t.checks.push({type:vs.DATA_EXIST,field:ws(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+gs.variable+")\\s*("+gs.comparatorOp+")\\s*("+gs.value+")\\s*\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];s=null!=new RegExp("^"+gs.string+"$").exec(s)?s.substring(1,s.length-1):parseFloat(s),t.checks.push({type:vs.DATA_COMPARE,field:ws(i),operator:a,value:s})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+gs.boolOp+")\\s*("+gs.variable+")\\s*\\]",populate:function(e,t,n){var r=o(n,2),i=r[0],a=r[1];t.checks.push({type:vs.DATA_BOOL,field:ws(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+gs.meta+")\\s*("+gs.comparatorOp+")\\s*("+gs.number+")\\s*\\]\\]",populate:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],s=r[2];t.checks.push({type:vs.META_COMPARE,field:ws(i),operator:a,value:parseFloat(s)})}},{name:"nextQuery",separator:!0,regex:gs.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]=fs()}},{name:"directedEdge",separator:!0,regex:gs.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=t,i=fs();return n.checks.push({type:vs.DIRECTED_EDGE,source:r,target:i}),Es(e,t,n),e.edgeCount++,i}var a=fs(),o=t,s=fs();return a.checks.push({type:vs.NODE_SOURCE,source:o,target:s}),Es(e,t,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:gs.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=t,i=fs();return n.checks.push({type:vs.UNDIRECTED_EDGE,nodes:[r,i]}),Es(e,t,n),e.edgeCount++,i}var a=fs(),o=t,s=fs();return a.checks.push({type:vs.NODE_NEIGHBOR,node:o,neighbor:s}),Es(e,t,a),s}},{name:"child",separator:!0,regex:gs.child,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=fs(),i=e[e.length-1];return n.checks.push({type:vs.CHILD,parent:i,child:r}),Es(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=fs(),o=e[e.length-1],s=fs(),l=fs(),u=fs(),c=fs();return a.checks.push({type:vs.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:vs.TRUE}],c.checks.push({type:vs.TRUE}),s.checks.push({type:vs.PARENT,parent:c,child:u}),Es(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=fs(),d=fs(),p=[{type:vs.PARENT,parent:h,child:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"descendant",separator:!0,regex:gs.descendant,populate:function(e,t){if(null==e.currentSubject){var n=fs(),r=fs(),i=e[e.length-1];return n.checks.push({type:vs.DESCENDANT,ancestor:i,descendant:r}),Es(e,t,n),e.compoundCount++,r}if(e.currentSubject===t){var a=fs(),o=e[e.length-1],s=fs(),l=fs(),u=fs(),c=fs();return a.checks.push({type:vs.COMPOUND_SPLIT,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:vs.TRUE}],c.checks.push({type:vs.TRUE}),s.checks.push({type:vs.ANCESTOR,ancestor:c,descendant:u}),Es(e,o,a),e.currentSubject=l,e.compoundCount++,u}var h=fs(),d=fs(),p=[{type:vs.ANCESTOR,ancestor:h,descendant:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"subject",modifier:!0,regex:gs.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Nt("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===vs.DIRECTED_EDGE?n.type=vs.NODE_TARGET:r===vs.UNDIRECTED_EDGE&&(n.type=vs.NODE_NEIGHBOR,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];Ts.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var _s=function(e){for(var t,n,r,i=0;i<Ts.length;i++){var a=Ts[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var l=s[0];e=e.substring(l.length);break}}return{expr:t,match:n,name:r,remaining:e}},Ds=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e},Cs={parse:function(e){var t=this,n=t.inputText=e,r=t[0]=fs();for(t.length=1,n=Ds(n);;){var i=_s(n);if(null==i.expr)return Nt("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var l=0;l<t.length;l++){var u=t[l];if(u.compoundCount>0&&u.edgeCount>0)return Nt("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Nt("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Nt("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 vs.GROUP:var l=e(s);return l.substring(0,l.length-1);case vs.DATA_COMPARE:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case vs.DATA_BOOL:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case vs.DATA_EXIST:return"["+r.field+"]";case vs.META_COMPARE:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case vs.STATE:return s;case vs.ID:return"#"+s;case vs.CLASS:return"."+s;case vs.PARENT:case vs.CHILD:return i(r.parent,a)+n(">")+i(r.child,a);case vs.ANCESTOR:case vs.DESCENDANT:return i(r.ancestor,a)+" "+i(r.descendant,a);case vs.COMPOUND_SPLIT:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case vs.TRUE: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;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},Ns=function(e,t,n){var r,i,a,o=b(e),s=_(e),l=b(n),u=!1,c=!1,h=!1;switch(t.indexOf("!")>=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=e<n;break;case"<=":h=!0,r=e<=n;break;default:r=!1}return!c||null==e&&h||(r=!r),r},As=function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}},Ls=function(e){return void 0!==e},Ss=function(e,t){return e.data(t)},Os=function(e,t){return e[t]()},Is=[],ks=function(e,t){return e.checks.every((function(e){return Is[e.type](e,t)}))};Is[vs.GROUP]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Is[vs.STATE]=function(e,t){var n=e.value;return bs(n,t)},Is[vs.ID]=function(e,t){var n=e.value;return t.id()===n},Is[vs.CLASS]=function(e,t){var n=e.value;return t.hasClass(n)},Is[vs.META_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Ns(Os(t,n),r,i)},Is[vs.DATA_COMPARE]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Ns(Ss(t,n),r,i)},Is[vs.DATA_BOOL]=function(e,t){var n=e.field,r=e.operator;return As(Ss(t,n),r)},Is[vs.DATA_EXIST]=function(e,t){var n=e.field;return e.operator,Ls(Ss(t,n))},Is[vs.UNDIRECTED_EDGE]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return ks(n,i)&&ks(r,a)||ks(r,i)&&ks(n,a)},Is[vs.NODE_NEIGHBOR]=function(e,t){return ks(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&ks(e.neighbor,t)}))},Is[vs.DIRECTED_EDGE]=function(e,t){return ks(e.source,t.source())&&ks(e.target,t.target())},Is[vs.NODE_SOURCE]=function(e,t){return ks(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&ks(e.target,t)}))},Is[vs.NODE_TARGET]=function(e,t){return ks(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&ks(e.source,t)}))},Is[vs.CHILD]=function(e,t){return ks(e.child,t)&&ks(e.parent,t.parent())},Is[vs.PARENT]=function(e,t){return ks(e.parent,t)&&t.children().some((function(t){return ks(e.child,t)}))},Is[vs.DESCENDANT]=function(e,t){return ks(e.descendant,t)&&t.ancestors().some((function(t){return ks(e.ancestor,t)}))},Is[vs.ANCESTOR]=function(e,t){return ks(e.ancestor,t)&&t.descendants().some((function(t){return ks(e.descendant,t)}))},Is[vs.COMPOUND_SPLIT]=function(e,t){return ks(e.subject,t)&&ks(e.left,t)&&ks(e.right,t)},Is[vs.TRUE]=function(){return!0},Is[vs.COLLECTION]=function(e,t){return e.value.has(t)},Is[vs.FILTER]=function(e,t){return(0,e.value)(t)};var Ms={matches:function(e){for(var t=this,n=0;n<t.length;n++){var r=t[n];if(ks(r,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===vs.ID)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(ks(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Ps=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||b(e)&&e.match(/^\s*$/)||(N(e)?this.addQuery({checks:[{type:vs.COLLECTION,value:e.collection()}]}):x(e)?this.addQuery({checks:[{type:vs.FILTER,value:e}]}):b(e)?this.parse(e)||(this.invalid=!0):Dt("A selector must be created from a string; found "))},Rs=Ps.prototype;[Cs,Ms].forEach((function(e){return Q(Rs,e)})),Rs.text=function(){return this.inputText},Rs.size=function(){return this.length},Rs.eq=function(e){return this[e]},Rs.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Rs.addQuery=function(e){this[this.length++]=e},Rs.selector=Rs.toString;var Bs={allAre:function(e){var t=new Ps(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Ps(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++)if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0;return!1},every:function(e,t){for(var n=0;n<this.length;n++)if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1;return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};Bs.allAreNeighbours=Bs.allAreNeighbors,Bs.has=Bs.contains,Bs.equal=Bs.equals=Bs.same;var Fs,zs,Gs=function(e,t){return function(n,r,i,a){var o,s=n,l=this;if(null==s?o="":N(s)&&1===s.length&&(o=s.id()),1===l.length&&o){var u=l[0]._private,c=u.traversalCache=u.traversalCache||{},h=c[t]=c[t]||[],d=gt(o),p=h[d];return p||(h[d]=e.call(l,n,r,i,a))}return e.call(l,n,r,i,a)}},Ys={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Gs((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];function n(e){for(var r=0;r<e.length;r++){var i=e[r];t.push(i),i.children().nonempty()&&n(i.children())}}return n(this.children()),this.spawn(t,!0).filter(e)}};function Xs(e,t,n,r){for(var i=[],a=new Ut,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var l=e[s];n?i.push(l):o&&r(i,a,l)}for(;i.length>0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function Vs(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function Us(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function js(e,t,n){Us(e,t,n),Vs(e,t,n)}Ys.forEachDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Vs)},Ys.forEachUp=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Us)},Ys.forEachUpAndDown=function(e){return Xs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],js)},Ys.ancestors=Ys.parents,(Fs=zs={data:hs.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:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:hs.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:hs.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Fs.data,Fs.removeAttr=Fs.removeData;var Hs,qs,Ws=zs,$s={};function Ks(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;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function Zs(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}Q($s,{degree:Ks((function(e,t){return t.source().same(t.target())?2:1})),indegree:Ks((function(e,t){return t.target().same(e)?1:0})),outdegree:Ks((function(e,t){return t.source().same(e)?1:0}))}),Q($s,{minDegree:Zs("degree",(function(e,t){return e<t})),maxDegree:Zs("degree",(function(e,t){return e>t})),minIndegree:Zs("indegree",(function(e,t){return e<t})),maxIndegree:Zs("indegree",(function(e,t){return e>t})),minOutdegree:Zs("outdegree",(function(e,t){return e<t})),maxOutdegree:Zs("outdegree",(function(e,t){return e>t}))}),Q($s,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var Qs=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},Js={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){Qs(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};(Hs=qs={position:hs.data(Js),silentPosition:hs.data(Q({},Js,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){Qs(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(E(e))t?this.silentPosition(e):this.position(e);else if(x(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a=this[i],o=void 0;(o=n(a,i))&&(t?a.silentPosition(o):a.position(o))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(E(e)?(r={x:_(e.x)?e.x:0,y:_(e.y)?e.y:0},n=t):b(e)&&_(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),l={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(l):o.position(l)}}i.endBatch()}return this},silentShift:function(e,t){return E(e)?this.shift(e,!0):b(e)&&_(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=E(e)?e:void 0,s=void 0!==o||void 0!==t&&b(e);if(n&&n.isNode()){if(!s){var l=n.position();return o=hn(l,i,a),void 0===e?o:o[e]}for(var u=0;u<this.length;u++){var c=this[u];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(dn(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=E(e)?e:void 0,a=void 0!==i||void 0!==t&&b(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),l=o?n.parent():null,u=l&&l.length>0,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;d<this.length;d++){var p=this[d],g=o?p.parent():null,f=g&&g.length>0,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}}).modelPosition=Hs.point=Hs.position,Hs.modelPositions=Hs.points=Hs.positions,Hs.renderedPoint=Hs.renderedPosition,Hs.relativePoint=Hs.relativePosition;var el,tl,nl=qs;el=tl={},tl.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}},tl.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},tl.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=m(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}}function m(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}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var rl=function(e){return e===1/0||e===-1/0?0:e},il=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},al=function(e,t){return null==t?e:il(e,t.x1,t.y1,t.x2,t.y2)},ol=function(e,t,n){return Ft(e,t,n)},sl=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,Mn(u,1),il(e,u.x1,u.y1,u.x2,u.y2)}}},ll=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=ol(a,"labelWidth",n),p=ol(a,"labelHeight",n),g=ol(a,"labelX",n),f=ol(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,T=2,_=p,D=d,C=D/2,N=_/2;if(m)o=g-C,s=g+C,l=f-N,u=f+N;else{switch(c.value){case"left":o=g-D,s=g;break;case"center":o=g-C,s=g+C;break;case"right":o=g,s=g+D}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-N,u=f+N;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-T,s+=v+Math.max(x,w)+E+T,l+=y-Math.max(x,w)-E-T,u+=y+Math.max(x,w)+E+T;var A=n||"main",L=i.labelBounds,S=L[A]=L[A]||{};S.x1=o,S.y1=l,S.x2=s,S.y2=u,S.w=s-o,S.h=u-l;var O=m&&"autorotate"===b.strValue,I=null!=b.pfValue&&0!==b.pfValue;if(O||I){var k=O?ol(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(k),P=Math.sin(k),R=(o+s)/2,B=(l+u)/2;if(!m){switch(c.value){case"left":R=s;break;case"right":R=o}switch(h.value){case"top":B=u;break;case"bottom":B=l}}var F=function(e,t){return{x:(e-=R)*M-(t-=B)*P+R,y:e*P+t*M+B}},z=F(o,l),G=F(o,u),Y=F(s,l),X=F(s,u);o=Math.min(z.x,G.x,Y.x,X.x),s=Math.max(z.x,G.x,Y.x,X.x),l=Math.min(z.y,G.y,Y.y,X.y),u=Math.max(z.y,G.y,Y.y,X.y)}var V=A+"Rot",U=L[V]=L[V]||{};U.x1=o,U.y1=l,U.x2=s,U.y2=u,U.w=s-o,U.h=u-l,il(e,o,l,s,u),il(i.labelBounds.all,o,l,s,u)}return e}},ul=function(e,t){var n,r,i,a,o,s,l=e._private.cy,u=l.styleEnabled(),c=l.headless(),h=Ln(),d=e._private,p=e.isNode(),g=e.isEdge(),f=d.rstyle,v=p&&u?e.pstyle("bounds-expansion").pfValue:[0],y=function(e){return"none"!==e.pstyle("display").value},m=!u||y(e)&&(!g||y(e.source())&&y(e.target()));if(m){var b=0;u&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(b=e.pstyle("overlay-padding").value);var x=0;u&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(x=e.pstyle("underlay-padding").value);var w=Math.max(b,x),E=0;if(u&&(E=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var _=e.outerWidth()/2,D=e.outerHeight()/2;il(h,n=o-_,i=s-D,r=o+_,a=s+D)}else if(g&&t.includeEdges)if(u&&!c){var C=e.pstyle("curve-style").strValue;if(n=Math.min(f.srcX,f.midX,f.tgtX),r=Math.max(f.srcX,f.midX,f.tgtX),i=Math.min(f.srcY,f.midY,f.tgtY),a=Math.max(f.srcY,f.midY,f.tgtY),il(h,n-=E,i-=E,r+=E,a+=E),"haystack"===C){var N=f.haystackPts;if(N&&2===N.length){if(n=N[0].x,i=N[0].y,n>(r=N[1].x)){var A=n;n=r,r=A}if(i>(a=N[1].y)){var L=i;i=a,a=L}il(h,n-E,i-E,r+E,a+E)}}else if("bezier"===C||"unbundled-bezier"===C||"segments"===C||"taxi"===C){var S;switch(C){case"bezier":case"unbundled-bezier":S=f.bezierPts;break;case"segments":case"taxi":S=f.linePts}if(null!=S)for(var O=0;O<S.length;O++){var I=S[O];n=I.x-E,r=I.x+E,i=I.y-E,a=I.y+E,il(h,n,i,r,a)}}}else{var k=e.source().position(),M=e.target().position();if((n=k.x)>(r=M.x)){var P=n;n=r,r=P}if((i=k.y)>(a=M.y)){var R=i;i=a,a=R}il(h,n-=E,i-=E,r+=E,a+=E)}if(u&&t.includeEdges&&g&&(sl(h,e,"mid-source"),sl(h,e,"mid-target"),sl(h,e,"source"),sl(h,e,"target")),u&&"yes"===e.pstyle("ghost").value){var B=e.pstyle("ghost-offset-x").pfValue,F=e.pstyle("ghost-offset-y").pfValue;il(h,h.x1+B,h.y1+F,h.x2+B,h.y2+F)}var z=d.bodyBounds=d.bodyBounds||{};Rn(z,h),Pn(z,v),Mn(z,1),u&&(n=h.x1,r=h.x2,i=h.y1,a=h.y2,il(h,n-w,i-w,r+w,a+w));var G=d.overlayBounds=d.overlayBounds||{};Rn(G,h),Pn(G,v),Mn(G,1);var Y=d.labelBounds=d.labelBounds||{};null!=Y.all?On(Y.all):Y.all=Ln(),u&&t.includeLabels&&(t.includeMainLabels&&ll(h,e,null),g&&(t.includeSourceLabels&&ll(h,e,"source"),t.includeTargetLabels&&ll(h,e,"target")))}return h.x1=rl(h.x1),h.y1=rl(h.y1),h.x2=rl(h.x2),h.y2=rl(h.y2),h.w=rl(h.x2-h.x1),h.h=rl(h.y2-h.y1),h.w>0&&h.h>0&&m&&(Pn(h,v),Mn(h,1)),h},cl=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays)},hl=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return pt([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},dl=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?gl:cl(t))===gl,o=hl(e),s=r.bbCachePosKey===o,l=t.useCache&&s,u=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!l||u(e)||i&&u(e.source())||u(e.target())?(s||e.recalculateRenderedStyle(l),n=ul(e,pl),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=Ln(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?al(n,r.overlayBounds):al(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?al(n,r.labelBounds.all):(t.includeMainLabels&&al(n,r.labelBounds.mainRot),t.includeSourceLabels&&al(n,r.labelBounds.sourceRot),t.includeTargetLabels&&al(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},pl={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},gl=cl(pl),fl=Mt(pl);tl.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=Ln();var n=fl(e=e||pl),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=hl(a),l=o.bbCachePosKey===s,u=n.useCache&&l&&!o.styleDirty;a.recalculateRenderedStyle(u)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var h=r[c];al(t,dl(h,n))}}else e=void 0===e?pl:fl(e),t=dl(this[0],e);return t.x1=rl(t.x1),t.y1=rl(t.y1),t.x2=rl(t.x2),t.y2=rl(t.y2),t.w=rl(t.x2-t.x1),t.h=rl(t.y2-t.y1),t},tl.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},tl.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),E(e)){var a=e;e=function(){return a}}var o=function(t,n){return t._private.bbAtOldPos=e(t,n)},s=function(e){return e._private.bbAtOldPos};n.startBatch(),t.forEach(o).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var l=Sn(this.boundingBox({useCache:!1}));return t.silentPositions(s),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),l},el.boundingbox=el.bb=el.boundingBox,el.renderedBoundingbox=el.renderedBoundingBox;var vl,yl,ml=tl;vl=yl={};var bl=function(e){e.uppercaseName=X(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=X(e.outerName),vl[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},vl["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},vl["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},vl["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};bl({name:"width"}),bl({name:"height"}),yl.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},yl.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},yl.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var xl=yl,wl=function(e,t){if(e.isEdge())return t(e)},El=function(e,t){if(e.isEdge()){var n=e.cy();return hn(t(e),n.zoom(),n.pan())}},Tl=function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return hn(e,i,r)}))}},_l={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Dl=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},Cl=Object.keys(_l).reduce((function(e,t){var n=_l[t],r=Dl(t);return e[t]=function(){return wl(this,n.get)},n.mult?e[r]=function(){return Tl(this,n.get)}:e[r]=function(){return El(this,n.get)},e}),{}),Nl=Q({},nl,ml,xl,Cl),Al=function(e,t){this.recycle(e,t)};function Ll(){return!1}function Sl(){return!0}Al.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ll,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Sl:Ll):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Sl;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Sl;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Sl,this.stopPropagation()},isDefaultPrevented:Ll,isPropagationStopped:Ll,isImmediatePropagationStopped:Ll};var Ol=/^([^.]+)(\.(?:[^.]+))?$/,Il=".*",kl={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Ml=Object.keys(kl),Pl={};function Rl(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Pl,t=arguments.length>1?arguments[1]:void 0,n=0;n<Ml.length;n++){var r=Ml[n];this[r]=e[r]||kl[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Bl=Rl.prototype,Fl=function(e,t,n,r,i,a,o){x(r)&&(i=r,r=null),o&&(a=null==a?o:Q({},a,o));for(var s=w(n)?n:n.split(/\s+/),l=0;l<s.length;l++){var u=s[l];if(!k(u)){var c=u.match(Ol);if(c&&!1===t(e,u,c[1],c[2]?c[2]:null,r,i,a))break}}},zl=function(e,t){return e.addEventFields(e.context,t),new Al(t.type,t)},Gl=function(e,t,n){if(I(n))t(e,n);else if(E(n))t(e,zl(e,n));else for(var r=w(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!k(a)){var o=a.match(Ol);if(o){var s=o[1],l=o[2]?o[2]:null;t(e,zl(e,{type:s,namespace:l,target:e.context}))}}}};Bl.on=Bl.addListener=function(e,t,n,r,i){return Fl(this,(function(e,t,n,r,i,a,o){x(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Bl.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Bl.removeListener=Bl.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=St(this.listeners));for(var a=this.listeners,o=function(o){var s=a[o];Fl(i,(function(t,n,r,i,l,u){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!l||t.qualifierCompare(s.qualifier,l))&&(!u||s.callback===u))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Bl.removeAllListeners=function(){return this.removeListener("*")},Bl.emit=Bl.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,w(t)||(t=[t]),Gl(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===Il)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&Bt(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Yl={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&&A(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},Xl=function(e){return b(e)?new Ps(e):e},Vl={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new Rl(Yl,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n);return this},removeListener:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().removeListener(e,r,n);return this},removeAllListeners:function(){for(var e=0;e<this.length;e++)this[e].emitter().removeAllListeners();return this},one:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().one(e,r,n);return this},once:function(e,t,n){for(var r=Xl(t),i=0;i<this.length;i++)this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})},emit:function(e,t){for(var n=0;n<this.length;n++)this[n].emitter().emit(e,t);return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};hs.eventAliasesOn(Vl);var Ul={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(b(e)||N(e))return new Ps(e).filter(this);if(x(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){b(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(b(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=this,i=e,a=this.length<e.length,o=a?r:i,s=a?i:r,l=0;l<o.length;l++){var u=o[l];s.has(u)&&n.push(u)}return n},xor:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this,i=e,a=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return a(r,i),a(i,r),n},diff:function(e){var t=this._private.cy;b(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=this,o=e,s=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return s(a,o,n),s(o,a,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(b(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&b(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var l=this.length++;this[l]=o,i.set(s,{ele:o,index:l})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!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<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--)e(this[t])&&this.unmergeAt(t);return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},jl=Ul;jl.u=jl["|"]=jl["+"]=jl.union=jl.or=jl.add,jl["\\"]=jl["!"]=jl["-"]=jl.difference=jl.relativeComplement=jl.subtract=jl.not,jl.n=jl["&"]=jl["."]=jl.and=jl.intersection=jl.intersect,jl["^"]=jl["(+)"]=jl["(-)"]=jl.symmetricDifference=jl.symdiff=jl.xor,jl.fnFilter=jl.filterFn=jl.stdFilter=jl.filter,jl.complement=jl.abscomp=jl.absoluteComplement;var Hl,ql={isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},Wl=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?xt:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},$l={forEach:function(e,t){if(x(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!x(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Wl)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:xt-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};$l.each=$l.forEach,Hl="undefined",("undefined"==typeof Symbol?"undefined":e(Symbol))!=Hl&&e(Symbol.iterator)!=Hl&&($l[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return a({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var Kl=Mt({nodeDimensionsIncludeLabels:!1}),Zl={layoutDimensions:function(e){var t;if(e=Kl(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=F(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var l=function(e,t,n){var r={x:t.x1+t.w/2,y:t.y1+t.h/2},i={x:(n.x-r.x)*e,y:(n.y-r.y)*e};return{x:r.x+i.x,y:r.y+i.y}},u=t.spacingFactor&&1!==t.spacingFactor,c=function(){if(!u)return null;for(var e=Ln(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);kn(e,i.x,i.y)}return e},h=c(),d=F((function(e,n){var r=s(e,n);if(u){var i=Math.abs(t.spacingFactor);r=l(i,h,r)}return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var p=0;p<r.length;p++){var g=r[p],f=d(g,p);if(null==t.animateFilter||t.animateFilter(g,p)){var v=g.animation({position:f,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}else g.position(f)}if(t.fit){var y=i.animation({fit:{boundingBox:a.boundingBoxAt(d),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(y)}else if(void 0!==t.zoom&&void 0!==t.pan){var m=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(m)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),Gi.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(d),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(Q({},e,{eles:this}))}};function Ql(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function Jl(e,t){return e=gt(e),function(n){return Ql(e,t,n)}}function eu(e,t){e=gt(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return Ql(e,n,t)}}Zl.createLayout=Zl.makeLayout=Zl.layout;var tu={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};return t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)})),this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&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;a<i.length;a++){var o=i[a];r.removeAllBypasses(o,n)}else{e=e.split(/\s+/);for(var s=0;s<i.length;s++){var l=i[s];r.removeBypasses(l,e,n)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++)i*=a[o].pstyle("opacity").value;return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function nu(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++)if(!t(n[r]))return!1;return!0}function ru(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||nu(i,r);var s=o.source,l=o.target;return n(s)&&(!a||nu(s,n))&&(s===l||n(l)&&(!a||nu(l,n)))}}}var iu=Jl("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));tu.takesUpSpace=eu("takesUpSpace",ru({ok:iu}));var au=Jl("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&iu(e)})),ou=Jl("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&iu(e)}));tu.interactive=eu("interactive",ru({ok:au,parentOk:ou,edgeOkViaNode:iu})),tu.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var su=Jl("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&iu(e)})),lu=iu;tu.visible=eu("visible",ru({ok:su,edgeOkViaNode:lu})),tu.hidden=function(){var e=this[0];if(e)return!e.visible()},tu.isBundledBezier=eu("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace()})),tu.bypass=tu.css=tu.style,tu.renderedCss=tu.renderedStyle,tu.removeBypass=tu.removeCss=tu.removeStyle,tu.pstyle=tu.parsedStyle;var uu={};function cu(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&x(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&w(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var l=this[s],u=!e.ableField||l._private[e.ableField],c=l._private[e.field]!=e.value;if(e.overrideAble){var h=e.overrideAble(l);if(void 0!==h&&(u=h,!h))return this}u&&(l._private[e.field]=e.value,c&&n.push(l))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event),o&&d.emit(o)}return this}}function hu(e){uu[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},uu[e.on]=cu({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),uu[e.off]=cu({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}hu({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),hu({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),hu({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),hu({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),uu.deselect=uu.unselect,uu.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},hu({field:"active",on:"activate",off:"unactivate"}),hu({field:"pannable",on:"panify",off:"unpanify"}),uu.inactive=function(){var e=this[0];if(e)return!e._private.active};var du={},pu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode()){for(var o=!1,s=a.connectedEdges(),l=0;l<s.length;l++){var u=s[l],c=u.source(),h=u.target();if(e.noIncomingEdges&&h===a&&c!==a||e.noOutgoingEdges&&c===a&&h!==a){o=!0;break}}o||r.push(a)}}return this.spawn(r,!0).filter(t)}},gu=function(e){return function(t){for(var n=this,r=[],i=0;i<n.length;i++){var a=n[i];if(a.isNode())for(var o=a.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();e.outgoing&&u===a?(r.push(l),r.push(c)):e.incoming&&c===a&&(r.push(l),r.push(u))}}return this.spawn(r,!0).filter(t)}},fu=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,r.push(l),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function vu(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function yu(e){return function(t){var n=[],r=this._private.cy,i=e||{};b(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var l=o[s],u=l._private.data,c=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),h=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(c||h){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!h)continue}n.push(l)}}return this.spawn(n,!0)}}function mu(e){return e=Q({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,l=s._private.data.id,u=o.data.target,c=s._private.edges,h=0;h<c.length;h++){var d=c[h],p=d._private.data,g=p.target,f=p.source,v=g===u&&f===l,y=l===g&&u===f;(i.codirected&&v||!i.codirected&&(v||y))&&n.push(d)}return this.spawn(n,!0).filter(t)}}du.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},Q(du,{roots:pu({noIncomingEdges:!0}),leaves:pu({noOutgoingEdges:!0}),outgoers:Gs(gu({outgoing:!0}),"outgoers"),successors:fu({outgoing:!0}),incomers:Gs(gu({incoming:!0}),"incomers"),predecessors:fu({incoming:!0})}),Q(du,{neighborhood:Gs((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&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)}}),du.neighbourhood=du.neighborhood,du.closedNeighbourhood=du.closedNeighborhood,du.openNeighbourhood=du.openNeighborhood,Q(du,{source:Gs((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Gs((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:vu({attr:"source"}),targets:vu({attr:"target"})}),Q(du,{edgesWith:Gs(yu(),"edgesWith"),edgesTo:Gs(yu({thisIsSrc:!0}),"edgesTo")}),Q(du,{connectedEdges:Gs((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];if(i.isNode())for(var a=i._private.edges,o=0;o<a.length;o++){var s=a[o];t.push(s)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Gs((function(e){for(var t=[],n=this,r=0;r<n.length;r++){var i=n[r];i.isEdge()&&(t.push(i.source()[0]),t.push(i.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Gs(mu(),"parallelEdges"),codirectedEdges:Gs(mu({codirected:!0}),"codirectedEdges")}),Q(du,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),du.componentsOf=du.components;var bu=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 Yt,a=!1;if(t){if(t.length>0&&E(t[0])&&!A(t[0])){a=!0;for(var o=[],s=new Ut,l=0,u=t.length;l<u;l++){var c=t[l];null==c.data&&(c.data={});var h=c.data;if(null==h.id)h.id=Ot();else if(e.hasElementWithId(h.id)||s.has(h.id))continue;var d=new jt(e,c,!1);o.push(d),s.add(h.id)}t=o}}else t=[];this.length=0;for(var p=0,g=t.length;p<g;p++){var f=t[p][0];if(null!=f){var v=f._private.data.id;n&&i.has(v)||(n&&i.set(v,{index:this.length,ele:f}),this[this.length]=f,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new Yt,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else Dt("A collection must have a reference to the core")},xu=jt.prototype=bu.prototype=Object.create(Array.prototype);xu.instanceString=function(){return"collection"},xu.spawn=function(e,t){return new bu(this.cy(),e,t)},xu.spawnSelf=function(){return this.spawn(this)},xu.cy=function(){return this._private.cy},xu.renderer=function(){return this._private.cy.renderer()},xu.element=function(){return this[0]},xu.collection=function(){return L(this)?this:new bu(this._private.cy,[this])},xu.unique=function(){return new bu(this._private.cy,this,!0)},xu.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},xu.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new bu(t)},xu.$id=xu.getElementById,xu.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},xu.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},xu.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},xu.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(E(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,l=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=l&&l!=i.target&&(o.target=""+l,a=!0),a&&(t=t.move(o))}else{var u="parent"in e.data,c=e.data.parent;!u||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var h=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return h("removed","remove","restore"),h("selected","select","unselect"),h("selectable","selectify","unselectify"),h("locked","lock","unlock"),h("grabbable","grabify","ungrabify"),h("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var d={data:Lt(r.data),position:Lt(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};d.classes="";var p=0;return r.classes.forEach((function(e){return d.classes+=0==p++?e:" "+e})),d}}},xu.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},xu.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new jt(e,r,!1);t.push(i)}return new bu(e,t)},xu.copy=xu.clone,xu.restore=function(){for(var e,t,n=!(arguments.length>0&&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;u<c;u++){var h=i[u];r&&!h.removed()||(h.isNode()?s.push(h):l.push(h))}e=s.concat(l);var d=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var p=e[t],g=p._private,f=g.data;if(p.clearTraversalCache(),r||g.removed)if(void 0===f.id)f.id=Ot();else if(_(f.id))f.id=""+f.id;else{if(k(f.id)||!b(f.id)){Dt("Can not create element with invalid string ID `"+f.id+"`"),d();continue}if(a.hasElementWithId(f.id)){Dt("Can not create second element with ID `"+f.id+"`"),d();continue}}var v=f.id;if(p.isNode()){var y=g.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(p.isEdge()){for(var m=p,x=["source","target"],w=x.length,E=!1,T=0;T<w;T++){var D=x[T],C=f[D];_(C)&&(C=f[D]=""+f[D]),null==C||""===C?(Dt("Can not create edge `"+v+"` with unspecified "+D),E=!0):a.hasElementWithId(C)||(Dt("Can not create edge `"+v+"` with nonexistant "+D+" `"+C+"`"),E=!0)}if(E){d();continue}var N=a.getElementById(f.source),A=a.getElementById(f.target);N.same(A)?N._private.edges.push(m):(N._private.edges.push(m),A._private.edges.push(m)),m._private.source=N,m._private.target=A}g.map=new Yt,g.map.set(v,{ele:p,index:0}),g.removed=!1,r&&a.addToPool(p)}for(var L=0;L<s.length;L++){var S=s[L],O=S._private.data;_(O.parent)&&(O.parent=""+O.parent);var I=O.parent;if(null!=I||S._private.parent){var M=S._private.parent?a.collection().merge(S._private.parent):a.getElementById(I);if(M.empty())O.parent=void 0;else if(M[0].removed())Nt("Node added with missing parent, reference to parent removed"),O.parent=void 0,S._private.parent=null;else{for(var P=!1,R=M;!R.empty();){if(S.same(R)){P=!0,O.parent=void 0;break}R=R.parent()}P||(M[0]._private.children.push(S),S._private.parent=M[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var B=e.length===i.length?i:new bu(a,e),F=0;F<B.length;F++){var z=B[F];z.isNode()||(z.parallelEdges().clearTraversalCache(),z.source().clearTraversalCache(),z.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(B).merge(B.connectedNodes()).merge(B.parent()):B).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?B.emitAndNotify("add"):r&&B.emit("add")}return i},xu.removed=function(){var e=this[0];return e&&e._private.removed},xu.inside=function(){var e=this[0];return e&&!e._private.removed},xu.remove=function(){var e=!(arguments.length>0&&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){for(var t=e._private.edges,n=0;n<t.length;n++)l(t[n])}function s(e){for(var t=e._private.children,n=0;n<t.length;n++)l(t[n])}function l(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),o(e),s(e)):r.unshift(e))}for(var u=0,c=n.length;u<c;u++)l(n[u]);function h(e,t){var n=e._private.edges;Pt(n,t),e.clearTraversalCache()}function d(e){e.clearTraversalCache()}var p=[];function g(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Pt(n,t),t._private.parent=null,p.ids[r]||(p.ids[r]=!0,p.push(e))}p.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var f=0;f<r.length;f++){var v=r[f];if(v.isEdge()){var y=v.source()[0],m=v.target()[0];h(y,v),h(m,v);for(var b=v.parallelEdges(),x=0;x<b.length;x++){var w=b[x];d(w),w.isBundledBezier()&&w.dirtyBoundingBoxCache()}}else{var E=v.parent();0!==E.length&&g(E,v)}t&&(v._private.removed=!0)}var T=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<T.length;_++)if(T[_].isParent()){a._private.hasCompoundNodes=!0;break}var D=new bu(this.cy(),r);D.size()>0&&(e?D.emitAndNotify("remove"):t&&D.emit("remove"));for(var C=0;C<p.length;C++){var N=p[C];t&&N.removed()||N.updateStyle()}return D},xu.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),l=null!=o&&t.hasElementWithId(o),u=null!=s&&t.hasElementWithId(s);(l||u)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(l&&(a.source=o),u&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var h=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=h)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Si,ds,ps,Bs,Ys,Ws,$s,Nl,Vl,Ul,ql,$l,Zl,tu,uu,du].forEach((function(e){Q(xu,e)}));var wu={add:function(e){var t,n=this;if(N(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new bu(n,i)}}else if(w(e))t=new bu(n,e);else if(E(e)&&(w(e.nodes)||w(e.edges))){for(var s=e,l=[],u=["nodes","edges"],c=0,h=u.length;c<h;c++){var d=u[c],p=s[d];if(w(p))for(var g=0,f=p.length;g<f;g++){var v=Q({group:d},p[g]);l.push(v)}}t=new bu(n,l)}else t=new jt(n,e).collection();return t},remove:function(e){if(N(e));else if(b(e)){var t=e;e=this.$(t)}return e.remove()}};function Eu(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,l=11,u=1/(l-1),c="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var h=0;h<4;++h)if("number"!=typeof arguments[h]||isNaN(arguments[h])||!isFinite(arguments[h]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var d=c?new Float32Array(l):new Array(l);function p(e,t){return 1-3*t+3*e}function g(e,t){return 3*t-6*e}function f(e){return 3*e}function v(e,t,n){return((p(t,n)*e+g(t,n))*e+f(t))*e}function y(e,t,n){return 3*p(t,n)*e*e+2*g(t,n)*e+f(t)}function m(t,r){for(var a=0;a<i;++a){var o=y(r,e,n);if(0===o)return r;r-=(v(r,e,n)-t)/o}return r}function b(){for(var t=0;t<l;++t)d[t]=v(t*u,e,n)}function x(t,r,i){var a,l,u=0;do{(a=v(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(a)>o&&++u<s);return l}function w(t){for(var r=0,i=1,o=l-1;i!==o&&d[i]<=t;++i)r+=u;--i;var s=r+(t-d[i])/(d[i+1]-d[i])*u,c=y(s,e,n);return c>=a?m(t,s):0===c?s:x(t,r,r+u)}var E=!1;function T(){E=!0,e===t&&n===r||b()}var _=function(i){return E||T(),e===t&&n===r?i:0===i?0:1===i?1:v(w(i),t,r)};_.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var D="generateBezier("+[e,t,n,r]+")";return _.toString=function(){return D},_}var Tu=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4,d=.016;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*d:d;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),_u=function(e,t,n,r){var i=Eu(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Du={linear:function(e,t,n){return e+(t-e)*n},ease:_u(.25,.1,.25,1),"ease-in":_u(.42,0,1,1),"ease-out":_u(0,0,.58,1),"ease-in-out":_u(.42,0,.58,1),"ease-in-sine":_u(.47,0,.745,.715),"ease-out-sine":_u(.39,.575,.565,1),"ease-in-out-sine":_u(.445,.05,.55,.95),"ease-in-quad":_u(.55,.085,.68,.53),"ease-out-quad":_u(.25,.46,.45,.94),"ease-in-out-quad":_u(.455,.03,.515,.955),"ease-in-cubic":_u(.55,.055,.675,.19),"ease-out-cubic":_u(.215,.61,.355,1),"ease-in-out-cubic":_u(.645,.045,.355,1),"ease-in-quart":_u(.895,.03,.685,.22),"ease-out-quart":_u(.165,.84,.44,1),"ease-in-out-quart":_u(.77,0,.175,1),"ease-in-quint":_u(.755,.05,.855,.06),"ease-out-quint":_u(.23,1,.32,1),"ease-in-out-quint":_u(.86,0,.07,1),"ease-in-expo":_u(.95,.05,.795,.035),"ease-out-expo":_u(.19,1,.22,1),"ease-in-out-expo":_u(1,0,0,1),"ease-in-circ":_u(.6,.04,.98,.335),"ease-out-circ":_u(.075,.82,.165,1),"ease-in-out-circ":_u(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Du.linear;var r=Tu(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":_u};function Cu(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 Nu(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Au(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Nu(e,i),s=Nu(t,i);if(_(o)&&_(s))return Cu(a,o,s,n,r);if(w(o)&&w(s)){for(var l=[],u=0;u<s.length;u++){var c=o[u],h=s[u];if(null!=c&&null!=h){var d=Cu(a,c,h,n,r);l.push(d)}else l.push(h)}return l}}function Lu(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,l=o.startTime,u=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Du.linear;else{var c,h,d;c=b(s)?u.parse("transition-timing-function",s).value:s,b(c)?(h=c,d=[]):(h=c[1],d=c.slice(2).map((function(e){return+e}))),d.length>0?("spring"===h&&d.push(o.duration),o.easingImpl=Du[h].apply(null,d)):o.easingImpl=Du[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={};Su(f.x,v.x)&&(y.x=Au(f.x,v.x,p,g)),Su(f.y,v.y)&&(y.y=Au(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,x=o.pan,w=a.pan,E=null!=x&&r;E&&(Su(m.x,x.x)&&(w.x=Au(m.x,x.x,p,g)),Su(m.y,x.y)&&(w.y=Au(m.y,x.y,p,g)),e.emit("pan"));var T=o.startZoom,_=o.zoom,D=null!=_&&r;D&&(Su(T,_)&&(a.zoom=An(a.minZoom,Au(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<C.length;N++){var A=C[N],L=A.name,S=A,O=o.startStyle[L],I=Au(O,S,p,g,u.properties[O.name]);u.overrideBypass(e,L,I)}e.emit("style")}}return o.progress=p,p}function Su(e,t){return!!(null!=e&&null!=t&&(_(e)&&_(t)||e&&t))}function Ou(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Iu(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var l=o.shift();l&&a.push(l)}for(var u=function(e){for(var t=e.length-1;t>=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||Ou(t,h,e),Lu(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;o<n.length;o++){var s=i(n[o]);a=a||s}var l=i(t,!0);(a||l)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var ku={animate:hs.animate(),animation:hs.animation(),animated:hs.animated(),clearQueue:hs.clearQueue(),delay:hs.delay(),delayAnimation:hs.delayAnimation(),stop:hs.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._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){Iu(n,e)}),t.beforeRenderPriorities.animations):n()}function n(){e._private.animationsRunning&&nt((function(t){Iu(t,e),n()}))}}},Mu={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&&A(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}},Pu=function(e){return b(e)?new Ps(e):e},Ru={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Rl(Mu,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Pu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Pu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Pu(t),n),this},once:function(e,t,n){return this.emitter().one(e,Pu(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}};hs.eventAliasesOn(Ru);var Bu={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)}};Bu.jpeg=Bu.jpg;var Fu={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(Q({},e,{cy:t,eles:i}));return a}Dt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Dt("A `name` must be specified to make a layout");else Dt("Layout options must be specified to make a layout")}};Fu.createLayout=Fu.makeLayout=Fu.layout;var zu={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;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},Gu=Mt({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Yu={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Nt("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 r=Gu(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else Dt("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)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)}};Yu.invalidateDimensions=Yu.resize;var Xu={collection:function(e,t){return b(e)?this.$(e):N(e)?e.collection():w(e)?(t||(t={}),new bu(this,e,t.unique,t.removed)):new bu(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}};Xu.elements=Xu.filter=Xu.$;var Vu={},Uu="t",ju="f";Vu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},Vu.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},l=0;l<n.length;l++){var u=n[l],c=e[l]===Uu,h=t[l]===Uu,d=c!==h,p=u.mappedProperties.length>0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f<g.length;f++){for(var v=g[f],y=v.name,m=!1,b=l+1;b<n.length;b++){var x=n[b];if(t[b]===Uu&&(m=null!=x.properties[v.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},Vu.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Uu:ju}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},Vu.getContextStyle=function(e){var t=e.key,n=this,r=this._private.contextStyles=this._private.contextStyles||{};if(r[t])return r[t];for(var i={_private:{key:t}},a=0;a<n.length;a++){var o=n[a];if(t[a]===Uu)for(var s=0;s<o.properties.length;s++){var l=o.properties[s];i[l.name]=l}}return r[t]=i,i},Vu.applyContextStyle=function(e,t,n){for(var r=this,i=e.diffPropNames,a={},o=r.types,s=0;s<i.length;s++){var l=i[s],u=t[l],c=n.pstyle(l);if(!u){if(!c)continue;u=c.bypass?{name:l,deleteBypassed:!0}:{name:l,delete:!0}}if(c!==u){if(u.mapped===o.fn&&null!=c&&null!=c.mapping&&c.mapping.value===u.value){var h=c.mapping;if((h.fnValue=u.value(n))===h.prevFnValue)continue}var d=a[l]={prev:c};r.applyParsedProperty(n,u),d.next=n.pstyle(l),d.next&&d.next.bypass&&(d.next=d.next.bypassed)}}return{diffProps:a}},Vu.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,l=e._private.style;r=Object.keys(l);for(var u=0;u<i.length;u++){var c=i[u];t.styleKeys[c]=[it,ot]}for(var h=function(e,n){return t.styleKeys[n][0]=lt(e,t.styleKeys[n][0])},d=function(e,n){return t.styleKeys[n][1]=ut(e,t.styleKeys[n][1])},p=function(e,t){h(e,t),d(e,t)},g=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);h(r,t),d(r,t)}},f=2e9,v=function(e){return-128<e&&e<128&&Math.floor(e)!==e?f-(1024*e|0):e},y=0;y<r.length;y++){var m=r[y],b=l[m];if(null!=b){var x=this.properties[m],w=x.type,E=x.groupKey,T=void 0;null!=x.hashOverride?T=x.hashOverride(e,b):null!=b.pfValue&&(T=b.pfValue);var _=null==x.enums?b.value:null,D=null!=T,C=D||null!=_,N=b.units;w.number&&C&&!w.multiple?(p(v(D?T:_),E),D||null==N||g(N,E)):g(b.strValue,E)}}for(var A=[it,ot],L=0;L<i.length;L++){var S=i[L],O=t.styleKeys[S];A[0]=lt(O[0],A[0]),A[1]=ut(O[1],A[1])}t.styleKey=ct(A[0],A[1]);var I=t.styleKeys;t.labelDimsKey=ht(I.labelDimensions);var k=a(e,["label"],I.labelDimensions);if(t.labelKey=ht(k),t.labelStyleKey=ht(dt(I.commonLabel,k)),!s){var M=a(e,["source-label"],I.labelDimensions);t.sourceLabelKey=ht(M),t.sourceLabelStyleKey=ht(dt(I.commonLabel,M));var P=a(e,["target-label"],I.labelDimensions);t.targetLabelKey=ht(P),t.targetLabelStyleKey=ht(dt(I.commonLabel,P))}if(s){var R=t.styleKeys,B=R.nodeBody,F=R.nodeBorder,z=R.backgroundImage,G=R.compound,Y=R.pie,X=[B,F,z,G,Y].filter((function(e){return null!=e})).reduce(dt,[it,ot]);t.nodeKey=ht(X),t.hasPie=null!=Y&&Y[0]!==it&&Y[1]!==ot}return o!==t.styleKey},Vu.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},Vu.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,l=i.bypass,u=a[i.name],c=u&&u.bypass,h=e._private,d="mapping",p=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},g=function(){var t=p(u),n=p(i);r.checkTriggers(e,i.name,t,n)};if(i&&"pie"===i.name.substr(0,3)&&Nt("The pie style properties are deprecated. Create charts using background images instead."),"curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",l)),i.delete)return a[i.name]=void 0,g(),!0;if(i.deleteBypassed)return u?!!u.bypass&&(u.bypassed=void 0,g(),!0):(g(),!0);if(i.deleteBypass)return u?!!u.bypass&&(a[i.name]=u.bypassed,g(),!0):(g(),!0);var f=function(){Nt("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var v,y=i.field.split("."),m=h.data,b=0;b<y.length&&m;b++)m=m[y[b]];if(null==m)return f(),!1;if(!_(m))return Nt("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((v=0===x?0:(m-i.fieldMin)/x)<0?v=0:v>1&&(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],S=[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:S,strValue:"rgb("+S[0]+", "+S[1]+", "+S[2]+")"}}else{if(!s.number)return!1;var O=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,O,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var I=i.field.split("."),k=h.data,M=0;M<I.length&&k;M++)k=k[I[M]];if(null!=k&&(n=this.parse(i.name,k,i.bypass,d)),!n)return f(),!1;n.mapping=i,i=n;break;case o.fn:var P=i.value,R=null!=i.fnValue?i.fnValue:P(e);if(i.prevFnValue=R,null==R)return Nt("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,R,i.bypass,d)))return Nt("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Lt(i),i=n;break;case void 0:break;default:return!1}return l?(i.bypassed=c?u.bypassed:u,a[i.name]=i):c?u.bypassed=i:a[i.name]=i,g(),!0},Vu.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],l=i[s];null!=l&&(l.bypass?l.bypassed=null:i[s]=null)}else r._private.style={}}},Vu.update=function(){this._private.cy.mutableElements().updateStyle()},Vu.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},l=!1,u=0;u<i.length;u++){var c=i[u],h=e.pstyle(c),d=t[c];if(d){var p=d.prev,g=null!=d.next?d.next:h,f=!1,v=void 0,y=1e-6;p&&(_(p.pfValue)&&_(g.pfValue)?(f=g.pfValue-p.pfValue,v=p.pfValue+y*f):_(p.value)&&_(g.value)?(f=g.value-p.value,v=p.value+y*f):w(p.value)&&w(g.value)&&(f=p.value[0]!==g.value[0]||p.value[1]!==g.value[1]||p.value[2]!==g.value[2],v=p.strValue),f&&(s[c]=g.strValue,this.applyBypass(e,c,v),l=!0))}}if(!l)return;r.transitioning=!0,new Gi((function(t){o>0?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)},Vu.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Vu.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)}))},Vu.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)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Vu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Hu={applyBypass:function(e,t,n,r){var i=this,a=[],o=!0;if("*"===t||"**"===t){if(void 0!==n)for(var s=0;s<i.properties.length;s++){var l=i.properties[s].name,u=this.parse(l,n,!0);u&&a.push(u)}}else if(b(t)){var c=this.parse(t,n,!0);c&&a.push(c)}else{if(!E(t))return!1;var h=t;r=n;for(var d=Object.keys(h),p=0;p<d.length;p++){var g=d[p],f=h[g];if(void 0===f&&(f=h[G(g)]),void 0!==f){var v=this.parse(g,f,!0);v&&a.push(v)}}}if(0===a.length)return!1;for(var y=!1,m=0;m<e.length;m++){for(var x=e[m],w={},T=void 0,_=0;_<a.length;_++){var D=a[_];if(r){var C=x.pstyle(D.name);T=w[D.name]={prev:C}}y=this.applyParsedProperty(x,Lt(D))||y,r&&(T.next=x.pstyle(D.name))}y&&this.updateStyleHints(x),r&&this.updateTransitions(x,w,o)}return y},overrideBypass:function(e,t,n){t=z(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,l=o.mutiple,u=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":l?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,u,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=!0,i=0;i<e.length;i++){for(var a=e[i],o={},s=0;s<t.length;s++){var l=t[s],u=this.properties[l],c=a.pstyle(u.name);if(c&&c.bypass){var h="",d=this.parse(l,h,!0),p=o[u.name]={prev:c};this.applyParsedProperty(a,d),p.next=a.pstyle(u.name)}}this.updateStyleHints(a),n&&this.updateTransitions(a,o,r)}}},qu={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy,n=t.container(),r=t.window();if(r&&n&&r.getComputedStyle)return r.getComputedStyle(n).getPropertyValue(e)}},Wu={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[G(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){var r=this;if(e=e[0]){var i=r.properties[t];i.alias&&(i=i.pointsTo);var a=i.type,o=e.pstyle(i.name);if(o){var s=o.value,l=o.units,u=o.strValue;if(n&&a.number&&null!=s&&_(s)){var c=e.cy().zoom(),h=function(e){return e*c},d=function(e,t){return h(e)+t},p=w(s);return(p?l.every((function(e){return null!=e})):null!=l)?p?s.map((function(e,t){return d(e,l[t])})).join(" "):d(s,l):p?s.map((function(e){return b(e)?e:""+h(e)})).join(" "):""+h(s)}if(null!=u)return u}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=E(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],l=r[o]||r[z(o)],u=this.parse(l.name,s);u&&t.push(u)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,l,u=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);else for(a=i.strValue,l=0;l<a.length;l++)o=a.charCodeAt(l),u[0]=lt(o,u[0]),u[1]=ut(o,u[1]);return u}};Wu.getPropertiesHash=Wu.getNonDefaultPropertiesHash;var $u={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},Ku={appendFromString:function(e){var t,n,r,i=this,a=this,o=""+e;function s(){o=o.length>t.length?o.substr(t.length):""}function l(){n=n.length>r.length?n.substr(r.length):""}for(o=o.replace(/[/][*](\s|.)+?[*][/]/g,"");!o.match(/^\s*$/);){var u=o.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!u){Nt("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+o);break}t=u[0];var c=u[1];if("core"!==c&&new Ps(c).invalid)Nt("Skipping parsing of block: Invalid selector found in string stylesheet: "+c),s();else{var h=u[2],d=!1;n=h;for(var p=[];!n.match(/^\s*$/);){var g=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!g){Nt("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+h),d=!0;break}r=g[0];var f=g[1],v=g[2];i.properties[f]?a.parse(f,v)?(p.push({name:f,val:v}),l()):(Nt("Skipping property: Invalid property definition in: "+r),l()):(Nt("Skipping property: Invalid property name in: "+r),l())}if(d){s();break}a.selector(c);for(var y=0;y<p.length;y++){var m=p[y];a.css(m.name,m.val)}s()}}return a},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},Zu={};(function(){var e=V,t=j,n=q,r=W,i=$,a=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},o=function(a){var o=e+"|\\w+|"+t+"|"+n+"|"+r+"|"+i;return"^"+a+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+o+")\\s*\\,\\s*("+o+")\\)$"},s=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];Zu.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},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"]},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"]},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:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:o("mapData")},mapLayoutData:{mapping:!0,regex:o("mapLayoutData")},mapScratch:{mapping:!0,regex:o("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:s,singleRegexMatchValue:!0},urls:{regexes:s,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},edgeEndpoint:{number:!0,multiple:!0,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:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return b(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\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"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var l={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||0==e&&0!=t||0!=e&&0==t},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=k(e),r=k(t);return n&&!r||!n&&r}},u=Zu.types,c=[{name:"label",type:u.text,triggersBounds:l.any,triggersZOrder:l.emptyNonEmpty},{name:"text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any}],h=[{name:"source-label",type:u.text,triggersBounds:l.any},{name:"source-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"source-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"source-text-offset",type:u.size,triggersBounds:l.any}],d=[{name:"target-label",type:u.text,triggersBounds:l.any},{name:"target-text-rotation",type:u.textRotation,triggersBounds:l.any},{name:"target-text-margin-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-margin-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"target-text-offset",type:u.size,triggersBounds:l.any}],p=[{name:"font-family",type:u.fontFamily,triggersBounds:l.any},{name:"font-style",type:u.fontStyle,triggersBounds:l.any},{name:"font-weight",type:u.fontWeight,triggersBounds:l.any},{name:"font-size",type:u.size,triggersBounds:l.any},{name:"text-transform",type:u.textTransform,triggersBounds:l.any},{name:"text-wrap",type:u.textWrap,triggersBounds:l.any},{name:"text-overflow-wrap",type:u.textOverflowWrap,triggersBounds:l.any},{name:"text-max-width",type:u.size,triggersBounds:l.any},{name:"text-outline-width",type:u.size,triggersBounds:l.any},{name:"line-height",type:u.positiveNumber,triggersBounds:l.any}],g=[{name:"text-valign",type:u.valign,triggersBounds:l.any},{name:"text-halign",type:u.halign,triggersBounds:l.any},{name:"color",type:u.color},{name:"text-outline-color",type:u.color},{name:"text-outline-opacity",type:u.zeroOneNumber},{name:"text-background-color",type:u.color},{name:"text-background-opacity",type:u.zeroOneNumber},{name:"text-background-padding",type:u.size,triggersBounds:l.any},{name:"text-border-opacity",type:u.zeroOneNumber},{name:"text-border-color",type:u.color},{name:"text-border-width",type:u.size,triggersBounds:l.any},{name:"text-border-style",type:u.borderStyle,triggersBounds:l.any},{name:"text-background-shape",type:u.textBackgroundShape,triggersBounds:l.any},{name:"text-justification",type:u.justification}],f=[{name:"events",type:u.bool},{name:"text-events",type:u.bool}],v=[{name:"display",type:u.display,triggersZOrder:l.any,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"visibility",type:u.visibility,triggersZOrder:l.any},{name:"opacity",type:u.zeroOneNumber,triggersZOrder:l.zeroNonZero},{name:"text-opacity",type:u.zeroOneNumber},{name:"min-zoomed-font-size",type:u.size},{name:"z-compound-depth",type:u.zCompoundDepth,triggersZOrder:l.any},{name:"z-index-compare",type:u.zIndexCompare,triggersZOrder:l.any},{name:"z-index",type:u.nonNegativeInt,triggersZOrder:l.any}],y=[{name:"overlay-padding",type:u.size,triggersBounds:l.any},{name:"overlay-color",type:u.color},{name:"overlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"overlay-shape",type:u.overlayShape,triggersBounds:l.any}],m=[{name:"underlay-padding",type:u.size,triggersBounds:l.any},{name:"underlay-color",type:u.color},{name:"underlay-opacity",type:u.zeroOneNumber,triggersBounds:l.zeroNonZero},{name:"underlay-shape",type:u.overlayShape,triggersBounds:l.any}],x=[{name:"transition-property",type:u.propList},{name:"transition-duration",type:u.time},{name:"transition-delay",type:u.time},{name:"transition-timing-function",type:u.easing}],w=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},E=[{name:"height",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"width",type:u.nodeSize,triggersBounds:l.any,hashOverride:w},{name:"shape",type:u.nodeShape,triggersBounds:l.any},{name:"shape-polygon-points",type:u.polygonPointList,triggersBounds:l.any},{name:"background-color",type:u.color},{name:"background-fill",type:u.fill},{name:"background-opacity",type:u.zeroOneNumber},{name:"background-blacken",type:u.nOneOneNumber},{name:"background-gradient-stop-colors",type:u.colors},{name:"background-gradient-stop-positions",type:u.percentages},{name:"background-gradient-direction",type:u.gradientDirection},{name:"padding",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"padding-relative-to",type:u.paddingRelativeTo,triggersBounds:l.any},{name:"bounds-expansion",type:u.boundsExpansion,triggersBounds:l.any}],T=[{name:"border-color",type:u.color},{name:"border-opacity",type:u.zeroOneNumber},{name:"border-width",type:u.size,triggersBounds:l.any},{name:"border-style",type:u.borderStyle}],_=[{name:"background-image",type:u.urls},{name:"background-image-crossorigin",type:u.bgCrossOrigin},{name:"background-image-opacity",type:u.zeroOneNumbers},{name:"background-image-containment",type:u.bgContainment},{name:"background-image-smoothing",type:u.bools},{name:"background-position-x",type:u.bgPos},{name:"background-position-y",type:u.bgPos},{name:"background-width-relative-to",type:u.bgRelativeTo},{name:"background-height-relative-to",type:u.bgRelativeTo},{name:"background-repeat",type:u.bgRepeat},{name:"background-fit",type:u.bgFit},{name:"background-clip",type:u.bgClip},{name:"background-width",type:u.bgWH},{name:"background-height",type:u.bgWH},{name:"background-offset-x",type:u.bgPos},{name:"background-offset-y",type:u.bgPos}],D=[{name:"position",type:u.position,triggersBounds:l.any},{name:"compound-sizing-wrt-labels",type:u.compoundIncludeLabels,triggersBounds:l.any},{name:"min-width",type:u.size,triggersBounds:l.any},{name:"min-width-bias-left",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-width-bias-right",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height",type:u.size,triggersBounds:l.any},{name:"min-height-bias-top",type:u.sizeMaybePercent,triggersBounds:l.any},{name:"min-height-bias-bottom",type:u.sizeMaybePercent,triggersBounds:l.any}],C=[{name:"line-style",type:u.lineStyle},{name:"line-color",type:u.color},{name:"line-fill",type:u.fill},{name:"line-cap",type:u.lineCap},{name:"line-opacity",type:u.zeroOneNumber},{name:"line-dash-pattern",type:u.numbers},{name:"line-dash-offset",type:u.number},{name:"line-gradient-stop-colors",type:u.colors},{name:"line-gradient-stop-positions",type:u.percentages},{name:"curve-style",type:u.curveStyle,triggersBounds:l.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:u.zeroOneNumber,triggersBounds:l.any},{name:"source-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"target-endpoint",type:u.edgeEndpoint,triggersBounds:l.any},{name:"control-point-step-size",type:u.size,triggersBounds:l.any},{name:"control-point-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"control-point-weights",type:u.numbers,triggersBounds:l.any},{name:"segment-distances",type:u.bidirectionalSizes,triggersBounds:l.any},{name:"segment-weights",type:u.numbers,triggersBounds:l.any},{name:"taxi-turn",type:u.bidirectionalSizeMaybePercent,triggersBounds:l.any},{name:"taxi-turn-min-distance",type:u.size,triggersBounds:l.any},{name:"taxi-direction",type:u.axisDirection,triggersBounds:l.any},{name:"edge-distances",type:u.edgeDistances,triggersBounds:l.any},{name:"arrow-scale",type:u.positiveNumber,triggersBounds:l.any},{name:"loop-direction",type:u.angle,triggersBounds:l.any},{name:"loop-sweep",type:u.angle,triggersBounds:l.any},{name:"source-distance-from-node",type:u.size,triggersBounds:l.any},{name:"target-distance-from-node",type:u.size,triggersBounds:l.any}],N=[{name:"ghost",type:u.bool,triggersBounds:l.any},{name:"ghost-offset-x",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-offset-y",type:u.bidirectionalSize,triggersBounds:l.any},{name:"ghost-opacity",type:u.zeroOneNumber}],A=[{name:"selection-box-color",type:u.color},{name:"selection-box-opacity",type:u.zeroOneNumber},{name:"selection-box-border-color",type:u.color},{name:"selection-box-border-width",type:u.size},{name:"active-bg-color",type:u.color},{name:"active-bg-opacity",type:u.zeroOneNumber},{name:"active-bg-size",type:u.size},{name:"outside-texture-bg-color",type:u.color},{name:"outside-texture-bg-opacity",type:u.zeroOneNumber}],L=[];Zu.pieBackgroundN=16,L.push({name:"pie-size",type:u.sizeMaybePercent});for(var S=1;S<=Zu.pieBackgroundN;S++)L.push({name:"pie-"+S+"-background-color",type:u.color}),L.push({name:"pie-"+S+"-background-size",type:u.percent}),L.push({name:"pie-"+S+"-background-opacity",type:u.zeroOneNumber});var O=[],I=Zu.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:u.arrowShape,triggersBounds:l.any},{name:"arrow-color",type:u.color},{name:"arrow-fill",type:u.arrowFill}].forEach((function(e){I.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;O.push({name:n,type:r,triggersBounds:i})}))}),{});var M=Zu.properties=[].concat(f,x,v,y,m,N,g,p,c,h,d,E,T,_,L,D,C,O,A),P=Zu.propertyGroups={behavior:f,transition:x,visibility:v,overlay:y,underlay:m,ghost:N,commonLabel:g,labelDimensions:p,mainLabel:c,sourceLabel:h,targetLabel:d,nodeBody:E,nodeBorder:T,backgroundImage:_,pie:L,compound:D,edgeLine:C,edgeArrow:O,core:A},R=Zu.propertyGroupNames={};(Zu.propertyGroupKeys=Object.keys(P)).forEach((function(e){R[e]=P[e].map((function(e){return e.name})),P[e].forEach((function(t){return t.groupKey=e}))}));var B=Zu.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{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"}];Zu.propertyNames=M.map((function(e){return e.name}));for(var F=0;F<M.length;F++){var z=M[F];M[z.name]=z}for(var G=0;G<B.length;G++){var Y=B[G],X=M[Y.pointsTo],U={name:Y.name,alias:!0,pointsTo:X};M.push(U),M[Y.name]=U}})(),Zu.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},Zu.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=Q({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,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","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","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",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,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},{"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(e,t){for(var n=1;n<=Zu.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"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":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","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"}].reduce((function(e,t){return Zu.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},Zu.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":.25}),this.defaultLength=this.length};var Qu={parse:function(e,t,n,r){var i=this;if(x(t))return i.parseImplWarn(e,t,n,r);var a,o=ft(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Lt(a))&&(a.value=Lt(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Nt("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Nt("The style value of `label` is deprecated for `"+i.name+"`"),i},parseImpl:function(e,t,n,r){var i=this;e=z(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var l=b(t);l&&(t=t.trim());var u,c,h=a.type;if(!h)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(x(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!l||r||t.length<7||"a"!==t[1]);else{if(t.length>=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 Nt("`"+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=[],_=[],C="",N=!1,A=0;A<m.length;A++){var L=i.parse(e,m[A],n,"multiple");N=N||b(L.value),E.push(L.value),_.push(null!=L.pfValue?L.pfValue:L.value),T.push(L.units),C+=(A>0?" ":"")+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:_,strValue:C,bypass:n,units:T}}var S=function(){for(var r=0;r<h.enums.length;r++)if(h.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n};return null};if(h.number){var O,I="px";if(h.units&&(O=h.units),h.implicitUnits&&(I=h.implicitUnits),!h.unitless)if(l){var k="px|em"+(h.allowPercent?"|\\%":"");O&&(k=O);var M=t.match("^("+V+")("+k+")?$");M&&(t=M[1],O=M[2]||I)}else O&&!h.implicitUnits||(O=I);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=o,S();if(h.integer&&!D(t))return null;if(void 0!==h.min&&(t<h.min||h.strictMin&&t===h.min)||void 0!==h.max&&(t>h.max||h.strictMax&&t===h.max))return null;var P={name:e,value:t,strValue:""+t+(O||""),units:O,bypass:n};return h.unitless||"px"!==O&&"em"!==O?P.pfValue=t:P.pfValue="px"!==O&&O?this.getEmSizeInPixels()*t:t,"ms"!==O&&"s"!==O||(P.pfValue="ms"===O?t:1e3*t),"deg"!==O&&"rad"!==O||(P.pfValue="rad"===O?t:mn(t)),"%"===O&&(P.pfValue=t/100),P}if(h.propList){var R=[],B=""+t;if("none"===B);else{for(var F=B.split(/\s*,\s*|\s+/),G=0;G<F.length;G++){var Y=F[G].trim();i.properties[Y]?R.push(Y):Nt("`"+Y+"` is not a valid property name")}if(0===R.length)return null}return{name:e,value:R,strValue:0===R.length?"none":R.join(" "),bypass:n}}if(h.color){var X=re(t);return X?{name:e,value:X,pfValue:X,strValue:"rgb("+X[0]+","+X[1]+","+X[2]+")",bypass:n}:null}if(h.regex||h.regexes){if(h.enums){var U=S();if(U)return U}for(var j=h.regexes?h.regexes:[h.regex],H=0;H<j.length;H++){var q=new RegExp(j[H]).exec(t);if(q)return{name:e,value:h.singleRegexMatchValue?q[1]:q,strValue:""+t,bypass:n}}return null}return h.string?{name:e,value:""+t,strValue:""+t,bypass:n}:h.enums?S():null}},Ju=function e(t){if(!(this instanceof e))return new e(t);S(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):Dt("A style must have a core reference")},ec=Ju.prototype;ec.instanceString=function(){return"style"},ec.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},ec.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},ec.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},ec.selector=function(e){var t="core"===e?null:new Ps(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},ec.css=function(){var e=this,t=arguments;if(1===t.length)for(var n=t[0],r=0;r<e.properties.length;r++){var i=e.properties[r],a=n[i.name];void 0===a&&(a=n[G(i.name)]),void 0!==a&&this.cssRule(i.name,a)}else 2===t.length&&this.cssRule(t[0],t[1]);return this},ec.style=ec.css,ec.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},ec.append=function(e){return O(e)?e.appendToStyle(this):w(e)?this.appendFromJson(e):b(e)&&this.appendFromString(e),this},Ju.fromJson=function(e,t){var n=new Ju(e);return n.fromJson(t),n},Ju.fromString=function(e,t){return new Ju(e).fromString(t)},[Vu,Hu,qu,Wu,$u,Ku,Zu,Qu].forEach((function(e){Q(ec,e)})),Ju.types=ec.types,Ju.properties=ec.properties,Ju.propertyGroups=ec.propertyGroups,Ju.propertyGroupNames=ec.propertyGroupNames,Ju.propertyGroupKeys=ec.propertyGroupKeys;var tc={style:function(e){return e&&this.setStyle(e).update(),this._private.style},setStyle:function(e){var t=this._private;return O(e)?t.style=e.generateStyle(this):w(e)?t.style=Ju.fromJson(this,e):b(e)?t.style=Ju.fromString(this,e):t.style=Ju(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},nc="single",rc={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType=nc),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(b(a[0]))return o[e=a[0]];if(E(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,_(r)&&(o.x=r),_(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=a[0],t=a[1],"x"!==e&&"y"!==e||!_(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:E(e)&&(a=(i=s[0]).x,o=i.y,_(a)&&(l.x+=a),_(o)&&(l.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!_(r)||(l[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(_(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n;if(b(e)){var r=e;e=this.$(r)}else if(P(e)){var i=e;(n={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else N(e)||(e=this.mutableElements());if(!N(e)||!e.empty()){n=n||e.boundingBox();var a,o=this.width(),s=this.height();if(t=_(t)?t:0,!isNaN(o)&&!isNaN(s)&&o>0&&s>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:a=(a=(a=Math.min((o-2*t)/n.w,(s-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:a)<this._private.minZoom?this._private.minZoom:a,pan:{x:(o-a*(n.x1+n.x2))/2,y:(s-a*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return _(e)&&_(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):_(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:_(t)&&void 0===e&&t>=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=hn(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!_(n)||n===a||null!=t&&(!_(t.x)||!_(t.y)))return null;if(null!=t){var s=i,l=a,u=n;return{zoomed:!0,panned:!0,zoom:u,pan:{x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(_(e.zoom)||(n=!1),E(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>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 N(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}};rc.centre=rc.center,rc.autolockNodes=rc.autolock,rc.autoungrabifyNodes=rc.autoungrabify;var ic={data:hs.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:hs.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:hs.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:hs.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};ic.attr=ic.data,ic.removeAttr=ic.removeData;var ac=function(e){var t=this,n=(e=Q({},e)).container;n&&!C(n)&&C(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=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({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 bu(this),listeners:[],aniEles:new bu(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});var u=function(e,t){if(e.some(R))return Gi.all(e).then(t);t(e)};l.styleEnabled&&t.setStyle([]);var c=Q({},o,o.renderer);t.initRenderer(c);var h=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=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()};u([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),h(a,(function(){t.startAnimationLoop(),l.ready=!0,x(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},oc=ac.prototype;Q(oc,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){if(null==this._private.container)return d;var e=this._private.container.ownerDocument;return void 0===e||null==e?d:e.defaultView||d},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!C(e)&&C(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(Q({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Lt(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements(),i=function(e){return t.getElementById(e.id())};if(E(e)){if(t.startBatch(),e.elements){var a={},o=function(e,n){for(var r=[],i=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var l=""+s.data.id,u=t.getElementById(l);a[l]=!0,0!==u.length?i.push({ele:u,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Nt("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<i.length;c++){var h=i[c],d=h.ele,p=h.json;d.json(p)}};if(w(e.elements))o(e.elements);else for(var s=["nodes","edges"],l=0;l<s.length;l++){var u=s[l],c=e.elements[u];w(c)&&o(c,u)}var h=t.collection();r.filter((function(e){return!a[e.id()]})).forEach((function(e){e.isParent()?h.merge(e):e.remove()})),h.forEach((function(e){return e.children().move({parent:null})})),h.forEach((function(e){return i(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var d=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],p=0;p<d.length;p++){var g=d[p];null!=e[g]&&t[g](e[g])}return t.endBatch(),this}var f={};e?f.elements=this.elements().map((function(e){return e.json()})):(f.elements={},r.forEach((function(e){var t=e.group();f.elements[t]||(f.elements[t]=[]),f.elements[t].push(e.json())}))),this._private.styleEnabled&&(f.style=t.style().json()),f.data=Lt(t.data());var v=n.options;return f.zoomingEnabled=n.zoomingEnabled,f.userZoomingEnabled=n.userZoomingEnabled,f.zoom=n.zoom,f.minZoom=n.minZoom,f.maxZoom=n.maxZoom,f.panningEnabled=n.panningEnabled,f.userPanningEnabled=n.userPanningEnabled,f.pan=Lt(n.pan),f.boxSelectionEnabled=n.boxSelectionEnabled,f.renderer=Lt(v.renderer),f.hideEdgesOnViewport=v.hideEdgesOnViewport,f.textureOnViewport=v.textureOnViewport,f.wheelSensitivity=v.wheelSensitivity,f.motionBlur=v.motionBlur,f.multiClickDebounceTime=v.multiClickDebounceTime,f}}),oc.$id=oc.getElementById,[wu,ku,Ru,Bu,Fu,zu,Yu,Xu,tc,rc,ic].forEach((function(e){Q(oc,e)}));var sc={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort: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}},lc={maximal:!1,acyclic:!1},uc=function(e){return e.scratch("breadthfirst")},cc=function(e,t){return e.scratch("breadthfirst",t)};function hc(e){this.options=Q({},sc,lc,e)}hc.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,l=n.acyclic||n.maximal||n.maximalAdjustments>0,u=Ln(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(N(n.roots))e=n.roots;else if(w(n.roots)){for(var c=[],h=0;h<n.roots.length;h++){var d=n.roots[h],p=r.getElementById(d);c.push(p)}e=r.collection(c)}else if(b(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var g=i.components();e=r.collection();for(var f=function(t){var n=g[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},v=0;v<g.length;v++)f(v)}var y=[],m={},x=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),cc(e,{index:n,depth:t})},E=function(e,t){var n=uc(e),r=n.depth,i=n.index;y[r][i]=null,x(e,t)};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();x(a,i),m[o]=!0}});for(var T=[],_=0;_<a.length;_++){var D=a[_];m[D.id()]||T.push(D)}var C=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?cc(r,{depth:e,index:n}):(t.splice(n,1),n--)}},A=function(){for(var e=0;e<y.length;e++)C(e)},L=function(e,t){for(var r=uc(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),l=0;l<a.length;l++){var u=a[l],c=uc(u);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var h=o+1;return E(e,h),t[s]=h,!0}return!1};if(s&&l){var S=[],O={},I=function(e){return S.push(e)},k=function(){return S.shift()};for(a.forEach((function(e){return S.push(e)}));S.length>0;){var M=k(),P=L(M,O);if(P)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(I);else if(null===P){Nt("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var R=0;if(n.avoidOverlap)for(var B=0;B<a.length;B++){var F=a[B].layoutDimensions(n),z=F.w,G=F.h;R=Math.max(R,z,G)}var Y={},X=function(e){if(Y[e.id()])return Y[e.id()];for(var t=uc(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var l=uc(s);if(null!=l){var u=l.index,c=l.depth;if(null!=u&&null!=c){var h=y[c].length;c<t&&(r+=u/h,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),Y[e.id()]=r,r},V=function(e,t){var n=X(e)-X(t);return 0===n?K(e.id(),t.id()):n};void 0!==n.depthSort&&(V=n.depthSort);for(var U=0;U<y.length;U++)y[U].sort(V),C(U);for(var j=[],H=0;H<T.length;H++)j.push(T[H]);y.unshift(j),A();for(var q=0,W=0;W<y.length;W++)q=Math.max(y[W].length,q);var $={x:u.x1+u.w/2,y:u.x1+u.h/2},Z=y.reduce((function(e,t){return Math.max(e,t.length)}),0),Q=function(e){var t=uc(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(u.w/((n.grid?Z:a)+1),R),s=Math.max(u.h/(y.length+1),R),l=Math.min(u.w/2/y.length,u.h/2/y.length);if(l=Math.max(l,R),n.circle){var c=l*r+l-(y.length>0&&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:$.x+c*Math.cos(h),y:$.y+c*Math.sin(h)}}return{x:$.x+(i+1-(a+1)/2)*o,y:(r+1)*s}};return i.nodes().layoutPositions(this,n,Q),this};var dc={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 pc(e){this.options=Q({},dc,e)}pc.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=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),c=0,h=0;h<a.length;h++){var d=a[h].layoutDimensions(t),p=d.w,g=d.h;c=Math.max(c,p,g)}if(o=_(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-c,a.length>1&&t.avoidOverlap){c*=1.75;var f=Math.cos(u)-Math.cos(0),v=Math.sin(u)-Math.sin(0),y=Math.sqrt(c*c/(f*f+v*v));o=Math.max(y,o)}var m=function(e,n){var r=t.startAngle+n*u*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l.x+a,y:l.y+s}};return r.nodes().layoutPositions(this,t,m),this};var gc,fc={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 vc(e){this.options=Q({},fc,e)}vc.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=Ln(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s={x:o.x1+o.w/2,y:o.y1+o.h/2},l=[],u=0,c=0;c<a.length;c++){var h=a[c],d=void 0;d=t.concentric(h),l.push({value:d,node:h}),h._private.scratch.concentric=d}a.updateStyle();for(var p=0;p<a.length;p++){var g=a[p].layoutDimensions(t);u=Math.max(u,g.w,g.h)}l.sort((function(e,t){return t.value-e.value}));for(var f=t.levelWidth(a),v=[[]],y=v[0],m=0;m<l.length;m++){var b=l[m];y.length>0&&Math.abs(y[0].value-b.value)>=f&&(y=[],v.push(y)),y.push(b)}var x=u+t.minNodeSpacing;if(!t.avoidOverlap){var w=v.length>0&&v[0].length>1,E=(Math.min(o.w,o.h)/2-x)/(v.length+w?1:0);x=Math.min(x,E)}for(var T=0,_=0;_<v.length;_++){var D=v[_],C=void 0===t.sweep?2*Math.PI-2*Math.PI/D.length:t.sweep,N=D.dTheta=C/Math.max(1,D.length-1);if(D.length>1&&t.avoidOverlap){var A=Math.cos(N)-Math.cos(0),L=Math.sin(N)-Math.sin(0),S=Math.sqrt(x*x/(A*A+L*L));T=Math.max(S,T)}D.r=T,T+=x}if(t.equidistant){for(var O=0,I=0,k=0;k<v.length;k++){var M=v[k].r-I;O=Math.max(O,M)}I=0;for(var P=0;P<v.length;P++){var R=v[P];0===P&&(I=R.r),R.r=I,I+=O}}for(var B={},F=0;F<v.length;F++)for(var z=v[F],G=z.dTheta,Y=z.r,X=0;X<z.length;X++){var V=z[X],U=t.startAngle+(n?1:-1)*G*X,j={x:s.x+Y*Math.cos(U),y:s.y+Y*Math.sin(U)};B[V.node.id()]=j}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return B[t]})),this};var yc={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function mc(e){this.options=Q({},yc,e),this.options.layout=this}mc.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),gc=!0===e.debug;var r=xc(t,n,e);gc&&bc(r),e.randomize&&Tc(r);var i=rt(),a=function(){Dc(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter||(Cc(r,e),r.temperature=r.temperature*e.coolingFactor,r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=_c(r,e,t);t.layoutPositions(n,e,i)}},l=0,u=!0;if(!0===e.animate)!function t(){for(var n=0;u&&n<e.refresh;)u=o(l),l++,n++;u?(rt()-i>=e.animationThreshold&&a(),nt(t)):(Fc(r,e),s())}();else{for(;u;)u=o(l),l++;Fc(r,e),s()}return this},mc.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},mc.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var bc,xc=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=Ln(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;u<s.length;u++)for(var c=s[u],h=0;h<c.length;h++)l[c[h].id()]=u;for(u=0;u<o.nodeSize;u++){var d=(y=i[u]).layoutDimensions(n);(M={}).isLocked=y.locked(),M.id=y.data("id"),M.parentId=y.data("parent"),M.cmptId=l[y.id()],M.children=[],M.positionX=y.position("x"),M.positionY=y.position("y"),M.offsetX=0,M.offsetY=0,M.height=d.w,M.width=d.h,M.maxX=M.positionX+M.width/2,M.minX=M.positionX-M.width/2,M.maxY=M.positionY+M.height/2,M.minY=M.positionY-M.height/2,M.padLeft=parseFloat(y.style("padding")),M.padRight=parseFloat(y.style("padding")),M.padTop=parseFloat(y.style("padding")),M.padBottom=parseFloat(y.style("padding")),M.nodeRepulsion=x(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(M),o.idToIndex[M.id]=u}var p=[],g=0,f=-1,v=[];for(u=0;u<o.nodeSize;u++){var y,m=(y=o.layoutNodes[u]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(p[++f]=y.id,v.push(y.id))}for(o.graphSet.push(v);g<=f;){var b=p[g++],w=o.idToIndex[b],E=o.layoutNodes[w].children;if(E.length>0)for(o.graphSet.push(E),u=0;u<E.length;u++)p[++f]=E[u]}for(u=0;u<o.graphSet.length;u++){var T=o.graphSet[u];for(h=0;h<T.length;h++){var _=o.idToIndex[T[h]];o.indexToGraph[_]=u}}for(u=0;u<o.edgeSize;u++){var D=r[u],C={};C.id=D.data("id"),C.sourceId=D.data("source"),C.targetId=D.data("target");var N=x(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,A=x(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,L=o.idToIndex[C.sourceId],S=o.idToIndex[C.targetId];if(o.indexToGraph[L]!=o.indexToGraph[S]){for(var O=wc(C.sourceId,C.targetId,o),I=o.graphSet[O],k=0,M=o.layoutNodes[L];-1===I.indexOf(M.id);)M=o.layoutNodes[o.idToIndex[M.parentId]],k++;for(M=o.layoutNodes[S];-1===I.indexOf(M.id);)M=o.layoutNodes[o.idToIndex[M.parentId]],k++;N*=k*n.nestingFactor}C.idealLength=N,C.elasticity=A,o.layoutEdges.push(C)}return o},wc=function(e,t,n){var r=Ec(e,t,0,n);return 2>r.count?0:r.graph},Ec=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var l=a[s],u=i.idToIndex[l],c=i.layoutNodes[u].children;if(0!==c.length){var h=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==h.count){if(1!==h.count)return h;if(2==++o)break}}}return{count:o,graph:r}},Tc=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},_c=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,l=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+l*r.h}}return{x:o.positionX,y:o.positionY}}},Dc=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=_c(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},Cc=function(e,t,n){Nc(e,t),Ic(e),kc(e,t),Mc(e),Pc(e)},Nc=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var l=e.layoutNodes[e.idToIndex[r[s]]];Lc(o,l,e,t)}},Ac=function(e){return-e+2*e*Math.random()},Lc=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY,o=1;0===i&&0===a&&(i=Ac(o),a=Ac(o));var s=Sc(e,t,i,a);if(s>0)var l=(c=r.nodeOverlap*s)*i/(v=Math.sqrt(i*i+a*a)),u=c*a/v;else{var c,h=Oc(e,i,a),d=Oc(t,-1*i,-1*a),p=d.x-h.x,g=d.y-h.y,f=p*p+g*g,v=Math.sqrt(f);l=(c=(e.nodeRepulsion+t.nodeRepulsion)/f)*p/v,u=c*g/v}e.isLocked||(e.offsetX-=l,e.offsetY-=u),t.isLocked||(t.offsetX+=l,t.offsetY+=u)}},Sc=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},Oc=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&&0<n||0===t&&0>n?(u.x=r,u.y=i+a/2,u):0<t&&-1*l<=s&&s<=l?(u.x=r+o/2,u.y=i+o*n/2/t,u):0>t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0<n&&(s<=-1*l||s>=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},Ic=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,u=s.positionY-a.positionY;if(0!==l||0!==u){var c=Oc(a,l,u),h=Oc(s,-1*l,-1*u),d=h.x-c.x,p=h.y-c.y,g=Math.sqrt(d*d+p*p),f=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var v=f*d/g,y=f*p/g;else v=0,y=0;a.isLocked||(a.offsetX+=v,a.offsetY+=y),s.isLocked||(s.offsetX-=v,s.offsetY-=y)}}},kc=function(e,t){if(0!==t.gravity)for(var n=1,r=0;r<e.graphSet.length;r++){var i=e.graphSet[r],a=i.length;if(0===r)var o=e.clientHeight/2,s=e.clientWidth/2;else{var l=e.layoutNodes[e.idToIndex[i[0]]],u=e.layoutNodes[e.idToIndex[l.parentId]];o=u.positionX,s=u.positionY}for(var c=0;c<a;c++){var h=e.layoutNodes[e.idToIndex[i[c]]];if(!h.isLocked){var d=o-h.positionX,p=s-h.positionY,g=Math.sqrt(d*d+p*p);if(g>n){var f=t.gravity*d/g,v=t.gravity*p/g;h.offsetX+=f,h.offsetY+=v}}}}},Mc=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(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,h=0;h<l.length;h++){var d=e.layoutNodes[e.idToIndex[l[h]]];d.offsetX+=u,d.offsetY+=c,n[++i]=l[h]}s.offsetX=0,s.offsetY=0}}},Pc=function(e,t){for(var n=0;n<e.nodeSize;n++)0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0);for(n=0;n<e.nodeSize;n++)if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Rc(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,Bc(i,e)}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Rc=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Bc=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.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Fc=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++)if(f=r[i]){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var l=0;l<f.length;l++){var u=f[l];f.x1=Math.min(f.x1,u.positionX-u.width/2),f.x2=Math.max(f.x2,u.positionX+u.width/2),f.y1=Math.min(f.y1,u.positionY-u.height/2),f.y2=Math.max(f.y2,u.positionY+u.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,s+=f.w*f.h}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,h=0,d=0,p=0,g=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var f;if(f=r[i]){for(l=0;l<f.length;l++)(u=f[l]).isLocked||(u.positionX+=c-f.x1,u.positionY+=h-f.y1);c+=f.w+t.componentSpacing,d+=f.w+t.componentSpacing,p=Math.max(p,f.h),d>g&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},zc={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 Gc(e){this.options=Q({},zc,e)}Gc.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=Ln(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;){var v=c(),y=h();(y+1)*v>=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<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var T=w.layoutDimensions(t),_=t.avoidOverlapPadding,D=T.w+_,C=T.h+_;m=Math.max(m,D),b=Math.max(b,C)}for(var N={},A=function(e,t){return!!N["c-"+e+"-"+t]},L=function(e,t){N["c-"+e+"-"+t]=!0},S=0,O=0,I=function(){++O>=u&&(O=0,S++)},k={},M=0;M<i.length;M++){var P=i[M],R=t.position(P);if(R&&(void 0!==R.row||void 0!==R.col)){var B={row:R.row,col:R.col};if(void 0===B.col)for(B.col=0;A(B.row,B.col);)B.col++;else if(void 0===B.row)for(B.row=0;A(B.row,B.col);)B.row++;k[P.id()]=B,L(B.row,B.col)}}var F=function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=k[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;A(S,O);)I();n=O*m+m/2+a.x1,r=S*b+b/2+a.y1,L(S,O),I()}return{x:n,y:r}};i.layoutPositions(this,t,F)}return this};var Yc={ready:function(){},stop:function(){}};function Xc(e){this.options=Q({},Yc,e)}Xc.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},Xc.prototype.stop=function(){return this};var Vc={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,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 Uc(e){this.options=Q({},Vc,e)}Uc.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=x(e.positions);function r(t){if(null==e.positions)return cn(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}return t.layoutPositions(this,e,(function(e,t){var n=r(e);return!e.locked()&&null!=n&&n})),this};var jc={fit:!0,padding:30,boundingBox: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 Hc(e){this.options=Q({},jc,e)}Hc.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=Ln(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),i=function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}};return n.nodes().layoutPositions(this,e,i),this};var qc=[{name:"breadthfirst",impl:hc},{name:"circle",impl:pc},{name:"concentric",impl:vc},{name:"cose",impl:mc},{name:"grid",impl:Gc},{name:"null",impl:Xc},{name:"preset",impl:Uc},{name:"random",impl:Hc}];function Wc(e){this.options=e,this.notifications=0}var $c=function(){},Kc=function(){throw new Error("A headless instance can not render images")};Wc.prototype={recalculateRenderedStyle:$c,notify:function(){this.notifications++},init:$c,isHeadless:function(){return!0},png:Kc,jpg:Kc};var Zc={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,l=i.x+n/2+o,u=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=l&&u<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];a.push(r(s,l,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){b(s)&&(s=e[s]),e[r]=Q({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var l=a(i(this.points,n+2*s,r,o));return Wn(e,t,l)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:Et,roughCollide:Et,draw:_t,spacing:Tt,gap:Tt}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var l=i(this.points,n,a,o),u=this.controlPoint,c=r(u[0],u[1],n,a,o);t.arrowShapeImpl(this.name)(e,l,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.pointsTee,n+2*l,r,o));return Wn(e,t,u)||Wn(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,l){var u=o,c=Math.pow(u.x-e,2)+Math.pow(u.y-t,2)<=Math.pow((n+2*l)*this.radius,2),h=a(i(this.points,n+2*l,r,o));return Wn(e,t,h)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e,i=3,a=5;return n[i]=n[i]-r,n[a]=n[a]-r,n},collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.crossLinePts(n,s),n+2*l,r,o));return Wn(e,t,u)||Wn(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},Qc={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),l=n.zoom();return[((e-i)/o-s.x)/l,((t-a)/o-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=this.cy.window().getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i={left:r("padding-left"),right:r("padding-right"),top:r("padding-top"),bottom:r("padding-bottom")},a={left:r("border-left-width"),right:r("border-right-width"),top:r("border-top-width"),bottom:r("border-bottom-width")},o=e.clientWidth,s=e.clientHeight,l=i.left+i.right,u=i.top+i.bottom,c=a.left+a.right,h=t.width/(o+c),d=o-l,p=s-u,g=t.left+i.left+a.left,f=t.top+i.top+a.top;return this.containerBB=[g,f,d,p,h]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,l=s.getCachedZSortedEles(),u=[],c=s.cy.zoom(),h=s.cy.hasCompoundNodes(),d=(r?24:8)/c,p=(r?8:2)/c,g=(r?8:2)/c,f=1/0;function v(e,t){if(e.isNode()){if(a)return;a=e,u.push(e)}if(e.isEdge()&&(null==t||t<f))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<u.length;n++)if(u[n].isEdge()){u[n]=e,i=e,f=null!=t?t:f;break}}else u.push(e),i=e,f=null!=t?t:f}function y(n){var r=n.outerWidth()+2*p,i=n.outerHeight()+2*p,a=r/2,l=i/2,u=n.position();if(u.x-a<=e&&e<=u.x+a&&u.y-l<=t&&t<=u.y+l&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,u.x,u.y))return v(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,l=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,p=l/2+d,g=p*p,f=2*p,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(Xn(e,t,x[w],x[w+1],x[w+2],x[w+3],f)&&g>(r=qn(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<a.allpts.length;w+=4)if(Vn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],f)&&g>(r=Hn(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),T=[{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<T.length;w++){var _=T[w],D=s.arrowShapes[n.pstyle(_.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,_.angle,{x:_.x,y:_.y},C,d)&&D.collide(e,t,E,_.angle,{x:_.x,y:_.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return Ft(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),T=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},_=T(f,m),D=T(f,x),C=T(y,m),N=T(y,x),A=[_.x+d,_.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Wn(e,t,A))return v(n),!0}else if(Fn(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=this.getCachedZSortedEles().interactive,a=[],o=Math.min(e,n),s=Math.max(e,n),l=Math.min(t,r),u=Math.max(t,r),c=Ln({x1:e=o,y1:t=l,x2:n=s,y2:r=u}),h=0;h<i.length;h++){var d=i[h];if(d.isNode()){var p=d,g=p.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});Bn(c,g)&&!Gn(g,c)&&a.push(p)}else{var f=d,v=f._private,y=v.rscratch;if(null!=y.startX&&null!=y.startY&&!Fn(c,y.startX,y.startY))continue;if(null!=y.endX&&null!=y.endY&&!Fn(c,y.endX,y.endY))continue;if("bezier"===y.edgeType||"multibezier"===y.edgeType||"self"===y.edgeType||"compound"===y.edgeType||"segments"===y.edgeType||"haystack"===y.edgeType){for(var m=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,b=!0,x=0;x<m.length;x++)if(!zn(c,m[x])){b=!1;break}b&&a.push(f)}else"haystack"!==y.edgeType&&"straight"!==y.edgeType||a.push(f)}}return a}},Jc={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,l="haystack"===s.edgeType,u="bezier"===s.edgeType,c="multibezier"===s.edgeType,h="segments"===s.edgeType,d="compound"===s.edgeType,p="self"===s.edgeType;if(l?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),f=s.midX,v=s.midY,h)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||d||p||u){var g=s.allpts;t=r-Dn(g[0],g[2],g[4],.1),n=i-Dn(g[1],g[3],g[5],.1)}else t=r-f,n=i-v;s.srcArrowAngle=bn(t,n);var f=s.midX,v=s.midY;if(l&&(f=(r+a)/2,v=(i+o)/2),t=a-r,n=o-i,h)if((g=s.allpts).length/2%2==0){var y=(m=g.length/2)-2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else{y=(m=g.length/2-1)-2;var m,b=m+2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else if(c||d||p){var x,w,E,T,g=s.allpts;if(s.ctrlpts.length/2%2==0){var _=2+(D=2+(C=g.length/2-1));x=Dn(g[C],g[D],g[_],0),w=Dn(g[C+1],g[D+1],g[_+1],0),E=Dn(g[C],g[D],g[_],1e-4),T=Dn(g[C+1],g[D+1],g[_+1],1e-4)}else{var D,C;_=2+(D=g.length/2-1),x=Dn(g[C=D-2],g[D],g[_],.4999),w=Dn(g[C+1],g[D+1],g[_+1],.4999),E=Dn(g[C],g[D],g[_],.5),T=Dn(g[C+1],g[D+1],g[_+1],.5)}t=E-x,n=T-w}if(s.midtgtArrowAngle=bn(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,h&&((g=s.allpts).length/2%2==0||(t=-(g[b=2+(m=g.length/2-1)]-g[m]),n=-(g[b+1]-g[m+1]))),s.midsrcArrowAngle=bn(t,n),h)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||d||p||u){var N=(g=s.allpts).length;t=a-Dn(g[N-6],g[N-4],g[N-2],.9),n=o-Dn(g[N-5],g[N-3],g[N-1],.9)}else t=a-f,n=o-v;s.tgtArrowAngle=bn(t,n)}};Jc.getArrowWidth=Jc.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var eh={};function th(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}eh.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,l=o.position(),u=s.position(),c=o.width(),h=s.width(),d=o.height(),p=s.height(),g=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*g+l.x,i.source.y*d*g+l.y,i.target.x*h*g+u.x,i.target.y*p*g+u.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},eh.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("edge-distances").value,s=e.pstyle("segment-weights"),l=e.pstyle("segment-distances"),u=Math.min(s.pfValue.length,l.pfValue.length);n.edgeType="segments",n.segpts=[];for(var c=0;c<u;c++){var h=s.pfValue[c],d=l.pfValue[c],p=1-h,g=h,f="node-position"===o?r:i,v={x:f.x1*p+f.x2*g,y:f.y1*p+f.y2*g};n.segpts.push(v.x+a.x*d,v.y+a.y*d)}},eh.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),l=s?s.pfValue[0]:void 0,u=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,h=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var d=n,p=h;r&&(d=0,p=l);var g=u-Math.PI/2,f=g-c/2,v=g+c/2,y=String(u+"_"+c);d=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(f)*p*(d/3+1),o.y+1.4*Math.sin(f)*p*(d/3+1),o.x+1.4*Math.cos(v)*p*(d/3+1),o.y+1.4*Math.sin(v)*p*(d/3+1)]},eh.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,l=t.srcH,u=t.tgtW,c=t.tgtH,h=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),p=d?d.pfValue[0]:void 0,g=n,f=h;r&&(g=0,f=p);var v=50,y={x:a.x-s/2,y:a.y-l/2},m={x:o.x-u/2,y:o.y-c/2},b={x:Math.min(y.x,m.x),y:Math.min(y.y,m.y)},x=.5,w=Math.max(x,Math.log(.01*s)),E=Math.max(x,Math.log(.01*u));i.ctrlpts=[b.x,b.y-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*w,b.x-(1+Math.pow(v,1.12)/100)*f*(g/3+1)*E,b.y]},eh.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},eh.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=t.vectorNormInverse,s=t.posPts,l=t.intersectionPts,u=e.pstyle("edge-distances").value,c=e.pstyle("control-point-step-size").pfValue,h=e.pstyle("control-point-distances"),d=e.pstyle("control-point-weights"),p=h&&d?Math.min(h.value.length,d.value.length):1,g=h?h.pfValue[0]:void 0,f=d.value[0],v=r;a.edgeType=v?"multibezier":"bezier",a.ctrlpts=[];for(var y=0;y<p;y++){var m=(.5-t.eles.length/2+n)*c*(i?-1:1),b=void 0,x=wn(m);v&&(g=h?h.pfValue[y]:c,f=d.value[y]);var w=void 0!==(b=r?g:void 0!==g?x*g:void 0)?b:m,E=1-f,T=f,_="node-position"===u?s:l,D={x:_.x1*E+_.x2*T,y:_.y1*E+_.y2*T};a.ctrlpts.push(D.x+o.x*w,D.y+o.y*w)}},eh.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",l="upward",u="auto",c=t.posPts,h=t.srcW,d=t.srcH,p=t.tgtW,g=t.tgtH,f="node-position"!==e.pstyle("edge-distances").value,v=e.pstyle("taxi-direction").value,y=v,m=e.pstyle("taxi-turn"),b="%"===m.units,x=m.pfValue,w=x<0,E=e.pstyle("taxi-turn-min-distance").pfValue,T=f?(h+p)/2:0,_=f?(d+g)/2:0,D=c.x2-c.x1,C=c.y2-c.y1,N=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},A=N(D,T),L=N(C,_),S=!1;y===u?v=Math.abs(A)>Math.abs(L)?i:r:y===l||y===s?(v=r,S=!0):y!==a&&y!==o||(v=i,S=!0);var O,I=v===r,k=I?L:A,M=I?C:D,P=wn(M),R=!1;S&&(b||w)||!(y===s&&M<0||y===l&&M>0||y===a&&M>0||y===o&&M<0)||(k=(P*=-1)*Math.abs(k),R=!0);var B=function(e){return Math.abs(e)<E||Math.abs(e)>=Math.abs(k)},F=B(O=b?(x<0?1+x:x)*k:(x<0?k:0)+x*P),z=B(Math.abs(k)-Math.abs(O));if(!F&&!z||R)if(I){var G=c.y1+O+(f?d/2*P:0),Y=c.x1,X=c.x2;n.segpts=[Y,G,X,G]}else{var V=c.x1+O+(f?h/2*P:0),U=c.y1,j=c.y2;n.segpts=[V,U,V,j]}else if(I){var H=Math.abs(M)<=d/2,q=Math.abs(D)<=p/2;if(H){var W=(c.x1+c.x2)/2,$=c.y1,K=c.y2;n.segpts=[W,$,W,K]}else if(q){var Z=(c.y1+c.y2)/2,Q=c.x1,J=c.x2;n.segpts=[Q,Z,J,Z]}else n.segpts=[c.x1,c.y2]}else{var ee=Math.abs(M)<=h/2,te=Math.abs(C)<=g/2;if(ee){var ne=(c.y1+c.y2)/2,re=c.x1,ie=c.x2;n.segpts=[re,ne,ie,ne]}else if(te){var ae=(c.x1+c.x2)/2,oe=c.y1,se=c.y2;n.segpts=[ae,oe,ae,se]}else n.segpts=[c.x2,c.y1]}},eh.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=!_(n.startX)||!_(n.startY),d=!_(n.arrowStartX)||!_(n.arrowStartY),p=!_(n.endX)||!_(n.endY),g=!_(n.arrowEndX)||!_(n.arrowEndY),f=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth*3,v=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=v<f,m=En({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<f,x=!1;if(h||d||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),T={x:w.x/E,y:w.y/E},D=Math.max(a,o),C={x:n.ctrlpts[0]+2*T.x*D,y:n.ctrlpts[1]+2*T.y*D},N=u.intersectLine(r.x,r.y,a,o,C.x,C.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+T.x*(f-v),n.ctrlpts[1]=n.ctrlpts[1]+T.y*(f-v)):(n.ctrlpts[0]=N[0]+T.x*f,n.ctrlpts[1]=N[1]+T.y*f)}if(p||g||b){x=!0;var A={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},L=Math.sqrt(A.x*A.x+A.y*A.y),S={x:A.x/L,y:A.y/L},O=Math.max(a,o),I={x:n.ctrlpts[0]+2*S.x*O,y:n.ctrlpts[1]+2*S.y*O},k=c.intersectLine(i.x,i.y,s,l,I.x,I.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+S.x*(f-m),n.ctrlpts[1]=n.ctrlpts[1]+S.y*(f-m)):(n.ctrlpts[0]=k[0]+S.x*f,n.ctrlpts[1]=k[1]+S.y*f)}x&&this.findEndpoints(e)}},eh.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r,i;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,i=.5,t.midX=Dn(t.allpts[r],t.allpts[r+2],t.allpts[r+4],i),t.midY=Dn(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],i))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var a=t.segpts.length/2,o=a-2;t.midX=(t.segpts[o]+t.segpts[a])/2,t.midY=(t.segpts[o+1]+t.segpts[a+1])/2}else{var s=t.segpts.length/2-1;t.midX=t.segpts[s],t.midY=t.segpts[s+1]}},eh.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||_(t.startX)&&_(t.startY)&&_(t.endX)&&_(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Nt("Edge `"+e.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."))},eh.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new Yt,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new Yt,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var l=e[s],u=l._private,c=l.pstyle("curve-style").value;if(!l.removed()&&l.takesUpSpace())if("haystack"!==c){var h="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,d="unbundled-bezier"===c||"bezier"===c,p=u.source,g=u.target,f=[p.poolIndex(),g.poolIndex()].sort(),v=i.get(f);null==v&&(v={eles:[]},i.set(f,v),a.push(f)),v.eles.push(l),h&&(v.hasUnbundled=!0),d&&(v.hasBezier=!0)}else o.push(l)}for(var y=function(e){var o=a[e],s=i.get(o),l=void 0;if(!s.hasUnbundled){var u=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Rt(s.eles),u.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],h=c.source(),d=c.target();if(h.poolIndex()>d.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)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var T=s.eles[E],D=T[0]._private.rscratch,C=T.pstyle("curve-style").value,N="unbundled-bezier"===C||"segments"===C||"taxi"===C,A=!h.same(T.source());if(!s.calculatedIntersection&&h!==d&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var L=x.intersectLine(g.x,g.y,v,y,f.x,f.y,0),S=s.srcIntn=L,O=w.intersectLine(f.x,f.y,m,b,g.x,g.y,0),I=s.tgtIntn=O,k=s.intersectionPts={x1:L[0],x2:O[0],y1:L[1],y2:O[1]},M=s.posPts={x1:g.x,x2:f.x,y1:g.y,y2:f.y},P=O[1]-L[1],R=O[0]-L[0],B=Math.sqrt(R*R+P*P),F=s.vector={x:R,y:P},z=s.vectorNorm={x:F.x/B,y:F.y/B},G={x:-z.y,y:z.x};s.nodesOverlap=!_(B)||w.checkPoint(L[0],L[1],0,m,b,f.x,f.y)||x.checkPoint(O[0],O[1],0,v,y,g.x,g.y),s.vectorNormInverse=G,l={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:f,tgtPos:g,srcW:m,srcH:b,tgtW:v,tgtH:y,srcIntn:I,tgtIntn:S,srcShape:w,tgtShape:x,posPts:{x1:M.x2,y1:M.y2,x2:M.x1,y2:M.y1},intersectionPts:{x1:k.x2,y1:k.y2,x2:k.x1,y2:k.y1},vector:{x:-F.x,y:-F.y},vectorNorm:{x:-z.x,y:-z.y},vectorNormInverse:{x:-G.x,y:-G.y}}}var Y=A?l:s;D.nodesOverlap=Y.nodesOverlap,D.srcIntn=Y.srcIntn,D.tgtIntn=Y.tgtIntn,r&&(h.isParent()||h.isChild()||d.isParent()||d.isChild())&&(h.parents().anySame(d)||d.parents().anySame(h)||h.same(d)&&h.isParent())?t.findCompoundLoopPoints(T,Y,E,N):h===d?t.findLoopPoints(T,Y,E,N):"segments"===C?t.findSegmentsPoints(T,Y):"taxi"===C?t.findTaxiPoints(T,Y):"straight"===C||!N&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(T):t.findBezierPoints(T,Y,E,N,A),t.findEndpoints(T),t.tryToCorrectInvalidPoints(T,Y),t.checkForInvalidEdgeWarning(T),t.storeAllpts(T),t.storeEdgeProjections(T),t.calculateArrowAngles(T),t.recalculateEdgeLabelProjections(T),t.calculateLabelAngles(T)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},eh.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),th(t.segpts)},eh.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),th(t.ctrlpts)},eh.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var nh={manualEndptToPx:function(e,t){var n=this,r=e.position(),i=e.outerWidth(),a=e.outerHeight();if(2===t.value.length){var o=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(o[0]=o[0]*i),"%"===t.units[1]&&(o[1]=o[1]*a),o[0]+=r.x,o[1]+=r.y,o}var s=t.pfValue[0];s=-Math.PI/2+s;var l=2*Math.max(i,a),u=[r.x+Math.cos(s)*l,r.y+Math.sin(s)*l];return n.nodeShapes[this.getNodeShape(e)].intersectLine(r.x,r.y,i,a,u[0],u[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],l=e.target()[0],u=s.position(),c=l.position(),h=e.pstyle("target-arrow-shape").value,d=e.pstyle("source-arrow-shape").value,p=e.pstyle("target-distance-from-node").pfValue,g=e.pstyle("source-distance-from-node").pfValue,f=e.pstyle("curve-style").value,v=e._private.rscratch,y=v.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,T=b||x||w,D=m||"taxi"===f,C=e.pstyle("source-endpoint"),N=D?"outside-to-node":C.value,A=e.pstyle("target-endpoint"),L=D?"outside-to-node":A.value;if(v.srcManEndpt=C,v.tgtManEndpt=A,b){var S=[v.ctrlpts[0],v.ctrlpts[1]];n=x?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:S,r=S}else if(w){var O=E?v.segpts.slice(0,2):[c.x,c.y];n=E?v.segpts.slice(v.segpts.length-2):[u.x,u.y],r=O}if("inside-to-node"===L)t=[c.x,c.y];else if(A.units)t=this.manualEndptToPx(l,A);else if("outside-to-line"===L)t=v.tgtIntn;else if("outside-to-node"===L||"outside-to-node-or-label"===L?i=n:"outside-to-line"!==L&&"outside-to-line-or-label"!==L||(i=[u.x,u.y]),t=o.nodeShapes[this.getNodeShape(l)].intersectLine(c.x,c.y,l.outerWidth(),l.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===L||"outside-to-line-or-label"===L){var I=l._private.rscratch,k=I.labelWidth,M=I.labelHeight,P=I.labelX,R=I.labelY,B=k/2,F=M/2,z=l.pstyle("text-valign").value;"top"===z?R-=F:"bottom"===z&&(R+=F);var G=l.pstyle("text-halign").value;"left"===G?P-=B:"right"===G&&(P+=B);var Y=ir(i[0],i[1],[P-B,R-F,P+B,R-F,P+B,R+F,P-B,R+F],c.x,c.y);if(Y.length>0){var X=u,V=Tn(X,pn(t)),U=Tn(X,pn(Y)),j=V;U<V&&(t=Y,j=U),Y.length>2&&Tn(X,{x:Y[2],y:Y[3]})<j&&(t=[Y[2],Y[3]])}}var H=or(t,n,o.arrowShapes[h].spacing(e)+p),q=or(t,n,o.arrowShapes[h].gap(e)+p);if(v.endX=q[0],v.endY=q[1],v.arrowEndX=H[0],v.arrowEndY=H[1],"inside-to-node"===N)t=[u.x,u.y];else if(C.units)t=this.manualEndptToPx(s,C);else if("outside-to-line"===N)t=v.srcIntn;else if("outside-to-node"===N||"outside-to-node-or-label"===N?a=r:"outside-to-line"!==N&&"outside-to-line-or-label"!==N||(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),"outside-to-node-or-label"===N||"outside-to-line-or-label"===N){var W=s._private.rscratch,$=W.labelWidth,K=W.labelHeight,Z=W.labelX,Q=W.labelY,J=$/2,ee=K/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?Z-=J:"right"===ne&&(Z+=J);var re=ir(a[0],a[1],[Z-J,Q-ee,Z+J,Q-ee,Z+J,Q+ee,Z-J,Q+ee],u.x,u.y);if(re.length>0){var ie=c,ae=Tn(ie,pn(t)),oe=Tn(ie,pn(re)),se=ae;oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2&&Tn(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var le=or(t,r,o.arrowShapes[d].spacing(e)+g),ue=or(t,r,o.arrowShapes[d].gap(e)+g);v.startX=ue[0],v.startY=ue[1],v.arrowStartX=le[0],v.arrowStartY=le[1],T&&(_(v.startX)&&_(v.startY)&&_(v.endX)&&_(v.endY)?v.badLine=!1:v.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},rh={};function ih(e,t,n){for(var r=function(e,t,n,r){return Dn(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}rh.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ih(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},rh.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var ah={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!k(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),l=e.position(),u=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,h=i.rscratch,d=i.rstyle;switch(u){case"left":n=l.x-a/2-s;break;case"right":n=l.x+a/2+s;break;default:n=l.x}switch(c){case"top":r=l.y-o/2-s;break;case"bottom":r=l.y+o/2+s;break;default:r=l.y}h.labelX=n,h.labelY=r,d.labelX=n,d.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},oh=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},sh=function(e,t){var n=t.x-e.x,r=t.y-e.y;return oh(n,r)},lh=function(e,t,n,r){var i=An(0,r-.001,1),a=An(0,r+.001,1),o=Cn(e,t,n,i),s=Cn(e,t,n,a);return sh(o,s)};ah.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){zt(n.rscratch,e,t,r),zt(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=oh(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var l=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},l={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:l,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function h(e,t,n,r,i){var a=En(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var d=0;d<t.length;d++){var p=t[d],g=t[d-1];g&&(p.startDist=g.startDist+g.length),h(p,p.p0,u[d*c],0,i.bezierProjPcts[0]);for(var f=0;f<c-1;f++)h(p,u[d*c+f],u[d*c+f+1],i.bezierProjPcts[f],i.bezierProjPcts[f+1]);h(p,u[d*c+c-1],p.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},u=function(n){var i,s="source"===n;if(a[n]){var u=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,h=l(),d=0,p=0,g=0;g<h.length;g++){for(var f=h[s?g:h.length-1-g],v=0;v<f.segments.length;v++){var y=f.segments[s?v:f.segments.length-1-v],m=g===h.length-1&&v===f.segments.length-1;if(d=p,(p+=y.length)>=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,T=s?x.t0+E*w:x.t1-E*w;T=An(0,T,1),t=Cn(b.p0,b.p1,b.p2,T),i=lh(b.p0,b.p1,b.p2,T);break;case"straight":case"segments":case"haystack":for(var _,D,C,N,A=0,L=r.allpts.length,S=0;S+3<L&&(s?(C={x:r.allpts[S],y:r.allpts[S+1]},N={x:r.allpts[S+2],y:r.allpts[S+3]}):(C={x:r.allpts[L-2-S],y:r.allpts[L-1-S]},N={x:r.allpts[L-4-S],y:r.allpts[L-3-S]}),D=A,!((A+=_=En(C,N))>=u));S+=2);var O=(u-D)/_;O=An(0,O,1),t=Nn(C,N,O),i=sh(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},ah.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},ah.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=Ft(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;zt(n.rstyle,"labelWidth",t,h),zt(n.rscratch,"labelWidth",t,h),zt(n.rstyle,"labelHeight",t,d),zt(n.rscratch,"labelHeight",t,d),zt(n.rscratch,"labelLineHeight",t,c)},ah.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?(zt(n.rscratch,e,t,r),r):Ft(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="\u200b",c=i.split("\n"),h=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],g=/[\s\u200b]+/,f=d?"":" ",v=0;v<c.length;v++){var y=c[v],m=this.calculateLabelDimensions(e,y).width;if(d){var b=y.split("").join(u);y=b}if(m>h){for(var x=y.split(g),w="",E=0;E<x.length;E++){var T=x[E],_=0===w.length?T:w+f+T;this.calculateLabelDimensions(e,_).width<=h?w+=T+f:(w&&p.push(w),w=T+f)}w.match(/^[\s\u200b]+$/)||p.push(w)}else p.push(y)}o("labelWrapCachedLines",p),i=o("labelWrapCachedText",p.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var D=e.pstyle("text-max-width").pfValue,C="",N="\u2026",A=!1;if(this.calculateLabelDimensions(e,i).width<D)return i;for(var L=0;L<i.length&&!(this.calculateLabelDimensions(e,C+i[L]+N).width>D);L++)C+=i[L],L===i.length-1&&(A=!0);return A||(C+=N),C}return i},ah.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"}},ah.calculateLabelDimensions=function(e,t){var n=this,r=gt(t,e._private.labelDimsKey),i=n.labelDimCache||(n.labelDimCache=[]),a=i[r];if(null!=a)return a;var o=0,s=e.pstyle("font-style").strValue,l=e.pstyle("font-size").pfValue,u=e.pstyle("font-family").strValue,c=e.pstyle("font-weight").strValue,h=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!h){h=this.labelCalcCanvas=document.createElement("canvas"),d=this.labelCalcCanvasContext=h.getContext("2d");var p=h.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(c," ").concat(l,"px ").concat(u);for(var g=0,f=0,v=t.split("\n"),y=0;y<v.length;y++){var m=v[y],b=d.measureText(m),x=Math.ceil(b.width),w=l;g=Math.max(x,g),f+=w}return g+=o,f+=o,i[r]={width:g,height:f}},ah.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},ah.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var uh={},ch=28,hh=!1;uh.getNodeShape=function(e){var t=this,n=e.pstyle("shape").value;if("cutrectangle"===n&&(e.width()<ch||e.height()<ch))return hh||(Nt("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),hh=!0),"rectangle";if(e.isParent())return"rectangle"===n||"roundrectangle"===n||"round-rectangle"===n||"cutrectangle"===n||"cut-rectangle"===n||"barrel"===n?n:"rectangle";if("polygon"===n){var r=e.pstyle("shape-polygon-points").value;return t.nodeShapes.makePolygon(r).name}return n};var dh={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r]._private.rstyle;i.clean=!1,i.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],l=s._private.rstyle;s.isNode()&&!l.cleanConnected&&(r(s.connectedEdges()),l.cleanConnected=!0)}if(a)for(var u=0;u<a.length;u++)(0,a[u])(i,t);n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,l=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(l.clean=!1),t&&l.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),l.clean=!0)}for(var u=0;u<i.length;u++){var c=i[u],h=c._private.rstyle,d=c.position();this.recalculateNodeLabelProjection(c),h.nodeX=d.x,h.nodeY=d.y,h.nodeW=c.pstyle("width").pfValue,h.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var p=0;p<r.length;p++){var g=r[p]._private,f=g.rstyle,v=g.rscratch;f.srcX=v.arrowStartX,f.srcY=v.arrowStartY,f.tgtX=v.arrowEndX,f.tgtY=v.arrowEndY,f.midX=v.midX,f.midY=v.midY,f.labelAngle=v.labelAngle,f.sourceLabelAngle=v.sourceLabelAngle,f.targetLabelAngle=v.targetLabelAngle}}}},ph={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Wl),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},gh={};[Qc,Jc,eh,nh,rh,ah,uh,dh,ph].forEach((function(e){Q(gh,e)}));var fh={getCachedImage:function(e,t,n){var r=this,i=r.imageCache=r.imageCache||{},a=i[e];if(a)return a.image.complete||a.image.addEventListener("load",n),a.image;var o=(a=i[e]=i[e]||{}).image=new Image;o.addEventListener("load",n),o.addEventListener("error",(function(){o.error=!0}));var s="data:";return e.substring(0,s.length).toLowerCase()===s||(t="null"===t?null:t,o.crossOrigin=t),o.src=e,o}},vh={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)},binder:function(e){var t=this,n=t.cy.window(),r=e===n||e===n.document||e===n.document.body||M(e);if(null==t.supportsPassiveEvents){var i=!1;try{var a=Object.defineProperty({},"passive",{get:function(){return i=!0,!0}});n.addEventListener("test",null,a)}catch(s){}t.supportsPassiveEvents=i}var o=function(n,i,a){var o=Array.prototype.slice.call(arguments);return r&&t.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),t.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:o,addEventListener:o,addListener:o,bind:o}},nodeIsDraggable:function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},nodeIsGrabbable:function(e){return this.nodeIsDraggable(e)&&e.interactive()},load:function(){var e=this,t=e.cy.window(),n=function(e){return e.selected()},r=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},i=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable()){for(var i=0;n&&i<n.length;i++)if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},o=function(e){e[0]._private.grabbed=!0},s=function(e){e[0]._private.grabbed=!1},l=function(e){e[0]._private.rscratch.inDragLayer=!0},u=function(e){e[0]._private.rscratch.inDragLayer=!1},c=function(e){e[0]._private.rscratch.isGrabTarget=!0},h=function(e){e[0]._private.rscratch.isGrabTarget=!1},d=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),o(e))},p=function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(l),n.connectedEdges().forEach(l)),t.addToList&&d(n,t)}},g=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(l),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(l)),n.addToList&&t.forEach((function(e){d(e,n)})),p(t,n),y(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},f=g,v=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){s(e),u(e),h(e)})),e.updateCachedGrabbedEles())},y=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(l),r.forEach(l)),t.addToList&&r.forEach((function(e){d(e,t)}))}}},m=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},b="undefined"!=typeof MutationObserver,x="undefined"!=typeof ResizeObserver;b?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++)if(r[i]===e.container){e.destroy();break}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var w=Qe((function(){e.cy.resize()}),100);b&&(e.styleObserver=new MutationObserver(w),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(t,"resize",w),x&&(e.resizeObserver=new ResizeObserver(w),e.resizeObserver.observe(e.container));var E=function(e,t){for(;null!=e;)t(e),e=e.parentNode},T=function(){e.invalidateContainerClientCoordsCache()};E(e.container,(function(t){e.registerBinding(t,"transitionend",T),e.registerBinding(t,"animationend",T),e.registerBinding(t,"scroll",T)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var D,C,N,A=function(){return 0!==e.selection[4]},L=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],l=!1,u=0;u<s.length;u++){var c=s[u];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){l=!0;break}}if(!l)return!1;for(var h=e.container,d=t.target.parentNode,p=!1;d;){if(d===h){p=!0;break}d=d.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(t){if(L(t)){t.preventDefault(),m(),e.hoverData.capture=!0,e.hoverData.which=t.which;var n=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,s=e.findNearestElements(a[0],a[1],!0,!1),l=s[0],u=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;var h=function(){e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var r=e.hoverData.down;r?r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)};if(3==t.which){e.hoverData.cxtStarted=!0;var d={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};l?(l.activate(),l.emit(d),e.hoverData.down=l):n.emit(d),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(l&&l.activate(),null!=l&&e.nodeIsGrabbable(l)){var p=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}},v=function(e){e.emit(p("grab"))};if(c(l),l.selected()){u=e.dragData.possibleDragElements=n.collection();var y=n.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));g(y,{addToList:u}),l.emit(p("grabon")),y.forEach(v)}else u=e.dragData.possibleDragElements=n.collection(),f(l,{addToList:u}),l.emit(p("grabon")).emit(p("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=l,e.hoverData.downs=s,e.hoverData.downTime=(new Date).getTime(),r(l,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==l?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):l.pannable()&&(o[4]=1),h()}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(t,"mousemove",(function(t){if(e.hoverData.capture||L(t)){var n=!1,o=e.cy,s=o.zoom(),l=[t.clientX,t.clientY],u=e.projectIntoViewport(l[0],l[1]),c=e.hoverData.mdownPos,h=e.hoverData.mdownGPos,d=e.selection,p=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(p=e.findNearestElement(u[0],u[1],!0,!1));var f,y=e.hoverData.last,m=e.hoverData.down,b=[u[0]-d[2],u[1]-d[3]],x=e.dragData.possibleDragElements;if(h){var w=l[0]-h[0],E=w*w,T=l[1]-h[1],D=E+T*T;e.hoverData.isOverThresholdDrag=f=D>=e.desktopTapThreshold2}var C=i(t);f&&(e.hoverData.tapholdCancelled=!0);var N=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,r(p,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var A=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),d[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(f){var S={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(S):o.emit(S),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&p===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=p,p&&p.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var O;if(e.hoverData.justStartedPan){var I=e.hoverData.mdownPos;O={x:(u[0]-I[0])*s,y:(u[1]-I[1])*s},e.hoverData.justStartedPan=!1}else O={x:b[0]*s,y:b[1]*s};o.panBy(O),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=d[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||p==y||(y&&r(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),p&&r(p,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=p),m)if(f){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(v(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 k=!e.dragData.didDrag;k&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||g(x,{inDragLayer:!0});var M={x:0,y:0};if(_(b[0])&&_(b[1])&&(M.x+=b[0],M.y+=b[1],k)){var P=e.hoverData.dragDelta;P&&_(P[0])&&_(P[1])&&(M.x+=P[0],M.y+=P[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else N();n=!0}else f&&(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()?!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()&&a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,d[4]=0,e.data.bgActivePosistion=pn(c),e.redrawHint("select",!0),e.redraw()):A(),m&&m.pannable()&&m.active()&&m.unactivate());return d[2]=u[0],d[3]=u[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,h=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 d={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(d):a.emit(d),!e.hoverData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(p):a.emit(p)}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]}),C=!1,t.timeStamp-N<=a.multiClickDebounceTime()?(D&&clearTimeout(D),C=!0,N=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(D=setTimeout((function(){C||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),N=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()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var f=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(n).unmerge(g).unselect(),g.emit("box").stdFilter(f).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();v(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 S,O,I,k,M,P,R,B,F,z,G,Y,X,V=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||A())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",V,!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||V(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 U,j,H,q,W,$,K,Z=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},Q=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",U=function(t){if(e.hasTouchStarted=!0,L(t)){m(),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]),t.touches[2]&&(o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),i[4]=o[0],i[5]=o[1]),t.touches[1]){e.touchData.singleTouchMoved=!0,v(e.dragData.touchDragEles);var s=e.findContainerClientCoords();F=s[0],z=s[1],G=s[2],Y=s[3],S=t.touches[0].clientX-F,O=t.touches[0].clientY-z,I=t.touches[1].clientX-F,k=t.touches[1].clientY-z,X=0<=S&&S<=G&&0<=I&&I<=G&&0<=O&&O<=Y&&0<=k&&k<=Y;var l=n.pan(),u=n.zoom();M=Z(S,O,I,k),P=Q(S,O,I,k),B=[((R=[(S+I)/2,(O+k)/2])[0]-l.x)/u,(R[1]-l.y)/u];var h=200;if(P<h*h&&!t.touches[2]){var d=e.findNearestElement(i[0],i[1],!0,!0),p=e.findNearestElement(i[2],i[3],!0,!0);return d&&d.isNode()?(d.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=d):p&&p.isNode()?(p.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=p):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),b=y[0];if(null!=b&&(b.activate(),e.touchData.start=b,e.touchData.starts=y,e.nodeIsGrabbable(b))){var x=e.dragData.touchDragEles=n.collection(),w=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),b.selected()?(w=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),g(w,{addToList:x})):f(b,{addToList:x}),c(b);var E=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};b.emit(E("grabon")),w?w.forEach((function(e){e.emit(E("grab"))})):b.emit(E("grab"))}r(b,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==b&&(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 T=e.touchData.startPosition=[null,null,null,null,null,null],_=0;_<i.length;_++)T[_]=a[_]=i[_];var D=t.touches[0];e.touchData.startGPosition=[D.clientX,D.clientY]}}},!1),e.registerBinding(window,"touchmove",j=function(t){var n=e.touchData.capture;if(n||L(t)){var i=e.selection,o=e.cy,s=e.touchData.now,l=e.touchData.earlier,u=o.zoom();if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=c[0],s[1]=c[1]}t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1]);var h,d=e.touchData.startGPosition;if(n&&t.touches[0]&&d){for(var p=[],f=0;f<s.length;f++)p[f]=s[f]-l[f];var y=t.touches[0].clientX-d[0],m=y*y,b=t.touches[0].clientY-d[1];h=m+b*b>=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-F,w=t.touches[0].clientY-z,E=t.touches[1].clientX-F,T=t.touches[1].clientY-z,D=Q(x,w,E,T),C=150,N=1.5;if(D/P>=N*N||D>=C*C){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var A={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(A),e.touchData.start=null):o.emit(A)}}if(n&&e.touchData.cxt){A={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(A):o.emit(A),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var R=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&R===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=R,R&&R.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),ne=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var G=0;G<ne.length;G++){var Y=ne[G]._private;Y.grabbed=!1,Y.rscratch.inDragLayer=!1}}var V=e.touchData.start,U=(x=t.touches[0].clientX-F,w=t.touches[0].clientY-z,E=t.touches[1].clientX-F,T=t.touches[1].clientY-z,Z(x,w,E,T)),j=U/M;if(X){var H=(x-S+(E-I))/2,q=(w-O+(T-k))/2,W=o.zoom(),$=W*j,K=o.pan(),J=B[0]*W+K.x,ee=B[1]*W+K.y,te={x:-$/W*(J-K.x-H)+J,y:-$/W*(ee-K.y-q)+ee};if(V&&V.active()){var ne=e.dragData.touchDragEles;v(ne),e.redrawHint("drag",!0),e.redrawHint("eles",!0),V.unactivate().emit("freeon"),ne.emit("free"),e.dragData.didDrag&&(V.emit("dragfreeon"),ne.emit("dragfree"))}o.viewport({zoom:$,pan:te,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),M=U,S=x,O=w,I=E,k=T,e.pinching=!0}t.touches[0]&&(c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1]),t.touches[1]&&(c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),s[2]=c[0],s[3]=c[1]),t.touches[2]&&(c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),s[4]=c[0],s[5]=c[1])}else if(t.touches[0]&&!e.touchData.didSelect){var re=e.touchData.start,ie=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(R=e.findNearestElement(s[0],s[1],!0,!0)),n&&null!=re&&t.preventDefault(),n&&null!=re&&e.nodeIsDraggable(re))if(h){ne=e.dragData.touchDragEles;var ae=!e.dragData.didDrag;ae&&g(ne,{inDragLayer:!0}),e.dragData.didDrag=!0;var oe={x:0,y:0};_(p[0])&&_(p[1])&&(oe.x+=p[0],oe.y+=p[1],ae&&(e.redrawHint("eles",!0),(se=e.touchData.dragDelta)&&_(se[0])&&_(se[1])&&(oe.x+=se[0],oe.y+=se[1]))),e.hoverData.draggingEles=!0,ne.silentShift(oe).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==l[0]&&e.touchData.startPosition[1]==l[1]&&e.redrawHint("eles",!0),e.redraw()}else{var se;0===(se=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(se.push(p[0]),se.push(p[1])):(se[0]+=p[0],se[1]+=p[1])}if(r(re||R,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),re&&re.grabbed()||R==ie||(ie&&ie.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),R&&R.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=R,n)for(G=0;G<s.length;G++)s[G]&&e.touchData.startPosition[G]&&h&&(e.touchData.singleTouchMoved=!0);n&&(null==re||re.pannable())&&o.panningEnabled()&&o.userPanningEnabled()&&(a(re,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=pn(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:p[0]*u,y:p[1]*u}),o.emit("dragpan")):h&&(e.swipePanning=!0,o.panBy({x:y*u,y:b*u}),o.emit("dragpan"),re&&(re.unactivate(),e.redrawHint("select",!0),e.touchData.start=null))),c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY),s[0]=c[0],s[1]=c[1])}for(f=0;f<s.length;f++)l[f]=s[f];n&&t.touches.length>0&&!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",H=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",q=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 h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(t.touches[1]&&(h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY),u[2]=h[0],u[3]=h[1]),t.touches[2]&&(h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY),u[4]=h[0],u[5]=h[1]),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 d={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(d):s.emit(d)}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 p=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]}});var g=function(e){return e.selectable()&&!e.selected()};p.emit("box").stdFilter(g).select().emit("boxselect"),p.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 y=i._private.grabbed;v(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(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 m=e.findNearestElement(u[0],u[1],!0,!0);r(m,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var b=e.touchData.startPosition[0]-u[0],x=b*b,w=e.touchData.startPosition[1]-u[1],E=(x+w*w)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),W=!1,t.timeStamp-K<=s.multiClickDebounceTime()?($&&clearTimeout($),W=!0,K=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):($=setTimeout((function(){W||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),K=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&E<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(n).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var T=0;T<u.length;T++)c[T]=u[T];e.dragData.didDrag=!1,0===t.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=[null,null,null,null,null,null],e.touchData.startGPosition=null,e.touchData.didSelect=!1),t.touches.length<2&&(1===t.touches.length&&(e.touchData.startGPosition=[t.touches[0].clientX,t.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var J=[],ee=function(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}},te=function(e){return{event:e,touch:ee(e)}},ne=function(e){J.push(te(e))},re=function(e){for(var t=0;t<J.length;t++)if(J[t].event.pointerId===e.pointerId)return void J.splice(t,1)},ie=function(e){var t=J.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=ee(e)},ae=function(e){e.touches=J.map((function(e){return e.touch}))},oe=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){oe(e)||(e.preventDefault(),ne(e),ae(e),U(e))})),e.registerBinding(e.container,"pointerup",(function(e){oe(e)||(re(e),ae(e),q(e))})),e.registerBinding(e.container,"pointercancel",(function(e){oe(e)||(re(e),ae(e),H(e))})),e.registerBinding(e.container,"pointermove",(function(e){oe(e)||(e.preventDefault(),ie(e),ae(e),j(e))}))}}},yh={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ir(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return $n(e,t,this.points,a,o,r,i,[0,-1],n)}}},generateEllipse:function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Jn(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return er(e,t,r,i,a,o,n)}}},generateRoundPolygon:function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],l=Math.sqrt(o*o+s*s);n[4*r+2]=o/l,n[4*r+3]=s/l}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return ar(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return Kn(e,t,this.points,a,o,r,i)}}},generateRoundRectangle:function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;return!!($n(e,t,this.points,a,o,r,i-l,[0,-1],n)||$n(e,t,this.points,a,o,r-l,i,[0,-1],n)||er(e,t,l,l,a-r/2+s,o-i/2+s,n)||er(e,t,l,l,a+r/2-s,o-i/2+s,n)||er(e,t,l,l,a+r/2-s,o+i/2-s,n)||er(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},generateCutRectangle:function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:dr(),points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,l=n+o,u=r-a,c=r+a;return{topLeft:[s,u+i,s+i,u,s+i,u+i],topRight:[l-i,u,l,u+i,l-i,u+i],bottomRight:[l,c-i,l-i,c,l-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),l=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return ir(i,a,l,e,t)},checkPoint:function(e,t,n,r,i,a,o){if($n(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Wn(e,t,s.topLeft)||Wn(e,t,s.topRight)||Wn(e,t,s.bottomRight)||Wn(e,t,s.bottomLeft)}}},generateBarrel:function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=.15,l=.5,u=.85,c=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),h=function(e){var t=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},s),n=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},l),r=Cn({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},u);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},d=[].concat(h(c.topLeft),h(c.topRight),h(c.bottomRight),h(c.bottomLeft));return ir(i,a,d,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,l=r-i,u=r+i,c=gr(e,t),h=c.heightOffset,d=c.widthOffset,p=c.ctrlPtOffsetPct*e,g={topLeft:[o,l+h,o+p,l,o+d,l],topRight:[s-d,l,s-p,l,s,l+h],bottomRight:[s,u-h,s-p,u,s-d,u],bottomLeft:[o+d,u,o+p,u,o,u-h]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,r,i,a,o){var s=gr(r,i),l=s.heightOffset,u=s.widthOffset;if($n(e,t,this.points,a,o,r,i-2*l,[0,-1],n))return!0;if($n(e,t,this.points,a,o,r-2*u,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),h=function(e,t,n){var r=n[4],i=n[2],a=n[0],o=n[5],s=n[1],l=Math.min(r,a),u=Math.max(r,a),c=Math.min(o,s),h=Math.max(o,s);if(l<=e&&e<=u&&c<=t&&t<=h){var d=pr(r,i,a),p=Un(d[0],d[1],d[2],e).filter((function(e){return 0<=e&&e<=1}));if(p.length>0)return p[0]}return null},d=Object.keys(c),p=0;p<d.length;p++){var g=c[d[p]],f=h(e,t,g);if(null!=f){var v=g[5],y=g[3],m=g[1],b=Dn(v,y,m,f);if(g.isTop&&b<=t)return!0;if(g.isBottom&&t<=b)return!0}}return!1}}},generateBottomRoundrectangle:function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:sr(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),l=rr(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return l.length>0?l:Yn(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=cr(r,i),l=2*s;if($n(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if($n(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!!Wn(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||!!er(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!er(e,t,l,l,a-r/2+s,o+i/2-s,n)}}},registerNodeShapes:function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",sr(3,0)),this.generateRoundPolygon("round-triangle",sr(3,0)),this.generatePolygon("rectangle",sr(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",sr(5,0)),this.generateRoundPolygon("round-pentagon",sr(5,0)),this.generatePolygon("hexagon",sr(6,0)),this.generateRoundPolygon("round-hexagon",sr(6,0)),this.generatePolygon("heptagon",sr(7,0)),this.generateRoundPolygon("round-heptagon",sr(7,0)),this.generatePolygon("octagon",sr(8,0)),this.generateRoundPolygon("round-octagon",sr(8,0));var r=new Array(20),i=ur(5,0),a=ur(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=lr(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",l),this.generateRoundPolygon("round-tag",l),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}}},mh={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||kt();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&Dt("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},bh=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};mh.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;var n=function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){bh(e,!0,r);var i=rt();e.render(e.renderOptions);var a=e.lastDrawTime=rt();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else bh(e,!1,r);e.skipFrame=!1,nt(n)}};nt(n)}};var xh=function(e){this.init(e)},wh=xh.prototype;wh.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],wh.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container(),r=t.cy.window();if(r){var i=r.document,a=i.head,o="__________cytoscape_stylesheet",s="__________cytoscape_container",l=null!=i.getElementById(o);if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!l){var u=i.createElement("style");u.id=o,u.textContent="."+s+" { position: relative; }",a.insertBefore(u,a.children[0])}"static"===r.getComputedStyle(n).getPropertyValue("position")&&Nt("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=_(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},wh.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},wh.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},wh.isHeadless=function(){return!1},[Zc,gh,fh,vh,yh,mh].forEach((function(e){Q(wh,e)}));var Eh=1e3/60,Th={setupDequeueing:function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=Qe((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=function(i,a){var o=rt(),s=n.averageRedrawTime,l=n.lastRedrawTime,u=[],c=n.cy.extent(),h=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var d=rt(),p=d-o,g=d-a;if(l<Eh){var f=Eh-(i?s:0);if(g>=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Eh)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y<v.length;y++)u.push(v[y])}u.length>0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())},a=e.priority||_t;n.beforeRender(i,a(t))}}}},_h=function(){function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Et;t(this,e),this.idsByKey=new Yt,this.keyForId=new Yt,this.cachesByLvl=new Yt,this.lvls=[],this.getKey=n,this.doesEleInvalidateKey=r}return i(e,[{key:"getIdsFor",value:function(e){null==e&&Dt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ut,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 Yt,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}(),Dh=25,Ch=50,Nh=-4,Ah=3,Lh=7.99,Sh=8,Oh=1024,Ih=1024,kh=1024,Mh=.2,Ph=.8,Rh=10,Bh=.15,Fh=.1,zh=.9,Gh=.9,Yh=100,Xh=1,Vh={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Uh=Mt({getKey:null,doesEleInvalidateKey:Et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:wt,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),jh=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=Uh(t);Q(n,r),n.lookup=new _h(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Hh=jh.prototype;Hh.reasons=Vh,Hh.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Hh.getRetiredTextureQueue=function(e){var t=this,n=t.eleImgCaches.retired=t.eleImgCaches.retired||{};return n[e]=n[e]||[]},Hh.getElementQueue=function(){var e=this;return e.eleCacheQueue=e.eleCacheQueue||new $t((function(e,t){return t.reqs-e.reqs}))},Hh.getElementKeyToQueue=function(){var e=this;return e.eleKeyToCacheQueue=e.eleKeyToCacheQueue||{}},Hh.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(xn(s*n))),r<Nh)r=Nh;else if(s>=Lh||r>Ah)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<=Dh?Dh:c<=Ch?Ch:Math.ceil(c/Ch)*Ch,c>kh||h>Ih)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.usedWidth<h&&(v=y());for(var m,b=function(e){return e&&e.scaledLabelShown===d},x=i&&i===Vh.dequeue,w=i&&i===Vh.highQuality,E=i&&i===Vh.downscale,T=r+1;T<=Ah;T++){var _=l.get(e,T);if(_){m=_;break}}var D=m&&m.level===r+1?m:null,C=function(){v.context.drawImage(D.texture.canvas,D.x,0,D.width,D.height,v.usedWidth,0,h,c)};if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,h,p),b(D))C();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var N=m.level;N>r;N--)D=a.getElement(e,t,n,N,Vh.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=Nh;L--){var S=l.get(e,L);if(S){A=S;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+Sh),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},Hh.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},Hh.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=Nh;i<=Ah;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],l=s.texture;l.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(l)}t.removeFromQueue(e)}},Hh.checkTextureUtility=function(e){e.invalidatedWidth>=Mh*e.width&&this.retireTexture(e)},Hh.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>Ph&&e.fullnessChecks>=Rh?Pt(t,e):e.fullnessChecks++},Hh.retireTexture=function(e){var t=this,n=e.height,r=t.getTextureQueue(n),i=this.lookup;Pt(r,e),e.retired=!0;for(var a=e.eleCaches,o=0;o<a.length;o++){var s=a[o];i.deleteCache(s.key,s.level)}Rt(a),t.getRetiredTextureQueue(n).push(e)},Hh.addTexture=function(e,t){var n=this,r={};return n.getTextureQueue(e).push(r),r.eleCaches=[],r.height=e,r.width=Math.max(Oh,t),r.usedWidth=0,r.invalidatedWidth=0,r.fullnessChecks=0,r.canvas=n.renderer.makeOffscreenCanvas(r.width,r.height),r.context=r.canvas.getContext("2d"),r},Hh.recycleTexture=function(e,t){for(var n=this,r=n.getTextureQueue(e),i=n.getRetiredTextureQueue(e),a=0;a<i.length;a++){var o=i[a];if(o.width>=t)return o.retired=!1,o.usedWidth=0,o.invalidatedWidth=0,o.fullnessChecks=0,Rt(o.eleCaches),o.context.setTransform(1,0,0,1,0,0),o.context.clearRect(0,0,o.width,o.height),Pt(i,o),r.push(o),o}},Hh.queueElement=function(e,t){var n=this,r=n.getElementQueue(),i=n.getElementKeyToQueue(),a=this.getKey(e),o=i[a];if(o)o.level=Math.max(o.level,t),o.eles.merge(e),o.reqs++,r.updateItem(o);else{var s={eles:e.spawn().merge(e),level:t,reqs:1,key:a};r.push(s),i[a]=s}},Hh.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<Xh&&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,Vh.dequeue)}}return i},Hh.removeFromQueue=function(e){var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=this.getKey(e),a=r[i];null!=a&&(1===a.eles.length?(a.reqs=xt,n.updateItem(a),n.pop(),r[i]=null):a.eles.unmerge(e))},Hh.onDequeue=function(e){this.onDequeues.push(e)},Hh.offDequeue=function(e){Pt(this.onDequeues,e)},Hh.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Yh,deqCost:Bh,deqAvgCost:Fh,deqNoDrawCost:zh,deqFastCost:Gh,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++)(0,e.onDequeues[n])(t)},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(Bn(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var qh=1,Wh=-4,$h=2,Kh=3.99,Zh=50,Qh=50,Jh=.15,ed=.1,td=.9,nd=.9,rd=1,id=250,ad=16e6,od=!0,sd=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=rt()-2*id,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=Qe((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),Qh),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=id?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);var i=function(e,t){return t.reqs-e.reqs};t.layersQueue=new $t(i),t.setupDequeueing()},ld=sd.prototype,ud=0,cd=Math.pow(2,53)-1;ld.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:ud=++ud%cd,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(n,n),s.translate(l,u),o},ld.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(xn(i*t)))<Wh)n=Wh;else if(i>=Kh||n>$h)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[],h=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;Wh<=r&&r<=$h&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Pt(c,o)}};if(r.levelIsComplete(n,e))return c;h();var d=function(){if(!o){o=Ln();for(var t=0;t<e.length;t++)In(o,e[t].boundingBox())}return o},p=function(e){var t=(e=e||{}).after;if(d(),o.w*u*(o.h*u)>ad)return null;var i=r.makeLayer(o,n);if(null!=t){var a=c.indexOf(t)+1;c.splice(a,0,i)}else(void 0===e.insert||e.insert)&&c.unshift(i);return i};if(r.skipping&&!a)return null;for(var g=null,f=e.length/qh,v=!a,y=0;y<e.length;y++){var m=e[y],b=m._private.rscratch,x=b.imgLayerCaches=b.imgLayerCaches||{},w=x[n];if(w)g=w;else{if((!g||g.eles.length>=f||!Gn(g.bb,m.boundingBox()))&&!(g=p({insert:!0,after:g})))return null;s||v?r.queueLayer(g,m):r.drawEleInLayer(g,m,n,t),g.eles.push(m),x[n]=g}}return s||(v?null:c)},ld.getEleLevelForLayerLevel=function(e,t){return e},ld.drawEleInLayer=function(e,t,n,r){var i=this,a=this.renderer,o=e.context,s=t.boundingBox();0!==s.w&&0!==s.h&&t.visible()&&(n=i.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(o,!1),a.drawCachedElement(o,t,null,null,n,od),a.setImgSmoothing(o,!0))},ld.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},ld.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},ld.updateElementsInLayers=function(e,t){for(var n=this,r=A(e[0]),i=0;i<e.length;i++)for(var a=r?null:e[i],o=r?e[i]:e[i].ele,s=o._private.rscratch,l=s.imgLayerCaches=s.imgLayerCaches||{},u=Wh;u<=$h;u++){var c=l[u];c&&(a&&n.getEleLevelForLayerLevel(c.level)!==a.level||t(c,o,a))}},ld.haveLayers=function(){for(var e=this,t=!1,n=Wh;n<=$h;n++){var r=e.layersByLevel[n];if(r&&r.length>0){t=!0;break}}return t},ld.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=rt(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},ld.invalidateLayer=function(e){if(this.lastInvalidationTime=rt(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Pt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},ld.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},ld.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},ld.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},ld.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<rd&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},ld.applyLayerReplacement=function(e){var t=this,n=t.layersByLevel[e.level],r=e.replaces,i=n.indexOf(r);if(!(i<0||r.invalid)){n[i]=e;for(var a=0;a<e.eles.length;a++){var o=e.eles[a]._private,s=o.imgLayerCaches=o.imgLayerCaches||{};s&&(s[e.level]=e)}t.requestRedraw()}},ld.requestRedraw=Qe((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),ld.setupDequeueing=Th.setupDequeueing({deqRedrawThreshold:Zh,deqCost:Jh,deqAvgCost:ed,deqNoDrawCost:td,deqFastCost:nd,deq:function(e,t){return e.dequeue(t)},onDeqd:_t,shouldRedraw:wt,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var hd,dd={};function pd(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function gd(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function fd(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];for(e.moveTo(s.x,s.y),i=1;i<o.length;i++)a=o[i],e.lineTo(a.x,a.y);e.closePath&&e.closePath()}function vd(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var l=a[s];e.lineTo(l.x,l.y)}e.closePath&&e.closePath()}function yd(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}dd.arrowShapeImpl=function(e){return(hd||(hd={polygon:pd,"triangle-backcurve":gd,"triangle-tee":fd,"circle-triangle":vd,"triangle-cross":fd,circle:yd}))[e]};var md={drawElement:function(e,t,n,r,i,a){var o=this;t.isNode()?o.drawNode(e,t,n,r,i,a):o.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){var n=this;t.isNode()?n.drawNodeOverlay(e,t):n.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){var n=this;t.isNode()?n.drawNodeUnderlay(e,t):n.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var l=this,u=n.getBoundingBox(t);if(0!==u.w&&0!==u.h){var c=n.getElement(t,u,r,i,a);if(null!=c){var h=s(l,t);if(0===h)return;var d,p,g,f,v,y,m=o(l,t),b=u.x1,x=u.y1,w=u.w,E=u.h;if(0!==m){var T=n.getRotationPoint(t);g=T.x,f=T.y,e.translate(g,f),e.rotate(m),(v=l.getImgSmoothing(e))||l.setImgSmoothing(e,!0);var _=n.getRotationOffset(t);d=_.x,p=_.y}else d=b,p=x;1!==h&&(y=e.globalAlpha,e.globalAlpha=y*h),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,d,p,w,E),1!==h&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-g,-f),v||l.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},bd=function(){return 0},xd=function(e,t){return e.getTextAngle(t,null)},wd=function(e,t){return e.getTextAngle(t,"source")},Ed=function(e,t){return e.getTextAngle(t,"target")},Td=function(e,t){return t.effectiveOpacity()},_d=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};md.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,l=s.eleTxrCache,u=s.lblTxrCache,c=s.slbTxrCache,h=s.tlbTxrCache,d=t.boundingBox(),p=!0===a?l.reasons.highQuality:null;if(0!==d.w&&0!==d.h&&t.visible()&&(!r||Bn(d,r))){var g=t.isEdge(),f=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,l,n,i,p,bd,Td),g&&f||o.drawCachedElementPortion(e,t,u,n,i,p,xd,_d),g&&!f&&(o.drawCachedElementPortion(e,t,c,n,i,p,wd,_d),o.drawCachedElementPortion(e,t,h,n,i,p,Ed,_d)),o.drawElementOverlay(e,t)}},md.drawElements=function(e,t){for(var n=this,r=0;r<t.length;r++){var i=t[r];n.drawElement(e,i)}},md.drawCachedElements=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];i.drawCachedElement(e,o,n,r)}},md.drawCachedNodes=function(e,t,n,r){for(var i=this,a=0;a<t.length;a++){var o=t[a];o.isNode()&&i.drawCachedElement(e,o,n,r)}},md.drawLayeredElements=function(e,t,n,r){var i=this,a=i.data.lyrTxrCache.getLayers(t,n);if(a)for(var o=0;o<a.length;o++){var s=a[o],l=s.bb;0!==l.w&&0!==l.h&&e.drawImage(s.canvas,l.x1,l.y1,l.w,l.h)}else i.drawCachedElements(e,t,n,r)};var Dd={drawEdge: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=!(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(){i&&o.drawEdgeOverlay(e,t)},b=function(){i&&o.drawEdgeUnderlay(e,t)},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)},w=function(){o.drawElementText(e,t,null,r)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var E=t.pstyle("ghost-offset-x").pfValue,T=t.pstyle("ghost-offset-y").pfValue,_=t.pstyle("ghost-opacity").value,D=f*_;e.translate(E,T),y(D),x(D),e.translate(-E,-T)}b(),y(),x(),m(),w(),n&&e.translate(l.x1,l.y1)}}},Cd=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")}}}};Dd.drawEdgeOverlay=Cd("overlay"),Dd.drawEdgeUnderlay=Cd("underlay"),Dd.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,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;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 d=2;d+3<n.length;d+=4)t.quadraticCurveTo(n[d],n[d+1],n[d+2],n[d+3]);break;case"straight":case"segments":case"haystack":for(var p=2;p+1<n.length;p+=2)t.lineTo(n[p],n[p+1])}t=o,l?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},Dd.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],l=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-l[0],n[i+1]-l[1]),t.lineTo(n[i]+l[0],n[i+1]+l[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},Dd.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},Dd.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,l=t.pstyle(n+"-arrow-shape").value;if("none"!==l){var u="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,h=t.pstyle("width").pfValue,d=t.pstyle("opacity").value;void 0===o&&(o=d);var p=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,u,h,l,r,i,a),e.globalCompositeOperation=p);var g=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,g[0],g[1],g[2],o),s.colorStrokeStyle(e,g[0],g[1],g[2],o),s.drawArrowShape(t,e,c,h,l,r,i,a)}}},Dd.drawArrowShape=function(e,t,n,r,i,a,o,s){var l,u=this,c=this.usePaths()&&"triangle-cross"!==i,h=!1,d=t,p={x:a,y:o},g=e.pstyle("arrow-scale").value,f=this.getArrowWidth(r,g),v=u.arrowShapes[i];if(c){var y=u.arrowPathCache=u.arrowPathCache||[],m=gt(i),b=y[m];null!=b?(l=t=b,h=!0):(l=t=new Path2D,y[m]=l)}h||(t.beginPath&&t.beginPath(),c?v.draw(t,1,0,{x:0,y:0},1):v.draw(t,f,s,p,r),t.closePath&&t.closePath()),t=d,c&&(t.translate(a,o),t.rotate(s),t.scale(f,f)),"filled"!==n&&"both"!==n||(c?t.fill(l):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=(v.matchEdgeWidth?r:1)/(c?f:1),t.lineJoin="miter",c?t.stroke(l):t.stroke()),c&&(t.scale(1/f,1/f),t.rotate(-s),t.translate(-a,-o))};var Nd={safeDrawImage:function(e,t,n,r,i,a,o,s,l,u){if(!(i<=0||a<=0||l<=0||u<=0))try{e.drawImage(t,n,r,i,a,o,s,l,u)}catch(c){Nt(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,l=o.y,u=n.cy().style(),c=u.getIndexedStyle.bind(u),h=c(n,"background-fit","value",r),d=c(n,"background-repeat","value",r),p=n.width(),g=n.height(),f=2*n.padding(),v=p+("inner"===c(n,"background-width-relative-to","value",r)?0:f),y=g+("inner"===c(n,"background-height-relative-to","value",r)?0:f),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,T=t.height||t.cachedH;null!=E&&null!=T||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,T=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var _=E,D=T;if("auto"!==c(n,"background-width","value",r)&&(_="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*v:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(D="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==_&&0!==D){if("contain"===h)_*=C=Math.min(v/_,y/D),D*=C;else if("cover"===h){var C;_*=C=Math.max(v/_,y/D),D*=C}var N=s-v/2,A=c(n,"background-position-x","units",r),L=c(n,"background-position-x","pfValue",r);N+="%"===A?(v-_)*L:L;var S=c(n,"background-offset-x","units",r),O=c(n,"background-offset-x","pfValue",r);N+="%"===S?(v-_)*O:O;var I=l-y/2,k=c(n,"background-position-y","units",r),M=c(n,"background-position-y","pfValue",r);I+="%"===k?(y-D)*M:M;var P=c(n,"background-offset-y","units",r),R=c(n,"background-offset-y","pfValue",r);I+="%"===P?(y-D)*R:R,m.pathCache&&(N-=s,I-=l,s=0,l=0);var B=e.globalAlpha;e.globalAlpha=x;var F=a.getImgSmoothing(e),z=!1;if("no"===w&&F?(a.setImgSmoothing(e,!1),z=!0):"yes"!==w||F||(a.setImgSmoothing(e,!0),z=!0),"no-repeat"===d)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.clip())),a.safeDrawImage(e,t,0,0,E,T,N,I,_,D),b&&e.restore();else{var G=e.createPattern(t,d);e.fillStyle=G,a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.translate(N,I),e.fill(),e.translate(-N,-I)}e.globalAlpha=B,z&&a.setImgSmoothing(e,F)}}},Ad={};function Ld(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5;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(),e.fill()}Ad.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(xn(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Ad.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&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)},Ad.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Ad.setupTextStyle=function(e,t){var n=!(arguments.length>2&&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)},Ad.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Ft(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Ad.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=Ft(a,"labelX",n),c=Ft(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=Ft(a,"labelWidth",n),f=Ft(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=t.pstyle("text-border-width").pfValue,_=t.pstyle("text-background-padding").pfValue;if(w>0||T>0&&E>0){var D=u-_;switch(b){case"left":D-=g;break;case"center":D-=g/2}var C=c-f-_,N=g+2*_,A=f+2*_;if(w>0){var L=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",0===t.pstyle("text-background-shape").strValue.indexOf("round")?Ld(e,D,C,N,A,2):e.fillRect(D,C,N,A),e.fillStyle=L}if(T>0&&E>0){var O=e.strokeStyle,I=e.lineWidth,k=t.pstyle("text-border-color").value,M=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+k[0]+","+k[1]+","+k[2]+","+E*o+")",e.lineWidth=T,e.setLineDash)switch(M){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=T/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(D,C,N,A),"double"===M){var P=T/2;e.strokeRect(D+P,C+P,N-2*P,A-2*P)}e.setLineDash&&e.setLineDash([]),e.lineWidth=I,e.strokeStyle=O}}var R=2*t.pstyle("text-outline-width").pfValue;if(R>0&&(e.lineWidth=R),"wrap"===t.pstyle("text-wrap").value){var B=Ft(a,"labelWrapCachedLines",n),F=Ft(a,"labelLineHeight",n),z=g/2,G=this.getLabelJustification(t);switch("auto"===G||("left"===b?"left"===G?u+=-g:"center"===G&&(u+=-z):"center"===b?"left"===G?u+=-z:"right"===G&&(u+=z):"right"===b&&("center"===G?u+=z:"right"===G&&(u+=g))),x){case"top":case"center":case"bottom":c-=(B.length-1)*F}for(var Y=0;Y<B.length;Y++)R>0&&e.strokeText(B[Y],u,c),e.fillText(B[Y],u,c),c+=F}else R>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var Sd={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;E<m.length;E++){var T=m[E];if(b[E]=null!=T&&"none"!==T){var D=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",E);w++,x[E]=l.getCachedImage(T,D,(function(){u.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var C=t.pstyle("background-blacken").value,N=t.pstyle("border-width").pfValue,A=t.pstyle("background-opacity").value*g,L=t.pstyle("border-color").value,S=t.pstyle("border-style").value,O=t.pstyle("border-opacity").value*g;e.lineJoin="miter";var I=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},k=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:O;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},M=t.pstyle("shape").strValue,P=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var R=l.nodePathCache=l.nodePathCache||[],B=ft("polygon"===M?M+","+P.join(","):M,""+i,""+r),F=R[B];null!=F?(d=F,v=!0,c.pathCache=d):(d=new Path2D,R[B]=c.pathCache=d)}var z=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)}f?e.fill(d):e.fill()},G=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;o<x.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:b[o]&&x[o].complete&&!x[o].error&&(a++,l.drawInscribedImage(e,x[o],t,o,n))}u.backgrounding=!(a===w),i!==u.backgrounding&&t.updateStyle(!1)},Y=function(){var n=arguments.length>0&&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)))},X=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())},V=function(){if(N>0){if(e.lineWidth=N,e.lineCap="butt",e.setLineDash)switch(S){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===S){e.lineWidth=N/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},U=function(){o&&l.drawNodeOverlay(e,t,h,r,i)},j=function(){o&&l.drawNodeUnderlay(e,t,h,r,i)},H=function(){l.drawElementText(e,t,null,a)};if("yes"===t.pstyle("ghost").value){var q=t.pstyle("ghost-offset-x").pfValue,W=t.pstyle("ghost-offset-y").pfValue,$=t.pstyle("ghost-opacity").value,K=$*g;e.translate(q,W),I($*A),z(),G(K,!0),k($*O),V(),Y(0!==C||0!==N),G(K,!1),X(K),e.translate(-q,-W)}f&&e.translate(-h.x,-h.y),j(),f&&e.translate(h.x,h.y),I(),z(),G(g,!0),k(),V(),Y(0!==C||0!==N),G(g,!1),X(),f&&e.translate(-h.x,-h.y),H(),U(),n&&e.translate(p.x1,p.y1)}}},Od=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){var o=this;if(n.visible()){var s=n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-opacity")).value,u=n.pstyle("".concat(e,"-color")).value,c=n.pstyle("".concat(e,"-shape")).value;if(l>0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}o.colorFillStyle(t,u[0],u[1],u[2],l),o.nodeShapes[c].draw(t,r.x,r.y,i+2*s,a+2*s),t.fill()}}}};Sd.drawNodeOverlay=Od("overlay"),Sd.drawNodeUnderlay=Od("underlay"),Sd.hasPie=function(e){return(e=e[0])._private.hasPie},Sd.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 Id={},kd=100;Id.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},Id.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},Id.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,l=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var u=n.sourceEndpoint(),c=n.targetEndpoint(),h=n.midpoint(),d=En(u,h),p=En(c,h);a=e.createRadialGradient(h.x,h.y,0,h.x,h.y,Math.max(d,p))}else{var g=o?{x:0,y:0}:n.position(),f=n.paddedWidth(),v=n.paddedHeight();a=e.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(f,v))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=l.length===s.length,T=s.length,_=0;_<T;_++)a.addColorStop(E?l[_]:_/(T-1),"rgba("+s[_][0]+","+s[_][1]+","+s[_][2]+","+i+")");return a},Id.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},Id.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},Id.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},Id.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},Id.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},Id.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},Id.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var l,u=i*o,c=a*o;if(u!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var h=n.canvasContainer;h.style.width=i+"px",h.style.height=a+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)(l=n.canvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";for(d=0;d<t.BUFFER_COUNT;d++)(l=n.bufferCanvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";t.textureMult=1,o<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=u*t.textureMult,l.height=c*t.textureMult),t.canvasWidth=u,t.canvasHeight=c}},Id.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},Id.render=function(e){var t=(e=e||kt()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,l=o.cy,u=o.data,c=u.canvasNeedsRedraw,h=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),d=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,p=o.motionBlurPxRatio,g=l.hasCompoundNodes(),f=o.hoverData.draggingEles,v=!(!o.hoverData.selecting&&!o.touchData.selecting),y=d=d&&!t&&o.motionBlurEnabled&&!v;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),d&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.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},T={zoom:b,pan:{x:w.x,y:w.y}},_=o.prevViewport;void 0===_||T.zoom!==_.zoom||T.pan.x!==_.pan.x||T.pan.y!==_.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}),(T=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],S=o.textureCache.texture;T=o.textureCache.viewport,L.setTransform(1,0,0,1,0,0),d?C(L,0,0,T.width,T.height):L.clearRect(0,0,T.width,T.height);var O=m.core("outside-texture-bg-color").value,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,O[0],O[1],O[2],I),L.fillRect(0,0,T.width,T.height),b=l.zoom(),N(L,!1),L.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s),L.drawImage(S,T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var k=l.extent(),M=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&M,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,k):o.drawLayeredElements(L,D.nondrag,s,k),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,k):o.drawCachedElements(L,D.drag,s,k),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)),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);var X=60;L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/X,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],U=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],j=u.contexts[o.DRAG],H=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,U,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(j,H,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=T,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()}),kd)),t||l.emit("render")};for(var Md={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;l<a.length/2;l++)e.lineTo(t+o*a[2*l],n+s*a[2*l+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,l=hr(r,i);e.beginPath&&e.beginPath();for(var u=0;u<a.length/4;u++){var c=void 0,h=void 0;c=0===u?a.length-2:4*u-2,h=4*u+2;var d=t+o*a[4*u],p=n+s*a[4*u+1],g=-a[c]*a[h]-a[c+1]*a[h+1],f=l/Math.tan(Math.acos(g)/2),v=d-f*a[c],y=p-f*a[c+1],m=d+f*a[h],b=p+f*a[h+1];0===u?e.moveTo(v,y):e.lineTo(v,y),e.arcTo(d,p,m,b,l)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=cr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=cr(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=dr();e.beginPath&&e.beginPath(),e.moveTo(t-a+s,n-o),e.lineTo(t+a-s,n-o),e.lineTo(t+a,n-o+s),e.lineTo(t+a,n+o-s),e.lineTo(t+a-s,n+o),e.lineTo(t-a+s,n+o),e.lineTo(t-a,n+o-s),e.lineTo(t-a,n-o+s),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,l=t+a,u=n-o,c=n+o,h=gr(r,i),d=h.widthOffset,p=h.heightOffset,g=h.ctrlPtOffsetPct*d;e.beginPath&&e.beginPath(),e.moveTo(s,u+p),e.lineTo(s,c-p),e.quadraticCurveTo(s+g,c,s+d,c),e.lineTo(l-d,c),e.quadraticCurveTo(l-g,c,l,c-p),e.lineTo(l,u+p),e.quadraticCurveTo(l-g,u,l-d,u),e.lineTo(s+d,u),e.quadraticCurveTo(s+g,u,s,u+p),e.closePath()}},Pd=Math.sin(0),Rd=Math.cos(0),Bd={},Fd={},zd=Math.PI/40,Gd=0*Math.PI;Gd<2*Math.PI;Gd+=zd)Bd[Gd]=Math.sin(Gd),Fd[Gd]=Math.cos(Gd);Md.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,l=i/2,u=0*Math.PI;u<2*Math.PI;u+=zd)a=t-s*Bd[u]*Pd+s*Fd[u]*Rd,o=n+l*Fd[u]*Pd+l*Bd[u]*Rd,0===u?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var Yd={};function Xd(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}function Vd(e){var t=e.indexOf(",");return e.substr(t+1)}function Ud(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new Gi((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return Xd(Vd(r()),n);case"base64":return Vd(r());default:return r()}}Yd.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},Yd.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=_(e.maxWidth)||_(e.maxHeight),s=this.getPixelRatio(),l=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,l=e.scale;else if(o){var u=1/0,c=1/0;_(e.maxWidth)&&(u=l*e.maxWidth/i),_(e.maxHeight)&&(c=l*e.maxHeight/a),i*=l=Math.min(u,c),a*=l}o||(i*=s,a*=s,l*=s);var h=document.createElement("canvas");h.width=i,h.height=a,h.style.width=i+"px",h.style.height=a+"px";var d=h.getContext("2d");if(i>0&&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},Yd.png=function(e){return Ud(e,this.bufferCanvasImage(e),"image/png")},Yd.jpg=function(e){return Ud(e,this.bufferCanvasImage(e),"image/jpeg")};var jd={nodeShapeImpl:function(e,t,n,r,i,a,o){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);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},Hd=Wd,qd=Wd.prototype;function Wd(e){var t=this;t.data={canvases:new Array(qd.CANVAS_LAYERS),contexts:new Array(qd.CANVAS_LAYERS),canvasNeedsRedraw:new Array(qd.CANVAS_LAYERS),bufferCanvases:new Array(qd.BUFFER_COUNT),bufferContexts:new Array(qd.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"};B()&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<qd.CANVAS_LAYERS;s++){var l=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=l.getContext("2d"),Object.keys(o).forEach((function(e){l.style[e]=o[e]})),l.style.position="absolute",l.setAttribute("data-id","layer"+s),l.style.zIndex=String(qd.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[s]=!1}for(t.data.topCanvas=t.data.canvases[0],t.data.canvases[qd.NODE].setAttribute("data-id","layer"+qd.NODE+"-node"),t.data.canvases[qd.SELECT_BOX].setAttribute("data-id","layer"+qd.SELECT_BOX+"-selectbox"),t.data.canvases[qd.DRAG].setAttribute("data-id","layer"+qd.DRAG+"-drag"),s=0;s<qd.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var u=Ln(),c=function(e){return{x:(e.x1+e.x2)/2,y:(e.y1+e.y2)/2}},h=function(e){return{x:-e.w/2,y:-e.h/2}},d=function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},p=function(e){return e[0]._private.nodeKey},g=function(e){return e[0]._private.labelStyleKey},f=function(e){return e[0]._private.sourceLabelStyleKey},v=function(e){return e[0]._private.targetLabelStyleKey},y=function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},m=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},b=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},x=function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},w=function(e){return e.boundingBox(),e[0]._private.bodyBounds},E=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||u},T=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||u},_=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||u},D=function(e,t){return t},C=function(e){return c(w(e))},N=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},A=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},L=function(e){return N("",A(e,"labelX","labelY"),e)},S=function(e){return N("source",A(e,"sourceLabelX","sourceLabelY"),e)},O=function(e){return N("target",A(e,"targetLabelX","targetLabelY"),e)},I=function(e){return h(w(e))},k=function(e){return h(T(e))},M=function(e){return h(_(e))},P=function(e){var t=E(e),n=h(E(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},R=t.data.eleTxrCache=new jh(t,{getKey:p,doesEleInvalidateKey:d,drawElement:y,getBoundingBox:w,getRotationPoint:C,getRotationOffset:I,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),F=t.data.lblTxrCache=new jh(t,{getKey:g,drawElement:m,getBoundingBox:E,getRotationPoint:L,getRotationOffset:P,isVisible:D}),z=t.data.slbTxrCache=new jh(t,{getKey:f,drawElement:b,getBoundingBox:T,getRotationPoint:S,getRotationOffset:k,isVisible:D}),G=t.data.tlbTxrCache=new jh(t,{getKey:v,drawElement:x,getBoundingBox:_,getRotationPoint:O,getRotationOffset:M,isVisible:D}),Y=t.data.lyrTxrCache=new sd(t);t.onUpdateEleCalcs((function(e,t){R.invalidateElements(t),F.invalidateElements(t),z.invalidateElements(t),G.invalidateElements(t),Y.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var X=function(e){for(var t=0;t<e.length;t++)Y.enqueueElementRefinement(e[t].ele)};R.onDequeue(X),F.onDequeue(X),z.onDequeue(X),G.onDequeue(X)}qd.CANVAS_LAYERS=3,qd.SELECT_BOX=0,qd.DRAG=1,qd.NODE=2,qd.BUFFER_COUNT=3,qd.TEXTURE_BUFFER=0,qd.MOTIONBLUR_BUFFER_NODE=1,qd.MOTIONBLUR_BUFFER_DRAG=2,qd.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[qd.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[qd.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[qd.SELECT_BOX]=t}};var $d="undefined"!=typeof Path2D;qd.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},qd.usePaths=function(){return $d&&this.pathsEnabled},qd.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},qd.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},qd.makeOffscreenCanvas=function(t,n){var r;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":e(OffscreenCanvas))?r=new OffscreenCanvas(t,n):((r=document.createElement("canvas")).width=t,r.height=n),r},[dd,md,Dd,Nd,Ad,Sd,Id,Md,Yd,jd].forEach((function(e){Q(qd,e)}));var Kd=[{type:"layout",extensions:qc},{type:"renderer",extensions:[{name:"null",impl:Wc},{name:"base",impl:xh},{name:"canvas",impl:Hd}]}],Zd={},Qd={};function Jd(e,t,n){var r=n,i=function(n){Nt("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(ac.prototype[t])return i(t);ac.prototype[t]=n}else if("collection"===e){if(bu.prototype[t])return i(t);bu.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),E(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],l=0;l<s.length;l++){var u=s[l];o[u]=o[u]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var h=function(e){return e._private.cy},d={addEventFields:function(e,t){t.layout=e,t.cy=h(e),t.target=e},bubble:function(){return!0},parent:function(e){return h(e)}};Q(o,{createEmitter:function(){return this._private.emitter=new Rl(d,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),hs.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var p=ep("renderer","base"),g=p.prototype,f=n,v=n.prototype,y=function(){p.apply(this,arguments),f.apply(this,arguments)},m=y.prototype;for(var b in g){var x=g[b];if(null!=v[b])return i(b);m[b]=x}for(var w in v)m[w]=v[w];g.clientFunctions.forEach((function(e){m[e]=m[e]||function(){Dt("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return Dt(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return ae({map:Zd,keys:[e,t],value:r})}function ep(e,t){return oe({map:Zd,keys:[e,t]})}function tp(e,t,n,r,i){return ae({map:Qd,keys:[e,t,n,r],value:i})}function np(e,t,n,r){return oe({map:Qd,keys:[e,t,n,r]})}var rp=function(){return 2===arguments.length?ep.apply(null,arguments):3===arguments.length?Jd.apply(null,arguments):4===arguments.length?np.apply(null,arguments):5===arguments.length?tp.apply(null,arguments):void Dt("Invalid extension access syntax")};ac.prototype.extension=rp,Kd.forEach((function(e){e.extensions.forEach((function(t){Jd(e.type,t.name,t.impl)}))}));var ip=function e(){if(!(this instanceof e))return new e;this.length=0},ap=ip.prototype;ap.instanceString=function(){return"stylesheet"},ap.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},ap.css=function(e,t){var n=this.length-1;if(b(e))this[n].properties.push({name:e,value:t});else if(E(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var l=Ju.properties[o]||Ju.properties[G(o)];if(null!=l){var u=l.name,c=s;this[n].properties.push({name:u,value:c})}}}return this},ap.style=ap.css,ap.generateStyle=function(e){var t=new Ju(e);return this.appendToStyle(t)},ap.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var op="3.26.0",sp=function(e){return void 0===e&&(e={}),E(e)?new ac(e):b(e)?rp.apply(rp,arguments):void 0};return sp.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(sp),e.apply(null,t),this},sp.warnings=function(e){return Ct(e)},sp.version=op,sp.stylesheet=sp.Stylesheet=ip,sp}()},2241: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;n<t.length;n++)t[n].withChildren().forEach((function(t){e.add(t)}));return e},u.prototype.getNoOfChildren=function(){var e=0;if(null==this.child)e=1;else for(var t=this.child.getNodes(),n=0;n<t.length;n++)e+=t[n].getNoOfChildren();return 0==e&&(e=1),e},u.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},u.prototype.calcEstimatedSize=function(){return null==this.child?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},u.prototype.scatter=function(){var e,t,n=-o.INITIAL_WORLD_BOUNDARY,r=o.INITIAL_WORLD_BOUNDARY;e=o.WORLD_CENTER_X+s.nextDouble()*(r-n)+n;var i=-o.INITIAL_WORLD_BOUNDARY,a=o.INITIAL_WORLD_BOUNDARY;t=o.WORLD_CENTER_Y+s.nextDouble()*(a-i)+i,this.rect.x=e,this.rect.y=t},u.prototype.updateBounds=function(){if(null==this.getChild())throw"assert failed";if(0!=this.getChild().getNodes().length){var e=this.getChild();if(e.updateBounds(!0),this.rect.x=e.getLeft(),this.rect.y=e.getTop(),this.setWidth(e.getRight()-e.getLeft()),this.setHeight(e.getBottom()-e.getTop()),o.NODE_DIMENSIONS_INCLUDE_LABELS){var t=e.getRight()-e.getLeft(),n=e.getBottom()-e.getTop();this.labelWidth>t&&(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<r;i++)(a=n[i]).isInterGraph?this.graphManager.remove(a):a.source.owner.remove(a);if(-1==(o=this.nodes.indexOf(t)))throw"Node not in owner node list!";this.nodes.splice(o,1)}else if(e instanceof l){var a;if(null==(a=e))throw"Edge is null!";if(null==a.source||null==a.target)throw"Source and/or target is null!";if(null==a.source.owner||null==a.target.owner||a.source.owner!=this||a.target.owner!=this)throw"Source and/or target owner is invalid!";var o,u=a.source.edges.indexOf(a),c=a.target.edges.indexOf(a);if(!(u>-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<s;l++){var u=o[l];r>(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<p;g++){var f=d[g];e&&null!=f.child&&f.updateBounds(),s>(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<h;d++){var p=e[d];o>(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<n;r++)e+=t[r].calcEstimatedSize();return this.estimatedSize=0==e?a.EMPTY_COMPOUND_NODE_SIZE:e/Math.sqrt(this.nodes.length),this.estimatedSize},d.prototype.updateConnected=function(){var e=this;if(0!=this.nodes.length){var t,n,r=new h,i=new Set,a=this.nodes[0];for(a.withChildren().forEach((function(e){r.push(e),i.add(e)}));0!==r.length;)for(var o=(t=(a=r.shift()).getEdges()).length,s=0;s<o;s++)null==(n=t[s].getOtherEndInGraph(a,this))||i.has(n)||n.withChildren().forEach((function(e){r.push(e),i.add(e)}));if(this.isConnected=!1,i.size>=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<o;s++)n=a[s],t.remove(n);var l,u=[];for(o=(u=u.concat(t.getNodes())).length,s=0;s<o;s++)l=u[s],t.remove(l);t==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(t);this.graphs.splice(c,1),t.parent=null}else if(e instanceof i){if(null==(n=e))throw"Edge is null!";if(!n.isInterGraph)throw"Not an inter-graph edge!";if(null==n.source||null==n.target)throw"Source and/or target is null!";if(-1==n.source.edges.indexOf(n)||-1==n.target.edges.indexOf(n))throw"Source and/or target doesn't know this edge!";if(c=n.source.edges.indexOf(n),n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),null==n.source.owner||null==n.source.owner.getGraphManager())throw"Edge owner graph or owner graph manager is null!";if(-1==n.source.owner.getGraphManager().edges.indexOf(n))throw"Not in owner graph manager's edge list!";c=n.source.owner.getGraphManager().edges.indexOf(n),n.source.owner.getGraphManager().edges.splice(c,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(null==this.allNodes){for(var e=[],t=this.getGraphs(),n=t.length,r=0;r<n;r++)e=e.concat(t[r].getNodes());this.allNodes=e}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(null==this.allEdges){for(var e=[],t=this.getGraphs(),n=(t.length,0);n<t.length;n++)e=e.concat(t[n].getEdges());e=e.concat(this.edges),this.allEdges=e}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(e){if(null!=this.allNodesToApplyGravitation)throw"assert failed";this.allNodesToApplyGravitation=e},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(e){if(e.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=e,null==e.parent&&(e.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(e,t){if(null==e||null==t)throw"assert failed";if(e==t)return!0;for(var n,r=e.getOwner();null!=(n=r.getParent());){if(n==t)return!0;if(null==(r=n.getOwner()))break}for(r=t.getOwner();null!=(n=r.getParent());){if(n==e)return!0;if(null==(r=n.getOwner()))break}return!1},a.prototype.calcLowestCommonAncestors=function(){for(var e,t,n,r,i,a=this.getAllEdges(),o=a.length,s=0;s<o;s++)if(t=(e=a[s]).source,n=e.target,e.lca=null,e.sourceInLca=t,e.targetInLca=n,t!=n){for(r=t.getOwner();null==e.lca;){for(e.targetInLca=n,i=n.getOwner();null==e.lca;){if(i==r){e.lca=i;break}if(i==this.rootGraph)break;if(null!=e.lca)throw"assert failed";e.targetInLca=i.getParent(),i=e.targetInLca.getOwner()}if(r==this.rootGraph)break;null==e.lca&&(e.sourceInLca=r.getParent(),r=e.sourceInLca.getOwner())}if(null==e.lca)throw"assert failed"}else e.lca=t.getOwner()},a.prototype.calcLowestCommonAncestor=function(e,t){if(e==t)return e.getOwner();for(var n=e.getOwner();null!=n;){for(var r=t.getOwner();null!=r;){if(r==n)return r;r=r.getParent().getOwner()}n=n.getParent().getOwner()}return n},a.prototype.calcInclusionTreeDepths=function(e,t){var n;null==e&&null==t&&(e=this.rootGraph,t=1);for(var r=e.getNodes(),i=r.length,a=0;a<i;a++)(n=r[a]).inclusionTreeDepth=t,null!=n.child&&this.calcInclusionTreeDepths(n.child,t+1)},a.prototype.includesInvalidEdge=function(){for(var e,t=this.edges.length,n=0;n<t;n++)if(e=this.edges[n],this.isOneAncestorOfOther(e.source,e.target))return!0;return!1},e.exports=a},function(e,t,n){"use strict";var r=n(0);function i(){}for(var a in r)i[a]=r[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=3*i.MAX_NODE_DISPLACEMENT_INCREMENTAL,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=i},function(e,t,n){"use strict";var r=n(12);function i(){}i.calcSeparationAmount=function(e,t,n,r){if(!e.intersects(t))throw"assert failed";var i=new Array(2);this.decideDirectionsForOverlappingNodes(e,t,i),n[0]=Math.min(e.getRight(),t.getRight())-Math.max(e.x,t.x),n[1]=Math.min(e.getBottom(),t.getBottom())-Math.max(e.y,t.y),e.getX()<=t.getX()&&e.getRight()>=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]<s?s=n[0]:o=n[1],n[0]=-1*i[0]*(s/2+r),n[1]=-1*i[1]*(o/2+r)},i.decideDirectionsForOverlappingNodes=function(e,t,n){e.getCenterX()<t.getCenterX()?n[0]=-1:n[0]=1,e.getCenterY()<t.getCenterY()?n[1]=-1:n[1]=1},i.getIntersection2=function(e,t,n){var r=e.getCenterX(),i=e.getCenterY(),a=t.getCenterX(),o=t.getCenterY();if(e.intersects(t))return n[0]=r,n[1]=i,n[2]=a,n[3]=o,!0;var s=e.getX(),l=e.getY(),u=e.getRight(),c=e.getX(),h=e.getBottom(),d=e.getRight(),p=e.getWidthHalf(),g=e.getHeightHalf(),f=t.getX(),v=t.getY(),y=t.getRight(),m=t.getX(),b=t.getBottom(),x=t.getRight(),w=t.getWidthHalf(),E=t.getHeightHalf(),T=!1,_=!1;if(r===a){if(i>o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(i<o)return n[0]=r,n[1]=h,n[2]=a,n[3]=v,!1}else if(i===o){if(r>a)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(r<a)return n[0]=u,n[1]=i,n[2]=f,n[3]=o,!1}else{var D=e.height/e.width,C=t.height/t.width,N=(o-i)/(a-r),A=void 0,L=void 0,S=void 0,O=void 0,I=void 0,k=void 0;if(-D===N?r>a?(n[0]=c,n[1]=h,T=!0):(n[0]=u,n[1]=l,T=!0):D===N&&(r>a?(n[0]=s,n[1]=l,T=!0):(n[0]=d,n[1]=h,T=!0)),-C===N?a>r?(n[2]=m,n[3]=b,_=!0):(n[2]=y,n[3]=v,_=!0):C===N&&(a>r?(n[2]=f,n[3]=v,_=!0):(n[2]=x,n[3]=b,_=!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)),!T)switch(A){case 1:O=l,S=r+-g/N,n[0]=S,n[1]=O;break;case 2:S=d,O=i+p*N,n[0]=S,n[1]=O;break;case 3:O=h,S=r+g/N,n[0]=S,n[1]=O;break;case 4:S=c,O=i+-p*N,n[0]=S,n[1]=O}if(!_)switch(L){case 1:k=v,I=a+-E/N,n[2]=I,n[3]=k;break;case 2:I=x,k=o+w*N,n[2]=I,n[3]=k;break;case 3:k=b,I=a+E/N,n[2]=I,n[3]=k;break;case 4:I=m,k=o+-w*N,n[2]=I,n[3]=k}}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)),n<e?i+=Math.PI:r<t&&(i+=this.TWO_PI)):i=r<t?this.ONE_AND_HALF_PI:this.HALF_PI,i},i.doIntersect=function(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,l=n.x,u=n.y,c=r.x,h=r.y,d=(o-i)*(h-u)-(c-l)*(s-a);if(0===d)return!1;var p=((h-u)*(c-i)+(l-c)*(h-a))/d,g=((a-s)*(c-i)+(o-i)*(h-a))/d;return 0<p&&p<1&&0<g&&g<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,e.exports=i},function(e,t,n){"use strict";function r(){}r.sign=function(e){return e>0?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;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return{value:e,next:null,prev:null}},a=function(e,t,n,r){return null!==e?e.next=t:r.head=t,null!==n?n.prev=t:r.tail=t,t.prev=e,t.next=n,r.length++,t},o=function(e,t){var n=e.prev,r=e.next;return null!==n?n.next=r:t.head=r,null!==r?r.prev=n:t.tail=n,e.prev=e.next=null,t.length--,e},s=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.length=0,this.head=null,this.tail=null,null!=t&&t.forEach((function(e){return n.push(e)}))}return r(e,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(e,t){return a(t.prev,i(e),t,this)}},{key:"insertAfter",value:function(e,t){return a(t,i(e),t.next,this)}},{key:"insertNodeBefore",value:function(e,t){return a(t.prev,e,t,this)}},{key:"insertNodeAfter",value:function(e,t){return a(t,e,t.next,this)}},{key:"push",value:function(e){return a(this.tail,i(e),null,this)}},{key:"unshift",value:function(e){return a(null,i(e),this.head,this)}},{key:"remove",value:function(e){return o(e,this)}},{key:"pop",value:function(){return o(this.tail,this).value}},{key:"popNode",value:function(){return o(this.tail,this)}},{key:"shift",value:function(){return o(this.head,this).value}},{key:"shiftNode",value:function(){return o(this.head,this)}},{key:"get_object_at",value:function(e){if(e<=this.length()){for(var t=1,n=this.head;t<e;)n=n.next,t++;return n.value}}},{key:"set_object_at",value:function(e,t){if(e<=this.length()){for(var n=1,r=this.head;n<e;)r=r.next,n++;r.value=t}}}]),e}();e.exports=s},function(e,t,n){"use strict";function r(e,t,n){this.x=null,this.y=null,null==e&&null==t&&null==n?(this.x=0,this.y=0):"number"==typeof e&&"number"==typeof t&&null==n?(this.x=e,this.y=t):"Point"==e.constructor.name&&null==t&&null==n&&(n=e,this.x=n.x,this.y=n.y)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.getLocation=function(){return new r(this.x,this.y)},r.prototype.setLocation=function(e,t,n){"Point"==e.constructor.name&&null==t&&null==n?(n=e,this.setLocation(n.x,n.y)):"number"==typeof e&&"number"==typeof t&&null==n&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},r.prototype.move=function(e,t){this.x=e,this.y=t},r.prototype.translate=function(e,t){this.x+=e,this.y+=t},r.prototype.equals=function(e){if("Point"==e.constructor.name){var t=e;return this.x==t.x&&this.y==t.y}return this==e},r.prototype.toString=function(){return(new r).constructor.name+"[x="+this.x+",y="+this.y+"]"},e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.x=0,this.y=0,this.width=0,this.height=0,null!=e&&null!=t&&null!=n&&null!=r&&(this.x=e,this.y=t,this.width=n,this.height=r)}r.prototype.getX=function(){return this.x},r.prototype.setX=function(e){this.x=e},r.prototype.getY=function(){return this.y},r.prototype.setY=function(e){this.y=e},r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},r.prototype.getRight=function(){return this.x+this.width},r.prototype.getBottom=function(){return this.y+this.height},r.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},r.prototype.getCenterX=function(){return this.x+this.width/2},r.prototype.getMinX=function(){return this.getX()},r.prototype.getMaxX=function(){return this.getX()+this.width},r.prototype.getCenterY=function(){return this.y+this.height/2},r.prototype.getMinY=function(){return this.getY()},r.prototype.getMaxY=function(){return this.getY()+this.height},r.prototype.getWidthHalf=function(){return this.width/2},r.prototype.getHeightHalf=function(){return this.height/2},e.exports=r},function(e,t,n){"use strict";var r="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};function i(){}i.lastID=0,i.createID=function(e){return i.isPrimitive(e)?e:(null!=e.uniqueID||(e.uniqueID=i.getString(),i.lastID++),e.uniqueID)},i.getString=function(e){return null==e&&(e=i.lastID),"Object#"+e},i.isPrimitive=function(e){var t=void 0===e?"undefined":r(e);return null==e||"object"!=t&&"function"!=t},e.exports=i},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=n(0),a=n(6),o=n(3),s=n(1),l=n(5),u=n(4),c=n(17),h=n(27);function d(e){h.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,null!=e&&(this.isRemoteUse=e)}d.RANDOM_SEED=1,d.prototype=Object.create(h.prototype),d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},d.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},d.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},d.prototype.newGraphManager=function(){var e=new a(this);return this.graphManager=e,e},d.prototype.newGraph=function(e){return new l(null,this.graphManager,e)},d.prototype.newNode=function(e){return new o(this.graphManager,e)},d.prototype.newEdge=function(e){return new s(null,null,e)},d.prototype.checkLayoutSuccess=function(){return null==this.graphManager.getRoot()||0==this.graphManager.getRoot().getNodes().length||this.graphManager.includesInvalidEdge()},d.prototype.runLayout=function(){var e;return this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters(),e=!this.checkLayoutSuccess()&&this.layout(),"during"!==i.ANIMATE&&(e&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,e)},d.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},d.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var e=this.graphManager.getAllEdges(),t=0;t<e.length;t++)e[t];var n=this.graphManager.getRoot().getNodes();for(t=0;t<n.length;t++)n[t];this.update(this.graphManager.getRoot())}},d.prototype.update=function(e){if(null==e)this.update2();else if(e instanceof o){var t=e;if(null!=t.getChild())for(var n=t.getChild().getNodes(),r=0;r<n.length;r++)update(n[r]);null!=t.vGraphObject&&t.vGraphObject.update(t)}else if(e instanceof s){var i=e;null!=i.vGraphObject&&i.vGraphObject.update(i)}else if(e instanceof l){var a=e;null!=a.vGraphObject&&a.vGraphObject.update(a)}},d.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},d.prototype.transform=function(e){if(null==e)this.transform(new u(0,0));else{var t=new c,n=this.graphManager.getRoot().updateLeftTop();if(null!=n){t.setWorldOrgX(e.x),t.setWorldOrgY(e.y),t.setDeviceOrgX(n.x),t.setDeviceOrgY(n.y);for(var r=this.getAllNodes(),i=0;i<r.length;i++)r[i].transform(t)}}},d.prototype.positionNodesRandomly=function(e){if(null==e)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var t,n,r=e.getNodes(),i=0;i<r.length;i++)null==(n=(t=r[i]).getChild())||0==n.getNodes().length?t.scatter():(this.positionNodesRandomly(n),t.updateBounds())},d.prototype.getFlatForest=function(){for(var e=[],t=!0,n=this.graphManager.getRoot().getNodes(),i=!0,a=0;a<n.length;a++)null!=n[a].getChild()&&(i=!1);if(!i)return e;var o=new Set,s=[],l=new Map,u=[];for(u=u.concat(n);u.length>0&&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<h.length;a++){var d=h[a].getOtherEnd(c);if(l.get(c)!=d){if(o.has(d)){t=!1;break}s.push(d),l.set(d,c)}}}if(t){var p=[].concat(r(o));for(e.push(p),a=0;a<p.length;a++){var g=p[a],f=u.indexOf(g);f>-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;i<e.bendpoints.length;i++){var a=this.newNode(null);a.setRect(new Point(0,0),new Dimension(1,1)),r.add(a);var o=this.newEdge(null);this.graphManager.add(o,n,a),t.add(a),n=a}return o=this.newEdge(null),this.graphManager.add(o,n,e.target),this.edgeToDummyNodes.set(e,t),e.isInterGraph()?this.graphManager.remove(e):r.remove(e),t},d.prototype.createBendpointsFromDummyNodes=function(){var e=[];e=e.concat(this.graphManager.getAllEdges()),e=[].concat(r(this.edgeToDummyNodes.keys())).concat(e);for(var t=0;t<e.length;t++){var n=e[t];if(n.bendpoints.length>0){for(var i=this.edgeToDummyNodes.get(n),a=0;a<i.length;a++){var o=i[a],s=new u(o.getCenterX(),o.getCenterY()),l=n.bendpoints.get(a);l.x=s.x,l.y=s.y,o.getOwner().remove(o)}this.graphManager.add(n,n.source,n.target)}}},d.transform=function(e,t,n,r){if(null!=n&&null!=r){var i=t;return e<=50?i-=(t-t/n)/50*(50-e):i+=(t*r-t)/50*(e-50),i}var a,o;return e<=50?(a=9*t/500,o=t/10):(a=9*t/50,o=-8*t),a*e+o},d.findCenterOfTree=function(e){var t=[];t=t.concat(e);var n=[],r=new Map,i=!1,a=null;1!=t.length&&2!=t.length||(i=!0,a=t[0]);for(var o=0;o<t.length;o++){var s=(c=t[o]).getNeighborsList().size;r.set(c,c.getNeighborsList().size),1==s&&n.push(c)}var l=[];for(l=l.concat(n);!i;){var u=[];for(u=u.concat(l),l=[],o=0;o<t.length;o++){var c=t[o],h=t.indexOf(c);h>=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;u<l.length;u++)(e=l[u]).idealLength=this.idealEdgeLength,e.isInterGraph&&(n=e.getSource(),r=e.getTarget(),o=e.getSourceInLca().getEstimatedSize(),s=e.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(e.idealLength+=o+s-2*a.SIMPLE_NODE_SIZE),t=e.getLca().getInclusionTreeDepth(),e.idealLength+=i.DEFAULT_EDGE_LENGTH*i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(n.getInclusionTreeDepth()+r.getInclusionTreeDepth()-2*t))},l.prototype.initSpringEmbedder=function(){var e=this.getAllNodes().length;this.incremental?(e>i.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;n<t.length;n++)e=t[n],this.calcSpringForce(e,e.idealLength)},l.prototype.calcRepulsionForces=function(){var e,t,n,r,a,o=!(arguments.length>0&&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.length;e++)n=l[e],this.calculateRepulsionForceOfANode(n,a,o,s),a.add(n);else for(e=0;e<l.length;e++)for(n=l[e],t=e+1;t<l.length;t++)r=l[t],n.getOwner()==r.getOwner()&&this.calcRepulsionForce(n,r)},l.prototype.calcGravitationalForces=function(){for(var e,t=this.getAllNodesToApplyGravitation(),n=0;n<t.length;n++)e=t[n],this.calcGravitationalForce(e)},l.prototype.moveNodes=function(){for(var e=this.getAllNodes(),t=0;t<e.length;t++)e[t].move()},l.prototype.calcSpringForce=function(e,t){var n,r,i,a,o=e.getSource(),s=e.getTarget();if(this.uniformLeafNodeSizes&&null==o.getChild()&&null==s.getChild())e.updateLengthSimple();else if(e.updateLength(),e.isOverlapingSourceAndTarget)return;0!=(n=e.getLength())&&(i=(r=this.springConstant*(n-t))*(e.lengthX/n),a=r*(e.lengthY/n),o.springForceX+=i,o.springForceY+=a,s.springForceX-=i,s.springForceY-=a)},l.prototype.calcRepulsionForce=function(e,t){var n,r,a,l,u,c,h,d=e.getRect(),p=t.getRect(),g=new Array(2),f=new Array(4);if(d.intersects(p)){o.calcSeparationAmount(d,p,g,i.DEFAULT_EDGE_LENGTH/2),c=2*g[0],h=2*g[1];var v=e.noOfChildren*t.noOfChildren/(e.noOfChildren+t.noOfChildren);e.repulsionForceX-=v*c,e.repulsionForceY-=v*h,t.repulsionForceX+=v*c,t.repulsionForceY+=v*h}else this.uniformLeafNodeSizes&&null==e.getChild()&&null==t.getChild()?(n=p.getCenterX()-d.getCenterX(),r=p.getCenterY()-d.getCenterY()):(o.getIntersection(d,p,f),n=f[2]-f[0],r=f[3]-f[1]),Math.abs(n)<i.MIN_REPULSION_DIST&&(n=s.sign(n)*i.MIN_REPULSION_DIST),Math.abs(r)<i.MIN_REPULSION_DIST&&(r=s.sign(r)*i.MIN_REPULSION_DIST),a=n*n+r*r,l=Math.sqrt(a),c=(u=this.repulsionConstant*e.noOfChildren*t.noOfChildren/a)*n/l,h=u*r/l,e.repulsionForceX-=c,e.repulsionForceY-=h,t.repulsionForceX+=c,t.repulsionForceY+=h},l.prototype.calcGravitationalForce=function(e){var t,n,r,i,a,o,s,l;n=((t=e.getOwner()).getRight()+t.getLeft())/2,r=(t.getTop()+t.getBottom())/2,i=e.getCenterX()-n,a=e.getCenterY()-r,o=Math.abs(i)+e.getWidth()/2,s=Math.abs(a)+e.getHeight()/2,e.getOwner()==this.graphManager.getRoot()?(o>(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<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,e||t},l.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},l.prototype.calcNoOfChildrenForAllNodes=function(){for(var e,t=this.graphManager.getAllNodes(),n=0;n<t.length;n++)(e=t[n]).noOfChildren=e.getNoOfChildren()},l.prototype.calcGrid=function(e){var t,n;t=parseInt(Math.ceil((e.getRight()-e.getLeft())/this.repulsionRange)),n=parseInt(Math.ceil((e.getBottom()-e.getTop())/this.repulsionRange));for(var r=new Array(t),i=0;i<t;i++)r[i]=new Array(n);for(i=0;i<t;i++)for(var a=0;a<n;a++)r[i][a]=new Array;return r},l.prototype.addNodeToGrid=function(e,t,n){var r,i,a,o;r=parseInt(Math.floor((e.getRect().x-t)/this.repulsionRange)),i=parseInt(Math.floor((e.getRect().width+e.getRect().x-t)/this.repulsionRange)),a=parseInt(Math.floor((e.getRect().y-n)/this.repulsionRange)),o=parseInt(Math.floor((e.getRect().height+e.getRect().y-n)/this.repulsionRange));for(var s=r;s<=i;s++)for(var l=a;l<=o;l++)this.grid[s][l].push(e),e.setGridCoordinates(r,i,a,o)},l.prototype.updateGrid=function(){var e,t,n=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),e=0;e<n.length;e++)t=n[e],this.addNodeToGrid(t,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},l.prototype.calculateRepulsionForceOfANode=function(e,t,n,r){if(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&n||r){var a,o=new Set;e.surrounding=new Array;for(var s=this.grid,l=e.startX-1;l<e.finishX+2;l++)for(var u=e.startY-1;u<e.finishY+2;u++)if(!(l<0||u<0||l>=s.length||u>=s[0].length))for(var c=0;c<s[l][u].length;c++)if(a=s[l][u][c],e.getOwner()==a.getOwner()&&e!=a&&!t.has(a)&&!o.has(a)){var h=Math.abs(e.getCenterX()-a.getCenterX())-(e.getWidth()/2+a.getWidth()/2),d=Math.abs(e.getCenterY()-a.getCenterY())-(e.getHeight()/2+a.getHeight()/2);h<=this.repulsionRange&&d<=this.repulsionRange&&o.add(a)}e.surrounding=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(o))}for(l=0;l<e.surrounding.length;l++)this.calcRepulsionForce(e,e.surrounding[l])},l.prototype.calcRepulsionRange=function(){return 0},e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(7);function a(e,t,n){r.call(this,e,t,n),this.idealLength=i.DEFAULT_EDGE_LENGTH}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];e.exports=a},function(e,t,n){"use strict";var r=n(3);function i(e,t,n,i){r.call(this,e,t,n,i),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];i.prototype.setGridCoordinates=function(e,t,n,r){this.startX=e,this.finishX=t,this.startY=n,this.finishY=r},e.exports=i},function(e,t,n){"use strict";function r(e,t){this.width=0,this.height=0,null!==e&&null!==t&&(this.height=t,this.width=e)}r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},e.exports=r},function(e,t,n){"use strict";var r=n(14);function i(){this.map={},this.keys=[]}i.prototype.put=function(e,t){var n=r.createID(e);this.contains(n)||(this.map[n]=t,this.keys.push(e))},i.prototype.contains=function(e){return r.createID(e),null!=this.map[e]},i.prototype.get=function(e){var t=r.createID(e);return this.map[t]},i.prototype.keySet=function(){return this.keys},e.exports=i},function(e,t,n){"use strict";var r=n(14);function i(){this.set={}}i.prototype.add=function(e){var t=r.createID(e);this.contains(t)||(this.set[t]=e)},i.prototype.remove=function(e){delete this.set[r.createID(e)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(e){return this.set[r.createID(e)]==e},i.prototype.isEmpty=function(){return 0===this.size()},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(e){for(var t=Object.keys(this.set),n=t.length,r=0;r<n;r++)e.push(this.set[t[r]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(e){for(var t=e.length,n=0;n<t;n++){var r=e[n];this.add(r)}},e.exports=i},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(11),a=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),null===n&&void 0===n||(this.compareFunction=this._defaultCompareFunction);var r=void 0;r=t instanceof i?t.size():t.length,this._quicksort(t,0,r-1)}return r(e,[{key:"_quicksort",value:function(e,t,n){if(t<n){var r=this._partition(e,t,n);this._quicksort(e,t,r),this._quicksort(e,r+1,n)}}},{key:"_partition",value:function(e,t,n){for(var r=this._get(e,t),i=t,a=n;;){for(;this.compareFunction(r,this._get(e,a));)a--;for(;this.compareFunction(this._get(e,i),r);)i++;if(!(i<a))return a;this._swap(e,i,a),i++,a--}}},{key:"_get",value:function(e,t){return e instanceof i?e.get_object_at(t):e[t]}},{key:"_set",value:function(e,t,n){e instanceof i?e.set_object_at(t,n):e[t]=n}},{key:"_swap",value:function(e,t,n){var r=this._get(e,t);this._set(e,t,this._get(e,n)),this._set(e,n,r)}},{key:"_defaultCompareFunction",value:function(e,t){return t>e}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n){var r=arguments.length>2&&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<this.iMax;o++){this.grid[o]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[o][s]=0}this.tracebackGrid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.tracebackGrid[l]=new Array(this.jMax);for(var u=0;u<this.jMax;u++)this.tracebackGrid[l][u]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return r(e,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var e=1;e<this.jMax;e++)this.grid[0][e]=this.grid[0][e-1]+this.gap_penalty,this.tracebackGrid[0][e]=[!1,!1,!0];for(var t=1;t<this.iMax;t++)this.grid[t][0]=this.grid[t-1][0]+this.gap_penalty,this.tracebackGrid[t][0]=[!1,!0,!1];for(var n=1;n<this.iMax;n++)for(var r=1;r<this.jMax;r++){var i=[this.sequence1[n-1]===this.sequence2[r-1]?this.grid[n-1][r-1]+this.match_score:this.grid[n-1][r-1]+this.mismatch_penalty,this.grid[n-1][r]+this.gap_penalty,this.grid[n][r-1]+this.gap_penalty],a=this.arrayAllMaxIndexes(i);this.grid[n][r]=i[a[0]],this.tracebackGrid[n][r]=[a.includes(0),a.includes(1),a.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var e=[];for(e.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});e[0];){var t=e[0],n=this.tracebackGrid[t.pos[0]][t.pos[1]];n[0]&&e.push({pos:[t.pos[0]-1,t.pos[1]-1],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),n[1]&&e.push({pos:[t.pos[0]-1,t.pos[1]],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:"-"+t.seq2}),n[2]&&e.push({pos:[t.pos[0],t.pos[1]-1],seq1:"-"+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),0===t.pos[0]&&0===t.pos[1]&&this.alignments.push({sequence1:t.seq1,sequence2:t.seq2}),e.shift()}return this.alignments}},{key:"getAllIndexes",value:function(e,t){for(var n=[],r=-1;-1!==(r=e.indexOf(t,r+1));)n.push(r);return n}},{key:"arrayAllMaxIndexes",value:function(e){return this.getAllIndexes(e,Math.max.apply(null,e))}}]),e}();e.exports=i},function(e,t,n){"use strict";var r=function(){};r.FDLayout=n(18),r.FDLayoutConstants=n(7),r.FDLayoutEdge=n(19),r.FDLayoutNode=n(20),r.DimensionD=n(21),r.HashMap=n(22),r.HashSet=n(23),r.IGeometry=n(8),r.IMath=n(9),r.Integer=n(10),r.Point=n(12),r.PointD=n(4),r.RandomSeed=n(16),r.RectangleD=n(13),r.Transform=n(17),r.UniqueIDGeneretor=n(14),r.Quicksort=n(24),r.LinkedList=n(11),r.LGraphObject=n(2),r.LGraph=n(5),r.LEdge=n(1),r.LGraphManager=n(6),r.LNode=n(3),r.Layout=n(15),r.LayoutConstants=n(0),r.NeedlemanWunsch=n(25),e.exports=r},function(e,t,n){"use strict";function r(){this.listeners=[]}var i=r.prototype;i.addListener=function(e,t){this.listeners.push({event:e,callback:t})},i.removeListener=function(e,t){for(var n=this.listeners.length;n>=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<this.listeners.length;n++){var r=this.listeners[n];e===r.event&&r.callback(t)}},e.exports=r}])},e.exports=t()},7724:(e,t,n)=>{"use strict";n.d(t,{diagram:()=>S});var r=n(6432),i=n(9373),a=n(1377),o=n.n(a),s=n(4607),l=n.n(s),u=n(1619),c=n(5920),h=n(7201),d=(n(7484),n(7967),n(7856),n(277),n(5625),n(9354),n(1518),n(9542),n(285),n(8734),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},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(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=a.slice.call(arguments,1),h=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]);h.setInput(e,d.yy),d.yy.lexer=h,d.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var g=h.yylloc;a.push(g);var f=h.options&&h.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,y,m,b,x,w,E,T,_,D={};;){if(y=n[n.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==v&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=t.symbols_[_]||_),v=_),m=o[y]&&o[y][v]),void 0===m||!m.length||!m[0]){var C="";for(x in T=[],o[y])this.terminals_[x]&&x>2&&T.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+T.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:T})}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}},m={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!t||n[0].length>t[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:e.getLogger().trace("Found comment",t.yytext);break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23: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:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 22:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 24:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 25:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 26:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 27:case 30:case 31:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 28:case 29:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 32:case 33: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],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR:{rules:[22,23],inclusive:!1},NODE:{rules:[21,24,25,26,27,28,29,30,31,32,33],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());d.parser=d;const p=d,g=e=>(0,r.n)(e,(0,r.g)());let f=[],v=0,y={};const m={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},b=(e,t)=>{y[e]=t},x=e=>{switch(e){case m.DEFAULT:return"no-border";case m.RECT:return"rect";case m.ROUNDED_RECT:return"rounded-rect";case m.CIRCLE:return"circle";case m.CLOUD:return"cloud";case m.BANG:return"bang";case m.HEXAGON:return"hexgon";default:return"no-border"}};let w;const E=e=>y[e],T=Object.freeze(Object.defineProperty({__proto__:null,addNode:(e,t,n,i)=>{r.l.info("addNode",e,t,n,i);const a=(0,r.g)(),o={id:v++,nodeId:g(t),level:e,descr:g(n),type:i,children:[],width:(0,r.g)().mindmap.maxNodeWidth};switch(o.type){case m.ROUNDED_RECT:case m.RECT:case m.HEXAGON:o.padding=2*a.mindmap.padding;break;default:o.padding=a.mindmap.padding}const s=function(e){for(let t=f.length-1;t>=0;t--)if(f[t].level<e)return f[t];return null}(e);if(s)s.children.push(o),f.push(o);else{if(0!==f.length){let e=new Error('There can be only one root. No parent could be found for ("'+o.descr+'")');throw e.hash={text:"branch "+name,token:"branch "+name,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+name+'"']},e}f.push(o)}},clear:()=>{f=[],v=0,y={}},decorateNode:e=>{const t=f[f.length-1];e&&e.icon&&(t.icon=g(e.icon)),e&&e.class&&(t.class=g(e.class))},getElementById:E,getLogger:()=>r.l,getMindmap:()=>f.length>0?f[0]:null,getNodeById:e=>f[e],getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return m.RECT;case"(":return")"===t?m.ROUNDED_RECT:m.CLOUD;case"((":return m.CIRCLE;case")":return m.CLOUD;case"))":return m.BANG;case"{{":return m.HEXAGON;default:return m.DEFAULT}},nodeType:m,get parseError(){return w},sanitizeText:g,setElementForId:b,setErrorHandler:e=>{w=e},type2Str:x},Symbol.toStringTag,{value:"Module"}));function _(e,t){e.each((function(){var e,n=(0,i.Ys)(this),r=n.text().split(/(\s+|<br>)/).reverse(),a=[],o=n.attr("y"),s=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",o).attr("dy",s+"em");for(let i=0;i<r.length;i++)e=r[r.length-1-i],a.push(e),l.text(a.join(" ").trim()),(l.node().getComputedTextLength()>t||"<br>"===e)&&(a.pop(),l.text(a.join(" ").trim()),a="<br>"===e?[""]:[e],l=n.append("tspan").attr("x",0).attr("y",o).attr("dy","1.1em").text(e))}))}const D=function(e,t,n,r){const i=n%11,a=e.append("g");t.section=i;let o="section-"+i;i<0&&(o+=" section-root"),a.attr("class",(t.class?t.class+" ":"")+"mindmap-node "+o);const s=a.append("g"),l=a.append("g"),u=l.append("text").text(t.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(_,t.width).node().getBBox(),c=r.fontSize.replace?r.fontSize.replace("px",""):r.fontSize;if(t.height=u.height+1.1*c*.5+t.padding,t.width=u.width+2*t.padding,t.icon)if(t.type===m.CIRCLE){t.height+=50,t.width+=50;a.append("foreignObject").attr("height","50px").attr("width",t.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+i+" "+t.icon),l.attr("transform","translate("+t.width/2+", "+(t.height/2-1.5*t.padding)+")")}else{t.width+=50;const e=t.height;t.height=Math.max(e,60);const n=Math.abs(t.height-e);a.append("foreignObject").attr("width","60px").attr("height",t.height).attr("style","text-align: center;margin-top:"+n/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+i+" "+t.icon),l.attr("transform","translate("+(25+t.width/2)+", "+(n/2+t.padding/2)+")")}else l.attr("transform","translate("+t.width/2+", "+t.padding/2+")");switch(t.type){case m.DEFAULT:!function(e,t,n){e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 ${t.height-5} v${10-t.height} q0,-5 5,-5 h${t.width-10} q5,0 5,5 v${t.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",t.height).attr("x2",t.width).attr("y2",t.height)}(s,t,i);break;case m.ROUNDED_RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("rx",t.padding).attr("ry",t.padding).attr("width",t.width)}(s,t);break;case m.RECT:!function(e,t){e.append("rect").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("height",t.height).attr("width",t.width)}(s,t);break;case m.CIRCLE:s.attr("transform","translate("+t.width/2+", "+ +t.height/2+")"),function(e,t){e.append("circle").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("r",t.width/2)}(s,t);break;case m.CLOUD:!function(e,t){const n=t.width,r=t.height,i=.15*n,a=.25*n,o=.35*n,s=.2*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 0 0,1 ${.25*n},${-1*n*.1}\n a${o},${o} 1 0,1 ${.4*n},${-1*n*.1}\n a${a},${a} 1 0,1 ${.35*n},${1*n*.2}\n\n a${i},${i} 1 0,1 ${.15*n},${1*r*.35}\n a${s},${s} 1 0,1 ${-1*n*.15},${1*r*.65}\n\n a${a},${i} 1 0,1 ${-1*n*.25},${.15*n}\n a${o},${o} 1 0,1 ${-1*n*.5},0\n a${i},${i} 1 0,1 ${-1*n*.25},${-1*n*.15}\n\n a${i},${i} 1 0,1 ${-1*n*.1},${-1*r*.35}\n a${s},${s} 1 0,1 ${.1*n},${-1*r*.65}\n\n H0 V0 Z`)}(s,t);break;case m.BANG:!function(e,t){const n=t.width,r=t.height,i=.15*n;e.append("path").attr("id","node-"+t.id).attr("class","node-bkg node-"+x(t.type)).attr("d",`M0 0 a${i},${i} 1 0,0 ${.25*n},${-1*r*.1}\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},0\n a${i},${i} 1 0,0 ${.25*n},${1*r*.1}\n\n a${i},${i} 1 0,0 ${.15*n},${1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${1*r*.34}\n a${i},${i} 1 0,0 ${-1*n*.15},${1*r*.33}\n\n a${i},${i} 1 0,0 ${-1*n*.25},${.15*r}\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},0\n a${i},${i} 1 0,0 ${-1*n*.25},${-1*r*.15}\n\n a${i},${i} 1 0,0 ${-1*n*.1},${-1*r*.33}\n a${.8*i},${.8*i} 1 0,0 0,${-1*r*.34}\n a${i},${i} 1 0,0 ${.1*n},${-1*r*.33}\n\n H0 V0 Z`)}(s,t);break;case m.HEXAGON:!function(e,t){const n=t.height,r=n/4,i=t.width-t.padding+2*r;!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+")")}(e,i,n,[{x:r,y:0},{x:i-r,y:0},{x:i,y:-n/2},{x:i-r,y:-n},{x:r,y:-n},{x:0,y:-n/2}],t)}(s,t)}return b(t.id,a),t.height},C=function(e){const t=E(e.id),n=e.x||0,r=e.y||0;t.attr("transform","translate("+n+","+r+")")};function N(e,t,n,r){D(e,t,n,r),t.children&&t.children.forEach(((t,i)=>{N(e,t,n<0?i:n,r)}))}function A(e,t,n,r){t.add({group:"nodes",data:{id:e.id,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=>{A(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 L(e,t){return new Promise((n=>{const a=(0,i.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),s=o()({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),A(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}o().use(l());const S={db:T,renderer:{draw:async(e,t,n,a)=>{const o=(0,r.g)();a.db.clear(),a.parser.parse(e),r.l.debug("Renering info diagram\n"+e);const s=(0,r.g)().securityLevel;let l;"sandbox"===s&&(l=(0,i.Ys)("#i"+t));const u=("sandbox"===s?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body")).select("#"+t);u.append("g");const c=a.db.getMindmap(),h=u.append("g");h.attr("class","mindmap-edges");const d=u.append("g");d.attr("class","mindmap-nodes"),N(d,c,-1,o);const p=await L(c,o);!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){e.nodes().map(((e,t)=>{const n=e.data();n.x=e.position().x,n.y=e.position().y,C(n);const i=E(n.nodeId);r.l.info("Id:",t,"Position: (",e.position().x,", ",e.position().y,")",n),i.attr("transform",`translate(${e.position().x-n.width/2}, ${e.position().y-n.height/2})`),i.attr("attr",`apa-${t})`)}))}(p),(0,r.s)(void 0,u,o.mindmap.padding,o.mindmap.useMaxWidth)}},parser:p,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n<e.THEME_COLOR_LIMIT;n++)e["lineColor"+n]=e["lineColor"+n]||e["cScaleInv"+n],(0,u.Z)(e["lineColor"+n])?e["lineColor"+n]=(0,c.Z)(e["lineColor"+n],20):e["lineColor"+n]=(0,h.Z)(e["lineColor"+n],20);for(let n=0;n<e.THEME_COLOR_LIMIT;n++){const r=""+(17-3*n);t+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {\n fill: ${e["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${e["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${e["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${e["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${r};\n }\n .section-${n-1} line {\n stroke: ${e["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return t})(e)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${e.git0};\n }\n .section-root text {\n fill: ${e.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n`}},1619:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(1691),i=n(1610);const a=e=>{const{r:t,g:n,b:a}=i.Z.parse(e),o=.2126*r.Z.channel.toLinear(t)+.7152*r.Z.channel.toLinear(n)+.0722*r.Z.channel.toLinear(a);return r.Z.lang.round(o)},o=e=>a(e)>=.5,s=e=>!o(e)}}]); \ No newline at end of file diff --git a/assets/js/772c8612.51679971.js b/assets/js/772c8612.51679971.js new file mode 100644 index 000000000..4cca48cc1 --- /dev/null +++ b/assets/js/772c8612.51679971.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3157],{6655:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var i=s(5893),n=s(1151),r=s(1872);const a={id:"licence",title:"License & Attribution",description:"Let's talk copyrights in a human-readable way"},o=void 0,c={id:"licence",title:"License & Attribution",description:"Let's talk copyrights in a human-readable way",source:"@site/sites/licence.mdx",sourceDirName:".",slug:"/licence",permalink:"/sites/licence",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/licence.mdx",tags:[],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1661033369,formattedLastUpdatedAt:"Aug 20, 2022",frontMatter:{id:"licence",title:"License & Attribution",description:"Let's talk copyrights in a human-readable way"}},l={},d=[{value:"Writing & Graphics",id:"writing--graphics",level:2},{value:"Code & Design",id:"code--design",level:2},{value:"Attribution",id:"attribution",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.m,{content:"Let's talk copyrights in a human-readable way."}),"\n",(0,i.jsx)(t.h2,{id:"writing--graphics",children:"Writing & Graphics"}),"\n",(0,i.jsxs)(t.p,{children:["All writing, graphics and other content on the site is my original content (unless stated otherwise), and I license it under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International ",(0,i.jsx)(t.a,{href:"http://creativecommons.org/licenses/by-nc/4.0/",children:"CC BY-NC-SA 4.0"}),". If you are looking at the repository, almost everything in the ",(0,i.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/docs",children:"docs"}),", ",(0,i.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/sites",children:"sites"})," and ",(0,i.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/src/pages",children:"pages"})," is ",(0,i.jsx)(t.a,{href:"https://creativecommons.org/licenses/by-nc-sa/4.0/",children:"CC BY-NC-SA 4.0"})," and available for re-use with attribution:"]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:['"Article Title" \u2015 ',(0,i.jsx)(t.a,{href:"https://mateuszdabrowski.pl/",children:"Mateusz D\u0105browski"})," \u2015 ",(0,i.jsx)(t.a,{href:"https://creativecommons.org/licenses/by-nc-sa/4.0/",children:"CC BY-NC-SA 4.0"})]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",metastring:'title="Attribution Snippet"',children:'<a href="https://mateuszdabrowski.pl/link-to-article/">"Article Title"</a> —\n<a href="https://mateuszdabrowski.pl/">Mateusz D\u0105browski</a> —\n<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>\n'})}),"\n",(0,i.jsx)(t.h2,{id:"code--design",children:"Code & Design"}),"\n",(0,i.jsxs)(t.p,{children:["Site design and its source code are adapted by me and available under the ",(0,i.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/docs/LICENSE",children:"MIT license"})," and are openly available for re-use on ",(0,i.jsx)(t.a,{href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl",children:"GitHub"})]}),"\n",(0,i.jsx)(t.h2,{id:"attribution",children:"Attribution"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Logo is done by ",(0,i.jsx)(t.a,{href:"https://jagusiak.eu",children:"Marek Jagusiak"})]}),"\n",(0,i.jsxs)(t.li,{children:["Profile photo is done by ",(0,i.jsx)(t.a,{href:"https://monochromphoto.pl",children:"Monochrom Photo"})]}),"\n",(0,i.jsxs)(t.li,{children:["Website is built with ",(0,i.jsx)(t.a,{href:"https://v2.docusaurus.io",children:"Docusaurus 2"})]}),"\n",(0,i.jsxs)(t.li,{children:["Search is powered by ",(0,i.jsx)(t.a,{href:"https://www.algolia.com",children:"Algolia"})]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,t,s)=>{s.d(t,{m:()=>r});s(7294);const i="leadText_qzwo";var n=s(5893);const r=e=>{let{content:t}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:i,children:t})})}},1151:(e,t,s)=>{s.d(t,{Z:()=>o,a:()=>a});var i=s(7294);const n={},r=i.createContext(n);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/772c8612.e1066268.js b/assets/js/772c8612.e1066268.js deleted file mode 100644 index 16366f23e..000000000 --- a/assets/js/772c8612.e1066268.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3157],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},i=Object.keys(e);for(a=0;a<i.length;a++)r=i[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)r=i[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),c=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,h=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return r?a.createElement(h,o(o({ref:t},p),{},{components:r})):a.createElement(h,o({ref:t},p))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,o[1]=s;for(var c=2;c<i;c++)o[c]=r[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},5110:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=r(7462),n=(r(7294),r(4137)),i=r(1872);const o={id:"licence",title:"License & Attribution",description:"Let's talk copyrights in a human-readable way"},s=void 0,l={unversionedId:"licence",id:"licence",title:"License & Attribution",description:"Let's talk copyrights in a human-readable way",source:"@site/sites/licence.mdx",sourceDirName:".",slug:"/licence",permalink:"/sites/licence",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/licence.mdx",tags:[],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1661033369,formattedLastUpdatedAt:"Aug 20, 2022",frontMatter:{id:"licence",title:"License & Attribution",description:"Let's talk copyrights in a human-readable way"}},c={},p=[{value:"Writing & Graphics",id:"writing--graphics",level:2},{value:"Code & Design",id:"code--design",level:2},{value:"Attribution",id:"attribution",level:2}],u={toc:p},m="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(m,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(i.m,{content:"Let's talk copyrights in a human-readable way.",mdxType:"LeadText"}),(0,n.kt)("h2",{id:"writing--graphics"},"Writing & Graphics"),(0,n.kt)("p",null,"All writing, graphics and other content on the site is my original content (unless stated otherwise), and I license it under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International ",(0,n.kt)("a",{parentName:"p",href:"http://creativecommons.org/licenses/by-nc/4.0/"},"CC BY-NC-SA 4.0"),". If you are looking at the repository, almost everything in the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/docs"},"docs"),", ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/sites"},"sites")," and ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/src/pages"},"pages")," is ",(0,n.kt)("a",{parentName:"p",href:"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"CC BY-NC-SA 4.0")," and available for re-use with attribution:"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},'"Article Title" \u2015 ',(0,n.kt)("a",{parentName:"p",href:"https://mateuszdabrowski.pl/"},"Mateusz D\u0105browski")," \u2015 ",(0,n.kt)("a",{parentName:"p",href:"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"CC BY-NC-SA 4.0"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="Attribution Snippet"',title:'"Attribution','Snippet"':!0},'<a href="https://mateuszdabrowski.pl/link-to-article/">"Article Title"</a> —\n<a href="https://mateuszdabrowski.pl/">Mateusz D\u0105browski</a> —\n<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>\n')),(0,n.kt)("h2",{id:"code--design"},"Code & Design"),(0,n.kt)("p",null,"Site design and its source code are adapted by me and available under the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/tree/master/docs/LICENSE"},"MIT license")," and are openly available for re-use on ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl"},"GitHub")),(0,n.kt)("h2",{id:"attribution"},"Attribution"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Logo is done by ",(0,n.kt)("a",{parentName:"li",href:"https://jagusiak.eu"},"Marek Jagusiak")),(0,n.kt)("li",{parentName:"ul"},"Profile photo is done by ",(0,n.kt)("a",{parentName:"li",href:"https://monochromphoto.pl"},"Monochrom Photo")),(0,n.kt)("li",{parentName:"ul"},"Website is built with ",(0,n.kt)("a",{parentName:"li",href:"https://v2.docusaurus.io"},"Docusaurus 2")),(0,n.kt)("li",{parentName:"ul"},"Search is powered by ",(0,n.kt)("a",{parentName:"li",href:"https://www.algolia.com"},"Algolia"))))}d.isMDXComponent=!0},1872:(e,t,r)=>{r.d(t,{m:()=>i});var a=r(7294);const n="leadText_qzwo",i=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:n},t))}}}]); \ No newline at end of file diff --git a/assets/js/7827587b.59bf63a4.js b/assets/js/7827587b.59bf63a4.js deleted file mode 100644 index c4b2bc2fc..000000000 --- a/assets/js/7827587b.59bf63a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4507],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>S});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,S=u["".concat(l,".").concat(d)]||u[d]||m[d]||r;return n?a.createElement(S,o(o({ref:t},c),{},{components:n})):a.createElement(S,o({ref:t},c))}));function S(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:i,o[1]=s;for(var p=2;p<r;p++)o[p]=n[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>r});var a=n(7294);const i="leadText_qzwo",r=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},260:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var a=n(7462),i=(n(7294),n(4137)),r=n(1872);const o={id:"ampscript-in-ssjs",title:"AMPScript in SSJS",sidebar_label:"AMPScript in SSJS",description:"Not all AMPScript functions are available in SSJS. But you still can use them.",image:"img/og/og-image-ampscript-in-ssjs.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet"]},s=void 0,l={unversionedId:"ssjs/snippets/ampscript-in-ssjs",id:"ssjs/snippets/ampscript-in-ssjs",title:"AMPScript in SSJS",description:"Not all AMPScript functions are available in SSJS. But you still can use them.",source:"@site/docs/ssjs/snippets/ampscript-in-ssjs.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/ampscript-in-ssjs",permalink:"/docs/ssjs/snippets/ampscript-in-ssjs",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/ampscript-in-ssjs.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Snippet",permalink:"/docs/tags/snippet"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"ampscript-in-ssjs",title:"AMPScript in SSJS",sidebar_label:"AMPScript in SSJS",description:"Not all AMPScript functions are available in SSJS. But you still can use them.",image:"img/og/og-image-ampscript-in-ssjs.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet"]},sidebar:"snippets",previous:{title:"MobileConnect Phone Change",permalink:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},next:{title:"JS Snippets",permalink:"/docs/category/js-snippets"}},p={},c=[{value:"Problem with missing SSJS functions",id:"problem-with-missing-ssjs-functions",level:2},{value:"Solution",id:"solution",level:2},{value:"Options",id:"options",level:2},{value:"Long AMPScript Code",id:"long-ampscript-code",level:3},{value:"Dynamic AMPScript Code",id:"dynamic-ampscript-code",level:3},{value:"Working with AMPScript on Lists & Objects",id:"working-with-ampscript-on-lists--objects",level:3}],u={toc:c},m="wrapper";function d(e){let{components:t,...n}=e;return(0,i.kt)(m,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(r.m,{content:"Not all AMPScript functions are available in SSJS. But you still can use them.",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"problem-with-missing-ssjs-functions"},"Problem with missing SSJS functions"),(0,i.kt)("p",null,"SSJS language has many features missing from AMPScript - ",(0,i.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#try-to-catch-the-error"},"try/catch blocks"),", arrays and objects to mention the most used ones. But some things are available only in AMPScript."),(0,i.kt)("p",null,"Some, like ",(0,i.kt)("inlineCode",{parentName:"p"},"ProperCase")," function, can be recreated in SSJS with a bit of RegEx creativity. Other, like ",(0,i.kt)("inlineCode",{parentName:"p"},"RetrieveSalesforceObjects"),", cannot (unless you decide on building custom wrappers around Salesforce API)."),(0,i.kt)("p",null,"Either way, you are in for a time consuming, error-prone custom coding. Is there a better way?"),(0,i.kt)("h2",{id:"solution"},"Solution"),(0,i.kt)("p",null,"You guessed it - yes, there is a better way. You can run AMPScript code with your SSJS. The simple answer to this problem is ",(0,i.kt)("inlineCode",{parentName:"p"},"Platform.Function.TreatAsContent()")," SSJS function."),(0,i.kt)("p",null,"But the good answer is few lines longer:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/**\n * @function ampScript\n * @description Executes provided AMPScript code and returns value assigned to @Response variable\n * @param {string} code - String of AMPScript code without start/end delimiters. Final outcome should be assigned to @Response to enable passing back to SSJS\n * @return {?string} - Returns value from AMPScript execution if any was assigned to @Response variable\n */\nfunction ampScript(code) {\n var ampBlock = '\\%\\%[' + code + ']\\%\\%';\n Platform.Function.TreatAsContent(ampBlock);\n return Variable.GetValue('@response');\n};\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"As we are using ",(0,i.kt)("inlineCode",{parentName:"p"},"Variable.GetValue")," here, you will need to import Salesforce Marketing Cloud SSJS Core library at the top of your script."),(0,i.kt)("p",{parentName:"admonition"},"Just add ",(0,i.kt)("inlineCode",{parentName:"p"},"Platform.Load('core', '1')")," right after ",(0,i.kt)("inlineCode",{parentName:"p"},'<script runat="server">')," and you are good to go!")),(0,i.kt)("p",null,"Instead of writing your AMPScript execution wrapper every time from scratch, here is a ready-to-use function that you can copy-paste across your scripts that allows you to use ampscript and do it gracefully."),(0,i.kt)("p",null,"Sure, it still uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"Platform.Function.TreatAsContent()")," at its heart, but there are two additional tricks:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("inlineCode",{parentName:"li"},"var ampBlock = '\\%\\%[' + code + ']\\%\\%'"),": allows you to write AMPScript without the block symbols and adds them in the last moment. This way, Marketing Cloud will execute your code once you pass it to the ",(0,i.kt)("inlineCode",{parentName:"li"},"Platform.Function.TreatAsContent()")," function. It is essential when you want to ",(0,i.kt)("a",{parentName:"li",href:"#dynamic-ampscript-code"},"insert SSJS in your AMPScript"),"."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("inlineCode",{parentName:"li"},"return Variable.GetValue('@response');"),": allows you to pull back data from your AMPScript to the SSJS. For it to work, you must ",(0,i.kt)("inlineCode",{parentName:"li"},"SET")," the ",(0,i.kt)("inlineCode",{parentName:"li"},"@response")," variable in your AMPScript. Whatever value you assign to the ",(0,i.kt)("inlineCode",{parentName:"li"},"@response")," in the AMPScript context, will be returned to your SSJS context.")),(0,i.kt)("p",null,"How to use it? Pass the AMPScript code in the function and, if you want to do something with ",(0,i.kt)("inlineCode",{parentName:"p"},"@response")," value, assign it to an SSJS variable."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="As JavaScript lacks native ProperCase, we can use AMPScript for that"',title:'"As',JavaScript:!0,lacks:!0,native:!0,"ProperCase,":!0,we:!0,can:!0,use:!0,AMPScript:!0,for:!0,'that"':!0},"var properCaseFullName = ampScript(\"SET @response = ProperCase(AttributeValue('fullName'))\");\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Be sure only to use this approach if there is no equivalent SSJS solution, as mixing languages will ",(0,i.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-vs-ampscript-performance"},"impact performance"),". It is crucial for code in the messages that Marketing Cloud will execute on send time."),(0,i.kt)("p",{parentName:"admonition"},"For example, if you are only planning to use ProperCase, it might be better to go the RegEx path for significant volume messaging.")),(0,i.kt)("h2",{id:"options"},"Options"),(0,i.kt)("p",null,"You can adapt the above script to suit your needs better."),(0,i.kt)("h3",{id:"long-ampscript-code"},"Long AMPScript Code"),(0,i.kt)("p",null,"Above example is a short and straightforward AMPScript. However, you will need a bit more code to do the job in many cases. You can write it as a single line if you want, but I recommend you split it into separate lines for readability purposes."),(0,i.kt)("p",null,"You can do it quickly, by just concatenating strings with ",(0,i.kt)("inlineCode",{parentName:"p"},"+"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"title=\"Check whether there is a Campaign in Salesforce called 'WelcomeCampaign2021'\"",title:'"Check',whether:!0,there:!0,is:!0,a:!0,Campaign:!0,in:!0,Salesforce:!0,called:!0,"'WelcomeCampaign2021'\"":!0},"var response = ampScript(\"SET @retrieve = RetrieveSalesforceObjects(\"\n + \"'Campaign', 'Id', 'Name', '=', 'WelcomeCampaign2021') \"\n + \"IF RowCount(@retrieve) > 0 THEN SET @response = 'true' \"\n + \"ELSE SET @response = 'false' ENDIF\");\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"To use any Salesforce Object functions, you will need to have Marketing Cloud Connect implemented to tie in your Marketing Cloud and Sales or Service Cloud.")),(0,i.kt)("p",null,"Be sure always to check, whether you have space either at the end of the previous line or beginning of the new line. Otherwise, after concatenation, you might end up with incorrect code."),(0,i.kt)("h3",{id:"dynamic-ampscript-code"},"Dynamic AMPScript Code"),(0,i.kt)("p",null,"Using AMPScript via SSJS not only enables additional features for Server-Side JavaScript. It also allows you to make your AMPScript more dynamic by leveraging variables in the loops:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'{4} title="Same check as above, but for multiple campaigns and output to an array"',"{4}":!0,title:'"Same',check:!0,as:!0,"above,":!0,but:!0,for:!0,multiple:!0,campaigns:!0,and:!0,output:!0,to:!0,an:!0,'array"':!0},"var availableCampaigns = [];\nfor (var campaignName in campaignList) {\n var response = ampScript(\"SET @retrieve = RetrieveSalesforceObjects(\"\n + \"'Campaign', 'Id', 'Name', '=', '\" + campaignName + \"') \"\n + \"IF RowCount(@retrieve) > 0 THEN SET @response = 'true' \"\n + \"ELSE SET @response = 'false' ENDIF\");\n if (reponse) availableCampaigns.push(campaignName);\n};\n")),(0,i.kt)("p",null,"It is even more useful when you have variability in what you want to create. For example, let's consider a use case where you want to create Campaigns in Salesforce from Marketing Cloud, but only some of your campaigns have an End Date known from the beginning."),(0,i.kt)("p",null,"In ",(0,i.kt)("inlineCode",{parentName:"p"},"CreateSalesforceObject")," AMPScript function, you must pass all fields with their values and a count of fields added to the object. With SSJS, you can use the ",(0,i.kt)("inlineCode",{parentName:"p"},"length")," method to count the Campaign's fields in each loop's run. Then pass the outcome to the call parameters just as in the example above."),(0,i.kt)("h3",{id:"working-with-ampscript-on-lists--objects"},"Working with AMPScript on Lists & Objects"),(0,i.kt)("p",null,"Unfortunately, AMPScript doesn't support list or objects. Fortunately, SSJS do. We will need a bit of creativity to pull that off, but it makes life so much easier once done."),(0,i.kt)("p",null,"The easy example is visible in the ",(0,i.kt)("a",{parentName:"p",href:"#dynamic-ampscript-code"},"previous section")," - the snippet creates an array of Campaigns available in Salesforce."),(0,i.kt)("p",null,"But we can go so much farther than that:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{8-9,11,14}","{8-9,11,14}":!0},"var response = ampScript(\"SET @retrieve = RetrieveSalesforceObjects(\"\n + \"'Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True') \"\n + \"SET @rowCount = RowCount(@retrieve) SET @response = '' \"\n + \"IF @rowCount > 0 THEN FOR @counter = 1 TO @rowCount DO \"\n + \"SET @row = Row(@retrieve, @counter) \"\n + \"SET @name = Field(@row, 'Name') SET @id = Field(@row, 'Id') \"\n + \"SET @startDate = Field(@row, 'StartDate') SET @endDate = Field(@row, 'EndDate') \"\n + \"SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate) \"\n + \"SET @response = Concat(@response, @rowData, ';') \"\n + \"NEXT @counter ENDIF\");\nresponse = response.split(';');\nvar campaignData = [];\nfor (var i = 0; i < response.length - 1; i++) {\n var responseRowData = response[i].split(',');\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n });\n};\n")),(0,i.kt)("p",null,"Ok, a lot to unpack. But trust me, it's worth it. Let's go!"),(0,i.kt)("p",null,"The first line is easy - we are using ",(0,i.kt)("inlineCode",{parentName:"p"},"RetrieveSalesforceObjects")," function to get a list of all active Salesforce Campaigns and limit the fields we need about them."),(0,i.kt)("p",null,"Next, we have a standard AMPScript way of iterating over the function's outcomes."),(0,i.kt)("p",null,"Now starts the exciting part - we are creating an AMPScript variable for each field, concatenate it using a comma and then adding it to the end of the ",(0,i.kt)("inlineCode",{parentName:"p"},"@response")," variable - semicolon-separated."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-css",metastring:'title="Structure of the AMPScript output"',title:'"Structure',of:!0,the:!0,AMPScript:!0,'output"':!0},"Name1,Id1,StartDate1,EndDate1;Name2,Id2,StartDate2,EndDate2;Name3,Id3,StartDate3,EndDate3\n")),(0,i.kt)("p",null,"As we assigned the final string to ",(0,i.kt)("inlineCode",{parentName:"p"},"@response"),", the function will return it to the SSJS context."),(0,i.kt)("p",null,"Once it's there, we are leveraging the SSJS by splitting the string on semicolons to create an array of substrings containing each Salesforce Campaign's details."),(0,i.kt)("p",null,"Then we loop over it and split each Campaign string by comma. With the deconstructed data, we create a nice and clean ",(0,i.kt)("inlineCode",{parentName:"p"},"campaignData")," object that we can use in the rest of our code. Neat."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7827587b.5c2a3ddb.js b/assets/js/7827587b.5c2a3ddb.js new file mode 100644 index 000000000..99e61b76b --- /dev/null +++ b/assets/js/7827587b.5c2a3ddb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4507],{7237:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var s=n(5893),i=n(1151),a=n(1872);const o={id:"ampscript-in-ssjs",title:"AMPScript in SSJS",sidebar_label:"AMPScript in SSJS",description:"Not all AMPScript functions are available in SSJS. But you still can use them.",image:"img/og/og-image-ampscript-in-ssjs.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet"]},r=void 0,c={id:"ssjs/snippets/ampscript-in-ssjs",title:"AMPScript in SSJS",description:"Not all AMPScript functions are available in SSJS. But you still can use them.",source:"@site/docs/ssjs/snippets/ampscript-in-ssjs.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/ampscript-in-ssjs",permalink:"/docs/ssjs/snippets/ampscript-in-ssjs",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/ampscript-in-ssjs.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Snippet",permalink:"/docs/tags/snippet"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"ampscript-in-ssjs",title:"AMPScript in SSJS",sidebar_label:"AMPScript in SSJS",description:"Not all AMPScript functions are available in SSJS. But you still can use them.",image:"img/og/og-image-ampscript-in-ssjs.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet"]},sidebar:"snippets",previous:{title:"MobileConnect Phone Change",permalink:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},next:{title:"JS Snippets",permalink:"/docs/category/js-snippets"}},l={},p=[{value:"Problem with missing SSJS functions",id:"problem-with-missing-ssjs-functions",level:2},{value:"Solution",id:"solution",level:2},{value:"Options",id:"options",level:2},{value:"Long AMPScript Code",id:"long-ampscript-code",level:3},{value:"Dynamic AMPScript Code",id:"dynamic-ampscript-code",level:3},{value:"Working with AMPScript on Lists & Objects",id:"working-with-ampscript-on-lists--objects",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.m,{content:"Not all AMPScript functions are available in SSJS. But you still can use them."}),"\n",(0,s.jsx)(t.h2,{id:"problem-with-missing-ssjs-functions",children:"Problem with missing SSJS functions"}),"\n",(0,s.jsxs)(t.p,{children:["SSJS language has many features missing from AMPScript - ",(0,s.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs#try-to-catch-the-error",children:"try/catch blocks"}),", arrays and objects to mention the most used ones. But some things are available only in AMPScript."]}),"\n",(0,s.jsxs)(t.p,{children:["Some, like ",(0,s.jsx)(t.code,{children:"ProperCase"})," function, can be recreated in SSJS with a bit of RegEx creativity. Other, like ",(0,s.jsx)(t.code,{children:"RetrieveSalesforceObjects"}),", cannot (unless you decide on building custom wrappers around Salesforce API)."]}),"\n",(0,s.jsx)(t.p,{children:"Either way, you are in for a time consuming, error-prone custom coding. Is there a better way?"}),"\n",(0,s.jsx)(t.h2,{id:"solution",children:"Solution"}),"\n",(0,s.jsxs)(t.p,{children:["You guessed it - yes, there is a better way. You can run AMPScript code with your SSJS. The simple answer to this problem is ",(0,s.jsx)(t.code,{children:"Platform.Function.TreatAsContent()"})," SSJS function."]}),"\n",(0,s.jsx)(t.p,{children:"But the good answer is few lines longer:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/**\n * @function ampScript\n * @description Executes provided AMPScript code and returns value assigned to @Response variable\n * @param {string} code - String of AMPScript code without start/end delimiters. Final outcome should be assigned to @Response to enable passing back to SSJS\n * @return {?string} - Returns value from AMPScript execution if any was assigned to @Response variable\n */\nfunction ampScript(code) {\n var ampBlock = '\\%\\%[' + code + ']\\%\\%';\n Platform.Function.TreatAsContent(ampBlock);\n return Variable.GetValue('@response');\n};\n"})}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["As we are using ",(0,s.jsx)(t.code,{children:"Variable.GetValue"})," here, you will need to import Salesforce Marketing Cloud SSJS Core library at the top of your script."]}),(0,s.jsxs)(t.p,{children:["Just add ",(0,s.jsx)(t.code,{children:"Platform.Load('core', '1')"})," right after ",(0,s.jsx)(t.code,{children:'<script runat="server">'})," and you are good to go!"]})]}),"\n",(0,s.jsx)(t.p,{children:"Instead of writing your AMPScript execution wrapper every time from scratch, here is a ready-to-use function that you can copy-paste across your scripts that allows you to use ampscript and do it gracefully."}),"\n",(0,s.jsxs)(t.p,{children:["Sure, it still uses the ",(0,s.jsx)(t.code,{children:"Platform.Function.TreatAsContent()"})," at its heart, but there are two additional tricks:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"var ampBlock = '\\%\\%[' + code + ']\\%\\%'"}),": allows you to write AMPScript without the block symbols and adds them in the last moment. This way, Marketing Cloud will execute your code once you pass it to the ",(0,s.jsx)(t.code,{children:"Platform.Function.TreatAsContent()"})," function. It is essential when you want to ",(0,s.jsx)(t.a,{href:"#dynamic-ampscript-code",children:"insert SSJS in your AMPScript"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"return Variable.GetValue('@response');"}),": allows you to pull back data from your AMPScript to the SSJS. For it to work, you must ",(0,s.jsx)(t.code,{children:"SET"})," the ",(0,s.jsx)(t.code,{children:"@response"})," variable in your AMPScript. Whatever value you assign to the ",(0,s.jsx)(t.code,{children:"@response"})," in the AMPScript context, will be returned to your SSJS context."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["How to use it? Pass the AMPScript code in the function and, if you want to do something with ",(0,s.jsx)(t.code,{children:"@response"})," value, assign it to an SSJS variable."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="As JavaScript lacks native ProperCase, we can use AMPScript for that"',children:"var properCaseFullName = ampScript(\"SET @response = ProperCase(AttributeValue('fullName'))\");\n"})}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["Be sure only to use this approach if there is no equivalent SSJS solution, as mixing languages will ",(0,s.jsx)(t.a,{href:"/docs/ssjs/ssjs-vs-ampscript-performance",children:"impact performance"}),". It is crucial for code in the messages that Marketing Cloud will execute on send time."]}),(0,s.jsx)(t.p,{children:"For example, if you are only planning to use ProperCase, it might be better to go the RegEx path for significant volume messaging."})]}),"\n",(0,s.jsx)(t.h2,{id:"options",children:"Options"}),"\n",(0,s.jsx)(t.p,{children:"You can adapt the above script to suit your needs better."}),"\n",(0,s.jsx)(t.h3,{id:"long-ampscript-code",children:"Long AMPScript Code"}),"\n",(0,s.jsx)(t.p,{children:"Above example is a short and straightforward AMPScript. However, you will need a bit more code to do the job in many cases. You can write it as a single line if you want, but I recommend you split it into separate lines for readability purposes."}),"\n",(0,s.jsxs)(t.p,{children:["You can do it quickly, by just concatenating strings with ",(0,s.jsx)(t.code,{children:"+"}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:"title=\"Check whether there is a Campaign in Salesforce called 'WelcomeCampaign2021'\"",children:"var response = ampScript(\"SET @retrieve = RetrieveSalesforceObjects(\"\n + \"'Campaign', 'Id', 'Name', '=', 'WelcomeCampaign2021') \"\n + \"IF RowCount(@retrieve) > 0 THEN SET @response = 'true' \"\n + \"ELSE SET @response = 'false' ENDIF\");\n"})}),"\n",(0,s.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,s.jsx)(t.p,{children:"To use any Salesforce Object functions, you will need to have Marketing Cloud Connect implemented to tie in your Marketing Cloud and Sales or Service Cloud."})}),"\n",(0,s.jsx)(t.p,{children:"Be sure always to check, whether you have space either at the end of the previous line or beginning of the new line. Otherwise, after concatenation, you might end up with incorrect code."}),"\n",(0,s.jsx)(t.h3,{id:"dynamic-ampscript-code",children:"Dynamic AMPScript Code"}),"\n",(0,s.jsx)(t.p,{children:"Using AMPScript via SSJS not only enables additional features for Server-Side JavaScript. It also allows you to make your AMPScript more dynamic by leveraging variables in the loops:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'{4} title="Same check as above, but for multiple campaigns and output to an array"',children:"var availableCampaigns = [];\nfor (var campaignName in campaignList) {\n var response = ampScript(\"SET @retrieve = RetrieveSalesforceObjects(\"\n + \"'Campaign', 'Id', 'Name', '=', '\" + campaignName + \"') \"\n + \"IF RowCount(@retrieve) > 0 THEN SET @response = 'true' \"\n + \"ELSE SET @response = 'false' ENDIF\");\n if (reponse) availableCampaigns.push(campaignName);\n};\n"})}),"\n",(0,s.jsx)(t.p,{children:"It is even more useful when you have variability in what you want to create. For example, let's consider a use case where you want to create Campaigns in Salesforce from Marketing Cloud, but only some of your campaigns have an End Date known from the beginning."}),"\n",(0,s.jsxs)(t.p,{children:["In ",(0,s.jsx)(t.code,{children:"CreateSalesforceObject"})," AMPScript function, you must pass all fields with their values and a count of fields added to the object. With SSJS, you can use the ",(0,s.jsx)(t.code,{children:"length"})," method to count the Campaign's fields in each loop's run. Then pass the outcome to the call parameters just as in the example above."]}),"\n",(0,s.jsx)(t.h3,{id:"working-with-ampscript-on-lists--objects",children:"Working with AMPScript on Lists & Objects"}),"\n",(0,s.jsx)(t.p,{children:"Unfortunately, AMPScript doesn't support list or objects. Fortunately, SSJS do. We will need a bit of creativity to pull that off, but it makes life so much easier once done."}),"\n",(0,s.jsxs)(t.p,{children:["The easy example is visible in the ",(0,s.jsx)(t.a,{href:"#dynamic-ampscript-code",children:"previous section"})," - the snippet creates an array of Campaigns available in Salesforce."]}),"\n",(0,s.jsx)(t.p,{children:"But we can go so much farther than that:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:"{8-9,11,14}",children:"var response = ampScript(\"SET @retrieve = RetrieveSalesforceObjects(\"\n + \"'Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True') \"\n + \"SET @rowCount = RowCount(@retrieve) SET @response = '' \"\n + \"IF @rowCount > 0 THEN FOR @counter = 1 TO @rowCount DO \"\n + \"SET @row = Row(@retrieve, @counter) \"\n + \"SET @name = Field(@row, 'Name') SET @id = Field(@row, 'Id') \"\n + \"SET @startDate = Field(@row, 'StartDate') SET @endDate = Field(@row, 'EndDate') \"\n + \"SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate) \"\n + \"SET @response = Concat(@response, @rowData, ';') \"\n + \"NEXT @counter ENDIF\");\nresponse = response.split(';');\nvar campaignData = [];\nfor (var i = 0; i < response.length - 1; i++) {\n var responseRowData = response[i].split(',');\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n });\n};\n"})}),"\n",(0,s.jsx)(t.p,{children:"Ok, a lot to unpack. But trust me, it's worth it. Let's go!"}),"\n",(0,s.jsxs)(t.p,{children:["The first line is easy - we are using ",(0,s.jsx)(t.code,{children:"RetrieveSalesforceObjects"})," function to get a list of all active Salesforce Campaigns and limit the fields we need about them."]}),"\n",(0,s.jsx)(t.p,{children:"Next, we have a standard AMPScript way of iterating over the function's outcomes."}),"\n",(0,s.jsxs)(t.p,{children:["Now starts the exciting part - we are creating an AMPScript variable for each field, concatenate it using a comma and then adding it to the end of the ",(0,s.jsx)(t.code,{children:"@response"})," variable - semicolon-separated."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-css",metastring:'title="Structure of the AMPScript output"',children:"Name1,Id1,StartDate1,EndDate1;Name2,Id2,StartDate2,EndDate2;Name3,Id3,StartDate3,EndDate3\n"})}),"\n",(0,s.jsxs)(t.p,{children:["As we assigned the final string to ",(0,s.jsx)(t.code,{children:"@response"}),", the function will return it to the SSJS context."]}),"\n",(0,s.jsx)(t.p,{children:"Once it's there, we are leveraging the SSJS by splitting the string on semicolons to create an array of substrings containing each Salesforce Campaign's details."}),"\n",(0,s.jsxs)(t.p,{children:["Then we loop over it and split each Campaign string by comma. With the deconstructed data, we create a nice and clean ",(0,s.jsx)(t.code,{children:"campaignData"})," object that we can use in the rest of our code. Neat."]})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>a});n(7294);const s="leadText_qzwo";var i=n(5893);const a=e=>{let{content:t}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:s,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>o});var s=n(7294);const i={},a=s.createContext(i);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/788.692bdc3b.js b/assets/js/788.692bdc3b.js new file mode 100644 index 000000000..7ab15d978 --- /dev/null +++ b/assets/js/788.692bdc3b.js @@ -0,0 +1,14570 @@ +"use strict"; +exports.id = 788; +exports.ids = [788]; +exports.modules = { + +/***/ 33183: +/***/ ((__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-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +;// 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<unknown>} 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<string>} */ + 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<T>} 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<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + 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<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * 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<Extension>} 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<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | 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<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + 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<HtmlExtension>} 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<StackItem>} */ + 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<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + 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<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + 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<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + 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<Point, '_bufferIndex' | '_index'> | 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<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + 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> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + 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<Construct>} 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<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +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<Chunk>} */ + 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<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + 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<Code>} */ + 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 + * <a> + * <a\>b> + * <a b> + * <a)> + * 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 (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @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> + * ^ + * > | 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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <a\*a> + * ^ + * ``` + * + * @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<Code>} */ + 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<Code>} */ + 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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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 + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @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 `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @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 + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @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 + * > | <div/> + * ^ + * ``` + * + * @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 + * > | <x/> + * ^ + * ``` + * + * @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 + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @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 + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @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 + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @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 + * > | <!--xxx--> + * ^ + * ``` + * + * @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 + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | 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 + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @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 + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @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 + * > | <div> + * ^ + * | + * ``` + * + * @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<Code>} */ + 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<string, string>} + */ +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<Event>} */ + 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 + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @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<Event>} */ + 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<Code>} */ + 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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @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<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> 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 <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> 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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> 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 `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> 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 <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <![CDATA[>&<]]> 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 <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <!b> 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 <?b?> 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 <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> 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 </b> 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 `<x`, in opening tag name. + * + * ```markdown + * > | a <b> 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 <b> 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 <b c> 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 <b c> 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 <b c=d> 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 <b c="d"> 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 <b c=d> 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 <b c="d"> 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 <b c="d"> 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 <!--a + * ^ + * | b--> + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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<Chunk>} + */ + +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<Chunk>} */ + 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<Event>} events + * @returns {Array<Event>} + */ +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<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} 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<string, Handle>} 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<CompileContext, 'sliceSerialize'>} 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<CompileContext, 'sliceSerialize'>} 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<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(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 {<Kind extends Node>(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<Extension | Array<Extension>> | 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<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + 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<Event>} 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<StaticPhrasingContent>} */ + // @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<Extension | Array<Extension>>} 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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + 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( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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; + } +}; + + + +/***/ }), + +/***/ 52788: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(76365); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(33183); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + + +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, 10, 12, 14, 16, 18, 19, 21, 23], $V1 = [2, 6], $V2 = [1, 3], $V3 = [1, 5], $V4 = [1, 6], $V5 = [1, 7], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $V7 = [1, 25], $V8 = [1, 26], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 30], $Vc = [1, 31], $Vd = [1, 32], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 43], $Vk = [1, 42], $Vl = [1, 47], $Vm = [1, 50], $Vn = [1, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $Vo = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36], $Vp = [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], $Vq = [1, 64]; + var parser2 = { + trace: function trace() { + }, + 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 anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.setOrientation($$[$0]); + break; + case 9: + yy.setDiagramTitle($$[$0].text.trim()); + break; + case 12: + yy.setLineData({ text: "", type: "text" }, $$[$0]); + break; + case 13: + yy.setLineData($$[$0 - 1], $$[$0]); + break; + case 14: + yy.setBarData({ text: "", type: "text" }, $$[$0]); + break; + case 15: + yy.setBarData($$[$0 - 1], $$[$0]); + break; + case 16: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 17: + case 18: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 19: + this.$ = $$[$0 - 1]; + break; + case 20: + this.$ = [Number($$[$0 - 2]), ...$$[$0]]; + break; + case 21: + this.$ = [Number($$[$0])]; + break; + case 22: + yy.setXAxisTitle($$[$0]); + break; + case 23: + yy.setXAxisTitle($$[$0 - 1]); + break; + case 24: + yy.setXAxisTitle({ type: "text", text: "" }); + break; + case 25: + yy.setXAxisBand($$[$0]); + break; + case 26: + yy.setXAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); + break; + case 27: + this.$ = $$[$0 - 1]; + break; + case 28: + this.$ = [$$[$0 - 2], ...$$[$0]]; + break; + case 29: + this.$ = [$$[$0]]; + break; + case 30: + yy.setYAxisTitle($$[$0]); + break; + case 31: + yy.setYAxisTitle($$[$0 - 1]); + break; + case 32: + yy.setYAxisTitle({ type: "text", text: "" }); + break; + case 33: + yy.setYAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); + break; + case 37: + this.$ = { text: $$[$0], type: "text" }; + break; + case 38: + this.$ = { text: $$[$0], type: "text" }; + break; + case 39: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 40: + this.$ = $$[$0]; + break; + case 41: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + } + }, + table: [o($V0, $V1, { 3: 1, 4: 2, 7: 4, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [3] }, o($V0, $V1, { 4: 2, 7: 4, 3: 8, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), o($V0, $V1, { 4: 2, 7: 4, 6: 9, 3: 10, 5: $V2, 8: [1, 11], 34: $V3, 35: $V4, 36: $V5 }), { 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] }, o($V6, [2, 34]), o($V6, [2, 35]), o($V6, [2, 36]), { 1: [2, 1] }, o($V0, $V1, { 4: 2, 7: 4, 3: 21, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 3] }, o($V6, [2, 5]), o($V0, [2, 7], { 4: 22, 34: $V3, 35: $V4, 36: $V5 }), { 11: 23, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 39, 13: 38, 24: $Vj, 27: $Vk, 29: 40, 30: 41, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 45, 15: 44, 27: $Vl, 33: 46, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 49, 17: 48, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 52, 17: 51, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 20: [1, 53] }, { 22: [1, 54] }, o($Vn, [2, 18]), { 1: [2, 2] }, o($Vn, [2, 8]), o($Vn, [2, 9]), o($Vo, [2, 37], { 40: 55, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }), o($Vo, [2, 38]), o($Vo, [2, 39]), o($Vp, [2, 40]), o($Vp, [2, 42]), o($Vp, [2, 43]), o($Vp, [2, 44]), o($Vp, [2, 45]), o($Vp, [2, 46]), o($Vp, [2, 47]), o($Vp, [2, 48]), o($Vp, [2, 49]), o($Vp, [2, 50]), o($Vp, [2, 51]), o($Vn, [2, 10]), o($Vn, [2, 22], { 30: 41, 29: 56, 24: $Vj, 27: $Vk }), o($Vn, [2, 24]), o($Vn, [2, 25]), { 31: [1, 57] }, { 11: 59, 32: 58, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o($Vn, [2, 11]), o($Vn, [2, 30], { 33: 60, 27: $Vl }), o($Vn, [2, 32]), { 31: [1, 61] }, o($Vn, [2, 12]), { 17: 62, 24: $Vm }, { 25: 63, 27: $Vq }, o($Vn, [2, 14]), { 17: 65, 24: $Vm }, o($Vn, [2, 16]), o($Vn, [2, 17]), o($Vp, [2, 41]), o($Vn, [2, 23]), { 27: [1, 66] }, { 26: [1, 67] }, { 26: [2, 29], 28: [1, 68] }, o($Vn, [2, 31]), { 27: [1, 69] }, o($Vn, [2, 13]), { 26: [1, 70] }, { 26: [2, 21], 28: [1, 71] }, o($Vn, [2, 15]), o($Vn, [2, 26]), o($Vn, [2, 27]), { 11: 59, 32: 72, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o($Vn, [2, 33]), o($Vn, [2, 19]), { 25: 73, 27: $Vq }, { 26: [2, 28] }, { 26: [2, 20] }], + defaultActions: { 8: [2, 1], 10: [2, 3], 21: [2, 2], 72: [2, 28], 73: [2, 20] }, + 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: + this.popState(); + return 34; + case 3: + this.popState(); + return 34; + case 4: + return 34; + case 5: + break; + case 6: + return 10; + case 7: + this.pushState("acc_title"); + return 19; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.pushState("acc_descr"); + return 21; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.pushState("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + return 5; + case 15: + return 8; + case 16: + this.pushState("axis_data"); + return "X_AXIS"; + case 17: + this.pushState("axis_data"); + return "Y_AXIS"; + case 18: + this.pushState("axis_band_data"); + return 24; + case 19: + return 31; + case 20: + this.pushState("data"); + return 16; + case 21: + this.pushState("data"); + return 18; + case 22: + this.pushState("data_inner"); + return 24; + case 23: + return 27; + case 24: + this.popState(); + return 26; + case 25: + this.popState(); + break; + case 26: + this.pushState("string"); + break; + case 27: + this.popState(); + 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 43: + break; + 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<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/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": true }, "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": true }, "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": true }, "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": true }, "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [], "inclusive": false }, "md_string": { "rules": [], "inclusive": false }, "string": { "rules": [27, 28], "inclusive": false }, "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": 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; +function isBarPlot(data) { + return data.type === "bar"; +} +function isBandAxisData(data) { + return data.type === "band"; +} +function isLinearAxisData(data) { + return data.type === "linear"; +} +class TextDimensionCalculatorWithFont { + constructor(parentGroup) { + this.parentGroup = parentGroup; + } + getMaxDimension(texts, fontSize) { + if (!this.parentGroup) { + return { + width: texts.reduce((acc, cur) => Math.max(cur.length, acc), 0) * fontSize, + height: fontSize + }; + } + const dimension = { + width: 0, + height: 0 + }; + const elem = this.parentGroup.append("g").attr("visibility", "hidden").attr("font-size", fontSize); + for (const t of texts) { + const bbox = (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_4__.c)(elem, 1, t); + const width = bbox ? bbox.width : t.length * fontSize; + const height = bbox ? bbox.height : fontSize; + dimension.width = Math.max(dimension.width, width); + dimension.height = Math.max(dimension.height, height); + } + elem.remove(); + return dimension; + } +} +const BAR_WIDTH_TO_TICK_WIDTH_RATIO = 0.7; +const MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL = 0.2; +class BaseAxis { + constructor(axisConfig, title, textDimensionCalculator, axisThemeConfig) { + this.axisConfig = axisConfig; + this.title = title; + this.textDimensionCalculator = textDimensionCalculator; + this.axisThemeConfig = axisThemeConfig; + this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; + this.axisPosition = "left"; + this.showTitle = false; + this.showLabel = false; + this.showTick = false; + this.showAxisLine = false; + 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(range) { + this.range = range; + if (this.axisPosition === "left" || this.axisPosition === "right") { + this.boundingRect.height = range[1] - range[0]; + } else { + this.boundingRect.width = range[1] - range[0]; + } + this.recalculateScale(); + } + getRange() { + return [this.range[0] + this.outerPadding, this.range[1] - this.outerPadding]; + } + setAxisPosition(axisPosition) { + this.axisPosition = axisPosition; + this.setRange(this.range); + } + getTickDistance() { + const range = this.getRange(); + return Math.abs(range[0] - range[1]) / this.getTickValues().length; + } + getAxisOuterPadding() { + return this.outerPadding; + } + getLabelDimension() { + return this.textDimensionCalculator.getMaxDimension( + this.getTickValues().map((tick) => tick.toString()), + this.axisConfig.labelFontSize + ); + } + recalculateOuterPaddingToDrawBar() { + if (BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() > this.outerPadding * 2) { + this.outerPadding = Math.floor(BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() / 2); + } + this.recalculateScale(); + } + calculateSpaceIfDrawnHorizontally(availableSpace) { + let availableHeight = availableSpace.height; + if (this.axisConfig.showAxisLine && availableHeight > this.axisConfig.axisLineWidth) { + availableHeight -= this.axisConfig.axisLineWidth; + this.showAxisLine = true; + } + if (this.axisConfig.showLabel) { + const spaceRequired = this.getLabelDimension(); + const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.width; + this.outerPadding = Math.min(spaceRequired.width / 2, maxPadding); + const heightRequired = spaceRequired.height + this.axisConfig.labelPadding * 2; + this.labelTextHeight = spaceRequired.height; + if (heightRequired <= availableHeight) { + availableHeight -= heightRequired; + this.showLabel = true; + } + } + if (this.axisConfig.showTick && availableHeight >= this.axisConfig.tickLength) { + this.showTick = true; + availableHeight -= this.axisConfig.tickLength; + } + if (this.axisConfig.showTitle && this.title) { + const spaceRequired = this.textDimensionCalculator.getMaxDimension( + [this.title], + this.axisConfig.titleFontSize + ); + const heightRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; + this.titleTextHeight = spaceRequired.height; + if (heightRequired <= availableHeight) { + availableHeight -= heightRequired; + this.showTitle = true; + } + } + this.boundingRect.width = availableSpace.width; + this.boundingRect.height = availableSpace.height - availableHeight; + } + calculateSpaceIfDrawnVertical(availableSpace) { + let availableWidth = availableSpace.width; + if (this.axisConfig.showAxisLine && availableWidth > this.axisConfig.axisLineWidth) { + availableWidth -= this.axisConfig.axisLineWidth; + this.showAxisLine = true; + } + if (this.axisConfig.showLabel) { + const spaceRequired = this.getLabelDimension(); + const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.height; + this.outerPadding = Math.min(spaceRequired.height / 2, maxPadding); + const widthRequired = spaceRequired.width + this.axisConfig.labelPadding * 2; + if (widthRequired <= availableWidth) { + availableWidth -= widthRequired; + this.showLabel = true; + } + } + if (this.axisConfig.showTick && availableWidth >= this.axisConfig.tickLength) { + this.showTick = true; + availableWidth -= this.axisConfig.tickLength; + } + if (this.axisConfig.showTitle && this.title) { + const spaceRequired = this.textDimensionCalculator.getMaxDimension( + [this.title], + this.axisConfig.titleFontSize + ); + const widthRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; + this.titleTextHeight = spaceRequired.height; + if (widthRequired <= availableWidth) { + availableWidth -= widthRequired; + this.showTitle = true; + } + } + this.boundingRect.width = availableSpace.width - availableWidth; + this.boundingRect.height = availableSpace.height; + } + calculateSpace(availableSpace) { + if (this.axisPosition === "left" || this.axisPosition === "right") { + this.calculateSpaceIfDrawnVertical(availableSpace); + } else { + this.calculateSpaceIfDrawnHorizontally(availableSpace); + } + this.recalculateScale(); + return { + width: this.boundingRect.width, + height: this.boundingRect.height + }; + } + setBoundingBoxXY(point) { + this.boundingRect.x = point.x; + this.boundingRect.y = point.y; + } + getDrawableElementsForLeftAxis() { + const drawableElement = []; + if (this.showAxisLine) { + const x = this.boundingRect.x + this.boundingRect.width - this.axisConfig.axisLineWidth / 2; + drawableElement.push({ + type: "path", + groupTexts: ["left-axis", "axisl-line"], + data: [ + { + path: `M ${x},${this.boundingRect.y} L ${x},${this.boundingRect.y + this.boundingRect.height} `, + strokeFill: this.axisThemeConfig.axisLineColor, + strokeWidth: this.axisConfig.axisLineWidth + } + ] + }); + } + if (this.showLabel) { + drawableElement.push({ + type: "text", + groupTexts: ["left-axis", "label"], + data: this.getTickValues().map((tick) => ({ + text: tick.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(tick), + fill: this.axisThemeConfig.labelColor, + fontSize: this.axisConfig.labelFontSize, + rotation: 0, + verticalPos: "middle", + horizontalPos: "right" + })) + }); + } + if (this.showTick) { + const x = this.boundingRect.x + this.boundingRect.width - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); + drawableElement.push({ + type: "path", + groupTexts: ["left-axis", "ticks"], + data: this.getTickValues().map((tick) => ({ + path: `M ${x},${this.getScaleValue(tick)} L ${x - this.axisConfig.tickLength},${this.getScaleValue(tick)}`, + strokeFill: this.axisThemeConfig.tickColor, + strokeWidth: this.axisConfig.tickWidth + })) + }); + } + if (this.showTitle) { + drawableElement.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" + } + ] + }); + } + return drawableElement; + } + getDrawableElementsForBottomAxis() { + const drawableElement = []; + if (this.showAxisLine) { + const y = this.boundingRect.y + this.axisConfig.axisLineWidth / 2; + drawableElement.push({ + type: "path", + groupTexts: ["bottom-axis", "axis-line"], + data: [ + { + path: `M ${this.boundingRect.x},${y} L ${this.boundingRect.x + this.boundingRect.width},${y}`, + strokeFill: this.axisThemeConfig.axisLineColor, + strokeWidth: this.axisConfig.axisLineWidth + } + ] + }); + } + if (this.showLabel) { + drawableElement.push({ + type: "text", + groupTexts: ["bottom-axis", "label"], + data: this.getTickValues().map((tick) => ({ + text: tick.toString(), + x: this.getScaleValue(tick), + 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" + })) + }); + } + if (this.showTick) { + const y = this.boundingRect.y + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); + drawableElement.push({ + type: "path", + groupTexts: ["bottom-axis", "ticks"], + data: this.getTickValues().map((tick) => ({ + path: `M ${this.getScaleValue(tick)},${y} L ${this.getScaleValue(tick)},${y + this.axisConfig.tickLength}`, + strokeFill: this.axisThemeConfig.tickColor, + strokeWidth: this.axisConfig.tickWidth + })) + }); + } + if (this.showTitle) { + drawableElement.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" + } + ] + }); + } + return drawableElement; + } + getDrawableElementsForTopAxis() { + const drawableElement = []; + if (this.showAxisLine) { + const y = this.boundingRect.y + this.boundingRect.height - this.axisConfig.axisLineWidth / 2; + drawableElement.push({ + type: "path", + groupTexts: ["top-axis", "axis-line"], + data: [ + { + path: `M ${this.boundingRect.x},${y} L ${this.boundingRect.x + this.boundingRect.width},${y}`, + strokeFill: this.axisThemeConfig.axisLineColor, + strokeWidth: this.axisConfig.axisLineWidth + } + ] + }); + } + if (this.showLabel) { + drawableElement.push({ + type: "text", + groupTexts: ["top-axis", "label"], + data: this.getTickValues().map((tick) => ({ + text: tick.toString(), + x: this.getScaleValue(tick), + y: this.boundingRect.y + (this.showTitle ? this.titleTextHeight + this.axisConfig.titlePadding * 2 : 0) + this.axisConfig.labelPadding, + fill: this.axisThemeConfig.labelColor, + fontSize: this.axisConfig.labelFontSize, + rotation: 0, + verticalPos: "top", + horizontalPos: "center" + })) + }); + } + if (this.showTick) { + const y = this.boundingRect.y; + drawableElement.push({ + type: "path", + groupTexts: ["top-axis", "ticks"], + data: this.getTickValues().map((tick) => ({ + path: `M ${this.getScaleValue(tick)},${y + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)} L ${this.getScaleValue(tick)},${y + this.boundingRect.height - this.axisConfig.tickLength - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)}`, + strokeFill: this.axisThemeConfig.tickColor, + strokeWidth: this.axisConfig.tickWidth + })) + }); + } + if (this.showTitle) { + drawableElement.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" + } + ] + }); + } + return drawableElement; + } + getDrawableElements() { + if (this.axisPosition === "left") { + return this.getDrawableElementsForLeftAxis(); + } + if (this.axisPosition === "right") { + throw Error("Drawing of right axis is not implemented"); + } + if (this.axisPosition === "bottom") { + return this.getDrawableElementsForBottomAxis(); + } + if (this.axisPosition === "top") { + return this.getDrawableElementsForTopAxis(); + } + return []; + } +} +class BandAxis extends BaseAxis { + constructor(axisConfig, axisThemeConfig, categories, title, textDimensionCalculator) { + super(axisConfig, title, textDimensionCalculator, axisThemeConfig); + this.categories = categories; + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleBand */ .tiA)().domain(this.categories).range(this.getRange()); + } + setRange(range) { + super.setRange(range); + } + recalculateScale() { + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleBand */ .tiA)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(0.5); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.trace("BandAxis axis final categories, range: ", this.categories, this.getRange()); + } + getTickValues() { + return this.categories; + } + getScaleValue(value) { + return this.scale(value) || this.getRange()[0]; + } +} +class LinearAxis extends BaseAxis { + constructor(axisConfig, axisThemeConfig, domain, title, textDimensionCalculator) { + super(axisConfig, title, textDimensionCalculator, axisThemeConfig); + this.domain = domain; + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain(this.domain).range(this.getRange()); + } + getTickValues() { + return this.scale.ticks(); + } + recalculateScale() { + const domain = [...this.domain]; + if (this.axisPosition === "left") { + domain.reverse(); + } + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain(domain).range(this.getRange()); + } + getScaleValue(value) { + return this.scale(value); + } +} +function getAxis(data, axisConfig, axisThemeConfig, tmpSVGGroup2) { + const textDimansionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); + if (isBandAxisData(data)) { + return new BandAxis( + axisConfig, + axisThemeConfig, + data.categories, + data.title, + textDimansionCalculator + ); + } + return new LinearAxis( + axisConfig, + axisThemeConfig, + [data.min, data.max], + data.title, + textDimansionCalculator + ); +} +class ChartTitle { + constructor(textDimensionCalculator, chartConfig, chartData, chartThemeConfig) { + this.textDimensionCalculator = textDimensionCalculator; + this.chartConfig = chartConfig; + this.chartData = chartData; + this.chartThemeConfig = chartThemeConfig; + this.boundingRect = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + this.showChartTitle = false; + } + setBoundingBoxXY(point) { + this.boundingRect.x = point.x; + this.boundingRect.y = point.y; + } + calculateSpace(availableSpace) { + const titleDimension = this.textDimensionCalculator.getMaxDimension( + [this.chartData.title], + this.chartConfig.titleFontSize + ); + const widthRequired = Math.max(titleDimension.width, availableSpace.width); + const heightRequired = titleDimension.height + 2 * this.chartConfig.titlePadding; + if (titleDimension.width <= widthRequired && titleDimension.height <= heightRequired && this.chartConfig.showTitle && this.chartData.title) { + this.boundingRect.width = widthRequired; + this.boundingRect.height = heightRequired; + this.showChartTitle = true; + } + return { + width: this.boundingRect.width, + height: this.boundingRect.height + }; + } + getDrawableElements() { + const drawableElem = []; + if (this.showChartTitle) { + drawableElem.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 + } + ] + }); + } + return drawableElem; + } +} +function getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { + const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); + return new ChartTitle(textDimensionCalculator, chartConfig, chartData, chartThemeConfig); +} +class LinePlot { + constructor(plotData, xAxis, yAxis, orientation, plotIndex2) { + this.plotData = plotData; + this.xAxis = xAxis; + this.yAxis = yAxis; + this.orientation = orientation; + this.plotIndex = plotIndex2; + } + getDrawableElement() { + const finalData = this.plotData.data.map((d) => [ + this.xAxis.getScaleValue(d[0]), + this.yAxis.getScaleValue(d[1]) + ]); + let path; + if (this.orientation === "horizontal") { + path = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().y((d) => d[0]).x((d) => d[1])(finalData); + } else { + path = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x((d) => d[0]).y((d) => d[1])(finalData); + } + if (!path) { + return []; + } + return [ + { + groupTexts: ["plot", `line-plot-${this.plotIndex}`], + type: "path", + data: [ + { + path, + strokeFill: this.plotData.strokeFill, + strokeWidth: this.plotData.strokeWidth + } + ] + } + ]; + } +} +class BarPlot { + constructor(barData, boundingRect, xAxis, yAxis, orientation, plotIndex2) { + this.barData = barData; + this.boundingRect = boundingRect; + this.xAxis = xAxis; + this.yAxis = yAxis; + this.orientation = orientation; + this.plotIndex = plotIndex2; + } + getDrawableElement() { + const finalData = this.barData.data.map((d) => [ + this.xAxis.getScaleValue(d[0]), + this.yAxis.getScaleValue(d[1]) + ]); + const barPaddingPercent = 0.05; + const barWidth = Math.min(this.xAxis.getAxisOuterPadding() * 2, this.xAxis.getTickDistance()) * (1 - barPaddingPercent); + const barWidthHalf = barWidth / 2; + if (this.orientation === "horizontal") { + return [ + { + groupTexts: ["plot", `bar-plot-${this.plotIndex}`], + type: "rect", + data: finalData.map((data) => ({ + x: this.boundingRect.x, + y: data[0] - barWidthHalf, + height: barWidth, + width: data[1] - this.boundingRect.x, + fill: this.barData.fill, + strokeWidth: 0, + strokeFill: this.barData.fill + })) + } + ]; + } + return [ + { + groupTexts: ["plot", `bar-plot-${this.plotIndex}`], + type: "rect", + data: finalData.map((data) => ({ + x: data[0] - barWidthHalf, + y: data[1], + width: barWidth, + height: this.boundingRect.y + this.boundingRect.height - data[1], + fill: this.barData.fill, + strokeWidth: 0, + strokeFill: this.barData.fill + })) + } + ]; + } +} +class BasePlot { + constructor(chartConfig, chartData, chartThemeConfig) { + this.chartConfig = chartConfig; + this.chartData = chartData; + this.chartThemeConfig = chartThemeConfig; + this.boundingRect = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + } + setAxes(xAxis, yAxis) { + this.xAxis = xAxis; + this.yAxis = yAxis; + } + setBoundingBoxXY(point) { + this.boundingRect.x = point.x; + this.boundingRect.y = point.y; + } + calculateSpace(availableSpace) { + this.boundingRect.width = availableSpace.width; + this.boundingRect.height = availableSpace.height; + return { + width: this.boundingRect.width, + height: this.boundingRect.height + }; + } + getDrawableElements() { + if (!(this.xAxis && this.yAxis)) { + throw Error("Axes must be passed to render Plots"); + } + const drawableElem = []; + for (const [i, plot] of this.chartData.plots.entries()) { + switch (plot.type) { + case "line": + { + const linePlot = new LinePlot( + plot, + this.xAxis, + this.yAxis, + this.chartConfig.chartOrientation, + i + ); + drawableElem.push(...linePlot.getDrawableElement()); + } + break; + case "bar": + { + const barPlot = new BarPlot( + plot, + this.boundingRect, + this.xAxis, + this.yAxis, + this.chartConfig.chartOrientation, + i + ); + drawableElem.push(...barPlot.getDrawableElement()); + } + break; + } + } + return drawableElem; + } +} +function getPlotComponent(chartConfig, chartData, chartThemeConfig) { + return new BasePlot(chartConfig, chartData, chartThemeConfig); +} +class Orchestrator { + constructor(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { + this.chartConfig = chartConfig; + this.chartData = chartData; + this.componentStore = { + title: getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2), + plot: getPlotComponent(chartConfig, chartData, chartThemeConfig), + xAxis: getAxis( + chartData.xAxis, + chartConfig.xAxis, + { + titleColor: chartThemeConfig.xAxisTitleColor, + labelColor: chartThemeConfig.xAxisLabelColor, + tickColor: chartThemeConfig.xAxisTickColor, + axisLineColor: chartThemeConfig.xAxisLineColor + }, + tmpSVGGroup2 + ), + yAxis: getAxis( + chartData.yAxis, + chartConfig.yAxis, + { + titleColor: chartThemeConfig.yAxisTitleColor, + labelColor: chartThemeConfig.yAxisLabelColor, + tickColor: chartThemeConfig.yAxisTickColor, + axisLineColor: chartThemeConfig.yAxisLineColor + }, + tmpSVGGroup2 + ) + }; + } + calculateVerticalSpace() { + let availableWidth = this.chartConfig.width; + let availableHeight = this.chartConfig.height; + let plotX = 0; + let plotY = 0; + let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); + let chartHeight = Math.floor( + availableHeight * this.chartConfig.plotReservedSpacePercent / 100 + ); + let spaceUsed = this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + availableWidth -= spaceUsed.width; + availableHeight -= spaceUsed.height; + spaceUsed = this.componentStore.title.calculateSpace({ + width: this.chartConfig.width, + height: availableHeight + }); + plotY = spaceUsed.height; + availableHeight -= spaceUsed.height; + this.componentStore.xAxis.setAxisPosition("bottom"); + spaceUsed = this.componentStore.xAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + availableHeight -= spaceUsed.height; + this.componentStore.yAxis.setAxisPosition("left"); + spaceUsed = this.componentStore.yAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + plotX = spaceUsed.width; + availableWidth -= spaceUsed.width; + if (availableWidth > 0) { + chartWidth += availableWidth; + availableWidth = 0; + } + if (availableHeight > 0) { + chartHeight += availableHeight; + availableHeight = 0; + } + this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); + this.componentStore.xAxis.setRange([plotX, plotX + chartWidth]); + this.componentStore.xAxis.setBoundingBoxXY({ x: plotX, y: plotY + chartHeight }); + this.componentStore.yAxis.setRange([plotY, plotY + chartHeight]); + this.componentStore.yAxis.setBoundingBoxXY({ x: 0, y: plotY }); + if (this.chartData.plots.some((p) => isBarPlot(p))) { + this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); + } + } + calculateHorizonatalSpace() { + let availableWidth = this.chartConfig.width; + let availableHeight = this.chartConfig.height; + let titleYEnd = 0; + let plotX = 0; + let plotY = 0; + let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); + let chartHeight = Math.floor( + availableHeight * this.chartConfig.plotReservedSpacePercent / 100 + ); + let spaceUsed = this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + availableWidth -= spaceUsed.width; + availableHeight -= spaceUsed.height; + spaceUsed = this.componentStore.title.calculateSpace({ + width: this.chartConfig.width, + height: availableHeight + }); + titleYEnd = spaceUsed.height; + availableHeight -= spaceUsed.height; + this.componentStore.xAxis.setAxisPosition("left"); + spaceUsed = this.componentStore.xAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + availableWidth -= spaceUsed.width; + plotX = spaceUsed.width; + this.componentStore.yAxis.setAxisPosition("top"); + spaceUsed = this.componentStore.yAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + availableHeight -= spaceUsed.height; + plotY = titleYEnd + spaceUsed.height; + if (availableWidth > 0) { + chartWidth += availableWidth; + availableWidth = 0; + } + if (availableHeight > 0) { + chartHeight += availableHeight; + availableHeight = 0; + } + this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); + this.componentStore.yAxis.setRange([plotX, plotX + chartWidth]); + this.componentStore.yAxis.setBoundingBoxXY({ x: plotX, y: titleYEnd }); + this.componentStore.xAxis.setRange([plotY, plotY + chartHeight]); + this.componentStore.xAxis.setBoundingBoxXY({ x: 0, y: plotY }); + if (this.chartData.plots.some((p) => isBarPlot(p))) { + this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); + } + } + calculateSpace() { + if (this.chartConfig.chartOrientation === "horizontal") { + this.calculateHorizonatalSpace(); + } else { + this.calculateVerticalSpace(); + } + } + getDrawableElement() { + this.calculateSpace(); + const drawableElem = []; + this.componentStore.plot.setAxes(this.componentStore.xAxis, this.componentStore.yAxis); + for (const component of Object.values(this.componentStore)) { + drawableElem.push(...component.getDrawableElements()); + } + return drawableElem; + } +} +class XYChartBuilder { + static build(config, chartData, chartThemeConfig, tmpSVGGroup2) { + const orchestrator = new Orchestrator(config, chartData, chartThemeConfig, tmpSVGGroup2); + return orchestrator.getDrawableElement(); + } +} +let plotIndex = 0; +let tmpSVGGroup; +let xyChartConfig = getChartDefaultConfig(); +let xyChartThemeConfig = getChartDefaultThemeConfig(); +let xyChartData = getChartDefaultData(); +let plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color) => color.trim()); +let hasSetXAxis = false; +let hasSetYAxis = false; +function getChartDefaultThemeConfig() { + const defaultThemeVariables = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.D)(); + const config = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + return (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.B)(defaultThemeVariables.xyChart, config.themeVariables.xyChart); +} +function getChartDefaultConfig() { + const config = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + return (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.B)( + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.A.xyChart, + config.xyChart + ); +} +function getChartDefaultData() { + return { + yAxis: { + type: "linear", + title: "", + min: Infinity, + max: -Infinity + }, + xAxis: { + type: "band", + title: "", + categories: [] + }, + title: "", + plots: [] + }; +} +function textSanitizer(text) { + const config = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + return (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.trim(), config); +} +function setTmpSVGG(SVGG) { + tmpSVGGroup = SVGG; +} +function setOrientation(orientation) { + if (orientation === "horizontal") { + xyChartConfig.chartOrientation = "horizontal"; + } else { + xyChartConfig.chartOrientation = "vertical"; + } +} +function setXAxisTitle(title) { + xyChartData.xAxis.title = textSanitizer(title.text); +} +function setXAxisRangeData(min, max) { + xyChartData.xAxis = { type: "linear", title: xyChartData.xAxis.title, min, max }; + hasSetXAxis = true; +} +function setXAxisBand(categories) { + xyChartData.xAxis = { + type: "band", + title: xyChartData.xAxis.title, + categories: categories.map((c) => textSanitizer(c.text)) + }; + hasSetXAxis = true; +} +function setYAxisTitle(title) { + xyChartData.yAxis.title = textSanitizer(title.text); +} +function setYAxisRangeData(min, max) { + xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min, max }; + hasSetYAxis = true; +} +function setYAxisRangeFromPlotData(data) { + const minValue = Math.min(...data); + const maxValue = Math.max(...data); + const prevMinValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.min : Infinity; + const prevMaxValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.max : -Infinity; + xyChartData.yAxis = { + type: "linear", + title: xyChartData.yAxis.title, + min: Math.min(prevMinValue, minValue), + max: Math.max(prevMaxValue, maxValue) + }; +} +function transformDataWithoutCategory(data) { + let retData = []; + if (data.length === 0) { + return retData; + } + if (!hasSetXAxis) { + const prevMinValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.min : Infinity; + const prevMaxValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.max : -Infinity; + setXAxisRangeData(Math.min(prevMinValue, 1), Math.max(prevMaxValue, data.length)); + } + if (!hasSetYAxis) { + setYAxisRangeFromPlotData(data); + } + if (isBandAxisData(xyChartData.xAxis)) { + retData = xyChartData.xAxis.categories.map((c, i) => [c, data[i]]); + } + if (isLinearAxisData(xyChartData.xAxis)) { + const min = xyChartData.xAxis.min; + const max = xyChartData.xAxis.max; + const step = (max - min + 1) / data.length; + const categories = []; + for (let i = min; i <= max; i += step) { + categories.push(`${i}`); + } + retData = categories.map((c, i) => [c, data[i]]); + } + return retData; +} +function getPlotColorFromPalette(plotIndex2) { + return plotColorPalette[plotIndex2 === 0 ? 0 : plotIndex2 % plotColorPalette.length]; +} +function setLineData(title, data) { + const plotData = transformDataWithoutCategory(data); + xyChartData.plots.push({ + type: "line", + strokeFill: getPlotColorFromPalette(plotIndex), + strokeWidth: 2, + data: plotData + }); + plotIndex++; +} +function setBarData(title, data) { + const plotData = transformDataWithoutCategory(data); + xyChartData.plots.push({ + type: "bar", + fill: getPlotColorFromPalette(plotIndex), + data: plotData + }); + plotIndex++; +} +function getDrawableElem() { + if (xyChartData.plots.length === 0) { + throw Error("No Plot to render, please provide a plot with some data"); + } + xyChartData.title = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.r)(); + return XYChartBuilder.build(xyChartConfig, xyChartData, xyChartThemeConfig, tmpSVGGroup); +} +function getChartThemeConfig() { + return xyChartThemeConfig; +} +function getChartConfig() { + return xyChartConfig; +} +const clear = function() { + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.t)(); + plotIndex = 0; + xyChartConfig = getChartDefaultConfig(); + xyChartData = getChartDefaultData(); + xyChartThemeConfig = getChartDefaultThemeConfig(); + plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color) => color.trim()); + hasSetXAxis = false; + hasSetYAxis = false; +}; +const db = { + getDrawableElem, + clear, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.g, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.r, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.b, + setOrientation, + setXAxisTitle, + setXAxisRangeData, + setXAxisBand, + setYAxisTitle, + setYAxisRangeData, + setLineData, + setBarData, + setTmpSVGG, + getChartThemeConfig, + getChartConfig +}; +const draw = (txt, id, _version, diagObj) => { + const db2 = diagObj.db; + const themeConfig = db2.getChartThemeConfig(); + const chartConfig = db2.getChartConfig(); + function getDominantBaseLine(horizontalPos) { + return horizontalPos === "top" ? "text-before-edge" : "middle"; + } + function getTextAnchor(verticalPos) { + return verticalPos === "left" ? "start" : verticalPos === "right" ? "end" : "middle"; + } + function getTextTransformation(data) { + return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Rendering xychart chart\n" + txt); + const svg = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.z)(id); + const group = svg.append("g").attr("class", "main"); + const background = group.append("rect").attr("width", chartConfig.width).attr("height", chartConfig.height).attr("class", "background"); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_5__.i)(svg, chartConfig.height, chartConfig.width, true); + svg.attr("viewBox", `0 0 ${chartConfig.width} ${chartConfig.height}`); + background.attr("fill", themeConfig.backgroundColor); + db2.setTmpSVGG(svg.append("g").attr("class", "mermaid-tmp-group")); + const shapes = db2.getDrawableElem(); + const groups = {}; + function getGroup(gList) { + let elem = group; + let prefix = ""; + for (const [i] of gList.entries()) { + let parent = group; + if (i > 0 && groups[prefix]) { + parent = groups[prefix]; + } + prefix += gList[i]; + elem = groups[prefix]; + if (!elem) { + elem = groups[prefix] = parent.append("g").attr("class", gList[i]); + } + } + return elem; + } + for (const shape of shapes) { + if (shape.data.length === 0) { + continue; + } + const shapeGroup = getGroup(shape.groupTexts); + switch (shape.type) { + case "rect": + shapeGroup.selectAll("rect").data(shape.data).enter().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).attr("stroke", (data) => data.strokeFill).attr("stroke-width", (data) => data.strokeWidth); + break; + case "text": + shapeGroup.selectAll("text").data(shape.data).enter().append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.verticalPos)).attr("text-anchor", (data) => getTextAnchor(data.horizontalPos)).attr("transform", (data) => getTextTransformation(data)).text((data) => data.text); + break; + case "path": + shapeGroup.selectAll("path").data(shape.data).enter().append("path").attr("d", (data) => data.path).attr("fill", (data) => data.fill ? data.fill : "none").attr("stroke", (data) => data.strokeFill).attr("stroke-width", (data) => data.strokeWidth); + break; + } + } +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/78bdd589.4ea7e967.js b/assets/js/78bdd589.38c2e2c5.js similarity index 97% rename from assets/js/78bdd589.4ea7e967.js rename to assets/js/78bdd589.38c2e2c5.js index 371b5bde8..0b40b1954 100644 --- a/assets/js/78bdd589.4ea7e967.js +++ b/assets/js/78bdd589.38c2e2c5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6091],{9483:e=>{e.exports=JSON.parse('{"label":"App","permalink":"/docs/tags/app","allTagsPath":"/docs/tags","count":4,"items":[{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","permalink":"/docs/config/sfmc-appexchange-solutions"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6091],{9483:e=>{e.exports=JSON.parse('{"label":"App","permalink":"/docs/tags/app","allTagsPath":"/docs/tags","count":4,"items":[{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","permalink":"/docs/config/sfmc-appexchange-solutions"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/7973.04e2016d.js b/assets/js/7973.04e2016d.js new file mode 100644 index 000000000..438c69c4d --- /dev/null +++ b/assets/js/7973.04e2016d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7973],{7973:(t,e,n)=>{n.d(e,{diagram:()=>et});var a=n(6365),i=n(4218),s=n(2015),r=n(7967),l=(n(7484),n(7856),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],Y=[1,53],L=[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:Y,68:L,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:Y,68:L,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:Y,68:L,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:Y,68:L,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:Y,68:L,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:Y,68:L,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:Y,68:L,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:Y,68:L,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;s<i.length;s++)if((n=this._input.match(this.rules[i[s]]))&&(!e||n[0].length>e[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(){return g},S={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=A()},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=A(),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=A(),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=A(),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=A(),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=A(),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=A()},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:A,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))},getBoundarys:function(t){return null==t?y:y.filter((e=>e.parentBoundary===t))},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}},C=function(t,e){return(0,s.d)(t,e)},k=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.Nm)(s);l.attr("xlink:href",o)},O=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),v=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<p.length;a++){const t=a*h-h*(p.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",h).style("font-weight",u).style("font-family",d);l.append("tspan").attr("dy",t).text(p[a]).attr("alignment-baseline","mathematical"),i(l,o)}}function n(t,n,a,s,r,l,o,c){const h=n.append("switch"),d=h.append("foreignObject").attr("x",a).attr("y",s).attr("width",r).attr("height",l).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,a,s,r,0,o,c),i(d,o)}function i(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(a){return"fo"===a.textPlacement?n:"old"===a.textPlacement?t:e}}(),T=function(t,e,n){const a=t.append("g");let i=e.bgColor?e.bgColor:"none",s=e.borderColor?e.borderColor:"#444444",r=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let o={x:e.x,y:e.y,fill:i,stroke:s,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};C(a,o);let c=n.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=r,v(n)(e.label.text,a,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=n.boundaryFont(),c.fontColor=r,v(n)(e.type.text,a,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},c)),e.descr&&""!==e.descr.text&&(c=n.boundaryFont(),c.fontSize=c.fontSize-2,c.fontColor=r,v(n)(e.descr.text,a,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},w=function(t,e,n){var a;let i=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],r=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],l=e.fontColor?e.fontColor:"#FFFFFF",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const c=t.append("g");c.attr("class","person-man");const h=(0,s.g)();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":h.x=e.x,h.y=e.y,h.fill=i,h.width=e.width,h.height=e.height,h.stroke=r,h.rx=2.5,h.ry=2.5,h.attrs={"stroke-width":.5},C(c,h);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let d=O(n,e.typeC4Shape.text);switch(c.append("text").attr("fill",l).attr("font-family",d.fontFamily).attr("font-size",d.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":k(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,v(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)?v(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&&v(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,v(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:l},u)),e.height},R=(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();v(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(),v(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))}},D=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")},N=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")},P=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")},M=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")},j=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")},B=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 L=0,I=0,U=4,F=2;l.yy=S;let X={};class z{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,W(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>U)&&(e=this.nextData.startx+t.margin+X.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},W(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const W=function(t){(0,a.f)(X,t),t.fontFamily&&(X.personFontFamily=X.systemFontFamily=X.messageFontFamily=t.fontFamily),t.fontSize&&(X.personFontSize=X.systemFontSize=X.messageFontSize=t.fontSize),t.fontWeight&&(X.personFontWeight=X.systemFontWeight=X.messageFontWeight=t.fontWeight)},Q=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),$=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function q(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 V=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=X.c4ShapeMargin-35;let i=e.wrap&&X.wrap,s=$(X);s.fontSize=s.fontSize+2,s.fontWeight="bold",q("label",e,i,s,(0,a.h)(e.label.text,s)),T(t,e,X)},G=function(t,e,n,i){let s=0;for(const r of i){s=0;const i=n[r];let l=Q(X,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=X.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&&X.wrap,c=X.width-2*X.c4ShapePadding,h=Q(X,i.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",q("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+"]",q("type",i,o,Q(X,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+"]",q("techn",i,o,Q(X,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){q("descr",i,o,Q(X,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+=X.c4ShapePadding,i.width=Math.max(i.width||X.width,u,X.width),i.height=Math.max(i.height||X.height,d,X.height),i.margin=i.margin||X.c4ShapeMargin,t.insert(i),w(e,i,X)}t.bumpLastMargin(X.c4ShapeMargin)};class H{constructor(t,e){this.x=t,this.y=e}}let K=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&&n<i?u=new H(n+t.width,l):a==s&&n>i?u=new H(n,l):n==i&&a<s?u=new H(r,a+t.height):n==i&&a>s&&(u=new H(r,a)),n>i&&a<s?u=d>=h?new H(n,l+h*t.width/2):new H(r-o/c*t.height/2,a+t.height):n<i&&a<s?u=d>=h?new H(n+t.width,l+h*t.width/2):new H(r+o/c*t.height/2,a+t.height):n<i&&a>s?u=d>=h?new H(n+t.width,l-h*t.width/2):new H(r+t.height/2*o/c,a):n>i&&a>s&&(u=d>=h?new H(n,l-t.width/2*h):new H(r-t.height/2*o/c,a)),u},J=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=K(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:a,endPoint:K(e,n)}};function Z(t,e,n,a,i){let s=new z(i);s.data.widthLimit=n.data.widthLimit/Math.min(F,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&&X.wrap,c=$(X);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",q("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+"]",q("type",l,o,$(X),s.data.widthLimit),l.type.Y=a+5,a=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=$(X);t.fontSize=t.fontSize-2,q("descr",l,o,t,s.data.widthLimit),l.descr.Y=a+20,a=l.descr.Y+l.descr.height}if(0==r||r%F==0){let t=n.data.startx+X.diagramMarginX,e=n.data.stopy+X.diagramMarginY+a;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+X.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&&G(s,t,h,d),e=l.alias;let u=i.db.getBoundarys(e);u.length>0&&Z(t,e,s,u,i),"global"!==l.alias&&V(t,l,s),n.data.stopy=Math.max(s.data.stopy+X.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(s.data.stopx+X.c4ShapeMargin,n.data.stopx),L=Math.max(L,n.data.stopx),I=Math.max(I,n.data.stopy)}}const tt={drawPersonOrSystemArray:G,drawBoundary:V,setConf:W,draw:function(t,e,n,s){X=(0,a.c)().c4;const r=(0,a.c)().securityLevel;let l;"sandbox"===r&&(l=(0,i.Ys)("#i"+e));const o="sandbox"===r?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body");let c=s.db;s.db.setWrap(X.wrap),U=c.getC4ShapeInRow(),F=c.getC4BoundaryInRow(),a.l.debug(`C:${JSON.stringify(X,null,2)}`);const h="sandbox"===r?o.select(`[id="${e}"]`):(0,i.Ys)(`[id="${e}"]`);B(h),j(h),Y(h);let d=new z(s);d.setData(X.diagramMarginX,X.diagramMarginX,X.diagramMarginY,X.diagramMarginY),d.data.widthLimit=screen.availWidth,L=X.diagramMarginX,I=X.diagramMarginY;const u=s.db.getTitle();Z(h,"",d,s.db.getBoundarys(""),s),D(h),N(h),M(h),P(h),function(t,e,n,i){let s=0;for(let l of e){s+=1;let t=l.wrap&&X.wrap,e={fontFamily:(r=X).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);q("label",l,t,e,o),l.techn&&""!==l.techn.text&&(o=(0,a.h)(l.techn.text,e),q("techn",l,t,e,o)),l.descr&&""!==l.descr.text&&(o=(0,a.h)(l.descr.text,e),q("descr",l,t,e,o));let c=n(l.from),h=n(l.to),d=J(c,h);l.startPoint=d.startPoint,l.endPoint=d.endPoint}var r;R(t,e,X)}(h,s.db.getRels(),s.db.getC4Shape,s),d.data.stopx=L,d.data.stopy=I;const p=d.data;let y=p.stopy-p.starty+2*X.diagramMarginY;const f=p.stopx-p.startx+2*X.diagramMarginX;u&&h.append("text").text(u).attr("x",(p.stopx-p.startx)/2-4*X.diagramMarginX).attr("y",p.starty+X.diagramMarginY),(0,a.i)(h,y,f,X.useMaxWidth);const b=u?60:0;h.attr("viewBox",p.startx-X.diagramMarginX+" -"+(X.diagramMarginY+b)+" "+f+" "+(y+b)),a.l.debug("models:",p)}},et={parser:o,db:S,renderer:tt,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:({c4:t,wrap:e})=>{tt.setConf(t),S.setWrap(e)}}},2015:(t,e,n)=>{n.d(e,{a:()=>r,b:()=>c,c:()=>o,d:()=>s,e:()=>d,f:()=>l,g:()=>h});var a=n(7967),i=n(6365);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),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.H," "),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.Nm)(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.Nm)(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/7a40f54e.60f7c7e3.js b/assets/js/7a40f54e.77fd8205.js similarity index 93% rename from assets/js/7a40f54e.60f7c7e3.js rename to assets/js/7a40f54e.77fd8205.js index 0cb52f79c..848c93ffe 100644 --- a/assets/js/7a40f54e.60f7c7e3.js +++ b/assets/js/7a40f54e.77fd8205.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1697],{9728:e=>{e.exports=JSON.parse('{"label":"Webinar","permalink":"/docs/tags/webinar","allTagsPath":"/docs/tags","count":3,"items":[{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1697],{9728:e=>{e.exports=JSON.parse('{"label":"Webinar","permalink":"/docs/tags/webinar","allTagsPath":"/docs/tags","count":3,"items":[{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/7e516c75.c476101a.js b/assets/js/7e516c75.f8b1bb27.js similarity index 95% rename from assets/js/7e516c75.c476101a.js rename to assets/js/7e516c75.f8b1bb27.js index d98a41b15..4bfd828ea 100644 --- a/assets/js/7e516c75.c476101a.js +++ b/assets/js/7e516c75.f8b1bb27.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9922],{8573:e=>{e.exports=JSON.parse('{"label":"JavaScript","permalink":"/docs/tags/java-script","allTagsPath":"/docs/tags","count":7,"items":[{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","permalink":"/docs/js/js-dom"},{"id":"js/js-if-and-switch","title":"JS If & Switch","description":"Deep dive into the two pillars of JavaScript flow control.","permalink":"/docs/js/js-if-and-switch"},{"id":"js/js-loops","title":"JS Loops","description":"JavaScript offers four for loops and two while loops. What\'s the difference?","permalink":"/docs/js/js-loops"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9922],{8573:e=>{e.exports=JSON.parse('{"label":"JavaScript","permalink":"/docs/tags/java-script","allTagsPath":"/docs/tags","count":7,"items":[{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","permalink":"/docs/js/js-dom"},{"id":"js/js-if-and-switch","title":"JS If & Switch","description":"Deep dive into the two pillars of JavaScript flow control.","permalink":"/docs/js/js-if-and-switch"},{"id":"js/js-loops","title":"JS Loops","description":"JavaScript offers four for loops and two while loops. What\'s the difference?","permalink":"/docs/js/js-loops"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/7eaafb14.3ea7593f.js b/assets/js/7eaafb14.41c5fb03.js similarity index 85% rename from assets/js/7eaafb14.3ea7593f.js rename to assets/js/7eaafb14.41c5fb03.js index c03f8403a..f294ecdfc 100644 --- a/assets/js/7eaafb14.3ea7593f.js +++ b/assets/js/7eaafb14.41c5fb03.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1351],{7537:e=>{e.exports=JSON.parse('{"label":"Interaction Studio","permalink":"/sites/tags/interaction-studio","allTagsPath":"/sites/tags","count":1,"items":[{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/mc-personalization-ideas"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1351],{7537:e=>{e.exports=JSON.parse('{"label":"Interaction Studio","permalink":"/sites/tags/interaction-studio","allTagsPath":"/sites/tags","count":1,"items":[{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","permalink":"/sites/ideas/mc-personalization-ideas"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/7f3cd917.896568e6.js b/assets/js/7f3cd917.896568e6.js new file mode 100644 index 000000000..cd2bad093 --- /dev/null +++ b/assets/js/7f3cd917.896568e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4219],{5624:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>u,default:()=>f,frontMatter:()=>d,metadata:()=>h,toc:()=>p});var a=n(5893),o=n(1151),i=n(3992),s=n(425),r=n(1872),l=n(7294);const c=e=>{let{input:t,inputType:n="time",daysOnly:o=!1,hoursOnly:i=!1}=e;const[s,r]=l.useState("time"===n?t:new Date(t)-new Date);return l.useEffect((()=>{const e=s>0&&setInterval((()=>r("time"===n?s-1e3:new Date(t)-new Date)),1e3);return()=>{clearInterval(e)}})),o?(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("span",{className:"countDown",children:[Math.floor(s/864e5)," days"]})}):i?(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("span",{className:"countDown",children:[Math.floor(s/36e5)," hours"]})}):0===Math.floor(s/1e3/60)?(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("span",{className:"countDown",children:[Math.floor(s/1e3%60)," seconds"]})}):0===Math.floor(s/36e5)?(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("span",{className:"countDown",children:[Math.floor(s/1e3/60%60)," minutes and ",Math.floor(s/1e3%60)," seconds"]})}):0===Math.floor(s/864e5)?(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("span",{className:"countDown",children:[Math.floor(s/36e5%24)," hours, ",Math.floor(s/1e3/60%60)," ","minutes and ",Math.floor(s/1e3%60)," seconds"]})}):(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("span",{className:"countDown",children:[Math.floor(s/864e5)," days, ",Math.floor(s/36e5%24)," ","hours, ",Math.floor(s/1e3/60%60)," minutes and ",Math.floor(s/1e3%60)," seconds"]})})},d={id:"engage-with-countdown",title:"Engage with Countdown",description:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",image:"img/og/og-image-engage-with-countdown.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},u=void 0,h={id:"js/snippets/engage-with-countdown",title:"Engage with Countdown",description:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",source:"@site/docs/js/snippets/engage-with-countdown.mdx",sourceDirName:"js/snippets",slug:"/js/snippets/engage-with-countdown",permalink:"/docs/js/snippets/engage-with-countdown",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/snippets/engage-with-countdown.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Eloqua",permalink:"/docs/tags/eloqua"},{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"engage-with-countdown",title:"Engage with Countdown",description:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",image:"img/og/og-image-engage-with-countdown.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},sidebar:"snippets",previous:{title:"Tailor with Data",permalink:"/docs/js/snippets/tailor-with-data"},next:{title:"Export, Import & Document SFMC Roles",permalink:"/docs/js/snippets/export-import-document-sfmc-roles"}},m={},p=[{value:"Outline",id:"outline",level:2},{value:"Final countdown",id:"final-countdown",level:2},{value:"HTML",id:"html",level:3},{value:"JavaScript",id:"javascript",level:3},{value:"Function <code>getTimeRemaining</code>",id:"function-gettimeremaining",level:4},{value:"Function <code>initializeClock</code>",id:"function-initializeclock",level:4},{value:"Function <code>updateClock</code>",id:"function-updateclock",level:4},{value:"Counting options",id:"counting-options",level:2},{value:"Take advantage of dynamic content",id:"take-advantage-of-dynamic-content",level:2}];function g(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.m,{content:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today."}),"\n",(0,a.jsx)(t.h2,{id:"outline",children:"Outline"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#final-countdown",children:"Learn how to implement the solution"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#counting-options",children:"Adapt it to the story you are telling"})}),"\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"#take-advantage-of-dynamic-content",children:"Leverage personalisation for even better results"})}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Lured visitors to your landing page? Great! Now it is time to convert them to your cause. Whitepaper download, product purchase or enrollment, doesn't matter. In each case, you will fight for the attention of the user and drive him towards the goal set for him. It's not easy in the modern web environment, but even the basics might give you the upper hand."}),"\n",(0,a.jsx)(t.h2,{id:"final-countdown",children:"Final countdown"}),"\n",(0,a.jsxs)(t.p,{children:["Let's talk about a simple solution you can implement on your landing page in just ",(0,a.jsx)(c,{input:48e4})," \u2014 a counter."]}),"\n",(0,a.jsx)(t.p,{children:"To add a dynamic countdown to your website, you will need basic HTML (to put it into a specific place) and a JavaScript code to do the math. CSS is optional but might spice up the style of your page."}),"\n",(0,a.jsx)(t.h3,{id:"html",children:"HTML"}),"\n",(0,a.jsxs)(t.p,{children:["Firstly, you will need to create an ",(0,a.jsx)(t.code,{children:"id"})," attribute to mark the container in which you want to display the counter. It might be on the ",(0,a.jsx)(t.code,{children:"<p>"})," element for an inline solution or on ",(0,a.jsx)(t.code,{children:"<div>"})," element were you to create a more visual version."]}),"\n",(0,a.jsxs)(t.p,{children:["Next, the spans. Add empty ",(0,a.jsx)(t.code,{children:"<span>"})," elements with the ",(0,a.jsx)(t.code,{children:"class"})," corresponding to the time unit you want to show. JavaScript will swap it for the correct numeric value and dynamically change it as time passes. You can add just hours, or you can go for full spectrum."]}),"\n",(0,a.jsxs)(t.p,{children:["For example, did you know there is only ",(0,a.jsx)(c,{input:"July 20, 2024, 20:17:40 UTC",inputType:"date"})," left till 55th anniversary of the first moon landing?"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-html",metastring:"Sample countdown code for above line",children:"<p id=\"counter1\">\n For example, did you know there is only <span class=\"days\"></span> days, <span class=\"hours\"></span> hours, <span class=\"minutes\"></span> minutes and <span class=\"seconds\"></span> seconds left till 50th anniversary of the first moonlanding?\n</p>\n\n<script>\n function getTimeRemaining(endtime) {\n const now = new Date().getTime();\n const t = endtime - now;\n const seconds = Math.floor((t / 1000) % 60);\n const minutes = Math.floor((t / 1000 / 60) % 60);\n const hours = Math.floor((t / (1000 * 60 * 60)) % 24);\n const days = Math.floor(t / (1000 * 60 * 60 * 24));\n return {\n 'total': t,\n 'days': days,\n 'hours': hours,\n 'minutes': minutes,\n 'seconds': seconds\n };\n }\n\n function initializeClock(element, endtime) {\n const clock = document.querySelector(element);\n const daysSpan = clock.querySelector('.days');\n const hoursSpan = clock.querySelector('.hours');\n const minutesSpan = clock.querySelector('.minutes');\n const secondsSpan = clock.querySelector('.seconds');\n\n function updateClock() {\n const t = getTimeRemaining(endtime);\n daysSpan.innerHTML = t.days;\n hoursSpan.innerHTML = ('0' + t.hours).slice(-2);\n minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);\n secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);\n if (t.total <= 0) {\n clearInterval(timeinterval);\n }\n }\n updateClock();\n const timeinterval = setInterval(updateClock, 1000);\n }\n\n /* Declare deadline time */\n const deadline = new Date(\"2019-07-20T20:17:00+00:00\").getTime()\n /* Trigger counter function by targeting specific element and passing the above deadline */\n initializeClock('#counter1', deadline);\n<\/script>\n"})}),"\n",(0,a.jsx)(t.h3,{id:"javascript",children:"JavaScript"}),"\n",(0,a.jsx)(t.p,{children:"There is much more fun in the JavaScript part. Worry not - you don't need to know the language at all. Let's have a look at the lines to understand what is happening on the general level and then focus on personalisation options."}),"\n",(0,a.jsxs)(t.h4,{id:"function-gettimeremaining",children:["Function ",(0,a.jsx)(t.code,{children:"getTimeRemaining"})]}),"\n",(0,a.jsx)(t.p,{children:"The first function does the math behind countdown. With the deadline set for the counter and the current time took from visitor's hardware, it calculates the remaining values of each time unit."}),"\n",(0,a.jsxs)(t.p,{children:["Remember to keep there those and only those units that you actually use in your counter. The rest should be deleted (for example, if you want to get rid of the ",(0,a.jsx)(t.em,{children:"day"})," unit, remove both the ",(0,a.jsx)(t.code,{children:"const days = (...)"})," line and ",(0,a.jsx)(t.code,{children:"'days': days,"})," from the return statement)."]}),"\n",(0,a.jsxs)(t.h4,{id:"function-initializeclock",children:["Function ",(0,a.jsx)(t.code,{children:"initializeClock"})]}),"\n",(0,a.jsxs)(t.p,{children:["The second function is responsible for finding the ",(0,a.jsx)(t.code,{children:"id"})," attribute and ",(0,a.jsx)(t.code,{children:"<span>"})," elements we created in the HTML part and updating the countdown every second. Simple and only possible edit would be to delete the line with time unit that will not be used, just as mentioned above."]}),"\n",(0,a.jsxs)(t.h4,{id:"function-updateclock",children:["Function ",(0,a.jsx)(t.code,{children:"updateClock"})]}),"\n",(0,a.jsxs)(t.p,{children:["The job of the last one is to swap span elements targeted in ",(0,a.jsx)(t.code,{children:"initializeClock"})," to values calculated by ",(0,a.jsx)(t.code,{children:"getTimeRemaining"})," - and to stop counter refreshing after it gets to zero. Again - only edit needed would be to delete the unneeded unit."]}),"\n",(0,a.jsxs)(t.p,{children:["To not leave you with \u201cdelete this, delete that\u201d talk and empty hands, feel free to take a look at a simplified ",(0,a.jsx)(t.a,{href:"https://gist.github.com/MateuszDabrowski/f433cecf3c02c400c9e74d08b78ad50c#file-day-counter-html",children:"sample code"})," that counts only days. As for the placement in your code - it will be best to put the ",(0,a.jsx)(t.code,{children:"<script>(...)<\/script>"})," part right before the closing ",(0,a.jsx)(t.code,{children:"</body>"})," tag."]}),"\n",(0,a.jsx)(t.h2,{id:"counting-options",children:"Counting options"}),"\n",(0,a.jsxs)(t.p,{children:["Time for the important part - the one you will always edit. The counter's deadline. You probably already noticed ",(0,a.jsx)(t.code,{children:"const deadline"})," in the sample and guessed it is the line we will focus on now. It might look a bit intimidating with the weird structure, but in this way, it actually gives you a lot of power. This date formatting is an example of an ",(0,a.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/ISO_8601",children:"ISO 8601"})," standard."]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:'const deadline = new Date("2077-07-20T20:17:00+00:00").getTime()\n'})}),"\n",(0,a.jsxs)(t.p,{children:["To use it, insert date in a YYYY-MM-DD",(0,a.jsx)(t.strong,{children:"T"}),"hh:mm",":ss"," **+**hh",":mm"," format. The ",(0,a.jsx)(t.strong,{children:"T"})," is just a delimiter between date and time, **+**hh",":mm",", on the other hand, allows you to add time variable (for example summertime change)."]}),"\n",(0,a.jsx)(t.p,{children:"However, depending on the needs, you may want to use other available formats, for example, simplified only-date format perfect when you need to count days."}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:'const deadline = new Date("2077-01-31").getTime();\n'})}),"\n",(0,a.jsx)(t.p,{children:"Another option is to calculate the amount of time to count down from instead of a static end date. It might be a much better solution if you want to create a feeling of pressure for a small task or engage visitor without a real deadline on your side."}),"\n",(0,a.jsx)(t.p,{children:"To use this solution, you need to declare the starting value. In below example, it is set to 15 days. The code multiplies 1000 milliseconds times 60 seconds times 60 minutes times 24 hours. Want to count 5 minutes? Go for 1000 * 60 * 60 * 5."}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:"const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);\n"})}),"\n",(0,a.jsx)(t.h2,{id:"take-advantage-of-dynamic-content",children:"Take advantage of dynamic content"}),"\n",(0,a.jsx)(t.p,{children:"Simple countdown on landing page already can make an enormous difference to your conversion rate. But, of course, you can get even more out of it by using the toolset of your marketing automation tool."}),"\n",(0,a.jsx)(t.p,{children:"There are many cases where urgency is a perfect solution, however, not always all visitors should\nsee the same timeframe. An example? Renewal notification that counts downtime before a subscription expires. Instead of a\nstatic product end date, implement the counter and put some pressure with seconds running out in real-time."}),"\n",(0,a.jsx)(t.p,{children:"To do this, make your marketing automation tool push a date value (in above mentioned ISO 8601 format) from the visitor data model right into var deadline JavaScript line."}),"\n",(0,a.jsxs)(i.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],children:[(0,a.jsxs)(s.Z,{value:"sfmc",children:[(0,a.jsxs)(t.p,{children:["In Salesforce Marketing Cloud, you can use either ",(0,a.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/personalisationStringsAMPscript.htm",children:"AMPScript personalisation string"})," or SSJS personalisation string:"]}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:"/* Remember to check whether the date you are using has Local or System based timezone */\nconst deadline = new Date('<ctrl:field name=DateTypeAttributeName />').getTime();\n"})}),(0,a.jsx)(t.p,{children:"Wondering what will happen with visitors that don't have this date value? With just personalisation string such users will see the counter set to zero right from the start. Of course, we would rather not have it that way. Thankfully SSJS personalisations strings allow us to add default value very easily:"}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:"const deadline = new Date('<ctrl:field name=DateTypeAttributeName default='2077-07-20T20:17:00+00:00' />').getTime();\n"})}),(0,a.jsxs)(t.p,{children:["You can also easily create a dynamic content block that will be visible only when the date from personalisation string is soon enough, by leveraging a simple ",(0,a.jsx)(t.code,{children:"if/else"})," logic of SSJS."]})]}),(0,a.jsxs)(s.Z,{value:"eloqua",children:[(0,a.jsxs)(t.p,{children:["In Oracle Eloqua it would be a ",(0,a.jsx)(t.a,{href:"https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/FieldMerges/FieldMergeExamples.htm",children:"field merge"}),":"]}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:"const deadline = new Date('<span class=eloquaemail> Date_Field_Merge1 </span>').getTime();\n"})}),(0,a.jsxs)(t.p,{children:["Wondering what will happen with visitors that don't have this date value? With just field merge such users will see the counter set to zero right from the start. Of course, we would rather not have it that way. Let's create a remedy with yet another marketing automation tool - ",(0,a.jsx)(t.a,{href:"https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/DynamicContent/DynamicContentExamples.htm",children:"dynamic content"})," (that's Eloqua name for a content element that adapts to the visitor depending on the value in the data model). Just wrap the HTML part of a counter and set it to be visible only if the visitor has a date value in the field used in field merge (or even when it is also within the chosen timeframe)."]}),(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-html",children:'<span elqid="001" elqtype="DynamicContent" class="remove-absolute" style="display: block"></span>\n'})})]})]}),"\n",(0,a.jsxs)(t.p,{children:["Use it hard. How? Put that renewal offer with a counter inside a dynamic content and insert it into every content landing page. Simple and quick solution to make sure your customers will be notified ",(0,a.jsx)(t.em,{children:"when"})," they should. You can also put single dynamic content box related to events or webinars and push information with the counter about the nearest happening one. Just be sure to leverage dynamic content options to show different texts depending on visitor persona. And, of course, update that dynamic content after the event."]}),"\n",(0,a.jsx)(t.p,{children:"What next? Take the code, implement on a landing page, build an urgency fueled story and watch boosted engagement do its job. You can count on it."}),"\n",(0,a.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,a.jsx)(t.p,{children:"As emails don't support JavaScript, you won't be able to leverage the above code for your sends. However, that doesn't mean you cannot increase engagement with a countdown in your outbound."}),(0,a.jsxs)(t.p,{children:["Multiple solutions create dynamically changing .gifs that allows you to create a real-time timer in your email. I'm using ",(0,a.jsx)(t.a,{href:"https://www.sendtric.com",children:"Sendtric"}),". A different approach, same engagement boosting value."]})]})]})}function f(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(g,{...e})}):g(e)}},425:(e,t,n)=>{n.d(t,{Z:()=>s});n(7294);var a=n(512);const o={tabItem:"tabItem_Ymn6"};var i=n(5893);function s(e){let{children:t,hidden:n,className:s}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,s),hidden:n,children:t})}},3992:(e,t,n)=>{n.d(t,{Z:()=>j});var a=n(7294),o=n(512),i=n(2957),s=n(6550),r=n(1270),l=n(5238),c=n(3609),d=n(2560);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:n}=e;const o=(0,s.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(i),(0,a.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(o.location.search);t.set(i,e),o.replace({...o.location,search:t.toString()})}),[i,o])]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,i=h(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[c,u]=p({queryString:n,groupId:o}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,i]=(0,d.Nk)(n);return[o,(0,a.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:o}),w=(()=>{const e=c??g;return m({value:e,tabValues:i})?e:null})();(0,r.Z)((()=>{w&&l(w)}),[w]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),f(e)}),[u,f,i]),tabValues:i}}var f=n(1048);const w={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=n(5893);function v(e){let{className:t,block:n,selectedValue:a,selectValue:s,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),o=r[n].value;o!==a&&(c(t),s(o))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,y.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,y.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...i,className:(0,o.Z)("tabs__item",w.tabItem,i?.className,{"tabs__item--active":a===t}),children:n??t},t)}))})}function b(e){let{lazy:t,children:n,selectedValue:o}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return(0,y.jsx)("div",{className:"margin-top--md",children:i.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function x(e){const t=g(e);return(0,y.jsxs)("div",{className:(0,o.Z)("tabs-container",w.tabList),children:[(0,y.jsx)(v,{...e,...t}),(0,y.jsx)(b,{...e,...t})]})}function j(e){const t=(0,f.Z)();return(0,y.jsx)(x,{...e,children:u(e.children)},String(t))}},1872:(e,t,n)=>{n.d(t,{m:()=>i});n(7294);const a="leadText_qzwo";var o=n(5893);const i=e=>{let{content:t}=e;return(0,o.jsx)(o.Fragment,{children:(0,o.jsx)("p",{id:a,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>s});var a=n(7294);const o={},i=a.createContext(o);function s(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7f3cd917.b05fc5c0.js b/assets/js/7f3cd917.b05fc5c0.js deleted file mode 100644 index bbd1ae113..000000000 --- a/assets/js/7f3cd917.b05fc5c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4219],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=u(n),p=o,h=d["".concat(s,".").concat(p)]||d[p]||m[p]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,i[1]=l;for(var u=2;u<r;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}p.displayName="MDXCreateElement"},425:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(7294),o=n(6010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:n},t)}},3992:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(7462),o=n(7294),r=n(6010),i=n(2957),l=n(6550),s=n(5238),u=n(3609),c=n(2560);function d(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function m(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??d(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=m(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[s,u]=h({queryString:n,groupId:a}),[d,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),f=(()=>{const e=s??d;return p({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{f&&l(f)}),[f]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),g(e)}),[u,g,r]),tabValues:r}}var f=n(1048);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function w(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),m=e=>{const t=e.currentTarget,n=c.indexOf(t),a=u[n].value;a!==l&&(d(t),s(a))},p=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>c.push(e),onKeyDown:p,onClick:m},i,{className:(0,r.Z)("tabs__item",y.tabItem,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function v(e){const t=g(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",y.tabList)},o.createElement(w,(0,a.Z)({},e,t)),o.createElement(k,(0,a.Z)({},e,t)))}function b(e){const t=(0,f.Z)();return o.createElement(v,(0,a.Z)({key:String(t)},e))}},1872:(e,t,n)=>{n.d(t,{m:()=>r});var a=n(7294);const o="leadText_qzwo",r=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:o},t))}},1273:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>y,frontMatter:()=>c,metadata:()=>m,toc:()=>h});var a=n(7462),o=n(7294),r=n(4137),i=n(3992),l=n(425),s=n(1872);const u=e=>{let{input:t,inputType:n="time",daysOnly:a=!1,hoursOnly:r=!1}=e;const[i,l]=o.useState("time"===n?t:new Date(t)-new Date);return o.useEffect((()=>{const e=i>0&&setInterval((()=>l("time"===n?i-1e3:new Date(t)-new Date)),1e3);return()=>{clearInterval(e)}})),a?o.createElement(o.Fragment,null,o.createElement("span",{className:"countDown"},Math.floor(i/864e5)," days")):r?o.createElement(o.Fragment,null,o.createElement("span",{className:"countDown"},Math.floor(i/36e5)," hours")):0===Math.floor(i/1e3/60)?o.createElement(o.Fragment,null,o.createElement("span",{className:"countDown"},Math.floor(i/1e3%60)," seconds")):0===Math.floor(i/36e5)?o.createElement(o.Fragment,null,o.createElement("span",{className:"countDown"},Math.floor(i/1e3/60%60)," minutes and ",Math.floor(i/1e3%60)," seconds")):0===Math.floor(i/864e5)?o.createElement(o.Fragment,null,o.createElement("span",{className:"countDown"},Math.floor(i/36e5%24)," hours, ",Math.floor(i/1e3/60%60)," ","minutes and ",Math.floor(i/1e3%60)," seconds")):o.createElement(o.Fragment,null,o.createElement("span",{className:"countDown"},Math.floor(i/864e5)," days, ",Math.floor(i/36e5%24)," ","hours, ",Math.floor(i/1e3/60%60)," minutes and ",Math.floor(i/1e3%60)," seconds"))},c={id:"engage-with-countdown",title:"Engage with Countdown",description:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",image:"img/og/og-image-engage-with-countdown.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},d=void 0,m={unversionedId:"js/snippets/engage-with-countdown",id:"js/snippets/engage-with-countdown",title:"Engage with Countdown",description:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",source:"@site/docs/js/snippets/engage-with-countdown.mdx",sourceDirName:"js/snippets",slug:"/js/snippets/engage-with-countdown",permalink:"/docs/js/snippets/engage-with-countdown",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/snippets/engage-with-countdown.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Eloqua",permalink:"/docs/tags/eloqua"},{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"engage-with-countdown",title:"Engage with Countdown",description:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",image:"img/og/og-image-engage-with-countdown.png",tags:["Marketing Cloud","Eloqua","JavaScript","Personalisation","Cloud Page"]},sidebar:"snippets",previous:{title:"Tailor with Data",permalink:"/docs/js/snippets/tailor-with-data"},next:{title:"Export, Import & Document SFMC Roles",permalink:"/docs/js/snippets/export-import-document-sfmc-roles"}},p={},h=[{value:"Outline",id:"outline",level:2},{value:"Final countdown",id:"final-countdown",level:2},{value:"HTML",id:"html",level:3},{value:"JavaScript",id:"javascript",level:3},{value:"Function <code>getTimeRemaining</code>",id:"function-gettimeremaining",level:4},{value:"Function <code>initializeClock</code>",id:"function-initializeclock",level:4},{value:"Function <code>updateClock</code>",id:"function-updateclock",level:4},{value:"Counting options",id:"counting-options",level:2},{value:"Take advantage of dynamic content",id:"take-advantage-of-dynamic-content",level:2}],g={toc:h},f="wrapper";function y(e){let{components:t,...n}=e;return(0,r.kt)(f,(0,a.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(s.m,{content:"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"outline"},"Outline"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"#final-countdown"},"Learn how to implement the solution")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"#counting-options"},"Adapt it to the story you are telling")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"#take-advantage-of-dynamic-content"},"Leverage personalisation for even better results"))),(0,r.kt)("p",null,"Lured visitors to your landing page? Great! Now it is time to convert them to your cause. Whitepaper download, product purchase or enrollment, doesn't matter. In each case, you will fight for the attention of the user and drive him towards the goal set for him. It's not easy in the modern web environment, but even the basics might give you the upper hand."),(0,r.kt)("h2",{id:"final-countdown"},"Final countdown"),(0,r.kt)("p",null,"Let's talk about a simple solution you can implement on your landing page in just ",(0,r.kt)(u,{input:48e4,mdxType:"Countdown"})," \u2014 a counter."),(0,r.kt)("p",null,"To add a dynamic countdown to your website, you will need basic HTML (to put it into a specific place) and a JavaScript code to do the math. CSS is optional but might spice up the style of your page."),(0,r.kt)("h3",{id:"html"},"HTML"),(0,r.kt)("p",null,"Firstly, you will need to create an ",(0,r.kt)("inlineCode",{parentName:"p"},"id")," attribute to mark the container in which you want to display the counter. It might be on the ",(0,r.kt)("inlineCode",{parentName:"p"},"<p>")," element for an inline solution or on ",(0,r.kt)("inlineCode",{parentName:"p"},"<div>")," element were you to create a more visual version."),(0,r.kt)("p",null,"Next, the spans. Add empty ",(0,r.kt)("inlineCode",{parentName:"p"},"<span>")," elements with the ",(0,r.kt)("inlineCode",{parentName:"p"},"class")," corresponding to the time unit you want to show. JavaScript will swap it for the correct numeric value and dynamically change it as time passes. You can add just hours, or you can go for full spectrum."),(0,r.kt)("p",null,"For example, did you know there is only ",(0,r.kt)(u,{input:"July 20, 2024, 20:17:40 UTC",inputType:"date",mdxType:"Countdown"})," left till 55th anniversary of the first moon landing?"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-html",metastring:"Sample countdown code for above line",Sample:!0,countdown:!0,code:!0,for:!0,above:!0,line:!0},"<p id=\"counter1\">\n For example, did you know there is only <span class=\"days\"></span> days, <span class=\"hours\"></span> hours, <span class=\"minutes\"></span> minutes and <span class=\"seconds\"></span> seconds left till 50th anniversary of the first moonlanding?\n</p>\n\n<script>\n function getTimeRemaining(endtime) {\n const now = new Date().getTime();\n const t = endtime - now;\n const seconds = Math.floor((t / 1000) % 60);\n const minutes = Math.floor((t / 1000 / 60) % 60);\n const hours = Math.floor((t / (1000 * 60 * 60)) % 24);\n const days = Math.floor(t / (1000 * 60 * 60 * 24));\n return {\n 'total': t,\n 'days': days,\n 'hours': hours,\n 'minutes': minutes,\n 'seconds': seconds\n };\n }\n\n function initializeClock(element, endtime) {\n const clock = document.querySelector(element);\n const daysSpan = clock.querySelector('.days');\n const hoursSpan = clock.querySelector('.hours');\n const minutesSpan = clock.querySelector('.minutes');\n const secondsSpan = clock.querySelector('.seconds');\n\n function updateClock() {\n const t = getTimeRemaining(endtime);\n daysSpan.innerHTML = t.days;\n hoursSpan.innerHTML = ('0' + t.hours).slice(-2);\n minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);\n secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);\n if (t.total <= 0) {\n clearInterval(timeinterval);\n }\n }\n updateClock();\n const timeinterval = setInterval(updateClock, 1000);\n }\n\n /* Declare deadline time */\n const deadline = new Date(\"2019-07-20T20:17:00+00:00\").getTime()\n /* Trigger counter function by targeting specific element and passing the above deadline */\n initializeClock('#counter1', deadline);\n<\/script>\n")),(0,r.kt)("h3",{id:"javascript"},"JavaScript"),(0,r.kt)("p",null,"There is much more fun in the JavaScript part. Worry not - you don't need to know the language at all. Let's have a look at the lines to understand what is happening on the general level and then focus on personalisation options."),(0,r.kt)("h4",{id:"function-gettimeremaining"},"Function ",(0,r.kt)("inlineCode",{parentName:"h4"},"getTimeRemaining")),(0,r.kt)("p",null,"The first function does the math behind countdown. With the deadline set for the counter and the current time took from visitor's hardware, it calculates the remaining values of each time unit."),(0,r.kt)("p",null,"Remember to keep there those and only those units that you actually use in your counter. The rest should be deleted (for example, if you want to get rid of the ",(0,r.kt)("em",{parentName:"p"},"day")," unit, remove both the ",(0,r.kt)("inlineCode",{parentName:"p"},"const days = (...)")," line and ",(0,r.kt)("inlineCode",{parentName:"p"},"'days': days,")," from the return statement)."),(0,r.kt)("h4",{id:"function-initializeclock"},"Function ",(0,r.kt)("inlineCode",{parentName:"h4"},"initializeClock")),(0,r.kt)("p",null,"The second function is responsible for finding the ",(0,r.kt)("inlineCode",{parentName:"p"},"id")," attribute and ",(0,r.kt)("inlineCode",{parentName:"p"},"<span>")," elements we created in the HTML part and updating the countdown every second. Simple and only possible edit would be to delete the line with time unit that will not be used, just as mentioned above."),(0,r.kt)("h4",{id:"function-updateclock"},"Function ",(0,r.kt)("inlineCode",{parentName:"h4"},"updateClock")),(0,r.kt)("p",null,"The job of the last one is to swap span elements targeted in ",(0,r.kt)("inlineCode",{parentName:"p"},"initializeClock")," to values calculated by ",(0,r.kt)("inlineCode",{parentName:"p"},"getTimeRemaining")," - and to stop counter refreshing after it gets to zero. Again - only edit needed would be to delete the unneeded unit."),(0,r.kt)("p",null,"To not leave you with \u201cdelete this, delete that\u201d talk and empty hands, feel free to take a look at a simplified ",(0,r.kt)("a",{parentName:"p",href:"https://gist.github.com/MateuszDabrowski/f433cecf3c02c400c9e74d08b78ad50c#file-day-counter-html"},"sample code")," that counts only days. As for the placement in your code - it will be best to put the ",(0,r.kt)("inlineCode",{parentName:"p"},"<script>(...)<\/script>")," part right before the closing ",(0,r.kt)("inlineCode",{parentName:"p"},"</body>")," tag."),(0,r.kt)("h2",{id:"counting-options"},"Counting options"),(0,r.kt)("p",null,"Time for the important part - the one you will always edit. The counter's deadline. You probably already noticed ",(0,r.kt)("inlineCode",{parentName:"p"},"const deadline")," in the sample and guessed it is the line we will focus on now. It might look a bit intimidating with the weird structure, but in this way, it actually gives you a lot of power. This date formatting is an example of an ",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/ISO_8601"},"ISO 8601")," standard."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},'const deadline = new Date("2077-07-20T20:17:00+00:00").getTime()\n')),(0,r.kt)("p",null,"To use it, insert date in a YYYY-MM-DD",(0,r.kt)("strong",{parentName:"p"},"T"),"hh:mm:ss ",(0,r.kt)("strong",{parentName:"p"},"+"),"hh:mm format. The ",(0,r.kt)("strong",{parentName:"p"},"T")," is just a delimiter between date and time, ",(0,r.kt)("strong",{parentName:"p"},"+"),"hh:mm, on the other hand, allows you to add time variable (for example summertime change)."),(0,r.kt)("p",null,"However, depending on the needs, you may want to use other available formats, for example, simplified only-date format perfect when you need to count days."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},'const deadline = new Date("2077-01-31").getTime();\n')),(0,r.kt)("p",null,"Another option is to calculate the amount of time to count down from instead of a static end date. It might be a much better solution if you want to create a feeling of pressure for a small task or engage visitor without a real deadline on your side."),(0,r.kt)("p",null,"To use this solution, you need to declare the starting value. In below example, it is set to 15 days. The code multiplies 1000 milliseconds times 60 seconds times 60 minutes times 24 hours. Want to count 5 minutes? Go for 1000 ",(0,r.kt)("em",{parentName:"p"}," 60 ")," 60 * 5."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);\n")),(0,r.kt)("h2",{id:"take-advantage-of-dynamic-content"},"Take advantage of dynamic content"),(0,r.kt)("p",null,"Simple countdown on landing page already can make an enormous difference to your conversion rate. But, of course, you can get even more out of it by using the toolset of your marketing automation tool."),(0,r.kt)("p",null,"There are many cases where urgency is a perfect solution, however, not always all visitors should\nsee the same timeframe. An example? Renewal notification that counts downtime before a subscription expires. Instead of a\nstatic product end date, implement the counter and put some pressure with seconds running out in real-time."),(0,r.kt)("p",null,"To do this, make your marketing automation tool push a date value (in above mentioned ISO 8601 format) from the visitor data model right into var deadline JavaScript line."),(0,r.kt)(i.Z,{groupId:"marketingAutomationPlatforms",defaultValue:"sfmc",values:[{label:"Salesforce Marketing Cloud",value:"sfmc"},{label:"Oracle Eloqua",value:"eloqua"}],mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"sfmc",mdxType:"TabItem"},(0,r.kt)("p",null,"In Salesforce Marketing Cloud, you can use either ",(0,r.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/personalisationStringsAMPscript.htm"},"AMPScript personalisation string")," or SSJS personalisation string:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"/* Remember to check whether the date you are using has Local or System based timezone */\nconst deadline = new Date('<ctrl:field name=DateTypeAttributeName />').getTime();\n")),(0,r.kt)("p",null,"Wondering what will happen with visitors that don't have this date value? With just personalisation string such users will see the counter set to zero right from the start. Of course, we would rather not have it that way. Thankfully SSJS personalisations strings allow us to add default value very easily:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"const deadline = new Date('<ctrl:field name=DateTypeAttributeName default='2077-07-20T20:17:00+00:00' />').getTime();\n")),(0,r.kt)("p",null,"You can also easily create a dynamic content block that will be visible only when the date from personalisation string is soon enough, by leveraging a simple ",(0,r.kt)("inlineCode",{parentName:"p"},"if/else")," logic of SSJS.")),(0,r.kt)(l.Z,{value:"eloqua",mdxType:"TabItem"},(0,r.kt)("p",null,"In Oracle Eloqua it would be a ",(0,r.kt)("a",{parentName:"p",href:"https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/FieldMerges/FieldMergeExamples.htm"},"field merge"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"const deadline = new Date('<span class=eloquaemail> Date_Field_Merge1 </span>').getTime();\n")),(0,r.kt)("p",null,"Wondering what will happen with visitors that don't have this date value? With just field merge such users will see the counter set to zero right from the start. Of course, we would rather not have it that way. Let's create a remedy with yet another marketing automation tool - ",(0,r.kt)("a",{parentName:"p",href:"https://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAA/Help/DynamicContent/DynamicContentExamples.htm"},"dynamic content")," (that's Eloqua name for a content element that adapts to the visitor depending on the value in the data model). Just wrap the HTML part of a counter and set it to be visible only if the visitor has a date value in the field used in field merge (or even when it is also within the chosen timeframe)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-html"},'<span elqid="001" elqtype="DynamicContent" class="remove-absolute" style="display: block"></span>\n')))),(0,r.kt)("p",null,"Use it hard. How? Put that renewal offer with a counter inside a dynamic content and insert it into every content landing page. Simple and quick solution to make sure your customers will be notified ",(0,r.kt)("em",{parentName:"p"},"when")," they should. You can also put single dynamic content box related to events or webinars and push information with the counter about the nearest happening one. Just be sure to leverage dynamic content options to show different texts depending on visitor persona. And, of course, update that dynamic content after the event."),(0,r.kt)("p",null,"What next? Take the code, implement on a landing page, build an urgency fueled story and watch boosted engagement do its job. You can count on it."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"As emails don't support JavaScript, you won't be able to leverage the above code for your sends. However, that doesn't mean you cannot increase engagement with a countdown in your outbound."),(0,r.kt)("p",{parentName:"admonition"},"Multiple solutions create dynamically changing .gifs that allows you to create a real-time timer in your email. I'm using ",(0,r.kt)("a",{parentName:"p",href:"https://www.sendtric.com"},"Sendtric"),". A different approach, same engagement boosting value.")))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7f9f5c99.283a3766.js b/assets/js/7f9f5c99.283a3766.js deleted file mode 100644 index df49a9507..000000000 --- a/assets/js/7f9f5c99.283a3766.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1092],{4137:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>c});var n=a(7294);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?r(Object(a),!0).forEach((function(e){l(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function o(t,e){if(null==t)return{};var a,n,l=function(t,e){if(null==t)return{};var a,n,l={},r=Object.keys(t);for(n=0;n<r.length;n++)a=r[n],e.indexOf(a)>=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n<r.length;n++)a=r[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var u=n.createContext({}),s=function(t){var e=n.useContext(u),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=s(t.components);return n.createElement(u.Provider,{value:e},t.children)},d="mdxType",p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,u=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),d=s(a),k=l,c=d["".concat(u,".").concat(k)]||d[k]||p[k]||r;return a?n.createElement(c,i(i({ref:e},m),{},{components:a})):n.createElement(c,i({ref:e},m))}));function c(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,i=new Array(r);i[0]=k;var o={};for(var u in e)hasOwnProperty.call(e,u)&&(o[u]=e[u]);o.originalType=t,o[d]="string"==typeof t?t:l,i[1]=o;for(var s=2;s<r;s++)i[s]=a[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}k.displayName="MDXCreateElement"},425:(t,e,a)=>{a.d(e,{Z:()=>i});var n=a(7294),l=a(6010);const r={tabItem:"tabItem_Ymn6"};function i(t){let{children:e,hidden:a,className:i}=t;return n.createElement("div",{role:"tabpanel",className:(0,l.Z)(r.tabItem,i),hidden:a},e)}},3992:(t,e,a)=>{a.d(e,{Z:()=>T});var n=a(7462),l=a(7294),r=a(6010),i=a(2957),o=a(6550),u=a(5238),s=a(3609),m=a(2560);function d(t){return function(t){return l.Children.map(t,(t=>{if(!t||(0,l.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:l}}=t;return{value:e,label:a,attributes:n,default:l}}))}function p(t){const{values:e,children:a}=t;return(0,l.useMemo)((()=>{const t=e??d(a);return function(t){const e=(0,s.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(t),t}),[e,a])}function k(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function c(t){let{queryString:e=!1,groupId:a}=t;const n=(0,o.k6)(),r=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,u._X)(r),(0,l.useCallback)((t=>{if(!r)return;const e=new URLSearchParams(n.location.search);e.set(r,t),n.replace({...n.location,search:e.toString()})}),[r,n])]}function N(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,r=p(t),[i,o]=(0,l.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!k({value:e,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:r}))),[u,s]=c({queryString:a,groupId:n}),[d,N]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,r]=(0,m.Nk)(a);return[n,(0,l.useCallback)((t=>{a&&r.set(t)}),[a,r])]}({groupId:n}),b=(()=>{const t=u??d;return k({value:t,tabValues:r})?t:null})();(0,l.useLayoutEffect)((()=>{b&&o(b)}),[b]);return{selectedValue:i,selectValue:(0,l.useCallback)((t=>{if(!k({value:t,tabValues:r}))throw new Error(`Can't select invalid tab value=${t}`);o(t),s(t),N(t)}),[s,N,r]),tabValues:r}}var b=a(1048);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(t){let{className:e,block:a,selectedValue:o,selectValue:u,tabValues:s}=t;const m=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.o5)(),p=t=>{const e=t.currentTarget,a=m.indexOf(e),n=s[a].value;n!==o&&(d(e),u(n))},k=t=>{let e=null;switch(t.key){case"Enter":p(t);break;case"ArrowRight":{const a=m.indexOf(t.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(t.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return l.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":a},e)},s.map((t=>{let{value:e,label:a,attributes:i}=t;return l.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,key:e,ref:t=>m.push(t),onKeyDown:k,onClick:p},i,{className:(0,r.Z)("tabs__item",h.tabItem,i?.className,{"tabs__item--active":o===e})}),a??e)})))}function y(t){let{lazy:e,children:a,selectedValue:n}=t;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=r.find((t=>t.props.value===n));return t?(0,l.cloneElement)(t,{className:"margin-top--md"}):null}return l.createElement("div",{className:"margin-top--md"},r.map(((t,e)=>(0,l.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function f(t){const e=N(t);return l.createElement("div",{className:(0,r.Z)("tabs-container",h.tabList)},l.createElement(g,(0,n.Z)({},t,e)),l.createElement(y,(0,n.Z)({},t,e)))}function T(t){const e=(0,b.Z)();return l.createElement(f,(0,n.Z)({key:String(e)},t))}},7271:(t,e,a)=>{a.d(e,{V:()=>r,z:()=>l});var n=a(7294);const l=t=>{let{link:e,text:a,newTab:l=!1}=t;return n.createElement(n.Fragment,null,n.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:e,target:l?"_blank":"_self"},a))},r=t=>{let{linkLeft:e,textLeft:a,newTabLeft:l=!1,linkRight:r,textRight:i,newTabRight:o=!1}=t;return n.createElement(n.Fragment,null,n.createElement("div",{class:"col col--12"},n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:e,target:l?"_blank":"_self"},a),n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:r,target:o?"_blank":"_self"},i)))}},1872:(t,e,a)=>{a.d(e,{m:()=>r});var n=a(7294);const l="leadText_qzwo",r=t=>{let{content:e}=t;return n.createElement(n.Fragment,null,n.createElement("p",{id:l},e))}},6266:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>m,default:()=>b,frontMatter:()=>s,metadata:()=>d,toc:()=>k});var n=a(7462),l=(a(7294),a(4137)),r=a(3992),i=a(425),o=a(1872),u=a(7271);const s={id:"sfmc-system-data-views",title:"SFMC System Data Views",sidebar_label:"System Data Views",description:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-system-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","Email","Automation","Journey"]},m=void 0,d={unversionedId:"config/sfmc-system-data-views",id:"config/sfmc-system-data-views",title:"SFMC System Data Views",description:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",source:"@site/docs/config/sfmc-system-data-views.mdx",sourceDirName:"config",slug:"/config/sfmc-system-data-views",permalink:"/docs/config/sfmc-system-data-views",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-system-data-views.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Analytics",permalink:"/docs/tags/analytics"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Email",permalink:"/docs/tags/email"},{label:"Automation",permalink:"/docs/tags/automation"},{label:"Journey",permalink:"/docs/tags/journey"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1702854756,formattedLastUpdatedAt:"Dec 17, 2023",frontMatter:{id:"sfmc-system-data-views",title:"SFMC System Data Views",sidebar_label:"System Data Views",description:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-system-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","Email","Automation","Journey"]},sidebar:"docs",previous:{title:"SFMC Config",permalink:"/docs/category/sfmc-config"},next:{title:"Mobile Connect Data Views",permalink:"/docs/config/sfmc-mobile-connect-data-views"}},p={},k=[{value:"Data Views Basics",id:"data-views-basics",level:2},{value:"Subscriber Data Views",id:"subscriber-data-views",level:2},{value:"_Subscribers",id:"_subscribers",level:3},{value:"_EnterpriseAttribute",id:"_enterpriseattribute",level:3},{value:"Email Data Views",id:"email-data-views",level:2},{value:"_Job",id:"_job",level:3},{value:"_Sent",id:"_sent",level:3},{value:"_Open",id:"_open",level:3},{value:"_Click",id:"_click",level:3},{value:"_Bounce",id:"_bounce",level:3},{value:"_Complaint",id:"_complaint",level:3},{value:"Subscription Data Views",id:"subscription-data-views",level:2},{value:"_Unsubscribe",id:"_unsubscribe",level:3},{value:"_BusinessUnitUnsubscribes",id:"_businessunitunsubscribes",level:3},{value:"_ListSubscribers",id:"_listsubscribers",level:3},{value:"Mobile Connect Data Views",id:"mobile-connect-data-views",level:2},{value:"Journey Data Views",id:"journey-data-views",level:2},{value:"_Journey",id:"_journey",level:3},{value:"_JourneyActivity",id:"_journeyactivity",level:3},{value:"Automation Data Views",id:"automation-data-views",level:2},{value:"_AutomationInstance",id:"_automationinstance",level:3},{value:"_AutomationActivityInstance",id:"_automationactivityinstance",level:3},{value:"Custom Data Views",id:"custom-data-views",level:2}],c={toc:k},N="wrapper";function b(t){let{components:e,...a}=t;return(0,l.kt)(N,(0,n.Z)({},c,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)(o.m,{content:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",mdxType:"LeadText"}),(0,l.kt)("h2",{id:"data-views-basics"},"Data Views Basics"),(0,l.kt)("p",null,"System Data Views are ",(0,l.kt)("strong",{parentName:"p"},"built-in backend Data Extensions")," that you can use to find information about your subscribers and sends. You ",(0,l.kt)("strong",{parentName:"p"},"cannot change them"),", but you can leverage their data in SQL queries for quick reports in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics#query-studio"},"Query Studio")," or outputting to the standard Data Extension. They are excellent fuel for SSJS logic."),(0,l.kt)("p",null,"Data Views have ",(0,l.kt)("strong",{parentName:"p"},"data retention settings set to 6 months"),". If you want to store any data for a more extended period, you must create an Automation that will be copying data to your Data Extension."),(0,l.kt)("p",null,"Be careful, however, as some of the System Data Views can get absurdly big quick, and making copies within your Marketing Cloud Instance may lead to performance issues. In such cases, a much better idea might be to export that data on a scheduled basis to an external Data Warehouse."),(0,l.kt)("p",null,"Another important point related to Data Views is always knowing which Data View you genuinely want to use. For example, in most cases, you will be interested in parent-level ",(0,l.kt)("a",{parentName:"p",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers"))," Data View, which means you will need to use the ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from#enterprise-data-extension"},(0,l.kt)("inlineCode",{parentName:"a"},"Ent."))," prefix in your query."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"Below you can find selected Salesforce Marketing Cloud Data Views focused on Subscribers, Journeys, Email and SMS Channel. I plan to cover the rest of them in the future."),(0,l.kt)("p",{parentName:"admonition"},"Be sure to check the excellent ",(0,l.kt)("a",{parentName:"p",href:"https://dataviews.io"},"Dataviews.io")," - an interactive system tables relationship diagram created by ",(0,l.kt)("a",{parentName:"p",href:"https://sfmarketing.cloud/author/zjarczynska/"},"Zuzanna Jarczy\u0144ska"),". It will for sure help you with multi-view ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"),"s"),"."),(0,l.kt)("p",{parentName:"admonition"},"There is also a more detailed ",(0,l.kt)("a",{parentName:"p",href:"https://dbdiagram.io/d/5ff259ed80d742080a34e3c3"},"System Tables relationship diagram")," created by ",(0,l.kt)("a",{parentName:"p",href:"https://cameronrobert.com.au"},"Cameron Roberts")," that contains SQL Database structure along with field lengths."),(0,l.kt)(u.V,{linkLeft:"https://dataviews.io",textLeft:"Zuza's DataViews.io",newTabLeft:"true",linkRight:"https://dbdiagram.io/d/5ff259ed80d742080a34e3c3",textRight:"Cam's Detailed Diagram",newTabRight:"true",mdxType:"ButtonRow"})),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"subscriber-data-views"},"Subscriber Data Views"),(0,l.kt)("h3",{id:"_subscribers"},"_Subscribers"),(0,l.kt)("p",null,"Stores information about your Subscribers. Great for high-level perspective or adding Email Address field to other more detailed Data Views."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DateUndeliverable"),(0,l.kt)("td",{parentName:"tr",align:null},"The date an email for the subscriber was returned as undeliverable"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DateJoined"),(0,l.kt)("td",{parentName:"tr",align:null},"The Date, the subscriber, joined your list"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DateUnsubscribed"),(0,l.kt)("td",{parentName:"tr",align:null},"The Date, the subscriber, unsubscribed from your list"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain of the subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EmailAddress"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber's email address"),(0,l.kt)("td",{parentName:"tr",align:null},"Email"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceCount"),(0,l.kt)("td",{parentName:"tr",align:null},"The total number of bounces accrued by the subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"A potential alternate identifier for subscribers."),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberType"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber type for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Status"),(0,l.kt)("td",{parentName:"tr",align:null},"The status of the subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Locale"),(0,l.kt)("td",{parentName:"tr",align:null},"The locale code for the subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Locale"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Status")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"active"),(0,l.kt)("li",{parentName:"ul"},"held"),(0,l.kt)("li",{parentName:"ul"},"unsubscribed"),(0,l.kt)("li",{parentName:"ul"},"bounced")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"SubscriberType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"ExactTarget"),(0,l.kt)("li",{parentName:"ul"},"Unknown External System\nIn most cases you will see only ",(0,l.kt)("inlineCode",{parentName:"li"},"Exact Target")," in your database.")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n sub.SubscriberID\n , sub.DateUndeliverable\n , sub.DateJoined\n , sub.DateUnsubscribed\n , sub.Domain\n , sub.EmailAddress\n , sub.BounceCount\n , sub.SubscriberKey\n , sub.SubscriberType\n , sub.Status\n , sub.Locale\nFROM _Subscribers AS sub\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Subscribers")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"If you are using the query in the child Business Unit, use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-from#enterprise-data-extension"},(0,l.kt)("inlineCode",{parentName:"a"},"Ent."))," prefix, as the data is stored on Parent BU level."),(0,l.kt)("li",{parentName:"ol"},"If you need high-level data on your subscribers, this Data View might be enough. If you want to learn more (for example, why a subscriber bounced, where did he unsubscribe), you will need to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," other Data Views."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberID")," to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," data from different engagement-based Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," or ",(0,l.kt)("a",{parentName:"li",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce")),"."),(0,l.kt)("li",{parentName:"ol"},"The ",(0,l.kt)("inlineCode",{parentName:"li"},"Status")," field is excellent for a quick check of your database quality. It is also nice to manage multiple records. Pull the selection of your subscribers with SQL Query, add a new status with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#custom-values"},"custom value")," (for example, ",(0,l.kt)("inlineCode",{parentName:"li"},"'unsubscribed' AS Status"),") and leverage Automation to export-transfer-import the Data Extension to All Subscribers."),(0,l.kt)("li",{parentName:"ol"},"This Data View, along with ",(0,l.kt)("a",{parentName:"li",href:"#_enterpriseattribute"},(0,l.kt)("inlineCode",{parentName:"a"},"_EnterpriseAttribute")),", ",(0,l.kt)("a",{parentName:"li",href:"#_businessunitunsubscribes"},(0,l.kt)("inlineCode",{parentName:"a"},"_BusinessUnitUnsubscribes"))," and ",(0,l.kt)("a",{parentName:"li",href:"#_listsubscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_ListSubscribers")),", does not have six-month data retention.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_enterpriseattribute"},"_EnterpriseAttribute"),(0,l.kt)("p",null,"Stores information about your Profile and Preference Attributes from Email Studio."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"_SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record stored."),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null}))))),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n ea._SubscriberID AS SubscriberID\n , ea.ProfileAttributeWithoutSpaces\n , ea.[Profile Attribute With Spaces] AS ProfileAttributeWithSpace\n , ea.PreferenceAttributeWithoutSpaces\n , ea.[Preference Attribute With Spaces] AS PreferenceAttributeWithSpace\nFROM _EnterpriseAttribute AS ea\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_EnterpriseAttribute")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"If you are using the query in the child Business Unit, always use ",(0,l.kt)("inlineCode",{parentName:"li"},"ENT.")," prefix as it is enterprise-level only Data View."),(0,l.kt)("li",{parentName:"ol"},"When querying or joining ",(0,l.kt)("inlineCode",{parentName:"li"},"_EnterpriseAttribute"),", always include the underscore before SubscriberID - this is the only Data View that requires it."),(0,l.kt)("li",{parentName:"ol"},"Despite the ",(0,l.kt)("inlineCode",{parentName:"li"},"Email Address")," field is visible in the Salesforce Marketing Cloud UI when you go to Profile Attributes, it is not part of the ",(0,l.kt)("inlineCode",{parentName:"li"},"_EnterpriseAttribute")," Data View. To get the Email Address of your Subscriber, query the ",(0,l.kt)("inlineCode",{parentName:"li"},"_Subscribers")," Data View."),(0,l.kt)("li",{parentName:"ol"},"Unfortunately, the default Preference Attribute ",(0,l.kt)("inlineCode",{parentName:"li"},"HTML Email")," is not accessible via query."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"_EnterpriseAttribute")," Data View is unique, as it might contain spaces in field names. You build it by creating the Profile Attributes in Email Studio. If your profile attribute name contains space, you will have to use the square bracket notation to capture it: ",(0,l.kt)("inlineCode",{parentName:"li"},"SELECT [Attribute With Spaces] FROM _EnterpriseAttribute"),"."),(0,l.kt)("li",{parentName:"ol"},"This Data View, along with ",(0,l.kt)("a",{parentName:"li",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers")),", ",(0,l.kt)("a",{parentName:"li",href:"#_businessunitunsubscribes"},(0,l.kt)("inlineCode",{parentName:"a"},"_BusinessUnitUnsubscribes"))," and ",(0,l.kt)("a",{parentName:"li",href:"#_listsubscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_ListSubscribers"))," , does not have six-month data retention.")),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"email-data-views"},"Email Data Views"),(0,l.kt)("h3",{id:"_job"},"_Job"),(0,l.kt)("p",null,"Stores information about your Email Sends Jobs. Great for capturing detailed data about your communication, especially when paired with Send Log. Must-have for extending your engagement-based Email Data Views."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EmailID"),(0,l.kt)("td",{parentName:"tr",align:null},"The email ID for the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID number for the account that performed the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountUserID"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID number for the account user that performed the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FromName"),(0,l.kt)("td",{parentName:"tr",align:null},"The from name in the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FromEmail"),(0,l.kt)("td",{parentName:"tr",align:null},"The from email address in the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Email"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SchedTime"),(0,l.kt)("td",{parentName:"tr",align:null},"The time the job was scheduled"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PickupTime"),(0,l.kt)("td",{parentName:"tr",align:null},"The time the Marketing Cloud application started the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DeliveredTime"),(0,l.kt)("td",{parentName:"tr",align:null},"The time the email was delivered"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventID"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID for the job event"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsMultipart"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the job was sent as multi-part MIME or not"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobStatus"),(0,l.kt)("td",{parentName:"tr",align:null},"The status of the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ModifiedBy"),(0,l.kt)("td",{parentName:"tr",align:null},"If modified, the user who modified the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ModifiedDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the job was modified"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EmailName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the email sent by the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EmailSubject"),(0,l.kt)("td",{parentName:"tr",align:null},"The subject of the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsWrapped"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the links in the email were wrapped for tracking"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TestEmailAddr"),(0,l.kt)("td",{parentName:"tr",align:null},"The test email address used in the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Email"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Category"),(0,l.kt)("td",{parentName:"tr",align:null},"The job category"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BccEmail"),(0,l.kt)("td",{parentName:"tr",align:null},"Any email address send in the BCC field"),(0,l.kt)("td",{parentName:"tr",align:null},"Email"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OriginalSchedTime"),(0,l.kt)("td",{parentName:"tr",align:null},"The initially scheduled time for the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CreatedDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the job was created"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CharacterSet"),(0,l.kt)("td",{parentName:"tr",align:null},"The character set used in the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IPAddress"),(0,l.kt)("td",{parentName:"tr",align:null},"This value will always be a null value."),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SalesForceTotalSubscriberCount"),(0,l.kt)("td",{parentName:"tr",align:null},"The total number of Salesforce subscribers included in the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SalesForceErrorSubscriberCount"),(0,l.kt)("td",{parentName:"tr",align:null},"The total number of Salesforce subscribers included in the job that received errors"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SendType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of send used in the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DynamicEmailSubject"),(0,l.kt)("td",{parentName:"tr",align:null},"The dynamic email subject included in the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SuppressTracking"),(0,l.kt)("td",{parentName:"tr",align:null},"If tracking information for this job was suppressed"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SendClassificationType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of send classification for the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SendClassification"),(0,l.kt)("td",{parentName:"tr",align:null},"The custom name of send classification for the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ResolveLinksWithCurrentData"),(0,l.kt)("td",{parentName:"tr",align:null},"If the job resolved links with current data"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EmailSendDefinition"),(0,l.kt)("td",{parentName:"tr",align:null},"The email send definition used in the job"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DeduplicateByEmail"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the email addresses in the job are used to deduplicate subscribers"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggererSendDefinitionObjectID"),(0,l.kt)("td",{parentName:"tr",align:null},"The object ID for the triggered send definition"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggeredSendCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The customer key for the triggered send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"JobType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},"MULTIPLE_SEND")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"JobStatus")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Deleted"),(0,l.kt)("li",{parentName:"ul"},"New")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Category")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Test Send Emails"),(0,l.kt)("li",{parentName:"ul"},"Triggered Sends"),(0,l.kt)("li",{parentName:"ul"},"Version XX (where XX is a number)"),(0,l.kt)("li",{parentName:"ul"},"GUID_VXX (36 character hyphen separated GUID followed by underscore and VXX where XX is a number)")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"CharacterSet")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Unicode - UTF-8")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"SendType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"ExactTargetSend")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"SendClassificationType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Default Commercial"),(0,l.kt)("li",{parentName:"ul"},"Default Transactional")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n job.JobID\n , job.EmailID\n , job.AccountID\n , job.AccountUserID\n , job.FromName\n , job.FromEmail\n , job.SchedTime\n , job.PickupTime\n , job.DeliveredTime\n , job.EventID\n , job.IsMultipart\n , job.JobType\n , job.JobStatus\n , job.ModifiedBy\n , job.ModifiedDate\n , job.EmailName\n , job.EmailSubject\n , job.IsWrapped\n , job.TestEmailAddr\n , job.Category\n , job.BccEmail\n , job.OriginalSchedTime\n , job.CreatedDate\n , job.CharacterSet\n , job.IPAddress\n , job.SalesForceTotalSubscriberCount\n , job.SalesForceErrorSubscriberCount\n , job.SendType\n , job.DynamicEmailSubject\n , job.SuppressTracking\n , job.SendClassificationType\n , job.SendClassification\n , job.ResolveLinksWithCurrentData\n , job.EmailSendDefinition\n , job.DeduplicateByEmail\n , job.TriggererSendDefinitionObjectID\n , job.TriggeredSendCustomerKey\nFROM _Job AS job\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Job")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"JobID")," field will be your bread and butter to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," with other engagement-based Data Views."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"EmailName"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"FromName"),", and ",(0,l.kt)("inlineCode",{parentName:"li"},"FromEmail")," are handy data points missing in the ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click")),", ",(0,l.kt)("a",{parentName:"li",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce"))," Data Views and are worth checking for reporting needs."),(0,l.kt)("li",{parentName:"ol"},"If you are performing A/B tests or want to analyse the subject line's impact on performance, be sure to pick ",(0,l.kt)("inlineCode",{parentName:"li"},"EmailSubject"),". Pair it with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#conditional-values-with-case"},(0,l.kt)("inlineCode",{parentName:"a"},"CASE"))," to create a great knowledge source for your content team."),(0,l.kt)("li",{parentName:"ol"},"For debugging purposes, be sure to check out ",(0,l.kt)("inlineCode",{parentName:"li"},"IsWrapped")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SuppressTracking")," - if you are missing tracking data, ",(0,l.kt)("inlineCode",{parentName:"li"},"CharacterSet")," - if you have problems with formatting, ",(0,l.kt)("inlineCode",{parentName:"li"},"SendClassification")," - if you have issues with unsubscribers or spam complaints."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"AccountUserID")," field is fantastic for ",(0,l.kt)("inlineCode",{parentName:"li"},"_Job"),"-based Audit Log creation. Unfortunately, there is no UI-based easy way to determine which user has which UserID. You can either use SOAP API or match based on these SQL results.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"_Job")," Data View is unique among other Email-focused Data Views, as it shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,l.kt)("a",{parentName:"p",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"p",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"p",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," and other data from all Business Units, but this is not the case with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Job"),". You can query only those jobs that occurred in the Business Unit where you execute your SQL snippet."),(0,l.kt)("p",{parentName:"admonition"},"Always consider this when choosing Business Unit to execute the query and the type of ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," statement.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_sent"},"_Sent"),(0,l.kt)("p",null,"Stores information about your Email Sends. Great for understanding who had a chance to receive your message and whose communication did not leave your system."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"Your parent account ID (MID) number"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OYBAccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"Null")),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,l.kt)("td",{parentName:"tr",align:null},"The batch ID number for any batches used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the send took place"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain at which the send occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggererSendDefinitionObjectID"),(0,l.kt)("td",{parentName:"tr",align:null},"The object ID for the triggered send definition"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggeredSendCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The customer key for the triggered send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n sent.AccountID\n , sent.OYBAccountID\n , sent.JobID\n , sent.ListID\n , sent.BatchID\n , sent.SubscriberID\n , sent.SubscriberKey\n , sent.EventDate\n , sent.Domain\n , sent.TriggererSendDefinitionObjectID\n , sent.TriggeredSendCustomerKey\nFROM _Sent AS sent\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Sent")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JobID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"BatchID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberId")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," to match various events from multiple Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click")),", ",(0,l.kt)("a",{parentName:"li",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce"))," for a single engagement with a particular subscriber. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"The most valuable data here is the ",(0,l.kt)("inlineCode",{parentName:"li"},"EventDate")," field that lets you know when the email was sent (and whether that happened at all)."),(0,l.kt)("li",{parentName:"ol"},"If you have triggered a send for an email and after a few minutes you don't see it here, in most cases, it means that the send was blocked and never left Marketing Cloud. Check ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-enhanced-send-log"},"enhanced Send Log"),", applied personalisation, data source, ",(0,l.kt)("inlineCode",{parentName:"li"},"RaiseError")," scripts.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_open"},"_Open"),(0,l.kt)("p",null,"Stores information about your Email Opens. For when you need to know when someone opened your email. Kind of."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"Your parent account ID (MID) number"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OYBAccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"Null")),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,l.kt)("td",{parentName:"tr",align:null},"The batch ID number for any batches used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the open took place"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain at which the open occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsUnique"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the event is unique or repeated"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggererSendDefinitionObjectID"),(0,l.kt)("td",{parentName:"tr",align:null},"The object ID for the triggered send definition"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggeredSendCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The customer key for the triggered send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n opened.AccountID\n , opened.OYBAccountID\n , opened.JobID\n , opened.ListID\n , opened.BatchID\n , opened.SubscriberID\n , opened.SubscriberKey\n , opened.EventDate\n , opened.Domain\n , opened.IsUnique\n , opened.TriggererSendDefinitionObjectID\n , opened.TriggeredSendCustomerKey\nFROM _Open AS opened\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Open")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JobID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"BatchID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberId")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," to match various events from multiple Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click")),", ",(0,l.kt)("a",{parentName:"li",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce"))," for a single engagement with a particular subscriber. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"_open.IsUnique = 1")," in ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," or ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," to focus on the the first occurence of each event. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"The most valuable data here is the ",(0,l.kt)("inlineCode",{parentName:"li"},"EventDate")," field that lets you know when the email was opened (and whether that happened at all). But with email opens, it's not that easy. In many cases, the lack of open data in this Data View doesn't mean that your recipient for sure did not open the email. And in some instances, tracked open might not mean he did.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"There is ",(0,l.kt)("strong",{parentName:"p"},"no official engagement feedback loop")," that informs Marketing Cloud (or any other Marketing Automation Platform) that your recipient opened the email."),(0,l.kt)("p",{parentName:"admonition"},"All Marketing Automation Platforms put an ",(0,l.kt)("strong",{parentName:"p"},"invisible 1px wide image in the email")," body that is unique for every email you send. When someone opens an email, its images are downloaded from the server. SFMC treats the download of this 1px wide image as proof that the recipient opened the email. And in most cases, it is correct. But..."),(0,l.kt)("p",{parentName:"admonition"},"The ",(0,l.kt)("strong",{parentName:"p"},"images don't always render")," (that's why you should always use alt-text). Some recipients opt-in on a per-email basis to download email graphics. Government audiences might not even have this option. Because of the admin policy, the privacy concerns over engagement tracking or limited internet bandwidth. In such a case, even if the user opens an email, you won't have information about it."),(0,l.kt)("p",{parentName:"admonition"},"It might lead to weird data, like clicks visible for contacts that did not open. Marketing Automation Platforms track Clicks via a different, more confident approach."),(0,l.kt)("p",{parentName:"admonition"},"It can also lead to cases where a user has both click and open data, but click data is earlier than the open. Why? Your recipient clicked something in your email and only after that decided to allow his email program to load the images in it."),(0,l.kt)("p",{parentName:"admonition"},"There might be cases where the data is wrong the other way - when you see that email as opened, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on ",(0,l.kt)("inlineCode",{parentName:"p"},"_Open")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"_Click")," Data Views, as those bots will open the email and click all its links within a second. Something not possible for an actual human.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_click"},"_Click"),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("p",null,"Stores information about your Email Clicks. Detailed click reporting and behavioural logic are possible, thanks to this one."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"Your parent account ID (MID) number"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OYBAccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"Null")),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,l.kt)("td",{parentName:"tr",align:null},"The batch ID number for any batches used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the click took place"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain at which the click occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"URL"),(0,l.kt)("td",{parentName:"tr",align:null},"The URL for the link clicked. Dynamic elements are shown as code: ",(0,l.kt)("inlineCode",{parentName:"td"},"www.example.com?id=%%SubID%%")),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"LinkName"),(0,l.kt)("td",{parentName:"tr",align:null},"The link name assigned in the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"LinkContent"),(0,l.kt)("td",{parentName:"tr",align:null},"The link content assigned in the email send. Dynamic elements are shown as result: ",(0,l.kt)("inlineCode",{parentName:"td"},"www.example.com?id=12345")),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsUnique"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the event is unique or repeated"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggererSendDefinitionObjectID"),(0,l.kt)("td",{parentName:"tr",align:null},"The object ID for the triggered send definition"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggeredSendCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The customer key for the triggered send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n click.AccountID\n , click.OYBAccountID\n , click.JobID\n , click.ListID\n , click.BatchID\n , click.SubscriberID\n , click.SubscriberKey\n , click.EventDate\n , click.Domain\n , click.URL\n , click.LinkName\n , click.LinkContent\n , click.IsUnique\n , click.TriggererSendDefinitionObjectID\n , click.TriggeredSendCustomerKey\nFROM _Click AS click\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Click")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JobID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"BatchID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberId")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," to match various events from multiple Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce"))," for a single engagement with a particular subscriber. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"_click.IsUnique = 1")," in ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," or ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," to focus on the first occurence of each event. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"The most valuable data here is the ",(0,l.kt)("inlineCode",{parentName:"li"},"EventDate")," field that lets you know when the email was clicked (and whether that happened at all)."),(0,l.kt)("li",{parentName:"ol"},"You can significantly improve the value of that information by checking the ",(0,l.kt)("inlineCode",{parentName:"li"},"LinkName")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"LinkContent")," fields to understand which links proved interesting for your customers."),(0,l.kt)("li",{parentName:"ol"},"Suppose you want to create an extensive report on link clicks. In that case, you might want to use the ",(0,l.kt)("inlineCode",{parentName:"li"},"URL")," field instead of ",(0,l.kt)("inlineCode",{parentName:"li"},"LinkContent")," due to the former not showing final personalisation values. It will be much easier to group clicks or even cleanly delete all AMPScript from them.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"There might be cases where the click data is wrong - when you see that email as clicked, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on ",(0,l.kt)("inlineCode",{parentName:"p"},"_Open")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"_Click")," Data Views, as those bots will open the email and click all its links within a second. Something not possible for a actual human.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_bounce"},"_Bounce"),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("p",null,"Stores information about your Email Bounces. Best place in Marketing Cloud to understand why your messages are not getting delivered."),(0,l.kt)("p",null,"This Data View, along with ",(0,l.kt)("a",{parentName:"p",href:"#_complaint"},(0,l.kt)("inlineCode",{parentName:"a"},"_Complaint")),", should be monitored regularly to assess the health of your email marketing."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"Your parent account ID (MID) number"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OYBAccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"Null")),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,l.kt)("td",{parentName:"tr",align:null},"The batch ID number for any batches used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the bounce took place"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsUnique"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the event is unique or repeated - 1 for the first occurrence, 0 for subsequent"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain at which the bounce occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceCategoryID"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID number for the bounce category"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceCategory"),(0,l.kt)("td",{parentName:"tr",align:null},"The category of the bounce"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceSubcategoryID"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID number for the bounce subcategory"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceSubcategory"),(0,l.kt)("td",{parentName:"tr",align:null},"The subcategory of the bounce"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceTypeID"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID number for the bounce type"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BounceType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of bounce that occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SMTPBounceReason"),(0,l.kt)("td",{parentName:"tr",align:null},"The reason for the bounce relayed by the mail system"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SMTPMessage"),(0,l.kt)("td",{parentName:"tr",align:null},"The message regarding the bounce from the mail system"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SMTPCode"),(0,l.kt)("td",{parentName:"tr",align:null},"The error code for the bounce from the mail system"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggererSendDefinitionObjectID"),(0,l.kt)("td",{parentName:"tr",align:null},"The object ID for the triggered send definition"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TriggeredSendCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The customer key for the triggered send"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsFalseBounce"),(0,l.kt)("td",{parentName:"tr",align:null},"Indicates a false bounce if ",(0,l.kt)("a",{parentName:"td",href:"https://help.salesforce.com/s/articleView?id=000390396&type=1"},"SFMC received delivery receipt after receiving bounce"),"."),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BounceCategoryID")," possible values:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"Soft Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3"),(0,l.kt)("td",{parentName:"tr",align:null},"Block Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4"),(0,l.kt)("td",{parentName:"tr",align:null},"Unknown Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"5"),(0,l.kt)("td",{parentName:"tr",align:null},"Technical/Other Bounce")))),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BounceCategory")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Hard Bounce"),(0,l.kt)("li",{parentName:"ul"},"Soft Bounce"),(0,l.kt)("li",{parentName:"ul"},"Block Bounce"),(0,l.kt)("li",{parentName:"ul"},"Unknown Bounce"),(0,l.kt)("li",{parentName:"ul"},"Technical/Other Bounce")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BounceSubcategoryID")," possible values:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Meaning"),(0,l.kt)("th",{parentName:"tr",align:null},"Bounce Type"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1001"),(0,l.kt)("td",{parentName:"tr",align:null},"Complaints"),(0,l.kt)("td",{parentName:"tr",align:null},"Block Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1002"),(0,l.kt)("td",{parentName:"tr",align:null},"Blocked"),(0,l.kt)("td",{parentName:"tr",align:null},"Block Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1004"),(0,l.kt)("td",{parentName:"tr",align:null},"Content"),(0,l.kt)("td",{parentName:"tr",align:null},"Block Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1010"),(0,l.kt)("td",{parentName:"tr",align:null},"Authentication"),(0,l.kt)("td",{parentName:"tr",align:null},"Block Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1999"),(0,l.kt)("td",{parentName:"tr",align:null},"Other"),(0,l.kt)("td",{parentName:"tr",align:null},"Soft Bounce, Block Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2001"),(0,l.kt)("td",{parentName:"tr",align:null},"User Unknown"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2002"),(0,l.kt)("td",{parentName:"tr",align:null},"Domain Unknown"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2003"),(0,l.kt)("td",{parentName:"tr",align:null},"Bad Address Syntax"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3001"),(0,l.kt)("td",{parentName:"tr",align:null},"Mailbox Full"),(0,l.kt)("td",{parentName:"tr",align:null},"Soft Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3002"),(0,l.kt)("td",{parentName:"tr",align:null},"Inactive Account"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce, Soft Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4001"),(0,l.kt)("td",{parentName:"tr",align:null},"Server Too Busy"),(0,l.kt)("td",{parentName:"tr",align:null},"Technical/Other Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4002"),(0,l.kt)("td",{parentName:"tr",align:null},"Data Format Error"),(0,l.kt)("td",{parentName:"tr",align:null},"Technical/Other Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4003"),(0,l.kt)("td",{parentName:"tr",align:null},"Network Error"),(0,l.kt)("td",{parentName:"tr",align:null},"Technical/Other Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4999"),(0,l.kt)("td",{parentName:"tr",align:null},"Other"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce, Soft Bounce, Technical/Other Bounce")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"9999"),(0,l.kt)("td",{parentName:"tr",align:null},"Unknown"),(0,l.kt)("td",{parentName:"tr",align:null},"Hard Bounce, Soft Bounce, Block Bounce, Unknown Bounce, Technical/Other Bounce")))),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BounceSubcategory")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Complaints"),(0,l.kt)("li",{parentName:"ul"},"Blocked"),(0,l.kt)("li",{parentName:"ul"},"Content"),(0,l.kt)("li",{parentName:"ul"},"Authentication"),(0,l.kt)("li",{parentName:"ul"},"User Unknown"),(0,l.kt)("li",{parentName:"ul"},"Domain Unknown"),(0,l.kt)("li",{parentName:"ul"},"Bad Address Syntax"),(0,l.kt)("li",{parentName:"ul"},"Mailbox Full"),(0,l.kt)("li",{parentName:"ul"},"Inactive Account"),(0,l.kt)("li",{parentName:"ul"},"Server Too Busy"),(0,l.kt)("li",{parentName:"ul"},"Data Format Error"),(0,l.kt)("li",{parentName:"ul"},"Network Error"),(0,l.kt)("li",{parentName:"ul"},"Other"),(0,l.kt)("li",{parentName:"ul"},"Unknown")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BounceTypeId")," possible values:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"0"),(0,l.kt)("td",{parentName:"tr",align:null},"immediate")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"delayed")))),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BounceType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"immediate"),(0,l.kt)("li",{parentName:"ul"},"delayed")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n bounce.AccountID\n , bounce.OYBAccountID\n , bounce.JobID\n , bounce.ListID\n , bounce.BatchID\n , bounce.SubscriberID\n , bounce.SubscriberKey\n , bounce.EventDate\n , bounce.IsUnique\n , bounce.Domain\n , bounce.BounceCategoryID\n , bounce.BounceCategory\n , bounce.BounceSubcategoryID\n , bounce.BounceSubcategory\n , bounce.BounceTypeID\n , bounce.BounceType\n , bounce.SMTPBounceReason\n , bounce.SMTPMessage\n , bounce.SMTPCode\n , bounce.TriggererSendDefinitionObjectID\n , bounce.TriggeredSendCustomerKey\nFROM _Bounce AS bounce\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Bounce")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JobID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"BatchID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberId")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," to match various events from multiple Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," for a single engagement with a particular subscriber. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"_bounce.IsUnique = 1")," in ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," or ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," to focus on the first occurence of each event. Example: ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"Query for Debugging Email Sends"),"."),(0,l.kt)("li",{parentName:"ol"},"The ",(0,l.kt)("inlineCode",{parentName:"li"},"Domain")," helps aggregate the bounce data to see any domain-specific problem with deliverability."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"SMTPBounceReason")," is the most helpful information when you want to understand what happened to your send. Be careful - this value can be configured to a custom string by the server owner. Some administrators are using this to inform you about a specific issue. Some are even faking the information to limit the emails coming to their servers from selected sources."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"SMTPCode")," is useful for getting additional data on the Bounce Reason. Watch especially for 541 and 554. In most cases, it means you are considered a spammer by the server or already blocklisted. I recommend you to create an Automation with Verification Activity to get an automated warning whenever there are more than a few occurrences. Triage immediately."),(0,l.kt)("li",{parentName:"ol"},"If you get errors when trying to select ",(0,l.kt)("inlineCode",{parentName:"li"},"IsFalseBounce")," - it might be missing on the SFMC backend. Create a Support Ticket to resolve it.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"SMTPBounceReason")," field is ",(0,l.kt)("inlineCode",{parentName:"p"},"nvarchar(max)")," SQL type, and due to that might be longer than the 4000 characters limit for the Data Extension string length in Salesforce Marketing Cloud. If you want to save this data outside of Data View, be sure to use ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions#left--right"},(0,l.kt)("inlineCode",{parentName:"a"},"LEFT(SMTPBounceReason, 4000)")),".")),(0,l.kt)("h3",{id:"_complaint"},"_Complaint"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"_Complaint")," Data View stores Email Service Providers Feedback Loop (FBL) data. It means that if someone clicks the ",(0,l.kt)("inlineCode",{parentName:"p"},"Report Spam")," button for your email and there is FBL in place, this information will be added to the Data View. It will also result in an unsubscribe event and be visible in the ",(0,l.kt)("a",{parentName:"p",href:"#_unsubscribe"},(0,l.kt)("inlineCode",{parentName:"a"},"_Unsubscribe")),"."),(0,l.kt)("p",null,"Currently, Salesforce Marketing Cloud ",(0,l.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=000353531&type=1"},"supports Feedback Loops")," for Bluetie (Excite), Comcast, Cox, Fastmail, Microsoft Hotmail, Italia Online, La Poste, Liberty Global, Locaweb, Mail.ru, OpenSRS (Tucows), Rackspace (Mailtrust), Seznam, Synacor, Telenor, Telstra, Terra, UOL (Brazil), USA.net, XS4ALL and Yandex."),(0,l.kt)("p",null,"You can additionally ",(0,l.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=000312472&type=1"},"register for the Yahoo Feedback Loop"),". Gmail also has a ",(0,l.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=000353530&type=1"},"Feedback Loop system"),", but it works differently and won't be in ",(0,l.kt)("inlineCode",{parentName:"p"},"_Complaint")," Data View."),(0,l.kt)("p",null,"This Data View, along with ",(0,l.kt)("a",{parentName:"p",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce")),", should be monitored regularly to assess the health of your email marketing."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"Your parent account ID (MID) number"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OYBAccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"Null")),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,l.kt)("td",{parentName:"tr",align:null},"The batch ID number for any batches used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the send took place"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsUnique"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the event is unique or repeated - 1 for the first occurrence, 0 for subsequent"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain at which the send occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null}))))),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n complaint.AccountID\n , complaint.OYBAccountID\n , complaint.JobID\n , complaint.ListID\n , complaint.BatchID\n , complaint.SubscriberID\n , complaint.SubscriberKey\n , complaint.EventDate\n , complaint.IsUnique\n , complaint.Domain\nFROM _Complaint AS complaint\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Complaint")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JobID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"BatchID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberId")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," to match various events from multiple Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," for a single engagement with a particular subscriber."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"_complaint.IsUnique = 1")," in ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," or ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," to focus on the first occurence of each event."),(0,l.kt)("li",{parentName:"ol"},"The ",(0,l.kt)("inlineCode",{parentName:"li"},"Domain")," helps aggregate the Complaint data to see any domain-specific problem with targeting your communication.")),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"subscription-data-views"},"Subscription Data Views"),(0,l.kt)("p",null,"Subscription management in Salesforce Marketing Cloud is complex. Very complex."),(0,l.kt)("p",null,"It starts with four levels of unsubscriptions:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"List unsubscribe = no more sends from a particular list or publication list."),(0,l.kt)("li",{parentName:"ol"},"Business Unit unsubscribe = no more sends from a particular business unit."),(0,l.kt)("li",{parentName:"ol"},"Master unsubscribe = no more sends from your Marketing Cloud."),(0,l.kt)("li",{parentName:"ol"},"Global unsubscribe = no more sends from Marketing Cloud. Any, globally.")),(0,l.kt)("p",null,"And it gets even more interesting when you consider that triggering specific unsubscription level depends on email configuration, Email Studio configuration, preference center configuration and subscriber's behaviour."),(0,l.kt)("p",null,"Oh, and there is no out-of-the-box unsubscription from Data Extensions, which are currently the most popular segmentation and targeting tool."),(0,l.kt)("p",null,"To give us at least a chance to make sense of that mess, Salesforce created multiple System Data Views related to (un)subscriptions."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"Spam Complaint and List-Unsubscribe Header are pretty particular unsubscription use cases. They are added to ",(0,l.kt)("a",{parentName:"p",href:"#_unsubscribe"},(0,l.kt)("inlineCode",{parentName:"a"},"_Unsubscribe"))," and ",(0,l.kt)("a",{parentName:"p",href:"#_businessunitunsubscribe"},(0,l.kt)("inlineCode",{parentName:"a"},"_BusinessUnitUnsubscribe"))," as unsubscriptions from a list used in send (for example, ID of Publication List selected for the send). In reality, Marketing Cloud will perform automatic unsubscribe from the All Subscriber list (depending on Email Studio settings - Child BU's or Enterprise one), not the list mentioned in ",(0,l.kt)("inlineCode",{parentName:"p"},"ListID"),"."),(0,l.kt)("p",{parentName:"admonition"},"As a result, when querying, you will see the list-specific unsubscribe that doesn't result in unsubscription from the list but instead blocks all commercial communication as a Business Unit or Master unsubscribe."),(0,l.kt)("p",{parentName:"admonition"},"Custom solution (Automation with Query and Script Activities) will be necessary to perform the list-specific unsubscribe.")),(0,l.kt)("h3",{id:"_unsubscribe"},"_Unsubscribe"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe")," Data View stores data about unsubscribe events. The wording here is crucial, as it explains the difference from ",(0,l.kt)("a",{parentName:"p",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers"))," Data View unsubsrciption counts."),(0,l.kt)("p",null,"In ",(0,l.kt)("inlineCode",{parentName:"p"},"_Subscribers"),", you can check what is the ",(0,l.kt)("strong",{parentName:"p"},"current subscription status")," for the All Subscribers list. In ",(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe"),", you see the ",(0,l.kt)("strong",{parentName:"p"},"unsubscription events")," happening from List-Unsubscribe Header, ",(0,l.kt)("inlineCode",{parentName:"p"},"LogUnsubEvent")," API call, Reply Mail Management responses, Complaints and out-of-the-box Preference Center - all linked to a specific ",(0,l.kt)("a",{parentName:"p",href:"#_job"},(0,l.kt)("inlineCode",{parentName:"a"},"_Job")),". It is also not limited to All Subscribers but also covers unsubscribes from other types of lists."),(0,l.kt)("p",null,"It means that status changes like Import Activity, direct API change, manual change in the Email Studio (not Job-specific) will be reflected in the ",(0,l.kt)("inlineCode",{parentName:"p"},"_Subscribers")," Data View, but not in the ",(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe"),". On the other hand, ",(0,l.kt)("inlineCode",{parentName:"p"},"UnsubEvents")," does not necessarily change the Status in the ",(0,l.kt)("inlineCode",{parentName:"p"},"_Subscribers"),". For example, taking care of List-Unsubscribe Header clicks require dedicated Automation to get this data from ",(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe")," Data View and push it to other parts of your consent data model."),(0,l.kt)("p",null,"This Data View stores data only for six-months, so retention-less ",(0,l.kt)("inlineCode",{parentName:"p"},"_Subscribers")," Data View might show more unsubscribed records if you are not cleaning them from SFMC regularly."),(0,l.kt)("p",null,"All of this makes ",(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe")," a much better source of knowledge about unsubscription."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"Your account ID number"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"OYBAccountID"),(0,l.kt)("td",{parentName:"tr",align:null},"The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"Null")),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JobID"),(0,l.kt)("td",{parentName:"tr",align:null},"The job ID number for the email send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,l.kt)("td",{parentName:"tr",align:null},"The batch ID number for any batches used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EventDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the unsubscribe took place"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IsUnique"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether the event is unique or repeated - 1 for the first occurrence, 0 for subsequent"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Domain"),(0,l.kt)("td",{parentName:"tr",align:null},"The domain at which the unsubscribe occurred"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null}))))),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n unsub.AccountID\n , unsub.OYBAccountID\n , unsub.JobID\n , unsub.ListID\n , unsub.BatchID\n , unsub.SubscriberID\n , unsub.SubscriberKey\n , unsub.EventDate\n , unsub.IsUnique\n , unsub.Domain\nFROM _Unsubscribe AS unsub\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JobID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"BatchID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberId")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," to match various events from multiple Data Views like ",(0,l.kt)("a",{parentName:"li",href:"#_job"},(0,l.kt)("inlineCode",{parentName:"a"},"_Job"))," and ",(0,l.kt)("a",{parentName:"li",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers"))," to check unsubscription context."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"_unsubscribe.IsUnique = 1")," in ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," or ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," to focus on the first occurence of each event."),(0,l.kt)("li",{parentName:"ol"},"If you query this Data View on the child Business Unit, it will return only unsubscribe events from that specific BU."),(0,l.kt)("li",{parentName:"ol"},"The most valuable data here are:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"EventDate")," field that lets you know when the unsubscription happened"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ListID")," field that tells you which list is impacted by the unsubscription")))),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},'If the subscriber clicks "Unsubscribe from All" on the out-of-the-box unsubscription center, it will perform Master Unsubscribe from all Lists. As it is a single event, it will be stored as a single record in the ',(0,l.kt)("inlineCode",{parentName:"p"},"_Unsubscribe")," Data View with random ListID assigned to it. For a complete picture, you will need to check ",(0,l.kt)("a",{parentName:"p",href:"#_listsubscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_ListSubscribers"))," Data View.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_businessunitunsubscribes"},"_BusinessUnitUnsubscribes"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers"))," Data View might give you information about the current state of subscriptions on the All Subscribers list. But if in Email Studio you configure Business Unit Level unsubscribes, this information will not be helpful, as the data stored there will not reflect the subscription status in a specific Business Unit."),(0,l.kt)("p",null,"Here comes the fresh ",(0,l.kt)("inlineCode",{parentName:"p"},"_BusinessUnitUnsubscribes")," Data View. It shows you the only unsubscribed contacts for each Business Unit. If the contact resubscribes - it will disappear from this Data View."),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"_BusinessUnitUnsubscribes")," Data View will work differently depending on your SFMC ",(0,l.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=sf.mc_es_unsubscribe_settings.htm&type=5"},"unsubscription configuration"),'. You will be able to query it from the Child BU level only for Business Units set to "unsubscribe from this business unit only".'),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BusinessUnitID"),(0,l.kt)("td",{parentName:"tr",align:null},"The Account ID for the Business Unit"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"UnsubDateUTC"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the subscriber unsubscribed on the BU."),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"UnsubReason"),(0,l.kt)("td",{parentName:"tr",align:null},"The reason listed is a custom value configured by your administrator."),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"UnsubReason")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Spam Complaint"),(0,l.kt)("li",{parentName:"ul"},"Unsubscribed from list details on subscriber properties dialog."),(0,l.kt)("li",{parentName:"ul"},"Unsubscribed by Salesforce Marketing Cloud RMM service based on subscriber Leave/Reply email."),(0,l.kt)("li",{parentName:"ul"},"Unsubscribed by subscriber edit API call."),(0,l.kt)("li",{parentName:"ul"},"Unsubscribed from the Subscription Center"),(0,l.kt)("li",{parentName:"ul"},"Unsubscribed via Import")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n buUnsub.BusinessUnitID\n , buUnsub.SubscriberID\n , buUnsub.SubscriberKey\n , buUnsub.UnsubDateUTC\n , buUnsub.UnsubReason\nFROM _BusinessUnitUnsubscribes AS buUnsub\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_BusinessUnitUnsubscribes")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Remember that it stores only currently unsubscribed contacts. Not unsubscribe event data (that's in ",(0,l.kt)("a",{parentName:"li",href:"#_unsubscribe"},(0,l.kt)("inlineCode",{parentName:"a"},"_Unsubscribe")),") and not other statuses (like bounced, held). It will also not show unsubscribed users after they resubscribed or got deleted."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberID")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"SubscriberKey")," along with ",(0,l.kt)("inlineCode",{parentName:"li"},"UnsubDateUTC")," might fuzzy match the data in this data view with ",(0,l.kt)("a",{parentName:"li",href:"#_unsubscribe"},(0,l.kt)("inlineCode",{parentName:"a"},"_Unsubscribe")),"."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"UnsubDateUTC"),", as name suggests, is in UTC instead of the SFMC-standard UTC-6. Remember to use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#dateadd"},(0,l.kt)("inlineCode",{parentName:"a"},"DATEADD"))," to normalize it before comparing to other system dates."),(0,l.kt)("li",{parentName:"ol"},"The real treat in this data view (apart from finally having an easy option to see Business Unit unsubscribes) is the ",(0,l.kt)("inlineCode",{parentName:"li"},"UnsubReason")," field that can tell you more about the unsubscribe."),(0,l.kt)("li",{parentName:"ol"},"This Data View, along with ",(0,l.kt)("a",{parentName:"li",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers")),", ",(0,l.kt)("a",{parentName:"li",href:"#_enterpriseattribute"},(0,l.kt)("inlineCode",{parentName:"a"},"_EnterpriseAttribute"))," and ",(0,l.kt)("a",{parentName:"li",href:"#_listsubscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_ListSubscribers")),", does not have six-month data retention.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"UnsubDateUTC")," not only uses a different timezone from the rest of the system dates. It differs by a few milliseconds from ",(0,l.kt)("a",{parentName:"p",href:"#_unsubscribe"},(0,l.kt)("inlineCode",{parentName:"a"},"_Unsubscribe"))," ",(0,l.kt)("inlineCode",{parentName:"p"},"EventDate"),". When querying (SFMC doesn't show seconds for date fields), you won't see it, but the comparison is using the full datetime value."),(0,l.kt)("p",{parentName:"admonition"},"Because of it, you cannot match it out-of-the-box. ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#datediff"},(0,l.kt)("inlineCode",{parentName:"a"},"DATEDIFF"))," is here to save the day:"),(0,l.kt)("pre",{parentName:"admonition"},(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="DATEDIFF will allow you to compare despite the difference"',title:'"DATEDIFF',will:!0,allow:!0,you:!0,to:!0,compare:!0,despite:!0,the:!0,'difference"':!0},"DATEDIFF(MINUTE, _Unsubscribe.EventDate, DATEADD(HOUR, -6, _BusinessUnitUnsubscribes.UnsubDateUTC)) < 1\n"))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_listsubscribers"},"_ListSubscribers"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"_ListSubscribers")," Data View stores data about the current status of the subscription. It might sound similar to ",(0,l.kt)("a",{parentName:"p",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers"))," and ",(0,l.kt)("a",{parentName:"p",href:"#_businessunitunsubscribes"},(0,l.kt)("inlineCode",{parentName:"a"},"_BusinessUnitUnsubscribes")),", but there are significant differences:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"_Subscribers")," has data about All Subscribers list only. ",(0,l.kt)("inlineCode",{parentName:"li"},"_ListSubscribers")," shows status for all Lists available in Salesforce Marketing Cloud."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"_BusinessUnitUnsubscribes")," has data about contacts unsubscribed from All Subscribers on every Business Unit. ",(0,l.kt)("inlineCode",{parentName:"li"},"_ListSubscribers")," doesn't show Business Unit information, but it covers all Lists and all Statuses.")),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AddedBy"),(0,l.kt)("td",{parentName:"tr",align:null},"The ID of the user who ran the process that added the subscriber (might also be ",(0,l.kt)("inlineCode",{parentName:"td"},"0")," or ",(0,l.kt)("inlineCode",{parentName:"td"},"-1000"),")"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AddMethod"),(0,l.kt)("td",{parentName:"tr",align:null},"The method by which the subscriber was added"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CreatedDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the subscriber was added to the specific list"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"DateUnsubscribed"),(0,l.kt)("td",{parentName:"tr",align:null},"The date the subscriber unsubscribed"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EmailAddress"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber's email address"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListID"),(0,l.kt)("td",{parentName:"tr",align:null},"The list ID number for the list used in the send"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the list containing the subscribers"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ListType"),(0,l.kt)("td",{parentName:"tr",align:null},"Shows whether the type is list or group"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Status"),(0,l.kt)("td",{parentName:"tr",align:null},"The status of the subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber ID for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SubscriberType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of subscriber (it will be ",(0,l.kt)("inlineCode",{parentName:"td"},"ExactTarget"),")"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"AddMethod")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"API"),(0,l.kt)("li",{parentName:"ul"},"Imported"),(0,l.kt)("li",{parentName:"ul"},"WebApplication"),(0,l.kt)("li",{parentName:"ul"},"DataExtensionSend"),(0,l.kt)("li",{parentName:"ul"},"Unknown")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"ListType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Publication List"),(0,l.kt)("li",{parentName:"ul"},"Suppression List"),(0,l.kt)("li",{parentName:"ul"},"List"),(0,l.kt)("li",{parentName:"ul"},"Group"),(0,l.kt)("li",{parentName:"ul"},"FTAF List"),(0,l.kt)("li",{parentName:"ul"},"Unknown")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Status")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"active"),(0,l.kt)("li",{parentName:"ul"},"held"),(0,l.kt)("li",{parentName:"ul"},"unsubscribed"),(0,l.kt)("li",{parentName:"ul"},"bounced")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n listSub.AddedBy\n , listSub.AddMethod\n , listSub.CreatedDate\n , listSub.DateUnsubscribed\n , listSub.EmailAddress\n , listSub.ListID\n , listSub.ListName\n , listSub.ListType\n , listSub.Status\n , listSub.SubscriberID\n , listSub.SubscriberKey\n , listSub.SubscriberType\nFROM _ListSubscribers AS listSub\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_ListSubscribers")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Thanks to having ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ListName")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"ListType")," fields, it allows you to make sense of the ",(0,l.kt)("inlineCode",{parentName:"li"},"ListID")," field available in all other engagement-based System Data Views."),(0,l.kt)("li",{parentName:"ol"},"This Data View, along with ",(0,l.kt)("a",{parentName:"li",href:"#_subscribers"},(0,l.kt)("inlineCode",{parentName:"a"},"_Subscribers")),", ",(0,l.kt)("a",{parentName:"li",href:"#_enterpriseattribute"},(0,l.kt)("inlineCode",{parentName:"a"},"_EnterpriseAttribute"))," and ",(0,l.kt)("a",{parentName:"li",href:"#_businessunitunsubscribes"},(0,l.kt)("inlineCode",{parentName:"a"},"_BusinessUnitUnsubscribes")),", does not have six-month data retention."),(0,l.kt)("li",{parentName:"ol"},"You can only query Lists available on the current Business Unit. It's not possible to check Child's List subscription status from the Parent BU. The exception is the All Subscribers list that is shared across all Business Units.")),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"mobile-connect-data-views"},"Mobile Connect Data Views"),(0,l.kt)("p",null,"Learn more about Mobile Connect ",(0,l.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views"},"SMS Data Views here"),"."),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"journey-data-views"},"Journey Data Views"),(0,l.kt)("h3",{id:"_journey"},"_Journey"),(0,l.kt)("p",null,"Stores information about your Journeys for when context matters."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"VersionID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique identifier for the version of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique identifier for the Journey. There are one or more VersionID's associated to a JourneyID."),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"VersionNumber"),(0,l.kt)("td",{parentName:"tr",align:null},"The version number of the version of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CreatedDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date that the version of the Journey was created"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"LastPublishedDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date that the version of the Journey was last published"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ModifiedDate"),(0,l.kt)("td",{parentName:"tr",align:null},"The date that the version of the Journey was last edited"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyStatus"),(0,l.kt)("td",{parentName:"tr",align:null},"The current running mode of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null}))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"JourneyStatus")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Draft"),(0,l.kt)("li",{parentName:"ul"},"Running"),(0,l.kt)("li",{parentName:"ul"},"Finishing"),(0,l.kt)("li",{parentName:"ul"},"Stopped"),(0,l.kt)("li",{parentName:"ul"},"Deleted")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n journey.VersionID\n , journey.JourneyID\n , journey.JourneyName\n , journey.VersionNumber\n , journey.CreatedDate\n , journey.LastPublishedDate\n , journey.ModifiedDate\n , journey.JourneyStatus\nFROM _Journey AS journey\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Journey")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"VersionID")," field is perfect to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," with ",(0,l.kt)("a",{parentName:"li",href:"#_journeyactivity"},(0,l.kt)("inlineCode",{parentName:"a"},"_JourneyActivity")),". It lets you map multi-channel engagement to a particular Journey (visible in ",(0,l.kt)("inlineCode",{parentName:"li"},"JourneyName"),") and its specific version (as shown in ",(0,l.kt)("inlineCode",{parentName:"li"},"VersionNumber"),")."),(0,l.kt)("li",{parentName:"ol"},"You can also connect it to SMS channel using ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-mobile-connect-data-views#_smsmessagetracking"},"_SMSMessageTracking")," Data View by making a ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," ",(0,l.kt)("inlineCode",{parentName:"li"},"ON journey.VersionID = smsTracking.JBDefinitionID"),"."),(0,l.kt)("li",{parentName:"ol"},"Use ",(0,l.kt)("inlineCode",{parentName:"li"},"JourneyStatus")," to check what is the current Journey Status. It is fantastic for both the ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," statement and a data point for engagement analysis. Think about scheduled Automation that finds all emails performing below expectations and checks which are in the Active Journeys. For all found, it sends you a notification to check and improve. For awful results, you can even use this data in Script Activity to automatically stop the Journey with the SFMC REST API."),(0,l.kt)("li",{parentName:"ol"},"The Date fields (",(0,l.kt)("inlineCode",{parentName:"li"},"CreatedDate"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"LastPublishedDate"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"ModifiedDate"),") are cool for automated cleanup of old Journeys, especially when paired with the ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent"))," data. For example, you can create monthly Automation that checks all Journeys that were last modified at least three months ago and, based on the send volume or performance, stop them and notify you about that."),(0,l.kt)("li",{parentName:"ol"},"You can query only Journeys that currently exists in your Business Unit.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"_Journey")," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,l.kt)("a",{parentName:"p",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"p",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"p",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," and other data from all Business Units, but this is not the case with ",(0,l.kt)("inlineCode",{parentName:"p"},"_Journey"),". You can query only those Journeys that were created in the Business Unit where you execute your SQL snippet."),(0,l.kt)("p",{parentName:"admonition"},"Always consider this when choosing Business Unit to execute the query and the type of ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," statement.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"_journeyactivity"},"_JourneyActivity"),(0,l.kt)("p",null,"Stores information about Activities available in your Journeys. Must-have for joining Email data with Journey data."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"VersionID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique identifier for the version of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique identifier for the activity. There are one or more ActivityID's associated to a VersionID."),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the activity"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityExternalKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The external key associated with the activity"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyActivityObjectID"),(0,l.kt)("td",{parentName:"tr",align:null},"Use this unique identifier to join to email tracking system Data Views to identify a Journey email's Triggered Send Definition."),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of activity"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"ActivityType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},"APIEvent"),(0,l.kt)("li",{parentName:"ul"},"Audience"),(0,l.kt)("li",{parentName:"ul"},"AutomationAudience"),(0,l.kt)("li",{parentName:"ul"},"CloudPagesSmartCaptureSubmissionEvent"),(0,l.kt)("li",{parentName:"ul"},"ContactEvent"),(0,l.kt)("li",{parentName:"ul"},"EMAILAUDIENCE"),(0,l.kt)("li",{parentName:"ul"},"EMAILV2"),(0,l.kt)("li",{parentName:"ul"},"ENGAGEMENTDECISION"),(0,l.kt)("li",{parentName:"ul"},"Event"),(0,l.kt)("li",{parentName:"ul"},"ExitCriteria"),(0,l.kt)("li",{parentName:"ul"},"MULTICRITERIADECISION"),(0,l.kt)("li",{parentName:"ul"},"NOOP"),(0,l.kt)("li",{parentName:"ul"},"PUSHNOTIFICATIONACTIVITY"),(0,l.kt)("li",{parentName:"ul"},"RANDOMSPLIT"),(0,l.kt)("li",{parentName:"ul"},"SENDTOLINESYNC"),(0,l.kt)("li",{parentName:"ul"},"StartActivity"),(0,l.kt)("li",{parentName:"ul"},"STOWAIT"),(0,l.kt)("li",{parentName:"ul"},"transactional-api"),(0,l.kt)("li",{parentName:"ul"},"UPDATECONTACTDATA"),(0,l.kt)("li",{parentName:"ul"},"WAIT")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n journeyActivity.VersionID\n , journeyActivity.ActivityID\n , journeyActivity.ActivityName\n , journeyActivity.ActivityExternalKey\n , journeyActivity.JourneyActivityObjectID\n , journeyActivity.ActivityType\nFROM _JourneyActivity AS journeyActivity\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_JourneyActivity")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"There are two key fields here: ",(0,l.kt)("inlineCode",{parentName:"li"},"VersionID")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"JourneyActivityObjectID"),". ",(0,l.kt)("inlineCode",{parentName:"li"},"JourneyActivityObjectID")," lets you match Journey Activity with specific Email Send. Use ",(0,l.kt)("inlineCode",{parentName:"li"},"TriggererSendDefinitionObjectID")," available on either ",(0,l.kt)("a",{parentName:"li",href:"#_job"},(0,l.kt)("inlineCode",{parentName:"a"},"_Job")),", ",(0,l.kt)("a",{parentName:"li",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"li",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"li",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click")," ")," or ",(0,l.kt)("a",{parentName:"li",href:"#_bounce"},(0,l.kt)("inlineCode",{parentName:"a"},"_Bounce"))," Data View. It is handy when you later use the ",(0,l.kt)("inlineCode",{parentName:"li"},"VersionID")," field to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," ",(0,l.kt)("a",{parentName:"li",href:"#_journey"},(0,l.kt)("inlineCode",{parentName:"a"},"_Journey"))," Data View and with this connect specific Email engagement with particular Journey and its exact version. Fantastic for full scope reporting."),(0,l.kt)("li",{parentName:"ol"},"You can also connect it to SMS channel using ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-mobile-connect-data-views#_smsmessagetracking"},"_SMSMessageTracking")," Data View by making a ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," ",(0,l.kt)("inlineCode",{parentName:"li"},"ON journeyActivity.ActivityID = smsTracking.JBActivityID"),"."),(0,l.kt)("li",{parentName:"ol"},"With the help of ",(0,l.kt)("a",{parentName:"li",href:"#_journey"},(0,l.kt)("inlineCode",{parentName:"a"},"_Journey"))," Data View, you can use the ",(0,l.kt)("inlineCode",{parentName:"li"},"ActivityType")," field for an excellent little report created with SQL that will show which Journeys use which channels and what types of logic. For a more in-depth understanding of what happens in Journey, you need to use Script Activity with REST API instead, but SQL is perfect for glancing at the multi-channel use."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"_JourneyActivity")," Data View holds data about activities from deleted Journeys and Journey Versions, so if you want to see only activities currently in use, ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," ",(0,l.kt)("a",{parentName:"li",href:"#_journey"},(0,l.kt)("inlineCode",{parentName:"a"},"_Journey"))," Data View.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"_JourneyActivity")," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,l.kt)("a",{parentName:"p",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"p",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"p",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," and other data from all Business Units, but this is not the case with ",(0,l.kt)("inlineCode",{parentName:"p"},"_JourneyActivity"),". You can query only those Journey Activities that were created in the Business Unit where you execute your SQL snippet."),(0,l.kt)("p",{parentName:"admonition"},"Always consider this when choosing Business Unit to execute the query and the type of ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," statement.")),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"automation-data-views"},"Automation Data Views"),(0,l.kt)("h3",{id:"_automationinstance"},"_AutomationInstance"),(0,l.kt)("p",null,"Provides historical information about Automation runs."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MemberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The Account ID for the Business Unit"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationDescription"),(0,l.kt)("td",{parentName:"tr",align:null},"The description of the automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique ID of the automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique ID of the specific automation run"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of starting source used in automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationNotificationRecipient_Complete"),(0,l.kt)("td",{parentName:"tr",align:null},"Email(s) receiving notification about completed runs"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationNotificationRecipient_Error"),(0,l.kt)("td",{parentName:"tr",align:null},"Email(s) receiving notification about errored runs"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationNotificationRecipient_Skip"),(0,l.kt)("td",{parentName:"tr",align:null},"Email(s) receiving notification about skipped runs"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationStepCount"),(0,l.kt)("td",{parentName:"tr",align:null},"The number of steps in the automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceIsRunOnce"),(0,l.kt)("td",{parentName:"tr",align:null},"Was this specific automation run executed with Run Once? 1 for true, 0 for false in File Drop and Triggered automations. Null in Schedule automations"),(0,l.kt)("td",{parentName:"tr",align:null},"Boolean"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FilenameFromTrigger"),(0,l.kt)("td",{parentName:"tr",align:null},"Name of the file that triggered the automation for Triggered and File Drop automations. Null for Schedule automations"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceScheduledTime_UTC"),(0,l.kt)("td",{parentName:"tr",align:null},"Starting schedule datetime in UTC timezone for Schedule automations. Null for Triggered and File Drop automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceStartTime_UTC"),(0,l.kt)("td",{parentName:"tr",align:null},"Automation run start datetime in UTC timezone. Null if run is skipped"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceEndTime_UTC"),(0,l.kt)("td",{parentName:"tr",align:null},"Automation run end datetime in UTC timezone. Null if run is skipped or still running"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceStatus"),(0,l.kt)("td",{parentName:"tr",align:null},"The status of the automation run at the time of querying"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceActivityErrorDetails"),(0,l.kt)("td",{parentName:"tr",align:null},"The first error message encountered in the automation run"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"AutomationType")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Schedule"),(0,l.kt)("li",{parentName:"ul"},"File Drop"),(0,l.kt)("li",{parentName:"ul"},"Trigger")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"AutomationInstanceStatus")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"QueuedFile"),(0,l.kt)("li",{parentName:"ul"},"Initialized"),(0,l.kt)("li",{parentName:"ul"},"Executing"),(0,l.kt)("li",{parentName:"ul"},"Stopped"),(0,l.kt)("li",{parentName:"ul"},"Complete"),(0,l.kt)("li",{parentName:"ul"},"Error")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n automation.MemberID\n , automation.AutomationName\n , automation.AutomationDescription\n , automation.AutomationCustomerKey\n , automation.AutomationInstanceID\n , automation.AutomationType\n , automation.AutomationNotificationRecipient_Complete\n , automation.AutomationNotificationRecipient_Error\n , automation.AutomationNotificationRecipient_Skip\n , automation.AutomationStepCount\n , automation.AutomationInstanceIsRunOnce\n , automation.FilenameFromTrigger\n , automation.AutomationInstanceScheduledTime_UTC\n , automation.AutomationInstanceStartTime_UTC\n , automation.AutomationInstanceEndTime_UTC\n , automation.AutomationInstanceStatus\n , automation.AutomationInstanceActivityErrorDetails\nFROM _AutomationInstance AS automation\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_AutomationInstance")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"This data view stores all Automation ",(0,l.kt)("strong",{parentName:"li"},"runs"),", so you will see here separte row for each execution of the Automation. This is great basic audit tool for logging changes to the automation as well as a nice way to counting the amount of automation executions against licence limits."),(0,l.kt)("li",{parentName:"ol"},"Key limitation of ",(0,l.kt)("inlineCode",{parentName:"li"},"_AutomationInstance")," is that it shows data with 24 hours delay. If you need real-time information about Automation Studio status, you will still need an API approach. But for not that urget use cases this new option will be much more performant."),(0,l.kt)("li",{parentName:"ol"},"If automation run errored out due to system or unclassified error, ",(0,l.kt)("inlineCode",{parentName:"li"},"AutomationInstanceActivityErrorDetails"),' will show "System Error occurred. Please contact support for details.". In other cases it will store the first error message. If there are more and you want to find them, you will need to leverage ',(0,l.kt)("a",{parentName:"li",href:"#_AutomationActivityInstance"},(0,l.kt)("inlineCode",{parentName:"a"},"_AutomationActivityInstance"))," Data View."),(0,l.kt)("li",{parentName:"ol"},"All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions"},"SQL Date Functions")," it might be best to use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate"},(0,l.kt)("inlineCode",{parentName:"a"},"GETUTCDATE()"))," instead of system date from ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate"},(0,l.kt)("inlineCode",{parentName:"a"},"GETDATE()")),"."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"AutomationInstanceID")," field is perfect to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," with ",(0,l.kt)("a",{parentName:"li",href:"#_AutomationActivityInstance"},(0,l.kt)("inlineCode",{parentName:"a"},"_AutomationActivityInstance")),". It lets you find information about execution of each activity within the Automation in the specific run.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"_AutomationInstance")," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,l.kt)("a",{parentName:"p",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"p",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"p",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," and other data from all Business Units, but this is not the case with ",(0,l.kt)("inlineCode",{parentName:"p"},"_AutomationInstance"),". You can query only those Automtion runs that were executed in the Business Unit where you execute your SQL snippet."),(0,l.kt)("p",{parentName:"admonition"},"Always consider this when choosing Business Unit to execute the query and the type of ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," statement.")),(0,l.kt)("h3",{id:"_automationactivityinstance"},"_AutomationActivityInstance"),(0,l.kt)("p",null,"Provides historical information about Automation Studio Activity runs."),(0,l.kt)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],mdxType:"Tabs"},(0,l.kt)(i.Z,{value:"fields",mdxType:"TabItem"},(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MemberID"),(0,l.kt)("td",{parentName:"tr",align:null},"The Account ID for the Business Unit"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique ID of the automation"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"AutomationInstanceID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique ID of the specific automation run"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityCustomerKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique ID of the activity"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityInstanceID"),(0,l.kt)("td",{parentName:"tr",align:null},"The unique ID of the specific activity execution"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityType"),(0,l.kt)("td",{parentName:"tr",align:null},"The type of the activity (numeric ID)"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the activity"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityDescription"),(0,l.kt)("td",{parentName:"tr",align:null},"The description of the activity"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityInstanceStep"),(0,l.kt)("td",{parentName:"tr",align:null},"The two-dimensional description where in automation the activity is located"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityInstanceStartTime_UTC"),(0,l.kt)("td",{parentName:"tr",align:null},"Activity execution start datetime in UTC timezone. Null if run is skipped"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityInstanceEndTime_UTC"),(0,l.kt)("td",{parentName:"tr",align:null},"Activity execution end datetime in UTC timezone. Null if run is skipped or still running"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"X")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityInstanceStatus"),(0,l.kt)("td",{parentName:"tr",align:null},"The status of the activity run at the time of querying"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ActivityInstanceStatusDetails"),(0,l.kt)("td",{parentName:"tr",align:null},"The error message encountered in the activity execution"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null},"X"))))),(0,l.kt)(i.Z,{value:"values",mdxType:"TabItem"},(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"ActivityType")," possible values:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Meaning"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"33"),(0,l.kt)("td",{parentName:"tr",align:null},"SMS Activity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"42"),(0,l.kt)("td",{parentName:"tr",align:null},"Send Email")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"43"),(0,l.kt)("td",{parentName:"tr",align:null},"Import File")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"45"),(0,l.kt)("td",{parentName:"tr",align:null},"Refresh Group")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"53"),(0,l.kt)("td",{parentName:"tr",align:null},"File Transfer")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"73"),(0,l.kt)("td",{parentName:"tr",align:null},"Data Extract")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"84"),(0,l.kt)("td",{parentName:"tr",align:null},"Report Definition")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"300"),(0,l.kt)("td",{parentName:"tr",align:null},"SQL Query")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"303"),(0,l.kt)("td",{parentName:"tr",align:null},"Filter")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"423"),(0,l.kt)("td",{parentName:"tr",align:null},"Script")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"425"),(0,l.kt)("td",{parentName:"tr",align:null},"Data Factory Utility Activity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"426"),(0,l.kt)("td",{parentName:"tr",align:null},"Refresh Segment Template")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"427"),(0,l.kt)("td",{parentName:"tr",align:null},"Publish Audience")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"467"),(0,l.kt)("td",{parentName:"tr",align:null},"Wait")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"724"),(0,l.kt)("td",{parentName:"tr",align:null},"Refresh Mobile Filtered List")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"725"),(0,l.kt)("td",{parentName:"tr",align:null},"Send SMS")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"726"),(0,l.kt)("td",{parentName:"tr",align:null},"Import Mobile Contacts")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"733"),(0,l.kt)("td",{parentName:"tr",align:null},"Journey Builder Event Activity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"736"),(0,l.kt)("td",{parentName:"tr",align:null},"Send Push")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"749"),(0,l.kt)("td",{parentName:"tr",align:null},"Fire Event")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"771"),(0,l.kt)("td",{parentName:"tr",align:null},"Salesforce Email Send")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"772"),(0,l.kt)("td",{parentName:"tr",align:null},"Mobile Connect Send Salesforce Sync Subscriber")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"783"),(0,l.kt)("td",{parentName:"tr",align:null},"Send GroupConnect")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:null},"Verification")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1010"),(0,l.kt)("td",{parentName:"tr",align:null},"Interaction Studio Data")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1101"),(0,l.kt)("td",{parentName:"tr",align:null},"Interactions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1701"),(0,l.kt)("td",{parentName:"tr",align:null},"Batch Personalization")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3700"),(0,l.kt)("td",{parentName:"tr",align:null},"Contact to Business Unit Mapping")))),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"ActivityInstanceStatus")," possible values:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Initialized"),(0,l.kt)("li",{parentName:"ul"},"Executing"),(0,l.kt)("li",{parentName:"ul"},"Complete"),(0,l.kt)("li",{parentName:"ul"},"Error"),(0,l.kt)("li",{parentName:"ul"},"NotSelected")),(0,l.kt)("hr",null)),(0,l.kt)(i.Z,{value:"sql",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n automationActivity.MemberID\n , automationActivity.AutomationName\n , automationActivity.AutomationCustomerKey\n , automationActivity.AutomationInstanceID\n , automationActivity.ActivityCustomerKey\n , automationActivity.ActivityInstanceID\n , automationActivity.ActivityType\n , automationActivity.ActivityName\n , automationActivity.ActivityDescription\n , automationActivity.ActivityInstanceStep\n , automationActivity.ActivityInstanceStartTime_UTC\n , automationActivity.ActivityInstanceEndTime_UTC\n , automationActivity.ActivityInstanceStatus\n , automationActivity.ActivityInstanceStatusDetails\nFROM _AutomationActivityInstance AS automationActivity\n")))),(0,l.kt)("p",null,"When working with ",(0,l.kt)("inlineCode",{parentName:"p"},"_AutomationActivityInstance")," Data View:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"This data view stores all Automation Activity ",(0,l.kt)("strong",{parentName:"li"},"runs"),", so you will see here separte row for each execution of each Activity. It is awesome tool for checking how optimised our Activities are and what errors are troubling our Automations."),(0,l.kt)("li",{parentName:"ol"},"Key limitation of ",(0,l.kt)("inlineCode",{parentName:"li"},"_AutomationActivityInstance")," is that it shows data with 24 hours delay."),(0,l.kt)("li",{parentName:"ol"},"If activity run errored out due to system or unclassified error, ",(0,l.kt)("inlineCode",{parentName:"li"},"ActivityInstanceStatusDetails"),' will show "System Error occurred. Please contact support for details.". In other cases it will store the error message.'),(0,l.kt)("li",{parentName:"ol"},"All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions"},"SQL Date Functions")," it might be best to use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate"},(0,l.kt)("inlineCode",{parentName:"a"},"GETUTCDATE()"))," instead of system date from ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate"},(0,l.kt)("inlineCode",{parentName:"a"},"GETDATE()")),"."),(0,l.kt)("li",{parentName:"ol"},"The start and end dates in this data view can be leveraged with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#datediff"},(0,l.kt)("inlineCode",{parentName:"a"},"DATEDIFF"))," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-aggregate-functions#avg"},(0,l.kt)("inlineCode",{parentName:"a"},"AVG"))," to calculate average time needed for each activity to finish. This information is crucial to assess whether the current automation Schedule is correct and where the optimisation efforts are required to protect against 30 minutes autokill."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"AutomationInstanceID")," field is perfect to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," with ",(0,l.kt)("a",{parentName:"li",href:"#_AutomationInstance"},(0,l.kt)("inlineCode",{parentName:"a"},"_AutomationInstance")),". It lets you find information about the Automation using this Activity.")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"_AutomationActivityInstance")," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,l.kt)("a",{parentName:"p",href:"#_sent"},(0,l.kt)("inlineCode",{parentName:"a"},"_Sent")),", ",(0,l.kt)("a",{parentName:"p",href:"#_open"},(0,l.kt)("inlineCode",{parentName:"a"},"_Open")),", ",(0,l.kt)("a",{parentName:"p",href:"#_click"},(0,l.kt)("inlineCode",{parentName:"a"},"_Click"))," and other data from all Business Units, but this is not the case with ",(0,l.kt)("inlineCode",{parentName:"p"},"_AutomationActivityInstance"),". You can query only those Automation Activities that were created in the Business Unit where you execute your SQL snippet."),(0,l.kt)("p",{parentName:"admonition"},"Always consider this when choosing Business Unit to execute the query and the type of ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,l.kt)("inlineCode",{parentName:"a"},"JOIN"))," statement.")),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"custom-data-views"},"Custom Data Views"),(0,l.kt)("p",null,"On top of all the built-in Data Views mentioned above, there is also a paid option for custom Data Views. As for the possibilities, the sky is the limit. Example? ",(0,l.kt)("a",{parentName:"p",href:"https://linkedin.com/in/lunow"},"Lukas Lunow")," ",(0,l.kt)("a",{parentName:"p",href:"https://salesforce.stackexchange.com/a/293395/91679"},"highlighted")," a fascinating one that solves the problem of knowing what is the current status of a Contact in a given Journey:"),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"As ",(0,l.kt)("a",{parentName:"p",href:"https://salesforce.stackexchange.com/a/293395/91679"},"shared")," by Lukas, since May 2021, there is longer no possibility to create Custom Data Views leveraging the Journey Builder.")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Name"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyVersionNumber"),(0,l.kt)("td",{parentName:"tr",align:null},"The version number of the version of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyName"),(0,l.kt)("td",{parentName:"tr",align:null},"The name of the Journey"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"JourneyStatus"),(0,l.kt)("td",{parentName:"tr",align:null},"Tells you whether the Journey is still Active"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ContactKey"),(0,l.kt)("td",{parentName:"tr",align:null},"The subscriber key for the affected subscriber"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ContactID"),(0,l.kt)("td",{parentName:"tr",align:null},"Global Contact ID (not Contact Key)"),(0,l.kt)("td",{parentName:"tr",align:null},"Number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ContactStatus"),(0,l.kt)("td",{parentName:"tr",align:null},"Tell you whether the contact is still in the Journey (",(0,l.kt)("inlineCode",{parentName:"td"},"Active"),", ",(0,l.kt)("inlineCode",{parentName:"td"},"Exited")," or even more detailed like ",(0,l.kt)("inlineCode",{parentName:"td"},"DidNotMeetEntryCriteria"),", ",(0,l.kt)("inlineCode",{parentName:"td"},"ContactExitedByAPI"),")"),(0,l.kt)("td",{parentName:"tr",align:null},"Text"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"EntryDate"),(0,l.kt)("td",{parentName:"tr",align:null},"Date of Journey Entry"),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ExitDate"),(0,l.kt)("td",{parentName:"tr",align:null},"Date of Journey Exit - including Goal / Exit Criteria. Null if still in Journey."),(0,l.kt)("td",{parentName:"tr",align:null},"Date"),(0,l.kt)("td",{parentName:"tr",align:null},"x")))),(0,l.kt)("p",null,"Yes, you can create a workaround to know whether the Contact is in a given Journey using standard Data Extension and Update Contact Journey Activities at the beginning and end of every Journey. Not only it requires you to remember always to add those additional steps. It also blocks you from using Goals and Exit Criteria."),(0,l.kt)("p",null,"Custom Data View allow you to eat a cookie and have a cookie."),(0,l.kt)("p",null,"You can certainly come up with other use cases that could be solved if only you had one additional data point. Now you can."))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7f9f5c99.3558effb.js b/assets/js/7f9f5c99.3558effb.js new file mode 100644 index 000000000..9b84494bd --- /dev/null +++ b/assets/js/7f9f5c99.3558effb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1092],{4664:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>u,contentTitle:()=>a,default:()=>b,frontMatter:()=>h,metadata:()=>o,toc:()=>x});var n=i(5893),t=i(1151),r=i(3992),d=i(425),c=i(1872),l=i(7271);const h={id:"sfmc-system-data-views",title:"SFMC System Data Views",sidebar_label:"System Data Views",description:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-system-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","Email","Automation","Journey"]},a=void 0,o={id:"config/sfmc-system-data-views",title:"SFMC System Data Views",description:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",source:"@site/docs/config/sfmc-system-data-views.mdx",sourceDirName:"config",slug:"/config/sfmc-system-data-views",permalink:"/docs/config/sfmc-system-data-views",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-system-data-views.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Analytics",permalink:"/docs/tags/analytics"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Email",permalink:"/docs/tags/email"},{label:"Automation",permalink:"/docs/tags/automation"},{label:"Journey",permalink:"/docs/tags/journey"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1702854756,formattedLastUpdatedAt:"Dec 17, 2023",frontMatter:{id:"sfmc-system-data-views",title:"SFMC System Data Views",sidebar_label:"System Data Views",description:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.",image:"img/og/og-image-sfmc-system-data-views.png",tags:["Marketing Cloud","Configuration","SQL","Analytics","Data Extensions","Email","Automation","Journey"]},sidebar:"docs",previous:{title:"SFMC Config",permalink:"/docs/category/sfmc-config"},next:{title:"Mobile Connect Data Views",permalink:"/docs/config/sfmc-mobile-connect-data-views"}},u={},x=[{value:"Data Views Basics",id:"data-views-basics",level:2},{value:"Subscriber Data Views",id:"subscriber-data-views",level:2},{value:"_Subscribers",id:"_subscribers",level:3},{value:"_EnterpriseAttribute",id:"_enterpriseattribute",level:3},{value:"Email Data Views",id:"email-data-views",level:2},{value:"_Job",id:"_job",level:3},{value:"_Sent",id:"_sent",level:3},{value:"_Open",id:"_open",level:3},{value:"_Click",id:"_click",level:3},{value:"_Bounce",id:"_bounce",level:3},{value:"_Complaint",id:"_complaint",level:3},{value:"Subscription Data Views",id:"subscription-data-views",level:2},{value:"_Unsubscribe",id:"_unsubscribe",level:3},{value:"_BusinessUnitUnsubscribes",id:"_businessunitunsubscribes",level:3},{value:"_ListSubscribers",id:"_listsubscribers",level:3},{value:"Mobile Connect Data Views",id:"mobile-connect-data-views",level:2},{value:"Journey Data Views",id:"journey-data-views",level:2},{value:"_Journey",id:"_journey",level:3},{value:"_JourneyActivity",id:"_journeyactivity",level:3},{value:"Automation Data Views",id:"automation-data-views",level:2},{value:"_AutomationInstance",id:"_automationinstance",level:3},{value:"_AutomationActivityInstance",id:"_automationactivityinstance",level:3},{value:"Custom Data Views",id:"custom-data-views",level:2}];function j(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.m,{content:"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await."}),"\n",(0,n.jsx)(s.h2,{id:"data-views-basics",children:"Data Views Basics"}),"\n",(0,n.jsxs)(s.p,{children:["System Data Views are ",(0,n.jsx)(s.strong,{children:"built-in backend Data Extensions"})," that you can use to find information about your subscribers and sends. You ",(0,n.jsx)(s.strong,{children:"cannot change them"}),", but you can leverage their data in SQL queries for quick reports in ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-basics#query-studio",children:"Query Studio"})," or outputting to the standard Data Extension. They are excellent fuel for SSJS logic."]}),"\n",(0,n.jsxs)(s.p,{children:["Data Views have ",(0,n.jsx)(s.strong,{children:"data retention settings set to 6 months"}),". If you want to store any data for a more extended period, you must create an Automation that will be copying data to your Data Extension."]}),"\n",(0,n.jsx)(s.p,{children:"Be careful, however, as some of the System Data Views can get absurdly big quick, and making copies within your Marketing Cloud Instance may lead to performance issues. In such cases, a much better idea might be to export that data on a scheduled basis to an external Data Warehouse."}),"\n",(0,n.jsxs)(s.p,{children:["Another important point related to Data Views is always knowing which Data View you genuinely want to use. For example, in most cases, you will be interested in parent-level ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})})," Data View, which means you will need to use the ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from#enterprise-data-extension",children:(0,n.jsx)(s.code,{children:"Ent."})})," prefix in your query."]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsx)(s.p,{children:"Below you can find selected Salesforce Marketing Cloud Data Views focused on Subscribers, Journeys, Email and SMS Channel. I plan to cover the rest of them in the future."}),(0,n.jsxs)(s.p,{children:["Be sure to check the excellent ",(0,n.jsx)(s.a,{href:"https://dataviews.io",children:"Dataviews.io"})," - an interactive system tables relationship diagram created by ",(0,n.jsx)(s.a,{href:"https://sfmarketing.cloud/author/zjarczynska/",children:"Zuzanna Jarczy\u0144ska"}),". It will for sure help you with multi-view ",(0,n.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-join",children:[(0,n.jsx)(s.code,{children:"JOIN"}),"s"]}),"."]}),(0,n.jsxs)(s.p,{children:["There is also a more detailed ",(0,n.jsx)(s.a,{href:"https://dbdiagram.io/d/5ff259ed80d742080a34e3c3",children:"System Tables relationship diagram"})," created by ",(0,n.jsx)(s.a,{href:"https://cameronrobert.com.au",children:"Cameron Roberts"})," that contains SQL Database structure along with field lengths."]}),(0,n.jsx)(l.V,{linkLeft:"https://dataviews.io",textLeft:"Zuza's DataViews.io",newTabLeft:"true",linkRight:"https://dbdiagram.io/d/5ff259ed80d742080a34e3c3",textRight:"Cam's Detailed Diagram",newTabRight:"true"})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"subscriber-data-views",children:"Subscriber Data Views"}),"\n",(0,n.jsx)(s.h3,{id:"_subscribers",children:"_Subscribers"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about your Subscribers. Great for high-level perspective or adding Email Address field to other more detailed Data Views."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DateUndeliverable"}),(0,n.jsx)(s.td,{children:"The date an email for the subscriber was returned as undeliverable"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DateJoined"}),(0,n.jsx)(s.td,{children:"The Date, the subscriber, joined your list"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DateUnsubscribed"}),(0,n.jsx)(s.td,{children:"The Date, the subscriber, unsubscribed from your list"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain of the subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailAddress"}),(0,n.jsx)(s.td,{children:"The subscriber's email address"}),(0,n.jsx)(s.td,{children:"Email"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceCount"}),(0,n.jsx)(s.td,{children:"The total number of bounces accrued by the subscriber"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"A potential alternate identifier for subscribers."}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberType"}),(0,n.jsx)(s.td,{children:"The subscriber type for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Status"}),(0,n.jsx)(s.td,{children:"The status of the subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Locale"}),(0,n.jsx)(s.td,{children:"The locale code for the subscriber"}),(0,n.jsx)(s.td,{children:"Locale"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"Status"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"active"}),"\n",(0,n.jsx)(s.li,{children:"held"}),"\n",(0,n.jsx)(s.li,{children:"unsubscribed"}),"\n",(0,n.jsx)(s.li,{children:"bounced"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"SubscriberType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"ExactTarget"}),"\n",(0,n.jsxs)(s.li,{children:["Unknown External System\nIn most cases you will see only ",(0,n.jsx)(s.code,{children:"Exact Target"})," in your database."]}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n sub.SubscriberID\n , sub.DateUndeliverable\n , sub.DateJoined\n , sub.DateUnsubscribed\n , sub.Domain\n , sub.EmailAddress\n , sub.BounceCount\n , sub.SubscriberKey\n , sub.SubscriberType\n , sub.Status\n , sub.Locale\nFROM _Subscribers AS sub\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Subscribers"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["If you are using the query in the child Business Unit, use ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from#enterprise-data-extension",children:(0,n.jsx)(s.code,{children:"Ent."})})," prefix, as the data is stored on Parent BU level."]}),"\n",(0,n.jsxs)(s.li,{children:["If you need high-level data on your subscribers, this Data View might be enough. If you want to learn more (for example, why a subscriber bounced, where did he unsubscribe), you will need to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," other Data Views."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"SubscriberID"})," to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," data from different engagement-based Data Views like ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," or ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["The ",(0,n.jsx)(s.code,{children:"Status"})," field is excellent for a quick check of your database quality. It is also nice to manage multiple records. Pull the selection of your subscribers with SQL Query, add a new status with ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#custom-values",children:"custom value"})," (for example, ",(0,n.jsx)(s.code,{children:"'unsubscribed' AS Status"}),") and leverage Automation to export-transfer-import the Data Extension to All Subscribers."]}),"\n",(0,n.jsxs)(s.li,{children:["This Data View, along with ",(0,n.jsx)(s.a,{href:"#_enterpriseattribute",children:(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"})}),", ",(0,n.jsx)(s.a,{href:"#_businessunitunsubscribes",children:(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})})," and ",(0,n.jsx)(s.a,{href:"#_listsubscribers",children:(0,n.jsx)(s.code,{children:"_ListSubscribers"})}),", does not have six-month data retention."]}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_enterpriseattribute",children:"_EnterpriseAttribute"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about your Profile and Preference Attributes from Email Studio."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"_SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record stored."}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]})})]})}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n ea._SubscriberID AS SubscriberID\n , ea.ProfileAttributeWithoutSpaces\n , ea.[Profile Attribute With Spaces] AS ProfileAttributeWithSpace\n , ea.PreferenceAttributeWithoutSpaces\n , ea.[Preference Attribute With Spaces] AS PreferenceAttributeWithSpace\nFROM _EnterpriseAttribute AS ea\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["If you are using the query in the child Business Unit, always use ",(0,n.jsx)(s.code,{children:"ENT."})," prefix as it is enterprise-level only Data View."]}),"\n",(0,n.jsxs)(s.li,{children:["When querying or joining ",(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"}),", always include the underscore before SubscriberID - this is the only Data View that requires it."]}),"\n",(0,n.jsxs)(s.li,{children:["Despite the ",(0,n.jsx)(s.code,{children:"Email Address"})," field is visible in the Salesforce Marketing Cloud UI when you go to Profile Attributes, it is not part of the ",(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"})," Data View. To get the Email Address of your Subscriber, query the ",(0,n.jsx)(s.code,{children:"_Subscribers"})," Data View."]}),"\n",(0,n.jsxs)(s.li,{children:["Unfortunately, the default Preference Attribute ",(0,n.jsx)(s.code,{children:"HTML Email"})," is not accessible via query."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"})," Data View is unique, as it might contain spaces in field names. You build it by creating the Profile Attributes in Email Studio. If your profile attribute name contains space, you will have to use the square bracket notation to capture it: ",(0,n.jsx)(s.code,{children:"SELECT [Attribute With Spaces] FROM _EnterpriseAttribute"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["This Data View, along with ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})}),", ",(0,n.jsx)(s.a,{href:"#_businessunitunsubscribes",children:(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})})," and ",(0,n.jsx)(s.a,{href:"#_listsubscribers",children:(0,n.jsx)(s.code,{children:"_ListSubscribers"})})," , does not have six-month data retention."]}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"email-data-views",children:"Email Data Views"}),"\n",(0,n.jsx)(s.h3,{id:"_job",children:"_Job"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about your Email Sends Jobs. Great for capturing detailed data about your communication, especially when paired with Send Log. Must-have for extending your engagement-based Email Data Views."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailID"}),(0,n.jsx)(s.td,{children:"The email ID for the job"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"The ID number for the account that performed the job"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountUserID"}),(0,n.jsx)(s.td,{children:"The ID number for the account user that performed the job"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"FromName"}),(0,n.jsx)(s.td,{children:"The from name in the email send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"FromEmail"}),(0,n.jsx)(s.td,{children:"The from email address in the email send"}),(0,n.jsx)(s.td,{children:"Email"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SchedTime"}),(0,n.jsx)(s.td,{children:"The time the job was scheduled"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"PickupTime"}),(0,n.jsx)(s.td,{children:"The time the Marketing Cloud application started the job"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DeliveredTime"}),(0,n.jsx)(s.td,{children:"The time the email was delivered"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventID"}),(0,n.jsx)(s.td,{children:"The ID for the job event"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsMultipart"}),(0,n.jsx)(s.td,{children:"Whether the job was sent as multi-part MIME or not"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobType"}),(0,n.jsx)(s.td,{children:"The type of job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobStatus"}),(0,n.jsx)(s.td,{children:"The status of the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ModifiedBy"}),(0,n.jsx)(s.td,{children:"If modified, the user who modified the job"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ModifiedDate"}),(0,n.jsx)(s.td,{children:"The date the job was modified"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailName"}),(0,n.jsx)(s.td,{children:"The name of the email sent by the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailSubject"}),(0,n.jsx)(s.td,{children:"The subject of the email send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsWrapped"}),(0,n.jsx)(s.td,{children:"Whether the links in the email were wrapped for tracking"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TestEmailAddr"}),(0,n.jsx)(s.td,{children:"The test email address used in the job"}),(0,n.jsx)(s.td,{children:"Email"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Category"}),(0,n.jsx)(s.td,{children:"The job category"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BccEmail"}),(0,n.jsx)(s.td,{children:"Any email address send in the BCC field"}),(0,n.jsx)(s.td,{children:"Email"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OriginalSchedTime"}),(0,n.jsx)(s.td,{children:"The initially scheduled time for the job"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"CreatedDate"}),(0,n.jsx)(s.td,{children:"The date the job was created"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"CharacterSet"}),(0,n.jsx)(s.td,{children:"The character set used in the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IPAddress"}),(0,n.jsx)(s.td,{children:"This value will always be a null value."}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SalesForceTotalSubscriberCount"}),(0,n.jsx)(s.td,{children:"The total number of Salesforce subscribers included in the job"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SalesForceErrorSubscriberCount"}),(0,n.jsx)(s.td,{children:"The total number of Salesforce subscribers included in the job that received errors"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SendType"}),(0,n.jsx)(s.td,{children:"The type of send used in the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DynamicEmailSubject"}),(0,n.jsx)(s.td,{children:"The dynamic email subject included in the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SuppressTracking"}),(0,n.jsx)(s.td,{children:"If tracking information for this job was suppressed"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SendClassificationType"}),(0,n.jsx)(s.td,{children:"The type of send classification for the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SendClassification"}),(0,n.jsx)(s.td,{children:"The custom name of send classification for the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ResolveLinksWithCurrentData"}),(0,n.jsx)(s.td,{children:"If the job resolved links with current data"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailSendDefinition"}),(0,n.jsx)(s.td,{children:"The email send definition used in the job"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DeduplicateByEmail"}),(0,n.jsx)(s.td,{children:"Whether the email addresses in the job are used to deduplicate subscribers"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggererSendDefinitionObjectID"}),(0,n.jsx)(s.td,{children:"The object ID for the triggered send definition"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendCustomerKey"}),(0,n.jsx)(s.td,{children:"The customer key for the triggered send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"JobType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"null"})}),"\n",(0,n.jsx)(s.li,{children:"MULTIPLE_SEND"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"JobStatus"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Deleted"}),"\n",(0,n.jsx)(s.li,{children:"New"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"Category"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Test Send Emails"}),"\n",(0,n.jsx)(s.li,{children:"Triggered Sends"}),"\n",(0,n.jsx)(s.li,{children:"Version XX (where XX is a number)"}),"\n",(0,n.jsx)(s.li,{children:"GUID_VXX (36 character hyphen separated GUID followed by underscore and VXX where XX is a number)"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CharacterSet"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Unicode - UTF-8"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"SendType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"ExactTargetSend"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"SendClassificationType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Default Commercial"}),"\n",(0,n.jsx)(s.li,{children:"Default Transactional"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n job.JobID\n , job.EmailID\n , job.AccountID\n , job.AccountUserID\n , job.FromName\n , job.FromEmail\n , job.SchedTime\n , job.PickupTime\n , job.DeliveredTime\n , job.EventID\n , job.IsMultipart\n , job.JobType\n , job.JobStatus\n , job.ModifiedBy\n , job.ModifiedDate\n , job.EmailName\n , job.EmailSubject\n , job.IsWrapped\n , job.TestEmailAddr\n , job.Category\n , job.BccEmail\n , job.OriginalSchedTime\n , job.CreatedDate\n , job.CharacterSet\n , job.IPAddress\n , job.SalesForceTotalSubscriberCount\n , job.SalesForceErrorSubscriberCount\n , job.SendType\n , job.DynamicEmailSubject\n , job.SuppressTracking\n , job.SendClassificationType\n , job.SendClassification\n , job.ResolveLinksWithCurrentData\n , job.EmailSendDefinition\n , job.DeduplicateByEmail\n , job.TriggererSendDefinitionObjectID\n , job.TriggeredSendCustomerKey\nFROM _Job AS job\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Job"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"JobID"})," field will be your bread and butter to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," with other engagement-based Data Views."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"EmailName"}),", ",(0,n.jsx)(s.code,{children:"FromName"}),", and ",(0,n.jsx)(s.code,{children:"FromEmail"})," are handy data points missing in the ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})}),", ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})})," Data Views and are worth checking for reporting needs."]}),"\n",(0,n.jsxs)(s.li,{children:["If you are performing A/B tests or want to analyse the subject line's impact on performance, be sure to pick ",(0,n.jsx)(s.code,{children:"EmailSubject"}),". Pair it with ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#conditional-values-with-case",children:(0,n.jsx)(s.code,{children:"CASE"})})," to create a great knowledge source for your content team."]}),"\n",(0,n.jsxs)(s.li,{children:["For debugging purposes, be sure to check out ",(0,n.jsx)(s.code,{children:"IsWrapped"})," and ",(0,n.jsx)(s.code,{children:"SuppressTracking"})," - if you are missing tracking data, ",(0,n.jsx)(s.code,{children:"CharacterSet"})," - if you have problems with formatting, ",(0,n.jsx)(s.code,{children:"SendClassification"})," - if you have issues with unsubscribers or spam complaints."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"AccountUserID"})," field is fantastic for ",(0,n.jsx)(s.code,{children:"_Job"}),"-based Audit Log creation. Unfortunately, there is no UI-based easy way to determine which user has which UserID. You can either use SOAP API or match based on these SQL results."]}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_Job"})," Data View is unique among other Email-focused Data Views, as it shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," and other data from all Business Units, but this is not the case with ",(0,n.jsx)(s.code,{children:"_Job"}),". You can query only those jobs that occurred in the Business Unit where you execute your SQL snippet."]}),(0,n.jsxs)(s.p,{children:["Always consider this when choosing Business Unit to execute the query and the type of ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," statement."]})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_sent",children:"_Sent"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about your Email Sends. Great for understanding who had a chance to receive your message and whose communication did not leave your system."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"Your parent account ID (MID) number"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OYBAccountID"}),(0,n.jsxs)(s.td,{children:["The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,n.jsx)(s.code,{children:"Null"})]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"The batch ID number for any batches used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventDate"}),(0,n.jsx)(s.td,{children:"The date the send took place"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain at which the send occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggererSendDefinitionObjectID"}),(0,n.jsx)(s.td,{children:"The object ID for the triggered send definition"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendCustomerKey"}),(0,n.jsx)(s.td,{children:"The customer key for the triggered send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n sent.AccountID\n , sent.OYBAccountID\n , sent.JobID\n , sent.ListID\n , sent.BatchID\n , sent.SubscriberID\n , sent.SubscriberKey\n , sent.EventDate\n , sent.Domain\n , sent.TriggererSendDefinitionObjectID\n , sent.TriggeredSendCustomerKey\nFROM _Sent AS sent\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Sent"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JobID"}),", ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"BatchID"})," and ",(0,n.jsx)(s.code,{children:"SubscriberId"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," to match various events from multiple Data Views like ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})}),", ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})})," for a single engagement with a particular subscriber. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["The most valuable data here is the ",(0,n.jsx)(s.code,{children:"EventDate"})," field that lets you know when the email was sent (and whether that happened at all)."]}),"\n",(0,n.jsxs)(s.li,{children:["If you have triggered a send for an email and after a few minutes you don't see it here, in most cases, it means that the send was blocked and never left Marketing Cloud. Check ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-enhanced-send-log",children:"enhanced Send Log"}),", applied personalisation, data source, ",(0,n.jsx)(s.code,{children:"RaiseError"})," scripts."]}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_open",children:"_Open"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about your Email Opens. For when you need to know when someone opened your email. Kind of."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"Your parent account ID (MID) number"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OYBAccountID"}),(0,n.jsxs)(s.td,{children:["The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,n.jsx)(s.code,{children:"Null"})]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"The batch ID number for any batches used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventDate"}),(0,n.jsx)(s.td,{children:"The date the open took place"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain at which the open occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsUnique"}),(0,n.jsx)(s.td,{children:"Whether the event is unique or repeated"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggererSendDefinitionObjectID"}),(0,n.jsx)(s.td,{children:"The object ID for the triggered send definition"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendCustomerKey"}),(0,n.jsx)(s.td,{children:"The customer key for the triggered send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n opened.AccountID\n , opened.OYBAccountID\n , opened.JobID\n , opened.ListID\n , opened.BatchID\n , opened.SubscriberID\n , opened.SubscriberKey\n , opened.EventDate\n , opened.Domain\n , opened.IsUnique\n , opened.TriggererSendDefinitionObjectID\n , opened.TriggeredSendCustomerKey\nFROM _Open AS opened\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Open"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JobID"}),", ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"BatchID"})," and ",(0,n.jsx)(s.code,{children:"SubscriberId"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," to match various events from multiple Data Views like ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})}),", ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})})," for a single engagement with a particular subscriber. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"_open.IsUnique = 1"})," in ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," or ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," to focus on the the first occurence of each event. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["The most valuable data here is the ",(0,n.jsx)(s.code,{children:"EventDate"})," field that lets you know when the email was opened (and whether that happened at all). But with email opens, it's not that easy. In many cases, the lack of open data in this Data View doesn't mean that your recipient for sure did not open the email. And in some instances, tracked open might not mean he did."]}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:["There is ",(0,n.jsx)(s.strong,{children:"no official engagement feedback loop"})," that informs Marketing Cloud (or any other Marketing Automation Platform) that your recipient opened the email."]}),(0,n.jsxs)(s.p,{children:["All Marketing Automation Platforms put an ",(0,n.jsx)(s.strong,{children:"invisible 1px wide image in the email"})," body that is unique for every email you send. When someone opens an email, its images are downloaded from the server. SFMC treats the download of this 1px wide image as proof that the recipient opened the email. And in most cases, it is correct. But..."]}),(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.strong,{children:"images don't always render"})," (that's why you should always use alt-text). Some recipients opt-in on a per-email basis to download email graphics. Government audiences might not even have this option. Because of the admin policy, the privacy concerns over engagement tracking or limited internet bandwidth. In such a case, even if the user opens an email, you won't have information about it."]}),(0,n.jsx)(s.p,{children:"It might lead to weird data, like clicks visible for contacts that did not open. Marketing Automation Platforms track Clicks via a different, more confident approach."}),(0,n.jsx)(s.p,{children:"It can also lead to cases where a user has both click and open data, but click data is earlier than the open. Why? Your recipient clicked something in your email and only after that decided to allow his email program to load the images in it."}),(0,n.jsxs)(s.p,{children:["There might be cases where the data is wrong the other way - when you see that email as opened, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on ",(0,n.jsx)(s.code,{children:"_Open"})," and ",(0,n.jsx)(s.code,{children:"_Click"})," Data Views, as those bots will open the email and click all its links within a second. Something not possible for an actual human."]})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_click",children:"_Click"}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsxs)(d.Z,{value:"fields",children:[(0,n.jsx)(s.p,{children:"Stores information about your Email Clicks. Detailed click reporting and behavioural logic are possible, thanks to this one."}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"Your parent account ID (MID) number"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OYBAccountID"}),(0,n.jsxs)(s.td,{children:["The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,n.jsx)(s.code,{children:"Null"})]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"The batch ID number for any batches used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record."}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventDate"}),(0,n.jsx)(s.td,{children:"The date the click took place"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain at which the click occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"URL"}),(0,n.jsxs)(s.td,{children:["The URL for the link clicked. Dynamic elements are shown as code: ",(0,n.jsx)(s.code,{children:"www.example.com?id=%%SubID%%"})]}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"LinkName"}),(0,n.jsx)(s.td,{children:"The link name assigned in the email send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"LinkContent"}),(0,n.jsxs)(s.td,{children:["The link content assigned in the email send. Dynamic elements are shown as result: ",(0,n.jsx)(s.code,{children:"www.example.com?id=12345"})]}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsUnique"}),(0,n.jsx)(s.td,{children:"Whether the event is unique or repeated"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggererSendDefinitionObjectID"}),(0,n.jsx)(s.td,{children:"The object ID for the triggered send definition"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendCustomerKey"}),(0,n.jsx)(s.td,{children:"The customer key for the triggered send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n click.AccountID\n , click.OYBAccountID\n , click.JobID\n , click.ListID\n , click.BatchID\n , click.SubscriberID\n , click.SubscriberKey\n , click.EventDate\n , click.Domain\n , click.URL\n , click.LinkName\n , click.LinkContent\n , click.IsUnique\n , click.TriggererSendDefinitionObjectID\n , click.TriggeredSendCustomerKey\nFROM _Click AS click\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Click"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JobID"}),", ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"BatchID"})," and ",(0,n.jsx)(s.code,{children:"SubscriberId"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," to match various events from multiple Data Views like ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})})," for a single engagement with a particular subscriber. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"_click.IsUnique = 1"})," in ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," or ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," to focus on the first occurence of each event. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["The most valuable data here is the ",(0,n.jsx)(s.code,{children:"EventDate"})," field that lets you know when the email was clicked (and whether that happened at all)."]}),"\n",(0,n.jsxs)(s.li,{children:["You can significantly improve the value of that information by checking the ",(0,n.jsx)(s.code,{children:"LinkName"})," and ",(0,n.jsx)(s.code,{children:"LinkContent"})," fields to understand which links proved interesting for your customers."]}),"\n",(0,n.jsxs)(s.li,{children:["Suppose you want to create an extensive report on link clicks. In that case, you might want to use the ",(0,n.jsx)(s.code,{children:"URL"})," field instead of ",(0,n.jsx)(s.code,{children:"LinkContent"})," due to the former not showing final personalisation values. It will be much easier to group clicks or even cleanly delete all AMPScript from them."]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:["There might be cases where the click data is wrong - when you see that email as clicked, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on ",(0,n.jsx)(s.code,{children:"_Open"})," and ",(0,n.jsx)(s.code,{children:"_Click"})," Data Views, as those bots will open the email and click all its links within a second. Something not possible for a actual human."]})}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_bounce",children:"_Bounce"}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsxs)(d.Z,{value:"fields",children:[(0,n.jsx)(s.p,{children:"Stores information about your Email Bounces. Best place in Marketing Cloud to understand why your messages are not getting delivered."}),(0,n.jsxs)(s.p,{children:["This Data View, along with ",(0,n.jsx)(s.a,{href:"#_complaint",children:(0,n.jsx)(s.code,{children:"_Complaint"})}),", should be monitored regularly to assess the health of your email marketing."]}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"Your parent account ID (MID) number"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OYBAccountID"}),(0,n.jsxs)(s.td,{children:["The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,n.jsx)(s.code,{children:"Null"})]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"The batch ID number for any batches used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventDate"}),(0,n.jsx)(s.td,{children:"The date the bounce took place"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsUnique"}),(0,n.jsx)(s.td,{children:"Whether the event is unique or repeated - 1 for the first occurrence, 0 for subsequent"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain at which the bounce occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceCategoryID"}),(0,n.jsx)(s.td,{children:"The ID number for the bounce category"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceCategory"}),(0,n.jsx)(s.td,{children:"The category of the bounce"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceSubcategoryID"}),(0,n.jsx)(s.td,{children:"The ID number for the bounce subcategory"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceSubcategory"}),(0,n.jsx)(s.td,{children:"The subcategory of the bounce"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceTypeID"}),(0,n.jsx)(s.td,{children:"The ID number for the bounce type"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceType"}),(0,n.jsx)(s.td,{children:"The type of bounce that occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SMTPBounceReason"}),(0,n.jsx)(s.td,{children:"The reason for the bounce relayed by the mail system"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SMTPMessage"}),(0,n.jsx)(s.td,{children:"The message regarding the bounce from the mail system"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SMTPCode"}),(0,n.jsx)(s.td,{children:"The error code for the bounce from the mail system"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggererSendDefinitionObjectID"}),(0,n.jsx)(s.td,{children:"The object ID for the triggered send definition"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendCustomerKey"}),(0,n.jsx)(s.td,{children:"The customer key for the triggered send"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsFalseBounce"}),(0,n.jsxs)(s.td,{children:["Indicates a false bounce if ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?id=000390396&type=1",children:"SFMC received delivery receipt after receiving bounce"}),"."]}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})]}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"BounceCategoryID"})," possible values:"]}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Value"}),(0,n.jsx)(s.th,{children:"Meaning"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1"}),(0,n.jsx)(s.td,{children:"Hard Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"2"}),(0,n.jsx)(s.td,{children:"Soft Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"3"}),(0,n.jsx)(s.td,{children:"Block Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"4"}),(0,n.jsx)(s.td,{children:"Unknown Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"5"}),(0,n.jsx)(s.td,{children:"Technical/Other Bounce"})]})]})]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"BounceCategory"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Hard Bounce"}),"\n",(0,n.jsx)(s.li,{children:"Soft Bounce"}),"\n",(0,n.jsx)(s.li,{children:"Block Bounce"}),"\n",(0,n.jsx)(s.li,{children:"Unknown Bounce"}),"\n",(0,n.jsx)(s.li,{children:"Technical/Other Bounce"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"BounceSubcategoryID"})," possible values:"]}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Value"}),(0,n.jsx)(s.th,{children:"Meaning"}),(0,n.jsx)(s.th,{children:"Bounce Type"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1001"}),(0,n.jsx)(s.td,{children:"Complaints"}),(0,n.jsx)(s.td,{children:"Block Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1002"}),(0,n.jsx)(s.td,{children:"Blocked"}),(0,n.jsx)(s.td,{children:"Block Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1004"}),(0,n.jsx)(s.td,{children:"Content"}),(0,n.jsx)(s.td,{children:"Block Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1010"}),(0,n.jsx)(s.td,{children:"Authentication"}),(0,n.jsx)(s.td,{children:"Block Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1999"}),(0,n.jsx)(s.td,{children:"Other"}),(0,n.jsx)(s.td,{children:"Soft Bounce, Block Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"2001"}),(0,n.jsx)(s.td,{children:"User Unknown"}),(0,n.jsx)(s.td,{children:"Hard Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"2002"}),(0,n.jsx)(s.td,{children:"Domain Unknown"}),(0,n.jsx)(s.td,{children:"Hard Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"2003"}),(0,n.jsx)(s.td,{children:"Bad Address Syntax"}),(0,n.jsx)(s.td,{children:"Hard Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"3001"}),(0,n.jsx)(s.td,{children:"Mailbox Full"}),(0,n.jsx)(s.td,{children:"Soft Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"3002"}),(0,n.jsx)(s.td,{children:"Inactive Account"}),(0,n.jsx)(s.td,{children:"Hard Bounce, Soft Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"4001"}),(0,n.jsx)(s.td,{children:"Server Too Busy"}),(0,n.jsx)(s.td,{children:"Technical/Other Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"4002"}),(0,n.jsx)(s.td,{children:"Data Format Error"}),(0,n.jsx)(s.td,{children:"Technical/Other Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"4003"}),(0,n.jsx)(s.td,{children:"Network Error"}),(0,n.jsx)(s.td,{children:"Technical/Other Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"4999"}),(0,n.jsx)(s.td,{children:"Other"}),(0,n.jsx)(s.td,{children:"Hard Bounce, Soft Bounce, Technical/Other Bounce"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"9999"}),(0,n.jsx)(s.td,{children:"Unknown"}),(0,n.jsx)(s.td,{children:"Hard Bounce, Soft Bounce, Block Bounce, Unknown Bounce, Technical/Other Bounce"})]})]})]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"BounceSubcategory"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Complaints"}),"\n",(0,n.jsx)(s.li,{children:"Blocked"}),"\n",(0,n.jsx)(s.li,{children:"Content"}),"\n",(0,n.jsx)(s.li,{children:"Authentication"}),"\n",(0,n.jsx)(s.li,{children:"User Unknown"}),"\n",(0,n.jsx)(s.li,{children:"Domain Unknown"}),"\n",(0,n.jsx)(s.li,{children:"Bad Address Syntax"}),"\n",(0,n.jsx)(s.li,{children:"Mailbox Full"}),"\n",(0,n.jsx)(s.li,{children:"Inactive Account"}),"\n",(0,n.jsx)(s.li,{children:"Server Too Busy"}),"\n",(0,n.jsx)(s.li,{children:"Data Format Error"}),"\n",(0,n.jsx)(s.li,{children:"Network Error"}),"\n",(0,n.jsx)(s.li,{children:"Other"}),"\n",(0,n.jsx)(s.li,{children:"Unknown"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"BounceTypeId"})," possible values:"]}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Value"}),(0,n.jsx)(s.th,{children:"Meaning"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"0"}),(0,n.jsx)(s.td,{children:"immediate"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1"}),(0,n.jsx)(s.td,{children:"delayed"})]})]})]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"BounceType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"immediate"}),"\n",(0,n.jsx)(s.li,{children:"delayed"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n bounce.AccountID\n , bounce.OYBAccountID\n , bounce.JobID\n , bounce.ListID\n , bounce.BatchID\n , bounce.SubscriberID\n , bounce.SubscriberKey\n , bounce.EventDate\n , bounce.IsUnique\n , bounce.Domain\n , bounce.BounceCategoryID\n , bounce.BounceCategory\n , bounce.BounceSubcategoryID\n , bounce.BounceSubcategory\n , bounce.BounceTypeID\n , bounce.BounceType\n , bounce.SMTPBounceReason\n , bounce.SMTPMessage\n , bounce.SMTPCode\n , bounce.TriggererSendDefinitionObjectID\n , bounce.TriggeredSendCustomerKey\nFROM _Bounce AS bounce\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Bounce"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JobID"}),", ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"BatchID"})," and ",(0,n.jsx)(s.code,{children:"SubscriberId"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," to match various events from multiple Data Views like ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," for a single engagement with a particular subscriber. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"_bounce.IsUnique = 1"})," in ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," or ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," to focus on the first occurence of each event. Example: ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"Query for Debugging Email Sends"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["The ",(0,n.jsx)(s.code,{children:"Domain"})," helps aggregate the bounce data to see any domain-specific problem with deliverability."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"SMTPBounceReason"})," is the most helpful information when you want to understand what happened to your send. Be careful - this value can be configured to a custom string by the server owner. Some administrators are using this to inform you about a specific issue. Some are even faking the information to limit the emails coming to their servers from selected sources."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"SMTPCode"})," is useful for getting additional data on the Bounce Reason. Watch especially for 541 and 554. In most cases, it means you are considered a spammer by the server or already blocklisted. I recommend you to create an Automation with Verification Activity to get an automated warning whenever there are more than a few occurrences. Triage immediately."]}),"\n",(0,n.jsxs)(s.li,{children:["If you get errors when trying to select ",(0,n.jsx)(s.code,{children:"IsFalseBounce"})," - it might be missing on the SFMC backend. Create a Support Ticket to resolve it."]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"SMTPBounceReason"})," field is ",(0,n.jsx)(s.code,{children:"nvarchar(max)"})," SQL type, and due to that might be longer than the 4000 characters limit for the Data Extension string length in Salesforce Marketing Cloud. If you want to save this data outside of Data View, be sure to use ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions#left--right",children:(0,n.jsx)(s.code,{children:"LEFT(SMTPBounceReason, 4000)"})}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"_complaint",children:"_Complaint"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_Complaint"})," Data View stores Email Service Providers Feedback Loop (FBL) data. It means that if someone clicks the ",(0,n.jsx)(s.code,{children:"Report Spam"})," button for your email and there is FBL in place, this information will be added to the Data View. It will also result in an unsubscribe event and be visible in the ",(0,n.jsx)(s.a,{href:"#_unsubscribe",children:(0,n.jsx)(s.code,{children:"_Unsubscribe"})}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["Currently, Salesforce Marketing Cloud ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?id=000353531&type=1",children:"supports Feedback Loops"})," for Bluetie (Excite), Comcast, Cox, Fastmail, Microsoft Hotmail, Italia Online, La Poste, Liberty Global, Locaweb, Mail.ru, OpenSRS (Tucows), Rackspace (Mailtrust), Seznam, Synacor, Telenor, Telstra, Terra, UOL (Brazil), USA.net, XS4ALL and Yandex."]}),"\n",(0,n.jsxs)(s.p,{children:["You can additionally ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?id=000312472&type=1",children:"register for the Yahoo Feedback Loop"}),". Gmail also has a ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?id=000353530&type=1",children:"Feedback Loop system"}),", but it works differently and won't be in ",(0,n.jsx)(s.code,{children:"_Complaint"})," Data View."]}),"\n",(0,n.jsxs)(s.p,{children:["This Data View, along with ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})}),", should be monitored regularly to assess the health of your email marketing."]}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"Your parent account ID (MID) number"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OYBAccountID"}),(0,n.jsxs)(s.td,{children:["The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,n.jsx)(s.code,{children:"Null"})]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"The batch ID number for any batches used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventDate"}),(0,n.jsx)(s.td,{children:"The date the send took place"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsUnique"}),(0,n.jsx)(s.td,{children:"Whether the event is unique or repeated - 1 for the first occurrence, 0 for subsequent"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain at which the send occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]})]})]})}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n complaint.AccountID\n , complaint.OYBAccountID\n , complaint.JobID\n , complaint.ListID\n , complaint.BatchID\n , complaint.SubscriberID\n , complaint.SubscriberKey\n , complaint.EventDate\n , complaint.IsUnique\n , complaint.Domain\nFROM _Complaint AS complaint\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Complaint"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JobID"}),", ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"BatchID"})," and ",(0,n.jsx)(s.code,{children:"SubscriberId"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," to match various events from multiple Data Views like ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," for a single engagement with a particular subscriber."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"_complaint.IsUnique = 1"})," in ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," or ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," to focus on the first occurence of each event."]}),"\n",(0,n.jsxs)(s.li,{children:["The ",(0,n.jsx)(s.code,{children:"Domain"})," helps aggregate the Complaint data to see any domain-specific problem with targeting your communication."]}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"subscription-data-views",children:"Subscription Data Views"}),"\n",(0,n.jsx)(s.p,{children:"Subscription management in Salesforce Marketing Cloud is complex. Very complex."}),"\n",(0,n.jsx)(s.p,{children:"It starts with four levels of unsubscriptions:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"List unsubscribe = no more sends from a particular list or publication list."}),"\n",(0,n.jsx)(s.li,{children:"Business Unit unsubscribe = no more sends from a particular business unit."}),"\n",(0,n.jsx)(s.li,{children:"Master unsubscribe = no more sends from your Marketing Cloud."}),"\n",(0,n.jsx)(s.li,{children:"Global unsubscribe = no more sends from Marketing Cloud. Any, globally."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"And it gets even more interesting when you consider that triggering specific unsubscription level depends on email configuration, Email Studio configuration, preference center configuration and subscriber's behaviour."}),"\n",(0,n.jsx)(s.p,{children:"Oh, and there is no out-of-the-box unsubscription from Data Extensions, which are currently the most popular segmentation and targeting tool."}),"\n",(0,n.jsx)(s.p,{children:"To give us at least a chance to make sense of that mess, Salesforce created multiple System Data Views related to (un)subscriptions."}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:["Spam Complaint and List-Unsubscribe Header are pretty particular unsubscription use cases. They are added to ",(0,n.jsx)(s.a,{href:"#_unsubscribe",children:(0,n.jsx)(s.code,{children:"_Unsubscribe"})})," and ",(0,n.jsx)(s.a,{href:"#_businessunitunsubscribe",children:(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribe"})})," as unsubscriptions from a list used in send (for example, ID of Publication List selected for the send). In reality, Marketing Cloud will perform automatic unsubscribe from the All Subscriber list (depending on Email Studio settings - Child BU's or Enterprise one), not the list mentioned in ",(0,n.jsx)(s.code,{children:"ListID"}),"."]}),(0,n.jsx)(s.p,{children:"As a result, when querying, you will see the list-specific unsubscribe that doesn't result in unsubscription from the list but instead blocks all commercial communication as a Business Unit or Master unsubscribe."}),(0,n.jsx)(s.p,{children:"Custom solution (Automation with Query and Script Activities) will be necessary to perform the list-specific unsubscribe."})]}),"\n",(0,n.jsx)(s.h3,{id:"_unsubscribe",children:"_Unsubscribe"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_Unsubscribe"})," Data View stores data about unsubscribe events. The wording here is crucial, as it explains the difference from ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})})," Data View unsubsrciption counts."]}),"\n",(0,n.jsxs)(s.p,{children:["In ",(0,n.jsx)(s.code,{children:"_Subscribers"}),", you can check what is the ",(0,n.jsx)(s.strong,{children:"current subscription status"})," for the All Subscribers list. In ",(0,n.jsx)(s.code,{children:"_Unsubscribe"}),", you see the ",(0,n.jsx)(s.strong,{children:"unsubscription events"})," happening from List-Unsubscribe Header, ",(0,n.jsx)(s.code,{children:"LogUnsubEvent"})," API call, Reply Mail Management responses, Complaints and out-of-the-box Preference Center - all linked to a specific ",(0,n.jsx)(s.a,{href:"#_job",children:(0,n.jsx)(s.code,{children:"_Job"})}),". It is also not limited to All Subscribers but also covers unsubscribes from other types of lists."]}),"\n",(0,n.jsxs)(s.p,{children:["It means that status changes like Import Activity, direct API change, manual change in the Email Studio (not Job-specific) will be reflected in the ",(0,n.jsx)(s.code,{children:"_Subscribers"})," Data View, but not in the ",(0,n.jsx)(s.code,{children:"_Unsubscribe"}),". On the other hand, ",(0,n.jsx)(s.code,{children:"UnsubEvents"})," does not necessarily change the Status in the ",(0,n.jsx)(s.code,{children:"_Subscribers"}),". For example, taking care of List-Unsubscribe Header clicks require dedicated Automation to get this data from ",(0,n.jsx)(s.code,{children:"_Unsubscribe"})," Data View and push it to other parts of your consent data model."]}),"\n",(0,n.jsxs)(s.p,{children:["This Data View stores data only for six-months, so retention-less ",(0,n.jsx)(s.code,{children:"_Subscribers"})," Data View might show more unsubscribed records if you are not cleaning them from SFMC regularly."]}),"\n",(0,n.jsxs)(s.p,{children:["All of this makes ",(0,n.jsx)(s.code,{children:"_Unsubscribe"})," a much better source of knowledge about unsubscription."]}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AccountID"}),(0,n.jsx)(s.td,{children:"Your account ID number"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"OYBAccountID"}),(0,n.jsxs)(s.td,{children:["The account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be ",(0,n.jsx)(s.code,{children:"Null"})]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"The job ID number for the email send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"The batch ID number for any batches used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EventDate"}),(0,n.jsx)(s.td,{children:"The date the unsubscribe took place"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"IsUnique"}),(0,n.jsx)(s.td,{children:"Whether the event is unique or repeated - 1 for the first occurrence, 0 for subsequent"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Domain"}),(0,n.jsx)(s.td,{children:"The domain at which the unsubscribe occurred"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]})]})]})}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n unsub.AccountID\n , unsub.OYBAccountID\n , unsub.JobID\n , unsub.ListID\n , unsub.BatchID\n , unsub.SubscriberID\n , unsub.SubscriberKey\n , unsub.EventDate\n , unsub.IsUnique\n , unsub.Domain\nFROM _Unsubscribe AS unsub\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Unsubscribe"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JobID"}),", ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"BatchID"})," and ",(0,n.jsx)(s.code,{children:"SubscriberId"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," to match various events from multiple Data Views like ",(0,n.jsx)(s.a,{href:"#_job",children:(0,n.jsx)(s.code,{children:"_Job"})})," and ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})})," to check unsubscription context."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"_unsubscribe.IsUnique = 1"})," in ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," or ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," to focus on the first occurence of each event."]}),"\n",(0,n.jsx)(s.li,{children:"If you query this Data View on the child Business Unit, it will return only unsubscribe events from that specific BU."}),"\n",(0,n.jsxs)(s.li,{children:["The most valuable data here are:","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"EventDate"})," field that lets you know when the unsubscription happened"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"ListID"})," field that tells you which list is impacted by the unsubscription"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:['If the subscriber clicks "Unsubscribe from All" on the out-of-the-box unsubscription center, it will perform Master Unsubscribe from all Lists. As it is a single event, it will be stored as a single record in the ',(0,n.jsx)(s.code,{children:"_Unsubscribe"})," Data View with random ListID assigned to it. For a complete picture, you will need to check ",(0,n.jsx)(s.a,{href:"#_listsubscribers",children:(0,n.jsx)(s.code,{children:"_ListSubscribers"})})," Data View."]})}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_businessunitunsubscribes",children:"_BusinessUnitUnsubscribes"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})})," Data View might give you information about the current state of subscriptions on the All Subscribers list. But if in Email Studio you configure Business Unit Level unsubscribes, this information will not be helpful, as the data stored there will not reflect the subscription status in a specific Business Unit."]}),"\n",(0,n.jsxs)(s.p,{children:["Here comes the fresh ",(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})," Data View. It shows you the only unsubscribed contacts for each Business Unit. If the contact resubscribes - it will disappear from this Data View."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})," Data View will work differently depending on your SFMC ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_es_unsubscribe_settings.htm&type=5",children:"unsubscription configuration"}),'. You will be able to query it from the Child BU level only for Business Units set to "unsubscribe from this business unit only".']}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BusinessUnitID"}),(0,n.jsx)(s.td,{children:"The Account ID for the Business Unit"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"UnsubDateUTC"}),(0,n.jsx)(s.td,{children:"The date the subscriber unsubscribed on the BU."}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"UnsubReason"}),(0,n.jsx)(s.td,{children:"The reason listed is a custom value configured by your administrator."}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"UnsubReason"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Spam Complaint"}),"\n",(0,n.jsx)(s.li,{children:"Unsubscribed from list details on subscriber properties dialog."}),"\n",(0,n.jsx)(s.li,{children:"Unsubscribed by Salesforce Marketing Cloud RMM service based on subscriber Leave/Reply email."}),"\n",(0,n.jsx)(s.li,{children:"Unsubscribed by subscriber edit API call."}),"\n",(0,n.jsx)(s.li,{children:"Unsubscribed from the Subscription Center"}),"\n",(0,n.jsx)(s.li,{children:"Unsubscribed via Import"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n buUnsub.BusinessUnitID\n , buUnsub.SubscriberID\n , buUnsub.SubscriberKey\n , buUnsub.UnsubDateUTC\n , buUnsub.UnsubReason\nFROM _BusinessUnitUnsubscribes AS buUnsub\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Remember that it stores only currently unsubscribed contacts. Not unsubscribe event data (that's in ",(0,n.jsx)(s.a,{href:"#_unsubscribe",children:(0,n.jsx)(s.code,{children:"_Unsubscribe"})}),") and not other statuses (like bounced, held). It will also not show unsubscribed users after they resubscribed or got deleted."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"SubscriberID"})," or ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," along with ",(0,n.jsx)(s.code,{children:"UnsubDateUTC"})," might fuzzy match the data in this data view with ",(0,n.jsx)(s.a,{href:"#_unsubscribe",children:(0,n.jsx)(s.code,{children:"_Unsubscribe"})}),"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"UnsubDateUTC"}),", as name suggests, is in UTC instead of the SFMC-standard UTC-6. Remember to use ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#dateadd",children:(0,n.jsx)(s.code,{children:"DATEADD"})})," to normalize it before comparing to other system dates."]}),"\n",(0,n.jsxs)(s.li,{children:["The real treat in this data view (apart from finally having an easy option to see Business Unit unsubscribes) is the ",(0,n.jsx)(s.code,{children:"UnsubReason"})," field that can tell you more about the unsubscribe."]}),"\n",(0,n.jsxs)(s.li,{children:["This Data View, along with ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})}),", ",(0,n.jsx)(s.a,{href:"#_enterpriseattribute",children:(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"})})," and ",(0,n.jsx)(s.a,{href:"#_listsubscribers",children:(0,n.jsx)(s.code,{children:"_ListSubscribers"})}),", does not have six-month data retention."]}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"UnsubDateUTC"})," not only uses a different timezone from the rest of the system dates. It differs by a few milliseconds from ",(0,n.jsx)(s.a,{href:"#_unsubscribe",children:(0,n.jsx)(s.code,{children:"_Unsubscribe"})})," ",(0,n.jsx)(s.code,{children:"EventDate"}),". When querying (SFMC doesn't show seconds for date fields), you won't see it, but the comparison is using the full datetime value."]}),(0,n.jsxs)(s.p,{children:["Because of it, you cannot match it out-of-the-box. ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#datediff",children:(0,n.jsx)(s.code,{children:"DATEDIFF"})})," is here to save the day:"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",metastring:'title="DATEDIFF will allow you to compare despite the difference"',children:"DATEDIFF(MINUTE, _Unsubscribe.EventDate, DATEADD(HOUR, -6, _BusinessUnitUnsubscribes.UnsubDateUTC)) < 1\n"})})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_listsubscribers",children:"_ListSubscribers"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_ListSubscribers"})," Data View stores data about the current status of the subscription. It might sound similar to ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})})," and ",(0,n.jsx)(s.a,{href:"#_businessunitunsubscribes",children:(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})}),", but there are significant differences:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"_Subscribers"})," has data about All Subscribers list only. ",(0,n.jsx)(s.code,{children:"_ListSubscribers"})," shows status for all Lists available in Salesforce Marketing Cloud."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})," has data about contacts unsubscribed from All Subscribers on every Business Unit. ",(0,n.jsx)(s.code,{children:"_ListSubscribers"})," doesn't show Business Unit information, but it covers all Lists and all Statuses."]}),"\n"]}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AddedBy"}),(0,n.jsxs)(s.td,{children:["The ID of the user who ran the process that added the subscriber (might also be ",(0,n.jsx)(s.code,{children:"0"})," or ",(0,n.jsx)(s.code,{children:"-1000"}),")"]}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AddMethod"}),(0,n.jsx)(s.td,{children:"The method by which the subscriber was added"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"CreatedDate"}),(0,n.jsx)(s.td,{children:"The date the subscriber was added to the specific list"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"DateUnsubscribed"}),(0,n.jsx)(s.td,{children:"The date the subscriber unsubscribed"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailAddress"}),(0,n.jsx)(s.td,{children:"The subscriber's email address"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"The list ID number for the list used in the send"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListName"}),(0,n.jsx)(s.td,{children:"The name of the list containing the subscribers"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListType"}),(0,n.jsx)(s.td,{children:"Shows whether the type is list or group"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Status"}),(0,n.jsx)(s.td,{children:"The status of the subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"The subscriber ID for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberType"}),(0,n.jsxs)(s.td,{children:["The type of subscriber (it will be ",(0,n.jsx)(s.code,{children:"ExactTarget"}),")"]}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"AddMethod"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"API"}),"\n",(0,n.jsx)(s.li,{children:"Imported"}),"\n",(0,n.jsx)(s.li,{children:"WebApplication"}),"\n",(0,n.jsx)(s.li,{children:"DataExtensionSend"}),"\n",(0,n.jsx)(s.li,{children:"Unknown"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"ListType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Publication List"}),"\n",(0,n.jsx)(s.li,{children:"Suppression List"}),"\n",(0,n.jsx)(s.li,{children:"List"}),"\n",(0,n.jsx)(s.li,{children:"Group"}),"\n",(0,n.jsx)(s.li,{children:"FTAF List"}),"\n",(0,n.jsx)(s.li,{children:"Unknown"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"Status"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"active"}),"\n",(0,n.jsx)(s.li,{children:"held"}),"\n",(0,n.jsx)(s.li,{children:"unsubscribed"}),"\n",(0,n.jsx)(s.li,{children:"bounced"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n listSub.AddedBy\n , listSub.AddMethod\n , listSub.CreatedDate\n , listSub.DateUnsubscribed\n , listSub.EmailAddress\n , listSub.ListID\n , listSub.ListName\n , listSub.ListType\n , listSub.Status\n , listSub.SubscriberID\n , listSub.SubscriberKey\n , listSub.SubscriberType\nFROM _ListSubscribers AS listSub\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_ListSubscribers"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Thanks to having ",(0,n.jsx)(s.code,{children:"ListID"}),", ",(0,n.jsx)(s.code,{children:"ListName"})," and ",(0,n.jsx)(s.code,{children:"ListType"})," fields, it allows you to make sense of the ",(0,n.jsx)(s.code,{children:"ListID"})," field available in all other engagement-based System Data Views."]}),"\n",(0,n.jsxs)(s.li,{children:["This Data View, along with ",(0,n.jsx)(s.a,{href:"#_subscribers",children:(0,n.jsx)(s.code,{children:"_Subscribers"})}),", ",(0,n.jsx)(s.a,{href:"#_enterpriseattribute",children:(0,n.jsx)(s.code,{children:"_EnterpriseAttribute"})})," and ",(0,n.jsx)(s.a,{href:"#_businessunitunsubscribes",children:(0,n.jsx)(s.code,{children:"_BusinessUnitUnsubscribes"})}),", does not have six-month data retention."]}),"\n",(0,n.jsx)(s.li,{children:"You can only query Lists available on the current Business Unit. It's not possible to check Child's List subscription status from the Parent BU. The exception is the All Subscribers list that is shared across all Business Units."}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"mobile-connect-data-views",children:"Mobile Connect Data Views"}),"\n",(0,n.jsxs)(s.p,{children:["Learn more about Mobile Connect ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-mobile-connect-data-views",children:"SMS Data Views here"}),"."]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"journey-data-views",children:"Journey Data Views"}),"\n",(0,n.jsx)(s.h3,{id:"_journey",children:"_Journey"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about your Journeys for when context matters."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"VersionID"}),(0,n.jsx)(s.td,{children:"The unique identifier for the version of the Journey"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyID"}),(0,n.jsx)(s.td,{children:"The unique identifier for the Journey. There are one or more VersionID's associated to a JourneyID."}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyName"}),(0,n.jsx)(s.td,{children:"The name of the Journey"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"VersionNumber"}),(0,n.jsx)(s.td,{children:"The version number of the version of the Journey"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"CreatedDate"}),(0,n.jsx)(s.td,{children:"The date that the version of the Journey was created"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"LastPublishedDate"}),(0,n.jsx)(s.td,{children:"The date that the version of the Journey was last published"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ModifiedDate"}),(0,n.jsx)(s.td,{children:"The date that the version of the Journey was last edited"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyStatus"}),(0,n.jsx)(s.td,{children:"The current running mode of the Journey"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"JourneyStatus"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Draft"}),"\n",(0,n.jsx)(s.li,{children:"Running"}),"\n",(0,n.jsx)(s.li,{children:"Finishing"}),"\n",(0,n.jsx)(s.li,{children:"Stopped"}),"\n",(0,n.jsx)(s.li,{children:"Deleted"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n journey.VersionID\n , journey.JourneyID\n , journey.JourneyName\n , journey.VersionNumber\n , journey.CreatedDate\n , journey.LastPublishedDate\n , journey.ModifiedDate\n , journey.JourneyStatus\nFROM _Journey AS journey\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_Journey"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"VersionID"})," field is perfect to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," with ",(0,n.jsx)(s.a,{href:"#_journeyactivity",children:(0,n.jsx)(s.code,{children:"_JourneyActivity"})}),". It lets you map multi-channel engagement to a particular Journey (visible in ",(0,n.jsx)(s.code,{children:"JourneyName"}),") and its specific version (as shown in ",(0,n.jsx)(s.code,{children:"VersionNumber"}),")."]}),"\n",(0,n.jsxs)(s.li,{children:["You can also connect it to SMS channel using ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_smsmessagetracking",children:"_SMSMessageTracking"})," Data View by making a ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," ",(0,n.jsx)(s.code,{children:"ON journey.VersionID = smsTracking.JBDefinitionID"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Use ",(0,n.jsx)(s.code,{children:"JourneyStatus"})," to check what is the current Journey Status. It is fantastic for both the ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," statement and a data point for engagement analysis. Think about scheduled Automation that finds all emails performing below expectations and checks which are in the Active Journeys. For all found, it sends you a notification to check and improve. For awful results, you can even use this data in Script Activity to automatically stop the Journey with the SFMC REST API."]}),"\n",(0,n.jsxs)(s.li,{children:["The Date fields (",(0,n.jsx)(s.code,{children:"CreatedDate"}),", ",(0,n.jsx)(s.code,{children:"LastPublishedDate"}),", ",(0,n.jsx)(s.code,{children:"ModifiedDate"}),") are cool for automated cleanup of old Journeys, especially when paired with the ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})})," data. For example, you can create monthly Automation that checks all Journeys that were last modified at least three months ago and, based on the send volume or performance, stop them and notify you about that."]}),"\n",(0,n.jsx)(s.li,{children:"You can query only Journeys that currently exists in your Business Unit."}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_Journey"})," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," and other data from all Business Units, but this is not the case with ",(0,n.jsx)(s.code,{children:"_Journey"}),". You can query only those Journeys that were created in the Business Unit where you execute your SQL snippet."]}),(0,n.jsxs)(s.p,{children:["Always consider this when choosing Business Unit to execute the query and the type of ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," statement."]})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"_journeyactivity",children:"_JourneyActivity"}),"\n",(0,n.jsx)(s.p,{children:"Stores information about Activities available in your Journeys. Must-have for joining Email data with Journey data."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"VersionID"}),(0,n.jsx)(s.td,{children:"The unique identifier for the version of the Journey"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityID"}),(0,n.jsx)(s.td,{children:"The unique identifier for the activity. There are one or more ActivityID's associated to a VersionID."}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityName"}),(0,n.jsx)(s.td,{children:"The name of the activity"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityExternalKey"}),(0,n.jsx)(s.td,{children:"The external key associated with the activity"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyActivityObjectID"}),(0,n.jsx)(s.td,{children:"Use this unique identifier to join to email tracking system Data Views to identify a Journey email's Triggered Send Definition."}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityType"}),(0,n.jsx)(s.td,{children:"The type of activity"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"ActivityType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"null"})}),"\n",(0,n.jsx)(s.li,{children:"APIEvent"}),"\n",(0,n.jsx)(s.li,{children:"Audience"}),"\n",(0,n.jsx)(s.li,{children:"AutomationAudience"}),"\n",(0,n.jsx)(s.li,{children:"CloudPagesSmartCaptureSubmissionEvent"}),"\n",(0,n.jsx)(s.li,{children:"ContactEvent"}),"\n",(0,n.jsx)(s.li,{children:"EMAILAUDIENCE"}),"\n",(0,n.jsx)(s.li,{children:"EMAILV2"}),"\n",(0,n.jsx)(s.li,{children:"ENGAGEMENTDECISION"}),"\n",(0,n.jsx)(s.li,{children:"Event"}),"\n",(0,n.jsx)(s.li,{children:"ExitCriteria"}),"\n",(0,n.jsx)(s.li,{children:"MULTICRITERIADECISION"}),"\n",(0,n.jsx)(s.li,{children:"NOOP"}),"\n",(0,n.jsx)(s.li,{children:"PUSHNOTIFICATIONACTIVITY"}),"\n",(0,n.jsx)(s.li,{children:"RANDOMSPLIT"}),"\n",(0,n.jsx)(s.li,{children:"SENDTOLINESYNC"}),"\n",(0,n.jsx)(s.li,{children:"StartActivity"}),"\n",(0,n.jsx)(s.li,{children:"STOWAIT"}),"\n",(0,n.jsx)(s.li,{children:"transactional-api"}),"\n",(0,n.jsx)(s.li,{children:"UPDATECONTACTDATA"}),"\n",(0,n.jsx)(s.li,{children:"WAIT"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n journeyActivity.VersionID\n , journeyActivity.ActivityID\n , journeyActivity.ActivityName\n , journeyActivity.ActivityExternalKey\n , journeyActivity.JourneyActivityObjectID\n , journeyActivity.ActivityType\nFROM _JourneyActivity AS journeyActivity\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_JourneyActivity"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["There are two key fields here: ",(0,n.jsx)(s.code,{children:"VersionID"})," and ",(0,n.jsx)(s.code,{children:"JourneyActivityObjectID"}),". ",(0,n.jsx)(s.code,{children:"JourneyActivityObjectID"})," lets you match Journey Activity with specific Email Send. Use ",(0,n.jsx)(s.code,{children:"TriggererSendDefinitionObjectID"})," available on either ",(0,n.jsx)(s.a,{href:"#_job",children:(0,n.jsx)(s.code,{children:"_Job"})}),", ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsxs)(s.a,{href:"#_click",children:[(0,n.jsx)(s.code,{children:"_Click"})," "]})," or ",(0,n.jsx)(s.a,{href:"#_bounce",children:(0,n.jsx)(s.code,{children:"_Bounce"})})," Data View. It is handy when you later use the ",(0,n.jsx)(s.code,{children:"VersionID"})," field to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," ",(0,n.jsx)(s.a,{href:"#_journey",children:(0,n.jsx)(s.code,{children:"_Journey"})})," Data View and with this connect specific Email engagement with particular Journey and its exact version. Fantastic for full scope reporting."]}),"\n",(0,n.jsxs)(s.li,{children:["You can also connect it to SMS channel using ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_smsmessagetracking",children:"_SMSMessageTracking"})," Data View by making a ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," ",(0,n.jsx)(s.code,{children:"ON journeyActivity.ActivityID = smsTracking.JBActivityID"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["With the help of ",(0,n.jsx)(s.a,{href:"#_journey",children:(0,n.jsx)(s.code,{children:"_Journey"})})," Data View, you can use the ",(0,n.jsx)(s.code,{children:"ActivityType"})," field for an excellent little report created with SQL that will show which Journeys use which channels and what types of logic. For a more in-depth understanding of what happens in Journey, you need to use Script Activity with REST API instead, but SQL is perfect for glancing at the multi-channel use."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"_JourneyActivity"})," Data View holds data about activities from deleted Journeys and Journey Versions, so if you want to see only activities currently in use, ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," ",(0,n.jsx)(s.a,{href:"#_journey",children:(0,n.jsx)(s.code,{children:"_Journey"})})," Data View."]}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_JourneyActivity"})," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," and other data from all Business Units, but this is not the case with ",(0,n.jsx)(s.code,{children:"_JourneyActivity"}),". You can query only those Journey Activities that were created in the Business Unit where you execute your SQL snippet."]}),(0,n.jsxs)(s.p,{children:["Always consider this when choosing Business Unit to execute the query and the type of ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," statement."]})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"automation-data-views",children:"Automation Data Views"}),"\n",(0,n.jsx)(s.h3,{id:"_automationinstance",children:"_AutomationInstance"}),"\n",(0,n.jsx)(s.p,{children:"Provides historical information about Automation runs."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"MemberID"}),(0,n.jsx)(s.td,{children:"The Account ID for the Business Unit"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationName"}),(0,n.jsx)(s.td,{children:"The name of the automation"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationDescription"}),(0,n.jsx)(s.td,{children:"The description of the automation"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationCustomerKey"}),(0,n.jsx)(s.td,{children:"The unique ID of the automation"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceID"}),(0,n.jsx)(s.td,{children:"The unique ID of the specific automation run"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationType"}),(0,n.jsx)(s.td,{children:"The type of starting source used in automation"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationNotificationRecipient_Complete"}),(0,n.jsx)(s.td,{children:"Email(s) receiving notification about completed runs"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationNotificationRecipient_Error"}),(0,n.jsx)(s.td,{children:"Email(s) receiving notification about errored runs"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationNotificationRecipient_Skip"}),(0,n.jsx)(s.td,{children:"Email(s) receiving notification about skipped runs"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationStepCount"}),(0,n.jsx)(s.td,{children:"The number of steps in the automation"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceIsRunOnce"}),(0,n.jsx)(s.td,{children:"Was this specific automation run executed with Run Once? 1 for true, 0 for false in File Drop and Triggered automations. Null in Schedule automations"}),(0,n.jsx)(s.td,{children:"Boolean"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"FilenameFromTrigger"}),(0,n.jsx)(s.td,{children:"Name of the file that triggered the automation for Triggered and File Drop automations. Null for Schedule automations"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceScheduledTime_UTC"}),(0,n.jsx)(s.td,{children:"Starting schedule datetime in UTC timezone for Schedule automations. Null for Triggered and File Drop automation"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceStartTime_UTC"}),(0,n.jsx)(s.td,{children:"Automation run start datetime in UTC timezone. Null if run is skipped"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceEndTime_UTC"}),(0,n.jsx)(s.td,{children:"Automation run end datetime in UTC timezone. Null if run is skipped or still running"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceStatus"}),(0,n.jsx)(s.td,{children:"The status of the automation run at the time of querying"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceActivityErrorDetails"}),(0,n.jsx)(s.td,{children:"The first error message encountered in the automation run"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"AutomationType"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Schedule"}),"\n",(0,n.jsx)(s.li,{children:"File Drop"}),"\n",(0,n.jsx)(s.li,{children:"Trigger"}),"\n"]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"AutomationInstanceStatus"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"QueuedFile"}),"\n",(0,n.jsx)(s.li,{children:"Initialized"}),"\n",(0,n.jsx)(s.li,{children:"Executing"}),"\n",(0,n.jsx)(s.li,{children:"Stopped"}),"\n",(0,n.jsx)(s.li,{children:"Complete"}),"\n",(0,n.jsx)(s.li,{children:"Error"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n automation.MemberID\n , automation.AutomationName\n , automation.AutomationDescription\n , automation.AutomationCustomerKey\n , automation.AutomationInstanceID\n , automation.AutomationType\n , automation.AutomationNotificationRecipient_Complete\n , automation.AutomationNotificationRecipient_Error\n , automation.AutomationNotificationRecipient_Skip\n , automation.AutomationStepCount\n , automation.AutomationInstanceIsRunOnce\n , automation.FilenameFromTrigger\n , automation.AutomationInstanceScheduledTime_UTC\n , automation.AutomationInstanceStartTime_UTC\n , automation.AutomationInstanceEndTime_UTC\n , automation.AutomationInstanceStatus\n , automation.AutomationInstanceActivityErrorDetails\nFROM _AutomationInstance AS automation\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_AutomationInstance"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["This data view stores all Automation ",(0,n.jsx)(s.strong,{children:"runs"}),", so you will see here separte row for each execution of the Automation. This is great basic audit tool for logging changes to the automation as well as a nice way to counting the amount of automation executions against licence limits."]}),"\n",(0,n.jsxs)(s.li,{children:["Key limitation of ",(0,n.jsx)(s.code,{children:"_AutomationInstance"})," is that it shows data with 24 hours delay. If you need real-time information about Automation Studio status, you will still need an API approach. But for not that urget use cases this new option will be much more performant."]}),"\n",(0,n.jsxs)(s.li,{children:["If automation run errored out due to system or unclassified error, ",(0,n.jsx)(s.code,{children:"AutomationInstanceActivityErrorDetails"}),' will show "System Error occurred. Please contact support for details.". In other cases it will store the first error message. If there are more and you want to find them, you will need to leverage ',(0,n.jsx)(s.a,{href:"#_AutomationActivityInstance",children:(0,n.jsx)(s.code,{children:"_AutomationActivityInstance"})})," Data View."]}),"\n",(0,n.jsxs)(s.li,{children:["All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions",children:"SQL Date Functions"})," it might be best to use ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate",children:(0,n.jsx)(s.code,{children:"GETUTCDATE()"})})," instead of system date from ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate",children:(0,n.jsx)(s.code,{children:"GETDATE()"})}),"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"AutomationInstanceID"})," field is perfect to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," with ",(0,n.jsx)(s.a,{href:"#_AutomationActivityInstance",children:(0,n.jsx)(s.code,{children:"_AutomationActivityInstance"})}),". It lets you find information about execution of each activity within the Automation in the specific run."]}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_AutomationInstance"})," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," and other data from all Business Units, but this is not the case with ",(0,n.jsx)(s.code,{children:"_AutomationInstance"}),". You can query only those Automtion runs that were executed in the Business Unit where you execute your SQL snippet."]}),(0,n.jsxs)(s.p,{children:["Always consider this when choosing Business Unit to execute the query and the type of ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," statement."]})]}),"\n",(0,n.jsx)(s.h3,{id:"_automationactivityinstance",children:"_AutomationActivityInstance"}),"\n",(0,n.jsx)(s.p,{children:"Provides historical information about Automation Studio Activity runs."}),"\n",(0,n.jsxs)(r.Z,{defaultValue:"fields",values:[{label:"Fields",value:"fields"},{label:"Field Picklist Values",value:"values"},{label:"SQL Query",value:"sql"}],children:[(0,n.jsx)(d.Z,{value:"fields",children:(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"MemberID"}),(0,n.jsx)(s.td,{children:"The Account ID for the Business Unit"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationName"}),(0,n.jsx)(s.td,{children:"The name of the automation"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationCustomerKey"}),(0,n.jsx)(s.td,{children:"The unique ID of the automation"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"AutomationInstanceID"}),(0,n.jsx)(s.td,{children:"The unique ID of the specific automation run"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityCustomerKey"}),(0,n.jsx)(s.td,{children:"The unique ID of the activity"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityInstanceID"}),(0,n.jsx)(s.td,{children:"The unique ID of the specific activity execution"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityType"}),(0,n.jsx)(s.td,{children:"The type of the activity (numeric ID)"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityName"}),(0,n.jsx)(s.td,{children:"The name of the activity"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityDescription"}),(0,n.jsx)(s.td,{children:"The description of the activity"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityInstanceStep"}),(0,n.jsx)(s.td,{children:"The two-dimensional description where in automation the activity is located"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityInstanceStartTime_UTC"}),(0,n.jsx)(s.td,{children:"Activity execution start datetime in UTC timezone. Null if run is skipped"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityInstanceEndTime_UTC"}),(0,n.jsx)(s.td,{children:"Activity execution end datetime in UTC timezone. Null if run is skipped or still running"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"X"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityInstanceStatus"}),(0,n.jsx)(s.td,{children:"The status of the activity run at the time of querying"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ActivityInstanceStatusDetails"}),(0,n.jsx)(s.td,{children:"The error message encountered in the activity execution"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{children:"X"})]})]})]})}),(0,n.jsxs)(d.Z,{value:"values",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"ActivityType"})," possible values:"]}),(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Value"}),(0,n.jsx)(s.th,{children:"Meaning"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"33"}),(0,n.jsx)(s.td,{children:"SMS Activity"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"42"}),(0,n.jsx)(s.td,{children:"Send Email"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"43"}),(0,n.jsx)(s.td,{children:"Import File"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"45"}),(0,n.jsx)(s.td,{children:"Refresh Group"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"53"}),(0,n.jsx)(s.td,{children:"File Transfer"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"73"}),(0,n.jsx)(s.td,{children:"Data Extract"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"84"}),(0,n.jsx)(s.td,{children:"Report Definition"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"300"}),(0,n.jsx)(s.td,{children:"SQL Query"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"303"}),(0,n.jsx)(s.td,{children:"Filter"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"423"}),(0,n.jsx)(s.td,{children:"Script"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"425"}),(0,n.jsx)(s.td,{children:"Data Factory Utility Activity"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"426"}),(0,n.jsx)(s.td,{children:"Refresh Segment Template"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"427"}),(0,n.jsx)(s.td,{children:"Publish Audience"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"467"}),(0,n.jsx)(s.td,{children:"Wait"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"724"}),(0,n.jsx)(s.td,{children:"Refresh Mobile Filtered List"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"725"}),(0,n.jsx)(s.td,{children:"Send SMS"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"726"}),(0,n.jsx)(s.td,{children:"Import Mobile Contacts"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"733"}),(0,n.jsx)(s.td,{children:"Journey Builder Event Activity"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"736"}),(0,n.jsx)(s.td,{children:"Send Push"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"749"}),(0,n.jsx)(s.td,{children:"Fire Event"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"771"}),(0,n.jsx)(s.td,{children:"Salesforce Email Send"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"772"}),(0,n.jsx)(s.td,{children:"Mobile Connect Send Salesforce Sync Subscriber"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"783"}),(0,n.jsx)(s.td,{children:"Send GroupConnect"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1000"}),(0,n.jsx)(s.td,{children:"Verification"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1010"}),(0,n.jsx)(s.td,{children:"Interaction Studio Data"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1101"}),(0,n.jsx)(s.td,{children:"Interactions"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1701"}),(0,n.jsx)(s.td,{children:"Batch Personalization"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"3700"}),(0,n.jsx)(s.td,{children:"Contact to Business Unit Mapping"})]})]})]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"ActivityInstanceStatus"})," possible values:"]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Initialized"}),"\n",(0,n.jsx)(s.li,{children:"Executing"}),"\n",(0,n.jsx)(s.li,{children:"Complete"}),"\n",(0,n.jsx)(s.li,{children:"Error"}),"\n",(0,n.jsx)(s.li,{children:"NotSelected"}),"\n"]}),(0,n.jsx)(s.hr,{})]}),(0,n.jsx)(d.Z,{value:"sql",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n automationActivity.MemberID\n , automationActivity.AutomationName\n , automationActivity.AutomationCustomerKey\n , automationActivity.AutomationInstanceID\n , automationActivity.ActivityCustomerKey\n , automationActivity.ActivityInstanceID\n , automationActivity.ActivityType\n , automationActivity.ActivityName\n , automationActivity.ActivityDescription\n , automationActivity.ActivityInstanceStep\n , automationActivity.ActivityInstanceStartTime_UTC\n , automationActivity.ActivityInstanceEndTime_UTC\n , automationActivity.ActivityInstanceStatus\n , automationActivity.ActivityInstanceStatusDetails\nFROM _AutomationActivityInstance AS automationActivity\n"})})})]}),"\n",(0,n.jsxs)(s.p,{children:["When working with ",(0,n.jsx)(s.code,{children:"_AutomationActivityInstance"})," Data View:"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["This data view stores all Automation Activity ",(0,n.jsx)(s.strong,{children:"runs"}),", so you will see here separte row for each execution of each Activity. It is awesome tool for checking how optimised our Activities are and what errors are troubling our Automations."]}),"\n",(0,n.jsxs)(s.li,{children:["Key limitation of ",(0,n.jsx)(s.code,{children:"_AutomationActivityInstance"})," is that it shows data with 24 hours delay."]}),"\n",(0,n.jsxs)(s.li,{children:["If activity run errored out due to system or unclassified error, ",(0,n.jsx)(s.code,{children:"ActivityInstanceStatusDetails"}),' will show "System Error occurred. Please contact support for details.". In other cases it will store the error message.']}),"\n",(0,n.jsxs)(s.li,{children:["All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions",children:"SQL Date Functions"})," it might be best to use ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate",children:(0,n.jsx)(s.code,{children:"GETUTCDATE()"})})," instead of system date from ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate",children:(0,n.jsx)(s.code,{children:"GETDATE()"})}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["The start and end dates in this data view can be leveraged with ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#datediff",children:(0,n.jsx)(s.code,{children:"DATEDIFF"})})," and ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#avg",children:(0,n.jsx)(s.code,{children:"AVG"})})," to calculate average time needed for each activity to finish. This information is crucial to assess whether the current automation Schedule is correct and where the optimisation efforts are required to protect against 30 minutes autokill."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"AutomationInstanceID"})," field is perfect to ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," with ",(0,n.jsx)(s.a,{href:"#_AutomationInstance",children:(0,n.jsx)(s.code,{children:"_AutomationInstance"})}),". It lets you find information about the Automation using this Activity."]}),"\n"]}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"_AutomationActivityInstance"})," Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to ",(0,n.jsx)(s.a,{href:"#_sent",children:(0,n.jsx)(s.code,{children:"_Sent"})}),", ",(0,n.jsx)(s.a,{href:"#_open",children:(0,n.jsx)(s.code,{children:"_Open"})}),", ",(0,n.jsx)(s.a,{href:"#_click",children:(0,n.jsx)(s.code,{children:"_Click"})})," and other data from all Business Units, but this is not the case with ",(0,n.jsx)(s.code,{children:"_AutomationActivityInstance"}),". You can query only those Automation Activities that were created in the Business Unit where you execute your SQL snippet."]}),(0,n.jsxs)(s.p,{children:["Always consider this when choosing Business Unit to execute the query and the type of ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:(0,n.jsx)(s.code,{children:"JOIN"})})," statement."]})]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h2,{id:"custom-data-views",children:"Custom Data Views"}),"\n",(0,n.jsxs)(s.p,{children:["On top of all the built-in Data Views mentioned above, there is also a paid option for custom Data Views. As for the possibilities, the sky is the limit. Example? ",(0,n.jsx)(s.a,{href:"https://linkedin.com/in/lunow",children:"Lukas Lunow"})," ",(0,n.jsx)(s.a,{href:"https://salesforce.stackexchange.com/a/293395/91679",children:"highlighted"})," a fascinating one that solves the problem of knowing what is the current status of a Contact in a given Journey:"]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:["As ",(0,n.jsx)(s.a,{href:"https://salesforce.stackexchange.com/a/293395/91679",children:"shared"})," by Lukas, since May 2021, there is longer no possibility to create Custom Data Views leveraging the Journey Builder."]})}),"\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:"Name"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Data Type"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyVersionNumber"}),(0,n.jsx)(s.td,{children:"The version number of the version of the Journey"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyName"}),(0,n.jsx)(s.td,{children:"The name of the Journey"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyStatus"}),(0,n.jsx)(s.td,{children:"Tells you whether the Journey is still Active"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ContactKey"}),(0,n.jsx)(s.td,{children:"The subscriber key for the affected subscriber"}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ContactID"}),(0,n.jsx)(s.td,{children:"Global Contact ID (not Contact Key)"}),(0,n.jsx)(s.td,{children:"Number"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ContactStatus"}),(0,n.jsxs)(s.td,{children:["Tell you whether the contact is still in the Journey (",(0,n.jsx)(s.code,{children:"Active"}),", ",(0,n.jsx)(s.code,{children:"Exited"})," or even more detailed like ",(0,n.jsx)(s.code,{children:"DidNotMeetEntryCriteria"}),", ",(0,n.jsx)(s.code,{children:"ContactExitedByAPI"}),")"]}),(0,n.jsx)(s.td,{children:"Text"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EntryDate"}),(0,n.jsx)(s.td,{children:"Date of Journey Entry"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ExitDate"}),(0,n.jsx)(s.td,{children:"Date of Journey Exit - including Goal / Exit Criteria. Null if still in Journey."}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{children:"x"})]})]})]}),"\n",(0,n.jsx)(s.p,{children:"Yes, you can create a workaround to know whether the Contact is in a given Journey using standard Data Extension and Update Contact Journey Activities at the beginning and end of every Journey. Not only it requires you to remember always to add those additional steps. It also blocks you from using Goals and Exit Criteria."}),"\n",(0,n.jsx)(s.p,{children:"Custom Data View allow you to eat a cookie and have a cookie."}),"\n",(0,n.jsx)(s.p,{children:"You can certainly come up with other use cases that could be solved if only you had one additional data point. Now you can."})]})}function b(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(j,{...e})}):j(e)}},425:(e,s,i)=>{i.d(s,{Z:()=>d});i(7294);var n=i(512);const t={tabItem:"tabItem_Ymn6"};var r=i(5893);function d(e){let{children:s,hidden:i,className:d}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.Z)(t.tabItem,d),hidden:i,children:s})}},3992:(e,s,i)=>{i.d(s,{Z:()=>v});var n=i(7294),t=i(512),r=i(2957),d=i(6550),c=i(1270),l=i(5238),h=i(3609),a=i(2560);function o(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:i}=e;return(0,n.useMemo)((()=>{const e=s??function(e){return o(e).map((e=>{let{props:{value:s,label:i,attributes:n,default:t}}=e;return{value:s,label:i,attributes:n,default:t}}))}(i);return function(e){const s=(0,h.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,i])}function x(e){let{value:s,tabValues:i}=e;return i.some((e=>e.value===s))}function j(e){let{queryString:s=!1,groupId:i}=e;const t=(0,d.k6)(),r=function(e){let{queryString:s=!1,groupId:i}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!i)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:s,groupId:i});return[(0,l._X)(r),(0,n.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function b(e){const{defaultValue:s,queryString:i=!1,groupId:t}=e,r=u(e),[d,l]=(0,n.useState)((()=>function(e){let{defaultValue:s,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(s){if(!x({value:s,tabValues:i}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const n=i.find((e=>e.default))??i[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:s,tabValues:r}))),[h,o]=j({queryString:i,groupId:t}),[b,m]=function(e){let{groupId:s}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,a.Nk)(i);return[t,(0,n.useCallback)((e=>{i&&r.set(e)}),[i,r])]}({groupId:t}),f=(()=>{const e=h??b;return x({value:e,tabValues:r})?e:null})();(0,c.Z)((()=>{f&&l(f)}),[f]);return{selectedValue:d,selectValue:(0,n.useCallback)((e=>{if(!x({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),o(e),m(e)}),[o,m,r]),tabValues:r}}var m=i(1048);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var p=i(5893);function y(e){let{className:s,block:i,selectedValue:n,selectValue:d,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:h}=(0,r.o5)(),a=e=>{const s=e.currentTarget,i=l.indexOf(s),t=c[i].value;t!==n&&(h(s),d(t))},o=e=>{let s=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const i=l.indexOf(e.currentTarget)+1;s=l[i]??l[0];break}case"ArrowLeft":{const i=l.indexOf(e.currentTarget)-1;s=l[i]??l[l.length-1];break}}s?.focus()};return(0,p.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":i},s),children:c.map((e=>{let{value:s,label:i,attributes:r}=e;return(0,p.jsx)("li",{role:"tab",tabIndex:n===s?0:-1,"aria-selected":n===s,ref:e=>l.push(e),onKeyDown:o,onClick:a,...r,className:(0,t.Z)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":n===s}),children:i??s},s)}))})}function g(e){let{lazy:s,children:i,selectedValue:t}=e;const r=(Array.isArray(i)?i:[i]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===t));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,p.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,n.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function D(e){const s=b(e);return(0,p.jsxs)("div",{className:(0,t.Z)("tabs-container",f.tabList),children:[(0,p.jsx)(y,{...e,...s}),(0,p.jsx)(g,{...e,...s})]})}function v(e){const s=(0,m.Z)();return(0,p.jsx)(D,{...e,children:o(e.children)},String(s))}},7271:(e,s,i)=>{i.d(s,{V:()=>r,z:()=>t});i(7294);var n=i(5893);const t=e=>{let{link:s,text:i,newTab:t=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:s,target:t?"_blank":"_self",children:i})})},r=e=>{let{linkLeft:s,textLeft:i,newTabLeft:t=!1,linkRight:r,textRight:d,newTabRight:c=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsxs)("div",{class:"col col--12",children:[(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:s,target:t?"_blank":"_self",children:i}),(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:r,target:c?"_blank":"_self",children:d})]})})}},1872:(e,s,i)=>{i.d(s,{m:()=>r});i(7294);const n="leadText_qzwo";var t=i(5893);const r=e=>{let{content:s}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("p",{id:n,children:s})})}},1151:(e,s,i)=>{i.d(s,{Z:()=>c,a:()=>d});var n=i(7294);const t={},r=n.createContext(t);function d(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/81e44c7d.eef205bf.js b/assets/js/81e44c7d.4bc6f105.js similarity index 99% rename from assets/js/81e44c7d.eef205bf.js rename to assets/js/81e44c7d.4bc6f105.js index 1149eef08..80a80c570 100644 --- a/assets/js/81e44c7d.eef205bf.js +++ b/assets/js/81e44c7d.4bc6f105.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5590],{2136:s=>{s.exports=JSON.parse('{"label":"SSJS","permalink":"/docs/tags/ssjs","allTagsPath":"/docs/tags","count":13,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","permalink":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"},{"id":"ssjs/ssjs-if-and-switch","title":"SSJS If & Switch","description":"Deep dive into the two pillars of SSJS flow control.","permalink":"/docs/ssjs/ssjs-if-and-switch"},{"id":"ssjs/ssjs-loops","title":"SSJS Loops","description":"Let\'s dive into limited looping options of the SSJS.","permalink":"/docs/ssjs/ssjs-loops"},{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","permalink":"/docs/ssjs/snippets/ssjs-script-template"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"},{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5590],{2136:s=>{s.exports=JSON.parse('{"label":"SSJS","permalink":"/docs/tags/ssjs","allTagsPath":"/docs/tags","count":13,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","permalink":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"},{"id":"ssjs/ssjs-if-and-switch","title":"SSJS If & Switch","description":"Deep dive into the two pillars of SSJS flow control.","permalink":"/docs/ssjs/ssjs-if-and-switch"},{"id":"ssjs/ssjs-loops","title":"SSJS Loops","description":"Let\'s dive into limited looping options of the SSJS.","permalink":"/docs/ssjs/ssjs-loops"},{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","permalink":"/docs/ssjs/snippets/ssjs-script-template"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"},{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/81fb7942.0b5c08e5.js b/assets/js/81fb7942.0b5c08e5.js deleted file mode 100644 index dc3e5a5e8..000000000 --- a/assets/js/81fb7942.0b5c08e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1918],{4137:(e,t,o)=>{o.d(t,{Zo:()=>h,kt:()=>f});var a=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function s(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?n(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function i(e,t){if(null==e)return{};var o,a,r=function(e,t){if(null==e)return{};var o,a,r={},n=Object.keys(e);for(a=0;a<n.length;a++)o=n[a],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)o=n[a],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},h=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,h=i(e,["components","mdxType","originalType","parentName"]),u=c(o),d=r,f=u["".concat(l,".").concat(d)]||u[d]||p[d]||n;return o?a.createElement(f,s(s({ref:t},h),{},{components:o})):a.createElement(f,s({ref:t},h))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,s=new Array(n);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:r,s[1]=i;for(var c=2;c<n;c++)s[c]=o[c];return a.createElement.apply(null,s)}return a.createElement.apply(null,o)}d.displayName="MDXCreateElement"},6985:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var a=o(7462),r=(o(7294),o(4137)),n=o(1872);const s={id:"how-to-get-sfmc-hands-on-experience",title:"How to get hands-on experience with SFMC",sidebar_label:"SFMC Hands-on Experience",description:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",image:"img/og/og-image-faq-sfmc-hands-on-experience.png",tags:["Marketing Cloud","FAQ"]},i=void 0,l={unversionedId:"faq/how-to-get-sfmc-hands-on-experience",id:"faq/how-to-get-sfmc-hands-on-experience",title:"How to get hands-on experience with SFMC",description:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",source:"@site/sites/faq/how-to-get-sfmc-hands-on-experience.mdx",sourceDirName:"faq",slug:"/faq/how-to-get-sfmc-hands-on-experience",permalink:"/sites/faq/how-to-get-sfmc-hands-on-experience",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/faq/how-to-get-sfmc-hands-on-experience.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"FAQ",permalink:"/sites/tags/faq"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1698185096,formattedLastUpdatedAt:"Oct 24, 2023",frontMatter:{id:"how-to-get-sfmc-hands-on-experience",title:"How to get hands-on experience with SFMC",sidebar_label:"SFMC Hands-on Experience",description:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",image:"img/og/og-image-faq-sfmc-hands-on-experience.png",tags:["Marketing Cloud","FAQ"]},sidebar:"faq",previous:{title:"FAQ",permalink:"/sites/category/faq"},next:{title:"SF Certification Vouchers",permalink:"/sites/faq/how-to-get-sf-certification-vouchers"}},c={},h=[{value:"Access through your company",id:"access-through-your-company",level:2},{value:"1. Any company that bought Salesforce Marketing Cloud",id:"1-any-company-that-bought-salesforce-marketing-cloud",level:3},{value:"2. Salesforce Marketing Cloud Consulting Partner",id:"2-salesforce-marketing-cloud-consulting-partner",level:3},{value:"3. Salesforce Marketing Cloud ISV Partner",id:"3-salesforce-marketing-cloud-isv-partner",level:3},{value:"Access through Mentor",id:"access-through-mentor",level:2},{value:"Access through Trailhead Academy",id:"access-through-trailhead-academy",level:2},{value:"Access through SuperMums",id:"access-through-supermums",level:2},{value:"Access through Trailblazer Community",id:"access-through-trailblazer-community",level:2},{value:"Access through HandsOnSFMC",id:"access-through-handsonsfmc",level:2},{value:"Limited access through MCSnippets",id:"limited-access-through-mcsnippets",level:2},{value:"What else for beginners?",id:"what-else-for-beginners",level:2}],u={toc:h},p="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(p,(0,a.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(n.m,{content:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",mdxType:"LeadText"}),(0,r.kt)("p",null,"With more and more people looking to learn about Salesforce Marketing Cloud, there are recurring questions about how to get a real-life experience with the platform. For Salesforce CRM, it is incredibly user-friendly through Trailhead Playgrounds and full Dev Orgs. Salesforce Marketing Cloud, unfortunately, doesn't have such options. About a decade ago, there was a brief moment when Developer Edition accounts for Salesforce Marketing Cloud were available, but now it is much more complicated. Let's talk options."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There is an ",(0,r.kt)("a",{parentName:"p",href:"https://ideas.salesforce.com/s/idea/a0B8W00000GdgUZUAZ/dev-org-for-salesforce-marketing-cloud"},"idea to bring SFMC Dev Orgs back"),", and while I encourage voting on it, don't have high hopes.")),(0,r.kt)("h2",{id:"access-through-your-company"},"Access through your company"),(0,r.kt)("p",null,"This is probably not the answer you are looking for, but the easiest way to get hands-on experience with the SFMC is to work for a company using it. There are three scenarios here:"),(0,r.kt)("h3",{id:"1-any-company-that-bought-salesforce-marketing-cloud"},"1. Any company that bought Salesforce Marketing Cloud"),(0,r.kt)("p",null,"This one is straightforward. If the company has a licence, you can try to get access to it to learn and play. However, due to compliance, security and user licence limits, it might be hard if you are outside the digital marketing/marketing automation team. An excellent option here is to look for a nonprofit organisation using Marketing Cloud and offer them your support for free. Knowledge for you and tasks done for the Nonprofit. There are also internships available in the ecosystem."),(0,r.kt)("h3",{id:"2-salesforce-marketing-cloud-consulting-partner"},"2. Salesforce Marketing Cloud Consulting Partner"),(0,r.kt)("p",null,"Registered Salesforce Consulting Partners can request a ",(0,r.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=000390865&type=1"},"special non-production account")," for learning, development, testing and demoing. If you work for an SF Partner, they should have that account already. If not - they can request it through Partner Program Support Case. It's a nice account with many SuperMessages, Business Units, User and features like Marketing Cloud Personalization available."),(0,r.kt)("h3",{id:"3-salesforce-marketing-cloud-isv-partner"},"3. Salesforce Marketing Cloud ISV Partner"),(0,r.kt)("p",null,"That ",(0,r.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=000390865&type=1"},"special non-production account")," is also available to Salesforce ISV (Independent Software Vendor) Partners. However, they must prove that they are building a Marketing Cloud AppExchange app to be eligible for one."),(0,r.kt)("h2",{id:"access-through-mentor"},"Access through Mentor"),(0,r.kt)("p",null,"While the official Salesforce Mentorship program is no longer live, there are still people in the ecosystem that offer their mentorship - and in some cases they are able to provide an access to SFMC as well if their company allows that."),(0,r.kt)("h2",{id:"access-through-trailhead-academy"},"Access through Trailhead Academy"),(0,r.kt)("p",null,"In 2023, Salesforce added another - more available but paywalled - option to the Trailhead Academy. It offers a 6-weeks-long ",(0,r.kt)("a",{parentName:"p",href:"https://trailheadacademy.salesforce.com/classes/tvb301-trailblazer-virtual-bootcamp-for-new-marketers"},"Virtual Bootcamp for Salesforce Marketing Cloud")," with hands-on experience on the platform as a part of the course. Multiple languages are available, and the price for the English one is $225 (it varies based on the language, so be sure to check the planned classes for the cost to you)."),(0,r.kt)("h2",{id:"access-through-supermums"},"Access through SuperMums"),(0,r.kt)("p",null,"There is also much pricier, unofficial but fuller option: ",(0,r.kt)("a",{parentName:"p",href:"https://supermums.org/training/salesforce-marketing-cloud-course/"},"SuperMums SFMC Bootcamp"),". For \xa32400 you are getting a 7-weeks live course with 4-weeks access to the platform that hopes to prepare you fully for your first Marketing Cloud job."),(0,r.kt)("h2",{id:"access-through-trailblazer-community"},"Access through Trailblazer Community"),(0,r.kt)("p",null,"If you want something free, some community-driven bootcamps offer temporary access to Salesforce Marketing Cloud for learning purposes. The best group to follow is the ",(0,r.kt)("a",{parentName:"p",href:"https://trailblazercommunitygroups.com/salesforce-marketer-group-marketing-cloud-phoenix-united-states/"},"Salesforce Marketer Group in Pheonix, US")," led by the knowledge-sharing powerhouse ",(0,r.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/jyothsna-bitra"},"Jyothsna Bitra (JB)"),"."),(0,r.kt)("h2",{id:"access-through-handsonsfmc"},"Access through HandsOnSFMC"),(0,r.kt)("p",null,"Last (but definitely not least) full-access option I'm aware of is delivered by the fabulous ",(0,r.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/tim-ziter-92589bb"},"Tim Ziter")," through his ",(0,r.kt)("a",{parentName:"p",href:"https://handsonsfmc.com/contact/"},"knowledge-packed HandsOnSFMC website"),". It's a weekly event focused on building stuff directly on the SFMC platform. Short term access to Marketing Cloud included."),(0,r.kt)("h2",{id:"limited-access-through-mcsnippets"},"Limited access through MCSnippets"),(0,r.kt)("p",null,"Yet another free option is offered by the Salesforce MVP ",(0,r.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/patosapir"},"Pato Sapir"),". This one, however, is not full-blown access to the Marketing Cloud, but rather a set of web apps (",(0,r.kt)("a",{parentName:"p",href:"https://mcsnippets.herokuapp.com"},"MC Snippets for AMPScript and SSJS")," and ",(0,r.kt)("a",{parentName:"p",href:"https://mcsnippets.herokuapp.com/sql"},"MC Snippets for SQL"),") that provides option to write proprietary code on the SFMC Platform. Perfect for polishing your dev skills and preparing for Salesforce Marketing Cloud Developer certification."),(0,r.kt)("h2",{id:"what-else-for-beginners"},"What else for beginners?"),(0,r.kt)("p",null,"I'm unaware of any hands-on access options besides those listed above (and I'm all ears if you know some more!). What's left for beginners is read-only learning on Trailhead and watch-only learning on SFMC-focused YouTube Channels. I especially recommend checking out the following:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/@MCLearningCamp"},"Trailblazing Together channel")," packed with Marketing Cloud Bootcamps recordings."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/@CameronRobert"},"Cameron Robert's channel")," full of step-by-step video guides on all things SFMC.")),(0,r.kt)("p",null,"After you grasp the basics, the whole Salesforce Marketing Cloud blogosphere opens for you with its broad knowledge."))}d.isMDXComponent=!0},1872:(e,t,o)=>{o.d(t,{m:()=>n});var a=o(7294);const r="leadText_qzwo",n=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}}}]); \ No newline at end of file diff --git a/assets/js/81fb7942.c6e9c5b4.js b/assets/js/81fb7942.c6e9c5b4.js new file mode 100644 index 000000000..91862b9c0 --- /dev/null +++ b/assets/js/81fb7942.c6e9c5b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1918],{914:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var a=o(5893),n=o(1151),r=o(1872);const s={id:"how-to-get-sfmc-hands-on-experience",title:"How to get hands-on experience with SFMC",sidebar_label:"SFMC Hands-on Experience",description:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",image:"img/og/og-image-faq-sfmc-hands-on-experience.png",tags:["Marketing Cloud","FAQ"]},i=void 0,l={id:"faq/how-to-get-sfmc-hands-on-experience",title:"How to get hands-on experience with SFMC",description:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",source:"@site/sites/faq/how-to-get-sfmc-hands-on-experience.mdx",sourceDirName:"faq",slug:"/faq/how-to-get-sfmc-hands-on-experience",permalink:"/sites/faq/how-to-get-sfmc-hands-on-experience",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/faq/how-to-get-sfmc-hands-on-experience.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"FAQ",permalink:"/sites/tags/faq"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1698185096,formattedLastUpdatedAt:"Oct 24, 2023",frontMatter:{id:"how-to-get-sfmc-hands-on-experience",title:"How to get hands-on experience with SFMC",sidebar_label:"SFMC Hands-on Experience",description:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?",image:"img/og/og-image-faq-sfmc-hands-on-experience.png",tags:["Marketing Cloud","FAQ"]},sidebar:"faq",previous:{title:"FAQ",permalink:"/sites/category/faq"},next:{title:"SF Certification Vouchers",permalink:"/sites/faq/how-to-get-sf-certification-vouchers"}},c={},h=[{value:"Access through your company",id:"access-through-your-company",level:2},{value:"1. Any company that bought Salesforce Marketing Cloud",id:"1-any-company-that-bought-salesforce-marketing-cloud",level:3},{value:"2. Salesforce Marketing Cloud Consulting Partner",id:"2-salesforce-marketing-cloud-consulting-partner",level:3},{value:"3. Salesforce Marketing Cloud ISV Partner",id:"3-salesforce-marketing-cloud-isv-partner",level:3},{value:"Access through Mentor",id:"access-through-mentor",level:2},{value:"Access through Trailhead Academy",id:"access-through-trailhead-academy",level:2},{value:"Access through SuperMums",id:"access-through-supermums",level:2},{value:"Access through Trailblazer Community",id:"access-through-trailblazer-community",level:2},{value:"Access through HandsOnSFMC",id:"access-through-handsonsfmc",level:2},{value:"Limited access through MCSnippets",id:"limited-access-through-mcsnippets",level:2},{value:"What else for beginners?",id:"what-else-for-beginners",level:2}];function d(e){const t={a:"a",admonition:"admonition",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.m,{content:"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?"}),"\n",(0,a.jsx)(t.p,{children:"With more and more people looking to learn about Salesforce Marketing Cloud, there are recurring questions about how to get a real-life experience with the platform. For Salesforce CRM, it is incredibly user-friendly through Trailhead Playgrounds and full Dev Orgs. Salesforce Marketing Cloud, unfortunately, doesn't have such options. About a decade ago, there was a brief moment when Developer Edition accounts for Salesforce Marketing Cloud were available, but now it is much more complicated. Let's talk options."}),"\n",(0,a.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,a.jsxs)(t.p,{children:["There is an ",(0,a.jsx)(t.a,{href:"https://ideas.salesforce.com/s/idea/a0B8W00000GdgUZUAZ/dev-org-for-salesforce-marketing-cloud",children:"idea to bring SFMC Dev Orgs back"}),", and while I encourage voting on it, don't have high hopes."]})}),"\n",(0,a.jsx)(t.h2,{id:"access-through-your-company",children:"Access through your company"}),"\n",(0,a.jsx)(t.p,{children:"This is probably not the answer you are looking for, but the easiest way to get hands-on experience with the SFMC is to work for a company using it. There are three scenarios here:"}),"\n",(0,a.jsx)(t.h3,{id:"1-any-company-that-bought-salesforce-marketing-cloud",children:"1. Any company that bought Salesforce Marketing Cloud"}),"\n",(0,a.jsx)(t.p,{children:"This one is straightforward. If the company has a licence, you can try to get access to it to learn and play. However, due to compliance, security and user licence limits, it might be hard if you are outside the digital marketing/marketing automation team. An excellent option here is to look for a nonprofit organisation using Marketing Cloud and offer them your support for free. Knowledge for you and tasks done for the Nonprofit. There are also internships available in the ecosystem."}),"\n",(0,a.jsx)(t.h3,{id:"2-salesforce-marketing-cloud-consulting-partner",children:"2. Salesforce Marketing Cloud Consulting Partner"}),"\n",(0,a.jsxs)(t.p,{children:["Registered Salesforce Consulting Partners can request a ",(0,a.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=000390865&type=1",children:"special non-production account"})," for learning, development, testing and demoing. If you work for an SF Partner, they should have that account already. If not - they can request it through Partner Program Support Case. It's a nice account with many SuperMessages, Business Units, User and features like Marketing Cloud Personalization available."]}),"\n",(0,a.jsx)(t.h3,{id:"3-salesforce-marketing-cloud-isv-partner",children:"3. Salesforce Marketing Cloud ISV Partner"}),"\n",(0,a.jsxs)(t.p,{children:["That ",(0,a.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=000390865&type=1",children:"special non-production account"})," is also available to Salesforce ISV (Independent Software Vendor) Partners. However, they must prove that they are building a Marketing Cloud AppExchange app to be eligible for one."]}),"\n",(0,a.jsx)(t.h2,{id:"access-through-mentor",children:"Access through Mentor"}),"\n",(0,a.jsx)(t.p,{children:"While the official Salesforce Mentorship program is no longer live, there are still people in the ecosystem that offer their mentorship - and in some cases they are able to provide an access to SFMC as well if their company allows that."}),"\n",(0,a.jsx)(t.h2,{id:"access-through-trailhead-academy",children:"Access through Trailhead Academy"}),"\n",(0,a.jsxs)(t.p,{children:["In 2023, Salesforce added another - more available but paywalled - option to the Trailhead Academy. It offers a 6-weeks-long ",(0,a.jsx)(t.a,{href:"https://trailheadacademy.salesforce.com/classes/tvb301-trailblazer-virtual-bootcamp-for-new-marketers",children:"Virtual Bootcamp for Salesforce Marketing Cloud"})," with hands-on experience on the platform as a part of the course. Multiple languages are available, and the price for the English one is $225 (it varies based on the language, so be sure to check the planned classes for the cost to you)."]}),"\n",(0,a.jsx)(t.h2,{id:"access-through-supermums",children:"Access through SuperMums"}),"\n",(0,a.jsxs)(t.p,{children:["There is also much pricier, unofficial but fuller option: ",(0,a.jsx)(t.a,{href:"https://supermums.org/training/salesforce-marketing-cloud-course/",children:"SuperMums SFMC Bootcamp"}),". For \xa32400 you are getting a 7-weeks live course with 4-weeks access to the platform that hopes to prepare you fully for your first Marketing Cloud job."]}),"\n",(0,a.jsx)(t.h2,{id:"access-through-trailblazer-community",children:"Access through Trailblazer Community"}),"\n",(0,a.jsxs)(t.p,{children:["If you want something free, some community-driven bootcamps offer temporary access to Salesforce Marketing Cloud for learning purposes. The best group to follow is the ",(0,a.jsx)(t.a,{href:"https://trailblazercommunitygroups.com/salesforce-marketer-group-marketing-cloud-phoenix-united-states/",children:"Salesforce Marketer Group in Pheonix, US"})," led by the knowledge-sharing powerhouse ",(0,a.jsx)(t.a,{href:"https://www.linkedin.com/in/jyothsna-bitra",children:"Jyothsna Bitra (JB)"}),"."]}),"\n",(0,a.jsx)(t.h2,{id:"access-through-handsonsfmc",children:"Access through HandsOnSFMC"}),"\n",(0,a.jsxs)(t.p,{children:["Last (but definitely not least) full-access option I'm aware of is delivered by the fabulous ",(0,a.jsx)(t.a,{href:"https://www.linkedin.com/in/tim-ziter-92589bb",children:"Tim Ziter"})," through his ",(0,a.jsx)(t.a,{href:"https://handsonsfmc.com/contact/",children:"knowledge-packed HandsOnSFMC website"}),". It's a weekly event focused on building stuff directly on the SFMC platform. Short term access to Marketing Cloud included."]}),"\n",(0,a.jsx)(t.h2,{id:"limited-access-through-mcsnippets",children:"Limited access through MCSnippets"}),"\n",(0,a.jsxs)(t.p,{children:["Yet another free option is offered by the Salesforce MVP ",(0,a.jsx)(t.a,{href:"https://www.linkedin.com/in/patosapir",children:"Pato Sapir"}),". This one, however, is not full-blown access to the Marketing Cloud, but rather a set of web apps (",(0,a.jsx)(t.a,{href:"https://mcsnippets.herokuapp.com",children:"MC Snippets for AMPScript and SSJS"})," and ",(0,a.jsx)(t.a,{href:"https://mcsnippets.herokuapp.com/sql",children:"MC Snippets for SQL"}),") that provides option to write proprietary code on the SFMC Platform. Perfect for polishing your dev skills and preparing for Salesforce Marketing Cloud Developer certification."]}),"\n",(0,a.jsx)(t.h2,{id:"what-else-for-beginners",children:"What else for beginners?"}),"\n",(0,a.jsx)(t.p,{children:"I'm unaware of any hands-on access options besides those listed above (and I'm all ears if you know some more!). What's left for beginners is read-only learning on Trailhead and watch-only learning on SFMC-focused YouTube Channels. I especially recommend checking out the following:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.a,{href:"https://www.youtube.com/@MCLearningCamp",children:"Trailblazing Together channel"})," packed with Marketing Cloud Bootcamps recordings."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.a,{href:"https://www.youtube.com/@CameronRobert",children:"Cameron Robert's channel"})," full of step-by-step video guides on all things SFMC."]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"After you grasp the basics, the whole Salesforce Marketing Cloud blogosphere opens for you with its broad knowledge."})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1872:(e,t,o)=>{o.d(t,{m:()=>r});o(7294);const a="leadText_qzwo";var n=o(5893);const r=e=>{let{content:t}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:a,children:t})})}},1151:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>s});var a=o(7294);const n={},r=a.createContext(n);function s(e){const t=a.useContext(r);return a.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(n):e.components||n:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8440116e.c4f35040.js b/assets/js/8440116e.ae436dba.js similarity index 98% rename from assets/js/8440116e.c4f35040.js rename to assets/js/8440116e.ae436dba.js index e4e893ff1..578342243 100644 --- a/assets/js/8440116e.c4f35040.js +++ b/assets/js/8440116e.ae436dba.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2244],{5244:s=>{s.exports=JSON.parse('{"label":"AMPScript","permalink":"/docs/tags/amp-script","allTagsPath":"/docs/tags","count":6,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2244],{5244:s=>{s.exports=JSON.parse('{"label":"AMPScript","permalink":"/docs/tags/amp-script","allTagsPath":"/docs/tags","count":6,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/861.031f60e4.js b/assets/js/861.031f60e4.js new file mode 100644 index 000000000..ea11dd106 --- /dev/null +++ b/assets/js/861.031f60e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[861],{861:(t,i,e)=>{e.d(i,{diagram:()=>d});var a=e(6365),n=e(4218),r=(e(7484),e(7967),e(7856),function(){var t=function(t,i,e,a){for(e=e||{},a=t.length;a--;e[t[a]]=i);return e},i=[1,3],e=[1,4],a=[1,5],n=[1,6],r=[1,7],s=[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],l=[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],o=[32,33,34],h=[2,7],c=[1,13],d=[1,17],u=[1,18],x=[1,19],g=[1,20],f=[1,21],y=[1,22],p=[1,23],q=[1,24],T=[1,25],A=[1,26],m=[1,27],_=[1,30],b=[1,31],S=[1,32],k=[1,33],F=[1,34],P=[1,35],v=[1,36],L=[1,37],C=[1,38],z=[1,39],E=[1,40],D=[1,41],I=[1,42],B=[1,57],w=[1,58],R=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],W={trace:function(){},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(t,i,e,a,n,r,s){var l=r.length-1;switch(n){case 12:this.$=r[l].trim(),a.setDiagramTitle(this.$);break;case 13:this.$=r[l].trim(),a.setAccTitle(this.$);break;case 14:case 15:this.$=r[l].trim(),a.setAccDescription(this.$);break;case 16:a.addSection(r[l].substr(8)),this.$=r[l].substr(8);break;case 17:a.addPoint(r[l-3],r[l-1],r[l]);break;case 18:a.setXAxisLeftText(r[l-2]),a.setXAxisRightText(r[l]);break;case 19:r[l-1].text+=" \u27f6 ",a.setXAxisLeftText(r[l-1]);break;case 20:a.setXAxisLeftText(r[l]);break;case 21:a.setYAxisBottomText(r[l-2]),a.setYAxisTopText(r[l]);break;case 22:r[l-1].text+=" \u27f6 ",a.setYAxisBottomText(r[l-1]);break;case 23:a.setYAxisBottomText(r[l]);break;case 24:a.setQuadrant1Text(r[l]);break;case 25:a.setQuadrant2Text(r[l]);break;case 26:a.setQuadrant3Text(r[l]);break;case 27:a.setQuadrant4Text(r[l]);break;case 31:case 33:this.$={text:r[l],type:"text"};break;case 32:this.$={text:r[l-1].text+""+r[l],type:r[l-1].type};break;case 34:this.$={text:r[l],type:"markdown"};break;case 35:this.$=r[l];break;case 36:this.$=r[l-1]+""+r[l]}},table:[{3:1,4:2,5:i,6:e,32:a,33:n,34:r},{1:[3]},{3:8,4:2,5:i,6:e,32:a,33:n,34:r},{3:9,4:2,5:i,6:e,32:a,33:n,34:r},t(s,[2,4],{7:10}),t(l,[2,28]),t(l,[2,29]),t(l,[2,30]),{1:[2,1]},{1:[2,2]},t(o,h,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:c,13:d,15:u,17:x,19:g,20:f,25:y,27:p,28:q,29:T,30:A,31:m,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),t(s,[2,5]),{4:43,32:a,33:n,34:r},t(o,h,{10:14,11:15,12:16,21:28,35:29,9:44,5:c,13:d,15:u,17:x,19:g,20:f,25:y,27:p,28:q,29:T,30:A,31:m,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),t(o,[2,9]),t(o,[2,10]),t(o,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},t(o,[2,15]),t(o,[2,16]),{21:48,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:49,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:50,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:51,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:52,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:53,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{5:B,22:[1,54],35:56,36:55,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w},t(R,[2,31]),t(R,[2,33]),t(R,[2,34]),t(R,[2,37]),t(R,[2,38]),t(R,[2,39]),t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),t(R,[2,43]),t(R,[2,44]),t(R,[2,45]),t(R,[2,46]),t(R,[2,47]),t(s,[2,6]),t(o,[2,8]),t(o,[2,12]),t(o,[2,13]),t(o,[2,14]),t(o,[2,20],{36:55,35:56,5:B,26:[1,59],40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,23],{36:55,35:56,5:B,26:[1,60],40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,24],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,25],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,26],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,27],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),{23:[1,61]},t(R,[2,32]),t(R,[2,48]),t(R,[2,49]),t(R,[2,50]),t(o,[2,19],{35:29,21:62,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),t(o,[2,22],{35:29,21:63,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),{24:[1,64]},t(o,[2,18],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,21],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,17])],defaultActions:{8:[2,1],9:[2,2]},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],a=[],n=[null],r=[],s=this.table,l="",o=0,h=0,c=r.slice.call(arguments,1),d=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]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var g=d.yylloc;r.push(g);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 y,p,q,T,A,m,_,b,S,k={};;){if(p=e[e.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null==y&&(S=void 0,"number"!=typeof(S=a.pop()||d.lex()||1)&&(S instanceof Array&&(S=(a=S).pop()),S=i.symbols_[S]||S),y=S),q=s[p]&&s[p][y]),void 0===q||!q.length||!q[0]){var F="";for(A in b=[],s[p])this.terminals_[A]&&A>2&&b.push("'"+this.terminals_[A]+"'");F=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+b.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(F,{text:d.match,token:this.terminals_[y]||y,line:d.yylineno,loc:g,expected:b})}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+y);switch(q[0]){case 1:e.push(y),n.push(d.yytext),r.push(d.yylloc),e.push(q[1]),y=null,h=d.yyleng,l=d.yytext,o=d.yylineno,g=d.yylloc;break;case 2:if(m=this.productions_[q[1]][1],k.$=n[n.length-m],k._$={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},f&&(k._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(T=this.performAction.apply(k,[l,h,o,u.yy,q[1],n,r].concat(c))))return T;m&&(e=e.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),e.push(this.productions_[q[1]][0]),n.push(k.$),r.push(k._$),_=s[e[e.length-2]][e[e.length-1]],e.push(_);break;case 3:return!0}}return!0}},N={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 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),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===a.length?this.yylloc.first_column:0)+a[a.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,a,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))),(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],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 r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((e=this._input.match(this.rules[n[r]]))&&(!i||e[0].length>i[0].length)){if(i=e,a=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[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:{"case-insensitive":!0},performAction:function(t,i,e,a){switch(e){case 0:case 1:case 3:break;case 2:return 32;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 22:case 24:case 28: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 23:this.begin("string");break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36: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:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},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:!0}}};function U(){this.yy={}}return W.lexer=N,U.prototype=W,W.Parser=U,new U}());r.parser=r;const s=r,l=(0,a.D)();const o=(0,a.c)();function h(t){return(0,a.d)(t.trim(),o)}const c=new class{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 t,i,e,n,r,s,l,o,h,c,d,u,x,g,f,y,p,q;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:(null==(t=a.A.quadrantChart)?void 0:t.chartWidth)||500,chartWidth:(null==(i=a.A.quadrantChart)?void 0:i.chartHeight)||500,titlePadding:(null==(e=a.A.quadrantChart)?void 0:e.titlePadding)||10,titleFontSize:(null==(n=a.A.quadrantChart)?void 0:n.titleFontSize)||20,quadrantPadding:(null==(r=a.A.quadrantChart)?void 0:r.quadrantPadding)||5,xAxisLabelPadding:(null==(s=a.A.quadrantChart)?void 0:s.xAxisLabelPadding)||5,yAxisLabelPadding:(null==(l=a.A.quadrantChart)?void 0:l.yAxisLabelPadding)||5,xAxisLabelFontSize:(null==(o=a.A.quadrantChart)?void 0:o.xAxisLabelFontSize)||16,yAxisLabelFontSize:(null==(h=a.A.quadrantChart)?void 0:h.yAxisLabelFontSize)||16,quadrantLabelFontSize:(null==(c=a.A.quadrantChart)?void 0:c.quadrantLabelFontSize)||16,quadrantTextTopPadding:(null==(d=a.A.quadrantChart)?void 0:d.quadrantTextTopPadding)||5,pointTextPadding:(null==(u=a.A.quadrantChart)?void 0:u.pointTextPadding)||5,pointLabelFontSize:(null==(x=a.A.quadrantChart)?void 0:x.pointLabelFontSize)||12,pointRadius:(null==(g=a.A.quadrantChart)?void 0:g.pointRadius)||5,xAxisPosition:(null==(f=a.A.quadrantChart)?void 0:f.xAxisPosition)||"top",yAxisPosition:(null==(y=a.A.quadrantChart)?void 0:y.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:(null==(p=a.A.quadrantChart)?void 0:p.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:(null==(q=a.A.quadrantChart)?void 0:q.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:l.quadrant1Fill,quadrant2Fill:l.quadrant2Fill,quadrant3Fill:l.quadrant3Fill,quadrant4Fill:l.quadrant4Fill,quadrant1TextFill:l.quadrant1TextFill,quadrant2TextFill:l.quadrant2TextFill,quadrant3TextFill:l.quadrant3TextFill,quadrant4TextFill:l.quadrant4TextFill,quadrantPointFill:l.quadrantPointFill,quadrantPointTextFill:l.quadrantPointTextFill,quadrantXAxisTextFill:l.quadrantXAxisTextFill,quadrantYAxisTextFill:l.quadrantYAxisTextFill,quadrantTitleFill:l.quadrantTitleFill,quadrantInternalBorderStrokeFill:l.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:l.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),a.l.info("clear called")}setData(t){this.data={...this.data,...t}}addPoints(t){this.data.points=[...t,...this.data.points]}setConfig(t){a.l.trace("setConfig called with: ",t),this.config={...this.config,...t}}setThemeConfig(t){a.l.trace("setThemeConfig called with: ",t),this.themeConfig={...this.themeConfig,...t}}calculateSpace(t,i,e,a){const n=2*this.config.xAxisLabelPadding+this.config.xAxisLabelFontSize,r={top:"top"===t&&i?n:0,bottom:"bottom"===t&&i?n:0},s=2*this.config.yAxisLabelPadding+this.config.yAxisLabelFontSize,l={left:"left"===this.config.yAxisPosition&&e?s:0,right:"right"===this.config.yAxisPosition&&e?s:0},o=this.config.titleFontSize+2*this.config.titlePadding,h={top:a?o:0},c=this.config.quadrantPadding+l.left,d=this.config.quadrantPadding+r.top+h.top,u=this.config.chartWidth-2*this.config.quadrantPadding-l.left-l.right,x=this.config.chartHeight-2*this.config.quadrantPadding-r.top-r.bottom-h.top;return{xAxisSpace:r,yAxisSpace:l,titleSpace:h,quadrantSpace:{quadrantLeft:c,quadrantTop:d,quadrantWidth:u,quadrantHalfWidth:u/2,quadrantHeight:x,quadrantHalfHeight:x/2}}}getAxisLabels(t,i,e,a){const{quadrantSpace:n,titleSpace:r}=a,{quadrantHalfHeight:s,quadrantHeight:l,quadrantLeft:o,quadrantHalfWidth:h,quadrantTop:c,quadrantWidth:d}=n,u=Boolean(this.data.xAxisRightText),x=Boolean(this.data.yAxisTopText),g=[];return this.data.xAxisLeftText&&i&&g.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&i&&g.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+h+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&e&&g.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+l-(x?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&e&&g.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+s-(x?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),g}getQuadrants(t){const{quadrantSpace:i}=t,{quadrantHalfHeight:e,quadrantLeft:a,quadrantHalfWidth:n,quadrantTop:r}=i,s=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r,width:n,height:e,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:a,y:r,width:n,height:e,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:a,y:r+e,width:n,height:e,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:a+n,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant4Fill}];for(const l of s)l.text.x=l.x+l.width/2,0===this.data.points.length?(l.text.y=l.y+l.height/2,l.text.horizontalPos="middle"):(l.text.y=l.y+this.config.quadrantTextTopPadding,l.text.horizontalPos="top");return s}getQuadrantPoints(t){const{quadrantSpace:i}=t,{quadrantHeight:e,quadrantLeft:a,quadrantTop:r,quadrantWidth:s}=i,l=(0,n.BYU)().domain([0,1]).range([a,s+a]),o=(0,n.BYU)().domain([0,1]).range([e+r,r]);return this.data.points.map((t=>({x:l(t.x),y:o(t.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:t.text,fill:this.themeConfig.quadrantPointTextFill,x:l(t.x),y:o(t.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}})))}getBorders(t){const i=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:e}=t,{quadrantHalfHeight:a,quadrantHeight:n,quadrantLeft:r,quadrantHalfWidth:s,quadrantTop:l,quadrantWidth:o}=e;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l,x2:r+o+i,y2:l},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r+o,y1:l+i,x2:r+o,y2:l+n-i},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l+n,x2:r+o+i,y2:l+n},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r,y1:l+i,x2:r,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+s,y1:l+i,x2:r+s,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+i,y1:l+a,x2:r+o-i,y2:l+a}]}getTitle(t){if(t)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}}build(){const t=this.config.showXAxis&&!(!this.data.xAxisLeftText&&!this.data.xAxisRightText),i=this.config.showYAxis&&!(!this.data.yAxisTopText&&!this.data.yAxisBottomText),e=this.config.showTitle&&!!this.data.titleText,a=this.data.points.length>0?"bottom":this.config.xAxisPosition,n=this.calculateSpace(a,t,i,e);return{points:this.getQuadrantPoints(n),quadrants:this.getQuadrants(n),axisLabels:this.getAxisLabels(a,t,i,n),borderLines:this.getBorders(n),title:this.getTitle(e)}}};const d={parser:s,db:{setWidth:function(t){c.setConfig({chartWidth:t})},setHeight:function(t){c.setConfig({chartHeight:t})},setQuadrant1Text:function(t){c.setData({quadrant1Text:h(t.text)})},setQuadrant2Text:function(t){c.setData({quadrant2Text:h(t.text)})},setQuadrant3Text:function(t){c.setData({quadrant3Text:h(t.text)})},setQuadrant4Text:function(t){c.setData({quadrant4Text:h(t.text)})},setXAxisLeftText:function(t){c.setData({xAxisLeftText:h(t.text)})},setXAxisRightText:function(t){c.setData({xAxisRightText:h(t.text)})},setYAxisTopText:function(t){c.setData({yAxisTopText:h(t.text)})},setYAxisBottomText:function(t){c.setData({yAxisBottomText:h(t.text)})},addPoint:function(t,i,e){c.addPoints([{x:i,y:e,text:h(t.text)}])},getQuadrantData:function(){const t=(0,a.c)(),{themeVariables:i,quadrantChart:e}=t;return e&&c.setConfig(e),c.setThemeConfig({quadrant1Fill:i.quadrant1Fill,quadrant2Fill:i.quadrant2Fill,quadrant3Fill:i.quadrant3Fill,quadrant4Fill:i.quadrant4Fill,quadrant1TextFill:i.quadrant1TextFill,quadrant2TextFill:i.quadrant2TextFill,quadrant3TextFill:i.quadrant3TextFill,quadrant4TextFill:i.quadrant4TextFill,quadrantPointFill:i.quadrantPointFill,quadrantPointTextFill:i.quadrantPointTextFill,quadrantXAxisTextFill:i.quadrantXAxisTextFill,quadrantYAxisTextFill:i.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:i.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:i.quadrantInternalBorderStrokeFill,quadrantTitleFill:i.quadrantTitleFill}),c.setData({titleText:(0,a.r)()}),c.build()},clear:function(){c.clear(),(0,a.t)()},setAccTitle:a.s,getAccTitle:a.g,setDiagramTitle:a.q,getDiagramTitle:a.r,getAccDescription:a.a,setAccDescription:a.b},renderer:{draw:(t,i,e,r)=>{var s,l,o;function h(t){return"top"===t?"hanging":"middle"}function c(t){return"left"===t?"start":"middle"}function d(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}const u=(0,a.c)();a.l.debug("Rendering quadrant chart\n"+t);const x=u.securityLevel;let g;"sandbox"===x&&(g=(0,n.Ys)("#i"+i));const f=("sandbox"===x?(0,n.Ys)(g.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id="${i}"]`),y=f.append("g").attr("class","main"),p=(null==(s=u.quadrantChart)?void 0:s.chartWidth)||500,q=(null==(l=u.quadrantChart)?void 0:l.chartHeight)||500;(0,a.i)(f,q,p,(null==(o=u.quadrantChart)?void 0:o.useMaxWidth)||!0),f.attr("viewBox","0 0 "+p+" "+q),r.db.setHeight(q),r.db.setWidth(p);const T=r.db.getQuadrantData(),A=y.append("g").attr("class","quadrants"),m=y.append("g").attr("class","border"),_=y.append("g").attr("class","data-points"),b=y.append("g").attr("class","labels"),S=y.append("g").attr("class","title");T.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",T.title.fill).attr("font-size",T.title.fontSize).attr("dominant-baseline",h(T.title.horizontalPos)).attr("text-anchor",c(T.title.verticalPos)).attr("transform",d(T.title)).text(T.title.text),T.borderLines&&m.selectAll("line").data(T.borderLines).enter().append("line").attr("x1",(t=>t.x1)).attr("y1",(t=>t.y1)).attr("x2",(t=>t.x2)).attr("y2",(t=>t.y2)).style("stroke",(t=>t.strokeFill)).style("stroke-width",(t=>t.strokeWidth));const k=A.selectAll("g.quadrant").data(T.quadrants).enter().append("g").attr("class","quadrant");k.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)),k.append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text))).text((t=>t.text.text));b.selectAll("g.label").data(T.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text((t=>t.text)).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>h(t.horizontalPos))).attr("text-anchor",(t=>c(t.verticalPos))).attr("transform",(t=>d(t)));const F=_.selectAll("g.data-point").data(T.points).enter().append("g").attr("class","data-point");F.append("circle").attr("cx",(t=>t.x)).attr("cy",(t=>t.y)).attr("r",(t=>t.radius)).attr("fill",(t=>t.fill)),F.append("text").attr("x",0).attr("y",0).text((t=>t.text.text)).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text)))}},styles:()=>""}}}]); \ No newline at end of file diff --git a/assets/js/861.ac3561a7.js b/assets/js/861.ac3561a7.js new file mode 100644 index 000000000..753360d5e --- /dev/null +++ b/assets/js/861.ac3561a7.js @@ -0,0 +1,1227 @@ +"use strict"; +exports.id = 861; +exports.ids = [861]; +exports.modules = { + +/***/ 93674: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.D)(); +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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _a.chartWidth) || 500, + chartWidth: ((_b = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _b.chartHeight) || 500, + titlePadding: ((_c = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _c.titlePadding) || 10, + titleFontSize: ((_d = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _d.titleFontSize) || 20, + quadrantPadding: ((_e = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _e.quadrantPadding) || 5, + xAxisLabelPadding: ((_f = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _f.xAxisLabelPadding) || 5, + yAxisLabelPadding: ((_g = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _g.yAxisLabelPadding) || 5, + xAxisLabelFontSize: ((_h = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _h.xAxisLabelFontSize) || 16, + yAxisLabelFontSize: ((_i = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _i.yAxisLabelFontSize) || 16, + quadrantLabelFontSize: ((_j = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _j.quadrantLabelFontSize) || 16, + quadrantTextTopPadding: ((_k = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _k.quadrantTextTopPadding) || 5, + pointTextPadding: ((_l = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _l.pointTextPadding) || 5, + pointLabelFontSize: ((_m = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _m.pointLabelFontSize) || 12, + pointRadius: ((_n = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _n.pointRadius) || 5, + xAxisPosition: ((_o = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _o.xAxisPosition) || "top", + yAxisPosition: ((_p = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _p.yAxisPosition) || "left", + quadrantInternalBorderStrokeWidth: ((_q = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _q.quadrantInternalBorderStrokeWidth) || 1, + quadrantExternalBorderStrokeWidth: ((_r = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setConfig called with: ", config2); + this.config = { ...this.config, ...config2 }; + } + setThemeConfig(themeConfig) { + _mermaid_04fb0060_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 */ .BYU)().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]); + const yAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)(); +function textSanitizer(text) { + return (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.r)() }); + return quadrantBuilder.build(); +} +const clear = function() { + quadrantBuilder.clear(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const db = { + setWidth, + setHeight, + setQuadrant1Text, + setQuadrant2Text, + setQuadrant3Text, + setQuadrant4Text, + setXAxisLeftText, + setXAxisRightText, + setYAxisTopText, + setYAxisBottomText, + addPoint, + getQuadrantData, + clear, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.g, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.r, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + _mermaid_04fb0060_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 */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("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_04fb0060_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/868.aaba0928.js b/assets/js/868.aaba0928.js new file mode 100644 index 000000000..9895510e5 --- /dev/null +++ b/assets/js/868.aaba0928.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[868],{5737:(e,t,n)=>{n.d(t,{Z:()=>a});n(7294);var i=n(512),o=n(7325),s=n(3899),r=n(5893);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{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."})})]})})})}},868:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(7294);var i=n(7325),o=n(9488),s=n(4960),r=n(5737),a=n(5893);function d(){const e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.d,{title:e}),(0,a.jsx)(s.Z,{children:(0,a.jsx)(r.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/885.03927ccf.js b/assets/js/885.03927ccf.js new file mode 100644 index 000000000..a255c044a --- /dev/null +++ b/assets/js/885.03927ccf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[885],{885:(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(6365),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;r<n.length;r++)if((s=this._input.match(this.rules[n[r]]))&&(!e||s[0].length>e[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,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/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;s<e.doc.length;s++)if(e.doc[s].type===h){const i=E(e.doc[s]);i.doc=E(n),t.push(i),n=[]}else n.push(e.doc[s]);if(t.length>0&&n.length>0){const s={stmt:a,id:(0,i.G)(),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.t)()},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.r},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/89.ec26e043.js b/assets/js/89.ec26e043.js new file mode 100644 index 000000000..63c9934c5 --- /dev/null +++ b/assets/js/89.ec26e043.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[89],{3349:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(6225);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.bg(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}},6225:(e,t,n)=>{n.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var r=n(7514),l=n(3234);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.Z(n)){var o=n.transition;if(l.Z(o))return o(e)}return e}},89:(e,t,n)=>{n.d(t,{diagram:()=>a});var r=n(4641),l=n(4788),o=n(6365);n(4218),n(5625),n(1644),n(9354),n(7484),n(7967),n(7856);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")}}},4788:(e,t,n)=>{n.d(t,{a:()=>h,f:()=>u});var r=n(5625),l=n(4218),o=n(6365),a=n(4852),s=n(3349),i=n(1691),c=n(1610);const d=(e,t)=>i.Z.lang.round(c.Z.parse(e)[t]);var p=n(1117);const b={},w=function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`);Object.keys(e).forEach((function(n){const r=e[n];let c="default";r.classes.length>0&&(c=r.classes.join(" ")),c+=" flowchart-label";const d=(0,o.k)(r.styles);let p,b=void 0!==r.text?r.text:r.id;if(o.l.info("vertex",r,r.labelType),"markdown"===r.labelType)o.l.info("vertex",r,r.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};p=(0,s.a)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",d.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(r.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"}t.setNode(r.id,{labelStyle:d.labelStyle,shape:f,labelText:b,labelType:r.labelType,rx:w,ry:w,class:c,style:d.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:d.labelStyle,labelType:r.labelType,shape:f,labelText:b,rx:w,ry:w,class:c,style:d.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:(0,o.c)().flowchart.padding})}))},f=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}e.forEach((function(n){s++;const c="L-"+n.start+"-"+n.end;void 0===i[c]?(i[c]=0,o.l.info("abc78 new entry",c,i[c])):(i[c]++,o.l.info("abc78 new entry",c,i[c]));let d=c+"-"+i[c];o.l.info("abc78 new link id to be used is",c,d,i[c]);const p="LS-"+n.start,w="LE-"+n.end,f={style:"",labelStyle:""};switch(f.minlen=n.length||1,"arrow_open"===n.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",n.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(n.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!==n.style){const e=(0,o.k)(n.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==n.interpolate?f.curve=(0,o.n)(n.interpolate,l.c_6):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.c_6):f.curve=(0,o.n)(b.curve,l.c_6),void 0===n.text?void 0!==n.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=n.labelType,f.label=n.text.replace(o.e.lineBreakRegex,"\n"),void 0===n.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=d,f.classes="flowchart-link "+p+" "+w,t.setEdge(n.start,n.end,f,s)}))},u={setConf:function(e){const t=Object.keys(e);for(const n of t)b[n]=e[n]},addVertices:w,addEdges:f,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)(),p=d.nodeSpacing||50,b=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ys)("#i"+t));const h="sandbox"===c?(0,l.Ys)(u.nodes()[0].contentDocument.body):(0,l.Ys)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:p,ranksep:b,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.td_)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}w(v,y,t,h,g,s),f(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.o)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(r){const e=g.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===c?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},h=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 .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=d,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return p.Z(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/89.f7c79b6a.js b/assets/js/89.f7c79b6a.js new file mode 100644 index 000000000..46d2571a9 --- /dev/null +++ b/assets/js/89.f7c79b6a.js @@ -0,0 +1,26522 @@ +"use strict"; +exports.id = 89; +exports.ids = [89]; +exports.modules = { + +/***/ 43349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225); + + + + +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 */ .bg(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; +} + + +/***/ }), + +/***/ 96225: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $p: () => (/* binding */ applyClass), +/* harmony export */ O1: () => (/* binding */ edgeToId), +/* harmony export */ WR: () => (/* binding */ applyTransition), +/* harmony export */ bF: () => (/* binding */ isSubgraph), +/* harmony export */ bg: () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234); + + +// 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"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 39354: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + c: () => (/* binding */ write) +}); + +// UNUSED EXPORTS: read + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js + + +/** 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/* default */.Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_clone = (clone); + +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!isUndefined/* default */.Z(g.graph())) { + json.value = lodash_es_clone(g.graph()); + } + return json; +} + +function writeNodes(g) { + return map/* default */.Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!isUndefined/* default */.Z(nodeValue)) { + node.value = nodeValue; + } + if (!isUndefined/* default */.Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return map/* default */.Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!isUndefined/* default */.Z(e.name)) { + edge.name = e.name; + } + if (!isUndefined/* default */.Z(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; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 33183: +/***/ ((__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-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +;// 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<unknown>} 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<string>} */ + 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<T>} 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<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + 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<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * 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<Extension>} 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<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | 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<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + 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<HtmlExtension>} 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<StackItem>} */ + 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<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + 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<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + 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<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + 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<Point, '_bufferIndex' | '_index'> | 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<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + 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> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + 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<Construct>} 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<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +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<Chunk>} */ + 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<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + 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<Code>} */ + 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 + * <a> + * <a\>b> + * <a b> + * <a)> + * 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 (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @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> + * ^ + * > | 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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <aa> + * ^ + * ``` + * + * @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 + * > | <a\*a> + * ^ + * ``` + * + * @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<Code>} */ + 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<Code>} */ + 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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **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 + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @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 `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @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 `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @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 + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @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 + * > | <div/> + * ^ + * ``` + * + * @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 + * > | <x/> + * ^ + * ``` + * + * @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 + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @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 + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @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 + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @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 + * > | <a b=c> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @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 + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @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 + * > | <!--xxx--> + * ^ + * ``` + * + * @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 + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | 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 + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @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 + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @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 + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @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 + * > | <div> + * ^ + * | + * ``` + * + * @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<Code>} */ + 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<string, string>} + */ +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<Event>} */ + 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 + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @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<Event>} */ + 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<Code>} */ + 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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @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 + * > | a<https://example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @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 + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @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<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> 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 <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> 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 `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> 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 `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> 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 <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <![CDATA[>&<]]> 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 <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> 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 <!b> 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 <?b?> 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 <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> 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 </b> 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 `<x`, in opening tag name. + * + * ```markdown + * > | a <b> 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 <b> 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 <b c> 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 <b c> 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 <b c=d> 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 <b c="d"> 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 <b c=d> 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 <b c="d"> 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 <b c="d"> 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 <!--a + * ^ + * | b--> + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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 <!--a + * > | b--> + * ^ + * ``` + * + * @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<Chunk>} + */ + +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<Chunk>} */ + 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<Event>} events + * @returns {Array<Event>} + */ +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<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} 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<string, Handle>} 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<CompileContext, 'sliceSerialize'>} 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<CompileContext, 'sliceSerialize'>} 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<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(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 {<Kind extends Node>(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<Extension | Array<Extension>> | 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<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + 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<Event>} 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<StaticPhrasingContent>} */ + // @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<Extension | Array<Extension>>} 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__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-a48a4c90.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(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, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + 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( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_04fb0060.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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; + } +}; + + + +/***/ }), + +/***/ 52494: +/***/ ((__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 */ insertEdge), +/* harmony export */ h: () => (/* binding */ positionEdgeLabel), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ k: () => (/* binding */ addEdgeMarkers), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33183); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_04fb0060_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 */ .Ys)(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( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + 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|<br\s*\/?>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_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_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_04fb0060_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_04fb0060_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_04fb0060_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 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_04fb0060_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_04fb0060_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 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 = bbox.width + node.padding; + const totalHeight = bbox.height + node.padding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_04fb0060_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("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_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 */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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 */ .Ys)(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, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + 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_04fb0060_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); + } + 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_04fb0060_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 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc82", edge, edge.labelType); + 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 */ .Ys)(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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc78" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", "translate(" + x + ", " + y + ")"); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`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, boundryNode) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 checking point", point2, boundryNode); + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 inside", point2, lastPointOutside, inter); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 intersection", inter); + 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); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 no intersect", inter, points); + } + isInside = true; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 outside", point2, lastPointOutside); + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("abc88 returning points", points); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc88 InsertEdge: ", edge); + if (head.intersect && tail.intersect) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info( + "Last point", + points[points.length - 1], + head, + head.intersect(points[points.length - 1]) + ); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("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 */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_04fb0060_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, "\\)"); + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeStart", edge.arrowTypeStart); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.l.info("arrowTypeEnd", edge.arrowTypeEnd); + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 94641: +/***/ ((__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__(64218); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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, "FirstStmtSeperator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "verticeStatement": 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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + 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_04fb0060_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_04fb0060_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_04fb0060_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 */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.I.flowchart, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.r +}; +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" })); + + + +/***/ }), + +/***/ 90089: +/***/ ((__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_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(94641); +/* harmony import */ var _styles_b39df0e1_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(94788); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(39354); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(22424); + + + + + + + + + + + + + + + + + + + + + +const diagram = { + parser: _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__.f, + renderer: _styles_b39df0e1_js__WEBPACK_IMPORTED_MODULE_8__.f, + styles: _styles_b39df0e1_js__WEBPACK_IMPORTED_MODULE_8__.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_9__.p)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); + _styles_b39df0e1_js__WEBPACK_IMPORTED_MODULE_8__.f.setConf(cnf.flowchart); + _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__.f.clear(); + _flowDb_f4777d50_js__WEBPACK_IMPORTED_MODULE_7__.f.setGen("gen-2"); + } +}; + + + +/***/ }), + +/***/ 74852: +/***/ ((__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__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39354); +/* harmony import */ var _edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(52494); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(33183); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + 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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_04fb0060_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_04fb0060_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) { + edge.fromCluster = e.v; + } + if (w !== e.w) { + edge.toCluster = e.w; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_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_04fb0060_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 */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_04fb0060_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 */ .c(clusterGraph)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_a48a4c90_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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_04fb0060_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); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")" + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + "translate(" + node.x + ", " + (node.y - node.height / 2) + ")" + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + 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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(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); + label.attr( + "transform", + "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.m)((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().flowchart.htmlLabels) ? 5 : 3)) + ")" + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_5ec2587c_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_04fb0060_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) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_04fb0060_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_04fb0060_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_04fb0060_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)); + const newEl = o.elem; + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_5ec2587c_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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + const paths = (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.g)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.h)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_04fb0060_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_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_5ec2587c_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + await recursiveRender(elem, graph, diagramtype, id); +}; + + + +/***/ }), + +/***/ 94788: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ flowStyles), + f: () => (/* binding */ flowRendererV2) +}); + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/index-0980fb80.js +var index_0980fb80 = __webpack_require__(74852); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(43349); +// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules +var utils = __webpack_require__(61691); +// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules +var dist_color = __webpack_require__(71610); +;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/channel.js +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return utils/* default */.Z.lang.round(dist_color/* default */.Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const methods_channel = (channel); + +// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/rgba.js +var rgba = __webpack_require__(51117); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/styles-b39df0e1.js + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,mermaid_04fb0060.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + mermaid_04fb0060.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + mermaid_04fb0060.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,mermaid_04fb0060.m)((0,mermaid_04fb0060.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(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_04fb0060.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 radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 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"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + 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_04fb0060.c)().flowchart.padding + }); + mermaid_04fb0060.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + 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_04fb0060.c)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + mermaid_04fb0060.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_04fb0060.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + mermaid_04fb0060.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + mermaid_04fb0060.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + mermaid_04fb0060.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_04fb0060.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_04fb0060.n)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_04fb0060.n)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_04fb0060.n)(conf.curve, src/* curveLinear */.c_6); + } + 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 = edge.text.replace(mermaid_04fb0060.e.lineBreakRegex, "\n"); + 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_04fb0060.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,mermaid_04fb0060.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new graphlib/* Graph */.k({ + 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_04fb0060.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + mermaid_04fb0060.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_04fb0060.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_04fb0060.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,index_0980fb80.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + mermaid_04fb0060.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,mermaid_04fb0060.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,src/* select */.Ys)("#" + 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 = methods_channel; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return rgba/* default */.Z(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: + } + + .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/8932.3e18a2bf.js b/assets/js/8932.3e18a2bf.js new file mode 100644 index 000000000..d6267864a --- /dev/null +++ b/assets/js/8932.3e18a2bf.js @@ -0,0 +1 @@ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8932],{8734:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var s=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return s.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return s.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return s.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return i.bind(this)(r)}}}()},285:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,i=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,r={},a=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=r[t];return e&&(e.indexOf?e:e.s.concat(e.f))},d=function(t,e){var n,i=r.meridiem;if(i){for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,e))>-1){n=s>12;break}}else n=t===(e?"pm":"PM");return n},u={A:[s,function(t){this.afternoon=d(t,!1)}],a:[s,function(t){this.afternoon=d(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[i,o("seconds")],ss:[i,o("seconds")],m:[i,o("minutes")],mm:[i,o("minutes")],H:[i,o("hours")],h:[i,o("hours")],HH:[i,o("hours")],hh:[i,o("hours")],D:[i,o("day")],DD:[n,o("day")],Do:[s,function(t){var e=r.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[i,o("month")],MM:[n,o("month")],MMM:[s,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[s,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=a(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function h(n){var i,s;i=n,s=r&&r.formats;for(var a=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,i){var r=i&&i.toUpperCase();return n||s[i]||t[i]||s[r].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=a.length,c=0;c<o;c+=1){var l=a[c],d=u[l],h=d&&d[0],f=d&&d[1];a[c]=f?{regex:h,parser:f}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,i=0;n<o;n+=1){var s=a[n];if("string"==typeof s)i+=s.length;else{var r=s.regex,c=s.parser,l=t.slice(i),d=r.exec(l)[0];c.call(e,d),t=t.replace(d,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(a=t.parseTwoDigitYear);var i=e.prototype,s=i.parse;i.parse=function(t){var e=t.date,i=t.utc,a=t.args;this.$u=i;var o=a[1];if("string"==typeof o){var c=!0===a[2],l=!0===a[3],d=c||l,u=a[2];l&&(u=a[2]),r=this.$locale(),!c&&u&&(r=n.Ls[u]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var i=h(e)(t),s=i.year,r=i.month,a=i.day,o=i.hours,c=i.minutes,l=i.seconds,d=i.milliseconds,u=i.zone,f=new Date,y=a||(s||r?1:f.getDate()),m=s||f.getFullYear(),k=0;s&&!r||(k=r>0?r-1:f.getMonth());var p=o||0,g=c||0,b=l||0,T=d||0;return u?new Date(Date.UTC(m,k,y,p,g,b,T+60*u.offset*1e3)):n?new Date(Date.UTC(m,k,y,p,g,b,T)):new Date(m,k,y,p,g,b,T)}catch(t){return new Date("")}}(e,o,i),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),d&&e!=this.format(o)&&(this.$d=new Date("")),r={}}else if(o instanceof Array)for(var f=o.length,y=1;y<=f;y+=1){a[1]=o[y-1];var m=n.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}y===f&&(this.$d=new Date(""))}else s.call(this,t)}}}()},9542:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var s=function(e){return e.add(4-e.isoWeekday(),t)},r=n.prototype;r.isoWeekYear=function(){return s(this).year()},r.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,r,a,o=s(this),c=(n=this.isoWeekYear(),a=4-(r=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),r.isoWeekday()>4&&(a+=7),r.add(a,t));return o.diff(c,"week")+1},r.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var a=r.startOf;r.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(t,e)}}}()},8932:(t,e,n)=>{"use strict";n.d(e,{diagram:()=>X});var i=n(7967),s=n(7484),r=n(9542),a=n(285),o=n(8734),c=n(6365),l=n(4218),d=(n(7856),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,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],i=[1,26],s=[1,27],r=[1,28],a=[1,29],o=[1,30],c=[1,31],l=[1,9],d=[1,10],u=[1,11],h=[1,12],f=[1,13],y=[1,14],m=[1,15],k=[1,16],p=[1,18],g=[1,19],b=[1,20],T=[1,21],x=[1,22],v=[1,24],_=[1,32],w={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],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.setWeekday("monday");break;case 9:i.setWeekday("tuesday");break;case 10:i.setWeekday("wednesday");break;case 11:i.setWeekday("thursday");break;case 12:i.setWeekday("friday");break;case 13:i.setWeekday("saturday");break;case 14:i.setWeekday("sunday");break;case 15:i.setDateFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 16:i.enableInclusiveEndDates(),this.$=r[o].substr(18);break;case 17:i.TopAxis(),this.$=r[o].substr(8);break;case 18:i.setAxisFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 19:i.setTickInterval(r[o].substr(13)),this.$=r[o].substr(13);break;case 20:i.setExcludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 21:i.setIncludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 22:i.setTodayMarker(r[o].substr(12)),this.$=r[o].substr(12);break;case 24:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 25:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 26:case 27:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 28:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 30:i.addTask(r[o-1],r[o]),this.$="task";break;case 31:this.$=r[o-1],i.setClickEvent(r[o-1],r[o],null);break;case 32:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],r[o]);break;case 33:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],null),i.setLink(r[o-2],r[o]);break;case 34:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-2],r[o-1]),i.setLink(r[o-3],r[o]);break;case 35:this.$=r[o-2],i.setClickEvent(r[o-2],r[o],null),i.setLink(r[o-2],r[o-1]);break;case 36:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-1],r[o]),i.setLink(r[o-3],r[o-2]);break;case 37:this.$=r[o-1],i.setLink(r[o-1],r[o]);break;case 38:case 44:this.$=r[o-1]+" "+r[o];break;case 39:case 40:case 42:this.$=r[o-2]+" "+r[o-1]+" "+r[o];break;case 41:case 43:this.$=r[o-3]+" "+r[o-2]+" "+r[o-1]+" "+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:17,12:n,13:i,14:s,15:r,16:a,17:o,18:c,19:l,20:d,21:u,22:h,23:f,24:y,25:m,26:k,27:p,28:g,30:b,32:T,33:x,34:23,35:v,37:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:i,14:s,15:r,16:a,17:o,18:c,19:l,20:d,21:u,22:h,23:f,24:y,25:m,26:k,27:p,28:g,30:b,32:T,33:x,34:23,35:v,37:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],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="",c=0,l=0,d=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);u.setInput(t,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var m=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var k,p,g,b,T,x,v,_,w,$={};;){if(p=n[n.length-1],this.defaultActions[p]?g=this.defaultActions[p]:(null==k&&(w=void 0,"number"!=typeof(w=i.pop()||u.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),k=w),g=a[p]&&a[p][k]),void 0===g||!g.length||!g[0]){var D="";for(T in _=[],a[p])this.terminals_[T]&&T>2&&_.push("'"+this.terminals_[T]+"'");D=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==k?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(D,{text:u.match,token:this.terminals_[k]||k,line:u.yylineno,loc:y,expected:_})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+k);switch(g[0]){case 1:n.push(k),s.push(u.yytext),r.push(u.yylloc),n.push(g[1]),k=null,l=u.yyleng,o=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(x=this.productions_[g[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},m&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,h.yy,g[1],s,r].concat(d))))return b;x&&(n=n.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[g[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}},$={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;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[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:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 16:case 19:case 22:case 25:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:case 9:case 10:case 12:case 13:case 14:break;case 11:return 10;case 15:this.begin("href");break;case 17:return 40;case 18:this.begin("callbackname");break;case 20:this.popState(),this.begin("callbackargs");break;case 21:return 38;case 23:return 39;case 24:this.begin("click");break;case 26:return 37;case 27:return 4;case 28:return 19;case 29:return 20;case 30:return 21;case 31:return 22;case 32:return 23;case 33:return 25;case 34:return 24;case 35:return 26;case 36:return 12;case 37:return 13;case 38:return 14;case 39:return 15;case 40:return 16;case 41:return 17;case 42:return 18;case 43:return"date";case 44:return 27;case 45:return"accDescription";case 46:return 33;case 47:return 35;case 48:return 36;case 49:return":";case 50:return 6;case 51:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[22,23],inclusive:!1},callbackname:{rules:[19,20,21],inclusive:!1},href:{rules:[16,17],inclusive:!1},click:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,18,24,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],inclusive:!0}}};function D(){this.yy={}}return w.lexer=$,D.prototype=w,w.Parser=D,new D}());d.parser=d;const u=d;s.extend(r),s.extend(a),s.extend(o);let h,f="",y="",m="",k=[],p=[],g={},b=[],T=[],x="",v="";const _=["active","done","crit","milestone"];let w=[],$=!1,D=!1,C="sunday",S=0;const E=function(t,e,n,i){return!i.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},M=function(t,e,n,i){if(!n.length||t.manualEndTime)return;let r,a;r=t.startTime instanceof Date?s(t.startTime):s(t.startTime,e,!0),r=r.add(1,"d"),a=t.endTime instanceof Date?s(t.endTime):s(t.endTime,e,!0);const[o,c]=Y(r,a,e,n,i);t.endTime=o.toDate(),t.renderEndTime=c},Y=function(t,e,n,i,s){let r=!1,a=null;for(;t<=e;)r||(a=e.toDate()),r=E(t,n,i,s),r&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,a]},A=function(t,e,n){n=n.trim();const i=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==i){let t=null;if(i[1].split(" ").forEach((function(e){let n=N(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let r=s(n,e.trim(),!0);if(r.isValid())return r.toDate();{c.l.debug("Invalid date:"+n),c.l.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime())||t.getFullYear()<-1e4||t.getFullYear()>1e4)throw new Error("Invalid date:"+n);return t}},L=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},I=function(t,e,n,i=!1){n=n.trim();let r=s(n,e.trim(),!0);if(r.isValid())return i&&(r=r.add(1,"d")),r.toDate();let a=s(t);const[o,c]=L(n);if(!Number.isNaN(o)){const t=a.add(o,c);t.isValid()&&(a=t)}return a.toDate()};let O=0;const F=function(t){return void 0===t?(O+=1,"task"+O):t};let W,B,P=[];const z={},N=function(t){const e=z[t];return P[e]},H=function(){const t=function(t){const e=P[t];let n="";switch(P[t].raw.startTime.type){case"prevTaskEnd":{const t=N(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=A(0,f,P[t].raw.startTime.startData),n&&(P[t].startTime=n)}return P[t].startTime&&(P[t].endTime=I(P[t].startTime,f,P[t].raw.endTime.data,$),P[t].endTime&&(P[t].processed=!0,P[t].manualEndTime=s(P[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),M(P[t],f,p,k))),P[t].processed};let e=!0;for(const[n,i]of P.entries())t(n),e=e&&i.processed;return e},j=function(t,e){t.split(",").forEach((function(t){let n=N(t);void 0!==n&&n.classes.push(e)}))},Z=function(t,e){w.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},G={getConfig:()=>(0,c.c)().gantt,clear:function(){b=[],T=[],x="",w=[],O=0,W=void 0,B=void 0,P=[],f="",y="",v="",h=void 0,m="",k=[],p=[],$=!1,D=!1,S=0,g={},(0,c.t)(),C="sunday"},setDateFormat:function(t){f=t},getDateFormat:function(){return f},enableInclusiveEndDates:function(){$=!0},endDatesAreInclusive:function(){return $},enableTopAxis:function(){D=!0},topAxisEnabled:function(){return D},setAxisFormat:function(t){y=t},getAxisFormat:function(){return y},setTickInterval:function(t){h=t},getTickInterval:function(){return h},setTodayMarker:function(t){m=t},getTodayMarker:function(){return m},setAccTitle:c.s,getAccTitle:c.g,setDiagramTitle:c.q,getDiagramTitle:c.r,setDisplayMode:function(t){v=t},getDisplayMode:function(){return v},setAccDescription:c.b,getAccDescription:c.a,addSection:function(t){x=t,b.push(t)},getSections:function(){return b},getTasks:function(){let t=H();let e=0;for(;!t&&e<10;)t=H(),e++;return T=P,T},addTask:function(t,e){const n={section:x,type:x,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),s={};V(i,s,_);for(let r=0;r<i.length;r++)i[r]=i[r].trim();switch(i.length){case 1:s.id=F(),s.startTime={type:"prevTaskEnd",id:t},s.endTime={data:i[0]};break;case 2:s.id=F(),s.startTime={type:"getStartDate",startData:i[0]},s.endTime={data:i[1]};break;case 3:s.id=F(i[0]),s.startTime={type:"getStartDate",startData:i[1]},s.endTime={data:i[2]}}return s}(B,e);n.raw.startTime=i.startTime,n.raw.endTime=i.endTime,n.id=i.id,n.prevTaskId=B,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,n.order=S,S++;const s=P.push(n);B=n.id,z[n.id]=s-1},findTaskById:N,addTaskOrg:function(t,e){const n={section:x,type:x,description:t,task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};V(i,r,_);for(let s=0;s<i.length;s++)i[s]=i[s].trim();let a="";switch(i.length){case 1:r.id=F(),r.startTime=t.endTime,a=i[0];break;case 2:r.id=F(),r.startTime=A(0,f,i[0]),a=i[1];break;case 3:r.id=F(i[0]),r.startTime=A(0,f,i[1]),a=i[2]}return a&&(r.endTime=I(r.startTime,f,a,$),r.manualEndTime=s(a,"YYYY-MM-DD",!0).isValid(),M(r,f,p,k)),r}(W,e);n.startTime=i.startTime,n.endTime=i.endTime,n.id=i.id,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,W=n,T.push(n)},setIncludes:function(t){k=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return k},setExcludes:function(t){p=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return p},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==(0,c.c)().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==N(t)&&Z(t,(()=>{c.u.runFunc(e,...i)}))}(t,e,n)})),j(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==(0,c.c)().securityLevel&&(n=(0,i.Nm)(e)),t.split(",").forEach((function(t){void 0!==N(t)&&(Z(t,(()=>{window.open(n,"_self")})),g[t]=n)})),j(t,"clickable")},getLinks:function(){return g},bindFunctions:function(t){w.forEach((function(e){e(t)}))},parseDuration:L,isInvalidDate:E,setWeekday:function(t){C=t},getWeekday:function(){return C}};function V(t,e,n){let i=!0;for(;i;)i=!1,n.forEach((function(n){const s=new RegExp("^\\s*"+n+"\\s*$");t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)}))}const q={monday:l.Ox9,tuesday:l.YDX,wednesday:l.EFj,thursday:l.Igq,friday:l.y2j,saturday:l.LqH,sunday:l.Zyz},R=(t,e)=>{let n=[...t].map((()=>-1/0)),i=[...t].sort(((t,e)=>t.startTime-e.startTime||t.order-e.order)),s=0;for(const r of i)for(let t=0;t<n.length;t++)if(r.startTime>=n[t]){n[t]=r.endTime,r.order=t+e,t>s&&(s=t);break}return s};let U;const X={parser:u,db:G,renderer:{setConf:function(){c.l.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,i){const r=(0,c.c)().gantt,a=(0,c.c)().securityLevel;let o;"sandbox"===a&&(o=(0,l.Ys)("#i"+e));const d="sandbox"===a?(0,l.Ys)(o.nodes()[0].contentDocument.body):(0,l.Ys)("body"),u="sandbox"===a?o.nodes()[0].contentDocument:document,h=u.getElementById(e);U=h.parentElement.offsetWidth,void 0===U&&(U=1200),void 0!==r.useWidth&&(U=r.useWidth);const f=i.db.getTasks();let y=[];for(const s of f)y.push(s.type);y=function(t){const e={},n=[];for(let i=0,s=t.length;i<s;++i)Object.prototype.hasOwnProperty.call(e,t[i])||(e[t[i]]=!0,n.push(t[i]));return n}(y);const m={};let k=2*r.topPadding;if("compact"===i.db.getDisplayMode()||"compact"===r.displayMode){const t={};for(const n of f)void 0===t[n.section]?t[n.section]=[n]:t[n.section].push(n);let e=0;for(const n of Object.keys(t)){const i=R(t[n],e)+1;e+=i,k+=i*(r.barHeight+r.barGap),m[n]=i}}else{k+=f.length*(r.barHeight+r.barGap);for(const t of y)m[t]=f.filter((e=>e.type===t)).length}h.setAttribute("viewBox","0 0 "+U+" "+k);const p=d.select(`[id="${e}"]`),g=(0,l.Xf)().domain([(0,l.VV$)(f,(function(t){return t.startTime})),(0,l.Fp7)(f,(function(t){return t.endTime}))]).rangeRound([0,U-r.leftPadding-r.rightPadding]);f.sort((function(t,e){const n=t.startTime,i=e.startTime;let s=0;return n>i?s=1:n<i&&(s=-1),s})),function(t,n,a){const o=r.barHeight,d=o+r.barGap,h=r.topPadding,f=r.leftPadding;(0,l.BYU)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(l.JHv);(function(t,e,n,a,o,l,d,u){if(0===d.length&&0===u.length)return;let h,f;for(const{startTime:i,endTime:s}of l)(void 0===h||i<h)&&(h=i),(void 0===f||s>f)&&(f=s);if(!h||!f)return;if(s(f).diff(s(h),"year")>5)return void c.l.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");const y=i.db.getDateFormat(),m=[];let k=null,b=s(h);for(;b.valueOf()<=f;)i.db.isInvalidDate(b,y,d,u)?k?k.end=b:k={start:b,end:b}:k&&(m.push(k),k=null),b=b.add(1,"d");p.append("g").selectAll("rect").data(m).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",r.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return g(e)-g(t.start)})).attr("height",o-e-r.gridLineStartPadding).attr("transform-origin",(function(e,i){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(i*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(d,h,f,0,a,t,i.db.getExcludes(),i.db.getIncludes()),function(t,e,n,s){let a=(0,l.LLu)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));const o=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||r.tickInterval);if(null!==o){const t=o[1],e=o[2],n=i.db.getWeekday()||r.weekday;switch(e){case"millisecond":a.ticks(l.U8T.every(t));break;case"second":a.ticks(l.S1K.every(t));break;case"minute":a.ticks(l.Z_i.every(t));break;case"hour":a.ticks(l.WQD.every(t));break;case"day":a.ticks(l.rr1.every(t));break;case"week":a.ticks(q[n].every(t));break;case"month":a.ticks(l.F0B.every(t))}}if(p.append("g").attr("class","grid").attr("transform","translate("+t+", "+(s-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||r.topAxis){let n=(0,l.F5q)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));if(null!==o){const t=o[1],e=o[2],s=i.db.getWeekday()||r.weekday;switch(e){case"millisecond":n.ticks(l.U8T.every(t));break;case"second":n.ticks(l.S1K.every(t));break;case"minute":n.ticks(l.Z_i.every(t));break;case"hour":n.ticks(l.WQD.every(t));break;case"day":n.ticks(l.rr1.every(t));break;case"week":n.ticks(q[s].every(t));break;case"month":n.ticks(l.F0B.every(t))}}p.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(f,h,0,a),function(t,n,s,a,o,d,u){const h=[...new Set(t.map((t=>t.order)))].map((e=>t.find((t=>t.order===e))));p.append("g").selectAll("rect").data(h).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+s-2})).attr("width",(function(){return u-r.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of y.entries())if(t.type===n)return"section section"+e%r.numberSectionStyles;return"section section0"}));const f=p.append("g").selectAll("rect").data(t).enter(),m=i.db.getLinks();f.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))-.5*o:g(t.startTime)+a})).attr("y",(function(t,e){return t.order*n+s})).attr("width",(function(t){return t.milestone?o:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",o).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+s+.5*o).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let i=0;for(const[a,o]of y.entries())t.type===o&&(i=a%r.numberSectionStyles);let s="";return t.active?t.crit?s+=" activeCrit":s=" active":t.done?s=t.crit?" doneCrit":" done":t.crit&&(s+=" crit"),0===s.length&&(s=" task"),t.milestone&&(s=" milestone "+s),s+=i,s+=" "+n,e+s})),f.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",r.fontSize).attr("x",(function(t){let e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*o),t.milestone&&(n=e+o);const i=this.getBBox().width;return i>n-e?n+i+1.5*r.leftPadding>u?e+a-5:n+a+5:(n-e)/2+e+a})).attr("y",(function(t,e){return t.order*n+r.barHeight/2+(r.fontSize/2-2)+s})).attr("text-height",o).attr("class",(function(t){const e=g(t.startTime);let n=g(t.endTime);t.milestone&&(n=e+o);const i=this.getBBox().width;let s="";t.classes.length>0&&(s=t.classes.join(" "));let a=0;for(const[o,l]of y.entries())t.type===l&&(a=o%r.numberSectionStyles);let c="";return t.active&&(c=t.crit?"activeCritText"+a:"activeText"+a),t.done?c=t.crit?c+" doneCritText"+a:c+" doneText"+a:t.crit&&(c=c+" critText"+a),t.milestone&&(c+=" milestoneText"),i>n-e?n+i+1.5*r.leftPadding>u?s+" taskTextOutsideLeft taskTextOutside"+a+" "+c:s+" taskTextOutsideRight taskTextOutside"+a+" "+c+" width-"+i:s+" taskText taskText"+a+" "+c+" width-"+i}));if("sandbox"===(0,c.c)().securityLevel){let t;t=(0,l.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;f.filter((function(t){return void 0!==m[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const s=e.parentNode;var r=n.createElement("a");r.setAttribute("xlink:href",m[t.id]),r.setAttribute("target","_top"),s.appendChild(r),r.appendChild(e),r.appendChild(i)}))}}(t,d,h,f,o,0,n),function(t,e){let n=0;const i=Object.keys(m).map((t=>[t,m[t]]));p.append("g").selectAll("text").data(i).enter().append((function(t){const e=t[0].split(c.e.lineBreakRegex),n=-(e.length-1)/2,i=u.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[s,r]of e.entries()){const t=u.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),s>0&&t.setAttribute("dy","1em"),t.textContent=r,i.appendChild(t)}return i})).attr("x",10).attr("y",(function(s,r){if(!(r>0))return s[1]*t/2+e;for(let a=0;a<r;a++)return n+=i[r-1][1],s[1]*t/2+n*t+e})).attr("font-size",r.sectionFontSize).attr("class",(function(t){for(const[e,n]of y.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%r.numberSectionStyles;return"sectionTitle"}))}(d,h),function(t,e,n,s){const a=i.db.getTodayMarker();if("off"===a)return;const o=p.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",r.titleTopMargin).attr("y2",s-r.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}(f,0,0,a)}(f,U,k),(0,c.i)(p,k,U,r.useMaxWidth),p.append("text").text(i.db.getDiagramTitle()).attr("x",U/2).attr("y",r.titleTopMargin).attr("class","titleText")}},styles:t=>`\n .mermaid-main-font {\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.titleColor||t.textColor};\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/8a538aec.125cb74f.js b/assets/js/8a538aec.56982abd.js similarity index 97% rename from assets/js/8a538aec.125cb74f.js rename to assets/js/8a538aec.56982abd.js index c3907a67a..928495ffa 100644 --- a/assets/js/8a538aec.125cb74f.js +++ b/assets/js/8a538aec.56982abd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3009],{6418:e=>{e.exports=JSON.parse('{"label":"Snippet","permalink":"/docs/tags/snippet","allTagsPath":"/docs/tags","count":9,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","permalink":"/docs/ssjs/snippets/ssjs-script-template"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3009],{6418:e=>{e.exports=JSON.parse('{"label":"Snippet","permalink":"/docs/tags/snippet","allTagsPath":"/docs/tags","count":9,"items":[{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","permalink":"/docs/ssjs/snippets/ampscript-in-ssjs"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","permalink":"/docs/config/sfmc-code-resource"},{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","permalink":"/docs/ssjs/snippets/sfmc-cloud-page-apps"},{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","permalink":"/docs/ssjs/snippets/ssjs-script-template"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/8dfb128c.01423c01.js b/assets/js/8dfb128c.01423c01.js deleted file mode 100644 index 8a6014bef..000000000 --- a/assets/js/8dfb128c.01423c01.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4715],{4137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,i=function(e,t){if(null==e)return{};var a,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=c(a),m=i,h=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return a?n.createElement(h,r(r({ref:t},d),{},{components:a})):n.createElement(h,r({ref:t},d))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var c=2;c<o;c++)r[c]=a[c];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},1936:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>c,toc:()=>u});var n=a(7462),i=(a(7294),a(4137)),o=a(1872),r=a(7271);const l={id:"mc-personalization-ideas",title:"MC Personalization Ideas",sidebar_label:"MC Personalization",description:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-mcp-ideas.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio"]},s=void 0,c={unversionedId:"ideas/mc-personalization-ideas",id:"ideas/mc-personalization-ideas",title:"MC Personalization Ideas",description:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",source:"@site/sites/ideas/mc-personalization-ideas.mdx",sourceDirName:"ideas",slug:"/ideas/mc-personalization-ideas",permalink:"/sites/ideas/mc-personalization-ideas",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/ideas/mc-personalization-ideas.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/sites/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/sites/tags/interaction-studio"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"mc-personalization-ideas",title:"MC Personalization Ideas",sidebar_label:"MC Personalization",description:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-mcp-ideas.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio"]},sidebar:"ideas",previous:{title:"Marketing Cloud",permalink:"/sites/ideas/marketing-cloud-ideas"}},d={},u=[{value:"Catalog",id:"catalog",level:2},{value:"Full MCP Category hierarchy support for ETL",id:"full-mcp-category-hierarchy-support-for-etl",level:3},{value:"Full MCP Catalog Export",id:"full-mcp-catalog-export",level:3},{value:"Full MCP Catalog Metadata visibility",id:"full-mcp-catalog-metadata-visibility",level:3},{value:"Einstein Recipes",id:"einstein-recipes",level:2},{value:"Multiple Dimensional Variations for Products in Einstein Recipes",id:"multiple-dimensional-variations-for-products-in-einstein-recipes",level:3},{value:"Department Variation for Products in Einstein Recipes",id:"department-variation-for-products-in-einstein-recipes",level:3},{value:"Price Reduction Ingredient in Einstein Recipes",id:"price-reduction-ingredient-in-einstein-recipes",level:3},{value:"Rating Count in Recipe's Rating Exclusion",id:"rating-count-in-recipes-rating-exclusion",level:3},{value:"Abandoned Cart Retention setting",id:"abandoned-cart-retention-setting",level:3},{value:"ETL",id:"etl",level:2},{value:"External Email Campaign ETL Experience Name & ID",id:"external-email-campaign-etl-experience-name--id",level:3},{value:"External Email Campaign ETL Send Segmentation",id:"external-email-campaign-etl-send-segmentation",level:3},{value:"External Email Campaign ETL Unsubscription Event Type",id:"external-email-campaign-etl-unsubscription-event-type",level:3},{value:"Segmentation",id:"segmentation",level:2},{value:"MCP Action Name Management",id:"mcp-action-name-management",level:3},{value:"MCP Hourly-based Segmentation Rules",id:"mcp-hourly-based-segmentation-rules",level:3},{value:"Reporting",id:"reporting",level:2},{value:"Direct Attribution on MCP Campaign level",id:"direct-attribution-on-mcp-campaign-level",level:3}],p={toc:u},m="wrapper";function h(e){let{components:t,...a}=e;return(0,i.kt)(m,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(o.m,{content:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"catalog"},"Catalog"),(0,i.kt)("h3",{id:"full-mcp-category-hierarchy-support-for-etl"},"Full MCP Category hierarchy support for ETL"),(0,i.kt)("p",null,"Marketing Cloud Personalization can create a working hierarchy tree of categories with a clean subcategory drill-down view in catalog UI and automatic summing of the views and revenue from the lowest level category up in the hierarchy."),(0,i.kt)("p",null,"However, this is now possible only under multiple conditions: just one Category per product (for the attribution to work), a specific format of the category ID, and only through Sitemap."),(0,i.kt)("p",null,"Especially problematic is that last limitation because, in many cases, ETL is the better way to manage it - especially with the format required for that feature."),(0,i.kt)("p",null,"Category ETL already has a solution that provides the same level of detail to Marketing Cloud Personalization (Interaction Studio) using two out-of-the-box attributes: department and parentCategoryId."),(0,i.kt)("p",null,"MCP displays the hierarchy built with those fields on the specific Category page under the ID. Unfortunately, it is not replicating the drill-down hierarchy tree UI in the Category list view and does not pass the data from the bottom Category up the hierarchy."),(0,i.kt)("p",null,"It should change - there should be a feature parity between Sitemap and ETL for such an important feature. Especially considering that all information required for it is already available."),(0,i.kt)("p",null,"Read about risky workaround ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/interaction-studio/mcp-catalog-architecture/#category-catalog-unique-attributes"},"here"),"."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000MMZ27UAH/full-category-hierarchy-support-for-etl-in-interaction-studio",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"full-mcp-catalog-export"},"Full MCP Catalog Export"),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) already supports Catalog manual export through the Export button on the Catalog listing. However, it exports products only with the limited data set available in the listing view."),(0,i.kt)("p",null,"The problem with the current state is that the exported file does not contain complete catalog data (like promotable and archived attributes) and cannot be used as an ETL source."),(0,i.kt)("p",null,"It is a huge issue because it makes it impossible to debug catalog item states outside of MCP (and doing it directly in the platform is not scalable). It also makes it impossible to batch-modify items (for example, for selective archiving or exclusion) for subsequent ETL import."),(0,i.kt)("p",null,"There should be an option to export the catalog in full scope, matching the ETL schema, including hidden Items that didn't yet get any action (view, cart, purchase)."),(0,i.kt)("p",null,"Bonus points for an option to include (or not) archived Items in the export. It would be a hugely beneficial addition for debugging purposes and Item reintroduction requirements (for example after mistake in archiving)."),(0,i.kt)("p",null,"Read about partial workaround ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/interaction-studio/mcp-catalog-architecture/#export-full-is-catalog-data"},"here"),"."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVRj3UAH/full-is-mcp-catalog-export",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"full-mcp-catalog-metadata-visibility"},"Full MCP Catalog Metadata visibility"),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) already supports Catalog Object custom attribute metadata view (open Item in the Catalog and hover over custom attribute value to see the details). However, it is limited only to those custom attributes if the ETL updates them."),(0,i.kt)("p",null,"We can slightly extend it with a custom ",(0,i.kt)("a",{parentName:"p",href:"../../../docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/"},"Metadata Viewer solution")," to show that data also for built-in attributes. However, it is still a very limited solution due to product gaps:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("inlineCode",{parentName:"li"},"origin")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"lastUpdated")," values for Sources other than ETL (Sitemap, Mobile App, Manual update in UI, API)"),(0,i.kt)("li",{parentName:"ol"},"Showing this information for built-in attributes in the Catalog UI"),(0,i.kt)("li",{parentName:"ol"},"General Item ",(0,i.kt)("inlineCode",{parentName:"li"},"createdDate")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"lastUpdatedDate")," (not attribute-specific)")),(0,i.kt)("p",null,"That scope of information would make debugging Catalog metadata issues significantly easier. Less work for admins/developers. Less downtime for the recommendations. Fewer support tickets for Salesforce."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NWbmJUAT/full-is-mcp-catalog-metadata-visibility",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h2",{id:"einstein-recipes"},"Einstein Recipes"),(0,i.kt)("h3",{id:"multiple-dimensional-variations-for-products-in-einstein-recipes"},"Multiple Dimensional Variations for Products in Einstein Recipes"),(0,i.kt)("p",null,"Einstein Recipes are a powerful and flexible tool for creating recommendations, but the fourth step - Variations - is not on par with the rest of the options."),(0,i.kt)("p",null,"You can configure only a single Dimensional Variation. While you can choose from multiple Item Types when configuring it, once you select one, that's the end of the story. You cannot limit recommended products to, for example, only 2 per category and 2 per brand."),(0,i.kt)("p",null,"It heavily limits control over product recommendations, especially for e-commerce with multiple catalog objects. Currently, there is no real workaround."),(0,i.kt)("p",null,"At the same time, it is possible to select multiple Boosters or Exclusions of the same type and configure them differently. It would be great to select multiple Dimensional Variations with different configurations."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000LAxE9UAL/multiple-dimensional-variations-for-products-in-einstein-recipes",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"department-variation-for-products-in-einstein-recipes"},"Department Variation for Products in Einstein Recipes"),(0,i.kt)("p",null,"Einstein Recipes lets you configure Dimensional Variations on the Category, but unfortunately, it works only on the primary category level. There is no option to select the Department (master category) level."),(0,i.kt)("p",null,"It is very limiting for e-commerce with broad category trees like:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"monitors (gaming, graphic, office, medical, etc.)"),(0,i.kt)("li",{parentName:"ul"},"computers (laptops, ultrabooks, convertibles, desktops, all-in-ones, etc.)"),(0,i.kt)("li",{parentName:"ul"},"paints (acrylic, enamel, emulsion, etc.).")),(0,i.kt)("p",null,"With such categories, recommendations with Category Variation configured can easily still be dominated by a similar product (like 12 monitor recommendations despite the Category Variation limit set to 3 due to similar primary categories)."),(0,i.kt)("p",null,"There are two possible solutions to this issue:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Add Department as another option in the Item Type dropdown (as it is separate from Categories in Exclusions and Boosters) or"),(0,i.kt)("li",{parentName:"ol"},"When the Item Type Category is selected, add a checkbox on whether Variation should happen on the primary Category or Department level.")),(0,i.kt)("p",null,"Currently, the only workaround is to create a separate Catalog for Departments, but that defeats the purpose of Is Department checkbox on the default Category object."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000LAwlkUAD/department-variation-for-products-in-einstein-recipes",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"price-reduction-ingredient-in-einstein-recipes"},"Price Reduction Ingredient in Einstein Recipes"),(0,i.kt)("p",null,"Triggered Campaigns added a great option of targetting various events for Journey Builder sends. Among them, there are Catalog Triggers. Some of them, like Product Expiring Soon, are also available for Web with Einstein Recipes Ingredients."),(0,i.kt)("p",null,"However, currently, there is no Ingredient for a popular e-commerce use case - Price Reduction."),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) has all the required information (the price and listPrice attributes used for the Triggered Campaign)."),(0,i.kt)("p",null,"There is a workaround to make it possible now - calculating whether product price has been reduced externally and passing this information to a Related Catalog Object. However, there are better solutions for something that MCP is already doing out-of-the-box for another channel."),(0,i.kt)("p",null,"There are two possible solutions to this:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Simple ingredient that returns all price-reduced items (similar to Trending)."),(0,i.kt)("li",{parentName:"ol"},"Configurable ingredient with an option to select minimum price reduction percent.")),(0,i.kt)("p",null,"The solution can further improve it by adding a Recipe Booster on the price reduction percent."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000MMauyUAD/price-reduction-ingredient-in-einstein-recipes",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"rating-count-in-recipes-rating-exclusion"},"Rating Count in Recipe's Rating Exclusion"),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) offers many Exclusions/Inclusions on Recipes that allow to hone the recommendations to the exact business needs. Among them there is Rating that allows to exclude/include items based on their rating (with an optional zero rating capture)."),(0,i.kt)("p",null,"It would be great to have additional option in the same exclusion/inclusion to decide on rating count being greater than, less then or between two values. It should be easy, as the rating count is already part of the data model just like rating itself."),(0,i.kt)("p",null,"This would enable use cases like:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Including only products with great rating that have at least 10 ratings."),(0,i.kt)("li",{parentName:"ol"},"Excluding products with bad rating if they have more than 3 ratings."),(0,i.kt)("li",{parentName:"ol"},"Including products user purchased that have less than 3 ratings for review-request campaign.")),(0,i.kt)("p",null,"Currently such filters can be applied only on the Serverside Code level in the Template, which is not perfect as it can very easily limit the 12 received recommendations to just few or even zero. Having it on recipe level would be much more powerful."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000PjMarUAF/rating-count-in-is-recipes-rating-exclusion",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"abandoned-cart-retention-setting"},"Abandoned Cart Retention setting"),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) captures the cart information and makes it available for Einstein Recipes recommendation generation & context object in Campaign Template Server-Side Code. Unfortunately, we can only manage the cart content through proactive actions. If a client adds something to the cart and doesn't visit it for long periods, their cart content will remain in the MCP."),(0,i.kt)("p",null,"Currently, a dirty workaround for that is a Web Campaign launching on the first visit in the session using the context.user object to check whether the user has a cart and its age. Depending on that, it can push clear cart action. But this could be more user and performance friendly."),(0,i.kt)("p",null,"The better option would be adding an option to MCP settings that would allow each business to configure (or not) the retention of the cart data so that it can be removed from the system automatically after some time."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000OYz84UAD/abandoned-cart-retention-setting",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h2",{id:"etl"},"ETL"),(0,i.kt)("h3",{id:"external-email-campaign-etl-experience-name--id"},"External Email Campaign ETL Experience Name & ID"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=sf.mc_pers_etl_external_email_campaign_events_data_feed.htm"},"External Email Campaign ETL")," enables passing behavioural data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it is limited to a Campaign ID and Campaign Name. It is a problem because to benefit from that data in segmentation fully, it should also allow passing Email ID and Email Name."),(0,i.kt)("p",null,"The good part - only minimal work is needed, as the groundwork is already laid down. The trick is to leverage it by adding Experience ID and Experience Name columns to the ETL as fields for Email metadata."),(0,i.kt)("p",null,"When you check the event stream for an outcome from that ETL, you will see it described as ",(0,i.kt)("inlineCode",{parentName:"p"},"Impression on experience Default in campaign {CAMPAIGN_NAME}"),". What is more, the same event will already show (empty) properties ",(0,i.kt)("inlineCode",{parentName:"p"},".etl_eeid")," (ExternalExperienceID) and ",(0,i.kt)("inlineCode",{parentName:"p"},".etl_een")," (ExternalExperienceName) that are matching filled in ",(0,i.kt)("inlineCode",{parentName:"p"},".etl_ecid")," (ExternalCampaignID) and ",(0,i.kt)("inlineCode",{parentName:"p"},".etl_ecn")," (ExternalCampaignName). Finally, the segmentation is also ready for this extension, as the External Email Campaign ETL is leveraging the same Campaign Stat Count (or Recency) segmentation as Marketing Cloud Personalization (Interaction Studio) built-in campaigns, leveraging both Campaigns and Experiences."),(0,i.kt)("p",null,"Currently, one has to choose whether to segment only on emails (without any connection to a specific campaign) or only campaigns (without any ties to specific emails within the campaigns). With that ETL change, we could build segments focusing either on whole Campaigns (f.e. SFMC Journeys) or only particular Emails in selected Journeys (f.e. the First email in Welcome Journey). Easy win for truly targeted Personalization!"),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVNMuUAP/external-email-campaign-etl-experience-name-id",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"external-email-campaign-etl-send-segmentation"},"External Email Campaign ETL Send Segmentation"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=sf.mc_pers_etl_external_email_campaign_events_data_feed.htm"},"External Email Campaign ETL")," enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, only segmentation based on Click and Open (View) is currently supported."),(0,i.kt)("p",null,"Two options are available in the Campaigns - Campaign Stat Count (or Recency) segmentation rule - ",(0,i.kt)("inlineCode",{parentName:"p"},"Get sent email campaign")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Qualify to view (control)")," - but neither works for the Send event. It renders that event type useless right now."),(0,i.kt)("p",null,"Enabling one of the above segmentation rules (preferably ",(0,i.kt)("inlineCode",{parentName:"p"},"Get sent email campaign"),") would unlock use cases like targeting Web or Push campaigns to users who we sent an email campaign, but they never opened it. Great way to fully leverage the cross-channel and real-time nature of Personalization."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVNN1UAP/external-email-campaign-etl-send-segmentation",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"external-email-campaign-etl-unsubscription-event-type"},"External Email Campaign ETL Unsubscription Event Type"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=sf.mc_pers_etl_external_email_campaign_events_data_feed.htm"},"External Email Campaign ETL")," enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it cannot pass unsubscriptions."),(0,i.kt)("p",null,"Official documentation mentions this event type in the ",(0,i.kt)("inlineCode",{parentName:"p"},"eventType")," column description but doesn't follow it up in the Example Values section. I also performed tests on my side and found it is impossible - Test Run in Feed returns an error: ",(0,i.kt)("inlineCode",{parentName:"p"},"Transform error: Invalid eventType 'Unsubscribe'. Valid types are Send, Click, Open"),". Unsubscription could be easily segmentable as an already existing ",(0,i.kt)("inlineCode",{parentName:"p"},"Dismissal")," action."),(0,i.kt)("p",null,"Unsubscribe should be added to unlock a wide range of targeted campaigns like surveys about unsubscription reasons, win-back campaigns or replacing email subscription prompts with other channel recommendations."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVN9DUAX/external-email-campaign-etl-unsubscription-event-type",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h2",{id:"segmentation"},"Segmentation"),(0,i.kt)("h3",{id:"mcp-action-name-management"},"MCP Action Name Management"),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) captures actions from multiple sources to enable user segmentation and campaign targeting. Unfortunately, it does not offer any option to manage created actions, meaning everything that was pushed stays on the Dataset forever."),(0,i.kt)("p",null,"At the very least, there should be an option to view and remove existing Actions that are no longer needed (for example, test or refactored ones). It would significantly improve user experience by providing control over the number of options in the segmentation/targeting picklists."),(0,i.kt)("p",null,"Even better would be an option to merge existing actions so that we wouldn't lose any behavioural after refactoring the action names."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Partially implemented now - you can view and remove (but not merge or edit) actions by going in the MCP to Settings \xbb Modules \xbb Actions tab.")),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000OYyaAUAT/is-action-name-management",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h3",{id:"mcp-hourly-based-segmentation-rules"},"MCP Hourly-based Segmentation Rules"),(0,i.kt)("p",null,"Currently segmentation rules in the Marketing Cloud Personalization (Interaction Studio) are based on number of days. This is very limiting for on-the-site campaign targeting."),(0,i.kt)("p",null,"For example, if we would like to display an infobar or slide-in for abandoned cart basket, current segemntation can only show us users that:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Do have Items in cart"),(0,i.kt)("li",{parentName:"ol"},"Didn't do any Cart Action today")),(0,i.kt)("p",null,"It means we can start abandoned cart Web Campaign only on the next day."),(0,i.kt)("p",null,"With hourly based segmentation rules we could improve it greatly to show us users that:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Do have Items in cart"),(0,i.kt)("li",{parentName:"ol"},"Didn't do any Cart Action in the last hour")),(0,i.kt)("p",null,"The best way to solve it would be to have additional picklist at the end of rule configuration where we can choose whether it should be day or hour based."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000PjMb6UAF/is-hourlybased-segmentation-rules",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}),(0,i.kt)("h2",{id:"reporting"},"Reporting"),(0,i.kt)("h3",{id:"direct-attribution-on-mcp-campaign-level"},"Direct Attribution on MCP Campaign level"),(0,i.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) offers a wide selection of Reports based on Activity, Results and Visits. It lacks, however, clear and detailed reporting on direct attribution from specific campaigns."),(0,i.kt)("p",null,"Currently, attribution tracking is available in two places:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"The Main Dashboard (MCP Home Page) displays the Total Stats and Revenue Dashboard at the top. It showcases direct revenue from campaigns (The User clicks a product recommendation and purchases that specific promoted item in the selected timeframe). Unfortunately, it does not offer per campaign (and per experience) data, only a global value split between all Web Recommendations and all Email Recommendations (",(0,i.kt)("a",{parentName:"li",href:"../../../docs/interaction-studio/mcp-open-time-email"},"OTE"),")."),(0,i.kt)("li",{parentName:"ol"},"On the other hand, Specific Campaign Statistics display detailed statistics for each experience. Unfortunately, they don't offer direct attribution. While you can select whether the attribution should be based on click or view and what should be the attribution window, it is much more random data. View attribution means that if a user viewed a campaign and purchased anything (even wholly unrelated to the campaign recommendation) in the specified timeframe - it will be treated as revenue from that campaign. Similarly, click attribution means that if the user clicks on the campaign (for example, on a Laptop recommendation) and makes any purchase (for example, a new Monitor and cable), the whole revenue will still be attributed to the campaign. While it is acceptable for product-less campaigns (like Infobar) where direct attribution might not be possible, it's useless for meaningful analysis of recommendations conversion.")),(0,i.kt)("p",null,"There is no clean workaround for that problem - the Data Warehouse end of sales didn't help either. The only way right now is to append Campaign & Experience IDs to all links in the Campaigns and move the calculation to an external analytics system. That's a huge, complex work with a subpar experience of displaying reports in 3rd party solution, compared to having it directly in the system deploying those campaigns and tracking purchases - the system already calculating it for the existing total results."),(0,i.kt)("p",null,"There should be an additional option on the Campaign Statistics level (on top of existing ones that are good for product-less campaigns) displaying attribution with the same logic as the Main Dashboard but with the per-experience detail."),(0,i.kt)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVTrFUAX/direct-attribution-on-is-campaign-level",text:"Vote on IdeaExchange",newTab:"true",mdxType:"Button"}))}h.isMDXComponent=!0},7271:(e,t,a)=>{a.d(t,{V:()=>o,z:()=>i});var n=a(7294);const i=e=>{let{link:t,text:a,newTab:i=!1}=e;return n.createElement(n.Fragment,null,n.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:i?"_blank":"_self"},a))},o=e=>{let{linkLeft:t,textLeft:a,newTabLeft:i=!1,linkRight:o,textRight:r,newTabRight:l=!1}=e;return n.createElement(n.Fragment,null,n.createElement("div",{class:"col col--12"},n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:i?"_blank":"_self"},a),n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:l?"_blank":"_self"},r)))}},1872:(e,t,a)=>{a.d(t,{m:()=>o});var n=a(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:i},t))}}}]); \ No newline at end of file diff --git a/assets/js/8dfb128c.255e587c.js b/assets/js/8dfb128c.255e587c.js new file mode 100644 index 000000000..433794ecd --- /dev/null +++ b/assets/js/8dfb128c.255e587c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4715],{8764:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>h});var i=n(5893),a=n(1151),o=n(1872),r=n(7271);const s={id:"mc-personalization-ideas",title:"MC Personalization Ideas",sidebar_label:"MC Personalization",description:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-mcp-ideas.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio"]},l=void 0,c={id:"ideas/mc-personalization-ideas",title:"MC Personalization Ideas",description:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",source:"@site/sites/ideas/mc-personalization-ideas.mdx",sourceDirName:"ideas",slug:"/ideas/mc-personalization-ideas",permalink:"/sites/ideas/mc-personalization-ideas",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/ideas/mc-personalization-ideas.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/sites/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/sites/tags/interaction-studio"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"mc-personalization-ideas",title:"MC Personalization Ideas",sidebar_label:"MC Personalization",description:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!",image:"img/og/og-image-mcp-ideas.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio"]},sidebar:"ideas",previous:{title:"Marketing Cloud",permalink:"/sites/ideas/marketing-cloud-ideas"}},d={},h=[{value:"Catalog",id:"catalog",level:2},{value:"Full MCP Category hierarchy support for ETL",id:"full-mcp-category-hierarchy-support-for-etl",level:3},{value:"Full MCP Catalog Export",id:"full-mcp-catalog-export",level:3},{value:"Full MCP Catalog Metadata visibility",id:"full-mcp-catalog-metadata-visibility",level:3},{value:"Einstein Recipes",id:"einstein-recipes",level:2},{value:"Multiple Dimensional Variations for Products in Einstein Recipes",id:"multiple-dimensional-variations-for-products-in-einstein-recipes",level:3},{value:"Department Variation for Products in Einstein Recipes",id:"department-variation-for-products-in-einstein-recipes",level:3},{value:"Price Reduction Ingredient in Einstein Recipes",id:"price-reduction-ingredient-in-einstein-recipes",level:3},{value:"Rating Count in Recipe's Rating Exclusion",id:"rating-count-in-recipes-rating-exclusion",level:3},{value:"Abandoned Cart Retention setting",id:"abandoned-cart-retention-setting",level:3},{value:"ETL",id:"etl",level:2},{value:"External Email Campaign ETL Experience Name & ID",id:"external-email-campaign-etl-experience-name--id",level:3},{value:"External Email Campaign ETL Send Segmentation",id:"external-email-campaign-etl-send-segmentation",level:3},{value:"External Email Campaign ETL Unsubscription Event Type",id:"external-email-campaign-etl-unsubscription-event-type",level:3},{value:"Segmentation",id:"segmentation",level:2},{value:"MCP Action Name Management",id:"mcp-action-name-management",level:3},{value:"MCP Hourly-based Segmentation Rules",id:"mcp-hourly-based-segmentation-rules",level:3},{value:"Reporting",id:"reporting",level:2},{value:"Direct Attribution on MCP Campaign level",id:"direct-attribution-on-mcp-campaign-level",level:3}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.m,{content:"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!"}),"\n",(0,i.jsx)(t.h2,{id:"catalog",children:"Catalog"}),"\n",(0,i.jsx)(t.h3,{id:"full-mcp-category-hierarchy-support-for-etl",children:"Full MCP Category hierarchy support for ETL"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization can create a working hierarchy tree of categories with a clean subcategory drill-down view in catalog UI and automatic summing of the views and revenue from the lowest level category up in the hierarchy."}),"\n",(0,i.jsx)(t.p,{children:"However, this is now possible only under multiple conditions: just one Category per product (for the attribution to work), a specific format of the category ID, and only through Sitemap."}),"\n",(0,i.jsx)(t.p,{children:"Especially problematic is that last limitation because, in many cases, ETL is the better way to manage it - especially with the format required for that feature."}),"\n",(0,i.jsx)(t.p,{children:"Category ETL already has a solution that provides the same level of detail to Marketing Cloud Personalization (Interaction Studio) using two out-of-the-box attributes: department and parentCategoryId."}),"\n",(0,i.jsx)(t.p,{children:"MCP displays the hierarchy built with those fields on the specific Category page under the ID. Unfortunately, it is not replicating the drill-down hierarchy tree UI in the Category list view and does not pass the data from the bottom Category up the hierarchy."}),"\n",(0,i.jsx)(t.p,{children:"It should change - there should be a feature parity between Sitemap and ETL for such an important feature. Especially considering that all information required for it is already available."}),"\n",(0,i.jsxs)(t.p,{children:["Read about risky workaround ",(0,i.jsx)(t.a,{href:"../../../docs/interaction-studio/mcp-catalog-architecture/#category-catalog-unique-attributes",children:"here"}),"."]}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000MMZ27UAH/full-category-hierarchy-support-for-etl-in-interaction-studio",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"full-mcp-catalog-export",children:"Full MCP Catalog Export"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) already supports Catalog manual export through the Export button on the Catalog listing. However, it exports products only with the limited data set available in the listing view."}),"\n",(0,i.jsx)(t.p,{children:"The problem with the current state is that the exported file does not contain complete catalog data (like promotable and archived attributes) and cannot be used as an ETL source."}),"\n",(0,i.jsx)(t.p,{children:"It is a huge issue because it makes it impossible to debug catalog item states outside of MCP (and doing it directly in the platform is not scalable). It also makes it impossible to batch-modify items (for example, for selective archiving or exclusion) for subsequent ETL import."}),"\n",(0,i.jsx)(t.p,{children:"There should be an option to export the catalog in full scope, matching the ETL schema, including hidden Items that didn't yet get any action (view, cart, purchase)."}),"\n",(0,i.jsx)(t.p,{children:"Bonus points for an option to include (or not) archived Items in the export. It would be a hugely beneficial addition for debugging purposes and Item reintroduction requirements (for example after mistake in archiving)."}),"\n",(0,i.jsxs)(t.p,{children:["Read about partial workaround ",(0,i.jsx)(t.a,{href:"../../../docs/interaction-studio/mcp-catalog-architecture/#export-full-is-catalog-data",children:"here"}),"."]}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVRj3UAH/full-is-mcp-catalog-export",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"full-mcp-catalog-metadata-visibility",children:"Full MCP Catalog Metadata visibility"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) already supports Catalog Object custom attribute metadata view (open Item in the Catalog and hover over custom attribute value to see the details). However, it is limited only to those custom attributes if the ETL updates them."}),"\n",(0,i.jsxs)(t.p,{children:["We can slightly extend it with a custom ",(0,i.jsx)(t.a,{href:"../../../docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/",children:"Metadata Viewer solution"})," to show that data also for built-in attributes. However, it is still a very limited solution due to product gaps:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"origin"})," and ",(0,i.jsx)(t.code,{children:"lastUpdated"})," values for Sources other than ETL (Sitemap, Mobile App, Manual update in UI, API)"]}),"\n",(0,i.jsx)(t.li,{children:"Showing this information for built-in attributes in the Catalog UI"}),"\n",(0,i.jsxs)(t.li,{children:["General Item ",(0,i.jsx)(t.code,{children:"createdDate"})," and ",(0,i.jsx)(t.code,{children:"lastUpdatedDate"})," (not attribute-specific)"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"That scope of information would make debugging Catalog metadata issues significantly easier. Less work for admins/developers. Less downtime for the recommendations. Fewer support tickets for Salesforce."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NWbmJUAT/full-is-mcp-catalog-metadata-visibility",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h2,{id:"einstein-recipes",children:"Einstein Recipes"}),"\n",(0,i.jsx)(t.h3,{id:"multiple-dimensional-variations-for-products-in-einstein-recipes",children:"Multiple Dimensional Variations for Products in Einstein Recipes"}),"\n",(0,i.jsx)(t.p,{children:"Einstein Recipes are a powerful and flexible tool for creating recommendations, but the fourth step - Variations - is not on par with the rest of the options."}),"\n",(0,i.jsx)(t.p,{children:"You can configure only a single Dimensional Variation. While you can choose from multiple Item Types when configuring it, once you select one, that's the end of the story. You cannot limit recommended products to, for example, only 2 per category and 2 per brand."}),"\n",(0,i.jsx)(t.p,{children:"It heavily limits control over product recommendations, especially for e-commerce with multiple catalog objects. Currently, there is no real workaround."}),"\n",(0,i.jsx)(t.p,{children:"At the same time, it is possible to select multiple Boosters or Exclusions of the same type and configure them differently. It would be great to select multiple Dimensional Variations with different configurations."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000LAxE9UAL/multiple-dimensional-variations-for-products-in-einstein-recipes",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"department-variation-for-products-in-einstein-recipes",children:"Department Variation for Products in Einstein Recipes"}),"\n",(0,i.jsx)(t.p,{children:"Einstein Recipes lets you configure Dimensional Variations on the Category, but unfortunately, it works only on the primary category level. There is no option to select the Department (master category) level."}),"\n",(0,i.jsx)(t.p,{children:"It is very limiting for e-commerce with broad category trees like:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"monitors (gaming, graphic, office, medical, etc.)"}),"\n",(0,i.jsx)(t.li,{children:"computers (laptops, ultrabooks, convertibles, desktops, all-in-ones, etc.)"}),"\n",(0,i.jsx)(t.li,{children:"paints (acrylic, enamel, emulsion, etc.)."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"With such categories, recommendations with Category Variation configured can easily still be dominated by a similar product (like 12 monitor recommendations despite the Category Variation limit set to 3 due to similar primary categories)."}),"\n",(0,i.jsx)(t.p,{children:"There are two possible solutions to this issue:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Add Department as another option in the Item Type dropdown (as it is separate from Categories in Exclusions and Boosters) or"}),"\n",(0,i.jsx)(t.li,{children:"When the Item Type Category is selected, add a checkbox on whether Variation should happen on the primary Category or Department level."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Currently, the only workaround is to create a separate Catalog for Departments, but that defeats the purpose of Is Department checkbox on the default Category object."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000LAwlkUAD/department-variation-for-products-in-einstein-recipes",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"price-reduction-ingredient-in-einstein-recipes",children:"Price Reduction Ingredient in Einstein Recipes"}),"\n",(0,i.jsx)(t.p,{children:"Triggered Campaigns added a great option of targetting various events for Journey Builder sends. Among them, there are Catalog Triggers. Some of them, like Product Expiring Soon, are also available for Web with Einstein Recipes Ingredients."}),"\n",(0,i.jsx)(t.p,{children:"However, currently, there is no Ingredient for a popular e-commerce use case - Price Reduction."}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) has all the required information (the price and listPrice attributes used for the Triggered Campaign)."}),"\n",(0,i.jsx)(t.p,{children:"There is a workaround to make it possible now - calculating whether product price has been reduced externally and passing this information to a Related Catalog Object. However, there are better solutions for something that MCP is already doing out-of-the-box for another channel."}),"\n",(0,i.jsx)(t.p,{children:"There are two possible solutions to this:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Simple ingredient that returns all price-reduced items (similar to Trending)."}),"\n",(0,i.jsx)(t.li,{children:"Configurable ingredient with an option to select minimum price reduction percent."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The solution can further improve it by adding a Recipe Booster on the price reduction percent."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000MMauyUAD/price-reduction-ingredient-in-einstein-recipes",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"rating-count-in-recipes-rating-exclusion",children:"Rating Count in Recipe's Rating Exclusion"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) offers many Exclusions/Inclusions on Recipes that allow to hone the recommendations to the exact business needs. Among them there is Rating that allows to exclude/include items based on their rating (with an optional zero rating capture)."}),"\n",(0,i.jsx)(t.p,{children:"It would be great to have additional option in the same exclusion/inclusion to decide on rating count being greater than, less then or between two values. It should be easy, as the rating count is already part of the data model just like rating itself."}),"\n",(0,i.jsx)(t.p,{children:"This would enable use cases like:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Including only products with great rating that have at least 10 ratings."}),"\n",(0,i.jsx)(t.li,{children:"Excluding products with bad rating if they have more than 3 ratings."}),"\n",(0,i.jsx)(t.li,{children:"Including products user purchased that have less than 3 ratings for review-request campaign."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Currently such filters can be applied only on the Serverside Code level in the Template, which is not perfect as it can very easily limit the 12 received recommendations to just few or even zero. Having it on recipe level would be much more powerful."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000PjMarUAF/rating-count-in-is-recipes-rating-exclusion",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"abandoned-cart-retention-setting",children:"Abandoned Cart Retention setting"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) captures the cart information and makes it available for Einstein Recipes recommendation generation & context object in Campaign Template Server-Side Code. Unfortunately, we can only manage the cart content through proactive actions. If a client adds something to the cart and doesn't visit it for long periods, their cart content will remain in the MCP."}),"\n",(0,i.jsx)(t.p,{children:"Currently, a dirty workaround for that is a Web Campaign launching on the first visit in the session using the context.user object to check whether the user has a cart and its age. Depending on that, it can push clear cart action. But this could be more user and performance friendly."}),"\n",(0,i.jsx)(t.p,{children:"The better option would be adding an option to MCP settings that would allow each business to configure (or not) the retention of the cart data so that it can be removed from the system automatically after some time."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000OYz84UAD/abandoned-cart-retention-setting",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h2,{id:"etl",children:"ETL"}),"\n",(0,i.jsx)(t.h3,{id:"external-email-campaign-etl-experience-name--id",children:"External Email Campaign ETL Experience Name & ID"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_pers_etl_external_email_campaign_events_data_feed.htm",children:"External Email Campaign ETL"})," enables passing behavioural data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it is limited to a Campaign ID and Campaign Name. It is a problem because to benefit from that data in segmentation fully, it should also allow passing Email ID and Email Name."]}),"\n",(0,i.jsx)(t.p,{children:"The good part - only minimal work is needed, as the groundwork is already laid down. The trick is to leverage it by adding Experience ID and Experience Name columns to the ETL as fields for Email metadata."}),"\n",(0,i.jsxs)(t.p,{children:["When you check the event stream for an outcome from that ETL, you will see it described as ",(0,i.jsx)(t.code,{children:"Impression on experience Default in campaign {CAMPAIGN_NAME}"}),". What is more, the same event will already show (empty) properties ",(0,i.jsx)(t.code,{children:".etl_eeid"})," (ExternalExperienceID) and ",(0,i.jsx)(t.code,{children:".etl_een"})," (ExternalExperienceName) that are matching filled in ",(0,i.jsx)(t.code,{children:".etl_ecid"})," (ExternalCampaignID) and ",(0,i.jsx)(t.code,{children:".etl_ecn"})," (ExternalCampaignName). Finally, the segmentation is also ready for this extension, as the External Email Campaign ETL is leveraging the same Campaign Stat Count (or Recency) segmentation as Marketing Cloud Personalization (Interaction Studio) built-in campaigns, leveraging both Campaigns and Experiences."]}),"\n",(0,i.jsx)(t.p,{children:"Currently, one has to choose whether to segment only on emails (without any connection to a specific campaign) or only campaigns (without any ties to specific emails within the campaigns). With that ETL change, we could build segments focusing either on whole Campaigns (f.e. SFMC Journeys) or only particular Emails in selected Journeys (f.e. the First email in Welcome Journey). Easy win for truly targeted Personalization!"}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVNMuUAP/external-email-campaign-etl-experience-name-id",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"external-email-campaign-etl-send-segmentation",children:"External Email Campaign ETL Send Segmentation"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_pers_etl_external_email_campaign_events_data_feed.htm",children:"External Email Campaign ETL"})," enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, only segmentation based on Click and Open (View) is currently supported."]}),"\n",(0,i.jsxs)(t.p,{children:["Two options are available in the Campaigns - Campaign Stat Count (or Recency) segmentation rule - ",(0,i.jsx)(t.code,{children:"Get sent email campaign"})," and ",(0,i.jsx)(t.code,{children:"Qualify to view (control)"})," - but neither works for the Send event. It renders that event type useless right now."]}),"\n",(0,i.jsxs)(t.p,{children:["Enabling one of the above segmentation rules (preferably ",(0,i.jsx)(t.code,{children:"Get sent email campaign"}),") would unlock use cases like targeting Web or Push campaigns to users who we sent an email campaign, but they never opened it. Great way to fully leverage the cross-channel and real-time nature of Personalization."]}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVNN1UAP/external-email-campaign-etl-send-segmentation",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"external-email-campaign-etl-unsubscription-event-type",children:"External Email Campaign ETL Unsubscription Event Type"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_pers_etl_external_email_campaign_events_data_feed.htm",children:"External Email Campaign ETL"})," enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it cannot pass unsubscriptions."]}),"\n",(0,i.jsxs)(t.p,{children:["Official documentation mentions this event type in the ",(0,i.jsx)(t.code,{children:"eventType"})," column description but doesn't follow it up in the Example Values section. I also performed tests on my side and found it is impossible - Test Run in Feed returns an error: ",(0,i.jsx)(t.code,{children:"Transform error: Invalid eventType 'Unsubscribe'. Valid types are Send, Click, Open"}),". Unsubscription could be easily segmentable as an already existing ",(0,i.jsx)(t.code,{children:"Dismissal"})," action."]}),"\n",(0,i.jsx)(t.p,{children:"Unsubscribe should be added to unlock a wide range of targeted campaigns like surveys about unsubscription reasons, win-back campaigns or replacing email subscription prompts with other channel recommendations."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVN9DUAX/external-email-campaign-etl-unsubscription-event-type",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h2,{id:"segmentation",children:"Segmentation"}),"\n",(0,i.jsx)(t.h3,{id:"mcp-action-name-management",children:"MCP Action Name Management"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) captures actions from multiple sources to enable user segmentation and campaign targeting. Unfortunately, it does not offer any option to manage created actions, meaning everything that was pushed stays on the Dataset forever."}),"\n",(0,i.jsx)(t.p,{children:"At the very least, there should be an option to view and remove existing Actions that are no longer needed (for example, test or refactored ones). It would significantly improve user experience by providing control over the number of options in the segmentation/targeting picklists."}),"\n",(0,i.jsx)(t.p,{children:"Even better would be an option to merge existing actions so that we wouldn't lose any behavioural after refactoring the action names."}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"Partially implemented now - you can view and remove (but not merge or edit) actions by going in the MCP to Settings \xbb Modules \xbb Actions tab."})}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000OYyaAUAT/is-action-name-management",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h3,{id:"mcp-hourly-based-segmentation-rules",children:"MCP Hourly-based Segmentation Rules"}),"\n",(0,i.jsx)(t.p,{children:"Currently segmentation rules in the Marketing Cloud Personalization (Interaction Studio) are based on number of days. This is very limiting for on-the-site campaign targeting."}),"\n",(0,i.jsx)(t.p,{children:"For example, if we would like to display an infobar or slide-in for abandoned cart basket, current segemntation can only show us users that:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Do have Items in cart"}),"\n",(0,i.jsx)(t.li,{children:"Didn't do any Cart Action today"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"It means we can start abandoned cart Web Campaign only on the next day."}),"\n",(0,i.jsx)(t.p,{children:"With hourly based segmentation rules we could improve it greatly to show us users that:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Do have Items in cart"}),"\n",(0,i.jsx)(t.li,{children:"Didn't do any Cart Action in the last hour"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The best way to solve it would be to have additional picklist at the end of rule configuration where we can choose whether it should be day or hour based."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000PjMb6UAF/is-hourlybased-segmentation-rules",text:"Vote on IdeaExchange",newTab:"true"}),"\n",(0,i.jsx)(t.h2,{id:"reporting",children:"Reporting"}),"\n",(0,i.jsx)(t.h3,{id:"direct-attribution-on-mcp-campaign-level",children:"Direct Attribution on MCP Campaign level"}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud Personalization (Interaction Studio) offers a wide selection of Reports based on Activity, Results and Visits. It lacks, however, clear and detailed reporting on direct attribution from specific campaigns."}),"\n",(0,i.jsx)(t.p,{children:"Currently, attribution tracking is available in two places:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["The Main Dashboard (MCP Home Page) displays the Total Stats and Revenue Dashboard at the top. It showcases direct revenue from campaigns (The User clicks a product recommendation and purchases that specific promoted item in the selected timeframe). Unfortunately, it does not offer per campaign (and per experience) data, only a global value split between all Web Recommendations and all Email Recommendations (",(0,i.jsx)(t.a,{href:"../../../docs/interaction-studio/mcp-open-time-email",children:"OTE"}),")."]}),"\n",(0,i.jsx)(t.li,{children:"On the other hand, Specific Campaign Statistics display detailed statistics for each experience. Unfortunately, they don't offer direct attribution. While you can select whether the attribution should be based on click or view and what should be the attribution window, it is much more random data. View attribution means that if a user viewed a campaign and purchased anything (even wholly unrelated to the campaign recommendation) in the specified timeframe - it will be treated as revenue from that campaign. Similarly, click attribution means that if the user clicks on the campaign (for example, on a Laptop recommendation) and makes any purchase (for example, a new Monitor and cable), the whole revenue will still be attributed to the campaign. While it is acceptable for product-less campaigns (like Infobar) where direct attribution might not be possible, it's useless for meaningful analysis of recommendations conversion."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"There is no clean workaround for that problem - the Data Warehouse end of sales didn't help either. The only way right now is to append Campaign & Experience IDs to all links in the Campaigns and move the calculation to an external analytics system. That's a huge, complex work with a subpar experience of displaying reports in 3rd party solution, compared to having it directly in the system deploying those campaigns and tracking purchases - the system already calculating it for the existing total results."}),"\n",(0,i.jsx)(t.p,{children:"There should be an additional option on the Campaign Statistics level (on top of existing ones that are good for product-less campaigns) displaying attribution with the same logic as the Main Dashboard but with the per-experience detail."}),"\n",(0,i.jsx)(r.z,{link:"https://ideas.salesforce.com/s/idea/a0B8W00000NVTrFUAX/direct-attribution-on-is-campaign-level",text:"Vote on IdeaExchange",newTab:"true"})]})}function p(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},7271:(e,t,n)=>{n.d(t,{V:()=>o,z:()=>a});n(7294);var i=n(5893);const a=e=>{let{link:t,text:n,newTab:a=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:a?"_blank":"_self",children:n})})},o=e=>{let{linkLeft:t,textLeft:n,newTabLeft:a=!1,linkRight:o,textRight:r,newTabRight:s=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{class:"col col--12",children:[(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:a?"_blank":"_self",children:n}),(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:s?"_blank":"_self",children:r})]})})}},1872:(e,t,n)=>{n.d(t,{m:()=>o});n(7294);const i="leadText_qzwo";var a=n(5893);const o=e=>{let{content:t}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var i=n(7294);const a={},o=i.createContext(a);function r(e){const t=i.useContext(o);return i.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(a):e.components||a:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e6f5683.2ea92753.js b/assets/js/8e6f5683.04266e36.js similarity index 87% rename from assets/js/8e6f5683.2ea92753.js rename to assets/js/8e6f5683.04266e36.js index 29f5c72cb..9b44b16fe 100644 --- a/assets/js/8e6f5683.2ea92753.js +++ b/assets/js/8e6f5683.04266e36.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3864],{480:e=>{e.exports=JSON.parse('{"label":"Einstein","permalink":"/docs/tags/einstein","allTagsPath":"/docs/tags","count":1,"items":[{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3864],{480:e=>{e.exports=JSON.parse('{"label":"Einstein","permalink":"/docs/tags/einstein","allTagsPath":"/docs/tags","count":1,"items":[{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/9177d15f.9dbda4fa.js b/assets/js/9177d15f.0dc44d60.js similarity index 95% rename from assets/js/9177d15f.9dbda4fa.js rename to assets/js/9177d15f.0dc44d60.js index 271b3c73f..08531c7d2 100644 --- a/assets/js/9177d15f.9dbda4fa.js +++ b/assets/js/9177d15f.0dc44d60.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6440],{9110:e=>{e.exports=JSON.parse('{"label":"Debugging","permalink":"/docs/tags/debugging","allTagsPath":"/docs/tags","count":4,"items":[{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6440],{9110:e=>{e.exports=JSON.parse('{"label":"Debugging","permalink":"/docs/tags/debugging","allTagsPath":"/docs/tags","count":4,"items":[{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/9261.c462d503.js b/assets/js/9261.c462d503.js new file mode 100644 index 000000000..8301c6f96 --- /dev/null +++ b/assets/js/9261.c462d503.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9261],{9261:(e,n,t)=>{t.d(n,{a:()=>sn,c:()=>on});var r={};t.r(r),t.d(r,{attentionMarkers:()=>Le,contentInitial:()=>Ce,disable:()=>Me,document:()=>we,flow:()=>ze,flowInitial:()=>Te,insideSpan:()=>_e,string:()=>De,text:()=>Be});var i=t(6365);const u={};function o(e,n,t){if(function(e){return Boolean(e&&"object"==typeof e)}(e)){if("value"in e)return"html"!==e.type||t?e.value:"";if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return c(e.children,n,t)}return Array.isArray(e)?c(e,n,t):""}function c(e,n,t){const r=[];let i=-1;for(;++i<e.length;)r[i]=o(e[i],n,t);return r.join("")}function s(e,n,t,r){const i=e.length;let u,o=0;if(n=n<0?-n>i?0:i+n:n>i?i:n,t=t>0?t:0,r.length<1e4)u=Array.from(r),u.unshift(n,t),e.splice(...u);else for(t&&e.splice(n,t);o<r.length;)u=r.slice(o,o+1e4),u.unshift(n,0),e.splice(...u),o+=1e4,n+=1e4}function l(e,n){return e.length>0?(s(e,e.length,0,n),e):n}const a={}.hasOwnProperty;function f(e,n){let t;for(t in n){const r=(a.call(e,t)?e[t]:void 0)||(e[t]={}),i=n[t];let u;if(i)for(u in i){a.call(r,u)||(r[u]=[]);const e=i[u];d(r[u],Array.isArray(e)?e:e?[e]:[])}}}function d(e,n){let t=-1;const r=[];for(;++t<n.length;)("after"===n[t].add?e:r).push(n[t]);s(e,0,0,r)}const h=A(/[A-Za-z]/),p=A(/[\dA-Za-z]/),m=A(/[#-'*+\--9=?A-Z^-~]/);function g(e){return null!==e&&(e<32||127===e)}const x=A(/\d/),k=A(/[\dA-Fa-f]/),y=A(/[!-/:-@[-`{-~]/);function F(e){return null!==e&&e<-2}function v(e){return null!==e&&(e<0||32===e)}function b(e){return-2===e||-1===e||32===e}const S=A(/[!-\/:-@\[-`\{-~\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]/),E=A(/\s/);function A(e){return function(n){return null!==n&&e.test(String.fromCharCode(n))}}function I(e,n,t,r){const i=r?r-1:Number.POSITIVE_INFINITY;let u=0;return function(r){if(b(r))return e.enter(t),o(r);return n(r)};function o(r){return b(r)&&u++<i?(e.consume(r),o):(e.exit(t),n(r))}}const w={tokenize:function(e){const n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),I(e,n,"linePrefix")}),(function(n){return e.enter("paragraph"),r(n)}));let t;return n;function r(n){const r=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=r),t=r,i(n)}function i(n){return null===n?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(n)):F(n)?(e.consume(n),e.exit("chunkText"),r):(e.consume(n),i)}}};const C={tokenize:function(e){const n=this,t=[];let r,i,u,o=0;return c;function c(r){if(o<t.length){const i=t[o];return n.containerState=i[1],e.attempt(i[0].continuation,l,a)(r)}return a(r)}function l(e){if(o++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const t=n.events.length;let i,u=t;for(;u--;)if("exit"===n.events[u][0]&&"chunkFlow"===n.events[u][1].type){i=n.events[u][1].end;break}k(o);let c=t;for(;c<n.events.length;)n.events[c][1].end=Object.assign({},i),c++;return s(n.events,u+1,0,n.events.slice(t)),n.events.length=c,a(e)}return c(e)}function a(i){if(o===t.length){if(!r)return h(i);if(r.currentConstruct&&r.currentConstruct.concrete)return m(i);n.interrupt=Boolean(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(T,f,d)(i)}function f(e){return r&&y(),k(o),h(e)}function d(e){return n.parser.lazy[n.now().line]=o!==t.length,u=n.now().offset,m(e)}function h(t){return n.containerState={},e.attempt(T,p,m)(t)}function p(e){return o++,t.push([n.currentConstruct,n.containerState]),h(e)}function m(t){return null===t?(r&&y(),k(0),void e.consume(t)):(r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{contentType:"flow",previous:i,_tokenizer:r}),g(t))}function g(t){return null===t?(x(e.exit("chunkFlow"),!0),k(0),void e.consume(t)):F(t)?(e.consume(t),x(e.exit("chunkFlow")),o=0,n.interrupt=void 0,c):(e.consume(t),g)}function x(e,t){const c=n.sliceStream(e);if(t&&c.push(null),e.previous=i,i&&(i.next=e),i=e,r.defineSkip(e.start),r.write(c),n.parser.lazy[e.start.line]){let e=r.events.length;for(;e--;)if(r.events[e][1].start.offset<u&&(!r.events[e][1].end||r.events[e][1].end.offset>u))return;const t=n.events.length;let i,c,l=t;for(;l--;)if("exit"===n.events[l][0]&&"chunkFlow"===n.events[l][1].type){if(i){c=n.events[l][1].end;break}i=!0}for(k(o),e=t;e<n.events.length;)n.events[e][1].end=Object.assign({},c),e++;s(n.events,l+1,0,n.events.slice(t)),n.events.length=e}}function k(r){let i=t.length;for(;i-- >r;){const r=t[i];n.containerState=r[1],r[0].exit.call(n,e)}t.length=r}function y(){r.write([null]),i=void 0,r=void 0,n.containerState._closeFlow=void 0}}},T={tokenize:function(e,n,t){return I(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}};const z={tokenize:function(e,n,t){return function(n){return b(n)?I(e,r,"linePrefix")(n):r(n)};function r(e){return null===e||F(e)?n(e):t(e)}},partial:!0};function D(e){const n={};let t,r,i,u,o,c,l,a=-1;for(;++a<e.length;){for(;a in n;)a=n[a];if(t=e[a],a&&"chunkFlow"===t[1].type&&"listItemPrefix"===e[a-1][1].type&&(c=t[1]._tokenizer.events,i=0,i<c.length&&"lineEndingBlank"===c[i][1].type&&(i+=2),i<c.length&&"content"===c[i][1].type))for(;++i<c.length&&"content"!==c[i][1].type;)"chunkText"===c[i][1].type&&(c[i][1]._isInFirstContentOfListItem=!0,i++);if("enter"===t[0])t[1].contentType&&(Object.assign(n,B(e,a)),a=n[a],l=!0);else if(t[1]._container){for(i=a,r=void 0;i--&&(u=e[i],"lineEnding"===u[1].type||"lineEndingBlank"===u[1].type);)"enter"===u[0]&&(r&&(e[r][1].type="lineEndingBlank"),u[1].type="lineEnding",r=i);r&&(t[1].end=Object.assign({},e[r][1].start),o=e.slice(r,a),o.unshift(t),s(e,r,a-r+1,o))}}return!l}function B(e,n){const t=e[n][1],r=e[n][2];let i=n-1;const u=[],o=t._tokenizer||r.parser[t.contentType](t.start),c=o.events,l=[],a={};let f,d,h=-1,p=t,m=0,g=0;const x=[g];for(;p;){for(;e[++i][1]!==p;);u.push(i),p._tokenizer||(f=r.sliceStream(p),p.next||f.push(null),d&&o.defineSkip(p.start),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(f),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),d=p,p=p.next}for(p=t;++h<c.length;)"exit"===c[h][0]&&"enter"===c[h-1][0]&&c[h][1].type===c[h-1][1].type&&c[h][1].start.line!==c[h][1].end.line&&(g=h+1,x.push(g),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(o.events=[],p?(p._tokenizer=void 0,p.previous=void 0):x.pop(),h=x.length;h--;){const n=c.slice(x[h],x[h+1]),t=u.pop();l.unshift([t,t+n.length-1]),s(e,t,2,n)}for(h=-1;++h<l.length;)a[m+l[h][0]]=m+l[h][1],m+=l[h][1]-l[h][0]-1;return a}const _={tokenize:function(e,n){let t;return function(n){return e.enter("content"),t=e.enter("chunkContent",{contentType:"content"}),r(n)};function r(n){return null===n?i(n):F(n)?e.check(L,u,i)(n):(e.consume(n),r)}function i(t){return e.exit("chunkContent"),e.exit("content"),n(t)}function u(n){return e.consume(n),e.exit("chunkContent"),t.next=e.enter("chunkContent",{contentType:"content",previous:t}),t=t.next,r}},resolve:function(e){return D(e),e}},L={tokenize:function(e,n,t){const r=this;return function(n){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),I(e,i,"linePrefix")};function i(i){if(null===i||F(i))return t(i);const u=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(i):e.interrupt(r.parser.constructs.flow,t,n)(i)}},partial:!0};const M={tokenize:function(e){const n=this,t=e.attempt(z,(function(r){if(null===r)return void e.consume(r);return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}),e.attempt(this.parser.constructs.flowInitial,r,I(e,e.attempt(this.parser.constructs.flow,r,e.attempt(_,r)),"linePrefix")));return t;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),n.currentConstruct=void 0,t;e.consume(r)}}};const P={resolveAll:R()},O=H("string"),j=H("text");function H(e){return{tokenize:function(n){const t=this,r=this.parser.constructs[e],i=n.attempt(r,u,o);return u;function u(e){return s(e)?i(e):o(e)}function o(e){if(null!==e)return n.enter("data"),n.consume(e),c;n.consume(e)}function c(e){return s(e)?(n.exit("data"),i(e)):(n.consume(e),c)}function s(e){if(null===e)return!0;const n=r[e];let i=-1;if(n)for(;++i<n.length;){const e=n[i];if(!e.previous||e.previous.call(t,t.previous))return!0}return!1}},resolveAll:R("text"===e?q:void 0)}}function R(e){return function(n,t){let r,i=-1;for(;++i<=n.length;)void 0===r?n[i]&&"data"===n[i][1].type&&(r=i,i++):n[i]&&"data"===n[i][1].type||(i!==r+2&&(n[r][1].end=n[i-1][1].end,n.splice(r+2,i-r-2),i=r+2),r=void 0);return e?e(n,t):n}}function q(e,n){let t=0;for(;++t<=e.length;)if((t===e.length||"lineEnding"===e[t][1].type)&&"data"===e[t-1][1].type){const r=e[t-1][1],i=n.sliceStream(r);let u,o=i.length,c=-1,s=0;for(;o--;){const e=i[o];if("string"==typeof e){for(c=e.length;32===e.charCodeAt(c-1);)s++,c--;if(c)break;c=-1}else if(-2===e)u=!0,s++;else if(-1!==e){o++;break}}if(s){const i={type:t===e.length||u||s<2?"lineSuffix":"hardBreakTrailing",start:{line:r.end.line,column:r.end.column-s,offset:r.end.offset-s,_index:r.start._index+o,_bufferIndex:o?c:r.start._bufferIndex+c},end:Object.assign({},r.end)};r.end=Object.assign({},i.start),r.start.offset===r.end.offset?Object.assign(r,i):(e.splice(t,0,["enter",i,n],["exit",i,n]),t+=2)}t++}return e}function V(e,n,t){const r=[];let i=-1;for(;++i<e.length;){const u=e[i].resolveAll;u&&!r.includes(u)&&(n=u(n,t),r.push(u))}return n}function Q(e,n,t){let r=Object.assign(t?Object.assign({},t):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1});const i={},u=[];let o=[],c=[],a=!0;const f={consume:function(e){F(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,S()):-1!==e&&(r.column++,r.offset++);r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++));d.previous=e,a=!0},enter:function(e,n){const t=n||{};return t.type=e,t.start=g(),d.events.push(["enter",t,d]),c.push(t),t},exit:function(e){const n=c.pop();return n.end=g(),d.events.push(["exit",n,d]),n},attempt:v((function(e,n){b(e,n.from)})),check:v(y),interrupt:v(y,{interrupt:!0})},d={previous:null,code:null,containerState:{},events:[],parser:e,sliceStream:m,sliceSerialize:function(e,n){return function(e,n){let t=-1;const r=[];let i;for(;++t<e.length;){const u=e[t];let o;if("string"==typeof u)o=u;else switch(u){case-5:o="\r";break;case-4:o="\n";break;case-3:o="\r\n";break;case-2:o=n?" ":"\t";break;case-1:if(!n&&i)continue;o=" ";break;default:o=String.fromCharCode(u)}i=-2===u,r.push(o)}return r.join("")}(m(e),n)},now:g,defineSkip:function(e){i[e.line]=e.column,S()},write:function(e){if(o=l(o,e),x(),null!==o[o.length-1])return[];return b(n,0),d.events=V(u,d.events,d),d.events}};let h,p=n.tokenize.call(d,f);return n.resolveAll&&u.push(n),d;function m(e){return function(e,n){const t=n.start._index,r=n.start._bufferIndex,i=n.end._index,u=n.end._bufferIndex;let o;if(t===i)o=[e[t].slice(r,u)];else{if(o=e.slice(t,i),r>-1){const e=o[0];"string"==typeof e?o[0]=e.slice(r):o.shift()}u>0&&o.push(e[i].slice(0,u))}return o}(o,e)}function g(){const{line:e,column:n,offset:t,_index:i,_bufferIndex:u}=r;return{line:e,column:n,offset:t,_index:i,_bufferIndex:u}}function x(){let e;for(;r._index<o.length;){const n=o[r._index];if("string"==typeof n)for(e=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===e&&r._bufferIndex<n.length;)k(n.charCodeAt(r._bufferIndex));else k(n)}}function k(e){a=void 0,h=e,p=p(e)}function y(e,n){n.restore()}function v(e,n){return function(t,i,u){let o,s,l,h;return Array.isArray(t)?p(t):"tokenize"in t?p([t]):function(e){return n;function n(n){const t=null!==n&&e[n],r=null!==n&&e.null;return p([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(r)?r:r?[r]:[]])(n)}}(t);function p(e){return o=e,s=0,0===e.length?u:m(e[s])}function m(e){return function(t){h=function(){const e=g(),n=d.previous,t=d.currentConstruct,i=d.events.length,u=Array.from(c);return{restore:o,from:i};function o(){r=e,d.previous=n,d.currentConstruct=t,d.events.length=i,c=u,S()}}(),l=e,e.partial||(d.currentConstruct=e);if(e.name&&d.parser.constructs.disable.null.includes(e.name))return k(t);return e.tokenize.call(n?Object.assign(Object.create(d),n):d,f,x,k)(t)}}function x(n){return a=!0,e(l,h),i}function k(e){return a=!0,h.restore(),++s<o.length?m(o[s]):u}}}function b(e,n){e.resolveAll&&!u.includes(e)&&u.push(e),e.resolve&&s(d.events,n,d.events.length-n,e.resolve(d.events.slice(n),d)),e.resolveTo&&(d.events=e.resolveTo(d.events,d))}function S(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}const N={name:"thematicBreak",tokenize:function(e,n,t){let r,i=0;return function(n){return e.enter("thematicBreak"),function(e){return r=e,u(e)}(n)};function u(u){return u===r?(e.enter("thematicBreakSequence"),o(u)):i>=3&&(null===u||F(u))?(e.exit("thematicBreak"),n(u)):t(u)}function o(n){return n===r?(e.consume(n),i++,o):(e.exit("thematicBreakSequence"),b(n)?I(e,u,"whitespace")(n):u(n))}}};const U={name:"list",tokenize:function(e,n,t){const r=this,i=r.events[r.events.length-1];let u=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(n){const i=r.containerState.type||(42===n||43===n||45===n?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||n===r.containerState.marker:x(n)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===n||45===n?e.check(N,t,s)(n):s(n);if(!r.interrupt||49===n)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(n)}return t(n)};function c(n){return x(n)&&++o<10?(e.consume(n),c):(!r.interrupt||o<2)&&(r.containerState.marker?n===r.containerState.marker:41===n||46===n)?(e.exit("listItemValue"),s(n)):t(n)}function s(n){return e.enter("listItemMarker"),e.consume(n),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||n,e.check(z,r.interrupt?t:l,e.attempt($,f,a))}function l(e){return r.containerState.initialBlankLine=!0,u++,f(e)}function a(n){return b(n)?(e.enter("listItemPrefixWhitespace"),e.consume(n),e.exit("listItemPrefixWhitespace"),f):t(n)}function f(t){return r.containerState.size=u+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(t)}},continuation:{tokenize:function(e,n,t){const r=this;return r.containerState._closeFlow=void 0,e.check(z,(function(t){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,I(e,n,"listItemIndent",r.containerState.size+1)(t)}),(function(t){if(r.containerState.furtherBlankLines||!b(t))return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(t);return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(W,n,i)(t)}));function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,I(e,e.attempt(U,n,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)}},$={tokenize:function(e,n,t){const r=this;return I(e,(function(e){const i=r.events[r.events.length-1];return!b(e)&&i&&"listItemPrefixWhitespace"===i[1].type?n(e):t(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)},partial:!0},W={tokenize:function(e,n,t){const r=this;return I(e,(function(e){const i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?n(e):t(e)}),"listItemIndent",r.containerState.size+1)},partial:!0};const Z={name:"blockQuote",tokenize:function(e,n,t){const r=this;return function(n){if(62===n){const t=r.containerState;return t.open||(e.enter("blockQuote",{_container:!0}),t.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(n),e.exit("blockQuoteMarker"),i}return t(n)};function i(t){return b(t)?(e.enter("blockQuotePrefixWhitespace"),e.consume(t),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(t))}},continuation:{tokenize:function(e,n,t){const r=this;return function(n){if(b(n))return I(e,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n);return i(n)};function i(r){return e.attempt(Z,n,t)(r)}}},exit:function(e){e.exit("blockQuote")}};function Y(e,n,t,r,i,u,o,c,s){const l=s||Number.POSITIVE_INFINITY;let a=0;return function(n){if(60===n)return e.enter(r),e.enter(i),e.enter(u),e.consume(n),e.exit(u),f;if(null===n||32===n||41===n||g(n))return t(n);return e.enter(r),e.enter(o),e.enter(c),e.enter("chunkString",{contentType:"string"}),p(n)};function f(t){return 62===t?(e.enter(u),e.consume(t),e.exit(u),e.exit(i),e.exit(r),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),d(t))}function d(n){return 62===n?(e.exit("chunkString"),e.exit(c),f(n)):null===n||60===n||F(n)?t(n):(e.consume(n),92===n?h:d)}function h(n){return 60===n||62===n||92===n?(e.consume(n),d):d(n)}function p(i){return a||null!==i&&41!==i&&!v(i)?a<l&&40===i?(e.consume(i),a++,p):41===i?(e.consume(i),a--,p):null===i||32===i||40===i||g(i)?t(i):(e.consume(i),92===i?m:p):(e.exit("chunkString"),e.exit(c),e.exit(o),e.exit(r),n(i))}function m(n){return 40===n||41===n||92===n?(e.consume(n),p):p(n)}}function J(e,n,t,r,i,u){const o=this;let c,s=0;return function(n){return e.enter(r),e.enter(i),e.consume(n),e.exit(i),e.enter(u),l};function l(f){return s>999||null===f||91===f||93===f&&!c||94===f&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?t(f):93===f?(e.exit(u),e.enter(i),e.consume(f),e.exit(i),e.exit(r),n):F(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),l):(e.enter("chunkString",{contentType:"string"}),a(f))}function a(n){return null===n||91===n||93===n||F(n)||s++>999?(e.exit("chunkString"),l(n)):(e.consume(n),c||(c=!b(n)),92===n?f:a)}function f(n){return 91===n||92===n||93===n?(e.consume(n),s++,a):a(n)}}function G(e,n,t,r,i,u){let o;return function(n){if(34===n||39===n||40===n)return e.enter(r),e.enter(i),e.consume(n),e.exit(i),o=40===n?41:n,c;return t(n)};function c(t){return t===o?(e.enter(i),e.consume(t),e.exit(i),e.exit(r),n):(e.enter(u),s(t))}function s(n){return n===o?(e.exit(u),c(o)):null===n?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),I(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),l(n))}function l(n){return n===o||null===n||F(n)?(e.exit("chunkString"),s(n)):(e.consume(n),92===n?a:l)}function a(n){return n===o||92===n?(e.consume(n),l):l(n)}}function K(e,n){let t;return function r(i){if(F(i))return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t=!0,r;if(b(i))return I(e,r,t?"linePrefix":"lineSuffix")(i);return n(i)}}function X(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ee={name:"definition",tokenize:function(e,n,t){const r=this;let i;return function(n){return e.enter("definition"),function(n){return J.call(r,e,u,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(n)}(n)};function u(n){return i=X(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),58===n?(e.enter("definitionMarker"),e.consume(n),e.exit("definitionMarker"),o):t(n)}function o(n){return v(n)?K(e,c)(n):c(n)}function c(n){return Y(e,s,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(n)}function s(n){return e.attempt(ne,l,l)(n)}function l(n){return b(n)?I(e,a,"whitespace")(n):a(n)}function a(u){return null===u||F(u)?(e.exit("definition"),r.parser.defined.push(i),n(u)):t(u)}}},ne={tokenize:function(e,n,t){return function(n){return v(n)?K(e,r)(n):t(n)};function r(n){return G(e,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(n)}function i(n){return b(n)?I(e,u,"whitespace")(n):u(n)}function u(e){return null===e||F(e)?n(e):t(e)}},partial:!0};const te={name:"codeIndented",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("codeIndented"),I(e,i,"linePrefix",5)(n)};function i(e){const n=r.events[r.events.length-1];return n&&"linePrefix"===n[1].type&&n[2].sliceSerialize(n[1],!0).length>=4?u(e):t(e)}function u(n){return null===n?c(n):F(n)?e.attempt(re,u,c)(n):(e.enter("codeFlowValue"),o(n))}function o(n){return null===n||F(n)?(e.exit("codeFlowValue"),u(n)):(e.consume(n),o)}function c(t){return e.exit("codeIndented"),n(t)}}},re={tokenize:function(e,n,t){const r=this;return i;function i(n){return r.parser.lazy[r.now().line]?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i):I(e,u,"linePrefix",5)(n)}function u(e){const u=r.events[r.events.length-1];return u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(e):F(e)?i(e):t(e)}},partial:!0};const ie={name:"headingAtx",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("atxHeading"),function(n){return e.enter("atxHeadingSequence"),i(n)}(n)};function i(n){return 35===n&&r++<6?(e.consume(n),i):null===n||v(n)?(e.exit("atxHeadingSequence"),u(n)):t(n)}function u(t){return 35===t?(e.enter("atxHeadingSequence"),o(t)):null===t||F(t)?(e.exit("atxHeading"),n(t)):b(t)?I(e,u,"whitespace")(t):(e.enter("atxHeadingText"),c(t))}function o(n){return 35===n?(e.consume(n),o):(e.exit("atxHeadingSequence"),u(n))}function c(n){return null===n||35===n||v(n)?(e.exit("atxHeadingText"),u(n)):(e.consume(n),c)}},resolve:function(e,n){let t,r,i=e.length-2,u=3;"whitespace"===e[u][1].type&&(u+=2);i-2>u&&"whitespace"===e[i][1].type&&(i-=2);"atxHeadingSequence"===e[i][1].type&&(u===i-1||i-4>u&&"whitespace"===e[i-2][1].type)&&(i-=u+1===i?2:4);i>u&&(t={type:"atxHeadingText",start:e[u][1].start,end:e[i][1].end},r={type:"chunkText",start:e[u][1].start,end:e[i][1].end,contentType:"text"},s(e,u,i-u+1,[["enter",t,n],["enter",r,n],["exit",r,n],["exit",t,n]]));return e}};const ue={name:"setextUnderline",tokenize:function(e,n,t){const r=this;let i;return function(n){let o,c=r.events.length;for(;c--;)if("lineEnding"!==r.events[c][1].type&&"linePrefix"!==r.events[c][1].type&&"content"!==r.events[c][1].type){o="paragraph"===r.events[c][1].type;break}if(!r.parser.lazy[r.now().line]&&(r.interrupt||o))return e.enter("setextHeadingLine"),i=n,function(n){return e.enter("setextHeadingLineSequence"),u(n)}(n);return t(n)};function u(n){return n===i?(e.consume(n),u):(e.exit("setextHeadingLineSequence"),b(n)?I(e,o,"lineSuffix")(n):o(n))}function o(r){return null===r||F(r)?(e.exit("setextHeadingLine"),n(r)):t(r)}},resolveTo:function(e,n){let t,r,i,u=e.length;for(;u--;)if("enter"===e[u][0]){if("content"===e[u][1].type){t=u;break}"paragraph"===e[u][1].type&&(r=u)}else"content"===e[u][1].type&&e.splice(u,1),i||"definition"!==e[u][1].type||(i=u);const o={type:"setextHeading",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)};e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,n]),e.splice(i+1,0,["exit",e[t][1],n]),e[t][1].end=Object.assign({},e[i][1].end)):e[t][1]=o;return e.push(["exit",o,n]),e}};const oe=["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"],ce=["pre","script","style","textarea"],se={name:"htmlFlow",tokenize:function(e,n,t){const r=this;let i,u,o,c,s;return function(n){return function(n){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),l}(n)};function l(c){return 33===c?(e.consume(c),a):47===c?(e.consume(c),u=!0,m):63===c?(e.consume(c),i=3,r.interrupt?n:H):h(c)?(e.consume(c),o=String.fromCharCode(c),g):t(c)}function a(u){return 45===u?(e.consume(u),i=2,f):91===u?(e.consume(u),i=5,c=0,d):h(u)?(e.consume(u),i=4,r.interrupt?n:H):t(u)}function f(i){return 45===i?(e.consume(i),r.interrupt?n:H):t(i)}function d(i){const u="CDATA[";return i===u.charCodeAt(c++)?(e.consume(i),6===c?r.interrupt?n:D:d):t(i)}function m(n){return h(n)?(e.consume(n),o=String.fromCharCode(n),g):t(n)}function g(c){if(null===c||47===c||62===c||v(c)){const s=47===c,l=o.toLowerCase();return s||u||!ce.includes(l)?oe.includes(o.toLowerCase())?(i=6,s?(e.consume(c),x):r.interrupt?n(c):D(c)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(c):u?k(c):y(c)):(i=1,r.interrupt?n(c):D(c))}return 45===c||p(c)?(e.consume(c),o+=String.fromCharCode(c),g):t(c)}function x(i){return 62===i?(e.consume(i),r.interrupt?n:D):t(i)}function k(n){return b(n)?(e.consume(n),k):T(n)}function y(n){return 47===n?(e.consume(n),T):58===n||95===n||h(n)?(e.consume(n),S):b(n)?(e.consume(n),y):T(n)}function S(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),S):E(n)}function E(n){return 61===n?(e.consume(n),A):b(n)?(e.consume(n),E):y(n)}function A(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),s=n,I):b(n)?(e.consume(n),A):w(n)}function I(n){return n===s?(e.consume(n),s=null,C):null===n||F(n)?t(n):(e.consume(n),I)}function w(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||v(n)?E(n):(e.consume(n),w)}function C(e){return 47===e||62===e||b(e)?y(e):t(e)}function T(n){return 62===n?(e.consume(n),z):t(n)}function z(n){return null===n||F(n)?D(n):b(n)?(e.consume(n),z):t(n)}function D(n){return 45===n&&2===i?(e.consume(n),M):60===n&&1===i?(e.consume(n),P):62===n&&4===i?(e.consume(n),R):63===n&&3===i?(e.consume(n),H):93===n&&5===i?(e.consume(n),j):!F(n)||6!==i&&7!==i?null===n||F(n)?(e.exit("htmlFlowData"),B(n)):(e.consume(n),D):(e.exit("htmlFlowData"),e.check(le,q,B)(n))}function B(n){return e.check(ae,_,q)(n)}function _(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),L}function L(n){return null===n||F(n)?B(n):(e.enter("htmlFlowData"),D(n))}function M(n){return 45===n?(e.consume(n),H):D(n)}function P(n){return 47===n?(e.consume(n),o="",O):D(n)}function O(n){if(62===n){const t=o.toLowerCase();return ce.includes(t)?(e.consume(n),R):D(n)}return h(n)&&o.length<8?(e.consume(n),o+=String.fromCharCode(n),O):D(n)}function j(n){return 93===n?(e.consume(n),H):D(n)}function H(n){return 62===n?(e.consume(n),R):45===n&&2===i?(e.consume(n),H):D(n)}function R(n){return null===n||F(n)?(e.exit("htmlFlowData"),q(n)):(e.consume(n),R)}function q(t){return e.exit("htmlFlow"),n(t)}},resolveTo:function(e){let n=e.length;for(;n--&&("enter"!==e[n][0]||"htmlFlow"!==e[n][1].type););n>1&&"linePrefix"===e[n-2][1].type&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2));return e},concrete:!0},le={tokenize:function(e,n,t){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(z,n,t)}},partial:!0},ae={tokenize:function(e,n,t){const r=this;return function(n){if(F(n))return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i;return t(n)};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0};const fe={tokenize:function(e,n,t){const r=this;return function(n){if(null===n)return t(n);return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0},de={name:"codeFenced",tokenize:function(e,n,t){const r=this,i={tokenize:function(e,n,t){let i=0;return o;function o(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),s}function s(n){return e.enter("codeFencedFence"),b(n)?I(e,l,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):l(n)}function l(n){return n===u?(e.enter("codeFencedFenceSequence"),a(n)):t(n)}function a(n){return n===u?(i++,e.consume(n),a):i>=c?(e.exit("codeFencedFenceSequence"),b(n)?I(e,f,"whitespace")(n):f(n)):t(n)}function f(r){return null===r||F(r)?(e.exit("codeFencedFence"),n(r)):t(r)}},partial:!0};let u,o=0,c=0;return function(n){return function(n){const t=r.events[r.events.length-1];return o=t&&"linePrefix"===t[1].type?t[2].sliceSerialize(t[1],!0).length:0,u=n,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s(n)}(n)};function s(n){return n===u?(c++,e.consume(n),s):c<3?t(n):(e.exit("codeFencedFenceSequence"),b(n)?I(e,l,"whitespace")(n):l(n))}function l(t){return null===t||F(t)?(e.exit("codeFencedFence"),r.interrupt?n(t):e.check(fe,h,k)(t)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),a(t))}function a(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(n)):b(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),I(e,f,"whitespace")(n)):96===n&&n===u?t(n):(e.consume(n),a)}function f(n){return null===n||F(n)?l(n):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),d(n))}function d(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(n)):96===n&&n===u?t(n):(e.consume(n),d)}function h(n){return e.attempt(i,k,p)(n)}function p(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),m}function m(n){return o>0&&b(n)?I(e,g,"linePrefix",o+1)(n):g(n)}function g(n){return null===n||F(n)?e.check(fe,h,k)(n):(e.enter("codeFlowValue"),x(n))}function x(n){return null===n||F(n)?(e.exit("codeFlowValue"),g(n)):(e.consume(n),x)}function k(t){return e.exit("codeFenced"),n(t)}},concrete:!0};const he=document.createElement("i");function pe(e){const n="&"+e+";";he.innerHTML=n;const t=he.textContent;return(59!==t.charCodeAt(t.length-1)||"semi"===e)&&(t!==n&&t)}const me={name:"characterReference",tokenize:function(e,n,t){const r=this;let i,u,o=0;return function(n){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(n),e.exit("characterReferenceMarker"),c};function c(n){return 35===n?(e.enter("characterReferenceMarkerNumeric"),e.consume(n),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),i=31,u=p,l(n))}function s(n){return 88===n||120===n?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(n),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),i=6,u=k,l):(e.enter("characterReferenceValue"),i=7,u=x,l(n))}function l(c){if(59===c&&o){const i=e.exit("characterReferenceValue");return u!==p||pe(r.sliceSerialize(i))?(e.enter("characterReferenceMarker"),e.consume(c),e.exit("characterReferenceMarker"),e.exit("characterReference"),n):t(c)}return u(c)&&o++<i?(e.consume(c),l):t(c)}}};const ge={name:"characterEscape",tokenize:function(e,n,t){return function(n){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(n),e.exit("escapeMarker"),r};function r(r){return y(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):t(r)}}};const xe={name:"lineEnding",tokenize:function(e,n){return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),I(e,n,"linePrefix")}}};const ke={name:"labelEnd",tokenize:function(e,n,t){const r=this;let i,u,o=r.events.length;for(;o--;)if(("labelImage"===r.events[o][1].type||"labelLink"===r.events[o][1].type)&&!r.events[o][1]._balanced){i=r.events[o][1];break}return function(n){if(!i)return t(n);if(i._inactive)return a(n);return u=r.parser.defined.includes(X(r.sliceSerialize({start:i.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelEnd"),c};function c(n){return 40===n?e.attempt(ye,l,u?l:a)(n):91===n?e.attempt(Fe,l,u?s:a)(n):u?l(n):a(n)}function s(n){return e.attempt(ve,l,a)(n)}function l(e){return n(e)}function a(e){return i._balanced=!0,t(e)}},resolveTo:function(e,n){let t,r,i,u,o=e.length,c=0;for(;o--;)if(t=e[o][1],r){if("link"===t.type||"labelLink"===t.type&&t._inactive)break;"enter"===e[o][0]&&"labelLink"===t.type&&(t._inactive=!0)}else if(i){if("enter"===e[o][0]&&("labelImage"===t.type||"labelLink"===t.type)&&!t._balanced&&(r=o,"labelLink"!==t.type)){c=2;break}}else"labelEnd"===t.type&&(i=o);const a={type:"labelLink"===e[r][1].type?"link":"image",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)},f={type:"label",start:Object.assign({},e[r][1].start),end:Object.assign({},e[i][1].end)},d={type:"labelText",start:Object.assign({},e[r+c+2][1].end),end:Object.assign({},e[i-2][1].start)};return u=[["enter",a,n],["enter",f,n]],u=l(u,e.slice(r+1,r+c+3)),u=l(u,[["enter",d,n]]),u=l(u,V(n.parser.constructs.insideSpan.null,e.slice(r+c+4,i-3),n)),u=l(u,[["exit",d,n],e[i-2],e[i-1],["exit",f,n]]),u=l(u,e.slice(i+1)),u=l(u,[["exit",a,n]]),s(e,r,e.length,u),e},resolveAll:function(e){let n=-1;for(;++n<e.length;){const t=e[n][1];"labelImage"!==t.type&&"labelLink"!==t.type&&"labelEnd"!==t.type||(e.splice(n+1,"labelImage"===t.type?4:2),t.type="data",n++)}return e}},ye={tokenize:function(e,n,t){return function(n){return e.enter("resource"),e.enter("resourceMarker"),e.consume(n),e.exit("resourceMarker"),r};function r(n){return v(n)?K(e,i)(n):i(n)}function i(n){return 41===n?l(n):Y(e,u,o,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(n)}function u(n){return v(n)?K(e,c)(n):l(n)}function o(e){return t(e)}function c(n){return 34===n||39===n||40===n?G(e,s,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(n):l(n)}function s(n){return v(n)?K(e,l)(n):l(n)}function l(r){return 41===r?(e.enter("resourceMarker"),e.consume(r),e.exit("resourceMarker"),e.exit("resource"),n):t(r)}}},Fe={tokenize:function(e,n,t){const r=this;return function(n){return J.call(r,e,i,u,"reference","referenceMarker","referenceString")(n)};function i(e){return r.parser.defined.includes(X(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?n(e):t(e)}function u(e){return t(e)}}},ve={tokenize:function(e,n,t){return function(n){return e.enter("reference"),e.enter("referenceMarker"),e.consume(n),e.exit("referenceMarker"),r};function r(r){return 93===r?(e.enter("referenceMarker"),e.consume(r),e.exit("referenceMarker"),e.exit("reference"),n):t(r)}}};function be(e){return null===e||v(e)||E(e)?1:S(e)?2:void 0}const Se={name:"attention",tokenize:function(e,n){const t=this.parser.constructs.attentionMarkers.null,r=this.previous,i=be(r);let u;return function(n){return u=n,e.enter("attentionSequence"),o(n)};function o(c){if(c===u)return e.consume(c),o;const s=e.exit("attentionSequence"),l=be(c),a=!l||2===l&&i||t.includes(c),f=!i||2===i&&l||t.includes(r);return s._open=Boolean(42===u?a:a&&(i||!f)),s._close=Boolean(42===u?f:f&&(l||!a)),n(c)}},resolveAll:function(e,n){let t,r,i,u,o,c,a,f,d=-1;for(;++d<e.length;)if("enter"===e[d][0]&&"attentionSequence"===e[d][1].type&&e[d][1]._close)for(t=d;t--;)if("exit"===e[t][0]&&"attentionSequence"===e[t][1].type&&e[t][1]._open&&n.sliceSerialize(e[t][1]).charCodeAt(0)===n.sliceSerialize(e[d][1]).charCodeAt(0)){if((e[t][1]._close||e[d][1]._open)&&(e[d][1].end.offset-e[d][1].start.offset)%3&&!((e[t][1].end.offset-e[t][1].start.offset+e[d][1].end.offset-e[d][1].start.offset)%3))continue;c=e[t][1].end.offset-e[t][1].start.offset>1&&e[d][1].end.offset-e[d][1].start.offset>1?2:1;const h=Object.assign({},e[t][1].end),p=Object.assign({},e[d][1].start);Ee(h,-c),Ee(p,c),u={type:c>1?"strongSequence":"emphasisSequence",start:h,end:Object.assign({},e[t][1].end)},o={type:c>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[d][1].start),end:p},i={type:c>1?"strongText":"emphasisText",start:Object.assign({},e[t][1].end),end:Object.assign({},e[d][1].start)},r={type:c>1?"strong":"emphasis",start:Object.assign({},u.start),end:Object.assign({},o.end)},e[t][1].end=Object.assign({},u.start),e[d][1].start=Object.assign({},o.end),a=[],e[t][1].end.offset-e[t][1].start.offset&&(a=l(a,[["enter",e[t][1],n],["exit",e[t][1],n]])),a=l(a,[["enter",r,n],["enter",u,n],["exit",u,n],["enter",i,n]]),a=l(a,V(n.parser.constructs.insideSpan.null,e.slice(t+1,d),n)),a=l(a,[["exit",i,n],["enter",o,n],["exit",o,n],["exit",r,n]]),e[d][1].end.offset-e[d][1].start.offset?(f=2,a=l(a,[["enter",e[d][1],n],["exit",e[d][1],n]])):f=0,s(e,t-1,d-t+3,a),d=t+a.length-f-2;break}d=-1;for(;++d<e.length;)"attentionSequence"===e[d][1].type&&(e[d][1].type="data");return e}};function Ee(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const Ae={name:"htmlText",tokenize:function(e,n,t){const r=this;let i,u,o;return function(n){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(n),c};function c(n){return 33===n?(e.consume(n),s):47===n?(e.consume(n),A):63===n?(e.consume(n),S):h(n)?(e.consume(n),T):t(n)}function s(n){return 45===n?(e.consume(n),l):91===n?(e.consume(n),u=0,m):h(n)?(e.consume(n),y):t(n)}function l(n){return 45===n?(e.consume(n),d):t(n)}function a(n){return null===n?t(n):45===n?(e.consume(n),f):F(n)?(o=a,j(n)):(e.consume(n),a)}function f(n){return 45===n?(e.consume(n),d):a(n)}function d(e){return 62===e?O(e):45===e?f(e):a(e)}function m(n){const r="CDATA[";return n===r.charCodeAt(u++)?(e.consume(n),6===u?g:m):t(n)}function g(n){return null===n?t(n):93===n?(e.consume(n),x):F(n)?(o=g,j(n)):(e.consume(n),g)}function x(n){return 93===n?(e.consume(n),k):g(n)}function k(n){return 62===n?O(n):93===n?(e.consume(n),k):g(n)}function y(n){return null===n||62===n?O(n):F(n)?(o=y,j(n)):(e.consume(n),y)}function S(n){return null===n?t(n):63===n?(e.consume(n),E):F(n)?(o=S,j(n)):(e.consume(n),S)}function E(e){return 62===e?O(e):S(e)}function A(n){return h(n)?(e.consume(n),w):t(n)}function w(n){return 45===n||p(n)?(e.consume(n),w):C(n)}function C(n){return F(n)?(o=C,j(n)):b(n)?(e.consume(n),C):O(n)}function T(n){return 45===n||p(n)?(e.consume(n),T):47===n||62===n||v(n)?z(n):t(n)}function z(n){return 47===n?(e.consume(n),O):58===n||95===n||h(n)?(e.consume(n),D):F(n)?(o=z,j(n)):b(n)?(e.consume(n),z):O(n)}function D(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),D):B(n)}function B(n){return 61===n?(e.consume(n),_):F(n)?(o=B,j(n)):b(n)?(e.consume(n),B):z(n)}function _(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),i=n,L):F(n)?(o=_,j(n)):b(n)?(e.consume(n),_):(e.consume(n),M)}function L(n){return n===i?(e.consume(n),i=void 0,P):null===n?t(n):F(n)?(o=L,j(n)):(e.consume(n),L)}function M(n){return null===n||34===n||39===n||60===n||61===n||96===n?t(n):47===n||62===n||v(n)?z(n):(e.consume(n),M)}function P(e){return 47===e||62===e||v(e)?z(e):t(e)}function O(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),n):t(r)}function j(n){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),H}function H(n){return b(n)?I(e,R,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):R(n)}function R(n){return e.enter("htmlTextData"),o(n)}}};const Ie={name:"codeText",tokenize:function(e,n,t){let r,i,u=0;return function(n){return e.enter("codeText"),e.enter("codeTextSequence"),o(n)};function o(n){return 96===n?(e.consume(n),u++,o):(e.exit("codeTextSequence"),c(n))}function c(n){return null===n?t(n):32===n?(e.enter("space"),e.consume(n),e.exit("space"),c):96===n?(i=e.enter("codeTextSequence"),r=0,l(n)):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),c):(e.enter("codeTextData"),s(n))}function s(n){return null===n||32===n||96===n||F(n)?(e.exit("codeTextData"),c(n)):(e.consume(n),s)}function l(t){return 96===t?(e.consume(t),r++,l):r===u?(e.exit("codeTextSequence"),e.exit("codeText"),n(t)):(i.type="codeTextData",s(t))}},resolve:function(e){let n,t,r=e.length-4,i=3;if(!("lineEnding"!==e[i][1].type&&"space"!==e[i][1].type||"lineEnding"!==e[r][1].type&&"space"!==e[r][1].type))for(n=i;++n<r;)if("codeTextData"===e[n][1].type){e[i][1].type="codeTextPadding",e[r][1].type="codeTextPadding",i+=2,r-=2;break}n=i-1,r++;for(;++n<=r;)void 0===t?n!==r&&"lineEnding"!==e[n][1].type&&(t=n):n!==r&&"lineEnding"!==e[n][1].type||(e[t][1].type="codeTextData",n!==t+2&&(e[t][1].end=e[n-1][1].end,e.splice(t+2,n-t-2),r-=n-t-2,n=t+2),t=void 0);return e},previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type}};const we={42:U,43:U,45:U,48:U,49:U,50:U,51:U,52:U,53:U,54:U,55:U,56:U,57:U,62:Z},Ce={91:ee},Te={[-2]:te,[-1]:te,32:te},ze={35:ie,42:N,45:[ue,N],60:se,61:ue,95:N,96:de,126:de},De={38:me,92:ge},Be={[-5]:xe,[-4]:xe,[-3]:xe,33:{name:"labelStartImage",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(n),e.exit("labelImageMarker"),i};function i(n){return 91===n?(e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelImage"),u):t(n)}function u(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ke.resolveAll},38:me,42:Se,60:[{name:"autolink",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(n),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(n){return h(n)?(e.consume(n),u):s(n)}function u(e){return 43===e||45===e||46===e||p(e)?(r=1,o(e)):s(e)}function o(n){return 58===n?(e.consume(n),r=0,c):(43===n||45===n||46===n||p(n))&&r++<32?(e.consume(n),o):(r=0,s(n))}function c(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),n):null===r||32===r||60===r||g(r)?t(r):(e.consume(r),c)}function s(n){return 64===n?(e.consume(n),l):m(n)?(e.consume(n),s):t(n)}function l(e){return p(e)?a(e):t(e)}function a(t){return 46===t?(e.consume(t),r=0,l):62===t?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.exit("autolink"),n):f(t)}function f(n){if((45===n||p(n))&&r++<63){const t=45===n?f:a;return e.consume(n),t}return t(n)}}},Ae],91:{name:"labelStartLink",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ke.resolveAll},92:[{name:"hardBreakEscape",tokenize:function(e,n,t){return function(n){return e.enter("hardBreakEscape"),e.consume(n),r};function r(r){return F(r)?(e.exit("hardBreakEscape"),n(r)):t(r)}}},ge],93:ke,95:Se,96:Ie},_e={null:[Se,P]},Le={null:[42,95]},Me={null:[]};function Pe(e){const n=function(e){const n={};let t=-1;for(;++t<e.length;)f(n,e[t]);return n}([r,...(e||{}).extensions||[]]),t={defined:[],lazy:{},constructs:n,content:i(w),document:i(C),flow:i(M),string:i(O),text:i(j)};return t;function i(e){return function(n){return Q(t,e,n)}}}const Oe=/[\0\t\n\r]/g;function je(e,n){const t=Number.parseInt(e,n);return t<9||11===t||t>13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||65535==(65535&t)||65534==(65535&t)||t>1114111?"\ufffd":String.fromCharCode(t)}const He=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Re(e,n,t){if(n)return n;if(35===t.charCodeAt(0)){const e=t.charCodeAt(1),n=120===e||88===e;return je(t.slice(n?2:1),n?16:10)}return pe(t)||e}function qe(e){return e&&"object"==typeof e?"position"in e||"type"in e?Qe(e.position):"start"in e||"end"in e?Qe(e):"line"in e||"column"in e?Ve(e):"":""}function Ve(e){return Ne(e&&e.line)+":"+Ne(e&&e.column)}function Qe(e){return Ve(e&&e.start)+"-"+Ve(e&&e.end)}function Ne(e){return e&&"number"==typeof e?e:1}const Ue={}.hasOwnProperty,$e=function(e,n,t){return"string"!=typeof n&&(t=n,n=void 0),function(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:l(ue),autolinkProtocol:T,autolinkEmail:T,atxHeading:l(ne),blockQuote:l(Y),characterEscape:T,characterReference:T,codeFenced:l(J),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:l(J,a),codeText:l(G,a),codeTextData:T,data:T,codeFlowValue:T,definition:l(K),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:l(ee),hardBreakEscape:l(te),hardBreakTrailing:l(te),htmlFlow:l(re,a),htmlFlowData:T,htmlText:l(re,a),htmlTextData:T,image:l(ie),label:a,link:l(ue),listItem:l(ce),listItemValue:g,listOrdered:l(oe,m),listUnordered:l(oe),paragraph:l(se),reference:Q,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:l(ne),strong:l(le),thematicBreak:l(fe)},exit:{atxHeading:d(),atxHeadingSequence:A,autolink:d(),autolinkEmail:Z,autolinkProtocol:W,blockQuote:d(),characterEscapeValue:z,characterReferenceMarkerHexadecimal:U,characterReferenceMarkerNumeric:U,characterReferenceValue:$,codeFenced:d(F),codeFencedFence:y,codeFencedFenceInfo:x,codeFencedFenceMeta:k,codeFlowValue:z,codeIndented:d(v),codeText:d(M),codeTextData:z,data:z,definition:d(),definitionDestinationString:E,definitionLabelString:b,definitionTitleString:S,emphasis:d(),hardBreakEscape:d(B),hardBreakTrailing:d(B),htmlFlow:d(_),htmlFlowData:z,htmlText:d(L),htmlTextData:z,image:d(O),label:H,labelText:j,lineEnding:D,link:d(P),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:N,resourceDestinationString:R,resourceTitleString:q,resource:V,setextHeading:d(C),setextHeadingLineSequence:w,setextHeadingText:I,strong:d(),thematicBreak:d()}};Ze(n,(e||{}).mdastExtensions||[]);const t={};return r;function r(e){let t={type:"root",children:[]};const r={stack:[t],tokenStack:[],config:n,enter:f,exit:h,buffer:a,resume:p,setData:c,getData:s},u=[];let o=-1;for(;++o<e.length;)if("listOrdered"===e[o][1].type||"listUnordered"===e[o][1].type)if("enter"===e[o][0])u.push(o);else{o=i(e,u.pop(),o)}for(o=-1;++o<e.length;){const t=n[e[o][0]];Ue.call(t,e[o][1].type)&&t[e[o][1].type].call(Object.assign({sliceSerialize:e[o][2].sliceSerialize},r),e[o][1])}if(r.tokenStack.length>0){const e=r.tokenStack[r.tokenStack.length-1];(e[1]||Je).call(r,void 0,e[0])}for(t.position={start:We(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:We(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},o=-1;++o<n.transforms.length;)t=n.transforms[o](t)||t;return t}function i(e,n,t){let r,i,u,o,c=n-1,s=-1,l=!1;for(;++c<=t;){const n=e[c];if("listUnordered"===n[1].type||"listOrdered"===n[1].type||"blockQuote"===n[1].type?("enter"===n[0]?s++:s--,o=void 0):"lineEndingBlank"===n[1].type?"enter"===n[0]&&(!r||o||s||u||(u=c),o=void 0):"linePrefix"===n[1].type||"listItemValue"===n[1].type||"listItemMarker"===n[1].type||"listItemPrefix"===n[1].type||"listItemPrefixWhitespace"===n[1].type||(o=void 0),!s&&"enter"===n[0]&&"listItemPrefix"===n[1].type||-1===s&&"exit"===n[0]&&("listUnordered"===n[1].type||"listOrdered"===n[1].type)){if(r){let o=c;for(i=void 0;o--;){const n=e[o];if("lineEnding"===n[1].type||"lineEndingBlank"===n[1].type){if("exit"===n[0])continue;i&&(e[i][1].type="lineEndingBlank",l=!0),n[1].type="lineEnding",i=o}else if("linePrefix"!==n[1].type&&"blockQuotePrefix"!==n[1].type&&"blockQuotePrefixWhitespace"!==n[1].type&&"blockQuoteMarker"!==n[1].type&&"listItemIndent"!==n[1].type)break}u&&(!i||u<i)&&(r._spread=!0),r.end=Object.assign({},i?e[i][1].start:n[1].end),e.splice(i||c,0,["exit",r,n[2]]),c++,t++}"listItemPrefix"===n[1].type&&(r={type:"listItem",_spread:!1,start:Object.assign({},n[1].start),end:void 0},e.splice(c,0,["enter",r,n[2]]),c++,t++,u=void 0,o=!0)}}return e[n][1]._spread=l,t}function c(e,n){t[e]=n}function s(e){return t[e]}function l(e,n){return t;function t(t){f.call(this,e(t),t),n&&n.call(this,t)}}function a(){this.stack.push({type:"fragment",children:[]})}function f(e,n,t){return this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push([n,t]),e.position={start:We(n.start)},e}function d(e){return n;function n(n){e&&e.call(this,n),h.call(this,n)}}function h(e,n){const t=this.stack.pop(),r=this.tokenStack.pop();if(!r)throw new Error("Cannot close `"+e.type+"` ("+qe({start:e.start,end:e.end})+"): it\u2019s not open");if(r[0].type!==e.type)if(n)n.call(this,e,r[0]);else{(r[1]||Je).call(this,e,r[0])}return t.position.end=We(e.end),t}function p(){return function(e,n){const t=n||u;return o(e,"boolean"!=typeof t.includeImageAlt||t.includeImageAlt,"boolean"!=typeof t.includeHtml||t.includeHtml)}(this.stack.pop())}function m(){c("expectingFirstListItemValue",!0)}function g(e){if(s("expectingFirstListItemValue")){this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),c("expectingFirstListItemValue")}}function x(){const e=this.resume();this.stack[this.stack.length-1].lang=e}function k(){const e=this.resume();this.stack[this.stack.length-1].meta=e}function y(){s("flowCodeInside")||(this.buffer(),c("flowCodeInside",!0))}function F(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),c("flowCodeInside")}function v(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}function b(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=X(this.sliceSerialize(e)).toLowerCase()}function S(){const e=this.resume();this.stack[this.stack.length-1].title=e}function E(){const e=this.resume();this.stack[this.stack.length-1].url=e}function A(e){const n=this.stack[this.stack.length-1];if(!n.depth){const t=this.sliceSerialize(e).length;n.depth=t}}function I(){c("setextHeadingSlurpLineEnding",!0)}function w(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).charCodeAt(0)?1:2}function C(){c("setextHeadingSlurpLineEnding")}function T(e){const n=this.stack[this.stack.length-1];let t=n.children[n.children.length-1];t&&"text"===t.type||(t=ae(),t.position={start:We(e.start)},n.children.push(t)),this.stack.push(t)}function z(e){const n=this.stack.pop();n.value+=this.sliceSerialize(e),n.position.end=We(e.end)}function D(e){const t=this.stack[this.stack.length-1];if(s("atHardBreak")){return t.children[t.children.length-1].position.end=We(e.end),void c("atHardBreak")}!s("setextHeadingSlurpLineEnding")&&n.canContainEols.includes(t.type)&&(T.call(this,e),z.call(this,e))}function B(){c("atHardBreak",!0)}function _(){const e=this.resume();this.stack[this.stack.length-1].value=e}function L(){const e=this.resume();this.stack[this.stack.length-1].value=e}function M(){const e=this.resume();this.stack[this.stack.length-1].value=e}function P(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function O(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function j(e){const n=this.sliceSerialize(e),t=this.stack[this.stack.length-2];t.label=function(e){return e.replace(He,Re)}(n),t.identifier=X(n).toLowerCase()}function H(){const e=this.stack[this.stack.length-1],n=this.resume(),t=this.stack[this.stack.length-1];if(c("inReference",!0),"link"===t.type){const n=e.children;t.children=n}else t.alt=n}function R(){const e=this.resume();this.stack[this.stack.length-1].url=e}function q(){const e=this.resume();this.stack[this.stack.length-1].title=e}function V(){c("inReference")}function Q(){c("referenceType","collapsed")}function N(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=X(this.sliceSerialize(e)).toLowerCase(),c("referenceType","full")}function U(e){c("characterReferenceType",e.type)}function $(e){const n=this.sliceSerialize(e),t=s("characterReferenceType");let r;if(t)r=je(n,"characterReferenceMarkerNumeric"===t?10:16),c("characterReferenceType");else{r=pe(n)}const i=this.stack.pop();i.value+=r,i.position.end=We(e.end)}function W(e){z.call(this,e);this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function Z(e){z.call(this,e);this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function Y(){return{type:"blockquote",children:[]}}function J(){return{type:"code",lang:null,meta:null,value:""}}function G(){return{type:"inlineCode",value:""}}function K(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ee(){return{type:"emphasis",children:[]}}function ne(){return{type:"heading",depth:void 0,children:[]}}function te(){return{type:"break"}}function re(){return{type:"html",value:""}}function ie(){return{type:"image",title:null,url:"",alt:null}}function ue(){return{type:"link",title:null,url:"",children:[]}}function oe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function ce(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function se(){return{type:"paragraph",children:[]}}function le(){return{type:"strong",children:[]}}function ae(){return{type:"text",value:""}}function fe(){return{type:"thematicBreak"}}}(t)(function(e){for(;!D(e););return e}(Pe(t).document().write(function(){let e,n=1,t="",r=!0;return function(i,u,o){const c=[];let s,l,a,f,d;for(i=t+i.toString(u),a=0,t="",r&&(65279===i.charCodeAt(0)&&a++,r=void 0);a<i.length;){if(Oe.lastIndex=a,s=Oe.exec(i),f=s&&void 0!==s.index?s.index:i.length,d=i.charCodeAt(f),!s){t=i.slice(a);break}if(10===d&&a===f&&e)c.push(-3),e=void 0;else switch(e&&(c.push(-5),e=void 0),a<f&&(c.push(i.slice(a,f)),n+=f-a),d){case 0:c.push(65533),n++;break;case 9:for(l=4*Math.ceil(n/4),c.push(-2);n++<l;)c.push(-1);break;case 10:c.push(-4),n=1;break;default:e=!0,n=1}a=f+1}return o&&(e&&c.push(-5),t&&c.push(t),c.push(null)),c}}()(e,n,!0))))};function We(e){return{line:e.line,column:e.column,offset:e.offset}}function Ze(e,n){let t=-1;for(;++t<n.length;){const r=n[t];Array.isArray(r)?Ze(e,r):Ye(e,r)}}function Ye(e,n){let t;for(t in n)if(Ue.call(n,t))if("canContainEols"===t){const r=n[t];r&&e[t].push(...r)}else if("transforms"===t){const r=n[t];r&&e[t].push(...r)}else if("enter"===t||"exit"===t){const r=n[t];r&&Object.assign(e[t],r)}}function Je(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+qe({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+qe({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+qe({start:n.start,end:n.end})+") is still open")}var Ge=t(8464);function Ke(e){const n=function(e){const n=e.replace(/\n{2,}/g,"\n");return(0,Ge.Z)(n)}(e),{children:t}=$e(n),r=[[]];let i=0;function u(e,n="normal"){if("text"===e.type){e.value.split("\n").forEach(((e,t)=>{0!==t&&(i++,r.push([])),e.split(" ").forEach((e=>{e&&r[i].push({content:e,type:n})}))}))}else"strong"!==e.type&&"emphasis"!==e.type||e.children.forEach((n=>{u(n,e.type)}))}return t.forEach((e=>{"paragraph"===e.type&&e.children.forEach((e=>{u(e)}))})),r}function Xe(e,n){var t;return en(e,[],(t=n.content,Intl.Segmenter?[...(new Intl.Segmenter).segment(t)].map((e=>e.segment)):[...t]),n.type)}function en(e,n,t,r){if(0===t.length)return[{content:n.join(""),type:r},{content:"",type:r}];const[i,...u]=t,o=[...n,i];return e([{content:o.join(""),type:r}])?en(e,o,u,r):(0===n.length&&i&&(n.push(i),t.shift()),[{content:n.join(""),type:r},{content:t.join(""),type:r}])}function nn(e,n){if(e.some((({content:e})=>e.includes("\n"))))throw new Error("splitLineToFitWidth does not support newlines in the line");return tn(e,n)}function tn(e,n,t=[],r=[]){if(0===e.length)return r.length>0&&t.push(r),t.length>0?t:[];let i="";" "===e[0].content&&(i=" ",e.shift());const u=e.shift()??{content:" ",type:"normal"},o=[...r];if(""!==i&&o.push({content:i,type:"normal"}),o.push(u),n(o))return tn(e,n,t,o);if(r.length>0)t.push(r),e.unshift(u);else if(u.content){const[r,i]=Xe(n,u);t.push([r]),i.content&&e.unshift(i)}return tn(e,n,t)}function rn(e,n,t){return e.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",n*t-.1+"em").attr("dy",t+"em")}function un(e,n,t){const r=e.append("text"),i=rn(r,1,n);cn(i,t);const u=i.node().getComputedTextLength();return r.remove(),u}function on(e,n,t){var r;const i=e.append("text"),u=rn(i,1,n);cn(u,[{content:t,type:"normal"}]);const o=null==(r=u.node())?void 0:r.getBoundingClientRect();return o&&i.remove(),o}function cn(e,n){e.text(""),n.forEach(((n,t)=>{const r=e.append("tspan").attr("font-style","emphasis"===n.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===n.type?"bold":"normal");0===t?r.text(n.content):r.text(" "+n.content)}))}const sn=(e,n="",{style:t="",isTitle:r=!1,classes:u="",useHtmlLabels:o=!0,isNode:c=!0,width:s=200,addSvgBackground:l=!1}={})=>{if(i.l.info("createText",n,t,r,u,o,c,l),o){const r=function(e){const{children:n}=$e(e);return n.map((function e(n){return"text"===n.type?n.value.replace(/\n/g,"<br/>"):"strong"===n.type?`<strong>${n.children.map(e).join("")}</strong>`:"emphasis"===n.type?`<em>${n.children.map(e).join("")}</em>`:"paragraph"===n.type?`<p>${n.children.map(e).join("")}</p>`:`Unsupported markdown: ${n.type}`})).join("")}(n),o=function(e,n,t,r,i=!1){const u=e.append("foreignObject"),o=u.append("xhtml:div"),c=n.label,s=n.isNode?"nodeLabel":"edgeLabel";var l,a;o.html(`\n <span class="${s} ${r}" `+(n.labelStyle?'style="'+n.labelStyle+'"':"")+">"+c+"</span>"),l=o,(a=n.labelStyle)&&l.attr("style",a),o.style("display","table-cell"),o.style("white-space","nowrap"),o.style("max-width",t+"px"),o.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&o.attr("class","labelBkg");let f=o.node().getBoundingClientRect();return f.width===t&&(o.style("display","table"),o.style("white-space","break-spaces"),o.style("width",t+"px"),f=o.node().getBoundingClientRect()),u.style("width",f.width),u.style("height",f.height),u.node()}(e,{isNode:c,label:(0,i.J)(r).replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`)),labelStyle:t.replace("fill:","color:")},s,u,l);return o}{const t=function(e,n,t,r=!1){const i=n.append("g"),u=i.insert("rect").attr("class","background"),o=i.append("text").attr("y","-10.1");let c=0;for(const s of t){const n=n=>un(i,1.1,n)<=e,t=n(s)?[s]:nn(s,n);for(const e of t)cn(rn(o,c,1.1),e),c++}if(r){const e=o.node().getBBox(),n=2;return u.attr("x",-n).attr("y",-n).attr("width",e.width+2*n).attr("height",e.height+2*n),i.node()}return o.node()}(s,e,Ke(n),l);return t}}}}]); \ No newline at end of file diff --git a/assets/js/9277.67e8f16f.js b/assets/js/9277.67e8f16f.js new file mode 100644 index 000000000..43be3a0e2 --- /dev/null +++ b/assets/js/9277.67e8f16f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9277],{9277:(t,e,a)=>{a.d(e,{diagram:()=>b});var i=a(885),n=a(4218),d=a(1644),r=a(5625),s=a(6365);a(7484),a(7967),a(7856);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)<i&&g>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,"<br/>");r=r.replace(/\n/g,"<br/>");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.k({compound:!0,multigraph:!0});let b,m=!0;for(b=0;b<t.length;b++)if("relation"===t[b].stmt){m=!1;break}a?w.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:m?1:u.edgeLengthFactor,nodeSep:m?1:50,isMultiGraph:!0}):w.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:m?1:u.edgeLengthFactor,nodeSep:m?1:50,ranker:"tight-tree",isMultiGraph:!0}),w.setDefaultEdgeLabel((function(){return{}})),h.db.extract(t);const B=h.db.getStates(),k=h.db.getRelations(),N=Object.keys(B);for(const i of N){const t=B[i];let n;if(a&&(t.parentId=a),t.doc){let a=e.append("g").attr("id",t.id).attr("class","stateGroup");n=y(t.doc,a,t.id,!o,c,g,h);{a=p(a,t,o);let e=a.node().getBBox();n.width=e.width,n.height=e.height+u.padding/2,f[t.id]={y:u.compositTitleSize}}}else n=l(e,t);if(t.note){const a={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},i=l(e,a);"left of"===t.note.position?(w.setNode(n.id+"-note",i),w.setNode(n.id,n)):(w.setNode(n.id,n),w.setNode(n.id+"-note",i)),w.setParent(n.id,n.id+"-group"),w.setParent(n.id+"-note",n.id+"-group")}else w.setNode(n.id,n)}s.l.debug("Count=",w.nodeCount(),w);let E=0;k.forEach((function(t){var e;E++,s.l.debug("Setting edge",t),w.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*u.fontSizeFactor:1),height:u.labelHeight*s.e.getRows(t.title).length,labelpos:"c"},"id"+E)})),(0,d.bK)(w),s.l.debug("Graph after layout",w.nodes());const M=e.node();w.nodes().forEach((function(t){if(void 0!==t&&void 0!==w.node(t)){s.l.warn("Node "+t+": "+JSON.stringify(w.node(t))),c.select("#"+M.id+" #"+t).attr("transform","translate("+(w.node(t).x-w.node(t).width/2)+","+(w.node(t).y+(f[t]?f[t].y:0)-w.node(t).height/2)+" )"),c.select("#"+M.id+" #"+t).attr("data-x-shift",w.node(t).x-w.node(t).width/2);g.querySelectorAll("#"+M.id+" #"+t+" .divider").forEach((t=>{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 v=M.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.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),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))})),v=M.getBBox();const S={id:a||"root",label:a||"root",width:0,height:0};return S.width=v.width+2*u.padding,S.height=v.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.Ys)("#i"+e));const o="sandbox"===d?(0,n.Ys)(r.nodes()[0].contentDocument.body):(0,n.Ys)("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/929714a5.4a927c7b.js b/assets/js/929714a5.4a927c7b.js new file mode 100644 index 000000000..331dbe753 --- /dev/null +++ b/assets/js/929714a5.4a927c7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2493],{7083:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var i=n(5893),s=n(1151),r=n(1872);const o={id:"mcp-serverside-code-context",title:"MCP Serverside Code Context",sidebar_label:"Serverside Code Context",description:"Context is king. Also when writing MCP Template Serverside Code.",image:"img/og/og-image-mcp-serverside-code-context.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},a=void 0,c={id:"interaction-studio/mcp-serverside-code-context",title:"MCP Serverside Code Context",description:"Context is king. Also when writing MCP Template Serverside Code.",source:"@site/docs/interaction-studio/mcp-serverside-code-context.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-serverside-code-context",permalink:"/docs/interaction-studio/mcp-serverside-code-context",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-serverside-code-context.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"TypeScript",permalink:"/docs/tags/type-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1708383697,formattedLastUpdatedAt:"Feb 19, 2024",frontMatter:{id:"mcp-serverside-code-context",title:"MCP Serverside Code Context",sidebar_label:"Serverside Code Context",description:"Context is king. Also when writing MCP Template Serverside Code.",image:"img/og/og-image-mcp-serverside-code-context.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},sidebar:"docs",previous:{title:"Serverside Code Properties",permalink:"/docs/interaction-studio/mcp-serverside-code-properties"},next:{title:"Open Time Email",permalink:"/docs/interaction-studio/mcp-open-time-email"}},d={},l=[{value:"campaignId & experienceId",id:"campaignid--experienceid",level:2},{value:"userGroup",id:"usergroup",level:2},{value:"beaconVersion",id:"beaconversion",level:2},{value:"event",id:"event",level:2},{value:"event methods",id:"event-methods",level:3},{value:"context.event.ipAddress()",id:"contexteventipaddress",level:4},{value:"context.event.itemId()",id:"contexteventitemid",level:4},{value:"context.event.itemType()",id:"contexteventitemtype",level:4},{value:"event.fields",id:"eventfields",level:3},{value:"context.event.fields.pageType",id:"contexteventfieldspagetype",level:4},{value:"context.event.fields.action",id:"contexteventfieldsaction",level:4},{value:"context.event.fields.url",id:"contexteventfieldsurl",level:4},{value:"context.event.fields.customAttribute",id:"contexteventfieldscustomattribute",level:4},{value:"contentZone",id:"contentzone",level:2},{value:"trigger",id:"trigger",level:2},{value:"locale",id:"locale",level:2},{value:"services",id:"services",level:2},{value:"services.catalog",id:"servicescatalog",level:3},{value:"services.recommendations",id:"servicesrecommendations",level:3},{value:"services.smartTrends",id:"servicessmarttrends",level:3},{value:"services.surveys",id:"servicessurveys",level:3},{value:"services.decisions",id:"servicesdecisions",level:3},{value:"services.corvus",id:"servicescorvus",level:3},{value:"services.promotionCatalog",id:"servicespromotioncatalog",level:3},{value:"user",id:"user",level:2},{value:"user methods",id:"user-methods",level:3},{value:"context.user.actionCount()",id:"contextuseractioncount",level:4},{value:"context.user.actionCountPerItem()",id:"contextuseractioncountperitem",level:4},{value:"context.user.getDimensionActivity()",id:"contextusergetdimensionactivity",level:4},{value:"context.user.getDimensionActivityByDay()",id:"contextusergetdimensionactivitybyday",level:4},{value:"context.user.getEmailSendHistory()",id:"contextusergetemailsendhistory",level:4},{value:"context.user.getLatestOrderByStatus()",id:"contextusergetlatestorderbystatus",level:4},{value:"context.user.getSegmentJoinDate()",id:"contextusergetsegmentjoindate",level:4},{value:"context.user.itemStatTotal()",id:"contextuseritemstattotal",level:4},{value:"context.user.itemStatTotalPerItem()",id:"contextuseritemstattotalperitem",level:4},{value:"context.user.pageViewCount()",id:"contextuserpageviewcount",level:4},{value:"context.user.visitCount()",id:"contextuservisitcount",level:4},{value:"context.user.visitDurationMilis()",id:"contextuservisitdurationmilis",level:4},{value:"user.attributes",id:"userattributes",level:3},{value:"user.profileObjects",id:"userprofileobjects",level:3},{value:"user.visits",id:"uservisits",level:3},{value:"user.orderHistory",id:"userorderhistory",level:3},{value:"user.location",id:"userlocation",level:3},{value:"user.currentCart",id:"usercurrentcart",level:3},{value:"user.segmentMembership",id:"usersegmentmembership",level:3},{value:"accountId & datasetId",id:"accountid--datasetid",level:2},{value:"configuration",id:"configuration",level:2}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.m,{content:"Context is king. Also when coding MCP Campaign Templates. Read about all its undocumented tricks."}),"\n",(0,i.jsxs)(t.p,{children:["Marketing Cloud Personalization offers a flexible campaign template creation tooling with multiple ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-properties",children:"properties"})," and imports that help you fulfil business needs with a pleasant user experience for the marketer. There is also one more - undocumented - feature that can change your template from good to outstanding. The CampaignComponentContext object."]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["In this article, I'm covering the main ",(0,i.jsx)(t.code,{children:"CampaignComponentContext"})," object that is passed as a ",(0,i.jsx)(t.code,{children:"context"})," argument to the ",(0,i.jsxs)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics#writing-serverside-code",children:[(0,i.jsx)(t.code,{children:"run"})," method"]})," in the Serverside Code of every campaign template."]}),(0,i.jsxs)(t.p,{children:["Some other contexts (like ",(0,i.jsx)(t.code,{children:"GearLifecycleContext"})," passed to search methods) have different structures and are out of the scope of this article."]})]}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"CampaignComponentContext"})," object is available in the Serverside Code of the Web, Serverside and Triggered Campaign Templates and provides extensive details about triggering event, user and delivered experience."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context object"',children:'{\n "campaignId": string,\n "experienceId": string,\n "userGroup": string,\n "beaconVersion": number,\n "event": Object,\n "contentZone": string,\n "trigger": Object,\n "locale": string,\n "services": Object,\n "user": Object,\n "accountId": string,\n "datasetId": string,\n "configuration": Object\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"It's straightforward to use once you know what's in there. For example, you can pull product ID stored with Sitemap in a User Attribute and leverage it to pull complete data about that product for personalisation:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{2-3} title="Leverage context in the run method of your Serverside Code"',children:" run(context: CampaignComponentContext) {\n let lastAddedToCartProductId = context.user.attributes?.lastAddedToCartProduct?.value;\n let lastAddedToCartProductDetails = context.services.catalog.findItem('Product', lastAddedToCartProductId);\n return { lastATCDetails: lastAddedToCartProductDetails };\n }\n"})}),"\n",(0,i.jsxs)(t.p,{children:["And that's just a basic usage. The key to unlocking the power of a context object is knowing what is stored there and how you can use it. So let's dive in, property by property (hint, the fun part starts at ",(0,i.jsx)(t.a,{href:"#event",children:(0,i.jsx)(t.code,{children:"event"})}),")."]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"This article is in a work-in-progress state - I'm ongoingly extending details about various parts of the context object as I can use it in real life."})}),"\n",(0,i.jsx)(t.h2,{id:"campaignid--experienceid",children:"campaignId & experienceId"}),"\n",(0,i.jsxs)(t.p,{children:["The first two string properties of the context object are ",(0,i.jsx)(t.code,{children:"campaignId"})," and ",(0,i.jsx)(t.code,{children:"experienceId"}),", and their purpose is very straightforward. They provide the five-character, case-sensitive, alphanumerical IDs for the campaign and experience selected for a user (for example, ",(0,i.jsx)(t.code,{children:"vALdQ"})," for Campaign ID and ",(0,i.jsx)(t.code,{children:"f3WpK"})," for Experience ID)."]}),"\n",(0,i.jsxs)(t.p,{children:["Both those values are passed by default from serverside to clientside and handlebars (as ",(0,i.jsx)(t.code,{children:"campaign"})," and ",(0,i.jsx)(t.code,{children:"experience"})," accordingly), so there is not much added value in those two unless you want to append those values as query strings to the links for tracking purposes."]}),"\n",(0,i.jsx)(t.p,{children:"However, for Web Campaigns, you can do it easily within the handlebars tab, and for Serverside and Triggered Campaigns, you can do it on the receiving system side."}),"\n",(0,i.jsx)(t.h2,{id:"usergroup",children:"userGroup"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"userGroup"})," string property should tell you which user group the user was assigned. Well, it should. In practice, you will see there one of the two values: ",(0,i.jsx)(t.code,{children:"Test"})," for users that got an A/B Test or Rule-Based experience and ",(0,i.jsx)(t.code,{children:"testUserGroup"})," for those that are in the Control group (or in the Template preview pane within MCP UI)."]}),"\n",(0,i.jsxs)(t.p,{children:["However, you will see better values in the out-of-the-box serverside payload ",(0,i.jsx)(t.code,{children:"userGroup"})," property that correctly shows values like ",(0,i.jsx)(t.code,{children:"Test"}),", ",(0,i.jsx)(t.code,{children:"Default"}),", and ",(0,i.jsx)(t.code,{children:"Control"})," and only displays ",(0,i.jsx)(t.code,{children:"testUserGroup"})," during preview."]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["The control group creates more problems for the context, as it keeps displaying the payload preview version of it. So you will also see only the placeholder values for ",(0,i.jsxs)(t.a,{href:"#campaignid--experienceid",children:[(0,i.jsx)(t.code,{children:"campaignId"})," and ",(0,i.jsx)(t.code,{children:"experienceId"})]}),", ",(0,i.jsx)(t.a,{href:"#beaconVersion",children:(0,i.jsx)(t.code,{children:"beaconVersion"})})," and skip other datapoints like ",(0,i.jsx)(t.a,{href:"#event",children:(0,i.jsx)(t.code,{children:"event.fields"})}),"."]}),(0,i.jsxs)(t.p,{children:["In short, don't use ",(0,i.jsx)(t.code,{children:"context"})," for custom payload dedicated to control group users."]})]}),"\n",(0,i.jsx)(t.h2,{id:"beaconversion",children:"beaconVersion"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"beaconVersion"})," number property will display the current Web SDK version (f.e. ",(0,i.jsx)(t.code,{children:"16"})," at the moment of writing it) or ",(0,i.jsx)(t.code,{children:"0"})," for the preview/control group. Not really useful."]}),"\n",(0,i.jsx)(t.h2,{id:"event",children:"event"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"event"})," object property is where the magic of the ",(0,i.jsx)(t.code,{children:"context"})," object starts. It stores information about the event that triggered the campaign - the data you can see when you leverage the ",(0,i.jsx)(t.code,{children:".setLoggingLevel('debug')"})," method in your Sitemap."]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"context.event"})," object won't work correctly in the Template Preview sidebar, as there is no valid event in that mode. Use an active campaign directly on the website to preview the actual output during development. Just make sure you use the campaign targeting to limit execution just to you."]})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.event object"',children:'{\n "time": datetime,\n "fields": Object,\n "ipAddress": (): string,\n "itemId": (): string,\n "itemType": (): string\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["While the ",(0,i.jsx)(t.code,{children:"context.event.time"})," is not that useful (unless you want to make some time-dependent changes to the campaign payload), the three available methods are much more practical."]}),"\n",(0,i.jsx)(t.h3,{id:"event-methods",children:"event methods"}),"\n",(0,i.jsx)(t.h4,{id:"contexteventipaddress",children:"context.event.ipAddress()"}),"\n",(0,i.jsx)(t.p,{children:"Returns an IP address of the user visiting your website. You might use it to blocklist specific IP ranges (internal or competitors) from seeing your campaigns. It's not a clean solution (as the campaign needs to be executed to get this far), but this might be your best bet, as there is no MCP-level IP blocklist. Of course, a much better solution would be to build such logic on the website side to block IPs already on the Web SDK import step conditionally, but that might not always be possible."}),"\n",(0,i.jsx)(t.h4,{id:"contexteventitemid",children:"context.event.itemId()"}),"\n",(0,i.jsxs)(t.p,{children:["Returns the ID of the Catalog Item the user viewed in the event. It pairs perfectly with the following method: ",(0,i.jsx)(t.code,{children:"context.event.itemType()"}),"."]}),"\n",(0,i.jsx)(t.h4,{id:"contexteventitemtype",children:"context.event.itemType()"}),"\n",(0,i.jsxs)(t.p,{children:["Returns the Catalog of the Item viewed (f.e. ",(0,i.jsx)(t.code,{children:"'Product'"})," for Product View)."]}),"\n",(0,i.jsxs)(t.p,{children:["The pair of ",(0,i.jsx)(t.code,{children:"itemId"})," and ",(0,i.jsx)(t.code,{children:"itemType"})," is handy, as those two details are precisely what MCP requires for a ",(0,i.jsx)(t.a,{href:"#servicescatalog",children:(0,i.jsx)(t.code,{children:"context.services.catalog.findItem()"})})," call that lets you get complete details about the currently displayed item. It enables use cases where you want to change the campaign payload based on displayed item attributes, related catalog objects, or other information on the item details. For example, access to ",(0,i.jsx)(t.a,{href:"#locale",children:"localized item data"}),"."]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["Event is not only an excellent data point that you can access through ",(0,i.jsx)(t.code,{children:"context"}),". It is also the basis for the anchor in Einstein Recipes. You can leverage it (in a filthy way) to create fake anchors and deploy recommendations for products related to the one currently viewed."]})}),"\n",(0,i.jsxs)(t.p,{children:["On top of the above, ",(0,i.jsx)(t.code,{children:"context.event"})," also contains the ",(0,i.jsx)(t.code,{children:"context.event.fields"})," subobject, capturing even more details about the triggering event."]}),"\n",(0,i.jsx)(t.h3,{id:"eventfields",children:"event.fields"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.event.fields object"',children:'{\n ".anonId": string,\n ".bv": string,\n ".pv": boolean,\n ".scv": number,\n ".skipProcessing": boolean,\n "action": string,\n "channel": string,\n "clientIp": string,\n "contentZones": string[],\n "pageType": string,\n "url": string,\n "urlref": string,\n "userAgent": string,\n "_anon": boolean,\n "_debug": boolean,\n "customAttribute1": any,\n "customAttribute2": any\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.event.fields"})," subobject groups multiple data points, many of which are very technical and not really useful for us. But some can open exciting use cases - let's dive in."]}),"\n",(0,i.jsx)(t.h4,{id:"contexteventfieldspagetype",children:"context.event.fields.pageType"}),"\n",(0,i.jsxs)(t.p,{children:["Returns the name of the currently viewed page type as configured in the Sitemap (f.e. ",(0,i.jsx)(t.code,{children:"'Home'"}),"). It is useful when you want to adapt the serverside payload of the campaign based on page type when the content zone is shared across many sites."]}),"\n",(0,i.jsx)(t.h4,{id:"contexteventfieldsaction",children:"context.event.fields.action"}),"\n",(0,i.jsxs)(t.p,{children:["Returns the name of the currently pushed action as configured in the Sitemap (f.e. ",(0,i.jsx)(t.code,{children:"'Viewed Home'"}),"). It shines for custom action names that can drive different campaign experiences - despite being triggered on the same page type."]}),"\n",(0,i.jsx)(t.h4,{id:"contexteventfieldsurl",children:"context.event.fields.url"}),"\n",(0,i.jsx)(t.p,{children:"Returns the URL where the event originated. The cool part is that it contains the hash and query strings, so you can drive use cases using those elements (f.e. change the experience based on the query string values you set in the email campaign using SFMC data)."}),"\n",(0,i.jsx)(t.h4,{id:"contexteventfieldscustomattribute",children:"context.event.fields.customAttribute"}),"\n",(0,i.jsxs)(t.p,{children:["Apart from those always-there properties, you will also see custom attributes you passed along with the event. For example, if in the Sitemap you are passing SFMC Contact Key along with the event: ",(0,i.jsx)(t.code,{children:"actionEvent.user.attributes.sfmcContactKey = queryParameters.get('sk');"})," you will have ",(0,i.jsx)(t.code,{children:"context.event.fields.sfmcContactKey"})," property available with that value. This is huge - it enables us to build campaigns leveraging real-time data. Use cases? Sure! Create an ",(0,i.jsx)(t.code,{children:"hasAddedInsurance"})," attribute filled out by the Add to Cart event to determine whether you want to promote a cross-sell. Add the ",(0,i.jsx)(t.code,{children:"hasMetFreeDeliveryThershold"})," boolean field to conditionally trigger recommendations of products that will help the customer get over the line of free delivery. The sky is the limit with those."]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["If you need some data only for the specific event purpose and don't want to store it in an attribute (be it due to limits or because Sitemap cannot remove the attribute value later), you can still use the ",(0,i.jsx)(t.code,{children:"actionEvent.user.attributes.customAttribute = 'value'"})," approach to pass that information. It won't be stored on the user attribute (if there isn't one matching the name) but will still be available on the Event Stream and in the ",(0,i.jsx)(t.code,{children:"context"})," object as ",(0,i.jsx)(t.code,{children:"context.event.fields.customAttribute"}),". Works also for pushing custom events:"]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'{5} title="Pushing custom event with a custom attribute that does not exist as a user attribute"',children:"Evergage.sendEvent({\n action: 'Custom Event',\n user: {\n attributes: {\n customAttribute: 'value',\n },\n },\n source: {\n contentZones: [{ name: 'virtual_for_global_control' }],\n }\n})\n"})})]}),"\n",(0,i.jsx)(t.h2,{id:"contentzone",children:"contentZone"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"contentZone"})," string property returns the Content Zone selected for the Campaign. It might be helpful if your campaign supports multiple content zones and you want to alter some payload elements based on the one selected (f.e. change the number of returned recommendations):"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{2} title="Leverage context.contentZone to change the serverside payload"',children:"// Limit the number of recommendations to the first four for smaller placements\nif (['search_see-more', 'listing_see-more'].includes(context.contentZone)) {\n recommendations = recommendations.slice(0,4);\n}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"trigger",children:"trigger"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"trigger"})," object property is filled only for the Triggered Campaign Templates."]}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h2,{id:"locale",children:"locale"}),"\n",(0,i.jsxs)(t.p,{children:["If you have switched on Locale support in your Marketing Cloud Personalization, the ",(0,i.jsx)(t.code,{children:"locale"})," string will return a five-character long combination of ISO language code and ISO country code (",(0,i.jsx)(t.code,{children:"language_COUNTRY"}),", for example: ",(0,i.jsx)(t.code,{children:"en_US"})," for American English)."]}),"\n",(0,i.jsx)(t.p,{children:"You can use it to return the campaign content based on the most recent user locale (be it based on manually entered variations in the Campaign configuration or by pulling directly from the localized Catalog):"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{7} title="Leverage context.locale to pull localized product details"',children:"const recommendedIds = recommendIdsOnly(context, recipeConfig);\n// Return localized recommendations with key data points needed for the campaign\nlet localisedRecommendations = context.services.catalog\n .findItems('Product', recommendedIds)\n .map(product => product.toFlatJSON(\n ['id', 'name,' 'imageUrl', 'url', 'price'],\n context.locale || ''\n ))\n"})}),"\n",(0,i.jsx)(t.h2,{id:"services",children:"services"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.services"})," is the most potent part of the ",(0,i.jsx)(t.code,{children:"context"})," object - packed to the brim with methods that give you access to Marketing Cloud Personalization data or let you create new recommendations."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services object"',children:'{\n "catalog": Object,\n "recommendations": Object,\n "smartTrends": Object,\n "surveys": Object,\n "decisions": Object,\n "corvus": Object,\n "promotionCatalog": Object\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"It's a nested object, so let's go through it property by property to discuss each group of methods."}),"\n",(0,i.jsx)(t.h3,{id:"servicescatalog",children:"services.catalog"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.catalog object"',children:'{\n "dimensionFilter": (dimension: string): ItemFilter<any>,\n "findClosestItems": (request: ClosestItemsRequest): Item[],\n "findItem": (type: string, id: string): Item,\n "findItems": (type: string, ids: string[]): Item[] || (type: ItemFilter<any>, ids: ItemSort<any>): Item[] || (type: ItemFilter<any>): Item[]\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"servicesrecommendations",children:"services.recommendations"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.recommendations object"',children:'{\n "recommend": (request: RecommendationsRequest): Item[],\n "recommendIdsOnly": (request: RecommendationsRequest): Item[],\n "smartSearch": (request: SmartSearchRequest): Item[],\n "smartSort": (request: SmartSort): Item[]\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"servicessmarttrends",children:"services.smartTrends"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.smartTrends object"',children:'{\n "smartTrends": (request: SmartTrendsRequest): ItemTrends[]\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"servicessurveys",children:"services.surveys"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.surveys object"',children:'{\n "getSurey": (surveyId: string): Survey\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"servicesdecisions",children:"services.decisions"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.decisions object"',children:'{\n "decide": (request: ContextualBanditRequest): Item[]\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"servicescorvus",children:"services.corvus"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.corvus object"',children:'{\n "contextualBandit": {\n "decide": (request: ContextualBanditRequest, filter: PromotionFilter): Item[]\n }\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"servicespromotioncatalog",children:"services.promotionCatalog"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.services.promotionCatalog object"',children:'{\n "findPromotions": (filter: ItemFilter<any>, context: CampaignComponentContext): Promotion: [],\n "promotionFilter": (contentZone: string): PromotionFilter\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h2,{id:"user",children:"user"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user"})," is the most significant property covering massive information about the user that triggered the campaign. It contains multiple subobjects (which I will cover separately below) and methods perfect for statistics-based use cases within the serverside code."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user object"',children:'{\n "attributes": Object,\n "profileObjects": Object,\n "visits": [Object],\n "orderHistory": [Object],\n "location": Object,\n "currentCart": Object,\n "anonymous": boolean,\n "segmentMembership": [Object],\n "id": string,\n actionCount: (request: ActionStatsRequest): number,\n actionCountPerItem: (request: ActionStatsRequest): Object,\n getDimensionActivity: (dimension: string, start: Date, end: Date): {\n [itemId: string]: ItemActionStats\n },\n getDimensionActivityByDay: (dimension: string, start: Date, end: Date): {\n [date: string] : ItemActionStats\n },\n getEmailSendHistory: (start: Date, end: Date): EmailSendActivity[] || (): EmailSendActivity[],\n getLatestOrderByStatus: (status: \'Open\' | \'Purchased\' | \'Cancelled\'): Order,\n getSegmentJoinDate: (segmentId: string): Date,\n itemStatTotal: (request: ItemStatsRequest): number,\n itemStatTotalPerItem: (request: ItemStatsRequest): ItemStat[],\n pageViewCount: (request: StatsRequest): number,\n visitCount: (request: StatsRequest): number,\n visitDurationMillis: (request: StatsRequest): number,\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Let's start our discovery of ",(0,i.jsx)(t.code,{children:"context.user"})," with the methods."]}),"\n",(0,i.jsx)(t.h3,{id:"user-methods",children:"user methods"}),"\n",(0,i.jsx)(t.h4,{id:"contextuseractioncount",children:"context.user.actionCount()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires an ActionStatsRequest (",(0,i.jsx)(t.code,{children:"{actionName: 'Name of the action'}"}),") and returns the total of provided action triggers for the current user. You can also extend ActionStatsRequest with ",(0,i.jsx)(t.code,{children:"start"})," or ",(0,i.jsx)(t.code,{children:"end"})," (but not both due to an MCP bug) date properties to limit the timeframe of the action count."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3} title="Check how many times customer viewed cart within the last day"',children:"let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet homeViewCount = context.user.actionCount({actionName: 'Viewed Cart', start: yesterday}); // Returns: 4\n"})}),"\n",(0,i.jsx)(t.h4,{id:"contextuseractioncountperitem",children:"context.user.actionCountPerItem()"}),"\n",(0,i.jsxs)(t.p,{children:["In theory, it should be able to return the action count per item (after passing a ",(0,i.jsx)(t.code,{children:"'Viewed Product'"})," action in ActionStatsRequest, it should show the counts per each product where that action triggered). But it doesn't. It returns the same information as ",(0,i.jsx)(t.a,{href:"#contextuseractioncount",children:(0,i.jsx)(t.code,{children:"actionCount()"})})," method, but instead of doing it directly as a number, it does it as an object with an action name. Unless I'm missing something - useless."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Full on promise, null on delivery actionCountPerItem method"',children:"let homeViewCount = context.user.actionCountPerItem({actionName: 'Viewed Product'}); // Returns: {'Viewed Product': 5}\n"})}),"\n",(0,i.jsx)(t.h4,{id:"contextusergetdimensionactivity",children:"context.user.getDimensionActivity()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires a dimension (a Catalog, like ",(0,i.jsx)(t.code,{children:"'Product'"}),", '",(0,i.jsx)(t.code,{children:"Category"}),"' or ",(0,i.jsx)(t.code,{children:"'CustomCatalog'"}),") and start + end date boundaries. This time, you must always provide both in that exact order. The significant difference with this method is that you pass direct arguments, not a grouping Stat object. It returns an object with Item IDs and related activity data from the selected Dimension with which the user interacted during the timeframe."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3} title="Find the activity in a specified catalog"',children:'let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet brandActivity = context.user.getDimensionActivity(\'Brand\', yesterday, today); // Returns:\n// {\n// "Apple": {\n// "view": 2,\n// "viewOutOfStock": 0,\n// "viewDetail": 0,\n// "viewTime": 43339,\n// "cart": 1,\n// "cartValue": 215,\n// "purchase": 1,\n// "purchaseValue": 215,\n// "review": 0,\n// "share": 0,\n// "comment": 0,\n// "favorite": 0\n// }\n// }\n'})}),"\n",(0,i.jsx)(t.p,{children:"That's an excellent set of data to calculate the most viewed Category, longest viewed Product or most purchased Brand by that specific user. Unfortunately, it's still just a proxy for the actual affinity data that is unavailable."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["While you can work on the returned object, you cannot directly pass it to the serverside payload. You can output the final value (f.e. ",(0,i.jsx)(t.code,{children:"brandActivity.Apple.view"}),"), but both ",(0,i.jsx)(t.code,{children:"brandActivity"})," and ",(0,i.jsx)(t.code,{children:"brandActivity.Apple"})," will break it."]}),(0,i.jsxs)(t.p,{children:["You can perform calculations in serverside code on any level, but if you need to output it directly in the payload, there is a trick: ",(0,i.jsx)(t.code,{children:"JSON.parse(JSON.strinify(brandActivity))"}),"."]})]}),"\n",(0,i.jsx)(t.h4,{id:"contextusergetdimensionactivitybyday",children:"context.user.getDimensionActivityByDay()"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"getDimensionActivityByDay"})," method works nearly the same as ",(0,i.jsx)(t.a,{href:"#contextusergetdimensionactivity",children:(0,i.jsx)(t.code,{children:"getDimensionActivity"})}),". There are two key differences:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"It requires additional argument - right after selecting the Dimension, you must also pass the specific Item ID for which you want to see the activity."}),"\n",(0,i.jsx)(t.li,{children:"The returned Object will have epoch properties for each activity day within the selected period."}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3,5} title="Find the activity in a specified catalog"',children:'let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet brandActivity = context.user.getDimensionActivityByDay(\'Brand\', \'Apple\', yesterday, today); // Returns:\n// {\n// "1707782400000": {\n// "view": 2,\n// "viewOutOfStock": 0,\n// "viewDetail": 0,\n// "viewTime": 43339,\n// "cart": 1,\n// "cartValue": 215,\n// "purchase": 1,\n// "purchaseValue": 215,\n// "review": 0,\n// "share": 0,\n// "comment": 0,\n// "favorite": 0\n// }\n// }\n'})}),"\n",(0,i.jsxs)(t.p,{children:["It also has the same payload limitation as ",(0,i.jsx)(t.a,{href:"#contextusergetdimensionactivity",children:(0,i.jsx)(t.code,{children:"getDimensionActivity"})}),", and the same workaround is available."]}),"\n",(0,i.jsx)(t.h4,{id:"contextusergetemailsendhistory",children:"context.user.getEmailSendHistory()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires either nothing or start/end data boundary and returns... nothing. At least I couldn't get it to work with the ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-open-time-email",children:"OTE Campaign"})," data. It may leverage the barely working ",(0,i.jsx)(t.a,{href:"../../../sites/ideas/mc-personalization-ideas#external-email-campaign-etl-send-segmentation",children:"External Email Campaign ETL"}),"."]}),"\n",(0,i.jsx)(t.h4,{id:"contextusergetlatestorderbystatus",children:"context.user.getLatestOrderByStatus()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires an order status (",(0,i.jsx)(t.code,{children:"'Open'"}),", ",(0,i.jsx)(t.code,{children:"'Purchased'"})," or ",(0,i.jsx)(t.code,{children:"'Cancelled'"}),") and returns the most recent Order object in the selected state. The data structure and content are the same as in the ",(0,i.jsx)(t.a,{href:"#userorderhistory",children:(0,i.jsx)(t.code,{children:"user.orderHistory"})}),"."]}),"\n",(0,i.jsx)(t.h4,{id:"contextusergetsegmentjoindate",children:"context.user.getSegmentJoinDate()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires Segment ID (you can view it in User Segments after you add the ID column or by opening a specific segment and copying five alphanumerical characters from URL: ",(0,i.jsx)(t.code,{children:".../segment/{SegmentID}/members..."}),") and returns an epoch with join date. It's a fantastic way to capture additional context for the user (f.e. how many days ago he joined the Gold Tier segment)."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Segment join epoch fun"',children:"let segmentJoinEpoch = context.user.getSegmentJoinDate('qWeR1'); // Returns: 1695796858287\n"})}),"\n",(0,i.jsxs)(t.p,{children:["If the Segment ID is incorrect or the user has not joined the provided segment, it will return ",(0,i.jsx)(t.code,{children:"null"}),"."]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"You can easily convert epoch to date to simplify date calculations:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{2,7} title="Perform date comparisons on epoch"',children:"let segmentJoinEpoch = context.user.getSegmentJoinDate('qWeR1'); // Returns: 1695796858287\nlet segmentJoinDate = new Date(segmentJoinEpoch);\n\nlet today = new Date();\nlet lastWeek = new Date(today.setDate(today.getDate() - 7));\n\nlet hasJoinedLastWeek = segmentJoinDate > lastWeek;\n"})})]}),"\n",(0,i.jsx)(t.h4,{id:"contextuseritemstattotal",children:"context.user.itemStatTotal()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires an ItemStatsRequest (",(0,i.jsx)(t.code,{children:"{itemType: 'CatalogName', statType: 'StatTypeName'}"}),") and returns the count for that stat for a given Catalog. You can also extend ItemStatsRequest with another optional property ",(0,i.jsx)(t.code,{children:"itemId: 'id'"})," to limit the result to a specific Item within a given Catalog (itemType). Finally, as with ",(0,i.jsx)(t.a,{href:"#contextuseractioncount",children:"actionCount()"}),", you can also use ",(0,i.jsx)(t.code,{children:"start"})," or ",(0,i.jsx)(t.code,{children:"end"})," timeframe boundaries - but not both."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3-8} title="Time spent by the user on Laptop Category within the last day in milliseconds"',children:"let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet itemViewTime = context.user.itemStatTotal({\n itemId: 'Laptop',\n itemType: 'Category',\n statType: 'ViewTime',\n start: yesterday\n}); // Returns: 98663\n"})}),"\n",(0,i.jsx)(t.p,{children:"Available statTypes: 'View', 'ViewOutOfStock', 'ViewValue', 'ViewDetail', 'QuickView', 'ViewTime', 'Cart', 'CartValue', 'Purchase', 'Visit', 'PurchaseValue', 'Review', 'Share', 'Comment', 'Favorite', 'Searches', 'SearchClicks', 'ClickThrough', 'RemoveFromCart', 'RemoveFromCartValue', 'RecommendedCount', 'PageLoadTime', 'PageLoadTimeCount', 'DomLoadTime', 'DomLoadTimeCount', 'TwReceiverTime', 'TwReceiverTimeCount', 'NumErrorEvents', 'TriggeredCount', 'RequestedForServing', 'EligibleForServing', 'Served'."}),"\n",(0,i.jsx)(t.p,{children:"Remember that the meaning of the returned value will differ depending on the selected statType - it can be count, milliseconds or money."}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["This method works perfectly with the ",(0,i.jsx)(t.a,{href:"#contexteventitemid",children:(0,i.jsx)(t.code,{children:"context.event.itemId()"})})," and ",(0,i.jsx)(t.a,{href:"#contexteventitemtype",children:(0,i.jsx)(t.code,{children:"context.event.itemType()"})})," as with those, you can pull relevant stats for a currently viewed Item and adapt payload for it (f.e. adapt Exit Intent incentive based on the number of visits or time spent on currently viewed product)."]})}),"\n",(0,i.jsx)(t.h4,{id:"contextuseritemstattotalperitem",children:"context.user.itemStatTotalPerItem()"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"itemStatsPerItem()"})," works in a very similar manner to ",(0,i.jsx)(t.a,{href:"#contextuseritemstattotal",children:(0,i.jsx)(t.code,{children:"itemStatsTotal()"})})," and accepts the same ItemStatsRequest. The key difference is that instead of a single value, it will return an array of objects, each containing an itemId and value specific to that item."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3-7} title="Time spent by the user on Products within the last day in milliseconds"',children:"let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet itemViewTime = context.user.itemStatPerItem({\n itemType: 'Product',\n statType: 'ViewTime',\n start: yesterday\n}); // Returns: [{itemId: '123', value: 9238}, {itemId: '456', value: 26651}]\n"})}),"\n",(0,i.jsxs)(t.p,{children:["While you can pass ",(0,i.jsx)(t.code,{children:"itemId: 'id'"})," in the ItemStatsRequest, it will limit the outputted array to a single object for that item, making it not useful vs ",(0,i.jsx)(t.a,{href:"#contextuseritemstattotal",children:(0,i.jsx)(t.code,{children:"itemStatsTotal()"})}),"."]}),"\n",(0,i.jsx)(t.h4,{id:"contextuserpageviewcount",children:"context.user.pageViewCount()"}),"\n",(0,i.jsxs)(t.p,{children:["Requires StatsRequest (",(0,i.jsx)(t.code,{children:"{start: Date, end: Date}"})," - use either start or end; using both will always return 0) and returns the count of pages viewed in that timeframe. Both timeframe bounds are required."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3-6} title="Pages viewed within the last day"',children:"let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet itemViewTime = context.user.pageViewCount({\n start: yesterday\n}); // Returns: 9\n"})}),"\n",(0,i.jsx)(t.h4,{id:"contextuservisitcount",children:"context.user.visitCount()"}),"\n",(0,i.jsxs)(t.p,{children:["Similar to ",(0,i.jsx)(t.a,{href:"#contextuserpageviewcount",children:"pageViewCount()"}),", it requires StatsRequest (",(0,i.jsx)(t.code,{children:"{start: Date, end: Date}"})," - use either start or end; using both will always return 0) but returns the count of visits instead of specific pages."]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"Visit for Marketing Cloud Personalization starts from the first page view and ends after the user reaches 30 minutes of inactivity on the site. So if a user goes to your website to view a few pages, leaves and then returns after 40 minutes - it will be counted as a separate visit."})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3-6} title="Visits within the last day"',children:"let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet itemViewTime = context.user.visitCount({\n start: yesterday\n}); // Returns: 2\n"})}),"\n",(0,i.jsx)(t.h4,{id:"contextuservisitdurationmilis",children:"context.user.visitDurationMilis()"}),"\n",(0,i.jsxs)(t.p,{children:["Similar to ",(0,i.jsx)(t.a,{href:"#contextuserpageviewcount",children:"pageViewCount()"}),", it requires StatsRequest (",(0,i.jsx)(t.code,{children:"{start: Date, end: Date}"})," - use either start or end, using both will always return 0) but returns the number of milliseconds the user spent on your website in a specified timeframe."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3-6} title="Visits within the last day"',children:"let today = new Date();\nlet yesterday = new Date(today.setDate(today.getDate() - 1));\nlet itemViewTime = context.user.visitDurationMilis({\n start: yesterday,\n end: today\n}); // Returns: 98663\n"})}),"\n",(0,i.jsx)(t.h3,{id:"userattributes",children:"user.attributes"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user.attributes"})," object contains out-of-the-box, custom and hidden attributes with respective values for the user. It's an instrumental part of the ",(0,i.jsx)(t.code,{children:"context"})," as it allows you to pull user-specific data not only from the triggering event (like it is also possible with ",(0,i.jsx)(t.a,{href:"#contexteventfieldscustomattribute",children:(0,i.jsx)(t.code,{children:"context.event.fields.customAttribute"})}),") but also from past events. This enables fun use cases like saving in custom attributes the last viewed Product and Category with Sitemap and then leveraging that information when the user is on the non-product page of your website to bring them back onto the funnel. It's also great to personalize your campaign (f.e. with the first name in the info banner or overlay)."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user.attributes object"',children:'{\n "created": {\n "value": number // epoch\n },\n "customAttribute": {\n "value": any\n },\n "originatingReferrer": {\n "value": "{\\"medium\\":\\"Direct\\",\\"source\\":null,\\"terms\\":null,\\"domain\\":null,\\"subdomainReversed\\":null,\\"url\\":null,\\"landingUrl\\":\\"https://www.mateuszdabrowski.pl/\\"}"\n },\n "firstName": {\n "value": string\n },\n "lastViewedCartAt": {\n "value": number // epoch\n },\n "firstActivity": {\n "value": number // epoch\n }\n}\n'})}),"\n",(0,i.jsx)(t.h3,{id:"userprofileobjects",children:"user.profileObjects"}),"\n",(0,i.jsx)(t.p,{children:"\ud83d\udea7 Work in progress \ud83d\udea7"}),"\n",(0,i.jsx)(t.h3,{id:"uservisits",children:"user.visits"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user.visits"})," is an Array with user visits. Remember that the Marketing Cloud Personalization visit starts from the first page view and ends after the user reaches 30 minutes of inactivity on the site. So if a user goes to your website to view a few pages, leaves and then returns after 40 minutes - it will be counted as a separate visit. It is critical - there is no way to access the history of each page the user visits. You can only see the visit (session start data) with a ",(0,i.jsx)(t.code,{children:"pageViewIndex"})," with a count of page views during that visit."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user.visits array"',children:'[\n {\n "start": number, // epoch\n "lastEventTime": number, // epoch\n "timeSinceLastVisit": number, // milliseconds\n "referrer": { // || null\n "medium": "Direct",\n "source": null,\n "terms": null,\n "domain": null,\n "subdomainReversed": null,\n "url": null,\n "landingUrl": "https://www.mateuszdabrowski.pl/"\n },\n "deviceType": "Computer",\n "browser": "Chrome",\n "platform": "Web",\n "operatingSystem": "Windows",\n "weather": { // || null\n "temperature": 71,\n "humidity": 67,\n "windSpeed": 7,\n "rain3h": 0,\n "snow3h": 0,\n "cloudCoverage": 0,\n "condition": {\n "id": 800,\n "name": "clear sky",\n "icon": "01d",\n "category": "Clear"\n }\n },\n "pageViewIndex": 9\n }\n]\n'})}),"\n",(0,i.jsx)(t.p,{children:"While there are a few attributes here, I would like to focus on two that enable exciting use cases:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"referrer"})," can contain data of the website that led the user to you. If this is the case, you can create a dedicated campaign focusing on the source (f.e. small vouchers to convert people coming from voucher-gathering websites) or terms (f.e. changing the experience based on social ad terms passed)."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"weather"})," can provide you with details about temperature, rain and snow, unlocking like-magic use cases, f.e. if it is cold and showers for your customer, display a campaign with a dedicated message promoting a sunny and hot travel destination."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"userorderhistory",children:"user.orderHistory"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user.orderHistory"})," is an array with past orders in any status (open, purchased or cancelled) for the user. It contains everything - timeframes, order value and currency and even a list of all products in that order."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user.orderHistory array"',children:'[\n {\n "id": null,\n "created": number, // epoch\n "updated": number, // epoch\n "purchaseDate": null,\n "visitAgeAtPurchase": number, // milliseconds\n "totalValue": number,\n "totalValueCurrency": null,\n "status": "Open",\n "metadata": null,\n "lineItems": [\n {\n "quantity": number,\n "price": number,\n "itemId": string,\n "attributes": {}\n },\n ],\n "attributes": {}\n }\n]\n'})}),"\n",(0,i.jsx)(t.h3,{id:"userlocation",children:"user.location"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user.location"})," can be magic or trash - depending on the Internet Service Providers of your audience. The rule of thumb is good data for B2B and mixed data for B2C. It's worth checking because if you can trust/clean this data, you can do astounding things with it."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user.location object"',children:'{\n "geographicPoint": {\n "latitude": number,\n "longitude": number\n },\n "timeZoneId": "Europe/Warsaw",\n "continentKey": "EU",\n "countryCode": "PL",\n "countryNumericCode": 616,\n "stateProvinceCode": "14",\n "city": "Warsaw",\n "postalCode": "00-633",\n "organization": "Pwc Polska Sp. Z O.o.",\n "naicsCode": "517311"\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Firstly, ",(0,i.jsx)(t.code,{children:"context.user.location.geographicPoint"})," contains latitude and longitude that can be perfect for ",(0,i.jsx)(t.a,{href:"#servicescatalog",children:(0,i.jsx)(t.code,{children:"context.services.catalog.findClosestItems()"})})," call."]}),"\n",(0,i.jsxs)(t.p,{children:["Secondly, if you target B2B customers and get organisation details (the example above is real - it returned all those details when I checked it from the PwC Poland office), it can help you get precious information about your known ",(0,i.jsx)(t.strong,{children:"and anonymous"})," visitors! However, a (big) grain of salt is needed - the NAICS Code (2017 NAICS Definition) returned for me Wired Telecommunications Carriers, which looks like code for Internet Services Provider, not PwC. For B2C, the ",(0,i.jsx)(t.code,{children:"organisation"})," field will return the Internet Service Provider name in most cases."]}),"\n",(0,i.jsx)(t.h3,{id:"usercurrentcart",children:"user.currentCart"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user.currentCart"})," is a single object with the same structure as each of the orders stored in ",(0,i.jsx)(t.a,{href:"#contextuserorderhistory",children:(0,i.jsx)(t.code,{children:"context.user.orderHistory"})}),". But because it is still a cart, not an order, most fields will be ",(0,i.jsx)(t.code,{children:"null"}),"/",(0,i.jsx)(t.code,{children:"0"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user.currentCart object"',children:'{\n "id": null,\n "created": number, // epoch\n "updated": number, // epoch\n "purchaseDate": null,\n "visitAgeAtPurchase": 0,\n "totalValue": 0,\n "totalValueCurrency": null,\n "status": "Open",\n "metadata": null,\n "lineItems": [\n {\n "quantity": number,\n "price": number,\n "itemId": string,\n "attributes": {}\n },\n ],\n "attributes": {}\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"The fun use case here is checking when the user updated the cart and, if enough time has passed, leveraging the lineItems to deploy an abandoned basket Web Campaign."}),"\n",(0,i.jsx)(t.h3,{id:"usersegmentmembership",children:"user.segmentMembership"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"context.user.segmentMembership"})," is an array with segments the user is a member of. With a good segmentation naming convention, the ",(0,i.jsx)(t.code,{children:"segmentName"})," and ",(0,i.jsx)(t.code,{children:"joined"})," can capture valuable additional context for the user (f.e. how many days ago he joined the Gold Tier segment or became an at-risk customer)."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Structure of the context.user.segmentMembership array"',children:'[\n {\n "segmentId": string,\n "segmentName": string,\n "joined": number, // epoch\n "createIfMissing": boolean,\n "removal": boolean,\n "userId": string,\n "customerId": string,\n "customerType": "User"\n }\n]\n'})}),"\n",(0,i.jsx)(t.h2,{id:"accountid--datasetid",children:"accountId & datasetId"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"accountId"})," and ",(0,i.jsx)(t.code,{children:"datasetId"})," are string properties that contain information about the Marketing Cloud Personalization account and dataset that generated the event. It is only handy if you want environment-aware debug log visibility logic."]}),"\n",(0,i.jsx)(t.h2,{id:"configuration",children:"configuration"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"configuration"})," object property contains information about the campaign properties (fields you expect the marketer to fill in when configuring the campaign) in the experience for a given user. Not really useful, as in the serverside code, you can access the same information using the ",(0,i.jsx)(t.code,{children:"this"})," keyword (f.e. ",(0,i.jsx)(t.code,{children:"this.campaignPropertyName"}),")."]})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>r});n(7294);const i="leadText_qzwo";var s=n(5893);const r=e=>{let{content:t}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>o});var i=n(7294);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/92cda9bf.8f424d73.js b/assets/js/92cda9bf.8f424d73.js new file mode 100644 index 000000000..86a2c30a4 --- /dev/null +++ b/assets/js/92cda9bf.8f424d73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4200],{5325:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>h,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var n=t(5893),o=t(1151),i=t(3992),s=t(425),a=t(1872);const l={id:"debugging-ssjs",title:"SSJS Debugging & Error Handling",sidebar_label:"Debugging & Error Handling",description:"To catch, or not to catch, that is debugging.",image:"img/og/og-image-ssjs-debugging-and-error-handling.png",tags:["Marketing Cloud","SSJS","Debugging","Cloud Page","Email","Automation"]},c=void 0,d={id:"ssjs/debugging-ssjs",title:"SSJS Debugging & Error Handling",description:"To catch, or not to catch, that is debugging.",source:"@site/docs/ssjs/debugging-ssjs.mdx",sourceDirName:"ssjs",slug:"/ssjs/debugging-ssjs",permalink:"/docs/ssjs/debugging-ssjs",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/debugging-ssjs.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"Email",permalink:"/docs/tags/email"},{label:"Automation",permalink:"/docs/tags/automation"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1704489197,formattedLastUpdatedAt:"Jan 5, 2024",frontMatter:{id:"debugging-ssjs",title:"SSJS Debugging & Error Handling",sidebar_label:"Debugging & Error Handling",description:"To catch, or not to catch, that is debugging.",image:"img/og/og-image-ssjs-debugging-and-error-handling.png",tags:["Marketing Cloud","SSJS","Debugging","Cloud Page","Email","Automation"]},sidebar:"docs",previous:{title:"Loops",permalink:"/docs/ssjs/ssjs-loops"},next:{title:"Style Guide",permalink:"/docs/ssjs/ssjs-style-guide"}},h={},u=[{value:"SSJS Testing Ground",id:"ssjs-testing-ground",level:2},{value:"Cloud Page",id:"cloud-page",level:3},{value:"JSON Code Resource",id:"json-code-resource",level:3},{value:"So where?",id:"so-where",level:3},{value:"500 - Internal Server Error",id:"500---internal-server-error",level:2},{value:"Divide and Conquer",id:"divide-and-conquer",level:3},{value:"SSJS Linting",id:"ssjs-linting",level:3},{value:"Write the Error down",id:"write-the-error-down",level:2},{value:"Debugging Variable",id:"debugging-variable",level:3},{value:"Console Logging",id:"console-logging",level:3},{value:"Try to Catch the Error",id:"try-to-catch-the-error",level:2},{value:"Throw Error",id:"throw-error",level:3},{value:"Error Logging",id:"error-logging",level:2},{value:"Logging to Data Extension",id:"logging-to-data-extension",level:3},{value:"Global Error Catching",id:"global-error-catching",level:3},{value:"Error Handler Function",id:"error-handler-function",level:2},{value:"Sum Up",id:"sum-up",level:2}];function g(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.m,{content:"To catch, or not to catch, that is debugging."}),"\n",(0,n.jsx)(r.p,{children:"When you start working with programmatic languages in Salesforce Marketing Cloud, you will quickly become close friends with the Error 500 page. And if you beat it and go forward with the code and official documentation, you will fall in love with unexpected errors in functions and API responses. How to survive those?"}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"ssjs-testing-ground",children:"SSJS Testing Ground"}),"\n",(0,n.jsx)(r.p,{children:"Before diving deep into errors, let's talk about where to write the SSJS. The language is useful in many places within the Marketing Cloud ecosystem. Among else in:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Cloud Pages (Web Studio)"}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"/docs/config/sfmc-code-resource",children:"Code Resources"})," (Web Studio -> Content Builder)"]}),"\n",(0,n.jsx)(r.li,{children:"Content Blocks (Content Builder)"}),"\n",(0,n.jsx)(r.li,{children:"Emails and other communication (Email Studio / Mobile Studio / Content Builder)"}),"\n",(0,n.jsx)(r.li,{children:"Script Activities (Automation Studio)"}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"In all of the above cases, you might write more complex logic that will be error-prone and in need of debugging. However, only a few of those are really good to test your code, as only some of them provide access to methods mentioned later in the article."}),"\n",(0,n.jsx)(r.h3,{id:"cloud-page",children:"Cloud Page"}),"\n",(0,n.jsx)(r.p,{children:"The most popular recommendation is Cloud Page - write or paste the SSJS code there, publish and check whether it is working correctly. It is a great way, as it allows you to easily leverage SSJS for the backend and HTML/CSS/JavaScript for the frontend."}),"\n",(0,n.jsx)(r.p,{children:"It has, however, two flaws that, in some scenarios, might guide you to a different solution."}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"Cost"}),". Each view of the Cloud Page costs one Super Message. During debugging, you might hit quite a lot of those. And those tests - across your team and over time - stack up."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"Speed and context"}),". Each time you want to republish the updated Cloud Page, you have to go through the Preview window (that load the whole code in POST method context), confirm it and go to the page via URL to see the GET method context."]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{title:"You Should Know",type:"note",children:(0,n.jsx)(r.p,{children:"Whenever you are writing an SSJS script on the Cloud Page, be sure to check your code on the published page, not the Web Studio Preview. Many SSJS functions do not work correctly in the Preview, so you might see errors that won't happen on the Cloud Page."})}),"\n",(0,n.jsx)(r.h3,{id:"json-code-resource",children:"JSON Code Resource"}),"\n",(0,n.jsxs)(r.p,{children:["When I want to go around those issues, I work in ",(0,n.jsx)(r.a,{href:"/docs/config/sfmc-code-resource",children:"JSON Code Resource"})," (in the past stored in Web Studio, now in Content Builder). It generates a link you can use to check whether everything works, just like a Cloud Page. However, page views are free. There is also no preview allowing for a faster save-reload cycle."]}),"\n",(0,n.jsx)(r.p,{children:"The cons? You won't be able to use any frontend (neither HTML nor JavaScript), which might be a deal-breaker in some scenarios."}),"\n",(0,n.jsx)(r.h3,{id:"so-where",children:"So where?"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"If you need"}),(0,n.jsx)(r.th,{children:"Cloud Page"}),(0,n.jsx)(r.th,{children:"JSON Code Resource"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"SSJS"}),(0,n.jsx)(r.td,{children:"\u2705"}),(0,n.jsx)(r.td,{children:"\u2705"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"HTML/CSS/JS"}),(0,n.jsx)(r.td,{children:"\u2705"}),(0,n.jsx)(r.td,{children:"\u274c"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"No Cost"}),(0,n.jsx)(r.td,{children:"\u274c"}),(0,n.jsx)(r.td,{children:"\u2705"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"Quick Save"}),(0,n.jsx)(r.td,{children:"\u274c"}),(0,n.jsx)(r.td,{children:"\u2705"})]})]})]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"500---internal-server-error",children:"500 - Internal Server Error"}),"\n",(0,n.jsxs)(r.p,{children:["The first type of error you might encounter is the dreaded 500 Error you see right after ",(0,n.jsx)(r.em,{children:"trying"})," to run your code Reason? The backend code (SSJS/AMPScript) is invalid. There might be a few reasons for this. The most popular are:"]}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsx)(r.li,{children:"Typo in SSJS Function Name"}),"\n",(0,n.jsx)(r.li,{children:"Unclosed or wrongly closed Bracket"}),"\n",(0,n.jsx)(r.li,{children:"Use of JavaScript feature that is not available in SSJS (there is quite a lot of those...)"}),"\n",(0,n.jsxs)(r.li,{children:["Lack of declaration (in most cases either missing variable declaration, ",(0,n.jsx)(r.code,{children:'Platform.Load("Core","1");'})," or ",(0,n.jsx)(r.code,{children:"var soap = new Script.Util.WSProxy();"})," while using it later in the code)"]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"How to deal with those issues? Apart from just reading through your code line by line, there are two faster solutions."}),"\n",(0,n.jsx)(r.h3,{id:"divide-and-conquer",children:"Divide and Conquer"}),"\n",(0,n.jsxs)(r.p,{children:["The first one can be done directly in the Marketing Cloud but is a bit of a brute-force approach. You block half of your code from running by enclosing it in a multiline comment (",(0,n.jsx)(r.code,{children:"/* here goes the code */"}),") and check again. If it works, you have half of the SSJS validated (from the 500 error perspective). If not, you split the remaining code in half and comment it out. Rinse, repeat. This way, you can quickly find the few lines that are the source of the issue and focus on validating them."]}),"\n",(0,n.jsx)(r.h3,{id:"ssjs-linting",children:"SSJS Linting"}),"\n",(0,n.jsx)(r.p,{children:"For many issues leading to 500 error, there is an even faster solution, but it requires some pre-work:"}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["You need to have ",(0,n.jsx)(r.a,{href:"https://code.visualstudio.com/",title:"Visual Studio Code Website",children:"Visual Studio Code"})," with ",(0,n.jsx)(r.a,{href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint",title:"ESLint in Visual Studio Code Marketplace",children:"ESLint extension"})," installed."]}),"\n",(0,n.jsxs)(r.li,{children:["You need to have ",(0,n.jsx)(r.a,{href:"https://nodejs.org/en/",title:"NodeJS Website",children:"NodeJS"})," installed."]}),"\n",(0,n.jsxs)(r.li,{children:["You need to have a folder where you will store your SSJS code in files with the ",(0,n.jsx)(r.code,{children:".ssjs"})," file extension."]}),"\n",(0,n.jsxs)(r.li,{children:["You need to install the excellent ",(0,n.jsx)(r.a,{href:"https://github.com/JoernBerkefeld/eslint-config-ssjs",title:"Joern Berkefeld Github Project with Config",children:"ESLing configuration for SSJS"})," made by ",(0,n.jsx)(r.a,{href:"https://www.linkedin.com/in/joernberkefeld/",title:"Joern Berkefeld LinkedIn",children:"Joern Berkefeld"}),". To do this, run in terminal ",(0,n.jsx)(r.code,{children:"npm i -D eslint eslint-config-ssjs"})," for the SSJS folder."]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"Once done, you have automatic SSJS code validation (again, only from the perspective of 500 error - but it is still worth it)."}),"\n",(0,n.jsx)(r.p,{children:"There is also a much more basic and less helpful but built-in solution to validate your SSJS code directly in the Marketing Cloud. Script Activity in Automation Studio. After adding your code there and clicking Validate Syntax button, it will check it against some basic rules. However, I recommend going with the ESLint. It provides much more value and is faster once configured."}),"\n",(0,n.jsx)(r.admonition,{title:"What about Try/Catch?",type:"note",children:(0,n.jsx)(r.p,{children:"There will be a separate section about Try/Catch. It does not work for issues leading to 500 Error."})}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"write-the-error-down",children:"Write the Error down"}),"\n",(0,n.jsxs)(r.p,{children:["You got past the 500 error. Great! The script is still not outputting what you wanted? It is time to check what else might be wrong. The easiest way is to use the ",(0,n.jsx)(r.code,{children:"Write"})," function. It shows whatever you pass in it to the frontend view. It is handy as SSJS does not support console.log due to its server-side nature (a little trick to make it work is below)."]}),"\n",(0,n.jsxs)(r.p,{children:["To use this function just add ",(0,n.jsx)(r.code,{children:"Write('This will be visible on the website')"})," between ",(0,n.jsx)(r.code,{children:"<script runat=\"server\"> Platform.Load('Core','1');"})," and ",(0,n.jsx)(r.code,{children:"<\/script>"}),"."]}),"\n",(0,n.jsx)(r.p,{children:"Of course, in real life, you will probably want to use it for variables:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-html",metastring:"{4}",children:"<script runat=\"server\">\n Platform.Load('Core','1');\n var response = HTTP.Get('http://www.example.com');\n Write('Response from example.com: ' + response + '<br><br>');\n<\/script>\n"})}),"\n",(0,n.jsxs)(r.p,{children:["As you can see in the code snippet above, I have more than just a ",(0,n.jsx)(r.code,{children:"response"})," variable within my ",(0,n.jsx)(r.code,{children:"Write"}),". The string before describes what is printed (useful mainly if you use multiple Writes in your code). The one after - ",(0,n.jsx)(r.code,{children:"<br><br>"})," - will separate it from the rest of the website content (however, as it is HTML, it won't work in JSON Code Resource. You can use ",(0,n.jsx)(r.code,{children:"\\n\\n"})," instead for the same outcome). I highly recommend this approach."]}),"\n",(0,n.jsx)(r.admonition,{title:"Few things to remember",type:"note",children:(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Write"})," is Core Library function, so you need to load it first in your script with ",(0,n.jsx)(r.code,{children:"Platform.Load('Core','1');"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["If the variable you want to output is an object, you need to parse it to a string using ",(0,n.jsx)(r.code,{children:"Stringify(response)"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["If you don't want to load Core Library, use Platform versions of those functions: ",(0,n.jsx)(r.code,{children:"Platform.Response.Write()"})," and ",(0,n.jsx)(r.code,{children:"Platform.Function.Stringify()"}),"."]}),"\n"]})}),"\n",(0,n.jsx)(r.h3,{id:"debugging-variable",children:"Debugging Variable"}),"\n",(0,n.jsxs)(r.p,{children:["Whenever you create a script for the long-term, it is good to keep your debugging ",(0,n.jsx)(r.code,{children:"Write"})," functions. There might be new requirements. Data sources change. Marketing Cloud too. And sometimes, those things might break your code."]}),"\n",(0,n.jsxs)(r.p,{children:["Of course, keeping the ",(0,n.jsx)(r.code,{children:"Writes"})," as above is a no-go. You don't want your customers to see those. But there is a neat little trick to eat the cake and have it too:"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-html",metastring:"{3,7}",children:"<script runat=\"server\">\n Platform.Load('Core','1');\n var debugging = true;\n\n var response = HTTP.Get('http://www.example.com?q=1234');\n\n if (debugging) {\n Write('Response from example.com: ' + response + '<br><br>');\n };\n<\/script>\n"})}),"\n",(0,n.jsx)(r.p,{children:"I added two things:"}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["There is ",(0,n.jsx)(r.code,{children:"var debugging = true;"})," near the top. When debugging, keep it on ",(0,n.jsx)(r.code,{children:"true"}),". When you publish it for production - change the value to ",(0,n.jsx)(r.code,{children:"false"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["The ",(0,n.jsx)(r.code,{children:"Write"})," is within the ",(0,n.jsx)(r.code,{children:"if"})," block. It now works only if the debugging variable equals ",(0,n.jsx)(r.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsx)(r.p,{children:"Make your life easier with a nice clean function that will save you a lot of time in the long run:"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",metastring:"{7-9,12}",children:"/**\n* @function debugValue\n* @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n* @param {string} description - Describes meaning of the second parameter in the output\n* @param {*} value - The value that needs to be debugged\n*/\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\nvar response = HTTP.Get('http://www.example.com?q=1234');\nif (debugging) debugValue('Response from example.com', response);\n"})}),(0,n.jsxs)(r.p,{children:["With this approach, once you copy-paste the function, you have cleaner debugging lines, less code to write, no worry whether you need to ",(0,n.jsx)(r.code,{children:"Stringify"})," or not and automatic new line addition for easier reading. Just pass debug description and the value you want to check and see the magic happen."]})]}),"\n",(0,n.jsx)(r.h3,{id:"console-logging",children:"Console Logging"}),"\n",(0,n.jsxs)(r.p,{children:["I mentioned before that SSJS does not support ",(0,n.jsx)(r.code,{children:"console.log"})," as it executes on a server. There is, however, a workaround that might bring the SSJS values to your console. SSJS personalization strings passed to your JavaScript can help:"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",children:"console.log('Response from example.com' + '<ctrl:var name=response />')\n"})}),"\n",(0,n.jsxs)(r.admonition,{title:"Passing Objects from SSJS to JS",type:"note",children:[(0,n.jsx)(r.p,{children:"If the variable you want to pass to JavaScript is an SSJS Object, you will need to create a parsed variable to make it work:"}),(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["In SSJS create ",(0,n.jsx)(r.code,{children:"var parsedResponse = Stringify(response);"})]}),"\n",(0,n.jsxs)(r.li,{children:["In JS change the personalization to ",(0,n.jsx)(r.code,{children:"console.log(<ctrl:var name=parsedResponse />)"})," (notice different ",(0,n.jsx)(r.code,{children:"name"})," value and lack of quotes around personalization string)"]}),"\n"]}),(0,n.jsxs)(r.p,{children:["Alternatively use ",(0,n.jsx)(r.a,{href:"/docs/ssjs/ssjs-if-and-switch#ternary",children:"ternary"})," to cover all scenarios:"]}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",children:"var parsedResponse = typeof response == 'object' ? Stringify(response) : response\n"})})]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"try-to-catch-the-error",children:"Try to Catch the Error"}),"\n",(0,n.jsxs)(r.p,{children:["Using ",(0,n.jsx)(r.code,{children:"Write"})," is a great and simple solution, but it will work only if the code runs correctly. And sometimes it won't. For those cases, add a Try-Catch block. Check the Response tab below to compare the difference between standard ",(0,n.jsx)(r.code,{children:"Write(response)"})," and writing the caught error."]}),"\n",(0,n.jsxs)(i.Z,{defaultValue:"request",values:[{label:"Request",value:"request"},{label:"Response",value:"response"}],children:[(0,n.jsx)(s.Z,{value:"request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-html",metastring:'{16,18} title="GET request to invalid URL within Try/Catch block"',children:"<script runat=\"server\">\n Platform.Load('Core','1');\n var debugging = true;\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n // Try/Catch Block with error Write\n try {\n var response = HTTP.Get('http://www.example.c');\n } catch (error) {\n if (debugging) debugValue('1. Error caught', error);\n };\n\n // Standard Write\n if (debugging) debugValue('2. Response from example.com', response);\n<\/script>\n"})})}),(0,n.jsxs)(s.Z,{value:"response",children:[(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",metastring:'title="Outcome visible on the Website"',children:'1. Error caught: {"message":"An error occurred when attempting to evaluate a HTTPGet function call. See inner exception for details.\\r\\n ClientID: 518000476\\r\\n JobID: 0\\r\\n ListID: 0\\r\\n BatchID: 0\\r\\n SubscriberID: 0\\r\\n URL: http://www.example.c\\r\\n","description":"ExactTarget.OMM.FunctionExecutionException: An error occurred when attempting to evaluate a HTTPGet function call. See inner exception for details.\\r\\n ClientID: 518000476\\r\\n JobID: 0\\r\\n ListID: 0\\r\\n BatchID: 0\\r\\n SubscriberID: 0\\r\\n URL: http://www.example.c\\r\\n Error Code: OMM_FUNC_EXEC_ERROR\\r\\n - from Jint --\x3e \\r\\n\\r\\n --- inner exception 1---\\r\\n\\r\\nExactTarget.OMM.OMMException: An exception occurred when attempting to retrieve content by a HttpGet call. URL: http://www.example.c\\r\\n Error Code: HTTP_WB_RTV\\r\\n - from OMMCommon --\x3e \\r\\n\\r\\n --- inner exception 2---\\r\\n\\r\\nSystem.Net.WebException: The remote name could not be resolved: \'www.example.c\' - from System\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n"}\n\n2. Response from example.com: undefined\n'})}),(0,n.jsxs)(r.p,{children:["As you can see, this response is quite long. The most important information is in the last sentence of first paragraph. In this example we learn that ",(0,n.jsx)(r.code,{children:"System.Net.WebException: The remote name could not be resolved: 'www.example.c' - from System"}),". It makes it easy to understand that there is issue with the URL we provided."]}),(0,n.jsxs)(r.p,{children:["You can also see why Try/Catch block is so valuable, as in second paragraph our ",(0,n.jsx)(r.code,{children:"Write"})," printed ",(0,n.jsx)(r.code,{children:"undefined"}),", which isn't very helpful. This is due to the fact, that because of the invalid URL, the GET did not return to response variable."]})]})]}),"\n",(0,n.jsx)(r.p,{children:"Try/Catch is especially useful for SSJS Functions that call out-of-page data. Marketing Cloud Data Extensions, Salesforce Objects or even data sources from outside the Salesforce environment. It also will help when you are handling responses from such sources. For example, trying to get value from a nested object."}),"\n",(0,n.jsxs)(r.p,{children:["In most cases, the simple Try/Catch will be all you need, but there is also a third element that might be very helpful: ",(0,n.jsx)(r.code,{children:"finally"}),". Its purpose is to store a code that will execute, no matter what. Great for a cleanup code that must run regardless whether the previous logic was successful or not."]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",metastring:"{5}",children:"try {\n // Risky code\n} catch (error) {\n // Code that will be executed if the risky code crashes\n} finally {\n // Code that will be executed always\n};\n"})}),"\n",(0,n.jsx)(r.p,{children:"Out of the three, SSJS requires only Try. You can use it with Catch, Finally or both, depending on your use case."}),"\n",(0,n.jsxs)(r.admonition,{title:"You should know",type:"note",children:[(0,n.jsxs)(r.p,{children:["Try/Catch block in SSJS has separate scope. It means that any ",(0,n.jsx)(r.strong,{children:"variables declared within the block won't be accessible from outside"}),". Neither in the other parts of SSJS nor by personalization strings."]}),(0,n.jsxs)(r.p,{children:["There is a way to overcome this limitation. Declare the variables you want to use globally before the ",(0,n.jsx)(r.code,{children:"try"})," and modify their values within the block:"]}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-html",metastring:"{4,6}",children:"<script runat=\"server\">\n Platform.Load('Core','1');\n\n var response;\n try {\n response = HTTP.Get('http://www.example.com');\n } catch (error) {\n // Error handling logic\n };\n<\/script>\n"})})]}),"\n",(0,n.jsx)(r.h3,{id:"throw-error",children:"Throw Error"}),"\n",(0,n.jsxs)(r.p,{children:["You can leverage the Try/Catch block further by implementing your custom errors with ",(0,n.jsx)(r.code,{children:"throw"}),". Why would you break your own code on purpose? It will help you control the execution of the code - especially if it uses external data. It can also be great for debugging and streamlining user experience."]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",metastring:"{10,12}",children:'try {\n if (submissionData.greCaptcha) {\n var secret = "XXX";\n var payload = "secret=" + secret + "&response=" + submissionData.greCaptcha;\n var contentType = "application/x-www-form-urlencoded";\n var endpoint = "https://www.google.com/recaptcha/api/siteverify";\n var response = HTTP.Post(endpoint, contentType, payload);\n if (response.StatusCode == 200) {\n var parsedResponse = Platform.Function.ParseJSON(String(response.Response));\n if (!parsedResponse.success) throw \'Wrong reCAPTCHA\';\n } else {\n throw \'reCAPTCHA API error\';\n };\n };\n} catch (error) {\n debugValue(\'reCaptcha Error\', error);\n};\n'})}),"\n",(0,n.jsxs)(r.p,{children:["In the above example, you can see that we are checking whether the response from our reCaptcha validation to know whether we reached the Google server (else we throw ",(0,n.jsx)(r.code,{children:"reCAPTCHA API error"}),") and if yes - was the Captcha solved."]}),"\n",(0,n.jsxs)(r.p,{children:["Here I'm using the string passed to ",(0,n.jsx)(r.code,{children:"throw"})," just for debugging purposes, but you can use it for an overlay with feedback to your client or log the error."]}),"\n",(0,n.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(r.p,{children:["You are not limited to strings with the ",(0,n.jsx)(r.code,{children:"throw"}),". You can also pass objects to mimic the Marketing Cloud errors. It will make error handling much easier:"]}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",metastring:"{2}",children:"if (response.StatusCode != 200) {\n throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};\n};\n"})})]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"error-logging",children:"Error Logging"}),"\n",(0,n.jsx)(r.p,{children:"Once you debug your code using the above methods, it is still good to program defensively and leverage the Try/Catch block in the production environment. It will allow you to handle the errors for the customers and log the errors to a data extension (it will provide you with a history of problems along with a description of what happened). You can even build something more sophisticated, like automatically creating a JIRA bug ticket."}),"\n",(0,n.jsx)(r.h3,{id:"logging-to-data-extension",children:"Logging to Data Extension"}),"\n",(0,n.jsx)(r.p,{children:"The easiest way to log your errors is to leverage Marketing Cloud Data Extensions."}),"\n",(0,n.jsx)(r.p,{children:"My recommendation is to create one Data Extension that will capture all the errors from the whole instance. It will make it much easier and faster to check any new issues."}),"\n",(0,n.jsx)(r.p,{children:"Here you can find a sample setup:"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Column Name"}),(0,n.jsx)(r.th,{children:"Primary Key"}),(0,n.jsx)(r.th,{children:"Length"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Nullable"}),(0,n.jsx)(r.th,{children:"Default Value"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"id"}),(0,n.jsx)(r.td,{children:"Yes"}),(0,n.jsx)(r.td,{children:"36"}),(0,n.jsx)(r.td,{children:"Text"}),(0,n.jsx)(r.td,{children:"No"}),(0,n.jsx)(r.td,{})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"errorSource"}),(0,n.jsx)(r.td,{}),(0,n.jsx)(r.td,{children:"100"}),(0,n.jsx)(r.td,{children:"Text"}),(0,n.jsx)(r.td,{children:"No"}),(0,n.jsx)(r.td,{})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"errorMessage"}),(0,n.jsx)(r.td,{}),(0,n.jsx)(r.td,{children:"2000"}),(0,n.jsx)(r.td,{children:"Text"}),(0,n.jsx)(r.td,{children:"Yes"}),(0,n.jsx)(r.td,{})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"errorDescription"}),(0,n.jsx)(r.td,{}),(0,n.jsx)(r.td,{children:"2000"}),(0,n.jsx)(r.td,{children:"Text"}),(0,n.jsx)(r.td,{children:"Yes"}),(0,n.jsx)(r.td,{})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"errorDate"}),(0,n.jsx)(r.td,{}),(0,n.jsx)(r.td,{}),(0,n.jsx)(r.td,{children:"Date"}),(0,n.jsx)(r.td,{children:"Yes"}),(0,n.jsx)(r.td,{children:"Current Date"})]})]})]}),"\n",(0,n.jsx)(r.p,{children:"If you have multiple Business Units on your instance, add it as a Shared Data Extension."}),"\n",(0,n.jsx)(r.p,{children:"It shouldn't be sendable or testable, but consider adding a retention period. Align it with the internal process for checking it for new issues. Seven days per record is a good starting point."}),"\n",(0,n.jsx)(r.h3,{id:"global-error-catching",children:"Global Error Catching"}),"\n",(0,n.jsxs)(r.p,{children:["Instead of writing Try/Catch blocks for every potentially risky function, you might create just one block that will capture the whole code. You can even use it to catch errors in your AMPScript, as described by ",(0,n.jsx)(r.a,{href:"https://sfmarketing.cloud/2019/08/09/debugging-ampscript/",title:"Blog post on AMPScript Debugging on sfmarketing.cloud",children:"Zuzanna Jarczy\u0144ska"}),"."]}),"\n",(0,n.jsx)(r.p,{children:"This approach might make your code shorter and more comfortable to read but limit your control over specific handling for various scenarios."}),"\n",(0,n.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(r.p,{children:["Any redirect within your ",(0,n.jsx)(r.code,{children:"try"})," block is recognized as an error and caught. If you need to use a redirect, don't use the global Try/Catch approach and instead leverage it only for potentially problematic code."]}),(0,n.jsxs)(r.p,{children:["You can also leverage one of the approaches mentioned by Gortonington in ",(0,n.jsx)(r.a,{href:"https://www.howtosfmc.com/articles/the-catches-of-try-catch-in-sfmc-ssjs/",children:"his article on Try/Catch"}),". It might be instrumental when you want to leverage redirect to handle the customer's error."]})]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"error-handler-function",children:"Error Handler Function"}),"\n",(0,n.jsxs)(r.p,{children:["Once you start implementing the solutions mentioned above, it might get quite repetitive to add the same lines for conditional ",(0,n.jsx)(r.code,{children:"Write"}),", log to Data Extension, et cetera."]}),"\n",(0,n.jsx)(r.p,{children:"You can solve it by creating a single Error Handler function and just calling it wherever it is needed:"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-html",metastring:"{22-33,38}",children:"<script runat=\"server\">\n Platform.Load('Core','1');\n var debugging = true;\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /**\n * @function handleError\n * @description If debuging is enabled, outputs the error value. Else, adds the error with context to error logging Data Extension.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(\n 'Data_Extension_Name',\n ['id', 'errorSource', 'errorMessage', 'errorDescription'],\n [GUID(), 'Name of the asset where the script runs', Stringify(error.message), Stringify(error.description)]\n );\n };\n };\n\n try {\n var response = HTTP.Get('http://www.example.c');\n } catch (error) {\n handleError(error);\n };\n<\/script>\n"})}),"\n",(0,n.jsxs)(r.p,{children:["Whenever the Try/Catch block finds an error, the above snippet will check the value of debugging variable. If it is equal to ",(0,n.jsx)(r.code,{children:"true"}),", it will just Write the error to the page to make it easier to debug quickly. If it is ",(0,n.jsx)(r.code,{children:"false"}),", it will add the error to the Data Extension instead."]}),"\n",(0,n.jsxs)(r.p,{children:["Most of the Marketing Cloud Errors are objects with two keys: ",(0,n.jsx)(r.code,{children:"message"})," and ",(0,n.jsx)(r.code,{children:"description"}),". Putting those elements into separate columns of the Data Extension make it easier to read the log."]}),"\n",(0,n.jsx)(r.p,{children:"Using the Error Handler Function is useful, especially when you are triggering it multiple times or when you have elaborate logic for handling (for example, API calls to external systems for bug tracking)."}),"\n",(0,n.jsxs)(r.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(r.p,{children:["You can also create your custom error, by passing a custom object to the ",(0,n.jsx)(r.code,{children:"handleErrror"})," function:"]}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-js",children:"handleError({message: 'Custom Error Message', description: 'Custom Error Description'});\n"})})]}),"\n",(0,n.jsxs)(r.p,{children:["There is also a new solution - ",(0,n.jsx)(r.a,{href:"https://github.com/email360/ssjs-lib",children:"SSJS Lib"})," - created by email360. Among other tools, they support ",(0,n.jsx)(r.a,{href:"https://docs.email360.io/#console_log",children:"console logging"})," and simplified ",(0,n.jsx)(r.a,{href:"https://docs.email360.io/#debug",children:"debugging"}),". You can read more about the implementation ",(0,n.jsx)(r.a,{href:"https://blog.email360.io/posts/core/better-debug.html",children:"here"}),"."]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h2,{id:"sum-up",children:"Sum Up"}),"\n",(0,n.jsx)(r.p,{children:"If you have any problems with your SSJS code:"}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["Test it in Cloud Page or JSON Code Resource ",(0,n.jsx)(r.a,{href:"#ssjs-testing-ground",children:"\ud83d\udd17"})]}),"\n",(0,n.jsxs)(r.li,{children:["Overcome 500 Error with linting or divide & conquer methodology ",(0,n.jsx)(r.a,{href:"#500---internal-server-error",children:"\ud83d\udd17"})]}),"\n",(0,n.jsxs)(r.li,{children:["Use the ",(0,n.jsx)(r.code,{children:"Write"})," function to understand what happens with your variables during execution ",(0,n.jsx)(r.a,{href:"#write-the-error-down",children:"\ud83d\udd17"})]}),"\n",(0,n.jsxs)(r.li,{children:["Use the Try/Catch block to understand better what is the reason for errors you encounter ",(0,n.jsx)(r.a,{href:"#try-to-catch-the-error",children:"\ud83d\udd17"})]}),"\n",(0,n.jsxs)(r.li,{children:["Save errors from your production code to easily track and solve the problems ",(0,n.jsx)(r.a,{href:"#error-logging",children:"\ud83d\udd17"})]}),"\n",(0,n.jsxs)(r.li,{children:["Simplify the approach with custom Error Handler Function ",(0,n.jsx)(r.a,{href:"#error-handler-function",children:"\ud83d\udd17"})]}),"\n"]})]})}function p(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(g,{...e})}):g(e)}},425:(e,r,t)=>{t.d(r,{Z:()=>s});t(7294);var n=t(512);const o={tabItem:"tabItem_Ymn6"};var i=t(5893);function s(e){let{children:r,hidden:t,className:s}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.Z)(o.tabItem,s),hidden:t,children:r})}},3992:(e,r,t)=>{t.d(r,{Z:()=>v});var n=t(7294),o=t(512),i=t(2957),s=t(6550),a=t(1270),l=t(5238),c=t(3609),d=t(2560);function h(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:r,children:t}=e;return(0,n.useMemo)((()=>{const e=r??function(e){return h(e).map((e=>{let{props:{value:r,label:t,attributes:n,default:o}}=e;return{value:r,label:t,attributes:n,default:o}}))}(t);return function(e){const r=(0,c.l)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,t])}function g(e){let{value:r,tabValues:t}=e;return t.some((e=>e.value===r))}function p(e){let{queryString:r=!1,groupId:t}=e;const o=(0,s.k6)(),i=function(e){let{queryString:r=!1,groupId:t}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:r,groupId:t});return[(0,l._X)(i),(0,n.useCallback)((e=>{if(!i)return;const r=new URLSearchParams(o.location.search);r.set(i,e),o.replace({...o.location,search:r.toString()})}),[i,o])]}function m(e){const{defaultValue:r,queryString:t=!1,groupId:o}=e,i=u(e),[s,l]=(0,n.useState)((()=>function(e){let{defaultValue:r,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(r){if(!g({value:r,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const n=t.find((e=>e.default))??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:r,tabValues:i}))),[c,h]=p({queryString:t,groupId:o}),[m,x]=function(e){let{groupId:r}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(r),[o,i]=(0,d.Nk)(t);return[o,(0,n.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:o}),j=(()=>{const e=c??m;return g({value:e,tabValues:i})?e:null})();(0,a.Z)((()=>{j&&l(j)}),[j]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!g({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),x(e)}),[h,x,i]),tabValues:i}}var x=t(1048);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=t(5893);function b(e){let{className:r,block:t,selectedValue:n,selectValue:s,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const r=e.currentTarget,t=l.indexOf(r),o=a[t].value;o!==n&&(c(r),s(o))},h=e=>{let r=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;r=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;r=l[t]??l[l.length-1];break}}r?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":t},r),children:a.map((e=>{let{value:r,label:t,attributes:i}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:n===r?0:-1,"aria-selected":n===r,ref:e=>l.push(e),onKeyDown:h,onClick:d,...i,className:(0,o.Z)("tabs__item",j.tabItem,i?.className,{"tabs__item--active":n===r}),children:t??r},r)}))})}function w(e){let{lazy:r,children:t,selectedValue:o}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(r){const e=i.find((e=>e.props.value===o));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:i.map(((e,r)=>(0,n.cloneElement)(e,{key:r,hidden:e.props.value!==o})))})}function y(e){const r=m(e);return(0,f.jsxs)("div",{className:(0,o.Z)("tabs-container",j.tabList),children:[(0,f.jsx)(b,{...e,...r}),(0,f.jsx)(w,{...e,...r})]})}function v(e){const r=(0,x.Z)();return(0,f.jsx)(y,{...e,children:h(e.children)},String(r))}},1872:(e,r,t)=>{t.d(r,{m:()=>i});t(7294);const n="leadText_qzwo";var o=t(5893);const i=e=>{let{content:r}=e;return(0,o.jsx)(o.Fragment,{children:(0,o.jsx)("p",{id:n,children:r})})}},1151:(e,r,t)=>{t.d(r,{Z:()=>a,a:()=>s});var n=t(7294);const o={},i=n.createContext(o);function s(e){const r=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/92cda9bf.c1740670.js b/assets/js/92cda9bf.c1740670.js deleted file mode 100644 index 24f7fd3c8..000000000 --- a/assets/js/92cda9bf.c1740670.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4200],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=u(n),m=a,h=c["".concat(s,".").concat(m)]||c[m]||p[m]||o;return n?r.createElement(h,i(i({ref:t},d),{},{components:n})):r.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var u=2;u<o;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},425:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(7294),a=n(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return r.createElement("div",{role:"tabpanel",className:(0,a.Z)(o.tabItem,i),hidden:n},t)}},3992:(e,t,n)=>{n.d(t,{Z:()=>v});var r=n(7462),a=n(7294),o=n(6010),i=n(2957),l=n(6550),s=n(5238),u=n(3609),d=n(2560);function c(e){return function(e){return a.Children.map(e,(e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:a}}=e;return{value:t,label:n,attributes:r,default:a}}))}function p(e){const{values:t,children:n}=e;return(0,a.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const r=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=p(e),[i,l]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[s,u]=h({queryString:n,groupId:r}),[c,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,d.Nk)(n);return[r,(0,a.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),k=(()=>{const e=s??c;return m({value:e,tabValues:o})?e:null})();(0,a.useLayoutEffect)((()=>{k&&l(k)}),[k]);return{selectedValue:i,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),g(e)}),[u,g,o]),tabValues:o}}var k=n(1048);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),p=e=>{const t=e.currentTarget,n=d.indexOf(t),r=u[n].value;r!==l&&(c(t),s(r))},m=e=>{let t=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;t=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;t=d[n]??d[d.length-1];break}}t?.focus()};return a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>d.push(e),onKeyDown:m,onClick:p},i,{className:(0,o.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function y(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,a.cloneElement)(e,{className:"margin-top--md"}):null}return a.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function w(e){const t=g(e);return a.createElement("div",{className:(0,o.Z)("tabs-container",f.tabList)},a.createElement(b,(0,r.Z)({},e,t)),a.createElement(y,(0,r.Z)({},e,t)))}function v(e){const t=(0,k.Z)();return a.createElement(w,(0,r.Z)({key:String(t)},e))}},1872:(e,t,n)=>{n.d(t,{m:()=>o});var r=n(7294);const a="leadText_qzwo",o=e=>{let{content:t}=e;return r.createElement(r.Fragment,null,r.createElement("p",{id:a},t))}},8943:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>d,toc:()=>p});var r=n(7462),a=(n(7294),n(4137)),o=n(3992),i=n(425),l=n(1872);const s={id:"debugging-ssjs",title:"SSJS Debugging & Error Handling",sidebar_label:"Debugging & Error Handling",description:"To catch, or not to catch, that is debugging.",image:"img/og/og-image-ssjs-debugging-and-error-handling.png",tags:["Marketing Cloud","SSJS","Debugging","Cloud Page","Email","Automation"]},u=void 0,d={unversionedId:"ssjs/debugging-ssjs",id:"ssjs/debugging-ssjs",title:"SSJS Debugging & Error Handling",description:"To catch, or not to catch, that is debugging.",source:"@site/docs/ssjs/debugging-ssjs.mdx",sourceDirName:"ssjs",slug:"/ssjs/debugging-ssjs",permalink:"/docs/ssjs/debugging-ssjs",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/debugging-ssjs.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"Email",permalink:"/docs/tags/email"},{label:"Automation",permalink:"/docs/tags/automation"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"debugging-ssjs",title:"SSJS Debugging & Error Handling",sidebar_label:"Debugging & Error Handling",description:"To catch, or not to catch, that is debugging.",image:"img/og/og-image-ssjs-debugging-and-error-handling.png",tags:["Marketing Cloud","SSJS","Debugging","Cloud Page","Email","Automation"]},sidebar:"docs",previous:{title:"Loops",permalink:"/docs/ssjs/ssjs-loops"},next:{title:"Style Guide",permalink:"/docs/ssjs/ssjs-style-guide"}},c={},p=[{value:"SSJS Testing Ground",id:"ssjs-testing-ground",level:2},{value:"Cloud Page",id:"cloud-page",level:3},{value:"JSON Code Resource",id:"json-code-resource",level:3},{value:"So where?",id:"so-where",level:3},{value:"500 - Internal Server Error",id:"500---internal-server-error",level:2},{value:"Divide and Conquer",id:"divide-and-conquer",level:3},{value:"SSJS Linting",id:"ssjs-linting",level:3},{value:"Write the Error down",id:"write-the-error-down",level:2},{value:"Debugging Variable",id:"debugging-variable",level:3},{value:"Console Logging",id:"console-logging",level:3},{value:"Try to Catch the Error",id:"try-to-catch-the-error",level:2},{value:"Throw Error",id:"throw-error",level:3},{value:"Error Logging",id:"error-logging",level:2},{value:"Logging to Data Extension",id:"logging-to-data-extension",level:3},{value:"Global Error Catching",id:"global-error-catching",level:3},{value:"Error Handler Function",id:"error-handler-function",level:2},{value:"Sum Up",id:"sum-up",level:2}],m={toc:p},h="wrapper";function g(e){let{components:t,...n}=e;return(0,a.kt)(h,(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(l.m,{content:"To catch, or not to catch, that is debugging.",mdxType:"LeadText"}),(0,a.kt)("p",null,"When you start working with programmatic languages in Salesforce Marketing Cloud, you will quickly become close friends with the Error 500 page. And if you beat it and go forward with the code and official documentation, you will fall in love with unexpected errors in functions and API responses. How to survive those?"),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"ssjs-testing-ground"},"SSJS Testing Ground"),(0,a.kt)("p",null,"Before diving deep into errors, let's talk about where to write the SSJS. The language is useful in many places within the Marketing Cloud ecosystem. Among else in:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Cloud Pages (Web Studio)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/docs/config/sfmc-code-resource"},"Code Resources")," (Web Studio -> Content Builder)"),(0,a.kt)("li",{parentName:"ul"},"Content Blocks (Content Builder)"),(0,a.kt)("li",{parentName:"ul"},"Emails and other communication (Email Studio / Mobile Studio / Content Builder)"),(0,a.kt)("li",{parentName:"ul"},"Script Activities (Automation Studio)")),(0,a.kt)("p",null,"In all of the above cases, you might write more complex logic that will be error-prone and in need of debugging. However, only a few of those are really good to test your code, as only some of them provide access to methods mentioned later in the article."),(0,a.kt)("h3",{id:"cloud-page"},"Cloud Page"),(0,a.kt)("p",null,"The most popular recommendation is Cloud Page - write or paste the SSJS code there, publish and check whether it is working correctly. It is a great way, as it allows you to easily leverage SSJS for the backend and HTML/CSS/JavaScript for the frontend."),(0,a.kt)("p",null,"It has, however, two flaws that, in some scenarios, might guide you to a different solution."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Cost"),". Each view of the Cloud Page costs one Super Message. During debugging, you might hit quite a lot of those. And those tests - across your team and over time - stack up."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Speed and context"),". Each time you want to republish the updated Cloud Page, you have to go through the Preview window (that load the whole code in POST method context), confirm it and go to the page via URL to see the GET method context.")),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Whenever you are writing an SSJS script on the Cloud Page, be sure to check your code on the published page, not the Web Studio Preview. Many SSJS functions do not work correctly in the Preview, so you might see errors that won't happen on the Cloud Page.")),(0,a.kt)("h3",{id:"json-code-resource"},"JSON Code Resource"),(0,a.kt)("p",null,"When I want to go around those issues, I work in ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource"},"JSON Code Resource")," (in the past stored in Web Studio, now in Content Builder). It generates a link you can use to check whether everything works, just like a Cloud Page. However, page views are free. There is also no preview allowing for a faster save-reload cycle."),(0,a.kt)("p",null,"The cons? You won't be able to use any frontend (neither HTML nor JavaScript), which might be a deal-breaker in some scenarios."),(0,a.kt)("h3",{id:"so-where"},"So where?"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"If you need"),(0,a.kt)("th",{parentName:"tr",align:null},"Cloud Page"),(0,a.kt)("th",{parentName:"tr",align:null},"JSON Code Resource"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"SSJS"),(0,a.kt)("td",{parentName:"tr",align:null},"\u2705"),(0,a.kt)("td",{parentName:"tr",align:null},"\u2705")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"HTML/CSS/JS"),(0,a.kt)("td",{parentName:"tr",align:null},"\u2705"),(0,a.kt)("td",{parentName:"tr",align:null},"\u274c")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"No Cost"),(0,a.kt)("td",{parentName:"tr",align:null},"\u274c"),(0,a.kt)("td",{parentName:"tr",align:null},"\u2705")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Quick Save"),(0,a.kt)("td",{parentName:"tr",align:null},"\u274c"),(0,a.kt)("td",{parentName:"tr",align:null},"\u2705")))),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"500---internal-server-error"},"500 - Internal Server Error"),(0,a.kt)("p",null,"The first type of error you might encounter is the dreaded 500 Error you see right after ",(0,a.kt)("em",{parentName:"p"},"trying")," to run your code Reason? The backend code (SSJS/AMPScript) is invalid. There might be a few reasons for this. The most popular are:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Typo in SSJS Function Name"),(0,a.kt)("li",{parentName:"ol"},"Unclosed or wrongly closed Bracket"),(0,a.kt)("li",{parentName:"ol"},"Use of JavaScript feature that is not available in SSJS (there is quite a lot of those...)"),(0,a.kt)("li",{parentName:"ol"},"Lack of declaration (in most cases either missing variable declaration, ",(0,a.kt)("inlineCode",{parentName:"li"},'Platform.Load("Core","1");')," or ",(0,a.kt)("inlineCode",{parentName:"li"},"var soap = new Script.Util.WSProxy();")," while using it later in the code)")),(0,a.kt)("p",null,"How to deal with those issues? Apart from just reading through your code line by line, there are two faster solutions."),(0,a.kt)("h3",{id:"divide-and-conquer"},"Divide and Conquer"),(0,a.kt)("p",null,"The first one can be done directly in the Marketing Cloud but is a bit of a brute-force approach. You block half of your code from running by enclosing it in a multiline comment (",(0,a.kt)("inlineCode",{parentName:"p"},"/* here goes the code */"),") and check again. If it works, you have half of the SSJS validated (from the 500 error perspective). If not, you split the remaining code in half and comment it out. Rinse, repeat. This way, you can quickly find the few lines that are the source of the issue and focus on validating them."),(0,a.kt)("h3",{id:"ssjs-linting"},"SSJS Linting"),(0,a.kt)("p",null,"For many issues leading to 500 error, there is an even faster solution, but it requires some pre-work:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"You need to have ",(0,a.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/",title:"Visual Studio Code Website"},"Visual Studio Code")," with ",(0,a.kt)("a",{parentName:"li",href:"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint",title:"ESLint in Visual Studio Code Marketplace"},"ESLint extension")," installed."),(0,a.kt)("li",{parentName:"ol"},"You need to have ",(0,a.kt)("a",{parentName:"li",href:"https://nodejs.org/en/",title:"NodeJS Website"},"NodeJS")," installed."),(0,a.kt)("li",{parentName:"ol"},"You need to have a folder where you will store your SSJS code in files with the ",(0,a.kt)("inlineCode",{parentName:"li"},".ssjs")," file extension."),(0,a.kt)("li",{parentName:"ol"},"You need to install the excellent ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/JoernBerkefeld/eslint-config-ssjs",title:"Joern Berkefeld Github Project with Config"},"ESLing configuration for SSJS")," made by ",(0,a.kt)("a",{parentName:"li",href:"https://www.linkedin.com/in/joernberkefeld/",title:"Joern Berkefeld LinkedIn"},"Joern Berkefeld"),". To do this, run in terminal ",(0,a.kt)("inlineCode",{parentName:"li"},"npm i -D eslint eslint-config-ssjs")," for the SSJS folder.")),(0,a.kt)("p",null,"Once done, you have automatic SSJS code validation (again, only from the perspective of 500 error - but it is still worth it)."),(0,a.kt)("p",null,"There is also a much more basic and less helpful but built-in solution to validate your SSJS code directly in the Marketing Cloud. Script Activity in Automation Studio. After adding your code there and clicking Validate Syntax button, it will check it against some basic rules. However, I recommend going with the ESLint. It provides much more value and is faster once configured."),(0,a.kt)("admonition",{title:"What about Try/Catch?",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"There will be a separate section about Try/Catch. It does not work for issues leading to 500 Error.")),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"write-the-error-down"},"Write the Error down"),(0,a.kt)("p",null,"You got past the 500 error. Great! The script is still not outputting what you wanted? It is time to check what else might be wrong. The easiest way is to use the ",(0,a.kt)("inlineCode",{parentName:"p"},"Write")," function. It shows whatever you pass in it to the frontend view. It is handy as SSJS does not support console.log due to its server-side nature (a little trick to make it work is below)."),(0,a.kt)("p",null,"To use this function just add ",(0,a.kt)("inlineCode",{parentName:"p"},"Write('This will be visible on the website')")," between ",(0,a.kt)("inlineCode",{parentName:"p"},"<script runat=\"server\"> Platform.Load('Core','1');")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"<\/script>"),"."),(0,a.kt)("p",null,"Of course, in real life, you will probably want to use it for variables:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"{4}","{4}":!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n var response = HTTP.Get('http://www.example.com');\n Write('Response from example.com: ' + response + '<br><br>');\n<\/script>\n")),(0,a.kt)("p",null,"As you can see in the code snippet above, I have more than just a ",(0,a.kt)("inlineCode",{parentName:"p"},"response")," variable within my ",(0,a.kt)("inlineCode",{parentName:"p"},"Write"),". The string before describes what is printed (useful mainly if you use multiple Writes in your code). The one after - ",(0,a.kt)("inlineCode",{parentName:"p"},"<br><br>")," - will separate it from the rest of the website content (however, as it is HTML, it won't work in JSON Code Resource. You can use ",(0,a.kt)("inlineCode",{parentName:"p"},"\\n\\n")," instead for the same outcome). I highly recommend this approach."),(0,a.kt)("admonition",{title:"Few things to remember",type:"note"},(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"Write")," is Core Library function, so you need to load it first in your script with ",(0,a.kt)("inlineCode",{parentName:"li"},"Platform.Load('Core','1');"),"."),(0,a.kt)("li",{parentName:"ol"},"If the variable you want to output is an object, you need to parse it to a string using ",(0,a.kt)("inlineCode",{parentName:"li"},"Stringify(response)"),"."),(0,a.kt)("li",{parentName:"ol"},"If you don't want to load Core Library, use Platform versions of those functions: ",(0,a.kt)("inlineCode",{parentName:"li"},"Platform.Response.Write()")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"Platform.Function.Stringify()"),"."))),(0,a.kt)("h3",{id:"debugging-variable"},"Debugging Variable"),(0,a.kt)("p",null,"Whenever you create a script for the long-term, it is good to keep your debugging ",(0,a.kt)("inlineCode",{parentName:"p"},"Write")," functions. There might be new requirements. Data sources change. Marketing Cloud too. And sometimes, those things might break your code."),(0,a.kt)("p",null,"Of course, keeping the ",(0,a.kt)("inlineCode",{parentName:"p"},"Writes")," as above is a no-go. You don't want your customers to see those. But there is a neat little trick to eat the cake and have it too:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"{3,7}","{3,7}":!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n var debugging = true;\n\n var response = HTTP.Get('http://www.example.com?q=1234');\n\n if (debugging) {\n Write('Response from example.com: ' + response + '<br><br>');\n };\n<\/script>\n")),(0,a.kt)("p",null,"I added two things:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"There is ",(0,a.kt)("inlineCode",{parentName:"li"},"var debugging = true;")," near the top. When debugging, keep it on ",(0,a.kt)("inlineCode",{parentName:"li"},"true"),". When you publish it for production - change the value to ",(0,a.kt)("inlineCode",{parentName:"li"},"false"),"."),(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("inlineCode",{parentName:"li"},"Write")," is within the ",(0,a.kt)("inlineCode",{parentName:"li"},"if")," block. It now works only if the debugging variable equals ",(0,a.kt)("inlineCode",{parentName:"li"},"true"),".")),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Make your life easier with a nice clean function that will save you a lot of time in the long run:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{7-9,12}","{7-9,12}":!0},"/**\n* @function debugValue\n* @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n* @param {string} description - Describes meaning of the second parameter in the output\n* @param {*} value - The value that needs to be debugged\n*/\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\nvar response = HTTP.Get('http://www.example.com?q=1234');\nif (debugging) debugValue('Response from example.com', response);\n")),(0,a.kt)("p",{parentName:"admonition"},"With this approach, once you copy-paste the function, you have cleaner debugging lines, less code to write, no worry whether you need to ",(0,a.kt)("inlineCode",{parentName:"p"},"Stringify")," or not and automatic new line addition for easier reading. Just pass debug description and the value you want to check and see the magic happen.")),(0,a.kt)("h3",{id:"console-logging"},"Console Logging"),(0,a.kt)("p",null,"I mentioned before that SSJS does not support ",(0,a.kt)("inlineCode",{parentName:"p"},"console.log")," as it executes on a server. There is, however, a workaround that might bring the SSJS values to your console. SSJS personalization strings passed to your JavaScript can help:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"console.log('Response from example.com' + '<ctrl:var name=response />')\n")),(0,a.kt)("admonition",{title:"Passing Objects from SSJS to JS",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"If the variable you want to pass to JavaScript is an SSJS Object, you will need to create a parsed variable to make it work:"),(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},"In SSJS create ",(0,a.kt)("inlineCode",{parentName:"li"},"var parsedResponse = Stringify(response);")),(0,a.kt)("li",{parentName:"ol"},"In JS change the personalization to ",(0,a.kt)("inlineCode",{parentName:"li"},"console.log(<ctrl:var name=parsedResponse />)")," (notice different ",(0,a.kt)("inlineCode",{parentName:"li"},"name")," value and lack of quotes around personalization string)")),(0,a.kt)("p",{parentName:"admonition"},"Alternatively use ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-if-and-switch#ternary"},"ternary")," to cover all scenarios:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-js"},"var parsedResponse = typeof response == 'object' ? Stringify(response) : response\n"))),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"try-to-catch-the-error"},"Try to Catch the Error"),(0,a.kt)("p",null,"Using ",(0,a.kt)("inlineCode",{parentName:"p"},"Write")," is a great and simple solution, but it will work only if the code runs correctly. And sometimes it won't. For those cases, add a Try-Catch block. Check the Response tab below to compare the difference between standard ",(0,a.kt)("inlineCode",{parentName:"p"},"Write(response)")," and writing the caught error."),(0,a.kt)(o.Z,{defaultValue:"request",values:[{label:"Request",value:"request"},{label:"Response",value:"response"}],mdxType:"Tabs"},(0,a.kt)(i.Z,{value:"request",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'{16,18} title="GET request to invalid URL within Try/Catch block"',"{16,18}":!0,title:'"GET',request:!0,to:!0,invalid:!0,URL:!0,within:!0,"Try/Catch":!0,'block"':!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n var debugging = true;\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n // Try/Catch Block with error Write\n try {\n var response = HTTP.Get('http://www.example.c');\n } catch (error) {\n if (debugging) debugValue('1. Error caught', error);\n };\n\n // Standard Write\n if (debugging) debugValue('2. Response from example.com', response);\n<\/script>\n"))),(0,a.kt)(i.Z,{value:"response",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="Outcome visible on the Website"',title:'"Outcome',visible:!0,on:!0,the:!0,'Website"':!0},'1. Error caught: {"message":"An error occurred when attempting to evaluate a HTTPGet function call. See inner exception for details.\\r\\n ClientID: 518000476\\r\\n JobID: 0\\r\\n ListID: 0\\r\\n BatchID: 0\\r\\n SubscriberID: 0\\r\\n URL: http://www.example.c\\r\\n","description":"ExactTarget.OMM.FunctionExecutionException: An error occurred when attempting to evaluate a HTTPGet function call. See inner exception for details.\\r\\n ClientID: 518000476\\r\\n JobID: 0\\r\\n ListID: 0\\r\\n BatchID: 0\\r\\n SubscriberID: 0\\r\\n URL: http://www.example.c\\r\\n Error Code: OMM_FUNC_EXEC_ERROR\\r\\n - from Jint --\x3e \\r\\n\\r\\n --- inner exception 1---\\r\\n\\r\\nExactTarget.OMM.OMMException: An exception occurred when attempting to retrieve content by a HttpGet call. URL: http://www.example.c\\r\\n Error Code: HTTP_WB_RTV\\r\\n - from OMMCommon --\x3e \\r\\n\\r\\n --- inner exception 2---\\r\\n\\r\\nSystem.Net.WebException: The remote name could not be resolved: \'www.example.c\' - from System\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n"}\n\n2. Response from example.com: undefined\n')),(0,a.kt)("p",null,"As you can see, this response is quite long. The most important information is in the last sentence of first paragraph. In this example we learn that ",(0,a.kt)("inlineCode",{parentName:"p"},"System.Net.WebException: The remote name could not be resolved: 'www.example.c' - from System"),". It makes it easy to understand that there is issue with the URL we provided."),(0,a.kt)("p",null,"You can also see why Try/Catch block is so valuable, as in second paragraph our ",(0,a.kt)("inlineCode",{parentName:"p"},"Write")," printed ",(0,a.kt)("inlineCode",{parentName:"p"},"undefined"),", which isn't very helpful. This is due to the fact, that because of the invalid URL, the GET did not return to response variable."))),(0,a.kt)("p",null,"Try/Catch is especially useful for SSJS Functions that call out-of-page data. Marketing Cloud Data Extensions, Salesforce Objects or even data sources from outside the Salesforce environment. It also will help when you are handling responses from such sources. For example, trying to get value from a nested object."),(0,a.kt)("p",null,"In most cases, the simple Try/Catch will be all you need, but there is also a third element that might be very helpful: ",(0,a.kt)("inlineCode",{parentName:"p"},"finally"),". Its purpose is to store a code that will execute, no matter what. Great for a cleanup code that must run regardless whether the previous logic was successful or not."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{5}","{5}":!0},"try {\n // Risky code\n} catch (error) {\n // Code that will be executed if the risky code crashes\n} finally {\n // Code that will be executed always\n};\n")),(0,a.kt)("p",null,"Out of the three, SSJS requires only Try. You can use it with Catch, Finally or both, depending on your use case."),(0,a.kt)("admonition",{title:"You should know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Try/Catch block in SSJS has separate scope. It means that any ",(0,a.kt)("strong",{parentName:"p"},"variables declared within the block won't be accessible from outside"),". Neither in the other parts of SSJS nor by personalization strings."),(0,a.kt)("p",{parentName:"admonition"},"There is a way to overcome this limitation. Declare the variables you want to use globally before the ",(0,a.kt)("inlineCode",{parentName:"p"},"try")," and modify their values within the block:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"{4,6}","{4,6}":!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n\n var response;\n try {\n response = HTTP.Get('http://www.example.com');\n } catch (error) {\n // Error handling logic\n };\n<\/script>\n"))),(0,a.kt)("h3",{id:"throw-error"},"Throw Error"),(0,a.kt)("p",null,"You can leverage the Try/Catch block further by implementing your custom errors with ",(0,a.kt)("inlineCode",{parentName:"p"},"throw"),". Why would you break your own code on purpose? It will help you control the execution of the code - especially if it uses external data. It can also be great for debugging and streamlining user experience."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{10,12}","{10,12}":!0},'try {\n if (submissionData.greCaptcha) {\n var secret = "XXX";\n var payload = "secret=" + secret + "&response=" + submissionData.greCaptcha;\n var contentType = "application/x-www-form-urlencoded";\n var endpoint = "https://www.google.com/recaptcha/api/siteverify";\n var response = HTTP.Post(endpoint, contentType, payload);\n if (response.StatusCode == 200) {\n var parsedResponse = Platform.Function.ParseJSON(String(response.Response));\n if (!parsedResponse.success) throw \'Wrong reCAPTCHA\';\n } else {\n throw \'reCAPTCHA API error\';\n };\n };\n} catch (error) {\n debugValue(\'reCaptcha Error\', error);\n};\n')),(0,a.kt)("p",null,"In the above example, you can see that we are checking whether the response from our reCaptcha validation to know whether we reached the Google server (else we throw ",(0,a.kt)("inlineCode",{parentName:"p"},"reCAPTCHA API error"),") and if yes - was the Captcha solved."),(0,a.kt)("p",null,"Here I'm using the string passed to ",(0,a.kt)("inlineCode",{parentName:"p"},"throw")," just for debugging purposes, but you can use it for an overlay with feedback to your client or log the error."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"You are not limited to strings with the ",(0,a.kt)("inlineCode",{parentName:"p"},"throw"),". You can also pass objects to mimic the Marketing Cloud errors. It will make error handling much easier:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-js",metastring:"{2}","{2}":!0},"if (response.StatusCode != 200) {\n throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};\n};\n"))),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"error-logging"},"Error Logging"),(0,a.kt)("p",null,"Once you debug your code using the above methods, it is still good to program defensively and leverage the Try/Catch block in the production environment. It will allow you to handle the errors for the customers and log the errors to a data extension (it will provide you with a history of problems along with a description of what happened). You can even build something more sophisticated, like automatically creating a JIRA bug ticket."),(0,a.kt)("h3",{id:"logging-to-data-extension"},"Logging to Data Extension"),(0,a.kt)("p",null,"The easiest way to log your errors is to leverage Marketing Cloud Data Extensions."),(0,a.kt)("p",null,"My recommendation is to create one Data Extension that will capture all the errors from the whole instance. It will make it much easier and faster to check any new issues."),(0,a.kt)("p",null,"Here you can find a sample setup:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Column Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Primary Key"),(0,a.kt)("th",{parentName:"tr",align:null},"Length"),(0,a.kt)("th",{parentName:"tr",align:null},"Type"),(0,a.kt)("th",{parentName:"tr",align:null},"Nullable"),(0,a.kt)("th",{parentName:"tr",align:null},"Default Value"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"id"),(0,a.kt)("td",{parentName:"tr",align:null},"Yes"),(0,a.kt)("td",{parentName:"tr",align:null},"36"),(0,a.kt)("td",{parentName:"tr",align:null},"Text"),(0,a.kt)("td",{parentName:"tr",align:null},"No"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"errorSource"),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"100"),(0,a.kt)("td",{parentName:"tr",align:null},"Text"),(0,a.kt)("td",{parentName:"tr",align:null},"No"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"errorMessage"),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"2000"),(0,a.kt)("td",{parentName:"tr",align:null},"Text"),(0,a.kt)("td",{parentName:"tr",align:null},"Yes"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"errorDescription"),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"2000"),(0,a.kt)("td",{parentName:"tr",align:null},"Text"),(0,a.kt)("td",{parentName:"tr",align:null},"Yes"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"errorDate"),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"Date"),(0,a.kt)("td",{parentName:"tr",align:null},"Yes"),(0,a.kt)("td",{parentName:"tr",align:null},"Current Date")))),(0,a.kt)("p",null,"If you have multiple Business Units on your instance, add it as a Shared Data Extension."),(0,a.kt)("p",null,"It shouldn't be sendable or testable, but consider adding a retention period. Align it with the internal process for checking it for new issues. Seven days per record is a good starting point."),(0,a.kt)("h3",{id:"global-error-catching"},"Global Error Catching"),(0,a.kt)("p",null,"Instead of writing Try/Catch blocks for every potentially risky function, you might create just one block that will capture the whole code. You can even use it to catch errors in your AMPScript, as described by ",(0,a.kt)("a",{parentName:"p",href:"https://sfmarketing.cloud/2019/08/09/debugging-ampscript/",title:"Blog post on AMPScript Debugging on sfmarketing.cloud"},"Zuzanna Jarczy\u0144ska"),"."),(0,a.kt)("p",null,"This approach might make your code shorter and more comfortable to read but limit your control over specific handling for various scenarios."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Any redirect within your ",(0,a.kt)("inlineCode",{parentName:"p"},"try")," block is recognized as an error and caught. If you need to use a redirect, don't use the global Try/Catch approach and instead leverage it only for potentially problematic code."),(0,a.kt)("p",{parentName:"admonition"},"You can also leverage one of the approaches mentioned by Gortonington in ",(0,a.kt)("a",{parentName:"p",href:"https://www.howtosfmc.com/posts/the-catches-of-try-catch-in-sfmc-ssjs/"},"his article on Try/Catch"),". It might be instrumental when you want to leverage redirect to handle the customer's error.")),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"error-handler-function"},"Error Handler Function"),(0,a.kt)("p",null,"Once you start implementing the solutions mentioned above, it might get quite repetitive to add the same lines for conditional ",(0,a.kt)("inlineCode",{parentName:"p"},"Write"),", log to Data Extension, et cetera."),(0,a.kt)("p",null,"You can solve it by creating a single Error Handler function and just calling it wherever it is needed:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"{22-33,38}","{22-33,38}":!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n var debugging = true;\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /**\n * @function handleError\n * @description If debuging is enabled, outputs the error value. Else, adds the error with context to error logging Data Extension.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(\n 'Data_Extension_Name',\n ['id', 'errorSource', 'errorMessage', 'errorDescription'],\n [GUID(), 'Name of the asset where the script runs', Stringify(error.message), Stringify(error.description)]\n );\n };\n };\n\n try {\n var response = HTTP.Get('http://www.example.c');\n } catch (error) {\n handleError(error);\n };\n<\/script>\n")),(0,a.kt)("p",null,"Whenever the Try/Catch block finds an error, the above snippet will check the value of debugging variable. If it is equal to ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),", it will just Write the error to the page to make it easier to debug quickly. If it is ",(0,a.kt)("inlineCode",{parentName:"p"},"false"),", it will add the error to the Data Extension instead."),(0,a.kt)("p",null,"Most of the Marketing Cloud Errors are objects with two keys: ",(0,a.kt)("inlineCode",{parentName:"p"},"message")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"description"),". Putting those elements into separate columns of the Data Extension make it easier to read the log."),(0,a.kt)("p",null,"Using the Error Handler Function is useful, especially when you are triggering it multiple times or when you have elaborate logic for handling (for example, API calls to external systems for bug tracking)."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"You can also create your custom error, by passing a custom object to the ",(0,a.kt)("inlineCode",{parentName:"p"},"handleErrror")," function:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-js"},"handleError({message: 'Custom Error Message', description: 'Custom Error Description'});\n"))),(0,a.kt)("p",null,"There is also a new solution - ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/email360/ssjs-lib"},"SSJS Lib")," - created by email360. Among other tools, they support ",(0,a.kt)("a",{parentName:"p",href:"https://docs.email360.io/#console_log"},"console logging")," and simplified ",(0,a.kt)("a",{parentName:"p",href:"https://docs.email360.io/#debug"},"debugging"),". You can read more about the implementation ",(0,a.kt)("a",{parentName:"p",href:"https://blog.email360.io/posts/core/better-debug.html"},"here"),"."),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"sum-up"},"Sum Up"),(0,a.kt)("p",null,"If you have any problems with your SSJS code:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Test it in Cloud Page or JSON Code Resource ",(0,a.kt)("a",{parentName:"li",href:"#ssjs-testing-ground"},"\ud83d\udd17")),(0,a.kt)("li",{parentName:"ol"},"Overcome 500 Error with linting or divide & conquer methodology ",(0,a.kt)("a",{parentName:"li",href:"#500---internal-server-error"},"\ud83d\udd17")),(0,a.kt)("li",{parentName:"ol"},"Use the ",(0,a.kt)("inlineCode",{parentName:"li"},"Write")," function to understand what happens with your variables during execution ",(0,a.kt)("a",{parentName:"li",href:"#write-the-error-down"},"\ud83d\udd17")),(0,a.kt)("li",{parentName:"ol"},"Use the Try/Catch block to understand better what is the reason for errors you encounter ",(0,a.kt)("a",{parentName:"li",href:"#try-to-catch-the-error"},"\ud83d\udd17")),(0,a.kt)("li",{parentName:"ol"},"Save errors from your production code to easily track and solve the problems ",(0,a.kt)("a",{parentName:"li",href:"#error-logging"},"\ud83d\udd17")),(0,a.kt)("li",{parentName:"ol"},"Simplify the approach with custom Error Handler Function ",(0,a.kt)("a",{parentName:"li",href:"#error-handler-function"},"\ud83d\udd17"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/932.5c8df329.js b/assets/js/932.5c8df329.js new file mode 100644 index 000000000..d403f4757 --- /dev/null +++ b/assets/js/932.5c8df329.js @@ -0,0 +1,2097 @@ +exports.id = 932; +exports.ids = [932]; +exports.modules = { + +/***/ 28734: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}})); + +/***/ }), + +/***/ 10285: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if("string"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}})); + +/***/ }), + +/***/ 59542: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}})); + +/***/ }), + +/***/ 48932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59542); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10285); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28734); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64218); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(22424); + + + + + + + + + + + + + + +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, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 35, 37], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 29], $V6 = [1, 30], $V7 = [1, 31], $V8 = [1, 9], $V9 = [1, 10], $Va = [1, 11], $Vb = [1, 12], $Vc = [1, 13], $Vd = [1, 14], $Ve = [1, 15], $Vf = [1, 16], $Vg = [1, 18], $Vh = [1, 19], $Vi = [1, 20], $Vj = [1, 21], $Vk = [1, 22], $Vl = [1, 24], $Vm = [1, 32]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "gantt": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NL": 10, "weekday": 11, "weekday_monday": 12, "weekday_tuesday": 13, "weekday_wednesday": 14, "weekday_thursday": 15, "weekday_friday": 16, "weekday_saturday": 17, "weekday_sunday": 18, "dateFormat": 19, "inclusiveEndDates": 20, "topAxis": 21, "axisFormat": 22, "tickInterval": 23, "excludes": 24, "includes": 25, "todayMarker": 26, "title": 27, "acc_title": 28, "acc_title_value": 29, "acc_descr": 30, "acc_descr_value": 31, "acc_descr_multiline_value": 32, "section": 33, "clickStatement": 34, "taskTxt": 35, "taskData": 36, "click": 37, "callbackname": 38, "callbackargs": 39, "href": 40, "clickStatementDebug": 41, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "gantt", 6: "EOF", 8: "SPACE", 10: "NL", 12: "weekday_monday", 13: "weekday_tuesday", 14: "weekday_wednesday", 15: "weekday_thursday", 16: "weekday_friday", 17: "weekday_saturday", 18: "weekday_sunday", 19: "dateFormat", 20: "inclusiveEndDates", 21: "topAxis", 22: "axisFormat", 23: "tickInterval", 24: "excludes", 25: "includes", 26: "todayMarker", 27: "title", 28: "acc_title", 29: "acc_title_value", 30: "acc_descr", 31: "acc_descr_value", 32: "acc_descr_multiline_value", 33: "section", 35: "taskTxt", 36: "taskData", 37: "click", 38: "callbackname", 39: "callbackargs", 40: "href" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [34, 2], [34, 3], [34, 3], [34, 4], [34, 3], [34, 4], [34, 2], [41, 2], [41, 3], [41, 3], [41, 4], [41, 3], [41, 4], [41, 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.setWeekday("monday"); + break; + case 9: + yy.setWeekday("tuesday"); + break; + case 10: + yy.setWeekday("wednesday"); + break; + case 11: + yy.setWeekday("thursday"); + break; + case 12: + yy.setWeekday("friday"); + break; + case 13: + yy.setWeekday("saturday"); + break; + case 14: + yy.setWeekday("sunday"); + break; + case 15: + yy.setDateFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 16: + yy.enableInclusiveEndDates(); + this.$ = $$[$0].substr(18); + break; + case 17: + yy.TopAxis(); + this.$ = $$[$0].substr(8); + break; + case 18: + yy.setAxisFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 19: + yy.setTickInterval($$[$0].substr(13)); + this.$ = $$[$0].substr(13); + break; + case 20: + yy.setExcludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 21: + yy.setIncludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 22: + yy.setTodayMarker($$[$0].substr(12)); + this.$ = $$[$0].substr(12); + break; + case 24: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 25: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 26: + case 27: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 28: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 30: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + case 31: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0], null); + break; + case 32: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 33: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 34: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setLink($$[$0 - 3], $$[$0]); + break; + case 35: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0], null); + yy.setLink($$[$0 - 2], $$[$0 - 1]); + break; + case 36: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); + yy.setLink($$[$0 - 3], $$[$0 - 2]); + break; + case 37: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 38: + case 44: + this.$ = $$[$0 - 1] + " " + $$[$0]; + break; + case 39: + case 40: + case 42: + this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + case 41: + case 43: + this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$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: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: $V8, 20: $V9, 21: $Va, 22: $Vb, 23: $Vc, 24: $Vd, 25: $Ve, 26: $Vf, 27: $Vg, 28: $Vh, 30: $Vi, 32: $Vj, 33: $Vk, 34: 23, 35: $Vl, 37: $Vm }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 33, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: $V8, 20: $V9, 21: $Va, 22: $Vb, 23: $Vc, 24: $Vd, 25: $Ve, 26: $Vf, 27: $Vg, 28: $Vh, 30: $Vi, 32: $Vj, 33: $Vk, 34: 23, 35: $Vl, 37: $Vm }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 17]), o($V0, [2, 18]), o($V0, [2, 19]), o($V0, [2, 20]), o($V0, [2, 21]), o($V0, [2, 22]), o($V0, [2, 23]), o($V0, [2, 24]), { 29: [1, 34] }, { 31: [1, 35] }, o($V0, [2, 27]), o($V0, [2, 28]), o($V0, [2, 29]), { 36: [1, 36] }, o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), { 38: [1, 37], 40: [1, 38] }, o($V0, [2, 4]), o($V0, [2, 25]), o($V0, [2, 26]), o($V0, [2, 30]), o($V0, [2, 31], { 39: [1, 39], 40: [1, 40] }), o($V0, [2, 37], { 38: [1, 41] }), o($V0, [2, 32], { 40: [1, 42] }), o($V0, [2, 33]), o($V0, [2, 35], { 39: [1, 43] }), o($V0, [2, 34]), o($V0, [2, 36])], + 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: + this.begin("open_directive"); + return "open_directive"; + case 1: + this.begin("acc_title"); + return 28; + case 2: + this.popState(); + return "acc_title_value"; + case 3: + this.begin("acc_descr"); + return 30; + case 4: + this.popState(); + return "acc_descr_value"; + case 5: + this.begin("acc_descr_multiline"); + break; + case 6: + this.popState(); + break; + case 7: + return "acc_descr_multiline_value"; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + return 10; + case 12: + break; + case 13: + break; + case 14: + break; + case 15: + this.begin("href"); + break; + case 16: + this.popState(); + break; + case 17: + return 40; + case 18: + this.begin("callbackname"); + break; + case 19: + this.popState(); + break; + case 20: + this.popState(); + this.begin("callbackargs"); + break; + case 21: + return 38; + case 22: + this.popState(); + break; + case 23: + return 39; + case 24: + this.begin("click"); + break; + case 25: + this.popState(); + break; + case 26: + return 37; + case 27: + return 4; + case 28: + return 19; + case 29: + return 20; + case 30: + return 21; + case 31: + return 22; + case 32: + return 23; + case 33: + return 25; + case 34: + return 24; + case 35: + return 26; + case 36: + return 12; + case 37: + return 13; + case 38: + return 14; + case 39: + return 15; + case 40: + return 16; + case 41: + return 17; + case 42: + return 18; + case 43: + return "date"; + case 44: + return 27; + case 45: + return "accDescription"; + case 46: + return 33; + case 47: + return 35; + case 48: + return 36; + case 49: + return ":"; + case 50: + return 6; + case 51: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:weekday\s+monday\b)/i, /^(?:weekday\s+tuesday\b)/i, /^(?:weekday\s+wednesday\b)/i, /^(?:weekday\s+thursday\b)/i, /^(?:weekday\s+friday\b)/i, /^(?:weekday\s+saturday\b)/i, /^(?:weekday\s+sunday\b)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "callbackargs": { "rules": [22, 23], "inclusive": false }, "callbackname": { "rules": [19, 20, 21], "inclusive": false }, "href": { "rules": [16, 17], "inclusive": false }, "click": { "rules": [25, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 15, 18, 24, 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], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const ganttParser = parser; +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__); +let dateFormat = ""; +let axisFormat = ""; +let tickInterval = void 0; +let todayMarker = ""; +let includes = []; +let excludes = []; +let links = {}; +let sections = []; +let tasks = []; +let currentSection = ""; +let displayMode = ""; +const tags = ["active", "done", "crit", "milestone"]; +let funs = []; +let inclusiveEndDates = false; +let topAxis = false; +let weekday = "sunday"; +let lastOrder = 0; +const clear = function() { + sections = []; + tasks = []; + currentSection = ""; + funs = []; + taskCnt = 0; + lastTask = void 0; + lastTaskID = void 0; + rawTasks = []; + dateFormat = ""; + axisFormat = ""; + displayMode = ""; + tickInterval = void 0; + todayMarker = ""; + includes = []; + excludes = []; + inclusiveEndDates = false; + topAxis = false; + lastOrder = 0; + links = {}; + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.t)(); + weekday = "sunday"; +}; +const setAxisFormat = function(txt) { + axisFormat = txt; +}; +const getAxisFormat = function() { + return axisFormat; +}; +const setTickInterval = function(txt) { + tickInterval = txt; +}; +const getTickInterval = function() { + return tickInterval; +}; +const setTodayMarker = function(txt) { + todayMarker = txt; +}; +const getTodayMarker = function() { + return todayMarker; +}; +const setDateFormat = function(txt) { + dateFormat = txt; +}; +const enableInclusiveEndDates = function() { + inclusiveEndDates = true; +}; +const endDatesAreInclusive = function() { + return inclusiveEndDates; +}; +const enableTopAxis = function() { + topAxis = true; +}; +const topAxisEnabled = function() { + return topAxis; +}; +const setDisplayMode = function(txt) { + displayMode = txt; +}; +const getDisplayMode = function() { + return displayMode; +}; +const getDateFormat = function() { + return dateFormat; +}; +const setIncludes = function(txt) { + includes = txt.toLowerCase().split(/[\s,]+/); +}; +const getIncludes = function() { + return includes; +}; +const setExcludes = function(txt) { + excludes = txt.toLowerCase().split(/[\s,]+/); +}; +const getExcludes = function() { + return excludes; +}; +const getLinks = function() { + return links; +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 10; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks = rawTasks; + return tasks; +}; +const isInvalidDate = function(date, dateFormat2, excludes2, includes2) { + if (includes2.includes(date.format(dateFormat2.trim()))) { + return false; + } + if (date.isoWeekday() >= 6 && excludes2.includes("weekends")) { + return true; + } + if (excludes2.includes(date.format("dddd").toLowerCase())) { + return true; + } + return excludes2.includes(date.format(dateFormat2.trim())); +}; +const setWeekday = function(txt) { + weekday = txt; +}; +const getWeekday = function() { + return weekday; +}; +const checkTaskDates = function(task, dateFormat2, excludes2, includes2) { + if (!excludes2.length || task.manualEndTime) { + return; + } + let startTime; + if (task.startTime instanceof Date) { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime); + } else { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime, dateFormat2, true); + } + startTime = startTime.add(1, "d"); + let originalEndTime; + if (task.endTime instanceof Date) { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime); + } else { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime, dateFormat2, true); + } + const [fixedEndTime, renderEndTime] = fixTaskDates( + startTime, + originalEndTime, + dateFormat2, + excludes2, + includes2 + ); + task.endTime = fixedEndTime.toDate(); + task.renderEndTime = renderEndTime; +}; +const fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) { + let invalid = false; + let renderEndTime = null; + while (startTime <= endTime) { + if (!invalid) { + renderEndTime = endTime.toDate(); + } + invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2); + if (invalid) { + endTime = endTime.add(1, "d"); + } + startTime = startTime.add(1, "d"); + } + return [endTime, renderEndTime]; +}; +const getStartDate = function(prevTime, dateFormat2, str) { + str = str.trim(); + const re = /^after\s+([\d\w- ]+)/; + const afterStatement = re.exec(str.trim()); + if (afterStatement !== null) { + let latestEndingTask = null; + afterStatement[1].split(" ").forEach(function(id) { + let task = findTaskById(id); + if (task !== void 0) { + if (!latestEndingTask) { + latestEndingTask = task; + } else { + if (task.endTime > latestEndingTask.endTime) { + latestEndingTask = task; + } + } + } + }); + if (!latestEndingTask) { + const dt = /* @__PURE__ */ new Date(); + dt.setHours(0, 0, 0, 0); + return dt; + } else { + return latestEndingTask.endTime; + } + } + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + return mDate.toDate(); + } else { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Invalid date:" + str); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("With date format:" + dateFormat2.trim()); + const d = new Date(str); + if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously + // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304. + // This can cause virtually infinite loops while rendering, so for the + // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as + // invalid. + d.getFullYear() < -1e4 || d.getFullYear() > 1e4) { + throw new Error("Invalid date:" + str); + } + return d; + } +}; +const parseDuration = function(str) { + const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str.trim()); + if (statement !== null) { + return [Number.parseFloat(statement[1]), statement[2]]; + } + return [NaN, "ms"]; +}; +const getEndDate = function(prevTime, dateFormat2, str, inclusive = false) { + str = str.trim(); + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + if (inclusive) { + mDate = mDate.add(1, "d"); + } + return mDate.toDate(); + } + let endTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(prevTime); + const [durationValue, durationUnit] = parseDuration(str); + if (!Number.isNaN(durationValue)) { + const newEndTime = endTime.add(durationValue, durationUnit); + if (newEndTime.isValid()) { + endTime = newEndTime; + } + } + return endTime.toDate(); +}; +let taskCnt = 0; +const parseId = function(idStr) { + if (idStr === void 0) { + taskCnt = taskCnt + 1; + return "task" + taskCnt; + } + return idStr; +}; +const compileData = function(prevTask, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + let endTimeData = ""; + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = prevTask.endTime; + endTimeData = data[0]; + break; + case 2: + task.id = parseId(); + task.startTime = getStartDate(void 0, dateFormat, data[0]); + endTimeData = data[1]; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = getStartDate(void 0, dateFormat, data[1]); + endTimeData = data[2]; + break; + } + if (endTimeData) { + task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); + task.manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(endTimeData, "YYYY-MM-DD", true).isValid(); + checkTaskDates(task, dateFormat, excludes, includes); + } + return task; +}; +const parseData = function(prevTaskId, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = { + type: "prevTaskEnd", + id: prevTaskId + }; + task.endTime = { + data: data[0] + }; + break; + case 2: + task.id = parseId(); + task.startTime = { + type: "getStartDate", + startData: data[0] + }; + task.endTime = { + data: data[1] + }; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = { + type: "getStartDate", + startData: data[1] + }; + task.endTime = { + data: data[2] + }; + break; + } + return task; +}; +let lastTask; +let lastTaskID; +let rawTasks = []; +const taskDb = {}; +const addTask = function(descr, data) { + const rawTask = { + section: currentSection, + type: currentSection, + processed: false, + manualEndTime: false, + renderEndTime: null, + raw: { data }, + task: descr, + classes: [] + }; + const taskInfo = parseData(lastTaskID, data); + rawTask.raw.startTime = taskInfo.startTime; + rawTask.raw.endTime = taskInfo.endTime; + rawTask.id = taskInfo.id; + rawTask.prevTaskId = lastTaskID; + rawTask.active = taskInfo.active; + rawTask.done = taskInfo.done; + rawTask.crit = taskInfo.crit; + rawTask.milestone = taskInfo.milestone; + rawTask.order = lastOrder; + lastOrder++; + const pos = rawTasks.push(rawTask); + lastTaskID = rawTask.id; + taskDb[rawTask.id] = pos - 1; +}; +const findTaskById = function(id) { + const pos = taskDb[id]; + return rawTasks[pos]; +}; +const addTaskOrg = function(descr, data) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + const taskInfo = compileData(lastTask, data); + newTask.startTime = taskInfo.startTime; + newTask.endTime = taskInfo.endTime; + newTask.id = taskInfo.id; + newTask.active = taskInfo.active; + newTask.done = taskInfo.done; + newTask.crit = taskInfo.crit; + newTask.milestone = taskInfo.milestone; + lastTask = newTask; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + const task = rawTasks[pos]; + let startTime = ""; + switch (rawTasks[pos].raw.startTime.type) { + case "prevTaskEnd": { + const prevTask = findTaskById(task.prevTaskId); + task.startTime = prevTask.endTime; + break; + } + case "getStartDate": + startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData); + if (startTime) { + rawTasks[pos].startTime = startTime; + } + break; + } + if (rawTasks[pos].startTime) { + rawTasks[pos].endTime = getEndDate( + rawTasks[pos].startTime, + dateFormat, + rawTasks[pos].raw.endTime.data, + inclusiveEndDates + ); + if (rawTasks[pos].endTime) { + rawTasks[pos].processed = true; + rawTasks[pos].manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__( + rawTasks[pos].raw.endTime.data, + "YYYY-MM-DD", + true + ).isValid(); + checkTaskDates(rawTasks[pos], dateFormat, excludes, includes); + } + } + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const setLink = function(ids, _linkStr) { + let linkStr = _linkStr; + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { + linkStr = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(_linkStr); + } + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + window.open(linkStr, "_self"); + }); + links[id] = linkStr; + } + }); + setClass(ids, "clickable"); +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + rawTask.classes.push(className); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + if ((0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.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); + } + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.u.runFunc(functionName, ...argList); + }); + } +}; +const pushFun = function(id, callbackFunction) { + funs.push( + function() { + const elem = document.querySelector(`[id="${id}"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + }, + function() { + const elem = document.querySelector(`[id="${id}-text"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + } + ); +}; +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 ganttDb = { + getConfig: () => (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt, + clear, + setDateFormat, + getDateFormat, + enableInclusiveEndDates, + endDatesAreInclusive, + enableTopAxis, + topAxisEnabled, + setAxisFormat, + getAxisFormat, + setTickInterval, + getTickInterval, + setTodayMarker, + getTodayMarker, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.g, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.r, + setDisplayMode, + getDisplayMode, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.b, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.a, + addSection, + getSections, + getTasks, + addTask, + findTaskById, + addTaskOrg, + setIncludes, + getIncludes, + setExcludes, + getExcludes, + setClickEvent, + setLink, + getLinks, + bindFunctions, + parseDuration, + isInvalidDate, + setWeekday, + getWeekday +}; +function getTaskTags(data, task, tags2) { + let matchFound = true; + while (matchFound) { + matchFound = false; + tags2.forEach(function(t) { + const pattern = "^\\s*" + t + "\\s*$"; + const regex = new RegExp(pattern); + if (data[0].match(regex)) { + task[t] = true; + data.shift(1); + matchFound = true; + } + }); + } +} +const setConf = function() { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Something is calling, setConf, remove the call"); +}; +const mapWeekdayToTimeFunction = { + monday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonday */ .Ox9, + tuesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeTuesday */ .YDX, + wednesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeWednesday */ .EFj, + thursday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeThursday */ .Igq, + friday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFriday */ .y2j, + saturday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSaturday */ .LqH, + sunday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSunday */ .Zyz +}; +const getMaxIntersections = (tasks2, orderOffset) => { + let timeline = [...tasks2].map(() => -Infinity); + let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order); + let maxIntersections = 0; + for (const element of sorted) { + for (let j = 0; j < timeline.length; j++) { + if (element.startTime >= timeline[j]) { + timeline[j] = element.endTime; + element.order = j + orderOffset; + if (j > maxIntersections) { + maxIntersections = j; + } + break; + } + } + } + return maxIntersections; +}; +let w; +const draw = function(text, id, version, diagObj) { + const conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt; + const securityLevel = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const elem = doc.getElementById(id); + w = elem.parentElement.offsetWidth; + if (w === void 0) { + w = 1200; + } + if (conf.useWidth !== void 0) { + w = conf.useWidth; + } + const taskArray = diagObj.db.getTasks(); + let categories = []; + for (const element of taskArray) { + categories.push(element.type); + } + categories = checkUnique(categories); + const categoryHeights = {}; + let h = 2 * conf.topPadding; + if (diagObj.db.getDisplayMode() === "compact" || conf.displayMode === "compact") { + const categoryElements = {}; + for (const element of taskArray) { + if (categoryElements[element.section] === void 0) { + categoryElements[element.section] = [element]; + } else { + categoryElements[element.section].push(element); + } + } + let intersections = 0; + for (const category of Object.keys(categoryElements)) { + const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1; + intersections += categoryHeight; + h += categoryHeight * (conf.barHeight + conf.barGap); + categoryHeights[category] = categoryHeight; + } + } else { + h += taskArray.length * (conf.barHeight + conf.barGap); + for (const category of categories) { + categoryHeights[category] = taskArray.filter((task) => task.type === category).length; + } + } + elem.setAttribute("viewBox", "0 0 " + w + " " + h); + const svg = root.select(`[id="${id}"]`); + const timeScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleTime */ .Xf)().domain([ + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .min */ .VV$)(taskArray, function(d) { + return d.startTime; + }), + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .max */ .Fp7)(taskArray, function(d) { + return d.endTime; + }) + ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); + function taskCompare(a, b) { + const taskA = a.startTime; + const taskB = b.startTime; + let result = 0; + if (taskA > taskB) { + result = 1; + } else if (taskA < taskB) { + result = -1; + } + return result; + } + taskArray.sort(taskCompare); + makeGant(taskArray, w, h); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.i)(svg, h, w, conf.useMaxWidth); + svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w / 2).attr("y", conf.titleTopMargin).attr("class", "titleText"); + function makeGant(tasks2, pageWidth, pageHeight) { + const barHeight = conf.barHeight; + const gap = barHeight + conf.barGap; + const topPadding = conf.topPadding; + const leftPadding = conf.leftPadding; + const colorScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleLinear */ .BYU)().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(d3__WEBPACK_IMPORTED_MODULE_5__/* .interpolateHcl */ .JHv); + drawExcludeDays( + gap, + topPadding, + leftPadding, + pageWidth, + pageHeight, + tasks2, + diagObj.db.getExcludes(), + diagObj.db.getIncludes() + ); + makeGrid(leftPadding, topPadding, pageWidth, pageHeight); + drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth); + vertLabels(gap, topPadding); + drawToday(leftPadding, topPadding, pageWidth, pageHeight); + } + function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) { + const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; + const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2)); + svg.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad - 2; + }).attr("width", function() { + return w2 - conf.rightPadding / 2; + }).attr("height", theGap).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d.type === category) { + return "section section" + i % conf.numberSectionStyles; + } + } + return "section section0"; + }); + const rectangles = svg.append("g").selectAll("rect").data(theArray).enter(); + const links2 = diagObj.db.getLinks(); + rectangles.append("rect").attr("id", function(d) { + return d.id; + }).attr("rx", 3).attr("ry", 3).attr("x", function(d) { + if (d.milestone) { + return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + return timeScale(d.startTime) + theSidePad; + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad; + }).attr("width", function(d) { + if (d.milestone) { + return theBarHeight; + } + return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); + }).attr("height", theBarHeight).attr("transform-origin", function(d, i) { + i = d.order; + return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + "px " + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; + }).attr("class", function(d) { + const res = "task"; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskClass = ""; + if (d.active) { + if (d.crit) { + taskClass += " activeCrit"; + } else { + taskClass = " active"; + } + } else if (d.done) { + if (d.crit) { + taskClass = " doneCrit"; + } else { + taskClass = " done"; + } + } else { + if (d.crit) { + taskClass += " crit"; + } + } + if (taskClass.length === 0) { + taskClass = " task"; + } + if (d.milestone) { + taskClass = " milestone " + taskClass; + } + taskClass += secNum; + taskClass += " " + classStr; + return res + taskClass; + }); + rectangles.append("text").attr("id", function(d) { + return d.id + "-text"; + }).text(function(d) { + return d.task; + }).attr("font-size", conf.fontSize).attr("x", function(d) { + let startX = timeScale(d.startTime); + let endX = timeScale(d.renderEndTime || d.endTime); + if (d.milestone) { + startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return startX + theSidePad - 5; + } else { + return endX + theSidePad + 5; + } + } else { + return (endX - startX) / 2 + startX + theSidePad; + } + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; + }).attr("text-height", theBarHeight).attr("class", function(d) { + const startX = timeScale(d.startTime); + let endX = timeScale(d.endTime); + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskType = ""; + if (d.active) { + if (d.crit) { + taskType = "activeCritText" + secNum; + } else { + taskType = "activeText" + secNum; + } + } + if (d.done) { + if (d.crit) { + taskType = taskType + " doneCritText" + secNum; + } else { + taskType = taskType + " doneText" + secNum; + } + } else { + if (d.crit) { + taskType = taskType + " critText" + secNum; + } + } + if (d.milestone) { + taskType += " milestoneText"; + } + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType; + } else { + return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth; + } + } else { + return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth; + } + }); + const securityLevel2 = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + if (securityLevel2 === "sandbox") { + let sandboxElement2; + sandboxElement2 = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + const doc2 = sandboxElement2.nodes()[0].contentDocument; + rectangles.filter(function(d) { + return links2[d.id] !== void 0; + }).each(function(o) { + var taskRect = doc2.querySelector("#" + o.id); + var taskText = doc2.querySelector("#" + o.id + "-text"); + const oldParent = taskRect.parentNode; + var Link = doc2.createElement("a"); + Link.setAttribute("xlink:href", links2[o.id]); + Link.setAttribute("target", "_top"); + oldParent.appendChild(Link); + Link.appendChild(taskRect); + Link.appendChild(taskText); + }); + } + } + function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) { + if (excludes2.length === 0 && includes2.length === 0) { + return; + } + let minTime; + let maxTime; + for (const { startTime, endTime } of tasks2) { + if (minTime === void 0 || startTime < minTime) { + minTime = startTime; + } + if (maxTime === void 0 || endTime > maxTime) { + maxTime = endTime; + } + } + if (!minTime || !maxTime) { + return; + } + if (dayjs__WEBPACK_IMPORTED_MODULE_1__(maxTime).diff(dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime), "year") > 5) { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.l.warn( + "The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days." + ); + return; + } + const dateFormat2 = diagObj.db.getDateFormat(); + const excludeRanges = []; + let range = null; + let d = dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime); + while (d.valueOf() <= maxTime) { + if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) { + if (!range) { + range = { + start: d, + end: d + }; + } else { + range.end = d; + } + } else { + if (range) { + excludeRanges.push(range); + range = null; + } + } + d = d.add(1, "d"); + } + const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter(); + rectangles.append("rect").attr("id", function(d2) { + return "exclude-" + d2.start.format("YYYY-MM-DD"); + }).attr("x", function(d2) { + return timeScale(d2.start) + theSidePad; + }).attr("y", conf.gridLineStartPadding).attr("width", function(d2) { + const renderEnd = d2.end.add(1, "day"); + return timeScale(renderEnd) - timeScale(d2.start); + }).attr("height", h2 - theTopPad - conf.gridLineStartPadding).attr("transform-origin", function(d2, i) { + return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + "px " + (i * theGap + 0.5 * h2).toString() + "px"; + }).attr("class", "exclude-range"); + } + function makeGrid(theSidePad, theTopPad, w2, h2) { + let bottomXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisBottom */ .LLu)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + const reTickInterval = /^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/; + const resultTickInterval = reTickInterval.exec( + diagObj.db.getTickInterval() || conf.tickInterval + ); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + const weekday2 = diagObj.db.getWeekday() || conf.weekday; + switch (interval) { + case "millisecond": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMillisecond */ .U8T.every(every)); + break; + case "second": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSecond */ .S1K.every(every)); + break; + case "minute": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .Z_i.every(every)); + break; + case "hour": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .WQD.every(every)); + break; + case "day": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .rr1.every(every)); + break; + case "week": + bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); + break; + case "month": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h2 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em"); + if (diagObj.db.topAxisEnabled() || conf.topAxis) { + let topXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisTop */ .F5q)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + const weekday2 = diagObj.db.getWeekday() || conf.weekday; + switch (interval) { + case "millisecond": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMillisecond */ .U8T.every(every)); + break; + case "second": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSecond */ .S1K.every(every)); + break; + case "minute": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .Z_i.every(every)); + break; + case "hour": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .WQD.every(every)); + break; + case "day": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .rr1.every(every)); + break; + case "week": + topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); + break; + case "month": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10); + } + } + function vertLabels(theGap, theTopPad) { + let prevGap = 0; + const numOccurances = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); + svg.append("g").selectAll("text").data(numOccurances).enter().append(function(d) { + const rows = d[0].split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex); + const dy = -(rows.length - 1) / 2; + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("dy", dy + "em"); + for (const [j, row] of rows.entries()) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttribute("alignment-baseline", "central"); + tspan.setAttribute("x", "10"); + if (j > 0) { + tspan.setAttribute("dy", "1em"); + } + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + return svgLabel; + }).attr("x", 10).attr("y", function(d, i) { + if (i > 0) { + for (let j = 0; j < i; j++) { + prevGap += numOccurances[i - 1][1]; + return d[1] * theGap / 2 + prevGap * theGap + theTopPad; + } + } else { + return d[1] * theGap / 2 + theTopPad; + } + }).attr("font-size", conf.sectionFontSize).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d[0] === category) { + return "sectionTitle sectionTitle" + i % conf.numberSectionStyles; + } + } + return "sectionTitle"; + }); + } + function drawToday(theSidePad, theTopPad, w2, h2) { + const todayMarker2 = diagObj.db.getTodayMarker(); + if (todayMarker2 === "off") { + return; + } + const todayG = svg.append("g").attr("class", "today"); + const today = /* @__PURE__ */ new Date(); + const todayLine = todayG.append("line"); + todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf.titleTopMargin).attr("y2", h2 - conf.titleTopMargin).attr("class", "today"); + if (todayMarker2 !== "") { + todayLine.attr("style", todayMarker2.replace(/,/g, ";")); + } + } + function checkUnique(arr) { + const hash = {}; + const result = []; + for (let i = 0, l = arr.length; i < l; ++i) { + if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) { + hash[arr[i]] = true; + result.push(arr[i]); + } + } + return result; + } +}; +const ganttRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .mermaid-main-font { + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .exclude-range { + fill: ${options.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${options.sectionBkgColor}; + } + + .section2 { + fill: ${options.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${options.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${options.titleColor}; + } + + .sectionTitle1 { + fill: ${options.titleColor}; + } + + .sectionTitle2 { + fill: ${options.titleColor}; + } + + .sectionTitle3 { + fill: ${options.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${options.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${options.fontFamily}; + fill: ${options.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${options.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideRight { + fill: ${options.taskTextDarkColor}; + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideLeft { + fill: ${options.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${options.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${options.taskBkgColor}; + stroke: ${options.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${options.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${options.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${options.activeTaskBkgColor}; + stroke: ${options.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${options.doneTaskBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${options.critBorderColor}; + fill: ${options.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.titleColor || options.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } +`; +const ganttStyles = getStyles; +const diagram = { + parser: ganttParser, + db: ganttDb, + renderer: ganttRenderer, + styles: ganttStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/935f2afb.fb7b5285.js b/assets/js/935f2afb.fb7b5285.js new file mode 100644 index 000000000..68ed2293f --- /dev/null +++ b/assets/js/935f2afb.fb7b5285.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Zen of SFMC","href":"/docs/zen-of-sfmc","docId":"zen-of-sfmc","unlisted":false},{"type":"category","label":"SSJS","items":[{"type":"link","label":"If & Switch","href":"/docs/ssjs/ssjs-if-and-switch","docId":"ssjs/ssjs-if-and-switch","unlisted":false},{"type":"link","label":"Loops","href":"/docs/ssjs/ssjs-loops","docId":"ssjs/ssjs-loops","unlisted":false},{"type":"link","label":"Debugging & Error Handling","href":"/docs/ssjs/debugging-ssjs","docId":"ssjs/debugging-ssjs","unlisted":false},{"type":"link","label":"Style Guide","href":"/docs/ssjs/ssjs-style-guide","docId":"ssjs/ssjs-style-guide","unlisted":false},{"type":"link","label":"Performance","href":"/docs/ssjs/ssjs-vs-ampscript-performance","docId":"ssjs/ssjs-vs-ampscript-performance","unlisted":false},{"type":"link","label":"\xbb SSJS Snippets","href":"/docs/category/ssjs-snippets/"},{"type":"link","label":"\xbb Official SSJS Docs","href":"https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ssjs_serverSideJavaScript.html"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ssjs"},{"type":"category","label":"JavaScript","items":[{"type":"link","label":"If & Switch","href":"/docs/js/js-if-and-switch","docId":"js/js-if-and-switch","unlisted":false},{"type":"link","label":"Loops","href":"/docs/js/js-loops","docId":"js/js-loops","unlisted":false},{"type":"link","label":"DOM","href":"/docs/js/js-dom","docId":"js/js-dom","unlisted":false},{"type":"link","label":"\xbb JS Snippets","href":"/docs/category/js-snippets/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/javascript"},{"type":"category","label":"AMPScript","items":[{"type":"link","label":"Style Guide","href":"/docs/ampscript/ampscript-style-guide","docId":"ampscript/ampscript-style-guide","unlisted":false},{"type":"link","label":"Performance","href":"/docs/ssjs/ssjs-vs-ampscript-performance","docId":"ssjs/ssjs-vs-ampscript-performance","unlisted":false},{"type":"link","label":"\xbb AMPScript Snippets","href":"/docs/category/ampscript-snippets/"},{"type":"link","label":"\xbb Official AMPScript Docs","href":"https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ampscript.html"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ampscript"},{"type":"category","label":"SFMC SQL","items":[{"type":"link","label":"SQL Basics","href":"/docs/sql/sfmc-sql-basics","docId":"sql/sfmc-sql-basics","unlisted":false},{"type":"link","label":"Select","href":"/docs/sql/sfmc-sql-select","docId":"sql/sfmc-sql-select","unlisted":false},{"type":"link","label":"From","href":"/docs/sql/sfmc-sql-from","docId":"sql/sfmc-sql-from","unlisted":false},{"type":"link","label":"Join","href":"/docs/sql/sfmc-sql-join","docId":"sql/sfmc-sql-join","unlisted":false},{"type":"link","label":"Where","href":"/docs/sql/sfmc-sql-where","docId":"sql/sfmc-sql-where","unlisted":false},{"type":"link","label":"Case","href":"/docs/sql/sfmc-sql-case","docId":"sql/sfmc-sql-case","unlisted":false},{"type":"link","label":"Like","href":"/docs/sql/sfmc-sql-like","docId":"sql/sfmc-sql-like","unlisted":false},{"type":"link","label":"String Functions","href":"/docs/sql/sfmc-sql-string-functions","docId":"sql/sfmc-sql-string-functions","unlisted":false},{"type":"link","label":"Date Functions","href":"/docs/sql/sfmc-sql-date-functions","docId":"sql/sfmc-sql-date-functions","unlisted":false},{"type":"link","label":"Numeric Functions","href":"/docs/sql/sfmc-sql-numeric-functions","docId":"sql/sfmc-sql-numeric-functions","unlisted":false},{"type":"link","label":"Conversion Functions","href":"/docs/sql/sfmc-sql-conversion-functions","docId":"sql/sfmc-sql-conversion-functions","unlisted":false},{"type":"link","label":"Aggregate Functions","href":"/docs/sql/sfmc-sql-aggregate-functions","docId":"sql/sfmc-sql-aggregate-functions","unlisted":false},{"type":"link","label":"Null Functions","href":"/docs/sql/sfmc-sql-null-functions","docId":"sql/sfmc-sql-null-functions","unlisted":false},{"type":"link","label":"Style Guide","href":"/docs/sql/sfmc-sql-style-guide","docId":"sql/sfmc-sql-style-guide","unlisted":false},{"type":"link","label":"\xbb SQL Snippets","href":"/docs/category/sfmc-sql-snippets/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-sql"},{"type":"category","label":"SFMC Config","items":[{"type":"link","label":"System Data Views","href":"/docs/config/sfmc-system-data-views","docId":"config/sfmc-system-data-views","unlisted":false},{"type":"link","label":"Mobile Connect Data Views","href":"/docs/config/sfmc-mobile-connect-data-views","docId":"config/sfmc-mobile-connect-data-views","unlisted":false},{"type":"link","label":"MCC Integration Patterns","href":"/docs/config/sfmc-mcc-integration-patterns","docId":"config/sfmc-mcc-integration-patterns","unlisted":false},{"type":"link","label":"Power of Code Resources","href":"/docs/config/sfmc-code-resource","docId":"config/sfmc-code-resource","unlisted":false},{"type":"link","label":"Contact Deletion Process","href":"/docs/config/sfmc-contact-deletion","docId":"config/sfmc-contact-deletion","unlisted":false},{"type":"link","label":"Enhanced Send Log","href":"/docs/config/sfmc-enhanced-send-log","docId":"config/sfmc-enhanced-send-log","unlisted":false},{"type":"link","label":"Behavioral Triggers","href":"/docs/config/sfmc-behavioral-triggers","docId":"config/sfmc-behavioral-triggers","unlisted":false},{"type":"link","label":"AppExchange Solutions","href":"/docs/config/sfmc-appexchange-solutions","docId":"config/sfmc-appexchange-solutions","unlisted":false},{"type":"link","label":"Features On Demand","href":"/docs/config/sfmc-features-on-demand","docId":"config/sfmc-features-on-demand","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-config"},{"type":"category","label":"MC Personalization","items":[{"type":"link","label":"Catalog Architecture","href":"/docs/interaction-studio/mcp-catalog-architecture","docId":"interaction-studio/mcp-catalog-architecture","unlisted":false},{"type":"category","label":"Serverside Code","items":[{"type":"link","label":"Serverside Code Basics","href":"/docs/interaction-studio/mcp-serverside-code-basics","docId":"interaction-studio/mcp-serverside-code-basics","unlisted":false},{"type":"link","label":"Serverside Code Properties","href":"/docs/interaction-studio/mcp-serverside-code-properties","docId":"interaction-studio/mcp-serverside-code-properties","unlisted":false},{"type":"link","label":"Serverside Code Context","href":"/docs/interaction-studio/mcp-serverside-code-context","docId":"interaction-studio/mcp-serverside-code-context","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/serverside-code"},{"type":"link","label":"Open Time Email","href":"/docs/interaction-studio/mcp-open-time-email","docId":"interaction-studio/mcp-open-time-email","unlisted":false},{"type":"link","label":"\xbb MC Personalization Snippets","href":"/docs/category/mc-personalization-snippets/"},{"type":"link","label":"\xbb Official MCP Business Docs","href":"https://help.salesforce.com/s/articleView?id=sf.mc_pers.htm"},{"type":"link","label":"\xbb Official MCP Developer Docs","href":"https://developer.salesforce.com/docs/marketing/personalization/guide/get-started.html"}],"collapsed":true,"collapsible":true,"href":"/docs/category/mc-personalization"}],"snippets":[{"type":"category","label":"SSJS Snippets","items":[{"type":"link","label":"SSJS Script Template","href":"/docs/ssjs/snippets/ssjs-script-template","docId":"ssjs/snippets/ssjs-script-template","unlisted":false},{"type":"link","label":"Solve with Cloud Page Apps","href":"/docs/ssjs/snippets/sfmc-cloud-page-apps","docId":"ssjs/snippets/sfmc-cloud-page-apps","unlisted":false},{"type":"link","label":"MobileConnect Phone Change","href":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change","docId":"ssjs/snippets/ssjs-mobileconnect-phone-change","unlisted":false},{"type":"link","label":"AMPScript in SSJS","href":"/docs/ssjs/snippets/ampscript-in-ssjs","docId":"ssjs/snippets/ampscript-in-ssjs","unlisted":false},{"type":"link","label":"\xbb SSJS Docs","href":"/docs/category/ssjs/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ssjs-snippets"},{"type":"category","label":"JS Snippets","items":[{"type":"link","label":"Tailor with Data","href":"/docs/js/snippets/tailor-with-data","docId":"js/snippets/tailor-with-data","unlisted":false},{"type":"link","label":"Engage with Countdown","href":"/docs/js/snippets/engage-with-countdown","docId":"js/snippets/engage-with-countdown","unlisted":false},{"type":"link","label":"Export, Import & Document SFMC Roles","href":"/docs/js/snippets/export-import-document-sfmc-roles","docId":"js/snippets/export-import-document-sfmc-roles","unlisted":false},{"type":"link","label":"\xbb JS Docs","href":"/docs/category/javascript/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/js-snippets"},{"type":"category","label":"AMPScript Snippets","items":[{"type":"link","label":"AMPScript in SSJS","href":"/docs/ssjs/snippets/ampscript-in-ssjs","docId":"ssjs/snippets/ampscript-in-ssjs","unlisted":false},{"type":"link","label":"\xbb AMPScript Docs","href":"/docs/category/ampscript/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ampscript-snippets"},{"type":"category","label":"SFMC SQL Snippets","items":[{"type":"link","label":"Debugging Email Sends","href":"/docs/sql/snippets/sfmc-sql-debugging-email-sends","docId":"sql/snippets/sfmc-sql-debugging-email-sends","unlisted":false},{"type":"link","label":"Debugging Value Length","href":"/docs/sql/snippets/sfmc-sql-debugging-value-length","docId":"sql/snippets/sfmc-sql-debugging-value-length","unlisted":false},{"type":"link","label":"\xbb SQL Docs","href":"/docs/category/sfmc-sql/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-sql-snippets"},{"type":"category","label":"MC Personalization Snippets","items":[{"type":"link","label":"Catalog ETL Metadata Viewer","href":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","docId":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","unlisted":false},{"type":"link","label":"\xbb MC Personalization Docs","href":"/docs/category/mc-personalization/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/mc-personalization-snippets"}],"webinars":[{"type":"category","label":"SFMC Webinars","items":[{"type":"link","label":"Account Architecture","href":"/docs/webinars/sfmc-webinar-account-architecture","docId":"webinars/sfmc-webinar-account-architecture","unlisted":false},{"type":"link","label":"Architecting Web Solutions","href":"/docs/webinars/sfmc-webinar-architecting-web-solutions","docId":"webinars/sfmc-webinar-architecting-web-solutions","unlisted":false},{"type":"link","label":"Cloud Page Apps","href":"/docs/webinars/sfmc-webinar-cloud-page-apps","docId":"webinars/sfmc-webinar-cloud-page-apps","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-webinars"}]},"docs":{"ampscript/ampscript-style-guide":{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","sidebar":"docs"},"config/sfmc-appexchange-solutions":{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","sidebar":"docs"},"config/sfmc-behavioral-triggers":{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","sidebar":"docs"},"config/sfmc-code-resource":{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","sidebar":"docs"},"config/sfmc-contact-deletion":{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","sidebar":"docs"},"config/sfmc-enhanced-send-log":{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","sidebar":"docs"},"config/sfmc-features-on-demand":{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","sidebar":"docs"},"config/sfmc-mcc-integration-patterns":{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","sidebar":"docs"},"config/sfmc-mobile-connect-data-views":{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","sidebar":"docs"},"config/sfmc-system-data-views":{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","sidebar":"docs"},"docs-and-snippets":{"id":"docs-and-snippets","title":"Docs & Snippets","description":"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.","sidebar":"docs"},"interaction-studio/mcp-catalog-architecture":{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","sidebar":"docs"},"interaction-studio/mcp-open-time-email":{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","sidebar":"docs"},"interaction-studio/mcp-serverside-code-basics":{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","sidebar":"docs"},"interaction-studio/mcp-serverside-code-context":{"id":"interaction-studio/mcp-serverside-code-context","title":"MCP Serverside Code Context","description":"Context is king. Also when writing MCP Template Serverside Code.","sidebar":"docs"},"interaction-studio/mcp-serverside-code-properties":{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","sidebar":"docs"},"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer":{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","sidebar":"snippets"},"js/js-dom":{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","sidebar":"docs"},"js/js-if-and-switch":{"id":"js/js-if-and-switch","title":"JS If & Switch","description":"Deep dive into the two pillars of JavaScript flow control.","sidebar":"docs"},"js/js-loops":{"id":"js/js-loops","title":"JS Loops","description":"JavaScript offers four for loops and two while loops. What\'s the difference?","sidebar":"docs"},"js/snippets/engage-with-countdown":{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","sidebar":"snippets"},"js/snippets/export-import-document-sfmc-roles":{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","sidebar":"snippets"},"js/snippets/tailor-with-data":{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","sidebar":"snippets"},"sql/sfmc-sql-aggregate-functions":{"id":"sql/sfmc-sql-aggregate-functions","title":"SFMC SQL Aggregate Functions","description":"Group rows and apply aggregate functions to see the big picture in your data extensions.","sidebar":"docs"},"sql/sfmc-sql-basics":{"id":"sql/sfmc-sql-basics","title":"SFMC SQL Basics","description":"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.","sidebar":"docs"},"sql/sfmc-sql-case":{"id":"sql/sfmc-sql-case","title":"SFMC SQL Case","description":"Empower your Marketing Cloud queries with conditional SQL CASE logic.","sidebar":"docs"},"sql/sfmc-sql-conversion-functions":{"id":"sql/sfmc-sql-conversion-functions","title":"SFMC SQL Conversion Functions","description":"Break from the limits of Data Extension data types. Use full power of SQL to control your values.","sidebar":"docs"},"sql/sfmc-sql-date-functions":{"id":"sql/sfmc-sql-date-functions","title":"SFMC SQL Date Functions","description":"Take control over dates with built-in SQL functions. Let the query do the job.","sidebar":"docs"},"sql/sfmc-sql-from":{"id":"sql/sfmc-sql-from","title":"SFMC SQL From","description":"Tell the SQL query FROM where you need the data.","sidebar":"docs"},"sql/sfmc-sql-join":{"id":"sql/sfmc-sql-join","title":"SFMC SQL Join","description":"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.","sidebar":"docs"},"sql/sfmc-sql-like":{"id":"sql/sfmc-sql-like","title":"SFMC SQL Like","description":"Get a LIKE and build more flexible SQL queries.","sidebar":"docs"},"sql/sfmc-sql-null-functions":{"id":"sql/sfmc-sql-null-functions","title":"SFMC SQL NULL Functions","description":"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.","sidebar":"docs"},"sql/sfmc-sql-numeric-functions":{"id":"sql/sfmc-sql-numeric-functions","title":"SFMC SQL Numeric Functions","description":"Take control over numbers with built-in SQL functions. Let the query do the job.","sidebar":"docs"},"sql/sfmc-sql-select":{"id":"sql/sfmc-sql-select","title":"SFMC SQL Select","description":"Selected information on the SELECT statement in SFMC SQL.","sidebar":"docs"},"sql/sfmc-sql-string-functions":{"id":"sql/sfmc-sql-string-functions","title":"SFMC SQL String Functions","description":"Take control over strings with built-in SQL functions. Let the query do the job.","sidebar":"docs"},"sql/sfmc-sql-style-guide":{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","sidebar":"docs"},"sql/sfmc-sql-where":{"id":"sql/sfmc-sql-where","title":"SFMC SQL Where","description":"Use WHERE to make your query lean and to the point. Less is more.","sidebar":"docs"},"sql/snippets/sfmc-sql-debugging-email-sends":{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","sidebar":"snippets"},"sql/snippets/sfmc-sql-debugging-value-length":{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","sidebar":"snippets"},"ssjs/debugging-ssjs":{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","sidebar":"docs"},"ssjs/snippets/ampscript-in-ssjs":{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","sidebar":"snippets"},"ssjs/snippets/sfmc-cloud-page-apps":{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","sidebar":"snippets"},"ssjs/snippets/ssjs-mobileconnect-phone-change":{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","sidebar":"snippets"},"ssjs/snippets/ssjs-script-template":{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","sidebar":"snippets"},"ssjs/ssjs-if-and-switch":{"id":"ssjs/ssjs-if-and-switch","title":"SSJS If & Switch","description":"Deep dive into the two pillars of SSJS flow control.","sidebar":"docs"},"ssjs/ssjs-loops":{"id":"ssjs/ssjs-loops","title":"SSJS Loops","description":"Let\'s dive into limited looping options of the SSJS.","sidebar":"docs"},"ssjs/ssjs-style-guide":{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","sidebar":"docs"},"ssjs/ssjs-vs-ampscript-performance":{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","sidebar":"docs"},"webinars/sfmc-webinar-account-architecture":{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","sidebar":"webinars"},"webinars/sfmc-webinar-architecting-web-solutions":{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","sidebar":"webinars"},"webinars/sfmc-webinar-cloud-page-apps":{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","sidebar":"webinars"},"zen-of-sfmc":{"id":"zen-of-sfmc","title":"Zen of SFMC","description":"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.fc80ed25.js b/assets/js/935f2afb.fc80ed25.js deleted file mode 100644 index a4b88fc58..000000000 --- a/assets/js/935f2afb.fc80ed25.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Zen of SFMC","href":"/docs/zen-of-sfmc","docId":"zen-of-sfmc"},{"type":"category","label":"SSJS","items":[{"type":"link","label":"If & Switch","href":"/docs/ssjs/ssjs-if-and-switch","docId":"ssjs/ssjs-if-and-switch"},{"type":"link","label":"Loops","href":"/docs/ssjs/ssjs-loops","docId":"ssjs/ssjs-loops"},{"type":"link","label":"Debugging & Error Handling","href":"/docs/ssjs/debugging-ssjs","docId":"ssjs/debugging-ssjs"},{"type":"link","label":"Style Guide","href":"/docs/ssjs/ssjs-style-guide","docId":"ssjs/ssjs-style-guide"},{"type":"link","label":"Performance","href":"/docs/ssjs/ssjs-vs-ampscript-performance","docId":"ssjs/ssjs-vs-ampscript-performance"},{"type":"link","label":"\xbb SSJS Snippets","href":"/docs/category/ssjs-snippets/"},{"type":"link","label":"\xbb Official SSJS Docs","href":"https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ssjs_serverSideJavaScript.html"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ssjs"},{"type":"category","label":"JavaScript","items":[{"type":"link","label":"If & Switch","href":"/docs/js/js-if-and-switch","docId":"js/js-if-and-switch"},{"type":"link","label":"Loops","href":"/docs/js/js-loops","docId":"js/js-loops"},{"type":"link","label":"DOM","href":"/docs/js/js-dom","docId":"js/js-dom"},{"type":"link","label":"\xbb JS Snippets","href":"/docs/category/js-snippets/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/javascript"},{"type":"category","label":"AMPScript","items":[{"type":"link","label":"Style Guide","href":"/docs/ampscript/ampscript-style-guide","docId":"ampscript/ampscript-style-guide"},{"type":"link","label":"Performance","href":"/docs/ssjs/ssjs-vs-ampscript-performance","docId":"ssjs/ssjs-vs-ampscript-performance"},{"type":"link","label":"\xbb AMPScript Snippets","href":"/docs/category/ampscript-snippets/"},{"type":"link","label":"\xbb Official AMPScript Docs","href":"https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ampscript.html"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ampscript"},{"type":"category","label":"SFMC SQL","items":[{"type":"link","label":"SQL Basics","href":"/docs/sql/sfmc-sql-basics","docId":"sql/sfmc-sql-basics"},{"type":"link","label":"Select","href":"/docs/sql/sfmc-sql-select","docId":"sql/sfmc-sql-select"},{"type":"link","label":"From","href":"/docs/sql/sfmc-sql-from","docId":"sql/sfmc-sql-from"},{"type":"link","label":"Join","href":"/docs/sql/sfmc-sql-join","docId":"sql/sfmc-sql-join"},{"type":"link","label":"Where","href":"/docs/sql/sfmc-sql-where","docId":"sql/sfmc-sql-where"},{"type":"link","label":"Case","href":"/docs/sql/sfmc-sql-case","docId":"sql/sfmc-sql-case"},{"type":"link","label":"Like","href":"/docs/sql/sfmc-sql-like","docId":"sql/sfmc-sql-like"},{"type":"link","label":"String Functions","href":"/docs/sql/sfmc-sql-string-functions","docId":"sql/sfmc-sql-string-functions"},{"type":"link","label":"Date Functions","href":"/docs/sql/sfmc-sql-date-functions","docId":"sql/sfmc-sql-date-functions"},{"type":"link","label":"Numeric Functions","href":"/docs/sql/sfmc-sql-numeric-functions","docId":"sql/sfmc-sql-numeric-functions"},{"type":"link","label":"Conversion Functions","href":"/docs/sql/sfmc-sql-conversion-functions","docId":"sql/sfmc-sql-conversion-functions"},{"type":"link","label":"Aggregate Functions","href":"/docs/sql/sfmc-sql-aggregate-functions","docId":"sql/sfmc-sql-aggregate-functions"},{"type":"link","label":"Null Functions","href":"/docs/sql/sfmc-sql-null-functions","docId":"sql/sfmc-sql-null-functions"},{"type":"link","label":"Style Guide","href":"/docs/sql/sfmc-sql-style-guide","docId":"sql/sfmc-sql-style-guide"},{"type":"link","label":"\xbb SQL Snippets","href":"/docs/category/sfmc-sql-snippets/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-sql"},{"type":"category","label":"SFMC Config","items":[{"type":"link","label":"System Data Views","href":"/docs/config/sfmc-system-data-views","docId":"config/sfmc-system-data-views"},{"type":"link","label":"Mobile Connect Data Views","href":"/docs/config/sfmc-mobile-connect-data-views","docId":"config/sfmc-mobile-connect-data-views"},{"type":"link","label":"MCC Integration Patterns","href":"/docs/config/sfmc-mcc-integration-patterns","docId":"config/sfmc-mcc-integration-patterns"},{"type":"link","label":"Power of Code Resources","href":"/docs/config/sfmc-code-resource","docId":"config/sfmc-code-resource"},{"type":"link","label":"Contact Deletion Process","href":"/docs/config/sfmc-contact-deletion","docId":"config/sfmc-contact-deletion"},{"type":"link","label":"Enhanced Send Log","href":"/docs/config/sfmc-enhanced-send-log","docId":"config/sfmc-enhanced-send-log"},{"type":"link","label":"Behavioral Triggers","href":"/docs/config/sfmc-behavioral-triggers","docId":"config/sfmc-behavioral-triggers"},{"type":"link","label":"AppExchange Solutions","href":"/docs/config/sfmc-appexchange-solutions","docId":"config/sfmc-appexchange-solutions"},{"type":"link","label":"Features On Demand","href":"/docs/config/sfmc-features-on-demand","docId":"config/sfmc-features-on-demand"}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-config"},{"type":"category","label":"MC Personalization","items":[{"type":"link","label":"Catalog Architecture","href":"/docs/interaction-studio/mcp-catalog-architecture","docId":"interaction-studio/mcp-catalog-architecture"},{"type":"link","label":"Open Time Email","href":"/docs/interaction-studio/mcp-open-time-email","docId":"interaction-studio/mcp-open-time-email"},{"type":"category","label":"Serverside Code","items":[{"type":"link","label":"Serverside Code Basics","href":"/docs/interaction-studio/mcp-serverside-code-basics","docId":"interaction-studio/mcp-serverside-code-basics"},{"type":"link","label":"Serverside Code Properties","href":"/docs/interaction-studio/mcp-serverside-code-properties","docId":"interaction-studio/mcp-serverside-code-properties"}],"collapsed":true,"collapsible":true,"href":"/docs/category/serverside-code"},{"type":"link","label":"\xbb MC Personalization Snippets","href":"/docs/category/mc-personalization-snippets/"},{"type":"link","label":"\xbb Official MCP Business Docs","href":"https://help.salesforce.com/s/articleView?id=sf.mc_pers.htm"},{"type":"link","label":"\xbb Official MCP Developer Docs","href":"https://developer.salesforce.com/docs/marketing/personalization/guide/get-started.html"}],"collapsed":true,"collapsible":true,"href":"/docs/category/mc-personalization"}],"snippets":[{"type":"category","label":"SSJS Snippets","items":[{"type":"link","label":"SSJS Script Template","href":"/docs/ssjs/snippets/ssjs-script-template","docId":"ssjs/snippets/ssjs-script-template"},{"type":"link","label":"Solve with Cloud Page Apps","href":"/docs/ssjs/snippets/sfmc-cloud-page-apps","docId":"ssjs/snippets/sfmc-cloud-page-apps"},{"type":"link","label":"MobileConnect Phone Change","href":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change","docId":"ssjs/snippets/ssjs-mobileconnect-phone-change"},{"type":"link","label":"AMPScript in SSJS","href":"/docs/ssjs/snippets/ampscript-in-ssjs","docId":"ssjs/snippets/ampscript-in-ssjs"},{"type":"link","label":"\xbb SSJS Docs","href":"/docs/category/ssjs/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ssjs-snippets"},{"type":"category","label":"JS Snippets","items":[{"type":"link","label":"Tailor with Data","href":"/docs/js/snippets/tailor-with-data","docId":"js/snippets/tailor-with-data"},{"type":"link","label":"Engage with Countdown","href":"/docs/js/snippets/engage-with-countdown","docId":"js/snippets/engage-with-countdown"},{"type":"link","label":"Export, Import & Document SFMC Roles","href":"/docs/js/snippets/export-import-document-sfmc-roles","docId":"js/snippets/export-import-document-sfmc-roles"},{"type":"link","label":"\xbb JS Docs","href":"/docs/category/javascript/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/js-snippets"},{"type":"category","label":"AMPScript Snippets","items":[{"type":"link","label":"AMPScript in SSJS","href":"/docs/ssjs/snippets/ampscript-in-ssjs","docId":"ssjs/snippets/ampscript-in-ssjs"},{"type":"link","label":"\xbb AMPScript Docs","href":"/docs/category/ampscript/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/ampscript-snippets"},{"type":"category","label":"SFMC SQL Snippets","items":[{"type":"link","label":"Debugging Email Sends","href":"/docs/sql/snippets/sfmc-sql-debugging-email-sends","docId":"sql/snippets/sfmc-sql-debugging-email-sends"},{"type":"link","label":"Debugging Value Length","href":"/docs/sql/snippets/sfmc-sql-debugging-value-length","docId":"sql/snippets/sfmc-sql-debugging-value-length"},{"type":"link","label":"\xbb SQL Docs","href":"/docs/category/sfmc-sql/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-sql-snippets"},{"type":"category","label":"MC Personalization Snippets","items":[{"type":"link","label":"Catalog ETL Metadata Viewer","href":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","docId":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"type":"link","label":"\xbb MC Personalization Docs","href":"/docs/category/mc-personalization/"}],"collapsed":true,"collapsible":true,"href":"/docs/category/mc-personalization-snippets"}],"webinars":[{"type":"category","label":"SFMC Webinars","items":[{"type":"link","label":"Account Architecture","href":"/docs/webinars/sfmc-webinar-account-architecture","docId":"webinars/sfmc-webinar-account-architecture"},{"type":"link","label":"Architecting Web Solutions","href":"/docs/webinars/sfmc-webinar-architecting-web-solutions","docId":"webinars/sfmc-webinar-architecting-web-solutions"},{"type":"link","label":"Cloud Page Apps","href":"/docs/webinars/sfmc-webinar-cloud-page-apps","docId":"webinars/sfmc-webinar-cloud-page-apps"}],"collapsed":true,"collapsible":true,"href":"/docs/category/sfmc-webinars"}]},"docs":{"ampscript/ampscript-style-guide":{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","sidebar":"docs"},"config/sfmc-appexchange-solutions":{"id":"config/sfmc-appexchange-solutions","title":"SFMC AppExchange Solutions","description":"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.","sidebar":"docs"},"config/sfmc-behavioral-triggers":{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","sidebar":"docs"},"config/sfmc-code-resource":{"id":"config/sfmc-code-resource","title":"SFMC Code Resource","description":"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.","sidebar":"docs"},"config/sfmc-contact-deletion":{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","sidebar":"docs"},"config/sfmc-enhanced-send-log":{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","sidebar":"docs"},"config/sfmc-features-on-demand":{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","sidebar":"docs"},"config/sfmc-mcc-integration-patterns":{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","sidebar":"docs"},"config/sfmc-mobile-connect-data-views":{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","sidebar":"docs"},"config/sfmc-system-data-views":{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","sidebar":"docs"},"docs-and-snippets":{"id":"docs-and-snippets","title":"Docs & Snippets","description":"SSJS + JS + AMPScript + SQL + SFMC Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.","sidebar":"docs"},"interaction-studio/mcp-catalog-architecture":{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","sidebar":"docs"},"interaction-studio/mcp-open-time-email":{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","sidebar":"docs"},"interaction-studio/mcp-serverside-code-basics":{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","sidebar":"docs"},"interaction-studio/mcp-serverside-code-properties":{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","sidebar":"docs"},"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer":{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","sidebar":"snippets"},"js/js-dom":{"id":"js/js-dom","title":"JS Document Object Model","description":"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.","sidebar":"docs"},"js/js-if-and-switch":{"id":"js/js-if-and-switch","title":"JS If & Switch","description":"Deep dive into the two pillars of JavaScript flow control.","sidebar":"docs"},"js/js-loops":{"id":"js/js-loops","title":"JS Loops","description":"JavaScript offers four for loops and two while loops. What\'s the difference?","sidebar":"docs"},"js/snippets/engage-with-countdown":{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","sidebar":"snippets"},"js/snippets/export-import-document-sfmc-roles":{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","sidebar":"snippets"},"js/snippets/tailor-with-data":{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","sidebar":"snippets"},"sql/sfmc-sql-aggregate-functions":{"id":"sql/sfmc-sql-aggregate-functions","title":"SFMC SQL Aggregate Functions","description":"Group rows and apply aggregate functions to see the big picture in your data extensions.","sidebar":"docs"},"sql/sfmc-sql-basics":{"id":"sql/sfmc-sql-basics","title":"SFMC SQL Basics","description":"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.","sidebar":"docs"},"sql/sfmc-sql-case":{"id":"sql/sfmc-sql-case","title":"SFMC SQL Case","description":"Empower your Marketing Cloud queries with conditional SQL CASE logic.","sidebar":"docs"},"sql/sfmc-sql-conversion-functions":{"id":"sql/sfmc-sql-conversion-functions","title":"SFMC SQL Conversion Functions","description":"Break from the limits of Data Extension data types. Use full power of SQL to control your values.","sidebar":"docs"},"sql/sfmc-sql-date-functions":{"id":"sql/sfmc-sql-date-functions","title":"SFMC SQL Date Functions","description":"Take control over dates with built-in SQL functions. Let the query do the job.","sidebar":"docs"},"sql/sfmc-sql-from":{"id":"sql/sfmc-sql-from","title":"SFMC SQL From","description":"Tell the SQL query FROM where you need the data.","sidebar":"docs"},"sql/sfmc-sql-join":{"id":"sql/sfmc-sql-join","title":"SFMC SQL Join","description":"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.","sidebar":"docs"},"sql/sfmc-sql-like":{"id":"sql/sfmc-sql-like","title":"SFMC SQL Like","description":"Get a LIKE and build more flexible SQL queries.","sidebar":"docs"},"sql/sfmc-sql-null-functions":{"id":"sql/sfmc-sql-null-functions","title":"SFMC SQL NULL Functions","description":"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.","sidebar":"docs"},"sql/sfmc-sql-numeric-functions":{"id":"sql/sfmc-sql-numeric-functions","title":"SFMC SQL Numeric Functions","description":"Take control over numbers with built-in SQL functions. Let the query do the job.","sidebar":"docs"},"sql/sfmc-sql-select":{"id":"sql/sfmc-sql-select","title":"SFMC SQL Select","description":"Selected information on the SELECT statement in SFMC SQL.","sidebar":"docs"},"sql/sfmc-sql-string-functions":{"id":"sql/sfmc-sql-string-functions","title":"SFMC SQL String Functions","description":"Take control over strings with built-in SQL functions. Let the query do the job.","sidebar":"docs"},"sql/sfmc-sql-style-guide":{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","sidebar":"docs"},"sql/sfmc-sql-where":{"id":"sql/sfmc-sql-where","title":"SFMC SQL Where","description":"Use WHERE to make your query lean and to the point. Less is more.","sidebar":"docs"},"sql/snippets/sfmc-sql-debugging-email-sends":{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","sidebar":"snippets"},"sql/snippets/sfmc-sql-debugging-value-length":{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","sidebar":"snippets"},"ssjs/debugging-ssjs":{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","sidebar":"docs"},"ssjs/snippets/ampscript-in-ssjs":{"id":"ssjs/snippets/ampscript-in-ssjs","title":"AMPScript in SSJS","description":"Not all AMPScript functions are available in SSJS. But you still can use them.","sidebar":"snippets"},"ssjs/snippets/sfmc-cloud-page-apps":{"id":"ssjs/snippets/sfmc-cloud-page-apps","title":"Solve with Cloud Page Apps","description":"Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.","sidebar":"snippets"},"ssjs/snippets/ssjs-mobileconnect-phone-change":{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","title":"MobileConnect Phone Change","description":"Control your MobileConnect data with hidden _MobileAddress features.","sidebar":"snippets"},"ssjs/snippets/ssjs-script-template":{"id":"ssjs/snippets/ssjs-script-template","title":"SSJS Script Template","description":"Jumpstart your coding with best practice fueled SSJS Template.","sidebar":"snippets"},"ssjs/ssjs-if-and-switch":{"id":"ssjs/ssjs-if-and-switch","title":"SSJS If & Switch","description":"Deep dive into the two pillars of SSJS flow control.","sidebar":"docs"},"ssjs/ssjs-loops":{"id":"ssjs/ssjs-loops","title":"SSJS Loops","description":"Let\'s dive into limited looping options of the SSJS.","sidebar":"docs"},"ssjs/ssjs-style-guide":{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","sidebar":"docs"},"ssjs/ssjs-vs-ampscript-performance":{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","sidebar":"docs"},"webinars/sfmc-webinar-account-architecture":{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","sidebar":"webinars"},"webinars/sfmc-webinar-architecting-web-solutions":{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","sidebar":"webinars"},"webinars/sfmc-webinar-cloud-page-apps":{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","sidebar":"webinars"},"zen-of-sfmc":{"id":"zen-of-sfmc","title":"Zen of SFMC","description":"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/937990e1.64309f69.js b/assets/js/937990e1.64309f69.js deleted file mode 100644 index 8b5e8cfd2..000000000 --- a/assets/js/937990e1.64309f69.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7531],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(a),m=r,h=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var p=2;p<o;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},1872:(e,t,a)=>{a.d(t,{m:()=>o});var n=a(7294);const r="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},t))}},5196:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var n=a(7462),r=(a(7294),a(4137)),o=a(1872);const i={id:"mcp-serverside-code-properties",title:"MCP Serverside Code Properties",sidebar_label:"Serverside Code Properties",description:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",image:"img/og/og-image-mcp-serverside-code-properties.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},l=void 0,s={unversionedId:"interaction-studio/mcp-serverside-code-properties",id:"interaction-studio/mcp-serverside-code-properties",title:"MCP Serverside Code Properties",description:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",source:"@site/docs/interaction-studio/mcp-serverside-code-properties.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-serverside-code-properties",permalink:"/docs/interaction-studio/mcp-serverside-code-properties",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-serverside-code-properties.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"TypeScript",permalink:"/docs/tags/type-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697927729,formattedLastUpdatedAt:"Oct 21, 2023",frontMatter:{id:"mcp-serverside-code-properties",title:"MCP Serverside Code Properties",sidebar_label:"Serverside Code Properties",description:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",image:"img/og/og-image-mcp-serverside-code-properties.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},sidebar:"docs",previous:{title:"Serverside Code Basics",permalink:"/docs/interaction-studio/mcp-serverside-code-basics"}},p={},u=[{value:"Basic properties",id:"basic-properties",level:2},{value:"Boolean",id:"boolean",level:3},{value:"String",id:"string",level:3},{value:"\u203a Array String",id:"-array-string",level:4},{value:"\u203a Default String",id:"-default-string",level:4},{value:"\u203a Select String",id:"-select-string",level:4},{value:"\u203a Rich Text String",id:"-rich-text-string",level:4},{value:"Number",id:"number",level:3},{value:"\u203a Array Number",id:"-array-number",level:4},{value:"\u203a Default Number",id:"-default-number",level:4},{value:"\u203a Select Number",id:"-select-number",level:4},{value:"Color",id:"color",level:3},{value:"\u203a Default Color",id:"-default-color",level:4},{value:"Datetime",id:"datetime",level:3},{value:"\u203a Datetime Range",id:"-datetime-range",level:4},{value:"Readonly property",id:"readonly-property",level:2},{value:"Complex property",id:"complex-property",level:2},{value:"Complex default values",id:"complex-default-values",level:3},{value:"Complex picklist",id:"complex-picklist",level:3},{value:"Complex tabular view",id:"complex-tabular-view",level:3},{value:"Decorators",id:"decorators",level:2},{value:"@title & @subtitle",id:"title--subtitle",level:3},{value:"@markdown",id:"markdown",level:3},{value:"@header & @headerSubtitle",id:"header--headersubtitle",level:3},{value:"@hidden & @shownIf",id:"hidden--shownif",level:3},{value:"@buttonGroup",id:"buttongroup",level:3},{value:"@optional",id:"optional",level:3}],d={toc:u},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",mdxType:"LeadText"}),(0,r.kt)("p",null,"Once you learn the ",(0,r.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-serverside-code-basics"},"very basics of Serverside Code")," in Marketing Cloud Personalization (Interaction Studio), it is time to start writing code. The easiest way is, to begin with creating the campaign creation UI for the marketer - defining all the inputs they will need to fill in to drive the experience. It will be our focus in this article."),(0,r.kt)("p",null,"MCP Serverside Code offers five basic property data types: ",(0,r.kt)("a",{parentName:"p",href:"#boolean"},"Boolean"),", ",(0,r.kt)("a",{parentName:"p",href:"#string"},"String"),", ",(0,r.kt)("a",{parentName:"p",href:"#number"},"Number"),", ",(0,r.kt)("a",{parentName:"p",href:"#color"},"Color")," and ",(0,r.kt)("a",{parentName:"p",href:"#datime"},"DateTime"),". Those, their combinations into ",(0,r.kt)("a",{parentName:"p",href:"#complex-property"},"complex properties")," and modifications through ",(0,r.kt)("a",{parentName:"p",href:"#decorators"},"decorators")," enable you to build nearly anything you need for your campaign configuration screen."),(0,r.kt)("p",null,"Let's dive into how you can make the most of those features."),(0,r.kt)("h2",{id:"basic-properties"},"Basic properties"),(0,r.kt)("p",null,"Basic properties are the base building blocks of your campaign configuration. They are all you need to make a perfect campaign template, and mastering them will be essential to doing more complex UIs with ",(0,r.kt)("a",{parentName:"p",href:"#complex-property"},"complex properties")," and ",(0,r.kt)("a",{parentName:"p",href:"#decorators"},"decorators"),"."),(0,r.kt)("h3",{id:"boolean"},"Boolean"),(0,r.kt)("p",null,"The boolean property lets you capture a ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"false")," flag by creating a checkbox input:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Create simple checkbox"',title:'"Create',simple:!0,'checkbox"':!0},"isTextLeftToRight: boolean;\n// Input: Editable unchecked checkbox\n// Output: true or false\n")),(0,r.kt)("p",null,"The boolean property is unchecked by default (returns ",(0,r.kt)("inlineCode",{parentName:"p"},"false"),"), but you can change it by passing a ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," value in the code:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Checkbox checked by default"',title:'"Checkbox',checked:!0,by:!0,'default"':!0},"isTextLeftToRight: boolean = true;\n// Input: Editable checked checkbox\n// Output: true or false\n")),(0,r.kt)("p",null,"Boolean fields are crucial for template development as they are perfect for building logic, for example, with the ",(0,r.kt)("a",{parentName:"p",href:"#hidden--shownif"},(0,r.kt)("inlineCode",{parentName:"a"},"@shownIf")," decorator"),"."),(0,r.kt)("h3",{id:"string"},"String"),(0,r.kt)("p",null,"String property lets you capture a text input:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Create empty text input field"',title:'"Create',empty:!0,text:!0,input:!0,'field"':!0},'content: string;\n// Input: Empty text input\n// Output: "Provided text"\n')),(0,r.kt)("p",null,"However, there is much more to string property than just that."),(0,r.kt)("h4",{id:"-array-string"},"\u203a Array String"),(0,r.kt)("p",null,"You may want to capture more than one string. Easy, you can do it with two characters:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Capture multiple strings"',title:'"Capture',multiple:!0,'strings"':!0},'hashtags: string[];\n// Input: Empty text input with an option for converting entered text into one of the values\n// Output: ["Array", "of", "Strings"]\n')),(0,r.kt)("p",null,"By adding ",(0,r.kt)("inlineCode",{parentName:"p"},"[]")," after the type definition, we convert the field to an array of strings. During configuration, you can provide multiple values that, in the payload, will be returned as an array. It doesn't accept duplicate values."),(0,r.kt)("h4",{id:"-default-string"},"\u203a Default String"),(0,r.kt)("p",null,"To simplify the work for your marketers or to provide recommended examples of expected data, you can easily add a default value to your string by delivering it as a string after the equal sign:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Add default content"',title:'"Add',default:!0,'content"':!0},"content: string = 'This is default content';\n// Input: Editable prefilled text input\n// Output: \"Provided text\"\n")),(0,r.kt)("p",null,"It can be freely edited during configuration but will be passed as-is to the payload if no changes are made."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can provide default values also for string arrays:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Default values for array string"',title:'"Default',values:!0,for:!0,array:!0,'string"':!0},'hashtags: string[] = [\'interaction-studio\', \'marketing-cloud-personalization\'];\n// Input: Editable prefilled text input with two deletable values and space to write additional ones\n// Output: ["Array", "of", "Strings"]\n'))),(0,r.kt)("h4",{id:"-select-string"},"\u203a Select String"),(0,r.kt)("p",null,"You can go one step further and lock the string property to only a set of preconfigured values using the ",(0,r.kt)("inlineCode",{parentName:"p"},"@options")," decorator. It is excellent when you need a particular value, for example, for a programmatic logic in other parts of your template."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Limit possible values with select"',title:'"Limit',possible:!0,values:!0,with:!0,'select"':!0},"@options(['brandA', 'brandB', 'brandC'])\nbrand: string;\n// Input: Empty text input showing dropdown with configured options on click\n// Output: \"Selected text\"\n")),(0,r.kt)("p",null,"With such code, the campaign configuration will display a picklist with the hardcoded values. It will output a string to the campaign payload."),(0,r.kt)("p",null,"You can also provide ",(0,r.kt)("a",{parentName:"p",href:"#-default-string"},"default value")," for your select field:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Provide default select value"',title:'"Provide',default:!0,select:!0,'value"':!0},"@options(['brandA', 'brandB', 'brandC'])\nbrand: string = 'brandA';\n// Input: Editable prefilled text input showing dropdown with configured options on click\n// Output: \"Selected text\"\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can also create a select field without the decorator using literals:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Literal select field"',title:'"Literal',select:!0,'field"':!0},"brand: 'brandA' | 'brandB' | 'brandC';\n// Input: Empty text input showing dropdown with configured options on click\n// Output: \"Selected text\"\n"))),(0,r.kt)("p",null,"Just as you can capture an array of text inputs, you can do the same for select strings and create a multi-picklist. However, while the preconfigured options will be visible and accessible to pick, new options - outside of what you hardcoded - ",(0,r.kt)("strong",{parentName:"p"},"can")," be freely added."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Multi-picklist"',title:'"Multi-picklist"'},"@options(['brandA', 'brandB', 'brandC'])\nbrands: string[];\n// Input: Empty text field with picklist and option to create new values. Allows for multiple additions.\n// Output: [\"Array\", \"of\", \"Strings\"]\n")),(0,r.kt)("p",null,"You can also provide ",(0,r.kt)("a",{parentName:"p",href:"#-default-string"},"default value")," for your multi-select field:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Provide default multi-select values"',title:'"Provide',default:!0,"multi-select":!0,'values"':!0},"@options(['brandA', 'brandB', 'brandC'])\nbrands: string[] = ['brandA', 'brandB'];\n// Input: Editable prefilled text field with picklist and option to create new values. Allows for multiple additions.\n// Output: [\"Array\", \"of\", \"Strings\"]\n")),(0,r.kt)("p",null,"It will output an array of strings to the campaign payload."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can also create a multi-select field without the decorator using literals:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Literal multi-select field"',title:'"Literal',"multi-select":!0,'field"':!0},"brand: ('brandA' | 'brandB' | 'brandC')[];\n// Input: Empty text field with picklist and option to create new values. Allows for multiple additions.\n// Output: [\"Array\", \"of\", \"Strings\"]\n"))),(0,r.kt)("h4",{id:"-rich-text-string"},"\u203a Rich Text String"),(0,r.kt)("p",null,"You can easily convert this simple text input into a rich text field by using a ",(0,r.kt)("inlineCode",{parentName:"p"},"@richText")," decorator:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Capture styling with a single decorator"',title:'"Capture',styling:!0,with:!0,a:!0,single:!0,'decorator"':!0},"@richText(true)\ncontent: string;\n// Input: Text input that adapts to the content size and provides bold, italic, underscore and link WYSIWYG options.\n// Output: \"String with <span style='font-weight:bold;'>optional</span>HTML<br/>Includes multiline\"\n")),(0,r.kt)("p",null,"This decorator will change the input field to a multiline box with bold, italic, underscore and link features. The payload will return those styles in the form of HTML that can then be used directly, for example, in the Handlebars tab of Web Campaign."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"While the rich text options are minimal, you can write some other HTML (for example, ",(0,r.kt)("inlineCode",{parentName:"p"},"<span>")," with style attribute) directly in the box, which will be passed to the output correctly. It will even display as a formatted text after you revisit the configuration.")),(0,r.kt)("h3",{id:"number"},"Number"),(0,r.kt)("p",null,"Number property lets you capture integer (",(0,r.kt)("inlineCode",{parentName:"p"},"3"),") and decimal (",(0,r.kt)("inlineCode",{parentName:"p"},"3.14"),") values:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Create empty numeric input"',title:'"Create',empty:!0,numeric:!0,'input"':!0},"recommendationsCount: number;\n// Input: Empty text (sic!) input\n// Output: 3.14\n")),(0,r.kt)("p",null,"Keep in mind that non-numeric values might break the campaign without any error visible in the configuration screen. You can either display a warning using ",(0,r.kt)("a",{parentName:"p",href:"#hidden--shownif"},(0,r.kt)("inlineCode",{parentName:"a"},"@shownIf")," decorator")," and a ",(0,r.kt)("a",{parentName:"p",href:"#string"},"string field")," or create sanitization logic in the run block."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can use ",(0,r.kt)("inlineCode",{parentName:"p"},"@unit")," ",(0,r.kt)("a",{parentName:"p",href:"#decorators"},"decorator")," to provide a unit description next to the input. It has no impact on the outputted value but gives marketer information about the expected value:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1} title="Unit decorator on number"',"{1}":!0,title:'"Unit',decorator:!0,on:!0,'number"':!0},"@unit('ms')\ndelayBeforeDisplay: number;\n"))),(0,r.kt)("h4",{id:"-array-number"},"\u203a Array Number"),(0,r.kt)("p",null,"Just as with strings, you can capture multiple numeric values by adding ",(0,r.kt)("inlineCode",{parentName:"p"},"[]"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Capture multiple numbers"',title:'"Capture',multiple:!0,'numbers"':!0},"productIds: number[];\n// Input: A plus icon that adds new text inputs with delete buttons\n// Output: [3.14, 3, 5]\n")),(0,r.kt)("p",null,"It will output an array of numbers to the campaign payload."),(0,r.kt)("h4",{id:"-default-number"},"\u203a Default Number"),(0,r.kt)("p",null,"Again, just as with strings, you can provide an editable default value:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Default numeric value"',title:'"Default',numeric:!0,'value"':!0},"recommendationsCount: number = 6;\n// Input: Editable prefilled text input\n// Output: 6\n")),(0,r.kt)("p",null,"The same can be done for Array Numbers:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Default numeric array value"',title:'"Default',numeric:!0,array:!0,'value"':!0},"productIds: number[] = [123, 456, 789];\n// Input: Editable and deletable prefilled text inputs and a plus icon that can add more\n// Output: [123, 456, 32]\n\n")),(0,r.kt)("h4",{id:"-select-number"},"\u203a Select Number"),(0,r.kt)("p",null,"As with ",(0,r.kt)("a",{parentName:"p",href:"#-select-string"},"strings"),", you can create a numeric picklist:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Numeric picklist"',title:'"Numeric','picklist"':!0},"recommendationsCount: 1 | 3 | 6 | 9;\n// Input: Empty text input showing dropdown with configured options on click\n// Output: 1\n")),(0,r.kt)("p",null,"You can also pass a default value:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Numeric picklist with default value"',title:'"Numeric',picklist:!0,with:!0,default:!0,'value"':!0},"recommendationsCount: 1 | 3 | 6 | 9 = 6;\n// Input: Editable prefilled text input showing dropdown with configured options on click\n// Output: 6\n")),(0,r.kt)("p",null,"You can also create a numeric multi-picklist:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Numeric multi-picklist"',title:'"Numeric','multi-picklist"':!0},"orderOfSections: (1 | 2 | 3 | 4 | 5)[];\n// Input: Empty text field with picklist. Allows for multiple additions.\n// Output: [1, 3, 4, 2, 5]\n")),(0,r.kt)("p",null,"Different from ",(0,r.kt)("a",{parentName:"p",href:"#-select-string"},"strings multi-select"),", with a numeric multi-picklist, the marketer won't be able to add new options outside of what you preconfigured. Yay!"),(0,r.kt)("p",null,"However, there are three caveats to keep in mind:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"You cannot have ",(0,r.kt)("inlineCode",{parentName:"li"},"0")," as one of the options. The picklist will crash."),(0,r.kt)("li",{parentName:"ol"},"You cannot use ",(0,r.kt)("inlineCode",{parentName:"li"},"@options")," to create the picklist. It will be ignored."),(0,r.kt)("li",{parentName:"ol"},"The single-select picklist will always cut the visibility of the last digit in the longest option after selecting it.")),(0,r.kt)("h3",{id:"color"},"Color"),(0,r.kt)("p",null,"Color property lets you create a color picker with a single line of code:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Create color picker"',title:'"Create',color:!0,'picker"':!0},'backgroundColor: Color;\n// Input: An input pseudo-prefilled with #FFFFFF and a color box that, on click, opens the color selection interface\n// Output: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n//}\n')),(0,r.kt)("p",null,"You will be able to select the color by dragging the selector over a colour palette or by providing hex/rgba/hsl values. The property will output to payload a ",(0,r.kt)("inlineCode",{parentName:"p"},"color")," object with both hex and rgba values."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"While the property will look like it is prefilled with white color, it will output 'null' until you pick a color in the interface. If you want the white to be a working default option, you must configure it explicitly.")),(0,r.kt)("h4",{id:"-default-color"},"\u203a Default Color"),(0,r.kt)("p",null,"You can provide a default color, but it will be more complex. You cannot just give a single hex value; you need to replicate the whole output object:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title"Default color value"','title"Default':!0,color:!0,'value"':!0},'backgroundColor: Color = {\n "hex": "#da4e55",\n "r": 218,\n "g": 78,\n "b": 85,\n "a": 1\n};\n// Input: An input truly prefilled with #FFFFFF and a color box that, on click, opens the color selection interface\n// Output: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n//}\n')),(0,r.kt)("h3",{id:"datetime"},"Datetime"),(0,r.kt)("p",null,"Datetime property provides a clean-looking calendar widget that lets the marketer easily pick up a date."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Create datetime picker"',title:'"Create',datetime:!0,'picker"':!0},'promotionDate: DateTime;\n// Input: Empty input with calendar icon that, on click, opens full calendar for date selection\n// Output: {\n// "dateTime": [\n// "2023-10-01T16:00:00.000Z"\n// ]\n//}\n')),(0,r.kt)("p",null,"There are two payload-related things to consider:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The DateTime property always outputs an object with a single ",(0,r.kt)("inlineCode",{parentName:"li"},"dateTime")," property assigned to an array of strings."),(0,r.kt)("li",{parentName:"ol"},"The date-times are returned as ISO 8601 strings (",(0,r.kt)("inlineCode",{parentName:"li"},"2023-10-01T16:00:00.000Z"),").")),(0,r.kt)("h4",{id:"-datetime-range"},"\u203a Datetime Range"),(0,r.kt)("p",null,"While you cannot create a multi-select datetime field, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"@range")," decorator to select two dates within a nice UI."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Create range datetime picker"',title:'"Create',range:!0,datetime:!0,'picker"':!0},'@range(true)\npromotionDate: DateTime;\n// Input: Empty input with calendar icon that on click opens full calendar for two dates selection with range indicator\n// Output: {\n// "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ]\n//}\n')),(0,r.kt)("p",null,"The output will return both selected dates in the ",(0,r.kt)("inlineCode",{parentName:"p"},"dateTime")," array of strings."),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"readonly-property"},"Readonly property"),(0,r.kt)("p",null,"Apart from ",(0,r.kt)("a",{parentName:"p",href:"#string"},"basic string property")," there is also a very similar readonly string property:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Static readonly property"',title:'"Static',readonly:!0,'property"':!0},"readonly templateVersion = \"Version 1.1\"\n// Input: No input, just a readonly text written in the form\n// Output: 'Version 1.1'\n")),(0,r.kt)("p",null,"As you can see, the key difference is the ",(0,r.kt)("inlineCode",{parentName:"p"},"readonly")," prefix before defining the property. It also uses the ",(0,r.kt)("a",{parentName:"p",href:"#-default-string"},"default string")," approach to assign the value."),(0,r.kt)("p",null,"However, readonly property has one superpower. You can assign an arrow function to it (as long as it will return a string) and use values from other properties to transform them:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{2,5-13} title="Dynamic readonly property"',"{2,5-13}":!0,title:'"Dynamic',readonly:!0,'property"':!0},"header: string = 'DEFault heaDER';\nreadonly upperCaseHeader = () => this?.header.toUpperCase || '';\n// Input: No input, just a readonly text updating real-time based on header input\n// Output: 'DEFAULT HEADER'\nreadonly titleCaseHeader = () => {\n return this?.header\n .toLowerCase()\n .split(' ')\n .filter(word => word !== '')\n .map(word => word.replace(word[0], word[0].toUpperCase()))\n .join(' ')\n || '';\n}\n// Input: No input, just a readonly text updating real-time based on header input\n// Output: 'Default Header'\n")),(0,r.kt)("p",null,"With the dynamic readonly property, you can transform string inputs, concatenate multiple inputs into one field or even create a logic based on non-string inputs (as long as the output is a string)."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can do the same things later in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-serverside-code-basics#2-run-block"},"run() block"),". It will be even more powerful there, as you can use the context object. However, you must manually add those calculated values to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-serverside-code-basics#3-return-statement"},"return statement")," to see it in the payload."),(0,r.kt)("p",{parentName:"admonition"},"For simple use cases, the readonly property will be more straightforward and provide a nifty real-time preview of the calculated value for the marketer.")),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"complex-property"},"Complex property"),(0,r.kt)("p",null,"The input configuration fun starts when you combine ",(0,r.kt)("a",{parentName:"p",href:"#basic-properties"},"basic properties")," into complex ones. The method is straightforward. Outside the main class that implements CampaignTemplateComponent, create a new class export that contains all the basic inputs you need:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Define complex property"',title:'"Define',complex:!0,'property"':!0},"export class TimeframedColorPicker {\n @range(true)\n timeframe: DateTime;\n\n color: Color;\n}\n")),(0,r.kt)("p",null,"With complex property defined, you can leverage it in the main class the same way as you do with basic properties:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Use complex property"',title:'"Use',complex:!0,'property"':!0},'timeframedColor: TimeframedColorPicker;\n// Input: Set of basic properties - datetime range and color pickers, in this case\n// Output: {\n// timeframedColor: {\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n// }\n//}\n')),(0,r.kt)("p",null,"What are the benefits of this approach?"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"You can define your complex property class once and then use it multiple times in your form."),(0,r.kt)("li",{parentName:"ol"},"You can control the structure of the Serverside payload.")),(0,r.kt)("p",null,"A complex property creates a new nested object assigned to an input property. Let's look at the difference:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Payload using basic properties"',title:'"Payload',using:!0,basic:!0,'properties"':!0},'@range(true)\ntimeframe: DateTime;\n\ncolor: Color;\n// Input: Two basic properties - datetime range and color pickers, in this case\n// Output: {\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n//}\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{4,16} title="Payload using complex property"',"{4,16}":!0,title:'"Payload',using:!0,complex:!0,'property"':!0},'timeframedColor: TimeframedColorPicker;\n// Input: Set of basic properties - datetime range and color pickers in this case\n// Output: {\n// timeframedColor: {\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n// }\n//}\n')),(0,r.kt)("p",null,"As you can see, data from basic inputs is assigned as properties to the complex property. This can help with payload readability and might be crucial when adapting your payload to specific requirements (for example, schema expected by a React website or 3rd party system)."),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"You can nest complex properties")),(0,r.kt)("p",null,"Just as you can add a complex property to a field, you can also create a complex property using complex properties. While it can again give you all the benefits mentioned here, be careful not to go overboard. Deep nesting is more challenging to understand and use. There is no perfect rule, but check out ",(0,r.kt)("a",{parentName:"p",href:"../../zen-of-sfmc/#simple-is-better-than-complex"},"Simple/Complex recommendations in Zen of SFMC"),"."),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},"You can leverage it to build an Array of complex properties!")),(0,r.kt)("p",null,"This is the real game changer - out of the basic properties, only ",(0,r.kt)("a",{parentName:"p",href:"#-array-string"},"Strings")," and ",(0,r.kt)("a",{parentName:"p",href:"#-array-string"},"Numbers")," can be used as arrays. But using a complex one, you can also leverage Boolean, Color and Datetime. The approach is the same as previously - just add ",(0,r.kt)("inlineCode",{parentName:"p"},"[]"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{4,16} title="Array of complex properties"',"{4,16}":!0,title:'"Array',of:!0,complex:!0,'properties"':!0},'timeframedColor: TimeframedColorPicker[];\n// Input: A plus icon that adds new sets of basic properties with delete buttons\n// Output: {\n// timeframedColor: [{\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n// }]\n//}\n')),(0,r.kt)("p",null,"It allows you to capture multiple complex configurations (for example, multiple recommendations or - as in the example above - various colors that can change in the campaign based on the current date)."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There is a ",(0,r.kt)("a",{parentName:"p",href:"https://issues.salesforce.com/issue/a028c00000p5gvMAAQ/personalization-incorrect-behaviour-of-array-of-complex-objects-in-templates"},"bug with the removal UI")," for arrays of complex properties."),(0,r.kt)("p",{parentName:"admonition"},"Let's say you have multiple properties configured in an array and want to remove one. If you click the removal button, regardless of which element you did it, the UI will remove the bottom one. However, the correct one was removed in the backend, which you can check in the Payload Preview. Save, reenter the configuration screen or refresh, and you will see the correct configuration.")),(0,r.kt)("h3",{id:"complex-default-values"},"Complex default values"),(0,r.kt)("p",null,"With complex properties, you can provide default values in two ways:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"You can provide default values within the defining class directly on basic properties.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Define complex property with default values"',title:'"Define',complex:!0,property:!0,with:!0,default:!0,'values"':!0},"export class RecommendationsConfig {\n recommendationsHeader: string = 'Chosen for You';\n recommendationsDisplayed: number = 6;\n}\n")),(0,r.kt)("p",null,"This approach will work for complex property arrays but not single complex properties."),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"You can provide a default value in the main class implementing the CampaignTemplateComponent.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Use complex property with default value"',title:'"Use',complex:!0,property:!0,with:!0,default:!0,'value"':!0},'recsConfig: RecommendationsConfig = {\n "recommendationsHeader": "Chosen for You",\n "recommendationsDisplayed": 6\n};\n')),(0,r.kt)("p",null,"This approach will work for single complex property and - if you provide the default value(s) in the array - also for arrays for complex properties."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Use an array of complex properties with default values"',title:'"Use',an:!0,array:!0,of:!0,complex:!0,properties:!0,with:!0,default:!0,'values"':!0},'recsConfig: RecommendationsConfig = [{\n "recommendationsHeader": "Chosen for You",\n "recommendationsDisplayed": 6\n}, {\n "recommendationsHeader": "Bestsellers",\n "recommendationsDisplayed": 3\n}];\n')),(0,r.kt)("p",null,"As you can see, both approaches work for arrays of complex properties but result in a different outcome. The first approach provides default values to all elements of a complex property array you will create. The second approach prefills the array with the provided default elements. You can use both simultaneously to have a few array elements prefilled and provide default values for all new elements created on top of it."),(0,r.kt)("h3",{id:"complex-picklist"},"Complex picklist"),(0,r.kt)("p",null,"Similar to how you can create a selection for ",(0,r.kt)("a",{parentName:"p",href:"#-select-string"},"strings")," and ",(0,r.kt)("a",{parentName:"p",href:"#-select-numbers"},"numbers"),", you can also build picklists for complex properties. And I don't mean using the selects within the complex property (which is also possible), but simplifying your complex property to a single straightforward picklist."),(0,r.kt)("p",null,"Using the previous complex property example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{4-5} title="Complex property with a hidden label property"',"{4-5}":!0,title:'"Complex',property:!0,with:!0,a:!0,hidden:!0,label:!0,'property"':!0},"export class RecommendationsConfig {\n recommendationsHeader: string;\n recommendationsDisplayed: number;\n @hidden(true)\n label: string;\n}\n")),(0,r.kt)("p",null,"Instead of requiring the user to fill in those values and giving them a free hand at that, you can instead provide preconfigured options with user-friendly labels using the ",(0,r.kt)("inlineCode",{parentName:"p"},"@options")," decorator:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1-6} title="Change complex property to a single picklist with @options decorator"',"{1-6}":!0,title:'"Change',complex:!0,property:!0,to:!0,a:!0,single:!0,picklist:!0,with:!0,"@options":!0,'decorator"':!0},'@options([\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },\n { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },\n])\nrecsConfig: RecommendationsConfig;\n// Input: Single picklist showing only the label values\n// Output: {\n// "recommendationsHeader": "Bestsellers",\n// "recommendationsDisplayed": 12\n// "label": "Bestsellers Home Page"\n//}\n')),(0,r.kt)("p",null,"The campaign UI will display only a single picklist using the label values. At the same time, you can provide dozens of appropriately configured properties to the campaign payload in the backend."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can leverage complex picklist and ",(0,r.kt)("a",{parentName:"p",href:"#complex-default-values"},"default values")," at the same time. Just pass one of the ",(0,r.kt)("inlineCode",{parentName:"p"},"@options")," decorator objects."),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Complex property picklist with default value"',title:'"Complex',property:!0,picklist:!0,with:!0,default:!0,'value"':!0},'@options([\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },\n { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },\n])\nrecsConfig: RecommendationsConfig = {\n recommendationsHeader: "Chosen For You",\n recommendationsDisplayed: 6,\n label: "Chosen for You Global"\n};\n'))),(0,r.kt)("h3",{id:"complex-tabular-view"},"Complex tabular view"),(0,r.kt)("p",null,"Complex properties can take up a lot of space in your campaign configuration screen. Sometimes, you can save some space using the ",(0,r.kt)("inlineCode",{parentName:"p"},"@tabular")," decorator."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Example complex property with two numeric inputs"',title:'"Example',complex:!0,property:!0,with:!0,two:!0,numeric:!0,'inputs"':!0},"export class PriceRange {\n @title('Price starts at')\n lowerPriceBoundary: number;\n @title('Price ends at')\n upperPriceBoundary: number;\n}\n")),(0,r.kt)("p",null,"The complex property above will take 5 lines in the campaign configuration pane - complex property title and two input label + title sets. We can change it to 3 lines with the ",(0,r.kt)("inlineCode",{parentName:"p"},"@tabular")," decorator:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1} title="Tabular decorator on a single complex property"',"{1}":!0,title:'"Tabular',decorator:!0,on:!0,a:!0,single:!0,complex:!0,'property"':!0},'@tabular()\npriceRange: PriceRange;\n// Input: Two inputs are provided side by side instead of one below the other\n// Output: {\n// "lowerPriceBoundary": 10,\n// "upperPriceBoundary": 20\n//}\n')),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can also use that decorator for arrays of complex properties, but you will see that the input labels are now visible only on the first element of the array for an even more compact view. If it doesn't suit your needs, you can pass an argument to the decorator to change that behaviour: ",(0,r.kt)("inlineCode",{parentName:"p"},"@tabular({headersPerRow: true})"),".")),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"decorators"},"Decorators"),(0,r.kt)("p",null,"Decorators are a TypeScript feature that can change or extend the behaviour of properties in the MC Personalization's Serverside Code. You have already seen some of them:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#-select-string"},(0,r.kt)("inlineCode",{parentName:"a"},"@options"))," used to provide picklist values for ",(0,r.kt)("a",{parentName:"li",href:"#-select-string"},"strings"),", ",(0,r.kt)("a",{parentName:"li",href:"#-select-number"},"numbers")," and ",(0,r.kt)("a",{parentName:"li",href:"#complex-picklist"},"complex properties"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#-rich-text-string"},(0,r.kt)("inlineCode",{parentName:"a"},"@richText"))," that changes string input."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#number"},(0,r.kt)("inlineCode",{parentName:"a"},"@unit"))," that gives context to a numeric input."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#-datetime-range"},(0,r.kt)("inlineCode",{parentName:"a"},"@range"))," that modifies date selection into range selection."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#complex-tabular-view"},(0,r.kt)("inlineCode",{parentName:"a"},"@tabular"))," that changes how a complex object is displayed.")),(0,r.kt)("p",null,"But there is so much more available:"),(0,r.kt)("h3",{id:"title--subtitle"},"@title & @subtitle"),(0,r.kt)("p",null,"When you add a property, its name will be used as a label for the input - in a smart way, with space being added before each uppercase (but not a digit):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Examples of default conversion from property name to label"',title:'"Examples',of:!0,default:!0,conversion:!0,from:!0,property:!0,name:!0,to:!0,'label"':!0},"header: string; // Label: Header\nproductDescription: string; // Label: Product Description\nlistElement3: string; // Label: List Element3\n")),(0,r.kt)("p",null,"That's neat, but sometimes you might want to be more descriptive - without changing the actual property passed in the payload. This is where the ",(0,r.kt)("inlineCode",{parentName:"p"},"@title")," decorator comes in. Adding it above a property and passing a string can change the label to anything you want."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1} title="Examples of default conversion from property name to label"',"{1}":!0,title:'"Examples',of:!0,default:!0,conversion:!0,from:!0,property:!0,name:!0,to:!0,'label"':!0},"@title('Recommendations Box Header')\nheader: string; // Label: Recommendations Box Header\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can also pass a space into the ",(0,r.kt)("inlineCode",{parentName:"p"},"@title")," decorator to remove the input label altogether:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1} title="Using space to hide the label"',"{1}":!0,title:'"Using',space:!0,to:!0,hide:!0,the:!0,'label"':!0},"@title(' ')\nheader: string; // No label\n")),(0,r.kt)("p",{parentName:"admonition"},"It can be helpful in some cases, like complex objects with their own label and labels of all properties used to create them, or cases where you want to use ",(0,r.kt)("a",{parentName:"p",href:"#markdown"},(0,r.kt)("inlineCode",{parentName:"a"},"@markdown"))," decorator instead.")),(0,r.kt)("p",null,"On the other hand, adding a ",(0,r.kt)("inlineCode",{parentName:"p"},"@subtitle")," decorator above a property will show the provided text in a smaller font right below the input. It's a great tool to give more context or example data to aid the person configuring the campaign."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{2} title="Example use of @subheader decorator for added context"',"{2}":!0,title:'"Example',use:!0,of:!0,"@subheader":!0,decorator:!0,for:!0,added:!0,'context"':!0},"@title('Recommendations Box Header')\n@subtitle('Use Title Case and stay below 40 characters')\nheader: string;\n")),(0,r.kt)("h3",{id:"markdown"},"@markdown"),(0,r.kt)("p",null,"When ",(0,r.kt)("a",{parentName:"p",href:"#title--subtitle"},(0,r.kt)("inlineCode",{parentName:"a"},"@title")," and ",(0,r.kt)("inlineCode",{parentName:"a"},"@subtitle"))," are not enough for the context you want to provide, you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"@markdown")," decorator to go wild with text, styling and even links."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{1-6} title="Notice the backticks used to open and close markdown content in this decorator"',"{1-6}":!0,title:'"Notice',the:!0,backticks:!0,used:!0,to:!0,open:!0,and:!0,close:!0,markdown:!0,content:!0,in:!0,this:!0,'decorator"':!0},"@markdown(`\n---\n#### Conditional Configuration\n\n**Use only on campaigns targeted to small audiences**\n`)\n@title('Use Conditional Configuration?')\nisConditionalConfigurationUsed: boolean = false;\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"For ",(0,r.kt)("inlineCode",{parentName:"p"},"@markdown")," to work, you need to add the content without any indentation:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{2-5} title="@markdown decorator works only with unindented markdown"',"{2-5}":!0,title:'"@markdown',decorator:!0,works:!0,only:!0,with:!0,unindented:!0,'markdown"':!0}," @markdown(`\n---\n#### Conditional Configuration\n\n**Use only on campaigns targeted to small audiences**\n `)\n @title('Use Conditional Configuration?')\n isConditionalConfigurationUsed: boolean = false;\n"))),(0,r.kt)("h3",{id:"header--headersubtitle"},"@header & @headerSubtitle"),(0,r.kt)("p",null,"There is also a pair of ",(0,r.kt)("inlineCode",{parentName:"p"},"@header")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"@subheader")," decorators that are very similar to ",(0,r.kt)("a",{parentName:"p",href:"#title--subtitle"},(0,r.kt)("inlineCode",{parentName:"a"},"@title")," and ",(0,r.kt)("inlineCode",{parentName:"a"},"@subtitle"))," with one key difference - they are not attaching to a property. That's right, you can use them anywhere to add context to whole sections of your campaign configuration form."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Example use of @subheader decorator for added context"',title:'"Example',use:!0,of:!0,"@subheader":!0,decorator:!0,for:!0,added:!0,'context"':!0},"@header('Recommendations Box Header')\n@headerSubtitle('Use Title Case and stay below 40 characters')\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"@header")," will be in the same font size as the input labels, and ",(0,r.kt)("inlineCode",{parentName:"p"},"@headerSubtitle")," will match ",(0,r.kt)("a",{parentName:"p",href:"#title--subtitle"},(0,r.kt)("inlineCode",{parentName:"a"},"@subtitle"))," style. Oh, and passing a space - ",(0,r.kt)("inlineCode",{parentName:"p"},"@header(' ')")," - will add a bit of whitespace. Perfect for those of us with OCD who can't stand that uneven spacing between inputs."),(0,r.kt)("h3",{id:"hidden--shownif"},"@hidden & @shownIf"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"@hidden")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"@shownIf")," are some of the most important decorators, as they allow you to control the visibility of the inputs. Big if you want to provide a nice and clean campaign configuration UI that won't overwhelm the marketer."),(0,r.kt)("p",null,"There are two ways to use them."),(0,r.kt)("p",null,"First, with a basic ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," boolean argument, it makes sense only for ",(0,r.kt)("inlineCode",{parentName:"p"},"@hidden"),". It is perfect for data you will calculate in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-serverside-code-basics#2-run-block"},"run() block")," or don't want to show to the marketer."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Example use of simple boolean @hidden decorator"',title:'"Example',use:!0,of:!0,simple:!0,boolean:!0,"@hidden":!0,'decorator"':!0},'@hidden(true)\ntemplateVersion: string = "Version 1.1";\n')),(0,r.kt)("p",null,"It gets much more interesting with the second way to use those decorators - with a function that returns a boolean as an argument. With this, you can build conditional logic based on other inputs:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'{3}title="Example use of function-based @shownIf decorator"',"{3}title":'"Example',use:!0,of:!0,"function-based":!0,"@shownIf":!0,'decorator"':!0},"bannerType: 'Manual' | 'Promotion' | 'Einstein';\n\n@shownIf(this, (self) => self.bannerType === 'Manual')\nimageURL: string;\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Technically, in both scenarios, you can use ",(0,r.kt)("inlineCode",{parentName:"p"},"@hidden")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"@shownIf")," interchangeably after appropriately flipping the boolean. However, I find using ",(0,r.kt)("inlineCode",{parentName:"p"},"@hidden")," only with a ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," boolean argument and ",(0,r.kt)("inlineCode",{parentName:"p"},"@shownIf")," with a function argument easier to grasp when reading the code.")),(0,r.kt)("h3",{id:"buttongroup"},"@buttonGroup"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"@buttonGroup")," is a simple decorator that can change a ",(0,r.kt)("a",{parentName:"p",href:"#-select-string"},(0,r.kt)("inlineCode",{parentName:"a"},"single-select picklist"))," into a set of buttons with one line:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="Example use of @buttonGroup decorator"',title:'"Example',use:!0,of:!0,"@buttonGroup":!0,'decorator"':!0},"@buttonGroup(true)\nbannerType: 'Manual' | 'Promotion' | 'Einstein';\n")),(0,r.kt)("p",null,"It's nice if you have a small pool of options with short names."),(0,r.kt)("h3",{id:"optional"},"@optional"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"@optional")," decorator was an excellent tool for setting required and non-required inputs. Was. It no longer works. Whether you add it to the code or not, nothing will change in the UI or on saving. And I doubt it will start working, as bringing the functionality back would break all templates created with it not working in mind. To sum up, there is no way to enforce filling an input."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/937990e1.dcd84fb0.js b/assets/js/937990e1.dcd84fb0.js new file mode 100644 index 000000000..ff0d209f4 --- /dev/null +++ b/assets/js/937990e1.dcd84fb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7531],{7907:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var i=n(5893),r=n(1151),a=n(1872);const o={id:"mcp-serverside-code-properties",title:"MCP Serverside Code Properties",sidebar_label:"Serverside Code Properties",description:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",image:"img/og/og-image-mcp-serverside-code-properties.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},s=void 0,l={id:"interaction-studio/mcp-serverside-code-properties",title:"MCP Serverside Code Properties",description:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",source:"@site/docs/interaction-studio/mcp-serverside-code-properties.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-serverside-code-properties",permalink:"/docs/interaction-studio/mcp-serverside-code-properties",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-serverside-code-properties.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"TypeScript",permalink:"/docs/tags/type-script"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697927729,formattedLastUpdatedAt:"Oct 21, 2023",frontMatter:{id:"mcp-serverside-code-properties",title:"MCP Serverside Code Properties",sidebar_label:"Serverside Code Properties",description:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.",image:"img/og/og-image-mcp-serverside-code-properties.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"]},sidebar:"docs",previous:{title:"Serverside Code Basics",permalink:"/docs/interaction-studio/mcp-serverside-code-basics"},next:{title:"Serverside Code Context",permalink:"/docs/interaction-studio/mcp-serverside-code-context"}},d={},c=[{value:"Basic properties",id:"basic-properties",level:2},{value:"Boolean",id:"boolean",level:3},{value:"String",id:"string",level:3},{value:"\u203a Array String",id:"-array-string",level:4},{value:"\u203a Default String",id:"-default-string",level:4},{value:"\u203a Select String",id:"-select-string",level:4},{value:"\u203a Rich Text String",id:"-rich-text-string",level:4},{value:"Number",id:"number",level:3},{value:"\u203a Array Number",id:"-array-number",level:4},{value:"\u203a Default Number",id:"-default-number",level:4},{value:"\u203a Select Number",id:"-select-number",level:4},{value:"Color",id:"color",level:3},{value:"\u203a Default Color",id:"-default-color",level:4},{value:"Datetime",id:"datetime",level:3},{value:"\u203a Datetime Range",id:"-datetime-range",level:4},{value:"Readonly property",id:"readonly-property",level:2},{value:"Complex property",id:"complex-property",level:2},{value:"Complex default values",id:"complex-default-values",level:3},{value:"Complex picklist",id:"complex-picklist",level:3},{value:"Complex tabular view",id:"complex-tabular-view",level:3},{value:"Decorators",id:"decorators",level:2},{value:"@title & @subtitle",id:"title--subtitle",level:3},{value:"@markdown",id:"markdown",level:3},{value:"@header & @headerSubtitle",id:"header--headersubtitle",level:3},{value:"@hidden & @shownIf",id:"hidden--shownif",level:3},{value:"@buttonGroup",id:"buttongroup",level:3},{value:"@optional",id:"optional",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.m,{content:"Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place."}),"\n",(0,i.jsxs)(t.p,{children:["Once you learn the ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics",children:"very basics of Serverside Code"})," in Marketing Cloud Personalization (Interaction Studio), it is time to start writing code. The easiest way is, to begin with creating the campaign creation UI for the marketer - defining all the inputs they will need to fill in to drive the experience. It will be our focus in this article."]}),"\n",(0,i.jsxs)(t.p,{children:["MCP Serverside Code offers five basic property data types: ",(0,i.jsx)(t.a,{href:"#boolean",children:"Boolean"}),", ",(0,i.jsx)(t.a,{href:"#string",children:"String"}),", ",(0,i.jsx)(t.a,{href:"#number",children:"Number"}),", ",(0,i.jsx)(t.a,{href:"#color",children:"Color"})," and ",(0,i.jsx)(t.a,{href:"#datime",children:"DateTime"}),". Those, their combinations into ",(0,i.jsx)(t.a,{href:"#complex-property",children:"complex properties"})," and modifications through ",(0,i.jsx)(t.a,{href:"#decorators",children:"decorators"})," enable you to build nearly anything you need for your campaign configuration screen."]}),"\n",(0,i.jsx)(t.p,{children:"Let's dive into how you can make the most of those features."}),"\n",(0,i.jsx)(t.h2,{id:"basic-properties",children:"Basic properties"}),"\n",(0,i.jsxs)(t.p,{children:["Basic properties are the base building blocks of your campaign configuration. They are all you need to make a perfect campaign template, and mastering them will be essential to doing more complex UIs with ",(0,i.jsx)(t.a,{href:"#complex-property",children:"complex properties"})," and ",(0,i.jsx)(t.a,{href:"#decorators",children:"decorators"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"boolean",children:"Boolean"}),"\n",(0,i.jsxs)(t.p,{children:["The boolean property lets you capture a ",(0,i.jsx)(t.code,{children:"true"})," or ",(0,i.jsx)(t.code,{children:"false"})," flag by creating a checkbox input:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Create simple checkbox"',children:"isTextLeftToRight: boolean;\n// Input: Editable unchecked checkbox\n// Output: true or false\n"})}),"\n",(0,i.jsxs)(t.p,{children:["The boolean property is unchecked by default (returns ",(0,i.jsx)(t.code,{children:"false"}),"), but you can change it by passing a ",(0,i.jsx)(t.code,{children:"true"})," value in the code:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Checkbox checked by default"',children:"isTextLeftToRight: boolean = true;\n// Input: Editable checked checkbox\n// Output: true or false\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Boolean fields are crucial for template development as they are perfect for building logic, for example, with the ",(0,i.jsxs)(t.a,{href:"#hidden--shownif",children:[(0,i.jsx)(t.code,{children:"@shownIf"})," decorator"]}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"string",children:"String"}),"\n",(0,i.jsx)(t.p,{children:"String property lets you capture a text input:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Create empty text input field"',children:'content: string;\n// Input: Empty text input\n// Output: "Provided text"\n'})}),"\n",(0,i.jsx)(t.p,{children:"However, there is much more to string property than just that."}),"\n",(0,i.jsx)(t.h4,{id:"-array-string",children:"\u203a Array String"}),"\n",(0,i.jsx)(t.p,{children:"You may want to capture more than one string. Easy, you can do it with two characters:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Capture multiple strings"',children:'hashtags: string[];\n// Input: Empty text input with an option for converting entered text into one of the values\n// Output: ["Array", "of", "Strings"]\n'})}),"\n",(0,i.jsxs)(t.p,{children:["By adding ",(0,i.jsx)(t.code,{children:"[]"})," after the type definition, we convert the field to an array of strings. During configuration, you can provide multiple values that, in the payload, will be returned as an array. It doesn't accept duplicate values."]}),"\n",(0,i.jsx)(t.h4,{id:"-default-string",children:"\u203a Default String"}),"\n",(0,i.jsx)(t.p,{children:"To simplify the work for your marketers or to provide recommended examples of expected data, you can easily add a default value to your string by delivering it as a string after the equal sign:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Add default content"',children:"content: string = 'This is default content';\n// Input: Editable prefilled text input\n// Output: \"Provided text\"\n"})}),"\n",(0,i.jsx)(t.p,{children:"It can be freely edited during configuration but will be passed as-is to the payload if no changes are made."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"You can provide default values also for string arrays:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Default values for array string"',children:'hashtags: string[] = [\'interaction-studio\', \'marketing-cloud-personalization\'];\n// Input: Editable prefilled text input with two deletable values and space to write additional ones\n// Output: ["Array", "of", "Strings"]\n'})})]}),"\n",(0,i.jsx)(t.h4,{id:"-select-string",children:"\u203a Select String"}),"\n",(0,i.jsxs)(t.p,{children:["You can go one step further and lock the string property to only a set of preconfigured values using the ",(0,i.jsx)(t.code,{children:"@options"})," decorator. It is excellent when you need a particular value, for example, for a programmatic logic in other parts of your template."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Limit possible values with select"',children:"@options(['brandA', 'brandB', 'brandC'])\nbrand: string;\n// Input: Empty text input showing dropdown with configured options on click\n// Output: \"Selected text\"\n"})}),"\n",(0,i.jsx)(t.p,{children:"With such code, the campaign configuration will display a picklist with the hardcoded values. It will output a string to the campaign payload."}),"\n",(0,i.jsxs)(t.p,{children:["You can also provide ",(0,i.jsx)(t.a,{href:"#-default-string",children:"default value"})," for your select field:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Provide default select value"',children:"@options(['brandA', 'brandB', 'brandC'])\nbrand: string = 'brandA';\n// Input: Editable prefilled text input showing dropdown with configured options on click\n// Output: \"Selected text\"\n"})}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"You can also create a select field without the decorator using literals:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Literal select field"',children:"brand: 'brandA' | 'brandB' | 'brandC';\n// Input: Empty text input showing dropdown with configured options on click\n// Output: \"Selected text\"\n"})})]}),"\n",(0,i.jsxs)(t.p,{children:["Just as you can capture an array of text inputs, you can do the same for select strings and create a multi-picklist. However, while the preconfigured options will be visible and accessible to pick, new options - outside of what you hardcoded - ",(0,i.jsx)(t.strong,{children:"can"})," be freely added."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Multi-picklist"',children:"@options(['brandA', 'brandB', 'brandC'])\nbrands: string[];\n// Input: Empty text field with picklist and option to create new values. Allows for multiple additions.\n// Output: [\"Array\", \"of\", \"Strings\"]\n"})}),"\n",(0,i.jsxs)(t.p,{children:["You can also provide ",(0,i.jsx)(t.a,{href:"#-default-string",children:"default value"})," for your multi-select field:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Provide default multi-select values"',children:"@options(['brandA', 'brandB', 'brandC'])\nbrands: string[] = ['brandA', 'brandB'];\n// Input: Editable prefilled text field with picklist and option to create new values. Allows for multiple additions.\n// Output: [\"Array\", \"of\", \"Strings\"]\n"})}),"\n",(0,i.jsx)(t.p,{children:"It will output an array of strings to the campaign payload."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"You can also create a multi-select field without the decorator using literals:"}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Literal multi-select field"',children:"brand: ('brandA' | 'brandB' | 'brandC')[];\n// Input: Empty text field with picklist and option to create new values. Allows for multiple additions.\n// Output: [\"Array\", \"of\", \"Strings\"]\n"})})]}),"\n",(0,i.jsx)(t.h4,{id:"-rich-text-string",children:"\u203a Rich Text String"}),"\n",(0,i.jsxs)(t.p,{children:["You can easily convert this simple text input into a rich text field by using a ",(0,i.jsx)(t.code,{children:"@richText"})," decorator:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Capture styling with a single decorator"',children:"@richText(true)\ncontent: string;\n// Input: Text input that adapts to the content size and provides bold, italic, underscore and link WYSIWYG options.\n// Output: \"String with <span style='font-weight:bold;'>optional</span>HTML<br/>Includes multiline\"\n"})}),"\n",(0,i.jsx)(t.p,{children:"This decorator will change the input field to a multiline box with bold, italic, underscore and link features. The payload will return those styles in the form of HTML that can then be used directly, for example, in the Handlebars tab of Web Campaign."}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["While the rich text options are minimal, you can write some other HTML (for example, ",(0,i.jsx)(t.code,{children:"<span>"})," with style attribute) directly in the box, which will be passed to the output correctly. It will even display as a formatted text after you revisit the configuration."]})}),"\n",(0,i.jsx)(t.h3,{id:"number",children:"Number"}),"\n",(0,i.jsxs)(t.p,{children:["Number property lets you capture integer (",(0,i.jsx)(t.code,{children:"3"}),") and decimal (",(0,i.jsx)(t.code,{children:"3.14"}),") values:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Create empty numeric input"',children:"recommendationsCount: number;\n// Input: Empty text (sic!) input\n// Output: 3.14\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Keep in mind that non-numeric values might break the campaign without any error visible in the configuration screen. You can either display a warning using ",(0,i.jsxs)(t.a,{href:"#hidden--shownif",children:[(0,i.jsx)(t.code,{children:"@shownIf"})," decorator"]})," and a ",(0,i.jsx)(t.a,{href:"#string",children:"string field"})," or create sanitization logic in the run block."]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["You can use ",(0,i.jsx)(t.code,{children:"@unit"})," ",(0,i.jsx)(t.a,{href:"#decorators",children:"decorator"})," to provide a unit description next to the input. It has no impact on the outputted value but gives marketer information about the expected value:"]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{1} title="Unit decorator on number"',children:"@unit('ms')\ndelayBeforeDisplay: number;\n"})})]}),"\n",(0,i.jsx)(t.h4,{id:"-array-number",children:"\u203a Array Number"}),"\n",(0,i.jsxs)(t.p,{children:["Just as with strings, you can capture multiple numeric values by adding ",(0,i.jsx)(t.code,{children:"[]"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Capture multiple numbers"',children:"productIds: number[];\n// Input: A plus icon that adds new text inputs with delete buttons\n// Output: [3.14, 3, 5]\n"})}),"\n",(0,i.jsx)(t.p,{children:"It will output an array of numbers to the campaign payload."}),"\n",(0,i.jsx)(t.h4,{id:"-default-number",children:"\u203a Default Number"}),"\n",(0,i.jsx)(t.p,{children:"Again, just as with strings, you can provide an editable default value:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Default numeric value"',children:"recommendationsCount: number = 6;\n// Input: Editable prefilled text input\n// Output: 6\n"})}),"\n",(0,i.jsx)(t.p,{children:"The same can be done for Array Numbers:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Default numeric array value"',children:"productIds: number[] = [123, 456, 789];\n// Input: Editable and deletable prefilled text inputs and a plus icon that can add more\n// Output: [123, 456, 32]\n\n"})}),"\n",(0,i.jsx)(t.h4,{id:"-select-number",children:"\u203a Select Number"}),"\n",(0,i.jsxs)(t.p,{children:["As with ",(0,i.jsx)(t.a,{href:"#-select-string",children:"strings"}),", you can create a numeric picklist:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Numeric picklist"',children:"recommendationsCount: 1 | 3 | 6 | 9;\n// Input: Empty text input showing dropdown with configured options on click\n// Output: 1\n"})}),"\n",(0,i.jsx)(t.p,{children:"You can also pass a default value:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Numeric picklist with default value"',children:"recommendationsCount: 1 | 3 | 6 | 9 = 6;\n// Input: Editable prefilled text input showing dropdown with configured options on click\n// Output: 6\n"})}),"\n",(0,i.jsx)(t.p,{children:"You can also create a numeric multi-picklist:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Numeric multi-picklist"',children:"orderOfSections: (1 | 2 | 3 | 4 | 5)[];\n// Input: Empty text field with picklist. Allows for multiple additions.\n// Output: [1, 3, 4, 2, 5]\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Different from ",(0,i.jsx)(t.a,{href:"#-select-string",children:"strings multi-select"}),", with a numeric multi-picklist, the marketer won't be able to add new options outside of what you preconfigured. Yay!"]}),"\n",(0,i.jsx)(t.p,{children:"However, there are three caveats to keep in mind:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["You cannot have ",(0,i.jsx)(t.code,{children:"0"})," as one of the options. The picklist will crash."]}),"\n",(0,i.jsxs)(t.li,{children:["You cannot use ",(0,i.jsx)(t.code,{children:"@options"})," to create the picklist. It will be ignored."]}),"\n",(0,i.jsx)(t.li,{children:"The single-select picklist will always cut the visibility of the last digit in the longest option after selecting it."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"color",children:"Color"}),"\n",(0,i.jsx)(t.p,{children:"Color property lets you create a color picker with a single line of code:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Create color picker"',children:'backgroundColor: Color;\n// Input: An input pseudo-prefilled with #FFFFFF and a color box that, on click, opens the color selection interface\n// Output: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n//}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["You will be able to select the color by dragging the selector over a colour palette or by providing hex/rgba/hsl values. The property will output to payload a ",(0,i.jsx)(t.code,{children:"color"})," object with both hex and rgba values."]}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsx)(t.p,{children:"While the property will look like it is prefilled with white color, it will output 'null' until you pick a color in the interface. If you want the white to be a working default option, you must configure it explicitly."})}),"\n",(0,i.jsx)(t.h4,{id:"-default-color",children:"\u203a Default Color"}),"\n",(0,i.jsx)(t.p,{children:"You can provide a default color, but it will be more complex. You cannot just give a single hex value; you need to replicate the whole output object:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title"Default color value"',children:'backgroundColor: Color = {\n "hex": "#da4e55",\n "r": 218,\n "g": 78,\n "b": 85,\n "a": 1\n};\n// Input: An input truly prefilled with #FFFFFF and a color box that, on click, opens the color selection interface\n// Output: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n//}\n'})}),"\n",(0,i.jsx)(t.h3,{id:"datetime",children:"Datetime"}),"\n",(0,i.jsx)(t.p,{children:"Datetime property provides a clean-looking calendar widget that lets the marketer easily pick up a date."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Create datetime picker"',children:'promotionDate: DateTime;\n// Input: Empty input with calendar icon that, on click, opens full calendar for date selection\n// Output: {\n// "dateTime": [\n// "2023-10-01T16:00:00.000Z"\n// ]\n//}\n'})}),"\n",(0,i.jsx)(t.p,{children:"There are two payload-related things to consider:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["The DateTime property always outputs an object with a single ",(0,i.jsx)(t.code,{children:"dateTime"})," property assigned to an array of strings."]}),"\n",(0,i.jsxs)(t.li,{children:["The date-times are returned as ISO 8601 strings (",(0,i.jsx)(t.code,{children:"2023-10-01T16:00:00.000Z"}),")."]}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"-datetime-range",children:"\u203a Datetime Range"}),"\n",(0,i.jsxs)(t.p,{children:["While you cannot create a multi-select datetime field, you can use the ",(0,i.jsx)(t.code,{children:"@range"})," decorator to select two dates within a nice UI."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Create range datetime picker"',children:'@range(true)\npromotionDate: DateTime;\n// Input: Empty input with calendar icon that on click opens full calendar for two dates selection with range indicator\n// Output: {\n// "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ]\n//}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["The output will return both selected dates in the ",(0,i.jsx)(t.code,{children:"dateTime"})," array of strings."]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"readonly-property",children:"Readonly property"}),"\n",(0,i.jsxs)(t.p,{children:["Apart from ",(0,i.jsx)(t.a,{href:"#string",children:"basic string property"})," there is also a very similar readonly string property:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Static readonly property"',children:"readonly templateVersion = \"Version 1.1\"\n// Input: No input, just a readonly text written in the form\n// Output: 'Version 1.1'\n"})}),"\n",(0,i.jsxs)(t.p,{children:["As you can see, the key difference is the ",(0,i.jsx)(t.code,{children:"readonly"})," prefix before defining the property. It also uses the ",(0,i.jsx)(t.a,{href:"#-default-string",children:"default string"})," approach to assign the value."]}),"\n",(0,i.jsx)(t.p,{children:"However, readonly property has one superpower. You can assign an arrow function to it (as long as it will return a string) and use values from other properties to transform them:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{2,5-13} title="Dynamic readonly property"',children:"header: string = 'DEFault heaDER';\nreadonly upperCaseHeader = () => this?.header.toUpperCase || '';\n// Input: No input, just a readonly text updating real-time based on header input\n// Output: 'DEFAULT HEADER'\nreadonly titleCaseHeader = () => {\n return this?.header\n .toLowerCase()\n .split(' ')\n .filter(word => word !== '')\n .map(word => word.replace(word[0], word[0].toUpperCase()))\n .join(' ')\n || '';\n}\n// Input: No input, just a readonly text updating real-time based on header input\n// Output: 'Default Header'\n"})}),"\n",(0,i.jsx)(t.p,{children:"With the dynamic readonly property, you can transform string inputs, concatenate multiple inputs into one field or even create a logic based on non-string inputs (as long as the output is a string)."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["You can do the same things later in the ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics#2-run-block",children:"run() block"}),". It will be even more powerful there, as you can use the context object. However, you must manually add those calculated values to the ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics#3-return-statement",children:"return statement"})," to see it in the payload."]}),(0,i.jsx)(t.p,{children:"For simple use cases, the readonly property will be more straightforward and provide a nifty real-time preview of the calculated value for the marketer."})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"complex-property",children:"Complex property"}),"\n",(0,i.jsxs)(t.p,{children:["The input configuration fun starts when you combine ",(0,i.jsx)(t.a,{href:"#basic-properties",children:"basic properties"})," into complex ones. The method is straightforward. Outside the main class that implements CampaignTemplateComponent, create a new class export that contains all the basic inputs you need:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Define complex property"',children:"export class TimeframedColorPicker {\n @range(true)\n timeframe: DateTime;\n\n color: Color;\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"With complex property defined, you can leverage it in the main class the same way as you do with basic properties:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Use complex property"',children:'timeframedColor: TimeframedColorPicker;\n// Input: Set of basic properties - datetime range and color pickers, in this case\n// Output: {\n// timeframedColor: {\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n// }\n//}\n'})}),"\n",(0,i.jsx)(t.p,{children:"What are the benefits of this approach?"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"You can define your complex property class once and then use it multiple times in your form."}),"\n",(0,i.jsx)(t.li,{children:"You can control the structure of the Serverside payload."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"A complex property creates a new nested object assigned to an input property. Let's look at the difference:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Payload using basic properties"',children:'@range(true)\ntimeframe: DateTime;\n\ncolor: Color;\n// Input: Two basic properties - datetime range and color pickers, in this case\n// Output: {\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n//}\n'})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{4,16} title="Payload using complex property"',children:'timeframedColor: TimeframedColorPicker;\n// Input: Set of basic properties - datetime range and color pickers in this case\n// Output: {\n// timeframedColor: {\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n// }\n//}\n'})}),"\n",(0,i.jsx)(t.p,{children:"As you can see, data from basic inputs is assigned as properties to the complex property. This can help with payload readability and might be crucial when adapting your payload to specific requirements (for example, schema expected by a React website or 3rd party system)."}),"\n",(0,i.jsxs)(t.ol,{start:"3",children:["\n",(0,i.jsx)(t.li,{children:"You can nest complex properties"}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Just as you can add a complex property to a field, you can also create a complex property using complex properties. While it can again give you all the benefits mentioned here, be careful not to go overboard. Deep nesting is more challenging to understand and use. There is no perfect rule, but check out ",(0,i.jsx)(t.a,{href:"../../zen-of-sfmc/#simple-is-better-than-complex",children:"Simple/Complex recommendations in Zen of SFMC"}),"."]}),"\n",(0,i.jsxs)(t.ol,{start:"4",children:["\n",(0,i.jsx)(t.li,{children:"You can leverage it to build an Array of complex properties!"}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["This is the real game changer - out of the basic properties, only ",(0,i.jsx)(t.a,{href:"#-array-string",children:"Strings"})," and ",(0,i.jsx)(t.a,{href:"#-array-string",children:"Numbers"})," can be used as arrays. But using a complex one, you can also leverage Boolean, Color and Datetime. The approach is the same as previously - just add ",(0,i.jsx)(t.code,{children:"[]"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{4,16} title="Array of complex properties"',children:'timeframedColor: TimeframedColorPicker[];\n// Input: A plus icon that adds new sets of basic properties with delete buttons\n// Output: {\n// timeframedColor: [{\n// timeframe: "dateTime": [\n// "2023-10-01T16:00:00.000Z",\n// "2023-10-03T16:00:00.000Z"\n// ],\n// color: {\n// "hex": "#da4e55",\n// "r": 218,\n// "g": 78,\n// "b": 85,\n// "a": 1\n// }\n// }]\n//}\n'})}),"\n",(0,i.jsx)(t.p,{children:"It allows you to capture multiple complex configurations (for example, multiple recommendations or - as in the example above - various colors that can change in the campaign based on the current date)."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["There is a ",(0,i.jsx)(t.a,{href:"https://issues.salesforce.com/issue/a028c00000p5gvMAAQ/personalization-incorrect-behaviour-of-array-of-complex-objects-in-templates",children:"bug with the removal UI"})," for arrays of complex properties."]}),(0,i.jsx)(t.p,{children:"Let's say you have multiple properties configured in an array and want to remove one. If you click the removal button, regardless of which element you did it, the UI will remove the bottom one. However, the correct one was removed in the backend, which you can check in the Payload Preview. Save, reenter the configuration screen or refresh, and you will see the correct configuration."})]}),"\n",(0,i.jsx)(t.h3,{id:"complex-default-values",children:"Complex default values"}),"\n",(0,i.jsx)(t.p,{children:"With complex properties, you can provide default values in two ways:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"You can provide default values within the defining class directly on basic properties."}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Define complex property with default values"',children:"export class RecommendationsConfig {\n recommendationsHeader: string = 'Chosen for You';\n recommendationsDisplayed: number = 6;\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"This approach will work for complex property arrays but not single complex properties."}),"\n",(0,i.jsxs)(t.ol,{start:"2",children:["\n",(0,i.jsx)(t.li,{children:"You can provide a default value in the main class implementing the CampaignTemplateComponent."}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Use complex property with default value"',children:'recsConfig: RecommendationsConfig = {\n "recommendationsHeader": "Chosen for You",\n "recommendationsDisplayed": 6\n};\n'})}),"\n",(0,i.jsx)(t.p,{children:"This approach will work for single complex property and - if you provide the default value(s) in the array - also for arrays for complex properties."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Use an array of complex properties with default values"',children:'recsConfig: RecommendationsConfig = [{\n "recommendationsHeader": "Chosen for You",\n "recommendationsDisplayed": 6\n}, {\n "recommendationsHeader": "Bestsellers",\n "recommendationsDisplayed": 3\n}];\n'})}),"\n",(0,i.jsx)(t.p,{children:"As you can see, both approaches work for arrays of complex properties but result in a different outcome. The first approach provides default values to all elements of a complex property array you will create. The second approach prefills the array with the provided default elements. You can use both simultaneously to have a few array elements prefilled and provide default values for all new elements created on top of it."}),"\n",(0,i.jsx)(t.h3,{id:"complex-picklist",children:"Complex picklist"}),"\n",(0,i.jsxs)(t.p,{children:["Similar to how you can create a selection for ",(0,i.jsx)(t.a,{href:"#-select-string",children:"strings"})," and ",(0,i.jsx)(t.a,{href:"#-select-numbers",children:"numbers"}),", you can also build picklists for complex properties. And I don't mean using the selects within the complex property (which is also possible), but simplifying your complex property to a single straightforward picklist."]}),"\n",(0,i.jsx)(t.p,{children:"Using the previous complex property example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{4-5} title="Complex property with a hidden label property"',children:"export class RecommendationsConfig {\n recommendationsHeader: string;\n recommendationsDisplayed: number;\n @hidden(true)\n label: string;\n}\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Instead of requiring the user to fill in those values and giving them a free hand at that, you can instead provide preconfigured options with user-friendly labels using the ",(0,i.jsx)(t.code,{children:"@options"})," decorator:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{1-6} title="Change complex property to a single picklist with @options decorator"',children:'@options([\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },\n { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },\n])\nrecsConfig: RecommendationsConfig;\n// Input: Single picklist showing only the label values\n// Output: {\n// "recommendationsHeader": "Bestsellers",\n// "recommendationsDisplayed": 12\n// "label": "Bestsellers Home Page"\n//}\n'})}),"\n",(0,i.jsx)(t.p,{children:"The campaign UI will display only a single picklist using the label values. At the same time, you can provide dozens of appropriately configured properties to the campaign payload in the backend."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["You can leverage complex picklist and ",(0,i.jsx)(t.a,{href:"#complex-default-values",children:"default values"})," at the same time. Just pass one of the ",(0,i.jsx)(t.code,{children:"@options"})," decorator objects."]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Complex property picklist with default value"',children:'@options([\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },\n { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },\n { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },\n])\nrecsConfig: RecommendationsConfig = {\n recommendationsHeader: "Chosen For You",\n recommendationsDisplayed: 6,\n label: "Chosen for You Global"\n};\n'})})]}),"\n",(0,i.jsx)(t.h3,{id:"complex-tabular-view",children:"Complex tabular view"}),"\n",(0,i.jsxs)(t.p,{children:["Complex properties can take up a lot of space in your campaign configuration screen. Sometimes, you can save some space using the ",(0,i.jsx)(t.code,{children:"@tabular"})," decorator."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Example complex property with two numeric inputs"',children:"export class PriceRange {\n @title('Price starts at')\n lowerPriceBoundary: number;\n @title('Price ends at')\n upperPriceBoundary: number;\n}\n"})}),"\n",(0,i.jsxs)(t.p,{children:["The complex property above will take 5 lines in the campaign configuration pane - complex property title and two input label + title sets. We can change it to 3 lines with the ",(0,i.jsx)(t.code,{children:"@tabular"})," decorator:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{1} title="Tabular decorator on a single complex property"',children:'@tabular()\npriceRange: PriceRange;\n// Input: Two inputs are provided side by side instead of one below the other\n// Output: {\n// "lowerPriceBoundary": 10,\n// "upperPriceBoundary": 20\n//}\n'})}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["You can also use that decorator for arrays of complex properties, but you will see that the input labels are now visible only on the first element of the array for an even more compact view. If it doesn't suit your needs, you can pass an argument to the decorator to change that behaviour: ",(0,i.jsx)(t.code,{children:"@tabular({headersPerRow: true})"}),"."]})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"decorators",children:"Decorators"}),"\n",(0,i.jsx)(t.p,{children:"Decorators are a TypeScript feature that can change or extend the behaviour of properties in the MC Personalization's Serverside Code. You have already seen some of them:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"#-select-string",children:(0,i.jsx)(t.code,{children:"@options"})})," used to provide picklist values for ",(0,i.jsx)(t.a,{href:"#-select-string",children:"strings"}),", ",(0,i.jsx)(t.a,{href:"#-select-number",children:"numbers"})," and ",(0,i.jsx)(t.a,{href:"#complex-picklist",children:"complex properties"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"#-rich-text-string",children:(0,i.jsx)(t.code,{children:"@richText"})})," that changes string input."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"#number",children:(0,i.jsx)(t.code,{children:"@unit"})})," that gives context to a numeric input."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"#-datetime-range",children:(0,i.jsx)(t.code,{children:"@range"})})," that modifies date selection into range selection."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"#complex-tabular-view",children:(0,i.jsx)(t.code,{children:"@tabular"})})," that changes how a complex object is displayed."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"But there is so much more available:"}),"\n",(0,i.jsx)(t.h3,{id:"title--subtitle",children:"@title & @subtitle"}),"\n",(0,i.jsx)(t.p,{children:"When you add a property, its name will be used as a label for the input - in a smart way, with space being added before each uppercase (but not a digit):"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Examples of default conversion from property name to label"',children:"header: string; // Label: Header\nproductDescription: string; // Label: Product Description\nlistElement3: string; // Label: List Element3\n"})}),"\n",(0,i.jsxs)(t.p,{children:["That's neat, but sometimes you might want to be more descriptive - without changing the actual property passed in the payload. This is where the ",(0,i.jsx)(t.code,{children:"@title"})," decorator comes in. Adding it above a property and passing a string can change the label to anything you want."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{1} title="Examples of default conversion from property name to label"',children:"@title('Recommendations Box Header')\nheader: string; // Label: Recommendations Box Header\n"})}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["You can also pass a space into the ",(0,i.jsx)(t.code,{children:"@title"})," decorator to remove the input label altogether:"]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{1} title="Using space to hide the label"',children:"@title(' ')\nheader: string; // No label\n"})}),(0,i.jsxs)(t.p,{children:["It can be helpful in some cases, like complex objects with their own label and labels of all properties used to create them, or cases where you want to use ",(0,i.jsx)(t.a,{href:"#markdown",children:(0,i.jsx)(t.code,{children:"@markdown"})})," decorator instead."]})]}),"\n",(0,i.jsxs)(t.p,{children:["On the other hand, adding a ",(0,i.jsx)(t.code,{children:"@subtitle"})," decorator above a property will show the provided text in a smaller font right below the input. It's a great tool to give more context or example data to aid the person configuring the campaign."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{2} title="Example use of @subheader decorator for added context"',children:"@title('Recommendations Box Header')\n@subtitle('Use Title Case and stay below 40 characters')\nheader: string;\n"})}),"\n",(0,i.jsx)(t.h3,{id:"markdown",children:"@markdown"}),"\n",(0,i.jsxs)(t.p,{children:["When ",(0,i.jsxs)(t.a,{href:"#title--subtitle",children:[(0,i.jsx)(t.code,{children:"@title"})," and ",(0,i.jsx)(t.code,{children:"@subtitle"})]})," are not enough for the context you want to provide, you can use the ",(0,i.jsx)(t.code,{children:"@markdown"})," decorator to go wild with text, styling and even links."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{1-6} title="Notice the backticks used to open and close markdown content in this decorator"',children:"@markdown(`\n---\n#### Conditional Configuration\n\n**Use only on campaigns targeted to small audiences**\n`)\n@title('Use Conditional Configuration?')\nisConditionalConfigurationUsed: boolean = false;\n"})}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(t.p,{children:["For ",(0,i.jsx)(t.code,{children:"@markdown"})," to work, you need to add the content without any indentation:"]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{2-5} title="@markdown decorator works only with unindented markdown"',children:" @markdown(`\n---\n#### Conditional Configuration\n\n**Use only on campaigns targeted to small audiences**\n `)\n @title('Use Conditional Configuration?')\n isConditionalConfigurationUsed: boolean = false;\n"})})]}),"\n",(0,i.jsx)(t.h3,{id:"header--headersubtitle",children:"@header & @headerSubtitle"}),"\n",(0,i.jsxs)(t.p,{children:["There is also a pair of ",(0,i.jsx)(t.code,{children:"@header"})," and ",(0,i.jsx)(t.code,{children:"@subheader"})," decorators that are very similar to ",(0,i.jsxs)(t.a,{href:"#title--subtitle",children:[(0,i.jsx)(t.code,{children:"@title"})," and ",(0,i.jsx)(t.code,{children:"@subtitle"})]})," with one key difference - they are not attaching to a property. That's right, you can use them anywhere to add context to whole sections of your campaign configuration form."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Example use of @subheader decorator for added context"',children:"@header('Recommendations Box Header')\n@headerSubtitle('Use Title Case and stay below 40 characters')\n"})}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"@header"})," will be in the same font size as the input labels, and ",(0,i.jsx)(t.code,{children:"@headerSubtitle"})," will match ",(0,i.jsx)(t.a,{href:"#title--subtitle",children:(0,i.jsx)(t.code,{children:"@subtitle"})})," style. Oh, and passing a space - ",(0,i.jsx)(t.code,{children:"@header(' ')"})," - will add a bit of whitespace. Perfect for those of us with OCD who can't stand that uneven spacing between inputs."]}),"\n",(0,i.jsx)(t.h3,{id:"hidden--shownif",children:"@hidden & @shownIf"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"@hidden"})," & ",(0,i.jsx)(t.code,{children:"@shownIf"})," are some of the most important decorators, as they allow you to control the visibility of the inputs. Big if you want to provide a nice and clean campaign configuration UI that won't overwhelm the marketer."]}),"\n",(0,i.jsx)(t.p,{children:"There are two ways to use them."}),"\n",(0,i.jsxs)(t.p,{children:["First, with a basic ",(0,i.jsx)(t.code,{children:"true"})," boolean argument, it makes sense only for ",(0,i.jsx)(t.code,{children:"@hidden"}),". It is perfect for data you will calculate in the ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics#2-run-block",children:"run() block"})," or don't want to show to the marketer."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Example use of simple boolean @hidden decorator"',children:'@hidden(true)\ntemplateVersion: string = "Version 1.1";\n'})}),"\n",(0,i.jsx)(t.p,{children:"It gets much more interesting with the second way to use those decorators - with a function that returns a boolean as an argument. With this, you can build conditional logic based on other inputs:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'{3}title="Example use of function-based @shownIf decorator"',children:"bannerType: 'Manual' | 'Promotion' | 'Einstein';\n\n@shownIf(this, (self) => self.bannerType === 'Manual')\nimageURL: string;\n"})}),"\n",(0,i.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,i.jsxs)(t.p,{children:["Technically, in both scenarios, you can use ",(0,i.jsx)(t.code,{children:"@hidden"})," and ",(0,i.jsx)(t.code,{children:"@shownIf"})," interchangeably after appropriately flipping the boolean. However, I find using ",(0,i.jsx)(t.code,{children:"@hidden"})," only with a ",(0,i.jsx)(t.code,{children:"true"})," boolean argument and ",(0,i.jsx)(t.code,{children:"@shownIf"})," with a function argument easier to grasp when reading the code."]})}),"\n",(0,i.jsx)(t.h3,{id:"buttongroup",children:"@buttonGroup"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"@buttonGroup"})," is a simple decorator that can change a ",(0,i.jsx)(t.a,{href:"#-select-string",children:(0,i.jsx)(t.code,{children:"single-select picklist"})})," into a set of buttons with one line:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",metastring:'title="Example use of @buttonGroup decorator"',children:"@buttonGroup(true)\nbannerType: 'Manual' | 'Promotion' | 'Einstein';\n"})}),"\n",(0,i.jsx)(t.p,{children:"It's nice if you have a small pool of options with short names."}),"\n",(0,i.jsx)(t.h3,{id:"optional",children:"@optional"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"@optional"})," decorator was an excellent tool for setting required and non-required inputs. Was. It no longer works. Whether you add it to the code or not, nothing will change in the UI or on saving. And I doubt it will start working, as bringing the functionality back would break all templates created with it not working in mind. To sum up, there is no way to enforce filling an input."]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>a});n(7294);const i="leadText_qzwo";var r=n(5893);const a=e=>{let{content:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var i=n(7294);const r={},a=i.createContext(r);function o(e){const t=i.useContext(a);return i.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(r):e.components||r:o(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/943.bd507ab2.js b/assets/js/943.bd507ab2.js new file mode 100644 index 000000000..d0793b309 --- /dev/null +++ b/assets/js/943.bd507ab2.js @@ -0,0 +1,10323 @@ +"use strict"; +exports.id = 943; +exports.ids = [943]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// 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 */.Z(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 */.Z( + map/* default */.Z(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 */.Z(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 */.Z(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 */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(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 */.Z(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 */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(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 */.Z(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 */.Z('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 */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(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__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(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__(69203); +;// 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 */.Z, _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__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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 */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(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__(49360); +;// 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 */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// 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 */.Z.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 */.Z(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 */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(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 */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(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 */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(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 */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(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 */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(children, dfs); + } + + if (has/* default */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(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 */.Z(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 */.Z(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 */.Z)(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 */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(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 */.Z(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 */.k({ 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 */.Z(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 */.Z(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 */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(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__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(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 */.Z)(array, (0,_baseIteratee/* default */.Z)(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__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(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 */.Z(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__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)('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 */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(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 */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(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 */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(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 */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(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__(52544); +;// 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 */.Z(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 */.Z(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 */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(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 */.Z(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 */.Z(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__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + 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 */.Z(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__(48451); +;// 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 */.Z)(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 */.Z(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 */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(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 */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(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 */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// 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 */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// 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__(21162); +;// 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 */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(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 */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(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__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// 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 */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(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 */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(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 */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @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 */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + 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 */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(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 */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(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 */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([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 */.Z(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 */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(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 */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(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 */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(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 */.Z(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 */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* 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 */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(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 */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(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 */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(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 */.Z(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 */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(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 */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(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 */.Z(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 */.Z(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 */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(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 */.Z(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 */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(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 */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(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 */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(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 */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(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 */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(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 */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(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 */.Z(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 */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// 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 */.Z)(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__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// 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__(6545); +;// 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 */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(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 */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + 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__(836); +;// 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 */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// 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 */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(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 */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(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 */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(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 */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(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 */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(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 */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(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 */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(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 */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(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 */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(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 */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(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 */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(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 */.Z(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 */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(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 */.Z(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); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// 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 */.Z; + 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); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// 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 */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// 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 */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// 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 */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(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 */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// 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 */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// 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__(41884); +;// 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 */.Z)(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__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.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__(12701); +;// 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 */.Z)(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 */.Z)(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__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.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 */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// 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 */.Z)(value) && (0,_getTag/* default */.Z)(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 */.Z && _nodeUtil/* default */.Z.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 */.Z)(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 */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(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 */.Z); + 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 */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// 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 */.Z)(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 */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.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 */.Z)(value) || (0,isArguments/* default */.Z)(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 */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * 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"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * 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"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * 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"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// 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__(59548); +;// 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 */.Z : 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 */.Z)(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__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// 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__(6545); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z(object), new _Uint8Array/* default */.Z(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 */.Z)(+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 */.Z); + + 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__(1808); +;// 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 */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(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__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// 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 */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(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 */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(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 */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + 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__(18533); +;// 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 */.Z)(value) && !(0,isObjectLike/* default */.Z)(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 */.Z; + 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__(77226); +;// 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 */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(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__(13317); +;// 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 */.Z)(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__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(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__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// 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 */.Z)(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 */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(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 */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * 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"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * 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"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// 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 */.Z)(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__(50751); +;// 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 */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * 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"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** 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"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * 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"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(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"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** 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"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** 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"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** 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"] */ .Z)(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"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// 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 */.Z)(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__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// 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 */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * 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"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(16174); +;// 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 */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `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"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * 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"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * 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"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// 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 */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(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 */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(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 */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(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__(75487); +;// 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 */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// 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 */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), 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); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// 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 */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(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); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// 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__(27771); +;// 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 */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__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); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* 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__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(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); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// 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 */.Z ? _Symbol/* default */.Z.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 */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(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); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** 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"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// 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 */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// 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 */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 5943: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-04fb0060.js + 8 modules +var mermaid_04fb0060 = __webpack_require__(76365); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 64 modules +var dagre = __webpack_require__(41644); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = ((/* unused pure expression or super */ null && (stringify))); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[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); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate_validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate_validate); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return unsafeStringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// EXTERNAL MODULE: external "crypto" +var external_crypto_ = __webpack_require__(6113); +var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(22424); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/erDiagram-4c71174c.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 = [6, 8, 10, 20, 22, 24, 26, 27, 28], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 14], $V6 = [1, 15], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 25], $Vc = [6, 8, 10, 13, 15, 18, 19, 20, 22, 24, 26, 27, 28, 41, 42, 43, 44, 45], $Vd = [1, 34], $Ve = [27, 28, 46, 47], $Vf = [41, 42, 43, 44, 45], $Vg = [17, 34], $Vh = [1, 54], $Vi = [1, 53], $Vj = [17, 34, 36, 38]; + var parser2 = { + trace: function trace() { + }, + 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 anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + break; + 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.addEntity($$[$0 - 4]); + yy.addEntity($$[$0 - 2]); + yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]); + break; + case 9: + yy.addEntity($$[$0 - 3]); + yy.addAttributes($$[$0 - 3], $$[$0 - 1]); + break; + case 10: + yy.addEntity($$[$0 - 2]); + break; + case 11: + yy.addEntity($$[$0]); + break; + case 12: + yy.addEntity($$[$0 - 6], $$[$0 - 4]); + yy.addAttributes($$[$0 - 6], $$[$0 - 1]); + break; + case 13: + yy.addEntity($$[$0 - 5], $$[$0 - 3]); + break; + case 14: + yy.addEntity($$[$0 - 3], $$[$0 - 1]); + break; + case 15: + case 16: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 17: + case 18: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 19: + case 43: + this.$ = $$[$0]; + break; + case 20: + case 41: + case 42: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 21: + case 29: + this.$ = [$$[$0]]; + break; + case 22: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 23: + this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] }; + break; + case 24: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] }; + break; + case 25: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 26: + this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 27: + case 28: + case 31: + this.$ = $$[$0]; + break; + case 30: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 32: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 33: + this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; + break; + case 34: + this.$ = yy.Cardinality.ZERO_OR_ONE; + break; + case 35: + this.$ = yy.Cardinality.ZERO_OR_MORE; + break; + case 36: + this.$ = yy.Cardinality.ONE_OR_MORE; + break; + case 37: + this.$ = yy.Cardinality.ONLY_ONE; + break; + case 38: + this.$ = yy.Cardinality.MD_PARENT; + break; + case 39: + this.$ = yy.Identification.NON_IDENTIFYING; + break; + case 40: + this.$ = yy.Identification.IDENTIFYING; + 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: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 16, 11: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 11], { 12: 17, 39: 20, 15: [1, 18], 18: [1, 19], 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }), { 21: [1, 26] }, { 23: [1, 27] }, { 25: [1, 28] }, o($V0, [2, 18]), o($Vc, [2, 19]), o($Vc, [2, 20]), o($V0, [2, 4]), { 11: 29, 27: $V5, 28: $V6 }, { 16: 30, 17: [1, 31], 29: 32, 30: 33, 34: $Vd }, { 11: 35, 27: $V5, 28: $V6 }, { 40: 36, 46: [1, 37], 47: [1, 38] }, o($Ve, [2, 34]), o($Ve, [2, 35]), o($Ve, [2, 36]), o($Ve, [2, 37]), o($Ve, [2, 38]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 17]), { 13: [1, 39] }, { 17: [1, 40] }, o($V0, [2, 10]), { 16: 41, 17: [2, 21], 29: 32, 30: 33, 34: $Vd }, { 31: 42, 34: [1, 43] }, { 34: [2, 27] }, { 19: [1, 44] }, { 39: 45, 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }, o($Vf, [2, 39]), o($Vf, [2, 40]), { 14: 46, 27: [1, 49], 28: [1, 48], 48: [1, 47] }, o($V0, [2, 9]), { 17: [2, 22] }, o($Vg, [2, 23], { 32: 50, 33: 51, 35: 52, 37: $Vh, 38: $Vi }), o([17, 34, 37, 38], [2, 28]), o($V0, [2, 14], { 15: [1, 55] }), o([27, 28], [2, 33]), o($V0, [2, 8]), o($V0, [2, 41]), o($V0, [2, 42]), o($V0, [2, 43]), o($Vg, [2, 24], { 33: 56, 36: [1, 57], 38: $Vi }), o($Vg, [2, 25]), o($Vj, [2, 29]), o($Vg, [2, 32]), o($Vj, [2, 31]), { 16: 58, 17: [1, 59], 29: 32, 30: 33, 34: $Vd }, o($Vg, [2, 26]), { 35: 60, 37: $Vh }, { 17: [1, 61] }, o($V0, [2, 13]), o($Vj, [2, 30]), o($V0, [2, 12])], + defaultActions: { 34: [2, 27], 41: [2, 22] }, + 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: + this.begin("acc_title"); + return 22; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 24; + 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: + return 10; + case 8: + break; + case 9: + return 8; + case 10: + return 28; + case 11: + return 48; + case 12: + return 4; + case 13: + this.begin("block"); + return 15; + case 14: + return 36; + case 15: + break; + case 16: + return 37; + case 17: + return 34; + case 18: + return 34; + case 19: + return 38; + case 20: + break; + case 21: + this.popState(); + return 17; + case 22: + return yy_.yytext[0]; + case 23: + return 18; + case 24: + return 19; + case 25: + return 41; + case 26: + return 43; + case 27: + return 43; + case 28: + return 43; + case 29: + return 41; + case 30: + return 41; + case 31: + return 42; + case 32: + return 42; + case 33: + return 42; + case 34: + return 42; + case 35: + return 42; + case 36: + return 43; + case 37: + return 42; + case 38: + return 43; + case 39: + return 44; + case 40: + return 44; + case 41: + return 44; + case 42: + return 44; + case 43: + return 41; + case 44: + return 42; + case 45: + return 43; + case 46: + return 45; + case 47: + return 46; + case 48: + return 47; + case 49: + return 47; + case 50: + return 46; + case 51: + return 46; + case 52: + return 46; + case 53: + return 27; + case 54: + return yy_.yytext[0]; + 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": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "block": { "rules": [14, 15, 16, 17, 18, 19, 20, 21, 22], "inclusive": false }, "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": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const erParser = parser; +let entities = {}; +let relationships = []; +const 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" +}; +const Identification = { + NON_IDENTIFYING: "NON_IDENTIFYING", + IDENTIFYING: "IDENTIFYING" +}; +const addEntity = function(name, alias = void 0) { + if (entities[name] === void 0) { + entities[name] = { attributes: [], alias }; + mermaid_04fb0060.l.info("Added new entity :", name); + } else if (entities[name] && !entities[name].alias && alias) { + entities[name].alias = alias; + mermaid_04fb0060.l.info(`Add alias '${alias}' to entity '${name}'`); + } + return entities[name]; +}; +const getEntities = () => entities; +const addAttributes = function(entityName, attribs) { + let entity = addEntity(entityName); + let i; + for (i = attribs.length - 1; i >= 0; i--) { + entity.attributes.push(attribs[i]); + mermaid_04fb0060.l.debug("Added attribute ", attribs[i].attributeName); + } +}; +const addRelationship = function(entA, rolA, entB, rSpec) { + let rel = { + entityA: entA, + roleA: rolA, + entityB: entB, + relSpec: rSpec + }; + relationships.push(rel); + mermaid_04fb0060.l.debug("Added new relationship :", rel); +}; +const getRelationships = () => relationships; +const clear = function() { + entities = {}; + relationships = []; + (0,mermaid_04fb0060.t)(); +}; +const erDb = { + Cardinality, + Identification, + getConfig: () => (0,mermaid_04fb0060.c)().er, + addEntity, + addAttributes, + getEntities, + addRelationship, + getRelationships, + clear, + setAccTitle: mermaid_04fb0060.s, + getAccTitle: mermaid_04fb0060.g, + setAccDescription: mermaid_04fb0060.b, + getAccDescription: mermaid_04fb0060.a, + setDiagramTitle: mermaid_04fb0060.q, + getDiagramTitle: mermaid_04fb0060.r +}; +const ERMarkers = { + 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" +}; +const insertMarkers = function(elem, conf2) { + let marker; + elem.append("defs").append("marker").attr("id", ERMarkers.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"); + elem.append("defs").append("marker").attr("id", ERMarkers.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"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,0 L21,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18"); + return; +}; +const erMarkers = { + ERMarkers, + insertMarkers +}; +const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; +let conf = {}; +let entityNameIds = /* @__PURE__ */ new Map(); +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const drawAttributes = (groupNode, entityTextNode, attributes) => { + const heightPadding = conf.entityPadding / 3; + const widthPadding = conf.entityPadding / 3; + const attrFontSize = conf.fontSize * 0.85; + const labelBBox = entityTextNode.node().getBBox(); + const attributeNodes = []; + let hasKeyType = false; + let hasComment = false; + let maxTypeWidth = 0; + let maxNameWidth = 0; + let maxKeyWidth = 0; + let maxCommentWidth = 0; + let cumulativeHeight = labelBBox.height + heightPadding * 2; + let attrNum = 1; + attributes.forEach((item) => { + if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) { + hasKeyType = true; + } + if (item.attributeComment !== void 0) { + hasComment = true; + } + }); + attributes.forEach((item) => { + const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; + let nodeHeight = 0; + const attributeType = (0,mermaid_04fb0060.v)(item.attributeType); + const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_04fb0060.c)().fontFamily).style("font-size", attrFontSize + "px").text(attributeType); + const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_04fb0060.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName); + const attributeNode = {}; + attributeNode.tn = typeNode; + attributeNode.nn = nameNode; + const typeBBox = typeNode.node().getBBox(); + const nameBBox = nameNode.node().getBBox(); + maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); + maxNameWidth = Math.max(maxNameWidth, nameBBox.width); + nodeHeight = Math.max(typeBBox.height, nameBBox.height); + if (hasKeyType) { + const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : ""; + const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_04fb0060.c)().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText); + attributeNode.kn = keyTypeNode; + const keyTypeBBox = keyTypeNode.node().getBBox(); + maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); + nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); + } + if (hasComment) { + const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_04fb0060.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || ""); + attributeNode.cn = commentNode; + const commentNodeBBox = commentNode.node().getBBox(); + maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); + nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); + } + attributeNode.height = nodeHeight; + attributeNodes.push(attributeNode); + cumulativeHeight += nodeHeight + heightPadding * 2; + attrNum += 1; + }); + let widthPaddingFactor = 4; + if (hasKeyType) { + widthPaddingFactor += 2; + } + if (hasComment) { + widthPaddingFactor += 2; + } + const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; + const bBox = { + width: Math.max( + conf.minEntityWidth, + Math.max( + labelBBox.width + conf.entityPadding * 2, + maxWidth + widthPadding * widthPaddingFactor + ) + ), + height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2) + }; + if (attributes.length > 0) { + const spareColumnWidth = Math.max( + 0, + (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) + ); + entityTextNode.attr( + "transform", + "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")" + ); + let heightOffset = labelBBox.height + heightPadding * 2; + let attribStyle = "attributeBoxOdd"; + attributeNodes.forEach((attributeNode) => { + const alignY = heightOffset + heightPadding + attributeNode.height / 2; + attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")"); + const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width")); + attributeNode.nn.attr( + "transform", + "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")" + ); + const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width")); + if (hasKeyType) { + attributeNode.kn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width")); + } + if (hasComment) { + attributeNode.cn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + } + heightOffset += attributeNode.height + heightPadding * 2; + attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd"; + }); + } else { + bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight); + entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")"); + } + return bBox; +}; +const drawEntities = function(svgNode, entities2, graph) { + const keys = Object.keys(entities2); + let firstOne; + keys.forEach(function(entityName) { + const entityId = generateId(entityName, "entity"); + entityNameIds.set(entityName, entityId); + const groupNode = svgNode.append("g").attr("id", entityId); + firstOne = firstOne === void 0 ? entityId : firstOne; + const textId = "text-" + entityId; + const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", (0,mermaid_04fb0060.c)().fontFamily).style("font-size", conf.fontSize + "px").text(entities2[entityName].alias ?? entityName); + const { width: entityWidth, height: entityHeight } = drawAttributes( + groupNode, + textNode, + entities2[entityName].attributes + ); + const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(entityId, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: entityId + }); + }); + return firstOne; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); +}; +const getEdgeName = function(rel) { + return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ""); +}; +const addRelationships = function(relationships2, g) { + relationships2.forEach(function(r) { + g.setEdge( + entityNameIds.get(r.entityA), + entityNameIds.get(r.entityB), + { relationship: r }, + getEdgeName(r) + ); + }); + return relationships2; +}; +let relCnt = 0; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + relCnt++; + const edge = g.edge( + entityNameIds.get(rel.entityA), + entityNameIds.get(rel.entityB), + getEdgeName(rel) + ); + const lineFunction = (0,src/* line */.jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(src/* curveBasis */.$0Z); + const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf.stroke).style("fill", "none"); + if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { + svgPath.attr("stroke-dasharray", "8,8"); + } + 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, "\\)"); + } + switch (rel.relSpec.cardA) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_END + ")"); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_END + ")"); + break; + case diagObj.db.Cardinality.MD_PARENT: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_END + ")"); + break; + } + switch (rel.relSpec.cardB) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_START + ")" + ); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_START + ")"); + break; + case diagObj.db.Cardinality.MD_PARENT: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_START + ")"); + break; + } + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", (0,mermaid_04fb0060.c)().fontFamily).style("font-size", conf.fontSize + "px").text(rel.roleA); + const labelBBox = labelNode.node().getBBox(); + svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,mermaid_04fb0060.c)().er; + mermaid_04fb0060.l.info("Drawing ER diagram"); + const securityLevel = (0,mermaid_04fb0060.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = root.select(`[id='${id}']`); + erMarkers.insertMarkers(svg, conf); + let g; + g = new graphlib/* Graph */.k({ + multigraph: true, + directed: true, + compound: false + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g); + const relationships2 = addRelationships(diagObj.db.getRelationships(), g); + (0,dagre/* layout */.bK)(g); + adjustEntities(svg, g); + relationships2.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj); + }); + const padding = conf.diagramPadding; + mermaid_04fb0060.u.insertTitle(svg, "entityTitleText", conf.titleTopMargin, diagObj.db.getDiagramTitle()); + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,mermaid_04fb0060.i)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c"; +function generateId(str = "", prefix = "") { + const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ""); + return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${esm_node_v5( + str, + MERMAID_ERDIAGRAM_UUID + )}`; +} +function strWithHyphen(str = "") { + return str.length > 0 ? `${str}-` : ""; +} +const erRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .entityBox { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${options.attributeBackgroundColorOdd}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxEven { + fill: ${options.attributeBackgroundColorEven}; + stroke: ${options.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${options.tertiaryColor}; + opacity: 0.7; + background-color: ${options.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${options.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; + } + +`; +const erStyles = getStyles; +const diagram = { + parser: erParser, + db: erDb, + renderer: erRenderer, + styles: erStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/9487.178ea76e.js b/assets/js/9487.178ea76e.js deleted file mode 100644 index 7c5c69e63..000000000 --- a/assets/js/9487.178ea76e.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9487],{7295:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,u){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var o=new Error("Cannot find module '"+a+"'");throw o.code="MODULE_NOT_FOUND",o}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;a<i.length;a++)r(i[a]);return r}return n}()({1:[function(n,t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function n(n,t){for(var e=0;e<t.length;e++){var i=t[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}return function(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}}();function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}var c=function(){function n(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,u=e.algorithms,o=void 0===u?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:u,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:o}).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,u=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:u}}):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.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.terminate&&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 u(){}function o(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function v(){}function m(){}function y(){}function k(){}function j(){}function E(){}function T(){}function M(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function $(){}function L(){}function N(){}function x(){}function D(){}function R(){}function K(){}function _(){}function F(){}function B(){}function H(){}function q(){}function G(){}function z(){}function U(){}function X(){}function W(){}function V(){}function Q(){}function Y(){}function J(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function un(){}function on(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function vn(){}function mn(){}function yn(){}function kn(){}function jn(){}function En(){}function Tn(){}function Mn(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function $n(){}function Ln(){}function Nn(){}function xn(){}function Dn(){}function Rn(){}function Kn(){}function _n(){}function Fn(){}function Bn(){}function Hn(){}function qn(){}function Gn(){}function zn(){}function Un(){}function Xn(){}function Wn(){}function Vn(){}function Qn(){}function Yn(){}function Jn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ut(){}function ot(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function vt(){}function mt(){}function yt(){}function kt(){}function jt(){}function Et(){}function Tt(){}function Mt(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function $t(){}function Lt(){}function Nt(){}function xt(){}function Dt(){}function Rt(){}function Kt(){}function _t(){}function Ft(){}function Bt(){}function Ht(){}function qt(){}function Gt(){}function zt(){}function Ut(){}function Xt(){}function Wt(){}function Vt(){}function Qt(){}function Yt(){}function Jt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function ue(){}function oe(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function ve(){}function me(){}function ye(){}function ke(){}function je(){}function Ee(){}function Te(){}function Me(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function $e(){}function Le(){}function Ne(){}function xe(){}function De(){}function Re(){}function Ke(){}function _e(){}function Fe(){}function Be(){}function He(){}function qe(){}function Ge(){}function ze(){}function Ue(){}function Xe(){}function We(){}function Ve(){}function Qe(){}function Ye(){}function Je(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function ui(){}function oi(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function vi(){}function mi(){}function yi(){}function ki(){}function ji(){}function Ei(){}function Ti(){}function Mi(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function $i(){}function Li(){}function Ni(){}function xi(){}function Di(){}function Ri(){}function Ki(){}function _i(){}function Fi(){}function Bi(){}function Hi(){}function qi(){}function Gi(){}function zi(){}function Ui(){}function Xi(){}function Wi(){}function Vi(){}function Qi(){}function Yi(){}function Ji(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function ur(){}function or(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function vr(){}function mr(){}function yr(){}function kr(){}function jr(){}function Er(){}function Tr(){}function Mr(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function $r(){}function Lr(){}function Nr(){}function xr(){}function Dr(){}function Rr(){}function Kr(){}function _r(){}function Fr(){}function Br(){}function Hr(){}function qr(){}function Gr(){}function zr(){}function Ur(){}function Xr(){}function Wr(){}function Vr(){}function Qr(){}function Yr(){}function Jr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function uc(){}function oc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function vc(){}function mc(){}function yc(){}function kc(){}function jc(){}function Ec(){}function Tc(){}function Mc(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function $c(){}function Lc(){}function Nc(){}function xc(){}function Dc(){}function Rc(){}function Kc(){}function _c(){}function Fc(){}function Bc(){}function Hc(){}function qc(){}function Gc(){}function zc(){}function Uc(){}function Xc(){}function Wc(){}function Vc(){}function Qc(){}function Yc(){}function Jc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function ua(){}function oa(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function va(){}function ma(){}function ya(){}function ka(){}function ja(){}function Ea(){}function Ta(){}function Ma(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function $a(){}function La(){}function Na(){}function xa(){}function Da(){}function Ra(){}function Ka(){}function _a(){}function Fa(){}function Ba(){}function Ha(){}function qa(){}function Ga(){}function za(){}function Ua(){}function Xa(){}function Wa(){}function Va(){}function Qa(){}function Ya(){}function Ja(){}function Za(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function uu(){}function ou(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function vu(){}function mu(){}function yu(){}function ku(){}function ju(){}function Eu(){}function Tu(){}function Mu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function $u(){}function Lu(){}function Nu(){}function xu(){}function Du(){}function Ru(){}function Ku(){}function _u(){}function Fu(){}function Bu(){}function Hu(){}function qu(){}function Gu(){}function zu(){}function Uu(){}function Xu(){}function Wu(){}function Vu(){}function Qu(){}function Yu(){}function Ju(){}function Zu(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function uo(){}function oo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function vo(){}function mo(){}function yo(){}function ko(){}function jo(){}function Eo(){}function To(){}function Mo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function $o(){}function Lo(){}function No(){}function xo(){}function Do(){}function Ro(){}function Ko(){}function _o(){}function Fo(){}function Bo(){}function Ho(){}function qo(){}function Go(){}function zo(){}function Uo(){}function Xo(){}function Wo(){}function Vo(){}function Qo(){}function Yo(){}function Jo(){}function Zo(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function us(){}function os(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function vs(){}function ms(){}function ys(){}function ks(){}function js(){}function Es(){}function Ts(){}function Ms(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function $s(){}function Ls(){}function Ns(){}function xs(){}function Ds(){}function Rs(){}function Ks(){}function _s(){}function Fs(){}function Bs(){}function Hs(){}function qs(){}function Gs(){}function zs(){}function Us(){}function Xs(){}function Ws(){}function Vs(){}function Qs(){}function Ys(){}function Js(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function uh(){}function oh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function vh(){}function mh(){}function yh(){}function kh(){}function jh(){}function Eh(){}function Th(){}function Mh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function $h(){}function Lh(){}function Nh(){}function xh(){}function Dh(){}function Rh(){}function Kh(){}function _h(n){}function Fh(n){}function Bh(){iy()}function Hh(){Gsn()}function qh(){Epn()}function Gh(){_kn()}function zh(){jSn()}function Uh(){fRn()}function Xh(){Kyn()}function Wh(){rkn()}function Vh(){EM()}function Qh(){mM()}function Yh(){q_()}function Jh(){TM()}function Zh(){Irn()}function nf(){SM()}function tf(){I6()}function ef(){Pin()}function rf(){Q8()}function cf(){_Z()}function af(){zsn()}function uf(){_Mn()}function of(){Cin()}function sf(){U2()}function hf(){fWn()}function ff(){Gyn()}function lf(){FZ()}function bf(){HXn()}function wf(){RZ()}function df(){Iin()}function gf(){Yun()}function pf(){GZ()}function vf(){C9()}function mf(){PM()}function yf(){KAn()}function kf(){Uyn()}function jf(){Fcn()}function Ef(){MMn()}function Tf(){bRn()}function Mf(){Bvn()}function Sf(){CAn()}function Pf(){Ran()}function Cf(){HZ()}function If(){s_n()}function Of(){$An()}function Af(){W$n()}function $f(){x9()}function Lf(){SMn()}function Nf(){sWn()}function xf(){Xsn()}function Df(){vdn()}function Rf(){qBn()}function Kf(){u_()}function _f(){wcn()}function Ff(){fFn()}function Bf(n){kW(n)}function Hf(n){this.a=n}function qf(n){this.a=n}function Gf(n){this.a=n}function zf(n){this.a=n}function Uf(n){this.a=n}function Xf(n){this.a=n}function Wf(n){this.a=n}function Vf(n){this.a=n}function Qf(n){this.a=n}function Yf(n){this.a=n}function Jf(n){this.a=n}function Zf(n){this.a=n}function nl(n){this.a=n}function tl(n){this.a=n}function el(n){this.a=n}function il(n){this.a=n}function rl(n){this.a=n}function cl(n){this.a=n}function al(n){this.a=n}function ul(n){this.a=n}function ol(n){this.a=n}function sl(n){this.b=n}function hl(n){this.c=n}function fl(n){this.a=n}function ll(n){this.a=n}function bl(n){this.a=n}function wl(n){this.a=n}function dl(n){this.a=n}function gl(n){this.a=n}function pl(n){this.a=n}function vl(n){this.a=n}function ml(n){this.a=n}function yl(n){this.a=n}function kl(n){this.a=n}function jl(n){this.a=n}function El(n){this.a=n}function Tl(n){this.a=n}function Ml(n){this.a=n}function Sl(n){this.a=n}function Pl(n){this.a=n}function Cl(){this.a=[]}function Il(n,t){n.a=t}function Ol(n,t){n.a=t}function Al(n,t){n.b=t}function $l(n,t){n.b=t}function Ll(n,t){n.b=t}function Nl(n,t){n.j=t}function xl(n,t){n.g=t}function Dl(n,t){n.i=t}function Rl(n,t){n.c=t}function Kl(n,t){n.d=t}function _l(n,t){n.d=t}function Fl(n,t){n.c=t}function Bl(n,t){n.k=t}function Hl(n,t){n.c=t}function ql(n,t){n.c=t}function Gl(n,t){n.a=t}function zl(n,t){n.a=t}function Ul(n,t){n.f=t}function Xl(n,t){n.a=t}function Wl(n,t){n.b=t}function Vl(n,t){n.d=t}function Ql(n,t){n.i=t}function Yl(n,t){n.o=t}function Jl(n,t){n.r=t}function Zl(n,t){n.a=t}function nb(n,t){n.b=t}function tb(n,t){n.e=t}function eb(n,t){n.f=t}function ib(n,t){n.g=t}function rb(n,t){n.e=t}function cb(n,t){n.f=t}function ab(n,t){n.f=t}function ub(n,t){n.n=t}function ob(n,t){n.a=t}function sb(n,t){n.a=t}function hb(n,t){n.c=t}function fb(n,t){n.c=t}function lb(n,t){n.d=t}function bb(n,t){n.e=t}function wb(n,t){n.g=t}function db(n,t){n.a=t}function gb(n,t){n.c=t}function pb(n,t){n.d=t}function vb(n,t){n.e=t}function mb(n,t){n.f=t}function yb(n,t){n.j=t}function kb(n,t){n.a=t}function jb(n,t){n.b=t}function Eb(n,t){n.a=t}function Tb(n){n.b=n.a}function Mb(n){n.c=n.d.d}function Sb(n){this.d=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(n){this.a=n}function Ob(n){this.a=n}function Ab(n){this.a=n}function $b(n){this.a=n}function Lb(n){this.a=n}function Nb(n){this.a=n}function xb(n){this.a=n}function Db(n){this.a=n}function Rb(n){this.a=n}function Kb(n){this.a=n}function _b(n){this.a=n}function Fb(n){this.a=n}function Bb(n){this.b=n}function Hb(n){this.b=n}function qb(n){this.b=n}function Gb(n){this.a=n}function zb(n){this.a=n}function Ub(n){this.a=n}function Xb(n){this.c=n}function Wb(n){this.c=n}function Vb(n){this.c=n}function Qb(n){this.a=n}function Yb(n){this.a=n}function Jb(n){this.a=n}function Zb(n){this.a=n}function nw(n){this.a=n}function tw(n){this.a=n}function ew(n){this.a=n}function iw(n){this.a=n}function rw(n){this.a=n}function cw(n){this.a=n}function aw(n){this.a=n}function uw(n){this.a=n}function ow(n){this.a=n}function sw(n){this.a=n}function hw(n){this.a=n}function fw(n){this.a=n}function lw(n){this.a=n}function bw(n){this.a=n}function ww(n){this.a=n}function dw(n){this.a=n}function gw(n){this.a=n}function pw(n){this.a=n}function vw(n){this.a=n}function mw(n){this.a=n}function yw(n){this.a=n}function kw(n){this.a=n}function jw(n){this.a=n}function Ew(n){this.a=n}function Tw(n){this.a=n}function Mw(n){this.a=n}function Sw(n){this.a=n}function Pw(n){this.a=n}function Cw(n){this.a=n}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function $w(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function xw(n){this.a=n}function Dw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function _w(n){this.a=n}function Fw(n){this.a=n}function Bw(n){this.e=n}function Hw(n){this.a=n}function qw(n){this.a=n}function Gw(n){this.a=n}function zw(n){this.a=n}function Uw(n){this.a=n}function Xw(n){this.a=n}function Ww(n){this.a=n}function Vw(n){this.a=n}function Qw(n){this.a=n}function Yw(n){this.a=n}function Jw(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 ud(n){this.a=n}function od(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 vd(n){this.a=n}function md(n){this.a=n}function yd(n){this.a=n}function kd(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Td(n){this.a=n}function Md(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 $d(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function xd(n){this.a=n}function Dd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function _d(n){this.a=n}function Fd(n){this.a=n}function Bd(n){this.c=n}function Hd(n){this.b=n}function qd(n){this.a=n}function Gd(n){this.a=n}function zd(n){this.a=n}function Ud(n){this.a=n}function Xd(n){this.a=n}function Wd(n){this.a=n}function Vd(n){this.a=n}function Qd(n){this.a=n}function Yd(n){this.a=n}function Jd(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 ug(n){this.a=n}function og(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 vg(n){this.a=n}function mg(n){this.a=n}function yg(n){this.a=n}function kg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Tg(n){this.a=n}function Mg(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 $g(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function xg(n){this.a=n}function Dg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function _g(n){this.a=n}function Fg(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function qg(n){this.a=n}function Gg(n){this.a=n}function zg(n){this.a=n}function Ug(n){this.a=n}function Xg(n){this.a=n}function Wg(n){this.a=n}function Vg(n){this.a=n}function Qg(n){this.a=n}function Yg(n){this.a=n}function Jg(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 up(n){this.b=n}function op(n){this.f=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 vp(n){this.a=n}function mp(n){this.a=n}function yp(n){this.b=n}function kp(n){this.c=n}function jp(n){this.e=n}function Ep(n){this.a=n}function Tp(n){this.a=n}function Mp(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.d=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.e=n}function $p(){this.a=0}function Lp(){DA(this)}function Np(){xA(this)}function xp(){$U(this)}function Dp(){wV(this)}function Rp(){_h(this)}function Kp(){this.c=L$t}function _p(n,t){t.Wb(n)}function Fp(n,t){n.b+=t}function Bp(n){n.b=new ok}function Hp(n){return n.e}function qp(n){return n.a}function Gp(n){return n.a}function zp(n){return n.a}function Up(n){return n.a}function Xp(n){return n.a}function Wp(){return null}function Vp(){return null}function Qp(){aE(),dXn()}function Yp(n){n.b.tf(n.e)}function Jp(n,t){n.b=t-n.b}function Zp(n,t){n.a=t-n.a}function nv(n,t){t.ad(n.a)}function tv(n,t){qCn(t,n)}function ev(n,t,e){n.Od(e,t)}function iv(n,t){n.e=t,t.b=n}function rv(n){s_(),this.a=n}function cv(n){s_(),this.a=n}function av(n){s_(),this.a=n}function uv(n){WX(),this.a=n}function ov(n){PY(),ett.be(n)}function sv(){gN.call(this)}function hv(){gN.call(this)}function fv(){sv.call(this)}function lv(){sv.call(this)}function bv(){sv.call(this)}function wv(){sv.call(this)}function dv(){sv.call(this)}function gv(){sv.call(this)}function pv(){sv.call(this)}function vv(){sv.call(this)}function mv(){sv.call(this)}function yv(){sv.call(this)}function kv(){sv.call(this)}function jv(){this.a=this}function Ev(){this.Bb|=256}function Tv(){this.b=new PO}function Mv(){Mv=O,new xp}function Sv(){fv.call(this)}function Pv(n,t){n.length=t}function Cv(n,t){WB(n.a,t)}function Iv(n,t){USn(n.c,t)}function Ov(n,t){TU(n.b,t)}function Av(n,t){Ivn(n.a,t)}function $v(n,t){Oln(n.a,t)}function Lv(n,t){ban(n.e,t)}function Nv(n){AOn(n.c,n.b)}function xv(n,t){n.kc().Nb(t)}function Dv(n){this.a=gbn(n)}function Rv(){this.a=new xp}function Kv(){this.a=new xp}function _v(){this.a=new Np}function Fv(){this.a=new Np}function Bv(){this.a=new Np}function Hv(){this.a=new kn}function qv(){this.a=new k6}function Gv(){this.a=new bt}function zv(){this.a=new WT}function Uv(){this.a=new D0}function Xv(){this.a=new cZ}function Wv(){this.a=new AR}function Vv(){this.a=new Np}function Qv(){this.a=new Np}function Yv(){this.a=new Np}function Jv(){this.a=new Np}function Zv(){this.d=new Np}function nm(){this.a=new Rv}function tm(){this.a=new xp}function em(){this.b=new xp}function im(){this.b=new Np}function rm(){this.e=new Np}function cm(){this.d=new Np}function am(){this.a=new uf}function um(){Np.call(this)}function om(){_v.call(this)}function sm(){NR.call(this)}function hm(){Qv.call(this)}function fm(){lm.call(this)}function lm(){Rp.call(this)}function bm(){Rp.call(this)}function wm(){bm.call(this)}function dm(){dY.call(this)}function gm(){dY.call(this)}function pm(){Wm.call(this)}function vm(){Wm.call(this)}function mm(){Wm.call(this)}function ym(){Vm.call(this)}function km(){YT.call(this)}function jm(){eo.call(this)}function Em(){eo.call(this)}function Tm(){ny.call(this)}function Mm(){ny.call(this)}function Sm(){xp.call(this)}function Pm(){xp.call(this)}function Cm(){xp.call(this)}function Im(){Rv.call(this)}function Om(){jin.call(this)}function Am(){Ev.call(this)}function $m(){OL.call(this)}function Lm(){OL.call(this)}function Nm(){xp.call(this)}function xm(){xp.call(this)}function Dm(){xp.call(this)}function Rm(){yo.call(this)}function Km(){yo.call(this)}function _m(){Rm.call(this)}function Fm(){Dh.call(this)}function Bm(n){dtn.call(this,n)}function Hm(n){dtn.call(this,n)}function qm(n){Qf.call(this,n)}function Gm(n){MT.call(this,n)}function zm(n){Gm.call(this,n)}function Um(n){MT.call(this,n)}function Xm(){this.a=new YT}function Wm(){this.a=new Rv}function Vm(){this.a=new xp}function Qm(){this.a=new Np}function Ym(){this.j=new Np}function Jm(){this.a=new Xa}function Zm(){this.a=new LE}function ny(){this.a=new mo}function ty(){ty=O,_nt=new xk}function ey(){ey=O,Knt=new Nk}function iy(){iy=O,Ont=new c}function ry(){ry=O,znt=new cN}function cy(n){Gm.call(this,n)}function ay(n){Gm.call(this,n)}function uy(n){d4.call(this,n)}function oy(n){d4.call(this,n)}function sy(n){VK.call(this,n)}function hy(n){ySn.call(this,n)}function fy(n){CT.call(this,n)}function ly(n){OT.call(this,n)}function by(n){OT.call(this,n)}function wy(n){OT.call(this,n)}function dy(n){fz.call(this,n)}function gy(n){dy.call(this,n)}function py(){Pl.call(this,{})}function vy(n){CL(),this.a=n}function my(n){n.b=null,n.c=0}function yy(n,t){n.e=t,Cxn(n,t)}function ky(n,t){n.a=t,aCn(n)}function jy(n,t,e){n.a[t.g]=e}function Ey(n,t,e){wjn(e,n,t)}function Ty(n,t){ZR(t.i,n.n)}function My(n,t){ssn(n).td(t)}function Sy(n,t){return n*n/t}function Py(n,t){return n.g-t.g}function Cy(n){return new Sl(n)}function Iy(n){return new GX(n)}function Oy(n){dy.call(this,n)}function Ay(n){dy.call(this,n)}function $y(n){dy.call(this,n)}function Ly(n){fz.call(this,n)}function Ny(n){_cn(),this.a=n}function xy(n){a_(),this.a=n}function Dy(n){FG(),this.f=n}function Ry(n){FG(),this.f=n}function Ky(n){dy.call(this,n)}function _y(n){dy.call(this,n)}function Fy(n){dy.call(this,n)}function By(n){dy.call(this,n)}function Hy(n){dy.call(this,n)}function qy(n){return kW(n),n}function Gy(n){return kW(n),n}function zy(n){return kW(n),n}function Uy(n){return kW(n),n}function Xy(n){return kW(n),n}function Wy(n){return n.b==n.c}function Vy(n){return!!n&&n.b}function Qy(n){return!!n&&n.k}function Yy(n){return!!n&&n.j}function Jy(n){kW(n),this.a=n}function Zy(n){return Zon(n),n}function nk(n){vU(n,n.length)}function tk(n){dy.call(this,n)}function ek(n){dy.call(this,n)}function ik(n){dy.call(this,n)}function rk(n){dy.call(this,n)}function ck(n){dy.call(this,n)}function ak(n){dy.call(this,n)}function uk(n){ZN.call(this,n,0)}function ok(){o1.call(this,12,3)}function sk(){sk=O,ttt=new j}function hk(){hk=O,Ynt=new r}function fk(){fk=O,rtt=new g}function lk(){lk=O,htt=new v}function bk(){throw Hp(new pv)}function wk(){throw Hp(new pv)}function dk(){throw Hp(new pv)}function gk(){throw Hp(new pv)}function pk(){throw Hp(new pv)}function vk(){throw Hp(new pv)}function mk(){this.a=SD(yX(FWn))}function yk(n){s_(),this.a=yX(n)}function kk(n,t){n.Td(t),t.Sd(n)}function jk(n,t){n.a.ec().Mc(t)}function Ek(n,t,e){n.c.lf(t,e)}function Tk(n){Ay.call(this,n)}function Mk(n){_y.call(this,n)}function Sk(){Ab.call(this,"")}function Pk(){Ab.call(this,"")}function Ck(){Ab.call(this,"")}function Ik(){Ab.call(this,"")}function Ok(n){Ay.call(this,n)}function Ak(n){Hb.call(this,n)}function $k(n){bN.call(this,n)}function Lk(n){Ak.call(this,n)}function Nk(){tl.call(this,null)}function xk(){tl.call(this,null)}function Dk(){Dk=O,PY()}function Rk(){Rk=O,ket=mEn()}function Kk(n){return n.a?n.b:0}function _k(n){return n.a?n.b:0}function Fk(n,t){return n.a-t.a}function Bk(n,t){return n.a-t.a}function Hk(n,t){return n.a-t.a}function qk(n,t){return m7(n,t)}function Gk(n,t){return gZ(n,t)}function zk(n,t){return t in n.a}function Uk(n,t){return n.f=t,n}function Xk(n,t){return n.b=t,n}function Wk(n,t){return n.c=t,n}function Vk(n,t){return n.g=t,n}function Qk(n,t){return n.a=t,n}function Yk(n,t){return n.f=t,n}function Jk(n,t){return n.k=t,n}function Zk(n,t){return n.a=t,n}function nj(n,t){return n.e=t,n}function tj(n,t){return n.e=t,n}function ej(n,t){return n.f=t,n}function ij(n,t){n.b=!0,n.d=t}function rj(n,t){n.b=new wA(t)}function cj(n,t,e){t.td(n.a[e])}function aj(n,t,e){t.we(n.a[e])}function uj(n,t){return n.b-t.b}function oj(n,t){return n.g-t.g}function sj(n,t){return n.s-t.s}function hj(n,t){return n?0:t-1}function fj(n,t){return n?0:t-1}function lj(n,t){return n?t-1:0}function bj(n,t){return t.Yf(n)}function wj(n,t){return n.b=t,n}function dj(n,t){return n.a=t,n}function gj(n,t){return n.c=t,n}function pj(n,t){return n.d=t,n}function vj(n,t){return n.e=t,n}function mj(n,t){return n.f=t,n}function yj(n,t){return n.a=t,n}function kj(n,t){return n.b=t,n}function jj(n,t){return n.c=t,n}function Ej(n,t){return n.c=t,n}function Tj(n,t){return n.b=t,n}function Mj(n,t){return n.d=t,n}function Sj(n,t){return n.e=t,n}function Pj(n,t){return n.f=t,n}function Cj(n,t){return n.g=t,n}function Ij(n,t){return n.a=t,n}function Oj(n,t){return n.i=t,n}function Aj(n,t){return n.j=t,n}function $j(n,t){return n.k=t,n}function Lj(n,t){return n.j=t,n}function Nj(n,t){_Mn(),CZ(t,n)}function xj(n,t,e){GG(n.a,t,e)}function Dj(n){BV.call(this,n)}function Rj(n){BV.call(this,n)}function Kj(n){n_.call(this,n)}function _j(n){qbn.call(this,n)}function Fj(n){gtn.call(this,n)}function Bj(n){pQ.call(this,n)}function Hj(n){pQ.call(this,n)}function qj(){O$.call(this,"")}function Gj(){this.a=0,this.b=0}function zj(){this.b=0,this.a=0}function Uj(n,t){n.b=0,Nen(n,t)}function Xj(n,t){n.c=t,n.b=!0}function Wj(n,t){return n.c._b(t)}function Vj(n){return n.e&&n.e()}function Qj(n){return n?n.d:null}function Yj(n,t){return gfn(n.b,t)}function Jj(n){return n?n.g:null}function Zj(n){return n?n.i:null}function nE(n){return ED(n),n.o}function tE(){tE=O,dOt=Xkn()}function eE(){eE=O,gOt=oTn()}function iE(){iE=O,n$t=Vkn()}function rE(){rE=O,dLt=Wkn()}function cE(){cE=O,gLt=iCn()}function aE(){aE=O,lAt=cin()}function uE(){throw Hp(new pv)}function oE(){throw Hp(new pv)}function sE(){throw Hp(new pv)}function hE(){throw Hp(new pv)}function fE(){throw Hp(new pv)}function lE(){throw Hp(new pv)}function bE(n){this.a=new XT(n)}function wE(n){lUn(),DXn(this,n)}function dE(n){this.a=new Wz(n)}function gE(n,t){for(;n.ye(t););}function pE(n,t){for(;n.sd(t););}function vE(n,t){return n.a+=t,n}function mE(n,t){return n.a+=t,n}function yE(n,t){return n.a+=t,n}function kE(n,t){return n.a+=t,n}function jE(n){return EW(n),n.a}function EE(n){return n.b!=n.d.c}function TE(n){return n.l|n.m<<22}function ME(n,t){return n.d[t.p]}function SE(n,t){return Sxn(n,t)}function PE(n,t,e){n.splice(t,e)}function CE(n){n.c?NDn(n):xDn(n)}function IE(n){this.a=0,this.b=n}function OE(){this.a=new CNn(ijt)}function AE(){this.b=new CNn(qyt)}function $E(){this.b=new CNn(WEt)}function LE(){this.b=new CNn(WEt)}function NE(){throw Hp(new pv)}function xE(){throw Hp(new pv)}function DE(){throw Hp(new pv)}function RE(){throw Hp(new pv)}function KE(){throw Hp(new pv)}function _E(){throw Hp(new pv)}function FE(){throw Hp(new pv)}function BE(){throw Hp(new pv)}function HE(){throw Hp(new pv)}function qE(){throw Hp(new pv)}function GE(){throw Hp(new yv)}function zE(){throw Hp(new yv)}function UE(n){this.a=new XE(n)}function XE(n){Gin(this,n,OEn())}function WE(n){return!n||pW(n)}function VE(n){return-1!=WLt[n]}function QE(){0!=ctt&&(ctt=0),utt=-1}function YE(){null==PWn&&(PWn=[])}function JE(n,t){tAn(QQ(n.a),t)}function ZE(n,t){tAn(QQ(n.a),t)}function nT(n,t){HL.call(this,n,t)}function tT(n,t){nT.call(this,n,t)}function eT(n,t){this.b=n,this.c=t}function iT(n,t){this.b=n,this.a=t}function rT(n,t){this.a=n,this.b=t}function cT(n,t){this.a=n,this.b=t}function aT(n,t){this.a=n,this.b=t}function uT(n,t){this.a=n,this.b=t}function oT(n,t){this.a=n,this.b=t}function sT(n,t){this.a=n,this.b=t}function hT(n,t){this.a=n,this.b=t}function fT(n,t){this.a=n,this.b=t}function lT(n,t){this.b=n,this.a=t}function bT(n,t){this.b=n,this.a=t}function wT(n,t){this.b=n,this.a=t}function dT(n,t){this.b=n,this.a=t}function gT(n,t){this.f=n,this.g=t}function pT(n,t){this.e=n,this.d=t}function vT(n,t){this.g=n,this.i=t}function mT(n,t){this.a=n,this.b=t}function yT(n,t){this.a=n,this.f=t}function kT(n,t){this.b=n,this.c=t}function jT(n,t){this.a=n,this.b=t}function ET(n,t){this.a=n,this.b=t}function TT(n,t){this.a=n,this.b=t}function MT(n){aN(n.dc()),this.c=n}function ST(n){this.b=BB(yX(n),83)}function PT(n){this.a=BB(yX(n),83)}function CT(n){this.a=BB(yX(n),15)}function IT(n){this.a=BB(yX(n),15)}function OT(n){this.b=BB(yX(n),47)}function AT(){this.q=new e.Date}function $T(){$T=O,Btt=new A}function LT(){LT=O,bet=new P}function NT(n){return n.f.c+n.g.c}function xT(n,t){return n.b.Hc(t)}function DT(n,t){return n.b.Ic(t)}function RT(n,t){return n.b.Qc(t)}function KT(n,t){return n.b.Hc(t)}function _T(n,t){return n.c.uc(t)}function FT(n,t){return n.a._b(t)}function BT(n,t){return Nfn(n.c,t)}function HT(n,t){return hU(n.b,t)}function qT(n,t){return n>t&&t<OVn}function GT(n,t){return n.Gc(t),n}function zT(n,t){return Frn(n,t),n}function UT(n){return XX(),n?stt:ott}function XT(n){non.call(this,n,0)}function WT(){Wz.call(this,null)}function VT(){B8.call(this,null)}function QT(n){this.c=n,Ann(this)}function YT(){P$(this),yQ(this)}function JT(n,t){EW(n),n.a.Nb(t)}function ZT(n,t){return n.Gc(t),n}function nM(n,t){return n.a.f=t,n}function tM(n,t){return n.a.d=t,n}function eM(n,t){return n.a.g=t,n}function iM(n,t){return n.a.j=t,n}function rM(n,t){return n.a.a=t,n}function cM(n,t){return n.a.d=t,n}function aM(n,t){return n.a.e=t,n}function uM(n,t){return n.a.g=t,n}function oM(n,t){return n.a.f=t,n}function sM(n){return n.b=!1,n}function hM(){hM=O,Pet=new CO}function fM(){fM=O,Cet=new IO}function lM(){lM=O,Het=new U}function bM(){bM=O,vut=new Kt}function wM(){wM=O,rct=new Ix}function dM(){dM=O,tit=new hn}function gM(){gM=O,kut=new _t}function pM(){pM=O,sit=new dn}function vM(){vM=O,Gat=new yt}function mM(){mM=O,Fut=new Gj}function yM(){yM=O,zat=new Pt}function kM(){kM=O,Vat=new DG}function jM(){jM=O,hut=new Mt}function EM(){EM=O,But=new be}function TM(){TM=O,nst=new Ye}function MM(){MM=O,wst=new Lr}function SM(){SM=O,Qst=new rc}function PM(){PM=O,Wkt=new B2}function CM(){CM=O,XEt=new LM}function IM(){IM=O,QEt=new vD}function OM(){OM=O,GTt=new XW}function AM(){AM=O,Wpt=new Wu}function $M(){Sin(),this.c=new ok}function LM(){gT.call(this,H1n,0)}function NM(n,t){Jgn(n.c.b,t.c,t)}function xM(n,t){Jgn(n.c.c,t.b,t)}function DM(n,t,e){mZ(n.d,t.f,e)}function RM(n,t,e,i){Jpn(n,i,t,e)}function KM(n,t,e,i){uNn(i,n,t,e)}function _M(n,t,e,i){oUn(i,n,t,e)}function FM(n,t){return n.a=t.g,n}function BM(n,t){return ekn(n.a,t)}function HM(n){return n.b?n.b:n.a}function qM(n){return(n.c+n.a)/2}function GM(){GM=O,lOt=new to}function zM(){zM=O,COt=new ho}function UM(){UM=O,RAt=new Pm}function XM(){XM=O,UAt=new Cm}function WM(){WM=O,zAt=new Nm}function VM(){VM=O,ZAt=new Dm}function QM(){QM=O,N$t=new z$}function YM(){YM=O,x$t=new U$}function JM(){JM=O,rLt=new Ns}function ZM(){ZM=O,aLt=new xs}function nS(){nS=O,mAt=new xp}function tS(){tS=O,V$t=new Np}function eS(){eS=O,MNt=new Kh}function iS(n){e.clearTimeout(n)}function rS(n){this.a=BB(yX(n),224)}function cS(n){return BB(n,42).cd()}function aS(n){return n.b<n.d.gc()}function uS(n,t){return CG(n.a,t)}function oS(n,t){return Vhn(n,t)>0}function sS(n,t){return Vhn(n,t)<0}function hS(n,t){return n.a.get(t)}function fS(n,t){return t.split(n)}function lS(n,t){return hU(n.e,t)}function bS(n){return kW(n),!1}function wS(n){w1.call(this,n,21)}function dS(n,t){_J.call(this,n,t)}function gS(n,t){gT.call(this,n,t)}function pS(n,t){gT.call(this,n,t)}function vS(n){VX(),VK.call(this,n)}function mS(n,t){jG(n,n.length,t)}function yS(n,t){QU(n,n.length,t)}function kS(n,t,e){t.ud(n.a.Ge(e))}function jS(n,t,e){t.we(n.a.Fe(e))}function ES(n,t,e){t.td(n.a.Kb(e))}function TS(n,t,e){n.Mb(e)&&t.td(e)}function MS(n,t,e){n.splice(t,0,e)}function SS(n,t){return SN(n.e,t)}function PS(n,t){this.d=n,this.e=t}function CS(n,t){this.b=n,this.a=t}function IS(n,t){this.b=n,this.a=t}function OS(n,t){this.b=n,this.a=t}function AS(n,t){this.a=n,this.b=t}function $S(n,t){this.a=n,this.b=t}function LS(n,t){this.a=n,this.b=t}function NS(n,t){this.a=n,this.b=t}function xS(n,t){this.a=n,this.b=t}function DS(n,t){this.b=n,this.a=t}function RS(n,t){this.b=n,this.a=t}function KS(n,t){gT.call(this,n,t)}function _S(n,t){gT.call(this,n,t)}function FS(n,t){gT.call(this,n,t)}function BS(n,t){gT.call(this,n,t)}function HS(n,t){gT.call(this,n,t)}function qS(n,t){gT.call(this,n,t)}function GS(n,t){gT.call(this,n,t)}function zS(n,t){gT.call(this,n,t)}function US(n,t){gT.call(this,n,t)}function XS(n,t){gT.call(this,n,t)}function WS(n,t){gT.call(this,n,t)}function VS(n,t){gT.call(this,n,t)}function QS(n,t){gT.call(this,n,t)}function YS(n,t){gT.call(this,n,t)}function JS(n,t){gT.call(this,n,t)}function ZS(n,t){gT.call(this,n,t)}function nP(n,t){gT.call(this,n,t)}function tP(n,t){gT.call(this,n,t)}function eP(n,t){this.a=n,this.b=t}function iP(n,t){this.a=n,this.b=t}function rP(n,t){this.a=n,this.b=t}function cP(n,t){this.a=n,this.b=t}function aP(n,t){this.a=n,this.b=t}function uP(n,t){this.a=n,this.b=t}function oP(n,t){this.a=n,this.b=t}function sP(n,t){this.a=n,this.b=t}function hP(n,t){this.a=n,this.b=t}function fP(n,t){this.b=n,this.a=t}function lP(n,t){this.b=n,this.a=t}function bP(n,t){this.b=n,this.a=t}function wP(n,t){this.b=n,this.a=t}function dP(n,t){this.c=n,this.d=t}function gP(n,t){this.e=n,this.d=t}function pP(n,t){this.a=n,this.b=t}function vP(n,t){this.b=t,this.c=n}function mP(n,t){gT.call(this,n,t)}function yP(n,t){gT.call(this,n,t)}function kP(n,t){gT.call(this,n,t)}function jP(n,t){gT.call(this,n,t)}function EP(n,t){gT.call(this,n,t)}function TP(n,t){gT.call(this,n,t)}function MP(n,t){gT.call(this,n,t)}function SP(n,t){gT.call(this,n,t)}function PP(n,t){gT.call(this,n,t)}function CP(n,t){gT.call(this,n,t)}function IP(n,t){gT.call(this,n,t)}function OP(n,t){gT.call(this,n,t)}function AP(n,t){gT.call(this,n,t)}function $P(n,t){gT.call(this,n,t)}function LP(n,t){gT.call(this,n,t)}function NP(n,t){gT.call(this,n,t)}function xP(n,t){gT.call(this,n,t)}function DP(n,t){gT.call(this,n,t)}function RP(n,t){gT.call(this,n,t)}function KP(n,t){gT.call(this,n,t)}function _P(n,t){gT.call(this,n,t)}function FP(n,t){gT.call(this,n,t)}function BP(n,t){gT.call(this,n,t)}function HP(n,t){gT.call(this,n,t)}function qP(n,t){gT.call(this,n,t)}function GP(n,t){gT.call(this,n,t)}function zP(n,t){gT.call(this,n,t)}function UP(n,t){gT.call(this,n,t)}function XP(n,t){gT.call(this,n,t)}function WP(n,t){gT.call(this,n,t)}function VP(n,t){gT.call(this,n,t)}function QP(n,t){gT.call(this,n,t)}function YP(n,t){gT.call(this,n,t)}function JP(n,t){gT.call(this,n,t)}function ZP(n,t){this.b=n,this.a=t}function nC(n,t){this.a=n,this.b=t}function tC(n,t){this.a=n,this.b=t}function eC(n,t){this.a=n,this.b=t}function iC(n,t){this.a=n,this.b=t}function rC(n,t){gT.call(this,n,t)}function cC(n,t){gT.call(this,n,t)}function aC(n,t){this.b=n,this.d=t}function uC(n,t){gT.call(this,n,t)}function oC(n,t){gT.call(this,n,t)}function sC(n,t){this.a=n,this.b=t}function hC(n,t){this.a=n,this.b=t}function fC(n,t){gT.call(this,n,t)}function lC(n,t){gT.call(this,n,t)}function bC(n,t){gT.call(this,n,t)}function wC(n,t){gT.call(this,n,t)}function dC(n,t){gT.call(this,n,t)}function gC(n,t){gT.call(this,n,t)}function pC(n,t){gT.call(this,n,t)}function vC(n,t){gT.call(this,n,t)}function mC(n,t){gT.call(this,n,t)}function yC(n,t){gT.call(this,n,t)}function kC(n,t){gT.call(this,n,t)}function jC(n,t){gT.call(this,n,t)}function EC(n,t){gT.call(this,n,t)}function TC(n,t){gT.call(this,n,t)}function MC(n,t){gT.call(this,n,t)}function SC(n,t){gT.call(this,n,t)}function PC(n,t){return SN(n.c,t)}function CC(n,t){return SN(t.b,n)}function IC(n,t){return-n.b.Je(t)}function OC(n,t){return SN(n.g,t)}function AC(n,t){gT.call(this,n,t)}function $C(n,t){gT.call(this,n,t)}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function xC(n,t){this.a=n,this.b=t}function DC(n,t){gT.call(this,n,t)}function RC(n,t){gT.call(this,n,t)}function KC(n,t){gT.call(this,n,t)}function _C(n,t){gT.call(this,n,t)}function FC(n,t){gT.call(this,n,t)}function BC(n,t){gT.call(this,n,t)}function HC(n,t){gT.call(this,n,t)}function qC(n,t){gT.call(this,n,t)}function GC(n,t){gT.call(this,n,t)}function zC(n,t){gT.call(this,n,t)}function UC(n,t){gT.call(this,n,t)}function XC(n,t){gT.call(this,n,t)}function WC(n,t){gT.call(this,n,t)}function VC(n,t){gT.call(this,n,t)}function QC(n,t){gT.call(this,n,t)}function YC(n,t){gT.call(this,n,t)}function JC(n,t){this.a=n,this.b=t}function ZC(n,t){this.a=n,this.b=t}function nI(n,t){this.a=n,this.b=t}function tI(n,t){this.a=n,this.b=t}function eI(n,t){this.a=n,this.b=t}function iI(n,t){this.a=n,this.b=t}function rI(n,t){this.a=n,this.b=t}function cI(n,t){gT.call(this,n,t)}function aI(n,t){this.a=n,this.b=t}function uI(n,t){this.a=n,this.b=t}function oI(n,t){this.a=n,this.b=t}function sI(n,t){this.a=n,this.b=t}function hI(n,t){this.a=n,this.b=t}function fI(n,t){this.a=n,this.b=t}function lI(n,t){this.b=n,this.a=t}function bI(n,t){this.b=n,this.a=t}function wI(n,t){this.b=n,this.a=t}function dI(n,t){this.b=n,this.a=t}function gI(n,t){this.a=n,this.b=t}function pI(n,t){this.a=n,this.b=t}function vI(n,t){JLn(n.a,BB(t,56))}function mI(n,t){v7(n.a,BB(t,11))}function yI(n,t){return hH(),t!=n}function kI(){return Rk(),new ket}function jI(){qZ(),this.b=new Rv}function EI(){dxn(),this.a=new Rv}function TI(){KZ(),KG.call(this)}function MI(n,t){gT.call(this,n,t)}function SI(n,t){this.a=n,this.b=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){this.a=n,this.b=t}function AI(n,t){this.a=n,this.b=t}function $I(n,t){this.d=n,this.b=t}function LI(n,t){this.d=n,this.e=t}function NI(n,t){this.f=n,this.c=t}function xI(n,t){this.b=n,this.c=t}function DI(n,t){this.i=n,this.g=t}function RI(n,t){this.e=n,this.a=t}function KI(n,t){this.a=n,this.b=t}function _I(n,t){n.i=null,arn(n,t)}function FI(n,t){n&&VW(hAt,n,t)}function BI(n,t){return rdn(n.a,t)}function HI(n){return adn(n.c,n.b)}function qI(n){return n?n.dd():null}function GI(n){return null==n?null:n}function zI(n){return typeof n===$Wn}function UI(n){return typeof n===LWn}function XI(n){return typeof n===NWn}function WI(n,t){return n.Hd().Xb(t)}function VI(n,t){return Qcn(n.Kc(),t)}function QI(n,t){return 0==Vhn(n,t)}function YI(n,t){return Vhn(n,t)>=0}function JI(n,t){return 0!=Vhn(n,t)}function ZI(n){return""+(kW(n),n)}function nO(n,t){return n.substr(t)}function tO(n){return zbn(n),n.d.gc()}function eO(n){return zOn(n,n.c),n}function iO(n){return JH(null==n),n}function rO(n,t){return n.a+=""+t,n}function cO(n,t){return n.a+=""+t,n}function aO(n,t){return n.a+=""+t,n}function uO(n,t){return n.a+=""+t,n}function oO(n,t){return n.a+=""+t,n}function sO(n,t){return n.a+=""+t,n}function hO(n,t){r5(n,t,n.a,n.a.a)}function fO(n,t){r5(n,t,n.c.b,n.c)}function lO(n,t,e){Kjn(t,RPn(n,e))}function bO(n,t,e){Kjn(t,RPn(n,e))}function wO(n,t){Tnn(new AL(n),t)}function dO(n,t){n.q.setTime(j2(t))}function gO(n,t){zz.call(this,n,t)}function pO(n,t){zz.call(this,n,t)}function vO(n,t){zz.call(this,n,t)}function mO(n){$U(this),Tcn(this,n)}function yO(n){return l1(n,0),null}function kO(n){return n.a=0,n.b=0,n}function jO(n,t){return n.a=t.g+1,n}function EO(n,t){return 2==n.j[t.p]}function TO(n){return sX(BB(n,79))}function MO(){MO=O,Art=lhn(tpn())}function SO(){SO=O,Zot=lhn(ENn())}function PO(){this.b=new XT(etn(12))}function CO(){this.b=0,this.a=!1}function IO(){this.b=0,this.a=!1}function OO(n){this.a=n,Bh.call(this)}function AO(n){this.a=n,Bh.call(this)}function $O(n,t){iR.call(this,n,t)}function LO(n,t){tK.call(this,n,t)}function NO(n,t){DI.call(this,n,t)}function xO(n,t){Aan.call(this,n,t)}function DO(n,t){QN.call(this,n,t)}function RO(n,t){nS(),VW(mAt,n,t)}function KO(n,t){return fx(n.a,0,t)}function _O(n,t){return n.a.a.a.cc(t)}function FO(n,t){return GI(n)===GI(t)}function BO(n,t){return Pln(n.a,t.a)}function HO(n,t){return E$(n.a,t.a)}function qO(n,t){return FU(n.a,t.a)}function GO(n,t){return n.indexOf(t)}function zO(n,t){return n==t?0:n?1:-1}function UO(n){return n<10?"0"+n:""+n}function XO(n){return yX(n),new OO(n)}function WO(n){return M$(n.l,n.m,n.h)}function VO(n){return CJ((kW(n),n))}function QO(n){return CJ((kW(n),n))}function YO(n,t){return E$(n.g,t.g)}function JO(n){return typeof n===LWn}function ZO(n){return n==Zat||n==eut}function nA(n){return n==Zat||n==nut}function tA(n){return E7(n.b.b,n,0)}function eA(n){this.a=kI(),this.b=n}function iA(n){this.a=kI(),this.b=n}function rA(n,t){return WB(n.a,t),t}function cA(n,t){return WB(n.c,t),n}function aA(n,t){return Jcn(n.a,t),n}function uA(n,t){return G_(),t.a+=n}function oA(n,t){return G_(),t.a+=n}function sA(n,t){return G_(),t.c+=n}function hA(n,t){z9(n,0,n.length,t)}function fA(){ew.call(this,new v4)}function lA(){uG.call(this,0,0,0,0)}function bA(){UV.call(this,0,0,0,0)}function wA(n){this.a=n.a,this.b=n.b}function dA(n){return n==_Pt||n==FPt}function gA(n){return n==HPt||n==KPt}function pA(n){return n==fvt||n==hvt}function vA(n){return n!=QCt&&n!=YCt}function mA(n){return n.Lg()&&n.Mg()}function yA(n){return mV(BB(n,118))}function kA(n){return Jcn(new B2,n)}function jA(n,t){return new Aan(t,n)}function EA(n,t){return new Aan(t,n)}function TA(n,t,e){jen(n,t),Een(n,e)}function MA(n,t,e){Sen(n,t),Men(n,e)}function SA(n,t,e){Pen(n,t),Cen(n,e)}function PA(n,t,e){Ten(n,t),Oen(n,e)}function CA(n,t,e){Ien(n,t),Aen(n,e)}function IA(n,t){Dsn(n,t),xen(n,n.D)}function OA(n){NI.call(this,n,!0)}function AA(n,t,e){ND.call(this,n,t,e)}function $A(n){ODn(),san.call(this,n)}function LA(){gS.call(this,"Head",1)}function NA(){gS.call(this,"Tail",3)}function xA(n){n.c=x8(Ant,HWn,1,0,5,1)}function DA(n){n.a=x8(Ant,HWn,1,8,5,1)}function RA(n){Otn(n.xf(),new Sw(n))}function KA(n){return null!=n?nsn(n):0}function _A(n,t){return Ctn(t,WJ(n))}function FA(n,t){return Ctn(t,WJ(n))}function BA(n,t){return n[n.length]=t}function HA(n,t){return n[n.length]=t}function qA(n){return FB(n.b.Kc(),n.a)}function GA(n,t){return Uin(PX(n.d),t)}function zA(n,t){return Uin(PX(n.g),t)}function UA(n,t){return Uin(PX(n.j),t)}function XA(n,t){iR.call(this,n.b,t)}function WA(n){uG.call(this,n,n,n,n)}function VA(n){return n.b&&VBn(n),n.a}function QA(n){return n.b&&VBn(n),n.c}function YA(n,t){Qet||(n.b=t)}function JA(n,t,e){return $X(n,t,e),e}function ZA(n,t,e){$X(n.c[t.g],t.g,e)}function n$(n,t,e){BB(n.c,69).Xh(t,e)}function t$(n,t,e){SA(e,e.i+n,e.j+t)}function e$(n,t){f9(a4(n.a),e1(t))}function i$(n,t){f9(H7(n.a),i1(t))}function r$(n){wWn(),Ap.call(this,n)}function c$(n){return null==n?0:nsn(n)}function a$(){a$=O,syt=new Hbn(oCt)}function u$(){u$=O,new o$,new Np}function o$(){new xp,new xp,new xp}function s$(){s$=O,Mv(),itt=new xp}function h$(){h$=O,e.Math.log(2)}function f$(){f$=O,zM(),R$t=COt}function l$(){throw Hp(new tk(Tnt))}function b$(){throw Hp(new tk(Tnt))}function w$(){throw Hp(new tk(Mnt))}function d$(){throw Hp(new tk(Mnt))}function g$(n){this.a=n,QB.call(this,n)}function p$(n){this.a=n,ST.call(this,n)}function v$(n){this.a=n,ST.call(this,n)}function m$(n,t){yG(n.c,n.c.length,t)}function y$(n){return n.a<n.c.c.length}function k$(n){return n.a<n.c.a.length}function j$(n,t){return n.a?n.b:t.De()}function E$(n,t){return n<t?-1:n>t?1:0}function T$(n,t){return Vhn(n,t)>0?n:t}function M$(n,t,e){return{l:n,m:t,h:e}}function S$(n,t){null!=n.a&&mI(t,n.a)}function P$(n){n.a=new $,n.c=new $}function C$(n){this.b=n,this.a=new Np}function I$(n){this.b=new et,this.a=n}function O$(n){LR.call(this),this.a=n}function A$(){gS.call(this,"Range",2)}function $$(){tjn(),this.a=new CNn(Uat)}function L$(n,t){yX(t),EV(n).Jc(new b)}function N$(n,t){return BZ(),t.n.b+=n}function x$(n,t,e){return VW(n.g,e,t)}function D$(n,t,e){return VW(n.k,e,t)}function R$(n,t){return VW(n.a,t.a,t)}function K$(n,t,e){return Idn(t,e,n.c)}function _$(n){return new xC(n.c,n.d)}function F$(n){return new xC(n.c,n.d)}function B$(n){return new xC(n.a,n.b)}function H$(n,t){return tzn(n.a,t,null)}function q$(n){SZ(n,null),MZ(n,null)}function G$(n){WZ(n,null),VZ(n,null)}function z$(){QN.call(this,null,null)}function U$(){YN.call(this,null,null)}function X$(n){this.a=n,xp.call(this)}function W$(n){this.b=(SQ(),new Xb(n))}function V$(n){n.j=x8(Ftt,sVn,310,0,0,1)}function Q$(n,t,e){n.c.Vc(t,BB(e,133))}function Y$(n,t,e){n.c.ji(t,BB(e,133))}function J$(n,t){sqn(n),n.Gc(BB(t,15))}function Z$(n,t){return Bqn(n.c,n.b,t)}function nL(n,t){return new pN(n.Kc(),t)}function tL(n,t){return-1!=Fun(n.Kc(),t)}function eL(n,t){return null!=n.a.Bc(t)}function iL(n){return n.Ob()?n.Pb():null}function rL(n){return Bdn(n,0,n.length)}function cL(n,t){return null!=n&&Qpn(n,t)}function aL(n,t){n.q.setHours(t),lBn(n,t)}function uL(n,t){n.c&&(RH(t),kJ(t))}function oL(n,t,e){BB(n.Kb(e),164).Nb(t)}function sL(n,t,e){return HGn(n,t,e),e}function hL(n,t,e){n.a=1502^t,n.b=e^aYn}function fL(n,t,e){return n.a[t.g][e.g]}function lL(n,t){return n.a[t.c.p][t.p]}function bL(n,t){return n.e[t.c.p][t.p]}function wL(n,t){return n.c[t.c.p][t.p]}function dL(n,t){return n.j[t.p]=pLn(t)}function gL(n,t){return f6(n.f,t.tg())}function pL(n,t){return f6(n.b,t.tg())}function vL(n,t){return n.a<XK(t)?-1:1}function mL(n,t,e){return e?0!=t:t!=n-1}function yL(n,t,e){return n.a=t,n.b=e,n}function kL(n,t){return n.a*=t,n.b*=t,n}function jL(n,t,e){return $X(n.g,t,e),e}function EL(n,t,e,i){$X(n.a[t.g],e.g,i)}function TL(n,t){_x(t,n.a.a.a,n.a.a.b)}function ML(n){n.a=BB(yan(n.b.a,4),126)}function SL(n){n.a=BB(yan(n.b.a,4),126)}function PL(n){OY(n,i8n),HLn(n,IUn(n))}function CL(){CL=O,Set=new vy(null)}function IL(){(IL=O)(),$et=new z}function OL(){this.Bb|=256,this.Bb|=512}function AL(n){this.i=n,this.f=this.i.j}function $L(n,t,e){yH.call(this,n,t,e)}function LL(n,t,e){$L.call(this,n,t,e)}function NL(n,t,e){$L.call(this,n,t,e)}function xL(n,t,e){LL.call(this,n,t,e)}function DL(n,t,e){yH.call(this,n,t,e)}function RL(n,t,e){yH.call(this,n,t,e)}function KL(n,t,e){MH.call(this,n,t,e)}function _L(n,t,e){MH.call(this,n,t,e)}function FL(n,t,e){KL.call(this,n,t,e)}function BL(n,t,e){DL.call(this,n,t,e)}function HL(n,t){this.a=n,ST.call(this,t)}function qL(n,t){this.a=n,uk.call(this,t)}function GL(n,t){this.a=n,uk.call(this,t)}function zL(n,t){this.a=n,uk.call(this,t)}function UL(n){this.a=n,hl.call(this,n.d)}function XL(n){this.c=n,this.a=this.c.a}function WL(n,t){this.a=t,uk.call(this,n)}function VL(n,t){this.a=t,d4.call(this,n)}function QL(n,t){this.a=n,d4.call(this,t)}function YL(n,t){return wz(bz(n.c)).Xb(t)}function JL(n,t){return ebn(n,new Ck,t).a}function ZL(n,t){return yX(t),new nN(n,t)}function nN(n,t){this.a=t,OT.call(this,n)}function tN(n){this.b=n,this.a=this.b.a.e}function eN(n){n.b.Qb(),--n.d.f.d,$G(n.d)}function iN(n){tl.call(this,BB(yX(n),35))}function rN(n){tl.call(this,BB(yX(n),35))}function cN(){gT.call(this,"INSTANCE",0)}function aN(n){if(!n)throw Hp(new wv)}function uN(n){if(!n)throw Hp(new dv)}function oN(n){if(!n)throw Hp(new yv)}function sN(){sN=O,JM(),cLt=new Ff}function hN(){hN=O,ptt=!1,vtt=!0}function fN(n){Ab.call(this,(kW(n),n))}function lN(n){Ab.call(this,(kW(n),n))}function bN(n){Hb.call(this,n),this.a=n}function wN(n){qb.call(this,n),this.a=n}function dN(n){Ak.call(this,n),this.a=n}function gN(){V$(this),jQ(this),this._d()}function pN(n,t){this.a=t,OT.call(this,n)}function vN(n,t){return new KPn(n.a,n.b,t)}function mN(n,t){return n.lastIndexOf(t)}function yN(n,t,e){return n.indexOf(t,e)}function kN(n){return null==n?zWn:Bbn(n)}function jN(n){return null==n?null:n.name}function EN(n){return null!=n.a?n.a:null}function TN(n){return EE(n.a)?u1(n):null}function MN(n,t){return null!=$J(n.a,t)}function SN(n,t){return!!t&&n.b[t.g]==t}function PN(n){return n.$H||(n.$H=++cit)}function CN(n){return n.l+n.m*IQn+n.h*OQn}function IN(n,t){return WB(t.a,n.a),n.a}function ON(n,t){return WB(t.b,n.a),n.a}function AN(n,t){return WB(t.a,n.a),n.a}function $N(n){return Px(null!=n.a),n.a}function LN(n){ew.call(this,new q8(n))}function NN(n,t){Sgn.call(this,n,t,null)}function xN(n){this.a=n,Bb.call(this,n)}function DN(){DN=O,Lrt=new iR(dJn,0)}function RN(n,t){return++n.b,WB(n.a,t)}function KN(n,t){return++n.b,y7(n.a,t)}function _N(n,t){return Pln(n.n.a,t.n.a)}function FN(n,t){return Pln(n.c.d,t.c.d)}function BN(n,t){return Pln(n.c.c,t.c.c)}function HN(n,t){return BB(h6(n.b,t),15)}function qN(n,t){return n.n.b=(kW(t),t)}function GN(n,t){return n.n.b=(kW(t),t)}function zN(n){return y$(n.a)||y$(n.b)}function UN(n,t,e){return p3(n,t,e,n.b)}function XN(n,t,e){return p3(n,t,e,n.c)}function WN(n,t,e){BB(D7(n,t),21).Fc(e)}function VN(n,t,e){Oln(n.a,e),Ivn(n.a,t)}function QN(n,t){QM(),this.a=n,this.b=t}function YN(n,t){YM(),this.b=n,this.c=t}function JN(n,t){FG(),this.f=t,this.d=n}function ZN(n,t){w6(t,n),this.d=n,this.c=t}function nx(n){var t;t=n.a,n.a=n.b,n.b=t}function tx(n){return G_(),!!n&&!n.dc()}function ex(n){return new h4(3,n)}function ix(n,t){return new bK(n,n.gc(),t)}function rx(n){return ry(),Cnn((DZ(),Xnt),n)}function cx(n){this.d=n,AL.call(this,n)}function ax(n){this.c=n,AL.call(this,n)}function ux(n){this.c=n,cx.call(this,n)}function ox(){MM(),this.b=new yd(this)}function sx(n){return lin(n,AVn),new J6(n)}function hx(n){return PY(),parseInt(n)||-1}function fx(n,t,e){return n.substr(t,e-t)}function lx(n,t,e){return yN(n,YTn(t),e)}function bx(n){return VU(n.c,n.c.length)}function wx(n){return null!=n.f?n.f:""+n.g}function dx(n){return null!=n.f?n.f:""+n.g}function gx(n){return Px(0!=n.b),n.a.a.c}function px(n){return Px(0!=n.b),n.c.b.c}function vx(n){cL(n,150)&&BB(n,150).Gh()}function mx(n){return n.b=BB(mQ(n.a),42)}function yx(n){hM(),this.b=n,this.a=!0}function kx(n){fM(),this.b=n,this.a=!0}function jx(n){n.d=new Cx(n),n.e=new xp}function Ex(n){if(!n)throw Hp(new vv)}function Tx(n){if(!n)throw Hp(new wv)}function Mx(n){if(!n)throw Hp(new dv)}function Sx(n){if(!n)throw Hp(new lv)}function Px(n){if(!n)throw Hp(new yv)}function Cx(n){nH.call(this,n,null,null)}function Ix(){gT.call(this,"POLYOMINO",0)}function Ox(n,t,e,i){sz.call(this,n,t,e,i)}function Ax(n,t){return _Mn(),JIn(n,t.e,t)}function $x(n,t,e){return AM(),e.qg(n,t)}function Lx(n,t){return!!n.q&&hU(n.q,t)}function Nx(n,t){return n>0?t*t/n:t*t*100}function xx(n,t){return n>0?t/(n*n):100*t}function Dx(n,t,e){return WB(t,own(n,e))}function Rx(n,t,e){x9(),n.Xe(t)&&e.td(n)}function Kx(n,t,e){n.Zc(t).Rb(e)}function _x(n,t,e){return n.a+=t,n.b+=e,n}function Fx(n,t,e){return n.a*=t,n.b*=e,n}function Bx(n,t,e){return n.a-=t,n.b-=e,n}function Hx(n,t){return n.a=t.a,n.b=t.b,n}function qx(n){return n.a=-n.a,n.b=-n.b,n}function Gx(n){this.c=n,this.a=1,this.b=1}function zx(n){this.c=n,Pen(n,0),Cen(n,0)}function Ux(n){YT.call(this),nin(this,n)}function Xx(n){RXn(),Bp(this),this.mf(n)}function Wx(n,t){QM(),QN.call(this,n,t)}function Vx(n,t){YM(),YN.call(this,n,t)}function Qx(n,t){YM(),YN.call(this,n,t)}function Yx(n,t){YM(),Vx.call(this,n,t)}function Jx(n,t,e){y9.call(this,n,t,e,2)}function Zx(n,t){f$(),cG.call(this,n,t)}function nD(n,t){f$(),Zx.call(this,n,t)}function tD(n,t){f$(),Zx.call(this,n,t)}function eD(n,t){f$(),tD.call(this,n,t)}function iD(n,t){f$(),cG.call(this,n,t)}function rD(n,t){f$(),iD.call(this,n,t)}function cD(n,t){f$(),cG.call(this,n,t)}function aD(n,t){return n.c.Fc(BB(t,133))}function uD(n,t,e){return NHn(F7(n,t),e)}function oD(n,t,e){return t.Qk(n.e,n.c,e)}function sD(n,t,e){return t.Rk(n.e,n.c,e)}function hD(n,t){return tfn(n.e,BB(t,49))}function fD(n,t,e){sln(H7(n.a),t,i1(e))}function lD(n,t,e){sln(a4(n.a),t,e1(e))}function bD(n,t){t.$modCount=n.$modCount}function wD(){wD=O,Vkt=new up("root")}function dD(){dD=O,pAt=new Tm,new Mm}function gD(){this.a=new pJ,this.b=new pJ}function pD(){jin.call(this),this.Bb|=BQn}function vD(){gT.call(this,"GROW_TREE",0)}function mD(n){return null==n?null:wUn(n)}function yD(n){return null==n?null:LSn(n)}function kD(n){return null==n?null:Bbn(n)}function jD(n){return null==n?null:Bbn(n)}function ED(n){null==n.o&&g$n(n)}function TD(n){return JH(null==n||zI(n)),n}function MD(n){return JH(null==n||UI(n)),n}function SD(n){return JH(null==n||XI(n)),n}function PD(n){this.q=new e.Date(j2(n))}function CD(n,t){this.c=n,pT.call(this,n,t)}function ID(n,t){this.a=n,CD.call(this,n,t)}function OD(n,t){this.d=n,Mb(this),this.b=t}function AD(n,t){B8.call(this,n),this.a=t}function $D(n,t){B8.call(this,n),this.a=t}function LD(n){qwn.call(this,0,0),this.f=n}function ND(n,t,e){W6.call(this,n,t,e,null)}function xD(n,t,e){W6.call(this,n,t,e,null)}function DD(n,t,e){return n.ue(t,e)<=0?e:t}function RD(n,t,e){return n.ue(t,e)<=0?t:e}function KD(n,t){return BB(lnn(n.b,t),149)}function _D(n,t){return BB(lnn(n.c,t),229)}function FD(n){return BB(xq(n.a,n.b),287)}function BD(n){return new xC(n.c,n.d+n.a)}function HD(n){return BZ(),pA(BB(n,197))}function qD(){qD=O,$rt=nbn((mdn(),_It))}function GD(n,t){t.a?Fxn(n,t):MN(n.a,t.b)}function zD(n,t){Qet||WB(n.a,t)}function UD(n,t){return mM(),wan(t.d.i,n)}function XD(n,t){return Irn(),new cKn(t,n)}function WD(n,t){return OY(t,uJn),n.f=t,n}function VD(n,t,e){return e=T_n(n,t,3,e)}function QD(n,t,e){return e=T_n(n,t,6,e)}function YD(n,t,e){return e=T_n(n,t,9,e)}function JD(n,t,e){++n.j,n.Ki(),L8(n,t,e)}function ZD(n,t,e){++n.j,n.Hi(t,n.oi(t,e))}function nR(n,t,e){n.Zc(t).Rb(e)}function tR(n,t,e){return ZBn(n.c,n.b,t,e)}function eR(n,t){return(t&DWn)%n.d.length}function iR(n,t){up.call(this,n),this.a=t}function rR(n,t){kp.call(this,n),this.a=t}function cR(n,t){kp.call(this,n),this.a=t}function aR(n,t){this.c=n,gtn.call(this,t)}function uR(n,t){this.a=n,yp.call(this,t)}function oR(n,t){this.a=n,yp.call(this,t)}function sR(n){this.a=(lin(n,AVn),new J6(n))}function hR(n){this.a=(lin(n,AVn),new J6(n))}function fR(n){return!n.a&&(n.a=new w),n.a}function lR(n){return n>8?0:n+1}function bR(n,t){return hN(),n==t?0:n?1:-1}function wR(n,t,e){return mG(n,BB(t,22),e)}function dR(n,t,e){return n.apply(t,e)}function gR(n,t,e){return n.a+=Bdn(t,0,e),n}function pR(n,t){var e;return e=n.e,n.e=t,e}function vR(n,t){n[iYn].call(n,t)}function mR(n,t){n[iYn].call(n,t)}function yR(n,t){n.a.Vc(n.b,t),++n.b,n.c=-1}function kR(n){$U(n.e),n.d.b=n.d,n.d.a=n.d}function jR(n){n.b?jR(n.b):n.f.c.zc(n.e,n.d)}function ER(n,t,e){dM(),Il(n,t.Ce(n.a,e))}function TR(n,t){return Qj(Mdn(n.a,t,!0))}function MR(n,t){return Qj(Sdn(n.a,t,!0))}function SR(n,t){return qk(new Array(t),n)}function PR(n){return String.fromCharCode(n)}function CR(n){return null==n?null:n.message}function IR(){this.a=new Np,this.b=new Np}function OR(){this.a=new bt,this.b=new Tv}function AR(){this.b=new Gj,this.c=new Np}function $R(){this.d=new Gj,this.e=new Gj}function LR(){this.n=new Gj,this.o=new Gj}function NR(){this.n=new bm,this.i=new bA}function xR(){this.a=new nf,this.b=new uc}function DR(){this.a=new Np,this.d=new Np}function RR(){this.b=new Rv,this.a=new Rv}function KR(){this.b=new xp,this.a=new xp}function _R(){this.b=new AE,this.a=new da}function FR(){NR.call(this),this.a=new Gj}function BR(n){Oan.call(this,n,(Z9(),Net))}function HR(n,t,e,i){uG.call(this,n,t,e,i)}function qR(n,t,e){null!=e&&Lin(t,Amn(n,e))}function GR(n,t,e){null!=e&&Nin(t,Amn(n,e))}function zR(n,t,e){return e=T_n(n,t,11,e)}function UR(n,t){return n.a+=t.a,n.b+=t.b,n}function XR(n,t){return n.a-=t.a,n.b-=t.b,n}function WR(n,t){return n.n.a=(kW(t),t+10)}function VR(n,t){return n.n.a=(kW(t),t+10)}function QR(n,t){return t==n||Sjn(CLn(t),n)}function YR(n,t){return null==VW(n.a,t,"")}function JR(n,t){return mM(),!wan(t.d.i,n)}function ZR(n,t){dA(n.f)?c$n(n,t):ITn(n,t)}function nK(n,t){return t.Hh(n.a)}function tK(n,t){Ay.call(this,e9n+n+o8n+t)}function eK(n,t,e,i){eU.call(this,n,t,e,i)}function iK(n,t,e,i){eU.call(this,n,t,e,i)}function rK(n,t,e,i){iK.call(this,n,t,e,i)}function cK(n,t,e,i){iU.call(this,n,t,e,i)}function aK(n,t,e,i){iU.call(this,n,t,e,i)}function uK(n,t,e,i){iU.call(this,n,t,e,i)}function oK(n,t,e,i){aK.call(this,n,t,e,i)}function sK(n,t,e,i){aK.call(this,n,t,e,i)}function hK(n,t,e,i){uK.call(this,n,t,e,i)}function fK(n,t,e,i){sK.call(this,n,t,e,i)}function lK(n,t,e,i){Zz.call(this,n,t,e,i)}function bK(n,t,e){this.a=n,ZN.call(this,t,e)}function wK(n,t,e){this.c=t,this.b=e,this.a=n}function dK(n,t,e){return n.d=BB(t.Kb(e),164)}function gK(n,t){return n.Aj().Nh().Kh(n,t)}function pK(n,t){return n.Aj().Nh().Ih(n,t)}function vK(n,t){return kW(n),GI(n)===GI(t)}function mK(n,t){return kW(n),GI(n)===GI(t)}function yK(n,t){return Qj(Mdn(n.a,t,!1))}function kK(n,t){return Qj(Sdn(n.a,t,!1))}function jK(n,t){return n.b.sd(new $S(n,t))}function EK(n,t){return n.b.sd(new LS(n,t))}function TK(n,t){return n.b.sd(new NS(n,t))}function MK(n,t,e){return n.lastIndexOf(t,e)}function SK(n,t,e){return Pln(n[t.b],n[e.b])}function PK(n,t){return hon(t,(HXn(),Rdt),n)}function CK(n,t){return E$(t.a.d.p,n.a.d.p)}function IK(n,t){return E$(n.a.d.p,t.a.d.p)}function OK(n,t){return Pln(n.c-n.s,t.c-t.s)}function AK(n){return n.c?E7(n.c.a,n,0):-1}function $K(n){return n<100?null:new Fj(n)}function LK(n){return n==UCt||n==WCt||n==XCt}function NK(n,t){return cL(t,15)&&QDn(n.c,t)}function xK(n,t){Qet||t&&(n.d=t)}function DK(n,t){return!!lsn(n,t)}function RK(n,t){this.c=n,GU.call(this,n,t)}function KK(n){this.c=n,vO.call(this,bVn,0)}function _K(n,t){JB.call(this,n,n.length,t)}function FK(n,t,e){return BB(n.c,69).lk(t,e)}function BK(n,t,e){return BB(n.c,69).mk(t,e)}function HK(n,t,e){return oD(n,BB(t,332),e)}function qK(n,t,e){return sD(n,BB(t,332),e)}function GK(n,t,e){return IEn(n,BB(t,332),e)}function zK(n,t,e){return QTn(n,BB(t,332),e)}function UK(n,t){return null==t?null:lfn(n.b,t)}function XK(n){return UI(n)?(kW(n),n):n.ke()}function WK(n){return!isNaN(n)&&!isFinite(n)}function VK(n){s_(),this.a=(SQ(),new Ak(n))}function QK(n){hH(),this.d=n,this.a=new Lp}function YK(n,t,e){this.a=n,this.b=t,this.c=e}function JK(n,t,e){this.a=n,this.b=t,this.c=e}function ZK(n,t,e){this.d=n,this.b=e,this.a=t}function n_(n){P$(this),yQ(this),Frn(this,n)}function t_(n){xA(this),tH(this.c,0,n.Pc())}function e_(n){fW(n.a),z8(n.c,n.b),n.b=null}function i_(n){this.a=n,$T(),fan(Date.now())}function r_(){r_=O,iit=new r,rit=new r}function c_(){c_=O,Tet=new L,Met=new N}function a_(){a_=O,wAt=x8(Ant,HWn,1,0,5,1)}function u_(){u_=O,M$t=x8(Ant,HWn,1,0,5,1)}function o_(){o_=O,S$t=x8(Ant,HWn,1,0,5,1)}function s_(){s_=O,new rv((SQ(),SQ(),set))}function h_(n){return Z9(),Cnn((n7(),_et),n)}function f_(n){return qsn(),Cnn((e8(),Zet),n)}function l_(n){return hpn(),Cnn((I4(),pit),n)}function b_(n){return Rnn(),Cnn((O4(),kit),n)}function w_(n){return tRn(),Cnn((xan(),Fit),n)}function d_(n){return Dtn(),Cnn((Z6(),Wit),n)}function g_(n){return J9(),Cnn((n8(),trt),n)}function p_(n){return G7(),Cnn((t8(),urt),n)}function v_(n){return dWn(),Cnn((MO(),Art),n)}function m_(n){return Dan(),Cnn((e7(),_rt),n)}function y_(n){return Hpn(),Cnn((i7(),zrt),n)}function k_(n){return qpn(),Cnn((r7(),ict),n)}function j_(n){return wM(),Cnn((Q2(),act),n)}function E_(n){return Knn(),Cnn((A4(),_ct),n)}function T_(n){return q7(),Cnn((i8(),Lat),n)}function M_(n){return yMn(),Cnn((Xnn(),qat),n)}function S_(n){return Aun(),Cnn((t7(),rut),n)}function P_(n){return Bfn(),Cnn((r8(),gut),n)}function C_(n,t){if(!n)throw Hp(new _y(t))}function I_(n){return uSn(),Cnn((hen(),Aut),n)}function O_(n){uG.call(this,n.d,n.c,n.a,n.b)}function A_(n){uG.call(this,n.d,n.c,n.a,n.b)}function $_(n,t,e){this.b=n,this.c=t,this.a=e}function L_(n,t,e){this.b=n,this.a=t,this.c=e}function N_(n,t,e){this.a=n,this.b=t,this.c=e}function x_(n,t,e){this.a=n,this.b=t,this.c=e}function D_(n,t,e){this.a=n,this.b=t,this.c=e}function R_(n,t,e){this.a=n,this.b=t,this.c=e}function K_(n,t,e){this.b=n,this.a=t,this.c=e}function __(n,t,e){this.e=t,this.b=n,this.d=e}function F_(n,t,e){return dM(),n.a.Od(t,e),t}function B_(n){var t;return(t=new jn).e=n,t}function H_(n){var t;return(t=new Zv).b=n,t}function q_(){q_=O,Uut=new Ne,Xut=new xe}function G_(){G_=O,dst=new vr,gst=new mr}function z_(n){return Iun(),Cnn((a7(),ost),n)}function U_(n){return Oun(),Cnn((o7(),Est),n)}function X_(n){return kDn(),Cnn((Gcn(),Vst),n)}function W_(n){return $Pn(),Cnn((ben(),rht),n)}function V_(n){return V8(),Cnn((R4(),oht),n)}function Q_(n){return Oin(),Cnn((c8(),bht),n)}function Y_(n){return LEn(),Cnn((Hnn(),Ost),n)}function J_(n){return Crn(),Cnn((o8(),_st),n)}function Z_(n){return uin(),Cnn((a8(),vht),n)}function nF(n){return Vvn(),Cnn((Fnn(),Mht),n)}function tF(n){return _nn(),Cnn((L4(),Iht),n)}function eF(n){return Jun(),Cnn((u8(),Nht),n)}function iF(n){return gSn(),Cnn((pen(),Hht),n)}function rF(n){return g7(),Cnn((N4(),Uht),n)}function cF(n){return Bjn(),Cnn((den(),nft),n)}function aF(n){return JMn(),Cnn((wen(),oft),n)}function uF(n){return bDn(),Cnn((Vun(),yft),n)}function oF(n){return Kan(),Cnn((h8(),Mft),n)}function sF(n){return z7(),Cnn((s8(),Oft),n)}function hF(n){return z2(),Cnn((K4(),Nft),n)}function fF(n){return Tbn(),Cnn((qnn(),zlt),n)}function lF(n){return TTn(),Cnn((gen(),rvt),n)}function bF(n){return Mhn(),Cnn((f8(),svt),n)}function wF(n){return bvn(),Cnn((s7(),dvt),n)}function dF(n){return ain(),Cnn((w8(),Uvt),n)}function gF(n){return sNn(),Cnn((qcn(),$vt),n)}function pF(n){return mon(),Cnn((b8(),Rvt),n)}function vF(n){return U7(),Cnn((D4(),Bvt),n)}function mF(n){return Hcn(),Cnn((l8(),Yvt),n)}function yF(n){return Nvn(),Cnn((Bnn(),jvt),n)}function kF(n){return A6(),Cnn((x4(),tmt),n)}function jF(n){return Usn(),Cnn((g8(),amt),n)}function EF(n){return dcn(),Cnn((p8(),fmt),n)}function TF(n){return $un(),Cnn((d8(),gmt),n)}function MF(n){return oin(),Cnn((v8(),Nmt),n)}function SF(n){return Q4(),Cnn((F4(),Gmt),n)}function PF(n){return gJ(),Cnn((B4(),iyt),n)}function CF(n){return oZ(),Cnn((H4(),uyt),n)}function IF(n){return O6(),Cnn((_4(),Pyt),n)}function OF(n){return dJ(),Cnn((q4(),Dyt),n)}function AF(n){return zyn(),Cnn((c7(),Hyt),n)}function $F(n){return DPn(),Cnn((ven(),Jyt),n)}function LF(n){return sZ(),Cnn((U4(),Fkt),n)}function NF(n){return Prn(),Cnn((z4(),Zkt),n)}function xF(n){return B0(),Cnn((G4(),Gkt),n)}function DF(n){return Cbn(),Cnn((m8(),rjt),n)}function RF(n){return D9(),Cnn((X4(),ojt),n)}function KF(n){return Hsn(),Cnn((y8(),bjt),n)}function _F(n){return Omn(),Cnn((u7(),zjt),n)}function FF(n){return Bcn(),Cnn((j8(),Qjt),n)}function BF(n){return Sbn(),Cnn((k8(),eEt),n)}function HF(n){return YLn(),Cnn((Unn(),BEt),n)}function qF(n){return Pbn(),Cnn((E8(),UEt),n)}function GF(n){return CM(),Cnn((W2(),VEt),n)}function zF(n){return IM(),Cnn((X2(),JEt),n)}function UF(n){return $6(),Cnn((V4(),eTt),n)}function XF(n){return $Sn(),Cnn((Gnn(),sTt),n)}function WF(n){return OM(),Cnn((V2(),UTt),n)}function VF(n){return Lun(),Cnn((W4(),QTt),n)}function QF(n){return rpn(),Cnn((znn(),bMt),n)}function YF(n){return PPn(),Cnn((zcn(),EMt),n)}function JF(n){return wvn(),Cnn((len(),xMt),n)}function ZF(n){return wEn(),Cnn((fen(),tSt),n)}function nB(n){return lWn(),Cnn((SO(),Zot),n)}function tB(n){return Srn(),Cnn(($4(),zut),n)}function eB(n){return Ffn(),Cnn((Wnn(),GPt),n)}function iB(n){return Rtn(),Cnn((M8(),VPt),n)}function rB(n){return Mbn(),Cnn((l7(),tCt),n)}function cB(n){return nMn(),Cnn((yen(),sCt),n)}function aB(n){return ufn(),Cnn((T8(),kCt),n)}function uB(n){return Xyn(),Cnn((f7(),PCt),n)}function oB(n){return n$n(),Cnn((Nan(),KCt),n)}function sB(n){return cpn(),Cnn((Vnn(),zCt),n)}function hB(n){return QEn(),Cnn((Htn(),ZCt),n)}function fB(n){return lIn(),Cnn((men(),uIt),n)}function lB(n){return mdn(),Cnn((w7(),BIt),n)}function bB(n){return n_n(),Cnn((Qun(),JIt),n)}function wB(n){return kUn(),Cnn((Qnn(),OIt),n)}function dB(n){return Fwn(),Cnn((b7(),rOt),n)}function gB(n){return Bsn(),Cnn((h7(),fOt),n)}function pB(n){return hAn(),Cnn((Ucn(),cAt),n)}function vB(n,t){return kW(n),n+(kW(t),t)}function mB(n,t){return $T(),f9(QQ(n.a),t)}function yB(n,t){return $T(),f9(QQ(n.a),t)}function kB(n,t){this.c=n,this.a=t,this.b=t-n}function jB(n,t,e){this.a=n,this.b=t,this.c=e}function EB(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 MB(n,t,e){this.a=n,this.b=t,this.c=e}function SB(n,t,e){this.a=n,this.b=t,this.c=e}function PB(n,t,e){this.e=n,this.a=t,this.c=e}function CB(n,t,e){f$(),mJ.call(this,n,t,e)}function IB(n,t,e){f$(),rW.call(this,n,t,e)}function OB(n,t,e){f$(),rW.call(this,n,t,e)}function AB(n,t,e){f$(),rW.call(this,n,t,e)}function $B(n,t,e){f$(),IB.call(this,n,t,e)}function LB(n,t,e){f$(),IB.call(this,n,t,e)}function NB(n,t,e){f$(),LB.call(this,n,t,e)}function xB(n,t,e){f$(),OB.call(this,n,t,e)}function DB(n,t,e){f$(),AB.call(this,n,t,e)}function RB(n,t){return yX(n),yX(t),new hT(n,t)}function KB(n,t){return yX(n),yX(t),new _H(n,t)}function _B(n,t){return yX(n),yX(t),new FH(n,t)}function FB(n,t){return yX(n),yX(t),new lT(n,t)}function BB(n,t){return JH(null==n||Qpn(n,t)),n}function HB(n){var t;return fnn(t=new Np,n),t}function qB(n){var t;return fnn(t=new Rv,n),t}function GB(n){var t;return qrn(t=new zv,n),t}function zB(n){var t;return qrn(t=new YT,n),t}function UB(n){return!n.e&&(n.e=new Np),n.e}function XB(n){return!n.c&&(n.c=new Bo),n.c}function WB(n,t){return n.c[n.c.length]=t,!0}function VB(n,t){this.c=n,this.b=t,this.a=!1}function QB(n){this.d=n,Mb(this),this.b=rz(n.d)}function YB(){this.a=";,;",this.b="",this.c=""}function JB(n,t,e){Uz.call(this,t,e),this.a=n}function ZB(n,t,e){this.b=n,gO.call(this,t,e)}function nH(n,t,e){this.c=n,PS.call(this,t,e)}function tH(n,t,e){_Cn(e,0,n,t,e.length,!1)}function eH(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function iH(n,t){t&&(n.b=t,n.a=(EW(t),t.a))}function rH(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function cH(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function aH(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function uH(n){return uan(xU(JO(n)?Pan(n):n))}function oH(n,t){return E$(oq(n.d),oq(t.d))}function sH(n,t){return t==(kUn(),CIt)?n.c:n.d}function hH(){hH=O,kUn(),Rmt=CIt,Kmt=oIt}function fH(){this.b=Gy(MD(mpn((fRn(),aat))))}function lH(n){return dM(),x8(Ant,HWn,1,n,5,1)}function bH(n){return new xC(n.c+n.b,n.d+n.a)}function wH(n,t){return SM(),E$(n.d.p,t.d.p)}function dH(n){return Px(0!=n.b),Atn(n,n.a.a)}function gH(n){return Px(0!=n.b),Atn(n,n.c.b)}function pH(n,t){if(!n)throw Hp(new $y(t))}function vH(n,t){if(!n)throw Hp(new _y(t))}function mH(n,t,e){dP.call(this,n,t),this.b=e}function yH(n,t,e){LI.call(this,n,t),this.c=e}function kH(n,t,e){btn.call(this,t,e),this.d=n}function jH(n){o_(),yo.call(this),this.th(n)}function EH(n,t,e){this.a=n,NO.call(this,t,e)}function TH(n,t,e){this.a=n,NO.call(this,t,e)}function MH(n,t,e){LI.call(this,n,t),this.c=e}function SH(){R5(),oW.call(this,(WM(),zAt))}function PH(n){return null!=n&&!Xbn(n,LAt,NAt)}function CH(n,t){return(Wfn(n)<<4|Wfn(t))&QVn}function IH(n,t){return nV(),zvn(n,t),new GW(n,t)}function OH(n,t){var e;n.n&&(e=t,WB(n.f,e))}function AH(n,t,e){rtn(n,t,new GX(e))}function $H(n,t){var e;return e=n.c,Kin(n,t),e}function LH(n,t){return n.g=t<0?-1:t,n}function NH(n,t){return ztn(n),n.a*=t,n.b*=t,n}function xH(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function DH(n,t){return r5(n,t,n.c.b,n.c),!0}function RH(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function KH(n){this.b=n,this.a=lz(this.b.a).Ed()}function _H(n,t){this.b=n,this.a=t,Bh.call(this)}function FH(n,t){this.a=n,this.b=t,Bh.call(this)}function BH(n,t){Uz.call(this,t,1040),this.a=n}function HH(n){return 0==n||isNaN(n)?n:n<0?-1:1}function qH(n){return MQ(),PMn(n)==JJ(OMn(n))}function GH(n){return MQ(),OMn(n)==JJ(PMn(n))}function zH(n,t){return Yjn(n,new dP(t.a,t.b))}function UH(n){return!b5(n)&&n.c.i.c==n.d.i.c}function XH(n){var t;return t=n.n,n.a.b+t.d+t.a}function WH(n){var t;return t=n.n,n.e.b+t.d+t.a}function VH(n){var t;return t=n.n,n.e.a+t.b+t.c}function QH(n){return wWn(),new oG(0,n)}function YH(n){return n.a?n.a:eQ(n)}function JH(n){if(!n)throw Hp(new Ky(null))}function ZH(){ZH=O,SQ(),uLt=new Gb(P7n)}function nq(){nq=O,new svn((ty(),_nt),(ey(),Knt))}function tq(){tq=O,Itt=x8(Att,sVn,19,256,0,1)}function eq(n,t,e,i){awn.call(this,n,t,e,i,0,0)}function iq(n,t,e){return VW(n.b,BB(e.b,17),t)}function rq(n,t,e){return VW(n.b,BB(e.b,17),t)}function cq(n,t){return WB(n,new xC(t.a,t.b))}function aq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function uq(n){return n.e.c.length+n.g.c.length}function oq(n){return n.e.c.length-n.g.c.length}function sq(n){return n.b.c.length-n.e.c.length}function hq(n){return BZ(),(kUn(),bIt).Hc(n.j)}function fq(n){o_(),jH.call(this,n),this.a=-1}function lq(n,t){xI.call(this,n,t),this.a=this}function bq(n,t){var e;return(e=mX(n,t)).i=2,e}function wq(n,t){return++n.j,n.Ti(t)}function dq(n,t,e){return n.a=-1,WN(n,t.g,e),n}function gq(n,t,e){Kzn(n.a,n.b,n.c,BB(t,202),e)}function pq(n,t){Bin(n,null==t?null:(kW(t),t))}function vq(n,t){Rin(n,null==t?null:(kW(t),t))}function mq(n,t){Rin(n,null==t?null:(kW(t),t))}function yq(n,t,e){return new wK(dW(n).Ie(),e,t)}function kq(n,t,e,i,r,c){return Vjn(n,t,e,i,r,0,c)}function jq(){jq=O,jtt=x8(Ttt,sVn,217,256,0,1)}function Eq(){Eq=O,$tt=x8(Rtt,sVn,162,256,0,1)}function Tq(){Tq=O,Ktt=x8(_tt,sVn,184,256,0,1)}function Mq(){Mq=O,Mtt=x8(Stt,sVn,172,128,0,1)}function Sq(){eH(this,!1,!1,!1,!1)}function Pq(n){WX(),this.a=(SQ(),new Gb(yX(n)))}function Cq(n){for(yX(n);n.Ob();)n.Pb(),n.Qb()}function Iq(n){n.a.cd(),BB(n.a.dd(),14).gc(),wk()}function Oq(n){this.c=n,this.b=this.c.d.vc().Kc()}function Aq(n){this.c=n,this.a=new QT(this.c.a)}function $q(n){this.a=new XT(n.gc()),Frn(this,n)}function Lq(n){ew.call(this,new v4),Frn(this,n)}function Nq(n,t){return n.a+=Bdn(t,0,t.length),n}function xq(n,t){return l1(t,n.c.length),n.c[t]}function Dq(n,t){return l1(t,n.a.length),n.a[t]}function Rq(n,t){dM(),B8.call(this,n),this.a=t}function Kq(n,t){return jgn(rbn(jgn(n.a).a,t.a))}function _q(n,t){return kW(n),Ncn(n,(kW(t),t))}function Fq(n,t){return kW(t),Ncn(t,(kW(n),n))}function Bq(n,t){return $X(t,0,Hq(t[0],jgn(1)))}function Hq(n,t){return Kq(BB(n,162),BB(t,162))}function qq(n){return n.c-BB(xq(n.a,n.b),287).b}function Gq(n){return n.q?n.q:(SQ(),SQ(),het)}function zq(n){return n.e.Hd().gc()*n.c.Hd().gc()}function Uq(n,t,e){return E$(t.d[n.g],e.d[n.g])}function Xq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Wq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Vq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Qq(n,t,e){return E$(n.d[t.p],n.d[e.p])}function Yq(n,t,i){return e.Math.min(i/n,1/t)}function Jq(n,t){return n?0:e.Math.max(0,t-1)}function Zq(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function nG(n){var t;return(t=uEn(n))?nG(t):n}function tG(n,t){return null==n.a&&wRn(n),n.a[t]}function eG(n){return n.c?n.c.f:n.e.b}function iG(n){return n.c?n.c.g:n.e.a}function rG(n){gtn.call(this,n.gc()),pX(this,n)}function cG(n,t){f$(),jp.call(this,t),this.a=n}function aG(n,t,e){this.a=n,$L.call(this,t,e,2)}function uG(n,t,e,i){_h(this),rH(this,n,t,e,i)}function oG(n,t){wWn(),Ap.call(this,n),this.a=t}function sG(n){this.b=new YT,this.a=n,this.c=-1}function hG(){this.d=new xC(0,0),this.e=new Rv}function fG(n){ZN.call(this,0,0),this.a=n,this.b=0}function lG(n){this.a=n,this.c=new xp,ron(this)}function bG(n){if(n.e.c!=n.b)throw Hp(new vv)}function wG(n){if(n.c.e!=n.a)throw Hp(new vv)}function dG(n){return JO(n)?0|n:TE(n)}function gG(n,t){return wWn(),new UU(n,t)}function pG(n,t){return null==n?null==t:mK(n,t)}function vG(n,t){return null==n?null==t:mgn(n,t)}function mG(n,t,e){return orn(n.a,t),EU(n,t.g,e)}function yG(n,t,e){ihn(0,t,n.length),z9(n,0,t,e)}function kG(n,t,e){LZ(t,n.c.length),MS(n.c,t,e)}function jG(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function EG(n,t){var e;return $on(e=nbn(n),t),e}function TG(n,t){return!n&&(n=[]),n[n.length]=t,n}function MG(n,t){return!(void 0===n.a.get(t))}function SG(n,t){return Xin(new nn,new uw(n),t)}function PG(n){return null==n?Set:new vy(kW(n))}function CG(n,t){return cL(t,22)&&SN(n,BB(t,22))}function IG(n,t){return cL(t,22)&&$tn(n,BB(t,22))}function OG(n){return H$n(n,26)*rYn+H$n(n,27)*cYn}function AG(n){return Array.isArray(n)&&n.im===I}function $G(n){n.b?$G(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function LG(n,t){UR(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function NG(n,t){LG(n,XR(new xC(t.a,t.b),n.c))}function xG(n,t){this.b=new YT,this.a=n,this.c=t}function DG(){this.b=new Ot,this.c=new lY(this)}function RG(){this.d=new mn,this.e=new fY(this)}function KG(){KZ(),this.f=new YT,this.e=new YT}function _G(){BZ(),this.k=new xp,this.d=new Rv}function FG(){FG=O,bOt=new XA((sWn(),aPt),0)}function BG(){BG=O,qnt=new fG(x8(Ant,HWn,1,0,5,1))}function HG(n,t,e){VAn(e,n,1),WB(t,new cP(e,n))}function qG(n,t,e){Fkn(e,n,1),WB(t,new bP(e,n))}function GG(n,t,e){return TU(n,new xS(t.a,e.a))}function zG(n,t,e){return-E$(n.f[t.p],n.f[e.p])}function UG(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XG(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function WG(n,t,e){return n.a=-1,WN(n,t.g+1,e),n}function VG(n,t,e){return e=T_n(n,BB(t,49),7,e)}function QG(n,t,e){return e=T_n(n,BB(t,49),3,e)}function YG(n,t,e){this.a=n,LL.call(this,t,e,22)}function JG(n,t,e){this.a=n,LL.call(this,t,e,14)}function ZG(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function nz(n,t,e,i){f$(),N0.call(this,n,t,e,i)}function tz(n,t){0!=(t.Bb&h6n)&&!n.a.o&&(n.a.o=t)}function ez(n){return null!=n&&DU(n)&&!(n.im===I)}function iz(n){return!Array.isArray(n)&&n.im===I}function rz(n){return cL(n,15)?BB(n,15).Yc():n.Kc()}function cz(n){return n.Qc(x8(Ant,HWn,1,n.gc(),5,1))}function az(n,t){return lgn(F7(n,t))?t.Qh():null}function uz(n){n?Fmn(n,($T(),Btt),""):$T()}function oz(n){this.a=(BG(),qnt),this.d=BB(yX(n),47)}function sz(n,t,e,i){this.a=n,W6.call(this,n,t,e,i)}function hz(n){eS(),this.a=0,this.b=n-1,this.c=1}function fz(n){V$(this),this.g=n,jQ(this),this._d()}function lz(n){return n.c?n.c:n.c=n.Id()}function bz(n){return n.d?n.d:n.d=n.Jd()}function wz(n){return n.c||(n.c=n.Dd())}function dz(n){return n.f||(n.f=n.Dc())}function gz(n){return n.i||(n.i=n.bc())}function pz(n){return wWn(),new vJ(10,n,0)}function vz(n){return JO(n)?""+n:GDn(n)}function mz(n){if(n.e.j!=n.d)throw Hp(new vv)}function yz(n,t){return uan(lSn(JO(n)?Pan(n):n,t))}function kz(n,t){return uan(jAn(JO(n)?Pan(n):n,t))}function jz(n,t){return uan(JSn(JO(n)?Pan(n):n,t))}function Ez(n,t){return bR((kW(n),n),(kW(t),t))}function Tz(n,t){return Pln((kW(n),n),(kW(t),t))}function Mz(n,t){return yX(t),n.a.Ad(t)&&!n.b.Ad(t)}function Sz(n,t){return M$(n.l&t.l,n.m&t.m,n.h&t.h)}function Pz(n,t){return M$(n.l|t.l,n.m|t.m,n.h|t.h)}function Cz(n,t){return M$(n.l^t.l,n.m^t.m,n.h^t.h)}function Iz(n,t){return $fn(n,(kW(t),new rw(t)))}function Oz(n,t){return $fn(n,(kW(t),new cw(t)))}function Az(n){return gcn(),0!=BB(n,11).e.c.length}function $z(n){return gcn(),0!=BB(n,11).g.c.length}function Lz(n,t){return Irn(),Pln(t.a.o.a,n.a.o.a)}function Nz(n,t,e){return TUn(n,BB(t,11),BB(e,11))}function xz(n){return n.e?D6(n.e):null}function Dz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Rz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.td(e))}function Kz(n,t){if(n<0||n>=t)throw Hp(new Sv)}function _z(n,t,e){return $X(t,0,Hq(t[0],e[0])),t}function Fz(n,t,e){t.Ye(e,Gy(MD(RX(n.b,e)))*n.a)}function Bz(n,t,e){return jDn(),Dcn(n,t)&&Dcn(n,e)}function Hz(n){return lIn(),!n.Hc(eIt)&&!n.Hc(rIt)}function qz(n){return new xC(n.c+n.b/2,n.d+n.a/2)}function Gz(n,t){return t.kh()?tfn(n.b,BB(t,49)):t}function zz(n,t){this.e=n,this.d=0!=(64&t)?t|hVn:t}function Uz(n,t){this.c=0,this.d=n,this.b=64|t|hVn}function Xz(n){this.b=new J6(11),this.a=(PQ(),n)}function Wz(n){this.b=null,this.a=(PQ(),n||wet)}function Vz(n){this.a=rvn(n.a),this.b=new t_(n.b)}function Qz(n){this.b=n,cx.call(this,n),ML(this)}function Yz(n){this.b=n,ux.call(this,n),SL(this)}function Jz(n,t,e){this.a=n,eK.call(this,t,e,5,6)}function Zz(n,t,e,i){this.b=n,$L.call(this,t,e,i)}function nU(n,t,e,i,r){k9.call(this,n,t,e,i,r,-1)}function tU(n,t,e,i,r){j9.call(this,n,t,e,i,r,-1)}function eU(n,t,e,i){$L.call(this,n,t,e),this.b=i}function iU(n,t,e,i){yH.call(this,n,t,e),this.b=i}function rU(n){NI.call(this,n,!1),this.a=!1}function cU(n,t){this.b=n,hl.call(this,n.b),this.a=t}function aU(n,t){WX(),jT.call(this,n,sfn(new Jy(t)))}function uU(n,t){return wWn(),new cW(n,t,0)}function oU(n,t){return wWn(),new cW(6,n,t)}function sU(n,t){return mK(n.substr(0,t.length),t)}function hU(n,t){return XI(t)?eY(n,t):!!AY(n.f,t)}function fU(n,t){for(kW(t);n.Ob();)t.td(n.Pb())}function lU(n,t,e){ODn(),this.e=n,this.d=t,this.a=e}function bU(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function wU(n){var t;for(t=n;t.f;)t=t.f;return t}function dU(n){var t;return Px(null!=(t=Eon(n))),t}function gU(n){var t;return Px(null!=(t=mln(n))),t}function pU(n,t){var e;return w6(t,e=n.a.gc()),e-t}function vU(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function mU(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function yU(n,t,e,i){ihn(t,e,n.length),mU(n,t,e,i)}function kU(n,t,e){Kz(e,n.a.c.length),c5(n.a,e,t)}function jU(n,t,e){this.c=n,this.a=t,SQ(),this.b=e}function EU(n,t,e){var i;return i=n.b[t],n.b[t]=e,i}function TU(n,t){return null==n.a.zc(t,n)}function MU(n){if(!n)throw Hp(new yv);return n.d}function SU(n,t){if(null==n)throw Hp(new Hy(t))}function PU(n,t){return!!t&&Frn(n,t)}function CU(n,t,e){return ehn(n,t.g,e),orn(n.c,t),n}function IU(n){return Mzn(n,(Ffn(),_Pt)),n.d=!0,n}function OU(n){return!n.j&&yb(n,FKn(n.g,n.b)),n.j}function AU(n){Mx(-1!=n.b),s6(n.c,n.a=n.b),n.b=-1}function $U(n){n.f=new eA(n),n.g=new iA(n),oY(n)}function LU(n){return new Rq(null,qU(n,n.length))}function NU(n){return new oz(new WL(n.a.length,n.a))}function xU(n){return M$(~n.l&SQn,~n.m&SQn,~n.h&PQn)}function DU(n){return typeof n===AWn||typeof n===xWn}function RU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function KU(n){return n==RQn?x7n:n==KQn?"-INF":""+n}function _U(n,t){return n>0?e.Math.log(n/t):-100}function FU(n,t){return Vhn(n,t)<0?-1:Vhn(n,t)>0?1:0}function BU(n,t,e){return SHn(n,BB(t,46),BB(e,167))}function HU(n,t){return BB(wz(lz(n.a)).Xb(t),42).cd()}function qU(n,t){return ptn(t,n.length),new BH(n,t)}function GU(n,t){this.d=n,AL.call(this,n),this.e=t}function zU(n){this.d=(kW(n),n),this.a=0,this.c=bVn}function UU(n,t){Ap.call(this,1),this.a=n,this.b=t}function XU(n,t){return n.c?XU(n.c,t):WB(n.b,t),n}function WU(n,t,e){var i;return i=dnn(n,t),r4(n,t,e),i}function VU(n,t){return m7(n.slice(0,t),n)}function QU(n,t,e){var i;for(i=0;i<t;++i)$X(n,i,e)}function YU(n,t,e,i,r){for(;t<e;)i[r++]=fV(n,t++)}function JU(n,t){return Pln(n.c.c+n.c.b,t.c.c+t.c.b)}function ZU(n,t){return null==Mon(n.a,t,(hN(),ptt))}function nX(n,t){r5(n.d,t,n.b.b,n.b),++n.a,n.c=null}function tX(n,t){J$(n,cL(t,153)?t:BB(t,1937).gl())}function eX(n,t){JT($V(n.Oc(),new Yr),new Id(t))}function iX(n,t,e,i,r){NEn(n,BB(h6(t.k,e),15),e,i,r)}function rX(n){n.s=NaN,n.c=NaN,ZOn(n,n.e),ZOn(n,n.j)}function cX(n){n.a=null,n.e=null,$U(n.b),n.d=0,++n.c}function aX(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function uX(n,t,e){return BB(n.c._c(t,BB(e,133)),42)}function oX(){return ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])}function sX(n){return MQ(),JJ(PMn(n))==JJ(OMn(n))}function hX(n){$R.call(this),this.a=n,WB(n.a,this)}function fX(n,t){this.d=Sln(n),this.c=t,this.a=.5*t}function lX(){v4.call(this),this.a=!0,this.b=!0}function bX(n){return(null==n.i&&qFn(n),n.i).length}function wX(n){return cL(n,99)&&0!=(BB(n,18).Bb&h6n)}function dX(n,t){++n.j,sTn(n,n.i,t),zIn(n,BB(t,332))}function gX(n,t){return t=n.nk(null,t),$Tn(n,null,t)}function pX(n,t){return n.hi()&&(t=nZ(n,t)),n.Wh(t)}function vX(n,t,e){var i;return Qen(e,i=mX(n,t)),i}function mX(n,t){var e;return(e=new pon).j=n,e.d=t,e}function yX(n){if(null==n)throw Hp(new gv);return n}function kX(n){return n.j||(n.j=new wl(n))}function jX(n){return n.f||(n.f=new UL(n))}function EX(n){return n.k||(n.k=new Yf(n))}function TX(n){return n.k||(n.k=new Yf(n))}function MX(n){return n.g||(n.g=new Qf(n))}function SX(n){return n.i||(n.i=new nl(n))}function PX(n){return n.d||(n.d=new il(n))}function CX(n){return yX(n),cL(n,475)?BB(n,475):Bbn(n)}function IX(n){return cL(n,607)?n:new bJ(n)}function OX(n,t){return w2(t,n.c.b.c.gc()),new sT(n,t)}function AX(n,t,e){return wWn(),new T0(n,t,e)}function $X(n,t,e){return Sx(null==e||Q_n(n,e)),n[t]=e}function LX(n,t){var e;return w2(t,e=n.a.gc()),e-1-t}function NX(n,t){return n.a+=String.fromCharCode(t),n}function xX(n,t){return n.a+=String.fromCharCode(t),n}function DX(n,t){for(kW(t);n.c<n.d;)n.ze(t,n.c++)}function RX(n,t){return XI(t)?SJ(n,t):qI(AY(n.f,t))}function KX(n,t){return MQ(),n==PMn(t)?OMn(t):PMn(t)}function _X(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function FX(n,t){nW(n,new GX(null!=t.f?t.f:""+t.g))}function BX(n){this.b=new Np,this.a=new Np,this.c=n}function HX(n){this.c=new Gj,this.a=new Np,this.b=n}function qX(n){$R.call(this),this.a=new Gj,this.c=n}function GX(n){if(null==n)throw Hp(new gv);this.a=n}function zX(n){Mv(),this.b=new Np,this.a=n,vGn(this,n)}function UX(n){this.c=n,this.a=new YT,this.b=new YT}function XX(){XX=O,ott=new Ml(!1),stt=new Ml(!0)}function WX(){WX=O,s_(),Fnt=new SY((SQ(),SQ(),set))}function VX(){VX=O,s_(),Vnt=new vS((SQ(),SQ(),fet))}function QX(){QX=O,t$t=GIn(),gWn(),i$t&&Rkn()}function YX(n,t){return Irn(),BB(oV(n,t.d),15).Fc(t)}function JX(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function ZX(n,t,e){return NRn(n,yrn(n,t,e))}function nW(n,t){var e;dnn(n,e=n.a.length),r4(n,e,t)}function tW(n,t){console[n].call(console,t)}function eW(n,t){var e;++n.j,e=n.Vi(),n.Ii(n.oi(e,t))}function iW(n,t,e){BB(t.b,65),Otn(t.a,new EB(n,e,t))}function rW(n,t,e){jp.call(this,t),this.a=n,this.b=e}function cW(n,t,e){Ap.call(this,n),this.a=t,this.b=e}function aW(n,t,e){this.a=n,kp.call(this,t),this.b=e}function uW(n,t,e){this.a=n,H2.call(this,8,t,null,e)}function oW(n){this.a=(kW(_9n),_9n),this.b=n,new Nm}function sW(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function hW(n){this.c=n,this.b=n.a.d.a,bD(n.a.e,this)}function fW(n){Mx(-1!=n.c),n.d.$c(n.c),n.b=n.c,n.c=-1}function lW(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function bW(n,t){return Kz(t,n.a.c.length),xq(n.a,t)}function wW(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)}function dW(n){return 0>=n?new VT:Win(n-1)}function gW(n){return!!SNt&&eY(SNt,n)}function pW(n){return n?n.dc():!n.Kc().Ob()}function vW(n){return!n.a&&n.c?n.c.b:n.a}function mW(n){return!n.a&&(n.a=new $L(LOt,n,4)),n.a}function yW(n){return!n.d&&(n.d=new $L(VAt,n,1)),n.d}function kW(n){if(null==n)throw Hp(new gv);return n}function jW(n){n.c?n.c.He():(n.d=!0,QNn(n))}function EW(n){n.c?EW(n.c):(Qln(n),n.d=!0)}function TW(n){TV(n.a),n.b=x8(Ant,HWn,1,n.b.length,5,1)}function MW(n,t){return E$(t.j.c.length,n.j.c.length)}function SW(n,t){n.c<0||n.b.b<n.c?fO(n.b,t):n.a._e(t)}function PW(n,t){var e;(e=n.Yg(t))>=0?n.Bh(e):cIn(n,t)}function CW(n){return n.c.i.c==n.d.i.c}function IW(n){if(4!=n.p)throw Hp(new dv);return n.e}function OW(n){if(3!=n.p)throw Hp(new dv);return n.e}function AW(n){if(6!=n.p)throw Hp(new dv);return n.f}function $W(n){if(6!=n.p)throw Hp(new dv);return n.k}function LW(n){if(3!=n.p)throw Hp(new dv);return n.j}function NW(n){if(4!=n.p)throw Hp(new dv);return n.j}function xW(n){return!n.b&&(n.b=new Tp(new xm)),n.b}function DW(n){return-2==n.c&&gb(n,uMn(n.g,n.b)),n.c}function RW(n,t){var e;return(e=mX("",n)).n=t,e.i=1,e}function KW(n,t){LG(BB(t.b,65),n),Otn(t.a,new Aw(n))}function _W(n,t){f9((!n.a&&(n.a=new oR(n,n)),n.a),t)}function FW(n,t){this.b=n,GU.call(this,n,t),ML(this)}function BW(n,t){this.b=n,RK.call(this,n,t),SL(this)}function HW(n,t,e,i){vT.call(this,n,t),this.d=e,this.a=i}function qW(n,t,e,i){vT.call(this,n,e),this.a=t,this.f=i}function GW(n,t){W$.call(this,Vin(yX(n),yX(t))),this.a=t}function zW(){dMn.call(this,S7n,(rE(),dLt)),Wqn(this)}function UW(){dMn.call(this,V9n,(iE(),n$t)),OHn(this)}function XW(){gT.call(this,"DELAUNAY_TRIANGULATION",0)}function WW(n){return String.fromCharCode.apply(null,n)}function VW(n,t,e){return XI(t)?mZ(n,t,e):jCn(n.f,t,e)}function QW(n){return SQ(),n?n.ve():(PQ(),PQ(),get)}function YW(n,t,e){return Nun(),e.pg(n,BB(t.cd(),146))}function JW(n,t){return nq(),new svn(new rN(n),new iN(t))}function ZW(n){return lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))}function nV(){nV=O,Bnt=new hy(Pun(Gk(Hnt,1),kVn,42,0,[]))}function tV(n){return!n.d&&(n.d=new Hb(n.c.Cc())),n.d}function eV(n){return!n.a&&(n.a=new Lk(n.c.vc())),n.a}function iV(n){return!n.b&&(n.b=new Ak(n.c.ec())),n.b}function rV(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function cV(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)}function aV(n,t){return hN(),BB(t.b,19).a<n}function uV(n,t){return hN(),BB(t.a,19).a<n}function oV(n,t){return CG(n.a,t)?n.b[BB(t,22).g]:null}function sV(n,t,e,i){n.a=fx(n.a,0,t)+""+i+nO(n.a,e)}function hV(n,t){n.u.Hc((lIn(),eIt))&&PIn(n,t),z6(n,t)}function fV(n,t){return b1(t,n.length),n.charCodeAt(t)}function lV(){dy.call(this,"There is no more element.")}function bV(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function wV(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function dV(n,t,e,i){return Rcn(n,t,e,!1),Zfn(n,i),n}function gV(n){return n.j.c=x8(Ant,HWn,1,0,5,1),n.a=-1,n}function pV(n){return!n.c&&(n.c=new hK(KOt,n,5,8)),n.c}function vV(n){return!n.b&&(n.b=new hK(KOt,n,4,7)),n.b}function mV(n){return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n}function yV(n){return!n.c&&(n.c=new eU(XOt,n,9,9)),n.c}function kV(n){return n.e==C7n&&vb(n,Tgn(n.g,n.b)),n.e}function jV(n){return n.f==C7n&&mb(n,pkn(n.g,n.b)),n.f}function EV(n){var t;return!(t=n.b)&&(n.b=t=new Jf(n)),t}function TV(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function MV(n){if(zbn(n.d),n.d.d!=n.c)throw Hp(new vv)}function SV(n,t){this.b=n,this.c=t,this.a=new QT(this.b)}function PV(n,t,e){this.a=XVn,this.d=n,this.b=t,this.c=e}function CV(n,t){this.d=(kW(n),n),this.a=16449,this.c=t}function IV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function OV(n,t){Jln(n,Gy(Ren(t,"x")),Gy(Ren(t,"y")))}function AV(n,t){return Qln(n),new Rq(n,new Q9(t,n.a))}function $V(n,t){return Qln(n),new Rq(n,new M6(t,n.a))}function LV(n,t){return Qln(n),new AD(n,new E6(t,n.a))}function NV(n,t){return Qln(n),new $D(n,new T6(t,n.a))}function xV(n,t){return new pY(BB(yX(n),62),BB(yX(t),62))}function DV(n,t){return jM(),Pln((kW(n),n),(kW(t),t))}function RV(){return wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])}function KV(){return CM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])}function _V(){return IM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])}function FV(){return OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])}function BV(n){this.a=new Np,this.e=x8(ANt,sVn,48,n,0,2)}function HV(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function qV(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function GV(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function zV(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function UV(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function XV(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function WV(n,t,e,i){gT.call(this,n,t),this.a=e,this.b=i}function VV(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function QV(n,t,e){EHn(n.a,e),nun(e),AAn(n.b,e),rqn(t,e)}function YV(n,t,e){var i;return i=$Un(n),t.Kh(e,i)}function JV(n,t){var e,i;return(e=n/t)>(i=CJ(e))&&++i,i}function ZV(n){var t;return cen(t=new Kp,n),t}function nQ(n){var t;return DMn(t=new Kp,n),t}function tQ(n,t){return Kcn(t,RX(n.f,t)),null}function eQ(n){return Yin(n)||null}function iQ(n){return!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b}function rQ(n){return null!=n&&xT(jAt,n.toLowerCase())}function cQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function aQ(n,t){return Pln(iG(n)*eG(n),iG(t)*eG(t))}function uQ(n,t){return Pln(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function oQ(n,t){return Pln(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function sQ(n,t,e){e.a?Cen(n,t.b-n.f/2):Pen(n,t.a-n.g/2)}function hQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function fQ(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function lQ(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function bQ(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function wQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function dQ(n,t,e,i){f$(),e6.call(this,t,e,i),this.a=n}function gQ(n,t){this.a=n,OD.call(this,n,BB(n.d,15).Zc(t))}function pQ(n){this.f=n,this.c=this.f.e,n.f>0&&ujn(this)}function vQ(n,t,e,i){this.b=n,this.c=i,vO.call(this,t,e)}function mQ(n){return Px(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function yQ(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function kQ(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function jQ(n){return n.n&&(n.e!==FVn&&n._d(),n.j=null),n}function EQ(n){return JH(null==n||DU(n)&&!(n.im===I)),n}function TQ(n){this.b=new Np,gun(this.b,this.b),this.a=n}function MQ(){MQ=O,Sct=new Np,Mct=new xp,Tct=new Np}function SQ(){SQ=O,set=new S,het=new C,fet=new M}function PQ(){PQ=O,wet=new R,det=new R,get=new K}function CQ(){CQ=O,hit=new gn,lit=new RG,fit=new pn}function IQ(){256==ait&&(iit=rit,rit=new r,ait=0),++ait}function OQ(n){return n.f||(n.f=new pT(n,n.c))}function AQ(n){return QIn(n)&&qy(TD(ZAn(n,(HXn(),dgt))))}function $Q(n,t){return JIn(n,BB(mMn(t,(HXn(),Wgt)),19),t)}function LQ(n,t){return Tfn(n.j,t.s,t.c)+Tfn(t.e,n.s,n.c)}function NQ(n,t){n.e&&!n.e.a&&(Fp(n.e,t),NQ(n.e,t))}function xQ(n,t){n.d&&!n.d.a&&(Fp(n.d,t),xQ(n.d,t))}function DQ(n,t){return-Pln(iG(n)*eG(n),iG(t)*eG(t))}function RQ(n){return BB(n.cd(),146).tg()+":"+Bbn(n.dd())}function KQ(n){var t;G_(),(t=BB(n.g,10)).n.a=n.d.c+t.d.b}function _Q(n,t,e){return MM(),xbn(BB(RX(n.e,t),522),e)}function FQ(n,t){return tsn(n),tsn(t),Py(BB(n,22),BB(t,22))}function BQ(n,t,e){n.i=0,n.e=0,t!=e&&Xon(n,t,e)}function HQ(n,t,e){n.i=0,n.e=0,t!=e&&Won(n,t,e)}function qQ(n,t,e){rtn(n,t,new Sl(XK(e)))}function GQ(n,t,e,i,r,c){j9.call(this,n,t,e,i,r,c?-2:-1)}function zQ(n,t,e,i){LI.call(this,t,e),this.b=n,this.a=i}function UQ(n,t){new YT,this.a=new km,this.b=n,this.c=t}function XQ(n,t){return BB(mMn(n,(hWn(),clt)),15).Fc(t),t}function WQ(n,t){if(null==n)throw Hp(new Hy(t));return n}function VQ(n){return!n.q&&(n.q=new eU(QAt,n,11,10)),n.q}function QQ(n){return!n.s&&(n.s=new eU(FAt,n,21,17)),n.s}function YQ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a}function JQ(n){return cL(n,14)?new $q(BB(n,14)):qB(n.Kc())}function ZQ(n){return new qL(n,n.e.Hd().gc()*n.c.Hd().gc())}function nY(n){return new GL(n,n.e.Hd().gc()*n.c.Hd().gc())}function tY(n){return n&&n.hashCode?n.hashCode():PN(n)}function eY(n,t){return null==t?!!AY(n.f,null):MG(n.g,t)}function iY(n){return yX(n),emn(new oz(ZL(n.a.Kc(),new h)))}function rY(n){return SQ(),cL(n,54)?new $k(n):new bN(n)}function cY(n,t,e){return!!n.f&&n.f.Ne(t,e)}function aY(n,t){return n.a=fx(n.a,0,t)+""+nO(n.a,t+1),n}function uY(n,t){var e;return(e=eL(n.a,t))&&(t.d=null),e}function oY(n){var t,e;t=0|(e=n).$modCount,e.$modCount=t+1}function sY(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function hY(n){this.b=n,this.a=new dE(BB(yX(new tt),62))}function fY(n){this.c=n,this.b=new dE(BB(yX(new vn),62))}function lY(n){this.c=n,this.b=new dE(BB(yX(new It),62))}function bY(){this.a=new Qv,this.b=new hm,this.d=new Dt}function wY(){this.a=new km,this.b=(lin(3,AVn),new J6(3))}function dY(){this.b=new Rv,this.d=new YT,this.e=new om}function gY(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function pY(n,t){zm.call(this,new Wz(n)),this.a=n,this.b=t}function vY(){iSn(this,new Rf),this.wb=(QX(),t$t),iE()}function mY(n){OTn(n,"No crossing minimization",1),HSn(n)}function yY(n){Dk(),e.setTimeout((function(){throw n}),0)}function kY(n){return n.u||(P5(n),n.u=new uR(n,n)),n.u}function jY(n){return BB(yan(n,16),26)||n.zh()}function EY(n,t){return cL(t,146)&&mK(n.b,BB(t,146).tg())}function TY(n,t){return n.a?t.Wg().Kc():BB(t.Wg(),69).Zh()}function MY(n){return n.k==(uSn(),Cut)&&Lx(n,(hWn(),zft))}function SY(n){this.a=(SQ(),cL(n,54)?new $k(n):new bN(n))}function PY(){var n,t;PY=O,t=!Ddn(),n=new d,ett=t?new E:n}function CY(n,t){var e;return e=nE(n.gm),null==t?e:e+": "+t}function IY(n,t){var e;return j4(e=n.b.Qc(t),n.b.gc()),e}function OY(n,t){if(null==n)throw Hp(new Hy(t));return n}function AY(n,t){return hhn(n,t,pZ(n,null==t?0:n.b.se(t)))}function $Y(n,t,e){return e>=0&&mK(n.substr(e,t.length),t)}function LY(n,t,e,i,r,c,a){return new b4(n.e,t,e,i,r,c,a)}function NY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function xY(n,t,e,i,r,c){this.a=n,kin.call(this,t,e,i,r,c)}function DY(n,t){this.g=n,this.d=Pun(Gk(Out,1),a1n,10,0,[t])}function RY(n,t){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t}function KY(n,t){NR.call(this),xtn(this),this.a=n,this.c=t}function _Y(n,t,e,i){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i)}function FY(n,t,e,i){$X(n.c[t.g],t.g,e),$X(n.b[t.g],t.g,i)}function BY(){return A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])}function HY(){return g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])}function qY(){return _nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])}function GY(){return V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])}function zY(){return z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])}function UY(){return U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])}function XY(){return Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])}function WY(){return O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])}function VY(){return gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])}function QY(){return oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])}function YY(){return dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])}function JY(){return B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])}function ZY(){return sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])}function nJ(){return Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])}function tJ(){return D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])}function eJ(){return Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])}function iJ(){return $6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])}function rJ(){return hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])}function cJ(){return Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])}function aJ(){return Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])}function uJ(){return Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])}function oJ(n,t,e,i){return e>=0?n.jh(t,e,i):n.Sg(null,e,i)}function sJ(n){return 0==n.b.b?n.a.$e():dH(n.b)}function hJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.f)}function fJ(n){if(5!=n.p)throw Hp(new dv);return dG(n.k)}function lJ(n){return GI(n.a)===GI((wcn(),I$t))&&Rqn(n),n.a}function bJ(n){this.a=BB(yX(n),271),this.b=(SQ(),new dN(n))}function wJ(n,t){Zl(this,new xC(n.a,n.b)),nb(this,zB(t))}function dJ(){dJ=O,Lyt=new oC(cJn,0),Nyt=new oC(aJn,1)}function gJ(){gJ=O,tyt=new cC(aJn,0),nyt=new cC(cJn,1)}function pJ(){ay.call(this,new XT(etn(12))),aN(!0),this.a=2}function vJ(n,t,e){wWn(),Ap.call(this,n),this.b=t,this.a=e}function mJ(n,t,e){f$(),jp.call(this,t),this.a=n,this.b=e}function yJ(n){NR.call(this),xtn(this),this.a=n,this.c=!0}function kJ(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function jJ(n){pin(n.a),RA(n.a),twn(new Pw(n.a))}function EJ(n,t){oRn(n,!0),Otn(n.e.wf(),new $_(n,!0,t))}function TJ(n,t){return c4(t),Yen(n,x8(ANt,hQn,25,t,15,1),t)}function MJ(n,t){return MQ(),n==JJ(PMn(t))||n==JJ(OMn(t))}function SJ(n,t){return null==t?qI(AY(n.f,null)):hS(n.g,t)}function PJ(n){return 0==n.b?null:(Px(0!=n.b),Atn(n,n.a.a))}function CJ(n){return 0|Math.max(Math.min(n,DWn),-2147483648)}function IJ(n,t){var e=Znt[n.charCodeAt(0)];return null==e?n:e}function OJ(n,t){return WQ(n,"set1"),WQ(t,"set2"),new ET(n,t)}function AJ(n,t){return UR(qx(nen(n.f,t)),n.f.d)}function $J(n,t){var e;return YGn(n,t,e=new q),e.d}function LJ(n,t,e,i){var r;r=new FR,t.a[e.g]=r,mG(n.b,i,r)}function NJ(n,t,e){var i;(i=n.Yg(t))>=0?n.sh(i,e):TLn(n,t,e)}function xJ(n,t,e){hZ(),n&&VW(fAt,n,t),n&&VW(hAt,n,e)}function DJ(n,t,e){this.i=new Np,this.b=n,this.g=t,this.a=e}function RJ(n,t,e){this.c=new Np,this.e=n,this.f=t,this.b=e}function KJ(n,t,e){this.a=new Np,this.e=n,this.f=t,this.c=e}function _J(n,t){V$(this),this.f=t,this.g=n,jQ(this),this._d()}function FJ(n,t){var e;e=n.q.getHours(),n.q.setDate(t),lBn(n,e)}function BJ(n,t){var e;for(yX(t),e=n.a;e;e=e.c)t.Od(e.g,e.i)}function HJ(n){var t;return $on(t=new bE(etn(n.length)),n),t}function qJ(n){function t(){}return t.prototype=n||{},new t}function GJ(n,t){return!!wun(n,t)&&(ein(n),!0)}function zJ(n,t){if(null==t)throw Hp(new gv);return ugn(n,t)}function UJ(n){if(n.qe())return null;var t=n.n;return SWn[t]}function XJ(n){return n.Db>>16!=3?null:BB(n.Cb,33)}function WJ(n){return n.Db>>16!=9?null:BB(n.Cb,33)}function VJ(n){return n.Db>>16!=6?null:BB(n.Cb,79)}function QJ(n){return n.Db>>16!=7?null:BB(n.Cb,235)}function YJ(n){return n.Db>>16!=7?null:BB(n.Cb,160)}function JJ(n){return n.Db>>16!=11?null:BB(n.Cb,33)}function ZJ(n,t){var e;return(e=n.Yg(t))>=0?n.lh(e):qIn(n,t)}function nZ(n,t){var e;return oMn(e=new Lq(t),n),new t_(e)}function tZ(n){var t;return t=n.d,t=n.si(n.f),f9(n,t),t.Ob()}function eZ(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function iZ(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function rZ(n){return!n.a&&(n.a=new eU(UOt,n,10,11)),n.a.i>0}function cZ(){this.a=new fA,this.e=new Rv,this.g=0,this.i=0}function aZ(n){this.a=n,this.b=x8(_mt,sVn,1944,n.e.length,0,2)}function uZ(n,t,e){var i;i=Non(n,t,e),n.b=new mrn(i.c.length)}function oZ(){oZ=O,ryt=new rC(pJn,0),cyt=new rC("UP",1)}function sZ(){sZ=O,Rkt=new bC(U3n,0),Kkt=new bC("FAN",1)}function hZ(){hZ=O,fAt=new xp,hAt=new xp,FI(yet,new wo)}function fZ(n){if(0!=n.p)throw Hp(new dv);return JI(n.f,0)}function lZ(n){if(0!=n.p)throw Hp(new dv);return JI(n.k,0)}function bZ(n){return n.Db>>16!=3?null:BB(n.Cb,147)}function wZ(n){return n.Db>>16!=6?null:BB(n.Cb,235)}function dZ(n){return n.Db>>16!=17?null:BB(n.Cb,26)}function gZ(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.le(t))}function pZ(n,t){var e;return null==(e=n.a.get(t))?new Array:e}function vZ(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),lBn(n,e)}function mZ(n,t,e){return null==t?jCn(n.f,null,e):ubn(n.g,t,e)}function yZ(n,t,e,i,r,c){return new N7(n.e,t,n.aj(),e,i,r,c)}function kZ(n,t,e){return n.a=fx(n.a,0,t)+""+e+nO(n.a,t),n}function jZ(n,t,e){return WB(n.a,(nV(),zvn(t,e),new vT(t,e))),n}function EZ(n){return oN(n.c),n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function TZ(n){return oN(n.e),n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function MZ(n,t){n.d&&y7(n.d.e,n),n.d=t,n.d&&WB(n.d.e,n)}function SZ(n,t){n.c&&y7(n.c.g,n),n.c=t,n.c&&WB(n.c.g,n)}function PZ(n,t){n.c&&y7(n.c.a,n),n.c=t,n.c&&WB(n.c.a,n)}function CZ(n,t){n.i&&y7(n.i.j,n),n.i=t,n.i&&WB(n.i.j,n)}function IZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function OZ(n,t,e){this.a=t,this.c=n,this.b=(yX(e),new t_(e))}function AZ(n,t){this.a=n,this.c=B$(this.a),this.b=new gY(t)}function $Z(n){return Qln(n),AV(n,new vw(new Rv))}function LZ(n,t){if(n<0||n>t)throw Hp(new Ay(jYn+n+EYn+t))}function NZ(n,t){return IG(n.a,t)?EU(n,BB(t,22).g,null):null}function xZ(n){return Shn(),hN(),0!=BB(n.a,81).d.e}function DZ(){DZ=O,Xnt=lhn((ry(),Pun(Gk(Wnt,1),$Vn,538,0,[znt])))}function RZ(){RZ=O,pmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function KZ(){KZ=O,vmt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function _Z(){_Z=O,ymt=WG(new B2,(yMn(),Bat),(lWn(),qot))}function FZ(){FZ=O,zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function BZ(){BZ=O,Qmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function HZ(){HZ=O,Zmt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function qZ(){qZ=O,oyt=dq(new B2,(yMn(),Bat),(lWn(),dot))}function GZ(){GZ=O,zkt=WG(new B2,(zyn(),Fyt),(DPn(),zyt))}function zZ(n,t,e,i){this.c=n,this.d=i,WZ(this,t),VZ(this,e)}function UZ(n){this.c=new YT,this.b=n.b,this.d=n.c,this.a=n.a}function XZ(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function WZ(n,t){n.a&&y7(n.a.k,n),n.a=t,n.a&&WB(n.a.k,n)}function VZ(n,t){n.b&&y7(n.b.f,n),n.b=t,n.b&&WB(n.b.f,n)}function QZ(n,t){iW(n,n.b,n.c),BB(n.b.b,65),t&&BB(t.b,65).b}function YZ(n,t){zln(n,t),cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),2)}function JZ(n,t){cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,t)}function ZZ(n,t){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,t)}function n1(n,t){return ZM(),hnn(t)?new lq(t,n):new xI(t,n)}function t1(n,t){null!=t.c&&nW(n,new GX(t.c))}function e1(n){var t;return iE(),cen(t=new Kp,n),t}function i1(n){var t;return iE(),cen(t=new Kp,n),t}function r1(n,t){var e;return e=new HX(n),t.c[t.c.length]=e,e}function c1(n,t){var e;return(e=BB(lfn(OQ(n.a),t),14))?e.gc():0}function a1(n){return Qln(n),PQ(),PQ(),ytn(n,det)}function u1(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function o1(n,t){Um.call(this,new XT(etn(n))),lin(t,oVn),this.a=t}function s1(n,t,e){Hfn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function h1(n,t,e){var i;Hfn(t,e,n.c.length),i=e-t,PE(n.c,t,i)}function f1(n,t){hL(n,dG(e0(kz(t,24),sYn)),dG(e0(t,sYn)))}function l1(n,t){if(n<0||n>=t)throw Hp(new Ay(jYn+n+EYn+t))}function b1(n,t){if(n<0||n>=t)throw Hp(new Ok(jYn+n+EYn+t))}function w1(n,t){this.b=(kW(n),n),this.a=0==(t&_Qn)?64|t|hVn:t}function d1(n){DA(this),Pv(this.a,kon(e.Math.max(8,n))<<1)}function g1(n){return Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))}function p1(){return qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])}function v1(){return Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])}function m1(){return J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])}function y1(){return G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])}function k1(){return Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])}function j1(){return q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Iat,Aat])}function E1(){return Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])}function T1(){return Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])}function M1(){return uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])}function S1(){return Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])}function P1(){return Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])}function C1(){return z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Cft,Sft])}function I1(){return Kan(),Pun(Gk(Ift,1),$Vn,292,0,[jft,Eft,kft])}function O1(){return ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])}function A1(){return mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])}function $1(){return Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])}function L1(){return $un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])}function N1(){return Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])}function x1(){return dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])}function D1(){return oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])}function R1(){return Cbn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])}function K1(){return Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])}function _1(){return Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])}function F1(){return Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])}function B1(){return Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])}function H1(){return ufn(),Pun(Gk(SCt,1),$Vn,334,0,[vCt,pCt,mCt])}function q1(){return Rtn(),Pun(Gk(nCt,1),$Vn,272,0,[zPt,UPt,XPt])}function G1(n,t){return k$n(n,t,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z1(n,t,e){var i;return(i=cHn(n,t,!1)).b<=t&&i.a<=e}function U1(n,t,e){var i;(i=new ca).b=t,i.a=e,++t.b,WB(n.d,i)}function X1(n,t){var e;return Tx(!!(e=(kW(n),n).g)),kW(t),e(t)}function W1(n,t){var e,i;return i=pU(n,t),e=n.a.Zc(i),new kT(n,e)}function V1(n){return n.Db>>16!=6?null:BB(cAn(n),235)}function Q1(n){if(2!=n.p)throw Hp(new dv);return dG(n.f)&QVn}function Y1(n){if(2!=n.p)throw Hp(new dv);return dG(n.k)&QVn}function J1(n){return n.a==(R5(),eLt)&&db(n,eLn(n.g,n.b)),n.a}function Z1(n){return n.d==(R5(),eLt)&&pb(n,NKn(n.g,n.b)),n.d}function n0(n){return Px(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function t0(n,t){n.b=n.b|t.b,n.c=n.c|t.c,n.d=n.d|t.d,n.a=n.a|t.a}function e0(n,t){return uan(Sz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function i0(n,t){return uan(Pz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function r0(n,t){return uan(Cz(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function c0(n){return rbn(yz(fan(H$n(n,32)),32),fan(H$n(n,32)))}function a0(n){return yX(n),cL(n,14)?new t_(BB(n,14)):HB(n.Kc())}function u0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(n.c,t.c)}function o0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(n.c,t.c)}function s0(n,t){return Dnn(),n.c==t.c?Pln(n.d,t.d):Pln(t.c,n.c)}function h0(n,t){return Dnn(),n.c==t.c?Pln(t.d,n.d):Pln(t.c,n.c)}function f0(n,t){var e;e=Gy(MD(n.a.We((sWn(),OPt)))),VUn(n,t,e)}function l0(n,t){var e;e=BB(RX(n.g,t),57),Otn(t.d,new oP(n,e))}function b0(n,t){var e,i;return(e=oyn(n))<(i=oyn(t))?-1:e>i?1:0}function w0(n,t){var e;return e=S7(t),BB(RX(n.c,e),19).a}function d0(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function g0(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function p0(n){return null==n.c||0==n.c.length?"n_"+n.b:"n_"+n.c}function v0(n,t){return n&&n.equals?n.equals(t):GI(n)===GI(t)}function m0(n,t){return 0==t?!!n.o&&0!=n.o.f:vpn(n,t)}function y0(n,t,e){var i;n.n&&t&&e&&(i=new Zu,WB(n.e,i))}function k0(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function j0(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function E0(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function T0(n,t,e){Ap.call(this,25),this.b=n,this.a=t,this.c=e}function M0(n){wWn(),Ap.call(this,n),this.c=!1,this.a=!1}function S0(n,t,e,i,r,c){Hen.call(this,n,t,e,i,r),c&&(this.o=-2)}function P0(n,t,e,i,r,c){qen.call(this,n,t,e,i,r),c&&(this.o=-2)}function C0(n,t,e,i,r,c){J5.call(this,n,t,e,i,r),c&&(this.o=-2)}function I0(n,t,e,i,r,c){Uen.call(this,n,t,e,i,r),c&&(this.o=-2)}function O0(n,t,e,i,r,c){Z5.call(this,n,t,e,i,r),c&&(this.o=-2)}function A0(n,t,e,i,r,c){Gen.call(this,n,t,e,i,r),c&&(this.o=-2)}function $0(n,t,e,i,r,c){zen.call(this,n,t,e,i,r),c&&(this.o=-2)}function L0(n,t,e,i,r,c){n6.call(this,n,t,e,i,r),c&&(this.o=-2)}function N0(n,t,e,i){jp.call(this,e),this.b=n,this.c=t,this.d=i}function x0(n,t){this.a=new Np,this.d=new Np,this.f=n,this.c=t}function D0(){this.c=new $$,this.a=new bY,this.b=new em,bM()}function R0(){Nun(),this.b=new xp,this.a=new xp,this.c=new Np}function K0(n,t){this.g=n,this.d=(R5(),eLt),this.a=eLt,this.b=t}function _0(n,t){this.f=n,this.a=(R5(),tLt),this.c=tLt,this.b=t}function F0(n,t){!n.c&&(n.c=new Ecn(n,0)),MHn(n.c,(Uqn(),LLt),t)}function B0(){B0=O,Hkt=new wC("DFS",0),Bkt=new wC("BFS",1)}function H0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Hc(e)}function q0(n,t,e){var i;return!!(i=BB(n.Zb().xc(t),14))&&i.Mc(e)}function G0(n,t,e,i){return n.a+=""+fx(null==t?zWn:Bbn(t),e,i),n}function z0(n,t,e,i,r,c){return Rcn(n,t,e,c),Jfn(n,i),tln(n,r),n}function U0(n){return Px(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function X0(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function W0(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function V0(n){return!(!n.a||0==H7(n.a.a).i||n.b&&Kvn(n.b))}function Q0(n){return!(!n.u||0==a4(n.u.a).i||n.n&&Rvn(n.n))}function Y0(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),16,new zf(n))}function J0(n,t){return FU(fan(n.q.getTime()),fan(t.q.getTime()))}function Z0(n){return BB(Qgn(n,x8(yut,c1n,17,n.c.length,0,1)),474)}function n2(n){return BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193)}function t2(n){return BZ(),!(b5(n)||!b5(n)&&n.c.i.c==n.d.i.c)}function e2(n,t,e){yX(n),xyn(new IZ(new t_(n),t,e))}function i2(n,t,e){yX(n),Dyn(new OZ(new t_(n),t,e))}function r2(n,t){var e;return e=1-t,n.a[e]=wrn(n.a[e],e),wrn(n,t)}function c2(n,t){var e;n.e=new Jm,m$(e=wDn(t),n.c),IDn(n,e,0)}function a2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.a,r)}function u2(n,t,e,i){var r;(r=new vu).a=t,r.b=e,r.c=i,DH(n.b,r)}function o2(n){var t,e;return e=t_n(t=new lX,n),yzn(t),e}function s2(){var n,t;return n=new Kp,WB(V$t,t=n),t}function h2(n){return n.j.c=x8(Ant,HWn,1,0,5,1),TV(n.c),gV(n.a),n}function f2(n){return MM(),cL(n.g,10)?BB(n.g,10):null}function l2(n){return!EV(n).dc()&&(L$(n,new m),!0)}function b2(n){if(!("stack"in n))try{throw n}catch(t){}return n}function w2(n,t){if(n<0||n>=t)throw Hp(new Ay(LCn(n,t)));return n}function d2(n,t,e){if(n<0||t<n||t>e)throw Hp(new Ay(oPn(n,t,e)))}function g2(n,t){if(TU(n.a,t),t.d)throw Hp(new dy(IYn));t.d=n}function p2(n,t){if(t.$modCount!=n.$modCount)throw Hp(new vv)}function v2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function m2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function y2(n,t){return!!cL(t,42)&&Mmn(n.a,BB(t,42))}function k2(n,t){return n.a<=n.b&&(t.ud(n.a++),!0)}function j2(n){var t;return JO(n)?-0==(t=n)?0:t:pnn(n)}function E2(n){var t;return EW(n),t=new F,gE(n.a,new gw(t)),t}function T2(n){var t;return EW(n),t=new _,gE(n.a,new dw(t)),t}function M2(n,t){this.a=n,Sb.call(this,n),LZ(t,n.gc()),this.b=t}function S2(n){this.e=n,this.b=this.e.a.entries(),this.a=new Array}function P2(n){return yq(n.e.Hd().gc()*n.c.Hd().gc(),273,new Gf(n))}function C2(n){return new J6((lin(n,NVn),ttn(rbn(rbn(5,n),n/10|0))))}function I2(n){return BB(Qgn(n,x8(Gut,u1n,11,n.c.length,0,1)),1943)}function O2(n,t,e){return e.f.c.length>0?BU(n.a,t,e):BU(n.b,t,e)}function A2(n,t,e){n.d&&y7(n.d.e,n),n.d=t,n.d&&kG(n.d.e,e,n)}function $2(n,t){vXn(t,n),aH(n.d),aH(BB(mMn(n,(HXn(),Agt)),207))}function L2(n,t){pXn(t,n),cH(n.d),cH(BB(mMn(n,(HXn(),Agt)),207))}function N2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.fe()),i}function x2(n,t){var e,i;return i=null,(e=dnn(n,t))&&(i=e.ie()),i}function D2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=e.ie()),i}function R2(n,t){var e,i;return i=null,(e=zJ(n,t))&&(i=yPn(e)),i}function K2(n,t,e){var i;return i=Qdn(e),wKn(n.g,i,t),wKn(n.i,t,e),t}function _2(n,t,e){var i;i=Ldn();try{return dR(n,t,e)}finally{y3(i)}}function F2(n){var t;t=n.Wg(),this.a=cL(t,69)?BB(t,69).Zh():t.Kc()}function B2(){Ym.call(this),this.j.c=x8(Ant,HWn,1,0,5,1),this.a=-1}function H2(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function q2(n,t,e,i){this.e=i,this.d=null,this.c=n,this.a=t,this.b=e}function G2(n,t,e){this.d=new Fd(this),this.e=n,this.i=t,this.f=e}function z2(){z2=O,Aft=new DP(eJn,0),$ft=new DP("TOP_LEFT",1)}function U2(){U2=O,Tmt=JW(iln(1),iln(4)),Emt=JW(iln(1),iln(2))}function X2(){X2=O,JEt=lhn((IM(),Pun(Gk(tTt,1),$Vn,551,0,[QEt])))}function W2(){W2=O,VEt=lhn((CM(),Pun(Gk(YEt,1),$Vn,482,0,[XEt])))}function V2(){V2=O,UTt=lhn((OM(),Pun(Gk(VTt,1),$Vn,530,0,[GTt])))}function Q2(){Q2=O,act=lhn((wM(),Pun(Gk(Pct,1),$Vn,481,0,[rct])))}function Y2(){return Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])}function J2(){return Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])}function Z2(){return qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])}function n3(){return Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])}function t3(){return Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])}function e3(){return Iun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])}function i3(n,t,e,i){return cL(e,54)?new Ox(n,t,e,i):new sz(n,t,e,i)}function r3(){return Oun(),Pun(Gk(Ist,1),$Vn,411,0,[vst,mst,yst,kst])}function c3(n){return n.j==(kUn(),SIt)&&SN(UOn(n),oIt)}function a3(n,t){var e;SZ(e=t.a,t.c.d),MZ(e,t.d.d),Ztn(e.a,n.n)}function u3(n,t){return BB($N(Iz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function o3(n,t){return BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)}function s3(n){return new w1(tcn(BB(n.a.dd(),14).gc(),n.a.cd()),16)}function h3(n){return cL(n,14)?BB(n,14).dc():!n.Kc().Ob()}function f3(n){return MM(),cL(n.g,145)?BB(n.g,145):null}function l3(n){if(n.e.g!=n.b)throw Hp(new vv);return!!n.c&&n.d>0}function b3(n){return Px(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function w3(n,t){kW(t),$X(n.a,n.c,t),n.c=n.c+1&n.a.length-1,wyn(n)}function d3(n,t){kW(t),n.b=n.b-1&n.a.length-1,$X(n.a,n.b,t),wyn(n)}function g3(n,t){var e;for(e=n.j.c.length;e<t;e++)WB(n.j,n.rg())}function p3(n,t,e,i){var r;return r=i[t.g][e.g],Gy(MD(mMn(n.a,r)))}function v3(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function m3(n,t,e,i,r){this.a=n,this.e=t,this.f=e,this.b=i,this.g=r}function y3(n){n&&Inn((sk(),ttt)),--ctt,n&&-1!=utt&&(iS(utt),utt=-1)}function k3(){return bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])}function j3(){return zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])}function E3(){return Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])}function T3(){return mdn(),Pun(Gk(YIt,1),$Vn,374,0,[KIt,_It,RIt,DIt])}function M3(){return Xyn(),Pun(Gk(RCt,1),$Vn,285,0,[MCt,jCt,ECt,TCt])}function S3(){return Mbn(),Pun(Gk(oCt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])}function P3(){return Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZIt,tOt,nOt])}function C3(){return Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])}function I3(n){return hZ(),hU(fAt,n)?BB(RX(fAt,n),331).ug():null}function O3(n,t,e){return t<0?qIn(n,e):BB(e,66).Nj().Sj(n,n.yh(),t)}function A3(n,t,e){var i;return i=Qdn(e),wKn(n.d,i,t),VW(n.e,t,e),t}function $3(n,t,e){var i;return i=Qdn(e),wKn(n.j,i,t),VW(n.k,t,e),t}function L3(n){var t;return tE(),t=new io,n&&HLn(t,n),t}function N3(n){var t;return t=n.ri(n.i),n.i>0&&aHn(n.g,0,t,0,n.i),t}function x3(n,t){var e;return nS(),!(e=BB(RX(mAt,n),55))||e.wj(t)}function D3(n){if(1!=n.p)throw Hp(new dv);return dG(n.f)<<24>>24}function R3(n){if(1!=n.p)throw Hp(new dv);return dG(n.k)<<24>>24}function K3(n){if(7!=n.p)throw Hp(new dv);return dG(n.k)<<16>>16}function _3(n){if(7!=n.p)throw Hp(new dv);return dG(n.f)<<16>>16}function F3(n){var t;for(t=0;n.Ob();)n.Pb(),t=rbn(t,1);return ttn(t)}function B3(n,t){var e;return e=new Ik,n.xd(e),e.a+="..",t.yd(e),e.a}function H3(n,t,e){var i;i=BB(RX(n.g,e),57),WB(n.a.c,new rI(t,i))}function q3(n,t,e){return Tz(MD(qI(AY(n.f,t))),MD(qI(AY(n.f,e))))}function G3(n,t,e){return UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function z3(n,t,e){return pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function U3(n,t,e){return x$n(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn))}function X3(n,t){return n==(uSn(),Cut)&&t==Cut?4:n==Cut||t==Cut?8:32}function W3(n,t){return GI(t)===GI(n)?"(this Map)":null==t?zWn:Bbn(t)}function V3(n,t){return BB(null==t?qI(AY(n.f,null)):hS(n.g,t),281)}function Q3(n,t,e){var i;return i=Qdn(e),VW(n.b,i,t),VW(n.c,t,e),t}function Y3(n,t){var e;for(e=t;e;)_x(n,e.i,e.j),e=JJ(e);return n}function J3(n,t){var e;return e=rY(HB(new C7(n,t))),Cq(new C7(n,t)),e}function Z3(n,t){var e;return ZM(),TSn(e=BB(n,66).Mj(),t),e.Ok(t)}function n4(n,t,e,i,r){WB(t,mCn(r,X$n(r,e,i))),UMn(n,r,t)}function t4(n,t,e){n.i=0,n.e=0,t!=e&&(Won(n,t,e),Xon(n,t,e))}function e4(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+sQn),lBn(n,e)}function i4(n,t,e){if(e){var i=e.ee();n.a[t]=i(e)}else delete n.a[t]}function r4(n,t,e){if(e){var i=e.ee();e=i(e)}else e=void 0;n.a[t]=e}function c4(n){if(n<0)throw Hp(new By("Negative array size: "+n))}function a4(n){return n.n||(P5(n),n.n=new YG(n,VAt,n),kY(n)),n.n}function u4(n){return Px(n.a<n.c.a.length),n.b=n.a,Ann(n),n.c.b[n.b]}function o4(n){n.b!=n.c&&(n.a=x8(Ant,HWn,1,8,5,1),n.b=0,n.c=0)}function s4(n){this.b=new xp,this.c=new xp,this.d=new xp,this.a=n}function h4(n,t){wWn(),Ap.call(this,n),this.a=t,this.c=-1,this.b=-1}function f4(n,t,e,i){j0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function l4(n,t,e,i){E0.call(this,1,e,i),Fh(this),this.c=n,this.b=t}function b4(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),this.c=n,this.a=e}function w4(n,t,e){this.e=n,this.a=Ant,this.b=ARn(t),this.c=t,this.d=e}function d4(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function g4(n){this.c=n,this.a=BB(Ikn(n),148),this.b=this.a.Aj().Nh()}function p4(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function v4(){xp.call(this),jx(this),this.d.b=this.d,this.d.a=this.d}function m4(n,t){$R.call(this),this.a=n,this.b=t,WB(this.a.b,this)}function y4(n,t){return iO(null!=t?SJ(n,t):qI(AY(n.f,t)))}function k4(n,t){return iO(null!=t?SJ(n,t):qI(AY(n.f,t)))}function j4(n,t){var e;for(e=0;e<t;++e)$X(n,e,new Ub(BB(n[e],42)))}function E4(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function T4(n,t){var e;return zsn(),0!=(e=n.j.g-t.j.g)?e:0}function M4(n,t){return kW(t),null!=n.a?PG(t.Kb(n.a)):Set}function S4(n){var t;return n?new Lq(n):(qrn(t=new fA,n),t)}function P4(n,t){return t.b.Kb(T7(n,t.c.Ee(),new yw(t)))}function C4(n){yTn(),hL(this,dG(e0(kz(n,24),sYn)),dG(e0(n,sYn)))}function I4(){I4=O,pit=lhn((hpn(),Pun(Gk(yit,1),$Vn,428,0,[dit,wit])))}function O4(){O4=O,kit=lhn((Rnn(),Pun(Gk(Kit,1),$Vn,427,0,[vit,mit])))}function A4(){A4=O,_ct=lhn((Knn(),Pun(Gk($at,1),$Vn,424,0,[Dct,Rct])))}function $4(){$4=O,zut=lhn((Srn(),Pun(Gk(Wut,1),$Vn,511,0,[qut,Hut])))}function L4(){L4=O,Iht=lhn((_nn(),Pun(Gk(Lht,1),$Vn,419,0,[Sht,Pht])))}function N4(){N4=O,Uht=lhn((g7(),Pun(Gk(Zht,1),$Vn,479,0,[Ght,qht])))}function x4(){x4=O,tmt=lhn((A6(),Pun(Gk(cmt,1),$Vn,376,0,[Zvt,Jvt])))}function D4(){D4=O,Bvt=lhn((U7(),Pun(Gk(zvt,1),$Vn,421,0,[Kvt,_vt])))}function R4(){R4=O,oht=lhn((V8(),Pun(Gk(lht,1),$Vn,422,0,[cht,aht])))}function K4(){K4=O,Nft=lhn((z2(),Pun(Gk(Glt,1),$Vn,420,0,[Aft,$ft])))}function _4(){_4=O,Pyt=lhn((O6(),Pun(Gk(xyt,1),$Vn,520,0,[Myt,Tyt])))}function F4(){F4=O,Gmt=lhn((Q4(),Pun(Gk(Vmt,1),$Vn,523,0,[Hmt,Bmt])))}function B4(){B4=O,iyt=lhn((gJ(),Pun(Gk(ayt,1),$Vn,516,0,[tyt,nyt])))}function H4(){H4=O,uyt=lhn((oZ(),Pun(Gk(Syt,1),$Vn,515,0,[ryt,cyt])))}function q4(){q4=O,Dyt=lhn((dJ(),Pun(Gk(Byt,1),$Vn,455,0,[Lyt,Nyt])))}function G4(){G4=O,Gkt=lhn((B0(),Pun(Gk(Jkt,1),$Vn,425,0,[Hkt,Bkt])))}function z4(){z4=O,Zkt=lhn((Prn(),Pun(Gk(ijt,1),$Vn,495,0,[Qkt,Ykt])))}function U4(){U4=O,Fkt=lhn((sZ(),Pun(Gk(qkt,1),$Vn,480,0,[Rkt,Kkt])))}function X4(){X4=O,ojt=lhn((D9(),Pun(Gk(ljt,1),$Vn,426,0,[cjt,ajt])))}function W4(){W4=O,QTt=lhn((Lun(),Pun(Gk(YTt,1),$Vn,429,0,[WTt,XTt])))}function V4(){V4=O,eTt=lhn(($6(),Pun(Gk(oTt,1),$Vn,430,0,[nTt,ZEt])))}function Q4(){Q4=O,Hmt=new JP("UPPER",0),Bmt=new JP("LOWER",1)}function Y4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function J4(n,t){var e;qQ(e=new py,"x",t.a),qQ(e,"y",t.b),nW(n,e)}function Z4(n,t){var e,i;i=!1;do{i|=e=bon(n,t)}while(e);return i}function n5(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function t5(n,t){var e;for(e=t;e;)_x(n,-e.i,-e.j),e=JJ(e);return n}function e5(n,t){var e,i;for(kW(t),i=n.Kc();i.Ob();)e=i.Pb(),t.td(e)}function i5(n,t){var e;return new vT(e=t.cd(),n.e.pc(e,BB(t.dd(),14)))}function r5(n,t,e,i){var r;(r=new $).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function c5(n,t,e){var i;return l1(t,n.c.length),i=n.c[t],n.c[t]=e,i}function a5(n,t,e){return BB(null==t?jCn(n.f,null,e):ubn(n.g,t,e),281)}function u5(n){return n.c&&n.d?p0(n.c)+"->"+p0(n.d):"e_"+PN(n)}function o5(n,t){return(Qln(n),jE(new Rq(n,new Q9(t,n.a)))).sd(tit)}function s5(){return yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])}function h5(){return kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])}function f5(n){return Dk(),function(){return _2(n,this,arguments)}}function l5(){return Date.now?Date.now():(new Date).getTime()}function b5(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function w5(n){if(!n.c.Sb())throw Hp(new yv);return n.a=!0,n.c.Ub()}function d5(n){n.i=0,yS(n.b,null),yS(n.c,null),n.a=null,n.e=null,++n.g}function g5(n){dS.call(this,null==n?zWn:Bbn(n),cL(n,78)?BB(n,78):null)}function p5(n){eWn(),Bp(this),this.a=new YT,dsn(this,n),DH(this.a,n)}function v5(){xA(this),this.b=new xC(RQn,RQn),this.a=new xC(KQn,KQn)}function m5(n,t){this.c=0,this.b=t,pO.call(this,n,17493),this.a=this.c}function y5(n){k5(),Qet||(this.c=n,this.e=!0,this.a=new Np)}function k5(){k5=O,Qet=!0,Wet=!1,Vet=!1,Jet=!1,Yet=!1}function j5(n,t){return!!cL(t,149)&&mK(n.c,BB(t,149).c)}function E5(n,t){var e;return e=0,n&&(e+=n.f.a/2),t&&(e+=t.f.a/2),e}function T5(n,t){return BB(lnn(n.d,t),23)||BB(lnn(n.e,t),23)}function M5(n){this.b=n,AL.call(this,n),this.a=BB(yan(this.b.a,4),126)}function S5(n){this.b=n,ax.call(this,n),this.a=BB(yan(this.b.a,4),126)}function P5(n){return n.t||(n.t=new dp(n),sln(new xy(n),0,n.t)),n.t}function C5(){return Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])}function I5(){return cpn(),Pun(Gk(JCt,1),$Vn,249,0,[BCt,qCt,_Ct,FCt,HCt])}function O5(){return rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])}function A5(){return $Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])}function $5(){return Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])}function L5(){return Vvn(),Pun(Gk(Cht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])}function N5(){return YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])}function x5(){return LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Cst,Sst,Tst])}function D5(){return Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])}function R5(){var n,t;R5=O,iE(),t=new Ev,tLt=t,n=new Om,eLt=n}function K5(n){var t;return n.c||cL(t=n.r,88)&&(n.c=BB(t,26)),n.c}function _5(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function F5(n){return M$(n&SQn,n>>22&SQn,n<0?PQn:0)}function B5(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)jW(t[e])}function H5(n,t){var e,i;(e=BB(bfn(n.c,t),14))&&(i=e.gc(),e.$b(),n.d-=i)}function q5(n,t){var e;return!!(e=lsn(n,t.cd()))&&cV(e.e,t.dd())}function G5(n,t){return 0==t||0==n.e?n:t>0?Edn(n,t):Ixn(n,-t)}function z5(n,t){return 0==t||0==n.e?n:t>0?Ixn(n,t):Edn(n,-t)}function U5(n){if(dAn(n))return n.c=n.a,n.a.Pb();throw Hp(new yv)}function X5(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(uSn(),Mut)&&e.k==Mut}function W5(n){var t;return qan(t=new wY,n),hon(t,(HXn(),vgt),null),t}function V5(n,t,e){var i;return(i=n.Yg(t))>=0?n._g(i,e,!0):cOn(n,t,e)}function Q5(n,t,e,i){var r;for(r=0;r<Zit;r++)XG(n.a[t.g][r],e,i[t.g])}function Y5(n,t,e,i){var r;for(r=0;r<nrt;r++)UG(n.a[r][t.g],e,i[t.g])}function J5(n,t,e,i,r){j0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function Z5(n,t,e,i,r){E0.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function n6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.a=e}function t6(n,t,e,i,r){i6.call(this,t,i,r),Fh(this),this.c=n,this.b=e}function e6(n,t,e){jp.call(this,e),this.b=n,this.c=t,this.d=(Bwn(),z$t)}function i6(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function r6(n,t,e){var i;Tcn(i=new X$(n.a),n.a.a),jCn(i.f,t,e),n.a.a=i}function c6(n,t){n.qi(n.i+1),jL(n,n.i,n.oi(n.i,t)),n.bi(n.i++,t),n.ci()}function a6(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.di(e,t),n.ci()}function u6(n){var t;return yX(n),$on(t=new J6(ZW(n.length)),n),t}function o6(n){var t;return yX(n),JPn(t=n?new t_(n):HB(n.Kc())),sfn(t)}function s6(n,t){var e;return l1(t,n.c.length),e=n.c[t],PE(n.c,t,1),e}function h6(n,t){var e;return!(e=BB(n.c.xc(t),14))&&(e=n.ic(t)),n.pc(t,e)}function f6(n,t){var e,i;return kW(n),e=n,kW(t),e==(i=t)?0:e<i?-1:1}function l6(n){var t;return t=n.e+n.f,isNaN(t)&&WK(n.d)?n.d:t}function b6(n,t){return n.a?oO(n.a,n.b):n.a=new lN(n.d),aO(n.a,t),n}function w6(n,t){if(n<0||n>t)throw Hp(new Ay(dCn(n,t,"index")));return n}function d6(n,t,e,i){var r;return vTn(r=x8(ANt,hQn,25,t,15,1),n,t,e,i),r}function g6(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),lBn(n,e)}function p6(n,t){return e.Math.min(W8(t.a,n.d.d.c),W8(t.b,n.d.d.c))}function v6(n,t){return XI(t)?null==t?gAn(n.f,null):Gan(n.g,t):gAn(n.f,t)}function m6(n){this.c=n,this.a=new Wb(this.c.a),this.b=new Wb(this.c.b)}function y6(){this.e=new Np,this.c=new Np,this.d=new Np,this.b=new Np}function k6(){this.g=new Bv,this.b=new Bv,this.a=new Np,this.k=new Np}function j6(n,t,e){this.a=n,this.c=t,this.d=e,WB(t.e,this),WB(e.b,this)}function E6(n,t){gO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function T6(n,t){pO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function M6(n,t){vO.call(this,t.rd(),-6&t.qd()),kW(n),this.a=n,this.b=t}function S6(n,t,e){this.a=n,this.b=t,this.c=e,WB(n.t,this),WB(t.i,this)}function P6(){this.b=new YT,this.a=new YT,this.b=new YT,this.a=new YT}function C6(){C6=O,TMt=new up("org.eclipse.elk.labels.labelManager")}function I6(){I6=O,est=new iR("separateLayerConnections",(Iun(),ast))}function O6(){O6=O,Myt=new uC("REGULAR",0),Tyt=new uC("CRITICAL",1)}function A6(){A6=O,Zvt=new XP("STACKED",0),Jvt=new XP("SEQUENCED",1)}function $6(){$6=O,nTt=new TC("FIXED",0),ZEt=new TC("CENTER_NODE",1)}function L6(n,t){var e;return e=xGn(n,t),n.b=new mrn(e.c.length),yqn(n,e)}function N6(n,t,e){return++n.e,--n.f,BB(n.d[t].$c(e),133).dd()}function x6(n){var t;return n.a||cL(t=n.r,148)&&(n.a=BB(t,148)),n.a}function D6(n){return n.a?n.e?D6(n.e):null:n}function R6(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function K6(n,t){return kW(t),n.c<n.d&&(n.ze(t,n.c++),!0)}function _6(n,t){return!!hU(n.a,t)&&(v6(n.a,t),!0)}function F6(n){var t;return t=n.cd(),RB(BB(n.dd(),14).Nc(),new Vf(t))}function B6(n){var t;return t=BB(VU(n.b,n.b.length),9),new YK(n.a,t,n.c)}function H6(n){return Qln(n),new AD(n,new ZB(n,n.a.e,4|n.a.d))}function q6(n){var t;for(EW(n),t=0;n.a.sd(new fn);)t=rbn(t,1);return t}function G6(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.$f(t[r],i,e)}function z6(n,t){var e;n.C&&((e=BB(oV(n.b,t),124).n).d=n.C.d,e.a=n.C.a)}function U6(n,t,e){return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),n.a[t][e]}function X6(n,t){ODn(),this.e=n,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[t])}function W6(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function V6(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 Q6(n,t,e,i){mFn(n,t,e,pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))}function Y6(n,t){OTn(t,"Label management",1),iO(mMn(n,(C6(),TMt))),HSn(t)}function J6(n){xA(this),vH(n>=0,"Initial capacity must not be negative")}function Z6(){Z6=O,Wit=lhn((Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])))}function n8(){n8=O,trt=lhn((J9(),Pun(Gk(ert,1),$Vn,461,0,[Yit,Qit,Jit])))}function t8(){t8=O,urt=lhn((G7(),Pun(Gk(Ort,1),$Vn,462,0,[crt,rrt,irt])))}function e8(){e8=O,Zet=lhn((qsn(),Pun(Gk(nit,1),$Vn,132,0,[zet,Uet,Xet])))}function i8(){i8=O,Lat=lhn((q7(),Pun(Gk(Hat,1),$Vn,379,0,[Oat,Iat,Aat])))}function r8(){r8=O,gut=lhn((Bfn(),Pun(Gk(mut,1),$Vn,423,0,[wut,but,lut])))}function c8(){c8=O,bht=lhn((Oin(),Pun(Gk(pht,1),$Vn,314,0,[hht,sht,fht])))}function a8(){a8=O,vht=lhn((uin(),Pun(Gk(Tht,1),$Vn,337,0,[wht,ght,dht])))}function u8(){u8=O,Nht=lhn((Jun(),Pun(Gk(Bht,1),$Vn,450,0,[Aht,Oht,$ht])))}function o8(){o8=O,_st=lhn((Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))}function s8(){s8=O,Oft=lhn((z7(),Pun(Gk(Lft,1),$Vn,303,0,[Pft,Cft,Sft])))}function h8(){h8=O,Mft=lhn((Kan(),Pun(Gk(Ift,1),$Vn,292,0,[jft,Eft,kft])))}function f8(){f8=O,svt=lhn((Mhn(),Pun(Gk(wvt,1),$Vn,378,0,[cvt,avt,uvt])))}function l8(){l8=O,Yvt=lhn((Hcn(),Pun(Gk(nmt,1),$Vn,375,0,[Xvt,Wvt,Vvt])))}function b8(){b8=O,Rvt=lhn((mon(),Pun(Gk(Fvt,1),$Vn,339,0,[Nvt,Lvt,xvt])))}function w8(){w8=O,Uvt=lhn((ain(),Pun(Gk(Qvt,1),$Vn,452,0,[Gvt,Hvt,qvt])))}function d8(){d8=O,gmt=lhn(($un(),Pun(Gk(Smt,1),$Vn,377,0,[bmt,wmt,lmt])))}function g8(){g8=O,amt=lhn((Usn(),Pun(Gk(hmt,1),$Vn,336,0,[emt,imt,rmt])))}function p8(){p8=O,fmt=lhn((dcn(),Pun(Gk(dmt,1),$Vn,338,0,[smt,umt,omt])))}function v8(){v8=O,Nmt=lhn((oin(),Pun(Gk(xmt,1),$Vn,454,0,[Omt,Amt,$mt])))}function m8(){m8=O,rjt=lhn((Cbn(),Pun(Gk(ujt,1),$Vn,442,0,[ejt,njt,tjt])))}function y8(){y8=O,bjt=lhn((Hsn(),Pun(Gk(Gjt,1),$Vn,380,0,[sjt,hjt,fjt])))}function k8(){k8=O,eEt=lhn((Sbn(),Pun(Gk(NEt,1),$Vn,381,0,[Zjt,nEt,Jjt])))}function j8(){j8=O,Qjt=lhn((Bcn(),Pun(Gk(Yjt,1),$Vn,293,0,[Xjt,Wjt,Ujt])))}function E8(){E8=O,UEt=lhn((Pbn(),Pun(Gk(WEt,1),$Vn,437,0,[HEt,qEt,GEt])))}function T8(){T8=O,kCt=lhn((ufn(),Pun(Gk(SCt,1),$Vn,334,0,[vCt,pCt,mCt])))}function M8(){M8=O,VPt=lhn((Rtn(),Pun(Gk(nCt,1),$Vn,272,0,[zPt,UPt,XPt])))}function S8(){return QEn(),Pun(Gk(aIt,1),$Vn,98,0,[YCt,QCt,VCt,UCt,WCt,XCt])}function P8(n,t){return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),rdn(n.o,t)}function C8(n){return!n.g&&(n.g=new oo),!n.g.d&&(n.g.d=new lp(n)),n.g.d}function I8(n){return!n.g&&(n.g=new oo),!n.g.a&&(n.g.a=new bp(n)),n.g.a}function O8(n){return!n.g&&(n.g=new oo),!n.g.b&&(n.g.b=new fp(n)),n.g.b}function A8(n){return!n.g&&(n.g=new oo),!n.g.c&&(n.g.c=new wp(n)),n.g.c}function $8(n,t,e){var i,r;for(r=new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function L8(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.fi(i,r)}function N8(n,t,e,i){var r;return AFn(r=x8(ANt,hQn,25,t+1,15,1),n,t,e,i),r}function x8(n,t,e,i,r,c){var a;return a=Bmn(r,i),10!=r&&Pun(Gk(n,c),t,e,r,a),a}function D8(n,t,e,i){return e&&(i=e.gh(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function R8(n,t,e,i){return e&&(i=e.ih(t,Awn(e.Tg(),n.c.Lj()),null,i)),i}function K8(n,t,e){BB(n.b,65),BB(n.b,65),BB(n.b,65),Otn(n.a,new N_(e,t,n))}function _8(n,t,e){if(n<0||t>e||t<n)throw Hp(new Ok(mYn+n+kYn+t+hYn+e))}function F8(n){if(!n)throw Hp(new Fy("Unable to add element to queue"))}function B8(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Np)}function H8(n,t){PS.call(this,n,t),this.a=x8(Ket,kVn,436,2,0,1),this.b=!0}function q8(n){non.call(this,n,0),jx(this),this.d.b=this.d,this.d.a=this.d}function G8(n){var t;return 0==(t=n.b).b?null:BB(Dpn(t,0),188).b}function z8(n,t){var e;return(e=new q).c=!0,e.d=t.dd(),YGn(n,t.cd(),e)}function U8(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),lBn(n,e)}function X8(n,t,e){var i;(i=n.b[e.c.p][e.p]).b+=t.b,i.c+=t.c,i.a+=t.a,++i.a}function W8(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function V8(){V8=O,cht=new EP("QUADRATIC",0),aht=new EP("SCANLINE",1)}function Q8(){Q8=O,mmt=WG(dq(new B2,(yMn(),Rat),(lWn(),kot)),Bat,qot)}function Y8(){return wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])}function J8(){return wvn(),Pun(Gk(nSt,1),$Vn,248,0,[CMt,AMt,$Mt,LMt,IMt,OMt])}function Z8(){return $Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])}function n9(){return JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])}function t9(){return Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])}function e9(){return TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])}function i9(){return gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])}function r9(){return DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])}function c9(){return lIn(),Pun(Gk(IIt,1),$Vn,273,0,[rIt,eIt,iIt,tIt,nIt,cIt])}function a9(){return nMn(),Pun(Gk(yCt,1),$Vn,312,0,[aCt,rCt,uCt,eCt,cCt,iCt])}function u9(){return uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])}function o9(n){Mx(!!n.c),p2(n.e,n),n.c.Qb(),n.c=null,n.b=dun(n),bD(n.e,n)}function s9(n){return p2(n.c.a.e,n),Px(n.b!=n.c.a.d),n.a=n.b,n.b=n.b.a,n.a}function h9(n){var t;return n.a||-1==n.b||(t=n.c.Tg(),n.a=itn(t,n.b)),n.a}function f9(n,t){return!(n.hi()&&n.Hc(t)||(n.Yh(t),0))}function l9(n,t){return OY(t,"Horizontal alignment cannot be null"),n.b=t,n}function b9(n,t,e){var i;return wWn(),i=ZUn(n,t),e&&i&&gW(n)&&(i=null),i}function w9(n,t,e){var i;for(i=n.Kc();i.Ob();)ZRn(BB(i.Pb(),37),t,e)}function d9(n,t){var e;for(e=t.Kc();e.Ob();)$Kn(n,BB(e.Pb(),37),0,0)}function g9(n,t,i){var r;n.d[t.g]=i,(r=n.g.c)[t.g]=e.Math.max(r[t.g],i+1)}function p9(n,t){var e,i,r;return r=n.r,i=n.d,(e=cHn(n,t,!0)).b!=r||e.a!=i}function v9(n,t){return lS(n.e,t)||Jgn(n.e,t,new ipn(t)),BB(lnn(n.e,t),113)}function m9(n,t,e,i){return kW(n),kW(t),kW(e),kW(i),new jU(n,t,new G)}function y9(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=new Zz(this,t,e,i)}function k9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.b=e}function j9(n,t,e,i,r,c){H2.call(this,t,i,r,c),Fh(this),this.c=n,this.a=e}function E9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function T9(n,t,e){var i,r;r=null,(i=zJ(n,e))&&(r=yPn(i)),Xgn(t,e,r)}function M9(n,t,e){var i;return(i=$$n(n.b,t))?NHn(F7(n,i),e):null}function S9(n,t){var e;return(e=n.Yg(t))>=0?n._g(e,!0,!0):cOn(n,t,!0)}function P9(n,t){return Pln(Gy(MD(mMn(n,(hWn(),Tlt)))),Gy(MD(mMn(t,Tlt))))}function C9(){C9=O,Ukt=ogn(ogn(FM(new B2,(zyn(),Kyt)),(DPn(),Qyt)),Uyt)}function I9(n,t,e){var i;return i=Non(n,t,e),n.b=new mrn(i.c.length),sDn(n,i)}function O9(n){if(n.b<=0)throw Hp(new yv);return--n.b,n.a-=n.c.c,iln(n.a)}function A9(n){var t;if(!n.a)throw Hp(new lV);return t=n.a,n.a=JJ(n.a),t}function $9(n){for(;!n.a;)if(!TK(n.c,new pw(n)))return!1;return!0}function L9(n){return yX(n),cL(n,198)?BB(n,198):new ol(n)}function N9(n){x9(),BB(n.We((sWn(),fPt)),174).Fc((lIn(),iIt)),n.Ye(hPt,null)}function x9(){x9=O,tMt=new bu,iMt=new wu,eMt=vsn((sWn(),hPt),tMt,qSt,iMt)}function D9(){D9=O,cjt=new pC("LEAF_NUMBER",0),ajt=new pC("NODE_SIZE",1)}function R9(n,t,e){n.a=t,n.c=e,n.b.a.$b(),yQ(n.d),n.e.a.c=x8(Ant,HWn,1,0,5,1)}function K9(n){n.a=x8(ANt,hQn,25,n.b+1,15,1),n.c=x8(ANt,hQn,25,n.b,15,1),n.d=0}function _9(n,t){n.a.ue(t.d,n.b)>0&&(WB(n.c,new mH(t.c,t.d,n.d)),n.b=t.d)}function F9(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.g[t]}function B9(n,t,e){if(xsn(n,e),null!=e&&!n.wj(e))throw Hp(new lv);return e}function H9(n){var t;if(n.Ek())for(t=n.i-1;t>=0;--t)Wtn(n,t);return N3(n)}function q9(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function G9(n,t){var e;return c4(t),(e=m7(n.slice(0,t),n)).length=t,e}function z9(n,t,e,i){PQ(),i=i||wet,gCn(n.slice(t,e),n,t,e,-t,i)}function U9(n,t,e,i,r){return t<0?cOn(n,e,i):BB(e,66).Nj().Pj(n,n.yh(),t,i,r)}function X9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function W9(n){return cL(n,172)?""+BB(n,172).a:null==n?null:Bbn(n)}function V9(n,t){if(t.a)throw Hp(new dy(IYn));TU(n.a,t),t.a=n,!n.j&&(n.j=t)}function Q9(n,t){vO.call(this,t.rd(),-16449&t.qd()),kW(n),this.a=n,this.c=t}function Y9(n,t){var e,i;return i=t/n.c.Hd().gc()|0,e=t%n.c.Hd().gc(),U6(n,i,e)}function J9(){J9=O,Yit=new GS(cJn,0),Qit=new GS(eJn,1),Jit=new GS(aJn,2)}function Z9(){Z9=O,Net=new gS("All",0),xet=new LA,Det=new A$,Ret=new NA}function n7(){n7=O,_et=lhn((Z9(),Pun(Gk(Fet,1),$Vn,297,0,[Net,xet,Det,Ret])))}function t7(){t7=O,rut=lhn((Aun(),Pun(Gk(dut,1),$Vn,405,0,[Zat,eut,nut,tut])))}function e7(){e7=O,_rt=lhn((Dan(),Pun(Gk(Grt,1),$Vn,406,0,[Rrt,Nrt,xrt,Drt])))}function i7(){i7=O,zrt=lhn((Hpn(),Pun(Gk(Urt,1),$Vn,323,0,[Brt,Frt,Hrt,qrt])))}function r7(){r7=O,ict=lhn((qpn(),Pun(Gk(cct,1),$Vn,394,0,[Zrt,Jrt,nct,tct])))}function c7(){c7=O,Hyt=lhn((zyn(),Pun(Gk(qyt,1),$Vn,393,0,[Ryt,Kyt,_yt,Fyt])))}function a7(){a7=O,ost=lhn((Iun(),Pun(Gk(pst,1),$Vn,360,0,[ast,rst,cst,ist])))}function u7(){u7=O,zjt=lhn((Omn(),Pun(Gk(Vjt,1),$Vn,340,0,[qjt,Bjt,Hjt,Fjt])))}function o7(){o7=O,Est=lhn((Oun(),Pun(Gk(Ist,1),$Vn,411,0,[vst,mst,yst,kst])))}function s7(){s7=O,dvt=lhn((bvn(),Pun(Gk(kvt,1),$Vn,197,0,[lvt,bvt,fvt,hvt])))}function h7(){h7=O,fOt=lhn((Bsn(),Pun(Gk(wOt,1),$Vn,396,0,[uOt,oOt,aOt,sOt])))}function f7(){f7=O,PCt=lhn((Xyn(),Pun(Gk(RCt,1),$Vn,285,0,[MCt,jCt,ECt,TCt])))}function l7(){l7=O,tCt=lhn((Mbn(),Pun(Gk(oCt,1),$Vn,218,0,[ZPt,YPt,QPt,JPt])))}function b7(){b7=O,rOt=lhn((Fwn(),Pun(Gk(cOt,1),$Vn,311,0,[eOt,ZIt,tOt,nOt])))}function w7(){w7=O,BIt=lhn((mdn(),Pun(Gk(YIt,1),$Vn,374,0,[KIt,_It,RIt,DIt])))}function d7(){d7=O,qBn(),HLt=RQn,BLt=KQn,GLt=new Nb(RQn),qLt=new Nb(KQn)}function g7(){g7=O,Ght=new OP(QZn,0),qht=new OP("IMPROVE_STRAIGHTNESS",1)}function p7(n,t){return hH(),WB(n,new rI(t,iln(t.e.c.length+t.g.c.length)))}function v7(n,t){return hH(),WB(n,new rI(t,iln(t.e.c.length+t.g.c.length)))}function m7(n,t){return 10!=vnn(t)&&Pun(tsn(t),t.hm,t.__elementTypeId$,vnn(t),n),n}function y7(n,t){var e;return-1!=(e=E7(n,t,0))&&(s6(n,e),!0)}function k7(n,t){var e;return(e=BB(v6(n.e,t),387))?(RH(e),e.e):null}function j7(n){var t;return JO(n)&&(t=0-n,!isNaN(t))?t:uan(aon(n))}function E7(n,t,e){for(;e<n.c.length;++e)if(cV(t,n.c[e]))return e;return-1}function T7(n,t,e){var i;return EW(n),(i=new sn).a=t,n.a.Nb(new IS(i,e)),i.a}function M7(n){var t;return EW(n),t=x8(xNt,qQn,25,0,15,1),gE(n.a,new ww(t)),t}function S7(n){var t;return t=BB(xq(n.j,0),11),BB(mMn(t,(hWn(),dlt)),11)}function P7(n){var t;if(!Zin(n))throw Hp(new yv);return n.e=1,t=n.d,n.d=null,t}function C7(n,t){var e;this.f=n,this.b=t,e=BB(RX(n.b,t),283),this.c=e?e.b:null}function I7(){G_(),this.b=new xp,this.f=new xp,this.g=new xp,this.e=new xp}function O7(n,t){this.a=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.a),this.b=t}function A7(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--BB(xq(n.c.a,t),10).p}function $7(n){var t;null!=(t=n.Ai())&&-1!=n.d&&BB(t,92).Ng(n),n.i&&n.i.Fi()}function L7(n){V$(this),this.g=n?CY(n,n.$d()):null,this.f=n,jQ(this),this._d()}function N7(n,t,e,i,r,c,a){kin.call(this,t,i,r,c,a),Fh(this),this.c=n,this.b=e}function x7(n,t,e,i,r){return kW(n),kW(t),kW(e),kW(i),kW(r),new jU(n,t,i)}function D7(n,t){if(t<0)throw Hp(new Ay(n5n+t));return g3(n,t+1),xq(n.j,t)}function R7(n,t,e,i){if(!n)throw Hp(new _y($Rn(t,Pun(Gk(Ant,1),HWn,1,5,[e,i]))))}function K7(n,t){return cV(t,xq(n.f,0))||cV(t,xq(n.f,1))||cV(t,xq(n.f,2))}function _7(n,t){LK(BB(BB(n.f,33).We((sWn(),uPt)),98))&&Qbn(yV(BB(n.f,33)),t)}function F7(n,t){var e,i;return!(i=(e=BB(t,675)).Oh())&&e.Rh(i=new RI(n,t)),i}function B7(n,t){var e,i;return!(i=(e=BB(t,677)).pk())&&e.tk(i=new K0(n,t)),i}function H7(n){return n.b||(n.b=new JG(n,VAt,n),!n.a&&(n.a=new oR(n,n))),n.b}function q7(){q7=O,Oat=new WS("XY",0),Iat=new WS("X",1),Aat=new WS("Y",2)}function G7(){G7=O,crt=new zS("TOP",0),rrt=new zS(eJn,1),irt=new zS(oJn,2)}function z7(){z7=O,Pft=new xP(QZn,0),Cft=new xP("TOP",1),Sft=new xP(oJn,2)}function U7(){U7=O,Kvt=new GP("INPUT_ORDER",0),_vt=new GP("PORT_DEGREE",1)}function X7(){X7=O,btt=M$(SQn,SQn,524287),wtt=M$(0,0,CQn),dtt=F5(1),F5(2),gtt=F5(0)}function W7(n,t,e){n.a.c=x8(Ant,HWn,1,0,5,1),Xqn(n,t,e),0==n.a.c.length||f_n(n,t)}function V7(n){var t,e;return YU(n,0,e=n.length,t=x8(ONt,WVn,25,e,15,1),0),t}function Q7(n){var t;return n.dh()||(t=bX(n.Tg())-n.Ah(),n.ph().bk(t)),n.Pg()}function Y7(n){var t;return null==(t=een(yan(n,32)))&&(fgn(n),t=een(yan(n,32))),t}function J7(n,t){var e;return(e=Awn(n.d,t))>=0?Zpn(n,e,!0,!0):cOn(n,t,!0)}function Z7(n,t){var e,i;return MM(),e=f3(n),i=f3(t),!!e&&!!i&&!Kpn(e.k,i.k)}function nnn(n,t){Pen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function tnn(n,t){Cen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function enn(n,t){Sen(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function inn(n,t){Men(n,null==t||WK((kW(t),t))||isNaN((kW(t),t))?0:(kW(t),t))}function rnn(n){(this.q?this.q:(SQ(),SQ(),het)).Ac(n.q?n.q:(SQ(),SQ(),het))}function cnn(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function ann(n,t){return cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n)}function unn(n,t){Vrt=new it,ect=t,BB((Wrt=n).b,65),K8(Wrt,Vrt,null),uqn(Wrt)}function onn(n,t,e){var i;return i=n.g[t],jL(n,t,n.oi(t,e)),n.gi(t,e,i),n.ci(),i}function snn(n,t){var e;return(e=n.Xc(t))>=0&&(n.$c(e),!0)}function hnn(n){var t;return n.d!=n.r&&(t=Ikn(n),n.e=!!t&&t.Cj()==E9n,n.d=t),n.e}function fnn(n,t){var e;for(yX(n),yX(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function lnn(n,t){var e;return(e=BB(RX(n.e,t),387))?(uL(n,e),e.e):null}function bnn(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function wnn(n,t){return Qln(n),new Rq(n,new KK(new M6(t,n.a)))}function dnn(n,t){var e=n.a[t],i=(Zun(),ftt)[typeof e];return i?i(e):khn(typeof e)}function gnn(n){switch(n.g){case 0:return DWn;case 1:return-1;default:return 0}}function pnn(n){return Kkn(n,(X7(),gtt))<0?-CN(aon(n)):n.l+n.m*IQn+n.h*OQn}function vnn(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function mnn(n){var t;return null!=(t=0==n.b.c.length?null:xq(n.b,0))&&hrn(n,0),t}function ynn(n,t){for(;t[0]<n.length&&GO(" \t\r\n",YTn(fV(n,t[0])))>=0;)++t[0]}function knn(n,t){this.e=t,this.a=Van(n),this.a<54?this.f=j2(n):this.c=npn(n)}function jnn(n,t,e,i){wWn(),Ap.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function Enn(n,t,e){var i,r;for(i=10,r=0;r<e-1;r++)t<i&&(n.a+="0"),i*=10;n.a+=t}function Tnn(n,t){var e;for(e=0;n.e!=n.i.gc();)gq(t,kpn(n),iln(e)),e!=DWn&&++e}function Mnn(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function Snn(n,t){var e,i,r;r=t.c.i,i=(e=BB(RX(n.f,r),57)).d.c-e.e.c,Yrn(t.a,i,0)}function Pnn(n){var t,e;return t=n+128,!(e=(jq(),jtt)[t])&&(e=jtt[t]=new $b(n)),e}function Cnn(n,t){var e;return kW(t),xnn(!!(e=n[":"+t]),Pun(Gk(Ant,1),HWn,1,5,[t])),e}function Inn(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=sPn(t,e)}while(n.b);n.b=e}}function Onn(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=sPn(t,e)}while(n.a);n.a=e}}function Ann(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function $nn(n,t){var e,i;for(e=(i=t.c)+1;e<=t.f;e++)n.a[e]>n.a[i]&&(i=e);return i}function Lnn(n,t){var e;return 0==(e=Ibn(n.e.c,t.e.c))?Pln(n.e.d,t.e.d):e}function Nnn(n,t){return 0==t.e||0==n.e?eet:($On(),ANn(n,t))}function xnn(n,t){if(!n)throw Hp(new _y(YNn("Enum constant undefined: %s",t)))}function Dnn(){Dnn=O,uut=new St,out=new Tt,cut=new At,aut=new $t,sut=new Lt}function Rnn(){Rnn=O,vit=new BS("BY_SIZE",0),mit=new BS("BY_SIZE_AND_SHAPE",1)}function Knn(){Knn=O,Dct=new XS("EADES",0),Rct=new XS("FRUCHTERMAN_REINGOLD",1)}function _nn(){_nn=O,Sht=new PP("READING_DIRECTION",0),Pht=new PP("ROTATION",1)}function Fnn(){Fnn=O,Mht=lhn((Vvn(),Pun(Gk(Cht,1),$Vn,335,0,[yht,mht,jht,Eht,kht])))}function Bnn(){Bnn=O,jvt=lhn((Nvn(),Pun(Gk(Avt,1),$Vn,315,0,[yvt,pvt,vvt,gvt,mvt])))}function Hnn(){Hnn=O,Ost=lhn((LEn(),Pun(Gk(Kst,1),$Vn,363,0,[Mst,Pst,Cst,Sst,Tst])))}function qnn(){qnn=O,zlt=lhn((Tbn(),Pun(Gk(ivt,1),$Vn,163,0,[qlt,_lt,Flt,Blt,Hlt])))}function Gnn(){Gnn=O,sTt=lhn(($Sn(),Pun(Gk(zTt,1),$Vn,316,0,[iTt,rTt,uTt,cTt,aTt])))}function znn(){znn=O,bMt=lhn((rpn(),Pun(Gk(jMt,1),$Vn,175,0,[hMt,sMt,uMt,fMt,oMt])))}function Unn(){Unn=O,BEt=lhn((YLn(),Pun(Gk(zEt,1),$Vn,355,0,[DEt,xEt,KEt,REt,_Et])))}function Xnn(){Xnn=O,qat=lhn((yMn(),Pun(Gk(Uat,1),$Vn,356,0,[Rat,Kat,_at,Fat,Bat])))}function Wnn(){Wnn=O,GPt=lhn((Ffn(),Pun(Gk(WPt,1),$Vn,103,0,[BPt,FPt,_Pt,KPt,HPt])))}function Vnn(){Vnn=O,zCt=lhn((cpn(),Pun(Gk(JCt,1),$Vn,249,0,[BCt,qCt,_Ct,FCt,HCt])))}function Qnn(){Qnn=O,OIt=lhn((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])))}function Ynn(n,t){var e;return(e=BB(RX(n.a,t),134))||(e=new Zn,VW(n.a,t,e)),e}function Jnn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.a==n}function Znn(n){var t;return!!(t=BB(mMn(n,(hWn(),Rft)),305))&&t.i==n}function ntn(n,t){return kW(t),Dz(n),!!n.d.Ob()&&(t.td(n.d.Pb()),!0)}function ttn(n){return Vhn(n,DWn)>0?DWn:Vhn(n,_Vn)<0?_Vn:dG(n)}function etn(n){return n<3?(lin(n,IVn),n+1):n<OVn?CJ(n/.75+1):DWn}function itn(n,t){var e;return null==n.i&&qFn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function rtn(n,t,e){var i;if(null==t)throw Hp(new gv);return i=zJ(n,t),i4(n,t,e),i}function ctn(n){return n.a>=-.01&&n.a<=fJn&&(n.a=0),n.b>=-.01&&n.b<=fJn&&(n.b=0),n}function atn(n,t){return t==(c_(),c_(),Met)?n.toLocaleLowerCase():n.toLowerCase()}function utn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(ED(n),n.o)}function otn(n){var t;t=new $m,f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),t)}function stn(n,t){var e;return e=t>0?t-1:t,$j(Lj(Fen(LH(new Xm,e),n.n),n.j),n.k)}function htn(n,t,e,i){n.j=-1,qOn(n,EPn(n,t,e),(ZM(),BB(t,66).Mj().Ok(i)))}function ftn(n){this.g=n,this.f=new Np,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function ltn(n){this.b=new Np,this.a=new Np,this.c=new Np,this.d=new Np,this.e=n}function btn(n,t){this.a=new xp,this.e=new xp,this.b=(Mhn(),uvt),this.c=n,this.b=t}function wtn(n,t,e){NR.call(this),xtn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function dtn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(ry(),znt)}function gtn(n){if(n<0)throw Hp(new _y("Illegal Capacity: "+n));this.g=this.ri(n)}function ptn(n,t){if(0>n||n>t)throw Hp(new Tk("fromIndex: 0, toIndex: "+n+hYn+t))}function vtn(n){var t;if(n.a==n.b.a)throw Hp(new yv);return t=n.a,n.c=t,n.a=n.a.e,t}function mtn(n){var t;Mx(!!n.c),t=n.c.a,Atn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function ytn(n,t){var e;return Qln(n),e=new vQ(n,n.a.rd(),4|n.a.qd(),t),new Rq(n,e)}function ktn(n,t){var e,i;return(e=BB(lfn(n.d,t),14))?(i=t,n.e.pc(i,e)):null}function jtn(n,t){var e;for(e=n.Kc();e.Ob();)hon(BB(e.Pb(),70),(hWn(),ult),t)}function Etn(n){var t;return(t=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,t=0),t}function Ttn(n,t,i){var r;Fkn(i,r=e.Math.max(0,n.b/2-.5),1),WB(t,new iP(i,r))}function Mtn(n,t,e){return CJ(HH(n.a.e[BB(t.a,10).p]-n.a.e[BB(e.a,10).p]))}function Stn(n,t,e,i,r,c){var a;SZ(a=W5(i),r),MZ(a,c),JIn(n.a,i,new L_(a,t,e.f))}function Ptn(n,t){var e;if(!(e=NNn(n.Tg(),t)))throw Hp(new _y(r6n+t+u6n));return e}function Ctn(n,t){var e;for(e=n;JJ(e);)if((e=JJ(e))==t)return!0;return!1}function Itn(n,t){var e,i,r;for(i=t.a.cd(),e=BB(t.a.dd(),14).gc(),r=0;r<e;r++)n.td(i)}function Otn(n,t){var e,i,r,c;for(kW(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.td(e)}function Atn(n,t){var e;return e=t.c,t.a.b=t.b,t.b.a=t.a,t.a=t.b=null,t.c=null,--n.b,e}function $tn(n,t){return!(!t||n.b[t.g]!=t||($X(n.b,t.g,null),--n.c,0))}function Ltn(n,t){return!!Zrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))}function Ntn(n,t){LK(BB(mMn(BB(n.e,10),(HXn(),ept)),98))&&(SQ(),m$(BB(n.e,10).j,t))}function xtn(n){n.b=(J9(),Qit),n.f=(G7(),rrt),n.d=(lin(2,AVn),new J6(2)),n.e=new Gj}function Dtn(){Dtn=O,Git=new qS("BEGIN",0),zit=new qS(eJn,1),Uit=new qS("END",2)}function Rtn(){Rtn=O,zPt=new _C(eJn,0),UPt=new _C("HEAD",1),XPt=new _C("TAIL",2)}function Ktn(){return hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])}function _tn(){return PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])}function Ftn(){return kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])}function Btn(){return sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Ivt,Tvt,Pvt,Mvt,Svt,Evt,Cvt,Ovt])}function Htn(){Htn=O,ZCt=lhn((QEn(),Pun(Gk(aIt,1),$Vn,98,0,[YCt,QCt,VCt,UCt,WCt,XCt])))}function qtn(){qtn=O,nrt=(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,Zit=nrt}function Gtn(n){this.b=(yX(n),new t_(n)),this.a=new Np,this.d=new Np,this.e=new Gj}function ztn(n){var t;return(t=e.Math.sqrt(n.a*n.a+n.b*n.b))>0&&(n.a/=t,n.b/=t),n}function Utn(n){var t;return n.w?n.w:((t=V1(n))&&!t.kh()&&(n.w=t),t)}function Xtn(n){var t;return null==n?null:VTn(t=BB(n,190),t.length)}function Wtn(n,t){if(null==n.g||t>=n.i)throw Hp(new LO(t,n.i));return n.li(t,n.g[t])}function Vtn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)orn(n.b,t),t=Mln(t);orn(n.b,t)}function Qtn(n){var t;for(t=0;t<n.c.length;t++)(l1(t,n.c.length),BB(n.c[t],11)).p=t}function Ytn(n,t,e){var i,r,c;for(r=t[e],i=0;i<r.length;i++)c=r[i],n.e[c.c.p][c.p]=i}function Jtn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],lL(n.g,e).a=t}function Ztn(n,t){var e;for(e=spn(n,0);e.b!=e.d.c;)UR(BB(b3(e),8),t);return n}function nen(n,t){return XR(B$(BB(RX(n.g,t),8)),_$(BB(RX(n.f,t),460).b))}function ten(n){var t;return p2(n.e,n),Px(n.b),n.c=n.a,t=BB(n.a.Pb(),42),n.b=dun(n),t}function een(n){var t;return JH(null==n||Array.isArray(n)&&!((t=vnn(n))>=14&&t<=16)),n}function ien(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function ren(n,t,e){var i,r;i=t;do{r=Gy(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function cen(n,t){var e,i;i=n.a,e=Qfn(n,t,null),i!=t&&!n.e&&(e=azn(n,t,e)),e&&e.Fi()}function aen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function uen(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)}function oen(n,t){return _Mn(),E$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function sen(n,t){return Zj(Jrn(n,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function hen(){hen=O,Aut=lhn((uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])))}function fen(){fen=O,tSt=lhn((wEn(),Pun(Gk(qPt,1),$Vn,291,0,[ZMt,JMt,YMt,VMt,WMt,QMt])))}function len(){len=O,xMt=lhn((wvn(),Pun(Gk(nSt,1),$Vn,248,0,[CMt,AMt,$Mt,LMt,IMt,OMt])))}function ben(){ben=O,rht=lhn(($Pn(),Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])))}function wen(){wen=O,oft=lhn((JMn(),Pun(Gk(mft,1),$Vn,275,0,[cft,eft,aft,rft,ift,tft])))}function den(){den=O,nft=lhn((Bjn(),Pun(Gk(uft,1),$Vn,274,0,[Qht,Vht,Jht,Wht,Yht,Xht])))}function gen(){gen=O,rvt=lhn((TTn(),Pun(Gk(ovt,1),$Vn,313,0,[tvt,Zpt,Ypt,Jpt,evt,nvt])))}function pen(){pen=O,Hht=lhn((gSn(),Pun(Gk(zht,1),$Vn,276,0,[Dht,xht,Kht,Rht,Fht,_ht])))}function ven(){ven=O,Jyt=lhn((DPn(),Pun(Gk(_kt,1),$Vn,327,0,[Qyt,Uyt,Wyt,Xyt,Vyt,zyt])))}function men(){men=O,uIt=lhn((lIn(),Pun(Gk(IIt,1),$Vn,273,0,[rIt,eIt,iIt,tIt,nIt,cIt])))}function yen(){yen=O,sCt=lhn((nMn(),Pun(Gk(yCt,1),$Vn,312,0,[aCt,rCt,uCt,eCt,cCt,iCt])))}function ken(){return n$n(),Pun(Gk(GCt,1),$Vn,93,0,[ICt,CCt,ACt,DCt,xCt,NCt,$Ct,LCt,OCt])}function jen(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,0,e,n.a))}function Een(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.b))}function Ten(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.b))}function Men(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,3,e,n.f))}function Sen(n,t){var e;e=n.g,n.g=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.g))}function Pen(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,5,e,n.i))}function Cen(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,6,e,n.j))}function Ien(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,1,e,n.j))}function Oen(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,4,e,n.c))}function Aen(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new f4(n,2,e,n.k))}function $en(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,2,e,n.d))}function Len(n,t){var e;e=n.s,n.s=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,4,e,n.s))}function Nen(n,t){var e;e=n.t,n.t=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new l4(n,5,e,n.t))}function xen(n,t){var e;e=n.F,n.F=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,e,t))}function Den(n,t){var e;return(e=BB(RX((nS(),mAt),n),55))?e.xj(t):x8(Ant,HWn,1,t,5,1)}function Ren(n,t){var e;return t in n.a&&(e=zJ(n,t).he())?e.a:null}function Ken(n,t){var e,i;return tE(),i=new uo,!!t&&INn(i,t),xin(e=i,n),e}function _en(n,t,e){if(xsn(n,e),!n.Bk()&&null!=e&&!n.wj(e))throw Hp(new lv);return e}function Fen(n,t){return n.n=t,n.n?(n.f=new Np,n.e=new Np):(n.f=null,n.e=null),n}function Ben(n,t,e,i,r,c){var a;return Qen(e,a=mX(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Hen(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 qen(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 Gen(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 zen(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 Uen(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 Xen(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],V9(n.a,e);return n}function Wen(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)yX(t[e]);return new AO(n)}function Ven(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||zVn}function Qen(n,t){if(n){t.n=n;var e=UJ(t);e?e.gm=t:SWn[n]=[t]}}function Yen(n,t,i){var r;return r=n.length,_Cn(n,0,t,0,e.Math.min(i,r),!0),t}function Jen(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=BB(r.Pb(),79),TU(n,BB(e.Kb(i),33))}function Zen(){YE();for(var n=PWn,t=0;t<arguments.length;t++)n.push(arguments[t])}function nin(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)r5(n,e[i],n.c.b,n.c)}function tin(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),WB(n.a,t)}function ein(n){Mx(n.c>=0),rgn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function iin(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=yhn(n.f)),n.c).e}function rin(n){if(!(n>=0))throw Hp(new _y("tolerance ("+n+") must be >= 0"));return n}function cin(){return cMt||ksn(cMt=new ORn,Pun(Gk(_it,1),HWn,130,0,[new Nf])),cMt}function ain(){ain=O,Gvt=new zP(hJn,0),Hvt=new zP("INPUT",1),qvt=new zP("OUTPUT",2)}function uin(){uin=O,wht=new MP("ARD",0),ght=new MP("MSD",1),dht=new MP("MANUAL",2)}function oin(){oin=O,Omt=new YP("BARYCENTER",0),Amt=new YP(E1n,1),$mt=new YP(T1n,2)}function sin(n,t){var e;if(e=n.gc(),t<0||t>e)throw Hp(new tK(t,e));return new RK(n,t)}function hin(n,t){var e;return cL(t,42)?n.c.Mc(t):(e=rdn(n,t),Wdn(n,t),e)}function fin(n,t,e){return Ihn(n,t),Nrn(n,e),Len(n,0),Nen(n,1),nln(n,!0),Yfn(n,!0),n}function lin(n,t){if(n<0)throw Hp(new _y(t+" cannot be negative but was: "+n));return n}function bin(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(cV(t,n.Xb(e)))return e;return-1}function win(n){var t;for(t=n.c.Cc().Kc();t.Ob();)BB(t.Pb(),14).$b();n.c.$b(),n.d=0}function din(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)QU(t=e[i],t.length,null)}function gin(n){var t,e;if(0==n)return 32;for(e=0,t=1;0==(t&n);t<<=1)++e;return e}function pin(n){var t;for(t=new Wb(eyn(n));t.a<t.c.c.length;)BB(n0(t),680).Gf()}function vin(n){vM(),this.g=new xp,this.f=new xp,this.b=new xp,this.c=new pJ,this.i=n}function min(){this.f=new Gj,this.d=new wm,this.c=new Gj,this.a=new Np,this.b=new Np}function yin(n,t,e,i){this.rj(),this.a=t,this.b=n,this.c=null,this.c=new lK(this,t,e,i)}function kin(n,t,e,i,r){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1,r||(this.o=-2-i-1)}function jin(){OL.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=k6n}function Ein(){return n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GIt,UIt,qIt,XIt,WIt,QIt,VIt,zIt,HIt])}function Tin(){return tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Iit])}function Min(){Min=O,Ott=Pun(Gk(ANt,1),hQn,25,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function Sin(){Sin=O,kmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Pin(){Pin=O,jmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Cin(){Cin=O,Mmt=dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)}function Iin(){Iin=O,Cmt=WG(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat,$ot)}function Oin(){Oin=O,hht=new TP("LAYER_SWEEP",0),sht=new TP(B1n,1),fht=new TP(QZn,2)}function Ain(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?BB(xq(e.a,i-1),10):null}function $in(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.k))}function Lin(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.f))}function Nin(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,e,n.i))}function xin(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,8,e,n.a))}function Din(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Rin(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,e,n.b))}function Kin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function _in(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.c))}function Fin(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,e,n.c))}function Bin(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.d))}function Hin(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.D))}function qin(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&qin(n.i,t/n.r*n.i.d))}function Gin(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new Fm:new Dh,n.c=MDn(i,n.b,n.a)}function zin(n,t){return $xn(n.e,t)?(ZM(),hnn(t)?new lq(t,n):new xI(t,n)):new KI(t,n)}function Uin(n,t){return Jj(Zrn(n.a,t,dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15)))))}function Xin(n,t,e){return x7(n,new fw(t),new un,new lw(e),Pun(Gk(nit,1),$Vn,132,0,[]))}function Win(n){return 0>n?new VT:new $D(null,new m5(n+1,n))}function Vin(n,t){var e;return SQ(),e=new XT(1),XI(n)?mZ(e,n,t):jCn(e.f,n,t),new Xb(e)}function Qin(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function Yin(n){var t;return cL(t=mMn(n,(hWn(),dlt)),160)?mwn(BB(t,160)):null}function Jin(n){var t;return(n=e.Math.max(n,2))>(t=kon(n))?(t<<=1)>0?t:OVn:t}function Zin(n){switch(uN(3!=n.e),n.e){case 2:return!1;case 0:return!0}return _5(n)}function nrn(n,t){var e;return!!cL(t,8)&&(e=BB(t,8),n.a==e.a&&n.b==e.b)}function trn(n,t,e){var i,r;return r=t>>5,i=31&t,e0(jz(n.n[e][r],dG(yz(i,1))),3)}function ern(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)vjn(n,(e=BB(i.Pb(),42)).cd(),e.dd())}function irn(n,t){var e;e=new it,BB(t.b,65),BB(t.b,65),BB(t.b,65),Otn(t.a,new TB(n,e,t))}function rrn(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,21,e,n.b))}function crn(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,e,n.d))}function arn(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,13,e,n.j))}function urn(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i<e;r=r+1&c,++i)$X(t,i,n.a[r])}function orn(n,t){var e;return kW(t),e=t.g,!n.b[e]&&($X(n.b,e,t),++n.c,!0)}function srn(n,t){var e;return!((e=null==t?-1:E7(n.b,t,0))<0||(hrn(n,e),0))}function hrn(n,t){var e;e=s6(n.b,n.b.c.length-1),t<n.b.c.length&&(c5(n.b,t,e),KCn(n,t))}function frn(n,t){0==(k5(),Qet?null:t.c).length&&zD(t,new X),mZ(n.a,Qet?null:t.c,t)}function lrn(n,t){OTn(t,"Hierarchical port constraint processing",1),bpn(n),YXn(n),HSn(t)}function brn(n,t){var e,i;for(i=t.Kc();i.Ob();)e=BB(i.Pb(),266),n.b=!0,TU(n.e,e),e.b=n}function wrn(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 drn(n,t){var e,i;return e=BB(mMn(n,(HXn(),spt)),8),i=BB(mMn(t,spt),8),Pln(e.b,i.b)}function grn(n){RG.call(this),this.b=Gy(MD(mMn(n,(HXn(),ypt)))),this.a=BB(mMn(n,Zdt),218)}function prn(n,t,e){G2.call(this,n,t,e),this.a=new xp,this.b=new xp,this.d=new Wd(this)}function vrn(n){this.e=n,this.d=new bE(etn(gz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function mrn(n){this.b=n,this.a=x8(ANt,hQn,25,n+1,15,1),this.c=x8(ANt,hQn,25,n,15,1),this.d=0}function yrn(n,t,e){var i;return jxn(n,t,i=new Np,e,!0,!0),n.b=new mrn(i.c.length),i}function krn(n,t){var e;return(e=BB(RX(n.c,t),458))||((e=new cm).c=t,VW(n.c,e.c,e)),e}function jrn(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Ern(n){return null==n.b?(YM(),YM(),x$t):n.Lk()?n.Kk():n.Jk()}function Trn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)Pen(t=BB(kpn(e),33),0),Cen(t,0)}function Mrn(){Mrn=O,sat=new up(OZn),hat=new up(AZn),oat=new up($Zn),uat=new up(LZn)}function Srn(){Srn=O,qut=new ZS("TO_INTERNAL_LTR",0),Hut=new ZS("TO_INPUT_DIRECTION",1)}function Prn(){Prn=O,Qkt=new dC("P1_NODE_PLACEMENT",0),Ykt=new dC("P2_EDGE_ROUTING",1)}function Crn(){Crn=O,Rst=new kP("START",0),Dst=new kP("MIDDLE",1),xst=new kP("END",2)}function Irn(){Irn=O,tst=new iR("edgelabelcenterednessanalysis.includelabel",(hN(),ptt))}function Orn(n,t){JT(AV(new Rq(null,new w1(new Cb(n.b),1)),new JC(n,t)),new nI(n,t))}function Arn(){this.c=new IE(0),this.b=new IE(B3n),this.d=new IE(F3n),this.a=new IE(JJn)}function $rn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Ul(t=BB(e.Pb(),214),new HMn(t.e))}function Lrn(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zl(t=BB(e.Pb(),214),new Vz(t.f))}function Nrn(n,t){var e;e=n.zb,n.zb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,e,n.zb))}function xrn(n,t){var e;e=n.xb,n.xb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,e,n.xb))}function Drn(n,t){var e;e=n.yb,n.yb=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,2,e,n.yb))}function Rrn(n,t){var e;(e=new Om).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function Krn(n,t){var e;(e=new pD).n=t,f9((!n.s&&(n.s=new eU(FAt,n,21,17)),n.s),e)}function _rn(n,t){var e,i;for(z9(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n._c(i,e[i])}function Frn(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Brn(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?nsn(e):0);return t}function Hrn(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+bnn(n))}function qrn(n,t){var e;return cL(t,14)?(e=BB(t,14),n.Gc(e)):fnn(n,BB(yX(t),20).Kc())}function Grn(n,t,e){btn.call(this,t,e),this.d=x8(Out,a1n,10,n.a.c.length,0,1),Qgn(n.a,this.d)}function zrn(n){n.a=null,n.e=null,n.b.c=x8(Ant,HWn,1,0,5,1),n.f.c=x8(Ant,HWn,1,0,5,1),n.c=null}function Urn(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function Xrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new xd(n)),t))))}function Wrn(n,t){return Gy(MD($N($fn($V(new Rq(null,new w1(n.c.b,16)),new Nd(n)),t))))}function Vrn(n,t){OTn(t,k1n,1),JT(wnn(new Rq(null,new w1(n.b,16)),new Zt),new ne),HSn(t)}function Qrn(n,t){var e,i;return e=BB(ZAn(n,(Uyn(),Ljt)),19),i=BB(ZAn(t,Ljt),19),E$(e.a,i.a)}function Yrn(n,t,e){var i,r;for(r=spn(n,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a+=t,i.b+=e;return n}function Jrn(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&wW(t,i.g))return i;return null}function Zrn(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&wW(t,i.i))return i;return null}function ncn(n,t,e){var i,r,c;for(i=0,r=0;r<e;r++)c=t[r],n[r]=c<<1|i,i=c>>>31;0!=i&&(n[e]=i)}function tcn(n,t){var e,i;for(SQ(),i=new Np,e=0;e<n;++e)i.c[i.c.length]=t;return new $k(i)}function ecn(n){var t;return QI((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.b))}function icn(n){var t;return QI((t=T2(n)).a,0)?(hM(),hM(),Pet):(hM(),new yx(t.c))}function rcn(n){var t;return QI((t=E2(n)).a,0)?(fM(),fM(),Cet):(fM(),new kx(t.b))}function ccn(n){return n.b.c.i.k==(uSn(),Mut)?BB(mMn(n.b.c.i,(hWn(),dlt)),11):n.b.c}function acn(n){return n.b.d.i.k==(uSn(),Mut)?BB(mMn(n.b.d.i,(hWn(),dlt)),11):n.b.d}function ucn(n,t,e,i,r,c,a,u,o,s,h,f,l){return bCn(n,t,e,i,r,c,a,u,o,s,h,f,l),Gln(n,!1),n}function ocn(n,t,e,i,r,c,a){gT.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=u6(a)}function scn(n,t){typeof window===AWn&&typeof window.$gwt===AWn&&(window.$gwt[n]=t)}function hcn(n,t){return Aun(),n==Zat&&t==eut||n==eut&&t==Zat||n==tut&&t==nut||n==nut&&t==tut}function fcn(n,t){return Aun(),n==Zat&&t==nut||n==Zat&&t==tut||n==eut&&t==tut||n==eut&&t==nut}function lcn(n,t){return h$(),rin(fJn),e.Math.abs(0-t)<=fJn||0==t||isNaN(0)&&isNaN(t)?0:n/t}function bcn(){return bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])}function wcn(){wcn=O,P$t=new Im,I$t=Pun(Gk(FAt,1),N9n,170,0,[]),C$t=Pun(Gk(QAt,1),x9n,59,0,[])}function dcn(){dcn=O,smt=new VP("NO",0),umt=new VP("GREEDY",1),omt=new VP("LOOK_BACK",2)}function gcn(){gcn=O,Dut=new Ht,Nut=new Bt,xut=new qt,Lut=new Gt,Rut=new zt,Kut=new Ut}function pcn(n){var t,e;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),29).p=e,++e}function vcn(n,t){var e;return $In(new xC((e=_Tn(n)).c,e.d),new xC(e.b,e.a),n.rf(),t,n.Hf())}function mcn(n,t){var e;return n.b?null:(e=stn(n,n.g),DH(n.a,e),e.i=n,n.d=t,e)}function ycn(n,t,e){OTn(e,"DFS Treeifying phase",1),jdn(n,t),cxn(n,t),n.a=null,n.b=null,HSn(e)}function kcn(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Np,UCn(this),SQ(),m$(this.a,null)}function jcn(n){this.i=n.gc(),this.i>0&&(this.g=this.ri(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Ecn(n,t){MH.call(this,W$t,n,t),this.b=this,this.a=axn(n.Tg(),itn(this.e.Tg(),this.c))}function Tcn(n,t){var e,i;for(kW(t),i=t.vc().Kc();i.Ob();)e=BB(i.Pb(),42),n.zc(e.cd(),e.dd())}function Mcn(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!G3(n,t,i.Pb()))return!1;return!0}function Scn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.gh(t,-1-(-1==c?i:c),null,r)),r}function Pcn(n,t,e,i,r){var c;return e&&(c=Awn(t.Tg(),n.c),r=e.ih(t,-1-(-1==c?i:c),null,r)),r}function Ccn(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 Icn(n){switch(n.g){case 2:return kUn(),CIt;case 4:return kUn(),oIt;default:return n}}function Ocn(n){switch(n.g){case 1:return kUn(),SIt;case 3:return kUn(),sIt;default:return n}}function Acn(n){var t,e,i;return n.j==(kUn(),sIt)&&(e=SN(t=UOn(n),oIt),(i=SN(t,CIt))||i&&e)}function $cn(n){var t;return new YK(t=BB(n.e&&n.e(),9),BB(VU(t,t.length),9),t.length)}function Lcn(n,t){OTn(t,k1n,1),twn(sM(new Pw((gM(),new HV(n,!1,!1,new Ft))))),HSn(t)}function Ncn(n,t){return hN(),XI(n)?f6(n,SD(t)):UI(n)?Tz(n,MD(t)):zI(n)?Ez(n,TD(t)):n.wd(t)}function xcn(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),WB(n.a,t)}function Dcn(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.a<e&&t.b>c&&t.b<i}function Rcn(n,t,e,i){cL(n.Cb,179)&&(BB(n.Cb,179).tb=null),Nrn(n,e),t&&_In(n,t),i&&n.xk(!0)}function Kcn(n,t){var e;qQ(e=BB(t,183),"x",n.i),qQ(e,"y",n.j),qQ(e,C6n,n.g),qQ(e,P6n,n.f)}function _cn(){_cn=O,Imt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Fcn(){Fcn=O,Dmt=ogn(jO(dq(dq(new B2,(yMn(),_at),(lWn(),Lot)),Fat,Eot),Bat),$ot)}function Bcn(){Bcn=O,Xjt=new yC(QZn,0),Wjt=new yC("POLAR_COORDINATE",1),Ujt=new yC("ID",2)}function Hcn(){Hcn=O,Xvt=new UP("EQUALLY",0),Wvt=new UP(mJn,1),Vvt=new UP("NORTH_SOUTH",2)}function qcn(){qcn=O,$vt=lhn((sNn(),Pun(Gk(Dvt,1),$Vn,260,0,[Ivt,Tvt,Pvt,Mvt,Svt,Evt,Cvt,Ovt])))}function Gcn(){Gcn=O,Vst=lhn((kDn(),Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst])))}function zcn(){zcn=O,EMt=lhn((PPn(),Pun(Gk(SMt,1),$Vn,277,0,[kMt,wMt,vMt,yMt,dMt,gMt,pMt,mMt])))}function Ucn(){Ucn=O,cAt=lhn((hAn(),Pun(Gk(aAt,1),$Vn,237,0,[iAt,nAt,tAt,ZOt,eAt,YOt,QOt,JOt])))}function Xcn(){Xcn=O,Qrt=new iR("debugSVG",(hN(),!1)),Yrt=new iR("overlapsExisted",!0)}function Wcn(n,t){return x7(new ow(n),new sw(t),new hw(t),new tn,Pun(Gk(nit,1),$Vn,132,0,[]))}function Vcn(){var n;return qet||(qet=new Kv,YA(n=new y5(""),(lM(),Het)),frn(qet,n)),qet}function Qcn(n,t){for(yX(t);n.Ob();)if(!Qan(BB(n.Pb(),10)))return!1;return!0}function Ycn(n,t){var e;return!!(e=XRn(cin(),n))&&(Ypn(t,(sWn(),mPt),e),!0)}function Jcn(n,t){var e;for(e=0;e<t.j.c.length;e++)BB(D7(n,e),21).Gc(BB(D7(t,e),14));return n}function Zcn(n,t){var e,i;for(i=new Wb(t.b);i.a<i.c.c.length;)e=BB(n0(i),29),n.a[e.p]=QMn(e)}function nan(n,t){var e,i;for(kW(t),i=n.vc().Kc();i.Ob();)e=BB(i.Pb(),42),t.Od(e.cd(),e.dd())}function tan(n,t){cL(t,83)?(BB(n.c,76).Xj(),ern(n,BB(t,83))):BB(n.c,76).Wb(t)}function ean(n){return cL(n,152)?o6(BB(n,152)):cL(n,131)?BB(n,131).a:cL(n,54)?new fy(n):new CT(n)}function ian(n,t){return t<n.b.gc()?BB(n.b.Xb(t),10):t==n.b.gc()?n.a:BB(xq(n.e,t-n.b.gc()-1),10)}function ran(n,t){n.a=rbn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=rbn(n.d,t)}function can(n,t){OTn(t,"Edge and layer constraint edge reversal",1),Fzn(LRn(n)),HSn(t)}function aan(n){var t;null==n.d?(++n.e,n.f=0,rfn(null)):(++n.e,t=n.d,n.d=null,n.f=0,rfn(t))}function uan(n){var t;return 0==(t=n.h)?n.l+n.m*IQn:t==PQn?n.l+n.m*IQn-OQn:n}function oan(n){return qD(),n.A.Hc((mdn(),DIt))&&!n.B.Hc((n_n(),UIt))?ndn(n):null}function san(n){if(kW(n),0==n.length)throw Hp(new Mk("Zero length BigInteger"));iKn(this,n)}function han(n){if(!n)throw Hp(new Fy("no calls to next() since the last call to remove()"))}function fan(n){return $Qn<n&&n<OQn?n<0?e.Math.ceil(n):e.Math.floor(n):uan(gNn(n))}function lan(n,t){var e,i,r;for(e=n.c.Ee(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Od(e,i);return n.b.Kb(e)}function ban(n,t){var e,i,r;if(null!=(e=n.Jg())&&n.Mg())for(i=0,r=e.length;i<r;++i)e[i].ui(t)}function wan(n,t){var e,i;for(i=vW(e=n).e;i;){if((e=i)==t)return!0;i=vW(e).e}return!1}function dan(n,t,e){var i,r;return(i=n.a.f[t.p])<(r=n.a.f[e.p])?-1:i==r?0:1}function gan(n,t,e){var i,r;return r=BB(UK(n.d,t),19),i=BB(UK(n.b,e),19),r&&i?U6(n,r.a,i.a):null}function pan(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)SA(e=BB(kpn(i),33),e.i+t.b,e.j+t.d)}function van(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),70),WB(n.d,e),KMn(n,e)}function man(n,t){var e,i;i=new Np,e=t;do{i.c[i.c.length]=e,e=BB(RX(n.k,e),17)}while(e);return i}function yan(n,t){var e;return 0!=(n.Db&t)?-1==(e=Rmn(n,t))?n.Eb:een(n.Eb)[e]:null}function kan(n,t){var e;return(e=new _f).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function jan(n,t){var e;return(e=new Ev).G=t,!n.rb&&(n.rb=new Jz(n,HAt,n)),f9(n.rb,e),e}function Ean(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return m0(n,t)}function Tan(n){switch(n.a.g){case 1:return new EI;case 3:return new hyn;default:return new If}}function Man(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw Hp(new yv)}function San(n){var t;return a$(),uS(syt,n)||((t=new ua).a=n,wR(syt,n,t)),BB(oV(syt,n),635)}function Pan(n){var t,e,i;return e=0,(i=n)<0&&(i+=OQn,e=PQn),t=CJ(i/IQn),M$(CJ(i-t*IQn),t,e)}function Can(n){var t,e,i;for(i=0,e=new QT(n.a);e.a<e.c.a.length;)t=u4(e),n.b.Hc(t)&&++i;return i}function Ian(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:nsn(e)));return t}function Oan(n,t){var e;this.c=n,gmn(n,e=new Np,t,n.b,null,!1,null,!1),this.a=new M2(e,0)}function Aan(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(ZM(),BB(n,66).Oj()),this.k=axn(t.e.Tg(),n)}function $an(n,t,e){this.b=(kW(n),n),this.d=(kW(t),t),this.e=(kW(e),e),this.c=this.d+""+this.e}function Lan(){this.a=BB(mpn((fRn(),qct)),19).a,this.c=Gy(MD(mpn(cat))),this.b=Gy(MD(mpn(tat)))}function Nan(){Nan=O,KCt=lhn((n$n(),Pun(Gk(GCt,1),$Vn,93,0,[ICt,CCt,ACt,DCt,xCt,NCt,$Ct,LCt,OCt])))}function xan(){xan=O,Fit=lhn((tRn(),Pun(Gk(Bit,1),$Vn,250,0,[Rit,$it,Lit,Ait,xit,Dit,Nit,Oit,Iit])))}function Dan(){Dan=O,Rrt=new US("UP",0),Nrt=new US(pJn,1),xrt=new US(cJn,2),Drt=new US(aJn,3)}function Ran(){Ran=O,sZ(),ykt=new $O(X3n,kkt=Rkt),B0(),vkt=new $O(W3n,mkt=Hkt)}function Kan(){Kan=O,jft=new NP("ONE_SIDED",0),Eft=new NP("TWO_SIDED",1),kft=new NP("OFF",2)}function _an(n){n.r=new Rv,n.w=new Rv,n.t=new Np,n.i=new Np,n.d=new Rv,n.a=new bA,n.c=new xp}function Fan(n){this.n=new Np,this.e=new YT,this.j=new YT,this.k=new Np,this.f=new Np,this.p=n}function Ban(n,t){n.c&&(JKn(n,t,!0),JT(new Rq(null,new w1(t,16)),new qd(n))),JKn(n,t,!1)}function Han(n,t,e){return n==(oin(),$mt)?new Pc:0!=H$n(t,1)?new Rj(e.length):new Dj(e.length)}function qan(n,t){var e;return t?((e=t.Ve()).dc()||(n.q?Tcn(n.q,e):n.q=new mO(e)),n):n}function Gan(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(mR(n.a,t),--n.c,oY(n.b)),e}function zan(n,t){var e;return 0==(e=t.p-n.p)?Pln(n.f.a*n.f.b,t.f.a*t.f.b):e}function Uan(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function Xan(n){return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:eQ(n)}function Wan(n){var t;if(n){if((t=n).dc())throw Hp(new yv);return t.Xb(t.gc()-1)}return u1(n.Kc())}function Van(n){var t;return Vhn(n,0)<0&&(n=uH(n)),64-(0!=(t=dG(kz(n,32)))?ZIn(t):ZIn(dG(n))+32)}function Qan(n){var t;return t=BB(mMn(n,(hWn(),Qft)),61),n.k==(uSn(),Mut)&&(t==(kUn(),CIt)||t==oIt)}function Yan(n,t,e){var i,r;(r=BB(mMn(n,(HXn(),vgt)),74))&&(Wsn(i=new km,0,r),Ztn(i,e),Frn(t,i))}function Jan(n,t,e){var i,r,c,a;i=(a=vW(n)).d,r=a.c,c=n.n,t&&(c.a=c.a-i.b-r.a),e&&(c.b=c.b-i.d-r.b)}function Zan(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(kUn(),sIt)?n.p-t.p:t.p-n.p}function nun(n){var t,e;for(PUn(n),e=new Wb(n.d);e.a<e.c.c.length;)(t=BB(n0(e),101)).i&&XSn(t)}function tun(n,t,e,i,r){$X(n.c[t.g],e.g,i),$X(n.c[e.g],t.g,i),$X(n.b[t.g],e.g,r),$X(n.b[e.g],t.g,r)}function eun(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),BB(i.b,65),Otn(i.a,new EB(n,t,i))}function iun(n,t){n.d==(Ffn(),_Pt)||n.d==HPt?BB(t.a,57).c.Fc(BB(t.b,57)):BB(t.b,57).c.Fc(BB(t.a,57))}function run(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),_pn(n.n,t,i)):eSn(n,t,e,i)}function cun(n,t){var e;return Nrn(e=new Ho,t),f9((!n.A&&(n.A=new NL(O$t,n,7)),n.A),e),e}function aun(n,t,e){var i,r;return r=N2(t,A6n),pjn((i=new aI(n,e)).a,i.b,r),r}function uun(n){var t;return(!n.a||0==(1&n.Bb)&&n.a.kh())&&cL(t=Ikn(n),148)&&(n.a=BB(t,148)),n.a}function oun(n,t){var e,i;for(kW(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function sun(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),M$(e&SQn,i&SQn,r&PQn)}function hun(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),M$(e&SQn,i&SQn,r&PQn)}function fun(n){var t;return n<128?(!(t=(Mq(),Mtt)[n])&&(t=Mtt[n]=new Lb(n)),t):new Lb(n)}function lun(n){var t;return cL(n,78)?n:((t=n&&n.__java$exception)||ov(t=new jhn(n)),t)}function bun(n){if(cL(n,186))return BB(n,118);if(n)return null;throw Hp(new Hy(e8n))}function wun(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(Nfn(t,_hn(n)))return!0;return!1}function dun(n){return!!n.a.Ob()||n.a==n.d&&(n.a=new S2(n.e.f),n.a.Ob())}function gun(n,t){var e;return 0!=(e=t.Pc()).length&&(tH(n.c,n.c.length,e),!0)}function pun(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=BB(r.Pb(),42),n.yc(i.cd(),i.dd(),e);return n}function vun(n,t){var e;for(e=new Wb(n.b);e.a<e.c.c.length;)hon(BB(n0(e),70),(hWn(),ult),t)}function mun(n,t,e){var i,r;for(r=new Wb(n.b);r.a<r.c.c.length;)SA(i=BB(n0(r),33),i.i+t,i.j+e)}function yun(n,t){if(!n)throw Hp(new _y($Rn("value already present: %s",Pun(Gk(Ant,1),HWn,1,5,[t]))))}function kun(n,t){return!(!n||!t||n==t)&&_dn(n.d.c,t.d.c+t.d.b)&&_dn(t.d.c,n.d.c+n.d.b)}function jun(){return k5(),Qet?new y5(null):FOn(Vcn(),"com.google.common.base.Strings")}function Eun(n,t){var e;return e=sx(t.a.gc()),JT(ytn(new Rq(null,new w1(t,1)),n.i),new NC(n,e)),e}function Tun(n){var t;return Nrn(t=new Ho,"T"),f9((!n.d&&(n.d=new NL(O$t,n,11)),n.d),t),t}function Mun(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.ki(e))?0:nsn(i));return t}function Sun(n,t,e,i){var r;return w2(t,n.e.Hd().gc()),w2(e,n.c.Hd().gc()),r=n.a[t][e],$X(n.a[t],e,i),r}function Pun(n,t,e,i,r){return r.gm=n,r.hm=t,r.im=I,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Cun(n,t,i,r,c){return jDn(),e.Math.min(zGn(n,t,i,r,c),zGn(i,r,n,t,qx(new xC(c.a,c.b))))}function Iun(){Iun=O,ast=new tP(QZn,0),rst=new tP(C1n,1),cst=new tP(I1n,2),ist=new tP("BOTH",3)}function Oun(){Oun=O,vst=new mP(eJn,0),mst=new mP(cJn,1),yst=new mP(aJn,2),kst=new mP("TOP",3)}function Aun(){Aun=O,Zat=new QS("Q1",0),eut=new QS("Q4",1),nut=new QS("Q2",2),tut=new QS("Q3",3)}function $un(){$un=O,bmt=new QP("OFF",0),wmt=new QP("SINGLE_EDGE",1),lmt=new QP("MULTI_EDGE",2)}function Lun(){Lun=O,WTt=new SC("MINIMUM_SPANNING_TREE",0),XTt=new SC("MAXIMUM_SPANNING_TREE",1)}function Nun(){Nun=O,new up("org.eclipse.elk.addLayoutConfig"),ZTt=new ou,JTt=new au,new uu}function xun(n){var t,e;for(t=new YT,e=spn(n.d,0);e.b!=e.d.c;)DH(t,BB(b3(e),188).c);return t}function Dun(n){var t,e;for(e=new Np,t=n.Kc();t.Ob();)gun(e,wDn(BB(t.Pb(),33)));return e}function Run(n){var t;tBn(n,!0),t=VVn,Lx(n,(HXn(),fpt))&&(t+=BB(mMn(n,fpt),19).a),hon(n,fpt,iln(t))}function Kun(n,t,e){var i;$U(n.a),Otn(e.i,new jg(n)),kgn(n,i=new C$(BB(RX(n.a,t.b),65)),t),e.f=i}function _un(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?BB(xq(e.a,i+1),10):null}function Fun(n,t){var e,i;for(WQ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Bun(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=i0(i,yz(1,e));return i}function Hun(n){var t,e,i;for(SQ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?nsn(t):0,i|=0;return i}function qun(n){var t;return tE(),t=new co,n&&f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),t),t}function Gun(n){var t;return(t=new p).a=n,t.b=yon(n),t.c=x8(Qtt,sVn,2,2,6,1),t.c[0]=Hrn(n),t.c[1]=Hrn(n),t}function zun(n,t){if(0===t)return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),void n.o.c.$b();mPn(n,t)}function Uun(n,t,e){switch(e.g){case 2:n.b=t;break;case 1:n.c=t;break;case 4:n.d=t;break;case 3:n.a=t}}function Xun(n){switch(n.g){case 1:return ECt;case 2:return jCt;case 3:return TCt;default:return MCt}}function Wun(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 2:case 4:return!0;default:return!1}}function Vun(){Vun=O,yft=lhn((bDn(),Pun(Gk(Tft,1),$Vn,256,0,[hft,lft,bft,wft,dft,gft,vft,sft,fft,pft])))}function Qun(){Qun=O,JIt=lhn((n_n(),Pun(Gk(iOt,1),$Vn,259,0,[GIt,UIt,qIt,XIt,WIt,QIt,VIt,zIt,HIt])))}function Yun(){Yun=O,Xkt=dq(ogn(ogn(FM(dq(new B2,(zyn(),Kyt),(DPn(),Qyt)),_yt),Xyt),Wyt),Fyt,Vyt)}function Jun(){Jun=O,Aht=new CP(QZn,0),Oht=new CP("INCOMING_ONLY",1),$ht=new CP("OUTGOING_ONLY",2)}function Zun(){Zun=O,ftt={boolean:UT,number:Cy,string:Iy,object:TCn,function:TCn,undefined:Wp}}function non(n,t){vH(n>=0,"Negative initial capacity"),vH(t>=0,"Non-positive load factor"),$U(this)}function ton(n,t,e){return!(n>=128)&&JI(n<64?e0(yz(1,n),e):e0(yz(1,n-64),t),0)}function eon(n,t){return!(!n||!t||n==t)&&Ibn(n.b.c,t.b.c+t.b.b)<0&&Ibn(t.b.c,n.b.c+n.b.b)<0}function ion(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new UV(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ron(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Son(n,t=e[i],(kUn(),SIt)),Son(n,t,sIt)}function con(n){var t,e;for(null==n.j&&(n.j=(PY(),Ijn(ett.ce(n)))),t=0,e=n.j.length;t<e;++t);}function aon(n){var t,e;return M$(t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,~n.h+(0==t&&0==e?1:0)&PQn)}function uon(n,t){return TFn(BB(BB(RX(n.g,t.a),46).a,65),BB(BB(RX(n.g,t.b),46).a,65))}function oon(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));return n.hi()&&(e=nZ(n,e)),n.Vh(t,e)}function son(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function hon(n,t,e){return null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e)),n}function fon(n){var t,e;return qan(e=new y6,n),hon(e,(Mrn(),sat),n),eBn(n,e,t=new xp),Szn(n,e,t),e}function lon(n){var t,e,i;for(jDn(),e=x8(PMt,sVn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=lmn(i,n);return e}function bon(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=Pdn(n,t,r,r+1);return e}function won(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)vmn(n,c,a)||FRn(n,c,a,!0,!1)}function don(n,t){this.b=n,NO.call(this,(BB(Wtn(QQ((QX(),t$t).o),10),18),t.i),t.g),this.a=(wcn(),I$t)}function gon(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Hd().gc()|0,this.a=this.d%this.c.c.Hd().gc()}function pon(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function von(n,t,i){this.q=new e.Date,this.q.setFullYear(n+sQn,t,i),this.q.setHours(0,0,0,0),lBn(this,0)}function mon(){mon=O,Nvt=new qP(QZn,0),Lvt=new qP("NODES_AND_EDGES",1),xvt=new qP("PREFER_EDGES",2)}function yon(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+bnn(n))}function kon(n){var t;if(n<0)return _Vn;if(0==n)return 0;for(t=OVn;0==(t&n);t>>=1);return t}function jon(n){var t,e;return 32==(e=ZIn(n.h))?32==(t=ZIn(n.m))?ZIn(n.l)+32:t+20-10:e-12}function Eon(n){var t;return null==(t=n.a[n.b])?null:($X(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Ton(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 Mon(n,t,e){var i,r;return i=new H8(t,e),r=new q,n.b=Wxn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Son(n,t,e){var i,r,c;for(c=0,r=Lfn(t,e).Kc();r.Ob();)i=BB(r.Pb(),11),VW(n.c,i,iln(c++))}function Pon(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).g.c=-t.g.c-t.g.b;kNn(n)}function Con(n){var t,e;for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).d.c=-t.d.c-t.d.b;yNn(n)}function Ion(n){var t;return(!n.c||0==(1&n.Bb)&&0!=(64&n.c.Db))&&cL(t=Ikn(n),88)&&(n.c=BB(t,26)),n.c}function Oon(n){var t,e,i;t=1+~n.l&SQn,e=~n.m+(0==t?1:0)&SQn,i=~n.h+(0==t&&0==e?1:0)&PQn,n.l=t,n.m=e,n.h=i}function Aon(n){var t,e,i,r,c;for(t=new Gj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function $on(n,t){var e,i,r,c,a;for(SQ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function Lon(n){var t,e;for(jDn(),e=-17976931348623157e292,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function Non(n,t,e){var i;return jxn(n,t,i=new Np,(kUn(),oIt),!0,!1),jxn(n,e,i,CIt,!1,!1),i}function xon(n,t,e){var i,r;return r=N2(t,"labels"),XAn((i=new gI(n,e)).a,i.b,r),r}function Don(n,t,e,i){var r;return(r=m$n(n,t,e,i))||!(r=aln(n,e,i))||Fqn(n,t,r)?r:null}function Ron(n,t,e,i){var r;return(r=y$n(n,t,e,i))||!(r=uln(n,e,i))||Fqn(n,t,r)?r:null}function Kon(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!BB(Dq(n.a,e),169).Lb(t))return!1;return!0}function _on(n,t,e){if(yX(t),e.Ob())for(sO(t,CX(e.Pb()));e.Ob();)sO(t,n.a),sO(t,CX(e.Pb()));return t}function Fon(n){var t,e,i;for(SQ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?nsn(t):0),i|=0;return i}function Bon(n,t,e,i,r){var c;return c=jAn(n,t),e&&Oon(c),r&&(n=Smn(n,t),ltt=i?aon(n):M$(n.l,n.m,n.h)),c}function Hon(n,t){var e;try{t.Vd()}catch(i){if(!cL(i=lun(i),78))throw Hp(i);e=i,n.c[n.c.length]=e}}function qon(n,t,e){var i,r;return cL(t,144)&&e?(i=BB(t,144),r=e,n.a[i.b][r.b]+n.a[r.b][i.b]):0}function Gon(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return fwn(n,t)}function zon(n,t){switch(t.g){case 0:cL(n.b,631)||(n.b=new Lan);break;case 1:cL(n.b,632)||(n.b=new fH)}}function Uon(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&BB(n.g[n.i-1],47).Ob():tZ(n);)vI(t,aLn(n))}function Xon(n,t,e){n.g=APn(n,t,(kUn(),oIt),n.b),n.d=APn(n,e,oIt,n.b),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Won(n,t,e){n.g=APn(n,t,(kUn(),CIt),n.j),n.d=APn(n,e,CIt,n.j),0!=n.g.c&&0!=n.d.c&&zMn(n)}function Von(n,t,e){return!jE(AV(new Rq(null,new w1(n.c,16)),new aw(new ZC(t,e)))).sd((dM(),tit))}function Qon(n){var t;return EW(n),t=new sn,n.a.sd(t)?(CL(),new vy(kW(t.a))):(CL(),CL(),Set)}function Yon(n){var t;return!(n.b<=0)&&((t=GO("MLydhHmsSDkK",YTn(fV(n.c,0))))>1||t>=0&&n.b<3)}function Jon(n){var t,e;for(t=new km,e=spn(n,0);e.b!=e.d.c;)Kx(t,0,new wA(BB(b3(e),8)));return t}function Zon(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),81).f.$b();ky(n.b,n),BNn(n)}function nsn(n){return XI(n)?vvn(n):UI(n)?VO(n):zI(n)?(kW(n),n?1231:1237):iz(n)?n.Hb():AG(n)?PN(n):tY(n)}function tsn(n){return XI(n)?Qtt:UI(n)?Ptt:zI(n)?ktt:iz(n)||AG(n)?n.gm:n.gm||Array.isArray(n)&&Gk(ntt,1)||ntt}function esn(n){if(0===n.g)return new cu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function isn(n){if(0===n.g)return new iu;throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}function rsn(n,t,e){if(0===t)return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),void tan(n.o,e);yCn(n,t,e)}function csn(n,t,e){this.g=n,this.e=new Gj,this.f=new Gj,this.d=new YT,this.b=new YT,this.a=t,this.c=e}function asn(n,t,e,i){this.b=new Np,this.n=new Np,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function usn(n){this.e=n,this.d=new p4(this.e.g),this.a=this.d,this.b=dun(this),this.$modCount=n.$modCount}function osn(n){for(;!n.d||!n.d.Ob();){if(!n.b||Wy(n.b))return null;n.d=BB(dU(n.b),47)}return n.d}function ssn(n){return WB(n.c,(Nun(),ZTt)),uen(n.a,Gy(MD(mpn((Rwn(),Vpt)))))?new qu:new Cg(n)}function hsn(n){switch(n.g){case 1:return F3n;default:case 2:return 0;case 3:return JJn;case 4:return B3n}}function fsn(){var n;return wWn(),PNt||(n=ex(ZUn("M",!0)),n=gG(ZUn("M",!1),n),PNt=n)}function lsn(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.ue(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function bsn(n,t,e){var i,r;hN(),i=!!TO(e),(r=BB(t.xc(i),15))||(r=new Np,t.zc(i,r)),r.Fc(e)}function wsn(n,t){var e,i;return(e=BB(ZAn(n,(W$n(),dEt)),19).a)==(i=BB(ZAn(t,dEt),19).a)||e<i?-1:e>i?1:0}function dsn(n,t){return!!bNn(n,t)&&(JIn(n.b,BB(mMn(t,(hWn(),Xft)),21),t),DH(n.a,t),!0)}function gsn(n){var t,e;(t=BB(mMn(n,(hWn(),Elt)),10))&&(y7((e=t.c).a,t),0==e.a.c.length&&y7(vW(t).b,e))}function psn(n){return Qet?x8(Get,dYn,572,0,0,1):BB(Qgn(n.a,x8(Get,dYn,572,n.a.c.length,0,1)),842)}function vsn(n,t,e,i){return nV(),new hy(Pun(Gk(Hnt,1),kVn,42,0,[(zvn(n,t),new vT(n,t)),(zvn(e,i),new vT(e,i))]))}function msn(n,t,e){var i;return fin(i=new $m,t,e),f9((!n.q&&(n.q=new eU(QAt,n,11,10)),n.q),i),i}function ysn(n){var t,e,i,r;for(e=(r=fS(AOt,n)).length,i=x8(Qtt,sVn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function ksn(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new UX(n),e.Qe(a),NBn(a);$U(n.f)}function jsn(n,t){var e;return t===n||!!cL(t,224)&&(e=BB(t,224),Nfn(n.Zb(),e.Zb()))}function Esn(n,t){var e;2*t+1>=n.b.c.length||(Esn(n,2*t+1),(e=2*t+2)<n.b.c.length&&Esn(n,e),KCn(n,t))}function Tsn(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=Jin(e),i=x8(Qnt,CVn,330,r,0,1),this.b=i}function Msn(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:sS(e0(n[i],UQn),e0(t[i],UQn))?-1:1}function Ssn(n,t){var e,i;for(i=spn(n,0);i.b!=i.d.c;)(e=BB(b3(i),214)).e.length>0&&(t.td(e),e.i&&pln(e))}function Psn(n,t){var e,i;return i=BB(yan(n.a,4),126),e=x8(dAt,i9n,415,t,0,1),null!=i&&aHn(i,0,e,0,i.length),e}function Csn(n,t){var e;return e=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Isn(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(BB(e.Pb(),14).Hc(t))return!0;return!1}function Osn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(vmn(n,c,a))return!0;return!1}function Asn(n,t,e){var i,r,c,a;for(kW(e),a=!1,c=n.Zc(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function $sn(n,t){var e;return n===t||!!cL(t,83)&&(e=BB(t,83),zSn(lz(n),e.vc()))}function Lsn(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=BB(r.Pb(),42),n.re(t,i.dd()))return!0;return!1}function Nsn(n,t,e){return n.d[t.p][e.p]||(ivn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function xsn(n,t){if(!n.ai()&&null==t)throw Hp(new _y("The 'no null' constraint is violated"));return t}function Dsn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),Hin(n,null==t?null:(kW(t),t)),n.C&&n.yk(null)}function Rsn(n,t){return!(!n||n==t||!Lx(t,(hWn(),rlt)))&&BB(mMn(t,(hWn(),rlt)),10)!=n}function Ksn(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.pl()}}function _sn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n.ql()}}function Fsn(n){_J.call(this,"The given string does not match the expected format for individual spacings.",n)}function Bsn(){Bsn=O,uOt=new cI("ELK",0),oOt=new cI("JSON",1),aOt=new cI("DOT",2),sOt=new cI("SVG",3)}function Hsn(){Hsn=O,sjt=new vC(QZn,0),hjt=new vC("RADIAL_COMPACTION",1),fjt=new vC("WEDGE_COMPACTION",2)}function qsn(){qsn=O,zet=new pS("CONCURRENT",0),Uet=new pS("IDENTITY_FINISH",1),Xet=new pS("UNORDERED",2)}function Gsn(){Gsn=O,wM(),oct=new $O(BJn,sct=rct),uct=new up(HJn),hct=new up(qJn),fct=new up(GJn)}function zsn(){zsn=O,lst=new ji,bst=new Ei,fst=new Ti,hst=new Mi,kW(new Si),sst=new D}function Usn(){Usn=O,emt=new WP("CONSERVATIVE",0),imt=new WP("CONSERVATIVE_SOFT",1),rmt=new WP("SLOPPY",2)}function Xsn(){Xsn=O,dCt=new WA(15),wCt=new XA((sWn(),XSt),dCt),gCt=gPt,hCt=aSt,fCt=KSt,bCt=BSt,lCt=FSt}function Wsn(n,t,e){var i,r;for(i=new YT,r=spn(e,0);r.b!=r.d.c;)DH(i,new wA(BB(b3(r),8)));Asn(n,t,i)}function Vsn(n){var t,e,i;for(t=0,i=x8(PMt,sVn,8,n.b,0,1),e=spn(n,0);e.b!=e.d.c;)i[t++]=BB(b3(e),8);return i}function Qsn(n){var t;return!n.a&&(n.a=new eU(WAt,n,9,5)),0!=(t=n.a).i?HM(BB(Wtn(t,0),678)):null}function Ysn(n,t){var e;return e=rbn(n,t),sS(r0(n,t),0)|YI(r0(n,e),0)?e:rbn(bVn,r0(jz(e,63),1))}function Jsn(n,t){var e;e=null!=mpn((Rwn(),Vpt))&&null!=t.wg()?Gy(MD(t.wg()))/Gy(MD(mpn(Vpt))):1,VW(n.b,t,e)}function Zsn(n,t){var e,i;return(e=BB(n.d.Bc(t),14))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function nhn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;e<n.a.length;)n.a[e]-=i,e+=e&-e}function thn(n){var t;if((t=n.a.c.length)>0)return Kz(t-1,n.a.c.length),s6(n.a,t-1);throw Hp(new mv)}function ehn(n,t,e){if(t<0)throw Hp(new Ay(n5n+t));t<n.j.c.length?c5(n.j,t,e):(g3(n,t),WB(n.j,e))}function ihn(n,t,e){if(n>t)throw Hp(new _y(mYn+n+yYn+t));if(n<0||t>e)throw Hp(new Tk(mYn+n+kYn+t+hYn+e))}function rhn(n){if(!n.a||0==(8&n.a.i))throw Hp(new Fy("Enumeration class expected for layout option "+n.f))}function chn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.ri(n.i),aHn(t,0,n.g,0,n.i))}function ahn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.c,null)}function uhn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,$X(n.a,t,n.a[i]),t=i;$X(n.a,n.b,null),n.b=n.b+1&e}function ohn(n,t,e){var i;return LZ(t,n.c.length),0!=(i=e.Pc()).length&&(tH(n.c,t,i),!0)}function shn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return n[t];return null}function hhn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.re(t,i.cd()))return i;return null}function fhn(n){var t,e,i,r,c;for(c=1,i=0,r=(e=n).length;i<r;++i)c=31*c+(null!=(t=e[i])?nsn(t):0),c|=0;return c}function lhn(n){var t,e,i,r,c;for(t={},r=0,c=(i=n).length;r<c;++r)t[":"+(null!=(e=i[r]).f?e.f:""+e.g)]=e;return t}function bhn(n){var t;for(yX(n),C_(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&dAn(n);t++)U5(n);return t}function whn(n){var t,e,i;for(i=0,e=new oz(ZL(n.a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||++i;return i}function dhn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw Hp(new wv);e=vW(i),++r}}function ghn(n,t){var e,i,r;for(r=t-n.f,i=new Wb(n.d);i.a<i.c.c.length;)kdn(e=BB(n0(i),443),e.e,e.f+r);n.f=t}function phn(n,t,i){return e.Math.abs(t-n)<_3n||e.Math.abs(i-n)<_3n||(t-n>_3n?n-i>_3n:i-n>_3n)}function vhn(n,t){return n?t&&!n.j||cL(n,124)&&0==BB(n,124).a.b?0:n.Re():0}function mhn(n,t){return n?t&&!n.k||cL(n,124)&&0==BB(n,124).a.a?0:n.Se():0}function yhn(n){return ODn(),n<0?-1!=n?new Rpn(-1,-n):Ytt:n<=10?Ztt[CJ(n)]:new Rpn(1,n)}function khn(n){throw Zun(),Hp(new gy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function jhn(n){hk(),V$(this),jQ(this),this.e=n,Cxn(this,n),this.g=null==n?zWn:Bbn(n),this.a="",this.b=n,this.a=""}function Ehn(){this.a=new nu,this.f=new dg(this),this.b=new gg(this),this.i=new pg(this),this.e=new vg(this)}function Thn(){cy.call(this,new q8(etn(16))),lin(2,oVn),this.b=2,this.a=new HW(null,null,0,null),iv(this.a,this.a)}function Mhn(){Mhn=O,cvt=new KP("DUMMY_NODE_OVER",0),avt=new KP("DUMMY_NODE_UNDER",1),uvt=new KP("EQUAL",2)}function Shn(){Shn=O,Xat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[(Ffn(),_Pt),FPt])),Wat=HJ(Pun(Gk(WPt,1),$Vn,103,0,[HPt,KPt]))}function Phn(n){return(kUn(),yIt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b}function Chn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Q$n(BB(t.Pb(),561),n.e,n.f),WB(n.g,e)}function Ihn(n,t){var e,i;e=n.nk(t,null),i=null,t&&(iE(),cen(i=new Kp,n.r)),(e=HTn(n,i,e))&&e.Fi()}function Ohn(n,t){var e,i;for(i=0!=H$n(n.d,1),e=!0;e;)e=!1,e=t.c.Tf(t.e,i),e|=DNn(n,t,i,!1),i=!i;$rn(n)}function Ahn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=dNn(t.q,n.b),t.q.d>r&&(aEn(t.q,r),i=e!=t.q.d)),i}function $hn(n,t){var i,r,c,a,u;return a=t.i,u=t.j,r=a-(i=n.f).i,c=u-i.j,e.Math.sqrt(r*r+c*c)}function Lhn(n,t){var e;return(e=Ydn(n))||(!$Ot&&($Ot=new Oo),RHn(),f9((e=new Cp(YPn(t))).Vk(),n)),e}function Nhn(n,t){var e,i;return(e=BB(n.c.Bc(t),14))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function xhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Dhn(n,t){var e;for(e=0;e<t.length;e++)if(n==(b1(e,t.length),t.charCodeAt(e)))return!0;return!1}function Rhn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!PH(n[t]))return!1;return!0}function Khn(n){var t;if(0!=n.c)return n.c;for(t=0;t<n.a.length;t++)n.c=33*n.c+(-1&n.a[t]);return n.c=n.c*n.e,n.c}function _hn(n){var t;return Px(n.a!=n.b),t=n.d.a[n.a],Ex(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function Fhn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw Hp(new yv);return t=n.a,n.a+=n.c.c,++n.b,iln(t)}function Bhn(n){var t;return t=new ftn(n),i2(n.a,sut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[t]))),t.d&&WB(t.f,t.d),t.f}function Hhn(n){var t;return qan(t=new O$(n.a),n),hon(t,(hWn(),dlt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function qhn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),70)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function Ghn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(cY(n,BB(i.Pb(),57),e))return!0;return!1}function zhn(n){var t,e;for(e=new Wb(n.r);e.a<e.c.c.length;)if(t=BB(n0(e),10),n.n[t.p]<=0)return t;return null}function Uhn(n){var t,e;for(e=new Rv,t=new Wb(n);t.a<t.c.c.length;)Frn(e,dDn(BB(n0(t),33)));return e}function Xhn(n){var t;return t=kA(Cmt),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),dft))&&dq(t,(yMn(),_at),(lWn(),Bot)),t}function Whn(n,t,e){var i;i=new MOn(n,t),JIn(n.r,t.Hf(),i),e&&!Hz(n.u)&&(i.c=new yJ(n.d),Otn(t.wf(),new Cw(i)))}function Vhn(n,t){var e;return JO(n)&&JO(t)&&(e=n-t,!isNaN(e))?e:Kkn(JO(n)?Pan(n):n,JO(t)?Pan(t):t)}function Qhn(n,t){return t<n.length&&(b1(t,n.length),63!=n.charCodeAt(t))&&(b1(t,n.length),35!=n.charCodeAt(t))}function Yhn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new ZSn(n.c,n.a,e,c),new uRn(e,n.a,r,n.e,n.b,n.c==(oin(),Amt)))}function Jhn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,1,r,t),e?e.Ei(i):e=i),e}function Zhn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,3,r,t),e?e.Ei(i):e=i),e}function nfn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,0,r,t),e?e.Ei(i):e=i),e}function tfn(n,t){var e,i,r,c;return(c=kCn((i=t,(r=n?Ydn(n):null)&&r.Xk(),i)))==t&&(e=Ydn(n))&&e.Xk(),c}function efn(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 ifn(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 rfn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(BB(t.g,367),r=t.i,i=0;i<r;++i);}function cfn(n){var t,i,r;for(r=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),r=e.Math.max(r,t.g);return r}function afn(n){var t,e,i;for(i=new Wb(n.b);i.a<i.c.c.length;)(t=(e=BB(n0(i),214)).c.Rf()?e.f:e.a)&&wqn(t,e.j)}function ufn(){ufn=O,vCt=new HC("INHERIT",0),pCt=new HC("INCLUDE_CHILDREN",1),mCt=new HC("SEPARATE_CHILDREN",2)}function ofn(n,t){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),void sqn(n.n);case 2:return void $in(n,null)}zun(n,t)}function sfn(n){switch(n.gc()){case 0:return Fnt;case 1:return new Pq(yX(n.Xb(0)));default:return new SY(n)}}function hfn(n){switch(s_(),n.gc()){case 0:return VX(),Vnt;case 1:return new yk(n.Kc().Pb());default:return new vS(n)}}function ffn(n){switch(s_(),n.c){case 0:return VX(),Vnt;case 1:return new yk(JCn(new QT(n)));default:return new sy(n)}}function lfn(n,t){yX(n);try{return n.xc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function bfn(n,t){yX(n);try{return n.Bc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return null;throw Hp(e)}}function wfn(n,t){yX(n);try{return n.Hc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function dfn(n,t){yX(n);try{return n.Mc(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function gfn(n,t){yX(n);try{return n._b(t)}catch(e){if(cL(e=lun(e),205)||cL(e,173))return!1;throw Hp(e)}}function pfn(n,t){n.a.c.length>0&&dsn(BB(xq(n.a,n.a.c.length-1),570),t)||WB(n.a,new p5(t))}function vfn(n){var t,e;G_(),t=n.d.c-n.e.c,Otn((e=BB(n.g,145)).b,new jd(t)),Otn(e.c,new Ed(t)),e5(e.i,new Td(t))}function mfn(n){var t;return(t=new Ck).a+="VerticalSegment ",uO(t,n.e),t.a+=" ",oO(t,JL(new mk,new Wb(n.k))),t.a}function yfn(n){var t;return(t=BB(lnn(n.c.c,""),229))||(t=new UZ(jj(kj(new pu,""),"Other")),Jgn(n.c.c,"",t)),t}function kfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (name: ",cO(t,n.zb),t.a+=")",t.a)}function jfn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),e}function Efn(n,t){var e,i;for(e=0,i=abn(n,t).Kc();i.Ob();)e+=null!=mMn(BB(i.Pb(),11),(hWn(),Elt))?1:0;return e}function Tfn(n,t,e){var i,r,c;for(i=0,c=spn(n,0);c.b!=c.d.c&&!((r=Gy(MD(b3(c))))>e);)r>=t&&++i;return i}function Mfn(n,t,e){var i;return i=new N7(n.e,3,13,null,t.c||(gWn(),l$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function Sfn(n,t,e){var i;return i=new N7(n.e,4,13,t.c||(gWn(),l$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Pfn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,8,r,n.r),e?e.Ei(i):e=i),e}function Cfn(n,t){var e,i;return!(i=(e=BB(t,676)).vk())&&e.wk(i=cL(t,88)?new $I(n,BB(t,26)):new _0(n,BB(t,148))),i}function Ifn(n,t,e){var i;n.qi(n.i+1),i=n.oi(t,e),t!=n.i&&aHn(n.g,t,n.g,t+1,n.i-t),$X(n.g,t,i),++n.i,n.bi(t,e),n.ci()}function Ofn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?oO(n.a,n.b):n.a=new lN(n.d),G0(n.a,t.a,t.d.length,e)),n}function Afn(n,t){var e,i,r;if(t.vi(n.a),null!=(r=BB(yan(n.a,8),1936)))for(e=0,i=r.length;e<i;++e)null.jm()}function $fn(n,t){var e;return e=new sn,n.a.sd(e)?(CL(),new vy(kW(T7(n,e.a,t)))):(EW(n),CL(),CL(),Set)}function Lfn(n,t){switch(t.g){case 2:case 1:return abn(n,t);case 3:case 4:return ean(abn(n,t))}return SQ(),SQ(),set}function Nfn(n,t){return XI(n)?mK(n,t):UI(n)?vK(n,t):zI(n)?(kW(n),GI(n)===GI(t)):iz(n)?n.Fb(t):AG(n)?FO(n,t):v0(n,t)}function xfn(n){return n?0!=(1&n.i)?n==$Nt?ktt:n==ANt?Att:n==DNt?Ctt:n==xNt?Ptt:n==LNt?Rtt:n==RNt?_tt:n==NNt?Ttt:Stt:n:null}function Dfn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=dvn(r,e,i,n[0]):1==i?r[t]=dvn(r,n,t,e[0]):YOn(n,e,r,t,i))}function Rfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Oe),eOn(e,t))}function Kfn(n,t){var e;0!=n.c.length&&(hA(e=BB(Qgn(n,x8(Out,a1n,10,n.c.length,0,1)),193),new Ae),eOn(e,t))}function _fn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),n.n;case 2:return n.k}return Eyn(n,t,e,i)}function Ffn(){Ffn=O,BPt=new KC(hJn,0),FPt=new KC(aJn,1),_Pt=new KC(cJn,2),KPt=new KC(pJn,3),HPt=new KC("UP",4)}function Bfn(){Bfn=O,wut=new YS(QZn,0),but=new YS("INSIDE_PORT_SIDE_GROUPS",1),lut=new YS("FORCE_MODEL_ORDER",2)}function Hfn(n,t,e){if(n<0||t>e)throw Hp(new Ay(mYn+n+kYn+t+", size: "+e));if(n>t)throw Hp(new _y(mYn+n+yYn+t))}function qfn(n,t,e){if(t<0)cIn(n,e);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Vj(n,n.yh(),t)}}function Gfn(n,t,e,i,r,c,a,u){var o;for(o=e;c<a;)o>=i||t<e&&u.ue(n[t],n[o])<=0?$X(r,c++,n[t++]):$X(r,c++,n[o++])}function zfn(n,t,e,i,r,c){this.e=new Np,this.f=(ain(),Gvt),WB(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Ufn(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),26),GI(t)===GI(e))return!0;return!1}function Xfn(n){var t,e,i,r;for(dWn(),i=0,r=(e=tpn()).length;i<r;++i)if(-1!=E7((t=e[i]).a,n,0))return t;return Irt}function Wfn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function Vfn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (source: ",cO(t,n.d),t.a+=")",t.a)}function Qfn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,5,r,n.a),e?KEn(e,i):e=i),e}function Yfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,2,e,t))}function Jfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function Zfn(n,t){var e;e=0!=(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,8,e,t))}function nln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,3,e,t))}function tln(n,t){var e;e=0!=(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,9,e,t))}function eln(n,t){var e;return-1==n.b&&n.a&&(e=n.a.Gj(),n.b=e?n.c.Xg(n.a.aj(),e):Awn(n.c.Tg(),n.a)),n.c.Og(n.b,t)}function iln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(tq(),Itt)[t])&&(e=Itt[t]=new xb(n)),e):new xb(n)}function rln(n){var t,e;return n>-129&&n<128?(t=n+128,!(e=(Tq(),Ktt)[t])&&(e=Ktt[t]=new Rb(n)),e):new Rb(n)}function cln(n){var t;return n.k==(uSn(),Mut)&&((t=BB(mMn(n,(hWn(),Qft)),61))==(kUn(),sIt)||t==SIt)}function aln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?m$n(n,i,t,e):null}function uln(n,t,e){var i,r;return(r=$$n(n.b,t))&&(i=BB(NHn(F7(n,r),""),26))?y$n(n,i,t,e):null}function oln(n,t){var e,i;for(i=new AL(n);i.e!=i.i.gc();)if(e=BB(kpn(i),138),GI(t)===GI(e))return!0;return!1}function sln(n,t,e){var i;if(t>(i=n.gc()))throw Hp(new tK(t,i));if(n.hi()&&n.Hc(e))throw Hp(new _y(a8n));n.Xh(t,e)}function hln(n,t){var e;if(null==(e=sen(n.i,t)))throw Hp(new ek("Node did not exist in input."));return Kcn(t,e),null}function fln(n,t){var e;if(cL(e=NNn(n,t),322))return BB(e,34);throw Hp(new _y(r6n+t+"' is not a valid attribute"))}function lln(n,t,e){var i,r;for(r=cL(t,99)&&0!=(BB(t,18).Bb&BQn)?new xO(t,n):new Aan(t,n),i=0;i<e;++i)cvn(r);return r}function bln(n){var t,e,i;for(i=0,e=n.length,t=0;t<e;t++)32==n[t]||13==n[t]||10==n[t]||9==n[t]||(n[i++]=n[t]);return i}function wln(n){var t,e,i;for(t=new Np,i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),594),gun(t,BB(e.jf(),14));return t}function dln(n){var t,e;for(e=BB(mMn(n,(qqn(),lkt)),15).Kc();e.Ob();)DH((t=BB(e.Pb(),188)).b.d,t),DH(t.c.b,t)}function gln(n){switch(BB(mMn(n,(hWn(),ilt)),303).g){case 1:hon(n,ilt,(z7(),Sft));break;case 2:hon(n,ilt,(z7(),Cft))}}function pln(n){var t;n.g&&(xxn((t=n.c.Rf()?n.f:n.a).a,n.o,!0),xxn(t.a,n.o,!1),hon(n.o,(HXn(),ept),(QEn(),UCt)))}function vln(n){var t;if(!n.a)throw Hp(new Fy("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,xQ(n,t),NQ(n,t)}function mln(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,$X(n.a,n.c,null),t)}function yln(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=BB(e.Pb(),213)).f&&n.b[t.c]<-1e-10)return t;return null}function kln(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new UV(t.d,0,t.a,t.b);default:return null}}function jln(n){switch(n.g){case 2:return FPt;case 1:return _Pt;case 4:return KPt;case 3:return HPt;default:return BPt}}function Eln(n){switch(n.g){case 1:return CIt;case 2:return sIt;case 3:return oIt;case 4:return SIt;default:return PIt}}function Tln(n){switch(n.g){case 1:return SIt;case 2:return CIt;case 3:return sIt;case 4:return oIt;default:return PIt}}function Mln(n){switch(n.g){case 1:return oIt;case 2:return SIt;case 3:return CIt;case 4:return sIt;default:return PIt}}function Sln(n){switch(n){case 0:return new mm;case 1:return new pm;case 2:return new vm;default:throw Hp(new wv)}}function Pln(n,t){return n<t?-1:n>t?1:n==t?0==n?Pln(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function Cln(n,t){OTn(t,"Sort end labels",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new we),new de),new ge),HSn(t)}function Iln(n,t,e){var i,r;return n.ej()?(r=n.fj(),i=YIn(n,t,e),n.$i(n.Zi(7,iln(e),i,t,r)),i):YIn(n,t,e)}function Oln(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.cd(),N6(n,i=((e=t.Sh())&DWn)%n.d.length,A$n(n,i,e,r)))}function Aln(n,t){var e;e=0!=(n.Bb&k6n),t?n.Bb|=k6n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,10,e,t))}function $ln(n,t){var e;e=0!=(n.Bb&_Qn),t?n.Bb|=_Qn:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,12,e,t))}function Lln(n,t){var e;e=0!=(n.Bb&T9n),t?n.Bb|=T9n:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,15,e,t))}function Nln(n,t){var e;e=0!=(n.Bb&M9n),t?n.Bb|=M9n:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,11,e,t))}function xln(n,t){var e;return 0!=(e=Pln(n.b.c,t.b.c))||0!=(e=Pln(n.a.a,t.a.a))?e:Pln(n.a.b,t.a.b)}function Dln(n,t){var e;if(null==(e=RX(n.k,t)))throw Hp(new ek("Port did not exist in input."));return Kcn(t,e),null}function Rln(n){var t,e;for(e=G$n(Utn(n)).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return y4((UM(),RAt),t);return null}function Kln(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=0,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&++c;return c}function _ln(n,t,e){var i,r;return i=BB(t.We(n.a),35),r=BB(e.We(n.a),35),null!=i&&null!=r?Ncn(i,r):null!=i?-1:null!=r?1:0}function Fln(n,t,e){var i;if(n.c)lMn(n.c,t,e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Fln(BB(n0(i),157),t,e)}function Bln(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),y7(n.b.b,e.b),uY(BB(e.a,189),BB(e.b,81))}function Hln(n){var t,e;for(e=xX(new Ck,91),t=!0;n.Ob();)t||(e.a+=FWn),t=!1,uO(e,n.Pb());return(e.a+="]",e).a}function qln(n,t){var e;e=0!=(n.Bb&hVn),t?n.Bb|=hVn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,16,e,t))}function Gln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function zln(n,t){var e;e=0!=(n.Bb&h6n),t?n.Bb|=h6n:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,18,e,t))}function Uln(n,t){var e;e=0!=(n.Bb&BQn),t?n.Bb|=BQn:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new t6(n,1,20,e,t))}function Xln(n){var t;return t=x8(ONt,WVn,25,2,15,1),n-=BQn,t[0]=(n>>10)+HQn&QVn,t[1]=56320+(1023&n)&QVn,Bdn(t,0,t.length)}function Wln(n){var t;return(t=BB(mMn(n,(HXn(),Udt)),103))==(Ffn(),BPt)?Gy(MD(mMn(n,Edt)))>=1?FPt:KPt:t}function Vln(n){switch(BB(mMn(n,(HXn(),Zdt)),218).g){case 1:return new ic;case 3:return new oc;default:return new ec}}function Qln(n){if(n.c)Qln(n.c);else if(n.d)throw Hp(new Fy("Stream already terminated, can't be modified or used"))}function Yln(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (identifier: ",cO(t,n.k),t.a+=")",t.a)}function Jln(n,t,e){var i;return tE(),jen(i=new ro,t),Een(i,e),n&&f9((!n.a&&(n.a=new $L(xOt,n,5)),n.a),i),i}function Zln(n,t,e,i){var r,c;return kW(i),kW(e),null==(c=null==(r=n.xc(t))?e:ZT(BB(r,15),BB(e,14)))?n.Bc(t):n.zc(t,c),c}function nbn(n){var t,e,i,r;return orn(e=new YK(t=BB(Vj((r=(i=n.gm).f)==Unt?i:r),9),BB(SR(t,t.length),9),0),n),e}function tbn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),10),oun(e,BB(xq(t,i.p),14)))return i;return null}function ebn(n,t,e){try{_on(n,t,e)}catch(i){throw cL(i=lun(i),597)?Hp(new g5(i)):Hp(i)}return t}function ibn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n-t)&&e<OQn?e:uan(hun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function rbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n+t)&&e<OQn?e:uan(sun(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function cbn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n*t)&&e<OQn?e:uan(fqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t))}function abn(n,t){var e;return n.i||eIn(n),(e=BB(oV(n.g,t),46))?new s1(n.j,BB(e.a,19).a,BB(e.b,19).a):(SQ(),SQ(),set)}function ubn(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,oY(n.b)):++n.d,i}function obn(n,t,i){n.n=kq(LNt,[sVn,FQn],[364,25],14,[i,CJ(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function sbn(){var n,t,i;yTn(),i=Let+++Date.now(),n=CJ(e.Math.floor(i*uYn))&sYn,t=CJ(i-n*oYn),this.a=1502^n,this.b=t^aYn}function hbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).b);return yX(t),new OO(t)}function fbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).e);return yX(t),new OO(t)}function lbn(n){var t,e;for(t=new Np,e=new Wb(n.j);e.a<e.c.c.length;)WB(t,BB(n0(e),11).g);return yX(t),new OO(t)}function bbn(n){var t,e;for(e=t$n(Utn(dZ(n))).Kc();e.Ob();)if(N_n(n,t=SD(e.Pb())))return k4((XM(),UAt),t);return null}function wbn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw Hp(new Hy("at index "+t));return new Jy(n)}function dbn(n,t){var e;if(cL(e=NNn(n.Tg(),t),99))return BB(e,18);throw Hp(new _y(r6n+t+"' is not a valid reference"))}function gbn(n){var t;return(t=bSn(n))>34028234663852886e22?RQn:t<-34028234663852886e22?KQn:t}function pbn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function vbn(n){var t,e,i;for(t=new hR(n.Hd().gc()),i=0,e=L9(n.Hd().Kc());e.Ob();)jZ(t,e.Pb(),iln(i++));return NSn(t.a)}function mbn(n,t){var e,i,r;for(r=new xp,i=t.vc().Kc();i.Ob();)VW(r,(e=BB(i.Pb(),42)).cd(),lan(n,BB(e.dd(),15)));return r}function ybn(n,t){0==n.n.c.length&&WB(n.n,new RJ(n.s,n.t,n.i)),WB(n.b,t),smn(BB(xq(n.n,n.n.c.length-1),211),t),BFn(n,t)}function kbn(n){return n.c==n.b.b&&n.i==n.g.b||(n.a.c=x8(Ant,HWn,1,0,5,1),gun(n.a,n.b),gun(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function jbn(n,t){var e,i;for(i=0,e=BB(t.Kb(n),20).Kc();e.Ob();)qy(TD(mMn(BB(e.Pb(),17),(hWn(),Clt))))||++i;return i}function Ebn(n,t){var i,r;r=Gy(MD(edn(f2(t),(HXn(),ypt)))),Fkn(t,i=e.Math.max(0,r/2-.5),1),WB(n,new lP(t,i))}function Tbn(){Tbn=O,qlt=new BP(QZn,0),_lt=new BP("FIRST",1),Flt=new BP(C1n,2),Blt=new BP("LAST",3),Hlt=new BP(I1n,4)}function Mbn(){Mbn=O,ZPt=new FC(hJn,0),YPt=new FC("POLYLINE",1),QPt=new FC("ORTHOGONAL",2),JPt=new FC("SPLINES",3)}function Sbn(){Sbn=O,Zjt=new kC("ASPECT_RATIO_DRIVEN",0),nEt=new kC("MAX_SCALE_DRIVEN",1),Jjt=new kC("AREA_DRIVEN",2)}function Pbn(){Pbn=O,HEt=new EC("P1_STRUCTURE",0),qEt=new EC("P2_PROCESSING_ORDER",1),GEt=new EC("P3_EXECUTION",2)}function Cbn(){Cbn=O,ejt=new gC("OVERLAP_REMOVAL",0),njt=new gC("COMPACTION",1),tjt=new gC("GRAPH_SIZE_CALCULATION",2)}function Ibn(n,t){return h$(),rin(KVn),e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t))}function Obn(n,t){var e,i;for(e=spn(n,0);e.b!=e.d.c;){if((i=zy(MD(b3(e))))==t)return;if(i>t){U0(e);break}}nX(e,t)}function Abn(n,t){var e,i,r,c,a;if(e=t.f,Jgn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Jgn(n.c.e,i,t)}function $bn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.ue(n[c-1],n[c])>0;--c)a=n[c],$X(n,c,n[c-1]),$X(n,c-1,a)}function Lbn(n,t,e,i){if(t<0)TLn(n,e,i);else{if(!e.Ij())throw Hp(new _y(r6n+e.ne()+c6n));BB(e,66).Nj().Tj(n,n.yh(),t,i)}}function Nbn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw Hp(new _y("Node "+t+" not part of edge "+n))}function xbn(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 Dbn(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 Rbn(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 _fn(n,t,e,i)}function Kbn(n){return n.k==(uSn(),Cut)&&o5(new Rq(null,new zU(new oz(ZL(lbn(n).a.Kc(),new h)))),new qr)}function _bn(n){return null==n.e?n:(!n.c&&(n.c=new rRn(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,null)),n.c)}function Fbn(n,t){return n.h==CQn&&0==n.m&&0==n.l?(t&&(ltt=M$(0,0,0)),WO((X7(),dtt))):(t&&(ltt=M$(n.l,n.m,n.h)),M$(0,0,0))}function Bbn(n){return Array.isArray(n)&&n.im===I?nE(tsn(n))+"@"+(nsn(n)>>>0).toString(16):n.toString()}function Hbn(n){var t;this.a=new YK(t=BB(n.e&&n.e(),9),BB(SR(t,t.length),9),0),this.b=x8(Ant,HWn,1,this.a.a.length,5,1)}function qbn(n){var t,e,i;for(this.a=new fA,i=new Wb(n);i.a<i.c.c.length;)e=BB(n0(i),14),brn(t=new hG,e),TU(this.a,t)}function Gbn(n){var t,e;for(qD(),t=n.o.b,e=BB(BB(h6(n.r,(kUn(),SIt)),21),84).Kc();e.Ob();)BB(e.Pb(),111).e.b+=t}function zbn(n){var t;if(n.b){if(zbn(n.b),n.b.d!=n.c)throw Hp(new vv)}else n.d.dc()&&(t=BB(n.f.c.xc(n.e),14))&&(n.d=t)}function Ubn(n){var t;return null==n||(t=n.length)>0&&(b1(t-1,n.length),58==n.charCodeAt(t-1))&&!Xbn(n,LAt,NAt)}function Xbn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(ton((b1(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function Wbn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(tSn(t,(e=BB(i.Pb(),266)).d)||ICn(t,e.d))return!0;return!1}function Vbn(n,t){var e,i,r;for(r=(i=HRn(n,t))[i.length-1]/2,e=0;e<i.length;e++)if(i[e]>=r)return t.c+e;return t.c+t.b.gc()}function Qbn(n,t){var e,i,r,c;for(dD(),r=t,z9(i=H9(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=gkn(n,i[e],e))&&Iln(n,e,c)}function Ybn(n,t){var e,i,r,c,a,u;for(i=0,e=0,a=0,u=(c=t).length;a<u;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Jbn(n){var t,e,i;for((i=new Sk).a+="[",t=0,e=n.gc();t<e;)cO(i,kN(n.ki(t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a}function Zbn(n){var t,e,i;return i=ATn(n),!WE(n.c)&&(rtn(i,"knownLayouters",e=new Cl),t=new rp(e),e5(n.c,t)),i}function nwn(n,t){var e,i;for(kW(t),e=!1,i=new Wb(n);i.a<i.c.c.length;)ywn(t,n0(i),!1)&&(AU(i),e=!0);return e}function twn(n){var t,e;for(e=Gy(MD(n.a.We((sWn(),OPt)))),t=new Wb(n.a.xf());t.a<t.c.c.length;)VUn(n,BB(n0(t),680),e)}function ewn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),46),WB(n.b.b,BB(e.b,81)),g2(BB(e.a,189),BB(e.b,81))}function iwn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)kG(r,0,new HX(n.a));PZ(t,BB(xq(r,r.c.length-e),29)),n.b[t.p]=e}function rwn(n,t,e){var i;!(i=e)&&(i=LH(new Xm,0)),OTn(i,qZn,2),mvn(n.b,t,mcn(i,1)),Kqn(n,t,mcn(i,1)),qUn(t,mcn(i,1)),HSn(i)}function cwn(n,t,e,i,r){BZ(),UNn(aM(cM(rM(uM(new Hv,0),r.d.e-n),t),r.d)),UNn(aM(cM(rM(uM(new Hv,0),e-r.a.e),r.a),i))}function awn(n,t,e,i,r,c){this.a=n,this.c=t,this.b=e,this.f=i,this.d=r,this.e=c,this.c>0&&this.b>0&&Yq(this.c,this.b,this.a)}function uwn(n){Rwn(),this.c=u6(Pun(Gk(rMt,1),HWn,831,0,[Wpt])),this.b=new xp,this.a=n,VW(this.b,Vpt,1),Otn(Qpt,new Pg(this))}function own(n,t){var e;return n.d?hU(n.b,t)?BB(RX(n.b,t),51):(e=t.Kf(),VW(n.b,t,e),e):t.Kf()}function swn(n,t){var e;return GI(n)===GI(t)||!!cL(t,91)&&(e=BB(t,91),n.e==e.e&&n.d==e.d&&E4(n,e.a))}function hwn(n){switch(kUn(),n.g){case 4:return sIt;case 1:return oIt;case 3:return SIt;case 2:return CIt;default:return PIt}}function fwn(n,t){switch(t){case 3:return 0!=n.f;case 4:return 0!=n.g;case 5:return 0!=n.i;case 6:return 0!=n.j}return Ean(n,t)}function lwn(n){switch(n.g){case 0:return new Ga;case 1:return new za;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function bwn(n){switch(n.g){case 0:return new qa;case 1:return new Ua;default:throw Hp(new _y(M1n+(null!=n.f?n.f:""+n.g)))}}function wwn(n){switch(n.g){case 0:return new Vm;case 1:return new ym;default:throw Hp(new _y(N4n+(null!=n.f?n.f:""+n.g)))}}function dwn(n){switch(n.g){case 1:return new Ra;case 2:return new gD;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function gwn(n){var t,e;if(n.b)return n.b;for(e=Qet?null:n.d;e;){if(t=Qet?null:e.b)return t;e=Qet?null:e.d}return lM(),Het}function pwn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&Ccn(n)==n.d-1&&(--e,e|=0),t-=ZIn(e))}function vwn(n){var t,e,i;return n<tet.length?tet[n]:(t=31&n,(i=x8(ANt,hQn,25,1+(e=n>>5),15,1))[e]=1<<t,new lU(1,e+1,i))}function mwn(n){var t,e,i;return(e=n.zg())?cL(t=n.Ug(),160)&&null!=(i=mwn(BB(t,160)))?i+"."+e:e:null}function ywn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),GI(t)===GI(i)||null!=t&&Nfn(t,i))return e&&r.Qb(),!0;return!1}function kwn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.Hi(t,n.oi(t,i)),++t;return!0}function jwn(n,t,e,i){var r,c;if((c=e-t)<3)for(;c<3;)n*=10,++c;else{for(r=1;c>3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function Ewn(n){return Shn(),hN(),!!(Dbn(BB(n.a,81).j,BB(n.b,103))||0!=BB(n.a,81).d.e&&Dbn(BB(n.a,81).j,BB(n.b,103)))}function Twn(n){x9(),BB(n.We((sWn(),qSt)),174).Hc((n_n(),VIt))&&(BB(n.We(fPt),174).Fc((lIn(),cIt)),BB(n.We(qSt),174).Mc(VIt))}function Mwn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(BB(n.g[e],366).Di(t))return!1;return f9(n,t)}return!1}function Swn(n){var t,e,i;for(t=new Cl,i=new qb(n.b.Kc());i.b.Ob();)e=VSn(BB(i.b.Pb(),686)),WU(t,t.a.length,e);return t.a}function Pwn(n){var t;return!n.c&&(n.c=new Nn),m$(n.d,new Dn),YKn(n),t=lDn(n),JT(new Rq(null,new w1(n.d,16)),new Iw(n)),t}function Cwn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (instanceClassName: ",cO(t,n.D),t.a+=")",t.a)}function Iwn(n,t){var e,i;t&&(e=Ren(t,"x"),Ten(new Zg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new np(n).a,(kW(i),i)))}function Own(n,t){var e,i;t&&(e=Ren(t,"x"),Ien(new Vg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Yg(n).a,(kW(i),i)))}function Awn(n,t){var e,i,r;if(null==n.i&&qFn(n),e=n.i,-1!=(i=t.aj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function $wn(n){var t,e,i,r;for(e=BB(n.g,674),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(vFn(n,t,e[r])){Lyn(n,i);break}}function Lwn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[UVn]))}function Nwn(n){var t;switch(WX(),(t=n.Pc()).length){case 0:return Fnt;case 1:return new Pq(yX(t[0]));default:return new SY(wbn(t))}}function xwn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),Nut));case 2:return KB(n.j,(gcn(),Dut));default:return SQ(),SQ(),set}}function Dwn(n,t){switch(t){case 3:return void Men(n,0);case 4:return void Sen(n,0);case 5:return void Pen(n,0);case 6:return void Cen(n,0)}ofn(n,t)}function Rwn(){Rwn=O,AM(),HXn(),Vpt=Opt,Qpt=u6(Pun(Gk(lMt,1),k3n,146,0,[mpt,ypt,jpt,Ept,Spt,Ppt,Cpt,Ipt,$pt,Npt,kpt,Tpt,Apt]))}function Kwn(n){var t,e;t=n.d==($Pn(),Jst),e=$En(n),hon(n.a,(HXn(),kdt),t&&!e||!t&&e?(wvn(),$Mt):(wvn(),AMt))}function _wn(n,t){var e;return(e=BB(P4(n,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Qc(lH(e.gc()))}function Fwn(){Fwn=O,eOt=new YC("SIMPLE",0),ZIt=new YC("GROUP_DEC",1),tOt=new YC("GROUP_MIXED",2),nOt=new YC("GROUP_INC",3)}function Bwn(){Bwn=O,z$t=new $o,K$t=new Lo,_$t=new No,F$t=new xo,B$t=new Do,H$t=new Ro,q$t=new Ko,G$t=new _o,U$t=new Fo}function Hwn(n,t,e){qtn(),sm.call(this),this.a=kq(Xit,[sVn,rJn],[595,212],0,[nrt,Zit],2),this.c=new bA,this.g=n,this.f=t,this.d=e}function qwn(n,t){this.n=kq(LNt,[sVn,FQn],[364,25],14,[t,CJ(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function Gwn(n,t){OTn(t,"End label post-processing",1),JT(AV(wnn(new Rq(null,new w1(n.b,16)),new ae),new ue),new oe),HSn(t)}function zwn(n,t,e){var i;return i=Gy(n.p[t.i.p])+Gy(n.d[t.i.p])+t.n.b+t.a.b,Gy(n.p[e.i.p])+Gy(n.d[e.i.p])+e.n.b+e.a.b-i}function Uwn(n,t,e){var i,r;for(i=e0(e,UQn),r=0;0!=Vhn(i,0)&&r<t;r++)i=rbn(i,e0(n[r],UQn)),n[r]=dG(i),i=kz(i,32);return dG(i)}function Xwn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))<64&&(r=i0(r,yz(1,t)));return r}function Wwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Vwn(n){var t;return null==n?null:new $A((t=FBn(n,!0)).length>0&&(b1(0,t.length),43==t.charCodeAt(0))?t.substr(1):t)}function Qwn(n,t){return n.i>0&&(t.length<n.i&&(t=Den(tsn(t).c,n.i)),aHn(n.g,0,t,0,n.i)),t.length>n.i&&$X(t,n.i,null),t}function Ywn(n,t,e){var i,r,c;return n.ej()?(i=n.i,c=n.fj(),Ifn(n,i,t),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):Ifn(n,n.i,t),e}function Jwn(n,t,e){var i,r;return i=new N7(n.e,4,10,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),null,uvn(n,t),!1),e?e.Ei(i):e=i,e}function Zwn(n,t,e){var i,r;return i=new N7(n.e,3,10,null,cL(r=t.c,88)?BB(r,26):(gWn(),d$t),uvn(n,t),!1),e?e.Ei(i):e=i,e}function ndn(n){var t;return qD(),t=new wA(BB(n.e.We((sWn(),BSt)),8)),n.B.Hc((n_n(),GIt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function tdn(n){return bvn(),(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197)}function edn(n,t){var e,i;return i=null,Lx(n,(HXn(),Mpt))&&(e=BB(mMn(n,Mpt),94)).Xe(t)&&(i=e.We(t)),null==i&&(i=mMn(vW(n),t)),i}function idn(n,t){var e,i,r;return!!cL(t,42)&&(i=(e=BB(t,42)).cd(),wW(r=lfn(n.Rc(),i),e.dd())&&(null!=r||n.Rc()._b(i)))}function rdn(n,t){var e;return n.f>0&&(n.qj(),-1!=A$n(n,((e=null==t?0:nsn(t))&DWn)%n.d.length,e,t))}function cdn(n,t){var e,i;return n.f>0&&(n.qj(),e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?e.dd():null}function adn(n,t){var e,i,r,c;for(c=axn(n.e.Tg(),t),e=BB(n.g,119),r=0;r<n.i;++r)if(i=e[r],c.rl(i.ak()))return!1;return!0}function udn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!BB(n.b,49).Zg())return!0;return n.b=null,!1}return!0}function odn(n,t){n.mj();try{n.d.Vc(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function sdn(n,t){var e,i;return s$(),i=null,t==(e=fR((fk(),fk(),rtt)))&&(i=BB(SJ(itt,n),615)),i||(i=new zX(n),t==e&&mZ(itt,n,i)),i}function hdn(n,t){var i,r;n.a=rbn(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 fdn(n,t){var e;n.c=t,n.a=pwn(t),n.a<54&&(n.f=(e=t.d>1?i0(yz(t.a[1],32),e0(t.a[0],UQn)):e0(t.a[0],UQn),j2(cbn(t.e,e))))}function ldn(n,t){var e;return JO(n)&&JO(t)&&$Qn<(e=n%t)&&e<OQn?e:uan((Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!0),ltt))}function bdn(n,t){var e;Dzn(t),(e=BB(mMn(n,(HXn(),Jdt)),276))&&hon(n,Jdt,Ayn(e)),nx(n.c),nx(n.f),V6(n.d),V6(BB(mMn(n,Agt),207))}function wdn(n){this.e=x8(ANt,hQn,25,n.length,15,1),this.c=x8($Nt,ZYn,25,n.length,16,1),this.b=x8($Nt,ZYn,25,n.length,16,1),this.f=0}function ddn(n){var t,e;for(n.j=x8(xNt,qQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.j[t.p]=t.o.b/n.i}function gdn(n){var t;0!=n.c&&(1==(t=BB(xq(n.a,n.b),287)).b?(++n.b,n.b<n.a.c.length&&Tb(BB(xq(n.a,n.b),287))):--t.b,--n.c)}function pdn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(lbn(t).a.Kc(),new h))),17).d.i).k==(uSn(),Put)&&WB(n.e,t)}while(t.k==(uSn(),Put))}function vdn(){vdn=O,LIt=new WA(15),$It=new XA((sWn(),XSt),LIt),xIt=new XA(LPt,15),NIt=new XA(vPt,iln(0)),AIt=new XA(cSt,dZn)}function mdn(){mdn=O,KIt=new VC("PORTS",0),_It=new VC("PORT_LABELS",1),RIt=new VC("NODE_LABELS",2),DIt=new VC("MINIMUM_SIZE",3)}function ydn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)Yxn(n,(b1(e,t.length),t.charCodeAt(e)),(b1(e+1,t.length),t.charCodeAt(e+1)))}function kdn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),i.s+c,i.t+a);n.e=t,n.f=e}function jdn(n,t){var e,i,r;for(r=t.b.b,n.a=new YT,n.b=x8(ANt,hQn,25,r,15,1),e=0,i=spn(t.b,0);i.b!=i.d.c;)BB(b3(i),86).g=e++}function Edn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),xTn(i=x8(ANt,hQn,25,r,15,1),n.a,e,t),X0(c=new lU(n.e,r,i)),c}function Tdn(n,t,e){var i,r;i=BB(SJ(iNt,t),117),r=BB(SJ(rNt,t),117),e?(mZ(iNt,n,i),mZ(rNt,n,r)):(mZ(rNt,n,i),mZ(iNt,n,r))}function Mdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function Sdn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.ue(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function Pdn(n,t,e,i){var r,c,a;return r=!1,LGn(n.f,e,i)&&(xgn(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 Cdn(n,t,e,i,r){var c,a,u;for(a=r;t.b!=t.c;)c=BB(dU(t),10),u=BB(abn(c,i).Xb(0),11),n.d[u.p]=a++,e.c[e.c.length]=u;return a}function Idn(n,t,i){var r,c,a,u,o;return u=n.k,o=t.k,c=MD(edn(n,r=i[u.g][o.g])),a=MD(edn(t,r)),e.Math.max((kW(c),c),(kW(a),a))}function Odn(n,t,e){var i,r,c,a;for(i=e/n.c.length,r=0,a=new Wb(n);a.a<a.c.c.length;)ghn(c=BB(n0(a),200),c.f+i*r),ajn(c,t,i),++r}function Adn(n,t,e){var i,r,c;for(r=BB(RX(n.b,e),177),i=0,c=new Wb(t.j);c.a<c.c.c.length;)r[BB(n0(c),113).d.p]&&++i;return i}function $dn(n){var t,e;return null!=(t=BB(yan(n.a,4),126))?(aHn(t,0,e=x8(dAt,i9n,415,t.length,0,1),0,t.length),e):wAt}function Ldn(){var n;return 0!=ctt&&(n=l5())-att>2e3&&(att=n,utt=e.setTimeout(QE,10)),0==ctt++&&(Onn((sk(),ttt)),!0)}function Ndn(n,t){var e;for(e=new oz(ZL(lbn(n).a.Kc(),new h));dAn(e);)if(BB(U5(e),17).d.i.c==t)return!1;return!0}function xdn(n,t){var e;if(cL(t,245)){e=BB(t,245);try{return 0==n.vd(e)}catch(i){if(!cL(i=lun(i),205))throw Hp(i)}}return!1}function Ddn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function Rdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))>0}function Kdn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<0}function _dn(n,t){return h$(),h$(),rin(KVn),(e.Math.abs(n-t)<=KVn||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:zO(isNaN(n),isNaN(t)))<=0}function Fdn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e<t.length;e++)t[e]&&""!=t[e]&&(i+=n+t[e]);return i}function Bdn(n,t,i){var r,c,a,u;for(_8(t,a=t+i,n.length),u="",c=t;c<a;)r=e.Math.min(c+1e4,a),u+=WW(n.slice(c,r)),c=r;return u}function Hdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function qdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function Gdn(n){var t,e,i,r;if(null==n)return null;for(r=new Np,e=0,i=(t=ysn(n)).length;e<i;++e)WB(r,FBn(t[e],!0));return r}function zdn(n,t){var e,i,r;if(n.c)Sen(n.c,t);else for(e=t-iG(n),r=new Wb(n.d);r.a<r.c.c.length;)zdn(i=BB(n0(r),157),iG(i)+e)}function Udn(n,t){var e,i,r;if(n.c)Men(n.c,t);else for(e=t-eG(n),r=new Wb(n.a);r.a<r.c.c.length;)Udn(i=BB(n0(r),157),eG(i)+e)}function Xdn(n,t){var e,i,r;for(i=new J6(t.gc()),e=t.Kc();e.Ob();)(r=t_n(n,BB(e.Pb(),56)))&&(i.c[i.c.length]=r);return i}function Wdn(n,t){var e,i;return n.qj(),(e=aOn(n,((i=null==t?0:nsn(t))&DWn)%n.d.length,i,t))?(hin(n,e),e.dd()):null}function Vdn(n){var t,e;for(e=uPn(n),t=null;2==n.c;)QXn(n),t||(wWn(),wWn(),tqn(t=new r$(2),e),e=t),e.$l(uPn(n));return e}function Qdn(n){if(!(q6n in n.a))throw Hp(new ek("Every element must have an id."));return kIn(zJ(n,q6n))}function Ydn(n){var t,e,i;if(!(i=n.Zg()))for(t=0,e=n.eh();e;e=e.eh()){if(++t>GQn)return e.fh();if((i=e.Zg())||e==n)break}return i}function Jdn(n){return hZ(),cL(n,156)?BB(RX(hAt,yet),288).vg(n):hU(hAt,tsn(n))?BB(RX(hAt,tsn(n)),288).vg(n):null}function Zdn(n){if(mgn(a5n,n))return hN(),vtt;if(mgn(u5n,n))return hN(),ptt;throw Hp(new _y("Expecting true or false"))}function ngn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw Hp(new _y("Input edge is not connected to the input port."))}function tgn(n,t){return n.e>t.e?1:n.e<t.e?-1:n.d>t.d?n.e:n.d<t.d?-t.e:n.e*Msn(n.a,t.a,n.d)}function egn(n){return n>=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 ign(n,t){var e;return GI(t)===GI(n)||!!cL(t,21)&&(e=BB(t,21)).gc()==n.gc()&&n.Ic(e)}function rgn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,Ex(e<(n.c-n.b&i)),e>=r?(ahn(n,t),-1):(uhn(n,t),1)}function cgn(n,t){var e,i;for(b1(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(b1(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function agn(n){switch(n.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return!0;default:return!1}}function ugn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Zun(),ftt)[typeof e];return r?r(e):khn(typeof e)}function ogn(n,t){if(n.a<0)throw Hp(new Fy("Did not call before(...) or after(...) before calling add(...)."));return WN(n,n.a,t),n}function sgn(n,t,e,i){var r;0!=t.c.length&&(r=MLn(e,i),JT(ytn(new Rq(null,new w1(uIn(t),1)),new ja),new XV(n,e,r,i)))}function hgn(n,t,e){var i;0!=(n.Db&t)?null==e?WOn(n,t):-1==(i=Rmn(n,t))?n.Eb=e:$X(een(n.Eb),i,e):null!=e&&mxn(n,t,e)}function fgn(n){var t;return 0==(32&n.Db)&&0!=(t=bX(BB(yan(n,16),26)||n.zh())-bX(n.zh()))&&hgn(n,32,x8(Ant,HWn,1,t,5,1)),n}function lgn(n){var t;return n.b||Xj(n,!(t=nK(n.e,n.a))||!mK(u5n,cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"qualified"))),n.c}function bgn(n,t,e){var i,r;return((r=(i=BB(Wtn(H7(n.a),t),87)).c||(gWn(),l$t)).kh()?tfn(n.b,BB(r,49)):r)==e?lFn(i):cen(i,e),r}function wgn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function dgn(n,t,e,i){BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65).c.b,K8(i,t,n)}function ggn(n){var t,e;for(t=new Wb(n.g);t.a<t.c.c.length;)BB(n0(t),562);zzn(e=new yxn(n.g,Gy(n.a),n.c)),n.g=e.b,n.d=e.a}function pgn(n,t,i){t.b=e.Math.max(t.b,-i.a),t.c=e.Math.max(t.c,i.a-n.a),t.d=e.Math.max(t.d,-i.b),t.a=e.Math.max(t.a,i.b-n.b)}function vgn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:nsn(n)-nsn(t)}function mgn(n,t){return kW(n),null!=t&&(!!mK(n,t)||n.length==t.length&&mK(n.toLowerCase(),t.toLowerCase()))}function ygn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)cL(e=t.il(i),99)&&0!=(BB(e,18).Bb&h6n)&&null!=(c=t.jl(i))&&t_n(n,BB(c,56))}function kgn(n,t,e){var i,r,c;for(c=new Wb(e.a);c.a<c.c.c.length;)r=BB(n0(c),221),i=new C$(BB(RX(n.a,r.b),65)),WB(t.a,i),kgn(n,i,r)}function jgn(n){var t,e;return Vhn(n,-129)>0&&Vhn(n,128)<0?(t=dG(n)+128,!(e=(Eq(),$tt)[t])&&(e=$tt[t]=new Db(n)),e):new Db(n)}function Egn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Tgn(n,t){var e,i;return(e=t.Hh(n.a))&&null!=(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),t8n)))?i:t.ne()}function Mgn(n,t){var e,i;for(qZ(),i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)if((e=BB(U5(i),17)).d.i==t||e.c.i==t)return e;return null}function Sgn(n,t,e){this.c=n,this.f=new Np,this.e=new Gj,this.j=new Sq,this.n=new Sq,this.b=t,this.g=new UV(t.c,t.d,t.b,t.a),this.a=e}function Pgn(n){var t,e,i,r;for(this.a=new fA,this.d=new Rv,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),g2(this,t)}function Cgn(n){ODn(),0==n.length?(this.e=0,this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0])):(this.e=1,this.d=n.length,this.a=n,X0(this))}function Ign(n,t,e){sm.call(this),this.a=x8(Xit,rJn,212,(Dtn(),Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length,0,1),this.b=n,this.d=t,this.c=e}function Ogn(n){this.d=new Np,this.e=new v4,this.c=x8(ANt,hQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.b=n}function Agn(n){var t,e,i,r;for(hon(r=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),e=0,i=(t=Z0(n.e)).length;e<i;++e)MZ(t[e],r)}function $gn(n){var t,e,i,r;for(hon(t=BB(mMn(n,(hWn(),dlt)),11),Llt,n.i.n.b),i=0,r=(e=Z0(n.g)).length;i<r;++i)SZ(e[i],t)}function Lgn(n){var t,e;return!!Lx(n.d.i,(HXn(),Wgt))&&(t=BB(mMn(n.c.i,Wgt),19),e=BB(mMn(n.d.i,Wgt),19),E$(t.a,e.a)>0)}function Ngn(n){var t;GI(ZAn(n,(sWn(),ESt)))===GI((ufn(),vCt))&&(JJ(n)?(t=BB(ZAn(JJ(n),ESt),334),Ypn(n,ESt,t)):Ypn(n,ESt,mCt))}function xgn(n,t,e){var i,r;fMn(n.e,t,e,(kUn(),CIt)),fMn(n.i,t,e,oIt),n.a&&(r=BB(mMn(t,(hWn(),dlt)),11),i=BB(mMn(e,dlt),11),k0(n.g,r,i))}function Dgn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new DY(n,t),e&&(n.a[i][c]=new Bd(t),(r=BB(mMn(t,(hWn(),rlt)),10))&&JIn(n.d,r,t))}function Rgn(n,t){var e,i,r;if(WB(Sct,n),t.Fc(n),e=BB(RX(Mct,n),21))for(r=e.Kc();r.Ob();)i=BB(r.Pb(),33),-1!=E7(Sct,i,0)||Rgn(i,t)}function Kgn(n,t,e){var i;(Wet?(gwn(n),1):Vet||Jet?(lM(),1):Yet&&(lM(),0))&&((i=new i_(t)).b=e,aSn(n,i))}function _gn(n,t){var e;e=!n.A.Hc((mdn(),_It))||n.q==(QEn(),XCt),n.u.Hc((lIn(),eIt))?e?NUn(n,t):aUn(n,t):n.u.Hc(rIt)&&(e?Azn(n,t):JUn(n,t))}function Fgn(n,t){var e,i;++n.j,null!=t&&oOn(t,e=cL(i=n.a.Cb,97)?BB(i,97).Jg():null)?hgn(n.a,4,e):hgn(n.a,4,BB(t,126))}function Bgn(n,t,i){return new UV(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 Hgn(n,t){var e,i;return 0!=(e=E$(n.a.c.p,t.a.c.p))?e:0!=(i=E$(n.a.d.i.p,t.a.d.i.p))?i:E$(t.a.d.p,n.a.d.p)}function qgn(n,t,e){var i,r,c,a;return(c=t.j)!=(a=e.j)?c.g-a.g:(i=n.f[t.p],r=n.f[e.p],0==i&&0==r?0:0==i?-1:0==r?1:Pln(i,r))}function Ggn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Wb(kbn(t));i.a<i.c.c.length;)Ggn(n,Nbn(BB(n0(i),213),t),e)}function zgn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new xC(0,i);case 2:case 4:return new xC(i,0);default:return null}}function Ugn(n,t,e){var i;i=BB(sJ(t.f),209);try{i.Ze(n,e),SW(t.f,i)}catch(r){throw cL(r=lun(r),102),Hp(r)}}function Xgn(n,t,e){var i,r,c,a;return i=null,(c=pGn(cin(),t))&&(r=null,null!=(a=Zqn(c,e))&&(r=n.Ye(c,a)),i=r),i}function Wgn(n,t,e,i){var r;return r=new N7(n.e,1,13,t.c||(gWn(),l$t),e.c||(gWn(),l$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Vgn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!ton((b1(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Qgn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.c[e]);return t.length>i&&$X(t,i,null),t}function Ygn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=qk(new Array(i),t)),e=0;e<i;++e)$X(t,e,n.a[e]);return t.length>i&&$X(t,i,null),t}function Jgn(n,t,e){var i,r,c;return(r=BB(RX(n.e,t),387))?(c=pR(r,e),uL(n,r),c):(i=new nH(n,t,e),VW(n.e,t,i),kJ(i),null)}function Zgn(n){var t;if(null==n)return null;if(null==(t=L$n(FBn(n,!0))))throw Hp(new ik("Invalid hexBinary value: '"+n+"'"));return t}function npn(n){return ODn(),Vhn(n,0)<0?0!=Vhn(n,-1)?new vEn(-1,j7(n)):Ytt:Vhn(n,10)<=0?Ztt[dG(n)]:new vEn(1,n)}function tpn(){return dWn(),Pun(Gk(Krt,1),$Vn,159,0,[Prt,Srt,Crt,vrt,prt,mrt,jrt,krt,yrt,Mrt,Trt,Ert,drt,wrt,grt,lrt,frt,brt,srt,ort,hrt,Irt])}function epn(n){var t;this.d=new Np,this.j=new Gj,this.g=new Gj,t=n.g.b,this.f=BB(mMn(vW(t),(HXn(),Udt)),103),this.e=Gy(MD(gpn(t,Spt)))}function ipn(n){this.b=new Np,this.e=new Np,this.d=n,this.a=!jE(AV(new Rq(null,new zU(new m6(n.b))),new aw(new Gr))).sd((dM(),tit))}function rpn(){rpn=O,hMt=new AC("PARENTS",0),sMt=new AC("NODES",1),uMt=new AC("EDGES",2),fMt=new AC("PORTS",3),oMt=new AC("LABELS",4)}function cpn(){cpn=O,BCt=new zC("DISTRIBUTED",0),qCt=new zC("JUSTIFIED",1),_Ct=new zC("BEGIN",2),FCt=new zC(eJn,3),HCt=new zC("END",4)}function apn(n){switch(n.yi(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function upn(n){switch(n.g){case 1:return Ffn(),HPt;case 4:return Ffn(),_Pt;case 2:return Ffn(),FPt;case 3:return Ffn(),KPt}return Ffn(),BPt}function opn(n,t,e){var i;switch((i=e.q.getFullYear()-sQn+sQn)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Enn(n,i%100,2);break;default:Enn(n,i,t)}}function spn(n,t){var e,i;if(LZ(t,n.b),t>=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<t;++e)i=i.a;return new ZK(n,t,i)}function hpn(){hpn=O,dit=new FS("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),wit=new FS("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function fpn(n){var t,e,i;for(m$(e=uCn(n),But),(i=n.d).c=x8(Ant,HWn,1,0,5,1),t=new Wb(e);t.a<t.c.c.length;)gun(i,BB(n0(t),456).b)}function lpn(n){var t,e;for(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)BB(t.nj(),42).dd();return A8(e)}function bpn(n){var t;LK(BB(mMn(n,(HXn(),ept)),98))&&(fOn((l1(0,(t=n.b).c.length),BB(t.c[0],29))),fOn(BB(xq(t,t.c.length-1),29)))}function wpn(n,t){var i,r,c,a;for(i=0,c=new Wb(t.a);c.a<c.c.c.length;)a=(r=BB(n0(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function dpn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)b1(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=i0(r,yz(1,t-64)));return r}function gpn(n,t){var e,i;return i=null,Lx(n,(sWn(),CPt))&&(e=BB(mMn(n,CPt),94)).Xe(t)&&(i=e.We(t)),null==i&&vW(n)&&(i=mMn(vW(n),t)),i}function ppn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(uSn(),Cut)&&i!=Tut&&dAn(e=new oz(ZL(lbn(r).a.Kc(),new h)))&&VW(n.k,t,BB(U5(e),17))}function vpn(n,t){var e,i,r;return i=itn(n.Tg(),t),(e=t-n.Ah())<0?(r=n.Yg(i))>=0?n.lh(r):qIn(n,i):e<0?qIn(n,i):BB(i,66).Nj().Sj(n,n.yh(),e)}function mpn(n){var t;if(cL(n.a,4)){if(null==(t=Jdn(n.a)))throw Hp(new Fy(o5n+n.b+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return t}return n.a}function ypn(n){var t;if(null==n)return null;if(null==(t=UUn(FBn(n,!0))))throw Hp(new ik("Invalid base64Binary value: '"+n+"'"));return t}function kpn(n){var t;try{return t=n.i.Xb(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function jpn(n){var t;try{return t=n.c.ki(n.e),n.mj(),n.g=n.e++,t}catch(e){throw cL(e=lun(e),73)?(n.mj(),Hp(new yv)):Hp(e)}}function Epn(){Epn=O,sWn(),Ect=TPt,pct=ySt,lct=cSt,vct=XSt,_kn(),kct=Mit,yct=Eit,jct=Pit,mct=jit,Gsn(),wct=oct,bct=uct,dct=hct,gct=fct}function Tpn(n){switch(jM(),this.c=new Np,this.d=n,n.g){case 0:case 2:this.a=QW(hut),this.b=RQn;break;case 3:case 1:this.a=hut,this.b=KQn}}function Mpn(n,t,e){var i;if(n.c)Pen(n.c,n.c.i+t),Cen(n.c,n.c.j+e);else for(i=new Wb(n.b);i.a<i.c.c.length;)Mpn(BB(n0(i),157),t,e)}function Spn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e<i;e++)if(!mK(n.j[e],t.j[e]))return!1;return!0}function Ppn(n,t,e){var i;t.a.length>0&&(WB(n.b,new VB(t.a,e)),0<(i=t.a.length)?t.a=t.a.substr(0,0):0>i&&(t.a+=rL(x8(ONt,WVn,25,-i,15,1))))}function Cpn(n,t){var e,i,r;for(e=n.o,r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.a=dyn(i,e.a),i.e.b=e.b*Gy(MD(i.b.We(Lrt)))}function Ipn(n,t){var e,i,r,c;return r=n.k,e=Gy(MD(mMn(n,(hWn(),Tlt)))),c=t.k,i=Gy(MD(mMn(t,Tlt))),c!=(uSn(),Mut)?-1:r!=Mut?1:e==i?0:e<i?-1:1}function Opn(n,t){var e,i;return e=BB(BB(RX(n.g,t.a),46).a,65),i=BB(BB(RX(n.g,t.b),46).a,65),W8(t.a,t.b)-W8(t.a,_$(e.b))-W8(t.b,_$(i.b))}function Apn(n,t){var e;return e=BB(mMn(n,(HXn(),vgt)),74),tL(t,vut)?e?yQ(e):(e=new km,hon(n,vgt,e)):e&&hon(n,vgt,null),e}function $pn(n){var t;return(t=new Ck).a+="n",n.k!=(uSn(),Cut)&&oO(oO((t.a+="(",t),dx(n.k).toLowerCase()),")"),oO((t.a+="_",t),gyn(n)),t.a}function Lpn(n,t){OTn(t,"Self-Loop post-processing",1),JT(AV(AV(wnn(new Rq(null,new w1(n.b,16)),new xi),new Di),new Ri),new Ki),HSn(t)}function Npn(n,t,e,i){var r;return e>=0?n.hh(t,e,i):(n.eh()&&(i=(r=n.Vg())>=0?n.Qg(i):n.eh().ih(n,-1-r,null,i)),n.Sg(t,e,i))}function xpn(n,t){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),void sqn(n.e);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),void sqn(n.d)}Dwn(n,t)}function Dpn(n,t){var e;e=n.Zc(t);try{return e.Pb()}catch(i){throw cL(i=lun(i),109)?Hp(new Ay("Can't get element "+t)):Hp(i)}}function Rpn(n,t){this.e=n,t<XQn?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[0|t])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[t%XQn|0,t/XQn|0]))}function Kpn(n,t){var e,i,r,c;for(SQ(),e=n,c=t,cL(n,21)&&!cL(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function _pn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=Lyn(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):Lyn(n,i)),e}function Fpn(n,t,e){var i,r,c,a;return-1!=(i=n.Xc(t))&&(n.ej()?(c=n.fj(),a=wq(n,i),r=n.Zi(4,a,null,i,c),e?e.Ei(r):e=r):wq(n,i)),e}function Bpn(n,t){var e;switch(e=BB(oV(n.b,t),124).n,t.g){case 1:n.t>=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 Hpn(){Hpn=O,Brt=new _S(mJn,0),Frt=new _S(yJn,1),Hrt=new _S(kJn,2),qrt=new _S(jJn,3),Brt.a=!1,Frt.a=!0,Hrt.a=!1,qrt.a=!0}function qpn(){qpn=O,Zrt=new KS(mJn,0),Jrt=new KS(yJn,1),nct=new KS(kJn,2),tct=new KS(jJn,3),Zrt.a=!1,Jrt.a=!0,nct.a=!1,tct.a=!0}function Gpn(n){var t;t=n.a;do{(t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i).k==(uSn(),Put)&&n.b.Fc(t)}while(t.k==(uSn(),Put));n.b=ean(n.b)}function zpn(n){var t,e,i;for(i=n.c.a,n.p=(yX(i),new t_(i)),e=new Wb(i);e.a<e.c.c.length;)(t=BB(n0(e),10)).p=hCn(t).a;SQ(),m$(n.p,new Oc)}function Upn(n){var t,e,i;if(e=0,0==(i=wDn(n)).c.length)return 1;for(t=new Wb(i);t.a<t.c.c.length;)e+=Upn(BB(n0(t),33));return e}function Xpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.b+e.b.rf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Wpn(n,t){var e,i,r;for(r=0,i=BB(BB(h6(n.r,t),21),84).Kc();i.Ob();)r+=(e=BB(i.Pb(),111)).d.d+e.b.rf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Vpn(n,t,e,i){if(t.a<i.a)return!0;if(t.a==i.a){if(t.b<i.b)return!0;if(t.b==i.b&&n.b>e.b)return!0}return!1}function Qpn(n,t){return XI(n)?!!OWn[t]:n.hm?!!n.hm[t]:UI(n)?!!IWn[t]:!!zI(n)&&!!CWn[t]}function Ypn(n,t,e){return null==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),vjn(n.o,t,e)),n}function Jpn(n,t,e,i){var r;(r=Xfn(t.Xe((sWn(),DSt))?BB(t.We(DSt),21):n.j))!=(dWn(),Irt)&&(e&&!agn(r)||USn(N$n(n,r,i),t))}function Zpn(n,t,e,i){var r,c,a;return c=itn(n.Tg(),t),(r=t-n.Ah())<0?(a=n.Yg(c))>=0?n._g(a,e,!0):cOn(n,c,e):BB(c,66).Nj().Pj(n,n.yh(),r,e,i)}function nvn(n,t,e,i){var r,c;e.mh(t)&&(ZM(),hnn(t)?ygn(n,BB(e.ah(t),153)):(r=(c=t)?BB(i,49).xh(c):null)&&_p(e.ah(t),r))}function tvn(n){switch(n.g){case 1:return Dan(),Rrt;case 3:return Dan(),Nrt;case 2:return Dan(),Drt;case 4:return Dan(),xrt;default:return null}}function evn(n){switch(typeof n){case NWn:return vvn(n);case LWn:return CJ(n);case $Wn:return hN(),n?1231:1237;default:return null==n?0:PN(n)}}function ivn(n,t,e){if(n.e)switch(n.b){case 1:BQ(n.c,t,e);break;case 0:HQ(n.c,t,e)}else t4(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function rvn(n){var t,e;if(null==n)return null;for(e=x8(Out,sVn,193,n.length,0,2),t=0;t<e.length;t++)e[t]=BB(G9(n[t],n[t].length),193);return e}function cvn(n){var t;if(Ksn(n))return mz(n),n.Lk()&&(t=FIn(n.e,n.b,n.c,n.a,n.j),n.j=t),n.g=n.a,++n.a,++n.c,n.i=0,n.j;throw Hp(new yv)}function avn(n,t){var e,i,r,c;return(c=n.o)<(e=n.p)?c*=c:e*=e,i=c+e,(c=t.o)<(e=t.p)?c*=c:e*=e,i<(r=c+e)?-1:i==r?0:1}function uvn(n,t){var e,i;if((i=Wyn(n,t))>=0)return i;if(n.Fk())for(e=0;e<n.i;++e)if(GI(n.Gk(BB(n.g[e],56)))===GI(t))return e;return-1}function ovn(n,t,e){var i,r;if(t>=(r=n.gc()))throw Hp(new tK(t,r));if(n.hi()&&(i=n.Xc(e))>=0&&i!=t)throw Hp(new _y(a8n));return n.mi(t,e)}function svn(n,t){if(this.a=BB(yX(n),245),this.b=BB(yX(t),245),n.vd(t)>0||n==(ey(),Knt)||t==(ty(),_nt))throw Hp(new _y("Invalid range: "+B3(n,t)))}function hvn(n){var t,e;for(this.b=new Np,this.c=n,this.a=!1,e=new Wb(n.a);e.a<e.c.c.length;)t=BB(n0(e),10),this.a=this.a|t.k==(uSn(),Cut)}function fvn(n,t){var e,i,r;for(e=AN(new qv,n),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),121),UNn(aM(cM(uM(rM(new Hv,0),0),e),i));return e}function lvn(n,t,e){var i,r,c;for(r=new oz(ZL((t?fbn(n):lbn(n)).a.Kc(),new h));dAn(r);)i=BB(U5(r),17),(c=t?i.c.i:i.d.i).k==(uSn(),Sut)&&PZ(c,e)}function bvn(){bvn=O,lvt=new _P(QZn,0),bvt=new _P("PORT_POSITION",1),fvt=new _P("NODE_SIZE_WHERE_SPACE_PERMITS",2),hvt=new _P("NODE_SIZE",3)}function wvn(){wvn=O,CMt=new DC("AUTOMATIC",0),AMt=new DC(cJn,1),$Mt=new DC(aJn,2),LMt=new DC("TOP",3),IMt=new DC(oJn,4),OMt=new DC(eJn,5)}function dvn(n,t,e,i){var r,c;for($On(),r=0,c=0;c<e;c++)r=rbn(cbn(e0(t[c],UQn),e0(i,UQn)),e0(dG(r),UQn)),n[c]=dG(r),r=jz(r,32);return dG(r)}function gvn(n,t,i){var r,c;for(c=0,r=0;r<Zit;r++)c=e.Math.max(c,vhn(n.a[t.g][r],i));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function pvn(n,t){var e,i;if(Tx(t>0),(t&-t)==t)return CJ(t*H$n(n,31)*4.656612873077393e-10);do{i=(e=H$n(n,31))%t}while(e-i+(t-1)<0);return CJ(i)}function vvn(n){var t,e,i;return r_(),null!=(i=rit[e=":"+n])?CJ((kW(i),i)):(t=null==(i=iit[e])?JNn(n):CJ((kW(i),i)),IQ(),rit[e]=t,t)}function mvn(n,t,e){OTn(e,"Compound graph preprocessor",1),n.a=new pJ,Nzn(n,t,null),GHn(n,t),tNn(n),hon(t,(hWn(),Hft),n.a),n.a=null,$U(n.b),HSn(e)}function yvn(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 kvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Pst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Crn(),xst),0),iX(n,e,t[1],Rst,1)}function jvn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Cst)),15).Kc();i.Ob();)iX(n,e=BB(i.Pb(),101),(t=Hyn(e))[0],(Crn(),xst),0),iX(n,e,t[1],Rst,1)}function Evn(n){switch(n.g){case 0:return null;case 1:return new Arn;case 2:return new Jm;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Tvn(n,t,e){var i,r;for(mun(n,t-n.s,e-n.t),r=new Wb(n.n);r.a<r.c.c.length;)rb(i=BB(n0(r),211),i.e+t-n.s),cb(i,i.f+e-n.t);n.s=t,n.t=e}function Mvn(n){var t,e,i,r;for(e=0,i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),121).d=e++;return r=null,(t=wSn(n)).c.length>1&&(r=fvn(n,t)),r}function Svn(n){var t;return n.f&&n.f.kh()&&(t=BB(n.f,49),n.f=BB(tfn(n,t),82),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.f))),n.f}function Pvn(n){var t;return n.i&&n.i.kh()&&(t=BB(n.i,49),n.i=BB(tfn(n,t),82),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,7,t,n.i))),n.i}function Cvn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=BB(tfn(n,t),18),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,21,t,n.b))),n.b}function Ivn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Sh(),fNn(n,n.f+1),r=(i&DWn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.uj()),e.Fc(t),++n.f)}function Ovn(n,t,e){var i;return!t.Kj()&&(-2!=t.Zj()?null==(i=t.zj())?null==e:Nfn(i,e):t.Hj()==n.e.Tg()&&null==e)}function Avn(){var n;lin(16,IVn),n=Jin(16),this.b=x8(Gnt,CVn,317,n,0,1),this.c=x8(Gnt,CVn,317,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function $vn(n){LR.call(this),this.k=(uSn(),Cut),this.j=(lin(6,AVn),new J6(6)),this.b=(lin(2,AVn),new J6(2)),this.d=new fm,this.f=new wm,this.a=n}function Lvn(n){var t,e;n.c.length<=1||(dPn(n,BB((t=EDn(n,(kUn(),SIt))).a,19).a,BB(t.b,19).a),dPn(n,BB((e=EDn(n,CIt)).a,19).a,BB(e.b,19).a))}function Nvn(){Nvn=O,yvt=new FP("SIMPLE",0),pvt=new FP(B1n,1),vvt=new FP("LINEAR_SEGMENTS",2),gvt=new FP("BRANDES_KOEPF",3),mvt=new FP(j3n,4)}function xvn(n,t,e){LK(BB(mMn(t,(HXn(),ept)),98))||(W7(n,t,DSn(t,e)),W7(n,t,DSn(t,(kUn(),SIt))),W7(n,t,DSn(t,sIt)),SQ(),m$(t.j,new _d(n)))}function Dvn(n,t,e,i){var r;for(r=BB(h6(i?n.a:n.b,t),21).Kc();r.Ob();)if(_Dn(n,e,BB(r.Pb(),33)))return!0;return!1}function Rvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function Kvn(n){var t,e;for(e=new AL(n);e.e!=e.i.gc();)if((t=BB(kpn(e),87)).e||0!=(!t.d&&(t.d=new $L(VAt,t,1)),t.d).i)return!0;return!1}function _vn(n){var t,e;for(t=0,e=new Wb(n.c.a);e.a<e.c.c.length;)t+=F3(new oz(ZL(lbn(BB(n0(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function Fvn(n){var t,e;for(n.c||zqn(n),e=new km,n0(t=new Wb(n.a));t.a<t.c.c.length;)DH(e,BB(n0(t),407).a);return Px(0!=e.b),Atn(e,e.c.b),e}function Bvn(){Bvn=O,bRn(),qTt=RTt,BTt=new WA(8),new XA((sWn(),XSt),BTt),new XA(LPt,8),HTt=xTt,_Tt=MTt,FTt=STt,KTt=new XA(lSt,(hN(),!1))}function Hvn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e;case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d}return Rbn(n,t,e,i)}function qvn(n){var t;return n.a&&n.a.kh()&&(t=BB(n.a,49),n.a=BB(tfn(n,t),138),n.a!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,5,t,n.a))),n.a}function Gvn(n){return n<48||n>102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function zvn(n,t){if(null==n)throw Hp(new Hy("null key in entry: null="+t));if(null==t)throw Hp(new Hy("null value in entry: "+n+"=null"))}function Uvn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(GI(e)===GI(i)||null!=e&&Nfn(e,i)))return!1}return!t.Ob()}function Xvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[vhn(n.a[0],t),vhn(n.a[1],t),vhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Wvn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[mhn(n.a[0],t),mhn(n.a[1],t),mhn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Vvn(){Vvn=O,yht=new SP("GREEDY",0),mht=new SP(H1n,1),jht=new SP(B1n,2),Eht=new SP("MODEL_ORDER",3),kht=new SP("GREEDY_MODEL_ORDER",4)}function Qvn(n,t){var e,i,r;for(n.b[t.g]=1,i=spn(t.d,0);i.b!=i.d.c;)r=(e=BB(b3(i),188)).c,1==n.b[r.g]?DH(n.a,e):2==n.b[r.g]?n.b[r.g]=1:Qvn(n,r)}function Yvn(n,t){var e,i,r;for(r=new J6(t.gc()),i=t.Kc();i.Ob();)(e=BB(i.Pb(),286)).c==e.f?hPn(n,e,e.c):rPn(n,e)||(r.c[r.c.length]=e);return r}function Jvn(n,t,e){var i,r,c,a;for(a=n.r+t,n.r+=t,n.d+=e,i=e/n.n.c.length,r=0,c=new Wb(n.n);c.a<c.c.c.length;)w$n(BB(n0(c),211),a,i,r),++r}function Zvn(n){var t,e;for(my(n.b.a),n.a=x8(bit,HWn,57,n.c.c.a.b.c.length,0,1),t=0,e=new Wb(n.c.c.a.b);e.a<e.c.c.length;)BB(n0(e),57).f=t++}function nmn(n){var t,e;for(my(n.b.a),n.a=x8(Qat,HWn,81,n.c.a.a.b.c.length,0,1),t=0,e=new Wb(n.c.a.a.b);e.a<e.c.c.length;)BB(n0(e),81).i=t++}function tmn(n,t,e){OTn(e,"Shrinking tree compaction",1),qy(TD(mMn(t,(Xcn(),Qrt))))?(irn(n,t.f),unn(t.f,t.c)):unn(t.f,t.c),HSn(e)}function emn(n){var t;if(t=bhn(n),!dAn(n))throw Hp(new Ay("position (0) must be less than the number of elements that remained ("+t+")"));return U5(n)}function imn(n,t,e){try{return vmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function rmn(n,t,e){try{return mmn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function cmn(n,t,e){try{return ymn(n,t+n.j,e+n.k)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function amn(n){switch(n.g){case 1:return kUn(),CIt;case 4:return kUn(),sIt;case 3:return kUn(),oIt;case 2:return kUn(),SIt;default:return kUn(),PIt}}function umn(n,t,e){t.k==(uSn(),Cut)&&e.k==Put&&(n.d=Efn(t,(kUn(),SIt)),n.b=Efn(t,sIt)),e.k==Cut&&t.k==Put&&(n.d=Efn(e,(kUn(),sIt)),n.b=Efn(e,SIt))}function omn(n,t){var e,i;for(i=abn(n,t).Kc();i.Ob();)if(null!=mMn(e=BB(i.Pb(),11),(hWn(),Elt))||zN(new m6(e.b)))return!0;return!1}function smn(n,t){return Pen(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Cen(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),WB(n.c,t),!0}function hmn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Wb(n.a);c.a<c.c.c.length;)Tvn(r=BB(n0(c),187),r.s,r.t+a*i),Jvn(r,n.d-r.r+t,i),++a}function fmn(n){var t,e,i;for(e=new Wb(n.b);e.a<e.c.c.length;)for(t=0,i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)BB(n0(i),10).p=t++}function lmn(n,t){var e,i,r,c,a,u;for(r=t.length-1,a=0,u=0,i=0;i<=r;i++)c=t[i],e=pSn(r,i)*efn(1-n,r-i)*efn(n,i),a+=c.a*e,u+=c.b*e;return new xC(a,u)}function bmn(n,t){var e,i,r,c,a;for(e=t.gc(),n.qi(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),jL(n,i,n.oi(i,r)),n.bi(i,r),n.ci();return 0!=e}function wmn(n,t,e){var i,r,c;return n.ej()?(i=n.Vi(),c=n.fj(),++n.j,n.Hi(i,n.oi(i,t)),r=n.Zi(3,null,t,i,c),e?e.Ei(r):e=r):ZD(n,n.Vi(),t),e}function dmn(n,t,e){var i,r,c;return(0!=(64&(c=cL(r=(i=BB(Wtn(a4(n.a),t),87)).c,88)?BB(r,26):(gWn(),d$t)).Db)?tfn(n.b,c):c)==e?lFn(i):cen(i,e),c}function gmn(n,t,e,i,r,c,a,u){var o,s;i&&((o=i.a[0])&&gmn(n,t,e,o,r,c,a,u),Iyn(n,e,i.d,r,c,a,u)&&t.Fc(i),(s=i.a[1])&&gmn(n,t,e,s,r,c,a,u))}function pmn(n,t){var e;return n.a||(e=x8(xNt,qQn,25,0,15,1),gE(n.b.a,new bw(e)),e.sort(ien(T.prototype.te,T,[])),n.a=new _K(e,n.d)),K6(n.a,t)}function vmn(n,t,e){try{return QI(trn(n,t,e),1)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function mmn(n,t,e){try{return QI(trn(n,t,e),0)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function ymn(n,t,e){try{return QI(trn(n,t,e),2)}catch(i){throw cL(i=lun(i),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(i)}}function kmn(n,t){if(-1==n.g)throw Hp(new dv);n.mj();try{n.d._c(n.g,t),n.f=n.d.j}catch(e){throw cL(e=lun(e),73)?Hp(new vv):Hp(e)}}function jmn(n,t,e){OTn(e,"Linear segments node placement",1),n.b=BB(mMn(t,(hWn(),Alt)),304),VXn(n,t),vHn(n,t),QHn(n,t),hXn(n),n.a=null,n.b=null,HSn(e)}function Emn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=qk(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)$X(r,e,i.Pb());return t.length>c&&$X(t,c,null),t}function Tmn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e<i;e++)if(null==n.Xb(e))return e}else for(e=0;e<i;e++)if(Nfn(t,n.Xb(e)))return e;return-1}function Mmn(n,t){var e,i,r;return e=t.cd(),r=t.dd(),i=n.xc(e),!(!(GI(r)===GI(i)||null!=r&&Nfn(r,i))||null==i&&!n._b(e))}function Smn(n,t){var e,i,r;return t<=22?(e=n.l&(1<<t)-1,i=r=0):t<=44?(e=n.l,i=n.m&(1<<t-22)-1,r=0):(e=n.l,i=n.m,r=n.h&(1<<t-44)-1),M$(e,i,r)}function Pmn(n,t){switch(t.g){case 1:return n.f.n.d+n.t;case 3:return n.f.n.a+n.t;case 2:return n.f.n.c+n.s;case 4:return n.f.n.b+n.s;default:return 0}}function Cmn(n,t){var e,i;switch(i=t.c,e=t.a,n.b.g){case 0:e.d=n.e-i.a-i.d;break;case 1:e.d+=n.e;break;case 2:e.c=n.e-i.a-i.d;break;case 3:e.c=n.e+i.d}}function Imn(n,t,e,i){var r,c;this.a=t,this.c=i,$l(this,new xC(-(r=n.a).c,-r.d)),UR(this.b,e),c=i/2,t.a?Bx(this.b,0,c):Bx(this.b,c,0),WB(n.c,this)}function Omn(){Omn=O,qjt=new mC(QZn,0),Bjt=new mC(q1n,1),Hjt=new mC("EDGE_LENGTH_BY_POSITION",2),Fjt=new mC("CROSSING_MINIMIZATION_BY_POSITION",3)}function Amn(n,t){var e,i;if(e=BB(sen(n.g,t),33))return e;if(i=BB(sen(n.j,t),118))return i;throw Hp(new ek("Referenced shape does not exist: "+t))}function $mn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw Hp(new _y("Node 'one' must be either source or target of edge 'edge'."))}function Lmn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw Hp(new _y("Node "+t+" is neither source nor target of edge "+n))}function Nmn(n,t){var e;switch(t.g){case 2:case 4:e=n.a,n.c.d.n.b<e.d.n.b&&(e=n.c),bU(n,t,(Oun(),kst),e);break;case 1:case 3:bU(n,t,(Oun(),vst),null)}}function xmn(n,t,e,i,r,c){var a,u,o,s,h;for(a=ijn(t,e,c),u=e==(kUn(),sIt)||e==CIt?-1:1,s=n[e.g],h=0;h<s.length;h++)(o=s[h])>0&&(o+=r),s[h]=a,a+=u*(o+i)}function Dmn(n){var t,e,i;for(i=n.f,n.n=x8(xNt,qQn,25,i,15,1),n.d=x8(xNt,qQn,25,i,15,1),t=0;t<i;t++)e=BB(xq(n.c.b,t),29),n.n[t]=wpn(n,e),n.d[t]=VLn(n,e)}function Rmn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)0!=(n.Db&i)&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(0!=(n.Db&e))return 0;return-1}return r}function Kmn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),c=null,e=BB(n.g,119),r=0;r<n.i;++r)i=e[r],a.rl(i.ak())&&(!c&&(c=new go),f9(c,i));c&&aXn(n,c)}function _mn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new Sk,t=n.Kc();t.Ob();)cO(e,SD(t.Pb())),e.a+=" ";return KO(e,e.a.length-1)}function Fmn(n,t,e){var i,r,c,a;for(con(n),null==n.k&&(n.k=x8(Jnt,sVn,78,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)Fmn(i[r],t,"\t"+e);(a=n.f)&&Fmn(a,t,e)}function Bmn(n,t){var e,i=new Array(t);switch(n){case 14:case 15:e=0;break;case 16:e=!1;break;default:return i}for(var r=0;r<t;++r)i[r]=e;return i}function Hmn(n){var t;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();Otn(dA(n.d)?n.a.c:n.a.d,new Mw(n)),n.c.Me(n),_xn(n)}function qmn(n){var t,e,i;for(e=new Wb(n.e.c);e.a<e.c.c.length;){for(i=new Wb((t=BB(n0(e),282)).b);i.a<i.c.c.length;)_Bn(BB(n0(i),447));BCn(t)}}function Gmn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),187),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function zmn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t);u.a<u.c.c.length;)a=BB(n0(u),200),r=e.Math.max(r,a.e),c+=a.b+(i>0?n.g:0),++i;n.c=c,n.d=r}function Umn(n,t){var i;return i=Pun(Gk(xNt,1),qQn,25,15,[gvn(n,(Dtn(),Git),t),gvn(n,zit,t),gvn(n,Uit,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function Xmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function Wmn(n,t,e){try{FRn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw cL(i=lun(i),73)?Hp(new Ay(i.g+CJn+t+FWn+e+").")):Hp(i)}}function Vmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),ICt))?(t.Mc(ICt),t.Fc(ACt)):t.Hc(ACt)&&(t.Mc(ACt),t.Fc(ICt)))}function Qmn(n){var t;Lx(n,(HXn(),$gt))&&((t=BB(mMn(n,$gt),21)).Hc((n$n(),DCt))?(t.Mc(DCt),t.Fc(NCt)):t.Hc(NCt)&&(t.Mc(NCt),t.Fc(DCt)))}function Ymn(n,t,e){OTn(e,"Self-Loop ordering",1),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new Ii),new Oi),new Ai),new $i),new bd(n)),HSn(e)}function Jmn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(l1(r,n.c.length),c=BB(n.c[r],11),!e.Mb(c))return r;i.c[i.c.length]=c}return n.c.length}function Zmn(n,t,e,i){var r,c,a;return null==n.a&&dSn(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 nyn(n){var t,e;if(!n.b)for(n.b=C2(BB(n.f,33).Ag().i),e=new AL(BB(n.f,33).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function tyn(n){var t,e;if(!n.e)for(n.e=C2(yV(BB(n.f,33)).i),e=new AL(yV(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),118),WB(n.e,new op(t));return n.e}function eyn(n){var t,e;if(!n.a)for(n.a=C2(YQ(BB(n.f,33)).i),e=new AL(YQ(BB(n.f,33)));e.e!=e.i.gc();)t=BB(kpn(e),33),WB(n.a,new JN(n,t));return n.a}function iyn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=bzn(n))n.yk(t);else try{n.yk(null)}catch(e){if(!cL(e=lun(e),60))throw Hp(e)}return n.C}function ryn(n){switch(n.q.g){case 5:kjn(n,(kUn(),sIt)),kjn(n,SIt);break;case 4:cGn(n,(kUn(),sIt)),cGn(n,SIt);break;default:FPn(n,(kUn(),sIt)),FPn(n,SIt)}}function cyn(n){switch(n.q.g){case 5:jjn(n,(kUn(),oIt)),jjn(n,CIt);break;case 4:aGn(n,(kUn(),oIt)),aGn(n,CIt);break;default:BPn(n,(kUn(),oIt)),BPn(n,CIt)}}function ayn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),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 uyn(n,t){var i,r,c;for(c=new Gj,r=n.Kc();r.Ob();)ZRn(i=BB(r.Pb(),37),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 oyn(n){var t,i,r;for(r=DWn,i=new Wb(n.a);i.a<i.c.c.length;)Lx(t=BB(n0(i),10),(hWn(),wlt))&&(r=e.Math.min(r,BB(mMn(t,wlt),19).a));return r}function syn(n,t){var e,i;if(0==t.length)return 0;for(e=ZX(n.a,t[0],(kUn(),CIt)),e+=ZX(n.a,t[t.length-1],oIt),i=0;i<t.length;i++)e+=qMn(n,i,t);return e}function hyn(){gxn(),this.c=new Np,this.i=new Np,this.e=new fA,this.f=new fA,this.g=new fA,this.j=new Np,this.a=new Np,this.b=new xp,this.k=new xp}function fyn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,5,GOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lyn(n){PY();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 byn(n){var t;return Min(),(t=Ott)[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 wyn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=kon(e.Math.max(8,r))<<1,0!=n.b?(urn(n,t=SR(n.a,i),r),n.a=t,n.b=0):Pv(n.a,i),n.c=r)}function dyn(n,t){var e;return(e=n.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),CIt)?-e.rf().a-Gy(MD(e.We(aPt))):t+Gy(MD(e.We(aPt))):e.Hf()==(kUn(),CIt)?-e.rf().a:t}function gyn(n){var t;return 0!=n.b.c.length&&BB(xq(n.b,0),70).a?BB(xq(n.b,0),70).a:null!=(t=eQ(n))?t:""+(n.c?E7(n.c.a,n,0):-1)}function pyn(n){var t;return 0!=n.f.c.length&&BB(xq(n.f,0),70).a?BB(xq(n.f,0),70).a:null!=(t=eQ(n))?t:""+(n.i?E7(n.i.j,n,0):-1)}function vyn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=BB(n.Xb(e),128),e==n.gc()-1||!i.o)return new rI(iln(e),i);return null}function myn(n,t,e){var i,r,c,a;for(c=n.c,i=e?n:t,r=(e?t:n).p+1;r<i.p;++r)if((a=BB(xq(c.a,r),10)).k!=(uSn(),Tut)&&!Lkn(a))return!1;return!0}function yyn(n){var t,i,r,c,a;for(a=0,c=KQn,r=0,i=new Wb(n.a);i.a<i.c.c.length;)a+=(t=BB(n0(i),187)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function kyn(n){var t,e;if(!n.b)for(n.b=C2(BB(n.f,118).Ag().i),e=new AL(BB(n.f,118).Ag());e.e!=e.i.gc();)t=BB(kpn(e),137),WB(n.b,new Ry(t));return n.b}function jyn(n,t){var e,i,r;if(t.dc())return dD(),dD(),pAt;for(e=new aR(n,t.gc()),r=new AL(n);r.e!=r.i.gc();)i=kpn(r),t.Hc(i)&&f9(e,i);return e}function Eyn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),n.o):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),A8(n.o)):Zpn(n,t,e,i)}function Tyn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)vx(Wtn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)vx(Wtn(n.vb,t));az((IPn(),Z$t),n),n.Bb|=1}function Myn(n,t,e,i,r,c,a,u,o,s,h,f,l,b){return bCn(n,t,i,null,r,c,a,u,o,s,l,!0,b),zln(n,h),cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),2),e&&rrn(n,e),Uln(n,f),n}function Syn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Pyn(n){var t;if(null==n)return null;t=0;try{t=l_n(n,_Vn,DWn)&QVn}catch(e){if(!cL(e=lun(e),127))throw Hp(e);t=V7(n)[0]}return fun(t)}function Cyn(n,t){var e,i,r;return!((r=n.h-t.h)<0||(e=n.l-t.l,(r+=(i=n.m-t.m+(e>>22))>>22)<0||(n.l=e&SQn,n.m=i&SQn,n.h=r&PQn,0)))}function Iyn(n,t,e,i,r,c,a){var u,o;return!(t.Ae()&&(o=n.a.ue(e,i),o<0||!r&&0==o)||t.Be()&&(u=n.a.ue(e,c),u>0||!a&&0==u))}function Oyn(n,t){if(zsn(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return jbn(t,bst)-jbn(n,bst);case 4:return jbn(n,lst)-jbn(t,lst)}return 0}function Ayn(n){switch(n.g){case 0:return xht;case 1:return Dht;case 2:return Rht;case 3:return Kht;case 4:return _ht;case 5:return Fht;default:return null}}function $yn(n,t,e){var i,r;return Ihn(r=new Lm,t),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(i=r,0),Nen(i,1),nln(i,!0),Yfn(i,!0),i}function Lyn(n,t){var e,i;if(t>=n.i)throw Hp(new LO(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&aHn(n.g,t+1,n.g,t,i),$X(n.g,--n.i,null),n.fi(t,e),n.ci(),e}function Nyn(n,t){var e;return n.Db>>16==17?n.Cb.ih(n,21,qAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||n.zh(),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function xyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),679).Ke(e)}function Dyn(n){var t,e,i;for(SQ(),m$(n.c,n.a),i=new Wb(n.c);i.a<i.c.c.length;)for(e=n0(i),t=new Wb(n.b);t.a<t.c.c.length;)BB(n0(t),369).Ke(e)}function Ryn(n){var t,e,i,r,c;for(r=DWn,c=null,i=new Wb(n.d);i.a<i.c.c.length;)(e=BB(n0(i),213)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function Kyn(){Kyn=O,dat=new $O(NZn,(hN(),!1)),fat=new $O(xZn,100),q7(),lat=new $O(DZn,bat=Oat),wat=new $O(RZn,lZn),gat=new $O(KZn,iln(DWn))}function _yn(n,t,e){var i,r,c,a,u,o;for(o=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(u=Lfn(i[r],e).Kc();u.Ob();)a=BB(u.Pb(),11),VW(n.f,a,iln(o++))}function Fyn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JIn(n,t,kIn(dnn(e,BB(r.Pb(),19).a)))}function Byn(n,t,e){var i,r;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)JIn(n,t,kIn(dnn(e,BB(r.Pb(),19).a)))}function Hyn(n){var t;return _Mn(),z9(t=BB(Emn(gz(n.k),x8(FIt,YZn,61,2,0,1)),122),0,t.length,null),t[0]==(kUn(),sIt)&&t[1]==CIt&&($X(t,0,CIt),$X(t,1,sIt)),t}function qyn(n,t,e){var i,r,c;return c=sDn(n,r=XNn(n,t,e)),K9(n.b),k0(n,t,e),SQ(),m$(r,new Vd(n)),i=sDn(n,r),K9(n.b),k0(n,e,t),new rI(iln(c),iln(i))}function Gyn(){Gyn=O,Umt=dq(new B2,(yMn(),Bat),(lWn(),dot)),Xmt=new iR("linearSegments.inputPrio",iln(0)),Wmt=new iR("linearSegments.outputPrio",iln(0))}function zyn(){zyn=O,Ryt=new fC("P1_TREEIFICATION",0),Kyt=new fC("P2_NODE_ORDERING",1),_yt=new fC("P3_NODE_PLACEMENT",2),Fyt=new fC("P4_EDGE_ROUTING",3)}function Uyn(){Uyn=O,sWn(),xjt=gPt,Kjt=LPt,Cjt=KSt,Ijt=BSt,Ojt=qSt,Pjt=DSt,Ajt=USt,Njt=fPt,KAn(),Mjt=wjt,Sjt=djt,$jt=pjt,Ljt=mjt,Djt=yjt,Rjt=kjt,_jt=Ejt}function Xyn(){Xyn=O,MCt=new qC("UNKNOWN",0),jCt=new qC("ABOVE",1),ECt=new qC("BELOW",2),TCt=new qC("INLINE",3),new iR("org.eclipse.elk.labelSide",MCt)}function Wyn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(GI(n.g[e])===GI(t))return e;return-1}function Vyn(n,t,e){var i,r;return t.c==(ain(),qvt)&&e.c==Hvt?-1:t.c==Hvt&&e.c==qvt?1:(i=dhn(t.a,n.a),r=dhn(e.a,n.a),t.c==qvt?r-i:i-r)}function Qyn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw Hp(new _y("index must be >= 0 and <= layer node count"));n.c&&y7(n.c.a,n),n.c=e,e&&kG(e.a,t,n)}function Yyn(n,t){var e,i,r;for(i=new oz(ZL(hbn(n).a.Kc(),new h));dAn(i);)return e=BB(U5(i),17),new qf(yX((r=BB(t.Kb(e),10)).n.b+r.o.b/2));return iy(),iy(),Ont}function Jyn(n,t){this.c=new xp,this.a=n,this.b=t,this.d=BB(mMn(n,(hWn(),Alt)),304),GI(mMn(n,(HXn(),Lgt)))===GI((g7(),qht))?this.e=new gm:this.e=new dm}function Zyn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),33),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function nkn(n,t){var e,i;return i=null,n.Xe((sWn(),CPt))&&(e=BB(n.We(CPt),94)).Xe(t)&&(i=e.We(t)),null==i&&n.yf()&&(i=n.yf().We(t)),null==i&&(i=mpn(t)),i}function tkn(n,t){var e,i;e=n.Zc(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't remove element "+t)):Hp(r)}}function ekn(n,t){var e,i,r;if(0==(e=DBn(n,t,r=new von((i=new AT).q.getFullYear()-sQn,i.q.getMonth(),i.q.getDate())))||e<t.length)throw Hp(new _y(t));return r}function ikn(n,t){var e,i,r;for(kW(t),Tx(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),WB(n.b,kW(e));return r!=n.b.c.length&&(Esn(n,0),!0)}function rkn(){rkn=O,sWn(),kat=CSt,new XA(dSt,(hN(),!0)),Tat=KSt,Mat=BSt,Sat=qSt,Eat=DSt,Pat=USt,Cat=fPt,Kyn(),yat=dat,vat=lat,mat=wat,jat=gat,pat=fat}function ckn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw Hp(new _y("'port' must be either the source port or target port of the edge."))}function akn(n,t,e){var i,r;switch(r=n.o,i=n.d,t.g){case 1:return-i.d-e;case 3:return r.b+i.a+e;case 2:return r.a+i.c+e;case 4:return-i.b-e;default:return 0}}function ukn(n,t,e,i){var r,c,a;for(PZ(t,BB(i.Xb(0),29)),a=i.bd(1,i.gc()),c=BB(e.Kb(t),20).Kc();c.Ob();)ukn(n,(r=BB(c.Pb(),17)).c.i==t?r.d.i:r.c.i,e,a)}function okn(n){var t;return t=new xp,Lx(n,(hWn(),Dlt))?BB(mMn(n,Dlt),83):(JT(AV(new Rq(null,new w1(n.j,16)),new tr),new gd(t)),hon(n,Dlt,t),t)}function skn(n,t){var e;return n.Db>>16==6?n.Cb.ih(n,6,_Ot,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),yOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function hkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,1,DOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),jOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function fkn(n,t){var e;return n.Db>>16==9?n.Cb.ih(n,9,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),TOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function lkn(n,t){var e;return n.Db>>16==5?n.Cb.ih(n,9,XAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),s$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function bkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,0,BOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),e$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function wkn(n,t){var e;return n.Db>>16==7?n.Cb.ih(n,6,GOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),v$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function dkn(){this.a=new lo,this.g=new Avn,this.j=new Avn,this.b=new xp,this.d=new Avn,this.i=new Avn,this.k=new xp,this.c=new xp,this.e=new xp,this.f=new xp}function gkn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=Wtn(n,r),null==t){if(null==i)return r}else if(GI(t)===GI(i)||Nfn(t,i))return r;return-1}function pkn(n,t){var e,i;return(e=t.Hh(n.a))?(i=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),j7n)),mK(E7n,i)?az(n,Utn(t.Hj())):i):null}function vkn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=BB(t,49).eh();i&&i!=t;i=i.eh()){if(++e>GQn)return vkn(n,i);if(i==n)return!0}}return!1}function mkn(n){switch(DN(),n.q.g){case 5:vIn(n,(kUn(),sIt)),vIn(n,SIt);break;case 4:z$n(n,(kUn(),sIt)),z$n(n,SIt);break;default:vUn(n,(kUn(),sIt)),vUn(n,SIt)}}function ykn(n){switch(DN(),n.q.g){case 5:SOn(n,(kUn(),oIt)),SOn(n,CIt);break;case 4:Cpn(n,(kUn(),oIt)),Cpn(n,CIt);break;default:mUn(n,(kUn(),oIt)),mUn(n,CIt)}}function kkn(n){var t,e;(t=BB(mMn(n,(fRn(),nat)),19))?(e=t.a,hon(n,(Mrn(),hat),0==e?new sbn:new C4(e))):hon(n,(Mrn(),hat),new C4(1))}function jkn(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 Ekn(n,t){switch(n.g){case 0:return t==(Tbn(),Flt)?rst:cst;case 1:return t==(Tbn(),Flt)?rst:ist;case 2:return t==(Tbn(),Flt)?ist:cst;default:return ist}}function Tkn(n,t){var i,r,c;for(y7(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=n4n,r=new Wb(n.a);r.a<r.c.c.length;)i=BB(n0(r),187),c=e.Math.max(c,i.d);n.b=c}function Mkn(n,t){var e;return n.Db>>16==3?n.Cb.ih(n,12,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),mOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Skn(n,t){var e;return n.Db>>16==11?n.Cb.ih(n,10,UOt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(CXn(),EOt),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Pkn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,11,qAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),g$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ckn(n,t){var e;return n.Db>>16==10?n.Cb.ih(n,12,QAt,t):(e=Cvn(BB(itn(BB(yan(n,16),26)||(gWn(),m$t),n.Db>>16),18)),n.Cb.ih(n,e.n,e.f,t))}function Ikn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.kh()&&(t=BB(n.r,49),n.r=BB(tfn(n,t),138),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,8,t,n.r))),n.r}function Okn(n,t,i){var r;return r=Pun(Gk(xNt,1),qQn,25,15,[iMn(n,(Dtn(),Git),t,i),iMn(n,zit,t,i),iMn(n,Uit,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function Akn(n,t){var e,i,r;if(0!=(r=Yvn(n,t)).c.length)for(m$(r,new ti),e=r.c.length,i=0;i<e;i++)hPn(n,(l1(i,r.c.length),BB(r.c[i],286)),TDn(n,r,i))}function $kn(n){var t,e,i;for(i=BB(h6(n.a,(LEn(),Tst)),15).Kc();i.Ob();)for(t=gz((e=BB(i.Pb(),101)).k).Kc();t.Ob();)iX(n,e,BB(t.Pb(),61),(Crn(),Dst),1)}function Lkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&n.c==Ajn(t,n).c)return!0;return!1}function Nkn(n){var t,e;if(n.k==(uSn(),Put))for(e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)if(!b5(t=BB(U5(e),17))&&t.c.i.c==t.d.i.c)return!0;return!1}function xkn(n,t){var e,i;for(OTn(t,"Dull edge routing",1),i=spn(n.b,0);i.b!=i.d.c;)for(e=spn(BB(b3(i),86).d,0);e.b!=e.d.c;)yQ(BB(b3(e),188).a)}function Dkn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)(i=x2(t,BB(r.Pb(),19).a))&&O$n(n,i)}function Rkn(){var n;for(tS(),nWn((QX(),t$t)),_Xn(t$t),Tyn(t$t),gWn(),L$t=l$t,n=new Wb(V$t);n.a<n.c.c.length;)azn(BB(n0(n),241),l$t,null);return!0}function Kkn(n,t){var e,i,r,c,a,u;return(a=n.h>>19)!=(u=t.h>>19)?u-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function _kn(){_kn=O,tRn(),Pit=new $O(UYn,Cit=xit),Rnn(),Mit=new $O(XYn,Sit=mit),hpn(),Eit=new $O(WYn,Tit=dit),jit=new $O(VYn,(hN(),!0))}function Fkn(n,t,e){var i,r;i=t*e,cL(n.g,145)?(r=f3(n)).f.d?r.f.a||(n.d.a+=i+fJn):(n.d.d-=i+fJn,n.d.a+=i+fJn):cL(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function Bkn(n,t,i){var r,c,a,u,o;for(c=n[i.g],o=new Wb(t.d);o.a<o.c.c.length;)(a=(u=BB(n0(o),101)).i)&&a.i==i&&(c[r=u.d[i.g]]=e.Math.max(c[r],a.j.b))}function Hkn(n,t){var i,r,c,a,u;for(r=0,c=0,i=0,u=new Wb(t.d);u.a<u.c.c.length;)Gmn(a=BB(n0(u),443)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.g:0),++i;t.b=r,t.e=c}function qkn(n){var t,e,i;if(i=n.b,qT(n.i,i.length)){for(e=2*i.length,n.b=x8(Gnt,CVn,317,e,0,1),n.c=x8(Gnt,CVn,317,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)YCn(n,t,t);++n.g}}function Gkn(n,t,e,i){var r,c,a,u;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)u=a-t.k+i,vmn(t,r,a)?cmn(n,c,u)||Xmn(n,c,u):ymn(t,r,a)&&(imn(n,c,u)||Wmn(n,c,u))}function zkn(n,t,e){var i;(i=t.c.i).k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function Ukn(n,t,i){var r,c,a,u,o,s;return jDn(),u=t/2,a=i/2,o=1,s=1,(r=e.Math.abs(n.a))>u&&(o=u/r),(c=e.Math.abs(n.b))>a&&(s=a/c),kL(n,e.Math.min(o,s)),n}function Xkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),y6n),2014))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new ao}function Wkn(){var n,t;d7();try{if(t=BB(Xjn((WM(),zAt),S7n),2024))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new Ds}function Vkn(){var n,t;qBn();try{if(t=BB(Xjn((WM(),zAt),V9n),1941))return t}catch(e){if(!cL(e=lun(e),102))throw Hp(e);n=e,uz((u$(),n))}return new qo}function Qkn(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,4,r,t),e?e.Ei(i):e=i),r!=t&&(e=azn(n,t?kLn(n,t):n.a,e)),e}function Ykn(){AT.call(this),this.e=-1,this.a=!1,this.p=_Vn,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=_Vn}function Jkn(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=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function Zkn(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=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function njn(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=Pln(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function tjn(){tjn=O,Nat=WG(dq(dq(dq(new B2,(yMn(),Fat),(lWn(),yot)),Fat,Tot),Bat,Aot),Bat,oot),Dat=dq(dq(new B2,Fat,Jut),Fat,sot),xat=WG(new B2,Bat,fot)}function ejn(n){var t,e,i,r,c;for(t=BB(mMn(n,(hWn(),zft)),83),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=BB(i.Pb(),306)).i).c+=c.a,r.d+=c.b,e.c?NDn(e):xDn(e);hon(n,zft,null)}function ijn(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 rjn(n){var t,e,i,r,c;if(i=0,r=ZJn,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,UKn(n,n.d,0,0,Z3n,e),(c=n.b.ig(n.d))<r&&(i=e,r=c);UKn(n,n.d,0,0,Z3n,i)}function cjn(n,t){var e,i,r,c;for(c=new xp,t.e=null,t.f=null,i=new Wb(t.i);i.a<i.c.c.length;)e=BB(n0(i),65),r=BB(RX(n.g,e.a),46),e.a=qz(e.b),VW(c,e.a,r);n.g=c}function ajn(n,t,e){var i,r,c,a,u;for(r=(t-n.e)/n.d.c.length,c=0,u=new Wb(n.d);u.a<u.c.c.length;)a=BB(n0(u),443),i=n.b-a.b+e,kdn(a,a.e+c*r,a.f),hmn(a,r,i),++c}function ujn(n){var t;if(n.f.qj(),-1!=n.b){if(++n.b,t=n.f.d[n.a],n.b<t.i)return;++n.a}for(;n.a<n.f.d.length;++n.a)if((t=n.f.d[n.a])&&0!=t.i)return void(n.b=0);n.b=-1}function ojn(n,t){var e,i,r;for(e=$Cn(n,0==(r=t.c.length)?"":(l1(0,t.c.length),SD(t.c[0]))),i=1;i<r&&e;++i)e=BB(e,49).oh((l1(i,t.c.length),SD(t.c[i])));return e}function sjn(n,t){var e,i;for(i=new Wb(t);i.a<i.c.c.length;)e=BB(n0(i),10),n.c[e.c.p][e.p].a=OG(n.i),n.c[e.c.p][e.p].d=Gy(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function hjn(n,t){var i,r,c;for(c=0,r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),157),c+=e.Math.pow(iG(i)*eG(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function fjn(n,t,e,i){var r,c,a;return a=NRn(n,c=qRn(n,t,e,i)),fMn(n,t,e,i),K9(n.b),SQ(),m$(c,new Qd(n)),r=NRn(n,c),fMn(n,e,t,i),K9(n.b),new rI(iln(a),iln(r))}function ljn(n,t,e){var i;for(OTn(e,"Interactive node placement",1),n.a=BB(mMn(t,(hWn(),Alt)),304),i=new Wb(t.b);i.a<i.c.c.length;)nDn(n,BB(n0(i),29));HSn(e)}function bjn(n,t){OTn(t,"General Compactor",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),dwn(BB(ZAn(n,(Uyn(),Sjt)),380)).hg(n),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function wjn(n,t,e){var i,r;for(CA(n,n.j+t,n.k+e),r=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));r.e!=r.i.gc();)TA(i=BB(kpn(r),469),i.a+t,i.b+e);PA(n,n.b+t,n.c+e)}function djn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),Ywn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),Ywn(n.d,t,i)}return FTn(n,t,e,i)}function gjn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),_pn(n.e,t,i);case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),_pn(n.d,t,i)}return run(n,t,e,i)}function pjn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&bIn(n,r,t)}function vjn(n,t,e){var i,r,c;return n.qj(),c=null==t?0:nsn(t),n.f>0&&(r=aOn(n,(c&DWn)%n.d.length,c,t))?r.ed(e):(i=n.tj(c,t,e),n.c.Fc(i),null)}function mjn(n,t){var e,i,r,c;switch(Cfn(n,t)._k()){case 3:case 2:for(r=0,c=(e=YBn(t)).i;r<c;++r)if(5==DW(B7(n,i=BB(Wtn(e,r),34))))return i}return null}function yjn(n){var t,e,i,r,c;if(qT(n.f,n.b.length))for(i=x8(Qnt,CVn,330,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e.Rd())t=(c=BB(e,330)).d&r,c.a=i[t],i[t]=c}function kjn(n,t){var i,r,c,a;for(a=0,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)r=BB(c.Pb(),111),a=e.Math.max(a,r.e.a+r.b.rf().a);(i=BB(oV(n.b,t),124)).n.b=0,i.a.a=a}function jjn(n,t){var i,r,c,a;for(i=0,a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)c=BB(a.Pb(),111),i=e.Math.max(i,c.e.b+c.b.rf().b);(r=BB(oV(n.b,t),124)).n.d=0,r.a.b=i}function Ejn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=kA(vyt),e.Hc((bDn(),gft))&&Jcn(t,kyt),e.Hc(vft)&&Jcn(t,Eyt),e.Hc(sft)&&Jcn(t,myt),e.Hc(fft)&&Jcn(t,yyt),t}function Tjn(n,t){var e;OTn(t,"Delaunay triangulation",1),e=new Np,Otn(n.i,new yg(e)),qy(TD(mMn(n,(Xcn(),Qrt)))),n.e?Frn(n.e,$Xn(e)):n.e=$Xn(e),HSn(t)}function Mjn(n){if(n<0)throw Hp(new _y("The input must be positive"));return n<MMt.length?j2(MMt[n]):e.Math.sqrt(Z3n*n)*(ifn(n,n)/efn(2.718281828459045,n))}function Sjn(n,t){var e;if(n.ni()&&null!=t){for(e=0;e<n.i;++e)if(Nfn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(GI(n.g[e])===GI(t))return!0;return!1}function Pjn(n,t){if(null==t){for(;n.a.Ob();)if(null==BB(n.a.Pb(),42).dd())return!0}else for(;n.a.Ob();)if(Nfn(t,BB(n.a.Pb(),42).dd()))return!0;return!1}function Cjn(n,t){var e;return t===n||!!cL(t,664)&&(e=BB(t,1947),ign(n.g||(n.g=new Zf(n)),e.g||(e.g=new Zf(e))))}function Ijn(n){var t,i,r;for(t="Sz",i="ez",r=e.Math.min(n.length,5)-1;r>=0;r--)if(mK(n[r].d,t)||mK(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function Ojn(n,t){var i;return JO(n)&&JO(t)&&$Qn<(i=n/t)&&i<OQn?i<0?e.Math.ceil(i):e.Math.floor(i):uan(Aqn(JO(n)?Pan(n):n,JO(t)?Pan(t):t,!1))}function Ajn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw Hp(new _y("'node' must either be the source node or target node of the edge."))}function $jn(n){var t,e,i,r;if(r=BB(mMn(n,(hWn(),Fft)),37)){for(i=new Gj,t=vW(n.c.i);t!=r;)t=vW(e=t.e),_x(UR(UR(i,e.n),t.c),t.d.b,t.d.d);return i}return Fut}function Ljn(n){var t;JT(wnn(new Rq(null,new w1((t=BB(mMn(n,(hWn(),Olt)),403)).d,16)),new _i),new wd(n)),JT(AV(new Rq(null,new w1(t.d,16)),new Fi),new dd(n))}function Njn(n,t){var e,i;for(e=new oz(ZL((t?lbn(n):fbn(n)).a.Kc(),new h));dAn(e);)if((i=Ajn(BB(U5(e),17),n)).k==(uSn(),Put)&&i.c!=n.c)return i;return null}function xjn(n){var t,i,r;for(i=new Wb(n.p);i.a<i.c.c.length;)(t=BB(n0(i),10)).k==(uSn(),Cut)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function Djn(n,t,e){var i,r,c;for(c=new Wb(t);c.a<c.c.c.length;)i=BB(n0(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Wb(t);r.a<r.c.c.length;)xzn(n,i=BB(n0(r),10),e)}function Rjn(n,t,i){var r,c;(r=Tfn(t.j,i.s,i.c)+Tfn(i.e,t.s,t.c))==(c=Tfn(i.j,t.s,t.c)+Tfn(t.e,i.s,i.c))?r>0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function Kjn(n,t){var e;if(e=!1,XI(t)&&(e=!0,nW(n,new GX(SD(t)))),e||cL(t,236)&&(e=!0,nW(n,new Sl(XK(BB(t,236))))),!e)throw Hp(new Ly(H6n))}function _jn(n,t,e,i){var r,c,a;return r=new N7(n.e,1,10,cL(a=t.c,88)?BB(a,26):(gWn(),d$t),cL(c=e.c,88)?BB(c,26):(gWn(),d$t),uvn(n,t),!1),i?i.Ei(r):i=r,i}function Fjn(n){var t,e;switch(BB(mMn(vW(n),(HXn(),pgt)),420).g){case 0:return t=n.n,e=n.o,new xC(t.a+e.a/2,t.b+e.b/2);case 1:return new wA(n.n);default:return null}}function Bjn(){Bjn=O,Qht=new AP(QZn,0),Vht=new AP("LEFTUP",1),Jht=new AP("RIGHTUP",2),Wht=new AP("LEFTDOWN",3),Yht=new AP("RIGHTDOWN",4),Xht=new AP("BALANCED",5)}function Hjn(n,t,e){var i,r,c;if(0==(i=Pln(n.a[t.p],n.a[e.p]))){if(r=BB(mMn(t,(hWn(),clt)),15),c=BB(mMn(e,clt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function qjn(n){switch(n.g){case 1:return new _a;case 2:return new Fa;case 3:return new Ka;case 0:return null;default:throw Hp(new _y(c4n+(null!=n.f?n.f:""+n.g)))}}function Gjn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new eU(zOt,n,1,7)),sqn(n.n),!n.n&&(n.n=new eU(zOt,n,1,7)),void pX(n.n,BB(e,14));case 2:return void $in(n,SD(e))}rsn(n,t,e)}function zjn(n,t,e){switch(t){case 3:return void Men(n,Gy(MD(e)));case 4:return void Sen(n,Gy(MD(e)));case 5:return void Pen(n,Gy(MD(e)));case 6:return void Cen(n,Gy(MD(e)))}Gjn(n,t,e)}function Ujn(n,t,e){var i,r;(i=HTn(r=new Lm,t,null))&&i.Fi(),Nrn(r,e),f9((!n.c&&(n.c=new eU(YAt,n,12,10)),n.c),r),Len(r,0),Nen(r,1),nln(r,!0),Yfn(r,!0)}function Xjn(n,t){var e,i;return cL(e=hS(n.g,t),235)?((i=BB(e,235)).Qh(),i.Nh()):cL(e,498)?i=BB(e,1938).b:null}function Wjn(n,t,e,i){var r,c;return yX(t),yX(e),R7(!!(c=BB(UK(n.d,t),19)),"Row %s not in %s",t,n.e),R7(!!(r=BB(UK(n.b,e),19)),"Column %s not in %s",e,n.c),Sun(n,c.a,r.a,i)}function Vjn(n,t,e,i,r,c,a){var u,o,s,h,f;if(f=Bmn(u=(s=c==a-1)?i:0,h=r[c]),10!=i&&Pun(Gk(n,a-c),t[c],e[c],u,f),!s)for(++c,o=0;o<h;++o)f[o]=Vjn(n,t,e,i,r,c,a);return f}function Qjn(n){if(-1==n.g)throw Hp(new dv);n.mj();try{n.i.$c(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}}function Yjn(n,t){return n.b.a=e.Math.min(n.b.a,t.c),n.b.b=e.Math.min(n.b.b,t.d),n.a.a=e.Math.max(n.a.a,t.c),n.a.b=e.Math.max(n.a.b,t.d),n.c[n.c.length]=t,!0}function Jjn(n){var t,e,i;for(i=-1,e=0,t=new Wb(n);t.a<t.c.c.length;){if(BB(n0(t),243).c==(ain(),Hvt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function Zjn(n){var t,i,r,c;for(c=0,t=0,r=new Wb(n.c);r.a<r.c.c.length;)Pen(i=BB(n0(r),33),n.e+c),Cen(i,n.f),c+=i.g+n.b,t=e.Math.max(t,i.f+n.b);n.d=c-n.b,n.a=t-n.b}function nEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),57)).d.c,t.d.c=t.d.d,t.d.d=i,i=t.d.b,t.d.b=t.d.a,t.d.a=i,i=t.b.a,t.b.a=t.b.b,t.b.b=i;yNn(n)}function tEn(n){var t,e,i;for(e=new Wb(n.a.b);e.a<e.c.c.length;)i=(t=BB(n0(e),81)).g.c,t.g.c=t.g.d,t.g.d=i,i=t.g.b,t.g.b=t.g.a,t.g.a=i,i=t.e.a,t.e.a=t.e.b,t.e.b=i;kNn(n)}function eEn(n){var t,e,i,r,c;for(c=gz(n.k),kUn(),i=0,r=(e=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;i<r;++i)if((t=e[i])!=PIt&&!c.Hc(t))return t;return null}function iEn(n,t){var e,i;return(i=BB(EN(Qon(AV(new Rq(null,new w1(t.j,16)),new bc))),11))&&(e=BB(xq(i.e,0),17))?BB(mMn(e,(hWn(),wlt)),19).a:gnn(n.b)}function rEn(n,t){var e,i,r;for(r=new Wb(t.a);r.a<r.c.c.length;)for(i=BB(n0(r),10),nk(n.d),e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)XOn(n,i,BB(U5(e),17).d.i)}function cEn(n,t){var e,i;for(y7(n.b,t),i=new Wb(n.n);i.a<i.c.c.length;)if(-1!=E7((e=BB(n0(i),211)).c,t,0)){y7(e.c,t),Zjn(e),0==e.c.c.length&&y7(n.n,e);break}fHn(n)}function aEn(n,t){var i,r,c,a,u;for(u=n.f,c=0,a=0,r=new Wb(n.a);r.a<r.c.c.length;)Tvn(i=BB(n0(r),187),n.e,u),p9(i,t),a=e.Math.max(a,i.r),c=u+=i.d+n.c;n.d=a,n.b=c}function uEn(n){var t,e;return h3(e=wLn(n))?null:(yX(e),t=BB(emn(new oz(ZL(e.a.Kc(),new h))),79),PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)))}function oEn(n){return n.o||(n.Lj()?n.o=new aW(n,n,null):n.rk()?n.o=new rR(n,null):1==DW(B7((IPn(),Z$t),n))?n.o=new g4(n):n.o=new cR(n,null)),n.o}function sEn(n,t,e,i){var r,c,a,u,o;e.mh(t)&&(r=(a=t)?BB(i,49).xh(a):null)&&(o=e.ah(t),(u=t.t)>1||-1==u?(c=BB(o,15),r.Wb(Xdn(n,c))):r.Wb(t_n(n,BB(o,56))))}function hEn(n,t,e,i){YE();var r=PWn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{HNt(c)()}catch(a){n(t,a)}else HNt(c)()}function fEn(n){var t,e,i,r,c;for(i=new usn(new Pb(n.b).a);i.b;)t=BB((e=ten(i)).cd(),10),c=BB(BB(e.dd(),46).a,10),r=BB(BB(e.dd(),46).b,8),UR(kO(t.n),UR(B$(c.n),r))}function lEn(n){switch(BB(mMn(n.b,(HXn(),egt)),375).g){case 1:JT($V(wnn(new Rq(null,new w1(n.d,16)),new _r),new Fr),new Br);break;case 2:vRn(n);break;case 0:CCn(n)}}function bEn(n,t,e){OTn(e,"Straight Line Edge Routing",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),mHn(n,BB(ZAn(t,(wD(),Vkt)),33)),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function wEn(){wEn=O,ZMt=new RC("V_TOP",0),JMt=new RC("V_CENTER",1),YMt=new RC("V_BOTTOM",2),VMt=new RC("H_LEFT",3),WMt=new RC("H_CENTER",4),QMt=new RC("H_RIGHT",5)}function dEn(n){var t;return 0!=(64&n.Db)?Cwn(n):((t=new fN(Cwn(n))).a+=" (abstract: ",yE(t,0!=(256&n.Bb)),t.a+=", interface: ",yE(t,0!=(512&n.Bb)),t.a+=")",t.a)}function gEn(n,t,e,i){var r,c,a;return mA(n.e)&&(a=LY(n,1,r=t.ak(),t.dd(),c=e.dd(),r.$j()?pBn(n,r,c,cL(r,99)&&0!=(BB(r,18).Bb&BQn)):-1,!0),i?i.Ei(a):i=a),i}function pEn(n){var t;null==n.c&&(t=GI(n.b)===GI(Ynt)?null:n.b,n.d=null==t?zWn:ez(t)?jN(EQ(t)):XI(t)?qVn:nE(tsn(t)),n.a=n.a+": "+(ez(t)?CR(EQ(t)):t+""),n.c="("+n.d+") "+n.a)}function vEn(n,t){this.e=n,QI(e0(t,-4294967296),0)?(this.d=1,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t)])):(this.d=2,this.a=Pun(Gk(ANt,1),hQn,25,15,[dG(t),dG(kz(t,32))]))}function mEn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===xWn&&Map.prototype.entries&&n()?Map:bUn()}function yEn(n,t){var e,i,r;for(r=new M2(n.e,0),e=0;r.b<r.d.gc();){if((i=Gy((Px(r.b<r.d.gc()),MD(r.d.Xb(r.c=r.b++))))-t)>D3n)return e;i>-1e-6&&++e}return e}function kEn(n,t){var e;t!=n.b?(e=null,n.b&&(e=oJ(n.b,n,-4,e)),t&&(e=Npn(t,n,-4,e)),(e=Zhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function jEn(n,t){var e;t!=n.f?(e=null,n.f&&(e=oJ(n.f,n,-1,e)),t&&(e=Npn(t,n,-1,e)),(e=nfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,0,t,t))}function EEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function TEn(n){var t,e,i;if(null==n)return null;if((e=BB(n,15)).dc())return"";for(i=new Sk,t=e.Kc();t.Ob();)cO(i,(Uqn(),SD(t.Pb()))),i.a+=" ";return KO(i,i.a.length-1)}function MEn(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?Tz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function SEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),OV(new Bg(n).a,i)}function PEn(n,t){var e,i,r;if(t)for(r=((e=new hz(t.a.length)).b-e.a)*e.c<0?(eS(),MNt):new XL(e);r.Ob();)i=x2(t,BB(r.Pb(),19).a),IV(new $g(n).a,i)}function CEn(n){if(null!=n&&n.length>0&&33==fV(n,n.length-1))try{return null==YPn(fx(n,0,n.length-1)).e}catch(t){if(!cL(t=lun(t),32))throw Hp(t)}return!1}function IEn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,3,i,null,c,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,1,i,i.zj(),c,-1,!0),e?e.Ei(r):e=r,e}function OEn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=QOn((b1(n,1),"X".charCodeAt(n)))))throw Hp(new ak("Unknown Option: "+"X".substr(n)));t|=e}return t}function AEn(n,t,e){var i,r;switch(i=Wln(vW(t)),CZ(r=new CSn,t),e.g){case 1:qCn(r,Tln(hwn(i)));break;case 2:qCn(r,hwn(i))}return hon(r,(HXn(),tpt),MD(mMn(n,tpt))),r}function $En(n){var t,e;return t=BB(U5(new oz(ZL(fbn(n.a).a.Kc(),new h))),17),e=BB(U5(new oz(ZL(lbn(n.a).a.Kc(),new h))),17),qy(TD(mMn(t,(hWn(),Clt))))||qy(TD(mMn(e,Clt)))}function LEn(){LEn=O,Mst=new yP("ONE_SIDE",0),Pst=new yP("TWO_SIDES_CORNER",1),Cst=new yP("TWO_SIDES_OPPOSING",2),Sst=new yP("THREE_SIDES",3),Tst=new yP("FOUR_SIDES",4)}function NEn(n,t,e,i,r){var c,a;c=BB(P4(AV(t.Oc(),new Zr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),a=BB(gan(n.b,e,i),15),0==r?a.Wc(0,c):a.Gc(c)}function xEn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(i),10)).a.Kc(),new h));dAn(e);)r=BB(U5(e),17).c.i.p,n.n[r]=n.n[r]-1}function DEn(n,t){var e,i,r,c;for(r=new Wb(t.d);r.a<r.c.c.length;)for(i=BB(n0(r),101),c=BB(RX(n.c,i),112).o,e=new QT(i.b);e.a<e.c.a.length;)g9(i,BB(u4(e),61),c)}function REn(n){var t;for(t=new Wb(n.e.b);t.a<t.c.c.length;)hzn(n,BB(n0(t),29));JT(AV(wnn(wnn(new Rq(null,new w1(n.e.b,16)),new Xc),new Zc),new na),new hg(n))}function KEn(n,t){return!!t&&!n.Di(t)&&(n.i?n.i.Ei(t):cL(t,143)?(n.i=BB(t,143),!0):(n.i=new po,n.i.Ei(t)))}function _En(n){if(n=FBn(n,!0),mK(a5n,n)||mK("1",n))return hN(),vtt;if(mK(u5n,n)||mK("0",n))return hN(),ptt;throw Hp(new ik("Invalid boolean value: '"+n+"'"))}function FEn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=BB(r.Pb(),42)).cd(),GI(t)===GI(c)||null!=t&&Nfn(t,c))return e&&(i=new PS(i.cd(),i.dd()),r.Qb()),i;return null}function BEn(n){var t,e,i;qD(),n.B.Hc((n_n(),qIt))&&(i=n.f.i,t=new gY(n.a.c),(e=new bm).b=t.c-i.c,e.d=t.d-i.d,e.c=i.c+i.b-(t.c+t.b),e.a=i.d+i.a-(t.d+t.a),n.e.Ff(e))}function HEn(n,t,i,r){var c,a,u;for(u=e.Math.min(i,WFn(BB(n.b,65),t,i,r)),a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),221))!=t&&(u=e.Math.min(u,HEn(c,t,u,r)));return u}function qEn(n){var t,e,i;for(i=x8(Out,sVn,193,n.b.c.length,0,2),e=new M2(n.b,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),29),i[e.b-1]=n2(t.a);return i}function GEn(n,t,e,i,r){var c,a,u,o;for(a=nj(Zk(H_(tvn(e)),i),akn(n,e,r)),o=DSn(n,e).Kc();o.Ob();)t[(u=BB(o.Pb(),11)).p]&&(c=t[u.p].i,WB(a.d,new xG(c,kln(a,c))));Pwn(a)}function zEn(n,t){this.f=new xp,this.b=new xp,this.j=new xp,this.a=n,this.c=t,this.c>0&&_yn(this,this.c-1,(kUn(),oIt)),this.c<this.a.length-1&&_yn(this,this.c+1,(kUn(),CIt))}function UEn(n){n.length>0&&n[0].length>0&&(this.c=qy(TD(mMn(vW(n[0][0]),(hWn(),alt))))),this.a=x8(Pmt,sVn,2018,n.length,0,2),this.b=x8(Lmt,sVn,2019,n.length,0,2),this.d=new Thn}function XEn(n){return 0!=n.c.length&&((l1(0,n.c.length),BB(n.c[0],17)).c.i.k==(uSn(),Put)||o5($V(new Rq(null,new w1(n,16)),new Kc),new _c))}function WEn(n,t,e){return OTn(e,"Tree layout",1),h2(n.b),CU(n.b,(zyn(),Ryt),Ryt),CU(n.b,Kyt,Kyt),CU(n.b,_yt,_yt),CU(n.b,Fyt,Fyt),n.a=$qn(n.b,t),lxn(n,t,mcn(e,1)),HSn(e),t}function VEn(n,t){var i,r,c,a,u,o;for(u=wDn(t),c=t.f,o=t.g,a=e.Math.sqrt(c*c+o*o),r=0,i=new Wb(u);i.a<i.c.c.length;)r+=VEn(n,BB(n0(i),33));return e.Math.max(r,a)}function QEn(){QEn=O,YCt=new UC(hJn,0),QCt=new UC("FREE",1),VCt=new UC("FIXED_SIDE",2),UCt=new UC("FIXED_ORDER",3),WCt=new UC("FIXED_RATIO",4),XCt=new UC("FIXED_POS",5)}function YEn(n,t){var e,i,r;if(e=t.Hh(n.a))for(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),T7n)),i=1;i<(IPn(),nLt).length;++i)if(mK(nLt[i],r))return i;return 0}function JEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function ZEn(n){var t,e,i,r;if(null==n)return zWn;for(r=new $an(FWn,"[","]"),e=0,i=(t=n).length;e<i;++e)b6(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function nTn(n){var t,e,i;for(i=new $an(FWn,"{","}"),e=n.vc().Kc();e.Ob();)b6(i,W3(n,(t=BB(e.Pb(),42)).cd())+"="+W3(n,t.dd()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function tTn(n){for(var t,e,i,r;!Wy(n.o);)e=BB(dU(n.o),46),i=BB(e.a,121),r=Nbn(t=BB(e.b,213),i),t.e==i?(RN(r.g,t),i.e=r.e+t.a):(RN(r.b,t),i.e=r.e-t.a),WB(n.e.a,i)}function eTn(n,t){var e,i,r;for(e=null,r=BB(t.Kb(n),20).Kc();r.Ob();)if(i=BB(r.Pb(),17),e){if((i.c.i==n?i.d.i:i.c.i)!=e)return!1}else e=i.c.i==n?i.d.i:i.c.i;return!0}function iTn(n,t){var e,i,r;for(i=new Wb(QLn(n,!1,t));i.a<i.c.c.length;)0==(e=BB(n0(i),129)).d?(WZ(e,null),VZ(e,null)):(r=e.a,WZ(e,e.b),VZ(e,r))}function rTn(n){var t,e;return Jcn(t=new B2,Cyt),(e=BB(mMn(n,(hWn(),Zft)),21)).Hc((bDn(),vft))&&Jcn(t,$yt),e.Hc(sft)&&Jcn(t,Iyt),e.Hc(gft)&&Jcn(t,Ayt),e.Hc(fft)&&Jcn(t,Oyt),t}function cTn(n){var t,e,i,r;for(Sqn(n),e=new oz(ZL(hbn(n).a.Kc(),new h));dAn(e);)r=(i=(t=BB(U5(e),17)).c.i==n)?t.d:t.c,i?MZ(t,null):SZ(t,null),hon(t,(hWn(),mlt),r),uAn(n,r.i)}function aTn(n,t,e,i){var r,c;switch(r=e[(c=t.i).g][n.d[c.g]],c.g){case 1:r-=i+t.j.b,t.g.b=r;break;case 3:r+=i,t.g.b=r;break;case 4:r-=i+t.j.a,t.g.a=r;break;case 2:r+=i,t.g.a=r}}function uTn(n){var t,e;for(e=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));e.e!=e.i.gc();)if(!dAn(new oz(ZL(wLn(t=BB(kpn(e),33)).a.Kc(),new h))))return t;return null}function oTn(){var n;return WOt?BB($$n((WM(),zAt),y6n),2016):(n=BB(cL(SJ((WM(),zAt),y6n),555)?SJ(zAt,y6n):new sAn,555),WOt=!0,_Gn(n),jWn(n),Tyn(n),mZ(zAt,y6n,n),n)}function sTn(n,t,e){var i,r;if(0==n.j)return e;if(r=BB(_en(n,t,e),72),!(i=e.ak()).Ij()||!n.a.rl(i))throw Hp(new dy("Invalid entry feature '"+i.Hj().zb+"."+i.ne()+"'"));return r}function hTn(n,t){var e,i,r,c,a,u,o;for(u=0,o=(a=n.a).length;u<o;++u)for(r=0,c=(i=a[u]).length;r<c;++r)if(e=i[r],GI(t)===GI(e)||null!=t&&Nfn(t,e))return!0;return!1}function fTn(n){var t,e,i;return Vhn(n,0)>=0?(e=Ojn(n,AQn),i=ldn(n,AQn)):(e=Ojn(t=jz(n,1),5e8),i=rbn(yz(i=ldn(t,5e8),1),e0(n,1))),i0(yz(i,32),e0(e,UQn))}function lTn(n,t,e){var i;switch(Px(0!=t.b),i=BB(Atn(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 nX(spn(t,0),i),t}function bTn(n,t,e,i){var r,c,a,u,o;switch(o=n.b,u=zgn(a=(c=t.d).j,o.d[a.g],e),r=UR(B$(c.n),c.a),c.j.g){case 1:case 3:u.a+=r.a;break;case 2:case 4:u.b+=r.b}r5(i,u,i.c.b,i.c)}function wTn(n,t,e){var i,r,c,a;for(a=E7(n.e,t,0),(c=new rm).b=e,i=new M2(n.e,a);i.b<i.d.gc();)Px(i.b<i.d.gc()),(r=BB(i.d.Xb(i.c=i.b++),10)).p=e,WB(c.e,r),fW(i);return c}function dTn(n,t,e,i){var r,c,a,u,o;for(r=null,c=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).i+a.g,n<a.j+a.f+i&&(r?e.i-o<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function gTn(n,t,e,i){var r,c,a,u,o;for(c=null,r=0,u=new Wb(t);u.a<u.c.c.length;)o=(a=BB(n0(u),33)).j+a.f,n<a.i+a.g+i&&(c?e.j-o<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function pTn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Yon(BB(xq(n.b,e),434))?!t&&e+1<i&&Yon(BB(xq(n.b,e+1),434))&&(t=!0,BB(xq(n.b,e),434).a=!0):t=!1}function vTn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=rbn(c,ibn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}function mTn(n,t){var e,i;for($On(),ODn(),i=Jtt,e=n;t>1;t>>=1)0!=(1&t)&&(i=Nnn(i,e)),e=1==e.d?Nnn(e,e):new Cgn(I_n(e.a,e.d,x8(ANt,hQn,25,e.d<<1,15,1)));return i=Nnn(i,e)}function yTn(){var n,t,e,i;for(yTn=O,Oet=x8(xNt,qQn,25,25,15,1),Aet=x8(xNt,qQn,25,33,15,1),i=152587890625e-16,t=32;t>=0;t--)Aet[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)Oet[n]=e,e*=.5}function kTn(n){var t,e;if(qy(TD(ZAn(n,(HXn(),wgt)))))for(e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)if(QIn(t=BB(U5(e),79))&&qy(TD(ZAn(t,dgt))))return!0;return!1}function jTn(n,t){var e,i,r;TU(n.f,t)&&(t.b=n,i=t.c,-1!=E7(n.j,i,0)||WB(n.j,i),r=t.d,-1!=E7(n.j,r,0)||WB(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new epn(n)),van(n.i,e)))}function ETn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p<i.p?0:1:Mln(e)==r?0:Eln(e)==r?1:SN(n.b.b,Mln(e))?0:1}function TTn(){TTn=O,tvt=new RP(j3n,0),Zpt=new RP("LONGEST_PATH",1),Ypt=new RP("COFFMAN_GRAHAM",2),Jpt=new RP(B1n,3),evt=new RP("STRETCH_WIDTH",4),nvt=new RP("MIN_WIDTH",5)}function MTn(n){var t;this.d=new xp,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new sG(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new YK(t=BB(Vj(aAt),9),BB(SR(t,t.length),9),0)}function STn(n,t){var e,i,r,c;!(r=D2(i=n,"layoutOptions"))&&(r=D2(i,M6n)),r&&(e=null,(c=r)&&(e=new TT(c,jrn(c,x8(Qtt,sVn,2,0,6,1)))),e&&e5(e,new wI(c,t)))}function PTn(n){if(cL(n,239))return BB(n,33);if(cL(n,186))return WJ(BB(n,118));throw Hp(n?new tk("Only support nodes and ports."):new Hy(e8n))}function CTn(n,t,e,i){return t>=0&&mK(n.substr(t,3),"GMT")||t>=0&&mK(n.substr(t,3),"UTC")?(e[0]=t+3,y_n(n,e,i)):y_n(n,e,i)}function ITn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)(r=(e=BB(n0(i),70)).n).a=c,n.i==(kUn(),sIt)?r.b=a+n.j.b-e.o.b:r.b=a,UR(r,t),c+=e.o.a+n.e}function OTn(n,t,e){if(n.b)throw Hp(new Fy("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=($T(),cbn(fan(Date.now()),VVn))),!0)}function ATn(n){var t;return t=new py,null!=n.tg()&&AH(t,q6n,n.tg()),null!=n.ne()&&AH(t,t8n,n.ne()),null!=n.sg()&&AH(t,"description",n.sg()),t}function $Tn(n,t,e){var i,r,c;return c=n.q,n.q=t,0!=(4&n.Db)&&0==(1&n.Db)&&(r=new nU(n,1,9,c,t),e?e.Ei(r):e=r),t?(i=t.c)!=n.r&&(e=n.nk(i,e)):n.r&&(e=n.nk(null,e)),e}function LTn(n,t,e){var i,r;for(e=Npn(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function NTn(n,t,e){var i,r;for(e=oJ(t,n.e,-1-n.c,e),r=new Mp(new usn(new Pb(xW(n.a).a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,n.a),e);return e}function xTn(n,t,e,i){var r,c,a;if(0==i)aHn(t,0,n,e,n.length-e);else for(a=32-i,n[n.length-1]=0,c=n.length-1;c>e;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<<i;for(r=0;r<e;r++)n[r]=0}function DTn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.b=t,r.d.c=i}function RTn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=BB(a.Pb(),111),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=BB(c.Pb(),111)).d.d=i,r.d.a=t}function KTn(n,t){var e,i,r,c;for(c=new Np,r=0,i=t.Kc();i.Ob();){for(e=iln(BB(i.Pb(),19).a+r);e.a<n.f&&!tG(n,e.a);)e=iln(e.a+1),++r;if(e.a>=n.f)break;c.c[c.c.length]=e}return c}function _Tn(n){var t,e,i,r;for(t=null,r=new Wb(n.wf());r.a<r.c.c.length;)e=new UV((i=BB(n0(r),181)).qf().a,i.qf().b,i.rf().a,i.rf().b),t?CPn(t,e):t=e;return!t&&(t=new bA),t}function FTn(n,t,e,i){return 1==e?(!n.n&&(n.n=new eU(zOt,n,1,7)),Ywn(n.n,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Qj(n,fgn(n),e-bX(n.zh()),t,i)}function BTn(n,t,e){var i,r,c,a,u;for(i=e.gc(),n.qi(n.i+i),(u=n.i-t)>0&&aHn(n.g,t,n.g,t+i,u),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),jL(n,t,n.oi(t,c)),n.bi(t,c),n.ci(),++t;return 0!=i}function HTn(n,t,e){var i;return t!=n.q?(n.q&&(e=oJ(n.q,n,-10,e)),t&&(e=Npn(t,n,-10,e)),e=$Tn(n,t,e)):0!=(4&n.Db)&&0==(1&n.Db)&&(i=new nU(n,1,9,t,t),e?e.Ei(i):e=i),e}function qTn(n,t,e,i){return C_(0==(e&hVn),"flatMap does not support SUBSIZED characteristic"),C_(0==(4&e),"flatMap does not support SORTED characteristic"),yX(n),yX(t),new q2(n,e,i,t)}function GTn(n,t){SU(t,"Cannot suppress a null exception."),vH(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Pun(Gk(Jnt,1),sVn,78,0,[t]):n.k[n.k.length]=t)}function zTn(n,t,e,i){var r,c,a,u,o,s;for(a=e.length,c=0,r=-1,s=atn(n.substr(t),(c_(),Tet)),u=0;u<a;++u)(o=e[u].length)>c&&sU(s,atn(e[u],Tet))&&(r=u,c=o);return r>=0&&(i[0]=t+c),r}function UTn(n,t){var e;if(0!=(e=YO(n.b.Hf(),t.b.Hf())))return e;switch(n.b.Hf().g){case 1:case 2:return E$(n.b.sf(),t.b.sf());case 3:case 4:return E$(t.b.sf(),n.b.sf())}return 0}function XTn(n){var t,e,i;for(i=n.e.c.length,n.a=kq(ANt,[sVn,hQn],[48,25],15,[i,i],2),e=new Wb(n.c);e.a<e.c.c.length;)t=BB(n0(e),282),n.a[t.c.b][t.d.b]+=BB(mMn(t,(fRn(),Zct)),19).a}function WTn(n,t,e){OTn(e,"Grow Tree",1),n.b=t.f,qy(TD(mMn(t,(Xcn(),Qrt))))?(n.c=new it,QZ(n,null)):n.c=new it,n.a=!1,FNn(n,t.f),hon(t,Yrt,(hN(),!!n.a)),HSn(e)}function VTn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=x8(ONt,WVn,25,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=OOt[e],a[r++]=OOt[c];return Bdn(a,0,a.length)}function QTn(n,t,e){var i,r,c;return i=t.ak(),c=t.dd(),r=i.$j()?LY(n,4,i,c,null,pBn(n,i,c,cL(i,99)&&0!=(BB(i,18).Bb&BQn)),!0):LY(n,i.Kj()?2:1,i,c,i.zj(),-1,!0),e?e.Ei(r):e=r,e}function YTn(n){var t,e;return n>=BQn?(t=HQn+(n-BQn>>10&1023)&QVn,e=56320+(n-BQn&1023)&QVn,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&QVn)}function JTn(n,t){var e,i,r,c;return qD(),(r=BB(BB(h6(n.r,t),21),84)).gc()>=2&&(i=BB(r.Kc().Pb(),111),e=n.u.Hc((lIn(),tIt)),c=n.u.Hc(cIt),!i.a&&!e&&(2==r.gc()||c))}function ZTn(n,t,e,i,r){var c,a,u;for(c=eDn(n,t,e,i,r),u=!1;!c;)E$n(n,r,!0),u=!0,c=eDn(n,t,e,i,r);u&&E$n(n,r,!1),0!=(a=Dun(r)).c.length&&(n.d&&n.d.lg(a),ZTn(n,r,e,i,a))}function nMn(){nMn=O,aCt=new BC(QZn,0),rCt=new BC("DIRECTED",1),uCt=new BC("UNDIRECTED",2),eCt=new BC("ASSOCIATION",3),cCt=new BC("GENERALIZATION",4),iCt=new BC("DEPENDENCY",5)}function tMn(n,t){var e;if(!WJ(n))throw Hp(new Fy(F5n));switch(e=WJ(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 eMn(n,t){var e,i;for(kW(t),i=n.b.c.length,WB(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.ue(xq(n.b,i),t)<=0)return c5(n.b,e,t),!0;c5(n.b,e,xq(n.b,i))}return c5(n.b,i,t),!0}function iMn(n,t,i,r){var c,a;if(c=0,i)c=mhn(n.a[i.g][t.g],r);else for(a=0;a<nrt;a++)c=e.Math.max(c,mhn(n.a[a][t.g],r));return t==(Dtn(),zit)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function rMn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(kUn(),oIt)&&i.i!=(kUn(),CIt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function cMn(n,t,e,i){var r;if(r=!1,XI(i)&&(r=!0,AH(t,e,SD(i))),r||zI(i)&&(r=!0,cMn(n,t,e,i)),r||cL(i,236)&&(r=!0,qQ(t,e,BB(i,236))),!r)throw Hp(new Ly(H6n))}function aMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(IPn(),Y$t).length;++i)if(mK(Y$t[i],r))return i;return 0}function uMn(n,t){var e,i,r;if((e=t.Hh(n.a))&&null!=(r=cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),F9n)))for(i=1;i<(IPn(),J$t).length;++i)if(mK(J$t[i],r))return i;return 0}function oMn(n,t){var e,i,r,c;if(kW(t),(c=n.a.gc())<t.gc())for(e=n.a.ec().Kc();e.Ob();)i=e.Pb(),t.Hc(i)&&e.Qb();else for(r=t.Kc();r.Ob();)i=r.Pb(),n.a.Bc(i);return c!=n.a.gc()}function sMn(n){var t,e;switch(e=B$(Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a]))),t=n.i.d,n.j.g){case 1:e.b-=t.d;break;case 2:e.a+=t.c;break;case 3:e.b+=t.a;break;case 4:e.a-=t.b}return e}function hMn(n){var t;for(Irn(),t=BB(U5(new oz(ZL(fbn(n).a.Kc(),new h))),17).c.i;t.k==(uSn(),Put);)hon(t,(hWn(),olt),(hN(),!0)),t=BB(U5(new oz(ZL(fbn(t).a.Kc(),new h))),17).c.i}function fMn(n,t,e,i){var r,c,a;for(a=Lfn(t,i).Kc();a.Ob();)r=BB(a.Pb(),11),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Lfn(e,i).Kc();c.Ob();)r=BB(c.Pb(),11),n.d[r.p]=n.d[r.p]-n.c[t.p]}function lMn(n,t,e){var i,r;for(r=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));r.e!=r.i.gc();)SA(i=BB(kpn(r),33),i.i+t,i.j+e);e5((!n.b&&(n.b=new eU(_Ot,n,12,3)),n.b),new tI(t,e))}function bMn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.ue(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.ue(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 wMn(n){return lIn(),!(Can(OJ(EG(eIt,Pun(Gk(IIt,1),$Vn,273,0,[rIt])),n))>1||Can(OJ(EG(tIt,Pun(Gk(IIt,1),$Vn,273,0,[nIt,cIt])),n))>1)}function dMn(n,t){cL(SJ((WM(),zAt),n),498)?mZ(zAt,n,new OI(this,t)):mZ(zAt,n,this),iSn(this,t),t==(iE(),n$t)?(this.wb=BB(this,1939),BB(t,1941)):this.wb=(QX(),t$t)}function gMn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<IOt.length;++e)try{return BM(IOt[e],n)}catch(i){if(!cL(i=lun(i),32))throw Hp(i);t=i}throw Hp(new L7(t))}function pMn(){pMn=O,pet=Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),vet=Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function vMn(n){var t,e,i;(t=mK(typeof t,gYn)?null:new ln)&&(lM(),tW(e=(i=900)>=VVn?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&xNn(t,e,n.b,"Exception: ",!0))}function mMn(n,t){var e,i;return!n.q&&(n.q=new xp),null!=(i=RX(n.q,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.q&&(n.q=new xp),v6(n.q,t)):(!n.q&&(n.q=new xp),VW(n.q,t,e))),e)}function yMn(){yMn=O,Rat=new VS("P1_CYCLE_BREAKING",0),Kat=new VS("P2_LAYERING",1),_at=new VS("P3_NODE_ORDERING",2),Fat=new VS("P4_NODE_PLACEMENT",3),Bat=new VS("P5_EDGE_ROUTING",4)}function kMn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),y7(n.b.b,r.b),y7(n.b.a,BB(r.b,81).d)}function jMn(n,t){var e;if(Dnn(),n.c==t.c){if(n.b==t.b||hcn(n.b,t.b)){if(e=ZO(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return E$(n.b.g,t.b.g)}return Pln(n.c,t.c)}function EMn(n,t){var e;OTn(t,"Hierarchical port position processing",1),(e=n.b).c.length>0&&i_n((l1(0,e.c.length),BB(e.c[0],29)),n),e.c.length>1&&i_n(BB(xq(e,e.c.length-1),29),n),HSn(t)}function TMn(n,t){var e,i;if(NMn(n,t))return!0;for(i=new Wb(t);i.a<i.c.c.length;){if(_Dn(n,e=BB(n0(i),33),uEn(e)))return!0;if($hn(n,e)-n.g<=n.a)return!0}return!1}function MMn(){MMn=O,bRn(),kTt=RTt,vTt=LTt,pTt=ATt,dTt=PTt,gTt=ITt,wTt=new WA(8),bTt=new XA((sWn(),XSt),wTt),mTt=new XA(LPt,8),yTt=xTt,hTt=jTt,fTt=TTt,lTt=new XA(lSt,(hN(),!1))}function SMn(){SMn=O,zMt=new WA(15),GMt=new XA((sWn(),XSt),zMt),XMt=new XA(LPt,15),UMt=new XA(pPt,iln(0)),_Mt=jSt,BMt=KSt,qMt=qSt,DMt=new XA(cSt,f5n),FMt=CSt,HMt=BSt,RMt=uSt,KMt=hSt}function PMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function CMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))}function IMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function OMn(n){if(1!=(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new _y(r8n));return PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))}function AMn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Vi())||t<0)throw Hp(new Ay(u8n+t+o8n+r));if(e>=r||e<0)throw Hp(new Ay(s8n+e+o8n+r));return t!=e?(c=n.Ti(e),n.Hi(t,c),i=c):i=n.Oi(e),i}function $Mn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Ug();e;e=e.Ug()){if(++t>GQn)return $Mn(e);if(i=e,e==n)throw Hp(new Fy("There is a cycle in the containment hierarchy of "+n))}return i}function LMn(n){var t,e,i;for(i=new $an(FWn,"[","]"),e=n.Kc();e.Ob();)b6(i,GI(t=e.Pb())===GI(n)?"(this Collection)":null==t?zWn:Bbn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function NMn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e<t.gc();e++)e<t.gc()-1?i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(e+1),33)):i|=_Dn(n,BB(t.Xb(e),33),BB(t.Xb(0),33));return i}function xMn(n,t){var e;t!=n.a?(e=null,n.a&&(e=BB(n.a,49).ih(n,4,GOt,e)),t&&(e=BB(t,49).gh(n,4,GOt,e)),(e=Jhn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,1,t,t))}function DMn(n,t){var e;t!=n.e?(n.e&&_6(xW(n.e),n),t&&(!t.b&&(t.b=new Tp(new xm)),YR(t.b,n)),(e=Qkn(n,t,null))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function RMn(n){var t,e,i;for(e=n.length,i=0;i<e&&(b1(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(b1(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?n.substr(i,t-i):n}function KMn(n,t){var i;i=t.o,dA(n.f)?(n.j.a=e.Math.max(n.j.a,i.a),n.j.b+=i.b,n.d.c.length>1&&(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 _Mn(){_Mn=O,$st=Pun(Gk(FIt,1),YZn,61,0,[(kUn(),sIt),oIt,SIt]),Ast=Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt,CIt]),Lst=Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt,sIt]),Nst=Pun(Gk(FIt,1),YZn,61,0,[CIt,sIt,oIt])}function FMn(n,t,e,i){var r,c,a,u,o;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(o=n.b,r=c.j,u=null;r!=a.j;)u=0==t?Mln(r):Eln(r),DH(i,UR(zgn(r,o.d[r.g],e),zgn(u,o.d[u.g],e))),r=u}function BMn(n,t,e,i){var r,c,a,u,o;return u=BB((a=qyn(n.a,t,e)).a,19).a,c=BB(a.b,19).a,i&&(o=BB(mMn(t,(hWn(),Elt)),10),r=BB(mMn(e,Elt),10),o&&r&&(t4(n.b,o,r),u+=n.b.i,c+=n.b.e)),u>c}function HMn(n){var t,e,i,r,c,a,u,o;for(this.a=rvn(n),this.b=new Np,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Np,WB(this.b,c),u=0,o=(a=t).length;u<o;++u)WB(c,new t_(a[u].j))}function qMn(n,t,e){var i,r,c;return c=0,i=e[t],t<e.length-1&&(r=e[t+1],n.b[t]?(c=bWn(n.d,i,r),c+=ZX(n.a,i,(kUn(),oIt)),c+=ZX(n.a,r,CIt)):c=I9(n.a,i,r)),n.c[t]&&(c+=L6(n.a,i)),c}function GMn(n,t,e,i,r){var c,a,u,o;for(o=null,u=new Wb(i);u.a<u.c.c.length;)if((a=BB(n0(u),441))!=e&&-1!=E7(a.e,r,0)){o=a;break}SZ(c=W5(r),e.b),MZ(c,o.b),JIn(n.a,r,new L_(c,t,e.f))}function zMn(n){for(;0!=n.g.c&&0!=n.d.c;)FD(n.g).c>FD(n.d).c?(n.i+=n.g.c,gdn(n.d)):FD(n.d).c>FD(n.g).c?(n.e+=n.d.c,gdn(n.g)):(n.i+=qq(n.g),n.e+=qq(n.d),gdn(n.g),gdn(n.d))}function UMn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new zZ((O6(),Tyt),t,c,1),new zZ(Tyt,c,a,1),r=new Wb(e);r.a<r.c.c.length;)(i=BB(n0(r),112))!=c&&i!=t&&i!=a&&(gHn(n.a,i,t),gHn(n.a,i,a))}function XMn(n,t,i,r){n.a.d=e.Math.min(t,i),n.a.a=e.Math.max(t,r)-n.a.d,t<i?(n.b=.5*(t+i),n.g=K3n*n.b+.9*t,n.f=K3n*n.b+.9*i):(n.b=.5*(t+r),n.g=K3n*n.b+.9*r,n.f=K3n*n.b+.9*t)}function WMn(){function n(){return(new Date).getTime()}SWn={},!Array.isArray&&(Array.isArray=function(n){return"[object Array]"===Object.prototype.toString.call(n)}),!Date.now&&(Date.now=n)}function VMn(n,t){var e,i;i=BB(mMn(t,(HXn(),ept)),98),hon(t,(hWn(),ylt),i),(e=t.e)&&(JT(new Rq(null,new w1(e.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(e.b,16)),new mt),new Kw(n)))}function QMn(n){var t,i,r,c;if(gA(BB(mMn(n.b,(HXn(),Udt)),103)))return 0;for(t=0,r=new Wb(n.a);r.a<r.c.c.length;)(i=BB(n0(r),10)).k==(uSn(),Cut)&&(c=i.o.a,t=e.Math.max(t,c));return t}function YMn(n){switch(BB(mMn(n,(HXn(),kgt)),163).g){case 1:hon(n,kgt,(Tbn(),Blt));break;case 2:hon(n,kgt,(Tbn(),Hlt));break;case 3:hon(n,kgt,(Tbn(),_lt));break;case 4:hon(n,kgt,(Tbn(),Flt))}}function JMn(){JMn=O,cft=new $P(QZn,0),eft=new $P(cJn,1),aft=new $P(aJn,2),rft=new $P("LEFT_RIGHT_CONSTRAINT_LOCKING",3),ift=new $P("LEFT_RIGHT_CONNECTION_LOCKING",4),tft=new $P(q1n,5)}function ZMn(n,t,i){var r,c,a,u,o,s,h;o=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>o&&(s=o/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),u=e.Math.min(s,h),n.a+=u*(t.a-n.a),n.b+=u*(t.b-n.b)}function nSn(n,t,e,i,r){var c,a;for(a=!1,c=BB(xq(e.b,0),33);hBn(n,t,c,i,r)&&(a=!0,cEn(e,c),0!=e.b.c.length);)c=BB(xq(e.b,0),33);return 0==e.b.c.length&&Tkn(e.j,e),a&&Gmn(t.q),a}function tSn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(cNn(n,i,r=BB(b3(c),8)))return!0;i=r}return!!cNn(n,i,e)}function eSn(n,t,e,i){return 0==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),BK(n.o,t,i)):BB(itn(BB(yan(n,16),26)||n.zh(),e),66).Nj().Rj(n,fgn(n),e-bX(n.zh()),t,i)}function iSn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=BB(n.sb,49).ih(n,1,HOt,e)),t&&(e=BB(t,49).gh(n,1,HOt,e)),(e=jfn(n,t,e))&&e.Fi()):0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,4,t,t))}function rSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need an end point."));e=Ren(t,"x"),Ten(new Kg(n).a,(kW(e),e)),i=Ren(t,"y"),Oen(new _g(n).a,(kW(i),i))}function cSn(n,t){var e,i;if(!t)throw Hp(new ek("All edge sections need a start point."));e=Ren(t,"x"),Ien(new xg(n).a,(kW(e),e)),i=Ren(t,"y"),Aen(new Dg(n).a,(kW(i),i))}function aSn(n,t){var e,i,r,c,a;for(i=0,c=psn(n).length;i<c;++i)vMn(t);for(a=!Qet&&n.e?Qet?null:n.d:null;a;){for(e=0,r=psn(a).length;e<r;++e)vMn(t);a=!Qet&&a.e?Qet?null:a.d:null}}function uSn(){uSn=O,Cut=new JS("NORMAL",0),Put=new JS("LONG_EDGE",1),Mut=new JS("EXTERNAL_PORT",2),Iut=new JS("NORTH_SOUTH_PORT",3),Sut=new JS("LABEL",4),Tut=new JS("BREAKING_POINT",5)}function oSn(n){var t,e,i,r;if(t=!1,Lx(n,(hWn(),zft)))for(e=BB(mMn(n,zft),83),r=new Wb(n.j);r.a<r.c.c.length;)J$n(i=BB(n0(r),11))&&(t||(iIn(vW(n)),t=!0),fpn(BB(e.xc(i),306)))}function sSn(n,t,e){var i;OTn(e,"Self-Loop routing",1),i=Vln(t),iO(mMn(t,(C6(),TMt))),JT($V(AV(AV(wnn(new Rq(null,new w1(t.b,16)),new zi),new Ui),new Xi),new Wi),new eP(n,i)),HSn(e)}function hSn(n){var t,e,i;return i=ATn(n),null!=n.e&&AH(i,n8n,n.e),!!n.k&&AH(i,"type",dx(n.k)),!WE(n.j)&&(e=new Cl,rtn(i,N6n,e),t=new cp(e),e5(n.j,t)),i}function fSn(n){var t,e,i,r;for(r=xX((lin(n.gc(),"size"),new Ik),123),i=!0,e=lz(n).Kc();e.Ob();)t=BB(e.Pb(),42),i||(r.a+=FWn),i=!1,uO(xX(uO(r,t.cd()),61),t.dd());return(r.a+="}",r).a}function lSn(n,t){var e,i,r;return(t&=63)<22?(e=n.l<<t,i=n.m<<t|n.l>>22-t,r=n.h<<t|n.m>>22-t):t<44?(e=0,i=n.l<<t-22,r=n.m<<t-22|n.l>>44-t):(e=0,i=0,r=n.l<<t-44),M$(e&SQn,i&SQn,r&PQn)}function bSn(n){if(null==ytt&&(ytt=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!ytt.test(n))throw Hp(new Mk(DQn+n+'"'));return parseFloat(n)}function wSn(n){var t,e,i,r;for(t=new Np,vU(e=x8($Nt,ZYn,25,n.a.c.length,16,1),e.length),r=new Wb(n.a);r.a<r.c.c.length;)e[(i=BB(n0(r),121)).d]||(t.c[t.c.length]=i,Ggn(n,i,e));return t}function dSn(n,t){var e,i,r,c;for(c=t.b.j,n.a=x8(ANt,hQn,25,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)l1(i,c.c.length),0==(e=BB(c.c[i],11)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function gSn(){gSn=O,Dht=new IP("ALWAYS_UP",0),xht=new IP("ALWAYS_DOWN",1),Kht=new IP("DIRECTION_UP",2),Rht=new IP("DIRECTION_DOWN",3),Fht=new IP("SMART_UP",4),_ht=new IP("SMART_DOWN",5)}function pSn(n,t){if(n<0||t<0)throw Hp(new _y("k and n must be positive"));if(t>n)throw Hp(new _y("k must be smaller than n"));return 0==t||t==n?1:0==n?0:Mjn(n)/(Mjn(t)*Mjn(n-t))}function vSn(n,t){var e,i,r,c;for(e=new OA(n);null!=e.g||e.c?null==e.g||0!=e.i&&BB(e.g[e.i-1],47).Ob():tZ(e);)if(cL(c=BB(aLn(e),56),160))for(i=BB(c,160),r=0;r<t.length;r++)t[r].og(i)}function mSn(n){var t;return 0!=(64&n.Db)?Yln(n):((t=new fN(Yln(n))).a+=" (height: ",vE(t,n.f),t.a+=", width: ",vE(t,n.g),t.a+=", x: ",vE(t,n.i),t.a+=", y: ",vE(t,n.j),t.a+=")",t.a)}function ySn(n){var t,e,i,r,c,a;for(t=new v4,r=0,c=(i=n).length;r<c;++r)if(null!=Jgn(t,a=yX((e=i[r]).cd()),yX(e.dd())))throw Hp(new _y("duplicate key: "+a));this.b=(SQ(),new Xb(t))}function kSn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],b6(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function jSn(){jSn=O,Knn(),Ict=new $O(oZn,Oct=Rct),iln(1),Cct=new $O(sZn,iln(300)),iln(0),Lct=new $O(hZn,iln(0)),new $p,Nct=new $O(fZn,lZn),new $p,Act=new $O(bZn,5),xct=Rct,$ct=Dct}function ESn(n,t){var e,i,r,c;for(i=(1==t?Wat:Xat).a.ec().Kc();i.Ob();)for(e=BB(i.Pb(),103),c=BB(h6(n.f.c,e),21).Kc();c.Ob();)r=BB(c.Pb(),46),WB(n.b.b,BB(r.b,81)),WB(n.b.a,BB(r.b,81).d)}function TSn(n,t){var e;if(null!=t&&!n.c.Yj().wj(t))throw e=cL(t,56)?BB(t,56).Tg().zb:nE(tsn(t)),Hp(new Ky(r6n+n.c.ne()+"'s type '"+n.c.Yj().ne()+"' does not permit a value of type '"+e+"'"))}function MSn(n,t,e){var i,r;for(r=new M2(n.b,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),GI(mMn(i=BB(r.d.Xb(r.c=r.b++),70),(hWn(),vlt)))===GI(t)&&(OPn(i.n,vW(n.c.i),e),fW(r),WB(t.b,i))}function SSn(n,t){if(t.a)switch(BB(mMn(t.b,(hWn(),ylt)),98).g){case 0:case 1:lEn(t);case 2:JT(new Rq(null,new w1(t.d,16)),new Li),oAn(n.a,t)}else JT(new Rq(null,new w1(t.d,16)),new Li)}function PSn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=Wrn(n,new Ec)),Gy(n.k)/(n.b*(null==n.g&&(n.g=Xrn(n,new jc)),Gy(n.g))))),t=dG(fan(e.Math.round(i))),t=e.Math.min(t,n.f)}function CSn(){gcn(),LR.call(this),this.j=(kUn(),PIt),this.a=new Gj,new fm,this.f=(lin(2,AVn),new J6(2)),this.e=(lin(4,AVn),new J6(4)),this.g=(lin(4,AVn),new J6(4)),this.b=new hP(this.e,this.g)}function ISn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Clt))))&&(e=t.c.i,(n!=(Tbn(),_lt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Flt)}function OSn(n,t){var e;return!qy(TD(mMn(t,(hWn(),Clt))))&&(e=t.d.i,(n!=(Tbn(),Blt)||e.k!=(uSn(),Sut))&&BB(mMn(e,(HXn(),kgt)),163)!=Hlt)}function ASn(n,t){var e,i,r,c,a,u,o;for(a=n.d,o=n.o,u=new UV(-a.b,-a.d,a.b+o.a+a.c,a.d+o.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&CPn(u,e.i);a.b=-u.c,a.d=-u.d,a.c=u.b-a.b-o.a,a.a=u.a-a.d-o.b}function $Sn(){$Sn=O,iTt=new MC("CENTER_DISTANCE",0),rTt=new MC("CIRCLE_UNDERLAP",1),uTt=new MC("RECTANGLE_UNDERLAP",2),cTt=new MC("INVERTED_OVERLAP",3),aTt=new MC("MINIMUM_ROOT_DISTANCE",4)}function LSn(n){var t,e,i,r;if(KDn(),null==n)return null;for(i=n.length,t=x8(ONt,WVn,25,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=YLt[r>>4],t[2*e+1]=YLt[15&r];return Bdn(t,0,t.length)}function NSn(n){var t;switch(nV(),n.c.length){case 0:return Bnt;case 1:return IH((t=BB(JCn(new Wb(n)),42)).cd(),t.dd());default:return new hy(BB(Qgn(n,x8(Hnt,kVn,42,n.c.length,0,1)),165))}}function xSn(n){var t,e,i,r,c;for(t=new Lp,e=new Lp,d3(t,n),d3(e,n);e.b!=e.c;)for(c=new Wb(BB(dU(e),37).a);c.a<c.c.c.length;)(r=BB(n0(c),10)).e&&(d3(t,i=r.e),d3(e,i));return t}function DSn(n,t){switch(t.g){case 1:return KB(n.j,(gcn(),xut));case 2:return KB(n.j,(gcn(),Lut));case 3:return KB(n.j,(gcn(),Rut));case 4:return KB(n.j,(gcn(),Kut));default:return SQ(),SQ(),set}}function RSn(n,t){var e,i,r;e=sH(t,n.e),i=BB(RX(n.g.f,e),19).a,r=n.a.c.length-1,0!=n.a.c.length&&BB(xq(n.a,r),287).c==i?(++BB(xq(n.a,r),287).a,++BB(xq(n.a,r),287).b):WB(n.a,new Gx(i))}function KSn(n,t,e){var i,r;return 0!=(i=SRn(n,t,e))?i:Lx(t,(hWn(),wlt))&&Lx(e,wlt)?((r=E$(BB(mMn(t,wlt),19).a,BB(mMn(e,wlt),19).a))<0?uKn(n,t,e):r>0&&uKn(n,e,t),r):IOn(n,t,e)}function _Sn(n,t,e){var i,r,c,a;if(0!=t.b){for(i=new YT,a=spn(t,0);a.b!=a.d.c;)Frn(i,xun(c=BB(b3(a),86))),(r=c.e).a=BB(mMn(c,(qqn(),gkt)),19).a,r.b=BB(mMn(c,pkt),19).a;_Sn(n,i,mcn(e,i.b/n.a|0))}}function FSn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(z1(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+1<c;)(e=cHn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function BSn(n,t,e){OTn(e,"Recursive Graph Layout",hDn(n,t,!0)),vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new $f])),P8(t,(sWn(),mPt))||vSn(t,Pun(Gk(nMt,1),HWn,527,0,[new gu])),lXn(n,t,null,e),HSn(e)}function HSn(n){var t;if(null==n.p)throw Hp(new Fy("The task has not begun yet."));n.b||(n.k&&($T(),t=cbn(fan(Date.now()),VVn),n.q=1e-9*j2(ibn(t,n.o))),n.c<n.r&&qin(n,n.r-n.c),n.b=!0)}function qSn(n){var t,e,i;for(DH(i=new km,new xC(n.j,n.k)),e=new AL((!n.a&&(n.a=new $L(xOt,n,5)),n.a));e.e!=e.i.gc();)DH(i,new xC((t=BB(kpn(e),469)).a,t.b));return DH(i,new xC(n.b,n.c)),i}function GSn(n,t,e,i,r){var c,a,u,o;if(r)for(o=((c=new hz(r.a.length)).b-c.a)*c.c<0?(eS(),MNt):new XL(c);o.Ob();)u=x2(r,BB(o.Pb(),19).a),D_n((a=new hQ(n,t,e,i)).a,a.b,a.c,a.d,u)}function zSn(n,t){var e;if(GI(n)===GI(t))return!0;if(cL(t,21)){e=BB(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(cL(i=lun(i),173)||cL(i,205))return!1;throw Hp(i)}}return!1}function USn(n,t){var i;WB(n.d,t),i=t.rf(),n.c?(n.e.a=e.Math.max(n.e.a,i.a),n.e.b+=i.b,n.d.c.length>1&&(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 XSn(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 WSn(n,t,e,i,r){if(i<t||r<e)throw Hp(new _y("The highx must be bigger then lowx and the highy must be bigger then lowy"));return n.a<t?n.a=t:n.a>i&&(n.a=i),n.b<e?n.b=e:n.b>r&&(n.b=r),n}function VSn(n){if(cL(n,149))return MNn(BB(n,149));if(cL(n,229))return Zbn(BB(n,229));if(cL(n,23))return hSn(BB(n,23));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[n])))))}function QSn(n,t,e,i,r){var c,a,u;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)aHn(e,i,n,0,t),a=t;else{for(u=32-r,c&=e[a]<<u==0,a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<u;n[a]=e[a+i]>>>r,++a}return c}function YSn(n,t,e,i){var r,c;if(t.k==(uSn(),Put))for(c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if((r=BB(U5(c),17)).c.i.k==Put&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function JSn(n,t){var e,i,r,c;return t&=63,e=n.h&PQn,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),M$(i&SQn,r&SQn,c&PQn)}function ZSn(n,t,e,i){var r;this.b=i,this.e=n==(oin(),Amt),r=t[e],this.d=kq($Nt,[sVn,ZYn],[177,25],16,[r.length,r.length],2),this.a=kq(ANt,[sVn,hQn],[48,25],15,[r.length,r.length],2),this.c=new zEn(t,e)}function nPn(n){var t,e,i;for(n.k=new o1((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,n.j.c.length),i=new Wb(n.j);i.a<i.c.c.length;)t=(e=BB(n0(i),113)).d.j,JIn(n.k,t,e);n.e=iNn(gz(n.k))}function tPn(n,t){var e,i,r;TU(n.d,t),e=new ka,VW(n.c,t,e),e.f=Phn(t.c),e.a=Phn(t.d),e.d=(gxn(),(r=t.c.i.k)==(uSn(),Cut)||r==Tut),e.e=(i=t.d.i.k)==Cut||i==Tut,e.b=t.c.j==(kUn(),CIt),e.c=t.d.j==oIt}function ePn(n){var t,e,i,r,c;for(c=DWn,r=DWn,i=new Wb(kbn(n));i.a<i.c.c.length;)t=(e=BB(n0(i),213)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==DWn&&(r=-1),c==DWn&&(c=-1),new rI(iln(r),iln(c))}function iPn(n,t){var i,r,c;return c=ZJn,qpn(),r=Zrt,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=nct),(i=e.Math.abs(n.a))<c&&(c=i,r=tct),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Jrt),r}function rPn(n,t){var e,i,r;for(e=t.a.o.a,r=new Sb(new s1(vW(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(Px(r.b<r.d.gc()),(i=BB(r.d.Xb(r.c=r.b++),29)).c.a>=e)return hPn(n,t,i.p),!0;return!1}function cPn(n){var t;return 0!=(64&n.Db)?mSn(n):(t=new lN(Z5n),!n.a||oO(oO((t.a+=' "',t),n.a),'"'),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function aPn(n,t,e){var i,r,c,a,u;for(u=axn(n.e.Tg(),t),r=BB(n.g,119),i=0,a=0;a<n.i;++a)if(c=r[a],u.rl(c.ak())){if(i==e)return fDn(n,a),ZM(),BB(t,66).Oj()?c:c.dd();++i}throw Hp(new Ay(e9n+e+o8n+i))}function uPn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return wWn(),wWn(),sNt;for(i=OXn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(wWn(),wWn(),tqn(e=new r$(1),i),i=e),tqn(e,OXn(n));return i}function oPn(n,t,e){return n<0||n>e?dCn(n,e,"start index"):t<0||t>e?dCn(t,e,"end index"):$Rn("end index (%s) must not be less than start index (%s)",Pun(Gk(Ant,1),HWn,1,5,[iln(t),iln(n)]))}function sPn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].jm()&&(t=TG(t,c)):c[0].jm()}catch(a){if(!cL(a=lun(a),78))throw Hp(a);e=a,Dk(),yY(cL(e,477)?BB(e,477).ae():e)}}return t}function hPn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&wHn(t.a,ian(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=BB(mMn(t.a,(hWn(),Plt)),15).Kc();r.Ob();)hon(BB(r.Pb(),70),tst,(hN(),!0))}function fPn(n,t){var i,r,c;c=qNn(t),hon(t,(hWn(),llt),c),c&&(r=DWn,AY(n.f,c)&&(r=BB(qI(AY(n.f,c)),19).a),qy(TD(mMn(i=BB(xq(t.g,0),17),Clt)))||VW(n,c,iln(e.Math.min(BB(mMn(i,wlt),19).a,r))))}function lPn(n,t,e){var i,r,c,a;for(t.p=-1,a=xwn(t,(ain(),qvt)).Kc();a.Ob();)for(r=new Wb(BB(a.Pb(),11).g);r.a<r.c.c.length;)t!=(c=(i=BB(n0(r),17)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&lPn(n,c,e));t.p=0}function bPn(n){var t;this.c=new YT,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 YK(t=BB(Vj(jMt),9),BB(SR(t,t.length),9),0),this.g=n.f}function wPn(n){var t,e,i,r;for(t=xX(oO(new lN("Predicates."),"and"),40),e=!0,r=new Sb(n);r.b<r.d.gc();)Px(r.b<r.d.gc()),i=r.d.Xb(r.c=r.b++),e||(t.a+=","),t.a+=""+i,e=!1;return(t.a+=")",t).a}function dPn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)l1(t+i,n.c.length),c=BB(n.c[t+i],11),c5(n,t+i,(l1(e-i-1,n.c.length),BB(n.c[e-i-1],11))),l1(e-i-1,n.c.length),n.c[e-i-1]=c}function gPn(n,t,e){var i,r,c,a,u,o,s;u=(c=n.d.p).e,o=c.r,n.g=new QK(o),i=(a=n.d.o.c.p)>0?u[a-1]:x8(Out,a1n,10,0,0,1),r=u[a],s=a<u.length-1?u[a+1]:x8(Out,a1n,10,0,0,1),t==e-1?uZ(n.g,r,s):uZ(n.g,i,r)}function pPn(n){var t;this.j=new Np,this.f=new Rv,this.b=new YK(t=BB(Vj(FIt),9),BB(SR(t,t.length),9),0),this.d=x8(ANt,hQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.g=n}function vPn(n,t){var e,i,r;if(0!=t.c.length){for(e=TMn(n,t),r=!1;!e;)E$n(n,t,!0),r=!0,e=TMn(n,t);r&&E$n(n,t,!1),i=Dun(t),n.b&&n.b.lg(i),n.a=$hn(n,(l1(0,t.c.length),BB(t.c[0],33))),vPn(n,i)}}function mPn(n,t){var e,i,r;if(i=itn(n.Tg(),t),(e=t-n.Ah())<0){if(!i)throw Hp(new _y(o6n+t+s6n));if(!i.Ij())throw Hp(new _y(r6n+i.ne()+c6n));(r=n.Yg(i))>=0?n.Bh(r):cIn(n,i)}else qfn(n,e,i)}function yPn(n){var t,e;if(e=null,t=!1,cL(n,204)&&(t=!0,e=BB(n,204).a),t||cL(n,258)&&(t=!0,e=""+BB(n,258).a),t||cL(n,483)&&(t=!0,e=""+BB(n,483).a),!t)throw Hp(new Ly(H6n));return e}function kPn(n,t){var e,i;if(n.f){for(;t.Ob();)if(cL(i=(e=BB(t.Pb(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Ub(),!0;return!1}return t.Ob()}function jPn(n,t){var e,i;if(n.f){for(;t.Sb();)if(cL(i=(e=BB(t.Ub(),72)).ak(),99)&&0!=(BB(i,18).Bb&h6n)&&(!n.e||i.Gj()!=NOt||0!=i.aj())&&null!=e.dd())return t.Pb(),!0;return!1}return t.Sb()}function EPn(n,t,e){var i,r,c,a,u,o;for(o=axn(n.e.Tg(),t),i=0,u=n.i,r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())){if(e==i)return a;++i,u=a+1}if(e==i)return u;throw Hp(new Ay(e9n+e+o8n+i))}function TPn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new bA,i=new Wb(n.f);i.a<i.c.c.length;)r=BB(n0(i),70).o,c.b=e.Math.max(c.b,r.a),c.a+=r.b;return c.a+=(n.f.c.length-1)*t,c}function MPn(n,t,e){var i,r,c;for(r=new oz(ZL(hbn(e).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||!b5(i)&&i.c.i.c==i.d.i.c||(c=zLn(n,i,e,new um)).c.length>1&&(t.c[t.c.length]=c)}function SPn(n){var t,e,i;for(Frn(e=new YT,n.o),i=new om;0!=e.b;)WUn(n,t=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),508),!0)&&WB(i.a,t);for(;0!=i.a.c.length;)WUn(n,t=BB(thn(i),508),!1)}function PPn(){PPn=O,kMt=new $C(hJn,0),wMt=new $C("BOOLEAN",1),vMt=new $C("INT",2),yMt=new $C("STRING",3),dMt=new $C("DOUBLE",4),gMt=new $C("ENUM",5),pMt=new $C("ENUMSET",6),mMt=new $C("OBJECT",7)}function CPn(n,t){var i,r,c,a,u;r=e.Math.min(n.c,t.c),a=e.Math.min(n.d,t.d),(c=e.Math.max(n.c+n.b,t.c+t.b))<r&&(i=r,r=c,c=i),(u=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=u,u=i),xH(n,r,a,c-r,u-a)}function IPn(){IPn=O,J$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,d7n,g7n,p7n,v7n,m7n,n8n]),Y$t=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"empty",d7n,K9n,"elementOnly"]),nLt=Pun(Gk(Qtt,1),sVn,2,6,[w7n,"preserve","replace",y7n]),Z$t=new SH}function OPn(n,t,e){var i,r,c;if(t!=e){i=t;do{UR(n,i.c),(r=i.e)&&(_x(n,(c=i.d).b,c.d),UR(n,r.n),i=vW(r))}while(r);i=e;do{XR(n,i.c),(r=i.e)&&(Bx(n,(c=i.d).b,c.d),XR(n,r.n),i=vW(r))}while(r)}}function APn(n,t,e,i){var r,c,a,u,o;if(i.f.c+i.g.c==0)for(u=0,o=(a=n.a[n.c]).length;u<o;++u)VW(i,c=a[u],new kcn(n,c,e));return(r=BB(qI(AY(i.f,t)),663)).b=0,r.c=r.f,0==r.c||Tb(BB(xq(r.a,r.b),287)),r}function $Pn(){$Pn=O,Zst=new jP("MEDIAN_LAYER",0),tht=new jP("TAIL_LAYER",1),Jst=new jP("HEAD_LAYER",2),nht=new jP("SPACE_EFFICIENT_LAYER",3),eht=new jP("WIDEST_LAYER",4),Yst=new jP("CENTER_LAYER",5)}function LPn(n){switch(n.g){case 0:case 1:case 2:return kUn(),sIt;case 3:case 4:case 5:return kUn(),SIt;case 6:case 7:case 8:return kUn(),CIt;case 9:case 10:case 11:return kUn(),oIt;default:return kUn(),PIt}}function NPn(n,t){var e;return 0!=n.c.length&&(e=tdn((l1(0,n.c.length),BB(n.c[0],17)).c.i),BZ(),e==(bvn(),fvt)||e==hvt||o5($V(new Rq(null,new w1(n,16)),new Fc),new ig(t)))}function xPn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new P6),DH(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=BB(c.Pb(),188)).b!=t&&xPn(n,r.b,i),r.c!=t&&xPn(n,r.c,i),DH(i.a,r);return i}return null}function DPn(){DPn=O,Qyt=new lC("ROOT_PROC",0),Uyt=new lC("FAN_PROC",1),Wyt=new lC("NEIGHBORS_PROC",2),Xyt=new lC("LEVEL_HEIGHT",3),Vyt=new lC("NODE_POSITION_PROC",4),zyt=new lC("DETREEIFYING_PROC",5)}function RPn(n,t){if(cL(t,239))return zA(n,BB(t,33));if(cL(t,186))return UA(n,BB(t,118));if(cL(t,439))return GA(n,BB(t,202));throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function KPn(n,t,e){var i,r;if(this.f=n,w6(e,r=(i=BB(RX(n.b,t),283))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)TZ(this);else for(this.c=i?i.b:null;e-- >0;)EZ(this);this.b=t,this.a=null}function _Pn(n,t){var e,i;t.a?zNn(n,t):(!!(e=BB(kK(n.b,t.b),57))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=BB(yK(n.b,t.b),57))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),MN(n.b,t.b))}function FPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).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((mdn(),_It))&&yRn(n,t),i=Xpn(n,t),PDn(n,t)==(cpn(),BCt)&&(i+=2*n.w),e.a.a=i}function BPn(n,t){var e,i;if(e=BB(oV(n.b,t),124),BB(BB(h6(n.r,t),21),84).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((mdn(),_It))&&kRn(n,t),i=Wpn(n,t),PDn(n,t)==(cpn(),BCt)&&(i+=2*n.w),e.a.b=i}function HPn(n,t){var e,i,r,c;for(c=new Np,i=new Wb(t);i.a<i.c.c.length;)WB(c,new RS(e=BB(n0(i),65),!0)),WB(c,new RS(e,!1));my((r=new hY(n)).a.a),e2(c,n.b,new Jy(Pun(Gk(oit,1),HWn,679,0,[r])))}function qPn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;return u=n.a,f=n.b,o=t.a,l=t.b,s=e.a,b=e.b,new xC(((c=u*l-f*o)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(u-o))/(r=(u-o)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function GPn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new oz(ZL(lbn(t).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||(r=e.d.i,n.a[r.p]?WB(n.b,e):GPn(n,r));n.a[t.p]=!1}}function zPn(n,t,e){var i;switch(i=0,BB(mMn(t,(HXn(),kgt)),163).g){case 2:i=2*-e+n.a,++n.a;break;case 1:i=-e;break;case 3:i=e;break;case 4:i=2*e+n.b,++n.b}return Lx(t,(hWn(),wlt))&&(i+=BB(mMn(t,wlt),19).a),i}function UPn(n,t,e){var i,r,c;for(e.zc(t,n),WB(n.n,t),c=n.p.eg(t),t.j==n.p.fg()?Obn(n.e,c):Obn(n.j,c),rX(n),r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(r);)i=BB(U5(r),11),e._b(i)||UPn(n,i,e)}function XPn(n){var t,e;return BB(ZAn(n,(sWn(),KSt)),21).Hc((mdn(),DIt))?(e=BB(ZAn(n,qSt),21),t=new wA(BB(ZAn(n,BSt),8)),e.Hc((n_n(),GIt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new Gj}function WPn(n){var t,e,i;if(!n.b){for(i=new Co,e=new ax(RBn(n));e.e!=e.i.gc();)0!=((t=BB(jpn(e),18)).Bb&h6n)&&f9(i,t);chn(i),n.b=new NO((BB(Wtn(QQ((QX(),t$t).o),8),18),i.i),i.g),P5(n).b&=-9}return n.b}function VPn(n,t){var e,i,r,c,a,u;a=BB(Emn(gz(t.k),x8(FIt,YZn,61,2,0,1)),122),Zmn(n,u=t.g,e=o3(t,a[0]),i=u3(t,a[1]))<=Zmn(n,u,r=o3(t,a[1]),c=u3(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function QPn(n,t,e){var i,r,c;for(OTn(e,"Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&LDn(n,new bg(r),e),HSn(e)}function YPn(n){var t,e,i,r;return RHn(),t=-1==(i=GO(n,YTn(35)))?n:n.substr(0,i),e=-1==i?null:n.substr(i+1),(r=V3(EAt,t))?null!=e&&(r=Csn(r,(kW(e),e))):(r=WXn(t),a5(EAt,t,r),null!=e&&(r=Csn(r,e))),r}function JPn(n){var t,e,i,r,c,a,u;if(SQ(),cL(n,54))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n._c(c,n.Xb(r)),n._c(r,t);else for(e=n.Yc(),a=n.Zc(n.gc());e.Tb()<a.Vb();)i=e.Pb(),u=a.Ub(),e.Wb(u),a.Wb(i)}function ZPn(n,t){var e,i,r;OTn(t,"End label pre-processing",1),e=Gy(MD(mMn(n,(HXn(),jpt)))),i=Gy(MD(mMn(n,Spt))),r=gA(BB(mMn(n,Udt),103)),JT(wnn(new Rq(null,new w1(n.b,16)),new he),new D_(e,i,r)),HSn(t)}function nCn(n,t){var e,i,r,c,a,u;for(u=0,d3(c=new Lp,t);c.b!=c.c;)for(u+=syn((a=BB(dU(c),214)).d,a.e),r=new Wb(a.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(u+=nCn(n,e));return u}function tCn(n,t,i){var r,c;_an(this),t==(dJ(),Lyt)?TU(this.r,n.c):TU(this.w,n.c),TU(i==Lyt?this.r:this.w,n.d),tPn(this,n),XMn(this,r=Phn(n.c),c=Phn(n.d),c),this.o=(gxn(),e.Math.abs(r-c)<.2)}function eCn(n,t,e){var i,r,c,a,u;if(null!=(a=BB(yan(n.a,8),1936)))for(r=0,c=a.length;r<c;++r)null.jm();i=e,0==(1&n.a.Db)&&(u=new uW(n,e,t),i.ui(u)),cL(i,672)?BB(i,672).wi(n.a):i.ti()==n.a&&i.vi(null)}function iCn(){var n;return ZLt?BB($$n((WM(),zAt),S7n),1945):(sUn(),n=BB(cL(SJ((WM(),zAt),S7n),586)?SJ(zAt,S7n):new zW,586),ZLt=!0,gXn(n),pWn(n),VW((VM(),ZAt),n,new Ks),Tyn(n),mZ(zAt,S7n,n),n)}function rCn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function cCn(n,t,e,i){var r;return(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn]),t))<0&&(r=zTn(n,e,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function aCn(n){var t,e,i;for(_$n(n),i=new Np,e=new Wb(n.a.a.b);e.a<e.c.c.length;)WB(i,new fP(t=BB(n0(e),81),!0)),WB(i,new fP(t,!1));nmn(n.c),i2(i,n.b,new Jy(Pun(Gk(Jat,1),HWn,369,0,[n.c]))),vAn(n)}function uCn(n){var t,e,i,r;for(e=new xp,r=new Wb(n.d);r.a<r.c.c.length;)i=BB(n0(r),181),t=BB(i.We((hWn(),Uft)),17),AY(e.f,t)||VW(e,t,new TQ(t)),WB(BB(qI(AY(e.f,t)),456).b,i);return new t_(new Ob(e))}function oCn(n,t){var e,i,r,c,a;for(i=new d1(n.j.c.length),e=null,c=new Wb(n.j);c.a<c.c.c.length;)(r=BB(n0(c),11)).j!=e&&(i.b==i.c||F$n(i,e,t),o4(i),e=r.j),(a=mAn(r))&&w3(i,a);i.b==i.c||F$n(i,e,t)}function sCn(n,t){var e,i;for(i=new M2(n.b,0);i.b<i.d.gc();)Px(i.b<i.d.gc()),e=BB(i.d.Xb(i.c=i.b++),70),BB(mMn(e,(HXn(),Ydt)),272)==(Rtn(),UPt)&&(fW(i),WB(t.b,e),Lx(e,(hWn(),Uft))||hon(e,Uft,n))}function hCn(n){var t,i,r;for(t=F3(new oz(ZL(lbn(n).a.Kc(),new h))),i=new oz(ZL(fbn(n).a.Kc(),new h));dAn(i);)r=F3(new oz(ZL(lbn(BB(U5(i),17).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return iln(t)}function fCn(n,t,e){var i,r,c,a;for(OTn(e,"Processor arrange node",1),r=null,c=new YT,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(r=a);r5(c,r,c.c.b,c.c),Yzn(n,c,mcn(e,1)),HSn(e)}function lCn(n,t,e){var i,r,c;i=BB(ZAn(n,(sWn(),hSt)),21),r=0,c=0,t.a>e.a&&(i.Hc((wEn(),WMt))?r=(t.a-e.a)/2:i.Hc(QMt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((wEn(),JMt))?c=(t.b-e.b)/2:i.Hc(YMt)&&(c=t.b-e.b)),lMn(n,r,c)}function bCn(n,t,e,i,r,c,a,u,o,s,h,f,l){cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=a,$ln(n,u),Nln(n,o),Aln(n,s),Lln(n,h),nln(n,f),qln(n,l),Yfn(n,!0),Len(n,r),n.ok(c),Ihn(n,t),null!=i&&(n.i=null,arn(n,i))}function wCn(n){var t,e;if(n.f){for(;n.n>0;){if(cL(e=(t=BB(n.k.Xb(n.n-1),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;--n.n}return!1}return n.n>0}function dCn(n,t,e){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,[e,iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must not be greater than size (%s)",Pun(Gk(Ant,1),HWn,1,5,[e,iln(n),iln(t)]))}function gCn(n,t,e,i,r,c){var a,u,o;if(i-e<7)$bn(t,e,i,c);else if(gCn(t,n,u=e+r,o=u+((a=i+r)-u>>1),-r,c),gCn(t,n,o,a,-r,c),c.ue(n[o-1],n[o])<=0)for(;e<i;)$X(t,e++,n[u++]);else Gfn(n,u,o,a,t,e,i,c)}function pCn(n,t){var e,i,r;for(r=new Np,i=new Wb(n.c.a.b);i.a<i.c.c.length;)e=BB(n0(i),57),t.Lb(e)&&(WB(r,new OS(e,!0)),WB(r,new OS(e,!1)));Zvn(n.e),e2(r,n.d,new Jy(Pun(Gk(oit,1),HWn,679,0,[n.e])))}function vCn(n,t){var e,i,r,c,a,u,o;for(o=t.d,r=t.b.j,u=new Wb(o);u.a<u.c.c.length;)for(a=BB(n0(u),101),c=x8($Nt,ZYn,25,r.c.length,16,1),VW(n.b,a,c),e=a.a.d.p-1,i=a.c.d.p;e!=i;)c[e=(e+1)%r.c.length]=!0}function mCn(n,t){for(n.r=new Fan(n.p),Jl(n.r,n),Frn(n.r.j,n.j),yQ(n.j),DH(n.j,t),DH(n.r.e,t),rX(n),rX(n.r);0!=n.f.c.length;)G$(BB(xq(n.f,0),129));for(;0!=n.k.c.length;)G$(BB(xq(n.k,0),129));return n.r}function yCn(n,t,e){var i,r,c;if(r=itn(n.Tg(),t),(i=t-n.Ah())<0){if(!r)throw Hp(new _y(o6n+t+s6n));if(!r.Ij())throw Hp(new _y(r6n+r.ne()+c6n));(c=n.Yg(r))>=0?n.sh(c,e):TLn(n,r,e)}else Lbn(n,i,r,e)}function kCn(n){var t,e,i,r;if(e=BB(n,49).qh())try{if(i=null,(t=$$n((WM(),zAt),M_n(_bn(e))))&&(r=t.rh())&&(i=r.Wk(Xy(e.e))),i&&i!=n)return kCn(i)}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}return n}function jCn(n,t,e){var i,r,c,a;if(a=null==t?0:n.b.se(t),0==(r=null==(i=n.a.get(a))?new Array:i).length)n.a.set(a,r);else if(c=hhn(n,t,r))return c.ed(e);return $X(r,r.length,new PS(t,e)),++n.c,oY(n.b),null}function ECn(n,t){var e;return h2(n.a),CU(n.a,(Prn(),Qkt),Qkt),CU(n.a,Ykt,Ykt),dq(e=new B2,Ykt,(Cbn(),ejt)),GI(ZAn(t,(Uyn(),Sjt)))!==GI((Hsn(),sjt))&&dq(e,Ykt,njt),dq(e,Ykt,tjt),aA(n.a,e),$qn(n.a,t)}function TCn(n){if(!n)return lk(),htt;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=ftt[typeof t];return i?i(t):khn(typeof t)}return n instanceof Array||n instanceof e.Array?new Tl(n):new Pl(n)}function MCn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SIn(r),c.a=MIn(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}_Fn(r),GFn(r)}function SCn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=BB(oV(n.p,i),244)).i).b=SIn(r),c.a=MIn(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}_Fn(r),GFn(r)}function PCn(n,t){var e,i,r,c,a;if(!t.dc())if(r=BB(t.Xb(0),128),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=vyn(t,e))&&(i=BB(c.a,19).a,kxn(n,r,a=BB(c.b,128),e,i,t),e=i+1,r=a);else kxn(n,r,r,1,0,t)}function CCn(n){var t,e,i,r;for(m$(r=new t_(n.d),new zr),kDn(),t=Pun(Gk(iht,1),$Vn,270,0,[Bst,Gst,Fst,Xst,qst,Hst,Ust,zst]),e=0,i=new Wb(r);i.a<i.c.c.length;)COn(BB(n0(i),101),t[e%t.length]),++e}function ICn(n,t){var e,i,r,c;if(jDn(),t.b<2)return!1;for(i=e=BB(b3(c=spn(t,0)),8);c.b!=c.d.c;){if(r=BB(b3(c),8),!Dcn(n,i)||!Dcn(n,r))return!1;i=r}return!(!Dcn(n,i)||!Dcn(n,e))}function OCn(n,t){var e,i,r,c,a;return e=Ren(a=n,"x"),nnn(new qg(t).a,e),i=Ren(a,"y"),tnn(new Gg(t).a,i),r=Ren(a,C6n),enn(new zg(t).a,r),c=Ren(a,P6n),inn(new Ug(t).a,c),c}function ACn(n,t){dRn(n,t),0!=(1&n.b)&&(n.a.a=null),0!=(2&n.b)&&(n.a.f=null),0!=(4&n.b)&&(n.a.g=null,n.a.i=null),0!=(16&n.b)&&(n.a.d=null,n.a.e=null),0!=(8&n.b)&&(n.a.b=null),0!=(32&n.b)&&(n.a.j=null,n.a.c=null)}function $Cn(n,t){var e,i;if(i=0,t.length>0)try{i=l_n(t,_Vn,DWn)}catch(r){throw cL(r=lun(r),127)?Hp(new L7(r)):Hp(r)}return!n.a&&(n.a=new Sp(n)),i<(e=n.a).i&&i>=0?BB(Wtn(e,i),56):null}function LCn(n,t){if(n<0)return $Rn(BWn,Pun(Gk(Ant,1),HWn,1,5,["index",iln(n)]));if(t<0)throw Hp(new _y(qWn+t));return $Rn("%s (%s) must be less than size (%s)",Pun(Gk(Ant,1),HWn,1,5,["index",iln(n),iln(t)]))}function NCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function xCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function DCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function RCn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function KCn(n,t){var e,i,r,c,a,u;for(e=n.b.c.length,r=xq(n.b,t);2*t+1<e&&(u=c=2*t+1,(a=c+1)<e&&n.a.ue(xq(n.b,a),xq(n.b,c))<0&&(u=a),i=u,!(n.a.ue(r,xq(n.b,i))<0));)c5(n.b,t,xq(n.b,i)),t=i;c5(n.b,t,r)}function _Cn(n,t,i,r,c,a){var u,o,s,h,f;for(GI(n)===GI(i)&&(n=n.slice(t,t+c),t=0),s=i,o=t,h=t+c;o<h;)c=(u=e.Math.min(o+1e4,h))-o,(f=n.slice(o,u)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),o=u,r+=c}function FCn(n,t,e){var i,r;return i=e.d,r=e.e,n.g[i.d]<=n.i[t.d]&&n.i[t.d]<=n.i[i.d]&&n.g[r.d]<=n.i[t.d]&&n.i[t.d]<=n.i[r.d]?!(n.i[i.d]<n.i[r.d]):n.i[i.d]<n.i[r.d]}function BCn(n){var t,e,i,r,c,a,u;if((i=n.a.c.length)>0)for(a=n.c.d,r=kL(XR(new xC((u=n.d.d).a,u.b),a),1/(i+1)),c=new xC(a.a,a.b),e=new Wb(n.a);e.a<e.c.c.length;)(t=BB(n0(e),559)).d.a=c.a,t.d.b=c.b,UR(c,r)}function HCn(n,t,i){var r,c,a,u,o,s;for(s=RQn,a=new Wb(GLn(n.b));a.a<a.c.c.length;)for(c=BB(n0(a),168),o=new Wb(GLn(t.b));o.a<o.c.c.length;)u=BB(n0(o),168),r=Cun(c.a,c.b,u.a,u.b,i),s=e.Math.min(s,r);return s}function qCn(n,t){if(!t)throw Hp(new gv);if(n.j=t,!n.d)switch(n.j.g){case 1:n.a.a=n.o.a/2,n.a.b=0;break;case 2:n.a.a=n.o.a,n.a.b=n.o.b/2;break;case 3:n.a.a=n.o.a/2,n.a.b=n.o.b;break;case 4:n.a.a=0,n.a.b=n.o.b/2}}function GCn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function zCn(n,t){var i,r;return cL(t.g,10)&&BB(t.g,10).k==(uSn(),Mut)?RQn:f3(t)?e.Math.max(0,n.b/2-.5):(i=f2(t))?(r=Gy(MD(edn(i,(HXn(),Opt)))),e.Math.max(0,r/2-.5)):RQn}function UCn(n){var t,e,i,r;for(r=Lfn(n.d,n.e).Kc();r.Ob();)for(i=BB(r.Pb(),11),e=new Wb(n.e==(kUn(),CIt)?i.e:i.g);e.a<e.c.c.length;)b5(t=BB(n0(e),17))||t.c.i.c==t.d.i.c||(RSn(n,t),++n.f,++n.c)}function XCn(n,t){var e,i;if(t.dc())return SQ(),SQ(),set;for(WB(i=new Np,iln(_Vn)),e=1;e<n.f;++e)null==n.a&&wRn(n),n.a[e]&&WB(i,iln(e));return 1==i.c.length?(SQ(),SQ(),set):(WB(i,iln(DWn)),dBn(t,i))}function WCn(n,t){var e,i,r,c,a,u;e=ckn(t,u=t.c.i.k!=(uSn(),Cut)?t.d:t.c).i,r=BB(RX(n.k,u),121),i=n.i[e.p].a,AK(u.i)<(e.c?E7(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),UNn(aM(cM(uM(rM(new Hv,0),4),c),a))}function VCn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kIn(dnn(e,BB(r.Pb(),19).a))))&&(!t.b&&(t.b=new hK(KOt,t,4,7)),f9(t.b,c))}function QCn(n,t,e){var i,r,c;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=Amn(n,kIn(dnn(e,BB(r.Pb(),19).a))))&&(!t.c&&(t.c=new hK(KOt,t,5,8)),f9(t.c,c))}function YCn(n,t,e){var i,r;i=t.a&n.f,t.b=n.b[i],n.b[i]=t,r=t.f&n.f,t.d=n.c[r],n.c[r]=t,e?(t.e=e.e,t.e?t.e.c=t:n.a=t,t.c=e.c,t.c?t.c.e=t:n.e=t):(t.e=n.e,t.c=null,n.e?n.e.c=t:n.a=t,n.e=t),++n.i,++n.g}function JCn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=uO(oO(new Ck,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)uO((i.a+=FWn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",Hp(new _y(i.a))}function ZCn(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=BB(RX(n.b,t.a),283)).a,t.e?t.e.c=t.c:e.b=t.c,t.c?t.c.e=t.e:e.c=t.e):((e=BB(v6(n.b,t.a),283)).a=0,++n.c),--n.d}function nIn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[3]=t[3]+(e%60/10|0)&QVn,t[4]=t[4]+e%10&QVn,Bdn(t,0,t.length)}function tIn(n,t,e){var i,r;for(i=t.d,r=e.d;i.a-r.a==0&&i.b-r.b==0;)i.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,i.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.a+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5,r.b+=H$n(n,26)*rYn+H$n(n,27)*cYn-.5}function eIn(n){var t,e,i,r;for(n.g=new Hbn(BB(yX(FIt),290)),i=0,kUn(),e=sIt,t=0;t<n.j.c.length;t++)(r=BB(xq(n.j,t),11)).j!=e&&(i!=t&&mG(n.g,e,new rI(iln(i),iln(t))),e=r.j,i=t);mG(n.g,e,new rI(iln(i),iln(t)))}function iIn(n){var t,e,i,r,c;for(e=0,t=new Wb(n.b);t.a<t.c.c.length;)for(r=new Wb(BB(n0(t),29).a);r.a<r.c.c.length;)for((i=BB(n0(r),10)).p=e++,c=new Wb(i.j);c.a<c.c.c.length;)BB(n0(c),11).p=e++}function rIn(n,t,e,i,r){var c,a,u,o;if(t)for(a=t.Kc();a.Ob();)for(o=cRn(BB(a.Pb(),10),(ain(),qvt),e).Kc();o.Ob();)u=BB(o.Pb(),11),(c=BB(qI(AY(r.f,u)),112))||(c=new Fan(n.d),i.c[i.c.length]=c,UPn(c,u,r))}function cIn(n,t){var e,i,r;if(!(r=Fqn((IPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ol(t)}function aIn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=CJ(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):Van(fan(n))}function uIn(n){var t,e,i,r,c,a,u;for(c=new fA,e=new Wb(n);e.a<e.c.c.length;)a=(t=BB(n0(e),129)).a,u=t.b,c.a._b(a)||c.a._b(u)||(r=a,i=u,a.e.b+a.j.b>2&&u.e.b+u.j.b<=2&&(r=u,i=a),c.a.zc(r,c),r.q=i);return c}function oIn(n,t){var e,i,r;return qan(i=new $vn(n),t),hon(i,(hWn(),Vft),t),hon(i,(HXn(),ept),(QEn(),XCt)),hon(i,kdt,(wvn(),OMt)),Bl(i,(uSn(),Mut)),CZ(e=new CSn,i),qCn(e,(kUn(),CIt)),CZ(r=new CSn,i),qCn(r,oIt),i}function sIn(n){switch(n.g){case 0:return new Ny((oin(),Omt));case 1:return new df;case 2:return new jf;default:throw Hp(new _y("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function hIn(n,t){var e,i,r,c;for(n.c[t.p]=!0,WB(n.a,t),c=new Wb(t.j);c.a<c.c.c.length;)for(e=new m6((r=BB(n0(c),11)).b);y$(e.a)||y$(e.b);)i=ngn(r,BB(y$(e.a)?n0(e.a):n0(e.b),17)).i,n.c[i.p]||hIn(n,i)}function fIn(n){var t,i,r,c,a,u,o;for(u=0,i=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));i.e!=i.i.gc();)o=(t=BB(kpn(i),33)).g,c=t.f,r=e.Math.sqrt(o*o+c*c),u=e.Math.max(r,u),a=fIn(t),u=e.Math.max(a,u);return u}function lIn(){lIn=O,rIt=new XC("OUTSIDE",0),eIt=new XC("INSIDE",1),iIt=new XC("NEXT_TO_PORT_IF_POSSIBLE",2),tIt=new XC("ALWAYS_SAME_SIDE",3),nIt=new XC("ALWAYS_OTHER_SAME_SIDE",4),cIt=new XC("SPACE_EFFICIENT",5)}function bIn(n,t,e){var i,r,c,a;return $in(i=K2(n,(tE(),r=new jm,!!e&&nNn(r,e),r),t),R2(t,q6n)),STn(t,i),o$n(t,i),OCn(t,i),c=N2(t,"ports"),PLn((a=new pI(n,i)).a,a.b,c),xon(n,t,i),aun(n,t,i),i}function wIn(n){var t,e;return e=-n.a,t=Pun(Gk(ONt,1),WVn,25,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&QVn,t[2]=t[2]+(e/60|0)%10&QVn,t[4]=t[4]+(e%60/10|0)&QVn,t[5]=t[5]+e%10&QVn,Bdn(t,0,t.length)}function dIn(n){var t;return t=Pun(Gk(ONt,1),WVn,25,15,[71,77,84,45,48,48,58,48,48]),n<=0&&(t[3]=43,n=-n),t[4]=t[4]+((n/60|0)/10|0)&QVn,t[5]=t[5]+(n/60|0)%10&QVn,t[7]=t[7]+(n%60/10|0)&QVn,t[8]=t[8]+n%10&QVn,Bdn(t,0,t.length)}function gIn(n){var t,e,i,r,c;if(null==n)return zWn;for(c=new $an(FWn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?oO(c.a,c.b):c.a=new lN(c.d),aO(c.a,""+vz(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function pIn(n,t){var i,r,c;for(c=DWn,r=new Wb(kbn(t));r.a<r.c.c.length;)(i=BB(n0(r),213)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,pIn(n,Nbn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function vIn(n,t){var e,i,r;for(r=BB(BB(h6(n.r,t),21),84).Kc();r.Ob();)(i=BB(r.Pb(),111)).e.b=(e=i.b).Xe((sWn(),aPt))?e.Hf()==(kUn(),sIt)?-e.rf().b-Gy(MD(e.We(aPt))):Gy(MD(e.We(aPt))):e.Hf()==(kUn(),sIt)?-e.rf().b:0}function mIn(n){var t,e,i,r,c,a,u;for(e=QA(n.e),c=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,u=0;u<n.c;u++){for(i=t,a=0;a<n.d;a++)Wbn(n.e,new UV(i,r,n.a,n.b))&&FRn(n,a,u,!1,!0),i+=n.a;r+=n.b}}function yIn(n){var t,e,i;if(qy(TD(ZAn(n,(sWn(),SSt))))){for(i=new Np,e=new oz(ZL(dLn(n).a.Kc(),new h));dAn(e);)QIn(t=BB(U5(e),79))&&qy(TD(ZAn(t,PSt)))&&(i.c[i.c.length]=t);return i}return SQ(),SQ(),set}function kIn(n){var t;if(t=!1,cL(n,204))return t=!0,BB(n,204).a;if(!t&&cL(n,258)&&BB(n,258).a%1==0)return t=!0,iln(QO(BB(n,258).a));throw Hp(new ek("Id must be a string or an integer: '"+n+"'."))}function jIn(n,t){var e,i,r,c,a,u;for(c=null,r=new rU((!n.a&&(n.a=new Sp(n)),n.a));bOn(r);)if(YBn(a=(e=BB(aLn(r),56)).Tg()),null!=(i=(u=a.o)&&e.mh(u)?pK(uun(u),e.ah(u)):null)&&mK(i,t)){c=e;break}return c}function EIn(n,t,e){var i,r,c,a,u;if(lin(e,"occurrences"),0==e)return(u=BB(lfn(OQ(n.a),t),14))?u.gc():0;if(!(a=BB(lfn(OQ(n.a),t),14)))return 0;if(e>=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i<e;i++)r.Pb(),r.Qb();return c}function TIn(n,t,e){var i,r,c;return lin(e,"oldCount"),lin(0,"newCount"),((i=BB(lfn(OQ(n.a),t),14))?i.gc():0)==e&&(lin(0,"count"),(c=-((r=BB(lfn(OQ(n.a),t),14))?r.gc():0))>0?wk():c<0&&EIn(n,t,-c),!0)}function MIn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=Xvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=Kk(ecn(LV(AV(LU(n.a),new Mn),new Sn)));return a>0?a+n.n.d+n.n.a:0}function SIn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=Kk(ecn(LV(AV(LU(n.a),new En),new Tn)));else{for(t=0,r=0,c=(i=Wvn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function PIn(n,t){var i,r,c,a;for(i=(a=BB(oV(n.b,t),124)).a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).c&&(i.a=e.Math.max(i.a,VH(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 CIn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(fRn(),Zct)),19).a-BB(mMn(n,Zct),19).a)?(i=XR(B$(BB(mMn(n,(Mrn(),uat)),8)),BB(mMn(n,oat),8)),r=XR(B$(BB(mMn(t,uat),8)),BB(mMn(t,oat),8)),Pln(i.a*i.b,r.a*r.b)):e}function IIn(n,t){var e,i,r;return 0==(e=BB(mMn(t,(CAn(),$kt)),19).a-BB(mMn(n,$kt),19).a)?(i=XR(B$(BB(mMn(n,(qqn(),Zyt)),8)),BB(mMn(n,nkt),8)),r=XR(B$(BB(mMn(t,Zyt),8)),BB(mMn(t,nkt),8)),Pln(i.a*i.b,r.a*r.b)):e}function OIn(n){var t,e;return(e=new Ck).a+="e_",null!=(t=Xan(n))&&(e.a+=""+t),n.c&&n.d&&(oO((e.a+=" ",e),pyn(n.c)),oO(uO((e.a+="[",e),n.c.i),"]"),oO((e.a+=e1n,e),pyn(n.d)),oO(uO((e.a+="[",e),n.d.i),"]")),e.a}function AIn(n){switch(n.g){case 0:return new pf;case 1:return new vf;case 2:return new gf;case 3:return new mf;default:throw Hp(new _y("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function $In(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 LIn(n,t,e){var i,r,c;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)r=x2(e,BB(c.Pb(),19).a),L6n in r.a||N6n in r.a?sKn(n,r,t):EXn(n,r,t),PL(BB(RX(n.b,Qdn(r)),79))}function NIn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=Ikn(n))&&(ZM(),t.Cj()==E9n)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function xIn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 2:case 3:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function DIn(n,t){var e,i,r,c;if(QXn(n),0!=n.c||123!=n.a)throw Hp(new ak(kWn((u$(),P8n))));if(c=112==t,i=n.d,(e=lx(n.i,125,i))<0)throw Hp(new ak(kWn((u$(),C8n))));return r=fx(n.i,i,e),n.d=e+1,b9(r,c,512==(512&n.e))}function RIn(n){var t;if((t=BB(mMn(n,(HXn(),qdt)),314))==(Oin(),hht))throw Hp(new ck("The hierarchy aware processor "+t+" in child node "+n+" is only allowed if the root node specifies the same hierarchical processor."))}function KIn(n,t){var e,i,r,c;for(G_(),e=null,r=t.Kc();r.Ob();)(i=BB(r.Pb(),128)).o||(WB((c=new PBn(F$(i.a),bH(i.a),null,BB(i.d.a.ec().Kc().Pb(),17))).c,i.a),n.c[n.c.length]=c,e&&WB(e.d,c),e=c)}function _In(n,t){var e,i,r;if(t)if(0!=(4&t.i))for(i="[]",e=t.c;;e=e.c){if(0==(4&e.i)){Hin(n,r=Uy((ED(e),e.o+i))),xen(n,r);break}i+="[]"}else Hin(n,r=Uy((ED(t),t.o))),xen(n,r);else Hin(n,null),xen(n,null);n.yk(t)}function FIn(n,t,e,i,r){var c,a,u,o;return GI(o=hD(n,BB(r,56)))!==GI(r)?(u=BB(n.g[e],72),jL(n,e,sTn(n,e,c=Z3(t,o))),mA(n.e)&&(KEn(a=LY(n,9,c.ak(),r,o,i,!1),new N7(n.e,9,n.c,u,c,i,!1)),$7(a)),o):r}function BIn(n,t,e){var i,r,c,a,u,o;for(i=BB(h6(n.c,t),15),r=BB(h6(n.c,e),15),c=i.Zc(i.gc()),a=r.Zc(r.gc());c.Sb()&&a.Sb();)if((u=BB(c.Ub(),19))!=(o=BB(a.Ub(),19)))return E$(u.a,o.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function HIn(n,t){var e,i;try{return X1(n.a,t)}catch(r){if(cL(r=lun(r),32)){try{if(i=l_n(t,_Vn,DWn),e=Vj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!cL(c=lun(c),127))throw Hp(c)}return null}throw Hp(r)}}function qIn(n,t){var e,i,r;if(r=Fqn((IPn(),Z$t),n.Tg(),t))return ZM(),BB(r,66).Oj()||(r=Z1(B7(Z$t,r))),i=BB((e=n.Yg(r))>=0?n._g(e,!0,!0):cOn(n,r,!0),153),BB(i,215).ll(t);throw Hp(new _y(r6n+t.ne()+u6n))}function GIn(){var n;return tS(),Q$t?BB($$n((WM(),zAt),V9n),1939):(RO(Hnt,new Cs),nzn(),n=BB(cL(SJ((WM(),zAt),V9n),547)?SJ(zAt,V9n):new UW,547),Q$t=!0,oWn(n),TWn(n),VW((VM(),ZAt),n,new Go),mZ(zAt,V9n,n),n)}function zIn(n,t){var e,i,r,c;n.j=-1,mA(n.e)?(e=n.i,c=0!=n.i,c6(n,t),i=new N7(n.e,3,n.c,null,t,e,c),r=t.Qk(n.e,n.c,null),(r=IEn(n,t,r))?(r.Ei(i),r.Fi()):ban(n.e,i)):(c6(n,t),(r=t.Qk(n.e,n.c,null))&&r.Fi())}function UIn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(b1(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)b1(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function XIn(n){var t,i,r,c,a;return i=c=BB(n.a,19).a,r=a=BB(n.b,19).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 rI(iln(i),iln(r))}function WIn(n,t,e,i){var r,c,a,u,o,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(o=c,s=u=a-t.k+i,o+=n.j,s+=n.k,o>=0&&s>=0&&o<n.o&&s<n.p&&(!mmn(t,r,a)&&imn(n,c,u)||vmn(t,r,a)&&!rmn(n,c,u)))return!0;return!1}function VIn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Aon(Pun(Gk(PMt,1),sVn,8,0,[c.i.n,c.n,c.a])).b+Aon(Pun(Gk(PMt,1),sVn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(kUn(),oIt)?new xC(t+c.i.c.c.a+e,r):new xC(t-e,r),Kx(n.a,0,i)}function QIn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=i)return!1}else t=i;return!0}function YIn(n,t,e){var i;if(++n.j,t>=n.i)throw Hp(new Ay(u8n+t+o8n+n.i));if(e>=n.i)throw Hp(new Ay(s8n+e+o8n+n.i));return i=n.g[e],t!=e&&(t<e?aHn(n.g,t,n.g,t+1,e-t):aHn(n.g,e+1,n.g,e,t-e),$X(n.g,t,i),n.ei(t,i,e),n.ci()),i}function JIn(n,t,e){var i;if(i=BB(n.c.xc(t),14))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw Hp(new g5("New Collection violated the Collection spec"))}function ZIn(n){var t,e,i;return n<0?0:0==n?32:(e=16-(t=(i=-(n>>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-_Qn)>>16&4,(e+=t=(i=(n<<=t)-hVn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function nOn(n){var t,e,i,r;for(MQ(),Sct=new Np,Mct=new xp,Tct=new Np,!n.a&&(n.a=new eU(UOt,n,10,11)),xUn(t=n.a),r=new AL(t);r.e!=r.i.gc();)i=BB(kpn(r),33),-1==E7(Sct,i,0)&&(e=new Np,WB(Tct,e),Rgn(i,e));return Tct}function tOn(n,t,e){var i,r,c,a;n.a=e.b.d,cL(t,352)?(e5(c=qSn(r=cDn(BB(t,79),!1,!1)),i=new Nw(n)),VFn(c,r),null!=t.We((sWn(),OSt))&&e5(BB(t.We(OSt),74),i)):((a=BB(t,470)).Hg(a.Dg()+n.a.a),a.Ig(a.Eg()+n.a.b))}function eOn(n,t){var i,r,c,a,u,o,s,h;for(h=Gy(MD(mMn(t,(HXn(),Npt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,o=1;o<n.length;o++)r=n[o].n,c=n[o].o,i=n[o].d,(a=r.a-i.b-s)<0&&(r.a-=a),(u=t.f).a=e.Math.max(u.a,r.a+c.a),s=r.a+c.a+i.c+h}function iOn(n,t){var e,i,r,c,a,u;return i=BB(BB(RX(n.g,t.a),46).a,65),r=BB(BB(RX(n.g,t.b),46).a,65),(e=nqn(c=i.b,a=r.b))>=0?e:(u=lW(XR(new xC(a.c+a.b/2,a.d+a.a/2),new xC(c.c+c.b/2,c.d+c.a/2))),-(Y_n(c,a)-1)*u)}function rOn(n,t,e){var i;JT(new Rq(null,(!e.a&&(e.a=new eU(FOt,e,6,6)),new w1(e.a,16))),new eI(n,t)),JT(new Rq(null,(!e.n&&(e.n=new eU(zOt,e,1,7)),new w1(e.n,16))),new iI(n,t)),(i=BB(ZAn(e,(sWn(),OSt)),74))&&Yrn(i,n,t)}function cOn(n,t,e){var i,r,c;if(c=Fqn((IPn(),Z$t),n.Tg(),t))return ZM(),BB(c,66).Oj()||(c=Z1(B7(Z$t,c))),r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).hl(t,e);throw Hp(new _y(r6n+t.ne()+u6n))}function aOn(n,t,e,i){var r,c,a,u,o;if(r=n.d[t])if(c=r.g,o=r.i,null!=i){for(u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return a}else for(u=0;u<o;++u)if(GI((a=BB(c[u],133)).cd())===GI(i))return a;return null}function uOn(n,t){var e;if(t<0)throw Hp(new Oy("Negative exponent"));if(0==t)return Jtt;if(1==t||swn(n,Jtt)||swn(n,eet))return n;if(!fAn(n,0)){for(e=1;!fAn(n,e);)++e;return Nnn(vwn(e*t),uOn(z5(n,e),t))}return mTn(n,t)}function oOn(n,t){var e,i,r;if(GI(n)===GI(t))return!0;if(null==n||null==t)return!1;if(n.length!=t.length)return!1;for(e=0;e<n.length;++e)if(i=n[e],r=t[e],!(GI(i)===GI(r)||null!=i&&Nfn(i,r)))return!1;return!0}function sOn(n){var t,e,i;for(kM(),this.b=Vat,this.c=(Ffn(),BPt),this.f=(yM(),zat),this.a=n,tj(this,new Ct),kNn(this),i=new Wb(n.b);i.a<i.c.c.length;)(e=BB(n0(i),81)).d||(t=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[e])),WB(n.a,t))}function hOn(n,t,e){var i,r,c,a,u,o;if(!n||0==n.c.length)return null;for(c=new KY(t,!e),r=new Wb(n);r.a<r.c.c.length;)i=BB(n0(r),70),USn(c,(gM(),new Bw(i)));return(a=c.i).a=(o=c.n,c.e.b+o.d+o.a),a.b=(u=c.n,c.e.a+u.b+u.c),c}function fOn(n){var t,e,i,r,c,a,u;for(hA(u=n2(n.a),new Pe),e=null,c=0,a=(r=u).length;c<a&&(i=r[c]).k==(uSn(),Mut);++c)(t=BB(mMn(i,(hWn(),Qft)),61))!=(kUn(),CIt)&&t!=oIt||(e&&BB(mMn(e,clt),15).Fc(i),e=i)}function lOn(n,t,e){var i,r,c,a,u,o;l1(t,n.c.length),u=BB(n.c[t],329),s6(n,t),u.b/2>=e&&(i=t,c=(o=(u.c+u.a)/2)-e,u.c<=o-e&&kG(n,i++,new kB(u.c,c)),(a=o+e)<=u.a&&(r=new kB(a,u.a),LZ(i,n.c.length),MS(n.c,i,r)))}function bOn(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=BB(n.g[n.i-1],47)}else n.d=n.si(n.f),f9(n,n.d),t=n.d;return t==n.b&&null.km>=null.jm()?(aLn(n),bOn(n)):t.Ob()}function wOn(n,t,e){var i,r,c,a;if(!(a=e)&&(a=LH(new Xm,0)),OTn(a,qZn,1),$Gn(n.c,t),1==(c=RGn(n.a,t)).gc())VHn(BB(c.Xb(0),37),a);else for(r=1/c.gc(),i=c.Kc();i.Ob();)VHn(BB(i.Pb(),37),mcn(a,r));Ek(n.a,c,t),FDn(t),HSn(a)}function dOn(n){if(this.a=n,n.c.i.k==(uSn(),Mut))this.c=n.c,this.d=BB(mMn(n.c.i,(hWn(),Qft)),61);else{if(n.d.i.k!=Mut)throw Hp(new _y("Edge "+n+" is not an external edge."));this.c=n.d,this.d=BB(mMn(n.d.i,(hWn(),Qft)),61)}}function gOn(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,r,n.b)),t?t!=n&&(Nrn(n,t.zb),$en(n,t.d),Fin(n,null==(e=null==(i=t.c)?t.zb:i)||mK(e,t.zb)?null:e)):(Nrn(n,null),$en(n,0),Fin(n,null))}function pOn(n){var t,e;if(n.f){for(;n.n<n.o;){if(cL(e=(t=BB(n.j?n.j.pi(n.n):n.k.Xb(n.n),72)).ak(),99)&&0!=(BB(e,18).Bb&h6n)&&(!n.e||e.Gj()!=NOt||0!=e.aj())&&null!=t.dd())return!0;++n.n}return!1}return n.n<n.o}function vOn(n,t){var e;this.e=(WX(),yX(n),WX(),Nwn(n)),this.c=(yX(t),Nwn(t)),aN(this.e.Hd().dc()==this.c.Hd().dc()),this.d=vbn(this.e),this.b=vbn(this.c),e=kq(Ant,[sVn,HWn],[5,1],5,[this.e.Hd().gc(),this.c.Hd().gc()],2),this.a=e,din(this)}function mOn(n){var t=(!Znt&&(Znt=QUn()),Znt);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 IJ(n,t)}))+'"'}function yOn(n){var t,e;for(CQ(),this.b=hit,this.c=lit,this.g=(pM(),sit),this.d=(Ffn(),BPt),this.a=n,yNn(this),e=new Wb(n.b);e.a<e.c.c.length;)!(t=BB(n0(e),57)).a&&IN(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),n),t.e=new gY(t.d)}function kOn(n){var t,e,i,r,c;for(r=n.e.c.length,i=x8(Rnt,nZn,15,r,0,1),c=new Wb(n.e);c.a<c.c.c.length;)i[BB(n0(c),144).b]=new YT;for(e=new Wb(n.c);e.a<e.c.c.length;)i[(t=BB(n0(e),282)).c.b].Fc(t),i[t.d.b].Fc(t);return i}function jOn(n){var t,e,i,r,c,a;for(a=sx(n.c.length),r=new Wb(n);r.a<r.c.c.length;){for(i=BB(n0(r),10),c=new Rv,e=new oz(ZL(lbn(i).a.Kc(),new h));dAn(e);)(t=BB(U5(e),17)).c.i==t.d.i||TU(c,t.d.i);a.c[a.c.length]=c}return a}function EOn(n,t){var e,i,r,c,a;if(t>=(a=null==(e=BB(yan(n.a,4),126))?0:e.length))throw Hp(new tK(t,a));return r=e[t],1==a?i=null:(aHn(e,0,i=x8(dAt,i9n,415,a-1,0,1),0,t),(c=a-t-1)>0&&aHn(e,t+1,i,t,c)),Fgn(n,i),eCn(n,t,r),r}function TOn(){TOn=O,lLt=BB(Wtn(QQ((cE(),gLt).qb),6),34),sLt=BB(Wtn(QQ(gLt.qb),3),34),hLt=BB(Wtn(QQ(gLt.qb),4),34),fLt=BB(Wtn(QQ(gLt.qb),5),18),oEn(lLt),oEn(sLt),oEn(hLt),oEn(fLt),bLt=new Jy(Pun(Gk(FAt,1),N9n,170,0,[lLt,sLt]))}function MOn(n,t){var e;this.d=new lm,this.b=t,this.e=new wA(t.qf()),e=n.u.Hc((lIn(),iIt)),n.u.Hc(eIt)?n.D?this.a=e&&!t.If():this.a=!0:n.u.Hc(rIt)?this.a=!!e&&!(t.zf().Kc().Ob()||t.Bf().Kc().Ob()):this.a=!1}function SOn(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),CIt)?-i.rf().a-Gy(MD(i.We(aPt))):e+Gy(MD(i.We(aPt))):i.Hf()==(kUn(),CIt)?-i.rf().a:e}function POn(n,t){var e,i,r;e=BB(mMn(n,(HXn(),Udt)),103),r=BB(ZAn(t,upt),61),(i=BB(mMn(n,ept),98))!=(QEn(),QCt)&&i!=YCt?r==(kUn(),PIt)&&(r=OFn(t,e))==PIt&&(r=hwn(e)):r=XHn(t)>0?hwn(e):Tln(hwn(e)),Ypn(t,upt,r)}function COn(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&m$(a,new Ur),r=a.c.length/2|0,i=0;i<r;i++)l1(i,a.c.length),(c=BB(a.c[i],113)).c&&qCn(c.d,t.a);for(e=r;e<a.c.length;e++)l1(e,a.c.length),(c=BB(a.c[e],113)).c&&qCn(c.d,t.b)}function IOn(n,t,e){var i,r,c;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?((c=Tz(i.a,r.a))<0?uKn(n,t,e):c>0&&uKn(n,e,t),c):null!=i.a?(uKn(n,t,e),-1):null!=r.a?(uKn(n,e,t),1):0}function OOn(n,t){var e,i,r,c;n.ej()?(e=n.Vi(),c=n.fj(),++n.j,n.Hi(e,n.oi(e,t)),i=n.Zi(3,null,t,e,c),n.bj()&&(r=n.cj(t,null))?(r.Ei(i),r.Fi()):n.$i(i)):(eW(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function AOn(n,t){var e,i,r,c,a;for(a=axn(n.e.Tg(),t),r=new go,e=BB(n.g,119),c=n.i;--c>=0;)i=e[c],a.rl(i.ak())&&f9(r,i);!aXn(n,r)&&mA(n.e)&&Lv(n,t.$j()?LY(n,6,t,(SQ(),set),null,-1,!1):LY(n,t.Kj()?2:1,t,null,null,-1,!1))}function $On(){var n,t;for($On=O,aet=x8(oet,sVn,91,32,0,1),uet=x8(oet,sVn,91,32,0,1),n=1,t=0;t<=18;t++)aet[t]=npn(n),uet[t]=npn(yz(n,t)),n=cbn(n,5);for(;t<uet.length;t++)aet[t]=Nnn(aet[t-1],aet[1]),uet[t]=Nnn(uet[t-1],(ODn(),net))}function LOn(n,t){var e,i,r,c;return n.a==(JMn(),cft)||(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 NOn(n,t){OTn(t,"Partition preprocessing",1),JT(BB(P4(AV(wnn(AV(new Rq(null,new w1(n.a,16)),new vi),new mi),new yi),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15).Oc(),new ki),HSn(t)}function xOn(n){var t,e,i,r,c,a;for(qZ(),e=new v4,i=new Wb(n.e.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)r=BB(n0(c),10),(t=BB(lnn(e,a=n.g[r.p]),15))||Jgn(e,a,t=new Np),t.Fc(r);return e}function DOn(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=x8(Rnt,nZn,15,r,0,1),n.b=x8($Nt,ZYn,25,r,16,1),a=spn(t.b,0);a.b!=a.d.c;)c=BB(b3(a),86),n.a[c.g]=new YT;for(i=spn(t.a,0);i.b!=i.d.c;)e=BB(b3(i),188),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function ROn(n){var t;return 0!=(64&n.Db)?P$n(n):((t=new fN(P$n(n))).a+=" (startX: ",vE(t,n.j),t.a+=", startY: ",vE(t,n.k),t.a+=", endX: ",vE(t,n.b),t.a+=", endY: ",vE(t,n.c),t.a+=", identifier: ",cO(t,n.d),t.a+=")",t.a)}function KOn(n){var t;return 0!=(64&n.Db)?kfn(n):((t=new fN(kfn(n))).a+=" (ordered: ",yE(t,0!=(256&n.Bb)),t.a+=", unique: ",yE(t,0!=(512&n.Bb)),t.a+=", lowerBound: ",mE(t,n.s),t.a+=", upperBound: ",mE(t,n.t),t.a+=")",t.a)}function _On(n,t,e,i,r,c,a,u){var o;return cL(n.Cb,88)&&ACn(P5(BB(n.Cb,88)),4),Nrn(n,e),n.f=i,$ln(n,r),Nln(n,c),Aln(n,a),Lln(n,!1),nln(n,!0),qln(n,u),Yfn(n,!0),Len(n,0),n.b=0,Nen(n,1),(o=HTn(n,t,null))&&o.Fi(),Gln(n,!1),n}function FOn(n,t){var i,r;return BB(SJ(n.a,t),512)||(i=new y5(t),k5(),xK(i,FOn(n,fx(r=Qet?null:i.c,0,e.Math.max(0,mN(r,YTn(46)))))),0==(Qet?null:i.c).length&&zD(i,new X),mZ(n.a,Qet?null:i.c,i),i)}function BOn(n,t){var e;n.b=t,n.g=new Np,e=JOn(n.b),n.e=e,n.f=e,n.c=qy(TD(mMn(n.b,(_kn(),jit)))),n.a=MD(mMn(n.b,(sWn(),cSt))),null==n.a&&(n.a=1),Gy(n.a)>1?n.e*=Gy(n.a):n.f/=Gy(n.a),Chn(n),ggn(n),TRn(n),hon(n.b,(Epn(),gct),n.g)}function HOn(n,t,e){var i,r,c,a,u;for(i=0,u=e,t||(i=e*(n.c.length-1),u*=-1),c=new Wb(n);c.a<c.c.c.length;){for(hon(r=BB(n0(c),10),(HXn(),kdt),(wvn(),OMt)),r.o.a=i,a=DSn(r,(kUn(),oIt)).Kc();a.Ob();)BB(a.Pb(),11).n.a=i;i+=u}}function qOn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),Ifn(n,t,e),i=n.Zi(3,null,e,t,c),n.bj()?(r=n.cj(e,null),n.ij()&&(r=n.jj(e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(Ifn(n,t,e),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function GOn(n,t,e){var i,r,c,a,u,o;return(u=n.Gk(e))!=e?(a=n.g[t],o=u,jL(n,t,n.oi(t,o)),c=a,n.gi(t,o,c),n.rk()&&(i=e,r=n.dj(i,null),!BB(u,49).eh()&&(r=n.cj(o,r)),r&&r.Fi()),mA(n.e)&&Lv(n,n.Zi(9,e,u,t,!1)),u):e}function zOn(n,t){var e,i,r;for(e=new Wb(n.a.a);e.a<e.c.c.length;)BB(n0(e),189).g=!0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)(i=BB(n0(r),81)).k=qy(TD(n.e.Kb(new rI(i,t)))),i.d.g=i.d.g&qy(TD(n.e.Kb(new rI(i,t))));return n}function UOn(n){var t,e,i,r,c;if(e=new YK(t=BB(Vj(FIt),9),BB(SR(t,t.length),9),0),c=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(c.j);r.a<r.c.c.length;)GI(mMn(i=BB(n0(r),11),dlt))===GI(n)&&zN(new m6(i.b))&&orn(e,i.j);return e}function XOn(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new oz(ZL(lbn(e).a.Kc(),new h));dAn(i);){for(c=new oz(ZL(fbn(a=BB(U5(i),17).d.i).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).c.i==t&&(n.a[r.p]=!0);XOn(n,t,a)}n.d[e.p]=!0}}function WOn(n,t){var e,i,r,c,a,u,o;if(1==(i=pbn(254&n.Db)))n.Eb=null;else if(c=een(n.Eb),2==i)r=Rmn(n,t),n.Eb=c[0==r?1:0];else{for(a=x8(Ant,HWn,1,i-1,5,1),e=2,u=0,o=0;e<=128;e<<=1)e==t?++u:0!=(n.Db&e)&&(a[o++]=c[u++]);n.Eb=a}n.Db&=~t}function VOn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new eU(FAt,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(DW(B7(n,e=BB(Wtn(i,r),170)))){case 4:case 5:case 6:!c&&(c=new Np),c.c[c.c.length]=e}return c||(SQ(),SQ(),set)}function QOn(n){var t;switch(t=0,n){case 105:t=2;break;case 109:t=8;break;case 115:t=4;break;case 120:t=16;break;case 117:t=32;break;case 119:t=64;break;case 70:t=256;break;case 72:t=128;break;case 88:t=512;break;case 44:t=k6n}return t}function YOn(n,t,e,i,r){var c,a,u,o;if(GI(n)!==GI(t)||i!=r)for(u=0;u<i;u++){for(a=0,c=n[u],o=0;o<r;o++)a=rbn(rbn(cbn(e0(c,UQn),e0(t[o],UQn)),e0(e[u+o],UQn)),e0(dG(a),UQn)),e[u+o]=dG(a),a=jz(a,32);e[u+r]=dG(a)}else I_n(n,i,e)}function JOn(n){var t,i,r,c,a,u,o,s,h,f,l;for(f=0,h=0,o=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),561)).b&&VBn(i),f+=(l=(t=i.a).a)+(u=t.b),h+=l*u;return s=e.Math.sqrt(400*o*h-4*h+f*f)+f,0==(a=2*(100*o-1))?s:s/a}function ZOn(n,t){0!=t.b&&(isNaN(n.s)?n.s=Gy((Px(0!=t.b),MD(t.a.a.c))):n.s=e.Math.min(n.s,Gy((Px(0!=t.b),MD(t.a.a.c)))),isNaN(n.c)?n.c=Gy((Px(0!=t.b),MD(t.c.b.c))):n.c=e.Math.max(n.c,Gy((Px(0!=t.b),MD(t.c.b.c)))))}function nAn(n){var t,e,i;for(t=null,e=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])));dAn(e);)if(i=PTn(BB(U5(e),82)),t){if(t!=JJ(i))return!0}else t=JJ(i);return!1}function tAn(n,t){var e,i,r,c;n.ej()?(e=n.i,c=n.fj(),c6(n,t),i=n.Zi(3,null,t,e,c),n.bj()?(r=n.cj(t,null),n.ij()&&(r=n.jj(t,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):n.$i(i)):(c6(n,t),n.bj()&&(r=n.cj(t,null))&&r.Fi())}function eAn(n,t,e){var i,r,c;n.ej()?(c=n.fj(),++n.j,n.Hi(t,n.oi(t,e)),i=n.Zi(3,null,e,t,c),n.bj()&&(r=n.cj(e,null))?(r.Ei(i),r.Fi()):n.$i(i)):(++n.j,n.Hi(t,n.oi(t,e)),n.bj()&&(r=n.cj(e,null))&&r.Fi())}function iAn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)b1(i,n.length),GO(".*+?{[()|\\^$",YTn(e=n.charCodeAt(i)))>=0?(t||(t=new Pk,i>0&&cO(t,n.substr(0,i))),t.a+="\\",NX(t,e&QVn)):t&&NX(t,e&QVn);return t?t.a:n}function rAn(n){var t;if(!n.a)throw Hp(new Fy("IDataType class expected for layout option "+n.f));if(null==(t=I3(n.a)))throw Hp(new Fy("Couldn't create new instance of property '"+n.f+"'. "+r5n+(ED(bAt),bAt.k)+c5n));return BB(t,414)}function cAn(n){var t,e,i,r,c;return(c=n.eh())&&c.kh()&&(r=tfn(n,c))!=c?(e=n.Vg(),i=(t=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-t,null,null),n.Rg(BB(r,49),e),i&&i.Fi(),n.Lg()&&n.Mg()&&e>-1&&ban(n,new nU(n,9,e,c,r)),r):c}function aAn(n){var t,e,i,r,c,a,u;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(l1(e,r.c.length),a=BB(r.c[e],144),i=e+1;i<r.c.length;++i)l1(i,r.c.length),u=BB(r.c[i],144),t=W8(a.d,u.d)-n.a[a.b][u.b],c+=n.i[a.b][u.b]*t*t;return c}function uAn(n,t){var e;if(!Lx(t,(HXn(),kgt))&&(e=Ekn(BB(mMn(t,est),360),BB(mMn(n,kgt),163)),hon(t,est,e),!dAn(new oz(ZL(hbn(t).a.Kc(),new h)))))switch(e.g){case 1:hon(t,kgt,(Tbn(),_lt));break;case 2:hon(t,kgt,(Tbn(),Blt))}}function oAn(n,t){var e;mRn(n),n.a=(e=new ok,JT(new Rq(null,new w1(t.d,16)),new Od(e)),e),Mxn(n,BB(mMn(t.b,(HXn(),igt)),376)),kvn(n),OAn(n),$kn(n),jvn(n),jqn(n,t),JT(wnn(new Rq(null,Y0(SX(n.b).a)),new Wr),new Vr),t.a=!1,n.a=null}function sAn(){dMn.call(this,y6n,(tE(),dOt)),this.p=null,this.a=null,this.f=null,this.n=null,this.g=null,this.c=null,this.i=null,this.j=null,this.d=null,this.b=null,this.e=null,this.k=null,this.o=null,this.s=null,this.q=!1,this.r=!1}function hAn(){hAn=O,iAt=new MI(G1n,0),nAt=new MI("INSIDE_SELF_LOOPS",1),tAt=new MI("MULTI_EDGES",2),ZOt=new MI("EDGE_LABELS",3),eAt=new MI("PORTS",4),YOt=new MI("COMPOUND",5),QOt=new MI("CLUSTERS",6),JOt=new MI("DISCONNECTED",7)}function fAn(n,t){var e,i,r;if(0==t)return 0!=(1&n.a[0]);if(t<0)throw Hp(new Oy("Negative bit address"));if((r=t>>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=Ccn(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function lAn(n,t,e,i){var r;BB(e.b,65),BB(e.b,65),BB(i.b,65),BB(i.b,65),NH(r=XR(B$(BB(e.b,65).c),BB(i.b,65).c),HCn(BB(e.b,65),BB(i.b,65),r)),BB(i.b,65),BB(i.b,65),BB(i.b,65).c.a,r.a,BB(i.b,65).c.b,r.b,BB(i.b,65),Otn(i.a,new TB(n,t,i))}function bAn(n,t){var e,i,r,c,a,u,o;if(c=t.e)for(e=cAn(c),i=BB(n.g,674),a=0;a<n.i;++a)if(qvn(o=i[a])==e&&(!o.d&&(o.d=new $L(VAt,o,1)),r=o.d,(u=BB(e.ah(gKn(c,c.Cb,c.Db>>16)),15).Xc(c))<r.i))return bAn(n,BB(Wtn(r,u),87));return t}function wAn(n,t,e){var i,r=SWn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?MWn=c:(!(i=t&&t.prototype)&&(i=SWn[t]),(MWn=qJ(i)).hm=e,!t&&(MWn.im=I),r[n]=MWn);for(var u=3;u<arguments.length;++u)arguments[u].prototype=MWn;a&&(MWn.gm=a)}function dAn(n){for(var t;!BB(yX(n.a),47).Ob();){if(n.d=osn(n),!n.d)return!1;if(n.a=BB(n.d.Pb(),47),cL(n.a,39)){if(t=BB(n.a,39),n.a=t.a,!n.b&&(n.b=new Lp),d3(n.b,n.d),t.b)for(;!Wy(t.b);)d3(n.b,BB(gU(t.b),47));n.d=t.d}}return!0}function gAn(n,t){var e,i,r,c,a;for(c=null==t?0:n.b.se(t),i=null==(e=n.a.get(c))?new Array:e,a=0;a<i.length;a++)if(r=i[a],n.b.re(t,r.cd()))return 1==i.length?(i.length=0,vR(n.a,c)):i.splice(a,1),--n.c,oY(n.b),r.dd();return null}function pAn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Wb(kbn(t));i.a<i.c.c.length;)e=BB(n0(i),213),n.c[e.c]||(n.c[e.c]=!0,c=Nbn(e,t),e.f?r+=pAn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,TU(n.p,e),r+=pAn(n,c)));return r}function vAn(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function mAn(n){var t,i,r,c,a;if(a=K_n(n,c=new Np),t=BB(mMn(n,(hWn(),Elt)),10))for(r=new Wb(t.j);r.a<r.c.c.length;)GI(mMn(i=BB(n0(r),11),dlt))===GI(n)&&(a=e.Math.max(a,K_n(i,c)));return 0==c.c.length||hon(n,blt,a),-1!=a?c:null}function yAn(n,t,e){var i,r,c,a,u,o;r=(i=(c=BB(xq(t.e,0),17).c).i).k,u=(a=(o=BB(xq(e.g,0),17).d).i).k,r==(uSn(),Put)?hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)):hon(n,(hWn(),hlt),c),hon(n,(hWn(),flt),u==Put?BB(mMn(a,flt),11):o)}function kAn(n,t){var e,i,r,c;for(e=(c=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&wW(i.i,t))return r?r.a=i.a:n.b[e]=i.a,kk(i.c,i.f),iv(i.b,i.e),--n.f,++n.e,!0;return!1}function jAn(n,t){var e,i,r,c,a;return t&=63,(i=0!=((e=n.h)&CQn))&&(e|=-1048576),t<22?(a=e>>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?PQn:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?PQn:0,c=i?SQn:0,r=e>>t-44),M$(r&SQn,c&SQn,a&PQn)}function EAn(n){var t,i,r,c,a,u;for(this.c=new Np,this.d=n,r=RQn,c=RQn,t=KQn,i=KQn,u=spn(n,0);u.b!=u.d.c;)a=BB(b3(u),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 UV(r,c,t-r,i-c)}function TAn(n,t){var e,i,r,c;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(BB(n0(i),29).a);c.a<c.c.c.length;)for((r=BB(n0(c),10)).k==(uSn(),Sut)&&hFn(r,t),e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)vun(BB(U5(e),17),t)}function MAn(n){var t,e,i;this.c=n,i=BB(mMn(n,(HXn(),Udt)),103),t=Gy(MD(mMn(n,Edt))),e=Gy(MD(mMn(n,Kpt))),i==(Ffn(),_Pt)||i==FPt||i==BPt?this.b=t*e:this.b=1/(t*e),this.j=Gy(MD(mMn(n,Apt))),this.e=Gy(MD(mMn(n,Opt))),this.f=n.b.c.length}function SAn(n){var t,e;for(n.e=x8(ANt,hQn,25,n.p.c.length,15,1),n.k=x8(ANt,hQn,25,n.p.c.length,15,1),e=new Wb(n.p);e.a<e.c.c.length;)t=BB(n0(e),10),n.e[t.p]=F3(new oz(ZL(fbn(t).a.Kc(),new h))),n.k[t.p]=F3(new oz(ZL(lbn(t).a.Kc(),new h)))}function PAn(n){var t,e,i,r,c;for(i=0,n.q=new Np,t=new Rv,c=new Wb(n.p);c.a<c.c.c.length;){for((r=BB(n0(c),10)).p=i,e=new oz(ZL(lbn(r).a.Kc(),new h));dAn(e);)TU(t,BB(U5(e),17).d.i);t.a.Bc(r),WB(n.q,new $q(t)),t.a.$b(),++i}}function CAn(){CAn=O,Okt=new WA(20),Ikt=new XA((sWn(),XSt),Okt),xkt=new XA(LPt,20),jkt=new XA(cSt,dZn),$kt=new XA(pPt,iln(1)),Nkt=new XA(kPt,(hN(),!0)),Ekt=lSt,Mkt=KSt,Skt=BSt,Pkt=qSt,Tkt=DSt,Ckt=USt,Akt=fPt,Ran(),Dkt=ykt,Lkt=vkt}function IAn(n,t){var e,i,r,c,a,u,o,s,h;if(n.a.f>0&&cL(t,42)&&(n.a.qj(),c=null==(o=(s=BB(t,42)).cd())?0:nsn(o),a=eR(n.a,c),e=n.a.d[a]))for(i=BB(e.g,367),h=e.i,u=0;u<h;++u)if((r=i[u]).Sh()==c&&r.Fb(s))return IAn(n,s),!0;return!1}function OAn(n){var t,e,i,r;for(r=BB(h6(n.a,(LEn(),Sst)),15).Kc();r.Ob();)iX(n,i=BB(r.Pb(),101),(e=(t=gz(i.k)).Hc((kUn(),sIt))?t.Hc(oIt)?t.Hc(SIt)?t.Hc(CIt)?null:$st:Nst:Lst:Ast)[0],(Crn(),xst),0),iX(n,i,e[1],Dst,1),iX(n,i,e[2],Rst,1)}function AAn(n,t){var e,i;Jxn(n,t,e=mKn(t)),iTn(n.a,BB(mMn(vW(t.b),(hWn(),Slt)),230)),b_n(n),DEn(n,t),i=x8(ANt,hQn,25,t.b.j.c.length,15,1),szn(n,t,(kUn(),sIt),i,e),szn(n,t,oIt,i,e),szn(n,t,SIt,i,e),szn(n,t,CIt,i,e),n.a=null,n.c=null,n.b=null}function $An(){$An=O,Sbn(),oEt=new $O(E4n,sEt=nEt),aEt=new $O(T4n,(hN(),!0)),iln(-1),iEt=new $O(M4n,iln(-1)),iln(-1),rEt=new $O(S4n,iln(-1)),uEt=new $O(P4n,!1),hEt=new $O(C4n,!0),cEt=new $O(I4n,!1),fEt=new $O(O4n,-1)}function LAn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new hK(_Ot,n,7,4)),sqn(n.e),!n.e&&(n.e=new hK(_Ot,n,7,4)),void pX(n.e,BB(e,14));case 8:return!n.d&&(n.d=new hK(_Ot,n,8,5)),sqn(n.d),!n.d&&(n.d=new hK(_Ot,n,8,5)),void pX(n.d,BB(e,14))}zjn(n,t,e)}function NAn(n,t){var e,i,r,c,a;if(GI(t)===GI(n))return!0;if(!cL(t,15))return!1;if(a=BB(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(GI(e)===GI(r)||null!=e&&Nfn(e,r)))return!1;return!0}function xAn(n,t){var e,i,r,c;for((c=BB(P4(wnn(wnn(new Rq(null,new w1(t.b,16)),new Re),new Ke),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Jc(new _e),e=0,r=c.Kc();r.Ob();)-1==(i=BB(r.Pb(),11)).p&&FAn(n,i,e++)}function DAn(n){switch(n.g){case 0:return new Cf;case 1:return new lf;case 2:return new ff;case 3:return new jI;case 4:return new _G;default:throw Hp(new _y("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function RAn(n){switch(n.g){case 0:return new KG;case 1:return new wf;case 2:return new rf;case 3:return new cf;case 4:return new TI;default:throw Hp(new _y("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function KAn(){KAn=O,mjt=new $O(u4n,iln(0)),yjt=new $O(o4n,0),Hsn(),djt=new $O(s4n,gjt=sjt),iln(0),wjt=new $O(h4n,iln(1)),Bcn(),kjt=new $O(f4n,jjt=Xjt),D9(),Ejt=new $O(l4n,Tjt=ajt),Omn(),pjt=new $O(b4n,vjt=qjt)}function _An(n,t,e){var i;i=null,t&&(i=t.d),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),Yjn(n,new dP(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function FAn(n,t,e){var i,r,c;for(t.p=e,c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(t),new Gw(t)])));dAn(c);)-1==(i=BB(U5(c),11)).p&&FAn(n,i,e);if(t.i.k==(uSn(),Put))for(r=new Wb(t.i.j);r.a<r.c.c.length;)(i=BB(n0(r),11))!=t&&-1==i.p&&FAn(n,i,e)}function BAn(n){var t,i,r,c,a;if(c=BB(P4($Z(a1(n)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),r=ZJn,c.gc()>=2)for(t=MD((i=c.Kc()).Pb());i.Ob();)a=t,t=MD(i.Pb()),r=e.Math.min(r,(kW(t),t-(kW(a),a)));return r}function HAn(n,t){var e,i,r,c,a;r5(i=new YT,t,i.c.b,i.c);do{for(Px(0!=i.b),e=BB(Atn(i,i.a.a),86),n.b[e.g]=1,c=spn(e.d,0);c.b!=c.d.c;)a=(r=BB(b3(c),188)).c,1==n.b[a.g]?DH(n.a,r):2==n.b[a.g]?n.b[a.g]=1:r5(i,a,i.c.b,i.c)}while(0!=i.b)}function qAn(n,t){var e,i,r;if(GI(t)===GI(yX(n)))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),(r=n.gc())!=i.gc())return!1;if(cL(i,54)){for(e=0;e<r;e++)if(!wW(n.Xb(e),i.Xb(e)))return!1;return!0}return Uvn(n.Kc(),i.Kc())}function GAn(n,t){var e;if(0!=n.c.length){if(2==n.c.length)hFn((l1(0,n.c.length),BB(n.c[0],10)),(Xyn(),jCt)),hFn((l1(1,n.c.length),BB(n.c[1],10)),ECt);else for(e=new Wb(n);e.a<e.c.c.length;)hFn(BB(n0(e),10),t);n.c=x8(Ant,HWn,1,0,5,1)}}function zAn(n){var t,e;if(2!=n.c.length)throw Hp(new Fy("Order only allowed for two paths."));l1(0,n.c.length),t=BB(n.c[0],17),l1(1,n.c.length),e=BB(n.c[1],17),t.d.i!=e.c.i&&(n.c=x8(Ant,HWn,1,0,5,1),n.c[n.c.length]=e,n.c[n.c.length]=t)}function UAn(n,t){var e,i,r,c,a;for(i=new v4,c=S4(new Jy(n.g)).a.ec().Kc();c.Ob();){if(!(r=BB(c.Pb(),10))){OH(t,"There are no classes in a balanced layout.");break}(e=BB(lnn(i,a=n.j[r.p]),15))||Jgn(i,a,e=new Np),e.Fc(r)}return i}function XAn(n,t,e){var i,r,c,a;if(e)for(r=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);r.Ob();)(c=x2(e,BB(r.Pb(),19).a))&&(a=Ken(R2(c,O6n),t),VW(n.f,a,c),q6n in c.a&&$in(a,R2(c,q6n)),STn(c,a),OCn(c,a))}function WAn(n,t){var e,i,r;for(OTn(t,"Port side processing",1),r=new Wb(n.a);r.a<r.c.c.length;)cBn(BB(n0(r),10));for(e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)cBn(BB(n0(i),10));HSn(t)}function VAn(n,t,e){var i,r,c,a,u;if(!(r=n.f)&&(r=BB(n.a.a.ec().Kc().Pb(),57)),Fkn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=BB(a.Pb(),57))!=r&&((u=f3(c)).f.d?(c.d.d+=i+fJn,c.d.a-=i+fJn):u.f.a&&(c.d.a-=i+fJn))}function QAn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w;return u=i-n,o=r-t,s=(a=e.Math.atan2(u,o))+JJn,h=a-JJn,f=c*e.Math.sin(s)+n,b=c*e.Math.cos(s)+t,l=c*e.Math.sin(h)+n,w=c*e.Math.cos(h)+t,u6(Pun(Gk(PMt,1),sVn,8,0,[new xC(f,b),new xC(l,w)]))}function YAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=Gy(n.p[l.p])+Gy(n.d[a.p])-a.d.d,(s=Ain(a,r))&&(h=n.g[s.p],u=Gy(n.p[h.p])+Gy(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function JAn(n,t,i,r){var c,a,u,o,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=Gy(n.p[l.p])+Gy(n.d[a.p])+a.o.b+a.d.a,(s=_un(a,r))&&(h=n.g[s.p],o=Gy(n.p[h.p])+Gy(n.d[s.p])-s.d.d,c=e.Math.min(c,o-(u+K$(n.k,a,s))))}while(f!=a);return c}function ZAn(n,t){var e,i;return!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),null!=(i=cdn(n.o,t))?i:(cL(e=t.wg(),4)&&(null==e?(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),Wdn(n.o,t)):(!n.o&&(n.o=new y9((CXn(),MOt),rAt,n,0)),vjn(n.o,t,e))),e)}function n$n(){n$n=O,ICt=new GC("H_LEFT",0),CCt=new GC("H_CENTER",1),ACt=new GC("H_RIGHT",2),DCt=new GC("V_TOP",3),xCt=new GC("V_CENTER",4),NCt=new GC("V_BOTTOM",5),$Ct=new GC("INSIDE",6),LCt=new GC("OUTSIDE",7),OCt=new GC("H_PRIORITY",8)}function t$n(n){var t,e,i,r,c,a,u;if((t=n.Hh(V9n))&&null!=(u=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"settingDelegates")))){for(e=new Np,c=0,a=(r=kKn(u,"\\w+")).length;c<a;++c)i=r[c],e.c[e.c.length]=i;return e}return SQ(),SQ(),set}function e$n(n,t){var e,i,r,c,a,u,o;if(!t.f)throw Hp(new _y("The input edge is not a tree edge."));for(c=null,r=DWn,i=new Wb(n.d);i.a<i.c.c.length;)u=(e=BB(n0(i),213)).d,o=e.e,FCn(n,u,t)&&!FCn(n,o,t)&&(a=o.e-u.e-e.a)<r&&(r=a,c=e);return c}function i$n(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=aAn(n),e=RQn;do{for(t>0&&(r=e),a=new Wb(n.f.e);a.a<a.c.c.length;)qy(TD(mMn(c=BB(n0(a),144),(rkn(),yat))))||(i=Z_n(n,c),UR(kO(c.d),i));e=aAn(n)}while(!JX(n,t++,r,e))}}function r$n(n,t){var e,i,r;for(OTn(t,"Layer constraint preprocessing",1),e=new Np,r=new M2(n.a,0);r.b<r.d.gc();)Px(r.b<r.d.gc()),Wun(i=BB(r.d.Xb(r.c=r.b++),10))&&(cTn(i),e.c[e.c.length]=i,fW(r));0==e.c.length||hon(n,(hWn(),nlt),e),HSn(t)}function c$n(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Wb(n.d);i.a<i.c.c.length;)r=(e=BB(n0(i),70)).n,n.a==(Oun(),mst)||n.i==(kUn(),oIt)?r.a=c:n.a==yst||n.i==(kUn(),CIt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,UR(r,t),a+=e.o.b+n.e}function a$n(n,t,e){var i,r,c,a;for(OTn(e,"Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,c=null,i=spn(t.b,0);!c&&i.b!=i.d.c;)qy(TD(mMn(a=BB(b3(i),86),(qqn(),dkt))))&&(c=a,(r=a.e).a=BB(mMn(a,gkt),19).a,r.b=0);_Sn(n,xun(c),mcn(e,1)),HSn(e)}function u$n(n,t,e){var i,r,c;for(OTn(e,"Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=spn(t.b,0);!r&&i.b!=i.d.c;)qy(TD(mMn(c=BB(b3(i),86),(qqn(),dkt))))&&(r=c);r&&Zxn(n,u6(Pun(Gk(Yyt,1),tZn,86,0,[r])),e),HSn(e)}function o$n(n,t){var e,i,r,c,a;(c=D2(n,"individualSpacings"))&&(!P8(t,(sWn(),CPt))&&(e=new Yu,Ypn(t,CPt,e)),r=BB(ZAn(t,CPt),373),i=null,(a=c)&&(i=new TT(a,jrn(a,x8(Qtt,sVn,2,0,6,1)))),i&&e5(i,new dI(a,r)))}function s$n(n,t){var e,i,r,c,a,u;return c=null,(J6n in(a=n).a||Z6n in a.a||D6n in a.a)&&(u=qun(t),i=D2(a,J6n),Own(new Hg(u).a,i),r=D2(a,Z6n),Iwn(new Jg(u).a,r),e=N2(a,D6n),PEn(new tp(u).a,e),c=e),c}function h$n(n,t){var e,i,r;if(t===n)return!0;if(cL(t,543)){if(r=BB(t,835),n.a.d!=r.a.d||EV(n).gc()!=EV(r).gc())return!1;for(i=EV(r).Kc();i.Ob();)if(c1(n,(e=BB(i.Pb(),416)).a.cd())!=BB(e.a.dd(),14).gc())return!1;return!0}return!1}function f$n(n){var t,e,i,r;return t=i=BB(n.a,19).a,e=r=BB(n.b,19).a,0==i&&0==r?e-=1:-1==i&&r<=0?(t=0,e-=2):i<=0&&r>0?(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 rI(iln(t),iln(e))}function l$n(n,t){return n.c<t.c?-1:n.c>t.c?1:n.b<t.b?-1:n.b>t.b?1:n.a!=t.a?nsn(n.a)-nsn(t.a):n.d==(Q4(),Hmt)&&t.d==Bmt?-1:n.d==Bmt&&t.d==Hmt?1:0}function b$n(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=zwn(n.a,a,i))>0&&r<ZJn?(e=YAn(n.a,i.i,r,n.c),ren(n.a,i.i,-e),e>0):r<0&&-r<ZJn&&(e=JAn(n.a,i.i,-r,n.c),ren(n.a,i.i,e),e>0)}function w$n(n,t,e,i){var r,c,a,u,o,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Wb(n.c);s.a<s.c.c.length;)u=(o=BB(n0(s),33)).g,a=o.f,Pen(o,o.i+c*r),Cen(o,o.j+i*e),Sen(o,o.g+r),Men(o,n.a),++c,lCn(o,new xC(o.g,o.f),new xC(u,a))}function d$n(n){var t,e,i,r,c,a,u;if(null==n)return null;for(u=n.length,a=x8(NNt,v6n,25,r=(u+1)/2|0,15,1),u%2!=0&&(a[--r]=ZDn((b1(u-1,n.length),n.charCodeAt(u-1)))),e=0,i=0;e<r;++e)t=ZDn(fV(n,i++)),c=ZDn(fV(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function g$n(n){if(n.pe()){var t=n.c;return t.qe()?n.o="["+t.n:t.pe()?n.o="["+t.ne():n.o="[L"+t.ne()+";",n.b=t.me()+"[]",void(n.k=t.oe()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=Fdn(".",[e,Fdn("$",i)]),n.b=Fdn(".",[e,Fdn(".",i)]),n.k=i[i.length-1]}function p$n(n,t){var e,i,r,c,a;for(a=null,c=new Wb(n.e.a);c.a<c.c.c.length;)if((r=BB(n0(c),121)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=ePn(r),e=r.e-BB(a.a,19).a+1;e<r.e+BB(a.b,19).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function v$n(n){var t,i,r,c,a,u,o;for(r=RQn,i=KQn,t=new Wb(n.e.b);t.a<t.c.c.length;)for(a=new Wb(BB(n0(t),29).a);a.a<a.c.c.length;)c=BB(n0(a),10),u=(o=Gy(n.p[c.p]))+Gy(n.b[n.g[c.p].p]),r=e.Math.min(r,o),i=e.Math.max(i,u);return i-r}function m$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=jKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function y$n(n,t,e,i){var r,c,a,u,o,s;for(o=null,u=0,s=(r=EKn(n,t)).gc();u<s;++u)if(mK(i,kV(B7(n,c=BB(r.Xb(u),170)))))if(a=jV(B7(n,c)),null==e){if(null==a)return c;!o&&(o=c)}else{if(mK(e,a))return c;null==a&&!o&&(o=c)}return null}function k$n(n,t,e){var i,r,c,a,u,o;if(a=new go,u=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj())for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&f9(a,r);else for(c=0;c<n.i;++c)r=i[c],u.rl(r.ak())&&(o=r.dd(),f9(a,e?FIn(n,t,c,a.i,o):o));return N3(a)}function j$n(n,t){var e,i,r,c;for(e=new Hbn(uht),$Pn(),r=0,c=(i=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;r<c;++r)wR(e,i[r],new Np);return JT($V(AV(wnn(new Rq(null,new w1(n.b,16)),new Ze),new ni),new hd(t)),new fd(e)),e}function E$n(n,t,i){var r,c,a,u,o,s,h,f;for(a=t.Kc();a.Ob();)s=(c=BB(a.Pb(),33)).i+c.g/2,f=c.j+c.f/2,o=s-((u=n.f).i+u.g/2),h=f-(u.j+u.f/2),r=e.Math.sqrt(o*o+h*h),o*=n.e/r,h*=n.e/r,i?(s-=o,f-=h):(s+=o,f+=h),Pen(c,s-c.g/2),Cen(c,f-c.f/2)}function T$n(n){var t,e,i;if(!n.c&&null!=n.b){for(t=n.b.length-4;t>=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 M$n(n,t){var e,i,r,c,a,u;for(c=(1==t?Wat:Xat).a.ec().Kc();c.Ob();)for(r=BB(c.Pb(),103),u=BB(h6(n.f.c,r),21).Kc();u.Ob();)switch(a=BB(u.Pb(),46),i=BB(a.b,81),e=BB(a.a,189).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function S$n(n,t){var e,i,r,c,a,u,o,s,h;for(s=-1,h=0,u=0,o=(a=n).length;u<o;++u){for(c=a[u],e=new kH(-1==s?n[0]:n[s],t,(Mhn(),uvt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)Lx(c[i],(hWn(),wlt))&&Lx(c[r],wlt)&&fXn(e,c[i],c[r])>0&&++h;++s}return h}function P$n(n){var t;return(t=new lN(nE(n.gm))).a+="@",oO(t,(nsn(n)>>>0).toString(16)),n.kh()?(t.a+=" (eProxyURI: ",uO(t,n.qh()),n.$g()&&(t.a+=" eClass: ",uO(t,n.$g())),t.a+=")"):n.$g()&&(t.a+=" (eClass: ",uO(t,n.$g()),t.a+=")"),t.a}function C$n(n){var t,e,i;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));for(n.d==(Ffn(),BPt)&&Tzn(n,_Pt),e=new Wb(n.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).g=t.i;for(i=new Wb(n.a.b);i.a<i.c.c.length;)BB(n0(i),57).i=KQn;return n.b.Le(n),n}function I$n(n,t){var e,i,r,c,a;if(t<2*n.b)throw Hp(new _y("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)WB(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)WB(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)WB(n.e,1)}function O$n(n,t){var e,i,r,c,a;if(c=t,!(a=BB(Uin(PX(n.i),c),33)))throw Hp(new ek("Unable to find elk node for json object '"+R2(c,q6n)+"' Panic!"));i=N2(c,"edges"),LIn((e=new uI(n,a)).a,e.b,i),r=N2(c,A6n),Dkn(new Ng(n).a,r)}function A$n(n,t,e,i){var r,c,a,u,o;if(null!=i){if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if((a=BB(c[u],133)).Sh()==e&&Nfn(i,a.cd()))return u}else if(r=n.d[t])for(c=r.g,o=r.i,u=0;u<o;++u)if(GI((a=BB(c[u],133)).cd())===GI(i))return u;return-1}function $$n(n,t){var e,i;return cL(e=null==t?qI(AY(n.f,null)):hS(n.g,t),235)?((i=BB(e,235)).Qh(),i):cL(e,498)?((i=BB(e,1938).a)&&(null==i.yb||(null==t?jCn(n.f,null,i):ubn(n.g,t,i))),i):null}function L$n(n){var t,e,i,r,c,a,u;if(KDn(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=V7(n),e=x8(NNt,v6n,25,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=QLt[t[2*i]]))return null;if(-1==(u=QLt[t[2*i+1]]))return null;e[i]=(a<<4|u)<<24>>24}return e}function N$n(n,t,e){var i,r,c;if(!(r=BB(oV(n.i,t),306)))if(r=new wtn(n.d,t,e),mG(n.i,t,r),agn(t))EL(n.a,t.c,t.b,r);else switch(c=LPn(t),i=BB(oV(n.p,c),244),c.g){case 1:case 3:r.j=!0,jy(i,t.b,r);break;case 4:case 2:r.k=!0,jy(i,t.c,r)}return r}function x$n(n,t,e,i){var r,c,a,u,o,s;if(u=new go,o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj())for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&f9(u,c);else for(a=0;a<n.i;++a)c=r[a],o.rl(c.ak())&&(s=c.dd(),f9(u,i?FIn(n,t,a,u.i,s):s));return Qwn(u,e)}function D$n(n,t){var i,r,c,a,u,o;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Wb(t.j);a.a<a.c.c.length;)for(i=new Wb(BB(n0(a),11).g);i.a<i.c.c.length;)t!=(o=BB(n0(i),17).d.i)&&(u=D$n(n,o),c=e.Math.max(c,u+1));return iwn(n,t,c),c}function R$n(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(l1(i,n.c.length),c=BB(n.c[i],10),r=i;r>0&&t.ue((l1(r-1,n.c.length),BB(n.c[r-1],10)),c)>0;)c5(n,r,(l1(r-1,n.c.length),BB(n.c[r-1],10))),--r;l1(r,n.c.length),n.c[r]=c}e.a=new xp,e.b=new xp}function K$n(n,t,e){var i,r,c,a,u,o,s;for(s=new YK(i=BB(t.e&&t.e(),9),BB(SR(i,i.length),9),0),a=0,u=(c=kKn(e,"[\\[\\]\\s,]+")).length;a<u;++a)if(0!=RMn(r=c[a]).length){if(null==(o=HIn(n,r)))return null;orn(s,BB(o,22))}return s}function _$n(n){var t,i,r;for(i=new Wb(n.a.a.b);i.a<i.c.c.length;)t=BB(n0(i),81),kW(0),(r=0)>0&&((!dA(n.a.c)||!t.n.d)&&(!gA(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!dA(n.a.c)||!t.n.a)&&(!gA(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function F$n(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(kUn(),sIt)||t==oIt?(jtn(BB(Eon(n),15),(Xyn(),jCt)),jtn(BB(Eon(n),15),ECt)):(jtn(BB(Eon(n),15),(Xyn(),ECt)),jtn(BB(Eon(n),15),jCt));else for(i=new bV(n);i.a!=i.b;)jtn(BB(_hn(i),15),e)}function B$n(n,t){var e,i,r,c,a,u;for(a=new M2(i=HB(new sp(n)),i.c.length),u=new M2(r=HB(new sp(t)),r.c.length),c=null;a.b>0&&u.b>0&&(Px(a.b>0),e=BB(a.a.Xb(a.c=--a.b),33),Px(u.b>0),e==BB(u.a.Xb(u.c=--u.b),33));)c=e;return c}function H$n(n,t){var i,r,c,a;return c=n.a*aYn+1502*n.b,a=n.b*aYn+11,c+=i=e.Math.floor(a*uYn),a-=i*oYn,c%=oYn,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*Oet[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*Aet[t]))>=2147483648&&(r-=XQn),r)}function q$n(n,t,e){var i,r,c,a;w0(n,t)>w0(n,e)?(i=abn(e,(kUn(),oIt)),n.d=i.dc()?0:uq(BB(i.Xb(0),11)),a=abn(t,CIt),n.b=a.dc()?0:uq(BB(a.Xb(0),11))):(r=abn(e,(kUn(),CIt)),n.d=r.dc()?0:uq(BB(r.Xb(0),11)),c=abn(t,oIt),n.b=c.dc()?0:uq(BB(c.Xb(0),11)))}function G$n(n){var t,e,i,r,c,a,u;if(n&&(t=n.Hh(V9n))&&null!=(a=SD(cdn((!t.b&&(t.b=new Jx((gWn(),k$t),X$t,t)),t.b),"conversionDelegates")))){for(u=new Np,r=0,c=(i=kKn(a,"\\w+")).length;r<c;++r)e=i[r],u.c[u.c.length]=e;return u}return SQ(),SQ(),set}function z$n(n,t){var e,i,r,c;for(e=n.o.a,c=BB(BB(h6(n.r,t),21),84).Kc();c.Ob();)(r=BB(c.Pb(),111)).e.a=e*Gy(MD(r.b.We(Lrt))),r.e.b=(i=r.b).Xe((sWn(),aPt))?i.Hf()==(kUn(),sIt)?-i.rf().b-Gy(MD(i.We(aPt))):Gy(MD(i.We(aPt))):i.Hf()==(kUn(),sIt)?-i.rf().b:0}function U$n(n){var t,e,i,r,c,a,u,o;t=!0,r=null,c=null;n:for(o=new Wb(n.a);o.a<o.c.c.length;)for(i=new oz(ZL(fbn(u=BB(n0(o),10)).a.Kc(),new h));dAn(i);){if(e=BB(U5(i),17),r&&r!=u){t=!1;break n}if(r=u,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function X$n(n,t,e){var i,r,c,a,u,o;for(c=-1,u=-1,a=0;a<t.c.length&&(l1(a,t.c.length),!((r=BB(t.c[a],329)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),u=a);return o=(n.s+n.c)/2,c>=0&&(o=qM((l1(i=YRn(n,t,c,u),t.c.length),BB(t.c[i],329))),lOn(t,i,e)),o}function W$n(){W$n=O,lEt=new XA((sWn(),cSt),1.3),gEt=jSt,IEt=new WA(15),CEt=new XA(XSt,IEt),$Et=new XA(LPt,15),bEt=hSt,jEt=KSt,EEt=BSt,TEt=qSt,kEt=DSt,MEt=USt,OEt=fPt,$An(),PEt=oEt,yEt=aEt,SEt=uEt,AEt=hEt,pEt=cEt,vEt=CSt,mEt=ISt,dEt=rEt,wEt=iEt,LEt=fEt}function V$n(n,t,e){var i,r,c,a,u;for(Bin(r=new jo,(kW(t),t)),!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),u=r.b,a=1;a<e.length;a+=2)vjn(u,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new eU(KAt,n,0,3)),i=n.Ab,c=0;c<0;++c)i=mW(BB(Wtn(i,i.i-1),590));f9(i,r)}function Q$n(n,t,e){var i,r,c;for(LD.call(this,new Np),this.a=t,this.b=e,this.e=n,n.b&&VBn(n),i=n.a,this.d=JV(i.a,this.a),this.c=JV(i.b,this.b),obn(this,this.d,this.c),mIn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=BB(c.Pb(),266)).c.c.length>0&&xqn(this,r)}function Y$n(n,t,e,i,r,c){var a,u,o;if(!r[t.b]){for(r[t.b]=!0,!(a=i)&&(a=new y6),WB(a.e,t),o=c[t.b].Kc();o.Ob();)(u=BB(o.Pb(),282)).d!=e&&u.c!=e&&(u.c!=t&&Y$n(n,u.c,t,a,r,c),u.d!=t&&Y$n(n,u.d,t,a,r,c),WB(a.c,u),gun(a.d,u.b));return a}return null}function J$n(n){var t,e,i;for(t=0,e=new Wb(n.e);e.a<e.c.c.length;)o5(new Rq(null,new w1(BB(n0(e),17).b,16)),new pe)&&++t;for(i=new Wb(n.g);i.a<i.c.c.length;)o5(new Rq(null,new w1(BB(n0(i),17).b,16)),new ve)&&++t;return t>=2}function Z$n(n,t){var e,i,r,c;for(OTn(t,"Self-Loop pre-processing",1),i=new Wb(n.a);i.a<i.c.c.length;)Kbn(e=BB(n0(i),10))&&(c=new Ogn(e),hon(e,(hWn(),Olt),c),k_n(c),JT($V(wnn(new Rq(null,new w1((r=c).d,16)),new Hi),new qi),new Gi),ixn(r));HSn(t)}function nLn(n,t,e,i,r){var c,a,u,o,s;for(c=n.c.d.j,a=BB(Dpn(e,0),8),s=1;s<e.b;s++)o=BB(Dpn(e,s),8),r5(i,a,i.c.b,i.c),u=kL(UR(new wA(a),o),.5),UR(u,kL(new XZ(hsn(c)),r)),r5(i,u,i.c.b,i.c),a=o,c=0==t?Mln(c):Eln(c);DH(i,(Px(0!=e.b),BB(e.c.b.c,8)))}function tLn(n){return n$n(),!(Can(OJ(EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[LCt])),n))>1||Can(OJ(EG(ICt,Pun(Gk(GCt,1),$Vn,93,0,[CCt,ACt])),n))>1||Can(OJ(EG(DCt,Pun(Gk(GCt,1),$Vn,93,0,[xCt,NCt])),n))>1)}function eLn(n,t){var e,i,r;return(e=t.Hh(n.a))&&null!=(r=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"affiliation")))?-1==(i=mN(r,YTn(35)))?uln(n,az(n,Utn(t.Hj())),r):0==i?uln(n,null,r.substr(1)):uln(n,r.substr(0,i),r.substr(i+1)):null}function iLn(n){var t,e;try{return null==n?zWn:Bbn(n)}catch(i){if(cL(i=lun(i),102))return t=i,e=nE(tsn(n))+"@"+($T(),(evn(n)>>>0).toString(16)),Kgn(jun(),(lM(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+nE(t.gm)+">";throw Hp(i)}}function rLn(n){switch(n.g){case 0:return new of;case 1:return new ef;case 2:return new $M;case 3:return new Ic;case 4:return new RR;case 5:return new sf;default:throw Hp(new _y("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function cLn(n,t,e){var i,r,c;for(c=new Wb(n.t);c.a<c.c.c.length;)(i=BB(n0(c),268)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&DH(t,i.b));for(r=new Wb(n.i);r.a<r.c.c.length;)(i=BB(n0(r),268)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&DH(e,i.a))}function aLn(n){var t,e,i;if(null==n.g&&(n.d=n.si(n.f),f9(n,n.d),n.c))return n.f;if(i=(t=BB(n.g[n.i-1],47)).Pb(),n.e=t,(e=n.si(i)).Ob())n.d=e,f9(n,e);else for(n.d=null;!t.Ob()&&($X(n.g,--n.i,null),0!=n.i);)t=BB(n.g[n.i-1],47);return i}function uLn(n,t){var e,i,r,c,a,u;if(r=(i=t).ak(),$xn(n.e,r)){if(r.hi()&&G3(n,r,i.dd()))return!1}else for(u=axn(n.e.Tg(),r),e=BB(n.g,119),c=0;c<n.i;++c)if(a=e[c],u.rl(a.ak()))return!Nfn(a,i)&&(BB(ovn(n,c,t),72),!0);return f9(n,t)}function oLn(n,t,i,r){var c,a,u;for(Bl(c=new $vn(n),(uSn(),Sut)),hon(c,(hWn(),dlt),t),hon(c,Plt,r),hon(c,(HXn(),ept),(QEn(),XCt)),hon(c,hlt,t.c),hon(c,flt,t.d),zxn(t,c),u=e.Math.floor(i/2),a=new Wb(c.j);a.a<a.c.c.length;)BB(n0(a),11).n.b=u;return c}function sLn(n,t){var e,i,r,c,a,u,o,s,h;for(o=sx(n.c-n.b&n.a.length-1),s=null,h=null,c=new bV(n);c.a!=c.b;)r=BB(_hn(c),10),e=(u=BB(mMn(r,(hWn(),hlt)),11))?u.i:null,i=(a=BB(mMn(r,flt),11))?a.i:null,s==e&&h==i||(GAn(o,t),s=e,h=i),o.c[o.c.length]=r;GAn(o,t)}function hLn(n){var t,i,r,c,a,u;for(t=0,i=new Wb(n.a);i.a<i.c.c.length;)for(c=new oz(ZL(lbn(BB(n0(i),10)).a.Kc(),new h));dAn(c);)n==(r=BB(U5(c),17)).d.i.c&&r.c.j==(kUn(),CIt)&&(a=g1(r.c).b,u=g1(r.d).b,t=e.Math.max(t,e.Math.abs(u-a)));return t}function fLn(n,t,e){var i,r;OTn(e,"Remove overlaps",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),i=BB(ZAn(t,(wD(),Vkt)),33),n.f=i,n.a=Evn(BB(ZAn(t,(Uyn(),Rjt)),293)),ib(n,(kW(r=MD(ZAn(t,(sWn(),LPt)))),r)),Xzn(n,t,wDn(i),e),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function lLn(n,t,i){switch(i.g){case 1:return new xC(t.a,e.Math.min(n.d.b,t.b));case 2:return new xC(e.Math.max(n.c.a,t.a),t.b);case 3:return new xC(t.a,e.Math.max(n.c.b,t.b));case 4:return new xC(e.Math.min(t.a,n.d.a),t.b)}return new xC(t.a,t.b)}function bLn(n,t,e,i){var r,c,a,u,o,s,h,f,l;for(f=i?(kUn(),CIt):(kUn(),oIt),r=!1,s=0,h=(o=t[e]).length;s<h;++s)LK(BB(mMn(u=o[s],(HXn(),ept)),98))||(a=u.e,(l=!abn(u,f).dc()&&!!a)&&(c=qEn(a),n.b=new zEn(c,i?0:c.length-1)),r|=c_n(n,u,f,l));return r}function wLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).d&&(e.d=new hK(_Ot,e,8,5)),e.d));return yX(t),new OO(t)}function dLn(n){var t,e,i;for(WB(t=sx(1+(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c).i),(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),i=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));i.e!=i.i.gc();)WB(t,(!(e=BB(kpn(i),118)).e&&(e.e=new hK(_Ot,e,7,4)),e.e));return yX(t),new OO(t)}function gLn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return HLt;if(45==t)return BLt}else if(3==e)return HLt;return bSn(i)}function pLn(n){var t,e,i,r;for(t=0,e=0,r=new Wb(n.j);r.a<r.c.c.length;)if(t=dG(rbn(t,q6(AV(new Rq(null,new w1((i=BB(n0(r),11)).e,16)),new Yc)))),e=dG(rbn(e,q6(AV(new Rq(null,new w1(i.g,16)),new Jc)))),t>1||e>1)return 2;return t+e==1?2:0}function vLn(n,t,e){var i,r,c,a;for(OTn(e,"ELK Force",1),qy(TD(ZAn(t,(fRn(),Wct))))||jJ(new Tw((GM(),new Dy(t)))),kkn(a=fon(t)),zon(n,BB(mMn(a,Gct),424)),r=(c=HFn(n.a,a)).Kc();r.Ob();)i=BB(r.Pb(),231),PKn(n.b,i,mcn(e,1/c.gc()));SUn(a=GUn(c)),HSn(e)}function mLn(n,t){var e,i,r;if(OTn(t,"Breaking Point Processor",1),Ozn(n),qy(TD(mMn(n,(HXn(),Gpt))))){for(i=new Wb(n.b);i.a<i.c.c.length;)for(e=0,r=new Wb(BB(n0(i),29).a);r.a<r.c.c.length;)BB(n0(r),10).p=e++;oHn(n),Hxn(n,!0),Hxn(n,!1)}HSn(t)}function yLn(n,t,e){var i,r,c,a,u;for(a=n.c,c=(e.q?e.q:(SQ(),SQ(),het)).vc().Kc();c.Ob();)r=BB(c.Pb(),42),!jE(AV(new Rq(null,new w1(a,16)),new aw(new LC(t,r)))).sd((dM(),tit))&&(cL(u=r.dd(),4)&&null!=(i=Jdn(u))&&(u=i),t.Ye(BB(r.cd(),146),u))}function kLn(n,t){var e,i,r,c;if(t){for(c=!(r=cL(n.Cb,88)||cL(n.Cb,99))&&cL(n.Cb,322),e=new AL((!t.a&&(t.a=new aG(t,VAt,t)),t.a));e.e!=e.i.gc();)if(i=lFn(BB(kpn(e),87)),r?cL(i,88):c?cL(i,148):i)return i;return r?(gWn(),d$t):(gWn(),l$t)}return null}function jLn(n,t){var e,i,r,c,a;for(OTn(t,"Constraints Postprocessor",1),c=0,r=new Wb(n.b);r.a<r.c.c.length;){for(a=0,i=new Wb(BB(n0(r),29).a);i.a<i.c.c.length;)(e=BB(n0(i),10)).k==(uSn(),Cut)&&(hon(e,(HXn(),jgt),iln(c)),hon(e,Bdt,iln(a)),++a);++c}HSn(t)}function ELn(n,t,e,i){var r,c,a,u,o,s;for(XR(u=new xC(e,i),BB(mMn(t,(qqn(),nkt)),8)),s=spn(t.b,0);s.b!=s.d.c;)UR((o=BB(b3(s),86)).e,u),DH(n.b,o);for(a=spn(t.a,0);a.b!=a.d.c;){for(r=spn((c=BB(b3(a),188)).a,0);r.b!=r.d.c;)UR(BB(b3(r),8),u);DH(n.a,c)}}function TLn(n,t,e){var i,r,c;if(!(c=Fqn((IPn(),Z$t),n.Tg(),t)))throw Hp(new _y(r6n+t.ne()+c6n));if(ZM(),!BB(c,66).Oj()&&!(c=Z1(B7(Z$t,c))))throw Hp(new _y(r6n+t.ne()+c6n));r=BB((i=n.Yg(c))>=0?n._g(i,!0,!0):cOn(n,c,!0),153),BB(r,215).ml(t,e)}function MLn(n,t){var e,i,r,c,a;for(e=new Np,r=wnn(new Rq(null,new w1(n,16)),new Ea),c=wnn(new Rq(null,new w1(n,16)),new Ta),a=M7(H6(LV(SNn(Pun(Gk(eit,1),HWn,833,0,[r,c])),new Ma))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&WB(e,new kB(a[i-1]+t,a[i]-t));return e}function SLn(n,t,e){OTn(e,"Eades radial",1),e.n&&t&&y0(e,o2(t),(Bsn(),uOt)),n.d=BB(ZAn(t,(wD(),Vkt)),33),n.c=Gy(MD(ZAn(t,(Uyn(),Djt)))),n.e=Evn(BB(ZAn(t,Rjt),293)),n.a=lwn(BB(ZAn(t,_jt),426)),n.b=qjn(BB(ZAn(t,$jt),340)),rjn(n),e.n&&t&&y0(e,o2(t),(Bsn(),uOt))}function PLn(n,t,e){var i,r,c,a,u;if(e)for(c=((i=new hz(e.a.length)).b-i.a)*i.c<0?(eS(),MNt):new XL(i);c.Ob();)(r=x2(e,BB(c.Pb(),19).a))&&($in(a=$3(n,(tE(),u=new Em,!!t&&BLn(u,t),u),r),R2(r,q6n)),STn(r,a),OCn(r,a),xon(n,r,a))}function CLn(n){var t,e,i,r;if(!n.j){if(r=new Io,null==(t=P$t).a.zc(n,t)){for(i=new AL(kY(n));i.e!=i.i.gc();)pX(r,CLn(e=BB(kpn(i),26))),f9(r,e);t.a.Bc(n)}chn(r),n.j=new NO((BB(Wtn(QQ((QX(),t$t).o),11),18),r.i),r.g),P5(n).b&=-33}return n.j}function ILn(n){var t,e,i,r;if(null==n)return null;if(i=FBn(n,!0),r=x7n.length,mK(i.substr(i.length-r,r),x7n))if(4==(e=i.length)){if(b1(0,i.length),43==(t=i.charCodeAt(0)))return GLt;if(45==t)return qLt}else if(3==e)return GLt;return new Dv(i)}function OLn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?gin(e):0==t&&0!=i&&0==e?gin(i)+22:0!=t&&0==i&&0==e?gin(t)+44:-1}function ALn(n,t){var e,i,r,c;for(OTn(t,"Edge joining",1),e=qy(TD(mMn(n,(HXn(),Dpt)))),i=new Wb(n.b);i.a<i.c.c.length;)for(c=new M2(BB(n0(i),29).a,0);c.b<c.d.gc();)Px(c.b<c.d.gc()),(r=BB(c.d.Xb(c.c=c.b++),10)).k==(uSn(),Put)&&(rGn(r,e),fW(c));HSn(t)}function $Ln(n,t,e){var i;if(h2(n.b),CU(n.b,(Pbn(),HEt),(OM(),GTt)),CU(n.b,qEt,t.g),CU(n.b,GEt,t.a),n.a=$qn(n.b,t),OTn(e,"Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Wb(n.a);i.a<i.c.c.length;)BB(n0(i),51).pf(t,mcn(e,1));HSn(e)}function LLn(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 NLn(n){var t,i,r,c,a,u,o,s,h,f;for(i=n.o,t=n.p,u=DWn,c=_Vn,o=DWn,a=_Vn,h=0;h<i;++h)for(f=0;f<t;++f)vmn(n,h,f)&&(u=e.Math.min(u,h),c=e.Math.max(c,h),o=e.Math.min(o,f),a=e.Math.max(a,f));return s=c-u+1,r=a-o+1,new VV(iln(u),iln(o),iln(s),iln(r))}function xLn(n,t){var e,i,r,c;for(Px((c=new M2(n,0)).b<c.d.gc()),e=BB(c.d.Xb(c.c=c.b++),140);c.b<c.d.gc();)Px(c.b<c.d.gc()),r=new mH((i=BB(c.d.Xb(c.c=c.b++),140)).c,e.d,t),Px(c.b>0),c.a.Xb(c.c=--c.b),yR(c,r),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function DLn(n){var t,e,i,r,c;for(i=BB(mMn(n,(hWn(),Kft)),11),c=new Wb(n.j);c.a<c.c.c.length;){for(e=new Wb((r=BB(n0(c),11)).g);e.a<e.c.c.length;)return MZ(BB(n0(e),17),i),r;for(t=new Wb(r.e);t.a<t.c.c.length;)return SZ(BB(n0(t),17),i),r}return null}function RLn(n,t,i){var r,c;Vhn(r=fan(i.q.getTime()),0)<0?(c=VVn-dG(ldn(j7(r),VVn)))==VVn&&(c=0):c=dG(ldn(r,VVn)),1==t?xX(n,48+(c=e.Math.min((c+50)/100|0,9))&QVn):2==t?Enn(n,c=e.Math.min((c+5)/10|0,99),2):(Enn(n,c,3),t>3&&Enn(n,0,t-3))}function KLn(n){var t,e,i,r;return GI(mMn(n,(HXn(),sgt)))===GI((ufn(),pCt))?!n.e&&GI(mMn(n,Rdt))!==GI((Kan(),kft)):(i=BB(mMn(n,Kdt),292),r=qy(TD(mMn(n,Hdt)))||GI(mMn(n,qdt))===GI((Oin(),sht)),t=BB(mMn(n,Ddt),19).a,e=n.a.c.length,!r&&i!=(Kan(),kft)&&(0==t||t>e))}function _Ln(n){var t,e;for(e=0;e<n.c.length&&!(sq((l1(e,n.c.length),BB(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(sq((l1(t,n.c.length),BB(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function FLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(vkn(n,t))throw Hp(new _y(w6n+ROn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,6,i)),(i=QD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,6,t,t))}function BLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(vkn(n,t))throw Hp(new _y(w6n+URn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?fkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,9,i)),(i=YD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,9,t,t))}function HLn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+lHn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Mkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,12,i)),(i=VD(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function qLn(n){var t,e,i,r,c;if(i=Ikn(n),null==(c=n.j)&&i)return n.$j()?null:i.zj();if(cL(i,148)){if((e=i.Aj())&&(r=e.Nh())!=n.i){if((t=BB(i,148)).Ej())try{n.g=r.Kh(t,c)}catch(a){if(!cL(a=lun(a),78))throw Hp(a);n.g=null}n.i=r}return n.g}return null}function GLn(n){var t;return WB(t=new Np,new xS(new xC(n.c,n.d),new xC(n.c+n.b,n.d))),WB(t,new xS(new xC(n.c,n.d),new xC(n.c,n.d+n.a))),WB(t,new xS(new xC(n.c+n.b,n.d+n.a),new xC(n.c+n.b,n.d))),WB(t,new xS(new xC(n.c+n.b,n.d+n.a),new xC(n.c,n.d+n.a))),t}function zLn(n,t,e,i){var r,c,a;if(a=Ajn(t,e),i.c[i.c.length]=t,-1==n.j[a.p]||2==n.j[a.p]||n.a[t.p])return i;for(n.j[a.p]=-1,c=new oz(ZL(hbn(a).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&(b5(r)||r.c.i.c!=r.d.i.c)&&r!=t)return zLn(n,r,a,i);return i}function ULn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=BB(r.Pb(),79),!BB(RX(n.b,i),266)&&(JJ(PMn(i))==JJ(OMn(i))?tDn(n,i,e):PMn(i)==JJ(OMn(i))?null==RX(n.c,i)&&null!=RX(n.b,OMn(i))&&rzn(n,i,e,!1):null==RX(n.d,i)&&null!=RX(n.b,PMn(i))&&rzn(n,i,e,!0))}function XLn(n,t){var e,i,r,c,a,u,o;for(r=n.Kc();r.Ob();)for(i=BB(r.Pb(),10),CZ(u=new CSn,i),qCn(u,(kUn(),oIt)),hon(u,(hWn(),jlt),(hN(),!0)),a=t.Kc();a.Ob();)c=BB(a.Pb(),10),CZ(o=new CSn,c),qCn(o,CIt),hon(o,jlt,!0),hon(e=new wY,jlt,!0),SZ(e,u),MZ(e,o)}function WLn(n,t,e,i){var r,c,a,u;r=Adn(n,t,e),c=Adn(n,e,t),a=BB(RX(n.c,t),112),u=BB(RX(n.c,e),112),r<c?new zZ((O6(),Myt),a,u,c-r):c<r?new zZ((O6(),Myt),u,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new zZ((O6(),Myt),a,u,0),new zZ(Myt,u,a,0))}function VLn(n,t){var e,i,r,c,a,u;for(r=0,a=new Wb(t.a);a.a<a.c.c.length;)for(r+=(c=BB(n0(a),10)).o.b+c.d.a+c.d.d+n.e,i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)(e=BB(U5(i),17)).c.i.k==(uSn(),Iut)&&(r+=(u=BB(mMn(e.c.i,(hWn(),dlt)),10)).o.b+u.d.a+u.d.d);return r}function QLn(n,t,e){var i,r,c,a,u,o,s;for(c=new Np,OBn(n,s=new YT,a=new YT,t),Ezn(n,s,a,t,e),o=new Wb(n);o.a<o.c.c.length;)for(r=new Wb((u=BB(n0(o),112)).k);r.a<r.c.c.length;)i=BB(n0(r),129),(!t||i.c==(O6(),Tyt))&&u.g>i.b.g&&(c.c[c.c.length]=i);return c}function YLn(){YLn=O,DEt=new jC("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),xEt=new jC("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KEt=new jC("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),REt=new jC("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),_Et=new jC("WHOLE_DRAWING",4)}function JLn(n,t){if(cL(t,239))return hln(n,BB(t,33));if(cL(t,186))return Dln(n,BB(t,118));if(cL(t,354))return tQ(n,BB(t,137));if(cL(t,352))return JFn(n,BB(t,79));if(t)return null;throw Hp(new _y(z6n+LMn(new Jy(Pun(Gk(Ant,1),HWn,1,5,[t])))))}function ZLn(n){var t,e,i,r,c,a,u;for(c=new YT,r=new Wb(n.d.a);r.a<r.c.c.length;)0==(i=BB(n0(r),121)).b.a.c.length&&r5(c,i,c.c.b,c.c);if(c.b>1)for(t=AN((e=new qv,++n.b,e),n.d),u=spn(c,0);u.b!=u.d.c;)a=BB(b3(u),121),UNn(aM(cM(uM(rM(new Hv,1),0),t),a))}function nNn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(vkn(n,t))throw Hp(new _y(w6n+zRn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Skn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=Npn(t,n,10,i)),(i=zR(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,11,t,t))}function tNn(n){var t,e,i,r;for(i=new usn(new Pb(n.b).a);i.b;)r=BB((e=ten(i)).cd(),11),hon(t=BB(e.dd(),10),(hWn(),dlt),r),hon(r,Elt,t),hon(r,elt,(hN(),!0)),qCn(r,BB(mMn(t,Qft),61)),mMn(t,Qft),hon(r.i,(HXn(),ept),(QEn(),VCt)),BB(mMn(vW(r.i),Zft),21).Fc((bDn(),dft))}function eNn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Wb(n.d.i.j);c.a<c.c.c.length;)i+=BB(n0(c),11).e.c.length;else i=1;if(n.d)for(c=new Wb(n.c.i.j);c.a<c.c.c.length;)r+=BB(n0(c),11).g.c.length;else r=1;return(e+t)/2+.4*CJ(HH(r-i))*(e-t)}function iNn(n){var t,e;if(LEn(),n.Hc((kUn(),PIt)))throw Hp(new _y("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return Mst;case 2:return t=n.Hc(oIt)&&n.Hc(CIt),e=n.Hc(sIt)&&n.Hc(SIt),t||e?Cst:Pst;case 3:return Sst;case 4:return Tst;default:return null}}function rNn(n,t,e){var i,r,c,a;for(OTn(e,"Breaking Point Removing",1),n.a=BB(mMn(t,(HXn(),Zdt)),218),r=new Wb(t.b);r.a<r.c.c.length;)for(a=new Wb(a0(BB(n0(r),29).a));a.a<a.c.c.length;)Jnn(c=BB(n0(a),10))&&!(i=BB(mMn(c,(hWn(),Rft)),305)).d&&zUn(n,i);HSn(e)}function cNn(n,t,e){return jDn(),(!Dcn(n,t)||!Dcn(n,e))&&(mzn(new xC(n.c,n.d),new xC(n.c+n.b,n.d),t,e)||mzn(new xC(n.c+n.b,n.d),new xC(n.c+n.b,n.d+n.a),t,e)||mzn(new xC(n.c+n.b,n.d+n.a),new xC(n.c,n.d+n.a),t,e)||mzn(new xC(n.c,n.d+n.a),new xC(n.c,n.d),t,e))}function aNn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=SD(n.Xb(e)))?null==t:mK(c.substr(0,3),"!##")?null!=t&&(r=t.length,!mK(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!mK(S7n,t):mK(c,P7n)&&!mK(S7n,t)||mK(c,t))return!0;return!1}function uNn(n,t,e,i){var r,c,a,u,o,s;for(a=n.j.c.length,o=x8(art,rJn,306,a,0,1),u=0;u<a;u++)(c=BB(xq(n.j,u),11)).p=u,o[u]=hOn(mAn(c),e,i);for(VNn(n,o,e,t,i),s=new xp,r=0;r<o.length;r++)o[r]&&VW(s,BB(xq(n.j,r),11),o[r]);s.f.c+s.g.c!=0&&(hon(n,(hWn(),zft),s),ASn(n,o))}function oNn(n,t,e){var i,r;for(i=new Wb(n.a.b);i.a<i.c.c.length;)if((r=f2(BB(n0(i),57)))&&r.k==(uSn(),Mut))switch(BB(mMn(r,(hWn(),Qft)),61).g){case 4:r.n.a=t.a;break;case 2:r.n.a=e.a-(r.o.a+r.d.c);break;case 1:r.n.b=t.b;break;case 3:r.n.b=e.b-(r.o.b+r.d.a)}}function sNn(){sNn=O,Ivt=new HP(QZn,0),Tvt=new HP("NIKOLOV",1),Pvt=new HP("NIKOLOV_PIXEL",2),Mvt=new HP("NIKOLOV_IMPROVED",3),Svt=new HP("NIKOLOV_IMPROVED_PIXEL",4),Evt=new HP("DUMMYNODE_PERCENTAGE",5),Cvt=new HP("NODECOUNT_PERCENTAGE",6),Ovt=new HP("NO_BOUNDARY",7)}function hNn(n,t,e){var i,r,c;if(!(r=BB(ZAn(t,(SMn(),UMt)),19))&&(r=iln(0)),!(c=BB(ZAn(e,UMt),19))&&(c=iln(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=Pln(t.j,e.j)))return i;if(0!=(i=Pln(t.i,e.i)))return i}return Pln(t.g*t.f,e.g*e.f)}function fNn(n,t){var e,i,r,c,a,u,o,s,h,f;if(++n.e,t>(o=null==n.d?0:n.d.length)){for(h=n.d,n.d=x8(oAt,c9n,63,2*o+4,0,1),c=0;c<o;++c)if(s=h[c])for(i=s.g,f=s.i,u=0;u<f;++u)a=eR(n,(r=BB(i[u],133)).Sh()),!(e=n.d[a])&&(e=n.d[a]=n.uj()),e.Fc(r);return!0}return!1}function lNn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak()))throw Hp(new _y(I7n));sln(n,t,e)}function bNn(n,t){var e,i,r,c,a,u;for(e=BB(mMn(t,(hWn(),Xft)),21),a=BB(h6((RXn(),fut),e),21),u=BB(h6(put,e),21),c=a.Kc();c.Ob();)if(i=BB(c.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;for(r=u.Kc();r.Ob();)if(i=BB(r.Pb(),21),!BB(h6(n.b,i),15).dc())return!1;return!0}function wNn(n,t){var e,i,r;for(OTn(t,"Partition postprocessing",1),e=new Wb(n.b);e.a<e.c.c.length;)for(i=new Wb(BB(n0(e),29).a);i.a<i.c.c.length;)for(r=new Wb(BB(n0(i),10).j);r.a<r.c.c.length;)qy(TD(mMn(BB(n0(r),11),(hWn(),jlt))))&&AU(r);HSn(t)}function dNn(n,t){var e,i,r,c,a,u,o;if(1==n.a.c.length)return FSn(BB(xq(n.a,0),187),t);for(r=cfn(n),a=0,u=n.d,i=r,o=n.d,c=(u-i)/2+i;i+1<u;){for(a=0,e=new Wb(n.a);e.a<e.c.c.length;)a+=cHn(BB(n0(e),187),c,!1).a;a<t?(o=c,u=c):i=c,c=(u-i)/2+i}return o}function gNn(n){var t,e,i,r;return isNaN(n)?(X7(),gtt):n<-0x8000000000000000?(X7(),wtt):n>=0x8000000000000000?(X7(),btt):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=OQn&&(n-=(e=CJ(n/OQn))*OQn),t=0,n>=IQn&&(n-=(t=CJ(n/IQn))*IQn),r=M$(CJ(n),t,e),i&&Oon(r),r)}function pNn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((lIn(),eIt)),c=0,r=new Wb(n.e.Cf());r.a<r.c.c.length;){if((i=BB(n0(r),838)).Hf()==(kUn(),PIt))throw Hp(new _y("Label and node size calculator can only be used with ports that have port sides assigned."));i.vf(c++),Whn(n,i,e)}}function vNn(n,t){var e,i,r,c;return(i=t.Hh(n.a))&&(!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),null!=(e=SD(cdn(i.b,J9n)))&&cL(c=-1==(r=e.lastIndexOf("#"))?uD(n,t.Aj(),e):0==r?M9(n,null,e.substr(1)):M9(n,e.substr(0,r),e.substr(r+1)),148))?BB(c,148):null}function mNn(n,t){var e,i,r,c;return(e=t.Hh(n.a))&&(!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),null!=(r=SD(cdn(e.b,k7n)))&&cL(c=-1==(i=r.lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148))?BB(c,148):null}function yNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),307)).j=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),57)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),57)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function kNn(n){var t,e,i,r,c;for(e=new Wb(n.a.a);e.a<e.c.c.length;){for((t=BB(n0(e),189)).f=null,c=t.a.a.ec().Kc();c.Ob();)kO((i=BB(c.Pb(),81)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=BB(r.Pb(),81)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function jNn(n){var t,i,r;return i=BB(n.a,19).a,r=BB(n.b,19).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new rI(iln(i+1),iln(r)):i==t&&r<t?new rI(iln(i),iln(r+1)):i>=-t&&r==t?new rI(iln(i-1),iln(r)):new rI(iln(i),iln(r-1))}function ENn(){return lWn(),Pun(Gk(ust,1),$Vn,77,0,[rot,tot,cot,kot,Fot,Mot,Uot,Oot,Kot,got,Not,Iot,_ot,lot,Wot,Vut,Lot,Hot,jot,Bot,Qot,Dot,Qut,Rot,Yot,Got,Vot,Eot,sot,Tot,yot,Xot,Zut,uot,Pot,Jut,Cot,vot,bot,Aot,dot,eot,not,mot,wot,$ot,zot,Yut,xot,pot,Sot,hot,oot,qot,aot,fot,iot])}function TNn(n,t,e){n.d=0,n.b=0,t.k==(uSn(),Iut)&&e.k==Iut&&BB(mMn(t,(hWn(),dlt)),10)==BB(mMn(e,dlt),10)&&(S7(t).j==(kUn(),sIt)?q$n(n,t,e):q$n(n,e,t)),t.k==Iut&&e.k==Put?S7(t).j==(kUn(),sIt)?n.d=1:n.b=1:e.k==Iut&&t.k==Put&&(S7(e).j==(kUn(),sIt)?n.b=1:n.d=1),umn(n,t,e)}function MNn(n){var t,e,i,r,c;return c=ATn(n),null!=n.a&&AH(c,"category",n.a),!WE(new Cb(n.d))&&(rtn(c,"knownOptions",i=new Cl),t=new ep(i),e5(new Cb(n.d),t)),!WE(n.g)&&(rtn(c,"supportedFeatures",r=new Cl),e=new ip(r),e5(n.g,e)),c}function SNn(n){var t,e,i,r,c,a,u,o;for(t=336,e=0,r=new sR(n.length),u=0,o=(a=n).length;u<o;++u)Qln(c=a[u]),EW(c),i=c.a,WB(r.a,yX(i)),t&=i.qd(),e=Ysn(e,i.rd());return BB(BB(XU(new Rq(null,qTn(new w1((WX(),Nwn(r.a)),16),new k,t,e)),new El(n)),670),833)}function PNn(n,t){var e;n.d&&(t.c!=n.e.c||fcn(n.e.b,t.b))&&(WB(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),nA(t.b)?n.c=t:n.b=t,(t.b==(Aun(),Zat)&&!t.a||t.b==nut&&t.a||t.b==tut&&t.a||t.b==eut&&!t.a)&&n.c&&n.b&&(e=new UV(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function CNn(n){var t;if(Ym.call(this),this.i=new lu,this.g=n,this.f=BB(n.e&&n.e(),9).length,0==this.f)throw Hp(new _y("There must be at least one phase in the phase enumeration."));this.c=new YK(t=BB(Vj(this.g),9),BB(SR(t,t.length),9),0),this.a=new B2,this.b=new xp}function INn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(vkn(n,t))throw Hp(new _y(w6n+cPn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,1,DOt,i)),(i=VG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,7,t,t))}function ONn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(vkn(n,t))throw Hp(new _y(w6n+Vfn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?bkn(n,i):n.Cb.ih(n,-1-e,null,i)),t&&(i=BB(t,49).gh(n,0,BOt,i)),(i=QG(n,t,i))&&i.Fi()}else 0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,3,t,t))}function ANn(n,t){var e,i,r,c,a,u,o,s,h;return $On(),t.d>n.d&&(u=n,n=t,t=u),t.d<63?Xxn(n,t):(s=z5(n,a=(-2&n.d)<<4),h=z5(t,a),i=uBn(n,G5(s,a)),r=uBn(t,G5(h,a)),o=ANn(s,h),e=ANn(i,r),c=G5(c=$Hn($Hn(c=ANn(uBn(s,i),uBn(r,h)),o),e),a),$Hn($Hn(o=G5(o,a<<1),c),e))}function $Nn(n,t,e){var i,r,c,a,u;for(a=Lfn(n,e),u=x8(Out,a1n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)qy(TD(mMn(r=BB(c.Pb(),11),(hWn(),elt))))&&(u[i++]=BB(mMn(r,Elt),10));if(i<t.length)throw Hp(new Fy("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return u}function LNn(n,t){var e,i,r,c,a,u;if(!n.tb){for(!n.rb&&(n.rb=new Jz(n,HAt,n)),u=new XT((c=n.rb).i),r=new AL(c);r.e!=r.i.gc();)i=BB(kpn(r),138),(e=BB(null==(a=i.ne())?jCn(u.f,null,i):ubn(u.g,a,i),138))&&(null==a?jCn(u.f,null,e):ubn(u.g,a,e));n.tb=u}return BB(SJ(n.tb,t),138)}function NNn(n,t){var e,i,r,c,a;if((null==n.i&&qFn(n),n.i).length,!n.p){for(a=new XT(1+(3*n.g.i/2|0)),r=new ax(n.g);r.e!=r.i.gc();)i=BB(jpn(r),170),(e=BB(null==(c=i.ne())?jCn(a.f,null,i):ubn(a.g,c,i),170))&&(null==c?jCn(a.f,null,e):ubn(a.g,c,e));n.p=a}return BB(SJ(n.p,t),170)}function xNn(n,t,e,i,r){var c,a,u,o;for(wgn(i+CY(e,e.$d()),r),tW(t,Lwn(e)),(c=e.f)&&xNn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=x8(Jnt,sVn,78,0,0,1)),u=0,o=(a=e.k).length;u<o;++u)xNn(n,t,a[u],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function DNn(n,t,e,i){var r,c,a,u;for(a=(u=t.e).length,c=t.q._f(u,e?0:a-1,e),c|=gRn(n,u[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.Sf(u,r,e,i&&!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,(hWn(),Ilt))))),c|=t.q._f(u,r,e),c|=gRn(n,u[r],e,i);return TU(n.c,t),c}function RNn(n,t,e){var i,r,c,a,u,o,s,h;for(s=0,h=(o=I2(n.j)).length;s<h;++s){if(u=o[s],e==(ain(),Hvt)||e==Gvt)for(c=0,a=(r=Z0(u.g)).length;c<a;++c)OSn(t,i=r[c])&&tBn(i,!0);if(e==qvt||e==Gvt)for(c=0,a=(r=Z0(u.e)).length;c<a;++c)ISn(t,i=r[c])&&tBn(i,!0)}}function KNn(n){var t,e;switch(t=null,e=null,eEn(n).g){case 1:kUn(),t=oIt,e=CIt;break;case 2:kUn(),t=SIt,e=sIt;break;case 3:kUn(),t=CIt,e=oIt;break;case 4:kUn(),t=sIt,e=SIt}Gl(n,BB($N(Oz(BB(h6(n.k,t),15).Oc(),Qst)),113)),ql(n,BB($N(Iz(BB(h6(n.k,e),15).Oc(),Qst)),113))}function _Nn(n){var t,e,i,r,c,a;if((r=BB(xq(n.j,0),11)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(r),new Gw(r)])));dAn(i);)a+=(e=BB(U5(i),11)).i.n.a+e.n.a+e.a.a;c=(t=BB(mMn(n,(HXn(),npt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function FNn(n,t){var e,i,r;for(i=new Wb(t.a);i.a<i.c.c.length;)e=BB(n0(i),221),LG(BB(e.b,65),XR(B$(BB(t.b,65).c),BB(t.b,65).a)),(r=Y_n(BB(t.b,65).b,BB(e.b,65).b))>1&&(n.a=!0),NG(BB(e.b,65),UR(B$(BB(t.b,65).c),kL(XR(B$(BB(e.b,65).a),BB(t.b,65).a),r))),QZ(n,t),FNn(n,e)}function BNn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),189)).e=0,e.d.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),189)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),81).f.Kc();a.Ob();)(c=BB(a.Pb(),81)).d!=e&&(TU(e.d,c),++c.d.e)}function HNn(n){var t,e,i,r,c,a,u,o;for(e=0,t=o=n.j.c.length,r=2*o,u=new Wb(n.j);u.a<u.c.c.length;)switch((a=BB(n0(u),11)).j.g){case 2:case 4:a.p=-1;break;case 1:case 3:i=a.e.c.length,c=a.g.c.length,a.p=i>0&&c>0?t++:i>0?e++:c>0?r++:e++}SQ(),m$(n.j,new bi)}function qNn(n){var t,e;e=null,t=BB(xq(n.g,0),17);do{if(Lx(e=t.d.i,(hWn(),flt)))return BB(mMn(e,flt),11).i;if(e.k!=(uSn(),Cut)&&dAn(new oz(ZL(lbn(e).a.Kc(),new h))))t=BB(U5(new oz(ZL(lbn(e).a.Kc(),new h))),17);else if(e.k!=Cut)return null}while(e&&e.k!=(uSn(),Cut));return e}function GNn(n,t){var e,i,r,c,a,u,o,s,h;for(u=t.j,a=t.g,o=BB(xq(u,u.c.length-1),113),l1(0,u.c.length),s=Zmn(n,a,o,h=BB(u.c[0],113)),c=1;c<u.c.length;c++)l1(c-1,u.c.length),e=BB(u.c[c-1],113),l1(c,u.c.length),(i=Zmn(n,a,e,r=BB(u.c[c],113)))>s&&(o=e,h=r,s=i);t.a=h,t.c=o}function zNn(n,t){var e;if(!ZU(n.b,t.b))throw Hp(new Fy("Invalid hitboxes for scanline constraint calculation."));(kun(t.b,BB(MR(n.b,t.b),57))||kun(t.b,BB(TR(n.b,t.b),57)))&&($T(),t.b),n.a[t.b.f]=BB(kK(n.b,t.b),57),(e=BB(yK(n.b,t.b),57))&&(n.a[e.f]=t.b)}function UNn(n){if(!n.a.d||!n.a.e)throw Hp(new Fy((ED(Hit),Hit.k+" must have a source and target "+(ED(qit),qit.k+" specified."))));if(n.a.d==n.a.e)throw Hp(new Fy("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return RN(n.a.d.g,n.a),RN(n.a.e.b,n.a),n.a}function XNn(n,t,e){var i,r,c,a,u,o,s;for(s=new dE(new Jd(n)),u=0,o=(a=Pun(Gk(Gut,1),u1n,11,0,[t,e])).length;u<o;++u)for(c=a[u],Mon(s.a,c,(hN(),ptt)),r=new m6(c.b);y$(r.a)||y$(r.b);)(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==i.d||ZU(s,c==i.c?i.d:i.c);return yX(s),new t_(s)}function WNn(n,t,e){var i,r,c,a,u,o;if(i=0,0!=t.b&&0!=e.b){c=spn(t,0),a=spn(e,0),u=Gy(MD(b3(c))),o=Gy(MD(b3(a))),r=!0;do{if(u>o-n.b&&u<o+n.b)return-1;u>o-n.a&&u<o+n.a&&++i,u<=o&&c.b!=c.d.c?u=Gy(MD(b3(c))):o<=u&&a.b!=a.d.c?o=Gy(MD(b3(a))):r=!1}while(r)}return i}function VNn(n,t,e,i,r){var c,a,u,o;for(o=new YK(c=BB(Vj(FIt),9),BB(SR(c,c.length),9),0),u=new Wb(n.j);u.a<u.c.c.length;)t[(a=BB(n0(u),11)).p]&&(BUn(a,t[a.p],i),orn(o,a.j));r?(GEn(n,t,(kUn(),oIt),2*e,i),GEn(n,t,CIt,2*e,i)):(GEn(n,t,(kUn(),sIt),2*e,i),GEn(n,t,SIt,2*e,i))}function QNn(n){var t,e,i,r,c;if(c=new Np,Otn(n.b,new kw(c)),n.b.c=x8(Ant,HWn,1,0,5,1),0!=c.c.length){for(l1(0,c.c.length),t=BB(c.c[0],78),e=1,i=c.c.length;e<i;++e)l1(e,c.c.length),(r=BB(c.c[e],78))!=t&>n(t,r);if(cL(t,60))throw Hp(BB(t,60));if(cL(t,289))throw Hp(BB(t,289))}}function YNn(n,t){var e,i,r,c;for(n=null==n?zWn:(kW(n),n),e=new Ik,c=0,i=0;i<t.length&&-1!=(r=n.indexOf("%s",c));)oO(e,n.substr(c,r-c)),uO(e,t[i++]),c=r+2;if(oO(e,n.substr(c)),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function JNn(n){var t,e,i,r;for(t=0,r=(i=n.length)-4,e=0;e<r;)b1(e+3,n.length),t=n.charCodeAt(e+3)+(b1(e+2,n.length),31*(n.charCodeAt(e+2)+(b1(e+1,n.length),31*(n.charCodeAt(e+1)+(b1(e,n.length),31*(n.charCodeAt(e)+31*t)))))),t|=0,e+=4;for(;e<i;)t=31*t+fV(n,e++);return t|=0}function ZNn(n){var t;for(t=new oz(ZL(lbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).d.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(n)+"' has its layer constraint set to LAST, but has at least one outgoing edge that does not go to a LAST_SEPARATE node. That must not happen."))}function nxn(n,t,i,r){var c,a,u,o,s,f,l;for(o=0,s=new Wb(n.a);s.a<s.c.c.length;){for(u=0,a=new oz(ZL(fbn(BB(n0(s),10)).a.Kc(),new h));dAn(a);)f=g1((c=BB(U5(a),17)).c).b,l=g1(c.d).b,u=e.Math.max(u,e.Math.abs(l-f));o=e.Math.max(o,u)}return r*e.Math.min(1,t/i)*o}function txn(n){var t;return t=new Pk,0!=(256&n)&&(t.a+="F"),0!=(128&n)&&(t.a+="H"),0!=(512&n)&&(t.a+="X"),0!=(2&n)&&(t.a+="i"),0!=(8&n)&&(t.a+="m"),0!=(4&n)&&(t.a+="s"),0!=(32&n)&&(t.a+="u"),0!=(64&n)&&(t.a+="w"),0!=(16&n)&&(t.a+="x"),0!=(n&k6n)&&(t.a+=","),Uy(t.a)}function exn(n,t){var e,i,r;for(OTn(t,"Resize child graph to fit parent.",1),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),29),gun(n.a,e.a),e.a.c=x8(Ant,HWn,1,0,5,1);for(r=new Wb(n.a);r.a<r.c.c.length;)PZ(BB(n0(r),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),Bxn(n),n.e&&S_n(n.e,n),HSn(t)}function ixn(n){var t,e,i,r,c,a,u;if(r=(i=n.b).e,c=LK(BB(mMn(i,(HXn(),ept)),98)),e=!!r&&BB(mMn(r,(hWn(),Zft)),21).Hc((bDn(),lft)),!c&&!e)for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(a=BB(t.dd(),113)).a&&(CZ(a.d,null),a.c=!0,n.a=!0)}function rxn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(f=-1,l=0,s=0,h=(o=n).length;s<h;++s){for(a=0,u=(c=o[s]).length;a<u;++a)for(r=c[a],t=new pP(-1==f?n[0]:n[f],okn(r)),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Nz(t,BB(xq(r.j,e),11),BB(xq(r.j,i),11))>0&&++l;++f}return l}function cxn(n,t){var e,i,r,c,a;for(a=BB(mMn(t,(CAn(),Lkt)),425),c=spn(t.b,0);c.b!=c.d.c;)if(r=BB(b3(c),86),0==n.b[r.g]){switch(a.g){case 0:Qvn(n,r);break;case 1:HAn(n,r)}n.b[r.g]=2}for(i=spn(n.a,0);i.b!=i.d.c;)ywn((e=BB(b3(i),188)).b.d,e,!0),ywn(e.c.b,e,!0);hon(t,(qqn(),lkt),n.a)}function axn(n,t){var e,i,r,c;return ZM(),t?t==(Uqn(),KLt)||(t==yLt||t==vLt||t==mLt)&&n!=pLt?new cUn(n,t):((e=(i=BB(t,677)).pk())||(kV(B7((IPn(),Z$t),t)),e=i.pk()),!e.i&&(e.i=new xp),!(r=BB(qI(AY((c=e.i).f,n)),1942))&&VW(c,n,r=new cUn(n,t)),r):aLt}function uxn(n,t){var e,i,r,c,a,u,o,s;for(u=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).a,s=n.i.n.b,r=0,c=(i=Z0(n.e)).length;r<c;++r)MZ(e=i[r],u),fO(e.a,new xC(o,s)),t&&((a=BB(mMn(e,(HXn(),vgt)),74))||(a=new km,hon(e,vgt,a)),DH(a,new xC(o,s)))}function oxn(n,t){var e,i,r,c,a,u,o,s;for(i=BB(mMn(n,(hWn(),dlt)),11),o=Aon(Pun(Gk(PMt,1),sVn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,u=(c=Z0(n.g)).length;a<u;++a)SZ(r=c[a],i),hO(r.a,new xC(o,s)),t&&((e=BB(mMn(r,(HXn(),vgt)),74))||(e=new km,hon(r,vgt,e)),DH(e,new xC(o,s)))}function sxn(n,t){var e,i,r,c,a;for(n.b=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230),n.e=c0(n.d),c=new YT,r=u6(Pun(Gk(jut,1),JZn,37,0,[t])),a=0;a<r.c.length;)l1(a,r.c.length),(i=BB(r.c[a],37)).p=a++,gun(r,(e=new CGn(i,n.a,n.b)).b),WB(n.b,e),e.s&&nX(spn(c,0),e);return n.c=new Rv,c}function hxn(n,t){var e,i,r,c,a,u;for(a=BB(BB(h6(n.r,t),21),84).Kc();a.Ob();)(e=(c=BB(a.Pb(),111)).c?VH(c.c):0)>0?c.a?e>(u=c.b.rf().a)&&(r=(e-u)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:Hz(n.u)&&((i=_Tn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.rf().a&&(c.d.c=i.c+i.b-c.b.rf().a))}function fxn(n,t){var e,i;for(OTn(t,"Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Wb(n.b);i.a<i.c.c.length;)e|=null!=$fn(ytn(AV(AV(new Rq(null,new w1(BB(n0(i),29).a,16)),new Qi),new Yi),new Ji),new Zi).a;e&&hon(n,(hWn(),alt),(hN(),!0)),HSn(t)}function lxn(n,t,e){var i,r,c;if(!(r=e)&&(r=new Xm),OTn(r,"Layout",n.a.c.length),qy(TD(mMn(t,(CAn(),Ekt)))))for($T(),i=0;i<n.a.c.length;i++)i++,nE(tsn(BB(xq(n.a,i),51)));for(c=new Wb(n.a);c.a<c.c.c.length;)BB(n0(c),51).pf(t,mcn(r,1));HSn(r)}function bxn(n){var t,i;if(t=BB(n.a,19).a,i=BB(n.b,19).a,t>=0){if(t==i)return new rI(iln(-t-1),iln(-t-1));if(t==-i)return new rI(iln(-t),iln(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new rI(iln(-t),iln(t<0?i:i+1)):new rI(iln(t+1),iln(i))}function wxn(n){var t,e;e=BB(mMn(n,(HXn(),kgt)),163),t=BB(mMn(n,(hWn(),ilt)),303),e==(Tbn(),Flt)?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Cft))):e==Hlt?(hon(n,kgt,qlt),hon(n,ilt,(z7(),Sft))):t==(z7(),Cft)?(hon(n,kgt,Flt),hon(n,ilt,Pft)):t==Sft&&(hon(n,kgt,Hlt),hon(n,ilt,Pft))}function dxn(){dxn=O,jyt=new oa,vyt=dq(new B2,(yMn(),_at),(lWn(),jot)),kyt=WG(dq(new B2,_at,Dot),Bat,xot),Eyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),myt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),yyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function gxn(){gxn=O,Cyt=dq(WG(new B2,(yMn(),Bat),(lWn(),hot)),_at,jot),$yt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),Iyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),Ayt=dq(dq(new B2,_at,Dot),Bat,xot),Oyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function pxn(n,t,e,i,r){var c,a;(b5(t)||t.c.i.c!=t.d.i.c)&&nrn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])),e)||b5(t)||(t.c==r?Kx(t.a,0,new wA(e)):DH(t.a,new wA(e)),i&&!FT(n.a,e)&&((a=BB(mMn(t,(HXn(),vgt)),74))||(a=new km,hon(t,vgt,a)),r5(a,c=new wA(e),a.c.b,a.c),TU(n.a,c)))}function vxn(n){var t;for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(BB(U5(t),17).c.i.k!=(uSn(),Sut))throw Hp(new rk(P1n+gyn(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 mxn(n,t,e){var i,r,c,a,u,o;if(0==(r=pbn(254&n.Db)))n.Eb=e;else{if(1==r)a=x8(Ant,HWn,1,2,5,1),0==Rmn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=x8(Ant,HWn,1,r+1,5,1),c=een(n.Eb),i=2,u=0,o=0;i<=128;i<<=1)i==t?a[o++]=e:0!=(n.Db&i)&&(a[o++]=c[u++]);n.Eb=a}n.Db|=t}function yxn(n,t,i){var r,c,a,u;for(this.b=new Np,c=0,r=0,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),167),i&&KBn(a),WB(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=BB(xq(this.b,0),167)).o,r+=a.p),c*=2,r*=2,t>1?c=CJ(e.Math.ceil(c*t)):r=CJ(e.Math.ceil(r/t)),this.a=new qwn(c,r)}function kxn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=BB(RX(n.f,t.A),57)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=BB(RX(n.f,i.C),57)).d.c,++f):s=i.a.c,w=d+(o=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(u=BB(a.Xb(l),128)).a.b,u.a.c=w-g/2,w+=o}function jxn(n,t,e,i,r,c){var a,u,o,s,h,f;for(s=e.c.length,c&&(n.c=x8(ANt,hQn,25,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(u=t[a],o=i==(kUn(),oIt)?r?abn(u,i):ean(abn(u,i)):r?ean(abn(u,i)):abn(u,i),c&&(n.c[u.p]=o.gc()),f=o.Kc();f.Ob();)h=BB(f.Pb(),11),n.d[h.p]=s++;gun(e,o)}}function Exn(n,t,e){var i,r,c,a,u,o,s,h;for(c=Gy(MD(n.b.Kc().Pb())),s=Gy(MD(Wan(t.b))),i=kL(B$(n.a),s-e),r=kL(B$(t.a),e-c),kL(h=UR(i,r),1/(s-c)),this.a=h,this.b=new Np,u=!0,(a=n.b.Kc()).Pb();a.Ob();)o=Gy(MD(a.Pb())),u&&o-e>D3n&&(this.b.Fc(e),u=!1),this.b.Fc(o);u&&this.b.Fc(e)}function Txn(n){var t,e,i,r;if(hKn(n,n.n),n.d.c.length>0){for(nk(n.c);pAn(n,BB(n0(new Wb(n.e.a)),121))<n.e.a.c.length;){for(r=(t=Ryn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Wb(n.e.a);i.a<i.c.c.length;)(e=BB(n0(i),121)).j&&(e.e+=r);nk(n.c)}nk(n.c),pIn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}}function Mxn(n,t){var e,i,r,c,a;for(r=BB(h6(n.a,(LEn(),Mst)),15).Kc();r.Ob();)switch(i=BB(r.Pb(),101),e=BB(xq(i.j,0),113).d.j,m$(c=new t_(i.j),new Jr),t.g){case 1:NEn(n,c,e,(Crn(),Dst),1);break;case 0:NEn(n,new s1(c,0,a=_Ln(c)),e,(Crn(),Dst),0),NEn(n,new s1(c,a,c.c.length),e,Dst,1)}}function Sxn(n,t){var e,i;if(Nun(),e=T5(cin(),t.tg())){if(i=e.j,cL(n,239))return rZ(BB(n,33))?SN(i,(rpn(),sMt))||SN(i,hMt):SN(i,(rpn(),sMt));if(cL(n,352))return SN(i,(rpn(),uMt));if(cL(n,186))return SN(i,(rpn(),fMt));if(cL(n,354))return SN(i,(rpn(),oMt))}return!0}function Pxn(n,t,e){var i,r,c,a,u,o;if(c=(r=e).ak(),$xn(n.e,c)){if(c.hi())for(i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(u=i[a],r)&&a!=t)throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),c),i=BB(n.g,119),a=0;a<n.i;++a)if(u=i[a],o.rl(u.ak())&&a!=t)throw Hp(new _y(I7n));return BB(ovn(n,t,e),72)}function Cxn(n,t){if(t instanceof Object)try{if(t.__java$exception=n,-1!=navigator.userAgent.toLowerCase().indexOf("msie")&&$doc.documentMode<9)return;var e=n;Object.defineProperties(t,{cause:{get:function(){var n=e.Zd();return n&&n.Xd()}},suppressed:{get:function(){return e.Yd()}}})}catch(i){}}function Ixn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(ODn(),Ytt):(ODn(),eet);if(c=n.d-i,QSn(r=x8(ANt,hQn,25,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e<i&&0==n.a[e];e++);if(e<i||t>0&&n.a[e]<<32-t!=0){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return X0(a=new lU(n.e,c,r)),a}function Oxn(n){var t,e,i,r;return e=new $w(r=WJ(n)),i=new Lw(r),gun(t=new Np,(!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d)),gun(t,(!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e)),BB(P4($V(AV(new Rq(null,new w1(t,16)),e),i),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)}function Axn(n,t,e,i){var r,c,a,u,o;if(ZM(),u=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))throw Hp(new _y(a8n))}else for(o=axn(n.e.Tg(),t),r=BB(n.g,119),a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak()))throw Hp(new _y(I7n));sln(n,EPn(n,t,e),u?BB(i,72):Z3(t,i))}function $xn(n,t){var e,i,r;return ZM(),!!t.$j()||-2==t.Zj()&&(t==(TOn(),lLt)||t==sLt||t==hLt||t==fLt||!(Awn(r=n.Tg(),t)>=0)&&(!(e=Fqn((IPn(),Z$t),r,t))||((i=e.Zj())>1||-1==i)&&3!=DW(B7(Z$t,e))))}function Lxn(n,t,e,i){var r,c,a,u,o;return u=PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82)),JJ(u)==JJ(o)||Ctn(o,u)?null:(a=XJ(t))==e?i:(c=BB(RX(n.a,a),10))&&(r=c.e)?r:null}function Nxn(n,t){var e;switch(OTn(t,"Label side selection ("+(e=BB(mMn(n,(HXn(),Jdt)),276))+")",1),e.g){case 0:TAn(n,(Xyn(),jCt));break;case 1:TAn(n,(Xyn(),ECt));break;case 2:sBn(n,(Xyn(),jCt));break;case 3:sBn(n,(Xyn(),ECt));break;case 4:uDn(n,(Xyn(),jCt));break;case 5:uDn(n,(Xyn(),ECt))}HSn(t)}function xxn(n,t,e){var i,r,c,a,u;if((c=n[lj(e,n.length)])[0].k==(uSn(),Mut))for(r=fj(e,c.length),u=t.j,i=0;i<u.c.length;i++)l1(i,u.c.length),a=BB(u.c[i],11),(e?a.j==(kUn(),oIt):a.j==(kUn(),CIt))&&qy(TD(mMn(a,(hWn(),elt))))&&(c5(u,i,BB(mMn(c[r],(hWn(),dlt)),11)),r+=e?1:-1)}function Dxn(n,t){var e,i,r,c,a;a=new Np,e=t;do{(c=BB(RX(n.b,e),128)).B=e.c,c.D=e.d,a.c[a.c.length]=c,e=BB(RX(n.k,e),17)}while(e);return l1(0,a.c.length),(i=BB(a.c[0],128)).j=!0,i.A=BB(i.d.a.ec().Kc().Pb(),17).c.i,(r=BB(xq(a,a.c.length-1),128)).q=!0,r.C=BB(r.d.a.ec().Kc().Pb(),17).d.i,a}function Rxn(n){if(null==n.g)switch(n.p){case 0:n.g=fZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.g=Pnn(D3(n));break;case 2:n.g=fun(Q1(n));break;case 3:n.g=OW(n);break;case 4:n.g=new Nb(IW(n));break;case 6:n.g=jgn(AW(n));break;case 5:n.g=iln(hJ(n));break;case 7:n.g=rln(_3(n))}return n.g}function Kxn(n){if(null==n.n)switch(n.p){case 0:n.n=lZ(n)?(hN(),vtt):(hN(),ptt);break;case 1:n.n=Pnn(R3(n));break;case 2:n.n=fun(Y1(n));break;case 3:n.n=LW(n);break;case 4:n.n=new Nb(NW(n));break;case 6:n.n=jgn($W(n));break;case 5:n.n=iln(fJ(n));break;case 7:n.n=rln(K3(n))}return n.n}function _xn(n){var t,e,i,r,c,a;for(r=new Wb(n.a.a);r.a<r.c.c.length;)(e=BB(n0(r),307)).g=0,e.i=0,e.e.a.$b();for(i=new Wb(n.a.a);i.a<i.c.c.length;)for(t=(e=BB(n0(i),307)).a.a.ec().Kc();t.Ob();)for(a=BB(t.Pb(),57).c.Kc();a.Ob();)(c=BB(a.Pb(),57)).a!=e&&(TU(e.e,c),++c.a.g,++c.a.i)}function Fxn(n,t){var e,i,r;if(!ZU(n.a,t.b))throw Hp(new Fy("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=new Fb(new BR(new xN(new _b(n.a.a).a).b));aS(i.a.a);)if(e=BB(mx(i.a).cd(),65),eon(t.b,e))xj(n.b.a,t.b,e),r=!0;else if(r)break}function Bxn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DIt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GIt))&&(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)),XBn(n,i,t)}function Hxn(n,t){var e,i,r,c,a,u,o,s;r=t?new pc:new vc,c=!1;do{for(c=!1,a=(t?ean(n.b):n.b).Kc();a.Ob();)for(s=a0(BB(a.Pb(),29).a),t||new fy(s),o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),r.Mb(u)&&(i=u,e=BB(mMn(u,(hWn(),Rft)),305),c=eRn(i,t?e.b:e.k,t,!1))}while(c)}function qxn(n,t,e){var i,r,c,a;for(OTn(e,"Longest path layering",1),n.a=t,a=n.a.a,n.b=x8(ANt,hQn,25,a.c.length,15,1),i=0,c=new Wb(a);c.a<c.c.c.length;)BB(n0(c),10).p=i,n.b[i]=-1,++i;for(r=new Wb(a);r.a<r.c.c.length;)D$n(n,BB(n0(r),10));a.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,HSn(e)}function Gxn(n,t){var e,i,r;t.a?(ZU(n.b,t.b),n.a[t.b.i]=BB(kK(n.b,t.b),81),(e=BB(yK(n.b,t.b),81))&&(n.a[e.i]=t.b)):(!!(i=BB(kK(n.b,t.b),81))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=BB(yK(n.b,t.b),81))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),MN(n.b,t.b))}function zxn(n,t){var i,r,c,a,u,o;return a=n.d,(o=Gy(MD(mMn(n,(HXn(),agt)))))<0&&hon(n,agt,o=0),t.o.b=o,u=e.Math.floor(o/2),qCn(r=new CSn,(kUn(),CIt)),CZ(r,t),r.n.b=u,qCn(c=new CSn,oIt),CZ(c,t),c.n.b=u,MZ(n,r),qan(i=new wY,n),hon(i,vgt,null),SZ(i,c),MZ(i,a),jFn(t,n,i),sCn(n,i),i}function Uxn(n){var t,e;return e=BB(mMn(n,(hWn(),Zft)),21),t=new B2,e.Hc((bDn(),bft))&&(Jcn(t,byt),Jcn(t,dyt)),(e.Hc(dft)||qy(TD(mMn(n,(HXn(),ugt)))))&&(Jcn(t,dyt),e.Hc(gft)&&Jcn(t,gyt)),e.Hc(lft)&&Jcn(t,lyt),e.Hc(vft)&&Jcn(t,pyt),e.Hc(wft)&&Jcn(t,wyt),e.Hc(sft)&&Jcn(t,hyt),e.Hc(fft)&&Jcn(t,fyt),t}function Xxn(n,t){var e,i,r,c,a,u,o,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=dG(o=cbn(e0(n.a[0],UQn),e0(t.a[0],UQn))),0==(s=dG(jz(o,32)))?new X6(a,h):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[h,s]))):(Dfn(n.a,e,t.a,i,r=x8(ANt,hQn,25,c,15,1)),X0(u=new lU(a,c,r)),u)}function Wxn(n,t,e,i){var r,c;return t?0==(r=n.a.ue(e.d,t.d))?(i.d=pR(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=Wxn(n,t.a[c],e,i),Vy(t.a[c])&&(Vy(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):Vy(t.a[c].a[c])?t=wrn(t,1-c):Vy(t.a[c].a[1-c])&&(t=r2(t,1-c))),t):e}function Vxn(n,t,i){var r,c,a,u;c=n.i,r=n.n,Y5(n,(Dtn(),Git),c.c+r.b,i),Y5(n,Uit,c.c+c.b-r.c-i[2],i),u=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,u-=i[0]),i[2]>0&&(i[2]+=n.d,u-=i[2]),a=e.Math.max(0,u),i[1]=e.Math.max(i[1],u),Y5(n,zit,c.c+r.b+i[0]-(i[1]-u)/2,i),t==zit&&(n.c.b=a,n.c.c=c.c+r.b+(a-u)/2)}function Qxn(){this.c=x8(xNt,qQn,25,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,15,1),this.b=x8(xNt,qQn,25,Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]).length,15,1),this.a=x8(xNt,qQn,25,Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]).length,15,1),mS(this.c,RQn),mS(this.b,KQn),mS(this.a,KQn)}function Yxn(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=x8(ANt,hQn,25,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=x8(ANt,hQn,25,i+2,15,1),aHn(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||T$n(n)}}function Jxn(n,t,e){var i,r,c,a,u,o,s;for(s=t.d,n.a=new J6(s.c.length),n.c=new xp,u=new Wb(s);u.a<u.c.c.length;)a=BB(n0(u),101),c=new Fan(null),WB(n.a,c),VW(n.c,a,c);for(n.b=new xp,vCn(n,t),i=0;i<s.c.length-1;i++)for(o=BB(xq(t.d,i),101),r=i+1;r<s.c.length;r++)WLn(n,o,BB(xq(t.d,r),101),e)}function Zxn(n,t,e){var i,r,c,a,u,o;if(!h3(t)){for(OTn(o=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),u=new Ia,a=0,c=t.Kc();c.Ob();)i=BB(c.Pb(),86),u=Wen(Pun(Gk(xnt,1),HWn,20,0,[u,new bg(i)])),a<i.f.b&&(a=i.f.b);for(r=t.Kc();r.Ob();)hon(i=BB(r.Pb(),86),(qqn(),ukt),a);HSn(o),Zxn(n,u,e)}}function nDn(n,t){var i,r,c,a,u,o,s;for(i=KQn,uSn(),o=Cut,c=new Wb(t.a);c.a<c.c.c.length;)(a=(r=BB(n0(c),10)).k)!=Cut&&(null==(u=MD(mMn(r,(hWn(),plt))))?(i=e.Math.max(i,0),r.n.b=i+XN(n.a,a,o)):r.n.b=(kW(u),u)),s=XN(n.a,a,o),r.n.b<i+s+r.d.d&&(r.n.b=i+s+r.d.d),i=r.n.b+r.o.b+r.d.a,o=a}function tDn(n,t,e){var i,r,c;for(qan(c=new EAn(XXn(qSn(cDn(t,!1,!1)),Gy(MD(ZAn(t,(Epn(),pct))))+n.a)),t),VW(n.b,t,c),e.c[e.c.length]=c,!t.n&&(t.n=new eU(zOt,t,1,7)),r=new AL(t.n);r.e!=r.i.gc();)i=JRn(n,BB(kpn(r),137),!0,0,0),e.c[e.c.length]=i;return c}function eDn(n,t,e,i,r){var c,a,u;if(n.d&&n.d.lg(r),Dvn(n,e,BB(r.Xb(0),33),!1))return!0;if(Dvn(n,i,BB(r.Xb(r.gc()-1),33),!0))return!0;if(NMn(n,r))return!0;for(u=r.Kc();u.Ob();)for(a=BB(u.Pb(),33),c=t.Kc();c.Ob();)if(_Dn(n,a,BB(c.Pb(),33)))return!0;return!1}function iDn(n,t,e){var i,r,c,a,u,o,s,h,f;f=t.c.length;n:for(c=BB((s=n.Yg(e))>=0?n._g(s,!1,!0):cOn(n,e,!1),58).Kc();c.Ob();){for(r=BB(c.Pb(),56),h=0;h<f;++h)if(l1(h,t.c.length),o=(a=BB(t.c[h],72)).dd(),u=a.ak(),i=r.bh(u,!1),null==o?null!=i:!Nfn(o,i))continue n;return r}return null}function rDn(n,t,e,i){var r,c,a,u;for(r=BB(DSn(t,(kUn(),CIt)).Kc().Pb(),11),c=BB(DSn(t,oIt).Kc().Pb(),11),u=new Wb(n.j);u.a<u.c.c.length;){for(a=BB(n0(u),11);0!=a.e.c.length;)MZ(BB(xq(a.e,0),17),r);for(;0!=a.g.c.length;)SZ(BB(xq(a.g,0),17),c)}e||hon(t,(hWn(),hlt),null),i||hon(t,(hWn(),flt),null)}function cDn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)return qun(n);if(i=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),t&&(sqn((!i.a&&(i.a=new $L(xOt,i,5)),i.a)),Ien(i,0),Aen(i,0),Ten(i,0),Oen(i,0)),e)for(!n.a&&(n.a=new eU(FOt,n,6,6)),r=n.a;r.i>1;)fDn(r,r.i-1);return i}function aDn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Comment post-processing",1),c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),i=new Np,u=new Wb(r.a);u.a<u.c.c.length;)a=BB(n0(u),10),o=BB(mMn(a,(hWn(),Klt)),15),e=BB(mMn(a,Dft),15),(o||e)&&(Wzn(a,o,e),o&&gun(i,o),e&&gun(i,e));gun(r.a,i)}HSn(t)}function uDn(n,t){var e,i,r,c,a,u;for(e=new Lp,r=new Wb(n.b);r.a<r.c.c.length;){for(u=!0,i=0,a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)switch((c=BB(n0(a),10)).k.g){case 4:++i;case 1:w3(e,c);break;case 0:oCn(c,t);default:e.b==e.c||p_n(e,i,u,!1,t),u=!1,i=0}e.b==e.c||p_n(e,i,u,!0,t)}}function oDn(n,t){var e,i,r,c,a,u;for(r=new Np,e=0;e<=n.i;e++)(i=new HX(t)).p=n.i-e,r.c[r.c.length]=i;for(u=new Wb(n.o);u.a<u.c.c.length;)PZ(a=BB(n0(u),10),BB(xq(r,n.i-n.f[a.p]),29));for(c=new Wb(r);c.a<c.c.c.length;)0==BB(n0(c),29).a.c.length&&AU(c);t.b.c=x8(Ant,HWn,1,0,5,1),gun(t.b,r)}function sDn(n,t){var e,i,r,c,a,u;for(e=0,u=new Wb(t);u.a<u.c.c.length;){for(a=BB(n0(u),11),nhn(n.b,n.d[a.p]),r=new m6(a.b);y$(r.a)||y$(r.b);)(c=ME(n,a==(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c?i.d:i.c))>n.d[a.p]&&(e+=n5(n.b,c),d3(n.a,iln(c)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function hDn(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=BB(kpn(r),33)).a&&(i.a=new eU(UOt,i,10,11)),i.a).i||(c+=hDn(n,i,!1));if(e)for(a=JJ(t);a;)c+=(!a.a&&(a.a=new eU(UOt,a,10,11)),a.a).i,a=JJ(a);return c}function fDn(n,t){var e,i,r,c;return n.ej()?(i=null,r=n.fj(),n.ij()&&(i=n.kj(n.pi(t),null)),e=n.Zi(4,c=Lyn(n,t),null,t,r),n.bj()&&null!=c?(i=n.dj(c,i))?(i.Ei(e),i.Fi()):n.$i(e):i?(i.Ei(e),i.Fi()):n.$i(e),c):(c=Lyn(n,t),n.bj()&&null!=c&&(i=n.dj(c,null))&&i.Fi(),c)}function lDn(n){var t,i,r,c,a,u,o,s,h,f;for(h=n.a,t=new Rv,s=0,r=new Wb(n.d);r.a<r.c.c.length;){for(f=0,_rn((i=BB(n0(r),222)).b,new $n),u=spn(i.b,0);u.b!=u.d.c;)a=BB(b3(u),222),t.a._b(a)&&(c=i.c,f<(o=a.c).d+o.a+h&&f+c.a+h>o.d&&(f=o.d+o.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 bDn(){bDn=O,hft=new LP("COMMENTS",0),lft=new LP("EXTERNAL_PORTS",1),bft=new LP("HYPEREDGES",2),wft=new LP("HYPERNODES",3),dft=new LP("NON_FREE_PORTS",4),gft=new LP("NORTH_SOUTH_PORTS",5),vft=new LP(G1n,6),sft=new LP("CENTER_LABELS",7),fft=new LP("END_LABELS",8),pft=new LP("PARTITIONS",9)}function wDn(n){var t,e,i,r,c;for(r=new Np,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||(r.c[r.c.length]=c));return r}function dDn(n){var t,e,i,r,c;for(r=new Rv,t=new $q((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(c=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),t.a._b(c)||r.a.zc(c,r));return r}function gDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function pDn(n,t,e,i,r){return i<0?((i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn]),t))<0&&(i=zTn(n,r,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function vDn(n,t,e,i,r,c){var a,u,o;if(u=32,i<0){if(t[0]>=n.length)return!1;if(43!=(u=fV(n,t[0]))&&45!=u)return!1;if(++t[0],(i=UIn(n,t))<0)return!1;45==u&&(i=-i)}return 32==u&&t[0]-e==2&&2==r.b&&(a=(o=(new AT).q.getFullYear()-sQn+sQn-80)%100,c.a=i==a,i+=100*(o/100|0)+(i<a?100:0)),c.p=i,!0}function mDn(n,t){var i,r,c;JJ(n)&&(c=BB(mMn(t,(HXn(),Fgt)),174),GI(ZAn(n,ept))===GI((QEn(),YCt))&&Ypn(n,ept,QCt),GM(),r=qzn(new Dy(JJ(n)),new JN(JJ(n)?new Dy(JJ(n)):null,n),!1,!0),orn(c,(mdn(),DIt)),(i=BB(mMn(t,Hgt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function yDn(n,t,e){var i,r,c,a,u,o;for(a=BB(mMn(n,(hWn(),nlt)),15).Kc();a.Ob();){switch(c=BB(a.Pb(),10),BB(mMn(c,(HXn(),kgt)),163).g){case 2:PZ(c,t);break;case 4:PZ(c,e)}for(r=new oz(ZL(hbn(c).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c&&i.d||(u=!i.d,o=BB(mMn(i,mlt),11),u?MZ(i,o):SZ(i,o))}}function kDn(){kDn=O,Bst=new WV(mJn,0,(kUn(),sIt),sIt),Gst=new WV(kJn,1,SIt,SIt),Fst=new WV(yJn,2,oIt,oIt),Xst=new WV(jJn,3,CIt,CIt),qst=new WV("NORTH_WEST_CORNER",4,CIt,sIt),Hst=new WV("NORTH_EAST_CORNER",5,sIt,oIt),Ust=new WV("SOUTH_WEST_CORNER",6,SIt,CIt),zst=new WV("SOUTH_EAST_CORNER",7,oIt,SIt)}function jDn(){jDn=O,MMt=Pun(Gk(LNt,1),FQn,25,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368e3,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]),e.Math.pow(2,-65)}function EDn(n,t){var e,i,r,c,a;if(0==n.c.length)return new rI(iln(0),iln(0));for(e=(l1(0,n.c.length),BB(n.c[0],11)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(l1(++a,n.c.length),BB(n.c[a],11)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(l1(a,n.c.length),BB(n.c[a],11)).j;return new rI(iln(a),iln(r))}function TDn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=t.c.length,l1(i,t.c.length),o=(u=BB(t.c[i],286)).a.o.a,l=u.c,b=0,h=u.c;h<=u.f;h++){if(o<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)l1(c,t.c.length),(r=BB(t.c[c],286)).c<=h&&r.f>=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function MDn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,16==(16&n.e)&&(n.i=pKn(n.i)),n.j=n.i.length,QXn(n),c=Vdn(n),n.d!=n.j)throw Hp(new ak(kWn((u$(),w8n))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=BB(bW(n.g,i),584),n.f<=r.a)throw Hp(new ak(kWn((u$(),d8n))));n.g.a.c=x8(Ant,HWn,1,0,5,1)}return c}function SDn(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new eU(WAt,n,9,5)),i=new AL(n.a);i.e!=i.i.gc();)if(mK(t,null==(r=(e=BB(kpn(i),678)).c)?e.zb:r))return e;return null}function PDn(n,t){var e;switch(e=null,t.g){case 1:n.e.Xe((sWn(),ePt))&&(e=BB(n.e.We(ePt),249));break;case 3:n.e.Xe((sWn(),iPt))&&(e=BB(n.e.We(iPt),249));break;case 2:n.e.Xe((sWn(),tPt))&&(e=BB(n.e.We(tPt),249));break;case 4:n.e.Xe((sWn(),rPt))&&(e=BB(n.e.We(rPt),249))}return!e&&(e=BB(n.e.We((sWn(),ZSt)),249)),e}function CDn(n,t,e){var i,r,c,a,u,o;for(t.p=1,r=t.c,o=xwn(t,(ain(),qvt)).Kc();o.Ob();)for(i=new Wb(BB(o.Pb(),11).g);i.a<i.c.c.length;)t!=(u=BB(n0(i),17).d.i)&&u.c.p<=r.p&&((c=r.p+1)==e.b.c.length?((a=new HX(e)).p=c,WB(e.b,a),PZ(u,a)):PZ(u,a=BB(xq(e.b,c),29)),CDn(n,u,e))}function IDn(n,t,i){var r,c,a,u,o,s;for(c=i,a=0,o=new Wb(t);o.a<o.c.c.length;)Ypn(u=BB(n0(o),33),(Uyn(),Ljt),iln(c++)),s=wDn(u),r=e.Math.atan2(u.j+u.f/2,u.i+u.g/2),(r+=r<0?Z3n:0)<.7853981633974483||r>p4n?m$(s,n.b):r<=p4n&&r>v4n?m$(s,n.d):r<=v4n&&r>m4n?m$(s,n.c):r<=m4n&&m$(s,n.a),a=IDn(n,s,a);return c}function ODn(){var n;for(ODn=O,Jtt=new X6(1,1),net=new X6(1,10),eet=new X6(0,0),Ytt=new X6(-1,1),Ztt=Pun(Gk(oet,1),sVn,91,0,[eet,Jtt,new X6(1,2),new X6(1,3),new X6(1,4),new X6(1,5),new X6(1,6),new X6(1,7),new X6(1,8),new X6(1,9),net]),tet=x8(oet,sVn,91,32,0,1),n=0;n<tet.length;n++)tet[n]=npn(yz(1,n))}function ADn(n,t,e,i,r,c){var a,u,o,s;for(u=!jE(AV(n.Oc(),new aw(new Je))).sd((dM(),tit)),a=n,c==(Ffn(),HPt)&&(a=cL(a,152)?o6(BB(a,152)):cL(a,131)?BB(a,131).a:cL(a,54)?new fy(a):new CT(a)),s=a.Kc();s.Ob();)(o=BB(s.Pb(),70)).n.a=t.a,o.n.b=u?t.b+(i.b-o.o.b)/2:r?t.b:t.b+i.b-o.o.b,t.a+=o.o.a+e}function $Dn(n,t,e,i){var r,c,a,u,o;for(r=(i.c+i.a)/2,yQ(t.j),DH(t.j,r),yQ(e.e),DH(e.e,r),o=new zj,a=new Wb(n.f);a.a<a.c.c.length;)Rjn(o,t,u=BB(n0(a),129).a),Rjn(o,e,u);for(c=new Wb(n.k);c.a<c.c.c.length;)Rjn(o,t,u=BB(n0(c),129).b),Rjn(o,e,u);return o.b+=2,o.a+=LQ(t,n.q),o.a+=LQ(n.q,e),o}function LDn(n,t,e){var i,r,c,a,u;if(!h3(t)){for(OTn(u=mcn(e,(cL(t,14)?BB(t,14).gc():F3(t.Kc()))/n.a|0),z3n,1),a=new Aa,c=null,r=t.Kc();r.Ob();)i=BB(r.Pb(),86),a=Wen(Pun(Gk(xnt,1),HWn,20,0,[a,new bg(i)])),c&&(hon(c,(qqn(),bkt),i),hon(i,ckt,c),G8(i)==G8(c)&&(hon(c,wkt,i),hon(i,akt,c))),c=i;HSn(u),LDn(n,a,e)}}function NDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.d,n.f==(G7(),rrt)?u+=(e.a-n.e.b)/2:n.f==irt&&(u+=e.a-n.e.b),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).b=u,u+=a.b+n.a,n.b.g){case 0:c.a=e.c+t.b;break;case 1:c.a=e.c+t.b+(e.b-a.a)/2;break;case 2:c.a=e.c+e.b-t.c-a.a}i.tf(c)}}function xDn(n){var t,e,i,r,c,a,u;for(e=n.i,t=n.n,u=e.c,n.b==(J9(),Qit)?u+=(e.b-n.e.a)/2:n.b==Jit&&(u+=e.b-n.e.a),r=new Wb(n.d);r.a<r.c.c.length;){switch(a=(i=BB(n0(r),181)).rf(),(c=new Gj).a=u,u+=a.a+n.a,n.f.g){case 0:c.b=e.d+t.d;break;case 1:c.b=e.d+t.d+(e.a-a.b)/2;break;case 2:c.b=e.d+e.a-t.a-a.b}i.tf(c)}}function DDn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=new xC(s,l),h=new xC(a,b),r=s,e.p||(r+=n.c),o=new xC(r+=e.F+e.v*n.b,l),f=new xC(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xC(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function RDn(n){NM(n,new MTn(vj(wj(pj(gj(new du,_5n),"ELK Randomizer"),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Qu))),u2(n,_5n,QJn,LIt),u2(n,_5n,vZn,15),u2(n,_5n,yZn,iln(0)),u2(n,_5n,VJn,dZn)}function KDn(){var n,t,e,i,r,c;for(KDn=O,QLt=x8(NNt,v6n,25,255,15,1),YLt=x8(ONt,WVn,25,16,15,1),t=0;t<255;t++)QLt[t]=-1;for(e=57;e>=48;e--)QLt[e]=e-48<<24>>24;for(i=70;i>=65;i--)QLt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)QLt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)YLt[c]=48+c&QVn;for(n=10;n<=15;n++)YLt[n]=65+n-10&QVn}function _Dn(n,t,e){var i,r,c,a,u,o,s,h;return u=t.i-n.g/2,o=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g/2,a=e.g+n.g/2,i=t.f+n.g/2,r=e.f+n.g/2,u<o+a&&o<u&&s<h+r&&h<s||o<u+c&&u<o&&h<s+i&&s<h||u<o+a&&o<u&&s<h&&h<s+i||o<u+c&&u<o&&s<h+r&&h<s}function FDn(n){var t,i,r,c,a;c=BB(mMn(n,(HXn(),Fgt)),21),a=BB(mMn(n,qgt),21),t=new wA(i=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((mdn(),DIt))&&(r=BB(mMn(n,Hgt),8),a.Hc((n_n(),GIt))&&(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)),qy(TD(mMn(n,Bgt)))||UBn(n,i,t)}function BDn(n,t){var e,i,r,c;for(c=abn(t,(kUn(),SIt)).Kc();c.Ob();)i=BB(c.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=abn(t,sIt).Kc();r.Ob();)i=BB(r.Pb(),11),(e=BB(mMn(i,(hWn(),Elt)),10))&&UNn(aM(cM(uM(rM(new Hv,0),.1),n.i[e.p].d),n.i[t.p].a))}function HDn(n){var t,e,i,r,c;if(!n.c){if(c=new Eo,null==(t=P$t).a.zc(n,t)){for(i=new AL(a4(n));i.e!=i.i.gc();)cL(r=lFn(e=BB(kpn(i),87)),88)&&pX(c,HDn(BB(r,26))),f9(c,e);t.a.Bc(n),t.a.gc()}$wn(c),chn(c),n.c=new NO((BB(Wtn(QQ((QX(),t$t).o),15),18),c.i),c.g),P5(n).b&=-33}return n.c}function qDn(n){var t;if(10!=n.c)throw Hp(new ak(kWn((u$(),g8n))));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 Hp(new ak(kWn((u$(),U8n))))}return t}function GDn(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==CQn&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+GDn(aon(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Aqn(e,F5(AQn),!0),t=""+TE(ltt),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 zDn(){if(!Object.create||!Object.getOwnPropertyNames)return!1;var n="__proto__",t=Object.create(null);return void 0===t[n]&&0==Object.getOwnPropertyNames(t).length&&(t[n]=42,42===t[n]&&0!=Object.getOwnPropertyNames(t).length)}function UDn(n){var t,e,i,r,c,a,u;for(t=!1,e=0,r=new Wb(n.d.b);r.a<r.c.c.length;)for((i=BB(n0(r),29)).p=e++,a=new Wb(i.a);a.a<a.c.c.length;)c=BB(n0(a),10),!t&&!h3(hbn(c))&&(t=!0);u=EG((Ffn(),BPt),Pun(Gk(WPt,1),$Vn,103,0,[_Pt,FPt])),t||(orn(u,HPt),orn(u,KPt)),n.a=new ltn(u),$U(n.f),$U(n.b),$U(n.e),$U(n.g)}function XDn(n,t,e){var i,r,c,a,u,o,s,h,f;for(i=e.c,r=e.d,u=g1(t.c),o=g1(t.d),i==t.c?(u=lLn(n,u,r),o=sMn(t.d)):(u=sMn(t.c),o=lLn(n,o,r)),r5(s=new Kj(t.a),u,s.a,s.a.a),r5(s,o,s.c.b,s.c),a=t.c==i,f=new Jv,c=0;c<s.b-1;++c)h=new rI(BB(Dpn(s,c),8),BB(Dpn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:WB(f.a,h);return f}function WDn(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=BB(mMn(n,(HXn(),ipt)),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function VDn(n,t,i,r){var c,a,u,o;if(F3((q_(),new oz(ZL(hbn(t).a.Kc(),new h))))>=n.a)return-1;if(!eTn(t,i))return-1;if(h3(BB(r.Kb(t),20)))return 1;for(c=0,u=BB(r.Kb(t),20).Kc();u.Ob();){if(-1==(o=VDn(n,(a=BB(u.Pb(),17)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,o))>n.c-1)return-1}return c+1}function QDn(n,t){var e,i,r,c,a,u;if(GI(t)===GI(n))return!0;if(!cL(t,15))return!1;if(i=BB(t,15),u=n.gc(),i.gc()!=u)return!1;if(a=i.Kc(),n.ni()){for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),null==r?null!=c:!Nfn(r,c))return!1}else for(e=0;e<u;++e)if(r=n.ki(e),c=a.Pb(),GI(r)!==GI(c))return!1;return!0}function YDn(n,t){var e,i,r,c,a,u;if(n.f>0)if(n.qj(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(Nfn(t,(r=i[a]).dd()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=BB(e.g,367),u=e.i,a=0;a<u;++a)if(r=i[a],GI(t)===GI(r.dd()))return!0;return!1}function JDn(n,t,e){var i,r,c,a;OTn(e,"Orthogonally routing hierarchical port edges",1),n.a=0,NGn(t,i=UHn(t)),Qqn(n,t,i),fUn(t),r=BB(mMn(t,(HXn(),ept)),98),Czn((l1(0,(c=t.b).c.length),BB(c.c[0],29)),r,t),Czn(BB(xq(c,c.c.length-1),29),r,t),TBn((l1(0,(a=t.b).c.length),BB(a.c[0],29))),TBn(BB(xq(a,a.c.length-1),29)),HSn(e)}function ZDn(n){switch(n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n-48<<24>>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 Hp(new Mk("Invalid hexadecimal"))}}function nRn(n,t,e){var i,r,c,a;for(OTn(e,"Processor order nodes",2),n.a=Gy(MD(mMn(t,(CAn(),xkt)))),r=new YT,a=spn(t.b,0);a.b!=a.d.c;)qy(TD(mMn(c=BB(b3(a),86),(qqn(),dkt))))&&r5(r,c,r.c.b,r.c);Px(0!=r.b),KHn(n,i=BB(r.a.a.c,86)),!e.b&&qin(e,1),BRn(n,i,0-Gy(MD(mMn(i,(qqn(),ukt))))/2,0),!e.b&&qin(e,1),HSn(e)}function tRn(){tRn=O,Rit=new HS("SPIRAL",0),$it=new HS("LINE_BY_LINE",1),Lit=new HS("MANHATTAN",2),Ait=new HS("JITTER",3),xit=new HS("QUADRANTS_LINE_BY_LINE",4),Dit=new HS("QUADRANTS_MANHATTAN",5),Nit=new HS("QUADRANTS_JITTER",6),Oit=new HS("COMBINE_LINE_BY_LINE_MANHATTAN",7),Iit=new HS("COMBINE_JITTER_MANHATTAN",8)}function eRn(n,t,e,i){var r,c,a,u,o,s;for(o=Njn(n,e),s=Njn(t,e),r=!1;o&&s&&(i||myn(o,s,e));)a=Njn(o,e),u=Njn(s,e),A7(t),A7(n),c=o.c,rGn(o,!1),rGn(s,!1),e?(Qyn(t,s.p,c),t.p=s.p,Qyn(n,o.p+1,c),n.p=o.p):(Qyn(n,o.p,c),n.p=o.p,Qyn(t,s.p+1,c),t.p=s.p),PZ(o,null),PZ(s,null),o=a,s=u,r=!0;return r}function iRn(n,t,e,i){var r,c,a,u,o;for(r=!1,c=!1,u=new Wb(i.j);u.a<u.c.c.length;)GI(mMn(a=BB(n0(u),11),(hWn(),dlt)))===GI(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return o=0,r&&r^c?o=e.j==(kUn(),sIt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?o=n.e[i.c.p][i.p]+1:r&&c&&(o=e.j==(kUn(),sIt)?0:t/2),o}function rRn(n,t,e,i,r,c,a,u){var o,s,h;for(o=0,null!=t&&(o^=vvn(t.toLowerCase())),null!=e&&(o^=vvn(e)),null!=i&&(o^=vvn(i)),null!=a&&(o^=vvn(a)),null!=u&&(o^=vvn(u)),s=0,h=c.length;s<h;s++)o^=vvn(c[s]);n?o|=256:o&=-257,r?o|=16:o&=-17,this.f=o,this.i=null==t?null:(kW(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=u}function cRn(n,t,e){var i,r;switch(r=null,t.g){case 1:gcn(),r=Nut;break;case 2:gcn(),r=Dut}switch(i=null,e.g){case 1:gcn(),i=xut;break;case 2:gcn(),i=Lut;break;case 3:gcn(),i=Rut;break;case 4:gcn(),i=Kut}return r&&i?KB(n.j,new Hf(new Jy(Pun(Gk(Lnt,1),HWn,169,0,[BB(yX(r),169),BB(yX(i),169)])))):(SQ(),SQ(),set)}function aRn(n){var t,e,i;switch(t=BB(mMn(n,(HXn(),Hgt)),8),hon(n,Hgt,new xC(t.b,t.a)),BB(mMn(n,kdt),248).g){case 1:hon(n,kdt,(wvn(),LMt));break;case 2:hon(n,kdt,(wvn(),IMt));break;case 3:hon(n,kdt,(wvn(),AMt));break;case 4:hon(n,kdt,(wvn(),$Mt))}(n.q?n.q:(SQ(),SQ(),het))._b(spt)&&(i=(e=BB(mMn(n,spt),8)).a,e.a=e.b,e.b=i)}function uRn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw Hp(new Ay("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new QK(i),yrn(this.e,this.c,(kUn(),CIt)),this.i=new QK(i),yrn(this.i,this.c,oIt),this.f=new lG(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(uSn(),Mut),this.a&&gPn(this,n,t.length)}function oRn(n,t){var e,i,r,c,a,u;c=!n.B.Hc((n_n(),HIt)),a=n.B.Hc(zIt),n.a=new Hwn(a,c,n.c),n.n&&kQ(n.a.n,n.n),jy(n.g,(Dtn(),zit),n.a),t||((i=new Ign(1,c,n.c)).n.a=n.k,mG(n.p,(kUn(),sIt),i),(r=new Ign(1,c,n.c)).n.d=n.k,mG(n.p,SIt,r),(u=new Ign(0,c,n.c)).n.c=n.k,mG(n.p,CIt,u),(e=new Ign(0,c,n.c)).n.b=n.k,mG(n.p,oIt,e))}function sRn(n){var t,e,i;switch((t=BB(mMn(n.d,(HXn(),Zdt)),218)).g){case 2:e=MXn(n);break;case 3:i=new Np,JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Or),new Ar),new $r),new pr),new Cd(i)),e=i;break;default:throw Hp(new Fy("Compaction not supported for "+t+" edges."))}gqn(n,e),e5(new Cb(n.g),new Sd(n))}function hRn(n,t){var e;return e=new Zn,t&&qan(e,BB(RX(n.a,DOt),94)),cL(t,470)&&qan(e,BB(RX(n.a,ROt),94)),cL(t,354)?(qan(e,BB(RX(n.a,zOt),94)),e):(cL(t,82)&&qan(e,BB(RX(n.a,KOt),94)),cL(t,239)?(qan(e,BB(RX(n.a,UOt),94)),e):cL(t,186)?(qan(e,BB(RX(n.a,XOt),94)),e):(cL(t,352)&&qan(e,BB(RX(n.a,_Ot),94)),e))}function fRn(){fRn=O,Zct=new XA((sWn(),pPt),iln(1)),cat=new XA(LPt,80),rat=new XA(SPt,5),Fct=new XA(cSt,dZn),nat=new XA(vPt,iln(1)),iat=new XA(kPt,(hN(),!0)),Qct=new WA(50),Vct=new XA(XSt,Qct),Hct=CSt,Yct=uPt,Bct=new XA(dSt,!1),Wct=USt,Xct=qSt,Uct=KSt,zct=DSt,Jct=fPt,jSn(),Gct=Ict,aat=Nct,qct=Cct,tat=Act,eat=Lct}function lRn(n){var t,e,i,r,c,a,u;for(u=new v5,a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k!=(uSn(),Mut))for(_An(u,c,new Gj),r=new oz(ZL(lbn(c).a.Kc(),new h));dAn(r);)if((i=BB(U5(r),17)).c.i.k!=Mut&&i.d.i.k!=Mut)for(e=spn(i.a,0);e.b!=e.d.c;)Yjn(u,new dP((t=BB(b3(e),8)).a,t.b));return u}function bRn(){bRn=O,RTt=new up(K4n),OM(),xTt=new $O(q4n,DTt=GTt),Lun(),LTt=new $O(_4n,NTt=WTt),$Sn(),ATt=new $O(F4n,$Tt=rTt),PTt=new $O(B4n,null),$6(),ITt=new $O(H4n,OTt=ZEt),CM(),jTt=new $O(G4n,ETt=XEt),TTt=new $O(z4n,(hN(),!1)),MTt=new $O(U4n,iln(64)),STt=new $O(X4n,!0),CTt=nTt}function wRn(n){var t,e,i,r,c;if(null==n.a)if(n.a=x8($Nt,ZYn,25,n.c.b.c.length,16,1),n.a[0]=!1,Lx(n.c,(HXn(),Upt)))for(e=BB(mMn(n.c,Upt),15).Kc();e.Ob();)(t=BB(e.Pb(),19).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Wb(n.c.b)).a<c.c.c.length&&n0(c),i=1;c.a<c.c.c.length;)r=BB(n0(c),29),n.a[i++]=U$n(r)}function dRn(n,t){var e,i;switch(i=n.b,t){case 1:n.b|=1,n.b|=4,n.b|=8;break;case 2:n.b|=2,n.b|=4,n.b|=8;break;case 4:n.b|=1,n.b|=2,n.b|=4,n.b|=8;break;case 3:n.b|=16,n.b|=8;break;case 0:n.b|=32,n.b|=16,n.b|=8,n.b|=1,n.b|=2,n.b|=4}if(n.b!=i&&n.c)for(e=new AL(n.c);e.e!=e.i.gc();)ACn(P5(BB(kpn(e),473)),t)}function gRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(r=!1,u=0,o=(a=t).length;u<o;++u)c=a[u],qy((hN(),!!c.e))&&!BB(xq(n.b,c.e.p),214).s&&(r|=(s=c.e,(f=(h=BB(xq(n.b,s.p),214)).e)[l=fj(e,f.length)][0].k==(uSn(),Mut)?f[l]=$Nn(c,f[l],e?(kUn(),CIt):(kUn(),oIt)):h.c.Tf(f,e),b=DNn(n,h,e,i),xxn(h.e,h.o,e),b));return r}function pRn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)GI(ZAn(i=BB(kpn(r),33),(sWn(),ESt)))!==GI((ufn(),mCt))&&((a=BB(ZAn(t,mPt),149))==(e=BB(ZAn(i,mPt),149))||a&&j5(a,e))&&0!=(!i.a&&(i.a=new eU(UOt,i,10,11)),i.a).i&&(c+=pRn(n,i));return c}function vRn(n){var t,e,i,r,c,a,u;for(i=0,u=0,a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),101),r=BB(P4(AV(new Rq(null,new w1(c.j,16)),new Xr),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=null,i<=u?(kUn(),e=sIt,i+=r.gc()):u<i&&(kUn(),e=SIt,u+=r.gc()),t=e,JT($V(r.Oc(),new Hr),new Ad(t))}function mRn(n){var t,e,i,r,c,a,u,o;for(n.b=new vOn(new Jy((kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt]))),new Jy((Crn(),Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])))),u=0,o=(a=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;u<o;++u)for(c=a[u],i=0,r=(e=Pun(Gk(Wst,1),$Vn,361,0,[Rst,Dst,xst])).length;i<r;++i)t=e[i],Wjn(n.b,c,t,new Np)}function yRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lIn(),rIt)),e=n.u.Hc(tIt),i=n.u.Hc(nIt),s=n.u.Hc(cIt),f=n.B.Hc((n_n(),QIt)),h=!e&&!i&&(s||2==a.gc()),hxn(n,t),r=null,o=null,u){for(o=r=BB((c=a.Kc()).Pb(),111);c.Ob();)o=BB(c.Pb(),111);r.d.b=0,o.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(DTn(a),u&&(r.d.b=0,o.d.c=0))}function kRn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=BB(BB(h6(n.r,t),21),84),u=n.u.Hc((lIn(),rIt)),e=n.u.Hc(tIt),i=n.u.Hc(nIt),o=n.u.Hc(cIt),f=n.B.Hc((n_n(),QIt)),s=!e&&!i&&(o||2==a.gc()),V_n(n,t),h=null,r=null,u){for(r=h=BB((c=a.Kc()).Pb(),111);c.Ob();)r=BB(c.Pb(),111);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(RTn(a),u&&(h.d.d=0,r.d.a=0))}function jRn(n,t,e){var i,r,c,a,u;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,WB(e.e,t),i==(uSn(),Put)||i==Iut)for(r=new Wb(t.j);r.a<r.c.c.length;)for(u=new zw(new Wb(new Gw(BB(n0(r),11)).a.g));y$(u.a);)if(a=(c=BB(n0(u.a),17).d.i).k,t.c!=c.c&&(a==Put||a==Iut)&&jRn(n,c,e))return!0;return!0}function ERn(n){var t;return 0!=(64&n.Db)?KOn(n):((t=new fN(KOn(n))).a+=" (changeable: ",yE(t,0!=(n.Bb&k6n)),t.a+=", volatile: ",yE(t,0!=(n.Bb&M9n)),t.a+=", transient: ",yE(t,0!=(n.Bb&_Qn)),t.a+=", defaultValueLiteral: ",cO(t,n.j),t.a+=", unsettable: ",yE(t,0!=(n.Bb&T9n)),t.a+=", derived: ",yE(t,0!=(n.Bb&hVn)),t.a+=")",t.a)}function TRn(n){var t,e,i,r,c,a,u,o,s,h;for(e=NLn(n.d),c=(r=BB(mMn(n.b,(Epn(),vct)),116)).b+r.c,a=r.d+r.a,o=e.d.a*n.e+c,u=e.b.a*n.f+a,Ll(n.b,new xC(o,u)),h=new Wb(n.g);h.a<h.c.c.length;)t=UR(Fx(new xC((s=BB(n0(h),562)).g-e.a.a,s.i-e.c.a),s.a,s.b),kL(Bx(B$(VA(s.e)),s.d*s.a,s.c*s.b),-.5)),i=QA(s.e),ij(s.e,XR(t,i))}function MRn(n,t,e,i){var r,c,a,u,o;for(o=x8(xNt,sVn,104,(kUn(),Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length,0,2),a=0,u=(c=Pun(Gk(FIt,1),YZn,61,0,[PIt,sIt,oIt,SIt,CIt])).length;a<u;++a)o[(r=c[a]).g]=x8(xNt,qQn,25,n.c[r.g],15,1);return Bkn(o,n,sIt),Bkn(o,n,SIt),xmn(o,n,sIt,t,e,i),xmn(o,n,oIt,t,e,i),xmn(o,n,SIt,t,e,i),xmn(o,n,CIt,t,e,i),o}function SRn(n,t,e){if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.b,t)){if(FT(BB(RX(n.b,t),53),e))return-1}else VW(n.b,t,new Rv);if(hU(n.b,e)){if(FT(BB(RX(n.b,e),53),t))return 1}else VW(n.b,e,new Rv);return 0}function PRn(n,t,e,i){var r,c,a,u,o,s;if(null==e)for(r=BB(n.g,119),u=0;u<n.i;++u)if((a=r[u]).ak()==t)return _pn(n,a,i);return ZM(),c=BB(t,66).Oj()?BB(e,72):Z3(t,e),mA(n.e)?(s=!adn(n,t),i=Ywn(n,c,i),o=t.$j()?LY(n,3,t,null,e,pBn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)),s):LY(n,1,t,t.zj(),e,-1,s),i?i.Ei(o):i=o):i=Ywn(n,c,i),i}function CRn(n){var t,i,r,c,a,u;n.q!=(QEn(),WCt)&&n.q!=XCt&&(c=n.f.n.d+XH(BB(oV(n.b,(kUn(),sIt)),124))+n.c,t=n.f.n.a+XH(BB(oV(n.b,SIt),124))+n.c,r=BB(oV(n.b,oIt),124),u=BB(oV(n.b,CIt),124),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,u.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,u.n.a-t),r.n.d=a,u.n.d=a,r.n.a=i,u.n.a=i)}function IRn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Restoring reversed edges",1),a=new Wb(n.b);a.a<a.c.c.length;)for(u=new Wb(BB(n0(a),29).a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(r=0,c=(i=Z0(BB(n0(o),11).g)).length;r<c;++r)qy(TD(mMn(e=i[r],(hWn(),Clt))))&&tBn(e,!1);HSn(t)}function ORn(){this.b=new v4,this.d=new v4,this.e=new v4,this.c=new v4,this.a=new xp,this.f=new xp,xJ(PMt,new mu,new yu),xJ(NMt,new Au,new $u),xJ(Eut,new Lu,new Nu),xJ(_ut,new Du,new Ru),xJ(hOt,new Ku,new _u),xJ(met,new ku,new ju),xJ(Iet,new Eu,new Tu),xJ(jet,new Mu,new Su),xJ(Eet,new Pu,new Cu),xJ(Bet,new Iu,new Ou)}function ARn(n){var t,e,i,r,c,a;return c=0,(t=Ikn(n)).Bj()&&(c|=4),0!=(n.Bb&T9n)&&(c|=2),cL(n,99)?(r=Cvn(e=BB(n,18)),0!=(e.Bb&h6n)&&(c|=32),r&&(bX(dZ(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&h6n)&&(c|=64)),0!=(e.Bb&BQn)&&(c|=M9n),c|=k6n):cL(t,457)?c|=512:(i=t.Bj())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function $Rn(n,t){var e,i,r,c,a;for(n=null==n?zWn:(kW(n),n),r=0;r<t.length;r++)t[r]=iLn(t[r]);for(e=new Ik,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+fx(null==n?zWn:(kW(n),n),a,c),uO(e,t[i++]),a=c+2;if(G0(e,n,a,n.length),i<t.length){for(e.a+=" [",uO(e,t[i++]);i<t.length;)e.a+=FWn,uO(e,t[i++]);e.a+="]"}return e.a}function LRn(n){var t,e,i,r,c;for(c=new J6(n.a.c.length),r=new Wb(n.a);r.a<r.c.c.length;){switch(i=BB(n0(r),10),t=null,(e=BB(mMn(i,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),t=$ht;break;case 3:case 4:Jun(),t=Oht}t?(hon(i,(hWn(),Gft),(Jun(),$ht)),t==Oht?RNn(i,e,(ain(),Hvt)):t==$ht&&RNn(i,e,(ain(),qvt))):c.c[c.c.length]=i}return c}function NRn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Wb(t);o.a<o.c.c.length;){for(u=BB(n0(o),11),nhn(n.b,n.d[u.p]),a=0,r=new m6(u.b);y$(r.a)||y$(r.b);)CW(i=BB(y$(r.a)?n0(r.a):n0(r.b),17))?(c=ME(n,u==i.c?i.d:i.c))>n.d[u.p]&&(e+=n5(n.b,c),d3(n.a,iln(c))):++a;for(e+=n.b.d*a;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function xRn(n,t){var e;return n.f==uLt?(e=DW(B7((IPn(),Z$t),t)),n.e?4==e&&t!=(TOn(),lLt)&&t!=(TOn(),sLt)&&t!=(TOn(),hLt)&&t!=(TOn(),fLt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(Z1(B7((IPn(),Z$t),t)))||n.d.Hc(Fqn((IPn(),Z$t),n.b,t))))||!(!n.f||!aNn((IPn(),n.f),jV(B7(Z$t,t))))&&(e=DW(B7(Z$t,t)),n.e?4==e:2==e)}function DRn(n,t,i,r){var c,a,u,o,s,h,f,l;return s=(u=BB(ZAn(i,(sWn(),gPt)),8)).a,f=u.b+n,(c=e.Math.atan2(f,s))<0&&(c+=Z3n),(c+=t)>Z3n&&(c-=Z3n),h=(o=BB(ZAn(r,gPt),8)).a,l=o.b+n,(a=e.Math.atan2(l,h))<0&&(a+=Z3n),(a+=t)>Z3n&&(a-=Z3n),h$(),rin(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:zO(isNaN(c),isNaN(a))}function RRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),57),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),57)).i=KQn,a=t.c.Kc();a.Ob();)c=BB(a.Pb(),57),BB(qI(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),57)).c.$b(),t.c=BB(qI(AY(u.f,t)),15);_xn(n)}function KRn(n){var t,e,i,r,c,a,u;for(u=new xp,i=new Wb(n.a.b);i.a<i.c.c.length;)VW(u,t=BB(n0(i),81),new Np);for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((t=BB(n0(r),81)).o=KQn,a=t.f.Kc();a.Ob();)c=BB(a.Pb(),81),BB(qI(AY(u.f,c)),15).Fc(t);for(e=new Wb(n.a.b);e.a<e.c.c.length;)(t=BB(n0(e),81)).f.$b(),t.f=BB(qI(AY(u.f,t)),15);BNn(n)}function _Rn(n,t,e,i){var r,c;for(Gkn(n,t,e,i),xl(t,n.j-t.j+e),Dl(t,n.k-t.k+i),c=new Wb(t.f);c.a<c.c.c.length;)switch((r=BB(n0(c),324)).a.g){case 0:won(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:won(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:won(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:won(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function FRn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw Hp(new Sv);a=t>>5,c=yz(1,dG(yz(31&t,1))),n.n[e][a]=r?i0(n.n[e][a],c):e0(n.n[e][a],uH(c)),c=yz(c,1),n.n[e][a]=i?i0(n.n[e][a],c):e0(n.n[e][a],uH(c))}catch(u){throw cL(u=lun(u),320)?Hp(new Ay(MJn+n.o+"*"+n.p+SJn+t+FWn+e+PJn)):Hp(u)}}function BRn(n,t,i,r){var c,a;t&&(c=Gy(MD(mMn(t,(qqn(),fkt))))+r,a=i+Gy(MD(mMn(t,ukt)))/2,hon(t,gkt,iln(dG(fan(e.Math.round(c))))),hon(t,pkt,iln(dG(fan(e.Math.round(a))))),0==t.d.b||BRn(n,BB(iL(new wg(spn(new bg(t).a.d,0))),86),i+Gy(MD(mMn(t,ukt)))+n.a,r+Gy(MD(mMn(t,okt)))),null!=mMn(t,wkt)&&BRn(n,BB(mMn(t,wkt),86),i,r))}function HRn(n,t){var i,r,c,a,u,o,s,h,f,l,b;for(c=2*Gy(MD(mMn(s=vW(t.a),(HXn(),Tpt)))),f=Gy(MD(mMn(s,Apt))),h=e.Math.max(c,f),a=x8(xNt,qQn,25,t.f-t.c+1,15,1),r=-h,i=0,o=t.b.Kc();o.Ob();)u=BB(o.Pb(),10),r+=n.a[u.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Wb(t.e);b.a<b.c.c.length;)l=BB(n0(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function qRn(n,t,e,i){var r,c,a,u,o,s,h,f;for(f=new dE(new Yd(n)),u=0,o=(a=Pun(Gk(Out,1),a1n,10,0,[t,e])).length;u<o;++u)for(h=Lfn(a[u],i).Kc();h.Ob();)for(c=new m6((s=BB(h.Pb(),11)).b);y$(c.a)||y$(c.b);)b5(r=BB(y$(c.a)?n0(c.a):n0(c.b),17))||(Mon(f.a,s,(hN(),ptt)),CW(r)&&ZU(f,s==r.c?r.d:r.c));return yX(f),new t_(f)}function GRn(n,t){var e,i,r,c;if(0!=(c=BB(ZAn(n,(sWn(),wPt)),61).g-BB(ZAn(t,wPt),61).g))return c;if(e=BB(ZAn(n,sPt),19),i=BB(ZAn(t,sPt),19),e&&i&&0!=(r=e.a-i.a))return r;switch(BB(ZAn(n,wPt),61).g){case 1:return Pln(n.i,t.i);case 2:return Pln(n.j,t.j);case 3:return Pln(t.i,n.i);case 4:return Pln(t.j,n.j);default:throw Hp(new Fy(r1n))}}function zRn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(n6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function URn(n){var t,e,i;return 0!=(64&n.Db)?mSn(n):(t=new lN(t6n),(e=n.k)?oO(oO((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),i),'"'))),oO(kE(oO(kE(oO(kE(oO(kE((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function XRn(n,t){var e,i,r,c,a,u;if(null==t||0==t.length)return null;if(!(r=BB(SJ(n.a,t),149))){for(i=new Kb(new Ob(n.b).a.vc().Kc());i.a.Ob();)if(c=BB(i.a.Pb(),42),a=(e=BB(c.dd(),149)).c,u=t.length,mK(a.substr(a.length-u,u),t)&&(t.length==a.length||46==fV(a,a.length-t.length-1))){if(r)return null;r=e}r&&mZ(n.a,t,r)}return r}function WRn(n,t){var e,i,r;return e=new xn,(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())<(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?-1:i==r?0:1}function VRn(n){var t,e,i;Lx(n,(HXn(),$gt))&&((i=BB(mMn(n,$gt),21)).dc()||(e=new YK(t=BB(Vj(GCt),9),BB(SR(t,t.length),9),0),i.Hc((n$n(),$Ct))?orn(e,$Ct):orn(e,LCt),i.Hc(OCt)||orn(e,OCt),i.Hc(ICt)?orn(e,DCt):i.Hc(CCt)?orn(e,xCt):i.Hc(ACt)&&orn(e,NCt),i.Hc(DCt)?orn(e,ICt):i.Hc(xCt)?orn(e,CCt):i.Hc(NCt)&&orn(e,ACt),hon(n,$gt,e)))}function QRn(n){var t,e,i,r,c,a,u;for(r=BB(mMn(n,(hWn(),rlt)),10),l1(0,(i=n.j).c.length),e=BB(i.c[0],11),a=new Wb(r.j);a.a<a.c.c.length;)if(GI(c=BB(n0(a),11))===GI(mMn(e,dlt))){c.j==(kUn(),sIt)&&n.p>r.p?(qCn(c,SIt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=u-t)):c.j==SIt&&r.p>n.p&&(qCn(c,sIt),c.d&&(u=c.o.b,t=c.a.b,c.a.b=-(u-t)));break}return r}function YRn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w;if(c=e,e<i)for(b=new Fan(n.p),w=new Fan(n.p),Frn(b.e,n.e),b.q=n.q,b.r=w,rX(b),Frn(w.j,n.j),w.r=b,rX(w),f=BB((l=new rI(b,w)).a,112),h=BB(l.b,112),l1(c,t.c.length),a=$Dn(n,f,h,r=BB(t.c[c],329)),s=e+1;s<=i;s++)l1(s,t.c.length),Vpn(u=BB(t.c[s],329),o=$Dn(n,f,h,u),r,a)&&(r=u,a=o);return c}function JRn(n,t,e,i,r){var c,a,u,o,s,h,f;if(!(cL(t,239)||cL(t,354)||cL(t,186)))throw Hp(new _y("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,o=t.i+i-a,h=t.j+r-a,s=o+t.g+n.a,f=h+t.f+n.a,DH(c=new km,new xC(o,h)),DH(c,new xC(o,f)),DH(c,new xC(s,f)),DH(c,new xC(s,h)),qan(u=new EAn(c),t),e&&VW(n.b,t,u),u}function ZRn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xC(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function nKn(n,t,e){var i,r,c,a,u,o,s,h;for(c=new xC(t,e),s=new Wb(n.a);s.a<s.c.c.length;)for(UR((o=BB(n0(s),10)).n,c),h=new Wb(o.j);h.a<h.c.c.length;)for(r=new Wb(BB(n0(h),11).g);r.a<r.c.c.length;)for(Ztn((i=BB(n0(r),17)).a,c),(a=BB(mMn(i,(HXn(),vgt)),74))&&Ztn(a,c),u=new Wb(i.b);u.a<u.c.c.length;)UR(BB(n0(u),70).n,c)}function tKn(n){if(0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i)throw Hp(new ck("Edges must have a source."));if(0==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i)throw Hp(new ck("Edges must have a target."));if(!n.b&&(n.b=new hK(KOt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)))throw Hp(new ck("Hyperedges are not supported."))}function eKn(n,t){var e,i,r,c,a,u,o,s,h,f;for(f=0,d3(c=new Lp,t);c.b!=c.c;)for(o=BB(dU(c),214),s=0,h=BB(mMn(t.j,(HXn(),Ldt)),339),a=Gy(MD(mMn(t.j,Idt))),u=Gy(MD(mMn(t.j,Odt))),h!=(mon(),Nvt)&&(s+=a*S$n(o.e,h),s+=u*rxn(o.e)),f+=syn(o.d,o.e)+s,r=new Wb(o.b);r.a<r.c.c.length;)i=BB(n0(r),37),(e=BB(xq(n.b,i.p),214)).s||(f+=nCn(n,e));return f}function iKn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=b=t.length,b1(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(uHn(),cet)[10])|0,0!=(g=b%c)&&++r,u=x8(ANt,hQn,25,r,15,1),e=ret[8],a=0,w=l+(0==g?c:g),d=l;d<o;w=(d=w)+c)i=l_n(t.substr(d,w-d),_Vn,DWn),$On(),s=dvn(u,u,a,e),s+=Uwn(u,a,i),u[a++]=s;h=a,n.e=f,n.d=h,n.a=u,X0(n)}function rKn(n,t,e,i,r,c,a){if(n.c=i.qf().a,n.d=i.qf().b,r&&(n.c+=r.qf().a,n.d+=r.qf().b),n.b=t.rf().a,n.a=t.rf().b,r)switch(r.Hf().g){case 0:case 2:n.c+=r.rf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.rf().a;break;case 1:n.c+=r.rf().a+a,n.d-=a+c.b+a+t.rf().b;break;case 3:n.c+=r.rf().a+a,n.d+=r.rf().b+a+c.b+a}else e?n.c-=a+t.rf().a:n.c+=i.rf().a+a}function cKn(n,t){var e,i;for(this.b=new Np,this.e=new Np,this.a=n,this.d=t,Gpn(this),pdn(this),this.b.dc()?this.c=n.c.p:this.c=BB(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=BB(xq(this.e,this.e.c.length-1),10).c.p,i=BB(mMn(n,(hWn(),Plt)),15).Kc();i.Ob();)if(Lx(e=BB(i.Pb(),70),(HXn(),Vdt))){this.d=BB(mMn(e,Vdt),227);break}}function aKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.e,t),53),a=BB(RX(n.e,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.e,s),53),t),Frn(BB(RX(n.e,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function uKn(n,t,e){var i,r,c,a,u,o,s,h;for(i=BB(RX(n.a,t),53),c=BB(RX(n.a,e),53),r=BB(RX(n.b,t),53),a=BB(RX(n.b,e),53),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=BB(h.Pb(),10),i.a.zc(s,i),TU(BB(RX(n.b,s),53),t),Frn(BB(RX(n.b,s),53),r);for(o=r.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),a.a.zc(u,a),TU(BB(RX(n.a,u),53),e),Frn(BB(RX(n.a,u),53),c)}function oKn(n,t){var e,i,r;switch(OTn(t,"Breaking Point Insertion",1),i=new MAn(n),BB(mMn(n,(HXn(),Bpt)),337).g){case 2:r=new Tc;case 0:r=new wc;break;default:r=new Mc}if(e=r.Vf(n,i),qy(TD(mMn(n,qpt)))&&(e=Dqn(n,e)),!r.Wf()&&Lx(n,Xpt))switch(BB(mMn(n,Xpt),338).g){case 2:e=XCn(i,e);break;case 1:e=KTn(i,e)}e.dc()||tXn(n,e),HSn(t)}function sKn(n,t,e){var i,r,c,a,u,o,s;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),a=N2(s,L6n),VCn((i=new oI(n,o)).a,i.b,a),u=N2(s,N6n),QCn((r=new sI(n,o)).a,r.b,u),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),sXn(n,s,o),xon(n,s,o)}function hKn(n,t){var i,r,c,a,u,o,s;for(c=x8(ANt,hQn,25,n.e.a.c.length,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)c[(a=BB(n0(u),121)).d]+=a.b.a.c.length;for(o=zB(t);0!=o.b;)for(r=L9(new Wb((a=BB(0==o.b?null:(Px(0!=o.b),Atn(o,o.a.a)),121)).g.a));r.Ob();)(s=(i=BB(r.Pb(),213)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&r5(o,s,o.c.b,o.c)}function fKn(n){var t,i,r,c,a,u,o,s,h,f,l;for(i=_Vn,c=DWn,o=new Wb(n.e.a);o.a<o.c.c.length;)a=BB(n0(o),121),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=x8(ANt,hQn,25,i-c+1,15,1),u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).e-=c,++t[a.e];if(r=0,null!=n.k)for(f=0,l=(h=n.k).length;f<l&&(s=h[f],t[r++]+=s,t.length!=r);++f);return t}function lKn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return BB(Kxn(n),19).a==n.o;case 1:case 2:if(-2==n.o)return!1;switch(n.p){case 0:case 1:case 2:case 6:case 5:case 7:return QI(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:Nfn(n.n,n.g)}default:return!1}}function bKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,K5n),"ELK Fixed"),"Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points."),new Vu))),u2(n,K5n,QJn,dCt),u2(n,K5n,g3n,mpn(gCt)),u2(n,K5n,g5n,mpn(hCt)),u2(n,K5n,PZn,mpn(fCt)),u2(n,K5n,BZn,mpn(bCt)),u2(n,K5n,Y2n,mpn(lCt))}function wKn(n,t,e){var i,r,c,a;if(i=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),a=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),(c=Jrn(n,t,i))&&a==c.f&&wW(e,c.i))return e;if(Zrn(n,e,a))throw Hp(new _y("value already present: "+e));return r=new qW(t,i,e,a),c?(LLn(n,c),YCn(n,r,c),c.e=null,c.c=null,c.i):(YCn(n,r,null),qkn(n),null)}function dKn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=BB(RX(e.c,t),459)).f,b=c.a,u=c.b?new xC(a,l):new xC(s,l),h=c.c?new xC(s,b):new xC(a,b),r=s,e.p||(r+=n.c),o=new xC(r+=e.F+e.v*n.b,l),f=new xC(r,b),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[u,o])),e.d.a.gc()>1&&(i=new xC(r,e.b),DH(t.a,i)),nin(t.a,Pun(Gk(PMt,1),sVn,8,0,[f,h]))}function gKn(n,t,e){var i,r,c,a,u,o;if(t){if(e<=-1){if(cL(i=itn(t.Tg(),-1-e),99))return BB(i,18);for(u=0,o=(a=BB(t.ah(i),153)).gc();u<o;++u)if(GI(a.jl(u))===GI(n)&&cL(r=a.il(u),99)&&0!=((c=BB(r,18)).Bb&h6n))return c;throw Hp(new Fy("The containment feature could not be located"))}return Cvn(BB(itn(n.Tg(),e),18))}return null}function pKn(n){var t,e,i,r,c;for(i=n.length,t=new Pk,c=0;c<i;)if(9!=(e=fV(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(b1(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(NX(t,r&QVn),++c):(t.a+="\\",NX(t,r&QVn),++c):NX(t,e&QVn);else for(;c<i&&13!=(e=fV(n,c++))&&10!=e;);return t.a}function vKn(n,t){var e,i,r;for(i=new Wb(t);i.a<i.c.c.length;)if(e=BB(n0(i),33),JIn(n.a,e,e),JIn(n.b,e,e),0!=(r=wDn(e)).c.length)for(n.d&&n.d.lg(r),JIn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JIn(n.b,e,BB(xq(r,r.c.length-1),33));0!=Dun(r).c.length;)r=Dun(r),n.d&&n.d.lg(r),JIn(n.a,e,(l1(0,r.c.length),BB(r.c[0],33))),JIn(n.b,e,BB(xq(r,r.c.length-1),33))}function mKn(n){var t,e,i,r,c,a,u,o,s,h;for(e=0,u=new Wb(n.d);u.a<u.c.c.length;)(a=BB(n0(u),101)).i&&(a.i.c=e++);for(t=kq($Nt,[sVn,ZYn],[177,25],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(l1(r,h.c.length),(o=BB(h.c[r],101)).i)for(c=r+1;c<h.c.length;c++)l1(c,h.c.length),(s=BB(h.c[c],101)).i&&(i=rMn(o,s),t[o.i.c][s.i.c]=i,t[s.i.c][o.i.c]=i);return t}function yKn(n,t,e,i){var r,c,a;return a=new yT(t,e),n.a?i?(++(r=BB(RX(n.b,t),283)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:BB(RX(n.b,t),283).b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(n.e.b=a,a.d=n.e,n.e=a,(r=BB(RX(n.b,t),283))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(VW(n.b,t,r=new sY(a)),++n.c)):(n.a=n.e=a,VW(n.b,t,new sY(a)),++n.c),++n.d,a}function kKn(n,t){var e,i,r,c,a,u,o,s;for(e=new RegExp(t,"g"),o=x8(Qtt,sVn,2,0,6,1),i=0,s=n,c=null;;){if(null==(u=e.exec(s))||""==s){o[i]=s;break}a=u.index,o[i]=s.substr(0,a),s=fx(s,a+u[0].length,s.length),e.lastIndex=0,c==s&&(o[i]=s.substr(0,1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=o.length;r>0&&""==o[r-1];)--r;r<o.length&&(o.length=r)}return o}function jKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,r=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=jKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(r||(r=!0,u=new rG(u)),u.Gc(e)):u=e);return(i=xIn(n,t)).dc()?u||(SQ(),SQ(),set):u?(r||(u=new rG(u)),u.Gc(i),u):i}function EKn(n,t){var e,i,r,c,a,u,o,s;for(u=null,i=!1,c=0,o=a4((s=kY(t)).a).i;c<o;++c)(e=EKn(n,BB(eGn(s,c,cL(a=BB(Wtn(a4(s.a),c),87).c,88)?BB(a,26):(gWn(),d$t)),26))).dc()||(u?(i||(i=!0,u=new rG(u)),u.Gc(e)):u=e);return(r=VOn(n,t)).dc()?u||(SQ(),SQ(),set):u?(i||(u=new rG(u)),u.Gc(r),u):r}function TKn(n,t,e){var i,r,c,a,u,o;if(cL(t,72))return _pn(n,t,e);for(u=null,c=null,i=BB(n.g,119),a=0;a<n.i;++a)if(Nfn(t,(r=i[a]).dd())&&cL(c=r.ak(),99)&&0!=(BB(c,18).Bb&h6n)){u=r;break}return u&&(mA(n.e)&&(o=c.$j()?LY(n,4,c,t,null,pBn(n,c,t,cL(c,99)&&0!=(BB(c,18).Bb&BQn)),!0):LY(n,c.Kj()?2:1,c,t,c.zj(),-1,!0),e?e.Ei(o):e=o),e=TKn(n,u,e)),e}function MKn(n){var t,i,r,c;r=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?c=r.a:(c=SIn(n.f),n.A.Hc((mdn(),RIt))&&!n.B.Hc((n_n(),XIt))&&(c=e.Math.max(c,SIn(BB(oV(n.p,(kUn(),sIt)),244))),c=e.Math.max(c,SIn(BB(oV(n.p,SIt),244)))),(t=oan(n))&&(c=e.Math.max(c,t.a))),qy(TD(n.e.yf().We((sWn(),FSt))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,_Fn(n.f)}function SKn(n,t){var e,i,r,c,a,u,o,s,h;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),"memberTypes")))){for(s=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)cL(h=-1==(i=(r=c[a]).lastIndexOf("#"))?uD(n,t.Aj(),r):0==i?M9(n,null,r.substr(1)):M9(n,r.substr(0,i),r.substr(i+1)),148)&&WB(s,BB(h,148));return s}return SQ(),SQ(),set}function PKn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,aZn,1),n.bf(t),c=0;n.df(c);){for(h=new Wb(t.e);h.a<h.c.c.length;)for(o=BB(n0(h),144),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[t.e,t.d,t.b])));dAn(u);)(a=BB(U5(u),357))!=o&&(r=n.af(a,o))&&UR(o.a,r);for(s=new Wb(t.e);s.a<s.c.c.length;)WSn(i=(o=BB(n0(s),144)).a,-n.d,-n.d,n.d,n.d),UR(o.d,i),kO(i);n.cf(),++c}HSn(e)}function CKn(n,t,e){var i,r,c,a;if(a=axn(n.e.Tg(),t),i=BB(n.g,119),ZM(),BB(t,66).Oj()){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(r,e))return fDn(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&Nfn(e,r.dd()))return fDn(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.rl(r.ak())&&null==r.dd())return fDn(n,c),!0;return!1}function IKn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=x8($Nt,ZYn,25,t.c.length,16,1):nk(n.c),n.a=new Np,i=0,a=new Wb(t);a.a<a.c.c.length;)(r=BB(n0(a),10)).p=i++;for(e=new YT,c=new Wb(t);c.a<c.c.c.length;)r=BB(n0(c),10),n.c[r.p]||(hIn(n,r),0==e.b||(Px(0!=e.b),BB(e.a.a.c,15)).gc()<n.a.c.length?hO(e,n.a):fO(e,n.a),n.a=new Np);return e}function OKn(n,t,e,i){var r,c,a,u,o,s,h;for(Pen(a=BB(Wtn(t,0),33),0),Cen(a,0),(o=new Np).c[o.c.length]=a,u=a,c=new eq(n.a,a.g,a.f,(YLn(),_Et)),s=1;s<t.i;s++)Pen(h=BB(Wtn(t,s),33),(r=aqn(n,nHn(n,DEt,h,u,c,o,e),nHn(n,xEt,h,u,c,o,e),nHn(n,KEt,h,u,c,o,e),nHn(n,REt,h,u,c,o,e),h,u,i)).d),Cen(h,r.e),ab(r,_Et),c=r,u=h,o.c[o.c.length]=h;return c}function AKn(n){NM(n,new MTn(vj(wj(pj(gj(new du,Q4n),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new eu))),u2(n,Q4n,K4n,mpn(qTt)),u2(n,Q4n,QJn,BTt),u2(n,Q4n,vZn,8),u2(n,Q4n,q4n,mpn(HTt)),u2(n,Q4n,U4n,mpn(_Tt)),u2(n,Q4n,X4n,mpn(FTt)),u2(n,Q4n,X2n,(hN(),!1))}function $Kn(n,t,e,i){var r,c,a,u,o,s,h,f;for(a=_x(t.c,e,i),h=new Wb(t.a);h.a<h.c.c.length;){for(UR((s=BB(n0(h),10)).n,a),f=new Wb(s.j);f.a<f.c.c.length;)for(c=new Wb(BB(n0(f),11).g);c.a<c.c.c.length;)for(Ztn((r=BB(n0(c),17)).a,a),(u=BB(mMn(r,(HXn(),vgt)),74))&&Ztn(u,a),o=new Wb(r.b);o.a<o.c.c.length;)UR(BB(n0(o),70).n,a);WB(n.a,s),s.a=n}}function LKn(n,t){var e,i,r,c;if(OTn(t,"Node and Port Label Placement and Node Sizing",1),RA((gM(),new HV(n,!0,!0,new Ve))),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft)))for(i=(r=BB(mMn(n,(HXn(),cpt)),21)).Hc((lIn(),iIt)),c=qy(TD(mMn(n,apt))),e=new Wb(n.b);e.a<e.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(e),29).a,16)),new Qe),new K_(r,i,c));HSn(t)}function NKn(n,t){var e,i,r,c,a,u;if((e=t.Hh(n.a))&&null!=(u=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),n8n))))switch(r=mN(u,YTn(35)),i=t.Hj(),-1==r?(a=az(n,Utn(i)),c=u):0==r?(a=null,c=u.substr(1)):(a=u.substr(0,r),c=u.substr(r+1)),DW(B7(n,t))){case 2:case 3:return Don(n,i,a,c);case 0:case 4:case 5:case 6:return Ron(n,i,a,c)}return null}function xKn(n,t,e){var i,r,c,a,u;if(ZM(),a=BB(t,66).Oj(),$xn(n.e,t)){if(t.hi()&&UFn(n,t,e,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))return!1}else for(u=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c],u.rl(r.ak()))return!(a?Nfn(r,e):null==e?null==r.dd():Nfn(e,r.dd()))&&(BB(ovn(n,c,a?BB(e,72):Z3(t,e)),72),!0);return f9(n,a?BB(e,72):Z3(t,e))}function DKn(n){var t,e,i,r,c;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));for(n.c==(Ffn(),BPt)&&Mzn(n,_Pt),t=new Wb(n.a.a);t.a<t.c.c.length;)BB(n0(t),189).e=0;for(r=new Wb(n.a.b);r.a<r.c.c.length;)for((i=BB(n0(r),81)).o=KQn,e=i.f.Kc();e.Ob();)++BB(e.Pb(),81).d.e;for(Gzn(n),c=new Wb(n.a.b);c.a<c.c.c.length;)BB(n0(c),81).k=!0;return n}function RKn(n,t){var e,i,r,c,a,u,o,s;for(u=new pPn(n),r5(e=new YT,t,e.c.b,e.c);0!=e.b;){for((i=BB(0==e.b?null:(Px(0!=e.b),Atn(e,e.a.a)),113)).d.p=1,a=new Wb(i.e);a.a<a.c.c.length;)jTn(u,r=BB(n0(a),409)),0==(s=r.d).d.p&&r5(e,s,e.c.b,e.c);for(c=new Wb(i.b);c.a<c.c.c.length;)jTn(u,r=BB(n0(c),409)),0==(o=r.c).d.p&&r5(e,o,e.c.b,e.c)}return u}function KKn(n){var t,e,i,r,c;if(1!=(i=Gy(MD(ZAn(n,(sWn(),yPt))))))for(MA(n,i*n.g,i*n.f),e=XO(_B((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),new Bu)),c=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n),(!n.c&&(n.c=new eU(XOt,n,9,9)),n.c),e])));dAn(c);)(r=BB(U5(c),470)).Gg(i*r.Dg(),i*r.Eg()),r.Fg(i*r.Cg(),i*r.Bg()),(t=BB(r.We(cPt),8))&&(t.a*=i,t.b*=i)}function _Kn(n,t,e,i,r){var c,a,u,o,s,h;for(c=new Wb(n.b);c.a<c.c.c.length;)for(s=0,h=(o=n2(BB(n0(c),29).a)).length;s<h;++s)switch(BB(mMn(u=o[s],(HXn(),kgt)),163).g){case 1:vxn(u),PZ(u,t),lvn(u,!0,i);break;case 3:ZNn(u),PZ(u,e),lvn(u,!1,r)}for(a=new M2(n.b,0);a.b<a.d.gc();)0==(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)).a.c.length&&fW(a)}function FKn(n,t){var e,i,r,c,a,u,o;if((e=t.Hh(n.a))&&null!=(o=SD(cdn((!e.b&&(e.b=new Jx((gWn(),k$t),X$t,e)),e.b),M7n)))){for(i=new Np,a=0,u=(c=kKn(o,"\\w")).length;a<u;++a)mK(r=c[a],"##other")?WB(i,"!##"+az(n,Utn(t.Hj()))):mK(r,"##local")?i.c[i.c.length]=null:mK(r,E7n)?WB(i,az(n,Utn(t.Hj()))):i.c[i.c.length]=r;return i}return SQ(),SQ(),set}function BKn(n,t){var e,i,r;return e=new Xn,(i=1==(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21).gc())?1:0)<(r=1==(r=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21).gc())?1:0)?-1:i==r?0:1}function HKn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(r=qy(TD(mMn(u=n.i,(HXn(),wgt)))),h=0,i=0,s=new Wb(n.g);s.a<s.c.c.length;)c=(a=b5(o=BB(n0(s),17)))&&r&&qy(TD(mMn(o,dgt))),l=o.d.i,a&&c?++i:a&&!c?++h:vW(l).e==u?++i:++h;for(e=new Wb(n.e);e.a<e.c.c.length;)c=(a=b5(t=BB(n0(e),17)))&&r&&qy(TD(mMn(t,dgt))),f=t.c.i,a&&c?++h:a&&!c?++i:vW(f).e==u?++h:++i;return h-i}function qKn(n,t,e,i){this.e=n,this.k=BB(mMn(n,(hWn(),Alt)),304),this.g=x8(Out,a1n,10,t,0,1),this.b=x8(Ptt,sVn,333,t,7,1),this.a=x8(Out,a1n,10,t,0,1),this.d=x8(Ptt,sVn,333,t,7,1),this.j=x8(Out,a1n,10,t,0,1),this.i=x8(Ptt,sVn,333,t,7,1),this.p=x8(Ptt,sVn,333,t,7,1),this.n=x8(ktt,sVn,476,t,8,1),yS(this.n,(hN(),!1)),this.f=x8(ktt,sVn,476,t,8,1),yS(this.f,!0),this.o=e,this.c=i}function GKn(n,t){var e,i,r;if(!t.dc())if(BB(t.Xb(0),286).d==($Pn(),nht))Akn(n,t);else for(i=t.Kc();i.Ob();){switch((e=BB(i.Pb(),286)).d.g){case 5:hPn(n,e,Vbn(n,e));break;case 0:hPn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:hPn(n,e,$nn(n,e));break;case 2:Kwn(e),hPn(n,e,$En(e)?e.c:e.f);break;case 1:Kwn(e),hPn(n,e,$En(e)?e.f:e.c)}hMn(e.a)}}function zKn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=BB(i.Pb(),17),t.o&&t.d.a.gc()<=1?(a=new xC((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),DH(BB(t.d.a.ec().Kc().Pb(),17).a,a)):(r=BB(RX(t.c,e),459)).b||r.c?dKn(n,e,t):n.d==(Usn(),rmt)&&(r.d||r.e)&&LOn(n,t)&&t.d.a.gc()<=1?dzn(e,t):DDn(n,e,t);t.k&&e5(t.d,new Te)}}function UKn(n,t,i,r,c,a){var u,o,s,h,f,l,b,w,d,g,p,v,m;for(o=(r+c)/2+a,g=i*e.Math.cos(o),p=i*e.Math.sin(o),v=g-t.g/2,m=p-t.f/2,Pen(t,v),Cen(t,m),l=n.a.jg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,u=(r+c-d)/2):(b=(c-r)/l,u=r),w=wDn(t),n.e&&(n.e.kg(n.d),n.e.lg(w)),h=new Wb(w);h.a<h.c.c.length;)s=BB(n0(h),33),f=n.a.jg(s),UKn(n,s,i+n.c,u,u+b*f,a),u+=b*f}function XKn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[i]);break;case 3:oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Enn(n,i+1,t)}}function WKn(n,t){var e,i,r,c;if(OTn(t,"Network simplex",1),n.e.a.c.length<1)HSn(t);else{for(r=new Wb(n.e.a);r.a<r.c.c.length;)BB(n0(r),121).e=0;for((c=n.e.a.c.length>=40)&&EFn(n),BHn(n),Txn(n),e=yln(n),i=0;e&&i<n.f;)e_n(n,e,e$n(n,e)),e=yln(n),++i;c&&tTn(n),n.a?p$n(n,fKn(n)):fKn(n),n.b=null,n.d=null,n.p=null,n.c=null,n.g=null,n.i=null,n.n=null,n.o=null,HSn(t)}}function VKn(n,t,e,i){var r,c,a,u,o,s,h,f;for(XR(u=new xC(e,i),BB(mMn(t,(Mrn(),oat)),8)),f=new Wb(t.e);f.a<f.c.c.length;)UR((h=BB(n0(f),144)).d,u),WB(n.e,h);for(a=new Wb(t.c);a.a<a.c.c.length;){for(r=new Wb((c=BB(n0(a),282)).a);r.a<r.c.c.length;)UR(BB(n0(r),559).d,u);WB(n.c,c)}for(s=new Wb(t.d);s.a<s.c.c.length;)UR((o=BB(n0(s),447)).d,u),WB(n.d,o)}function QKn(n,t){var e,i,r,c,a,u,o,s;for(o=new Wb(t.j);o.a<o.c.c.length;)for(r=new m6((u=BB(n0(o),11)).b);y$(r.a)||y$(r.b);)t!=(c=(e=(i=BB(y$(r.a)?n0(r.a):n0(r.b),17)).c==u?i.d:i.c).i)&&((s=BB(mMn(i,(HXn(),fpt)),19).a)<0&&(s=0),a=c.p,0==n.b[a]&&(i.d==e?(n.a[a]-=s+1,n.a[a]<=0&&n.c[a]>0&&DH(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&DH(n.e,c))))}function YKn(n){var t,e,i,r,c,a,u;for(c=new dE(BB(yX(new Rn),62)),u=KQn,e=new Wb(n.d);e.a<e.c.c.length;){for(u=(t=BB(n0(e),222)).c.c;0!=c.a.c&&(a=BB(MU(q9(c.a)),222)).c.c+a.c.b<u;)$J(c.a,a);for(r=new Fb(new BR(new xN(new _b(c.a).a).b));aS(r.a.a);)DH((i=BB(mx(r.a).cd(),222)).b,t),DH(t.b,i);Mon(c.a,t,(hN(),ptt))}}function JKn(n,t,e){var i,r,c,a,u,o,s,h,f;for(c=new J6(t.c.length),s=new Wb(t);s.a<s.c.c.length;)a=BB(n0(s),10),WB(c,n.b[a.c.p][a.p]);for(mqn(n,c,e),f=null;f=ezn(c);)rBn(n,BB(f.a,233),BB(f.b,233),c);for(t.c=x8(Ant,HWn,1,0,5,1),r=new Wb(c);r.a<r.c.c.length;)for(o=0,h=(u=(i=BB(n0(r),233)).d).length;o<h;++o)a=u[o],t.c[t.c.length]=a,n.a[a.c.p][a.p].a=lL(i.g,i.d[0]).a}function ZKn(n,t){var e,i,r,c;if(0<(cL(n,14)?BB(n,14).gc():F3(n.Kc()))){if(1<(r=t)){for(--r,c=new pa,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));return ZKn(c,r)}if(r<0){for(c=new va,i=n.Kc();i.Ob();)e=BB(i.Pb(),86),c=Wen(Pun(Gk(xnt,1),HWn,20,0,[c,new bg(e)]));if(0<(cL(c,14)?BB(c,14).gc():F3(c.Kc())))return ZKn(c,r)}}return BB(iL(n.Kc()),86)}function n_n(){n_n=O,GIt=new QC("DEFAULT_MINIMUM_SIZE",0),UIt=new QC("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),qIt=new QC("COMPUTE_PADDING",2),XIt=new QC("OUTSIDE_NODE_LABELS_OVERHANG",3),WIt=new QC("PORTS_OVERHANG",4),QIt=new QC("UNIFORM_PORT_SPACING",5),VIt=new QC("SPACE_EFFICIENT_PORT_LABELS",6),zIt=new QC("FORCE_TABULAR_NODE_LABELS",7),HIt=new QC("ASYMMETRICAL",8)}function t_n(n,t){var e,i,r,c,a,u,o,s;if(t){if(e=(c=t.Tg())?Utn(c).Nh().Jh(c):null){for(Jgn(n,t,e),o=0,s=(null==(r=t.Tg()).i&&qFn(r),r.i).length;o<s;++o)null==r.i&&qFn(r),i=r.i,(u=o>=0&&o<i.length?i[o]:null).Ij()&&!u.Jj()&&(cL(u,322)?nvn(n,BB(u,34),t,e):0!=((a=BB(u,18)).Bb&h6n)&&sEn(n,a,t,e));t.kh()&&BB(e,49).vh(BB(t,49).qh())}return e}return null}function e_n(n,t,e){var i,r,c;if(!t.f)throw Hp(new _y("Given leave edge is no tree edge."));if(e.f)throw Hp(new _y("Given enter edge is a tree edge already."));for(t.f=!1,eL(n.p,t),e.f=!0,TU(n.p,e),i=e.e.e-e.d.e-e.a,FCn(n,e.e,t)||(i=-i),c=new Wb(n.e.a);c.a<c.c.c.length;)FCn(n,r=BB(n0(c),121),t)||(r.e+=i);n.j=1,nk(n.c),pIn(n,BB(n0(new Wb(n.e.a)),121)),gGn(n)}function i_n(n,t){var e,i,r,c,a,u;if((u=BB(mMn(t,(HXn(),ept)),98))==(QEn(),WCt)||u==XCt)for(r=new xC(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((e=BB(mMn(c,(hWn(),Qft)),61))!=(kUn(),oIt)&&e!=CIt||(i=Gy(MD(mMn(c,Tlt))),u==WCt&&(i*=r),c.n.b=i-BB(mMn(c,npt),8).b,Jan(c,!1,!0)))}function r_n(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;if(Ytn(n,t,e),c=t[e],b=i?(kUn(),CIt):(kUn(),oIt),mL(t.length,e,i)){for(G6(n,r=t[i?e-1:e+1],i?(ain(),qvt):(ain(),Hvt)),h=0,l=(o=c).length;h<l;++h)xvn(n,a=o[h],b);for(G6(n,c,i?(ain(),Hvt):(ain(),qvt)),s=0,f=(u=r).length;s<f;++s)(a=u[s]).e||xvn(n,a,Tln(b))}else for(s=0,f=(u=c).length;s<f;++s)xvn(n,a=u[s],b);return!1}function c_n(n,t,e,i){var r,c,a,u,o;u=abn(t,e),(e==(kUn(),SIt)||e==CIt)&&(u=cL(u,152)?o6(BB(u,152)):cL(u,131)?BB(u,131).a:cL(u,54)?new fy(u):new CT(u)),a=!1;do{for(r=!1,c=0;c<u.gc()-1;c++)BMn(n,BB(u.Xb(c),11),BB(u.Xb(c+1),11),i)&&(a=!0,k0(n.a,BB(u.Xb(c),11),BB(u.Xb(c+1),11)),o=BB(u.Xb(c+1),11),u._c(c+1,BB(u.Xb(c),11)),u._c(c,o),r=!0)}while(r);return a}function a_n(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;if(!mA(n.e))return BB(YIn(n,t,e),72);if(t!=e&&(a=(b=(r=BB(n.g,119))[e]).ak(),$xn(n.e,a))){for(w=axn(n.e.Tg(),a),o=-1,u=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?u=i++:(c=r[s],h=w.rl(c.ak()),s==t&&(o=s!=f||h?i:i-1),h&&++i);return l=BB(Iln(n,t,e),72),u!=o&&Lv(n,new j9(n.e,7,a,iln(u),b.dd(),o)),l}return BB(Iln(n,t,e),72)}function u_n(n,t){var e,i,r,c,a,u;for(OTn(t,"Port order processing",1),u=BB(mMn(n,(HXn(),opt)),421),e=new Wb(n.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)i=BB(n0(r),10),c=BB(mMn(i,ept),98),a=i.j,c==(QEn(),UCt)||c==WCt||c==XCt?(SQ(),m$(a,sst)):c!=QCt&&c!=YCt&&(SQ(),m$(a,fst),Lvn(a),u==(U7(),_vt)&&m$(a,hst)),i.i=!0,eIn(i);HSn(t)}function o_n(n){var t,i,r,c,a,u,o,s;for(s=new xp,t=new Fv,u=n.Kc();u.Ob();)c=BB(u.Pb(),10),o=AN(oM(new qv,c),t),jCn(s.f,c,o);for(a=n.Kc();a.Ob();)for(r=new oz(ZL(lbn(c=BB(a.Pb(),10)).a.Kc(),new h));dAn(r);)b5(i=BB(U5(r),17))||UNn(aM(cM(rM(uM(new Hv,e.Math.max(1,BB(mMn(i,(HXn(),lpt)),19).a)),1),BB(RX(s,i.c.i),121)),BB(RX(s,i.d.i),121)));return t}function s_n(){s_n=O,byt=dq(new B2,(yMn(),Fat),(lWn(),vot)),dyt=dq(new B2,_at,jot),gyt=WG(dq(new B2,_at,Dot),Bat,xot),lyt=WG(dq(dq(new B2,_at,lot),Fat,bot),Bat,wot),pyt=ogn(ogn(FM(WG(dq(new B2,Rat,Uot),Bat,zot),Fat),Got),Xot),wyt=WG(new B2,Bat,mot),hyt=WG(dq(dq(dq(new B2,Kat,Mot),Fat,Pot),Fat,Cot),Bat,Sot),fyt=WG(dq(dq(new B2,Fat,Cot),Fat,uot),Bat,aot)}function h_n(n,t,e,i,r,c){var a,u,o,s,h,f;for(a=lSn(t,o=jon(t)-jon(n)),u=M$(0,0,0);o>=0&&(!Cyn(n,a)||(o<22?u.l|=1<<o:o<44?u.m|=1<<o-22:u.h|=1<<o-44,0!=n.l||0!=n.m||0!=n.h));)s=a.m,h=a.h,f=a.l,a.h=h>>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--o;return e&&Oon(u),c&&(i?(ltt=aon(n),r&&(ltt=hun(ltt,(X7(),dtt)))):ltt=M$(n.l,n.m,n.h)),u}function f_n(n,t){var e,i,r,c,a,u,o,s,h,f;for(s=n.e[t.c.p][t.p]+1,o=t.c.a.c.length+1,u=new Wb(n.a);u.a<u.c.c.length;){for(a=BB(n0(u),11),f=0,c=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(a),new Gw(a)])));dAn(r);)(i=BB(U5(r),11)).i.c==t.c&&(f+=bL(n,i.i)+1,++c);e=f/c,(h=a.j)==(kUn(),oIt)?n.f[a.p]=e<s?n.c-e:n.b+(o-e):h==CIt&&(n.f[a.p]=e<s?n.b+e:n.c-(o-e))}}function l_n(n,t,e){var i,r,c,a;if(null==n)throw Hp(new Mk(zWn));for(i=(c=n.length)>0&&(b1(0,n.length),45==n.charCodeAt(0)||(b1(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==egn((b1(i,n.length),n.charCodeAt(i))))throw Hp(new Mk(DQn+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw Hp(new Mk(DQn+n+'"'));if(r||a>e)throw Hp(new Mk(DQn+n+'"'));return a}function b_n(n){var t,i,r,c,a,u;for(a=new YT,c=new Wb(n.a);c.a<c.c.c.length;)Vl(r=BB(n0(c),112),r.f.c.length),Ql(r,r.k.c.length),0==r.i&&(r.o=0,r5(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),112)).o+1,t=new Wb(r.f);t.a<t.c.c.length;)Yl(u=BB(n0(t),129).a,e.Math.max(u.o,i)),Ql(u,u.i-1),0==u.i&&r5(a,u,a.c.b,a.c)}function w_n(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n);a.a<a.c.c.length;){for(c=BB(n0(a),79),u=(i=PTn(BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82))).i,o=i.j,CA(r=BB(Wtn((!c.a&&(c.a=new eU(FOt,c,6,6)),c.a),0),202),r.j+u,r.k+o),PA(r,r.b+u,r.c+o),e=new AL((!r.a&&(r.a=new $L(xOt,r,5)),r.a));e.e!=e.i.gc();)TA(t=BB(kpn(e),469),t.a+u,t.b+o);Yrn(BB(ZAn(c,(sWn(),OSt)),74),u,o)}}function d_n(n){switch(n){case 100:return mWn(snt,!0);case 68:return mWn(snt,!1);case 119:return mWn(hnt,!0);case 87:return mWn(hnt,!1);case 115:return mWn(fnt,!0);case 83:return mWn(fnt,!1);case 99:return mWn(lnt,!0);case 67:return mWn(lnt,!1);case 105:return mWn(bnt,!0);case 73:return mWn(bnt,!1);default:throw Hp(new dy(ont+n.toString(16)))}}function g_n(n){var t,i,r,c,a;switch(c=BB(xq(n.a,0),10),t=new $vn(n),WB(n.a,t),t.o.a=e.Math.max(1,c.o.a),t.o.b=e.Math.max(1,c.o.b),t.n.a=c.n.a,t.n.b=c.n.b,BB(mMn(c,(hWn(),Qft)),61).g){case 4:t.n.a+=2;break;case 1:t.n.b+=2;break;case 2:t.n.a-=2;break;case 3:t.n.b-=2}return CZ(r=new CSn,t),SZ(i=new wY,a=BB(xq(c.j,0),11)),MZ(i,r),UR(kO(r.n),a.n),UR(kO(r.a),a.a),t}function p_n(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.b],10).k==(uSn(),Sut)?hFn(BB(n.a[n.b],10),(Xyn(),jCt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&BB(n.a[n.c-1&n.a.length-1],10).k==(uSn(),Sut)?hFn(BB(n.a[n.c-1&n.a.length-1],10),(Xyn(),ECt)):2==(n.c-n.b&n.a.length-1)?(hFn(BB(Eon(n),10),(Xyn(),jCt)),hFn(BB(Eon(n),10),ECt)):sLn(n,r),o4(n)}function v_n(n,t,i){var r,c,a,u,o;for(a=0,c=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));c.e!=c.i.gc();)u="",0==(!(r=BB(kpn(c),33)).n&&(r.n=new eU(zOt,r,1,7)),r.n).i||(u=BB(Wtn((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n),0),137).a),qan(o=new csn(a++,t,u),r),hon(o,(qqn(),skt),r),o.e.b=r.j+r.f/2,o.f.a=e.Math.max(r.g,1),o.e.a=r.i+r.g/2,o.f.b=e.Math.max(r.f,1),DH(t.b,o),jCn(i.f,r,o)}function m_n(n){var t,e,i,r,c;i=BB(mMn(n,(hWn(),dlt)),33),c=BB(ZAn(i,(HXn(),Fgt)),174).Hc((mdn(),_It)),n.e||(r=BB(mMn(n,Zft),21),t=new xC(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((bDn(),lft))?(Ypn(i,ept,(QEn(),XCt)),KUn(i,t.a,t.b,!1,!0)):qy(TD(ZAn(i,Bgt)))||KUn(i,t.a,t.b,!0,!0)),Ypn(i,Fgt,c?nbn(_It):new YK(e=BB(Vj(YIt),9),BB(SR(e,e.length),9),0))}function y_n(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(fV(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=UIn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==fV(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=UIn(n,t))&&t[0]==c)return!1;i+=a}else(i=a)<24&&t[0]-c<=2?i*=60:i=i%100+60*(i/100|0);return i*=r,e.o=-i,!0}function k_n(n){var t,e,i,r,c,a,u;for(r=new Np,i=new oz(ZL(lbn(n.b).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))&&WB(r,new j6(e,v9(n,e.c),v9(n,e.d)));for(u=new Kb(new Ob(n.e).a.vc().Kc());u.a.Ob();)t=BB(u.a.Pb(),42),(c=BB(t.dd(),113)).d.p=0;for(a=new Kb(new Ob(n.e).a.vc().Kc());a.a.Ob();)t=BB(a.a.Pb(),42),0==(c=BB(t.dd(),113)).d.p&&WB(n.d,RKn(n,c))}function j_n(n){var t,e,i,r,c;for(c=WJ(n),r=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));r.e!=r.i.gc();)if(i=BB(kpn(r),79),!Ctn(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82)),c))return!0;for(e=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));e.e!=e.i.gc();)if(t=BB(kpn(e),79),!Ctn(PTn(BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82)),c))return!0;return!1}function E_n(n){var t,i,r,c,a,u,o,s;for(s=new km,o=null,i=BB(b3(t=spn(n,0)),8),c=BB(b3(t),8);t.b!=t.d.c;)o=i,i=c,c=BB(b3(t),8),a=ctn(XR(new xC(o.a,o.b),i)),u=ctn(XR(new xC(c.a,c.b),i)),r=10,r=e.Math.min(r,e.Math.abs(a.a+a.b)/2),r=e.Math.min(r,e.Math.abs(u.a+u.b)/2),a.a=HH(a.a)*r,a.b=HH(a.b)*r,u.a=HH(u.a)*r,u.b=HH(u.b)*r,DH(s,UR(a,i)),DH(s,UR(u,i));return s}function T_n(n,t,e,i){var r,c,a,u,o;return a=n.eh(),r=null,(o=n.Zg())?t&&0==(gKn(n,t,e).Bb&BQn)?(i=_pn(o.Vk(),n,i),n.uh(null),r=t.fh()):o=null:(a&&(o=a.fh()),t&&(r=t.fh())),o!=r&&o&&o.Zk(n),u=n.Vg(),n.Rg(t,e),o!=r&&r&&r.Yk(n),n.Lg()&&n.Mg()&&(a&&u>=0&&u!=e&&(c=new nU(n,1,u,a,null),i?i.Ei(c):i=c),e>=0&&(c=new nU(n,1,e,u==e?a:null,t),i?i.Ei(c):i=c)),i}function M_n(n){var t,e,i;if(null==n.b){if(i=new Sk,null!=n.i&&(cO(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(rQ(n.i)||(i.a+="//"),cO(i,n.a)),null!=n.d&&(i.a+="/",cO(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),cO(i,n.j[t]);null!=n.g&&(i.a+="?",cO(i,n.g))}else cO(i,n.a);null!=n.e&&(i.a+="#",cO(i,n.e)),n.b=i.a}return n.b}function S_n(n,t){var e,i,r,c,a,u;for(r=new Wb(t.a);r.a<r.c.c.length;)cL(c=mMn(i=BB(n0(r),10),(hWn(),dlt)),11)&&(u=yFn(t,i,(a=BB(c,11)).o.a,a.o.b),a.n.a=u.a,a.n.b=u.b,qCn(a,BB(mMn(i,Qft),61)));e=new xC(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))?(hon(n,(HXn(),ept),(QEn(),XCt)),BB(mMn(vW(n),Zft),21).Fc(dft),bGn(n,e,!1)):bGn(n,e,!0)}function P_n(n,t,e){var i,r,c,a,u;OTn(e,"Minimize Crossings "+n.a,1),i=0==t.b.c.length||!jE(AV(new Rq(null,new w1(t.b,16)),new aw(new Ac))).sd((dM(),tit)),u=1==t.b.c.length&&1==BB(xq(t.b,0),29).a.c.length,c=GI(mMn(t,(HXn(),sgt)))===GI((ufn(),pCt)),i||u&&!c||(Ssn(r=sxn(n,t),(a=BB(Dpn(r,0),214)).c.Rf()?a.c.Lf()?new Ud(n):new Xd(n):new zd(n)),afn(n)),HSn(e)}function C_n(n,t,e,i){var r,c,a,u;if(u=dG(cbn(SVn,rV(dG(cbn(null==t?0:nsn(t),PVn)),15))),r=dG(cbn(SVn,rV(dG(cbn(null==e?0:nsn(e),PVn)),15))),a=Zrn(n,t,u),c=Jrn(n,e,r),a&&r==a.a&&wW(e,a.g))return e;if(c&&!i)throw Hp(new _y("key already present: "+e));return a&&LLn(n,a),c&&LLn(n,c),YCn(n,new qW(e,r,t,u),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),qkn(n),a?a.g:null}function I_n(n,t,e){var i,r,c,a,u;for(c=0;c<t;c++){for(i=0,u=c+1;u<t;u++)i=rbn(rbn(cbn(e0(n[c],UQn),e0(n[u],UQn)),e0(e[c+u],UQn)),e0(dG(i),UQn)),e[c+u]=dG(i),i=jz(i,32);e[c+t]=dG(i)}for(ncn(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=rbn(rbn(cbn(e0(n[r],UQn),e0(n[r],UQn)),e0(e[a],UQn)),e0(dG(i),UQn)),e[a]=dG(i),i=rbn(i=jz(i,32),e0(e[++a],UQn)),e[a]=dG(i),i=jz(i,32);return e}function O_n(n,t,i){var r,c,a,u,o,s,h,f;if(!h3(t)){for(s=Gy(MD(edn(i.c,(HXn(),Npt)))),!(h=BB(edn(i.c,Lpt),142))&&(h=new lm),r=i.a,c=null,o=t.Kc();o.Ob();)u=BB(o.Pb(),11),f=0,c?(f=s,f+=c.o.b):f=h.d,a=AN(oM(new qv,u),n.f),VW(n.k,u,a),UNn(aM(cM(rM(uM(new Hv,0),CJ(e.Math.ceil(f))),r),a)),c=u,r=a;UNn(aM(cM(rM(uM(new Hv,0),CJ(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function A_n(n,t,e,i,r,c,a,u){var o,s,h;return h=!1,s=c-e.s,o=e.t-t.f+cHn(e,s,!1).a,!(i.g+u>s)&&(o+u+cHn(i,s,!1).a<=t.b&&(p9(e,c-e.s),e.c=!0,p9(i,c-e.s),Tvn(i,e.s,e.t+e.d+u),i.k=!0,xcn(e.q,i),h=!0,r&&(tin(t,i),i.j=t,n.c.length>a&&(Tkn((l1(a,n.c.length),BB(n.c[a],200)),i),0==(l1(a,n.c.length),BB(n.c[a],200)).a.c.length&&s6(n,a)))),h)}function $_n(n,t){var e,i,r,c,a;if(OTn(t,"Partition midprocessing",1),r=new pJ,JT(AV(new Rq(null,new w1(n.a,16)),new di),new ld(r)),0!=r.d){for(a=BB(P4(a1(new Rq(null,(r.i||(r.i=new HL(r,r.c))).Nc())),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),e=BB((i=a.Kc()).Pb(),19);i.Ob();)c=BB(i.Pb(),19),XLn(BB(h6(r,e),21),BB(h6(r,c),21)),e=c;HSn(t)}}function L_n(n,t,e){var i,r,c,a,u;if(0==t.p){for(t.p=1,(r=e)||(r=new rI(new Np,new YK(i=BB(Vj(FIt),9),BB(SR(i,i.length),9),0))),BB(r.a,15).Fc(t),t.k==(uSn(),Mut)&&BB(r.b,21).Fc(BB(mMn(t,(hWn(),Qft)),61)),a=new Wb(t.j);a.a<a.c.c.length;)for(c=BB(n0(a),11),u=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(c),new Gw(c)])));dAn(u);)L_n(n,BB(U5(u),11).i,r);return r}return null}function N_n(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=BB(n.Ab.g,1934),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(mK(t,(e=r[c]).d))return e}else if(null==t){for(i=new AL(n.Ab);i.e!=i.i.gc();)if(null==(e=BB(kpn(i),590)).d)return e}else for(i=new AL(n.Ab);i.e!=i.i.gc();)if(mK(t,(e=BB(kpn(i),590)).d))return e;return null}function x_n(n,t){var e,i,r,c,a,u,o;if(null==(o=TD(mMn(t,(CAn(),Nkt))))||(kW(o),o)){for(DOn(n,t),r=new Np,u=spn(t.b,0);u.b!=u.d.c;)(e=xPn(n,BB(b3(u),86),null))&&(qan(e,t),r.c[r.c.length]=e);if(n.a=null,n.b=null,r.c.length>1)for(i=new Wb(r);i.a<i.c.c.length;)for(c=0,a=spn((e=BB(n0(i),135)).b,0);a.b!=a.d.c;)BB(b3(a),86).g=c++;return r}return u6(Pun(Gk(Gyt,1),tZn,135,0,[t]))}function D_n(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p;crn(b=A3(n,qun(t),r),R2(r,q6n)),d=D2(w=r,U6n),cSn(new Lg(b).a,d),g=D2(w,"endPoint"),rSn(new Rg(b).a,g),p=N2(w,D6n),SEn(new Fg(b).a,p),f=R2(r,K6n),qR((c=new hI(n,b)).a,c.b,f),l=R2(r,R6n),GR((a=new fI(n,b)).a,a.b,l),s=N2(r,F6n),Fyn((u=new lI(e,b)).b,u.a,s),h=N2(r,_6n),Byn((o=new bI(i,b)).b,o.a,h)}function R_n(n,t,e){var i,r,c,a,u;switch(u=null,t.g){case 1:for(r=new Wb(n.j);r.a<r.c.c.length;)if(qy(TD(mMn(i=BB(n0(r),11),(hWn(),tlt)))))return i;hon(u=new CSn,(hWn(),tlt),(hN(),!0));break;case 2:for(a=new Wb(n.j);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),11),(hWn(),klt)))))return c;hon(u=new CSn,(hWn(),klt),(hN(),!0))}return u&&(CZ(u,n),qCn(u,e),yvn(u.n,n.o,e)),u}function K_n(n,t){var i,r,c,a,u,o;for(o=-1,u=new YT,r=new m6(n.b);y$(r.a)||y$(r.b);){for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),o=e.Math.max(o,Gy(MD(mMn(i,(HXn(),agt))))),i.c==n?JT(AV(new Rq(null,new w1(i.b,16)),new fe),new nd(u)):JT(AV(new Rq(null,new w1(i.b,16)),new le),new td(u)),a=spn(u,0);a.b!=a.d.c;)Lx(c=BB(b3(a),70),(hWn(),Uft))||hon(c,Uft,i);gun(t,u),yQ(u)}return o}function __n(n,t,e,i,r){var c,a,u,o;Bl(c=new $vn(n),(uSn(),Iut)),hon(c,(HXn(),ept),(QEn(),XCt)),hon(c,(hWn(),dlt),t.c.i),hon(a=new CSn,dlt,t.c),qCn(a,r),CZ(a,c),hon(t.c,Elt,c),Bl(u=new $vn(n),Iut),hon(u,ept,XCt),hon(u,dlt,t.d.i),hon(o=new CSn,dlt,t.d),qCn(o,r),CZ(o,u),hon(t.d,Elt,u),SZ(t,a),MZ(t,o),LZ(0,e.c.length),MS(e.c,0,c),i.c[i.c.length]=u,hon(c,Bft,iln(1)),hon(u,Bft,iln(1))}function F_n(n,t,i,r,c){var a,u,o,s,h;o=c?r.b:r.a,FT(n.a,r)||(h=o>i.s&&o<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(o-Gy(MD(gx(i.e))))<lZn&&e.Math.abs(o-Gy(MD(gx(i.j))))<lZn,s|=e.Math.abs(o-Gy(MD(px(i.e))))<lZn&&e.Math.abs(o-Gy(MD(px(i.j))))<lZn),(h||s)&&((u=BB(mMn(t,(HXn(),vgt)),74))||(u=new km,hon(t,vgt,u)),r5(u,a=new wA(r),u.c.b,u.c),TU(n.a,a)))}function B_n(n,t,e,i){var r,c,a,u,o,s,h;if(WIn(n,t,e,i))return!0;for(a=new Wb(t.f);a.a<a.c.c.length;){switch(c=BB(n0(a),324),u=!1,s=(o=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:u=Osn(n,o+c.b.a,0,o+c.c.a,h-1);break;case 1:u=Osn(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:u=Osn(n,o+c.b.a,r,o+c.c.a,n.p-1);break;default:u=Osn(n,0,h+c.b.a,o-1,h+c.c.a)}if(u)return!0}return!1}function H_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(fbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rI(e.c.i,e)));SQ(),m$(s,n.c),kG(n.b,u.p,s)}}function q_n(n,t){var e,i,r,c,a,u,o,s;for(c=new Wb(t.b);c.a<c.c.c.length;)for(o=new Wb(BB(n0(c),29).a);o.a<o.c.c.length;){for(u=BB(n0(o),10),s=new Np,a=0,i=new oz(ZL(lbn(u).a.Kc(),new h));dAn(i);)b5(e=BB(U5(i),17))||!b5(e)&&e.c.i.c==e.d.i.c||((r=BB(mMn(e,(HXn(),bpt)),19).a)>a&&(a=r,s.c=x8(Ant,HWn,1,0,5,1)),r==a&&WB(s,new rI(e.d.i,e)));SQ(),m$(s,n.c),kG(n.f,u.p,s)}}function G_n(n){NM(n,new MTn(vj(wj(pj(gj(new du,l5n),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new xu))),u2(n,l5n,QJn,zMt),u2(n,l5n,vZn,15),u2(n,l5n,pZn,iln(0)),u2(n,l5n,A4n,mpn(_Mt)),u2(n,l5n,PZn,mpn(BMt)),u2(n,l5n,SZn,mpn(qMt)),u2(n,l5n,VJn,f5n),u2(n,l5n,jZn,mpn(FMt)),u2(n,l5n,BZn,mpn(HMt)),u2(n,l5n,b5n,mpn(RMt)),u2(n,l5n,u3n,mpn(KMt))}function z_n(n,t){var e,i,r,c,a,u,o,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return kUn(),PIt;switch(s=n.n.a,h=n.n.b,u=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return kUn(),CIt;if(s+u>a)return kUn(),oIt;break;case 4:case 3:if(h<0)return kUn(),sIt;if(h+e>c)return kUn(),SIt}return(o=(s+u/2)/a)+(i=(h+e/2)/c)<=1&&o-i<=0?(kUn(),CIt):o+i>=1&&o-i>=0?(kUn(),oIt):i<.5?(kUn(),sIt):(kUn(),SIt)}function U_n(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(e=!1,o=Gy(MD(mMn(t,(HXn(),Opt)))),l=KVn*o,r=new Wb(t.b);r.a<r.c.c.length;)for(i=BB(n0(r),29),c=BB(n0(u=new Wb(i.a)),10),s=wU(n.a[c.p]);u.a<u.c.c.length;)a=BB(n0(u),10),s!=(h=wU(n.a[a.p]))&&(f=K$(n.b,c,a),c.n.b+c.o.b+c.d.a+s.a+f>a.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 X_n(n,t,e,i,r,c,a){var u,o,s,h,f;for(f=new bA,o=t.Kc();o.Ob();)for(h=new Wb(BB(o.Pb(),839).wf());h.a<h.c.c.length;)GI((s=BB(n0(h),181)).We((sWn(),gSt)))===GI((Rtn(),XPt))&&(rKn(f,s,!1,i,r,c,a),CPn(n,f));for(u=e.Kc();u.Ob();)for(h=new Wb(BB(u.Pb(),839).wf());h.a<h.c.c.length;)GI((s=BB(n0(h),181)).We((sWn(),gSt)))===GI((Rtn(),UPt))&&(rKn(f,s,!0,i,r,c,a),CPn(n,f))}function W_n(n,t,e){var i,r,c,a,u,o,s;for(a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new oz(ZL(dLn(c=BB(kpn(a),33)).a.Kc(),new h));dAn(r);)nAn(i=BB(U5(r),79))||nAn(i)||QIn(i)||(o=BB(qI(AY(e.f,c)),86),s=BB(RX(e,PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))),86),o&&s&&(hon(u=new UQ(o,s),(qqn(),skt),i),qan(u,i),DH(o.d,u),DH(s.b,u),DH(t.a,u)))}function V_n(n,t){var i,r,c,a,u,o,s;for(o=BB(BB(h6(n.r,t),21),84).Kc();o.Ob();)(r=(u=BB(o.Pb(),111)).c?WH(u.c):0)>0?u.a?r>(s=u.b.rf().b)&&(n.v||1==u.c.d.c.length?(a=(r-s)/2,u.d.d=a,u.d.a=a):(i=(BB(xq(u.c.d,0),181).rf().b-s)/2,u.d.d=e.Math.max(0,i),u.d.a=r-i-s)):u.d.a=n.t+r:Hz(n.u)&&((c=_Tn(u.b)).d<0&&(u.d.d=-c.d),c.d+c.a>u.b.rf().b&&(u.d.a=c.d+c.a-u.b.rf().b))}function Q_n(n,t){var e;switch(vnn(n)){case 6:return XI(t);case 7:return UI(t);case 8:return zI(t);case 3:return Array.isArray(t)&&!((e=vnn(t))>=14&&e<=16);case 11:return null!=t&&typeof t===xWn;case 12:return null!=t&&(typeof t===AWn||typeof t==xWn);case 0:return Qpn(t,n.__elementTypeId$);case 2:return DU(t)&&!(t.im===I);case 1:return DU(t)&&!(t.im===I)||Qpn(t,n.__elementTypeId$);default:return!0}}function Y_n(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 J_n(n,t){var i,r,c,a,u,o;return(c=iin(n))==(o=iin(t))?n.e==t.e&&n.a<54&&t.a<54?n.f<t.f?-1:n.f>t.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*zQn)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*zQn)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=yhn(n.f)),a=n.c,!t.c&&(t.c=yhn(t.f)),u=t.c,r<0?a=Nnn(a,kBn(-r)):r>0&&(u=Nnn(u,kBn(r))),tgn(a,u))):c<o?-1:1}function Z_n(n,t){var e,i,r,c,a,u,o;for(c=0,u=0,o=0,r=new Wb(n.f.e);r.a<r.c.c.length;)t!=(i=BB(n0(r),144))&&(c+=a=n.i[t.b][i.b],(e=W8(t.d,i.d))>0&&n.d!=(q7(),Aat)&&(u+=a*(i.d.a+n.a[t.b][i.b]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(q7(),Iat)&&(o+=a*(i.d.b+n.a[t.b][i.b]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new xC(u/c,t.d.b);case 2:return new xC(t.d.a,o/c);default:return new xC(u/c,o/c)}}function nFn(n,t){var e,i,r,c;if(zsn(),c=BB(mMn(n.i,(HXn(),ept)),98),0!=n.j.g-t.j.g||c!=(QEn(),UCt)&&c!=WCt&&c!=XCt)return 0;if(c==(QEn(),UCt)&&(e=BB(mMn(n,ipt),19),i=BB(mMn(t,ipt),19),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return Pln(n.n.a,t.n.a);case 2:return Pln(n.n.b,t.n.b);case 3:return Pln(t.n.a,n.n.a);case 4:return Pln(t.n.b,n.n.b);default:throw Hp(new Fy(r1n))}}function tFn(n){var t,e,i,r,c;for(WB(c=new J6((!n.a&&(n.a=new $L(xOt,n,5)),n.a).i+2),new xC(n.j,n.k)),JT(new Rq(null,(!n.a&&(n.a=new $L(xOt,n,5)),new w1(n.a,16))),new Ig(c)),WB(c,new xC(n.b,n.c)),t=1;t<c.c.length-1;)l1(t-1,c.c.length),e=BB(c.c[t-1],8),l1(t,c.c.length),i=BB(c.c[t],8),l1(t+1,c.c.length),r=BB(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?s6(c,t):++t;return c}function eFn(n,t){var e,i,r,c,a,u,o;for(e=ON(iM(tM(eM(new Wv,t),new gY(t.e)),gst),n.a),0==t.j.c.length||V9(BB(xq(t.j,0),57).a,e),o=new Dp,VW(n.e,e,o),a=new Rv,u=new Rv,c=new Wb(t.k);c.a<c.c.c.length;)TU(a,(r=BB(n0(c),17)).c),TU(u,r.d);(i=a.a.gc()-u.a.gc())<0?(Uun(o,!0,(Ffn(),_Pt)),Uun(o,!1,FPt)):i>0&&(Uun(o,!1,(Ffn(),_Pt)),Uun(o,!0,FPt)),Otn(t.g,new sP(n,e)),VW(n.g,t,e)}function iFn(){var n;for(iFn=O,Ltt=Pun(Gk(ANt,1),hQn,25,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]),Ntt=x8(ANt,hQn,25,37,15,1),xtt=Pun(Gk(ANt,1),hQn,25,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]),Dtt=x8(LNt,FQn,25,37,14,1),n=2;n<=36;n++)Ntt[n]=CJ(e.Math.pow(n,Ltt[n])),Dtt[n]=Ojn(bVn,Ntt[n])}function rFn(n){var t;if(1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));return t=new km,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),!1)),bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))&&Frn(t,zXn(n,bun(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),!0)),t}function cFn(n,t){var e,i,r;for(r=!1,i=new oz(ZL((t.d?n.a.c==(gJ(),tyt)?fbn(t.b):lbn(t.b):n.a.c==(gJ(),nyt)?fbn(t.b):lbn(t.b)).a.Kc(),new h));dAn(i);)if(e=BB(U5(i),17),(qy(n.a.f[n.a.g[t.b.p].p])||b5(e)||e.c.i.c!=e.d.i.c)&&!qy(n.a.n[n.a.g[t.b.p].p])&&!qy(n.a.n[n.a.g[t.b.p].p])&&(r=!0,FT(n.b,n.a.g[Lmn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function aFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(SQ(),m$(n,new Xu),u=new M2(n,0),f=new Np,c=0;u.b<u.d.gc();)Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),157),0!=f.c.length&&iG(a)*eG(a)>2*c?(h=new Gtn(f),s=iG(a)/eG(a),o=yXn(h,t,new bm,e,i,r,s),UR(kO(h.e),o),f.c=x8(Ant,HWn,1,0,5,1),c=0,f.c[f.c.length]=h,f.c[f.c.length]=a,c=iG(h)*eG(h)+iG(a)*eG(a)):(f.c[f.c.length]=a,c+=iG(a)*eG(a));return f}function uFn(n,t,e){var i,r,c,a,u,o,s;if(0==(i=e.gc()))return!1;if(n.ej())if(o=n.fj(),kwn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,o):n.Zi(5,null,e,t,o),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)s=n.Oi(r),u=n.cj(s,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(kwn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)u=n.cj(n.Oi(r),u);u&&u.Fi()}return!0}function oFn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=n.Ui(t,n.oi(t,e)),e,t,c),n.bj()&&!(n.ni()&&a?Nfn(a,e):GI(a)===GI(e))?(a&&(r=n.dj(a,r)),(r=n.cj(e,r))?(r.Ei(i),r.Fi()):n.$i(i)):r?(r.Ei(i),r.Fi()):n.$i(i),a):(a=n.Ui(t,n.oi(t,e)),n.bj()&&!(n.ni()&&a?Nfn(a,e):GI(a)===GI(e))&&(r=null,a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function sFn(n,t){var i,r,c,a,u,o,s,h;if(n.e=t,n.f=BB(mMn(t,(Mrn(),hat)),230),XTn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!qy(TD(mMn(t,(fRn(),Hct)))))for(h=n.e.e.c.length,o=new Wb(t.e);o.a<o.c.c.length;)(s=BB(n0(o),144).d).a=OG(n.f)*h,s.b=OG(n.f)*h;for(i=t.b,a=new Wb(t.c);a.a<a.c.c.length;)if(c=BB(n0(a),282),(r=BB(mMn(c,eat),19).a)>0){for(u=0;u<r;u++)WB(i,new hX(c));BCn(c)}}function hFn(n,t){var i,r,c,a,u;if(n.k==(uSn(),Sut)&&(i=jE(AV(BB(mMn(n,(hWn(),Plt)),15).Oc(),new aw(new ri))).sd((dM(),tit))?t:(Xyn(),TCt),hon(n,ult,i),i!=(Xyn(),ECt)))for(r=BB(mMn(n,dlt),17),u=Gy(MD(mMn(r,(HXn(),agt)))),a=0,i==jCt?a=n.o.b-e.Math.ceil(u/2):i==TCt&&(n.o.b-=Gy(MD(mMn(vW(n),jpt))),a=(n.o.b-e.Math.ceil(u))/2),c=new Wb(n.j);c.a<c.c.c.length;)BB(n0(c),11).n.b=a}function fFn(){fFn=O,JM(),TNt=new Rh,Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(z7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE(X7n)]),Pun(Gk(A$t,1),jnt,592,0,[new UE(U7n)])]),new $A("-1"),Pun(Gk(A$t,2),sVn,368,0,[Pun(Gk(A$t,1),jnt,592,0,[new UE("\\c+")])]),new $A("0"),new $A("0"),new $A("1"),new $A("0"),new $A(int)}function lFn(n){var t,e;return n.c&&n.c.kh()&&(e=BB(n.c,49),n.c=BB(tfn(n,e),138),n.c!=e&&(0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,9,2,e,n.c)),cL(n.Cb,399)?n.Db>>16==-15&&n.Cb.nh()&&$7(new k9(n.Cb,9,13,e,n.c,uvn(H7(BB(n.Cb,59)),n))):cL(n.Cb,88)&&n.Db>>16==-23&&n.Cb.nh()&&(cL(t=n.c,88)||(gWn(),t=d$t),cL(e,88)||(gWn(),e=d$t),$7(new k9(n.Cb,9,10,e,t,uvn(a4(BB(n.Cb,26)),n)))))),n.c}function bFn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hypernodes processing",1),i=new Wb(n.b);i.a<i.c.c.length;)for(a=new Wb(BB(n0(i),29).a);a.a<a.c.c.length;)if(qy(TD(mMn(c=BB(n0(a),10),(HXn(),bgt))))&&c.j.c.length<=2){for(s=0,o=0,e=0,r=0,u=new Wb(c.j);u.a<u.c.c.length;)switch(BB(n0(u),11).j.g){case 1:++s;break;case 2:++o;break;case 3:++e;break;case 4:++r}0==s&&0==e&&jXn(n,c,r<=o)}HSn(t)}function wFn(n,t){var e,i,r,c,a,u,o,s,h;for(OTn(t,"Layer constraint edge reversal",1),a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),h=-1,e=new Np,s=n2(c.a),r=0;r<s.length;r++)i=BB(mMn(s[r],(hWn(),ilt)),303),-1==h?i!=(z7(),Cft)&&(h=r):i==(z7(),Cft)&&(PZ(s[r],null),Qyn(s[r],h++,c)),i==(z7(),Sft)&&WB(e,s[r]);for(o=new Wb(e);o.a<o.c.c.length;)PZ(u=BB(n0(o),10),null),PZ(u,c)}HSn(t)}function dFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Hyperedge merging",1),xAn(n,t),u=new M2(t.b,0);u.b<u.d.gc();)if(Px(u.b<u.d.gc()),0!=(s=BB(u.d.Xb(u.c=u.b++),29).a).c.length)for(i=null,r=null,c=null,a=null,o=0;o<s.c.length;o++)l1(o,s.c.length),(r=(i=BB(s.c[o],10)).k)==(uSn(),Put)&&a==Put&&(h=hHn(i,c)).a&&(rDn(i,c,h.b,h.c),l1(o,s.c.length),PE(s.c,o,1),--o,i=c,r=a),c=i,a=r;HSn(e)}function gFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Ilt)))||GI(mMn(t.j,(HXn(),Ldt)))===GI((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Ilt)))&&hon(t.j,Ilt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Ilt,!0)),e=eKn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=eKn(n,t)}while(r>e);return r}function pFn(n,t){var e,i,r;i=0!=H$n(n.d,1),!qy(TD(mMn(t.j,(hWn(),Jft))))&&!qy(TD(mMn(t.j,Ilt)))||GI(mMn(t.j,(HXn(),Ldt)))===GI((mon(),Nvt))?t.c.Tf(t.e,i):i=qy(TD(mMn(t.j,Jft))),DNn(n,t,i,!0),qy(TD(mMn(t.j,Ilt)))&&hon(t.j,Ilt,(hN(),!1)),qy(TD(mMn(t.j,Jft)))&&(hon(t.j,Jft,(hN(),!1)),hon(t.j,Ilt,!0)),e=nCn(n,t);do{if($rn(n),0==e)return 0;r=e,DNn(n,t,i=!i,!1),e=nCn(n,t)}while(r>e);return r}function vFn(n,t,e){var i,r,c,a,u,o,s;if(t==e)return!0;if(t=bAn(n,t),e=bAn(n,e),i=qvn(t)){if((o=qvn(e))!=i)return!!o&&(a=i.Dj())==o.Dj()&&null!=a;if(!t.d&&(t.d=new $L(VAt,t,1)),r=(c=t.d).i,!e.d&&(e.d=new $L(VAt,e,1)),r==(s=e.d).i)for(u=0;u<r;++u)if(!vFn(n,BB(Wtn(c,u),87),BB(Wtn(s,u),87)))return!1;return!0}return t.e==e.e}function mFn(n,t,e,i){var r,c,a,u,o,s,h,f;if($xn(n.e,t)){for(f=axn(n.e.Tg(),t),c=BB(n.g,119),h=null,o=-1,u=-1,r=0,s=0;s<n.i;++s)a=c[s],f.rl(a.ak())&&(r==e&&(o=s),r==i&&(u=s,h=a.dd()),++r);if(-1==o)throw Hp(new Ay(u8n+e+o8n+r));if(-1==u)throw Hp(new Ay(s8n+i+o8n+r));return Iln(n,o,u),mA(n.e)&&Lv(n,LY(n,7,t,iln(i),h,e,!0)),h}throw Hp(new _y("The feature must be many-valued to support move"))}function yFn(n,t,e,i){var r,c,a,u,o;switch((o=new wA(t.n)).a+=t.o.a/2,o.b+=t.o.b/2,u=Gy(MD(mMn(t,(HXn(),tpt)))),c=n.f,a=n.d,r=n.c,BB(mMn(t,(hWn(),Qft)),61).g){case 1:o.a+=a.b+r.a-e/2,o.b=-i-u,t.n.b=-(a.d+u+r.b);break;case 2:o.a=c.a+a.b+a.c+u,o.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+u-r.a;break;case 3:o.a+=a.b+r.a-e/2,o.b=c.b+a.d+a.a+u,t.n.b=c.b+a.a+u-r.b;break;case 4:o.a=-e-u,o.b+=a.d+r.b-i/2,t.n.a=-(a.b+u+r.a)}return o}function kFn(n){var t,e,i,r,c,a;return qan(i=new min,n),GI(mMn(i,(HXn(),Udt)))===GI((Ffn(),BPt))&&hon(i,Udt,Wln(i)),null==mMn(i,(C6(),TMt))&&(a=BB($Mn(n),160),hon(i,TMt,iO(a.We(TMt)))),hon(i,(hWn(),dlt),n),hon(i,Zft,new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),r=Pzn((JJ(n)&&(GM(),new Dy(JJ(n))),GM(),new JN(JJ(n)?new Dy(JJ(n)):null,n)),FPt),c=BB(mMn(i,zgt),116),eZ(e=i.d,c),eZ(e,r),i}function jFn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(uSn(),Put)?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,TD(mMn(i,slt)))):i.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(i,hlt),11)),hon(n,flt,BB(mMn(i,flt),11)),hon(n,slt,(hN(),!0))):r.k==Sut?(hon(n,(hWn(),hlt),BB(mMn(r,hlt),11)),hon(n,flt,BB(mMn(r,flt),11)),hon(n,slt,(hN(),!0))):(hon(n,(hWn(),hlt),t.c),hon(n,flt,e.d))}function EFn(n){var t,e,i,r,c,a,u;for(n.o=new Lp,i=new YT,a=new Wb(n.e.a);a.a<a.c.c.length;)1==kbn(c=BB(n0(a),121)).c.length&&r5(i,c,i.c.b,i.c);for(;0!=i.b;)0!=kbn(c=BB(0==i.b?null:(Px(0!=i.b),Atn(i,i.a.a)),121)).c.length&&(t=BB(xq(kbn(c),0),213),e=c.g.a.c.length>0,u=Nbn(t,c),KN(e?u.b:u.g,t),1==kbn(u).c.length&&r5(i,u,i.c.b,i.c),r=new rI(c,t),d3(n.o,r),y7(n.e.a,c))}function TFn(n,t){var i,r,c,a;return r=e.Math.abs(qz(n.b).a-qz(t.b).a),a=e.Math.abs(qz(n.b).b-qz(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 MFn(n){var t,e,i;for(nUn(n,n.e,n.f,(dJ(),Lyt),!0,n.c,n.i),nUn(n,n.e,n.f,Lyt,!1,n.c,n.i),nUn(n,n.e,n.f,Nyt,!0,n.c,n.i),nUn(n,n.e,n.f,Nyt,!1,n.c,n.i),IFn(n,n.c,n.e,n.f,n.i),e=new M2(n.i,0);e.b<e.d.gc();)for(Px(e.b<e.d.gc()),t=BB(e.d.Xb(e.c=e.b++),128),i=new M2(n.i,e.b);i.b<i.d.gc();)Px(i.b<i.d.gc()),Nqn(t,BB(i.d.Xb(i.c=i.b++),128));IXn(n.i,BB(mMn(n.d,(hWn(),Slt)),230)),GGn(n.i)}function SFn(n,t){var e,i;if(null!=t)if(i=iyn(n)){if(0==(1&i.i))return nS(),!(e=BB(RX(mAt,i),55))||e.wj(t);if(i==$Nt)return zI(t);if(i==ANt)return cL(t,19);if(i==DNt)return cL(t,155);if(i==NNt)return cL(t,217);if(i==ONt)return cL(t,172);if(i==xNt)return UI(t);if(i==RNt)return cL(t,184);if(i==LNt)return cL(t,162)}else if(cL(t,56))return n.uk(BB(t,56));return!1}function PFn(){var n,t,e,i,r,c,a,u,o;for(PFn=O,WLt=x8(NNt,v6n,25,255,15,1),VLt=x8(ONt,WVn,25,64,15,1),t=0;t<255;t++)WLt[t]=-1;for(e=90;e>=65;e--)WLt[e]=e-65<<24>>24;for(i=122;i>=97;i--)WLt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)WLt[r]=r-48+52<<24>>24;for(WLt[43]=62,WLt[47]=63,c=0;c<=25;c++)VLt[c]=65+c&QVn;for(a=26,o=0;a<=51;++a,o++)VLt[a]=97+o&QVn;for(n=52,u=0;n<=61;++n,u++)VLt[n]=48+u&QVn;VLt[62]=43,VLt[63]=47}function CFn(n,t){var i,r,c,a,u,o,s,h,f,l,b;if(n.dc())return new Gj;for(s=0,f=0,r=n.Kc();r.Ob();)c=BB(r.Pb(),37).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*Gy(MD(mMn(BB(n.Kc().Pb(),37),(HXn(),Edt))))),l=0,b=0,o=0,i=t,u=n.Kc();u.Ob();)l+(h=(a=BB(u.Pb(),37)).f).a>s&&(l=0,b+=o+t,o=0),ZRn(a,l,b),i=e.Math.max(i,l+h.a),o=e.Math.max(o,h.b),l+=h.a+t;return new xC(i+t,b+o+t)}function IFn(n,t,e,i,r){var c,a,u,o,s,h,f;for(a=new Wb(t);a.a<a.c.c.length;){if(o=(c=BB(n0(a),17)).c,e.a._b(o))dJ(),s=Lyt;else{if(!i.a._b(o))throw Hp(new _y("Source port must be in one of the port sets."));dJ(),s=Nyt}if(h=c.d,e.a._b(h))dJ(),f=Lyt;else{if(!i.a._b(h))throw Hp(new _y("Target port must be in one of the port sets."));dJ(),f=Nyt}u=new tCn(c,s,f),VW(n.b,c,u),r.c[r.c.length]=u}}function OFn(n,t){var e,i,r,c,a,u,o;if(!WJ(n))throw Hp(new Fy(F5n));if(c=(i=WJ(n)).g,r=i.f,c<=0&&r<=0)return kUn(),PIt;switch(u=n.i,o=n.j,t.g){case 2:case 1:if(u<0)return kUn(),CIt;if(u+n.g>c)return kUn(),oIt;break;case 4:case 3:if(o<0)return kUn(),sIt;if(o+n.f>r)return kUn(),SIt}return(a=(u+n.g/2)/c)+(e=(o+n.f/2)/r)<=1&&a-e<=0?(kUn(),CIt):a+e>=1&&a-e>=0?(kUn(),oIt):e<.5?(kUn(),sIt):(kUn(),SIt)}function AFn(n,t,e,i,r){var c,a;if(c=rbn(e0(t[0],UQn),e0(i[0],UQn)),n[0]=dG(c),c=kz(c,32),e>=r){for(a=1;a<r;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<e;a++)c=rbn(c,e0(t[a],UQn)),n[a]=dG(c),c=kz(c,32)}else{for(a=1;a<e;a++)c=rbn(c,rbn(e0(t[a],UQn),e0(i[a],UQn))),n[a]=dG(c),c=kz(c,32);for(;a<r;a++)c=rbn(c,e0(i[a],UQn)),n[a]=dG(c),c=kz(c,32)}0!=Vhn(c,0)&&(n[a]=dG(c))}function $Fn(n){var t,e,i,r,c,a;if(wWn(),4!=n.e&&5!=n.e)throw Hp(new _y("Token#complementRanges(): must be RANGE: "+n.e));for(T$n(c=n),qHn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==unt&&(i-=2),(r=new M0(4)).b=x8(ANt,hQn,25,i,15,1),a=0,c.b[0]>0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t<c.b.length-2;t+=2)r.b[a++]=c.b[t]+1,r.b[a++]=c.b[t+1]-1;return e!=unt&&(r.b[a++]=e+1,r.b[a]=unt),r.a=!0,r}function LFn(n,t,e){var i,r,c,a,u,o,s,h;if(0==(i=e.gc()))return!1;if(n.ej())if(s=n.fj(),BTn(n,t,e),a=1==i?n.Zi(3,null,e.Kc().Pb(),t,s):n.Zi(5,null,e,t,s),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)h=n.g[r],u=n.cj(h,u),u=n.jj(h,u);u?(u.Ei(a),u.Fi()):n.$i(a)}else n.$i(a);else if(BTn(n,t,e),n.bj()){for(u=i<100?null:new Fj(i),c=t+i,r=t;r<c;++r)o=n.g[r],u=n.cj(o,u);u&&u.Fi()}return!0}function NFn(n,t,e,i){var r,c,a,u,o;for(a=new Wb(n.k);a.a<a.c.c.length;)r=BB(n0(a),129),i&&r.c!=(O6(),Tyt)||(o=r.b).g<0&&r.d>0&&(Vl(o,o.d-r.d),r.c==(O6(),Tyt)&&Xl(o,o.a-r.d),o.d<=0&&o.i>0&&r5(t,o,t.c.b,t.c));for(c=new Wb(n.f);c.a<c.c.c.length;)r=BB(n0(c),129),i&&r.c!=(O6(),Tyt)||(u=r.a).g<0&&r.d>0&&(Ql(u,u.i-r.d),r.c==(O6(),Tyt)&&Wl(u,u.b-r.d),u.i<=0&&u.d>0&&r5(e,u,e.c.b,e.c))}function xFn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Processor compute fanout",1),$U(n.b),$U(n.a),u=null,c=spn(t.b,0);!u&&c.b!=c.d.c;)qy(TD(mMn(s=BB(b3(c),86),(qqn(),dkt))))&&(u=s);for(r5(o=new YT,u,o.c.b,o.c),jUn(n,o),h=spn(t.b,0);h.b!=h.d.c;)a=SD(mMn(s=BB(b3(h),86),(qqn(),rkt))),r=null!=SJ(n.b,a)?BB(SJ(n.b,a),19).a:0,hon(s,ikt,iln(r)),i=1+(null!=SJ(n.a,a)?BB(SJ(n.a,a),19).a:0),hon(s,tkt,iln(i));HSn(e)}function DFn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(f=yEn(n,e),u=0;u<t;u++){for(yR(r,e),l=new Np,Px(i.b<i.d.gc()),b=BB(i.d.Xb(i.c=i.b++),407),s=f+u;s<n.b;s++)a=b,Px(i.b<i.d.gc()),WB(l,new Exn(a,b=BB(i.d.Xb(i.c=i.b++),407),e));for(h=f+u;h<n.b;h++)Px(i.b>0),i.a.Xb(i.c=--i.b),h>f+u&&fW(i);for(c=new Wb(l);c.a<c.c.c.length;)yR(i,BB(n0(c),407));if(u<t-1)for(o=f+u;o<n.b;o++)Px(i.b>0),i.a.Xb(i.c=--i.b)}}function RFn(){var n,t,e,i,r,c;if(wWn(),CNt)return CNt;for(sHn(n=new M0(4),ZUn(pnt,!0)),WGn(n,ZUn("M",!0)),WGn(n,ZUn("C",!0)),c=new M0(4),i=0;i<11;i++)Yxn(c,i,i);return sHn(t=new M0(4),ZUn("M",!0)),Yxn(t,4448,4607),Yxn(t,65438,65439),tqn(r=new r$(2),n),tqn(r,sNt),(e=new r$(2)).$l(gG(c,ZUn("L",!0))),e.$l(t),e=new h4(3,e),e=new UU(r,e),CNt=e}function KFn(n){var t,e;if(!Ycn(t=SD(ZAn(n,(sWn(),eSt))),n)&&!P8(n,mPt)&&(0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i||qy(TD(ZAn(n,SSt))))){if(null!=t&&0!=RMn(t).length)throw gzn(n,e=oO(oO(new lN("Layout algorithm '"),t),"' not found for ")),Hp(new rk(e.a));if(!Ycn(w1n,n))throw gzn(n,e=oO(oO(new lN("Unable to load default layout algorithm "),w1n)," for unconfigured node ")),Hp(new rk(e.a))}}function _Fn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(i=n.i,t=n.n,0==n.b)for(w=i.c+t.b,b=i.b-t.b-t.c,s=0,f=(u=n.a).length;s<f;++s)UG(c=u[s],w,b);else r=Wvn(n,!1),UG(n.a[0],i.c+t.b,r[0]),UG(n.a[2],i.c+i.b-t.c-r[2],r[2]),l=i.b-t.b-t.c,r[0]>0&&(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),UG(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Te()}function FFn(n){var t,e,i,r,c,a,u,o,s,h,f;for((f=new aa).d=0,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),29),f.d+=c.a.c.length;for(i=0,r=0,f.a=x8(ANt,hQn,25,n.b.c.length,15,1),s=0,h=0,f.e=x8(ANt,hQn,25,f.d,15,1),e=new Wb(n.b);e.a<e.c.c.length;)for((t=BB(n0(e),29)).p=i++,f.a[t.p]=r++,h=0,o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p=s++,f.e[u.p]=h++;return f.c=new fg(f),f.b=sx(f.d),H_n(f,n),f.f=sx(f.d),q_n(f,n),f}function BFn(n,t){var i,r,c;for(c=BB(xq(n.n,n.n.c.length-1),211).d,n.p=e.Math.min(n.p,t.g),n.r=e.Math.max(n.r,c),n.g=e.Math.max(n.g,t.g+(1==n.b.c.length?0:n.i)),n.o=e.Math.min(n.o,t.f),n.e+=t.f+(1==n.b.c.length?0:n.i),n.f=e.Math.max(n.f,t.f),r=n.n.c.length>0?(n.n.c.length-1)*n.i:0,i=new Wb(n.n);i.a<i.c.c.length;)r+=BB(n0(i),211).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function HFn(n,t){var e,i,r,c,a,u,o,s,h;if(null==(s=TD(mMn(t,(fRn(),iat))))||(kW(s),s)){for(h=x8($Nt,ZYn,25,t.e.c.length,16,1),a=kOn(t),r=new YT,o=new Wb(t.e);o.a<o.c.c.length;)(e=Y$n(n,BB(n0(o),144),null,null,h,a))&&(qan(e,t),r5(r,e,r.c.b,r.c));if(r.b>1)for(i=spn(r,0);i.b!=i.d.c;)for(c=0,u=new Wb((e=BB(b3(i),231)).e);u.a<u.c.c.length;)BB(n0(u),144).b=c++;return r}return u6(Pun(Gk(Kct,1),tZn,231,0,[t]))}function qFn(n){var t,e,i,r,c;if(!n.g){if(c=new To,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,qFn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();++i)ub(BB(kpn(r),449),i);pX(c,(!n.s&&(n.s=new eU(FAt,n,21,17)),n.s)),chn(c),n.g=new don(n,c),n.i=BB(c.g,247),null==n.i&&(n.i=I$t),n.p=null,P5(n).b&=-5}return n.g}function GFn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=Xvn(n,!1),XG(n.a[0],r.d+i.d,t[0]),XG(n.a[2],r.d+r.a-i.a-t[2],t[2]),l=r.a-i.d-i.a,t[0]>0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XG(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=(u=n.a).length;s<f;++s)XG(c=u[s],w,b);for(o=0,h=(a=n.a).length;o<h;++o)cL(c=a[o],326)&&BB(c,326).Ue()}function zFn(n){var t,e,i,r,c,a,u,o,s;for(s=x8(ANt,hQn,25,n.b.c.length+1,15,1),o=new Rv,i=0,c=new Wb(n.b);c.a<c.c.c.length;){for(r=BB(n0(c),29),s[i++]=o.a.gc(),u=new Wb(r.a);u.a<u.c.c.length;)for(e=new oz(ZL(lbn(BB(n0(u),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.zc(t,o);for(a=new Wb(r.a);a.a<a.c.c.length;)for(e=new oz(ZL(fbn(BB(n0(a),10)).a.Kc(),new h));dAn(e);)t=BB(U5(e),17),o.a.Bc(t)}return s}function UFn(n,t,e,i){var r,c,a,u,o;if(o=axn(n.e.Tg(),t),r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&Nfn(c,e))return!0}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],o.rl(c.ak())&&Nfn(e,c.dd()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&GI(e)===GI(hD(n,BB(c.dd(),56))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],o.rl(c.ak())&&null==c.dd())return!1;return!1}function XFn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),a=BB(n.g,119),$xn(n.e,t)){if(t.hi()&&(c=pBn(n,t,i,cL(t,99)&&0!=(BB(t,18).Bb&BQn)))>=0&&c!=e)throw Hp(new _y(a8n));for(r=0,o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak())){if(r==e)return BB(ovn(n,o,(ZM(),BB(t,66).Oj()?BB(i,72):Z3(t,i))),72);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(o=0;o<n.i;++o)if(u=a[o],s.rl(u.ak()))return ZM(),BB(t,66).Oj()?u:u.dd();return null}function WFn(n,t,i,r){var c,a,u,o;for(o=i,u=new Wb(t.a);u.a<u.c.c.length;){if(a=BB(n0(u),221),c=BB(a.b,65),Ibn(n.b.c,c.b.c+c.b.b)<=0&&Ibn(c.b.c,n.b.c+n.b.b)<=0&&Ibn(n.b.d,c.b.d+c.b.a)<=0&&Ibn(c.b.d,n.b.d+n.b.a)<=0){if(0==Ibn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Ibn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Ibn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Ibn(c.b.d+c.b.a,n.b.d)&&r.b>0){o=0;break}}else o=e.Math.min(o,HCn(n,c,r));o=e.Math.min(o,WFn(n,a,o,r))}return o}function VFn(n,t){var e,i,r,c,a,u;if(n.b<2)throw Hp(new _y("The vector chain must contain at least a source and a target point."));for(Px(0!=n.b),CA(t,(i=BB(n.a.a.c,8)).a,i.b),u=new cx((!t.a&&(t.a=new $L(xOt,t,5)),t.a)),c=spn(n,1);c.a<n.b-1;)a=BB(b3(c),8),u.e!=u.i.gc()?e=BB(kpn(u),469):(tE(),odn(u,e=new ro)),TA(e,a.a,a.b);for(;u.e!=u.i.gc();)kpn(u),Qjn(u);Px(0!=n.b),PA(t,(r=BB(n.c.b.c,8)).a,r.b)}function QFn(n,t){var e,i,r,c,a,u,o,s;for(e=0,i=new Wb((l1(0,n.c.length),BB(n.c[0],101)).g.b.j);i.a<i.c.c.length;)BB(n0(i),11).p=e++;for(t==(kUn(),sIt)?m$(n,new nc):m$(n,new tc),a=0,s=n.c.length-1;a<s;)l1(a,n.c.length),c=BB(n.c[a],101),l1(s,n.c.length),o=BB(n.c[s],101),r=t==sIt?c.c:c.a,u=t==sIt?o.a:o.c,bU(c,t,(Oun(),yst),r),bU(o,t,mst,u),++a,--s;a==s&&bU((l1(a,n.c.length),BB(n.c[a],101)),t,(Oun(),vst),null)}function YFn(n,t,e){var i,r,c,a,u,o,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new xC(t.i+t.g/2,t.j+t.f/2),(o=BB(ZAn(t,(sWn(),gPt)),8)).a=o.a+h,o.b=o.b+f,r=(a.b-o.b)/(a.a-o.a),i=a.b-r*a.a,u=new xC(e.i+e.g/2,e.j+e.f/2),(s=BB(ZAn(e,gPt),8)).a=s.a+h,s.b=s.b+f,c=(u.b-s.b)/(u.a-s.a),l=(i-(u.b-c*u.a))/(c-r),!(o.a<l&&a.a<l||l<o.a&&l<a.a||s.a<l&&u.a<l||l<s.a&&l<u.a)}function JFn(n,t){var e,i,r,c,a,u;if(!(a=BB(RX(n.c,t),183)))throw Hp(new ek("Edge did not exist in input."));return i=Qdn(a),!WE((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a))&&(e=new MB(n,i,u=new Cl),wO((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),e),rtn(a,x6n,u)),P8(t,(sWn(),OSt))&&!(!(r=BB(ZAn(t,OSt),74))||pW(r))&&(e5(r,new Qg(c=new Cl)),rtn(a,"junctionPoints",c)),AH(a,"container",XJ(t).k),null}function ZFn(n,t,e){var i,r,c,a,u,o;this.a=n,this.b=t,this.c=e,this.e=u6(Pun(Gk(uit,1),HWn,168,0,[new xS(n,t),new xS(t,e),new xS(e,n)])),this.f=u6(Pun(Gk(PMt,1),sVn,8,0,[n,t,e])),this.d=(i=XR(B$(this.b),this.a),r=XR(B$(this.c),this.a),c=XR(B$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),u=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),o=2*(i.a*c.b-i.b*c.a),new xC((r.b*a-i.b*u)/o,(i.a*u-r.a*a)/o))}function nBn(n,t,e,i){var r,c,a,u,o,s,h,f,l;if(f=new GX(n.p),rtn(t,t8n,f),e&&!(n.f?rY(n.f):null).a.dc())for(rtn(t,"logs",s=new Cl),u=0,l=new qb((n.f?rY(n.f):null).b.Kc());l.b.Ob();)h=new GX(SD(l.b.Pb())),dnn(s,u),r4(s,u,h),++u;if(i&&rtn(t,"executionTime",new Sl(n.q)),!rY(n.a).a.dc())for(a=new Cl,rtn(t,A6n,a),u=0,c=new qb(rY(n.a).b.Kc());c.b.Ob();)r=BB(c.b.Pb(),1949),o=new py,dnn(a,u),r4(a,u,o),nBn(r,o,e,i),++u}function tBn(n,t){var e,i,r,c,a,u;for(c=n.c,a=n.d,SZ(n,null),MZ(n,null),t&&qy(TD(mMn(a,(hWn(),tlt))))?SZ(n,R_n(a.i,(ain(),qvt),(kUn(),oIt))):SZ(n,a),t&&qy(TD(mMn(c,(hWn(),klt))))?MZ(n,R_n(c.i,(ain(),Hvt),(kUn(),CIt))):MZ(n,c),i=new Wb(n.b);i.a<i.c.c.length;)e=BB(n0(i),70),(r=BB(mMn(e,(HXn(),Ydt)),272))==(Rtn(),XPt)?hon(e,Ydt,UPt):r==UPt&&hon(e,Ydt,XPt);u=qy(TD(mMn(n,(hWn(),Clt)))),hon(n,Clt,(hN(),!u)),n.a=Jon(n.a)}function eBn(n,t,i){var r,c,a,u,o;for(r=0,a=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));a.e!=a.i.gc();)u="",0==(!(c=BB(kpn(a),33)).n&&(c.n=new eU(zOt,c,1,7)),c.n).i||(u=BB(Wtn((!c.n&&(c.n=new eU(zOt,c,1,7)),c.n),0),137).a),qan(o=new qX(u),c),hon(o,(Mrn(),sat),c),o.b=r++,o.d.a=c.i+c.g/2,o.d.b=c.j+c.f/2,o.e.a=e.Math.max(c.g,1),o.e.b=e.Math.max(c.f,1),WB(t.e,o),jCn(i.f,c,o),BB(ZAn(c,(fRn(),Yct)),98),QEn()}function iBn(n,t){var i,r,c,a,u,o,s,h,f,l,b;i=AN(new qv,n.f),o=n.i[t.c.i.p],l=n.i[t.d.i.p],u=t.c,f=t.d,a=u.a.b,h=f.a.b,o.b||(a+=u.n.b),l.b||(h+=f.n.b),s=CJ(e.Math.max(0,a-h)),c=CJ(e.Math.max(0,h-a)),b=e.Math.max(1,BB(mMn(t,(HXn(),bpt)),19).a)*X3(t.c.i.k,t.d.i.k),r=new nC(UNn(aM(cM(rM(uM(new Hv,b),c),i),BB(RX(n.k,t.c),121))),UNn(aM(cM(rM(uM(new Hv,b),s),i),BB(RX(n.k,t.d),121)))),n.c[t.p]=r}function rBn(n,t,e,i){var r,c,a,u,o,s;for(a=new uGn(n,t,e),o=new M2(i,0),r=!1;o.b<o.d.gc();)Px(o.b<o.d.gc()),(u=BB(o.d.Xb(o.c=o.b++),233))==t||u==e?fW(o):!r&&Gy(lL(u.g,u.d[0]).a)>Gy(lL(a.g,a.d[0]).a)?(Px(o.b>0),o.a.Xb(o.c=--o.b),yR(o,a),r=!0):u.e&&u.e.gc()>0&&(c=(!u.e&&(u.e=new Np),u.e).Mc(t),s=(!u.e&&(u.e=new Np),u.e).Mc(e),(c||s)&&((!u.e&&(u.e=new Np),u.e).Fc(a),++a.c));r||(i.c[i.c.length]=a)}function cBn(n){var t,e,i;if(vA(BB(mMn(n,(HXn(),ept)),98)))for(e=new Wb(n.j);e.a<e.c.c.length;)(t=BB(n0(e),11)).j==(kUn(),PIt)&&((i=BB(mMn(t,(hWn(),Elt)),10))?qCn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qCn(t,oIt):qCn(t,CIt));else{for(e=new Wb(n.j);e.a<e.c.c.length;)t=BB(n0(e),11),(i=BB(mMn(t,(hWn(),Elt)),10))?qCn(t,BB(mMn(i,Qft),61)):t.e.c.length-t.g.c.length<0?qCn(t,(kUn(),oIt)):qCn(t,(kUn(),CIt));hon(n,ept,(QEn(),VCt))}}function aBn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&QVn);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=n<32?"\\x"+fx(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=BQn?"\\v"+fx(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&QVn)}return e}function uBn(n,t){var e,i,r,c,a,u,o,s,h,f;if(a=n.e,0==(o=t.e))return n;if(0==a)return 0==t.e?t:new lU(-t.e,t.d,t.a);if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a<0&&(e=j7(e)),o<0&&(i=j7(i)),npn(ibn(e,i));if(-1==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))f=-o,h=a==o?d6(t.a,u,n.a,c):N8(t.a,u,n.a,c);else if(f=a,a==o){if(0==r)return ODn(),eet;h=d6(n.a,c,t.a,u)}else h=N8(n.a,c,t.a,u);return X0(s=new lU(f,h.length,h)),s}function oBn(n){var t,e,i,r,c,a;for(this.e=new Np,this.a=new Np,e=n.b-1;e<3;e++)Kx(n,0,BB(Dpn(n,0),8));if(n.b<4)throw Hp(new _y("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,I$n(this,n.b+this.b-1),a=new Np,c=new Wb(this.e),t=0;t<this.b-1;t++)WB(a,MD(n0(c)));for(r=spn(n,0);r.b!=r.d.c;)i=BB(b3(r),8),WB(a,MD(n0(c))),WB(this.a,new wJ(i,a)),l1(0,a.c.length),a.c.splice(0,1)}function sBn(n,t){var e,i,r,c,a,u,o;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)for((c=BB(n0(a),10)).k==(uSn(),Sut)&&(u=BB(U5(new oz(ZL(fbn(c).a.Kc(),new h))),17),o=BB(U5(new oz(ZL(lbn(c).a.Kc(),new h))),17),hFn(c,qy(TD(mMn(u,(hWn(),Clt))))&&qy(TD(mMn(o,Clt)))?Xun(t):t)),i=new oz(ZL(lbn(c).a.Kc(),new h));dAn(i);)vun(e=BB(U5(i),17),qy(TD(mMn(e,(hWn(),Clt))))?Xun(t):t)}function hBn(n,t,e,i,r){var c,a;if(e.f>=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=BB(xq(t.n,t.n.c.length-1),211)).e+c.d+e.g+r<=i&&(BB(xq(t.n,t.n.c.length-1),211).f-n.f+e.f<=n.b||1==n.a.c.length))return ybn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return WB(t.b,e),a=BB(xq(t.n,t.n.c.length-1),211),WB(t.n,new RJ(t.s,a.f+a.a+t.i,t.i)),smn(BB(xq(t.n,t.n.c.length-1),211),e),BFn(t,e),!0}return!1}function fBn(n,t,e){var i,r,c,a;return n.ej()?(r=null,c=n.fj(),i=n.Zi(1,a=onn(n,t,e),e,t,c),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GI(a)===GI(e))?(null!=a&&(r=n.dj(a,r)),r=n.cj(e,r),n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)):(n.ij()&&(r=n.lj(a,e,r)),r?(r.Ei(i),r.Fi()):n.$i(i)),a):(a=onn(n,t,e),n.bj()&&!(n.ni()&&null!=a?Nfn(a,e):GI(a)===GI(e))&&(r=null,null!=a&&(r=n.dj(a,null)),(r=n.cj(e,r))&&r.Fi()),a)}function lBn(n,t){var i,r,c,a,u,o,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(u=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(o=u/60|0,s=u%60,r=n.q.getDate(),n.q.getHours()+o>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+o,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 bBn(n,t){var e,i,r,c;if(OTn(t,"Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new MAn(n)).i&&(r.i=Wrn(r,new kc)),e=Gy(r.i)*r.f/(null==r.i&&(r.i=Wrn(r,new kc)),Gy(r.i)),r.b>e)HSn(t);else{switch(BB(mMn(n,(HXn(),Bpt)),337).g){case 2:c=new Tc;break;case 0:c=new wc;break;default:c=new Mc}if(i=c.Vf(n,r),!c.Wf())switch(BB(mMn(n,Xpt),338).g){case 2:i=XCn(r,i);break;case 1:i=KTn(r,i)}iqn(n,r,i),HSn(t)}else HSn(t)}function wBn(n,t){var e,i,r,c;if(f1(n.d,n.e),n.c.a.$b(),0!=Gy(MD(mMn(t.j,(HXn(),Idt))))||0!=Gy(MD(mMn(t.j,Idt))))for(e=ZJn,GI(mMn(t.j,Ldt))!==GI((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=gFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);else for(e=DWn,GI(mMn(t.j,Ldt))!==GI((mon(),Nvt))&&hon(t.j,(hWn(),Jft),(hN(),!0)),c=BB(mMn(t.j,xpt),19).a,r=0;r<c&&!((i=pFn(n,t))<e&&(e=i,Lrn(n),0==e));r++);}function dBn(n,t){var e,i,r,c,a,u;for(r=new Np,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=BB(n.Xb(e),19).a+a;(l1(c+1,t.c.length),BB(t.c[c+1],19)).a<i;)++c;for(u=0,i-(l1(c,t.c.length),BB(t.c[c],19)).a>(l1(c+1,t.c.length),BB(t.c[c+1],19)).a-i&&++u,WB(r,(l1(c+u,t.c.length),BB(t.c[c+u],19))),a+=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a-i,++e;e<n.gc()&&BB(n.Xb(e),19).a+a<=(l1(c+u,t.c.length),BB(t.c[c+u],19)).a;)++e;c+=1+u}return r}function gBn(n){var t,e,i,r,c;if(!n.d){if(c=new Po,null==(t=P$t).a.zc(n,t)){for(e=new AL(kY(n));e.e!=e.i.gc();)pX(c,gBn(BB(kpn(e),26)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new eU(QAt,n,11,10)),i=new AL(n.q);i.e!=i.i.gc();++r)BB(kpn(i),399);pX(c,(!n.q&&(n.q=new eU(QAt,n,11,10)),n.q)),chn(c),n.d=new NO((BB(Wtn(QQ((QX(),t$t).o),9),18),c.i),c.g),n.e=BB(c.g,673),null==n.e&&(n.e=C$t),P5(n).b&=-17}return n.d}function pBn(n,t,e,i){var r,c,a,u,o,s;if(s=axn(n.e.Tg(),t),o=0,r=BB(n.g,119),ZM(),BB(t,66).Oj()){for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(Nfn(c,e))return o;++o}}else if(null!=e){for(u=0;u<n.i;++u)if(c=r[u],s.rl(c.ak())){if(Nfn(e,c.dd()))return o;++o}if(i)for(o=0,a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(GI(e)===GI(hD(n,BB(c.dd(),56))))return o;++o}}else for(a=0;a<n.i;++a)if(c=r[a],s.rl(c.ak())){if(null==c.dd())return o;++o}return-1}function vBn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(SQ(),m$(n,new zu),a=zB(n),b=new Np,l=new Np,u=null,o=0;0!=a.b;)c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),157),!u||iG(u)*eG(u)/2<iG(c)*eG(c)?(u=c,b.c[b.c.length]=c):(o+=iG(c)*eG(c),l.c[l.c.length]=c,l.c.length>1&&(o>iG(u)*eG(u)/2||0==a.b)&&(f=new Gtn(l),h=iG(u)/eG(u),s=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),s),u=f,b.c[b.c.length]=f,o=0,l.c=x8(Ant,HWn,1,0,5,1)));return gun(b,l),b}function mBn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(e.mh(t)&&(h=(b=t)?BB(i,49).xh(b):null))if(d=e.bh(t,n.a),(w=t.t)>1||-1==w)if(f=BB(d,69),l=BB(h,69),f.dc())l.$b();else for(a=!!Cvn(t),c=0,u=n.a?f.Kc():f.Zh();u.Ob();)s=BB(u.Pb(),56),(r=BB(lnn(n,s),56))?(a?-1==(o=l.Xc(r))?l.Xh(c,r):c!=o&&l.ji(c,r):l.Xh(c,r),++c):n.b&&!a&&(l.Xh(c,s),++c);else null==d?h.Wb(null):null==(r=lnn(n,d))?n.b&&!Cvn(t)&&h.Wb(d):h.Wb(r)}function yBn(n,t){var i,r,c,a,u,o,s,f;for(i=new Le,c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)if(!b5(r=BB(U5(c),17))&&eTn(o=r.c.i,Xut)){if(-1==(f=VDn(n,o,Xut,Uut)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Np),WB(i.a,o)}for(u=new oz(ZL(lbn(t).a.Kc(),new h));dAn(u);)if(!b5(a=BB(U5(u),17))&&eTn(s=a.d.i,Uut)){if(-1==(f=VDn(n,s,Uut,Xut)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Np),WB(i.c,s)}return i}function kBn(n){var t,e,i,r;if($On(),t=CJ(n),n<uet.length)return uet[t];if(n<=50)return uOn((ODn(),net),t);if(n<=VVn)return G5(uOn(aet[1],t),t);if(n>1e6)throw Hp(new Oy("power of ten too big"));if(n<=DWn)return G5(uOn(aet[1],t),t);for(r=i=uOn(aet[1],DWn),e=fan(n-DWn),t=CJ(n%DWn);Vhn(e,DWn)>0;)r=Nnn(r,i),e=ibn(e,DWn);for(r=G5(r=Nnn(r,uOn(aet[1],t)),DWn),e=fan(n-DWn);Vhn(e,DWn)>0;)r=G5(r,DWn),e=ibn(e,DWn);return r=G5(r,t)}function jBn(n,t){var e,i,r,c,a,u,o,s;for(OTn(t,"Hierarchical port dummy size processing",1),u=new Np,s=new Np,e=2*Gy(MD(mMn(n,(HXn(),kpt)))),r=new Wb(n.b);r.a<r.c.c.length;){for(i=BB(n0(r),29),u.c=x8(Ant,HWn,1,0,5,1),s.c=x8(Ant,HWn,1,0,5,1),a=new Wb(i.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((o=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sIt)?u.c[u.c.length]=c:o==SIt&&(s.c[s.c.length]=c));HOn(u,!0,e),HOn(s,!1,e)}HSn(t)}function EBn(n,t){var e,i,r,c,a;OTn(t,"Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(l1(0,a.c.length),_Kn(n,BB(a.c[0],29),BB(xq(a,a.c.length-1),29),e=new HX(n),r=new HX(n)),0==e.a.c.length||(LZ(0,a.c.length),MS(a.c,0,e)),0==r.a.c.length||(a.c[a.c.length]=r)),Lx(n,(hWn(),nlt))&&(yDn(n,i=new HX(n),c=new HX(n)),0==i.a.c.length||(LZ(0,a.c.length),MS(a.c,0,i)),0==c.a.c.length||(a.c[a.c.length]=c)),HSn(t)}function TBn(n){var t,e,i,r,c,a,u,o;for(a=new Wb(n.a);a.a<a.c.c.length;)if((c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),oIt)||r==CIt))for(i=new oz(ZL(hbn(c).a.Kc(),new h));dAn(i);)0!=(t=(e=BB(U5(i),17)).a).b&&((u=e.c).i==c&&(Px(0!=t.b),BB(t.a.a.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[u.i.n,u.n,u.a])).b),(o=e.d).i==c&&(Px(0!=t.b),BB(t.c.b.c,8).b=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).b))}function MBn(n,t){var e,i,r,c,a,u,o;for(OTn(t,"Sort By Input Model "+mMn(n,(HXn(),Ldt)),1),r=0,i=new Wb(n.b);i.a<i.c.c.length;){for(e=BB(n0(i),29),o=0==r?0:r-1,u=BB(xq(n.b,o),29),a=new Wb(e.a);a.a<a.c.c.length;)GI(mMn(c=BB(n0(a),10),ept))!==GI((QEn(),UCt))&&GI(mMn(c,ept))!==GI(XCt)&&(SQ(),m$(c.j,new O7(u,okn(c))),OH(t,"Node "+c+" ports: "+c.j));SQ(),m$(e.a,new Grn(u,BB(mMn(n,Ldt),339),BB(mMn(n,Adt),378))),OH(t,"Layer "+r+": "+e),++r}HSn(t)}function SBn(n,t){var e,i,r;if(r=kFn(t),JT(new Rq(null,(!t.c&&(t.c=new eU(XOt,t,9,9)),new w1(t.c,16))),new Uw(r)),uzn(t,i=BB(mMn(r,(hWn(),Zft)),21)),i.Hc((bDn(),lft)))for(e=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));e.e!=e.i.gc();)Qzn(n,t,r,BB(kpn(e),118));return 0!=BB(ZAn(t,(HXn(),Fgt)),174).gc()&&mDn(t,r),qy(TD(mMn(r,Xgt)))&&i.Fc(pft),Lx(r,gpt)&&My(new uwn(Gy(MD(mMn(r,gpt)))),r),GI(ZAn(t,sgt))===GI((ufn(),pCt))?cWn(n,t,r):eXn(n,t,r),r}function PBn(n,t,i,r){var c,a,u;if(this.j=new Np,this.k=new Np,this.b=new Np,this.c=new Np,this.e=new bA,this.i=new km,this.f=new Dp,this.d=new Np,this.g=new Np,WB(this.b,n),WB(this.b,t),this.e.c=e.Math.min(n.a,t.a),this.e.d=e.Math.min(n.b,t.b),this.e.b=e.Math.abs(n.a-t.a),this.e.a=e.Math.abs(n.b-t.b),c=BB(mMn(r,(HXn(),vgt)),74))for(u=spn(c,0);u.b!=u.d.c;)aen((a=BB(b3(u),8)).a,n.a)&&DH(this.i,a);i&&WB(this.j,i),WB(this.k,r)}function CBn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(h=new Xz(new xw(e)),vU(u=x8($Nt,ZYn,25,n.f.e.c.length,16,1),u.length),e[t.b]=0,s=new Wb(n.f.e);s.a<s.c.c.length;)(o=BB(n0(s),144)).b!=t.b&&(e[o.b]=DWn),F8(eMn(h,o));for(;0!=h.b.c.length;)for(u[(f=BB(mnn(h),144)).b]=!0,c=vN(new mT(n.b,f),0);c.c;)u[(l=$mn(r=BB(EZ(c),282),f)).b]||(a=Lx(r,(rkn(),pat))?Gy(MD(mMn(r,pat))):n.c,(i=e[f.b]+a)<e[l.b]&&(e[l.b]=i,srn(h,l),F8(eMn(h,l))))}function IBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(r=!0,a=new Wb(n.b);a.a<a.c.c.length;){for(c=BB(n0(a),29),s=KQn,h=null,o=new Wb(c.a);o.a<o.c.c.length;){if(u=BB(n0(o),10),f=Gy(t.p[u.p])+Gy(t.d[u.p])-u.d.d,i=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a,!(f>s&&i>s)){r=!1,e.n&&OH(e,"bk node placement breaks on "+u+" which should have been after "+h);break}h=u,s=Gy(t.p[u.p])+Gy(t.d[u.p])+u.o.b+u.d.a}if(!r)break}return e.n&&OH(e,t+" is feasible: "+r),r}function OBn(n,t,e,i){var r,c,a,u,o,s,h;for(u=-1,h=new Wb(n);h.a<h.c.c.length;)(s=BB(n0(h),112)).g=u--,a=r=dG(E2(NV(AV(new Rq(null,new w1(s.f,16)),new sa),new ha)).d),o=c=dG(E2(NV(AV(new Rq(null,new w1(s.k,16)),new fa),new la)).d),i||(a=dG(E2(NV(new Rq(null,new w1(s.f,16)),new ba)).d),o=dG(E2(NV(new Rq(null,new w1(s.k,16)),new wa)).d)),s.d=a,s.a=r,s.i=o,s.b=c,0==o?r5(e,s,e.c.b,e.c):0==a&&r5(t,s,t.c.b,t.c)}function ABn(n,t,e,i){var r,c,a,u,o,s,h;if(e.d.i!=t.i){for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XCt)),i.c[i.c.length]=r,CZ(a=new CSn,r),qCn(a,(kUn(),CIt)),CZ(u=new CSn,r),qCn(u,oIt),h=e.d,MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,h),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),GI(mMn(o=BB(s.d.Xb(s.c=s.b++),70),Ydt))===GI((Rtn(),UPt))&&(hon(o,Uft,e),fW(s),WB(c.b,o));yAn(r,a,u)}}function $Bn(n,t,e,i){var r,c,a,u,o,s;if(e.c.i!=t.i)for(Bl(r=new $vn(n),(uSn(),Put)),hon(r,(hWn(),dlt),e),hon(r,(HXn(),ept),(QEn(),XCt)),i.c[i.c.length]=r,CZ(a=new CSn,r),qCn(a,(kUn(),CIt)),CZ(u=new CSn,r),qCn(u,oIt),MZ(e,a),qan(c=new wY,e),hon(c,vgt,null),SZ(c,u),MZ(c,t),yAn(r,a,u),s=new M2(e.b,0);s.b<s.d.gc();)Px(s.b<s.d.gc()),o=BB(s.d.Xb(s.c=s.b++),70),BB(mMn(o,Ydt),272)==(Rtn(),UPt)&&(Lx(o,Uft)||hon(o,Uft,e),fW(s),WB(c.b,o))}function LBn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(l=new Np,p=S4(r),g=t*n.a,w=0,a=new Rv,u=new Rv,o=new Np,v=0,m=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=tbn(p,c,u))&&(p.a.Bc(s),o.c[o.c.length]=s,a.a.zc(s,a),w=n.f[s.p],v+=n.e[s.p]-w*n.b,m+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||v>=g&&n.e[s.p]>w*n.b||m>=i*g)&&(l.c[l.c.length]=o,o=new Np,Frn(u,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=m,v=m,m=0,f=0,d=0);return new rI(b,l)}function NBn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(e=new Kb(new Ob(n.c.b).a.vc().Kc());e.a.Ob();)u=BB(e.a.Pb(),42),null==(r=(t=BB(u.dd(),149)).a)&&(r=""),!(i=_D(n.c,r))&&0==r.length&&(i=yfn(n)),i&&!ywn(i.c,t,!1)&&DH(i.c,t);for(a=spn(n.a,0);a.b!=a.d.c;)c=BB(b3(a),478),s=T5(n.c,c.a),l=T5(n.c,c.b),s&&l&&DH(s.c,new rI(l,c.c));for(yQ(n.a),f=spn(n.b,0);f.b!=f.d.c;)h=BB(b3(f),478),t=KD(n.c,h.a),o=T5(n.c,h.b),t&&o&&DM(t,o,h.c);yQ(n.b)}function xBn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;c=new Pl(n),d5((a=new dkn).g),d5(a.j),$U(a.b),d5(a.d),d5(a.i),$U(a.k),$U(a.c),$U(a.e),b=bIn(a,c,null),O$n(a,c),r=b,t&&(u=eHn(s=new Pl(t)),vSn(r,Pun(Gk(nMt,1),HWn,527,0,[u]))),l=!1,f=!1,e&&(s=new Pl(e),l8n in s.a&&(l=zJ(s,l8n).ge().a),b8n in s.a&&(f=zJ(s,b8n).ge().a)),h=$j(Fen(new Xm,l),f),BSn(new su,r,h),l8n in c.a&&rtn(c,l8n,null),(l||f)&&(nBn(h,o=new py,l,f),rtn(c,l8n,o)),i=new Xg(a),Uon(new OA(r),i)}function DBn(n,t,e){var i,r,c,a,u,o,s,h,f;for(a=new Ykn,s=Pun(Gk(ANt,1),hQn,25,15,[0]),r=-1,c=0,i=0,o=0;o<n.b.c.length;++o){if(!((h=BB(xq(n.b,o),434)).b>0)){if(r=-1,32==fV(h.c,0)){if(f=s[0],ynn(t,s),s[0]>f)continue}else if($Y(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=o,c=s[0],i=0),r>=0){if(u=h.b,o==r&&0==(u-=i++))return 0;if(!LUn(t,s,h,u,a)){o=r-1,s[0]=c;continue}}else if(r=-1,!LUn(t,s,h,0,a))return 0}return dUn(a,e)?s[0]:0}function RBn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Mo,c=new Mo,null==(t=P$t).a.zc(n,t)){for(r=new AL(kY(n));r.e!=r.i.gc();)pX(a,RBn(BB(kpn(r),26)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),i=new AL(n.s);i.e!=i.i.gc();)cL(e=BB(kpn(i),170),99)&&f9(c,BB(e,18));chn(c),n.r=new TH(n,(BB(Wtn(QQ((QX(),t$t).o),6),18),c.i),c.g),pX(a,n.r),chn(a),n.f=new NO((BB(Wtn(QQ(t$t.o),5),18),a.i),a.g),P5(n).b&=-3}return n.f}function KBn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(a=n.o,i=x8(ANt,hQn,25,a,15,1),r=x8(ANt,hQn,25,a,15,1),e=n.p,t=x8(ANt,hQn,25,e,15,1),c=x8(ANt,hQn,25,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!vmn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!vmn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(u=0;u<a&&!vmn(n,u,b);)++u;t[b]=u}for(w=0;w<e;w++){for(u=a-1;u>=0&&!vmn(n,u,w);)--u;c[w]=u}for(o=0;o<a;o++)for(l=0;l<e;l++)o<c[l]&&o>t[l]&&l<r[o]&&l>i[o]&&FRn(n,o,l,!1,!0)}function _Bn(n){var t,e,i,r,c,a,u,o;e=qy(TD(mMn(n,(fRn(),Bct)))),c=n.a.c.d,u=n.a.d.d,e?(a=kL(XR(new xC(u.a,u.b),c),.5),o=kL(B$(n.e),.5),t=XR(UR(new xC(c.a,c.b),a),o),Hx(n.d,t)):(r=Gy(MD(mMn(n.a,rat))),i=n.d,c.a>=u.a?c.b>=u.b?(i.a=u.a+(c.a-u.a)/2+r,i.b=u.b+(c.b-u.b)/2-r-n.e.b):(i.a=u.a+(c.a-u.a)/2+r,i.b=c.b+(u.b-c.b)/2+r):c.b>=u.b?(i.a=c.a+(u.a-c.a)/2+r,i.b=u.b+(c.b-u.b)/2+r):(i.a=c.a+(u.a-c.a)/2+r,i.b=c.b+(u.b-c.b)/2-r-n.e.b))}function FBn(n,t){var e,i,r,c,a,u,o;if(null==n)return null;if(0==(c=n.length))return"";for(o=x8(ONt,WVn,25,c,15,1),_8(0,c,n.length),_8(0,c,o.length),YU(n,0,c,o,0),e=null,u=t,r=0,a=0;r<c;r++)i=o[r],EWn(),i<=32&&0!=(2&JLt[i])?u?(!e&&(e=new fN(n)),aY(e,r-a++)):(u=t,32!=i&&(!e&&(e=new fN(n)),sV(e,r-a,r-a+1,String.fromCharCode(32)))):u=!1;return u?e?(c=e.a.length)>0?fx(e.a,0,c-1):"":n.substr(0,c-1):e?e.a:n}function BBn(n){NM(n,new MTn(vj(wj(pj(gj(new du,UJn),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new at))),u2(n,UJn,XJn,mpn(Ect)),u2(n,UJn,WJn,mpn(pct)),u2(n,UJn,VJn,mpn(lct)),u2(n,UJn,QJn,mpn(vct)),u2(n,UJn,XYn,mpn(kct)),u2(n,UJn,WYn,mpn(yct)),u2(n,UJn,UYn,mpn(jct)),u2(n,UJn,VYn,mpn(mct)),u2(n,UJn,BJn,mpn(wct)),u2(n,UJn,HJn,mpn(bct)),u2(n,UJn,qJn,mpn(dct)),u2(n,UJn,GJn,mpn(gct))}function HBn(n,t,e,i){var r,c,a,u,o,s,h;if(Bl(c=new $vn(n),(uSn(),Iut)),hon(c,(HXn(),ept),(QEn(),XCt)),r=0,t){for(hon(a=new CSn,(hWn(),dlt),t),hon(c,dlt,t.i),qCn(a,(kUn(),CIt)),CZ(a,c),s=0,h=(o=Z0(t.e)).length;s<h;++s)MZ(o[s],a);hon(t,Elt,c),++r}if(e){for(u=new CSn,hon(c,(hWn(),dlt),e.i),hon(u,dlt,e),qCn(u,(kUn(),oIt)),CZ(u,c),s=0,h=(o=Z0(e.g)).length;s<h;++s)SZ(o[s],u);hon(e,Elt,c),++r}return hon(c,(hWn(),Bft),iln(r)),i.c[i.c.length]=c,c}function qBn(){qBn=O,OOt=Pun(Gk(ONt,1),WVn,25,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),AOt=new RegExp("[ \t\n\r\f]+");try{IOt=Pun(Gk(D$t,1),HWn,2015,0,[new vp((s$(),sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",fR((fk(),fk(),rtt))))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm:ss",fR(rtt))),new vp(sdn("yyyy-MM-dd'T'HH:mm",fR(rtt))),new vp(sdn("yyyy-MM-dd",fR(rtt)))])}catch(n){if(!cL(n=lun(n),78))throw Hp(n)}}function GBn(n){var t,i,r,c;if(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=iin(n)<0?1:0,i=n.e,r.length,e.Math.abs(CJ(n.e)),c=new Ik,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>qtt.length;i-=qtt.length)Nq(c,qtt);gR(c,qtt,CJ(i)),oO(c,r.substr(t))}else oO(c,fx(r,t,CJ(i=t-i))),c.a+=".",oO(c,nO(r,CJ(i)));else{for(oO(c,r.substr(t));i<-qtt.length;i+=qtt.length)Nq(c,qtt);gR(c,qtt,CJ(-i))}return c.a}function zBn(n,t,i,r){var c,a,u,o,s,h,f,l,b;return h=(s=XR(new xC(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=W8(n,c=UR(new xC(i.a,i.b),kL(new xC(r.a,r.b),.5))),u=W8(UR(new xC(n.a,n.b),t),c),o=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<u&&a<=o?new xC(n.a,n.b):u<=o?UR(new xC(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?UR(new xC(n.a,n.b),kL(new xC(t.a,t.b),l)):null}function UBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(u=new Wb(n.a);u.a<u.c.c.length;)(a=BB(n0(u),10)).k==(uSn(),Mut)&&((r=BB(mMn(a,Qft),61))==(kUn(),oIt)?a.n.a+=e.a-t.a:r==SIt&&(a.n.b+=e.b-t.b));c=n.d,n.f.a=e.a-c.b-c.c,n.f.b=e.b-c.d-c.a}function XBn(n,t,e){var i,r,c,a,u;if(i=BB(mMn(n,(HXn(),Ndt)),21),e.a>t.a&&(i.Hc((wEn(),WMt))?n.c.a+=(e.a-t.a)/2:i.Hc(QMt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((wEn(),JMt))?n.c.b+=(e.b-t.b)/2:i.Hc(YMt)&&(n.c.b+=e.b-t.b)),BB(mMn(n,(hWn(),Zft)),21).Hc((bDn(),lft))&&(e.a>t.a||e.b>t.b))for(a=new Wb(n.a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&((r=BB(mMn(c,Qft),61))==(kUn(),oIt)?c.n.a+=e.a-t.a:r==SIt&&(c.n.b+=e.b-t.b));u=n.d,n.f.a=e.a-u.b-u.c,n.f.b=e.b-u.d-u.a}function WBn(n){var t,i,r,c,a,u,o,s,h,f;for(s=new Ib(new Cb(xOn(n)).a.vc().Kc());s.a.Ob();){for(r=BB(s.a.Pb(),42),h=0,f=0,h=(o=BB(r.cd(),10)).d.d,f=o.o.b+o.d.a,n.d[o.p]=0,t=o;(c=n.a[t.p])!=o;)i=Mgn(t,c),u=0,u=n.c==(gJ(),nyt)?i.d.n.b+i.d.a.b-i.c.n.b-i.c.a.b:i.c.n.b+i.c.a.b-i.d.n.b-i.d.a.b,a=Gy(n.d[t.p])+u,n.d[c.p]=a,h=e.Math.max(h,c.d.d-a),f=e.Math.max(f,a+c.o.b+c.d.a),t=c;t=o;do{n.d[t.p]=Gy(n.d[t.p])+h,t=n.a[t.p]}while(t!=o);n.b[o.p]=h+f}}function VBn(n){var t,i,r,c,a,u,o,s,h,f,l;for(n.b=!1,f=RQn,o=KQn,l=RQn,s=KQn,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=BB(i.Pb(),266)).a,f=e.Math.min(f,r.c),o=e.Math.max(o,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Wb(t.c);a.a<a.c.c.length;)(c=BB(n0(a),395)).a.a?(u=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,u)):(u=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),o=e.Math.max(o,u));n.a=new xC(o-f,s-l),n.c=new xC(f+n.d.a,l+n.d.b)}function QBn(n,t,e){var i,r,c,a,u,o,s,h;for(h=new Np,c=0,tin(s=new x0(0,e),new asn(0,0,s,e)),r=0,o=new AL(n);o.e!=o.i.gc();)u=BB(kpn(o),33),i=BB(xq(s.a,s.a.c.length-1),187),r+u.g+(0==BB(xq(s.a,0),187).b.c.length?0:e)>t&&(r=0,c+=s.b+e,h.c[h.c.length]=s,tin(s=new x0(c,e),i=new asn(0,s.f,s,e)),r=0),0==i.b.c.length||u.f>=i.o&&u.f<=i.f||.5*i.a<=u.f&&1.5*i.a>=u.f?ybn(i,u):(tin(s,a=new asn(i.s+i.r+e,s.f,s,e)),ybn(a,u)),r=u.i+u.g;return h.c[h.c.length]=s,h}function YBn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new gp(n),t=new So,null==(e=P$t).a.zc(n,e)){for(c=new AL(kY(n));c.e!=c.i.gc();)pX(a,YBn(BB(kpn(c),26)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new eU(FAt,n,21,17)),r=new AL(n.s);r.e!=r.i.gc();)cL(i=BB(kpn(r),170),322)&&f9(t,BB(i,34));chn(t),n.k=new EH(n,(BB(Wtn(QQ((QX(),t$t).o),7),18),t.i),t.g),pX(a,n.k),chn(a),n.a=new NO((BB(Wtn(QQ(t$t.o),4),18),a.i),a.g),P5(n).b&=-2}return n.a}function JBn(n,t,e,i,r,c,a){var u,o,s,h,f;return h=!1,u=dNn(e.q,t.f+t.b-e.q.f),!((f=r-(e.q.e+u-a))<i.g)&&(o=c==n.c.length-1&&f>=(l1(c,n.c.length),BB(n.c[c],200)).e,!((s=cHn(i,f,!1).a)>t.b&&!o)&&((o||s<=t.b)&&(o&&s>t.b?(e.d=s,p9(e,FSn(e,s))):(aEn(e.q,u),e.c=!0),p9(i,r-(e.s+e.r)),Tvn(i,e.q.e+e.q.d,t.f),tin(t,i),n.c.length>c&&(Tkn((l1(c,n.c.length),BB(n.c[c],200)),i),0==(l1(c,n.c.length),BB(n.c[c],200)).a.c.length&&s6(n,c)),h=!0),h))}function ZBn(n,t,e,i){var r,c,a,u,o,s,h;if(h=axn(n.e.Tg(),t),r=0,c=BB(n.g,119),o=null,ZM(),BB(t,66).Oj()){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(a,e)){o=a;break}++r}}else if(null!=e){for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(Nfn(e,a.dd())){o=a;break}++r}}else for(u=0;u<n.i;++u)if(a=c[u],h.rl(a.ak())){if(null==a.dd()){o=a;break}++r}return o&&(mA(n.e)&&(s=t.$j()?new b4(n.e,4,t,e,null,r,!0):LY(n,t.Kj()?2:1,t,e,t.zj(),-1,!0),i?i.Ei(s):i=s),i=TKn(n,o,i)),i}function nHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,o=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+u,d=n.c?gTn(w,a,r,u):r.j,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 1:d=r.j+r.f+u,w=n.c?dTn(d,a,r,u):r.i,l=e.Math.max(s,w+b),h=e.Math.max(o,d+f);break;case 2:w=s+u,d=0,l=s+u+b,h=e.Math.max(o,f);break;case 3:w=0,d=o+u,l=e.Math.max(s,b),h=o+u+f;break;default:throw Hp(new _y("IllegalPlacementOption."))}return new awn(n.a,l,h,t,w,d)}function tHn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if(o=n.d,l=BB(mMn(n,(hWn(),Klt)),15),t=BB(mMn(n,Dft),15),l||t){if(a=Gy(MD(edn(n,(HXn(),ppt)))),u=Gy(MD(edn(n,vpt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),o.d+=h+u}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=BB(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),o.a+=h+u}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,o.b=e.Math.max(o.b,f),o.c=e.Math.max(o.c,f))}}function eHn(n){var t,e,i,r,c,a;for(cA(r=new R0,(Nun(),JTt)),i=new Sb(new Jy(new TT(n,jrn(n,x8(Qtt,sVn,2,0,6,1))).b));i.b<i.d.gc();)Px(i.b<i.d.gc()),e=SD(i.d.Xb(i.c=i.b++)),(c=pGn(lAt,e))&&null!=(a=Zqn(c,(t=zJ(n,e)).je()?t.je().a:t.ge()?""+t.ge().a:t.he()?""+t.he().a:t.Ib()))&&((SN(c.j,(rpn(),sMt))||SN(c.j,hMt))&&son(Ynn(r,UOt),c,a),SN(c.j,uMt)&&son(Ynn(r,_Ot),c,a),SN(c.j,fMt)&&son(Ynn(r,XOt),c,a),SN(c.j,oMt)&&son(Ynn(r,zOt),c,a));return r}function iHn(n,t,e,i){var r,c,a,u,o,s;if(o=axn(n.e.Tg(),t),c=BB(n.g,119),$xn(n.e,t)){for(r=0,u=0;u<n.i;++u)if(a=c[u],o.rl(a.ak())){if(r==e)return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FIn(n,t,u,r,s)),s);++r}throw Hp(new Ay(e9n+e+o8n+r))}for(r=0,u=0;u<n.i;++u){if(a=c[u],o.rl(a.ak()))return ZM(),BB(t,66).Oj()?a:(null!=(s=a.dd())&&i&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(s=FIn(n,t,u,r,s)),s);++r}return t.zj()}function rHn(n,t,e){var i,r,c,a,u,o,s,h;if(r=BB(n.g,119),$xn(n.e,t))return ZM(),BB(t,66).Oj()?new lq(t,n):new xI(t,n);for(s=axn(n.e.Tg(),t),i=0,u=0;u<n.i;++u){if(a=(c=r[u]).ak(),s.rl(a)){if(ZM(),BB(t,66).Oj())return c;if(a==(TOn(),lLt)||a==sLt){for(o=new lN(Bbn(c.dd()));++u<n.i;)((a=(c=r[u]).ak())==lLt||a==sLt)&&oO(o,Bbn(c.dd()));return gK(BB(t.Yj(),148),o.a)}return null!=(h=c.dd())&&e&&cL(t,99)&&0!=(BB(t,18).Bb&BQn)&&(h=FIn(n,t,u,i,h)),h}++i}return t.zj()}function cHn(n,t,i){var r,c,a,u,o,s,h,f,l,b;for(a=0,u=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c=x8(Ant,HWn,1,0,5,1),WB(n.n,new RJ(n.s,n.t,n.i))),o=0,f=new Wb(n.b);f.a<f.c.c.length;)a+(h=BB(n0(f),33)).g+(o>0?n.i:0)>t&&s>0&&(a=0,u+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,WB(n.n,new RJ(n.s,u,n.i))),o=0),b+=h.g+(o>0?n.i:0),s=e.Math.max(s,h.f),i&&smn(BB(xq(n.n,l),211),h),a+=h.g+(o>0?n.i:0),++o;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,yyn(n.j)),new UV(n.s,n.t,c,r)}function aHn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;if($T(),SU(n,"src"),SU(e,"dest"),l=tsn(n),o=tsn(e),pH(0!=(4&l.i),"srcType is not an array"),pH(0!=(4&o.i),"destType is not an array"),f=l.c,a=o.c,pH(0!=(1&f.i)?f==a:0==(1&a.i),"Array types don't match"),b=n.length,s=e.length,t<0||i<0||r<0||t+r>b||i+r>s)throw Hp(new fv);if(0==(1&f.i)&&l!=o)if(h=een(n),c=een(e),GI(n)===GI(e)&&t<i)for(t+=r,u=i+r;u-- >i;)$X(c,u,h[--t]);else for(u=i+r;i<u;)$X(c,i++,h[t++]);else r>0&&_Cn(n,t,e,i,r,!0)}function uHn(){uHn=O,ret=Pun(Gk(ANt,1),hQn,25,15,[_Vn,1162261467,OVn,1220703125,362797056,1977326743,OVn,387420489,AQn,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,OVn,1291467969,1544804416,1838265625,60466176]),cet=Pun(Gk(ANt,1),hQn,25,15,[-1,-1,31,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])}function oHn(n){var t,e,i,r,c,a,u;for(i=new Wb(n.b);i.a<i.c.c.length;)for(c=new Wb(a0(BB(n0(i),29).a));c.a<c.c.c.length;)if(Znn(r=BB(n0(c),10))&&!(e=BB(mMn(r,(hWn(),Rft)),305)).g&&e.d)for(t=e,u=e.d;u;)eRn(u.i,u.k,!1,!0),A7(t.a),A7(u.i),A7(u.k),A7(u.b),MZ(u.c,t.c.d),MZ(t.c,null),PZ(t.a,null),PZ(u.i,null),PZ(u.k,null),PZ(u.b,null),(a=new v3(t.i,u.a,t.e,u.j,u.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=u.c,a.g=t.g,a.d=u.d,hon(t.i,Rft,a),hon(u.a,Rft,a),u=u.d,t=a}function sHn(n,t){var e,i,r,c,a;if(a=BB(t,136),T$n(n),T$n(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=x8(ANt,hQn,25,a.b.length,15,1),void aHn(a.b,0,n.b,0,a.b.length);for(c=x8(ANt,hQn,25,n.b.length+a.b.length,15,1),e=0,i=0,r=0;e<n.b.length||i<a.b.length;)e>=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]<n.b[e]||a.b[i]===n.b[e]&&a.b[i+1]<n.b[e+1]?(c[r++]=a.b[i++],c[r++]=a.b[i++]):(c[r++]=n.b[e++],c[r++]=n.b[e++]);n.b=c}}function hHn(n,t){var e,i,r,c,a,u,o,s,h,f;return e=qy(TD(mMn(n,(hWn(),slt)))),u=qy(TD(mMn(t,slt))),i=BB(mMn(n,hlt),11),o=BB(mMn(t,hlt),11),r=BB(mMn(n,flt),11),s=BB(mMn(t,flt),11),h=!!i&&i==o,f=!!r&&r==s,e||u?(c=(!qy(TD(mMn(n,slt)))||qy(TD(mMn(n,olt))))&&(!qy(TD(mMn(t,slt)))||qy(TD(mMn(t,olt)))),a=!(qy(TD(mMn(n,slt)))&&qy(TD(mMn(n,olt)))||qy(TD(mMn(t,slt)))&&qy(TD(mMn(t,olt)))),new R_(h&&c||f&&a,h,f)):new R_(BB(n0(new Wb(n.j)),11).p==BB(n0(new Wb(t.j)),11).p,h,f)}function fHn(n){var t,i,r,c,a,u,o,s;for(r=0,i=0,s=new YT,t=0,o=new Wb(n.n);o.a<o.c.c.length;)0==(u=BB(n0(o),211)).c.c.length?r5(s,u,s.c.b,s.c):(r=e.Math.max(r,u.d),i+=u.a+(t>0?n.i:0)),++t;for(nwn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=RQn,n.p=RQn,a=new Wb(n.b);a.a<a.c.c.length;)c=BB(n0(a),33),n.p=e.Math.min(n.p,c.g),n.g=e.Math.max(n.g,c.g),n.f=e.Math.max(n.f,c.f),n.o=e.Math.min(n.o,c.f),n.e+=c.f+n.i;n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),yyn(n.j)}function lHn(n){var t,e,i,r;return 0!=(64&n.Db)?Yln(n):(t=new lN(V5n),(i=n.k)?oO(oO((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new eU(zOt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new eU(zOt,n,1,7)),BB(Wtn(n.n,0),137)).a)||oO(oO((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new hK(KOt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",oO(t,JL(new mk,new AL(n.b))),e&&(t.a+="]"),t.a+=e1n,e&&(t.a+="["),oO(t,JL(new mk,new AL(n.c))),e&&(t.a+="]"),t.a)}function bHn(n,t){var e,i,r,c,a,u,o;if(n.a){if(o=null,null!=(u=n.a.ne())?t.a+=""+u:null!=(a=n.a.Dj())&&(-1!=(c=GO(a,YTn(91)))?(o=a.substr(c),t.a+=""+fx(null==a?zWn:(kW(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new AL(n.d);i.e!=i.i.gc();)e=BB(kpn(i),87),r?r=!1:t.a+=FWn,bHn(e,t);t.a+=">"}null!=o&&(t.a+=""+o)}else n.e?null!=(u=n.e.zb)&&(t.a+=""+u):(t.a+="?",n.b?(t.a+=" super ",bHn(n.b,t)):n.f&&(t.a+=" extends ",bHn(n.f,t)))}function wHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(y=n.c,k=t.c,e=E7(y.a,n,0),i=E7(k.a,t,0),v=BB(xwn(n,(ain(),Hvt)).Kc().Pb(),11),T=BB(xwn(n,qvt).Kc().Pb(),11),m=BB(xwn(t,Hvt).Kc().Pb(),11),M=BB(xwn(t,qvt).Kc().Pb(),11),g=Z0(v.e),j=Z0(T.g),p=Z0(m.e),E=Z0(M.g),Qyn(n,i,k),s=0,b=(c=p).length;s<b;++s)MZ(c[s],v);for(h=0,w=(a=E).length;h<w;++h)SZ(a[h],T);for(Qyn(t,e,y),f=0,d=(u=g).length;f<d;++f)MZ(u[f],m);for(o=0,l=(r=j).length;o<l;++o)SZ(r[o],M)}function dHn(n,t,e,i){var r,c,a,u,o,s;if(c=Wln(i),!qy(TD(mMn(i,(HXn(),Igt))))&&!qy(TD(mMn(n,bgt)))||vA(BB(mMn(n,ept),98)))switch(CZ(u=new CSn,n),t?((s=u.n).a=t.a-n.n.a,s.b=t.b-n.n.b,WSn(s,0,0,n.o.a,n.o.b),qCn(u,z_n(u,c))):(r=hwn(c),qCn(u,e==(ain(),qvt)?r:Tln(r))),a=BB(mMn(i,(hWn(),Zft)),21),o=u.j,c.g){case 2:case 1:(o==(kUn(),sIt)||o==SIt)&&a.Fc((bDn(),gft));break;case 4:case 3:(o==(kUn(),oIt)||o==CIt)&&a.Fc((bDn(),gft))}else r=hwn(c),u=R_n(n,e,e==(ain(),qvt)?r:Tln(r));return u}function gHn(n,t,i){var r,c,a,u,o,s,h;return e.Math.abs(t.s-t.c)<lZn||e.Math.abs(i.s-i.c)<lZn?0:(r=WNn(n,t.j,i.e),c=WNn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new zZ((O6(),Tyt),i,t,1),++a),-1==c&&(new zZ((O6(),Tyt),t,i,1),++a)):(u=Tfn(t.j,i.s,i.c),u+=Tfn(i.e,t.s,t.c),o=Tfn(i.j,t.s,t.c),(s=r+16*u)<(h=c+16*(o+=Tfn(t.e,i.s,i.c)))?new zZ((O6(),Myt),t,i,h-s):s>h?new zZ((O6(),Myt),i,t,s-h):s>0&&h>0&&(new zZ((O6(),Myt),t,i,0),new zZ(Myt,i,t,0))),a)}function pHn(n,t){var i,r,c,a,u;for(u=new usn(new Pb(n.f.b).a);u.b;){if(c=BB((a=ten(u)).cd(),594),1==t){if(c.gf()!=(Ffn(),HPt)&&c.gf()!=KPt)continue}else if(c.gf()!=(Ffn(),_Pt)&&c.gf()!=FPt)continue;switch(r=BB(BB(a.dd(),46).b,81),i=BB(BB(a.dd(),46).a,189).c,c.gf().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 vHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(o=x8(ANt,hQn,25,t.b.c.length,15,1),h=x8($ut,$Vn,267,t.b.c.length,0,1),s=x8(Out,a1n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,u=new Wb((f=l[b]).e);u.a<u.c.c.length;)++o[r=tA((c=BB(n0(u),10)).c)],d=Gy(MD(mMn(t,(HXn(),ypt)))),o[r]>0&&s[r]&&(d=K$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Wb(f.e);a.a<a.c.c.length;)(c=BB(n0(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[E7(i.b.b,i,0)]=c.k,s[E7(i.b.b,i,0)]=c}}function mHn(n,t){var e,i,r,c,a,u,o,s,f,l,b;for(i=new oz(ZL(dLn(t).a.Kc(),new h));dAn(i);)cL(Wtn((!(e=BB(U5(i),79)).b&&(e.b=new hK(KOt,e,4,7)),e.b),0),186)||(o=PTn(BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82)),nAn(e)||(a=t.i+t.g/2,u=t.j+t.f/2,f=o.i+o.g/2,l=o.j+o.f/2,(b=new Gj).a=f-a,b.b=l-u,Ukn(c=new xC(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,u=l-b.b,Ukn(s=new xC(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=u+b.b,Ien(r=cDn(e,!0,!0),a),Aen(r,u),Ten(r,f),Oen(r,l),mHn(n,o)))}function yHn(n){NM(n,new MTn(vj(wj(pj(gj(new du,R4n),"ELK SPOrE Compaction"),"ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree."),new tu))),u2(n,R4n,K4n,mpn(kTt)),u2(n,R4n,_4n,mpn(vTt)),u2(n,R4n,F4n,mpn(pTt)),u2(n,R4n,B4n,mpn(dTt)),u2(n,R4n,H4n,mpn(gTt)),u2(n,R4n,QJn,wTt),u2(n,R4n,vZn,8),u2(n,R4n,q4n,mpn(yTt)),u2(n,R4n,G4n,mpn(hTt)),u2(n,R4n,z4n,mpn(fTt)),u2(n,R4n,X2n,(hN(),!1))}function kHn(n,t){var i,r,c,a,u,o,s,h,f,l;for(OTn(t,"Simple node placement",1),l=BB(mMn(n,(hWn(),Alt)),304),o=0,a=new Wb(n.b);a.a<a.c.c.length;){for((u=(r=BB(n0(a),29)).c).b=0,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(u.b+=Idn(s,i,l.c)),u.b+=s.d.d+s.o.b+s.d.a,i=s;o=e.Math.max(o,u.b)}for(c=new Wb(n.b);c.a<c.c.c.length;)for(f=(o-(u=(r=BB(n0(c),29)).c).b)/2,i=null,h=new Wb(r.a);h.a<h.c.c.length;)s=BB(n0(h),10),i&&(f+=Idn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;HSn(t)}function jHn(n,t,e,i){var r,c,a,u,o,s,h,f;if(0==i.gc())return!1;if(ZM(),a=(o=BB(t,66).Oj())?i:new gtn(i.gc()),$xn(n.e,t)){if(t.hi())for(h=i.Kc();h.Ob();)UFn(n,t,s=h.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(c=Z3(t,s),a.Fc(c));else if(!o)for(h=i.Kc();h.Ob();)c=Z3(t,s=h.Pb()),a.Fc(c)}else{for(f=axn(n.e.Tg(),t),r=BB(n.g,119),u=0;u<n.i;++u)if(c=r[u],f.rl(c.ak()))throw Hp(new _y(I7n));if(i.gc()>1)throw Hp(new _y(I7n));o||(c=Z3(t,i.Kc().Pb()),a.Fc(c))}return oon(n,EPn(n,t,e),a)}function EHn(n,t){var e,i,r,c;for(Qtn(t.b.j),JT($V(new Rq(null,new w1(t.d,16)),new cc),new ac),c=new Wb(t.d);c.a<c.c.c.length;){switch((r=BB(n0(c),101)).e.g){case 0:e=BB(xq(r.j,0),113).d.j,Gl(r,BB($N(Oz(BB(h6(r.k,e),15).Oc(),Qst)),113)),ql(r,BB($N(Iz(BB(h6(r.k,e),15).Oc(),Qst)),113));break;case 1:i=Hyn(r),Gl(r,BB($N(Oz(BB(h6(r.k,i[0]),15).Oc(),Qst)),113)),ql(r,BB($N(Iz(BB(h6(r.k,i[1]),15).Oc(),Qst)),113));break;case 2:VPn(n,r);break;case 3:KNn(r);break;case 4:GNn(n,r)}Vtn(r)}n.a=null}function THn(n,t,e){var i,r,c,a,u,o,s,h;return i=n.a.o==(oZ(),cyt)?RQn:KQn,!(u=cFn(n,new aC(t,e))).a&&u.c?(DH(n.d,u),i):u.a?(r=u.a.c,o=u.a.d,e?(s=n.a.c==(gJ(),tyt)?o:r,c=n.a.c==tyt?r:o,a=n.a.g[c.i.p],h=Gy(n.a.p[a.p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(gJ(),nyt)?o:r,c=n.a.c==nyt?r:o,h=Gy(n.a.p[n.a.g[c.i.p].p])+Gy(n.a.d[c.i.p])+c.n.b+c.a.b-Gy(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(hN(),!0),n.a.n[n.a.g[o.i.p].p]=!0,h):i}function MHn(n,t,e){var i,r,c,a,u,o,s;if($xn(n.e,t))ZM(),AOn((u=BB(t,66).Oj()?new lq(t,n):new xI(t,n)).c,u.b),Z$(u,BB(e,14));else{for(s=axn(n.e.Tg(),t),i=BB(n.g,119),c=0;c<n.i;++c)if(r=i[c].ak(),s.rl(r)){if(r==(TOn(),lLt)||r==sLt){for(a=c,(o=Ovn(n,t,e))?fDn(n,c):++c;c<n.i;)(r=i[c].ak())==lLt||r==sLt?fDn(n,c):++c;o||BB(ovn(n,a,Z3(t,e)),72)}else Ovn(n,t,e)?fDn(n,c):BB(ovn(n,c,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e))),72);return}Ovn(n,t,e)||f9(n,(ZM(),BB(t,66).Oj()?BB(e,72):Z3(t,e)))}}function SHn(n,t,e){var i,r,c,a,u,o,s,h;return Nfn(e,n.b)||(n.b=e,c=new Jn,a=BB(P4($V(new Rq(null,new w1(e.f,16)),c),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((Hpn(),Brt)),i=a.Hc(Hrt),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(Frt),i=a.Hc(qrt),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=BB(n.a.Ce(t,e),46),o=BB(h.a,19).a,s=BB(h.b,19).a,u=!1,o<0?n.c||(u=!0):n.e||(u=!0),s<0?n.d||(u=!0):n.f||(u=!0),u?SHn(n,h,e):h}function PHn(n){var t,i,r,c;c=n.o,qD(),n.A.dc()||Nfn(n.A,$rt)?t=c.b:(t=MIn(n.f),n.A.Hc((mdn(),RIt))&&!n.B.Hc((n_n(),XIt))&&(t=e.Math.max(t,MIn(BB(oV(n.p,(kUn(),oIt)),244))),t=e.Math.max(t,MIn(BB(oV(n.p,CIt),244)))),(i=oan(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(KIt)&&(n.q!=(QEn(),WCt)&&n.q!=XCt||(t=e.Math.max(t,XH(BB(oV(n.b,(kUn(),oIt)),124))),t=e.Math.max(t,XH(BB(oV(n.b,CIt),124)))))),qy(TD(n.e.yf().We((sWn(),FSt))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,GFn(n.f)}function CHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)BB(a.Pb(),225).Of(h,t);for(f=0;f<t[h].length;f++){for(u=n.Kc();u.Ob();)BB(u.Pb(),225).Pf(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(o=n.Kc();o.Ob();)BB(o.Pb(),225).Qf(h,f,l,t);for(l1(l,b.c.length),e=0,r=new m6(BB(b.c[l],11).b);y$(r.a)||y$(r.b);)for(i=BB(y$(r.a)?n0(r.a):n0(r.b),17),s=n.Kc();s.Ob();)BB(s.Pb(),225).Nf(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)BB(c.Pb(),225).Mf()}function IHn(n,t){var e,i,r,c,a;for(n.b=Gy(MD(mMn(t,(HXn(),kpt)))),n.c=Gy(MD(mMn(t,Tpt))),n.d=BB(mMn(t,rgt),336),n.a=BB(mMn(t,Pdt),275),fmn(t),r=(c=BB(P4(AV(AV(wnn(wnn(new Rq(null,new w1(t.b,16)),new ye),new ke),new je),new Ee),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15)).Kc();r.Ob();)e=BB(r.Pb(),17),BB(mMn(e,(hWn(),Nlt)),15).Jc(new ed(n)),hon(e,Nlt,null);for(i=c.Kc();i.Ob();)e=BB(i.Pb(),17),a=BB(mMn(e,(hWn(),xlt)),17),FXn(n,BB(mMn(e,$lt),15),a),hon(e,$lt,null)}function OHn(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 AHn(n){var t,e,i,r,c;if(n.k!=(uSn(),Cut))return!1;if(n.j.c.length<=1)return!1;if(BB(mMn(n,(HXn(),ept)),98)==(QEn(),XCt))return!1;if(bvn(),(i=(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))==lvt)return!1;if(i!=fvt&&i!=hvt){if(r=Gy(MD(edn(n,Npt))),!(t=BB(mMn(n,Lpt),142))&&(t=new HR(r,r,r,r)),c=abn(n,(kUn(),CIt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=abn(n,oIt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function $Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(a=n.e,o=t.e,0==a)return t;if(0==o)return n;if((c=n.d)+(u=t.d)==2)return e=e0(n.a[0],UQn),i=e0(t.a[0],UQn),a==o?(w=dG(h=rbn(e,i)),0==(b=dG(jz(h,32)))?new X6(a,w):new lU(a,2,Pun(Gk(ANt,1),hQn,25,15,[w,b]))):npn(a<0?ibn(i,e):ibn(e,i));if(a==o)l=a,f=c>=u?N8(n.a,c,t.a,u):N8(t.a,u,n.a,c);else{if(0==(r=c!=u?c>u?1:-1:Msn(n.a,t.a,c)))return ODn(),eet;1==r?(l=a,f=d6(n.a,c,t.a,u)):(l=o,f=d6(t.a,u,n.a,c))}return X0(s=new lU(l,f.length,f)),s}function LHn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w;return l=qy(TD(mMn(t,(HXn(),Ogt)))),b=null,a==(ain(),Hvt)&&r.c.i==i?b=r.c:a==qvt&&r.d.i==i&&(b=r.d),(h=u)&&l&&!b?(WB(h.e,r),w=e.Math.max(Gy(MD(mMn(h.d,agt))),Gy(MD(mMn(r,agt)))),hon(h.d,agt,w)):(kUn(),f=PIt,b?f=b.j:vA(BB(mMn(i,ept),98))&&(f=a==Hvt?CIt:oIt),s=xHn(n,t,i,a,f,r),o=W5((vW(i),r)),a==Hvt?(SZ(o,BB(xq(s.j,0),11)),MZ(o,c)):(SZ(o,c),MZ(o,BB(xq(s.j,0),11))),h=new zfn(r,o,s,BB(mMn(s,(hWn(),dlt)),11),a,!b)),JIn(n.a,r,new L_(h.d,t,a)),h}function NHn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=null,n.d&&(h=BB(SJ(n.d,t),138)),!h){if(f=(c=n.a.Mh()).i,!n.d||NT(n.d)!=f){for(o=new xp,n.d&&Tcn(o,n.d),u=s=o.f.c+o.g.c;u<f;++u)i=BB(Wtn(c,u),138),(e=BB(null==(r=Cfn(n.e,i).ne())?jCn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jCn(o.f,null,e):ubn(o.g,r,e));if(o.f.c+o.g.c!=f)for(a=0;a<s;++a)i=BB(Wtn(c,a),138),(e=BB(null==(r=Cfn(n.e,i).ne())?jCn(o.f,null,i):ubn(o.g,r,i),138))&&e!=i&&(null==r?jCn(o.f,null,e):ubn(o.g,r,e));n.d=o}h=BB(SJ(n.d,t),138)}return h}function xHn(n,t,e,i,r,c){var a,u,o,s,h,f;return a=null,s=i==(ain(),Hvt)?c.c:c.d,o=Wln(t),s.i==e?(a=BB(RX(n.b,s),10))||(hon(a=bXn(s,BB(mMn(e,(HXn(),ept)),98),r,HKn(s),null,s.n,s.o,o,t),(hWn(),dlt),s),VW(n.b,s,a)):(u=AEn(a=bXn((h=new Zn,f=Gy(MD(mMn(t,(HXn(),ypt))))/2,son(h,tpt,f),h),BB(mMn(e,ept),98),r,i==Hvt?-1:1,null,new Gj,new xC(0,0),o,t),e,i),hon(a,(hWn(),dlt),u),VW(n.b,u,a)),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)),vA(BB(mMn(t,(HXn(),ept)),98))?hon(t,ept,(QEn(),VCt)):hon(t,ept,(QEn(),QCt)),a}function DHn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;OTn(t,"Orthogonal edge routing",1),s=Gy(MD(mMn(n,(HXn(),Apt)))),e=Gy(MD(mMn(n,kpt))),i=Gy(MD(mMn(n,Tpt))),l=new fX(0,e),d=0,a=new M2(n.b,0),u=null,h=null,o=null,f=null;do{f=(h=a.b<a.d.gc()?(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),29)):null)?h.a:null,u&&(Tqn(u,d),d+=u.c.a),w=AGn(l,n,o,f,u?d+i:d),r=!u||VI(o,(dxn(),jyt)),c=!h||VI(f,(dxn(),jyt)),w>0?(b=(w-1)*e,u&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),u=h,o=f}while(h);n.f.a=d,HSn(t)}function RHn(){var n;RHn=O,EAt=new Sm,kAt=x8(Qtt,sVn,2,0,6,1),SAt=i0(Bun(33,58),Bun(1,26)),PAt=i0(Bun(97,122),Bun(65,90)),CAt=Bun(48,57),TAt=i0(SAt,0),MAt=i0(PAt,CAt),IAt=i0(i0(0,Bun(1,6)),Bun(33,38)),OAt=i0(i0(CAt,Bun(65,70)),Bun(97,102)),xAt=i0(TAt,dpn("-_.!~*'()")),DAt=i0(MAt,Xwn("-_.!~*'()")),dpn(u9n),Xwn(u9n),i0(xAt,dpn(";:@&=+$,")),i0(DAt,Xwn(";:@&=+$,")),AAt=dpn(":/?#"),$At=Xwn(":/?#"),LAt=dpn("/?#"),NAt=Xwn("/?#"),(n=new Rv).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),SQ(),jAt=new Ak(n)}function KHn(n,t){var e,i,r,c,a;if(hon(t,(qqn(),okt),0),r=BB(mMn(t,akt),86),0==t.d.b)r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a)):hon(t,fkt,0);else{for(e=new wg(spn(new bg(t).a.d,0));EE(e.a);)KHn(n,BB(b3(e.a),188).c);i=BB(iL(new wg(spn(new bg(t).a.d,0))),86),c=(Gy(MD(mMn(BB(TN(new wg(spn(new bg(t).a.d,0))),86),fkt)))+Gy(MD(mMn(i,fkt))))/2,r?(a=Gy(MD(mMn(r,fkt)))+n.a+E5(r,t),hon(t,fkt,a),hon(t,okt,Gy(MD(mMn(t,fkt)))-c),IGn(n,t)):hon(t,fkt,c)}}function _Hn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;u=0,b=0,o=TJ(n.f,n.f.length),c=n.d,a=n.i,i=n.a,r=n.b;do{for(l=0,s=new Wb(n.p);s.a<s.c.c.length;)f=OGn(n,BB(n0(s),10)),e=!0,(n.q==(sNn(),Tvt)||n.q==Pvt)&&(e=qy(TD(f.b))),BB(f.a,19).a<0&&e?(++l,o=TJ(n.f,n.f.length),n.d=n.d+BB(f.a,19).a,b+=c-n.d,c=n.d+BB(f.a,19).a,a=n.i,i=a0(n.a),r=a0(n.b)):(n.f=TJ(o,o.length),n.d=c,n.a=(yX(i),i?new t_(i):HB(new Wb(i))),n.b=(yX(r),r?new t_(r):HB(new Wb(r))),n.i=a);++u,h=0!=l&&qy(TD(t.Kb(new rI(iln(b),iln(u)))))}while(h)}function FHn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return a=n.f,l=t.f,u=a==(YLn(),xEt)||a==REt,o=a==DEt||a==KEt,b=l==DEt||l==KEt,s=a==DEt||a==xEt,w=l==DEt||l==xEt,!u||l!=xEt&&l!=REt?o&&b?n.f==KEt?n:t:s&&w?(a==DEt?(f=n,h=t):(f=t,h=n),d=i.j+i.f,g=f.e+r.f,p=e.Math.max(d,g)-e.Math.min(i.j,f.e),c=(f.d+r.g-i.i)*p,v=i.i+i.g,m=h.d+r.g,c<=(e.Math.max(v,m)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==DEt?n:t:n.f==xEt?n:t):n:n.f==REt?n:t}function BHn(n){var t,e,i,r,c,a,u,o,s,h;for(s=n.e.a.c.length,c=new Wb(n.e.a);c.a<c.c.c.length;)BB(n0(c),121).j=!1;for(n.i=x8(ANt,hQn,25,s,15,1),n.g=x8(ANt,hQn,25,s,15,1),n.n=new Np,r=0,h=new Np,u=new Wb(n.e.a);u.a<u.c.c.length;)(a=BB(n0(u),121)).d=r++,0==a.b.a.c.length&&WB(n.n,a),gun(h,a.g);for(t=0,i=new Wb(h);i.a<i.c.c.length;)(e=BB(n0(i),213)).c=t++,e.f=!1;o=h.c.length,null==n.b||n.b.length<o?(n.b=x8(xNt,qQn,25,o,15,1),n.c=x8($Nt,ZYn,25,o,16,1)):nk(n.c),n.d=h,n.p=new LN(etn(n.d.c.length)),n.j=1}function HHn(n,t){var e,i,r,c,a,u,o,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=BB(mMn(n.f,(rkn(),vat)),379),n.g=BB(mMn(n.f,jat),19).a,n.e=Gy(MD(mMn(n.f,mat))),n.c=Gy(MD(mMn(n.f,pat))),cX(n.b),r=new Wb(n.f.c);r.a<r.c.c.length;)i=BB(n0(r),282),yKn(n.b,i.c,i,null),yKn(n.b,i.d,i,null);for(u=n.f.e.c.length,n.a=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),s=new Wb(n.f.e);s.a<s.c.c.length;)CBn(n,o=BB(n0(s),144),n.a[o.b]);for(n.i=kq(xNt,[sVn,qQn],[104,25],15,[u,u],2),c=0;c<u;++c)for(a=0;a<u;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function qHn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r<n.b.length;){for(t!=r?(n.b[t]=n.b[r++],n.b[t+1]=n.b[r++]):r+=2,e=n.b[t+1];r<n.b.length&&!(e+1<n.b[r]);)if(e+1==n.b[r])n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2;else if(e>=n.b[r+1])r+=2;else{if(!(e<n.b[r+1]))throw Hp(new dy("Token#compactRanges(): Internel Error: ["+n.b[t]+","+n.b[t+1]+"] ["+n.b[r]+","+n.b[r+1]+"]"));n.b[t+1]=n.b[r+1],e=n.b[t+1],r+=2}t+=2}t!=n.b.length&&(i=x8(ANt,hQn,25,t,15,1),aHn(n.b,0,i,0,t),n.b=i),n.a=!0}}function GHn(n,t){var e,i,r,c,a,u,o;for(a=gz(n.a).Kc();a.Ob();){if((c=BB(a.Pb(),17)).b.c.length>0)for(i=new t_(BB(h6(n.a,c),21)),SQ(),m$(i,new _w(t)),r=new M2(c.b,0);r.b<r.d.gc();){switch(Px(r.b<r.d.gc()),e=BB(r.d.Xb(r.c=r.b++),70),u=-1,BB(mMn(e,(HXn(),Ydt)),272).g){case 1:u=i.c.length-1;break;case 0:u=Jjn(i);break;case 2:u=0}-1!=u&&(l1(u,i.c.length),WB((o=BB(i.c[u],243)).b.b,e),BB(mMn(vW(o.b.c.i),(hWn(),Zft)),21).Fc((bDn(),fft)),BB(mMn(vW(o.b.c.i),Zft),21).Fc(sft),fW(r),hon(e,vlt,c))}SZ(c,null),MZ(c,null)}}function zHn(n,t){var e,i,r,c;return e=new _n,1==(r=2==(r=(i=BB(P4($V(new Rq(null,new w1(n.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Xet),Uet]))),21)).gc())?1:0)&&QI(ldn(BB(P4(AV(i.Lc(),new Fn),Wcn(jgn(0),new en)),162).a,2),0)&&(r=0),1==(c=2==(c=(i=BB(P4($V(new Rq(null,new w1(t.f,16)),e),x7(new Q,new Y,new cn,new an,Pun(Gk(nit,1),$Vn,132,0,[Xet,Uet]))),21)).gc())?1:0)&&QI(ldn(BB(P4(AV(i.Lc(),new Bn),Wcn(jgn(0),new en)),162).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function UHn(n){var t,e,i,r,c,a,u,o,s,h,f;if(o=new Np,!Lx(n,(hWn(),Wft)))return o;for(i=BB(mMn(n,Wft),15).Kc();i.Ob();)dqn(t=BB(i.Pb(),10),n),o.c[o.c.length]=t;for(r=new Wb(n.b);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),29).a);a.a<a.c.c.length;)(c=BB(n0(a),10)).k==(uSn(),Mut)&&(u=BB(mMn(c,Vft),10))&&(CZ(s=new CSn,c),qCn(s,BB(mMn(c,Qft),61)),h=BB(xq(u.j,0),11),SZ(f=new wY,s),MZ(f,h));for(e=new Wb(o);e.a<e.c.c.length;)PZ(t=BB(n0(e),10),BB(xq(n.b,n.b.c.length-1),29));return o}function XHn(n){var t,e,i,r,c,a,u,o,s,h,f,l;for(c=qy(TD(ZAn(t=WJ(n),(HXn(),wgt)))),h=0,r=0,s=new AL((!n.e&&(n.e=new hK(_Ot,n,7,4)),n.e));s.e!=s.i.gc();)a=(u=QIn(o=BB(kpn(s),79)))&&c&&qy(TD(ZAn(o,dgt))),l=PTn(BB(Wtn((!o.c&&(o.c=new hK(KOt,o,5,8)),o.c),0),82)),u&&a?++r:u&&!a?++h:JJ(l)==t||l==t?++r:++h;for(i=new AL((!n.d&&(n.d=new hK(_Ot,n,8,5)),n.d));i.e!=i.i.gc();)a=(u=QIn(e=BB(kpn(i),79)))&&c&&qy(TD(ZAn(e,dgt))),f=PTn(BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),u&&a?++h:u&&!a?++r:JJ(f)==t||f==t?++h:++r;return h-r}function WHn(n,t){var e,i,r,c,a,u,o,s,h;if(OTn(t,"Edge splitting",1),n.b.c.length<=2)HSn(t);else{for(Px((c=new M2(n.b,0)).b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29);c.b<c.d.gc();)for(r=a,Px(c.b<c.d.gc()),a=BB(c.d.Xb(c.c=c.b++),29),u=new Wb(r.a);u.a<u.c.c.length;)for(o=new Wb(BB(n0(u),10).j);o.a<o.c.c.length;)for(i=new Wb(BB(n0(o),11).g);i.a<i.c.c.length;)(s=(e=BB(n0(i),17)).d.i.c)!=r&&s!=a&&zxn(e,(Bl(h=new $vn(n),(uSn(),Put)),hon(h,(hWn(),dlt),e),hon(h,(HXn(),ept),(QEn(),XCt)),PZ(h,a),h));HSn(t)}}function VHn(n,t){var e,i,r,c,a,u,o,s,h;if((a=null!=t.p&&!t.b)||OTn(t,aZn,1),c=1/(e=BB(mMn(n,(hWn(),Mlt)),15)).gc(),t.n)for(OH(t,"ELK Layered uses the following "+e.gc()+" modules:"),h=0,s=e.Kc();s.Ob();)OH(t," Slot "+(h<10?"0":"")+h+++": "+nE(tsn(BB(s.Pb(),51))));for(o=e.Kc();o.Ob();)BB(o.Pb(),51).pf(n,mcn(t,c));for(r=new Wb(n.b);r.a<r.c.c.length;)i=BB(n0(r),29),gun(n.a,i.a),i.a.c=x8(Ant,HWn,1,0,5,1);for(u=new Wb(n.a);u.a<u.c.c.length;)PZ(BB(n0(u),10),null);n.b.c=x8(Ant,HWn,1,0,5,1),a||HSn(t)}function QHn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;r=Gy(MD(mMn(t,(HXn(),Dgt)))),l=4,c=3,j=20/(k=BB(mMn(t,xpt),19).a),b=!1,s=0,u=DWn;do{for(a=1!=s,f=0!=s,E=0,v=0,y=(g=n.a).length;v<y;++v)(w=g[v]).f=null,Bzn(n,w,a,f,r),E+=e.Math.abs(w.a);do{o=U_n(n,t)}while(o);for(p=0,m=(d=n.a).length;p<m;++p)if(0!=(i=wU(w=d[p]).a))for(h=new Wb(w.e);h.a<h.c.c.length;)BB(n0(h),10).n.b+=i;0==s||1==s?--l<=0&&(E<u||-l>k)?(s=2,u=DWn):0==s?(s=1,u=E):(s=0,u=E):(b=E>=u||u-E<j,u=E,b&&--c)}while(!(b&&c<=0))}function YHn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(w=new xp,c=n.a.ec().Kc();c.Ob();)VW(w,i=BB(c.Pb(),168),e.Je(i));for(yX(n),m$(a=n?new t_(n):HB(n.a.ec().Kc()),new Ew(w)),u=S4(a),o=new C$(t),jCn((b=new xp).f,t,o);0!=u.a.gc();){for(s=null,h=null,f=null,r=u.a.ec().Kc();r.Ob();)if(i=BB(r.Pb(),168),Gy(MD(qI(AY(w.f,i))))<=RQn){if(hU(b,i.a)&&!hU(b,i.b)){h=i.b,f=i.a,s=i;break}if(hU(b,i.b)&&!hU(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new C$(h),WB(BB(qI(AY(b.f,f)),221).a,l),jCn(b.f,h,l),u.a.Bc(s)}return o}function JHn(n,t,e){var i,r,c,a,u,o,s,h;for(OTn(e,"Depth-first cycle removal",1),o=(s=t.a).c.length,n.c=new Np,n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,o,16,1),n.b=new Np,c=0,u=new Wb(s);u.a<u.c.c.length;)(a=BB(n0(u),10)).p=c,h3(fbn(a))&&WB(n.c,a),++c;for(h=new Wb(n.c);h.a<h.c.c.length;)GPn(n,BB(n0(h),10));for(r=0;r<o;r++)n.d[r]||(l1(r,s.c.length),GPn(n,BB(s.c[r],10)));for(i=new Wb(n.b);i.a<i.c.c.length;)tBn(BB(n0(i),17),!0),hon(t,(hWn(),qft),(hN(),!0));n.c=null,n.d=null,n.a=null,n.b=null,HSn(e)}function ZHn(n,t){var e,i,r,c,a,u,o;for(n.a.c=x8(Ant,HWn,1,0,5,1),i=spn(t.b,0);i.b!=i.d.c;)0==(e=BB(b3(i),86)).b.b&&(hon(e,(qqn(),dkt),(hN(),!0)),WB(n.a,e));switch(n.a.c.length){case 0:hon(r=new csn(0,t,"DUMMY_ROOT"),(qqn(),dkt),(hN(),!0)),hon(r,ekt,!0),DH(t.b,r);break;case 1:break;default:for(c=new csn(0,t,"SUPER_ROOT"),u=new Wb(n.a);u.a<u.c.c.length;)hon(o=new UQ(c,a=BB(n0(u),86)),(qqn(),ekt),(hN(),!0)),DH(c.a.a,o),DH(c.d,o),DH(a.b,o),hon(a,dkt,!1);hon(c,(qqn(),dkt),(hN(),!0)),hon(c,ekt,!0),DH(t.b,c)}}function nqn(n,t){var i,r,c,a,u,o;return jDn(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),u=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),o=e.Math.max(u,i),h$(),rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>=0^(rin(A3n),(e.Math.abs(o)<=A3n||0==o||isNaN(o)&&isNaN(0)?0:o<0?-1:o>0?1:zO(isNaN(o),isNaN(0)))>=0)?e.Math.max(o,r):(rin(A3n),(e.Math.abs(r)<=A3n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:zO(isNaN(r),isNaN(0)))>0?e.Math.sqrt(o*o+r*r):-e.Math.sqrt(o*o+r*r))}function tqn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new _v),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=BB(bW(n.a,a-1),117)).e&&10!=c.e||0!=t.e&&10!=t.e?Cv(n.a,t):(0==t.e||t.bm().length,0==c.e?(e=new Pk,(i=c._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn),c=new vJ(10,null,0),kU(n.a,c,a-1)):(c.bm().length,cO(e=new Pk,c.bm())),0==t.e?(i=t._l())>=BQn?cO(e,Xln(i)):NX(e,i&QVn):cO(e,t.bm()),BB(c,521).b=e.a):Cv(n.a,t);else for(r=0;r<t.em();r++)tqn(n,t.am(r));else Cv(n.a,t)}function eqn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=DUn(fan(n.f),CJ(n.e)),n.g):(r=qXn((!n.c&&(n.c=yhn(n.f)),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=yhn(n.f)),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new Ck).a+=""+r,n.e>0&&i>=-6?i>=0?kZ(c,e-CJ(n.e),String.fromCharCode(46)):(c.a=fx(c.a,0,t-1)+"0."+nO(c.a,t-1),kZ(c,t+1,Bdn(qtt,0,-CJ(i)-1))):(e-t>=1&&(kZ(c,t,String.fromCharCode(46)),++e),kZ(c,e,String.fromCharCode(69)),i>0&&kZ(c,++e,String.fromCharCode(43)),kZ(c,++e,""+vz(fan(i)))),n.g=c.a,n.g))}function iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=BB((i=e.Kc()).Pb(),19).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?BB(i.Pb(),19).a:t.f+1),a!=h)for(b=BB(xq(n.b,a),29),f=BB(xq(n.b,h),29),s=new Wb(a0(b.a));s.a<s.c.c.length;)if(Qyn(o=BB(n0(s),10),f.a.c.length,f),0==h)for(c=new Wb(a0(fbn(o)));c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(n,(hWn(),qft),(hN(),!0)),iGn(n,r,1);++h,++a}for(u=new M2(n.b,0);u.b<u.d.gc();)Px(u.b<u.d.gc()),0==BB(u.d.Xb(u.c=u.b++),29).a.c.length&&fW(u)}}function rqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=(a=t.b).o,o=a.d,i=Gy(MD(gpn(a,(HXn(),ypt)))),r=Gy(MD(gpn(a,jpt))),s=Gy(MD(gpn(a,$pt))),rH(u=new fm,o.d,o.c,o.a,o.b),l=MRn(t,i,r,s),p=new Wb(t.d);p.a<p.c.c.length;){for(w=(g=BB(n0(p),101)).f.a.ec().Kc();w.Ob();)c=(b=BB(w.Pb(),409)).a,f=ETn(b),v=new km,bTn(b,b.c,l,v),FMn(b,f,l,v),bTn(b,b.d,l,v),e=v,e=n.Uf(b,f,e),yQ(c.a),Frn(c.a,e),JT(new Rq(null,new w1(e,16)),new wP(h,u));(d=g.i)&&(aTn(g,d,l,r),pgn(h,u,m=new wA(d.g)),UR(m,d.j),pgn(h,u,m))}rH(o,u.d,u.c,u.a,u.b)}function cqn(n,t,e){var i,r,c;if((r=BB(mMn(t,(HXn(),Pdt)),275))!=(JMn(),cft)){switch(OTn(e,"Horizontal Compaction",1),n.a=t,Vk(i=new yOn(((c=new I7).d=t,c.c=BB(mMn(c.d,Zdt),218),UDn(c),SGn(c),sRn(c),c.a)),n.b),1===BB(mMn(t,Sdt),422).g?Wk(i,new grn(n.a)):Wk(i,(CQ(),fit)),r.g){case 1:C$n(i);break;case 2:C$n(Tzn(i,(Ffn(),FPt)));break;case 3:C$n(Uk(Tzn(C$n(i),(Ffn(),FPt)),new gr));break;case 4:C$n(Uk(Tzn(C$n(i),(Ffn(),FPt)),new kd(c)));break;case 5:C$n(Xk(i,wst))}Tzn(i,(Ffn(),_Pt)),i.e=!0,Lzn(c),HSn(e)}}function aqn(n,t,e,i,r,c,a,u){var o,s,h,f;switch(o=u6(Pun(Gk(FEt,1),HWn,220,0,[t,e,i,r])),f=null,n.b.g){case 1:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ja,new Qa,new Ya]));break;case 0:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Ya,new Qa,new Ja]));break;case 2:f=u6(Pun(Gk(tEt,1),HWn,526,0,[new Qa,new Ja,new Ya]))}for(h=new Wb(f);h.a<h.c.c.length;)s=BB(n0(h),526),o.c.length>1&&(o=s.mg(o,n.a,u));return 1==o.c.length?BB(xq(o,o.c.length-1),220):2==o.c.length?FHn((l1(0,o.c.length),BB(o.c[0],220)),(l1(1,o.c.length),BB(o.c[1],220)),a,c):null}function uqn(n){var t,i,r,c,a,u;for(Otn(n.a,new nt),i=new Wb(n.a);i.a<i.c.c.length;)t=BB(n0(i),221),r=XR(B$(BB(n.b,65).c),BB(t.b,65).c),ect?(u=BB(n.b,65).b,a=BB(t.b,65).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>u.d&&a.d<u.d+u.a&&NH(r,e.Math.max(u.c-(a.c+a.b),a.c-(u.c+u.b)))):(r.a=0,a.c+a.b>u.c&&a.c<u.c+u.b&&NH(r,e.Math.max(u.d-(a.d+a.a),a.d-(u.d+u.a))))):NH(r,TFn(BB(n.b,65),BB(t.b,65))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),NH(r,c=HEn(Wrt,t,c,r)),LG(BB(t.b,65),r),Otn(t.a,new Aw(r)),BB(Wrt.b,65),K8(Wrt,Vrt,t)}function oqn(n){var t,i,r,c,a,u,o,s,f,l,b,w;for(n.f=new Fv,o=0,r=0,c=new Wb(n.e.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;){for((a=BB(n0(u),10)).p=o++,i=new oz(ZL(lbn(a).a.Kc(),new h));dAn(i);)BB(U5(i),17).p=r++;for(t=AHn(a),l=new Wb(a.j);l.a<l.c.c.length;)f=BB(n0(l),11),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-j2(fan(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-j2(fan(e.Math.round(b))),f.n.b-=s)}n.g=o,n.b=r,n.i=x8(eyt,HWn,401,o,0,1),n.c=x8(Jmt,HWn,649,r,0,1),n.d.a.$b()}function sqn(n){var t,e,i,r,c,a,u,o,s;if(n.ej())if(o=n.fj(),n.i>0){if(t=new DI(n.i,n.g),c=(e=n.i)<100?null:new Fj(e),n.ij())for(i=0;i<n.i;++i)a=n.g[i],c=n.kj(a,c);if(a6(n),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new ax(t);i.e!=i.i.gc();)c=n.dj(jpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r)}else a6(n),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if(n.i>0){for(u=n.g,s=n.i,a6(n),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else a6(n);else a6(n)}function hqn(n,t,i){var r,c,a,u,o,s,h,f,l;for(_an(this),i==(dJ(),Lyt)?TU(this.r,n):TU(this.w,n),f=RQn,h=KQn,u=t.a.ec().Kc();u.Ob();)c=BB(u.Pb(),46),o=BB(c.a,455),(s=(r=BB(c.b,17)).c)==n&&(s=r.d),TU(o==Lyt?this.r:this.w,s),l=(kUn(),yIt).Hc(s.j)?Gy(MD(mMn(s,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(XMn(this,(kUn(),yIt).Hc(n.j)?Gy(MD(mMn(n,(hWn(),Llt)))):Aon(Pun(Gk(PMt,1),sVn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=BB(a.Pb(),46),tPn(this,BB(c.b,17));this.o=!1}function fqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return e=8191&n.l,i=n.l>>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*(u=8191&t.l),p=r*u,v=c*u,m=a*u,0!=(o=t.l>>13|(15&t.m)<<9)&&(g+=e*o,p+=i*o,v+=r*o,m+=c*o),0!=(s=t.m>>4&8191)&&(p+=e*s,v+=i*s,m+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(v+=e*h,m+=i*h),0!=(f=(1048320&t.h)>>8)&&(m+=e*f),b=((d=e*u)>>22)+(g>>9)+((262143&p)<<4)+((31&v)<<17),w=(p>>18)+(v>>5)+((4095&m)<<8),w+=(b+=(l=(d&SQn)+((511&g)<<13))>>22)>>22,M$(l&=SQn,b&=SQn,w&=PQn)}function lqn(n){var t,i,r,c,a,u,o;if(0!=(o=BB(xq(n.j,0),11)).g.c.length&&0!=o.e.c.length)throw Hp(new Fy("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=o.g.c.length){for(a=RQn,i=new Wb(o.g);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.d.i,(HXn(),Cgt)),142),a=e.Math.min(a,u.n.a-r.b);return new qf(yX(a))}if(0!=o.e.c.length){for(c=KQn,i=new Wb(o.e);i.a<i.c.c.length;)t=BB(n0(i),17),r=BB(mMn(u=t.c.i,(HXn(),Cgt)),142),c=e.Math.max(c,u.n.a+u.o.a+r.c);return new qf(yX(c))}return iy(),iy(),Ont}function bqn(n,t){var e,i,r,c,a,u;if(n.Fk()){if(n.i>4){if(!n.wj(t))return!1;if(n.rk()){if(u=(e=(i=BB(t,49)).Ug())==n.e&&(n.Dk()?i.Og(i.Vg(),n.zk())==n.Ak():-1-i.Vg()==n.aj()),n.Ek()&&!u&&!e&&i.Zg())for(r=0;r<n.i;++r)if(GI(n.Gk(BB(n.g[r],56)))===GI(t))return!0;return u}if(n.Dk()&&!n.Ck()){if(GI(c=BB(t,56).ah(Cvn(BB(n.ak(),18))))===GI(n.e))return!0;if(null==c||!BB(c,56).kh())return!1}}if(a=Sjn(n,t),n.Ek()&&!a)for(r=0;r<n.i;++r)if(GI(i=n.Gk(BB(n.g[r],56)))===GI(t))return!0;return a}return Sjn(n,t)}function wqn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(h=new Np,l=new Rv,a=t.b,r=0;r<a.c.length;r++){for(s=(l1(r,a.c.length),BB(a.c[r],29)).a,h.c=x8(Ant,HWn,1,0,5,1),c=0;c<s.c.length;c++)(u=n.a[r][c]).p=c,u.k==(uSn(),Iut)&&(h.c[h.c.length]=u),c5(BB(xq(t.b,r),29).a,c,u),u.j.c=x8(Ant,HWn,1,0,5,1),gun(u.j,BB(BB(xq(n.b,r),15).Xb(c),14)),LK(BB(mMn(u,(HXn(),ept)),98))||hon(u,ept,(QEn(),UCt));for(i=new Wb(h);i.a<i.c.c.length;)f=QRn(e=BB(n0(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(o=l.a.ec().Kc();o.Ob();)u=BB(o.Pb(),10),SQ(),m$(u.j,(zsn(),sst)),u.i=!0,eIn(u)}function dqn(n,t){var e,i,r,c,a,u,o,s,h,f;if(h=BB(mMn(n,(hWn(),Qft)),61),i=BB(xq(n.j,0),11),h==(kUn(),sIt)?qCn(i,SIt):h==SIt&&qCn(i,sIt),BB(mMn(t,(HXn(),Fgt)),174).Hc((mdn(),_It))){if(o=Gy(MD(mMn(n,Cpt))),s=Gy(MD(mMn(n,Ipt))),a=Gy(MD(mMn(n,Spt))),(u=BB(mMn(t,cpt),21)).Hc((lIn(),eIt)))for(e=s,f=n.o.a/2-i.n.a,c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(u.Hc(rIt))for(c=new Wb(i.f);c.a<c.c.c.length;)(r=BB(n0(c),70)).n.a=o+n.o.a-i.n.a;f0(new Pw((gM(),new HV(t,!1,!1,new Ft))),new __(null,n,!1))}}function gqn(n,t){var i,r,c,a,u,o,s;if(0!=t.c.length){for(SQ(),yG(t.c,t.c.length,null),r=BB(n0(c=new Wb(t)),145);c.a<c.c.c.length;)i=BB(n0(c),145),!aen(r.e.c,i.e.c)||Kdn(BD(r.e).b,i.e.d)||Kdn(BD(i.e).b,r.e.d)?(eFn(n,r),r=i):(gun(r.k,i.k),gun(r.b,i.b),gun(r.c,i.c),Frn(r.i,i.i),gun(r.d,i.d),gun(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),u=e.Math.min(r.e.d,i.e.d),o=e.Math.max(r.e.c+r.e.b,i.e.c+i.e.b)-a,s=e.Math.max(r.e.d+r.e.a,i.e.d+i.e.a)-u,xH(r.e,a,u,o,s),t0(r.f,i.f),!r.a&&(r.a=i.a),gun(r.g,i.g),WB(r.g,i));eFn(n,r)}}function pqn(n,t,e,i){var r,c,a,u,o,s;if((u=n.j)==(kUn(),PIt)&&t!=(QEn(),QCt)&&t!=(QEn(),YCt)&&(qCn(n,u=z_n(n,e)),!(n.q?n.q:(SQ(),SQ(),het))._b((HXn(),tpt))&&u!=PIt&&(0!=n.n.a||0!=n.n.b)&&hon(n,tpt,jkn(n,u))),t==(QEn(),WCt)){switch(s=0,u.g){case 1:case 3:(c=n.i.o.a)>0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}hon(n,(hWn(),Tlt),s)}if(o=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=QCt&&t!=YCt&&u!=PIt)switch(u.g){case 1:a.a=o.a/2;break;case 2:a.a=o.a,a.b=o.b/2;break;case 3:a.a=o.a/2,a.b=o.b;break;case 4:a.b=o.b/2}else a.a=o.a/2,a.b=o.b/2}function vqn(n){var t,e,i,r,c,a,u,o,s,h;if(n.ej())if(h=n.Vi(),o=n.fj(),h>0)if(t=new jcn(n.Gi()),c=(e=h)<100?null:new Fj(e),JD(n,e,t.g),r=1==e?n.Zi(4,Wtn(t,0),null,0,o):n.Zi(6,t,null,-1,o),n.bj()){for(i=new AL(t);i.e!=i.i.gc();)c=n.dj(kpn(i),c);c?(c.Ei(r),c.Fi()):n.$i(r)}else c?(c.Ei(r),c.Fi()):n.$i(r);else JD(n,n.Vi(),n.Wi()),n.$i(n.Zi(6,(SQ(),set),null,-1,o));else if(n.bj())if((h=n.Vi())>0){for(u=n.Wi(),s=h,JD(n,h,u),c=s<100?null:new Fj(s),i=0;i<s;++i)a=u[i],c=n.dj(a,c);c&&c.Fi()}else JD(n,n.Vi(),n.Wi());else JD(n,n.Vi(),n.Wi())}function mqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(u=new Wb(t);u.a<u.c.c.length;)(c=BB(n0(u),233)).e=null,c.c=0;for(o=null,a=new Wb(t);a.a<a.c.c.length;)if(f=(c=BB(n0(a),233)).d[0],!e||f.k==(uSn(),Cut)){for(b=BB(mMn(f,(hWn(),clt)),15).Kc();b.Ob();)l=BB(b.Pb(),10),e&&l.k!=(uSn(),Cut)||((!c.e&&(c.e=new Np),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(uSn(),Cut)){if(o)for(h=BB(h6(n.d,o),21).Kc();h.Ob();)for(s=BB(h.Pb(),10),r=BB(h6(n.d,f),21).Kc();r.Ob();)i=BB(r.Pb(),10),UB(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;o=f}}}function yqn(n,t){var e,i,r,c,a,u,o;for(e=0,o=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),11),nhn(n.b,n.d[r.p]),o.c=x8(Ant,HWn,1,0,5,1),r.i.k.g){case 0:Otn(BB(mMn(r,(hWn(),Elt)),10).j,new Zd(o));break;case 1:S$(Qon(AV(new Rq(null,new w1(r.i.j,16)),new ng(r))),new tg(o));break;case 3:WB(o,new rI(BB(mMn(r,(hWn(),dlt)),11),iln(r.e.c.length+r.g.c.length)))}for(u=new Wb(o);u.a<u.c.c.length;)a=BB(n0(u),46),(i=ME(n,BB(a.a,11)))>n.d[r.p]&&(e+=n5(n.b,i)*BB(a.b,19).a,d3(n.a,iln(i)));for(;!Wy(n.a);)Mnn(n.b,BB(dU(n.a),19).a)}return e}function kqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for((f=new wA(BB(ZAn(n,(SMn(),HMt)),8))).a=e.Math.max(f.a-i.b-i.c,0),f.b=e.Math.max(f.b-i.d-i.a,0),(null==(c=MD(ZAn(n,DMt)))||(kW(c),c<=0))&&(c=1.3),u=new Np,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)a=new zx(BB(kpn(l),33)),u.c[u.c.length]=a;switch(BB(ZAn(n,RMt),311).g){case 3:w=aFn(u,t,f.a,f.b,(s=r,kW(c),s));break;case 1:w=vBn(u,t,f.a,f.b,(h=r,kW(c),h));break;default:w=Mqn(u,t,f.a,f.b,(o=r,kW(c),o))}KUn(n,(b=yXn(new Gtn(w),t,i,f.a,f.b,r,(kW(c),c))).a,b.b,!1,!0)}function jqn(n,t){var e,i,r,c;c=new t_((e=t.b).j),r=0,(i=e.j).c=x8(Ant,HWn,1,0,5,1),eX(BB(gan(n.b,(kUn(),sIt),(Crn(),Rst)),15),e),r=Jmn(c,r,new xr,i),eX(BB(gan(n.b,sIt,Dst),15),e),r=Jmn(c,r,new Nr,i),eX(BB(gan(n.b,sIt,xst),15),e),eX(BB(gan(n.b,oIt,Rst),15),e),eX(BB(gan(n.b,oIt,Dst),15),e),r=Jmn(c,r,new Dr,i),eX(BB(gan(n.b,oIt,xst),15),e),eX(BB(gan(n.b,SIt,Rst),15),e),r=Jmn(c,r,new Rr,i),eX(BB(gan(n.b,SIt,Dst),15),e),r=Jmn(c,r,new Kr,i),eX(BB(gan(n.b,SIt,xst),15),e),eX(BB(gan(n.b,CIt,Rst),15),e),r=Jmn(c,r,new Qr,i),eX(BB(gan(n.b,CIt,Dst),15),e),eX(BB(gan(n.b,CIt,xst),15),e)}function Eqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Layer size calculation",1),f=RQn,h=KQn,c=!1,o=new Wb(n.b);o.a<o.c.c.length;)if((s=(u=BB(n0(o),29)).c).a=0,s.b=0,0!=u.a.c.length){for(c=!0,b=new Wb(u.a);b.a<b.c.c.length;)d=(l=BB(n0(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=BB(xq(u.a,0),10)).n.b-r.d.d,r.k==(uSn(),Mut)&&(g-=BB(mMn(n,(HXn(),Lpt)),142).d),i=(a=BB(xq(u.a,u.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==Mut&&(i+=BB(mMn(n,(HXn(),Lpt)),142).a),s.b=i-g,f=e.Math.min(f,g),h=e.Math.max(h,i)}c||(f=0,h=0),n.f.b=h-f,n.c.b-=f,HSn(t)}function Tqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Wb(n.a);s.a<s.c.c.length;)u=BB(n0(s),10),c=e.Math.max(c,u.d.b),a=e.Math.max(a,u.d.c);for(o=new Wb(n.a);o.a<o.c.c.length;){switch(u=BB(n0(o),10),BB(mMn(u,(HXn(),kdt)),248).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Wb(u.j);b.a<b.c.c.length;)0==(l=BB(n0(b),11)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=u.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=u.d.b)&&(p=r),d=u.d.c,p>g.a-d-h&&(p=g.a-d-h),u.n.a=t+p}}function Mqn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b;for(u=x8(xNt,qQn,25,n.c.length,15,1),ikn(l=new Xz(new Uu),n),s=0,b=new Np;0!=l.b.c.length;)if(a=BB(0==l.b.c.length?null:xq(l.b,0),157),s>1&&iG(a)*eG(a)/2>u[0]){for(c=0;c<b.c.length-1&&iG(a)*eG(a)/2>u[c];)++c;f=new Gtn(new s1(b,0,c+1)),h=iG(a)/eG(a),o=yXn(f,t,new bm,e,i,r,h),UR(kO(f.e),o),F8(eMn(l,f)),ikn(l,new s1(b,c+1,b.c.length)),b.c=x8(Ant,HWn,1,0,5,1),s=0,jG(u,u.length,0)}else null!=(0==l.b.c.length?null:xq(l.b,0))&&hrn(l,0),s>0&&(u[s]=u[s-1]),u[s]+=iG(a)*eG(a),++s,b.c[b.c.length]=a;return b}function Sqn(n){var t,e,i;if((e=BB(mMn(n,(HXn(),kgt)),163))==(Tbn(),Flt)){for(t=new oz(ZL(fbn(n).a.Kc(),new h));dAn(t);)if(!X5(BB(U5(t),17)))throw Hp(new rk(P1n+gyn(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==Hlt)for(i=new oz(ZL(lbn(n).a.Kc(),new h));dAn(i);)if(!X5(BB(U5(i),17)))throw Hp(new rk(P1n+gyn(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 Pqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;for(OTn(t,"Label dummy removal",1),i=Gy(MD(mMn(n,(HXn(),jpt)))),r=Gy(MD(mMn(n,Spt))),o=BB(mMn(n,Udt),103),u=new Wb(n.b);u.a<u.c.c.length;)for(h=new M2(BB(n0(u),29).a,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),(s=BB(h.d.Xb(h.c=h.b++),10)).k==(uSn(),Sut)&&(f=BB(mMn(s,(hWn(),dlt)),17),b=Gy(MD(mMn(f,agt))),a=GI(mMn(s,ult))===GI((Xyn(),ECt)),e=new wA(s.n),a&&(e.b+=b+i),c=new xC(s.o.a,s.o.b-b-i),l=BB(mMn(s,Plt),15),o==(Ffn(),HPt)||o==KPt?ADn(l,e,r,c,a,o):qhn(l,e,r,c),gun(f.b,l),rGn(s,GI(mMn(n,Zdt))===GI((Mbn(),YPt))),fW(h));HSn(t)}function Cqn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(u=new Np,r=new Wb(t.a);r.a<r.c.c.length;)for(a=new Wb(BB(n0(r),10).j);a.a<a.c.c.length;){for(s=null,m=0,y=(v=Z0((c=BB(n0(a),11)).g)).length;m<y;++m)wan((p=v[m]).d.i,e)||((g=LHn(n,t,e,p,p.c,(ain(),qvt),s))!=s&&(u.c[u.c.length]=g),g.c&&(s=g));for(o=null,w=0,d=(b=Z0(c.e)).length;w<d;++w)wan((l=b[w]).c.i,e)||((g=LHn(n,t,e,l,l.d,(ain(),Hvt),o))!=o&&(u.c[u.c.length]=g),g.c&&(o=g))}for(f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),441),-1!=E7(t.a,h.a,0)||WB(t.a,h.a),h.c&&(i.c[i.c.length]=h)}function Iqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Interactive cycle breaking",1),h=new Np,l=new Wb(t.a);l.a<l.c.c.length;)for((f=BB(n0(l),10)).p=1,b=Fjn(f).a,s=xwn(f,(ain(),qvt)).Kc();s.Ob();)for(c=new Wb(BB(s.Pb(),11).g);c.a<c.c.c.length;)(w=(i=BB(n0(c),17)).d.i)!=f&&Fjn(w).a<b&&(h.c[h.c.length]=i);for(a=new Wb(h);a.a<a.c.c.length;)tBn(i=BB(n0(a),17),!0);for(h.c=x8(Ant,HWn,1,0,5,1),o=new Wb(t.a);o.a<o.c.c.length;)(u=BB(n0(o),10)).p>0&&lPn(n,u,h);for(r=new Wb(h);r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0);h.c=x8(Ant,HWn,1,0,5,1),HSn(e)}function Oqn(n,t){var e,i,r,c,a,u,o,s,h;return s="",0==t.length?n.de(XVn,zVn,-1,-1):(mK((h=RMn(t)).substr(0,3),"at ")&&(h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=RMn(h.substr(a+1)),h=RMn(h.substr(0,a))):(e=h.indexOf(")",a),s=h.substr(a+1,e-(a+1)),h=RMn(h.substr(0,a))),-1!=(a=GO(h,YTn(46)))&&(h=h.substr(a+1)),(0==h.length||mK(h,"Anonymous function"))&&(h=zVn),u=mN(s,YTn(58)),r=MK(s,YTn(58),u-1),o=-1,i=-1,c=XVn,-1!=u&&-1!=r&&(c=s.substr(0,r),o=hx(s.substr(r+1,u-(r+1))),i=hx(s.substr(u+1))),n.de(c,h,o,i))}function Aqn(n,t,e){var i,r,c,a,u,o;if(0==t.l&&0==t.m&&0==t.h)throw Hp(new Oy("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(ltt=M$(0,0,0)),M$(0,0,0);if(t.h==CQn&&0==t.m&&0==t.l)return Fbn(n,e);if(o=!1,t.h>>19!=0&&(t=aon(t),o=!o),a=OLn(t),c=!1,r=!1,i=!1,n.h==CQn&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return u=jAn(n,a),o&&Oon(u),e&&(ltt=M$(0,0,0)),u;n=WO((X7(),btt)),i=!0,o=!o}else n.h>>19!=0&&(c=!0,n=aon(n),i=!0,o=!o);return-1!=a?Bon(n,a,o,c,e):Kkn(n,t)<0?(e&&(ltt=c?aon(n):M$(n.l,n.m,n.h)),M$(0,0,0)):h_n(i?n:M$(n.l,n.m,n.h),t,o,c,r,e)}function $qn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw Hp(new Fy("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=BB(Vj(n.g),9),b=sx(n.f),u=0,s=(c=h).length;u<s;++u)(f=BB(D7(n,(i=c[u]).g),246))?WB(b,BB(own(n,f),123)):b.c[b.c.length]=null;for(w=new B2,JT(AV($V(AV(new Rq(null,new w1(b,16)),new hu),new Eg(t)),new fu),new Tg(w)),Jcn(w,n.a),e=new Np,a=0,o=(r=h).length;a<o;++a)gun(e,Eun(n,JQ(BB(D7(w,(i=r[a]).g),20)))),(l=BB(xq(b,i.g),123))&&(e.c[e.c.length]=l);return gun(e,Eun(n,JQ(BB(D7(w,h[h.length-1].g+1),20)))),e}function Lqn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w;for(OTn(i,"Model order cycle breaking",1),n.a=0,n.b=0,l=new Np,h=t.a.c.length,s=new Wb(t.a);s.a<s.c.c.length;)Lx(o=BB(n0(s),10),(hWn(),wlt))&&(h=e.Math.max(h,BB(mMn(o,wlt),19).a+1));for(w=new Wb(t.a);w.a<w.c.c.length;)for(u=zPn(n,b=BB(n0(w),10),h),f=xwn(b,(ain(),qvt)).Kc();f.Ob();)for(a=new Wb(BB(f.Pb(),11).g);a.a<a.c.c.length;)zPn(n,(r=BB(n0(a),17)).d.i,h)<u&&(l.c[l.c.length]=r);for(c=new Wb(l);c.a<c.c.c.length;)tBn(r=BB(n0(c),17),!0),hon(t,(hWn(),qft),(hN(),!0));l.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function Nqn(n,t){var e,i,r,c,a,u,o;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=BB(a.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(u=n.r.a.ec().Kc();u.Ob();)r=BB(u.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(o=t.w.a.ec().Kc();o.Ob();)r=BB(o.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,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=BB(c.Pb(),11),phn(Aon(Pun(Gk(PMt,1),sVn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new S6(n,t,i-e):i<e?new S6(t,n,e-i):(new S6(t,n,0),new S6(n,t,0))}}function xqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(s=t.c,r=QA(n.e),f=kL(Bx(B$(VA(n.e)),n.d*n.a,n.c*n.b),-.5),e=r.a-f.a,i=r.b-f.b,e=(a=t.a).c-e,i=a.d-i,o=new Wb(s);o.a<o.c.c.length;){switch(b=e+(l=(u=BB(n0(o),395)).b).a,g=i+l.b,w=CJ(b/n.a),p=CJ(g/n.b),(c=u.a).g){case 0:Hpn(),h=Brt;break;case 1:Hpn(),h=Frt;break;case 2:Hpn(),h=Hrt;break;default:Hpn(),h=qrt}c.a?(v=CJ((g+u.c)/n.b),WB(n.f,new x_(h,iln(p),iln(v))),c==(qpn(),tct)?won(n,0,p,w,v):won(n,w,p,n.d-1,v)):(d=CJ((b+u.c)/n.a),WB(n.f,new x_(h,iln(w),iln(d))),c==(qpn(),Zrt)?won(n,w,0,d,p):won(n,w,p,d,n.c-1))}}function Dqn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(l=new Np,c=new Np,d=null,u=t.Kc();u.Ob();)a=new Hd(BB(u.Pb(),19).a),c.c[c.c.length]=a,d&&(a.d=d,d.e=a),d=a;for(m=zFn(n),h=0;h<c.c.length;++h){for(b=null,g=D6((l1(0,c.c.length),BB(c.c[0],652))),i=null,r=RQn,f=1;f<n.b.c.length;++f)p=g?e.Math.abs(g.b-f):e.Math.abs(f-b.b)+1,(w=b?e.Math.abs(f-b.b):p+1)<p?(s=b,o=w):(s=g,o=p),y=Gy(MD(mMn(n,(HXn(),Hpt)))),(v=m[f]+e.Math.pow(o,y))<r&&(r=v,(i=s).c=f),g&&f==g.b&&(b=g,g=xz(g));i&&(WB(l,iln(i.c)),i.a=!0,vln(i))}return SQ(),yG(l.c,l.c.length,null),l}function Rqn(n){var t,e,i,r,c,a,u,o,s,h;for(t=new To,e=new To,s=mK(K9n,(r=N_n(n.b,_9n))?SD(cdn((!r.b&&(r.b=new Jx((gWn(),k$t),X$t,r)),r.b),F9n)):null),o=0;o<n.i;++o)cL(u=BB(n.g[o],170),99)?0!=((a=BB(u,18)).Bb&h6n)?(0==(a.Bb&hVn)||!s&&null==((c=N_n(a,_9n))?SD(cdn((!c.b&&(c.b=new Jx((gWn(),k$t),X$t,c)),c.b),n8n)):null))&&f9(t,a):(h=Cvn(a))&&0!=(h.Bb&h6n)||(0==(a.Bb&hVn)||!s&&null==((i=N_n(a,_9n))?SD(cdn((!i.b&&(i.b=new Jx((gWn(),k$t),X$t,i)),i.b),n8n)):null))&&f9(e,a):(ZM(),BB(u,66).Oj()&&(u.Jj()||(f9(t,u),f9(e,u))));chn(t),chn(e),n.a=BB(t.g,247),BB(e.g,247)}function Kqn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;for(o=xSn(t),BB(mMn(t,(HXn(),qdt)),314)!=(Oin(),hht)&&e5(o,new vt),e5(o,new Dw(BB(mMn(t,Rdt),292))),b=0,s=new Np,r=new bV(o);r.a!=r.b;)i=BB(_hn(r),37),$Gn(n.c,i),b+=(f=BB(mMn(i,(hWn(),Mlt)),15)).gc(),WB(s,new rI(i,f.Kc()));for(OTn(e,"Recursive hierarchical layout",b),l=BB(BB(xq(s,s.c.length-1),46).b,47);l.Ob();)for(u=new Wb(s);u.a<u.c.c.length;)for(a=BB(n0(u),46),f=BB(a.b,47),c=BB(a.a,37);f.Ob();){if(cL(h=BB(f.Pb(),51),507)){if(c.e)break;h.pf(c,mcn(e,1));break}h.pf(c,mcn(e,1))}HSn(e)}function _qn(n,t){var e,i,r,c,a,u,o,s;if(b1(u=t.length-1,t.length),93==(a=t.charCodeAt(u))){if((c=GO(t,YTn(91)))>=0)return r=dbn(n,t.substr(1,c-1)),YUn(n,t.substr(c+1,u-(c+1)),r)}else{if(e=-1,null==Ett&&(Ett=new RegExp("\\d")),Ett.test(String.fromCharCode(a))&&(e=MK(t,YTn(46),u-1))>=0){i=BB(V5(n,Ptn(n,t.substr(1,e-1)),!1),58),o=0;try{o=l_n(t.substr(e+1),_Vn,DWn)}catch(h){throw cL(h=lun(h),127)?Hp(new L7(h)):Hp(h)}if(o<i.gc())return cL(s=i.Xb(o),72)&&(s=BB(s,72).dd()),BB(s,56)}if(e<0)return BB(V5(n,Ptn(n,t.substr(1)),!1),56)}return null}function Fqn(n,t,e){var i,r,c,a,u,o,s;if(Awn(t,e)>=0)return e;switch(DW(B7(n,e))){case 2:if(mK("",Cfn(n,e.Hj()).ne())){if(o=m$n(n,t,u=jV(B7(n,e)),kV(B7(n,e))))return o;for(a=0,s=(r=jKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(r.Xb(a),170))),u))return o}return null;case 4:if(mK("",Cfn(n,e.Hj()).ne())){for(i=e;i;i=J1(B7(n,i)))if(o=y$n(n,t,jV(B7(n,i)),kV(B7(n,i))))return o;if(u=jV(B7(n,e)),mK(S7n,u))return mjn(n,t);for(a=0,s=(c=EKn(n,t)).gc();a<s;++a)if(aNn(OU(B7(n,o=BB(c.Xb(a),170))),u))return o}return null;default:return null}}function Bqn(n,t,e){var i,r,c,a,u,o,s,h;if(0==e.gc())return!1;if(ZM(),c=(u=BB(t,66).Oj())?e:new gtn(e.gc()),$xn(n.e,t)){if(t.hi())for(s=e.Kc();s.Ob();)UFn(n,t,o=s.Pb(),cL(t,99)&&0!=(BB(t,18).Bb&BQn))||(r=Z3(t,o),c.Hc(r)||c.Fc(r));else if(!u)for(s=e.Kc();s.Ob();)r=Z3(t,o=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw Hp(new _y(I7n));for(h=axn(n.e.Tg(),t),i=BB(n.g,119),a=0;a<n.i;++a)if(r=i[a],h.rl(r.ak())){if(e.Hc(u?r:r.dd()))return!1;for(s=e.Kc();s.Ob();)o=s.Pb(),BB(ovn(n,a,u?BB(o,72):Z3(t,o)),72);return!0}u||(r=Z3(t,e.Kc().Pb()),c.Fc(r))}return pX(n,c)}function Hqn(n,t){var i,r,c,a,u,o,s;for(s=new YT,o=new Kb(new Ob(n.c).a.vc().Kc());o.a.Ob();)c=BB(o.a.Pb(),42),0==(a=BB(c.dd(),458)).b&&r5(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=BB(0==s.b?null:(Px(0!=s.b),Atn(s,s.a.a)),458)).a&&(a.a=0),r=new Wb(a.d);r.a<r.c.c.length;)null==(i=BB(n0(r),654)).b.a?i.b.a=Gy(a.a)+i.a:t.o==(oZ(),ryt)?i.b.a=e.Math.min(Gy(i.b.a),Gy(a.a)+i.a):i.b.a=e.Math.max(Gy(i.b.a),Gy(a.a)+i.a),--i.b.b,0==i.b.b&&DH(s,i.b);for(u=new Kb(new Ob(n.c).a.vc().Kc());u.a.Ob();)c=BB(u.a.Pb(),42),a=BB(c.dd(),458),t.i[a.c.p]=a.a}function qqn(){qqn=O,skt=new up(OZn),new up(AZn),new iR("DEPTH",iln(0)),ikt=new iR("FAN",iln(0)),tkt=new iR(U3n,iln(0)),dkt=new iR("ROOT",(hN(),!1)),ckt=new iR("LEFTNEIGHBOR",null),bkt=new iR("RIGHTNEIGHBOR",null),akt=new iR("LEFTSIBLING",null),wkt=new iR("RIGHTSIBLING",null),ekt=new iR("DUMMY",!1),new iR("LEVEL",iln(0)),lkt=new iR("REMOVABLE_EDGES",new YT),gkt=new iR("XCOOR",iln(0)),pkt=new iR("YCOOR",iln(0)),ukt=new iR("LEVELHEIGHT",0),rkt=new iR("ID",""),hkt=new iR("POSITION",iln(0)),fkt=new iR("PRELIM",0),okt=new iR("MODIFIER",0),nkt=new up($Zn),Zyt=new up(LZn)}function Gqn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Wb(t.j);w.a<w.c.c.length;){if(b=BB(n0(w),11),c=Aon(Pun(Gk(PMt,1),sVn,8,0,[b.i.n,b.n,b.a])),t.k==(uSn(),Iut)&&(o=BB(mMn(b,(hWn(),dlt)),11),c.a=Aon(Pun(Gk(PMt,1),sVn,8,0,[o.i.n,o.n,o.a])).a,t.n.a=c.a),u=new xC(0,c.b),b.j==(kUn(),oIt))u.a=f;else{if(b.j!=CIt)continue;u.a=i}if(!(e.Math.abs(c.a-u.a)<=r)||Nkn(t))for(a=b.g.c.length+b.e.c.length>1,h=new m6(b.b);y$(h.a)||y$(h.b);)l=(s=BB(y$(h.a)?n0(h.a):n0(h.b),17)).c==b?s.d:s.c,e.Math.abs(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).b-u.b)>1&&pxn(n,s,u,a,b)}}function zqn(n){var t,i,r,c,a,u;if(c=new M2(n.e,0),r=new M2(n.a,0),n.d)for(i=0;i<n.b;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);for(t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++))));n.f-t>D3n;){for(a=t,u=0;e.Math.abs(t-a)<D3n;)++u,t=Gy((Px(c.b<c.d.gc()),MD(c.d.Xb(c.c=c.b++)))),Px(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);u<n.b&&(Px(c.b>0),c.a.Xb(c.c=--c.b),DFn(n,n.b-u,a,r,c),Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),Px(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)Px(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),fW(c);n.d=!0,n.c=!0}function Uqn(){Uqn=O,pLt=(cE(),gLt).b,yLt=BB(Wtn(QQ(gLt.b),0),34),vLt=BB(Wtn(QQ(gLt.b),1),34),mLt=BB(Wtn(QQ(gLt.b),2),34),OLt=gLt.bb,BB(Wtn(QQ(gLt.bb),0),34),BB(Wtn(QQ(gLt.bb),1),34),$Lt=gLt.fb,LLt=BB(Wtn(QQ(gLt.fb),0),34),BB(Wtn(QQ(gLt.fb),1),34),BB(Wtn(QQ(gLt.fb),2),18),xLt=gLt.qb,KLt=BB(Wtn(QQ(gLt.qb),0),34),BB(Wtn(QQ(gLt.qb),1),18),BB(Wtn(QQ(gLt.qb),2),18),DLt=BB(Wtn(QQ(gLt.qb),3),34),RLt=BB(Wtn(QQ(gLt.qb),4),34),FLt=BB(Wtn(QQ(gLt.qb),6),34),_Lt=BB(Wtn(QQ(gLt.qb),5),18),kLt=gLt.j,jLt=gLt.k,ELt=gLt.q,TLt=gLt.w,MLt=gLt.B,SLt=gLt.A,PLt=gLt.C,CLt=gLt.D,ILt=gLt._,ALt=gLt.cb,NLt=gLt.hb}function Xqn(n,t,i){var r,c,a,u,o,s,h,f,l;n.c=0,n.b=0,r=2*t.c.a.c.length+1;n:for(h=i.Kc();h.Ob();){if(l=0,u=(s=BB(h.Pb(),11)).j==(kUn(),sIt)||s.j==SIt){if(!(f=BB(mMn(s,(hWn(),Elt)),10)))continue;l+=iRn(n,r,s,f)}else{for(o=new Wb(s.g);o.a<o.c.c.length;){if((c=BB(n0(o),17).d).i.c==t.c){WB(n.a,s);continue n}l+=n.g[c.p]}for(a=new Wb(s.e);a.a<a.c.c.length;){if((c=BB(n0(a),17).c).i.c==t.c){WB(n.a,s);continue n}l-=n.g[c.p]}}s.e.c.length+s.g.c.length>0?(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])):u&&(n.f[s.p]=l)}}function Wqn(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 Vqn(n,t,e){var i,r;for(OTn(e,"Graph transformation ("+n.a+")",1),r=a0(t.a),i=new Wb(t.b);i.a<i.c.c.length;)gun(r,BB(n0(i),29).a);if(BB(mMn(t,(HXn(),Xdt)),419)==(_nn(),Sht))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r);break;case 3:bdn(t,r);break;case 4:n.a==(Srn(),qut)?(bdn(t,r),$2(t,r)):($2(t,r),bdn(t,r))}else if(n.a==(Srn(),qut))switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:bdn(t,r),L2(t,r);break;case 4:L2(t,r),bdn(t,r)}else switch(BB(mMn(t,Udt),103).g){case 2:L2(t,r),$2(t,r);break;case 3:L2(t,r),bdn(t,r);break;case 4:bdn(t,r),L2(t,r)}HSn(e)}function Qqn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w;for(o=new fA,s=new fA,b=new fA,w=new fA,u=Gy(MD(mMn(t,(HXn(),Opt)))),r=Gy(MD(mMn(t,ypt))),a=new Wb(e);a.a<a.c.c.length;)if(c=BB(n0(a),10),(f=BB(mMn(c,(hWn(),Qft)),61))==(kUn(),sIt))for(s.a.zc(c,s),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(o,BB(U5(i),17).c.i);else if(f==SIt)for(w.a.zc(c,w),i=new oz(ZL(fbn(c).a.Kc(),new h));dAn(i);)TU(b,BB(U5(i),17).c.i);0!=o.a.gc()&&(l=AGn(new fX(2,r),t,o,s,-u-t.c.b))>0&&(n.a=u+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=AGn(new fX(1,r),t,b,w,t.f.b+u-t.c.b))>0&&(t.f.b+=u+(l-1)*r)}function Yqn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,Dsn(n,null)):(n.F=(kW(t),t),-1!=(i=GO(t,YTn(60)))?(r=t.substr(0,i),-1==GO(t,YTn(46))&&!mK(r,$Wn)&&!mK(r,S9n)&&!mK(r,P9n)&&!mK(r,C9n)&&!mK(r,I9n)&&!mK(r,O9n)&&!mK(r,A9n)&&!mK(r,$9n)&&(r=L9n),-1!=(e=mN(t,YTn(62)))&&(r+=""+t.substr(e+1)),Dsn(n,r)):(r=t,-1==GO(t,YTn(46))&&(-1!=(i=GO(t,YTn(91)))&&(r=t.substr(0,i)),mK(r,$Wn)||mK(r,S9n)||mK(r,P9n)||mK(r,C9n)||mK(r,I9n)||mK(r,O9n)||mK(r,A9n)||mK(r,$9n)?r=t:(r=L9n,-1!=i&&(r+=""+t.substr(i)))),Dsn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&ban(n,new nU(n,1,5,c,t))}function Jqn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(!((d=t.b.c.length)<3)){for(b=x8(ANt,hQn,25,d,15,1),f=0,h=new Wb(t.b);h.a<h.c.c.length;)s=BB(n0(h),29),b[f++]=s.a.c.length;for(l=new M2(t.b,2),i=1;i<d-1;i++)for(Px(l.b<l.d.gc()),w=new Wb((e=BB(l.d.Xb(l.c=l.b++),29)).a),c=0,u=0,o=0;o<b[i+1];o++)if(m=BB(n0(w),10),o==b[i+1]-1||YSn(n,m,i+1,i)){for(a=b[i]-1,YSn(n,m,i+1,i)&&(a=n.c.e[BB(BB(BB(xq(n.c.b,m.p),15).Xb(0),46).a,10).p]);u<=o;){if(!YSn(n,v=BB(xq(e.a,u),10),i+1,i))for(p=BB(xq(n.c.b,v.p),15).Kc();p.Ob();)g=BB(p.Pb(),46),((r=n.c.e[BB(g.a,10).p])<c||r>a)&&TU(n.b,BB(g.b,17));++u}c=a}}}function Zqn(n,t){var e;if(null==t||mK(t,zWn))return null;if(0==t.length&&n.k!=(PPn(),pMt))return null;switch(n.k.g){case 1:return mgn(t,a5n)?(hN(),vtt):mgn(t,u5n)?(hN(),ptt):null;case 2:try{return iln(l_n(t,_Vn,DWn))}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 4:try{return bSn(t)}catch(i){if(cL(i=lun(i),127))return null;throw Hp(i)}case 3:return t;case 5:return rhn(n),HIn(n,t);case 6:return rhn(n),K$n(n,n.a,t);case 7:try{return(e=rAn(n)).Jf(t),e}catch(i){if(cL(i=lun(i),32))return null;throw Hp(i)}default:throw Hp(new Fy("Invalid type set for this layout option."))}}function nGn(n){var t,e,i,r,c,a,u;for(Dnn(),u=new Vv,e=new Wb(n);e.a<e.c.c.length;)t=BB(n0(e),140),(!u.b||t.c>=u.b.c)&&(u.b=t),(!u.c||t.c<=u.c.c)&&(u.d=u.c,u.c=t),(!u.e||t.d>=u.e.d)&&(u.e=t),(!u.f||t.d<=u.f.d)&&(u.f=t);return i=new Tpn((Aun(),Zat)),i2(n,out,new Jy(Pun(Gk(Jat,1),HWn,369,0,[i]))),a=new Tpn(eut),i2(n,uut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[a]))),r=new Tpn(nut),i2(n,aut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[r]))),c=new Tpn(tut),i2(n,cut,new Jy(Pun(Gk(Jat,1),HWn,369,0,[c]))),xLn(i.c,Zat),xLn(r.c,nut),xLn(c.c,tut),xLn(a.c,eut),u.a.c=x8(Ant,HWn,1,0,5,1),gun(u.a,i.c),gun(u.a,ean(r.c)),gun(u.a,c.c),gun(u.a,ean(a.c)),u}function tGn(n){var t;switch(n.d){case 1:if(n.hj())return-2!=n.o;break;case 2:if(n.hj())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.gj(),n.p){case 0:return null!=t&&qy(TD(t))!=JI(n.k,0);case 1:return null!=t&&BB(t,217).a!=dG(n.k)<<24>>24;case 2:return null!=t&&BB(t,172).a!=(dG(n.k)&QVn);case 6:return null!=t&&JI(BB(t,162).a,n.k);case 5:return null!=t&&BB(t,19).a!=dG(n.k);case 7:return null!=t&&BB(t,184).a!=dG(n.k)<<16>>16;case 3:return null!=t&&Gy(MD(t))!=n.j;case 4:return null!=t&&BB(t,155).a!=n.j;default:return null==t?null!=n.n:!Nfn(t,n.n)}}function eGn(n,t,e){var i,r,c,a;return n.Fk()&&n.Ek()&&GI(a=Gz(n,BB(e,56)))!==GI(e)?(n.Oi(t),n.Ui(t,B9(n,t,a)),n.rk()&&(r=BB(e,49),c=n.Dk()?n.Bk()?r.ih(n.b,Cvn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),null):r.ih(n.b,Awn(r.Tg(),Cvn(BB(itn(jY(n.b),n.aj()),18))),null,null):r.ih(n.b,-1-n.aj(),null,null),!BB(a,49).eh()&&(i=BB(a,49),c=n.Dk()?n.Bk()?i.gh(n.b,Cvn(BB(itn(jY(n.b),n.aj()),18)).n,BB(itn(jY(n.b),n.aj()).Yj(),26).Bj(),c):i.gh(n.b,Awn(i.Tg(),Cvn(BB(itn(jY(n.b),n.aj()),18))),null,c):i.gh(n.b,-1-n.aj(),null,c)),c&&c.Fi()),mA(n.b)&&n.$i(n.Zi(9,e,a,t,!1)),a):e}function iGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(f=Gy(MD(mMn(n,(HXn(),Ept)))),r=Gy(MD(mMn(n,Rpt))),hon(b=new Yu,Ept,f+r),v=(h=t).d,g=h.c.i,m=h.d.i,p=tA(g.c),y=tA(m.c),c=new Np,l=p;l<=y;l++)Bl(o=new $vn(n),(uSn(),Put)),hon(o,(hWn(),dlt),h),hon(o,ept,(QEn(),XCt)),hon(o,Mpt,b),w=BB(xq(n.b,l),29),l==p?Qyn(o,w.a.c.length-i,w):PZ(o,w),(k=Gy(MD(mMn(h,agt))))<0&&hon(h,agt,k=0),o.o.b=k,d=e.Math.floor(k/2),qCn(u=new CSn,(kUn(),CIt)),CZ(u,o),u.n.b=d,qCn(s=new CSn,oIt),CZ(s,o),s.n.b=d,MZ(h,u),qan(a=new wY,h),hon(a,vgt,null),SZ(a,s),MZ(a,v),zkn(o,h,a),c.c[c.c.length]=a,h=a;return c}function rGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(u=BB(DSn(n,(kUn(),CIt)).Kc().Pb(),11).e,f=BB(DSn(n,oIt).Kc().Pb(),11).g,a=u.c.length,g=g1(BB(xq(n.j,0),11));a-- >0;){for(l1(0,u.c.length),b=BB(u.c[0],17),l1(0,f.c.length),r=E7((i=BB(f.c[0],17)).d.e,i,0),A2(b,i.d,r),SZ(i,null),MZ(i,null),l=b.a,t&&DH(l,new wA(g)),e=spn(i.a,0);e.b!=e.d.c;)DH(l,new wA(BB(b3(e),8)));for(d=b.b,h=new Wb(i.b);h.a<h.c.c.length;)s=BB(n0(h),70),d.c[d.c.length]=s;if(w=BB(mMn(b,(HXn(),vgt)),74),c=BB(mMn(i,vgt),74))for(w||(w=new km,hon(b,vgt,w)),o=spn(c,0);o.b!=o.d.c;)DH(w,new wA(BB(b3(o),8)))}}function cGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((lIn(),eIt)),u=0,o=s.Kc(),f=null,l=0,b=0;o.Ob();)c=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),a=r.b.rf().a,n.A.Hc((mdn(),_It))&&yRn(n,t),f?(w=b+f.d.c+n.w+r.d.b,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-c)<=fJn||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(u=e.Math.max(u,lcn(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),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(l-1)<=fJn||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=u}function aGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(i=BB(oV(n.b,t),124),(s=BB(BB(h6(n.r,t),21),84)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((lIn(),eIt)),u=0,n.A.Hc((mdn(),_It))&&kRn(n,t),o=s.Kc(),f=null,b=0,l=0;o.Ob();)a=Gy(MD((r=BB(o.Pb(),111)).b.We((DN(),Lrt)))),c=r.b.rf().b,f?(w=l+f.d.a+n.w+r.d.d,u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-a)<=fJn||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(u=e.Math.max(u,lcn(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),u=e.Math.max(u,(h$(),rin(fJn),e.Math.abs(b-1)<=fJn||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=u}function uGn(n,t,e){var i,r,c,a,u,o;for(this.g=n,u=t.d.length,o=e.d.length,this.d=x8(Out,a1n,10,u+o,0,1),a=0;a<u;a++)this.d[a]=t.d[a];for(c=0;c<o;c++)this.d[u+c]=e.d[c];if(t.e){if(this.e=zB(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=BB(r.Pb(),233))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=zB(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Jtn(this,this.f/this.a):null!=lL(t.g,t.d[0]).a&&null!=lL(e.g,e.d[0]).a?Jtn(this,(Gy(lL(t.g,t.d[0]).a)+Gy(lL(e.g,e.d[0]).a))/2):null!=lL(t.g,t.d[0]).a?Jtn(this,lL(t.g,t.d[0]).a):null!=lL(e.g,e.d[0]).a&&Jtn(this,lL(e.g,e.d[0]).a)}function oGn(n,t){var e,i,r,c,a,u,o,s,h;for(n.a=new BX($cn(WPt)),i=new Wb(t.a);i.a<i.c.c.length;){for(e=BB(n0(i),841),a=new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),WB(n.a.a,a),o=new Wb(e.d);o.a<o.c.c.length;)FGn(s=new NN(n,u=BB(n0(o),110)),BB(mMn(e.c,(hWn(),Xft)),21)),hU(n.g,e)||(VW(n.g,e,new xC(u.c,u.d)),VW(n.f,e,s)),WB(n.a.b,s),g2(a,s);for(c=new Wb(e.b);c.a<c.c.c.length;)s=new NN(n,(r=BB(n0(c),594)).kf()),VW(n.b,r,new rI(a,s)),FGn(s,BB(mMn(e.c,(hWn(),Xft)),21)),r.hf()&&(FGn(h=new Sgn(n,r.hf(),1),BB(mMn(e.c,Xft),21)),g2(new Pgn(Pun(Gk(Qat,1),HWn,81,0,[])),h),JIn(n.c,r.gf(),new rI(a,h)))}return n.a}function sGn(n){var t;this.a=n,t=(uSn(),Pun(Gk($ut,1),$Vn,267,0,[Cut,Put,Mut,Iut,Sut,Tut])).length,this.b=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),this.c=kq(lMt,[sVn,k3n],[593,146],0,[t,t],2),FY(this,Cut,(HXn(),Opt),Apt),tun(this,Cut,Put,Ept,Tpt),_Y(this,Cut,Iut,Ept),_Y(this,Cut,Mut,Ept),tun(this,Cut,Sut,Opt,Apt),FY(this,Put,ypt,kpt),_Y(this,Put,Iut,ypt),_Y(this,Put,Mut,ypt),tun(this,Put,Sut,Ept,Tpt),ZA(this,Iut,ypt),_Y(this,Iut,Mut,ypt),_Y(this,Iut,Sut,Ppt),ZA(this,Mut,Npt),tun(this,Mut,Sut,Ipt,Cpt),FY(this,Sut,ypt,ypt),FY(this,Tut,ypt,kpt),tun(this,Tut,Cut,Ept,Tpt),tun(this,Tut,Sut,Ept,Tpt),tun(this,Tut,Put,Ept,Tpt)}function hGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(cL(a=e.ak(),99)&&0!=(BB(a,18).Bb&BQn)&&(l=BB(e.dd(),49),(d=tfn(n.e,l))!=l)){if(jL(n,t,sTn(n,t,h=Z3(a,d))),f=null,mA(n.e)&&(i=Fqn((IPn(),Z$t),n.e.Tg(),a))!=itn(n.e.Tg(),n.c)){for(g=axn(n.e.Tg(),a),u=0,c=BB(n.g,119),o=0;o<t;++o)r=c[o],g.rl(r.ak())&&++u;(f=new b4(n.e,9,i,l,d,u,!1)).Ei(new N7(n.e,9,n.c,e,h,t,!1))}return(b=Cvn(w=BB(a,18)))?(f=l.ih(n.e,Awn(l.Tg(),b),null,f),f=BB(d,49).gh(n.e,Awn(d.Tg(),b),null,f)):0!=(w.Bb&h6n)&&(s=-1-Awn(n.e.Tg(),w),f=l.ih(n.e,s,null,null),!BB(d,49).eh()&&(f=BB(d,49).gh(n.e,s,null,f))),f&&f.Fi(),h}return e}function fGn(n){var t,i,r,c,a,u,o,s;for(a=new Wb(n.a.b);a.a<a.c.c.length;)(c=BB(n0(a),81)).b.c=c.g.c,c.b.d=c.g.d;for(s=new xC(RQn,RQn),t=new xC(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);for(o=TX(n.c).a.nc();o.Ob();)u=BB(o.Pb(),46),i=BB(u.b,81),s.a=e.Math.min(s.a,i.g.c),s.b=e.Math.min(s.b,i.g.d),t.a=e.Math.max(t.a,i.g.c+i.g.b),t.b=e.Math.max(t.b,i.g.d+i.g.a);n.d=qx(new xC(s.a,s.b)),n.e=XR(new xC(t.a,t.b),s),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1)}function lGn(n){var t,e,i;for(ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Nf])),e=new Tl(n),i=0;i<e.a.length;++i)mK(t=dnn(e,i).je().a,"layered")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new hf])):mK(t,"force")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new zh])):mK(t,"stress")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Xh])):mK(t,"mrtree")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Pf])):mK(t,"radial")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new yf])):mK(t,"disco")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Gh,new Hh])):mK(t,"sporeOverlap")||mK(t,"sporeCompaction")?ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Tf])):mK(t,"rectpacking")&&ksn(lAt,Pun(Gk(_it,1),HWn,130,0,[new Of]))}function bGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=new wA(n.o),p=t.a/l.a,u=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=GI(mMn(n,(HXn(),ept)))===GI((QEn(),XCt)),w=new Wb(n.j);w.a<w.c.c.length;)switch((b=BB(n0(w),11)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=u);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=u)}for(s=new Wb(n.b);s.a<s.c.c.length;)h=(o=BB(n0(s),70)).n.a+o.o.a/2,f=o.n.b+o.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(o.n.a+=d,o.n.b+=c*a):g-a<0&&h>=0&&(o.n.a+=d*g,o.n.b+=c));n.o.a=t.a,n.o.b=t.b,hon(n,(HXn(),Fgt),(mdn(),new YK(i=BB(Vj(YIt),9),BB(SR(i,i.length),9),0)))}function wGn(n,t,e,i,r,c){if(null!=t&&Xbn(t,AAt,$At))throw Hp(new _y("invalid scheme: "+t));if(!(n||null!=e&&-1==GO(e,YTn(35))&&e.length>0&&(b1(0,e.length),47!=e.charCodeAt(0))))throw Hp(new _y("invalid opaquePart: "+e));if(n&&(null==t||!xT(jAt,t.toLowerCase()))&&null!=e&&Xbn(e,LAt,NAt))throw Hp(new _y(o9n+e));if(n&&null!=t&&xT(jAt,t.toLowerCase())&&!CEn(e))throw Hp(new _y(o9n+e));if(!Ubn(i))throw Hp(new _y("invalid device: "+i));if(!Rhn(r))throw Hp(new _y(null==r?"invalid segments: null":"invalid segment: "+shn(r)));if(null!=c&&-1!=GO(c,YTn(35)))throw Hp(new _y("invalid query: "+c))}function dGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(t,"Calculate Graph Size",1),t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),o=ZJn,s=ZJn,a=n4n,u=n4n,l=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));l.e!=l.i.gc();)d=(h=BB(kpn(l),33)).i,g=h.j,v=h.g,r=h.f,c=BB(ZAn(h,(sWn(),$St)),142),o=e.Math.min(o,d-c.b),s=e.Math.min(s,g-c.d),a=e.Math.max(a,d+v+c.c),u=e.Math.max(u,g+r+c.a);for(b=new xC(o-(w=BB(ZAn(n,(sWn(),XSt)),116)).b,s-w.d),f=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));f.e!=f.i.gc();)Pen(h=BB(kpn(f),33),h.i-b.a),Cen(h,h.j-b.b);p=a-o+(w.b+w.c),i=u-s+(w.d+w.a),Sen(n,p),Men(n,i),t.n&&n&&y0(t,o2(n),(Bsn(),uOt))}function gGn(n){var t,e,i,r,c,a,u,o,s,h;for(i=new Np,a=new Wb(n.e.a);a.a<a.c.c.length;){for(h=0,(r=BB(n0(a),121)).k.c=x8(Ant,HWn,1,0,5,1),e=new Wb(kbn(r));e.a<e.c.c.length;)(t=BB(n0(e),213)).f&&(WB(r.k,t),++h);1==h&&(i.c[i.c.length]=r)}for(c=new Wb(i);c.a<c.c.c.length;)for(r=BB(n0(c),121);1==r.k.c.length;){for(s=BB(n0(new Wb(r.k)),213),n.b[s.c]=s.g,u=s.d,o=s.e,e=new Wb(kbn(r));e.a<e.c.c.length;)Nfn(t=BB(n0(e),213),s)||(t.f?u==t.d||o==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==u?t.d==r?n.b[s.c]+=t.g:n.b[s.c]-=t.g:t.d==r?n.b[s.c]-=t.g:n.b[s.c]+=t.g);y7(u.k,s),y7(o.k,s),r=u==r?s.e:s.d}}function pGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=BB(SJ(n.f,t),23))){for(r=new Kb(new Ob(n.d).a.vc().Kc());r.a.Ob();)if(a=BB(r.a.Pb(),42),u=(e=BB(a.dd(),23)).f,l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new Kb(new Ob(n.d).a.vc().Kc());i.a.Ob();)if(a=BB(i.a.Pb(),42),null!=(f=(e=BB(a.dd(),23)).g))for(s=0,h=(o=f).length;s<h;++s)if(u=o[s],l=t.length,mK(u.substr(u.length-l,l),t)&&(t.length==u.length||46==fV(u,u.length-t.length-1))){if(c)return null;c=e}c&&mZ(n.f,t,c)}return c}function vGn(n,t){var e,i,r,c,a;for(e=new Ik,a=!1,c=0;c<t.length;c++)if(b1(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):GO("GyMLdkHmsSEcDahKzZv",YTn(i))>0?(Ppn(n,e,0),e.a+=String.fromCharCode(i),Ppn(n,e,r=cgn(t,c)),c+=r-1):39==i?c+1<t.length&&(b1(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ppn(n,e,0),e.a+=" ",Ppn(n,e,0);c+1<t.length&&(b1(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ppn(n,e,0),pTn(n)}function mGn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(OTn(i,"Network simplex layering",1),n.b=t,p=4*BB(mMn(t,(HXn(),xpt)),19).a,(g=n.b.a).c.length<1)HSn(i);else{for(d=null,c=spn(a=IKn(n,g),0);c.b!=c.d.c;){for(r=BB(b3(c),15),o=p*CJ(e.Math.sqrt(r.gc())),WKn(Qk(Jk(Yk(B_(u=o_n(r)),o),d),!0),mcn(i,1)),l=n.b.b,w=new Wb(u.a);w.a<w.c.c.length;){for(b=BB(n0(w),121);l.c.length<=b.e;)kG(l,l.c.length,new HX(n.b));PZ(BB(b.f,10),BB(xq(l,b.e),29))}if(a.b>1)for(d=x8(ANt,hQn,25,n.b.b.c.length,15,1),f=0,h=new Wb(n.b.b);h.a<h.c.c.length;)s=BB(n0(h),29),d[f++]=s.a.c.length}g.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.b=null,n.c=null,HSn(i)}}function yGn(n){var t,i,r,c,a,u,o;for(t=0,a=new Wb(n.b.a);a.a<a.c.c.length;)(r=BB(n0(a),189)).b=0,r.c=0;for(ESn(n,0),ewn(n,n.g),kNn(n.c),Zy(n.c),Ffn(),i=_Pt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Mzn(n.c,i)),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.g),kMn(n,0),pHn(n,0),M$n(n,1),ESn(n,1),ewn(n,n.d),kNn(n.c),u=new Wb(n.b.a);u.a<u.c.c.length;)r=BB(n0(u),189),t+=e.Math.abs(r.c);for(o=new Wb(n.b.a);o.a<o.c.c.length;)(r=BB(n0(o),189)).b=0,r.c=0;for(i=HPt,DKn(eO(Mzn(DKn(eO(Mzn(DKn(Zy(Mzn(n.c,i))),jln(i)))),i))),Mzn(n.c,_Pt),Bln(n,n.d),kMn(n,1),pHn(n,1),M$n(n,0),Zy(n.c),c=new Wb(n.b.a);c.a<c.c.c.length;)r=BB(n0(c),189),t+=e.Math.abs(r.c);return t}function kGn(n,t){var e,i,r,c,a,u,o,s,h;if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)i+=2;else if(c>=u&&r<=o)u<=r&&c<=o?(e[h++]=r,e[h++]=c,i+=2):u<=r?(e[h++]=r,e[h++]=o,n.b[i]=o+1,a+=2):c<=o?(e[h++]=u,e[h++]=c,i+=2):(e[h++]=u,e[h++]=o,n.b[i]=o+1);else{if(!(o<r))throw Hp(new dy("Token#intersectRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] & ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}function jGn(n){var t,i,r,c,a,u,o;for(t=new Np,n.g=new Np,n.d=new Np,u=new usn(new Pb(n.f.b).a);u.b;)WB(t,BB(BB((a=ten(u)).dd(),46).b,81)),dA(BB(a.cd(),594).gf())?WB(n.d,BB(a.dd(),46)):WB(n.g,BB(a.dd(),46));for(ewn(n,n.d),ewn(n,n.g),n.c=new sOn(n.b),ej(n.c,(vM(),Gat)),Bln(n,n.d),Bln(n,n.g),gun(t,n.c.a.b),n.e=new xC(RQn,RQn),n.a=new xC(KQn,KQn),r=new Wb(t);r.a<r.c.c.length;)i=BB(n0(r),81),n.e.a=e.Math.min(n.e.a,i.g.c),n.e.b=e.Math.min(n.e.b,i.g.d),n.a.a=e.Math.max(n.a.a,i.g.c+i.g.b),n.a.b=e.Math.max(n.a.b,i.g.d+i.g.a);tj(n.c,new jt),o=0;do{c=yGn(n),++o}while((o<2||c>KVn)&&o<10);tj(n.c,new Et),yGn(n),IU(n.c),fGn(n.f)}function EGn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(qy(TD(mMn(e,(HXn(),wgt)))))for(r=new Wb(e.j);r.a<r.c.c.length;)for(u=0,o=(a=Z0(BB(n0(r),11).g)).length;u<o;++u)(c=a[u]).d.i==e&&qy(TD(mMn(c,dgt)))&&(h=c.c,(s=BB(RX(n.b,h),10))||(hon(s=bXn(h,(QEn(),QCt),h.j,-1,null,null,h.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),h),VW(n.b,h,s),WB(t.a,s)),l=c.d,(f=BB(RX(n.b,l),10))||(hon(f=bXn(l,(QEn(),QCt),l.j,1,null,null,l.o,BB(mMn(t,Udt),103),t),(hWn(),dlt),l),VW(n.b,l,f),WB(t.a,f)),SZ(i=W5(c),BB(xq(s.j,0),11)),MZ(i,BB(xq(f.j,0),11)),JIn(n.a,c,new L_(i,t,(ain(),qvt))),BB(mMn(t,(hWn(),Zft)),21).Fc((bDn(),lft)))}function TGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w;for(OTn(e,"Label dummy switching",1),i=BB(mMn(t,(HXn(),Vdt)),227),pcn(t),r=j$n(t,i),n.a=x8(xNt,qQn,25,t.b.c.length,15,1),$Pn(),h=0,b=(u=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;h<b;++h)if(((c=u[h])==eht||c==Yst||c==nht)&&!BB(SN(r.a,c)?r.b[c.g]:null,15).dc()){Zcn(n,t);break}for(f=0,w=(o=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;f<w;++f)(c=o[f])==eht||c==Yst||c==nht||GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Pun(Gk(uht,1),$Vn,227,0,[Zst,tht,Jst,nht,eht,Yst])).length;s<l;++s)((c=a[s])==eht||c==Yst||c==nht)&&GKn(n,BB(SN(r.a,c)?r.b[c.g]:null,15));n.a=null,HSn(e)}function MGn(n,t){var e,i,r,c,a,u,o,s,h,f,l;switch(n.k.g){case 1:if(i=BB(mMn(n,(hWn(),dlt)),17),(e=BB(mMn(i,glt),74))?qy(TD(mMn(i,Clt)))&&(e=Jon(e)):e=new km,s=BB(mMn(n,hlt),11)){if(t<=(h=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;r5(e,h,e.a,e.a.a)}if(f=BB(mMn(n,flt),11)){if((l=Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;r5(e,l,e.c.b,e.c)}if(e.b>=2){for(a=BB(b3(o=spn(e,0)),8),u=BB(b3(o),8);u.a<t&&o.b!=o.d.c;)a=u,u=BB(b3(o),8);return a.b+(t-a.a)/(u.a-a.a)*(u.b-a.b)}break;case 3:switch(r=(c=BB(mMn(BB(xq(n.j,0),11),(hWn(),dlt)),11)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return Fjn(n).b}function SGn(n){var t,e,i,r,c,a,u,o,s,f;for(c=new Wb(n.d.b);c.a<c.c.c.length;)for(u=new Wb(BB(n0(c),29).a);u.a<u.c.c.length;)!qy(TD(mMn(a=BB(n0(u),10),(HXn(),Tdt))))||h3(hbn(a))?(r=new UV(a.n.a-a.d.b,a.n.b-a.d.d,a.o.a+a.d.b+a.d.c,a.o.b+a.d.d+a.d.a),t=ON(iM(tM(eM(new Wv,a),r),dst),n.a),IN(nM(Xen(new Xv,Pun(Gk(bit,1),HWn,57,0,[t])),t),n.a),o=new Dp,VW(n.e,t,o),(e=F3(new oz(ZL(fbn(a).a.Kc(),new h)))-F3(new oz(ZL(lbn(a).a.Kc(),new h))))<0?Uun(o,!0,(Ffn(),_Pt)):e>0&&Uun(o,!0,(Ffn(),FPt)),a.k==(uSn(),Mut)&&wV(o),VW(n.f,a,t)):((s=(i=BB(iY(hbn(a)),17)).c.i)==a&&(s=i.d.i),f=new rI(s,XR(B$(a.n),s.n)),VW(n.b,a,f))}function PGn(n,t,i){var r,c,a,u,o,s,h,f;switch(OTn(i,"Node promotion heuristic",1),n.g=t,yUn(n),n.q=BB(mMn(t,(HXn(),Sgt)),260),f=BB(mMn(n.g,Mgt),19).a,a=new hi,n.q.g){case 2:case 1:default:_Hn(n,a);break;case 3:for(n.q=(sNn(),Ovt),_Hn(n,a),s=0,o=new Wb(n.a);o.a<o.c.c.length;)u=BB(n0(o),19),s=e.Math.max(s,u.a);s>n.j&&(n.q=Tvt,_Hn(n,a));break;case 4:for(n.q=(sNn(),Ovt),_Hn(n,a),h=0,c=new Wb(n.b);c.a<c.c.c.length;)r=MD(n0(c)),h=e.Math.max(h,(kW(r),r));h>n.k&&(n.q=Pvt,_Hn(n,a));break;case 6:_Hn(n,new od(CJ(e.Math.ceil(n.f.length*f/100))));break;case 5:_Hn(n,new sd(CJ(e.Math.ceil(n.d*f/100))))}oDn(n,t),HSn(i)}function CGn(n,t,e){var i,r,c,a;this.j=n,this.e=qEn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?BB(xq(e,vW(this.o).p),214):null,r=BB(mMn(n,(hWn(),Zft)),21),this.g=r.Hc((bDn(),lft)),this.b=new Np,this.d=new wdn(this.e),a=BB(mMn(this.j,Slt),230),this.q=Han(t,a,this.e),this.k=new aZ(this),c=u6(Pun(Gk(jst,1),HWn,225,0,[this,this.d,this.k,this.q])),t!=(oin(),Omt)||qy(TD(mMn(n,(HXn(),xdt))))?t==Omt&&qy(TD(mMn(n,(HXn(),xdt))))?(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new prn(i,a,BB(this.q,402))):this.c=new vP(t,this):(i=new UEn(this.e),c.c[c.c.length]=i,this.c=new G2(i,a,BB(this.q,402))),WB(c,this.c),CHn(c,this.e),this.s=wXn(this.k)}function IGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=(s=BB(iL(new wg(spn(new bg(t).a.d,0))),86))?BB(mMn(s,(qqn(),ckt)),86):null,r=1;s&&l;){for(a=0,v=0,e=s,i=l,c=0;c<r;c++)e=G8(e),i=G8(i),v+=Gy(MD(mMn(e,(qqn(),okt)))),a+=Gy(MD(mMn(i,okt)));if(p=Gy(MD(mMn(l,(qqn(),fkt)))),g=Gy(MD(mMn(s,fkt))),h=E5(s,l),0<(f=p+a+n.a+h-g-v)){for(u=t,o=0;u&&u!=i;)++o,u=BB(mMn(u,akt),86);if(!u)return;for(d=f/o,u=t;u!=i;)w=Gy(MD(mMn(u,fkt)))+f,hon(u,fkt,w),b=Gy(MD(mMn(u,okt)))+f,hon(u,okt,b),f-=d,u=BB(mMn(u,akt),86)}++r,l=(s=0==s.d.b?ZKn(new bg(t),r):BB(iL(new wg(spn(new bg(s).a.d,0))),86))?BB(mMn(s,ckt),86):null}}function OGn(n,t){var e,i,r,c,a,u,o,s,f;for(u=!0,r=0,o=n.f[t.p],s=t.o.b+n.n,e=n.c[t.p][2],c5(n.a,o,iln(BB(xq(n.a,o),19).a-1+e)),c5(n.b,o,Gy(MD(xq(n.b,o)))-s+e*n.e),++o>=n.i?(++n.i,WB(n.a,iln(1)),WB(n.b,s)):(i=n.c[t.p][1],c5(n.a,o,iln(BB(xq(n.a,o),19).a+1-i)),c5(n.b,o,Gy(MD(xq(n.b,o)))+s-i*n.e)),(n.q==(sNn(),Tvt)&&(BB(xq(n.a,o),19).a>n.j||BB(xq(n.a,o-1),19).a>n.j)||n.q==Pvt&&(Gy(MD(xq(n.b,o)))>n.k||Gy(MD(xq(n.b,o-1)))>n.k))&&(u=!1),c=new oz(ZL(fbn(t).a.Kc(),new h));dAn(c);)a=BB(U5(c),17).c.i,n.f[a.p]==o&&(r+=BB((f=OGn(n,a)).a,19).a,u=u&&qy(TD(f.b)));return n.f[t.p]=o,new rI(iln(r+=n.c[t.p][0]),(hN(),!!u))}function AGn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v;for(l=new xp,u=new Np,rIn(n,i,n.d.fg(),u,l),rIn(n,r,n.d.gg(),u,l),n.b=.2*(g=BAn(wnn(new Rq(null,new w1(u,16)),new Sa)),p=BAn(wnn(new Rq(null,new w1(u,16)),new Pa)),e.Math.min(g,p)),a=0,o=0;o<u.c.length-1;o++)for(l1(o,u.c.length),s=BB(u.c[o],112),d=o+1;d<u.c.length;d++)a+=gHn(n,s,(l1(d,u.c.length),BB(u.c[d],112)));for(b=BB(mMn(t,(hWn(),Slt)),230),a>=2&&(v=QLn(u,!0,b),!n.e&&(n.e=new lg(n)),sgn(n.e,v,u,n.b)),iTn(u,b),czn(u),w=-1,f=new Wb(u);f.a<f.c.c.length;)h=BB(n0(f),112),e.Math.abs(h.s-h.c)<lZn||(w=e.Math.max(w,h.o),n.d.dg(h,c,n.c));return n.d.a.a.$b(),w+1}function $Gn(n,t){var e,i;Gy(MD(mMn(t,(HXn(),ypt))))<2&&hon(t,ypt,2),BB(mMn(t,Udt),103)==(Ffn(),BPt)&&hon(t,Udt,Wln(t)),0==(e=BB(mMn(t,wpt),19)).a?hon(t,(hWn(),Slt),new sbn):hon(t,(hWn(),Slt),new C4(e.a)),null==TD(mMn(t,xgt))&&hon(t,xgt,(hN(),GI(mMn(t,Zdt))===GI((Mbn(),QPt)))),JT(new Rq(null,new w1(t.a,16)),new Rw(n)),JT(wnn(new Rq(null,new w1(t.b,16)),new mt),new Kw(n)),i=new sGn(t),hon(t,(hWn(),Alt),i),h2(n.a),CU(n.a,(yMn(),Rat),BB(mMn(t,Gdt),246)),CU(n.a,Kat,BB(mMn(t,Pgt),246)),CU(n.a,_at,BB(mMn(t,qdt),246)),CU(n.a,Fat,BB(mMn(t,_gt),246)),CU(n.a,Bat,San(BB(mMn(t,Zdt),218))),aA(n.a,LXn(t)),hon(t,Mlt,$qn(n.a,t))}function LGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;return l=n.c[t],b=n.c[e],!((w=BB(mMn(l,(hWn(),clt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(uSn(),Put)&&b.k!=Put,v=(g=BB(mMn(l,rlt),10))!=(p=BB(mMn(b,rlt),10)),m=!!g&&g!=l||!!p&&p!=b,y=omn(l,(kUn(),sIt)),k=omn(b,SIt),m|=omn(l,SIt)||omn(b,sIt),d&&(m&&v||y||k))||l.k==(uSn(),Iut)&&b.k==Cut||b.k==(uSn(),Iut)&&l.k==Cut)&&(h=n.c[t],c=n.c[e],r=fjn(n.e,h,c,(kUn(),CIt)),o=fjn(n.i,h,c,oIt),TNn(n.f,h,c),s=Nsn(n.b,h,c)+BB(r.a,19).a+BB(o.a,19).a+n.f.d,u=Nsn(n.b,c,h)+BB(r.b,19).a+BB(o.b,19).a+n.f.b,n.a&&(f=BB(mMn(h,dlt),11),a=BB(mMn(c,dlt),11),s+=BB((i=qyn(n.g,f,a)).a,19).a,u+=BB(i.b,19).a),s>u)}function NGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(i=BB(mMn(n,(HXn(),ept)),98),u=n.f,a=n.d,o=u.a+a.b+a.c,s=0-a.d-n.c.b,f=u.b+a.d+a.a-n.c.b,h=new Np,l=new Np,c=new Wb(t);c.a<c.c.c.length;){switch(r=BB(n0(c),10),i.g){case 1:case 2:case 3:_Nn(r);break;case 4:w=(b=BB(mMn(r,npt),8))?b.a:0,r.n.a=o*Gy(MD(mMn(r,(hWn(),Tlt))))-w,Jan(r,!0,!1);break;case 5:g=(d=BB(mMn(r,npt),8))?d.a:0,r.n.a=Gy(MD(mMn(r,(hWn(),Tlt))))-g,Jan(r,!0,!1),u.a=e.Math.max(u.a,r.n.a+r.o.a/2)}switch(BB(mMn(r,(hWn(),Qft)),61).g){case 1:r.n.b=s,h.c[h.c.length]=r;break;case 3:r.n.b=f,l.c[l.c.length]=r}}switch(i.g){case 1:case 2:Rfn(h,n),Rfn(l,n);break;case 3:Kfn(h,n),Kfn(l,n)}}function xGn(n,t){var e,i,r,c,a,u,o,s,h,f;for(h=new Np,f=new Lp,c=null,r=0,i=0;i<t.length;++i)switch(Rsn(c,e=t[i])&&(r=Cdn(n,f,h,Kmt,r)),Lx(e,(hWn(),rlt))&&(c=BB(mMn(e,rlt),10)),e.k.g){case 0:for(o=qA(KB(abn(e,(kUn(),sIt)),new xc));Zin(o);)a=BB(P7(o),11),n.d[a.p]=r++,h.c[h.c.length]=a;for(r=Cdn(n,f,h,Kmt,r),s=qA(KB(abn(e,SIt),new xc));Zin(s);)a=BB(P7(s),11),n.d[a.p]=r++,h.c[h.c.length]=a;break;case 3:abn(e,Rmt).dc()||(a=BB(abn(e,Rmt).Xb(0),11),n.d[a.p]=r++,h.c[h.c.length]=a),abn(e,Kmt).dc()||d3(f,e);break;case 1:for(u=abn(e,(kUn(),CIt)).Kc();u.Ob();)a=BB(u.Pb(),11),n.d[a.p]=r++,h.c[h.c.length]=a;abn(e,oIt).Jc(new ZP(f,e))}return Cdn(n,f,h,Kmt,r),h}function DGn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(h=RQn,f=RQn,o=KQn,s=KQn,b=new Wb(t.i);b.a<b.c.c.length;)l=BB(n0(b),65),SA(c=BB(BB(RX(n.g,l.a),46).b,33),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),o=e.Math.max(o,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=BB(ZAn(n.c,(MMn(),bTt)),116),KUn(n.c,o-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),lMn(n.c,-h+w.b,-f+w.d),r=new AL(iQ(n.c));r.e!=r.i.gc();)u=cDn(i=BB(kpn(r),79),!0,!0),d=PMn(i),p=OMn(i),g=new xC(d.i+d.g/2,d.j+d.f/2),a=new xC(p.i+p.g/2,p.j+p.f/2),Ukn(v=XR(new xC(a.a,a.b),g),d.g,d.f),UR(g,v),Ukn(m=XR(new xC(g.a,g.b),a),p.g,p.f),UR(a,m),CA(u,g.a,g.b),PA(u,a.a,a.b)}function RGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b;if(n.c=n.d,l=null==(b=TD(mMn(t,(HXn(),dpt))))||(kW(b),b),c=BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft)),e=!((r=BB(mMn(t,ept),98))==(QEn(),UCt)||r==WCt||r==XCt),!l||!e&&c)f=new Jy(Pun(Gk(jut,1),JZn,37,0,[t]));else{for(h=new Wb(t.a);h.a<h.c.c.length;)BB(n0(h),10).p=0;for(f=new Np,s=new Wb(t.a);s.a<s.c.c.length;)if(i=L_n(n,BB(n0(s),10),null)){for(qan(o=new min,t),hon(o,Xft,BB(i.b,21)),kQ(o.d,t.d),hon(o,Hgt,null),u=BB(i.a,15).Kc();u.Ob();)a=BB(u.Pb(),10),WB(o.a,a),a.a=o;f.Fc(o)}c&&(GI(mMn(t,Cdt))===GI((Bfn(),lut))?n.c=n.b:n.c=n.a)}return GI(mMn(t,Cdt))!==GI((Bfn(),wut))&&(SQ(),f.ad(new xt)),f}function KGn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,Q3n),"ELK Mr. Tree"),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new Na),Y3n),nbn((hAn(),JOt))))),u2(n,Q3n,QJn,Okt),u2(n,Q3n,vZn,20),u2(n,Q3n,VJn,dZn),u2(n,Q3n,pZn,iln(1)),u2(n,Q3n,kZn,(hN(),!0)),u2(n,Q3n,X2n,mpn(Ekt)),u2(n,Q3n,PZn,mpn(Mkt)),u2(n,Q3n,BZn,mpn(Skt)),u2(n,Q3n,SZn,mpn(Pkt)),u2(n,Q3n,CZn,mpn(Tkt)),u2(n,Q3n,MZn,mpn(Ckt)),u2(n,Q3n,IZn,mpn(Akt)),u2(n,Q3n,X3n,mpn(Dkt)),u2(n,Q3n,W3n,mpn(Lkt))}function _Gn(n){n.q||(n.q=!0,n.p=kan(n,0),n.a=kan(n,1),Krn(n.a,0),n.f=kan(n,2),Krn(n.f,1),Rrn(n.f,2),n.n=kan(n,3),Rrn(n.n,3),Rrn(n.n,4),Rrn(n.n,5),Rrn(n.n,6),n.g=kan(n,4),Krn(n.g,7),Rrn(n.g,8),n.c=kan(n,5),Krn(n.c,7),Krn(n.c,8),n.i=kan(n,6),Krn(n.i,9),Krn(n.i,10),Krn(n.i,11),Krn(n.i,12),Rrn(n.i,13),n.j=kan(n,7),Krn(n.j,9),n.d=kan(n,8),Krn(n.d,3),Krn(n.d,4),Krn(n.d,5),Krn(n.d,6),Rrn(n.d,7),Rrn(n.d,8),Rrn(n.d,9),Rrn(n.d,10),n.b=kan(n,9),Rrn(n.b,0),Rrn(n.b,1),n.e=kan(n,10),Rrn(n.e,1),Rrn(n.e,2),Rrn(n.e,3),Rrn(n.e,4),Krn(n.e,5),Krn(n.e,6),Krn(n.e,7),Krn(n.e,8),Krn(n.e,9),Krn(n.e,10),Rrn(n.e,11),n.k=kan(n,11),Rrn(n.k,0),Rrn(n.k,1),n.o=jan(n,12),n.s=jan(n,13))}function FGn(n,t){t.dc()&&eH(n.j,!0,!0,!0,!0),Nfn(t,(kUn(),dIt))&&eH(n.j,!0,!0,!0,!1),Nfn(t,hIt)&&eH(n.j,!1,!0,!0,!0),Nfn(t,EIt)&&eH(n.j,!0,!0,!1,!0),Nfn(t,MIt)&&eH(n.j,!0,!1,!0,!0),Nfn(t,gIt)&&eH(n.j,!1,!0,!0,!1),Nfn(t,fIt)&&eH(n.j,!1,!0,!1,!0),Nfn(t,TIt)&&eH(n.j,!0,!1,!1,!0),Nfn(t,jIt)&&eH(n.j,!0,!1,!0,!1),Nfn(t,yIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,bIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,yIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,lIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,kIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,mIt)&&eH(n.j,!0,!0,!0,!0),Nfn(t,vIt)&&eH(n.j,!0,!0,!0,!0)}function BGn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(c=new Np,s=new Wb(i);s.a<s.c.c.length;)if(a=null,(u=BB(n0(s),441)).f==(ain(),qvt))for(w=new Wb(u.e);w.a<w.c.c.length;)vW(g=(b=BB(n0(w),17)).d.i)==t?Stn(n,t,u,b,u.b,b.d):!e||wan(g,e)?GMn(n,t,u,i,b):((l=LHn(n,t,e,b,u.b,qvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l));else for(f=new Wb(u.e);f.a<f.c.c.length;)if(vW(d=(h=BB(n0(f),17)).c.i)==t)Stn(n,t,u,h,h.c,u.b);else{if(!e||wan(d,e))continue;(l=LHn(n,t,e,h,u.b,Hvt,a))!=a&&(c.c[c.c.length]=l),l.c&&(a=l)}for(o=new Wb(c);o.a<o.c.c.length;)u=BB(n0(o),441),-1!=E7(t.a,u.a,0)||WB(t.a,u.a),u.c&&(r.c[r.c.length]=u)}function HGn(n,t,e){var i,r,c,a,u,o,s,h;for(o=new Np,u=new Wb(t.a);u.a<u.c.c.length;)for(h=abn(BB(n0(u),10),(kUn(),oIt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).g);r.a<r.c.c.length;)!b5(i=BB(n0(r),17))&&i.c.i.c==i.d.i.c||b5(i)||i.d.i.c!=e||(o.c[o.c.length]=i);for(a=ean(e.a).Kc();a.Ob();)for(h=abn(BB(a.Pb(),10),(kUn(),CIt)).Kc();h.Ob();)for(r=new Wb(BB(h.Pb(),11).e);r.a<r.c.c.length;)if((b5(i=BB(n0(r),17))||i.c.i.c!=i.d.i.c)&&!b5(i)&&i.c.i.c==t){for(Px((s=new M2(o,o.c.length)).b>0),c=BB(s.a.Xb(s.c=--s.b),17);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,Px(s.b>0),c=BB(s.a.Xb(s.c=--s.b),17);s.b>0&&fW(s)}}function qGn(n,t,e){var i,r,c,a,u,o,s,h,f;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(i=Cfn((IPn(),Z$t),t).$k())return i.Aj().Nh().Ih(i,e);if(a=Cfn(Z$t,t).al()){if(null==e)return null;if((u=BB(e,15)).dc())return"";for(f=new Sk,c=u.Kc();c.Ob();)r=c.Pb(),cO(f,a.Aj().Nh().Ih(a,r)),f.a+=" ";return KO(f,f.a.length-1)}if(!(h=Cfn(Z$t,t).bl()).dc()){for(s=h.Kc();s.Ob();)if((o=BB(s.Pb(),148)).wj(e))try{if(null!=(f=o.Aj().Nh().Ih(o,e)))return f}catch(l){if(!cL(l=lun(l),102))throw Hp(l)}throw Hp(new _y("Invalid value: '"+e+"' for datatype :"+t.ne()))}return BB(t,834).Fj(),null==e?null:cL(e,172)?""+BB(e,172).a:tsn(e)==mtt?H$(IOt[0],BB(e,199)):Bbn(e)}function GGn(n){var t,i,r,c,a,u,o,s,h;for(s=new YT,u=new YT,c=new Wb(n);c.a<c.c.c.length;)(i=BB(n0(c),128)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&r5(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&r5(u,i,u.c.b,u.c);for(a=-1;0!=s.b;)for(t=new Wb((i=BB(tkn(s,0),128)).t);t.a<t.c.c.length;)(h=BB(n0(t),268).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&r5(s,h,s.c.b,s.c);if(a>-1){for(r=spn(u,0);r.b!=r.d.c;)(i=BB(b3(r),128)).v=a;for(;0!=u.b;)for(t=new Wb((i=BB(tkn(u,0),128)).i);t.a<t.c.c.length;)0==(o=BB(n0(t),268).a).r.a.gc()&&(o.v=e.Math.min(o.v,i.v-1),--o.u,0==o.u&&r5(u,o,u.c.b,u.c))}}function zGn(n,t,i,r,c){var a,u,o,s;return s=RQn,u=!1,a=!!(o=zBn(n,XR(new xC(t.a,t.b),n),UR(new xC(i.a,i.b),c),XR(new xC(r.a,r.b),i)))&&!(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n||e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n),(o=zBn(n,XR(new xC(t.a,t.b),n),i,c))&&((e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a?s=e.Math.min(s,lW(XR(o,i))):u=!0),(o=zBn(n,XR(new xC(t.a,t.b),n),r,c))&&(u||(e.Math.abs(o.a-n.a)<=s5n&&e.Math.abs(o.b-n.b)<=s5n)==(e.Math.abs(o.a-t.a)<=s5n&&e.Math.abs(o.b-t.b)<=s5n)||a)&&(s=e.Math.min(s,lW(XR(o,r)))),s}function UGn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,_Zn),FZn),"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),gZn))),u2(n,_Zn,jZn,mpn(kat)),u2(n,_Zn,TZn,(hN(),!0)),u2(n,_Zn,PZn,mpn(Tat)),u2(n,_Zn,BZn,mpn(Mat)),u2(n,_Zn,SZn,mpn(Sat)),u2(n,_Zn,CZn,mpn(Eat)),u2(n,_Zn,MZn,mpn(Pat)),u2(n,_Zn,IZn,mpn(Cat)),u2(n,_Zn,NZn,mpn(yat)),u2(n,_Zn,DZn,mpn(vat)),u2(n,_Zn,RZn,mpn(mat)),u2(n,_Zn,KZn,mpn(jat)),u2(n,_Zn,xZn,mpn(pat))}function XGn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Interactive crossing minimization",1),a=0,c=new Wb(n.b);c.a<c.c.c.length;)(i=BB(n0(c),29)).p=a++;for(d=new Rj((l=qEn(n)).length),CHn(new Jy(Pun(Gk(jst,1),HWn,225,0,[d])),l),w=0,a=0,r=new Wb(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Wb((i=BB(n0(r),29)).a);h.a<h.c.c.length;)for((o=BB(n0(h),10)).n.a>0&&(e+=o.n.a+o.o.a/2,++f),b=new Wb(o.j);b.a<b.c.c.length;)BB(n0(b),11).p=w++;for(f>0&&(e/=f),g=x8(xNt,qQn,25,i.a.c.length,15,1),u=0,s=new Wb(i.a);s.a<s.c.c.length;)(o=BB(n0(s),10)).p=u++,g[o.p]=MGn(o,e),o.k==(uSn(),Put)&&hon(o,(hWn(),plt),g[o.p]);SQ(),m$(i.a,new Gd(g)),r_n(d,l,a,!0),++a}HSn(t)}function WGn(n,t){var e,i,r,c,a,u,o,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(T$n(n),qHn(n),T$n(s),qHn(s),e=x8(ANt,hQn,25,n.b.length+s.b.length,15,1),h=0,i=0,a=0;i<n.b.length&&a<s.b.length;)if(r=n.b[i],c=n.b[i+1],u=s.b[a],o=s.b[a+1],c<u)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=u&&r<=o)u<=r&&c<=o?i+=2:u<=r?(n.b[i]=o+1,a+=2):c<=o?(e[h++]=r,e[h++]=u-1,i+=2):(e[h++]=r,e[h++]=u-1,n.b[i]=o+1,a+=2);else{if(!(o<r))throw Hp(new dy("Token#subtractRanges(): Internal Error: ["+n.b[i]+","+n.b[i+1]+"] - ["+s.b[a]+","+s.b[a+1]+"]"));a+=2}for(;i<n.b.length;)e[h++]=n.b[i++],e[h++]=n.b[i++];n.b=x8(ANt,hQn,25,h,15,1),aHn(e,0,n.b,0,h)}}else kGn(n,t)}function VGn(n){var t,e,i,r,c,a,u;if(!n.A.dc()){if(n.A.Hc((mdn(),KIt))&&(BB(oV(n.b,(kUn(),sIt)),124).k=!0,BB(oV(n.b,SIt),124).k=!0,t=n.q!=(QEn(),WCt)&&n.q!=XCt,Nl(BB(oV(n.b,oIt),124),t),Nl(BB(oV(n.b,CIt),124),t),Nl(n.g,t),n.A.Hc(_It)&&(BB(oV(n.b,sIt),124).j=!0,BB(oV(n.b,SIt),124).j=!0,BB(oV(n.b,oIt),124).k=!0,BB(oV(n.b,CIt),124).k=!0,n.g.k=!0)),n.A.Hc(RIt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,u=n.B.Hc((n_n(),XIt)),c=0,a=(r=tpn()).length;c<a;++c)i=r[c],(e=BB(oV(n.i,i),306))&&(agn(i)?(e.j=!0,e.k=!0):(e.j=!u,e.k=!u));n.A.Hc(DIt)&&n.B.Hc((n_n(),UIt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function QGn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;for(e=new Wb(n.e.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),o=(f=n.i[i.p]).a.e,u=f.d.e,i.n.b=o,d=u-o-i.o.b,t=AHn(i),bvn(),h=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197),t&&(h==fvt||h==hvt)&&(i.o.b+=d),t&&(h==bvt||h==fvt||h==hvt)){for(b=new Wb(i.j);b.a<b.c.c.length;)l=BB(n0(b),11),(kUn(),bIt).Hc(l.j)&&(s=BB(RX(n.k,l),121),l.n.b=s.e-o);for(a=new Wb(i.b);a.a<a.c.c.length;)c=BB(n0(a),70),(w=BB(mMn(i,$gt),21)).Hc((n$n(),NCt))?c.n.b+=d:w.Hc(xCt)&&(c.n.b+=d/2);(h==fvt||h==hvt)&&abn(i,(kUn(),SIt)).Jc(new ag(d))}}function YGn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(o=new H8(null,null)).a[1]=n.b,f=o;f.a[r];)s=r,u=l,l=f,f=f.a[r],r=(i=n.a.ue(t,f.d))<0?0:1,0==i&&(!e.c||cV(f.e,e.d))&&(a=f),f&&f.b||Vy(f.a[r])||(Vy(f.a[1-r])?l=l.a[s]=wrn(f,r):Vy(f.a[1-r])||(b=l.a[1-s])&&(Vy(b.a[1-s])||Vy(b.a[s])?(c=u.a[1]==l?1:0,Vy(b.a[s])?u.a[c]=r2(l,s):Vy(b.a[1-s])&&(u.a[c]=wrn(l,s)),f.b=u.a[c].b=!0,u.a[c].a[0].b=!1,u.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&&(bMn(n,o,a,h=new H8(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=o.a[1],n.b&&(n.b.b=!1),e.b}function JGn(n){var t,i,r,c,a,u,o,s,h,f,l,b;for(c=new Wb(n.a.a.b);c.a<c.c.c.length;)for(s=(r=BB(n0(c),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),r.a!=o.a&&(l=dA(n.a.d)?n.a.g.Oe(r,o):n.a.g.Pe(r,o),a=r.b.a+r.d.b+l-o.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),Z7(r,o)?(u=AN(new qv,n.d),t=(h=CJ(e.Math.ceil(o.b.a-r.b.a)))-(o.b.a-r.b.a),i=r,(f=f3(r).a)||(f=f3(o).a,t=-t,i=o),f&&(i.b.a-=t,f.n.a-=t),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,h)),1),u),n.c[r.a.d])),UNn(aM(cM(uM(rM(new Hv,e.Math.max(0,-h)),1),u),n.c[o.a.d]))):(b=1,(cL(r.g,145)&&cL(o.g,10)||cL(o.g,145)&&cL(r.g,10))&&(b=2),UNn(aM(cM(uM(rM(new Hv,CJ(a)),b),n.c[r.a.d]),n.c[o.a.d]))))}function ZGn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(i)for(r=-1,f=new M2(t,0);f.b<f.d.gc();){if(Px(f.b<f.d.gc()),o=BB(f.d.Xb(f.c=f.b++),10),null==(l=n.c[o.c.p][o.p].a)){for(u=r+1,a=new M2(t,f.b);a.b<a.d.gc();)if(null!=(b=wL(n,(Px(a.b<a.d.gc()),BB(a.d.Xb(a.c=a.b++),10))).a)){kW(b),u=b;break}l=(r+u)/2,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=(kW(l),l),n.c[o.c.p][o.p].b=1}kW(l),r=l}else{for(c=0,h=new Wb(t);h.a<h.c.c.length;)o=BB(n0(h),10),null!=n.c[o.c.p][o.p].a&&(c=e.Math.max(c,Gy(n.c[o.c.p][o.p].a)));for(c+=2,s=new Wb(t);s.a<s.c.c.length;)o=BB(n0(s),10),null==n.c[o.c.p][o.p].a&&(l=H$n(n.i,24)*uYn*c-1,n.c[o.c.p][o.p].a=l,n.c[o.c.p][o.p].d=l,n.c[o.c.p][o.p].b=1)}}function nzn(){RO(BAt,new ts),RO(KAt,new ls),RO(qAt,new Es),RO(HAt,new Is),RO(GAt,new Os),RO(XAt,new As),RO(WAt,new $s),RO(HOt,new Ls),RO(BOt,new zo),RO(qOt,new Uo),RO(LOt,new Xo),RO(QAt,new Wo),RO(GOt,new Vo),RO(YAt,new Qo),RO(JAt,new Yo),RO(FAt,new Jo),RO(_At,new Zo),RO(X$t,new ns),RO(VAt,new es),RO(O$t,new is),RO(ktt,new rs),RO(Gk(NNt,1),new cs),RO(Ttt,new as),RO(Stt,new us),RO(mtt,new os),RO(_Nt,new ss),RO(Ptt,new hs),RO(uAt,new fs),RO(yAt,new bs),RO(oLt,new ws),RO($$t,new ds),RO(Ctt,new gs),RO(Att,new ps),RO($nt,new vs),RO(Rtt,new ms),RO(Nnt,new ys),RO(iLt,new ks),RO(FNt,new js),RO(_tt,new Ts),RO(Qtt,new Ms),RO(sAt,new Ss),RO(BNt,new Ps)}function tzn(n,t,e){var i,r,c,a,u,o,s,h,f;for(!e&&(e=Gun(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),o=u=new PD(rbn(fan(t.q.getTime()),r)),u.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,o=new PD(rbn(fan(t.q.getTime()),r))),h=new Ik,s=n.a.length,c=0;c<s;)if((i=fV(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&fV(n.a,a)==i;++a);aWn(h,i,a-c,u,o,e),c=a}else if(39==i){if(++c<s&&39==fV(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=fV(n.a,a);)++a;if(a>=s)throw Hp(new _y("Missing trailing '"));a+1<s&&39==fV(n.a,a+1)?++a:f=!0,oO(h,fx(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function ezn(n){var t,e,i,r,c,a,u,o;for(t=null,i=new Wb(n);i.a<i.c.c.length;)Gy(lL((e=BB(n0(i),233)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Np),t.c[t.c.length]=e);if(t)for(;0!=t.c.length;){if((e=BB(s6(t,0),233)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Np),c=new Wb(e.b);c.a<c.c.c.length;)if(zy(lL((r=BB(n0(c),233)).g,r.d[0]).a)==zy(lL(e.g,e.d[0]).a)){if(E7(n,r,0)>E7(n,e,0))return new rI(r,e)}else if(Gy(lL(r.g,r.d[0]).a)>Gy(lL(e.g,e.d[0]).a))return new rI(r,e);for(u=(!e.e&&(e.e=new Np),e.e).Kc();u.Ob();)!(a=BB(u.Pb(),233)).b&&(a.b=new Np),LZ(0,(o=a.b).c.length),MS(o.c,0,e),a.c==o.c.length&&(t.c[t.c.length]=a)}return null}function izn(n,t){var e,i,r,c,a,u;if(null==n)return zWn;if(null!=t.a.zc(n,t))return"[...]";for(e=new $an(FWn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&0!=(4&tsn(i).i)?!Array.isArray(i)||(u=vnn(i))>=14&&u<=16?cL(i,177)?b6(e,RCn(BB(i,177))):cL(i,190)?b6(e,JEn(BB(i,190))):cL(i,195)?b6(e,kSn(BB(i,195))):cL(i,2012)?b6(e,ZEn(BB(i,2012))):cL(i,48)?b6(e,DCn(BB(i,48))):cL(i,364)?b6(e,gIn(BB(i,364))):cL(i,832)?b6(e,xCn(BB(i,832))):cL(i,104)&&b6(e,NCn(BB(i,104))):t.a._b(i)?(e.a?oO(e.a,e.b):e.a=new lN(e.d),aO(e.a,"[...]")):b6(e,izn(een(i),new $q(t))):b6(e,null==i?zWn:Bbn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function rzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;for(w=qSn(cDn(t,!1,!1)),r&&(w=Jon(w)),g=Gy(MD(ZAn(t,(Epn(),pct)))),Px(0!=w.b),b=BB(w.a.a.c,8),h=BB(Dpn(w,1),8),w.b>2?(gun(s=new Np,new s1(w,1,w.b)),qan(d=new EAn(XXn(s,g+n.a)),t),i.c[i.c.length]=d):d=BB(RX(n.b,r?PMn(t):OMn(t)),266),u=PMn(t),r&&(u=OMn(t)),a=iPn(b,u),o=g+n.a,a.a?(o+=e.Math.abs(b.b-h.b),l=new xC(h.a,(h.b+b.b)/2)):(o+=e.Math.abs(b.a-h.a),l=new xC((h.a+b.a)/2,h.b)),VW(r?n.d:n.c,t,new Imn(d,a,l,o)),VW(n.b,t,d),!t.n&&(t.n=new eU(zOt,t,1,7)),f=new AL(t.n);f.e!=f.i.gc();)c=JRn(n,BB(kpn(f),137),!0,0,0),i.c[i.c.length]=c}function czn(n){var t,i,r,c,a,u,o,s,h;for(s=new Np,u=new Np,a=new Wb(n);a.a<a.c.c.length;)Vl(r=BB(n0(a),112),r.f.c.length),Ql(r,r.k.c.length),0==r.d&&(s.c[s.c.length]=r),0==r.i&&0==r.e.b&&(u.c[u.c.length]=r);for(i=-1;0!=s.c.length;)for(t=new Wb((r=BB(s6(s,0),112)).k);t.a<t.c.c.length;)Yl(h=BB(n0(t),129).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Vl(h,h.d-1),0==h.d&&(s.c[s.c.length]=h);if(i>-1){for(c=new Wb(u);c.a<c.c.c.length;)(r=BB(n0(c),112)).o=i;for(;0!=u.c.length;)for(t=new Wb((r=BB(s6(u,0),112)).f);t.a<t.c.c.length;)(o=BB(n0(t),129).a).e.b>0||(Yl(o,e.Math.min(o.o,r.o-1)),Ql(o,o.i-1),0==o.i&&(u.c[u.c.length]=o))}}function azn(n,t,e){var i,r,c,a,u;if(u=n.c,!t&&(t=L$t),n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&(a=new nU(n,1,2,u,n.c),e?e.Ei(a):e=a),u!=t)if(cL(n.Cb,284))n.Db>>16==-10?e=BB(n.Cb,284).nk(t,e):n.Db>>16==-15&&(!t&&(gWn(),t=l$t),!u&&(gWn(),u=l$t),n.Cb.nh()&&(a=new N7(n.Cb,1,13,u,t,uvn(H7(BB(n.Cb,59)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,88))n.Db>>16==-23&&(cL(t,88)||(gWn(),t=d$t),cL(u,88)||(gWn(),u=d$t),n.Cb.nh()&&(a=new N7(n.Cb,1,10,u,t,uvn(a4(BB(n.Cb,26)),n),!1),e?e.Ei(a):e=a));else if(cL(n.Cb,444))for(!(c=BB(n.Cb,836)).b&&(c.b=new Tp(new xm)),r=new Mp(new usn(new Pb(c.b.a).a));r.a.b;)e=azn(i=BB(ten(r.a).cd(),87),kLn(i,c),e);return e}function uzn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(a=qy(TD(ZAn(n,(HXn(),wgt)))),l=BB(ZAn(n,cpt),21),o=!1,s=!1,f=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));!(f.e==f.i.gc()||o&&s);){for(c=BB(kpn(f),118),u=0,r=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!c.d&&(c.d=new hK(_Ot,c,8,5)),c.d),(!c.e&&(c.e=new hK(_Ot,c,7,4)),c.e)])));dAn(r)&&(i=BB(U5(r),79),h=a&&QIn(i)&&qy(TD(ZAn(i,dgt))),e=bqn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),c)?n==JJ(PTn(BB(Wtn((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c),0),82))):n==JJ(PTn(BB(Wtn((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b),0),82))),!((h||e)&&++u>1)););(u>0||l.Hc((lIn(),eIt))&&(!c.n&&(c.n=new eU(zOt,c,1,7)),c.n).i>0)&&(o=!0),u>1&&(s=!0)}o&&t.Fc((bDn(),lft)),s&&t.Fc((bDn(),bft))}function ozn(n){var t,i,r,c,a,u,o,s,h,f,l,b;if((b=BB(ZAn(n,(sWn(),KSt)),21)).dc())return null;if(o=0,u=0,b.Hc((mdn(),KIt))){for(f=BB(ZAn(n,uPt),98),r=2,i=2,c=2,a=2,t=JJ(n)?BB(ZAn(JJ(n),bSt),103):BB(ZAn(n,bSt),103),h=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=BB(kpn(h),118),(l=BB(ZAn(s,wPt),61))==(kUn(),PIt)&&(l=OFn(s,t),Ypn(s,wPt,l)),f==(QEn(),XCt))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}o=e.Math.max(r,c),u=e.Math.max(i,a)}return KUn(n,o,u,!0,!0)}function szn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(m=BB(P4(ytn(AV(new Rq(null,new w1(t.d,16)),new $d(i)),new Ld(i)),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)]))),15),l=DWn,f=_Vn,s=new Wb(t.b.j);s.a<s.c.c.length;)(o=BB(n0(s),11)).j==i&&(l=e.Math.min(l,o.p),f=e.Math.max(f,o.p));if(l==DWn)for(u=0;u<m.gc();u++)g9(BB(m.Xb(u),101),i,u);else for(Zq(y=x8(ANt,hQn,25,c.length,15,1),y.length),v=m.Kc();v.Ob();){for(p=BB(v.Pb(),101),a=BB(RX(n.b,p),177),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,k=new Rv,b=0;b<c.length;b++)c[w][b]&&TU(k,iln(y[b]));for(;FT(k,iln(h));)++h}for(g9(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(y[p.i.c]=h)}}function hzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(c=null,r=new Wb(t.a);r.a<r.c.c.length;)AHn(i=BB(n0(r),10))?(h=new GV(i,!0,o=AN(oM(new qv,i),n.f),s=AN(oM(new qv,i),n.f)),f=i.o.b,bvn(),b=1e4,(l=(i.q?i.q:(SQ(),SQ(),het))._b((HXn(),Rgt))?BB(mMn(i,Rgt),197):BB(mMn(vW(i),Kgt),197))==hvt&&(b=1),w=UNn(aM(cM(rM(uM(new Hv,b),CJ(e.Math.ceil(f))),o),s)),l==fvt&&TU(n.d,w),O_n(n,ean(abn(i,(kUn(),CIt))),h),O_n(n,abn(i,oIt),h),a=h):(d=AN(oM(new qv,i),n.f),JT(AV(new Rq(null,new w1(i.j,16)),new Bc),new tC(n,d)),a=new GV(i,!1,d,d)),n.i[i.p]=a,c&&(u=c.c.d.a+K$(n.n,c.c,i)+i.d.d,c.b||(u+=c.c.o.b),UNn(aM(cM(uM(rM(new Hv,CJ(e.Math.ceil(u))),0),c.d),a.a))),c=a}function fzn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g;for(OTn(t,"Label dummy insertions",1),b=new Np,u=Gy(MD(mMn(n,(HXn(),jpt)))),f=Gy(MD(mMn(n,Spt))),l=BB(mMn(n,Udt),103),w=new Wb(n.a);w.a<w.c.c.length;)for(a=new oz(ZL(lbn(BB(n0(w),10)).a.Kc(),new h));dAn(a);)if((c=BB(U5(a),17)).c.i!=c.d.i&&tL(c.b,nst)){for(i=oLn(n,c,g=Etn(c),d=sx(c.b.c.length)),b.c[b.c.length]=i,r=i.o,o=new M2(c.b,0);o.b<o.d.gc();)Px(o.b<o.d.gc()),GI(mMn(s=BB(o.d.Xb(o.c=o.b++),70),Ydt))===GI((Rtn(),zPt))&&(l==(Ffn(),HPt)||l==KPt?(r.a+=s.o.a+f,r.b=e.Math.max(r.b,s.o.b)):(r.a=e.Math.max(r.a,s.o.a),r.b+=s.o.b+f),d.c[d.c.length]=s,fW(o));l==(Ffn(),HPt)||l==KPt?(r.a-=f,r.b+=u+g):r.b+=u-f+g}gun(n.a,b),HSn(t)}function lzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w;for(l=XDn(n,t,a=new dOn(t)),w=e.Math.max(Gy(MD(mMn(t,(HXn(),agt)))),1),f=new Wb(l.a);f.a<f.c.c.length;)h=BB(n0(f),46),s=Bgn(BB(h.a,8),BB(h.b,8),w),zH(i,new xC(s.c,s.d)),zH(i,_x(new xC(s.c,s.d),s.b,0)),zH(i,_x(new xC(s.c,s.d),0,s.a)),zH(i,_x(new xC(s.c,s.d),s.b,s.a));switch(b=a.d,o=Bgn(BB(l.b.a,8),BB(l.b.b,8),w),b==(kUn(),CIt)||b==oIt?(r.c[b.g]=e.Math.min(r.c[b.g],o.d),r.b[b.g]=e.Math.max(r.b[b.g],o.d+o.a)):(r.c[b.g]=e.Math.min(r.c[b.g],o.c),r.b[b.g]=e.Math.max(r.b[b.g],o.c+o.b)),c=KQn,u=a.c.i.d,b.g){case 4:c=u.c;break;case 2:c=u.b;break;case 1:c=u.a;break;case 3:c=u.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function bzn(n){var t,e,i,r;if(-1!=(t=GO(e=null!=n.D?n.D:n.B,YTn(91)))){i=e.substr(0,t),r=new Sk;do{r.a+="["}while(-1!=(t=lx(e,91,++t)));mK(i,$Wn)?r.a+="Z":mK(i,S9n)?r.a+="B":mK(i,P9n)?r.a+="C":mK(i,C9n)?r.a+="D":mK(i,I9n)?r.a+="F":mK(i,O9n)?r.a+="I":mK(i,A9n)?r.a+="J":mK(i,$9n)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!cL(c=lun(c),60))throw Hp(c)}}else if(-1==GO(e,YTn(46))){if(mK(e,$Wn))return $Nt;if(mK(e,S9n))return NNt;if(mK(e,P9n))return ONt;if(mK(e,C9n))return xNt;if(mK(e,I9n))return DNt;if(mK(e,O9n))return ANt;if(mK(e,A9n))return LNt;if(mK(e,$9n))return RNt}return null}function wzn(n,t,e){var i,r,c,a,u,o,s,h;for(qan(s=new $vn(e),t),hon(s,(hWn(),dlt),t),s.o.a=t.g,s.o.b=t.f,s.n.a=t.i,s.n.b=t.j,WB(e.a,s),VW(n.a,t,s),(0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i||qy(TD(ZAn(t,(HXn(),wgt)))))&&hon(s,_ft,(hN(),!0)),o=BB(mMn(e,Zft),21),(h=BB(mMn(s,(HXn(),ept)),98))==(QEn(),YCt)?hon(s,ept,QCt):h!=QCt&&o.Fc((bDn(),dft)),i=BB(mMn(e,Udt),103),u=new AL((!t.c&&(t.c=new eU(XOt,t,9,9)),t.c));u.e!=u.i.gc();)qy(TD(ZAn(a=BB(kpn(u),118),Ggt)))||Zzn(n,a,s,o,i,h);for(c=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));c.e!=c.i.gc();)!qy(TD(ZAn(r=BB(kpn(c),137),Ggt)))&&r.a&&WB(s.b,Hhn(r));return qy(TD(mMn(s,Tdt)))&&o.Fc((bDn(),hft)),qy(TD(mMn(s,bgt)))&&(o.Fc((bDn(),wft)),o.Fc(bft),hon(s,ept,QCt)),s}function dzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;u=BB(RX(t.c,n),459),g=t.a.c,o=t.a.c+t.a.b,a=(E=u.f)<(T=u.a),b=new xC(g,E),p=new xC(o,T),w=new xC(r=(g+o)/2,E),v=new xC(r,T),c=eNn(n,E,T),y=g1(t.B),k=new xC(r,c),j=g1(t.D),e=lon(Pun(Gk(PMt,1),sVn,8,0,[y,k,j])),f=!1,(d=t.B.i)&&d.c&&u.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(cNn(i=ion(BB(xq(d.c.a,h),10)),y,e[0])||Bz(i,y,e[0]))):f=!0),l=!1,(m=t.D.i)&&m.c&&u.e&&(a&&m.p>0||!a&&m.p<m.c.a.c.length-1?(h=m.p,a?--h:++h,l=!(cNn(i=ion(BB(xq(m.c.a,h),10)),e[0],j)||Bz(i,e[0],j))):l=!0),f&&l&&DH(n.a,k),f||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[b,w])),l||nin(n.a,Pun(Gk(PMt,1),sVn,8,0,[v,p]))}function gzn(n,t){var e,i,r,c,a,u,o;if(cL(n.Ug(),160)?(gzn(BB(n.Ug(),160),t),t.a+=" > "):t.a+="Root ",mK((e=n.Tg().zb).substr(0,3),"Elk")?oO(t,e.substr(3)):t.a+=""+e,r=n.zg())oO((t.a+=" ",t),r);else if(cL(n,354)&&(o=BB(n,137).a))oO((t.a+=" ",t),o);else{for(c=new AL(n.Ag());c.e!=c.i.gc();)if(o=BB(kpn(c),137).a)return void oO((t.a+=" ",t),o);if(cL(n,352)&&(!(i=BB(n,79)).b&&(i.b=new hK(KOt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new hK(KOt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new cx((!i.b&&(i.b=new hK(KOt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=FWn),gzn(BB(kpn(a),160),t);for(t.a+=e1n,u=new cx((!i.c&&(i.c=new hK(KOt,i,5,8)),i.c));u.e!=u.i.gc();)u.e>0&&(t.a+=FWn),gzn(BB(kpn(u),160),t);t.a+=")"}}}function pzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(c=BB(mMn(n,(hWn(),dlt)),79)){for(i=n.a,UR(r=new wA(e),$jn(n)),wan(n.d.i,n.c.i)?(l=n.c,XR(f=Aon(Pun(Gk(PMt,1),sVn,8,0,[l.n,l.a])),e)):f=g1(n.c),r5(i,f,i.a,i.a.a),b=g1(n.d),null!=mMn(n,Rlt)&&UR(b,BB(mMn(n,Rlt),8)),r5(i,b,i.c.b,i.c),Ztn(i,r),Lin(a=cDn(c,!0,!0),BB(Wtn((!c.b&&(c.b=new hK(KOt,c,4,7)),c.b),0),82)),Nin(a,BB(Wtn((!c.c&&(c.c=new hK(KOt,c,5,8)),c.c),0),82)),VFn(i,a),h=new Wb(n.b);h.a<h.c.c.length;)s=BB(n0(h),70),Sen(u=BB(mMn(s,dlt),137),s.o.a),Men(u,s.o.b),SA(u,s.n.a+r.a,s.n.b+r.b),Ypn(u,(Irn(),tst),TD(mMn(s,tst)));(o=BB(mMn(n,(HXn(),vgt)),74))?(Ztn(o,r),Ypn(c,vgt,o)):Ypn(c,vgt,null),t==(Mbn(),JPt)?Ypn(c,Zdt,JPt):Ypn(c,Zdt,null)}}function vzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(b=t.c.length,l=0,f=new Wb(n.b);f.a<f.c.c.length;)if(0!=(p=(h=BB(n0(f),29)).a).c.length){for(s=0,v=null,r=BB(n0(g=new Wb(p)),10),c=null;r;){if((c=BB(xq(t,r.p),257)).c>=0){for(o=null,u=new M2(h.a,s+1);u.b<u.d.gc()&&(Px(u.b<u.d.gc()),a=BB(u.d.Xb(u.c=u.b++),10),!((o=BB(xq(t,a.p),257)).d==c.d&&o.c<c.c));)o=null;o&&(v&&(c5(i,r.p,iln(BB(xq(i,r.p),19).a-1)),BB(xq(e,v.p),15).Mc(c)),c=wTn(c,r,b++),t.c[t.c.length]=c,WB(e,new Np),v?(BB(xq(e,v.p),15).Fc(c),WB(i,iln(1))):WB(i,iln(0)))}w=null,g.a<g.c.c.length&&(w=BB(n0(g),10),d=BB(xq(t,w.p),257),BB(xq(e,r.p),15).Fc(d),c5(i,w.p,iln(BB(xq(i,w.p),19).a+1))),c.d=l,c.c=s++,v=r,r=w}++l}}function mzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;return o=n,h=XR(new xC(t.a,t.b),n),s=i,f=XR(new xC(r.a,r.b),i),l=o.a,g=o.b,w=s.a,v=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(m=f.b),h$(),rin(A3n),!(e.Math.abs(0-c)<=A3n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-v)*b),u=1/c*-(-(l-w)*m+(g-v)*d),rin(A3n),(e.Math.abs(0-a)<=A3n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:zO(isNaN(0),isNaN(a)))<0&&(rin(A3n),(e.Math.abs(a-1)<=A3n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:zO(isNaN(a),isNaN(1)))<0)&&(rin(A3n),(e.Math.abs(0-u)<=A3n||0==u||isNaN(0)&&isNaN(u)?0:0<u?-1:0>u?1:zO(isNaN(0),isNaN(u)))<0)&&(rin(A3n),(e.Math.abs(u-1)<=A3n||1==u||isNaN(u)&&isNaN(1)?0:u<1?-1:u>1?1:zO(isNaN(u),isNaN(1)))<0))}function yzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(f=new hW(new iw(n));f.b!=f.c.a.d;)for(u=BB((h=s9(f)).d,56),t=BB(h.e,56),d=0,y=(null==(a=u.Tg()).i&&qFn(a),a.i).length;d<y;++d)if(null==a.i&&qFn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).Ij()&&!s.Jj())if(cL(s,99))0==((o=BB(s,18)).Bb&h6n)&&(!(j=Cvn(o))||0==(j.Bb&h6n))&&mBn(n,o,u,t);else if(ZM(),BB(s,66).Oj()&&(e=BB((k=s)?BB(t,49).xh(k):null,153)))for(b=BB(u.ah(s),153),i=e.gc(),g=0,w=b.gc();g<w;++g)if(cL(l=b.il(g),99)){if(null==(r=lnn(n,m=b.jl(g)))&&null!=m){if(v=BB(l,18),!n.b||0!=(v.Bb&h6n)||Cvn(v))continue;r=m}if(!e.dl(l,r))for(p=0;p<i;++p)if(e.il(p)==l&&GI(e.jl(p))===GI(r)){e.ii(e.gc()-1,p),--i;break}}else e.dl(b.il(g),b.jl(g))}function kzn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;if(p=QBn(t,i,n.g),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),n.b)for(g=0;g<p.c.length;g++)l1(g,p.c.length),f=BB(p.c[g],200),0!=g&&(l1(g-1,p.c.length),ghn(f,(b=BB(p.c[g-1],200)).f+b.b+n.g)),mXn(g,p,i,n.g),Hkn(n,f),c.n&&a&&y0(c,o2(a),(Bsn(),uOt));else for(d=new Wb(p);d.a<d.c.c.length;)for(h=new Wb((w=BB(n0(d),200)).a);h.a<h.c.c.length;)xcn(v=new KJ((s=BB(n0(h),187)).s,s.t,n.g),s),WB(w.d,v);return zmn(n,p),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),m=e.Math.max(n.d,r.a-(u.b+u.c)),o=(l=e.Math.max(n.c,r.b-(u.d+u.a)))-n.c,n.e&&n.f&&(m/l<n.a?m=l*n.a:o+=m/n.a-l),n.e&&Odn(p,m,o),c.n&&c.n&&a&&y0(c,o2(a),(Bsn(),uOt)),new eq(n.a,m,n.c+o,(YLn(),_Et))}function jzn(n){var t,i,r,c,a,u,o,s,h,f;for(n.j=x8(ANt,hQn,25,n.g,15,1),n.o=new Np,JT(wnn(new Rq(null,new w1(n.e.b,16)),new Wc),new ug(n)),n.a=x8($Nt,ZYn,25,n.b,16,1),$fn(new Rq(null,new w1(n.e.b,16)),new sg(n)),f=new Np,JT(AV(wnn(new Rq(null,new w1(n.e.b,16)),new Qc),new og(n)),new eC(n,f)),o=new Wb(f);o.a<o.c.c.length;)if(!((u=BB(n0(o),508)).c.length<=1))if(2!=u.c.length){if(!XEn(u)&&!NPn(u,new Vc))for(s=new Wb(u),r=null;s.a<s.c.c.length;)t=BB(n0(s),17),i=n.c[t.p],h=!r||s.a>=s.c.c.length?X3((uSn(),Cut),Put):X3((uSn(),Put),Put),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 zAn(u),AHn((l1(0,u.c.length),BB(u.c[0],17)).d.i)||WB(n.o,u)}function Ezn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(m=GB(n),o=new Np,s=(c=n.c.length)-1,h=c+1;0!=m.a.c;){for(;0!=e.b;)Px(0!=e.b),p=BB(Atn(e,e.a.a),112),$J(m.a,p),p.g=s--,NFn(p,t,e,i);for(;0!=t.b;)Px(0!=t.b),v=BB(Atn(t,t.a.a),112),$J(m.a,v),v.g=h++,NFn(v,t,e,i);for(u=_Vn,d=new Fb(new BR(new xN(new _b(m.a).a).b));aS(d.a.a);){if(w=BB(mx(d.a).cd(),112),!i&&w.b>0&&w.a<=0){o.c=x8(Ant,HWn,1,0,5,1),o.c[o.c.length]=w;break}(b=w.i-w.d)>=u&&(b>u&&(o.c=x8(Ant,HWn,1,0,5,1),u=b),o.c[o.c.length]=w)}0!=o.c.length&&(a=BB(xq(o,pvn(r,o.c.length)),112),$J(m.a,a),a.g=h++,NFn(a,t,e,i),o.c=x8(Ant,HWn,1,0,5,1))}for(g=n.c.length+1,l=new Wb(n);l.a<l.c.c.length;)(f=BB(n0(l),112)).g<c&&(f.g=f.g+g)}function Tzn(n,t){var e;if(n.e)throw Hp(new Fy((ED(git),AYn+git.k+$Yn)));if(!SS(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:Hmn(n);break;case 1:Con(n),Hmn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Con(n),Hmn(n)}break;case 2:switch(t.g){case 1:Con(n),RRn(n);break;case 4:nEn(n),Hmn(n);break;case 3:nEn(n),Con(n),Hmn(n)}break;case 1:switch(t.g){case 2:Con(n),RRn(n);break;case 4:Con(n),nEn(n),Hmn(n);break;case 3:Con(n),nEn(n),Con(n),Hmn(n)}break;case 4:switch(t.g){case 2:nEn(n),Hmn(n);break;case 1:nEn(n),Con(n),Hmn(n);break;case 3:Con(n),RRn(n)}break;case 3:switch(t.g){case 2:Con(n),nEn(n),Hmn(n);break;case 1:Con(n),nEn(n),Con(n),Hmn(n);break;case 4:Con(n),RRn(n)}}return n}function Mzn(n,t){var e;if(n.d)throw Hp(new Fy((ED(Yat),AYn+Yat.k+$Yn)));if(!PC(n.a,t))throw Hp(new dy(LYn+t+NYn));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:Zon(n);break;case 1:Pon(n),Zon(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 2:switch(t.g){case 1:Pon(n),KRn(n);break;case 4:tEn(n),Zon(n);break;case 3:tEn(n),Pon(n),Zon(n)}break;case 1:switch(t.g){case 2:Pon(n),KRn(n);break;case 4:Pon(n),tEn(n),Zon(n);break;case 3:Pon(n),tEn(n),Pon(n),Zon(n)}break;case 4:switch(t.g){case 2:tEn(n),Zon(n);break;case 1:tEn(n),Pon(n),Zon(n);break;case 3:Pon(n),KRn(n)}break;case 3:switch(t.g){case 2:Pon(n),tEn(n),Zon(n);break;case 1:Pon(n),tEn(n),Pon(n),Zon(n);break;case 4:Pon(n),KRn(n)}}return n}function Szn(n,t,i){var r,c,a,u,o,s,f,l;for(s=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new oz(ZL(dLn(o=BB(kpn(s),33)).a.Kc(),new h));dAn(c);){if(!(r=BB(U5(c),79)).b&&(r.b=new hK(KOt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new hK(KOt,r,5,8)),r.c.i<=1)))throw Hp(new ck("Graph must not contain hyperedges."));if(!nAn(r)&&o!=PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82)))for(qan(f=new IR,r),hon(f,(Mrn(),sat),r),Rl(f,BB(qI(AY(i.f,o)),144)),Kl(f,BB(RX(i,PTn(BB(Wtn((!r.c&&(r.c=new hK(KOt,r,5,8)),r.c),0),82))),144)),WB(t.c,f),u=new AL((!r.n&&(r.n=new eU(zOt,r,1,7)),r.n));u.e!=u.i.gc();)qan(l=new m4(f,(a=BB(kpn(u),137)).a),a),hon(l,sat,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),_Bn(l),WB(t.d,l)}}function Pzn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(EJ(l=new eUn(n),!(t==(Ffn(),HPt)||t==KPt)),f=l.a,b=new bm,Dtn(),u=0,s=(c=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;u<s;++u)i=c[u],(h=fL(f,Git,i))&&(b.d=e.Math.max(b.d,h.Re()));for(a=0,o=(r=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;a<o;++a)i=r[a],(h=fL(f,Uit,i))&&(b.a=e.Math.max(b.a,h.Re()));for(p=0,m=(d=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;p<m;++p)(h=fL(f,d[p],Git))&&(b.b=e.Math.max(b.b,h.Se()));for(g=0,v=(w=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;g<v;++g)(h=fL(f,w[g],Uit))&&(b.c=e.Math.max(b.c,h.Se()));return b.d>0&&(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 Czn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(b=i.d,l=i.c,u=(a=new xC(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Wb(n.a);h.a<h.c.c.length;)if((o=BB(n0(h),10)).k==(uSn(),Mut)){switch(r=BB(mMn(o,(hWn(),Qft)),61),c=BB(mMn(o,Yft),8),f=o.n,r.g){case 2:f.a=i.f.a+b.c-l.a;break;case 4:f.a=-l.a-b.b}switch(d=0,r.g){case 2:case 4:t==(QEn(),WCt)?(w=Gy(MD(mMn(o,Tlt))),f.b=a.b*w-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0)):t==XCt&&(f.b=Gy(MD(mMn(o,Tlt)))-BB(mMn(o,(HXn(),npt)),8).b,d=f.b+c.b,Jan(o,!1,!0))}u=e.Math.max(u,d)}for(i.f.b+=u-a.b,s=new Wb(n.a);s.a<s.c.c.length;)if((o=BB(n0(s),10)).k==(uSn(),Mut))switch(r=BB(mMn(o,(hWn(),Qft)),61),f=o.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function Izn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;for(r=BB(mMn(n,(qqn(),skt)),33),o=DWn,s=DWn,a=_Vn,u=_Vn,k=spn(n.b,0);k.b!=k.d.c;)w=(m=BB(b3(k),86)).e,d=m.f,o=e.Math.min(o,w.a-d.a/2),s=e.Math.min(s,w.b-d.b/2),a=e.Math.max(a,w.a+d.a/2),u=e.Math.max(u,w.b+d.b/2);for(l=new xC((b=BB(ZAn(r,(CAn(),Ikt)),116)).b-o,b.d-s),y=spn(n.b,0);y.b!=y.d.c;)cL(f=mMn(m=BB(b3(y),86),skt),239)&&SA(c=BB(f,33),(h=UR(m.e,l)).a-c.g/2,h.b-c.f/2);for(v=spn(n.a,0);v.b!=v.d.c;)p=BB(b3(v),188),(i=BB(mMn(p,skt),79))&&(r5(t=p.a,g=new wA(p.b.e),t.a,t.a.a),r5(t,j=new wA(p.c.e),t.c.b,t.c),ZMn(g,BB(Dpn(t,1),8),p.b.f),ZMn(j,BB(Dpn(t,t.b-2),8),p.c.f),VFn(t,cDn(i,!0,!0)));KUn(r,a-o+(b.b+b.c),u-s+(b.d+b.a),!1,!1)}function Ozn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(yR(o=new M2(s=n.b,0),new HX(n)),g=!1,c=1;o.b<o.d.gc();){for(Px(o.b<o.d.gc()),u=BB(o.d.Xb(o.c=o.b++),29),l1(c,s.c.length),b=BB(s.c[c],29),d=(w=a0(u.a)).c.length,l=new Wb(w);l.a<l.c.c.length;)PZ(h=BB(n0(l),10),b);if(g){for(f=W1(new fy(w),0);f.c.Sb();)for(r=new Wb(a0(fbn(h=BB(w5(f),10))));r.a<r.c.c.length;)tBn(i=BB(n0(r),17),!0),hon(n,(hWn(),qft),(hN(),!0)),e=iGn(n,i,d),t=BB(mMn(h,Rft),305),p=BB(xq(e,e.c.length-1),17),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(l1(0,w.c.length),BB(w.c[0],10).k==(uSn(),Tut)&&(g=!0,c=-1));++c}for(a=new M2(n.b,0);a.b<a.d.gc();)Px(a.b<a.d.gc()),0==BB(a.d.Xb(a.c=a.b++),29).a.c.length&&fW(a)}function Azn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=BB(BB(h6(n.r,t),21),84)).gc()<=2||t==(kUn(),oIt)||t==(kUn(),CIt))JUn(n,t);else{for(g=n.u.Hc((lIn(),cIt)),i=t==(kUn(),sIt)?(Dan(),Rrt):(Dan(),Nrt),v=t==sIt?(G7(),irt):(G7(),crt),r=Zk(H_(i),n.s),p=t==sIt?RQn:KQn,h=f.Kc();h.Ob();)!(o=BB(h.Pb(),111)).c||o.c.d.c.length<=0||(d=o.b.rf(),w=o.e,(b=(l=o.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(u=l.n,l.e.b+u.d+u.a),g?(b.c=w.a-(c=l.n,l.e.a+c.b+c.c)-n.s,g=!1):b.c=w.a+d.a+n.s,OY(v,uJn),l.f=v,l9(l,(J9(),Jit)),WB(r.d,new xG(b,kln(r,b))),p=t==sIt?e.Math.min(p,w.b):e.Math.max(p,w.b+o.b.rf().b));for(p+=t==sIt?-n.t:n.t,Pwn((r.e=p,r)),s=f.Kc();s.Ob();)!(o=BB(s.Pb(),111)).c||o.c.d.c.length<=0||((b=o.c.i).c-=o.e.a,b.d-=o.e.b)}}function $zn(n,t,i){var r;if(OTn(i,"StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=RQn,n.g=KQn,n.d=Gy(MD(mMn(t,(HXn(),ypt)))),zpn(n),PAn(n),SAn(n),xjn(n),ddn(n),n.i=e.Math.max(1,n.i),n.g=e.Math.max(1,n.g),n.d=n.d/n.i,n.f=n.g/n.i,n.s=_vn(n),r=new HX(n.c),WB(n.c.b,r),n.r=a0(n.p),n.n=TJ(n.k,n.k.length);0!=n.r.c.length;)n.o=zhn(n),!n.o||Ton(n)&&0!=n.b.a.gc()?(xEn(n,r),r=new HX(n.c),WB(n.c.b,r),Frn(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Ton(n)?(n.c.b.c=x8(Ant,HWn,1,0,5,1),r=new HX(n.c),WB(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=a0(n.p),n.n=TJ(n.k,n.k.length)):(PZ(n.o,r),y7(n.r,n.o),TU(n.b,n.o),n.t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p],n.u+=n.e[n.o.p]*n.d);t.a.c=x8(Ant,HWn,1,0,5,1),JPn(t.b),HSn(i)}else HSn(i)}function Lzn(n){var t,i,r,c;for(JT(AV(new Rq(null,new w1(n.a.b,16)),new yr),new kr),fEn(n),JT(AV(new Rq(null,new w1(n.a.b,16)),new jr),new Er),n.c==(Mbn(),JPt)&&(JT(AV(wnn(new Rq(null,new w1(new Cb(n.f),1)),new Tr),new Mr),new Md(n)),JT(AV($V(wnn(wnn(new Rq(null,new w1(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Pd(n))),c=new xC(RQn,RQn),t=new xC(KQn,KQn),r=new Wb(n.a.b);r.a<r.c.c.length;)i=BB(n0(r),57),c.a=e.Math.min(c.a,i.d.c),c.b=e.Math.min(c.b,i.d.d),t.a=e.Math.max(t.a,i.d.c+i.d.b),t.b=e.Math.max(t.b,i.d.d+i.d.a);UR(kO(n.d.c),qx(new xC(c.a,c.b))),UR(kO(n.d.f),XR(new xC(t.a,t.b),c)),oNn(n,c,t),$U(n.f),$U(n.b),$U(n.g),$U(n.e),n.a.a.c=x8(Ant,HWn,1,0,5,1),n.a.b.c=x8(Ant,HWn,1,0,5,1),n.a=null,n.d=null}function Nzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(i=new Np,w=new Wb(t.a);w.a<w.c.c.length;)if((l=(b=BB(n0(w),10)).e)&&(gun(i,Nzn(n,l,b)),EGn(n,l,b),BB(mMn(l,(hWn(),Zft)),21).Hc((bDn(),lft))))for(p=BB(mMn(b,(HXn(),ept)),98),f=BB(mMn(b,cpt),174).Hc((lIn(),eIt)),g=new Wb(b.j);g.a<g.c.c.length;)for(d=BB(n0(g),11),(r=BB(RX(n.b,d),10))||(hon(r=bXn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new Gj,d.o,BB(mMn(l,Udt),103),l),dlt,d),VW(n.b,d,r),WB(l.a,r)),c=BB(xq(r.j,0),11),s=new Wb(d.f);s.a<s.c.c.length;)o=BB(n0(s),70),(a=new qj).o.a=o.o.a,a.o.b=o.o.b,WB(c.f,a),f||(v=d.j,h=0,Hz(BB(mMn(b,cpt),21))&&(h=$In(o.n,o.o,d.o,0,v)),p==(QEn(),QCt)||(kUn(),bIt).Hc(v)?a.o.a=h:a.o.b=h);return BGn(n,t,e,i,u=new Np),e&&Cqn(n,t,e,u),u}function xzn(n,t,e){var i,r,c,a,u,o,s,h;if(!n.c[t.c.p][t.p].e){for(n.c[t.c.p][t.p].e=!0,n.c[t.c.p][t.p].b=0,n.c[t.c.p][t.p].d=0,n.c[t.c.p][t.p].a=null,h=new Wb(t.j);h.a<h.c.c.length;)for(s=BB(n0(h),11),o=(e?new Hw(s):new Gw(s)).Kc();o.Ob();)(a=(u=BB(o.Pb(),11)).i).c==t.c?a!=t&&(xzn(n,a,e),n.c[t.c.p][t.p].b+=n.c[a.c.p][a.p].b,n.c[t.c.p][t.p].d+=n.c[a.c.p][a.p].d):(n.c[t.c.p][t.p].d+=n.g[u.p],++n.c[t.c.p][t.p].b);if(c=BB(mMn(t,(hWn(),xft)),15))for(r=c.Kc();r.Ob();)i=BB(r.Pb(),10),t.c==i.c&&(xzn(n,i,e),n.c[t.c.p][t.p].b+=n.c[i.c.p][i.p].b,n.c[t.c.p][t.p].d+=n.c[i.c.p][i.p].d);n.c[t.c.p][t.p].b>0&&(n.c[t.c.p][t.p].d+=H$n(n.i,24)*uYn*.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 Dzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w;for(l=new Wb(n);l.a<l.c.c.length;){for(nx((f=BB(n0(l),10)).n),nx(f.o),V6(f.f),VRn(f),aRn(f),w=new Wb(f.j);w.a<w.c.c.length;){for(nx((b=BB(n0(w),11)).n),nx(b.a),nx(b.o),qCn(b,amn(b.j)),(r=BB(mMn(b,(HXn(),ipt)),19))&&hon(b,ipt,iln(-r.a)),i=new Wb(b.g);i.a<i.c.c.length;){for(t=spn((e=BB(n0(i),17)).a,0);t.b!=t.d.c;)nx(BB(b3(t),8));if(a=BB(mMn(e,vgt),74))for(c=spn(a,0);c.b!=c.d.c;)nx(BB(b3(c),8));for(s=new Wb(e.b);s.a<s.c.c.length;)nx((u=BB(n0(s),70)).n),nx(u.o)}for(h=new Wb(b.f);h.a<h.c.c.length;)nx((u=BB(n0(h),70)).n),nx(u.o)}for(f.k==(uSn(),Mut)&&(hon(f,(hWn(),Qft),amn(BB(mMn(f,Qft),61))),wxn(f)),o=new Wb(f.b);o.a<o.c.c.length;)VRn(u=BB(n0(o),70)),nx(u.o),nx(u.n)}}function Rzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y;for(n.e=t,u=nOn(t),m=new Np,i=new Wb(u);i.a<i.c.c.length;){for(e=BB(n0(i),15),y=new Np,m.c[m.c.length]=y,o=new Rv,l=e.Kc();l.Ob();){for(c=JRn(n,f=BB(l.Pb(),33),!0,0,0),y.c[y.c.length]=c,new xC(b=f.i,w=f.j),!f.n&&(f.n=new eU(zOt,f,1,7)),h=new AL(f.n);h.e!=h.i.gc();)r=JRn(n,BB(kpn(h),137),!1,b,w),y.c[y.c.length]=r;for(!f.c&&(f.c=new eU(XOt,f,9,9)),g=new AL(f.c);g.e!=g.i.gc();)for(a=JRn(n,d=BB(kpn(g),118),!1,b,w),y.c[y.c.length]=a,p=d.i+b,v=d.j+w,!d.n&&(d.n=new eU(zOt,d,1,7)),s=new AL(d.n);s.e!=s.i.gc();)r=JRn(n,BB(kpn(s),137),!1,p,v),y.c[y.c.length]=r;Frn(o,JQ(Wen(Pun(Gk(xnt,1),HWn,20,0,[dLn(f),wLn(f)]))))}ULn(n,o,y)}return n.f=new _j(m),qan(n.f,t),n.f}function Kzn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g;null==(w=RX(n.e,i))&&(s=BB(w=new py,183),o=new GX(t+"_s"+r),rtn(s,q6n,o)),nW(e,b=BB(w,183)),qQ(g=new py,"x",i.j),qQ(g,"y",i.k),rtn(b,U6n,g),qQ(f=new py,"x",i.b),qQ(f,"y",i.c),rtn(b,"endPoint",f),!WE((!i.a&&(i.a=new $L(xOt,i,5)),i.a))&&(c=new Wg(h=new Cl),e5((!i.a&&(i.a=new $L(xOt,i,5)),i.a),c),rtn(b,D6n,h)),!!Svn(i)&&cMn(n.a,b,K6n,RPn(n,Svn(i))),!!Pvn(i)&&cMn(n.a,b,R6n,RPn(n,Pvn(i))),!(0==(!i.e&&(i.e=new hK(FOt,i,10,9)),i.e).i)&&(a=new SI(n,l=new Cl),e5((!i.e&&(i.e=new hK(FOt,i,10,9)),i.e),a),rtn(b,F6n,l)),0!=(!i.g&&(i.g=new hK(FOt,i,9,10)),i.g).i&&(u=new PI(n,d=new Cl),e5((!i.g&&(i.g=new hK(FOt,i,9,10)),i.g),u),rtn(b,_6n,d))}function _zn(n){var t,i,r,c,a,u,o;for(qD(),r=n.f.n,u=EX(n.r).a.nc();u.Ob();){if(c=0,(a=BB(u.Pb(),111)).b.Xe((sWn(),aPt))&&(c=Gy(MD(a.b.We(aPt))))<0)switch(a.b.Hf().g){case 1:r.d=e.Math.max(r.d,-c);break;case 3:r.a=e.Math.max(r.a,-c);break;case 2:r.c=e.Math.max(r.c,-c);break;case 4:r.b=e.Math.max(r.b,-c)}if(Hz(n.u))switch(t=vcn(a.b,c),o=!BB(n.e.We(qSt),174).Hc((n_n(),HIt)),i=!1,a.b.Hf().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),o&&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),o&&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),o&&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),o&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function Fzn(n){var t,e,i,r,c,a,u,o,s,h,f;for(s=new Wb(n);s.a<s.c.c.length;){switch(o=BB(n0(s),10),c=null,(a=BB(mMn(o,(HXn(),kgt)),163)).g){case 1:case 2:Jun(),c=$ht;break;case 3:case 4:Jun(),c=Oht}if(c)hon(o,(hWn(),Gft),(Jun(),$ht)),c==Oht?RNn(o,a,(ain(),Hvt)):c==$ht&&RNn(o,a,(ain(),qvt));else if(vA(BB(mMn(o,ept),98))&&0!=o.j.c.length){for(t=!0,f=new Wb(o.j);f.a<f.c.c.length;){if(!((h=BB(n0(f),11)).j==(kUn(),oIt)&&h.e.c.length-h.g.c.length>0||h.j==CIt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Wb(h.g);r.a<r.c.c.length;)if(e=BB(n0(r),17),(u=BB(mMn(e.d.i,kgt),163))==(Tbn(),Blt)||u==Hlt){t=!1;break}for(i=new Wb(h.e);i.a<i.c.c.length;)if(e=BB(n0(i),17),(u=BB(mMn(e.c.i,kgt),163))==(Tbn(),_lt)||u==Flt){t=!1;break}}t&&RNn(o,a,(ain(),Gvt))}}}function Bzn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(E=0,w=0,l=new Wb(t.e);l.a<l.c.c.length;){for(f=BB(n0(l),10),b=0,o=0,s=i?BB(mMn(f,Xmt),19).a:_Vn,v=r?BB(mMn(f,Wmt),19).a:_Vn,h=e.Math.max(s,v),y=new Wb(f.j);y.a<y.c.c.length;){if(m=BB(n0(y),11),k=f.n.b+m.n.b+m.a.b,r)for(u=new Wb(m.g);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).d).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o));if(i)for(u=new Wb(m.e);u.a<u.c.c.length;)d=(g=(a=BB(n0(u),17)).c).i,t!=n.a[d.p]&&(p=e.Math.max(BB(mMn(d,Xmt),19).a,BB(mMn(d,Wmt),19).a),(j=BB(mMn(a,(HXn(),bpt)),19).a)>=h&&j>=p&&(b+=d.n.b+g.n.b+g.a.b-k,++o))}o>0&&(E+=b/o,++w)}w>0?(t.a=c*E/w,t.g=w):(t.a=0,t.g=0)}function Hzn(n,t){var e,i,r,c,a,u,o,s,h,f;for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(u=new Wb(BB(n0(i),29).a);u.a<u.c.c.length;)a=BB(n0(u),10),t.j[a.p]=a,t.i[a.p]=t.o==(oZ(),cyt)?KQn:RQn;for($U(n.c),c=n.a.b,t.c==(gJ(),nyt)&&(c=cL(c,152)?o6(BB(c,152)):cL(c,131)?BB(c,131).a:cL(c,54)?new fy(c):new CT(c)),R9(n.e,t,n.b),yS(t.p,null),r=c.Kc();r.Ob();)for(o=BB(r.Pb(),29).a,t.o==(oZ(),cyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new CT(o)),f=o.Kc();f.Ob();)h=BB(f.Pb(),10),t.g[h.p]==h&&oXn(n,h,t);for(Hqn(n,t),e=c.Kc();e.Ob();)for(f=new Wb(BB(e.Pb(),29).a);f.a<f.c.c.length;)h=BB(n0(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=Gy(t.i[t.j[h.p].p]),(t.o==(oZ(),cyt)&&s>KQn||t.o==ryt&&s<RQn)&&(t.p[h.p]=Gy(t.p[h.p])+s));n.e.cg()}function qzn(n,t,e,i){var r,c,a,u,o;return pNn(u=new eUn(t),i),r=!0,n&&n.Xe((sWn(),bSt))&&(r=(c=BB(n.We((sWn(),bSt)),103))==(Ffn(),BPt)||c==_Pt||c==FPt),oRn(u,!1),Otn(u.e.wf(),new $_(u,!1,r)),LJ(u,u.f,(Dtn(),Git),(kUn(),sIt)),LJ(u,u.f,Uit,SIt),LJ(u,u.g,Git,CIt),LJ(u,u.g,Uit,oIt),Bpn(u,sIt),Bpn(u,SIt),hV(u,oIt),hV(u,CIt),qD(),(a=u.A.Hc((mdn(),DIt))&&u.B.Hc((n_n(),UIt))?ndn(u):null)&&rj(u.a,a),_zn(u),ryn(u),cyn(u),VGn(u),MKn(u),mkn(u),_gn(u,sIt),_gn(u,SIt),CRn(u),PHn(u),e?(Gbn(u),ykn(u),_gn(u,oIt),_gn(u,CIt),o=u.B.Hc((n_n(),XIt)),MCn(u,o,sIt),MCn(u,o,SIt),SCn(u,o,oIt),SCn(u,o,CIt),JT(new Rq(null,new w1(new Ob(u.i),0)),new In),JT(AV(new Rq(null,EX(u.r).a.oc()),new On),new An),BEn(u),u.e.uf(u.o),JT(new Rq(null,EX(u.r).a.oc()),new Ln),u.o):u.o}function Gzn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),81),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),189)).i=h,0==a.e&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),189)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),81),g=a.i+f.e.a,f.d.g||f.g.c<g?f.o=g:f.o=f.g.c;for(c-=a.f.o,a.b+=c,n.c==(Ffn(),FPt)||n.c==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),81)).f.Kc();s.Ob();)o=BB(s.Pb(),81),d=dA(n.c)?n.f.ef(f,o):n.f.ff(f,o),o.d.i=e.Math.max(o.d.i,f.o+f.g.b+d-o.e.a),o.k||(o.d.i=e.Math.max(o.d.i,o.g.c-o.e.a)),--o.d.e,0==o.d.e&&DH(w,o.d)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),81)).g.c=t.o}function zzn(n){var t,e,i,r,c,a,u,o;switch(u=n.b,t=n.a,0===BB(mMn(n,(_kn(),Mit)),427).g?m$(u,new nw(new Gn)):m$(u,new nw(new zn)),1===BB(mMn(n,Eit),428).g?(m$(u,new qn),m$(u,new Un),m$(u,new Kn)):(m$(u,new qn),m$(u,new Hn)),BB(mMn(n,Pit),250).g){case 0:o=new Yn;break;case 1:o=new Vn;break;case 2:o=new Qn;break;case 3:o=new Wn;break;case 5:o=new Ow(new Qn);break;case 4:o=new Ow(new Vn);break;case 7:o=new DS(new Ow(new Vn),new Ow(new Qn));break;case 8:o=new DS(new Ow(new Wn),new Ow(new Qn));break;default:o=new Ow(new Wn)}for(a=new Wb(u);a.a<a.c.c.length;){for(c=BB(n0(a),167),r=0,e=new rI(iln(i=0),iln(r));B_n(t,c,i,r);)e=BB(o.Ce(e,c),46),i=BB(e.a,19).a,r=BB(e.b,19).a;_Rn(t,c,i,r)}}function Uzn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,MA(n.e,c.a,c.b),j=l/w,E=h/b,s=new AL(mV(n.e));s.e!=s.i.gc();)Pen(o=BB(kpn(s),137),o.i*j),Cen(o,o.j*E);for(v=new AL(yV(n.e));v.e!=v.i.gc();)y=(p=BB(kpn(v),118)).i,k=p.j,y>0&&Pen(p,y*j),k>0&&Cen(p,k*E);for(nan(n.b,new lt),t=new Np,u=new usn(new Pb(n.c).a);u.b;)i=BB((a=ten(u)).cd(),79),e=BB(a.dd(),395).a,r=cDn(i,!1,!1),VFn(f=lTn(PMn(i),qSn(r),e),r),(m=CMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.a.a.c,8)),e));for(g=new usn(new Pb(n.d).a);g.b;)i=BB((d=ten(g)).cd(),79),e=BB(d.dd(),395).a,r=cDn(i,!1,!1),f=lTn(OMn(i),Jon(qSn(r)),e),VFn(f=Jon(f),r),(m=IMn(i))&&-1==E7(t,m,0)&&(t.c[t.c.length]=m,sQ(m,(Px(0!=f.b),BB(f.c.b.c,8)),e))}function Xzn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(0!=i.c.length){for(w=new Np,b=new Wb(i);b.a<b.c.c.length;)WB(w,new xC((l=BB(n0(b),33)).i,l.j));for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt));NMn(n,i);)E$n(n,i,!1);for(r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),u=0,o=0,c=null,0!=i.c.length&&(l1(0,i.c.length),u=(c=BB(i.c[0],33)).i-(l1(0,w.c.length),BB(w.c[0],8)).a,o=c.j-(l1(0,w.c.length),BB(w.c[0],8)).b),a=e.Math.sqrt(u*u+o*o),f=Uhn(i);0!=f.a.gc();){for(h=f.a.ec().Kc();h.Ob();)s=BB(h.Pb(),33),g=(d=n.f).i+d.g/2,p=d.j+d.f/2,v=s.i+s.g/2,y=s.j+s.f/2-p,j=(m=v-g)/(k=e.Math.sqrt(m*m+y*y)),E=y/k,Pen(s,s.i+j*a),Cen(s,s.j+E*a);r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),f=Uhn(new t_(f))}n.a&&n.a.lg(new t_(f)),r.n&&t&&y0(r,o2(t),(Bsn(),uOt)),Xzn(n,t,new t_(f),r)}}function Wzn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(g=n.n,p=n.o,b=n.d,l=Gy(MD(edn(n,(HXn(),ppt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),o=t.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a-u.o.b,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=u.o.b,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,CZ(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(u=BB(s.Pb(),10)).o.a,w=e.Math.max(w,u.o.b);for(v=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),o=i.Kc();o.Ob();)(u=BB(o.Pb(),10)).n.a=v,u.n.b=a,v+=u.o.a+l,(h=DLn(u)).n.a=u.o.a/2-h.a.a,h.n.b=0,(d=BB(mMn(u,(hWn(),Kft)),11)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,CZ(d,n)),c+=r}}function Vzn(n,t){var i,r,c,a,u,o;if(BB(mMn(t,(hWn(),Zft)),21).Hc((bDn(),lft))){for(o=new Wb(t.a);o.a<o.c.c.length;)(a=BB(n0(o),10)).k==(uSn(),Cut)&&(c=BB(mMn(a,(HXn(),Cgt)),142),n.c=e.Math.min(n.c,a.n.a-c.b),n.a=e.Math.max(n.a,a.n.a+a.o.a+c.c),n.d=e.Math.min(n.d,a.n.b-c.d),n.b=e.Math.max(n.b,a.n.b+a.o.b+c.a));for(u=new Wb(t.a);u.a<u.c.c.length;)if((a=BB(n0(u),10)).k!=(uSn(),Cut))switch(a.k.g){case 2:if((r=BB(mMn(a,(HXn(),kgt)),163))==(Tbn(),Flt)){a.n.a=n.c-10,Yyn(a,new Ge).Jb(new rd(a));break}if(r==Hlt){a.n.a=n.a+10,Yyn(a,new ze).Jb(new cd(a));break}if((i=BB(mMn(a,ilt),303))==(z7(),Cft)){lqn(a).Jb(new ad(a)),a.n.b=n.d-10;break}if(i==Sft){lqn(a).Jb(new ud(a)),a.n.b=n.b+10;break}break;default:throw Hp(new _y("The node type "+a.k+" is not supported by the "+Jot))}}}function Qzn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;for(o=new xC(i.i+i.g/2,i.j+i.f/2),l=XHn(i),b=BB(ZAn(t,(HXn(),ept)),98),d=BB(ZAn(i,upt),61),BI(lpn(i),tpt)||(w=0==i.i&&0==i.j?0:tMn(i,d),Ypn(i,tpt,w)),hon(r=bXn(i,b,d,l,new xC(t.g,t.f),o,new xC(i.g,i.f),BB(mMn(e,Udt),103),e),(hWn(),dlt),i),Hl(c=BB(xq(r.j,0),11),j_n(i)),hon(r,cpt,(lIn(),nbn(rIt))),h=BB(ZAn(t,cpt),174).Hc(eIt),u=new AL((!i.n&&(i.n=new eU(zOt,i,1,7)),i.n));u.e!=u.i.gc();)if(!qy(TD(ZAn(a=BB(kpn(u),137),Ggt)))&&a.a&&(f=Hhn(a),WB(c.f,f),!h))switch(s=0,Hz(BB(ZAn(t,cpt),21))&&(s=$In(new xC(a.i,a.j),new xC(a.g,a.f),new xC(i.g,i.f),0,d)),d.g){case 2:case 4:f.o.a=s;break;case 1:case 3:f.o.b=s}hon(r,Cpt,MD(ZAn(JJ(t),Cpt))),hon(r,Ipt,MD(ZAn(JJ(t),Ipt))),hon(r,Spt,MD(ZAn(JJ(t),Spt))),WB(e.a,r),VW(n.a,i,r)}function Yzn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(e,"Processor arrange level",1),h=0,SQ(),_rn(t,new ap((qqn(),ikt))),c=t.b,u=spn(t,t.b),s=!0;s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?--c:s=!1;if(a=new n_(new s1(t,0,c)),o=new n_(new s1(t,c,t.b)),0==a.b)for(b=spn(o,0);b.b!=b.d.c;)hon(BB(b3(b),86),hkt,iln(h++));else for(f=a.b,m=spn(a,0);m.b!=m.d.c;){for(hon(v=BB(b3(m),86),hkt,iln(h++)),Yzn(n,i=xun(v),mcn(e,1/f|0)),_rn(i,QW(new ap(hkt))),l=new YT,p=spn(i,0);p.b!=p.d.c;)for(g=BB(b3(p),86),d=spn(v.d,0);d.b!=d.d.c;)(w=BB(b3(d),188)).c==g&&r5(l,w,l.c.b,l.c);for(yQ(v.d),Frn(v.d,l),u=spn(o,o.b),r=v.d.b,s=!0;0<r&&s&&u.b.b!=u.d.a;)g=BB(U0(u),86),0==BB(mMn(g,ikt),19).a?(hon(g,hkt,iln(h++)),--r,mtn(u)):s=!1}HSn(e)}function Jzn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Inverted port preprocessing",1),u=new M2(n.b,0),e=null,g=new Np;u.b<u.d.gc();){for(d=e,Px(u.b<u.d.gc()),e=BB(u.d.Xb(u.c=u.b++),29),h=new Wb(g);h.a<h.c.c.length;)PZ(o=BB(n0(h),10),d);for(g.c=x8(Ant,HWn,1,0,5,1),f=new Wb(e.a);f.a<f.c.c.length;)if((o=BB(n0(f),10)).k==(uSn(),Cut)&&vA(BB(mMn(o,(HXn(),ept)),98))){for(w=cRn(o,(ain(),Hvt),(kUn(),oIt)).Kc();w.Ob();)for(l=BB(w.Pb(),11),r=0,c=(i=BB(Qgn(a=l.e,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)$Bn(n,l,i[r],g);for(b=cRn(o,qvt,CIt).Kc();b.Ob();)for(l=BB(b.Pb(),11),r=0,c=(i=BB(Qgn(a=l.g,x8(yut,c1n,17,a.c.length,0,1)),474)).length;r<c;++r)ABn(n,l,i[r],g)}}for(s=new Wb(g);s.a<s.c.c.length;)PZ(o=BB(n0(s),10),e);HSn(t)}function Zzn(n,t,e,i,r,c){var a,u,o,s,h,f;for(qan(s=new CSn,t),qCn(s,BB(ZAn(t,(HXn(),upt)),61)),hon(s,(hWn(),dlt),t),CZ(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,VW(n.a,t,s),(a=o5($V(wnn(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Vt),new Xt),new Ww(t)))||(a=o5($V(wnn(new Rq(null,(!t.d&&(t.d=new hK(_Ot,t,8,5)),new w1(t.d,16))),new Qt),new Wt),new Vw(t))),a||(a=o5(new Rq(null,(!t.e&&(t.e=new hK(_Ot,t,7,4)),new w1(t.e,16))),new Yt)),hon(s,elt,(hN(),!!a)),pqn(s,c,r,BB(ZAn(t,npt),8)),o=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));o.e!=o.i.gc();)!qy(TD(ZAn(u=BB(kpn(o),137),Ggt)))&&u.a&&WB(s.f,Hhn(u));switch(r.g){case 2:case 1:(s.j==(kUn(),sIt)||s.j==SIt)&&i.Fc((bDn(),gft));break;case 4:case 3:(s.j==(kUn(),oIt)||s.j==CIt)&&i.Fc((bDn(),gft))}return s}function nUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m;for(l=null,r==(dJ(),Lyt)?l=t:r==Nyt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=BB(d.Pb(),11),g=Aon(Pun(Gk(PMt,1),sVn,8,0,[w.i.n,w.n,w.a])).b,m=new Rv,o=new Rv,h=new m6(w.b);y$(h.a)||y$(h.b);)if(qy(TD(mMn(s=BB(y$(h.a)?n0(h.a):n0(h.b),17),(hWn(),Clt))))==c&&-1!=E7(a,s,0)){if(p=s.d==w?s.c:s.d,v=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(v-g)<.2)continue;v<g?t.a._b(p)?TU(m,new rI(Lyt,s)):TU(m,new rI(Nyt,s)):t.a._b(p)?TU(o,new rI(Lyt,s)):TU(o,new rI(Nyt,s))}if(m.a.gc()>1)for(e5(m,new sC(n,b=new hqn(w,m,r))),u.c[u.c.length]=b,f=m.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b);if(o.a.gc()>1)for(e5(o,new hC(n,b=new hqn(w,o,r))),u.c[u.c.length]=b,f=o.a.ec().Kc();f.Ob();)y7(a,BB(f.Pb(),46).b)}}function tUn(n){NM(n,new MTn(dj(vj(wj(pj(gj(new du,w4n),"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 Ha),w4n))),u2(n,w4n,g3n,mpn(xjt)),u2(n,w4n,vZn,mpn(Kjt)),u2(n,w4n,PZn,mpn(Cjt)),u2(n,w4n,BZn,mpn(Ijt)),u2(n,w4n,SZn,mpn(Ojt)),u2(n,w4n,CZn,mpn(Pjt)),u2(n,w4n,MZn,mpn(Ajt)),u2(n,w4n,IZn,mpn(Njt)),u2(n,w4n,h4n,mpn(Mjt)),u2(n,w4n,s4n,mpn(Sjt)),u2(n,w4n,b4n,mpn($jt)),u2(n,w4n,u4n,mpn(Ljt)),u2(n,w4n,o4n,mpn(Djt)),u2(n,w4n,f4n,mpn(Rjt)),u2(n,w4n,l4n,mpn(_jt))}function eUn(n){var t;if(this.r=xV(new Pn,new Cn),this.b=new Hbn(BB(yX(FIt),290)),this.p=new Hbn(BB(yX(FIt),290)),this.i=new Hbn(BB(yX(Krt),290)),this.e=n,this.o=new wA(n.rf()),this.D=n.Df()||qy(TD(n.We((sWn(),SSt)))),this.A=BB(n.We((sWn(),KSt)),21),this.B=BB(n.We(qSt),21),this.q=BB(n.We(uPt),98),this.u=BB(n.We(fPt),21),!wMn(this.u))throw Hp(new rk("Invalid port label placement: "+this.u));if(this.v=qy(TD(n.We(bPt))),this.j=BB(n.We(DSt),21),!tLn(this.j))throw Hp(new rk("Invalid node label placement: "+this.j));this.n=BB(nkn(n,NSt),116),this.k=Gy(MD(nkn(n,OPt))),this.d=Gy(MD(nkn(n,IPt))),this.w=Gy(MD(nkn(n,RPt))),this.s=Gy(MD(nkn(n,APt))),this.t=Gy(MD(nkn(n,$Pt))),this.C=BB(nkn(n,xPt),142),this.c=2*this.d,t=!this.B.Hc((n_n(),HIt)),this.f=new Ign(0,t,0),this.g=new Ign(1,t,0),jy(this.f,(Dtn(),zit),this.g)}function iUn(n,t,i,r,c){var a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,g=0,d=0,w=1,m=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));m.e!=m.i.gc();)w+=F3(new oz(ZL(dLn(p=BB(kpn(m),33)).a.Kc(),new h))),T=p.g,g=e.Math.max(g,T),b=p.f,d=e.Math.max(d,b),y+=T*b;for(u=y+2*r*r*w*(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i,a=e.Math.sqrt(u),s=e.Math.max(a*i,g),o=e.Math.max(a/i,d),v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();)p=BB(kpn(v),33),M=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(s-p.g),S=c.b+(H$n(t,26)*rYn+H$n(t,27)*cYn)*(o-p.f),Pen(p,M),Cen(p,S);for(E=s+(c.b+c.c),j=o+(c.d+c.a),k=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));k.e!=k.i.gc();)for(l=new oz(ZL(dLn(BB(kpn(k),33)).a.Kc(),new h));dAn(l);)nAn(f=BB(U5(l),79))||BXn(f,t,E,j);KUn(n,E+=c.b+c.c,j+=c.d+c.a,!1,!0)}function rUn(n){var t,e,i,r,c,a,u,o,s,h,f;if(null==n)throw Hp(new Mk(zWn));if(s=n,o=!1,(c=n.length)>0&&(b1(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(n=n.substr(1),--c,o=45==t)),0==c)throw Hp(new Mk(DQn+s+'"'));for(;n.length>0&&(b1(0,n.length),48==n.charCodeAt(0));)n=n.substr(1),--c;if(c>(iFn(),xtt)[10])throw Hp(new Mk(DQn+s+'"'));for(r=0;r<c;r++)if(-1==egn((b1(r,n.length),n.charCodeAt(r))))throw Hp(new Mk(DQn+s+'"'));for(f=0,a=Ltt[10],h=Ntt[10],u=j7(Dtt[10]),e=!0,(i=c%a)>0&&(f=-parseInt(n.substr(0,i),10),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt(n.substr(0,a),10),n=n.substr(a),c-=a,e)e=!1;else{if(Vhn(f,u)<0)throw Hp(new Mk(DQn+s+'"'));f=cbn(f,h)}f=ibn(f,i)}if(Vhn(f,0)>0)throw Hp(new Mk(DQn+s+'"'));if(!o&&Vhn(f=j7(f),0)<0)throw Hp(new Mk(DQn+s+'"'));return f}function cUn(n,t){var e,i,r,c,a,u,o;if(ZH(),this.a=new X$(this),this.b=n,this.c=t,this.f=OU(B7((IPn(),Z$t),t)),this.f.dc())if((u=mjn(Z$t,n))==t)for(this.e=!0,this.d=new Np,this.f=new fo,this.f.Fc(S7n),BB(NHn(F7(Z$t,Utn(n)),""),26)==n&&this.f.Fc(az(Z$t,Utn(n))),r=EKn(Z$t,n).Kc();r.Ob();)switch(i=BB(r.Pb(),170),DW(B7(Z$t,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(OU(B7(Z$t,i)))}else if(ZM(),BB(t,66).Oj())for(this.e=!0,this.f=null,this.d=new Np,a=0,o=(null==n.i&&qFn(n),n.i).length;a<o;++a)for(null==n.i&&qFn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=Z1(B7(Z$t,i));c;c=Z1(B7(Z$t,c)))c==t&&this.d.Fc(i);else 1==DW(B7(Z$t,t))&&u?(this.f=null,this.d=(TOn(),bLt)):(this.f=null,this.e=!0,this.d=(SQ(),new Gb(t)));else this.e=5==DW(B7(Z$t,t)),this.f.Fb(uLt)&&(this.f=uLt)}function aUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(i=0,r=Pmn(n,t),b=n.s,w=n.t,h=BB(BB(h6(n.r,t),21),84).Kc();h.Ob();)if((s=BB(h.Pb(),111)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.rf(),o=s.b.Xe((sWn(),aPt))?Gy(MD(s.b.We(aPt))):0,(l=(f=s.c).i).b=(u=f.n,f.e.a+u.b+u.c),l.a=(a=f.n,f.e.b+a.d+a.a),t.g){case 1:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=d.b+o+r,l9(f,(J9(),Qit)),WD(f,(G7(),crt));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-o-r-l.a,l9(f,(J9(),Qit)),WD(f,(G7(),irt));break;case 2:l.c=-o-r-l.b,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Jit)),WD(f,(G7(),rrt));break;case 4:l.c=d.a+o+r,s.a?(c=n.v?l.a:BB(xq(f.d,0),181).rf().b,l.d=(d.b-c)/2):l.d=d.b+w,l9(f,(J9(),Yit)),WD(f,(G7(),rrt))}(t==(kUn(),sIt)||t==SIt)&&(i=e.Math.max(i,l.a))}i>0&&(BB(oV(n.b,t),124).a.b=i)}function uUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(OTn(t,"Comment pre-processing",1),e=0,o=new Wb(n.a);o.a<o.c.c.length;)if(qy(TD(mMn(u=BB(n0(o),10),(HXn(),Tdt))))){for(++e,r=0,i=null,s=null,w=new Wb(u.j);w.a<w.c.c.length;)r+=(l=BB(n0(w),11)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=BB(xq(l.e,0),17)).c),1==l.g.c.length&&(s=(i=BB(xq(l.g,0),17)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||qy(TD(mMn(s.i,Tdt)))){for(g=new Np,b=new Wb(u.j);b.a<b.c.c.length;){for(f=new Wb((l=BB(n0(b),11)).g);f.a<f.c.c.length;)0==(h=BB(n0(f),17)).d.g.c.length||(g.c[g.c.length]=h);for(a=new Wb(l.e);a.a<a.c.c.length;)0==(c=BB(n0(a),17)).c.e.c.length||(g.c[g.c.length]=c)}for(d=new Wb(g);d.a<d.c.c.length;)tBn(BB(n0(d),17),!0)}else nXn(u,i,s,s.i),AU(o)}t.n&&OH(t,"Found "+e+" comment boxes"),HSn(t)}function oUn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(l=Gy(MD(mMn(n,(HXn(),Cpt)))),b=Gy(MD(mMn(n,Ipt))),f=Gy(MD(mMn(n,Spt))),u=n.o,a=(c=BB(xq(n.j,0),11)).n,d=TPn(c,f)){if(t.Hc((lIn(),eIt)))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:d.c=(u.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(u.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:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.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:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=u.b+b-a.b,d.c=l}else if(t.Hc(rIt))switch(BB(mMn(n,(hWn(),Qft)),61).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:BB(xq(c.f,0),70).o.b,d.d=(u.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Wb(c.f);s.a<s.c.c.length;)(w=(o=BB(n0(s),70)).n).a=d.c,w.b=r,r+=o.o.b+f}}function sUn(){RO(wLt,new Vs),RO(zLt,new ah),RO(ULt,new ph),RO(XLt,new Ch),RO(Qtt,new $h),RO(Gk(NNt,1),new Lh),RO(ktt,new Nh),RO(Ttt,new xh),RO(Qtt,new _s),RO(Qtt,new Fs),RO(Qtt,new Bs),RO(Ptt,new Hs),RO(Qtt,new qs),RO(Rnt,new Gs),RO(Rnt,new zs),RO(Qtt,new Us),RO(Ctt,new Xs),RO(Qtt,new Ws),RO(Qtt,new Qs),RO(Qtt,new Ys),RO(Qtt,new Js),RO(Qtt,new Zs),RO(Gk(NNt,1),new nh),RO(Qtt,new th),RO(Qtt,new eh),RO(Rnt,new ih),RO(Rnt,new rh),RO(Qtt,new ch),RO(Att,new uh),RO(Qtt,new oh),RO(Rtt,new sh),RO(Qtt,new hh),RO(Qtt,new fh),RO(Qtt,new lh),RO(Qtt,new bh),RO(Rnt,new wh),RO(Rnt,new dh),RO(Qtt,new gh),RO(Qtt,new vh),RO(Qtt,new mh),RO(Qtt,new yh),RO(Qtt,new kh),RO(Qtt,new jh),RO(_tt,new Eh),RO(Qtt,new Th),RO(Qtt,new Mh),RO(Qtt,new Sh),RO(_tt,new Ph),RO(Rtt,new Ih),RO(Qtt,new Oh),RO(Att,new Ah)}function hUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if((f=t.length)>0&&(b1(0,t.length),64!=(u=t.charCodeAt(0)))){if(37==u&&(o=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(b1(h+1,t.length),o=46==t.charCodeAt(h+1))))){if(v=mK("%",a=t.substr(1,h-1))?null:$Un(a),i=0,o)try{i=l_n(t.substr(h+2),_Vn,DWn)}catch(m){throw cL(m=lun(m),127)?Hp(new L7(m)):Hp(m)}for(d=Ern(n.Wg());d.Ob();)if(cL(b=Man(d),510)&&(p=(r=BB(b,590)).d,(null==v?null==p:mK(v,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:t.substr(0,s),e=0,-1!=s)try{e=l_n(t.substr(s+1),_Vn,DWn)}catch(m){if(!cL(m=lun(m),127))throw Hp(m);l=t}for(l=mK("%",l)?null:$Un(l),w=Ern(n.Wg());w.Ob();)if(cL(b=Man(w),191)&&(g=(c=BB(b,191)).ne(),(null==l?null==g:mK(l,g))&&0==e--))return c;return null}return _qn(n,t)}function fUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(m=new Np,f=new Wb(n.b);f.a<f.c.c.length;)for(w=new Wb(BB(n0(f),29).a);w.a<w.c.c.length;)if((l=BB(n0(w),10)).k==(uSn(),Mut)&&Lx(l,(hWn(),Vft))){for(d=null,p=null,g=null,j=new Wb(l.j);j.a<j.c.c.length;)switch((k=BB(n0(j),11)).j.g){case 4:d=k;break;case 2:p=k;break;default:g=k}for(s=new Kj((v=BB(xq(g.g,0),17)).a),UR(o=new wA(g.n),l.n),nX(spn(s,0),o),y=Jon(v.a),UR(h=new wA(g.n),l.n),r5(y,h,y.c.b,y.c),E=BB(mMn(l,Vft),10),T=BB(xq(E.j,0),11),c=0,u=(i=BB(Qgn(d.e,x8(yut,c1n,17,0,0,1)),474)).length;c<u;++c)MZ(t=i[c],T),Wsn(t.a,t.a.b,s);for(r=0,a=(e=Z0(p.g)).length;r<a;++r)SZ(t=e[r],T),Wsn(t.a,0,y);SZ(v,null),MZ(v,null),m.c[m.c.length]=l}for(b=new Wb(m);b.a<b.c.c.length;)PZ(l=BB(n0(b),10),null)}function lUn(){var n,t,e;for(lUn=O,new knn(1,0),new knn(10,0),new knn(0,0),Htt=x8(iet,sVn,240,11,0,1),qtt=x8(ONt,WVn,25,100,15,1),Gtt=Pun(Gk(xNt,1),qQn,25,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),ztt=x8(ANt,hQn,25,Gtt.length,15,1),Utt=Pun(Gk(xNt,1),qQn,25,15,[1,10,100,VVn,1e4,GQn,1e6,1e7,1e8,AQn,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Xtt=x8(ANt,hQn,25,Utt.length,15,1),Wtt=x8(iet,sVn,240,11,0,1),n=0;n<Wtt.length;n++)Htt[n]=new knn(n,0),Wtt[n]=new knn(0,n),qtt[n]=48;for(;n<qtt.length;n++)qtt[n]=48;for(e=0;e<ztt.length;e++)ztt[e]=aIn(Gtt[e]);for(t=0;t<Xtt.length;t++)Xtt[t]=aIn(Utt[t]);$On()}function bUn(){function n(){this.obj=this.createObject()}return n.prototype.createObject=function(n){return Object.create(null)},n.prototype.get=function(n){return this.obj[n]},n.prototype.set=function(n,t){this.obj[n]=t},n.prototype[iYn]=function(n){delete this.obj[n]},n.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)},n.prototype.entries=function(){var n=this.keys(),t=this,e=0;return{next:function(){if(e>=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},zDn()||(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[iYn]=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 wUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(PFn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=x8(ONt,WVn,25,4*(0!=(u=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,o=0;o<l;o++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2|d],c[a++]=VLt[63&i];return 8==u?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[s<<4],c[a++]=61,c[a++]=61):16==u&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=VLt[b],c[a++]=VLt[w|s<<4],c[a++]=VLt[h<<2],c[a++]=61),Bdn(c,0,c.length)}function dUn(n,t){var i,r,c,a,u,o;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>_Vn&&e4(t,n.p-sQn),u=t.q.getDate(),FJ(t,1),n.k>=0&&vZ(t,n.k),n.c>=0?FJ(t,n.c):n.k>=0?(r=35-new von(t.q.getFullYear()-sQn,t.q.getMonth(),35).q.getDate(),FJ(t,e.Math.min(r,u))):FJ(t,u),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),aL(t,24==n.f&&n.g?0:n.f),n.j>=0&&g6(t,n.j),n.n>=0&&U8(t,n.n),n.i>=0&&dO(t,rbn(cbn(Ojn(fan(t.q.getTime()),VVn),VVn),n.i)),n.a&&(e4(c=new AT,c.q.getFullYear()-sQn-80),sS(fan(t.q.getTime()),fan(c.q.getTime()))&&e4(t,c.q.getFullYear()-sQn+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),o=t.q.getMonth(),FJ(t,t.q.getDate()+i),t.q.getMonth()!=o&&FJ(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>_Vn&&(a=t.q.getTimezoneOffset(),dO(t,rbn(fan(t.q.getTime()),60*(n.o-a)*VVn))),!0}function gUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(cL(r=mMn(t,(hWn(),dlt)),239)){for(b=BB(r,33),w=t.e,f=new wA(t.c),c=t.d,f.a+=c.b,f.b+=c.d,SN(BB(ZAn(b,(HXn(),qgt)),174),(n_n(),qIt))&&(Ol(l=BB(ZAn(b,zgt),116),c.a),_l(l,c.d),Al(l,c.b),Fl(l,c.c)),e=new Np,s=new Wb(t.a);s.a<s.c.c.length;)for(cL(mMn(u=BB(n0(s),10),dlt),239)?CUn(u,f):cL(mMn(u,dlt),186)&&!w&&SA(i=BB(mMn(u,dlt),118),(g=yFn(t,u,i.g,i.f)).a,g.b),d=new Wb(u.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Qw(u)),new Yw(e));if(w)for(d=new Wb(w.j);d.a<d.c.c.length;)JT(AV(new Rq(null,new w1(BB(n0(d),11).g,16)),new Jw(w)),new Zw(e));for(p=BB(ZAn(b,Zdt),218),a=new Wb(e);a.a<a.c.c.length;)pzn(BB(n0(a),17),p,f);for(m_n(t),o=new Wb(t.a);o.a<o.c.c.length;)(h=(u=BB(n0(o),10)).e)&&gUn(n,h)}}function pUn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,gZn),"ELK Force"),"Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported."),new dt),gZn),EG((hAn(),tAt),Pun(Gk(aAt,1),$Vn,237,0,[ZOt]))))),u2(n,gZn,pZn,iln(1)),u2(n,gZn,vZn,80),u2(n,gZn,mZn,5),u2(n,gZn,VJn,dZn),u2(n,gZn,yZn,iln(1)),u2(n,gZn,kZn,(hN(),!0)),u2(n,gZn,QJn,Qct),u2(n,gZn,jZn,mpn(Hct)),u2(n,gZn,EZn,mpn(Yct)),u2(n,gZn,TZn,!1),u2(n,gZn,MZn,mpn(Wct)),u2(n,gZn,SZn,mpn(Xct)),u2(n,gZn,PZn,mpn(Uct)),u2(n,gZn,CZn,mpn(zct)),u2(n,gZn,IZn,mpn(Jct)),u2(n,gZn,oZn,mpn(Gct)),u2(n,gZn,fZn,mpn(aat)),u2(n,gZn,sZn,mpn(qct)),u2(n,gZn,bZn,mpn(tat)),u2(n,gZn,hZn,mpn(eat))}function vUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,f=PDn(n,t),r=s.b-o.b-o.c,c=u.a.a,a=s.c+o.b,w=n.w,f!=(cpn(),BCt)&&f!=qCt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=f==BCt?c-2*n.w:c,f=FCt),r<c&&!n.B.Hc((n_n(),WIt)))f==BCt?a+=w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):w+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=f==BCt?c-2*n.w:c,f=FCt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),w+=e.Math.max(0,i)}for(b=BB(BB(h6(n.r,t),21),84).Kc();b.Ob();)(l=BB(b.Pb(),111)).e.a=a+l.d.b,l.e.b=(h=l.b).Xe((sWn(),aPt))?h.Hf()==(kUn(),sIt)?-h.rf().b-Gy(MD(h.We(aPt))):Gy(MD(h.We(aPt))):h.Hf()==(kUn(),sIt)?-h.rf().b:0,a+=l.d.b+l.b.rf().a+l.d.c+w}}function mUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(!BB(BB(h6(n.r,t),21),84).dc()){if(s=(u=BB(oV(n.b,t),124)).i,o=u.n,l=PDn(n,t),r=s.a-o.d-o.a,c=u.a.b,a=s.d+o.d,d=n.w,h=n.o.a,l!=(cpn(),BCt)&&l!=qCt||1!=BB(BB(h6(n.r,t),21),84).gc()||(c=l==BCt?c-2*n.w:c,l=FCt),r<c&&!n.B.Hc((n_n(),WIt)))l==BCt?a+=d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1):d+=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1);else switch(r<c&&(c=l==BCt?c-2*n.w:c,l=FCt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(BB(BB(h6(n.r,t),21),84).gc()-1),d+=e.Math.max(0,i)}for(w=BB(BB(h6(n.r,t),21),84).Kc();w.Ob();)(b=BB(w.Pb(),111)).e.a=(f=b.b).Xe((sWn(),aPt))?f.Hf()==(kUn(),CIt)?-f.rf().a-Gy(MD(f.We(aPt))):h+Gy(MD(f.We(aPt))):f.Hf()==(kUn(),CIt)?-f.rf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.rf().b+b.d.a+d}}function yUn(n){var t,i,r,c,a,u,o,s,f,l,b,w,d,g,p;for(n.n=Gy(MD(mMn(n.g,(HXn(),Opt)))),n.e=Gy(MD(mMn(n.g,Tpt))),n.i=n.g.b.c.length,o=n.i-1,w=0,n.j=0,n.k=0,n.a=u6(x8(Att,sVn,19,n.i,0,1)),n.b=u6(x8(Ptt,sVn,333,n.i,7,1)),u=new Wb(n.g.b);u.a<u.c.c.length;){for((c=BB(n0(u),29)).p=o,b=new Wb(c.a);b.a<b.c.c.length;)(l=BB(n0(b),10)).p=w,++w;--o}for(n.f=x8(ANt,hQn,25,w,15,1),n.c=kq(ANt,[sVn,hQn],[48,25],15,[w,3],2),n.o=new Np,n.p=new Np,t=0,n.d=0,a=new Wb(n.g.b);a.a<a.c.c.length;){for(o=(c=BB(n0(a),29)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Wb(c.a);b.a<b.c.c.length;)w=(l=BB(n0(b),10)).p,n.f[w]=l.c.p,f+=l.o.b+n.n,i=F3(new oz(ZL(fbn(l).a.Kc(),new h))),g=F3(new oz(ZL(lbn(l).a.Kc(),new h))),n.c[w][0]=g-i,n.c[w][1]=i,n.c[w][2]=g,r+=i,p+=g,i>0&&WB(n.p,l),WB(n.o,l);d=s+(t-=r),f+=t*n.e,c5(n.a,o,iln(d)),c5(n.b,o,f),n.j=e.Math.max(n.j,d),n.k=e.Math.max(n.k,f),n.d+=t,t+=p}}function kUn(){var n;kUn=O,PIt=new WC(hJn,0),sIt=new WC(mJn,1),oIt=new WC(yJn,2),SIt=new WC(kJn,3),CIt=new WC(jJn,4),SQ(),wIt=new Ak(new YK(n=BB(Vj(FIt),9),BB(SR(n,n.length),9),0)),dIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[]))),hIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[]))),EIt=ffn(EG(SIt,Pun(Gk(FIt,1),YZn,61,0,[]))),MIt=ffn(EG(CIt,Pun(Gk(FIt,1),YZn,61,0,[]))),yIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[SIt]))),bIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),jIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),gIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt]))),TIt=ffn(EG(SIt,Pun(Gk(FIt,1),YZn,61,0,[CIt]))),fIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[SIt]))),mIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,CIt]))),lIt=ffn(EG(oIt,Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt]))),kIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[SIt,CIt]))),pIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt]))),vIt=ffn(EG(sIt,Pun(Gk(FIt,1),YZn,61,0,[oIt,SIt,CIt])))}function jUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(0!=t.b){for(l=new YT,a=null,b=null,i=CJ(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),u=0,v=spn(t,0);v.b!=v.d.c;)for(g=BB(b3(v),86),GI(b)!==GI(mMn(g,(qqn(),rkt)))&&(b=SD(mMn(g,rkt)),u=0),a=null!=b?b+d0(u++,i):d0(u++,i),hon(g,rkt,a),d=new wg(spn(new bg(g).a.d,0));EE(d.a);)r5(l,w=BB(b3(d.a),188).c,l.c.b,l.c),hon(w,rkt,a);for(f=new xp,c=0;c<a.length-i;c++)for(p=spn(t,0);p.b!=p.d.c;)mZ(f,o=fx(SD(mMn(g=BB(b3(p),86),(qqn(),rkt))),0,c+1),iln(null!=(null==o?qI(AY(f.f,null)):hS(f.g,o))?BB(null==o?qI(AY(f.f,null)):hS(f.g,o),19).a+1:1));for(h=new usn(new Pb(f).a);h.b;)s=ten(h),r=iln(null!=RX(n.a,s.cd())?BB(RX(n.a,s.cd()),19).a:0),mZ(n.a,SD(s.cd()),iln(BB(s.dd(),19).a+r.a)),(!(r=BB(RX(n.b,s.cd()),19))||r.a<BB(s.dd(),19).a)&&mZ(n.b,SD(s.cd()),BB(s.dd(),19));jUn(n,l)}}function EUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(OTn(i,"Interactive node layering",1),r=new Np,w=new Wb(t.a);w.a<w.c.c.length;){for(s=(h=(l=BB(n0(w),10)).n.a)+l.o.a,s=e.Math.max(h+1,s),v=new M2(r,0),c=null;v.b<v.d.gc();){if(Px(v.b<v.d.gc()),(g=BB(v.d.Xb(v.c=v.b++),569)).c>=s){Px(v.b>0),v.a.Xb(v.c=--v.b);break}g.a>h&&(c?(gun(c.b,g.b),c.a=e.Math.max(c.a,g.a),fW(v)):(WB(g.b,l),g.c=e.Math.min(g.c,h),g.a=e.Math.max(g.a,s),c=g))}c||((c=new im).c=h,c.a=s,yR(v,c),WB(c.b,l))}for(o=t.b,f=0,p=new Wb(r);p.a<p.c.c.length;)for(g=BB(n0(p),569),(a=new HX(t)).p=f++,o.c[o.c.length]=a,d=new Wb(g.b);d.a<d.c.c.length;)PZ(l=BB(n0(d),10),a),l.p=0;for(b=new Wb(t.a);b.a<b.c.c.length;)0==(l=BB(n0(b),10)).p&&CDn(n,l,t);for(u=new M2(o,0);u.b<u.d.gc();)0==(Px(u.b<u.d.gc()),BB(u.d.Xb(u.c=u.b++),29)).a.c.length&&fW(u);t.a.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function TUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(0!=t.e.c.length&&0!=e.e.c.length){if((i=BB(xq(t.e,0),17).c.i)==(a=BB(xq(e.e,0),17).c.i))return E$(BB(mMn(BB(xq(t.e,0),17),(hWn(),wlt)),19).a,BB(mMn(BB(xq(e.e,0),17),wlt),19).a);for(f=0,l=(h=n.a).length;f<l;++f){if((s=h[f])==i)return 1;if(s==a)return-1}}return 0!=t.g.c.length&&0!=e.g.c.length?(c=BB(mMn(t,(hWn(),llt)),10),o=BB(mMn(e,llt),10),r=0,u=0,Lx(BB(xq(t.g,0),17),wlt)&&(r=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),Lx(BB(xq(e.g,0),17),wlt)&&(u=BB(mMn(BB(xq(t.g,0),17),wlt),19).a),c&&c==o?qy(TD(mMn(BB(xq(t.g,0),17),Clt)))&&!qy(TD(mMn(BB(xq(e.g,0),17),Clt)))?1:!qy(TD(mMn(BB(xq(t.g,0),17),Clt)))&&qy(TD(mMn(BB(xq(e.g,0),17),Clt)))||r<u?-1:r>u?1:0:(n.b&&(n.b._b(c)&&(r=BB(n.b.xc(c),19).a),n.b._b(o)&&(u=BB(n.b.xc(o),19).a)),r<u?-1:r>u?1:0)):0!=t.e.c.length&&0!=e.g.c.length?1:-1}function MUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(OTn(t,O1n,1),w=new Np,y=new Np,s=new Wb(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=n2((o=BB(n0(s),29)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(uSn(),Cut)&&vA(BB(mMn(h,(HXn(),ept)),98))){for(LK(BB(mMn(h,(HXn(),ept)),98))||HNn(h),hon(h,(hWn(),rlt),h),w.c=x8(Ant,HWn,1,0,5,1),y.c=x8(Ant,HWn,1,0,5,1),e=new Np,qrn(v=new YT,DSn(h,(kUn(),sIt))),AXn(n,v,w,y,e),u=g,k=h,c=new Wb(w);c.a<c.c.c.length;)Qyn(i=BB(n0(c),10),u,o),++g,hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(i,clt),15).Fc(k);for(yQ(v),p=DSn(h,SIt).Kc();p.Ob();)r5(v,BB(p.Pb(),11),v.a,v.a.a);for(AXn(n,v,y,null,e),m=h,r=new Wb(y);r.a<r.c.c.length;)Qyn(i=BB(n0(r),10),++g,o),hon(i,rlt,h),a=BB(xq(i.j,0),11),d=BB(mMn(a,dlt),11),qy(TD(mMn(d,jdt)))||BB(mMn(m,clt),15).Fc(i);0==e.c.length||hon(h,xft,e)}HSn(t)}function SUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(h=BB(mMn(n,(Mrn(),sat)),33),d=DWn,g=DWn,b=_Vn,w=_Vn,v=new Wb(n.e);v.a<v.c.c.length;)E=(p=BB(n0(v),144)).d,T=p.e,d=e.Math.min(d,E.a-T.a/2),g=e.Math.min(g,E.b-T.b/2),b=e.Math.max(b,E.a+T.a/2),w=e.Math.max(w,E.b+T.b/2);for(k=new xC((j=BB(ZAn(h,(fRn(),Vct)),116)).b-d,j.d-g),o=new Wb(n.e);o.a<o.c.c.length;)cL(y=mMn(u=BB(n0(o),144),sat),239)&&SA(f=BB(y,33),(m=UR(u.d,k)).a-f.g/2,m.b-f.f/2);for(r=new Wb(n.c);r.a<r.c.c.length;)i=BB(n0(r),282),s=cDn(BB(mMn(i,sat),79),!0,!0),Ukn(S=XR(B$(i.d.d),i.c.d),i.c.e.a,i.c.e.b),CA(s,(M=UR(S,i.c.d)).a,M.b),Ukn(P=XR(B$(i.c.d),i.d.d),i.d.e.a,i.d.e.b),PA(s,(t=UR(P,i.d.d)).a,t.b);for(a=new Wb(n.d);a.a<a.c.c.length;)c=BB(n0(a),447),SA(BB(mMn(c,sat),137),(l=UR(c.d,k)).a,l.b);KUn(h,b-d+(j.b+j.c),w-g+(j.d+j.a),!1,!0)}function PUn(n){var t,e,i,r,c,a,u,o,s,h,f;for(e=null,u=null,(r=BB(mMn(n.b,(HXn(),igt)),376))==(A6(),Jvt)&&(e=new Np,u=new Np),a=new Wb(n.d);a.a<a.c.c.length;)if((c=BB(n0(a),101)).i)switch(c.e.g){case 0:t=BB(u4(new QT(c.b)),61),r==Jvt&&t==(kUn(),sIt)?e.c[e.c.length]=c:r==Jvt&&t==(kUn(),SIt)?u.c[u.c.length]=c:Nmn(c,t);break;case 1:o=c.a.d.j,s=c.c.d.j,o==(kUn(),sIt)?bU(c,sIt,(Oun(),mst),c.a):s==sIt?bU(c,sIt,(Oun(),yst),c.c):o==SIt?bU(c,SIt,(Oun(),yst),c.a):s==SIt&&bU(c,SIt,(Oun(),mst),c.c);break;case 2:case 3:SN(i=c.b,(kUn(),sIt))?SN(i,SIt)?SN(i,CIt)?SN(i,oIt)||bU(c,sIt,(Oun(),yst),c.c):bU(c,sIt,(Oun(),mst),c.a):bU(c,sIt,(Oun(),vst),null):bU(c,SIt,(Oun(),vst),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(kUn(),sIt)||f==sIt?bU(c,SIt,(Oun(),vst),null):bU(c,sIt,(Oun(),vst),null)}e&&(0==e.c.length||QFn(e,(kUn(),sIt)),0==u.c.length||QFn(u,(kUn(),SIt)))}function CUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;for(i=BB(mMn(n,(hWn(),dlt)),33),b=BB(mMn(n,(HXn(),Bdt)),19).a,c=BB(mMn(n,jgt),19).a,Ypn(i,Bdt,iln(b)),Ypn(i,jgt,iln(c)),Pen(i,n.n.a+t.a),Cen(i,n.n.b+t.b),(0!=BB(ZAn(i,Fgt),174).gc()||n.e||GI(mMn(vW(n),_gt))===GI((Nvn(),mvt))&&pA((bvn(),(n.q?n.q:(SQ(),SQ(),het))._b(Rgt)?BB(mMn(n,Rgt),197):BB(mMn(vW(n),Kgt),197))))&&(Sen(i,n.o.a),Men(i,n.o.b)),f=new Wb(n.j);f.a<f.c.c.length;)cL(w=mMn(s=BB(n0(f),11),dlt),186)&&(SA(r=BB(w,118),s.n.a,s.n.b),Ypn(r,upt,s.j));for(l=0!=BB(mMn(n,$gt),174).gc(),o=new Wb(n.b);o.a<o.c.c.length;)a=BB(n0(o),70),(l||0!=BB(mMn(a,$gt),174).gc())&&(MA(e=BB(mMn(a,dlt),137),a.o.a,a.o.b),SA(e,a.n.a,a.n.b));if(!Hz(BB(mMn(n,cpt),21)))for(h=new Wb(n.j);h.a<h.c.c.length;)for(u=new Wb((s=BB(n0(h),11)).f);u.a<u.c.c.length;)a=BB(n0(u),70),Sen(e=BB(mMn(a,dlt),137),a.o.a),Men(e,a.o.b),SA(e,a.n.a,a.n.b)}function IUn(n){var t,e,i,r,c;switch(OY(n,i8n),(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i+(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){case 0:throw Hp(new _y("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i?JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))):JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))}if(1==(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c).i){if(r=PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)),c=PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82)),JJ(r)==JJ(c))return JJ(r);if(r==JJ(c))return r;if(c==JJ(r))return c}for(t=PTn(BB(U5(i=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),(!n.c&&(n.c=new hK(KOt,n,5,8)),n.c)])))),82));dAn(i);)if((e=PTn(BB(U5(i),82)))!=t&&!Ctn(e,t))if(JJ(e)==JJ(t))t=JJ(e);else if(!(t=B$n(t,e)))return null;return t}function OUn(n,t,i){var r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;for(OTn(i,"Polyline edge routing",1),v=Gy(MD(mMn(t,(HXn(),tgt)))),d=Gy(MD(mMn(t,Apt))),c=Gy(MD(mMn(t,kpt))),r=e.Math.min(1,c/d),k=0,s=0,0!=t.b.c.length&&(k=.4*r*(j=hLn(BB(xq(t.b,0),29)))),o=new M2(t.b,0);o.b<o.d.gc();){for(Px(o.b<o.d.gc()),(a=VI(u=BB(o.d.Xb(o.c=o.b++),29),jyt))&&k>0&&(k-=d),Tqn(u,k),l=0,w=new Wb(u.a);w.a<w.c.c.length;){for(f=0,p=new oz(ZL(lbn(b=BB(n0(w),10)).a.Kc(),new h));dAn(p);)m=g1((g=BB(U5(p),17)).c).b,y=g1(g.d).b,u!=g.d.i.c||b5(g)||(VIn(g,k,.4*r*e.Math.abs(m-y)),g.c.j==(kUn(),CIt)&&(m=0,y=0)),f=e.Math.max(f,e.Math.abs(y-m));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:Gqn(n,b,k,v)}l=e.Math.max(l,f)}o.b<o.d.gc()&&(j=hLn((Px(o.b<o.d.gc()),BB(o.d.Xb(o.c=o.b++),29))),l=e.Math.max(l,j),Px(o.b>0),o.a.Xb(o.c=--o.b)),s=.4*r*l,!a&&o.b<o.d.gc()&&(s+=d),k+=u.c.a+s}n.a.a.$b(),t.f.a=k,HSn(i)}function AUn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v;for(s=new xp,u=new pJ,i=new Wb(n.a.a.b);i.a<i.c.c.length;)if(o=f2(t=BB(n0(i),57)))jCn(s.f,o,t);else if(v=f3(t))for(r=new Wb(v.k);r.a<r.c.c.length;)JIn(u,BB(n0(r),17),t);for(e=new Wb(n.a.a.b);e.a<e.c.c.length;)if(o=f2(t=BB(n0(e),57)))for(a=new oz(ZL(lbn(o).a.Kc(),new h));dAn(a);)if(!b5(c=BB(U5(a),17))&&(w=c.c,p=c.d,!(kUn(),yIt).Hc(c.c.j)||!yIt.Hc(c.d.j))){if(d=BB(RX(s,c.d.i),57),UNn(aM(cM(uM(rM(new Hv,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==CIt&&$z((gcn(),w)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}if(p.j==oIt&&Az((gcn(),p)))for(l=BB(h6(u,c),21).Kc();l.Ob();)if((f=BB(l.Pb(),57)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;UNn(aM(cM(uM(rM(new Hv,1),100),b),g))}}}function $Un(n){var t,e,i,r,c,a,u,o;if(RHn(),null==n)return null;if((r=GO(n,YTn(37)))<0)return n;for(o=new lN(n.substr(0,r)),t=x8(NNt,v6n,25,4,15,1),u=0,i=0,a=n.length;r<a;r++)if(b1(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&ton((b1(r+1,n.length),n.charCodeAt(r+1)),IAt,OAt)&&ton((b1(r+2,n.length),n.charCodeAt(r+2)),IAt,OAt))if(e=CH((b1(r+1,n.length),n.charCodeAt(r+1)),(b1(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[u++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[u++]=e<<24>>24,i=2):224==(240&e)?(t[u++]=e<<24>>24,i=3):240==(248&e)&&(t[u++]=e<<24>>24,i=4)),i>0){if(u==i){switch(u){case 2:xX(o,((31&t[0])<<6|63&t[1])&QVn);break;case 3:xX(o,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&QVn)}u=0,i=0}}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,o.a+=String.fromCharCode(e)}else{for(c=0;c<u;++c)xX(o,t[c]&QVn);u=0,xX(o,(b1(r,n.length),n.charCodeAt(r)))}return o.a}function LUn(n,t,e,i,r){var c,a,u;if(ynn(n,t),a=t[0],c=fV(e.c,0),u=-1,Yon(e))if(i>0){if(a+i>n.length)return!1;u=UIn(n.substr(0,a+i),t)}else u=UIn(n,t);switch(c){case 71:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn]),t),r.e=u,!0;case 77:return gDn(n,t,r,u,a);case 76:return pDn(n,t,r,u,a);case 69:return rCn(n,t,a,r);case 99:return cCn(n,t,a,r);case 97:return u=zTn(n,a,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"]),t),r.b=u,!0;case 121:return vDn(n,t,a,u,e,r);case 100:return!(u<=0||(r.c=u,0));case 83:return!(u<0)&&jwn(u,a,t[0],r);case 104:12==u&&(u=0);case 75:case 72:return!(u<0||(r.f=u,r.g=!1,0));case 107:return!(u<0||(r.f=u,r.g=!0,0));case 109:return!(u<0||(r.j=u,0));case 115:return!(u<0||(r.n=u,0));case 90:if(a<n.length&&(b1(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return CTn(n,a,t,r);default:return!1}}function NUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(b=BB(BB(h6(n.r,t),21),84),t!=(kUn(),oIt)&&t!=CIt){for(a=t==sIt?(Dan(),Nrt):(Dan(),Rrt),k=t==sIt?(G7(),crt):(G7(),irt),c=(r=(i=BB(oV(n.b,t),124)).i).c+Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.b,n.C.b,n.k])),v=r.c+r.b-Lon(Pun(Gk(xNt,1),qQn,25,15,[i.n.c,n.C.c,n.k])),u=Zk(H_(a),n.t),m=t==sIt?KQn:RQn,l=b.Kc();l.Ob();)!(h=BB(l.Pb(),111)).c||h.c.d.c.length<=0||(p=h.b.rf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(o=w.n,w.e.b+o.d+o.a),OY(k,uJn),w.f=k,l9(w,(J9(),Jit)),d.c=g.a-(d.b-p.a)/2,j=e.Math.min(c,g.a),E=e.Math.max(v,g.a+p.a),d.c<j?d.c=j:d.c+d.b>E&&(d.c=E-d.b),WB(u.d,new xG(d,kln(u,d))),m=t==sIt?e.Math.max(m,g.b+h.b.rf().b):e.Math.min(m,g.b));for(m+=t==sIt?n.t:-n.t,(y=Pwn((u.e=m,u)))>0&&(BB(oV(n.b,t),124).a.b=y),f=b.Kc();f.Ob();)!(h=BB(f.Pb(),111)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else aUn(n,t)}function xUn(n){var t,e,i,r,c,a,u,o,s,f;for(t=new xp,a=new AL(n);a.e!=a.i.gc();){for(c=BB(kpn(a),33),e=new Rv,VW(Mct,c,e),f=new ut,i=BB(P4(new Rq(null,new zU(new oz(ZL(wLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[(qsn(),Uet)])))),83),Jen(e,BB(i.xc((hN(),!0)),14),new ot),r=BB(P4(AV(BB(i.xc(!1),15).Lc(),new st),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();r.Ob();)(s=CMn(BB(r.Pb(),79)))&&((u=BB(qI(AY(t.f,s)),21))||(u=Oxn(s),jCn(t.f,s,u)),Frn(e,u));for(i=BB(P4(new Rq(null,new zU(new oz(ZL(dLn(c).a.Kc(),new h)))),SG(f,m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet])))),83),Jen(e,BB(i.xc(!0),14),new ht),o=BB(P4(AV(BB(i.xc(!1),15).Lc(),new ft),m9(new H,new B,new rn,Pun(Gk(nit,1),$Vn,132,0,[Uet]))),15).Kc();o.Ob();)(s=IMn(BB(o.Pb(),79)))&&((u=BB(qI(AY(t.f,s)),21))||(u=Oxn(s),jCn(t.f,s,u)),Frn(e,u))}}function DUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d;if(uHn(),(o=Vhn(n,0)<0)&&(n=j7(n)),0==Vhn(n,0))switch(t){case 0:return"0";case 1:return WQn;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 Ck).a+=t<0?"0E+":"0E",b.a+=t==_Vn?"2147483648":""+-t,b.a}f=x8(ONt,WVn,25,1+(h=18),15,1),e=h,d=n;do{s=d,d=Ojn(d,10),f[--e]=dG(rbn(48,ibn(s,cbn(d,10))))&QVn}while(0!=Vhn(d,0));if(r=ibn(ibn(ibn(h,e),t),1),0==t)return o&&(f[--e]=45),Bdn(f,e,h-e);if(t>0&&Vhn(r,-6)>=0){if(Vhn(r,0)>=0){for(c=e+dG(r),u=h-1;u>=c;u--)f[u+1]=f[u];return f[++c]=46,o&&(f[--e]=45),Bdn(f,e,h-e+1)}for(a=2;sS(a,rbn(j7(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,o&&(f[--e]=45),Bdn(f,e,h-e)}return w=e+1,i=h,l=new Ik,o&&(l.a+="-"),i-w>=1?(xX(l,f[e]),l.a+=".",l.a+=Bdn(f,e+1,h-e-1)):l.a+=Bdn(f,e,h-e),l.a+="E",Vhn(r,0)>0&&(l.a+="+"),l.a+=""+vz(r),l.a}function RUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c=x8(Ant,HWn,1,0,5,1),n.i.c=x8(Ant,HWn,1,0,5,1),n.g.a.$b(),t)for(a=new Wb(t.a);a.a<a.c.c.length;)for(h=DSn(c=BB(n0(a),10),(kUn(),oIt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.e,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Cut)||u==Iut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i));if(e)for(a=new Wb(e.a);a.a<a.c.c.length;){for(o=new Wb((c=BB(n0(a),10)).j);o.a<o.c.c.length;)for(r=new Wb(BB(n0(o),11).g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))&&TU(n.g,i);for(h=DSn(c,(kUn(),CIt)).Kc();h.Ob();)for(s=BB(h.Pb(),11),TU(n.f,s),r=new Wb(s.g);r.a<r.c.c.length;)b5(i=BB(n0(r),17))||(WB(n.c,i),ppn(n,i),((u=i.c.i.k)==(uSn(),Cut)||u==Iut||u==Mut||u==Tut)&&WB(n.j,i),(f=(l=i.d).i.c)==e?TU(n.f,l):f==t?TU(n.e,l):y7(n.c,i))}}function KUn(n,t,i,r,c){var a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;if(p=new xC(n.g,n.f),(g=XPn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),E=g.a/p.a,f=g.b/p.b,k=g.a-p.a,s=g.b-p.b,r)for(u=JJ(n)?BB(ZAn(JJ(n),(sWn(),bSt)),103):BB(ZAn(n,(sWn(),bSt)),103),o=GI(ZAn(n,(sWn(),uPt)))===GI((QEn(),XCt)),m=new AL((!n.c&&(n.c=new eU(XOt,n,9,9)),n.c));m.e!=m.i.gc();)switch(v=BB(kpn(m),118),(y=BB(ZAn(v,wPt),61))==(kUn(),PIt)&&(y=OFn(v,u),Ypn(v,wPt,y)),y.g){case 1:o||Pen(v,v.i*E);break;case 2:Pen(v,v.i+k),o||Cen(v,v.j*f);break;case 3:o||Pen(v,v.i*E),Cen(v,v.j+s);break;case 4:o||Cen(v,v.j*f)}if(MA(n,g.a,g.b),c)for(b=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=BB(kpn(b),137)).i+l.g/2,d=l.j+l.f/2,(j=w/p.a)+(h=d/p.b)>=1&&(j-h>0&&d>=0?(Pen(l,l.i+k),Cen(l,l.j+s*h)):j-h<0&&w>=0&&(Pen(l,l.i+k*j),Cen(l,l.j+s)));return Ypn(n,(sWn(),KSt),(mdn(),new YK(a=BB(Vj(YIt),9),BB(SR(a,a.length),9),0))),new xC(E,f)}function _Un(n){var t,i,r,c,a,u,o,s,h,f,l;if(f=JJ(PTn(BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)))==JJ(PTn(BB(Wtn((!n.c&&(n.c=new hK(KOt,n,5,8)),n.c),0),82))),u=new Gj,(t=BB(ZAn(n,(Xsn(),hCt)),74))&&t.b>=2){if(0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),i=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(l=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));l.e!=l.i.gc();)Qjn(l);VFn(t,BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202))}if(f)for(r=new AL((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new AL((!(i=BB(kpn(r),202)).a&&(i.a=new $L(xOt,i,5)),i.a));s.e!=s.i.gc();)o=BB(kpn(s),469),u.a=e.Math.max(u.a,o.a),u.b=e.Math.max(u.b,o.b);for(a=new AL((!n.n&&(n.n=new eU(zOt,n,1,7)),n.n));a.e!=a.i.gc();)c=BB(kpn(a),137),(h=BB(ZAn(c,gCt),8))&&SA(c,h.a,h.b),f&&(u.a=e.Math.max(u.a,c.i+c.g),u.b=e.Math.max(u.b,c.j+c.f));return u}function FUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(v=t.c.length,c=new qKn(n.a,i,null,null),E=x8(xNt,qQn,25,v,15,1),w=x8(xNt,qQn,25,v,15,1),b=x8(xNt,qQn,25,v,15,1),d=0,o=0;o<v;o++)w[o]=DWn,b[o]=_Vn;for(s=0;s<v;s++)for(l1(s,t.c.length),r=BB(t.c[s],180),E[s]=v$n(r),E[d]>E[s]&&(d=s),f=new Wb(n.a.b);f.a<f.c.c.length;)for(p=new Wb(BB(n0(f),29).a);p.a<p.c.c.length;)g=BB(n0(p),10),k=Gy(r.p[g.p])+Gy(r.d[g.p]),w[s]=e.Math.min(w[s],k),b[s]=e.Math.max(b[s],k+g.o.b);for(j=x8(xNt,qQn,25,v,15,1),h=0;h<v;h++)(l1(h,t.c.length),BB(t.c[h],180)).o==(oZ(),ryt)?j[h]=w[d]-w[h]:j[h]=b[d]-b[h];for(a=x8(xNt,qQn,25,v,15,1),l=new Wb(n.a.b);l.a<l.c.c.length;)for(y=new Wb(BB(n0(l),29).a);y.a<y.c.c.length;){for(m=BB(n0(y),10),u=0;u<v;u++)a[u]=Gy((l1(u,t.c.length),BB(t.c[u],180)).p[m.p])+Gy((l1(u,t.c.length),BB(t.c[u],180)).d[m.p])+j[u];a.sort(ien(T.prototype.te,T,[])),c.p[m.p]=(a[1]+a[2])/2,c.d[m.p]=0}return c}function BUn(n,t,e){var i,r,c,a,u;switch(i=t.i,c=n.i.o,r=n.i.d,u=n.n,a=Aon(Pun(Gk(PMt,1),sVn,8,0,[u,n.a])),n.j.g){case 1:WD(t,(G7(),irt)),i.d=-r.d-e-i.a,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 2:l9(t,(J9(),Yit)),i.c=c.a+r.c+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e);break;case 3:WD(t,(G7(),crt)),i.d=c.b+r.a+e,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(l9(t,(J9(),Jit)),i.c=a.a-Gy(MD(mMn(n,blt)))-e-i.b):(l9(t,(J9(),Yit)),i.c=a.a+Gy(MD(mMn(n,blt)))+e);break;case 4:l9(t,(J9(),Jit)),i.c=-r.b-e-i.b,BB(BB(xq(t.d,0),181).We((hWn(),ult)),285)==(Xyn(),jCt)?(WD(t,(G7(),irt)),i.d=a.b-Gy(MD(mMn(n,blt)))-e-i.a):(WD(t,(G7(),crt)),i.d=a.b+Gy(MD(mMn(n,blt)))+e)}}function HUn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O;for(w=0,S=0,s=new Wb(n);s.a<s.c.c.length;)ozn(o=BB(n0(s),33)),w=e.Math.max(w,o.g),S+=o.g*o.f;for(M=Zyn(n,S/n.c.length),S+=n.c.length*M,w=e.Math.max(w,e.Math.sqrt(S*u))+i.b,I=i.b,O=i.d,b=0,f=i.b+i.c,DH(T=new YT,iln(0)),j=new YT,h=new M2(n,0);h.b<h.d.gc();)Px(h.b<h.d.gc()),C=(o=BB(h.d.Xb(h.c=h.b++),33)).g,l=o.f,I+C>w&&(a&&(fO(j,b),fO(T,iln(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),Pen(o,I),Cen(o,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)<c&&(b+=c-P,P=c),a)for(I=i.b,h=new M2(n,0),fO(T,iln(n.c.length)),p=BB(b3(E=spn(T,0)),19).a,fO(j,b),k=spn(j,0),y=0;h.b<h.d.gc();)h.b==p&&(I=i.b,y=Gy(MD(b3(k))),p=BB(b3(E),19).a),Px(h.b<h.d.gc()),v=(o=BB(h.d.Xb(h.c=h.b++),33)).f,Men(o,y),d=y,h.b==p&&(g=f-I-i.c,m=o.g,Sen(o,g),lCn(o,new xC(g,d),new xC(m,v))),I+=o.g+t;return new xC(f,P)}function qUn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(OTn(t,"Compound graph postprocessor",1),i=qy(TD(mMn(n,(HXn(),Dpt)))),o=BB(mMn(n,(hWn(),Hft)),224),f=new Rv,v=o.ec().Kc();v.Ob();){for(p=BB(v.Pb(),17),u=new t_(o.cc(p)),SQ(),m$(u,new _w(n)),j=ccn((l1(0,u.c.length),BB(u.c[0],243))),T=acn(BB(xq(u,u.c.length-1),243)),y=j.i,m=wan(T.i,y)?y.e:vW(y),l=Apn(p,u),yQ(p.a),b=null,a=new Wb(u);a.a<a.c.c.length;)c=BB(n0(a),243),OPn(g=new Gj,c.a,m),w=c.b,Wsn(r=new km,0,w.a),Ztn(r,g),k=new wA(g1(w.c)),E=new wA(g1(w.d)),UR(k,g),UR(E,g),b&&(0==r.b?d=E:(Px(0!=r.b),d=BB(r.a.a.c,8)),M=e.Math.abs(b.a-d.a)>lZn,S=e.Math.abs(b.b-d.b)>lZn,(!i&&M&&S||i&&(M||S))&&DH(p.a,k)),Frn(p.a,r),0==r.b?b=k:(Px(0!=r.b),b=BB(r.c.b.c,8)),Yan(w,l,g),acn(c)==T&&(vW(T.i)!=c.a&&OPn(g=new Gj,vW(T.i),m),hon(p,Rlt,g)),MSn(w,p,m),f.a.zc(w,f);SZ(p,j),MZ(p,T)}for(h=f.a.ec().Kc();h.Ob();)SZ(s=BB(h.Pb(),17),null),MZ(s,null);HSn(t)}function GUn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(1==n.gc())return BB(n.Xb(0),231);if(n.gc()<=0)return new y6;for(c=n.Kc();c.Ob();){for(i=BB(c.Pb(),231),d=0,f=DWn,l=DWn,s=_Vn,h=_Vn,w=new Wb(i.e);w.a<w.c.c.length;)b=BB(n0(w),144),d+=BB(mMn(b,(fRn(),Zct)),19).a,f=e.Math.min(f,b.d.a-b.e.a/2),l=e.Math.min(l,b.d.b-b.e.b/2),s=e.Math.max(s,b.d.a+b.e.a/2),h=e.Math.max(h,b.d.b+b.e.b/2);hon(i,(fRn(),Zct),iln(d)),hon(i,(Mrn(),oat),new xC(f,l)),hon(i,uat,new xC(s,h))}for(SQ(),n.ad(new wt),qan(g=new y6,BB(n.Xb(0),94)),o=0,m=0,a=n.Kc();a.Ob();)i=BB(a.Pb(),231),p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8)),o=e.Math.max(o,p.a),m+=p.a*p.b;for(o=e.Math.max(o,e.Math.sqrt(m)*Gy(MD(mMn(g,(fRn(),Fct))))),y=0,k=0,u=0,t=v=Gy(MD(mMn(g,cat))),r=n.Kc();r.Ob();)i=BB(r.Pb(),231),y+(p=XR(B$(BB(mMn(i,(Mrn(),uat)),8)),BB(mMn(i,oat),8))).a>o&&(y=0,k+=u+v,u=0),VKn(g,i,y,k),t=e.Math.max(t,y+p.a),u=e.Math.max(u,p.b),y+=p.a+v;return g}function zUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;switch(h=new km,n.a.g){case 3:l=BB(mMn(t.e,(hWn(),Nlt)),15),b=BB(mMn(t.j,Nlt),15),w=BB(mMn(t.f,Nlt),15),e=BB(mMn(t.e,$lt),15),i=BB(mMn(t.j,$lt),15),r=BB(mMn(t.f,$lt),15),gun(a=new Np,l),b.Jc(new yc),gun(a,cL(b,152)?o6(BB(b,152)):cL(b,131)?BB(b,131).a:cL(b,54)?new fy(b):new CT(b)),gun(a,w),gun(c=new Np,e),gun(c,cL(i,152)?o6(BB(i,152)):cL(i,131)?BB(i,131).a:cL(i,54)?new fy(i):new CT(i)),gun(c,r),hon(t.f,Nlt,a),hon(t.f,$lt,c),hon(t.f,xlt,t.f),hon(t.e,Nlt,null),hon(t.e,$lt,null),hon(t.j,Nlt,null),hon(t.j,$lt,null);break;case 1:Frn(h,t.e.a),DH(h,t.i.n),Frn(h,ean(t.j.a)),DH(h,t.a.n),Frn(h,t.f.a);break;default:Frn(h,t.e.a),Frn(h,ean(t.j.a)),Frn(h,t.f.a)}yQ(t.f.a),Frn(t.f.a,h),SZ(t.f,t.e.c),u=BB(mMn(t.e,(HXn(),vgt)),74),s=BB(mMn(t.j,vgt),74),o=BB(mMn(t.f,vgt),74),(u||s||o)&&(PU(f=new km,o),PU(f,s),PU(f,u),hon(t.f,vgt,f)),SZ(t.j,null),MZ(t.j,null),SZ(t.e,null),MZ(t.e,null),PZ(t.a,null),PZ(t.i,null),t.g&&zUn(n,t.g)}function UUn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(PFn(),null==n)return null;if((w=bln(c=V7(n)))%4!=0)return null;if(0==(d=w/4|0))return x8(NNt,v6n,25,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,u=0,o=0,s=0,b=0,l=0,h=0,f=x8(NNt,v6n,25,3*d,15,1);b<d-1;b++){if(!(VE(a=c[h++])&&VE(u=c[h++])&&VE(o=c[h++])&&VE(s=c[h++])))return null;t=WLt[a],e=WLt[u],i=WLt[o],r=WLt[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}return VE(a=c[h++])&&VE(u=c[h++])?(t=WLt[a],e=WLt[u],o=c[h++],s=c[h++],-1==WLt[o]||-1==WLt[s]?61==o&&61==s?0!=(15&e)?null:(aHn(f,0,g=x8(NNt,v6n,25,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=o&&61==s?0!=(3&(i=WLt[o]))?null:(aHn(f,0,g=x8(NNt,v6n,25,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=WLt[o],r=WLt[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 XUn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;for(OTn(t,O1n,1),l=BB(mMn(n,(HXn(),Zdt)),218),i=new Wb(n.b);i.a<i.c.c.length;)for(a=0,u=(c=n2(BB(n0(i),29).a)).length;a<u;++a)if((r=c[a]).k==(uSn(),Iut)){if(l==(Mbn(),JPt))for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||Agn(o),0==o.g.c.length||$gn(o);else if(cL(mMn(r,(hWn(),dlt)),17))w=BB(mMn(r,dlt),17),d=BB(DSn(r,(kUn(),CIt)).Kc().Pb(),11),g=BB(DSn(r,oIt).Kc().Pb(),11),p=BB(mMn(d,dlt),11),SZ(w,v=BB(mMn(g,dlt),11)),MZ(w,p),(m=new wA(g.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[v.i.n,v.n,v.a])).a,DH(w.a,m),(m=new wA(d.i.n)).a=Aon(Pun(Gk(PMt,1),sVn,8,0,[p.i.n,p.n,p.a])).a,DH(w.a,m);else{if(r.j.c.length>=2){for(b=!0,e=BB(n0(h=new Wb(r.j)),11),f=null;h.a<h.c.c.length;)if(f=e,e=BB(n0(h),11),!Nfn(mMn(f,dlt),mMn(e,dlt))){b=!1;break}}else b=!1;for(s=new Wb(r.j);s.a<s.c.c.length;)0==(o=BB(n0(s),11)).e.c.length||uxn(o,b),0==o.g.c.length||oxn(o,b)}PZ(r,null)}HSn(t)}function WUn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;return y=n.c[(l1(0,t.c.length),BB(t.c[0],17)).p],T=n.c[(l1(1,t.c.length),BB(t.c[1],17)).p],!(y.a.e.e-y.a.a-(y.b.e.e-y.b.a)==0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)==0||!cL(v=y.b.e.f,10)||(p=BB(v,10),j=n.i[p.p],E=p.c?E7(p.c.a,p,0):-1,a=RQn,E>0&&(c=BB(xq(p.c.a,E-1),10),u=n.i[c.p],M=e.Math.ceil(K$(n.n,c,p)),a=j.a.e-p.d.d-(u.a.e+c.o.b+c.d.a)-M),h=RQn,E<p.c.a.c.length-1&&(s=BB(xq(p.c.a,E+1),10),f=n.i[s.p],M=e.Math.ceil(K$(n.n,s,p)),h=f.a.e-s.d.d-(j.a.e+p.o.b+p.d.a)-M),!(i&&(h$(),rin(A3n),e.Math.abs(a-h)<=A3n||a==h||isNaN(a)&&isNaN(h)))&&(r=aX(y.a),o=-aX(y.b),l=-aX(T.a),m=aX(T.b),g=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)>0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)<0,d=y.a.e.e-y.a.a-(y.b.e.e-y.b.a)<0&&T.a.e.e-T.a.a-(T.b.e.e-T.b.a)>0,w=y.a.e.e+y.b.a<T.b.e.e+T.a.a,b=y.a.e.e+y.b.a>T.b.e.e+T.a.a,k=0,!g&&!d&&(b?a+l>0?k=l:h-r>0&&(k=r):w&&(a+o>0?k=o:h-m>0&&(k=m))),j.a.e+=k,j.b&&(j.d.e+=k),1)))}function VUn(n,t,i){var r,c,a,u,o,s,h,f,l,b;if(r=new UV(t.qf().a,t.qf().b,t.rf().a,t.rf().b),c=new bA,n.c)for(u=new Wb(t.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+t.qf().a,c.d=a.qf().b+t.qf().b,c.b=a.rf().a,c.a=a.rf().b,CPn(r,c);for(h=new Wb(t.Cf());h.a<h.c.c.length;){if(f=(s=BB(n0(h),838)).qf().a+t.qf().a,l=s.qf().b+t.qf().b,n.e&&(c.c=f,c.d=l,c.b=s.rf().a,c.a=s.rf().b,CPn(r,c)),n.d)for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),c.c=a.qf().a+f,c.d=a.qf().b+l,c.b=a.rf().a,c.a=a.rf().b,CPn(r,c);if(n.b){if(b=new xC(-i,-i),BB(t.We((sWn(),fPt)),174).Hc((lIn(),rIt)))for(u=new Wb(s.wf());u.a<u.c.c.length;)a=BB(n0(u),181),b.a+=a.rf().a+i,b.b+=a.rf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),X_n(r,s.Bf(),s.zf(),t,s,b,i)}}n.b&&X_n(r,t.Bf(),t.zf(),t,null,null,i),(o=new A_(t.Af())).d=e.Math.max(0,t.qf().b-r.d),o.a=e.Math.max(0,r.d+r.a-(t.qf().b+t.rf().b)),o.b=e.Math.max(0,t.qf().a-r.c),o.c=e.Math.max(0,r.c+r.b-(t.qf().a+t.rf().a)),t.Ef(o)}function QUn(){var n=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F"];return n[34]='\\"',n[92]="\\\\",n[173]="\\u00ad",n[1536]="\\u0600",n[1537]="\\u0601",n[1538]="\\u0602",n[1539]="\\u0603",n[1757]="\\u06dd",n[1807]="\\u070f",n[6068]="\\u17b4",n[6069]="\\u17b5",n[8203]="\\u200b",n[8204]="\\u200c",n[8205]="\\u200d",n[8206]="\\u200e",n[8207]="\\u200f",n[8232]="\\u2028",n[8233]="\\u2029",n[8234]="\\u202a",n[8235]="\\u202b",n[8236]="\\u202c",n[8237]="\\u202d",n[8238]="\\u202e",n[8288]="\\u2060",n[8289]="\\u2061",n[8290]="\\u2062",n[8291]="\\u2063",n[8292]="\\u2064",n[8298]="\\u206a",n[8299]="\\u206b",n[8300]="\\u206c",n[8301]="\\u206d",n[8302]="\\u206e",n[8303]="\\u206f",n[65279]="\\ufeff",n[65529]="\\ufff9",n[65530]="\\ufffa",n[65531]="\\ufffb",n}function YUn(n,t,e){var i,r,c,a,u,o,s,h,f,l;for(o=new Np,f=t.length,a=Ion(e),s=0;s<f;++s){switch(h=yN(t,YTn(61),s),c=(r=uun(i=fln(a,t.substr(s,h-s)))).Aj().Nh(),fV(t,++h)){case 39:u=lx(t,39,++h),WB(o,new CI(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 34:u=lx(t,34,++h),WB(o,new CI(i,YV(t.substr(h,u-h),c,r))),s=u+1;break;case 91:WB(o,new CI(i,l=new Np));n:for(;;){switch(fV(t,++h)){case 39:u=lx(t,39,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 34:u=lx(t,34,++h),WB(l,YV(t.substr(h,u-h),c,r)),h=u+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));l.c[l.c.length]=null,h+=3}if(!(h<f))break;switch(b1(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw Hp(new dy("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw Hp(new dy(a6n));WB(o,new CI(i,null)),s=h+3}if(!(s<f))break;if(b1(s,t.length),44!=t.charCodeAt(s))throw Hp(new dy("Expecting ,"))}return iDn(n,o,e)}function JUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;for(s=BB(BB(h6(n.r,t),21),84),a=JTn(n,t),e=n.u.Hc((lIn(),nIt)),o=s.Kc();o.Ob();)if((u=BB(o.Pb(),111)).c&&!(u.c.d.c.length<=0)){switch(l=u.b.rf(),(f=(h=u.c).i).b=(c=h.n,h.e.a+c.b+c.c),f.a=(r=h.n,h.e.b+r.d+r.a),t.g){case 1:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=-f.a-n.t,WD(h,(G7(),irt));break;case 3:u.a?(f.c=(l.a-f.b)/2,l9(h,(J9(),Qit))):a||e?(f.c=-f.b-n.s,l9(h,(J9(),Jit))):(f.c=l.a+n.s,l9(h,(J9(),Yit))),f.d=l.b+n.t,WD(h,(G7(),crt));break;case 2:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=l.a+n.s,l9(h,(J9(),Yit));break;case 4:u.a?(i=n.v?f.a:BB(xq(h.d,0),181).rf().b,f.d=(l.b-i)/2,WD(h,(G7(),rrt))):a||e?(f.d=-f.a-n.t,WD(h,(G7(),irt))):(f.d=l.b+n.t,WD(h,(G7(),crt))),f.c=-f.b-n.s,l9(h,(J9(),Jit))}a=!1}}function ZUn(n,t){var e,i,r,c,a,u,o,s,h,f,l;if(wWn(),0==NT(iNt)){for(f=x8(INt,sVn,117,cNt.length,0,1),a=0;a<f.length;a++)f[a]=new M0(4);for(i=new Pk,c=0;c<eNt.length;c++){if(h=new M0(4),c<84?(b1(u=2*c,vnt.length),l=vnt.charCodeAt(u),b1(u+1,vnt.length),Yxn(h,l,vnt.charCodeAt(u+1))):Yxn(h,aNt[u=2*(c-84)],aNt[u+1]),mK(o=eNt[c],"Specials")&&Yxn(h,65520,65533),mK(o,gnt)&&(Yxn(h,983040,1048573),Yxn(h,1048576,1114109)),mZ(iNt,o,h),mZ(rNt,o,$Fn(h)),0<(s=i.a.length)?i.a=i.a.substr(0,0):0>s&&(i.a+=rL(x8(ONt,WVn,25,-s,15,1))),i.a+="Is",GO(o,YTn(32))>=0)for(r=0;r<o.length;r++)b1(r,o.length),32!=o.charCodeAt(r)&&NX(i,(b1(r,o.length),o.charCodeAt(r)));else i.a+=""+o;Tdn(i.a,o,!0)}Tdn(pnt,"Cn",!1),Tdn(mnt,"Cn",!0),Yxn(e=new M0(4),0,unt),mZ(iNt,"ALL",e),mZ(rNt,"ALL",$Fn(e)),!SNt&&(SNt=new xp),mZ(SNt,pnt,pnt),!SNt&&(SNt=new xp),mZ(SNt,mnt,mnt),!SNt&&(SNt=new xp),mZ(SNt,"ALL","ALL")}return BB(SJ(t?iNt:rNt,n),136)}function nXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,vA(BB(mMn(i,(HXn(),ept)),98))){a=!1,u=!1;n:for(w=new Wb(i.j);w.a<w.c.c.length;)for(b=BB(n0(w),11),d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[new Hw(b),new Gw(b)])));dAn(d);)if(!qy(TD(mMn(BB(U5(d),11).i,Tdt)))){if(b.j==(kUn(),sIt)){a=!0;break n}if(b.j==SIt){u=!0;break n}}l=u&&!a,f=a&&!u}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Wb(i.b);s.a<s.c.c.length;)h+=(o=BB(n0(s),70)).n.b+o.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=BB(mMn(i,(hWn(),Klt)),15))?l?c=g:(r=BB(mMn(i,Dft),15))?c=g.gc()<=r.gc()?g:r:(c=new Np,hon(i,Dft,c)):(c=new Np,hon(i,Klt,c)):(r=BB(mMn(i,(hWn(),Dft)),15))?f?c=r:(g=BB(mMn(i,Klt),15))?c=r.gc()<=g.gc()?r:g:(c=new Np,hon(i,Klt,c)):(c=new Np,hon(i,Dft,c)),c.Fc(n),hon(n,(hWn(),Kft),e),t.d==e?(MZ(t,null),e.e.c.length+e.g.c.length==0&&CZ(e,null),gsn(e)):(SZ(t,null),e.e.c.length+e.g.c.length==0&&CZ(e,null)),yQ(t.a)}function tXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I;for(v=new M2(n.b,0),d=0,s=BB((f=t.Kc()).Pb(),19).a,k=0,e=new Rv,E=new fA;v.b<v.d.gc();){for(Px(v.b<v.d.gc()),y=new Wb(BB(v.d.Xb(v.c=v.b++),29).a);y.a<y.c.c.length;){for(w=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(w);)l=BB(U5(w),17),E.a.zc(l,E);for(b=new oz(ZL(fbn(m).a.Kc(),new h));dAn(b);)l=BB(U5(b),17),E.a.Bc(l)}if(d+1==s){for(yR(v,r=new HX(n)),yR(v,c=new HX(n)),M=E.a.ec().Kc();M.Ob();)T=BB(M.Pb(),17),e.a._b(T)||(++k,e.a.zc(T,e)),hon(a=new $vn(n),(HXn(),ept),(QEn(),VCt)),PZ(a,r),Bl(a,(uSn(),Tut)),CZ(g=new CSn,a),qCn(g,(kUn(),CIt)),CZ(S=new CSn,a),qCn(S,oIt),hon(i=new $vn(n),ept,VCt),PZ(i,c),Bl(i,Tut),CZ(p=new CSn,i),qCn(p,CIt),CZ(P=new CSn,i),qCn(P,oIt),SZ(j=new wY,T.c),MZ(j,g),SZ(I=new wY,S),MZ(I,p),SZ(T,P),u=new v3(a,i,j,I,T),hon(a,(hWn(),Rft),u),hon(i,Rft,u),(C=j.c.i).k==Tut&&((o=BB(mMn(C,Rft),305)).d=u,u.g=o);if(!f.Ob())break;s=BB(f.Pb(),19).a}++d}return iln(k)}function eXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;for(f=0,r=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));r.e!=r.i.gc();)qy(TD(ZAn(i=BB(kpn(r),33),(HXn(),Ggt))))||(GI(ZAn(t,Ldt))===GI((mon(),Nvt))&&GI(ZAn(t,Gdt))!==GI((Vvn(),Eht))&&GI(ZAn(t,Gdt))!==GI((Vvn(),kht))&&!qy(TD(ZAn(t,xdt)))&&GI(ZAn(t,Cdt))===GI((Bfn(),wut))||qy(TD(ZAn(i,$dt)))||(Ypn(i,(hWn(),wlt),iln(f)),++f),wzn(n,i,e));for(f=0,s=new AL((!t.b&&(t.b=new eU(_Ot,t,12,3)),t.b));s.e!=s.i.gc();)u=BB(kpn(s),79),(GI(ZAn(t,(HXn(),Ldt)))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&(Ypn(u,(hWn(),wlt),iln(f)),++f),w=PMn(u),d=OMn(u),h=qy(TD(ZAn(w,wgt))),b=!qy(TD(ZAn(u,Ggt))),l=h&&QIn(u)&&qy(TD(ZAn(u,dgt))),c=JJ(w)==t&&JJ(w)==JJ(d),a=(JJ(w)==t&&d==t)^(JJ(d)==t&&w==t),b&&!l&&(a||c)&&uWn(n,u,t,e);if(JJ(t))for(o=new AL(iQ(JJ(t)));o.e!=o.i.gc();)(w=PMn(u=BB(kpn(o),79)))==t&&QIn(u)&&(l=qy(TD(ZAn(w,(HXn(),wgt))))&&qy(TD(ZAn(u,dgt))))&&uWn(n,u,t,e)}function iXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(OTn(i,"MinWidth layering",1),w=t.b,T=t.a,A=BB(mMn(t,(HXn(),Egt)),19).a,o=BB(mMn(t,Tgt),19).a,n.b=Gy(MD(mMn(t,ypt))),n.d=RQn,k=new Wb(T);k.a<k.c.c.length;)(m=BB(n0(k),10)).k==(uSn(),Cut)&&(P=m.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),M=T.c.length,n.c=x8(ANt,hQn,25,M,15,1),n.f=x8(ANt,hQn,25,M,15,1),n.e=x8(xNt,qQn,25,M,15,1),h=0,n.a=0,j=new Wb(T);j.a<j.c.c.length;)(m=BB(n0(j),10)).p=h++,n.c[m.p]=whn(fbn(m)),n.f[m.p]=whn(lbn(m)),n.e[m.p]=m.o.b/n.d,n.a+=n.e[m.p];for(n.b/=n.d,n.a/=M,E=jOn(T),m$(T,QW(new Kd(n))),g=RQn,d=DWn,u=null,O=A,I=A,a=o,c=o,A<0&&(O=BB(Tmt.a.zd(),19).a,I=BB(Tmt.b.zd(),19).a),o<0&&(a=BB(Emt.a.zd(),19).a,c=BB(Emt.b.zd(),19).a),C=O;C<=I;C++)for(r=a;r<=c;r++)v=Gy(MD((S=LBn(n,C,r,T,E)).a)),p=(b=BB(S.b,15)).gc(),(v<g||v==g&&p<d)&&(g=v,d=p,u=b);for(l=u.Kc();l.Ob();){for(f=BB(l.Pb(),15),s=new HX(t),y=f.Kc();y.Ob();)PZ(m=BB(y.Pb(),10),s);w.c[w.c.length]=s}JPn(w),T.c=x8(Ant,HWn,1,0,5,1),HSn(i)}function rXn(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(n.b=t,n.a=BB(mMn(t,(HXn(),hgt)),19).a,n.c=BB(mMn(t,lgt),19).a,0==n.c&&(n.c=DWn),g=new M2(t.b,0);g.b<g.d.gc();){for(Px(g.b<g.d.gc()),d=BB(g.d.Xb(g.c=g.b++),29),o=new Np,l=-1,y=-1,m=new Wb(d.a);m.a<m.c.c.length;)v=BB(n0(m),10),F3((q_(),new oz(ZL(hbn(v).a.Kc(),new h))))>=n.a&&(r=yBn(n,v),l=e.Math.max(l,r.b),y=e.Math.max(y,r.d),WB(o,new rI(v,r)));for(E=new Np,f=0;f<l;++f)kG(E,0,(Px(g.b>0),g.a.Xb(g.c=--g.b),yR(g,T=new HX(n.b)),Px(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),T));for(u=new Wb(o);u.a<u.c.c.length;)if(c=BB(n0(u),46),w=BB(c.b,571).a)for(b=new Wb(w);b.a<b.c.c.length;)ukn(n,BB(n0(b),10),Uut,E);for(i=new Np,s=0;s<y;++s)WB(i,(yR(g,M=new HX(n.b)),M));for(a=new Wb(o);a.a<a.c.c.length;)if(c=BB(n0(a),46),j=BB(c.b,571).c)for(k=new Wb(j);k.a<k.c.c.length;)ukn(n,BB(n0(k),10),Xut,i)}for(p=new M2(t.b,0);p.b<p.d.gc();)Px(p.b<p.d.gc()),0==BB(p.d.Xb(p.c=p.b++),29).a.c.length&&fW(p)}function cXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(OTn(i,"Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void HSn(i);v=Gy(MD(mMn(t,(HXn(),Apt)))),o=Gy(MD(mMn(t,Tpt))),u=Gy(MD(mMn(t,kpt))),T=BB(mMn(t,rgt),336)==(Usn(),rmt),E=Gy(MD(mMn(t,cgt))),n.d=t,n.j.c=x8(Ant,HWn,1,0,5,1),n.a.c=x8(Ant,HWn,1,0,5,1),$U(n.k),f=VI((s=BB(xq(t.b,0),29)).a,(dxn(),jyt)),l=VI((d=BB(xq(t.b,t.b.c.length-1),29)).a,jyt),g=new Wb(t.b),p=null,C=0;do{for(RUn(n,p,m=g.a<g.c.c.length?BB(n0(g),29):null),MFn(n),P=0,y=C,b=!p||f&&p==s,w=!m||l&&m==d,(M=_k(rcn(NV(AV(new Rq(null,new w1(n.i,16)),new ya),new ma))))>0?(h=0,p&&(h+=o),h+=(M-1)*u,m&&(h+=o),T&&m&&(h=e.Math.max(h,nxn(m,u,v,E))),h<v&&!b&&!w&&(P=(v-h)/2,h=v),y+=h):!b&&!w&&(y+=v),m&&Tqn(m,y),j=new Wb(n.i);j.a<j.c.c.length;)(k=BB(n0(j),128)).a.c=C,k.a.b=y-C,k.F=P,k.p=!p;gun(n.a,n.i),C=y,m&&(C+=m.c.a),p=m,b=w}while(m);for(c=new Wb(n.j);c.a<c.c.c.length;)a=man(n,r=BB(n0(c),17)),hon(r,(hWn(),$lt),a),S=Dxn(n,r),hon(r,Nlt,S);t.f.a=C,n.d=null,HSn(i)}function aXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m;if(d=0!=n.i,v=!1,g=null,mA(n.e)){if((h=t.gc())>0){for(l=h<100?null:new Fj(h),w=(s=new jcn(t)).g,g=x8(ANt,hQn,25,h,15,1),i=0,m=new gtn(h),r=0;r<n.i;++r){b=u=n.g[r];n:for(p=0;p<2;++p){for(o=h;--o>=0;)if(null!=b?Nfn(b,w[o]):GI(b)===GI(w[o])){g.length<=i&&aHn(g,0,g=x8(ANt,hQn,25,2*g.length,15,1),0,i),g[i++]=r,f9(m,w[o]);break n}if(GI(b)===GI(u))break}}if(s=m,w=m.g,h=i,i>g.length&&aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i),i>0){for(v=!0,c=0;c<i;++c)l=zK(n,BB(b=w[c],72),l);for(a=i;--a>=0;)Lyn(n,g[a]);if(i!=h){for(r=h;--r>=i;)Lyn(s,r);aHn(g,0,g=x8(ANt,hQn,25,i,15,1),0,i)}t=s}}}else for(t=jyn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(Lyn(n,r),v=!0);if(v){if(null!=g){for(f=1==(e=t.gc())?yZ(n,4,t.Kc().Pb(),null,g[0],d):yZ(n,6,t,g,g[0],d),l=e<100?null:new Fj(e),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l?(l.Ei(f),l.Fi()):ban(n.e,f)}else{for(l=$K(t.gc()),r=t.Kc();r.Ob();)l=qK(n,BB(b=r.Pb(),72),l);l&&l.Fi()}return!0}return!1}function uXn(n,t){var e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m;for((e=new hvn(t)).a||g_n(t),s=lRn(t),o=new pJ,g=new Qxn,d=new Wb(t.a);d.a<d.c.c.length;)for(r=new oz(ZL(lbn(BB(n0(d),10)).a.Kc(),new h));dAn(r);)(i=BB(U5(r),17)).c.i.k!=(uSn(),Mut)&&i.d.i.k!=Mut||JIn(o,upn((f=lzn(n,i,s,g)).d),f.a);for(a=new Np,m=BB(mMn(e.c,(hWn(),Xft)),21).Kc();m.Ob();){switch(v=BB(m.Pb(),61),w=g.c[v.g],b=g.b[v.g],u=g.a[v.g],c=null,p=null,v.g){case 4:c=new UV(n.d.a,w,s.b.a-n.d.a,b-w),p=new UV(n.d.a,w,u,b-w),zH(s,new xC(c.c+c.b,c.d)),zH(s,new xC(c.c+c.b,c.d+c.a));break;case 2:c=new UV(s.a.a,w,n.c.a-s.a.a,b-w),p=new UV(n.c.a-u,w,u,b-w),zH(s,new xC(c.c,c.d)),zH(s,new xC(c.c,c.d+c.a));break;case 1:c=new UV(w,n.d.b,b-w,s.b.b-n.d.b),p=new UV(w,n.d.b,b-w,u),zH(s,new xC(c.c,c.d+c.a)),zH(s,new xC(c.c+c.b,c.d+c.a));break;case 3:c=new UV(w,s.a.b,b-w,n.c.b-s.a.b),p=new UV(w,n.c.b-u,b-w,u),zH(s,new xC(c.c,c.d)),zH(s,new xC(c.c+c.b,c.d))}c&&((l=new nm).d=v,l.b=c,l.c=p,l.a=JQ(BB(h6(o,upn(v)),21)),a.c[a.c.length]=l)}return gun(e.b,a),e.d=Bhn(nGn(s)),e}function oXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(null==i.p[t.p]){o=!0,i.p[t.p]=0,u=t,d=i.o==(oZ(),ryt)?KQn:RQn;do{c=n.b.e[u.p],a=u.c.a.c.length,i.o==ryt&&c>0||i.o==cyt&&c<a-1?(s=null,h=null,s=i.o==cyt?BB(xq(u.c.a,c+1),10):BB(xq(u.c.a,c-1),10),oXn(n,h=i.g[s.p],i),d=n.e.bg(d,t,u),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=K$(n.d,u,s),i.o==cyt?(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d-w-u.d.a-u.o.b-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=Gy(i.p[t.p]),l=Gy(i.p[h.p])+Gy(i.d[s.p])+s.o.b+s.d.a+w+u.d.d-Gy(i.d[u.p]),o?(o=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=Gy(MD(mMn(n.a,(HXn(),Opt)))),b=krn(n,i.j[t.p]),f=krn(n,i.j[h.p]),i.o==cyt?U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])+u.o.b+u.d.a+w-(Gy(i.p[h.p])+Gy(i.d[s.p])-s.d.d)):U1(b,f,Gy(i.p[t.p])+Gy(i.d[u.p])-u.d.d-Gy(i.p[h.p])-Gy(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.bg(d,t,u),u=i.a[u.p]}while(u!=t);Ov(n.e,t)}}function sXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;for(f=t,h=new pJ,l=new pJ,c=N2(f,x6n),GSn((i=new fQ(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new HL(h,h.c))).Kc();d.Ob();)for(w=BB(d.Pb(),202),u=BB(h6(h,w),21).Kc();u.Ob();){if(a=u.Pb(),!(b=BB(sen(n.d,a),202)))throw r=R2(f,q6n),Hp(new ek(V6n+a+Q6n+r+W6n));!w.e&&(w.e=new hK(FOt,w,10,9)),f9(w.e,b)}for(p=(l.i||(l.i=new HL(l,l.c))).Kc();p.Ob();)for(g=BB(p.Pb(),202),s=BB(h6(l,g),21).Kc();s.Ob();){if(o=s.Pb(),!(b=BB(sen(n.d,o),202)))throw r=R2(f,q6n),Hp(new ek(V6n+o+Q6n+r+W6n));!g.g&&(g.g=new hK(FOt,g,9,10)),f9(g.g,b)}!e.b&&(e.b=new hK(KOt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new hK(KOt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new hK(KOt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new hK(KOt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new eU(FOt,e,6,6)),e.a).i&&(Svn(v=BB(Wtn((!e.a&&(e.a=new eU(FOt,e,6,6)),e.a),0),202))||Pvn(v)||(Lin(v,BB(Wtn((!e.b&&(e.b=new hK(KOt,e,4,7)),e.b),0),82)),Nin(v,BB(Wtn((!e.c&&(e.c=new hK(KOt,e,5,8)),e.c),0),82))))}function hXn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;for(y=0,k=(m=n.a).length;y<k;++y){for(v=m[y],s=DWn,h=DWn,w=new Wb(v.e);w.a<w.c.c.length;)(a=(l=BB(n0(w),10)).c?E7(l.c.a,l,0):-1)>0?(f=BB(xq(l.c.a,a-1),10),T=K$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+T)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=BB(xq(l.c.a,a+1),10),T=K$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+T)):p=2*l.n.b,h=e.Math.min(p,h);for(o=DWn,c=!1,S=new Wb((r=BB(xq(v.e,0),10)).j);S.a<S.c.c.length;)for(M=BB(n0(S),11),d=r.n.b+M.n.b+M.a.b,i=new Wb(M.e);i.a<i.c.c.length;)t=(j=BB(n0(i),17).c).i.n.b+j.n.b+j.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);for(E=new Wb((u=BB(xq(v.e,v.e.c.length-1),10)).j);E.a<E.c.c.length;)for(j=BB(n0(E),11),d=u.n.b+j.n.b+j.a.b,i=new Wb(j.g);i.a<i.c.c.length;)t=(M=BB(n0(i),17).d).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(o)&&e.Math.abs(t)<(t<0?s:h)&&(o=t,c=!0);if(c&&0!=o)for(b=new Wb(v.e);b.a<b.c.c.length;)(l=BB(n0(b),10)).n.b+=o}}function fXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g;if(hU(n.a,t)){if(FT(BB(RX(n.a,t),53),e))return 1}else VW(n.a,t,new Rv);if(hU(n.a,e)){if(FT(BB(RX(n.a,e),53),t))return-1}else VW(n.a,e,new Rv);if(hU(n.e,t)){if(FT(BB(RX(n.e,t),53),e))return-1}else VW(n.e,t,new Rv);if(hU(n.e,e)){if(FT(BB(RX(n.a,e),53),t))return 1}else VW(n.e,e,new Rv);if(n.c==(mon(),xvt)||!Lx(t,(hWn(),wlt))||!Lx(e,(hWn(),wlt))){if(o=BB(EN(M4(Qon(AV(new Rq(null,new w1(t.j,16)),new sc)),new hc)),11),h=BB(EN(M4(Qon(AV(new Rq(null,new w1(e.j,16)),new fc)),new lc)),11),o&&h){if(u=o.i,s=h.i,u&&u==s){for(l=new Wb(u.j);l.a<l.c.c.length;){if((f=BB(n0(l),11))==o)return aKn(n,e,t),-1;if(f==h)return aKn(n,t,e),1}return E$(iEn(n,t),iEn(n,e))}for(d=0,g=(w=n.d).length;d<g;++d){if((b=w[d])==u)return aKn(n,e,t),-1;if(b==s)return aKn(n,t,e),1}}if(!Lx(t,(hWn(),wlt))||!Lx(e,wlt))return(r=iEn(n,t))>(a=iEn(n,e))?aKn(n,t,e):aKn(n,e,t),r<a?-1:r>a?1:0}return(i=BB(mMn(t,(hWn(),wlt)),19).a)>(c=BB(mMn(e,wlt),19).a)?aKn(n,t,e):aKn(n,e,t),i<c?-1:i>c?1:0}function lXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d;if(qy(TD(ZAn(t,(sWn(),zSt)))))return SQ(),SQ(),set;if(o=0!=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,s=!(h=yIn(t)).dc(),o||s){if(!(r=BB(ZAn(t,mPt),149)))throw Hp(new rk("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(d=OC(r,(hAn(),nAt)),Ngn(t),!o&&s&&!d)return SQ(),SQ(),set;if(u=new Np,GI(ZAn(t,ESt))===GI((ufn(),pCt))&&(OC(r,YOt)||OC(r,QOt)))for(l=pRn(n,t),Frn(b=new YT,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=b.b;)Ngn(f=BB(0==b.b?null:(Px(0!=b.b),Atn(b,b.a.a)),33)),GI(ZAn(f,ESt))===GI(mCt)||P8(f,eSt)&&!j5(r,ZAn(f,mPt))?(gun(u,lXn(n,f,e,i)),Ypn(f,ESt,mCt),KKn(f)):Frn(b,(!f.a&&(f.a=new eU(UOt,f,10,11)),f.a));else for(l=(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a).i,a=new AL((!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));a.e!=a.i.gc();)gun(u,lXn(n,c=BB(kpn(a),33),e,i)),KKn(c);for(w=new Wb(u);w.a<w.c.c.length;)Ypn(BB(n0(w),79),zSt,(hN(),!0));return Ugn(t,r,mcn(i,l)),w_n(u),s&&d?h:(SQ(),SQ(),set)}return SQ(),SQ(),set}function bXn(n,t,e,i,r,c,a,u,o){var s,h,f,l,b,w,d;switch(b=e,Bl(h=new $vn(o),(uSn(),Mut)),hon(h,(hWn(),Yft),a),hon(h,(HXn(),ept),(QEn(),XCt)),d=Gy(MD(n.We(tpt))),hon(h,tpt,d),CZ(f=new CSn,h),t!=QCt&&t!=YCt||(b=i>=0?hwn(u):Tln(hwn(u)),n.Ye(upt,b)),s=new Gj,l=!1,n.Xe(npt)?(Hx(s,BB(n.We(npt),8)),l=!0):yL(s,a.a/2,a.b/2),b.g){case 4:hon(h,kgt,(Tbn(),Flt)),hon(h,Gft,(Jun(),$ht)),h.o.b=a.b,d<0&&(h.o.a=-d),qCn(f,(kUn(),oIt)),l||(s.a=a.a),s.a-=a.a;break;case 2:hon(h,kgt,(Tbn(),Hlt)),hon(h,Gft,(Jun(),Oht)),h.o.b=a.b,d<0&&(h.o.a=-d),qCn(f,(kUn(),CIt)),l||(s.a=0);break;case 1:hon(h,ilt,(z7(),Cft)),h.o.a=a.a,d<0&&(h.o.b=-d),qCn(f,(kUn(),SIt)),l||(s.b=a.b),s.b-=a.b;break;case 3:hon(h,ilt,(z7(),Sft)),h.o.a=a.a,d<0&&(h.o.b=-d),qCn(f,(kUn(),sIt)),l||(s.b=0)}if(Hx(f.n,s),hon(h,npt,s),t==UCt||t==WCt||t==XCt){if(w=0,t==UCt&&n.Xe(ipt))switch(b.g){case 1:case 2:w=BB(n.We(ipt),19).a;break;case 3:case 4:w=-BB(n.We(ipt),19).a}else switch(b.g){case 4:case 2:w=c.b,t==WCt&&(w/=r.b);break;case 1:case 3:w=c.a,t==WCt&&(w/=r.a)}hon(h,Tlt,w)}return hon(h,Qft,b),h}function wXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E;if((e=Gy(MD(mMn(n.a.j,(HXn(),_dt)))))<-1||!n.a.i||LK(BB(mMn(n.a.o,ept),98))||abn(n.a.o,(kUn(),oIt)).gc()<2&&abn(n.a.o,CIt).gc()<2)return!0;if(n.a.c.Rf())return!1;for(y=0,m=0,v=new Np,o=0,s=(u=n.a.e).length;o<s;++o){for(b=0,d=(l=u[o]).length;b<d;++b)if((f=l[b]).k!=(uSn(),Iut)){for(i=n.b[f.c.p][f.p],f.k==Mut?(i.b=1,BB(mMn(f,(hWn(),dlt)),11).j==(kUn(),oIt)&&(m+=i.a)):(E=abn(f,(kUn(),CIt))).dc()||!tL(E,new Nc)?i.c=1:((r=abn(f,oIt)).dc()||!tL(r,new Lc))&&(y+=i.a),a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);for(j=new oz(new WL((g=Wen(Pun(Gk(xnt,1),HWn,20,0,[abn(f,(kUn(),sIt)),abn(f,SIt)]))).a.length,g.a));dAn(j);)k=BB(U5(j),11),(p=BB(mMn(k,(hWn(),Elt)),10))&&(y+=i.c,m+=i.b,X8(n,i,p))}else v.c[v.c.length]=f;for(w=new Wb(v);w.a<w.c.c.length;)for(f=BB(n0(w),10),i=n.b[f.c.p][f.p],a=new oz(ZL(lbn(f).a.Kc(),new h));dAn(a);)c=BB(U5(a),17),y+=i.c,m+=i.b,X8(n,i,c.d.i);v.c=x8(Ant,HWn,1,0,5,1)}return(0==(t=y+m)?RQn:(y-m)/t)>=e}function dXn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=Swn((SQ(),new Hb(new Ob(lAt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=Swn((SQ(),new Hb(new Ob(lAt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=Swn((SQ(),new Hb(new Ob(lAt.d))));n.postMessage({id:e.id,data:c});break;case"register":lGn(e.algorithms),n.postMessage({id:e.id});break;case"layout":xBn(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(aE(),typeof document===gYn&&typeof self!==gYn){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==gYn&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function gXn(n){n.N||(n.N=!0,n.b=kan(n,0),Rrn(n.b,0),Rrn(n.b,1),Rrn(n.b,2),n.bb=kan(n,1),Rrn(n.bb,0),Rrn(n.bb,1),n.fb=kan(n,2),Rrn(n.fb,3),Rrn(n.fb,4),Krn(n.fb,5),n.qb=kan(n,3),Rrn(n.qb,0),Krn(n.qb,1),Krn(n.qb,2),Rrn(n.qb,3),Rrn(n.qb,4),Krn(n.qb,5),Rrn(n.qb,6),n.a=jan(n,4),n.c=jan(n,5),n.d=jan(n,6),n.e=jan(n,7),n.f=jan(n,8),n.g=jan(n,9),n.i=jan(n,10),n.j=jan(n,11),n.k=jan(n,12),n.n=jan(n,13),n.o=jan(n,14),n.p=jan(n,15),n.q=jan(n,16),n.s=jan(n,17),n.r=jan(n,18),n.t=jan(n,19),n.u=jan(n,20),n.v=jan(n,21),n.w=jan(n,22),n.B=jan(n,23),n.A=jan(n,24),n.C=jan(n,25),n.D=jan(n,26),n.F=jan(n,27),n.G=jan(n,28),n.H=jan(n,29),n.J=jan(n,30),n.I=jan(n,31),n.K=jan(n,32),n.M=jan(n,33),n.L=jan(n,34),n.P=jan(n,35),n.Q=jan(n,36),n.R=jan(n,37),n.S=jan(n,38),n.T=jan(n,39),n.U=jan(n,40),n.V=jan(n,41),n.X=jan(n,42),n.W=jan(n,43),n.Y=jan(n,44),n.Z=jan(n,45),n.$=jan(n,46),n._=jan(n,47),n.ab=jan(n,48),n.cb=jan(n,49),n.db=jan(n,50),n.eb=jan(n,51),n.gb=jan(n,52),n.hb=jan(n,53),n.ib=jan(n,54),n.jb=jan(n,55),n.kb=jan(n,56),n.lb=jan(n,57),n.mb=jan(n,58),n.nb=jan(n,59),n.ob=jan(n,60),n.pb=jan(n,61))}function pXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.a)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.a+d.o.a+d.d.c);else m=t.f.a-t.c.a;for(m-=t.c.a,g=new Wb(n);g.a<g.c.c.length;){switch(Zp((d=BB(n0(g),10)).n,m-d.o.a),cH(d.f),Vmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Zp(BB(mMn(d,spt),8),m-d.o.a),BB(mMn(d,kdt),248).g){case 1:hon(d,kdt,(wvn(),$Mt));break;case 2:hon(d,kdt,(wvn(),AMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Zp((y=BB(n0(k),11)).n,v.a-y.o.a),Zp(y.a,y.o.a),qCn(y,Icn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).a=m-i.a;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).a=m-o.a;for(b=new Wb(c.b);b.a<b.c.c.length;)Zp((f=BB(n0(b),70)).n,m-f.o.a)}for(w=new Wb(y.f);w.a<w.c.c.length;)Zp((f=BB(n0(w),70)).n,y.o.a-f.o.a)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Icn(BB(mMn(d,Qft),61))),YMn(d)),l=new Wb(d.b);l.a<l.c.c.length;)Vmn(f=BB(n0(l),70)),Zp(f.n,v.a-f.o.a)}}function vXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(m=0,0==t.f.b)for(p=new Wb(n);p.a<p.c.c.length;)d=BB(n0(p),10),m=e.Math.max(m,d.n.b+d.o.b+d.d.a);else m=t.f.b-t.c.b;for(m-=t.c.b,g=new Wb(n);g.a<g.c.c.length;){switch(Jp((d=BB(n0(g),10)).n,m-d.o.b),aH(d.f),Qmn(d),(d.q?d.q:(SQ(),SQ(),het))._b((HXn(),spt))&&Jp(BB(mMn(d,spt),8),m-d.o.b),BB(mMn(d,kdt),248).g){case 3:hon(d,kdt,(wvn(),IMt));break;case 4:hon(d,kdt,(wvn(),LMt))}for(v=d.o,k=new Wb(d.j);k.a<k.c.c.length;){for(Jp((y=BB(n0(k),11)).n,v.b-y.o.b),Jp(y.a,y.o.b),qCn(y,Ocn(y.j)),(u=BB(mMn(y,ipt),19))&&hon(y,ipt,iln(-u.a)),a=new Wb(y.g);a.a<a.c.c.length;){for(r=spn((c=BB(n0(a),17)).a,0);r.b!=r.d.c;)(i=BB(b3(r),8)).b=m-i.b;if(h=BB(mMn(c,vgt),74))for(s=spn(h,0);s.b!=s.d.c;)(o=BB(b3(s),8)).b=m-o.b;for(b=new Wb(c.b);b.a<b.c.c.length;)Jp((f=BB(n0(b),70)).n,m-f.o.b)}for(w=new Wb(y.f);w.a<w.c.c.length;)Jp((f=BB(n0(w),70)).n,y.o.b-f.o.b)}for(d.k==(uSn(),Mut)&&(hon(d,(hWn(),Qft),Ocn(BB(mMn(d,Qft),61))),gln(d)),l=new Wb(d.b);l.a<l.c.c.length;)Qmn(f=BB(n0(l),70)),Jp(f.n,v.b-f.o.b)}}function mXn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b;for(f=!1,s=n+1,l1(n,t.c.length),a=(h=BB(t.c[n],200)).a,u=null,c=0;c<h.a.c.length;c++)if(l1(c,a.c.length),!(r=BB(a.c[c],187)).c)if(0!=r.b.c.length){if(r.k||(u&&Gmn(u),Tvn(r,(u=new KJ(u?u.e+u.d+i:0,h.f,i)).e+u.d,h.f),WB(h.d,u),xcn(u,r),r.k=!0),o=null,b=null,c<h.a.c.length-1?b=BB(xq(h.a,c+1),187):s<t.c.length&&0!=(l1(s,t.c.length),BB(t.c[s],200)).a.c.length&&(b=BB(xq((l1(s,t.c.length),BB(t.c[s],200)).a,0),187)),l=!1,(o=b)&&(l=!Nfn(o.j,h)),o){if(0==o.b.c.length){Tkn(h,o);break}if(p9(r,e-r.s),Gmn(r.q),f|=nSn(h,r,o,e,i),0==o.b.c.length)for(Tkn((l1(s,t.c.length),BB(t.c[s],200)),o),o=null;t.c.length>s&&0==(l1(s,t.c.length),BB(t.c[s],200)).a.c.length;)y7(t,(l1(s,t.c.length),t.c[s]));if(!o){--c;continue}if(A_n(t,h,r,o,l,e,s,i)){f=!0;continue}if(l){if(JBn(t,h,r,o,e,s,i)){f=!0;continue}if(Ahn(h,r)){r.c=!0,f=!0;continue}}else if(Ahn(h,r)){r.c=!0,f=!0;continue}if(f)continue}Ahn(h,r)?(r.c=!0,f=!0,o&&(o.k=!1)):Gmn(r.q)}else $T(),Tkn(h,r),--c,f=!0;return f}function yXn(n,t,i,r,c,a,u){var o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(g=0,P=0,h=new Wb(n.b);h.a<h.c.c.length;)(s=BB(n0(h),157)).c&&ozn(s.c),g=e.Math.max(g,iG(s)),P+=iG(s)*eG(s);for(p=P/n.b.c.length,S=hjn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*u))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,DH(M=new YT,iln(0)),E=new YT,f=new M2(n.b,0),d=null,o=new Np;f.b<f.d.gc();)Px(f.b<f.d.gc()),I=iG(s=BB(f.d.Xb(f.c=f.b++),157)),b=eG(s),O+I>g&&(a&&(fO(E,w),fO(M,iln(f.b-1)),WB(n.d,d),o.c=x8(Ant,HWn,1,0,5,1)),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),o.c[o.c.length]=s,Mpn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(gun(n.a,o),WB(n.d,BB(xq(o,o.c.length-1),157)),l=e.Math.max(l,r),(C=A+w+i.a)<c&&(w+=c-C,C=c),a)for(O=i.b,f=new M2(n.b,0),fO(M,iln(n.b.c.length)),m=BB(b3(T=spn(M,0)),19).a,fO(E,w),j=spn(E,0),k=0;f.b<f.d.gc();)f.b==m&&(O=i.b,k=Gy(MD(b3(j))),m=BB(b3(T),19).a),Px(f.b<f.d.gc()),Udn(s=BB(f.d.Xb(f.c=f.b++),157),k),f.b==m&&(v=l-O-i.c,y=iG(s),zdn(s,v),Fln(s,(v-y)/2,0)),O+=iG(s)+t;return new xC(l,C)}function kXn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Vl();case 13:return n.Wl();case 23:return n.Nl();case 22:return n.Sl();case 18:return n.Pl();case 8:QXn(n),wWn(),r=oNt;break;case 9:return n.vl(!0);case 19:return n.wl();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.ul(n.a),QXn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.tl())<BQn?(wWn(),wWn(),r=new oG(0,t)):r=pz(Xln(t));break;case 99:return n.Fl();case 67:return n.Al();case 105:return n.Il();case 73:return n.Bl();case 103:return n.Gl();case 88:return n.Cl();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.xl();case 80:case 112:if(!(r=DIn(n,n.a)))throw Hp(new ak(kWn((u$(),O8n))));break;default:r=QH(n.a)}QXn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw Hp(new ak(kWn((u$(),I8n))));r=QH(n.a),e=n.a,QXn(n),(64512&e)==HQn&&0==n.c&&56320==(64512&n.a)&&((i=x8(ONt,WVn,25,2,15,1))[0]=e&QVn,i[1]=n.a&QVn,r=oU(pz(Bdn(i,0,i.length)),0),QXn(n));break;default:throw Hp(new ak(kWn((u$(),I8n))))}return r}function jXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(r=new Np,c=DWn,a=DWn,u=DWn,i)for(c=n.f.a,d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).g);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((f=BB(gx(o.a),8)).a<c&&(a=c-f.a,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=f.a),f.a<=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,1),8).b-f.b)))));else for(d=new Wb(t.j);d.a<d.c.c.length;)for(s=new Wb(BB(n0(d),11).e);s.a<s.c.c.length;)0!=(o=BB(n0(s),17)).a.b&&((b=BB(px(o.a),8)).a>c&&(a=b.a-c,u=DWn,r.c=x8(Ant,HWn,1,0,5,1),c=b.a),b.a>=c&&(r.c[r.c.length]=o,o.a.b>1&&(u=e.Math.min(u,e.Math.abs(BB(Dpn(o.a,o.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&u>t.o.b/2){for(CZ(w=new CSn,t),qCn(w,(kUn(),sIt)),w.n.a=t.o.a/2,CZ(g=new CSn,t),qCn(g,SIt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Wb(r);s.a<s.c.c.length;)o=BB(n0(s),17),i?(h=BB(dH(o.a),8),(0==o.a.b?g1(o.d):BB(gx(o.a),8)).b>=h.b?SZ(o,g):SZ(o,w)):(h=BB(gH(o.a),8),(0==o.a.b?g1(o.c):BB(px(o.a),8)).b>=h.b?MZ(o,g):MZ(o,w)),(l=BB(mMn(o,(HXn(),vgt)),74))&&ywn(l,h,!0);t.n.a=c-t.o.a/2}}function EXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;if(s=t,$in(o=Q3(n,L3(e),s),R2(s,q6n)),h=BB(sen(n.g,kIn(zJ(s,T6n))),33),i=null,(a=zJ(s,"sourcePort"))&&(i=kIn(a)),f=BB(sen(n.j,i),118),!h)throw Hp(new ek("An edge must have a source node (edge id: '"+Qdn(s)+W6n));if(f&&!wW(WJ(f),h))throw Hp(new ek("The source port of an edge must be a port of the edge's source node (edge id: '"+R2(s,q6n)+W6n));if(!o.b&&(o.b=new hK(KOt,o,4,7)),f9(o.b,f||h),l=BB(sen(n.g,kIn(zJ(s,Y6n))),33),r=null,(u=zJ(s,"targetPort"))&&(r=kIn(u)),b=BB(sen(n.j,r),118),!l)throw Hp(new ek("An edge must have a target node (edge id: '"+Qdn(s)+W6n));if(b&&!wW(WJ(b),l))throw Hp(new ek("The target port of an edge must be a port of the edge's target node (edge id: '"+R2(s,q6n)+W6n));if(!o.c&&(o.c=new hK(KOt,o,5,8)),f9(o.c,b||l),0==(!o.b&&(o.b=new hK(KOt,o,4,7)),o.b).i||0==(!o.c&&(o.c=new hK(KOt,o,5,8)),o.c).i)throw c=R2(s,q6n),Hp(new ek(X6n+c+W6n));return STn(s,o),s$n(s,o),xon(n,s,o)}function TXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S;return f=CFn(HN(n,(kUn(),wIt)),t),w=ayn(HN(n,dIt),t),y=ayn(HN(n,EIt),t),T=uyn(HN(n,MIt),t),l=uyn(HN(n,hIt),t),v=ayn(HN(n,jIt),t),d=ayn(HN(n,gIt),t),j=ayn(HN(n,TIt),t),k=ayn(HN(n,fIt),t),M=uyn(HN(n,bIt),t),p=ayn(HN(n,yIt),t),m=ayn(HN(n,mIt),t),E=ayn(HN(n,lIt),t),S=uyn(HN(n,kIt),t),b=uyn(HN(n,pIt),t),g=ayn(HN(n,vIt),t),e=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.a,T.a,j.a,S.a])),i=Lon(Pun(Gk(xNt,1),qQn,25,15,[w.a,f.a,y.a,g.a])),r=p.a,c=Lon(Pun(Gk(xNt,1),qQn,25,15,[d.a,l.a,k.a,b.a])),s=Lon(Pun(Gk(xNt,1),qQn,25,15,[v.b,w.b,d.b,m.b])),o=Lon(Pun(Gk(xNt,1),qQn,25,15,[T.b,f.b,l.b,g.b])),h=M.b,u=Lon(Pun(Gk(xNt,1),qQn,25,15,[j.b,y.b,k.b,E.b])),w9(HN(n,wIt),e+r,s+h),w9(HN(n,vIt),e+r,s+h),w9(HN(n,dIt),e+r,0),w9(HN(n,EIt),e+r,s+h+o),w9(HN(n,MIt),0,s+h),w9(HN(n,hIt),e+r+i,s+h),w9(HN(n,gIt),e+r+i,0),w9(HN(n,TIt),0,s+h+o),w9(HN(n,fIt),e+r+i,s+h+o),w9(HN(n,bIt),0,s),w9(HN(n,yIt),e,0),w9(HN(n,lIt),0,s+h+o),w9(HN(n,pIt),e+r+i,0),(a=new Gj).a=Lon(Pun(Gk(xNt,1),qQn,25,15,[e+i+r+c,M.a,m.a,E.a])),a.b=Lon(Pun(Gk(xNt,1),qQn,25,15,[s+o+h+u,p.b,S.b,b.b])),a}function MXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g;for(d=new Np,l=new Wb(n.d.b);l.a<l.c.c.length;)for(w=new Wb(BB(n0(l),29).a);w.a<w.c.c.length;){for(b=BB(n0(w),10),r=BB(RX(n.f,b),57),o=new oz(ZL(lbn(b).a.Kc(),new h));dAn(o);)if(s=!0,f=null,(i=spn((a=BB(U5(o),17)).a,0)).b!=i.d.c){for(t=BB(b3(i),8),e=null,a.c.j==(kUn(),sIt)&&((g=new PBn(t,new xC(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,d.c[d.c.length]=g),a.c.j==SIt&&((g=new PBn(t,new xC(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,d.c[d.c.length]=g);i.b!=i.d.c;)e=BB(b3(i),8),aen(t.b,e.b)||(f=new PBn(t,e,null,a),d.c[d.c.length]=f,s&&(s=!1,e.b<r.d.d?f.f.a=!0:e.b>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=BB(RX(n.f,a.d.i),57),t.b<c.d.d?f.f.a=!0:t.b>c.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(u=new oz(ZL(fbn(b).a.Kc(),new h));dAn(u);)0!=(a=BB(U5(u),17)).a.b&&(t=BB(px(a.a),8),a.d.j==(kUn(),sIt)&&((g=new PBn(t,new xC(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,d.c[d.c.length]=g),a.d.j==SIt&&((g=new PBn(t,new xC(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,d.c[d.c.length]=g))}return d}function SXn(n,t,e){var i,r,c,a,u,o,s;if(OTn(e,"Network simplex node placement",1),n.e=t,n.n=BB(mMn(t,(hWn(),Alt)),304),oqn(n),REn(n),JT(wnn(new Rq(null,new w1(n.e.b,16)),new Hc),new cg(n)),JT(AV(wnn(AV(wnn(new Rq(null,new w1(n.e.b,16)),new ta),new ea),new ia),new ra),new rg(n)),qy(TD(mMn(n.e,(HXn(),xgt))))&&(OTn(c=mcn(e,1),"Straight Edges Pre-Processing",1),jzn(n),HSn(c)),Mvn(n.f),r=BB(mMn(t,xpt),19).a*n.f.a.c.length,WKn(Qk(Yk(B_(n.f),r),!1),mcn(e,1)),0!=n.d.a.gc()){for(OTn(c=mcn(e,1),"Flexible Where Space Processing",1),a=BB($N(Oz($V(new Rq(null,new w1(n.f.a,16)),new qc),new Dc)),19).a,u=BB($N(Iz($V(new Rq(null,new w1(n.f.a,16)),new Gc),new Rc)),19).a-a,o=AN(new qv,n.f),s=AN(new qv,n.f),UNn(aM(cM(rM(uM(new Hv,2e4),u),o),s)),JT(AV(AV(LU(n.i),new zc),new Uc),new zV(a,o,u,s)),i=n.d.a.ec().Kc();i.Ob();)BB(i.Pb(),213).g=1;WKn(Qk(Yk(B_(n.f),r),!1),mcn(c,1)),HSn(c)}qy(TD(mMn(t,xgt)))&&(OTn(c=mcn(e,1),"Straight Edges Post-Processing",1),SPn(n),HSn(c)),QGn(n),n.e=null,n.f=null,n.i=null,n.c=null,$U(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),HSn(e)}function PXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(u=new Wb(n.a.b);u.a<u.c.c.length;)for(m=new Wb(BB(n0(u),29).a);m.a<m.c.c.length;)v=BB(n0(m),10),t.g[v.p]=v,t.a[v.p]=v,t.d[v.p]=0;for(o=n.a.b,t.c==(gJ(),nyt)&&(o=cL(o,152)?o6(BB(o,152)):cL(o,131)?BB(o,131).a:cL(o,54)?new fy(o):new CT(o)),a=o.Kc();a.Ob();)for(b=-1,l=BB(a.Pb(),29).a,t.o==(oZ(),cyt)&&(b=DWn,l=cL(l,152)?o6(BB(l,152)):cL(l,131)?BB(l,131).a:cL(l,54)?new fy(l):new CT(l)),k=l.Kc();k.Ob();)if(y=BB(k.Pb(),10),f=null,(f=t.c==nyt?BB(xq(n.b.f,y.p),15):BB(xq(n.b.b,y.p),15)).gc()>0)if(r=f.gc(),s=CJ(e.Math.floor((r+1)/2))-1,c=CJ(e.Math.ceil((r+1)/2))-1,t.o==cyt)for(h=c;h>=s;h--)t.a[y.p]==y&&(d=BB(f.Xb(h),46),w=BB(d.a,10),!FT(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=y,t.g[y.p]=t.g[w.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[y.p]==y&&(p=BB(f.Xb(h),46),g=BB(p.a,10),!FT(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=y,t.g[y.p]=t.g[g.p],t.a[y.p]=t.g[y.p],t.f[t.g[y.p].p]=(hN(),!!(qy(t.f[t.g[y.p].p])&y.k==(uSn(),Put))),b=n.b.e[g.p]))}function CXn(){CXn=O,eE(),POt=gOt.a,BB(Wtn(QQ(gOt.a),0),18),kOt=gOt.f,BB(Wtn(QQ(gOt.f),0),18),BB(Wtn(QQ(gOt.f),1),34),SOt=gOt.n,BB(Wtn(QQ(gOt.n),0),34),BB(Wtn(QQ(gOt.n),1),34),BB(Wtn(QQ(gOt.n),2),34),BB(Wtn(QQ(gOt.n),3),34),jOt=gOt.g,BB(Wtn(QQ(gOt.g),0),18),BB(Wtn(QQ(gOt.g),1),34),vOt=gOt.c,BB(Wtn(QQ(gOt.c),0),18),BB(Wtn(QQ(gOt.c),1),18),EOt=gOt.i,BB(Wtn(QQ(gOt.i),0),18),BB(Wtn(QQ(gOt.i),1),18),BB(Wtn(QQ(gOt.i),2),18),BB(Wtn(QQ(gOt.i),3),18),BB(Wtn(QQ(gOt.i),4),34),TOt=gOt.j,BB(Wtn(QQ(gOt.j),0),18),mOt=gOt.d,BB(Wtn(QQ(gOt.d),0),18),BB(Wtn(QQ(gOt.d),1),18),BB(Wtn(QQ(gOt.d),2),18),BB(Wtn(QQ(gOt.d),3),18),BB(Wtn(QQ(gOt.d),4),34),BB(Wtn(QQ(gOt.d),5),34),BB(Wtn(QQ(gOt.d),6),34),BB(Wtn(QQ(gOt.d),7),34),pOt=gOt.b,BB(Wtn(QQ(gOt.b),0),34),BB(Wtn(QQ(gOt.b),1),34),yOt=gOt.e,BB(Wtn(QQ(gOt.e),0),34),BB(Wtn(QQ(gOt.e),1),34),BB(Wtn(QQ(gOt.e),2),34),BB(Wtn(QQ(gOt.e),3),34),BB(Wtn(QQ(gOt.e),4),18),BB(Wtn(QQ(gOt.e),5),18),BB(Wtn(QQ(gOt.e),6),18),BB(Wtn(QQ(gOt.e),7),18),BB(Wtn(QQ(gOt.e),8),18),BB(Wtn(QQ(gOt.e),9),18),BB(Wtn(QQ(gOt.e),10),34),MOt=gOt.k,BB(Wtn(QQ(gOt.k),0),34),BB(Wtn(QQ(gOt.k),1),34)}function IXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;for(M=new YT,j=new YT,g=-1,o=new Wb(n);o.a<o.c.c.length;){for((a=BB(n0(o),128)).s=g--,h=0,m=0,c=new Wb(a.t);c.a<c.c.c.length;)m+=(i=BB(n0(c),268)).c;for(r=new Wb(a.i);r.a<r.c.c.length;)h+=(i=BB(n0(r),268)).c;a.n=h,a.u=m,0==m?r5(j,a,j.c.b,j.c):0==h&&r5(M,a,M.c.b,M.c)}for(P=S4(n),d=(f=n.c.length)+1,p=f-1,b=new Np;0!=P.a.gc();){for(;0!=j.b;)Px(0!=j.b),k=BB(Atn(j,j.a.a),128),P.a.Bc(k),k.s=p--,cLn(k,M,j);for(;0!=M.b;)Px(0!=M.b),E=BB(Atn(M,M.a.a),128),P.a.Bc(E),E.s=d++,cLn(E,M,j);for(w=_Vn,s=P.a.ec().Kc();s.Ob();)(v=(a=BB(s.Pb(),128)).u-a.n)>=w&&(v>w&&(b.c=x8(Ant,HWn,1,0,5,1),w=v),b.c[b.c.length]=a);0!=b.c.length&&(l=BB(xq(b,pvn(t,b.c.length)),128),P.a.Bc(l),l.s=d++,cLn(l,M,j),b.c=x8(Ant,HWn,1,0,5,1))}for(y=n.c.length+1,u=new Wb(n);u.a<u.c.c.length;)(a=BB(n0(u),128)).s<f&&(a.s+=y);for(T=new Wb(n);T.a<T.c.c.length;)for(e=new M2((E=BB(n0(T),128)).t,0);e.b<e.d.gc();)Px(e.b<e.d.gc()),S=(i=BB(e.d.Xb(e.c=e.b++),268)).b,E.s>S.s&&(fW(e),y7(S.i,i),i.c>0&&(i.a=S,WB(S.t,i),i.b=E,WB(E.i,i)))}function OXn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.Ml();case 12:return n.Ol();case 14:return n.Ql();case 15:return n.Tl();case 16:return n.Rl();case 17:return n.Ul();case 21:return QXn(n),wWn(),wWn(),sNt;case 10:switch(n.a){case 65:return n.yl();case 90:return n.Dl();case 122:return n.Kl();case 98:return n.El();case 66:return n.zl();case 60:return n.Jl();case 62:return n.Hl()}}switch(c=kXn(n),t=n.c){case 3:return n.Zl(c);case 4:return n.Xl(c);case 5:return n.Yl(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=fV(n.i,r++))>=48&&t<=57))throw Hp(new ak(kWn((u$(),X8n))));for(i=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(e=i,44==t){if(r>=n.j)throw Hp(new ak(kWn((u$(),V8n))));if((t=fV(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=fV(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw Hp(new ak(kWn((u$(),Y8n))));if(i>e)throw Hp(new ak(kWn((u$(),Q8n))))}else e=-1}if(125!=t)throw Hp(new ak(kWn((u$(),W8n))));n.sl(r)?(wWn(),wWn(),c=new h4(9,c),n.d=r+1):(wWn(),wWn(),c=new h4(3,c),n.d=r),c.dm(i),c.cm(e),QXn(n)}}return c}function AXn(n,t,e,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M;for(w=new J6(t.b),v=new J6(t.b),l=new J6(t.b),j=new J6(t.b),d=new J6(t.b),k=spn(t,0);k.b!=k.d.c;)for(u=new Wb((m=BB(b3(k),11)).g);u.a<u.c.c.length;)if((c=BB(n0(u),17)).c.i==c.d.i){if(m.j==c.d.j){j.c[j.c.length]=c;continue}if(m.j==(kUn(),sIt)&&c.d.j==SIt){d.c[d.c.length]=c;continue}}for(o=new Wb(d);o.a<o.c.c.length;)__n(n,c=BB(n0(o),17),e,i,(kUn(),oIt));for(a=new Wb(j);a.a<a.c.c.length;)c=BB(n0(a),17),Bl(E=new $vn(n),(uSn(),Iut)),hon(E,(HXn(),ept),(QEn(),XCt)),hon(E,(hWn(),dlt),c),hon(T=new CSn,dlt,c.d),qCn(T,(kUn(),CIt)),CZ(T,E),hon(M=new CSn,dlt,c.c),qCn(M,oIt),CZ(M,E),hon(c.c,Elt,E),hon(c.d,Elt,E),SZ(c,null),MZ(c,null),e.c[e.c.length]=E,hon(E,Bft,iln(2));for(y=spn(t,0);y.b!=y.d.c;)s=(m=BB(b3(y),11)).e.c.length>0,g=m.g.c.length>0,s&&g?l.c[l.c.length]=m:s?w.c[w.c.length]=m:g&&(v.c[v.c.length]=m);for(b=new Wb(w);b.a<b.c.c.length;)WB(r,HBn(n,BB(n0(b),11),null,e));for(p=new Wb(v);p.a<p.c.c.length;)WB(r,HBn(n,null,BB(n0(p),11),e));for(f=new Wb(l);f.a<f.c.c.length;)WB(r,HBn(n,h=BB(n0(f),11),h,e))}function $Xn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(d=new xC(RQn,RQn),t=new xC(KQn,KQn),k=new Wb(n);k.a<k.c.c.length;)y=BB(n0(k),8),d.a=e.Math.min(d.a,y.a),d.b=e.Math.min(d.b,y.b),t.a=e.Math.max(t.a,y.a),t.b=e.Math.max(t.b,y.b);for(s=new xC(t.a-d.a,t.b-d.b),h=new ZFn(new xC(d.a-50,d.b-s.a-50),new xC(d.a-50,t.b+s.a+50),new xC(t.a+s.b/2+50,d.b+s.b/2)),m=new Rv,c=new Np,i=new Np,m.a.zc(h,m),E=new Wb(n);E.a<E.c.c.length;){for(j=BB(n0(E),8),c.c=x8(Ant,HWn,1,0,5,1),v=m.a.ec().Kc();v.Ob();)W8((g=BB(v.Pb(),308)).d,g.a),Ibn(W8(g.d,j),W8(g.d,g.a))<0&&(c.c[c.c.length]=g);for(i.c=x8(Ant,HWn,1,0,5,1),p=new Wb(c);p.a<p.c.c.length;)for(b=new Wb((g=BB(n0(p),308)).e);b.a<b.c.c.length;){for(f=BB(n0(b),168),a=!0,o=new Wb(c);o.a<o.c.c.length;)(u=BB(n0(o),308))!=g&&(cV(f,xq(u.e,0))||cV(f,xq(u.e,1))||cV(f,xq(u.e,2)))&&(a=!1);a&&(i.c[i.c.length]=f)}for(oMn(m,c),e5(m,new bn),l=new Wb(i);l.a<l.c.c.length;)TU(m,new ZFn(j,(f=BB(n0(l),168)).a,f.b))}for(e5(m,new jw(w=new Rv)),r=w.a.ec().Kc();r.Ob();)(K7(h,(f=BB(r.Pb(),168)).a)||K7(h,f.b))&&r.Qb();return e5(w,new wn),w}function LXn(n){var t,e,i;switch(e=BB(mMn(n,(hWn(),Zft)),21),t=kA(Nat),BB(mMn(n,(HXn(),sgt)),334)==(ufn(),pCt)&&Jcn(t,xat),qy(TD(mMn(n,ugt)))?dq(t,(yMn(),Rat),(lWn(),Hot)):dq(t,(yMn(),_at),(lWn(),Hot)),null!=mMn(n,(C6(),TMt))&&Jcn(t,Dat),(qy(TD(mMn(n,ggt)))||qy(TD(mMn(n,ogt))))&&WG(t,(yMn(),Bat),(lWn(),eot)),BB(mMn(n,Udt),103).g){case 2:case 3:case 4:WG(dq(t,(yMn(),Rat),(lWn(),rot)),Bat,iot)}switch(e.Hc((bDn(),hft))&&WG(dq(dq(t,(yMn(),Rat),(lWn(),tot)),Fat,Zut),Bat,not),GI(mMn(n,Sgt))!==GI((sNn(),Ivt))&&dq(t,(yMn(),_at),(lWn(),Not)),e.Hc(pft)&&(dq(t,(yMn(),Rat),(lWn(),Fot)),dq(t,Kat,Kot),dq(t,_at,_ot)),GI(mMn(n,Pdt))!==GI((JMn(),cft))&&GI(mMn(n,Zdt))!==GI((Mbn(),YPt))&&WG(t,(yMn(),Bat),(lWn(),pot)),qy(TD(mMn(n,fgt)))&&dq(t,(yMn(),_at),(lWn(),got)),qy(TD(mMn(n,Hdt)))&&dq(t,(yMn(),_at),(lWn(),Wot)),KLn(n)&&(i=(GI(mMn(n,sgt))===GI(pCt)?BB(mMn(n,Rdt),292):BB(mMn(n,Kdt),292))==(Kan(),jft)?(lWn(),Rot):(lWn(),Yot),dq(t,(yMn(),Fat),i)),BB(mMn(n,zpt),377).g){case 1:dq(t,(yMn(),Fat),(lWn(),Vot));break;case 2:WG(dq(dq(t,(yMn(),_at),(lWn(),Vut)),Fat,Qut),Bat,Yut)}return GI(mMn(n,Ldt))!==GI((mon(),Nvt))&&dq(t,(yMn(),_at),(lWn(),Qot)),t}function NXn(n){NM(n,new MTn(vj(wj(pj(gj(new du,$4n),"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 Za))),u2(n,$4n,VJn,1.3),u2(n,$4n,A4n,mpn(gEt)),u2(n,$4n,QJn,IEt),u2(n,$4n,vZn,15),u2(n,$4n,u3n,mpn(bEt)),u2(n,$4n,PZn,mpn(jEt)),u2(n,$4n,BZn,mpn(EEt)),u2(n,$4n,SZn,mpn(TEt)),u2(n,$4n,CZn,mpn(kEt)),u2(n,$4n,MZn,mpn(MEt)),u2(n,$4n,IZn,mpn(OEt)),u2(n,$4n,E4n,mpn(PEt)),u2(n,$4n,T4n,mpn(yEt)),u2(n,$4n,P4n,mpn(SEt)),u2(n,$4n,C4n,mpn(AEt)),u2(n,$4n,I4n,mpn(pEt)),u2(n,$4n,jZn,mpn(vEt)),u2(n,$4n,m3n,mpn(mEt)),u2(n,$4n,S4n,mpn(dEt)),u2(n,$4n,M4n,mpn(wEt)),u2(n,$4n,O4n,mpn(LEt))}function xXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.Aj())throw Hp(new _y(d6n+t.ne()+g6n));if(cL(t,457)){if(!(d=SDn(BB(t,671),e)))throw Hp(new _y(p6n+e+"' is not a valid enumerator of '"+t.ne()+"'"));return d}switch(Cfn((IPn(),Z$t),t).cl()){case 2:e=FBn(e,!1);break;case 3:e=FBn(e,!0)}if(i=Cfn(Z$t,t).$k())return i.Aj().Nh().Kh(i,e);if(f=Cfn(Z$t,t).al()){for(d=new Np,s=0,h=(o=ysn(e)).length;s<h;++s)u=o[s],WB(d,f.Aj().Nh().Kh(f,u));return d}if(!(w=Cfn(Z$t,t).bl()).dc()){for(b=w.Kc();b.Ob();){l=BB(b.Pb(),148);try{if(null!=(d=l.Aj().Nh().Kh(l,e)))return d}catch(g){if(!cL(g=lun(g),60))throw Hp(g)}}throw Hp(new _y(p6n+e+"' does not match any member types of the union datatype '"+t.ne()+"'"))}if(BB(t,834).Fj(),!(r=xfn(t.Bj())))return null;if(r==Stt){c=0;try{c=l_n(e,_Vn,DWn)&QVn}catch(g){if(!cL(g=lun(g),127))throw Hp(g);c=V7(e)[0]}return fun(c)}if(r==mtt){for(a=0;a<IOt.length;++a)try{return BM(IOt[a],e)}catch(g){if(!cL(g=lun(g),32))throw Hp(g)}throw Hp(new _y(p6n+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Hp(new _y(p6n+e+"' is invalid. "))}function DXn(n,t){var e,i,r,c,a,u,o,s;if(e=0,a=0,c=t.length,u=null,s=new Ik,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(b1(a,t.length),43==t.charCodeAt(a)||(b1(a,t.length),45==t.charCodeAt(a)))))throw Hp(new Mk(DQn+t+'"'));for(;a<c&&(b1(a,t.length),46!=t.charCodeAt(a))&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+fx(null==t?zWn:(kW(t),t),e,a),a<c&&(b1(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(b1(a,t.length),101!=t.charCodeAt(a))&&(b1(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+fx(null==t?zWn:(kW(t),t),e,a)}else n.e=0;if(a<c&&(b1(a,t.length),101==t.charCodeAt(a)||(b1(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(b1(a,t.length),43==t.charCodeAt(a))&&++a<c&&(b1(a,t.length),45!=t.charCodeAt(a))&&++e,u=t.substr(e,c-e),n.e=n.e-l_n(u,_Vn,DWn),n.e!=CJ(n.e)))throw Hp(new Mk("Scale out of range."));if((o=s.a).length<16){if(n.f=(null==Vtt&&(Vtt=new RegExp("^[+-]?\\d*$","i")),Vtt.test(o)?parseInt(o,10):NaN),isNaN(n.f))throw Hp(new Mk(DQn+t+'"'));n.a=aIn(n.f)}else fdn(n,new $A(o));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=fV(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function RXn(){RXn=O,JIn(fut=new pJ,(kUn(),wIt),vIt),JIn(fut,MIt,vIt),JIn(fut,MIt,kIt),JIn(fut,hIt,pIt),JIn(fut,hIt,vIt),JIn(fut,dIt,vIt),JIn(fut,dIt,mIt),JIn(fut,EIt,lIt),JIn(fut,EIt,vIt),JIn(fut,yIt,bIt),JIn(fut,yIt,vIt),JIn(fut,yIt,mIt),JIn(fut,yIt,lIt),JIn(fut,bIt,yIt),JIn(fut,bIt,kIt),JIn(fut,bIt,pIt),JIn(fut,bIt,vIt),JIn(fut,jIt,jIt),JIn(fut,jIt,mIt),JIn(fut,jIt,kIt),JIn(fut,gIt,gIt),JIn(fut,gIt,mIt),JIn(fut,gIt,pIt),JIn(fut,TIt,TIt),JIn(fut,TIt,lIt),JIn(fut,TIt,kIt),JIn(fut,fIt,fIt),JIn(fut,fIt,lIt),JIn(fut,fIt,pIt),JIn(fut,mIt,dIt),JIn(fut,mIt,yIt),JIn(fut,mIt,jIt),JIn(fut,mIt,gIt),JIn(fut,mIt,vIt),JIn(fut,mIt,mIt),JIn(fut,mIt,kIt),JIn(fut,mIt,pIt),JIn(fut,lIt,EIt),JIn(fut,lIt,yIt),JIn(fut,lIt,TIt),JIn(fut,lIt,fIt),JIn(fut,lIt,lIt),JIn(fut,lIt,kIt),JIn(fut,lIt,pIt),JIn(fut,lIt,vIt),JIn(fut,kIt,MIt),JIn(fut,kIt,bIt),JIn(fut,kIt,jIt),JIn(fut,kIt,TIt),JIn(fut,kIt,mIt),JIn(fut,kIt,lIt),JIn(fut,kIt,kIt),JIn(fut,kIt,vIt),JIn(fut,pIt,hIt),JIn(fut,pIt,bIt),JIn(fut,pIt,gIt),JIn(fut,pIt,fIt),JIn(fut,pIt,mIt),JIn(fut,pIt,lIt),JIn(fut,pIt,pIt),JIn(fut,pIt,vIt),JIn(fut,vIt,wIt),JIn(fut,vIt,MIt),JIn(fut,vIt,hIt),JIn(fut,vIt,dIt),JIn(fut,vIt,EIt),JIn(fut,vIt,yIt),JIn(fut,vIt,bIt),JIn(fut,vIt,mIt),JIn(fut,vIt,lIt),JIn(fut,vIt,kIt),JIn(fut,vIt,pIt),JIn(fut,vIt,vIt)}function KXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(n.d=new xC(RQn,RQn),n.c=new xC(KQn,KQn),l=t.Kc();l.Ob();)for(m=new Wb(BB(l.Pb(),37).a);m.a<m.c.c.length;)v=BB(n0(m),10),n.d.a=e.Math.min(n.d.a,v.n.a-v.d.b),n.d.b=e.Math.min(n.d.b,v.n.b-v.d.d),n.c.a=e.Math.max(n.c.a,v.n.a+v.o.a+v.d.c),n.c.b=e.Math.max(n.c.b,v.n.b+v.o.b+v.d.a);for(o=new Yv,f=t.Kc();f.Ob();)r=uXn(n,BB(f.Pb(),37)),WB(o.a,r),r.a=r.a|!BB(mMn(r.c,(hWn(),Xft)),21).dc();for(n.b=(Shn(),(T=new kt).f=new vin(i),T.b=oGn(T.f,o),T),jGn((w=n.b,new Xm,w)),n.e=new Gj,n.a=n.b.f.e,u=new Wb(o.a);u.a<u.c.c.length;)for(c=BB(n0(u),841),y=AJ(n.b,c),nKn(c.c,y.a,y.b),g=new Wb(c.c.a);g.a<g.c.c.length;)(d=BB(n0(g),10)).k==(uSn(),Mut)&&(p=lLn(n,d.n,BB(mMn(d,(hWn(),Qft)),61)),UR(kO(d.n),p));for(a=new Wb(o.a);a.a<a.c.c.length;)for(h=new Wb(wln(c=BB(n0(a),841)));h.a<h.c.c.length;)for(Kx(E=new Kj((s=BB(n0(h),17)).a),0,g1(s.c)),DH(E,g1(s.d)),b=null,j=spn(E,0);j.b!=j.d.c;)k=BB(b3(j),8),b?(uen(b.a,k.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):uen(b.b,k.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=k):b=k;qx(n.e),UR(n.a,n.e)}function _Xn(n){V$n(n.b,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentTransient"])),V$n(n.a,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedSourceURI"])),V$n(n.o,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),V$n(n.p,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),V$n(n.v,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),V$n(n.R,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedName"])),V$n(n.T,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),V$n(n.U,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),V$n(n.W,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),V$n(n.bb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidDefaultValueLiteral"])),V$n(n.eb,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),V$n(n.H,V9n,Pun(Gk(Qtt,1),sVn,2,6,[Y9n,"ConsistentType ConsistentBounds ConsistentArguments"]))}function FXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;if(!t.dc()){if(r=new km,f=(a=e||BB(t.Xb(0),17)).c,gxn(),(s=f.i.k)!=(uSn(),Cut)&&s!=Iut&&s!=Mut&&s!=Tut)throw Hp(new _y("The target node of the edge must be a normal node or a northSouthPort."));for(fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a]))),(kUn(),yIt).Hc(f.j)&&(b=Gy(MD(mMn(f,(hWn(),Llt)))),r5(r,new xC(Aon(Pun(Gk(PMt,1),sVn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),o=null,i=!1,u=t.Kc();u.Ob();)0!=(c=BB(u.Pb(),17).a).b&&(i?(r5(r,kL(UR(o,(Px(0!=c.b),BB(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,o=B$((Px(0!=c.b),BB(c.c.b.c,8))),Frn(r,c),yQ(c));l=a.d,yIt.Hc(l.j)&&(b=Gy(MD(mMn(l,(hWn(),Llt)))),r5(r,new xC(Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),fO(r,Aon(Pun(Gk(PMt,1),sVn,8,0,[l.i.n,l.n,l.a]))),n.d==(Usn(),emt)&&(Px(0!=r.b),w=BB(r.a.a.c,8),d=BB(Dpn(r,1),8),(g=new XZ(hsn(f.j))).a*=5,g.b*=5,p=XR(new xC(d.a,d.b),w),UR(v=new xC(iZ(g.a,p.a),iZ(g.b,p.b)),w),nX(spn(r,1),v),Px(0!=r.b),m=BB(r.c.b.c,8),y=BB(Dpn(r,r.b-2),8),(g=new XZ(hsn(l.j))).a*=5,g.b*=5,p=XR(new xC(y.a,y.b),m),UR(k=new xC(iZ(g.a,p.a),iZ(g.b,p.b)),m),Kx(r,r.b-1,k)),h=new oBn(r),Frn(a.a,Fvn(h))}}function BXn(n,t,i,r){var c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$,L,N,x;if(y=(v=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),k=v.Eg(),m=v.Cg()/2,w=v.Bg()/2,cL(v,186)&&(y+=WJ(p=BB(v,118)).i,y+=WJ(p).i),y+=m,k+=w,C=(S=BB(Wtn((!n.b&&(n.b=new hK(KOt,n,4,7)),n.b),0),82)).Dg(),I=S.Eg(),P=S.Cg()/2,j=S.Bg()/2,cL(S,186)&&(C+=WJ(M=BB(S,118)).i,C+=WJ(M).i),C+=P,I+=j,0==(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)tE(),o=new co,f9((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),o);else if((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i>1)for(b=new cx((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a));b.e!=b.i.gc();)Qjn(b);for(d=C,C>y+m?d=y+m:C<y-m&&(d=y-m),g=I,I>k+w?g=k+w:I<k-w&&(g=k-w),d>y-m&&d<y+m&&g>k-w&&g<k+w&&(d=y+m),Ien(u=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),d),Aen(u,g),E=y,y>C+P?E=C+P:y<C-P&&(E=C-P),T=k,k>I+j?T=I+j:k<I-j&&(T=I-j),E>C-P&&E<C+P&&T>I-j&&T<I+j&&(T=I+j),Ten(u,E),Oen(u,T),sqn((!u.a&&(u.a=new $L(xOt,u,5)),u.a)),a=pvn(t,5),v==S&&++a,A=E-d,N=T-g,h=.20000000298023224*e.Math.sqrt(A*A+N*N),$=A/(a+1),x=N/(a+1),O=d,L=g,s=0;s<a;s++)L+=x,(f=(O+=$)+H$n(t,24)*uYn*h-h/2)<0?f=1:f>i&&(f=i-1),(l=L+H$n(t,24)*uYn*h-h/2)<0?l=1:l>r&&(l=r-1),tE(),jen(c=new ro,f),Een(c,l),f9((!u.a&&(u.a=new $L(xOt,u,5)),u.a),c)}function HXn(){HXn=O,sWn(),ppt=jPt,vpt=EPt,mpt=TPt,ypt=MPt,jpt=SPt,Ept=PPt,Spt=IPt,Cpt=APt,Ipt=$Pt,Ppt=OPt,Opt=LPt,$pt=NPt,Npt=RPt,Mpt=CPt,fWn(),gpt=_wt,kpt=Fwt,Tpt=Bwt,Apt=Hwt,hpt=new XA(pPt,iln(0)),fpt=Dwt,lpt=Rwt,bpt=Kwt,zpt=ldt,Rpt=zwt,Kpt=Wwt,Bpt=edt,_pt=Ywt,Fpt=Zwt,Xpt=pdt,Upt=wdt,qpt=odt,Hpt=adt,Gpt=hdt,Rgt=Pwt,Kgt=Cwt,rgt=Kbt,cgt=Bbt,Ugt=new WA(12),zgt=new XA(XSt,Ugt),Mbn(),Zdt=new XA(vSt,ngt=QPt),tpt=new XA(aPt,0),wpt=new XA(vPt,iln(1)),Edt=new XA(cSt,dZn),Ggt=zSt,ept=uPt,upt=wPt,zdt=lSt,kdt=iSt,sgt=ESt,dpt=new XA(kPt,(hN(),!0)),wgt=SSt,dgt=PSt,Fgt=KSt,qgt=qSt,Bgt=FSt,Ffn(),Udt=new XA(bSt,Wdt=BPt),$gt=DSt,Agt=NSt,cpt=fPt,rpt=hPt,apt=bPt,cpn(),new XA(ZSt,Vgt=qCt),Ygt=ePt,Jgt=iPt,Zgt=rPt,Qgt=tPt,Dpt=Gwt,Pgt=lwt,Sgt=hwt,xpt=qwt,kgt=ewt,Gdt=Tbt,qdt=jbt,xdt=ubt,Ddt=obt,Kdt=bbt,Rdt=sbt,Hdt=ybt,Igt=wwt,Ogt=dwt,pgt=Vbt,_gt=$wt,Ngt=mwt,ugt=Gbt,Dgt=Mwt,egt=Nbt,igt=Dbt,Ndt=hSt,Lgt=gwt,Pdt=Qlt,Sdt=Wlt,Mdt=Xlt,fgt=Xbt,hgt=Ubt,lgt=Wbt,Hgt=BSt,vgt=OSt,agt=ySt,Ydt=gSt,Qdt=dSt,_dt=gbt,ipt=sPt,Tdt=sSt,bgt=MSt,npt=cPt,Xgt=VSt,Wgt=YSt,Egt=cwt,Tgt=uwt,spt=gPt,jdt=Ult,Mgt=swt,Jdt=Obt,Vdt=Cbt,Cgt=$St,mgt=Zbt,xgt=jwt,Lpt=xPt,Xdt=Sbt,opt=Nwt,tgt=$bt,ygt=twt,Fdt=vbt,ggt=ISt,jgt=rwt,Bdt=mbt,Ldt=cbt,Adt=ebt,Idt=nbt,Odt=tbt,$dt=rbt,Cdt=Jlt,ogt=zbt}function qXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(uHn(),T=n.e,w=n.d,r=n.a,0==T)switch(t){case 0:return"0";case 1:return WQn;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(j=new Ck).a+=t<0?"0E+":"0E",j.a+=-t,j.a}if(y=x8(ONt,WVn,25,1+(m=10*w+1+7),15,1),e=m,1==w)if((u=r[0])<0){C=e0(u,UQn);do{d=C,C=Ojn(C,10),y[--e]=48+dG(ibn(d,cbn(C,10)))&QVn}while(0!=Vhn(C,0))}else{C=u;do{d=C,C=C/10|0,y[--e]=d-10*C+48&QVn}while(0!=C)}else{aHn(r,0,S=x8(ANt,hQn,25,w,15,1),0,P=w);n:for(;;){for(E=0,s=P-1;s>=0;s--)p=fTn(rbn(yz(E,32),e0(S[s],UQn))),S[s]=dG(p),E=dG(kz(p,32));v=dG(E),g=e;do{y[--e]=48+v%10&QVn}while(0!=(v=v/10|0)&&0!=e);for(i=9-g+e,o=0;o<i&&e>0;o++)y[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==y[e];)++e}if(b=T<0,a=m-e-t-1,0==t)return b&&(y[--e]=45),Bdn(y,e,m-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=m-1;l>=h;l--)y[l+1]=y[l];return y[++h]=46,b&&(y[--e]=45),Bdn(y,e,m-e+1)}for(f=2;f<1-a;f++)y[--e]=48;return y[--e]=46,y[--e]=48,b&&(y[--e]=45),Bdn(y,e,m-e)}return M=e+1,c=m,k=new Ik,b&&(k.a+="-"),c-M>=1?(xX(k,y[e]),k.a+=".",k.a+=Bdn(y,e+1,m-e-1)):k.a+=Bdn(y,e,m-e),k.a+="E",a>0&&(k.a+="+"),k.a+=""+a,k.a}function GXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(n.c=t,n.g=new xp,GM(),twn(new Pw(new Dy(n.c))),v=SD(ZAn(n.c,(MMn(),dTt))),u=BB(ZAn(n.c,pTt),316),y=BB(ZAn(n.c,vTt),429),c=BB(ZAn(n.c,hTt),482),m=BB(ZAn(n.c,gTt),430),n.j=Gy(MD(ZAn(n.c,mTt))),a=n.a,u.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 Hp(new _y(N4n+(null!=u.f?u.f:""+u.g)))}if(n.d=new DJ(a,y,c),hon(n.d,(Xcn(),Qrt),TD(ZAn(n.c,lTt))),n.d.c=qy(TD(ZAn(n.c,fTt))),0==YQ(n.c).i)return n.d;for(h=new AL(YQ(n.c));h.e!=h.i.gc();){for(l=(s=BB(kpn(h),33)).g/2,f=s.f/2,k=new xC(s.i+l,s.j+f);hU(n.g,k);)_x(k,(e.Math.random()-.5)*lZn,(e.Math.random()-.5)*lZn);w=BB(ZAn(s,(sWn(),$St)),142),d=new AZ(k,new UV(k.a-l-n.j/2-w.b,k.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),WB(n.d.i,d),VW(n.g,k,new rI(d,s))}switch(m.g){case 0:if(null==v)n.d.d=BB(xq(n.d.i,0),65);else for(p=new Wb(n.d.i);p.a<p.c.c.length;)d=BB(n0(p),65),null!=(b=BB(BB(RX(n.g,d.a),46).b,33).zg())&&mK(b,v)&&(n.d.d=d);break;case 1:for((i=new xC(n.c.g,n.c.f)).a*=.5,i.b*=.5,_x(i,n.c.i,n.c.j),r=RQn,g=new Wb(n.d.i);g.a<g.c.c.length;)(o=W8((d=BB(n0(g),65)).a,i))<r&&(r=o,n.d.d=d);break;default:throw Hp(new _y(N4n+(null!=m.f?m.f:""+m.g)))}return n.d}function zXn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E;for(j=BB(Wtn((!n.a&&(n.a=new eU(FOt,n,6,6)),n.a),0),202),f=new km,k=new xp,E=tFn(j),jCn(k.f,j,E),b=new xp,r=new YT,d=NU(Wen(Pun(Gk(xnt,1),HWn,20,0,[(!t.d&&(t.d=new hK(_Ot,t,8,5)),t.d),(!t.e&&(t.e=new hK(_Ot,t,7,4)),t.e)])));dAn(d);){if(w=BB(U5(d),79),1!=(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i)throw Hp(new _y(B5n+(!n.a&&(n.a=new eU(FOt,n,6,6)),n.a).i));w!=n&&(r5(r,p=BB(Wtn((!w.a&&(w.a=new eU(FOt,w,6,6)),w.a),0),202),r.c.b,r.c),(g=BB(qI(AY(k.f,p)),12))||(g=tFn(p),jCn(k.f,p,g)),l=i?XR(new wA(BB(xq(E,E.c.length-1),8)),BB(xq(g,g.c.length-1),8)):XR(new wA((l1(0,E.c.length),BB(E.c[0],8))),(l1(0,g.c.length),BB(g.c[0],8))),jCn(b.f,p,l))}if(0!=r.b)for(v=BB(xq(E,i?E.c.length-1:0),8),h=1;h<E.c.length;h++){for(m=BB(xq(E,i?E.c.length-1-h:h),8),c=spn(r,0);c.b!=c.d.c;)p=BB(b3(c),202),(g=BB(qI(AY(k.f,p)),12)).c.length<=h?mtn(c):(y=UR(new wA(BB(xq(g,i?g.c.length-1-h:h),8)),BB(qI(AY(b.f,p)),8)),m.a==y.a&&m.b==y.b||(a=m.a-v.a,o=m.b-v.b,(u=y.a-v.a)*o==(s=y.b-v.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==u||isNaN(u)?u:u<0?-1:1)&&(0==o||isNaN(o)?o:o<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(u)||e.Math.abs(o)<e.Math.abs(s))&&r5(f,m,f.c.b,f.c):h>1&&r5(f,v,f.c.b,f.c),mtn(c)));v=m}return f}function UXn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A;for(OTn(e,"Greedy cycle removal",1),A=(m=t.a).c.length,n.a=x8(ANt,hQn,25,A,15,1),n.c=x8(ANt,hQn,25,A,15,1),n.b=x8(ANt,hQn,25,A,15,1),s=0,p=new Wb(m);p.a<p.c.c.length;){for((d=BB(n0(p),10)).p=s,T=new Wb(d.j);T.a<T.c.c.length;){for(u=new Wb((k=BB(n0(T),11)).e);u.a<u.c.c.length;)(i=BB(n0(u),17)).c.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.a[s]+=S>0?S+1:1);for(a=new Wb(k.g);a.a<a.c.c.length;)(i=BB(n0(a),17)).d.i!=d&&(S=BB(mMn(i,(HXn(),fpt)),19).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?DH(n.e,d):0==n.a[s]&&DH(n.f,d),++s}for(w=-1,b=1,f=new Np,n.d=BB(mMn(t,(hWn(),Slt)),230);A>0;){for(;0!=n.e.b;)C=BB(dH(n.e),10),n.b[C.p]=w--,QKn(n,C),--A;for(;0!=n.f.b;)I=BB(dH(n.f),10),n.b[I.p]=b++,QKn(n,I),--A;if(A>0){for(l=_Vn,v=new Wb(m);v.a<v.c.c.length;)d=BB(n0(v),10),0==n.b[d.p]&&(y=n.c[d.p]-n.a[d.p])>=l&&(y>l&&(f.c=x8(Ant,HWn,1,0,5,1),l=y),f.c[f.c.length]=d);h=n.Zf(f),n.b[h.p]=b++,QKn(n,h),--A}}for(P=m.c.length+1,s=0;s<m.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Wb(m);g.a<g.c.c.length;)for(E=0,M=(j=I2((d=BB(n0(g),10)).j)).length;E<M;++E)for(c=0,o=(r=Z0((k=j[E]).g)).length;c<o;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(tBn(i,!0),hon(t,qft,(hN(),!0)));n.a=null,n.c=null,n.b=null,yQ(n.f),yQ(n.e),HSn(e)}function XXn(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;for(i=new Np,u=new Np,g=t/2,b=n.gc(),r=BB(n.Xb(0),8),p=BB(n.Xb(1),8),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=BB(n.Xb(s),8),WB(i,(l1(1,(w=QAn(r.a,r.b,d.a,d.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),WB(i,(l1(0,(w=QAn(r.a,r.b,p.a,p.b,g)).c.length),BB(w.c[0],8))),WB(u,(l1(1,w.c.length),BB(w.c[1],8)));for(WB(i,(l1(1,(w=QAn(p.a,p.b,r.a,r.b,g)).c.length),BB(w.c[1],8))),WB(u,(l1(0,w.c.length),BB(w.c[0],8))),e=new km,a=new Np,DH(e,(l1(0,i.c.length),BB(i.c[0],8))),h=1;h<i.c.length-2;h+=2)l1(h,i.c.length),c=BB(i.c[h],8),l=qPn((l1(h-1,i.c.length),BB(i.c[h-1],8)),c,(l1(h+1,i.c.length),BB(i.c[h+1],8)),(l1(h+2,i.c.length),BB(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?r5(e,l,e.c.b,e.c):r5(e,c,e.c.b,e.c);for(DH(e,BB(xq(i,i.c.length-1),8)),WB(a,(l1(0,u.c.length),BB(u.c[0],8))),f=1;f<u.c.length-2;f+=2)l1(f,u.c.length),c=BB(u.c[f],8),l=qPn((l1(f-1,u.c.length),BB(u.c[f-1],8)),c,(l1(f+1,u.c.length),BB(u.c[f+1],8)),(l1(f+2,u.c.length),BB(u.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?a.c[a.c.length]=l:a.c[a.c.length]=c;for(WB(a,BB(xq(u,u.c.length-1),8)),o=a.c.length-1;o>=0;o--)DH(e,(l1(o,a.c.length),BB(a.c[o],8)));return e}function WXn(n){var t,e,i,r,c,a,u,o,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=kAt,s=null,c=null,(o=Vgn(n,u=0,AAt,$At))<n.length&&(b1(o,n.length),58==n.charCodeAt(o))&&(f=n.substr(u,o-u),u=o+1),e=null!=f&&xT(jAt,f.toLowerCase())){if(-1==(o=n.lastIndexOf("!/")))throw Hp(new _y("no archive separator"));a=!0,i=fx(n,u,++o),u=o}else u>=0&&mK(n.substr(u,2),"//")?(o=Vgn(n,u+=2,LAt,NAt),i=n.substr(u,o-u),u=o):null==f||u!=n.length&&(b1(u,n.length),47==n.charCodeAt(u))||(a=!1,-1==(o=yN(n,YTn(35),u))&&(o=n.length),i=n.substr(u,o-u),u=o);if(!e&&u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(o=Vgn(n,u+1,LAt,NAt),(h=n.substr(u+1,o-(u+1))).length>0&&58==fV(h,h.length-1)&&(r=h,u=o)),u<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(++u,t=!0),u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u))){for(l=new Np;u<n.length&&(b1(u,n.length),63!=n.charCodeAt(u))&&(b1(u,n.length),35!=n.charCodeAt(u));)o=Vgn(n,u,LAt,NAt),WB(l,n.substr(u,o-u)),(u=o)<n.length&&(b1(u,n.length),47==n.charCodeAt(u))&&(Qhn(n,++u)||(l.c[l.c.length]=""));Qgn(l,b=x8(Qtt,sVn,2,l.c.length,6,1))}return u<n.length&&(b1(u,n.length),63==n.charCodeAt(u))&&(-1==(o=lx(n,35,++u))&&(o=n.length),s=n.substr(u,o-u),u=o),u<n.length&&(c=nO(n,++u)),wGn(a,f,i,r,b,s),new rRn(a,f,i,r,t,b,s,c)}function VXn(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$;for(O=new Np,w=new Wb(t.b);w.a<w.c.c.length;)for(k=new Wb(BB(n0(w),29).a);k.a<k.c.c.length;){for((y=BB(n0(k),10)).p=-1,l=_Vn,T=_Vn,S=new Wb(y.j);S.a<S.c.c.length;){for(c=new Wb((M=BB(n0(S),11)).e);c.a<c.c.c.length;)i=BB(n0(c),17),P=BB(mMn(i,(HXn(),bpt)),19).a,l=e.Math.max(l,P);for(r=new Wb(M.g);r.a<r.c.c.length;)i=BB(n0(r),17),P=BB(mMn(i,(HXn(),bpt)),19).a,T=e.Math.max(T,P)}hon(y,Xmt,iln(l)),hon(y,Wmt,iln(T))}for(p=0,b=new Wb(t.b);b.a<b.c.c.length;)for(k=new Wb(BB(n0(b),29).a);k.a<k.c.c.length;)(y=BB(n0(k),10)).p<0&&((I=new rm).b=p++,jRn(n,y,I),O.c[O.c.length]=I);for(E=sx(O.c.length),f=sx(O.c.length),u=0;u<O.c.length;u++)WB(E,new Np),WB(f,iln(0));for(vzn(t,O,E,f),A=BB(Qgn(O,x8(Ymt,O3n,257,O.c.length,0,1)),840),j=BB(Qgn(E,x8(Rnt,nZn,15,E.c.length,0,1)),192),h=x8(ANt,hQn,25,f.c.length,15,1),o=0;o<h.length;o++)h[o]=(l1(o,f.c.length),BB(f.c[o],19)).a;for(v=0,m=new Np,s=0;s<A.length;s++)0==h[s]&&WB(m,A[s]);for(g=x8(ANt,hQn,25,A.length,15,1);0!=m.c.length;)for(g[(I=BB(s6(m,0),257)).b]=v++;!j[I.b].dc();)--h[($=BB(j[I.b].$c(0),257)).b],0==h[$.b]&&(m.c[m.c.length]=$);for(n.a=x8(Ymt,O3n,257,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],C=g[a],n.a[C]=d,d.b=C,k=new Wb(d.e);k.a<k.c.c.length;)(y=BB(n0(k),10)).p=C;return n.a}function QXn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=fV(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!=fV(n.i,n.d))break;if(++n.d>=n.j)throw Hp(new ak(kWn((u$(),p8n))));switch(t=fV(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 Hp(new ak(kWn((u$(),p8n))));if(61==(t=fV(n.i,n.d++)))i=16;else{if(33!=t)throw Hp(new ak(kWn((u$(),v8n))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=fV(n.i,n.d++)););if(41!=t)throw Hp(new ak(kWn((u$(),m8n))));i=21;break;default:if(45==t||97<=t&&t<=122||65<=t&&t<=90){--n.d,i=22;break}if(40==t){i=23;break}throw Hp(new ak(kWn((u$(),p8n))))}break;case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw Hp(new ak(kWn((u$(),g8n))));n.a=fV(n.i,n.d++);break;case 45:512==(512&n.e)&&n.d<n.j&&91==fV(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512!=(512&n.e)&&n.d<n.j&&58==fV(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==HQn&&n.d<n.j&&56320==(64512&(e=fV(n.i,n.d)))&&(n.a=BQn+(t-HQn<<10)+e-56320,++n.d),i=0}n.c=i}}function YXn(n){var t,e,i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P;if((j=BB(mMn(n,(HXn(),ept)),98))!=(QEn(),QCt)&&j!=YCt){for(s=new J6((lin((b=(w=n.b).c.length)+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),d=new J6((lin(b+2,NVn),ttn(rbn(rbn(5,b+2),(b+2)/10|0)))),WB(s,new xp),WB(s,new xp),WB(d,new Np),WB(d,new Np),k=new Np,t=0;t<b;t++)for(l1(t,w.c.length),e=BB(w.c[t],29),l1(t,s.c.length),E=BB(s.c[t],83),g=new xp,s.c[s.c.length]=g,l1(t,d.c.length),M=BB(d.c[t],15),v=new Np,d.c[d.c.length]=v,r=new Wb(e.a);r.a<r.c.c.length;)if(cln(i=BB(n0(r),10)))k.c[k.c.length]=i;else{for(o=new oz(ZL(fbn(i).a.Kc(),new h));dAn(o);)cln(S=(a=BB(U5(o),17)).c.i)&&((T=BB(E.xc(mMn(S,(hWn(),dlt))),10))||(T=oIn(n,S),E.zc(mMn(S,dlt),T),M.Fc(T)),SZ(a,BB(xq(T.j,1),11)));for(u=new oz(ZL(lbn(i).a.Kc(),new h));dAn(u);)cln(P=(a=BB(U5(u),17)).d.i)&&((p=BB(RX(g,mMn(P,(hWn(),dlt))),10))||(p=oIn(n,P),VW(g,mMn(P,dlt),p),v.c[v.c.length]=p),MZ(a,BB(xq(p.j,0),11)))}for(f=0;f<d.c.length;f++)if(l1(f,d.c.length),!(m=BB(d.c[f],15)).dc())for(l=null,0==f?(l=new HX(n),LZ(0,w.c.length),MS(w.c,0,l)):f==s.c.length-1?(l=new HX(n),w.c[w.c.length]=l):(l1(f-1,w.c.length),l=BB(w.c[f-1],29)),c=m.Kc();c.Ob();)PZ(BB(c.Pb(),10),l);for(y=new Wb(k);y.a<y.c.c.length;)PZ(BB(n0(y),10),null);hon(n,(hWn(),Wft),k)}}function JXn(n,t,e){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j;if(OTn(e,"Coffman-Graham Layering",1),0!=t.a.c.length){for(j=BB(mMn(t,(HXn(),mgt)),19).a,o=0,a=0,b=new Wb(t.a);b.a<b.c.c.length;)for((l=BB(n0(b),10)).p=o++,c=new oz(ZL(lbn(l).a.Kc(),new h));dAn(c);)(r=BB(U5(c),17)).p=a++;for(n.d=x8($Nt,ZYn,25,o,16,1),n.a=x8($Nt,ZYn,25,a,16,1),n.b=x8(ANt,hQn,25,o,15,1),n.e=x8(ANt,hQn,25,o,15,1),n.f=x8(ANt,hQn,25,o,15,1),win(n.c),rEn(n,t),d=new Xz(new Dd(n)),k=new Wb(t.a);k.a<k.c.c.length;){for(c=new oz(ZL(fbn(m=BB(n0(k),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.b[m.p];0==n.b[m.p]&&F8(eMn(d,m))}for(u=0;0!=d.b.c.length;)for(m=BB(mnn(d),10),n.f[m.p]=u++,c=new oz(ZL(lbn(m).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(p=r.d.i,--n.b[p.p],JIn(n.c,p,iln(n.f[m.p])),0==n.b[p.p]&&F8(eMn(d,p)));for(w=new Xz(new Rd(n)),y=new Wb(t.a);y.a<y.c.c.length;){for(c=new oz(ZL(lbn(m=BB(n0(y),10)).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||++n.e[m.p];0==n.e[m.p]&&F8(eMn(w,m))}for(i=r1(t,f=new Np);0!=w.b.c.length;)for(v=BB(mnn(w),10),(i.a.c.length>=j||!Ndn(v,i))&&(i=r1(t,f)),PZ(v,i),c=new oz(ZL(fbn(v).a.Kc(),new h));dAn(c);)r=BB(U5(c),17),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&F8(eMn(w,g)));for(s=f.c.length-1;s>=0;--s)WB(t.b,(l1(s,f.c.length),BB(f.c[s],29)));t.a.c=x8(Ant,HWn,1,0,5,1),HSn(e)}else HSn(e)}function ZXn(n){var t,e,i,r,c,a,u,o;for(n.b=1,QXn(n),t=null,0==n.c&&94==n.a?(QXn(n),wWn(),wWn(),Yxn(t=new M0(4),0,unt),a=new M0(4)):(wWn(),wWn(),a=new M0(4)),r=!0;1!=(o=n.c);){if(0==o&&93==n.a&&!r){t&&(WGn(t,a),a=t);break}if(e=n.a,i=!1,10==o)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:sHn(a,d_n(e)),i=!0;break;case 105:case 73:case 99:case 67:sHn(a,d_n(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(u=DIn(n,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(a,u),i=!0;break;default:e=qDn(n)}else if(24==o&&!r){if(t&&(WGn(t,a),a=t),WGn(a,ZXn(n)),0!=n.c||93!=n.a)throw Hp(new ak(kWn((u$(),N8n))));break}if(QXn(n),!i){if(0==o){if(91==e)throw Hp(new ak(kWn((u$(),x8n))));if(93==e)throw Hp(new ak(kWn((u$(),D8n))));if(45==e&&!r&&93!=n.a)throw Hp(new ak(kWn((u$(),R8n))))}if(0!=n.c||45!=n.a||45==e&&r)Yxn(a,e,e);else{if(QXn(n),1==(o=n.c))throw Hp(new ak(kWn((u$(),$8n))));if(0==o&&93==n.a)Yxn(a,e,e),Yxn(a,45,45);else{if(0==o&&93==n.a||24==o)throw Hp(new ak(kWn((u$(),R8n))));if(c=n.a,0==o){if(91==c)throw Hp(new ak(kWn((u$(),x8n))));if(93==c)throw Hp(new ak(kWn((u$(),D8n))));if(45==c)throw Hp(new ak(kWn((u$(),R8n))))}else 10==o&&(c=qDn(n));if(QXn(n),e>c)throw Hp(new ak(kWn((u$(),F8n))));Yxn(a,e,c)}}}r=!1}if(1==n.c)throw Hp(new ak(kWn((u$(),$8n))));return T$n(a),qHn(a),n.b=0,QXn(n),a}function nWn(n){V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#decimal"])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#integer"])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#boolean"])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EBoolean",t8n,"EBoolean:Object"])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#byte"])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#hexBinary"])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EByte",t8n,"EByte:Object"])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EChar",t8n,"EChar:Object"])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#double"])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EDouble",t8n,"EDouble:Object"])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#float"])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EFloat",t8n,"EFloat:Object"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#int"])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EInt",t8n,"EInt:Object"])),V$n(n.N,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#long"])),V$n(n.O,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"ELong",t8n,"ELong:Object"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#short"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"EShort",t8n,"EShort:Object"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[J9n,"http://www.w3.org/2001/XMLSchema#string"]))}function tWn(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(1==n.c.length)return l1(0,n.c.length),BB(n.c[0],135);if(n.c.length<=0)return new P6;for(s=new Wb(n);s.a<s.c.c.length;){for(u=BB(n0(s),135),m=0,d=DWn,g=DWn,b=_Vn,w=_Vn,v=spn(u.b,0);v.b!=v.d.c;)p=BB(b3(v),86),m+=BB(mMn(p,(CAn(),$kt)),19).a,d=e.Math.min(d,p.e.a),g=e.Math.min(g,p.e.b),b=e.Math.max(b,p.e.a+p.f.a),w=e.Math.max(w,p.e.b+p.f.b);hon(u,(CAn(),$kt),iln(m)),hon(u,(qqn(),nkt),new xC(d,g)),hon(u,Zyt,new xC(b,w))}for(SQ(),m$(n,new ga),qan(k=new P6,(l1(0,n.c.length),BB(n.c[0],94))),l=0,S=0,h=new Wb(n);h.a<h.c.c.length;)u=BB(n0(h),135),j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8)),l=e.Math.max(l,j.a),S+=j.a*j.b;for(l=e.Math.max(l,e.Math.sqrt(S)*Gy(MD(mMn(k,(CAn(),jkt))))),P=0,C=0,f=0,t=E=Gy(MD(mMn(k,xkt))),o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),135),P+(j=XR(B$(BB(mMn(u,(qqn(),Zyt)),8)),BB(mMn(u,nkt),8))).a>l&&(P=0,C+=f+E,f=0),ELn(k,u,P,C),t=e.Math.max(t,P+j.a),f=e.Math.max(f,j.b),P+=j.a+E;for(y=new xp,i=new xp,M=new Wb(n);M.a<M.c.c.length;)for(r=qy(TD(mMn(T=BB(n0(M),135),(sWn(),lSt)))),a=(T.q?T.q:het).vc().Kc();a.Ob();)hU(y,(c=BB(a.Pb(),42)).cd())?GI(BB(c.cd(),146).wg())!==GI(c.dd())&&(r&&hU(i,c.cd())?($T(),BB(c.cd(),146).tg()):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()),r&&VW(i,BB(c.cd(),146),c.dd()))):(VW(y,BB(c.cd(),146),c.dd()),hon(k,BB(c.cd(),146),c.dd()));return k}function eWn(){eWn=O,RXn(),JIn(put=new pJ,(kUn(),dIt),wIt),JIn(put,MIt,wIt),JIn(put,gIt,wIt),JIn(put,jIt,wIt),JIn(put,kIt,wIt),JIn(put,mIt,wIt),JIn(put,jIt,dIt),JIn(put,wIt,hIt),JIn(put,dIt,hIt),JIn(put,MIt,hIt),JIn(put,gIt,hIt),JIn(put,yIt,hIt),JIn(put,jIt,hIt),JIn(put,kIt,hIt),JIn(put,mIt,hIt),JIn(put,bIt,hIt),JIn(put,wIt,EIt),JIn(put,dIt,EIt),JIn(put,hIt,EIt),JIn(put,MIt,EIt),JIn(put,gIt,EIt),JIn(put,yIt,EIt),JIn(put,jIt,EIt),JIn(put,bIt,EIt),JIn(put,TIt,EIt),JIn(put,kIt,EIt),JIn(put,pIt,EIt),JIn(put,mIt,EIt),JIn(put,dIt,MIt),JIn(put,gIt,MIt),JIn(put,jIt,MIt),JIn(put,mIt,MIt),JIn(put,dIt,gIt),JIn(put,MIt,gIt),JIn(put,jIt,gIt),JIn(put,gIt,gIt),JIn(put,kIt,gIt),JIn(put,wIt,fIt),JIn(put,dIt,fIt),JIn(put,hIt,fIt),JIn(put,EIt,fIt),JIn(put,MIt,fIt),JIn(put,gIt,fIt),JIn(put,yIt,fIt),JIn(put,jIt,fIt),JIn(put,TIt,fIt),JIn(put,bIt,fIt),JIn(put,mIt,fIt),JIn(put,kIt,fIt),JIn(put,vIt,fIt),JIn(put,wIt,TIt),JIn(put,dIt,TIt),JIn(put,hIt,TIt),JIn(put,MIt,TIt),JIn(put,gIt,TIt),JIn(put,yIt,TIt),JIn(put,jIt,TIt),JIn(put,bIt,TIt),JIn(put,mIt,TIt),JIn(put,pIt,TIt),JIn(put,vIt,TIt),JIn(put,dIt,bIt),JIn(put,MIt,bIt),JIn(put,gIt,bIt),JIn(put,jIt,bIt),JIn(put,TIt,bIt),JIn(put,mIt,bIt),JIn(put,kIt,bIt),JIn(put,wIt,lIt),JIn(put,dIt,lIt),JIn(put,hIt,lIt),JIn(put,MIt,lIt),JIn(put,gIt,lIt),JIn(put,yIt,lIt),JIn(put,jIt,lIt),JIn(put,bIt,lIt),JIn(put,mIt,lIt),JIn(put,dIt,kIt),JIn(put,hIt,kIt),JIn(put,EIt,kIt),JIn(put,gIt,kIt),JIn(put,wIt,pIt),JIn(put,dIt,pIt),JIn(put,EIt,pIt),JIn(put,MIt,pIt),JIn(put,gIt,pIt),JIn(put,yIt,pIt),JIn(put,jIt,pIt),JIn(put,jIt,vIt),JIn(put,gIt,vIt),JIn(put,bIt,wIt),JIn(put,bIt,MIt),JIn(put,bIt,hIt),JIn(put,yIt,wIt),JIn(put,yIt,dIt),JIn(put,yIt,EIt)}function iWn(n,t){switch(n.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new zQ(n.b,n.a,t,n.c);case 1:return new LL(n.a,t,Awn(t.Tg(),n.c));case 43:return new xL(n.a,t,Awn(t.Tg(),n.c));case 3:return new $L(n.a,t,Awn(t.Tg(),n.c));case 45:return new NL(n.a,t,Awn(t.Tg(),n.c));case 41:return new y9(BB(Ikn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 50:return new yin(BB(Ikn(n.c),26),n.a,t,Awn(t.Tg(),n.c));case 5:return new iK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 47:return new rK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 7:return new eU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 49:return new eK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 9:return new FL(n.a,t,Awn(t.Tg(),n.c));case 11:return new _L(n.a,t,Awn(t.Tg(),n.c));case 13:return new KL(n.a,t,Awn(t.Tg(),n.c));case 15:return new MH(n.a,t,Awn(t.Tg(),n.c));case 17:return new BL(n.a,t,Awn(t.Tg(),n.c));case 19:return new RL(n.a,t,Awn(t.Tg(),n.c));case 21:return new DL(n.a,t,Awn(t.Tg(),n.c));case 23:return new yH(n.a,t,Awn(t.Tg(),n.c));case 25:return new fK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 27:return new hK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 29:return new oK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 31:return new cK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 33:return new sK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 35:return new uK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 37:return new aK(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 39:return new iU(n.a,t,Awn(t.Tg(),n.c),n.d.n);case 40:return new Ecn(t,Awn(t.Tg(),n.c));default:throw Hp(new dy("Unknown feature style: "+n.e))}}function rWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;switch(OTn(e,"Brandes & Koepf node placement",1),n.a=t,n.c=FFn(t),i=BB(mMn(t,(HXn(),Ngt)),274),b=qy(TD(mMn(t,xgt))),n.d=i==(Bjn(),Qht)&&!b||i==Xht,Jqn(n,t),y=null,k=null,g=null,p=null,lin(4,AVn),d=new J6(4),BB(mMn(t,Ngt),274).g){case 3:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),d.c[d.c.length]=g;break;case 1:p=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),nyt)),d.c[d.c.length]=p;break;case 4:y=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),tyt)),d.c[d.c.length]=y;break;case 2:k=new qKn(t,n.c.d,(oZ(),cyt),(gJ(),tyt)),d.c[d.c.length]=k;break;default:g=new qKn(t,n.c.d,(oZ(),ryt),(gJ(),nyt)),p=new qKn(t,n.c.d,cyt,nyt),y=new qKn(t,n.c.d,ryt,tyt),k=new qKn(t,n.c.d,cyt,tyt),d.c[d.c.length]=y,d.c[d.c.length]=k,d.c[d.c.length]=g,d.c[d.c.length]=p}for(r=new iC(t,n.c),u=new Wb(d);u.a<u.c.c.length;)PXn(r,c=BB(n0(u),180),n.b),WBn(c);for(l=new Jyn(t,n.c),o=new Wb(d);o.a<o.c.c.length;)Hzn(l,c=BB(n0(o),180));if(e.n)for(s=new Wb(d);s.a<s.c.c.length;)OH(e,(c=BB(n0(s),180))+" size is "+v$n(c));if(f=null,n.d&&IBn(t,h=FUn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Wb(d);s.a<s.c.c.length;)IBn(t,c=BB(n0(s),180),e)&&(!f||v$n(f)>v$n(c))&&(f=c);for(!f&&(l1(0,d.c.length),f=BB(d.c[0],180)),w=new Wb(t.b);w.a<w.c.c.length;)for(m=new Wb(BB(n0(w),29).a);m.a<m.c.c.length;)(v=BB(n0(m),10)).n.b=Gy(f.p[v.p])+Gy(f.d[v.p]);for(e.n&&(OH(e,"Chosen node placement: "+f),OH(e,"Blocks: "+xOn(f)),OH(e,"Classes: "+UAn(f,e)),OH(e,"Marked edges: "+n.b)),a=new Wb(d);a.a<a.c.c.length;)(c=BB(n0(a),180)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;zrn(n.c),n.b.a.$b(),HSn(e)}function cWn(n,t,e){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(a=new YT,v=BB(mMn(e,(HXn(),Udt)),103),w=0,Frn(a,(!t.a&&(t.a=new eU(UOt,t,10,11)),t.a));0!=a.b;)s=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33),(GI(ZAn(t,Ldt))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&!qy(TD(ZAn(s,$dt)))&&Ypn(s,(hWn(),wlt),iln(w++)),!qy(TD(ZAn(s,Ggt)))&&(f=0!=(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a).i,b=kTn(s),l=GI(ZAn(s,sgt))===GI((ufn(),pCt)),g=null,(T=!P8(s,(sWn(),eSt))||mK(SD(ZAn(s,eSt)),w1n))&&l&&(f||b)&&(hon(g=kFn(s),Udt,v),Lx(g,gpt)&&My(new uwn(Gy(MD(mMn(g,gpt)))),g),0!=BB(ZAn(s,Fgt),174).gc()&&(h=g,JT(new Rq(null,(!s.c&&(s.c=new eU(XOt,s,9,9)),new w1(s.c,16))),new Xw(h)),mDn(s,g))),m=e,(y=BB(RX(n.a,JJ(s)),10))&&(m=y.e),d=wzn(n,s,m),g&&(d.e=g,g.e=d,Frn(a,(!s.a&&(s.a=new eU(UOt,s,10,11)),s.a))));for(w=0,r5(a,t,a.c.b,a.c);0!=a.b;){for(o=new AL((!(c=BB(0==a.b?null:(Px(0!=a.b),Atn(a,a.a.a)),33)).b&&(c.b=new eU(_Ot,c,12,3)),c.b));o.e!=o.i.gc();)tKn(u=BB(kpn(o),79)),(GI(ZAn(t,Ldt))!==GI((mon(),Nvt))||GI(ZAn(t,Gdt))===GI((Vvn(),Eht))||GI(ZAn(t,Gdt))===GI((Vvn(),kht))||qy(TD(ZAn(t,xdt)))||GI(ZAn(t,Cdt))!==GI((Bfn(),wut)))&&Ypn(u,(hWn(),wlt),iln(w++)),j=PTn(BB(Wtn((!u.b&&(u.b=new hK(KOt,u,4,7)),u.b),0),82)),E=PTn(BB(Wtn((!u.c&&(u.c=new hK(KOt,u,5,8)),u.c),0),82)),qy(TD(ZAn(u,Ggt)))||qy(TD(ZAn(j,Ggt)))||qy(TD(ZAn(E,Ggt)))||(p=c,QIn(u)&&qy(TD(ZAn(j,wgt)))&&qy(TD(ZAn(u,dgt)))||Ctn(E,j)?p=j:Ctn(j,E)&&(p=E),m=e,(y=BB(RX(n.a,p),10))&&(m=y.e),hon(uWn(n,u,p,m),(hWn(),Fft),Lxn(n,u,t,e)));if(l=GI(ZAn(c,sgt))===GI((ufn(),pCt)))for(r=new AL((!c.a&&(c.a=new eU(UOt,c,10,11)),c.a));r.e!=r.i.gc();)T=!P8(i=BB(kpn(r),33),(sWn(),eSt))||mK(SD(ZAn(i,eSt)),w1n),k=GI(ZAn(i,sgt))===GI(pCt),T&&k&&r5(a,i,a.c.b,a.c)}}function aWn(n,t,e,i,r,c){var a,u,o,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-sQn>=-1900?1:0,oO(n,e>=4?Pun(Gk(Qtt,1),sVn,2,6,[fQn,lQn])[a]:Pun(Gk(Qtt,1),sVn,2,6,["BC","AD"])[a]);break;case 121:opn(n,e,i);break;case 77:XKn(n,e,i);break;case 107:Enn(n,0==(u=r.q.getHours())?24:u,e);break;case 83:RLn(n,e,r);break;case 69:o=i.q.getDay(),oO(n,5==e?Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[o]:4==e?Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[o]:Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[o]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[1]):oO(n,Pun(Gk(Qtt,1),sVn,2,6,["AM","PM"])[0]);break;case 104:Enn(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Enn(n,r.q.getHours()%12,e);break;case 72:Enn(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[bQn,wQn,dQn,gQn,pQn,vQn,mQn])[h]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Enn(n,h,1);break;case 76:f=i.q.getMonth(),5==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,[YVn,JVn,ZVn,nQn,tQn,eQn,iQn,rQn,cQn,aQn,uQn,oQn])[f]):3==e?oO(n,Pun(Gk(Qtt,1),sVn,2,6,["Jan","Feb","Mar","Apr",tQn,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Enn(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,oO(n,e<4?Pun(Gk(Qtt,1),sVn,2,6,["Q1","Q2","Q3","Q4"])[l]:Pun(Gk(Qtt,1),sVn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Enn(n,i.q.getDate(),e);break;case 109:Enn(n,r.q.getMinutes(),e);break;case 115:Enn(n,r.q.getSeconds(),e);break;case 122:oO(n,e<4?c.c[0]:c.c[1]);break;case 118:oO(n,c.b);break;case 90:oO(n,e<3?nIn(c):3==e?wIn(c):dIn(c.a));break;default:return!1}return!0}function uWn(n,t,e,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C;if(tKn(t),o=BB(Wtn((!t.b&&(t.b=new hK(KOt,t,4,7)),t.b),0),82),h=BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82),u=PTn(o),s=PTn(h),a=0==(!t.a&&(t.a=new eU(FOt,t,6,6)),t.a).i?null:BB(Wtn((!t.a&&(t.a=new eU(FOt,t,6,6)),t.a),0),202),j=BB(RX(n.a,u),10),S=BB(RX(n.a,s),10),E=null,P=null,cL(o,186)&&(cL(k=BB(RX(n.a,o),299),11)?E=BB(k,11):cL(k,10)&&(j=BB(k,10),E=BB(xq(j.j,0),11))),cL(h,186)&&(cL(M=BB(RX(n.a,h),299),11)?P=BB(M,11):cL(M,10)&&(S=BB(M,10),P=BB(xq(S.j,0),11))),!j||!S)throw Hp(new ck("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(qan(d=new wY,t),hon(d,(hWn(),dlt),t),hon(d,(HXn(),vgt),null),b=BB(mMn(i,Zft),21),j==S&&b.Fc((bDn(),vft)),E||(ain(),y=qvt,T=null,a&&vA(BB(mMn(j,ept),98))&&(Y3(T=new xC(a.j,a.k),XJ(t)),t5(T,e),Ctn(s,u)&&(y=Hvt,UR(T,j.n))),E=dHn(j,T,y,i)),P||(ain(),y=Hvt,C=null,a&&vA(BB(mMn(S,ept),98))&&(Y3(C=new xC(a.b,a.c),XJ(t)),t5(C,e)),P=dHn(S,C,y,vW(S))),SZ(d,E),MZ(d,P),(E.e.c.length>1||E.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((bDn(),bft)),l=new AL((!t.n&&(t.n=new eU(zOt,t,1,7)),t.n));l.e!=l.i.gc();)if(!qy(TD(ZAn(f=BB(kpn(l),137),Ggt)))&&f.a)switch(g=Hhn(f),WB(d.b,g),BB(mMn(g,Ydt),272).g){case 1:case 2:b.Fc((bDn(),fft));break;case 0:b.Fc((bDn(),sft)),hon(g,Ydt,(Rtn(),zPt))}if(c=BB(mMn(i,qdt),314),p=BB(mMn(i,_gt),315),r=c==(Oin(),sht)||p==(Nvn(),pvt),a&&0!=(!a.a&&(a.a=new $L(xOt,a,5)),a.a).i&&r){for(v=qSn(a),w=new km,m=spn(v,0);m.b!=m.d.c;)DH(w,new wA(BB(b3(m),8)));hon(d,glt,w)}return d}function oWn(n){n.gb||(n.gb=!0,n.b=kan(n,0),Rrn(n.b,18),Krn(n.b,19),n.a=kan(n,1),Rrn(n.a,1),Krn(n.a,2),Krn(n.a,3),Krn(n.a,4),Krn(n.a,5),n.o=kan(n,2),Rrn(n.o,8),Rrn(n.o,9),Krn(n.o,10),Krn(n.o,11),Krn(n.o,12),Krn(n.o,13),Krn(n.o,14),Krn(n.o,15),Krn(n.o,16),Krn(n.o,17),Krn(n.o,18),Krn(n.o,19),Krn(n.o,20),Krn(n.o,21),Krn(n.o,22),Krn(n.o,23),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),otn(n.o),n.p=kan(n,3),Rrn(n.p,2),Rrn(n.p,3),Rrn(n.p,4),Rrn(n.p,5),Krn(n.p,6),Krn(n.p,7),otn(n.p),otn(n.p),n.q=kan(n,4),Rrn(n.q,8),n.v=kan(n,5),Krn(n.v,9),otn(n.v),otn(n.v),otn(n.v),n.w=kan(n,6),Rrn(n.w,2),Rrn(n.w,3),Rrn(n.w,4),Krn(n.w,5),n.B=kan(n,7),Krn(n.B,1),otn(n.B),otn(n.B),otn(n.B),n.Q=kan(n,8),Krn(n.Q,0),otn(n.Q),n.R=kan(n,9),Rrn(n.R,1),n.S=kan(n,10),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),otn(n.S),n.T=kan(n,11),Krn(n.T,10),Krn(n.T,11),Krn(n.T,12),Krn(n.T,13),Krn(n.T,14),otn(n.T),otn(n.T),n.U=kan(n,12),Rrn(n.U,2),Rrn(n.U,3),Krn(n.U,4),Krn(n.U,5),Krn(n.U,6),Krn(n.U,7),otn(n.U),n.V=kan(n,13),Krn(n.V,10),n.W=kan(n,14),Rrn(n.W,18),Rrn(n.W,19),Rrn(n.W,20),Krn(n.W,21),Krn(n.W,22),Krn(n.W,23),n.bb=kan(n,15),Rrn(n.bb,10),Rrn(n.bb,11),Rrn(n.bb,12),Rrn(n.bb,13),Rrn(n.bb,14),Rrn(n.bb,15),Rrn(n.bb,16),Krn(n.bb,17),otn(n.bb),otn(n.bb),n.eb=kan(n,16),Rrn(n.eb,2),Rrn(n.eb,3),Rrn(n.eb,4),Rrn(n.eb,5),Rrn(n.eb,6),Rrn(n.eb,7),Krn(n.eb,8),Krn(n.eb,9),n.ab=kan(n,17),Rrn(n.ab,0),Rrn(n.ab,1),n.H=kan(n,18),Krn(n.H,0),Krn(n.H,1),Krn(n.H,2),Krn(n.H,3),Krn(n.H,4),Krn(n.H,5),otn(n.H),n.db=kan(n,19),Krn(n.db,2),n.c=jan(n,20),n.d=jan(n,21),n.e=jan(n,22),n.f=jan(n,23),n.i=jan(n,24),n.g=jan(n,25),n.j=jan(n,26),n.k=jan(n,27),n.n=jan(n,28),n.r=jan(n,29),n.s=jan(n,30),n.t=jan(n,31),n.u=jan(n,32),n.fb=jan(n,33),n.A=jan(n,34),n.C=jan(n,35),n.D=jan(n,36),n.F=jan(n,37),n.G=jan(n,38),n.I=jan(n,39),n.J=jan(n,40),n.L=jan(n,41),n.M=jan(n,42),n.N=jan(n,43),n.O=jan(n,44),n.P=jan(n,45),n.X=jan(n,46),n.Y=jan(n,47),n.Z=jan(n,48),n.$=jan(n,49),n._=jan(n,50),n.cb=jan(n,51),n.K=jan(n,52))}function sWn(){var n,t;sWn=O,eSt=new up(w5n),mPt=new up(d5n),wvn(),iSt=new $O(W2n,rSt=CMt),new $p,cSt=new $O(VJn,null),aSt=new up(g5n),wEn(),fSt=EG(ZMt,Pun(Gk(qPt,1),$Vn,291,0,[VMt])),hSt=new $O(u3n,fSt),lSt=new $O(X2n,(hN(),!1)),Ffn(),bSt=new $O(J2n,wSt=BPt),Mbn(),vSt=new $O(y2n,mSt=ZPt),jSt=new $O(A4n,!1),ufn(),ESt=new $O(d2n,TSt=vCt),WSt=new WA(12),XSt=new $O(QJn,WSt),CSt=new $O(jZn,!1),ISt=new $O(m3n,!1),USt=new $O(MZn,!1),QEn(),uPt=new $O(EZn,oPt=YCt),gPt=new up(g3n),pPt=new up(pZn),vPt=new up(yZn),kPt=new up(kZn),ASt=new km,OSt=new $O(o3n,ASt),sSt=new $O(f3n,!1),MSt=new $O(l3n,!1),new up(p5n),LSt=new lm,$St=new $O(p3n,LSt),zSt=new $O(z2n,!1),new $p,yPt=new $O(v5n,1),new $O(m5n,!0),iln(0),new $O(y5n,iln(100)),new $O(k5n,!1),iln(0),new $O(j5n,iln(4e3)),iln(0),new $O(E5n,iln(400)),new $O(T5n,!1),new $O(M5n,!1),new $O(S5n,!0),new $O(P5n,!1),Fwn(),uSt=new $O(b5n,oSt=eOt),jPt=new $O(L2n,10),EPt=new $O(N2n,10),TPt=new $O(XJn,20),MPt=new $O(x2n,10),SPt=new $O(mZn,2),PPt=new $O(D2n,10),IPt=new $O(R2n,0),OPt=new $O(F2n,5),APt=new $O(K2n,1),$Pt=new $O(_2n,1),LPt=new $O(vZn,20),NPt=new $O(B2n,10),RPt=new $O(H2n,10),CPt=new up(q2n),DPt=new lA,xPt=new $O(v3n,DPt),YSt=new up(d3n),VSt=new $O(w3n,QSt=!1),xSt=new WA(5),NSt=new $O(Z2n,xSt),n$n(),t=BB(Vj(GCt),9),RSt=new YK(t,BB(SR(t,t.length),9),0),DSt=new $O(CZn,RSt),cpn(),ZSt=new $O(e3n,nPt=BCt),ePt=new up(i3n),iPt=new up(r3n),rPt=new up(c3n),tPt=new up(a3n),n=BB(Vj(YIt),9),_St=new YK(n,BB(SR(n,n.length),9),0),KSt=new $O(PZn,_St),GSt=nbn((n_n(),GIt)),qSt=new $O(SZn,GSt),HSt=new xC(0,0),BSt=new $O(BZn,HSt),FSt=new $O(Y2n,!1),Rtn(),gSt=new $O(s3n,pSt=zPt),dSt=new $O(TZn,!1),new up(C5n),iln(1),new $O(I5n,null),cPt=new up(b3n),sPt=new up(h3n),kUn(),wPt=new $O(U2n,dPt=PIt),aPt=new up(G2n),lIn(),lPt=nbn(rIt),fPt=new $O(IZn,lPt),hPt=new $O(n3n,!1),bPt=new $O(t3n,!0),SSt=new $O(V2n,!1),PSt=new $O(Q2n,!1),ySt=new $O(WJn,1),nMn(),new $O(O5n,kSt=aCt),JSt=!0}function hWn(){var n,t;hWn=O,dlt=new up(OZn),Fft=new up("coordinateOrigin"),Mlt=new up("processors"),_ft=new iR("compoundNode",(hN(),!1)),elt=new iR("insideConnections",!1),glt=new up("originalBendpoints"),plt=new up("originalDummyNodePosition"),vlt=new up("originalLabelEdge"),Plt=new up("representedLabels"),zft=new up("endLabels"),Uft=new up("endLabel.origin"),ult=new iR("labelSide",(Xyn(),MCt)),blt=new iR("maxEdgeThickness",0),Clt=new iR("reversed",!1),Slt=new up(AZn),hlt=new iR("longEdgeSource",null),flt=new iR("longEdgeTarget",null),slt=new iR("longEdgeHasLabelDummies",!1),olt=new iR("longEdgeBeforeLabelDummy",!1),Gft=new iR("edgeConstraint",(Jun(),Aht)),rlt=new up("inLayerLayoutUnit"),ilt=new iR("inLayerConstraint",(z7(),Pft)),clt=new iR("inLayerSuccessorConstraint",new Np),alt=new iR("inLayerSuccessorConstraintBetweenNonDummies",!1),Elt=new up("portDummy"),Bft=new iR("crossingHint",iln(0)),Zft=new iR("graphProperties",new YK(t=BB(Vj(Tft),9),BB(SR(t,t.length),9),0)),Qft=new iR("externalPortSide",(kUn(),PIt)),Yft=new iR("externalPortSize",new Gj),Wft=new up("externalPortReplacedDummies"),Vft=new up("externalPortReplacedDummy"),Xft=new iR("externalPortConnections",new YK(n=BB(Vj(FIt),9),BB(SR(n,n.length),9),0)),Tlt=new iR(dJn,0),xft=new up("barycenterAssociates"),Klt=new up("TopSideComments"),Dft=new up("BottomSideComments"),Kft=new up("CommentConnectionPort"),tlt=new iR("inputCollect",!1),klt=new iR("outputCollect",!1),qft=new iR("cyclic",!1),Hft=new up("crossHierarchyMap"),Rlt=new up("targetOffset"),new iR("splineLabelSize",new Gj),Alt=new up("spacings"),jlt=new iR("partitionConstraint",!1),Rft=new up("breakingPoint.info"),xlt=new up("splines.survivingEdge"),Nlt=new up("splines.route.start"),$lt=new up("splines.edgeChain"),ylt=new up("originalPortConstraints"),Olt=new up("selfLoopHolder"),Llt=new up("splines.nsPortY"),wlt=new up("modelOrder"),llt=new up("longEdgeTargetNode"),Jft=new iR(z1n,!1),Ilt=new iR(z1n,!1),nlt=new up("layerConstraints.hiddenNodes"),mlt=new up("layerConstraints.opposidePort"),Dlt=new up("targetNode.modelOrder")}function fWn(){fWn=O,_nn(),Sbt=new $O(U1n,Pbt=Sht),Gbt=new $O(X1n,(hN(),!1)),z2(),Vbt=new $O(W1n,Qbt=Aft),wwt=new $O(V1n,!1),dwt=new $O(Q1n,!0),Ult=new $O(Y1n,!1),U7(),Nwt=new $O(J1n,xwt=Kvt),iln(1),qwt=new $O(Z1n,iln(7)),Gwt=new $O(n0n,!1),zbt=new $O(t0n,!1),Vvn(),Tbt=new $O(e0n,Mbt=yht),TTn(),lwt=new $O(i0n,bwt=tvt),Tbn(),ewt=new $O(r0n,iwt=qlt),iln(-1),twt=new $O(c0n,iln(-1)),iln(-1),rwt=new $O(a0n,iln(-1)),iln(-1),cwt=new $O(u0n,iln(4)),iln(-1),uwt=new $O(o0n,iln(2)),sNn(),hwt=new $O(s0n,fwt=Ivt),iln(0),swt=new $O(h0n,iln(0)),Zbt=new $O(f0n,iln(DWn)),Oin(),jbt=new $O(l0n,Ebt=hht),ubt=new $O(b0n,!1),gbt=new $O(w0n,.1),ybt=new $O(d0n,!1),iln(-1),vbt=new $O(g0n,iln(-1)),iln(-1),mbt=new $O(p0n,iln(-1)),iln(0),obt=new $O(v0n,iln(40)),Kan(),bbt=new $O(m0n,wbt=Eft),sbt=new $O(y0n,hbt=kft),Nvn(),$wt=new $O(k0n,Lwt=gvt),jwt=new up(j0n),g7(),gwt=new $O(E0n,pwt=qht),Bjn(),mwt=new $O(T0n,ywt=Qht),new $p,Mwt=new $O(M0n,.3),Pwt=new up(S0n),bvn(),Cwt=new $O(P0n,Iwt=lvt),Hcn(),Nbt=new $O(C0n,xbt=Wvt),A6(),Dbt=new $O(I0n,Rbt=Zvt),Usn(),Kbt=new $O(O0n,_bt=rmt),Bbt=new $O(A0n,.2),$bt=new $O($0n,2),_wt=new $O(L0n,null),Bwt=new $O(N0n,10),Fwt=new $O(x0n,10),Hwt=new $O(D0n,20),iln(0),Dwt=new $O(R0n,iln(0)),iln(0),Rwt=new $O(K0n,iln(0)),iln(0),Kwt=new $O(_0n,iln(0)),Xlt=new $O(F0n,!1),JMn(),Qlt=new $O(B0n,Ylt=cft),V8(),Wlt=new $O(H0n,Vlt=aht),Xbt=new $O(q0n,!1),iln(0),Ubt=new $O(G0n,iln(16)),iln(0),Wbt=new $O(z0n,iln(5)),$un(),ldt=new $O(U0n,bdt=bmt),zwt=new $O(X0n,10),Wwt=new $O(W0n,1),uin(),edt=new $O(V0n,idt=ght),Ywt=new up(Q0n),ndt=iln(1),iln(0),Zwt=new $O(Y0n,ndt),dcn(),pdt=new $O(J0n,vdt=umt),wdt=new up(Z0n),odt=new $O(n2n,!0),adt=new $O(t2n,2),hdt=new $O(e2n,!0),gSn(),Obt=new $O(i2n,Abt=_ht),$Pn(),Cbt=new $O(r2n,Ibt=Zst),mon(),cbt=new $O(c2n,abt=Nvt),rbt=new $O(a2n,!1),Bfn(),Jlt=new $O(u2n,Zlt=wut),Mhn(),ebt=new $O(o2n,ibt=cvt),nbt=new $O(s2n,0),tbt=new $O(h2n,0),Jbt=jht,Ybt=sht,awt=nvt,owt=nvt,nwt=Ypt,ufn(),pbt=pCt,kbt=hht,dbt=hht,fbt=hht,lbt=pCt,Ewt=mvt,Twt=gvt,vwt=gvt,kwt=gvt,Swt=vvt,Awt=mvt,Owt=mvt,Mbn(),Fbt=JPt,Hbt=JPt,qbt=rmt,Lbt=YPt,Uwt=wmt,Xwt=lmt,Vwt=wmt,Qwt=lmt,rdt=wmt,cdt=lmt,Jwt=dht,tdt=ght,mdt=wmt,ydt=lmt,ddt=wmt,gdt=lmt,sdt=lmt,udt=lmt,fdt=lmt}function lWn(){lWn=O,rot=new nP("DIRECTION_PREPROCESSOR",0),tot=new nP("COMMENT_PREPROCESSOR",1),cot=new nP("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),kot=new nP("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Fot=new nP("PARTITION_PREPROCESSOR",4),Mot=new nP("LABEL_DUMMY_INSERTER",5),Uot=new nP("SELF_LOOP_PREPROCESSOR",6),Oot=new nP("LAYER_CONSTRAINT_PREPROCESSOR",7),Kot=new nP("PARTITION_MIDPROCESSOR",8),got=new nP("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),Not=new nP("NODE_PROMOTION",10),Iot=new nP("LAYER_CONSTRAINT_POSTPROCESSOR",11),_ot=new nP("PARTITION_POSTPROCESSOR",12),lot=new nP("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Wot=new nP("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),Vut=new nP("BREAKING_POINT_INSERTER",15),Lot=new nP("LONG_EDGE_SPLITTER",16),Hot=new nP("PORT_SIDE_PROCESSOR",17),jot=new nP("INVERTED_PORT_PROCESSOR",18),Bot=new nP("PORT_LIST_SORTER",19),Qot=new nP("SORT_BY_INPUT_ORDER_OF_MODEL",20),Dot=new nP("NORTH_SOUTH_PORT_PREPROCESSOR",21),Qut=new nP("BREAKING_POINT_PROCESSOR",22),Rot=new nP(E1n,23),Yot=new nP(T1n,24),Got=new nP("SELF_LOOP_PORT_RESTORER",25),Vot=new nP("SINGLE_EDGE_GRAPH_WRAPPER",26),Eot=new nP("IN_LAYER_CONSTRAINT_PROCESSOR",27),sot=new nP("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),Tot=new nP("LABEL_AND_NODE_SIZE_PROCESSOR",29),yot=new nP("INNERMOST_NODE_MARGIN_CALCULATOR",30),Xot=new nP("SELF_LOOP_ROUTER",31),Zut=new nP("COMMENT_NODE_MARGIN_CALCULATOR",32),uot=new nP("END_LABEL_PREPROCESSOR",33),Pot=new nP("LABEL_DUMMY_SWITCHER",34),Jut=new nP("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),Cot=new nP("LABEL_SIDE_SELECTOR",36),vot=new nP("HYPEREDGE_DUMMY_MERGER",37),bot=new nP("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),Aot=new nP("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),dot=new nP("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),eot=new nP("CONSTRAINTS_POSTPROCESSOR",41),not=new nP("COMMENT_POSTPROCESSOR",42),mot=new nP("HYPERNODE_PROCESSOR",43),wot=new nP("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),$ot=new nP("LONG_EDGE_JOINER",45),zot=new nP("SELF_LOOP_POSTPROCESSOR",46),Yut=new nP("BREAKING_POINT_REMOVER",47),xot=new nP("NORTH_SOUTH_PORT_POSTPROCESSOR",48),pot=new nP("HORIZONTAL_COMPACTOR",49),Sot=new nP("LABEL_DUMMY_REMOVER",50),hot=new nP("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),oot=new nP("END_LABEL_SORTER",52),qot=new nP("REVERSED_EDGE_RESTORER",53),aot=new nP("END_LABEL_POSTPROCESSOR",54),fot=new nP("HIERARCHICAL_NODE_RESIZER",55),iot=new nP("DIRECTION_POSTPROCESSOR",56)}function bWn(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T,M,S,P,C,I,O,A,$,L,N,x,D,R,K,_,F,B,H,q,G,z,U,X,W,V,Q,Y,J,Z,nn,tn,en,rn,cn,an,un,on;for(J=0,L=0,D=(O=t).length;L<D;++L)for(G=new Wb((C=O[L]).j);G.a<G.c.c.length;){for(U=0,o=new Wb((q=BB(n0(G),11)).g);o.a<o.c.c.length;)u=BB(n0(o),17),C.c!=u.d.i.c&&++U;U>0&&(n.a[q.p]=J++)}for(rn=0,N=0,R=(A=i).length;N<R;++N){for(K=0,G=new Wb((C=A[N]).j);G.a<G.c.c.length&&(q=BB(n0(G),11)).j==(kUn(),sIt);)for(o=new Wb(q.e);o.a<o.c.c.length;)if(u=BB(n0(o),17),C.c!=u.c.i.c){++K;break}for(F=0,X=new M2(C.j,C.j.c.length);X.b>0;){for(Px(X.b>0),U=0,o=new Wb((q=BB(X.a.Xb(X.c=--X.b),11)).e);o.a<o.c.c.length;)u=BB(n0(o),17),C.c!=u.c.i.c&&++U;U>0&&(q.j==(kUn(),sIt)?(n.a[q.p]=rn,++rn):(n.a[q.p]=rn+K+F,++F))}rn+=F}for(z=new xp,d=new fA,$=0,x=(I=t).length;$<x;++$)for(tn=new Wb((C=I[$]).j);tn.a<tn.c.c.length;)for(o=new Wb((nn=BB(n0(tn),11)).g);o.a<o.c.c.length;)if(an=(u=BB(n0(o),17)).d,C.c!=an.i.c)if(Z=BB(qI(AY(z.f,nn)),467),cn=BB(qI(AY(z.f,an)),467),Z||cn)if(Z)if(cn)if(Z==cn)WB(Z.a,u);else{for(WB(Z.a,u),H=new Wb(cn.d);H.a<H.c.c.length;)B=BB(n0(H),11),jCn(z.f,B,Z);gun(Z.a,cn.a),gun(Z.d,cn.d),d.a.Bc(cn)}else WB(Z.a,u),WB(Z.d,an),jCn(z.f,an,Z);else WB(cn.a,u),WB(cn.d,nn),jCn(z.f,nn,cn);else w=new DR,d.a.zc(w,d),WB(w.a,u),WB(w.d,nn),jCn(z.f,nn,w),WB(w.d,an),jCn(z.f,an,w);for(g=BB(Emn(d,x8(Fmt,{3:1,4:1,5:1,1946:1},467,d.a.gc(),0,1)),1946),P=t[0].c,Y=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=J,h.f=rn,G=new Wb(h.d);G.a<G.c.c.length;)q=BB(n0(G),11),W=n.a[q.p],q.i.c==P?(W<h.e&&(h.e=W),W>h.b&&(h.b=W)):q.i.c==Y&&(W<h.f&&(h.f=W),W>h.c&&(h.c=W));for(z9(g,0,g.length,null),en=x8(ANt,hQn,25,g.length,15,1),r=x8(ANt,hQn,25,rn+1,15,1),v=0;v<g.length;v++)en[v]=g[v].f,r[en[v]]=1;for(a=0,m=0;m<r.length;m++)1==r[m]?r[m]=a:--a;for(V=0,y=0;y<en.length;y++)en[y]+=r[en[y]],V=e.Math.max(V,en[y]+1);for(s=1;s<V;)s*=2;for(on=2*s-1,s-=1,un=x8(ANt,hQn,25,on,15,1),c=0,M=0;M<en.length;M++)for(++un[T=en[M]+s];T>0;)T%2>0&&(c+=un[T+1]),++un[T=(T-1)/2|0];for(S=x8(qmt,HWn,362,2*g.length,0,1),k=0;k<g.length;k++)S[2*k]=new qV(g[k],g[k].e,g[k].b,(Q4(),Hmt)),S[2*k+1]=new qV(g[k],g[k].b,g[k].e,Bmt);for(z9(S,0,S.length,null),_=0,j=0;j<S.length;j++)switch(S[j].d.g){case 0:++_;break;case 1:c+=--_}for(Q=x8(qmt,HWn,362,2*g.length,0,1),E=0;E<g.length;E++)Q[2*E]=new qV(g[E],g[E].f,g[E].c,(Q4(),Hmt)),Q[2*E+1]=new qV(g[E],g[E].c,g[E].f,Bmt);for(z9(Q,0,Q.length,null),_=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++_;break;case 1:c+=--_}return c}function wWn(){wWn=O,sNt=new Ap(7),hNt=new oG(8,94),new oG(8,64),fNt=new oG(8,36),pNt=new oG(8,65),vNt=new oG(8,122),mNt=new oG(8,90),jNt=new oG(8,98),dNt=new oG(8,66),yNt=new oG(8,60),ENt=new oG(8,62),oNt=new Ap(11),Yxn(uNt=new M0(4),48,57),Yxn(kNt=new M0(4),48,57),Yxn(kNt,65,90),Yxn(kNt,95,95),Yxn(kNt,97,122),Yxn(gNt=new M0(4),9,9),Yxn(gNt,10,10),Yxn(gNt,12,12),Yxn(gNt,13,13),Yxn(gNt,32,32),lNt=$Fn(uNt),wNt=$Fn(kNt),bNt=$Fn(gNt),iNt=new xp,rNt=new xp,cNt=Pun(Gk(Qtt,1),sVn,2,6,["Cn","Lu","Ll","Lt","Lm","Lo","Mn","Me","Mc","Nd","Nl","No","Zs","Zl","Zp","Cc","Cf",null,"Co","Cs","Pd","Ps","Pe","Pc","Po","Sm","Sc","Sk","So","Pi","Pf","L","M","N","Z","C","P","S"]),eNt=Pun(Gk(Qtt,1),sVn,2,6,["Basic Latin","Latin-1 Supplement","Latin Extended-A","Latin Extended-B","IPA Extensions","Spacing Modifier Letters","Combining Diacritical Marks","Greek","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul Jamo","Ethiopic","Cherokee","Unified Canadian Aboriginal Syllabics","Ogham","Runic","Khmer","Mongolian","Latin Extended Additional","Greek Extended","General Punctuation","Superscripts and Subscripts","Currency Symbols","Combining Marks for Symbols","Letterlike Symbols","Number Forms","Arrows","Mathematical Operators","Miscellaneous Technical","Control Pictures","Optical Character Recognition","Enclosed Alphanumerics","Box Drawing","Block Elements","Geometric Shapes","Miscellaneous Symbols","Dingbats","Braille Patterns","CJK Radicals Supplement","Kangxi Radicals","Ideographic Description Characters","CJK Symbols and Punctuation","Hiragana","Katakana","Bopomofo","Hangul Compatibility Jamo","Kanbun","Bopomofo Extended","Enclosed CJK Letters and Months","CJK Compatibility","CJK Unified Ideographs Extension A","CJK Unified Ideographs","Yi Syllables","Yi Radicals","Hangul Syllables",gnt,"CJK Compatibility Ideographs","Alphabetic Presentation Forms","Arabic Presentation Forms-A","Combining Half Marks","CJK Compatibility Forms","Small Form Variants","Arabic Presentation Forms-B","Specials","Halfwidth and Fullwidth Forms","Old Italic","Gothic","Deseret","Byzantine Musical Symbols","Musical Symbols","Mathematical Alphanumeric Symbols","CJK Unified Ideographs Extension B","CJK Compatibility Ideographs Supplement","Tags"]),aNt=Pun(Gk(ANt,1),hQn,25,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function dWn(){dWn=O,Prt=new ocn("OUT_T_L",0,(J9(),Yit),(G7(),irt),(Dtn(),Git),Git,Pun(Gk(Dnt,1),HWn,21,0,[EG((n$n(),LCt),Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt]))])),Srt=new ocn("OUT_T_C",1,Qit,irt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt,OCt]))])),Crt=new ocn("OUT_T_R",2,Jit,irt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt]))])),vrt=new ocn("OUT_B_L",3,Yit,crt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt]))])),prt=new ocn("OUT_B_C",4,Qit,crt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt,OCt]))])),mrt=new ocn("OUT_B_R",5,Jit,crt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt]))])),jrt=new ocn("OUT_L_T",6,Jit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,DCt,OCt]))])),krt=new ocn("OUT_L_C",7,Jit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,xCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,xCt,OCt]))])),yrt=new ocn("OUT_L_B",8,Jit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ICt,NCt,OCt]))])),Mrt=new ocn("OUT_R_T",9,Yit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,DCt,OCt]))])),Trt=new ocn("OUT_R_C",10,Yit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,xCt])),EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,xCt,OCt]))])),Ert=new ocn("OUT_R_B",11,Yit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG(LCt,Pun(Gk(GCt,1),$Vn,93,0,[ACt,NCt,OCt]))])),drt=new ocn("IN_T_L",12,Yit,crt,Git,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ICt,OCt]))])),wrt=new ocn("IN_T_C",13,Qit,crt,Git,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,CCt,OCt]))])),grt=new ocn("IN_T_R",14,Jit,crt,Git,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[DCt,ACt,OCt]))])),lrt=new ocn("IN_C_L",15,Yit,rrt,zit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ICt,OCt]))])),frt=new ocn("IN_C_C",16,Qit,rrt,zit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,CCt,OCt]))])),brt=new ocn("IN_C_R",17,Jit,rrt,zit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[xCt,ACt,OCt]))])),srt=new ocn("IN_B_L",18,Yit,irt,Uit,Git,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ICt,OCt]))])),ort=new ocn("IN_B_C",19,Qit,irt,Uit,zit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,CCt,OCt]))])),hrt=new ocn("IN_B_R",20,Jit,irt,Uit,Uit,Pun(Gk(Dnt,1),HWn,21,0,[EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt])),EG($Ct,Pun(Gk(GCt,1),$Vn,93,0,[NCt,ACt,OCt]))])),Irt=new ocn(hJn,21,null,null,null,null,Pun(Gk(Dnt,1),HWn,21,0,[]))}function gWn(){gWn=O,i$t=(QX(),t$t).b,BB(Wtn(QQ(t$t.b),0),34),BB(Wtn(QQ(t$t.b),1),18),e$t=t$t.a,BB(Wtn(QQ(t$t.a),0),34),BB(Wtn(QQ(t$t.a),1),18),BB(Wtn(QQ(t$t.a),2),18),BB(Wtn(QQ(t$t.a),3),18),BB(Wtn(QQ(t$t.a),4),18),r$t=t$t.o,BB(Wtn(QQ(t$t.o),0),34),BB(Wtn(QQ(t$t.o),1),34),a$t=BB(Wtn(QQ(t$t.o),2),18),BB(Wtn(QQ(t$t.o),3),18),BB(Wtn(QQ(t$t.o),4),18),BB(Wtn(QQ(t$t.o),5),18),BB(Wtn(QQ(t$t.o),6),18),BB(Wtn(QQ(t$t.o),7),18),BB(Wtn(QQ(t$t.o),8),18),BB(Wtn(QQ(t$t.o),9),18),BB(Wtn(QQ(t$t.o),10),18),BB(Wtn(QQ(t$t.o),11),18),BB(Wtn(QQ(t$t.o),12),18),BB(Wtn(QQ(t$t.o),13),18),BB(Wtn(QQ(t$t.o),14),18),BB(Wtn(QQ(t$t.o),15),18),BB(Wtn(VQ(t$t.o),0),59),BB(Wtn(VQ(t$t.o),1),59),BB(Wtn(VQ(t$t.o),2),59),BB(Wtn(VQ(t$t.o),3),59),BB(Wtn(VQ(t$t.o),4),59),BB(Wtn(VQ(t$t.o),5),59),BB(Wtn(VQ(t$t.o),6),59),BB(Wtn(VQ(t$t.o),7),59),BB(Wtn(VQ(t$t.o),8),59),BB(Wtn(VQ(t$t.o),9),59),c$t=t$t.p,BB(Wtn(QQ(t$t.p),0),34),BB(Wtn(QQ(t$t.p),1),34),BB(Wtn(QQ(t$t.p),2),34),BB(Wtn(QQ(t$t.p),3),34),BB(Wtn(QQ(t$t.p),4),18),BB(Wtn(QQ(t$t.p),5),18),BB(Wtn(VQ(t$t.p),0),59),BB(Wtn(VQ(t$t.p),1),59),u$t=t$t.q,BB(Wtn(QQ(t$t.q),0),34),o$t=t$t.v,BB(Wtn(QQ(t$t.v),0),18),BB(Wtn(VQ(t$t.v),0),59),BB(Wtn(VQ(t$t.v),1),59),BB(Wtn(VQ(t$t.v),2),59),s$t=t$t.w,BB(Wtn(QQ(t$t.w),0),34),BB(Wtn(QQ(t$t.w),1),34),BB(Wtn(QQ(t$t.w),2),34),BB(Wtn(QQ(t$t.w),3),18),h$t=t$t.B,BB(Wtn(QQ(t$t.B),0),18),BB(Wtn(VQ(t$t.B),0),59),BB(Wtn(VQ(t$t.B),1),59),BB(Wtn(VQ(t$t.B),2),59),b$t=t$t.Q,BB(Wtn(QQ(t$t.Q),0),18),BB(Wtn(VQ(t$t.Q),0),59),w$t=t$t.R,BB(Wtn(QQ(t$t.R),0),34),d$t=t$t.S,BB(Wtn(VQ(t$t.S),0),59),BB(Wtn(VQ(t$t.S),1),59),BB(Wtn(VQ(t$t.S),2),59),BB(Wtn(VQ(t$t.S),3),59),BB(Wtn(VQ(t$t.S),4),59),BB(Wtn(VQ(t$t.S),5),59),BB(Wtn(VQ(t$t.S),6),59),BB(Wtn(VQ(t$t.S),7),59),BB(Wtn(VQ(t$t.S),8),59),BB(Wtn(VQ(t$t.S),9),59),BB(Wtn(VQ(t$t.S),10),59),BB(Wtn(VQ(t$t.S),11),59),BB(Wtn(VQ(t$t.S),12),59),BB(Wtn(VQ(t$t.S),13),59),BB(Wtn(VQ(t$t.S),14),59),g$t=t$t.T,BB(Wtn(QQ(t$t.T),0),18),BB(Wtn(QQ(t$t.T),2),18),p$t=BB(Wtn(QQ(t$t.T),3),18),BB(Wtn(QQ(t$t.T),4),18),BB(Wtn(VQ(t$t.T),0),59),BB(Wtn(VQ(t$t.T),1),59),BB(Wtn(QQ(t$t.T),1),18),v$t=t$t.U,BB(Wtn(QQ(t$t.U),0),34),BB(Wtn(QQ(t$t.U),1),34),BB(Wtn(QQ(t$t.U),2),18),BB(Wtn(QQ(t$t.U),3),18),BB(Wtn(QQ(t$t.U),4),18),BB(Wtn(QQ(t$t.U),5),18),BB(Wtn(VQ(t$t.U),0),59),m$t=t$t.V,BB(Wtn(QQ(t$t.V),0),18),y$t=t$t.W,BB(Wtn(QQ(t$t.W),0),34),BB(Wtn(QQ(t$t.W),1),34),BB(Wtn(QQ(t$t.W),2),34),BB(Wtn(QQ(t$t.W),3),18),BB(Wtn(QQ(t$t.W),4),18),BB(Wtn(QQ(t$t.W),5),18),j$t=t$t.bb,BB(Wtn(QQ(t$t.bb),0),34),BB(Wtn(QQ(t$t.bb),1),34),BB(Wtn(QQ(t$t.bb),2),34),BB(Wtn(QQ(t$t.bb),3),34),BB(Wtn(QQ(t$t.bb),4),34),BB(Wtn(QQ(t$t.bb),5),34),BB(Wtn(QQ(t$t.bb),6),34),BB(Wtn(QQ(t$t.bb),7),18),BB(Wtn(VQ(t$t.bb),0),59),BB(Wtn(VQ(t$t.bb),1),59),E$t=t$t.eb,BB(Wtn(QQ(t$t.eb),0),34),BB(Wtn(QQ(t$t.eb),1),34),BB(Wtn(QQ(t$t.eb),2),34),BB(Wtn(QQ(t$t.eb),3),34),BB(Wtn(QQ(t$t.eb),4),34),BB(Wtn(QQ(t$t.eb),5),34),BB(Wtn(QQ(t$t.eb),6),18),BB(Wtn(QQ(t$t.eb),7),18),k$t=t$t.ab,BB(Wtn(QQ(t$t.ab),0),34),BB(Wtn(QQ(t$t.ab),1),34),f$t=t$t.H,BB(Wtn(QQ(t$t.H),0),18),BB(Wtn(QQ(t$t.H),1),18),BB(Wtn(QQ(t$t.H),2),18),BB(Wtn(QQ(t$t.H),3),18),BB(Wtn(QQ(t$t.H),4),18),BB(Wtn(QQ(t$t.H),5),18),BB(Wtn(VQ(t$t.H),0),59),T$t=t$t.db,BB(Wtn(QQ(t$t.db),0),18),l$t=t$t.M}function pWn(n){var t;n.O||(n.O=!0,Nrn(n,"type"),xrn(n,"ecore.xml.type"),Drn(n,S7n),t=BB($$n((WM(),zAt),S7n),1945),f9(kY(n.fb),n.b),z0(n.b,wLt,"AnyType",!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.D,K9n,null,0,-1,wLt,!1,!1,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.D,"any",null,0,-1,wLt,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),2),34),n.wb.D,"anyAttribute",null,0,-1,wLt,!1,!1,!0,!1,!1,!1),z0(n.bb,zLt,A7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.gb,"data",null,0,1,zLt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.gb,Y6n,null,1,1,zLt,!1,!1,!0,!1,!0,!1),z0(n.fb,ULt,$7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.fb),0),34),t.gb,"rawValue",null,0,1,ULt,!0,!0,!0,!1,!0,!0),ucn(BB(Wtn(QQ(n.fb),1),34),t.a,E6n,null,0,1,ULt,!0,!0,!0,!1,!0,!0),Myn(BB(Wtn(QQ(n.fb),2),18),n.wb.q,null,"instanceType",1,1,ULt,!1,!1,!0,!1,!1,!1,!1),z0(n.qb,XLt,L7n,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),0),34),n.wb.D,K9n,null,0,-1,null,!1,!1,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),1),18),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.qb),2),18),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.qb),3),34),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),4),34),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),Myn(BB(Wtn(QQ(n.qb),5),18),n.bb,null,cnt,0,-2,null,!0,!0,!0,!0,!1,!1,!0),ucn(BB(Wtn(QQ(n.qb),6),34),n.gb,O6n,null,0,-2,null,!0,!0,!0,!1,!1,!0),dV(n.a,Ant,"AnySimpleType",!0),dV(n.c,Qtt,"AnyURI",!0),dV(n.d,Gk(NNt,1),"Base64Binary",!0),dV(n.e,$Nt,"Boolean",!0),dV(n.f,ktt,"BooleanObject",!0),dV(n.g,NNt,"Byte",!0),dV(n.i,Ttt,"ByteObject",!0),dV(n.j,Qtt,"Date",!0),dV(n.k,Qtt,"DateTime",!0),dV(n.n,iet,"Decimal",!0),dV(n.o,xNt,"Double",!0),dV(n.p,Ptt,"DoubleObject",!0),dV(n.q,Qtt,"Duration",!0),dV(n.s,Rnt,"ENTITIES",!0),dV(n.r,Rnt,"ENTITIESBase",!0),dV(n.t,Qtt,_7n,!0),dV(n.u,DNt,"Float",!0),dV(n.v,Ctt,"FloatObject",!0),dV(n.w,Qtt,"GDay",!0),dV(n.B,Qtt,"GMonth",!0),dV(n.A,Qtt,"GMonthDay",!0),dV(n.C,Qtt,"GYear",!0),dV(n.D,Qtt,"GYearMonth",!0),dV(n.F,Gk(NNt,1),"HexBinary",!0),dV(n.G,Qtt,"ID",!0),dV(n.H,Qtt,"IDREF",!0),dV(n.J,Rnt,"IDREFS",!0),dV(n.I,Rnt,"IDREFSBase",!0),dV(n.K,ANt,"Int",!0),dV(n.M,oet,"Integer",!0),dV(n.L,Att,"IntObject",!0),dV(n.P,Qtt,"Language",!0),dV(n.Q,LNt,"Long",!0),dV(n.R,Rtt,"LongObject",!0),dV(n.S,Qtt,"Name",!0),dV(n.T,Qtt,F7n,!0),dV(n.U,oet,"NegativeInteger",!0),dV(n.V,Qtt,Q7n,!0),dV(n.X,Rnt,"NMTOKENS",!0),dV(n.W,Rnt,"NMTOKENSBase",!0),dV(n.Y,oet,"NonNegativeInteger",!0),dV(n.Z,oet,"NonPositiveInteger",!0),dV(n.$,Qtt,"NormalizedString",!0),dV(n._,Qtt,"NOTATION",!0),dV(n.ab,Qtt,"PositiveInteger",!0),dV(n.cb,Qtt,"QName",!0),dV(n.db,RNt,"Short",!0),dV(n.eb,_tt,"ShortObject",!0),dV(n.gb,Qtt,qVn,!0),dV(n.hb,Qtt,"Time",!0),dV(n.ib,Qtt,"Token",!0),dV(n.jb,RNt,"UnsignedByte",!0),dV(n.kb,_tt,"UnsignedByteObject",!0),dV(n.lb,LNt,"UnsignedInt",!0),dV(n.mb,Rtt,"UnsignedIntObject",!0),dV(n.nb,oet,"UnsignedLong",!0),dV(n.ob,ANt,"UnsignedShort",!0),dV(n.pb,Att,"UnsignedShortObject",!0),Lhn(n,S7n),yWn(n))}function vWn(n){NM(n,new MTn(mj(dj(vj(wj(pj(gj(new du,w1n),"ELK Layered"),"Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level."),new Cc),w1n),EG((hAn(),iAt),Pun(Gk(aAt,1),$Vn,237,0,[nAt,tAt,ZOt,eAt,YOt,QOt]))))),u2(n,w1n,L2n,mpn(ppt)),u2(n,w1n,N2n,mpn(vpt)),u2(n,w1n,XJn,mpn(mpt)),u2(n,w1n,x2n,mpn(ypt)),u2(n,w1n,mZn,mpn(jpt)),u2(n,w1n,D2n,mpn(Ept)),u2(n,w1n,R2n,mpn(Spt)),u2(n,w1n,K2n,mpn(Cpt)),u2(n,w1n,_2n,mpn(Ipt)),u2(n,w1n,F2n,mpn(Ppt)),u2(n,w1n,vZn,mpn(Opt)),u2(n,w1n,B2n,mpn($pt)),u2(n,w1n,H2n,mpn(Npt)),u2(n,w1n,q2n,mpn(Mpt)),u2(n,w1n,L0n,mpn(gpt)),u2(n,w1n,x0n,mpn(kpt)),u2(n,w1n,N0n,mpn(Tpt)),u2(n,w1n,D0n,mpn(Apt)),u2(n,w1n,pZn,iln(0)),u2(n,w1n,R0n,mpn(fpt)),u2(n,w1n,K0n,mpn(lpt)),u2(n,w1n,_0n,mpn(bpt)),u2(n,w1n,U0n,mpn(zpt)),u2(n,w1n,X0n,mpn(Rpt)),u2(n,w1n,W0n,mpn(Kpt)),u2(n,w1n,V0n,mpn(Bpt)),u2(n,w1n,Q0n,mpn(_pt)),u2(n,w1n,Y0n,mpn(Fpt)),u2(n,w1n,J0n,mpn(Xpt)),u2(n,w1n,Z0n,mpn(Upt)),u2(n,w1n,n2n,mpn(qpt)),u2(n,w1n,t2n,mpn(Hpt)),u2(n,w1n,e2n,mpn(Gpt)),u2(n,w1n,S0n,mpn(Rgt)),u2(n,w1n,P0n,mpn(Kgt)),u2(n,w1n,O0n,mpn(rgt)),u2(n,w1n,A0n,mpn(cgt)),u2(n,w1n,QJn,Ugt),u2(n,w1n,y2n,ngt),u2(n,w1n,G2n,0),u2(n,w1n,yZn,iln(1)),u2(n,w1n,VJn,dZn),u2(n,w1n,z2n,mpn(Ggt)),u2(n,w1n,EZn,mpn(ept)),u2(n,w1n,U2n,mpn(upt)),u2(n,w1n,X2n,mpn(zdt)),u2(n,w1n,W2n,mpn(kdt)),u2(n,w1n,d2n,mpn(sgt)),u2(n,w1n,kZn,(hN(),!0)),u2(n,w1n,V2n,mpn(wgt)),u2(n,w1n,Q2n,mpn(dgt)),u2(n,w1n,PZn,mpn(Fgt)),u2(n,w1n,SZn,mpn(qgt)),u2(n,w1n,Y2n,mpn(Bgt)),u2(n,w1n,J2n,Wdt),u2(n,w1n,CZn,mpn($gt)),u2(n,w1n,Z2n,mpn(Agt)),u2(n,w1n,IZn,mpn(cpt)),u2(n,w1n,n3n,mpn(rpt)),u2(n,w1n,t3n,mpn(apt)),u2(n,w1n,e3n,Vgt),u2(n,w1n,i3n,mpn(Ygt)),u2(n,w1n,r3n,mpn(Jgt)),u2(n,w1n,c3n,mpn(Zgt)),u2(n,w1n,a3n,mpn(Qgt)),u2(n,w1n,n0n,mpn(Dpt)),u2(n,w1n,i0n,mpn(Pgt)),u2(n,w1n,s0n,mpn(Sgt)),u2(n,w1n,Z1n,mpn(xpt)),u2(n,w1n,r0n,mpn(kgt)),u2(n,w1n,e0n,mpn(Gdt)),u2(n,w1n,l0n,mpn(qdt)),u2(n,w1n,b0n,mpn(xdt)),u2(n,w1n,v0n,mpn(Ddt)),u2(n,w1n,m0n,mpn(Kdt)),u2(n,w1n,y0n,mpn(Rdt)),u2(n,w1n,d0n,mpn(Hdt)),u2(n,w1n,V1n,mpn(Igt)),u2(n,w1n,Q1n,mpn(Ogt)),u2(n,w1n,W1n,mpn(pgt)),u2(n,w1n,k0n,mpn(_gt)),u2(n,w1n,T0n,mpn(Ngt)),u2(n,w1n,X1n,mpn(ugt)),u2(n,w1n,M0n,mpn(Dgt)),u2(n,w1n,C0n,mpn(egt)),u2(n,w1n,I0n,mpn(igt)),u2(n,w1n,u3n,mpn(Ndt)),u2(n,w1n,E0n,mpn(Lgt)),u2(n,w1n,B0n,mpn(Pdt)),u2(n,w1n,H0n,mpn(Sdt)),u2(n,w1n,F0n,mpn(Mdt)),u2(n,w1n,q0n,mpn(fgt)),u2(n,w1n,G0n,mpn(hgt)),u2(n,w1n,z0n,mpn(lgt)),u2(n,w1n,BZn,mpn(Hgt)),u2(n,w1n,o3n,mpn(vgt)),u2(n,w1n,WJn,mpn(agt)),u2(n,w1n,s3n,mpn(Ydt)),u2(n,w1n,TZn,mpn(Qdt)),u2(n,w1n,w0n,mpn(_dt)),u2(n,w1n,h3n,mpn(ipt)),u2(n,w1n,f3n,mpn(Tdt)),u2(n,w1n,l3n,mpn(bgt)),u2(n,w1n,b3n,mpn(npt)),u2(n,w1n,w3n,mpn(Xgt)),u2(n,w1n,d3n,mpn(Wgt)),u2(n,w1n,u0n,mpn(Egt)),u2(n,w1n,o0n,mpn(Tgt)),u2(n,w1n,g3n,mpn(spt)),u2(n,w1n,Y1n,mpn(jdt)),u2(n,w1n,h0n,mpn(Mgt)),u2(n,w1n,i2n,mpn(Jdt)),u2(n,w1n,r2n,mpn(Vdt)),u2(n,w1n,p3n,mpn(Cgt)),u2(n,w1n,f0n,mpn(mgt)),u2(n,w1n,j0n,mpn(xgt)),u2(n,w1n,v3n,mpn(Lpt)),u2(n,w1n,U1n,mpn(Xdt)),u2(n,w1n,J1n,mpn(opt)),u2(n,w1n,$0n,mpn(tgt)),u2(n,w1n,c0n,mpn(ygt)),u2(n,w1n,g0n,mpn(Fdt)),u2(n,w1n,m3n,mpn(ggt)),u2(n,w1n,a0n,mpn(jgt)),u2(n,w1n,p0n,mpn(Bdt)),u2(n,w1n,c2n,mpn(Ldt)),u2(n,w1n,o2n,mpn(Adt)),u2(n,w1n,s2n,mpn(Idt)),u2(n,w1n,h2n,mpn(Odt)),u2(n,w1n,a2n,mpn($dt)),u2(n,w1n,u2n,mpn(Cdt)),u2(n,w1n,t0n,mpn(ogt))}function mWn(n,t){var e;return nNt||(nNt=new xp,tNt=new xp,wWn(),wWn(),ydn(e=new M0(4),"\t\n\r\r "),mZ(nNt,fnt,e),mZ(tNt,fnt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),wnt),mZ(nNt,snt,e),mZ(tNt,snt,$Fn(e)),ydn(e=new M0(4),dnt),sHn(e,BB(SJ(nNt,snt),117)),mZ(nNt,hnt,e),mZ(tNt,hnt,$Fn(e)),ydn(e=new M0(4),"-.0:AZ__az\xb7\xb7\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u02d0\u02d1\u0300\u0345\u0360\u0361\u0386\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\u0483\u0486\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05a1\u05a3\u05b9\u05bb\u05bd\u05bf\u05bf\u05c1\u05c2\u05c4\u05c4\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0640\u0652\u0660\u0669\u0670\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06e8\u06ea\u06ed\u06f0\u06f9\u0901\u0903\u0905\u0939\u093c\u094d\u0951\u0954\u0958\u0963\u0966\u096f\u0981\u0983\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bc\u09bc\u09be\u09c4\u09c7\u09c8\u09cb\u09cd\u09d7\u09d7\u09dc\u09dd\u09df\u09e3\u09e6\u09f1\u0a02\u0a02\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a59\u0a5c\u0a5e\u0a5e\u0a66\u0a74\u0a81\u0a83\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abc\u0ac5\u0ac7\u0ac9\u0acb\u0acd\u0ae0\u0ae0\u0ae6\u0aef\u0b01\u0b03\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3c\u0b43\u0b47\u0b48\u0b4b\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f\u0b61\u0b66\u0b6f\u0b82\u0b83\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be7\u0bef\u0c01\u0c03\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c60\u0c61\u0c66\u0c6f\u0c82\u0c83\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cbe\u0cc4\u0cc6\u0cc8\u0cca\u0ccd\u0cd5\u0cd6\u0cde\u0cde\u0ce0\u0ce1\u0ce6\u0cef\u0d02\u0d03\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d3e\u0d43\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d60\u0d61\u0d66\u0d6f\u0e01\u0e2e\u0e30\u0e3a\u0e40\u0e4e\u0e50\u0e59\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\u0eb9\u0ebb\u0ebd\u0ec0\u0ec4\u0ec6\u0ec6\u0ec8\u0ecd\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f47\u0f49\u0f69\u0f71\u0f84\u0f86\u0f8b\u0f90\u0f95\u0f97\u0f97\u0f99\u0fad\u0fb1\u0fb7\u0fb9\u0fb9\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\u20d0\u20dc\u20e1\u20e1\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302f\u3031\u3035\u3041\u3094\u3099\u309a\u309d\u309e\u30a1\u30fa\u30fc\u30fe\u3105\u312c\u4e00\u9fa5\uac00\ud7a3"),mZ(nNt,lnt,e),mZ(tNt,lnt,$Fn(e)),ydn(e=new M0(4),dnt),Yxn(e,95,95),Yxn(e,58,58),mZ(nNt,bnt,e),mZ(tNt,bnt,$Fn(e))),BB(SJ(t?nNt:tNt,n),136)}function yWn(n){V$n(n.a,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anySimpleType"])),V$n(n.b,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyType",F9n,K9n])),V$n(BB(Wtn(QQ(n.b),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.b),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,M7n,P7n,t8n,":1",D7n,"lax"])),V$n(BB(Wtn(QQ(n.b),2),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,p7n,M7n,P7n,t8n,":2",D7n,"lax"])),V$n(n.c,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"anyURI",T7n,y7n])),V$n(n.d,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"base64Binary",T7n,y7n])),V$n(n.e,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$Wn,T7n,y7n])),V$n(n.f,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"boolean:Object",J9n,$Wn])),V$n(n.g,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,S9n])),V$n(n.i,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"byte:Object",J9n,S9n])),V$n(n.j,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"date",T7n,y7n])),V$n(n.k,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"dateTime",T7n,y7n])),V$n(n.n,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"decimal",T7n,y7n])),V$n(n.o,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,C9n,T7n,y7n])),V$n(n.p,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"double:Object",J9n,C9n])),V$n(n.q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"duration",T7n,y7n])),V$n(n.s,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ENTITIES",J9n,R7n,K7n,"1"])),V$n(n.r,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,R7n,k7n,_7n])),V$n(n.t,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,_7n,J9n,F7n])),V$n(n.u,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,I9n,T7n,y7n])),V$n(n.v,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"float:Object",J9n,I9n])),V$n(n.w,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gDay",T7n,y7n])),V$n(n.B,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonth",T7n,y7n])),V$n(n.A,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gMonthDay",T7n,y7n])),V$n(n.C,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYear",T7n,y7n])),V$n(n.D,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"gYearMonth",T7n,y7n])),V$n(n.F,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"hexBinary",T7n,y7n])),V$n(n.G,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"ID",J9n,F7n])),V$n(n.H,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREF",J9n,F7n])),V$n(n.J,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"IDREFS",J9n,B7n,K7n,"1"])),V$n(n.I,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,B7n,k7n,"IDREF"])),V$n(n.K,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,O9n])),V$n(n.M,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,H7n])),V$n(n.L,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"int:Object",J9n,O9n])),V$n(n.P,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"language",J9n,q7n,G7n,z7n])),V$n(n.Q,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,A9n])),V$n(n.R,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"long:Object",J9n,A9n])),V$n(n.S,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"Name",J9n,q7n,G7n,U7n])),V$n(n.T,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,F7n,J9n,"Name",G7n,X7n])),V$n(n.U,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"negativeInteger",J9n,W7n,V7n,"-1"])),V$n(n.V,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Q7n,J9n,q7n,G7n,"\\c+"])),V$n(n.X,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NMTOKENS",J9n,Y7n,K7n,"1"])),V$n(n.W,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,Y7n,k7n,Q7n])),V$n(n.Y,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,J7n,J9n,H7n,Z7n,"0"])),V$n(n.Z,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,W7n,J9n,H7n,V7n,"0"])),V$n(n.$,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,nnt,J9n,NWn,T7n,"replace"])),V$n(n._,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"NOTATION",T7n,y7n])),V$n(n.ab,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"positiveInteger",J9n,J7n,Z7n,"1"])),V$n(n.bb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"processingInstruction_._type",F9n,"empty"])),V$n(BB(Wtn(QQ(n.bb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"data"])),V$n(BB(Wtn(QQ(n.bb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,Y6n])),V$n(n.cb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"QName",T7n,y7n])),V$n(n.db,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,$9n])),V$n(n.eb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"short:Object",J9n,$9n])),V$n(n.fb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"simpleAnyType",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":3",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),1),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":4",F9n,d7n])),V$n(BB(Wtn(QQ(n.fb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,":5",F9n,d7n])),V$n(n.gb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,NWn,T7n,"preserve"])),V$n(n.hb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"time",T7n,y7n])),V$n(n.ib,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,q7n,J9n,nnt,T7n,y7n])),V$n(n.jb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,tnt,V7n,"255",Z7n,"0"])),V$n(n.kb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedByte:Object",J9n,tnt])),V$n(n.lb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,ent,V7n,"4294967295",Z7n,"0"])),V$n(n.mb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedInt:Object",J9n,ent])),V$n(n.nb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedLong",J9n,J7n,V7n,int,Z7n,"0"])),V$n(n.ob,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,rnt,V7n,"65535",Z7n,"0"])),V$n(n.pb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"unsignedShort:Object",J9n,rnt])),V$n(n.qb,_9n,Pun(Gk(Qtt,1),sVn,2,6,[t8n,"",F9n,K9n])),V$n(BB(Wtn(QQ(n.qb),0),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,m7n,t8n,":mixed"])),V$n(BB(Wtn(QQ(n.qb),1),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xmlns:prefix"])),V$n(BB(Wtn(QQ(n.qb),2),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,g7n,t8n,"xsi:schemaLocation"])),V$n(BB(Wtn(QQ(n.qb),3),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"cDATA",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),4),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,"comment",j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),5),18),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,cnt,j7n,E7n])),V$n(BB(Wtn(QQ(n.qb),6),34),_9n,Pun(Gk(Qtt,1),sVn,2,6,[F9n,v7n,t8n,O6n,j7n,E7n]))}function kWn(n){return mK("_UI_EMFDiagnostic_marker",n)?"EMF Problem":mK("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":mK(w8n,n)?"Wrong character.":mK(d8n,n)?"Invalid reference number.":mK(g8n,n)?"A character is required after \\.":mK(p8n,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":mK(v8n,n)?"'(?<' or '(?<!' is expected.":mK(m8n,n)?"A comment is not terminated.":mK(y8n,n)?"')' is expected.":mK(k8n,n)?"Unexpected end of the pattern in a modifier group.":mK(j8n,n)?"':' is expected.":mK(E8n,n)?"Unexpected end of the pattern in a conditional group.":mK(T8n,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":mK(M8n,n)?"There are more than three choices in a conditional group.":mK(S8n,n)?"A character in U+0040-U+005f must follow \\c.":mK(P8n,n)?"A '{' is required before a character category.":mK(C8n,n)?"A property name is not closed by '}'.":mK(I8n,n)?"Unexpected meta character.":mK(O8n,n)?"Unknown property.":mK(A8n,n)?"A POSIX character class must be closed by ':]'.":mK($8n,n)?"Unexpected end of the pattern in a character class.":mK(L8n,n)?"Unknown name for a POSIX character class.":mK("parser.cc.4",n)?"'-' is invalid here.":mK(N8n,n)?"']' is expected.":mK(x8n,n)?"'[' is invalid in a character class. Write '\\['.":mK(D8n,n)?"']' is invalid in a character class. Write '\\]'.":mK(R8n,n)?"'-' is an invalid character range. Write '\\-'.":mK(K8n,n)?"'[' is expected.":mK(_8n,n)?"')' or '-[' or '+[' or '&[' is expected.":mK(F8n,n)?"The range end code point is less than the start code point.":mK(B8n,n)?"Invalid Unicode hex notation.":mK(H8n,n)?"Overflow in a hex notation.":mK(q8n,n)?"'\\x{' must be closed by '}'.":mK(G8n,n)?"Invalid Unicode code point.":mK(z8n,n)?"An anchor must not be here.":mK(U8n,n)?"This expression is not supported in the current option setting.":mK(X8n,n)?"Invalid quantifier. A digit is expected.":mK(W8n,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":mK(V8n,n)?"Invalid quantifier. A digit or '}' is expected.":mK(Q8n,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":mK(Y8n,n)?"Invalid quantifier. A quantity value overflow.":mK("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":mK("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":mK("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":mK("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":mK("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":mK("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":mK("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":mK("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":mK("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":mK("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":mK("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":mK("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":mK("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":mK("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":mK("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":mK("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":mK("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":mK("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":mK("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":mK("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":mK("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":mK("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":mK("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":mK("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":mK("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":mK("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":mK("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":mK("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":mK("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":mK("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":mK("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function jWn(n){var t,e,i,r,c,a,u;n.r||(n.r=!0,Nrn(n,"graph"),xrn(n,"graph"),Drn(n,y6n),cun(n.o,"T"),f9(kY(n.a),n.p),f9(kY(n.f),n.a),f9(kY(n.n),n.f),f9(kY(n.g),n.n),f9(kY(n.c),n.n),f9(kY(n.i),n.c),f9(kY(n.j),n.c),f9(kY(n.d),n.f),f9(kY(n.e),n.a),z0(n.p,Xrt,OJn,!0,!0,!1),u=Tun(a=msn(n.p,n.p,"setProperty")),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),kEn(e,i=nQ(u)),Ujn(a,t,j6n),Ujn(a,t=nQ(u),E6n),u=Tun(a=msn(n.p,null,"getProperty")),t=ZV(n.o),e=nQ(u),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),(c=HTn(a,t=nQ(u),null))&&c.Fi(),a=msn(n.p,n.wb.e,"hasProperty"),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(a,t,j6n),$yn(a=msn(n.p,n.p,"copyProperties"),n.p,T6n),a=msn(n.p,null,"getAllProperties"),t=ZV(n.wb.P),e=ZV(n.o),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),i=new Kp,f9((!e.d&&(e.d=new $L(VAt,e,1)),e.d),i),e=ZV(n.wb.M),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(a,t,null))&&r.Fi(),z0(n.a,NOt,z5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.a),0),18),n.k,null,M6n,0,-1,NOt,!1,!1,!0,!0,!1,!1,!1),z0(n.f,DOt,X5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.f),0),18),n.g,BB(Wtn(QQ(n.g),0),18),"labels",0,-1,DOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.f),1),34),n.wb._,S6n,null,0,1,DOt,!1,!1,!0,!1,!0,!1),z0(n.n,ROt,"ElkShape",!0,!1,!0),ucn(BB(Wtn(QQ(n.n),0),34),n.wb.t,P6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),1),34),n.wb.t,C6n,WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),2),34),n.wb.t,"x",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.n),3),34),n.wb.t,"y",WQn,1,1,ROt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.n,null,"setDimensions"),n.wb.t,C6n),$yn(a,n.wb.t,P6n),$yn(a=msn(n.n,null,"setLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.g,zOt,Z5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.g),0),18),n.f,BB(Wtn(QQ(n.f),0),18),I6n,0,1,zOt,!1,!1,!0,!1,!1,!1,!1),ucn(BB(Wtn(QQ(n.g),1),34),n.wb._,O6n,"",0,1,zOt,!1,!1,!0,!1,!0,!1),z0(n.c,KOt,W5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.c),0),18),n.d,BB(Wtn(QQ(n.d),1),18),"outgoingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.c),1),18),n.d,BB(Wtn(QQ(n.d),2),18),"incomingEdges",0,-1,KOt,!1,!1,!0,!1,!0,!1,!1),z0(n.i,UOt,n6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.i),0),18),n.j,BB(Wtn(QQ(n.j),0),18),"ports",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),1),18),n.i,BB(Wtn(QQ(n.i),2),18),A6n,0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),2),18),n.i,BB(Wtn(QQ(n.i),1),18),I6n,0,1,UOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.i),3),18),n.d,BB(Wtn(QQ(n.d),0),18),"containedEdges",0,-1,UOt,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.i),4),34),n.wb.e,$6n,null,0,1,UOt,!0,!0,!1,!1,!0,!0),z0(n.j,XOt,t6n,!1,!1,!0),Myn(BB(Wtn(QQ(n.j),0),18),n.i,BB(Wtn(QQ(n.i),0),18),I6n,0,1,XOt,!1,!1,!0,!1,!1,!1,!1),z0(n.d,_Ot,V5n,!1,!1,!0),Myn(BB(Wtn(QQ(n.d),0),18),n.i,BB(Wtn(QQ(n.i),3),18),"containingNode",0,1,_Ot,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.d),1),18),n.c,BB(Wtn(QQ(n.c),0),18),L6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),2),18),n.c,BB(Wtn(QQ(n.c),1),18),N6n,0,-1,_Ot,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.d),3),18),n.e,BB(Wtn(QQ(n.e),5),18),x6n,0,-1,_Ot,!1,!1,!0,!0,!1,!1,!1),ucn(BB(Wtn(QQ(n.d),4),34),n.wb.e,"hyperedge",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),5),34),n.wb.e,$6n,null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),6),34),n.wb.e,"selfloop",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.d),7),34),n.wb.e,"connected",null,0,1,_Ot,!0,!0,!1,!1,!0,!0),z0(n.b,xOt,U5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.wb.t,"x",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.b),1),34),n.wb.t,"y",WQn,1,1,xOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.b,null,"set"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.e,FOt,Q5n,!1,!1,!0),ucn(BB(Wtn(QQ(n.e),0),34),n.wb.t,"startX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),1),34),n.wb.t,"startY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),2),34),n.wb.t,"endX",null,0,1,FOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.e),3),34),n.wb.t,"endY",null,0,1,FOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.e),4),18),n.b,null,D6n,0,-1,FOt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),5),18),n.d,BB(Wtn(QQ(n.d),3),18),I6n,0,1,FOt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.e),6),18),n.c,null,R6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),7),18),n.c,null,K6n,0,1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),8),18),n.e,BB(Wtn(QQ(n.e),9),18),_6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.e),9),18),n.e,BB(Wtn(QQ(n.e),8),18),F6n,0,-1,FOt,!1,!1,!0,!1,!0,!1,!1),ucn(BB(Wtn(QQ(n.e),10),34),n.wb._,S6n,null,0,1,FOt,!1,!1,!0,!1,!0,!1),$yn(a=msn(n.e,null,"setStartLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),$yn(a=msn(n.e,null,"setEndLocation"),n.wb.t,"x"),$yn(a,n.wb.t,"y"),z0(n.k,Hnt,"ElkPropertyToValueMapEntry",!1,!1,!1),t=ZV(n.o),e=new Kp,f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.k),0),34),t,"key",Hnt,!1,!1,!0,!1),ucn(BB(Wtn(QQ(n.k),1),34),n.s,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),dV(n.o,lMt,"IProperty",!0),dV(n.s,Ant,"PropertyValue",!0),Lhn(n,y6n))}function EWn(){EWn=O,(JLt=x8(NNt,v6n,25,BQn,15,1))[9]=35,JLt[10]=19,JLt[13]=19,JLt[32]=51,JLt[33]=49,JLt[34]=33,yU(JLt,35,38,49),JLt[38]=1,yU(JLt,39,45,49),yU(JLt,45,47,-71),JLt[47]=49,yU(JLt,48,58,-71),JLt[58]=61,JLt[59]=49,JLt[60]=1,JLt[61]=49,JLt[62]=33,yU(JLt,63,65,49),yU(JLt,65,91,-3),yU(JLt,91,93,33),JLt[93]=1,JLt[94]=33,JLt[95]=-3,JLt[96]=33,yU(JLt,97,123,-3),yU(JLt,123,183,33),JLt[183]=-87,yU(JLt,184,192,33),yU(JLt,192,215,-19),JLt[215]=33,yU(JLt,216,247,-19),JLt[247]=33,yU(JLt,248,306,-19),yU(JLt,306,308,33),yU(JLt,308,319,-19),yU(JLt,319,321,33),yU(JLt,321,329,-19),JLt[329]=33,yU(JLt,330,383,-19),JLt[383]=33,yU(JLt,384,452,-19),yU(JLt,452,461,33),yU(JLt,461,497,-19),yU(JLt,497,500,33),yU(JLt,500,502,-19),yU(JLt,502,506,33),yU(JLt,506,536,-19),yU(JLt,536,592,33),yU(JLt,592,681,-19),yU(JLt,681,699,33),yU(JLt,699,706,-19),yU(JLt,706,720,33),yU(JLt,720,722,-87),yU(JLt,722,768,33),yU(JLt,768,838,-87),yU(JLt,838,864,33),yU(JLt,864,866,-87),yU(JLt,866,902,33),JLt[902]=-19,JLt[903]=-87,yU(JLt,904,907,-19),JLt[907]=33,JLt[908]=-19,JLt[909]=33,yU(JLt,910,930,-19),JLt[930]=33,yU(JLt,931,975,-19),JLt[975]=33,yU(JLt,976,983,-19),yU(JLt,983,986,33),JLt[986]=-19,JLt[987]=33,JLt[988]=-19,JLt[989]=33,JLt[990]=-19,JLt[991]=33,JLt[992]=-19,JLt[993]=33,yU(JLt,994,1012,-19),yU(JLt,1012,1025,33),yU(JLt,1025,1037,-19),JLt[1037]=33,yU(JLt,1038,1104,-19),JLt[1104]=33,yU(JLt,1105,1117,-19),JLt[1117]=33,yU(JLt,1118,1154,-19),JLt[1154]=33,yU(JLt,1155,1159,-87),yU(JLt,1159,1168,33),yU(JLt,1168,1221,-19),yU(JLt,1221,1223,33),yU(JLt,1223,1225,-19),yU(JLt,1225,1227,33),yU(JLt,1227,1229,-19),yU(JLt,1229,1232,33),yU(JLt,1232,1260,-19),yU(JLt,1260,1262,33),yU(JLt,1262,1270,-19),yU(JLt,1270,1272,33),yU(JLt,1272,1274,-19),yU(JLt,1274,1329,33),yU(JLt,1329,1367,-19),yU(JLt,1367,1369,33),JLt[1369]=-19,yU(JLt,1370,1377,33),yU(JLt,1377,1415,-19),yU(JLt,1415,1425,33),yU(JLt,1425,1442,-87),JLt[1442]=33,yU(JLt,1443,1466,-87),JLt[1466]=33,yU(JLt,1467,1470,-87),JLt[1470]=33,JLt[1471]=-87,JLt[1472]=33,yU(JLt,1473,1475,-87),JLt[1475]=33,JLt[1476]=-87,yU(JLt,1477,1488,33),yU(JLt,1488,1515,-19),yU(JLt,1515,1520,33),yU(JLt,1520,1523,-19),yU(JLt,1523,1569,33),yU(JLt,1569,1595,-19),yU(JLt,1595,1600,33),JLt[1600]=-87,yU(JLt,1601,1611,-19),yU(JLt,1611,1619,-87),yU(JLt,1619,1632,33),yU(JLt,1632,1642,-87),yU(JLt,1642,1648,33),JLt[1648]=-87,yU(JLt,1649,1720,-19),yU(JLt,1720,1722,33),yU(JLt,1722,1727,-19),JLt[1727]=33,yU(JLt,1728,1743,-19),JLt[1743]=33,yU(JLt,1744,1748,-19),JLt[1748]=33,JLt[1749]=-19,yU(JLt,1750,1765,-87),yU(JLt,1765,1767,-19),yU(JLt,1767,1769,-87),JLt[1769]=33,yU(JLt,1770,1774,-87),yU(JLt,1774,1776,33),yU(JLt,1776,1786,-87),yU(JLt,1786,2305,33),yU(JLt,2305,2308,-87),JLt[2308]=33,yU(JLt,2309,2362,-19),yU(JLt,2362,2364,33),JLt[2364]=-87,JLt[2365]=-19,yU(JLt,2366,2382,-87),yU(JLt,2382,2385,33),yU(JLt,2385,2389,-87),yU(JLt,2389,2392,33),yU(JLt,2392,2402,-19),yU(JLt,2402,2404,-87),yU(JLt,2404,2406,33),yU(JLt,2406,2416,-87),yU(JLt,2416,2433,33),yU(JLt,2433,2436,-87),JLt[2436]=33,yU(JLt,2437,2445,-19),yU(JLt,2445,2447,33),yU(JLt,2447,2449,-19),yU(JLt,2449,2451,33),yU(JLt,2451,2473,-19),JLt[2473]=33,yU(JLt,2474,2481,-19),JLt[2481]=33,JLt[2482]=-19,yU(JLt,2483,2486,33),yU(JLt,2486,2490,-19),yU(JLt,2490,2492,33),JLt[2492]=-87,JLt[2493]=33,yU(JLt,2494,2501,-87),yU(JLt,2501,2503,33),yU(JLt,2503,2505,-87),yU(JLt,2505,2507,33),yU(JLt,2507,2510,-87),yU(JLt,2510,2519,33),JLt[2519]=-87,yU(JLt,2520,2524,33),yU(JLt,2524,2526,-19),JLt[2526]=33,yU(JLt,2527,2530,-19),yU(JLt,2530,2532,-87),yU(JLt,2532,2534,33),yU(JLt,2534,2544,-87),yU(JLt,2544,2546,-19),yU(JLt,2546,2562,33),JLt[2562]=-87,yU(JLt,2563,2565,33),yU(JLt,2565,2571,-19),yU(JLt,2571,2575,33),yU(JLt,2575,2577,-19),yU(JLt,2577,2579,33),yU(JLt,2579,2601,-19),JLt[2601]=33,yU(JLt,2602,2609,-19),JLt[2609]=33,yU(JLt,2610,2612,-19),JLt[2612]=33,yU(JLt,2613,2615,-19),JLt[2615]=33,yU(JLt,2616,2618,-19),yU(JLt,2618,2620,33),JLt[2620]=-87,JLt[2621]=33,yU(JLt,2622,2627,-87),yU(JLt,2627,2631,33),yU(JLt,2631,2633,-87),yU(JLt,2633,2635,33),yU(JLt,2635,2638,-87),yU(JLt,2638,2649,33),yU(JLt,2649,2653,-19),JLt[2653]=33,JLt[2654]=-19,yU(JLt,2655,2662,33),yU(JLt,2662,2674,-87),yU(JLt,2674,2677,-19),yU(JLt,2677,2689,33),yU(JLt,2689,2692,-87),JLt[2692]=33,yU(JLt,2693,2700,-19),JLt[2700]=33,JLt[2701]=-19,JLt[2702]=33,yU(JLt,2703,2706,-19),JLt[2706]=33,yU(JLt,2707,2729,-19),JLt[2729]=33,yU(JLt,2730,2737,-19),JLt[2737]=33,yU(JLt,2738,2740,-19),JLt[2740]=33,yU(JLt,2741,2746,-19),yU(JLt,2746,2748,33),JLt[2748]=-87,JLt[2749]=-19,yU(JLt,2750,2758,-87),JLt[2758]=33,yU(JLt,2759,2762,-87),JLt[2762]=33,yU(JLt,2763,2766,-87),yU(JLt,2766,2784,33),JLt[2784]=-19,yU(JLt,2785,2790,33),yU(JLt,2790,2800,-87),yU(JLt,2800,2817,33),yU(JLt,2817,2820,-87),JLt[2820]=33,yU(JLt,2821,2829,-19),yU(JLt,2829,2831,33),yU(JLt,2831,2833,-19),yU(JLt,2833,2835,33),yU(JLt,2835,2857,-19),JLt[2857]=33,yU(JLt,2858,2865,-19),JLt[2865]=33,yU(JLt,2866,2868,-19),yU(JLt,2868,2870,33),yU(JLt,2870,2874,-19),yU(JLt,2874,2876,33),JLt[2876]=-87,JLt[2877]=-19,yU(JLt,2878,2884,-87),yU(JLt,2884,2887,33),yU(JLt,2887,2889,-87),yU(JLt,2889,2891,33),yU(JLt,2891,2894,-87),yU(JLt,2894,2902,33),yU(JLt,2902,2904,-87),yU(JLt,2904,2908,33),yU(JLt,2908,2910,-19),JLt[2910]=33,yU(JLt,2911,2914,-19),yU(JLt,2914,2918,33),yU(JLt,2918,2928,-87),yU(JLt,2928,2946,33),yU(JLt,2946,2948,-87),JLt[2948]=33,yU(JLt,2949,2955,-19),yU(JLt,2955,2958,33),yU(JLt,2958,2961,-19),JLt[2961]=33,yU(JLt,2962,2966,-19),yU(JLt,2966,2969,33),yU(JLt,2969,2971,-19),JLt[2971]=33,JLt[2972]=-19,JLt[2973]=33,yU(JLt,2974,2976,-19),yU(JLt,2976,2979,33),yU(JLt,2979,2981,-19),yU(JLt,2981,2984,33),yU(JLt,2984,2987,-19),yU(JLt,2987,2990,33),yU(JLt,2990,2998,-19),JLt[2998]=33,yU(JLt,2999,3002,-19),yU(JLt,3002,3006,33),yU(JLt,3006,3011,-87),yU(JLt,3011,3014,33),yU(JLt,3014,3017,-87),JLt[3017]=33,yU(JLt,3018,3022,-87),yU(JLt,3022,3031,33),JLt[3031]=-87,yU(JLt,3032,3047,33),yU(JLt,3047,3056,-87),yU(JLt,3056,3073,33),yU(JLt,3073,3076,-87),JLt[3076]=33,yU(JLt,3077,3085,-19),JLt[3085]=33,yU(JLt,3086,3089,-19),JLt[3089]=33,yU(JLt,3090,3113,-19),JLt[3113]=33,yU(JLt,3114,3124,-19),JLt[3124]=33,yU(JLt,3125,3130,-19),yU(JLt,3130,3134,33),yU(JLt,3134,3141,-87),JLt[3141]=33,yU(JLt,3142,3145,-87),JLt[3145]=33,yU(JLt,3146,3150,-87),yU(JLt,3150,3157,33),yU(JLt,3157,3159,-87),yU(JLt,3159,3168,33),yU(JLt,3168,3170,-19),yU(JLt,3170,3174,33),yU(JLt,3174,3184,-87),yU(JLt,3184,3202,33),yU(JLt,3202,3204,-87),JLt[3204]=33,yU(JLt,3205,3213,-19),JLt[3213]=33,yU(JLt,3214,3217,-19),JLt[3217]=33,yU(JLt,3218,3241,-19),JLt[3241]=33,yU(JLt,3242,3252,-19),JLt[3252]=33,yU(JLt,3253,3258,-19),yU(JLt,3258,3262,33),yU(JLt,3262,3269,-87),JLt[3269]=33,yU(JLt,3270,3273,-87),JLt[3273]=33,yU(JLt,3274,3278,-87),yU(JLt,3278,3285,33),yU(JLt,3285,3287,-87),yU(JLt,3287,3294,33),JLt[3294]=-19,JLt[3295]=33,yU(JLt,3296,3298,-19),yU(JLt,3298,3302,33),yU(JLt,3302,3312,-87),yU(JLt,3312,3330,33),yU(JLt,3330,3332,-87),JLt[3332]=33,yU(JLt,3333,3341,-19),JLt[3341]=33,yU(JLt,3342,3345,-19),JLt[3345]=33,yU(JLt,3346,3369,-19),JLt[3369]=33,yU(JLt,3370,3386,-19),yU(JLt,3386,3390,33),yU(JLt,3390,3396,-87),yU(JLt,3396,3398,33),yU(JLt,3398,3401,-87),JLt[3401]=33,yU(JLt,3402,3406,-87),yU(JLt,3406,3415,33),JLt[3415]=-87,yU(JLt,3416,3424,33),yU(JLt,3424,3426,-19),yU(JLt,3426,3430,33),yU(JLt,3430,3440,-87),yU(JLt,3440,3585,33),yU(JLt,3585,3631,-19),JLt[3631]=33,JLt[3632]=-19,JLt[3633]=-87,yU(JLt,3634,3636,-19),yU(JLt,3636,3643,-87),yU(JLt,3643,3648,33),yU(JLt,3648,3654,-19),yU(JLt,3654,3663,-87),JLt[3663]=33,yU(JLt,3664,3674,-87),yU(JLt,3674,3713,33),yU(JLt,3713,3715,-19),JLt[3715]=33,JLt[3716]=-19,yU(JLt,3717,3719,33),yU(JLt,3719,3721,-19),JLt[3721]=33,JLt[3722]=-19,yU(JLt,3723,3725,33),JLt[3725]=-19,yU(JLt,3726,3732,33),yU(JLt,3732,3736,-19),JLt[3736]=33,yU(JLt,3737,3744,-19),JLt[3744]=33,yU(JLt,3745,3748,-19),JLt[3748]=33,JLt[3749]=-19,JLt[3750]=33,JLt[3751]=-19,yU(JLt,3752,3754,33),yU(JLt,3754,3756,-19),JLt[3756]=33,yU(JLt,3757,3759,-19),JLt[3759]=33,JLt[3760]=-19,JLt[3761]=-87,yU(JLt,3762,3764,-19),yU(JLt,3764,3770,-87),JLt[3770]=33,yU(JLt,3771,3773,-87),JLt[3773]=-19,yU(JLt,3774,3776,33),yU(JLt,3776,3781,-19),JLt[3781]=33,JLt[3782]=-87,JLt[3783]=33,yU(JLt,3784,3790,-87),yU(JLt,3790,3792,33),yU(JLt,3792,3802,-87),yU(JLt,3802,3864,33),yU(JLt,3864,3866,-87),yU(JLt,3866,3872,33),yU(JLt,3872,3882,-87),yU(JLt,3882,3893,33),JLt[3893]=-87,JLt[3894]=33,JLt[3895]=-87,JLt[3896]=33,JLt[3897]=-87,yU(JLt,3898,3902,33),yU(JLt,3902,3904,-87),yU(JLt,3904,3912,-19),JLt[3912]=33,yU(JLt,3913,3946,-19),yU(JLt,3946,3953,33),yU(JLt,3953,3973,-87),JLt[3973]=33,yU(JLt,3974,3980,-87),yU(JLt,3980,3984,33),yU(JLt,3984,3990,-87),JLt[3990]=33,JLt[3991]=-87,JLt[3992]=33,yU(JLt,3993,4014,-87),yU(JLt,4014,4017,33),yU(JLt,4017,4024,-87),JLt[4024]=33,JLt[4025]=-87,yU(JLt,4026,4256,33),yU(JLt,4256,4294,-19),yU(JLt,4294,4304,33),yU(JLt,4304,4343,-19),yU(JLt,4343,4352,33),JLt[4352]=-19,JLt[4353]=33,yU(JLt,4354,4356,-19),JLt[4356]=33,yU(JLt,4357,4360,-19),JLt[4360]=33,JLt[4361]=-19,JLt[4362]=33,yU(JLt,4363,4365,-19),JLt[4365]=33,yU(JLt,4366,4371,-19),yU(JLt,4371,4412,33),JLt[4412]=-19,JLt[4413]=33,JLt[4414]=-19,JLt[4415]=33,JLt[4416]=-19,yU(JLt,4417,4428,33),JLt[4428]=-19,JLt[4429]=33,JLt[4430]=-19,JLt[4431]=33,JLt[4432]=-19,yU(JLt,4433,4436,33),yU(JLt,4436,4438,-19),yU(JLt,4438,4441,33),JLt[4441]=-19,yU(JLt,4442,4447,33),yU(JLt,4447,4450,-19),JLt[4450]=33,JLt[4451]=-19,JLt[4452]=33,JLt[4453]=-19,JLt[4454]=33,JLt[4455]=-19,JLt[4456]=33,JLt[4457]=-19,yU(JLt,4458,4461,33),yU(JLt,4461,4463,-19),yU(JLt,4463,4466,33),yU(JLt,4466,4468,-19),JLt[4468]=33,JLt[4469]=-19,yU(JLt,4470,4510,33),JLt[4510]=-19,yU(JLt,4511,4520,33),JLt[4520]=-19,yU(JLt,4521,4523,33),JLt[4523]=-19,yU(JLt,4524,4526,33),yU(JLt,4526,4528,-19),yU(JLt,4528,4535,33),yU(JLt,4535,4537,-19),JLt[4537]=33,JLt[4538]=-19,JLt[4539]=33,yU(JLt,4540,4547,-19),yU(JLt,4547,4587,33),JLt[4587]=-19,yU(JLt,4588,4592,33),JLt[4592]=-19,yU(JLt,4593,4601,33),JLt[4601]=-19,yU(JLt,4602,7680,33),yU(JLt,7680,7836,-19),yU(JLt,7836,7840,33),yU(JLt,7840,7930,-19),yU(JLt,7930,7936,33),yU(JLt,7936,7958,-19),yU(JLt,7958,7960,33),yU(JLt,7960,7966,-19),yU(JLt,7966,7968,33),yU(JLt,7968,8006,-19),yU(JLt,8006,8008,33),yU(JLt,8008,8014,-19),yU(JLt,8014,8016,33),yU(JLt,8016,8024,-19),JLt[8024]=33,JLt[8025]=-19,JLt[8026]=33,JLt[8027]=-19,JLt[8028]=33,JLt[8029]=-19,JLt[8030]=33,yU(JLt,8031,8062,-19),yU(JLt,8062,8064,33),yU(JLt,8064,8117,-19),JLt[8117]=33,yU(JLt,8118,8125,-19),JLt[8125]=33,JLt[8126]=-19,yU(JLt,8127,8130,33),yU(JLt,8130,8133,-19),JLt[8133]=33,yU(JLt,8134,8141,-19),yU(JLt,8141,8144,33),yU(JLt,8144,8148,-19),yU(JLt,8148,8150,33),yU(JLt,8150,8156,-19),yU(JLt,8156,8160,33),yU(JLt,8160,8173,-19),yU(JLt,8173,8178,33),yU(JLt,8178,8181,-19),JLt[8181]=33,yU(JLt,8182,8189,-19),yU(JLt,8189,8400,33),yU(JLt,8400,8413,-87),yU(JLt,8413,8417,33),JLt[8417]=-87,yU(JLt,8418,8486,33),JLt[8486]=-19,yU(JLt,8487,8490,33),yU(JLt,8490,8492,-19),yU(JLt,8492,8494,33),JLt[8494]=-19,yU(JLt,8495,8576,33),yU(JLt,8576,8579,-19),yU(JLt,8579,12293,33),JLt[12293]=-87,JLt[12294]=33,JLt[12295]=-19,yU(JLt,12296,12321,33),yU(JLt,12321,12330,-19),yU(JLt,12330,12336,-87),JLt[12336]=33,yU(JLt,12337,12342,-87),yU(JLt,12342,12353,33),yU(JLt,12353,12437,-19),yU(JLt,12437,12441,33),yU(JLt,12441,12443,-87),yU(JLt,12443,12445,33),yU(JLt,12445,12447,-87),yU(JLt,12447,12449,33),yU(JLt,12449,12539,-19),JLt[12539]=33,yU(JLt,12540,12543,-87),yU(JLt,12543,12549,33),yU(JLt,12549,12589,-19),yU(JLt,12589,19968,33),yU(JLt,19968,40870,-19),yU(JLt,40870,44032,33),yU(JLt,44032,55204,-19),yU(JLt,55204,HQn,33),yU(JLt,57344,65534,33)}function TWn(n){var t,e,i,r,c,a,u;n.hb||(n.hb=!0,Nrn(n,"ecore"),xrn(n,"ecore"),Drn(n,V9n),cun(n.fb,"E"),cun(n.L,"T"),cun(n.P,"K"),cun(n.P,"V"),cun(n.cb,"E"),f9(kY(n.b),n.bb),f9(kY(n.a),n.Q),f9(kY(n.o),n.p),f9(kY(n.p),n.R),f9(kY(n.q),n.p),f9(kY(n.v),n.q),f9(kY(n.w),n.R),f9(kY(n.B),n.Q),f9(kY(n.R),n.Q),f9(kY(n.T),n.eb),f9(kY(n.U),n.R),f9(kY(n.V),n.eb),f9(kY(n.W),n.bb),f9(kY(n.bb),n.eb),f9(kY(n.eb),n.R),f9(kY(n.db),n.R),z0(n.b,BAt,l9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.b),0),34),n.e,"iD",null,0,1,BAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.b),1),18),n.q,null,"eAttributeType",1,1,BAt,!0,!0,!1,!1,!0,!1,!0),z0(n.a,KAt,s9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.a),0),34),n._,T6n,null,0,1,KAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.a),1),18),n.ab,null,"details",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),2),18),n.Q,BB(Wtn(QQ(n.Q),0),18),"eModelElement",0,1,KAt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),3),18),n.S,null,"contents",0,-1,KAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.a),4),18),n.S,null,"references",0,-1,KAt,!1,!1,!0,!1,!0,!1,!1),z0(n.o,qAt,"EClass",!1,!1,!0),ucn(BB(Wtn(QQ(n.o),0),34),n.e,"abstract",null,0,1,qAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.o),1),34),n.e,"interface",null,0,1,qAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),2),18),n.o,null,"eSuperTypes",0,-1,qAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.o),3),18),n.T,BB(Wtn(QQ(n.T),0),18),"eOperations",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),4),18),n.b,null,"eAllAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),5),18),n.W,null,"eAllReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),6),18),n.W,null,"eReferences",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),7),18),n.b,null,"eAttributes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),8),18),n.W,null,"eAllContainments",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),9),18),n.T,null,"eAllOperations",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),10),18),n.bb,null,"eAllStructuralFeatures",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),11),18),n.o,null,"eAllSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.o),12),18),n.b,null,"eIDAttribute",0,1,qAt,!0,!0,!1,!1,!1,!1,!0),Myn(BB(Wtn(QQ(n.o),13),18),n.bb,BB(Wtn(QQ(n.bb),7),18),"eStructuralFeatures",0,-1,qAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.o),14),18),n.H,null,"eGenericSuperTypes",0,-1,qAt,!1,!1,!0,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.o),15),18),n.H,null,"eAllGenericSuperTypes",0,-1,qAt,!0,!0,!1,!1,!0,!1,!0),$yn(u=fin(BB(Wtn(VQ(n.o),0),59),n.e,"isSuperTypeOf"),n.o,"someClass"),fin(BB(Wtn(VQ(n.o),1),59),n.I,"getFeatureCount"),$yn(u=fin(BB(Wtn(VQ(n.o),2),59),n.bb,Z9n),n.I,"featureID"),$yn(u=fin(BB(Wtn(VQ(n.o),3),59),n.I,n7n),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.o),4),59),n.bb,Z9n),n._,"featureName"),fin(BB(Wtn(VQ(n.o),5),59),n.I,"getOperationCount"),$yn(u=fin(BB(Wtn(VQ(n.o),6),59),n.T,"getEOperation"),n.I,"operationID"),$yn(u=fin(BB(Wtn(VQ(n.o),7),59),n.I,e7n),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),8),59),n.T,"getOverride"),n.T,i7n),$yn(u=fin(BB(Wtn(VQ(n.o),9),59),n.H,"getFeatureType"),n.bb,t7n),z0(n.p,HAt,b9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),0),34),n._,"instanceClassName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),_On(BB(Wtn(QQ(n.p),1),34),t,"instanceClass",HAt,!0,!0,!1,!0),ucn(BB(Wtn(QQ(n.p),2),34),n.M,r7n,null,0,1,HAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.p),3),34),n._,"instanceTypeName",null,0,1,HAt,!1,!0,!0,!0,!0,!1),Myn(BB(Wtn(QQ(n.p),4),18),n.U,BB(Wtn(QQ(n.U),3),18),"ePackage",0,1,HAt,!0,!1,!1,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.p),5),18),n.db,null,c7n,0,-1,HAt,!1,!1,!0,!0,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.p),0),59),n.e,a7n),n.M,AWn),fin(BB(Wtn(VQ(n.p),1),59),n.I,"getClassifierID"),z0(n.q,GAt,"EDataType",!1,!1,!0),ucn(BB(Wtn(QQ(n.q),0),34),n.e,"serializable",a5n,0,1,GAt,!1,!1,!0,!1,!0,!1),z0(n.v,XAt,"EEnum",!1,!1,!0),Myn(BB(Wtn(QQ(n.v),0),18),n.w,BB(Wtn(QQ(n.w),3),18),"eLiterals",0,-1,XAt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.v),0),59),n.w,u7n),n._,t8n),$yn(u=fin(BB(Wtn(VQ(n.v),1),59),n.w,u7n),n.I,E6n),$yn(u=fin(BB(Wtn(VQ(n.v),2),59),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),z0(n.w,WAt,w9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.w),0),34),n.I,E6n,null,0,1,WAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),1),34),n.A,"instance",null,0,1,WAt,!0,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.w),2),34),n._,"literal",null,0,1,WAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.w),3),18),n.v,BB(Wtn(QQ(n.v),0),18),"eEnum",0,1,WAt,!0,!1,!1,!1,!1,!1,!1),z0(n.B,HOt,"EFactory",!1,!1,!0),Myn(BB(Wtn(QQ(n.B),0),18),n.U,BB(Wtn(QQ(n.U),2),18),"ePackage",1,1,HOt,!0,!1,!0,!1,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.B),0),59),n.S,"create"),n.o,"eClass"),$yn(u=fin(BB(Wtn(VQ(n.B),1),59),n.M,"createFromString"),n.q,"eDataType"),$yn(u,n._,"literalValue"),$yn(u=fin(BB(Wtn(VQ(n.B),2),59),n._,"convertToString"),n.q,"eDataType"),$yn(u,n.M,"instanceValue"),z0(n.Q,BOt,Y5n,!0,!1,!0),Myn(BB(Wtn(QQ(n.Q),0),18),n.a,BB(Wtn(QQ(n.a),2),18),"eAnnotations",0,-1,BOt,!1,!1,!0,!0,!1,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.Q),0),59),n.a,"getEAnnotation"),n._,T6n),z0(n.R,qOt,J5n,!0,!1,!0),ucn(BB(Wtn(QQ(n.R),0),34),n._,t8n,null,0,1,qOt,!1,!1,!0,!1,!0,!1),z0(n.S,LOt,"EObject",!1,!1,!0),fin(BB(Wtn(VQ(n.S),0),59),n.o,"eClass"),fin(BB(Wtn(VQ(n.S),1),59),n.e,"eIsProxy"),fin(BB(Wtn(VQ(n.S),2),59),n.X,"eResource"),fin(BB(Wtn(VQ(n.S),3),59),n.S,"eContainer"),fin(BB(Wtn(VQ(n.S),4),59),n.bb,"eContainingFeature"),fin(BB(Wtn(VQ(n.S),5),59),n.W,"eContainmentFeature"),u=fin(BB(Wtn(VQ(n.S),6),59),null,"eContents"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(r=HTn(u,t,null))&&r.Fi(),u=fin(BB(Wtn(VQ(n.S),7),59),null,"eAllContents"),t=ZV(n.cb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(c=HTn(u,t,null))&&c.Fi(),u=fin(BB(Wtn(VQ(n.S),8),59),null,"eCrossReferences"),t=ZV(n.fb),e=ZV(n.S),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(a=HTn(u,t,null))&&a.Fi(),$yn(u=fin(BB(Wtn(VQ(n.S),9),59),n.M,"eGet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),10),59),n.M,"eGet"),n.bb,t7n),$yn(u,n.e,"resolve"),$yn(u=fin(BB(Wtn(VQ(n.S),11),59),null,"eSet"),n.bb,t7n),$yn(u,n.M,"newValue"),$yn(u=fin(BB(Wtn(VQ(n.S),12),59),n.e,"eIsSet"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),13),59),null,"eUnset"),n.bb,t7n),$yn(u=fin(BB(Wtn(VQ(n.S),14),59),n.M,"eInvoke"),n.T,i7n),t=ZV(n.fb),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),Ujn(u,t,"arguments"),_W(u,n.K),z0(n.T,QAt,g9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.T),0),18),n.o,BB(Wtn(QQ(n.o),3),18),o7n,0,1,QAt,!0,!1,!1,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),1),18),n.db,null,c7n,0,-1,QAt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.T),2),18),n.V,BB(Wtn(QQ(n.V),0),18),"eParameters",0,-1,QAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.T),3),18),n.p,null,"eExceptions",0,-1,QAt,!1,!1,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.T),4),18),n.H,null,"eGenericExceptions",0,-1,QAt,!1,!1,!0,!0,!1,!0,!1),fin(BB(Wtn(VQ(n.T),0),59),n.I,e7n),$yn(u=fin(BB(Wtn(VQ(n.T),1),59),n.e,"isOverrideOf"),n.T,"someOperation"),z0(n.U,GOt,"EPackage",!1,!1,!0),ucn(BB(Wtn(QQ(n.U),0),34),n._,"nsURI",null,0,1,GOt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.U),1),34),n._,"nsPrefix",null,0,1,GOt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.U),2),18),n.B,BB(Wtn(QQ(n.B),0),18),"eFactoryInstance",1,1,GOt,!0,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.U),3),18),n.p,BB(Wtn(QQ(n.p),4),18),"eClassifiers",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),4),18),n.U,BB(Wtn(QQ(n.U),5),18),"eSubpackages",0,-1,GOt,!1,!1,!0,!0,!0,!1,!1),Myn(BB(Wtn(QQ(n.U),5),18),n.U,BB(Wtn(QQ(n.U),4),18),"eSuperPackage",0,1,GOt,!0,!1,!1,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.U),0),59),n.p,"getEClassifier"),n._,t8n),z0(n.V,YAt,p9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.V),0),18),n.T,BB(Wtn(QQ(n.T),2),18),"eOperation",0,1,YAt,!0,!1,!1,!1,!1,!1,!1),z0(n.W,JAt,v9n,!1,!1,!0),ucn(BB(Wtn(QQ(n.W),0),34),n.e,"containment",null,0,1,JAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.W),1),34),n.e,"container",null,0,1,JAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.W),2),34),n.e,"resolveProxies",a5n,0,1,JAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.W),3),18),n.W,null,"eOpposite",0,1,JAt,!1,!1,!0,!1,!0,!1,!1),Myn(BB(Wtn(QQ(n.W),4),18),n.o,null,"eReferenceType",1,1,JAt,!0,!0,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.W),5),18),n.b,null,"eKeys",0,-1,JAt,!1,!1,!0,!1,!0,!1,!1),z0(n.bb,FAt,f9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.bb),0),34),n.e,"changeable",a5n,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),1),34),n.e,"volatile",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),2),34),n.e,"transient",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),3),34),n._,"defaultValueLiteral",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),4),34),n.M,r7n,null,0,1,FAt,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.bb),5),34),n.e,"unsettable",null,0,1,FAt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.bb),6),34),n.e,"derived",null,0,1,FAt,!1,!1,!0,!1,!0,!1),Myn(BB(Wtn(QQ(n.bb),7),18),n.o,BB(Wtn(QQ(n.o),13),18),o7n,0,1,FAt,!0,!1,!1,!1,!1,!1,!1),fin(BB(Wtn(VQ(n.bb),0),59),n.I,n7n),u=fin(BB(Wtn(VQ(n.bb),1),59),null,"getContainerClass"),t=ZV(n.L),e=s2(),f9((!t.d&&(t.d=new $L(VAt,t,1)),t.d),e),(i=HTn(u,t,null))&&i.Fi(),z0(n.eb,_At,h9n,!0,!1,!0),ucn(BB(Wtn(QQ(n.eb),0),34),n.e,"ordered",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),1),34),n.e,"unique",a5n,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),2),34),n.I,"lowerBound",null,0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),3),34),n.I,"upperBound","1",0,1,_At,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.eb),4),34),n.e,"many",null,0,1,_At,!0,!0,!1,!1,!0,!0),ucn(BB(Wtn(QQ(n.eb),5),34),n.e,"required",null,0,1,_At,!0,!0,!1,!1,!0,!0),Myn(BB(Wtn(QQ(n.eb),6),18),n.p,null,"eType",0,1,_At,!1,!0,!0,!1,!0,!0,!1),Myn(BB(Wtn(QQ(n.eb),7),18),n.H,null,"eGenericType",0,1,_At,!1,!0,!0,!0,!1,!0,!1),z0(n.ab,Hnt,"EStringToStringMapEntry",!1,!1,!1),ucn(BB(Wtn(QQ(n.ab),0),34),n._,"key",null,0,1,Hnt,!1,!1,!0,!1,!0,!1),ucn(BB(Wtn(QQ(n.ab),1),34),n._,E6n,null,0,1,Hnt,!1,!1,!0,!1,!0,!1),z0(n.H,VAt,d9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.H),0),18),n.H,null,"eUpperBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),1),18),n.H,null,"eTypeArguments",0,-1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),2),18),n.p,null,"eRawType",1,1,VAt,!0,!1,!1,!1,!0,!1,!0),Myn(BB(Wtn(QQ(n.H),3),18),n.H,null,"eLowerBound",0,1,VAt,!1,!1,!0,!0,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),4),18),n.db,null,"eTypeParameter",0,1,VAt,!1,!1,!0,!1,!1,!1,!1),Myn(BB(Wtn(QQ(n.H),5),18),n.p,null,"eClassifier",0,1,VAt,!1,!1,!0,!1,!0,!1,!1),$yn(u=fin(BB(Wtn(VQ(n.H),0),59),n.e,a7n),n.M,AWn),z0(n.db,O$t,m9n,!1,!1,!0),Myn(BB(Wtn(QQ(n.db),0),18),n.H,null,"eBounds",0,-1,O$t,!1,!1,!0,!0,!1,!1,!1),dV(n.c,iet,"EBigDecimal",!0),dV(n.d,oet,"EBigInteger",!0),dV(n.e,$Nt,"EBoolean",!0),dV(n.f,ktt,"EBooleanObject",!0),dV(n.i,NNt,"EByte",!0),dV(n.g,Gk(NNt,1),"EByteArray",!0),dV(n.j,Ttt,"EByteObject",!0),dV(n.k,ONt,"EChar",!0),dV(n.n,Stt,"ECharacterObject",!0),dV(n.r,mtt,"EDate",!0),dV(n.s,_Nt,"EDiagnosticChain",!1),dV(n.t,xNt,"EDouble",!0),dV(n.u,Ptt,"EDoubleObject",!0),dV(n.fb,uAt,"EEList",!1),dV(n.A,yAt,"EEnumerator",!1),dV(n.C,oLt,"EFeatureMap",!1),dV(n.D,$$t,"EFeatureMapEntry",!1),dV(n.F,DNt,"EFloat",!0),dV(n.G,Ctt,"EFloatObject",!0),dV(n.I,ANt,"EInt",!0),dV(n.J,Att,"EIntegerObject",!0),dV(n.L,$nt,"EJavaClass",!0),dV(n.M,Ant,"EJavaObject",!0),dV(n.N,LNt,"ELong",!0),dV(n.O,Rtt,"ELongObject",!0),dV(n.P,Nnt,"EMap",!1),dV(n.X,iLt,"EResource",!1),dV(n.Y,FNt,"EResourceSet",!1),dV(n.Z,RNt,"EShort",!0),dV(n.$,_tt,"EShortObject",!0),dV(n._,Qtt,"EString",!0),dV(n.cb,sAt,"ETreeIterator",!1),dV(n.K,BNt,"EInvocationTargetException",!1),Lhn(n,V9n))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var MWn,SWn,PWn,CWn,IWn,OWn,AWn="object",$Wn="boolean",LWn="number",NWn="string",xWn="function",DWn=2147483647,RWn="java.lang",KWn={3:1},_Wn="com.google.common.base",FWn=", ",BWn="%s (%s) must not be negative",HWn={3:1,4:1,5:1},qWn="negative size: ",GWn="Optional.of(",zWn="null",UWn={198:1,47:1},XWn="com.google.common.collect",WWn={198:1,47:1,125:1},VWn={224:1,3:1},QWn={47:1},YWn="java.util",JWn={83:1},ZWn={20:1,28:1,14:1},nVn=1965,tVn={20:1,28:1,14:1,21:1},eVn={83:1,171:1,161:1},iVn={20:1,28:1,14:1,21:1,84:1},rVn={20:1,28:1,14:1,271:1,21:1,84:1},cVn={47:1,125:1},aVn={345:1,42:1},uVn="AbstractMapEntry",oVn="expectedValuesPerKey",sVn={3:1,6:1,4:1,5:1},hVn=16384,fVn={164:1},lVn={38:1},bVn={l:4194303,m:4194303,h:524287},wVn={196:1},dVn={245:1,3:1,35:1},gVn="range unbounded on this side",pVn={20:1},vVn={20:1,14:1},mVn={3:1,20:1,28:1,14:1},yVn={152:1,3:1,20:1,28:1,14:1,15:1,54:1},kVn={3:1,4:1,5:1,165:1},jVn={3:1,83:1},EVn={20:1,14:1,21:1},TVn={3:1,20:1,28:1,14:1,21:1},MVn={20:1,14:1,21:1,84:1},SVn=461845907,PVn=-862048943,CVn={3:1,6:1,4:1,5:1,165:1},IVn="expectedSize",OVn=1073741824,AVn="initialArraySize",$Vn={3:1,6:1,4:1,9:1,5:1},LVn={20:1,28:1,52:1,14:1,15:1},NVn="arraySize",xVn={20:1,28:1,52:1,14:1,15:1,54:1},DVn={45:1},RVn={365:1},KVn=1e-4,_Vn=-2147483648,FVn="__noinit__",BVn={3:1,102:1,60:1,78:1},HVn="com.google.gwt.core.client.impl",qVn="String",GVn="com.google.gwt.core.client",zVn="anonymous",UVn="fnStack",XVn="Unknown",WVn={195:1,3:1,4:1},VVn=1e3,QVn=65535,YVn="January",JVn="February",ZVn="March",nQn="April",tQn="May",eQn="June",iQn="July",rQn="August",cQn="September",aQn="October",uQn="November",oQn="December",sQn=1900,hQn={48:1,3:1,4:1},fQn="Before Christ",lQn="Anno Domini",bQn="Sunday",wQn="Monday",dQn="Tuesday",gQn="Wednesday",pQn="Thursday",vQn="Friday",mQn="Saturday",yQn="com.google.gwt.i18n.shared",kQn="DateTimeFormat",jQn="com.google.gwt.i18n.client",EQn="DefaultDateTimeFormatInfo",TQn={3:1,4:1,35:1,199:1},MQn="com.google.gwt.json.client",SQn=4194303,PQn=1048575,CQn=524288,IQn=4194304,OQn=17592186044416,AQn=1e9,$Qn=-17592186044416,LQn="java.io",NQn={3:1,102:1,73:1,60:1,78:1},xQn={3:1,289:1,78:1},DQn='For input string: "',RQn=1/0,KQn=-1/0,_Qn=4096,FQn={3:1,4:1,364:1},BQn=65536,HQn=55296,qQn={104:1,3:1,4:1},GQn=1e5,zQn=.3010299956639812,UQn=4294967295,XQn=4294967296,WQn="0.0",VQn={42:1},QQn={3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1},YQn={3:1,20:1,28:1,52:1,14:1,15:1,54:1},JQn={20:1,14:1,15:1},ZQn={3:1,62:1},nYn={182:1},tYn={3:1,4:1,83:1},eYn={3:1,4:1,20:1,28:1,14:1,53:1,21:1},iYn="delete",rYn=1.4901161193847656e-8,cYn=11102230246251565e-32,aYn=15525485,uYn=5.960464477539063e-8,oYn=16777216,sYn=16777215,hYn=", length: ",fYn={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1},lYn={3:1,35:1,22:1,297:1},bYn="java.util.function",wYn="java.util.logging",dYn={3:1,4:1,5:1,842:1},gYn="undefined",pYn="java.util.stream",vYn={525:1,670:1},mYn="fromIndex: ",yYn=" > toIndex: ",kYn=", toIndex: ",jYn="Index: ",EYn=", Size: ",TYn="org.eclipse.elk.alg.common",MYn={62:1},SYn="org.eclipse.elk.alg.common.compaction",PYn="Scanline/EventHandler",CYn="org.eclipse.elk.alg.common.compaction.oned",IYn="CNode belongs to another CGroup.",OYn="ISpacingsHandler/1",AYn="The ",$Yn=" instance has been finished already.",LYn="The direction ",NYn=" is not supported by the CGraph instance.",xYn="OneDimensionalCompactor",DYn="OneDimensionalCompactor/lambda$0$Type",RYn="Quadruplet",KYn="ScanlineConstraintCalculator",_Yn="ScanlineConstraintCalculator/ConstraintsScanlineHandler",FYn="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",BYn="ScanlineConstraintCalculator/Timestamp",HYn="ScanlineConstraintCalculator/lambda$0$Type",qYn={169:1,45:1},GYn="org.eclipse.elk.alg.common.compaction.options",zYn="org.eclipse.elk.core.data",UYn="org.eclipse.elk.polyomino.traversalStrategy",XYn="org.eclipse.elk.polyomino.lowLevelSort",WYn="org.eclipse.elk.polyomino.highLevelSort",VYn="org.eclipse.elk.polyomino.fill",QYn={130:1},YYn="polyomino",JYn="org.eclipse.elk.alg.common.networksimplex",ZYn={177:1,3:1,4:1},nJn="org.eclipse.elk.alg.common.nodespacing",tJn="org.eclipse.elk.alg.common.nodespacing.cellsystem",eJn="CENTER",iJn={212:1,326:1},rJn={3:1,4:1,5:1,595:1},cJn="LEFT",aJn="RIGHT",uJn="Vertical alignment cannot be null",oJn="BOTTOM",sJn="org.eclipse.elk.alg.common.nodespacing.internal",hJn="UNDEFINED",fJn=.01,lJn="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",bJn="LabelPlacer/lambda$0$Type",wJn="LabelPlacer/lambda$1$Type",dJn="portRatioOrPosition",gJn="org.eclipse.elk.alg.common.overlaps",pJn="DOWN",vJn="org.eclipse.elk.alg.common.polyomino",mJn="NORTH",yJn="EAST",kJn="SOUTH",jJn="WEST",EJn="org.eclipse.elk.alg.common.polyomino.structures",TJn="Direction",MJn="Grid is only of size ",SJn=". Requested point (",PJn=") is out of bounds.",CJn=" Given center based coordinates were (",IJn="org.eclipse.elk.graph.properties",OJn="IPropertyHolder",AJn={3:1,94:1,134:1},$Jn="org.eclipse.elk.alg.common.spore",LJn="org.eclipse.elk.alg.common.utils",NJn={209:1},xJn="org.eclipse.elk.core",DJn="Connected Components Compaction",RJn="org.eclipse.elk.alg.disco",KJn="org.eclipse.elk.alg.disco.graph",_Jn="org.eclipse.elk.alg.disco.options",FJn="CompactionStrategy",BJn="org.eclipse.elk.disco.componentCompaction.strategy",HJn="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",qJn="org.eclipse.elk.disco.debug.discoGraph",GJn="org.eclipse.elk.disco.debug.discoPolys",zJn="componentCompaction",UJn="org.eclipse.elk.disco",XJn="org.eclipse.elk.spacing.componentComponent",WJn="org.eclipse.elk.edge.thickness",VJn="org.eclipse.elk.aspectRatio",QJn="org.eclipse.elk.padding",YJn="org.eclipse.elk.alg.disco.transform",JJn=1.5707963267948966,ZJn=17976931348623157e292,nZn={3:1,4:1,5:1,192:1},tZn={3:1,6:1,4:1,5:1,106:1,120:1},eZn="org.eclipse.elk.alg.force",iZn="ComponentsProcessor",rZn="ComponentsProcessor/1",cZn="org.eclipse.elk.alg.force.graph",aZn="Component Layout",uZn="org.eclipse.elk.alg.force.model",oZn="org.eclipse.elk.force.model",sZn="org.eclipse.elk.force.iterations",hZn="org.eclipse.elk.force.repulsivePower",fZn="org.eclipse.elk.force.temperature",lZn=.001,bZn="org.eclipse.elk.force.repulsion",wZn="org.eclipse.elk.alg.force.options",dZn=1.600000023841858,gZn="org.eclipse.elk.force",pZn="org.eclipse.elk.priority",vZn="org.eclipse.elk.spacing.nodeNode",mZn="org.eclipse.elk.spacing.edgeLabel",yZn="org.eclipse.elk.randomSeed",kZn="org.eclipse.elk.separateConnectedComponents",jZn="org.eclipse.elk.interactive",EZn="org.eclipse.elk.portConstraints",TZn="org.eclipse.elk.edgeLabels.inline",MZn="org.eclipse.elk.omitNodeMicroLayout",SZn="org.eclipse.elk.nodeSize.options",PZn="org.eclipse.elk.nodeSize.constraints",CZn="org.eclipse.elk.nodeLabels.placement",IZn="org.eclipse.elk.portLabels.placement",OZn="origin",AZn="random",$Zn="boundingBox.upLeft",LZn="boundingBox.lowRight",NZn="org.eclipse.elk.stress.fixed",xZn="org.eclipse.elk.stress.desiredEdgeLength",DZn="org.eclipse.elk.stress.dimension",RZn="org.eclipse.elk.stress.epsilon",KZn="org.eclipse.elk.stress.iterationLimit",_Zn="org.eclipse.elk.stress",FZn="ELK Stress",BZn="org.eclipse.elk.nodeSize.minimum",HZn="org.eclipse.elk.alg.force.stress",qZn="Layered layout",GZn="org.eclipse.elk.alg.layered",zZn="org.eclipse.elk.alg.layered.compaction.components",UZn="org.eclipse.elk.alg.layered.compaction.oned",XZn="org.eclipse.elk.alg.layered.compaction.oned.algs",WZn="org.eclipse.elk.alg.layered.compaction.recthull",VZn="org.eclipse.elk.alg.layered.components",QZn="NONE",YZn={3:1,6:1,4:1,9:1,5:1,122:1},JZn={3:1,6:1,4:1,5:1,141:1,106:1,120:1},ZZn="org.eclipse.elk.alg.layered.compound",n1n={51:1},t1n="org.eclipse.elk.alg.layered.graph",e1n=" -> ",i1n="Not supported by LGraph",r1n="Port side is undefined",c1n={3:1,6:1,4:1,5:1,474:1,141:1,106:1,120:1},a1n={3:1,6:1,4:1,5:1,141:1,193:1,203:1,106:1,120:1},u1n={3:1,6:1,4:1,5:1,141:1,1943:1,203:1,106:1,120:1},o1n="([{\"' \t\r\n",s1n=")]}\"' \t\r\n",h1n="The given string contains parts that cannot be parsed as numbers.",f1n="org.eclipse.elk.core.math",l1n={3:1,4:1,142:1,207:1,414:1},b1n={3:1,4:1,116:1,207:1,414:1},w1n="org.eclipse.elk.layered",d1n="org.eclipse.elk.alg.layered.graph.transform",g1n="ElkGraphImporter",p1n="ElkGraphImporter/lambda$0$Type",v1n="ElkGraphImporter/lambda$1$Type",m1n="ElkGraphImporter/lambda$2$Type",y1n="ElkGraphImporter/lambda$4$Type",k1n="Node margin calculation",j1n="org.eclipse.elk.alg.layered.intermediate",E1n="ONE_SIDED_GREEDY_SWITCH",T1n="TWO_SIDED_GREEDY_SWITCH",M1n="No implementation is available for the layout processor ",S1n="IntermediateProcessorStrategy",P1n="Node '",C1n="FIRST_SEPARATE",I1n="LAST_SEPARATE",O1n="Odd port side processing",A1n="org.eclipse.elk.alg.layered.intermediate.compaction",$1n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",L1n="org.eclipse.elk.alg.layered.p3order.counting",N1n={225:1},x1n="org.eclipse.elk.alg.layered.intermediate.loops",D1n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",R1n="org.eclipse.elk.alg.layered.intermediate.loops.routing",K1n="org.eclipse.elk.alg.layered.intermediate.preserveorder",_1n="org.eclipse.elk.alg.layered.intermediate.wrapping",F1n="org.eclipse.elk.alg.layered.options",B1n="INTERACTIVE",H1n="DEPTH_FIRST",q1n="EDGE_LENGTH",G1n="SELF_LOOPS",z1n="firstTryWithInitialOrder",U1n="org.eclipse.elk.layered.directionCongruency",X1n="org.eclipse.elk.layered.feedbackEdges",W1n="org.eclipse.elk.layered.interactiveReferencePoint",V1n="org.eclipse.elk.layered.mergeEdges",Q1n="org.eclipse.elk.layered.mergeHierarchyEdges",Y1n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",J1n="org.eclipse.elk.layered.portSortingStrategy",Z1n="org.eclipse.elk.layered.thoroughness",n0n="org.eclipse.elk.layered.unnecessaryBendpoints",t0n="org.eclipse.elk.layered.generatePositionAndLayerIds",e0n="org.eclipse.elk.layered.cycleBreaking.strategy",i0n="org.eclipse.elk.layered.layering.strategy",r0n="org.eclipse.elk.layered.layering.layerConstraint",c0n="org.eclipse.elk.layered.layering.layerChoiceConstraint",a0n="org.eclipse.elk.layered.layering.layerId",u0n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",o0n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",s0n="org.eclipse.elk.layered.layering.nodePromotion.strategy",h0n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",f0n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",l0n="org.eclipse.elk.layered.crossingMinimization.strategy",b0n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",w0n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",d0n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",g0n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",p0n="org.eclipse.elk.layered.crossingMinimization.positionId",v0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",m0n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",y0n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k0n="org.eclipse.elk.layered.nodePlacement.strategy",j0n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",E0n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",T0n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M0n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",S0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",P0n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",C0n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",I0n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",O0n="org.eclipse.elk.layered.edgeRouting.splines.mode",A0n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",$0n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",L0n="org.eclipse.elk.layered.spacing.baseValue",N0n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",x0n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",D0n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",R0n="org.eclipse.elk.layered.priority.direction",K0n="org.eclipse.elk.layered.priority.shortness",_0n="org.eclipse.elk.layered.priority.straightness",F0n="org.eclipse.elk.layered.compaction.connectedComponents",B0n="org.eclipse.elk.layered.compaction.postCompaction.strategy",H0n="org.eclipse.elk.layered.compaction.postCompaction.constraints",q0n="org.eclipse.elk.layered.highDegreeNodes.treatment",G0n="org.eclipse.elk.layered.highDegreeNodes.threshold",z0n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U0n="org.eclipse.elk.layered.wrapping.strategy",X0n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",W0n="org.eclipse.elk.layered.wrapping.correctionFactor",V0n="org.eclipse.elk.layered.wrapping.cutting.strategy",Q0n="org.eclipse.elk.layered.wrapping.cutting.cuts",Y0n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",J0n="org.eclipse.elk.layered.wrapping.validify.strategy",Z0n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",n2n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",t2n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",e2n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",i2n="org.eclipse.elk.layered.edgeLabels.sideSelection",r2n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",c2n="org.eclipse.elk.layered.considerModelOrder.strategy",a2n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",u2n="org.eclipse.elk.layered.considerModelOrder.components",o2n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",s2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",h2n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",f2n="layering",l2n="layering.minWidth",b2n="layering.nodePromotion",w2n="crossingMinimization",d2n="org.eclipse.elk.hierarchyHandling",g2n="crossingMinimization.greedySwitch",p2n="nodePlacement",v2n="nodePlacement.bk",m2n="edgeRouting",y2n="org.eclipse.elk.edgeRouting",k2n="spacing",j2n="priority",E2n="compaction",T2n="compaction.postCompaction",M2n="Specifies whether and how post-process compaction is applied.",S2n="highDegreeNodes",P2n="wrapping",C2n="wrapping.cutting",I2n="wrapping.validify",O2n="wrapping.multiEdge",A2n="edgeLabels",$2n="considerModelOrder",L2n="org.eclipse.elk.spacing.commentComment",N2n="org.eclipse.elk.spacing.commentNode",x2n="org.eclipse.elk.spacing.edgeEdge",D2n="org.eclipse.elk.spacing.edgeNode",R2n="org.eclipse.elk.spacing.labelLabel",K2n="org.eclipse.elk.spacing.labelPortHorizontal",_2n="org.eclipse.elk.spacing.labelPortVertical",F2n="org.eclipse.elk.spacing.labelNode",B2n="org.eclipse.elk.spacing.nodeSelfLoop",H2n="org.eclipse.elk.spacing.portPort",q2n="org.eclipse.elk.spacing.individual",G2n="org.eclipse.elk.port.borderOffset",z2n="org.eclipse.elk.noLayout",U2n="org.eclipse.elk.port.side",X2n="org.eclipse.elk.debugMode",W2n="org.eclipse.elk.alignment",V2n="org.eclipse.elk.insideSelfLoops.activate",Q2n="org.eclipse.elk.insideSelfLoops.yo",Y2n="org.eclipse.elk.nodeSize.fixedGraphSize",J2n="org.eclipse.elk.direction",Z2n="org.eclipse.elk.nodeLabels.padding",n3n="org.eclipse.elk.portLabels.nextToPortIfPossible",t3n="org.eclipse.elk.portLabels.treatAsGroup",e3n="org.eclipse.elk.portAlignment.default",i3n="org.eclipse.elk.portAlignment.north",r3n="org.eclipse.elk.portAlignment.south",c3n="org.eclipse.elk.portAlignment.west",a3n="org.eclipse.elk.portAlignment.east",u3n="org.eclipse.elk.contentAlignment",o3n="org.eclipse.elk.junctionPoints",s3n="org.eclipse.elk.edgeLabels.placement",h3n="org.eclipse.elk.port.index",f3n="org.eclipse.elk.commentBox",l3n="org.eclipse.elk.hypernode",b3n="org.eclipse.elk.port.anchor",w3n="org.eclipse.elk.partitioning.activate",d3n="org.eclipse.elk.partitioning.partition",g3n="org.eclipse.elk.position",p3n="org.eclipse.elk.margins",v3n="org.eclipse.elk.spacing.portsSurrounding",m3n="org.eclipse.elk.interactiveLayout",y3n="org.eclipse.elk.core.util",k3n={3:1,4:1,5:1,593:1},j3n="NETWORK_SIMPLEX",E3n={123:1,51:1},T3n="org.eclipse.elk.alg.layered.p1cycles",M3n="org.eclipse.elk.alg.layered.p2layers",S3n={402:1,225:1},P3n={832:1,3:1,4:1},C3n="org.eclipse.elk.alg.layered.p3order",I3n="org.eclipse.elk.alg.layered.p4nodes",O3n={3:1,4:1,5:1,840:1},A3n=1e-5,$3n="org.eclipse.elk.alg.layered.p4nodes.bk",L3n="org.eclipse.elk.alg.layered.p5edges",N3n="org.eclipse.elk.alg.layered.p5edges.orthogonal",x3n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",D3n=1e-6,R3n="org.eclipse.elk.alg.layered.p5edges.splines",K3n=.09999999999999998,_3n=1e-8,F3n=4.71238898038469,B3n=3.141592653589793,H3n="org.eclipse.elk.alg.mrtree",q3n="org.eclipse.elk.alg.mrtree.graph",G3n="org.eclipse.elk.alg.mrtree.intermediate",z3n="Set neighbors in level",U3n="DESCENDANTS",X3n="org.eclipse.elk.mrtree.weighting",W3n="org.eclipse.elk.mrtree.searchOrder",V3n="org.eclipse.elk.alg.mrtree.options",Q3n="org.eclipse.elk.mrtree",Y3n="org.eclipse.elk.tree",J3n="org.eclipse.elk.alg.radial",Z3n=6.283185307179586,n4n=5e-324,t4n="org.eclipse.elk.alg.radial.intermediate",e4n="org.eclipse.elk.alg.radial.intermediate.compaction",i4n={3:1,4:1,5:1,106:1},r4n="org.eclipse.elk.alg.radial.intermediate.optimization",c4n="No implementation is available for the layout option ",a4n="org.eclipse.elk.alg.radial.options",u4n="org.eclipse.elk.radial.orderId",o4n="org.eclipse.elk.radial.radius",s4n="org.eclipse.elk.radial.compactor",h4n="org.eclipse.elk.radial.compactionStepSize",f4n="org.eclipse.elk.radial.sorter",l4n="org.eclipse.elk.radial.wedgeCriteria",b4n="org.eclipse.elk.radial.optimizationCriteria",w4n="org.eclipse.elk.radial",d4n="org.eclipse.elk.alg.radial.p1position.wedge",g4n="org.eclipse.elk.alg.radial.sorting",p4n=5.497787143782138,v4n=3.9269908169872414,m4n=2.356194490192345,y4n="org.eclipse.elk.alg.rectpacking",k4n="org.eclipse.elk.alg.rectpacking.firstiteration",j4n="org.eclipse.elk.alg.rectpacking.options",E4n="org.eclipse.elk.rectpacking.optimizationGoal",T4n="org.eclipse.elk.rectpacking.lastPlaceShift",M4n="org.eclipse.elk.rectpacking.currentPosition",S4n="org.eclipse.elk.rectpacking.desiredPosition",P4n="org.eclipse.elk.rectpacking.onlyFirstIteration",C4n="org.eclipse.elk.rectpacking.rowCompaction",I4n="org.eclipse.elk.rectpacking.expandToAspectRatio",O4n="org.eclipse.elk.rectpacking.targetWidth",A4n="org.eclipse.elk.expandNodes",$4n="org.eclipse.elk.rectpacking",L4n="org.eclipse.elk.alg.rectpacking.util",N4n="No implementation available for ",x4n="org.eclipse.elk.alg.spore",D4n="org.eclipse.elk.alg.spore.options",R4n="org.eclipse.elk.sporeCompaction",K4n="org.eclipse.elk.underlyingLayoutAlgorithm",_4n="org.eclipse.elk.processingOrder.treeConstruction",F4n="org.eclipse.elk.processingOrder.spanningTreeCostFunction",B4n="org.eclipse.elk.processingOrder.preferredRoot",H4n="org.eclipse.elk.processingOrder.rootSelection",q4n="org.eclipse.elk.structure.structureExtractionStrategy",G4n="org.eclipse.elk.compaction.compactionStrategy",z4n="org.eclipse.elk.compaction.orthogonal",U4n="org.eclipse.elk.overlapRemoval.maxIterations",X4n="org.eclipse.elk.overlapRemoval.runScanline",W4n="processingOrder",V4n="overlapRemoval",Q4n="org.eclipse.elk.sporeOverlap",Y4n="org.eclipse.elk.alg.spore.p1structure",J4n="org.eclipse.elk.alg.spore.p2processingorder",Z4n="org.eclipse.elk.alg.spore.p3execution",n5n="Invalid index: ",t5n="org.eclipse.elk.core.alg",e5n={331:1},i5n={288:1},r5n="Make sure its type is registered with the ",c5n=" utility class.",a5n="true",u5n="false",o5n="Couldn't clone property '",s5n=.05,h5n="org.eclipse.elk.core.options",f5n=1.2999999523162842,l5n="org.eclipse.elk.box",b5n="org.eclipse.elk.box.packingMode",w5n="org.eclipse.elk.algorithm",d5n="org.eclipse.elk.resolvedAlgorithm",g5n="org.eclipse.elk.bendPoints",p5n="org.eclipse.elk.labelManager",v5n="org.eclipse.elk.scaleFactor",m5n="org.eclipse.elk.animate",y5n="org.eclipse.elk.animTimeFactor",k5n="org.eclipse.elk.layoutAncestors",j5n="org.eclipse.elk.maxAnimTime",E5n="org.eclipse.elk.minAnimTime",T5n="org.eclipse.elk.progressBar",M5n="org.eclipse.elk.validateGraph",S5n="org.eclipse.elk.validateOptions",P5n="org.eclipse.elk.zoomToFit",C5n="org.eclipse.elk.font.name",I5n="org.eclipse.elk.font.size",O5n="org.eclipse.elk.edge.type",A5n="partitioning",$5n="nodeLabels",L5n="portAlignment",N5n="nodeSize",x5n="port",D5n="portLabels",R5n="insideSelfLoops",K5n="org.eclipse.elk.fixed",_5n="org.eclipse.elk.random",F5n="port must have a parent node to calculate the port side",B5n="The edge needs to have exactly one edge section. Found: ",H5n="org.eclipse.elk.core.util.adapters",q5n="org.eclipse.emf.ecore",G5n="org.eclipse.elk.graph",z5n="EMapPropertyHolder",U5n="ElkBendPoint",X5n="ElkGraphElement",W5n="ElkConnectableShape",V5n="ElkEdge",Q5n="ElkEdgeSection",Y5n="EModelElement",J5n="ENamedElement",Z5n="ElkLabel",n6n="ElkNode",t6n="ElkPort",e6n={92:1,90:1},i6n="org.eclipse.emf.common.notify.impl",r6n="The feature '",c6n="' is not a valid changeable feature",a6n="Expecting null",u6n="' is not a valid feature",o6n="The feature ID",s6n=" is not a valid feature ID",h6n=32768,f6n={105:1,92:1,90:1,56:1,49:1,97:1},l6n="org.eclipse.emf.ecore.impl",b6n="org.eclipse.elk.graph.impl",w6n="Recursive containment not allowed for ",d6n="The datatype '",g6n="' is not a valid classifier",p6n="The value '",v6n={190:1,3:1,4:1},m6n="The class '",y6n="http://www.eclipse.org/elk/ElkGraph",k6n=1024,j6n="property",E6n="value",T6n="source",M6n="properties",S6n="identifier",P6n="height",C6n="width",I6n="parent",O6n="text",A6n="children",$6n="hierarchical",L6n="sources",N6n="targets",x6n="sections",D6n="bendPoints",R6n="outgoingShape",K6n="incomingShape",_6n="outgoingSections",F6n="incomingSections",B6n="org.eclipse.emf.common.util",H6n="Severe implementation error in the Json to ElkGraph importer.",q6n="id",G6n="org.eclipse.elk.graph.json",z6n="Unhandled parameter types: ",U6n="startPoint",X6n="An edge must have at least one source and one target (edge id: '",W6n="').",V6n="Referenced edge section does not exist: ",Q6n=" (edge id: '",Y6n="target",J6n="sourcePoint",Z6n="targetPoint",n8n="group",t8n="name",e8n="connectableShape cannot be null",i8n="edge cannot be null",r8n="Passed edge is not 'simple'.",c8n="org.eclipse.elk.graph.util",a8n="The 'no duplicates' constraint is violated",u8n="targetIndex=",o8n=", size=",s8n="sourceIndex=",h8n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1},f8n={3:1,4:1,20:1,28:1,52:1,14:1,47:1,15:1,54:1,67:1,63:1,58:1,588:1},l8n="logging",b8n="measureExecutionTime",w8n="parser.parse.1",d8n="parser.parse.2",g8n="parser.next.1",p8n="parser.next.2",v8n="parser.next.3",m8n="parser.next.4",y8n="parser.factor.1",k8n="parser.factor.2",j8n="parser.factor.3",E8n="parser.factor.4",T8n="parser.factor.5",M8n="parser.factor.6",S8n="parser.atom.1",P8n="parser.atom.2",C8n="parser.atom.3",I8n="parser.atom.4",O8n="parser.atom.5",A8n="parser.cc.1",$8n="parser.cc.2",L8n="parser.cc.3",N8n="parser.cc.5",x8n="parser.cc.6",D8n="parser.cc.7",R8n="parser.cc.8",K8n="parser.ope.1",_8n="parser.ope.2",F8n="parser.ope.3",B8n="parser.descape.1",H8n="parser.descape.2",q8n="parser.descape.3",G8n="parser.descape.4",z8n="parser.descape.5",U8n="parser.process.1",X8n="parser.quantifier.1",W8n="parser.quantifier.2",V8n="parser.quantifier.3",Q8n="parser.quantifier.4",Y8n="parser.quantifier.5",J8n="org.eclipse.emf.common.notify",Z8n={415:1,672:1},n9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1},t9n={366:1,143:1},e9n="index=",i9n={3:1,4:1,5:1,126:1},r9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,58:1},c9n={3:1,6:1,4:1,5:1,192:1},a9n={3:1,4:1,5:1,165:1,367:1},u9n=";/?:@&=+$,",o9n="invalid authority: ",s9n="EAnnotation",h9n="ETypedElement",f9n="EStructuralFeature",l9n="EAttribute",b9n="EClassifier",w9n="EEnumLiteral",d9n="EGenericType",g9n="EOperation",p9n="EParameter",v9n="EReference",m9n="ETypeParameter",y9n="org.eclipse.emf.ecore.util",k9n={76:1},j9n={3:1,20:1,14:1,15:1,58:1,589:1,76:1,69:1,95:1},E9n="org.eclipse.emf.ecore.util.FeatureMap$Entry",T9n=8192,M9n=2048,S9n="byte",P9n="char",C9n="double",I9n="float",O9n="int",A9n="long",$9n="short",L9n="java.lang.Object",N9n={3:1,4:1,5:1,247:1},x9n={3:1,4:1,5:1,673:1},D9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,69:1},R9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,69:1,95:1},K9n="mixed",_9n="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",F9n="kind",B9n={3:1,4:1,5:1,674:1},H9n={3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,76:1,69:1,95:1},q9n={20:1,28:1,52:1,14:1,15:1,58:1,69:1},G9n={47:1,125:1,279:1},z9n={72:1,332:1},U9n="The value of type '",X9n="' must be of type '",W9n=1316,V9n="http://www.eclipse.org/emf/2002/Ecore",Q9n=-32768,Y9n="constraints",J9n="baseType",Z9n="getEStructuralFeature",n7n="getFeatureID",t7n="feature",e7n="getOperationID",i7n="operation",r7n="defaultValue",c7n="eTypeParameters",a7n="isInstance",u7n="getEEnumLiteral",o7n="eContainingClass",s7n={55:1},h7n={3:1,4:1,5:1,119:1},f7n="org.eclipse.emf.ecore.resource",l7n={92:1,90:1,591:1,1935:1},b7n="org.eclipse.emf.ecore.resource.impl",w7n="unspecified",d7n="simple",g7n="attribute",p7n="attributeWildcard",v7n="element",m7n="elementWildcard",y7n="collapse",k7n="itemType",j7n="namespace",E7n="##targetNamespace",T7n="whiteSpace",M7n="wildcards",S7n="http://www.eclipse.org/emf/2003/XMLType",P7n="##any",C7n="uninitialized",I7n="The multiplicity constraint is violated",O7n="org.eclipse.emf.ecore.xml.type",A7n="ProcessingInstruction",$7n="SimpleAnyType",L7n="XMLTypeDocumentRoot",N7n="org.eclipse.emf.ecore.xml.type.impl",x7n="INF",D7n="processing",R7n="ENTITIES_._base",K7n="minLength",_7n="ENTITY",F7n="NCName",B7n="IDREFS_._base",H7n="integer",q7n="token",G7n="pattern",z7n="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",U7n="\\i\\c*",X7n="[\\i-[:]][\\c-[:]]*",W7n="nonPositiveInteger",V7n="maxInclusive",Q7n="NMTOKEN",Y7n="NMTOKENS_._base",J7n="nonNegativeInteger",Z7n="minInclusive",nnt="normalizedString",tnt="unsignedByte",ent="unsignedInt",int="18446744073709551615",rnt="unsignedShort",cnt="processingInstruction",ant="org.eclipse.emf.ecore.xml.type.internal",unt=1114111,ont="Internal Error: shorthands: \\u",snt="xml:isDigit",hnt="xml:isWord",fnt="xml:isSpace",lnt="xml:isNameChar",bnt="xml:isInitialNameChar",wnt="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",dnt="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",gnt="Private Use",pnt="ASSIGNED",vnt="\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",mnt="UNASSIGNED",ynt={3:1,117:1},knt="org.eclipse.emf.ecore.xml.type.util",jnt={3:1,4:1,5:1,368:1},Ent="org.eclipse.xtext.xbase.lib",Tnt="Cannot add elements to a Range",Mnt="Cannot set elements in a Range",Snt="Cannot remove elements from a Range",Pnt="locale",Cnt="default",Int="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,WMn(),wAn(1,null,{},r),MWn.Fb=function(n){return FO(this,n)},MWn.Gb=function(){return this.gm},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return nE(tsn(this))+"@"+(nsn(this)>>>0).toString(16)},MWn.equals=function(n){return this.Fb(n)},MWn.hashCode=function(){return this.Hb()},MWn.toString=function(){return this.Ib()},wAn(290,1,{290:1,2026:1},pon),MWn.le=function(n){var t;return(t=new pon).i=4,t.c=n>1?gZ(this,n-1):this,t},MWn.me=function(){return ED(this),this.b},MWn.ne=function(){return nE(this)},MWn.oe=function(){return ED(this),this.k},MWn.pe=function(){return 0!=(4&this.i)},MWn.qe=function(){return 0!=(1&this.i)},MWn.Ib=function(){return utn(this)},MWn.i=0;var Ont,Ant=vX(RWn,"Object",1),$nt=vX(RWn,"Class",290);wAn(1998,1,KWn),vX(_Wn,"Optional",1998),wAn(1170,1998,KWn,c),MWn.Fb=function(n){return n===this},MWn.Hb=function(){return 2040732332},MWn.Ib=function(){return"Optional.absent()"},MWn.Jb=function(n){return yX(n),iy(),Ont},vX(_Wn,"Absent",1170),wAn(628,1,{},mk),vX(_Wn,"Joiner",628);var Lnt=bq(_Wn,"Predicate");wAn(582,1,{169:1,582:1,3:1,45:1},Hf),MWn.Mb=function(n){return Kon(this,n)},MWn.Lb=function(n){return Kon(this,n)},MWn.Fb=function(n){var t;return!!cL(n,582)&&(t=BB(n,582),NAn(this.a,t.a))},MWn.Hb=function(){return Fon(this.a)+306654252},MWn.Ib=function(){return wPn(this.a)},vX(_Wn,"Predicates/AndPredicate",582),wAn(408,1998,{408:1,3:1},qf),MWn.Fb=function(n){var t;return!!cL(n,408)&&(t=BB(n,408),Nfn(this.a,t.a))},MWn.Hb=function(){return 1502476572+nsn(this.a)},MWn.Ib=function(){return GWn+this.a+")"},MWn.Jb=function(n){return new qf(WQ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},vX(_Wn,"Present",408),wAn(198,1,UWn),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){bk()},vX(XWn,"UnmodifiableIterator",198),wAn(1978,198,WWn),MWn.Qb=function(){bk()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(XWn,"UnmodifiableListIterator",1978),wAn(386,1978,WWn),MWn.Ob=function(){return this.c<this.d},MWn.Sb=function(){return this.c>0},MWn.Pb=function(){if(this.c>=this.d)throw Hp(new yv);return this.Xb(this.c++)},MWn.Tb=function(){return this.c},MWn.Ub=function(){if(this.c<=0)throw Hp(new yv);return this.Xb(--this.c)},MWn.Vb=function(){return this.c-1},MWn.c=0,MWn.d=0,vX(XWn,"AbstractIndexedListIterator",386),wAn(699,198,UWn),MWn.Ob=function(){return Zin(this)},MWn.Pb=function(){return P7(this)},MWn.e=1,vX(XWn,"AbstractIterator",699),wAn(1986,1,{224:1}),MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.Fb=function(n){return jsn(this,n)},MWn.Hb=function(){return nsn(this.Zb())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return gz(this)},MWn.Ib=function(){return Bbn(this.Zb())},vX(XWn,"AbstractMultimap",1986),wAn(726,1986,VWn),MWn.$b=function(){win(this)},MWn._b=function(n){return Wj(this,n)},MWn.ac=function(){return new pT(this,this.c)},MWn.ic=function(n){return this.hc()},MWn.bc=function(){return new HL(this,this.c)},MWn.jc=function(){return this.mc(this.hc())},MWn.kc=function(){return new Hm(this)},MWn.lc=function(){return qTn(this.c.vc().Nc(),new u,64,this.d)},MWn.cc=function(n){return h6(this,n)},MWn.fc=function(n){return Nhn(this,n)},MWn.gc=function(){return this.d},MWn.mc=function(n){return SQ(),new Hb(n)},MWn.nc=function(){return new Bm(this)},MWn.oc=function(){return qTn(this.c.Cc().Nc(),new a,64,this.d)},MWn.pc=function(n,t){return new W6(this,n,t,null)},MWn.d=0,vX(XWn,"AbstractMapBasedMultimap",726),wAn(1631,726,VWn),MWn.hc=function(){return new J6(this.a)},MWn.jc=function(){return SQ(),SQ(),set},MWn.cc=function(n){return BB(h6(this,n),15)},MWn.fc=function(n){return BB(Nhn(this,n),15)},MWn.Zb=function(){return OQ(this)},MWn.Fb=function(n){return jsn(this,n)},MWn.qc=function(n){return BB(h6(this,n),15)},MWn.rc=function(n){return BB(Nhn(this,n),15)},MWn.mc=function(n){return rY(BB(n,15))},MWn.pc=function(n,t){return i3(this,n,BB(t,15),null)},vX(XWn,"AbstractListMultimap",1631),wAn(732,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()||this.e.Ob()},MWn.Pb=function(){var n;return this.e.Ob()||(n=BB(this.c.Pb(),42),this.b=n.cd(),this.a=BB(n.dd(),14),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},MWn.Qb=function(){this.e.Qb(),this.a.dc()&&this.c.Qb(),--this.d.d},vX(XWn,"AbstractMapBasedMultimap/Itr",732),wAn(1099,732,QWn,Bm),MWn.sc=function(n,t){return t},vX(XWn,"AbstractMapBasedMultimap/1",1099),wAn(1100,1,{},a),MWn.Kb=function(n){return BB(n,14).Nc()},vX(XWn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1100),wAn(1101,732,QWn,Hm),MWn.sc=function(n,t){return new vT(n,t)},vX(XWn,"AbstractMapBasedMultimap/2",1101);var Nnt=bq(YWn,"Map");wAn(1967,1,JWn),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.vc().$b()},MWn.tc=function(n){return Mmn(this,n)},MWn._b=function(n){return!!FEn(this,n,!1)},MWn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=BB(t.Pb(),42).dd(),GI(n)===GI(e)||null!=n&&Nfn(n,e))return!0;return!1},MWn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!cL(n,83))return!1;if(i=BB(n,83),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=BB(e.Pb(),42),!this.tc(t))return!1;return!0},MWn.xc=function(n){return qI(FEn(this,n,!1))},MWn.Hb=function(){return Hun(this.vc())},MWn.dc=function(){return 0==this.gc()},MWn.ec=function(){return new Cb(this)},MWn.zc=function(n,t){throw Hp(new tk("Put not supported on this map"))},MWn.Ac=function(n){Tcn(this,n)},MWn.Bc=function(n){return qI(FEn(this,n,!0))},MWn.gc=function(){return this.vc().gc()},MWn.Ib=function(){return nTn(this)},MWn.Cc=function(){return new Ob(this)},vX(YWn,"AbstractMap",1967),wAn(1987,1967,JWn),MWn.bc=function(){return new ST(this)},MWn.vc=function(){return dz(this)},MWn.ec=function(){return this.g||(this.g=this.bc())},MWn.Cc=function(){return this.i||(this.i=new PT(this))},vX(XWn,"Maps/ViewCachingAbstractMap",1987),wAn(389,1987,JWn,pT),MWn.xc=function(n){return ktn(this,n)},MWn.Bc=function(n){return Zsn(this,n)},MWn.$b=function(){this.d==this.e.c?this.e.$b():Cq(new Oq(this))},MWn._b=function(n){return gfn(this.d,n)},MWn.Ec=function(){return new Xf(this)},MWn.Dc=function(){return this.Ec()},MWn.Fb=function(n){return this===n||Nfn(this.d,n)},MWn.Hb=function(){return nsn(this.d)},MWn.ec=function(){return this.e.ec()},MWn.gc=function(){return this.d.gc()},MWn.Ib=function(){return Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/AsMap",389);var xnt=bq(RWn,"Iterable");wAn(28,1,ZWn),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){throw Hp(new tk("Add not supported on this collection"))},MWn.Gc=function(n){return Frn(this,n)},MWn.$b=function(){TV(this)},MWn.Hc=function(n){return ywn(this,n,!1)},MWn.Ic=function(n){return oun(this,n)},MWn.dc=function(){return 0==this.gc()},MWn.Mc=function(n){return ywn(this,n,!0)},MWn.Pc=function(){return cz(this)},MWn.Qc=function(n){return Emn(this,n)},MWn.Ib=function(){return LMn(this)},vX(YWn,"AbstractCollection",28);var Dnt=bq(YWn,"Set");wAn(nVn,28,tVn),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return ign(this,n)},MWn.Hb=function(){return Hun(this)},vX(YWn,"AbstractSet",nVn),wAn(1970,nVn,tVn),vX(XWn,"Sets/ImprovedAbstractSet",1970),wAn(1971,1970,tVn),MWn.$b=function(){this.Rc().$b()},MWn.Hc=function(n){return idn(this,n)},MWn.dc=function(){return this.Rc().dc()},MWn.Mc=function(n){var t;return!!this.Hc(n)&&(t=BB(n,42),this.Rc().ec().Mc(t.cd()))},MWn.gc=function(){return this.Rc().gc()},vX(XWn,"Maps/EntrySet",1971),wAn(1097,1971,tVn,Xf),MWn.Hc=function(n){return wfn(this.a.d.vc(),n)},MWn.Kc=function(){return new Oq(this.a)},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!wfn(this.a.d.vc(),n)&&(t=BB(n,42),H5(this.a.e,t.cd()),!0)},MWn.Nc=function(){return RB(this.a.d.vc().Nc(),new Wf(this.a))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1097),wAn(1098,1,{},Wf),MWn.Kb=function(n){return i5(this.a,BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1098),wAn(730,1,QWn,Oq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){var n;return n=BB(this.b.Pb(),42),this.a=BB(n.dd(),14),i5(this.c,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Qb=function(){han(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",730),wAn(532,1970,tVn,ST),MWn.$b=function(){this.b.$b()},MWn.Hc=function(n){return this.b._b(n)},MWn.Jc=function(n){yX(n),this.b.wc(new vl(n))},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new ly(this.b.vc().Kc())},MWn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},MWn.gc=function(){return this.b.gc()},vX(XWn,"Maps/KeySet",532),wAn(318,532,tVn,HL),MWn.$b=function(){Cq(new eT(this,this.b.vc().Kc()))},MWn.Ic=function(n){return this.b.ec().Ic(n)},MWn.Fb=function(n){return this===n||Nfn(this.b.ec(),n)},MWn.Hb=function(){return nsn(this.b.ec())},MWn.Kc=function(){return new eT(this,this.b.vc().Kc())},MWn.Mc=function(n){var t,e;return e=0,(t=BB(this.b.Bc(n),14))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/KeySet",318),wAn(731,1,QWn,eT),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.c.Ob()},MWn.Pb=function(){return this.a=BB(this.c.Pb(),42),this.a.cd()},MWn.Qb=function(){var n;han(!!this.a),n=BB(this.a.dd(),14),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},vX(XWn,"AbstractMapBasedMultimap/KeySet/1",731),wAn(491,389,{83:1,161:1},CD),MWn.bc=function(){return this.Sc()},MWn.ec=function(){return this.Tc()},MWn.Sc=function(){return new nT(this.c,this.Uc())},MWn.Tc=function(){return this.b||(this.b=this.Sc())},MWn.Uc=function(){return BB(this.d,161)},vX(XWn,"AbstractMapBasedMultimap/SortedAsMap",491),wAn(542,491,eVn,ID),MWn.bc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.Sc=function(){return new tT(this.a,BB(BB(this.d,161),171))},MWn.ec=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Tc=function(){return BB(this.b||(this.b=new tT(this.a,BB(BB(this.d,161),171))),271)},MWn.Uc=function(){return BB(BB(this.d,161),171)},vX(XWn,"AbstractMapBasedMultimap/NavigableAsMap",542),wAn(490,318,iVn,nT),MWn.Nc=function(){return this.b.ec().Nc()},vX(XWn,"AbstractMapBasedMultimap/SortedKeySet",490),wAn(388,490,rVn,tT),vX(XWn,"AbstractMapBasedMultimap/NavigableKeySet",388),wAn(541,28,ZWn,W6),MWn.Fc=function(n){var t,e;return zbn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&jR(this)),t},MWn.Gc=function(n){var t,e,i;return!n.dc()&&(zbn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&jR(this)),t)},MWn.$b=function(){var n;zbn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,$G(this))},MWn.Hc=function(n){return zbn(this),this.d.Hc(n)},MWn.Ic=function(n){return zbn(this),this.d.Ic(n)},MWn.Fb=function(n){return n===this||(zbn(this),Nfn(this.d,n))},MWn.Hb=function(){return zbn(this),nsn(this.d)},MWn.Kc=function(){return zbn(this),new QB(this)},MWn.Mc=function(n){var t;return zbn(this),(t=this.d.Mc(n))&&(--this.f.d,$G(this)),t},MWn.gc=function(){return tO(this)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Ib=function(){return zbn(this),Bbn(this.d)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection",541);var Rnt=bq(YWn,"List");wAn(728,541,{20:1,28:1,14:1,15:1},sz),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return zbn(this),this.d.Nc()},MWn.Vc=function(n,t){var e;zbn(this),e=this.d.dc(),BB(this.d,15).Vc(n,t),++this.a.d,e&&jR(this)},MWn.Wc=function(n,t){var e,i,r;return!t.dc()&&(zbn(this),r=this.d.gc(),(e=BB(this.d,15).Wc(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&jR(this)),e)},MWn.Xb=function(n){return zbn(this),BB(this.d,15).Xb(n)},MWn.Xc=function(n){return zbn(this),BB(this.d,15).Xc(n)},MWn.Yc=function(){return zbn(this),new g$(this)},MWn.Zc=function(n){return zbn(this),new gQ(this,n)},MWn.$c=function(n){var t;return zbn(this),t=BB(this.d,15).$c(n),--this.a.d,$G(this),t},MWn._c=function(n,t){return zbn(this),BB(this.d,15)._c(n,t)},MWn.bd=function(n,t){return zbn(this),i3(this.a,this.e,BB(this.d,15).bd(n,t),this.b?this.b:this)},vX(XWn,"AbstractMapBasedMultimap/WrappedList",728),wAn(1096,728,{20:1,28:1,14:1,15:1,54:1},Ox),vX(XWn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1096),wAn(620,1,QWn,QB),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return MV(this),this.b.Ob()},MWn.Pb=function(){return MV(this),this.b.Pb()},MWn.Qb=function(){eN(this)},vX(XWn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",620),wAn(729,620,cVn,g$,gQ),MWn.Qb=function(){eN(this)},MWn.Rb=function(n){var t;t=0==tO(this.a),(MV(this),BB(this.b,125)).Rb(n),++this.a.a.d,t&&jR(this.a)},MWn.Sb=function(){return(MV(this),BB(this.b,125)).Sb()},MWn.Tb=function(){return(MV(this),BB(this.b,125)).Tb()},MWn.Ub=function(){return(MV(this),BB(this.b,125)).Ub()},MWn.Vb=function(){return(MV(this),BB(this.b,125)).Vb()},MWn.Wb=function(n){(MV(this),BB(this.b,125)).Wb(n)},vX(XWn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",729),wAn(727,541,iVn,ND),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSortedSet",727),wAn(1095,727,rVn,AA),vX(XWn,"AbstractMapBasedMultimap/WrappedNavigableSet",1095),wAn(1094,541,tVn,xD),MWn.Nc=function(){return zbn(this),this.d.Nc()},vX(XWn,"AbstractMapBasedMultimap/WrappedSet",1094),wAn(1103,1,{},u),MWn.Kb=function(n){return F6(BB(n,42))},vX(XWn,"AbstractMapBasedMultimap/lambda$1$Type",1103),wAn(1102,1,{},Vf),MWn.Kb=function(n){return new vT(this.a,n)},vX(XWn,"AbstractMapBasedMultimap/lambda$2$Type",1102);var Knt,_nt,Fnt,Bnt,Hnt=bq(YWn,"Map/Entry");wAn(345,1,aVn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),wW(this.cd(),t.cd())&&wW(this.dd(),t.dd()))},MWn.Hb=function(){var n,t;return n=this.cd(),t=this.dd(),(null==n?0:nsn(n))^(null==t?0:nsn(t))},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(XWn,uVn,345),wAn(1988,28,ZWn),MWn.$b=function(){this.fd().$b()},MWn.Hc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),H0(this.fd(),t.cd(),t.dd()))},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),q0(this.fd(),t.cd(),t.dd()))},MWn.gc=function(){return this.fd().d},vX(XWn,"Multimaps/Entries",1988),wAn(733,1988,ZWn,Qf),MWn.Kc=function(){return this.a.kc()},MWn.fd=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"AbstractMultimap/Entries",733),wAn(734,733,tVn,qm),MWn.Nc=function(){return this.a.lc()},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"AbstractMultimap/EntrySet",734),wAn(735,28,ZWn,Yf),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return Isn(this.a,n)},MWn.Kc=function(){return this.a.nc()},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return this.a.oc()},vX(XWn,"AbstractMultimap/Values",735),wAn(1989,28,{835:1,20:1,28:1,14:1}),MWn.Jc=function(n){yX(n),EV(this).Jc(new pl(n))},MWn.Nc=function(){var n;return qTn(n=EV(this).Nc(),new y,64|1296&n.qd(),this.a.d)},MWn.Fc=function(n){return wk(),!0},MWn.Gc=function(n){return yX(this),yX(n),cL(n,543)?l2(BB(n,835)):!n.dc()&&fnn(this,n.Kc())},MWn.Hc=function(n){var t;return((t=BB(lfn(OQ(this.a),n),14))?t.gc():0)>0},MWn.Fb=function(n){return h$n(this,n)},MWn.Hb=function(){return nsn(EV(this))},MWn.dc=function(){return EV(this).dc()},MWn.Mc=function(n){return EIn(this,n,1)>0},MWn.Ib=function(){return Bbn(EV(this))},vX(XWn,"AbstractMultiset",1989),wAn(1991,1970,tVn),MWn.$b=function(){win(this.a.a)},MWn.Hc=function(n){var t;return!(!cL(n,492)||(t=BB(n,416),BB(t.a.dd(),14).gc()<=0||c1(this.a,t.a.cd())!=BB(t.a.dd(),14).gc()))},MWn.Mc=function(n){var t,e,i;return!(!cL(n,492)||(t=(e=BB(n,416)).a.cd(),0==(i=BB(e.a.dd(),14).gc())))&&TIn(this.a,t,i)},vX(XWn,"Multisets/EntrySet",1991),wAn(1109,1991,tVn,Jf),MWn.Kc=function(){return new wy(dz(OQ(this.a.a)).Kc())},MWn.gc=function(){return OQ(this.a.a).gc()},vX(XWn,"AbstractMultiset/EntrySet",1109),wAn(619,726,VWn),MWn.hc=function(){return this.gd()},MWn.jc=function(){return this.hd()},MWn.cc=function(n){return this.jd(n)},MWn.fc=function(n){return this.kd(n)},MWn.Zb=function(){return this.f||(this.f=this.ac())},MWn.hd=function(){return SQ(),SQ(),fet},MWn.Fb=function(n){return jsn(this,n)},MWn.jd=function(n){return BB(h6(this,n),21)},MWn.kd=function(n){return BB(Nhn(this,n),21)},MWn.mc=function(n){return SQ(),new Ak(BB(n,21))},MWn.pc=function(n,t){return new xD(this,n,BB(t,21))},vX(XWn,"AbstractSetMultimap",619),wAn(1657,619,VWn),MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.jc=function(){return IX(new dE(this.b))},MWn.hd=function(){return IX(new dE(this.b))},MWn.cc=function(n){return BB(BB(h6(this,n),21),84)},MWn.jd=function(n){return BB(BB(h6(this,n),21),84)},MWn.fc=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.kd=function(n){return BB(BB(Nhn(this,n),21),84)},MWn.mc=function(n){return cL(n,271)?IX(BB(n,271)):(SQ(),new dN(BB(n,84)))},MWn.Zb=function(){return this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c))},MWn.pc=function(n,t){return cL(t,271)?new AA(this,n,BB(t,271)):new ND(this,n,BB(t,84))},vX(XWn,"AbstractSortedSetMultimap",1657),wAn(1658,1657,VWn),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.bc=function(){return cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)},vX(XWn,"AbstractSortedKeySortedSetMultimap",1658),wAn(2010,1,{1947:1}),MWn.Fb=function(n){return Cjn(this,n)},MWn.Hb=function(){return Hun(this.g||(this.g=new Zf(this)))},MWn.Ib=function(){return nTn(this.f||(this.f=new UL(this)))},vX(XWn,"AbstractTable",2010),wAn(665,nVn,tVn,Zf),MWn.$b=function(){dk()},MWn.Hc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WI(t.c.e,t.b)),83))&&wfn(e.vc(),new vT(WI(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.Kc=function(){return ZQ(this.a)},MWn.Mc=function(n){var t,e;return!!cL(n,468)&&(t=BB(n,682),!!(e=BB(lfn(jX(this.a),WI(t.c.e,t.b)),83))&&dfn(e.vc(),new vT(WI(t.c.c,t.a),U6(t.c,t.b,t.a))))},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return P2(this.a)},vX(XWn,"AbstractTable/CellSet",665),wAn(1928,28,ZWn,nl),MWn.$b=function(){dk()},MWn.Hc=function(n){return hTn(this.a,n)},MWn.Kc=function(){return nY(this.a)},MWn.gc=function(){return zq(this.a)},MWn.Nc=function(){return Y0(this.a)},vX(XWn,"AbstractTable/Values",1928),wAn(1632,1631,VWn),vX(XWn,"ArrayListMultimapGwtSerializationDependencies",1632),wAn(513,1632,VWn,ok,o1),MWn.hc=function(){return new J6(this.a)},MWn.a=0,vX(XWn,"ArrayListMultimap",513),wAn(664,2010,{664:1,1947:1,3:1},vOn),vX(XWn,"ArrayTable",664),wAn(1924,386,WWn,qL),MWn.Xb=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1",1924),wAn(1925,1,{},Gf),MWn.ld=function(n){return new gon(this.a,n)},vX(XWn,"ArrayTable/1methodref$getCell$Type",1925),wAn(2011,1,{682:1}),MWn.Fb=function(n){var t;return n===this||!!cL(n,468)&&(t=BB(n,682),wW(WI(this.c.e,this.b),WI(t.c.e,t.b))&&wW(WI(this.c.c,this.a),WI(t.c.c,t.a))&&wW(U6(this.c,this.b,this.a),U6(t.c,t.b,t.a)))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[WI(this.c.e,this.b),WI(this.c.c,this.a),U6(this.c,this.b,this.a)]))},MWn.Ib=function(){return"("+WI(this.c.e,this.b)+","+WI(this.c.c,this.a)+")="+U6(this.c,this.b,this.a)},vX(XWn,"Tables/AbstractCell",2011),wAn(468,2011,{468:1,682:1},gon),MWn.a=0,MWn.b=0,MWn.d=0,vX(XWn,"ArrayTable/2",468),wAn(1927,1,{},zf),MWn.ld=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/2methodref$getValue$Type",1927),wAn(1926,386,WWn,GL),MWn.Xb=function(n){return Y9(this.a,n)},vX(XWn,"ArrayTable/3",1926),wAn(1979,1967,JWn),MWn.$b=function(){Cq(this.kc())},MWn.vc=function(){return new ml(this)},MWn.lc=function(){return new CV(this.kc(),this.gc())},vX(XWn,"Maps/IteratorBasedAbstractMap",1979),wAn(828,1979,JWn),MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return Yj(this.c,n)},MWn.kc=function(){return new zL(this,this.c.b.c.gc())},MWn.lc=function(){return yq(this.c.b.c.gc(),16,new Uf(this))},MWn.xc=function(n){var t;return(t=BB(UK(this.c,n),19))?this.nd(t.a):null},MWn.dc=function(){return this.c.b.c.dc()},MWn.ec=function(){return bz(this.c)},MWn.zc=function(n,t){var e;if(!(e=BB(UK(this.c,n),19)))throw Hp(new _y(this.md()+" "+n+" not in "+bz(this.c)));return this.od(e.a,t)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.b.c.gc()},vX(XWn,"ArrayTable/ArrayMap",828),wAn(1923,1,{},Uf),MWn.ld=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",1923),wAn(1921,345,aVn,sT),MWn.cd=function(){return YL(this.a,this.b)},MWn.dd=function(){return this.a.nd(this.b)},MWn.ed=function(n){return this.a.od(this.b,n)},MWn.b=0,vX(XWn,"ArrayTable/ArrayMap/1",1921),wAn(1922,386,WWn,zL),MWn.Xb=function(n){return OX(this.a,n)},vX(XWn,"ArrayTable/ArrayMap/2",1922),wAn(1920,828,JWn,cU),MWn.md=function(){return"Column"},MWn.nd=function(n){return U6(this.b,this.a,n)},MWn.od=function(n,t){return Sun(this.b,this.a,n,t)},MWn.a=0,vX(XWn,"ArrayTable/Row",1920),wAn(829,828,JWn,UL),MWn.nd=function(n){return new cU(this.a,n)},MWn.zc=function(n,t){return BB(t,83),gk()},MWn.od=function(n,t){return BB(t,83),pk()},MWn.md=function(){return"Row"},vX(XWn,"ArrayTable/RowMap",829),wAn(1120,1,fVn,hT),MWn.qd=function(){return-262&this.a.qd()},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.Nb(new cT(n,this.b))},MWn.sd=function(n){return this.a.sd(new rT(n,this.b))},vX(XWn,"CollectSpliterators/1",1120),wAn(1121,1,lVn,rT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$0$Type",1121),wAn(1122,1,lVn,cT),MWn.td=function(n){this.a.td(this.b.Kb(n))},vX(XWn,"CollectSpliterators/1/lambda$1$Type",1122),wAn(1123,1,fVn,q2),MWn.qd=function(){return this.a},MWn.rd=function(){return this.d&&(this.b=T$(this.b,this.d.rd())),T$(this.b,0)},MWn.Nb=function(n){this.d&&(this.d.Nb(n),this.d=null),this.c.Nb(new iT(this.e,n)),this.b=0},MWn.sd=function(n){for(;;){if(this.d&&this.d.sd(n))return JI(this.b,bVn)&&(this.b=ibn(this.b,1)),!0;if(this.d=null,!this.c.sd(new aT(this,this.e)))return!1}},MWn.a=0,MWn.b=0,vX(XWn,"CollectSpliterators/1FlatMapSpliterator",1123),wAn(1124,1,lVn,aT),MWn.td=function(n){dK(this.a,this.b,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$0$Type",1124),wAn(1125,1,lVn,iT),MWn.td=function(n){oL(this.b,this.a,n)},vX(XWn,"CollectSpliterators/1FlatMapSpliterator/lambda$1$Type",1125),wAn(1117,1,fVn,wK),MWn.qd=function(){return 16464|this.b},MWn.rd=function(){return this.a.rd()},MWn.Nb=function(n){this.a.xe(new oT(n,this.c))},MWn.sd=function(n){return this.a.ye(new uT(n,this.c))},MWn.b=0,vX(XWn,"CollectSpliterators/1WithCharacteristics",1117),wAn(1118,1,wVn,uT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1118),wAn(1119,1,wVn,oT),MWn.ud=function(n){this.a.td(this.b.ld(n))},vX(XWn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1119),wAn(245,1,dVn),MWn.wd=function(n){return this.vd(BB(n,245))},MWn.vd=function(n){var t;return n==(ty(),_nt)?1:n==(ey(),Knt)?-1:(nq(),0!=(t=Ncn(this.a,n.a))?t:cL(this,519)==cL(n,519)?0:cL(this,519)?1:-1)},MWn.zd=function(){return this.a},MWn.Fb=function(n){return xdn(this,n)},vX(XWn,"Cut",245),wAn(1761,245,dVn,Nk),MWn.vd=function(n){return n==this?0:1},MWn.xd=function(n){throw Hp(new hv)},MWn.yd=function(n){n.a+="+\u221e)"},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!1},MWn.Ib=function(){return"+\u221e"},vX(XWn,"Cut/AboveAll",1761),wAn(519,245,{245:1,519:1,3:1,35:1},iN),MWn.xd=function(n){uO((n.a+="(",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),93)},MWn.Hb=function(){return~nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<0},MWn.Ib=function(){return"/"+this.a+"\\"},vX(XWn,"Cut/AboveValue",519),wAn(1760,245,dVn,xk),MWn.vd=function(n){return n==this?0:-1},MWn.xd=function(n){n.a+="(-\u221e"},MWn.yd=function(n){throw Hp(new hv)},MWn.zd=function(){throw Hp(new Fy(gVn))},MWn.Hb=function(){return $T(),evn(this)},MWn.Ad=function(n){return!0},MWn.Ib=function(){return"-\u221e"},vX(XWn,"Cut/BelowAll",1760),wAn(1762,245,dVn,rN),MWn.xd=function(n){uO((n.a+="[",n),this.a)},MWn.yd=function(n){xX(uO(n,this.a),41)},MWn.Hb=function(){return nsn(this.a)},MWn.Ad=function(n){return nq(),Ncn(this.a,n)<=0},MWn.Ib=function(){return"\\"+this.a+"/"},vX(XWn,"Cut/BelowValue",1762),wAn(537,1,pVn),MWn.Jc=function(n){e5(this,n)},MWn.Ib=function(){return Hln(BB(WQ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},vX(XWn,"FluentIterable",537),wAn(433,537,pVn,OO),MWn.Kc=function(){return new oz(ZL(this.a.Kc(),new h))},vX(XWn,"FluentIterable/2",433),wAn(1046,537,pVn,AO),MWn.Kc=function(){return NU(this)},vX(XWn,"FluentIterable/3",1046),wAn(708,386,WWn,WL),MWn.Xb=function(n){return this.a[n].Kc()},vX(XWn,"FluentIterable/3/1",708),wAn(1972,1,{}),MWn.Ib=function(){return Bbn(this.Bd().b)},vX(XWn,"ForwardingObject",1972),wAn(1973,1972,vVn),MWn.Bd=function(){return this.Cd()},MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return this.Oc()},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return this.Cd(),oE()},MWn.Gc=function(n){return this.Cd(),sE()},MWn.$b=function(){this.Cd(),hE()},MWn.Hc=function(n){return this.Cd().Hc(n)},MWn.Ic=function(n){return this.Cd().Ic(n)},MWn.dc=function(){return this.Cd().b.dc()},MWn.Kc=function(){return this.Cd().Kc()},MWn.Mc=function(n){return this.Cd(),fE()},MWn.gc=function(){return this.Cd().b.gc()},MWn.Pc=function(){return this.Cd().Pc()},MWn.Qc=function(n){return this.Cd().Qc(n)},vX(XWn,"ForwardingCollection",1973),wAn(1980,28,mVn),MWn.Kc=function(){return this.Ed()},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Hc=function(n){return null!=n&&ywn(this,n,!1)},MWn.Dd=function(){switch(this.gc()){case 0:return WX(),WX(),Fnt;case 1:return WX(),new Pq(yX(this.Ed().Pb()));default:return new aU(this,this.Pc())}},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"ImmutableCollection",1980),wAn(712,1980,mVn,rv),MWn.Kc=function(){return L9(this.a.Kc())},MWn.Hc=function(n){return null!=n&&this.a.Hc(n)},MWn.Ic=function(n){return this.a.Ic(n)},MWn.dc=function(){return this.a.dc()},MWn.Ed=function(){return L9(this.a.Kc())},MWn.gc=function(){return this.a.gc()},MWn.Pc=function(){return this.a.Pc()},MWn.Qc=function(n){return this.a.Qc(n)},MWn.Ib=function(){return Bbn(this.a)},vX(XWn,"ForwardingImmutableCollection",712),wAn(152,1980,yVn),MWn.Kc=function(){return this.Ed()},MWn.Yc=function(){return this.Fd(0)},MWn.Zc=function(n){return this.Fd(n)},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.bd=function(n,t){return this.Gd(n,t)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return qAn(this,n)},MWn.Hb=function(){return Ian(this)},MWn.Xc=function(n){return null==n?-1:Tmn(this,n)},MWn.Ed=function(){return this.Fd(0)},MWn.Fd=function(n){return ix(this,n)},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.Gd=function(n,t){return sfn(new s1(new IT(this),n,t))},vX(XWn,"ImmutableList",152),wAn(2006,152,yVn),MWn.Kc=function(){return L9(this.Hd().Kc())},MWn.bd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Hc=function(n){return null!=n&&this.Hd().Hc(n)},MWn.Ic=function(n){return this.Hd().Ic(n)},MWn.Fb=function(n){return Nfn(this.Hd(),n)},MWn.Xb=function(n){return WI(this,n)},MWn.Hb=function(){return nsn(this.Hd())},MWn.Xc=function(n){return this.Hd().Xc(n)},MWn.dc=function(){return this.Hd().dc()},MWn.Ed=function(){return L9(this.Hd().Kc())},MWn.gc=function(){return this.Hd().gc()},MWn.Gd=function(n,t){return sfn(this.Hd().bd(n,t))},MWn.Pc=function(){return this.Hd().Qc(x8(Ant,HWn,1,this.Hd().gc(),5,1))},MWn.Qc=function(n){return this.Hd().Qc(n)},MWn.Ib=function(){return Bbn(this.Hd())},vX(XWn,"ForwardingImmutableList",2006),wAn(714,1,jVn),MWn.vc=function(){return lz(this)},MWn.wc=function(n){nan(this,n)},MWn.ec=function(){return bz(this)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.Cc=function(){return this.Ld()},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return null!=this.xc(n)},MWn.uc=function(n){return this.Ld().Hc(n)},MWn.Jd=function(){return new cv(this)},MWn.Kd=function(){return new av(this)},MWn.Fb=function(n){return $sn(this,n)},MWn.Hb=function(){return lz(this).Hb()},MWn.dc=function(){return 0==this.gc()},MWn.zc=function(n,t){return vk()},MWn.Bc=function(n){throw Hp(new pv)},MWn.Ib=function(){return fSn(this)},MWn.Ld=function(){return this.e?this.e:this.e=this.Kd()},MWn.c=null,MWn.d=null,MWn.e=null,vX(XWn,"ImmutableMap",714),wAn(715,714,jVn),MWn._b=function(n){return Yj(this,n)},MWn.uc=function(n){return _T(this.b,n)},MWn.Id=function(){return hfn(new el(this))},MWn.Jd=function(){return hfn(iV(this.b))},MWn.Kd=function(){return s_(),new rv(tV(this.b))},MWn.Fb=function(n){return BT(this.b,n)},MWn.xc=function(n){return UK(this,n)},MWn.Hb=function(){return nsn(this.b.c)},MWn.dc=function(){return this.b.c.dc()},MWn.gc=function(){return this.b.c.gc()},MWn.Ib=function(){return Bbn(this.b.c)},vX(XWn,"ForwardingImmutableMap",715),wAn(1974,1973,EVn),MWn.Bd=function(){return this.Md()},MWn.Cd=function(){return this.Md()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return n===this||this.Md().Fb(n)},MWn.Hb=function(){return this.Md().Hb()},vX(XWn,"ForwardingSet",1974),wAn(1069,1974,EVn,el),MWn.Bd=function(){return eV(this.a.b)},MWn.Cd=function(){return eV(this.a.b)},MWn.Hc=function(n){if(cL(n,42)&&null==BB(n,42).cd())return!1;try{return KT(eV(this.a.b),n)}catch(t){if(cL(t=lun(t),205))return!1;throw Hp(t)}},MWn.Md=function(){return eV(this.a.b)},MWn.Qc=function(n){var t;return t=IY(eV(this.a.b),n),eV(this.a.b).b.gc()<t.length&&$X(t,eV(this.a.b).b.gc(),null),t},vX(XWn,"ForwardingImmutableMap/1",1069),wAn(1981,1980,TVn),MWn.Kc=function(){return this.Ed()},MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return zSn(this,n)},MWn.Hb=function(){return Brn(this)},vX(XWn,"ImmutableSet",1981),wAn(703,1981,TVn),MWn.Kc=function(){return L9(new qb(this.a.b.Kc()))},MWn.Hc=function(n){return null!=n&&xT(this.a,n)},MWn.Ic=function(n){return DT(this.a,n)},MWn.Hb=function(){return nsn(this.a.b)},MWn.dc=function(){return this.a.b.dc()},MWn.Ed=function(){return L9(new qb(this.a.b.Kc()))},MWn.gc=function(){return this.a.b.gc()},MWn.Pc=function(){return this.a.b.Pc()},MWn.Qc=function(n){return RT(this.a,n)},MWn.Ib=function(){return Bbn(this.a.b)},vX(XWn,"ForwardingImmutableSet",703),wAn(1975,1974,MVn),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Nc=function(){return new wS(this)},vX(XWn,"ForwardingSortedSet",1975),wAn(533,1979,jVn,Avn),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new p$(this.d||(this.d=new il(this)))},MWn.$b=function(){d5(this)},MWn._b=function(n){return!!Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))},MWn.uc=function(n){return Ltn(this,n)},MWn.kc=function(){return new VL(this,this)},MWn.wc=function(n){BJ(this,n)},MWn.xc=function(n){return sen(this,n)},MWn.ec=function(){return new v$(this)},MWn.zc=function(n,t){return wKn(this,n,t)},MWn.Bc=function(n){var t;return(t=Jrn(this,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this,t),t.e=null,t.c=null,t.i):null},MWn.gc=function(){return this.i},MWn.pd=function(){return new p$(this.d||(this.d=new il(this)))},MWn.f=0,MWn.g=0,MWn.i=0,vX(XWn,"HashBiMap",533),wAn(534,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return l3(this)},MWn.Pb=function(){var n;if(!l3(this))throw Hp(new yv);return n=this.c,this.c=n.c,this.f=n,--this.d,this.Nd(n)},MWn.Qb=function(){if(this.e.g!=this.b)throw Hp(new vv);han(!!this.f),LLn(this.e,this.f),this.b=this.e.g,this.f=null},MWn.b=0,MWn.d=0,MWn.f=null,vX(XWn,"HashBiMap/Itr",534),wAn(1011,534,QWn,VL),MWn.Nd=function(n){return new bT(this,n)},vX(XWn,"HashBiMap/1",1011),wAn(1012,345,aVn,bT),MWn.cd=function(){return this.a.g},MWn.dd=function(){return this.a.i},MWn.ed=function(n){var t,e,i;return e=this.a.i,(i=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.f&&(GI(n)===GI(e)||null!=n&&Nfn(n,e))?n:(yun(!Zrn(this.b.a,n,i),n),LLn(this.b.a,this.a),t=new qW(this.a.g,this.a.a,n,i),YCn(this.b.a,t,this.a),this.a.e=null,this.a.c=null,this.b.b=this.b.a.g,this.b.f==this.a&&(this.b.f=t),this.a=t,e)},vX(XWn,"HashBiMap/1/MapEntry",1012),wAn(238,345,{345:1,238:1,3:1,42:1},vT),MWn.cd=function(){return this.g},MWn.dd=function(){return this.i},MWn.ed=function(n){throw Hp(new pv)},vX(XWn,"ImmutableEntry",238),wAn(317,238,{345:1,317:1,238:1,3:1,42:1},qW),MWn.a=0,MWn.f=0;var qnt,Gnt=vX(XWn,"HashBiMap/BiEntry",317);wAn(610,1979,jVn,il),MWn.Ac=function(n){Tcn(this,n)},MWn.Cc=function(){return new v$(this.a)},MWn.$b=function(){d5(this.a)},MWn._b=function(n){return Ltn(this.a,n)},MWn.kc=function(){return new QL(this,this.a)},MWn.wc=function(n){yX(n),BJ(this.a,new rl(n))},MWn.xc=function(n){return Uin(this,n)},MWn.ec=function(){return new p$(this)},MWn.zc=function(n,t){return C_n(this.a,n,t,!1)},MWn.Bc=function(n){var t;return(t=Zrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))?(LLn(this.a,t),t.e=null,t.c=null,t.g):null},MWn.gc=function(){return this.a.i},MWn.pd=function(){return new v$(this.a)},vX(XWn,"HashBiMap/Inverse",610),wAn(1008,534,QWn,QL),MWn.Nd=function(n){return new wT(this,n)},vX(XWn,"HashBiMap/Inverse/1",1008),wAn(1009,345,aVn,wT),MWn.cd=function(){return this.a.i},MWn.dd=function(){return this.a.g},MWn.ed=function(n){var t,e,i;return i=this.a.g,(t=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))==this.a.a&&(GI(n)===GI(i)||null!=n&&Nfn(n,i))?n:(yun(!Jrn(this.b.a.a,n,t),n),LLn(this.b.a.a,this.a),e=new qW(n,t,this.a.i,this.a.f),this.a=e,YCn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},vX(XWn,"HashBiMap/Inverse/1/InverseEntry",1009),wAn(611,532,tVn,p$),MWn.Kc=function(){return new uy(this.a.a)},MWn.Mc=function(n){var t;return!!(t=Zrn(this.a.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a.a,t),!0)},vX(XWn,"HashBiMap/Inverse/InverseKeySet",611),wAn(1007,534,QWn,uy),MWn.Nd=function(n){return n.i},vX(XWn,"HashBiMap/Inverse/InverseKeySet/1",1007),wAn(1010,1,{},rl),MWn.Od=function(n,t){ev(this.a,n,t)},vX(XWn,"HashBiMap/Inverse/lambda$0$Type",1010),wAn(609,532,tVn,v$),MWn.Kc=function(){return new oy(this.a)},MWn.Mc=function(n){var t;return!!(t=Jrn(this.a,n,dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15)))))&&(LLn(this.a,t),t.e=null,t.c=null,!0)},vX(XWn,"HashBiMap/KeySet",609),wAn(1006,534,QWn,oy),MWn.Nd=function(n){return n.g},vX(XWn,"HashBiMap/KeySet/1",1006),wAn(1093,619,VWn),vX(XWn,"HashMultimapGwtSerializationDependencies",1093),wAn(265,1093,VWn,pJ),MWn.hc=function(){return new bE(etn(this.a))},MWn.gd=function(){return new bE(etn(this.a))},MWn.a=2,vX(XWn,"HashMultimap",265),wAn(1999,152,yVn),MWn.Hc=function(n){return this.Pd().Hc(n)},MWn.dc=function(){return this.Pd().dc()},MWn.gc=function(){return this.Pd().gc()},vX(XWn,"ImmutableAsList",1999),wAn(1931,715,jVn),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"ImmutableBiMap",1931),wAn(1977,1,{}),vX(XWn,"ImmutableCollection/Builder",1977),wAn(1022,703,TVn,sy),vX(XWn,"ImmutableEnumSet",1022),wAn(969,386,WWn,bK),MWn.Xb=function(n){return this.a.Xb(n)},vX(XWn,"ImmutableList/1",969),wAn(968,1977,{},sR),vX(XWn,"ImmutableList/Builder",968),wAn(614,198,UWn,cl),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},vX(XWn,"ImmutableMap/1",614),wAn(1041,1,{},o),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"ImmutableMap/2methodref$getKey$Type",1041),wAn(1040,1,{},hR),vX(XWn,"ImmutableMap/Builder",1040),wAn(2e3,1981,TVn),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Dd=function(){return new uv(this)},MWn.Jc=function(n){var t,e;for(yX(n),e=this.gc(),t=0;t<e;t++)n.td(BB(wz(lz(this.a)).Xb(t),42).cd())},MWn.Ed=function(){var n;return(n=this.c,n||(this.c=new uv(this))).Ed()},MWn.Nc=function(){return yq(this.gc(),1296,new ul(this))},vX(XWn,"IndexedImmutableSet",2e3),wAn(1180,2e3,TVn,cv),MWn.Kc=function(){return new cl(lz(this.a).Ed())},MWn.Hc=function(n){return this.a._b(n)},MWn.Jc=function(n){yX(n),nan(this.a,new al(n))},MWn.Ed=function(){return new cl(lz(this.a).Ed())},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new o)},vX(XWn,"ImmutableMapKeySet",1180),wAn(1181,1,{},al),MWn.Od=function(n,t){s_(),this.a.td(n)},vX(XWn,"ImmutableMapKeySet/lambda$0$Type",1181),wAn(1178,1980,mVn,av),MWn.Kc=function(){return new KH(this)},MWn.Hc=function(n){return null!=n&&Pjn(new KH(this),n)},MWn.Ed=function(){return new KH(this)},MWn.gc=function(){return this.a.gc()},MWn.Nc=function(){return RB(lz(this.a).Nc(),new s)},vX(XWn,"ImmutableMapValues",1178),wAn(1179,1,{},s),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"ImmutableMapValues/0methodref$getValue$Type",1179),wAn(626,198,UWn,KH),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},vX(XWn,"ImmutableMapValues/1",626),wAn(1182,1,{},ul),MWn.ld=function(n){return HU(this.a,n)},vX(XWn,"IndexedImmutableSet/0methodref$get$Type",1182),wAn(752,1999,yVn,uv),MWn.Pd=function(){return this.a},MWn.Xb=function(n){return HU(this.a,n)},MWn.gc=function(){return this.a.a.gc()},vX(XWn,"IndexedImmutableSet/1",752),wAn(44,1,{},h),MWn.Kb=function(n){return BB(n,20).Kc()},MWn.Fb=function(n){return this===n},vX(XWn,"Iterables/10",44),wAn(1042,537,pVn,_H),MWn.Jc=function(n){yX(n),this.b.Jc(new dT(this.a,n))},MWn.Kc=function(){return qA(this)},vX(XWn,"Iterables/4",1042),wAn(1043,1,lVn,dT),MWn.td=function(n){TS(this.b,this.a,n)},vX(XWn,"Iterables/4/lambda$0$Type",1043),wAn(1044,537,pVn,FH),MWn.Jc=function(n){yX(n),e5(this.a,new fT(n,this.b))},MWn.Kc=function(){return ZL(new AL(this.a),this.b)},vX(XWn,"Iterables/5",1044),wAn(1045,1,lVn,fT),MWn.td=function(n){this.a.td(yA(n))},vX(XWn,"Iterables/5/lambda$0$Type",1045),wAn(1071,198,UWn,ol),MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return this.a.Pb()},vX(XWn,"Iterators/1",1071),wAn(1072,699,UWn,lT),MWn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},vX(XWn,"Iterators/5",1072),wAn(487,1,QWn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.Qd(this.b.Pb())},MWn.Qb=function(){this.b.Qb()},vX(XWn,"TransformedIterator",487),wAn(1073,487,QWn,nN),MWn.Qd=function(n){return this.a.Kb(n)},vX(XWn,"Iterators/6",1073),wAn(717,198,UWn,sl),MWn.Ob=function(){return!this.a},MWn.Pb=function(){if(this.a)throw Hp(new yv);return this.a=!0,this.b},MWn.a=!1,vX(XWn,"Iterators/9",717),wAn(1070,386,WWn,fG),MWn.Xb=function(n){return this.a[this.b+n]},MWn.b=0,vX(XWn,"Iterators/ArrayItr",1070),wAn(39,1,{39:1,47:1},oz),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return dAn(this)},MWn.Pb=function(){return U5(this)},MWn.Qb=function(){han(!!this.c),this.c.Qb(),this.c=null},vX(XWn,"Iterators/ConcatenatedIterator",39),wAn(22,1,{3:1,35:1,22:1}),MWn.wd=function(n){return Py(this,BB(n,22))},MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.Ib=function(){return dx(this)},MWn.g=0;var znt,Unt=vX(RWn,"Enum",22);wAn(538,22,{538:1,3:1,35:1,22:1,47:1},cN),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Qb=function(){han(!1)};var Xnt,Wnt=Ben(XWn,"Iterators/EmptyModifiableIterator",538,Unt,oX,rx);wAn(1834,619,VWn),vX(XWn,"LinkedHashMultimapGwtSerializationDependencies",1834),wAn(1835,1834,VWn,Thn),MWn.hc=function(){return new LN(etn(this.b))},MWn.$b=function(){win(this),iv(this.a,this.a)},MWn.gd=function(){return new LN(etn(this.b))},MWn.ic=function(n){return new Tsn(this,n,this.b)},MWn.kc=function(){return new tN(this)},MWn.lc=function(){return new w1(BB(this.g||(this.g=new qm(this)),21),17)},MWn.ec=function(){return this.i||(this.i=new HL(this,this.c))},MWn.nc=function(){return new by(new tN(this))},MWn.oc=function(){return RB(new w1(BB(this.g||(this.g=new qm(this)),21),17),new f)},MWn.b=2,vX(XWn,"LinkedHashMultimap",1835),wAn(1838,1,{},f),MWn.Kb=function(n){return BB(n,42).dd()},vX(XWn,"LinkedHashMultimap/0methodref$getValue$Type",1838),wAn(824,1,QWn,tN),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return vtn(this)},MWn.Ob=function(){return this.a!=this.b.a},MWn.Qb=function(){han(!!this.c),q0(this.b,this.c.g,this.c.i),this.c=null},vX(XWn,"LinkedHashMultimap/1",824),wAn(330,238,{345:1,238:1,330:1,2020:1,3:1,42:1},HW),MWn.Rd=function(){return this.f},MWn.Sd=function(n){this.c=n},MWn.Td=function(n){this.f=n},MWn.d=0;var Vnt,Qnt=vX(XWn,"LinkedHashMultimap/ValueEntry",330);wAn(1836,1970,{2020:1,20:1,28:1,14:1,21:1},Tsn),MWn.Fc=function(n){var t,e,i,r,c;for(t=(c=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&wW(e.i,n))return!1;return i=new HW(this.c,n,c,r),kk(this.d,i),i.f=this,this.d=i,iv(this.g.a.b,i),iv(i,this.g.a),this.b[t]=i,++this.f,++this.e,yjn(this),!0},MWn.$b=function(){var n,t;for(yS(this.b,null),this.f=0,n=this.a;n!=this;n=n.Rd())iv((t=BB(n,330)).b,t.e);this.a=this,this.d=this,++this.e},MWn.Hc=function(n){var t,e;for(e=dG(cbn(SVn,rV(dG(cbn(null==n?0:nsn(n),PVn)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&wW(t.i,n))return!0;return!1},MWn.Jc=function(n){var t;for(yX(n),t=this.a;t!=this;t=t.Rd())n.td(BB(t,330).i)},MWn.Rd=function(){return this.a},MWn.Kc=function(){return new sW(this)},MWn.Mc=function(n){return kAn(this,n)},MWn.Sd=function(n){this.d=n},MWn.Td=function(n){this.a=n},MWn.gc=function(){return this.f},MWn.e=0,MWn.f=0,vX(XWn,"LinkedHashMultimap/ValueSet",1836),wAn(1837,1,QWn,sW),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return wG(this),this.b!=this.c},MWn.Pb=function(){var n,t;if(wG(this),this.b==this.c)throw Hp(new yv);return t=(n=BB(this.b,330)).i,this.d=n,this.b=n.f,t},MWn.Qb=function(){wG(this),han(!!this.d),kAn(this.c,this.d.i),this.a=this.c.e,this.d=null},MWn.a=0,vX(XWn,"LinkedHashMultimap/ValueSet/1",1837),wAn(766,1986,VWn,PO),MWn.Zb=function(){return this.f||(this.f=new rS(this))},MWn.Fb=function(n){return jsn(this,n)},MWn.cc=function(n){return new mT(this,n)},MWn.fc=function(n){return J3(this,n)},MWn.$b=function(){cX(this)},MWn._b=function(n){return HT(this,n)},MWn.ac=function(){return new rS(this)},MWn.bc=function(){return new yl(this)},MWn.qc=function(n){return new mT(this,n)},MWn.dc=function(){return!this.a},MWn.rc=function(n){return J3(this,n)},MWn.gc=function(){return this.d},MWn.c=0,MWn.d=0,vX(XWn,"LinkedListMultimap",766),wAn(52,28,LVn),MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new tk("Add not supported on this list"))},MWn.Fc=function(n){return this.Vc(this.gc(),n),!0},MWn.Wc=function(n,t){var e,i,r;for(kW(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.Vc(n++,i),e=!0;return e},MWn.$b=function(){this.Ud(0,this.gc())},MWn.Fb=function(n){return NAn(this,n)},MWn.Hb=function(){return Fon(this)},MWn.Xc=function(n){return bin(this,n)},MWn.Kc=function(){return new Sb(this)},MWn.Yc=function(){return this.Zc(0)},MWn.Zc=function(n){return new M2(this,n)},MWn.$c=function(n){throw Hp(new tk("Remove not supported on this list"))},MWn.Ud=function(n,t){var e,i;for(i=this.Zc(n),e=n;e<t;++e)i.Pb(),i.Qb()},MWn._c=function(n,t){throw Hp(new tk("Set not supported on this list"))},MWn.bd=function(n,t){return new s1(this,n,t)},MWn.j=0,vX(YWn,"AbstractList",52),wAn(1964,52,LVn),MWn.Vc=function(n,t){Kx(this,n,t)},MWn.Wc=function(n,t){return Asn(this,n,t)},MWn.Xb=function(n){return Dpn(this,n)},MWn.Kc=function(){return this.Zc(0)},MWn.$c=function(n){return tkn(this,n)},MWn._c=function(n,t){var e,i;e=this.Zc(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw cL(r=lun(r),109)?Hp(new Ay("Can't set element "+n)):Hp(r)}},vX(YWn,"AbstractSequentialList",1964),wAn(636,1964,LVn,mT),MWn.Zc=function(n){return vN(this,n)},MWn.gc=function(){var n;return(n=BB(RX(this.a.b,this.b),283))?n.a:0},vX(XWn,"LinkedListMultimap/1",636),wAn(1297,1970,tVn,yl),MWn.Hc=function(n){return HT(this.a,n)},MWn.Kc=function(){return new vrn(this.a)},MWn.Mc=function(n){return!J3(this.a,n).a.dc()},MWn.gc=function(){return NT(this.a.b)},vX(XWn,"LinkedListMultimap/1KeySetImpl",1297),wAn(1296,1,QWn,vrn),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return bG(this),!!this.c},MWn.Pb=function(){bG(this),oN(this.c),this.a=this.c,TU(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!TU(this.d,this.c.a));return this.a.a},MWn.Qb=function(){bG(this),han(!!this.a),Cq(new C7(this.e,this.a.a)),this.a=null,this.b=this.e.c},MWn.b=0,vX(XWn,"LinkedListMultimap/DistinctKeyIterator",1296),wAn(283,1,{283:1},sY),MWn.a=0,vX(XWn,"LinkedListMultimap/KeyList",283),wAn(1295,345,aVn,yT),MWn.cd=function(){return this.a},MWn.dd=function(){return this.f},MWn.ed=function(n){var t;return t=this.f,this.f=n,t},vX(XWn,"LinkedListMultimap/Node",1295),wAn(560,1,cVn,C7,KPn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.e=yKn(this.f,this.b,n,this.c),++this.d,this.a=null},MWn.Ob=function(){return!!this.c},MWn.Sb=function(){return!!this.e},MWn.Pb=function(){return EZ(this)},MWn.Tb=function(){return this.d},MWn.Ub=function(){return TZ(this)},MWn.Vb=function(){return this.d-1},MWn.Qb=function(){han(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,ZCn(this.f,this.a),this.a=null},MWn.Wb=function(n){uN(!!this.a),this.a.f=n},MWn.d=0,vX(XWn,"LinkedListMultimap/ValueForKeyIterator",560),wAn(1018,52,LVn),MWn.Vc=function(n,t){this.a.Vc(n,t)},MWn.Wc=function(n,t){return this.a.Wc(n,t)},MWn.Hc=function(n){return this.a.Hc(n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.$c=function(n){return this.a.$c(n)},MWn._c=function(n,t){return this.a._c(n,t)},MWn.gc=function(){return this.a.gc()},vX(XWn,"Lists/AbstractListWrapper",1018),wAn(1019,1018,xVn),vX(XWn,"Lists/RandomAccessListWrapper",1019),wAn(1021,1019,xVn,IT),MWn.Zc=function(n){return this.a.Zc(n)},vX(XWn,"Lists/1",1021),wAn(131,52,{131:1,20:1,28:1,52:1,14:1,15:1},CT),MWn.Vc=function(n,t){this.a.Vc(pU(this,n),t)},MWn.$b=function(){this.a.$b()},MWn.Xb=function(n){return this.a.Xb(LX(this,n))},MWn.Kc=function(){return W1(this,0)},MWn.Zc=function(n){return W1(this,n)},MWn.$c=function(n){return this.a.$c(LX(this,n))},MWn.Ud=function(n,t){(d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))).$b()},MWn._c=function(n,t){return this.a._c(LX(this,n),t)},MWn.gc=function(){return this.a.gc()},MWn.bd=function(n,t){return d2(n,t,this.a.gc()),ean(this.a.bd(pU(this,t),pU(this,n)))},vX(XWn,"Lists/ReverseList",131),wAn(280,131,{131:1,20:1,28:1,52:1,14:1,15:1,54:1},fy),vX(XWn,"Lists/RandomAccessReverseList",280),wAn(1020,1,cVn,kT),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},MWn.Ob=function(){return this.c.Sb()},MWn.Sb=function(){return this.c.Ob()},MWn.Pb=function(){return w5(this)},MWn.Tb=function(){return pU(this.b,this.c.Tb())},MWn.Ub=function(){if(!this.c.Ob())throw Hp(new yv);return this.a=!0,this.c.Pb()},MWn.Vb=function(){return pU(this.b,this.c.Tb())-1},MWn.Qb=function(){han(this.a),this.c.Qb(),this.a=!1},MWn.Wb=function(n){uN(this.a),this.c.Wb(n)},MWn.a=!1,vX(XWn,"Lists/ReverseList/1",1020),wAn(432,487,QWn,ly),MWn.Qd=function(n){return cS(n)},vX(XWn,"Maps/1",432),wAn(698,487,QWn,by),MWn.Qd=function(n){return BB(n,42).dd()},vX(XWn,"Maps/2",698),wAn(962,487,QWn,pN),MWn.Qd=function(n){return new vT(n,_O(this.a,n))},vX(XWn,"Maps/3",962),wAn(959,1971,tVn,ml),MWn.Jc=function(n){xv(this.a,n)},MWn.Kc=function(){return this.a.kc()},MWn.Rc=function(){return this.a},MWn.Nc=function(){return this.a.lc()},vX(XWn,"Maps/IteratorBasedAbstractMap/1",959),wAn(960,1,{},vl),MWn.Od=function(n,t){this.a.td(n)},vX(XWn,"Maps/KeySet/lambda$0$Type",960),wAn(958,28,ZWn,PT),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Jc=function(n){yX(n),this.a.wc(new ll(n))},MWn.dc=function(){return this.a.dc()},MWn.Kc=function(){return new by(this.a.vc().Kc())},MWn.Mc=function(n){var t,e;try{return ywn(this,n,!0)}catch(i){if(cL(i=lun(i),41)){for(e=this.a.vc().Kc();e.Ob();)if(wW(n,(t=BB(e.Pb(),42)).dd()))return this.a.Bc(t.cd()),!0;return!1}throw Hp(i)}},MWn.gc=function(){return this.a.gc()},vX(XWn,"Maps/Values",958),wAn(961,1,{},ll),MWn.Od=function(n,t){this.a.td(t)},vX(XWn,"Maps/Values/lambda$0$Type",961),wAn(736,1987,JWn,rS),MWn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},MWn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},MWn.$b=function(){this.a.$b()},MWn._b=function(n){return this.a._b(n)},MWn.Ec=function(){return new fl(this)},MWn.Dc=function(){return this.Ec()},MWn.dc=function(){return this.a.dc()},MWn.ec=function(){return this.a.ec()},MWn.gc=function(){return this.a.ec().gc()},vX(XWn,"Multimaps/AsMap",736),wAn(1104,1971,tVn,fl),MWn.Kc=function(){return nL(this.a.a.ec(),new bl(this))},MWn.Rc=function(){return this.a},MWn.Mc=function(n){var t;return!!idn(this,n)&&(t=BB(n,42),jk(this.a,t.cd()),!0)},vX(XWn,"Multimaps/AsMap/EntrySet",1104),wAn(1108,1,{},bl),MWn.Kb=function(n){return _O(this,n)},MWn.Fb=function(n){return this===n},vX(XWn,"Multimaps/AsMap/EntrySet/1",1108),wAn(543,1989,{543:1,835:1,20:1,28:1,14:1},wl),MWn.$b=function(){win(this.a)},MWn.Hc=function(n){return Wj(this.a,n)},MWn.Jc=function(n){yX(n),e5(MX(this.a),new gl(n))},MWn.Kc=function(){return new ly(MX(this.a).a.kc())},MWn.gc=function(){return this.a.d},MWn.Nc=function(){return RB(MX(this.a).Nc(),new l)},vX(XWn,"Multimaps/Keys",543),wAn(1106,1,{},l),MWn.Kb=function(n){return BB(n,42).cd()},vX(XWn,"Multimaps/Keys/0methodref$getKey$Type",1106),wAn(1105,487,QWn,wy),MWn.Qd=function(n){return new dl(BB(n,42))},vX(XWn,"Multimaps/Keys/1",1105),wAn(1990,1,{416:1}),MWn.Fb=function(n){var t;return!!cL(n,492)&&(t=BB(n,416),BB(this.a.dd(),14).gc()==BB(t.a.dd(),14).gc()&&wW(this.a.cd(),t.a.cd()))},MWn.Hb=function(){var n;return(null==(n=this.a.cd())?0:nsn(n))^BB(this.a.dd(),14).gc()},MWn.Ib=function(){var n,t;return t=kN(this.a.cd()),1==(n=BB(this.a.dd(),14).gc())?t:t+" x "+n},vX(XWn,"Multisets/AbstractEntry",1990),wAn(492,1990,{492:1,416:1},dl),vX(XWn,"Multimaps/Keys/1/1",492),wAn(1107,1,lVn,gl),MWn.td=function(n){this.a.td(BB(n,42).cd())},vX(XWn,"Multimaps/Keys/lambda$1$Type",1107),wAn(1110,1,lVn,b),MWn.td=function(n){Iq(BB(n,416))},vX(XWn,"Multiset/lambda$0$Type",1110),wAn(737,1,lVn,pl),MWn.td=function(n){Itn(this.a,BB(n,416))},vX(XWn,"Multiset/lambda$1$Type",737),wAn(1111,1,{},m),vX(XWn,"Multisets/0methodref$add$Type",1111),wAn(738,1,{},y),MWn.Kb=function(n){return s3(BB(n,416))},vX(XWn,"Multisets/lambda$3$Type",738),wAn(2008,1,KWn),vX(XWn,"RangeGwtSerializationDependencies",2008),wAn(514,2008,{169:1,514:1,3:1,45:1},svn),MWn.Lb=function(n){return Mz(this,BB(n,35))},MWn.Mb=function(n){return Mz(this,BB(n,35))},MWn.Fb=function(n){var t;return!!cL(n,514)&&(t=BB(n,514),xdn(this.a,t.a)&&xdn(this.b,t.b))},MWn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},MWn.Ib=function(){return B3(this.a,this.b)},vX(XWn,"Range",514),wAn(778,1999,yVn,aU),MWn.Zc=function(n){return ix(this.b,n)},MWn.Pd=function(){return this.a},MWn.Xb=function(n){return WI(this.b,n)},MWn.Fd=function(n){return ix(this.b,n)},vX(XWn,"RegularImmutableAsList",778),wAn(646,2006,yVn,SY),MWn.Hd=function(){return this.a},vX(XWn,"RegularImmutableList",646),wAn(616,715,jVn,hy),vX(XWn,"RegularImmutableMap",616),wAn(716,703,TVn,vS),vX(XWn,"RegularImmutableSet",716),wAn(1976,nVn,tVn),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},vX(XWn,"Sets/SetView",1976),wAn(963,1976,tVn,ET),MWn.Kc=function(){return new SV(this.a,this.b)},MWn.Hc=function(n){return CG(this.a,n)&&this.b.Hc(n)},MWn.Ic=function(n){return oun(this.a,n)&&this.b.Ic(n)},MWn.dc=function(){return Kpn(this.b,this.a)},MWn.Lc=function(){return AV(new Rq(null,new w1(this.a,1)),new jl(this.b))},MWn.gc=function(){return Can(this)},MWn.Oc=function(){return AV(new Rq(null,new w1(this.a,1)),new kl(this.b))},vX(XWn,"Sets/2",963),wAn(700,699,UWn,SV),MWn.Yb=function(){for(var n;k$(this.a);)if(n=u4(this.a),this.c.Hc(n))return n;return this.e=2,null},vX(XWn,"Sets/2/1",700),wAn(964,1,DVn,kl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/4methodref$contains$Type",964),wAn(965,1,DVn,jl),MWn.Mb=function(n){return this.a.Hc(n)},vX(XWn,"Sets/2/5methodref$contains$Type",965),wAn(607,1975,{607:1,3:1,20:1,14:1,271:1,21:1,84:1},bJ),MWn.Bd=function(){return this.b},MWn.Cd=function(){return this.b},MWn.Md=function(){return this.b},MWn.Jc=function(n){this.a.Jc(n)},MWn.Lc=function(){return this.a.Lc()},MWn.Oc=function(){return this.a.Oc()},vX(XWn,"Sets/UnmodifiableNavigableSet",607),wAn(1932,1931,jVn,GW),MWn.Ld=function(){return s_(),new yk(this.a)},MWn.Cc=function(){return s_(),new yk(this.a)},MWn.pd=function(){return s_(),new yk(this.a)},vX(XWn,"SingletonImmutableBiMap",1932),wAn(647,2006,yVn,Pq),MWn.Hd=function(){return this.a},vX(XWn,"SingletonImmutableList",647),wAn(350,1981,TVn,yk),MWn.Kc=function(){return new sl(this.a)},MWn.Hc=function(n){return Nfn(this.a,n)},MWn.Ed=function(){return new sl(this.a)},MWn.gc=function(){return 1},vX(XWn,"SingletonImmutableSet",350),wAn(1115,1,{},k),MWn.Kb=function(n){return BB(n,164)},vX(XWn,"Streams/lambda$0$Type",1115),wAn(1116,1,RVn,El),MWn.Vd=function(){B5(this.a)},vX(XWn,"Streams/lambda$1$Type",1116),wAn(1659,1658,VWn,pY),MWn.Zb=function(){return BB(BB(this.f||(this.f=cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)),161),171)},MWn.hc=function(){return new dE(this.b)},MWn.gd=function(){return new dE(this.b)},MWn.ec=function(){return BB(BB(this.i||(this.i=cL(this.c,171)?new tT(this,BB(this.c,171)):cL(this.c,161)?new nT(this,BB(this.c,161)):new HL(this,this.c)),84),271)},MWn.ac=function(){return cL(this.c,171)?new ID(this,BB(this.c,171)):cL(this.c,161)?new CD(this,BB(this.c,161)):new pT(this,this.c)},MWn.ic=function(n){return null==n&&this.a.ue(n,n),new dE(this.b)},vX(XWn,"TreeMultimap",1659),wAn(78,1,{3:1,78:1}),MWn.Wd=function(n){return new Error(n)},MWn.Xd=function(){return this.e},MWn.Yd=function(){return _wn($V(LU((null==this.k&&(this.k=x8(Jnt,sVn,78,0,0,1)),this.k)),new x),new on)},MWn.Zd=function(){return this.f},MWn.$d=function(){return this.g},MWn._d=function(){yy(this,b2(this.Wd(CY(this,this.g)))),ov(this)},MWn.Ib=function(){return CY(this,this.$d())},MWn.e=FVn,MWn.i=!1,MWn.n=!0;var Ynt,Jnt=vX(RWn,"Throwable",78);wAn(102,78,{3:1,102:1,78:1}),vX(RWn,"Exception",102),wAn(60,102,BVn,sv,dy),vX(RWn,"RuntimeException",60),wAn(598,60,BVn),vX(RWn,"JsException",598),wAn(863,598,BVn),vX(HVn,"JavaScriptExceptionBase",863),wAn(477,863,{477:1,3:1,102:1,60:1,78:1},jhn),MWn.$d=function(){return pEn(this),this.c},MWn.ae=function(){return GI(this.b)===GI(Ynt)?null:this.b},vX(GVn,"JavaScriptException",477);var Znt,ntt=vX(GVn,"JavaScriptObject$",0);wAn(1948,1,{}),vX(GVn,"Scheduler",1948);var ttt,ett,itt,rtt,ctt=0,att=0,utt=-1;wAn(890,1948,{},j),vX(HVn,"SchedulerImpl",890),wAn(1960,1,{}),vX(HVn,"StackTraceCreator/Collector",1960),wAn(864,1960,{},E),MWn.be=function(n){var t={},e=[];n[UVn]=e;for(var i=arguments.callee.caller;i;){var r=(PY(),i.name||(i.name=Ven(i.toString())));e.push(r);var c,a,u=":"+r,o=t[u];if(o)for(c=0,a=o.length;c<a;c++)if(o[c]===i)return;(o||(t[u]=[])).push(i),i=i.caller}},MWn.ce=function(n){var t,e,i,r;for(PY(),e=(i=n&&n[UVn]?n[UVn]:[]).length,r=x8(Ftt,sVn,310,e,0,1),t=0;t<e;t++)r[t]=new PV(i[t],null,-1);return r},vX(HVn,"StackTraceCreator/CollectorLegacy",864),wAn(1961,1960,{}),MWn.be=function(n){},MWn.de=function(n,t,e,i){return new PV(t,n+"@"+i,e<0?-1:e)},MWn.ce=function(n){var t,e,i,r,c,a;if(r=lyn(n),c=x8(Ftt,sVn,310,0,0,1),t=0,0==(i=r.length))return c;for(mK((a=Oqn(this,r[0])).d,zVn)||(c[t++]=a),e=1;e<i;e++)c[t++]=Oqn(this,r[e]);return c},vX(HVn,"StackTraceCreator/CollectorModern",1961),wAn(865,1961,{},d),MWn.de=function(n,t,e,i){return new PV(t,n,-1)},vX(HVn,"StackTraceCreator/CollectorModernNoSourceMap",865),wAn(1050,1,{}),vX(yQn,kQn,1050),wAn(615,1050,{615:1},zX),vX(jQn,kQn,615),wAn(2001,1,{}),vX(yQn,EQn,2001),wAn(2002,2001,{}),vX(jQn,EQn,2002),wAn(1090,1,{},g),vX(jQn,"LocaleInfo",1090),wAn(1918,1,{},p),MWn.a=0,vX(jQn,"TimeZone",1918),wAn(1258,2002,{},w),vX("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1258),wAn(434,1,{434:1},VB),MWn.a=!1,MWn.b=0,vX(yQn,"DateTimeFormat/PatternPart",434),wAn(199,1,TQn,AT,von,PD),MWn.wd=function(n){return J0(this,BB(n,199))},MWn.Fb=function(n){return cL(n,199)&&QI(fan(this.q.getTime()),fan(BB(n,199).q.getTime()))},MWn.Hb=function(){var n;return dG(r0(n=fan(this.q.getTime()),jz(n,32)))},MWn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=UO(e.Math.abs(i)%60),(pMn(),pet)[this.q.getDay()]+" "+vet[this.q.getMonth()]+" "+UO(this.q.getDate())+" "+UO(this.q.getHours())+":"+UO(this.q.getMinutes())+":"+UO(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var ott,stt,htt,ftt,ltt,btt,wtt,dtt,gtt,ptt,vtt,mtt=vX(YWn,"Date",199);wAn(1915,199,TQn,Ykn),MWn.a=!1,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=!1,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,MWn.o=0,MWn.p=0,vX("com.google.gwt.i18n.shared.impl","DateRecord",1915),wAn(1966,1,{}),MWn.fe=function(){return null},MWn.ge=function(){return null},MWn.he=function(){return null},MWn.ie=function(){return null},MWn.je=function(){return null},vX(MQn,"JSONValue",1966),wAn(216,1966,{216:1},Cl,Tl),MWn.Fb=function(n){return!!cL(n,216)&&v0(this.a,BB(n,216).a)},MWn.ee=function(){return qp},MWn.Hb=function(){return tY(this.a)},MWn.fe=function(){return this},MWn.Ib=function(){var n,t,e;for(e=new lN("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),uO(e,dnn(this,t));return e.a+="]",e.a},vX(MQn,"JSONArray",216),wAn(483,1966,{483:1},Ml),MWn.ee=function(){return Gp},MWn.ge=function(){return this},MWn.Ib=function(){return hN(),""+this.a},MWn.a=!1,vX(MQn,"JSONBoolean",483),wAn(985,60,BVn,gy),vX(MQn,"JSONException",985),wAn(1023,1966,{},v),MWn.ee=function(){return Vp},MWn.Ib=function(){return zWn},vX(MQn,"JSONNull",1023),wAn(258,1966,{258:1},Sl),MWn.Fb=function(n){return!!cL(n,258)&&this.a==BB(n,258).a},MWn.ee=function(){return zp},MWn.Hb=function(){return VO(this.a)},MWn.he=function(){return this},MWn.Ib=function(){return this.a+""},MWn.a=0,vX(MQn,"JSONNumber",258),wAn(183,1966,{183:1},py,Pl),MWn.Fb=function(n){return!!cL(n,183)&&v0(this.a,BB(n,183).a)},MWn.ee=function(){return Up},MWn.Hb=function(){return tY(this.a)},MWn.ie=function(){return this},MWn.Ib=function(){var n,t,e,i,r,c;for(c=new lN("{"),n=!0,i=0,r=(e=jrn(this,x8(Qtt,sVn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=FWn,oO(c,mOn(t)),c.a+=":",uO(c,zJ(this,t));return c.a+="}",c.a},vX(MQn,"JSONObject",183),wAn(596,nVn,tVn,TT),MWn.Hc=function(n){return XI(n)&&zk(this.a,SD(n))},MWn.Kc=function(){return new Sb(new Jy(this.b))},MWn.gc=function(){return this.b.length},vX(MQn,"JSONObject/1",596),wAn(204,1966,{204:1},GX),MWn.Fb=function(n){return!!cL(n,204)&&mK(this.a,BB(n,204).a)},MWn.ee=function(){return Xp},MWn.Hb=function(){return vvn(this.a)},MWn.je=function(){return this},MWn.Ib=function(){return mOn(this.a)},vX(MQn,"JSONString",204),wAn(1962,1,{525:1}),vX(LQn,"OutputStream",1962),wAn(1963,1962,{525:1}),vX(LQn,"FilterOutputStream",1963),wAn(866,1963,{525:1},A),vX(LQn,"PrintStream",866),wAn(418,1,{475:1}),MWn.Ib=function(){return this.a},vX(RWn,"AbstractStringBuilder",418),wAn(529,60,BVn,Oy),vX(RWn,"ArithmeticException",529),wAn(73,60,NQn,fv,Ay),vX(RWn,"IndexOutOfBoundsException",73),wAn(320,73,{3:1,320:1,102:1,73:1,60:1,78:1},Sv,Tk),vX(RWn,"ArrayIndexOutOfBoundsException",320),wAn(528,60,BVn,lv,$y),vX(RWn,"ArrayStoreException",528),wAn(289,78,xQn,Ly),vX(RWn,"Error",289),wAn(194,289,xQn,hv,g5),vX(RWn,"AssertionError",194),CWn={3:1,476:1,35:1};var ytt,ktt=vX(RWn,"Boolean",476);wAn(236,1,{3:1,236:1}),vX(RWn,"Number",236),wAn(217,236,{3:1,217:1,35:1,236:1},$b),MWn.wd=function(n){return Fk(this,BB(n,217))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,217)&&BB(n,217).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var jtt,Ett,Ttt=vX(RWn,"Byte",217);wAn(172,1,{3:1,172:1,35:1},Lb),MWn.wd=function(n){return Bk(this,BB(n,172))},MWn.Fb=function(n){return cL(n,172)&&BB(n,172).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return String.fromCharCode(this.a)},MWn.a=0;var Mtt,Stt=vX(RWn,"Character",172);wAn(205,60,{3:1,205:1,102:1,60:1,78:1},bv,Ky),vX(RWn,"ClassCastException",205),IWn={3:1,35:1,333:1,236:1};var Ptt=vX(RWn,"Double",333);wAn(155,236,{3:1,35:1,155:1,236:1},Nb,Dv),MWn.wd=function(n){return BO(this,BB(n,155))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,155)&&vK(this.a,BB(n,155).a)},MWn.Hb=function(){return CJ(this.a)},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ctt=vX(RWn,"Float",155);wAn(32,60,{3:1,102:1,32:1,60:1,78:1},wv,_y,Fsn),vX(RWn,"IllegalArgumentException",32),wAn(71,60,BVn,dv,Fy),vX(RWn,"IllegalStateException",71),wAn(19,236,{3:1,35:1,19:1,236:1},xb),MWn.wd=function(n){return HO(this,BB(n,19))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,19)&&BB(n,19).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Itt,Ott,Att=vX(RWn,"Integer",19);wAn(162,236,{3:1,35:1,162:1,236:1},Db),MWn.wd=function(n){return qO(this,BB(n,162))},MWn.ke=function(){return j2(this.a)},MWn.Fb=function(n){return cL(n,162)&&QI(BB(n,162).a,this.a)},MWn.Hb=function(){return dG(this.a)},MWn.Ib=function(){return""+vz(this.a)},MWn.a=0;var $tt,Ltt,Ntt,xtt,Dtt,Rtt=vX(RWn,"Long",162);wAn(2039,1,{}),wAn(1831,60,BVn,By),vX(RWn,"NegativeArraySizeException",1831),wAn(173,598,{3:1,102:1,173:1,60:1,78:1},gv,Hy),MWn.Wd=function(n){return new TypeError(n)},vX(RWn,"NullPointerException",173),wAn(127,32,{3:1,102:1,32:1,127:1,60:1,78:1},Mk),vX(RWn,"NumberFormatException",127),wAn(184,236,{3:1,35:1,236:1,184:1},Rb),MWn.wd=function(n){return Hk(this,BB(n,184))},MWn.ke=function(){return this.a},MWn.Fb=function(n){return cL(n,184)&&BB(n,184).a==this.a},MWn.Hb=function(){return this.a},MWn.Ib=function(){return""+this.a},MWn.a=0;var Ktt,_tt=vX(RWn,"Short",184);wAn(310,1,{3:1,310:1},PV),MWn.Fb=function(n){var t;return!!cL(n,310)&&(t=BB(n,310),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[iln(this.c),this.a,this.d,this.b]))},MWn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},MWn.c=0;var Ftt=vX(RWn,"StackTraceElement",310);OWn={3:1,475:1,35:1,2:1};var Btt,Htt,qtt,Gtt,ztt,Utt,Xtt,Wtt,Vtt,Qtt=vX(RWn,qVn,2);wAn(107,418,{475:1},Sk,Pk,fN),vX(RWn,"StringBuffer",107),wAn(100,418,{475:1},Ck,Ik,lN),vX(RWn,"StringBuilder",100),wAn(687,73,NQn,Ok),vX(RWn,"StringIndexOutOfBoundsException",687),wAn(2043,1,{}),wAn(844,1,{},x),MWn.Kb=function(n){return BB(n,78).e},vX(RWn,"Throwable/lambda$0$Type",844),wAn(41,60,{3:1,102:1,60:1,78:1,41:1},pv,tk),vX(RWn,"UnsupportedOperationException",41),wAn(240,236,{3:1,35:1,236:1,240:1},knn,wE),MWn.wd=function(n){return J_n(this,BB(n,240))},MWn.ke=function(){return bSn(eqn(this))},MWn.Fb=function(n){var t;return this===n||!!cL(n,240)&&(t=BB(n,240),this.e==t.e&&0==J_n(this,t))},MWn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=fan(this.f),this.b=dG(e0(n,-1)),this.b=33*this.b+dG(e0(kz(n,32),-1)),this.b=17*this.b+CJ(this.e),this.b):(this.b=17*Khn(this.c)+CJ(this.e),this.b)},MWn.Ib=function(){return eqn(this)},MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0;var Ytt,Jtt,Ztt,net,tet,eet,iet=vX("java.math","BigDecimal",240);wAn(91,236,{3:1,35:1,236:1,91:1},Rpn,X6,lU,vEn,Cgn,$A),MWn.wd=function(n){return tgn(this,BB(n,91))},MWn.ke=function(){return bSn(qXn(this,0))},MWn.Fb=function(n){return swn(this,n)},MWn.Hb=function(){return Khn(this)},MWn.Ib=function(){return qXn(this,0)},MWn.b=-2,MWn.c=0,MWn.d=0,MWn.e=0;var ret,cet,aet,uet,oet=vX("java.math","BigInteger",91);wAn(488,1967,JWn),MWn.$b=function(){$U(this)},MWn._b=function(n){return hU(this,n)},MWn.uc=function(n){return Lsn(this,n,this.g)||Lsn(this,n,this.f)},MWn.vc=function(){return new Pb(this)},MWn.xc=function(n){return RX(this,n)},MWn.zc=function(n,t){return VW(this,n,t)},MWn.Bc=function(n){return v6(this,n)},MWn.gc=function(){return NT(this)},vX(YWn,"AbstractHashMap",488),wAn(261,nVn,tVn,Pb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return m2(this,n)},MWn.Kc=function(){return new usn(this.a)},MWn.Mc=function(n){var t;return!!m2(this,n)&&(t=BB(n,42).cd(),this.a.Bc(t),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractHashMap/EntrySet",261),wAn(262,1,QWn,usn),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return ten(this)},MWn.Ob=function(){return this.b},MWn.Qb=function(){o9(this)},MWn.b=!1,vX(YWn,"AbstractHashMap/EntrySetIterator",262),wAn(417,1,QWn,Sb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this)},MWn.Pb=function(){return mQ(this)},MWn.Qb=function(){fW(this)},MWn.b=0,MWn.c=-1,vX(YWn,"AbstractList/IteratorImpl",417),wAn(96,417,cVn,M2),MWn.Qb=function(){fW(this)},MWn.Rb=function(n){yR(this,n)},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Ub=function(){return Px(this.b>0),this.a.Xb(this.c=--this.b)},MWn.Vb=function(){return this.b-1},MWn.Wb=function(n){Mx(-1!=this.c),this.a._c(this.c,n)},vX(YWn,"AbstractList/ListIteratorImpl",96),wAn(219,52,LVn,s1),MWn.Vc=function(n,t){LZ(n,this.b),this.c.Vc(this.a+n,t),++this.b},MWn.Xb=function(n){return l1(n,this.b),this.c.Xb(this.a+n)},MWn.$c=function(n){var t;return l1(n,this.b),t=this.c.$c(this.a+n),--this.b,t},MWn._c=function(n,t){return l1(n,this.b),this.c._c(this.a+n,t)},MWn.gc=function(){return this.b},MWn.a=0,MWn.b=0,vX(YWn,"AbstractList/SubList",219),wAn(384,nVn,tVn,Cb),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a._b(n)},MWn.Kc=function(){return new Ib(this.a.vc().Kc())},MWn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/1",384),wAn(691,1,QWn,Ib),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).cd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/1/1",691),wAn(226,28,ZWn,Ob),MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return this.a.uc(n)},MWn.Kc=function(){return new Kb(this.a.vc().Kc())},MWn.gc=function(){return this.a.gc()},vX(YWn,"AbstractMap/2",226),wAn(294,1,QWn,Kb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a.Ob()},MWn.Pb=function(){return BB(this.a.Pb(),42).dd()},MWn.Qb=function(){this.a.Qb()},vX(YWn,"AbstractMap/2/1",294),wAn(484,1,{484:1,42:1}),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.d,t.cd())&&cV(this.e,t.dd()))},MWn.cd=function(){return this.d},MWn.dd=function(){return this.e},MWn.Hb=function(){return KA(this.d)^KA(this.e)},MWn.ed=function(n){return pR(this,n)},MWn.Ib=function(){return this.d+"="+this.e},vX(YWn,"AbstractMap/AbstractEntry",484),wAn(383,484,{484:1,383:1,42:1},PS),vX(YWn,"AbstractMap/SimpleEntry",383),wAn(1984,1,VQn),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),cV(this.cd(),t.cd())&&cV(this.dd(),t.dd()))},MWn.Hb=function(){return KA(this.cd())^KA(this.dd())},MWn.Ib=function(){return this.cd()+"="+this.dd()},vX(YWn,uVn,1984),wAn(1992,1967,eVn),MWn.tc=function(n){return q5(this,n)},MWn._b=function(n){return DK(this,n)},MWn.vc=function(){return new Bb(this)},MWn.xc=function(n){return qI(lsn(this,n))},MWn.ec=function(){return new _b(this)},vX(YWn,"AbstractNavigableMap",1992),wAn(739,nVn,tVn,Bb),MWn.Hc=function(n){return cL(n,42)&&q5(this.b,BB(n,42))},MWn.Kc=function(){return new BR(this.b)},MWn.Mc=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),z8(this.b,t))},MWn.gc=function(){return this.b.c},vX(YWn,"AbstractNavigableMap/EntrySet",739),wAn(493,nVn,rVn,_b),MWn.Nc=function(){return new wS(this)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(this.a).b))},MWn.Mc=function(n){return!!DK(this.a,n)&&($J(this.a,n),!0)},MWn.gc=function(){return this.a.c},vX(YWn,"AbstractNavigableMap/NavigableKeySet",493),wAn(494,1,QWn,Fb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return aS(this.a.a)},MWn.Pb=function(){return mx(this.a).cd()},MWn.Qb=function(){e_(this.a)},vX(YWn,"AbstractNavigableMap/NavigableKeySet/1",494),wAn(2004,28,ZWn),MWn.Fc=function(n){return F8(eMn(this,n)),!0},MWn.Gc=function(n){return kW(n),vH(n!=this,"Can't add a queue to itself"),Frn(this,n)},MWn.$b=function(){for(;null!=mnn(this););},vX(YWn,"AbstractQueue",2004),wAn(302,28,{4:1,20:1,28:1,14:1},Lp,d1),MWn.Fc=function(n){return w3(this,n),!0},MWn.$b=function(){o4(this)},MWn.Hc=function(n){return wun(new bV(this),n)},MWn.dc=function(){return Wy(this)},MWn.Kc=function(){return new bV(this)},MWn.Mc=function(n){return GJ(new bV(this),n)},MWn.gc=function(){return this.c-this.b&this.a.length-1},MWn.Nc=function(){return new w1(this,272)},MWn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=qk(new Array(t),n)),urn(this,n,t),n.length>t&&$X(n,t,null),n},MWn.b=0,MWn.c=0,vX(YWn,"ArrayDeque",302),wAn(446,1,QWn,bV),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a!=this.b},MWn.Pb=function(){return _hn(this)},MWn.Qb=function(){ein(this)},MWn.a=0,MWn.b=0,MWn.c=-1,vX(YWn,"ArrayDeque/IteratorImpl",446),wAn(12,52,QQn,Np,J6,t_),MWn.Vc=function(n,t){kG(this,n,t)},MWn.Fc=function(n){return WB(this,n)},MWn.Wc=function(n,t){return ohn(this,n,t)},MWn.Gc=function(n){return gun(this,n)},MWn.$b=function(){this.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this,n,0)},MWn.Jc=function(n){Otn(this,n)},MWn.Xb=function(n){return xq(this,n)},MWn.Xc=function(n){return E7(this,n,0)},MWn.dc=function(){return 0==this.c.length},MWn.Kc=function(){return new Wb(this)},MWn.$c=function(n){return s6(this,n)},MWn.Mc=function(n){return y7(this,n)},MWn.Ud=function(n,t){h1(this,n,t)},MWn._c=function(n,t){return c5(this,n,t)},MWn.gc=function(){return this.c.length},MWn.ad=function(n){m$(this,n)},MWn.Pc=function(){return bx(this)},MWn.Qc=function(n){return Qgn(this,n)};var set,het,fet,bet,wet,det,get,pet,vet,met=vX(YWn,"ArrayList",12);wAn(7,1,QWn,Wb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return y$(this)},MWn.Pb=function(){return n0(this)},MWn.Qb=function(){AU(this)},MWn.a=0,MWn.b=-1,vX(YWn,"ArrayList/1",7),wAn(2013,e.Function,{},T),MWn.te=function(n,t){return Pln(n,t)},wAn(154,52,YQn,Jy),MWn.Hc=function(n){return-1!=bin(this,n)},MWn.Jc=function(n){var t,e,i,r;for(kW(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.td(t)},MWn.Xb=function(n){return Dq(this,n)},MWn._c=function(n,t){var e;return l1(n,this.a.length),e=this.a[n],$X(this.a,n,t),e},MWn.gc=function(){return this.a.length},MWn.ad=function(n){yG(this.a,this.a.length,n)},MWn.Pc=function(){return Ygn(this,x8(Ant,HWn,1,this.a.length,5,1))},MWn.Qc=function(n){return Ygn(this,n)},vX(YWn,"Arrays/ArrayList",154),wAn(940,52,YQn,S),MWn.Hc=function(n){return!1},MWn.Xb=function(n){return yO(n)},MWn.Kc=function(){return SQ(),LT(),bet},MWn.Yc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptyList",940),wAn(941,1,cVn,P),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new dv)},MWn.Wb=function(n){throw Hp(new dv)},vX(YWn,"Collections/EmptyListIterator",941),wAn(943,1967,jVn,C),MWn._b=function(n){return!1},MWn.uc=function(n){return!1},MWn.vc=function(){return SQ(),fet},MWn.xc=function(n){return null},MWn.ec=function(){return SQ(),fet},MWn.gc=function(){return 0},MWn.Cc=function(){return SQ(),set},vX(YWn,"Collections/EmptyMap",943),wAn(942,nVn,TVn,M),MWn.Hc=function(n){return!1},MWn.Kc=function(){return SQ(),LT(),bet},MWn.gc=function(){return 0},vX(YWn,"Collections/EmptySet",942),wAn(599,52,{3:1,20:1,28:1,52:1,14:1,15:1},Gb),MWn.Hc=function(n){return cV(this.a,n)},MWn.Xb=function(n){return l1(n,1),this.a},MWn.gc=function(){return 1},vX(YWn,"Collections/SingletonList",599),wAn(372,1,vVn,Hb),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,this.Nc())},MWn.Nc=function(){return new w1(this,0)},MWn.Oc=function(){return new Rq(null,this.Nc())},MWn.Fc=function(n){return oE()},MWn.Gc=function(n){return sE()},MWn.$b=function(){hE()},MWn.Hc=function(n){return xT(this,n)},MWn.Ic=function(n){return DT(this,n)},MWn.dc=function(){return this.b.dc()},MWn.Kc=function(){return new qb(this.b.Kc())},MWn.Mc=function(n){return fE()},MWn.gc=function(){return this.b.gc()},MWn.Pc=function(){return this.b.Pc()},MWn.Qc=function(n){return RT(this,n)},MWn.Ib=function(){return Bbn(this.b)},vX(YWn,"Collections/UnmodifiableCollection",372),wAn(371,1,QWn,qb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.b.Ob()},MWn.Pb=function(){return this.b.Pb()},MWn.Qb=function(){lE()},vX(YWn,"Collections/UnmodifiableCollectionIterator",371),wAn(531,372,JQn,bN),MWn.Nc=function(){return new w1(this,16)},MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Xb=function(n){return this.a.Xb(n)},MWn.Hb=function(){return nsn(this.a)},MWn.Xc=function(n){return this.a.Xc(n)},MWn.dc=function(){return this.a.dc()},MWn.Yc=function(){return new wN(this.a.Zc(0))},MWn.Zc=function(n){return new wN(this.a.Zc(n))},MWn.$c=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},MWn.ad=function(n){throw Hp(new pv)},MWn.bd=function(n,t){return new bN(this.a.bd(n,t))},vX(YWn,"Collections/UnmodifiableList",531),wAn(690,371,cVn,wN),MWn.Qb=function(){lE()},MWn.Rb=function(n){throw Hp(new pv)},MWn.Sb=function(){return this.a.Sb()},MWn.Tb=function(){return this.a.Tb()},MWn.Ub=function(){return this.a.Ub()},MWn.Vb=function(){return this.a.Vb()},MWn.Wb=function(n){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableListIterator",690),wAn(600,1,JWn,Xb),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){throw Hp(new pv)},MWn._b=function(n){return this.c._b(n)},MWn.uc=function(n){return _T(this,n)},MWn.vc=function(){return eV(this)},MWn.Fb=function(n){return BT(this,n)},MWn.xc=function(n){return this.c.xc(n)},MWn.Hb=function(){return nsn(this.c)},MWn.dc=function(){return this.c.dc()},MWn.ec=function(){return iV(this)},MWn.zc=function(n,t){throw Hp(new pv)},MWn.Bc=function(n){throw Hp(new pv)},MWn.gc=function(){return this.c.gc()},MWn.Ib=function(){return Bbn(this.c)},MWn.Cc=function(){return tV(this)},vX(YWn,"Collections/UnmodifiableMap",600),wAn(382,372,EVn,Ak),MWn.Nc=function(){return new w1(this,1)},MWn.Fb=function(n){return Nfn(this.b,n)},MWn.Hb=function(){return nsn(this.b)},vX(YWn,"Collections/UnmodifiableSet",382),wAn(944,382,EVn,Lk),MWn.Hc=function(n){return KT(this,n)},MWn.Ic=function(n){return this.b.Ic(n)},MWn.Kc=function(){return new zb(this.b.Kc())},MWn.Pc=function(){var n;return j4(n=this.b.Pc(),n.length),n},MWn.Qc=function(n){return IY(this,n)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",944),wAn(945,1,QWn,zb),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return new Ub(BB(this.a.Pb(),42))},MWn.Ob=function(){return this.a.Ob()},MWn.Qb=function(){throw Hp(new pv)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",945),wAn(688,1,VQn,Ub),MWn.Fb=function(n){return this.a.Fb(n)},MWn.cd=function(){return this.a.cd()},MWn.dd=function(){return this.a.dd()},MWn.Hb=function(){return this.a.Hb()},MWn.ed=function(n){throw Hp(new pv)},MWn.Ib=function(){return Bbn(this.a)},vX(YWn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",688),wAn(601,531,{20:1,14:1,15:1,54:1},$k),vX(YWn,"Collections/UnmodifiableRandomAccessList",601),wAn(689,382,MVn,dN),MWn.Nc=function(){return new wS(this)},MWn.Fb=function(n){return Nfn(this.a,n)},MWn.Hb=function(){return nsn(this.a)},vX(YWn,"Collections/UnmodifiableSortedSet",689),wAn(847,1,ZQn,D),MWn.ue=function(n,t){var e;return 0!=(e=T4(BB(n,11),BB(t,11)))?e:nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(YWn,"Comparator/lambda$0$Type",847),wAn(751,1,ZQn,R),MWn.ue=function(n,t){return _q(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),get},vX(YWn,"Comparators/NaturalOrderComparator",751),wAn(1177,1,ZQn,K),MWn.ue=function(n,t){return Fq(BB(n,35),BB(t,35))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return PQ(),det},vX(YWn,"Comparators/ReverseNaturalOrderComparator",1177),wAn(64,1,ZQn,nw),MWn.Fb=function(n){return this===n},MWn.ue=function(n,t){return this.a.ue(t,n)},MWn.ve=function(){return this.a},vX(YWn,"Comparators/ReversedComparator",64),wAn(166,60,BVn,vv),vX(YWn,"ConcurrentModificationException",166),wAn(1904,1,nYn,_),MWn.we=function(n){hdn(this,n)},MWn.Ib=function(){return"DoubleSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?l6(this)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+l6(this)+"]"},MWn.a=0,MWn.b=KQn,MWn.c=RQn,MWn.d=0,MWn.e=0,MWn.f=0,vX(YWn,"DoubleSummaryStatistics",1904),wAn(1805,60,BVn,mv),vX(YWn,"EmptyStackException",1805),wAn(451,1967,JWn,Hbn),MWn.zc=function(n,t){return wR(this,n,t)},MWn.$b=function(){TW(this)},MWn._b=function(n){return uS(this,n)},MWn.uc=function(n){var t,e;for(e=new QT(this.a);e.a<e.c.a.length;)if(t=u4(e),cV(n,this.b[t.g]))return!0;return!1},MWn.vc=function(){return new tw(this)},MWn.xc=function(n){return oV(this,n)},MWn.Bc=function(n){return NZ(this,n)},MWn.gc=function(){return this.a.c},vX(YWn,"EnumMap",451),wAn(1352,nVn,tVn,tw),MWn.$b=function(){TW(this.a)},MWn.Hc=function(n){return v2(this,n)},MWn.Kc=function(){return new Aq(this.a)},MWn.Mc=function(n){var t;return!!v2(this,n)&&(t=BB(n,42).cd(),NZ(this.a,t),!0)},MWn.gc=function(){return this.a.a.c},vX(YWn,"EnumMap/EntrySet",1352),wAn(1353,1,QWn,Aq),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.b=u4(this.a),new CS(this.c,this.b)},MWn.Ob=function(){return k$(this.a)},MWn.Qb=function(){Mx(!!this.b),NZ(this.c,this.b),this.b=null},vX(YWn,"EnumMap/EntrySetIterator",1353),wAn(1354,1984,VQn,CS),MWn.cd=function(){return this.a},MWn.dd=function(){return this.b.b[this.a.g]},MWn.ed=function(n){return EU(this.b,this.a.g,n)},vX(YWn,"EnumMap/MapEntry",1354),wAn(174,nVn,{20:1,28:1,14:1,174:1,21:1});var yet=vX(YWn,"EnumSet",174);wAn(156,174,{20:1,28:1,14:1,174:1,156:1,21:1},YK),MWn.Fc=function(n){return orn(this,BB(n,22))},MWn.Hc=function(n){return CG(this,n)},MWn.Kc=function(){return new QT(this)},MWn.Mc=function(n){return IG(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"EnumSet/EnumSetImpl",156),wAn(343,1,QWn,QT),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return u4(this)},MWn.Ob=function(){return k$(this)},MWn.Qb=function(){Mx(-1!=this.b),$X(this.c.b,this.b,null),--this.c.c,this.b=-1},MWn.a=-1,MWn.b=-1,vX(YWn,"EnumSet/EnumSetImpl/IteratorImpl",343),wAn(43,488,tYn,xp,XT,mO),MWn.re=function(n,t){return GI(n)===GI(t)||null!=n&&Nfn(n,t)},MWn.se=function(n){return 0|nsn(n)},vX(YWn,"HashMap",43),wAn(53,nVn,eYn,Rv,bE,$q),MWn.Fc=function(n){return TU(this,n)},MWn.$b=function(){this.a.$b()},MWn.Hc=function(n){return FT(this,n)},MWn.dc=function(){return 0==this.a.gc()},MWn.Kc=function(){return this.a.ec().Kc()},MWn.Mc=function(n){return eL(this,n)},MWn.gc=function(){return this.a.gc()};var ket,jet=vX(YWn,"HashSet",53);wAn(1781,1,wVn,F),MWn.ud=function(n){ran(this,n)},MWn.Ib=function(){return"IntSummaryStatistics[count = "+vz(this.a)+", avg = "+(oS(this.a,0)?j2(this.d)/j2(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+vz(this.d)+"]"},MWn.a=0,MWn.b=_Vn,MWn.c=DWn,MWn.d=0,vX(YWn,"IntSummaryStatistics",1781),wAn(1049,1,pVn,eA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new S2(this)},MWn.c=0,vX(YWn,"InternalHashCodeMap",1049),wAn(711,1,QWn,S2),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.d=this.a[this.c++],this.d},MWn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},MWn.Qb=function(){gAn(this.e,this.d.cd()),0!=this.c&&--this.c},MWn.c=0,MWn.d=null,vX(YWn,"InternalHashCodeMap/1",711),wAn(1047,1,pVn,iA),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new p4(this)},MWn.c=0,MWn.d=0,vX(YWn,"InternalStringMap",1047),wAn(710,1,QWn,p4),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new JK(this.d,this.c,this.d.d)},MWn.Ob=function(){return!this.a.done},MWn.Qb=function(){Gan(this.d,this.c.value[0])},vX(YWn,"InternalStringMap/1",710),wAn(1048,1984,VQn,JK),MWn.cd=function(){return this.b.value[0]},MWn.dd=function(){return this.a.d!=this.c?hS(this.a,this.b.value[0]):this.b.value[1]},MWn.ed=function(n){return ubn(this.a,this.b.value[0],n)},MWn.c=0,vX(YWn,"InternalStringMap/2",1048),wAn(228,43,tYn,v4,q8),MWn.$b=function(){kR(this)},MWn._b=function(n){return lS(this,n)},MWn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(cV(t.e,n))return!0;t=t.a}return!1},MWn.vc=function(){return new iw(this)},MWn.xc=function(n){return lnn(this,n)},MWn.zc=function(n,t){return Jgn(this,n,t)},MWn.Bc=function(n){return k7(this,n)},MWn.gc=function(){return NT(this.e)},MWn.c=!1,vX(YWn,"LinkedHashMap",228),wAn(387,383,{484:1,383:1,387:1,42:1},Cx,nH),vX(YWn,"LinkedHashMap/ChainEntry",387),wAn(701,nVn,tVn,iw),MWn.$b=function(){kR(this.a)},MWn.Hc=function(n){return y2(this,n)},MWn.Kc=function(){return new hW(this)},MWn.Mc=function(n){var t;return!!y2(this,n)&&(t=BB(n,42).cd(),k7(this.a,t),!0)},MWn.gc=function(){return NT(this.a.e)},vX(YWn,"LinkedHashMap/EntrySet",701),wAn(702,1,QWn,hW),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return s9(this)},MWn.Ob=function(){return this.b!=this.c.a.d},MWn.Qb=function(){Mx(!!this.a),p2(this.c.a.e,this),RH(this.a),v6(this.c.a.e,this.a.d),bD(this.c.a.e,this),this.a=null},vX(YWn,"LinkedHashMap/EntrySet/EntryIterator",702),wAn(178,53,eYn,fA,LN,Lq);var Eet=vX(YWn,"LinkedHashSet",178);wAn(68,1964,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1},YT,n_),MWn.Fc=function(n){return DH(this,n)},MWn.$b=function(){yQ(this)},MWn.Zc=function(n){return spn(this,n)},MWn.gc=function(){return this.b},MWn.b=0;var Tet,Met,Set,Pet,Cet,Iet=vX(YWn,"LinkedList",68);wAn(970,1,cVn,ZK),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){nX(this,n)},MWn.Ob=function(){return EE(this)},MWn.Sb=function(){return this.b.b!=this.d.a},MWn.Pb=function(){return b3(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){return U0(this)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){mtn(this)},MWn.Wb=function(n){Mx(!!this.c),this.c.c=n},MWn.a=0,MWn.c=null,vX(YWn,"LinkedList/ListIteratorImpl",970),wAn(608,1,{},$),vX(YWn,"LinkedList/Node",608),wAn(1959,1,{}),vX(YWn,"Locale",1959),wAn(861,1959,{},L),MWn.Ib=function(){return""},vX(YWn,"Locale/1",861),wAn(862,1959,{},N),MWn.Ib=function(){return"unknown"},vX(YWn,"Locale/4",862),wAn(109,60,{3:1,102:1,60:1,78:1,109:1},yv,lV),vX(YWn,"NoSuchElementException",109),wAn(404,1,{404:1},vy),MWn.Fb=function(n){var t;return n===this||!!cL(n,404)&&(t=BB(n,404),cV(this.a,t.a))},MWn.Hb=function(){return KA(this.a)},MWn.Ib=function(){return null!=this.a?GWn+kN(this.a)+")":"Optional.empty()"},vX(YWn,"Optional",404),wAn(463,1,{463:1},CO,yx),MWn.Fb=function(n){var t;return n===this||!!cL(n,463)&&(t=BB(n,463),this.a==t.a&&0==Pln(this.b,t.b))},MWn.Hb=function(){return this.a?CJ(this.b):0},MWn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalDouble",463),wAn(517,1,{517:1},IO,kx),MWn.Fb=function(n){var t;return n===this||!!cL(n,517)&&(t=BB(n,517),this.a==t.a&&0==E$(this.b,t.b))},MWn.Hb=function(){return this.a?this.b:0},MWn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},MWn.a=!1,MWn.b=0,vX(YWn,"OptionalInt",517),wAn(503,2004,ZWn,Xz),MWn.Gc=function(n){return ikn(this,n)},MWn.$b=function(){this.b.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=(null==n?-1:E7(this.b,n,0))},MWn.Kc=function(){return new Vb(this)},MWn.Mc=function(n){return srn(this,n)},MWn.gc=function(){return this.b.c.length},MWn.Nc=function(){return new w1(this,256)},MWn.Pc=function(){return bx(this.b)},MWn.Qc=function(n){return Qgn(this.b,n)},vX(YWn,"PriorityQueue",503),wAn(1277,1,QWn,Vb),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return this.a<this.c.b.c.length},MWn.Pb=function(){return Px(this.a<this.c.b.c.length),this.b=this.a++,xq(this.c.b,this.b)},MWn.Qb=function(){Mx(-1!=this.b),hrn(this.c,this.a=this.b),this.b=-1},MWn.a=0,MWn.b=-1,vX(YWn,"PriorityQueue/1",1277),wAn(230,1,{230:1},sbn,C4),MWn.a=0,MWn.b=0;var Oet,Aet,$et,Let=0;vX(YWn,"Random",230),wAn(27,1,fVn,w1,zU,CV),MWn.qd=function(){return this.a},MWn.rd=function(){return Dz(this),this.c},MWn.Nb=function(n){Dz(this),this.d.Nb(n)},MWn.sd=function(n){return ntn(this,n)},MWn.a=0,MWn.c=0,vX(YWn,"Spliterators/IteratorSpliterator",27),wAn(485,27,fVn,wS),vX(YWn,"SortedSet/1",485),wAn(602,1,nYn,Qb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/0methodref$accept$Type",602),wAn(603,1,nYn,Yb),MWn.we=function(n){this.a.td(n)},vX(YWn,"Spliterator/OfDouble/1methodref$accept$Type",603),wAn(604,1,wVn,Jb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/2methodref$accept$Type",604),wAn(605,1,wVn,Zb),MWn.ud=function(n){this.a.td(iln(n))},vX(YWn,"Spliterator/OfInt/3methodref$accept$Type",605),wAn(617,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.d},MWn.rd=function(){return this.e},MWn.d=0,MWn.e=0,vX(YWn,"Spliterators/BaseSpliterator",617),wAn(721,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,182)?gE(this,BB(n,182)):gE(this,new Yb(n))},MWn.sd=function(n){return cL(n,182)?this.ye(BB(n,182)):this.ye(new Qb(n))},vX(YWn,"Spliterators/AbstractDoubleSpliterator",721),wAn(720,617,fVn),MWn.xe=function(n){gE(this,n)},MWn.Nb=function(n){cL(n,196)?gE(this,BB(n,196)):gE(this,new Zb(n))},MWn.sd=function(n){return cL(n,196)?this.ye(BB(n,196)):this.ye(new Jb(n))},vX(YWn,"Spliterators/AbstractIntSpliterator",720),wAn(540,617,fVn),vX(YWn,"Spliterators/AbstractSpliterator",540),wAn(692,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return this.b},MWn.rd=function(){return this.d-this.c},MWn.b=0,MWn.c=0,MWn.d=0,vX(YWn,"Spliterators/BaseArraySpliterator",692),wAn(947,692,fVn,BH),MWn.ze=function(n,t){cj(this,BB(n,38),t)},MWn.Nb=function(n){DX(this,n)},MWn.sd=function(n){return K6(this,n)},vX(YWn,"Spliterators/ArraySpliterator",947),wAn(693,692,fVn,_K),MWn.ze=function(n,t){aj(this,BB(n,182),t)},MWn.xe=function(n){DX(this,n)},MWn.Nb=function(n){cL(n,182)?DX(this,BB(n,182)):DX(this,new Yb(n))},MWn.ye=function(n){return K6(this,n)},MWn.sd=function(n){return cL(n,182)?K6(this,BB(n,182)):K6(this,new Qb(n))},vX(YWn,"Spliterators/DoubleArraySpliterator",693),wAn(1968,1,fVn),MWn.Nb=function(n){pE(this,n)},MWn.qd=function(){return 16448},MWn.rd=function(){return 0},vX(YWn,"Spliterators/EmptySpliterator",1968),wAn(946,1968,fVn,z),MWn.xe=function(n){Bf(n)},MWn.Nb=function(n){cL(n,196)?Bf(BB(n,196)):Bf(new Zb(n))},MWn.ye=function(n){return bS(n)},MWn.sd=function(n){return cL(n,196)?bS(BB(n,196)):bS(new Jb(n))},vX(YWn,"Spliterators/EmptySpliterator/OfInt",946),wAn(580,52,fYn,_v),MWn.Vc=function(n,t){Kz(n,this.a.c.length+1),kG(this.a,n,t)},MWn.Fc=function(n){return WB(this.a,n)},MWn.Wc=function(n,t){return Kz(n,this.a.c.length+1),ohn(this.a,n,t)},MWn.Gc=function(n){return gun(this.a,n)},MWn.$b=function(){this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Jc=function(n){Otn(this.a,n)},MWn.Xb=function(n){return Kz(n,this.a.c.length),xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return new Wb(this.a)},MWn.$c=function(n){return Kz(n,this.a.c.length),s6(this.a,n)},MWn.Ud=function(n,t){h1(this.a,n,t)},MWn._c=function(n,t){return Kz(n,this.a.c.length),c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.ad=function(n){m$(this.a,n)},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.Ib=function(){return LMn(this.a)},vX(YWn,"Vector",580),wAn(809,580,fYn,om),vX(YWn,"Stack",809),wAn(206,1,{206:1},$an),MWn.Ib=function(){return W0(this)},vX(YWn,"StringJoiner",206),wAn(544,1992,{3:1,83:1,171:1,161:1},WT,Wz),MWn.$b=function(){my(this)},MWn.vc=function(){return new xN(this)},MWn.zc=function(n,t){return Mon(this,n,t)},MWn.Bc=function(n){return $J(this,n)},MWn.gc=function(){return this.c},MWn.c=0,vX(YWn,"TreeMap",544),wAn(390,1,QWn,BR),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return mx(this)},MWn.Ob=function(){return aS(this.a)},MWn.Qb=function(){e_(this)},vX(YWn,"TreeMap/EntryIterator",390),wAn(435,739,tVn,xN),MWn.$b=function(){my(this.a)},vX(YWn,"TreeMap/EntrySet",435),wAn(436,383,{484:1,383:1,42:1,436:1},H8),MWn.b=!1;var Net,xet,Det,Ret,Ket=vX(YWn,"TreeMap/Node",436);wAn(621,1,{},q),MWn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(YWn,"TreeMap/State",621),wAn(297,22,lYn,gS),MWn.Ae=function(){return!1},MWn.Be=function(){return!1};var _et,Fet=Ben(YWn,"TreeMap/SubMapType",297,Unt,J2,h_);wAn(1112,297,lYn,LA),MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/1",1112,Fet,null,null),wAn(1113,297,lYn,A$),MWn.Ae=function(){return!0},MWn.Be=function(){return!0},Ben(YWn,"TreeMap/SubMapType/2",1113,Fet,null,null),wAn(1114,297,lYn,NA),MWn.Ae=function(){return!0},Ben(YWn,"TreeMap/SubMapType/3",1114,Fet,null,null),wAn(208,nVn,{3:1,20:1,28:1,14:1,271:1,21:1,84:1,208:1},zv,dE),MWn.Nc=function(){return new wS(this)},MWn.Fc=function(n){return ZU(this,n)},MWn.$b=function(){my(this.a)},MWn.Hc=function(n){return DK(this.a,n)},MWn.Kc=function(){return new Fb(new BR(new xN(new _b(this.a).a).b))},MWn.Mc=function(n){return MN(this,n)},MWn.gc=function(){return this.a.c};var Bet=vX(YWn,"TreeSet",208);wAn(966,1,{},rw),MWn.Ce=function(n,t){return DD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$0$Type",966),wAn(967,1,{},cw),MWn.Ce=function(n,t){return RD(this.a,n,t)},vX(bYn,"BinaryOperator/lambda$1$Type",967),wAn(846,1,{},G),MWn.Kb=function(n){return n},vX(bYn,"Function/lambda$0$Type",846),wAn(431,1,DVn,aw),MWn.Mb=function(n){return!this.a.Mb(n)},vX(bYn,"Predicate/lambda$2$Type",431),wAn(572,1,{572:1});var Het,qet,Get=vX(wYn,"Handler",572);wAn(2007,1,KWn),MWn.ne=function(){return"DUMMY"},MWn.Ib=function(){return this.ne()},vX(wYn,"Level",2007),wAn(1621,2007,KWn,U),MWn.ne=function(){return"INFO"},vX(wYn,"Level/LevelInfo",1621),wAn(1640,1,{},Kv),vX(wYn,"LogManager",1640),wAn(1780,1,KWn,i_),MWn.b=null,vX(wYn,"LogRecord",1780),wAn(512,1,{512:1},y5),MWn.e=!1;var zet,Uet,Xet,Wet=!1,Vet=!1,Qet=!1,Yet=!1,Jet=!1;vX(wYn,"Logger",512),wAn(819,572,{572:1},X),vX(wYn,"SimpleConsoleLogHandler",819),wAn(132,22,{3:1,35:1,22:1,132:1},pS);var Zet,nit=Ben(pYn,"Collector/Characteristics",132,Unt,p1,f_);wAn(744,1,{},jU),vX(pYn,"CollectorImpl",744),wAn(1060,1,{},W),MWn.Ce=function(n,t){return Ofn(BB(n,206),BB(t,206))},vX(pYn,"Collectors/10methodref$merge$Type",1060),wAn(1061,1,{},V),MWn.Kb=function(n){return W0(BB(n,206))},vX(pYn,"Collectors/11methodref$toString$Type",1061),wAn(1062,1,{},uw),MWn.Kb=function(n){return hN(),!!TO(n)},vX(pYn,"Collectors/12methodref$test$Type",1062),wAn(251,1,{},B),MWn.Od=function(n,t){BB(n,14).Fc(t)},vX(pYn,"Collectors/20methodref$add$Type",251),wAn(253,1,{},H),MWn.Ee=function(){return new Np},vX(pYn,"Collectors/21methodref$ctor$Type",253),wAn(346,1,{},Q),MWn.Ee=function(){return new Rv},vX(pYn,"Collectors/23methodref$ctor$Type",346),wAn(347,1,{},Y),MWn.Od=function(n,t){TU(BB(n,53),t)},vX(pYn,"Collectors/24methodref$add$Type",347),wAn(1055,1,{},J),MWn.Ce=function(n,t){return ZT(BB(n,15),BB(t,14))},vX(pYn,"Collectors/4methodref$addAll$Type",1055),wAn(1059,1,{},Z),MWn.Od=function(n,t){b6(BB(n,206),BB(t,475))},vX(pYn,"Collectors/9methodref$add$Type",1059),wAn(1058,1,{},YB),MWn.Ee=function(){return new $an(this.a,this.b,this.c)},vX(pYn,"Collectors/lambda$15$Type",1058),wAn(1063,1,{},nn),MWn.Ee=function(){var n;return Jgn(n=new v4,(hN(),!1),new Np),Jgn(n,!0,new Np),n},vX(pYn,"Collectors/lambda$22$Type",1063),wAn(1064,1,{},ow),MWn.Ee=function(){return Pun(Gk(Ant,1),HWn,1,5,[this.a])},vX(pYn,"Collectors/lambda$25$Type",1064),wAn(1065,1,{},sw),MWn.Od=function(n,t){Bq(this.a,een(n))},vX(pYn,"Collectors/lambda$26$Type",1065),wAn(1066,1,{},hw),MWn.Ce=function(n,t){return _z(this.a,een(n),een(t))},vX(pYn,"Collectors/lambda$27$Type",1066),wAn(1067,1,{},tn),MWn.Kb=function(n){return een(n)[0]},vX(pYn,"Collectors/lambda$28$Type",1067),wAn(713,1,{},en),MWn.Ce=function(n,t){return Hq(n,t)},vX(pYn,"Collectors/lambda$4$Type",713),wAn(252,1,{},rn),MWn.Ce=function(n,t){return GT(BB(n,14),BB(t,14))},vX(pYn,"Collectors/lambda$42$Type",252),wAn(348,1,{},cn),MWn.Ce=function(n,t){return zT(BB(n,53),BB(t,53))},vX(pYn,"Collectors/lambda$50$Type",348),wAn(349,1,{},an),MWn.Kb=function(n){return BB(n,53)},vX(pYn,"Collectors/lambda$51$Type",349),wAn(1054,1,{},fw),MWn.Od=function(n,t){bsn(this.a,BB(n,83),t)},vX(pYn,"Collectors/lambda$7$Type",1054),wAn(1056,1,{},un),MWn.Ce=function(n,t){return pun(BB(n,83),BB(t,83),new J)},vX(pYn,"Collectors/lambda$8$Type",1056),wAn(1057,1,{},lw),MWn.Kb=function(n){return mbn(this.a,BB(n,83))},vX(pYn,"Collectors/lambda$9$Type",1057),wAn(539,1,{}),MWn.He=function(){jW(this)},MWn.d=!1,vX(pYn,"TerminatableStream",539),wAn(812,539,vYn,AD),MWn.He=function(){jW(this)},vX(pYn,"DoubleStreamImpl",812),wAn(1784,721,fVn,ZB),MWn.ye=function(n){return pmn(this,BB(n,182))},MWn.a=null,vX(pYn,"DoubleStreamImpl/2",1784),wAn(1785,1,nYn,bw),MWn.we=function(n){HA(this.a,n)},vX(pYn,"DoubleStreamImpl/2/lambda$0$Type",1785),wAn(1782,1,nYn,ww),MWn.we=function(n){BA(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$0$Type",1782),wAn(1783,1,nYn,dw),MWn.we=function(n){hdn(this.a,n)},vX(pYn,"DoubleStreamImpl/lambda$2$Type",1783),wAn(1358,720,fVn,m5),MWn.ye=function(n){return k2(this,BB(n,196))},MWn.a=0,MWn.b=0,MWn.c=0,vX(pYn,"IntStream/5",1358),wAn(787,539,vYn,$D),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),this.a},vX(pYn,"IntStreamImpl",787),wAn(788,539,vYn,VT),MWn.He=function(){jW(this)},MWn.Ie=function(){return EW(this),IL(),$et},vX(pYn,"IntStreamImpl/Empty",788),wAn(1463,1,wVn,gw),MWn.ud=function(n){ran(this.a,n)},vX(pYn,"IntStreamImpl/lambda$4$Type",1463);var tit,eit=bq(pYn,"Stream");wAn(30,539,{525:1,670:1,833:1},Rq),MWn.He=function(){jW(this)},vX(pYn,"StreamImpl",30),wAn(845,1,{},on),MWn.ld=function(n){return lH(n)},vX(pYn,"StreamImpl/0methodref$lambda$2$Type",845),wAn(1084,540,fVn,KK),MWn.sd=function(n){for(;$9(this);){if(this.a.sd(n))return!0;jW(this.b),this.b=null,this.a=null}return!1},vX(pYn,"StreamImpl/1",1084),wAn(1085,1,lVn,pw),MWn.td=function(n){iH(this.a,BB(n,833))},vX(pYn,"StreamImpl/1/lambda$0$Type",1085),wAn(1086,1,DVn,vw),MWn.Mb=function(n){return TU(this.a,n)},vX(pYn,"StreamImpl/1methodref$add$Type",1086),wAn(1087,540,fVn,vQ),MWn.sd=function(n){var t;return this.a||(t=new Np,this.b.a.Nb(new mw(t)),SQ(),m$(t,this.c),this.a=new w1(t,16)),ntn(this.a,n)},MWn.a=null,vX(pYn,"StreamImpl/5",1087),wAn(1088,1,lVn,mw),MWn.td=function(n){WB(this.a,n)},vX(pYn,"StreamImpl/5/2methodref$add$Type",1088),wAn(722,540,fVn,Q9),MWn.sd=function(n){for(this.b=!1;!this.b&&this.c.sd(new AS(this,n)););return this.b},MWn.b=!1,vX(pYn,"StreamImpl/FilterSpliterator",722),wAn(1079,1,lVn,AS),MWn.td=function(n){Rz(this.a,this.b,n)},vX(pYn,"StreamImpl/FilterSpliterator/lambda$0$Type",1079),wAn(1075,721,fVn,E6),MWn.ye=function(n){return jK(this,BB(n,182))},vX(pYn,"StreamImpl/MapToDoubleSpliterator",1075),wAn(1078,1,lVn,$S),MWn.td=function(n){jS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1078),wAn(1074,720,fVn,T6),MWn.ye=function(n){return EK(this,BB(n,196))},vX(pYn,"StreamImpl/MapToIntSpliterator",1074),wAn(1077,1,lVn,LS),MWn.td=function(n){kS(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1077),wAn(719,540,fVn,M6),MWn.sd=function(n){return TK(this,n)},vX(pYn,"StreamImpl/MapToObjSpliterator",719),wAn(1076,1,lVn,NS),MWn.td=function(n){ES(this.a,this.b,n)},vX(pYn,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1076),wAn(618,1,lVn,sn),MWn.td=function(n){Il(this,n)},vX(pYn,"StreamImpl/ValueConsumer",618),wAn(1080,1,lVn,hn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$0$Type",1080),wAn(1081,1,lVn,fn),MWn.td=function(n){dM()},vX(pYn,"StreamImpl/lambda$1$Type",1081),wAn(1082,1,{},yw),MWn.Ce=function(n,t){return F_(this.a,n,t)},vX(pYn,"StreamImpl/lambda$4$Type",1082),wAn(1083,1,lVn,IS),MWn.td=function(n){ER(this.b,this.a,n)},vX(pYn,"StreamImpl/lambda$5$Type",1083),wAn(1089,1,lVn,kw),MWn.td=function(n){Hon(this.a,BB(n,365))},vX(pYn,"TerminatableStream/lambda$0$Type",1089),wAn(2041,1,{}),wAn(1914,1,{},ln),vX("javaemul.internal","ConsoleLogger",1914),wAn(2038,1,{});var iit,rit,cit=0,ait=0;wAn(1768,1,lVn,bn),MWn.td=function(n){BB(n,308)},vX(TYn,"BowyerWatsonTriangulation/lambda$0$Type",1768),wAn(1769,1,lVn,jw),MWn.td=function(n){Frn(this.a,BB(n,308).e)},vX(TYn,"BowyerWatsonTriangulation/lambda$1$Type",1769),wAn(1770,1,lVn,wn),MWn.td=function(n){BB(n,168)},vX(TYn,"BowyerWatsonTriangulation/lambda$2$Type",1770),wAn(1765,1,MYn,Ew),MWn.ue=function(n,t){return q3(this.a,BB(n,168),BB(t,168))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(TYn,"NaiveMinST/lambda$0$Type",1765),wAn(499,1,{},Tw),vX(TYn,"NodeMicroLayout",499),wAn(168,1,{168:1},xS),MWn.Fb=function(n){var t;return!!cL(n,168)&&(t=BB(n,168),cV(this.a,t.a)&&cV(this.b,t.b)||cV(this.a,t.b)&&cV(this.b,t.a))},MWn.Hb=function(){return KA(this.a)+KA(this.b)};var uit=vX(TYn,"TEdge",168);wAn(308,1,{308:1},ZFn),MWn.Fb=function(n){var t;return!!cL(n,308)&&K7(this,(t=BB(n,308)).a)&&K7(this,t.b)&&K7(this,t.c)},MWn.Hb=function(){return KA(this.a)+KA(this.b)+KA(this.c)},vX(TYn,"TTriangle",308),wAn(221,1,{221:1},C$),vX(TYn,"Tree",221),wAn(1254,1,{},IZ),vX(SYn,"Scanline",1254);var oit=bq(SYn,PYn);wAn(1692,1,{},ltn),vX(CYn,"CGraph",1692),wAn(307,1,{307:1},cZ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.g=0,MWn.i=0,MWn.k=KQn,vX(CYn,"CGroup",307),wAn(815,1,{},Xv),vX(CYn,"CGroup/CGroupBuilder",815),wAn(57,1,{57:1},AR),MWn.Ib=function(){return this.j?SD(this.j.Kb(this)):(ED(bit),bit.o+"@"+(PN(this)>>>0).toString(16))},MWn.f=0,MWn.i=KQn;var sit,hit,fit,lit,bit=vX(CYn,"CNode",57);wAn(814,1,{},Wv),vX(CYn,"CNode/CNodeBuilder",814),wAn(1525,1,{},dn),MWn.Oe=function(n,t){return 0},MWn.Pe=function(n,t){return 0},vX(CYn,OYn,1525),wAn(1790,1,{},gn),MWn.Le=function(n){var t,i,r,c,a,u,o,s,h,f,l,b,w,d,g;for(h=RQn,r=new Wb(n.a.b);r.a<r.c.c.length;)t=BB(n0(r),57),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new YT,u=new Wb(n.a.a);u.a<u.c.c.length;)(a=BB(n0(u),307)).k=h,0==a.g&&r5(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=BB(0==w.b?null:(Px(0!=w.b),Atn(w,w.a.a)),307)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=BB(b.Pb(),57),g=a.k+f.b.a,!Ghn(n,a,n.d)||f.d.c<g?f.i=g:f.i=f.d.c;for(c-=a.j.i,a.b+=c,n.d==(Ffn(),FPt)||n.d==KPt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=BB(l.Pb(),57)).c.Kc();s.Ob();)o=BB(s.Pb(),57),d=dA(n.d)?n.g.Oe(f,o):n.g.Pe(f,o),o.a.k=e.Math.max(o.a.k,f.i+f.d.b+d-o.b.a),cY(n,o,n.d)&&(o.a.k=e.Math.max(o.a.k,o.d.c-o.b.a)),--o.a.g,0==o.a.g&&DH(w,o.a)}for(i=new Wb(n.a.b);i.a<i.c.c.length;)(t=BB(n0(i),57)).d.c=t.i},vX(CYn,"LongestPathCompaction",1790),wAn(1690,1,{},yOn),MWn.e=!1;var wit,dit,git=vX(CYn,xYn,1690);wAn(1691,1,lVn,Mw),MWn.td=function(n){iun(this.a,BB(n,46))},vX(CYn,DYn,1691),wAn(1791,1,{},pn),MWn.Me=function(n){var t,e,i,r,c,a;for(t=new Wb(n.a.b);t.a<t.c.c.length;)BB(n0(t),57).c.$b();for(i=new Wb(n.a.b);i.a<i.c.c.length;)for(e=BB(n0(i),57),c=new Wb(n.a.b);c.a<c.c.c.length;)e!=(r=BB(n0(c),57))&&(e.a&&e.a==r.a||(a=dA(n.d)?n.g.Pe(e,r):n.g.Oe(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&Rdn(r.d.d+r.d.a+a,e.d.d)&&Kdn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},vX(CYn,"QuadraticConstraintCalculation",1791),wAn(522,1,{522:1},Dp),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(CYn,RYn,522),wAn(803,1,{},RG),MWn.Me=function(n){this.c=n,pCn(this,new yn)},vX(CYn,KYn,803),wAn(1718,1,{679:1},fY),MWn.Ke=function(n){_Pn(this,BB(n,464))},vX(CYn,_Yn,1718),wAn(1719,1,MYn,vn),MWn.ue=function(n,t){return uQ(BB(n,57),BB(t,57))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CYn,FYn,1719),wAn(464,1,{464:1},OS),MWn.a=!1,vX(CYn,BYn,464),wAn(1720,1,MYn,mn),MWn.ue=function(n,t){return Jkn(BB(n,464),BB(t,464))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(CYn,HYn,1720),wAn(1721,1,qYn,yn),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(CYn,"ScanlineConstraintCalculator/lambda$1$Type",1721),wAn(428,22,{3:1,35:1,22:1,428:1},FS);var pit,vit,mit,yit=Ben(GYn,"HighLevelSortingCriterion",428,Unt,rJ,l_);wAn(427,22,{3:1,35:1,22:1,427:1},BS);var kit,jit,Eit,Tit,Mit,Sit,Pit,Cit,Iit,Oit,Ait,$it,Lit,Nit,xit,Dit,Rit,Kit=Ben(GYn,"LowLevelSortingCriterion",427,Unt,cJ,b_),_it=bq(zYn,"ILayoutMetaDataProvider");wAn(853,1,QYn,Gh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,UYn),YYn),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),Cit),(PPn(),gMt)),Bit),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,XYn),YYn),"Polyomino Secondary Sorting Criterion"),"Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion."),Sit),gMt),Kit),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,WYn),YYn),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),Tit),gMt),yit),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,VYn),YYn),"Fill Polyominoes"),"Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area."),(hN(),!0)),wMt),ktt),nbn(hMt))))},vX(GYn,"PolyominoOptions",853),wAn(250,22,{3:1,35:1,22:1,250:1},HS);var Fit,Bit=Ben(GYn,"TraversalStrategy",250,Unt,Tin,w_);wAn(213,1,{213:1},kn),MWn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},MWn.a=1,MWn.b=0,MWn.c=0,MWn.f=!1,MWn.g=0;var Hit=vX(JYn,"NEdge",213);wAn(176,1,{},Hv),vX(JYn,"NEdge/NEdgeBuilder",176),wAn(653,1,{},Fv),vX(JYn,"NGraph",653),wAn(121,1,{121:1},k6),MWn.c=-1,MWn.d=0,MWn.e=0,MWn.i=-1,MWn.j=!1;var qit=vX(JYn,"NNode",121);wAn(795,1,JQn,Bv),MWn.Jc=function(n){e5(this,n)},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Vc=function(n,t){++this.b,kG(this.a,n,t)},MWn.Fc=function(n){return RN(this,n)},MWn.Wc=function(n,t){return++this.b,ohn(this.a,n,t)},MWn.Gc=function(n){return++this.b,gun(this.a,n)},MWn.$b=function(){++this.b,this.a.c=x8(Ant,HWn,1,0,5,1)},MWn.Hc=function(n){return-1!=E7(this.a,n,0)},MWn.Ic=function(n){return oun(this.a,n)},MWn.Xb=function(n){return xq(this.a,n)},MWn.Xc=function(n){return E7(this.a,n,0)},MWn.dc=function(){return 0==this.a.c.length},MWn.Kc=function(){return L9(new Wb(this.a))},MWn.Yc=function(){throw Hp(new pv)},MWn.Zc=function(n){throw Hp(new pv)},MWn.$c=function(n){return++this.b,s6(this.a,n)},MWn.Mc=function(n){return KN(this,n)},MWn._c=function(n,t){return++this.b,c5(this.a,n,t)},MWn.gc=function(){return this.a.c.length},MWn.bd=function(n,t){return new s1(this.a,n,t)},MWn.Pc=function(){return bx(this.a)},MWn.Qc=function(n){return Qgn(this.a,n)},MWn.b=0,vX(JYn,"NNode/ChangeAwareArrayList",795),wAn(269,1,{},qv),vX(JYn,"NNode/NNodeBuilder",269),wAn(1630,1,{},jn),MWn.a=!1,MWn.f=DWn,MWn.j=0,vX(JYn,"NetworkSimplex",1630),wAn(1294,1,lVn,Sw),MWn.td=function(n){qzn(this.a,BB(n,680),!0,!1)},vX(nJn,"NodeLabelAndSizeCalculator/lambda$0$Type",1294),wAn(558,1,{},Pw),MWn.b=!0,MWn.c=!0,MWn.d=!0,MWn.e=!0,vX(nJn,"NodeMarginCalculator",558),wAn(212,1,{212:1}),MWn.j=!1,MWn.k=!1;var Git,zit,Uit,Xit=vX(tJn,"Cell",212);wAn(124,212,{124:1,212:1},FR),MWn.Re=function(){return XH(this)},MWn.Se=function(){var n;return n=this.n,this.a.a+n.b+n.c},vX(tJn,"AtomicCell",124),wAn(232,22,{3:1,35:1,22:1,232:1},qS);var Wit,Vit=Ben(tJn,"ContainerArea",232,Unt,v1,d_);wAn(326,212,iJn),vX(tJn,"ContainerCell",326),wAn(1473,326,iJn,Hwn),MWn.Re=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].Re()):n=Ybn(this,Umn(this,!0)),n>0?n+this.n.d+this.n.a:0},MWn.Se=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].Se());else if(this.g)c=Ybn(this,Okn(this,null,!0));else for(Dtn(),i=0,r=(t=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)n=t[i],c=e.Math.max(c,Ybn(this,Okn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},MWn.Te=function(){var n,t,e,i,r;if(this.g)for(n=Okn(this,null,!1),Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n);else for(Dtn(),i=0,r=(e=Pun(Gk(Vit,1),$Vn,232,0,[Git,zit,Uit])).length;i<r;++i)Vxn(this,t=e[i],n=Okn(this,t,!1))},MWn.Ue=function(){var n,t,i,r;t=this.i,n=this.n,r=Umn(this,!1),Q5(this,(Dtn(),Git),t.d+n.d,r),Q5(this,Uit,t.d+t.a-n.a-r[2],r),i=t.a-n.d-n.a,r[0]>0&&(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),Q5(this,zit,t.d+n.d+r[0]-(r[1]-i)/2,r)},MWn.b=null,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=!1;var Qit,Yit,Jit,Zit=0,nrt=0;vX(tJn,"GridContainerCell",1473),wAn(461,22,{3:1,35:1,22:1,461:1},GS);var trt,ert=Ben(tJn,"HorizontalLabelAlignment",461,Unt,m1,g_);wAn(306,212,{212:1,306:1},yJ,wtn,KY),MWn.Re=function(){return WH(this)},MWn.Se=function(){return VH(this)},MWn.a=0,MWn.c=!1;var irt,rrt,crt,art=vX(tJn,"LabelCell",306);wAn(244,326,{212:1,326:1,244:1},Ign),MWn.Re=function(){return MIn(this)},MWn.Se=function(){return SIn(this)},MWn.Te=function(){_Fn(this)},MWn.Ue=function(){GFn(this)},MWn.b=0,MWn.c=0,MWn.d=!1,vX(tJn,"StripContainerCell",244),wAn(1626,1,DVn,En),MWn.Mb=function(n){return Qy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$0$Type",1626),wAn(1627,1,{},Tn),MWn.Fe=function(n){return BB(n,212).Se()},vX(tJn,"StripContainerCell/lambda$1$Type",1627),wAn(1628,1,DVn,Mn),MWn.Mb=function(n){return Yy(BB(n,212))},vX(tJn,"StripContainerCell/lambda$2$Type",1628),wAn(1629,1,{},Sn),MWn.Fe=function(n){return BB(n,212).Re()},vX(tJn,"StripContainerCell/lambda$3$Type",1629),wAn(462,22,{3:1,35:1,22:1,462:1},zS);var urt,ort,srt,hrt,frt,lrt,brt,wrt,drt,grt,prt,vrt,mrt,yrt,krt,jrt,Ert,Trt,Mrt,Srt,Prt,Crt,Irt,Ort=Ben(tJn,"VerticalLabelAlignment",462,Unt,y1,p_);wAn(789,1,{},eUn),MWn.c=0,MWn.d=0,MWn.k=0,MWn.s=0,MWn.t=0,MWn.v=!1,MWn.w=0,MWn.D=!1,vX(sJn,"NodeContext",789),wAn(1471,1,MYn,Pn),MWn.ue=function(n,t){return YO(BB(n,61),BB(t,61))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/0methodref$comparePortSides$Type",1471),wAn(1472,1,MYn,Cn),MWn.ue=function(n,t){return UTn(BB(n,111),BB(t,111))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(sJn,"NodeContext/1methodref$comparePortContexts$Type",1472),wAn(159,22,{3:1,35:1,22:1,159:1},ocn);var Art,$rt,Lrt,Nrt,xrt,Drt,Rrt,Krt=Ben(sJn,"NodeLabelLocation",159,Unt,tpn,v_);wAn(111,1,{111:1},MOn),MWn.a=!1,vX(sJn,"PortContext",111),wAn(1476,1,lVn,In),MWn.td=function(n){CE(BB(n,306))},vX(lJn,bJn,1476),wAn(1477,1,DVn,On),MWn.Mb=function(n){return!!BB(n,111).c},vX(lJn,wJn,1477),wAn(1478,1,lVn,An),MWn.td=function(n){CE(BB(n,111).c)},vX(lJn,"LabelPlacer/lambda$2$Type",1478),wAn(1475,1,lVn,Ln),MWn.td=function(n){qD(),Yp(BB(n,111))},vX(lJn,"NodeLabelAndSizeUtilities/lambda$0$Type",1475),wAn(790,1,lVn,$_),MWn.td=function(n){RM(this.b,this.c,this.a,BB(n,181))},MWn.a=!1,MWn.c=!1,vX(lJn,"NodeLabelCellCreator/lambda$0$Type",790),wAn(1474,1,lVn,Cw),MWn.td=function(n){Iv(this.a,BB(n,181))},vX(lJn,"PortContextCreator/lambda$0$Type",1474),wAn(1829,1,{},Nn),vX(gJn,"GreedyRectangleStripOverlapRemover",1829),wAn(1830,1,MYn,$n),MWn.ue=function(n,t){return FN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1830),wAn(1786,1,{},Zv),MWn.a=5,MWn.e=0,vX(gJn,"RectangleStripOverlapRemover",1786),wAn(1787,1,MYn,Dn),MWn.ue=function(n,t){return BN(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1787),wAn(1789,1,MYn,Rn),MWn.ue=function(n,t){return JU(BB(n,222),BB(t,222))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(gJn,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1789),wAn(406,22,{3:1,35:1,22:1,406:1},US);var _rt,Frt,Brt,Hrt,qrt,Grt=Ben(gJn,"RectangleStripOverlapRemover/OverlapRemovalDirection",406,Unt,Y2,m_);wAn(222,1,{222:1},xG),vX(gJn,"RectangleStripOverlapRemover/RectangleNode",222),wAn(1788,1,lVn,Iw),MWn.td=function(n){Cmn(this.a,BB(n,222))},vX(gJn,"RectangleStripOverlapRemover/lambda$1$Type",1788),wAn(1304,1,MYn,Kn),MWn.ue=function(n,t){return zHn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1304),wAn(1307,1,{},_n),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1307),wAn(1308,1,DVn,Fn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1308),wAn(1309,1,DVn,Bn),MWn.Mb=function(n){return BB(n,323).a},vX(vJn,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1309),wAn(1302,1,MYn,Hn),MWn.ue=function(n,t){return WRn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1302),wAn(1305,1,{},xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1305),wAn(767,1,MYn,qn),MWn.ue=function(n,t){return Uan(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinNumOfExtensionsComparator",767),wAn(1300,1,MYn,Gn),MWn.ue=function(n,t){return Qin(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparator",1300),wAn(1301,1,MYn,zn),MWn.ue=function(n,t){return avn(BB(n,321),BB(t,321))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/MinPerimeterComparatorWithShape",1301),wAn(1303,1,MYn,Un),MWn.ue=function(n,t){return BKn(BB(n,167),BB(t,167))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1303),wAn(1306,1,{},Xn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1306),wAn(777,1,{},DS),MWn.Ce=function(n,t){return O2(this,BB(n,46),BB(t,167))},vX(vJn,"SuccessorCombination",777),wAn(644,1,{},Wn),MWn.Ce=function(n,t){var e;return XIn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorJitter",644),wAn(643,1,{},Vn),MWn.Ce=function(n,t){var e;return bxn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorLineByLine",643),wAn(568,1,{},Qn),MWn.Ce=function(n,t){var e;return f$n((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorManhattan",568),wAn(1356,1,{},Yn),MWn.Ce=function(n,t){var e;return jNn((e=BB(n,46),BB(t,167),e))},vX(vJn,"SuccessorMaxNormWindingInMathPosSense",1356),wAn(400,1,{},Ow),MWn.Ce=function(n,t){return BU(this,n,t)},MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=!1,vX(vJn,"SuccessorQuadrantsGeneric",400),wAn(1357,1,{},Jn),MWn.Kb=function(n){return BB(n,324).a},vX(vJn,"SuccessorQuadrantsGeneric/lambda$0$Type",1357),wAn(323,22,{3:1,35:1,22:1,323:1},_S),MWn.a=!1;var zrt,Urt=Ben(EJn,TJn,323,Unt,n3,y_);wAn(1298,1,{}),MWn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=iln(0),r=0;r<this.o;r++)e+=""+n.a,n=iln(lR(n.a));for(e+="\n",n=iln(0),c=0;c<this.p;c++){for(e+=""+n.a,n=iln(lR(n.a)),i=0;i<this.o;i++)0==Vhn(t=trn(this,i,c),0)?e+="_":0==Vhn(t,1)?e+="X":e+="0";e+="\n"}return fx(e,0,e.length-1)},MWn.o=0,MWn.p=0,vX(EJn,"TwoBitGrid",1298),wAn(321,1298,{321:1},qwn),MWn.j=0,MWn.k=0,vX(EJn,"PlanarGrid",321),wAn(167,321,{321:1,167:1}),MWn.g=0,MWn.i=0,vX(EJn,"Polyomino",167);var Xrt=bq(IJn,OJn);wAn(134,1,AJn,Zn),MWn.Ye=function(n,t){return son(this,n,t)},MWn.Ve=function(){return Gq(this)},MWn.We=function(n){return mMn(this,n)},MWn.Xe=function(n){return Lx(this,n)},vX(IJn,"MapPropertyHolder",134),wAn(1299,134,AJn,yxn),vX(EJn,"Polyominoes",1299);var Wrt,Vrt,Qrt,Yrt,Jrt,Zrt,nct,tct,ect=!1;wAn(1766,1,lVn,nt),MWn.td=function(n){uqn(BB(n,221))},vX($Jn,"DepthFirstCompaction/0methodref$compactTree$Type",1766),wAn(810,1,lVn,Aw),MWn.td=function(n){KW(this.a,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$1$Type",810),wAn(1767,1,lVn,N_),MWn.td=function(n){dgn(this.a,this.b,this.c,BB(n,221))},vX($Jn,"DepthFirstCompaction/lambda$2$Type",1767),wAn(65,1,{65:1},AZ),vX($Jn,"Node",65),wAn(1250,1,{},I$),vX($Jn,"ScanlineOverlapCheck",1250),wAn(1251,1,{679:1},hY),MWn.Ke=function(n){GD(this,BB(n,440))},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),wAn(1252,1,MYn,tt),MWn.ue=function(n,t){return xln(BB(n,65),BB(t,65))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),wAn(440,1,{440:1},RS),MWn.a=!1,vX($Jn,"ScanlineOverlapCheck/Timestamp",440),wAn(1253,1,MYn,et),MWn.ue=function(n,t){return Zkn(BB(n,440),BB(t,440))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($Jn,"ScanlineOverlapCheck/lambda$0$Type",1253),wAn(550,1,{},it),vX(LJn,"SVGImage",550),wAn(324,1,{324:1},x_),MWn.Ib=function(){return"("+this.a+FWn+this.b+FWn+this.c+")"},vX(LJn,"UniqueTriple",324),wAn(209,1,NJn),vX(xJn,"AbstractLayoutProvider",209),wAn(1132,209,NJn,rt),MWn.Ze=function(n,t){var e,i,r;OTn(t,DJn,1),this.a=Gy(MD(ZAn(n,(Epn(),Ect)))),P8(n,bct)&&(i=SD(ZAn(n,bct)),(e=XRn(cin(),i))&&BB(sJ(e.f),209).Ze(n,mcn(t,1))),r=new s4(this.a),this.b=Rzn(r,n),0===BB(ZAn(n,(Gsn(),oct)),481).g?(BOn(new ct,this.b),Ypn(n,gct,mMn(this.b,gct))):$T(),Uzn(r),Ypn(n,dct,this.b),HSn(t)},MWn.a=0,vX(RJn,"DisCoLayoutProvider",1132),wAn(1244,1,{},ct),MWn.c=!1,MWn.e=0,MWn.f=0,vX(RJn,"DisCoPolyominoCompactor",1244),wAn(561,1,{561:1},hG),MWn.b=!0,vX(KJn,"DCComponent",561),wAn(394,22,{3:1,35:1,22:1,394:1},KS),MWn.a=!1;var ict,rct,cct=Ben(KJn,"DCDirection",394,Unt,Z2,k_);wAn(266,134,{3:1,266:1,94:1,134:1},EAn),vX(KJn,"DCElement",266),wAn(395,1,{395:1},Imn),MWn.c=0,vX(KJn,"DCExtension",395),wAn(755,134,AJn,_j),vX(KJn,"DCGraph",755),wAn(481,22,{3:1,35:1,22:1,481:1},Ix);var act,uct,oct,sct,hct,fct,lct,bct,wct,dct,gct,pct,vct,mct,yct,kct,jct,Ect,Tct,Mct,Sct,Pct=Ben(_Jn,FJn,481,Unt,RV,j_);wAn(854,1,QYn,Hh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,BJn),zJn),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),sct),(PPn(),gMt)),Pct),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,HJn),zJn),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),yMt),Qtt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,qJn),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),mMt),Ant),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,GJn),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),mMt),Ant),nbn(hMt)))),BBn((new qh,n))},vX(_Jn,"DisCoMetaDataProvider",854),wAn(998,1,QYn,qh),MWn.Qe=function(n){BBn(n)},vX(_Jn,"DisCoOptions",998),wAn(999,1,{},at),MWn.$e=function(){return new rt},MWn._e=function(n){},vX(_Jn,"DisCoOptions/DiscoFactory",999),wAn(562,167,{321:1,167:1,562:1},Q$n),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX("org.eclipse.elk.alg.disco.structures","DCPolyomino",562),wAn(1268,1,DVn,ut),MWn.Mb=function(n){return TO(n)},vX(YJn,"ElkGraphComponentsProcessor/lambda$0$Type",1268),wAn(1269,1,{},ot),MWn.Kb=function(n){return MQ(),PMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$1$Type",1269),wAn(1270,1,DVn,st),MWn.Mb=function(n){return qH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$2$Type",1270),wAn(1271,1,{},ht),MWn.Kb=function(n){return MQ(),OMn(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$3$Type",1271),wAn(1272,1,DVn,ft),MWn.Mb=function(n){return GH(BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$4$Type",1272),wAn(1273,1,DVn,$w),MWn.Mb=function(n){return MJ(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$5$Type",1273),wAn(1274,1,{},Lw),MWn.Kb=function(n){return KX(this.a,BB(n,79))},vX(YJn,"ElkGraphComponentsProcessor/lambda$6$Type",1274),wAn(1241,1,{},s4),MWn.a=0,vX(YJn,"ElkGraphTransformer",1241),wAn(1242,1,{},lt),MWn.Od=function(n,t){tOn(this,BB(n,160),BB(t,266))},vX(YJn,"ElkGraphTransformer/OffsetApplier",1242),wAn(1243,1,lVn,Nw),MWn.td=function(n){TL(this,BB(n,8))},vX(YJn,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1243),wAn(753,1,{},bt),vX(eZn,iZn,753),wAn(1232,1,MYn,wt),MWn.ue=function(n,t){return CIn(BB(n,231),BB(t,231))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(eZn,rZn,1232),wAn(740,209,NJn,Gv),MWn.Ze=function(n,t){vLn(this,n,t)},vX(eZn,"ForceLayoutProvider",740),wAn(357,134,{3:1,357:1,94:1,134:1}),vX(cZn,"FParticle",357),wAn(559,357,{3:1,559:1,357:1,94:1,134:1},hX),MWn.Ib=function(){var n;return this.a?(n=E7(this.a.a,this,0))>=0?"b"+n+"["+u5(this.a)+"]":"b["+u5(this.a)+"]":"b_"+PN(this)},vX(cZn,"FBendpoint",559),wAn(282,134,{3:1,282:1,94:1,134:1},IR),MWn.Ib=function(){return u5(this)},vX(cZn,"FEdge",282),wAn(231,134,{3:1,231:1,94:1,134:1},y6);var Cct,Ict,Oct,Act,$ct,Lct,Nct,xct,Dct,Rct,Kct=vX(cZn,"FGraph",231);wAn(447,357,{3:1,447:1,357:1,94:1,134:1},m4),MWn.Ib=function(){return null==this.b||0==this.b.length?"l["+u5(this.a)+"]":"l_"+this.b},vX(cZn,"FLabel",447),wAn(144,357,{3:1,144:1,357:1,94:1,134:1},qX),MWn.Ib=function(){return p0(this)},MWn.b=0,vX(cZn,"FNode",144),wAn(2003,1,{}),MWn.bf=function(n){sFn(this,n)},MWn.cf=function(){qmn(this)},MWn.d=0,vX(uZn,"AbstractForceModel",2003),wAn(631,2003,{631:1},Lan),MWn.af=function(n,t){var i,r,c,a;return tIn(this.f,n,t),c=XR(B$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-lW(n.e)/2-lW(t.e)/2),kL(c,((i=qon(this.e,n,t))>0?-_U(r,this.c)*i:xx(r,this.b)*BB(mMn(n,(fRn(),Zct)),19).a)/a),c},MWn.bf=function(n){sFn(this,n),this.a=BB(mMn(n,(fRn(),qct)),19).a,this.c=Gy(MD(mMn(n,cat))),this.b=Gy(MD(mMn(n,tat)))},MWn.df=function(n){return n<this.a},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"EadesModel",631),wAn(632,2003,{632:1},fH),MWn.af=function(n,t){var i,r,c,a,u;return tIn(this.f,n,t),c=XR(B$(t.d),n.d),u=e.Math.sqrt(c.a*c.a+c.b*c.b),a=Nx(r=e.Math.max(0,u-lW(n.e)/2-lW(t.e)/2),this.a)*BB(mMn(n,(fRn(),Zct)),19).a,(i=qon(this.e,n,t))>0&&(a-=Sy(r,this.a)*i),kL(c,a*this.b/u),c},MWn.bf=function(n){var t,i,r,c,a,u,o;for(sFn(this,n),this.b=Gy(MD(mMn(n,(fRn(),aat)))),this.c=this.b/BB(mMn(n,qct),19).a,r=n.e.c.length,a=0,c=0,o=new Wb(n.e);o.a<o.c.c.length;)a+=(u=BB(n0(o),144)).e.a,c+=u.e.b;t=a*c,i=Gy(MD(mMn(n,cat)))*fJn,this.a=e.Math.sqrt(t/(2*r))*i},MWn.cf=function(){qmn(this),this.b-=this.c},MWn.df=function(n){return this.b>0},MWn.a=0,MWn.b=0,MWn.c=0,vX(uZn,"FruchtermanReingoldModel",632),wAn(849,1,QYn,zh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,oZn),""),"Force Model"),"Determines the model for force calculation."),Oct),(PPn(),gMt)),$at),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,sZn),""),"Iterations"),"The number of iterations on the force model."),iln(300)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,hZn),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,fZn),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),lZn),dMt),Ptt),nbn(hMt)))),a2(n,fZn,oZn,xct),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,bZn),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dMt),Ptt),nbn(hMt)))),a2(n,bZn,oZn,$ct),pUn((new Uh,n))},vX(wZn,"ForceMetaDataProvider",849),wAn(424,22,{3:1,35:1,22:1,424:1},XS);var _ct,Fct,Bct,Hct,qct,Gct,zct,Uct,Xct,Wct,Vct,Qct,Yct,Jct,Zct,nat,tat,eat,iat,rat,cat,aat,uat,oat,sat,hat,fat,lat,bat,wat,dat,gat,pat,vat,mat,yat,kat,jat,Eat,Tat,Mat,Sat,Pat,Cat,Iat,Oat,Aat,$at=Ben(wZn,"ForceModelStrategy",424,Unt,aJ,E_);wAn(988,1,QYn,Uh),MWn.Qe=function(n){pUn(n)},vX(wZn,"ForceOptions",988),wAn(989,1,{},dt),MWn.$e=function(){return new Gv},MWn._e=function(n){},vX(wZn,"ForceOptions/ForceFactory",989),wAn(850,1,QYn,Xh),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,NZn),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(hN(),!1)),(PPn(),wMt)),ktt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,xZn),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,DZn),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),bat),gMt),Hat),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,RZn),""),"Stress Epsilon"),"Termination criterion for the iterative process."),lZn),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,KZn),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),iln(DWn)),vMt),Att),nbn(hMt)))),UGn((new Wh,n))},vX(wZn,"StressMetaDataProvider",850),wAn(992,1,QYn,Wh),MWn.Qe=function(n){UGn(n)},vX(wZn,"StressOptions",992),wAn(993,1,{},gt),MWn.$e=function(){return new OR},MWn._e=function(n){},vX(wZn,"StressOptions/StressFactory",993),wAn(1128,209,NJn,OR),MWn.Ze=function(n,t){var e,i,r,c;for(OTn(t,FZn,1),qy(TD(ZAn(n,(rkn(),kat))))?qy(TD(ZAn(n,Pat)))||jJ(new Tw((GM(),new Dy(n)))):vLn(new Gv,n,mcn(t,1)),i=fon(n),c=(e=HFn(this.a,i)).Kc();c.Ob();)(r=BB(c.Pb(),231)).e.c.length<=1||(HHn(this.b,r),i$n(this.b),Otn(r.d,new pt));SUn(i=GUn(e)),HSn(t)},vX(HZn,"StressLayoutProvider",1128),wAn(1129,1,lVn,pt),MWn.td=function(n){_Bn(BB(n,447))},vX(HZn,"StressLayoutProvider/lambda$0$Type",1129),wAn(990,1,{},Tv),MWn.c=0,MWn.e=0,MWn.g=0,vX(HZn,"StressMajorization",990),wAn(379,22,{3:1,35:1,22:1,379:1},WS);var Lat,Nat,xat,Dat,Rat,Kat,_at,Fat,Bat,Hat=Ben(HZn,"StressMajorization/Dimension",379,Unt,j1,T_);wAn(991,1,MYn,xw),MWn.ue=function(n,t){return SK(this.a,BB(n,144),BB(t,144))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(HZn,"StressMajorization/lambda$0$Type",991),wAn(1229,1,{},D0),vX(GZn,"ElkLayered",1229),wAn(1230,1,lVn,vt),MWn.td=function(n){RIn(BB(n,37))},vX(GZn,"ElkLayered/lambda$0$Type",1230),wAn(1231,1,lVn,Dw),MWn.td=function(n){PK(this.a,BB(n,37))},vX(GZn,"ElkLayered/lambda$1$Type",1231),wAn(1263,1,{},$$),vX(GZn,"GraphConfigurator",1263),wAn(759,1,lVn,Rw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$0$Type",759),wAn(760,1,{},mt),MWn.Kb=function(n){return tjn(),new Rq(null,new w1(BB(n,29).a,16))},vX(GZn,"GraphConfigurator/lambda$1$Type",760),wAn(761,1,lVn,Kw),MWn.td=function(n){VMn(this.a,BB(n,10))},vX(GZn,"GraphConfigurator/lambda$2$Type",761),wAn(1127,209,NJn,Uv),MWn.Ze=function(n,t){var e;e=SBn(new tm,n),GI(ZAn(n,(HXn(),sgt)))===GI((ufn(),pCt))?rwn(this.a,e,t):wOn(this.a,e,t),gUn(new Qh,e)},vX(GZn,"LayeredLayoutProvider",1127),wAn(356,22,{3:1,35:1,22:1,356:1},VS);var qat,Gat,zat,Uat=Ben(GZn,"LayeredPhases",356,Unt,s5,M_);wAn(1651,1,{},vin),MWn.i=0,vX(zZn,"ComponentsToCGraphTransformer",1651),wAn(1652,1,{},yt),MWn.ef=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.min(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(zZn,"ComponentsToCGraphTransformer/1",1652),wAn(81,1,{81:1}),MWn.i=0,MWn.k=!0,MWn.o=KQn;var Xat,Wat,Vat,Qat=vX(UZn,"CNode",81);wAn(460,81,{460:1,81:1},NN,Sgn),MWn.Ib=function(){return""},vX(zZn,"ComponentsToCGraphTransformer/CRectNode",460),wAn(1623,1,{},kt),vX(zZn,"OneDimensionalComponentsCompaction",1623),wAn(1624,1,{},jt),MWn.Kb=function(n){return xZ(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$0$Type",1624),wAn(1625,1,{},Et),MWn.Kb=function(n){return Ewn(BB(n,46))},MWn.Fb=function(n){return this===n},vX(zZn,"OneDimensionalComponentsCompaction/lambda$1$Type",1625),wAn(1654,1,{},BX),vX(UZn,"CGraph",1654),wAn(189,1,{189:1},Pgn),MWn.b=0,MWn.c=0,MWn.e=0,MWn.g=!0,MWn.i=KQn,vX(UZn,"CGroup",189),wAn(1653,1,{},Pt),MWn.ef=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},MWn.ff=function(n,t){return e.Math.max(null!=n.a?Gy(n.a):n.c.i,null!=t.a?Gy(t.a):t.c.i)},vX(UZn,OYn,1653),wAn(1655,1,{},sOn),MWn.d=!1;var Yat=vX(UZn,xYn,1655);wAn(1656,1,{},Ct),MWn.Kb=function(n){return kM(),hN(),0!=BB(BB(n,46).a,81).d.e},MWn.Fb=function(n){return this===n},vX(UZn,DYn,1656),wAn(823,1,{},Sq),MWn.a=!1,MWn.b=!1,MWn.c=!1,MWn.d=!1,vX(UZn,RYn,823),wAn(1825,1,{},DG),vX(XZn,KYn,1825);var Jat=bq(WZn,PYn);wAn(1826,1,{369:1},lY),MWn.Ke=function(n){Gxn(this,BB(n,466))},vX(XZn,_Yn,1826),wAn(1827,1,MYn,It),MWn.ue=function(n,t){return oQ(BB(n,81),BB(t,81))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,FYn,1827),wAn(466,1,{466:1},fP),MWn.a=!1,vX(XZn,BYn,466),wAn(1828,1,MYn,Ot),MWn.ue=function(n,t){return njn(BB(n,466),BB(t,466))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(XZn,HYn,1828),wAn(140,1,{140:1},dP,mH),MWn.Fb=function(n){var t;return null!=n&&iut==tsn(n)&&(t=BB(n,140),cV(this.c,t.c)&&cV(this.d,t.d))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d]))},MWn.Ib=function(){return"("+this.c+FWn+this.d+(this.a?"cx":"")+this.b+")"},MWn.a=!0,MWn.c=0,MWn.d=0;var Zat,nut,tut,eut,iut=vX(WZn,"Point",140);wAn(405,22,{3:1,35:1,22:1,405:1},QS);var rut,cut,aut,uut,out,sut,hut,fut,lut,but,wut,dut=Ben(WZn,"Point/Quadrant",405,Unt,t3,S_);wAn(1642,1,{},Vv),MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,MWn.f=null,vX(WZn,"RectilinearConvexHull",1642),wAn(574,1,{369:1},Tpn),MWn.Ke=function(n){_9(this,BB(n,140))},MWn.b=0,vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler",574),wAn(1644,1,MYn,Mt),MWn.ue=function(n,t){return DV(MD(n),MD(t))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1644),wAn(1643,1,{369:1},ftn),MWn.Ke=function(n){PNn(this,BB(n,140))},MWn.a=0,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(WZn,"RectilinearConvexHull/RectangleEventHandler",1643),wAn(1645,1,MYn,St),MWn.ue=function(n,t){return u0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$0$Type",1645),wAn(1646,1,MYn,Tt),MWn.ue=function(n,t){return o0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$1$Type",1646),wAn(1647,1,MYn,At),MWn.ue=function(n,t){return h0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$2$Type",1647),wAn(1648,1,MYn,$t),MWn.ue=function(n,t){return s0(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$3$Type",1648),wAn(1649,1,MYn,Lt),MWn.ue=function(n,t){return jMn(BB(n,140),BB(t,140))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(WZn,"RectilinearConvexHull/lambda$4$Type",1649),wAn(1650,1,{},OZ),vX(WZn,"Scanline",1650),wAn(2005,1,{}),vX(VZn,"AbstractGraphPlacer",2005),wAn(325,1,{325:1},Xx),MWn.mf=function(n){return!!this.nf(n)&&(JIn(this.b,BB(mMn(n,(hWn(),Xft)),21),n),!0)},MWn.nf=function(n){var t,e,i;for(t=BB(mMn(n,(hWn(),Xft)),21),i=BB(h6(fut,t),21).Kc();i.Ob();)if(e=BB(i.Pb(),21),!BB(h6(this.b,e),15).dc())return!1;return!0},vX(VZn,"ComponentGroup",325),wAn(765,2005,{},Qv),MWn.of=function(n){var t;for(t=new Wb(this.a);t.a<t.c.c.length;)if(BB(n0(t),325).mf(n))return;WB(this.a,new Xx(n))},MWn.lf=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)i=BB(r.Pb(),37),this.of(i);for(w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;)h=TXn(u=BB(n0(s),325),c),w9(TX(u.b),w.a,w.b),w.a+=h.a,w.b+=h.b;if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GI(mMn(a,Zdt))===GI((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(e=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),e.e);UR(kO(t.f),e.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupGraphPlacer",765),wAn(1293,765,{},hm),MWn.of=function(n){pfn(this,n)},MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v;if(this.a.c=x8(Ant,HWn,1,0,5,1),t.a.c=x8(Ant,HWn,1,0,5,1),n.dc())return t.f.a=0,void(t.f.b=0);for(qan(t,a=BB(n.Xb(0),37)),r=n.Kc();r.Ob();)pfn(this,BB(r.Pb(),37));for(v=new Gj,p=new Gj,d=new Gj,w=new Gj,c=Gy(MD(mMn(a,(HXn(),mpt)))),s=new Wb(this.a);s.a<s.c.c.length;){if(u=BB(n0(s),325),dA(BB(mMn(t,(sWn(),bSt)),103))){for(d.a=v.a,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),sIt))){d.a=p.a;break}}else if(gA(BB(mMn(t,bSt),103)))for(d.b=v.b,g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),CIt))){d.b=p.b;break}if(h=TXn(BB(u,570),c),w9(TX(u.b),d.a,d.b),dA(BB(mMn(t,bSt),103))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),SIt))){v.a=d.a+h.a;break}p.b=d.b+h.b,d.b=p.b,w.b=e.Math.max(w.b,d.b)}else if(gA(BB(mMn(t,bSt),103))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new ly(MX(kX(u.b).a).a.kc());g.b.Ob();)if(BB(cS(g.b.Pb()),21).Hc((kUn(),oIt))){v.b=d.b+h.b;break}p.a=d.a+h.a,d.a=p.a,w.a=e.Math.max(w.a,d.a)}}if(t.f.a=w.a-c,t.f.b=w.b-c,qy(TD(mMn(a,Mdt)))&&GI(mMn(a,Zdt))===GI((Mbn(),QPt))){for(b=n.Kc();b.Ob();)ZRn(f=BB(b.Pb(),37),f.c.a,f.c.b);for(KXn(i=new Nt,n,c),l=n.Kc();l.Ob();)UR(kO((f=BB(l.Pb(),37)).c),i.e);UR(kO(t.f),i.a)}for(o=new Wb(this.a);o.a<o.c.c.length;)d9(t,TX((u=BB(n0(o),325)).b))},vX(VZn,"ComponentGroupModelOrderGraphPlacer",1293),wAn(423,22,{3:1,35:1,22:1,423:1},YS);var gut,put,vut,mut=Ben(VZn,"ComponentOrderingStrategy",423,Unt,k1,P_);wAn(650,1,{},Nt),vX(VZn,"ComponentsCompactor",650),wAn(1468,12,QQn,v5),MWn.Fc=function(n){return Yjn(this,BB(n,140))},vX(VZn,"ComponentsCompactor/Hullpoints",1468),wAn(1465,1,{841:1},hvn),MWn.a=!1,vX(VZn,"ComponentsCompactor/InternalComponent",1465),wAn(1464,1,pVn,Yv),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},vX(VZn,"ComponentsCompactor/InternalConnectedComponents",1464),wAn(1467,1,{594:1},dOn),MWn.hf=function(){return null},MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalExternalExtension",1467),wAn(1466,1,{594:1},nm),MWn.jf=function(){return this.a},MWn.gf=function(){return upn(this.d)},MWn.hf=function(){return this.c},MWn.kf=function(){return this.b},vX(VZn,"ComponentsCompactor/InternalUnionExternalExtension",1466),wAn(1470,1,{},Qxn),vX(VZn,"ComponentsCompactor/OuterSegments",1470),wAn(1469,1,{},Jv),vX(VZn,"ComponentsCompactor/Segments",1469),wAn(1264,1,{},bY),vX(VZn,iZn,1264),wAn(1265,1,MYn,xt),MWn.ue=function(n,t){return b0(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"ComponentsProcessor/lambda$0$Type",1265),wAn(570,325,{325:1,570:1},p5),MWn.mf=function(n){return dsn(this,n)},MWn.nf=function(n){return bNn(this,n)},vX(VZn,"ModelOrderComponentGroup",570),wAn(1291,2005,{},Dt),MWn.lf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j;if(1!=n.gc()){if(n.dc())return t.a.c=x8(Ant,HWn,1,0,5,1),t.f.a=0,void(t.f.b=0);if(GI(mMn(t,(HXn(),Cdt)))===GI((Bfn(),wut))){for(s=n.Kc();s.Ob();){for(p=0,d=new Wb((u=BB(s.Pb(),37)).a);d.a<d.c.c.length;)w=BB(n0(d),10),p+=BB(mMn(w,hpt),19).a;u.p=p}SQ(),n.ad(new Rt)}for(a=BB(n.Xb(0),37),t.a.c=x8(Ant,HWn,1,0,5,1),qan(t,a),b=0,y=0,h=n.Kc();h.Ob();)v=(u=BB(h.Pb(),37)).f,b=e.Math.max(b,v.a),y+=v.a*v.b;for(b=e.Math.max(b,e.Math.sqrt(y)*Gy(MD(mMn(t,Edt)))),k=0,j=0,l=0,i=c=Gy(MD(mMn(t,mpt))),o=n.Kc();o.Ob();)k+(v=(u=BB(o.Pb(),37)).f).a>b&&(k=0,j+=l+c,l=0),ZRn(u,k+(g=u.c).a,j+g.b),kO(g),i=e.Math.max(i,k+v.a),l=e.Math.max(l,v.b),k+=v.a+c;if(t.f.a=i,t.f.b=j+l,qy(TD(mMn(a,Mdt)))){for(KXn(r=new Nt,n,c),f=n.Kc();f.Ob();)UR(kO(BB(f.Pb(),37).c),r.e);UR(kO(t.f),r.a)}d9(t,n)}else(m=BB(n.Xb(0),37))!=t&&(t.a.c=x8(Ant,HWn,1,0,5,1),$Kn(t,m,0,0),qan(t,m),kQ(t.d,m.d),t.f.a=m.f.a,t.f.b=m.f.b)},vX(VZn,"SimpleRowGraphPlacer",1291),wAn(1292,1,MYn,Rt),MWn.ue=function(n,t){return zan(BB(n,37),BB(t,37))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(VZn,"SimpleRowGraphPlacer/1",1292),wAn(1262,1,qYn,Kt),MWn.Lb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){var t;return!!(t=BB(mMn(BB(n,243).b,(HXn(),vgt)),74))&&0!=t.b},vX(ZZn,"CompoundGraphPostprocessor/1",1262),wAn(1261,1,n1n,em),MWn.pf=function(n,t){mvn(this,BB(n,37),t)},vX(ZZn,"CompoundGraphPreprocessor",1261),wAn(441,1,{441:1},zfn),MWn.c=!1,vX(ZZn,"CompoundGraphPreprocessor/ExternalPort",441),wAn(243,1,{243:1},L_),MWn.Ib=function(){return dx(this.c)+":"+OIn(this.b)},vX(ZZn,"CrossHierarchyEdge",243),wAn(763,1,MYn,_w),MWn.ue=function(n,t){return Vyn(this,BB(n,243),BB(t,243))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(ZZn,"CrossHierarchyEdgeComparator",763),wAn(299,134,{3:1,299:1,94:1,134:1}),MWn.p=0,vX(t1n,"LGraphElement",299),wAn(17,299,{3:1,17:1,299:1,94:1,134:1},wY),MWn.Ib=function(){return OIn(this)};var yut=vX(t1n,"LEdge",17);wAn(37,299,{3:1,20:1,37:1,299:1,94:1,134:1},min),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.b)},MWn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+LMn(this.a):0==this.a.c.length?"G-layered"+LMn(this.b):"G[layerless"+LMn(this.a)+", layers"+LMn(this.b)+"]"};var kut,jut=vX(t1n,"LGraph",37);wAn(657,1,{}),MWn.qf=function(){return this.e.n},MWn.We=function(n){return mMn(this.e,n)},MWn.rf=function(){return this.e.o},MWn.sf=function(){return this.e.p},MWn.Xe=function(n){return Lx(this.e,n)},MWn.tf=function(n){this.e.n.a=n.a,this.e.n.b=n.b},MWn.uf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},MWn.vf=function(n){this.e.p=n},vX(t1n,"LGraphAdapters/AbstractLShapeAdapter",657),wAn(577,1,{839:1},Fw),MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(this.a.b.c.length),t=new Wb(this.a.b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.b=null,vX(t1n,"LGraphAdapters/LEdgeAdapter",577),wAn(656,1,{},HV),MWn.xf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Np,e=new Wb(this.a.b);e.a<e.c.c.length;)for(r=new Wb(BB(n0(e),29).a);r.a<r.c.c.length;)if(i=BB(n0(r),10),this.c.Mb(i)&&(WB(this.b,new __(this,i,this.e)),this.d)){if(Lx(i,(hWn(),Klt)))for(t=BB(mMn(i,Klt),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1));if(Lx(i,Dft))for(t=BB(mMn(i,Dft),15).Kc();t.Ob();)n=BB(t.Pb(),10),WB(this.b,new __(this,n,!1))}return this.b},MWn.qf=function(){throw Hp(new tk(i1n))},MWn.We=function(n){return mMn(this.a,n)},MWn.rf=function(){return this.a.f},MWn.sf=function(){return this.a.p},MWn.Xe=function(n){return Lx(this.a,n)},MWn.tf=function(n){throw Hp(new tk(i1n))},MWn.uf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},MWn.vf=function(n){this.a.p=n},MWn.b=null,MWn.d=!1,MWn.e=!1,vX(t1n,"LGraphAdapters/LGraphAdapter",656),wAn(576,657,{181:1},Bw),vX(t1n,"LGraphAdapters/LLabelAdapter",576),wAn(575,657,{680:1},__),MWn.yf=function(){return this.b},MWn.zf=function(){return SQ(),SQ(),set},MWn.wf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.e,10).b.c.length),t=new Wb(BB(this.e,10).b);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.a,new Bw(n));return this.a},MWn.Af=function(){var n;return new HR((n=BB(this.e,10).d).d,n.c,n.a,n.b)},MWn.Bf=function(){return SQ(),SQ(),set},MWn.Cf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.e,10).j.c.length),t=new Wb(BB(this.e,10).j);t.a<t.c.c.length;)n=BB(n0(t),11),WB(this.c,new gP(n,this.d));return this.c},MWn.Df=function(){return qy(TD(mMn(BB(this.e,10),(hWn(),_ft))))},MWn.Ef=function(n){BB(this.e,10).d.b=n.b,BB(this.e,10).d.d=n.d,BB(this.e,10).d.c=n.c,BB(this.e,10).d.a=n.a},MWn.Ff=function(n){BB(this.e,10).f.b=n.b,BB(this.e,10).f.d=n.d,BB(this.e,10).f.c=n.c,BB(this.e,10).f.a=n.a},MWn.Gf=function(){Ntn(this,(gM(),kut))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LNodeAdapter",575),wAn(1722,657,{838:1},gP),MWn.zf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Iut))return SQ(),SQ(),set;if(!this.a){for(this.a=new Np,e=new Wb(BB(this.e,11).e);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.a,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(fbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.a,new Fw(n))}return this.a},MWn.wf=function(){var n,t;if(!this.b)for(this.b=sx(BB(this.e,11).f.c.length),t=new Wb(BB(this.e,11).f);t.a<t.c.c.length;)n=BB(n0(t),70),WB(this.b,new Bw(n));return this.b},MWn.Bf=function(){var n,t,e,i;if(this.d&&BB(this.e,11).i.k==(uSn(),Iut))return SQ(),SQ(),set;if(!this.c){for(this.c=new Np,e=new Wb(BB(this.e,11).g);e.a<e.c.c.length;)n=BB(n0(e),17),WB(this.c,new Fw(n));if(this.d&&(i=BB(mMn(BB(this.e,11),(hWn(),Elt)),10)))for(t=new oz(ZL(lbn(i).a.Kc(),new h));dAn(t);)n=BB(U5(t),17),WB(this.c,new Fw(n))}return this.c},MWn.Hf=function(){return BB(this.e,11).j},MWn.If=function(){return qy(TD(mMn(BB(this.e,11),(hWn(),elt))))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=!1,vX(t1n,"LGraphAdapters/LPortAdapter",1722),wAn(1723,1,MYn,_t),MWn.ue=function(n,t){return WDn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t1n,"LGraphAdapters/PortComparator",1723),wAn(804,1,DVn,Ft),MWn.Mb=function(n){return BB(n,10),gM(),!0},vX(t1n,"LGraphAdapters/lambda$0$Type",804),wAn(392,299,{3:1,299:1,392:1,94:1,134:1}),vX(t1n,"LShape",392),wAn(70,392,{3:1,299:1,70:1,392:1,94:1,134:1},qj,O$),MWn.Ib=function(){var n;return null==(n=YH(this))?"label":"l_"+n},vX(t1n,"LLabel",70),wAn(207,1,{3:1,4:1,207:1,414:1}),MWn.Fb=function(n){var t;return!!cL(n,207)&&(t=BB(n,207),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},MWn.Hb=function(){var n,t;return n=VO(this.b)<<16,n|=VO(this.a)&QVn,t=VO(this.c)<<16,n^(t|=VO(this.d)&QVn)},MWn.Jf=function(n){var t,e,i,r,c,a,u,o,s;for(r=0;r<n.length&&Dhn((b1(r,n.length),n.charCodeAt(r)),o1n);)++r;for(t=n.length;t>0&&Dhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(r<t){o=kKn(n.substr(r,t-r),",|;");try{for(a=0,u=(c=o).length;a<u;++a){if(2!=(i=kKn(c[a],"=")).length)throw Hp(new _y("Expecting a list of key-value pairs."));e=RMn(i[0]),s=bSn(RMn(i[1])),mK(e,"top")?this.d=s:mK(e,"left")?this.b=s:mK(e,"bottom")?this.a=s:mK(e,"right")&&(this.c=s)}}catch(h){throw cL(h=lun(h),127)?Hp(new _y(h1n+h)):Hp(h)}}},MWn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"Spacing",207),wAn(142,207,l1n,lm,lA,HR,A_);var Eut=vX(f1n,"ElkMargin",142);wAn(651,142,l1n,fm),vX(t1n,"LMargin",651),wAn(10,392,{3:1,299:1,10:1,392:1,94:1,134:1},$vn),MWn.Ib=function(){return $pn(this)},MWn.i=!1;var Tut,Mut,Sut,Put,Cut,Iut,Out=vX(t1n,"LNode",10);wAn(267,22,{3:1,35:1,22:1,267:1},JS);var Aut,$ut=Ben(t1n,"LNode/NodeType",267,Unt,u9,I_);wAn(116,207,b1n,bm,WA,O_);var Lut,Nut,xut,Dut,Rut,Kut,_ut=vX(f1n,"ElkPadding",116);wAn(764,116,b1n,wm),vX(t1n,"LPadding",764),wAn(11,392,{3:1,299:1,11:1,392:1,94:1,134:1},CSn),MWn.Ib=function(){var n,t,e;return oO(((n=new Ck).a+="p_",n),pyn(this)),this.i&&oO(uO((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&BB(xq(this.e,0),17).c!=this&&(t=BB(xq(this.e,0),17).c,oO((n.a+=" << ",n),pyn(t)),oO(uO((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&BB(xq(this.g,0),17).d!=this&&(e=BB(xq(this.g,0),17).d,oO((n.a+=" >> ",n),pyn(e)),oO(uO((n.a+="[",n),e.i),"]")),n.a},MWn.c=!0,MWn.d=!1;var Fut,But,Hut,qut,Gut=vX(t1n,"LPort",11);wAn(397,1,pVn,Hw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new qw(new Wb(this.a.e))},vX(t1n,"LPort/1",397),wAn(1290,1,QWn,qw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).c},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/1/1",1290),wAn(359,1,pVn,Gw),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new zw(new Wb(this.a.g))},vX(t1n,"LPort/2",359),wAn(762,1,QWn,zw),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(n0(this.a),17).d},MWn.Ob=function(){return y$(this.a)},MWn.Qb=function(){AU(this.a)},vX(t1n,"LPort/2/1",762),wAn(1283,1,pVn,hP),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new m6(this)},vX(t1n,"LPort/CombineIter",1283),wAn(201,1,QWn,m6),MWn.Nb=function(n){fU(this,n)},MWn.Qb=function(){uE()},MWn.Ob=function(){return zN(this)},MWn.Pb=function(){return y$(this.a)?n0(this.a):n0(this.b)},vX(t1n,"LPort/CombineIter/1",201),wAn(1285,1,qYn,Bt),MWn.Lb=function(n){return Az(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).e.c.length},vX(t1n,"LPort/lambda$0$Type",1285),wAn(1284,1,qYn,Ht),MWn.Lb=function(n){return $z(n)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),0!=BB(n,11).g.c.length},vX(t1n,"LPort/lambda$1$Type",1284),wAn(1286,1,qYn,qt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),sIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),sIt)},vX(t1n,"LPort/lambda$2$Type",1286),wAn(1287,1,qYn,Gt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),oIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),oIt)},vX(t1n,"LPort/lambda$3$Type",1287),wAn(1288,1,qYn,zt),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),SIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),SIt)},vX(t1n,"LPort/lambda$4$Type",1288),wAn(1289,1,qYn,Ut),MWn.Lb=function(n){return gcn(),BB(n,11).j==(kUn(),CIt)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return gcn(),BB(n,11).j==(kUn(),CIt)},vX(t1n,"LPort/lambda$5$Type",1289),wAn(29,299,{3:1,20:1,299:1,29:1,94:1,134:1},HX),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new Wb(this.a)},MWn.Ib=function(){return"L_"+E7(this.b.b,this,0)+LMn(this.a)},vX(t1n,"Layer",29),wAn(1342,1,{},tm),vX(d1n,g1n,1342),wAn(1346,1,{},Xt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1346),wAn(1349,1,{},Wt),MWn.Kb=function(n){return PTn(BB(n,82))},vX(d1n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1349),wAn(1343,1,lVn,Uw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,p1n,1343),wAn(1344,1,lVn,Xw),MWn.td=function(n){POn(this.a,BB(n,118))},vX(d1n,v1n,1344),wAn(1345,1,{},Vt),MWn.Kb=function(n){return new Rq(null,new w1(pV(BB(n,79)),16))},vX(d1n,m1n,1345),wAn(1347,1,DVn,Ww),MWn.Mb=function(n){return _A(this.a,BB(n,33))},vX(d1n,y1n,1347),wAn(1348,1,{},Qt),MWn.Kb=function(n){return new Rq(null,new w1(vV(BB(n,79)),16))},vX(d1n,"ElkGraphImporter/lambda$5$Type",1348),wAn(1350,1,DVn,Vw),MWn.Mb=function(n){return FA(this.a,BB(n,33))},vX(d1n,"ElkGraphImporter/lambda$7$Type",1350),wAn(1351,1,DVn,Yt),MWn.Mb=function(n){return AQ(BB(n,79))},vX(d1n,"ElkGraphImporter/lambda$8$Type",1351),wAn(1278,1,{},Qh),vX(d1n,"ElkGraphLayoutTransferrer",1278),wAn(1279,1,DVn,Qw),MWn.Mb=function(n){return JR(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$0$Type",1279),wAn(1280,1,lVn,Yw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$1$Type",1280),wAn(1281,1,DVn,Jw),MWn.Mb=function(n){return UD(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$2$Type",1281),wAn(1282,1,lVn,Zw),MWn.td=function(n){mM(),WB(this.a,BB(n,17))},vX(d1n,"ElkGraphLayoutTransferrer/lambda$3$Type",1282),wAn(1485,1,n1n,Jt),MWn.pf=function(n,t){Vrn(BB(n,37),t)},vX(j1n,"CommentNodeMarginCalculator",1485),wAn(1486,1,{},Zt),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"CommentNodeMarginCalculator/lambda$0$Type",1486),wAn(1487,1,lVn,ne),MWn.td=function(n){tHn(BB(n,10))},vX(j1n,"CommentNodeMarginCalculator/lambda$1$Type",1487),wAn(1488,1,n1n,te),MWn.pf=function(n,t){aDn(BB(n,37),t)},vX(j1n,"CommentPostprocessor",1488),wAn(1489,1,n1n,ee),MWn.pf=function(n,t){uUn(BB(n,37),t)},vX(j1n,"CommentPreprocessor",1489),wAn(1490,1,n1n,ie),MWn.pf=function(n,t){jLn(BB(n,37),t)},vX(j1n,"ConstraintsPostprocessor",1490),wAn(1491,1,n1n,re),MWn.pf=function(n,t){can(BB(n,37),t)},vX(j1n,"EdgeAndLayerConstraintEdgeReverser",1491),wAn(1492,1,n1n,ce),MWn.pf=function(n,t){Gwn(BB(n,37),t)},vX(j1n,"EndLabelPostprocessor",1492),wAn(1493,1,{},ae),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPostprocessor/lambda$0$Type",1493),wAn(1494,1,DVn,ue),MWn.Mb=function(n){return MY(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$1$Type",1494),wAn(1495,1,lVn,oe),MWn.td=function(n){ejn(BB(n,10))},vX(j1n,"EndLabelPostprocessor/lambda$2$Type",1495),wAn(1496,1,n1n,se),MWn.pf=function(n,t){ZPn(BB(n,37),t)},vX(j1n,"EndLabelPreprocessor",1496),wAn(1497,1,{},he),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelPreprocessor/lambda$0$Type",1497),wAn(1498,1,lVn,D_),MWn.td=function(n){KM(this.a,this.b,this.c,BB(n,10))},MWn.a=0,MWn.b=0,MWn.c=!1,vX(j1n,"EndLabelPreprocessor/lambda$1$Type",1498),wAn(1499,1,DVn,fe),MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),XPt))},vX(j1n,"EndLabelPreprocessor/lambda$2$Type",1499),wAn(1500,1,lVn,nd),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$3$Type",1500),wAn(1501,1,DVn,le),MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),UPt))},vX(j1n,"EndLabelPreprocessor/lambda$4$Type",1501),wAn(1502,1,lVn,td),MWn.td=function(n){DH(this.a,BB(n,70))},vX(j1n,"EndLabelPreprocessor/lambda$5$Type",1502),wAn(1551,1,n1n,Vh),MWn.pf=function(n,t){Cln(BB(n,37),t)},vX(j1n,"EndLabelSorter",1551),wAn(1552,1,MYn,be),MWn.ue=function(n,t){return Hgn(BB(n,456),BB(t,456))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"EndLabelSorter/1",1552),wAn(456,1,{456:1},TQ),vX(j1n,"EndLabelSorter/LabelGroup",456),wAn(1553,1,{},we),MWn.Kb=function(n){return EM(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"EndLabelSorter/lambda$0$Type",1553),wAn(1554,1,DVn,de),MWn.Mb=function(n){return EM(),BB(n,10).k==(uSn(),Cut)},vX(j1n,"EndLabelSorter/lambda$1$Type",1554),wAn(1555,1,lVn,ge),MWn.td=function(n){oSn(BB(n,10))},vX(j1n,"EndLabelSorter/lambda$2$Type",1555),wAn(1556,1,DVn,pe),MWn.Mb=function(n){return EM(),GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),UPt))},vX(j1n,"EndLabelSorter/lambda$3$Type",1556),wAn(1557,1,DVn,ve),MWn.Mb=function(n){return EM(),GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),XPt))},vX(j1n,"EndLabelSorter/lambda$4$Type",1557),wAn(1503,1,n1n,me),MWn.pf=function(n,t){IHn(this,BB(n,37))},MWn.b=0,MWn.c=0,vX(j1n,"FinalSplineBendpointsCalculator",1503),wAn(1504,1,{},ye),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$0$Type",1504),wAn(1505,1,{},ke),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$1$Type",1505),wAn(1506,1,DVn,je),MWn.Mb=function(n){return!b5(BB(n,17))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$2$Type",1506),wAn(1507,1,DVn,Ee),MWn.Mb=function(n){return Lx(BB(n,17),(hWn(),Nlt))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$3$Type",1507),wAn(1508,1,lVn,ed),MWn.td=function(n){zKn(this.a,BB(n,128))},vX(j1n,"FinalSplineBendpointsCalculator/lambda$4$Type",1508),wAn(1509,1,lVn,Te),MWn.td=function(n){JPn(BB(n,17).a)},vX(j1n,"FinalSplineBendpointsCalculator/lambda$5$Type",1509),wAn(792,1,n1n,id),MWn.pf=function(n,t){Vqn(this,BB(n,37),t)},vX(j1n,"GraphTransformer",792),wAn(511,22,{3:1,35:1,22:1,511:1},ZS);var zut,Uut,Xut,Wut=Ben(j1n,"GraphTransformer/Mode",511,Unt,uJ,tB);wAn(1510,1,n1n,Me),MWn.pf=function(n,t){exn(BB(n,37),t)},vX(j1n,"HierarchicalNodeResizingProcessor",1510),wAn(1511,1,n1n,Se),MWn.pf=function(n,t){lrn(BB(n,37),t)},vX(j1n,"HierarchicalPortConstraintProcessor",1511),wAn(1512,1,MYn,Pe),MWn.ue=function(n,t){return Ipn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortConstraintProcessor/NodeComparator",1512),wAn(1513,1,n1n,Ce),MWn.pf=function(n,t){jBn(BB(n,37),t)},vX(j1n,"HierarchicalPortDummySizeProcessor",1513),wAn(1514,1,n1n,Ie),MWn.pf=function(n,t){JDn(this,BB(n,37),t)},MWn.a=0,vX(j1n,"HierarchicalPortOrthogonalEdgeRouter",1514),wAn(1515,1,MYn,Oe),MWn.ue=function(n,t){return _N(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/1",1515),wAn(1516,1,MYn,Ae),MWn.ue=function(n,t){return P9(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"HierarchicalPortOrthogonalEdgeRouter/2",1516),wAn(1517,1,n1n,$e),MWn.pf=function(n,t){EMn(BB(n,37),t)},vX(j1n,"HierarchicalPortPositionProcessor",1517),wAn(1518,1,n1n,Yh),MWn.pf=function(n,t){rXn(this,BB(n,37))},MWn.a=0,MWn.c=0,vX(j1n,"HighDegreeNodeLayeringProcessor",1518),wAn(571,1,{571:1},Le),MWn.b=-1,MWn.d=-1,vX(j1n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",571),wAn(1519,1,{},Ne),MWn.Kb=function(n){return q_(),fbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1519),wAn(1520,1,{},xe),MWn.Kb=function(n){return q_(),lbn(BB(n,10))},MWn.Fb=function(n){return this===n},vX(j1n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1520),wAn(1526,1,n1n,De),MWn.pf=function(n,t){dFn(this,BB(n,37),t)},vX(j1n,"HyperedgeDummyMerger",1526),wAn(793,1,{},R_),MWn.a=!1,MWn.b=!1,MWn.c=!1,vX(j1n,"HyperedgeDummyMerger/MergeState",793),wAn(1527,1,{},Re),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"HyperedgeDummyMerger/lambda$0$Type",1527),wAn(1528,1,{},Ke),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,10).j,16))},vX(j1n,"HyperedgeDummyMerger/lambda$1$Type",1528),wAn(1529,1,lVn,_e),MWn.td=function(n){BB(n,11).p=-1},vX(j1n,"HyperedgeDummyMerger/lambda$2$Type",1529),wAn(1530,1,n1n,Fe),MWn.pf=function(n,t){bFn(BB(n,37),t)},vX(j1n,"HypernodesProcessor",1530),wAn(1531,1,n1n,Be),MWn.pf=function(n,t){wFn(BB(n,37),t)},vX(j1n,"InLayerConstraintProcessor",1531),wAn(1532,1,n1n,He),MWn.pf=function(n,t){Lcn(BB(n,37),t)},vX(j1n,"InnermostNodeMarginCalculator",1532),wAn(1533,1,n1n,qe),MWn.pf=function(n,t){Vzn(this,BB(n,37))},MWn.a=KQn,MWn.b=KQn,MWn.c=RQn,MWn.d=RQn;var Vut,Qut,Yut,Jut,Zut,not,tot,eot,iot,rot,cot,aot,uot,oot,sot,hot,fot,lot,bot,wot,dot,got,pot,vot,mot,yot,kot,jot,Eot,Tot,Mot,Sot,Pot,Cot,Iot,Oot,Aot,$ot,Lot,Not,xot,Dot,Rot,Kot,_ot,Fot,Bot,Hot,qot,Got,zot,Uot,Xot,Wot,Vot,Qot,Yot,Jot=vX(j1n,"InteractiveExternalPortPositioner",1533);wAn(1534,1,{},Ge),MWn.Kb=function(n){return BB(n,17).d.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$0$Type",1534),wAn(1535,1,{},rd),MWn.Kb=function(n){return qN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$1$Type",1535),wAn(1536,1,{},ze),MWn.Kb=function(n){return BB(n,17).c.i},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$2$Type",1536),wAn(1537,1,{},cd),MWn.Kb=function(n){return GN(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$3$Type",1537),wAn(1538,1,{},ad),MWn.Kb=function(n){return WR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$4$Type",1538),wAn(1539,1,{},ud),MWn.Kb=function(n){return VR(this.a,MD(n))},MWn.Fb=function(n){return this===n},vX(j1n,"InteractiveExternalPortPositioner/lambda$5$Type",1539),wAn(77,22,{3:1,35:1,22:1,77:1,234:1},nP),MWn.Kf=function(){switch(this.g){case 15:return new dc;case 22:return new gc;case 47:return new mc;case 28:case 35:return new ei;case 32:return new Jt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new id((Srn(),qut));case 0:return new id((Srn(),Hut));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new me;case 55:return new Me;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new $e;case 9:return new Yh;case 49:return new ox;case 37:return new De;case 43:return new Fe;case 27:return new Be;case 30:return new He;case 3:return new qe;case 18:return new Xe;case 29:return new We;case 5:return new Jh;case 50:return new Ue;case 34:return new Zh;case 36:return new ii;case 52:return new Vh;case 11:return new ci;case 7:return new tf;case 39:return new ai;case 45:return new ui;case 16:return new oi;case 10:return new si;case 48:return new fi;case 21:return new li;case 23:return new Ny((oin(),Amt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new af;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new am;case 46:return new Ni;case 31:return new xR;case 14:return new Vi;case 26:return new Sc;case 20:return new nr;case 24:return new Ny((oin(),$mt));default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Zot,nst,tst,est,ist,rst,cst,ast,ust=Ben(j1n,S1n,77,Unt,ENn,nB);wAn(1540,1,n1n,Xe),MWn.pf=function(n,t){Jzn(BB(n,37),t)},vX(j1n,"InvertedPortProcessor",1540),wAn(1541,1,n1n,We),MWn.pf=function(n,t){LKn(BB(n,37),t)},vX(j1n,"LabelAndNodeSizeProcessor",1541),wAn(1542,1,DVn,Ve),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$0$Type",1542),wAn(1543,1,DVn,Qe),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Mut)},vX(j1n,"LabelAndNodeSizeProcessor/lambda$1$Type",1543),wAn(1544,1,lVn,K_),MWn.td=function(n){_M(this.b,this.a,this.c,BB(n,10))},MWn.a=!1,MWn.c=!1,vX(j1n,"LabelAndNodeSizeProcessor/lambda$2$Type",1544),wAn(1545,1,n1n,Jh),MWn.pf=function(n,t){fzn(BB(n,37),t)},vX(j1n,"LabelDummyInserter",1545),wAn(1546,1,qYn,Ye),MWn.Lb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),zPt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return GI(mMn(BB(n,70),(HXn(),Ydt)))===GI((Rtn(),zPt))},vX(j1n,"LabelDummyInserter/1",1546),wAn(1547,1,n1n,Ue),MWn.pf=function(n,t){Pqn(BB(n,37),t)},vX(j1n,"LabelDummyRemover",1547),wAn(1548,1,DVn,Je),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelDummyRemover/lambda$0$Type",1548),wAn(1359,1,n1n,Zh),MWn.pf=function(n,t){TGn(this,BB(n,37),t)},MWn.a=null,vX(j1n,"LabelDummySwitcher",1359),wAn(286,1,{286:1},cKn),MWn.c=0,MWn.d=null,MWn.f=0,vX(j1n,"LabelDummySwitcher/LabelDummyInfo",286),wAn(1360,1,{},Ze),MWn.Kb=function(n){return Irn(),new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"LabelDummySwitcher/lambda$0$Type",1360),wAn(1361,1,DVn,ni),MWn.Mb=function(n){return Irn(),BB(n,10).k==(uSn(),Sut)},vX(j1n,"LabelDummySwitcher/lambda$1$Type",1361),wAn(1362,1,{},hd),MWn.Kb=function(n){return XD(this.a,BB(n,10))},vX(j1n,"LabelDummySwitcher/lambda$2$Type",1362),wAn(1363,1,lVn,fd),MWn.td=function(n){YX(this.a,BB(n,286))},vX(j1n,"LabelDummySwitcher/lambda$3$Type",1363),wAn(1364,1,MYn,ti),MWn.ue=function(n,t){return Lz(BB(n,286),BB(t,286))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"LabelDummySwitcher/lambda$4$Type",1364),wAn(791,1,n1n,ei),MWn.pf=function(n,t){Y6(BB(n,37),t)},vX(j1n,"LabelManagementProcessor",791),wAn(1549,1,n1n,ii),MWn.pf=function(n,t){Nxn(BB(n,37),t)},vX(j1n,"LabelSideSelector",1549),wAn(1550,1,DVn,ri),MWn.Mb=function(n){return qy(TD(mMn(BB(n,70),(HXn(),Qdt))))},vX(j1n,"LabelSideSelector/lambda$0$Type",1550),wAn(1558,1,n1n,ci),MWn.pf=function(n,t){EBn(BB(n,37),t)},vX(j1n,"LayerConstraintPostprocessor",1558),wAn(1559,1,n1n,tf),MWn.pf=function(n,t){r$n(BB(n,37),t)},vX(j1n,"LayerConstraintPreprocessor",1559),wAn(360,22,{3:1,35:1,22:1,360:1},tP);var ost,sst,hst,fst,lst,bst,wst,dst,gst,pst=Ben(j1n,"LayerConstraintPreprocessor/HiddenNodeConnections",360,Unt,e3,z_);wAn(1560,1,n1n,ai),MWn.pf=function(n,t){Eqn(BB(n,37),t)},vX(j1n,"LayerSizeAndGraphHeightCalculator",1560),wAn(1561,1,n1n,ui),MWn.pf=function(n,t){ALn(BB(n,37),t)},vX(j1n,"LongEdgeJoiner",1561),wAn(1562,1,n1n,oi),MWn.pf=function(n,t){WHn(BB(n,37),t)},vX(j1n,"LongEdgeSplitter",1562),wAn(1563,1,n1n,si),MWn.pf=function(n,t){PGn(this,BB(n,37),t)},MWn.d=0,MWn.e=0,MWn.i=0,MWn.j=0,MWn.k=0,MWn.n=0,vX(j1n,"NodePromotion",1563),wAn(1564,1,{},hi),MWn.Kb=function(n){return BB(n,46),hN(),!0},MWn.Fb=function(n){return this===n},vX(j1n,"NodePromotion/lambda$0$Type",1564),wAn(1565,1,{},od),MWn.Kb=function(n){return aV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$1$Type",1565),wAn(1566,1,{},sd),MWn.Kb=function(n){return uV(this.a,BB(n,46))},MWn.Fb=function(n){return this===n},MWn.a=0,vX(j1n,"NodePromotion/lambda$2$Type",1566),wAn(1567,1,n1n,fi),MWn.pf=function(n,t){XUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPostprocessor",1567),wAn(1568,1,n1n,li),MWn.pf=function(n,t){MUn(BB(n,37),t)},vX(j1n,"NorthSouthPortPreprocessor",1568),wAn(1569,1,MYn,bi),MWn.ue=function(n,t){return Zan(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"NorthSouthPortPreprocessor/lambda$0$Type",1569),wAn(1570,1,n1n,wi),MWn.pf=function(n,t){$_n(BB(n,37),t)},vX(j1n,"PartitionMidprocessor",1570),wAn(1571,1,DVn,di),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionMidprocessor/lambda$0$Type",1571),wAn(1572,1,lVn,ld),MWn.td=function(n){$Q(this.a,BB(n,10))},vX(j1n,"PartitionMidprocessor/lambda$1$Type",1572),wAn(1573,1,n1n,gi),MWn.pf=function(n,t){wNn(BB(n,37),t)},vX(j1n,"PartitionPostprocessor",1573),wAn(1574,1,n1n,pi),MWn.pf=function(n,t){NOn(BB(n,37),t)},vX(j1n,"PartitionPreprocessor",1574),wAn(1575,1,DVn,vi),MWn.Mb=function(n){return Lx(BB(n,10),(HXn(),Wgt))},vX(j1n,"PartitionPreprocessor/lambda$0$Type",1575),wAn(1576,1,{},mi),MWn.Kb=function(n){return new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(j1n,"PartitionPreprocessor/lambda$1$Type",1576),wAn(1577,1,DVn,yi),MWn.Mb=function(n){return Lgn(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$2$Type",1577),wAn(1578,1,lVn,ki),MWn.td=function(n){Run(BB(n,17))},vX(j1n,"PartitionPreprocessor/lambda$3$Type",1578),wAn(1579,1,n1n,af),MWn.pf=function(n,t){u_n(BB(n,37),t)},vX(j1n,"PortListSorter",1579),wAn(1580,1,{},ji),MWn.Kb=function(n){return zsn(),BB(n,11).e},vX(j1n,"PortListSorter/lambda$0$Type",1580),wAn(1581,1,{},Ei),MWn.Kb=function(n){return zsn(),BB(n,11).g},vX(j1n,"PortListSorter/lambda$1$Type",1581),wAn(1582,1,MYn,Ti),MWn.ue=function(n,t){return T4(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$2$Type",1582),wAn(1583,1,MYn,Mi),MWn.ue=function(n,t){return Oyn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$3$Type",1583),wAn(1584,1,MYn,Si),MWn.ue=function(n,t){return nFn(BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"PortListSorter/lambda$4$Type",1584),wAn(1585,1,n1n,Pi),MWn.pf=function(n,t){WAn(BB(n,37),t)},vX(j1n,"PortSideProcessor",1585),wAn(1586,1,n1n,Ci),MWn.pf=function(n,t){IRn(BB(n,37),t)},vX(j1n,"ReversedEdgeRestorer",1586),wAn(1591,1,n1n,am),MWn.pf=function(n,t){Ymn(this,BB(n,37),t)},vX(j1n,"SelfLoopPortRestorer",1591),wAn(1592,1,{},Ii),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPortRestorer/lambda$0$Type",1592),wAn(1593,1,DVn,Oi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopPortRestorer/lambda$1$Type",1593),wAn(1594,1,DVn,Ai),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPortRestorer/lambda$2$Type",1594),wAn(1595,1,{},$i),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopPortRestorer/lambda$3$Type",1595),wAn(1596,1,lVn,bd),MWn.td=function(n){SSn(this.a,BB(n,403))},vX(j1n,"SelfLoopPortRestorer/lambda$4$Type",1596),wAn(794,1,lVn,Li),MWn.td=function(n){nPn(BB(n,101))},vX(j1n,"SelfLoopPortRestorer/lambda$5$Type",794),wAn(1597,1,n1n,Ni),MWn.pf=function(n,t){Lpn(BB(n,37),t)},vX(j1n,"SelfLoopPostProcessor",1597),wAn(1598,1,{},xi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopPostProcessor/lambda$0$Type",1598),wAn(1599,1,DVn,Di),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopPostProcessor/lambda$1$Type",1599),wAn(1600,1,DVn,Ri),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopPostProcessor/lambda$2$Type",1600),wAn(1601,1,lVn,Ki),MWn.td=function(n){Ljn(BB(n,10))},vX(j1n,"SelfLoopPostProcessor/lambda$3$Type",1601),wAn(1602,1,{},_i),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPostProcessor/lambda$4$Type",1602),wAn(1603,1,lVn,wd),MWn.td=function(n){a3(this.a,BB(n,409))},vX(j1n,"SelfLoopPostProcessor/lambda$5$Type",1603),wAn(1604,1,DVn,Fi),MWn.Mb=function(n){return!!BB(n,101).i},vX(j1n,"SelfLoopPostProcessor/lambda$6$Type",1604),wAn(1605,1,lVn,dd),MWn.td=function(n){Ty(this.a,BB(n,101))},vX(j1n,"SelfLoopPostProcessor/lambda$7$Type",1605),wAn(1587,1,n1n,Bi),MWn.pf=function(n,t){Z$n(BB(n,37),t)},vX(j1n,"SelfLoopPreProcessor",1587),wAn(1588,1,{},Hi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,101).f,1))},vX(j1n,"SelfLoopPreProcessor/lambda$0$Type",1588),wAn(1589,1,{},qi),MWn.Kb=function(n){return BB(n,409).a},vX(j1n,"SelfLoopPreProcessor/lambda$1$Type",1589),wAn(1590,1,lVn,Gi),MWn.td=function(n){q$(BB(n,17))},vX(j1n,"SelfLoopPreProcessor/lambda$2$Type",1590),wAn(1606,1,n1n,xR),MWn.pf=function(n,t){sSn(this,BB(n,37),t)},vX(j1n,"SelfLoopRouter",1606),wAn(1607,1,{},zi),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,29).a,16))},vX(j1n,"SelfLoopRouter/lambda$0$Type",1607),wAn(1608,1,DVn,Ui),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SelfLoopRouter/lambda$1$Type",1608),wAn(1609,1,DVn,Xi),MWn.Mb=function(n){return Lx(BB(n,10),(hWn(),Olt))},vX(j1n,"SelfLoopRouter/lambda$2$Type",1609),wAn(1610,1,{},Wi),MWn.Kb=function(n){return BB(mMn(BB(n,10),(hWn(),Olt)),403)},vX(j1n,"SelfLoopRouter/lambda$3$Type",1610),wAn(1611,1,lVn,eP),MWn.td=function(n){QV(this.a,this.b,BB(n,403))},vX(j1n,"SelfLoopRouter/lambda$4$Type",1611),wAn(1612,1,n1n,Vi),MWn.pf=function(n,t){fxn(BB(n,37),t)},vX(j1n,"SemiInteractiveCrossMinProcessor",1612),wAn(1613,1,DVn,Qi),MWn.Mb=function(n){return BB(n,10).k==(uSn(),Cut)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1613),wAn(1614,1,DVn,Yi),MWn.Mb=function(n){return Gq(BB(n,10))._b((HXn(),spt))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1614),wAn(1615,1,MYn,Ji),MWn.ue=function(n,t){return drn(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1615),wAn(1616,1,{},Zi),MWn.Ce=function(n,t){return XQ(BB(n,10),BB(t,10))},vX(j1n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1616),wAn(1618,1,n1n,nr),MWn.pf=function(n,t){MBn(BB(n,37),t)},vX(j1n,"SortByInputModelProcessor",1618),wAn(1619,1,DVn,tr),MWn.Mb=function(n){return 0!=BB(n,11).g.c.length},vX(j1n,"SortByInputModelProcessor/lambda$0$Type",1619),wAn(1620,1,lVn,gd),MWn.td=function(n){fPn(this.a,BB(n,11))},vX(j1n,"SortByInputModelProcessor/lambda$1$Type",1620),wAn(1693,803,{},grn),MWn.Me=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Np,JT(AV(new Rq(null,new w1(this.c.a.b,16)),new dr),new uP(this,t)),pCn(this,new rr),Otn(t,new cr),t.c=x8(Ant,HWn,1,0,5,1),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new ar),new vd(t)),pCn(this,new ur),Otn(t,new or),t.c=x8(Ant,HWn,1,0,5,1),e=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new md(this))),new sr),JT(new Rq(null,new w1(this.c.a.a,16)),new rP(e,t)),pCn(this,new fr),Otn(t,new er),t.c=x8(Ant,HWn,1,0,5,1);break;case 3:i=new Np,pCn(this,new ir),r=j$(icn(LV(new Rq(null,new w1(this.c.a.b,16)),new pd(this))),new hr),JT(AV(new Rq(null,new w1(this.c.a.b,16)),new lr),new aP(r,i)),pCn(this,new br),Otn(i,new wr),i.c=x8(Ant,HWn,1,0,5,1);break;default:throw Hp(new kv)}},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation",1693),wAn(1694,1,qYn,ir),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1694),wAn(1695,1,{},pd),MWn.Fe=function(n){return GCn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1695),wAn(1703,1,RVn,iP),MWn.Vd=function(){Fkn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1703),wAn(1705,1,qYn,rr),MWn.Lb=function(n){return cL(BB(n,57).g,145)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1705),wAn(1706,1,lVn,cr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1706),wAn(1707,1,DVn,ar),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1707),wAn(1709,1,lVn,vd),MWn.td=function(n){Ebn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1709),wAn(1708,1,RVn,lP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1708),wAn(1710,1,qYn,ur),MWn.Lb=function(n){return cL(BB(n,57).g,10)},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1710),wAn(1711,1,lVn,or),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1711),wAn(1712,1,{},md),MWn.Fe=function(n){return zCn(this.a,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1712),wAn(1713,1,{},sr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1713),wAn(1696,1,{},hr),MWn.De=function(){return 0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1696),wAn(1715,1,lVn,rP),MWn.td=function(n){HG(this.a,this.b,BB(n,307))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1715),wAn(1714,1,RVn,cP),MWn.Vd=function(){VAn(this.a,this.b,-1)},MWn.b=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1714),wAn(1716,1,qYn,fr),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1716),wAn(1717,1,lVn,er),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1717),wAn(1697,1,DVn,lr),MWn.Mb=function(n){return cL(BB(n,57).g,10)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1697),wAn(1699,1,lVn,aP),MWn.td=function(n){qG(this.a,this.b,BB(n,57))},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1699),wAn(1698,1,RVn,bP),MWn.Vd=function(){Fkn(this.b,this.a,-1)},MWn.a=0,vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1698),wAn(1700,1,qYn,br),MWn.Lb=function(n){return BB(n,57),!0},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return BB(n,57),!0},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1700),wAn(1701,1,lVn,wr),MWn.td=function(n){BB(n,365).Vd()},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1701),wAn(1702,1,DVn,dr),MWn.Mb=function(n){return cL(BB(n,57).g,145)},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1702),wAn(1704,1,lVn,uP),MWn.td=function(n){Ttn(this.a,this.b,BB(n,57))},vX(A1n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1704),wAn(1521,1,n1n,ox),MWn.pf=function(n,t){cqn(this,BB(n,37),t)},vX(A1n,"HorizontalGraphCompactor",1521),wAn(1522,1,{},yd),MWn.Oe=function(n,t){var e,i;return Z7(n,t)?0:(e=f2(n),i=f2(t),e&&e.k==(uSn(),Mut)||i&&i.k==(uSn(),Mut)?0:UN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},MWn.Pe=function(n,t){var e,i;return Z7(n,t)?1:(e=f2(n),i=f2(t),XN(BB(mMn(this.a.a,(hWn(),Alt)),304),e?e.k:(uSn(),Put),i?i.k:(uSn(),Put)))},vX(A1n,"HorizontalGraphCompactor/1",1522),wAn(1523,1,{},gr),MWn.Ne=function(n,t){return MM(),0==n.a.i},vX(A1n,"HorizontalGraphCompactor/lambda$0$Type",1523),wAn(1524,1,{},kd),MWn.Ne=function(n,t){return _Q(this.a,n,t)},vX(A1n,"HorizontalGraphCompactor/lambda$1$Type",1524),wAn(1664,1,{},I7),vX(A1n,"LGraphToCGraphTransformer",1664),wAn(1672,1,DVn,pr),MWn.Mb=function(n){return null!=n},vX(A1n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1672),wAn(1665,1,{},vr),MWn.Kb=function(n){return G_(),Bbn(mMn(BB(BB(n,57).g,10),(hWn(),dlt)))},vX(A1n,"LGraphToCGraphTransformer/lambda$0$Type",1665),wAn(1666,1,{},mr),MWn.Kb=function(n){return G_(),mfn(BB(BB(n,57).g,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$1$Type",1666),wAn(1675,1,DVn,yr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,10)},vX(A1n,"LGraphToCGraphTransformer/lambda$10$Type",1675),wAn(1676,1,lVn,kr),MWn.td=function(n){KQ(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$11$Type",1676),wAn(1677,1,DVn,jr),MWn.Mb=function(n){return G_(),cL(BB(n,57).g,145)},vX(A1n,"LGraphToCGraphTransformer/lambda$12$Type",1677),wAn(1681,1,lVn,Er),MWn.td=function(n){vfn(BB(n,57))},vX(A1n,"LGraphToCGraphTransformer/lambda$13$Type",1681),wAn(1678,1,lVn,jd),MWn.td=function(n){uA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$14$Type",1678),wAn(1679,1,lVn,Ed),MWn.td=function(n){sA(this.a,BB(n,110))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$15$Type",1679),wAn(1680,1,lVn,Td),MWn.td=function(n){oA(this.a,BB(n,8))},MWn.a=0,vX(A1n,"LGraphToCGraphTransformer/lambda$16$Type",1680),wAn(1682,1,{},Tr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$17$Type",1682),wAn(1683,1,DVn,Mr),MWn.Mb=function(n){return G_(),b5(BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$18$Type",1683),wAn(1684,1,lVn,Md),MWn.td=function(n){Snn(this.a,BB(n,17))},vX(A1n,"LGraphToCGraphTransformer/lambda$19$Type",1684),wAn(1668,1,lVn,Sd),MWn.td=function(n){l0(this.a,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$2$Type",1668),wAn(1685,1,{},Sr),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$20$Type",1685),wAn(1686,1,{},Pr),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$21$Type",1686),wAn(1687,1,{},Cr),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$22$Type",1687),wAn(1688,1,DVn,Ir),MWn.Mb=function(n){return tx(BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$23$Type",1688),wAn(1689,1,lVn,Pd),MWn.td=function(n){PCn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$24$Type",1689),wAn(1667,1,lVn,oP),MWn.td=function(n){H3(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$3$Type",1667),wAn(1669,1,{},Or),MWn.Kb=function(n){return G_(),new Rq(null,new w1(BB(n,29).a,16))},vX(A1n,"LGraphToCGraphTransformer/lambda$4$Type",1669),wAn(1670,1,{},Ar),MWn.Kb=function(n){return G_(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(A1n,"LGraphToCGraphTransformer/lambda$5$Type",1670),wAn(1671,1,{},$r),MWn.Kb=function(n){return G_(),BB(mMn(BB(n,17),(hWn(),Nlt)),15)},vX(A1n,"LGraphToCGraphTransformer/lambda$6$Type",1671),wAn(1673,1,lVn,Cd),MWn.td=function(n){KIn(this.a,BB(n,15))},vX(A1n,"LGraphToCGraphTransformer/lambda$8$Type",1673),wAn(1674,1,lVn,sP),MWn.td=function(n){x$(this.a,this.b,BB(n,145))},vX(A1n,"LGraphToCGraphTransformer/lambda$9$Type",1674),wAn(1663,1,{},Lr),MWn.Le=function(n){var t,e,i,r,c;for(this.a=n,this.d=new Fv,this.c=x8(qit,HWn,121,this.a.a.a.c.length,0,1),this.b=0,e=new Wb(this.a.a.a);e.a<e.c.c.length;)(t=BB(n0(e),307)).d=this.b,c=AN(oM(new qv,t),this.d),this.c[this.b]=c,++this.b;for(JGn(this),AUn(this),ZLn(this),WKn(B_(this.d),new Xm),r=new Wb(this.a.a.b);r.a<r.c.c.length;)(i=BB(n0(r),57)).d.c=this.c[i.a.d].e+i.b.a},MWn.b=0,vX(A1n,"NetworkSimplexCompaction",1663),wAn(145,1,{35:1,145:1},PBn),MWn.wd=function(n){return Lnn(this,BB(n,145))},MWn.Ib=function(){return mfn(this)},vX(A1n,"VerticalSegment",145),wAn(827,1,{},zEn),MWn.c=0,MWn.e=0,MWn.i=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter",827),wAn(663,1,{663:1},kcn),MWn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},MWn.b=0,MWn.c=0,MWn.f=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",663),wAn(287,1,{35:1,287:1},Gx),MWn.wd=function(n){return aq(this,BB(n,287))},MWn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},MWn.a=0,MWn.b=0,MWn.c=0,vX($1n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",287),wAn(1929,1,{},ZSn),MWn.b=0,MWn.e=!1,vX($1n,"CrossingMatrixFiller",1929);var vst,mst,yst,kst,jst=bq(L1n,"IInitializable");wAn(1804,1,N1n,vP),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Lf=function(){return this.c!=(oin(),Amt)},MWn.Mf=function(){this.e=x8(ANt,hQn,25,this.d,15,1)},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Qf=function(n,t,e,i){++this.d},MWn.Rf=function(){return!0},MWn.Sf=function(n,t,e,i){return Yhn(this,n,t,e),Z4(this,t)},MWn.Tf=function(n,t){var e;return Yhn(this,n,e=hj(t,n.length),t),bon(this,e)},MWn.d=0,vX($1n,"GreedySwitchHeuristic",1804),wAn(1930,1,{},lG),MWn.b=0,MWn.d=0,vX($1n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",1930),wAn(1917,1,{},uRn),MWn.a=!1,vX($1n,"SwitchDecider",1917),wAn(101,1,{101:1},pPn),MWn.a=null,MWn.c=null,MWn.i=null,vX(x1n,"SelfHyperLoop",101),wAn(1916,1,{},epn),MWn.c=0,MWn.e=0,vX(x1n,"SelfHyperLoopLabels",1916),wAn(411,22,{3:1,35:1,22:1,411:1},mP);var Est,Tst,Mst,Sst,Pst,Cst,Ist=Ben(x1n,"SelfHyperLoopLabels/Alignment",411,Unt,r3,U_);wAn(409,1,{409:1},j6),vX(x1n,"SelfLoopEdge",409),wAn(403,1,{403:1},Ogn),MWn.a=!1,vX(x1n,"SelfLoopHolder",403),wAn(1724,1,DVn,qr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopHolder/lambda$0$Type",1724),wAn(113,1,{113:1},ipn),MWn.a=!1,MWn.c=!1,vX(x1n,"SelfLoopPort",113),wAn(1792,1,DVn,Gr),MWn.Mb=function(n){return b5(BB(n,17))},vX(x1n,"SelfLoopPort/lambda$0$Type",1792),wAn(363,22,{3:1,35:1,22:1,363:1},yP);var Ost,Ast,$st,Lst,Nst,xst,Dst,Rst,Kst=Ben(x1n,"SelfLoopType",363,Unt,x5,Y_);wAn(1732,1,{},uf),vX(D1n,"PortRestorer",1732),wAn(361,22,{3:1,35:1,22:1,361:1},kP);var _st,Fst,Bst,Hst,qst,Gst,zst,Ust,Xst,Wst=Ben(D1n,"PortRestorer/PortSideArea",361,Unt,P1,J_);wAn(1733,1,{},Wr),MWn.Kb=function(n){return _Mn(),BB(n,15).Oc()},vX(D1n,"PortRestorer/lambda$0$Type",1733),wAn(1734,1,lVn,Vr),MWn.td=function(n){_Mn(),BB(n,113).c=!1},vX(D1n,"PortRestorer/lambda$1$Type",1734),wAn(1743,1,DVn,Qr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),CIt)},vX(D1n,"PortRestorer/lambda$10$Type",1743),wAn(1744,1,{},Yr),MWn.Kb=function(n){return _Mn(),BB(n,113).d},vX(D1n,"PortRestorer/lambda$11$Type",1744),wAn(1745,1,lVn,Id),MWn.td=function(n){Nj(this.a,BB(n,11))},vX(D1n,"PortRestorer/lambda$12$Type",1745),wAn(1735,1,lVn,Od),MWn.td=function(n){Ax(this.a,BB(n,101))},vX(D1n,"PortRestorer/lambda$2$Type",1735),wAn(1736,1,MYn,Jr),MWn.ue=function(n,t){return oen(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortRestorer/lambda$3$Type",1736),wAn(1737,1,DVn,Zr),MWn.Mb=function(n){return _Mn(),BB(n,113).c},vX(D1n,"PortRestorer/lambda$4$Type",1737),wAn(1738,1,DVn,xr),MWn.Mb=function(n){return Acn(BB(n,11))},vX(D1n,"PortRestorer/lambda$5$Type",1738),wAn(1739,1,DVn,Nr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),sIt)},vX(D1n,"PortRestorer/lambda$6$Type",1739),wAn(1740,1,DVn,Dr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),oIt)},vX(D1n,"PortRestorer/lambda$7$Type",1740),wAn(1741,1,DVn,Rr),MWn.Mb=function(n){return c3(BB(n,11))},vX(D1n,"PortRestorer/lambda$8$Type",1741),wAn(1742,1,DVn,Kr),MWn.Mb=function(n){return _Mn(),BB(n,11).j==(kUn(),SIt)},vX(D1n,"PortRestorer/lambda$9$Type",1742),wAn(270,22,{3:1,35:1,22:1,270:1},WV);var Vst,Qst,Yst,Jst,Zst,nht,tht,eht,iht=Ben(D1n,"PortSideAssigner/Target",270,Unt,Ftn,X_);wAn(1725,1,{},_r),MWn.Kb=function(n){return AV(new Rq(null,new w1(BB(n,101).j,16)),new Xr)},vX(D1n,"PortSideAssigner/lambda$1$Type",1725),wAn(1726,1,{},Fr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$2$Type",1726),wAn(1727,1,lVn,Br),MWn.td=function(n){qCn(BB(n,11),(kUn(),sIt))},vX(D1n,"PortSideAssigner/lambda$3$Type",1727),wAn(1728,1,{},Hr),MWn.Kb=function(n){return BB(n,113).d},vX(D1n,"PortSideAssigner/lambda$4$Type",1728),wAn(1729,1,lVn,Ad),MWn.td=function(n){tv(this.a,BB(n,11))},vX(D1n,"PortSideAssigner/lambda$5$Type",1729),wAn(1730,1,MYn,zr),MWn.ue=function(n,t){return MW(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$6$Type",1730),wAn(1731,1,MYn,Ur),MWn.ue=function(n,t){return oH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(D1n,"PortSideAssigner/lambda$7$Type",1731),wAn(805,1,DVn,Xr),MWn.Mb=function(n){return BB(n,113).c},vX(D1n,"PortSideAssigner/lambda$8$Type",805),wAn(2009,1,{}),vX(R1n,"AbstractSelfLoopRouter",2009),wAn(1750,1,MYn,nc),MWn.ue=function(n,t){return IK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,bJn,1750),wAn(1751,1,MYn,tc),MWn.ue=function(n,t){return CK(BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,wJn,1751),wAn(1793,2009,{},ec),MWn.Uf=function(n,t,e){return e},vX(R1n,"OrthogonalSelfLoopRouter",1793),wAn(1795,1,lVn,wP),MWn.td=function(n){pgn(this.b,this.a,BB(n,8))},vX(R1n,"OrthogonalSelfLoopRouter/lambda$0$Type",1795),wAn(1794,1793,{},ic),MWn.Uf=function(n,t,e){var i,r;return Kx(e,0,UR(B$((i=n.c.d).n),i.a)),DH(e,UR(B$((r=n.d.d).n),r.a)),E_n(e)},vX(R1n,"PolylineSelfLoopRouter",1794),wAn(1746,1,{},nf),MWn.a=null,vX(R1n,"RoutingDirector",1746),wAn(1747,1,MYn,rc),MWn.ue=function(n,t){return wH(BB(n,113),BB(t,113))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingDirector/lambda$0$Type",1747),wAn(1748,1,{},cc),MWn.Kb=function(n){return SM(),BB(n,101).j},vX(R1n,"RoutingDirector/lambda$1$Type",1748),wAn(1749,1,lVn,ac),MWn.td=function(n){SM(),BB(n,15).ad(Qst)},vX(R1n,"RoutingDirector/lambda$2$Type",1749),wAn(1752,1,{},uc),vX(R1n,"RoutingSlotAssigner",1752),wAn(1753,1,DVn,$d),MWn.Mb=function(n){return CC(this.a,BB(n,101))},vX(R1n,"RoutingSlotAssigner/lambda$0$Type",1753),wAn(1754,1,MYn,Ld),MWn.ue=function(n,t){return Uq(this.a,BB(n,101),BB(t,101))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(R1n,"RoutingSlotAssigner/lambda$1$Type",1754),wAn(1796,1793,{},oc),MWn.Uf=function(n,t,e){var i,r,c,a;return i=Gy(MD(gpn(n.b.g.b,(HXn(),jpt)))),nLn(n,t,e,a=new Ux(Pun(Gk(PMt,1),sVn,8,0,[(c=n.c.d,UR(new wA(c.n),c.a))])),i),DH(a,UR(new wA((r=n.d.d).n),r.a)),Fvn(new oBn(a))},vX(R1n,"SplineSelfLoopRouter",1796),wAn(578,1,MYn,Grn,kH),MWn.ue=function(n,t){return fXn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderNodeComparator",578),wAn(1755,1,DVn,sc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$0$Type",1755),wAn(1756,1,{},hc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$1$Type",1756),wAn(1757,1,DVn,fc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$2$Type",1757),wAn(1758,1,{},lc),MWn.Kb=function(n){return BB(xq(BB(n,11).e,0),17).c},vX(K1n,"ModelOrderNodeComparator/lambda$3$Type",1758),wAn(1759,1,DVn,bc),MWn.Mb=function(n){return 0!=BB(n,11).e.c.length},vX(K1n,"ModelOrderNodeComparator/lambda$4$Type",1759),wAn(806,1,MYn,O7,pP),MWn.ue=function(n,t){return Nz(this,n,t)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(K1n,"ModelOrderPortComparator",806),wAn(801,1,{},wc),MWn.Vf=function(n,t){var i,r,c,a;for(c=PSn(t),i=new Np,a=t.f/c,r=1;r<c;++r)WB(i,iln(dG(fan(e.Math.round(r*a)))));return i},MWn.Wf=function(){return!1},vX(_1n,"ARDCutIndexHeuristic",801),wAn(1479,1,n1n,dc),MWn.pf=function(n,t){oKn(BB(n,37),t)},vX(_1n,"BreakingPointInserter",1479),wAn(305,1,{305:1},v3),MWn.Ib=function(){var n;return(n=new Ck).a+="BPInfo[",n.a+="\n\tstart=",uO(n,this.i),n.a+="\n\tend=",uO(n,this.a),n.a+="\n\tnodeStartEdge=",uO(n,this.e),n.a+="\n\tstartEndEdge=",uO(n,this.j),n.a+="\n\toriginalEdge=",uO(n,this.f),n.a+="\n\tstartInLayerDummy=",uO(n,this.k),n.a+="\n\tstartInLayerEdge=",uO(n,this.n),n.a+="\n\tendInLayerDummy=",uO(n,this.b),n.a+="\n\tendInLayerEdge=",uO(n,this.c),n.a},vX(_1n,"BreakingPointInserter/BPInfo",305),wAn(652,1,{652:1},Hd),MWn.a=!1,MWn.b=0,MWn.c=0,vX(_1n,"BreakingPointInserter/Cut",652),wAn(1480,1,n1n,gc),MWn.pf=function(n,t){mLn(BB(n,37),t)},vX(_1n,"BreakingPointProcessor",1480),wAn(1481,1,DVn,pc),MWn.Mb=function(n){return Jnn(BB(n,10))},vX(_1n,"BreakingPointProcessor/0methodref$isEnd$Type",1481),wAn(1482,1,DVn,vc),MWn.Mb=function(n){return Znn(BB(n,10))},vX(_1n,"BreakingPointProcessor/1methodref$isStart$Type",1482),wAn(1483,1,n1n,mc),MWn.pf=function(n,t){rNn(this,BB(n,37),t)},vX(_1n,"BreakingPointRemover",1483),wAn(1484,1,lVn,yc),MWn.td=function(n){BB(n,128).k=!0},vX(_1n,"BreakingPointRemover/lambda$0$Type",1484),wAn(797,1,{},MAn),MWn.b=0,MWn.e=0,MWn.f=0,MWn.j=0,vX(_1n,"GraphStats",797),wAn(798,1,{},kc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/0methodref$max$Type",798),wAn(799,1,{},jc),MWn.Ce=function(n,t){return e.Math.max(Gy(MD(n)),Gy(MD(t)))},vX(_1n,"GraphStats/2methodref$max$Type",799),wAn(1660,1,{},Ec),MWn.Ce=function(n,t){return vB(MD(n),MD(t))},vX(_1n,"GraphStats/lambda$1$Type",1660),wAn(1661,1,{},Nd),MWn.Kb=function(n){return wpn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$2$Type",1661),wAn(1662,1,{},xd),MWn.Kb=function(n){return VLn(this.a,BB(n,29))},vX(_1n,"GraphStats/lambda$6$Type",1662),wAn(800,1,{},Tc),MWn.Vf=function(n,t){return BB(mMn(n,(HXn(),_pt)),15)||(SQ(),SQ(),set)},MWn.Wf=function(){return!1},vX(_1n,"ICutIndexCalculator/ManualCutIndexCalculator",800),wAn(802,1,{},Mc),MWn.Vf=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k;for(null==t.n&&Dmn(t),k=t.n,null==t.d&&Dmn(t),s=t.d,(y=x8(xNt,qQn,25,k.length,15,1))[0]=k[0],v=k[0],h=1;h<k.length;h++)y[h]=y[h-1]+k[h],v+=k[h];for(c=PSn(t)-1,u=BB(mMn(n,(HXn(),Fpt)),19).a,r=KQn,i=new Np,b=e.Math.max(0,c-u);b<=e.Math.min(t.f-1,c+u);b++){if(g=v/(b+1),p=0,f=1,a=new Np,m=KQn,l=0,o=0,d=s[0],0==b)m=v,null==t.g&&(t.g=Xrn(t,new jc)),o=Gy(t.g);else{for(;f<t.f;)y[f-1]-p>=g&&(WB(a,iln(f)),m=e.Math.max(m,y[f-1]-l),o+=d,p+=y[f-1]-p,l=y[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;o+=d}(w=e.Math.min(1/m,1/t.b/o))>r&&(r=w,i=a)}return i},MWn.Wf=function(){return!1},vX(_1n,"MSDCutIndexHeuristic",802),wAn(1617,1,n1n,Sc),MWn.pf=function(n,t){bBn(BB(n,37),t)},vX(_1n,"SingleEdgeGraphWrapper",1617),wAn(227,22,{3:1,35:1,22:1,227:1},jP);var rht,cht,aht,uht=Ben(F1n,"CenterEdgeLabelPlacementStrategy",227,Unt,Z8,W_);wAn(422,22,{3:1,35:1,22:1,422:1},EP);var oht,sht,hht,fht,lht=Ben(F1n,"ConstraintCalculationStrategy",422,Unt,GY,V_);wAn(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},TP),MWn.Kf=function(){return sIn(this)},MWn.Xf=function(){return sIn(this)};var bht,wht,dht,ght,pht=Ben(F1n,"CrossingMinimizationStrategy",314,Unt,T1,Q_);wAn(337,22,{3:1,35:1,22:1,337:1},MP);var vht,mht,yht,kht,jht,Eht,Tht=Ben(F1n,"CuttingStrategy",337,Unt,M1,Z_);wAn(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},SP),MWn.Kf=function(){return RAn(this)},MWn.Xf=function(){return RAn(this)};var Mht,Sht,Pht,Cht=Ben(F1n,"CycleBreakingStrategy",335,Unt,L5,nF);wAn(419,22,{3:1,35:1,22:1,419:1},PP);var Iht,Oht,Aht,$ht,Lht=Ben(F1n,"DirectionCongruency",419,Unt,qY,tF);wAn(450,22,{3:1,35:1,22:1,450:1},CP);var Nht,xht,Dht,Rht,Kht,_ht,Fht,Bht=Ben(F1n,"EdgeConstraint",450,Unt,S1,eF);wAn(276,22,{3:1,35:1,22:1,276:1},IP);var Hht,qht,Ght,zht=Ben(F1n,"EdgeLabelSideSelection",276,Unt,i9,iF);wAn(479,22,{3:1,35:1,22:1,479:1},OP);var Uht,Xht,Wht,Vht,Qht,Yht,Jht,Zht=Ben(F1n,"EdgeStraighteningStrategy",479,Unt,HY,rF);wAn(274,22,{3:1,35:1,22:1,274:1},AP);var nft,tft,eft,ift,rft,cft,aft,uft=Ben(F1n,"FixedAlignment",274,Unt,t9,cF);wAn(275,22,{3:1,35:1,22:1,275:1},$P);var oft,sft,hft,fft,lft,bft,wft,dft,gft,pft,vft,mft=Ben(F1n,"GraphCompactionStrategy",275,Unt,n9,aF);wAn(256,22,{3:1,35:1,22:1,256:1},LP);var yft,kft,jft,Eft,Tft=Ben(F1n,"GraphProperties",256,Unt,bcn,uF);wAn(292,22,{3:1,35:1,22:1,292:1},NP);var Mft,Sft,Pft,Cft,Ift=Ben(F1n,"GreedySwitchType",292,Unt,I1,oF);wAn(303,22,{3:1,35:1,22:1,303:1},xP);var Oft,Aft,$ft,Lft=Ben(F1n,"InLayerConstraint",303,Unt,C1,sF);wAn(420,22,{3:1,35:1,22:1,420:1},DP);var Nft,xft,Dft,Rft,Kft,_ft,Fft,Bft,Hft,qft,Gft,zft,Uft,Xft,Wft,Vft,Qft,Yft,Jft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,ult,olt,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,vlt,mlt,ylt,klt,jlt,Elt,Tlt,Mlt,Slt,Plt,Clt,Ilt,Olt,Alt,$lt,Llt,Nlt,xlt,Dlt,Rlt,Klt,_lt,Flt,Blt,Hlt,qlt,Glt=Ben(F1n,"InteractiveReferencePoint",420,Unt,zY,hF);wAn(163,22,{3:1,35:1,22:1,163:1},BP);var zlt,Ult,Xlt,Wlt,Vlt,Qlt,Ylt,Jlt,Zlt,nbt,tbt,ebt,ibt,rbt,cbt,abt,ubt,obt,sbt,hbt,fbt,lbt,bbt,wbt,dbt,gbt,pbt,vbt,mbt,ybt,kbt,jbt,Ebt,Tbt,Mbt,Sbt,Pbt,Cbt,Ibt,Obt,Abt,$bt,Lbt,Nbt,xbt,Dbt,Rbt,Kbt,_bt,Fbt,Bbt,Hbt,qbt,Gbt,zbt,Ubt,Xbt,Wbt,Vbt,Qbt,Ybt,Jbt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,uwt,owt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,vwt,mwt,ywt,kwt,jwt,Ewt,Twt,Mwt,Swt,Pwt,Cwt,Iwt,Owt,Awt,$wt,Lwt,Nwt,xwt,Dwt,Rwt,Kwt,_wt,Fwt,Bwt,Hwt,qwt,Gwt,zwt,Uwt,Xwt,Wwt,Vwt,Qwt,Ywt,Jwt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt,udt,odt,sdt,hdt,fdt,ldt,bdt,wdt,ddt,gdt,pdt,vdt,mdt,ydt,kdt,jdt,Edt,Tdt,Mdt,Sdt,Pdt,Cdt,Idt,Odt,Adt,$dt,Ldt,Ndt,xdt,Ddt,Rdt,Kdt,_dt,Fdt,Bdt,Hdt,qdt,Gdt,zdt,Udt,Xdt,Wdt,Vdt,Qdt,Ydt,Jdt,Zdt,ngt,tgt,egt,igt,rgt,cgt,agt,ugt,ogt,sgt,hgt,fgt,lgt,bgt,wgt,dgt,ggt,pgt,vgt,mgt,ygt,kgt,jgt,Egt,Tgt,Mgt,Sgt,Pgt,Cgt,Igt,Ogt,Agt,$gt,Lgt,Ngt,xgt,Dgt,Rgt,Kgt,_gt,Fgt,Bgt,Hgt,qgt,Ggt,zgt,Ugt,Xgt,Wgt,Vgt,Qgt,Ygt,Jgt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,upt,opt,spt,hpt,fpt,lpt,bpt,wpt,dpt,gpt,ppt,vpt,mpt,ypt,kpt,jpt,Ept,Tpt,Mpt,Spt,Ppt,Cpt,Ipt,Opt,Apt,$pt,Lpt,Npt,xpt,Dpt,Rpt,Kpt,_pt,Fpt,Bpt,Hpt,qpt,Gpt,zpt,Upt,Xpt,Wpt,Vpt,Qpt,Ypt,Jpt,Zpt,nvt,tvt,evt,ivt=Ben(F1n,"LayerConstraint",163,Unt,D5,fF);wAn(848,1,QYn,hf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U1n),""),"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."),Pbt),(PPn(),gMt)),Lht),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X1n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W1n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Qbt),gMt),Glt),nbn(hMt)))),a2(n,W1n,e0n,Jbt),a2(n,W1n,l0n,Ybt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V1n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Q1n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Pj(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y1n),""),"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),wMt),ktt),nbn(fMt)),Pun(Gk(Qtt,1),sVn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J1n),""),"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."),xwt),gMt),zvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Z1n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),iln(7)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n0n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t0n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e0n),"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)."),Mbt),gMt),Cht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,i0n),f2n),"Node Layering Strategy"),"Strategy for node layering."),bwt),gMt),ovt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,r0n),f2n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),iwt),gMt),ivt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,c0n),f2n),"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."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,a0n),f2n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u0n),l2n),"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."),iln(4)),vMt),Att),nbn(hMt)))),a2(n,u0n,i0n,awt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o0n),l2n),"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."),iln(2)),vMt),Att),nbn(hMt)))),a2(n,o0n,i0n,owt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s0n),b2n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fwt),gMt),Dvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h0n),b2n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),iln(0)),vMt),Att),nbn(hMt)))),a2(n,h0n,s0n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f0n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),iln(DWn)),vMt),Att),nbn(hMt)))),a2(n,f0n,i0n,nwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l0n),w2n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),Ebt),gMt),pht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b0n),w2n),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,w0n),w2n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dMt),Ptt),nbn(hMt)))),a2(n,w0n,d2n,pbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,d0n),w2n),"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),wMt),ktt),nbn(hMt)))),a2(n,d0n,l0n,kbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,g0n),w2n),"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."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,p0n),w2n),"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."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v0n),g2n),"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."),iln(40)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m0n),g2n),"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."),wbt),gMt),Ift),nbn(hMt)))),a2(n,m0n,l0n,dbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y0n),"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."),hbt),gMt),Ift),nbn(hMt)))),a2(n,y0n,l0n,fbt),a2(n,y0n,d2n,lbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,k0n),p2n),"Node Placement Strategy"),"Strategy for node placement."),Lwt),gMt),Avt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,j0n),p2n),"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."),wMt),ktt),nbn(hMt)))),a2(n,j0n,k0n,Ewt),a2(n,j0n,k0n,Twt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E0n),v2n),"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."),pwt),gMt),Zht),nbn(hMt)))),a2(n,E0n,k0n,vwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T0n),v2n),"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."),ywt),gMt),uft),nbn(hMt)))),a2(n,T0n,k0n,kwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M0n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dMt),Ptt),nbn(hMt)))),a2(n,M0n,k0n,Swt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,S0n),"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."),gMt),kvt),nbn(sMt)))),a2(n,S0n,k0n,Awt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P0n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Iwt),gMt),kvt),nbn(hMt)))),a2(n,P0n,k0n,Owt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,C0n),m2n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),xbt),gMt),nmt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,I0n),m2n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Rbt),gMt),cmt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O0n),"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."),_bt),gMt),hmt),nbn(hMt)))),a2(n,O0n,y2n,Fbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,A0n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dMt),Ptt),nbn(hMt)))),a2(n,A0n,y2n,Hbt),a2(n,A0n,O0n,qbt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,$0n),"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),dMt),Ptt),nbn(hMt)))),a2(n,$0n,y2n,Lbt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,L0n),k2n),"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."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,N0n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,x0n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,D0n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,R0n),j2n),"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."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,K0n),j2n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_0n),j2n),"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."),iln(0)),vMt),Att),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F0n),E2n),DJn),"Tries to further compact components (disconnected sub-graphs)."),!1),wMt),ktt),nbn(hMt)))),a2(n,F0n,kZn,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B0n),T2n),"Post Compaction Strategy"),M2n),Ylt),gMt),mft),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H0n),T2n),"Post Compaction Constraint Calculation"),M2n),Vlt),gMt),lht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,q0n),S2n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,G0n),S2n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),iln(16)),vMt),Att),nbn(hMt)))),a2(n,G0n,q0n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z0n),S2n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),iln(5)),vMt),Att),nbn(hMt)))),a2(n,z0n,q0n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U0n),P2n),"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'."),bdt),gMt),Smt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X0n),P2n),"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),dMt),Ptt),nbn(hMt)))),a2(n,X0n,U0n,Uwt),a2(n,X0n,U0n,Xwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W0n),P2n),"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),dMt),Ptt),nbn(hMt)))),a2(n,W0n,U0n,Vwt),a2(n,W0n,U0n,Qwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V0n),C2n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),idt),gMt),Tht),nbn(hMt)))),a2(n,V0n,U0n,rdt),a2(n,V0n,U0n,cdt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,Q0n),C2n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),mMt),Rnt),nbn(hMt)))),a2(n,Q0n,V0n,Jwt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y0n),"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."),ndt),vMt),Att),nbn(hMt)))),a2(n,Y0n,V0n,tdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J0n),I2n),"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."),vdt),gMt),dmt),nbn(hMt)))),a2(n,J0n,U0n,mdt),a2(n,J0n,U0n,ydt),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,Z0n),I2n),"Valid Indices for Wrapping"),null),mMt),Rnt),nbn(hMt)))),a2(n,Z0n,U0n,ddt),a2(n,Z0n,U0n,gdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n2n),O2n),"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),wMt),ktt),nbn(hMt)))),a2(n,n2n,U0n,sdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t2n),O2n),"Distance Penalty When Improving Cuts"),null),2),dMt),Ptt),nbn(hMt)))),a2(n,t2n,U0n,udt),a2(n,t2n,n2n,!0),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e2n),O2n),"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),wMt),ktt),nbn(hMt)))),a2(n,e2n,U0n,fdt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,i2n),A2n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Abt),gMt),zht),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,r2n),A2n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),Ibt),gMt),uht),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,c2n),$2n),"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."),abt),gMt),Fvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,a2n),$2n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u2n),$2n),"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."),Zlt),gMt),mut),nbn(hMt)))),a2(n,u2n,kZn,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o2n),$2n),"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."),ibt),gMt),wvt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s2n),$2n),"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),dMt),Ptt),nbn(hMt)))),a2(n,s2n,c2n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h2n),$2n),"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),dMt),Ptt),nbn(hMt)))),a2(n,h2n,c2n,null),vWn((new bf,n))},vX(F1n,"LayeredMetaDataProvider",848),wAn(986,1,QYn,bf),MWn.Qe=function(n){vWn(n)},vX(F1n,"LayeredOptions",986),wAn(987,1,{},Cc),MWn.$e=function(){return new Uv},MWn._e=function(n){},vX(F1n,"LayeredOptions/LayeredFactory",987),wAn(1372,1,{}),MWn.a=0,vX(y3n,"ElkSpacings/AbstractSpacingsBuilder",1372),wAn(779,1372,{},uwn),vX(F1n,"LayeredSpacings/LayeredSpacingsBuilder",779),wAn(313,22,{3:1,35:1,22:1,313:1,246:1,234:1},RP),MWn.Kf=function(){return rLn(this)},MWn.Xf=function(){return rLn(this)};var rvt,cvt,avt,uvt,ovt=Ben(F1n,"LayeringStrategy",313,Unt,e9,lF);wAn(378,22,{3:1,35:1,22:1,378:1},KP);var svt,hvt,fvt,lvt,bvt,wvt=Ben(F1n,"LongEdgeOrderingStrategy",378,Unt,E1,bF);wAn(197,22,{3:1,35:1,22:1,197:1},_P);var dvt,gvt,pvt,vvt,mvt,yvt,kvt=Ben(F1n,"NodeFlexibility",197,Unt,k3,wF);wAn(315,22,{3:1,35:1,22:1,315:1,246:1,234:1},FP),MWn.Kf=function(){return DAn(this)},MWn.Xf=function(){return DAn(this)};var jvt,Evt,Tvt,Mvt,Svt,Pvt,Cvt,Ivt,Ovt,Avt=Ben(F1n,"NodePlacementStrategy",315,Unt,$5,yF);wAn(260,22,{3:1,35:1,22:1,260:1},HP);var $vt,Lvt,Nvt,xvt,Dvt=Ben(F1n,"NodePromotionStrategy",260,Unt,Btn,gF);wAn(339,22,{3:1,35:1,22:1,339:1},qP);var Rvt,Kvt,_vt,Fvt=Ben(F1n,"OrderingStrategy",339,Unt,A1,pF);wAn(421,22,{3:1,35:1,22:1,421:1},GP);var Bvt,Hvt,qvt,Gvt,zvt=Ben(F1n,"PortSortingStrategy",421,Unt,UY,vF);wAn(452,22,{3:1,35:1,22:1,452:1},zP);var Uvt,Xvt,Wvt,Vvt,Qvt=Ben(F1n,"PortType",452,Unt,O1,dF);wAn(375,22,{3:1,35:1,22:1,375:1},UP);var Yvt,Jvt,Zvt,nmt=Ben(F1n,"SelfLoopDistributionStrategy",375,Unt,$1,mF);wAn(376,22,{3:1,35:1,22:1,376:1},XP);var tmt,emt,imt,rmt,cmt=Ben(F1n,"SelfLoopOrderingStrategy",376,Unt,BY,kF);wAn(304,1,{304:1},sGn),vX(F1n,"Spacings",304),wAn(336,22,{3:1,35:1,22:1,336:1},WP);var amt,umt,omt,smt,hmt=Ben(F1n,"SplineRoutingMode",336,Unt,N1,jF);wAn(338,22,{3:1,35:1,22:1,338:1},VP);var fmt,lmt,bmt,wmt,dmt=Ben(F1n,"ValidifyStrategy",338,Unt,x1,EF);wAn(377,22,{3:1,35:1,22:1,377:1},QP);var gmt,pmt,vmt,mmt,ymt,kmt,jmt,Emt,Tmt,Mmt,Smt=Ben(F1n,"WrappingStrategy",377,Unt,L1,TF);wAn(1383,1,E3n,wf),MWn.Yf=function(n){return BB(n,37),pmt},MWn.pf=function(n,t){JHn(this,BB(n,37),t)},vX(T3n,"DepthFirstCycleBreaker",1383),wAn(782,1,E3n,KG),MWn.Yf=function(n){return BB(n,37),vmt},MWn.pf=function(n,t){UXn(this,BB(n,37),t)},MWn.Zf=function(n){return BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyCycleBreaker",782),wAn(1386,782,E3n,TI),MWn.Zf=function(n){var t,e,i,r;for(r=null,t=DWn,i=new Wb(n);i.a<i.c.c.length;)Lx(e=BB(n0(i),10),(hWn(),wlt))&&BB(mMn(e,wlt),19).a<t&&(t=BB(mMn(e,wlt),19).a,r=e);return r||BB(xq(n,pvn(this.d,n.c.length)),10)},vX(T3n,"GreedyModelOrderCycleBreaker",1386),wAn(1384,1,E3n,rf),MWn.Yf=function(n){return BB(n,37),mmt},MWn.pf=function(n,t){Iqn(this,BB(n,37),t)},vX(T3n,"InteractiveCycleBreaker",1384),wAn(1385,1,E3n,cf),MWn.Yf=function(n){return BB(n,37),ymt},MWn.pf=function(n,t){Lqn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,vX(T3n,"ModelOrderCycleBreaker",1385),wAn(1389,1,E3n,$M),MWn.Yf=function(n){return BB(n,37),kmt},MWn.pf=function(n,t){JXn(this,BB(n,37),t)},vX(M3n,"CoffmanGrahamLayerer",1389),wAn(1390,1,MYn,Dd),MWn.ue=function(n,t){return BIn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1390),wAn(1391,1,MYn,Rd),MWn.ue=function(n,t){return zG(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"CoffmanGrahamLayerer/lambda$1$Type",1391),wAn(1392,1,E3n,Ic),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),kot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){EUn(this,BB(n,37),t)},vX(M3n,"InteractiveLayerer",1392),wAn(569,1,{569:1},im),MWn.a=0,MWn.c=0,vX(M3n,"InteractiveLayerer/LayerSpan",569),wAn(1388,1,E3n,ef),MWn.Yf=function(n){return BB(n,37),jmt},MWn.pf=function(n,t){qxn(this,BB(n,37),t)},vX(M3n,"LongestPathLayerer",1388),wAn(1395,1,E3n,sf),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){iXn(this,BB(n,37),t)},MWn.a=0,MWn.b=0,MWn.d=0,vX(M3n,"MinWidthLayerer",1395),wAn(1396,1,MYn,Kd),MWn.ue=function(n,t){return dan(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"MinWidthLayerer/MinOutgoingEdgesComparator",1396),wAn(1387,1,E3n,of),MWn.Yf=function(n){return BB(n,37),Mmt},MWn.pf=function(n,t){mGn(this,BB(n,37),t)},vX(M3n,"NetworkSimplexLayerer",1387),wAn(1393,1,E3n,RR),MWn.Yf=function(n){return BB(n,37),dq(dq(dq(new B2,(yMn(),Rat),(lWn(),cot)),Kat,Oot),_at,Iot)},MWn.pf=function(n,t){$zn(this,BB(n,37),t)},MWn.d=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.s=0,MWn.t=0,MWn.u=0,vX(M3n,"StretchWidthLayerer",1393),wAn(1394,1,MYn,Oc),MWn.ue=function(n,t){return R6(BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(M3n,"StretchWidthLayerer/1",1394),wAn(402,1,S3n),MWn.Nf=function(n,t,e,i,r,c){},MWn._f=function(n,t,e){return r_n(this,n,t,e)},MWn.Mf=function(){this.g=x8(DNt,P3n,25,this.d,15,1),this.f=x8(DNt,P3n,25,this.d,15,1)},MWn.Of=function(n,t){this.e[n]=x8(ANt,hQn,25,t[n].length,15,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},MWn.Qf=function(n,t,e,i){BB(xq(i[n][t].j,e),11).p=this.d++},MWn.b=0,MWn.c=0,MWn.d=0,vX(C3n,"AbstractBarycenterPortDistributor",402),wAn(1633,1,MYn,_d),MWn.ue=function(n,t){return qgn(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"AbstractBarycenterPortDistributor/lambda$0$Type",1633),wAn(817,1,N1n,G2),MWn.Nf=function(n,t,e,i,r,c){},MWn.Pf=function(n,t,e){},MWn.Qf=function(n,t,e,i){},MWn.Lf=function(){return!1},MWn.Mf=function(){this.c=this.e.a,this.g=this.f.g},MWn.Of=function(n,t){t[n][0].c.p=n},MWn.Rf=function(){return!1},MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,BB(this,660)):(SQ(),m$(n,this.d)),Ban(this.e,n))},MWn.Sf=function(n,t,e,i){var r,c,a,u,o,s,h;for(t!=Jq(e,n.length)&&(c=n[t-(e?1:-1)],G6(this.f,c,e?(ain(),qvt):(ain(),Hvt))),r=n[t][0],h=!i||r.k==(uSn(),Mut),s=u6(n[t]),this.ag(s,h,!1,e),a=0,o=new Wb(s);o.a<o.c.c.length;)u=BB(n0(o),10),n[t][a++]=u;return!1},MWn.Tf=function(n,t){var e,i,r,c,a;for(c=u6(n[a=Jq(t,n.length)]),this.ag(c,!1,!0,t),e=0,r=new Wb(c);r.a<r.c.c.length;)i=BB(n0(r),10),n[a][e++]=i;return!1},vX(C3n,"BarycenterHeuristic",817),wAn(658,1,{658:1},Bd),MWn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},MWn.b=0,MWn.d=0,MWn.e=!1;var Pmt=vX(C3n,"BarycenterHeuristic/BarycenterState",658);wAn(1802,1,MYn,Fd),MWn.ue=function(n,t){return MEn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"BarycenterHeuristic/lambda$0$Type",1802),wAn(816,1,N1n,UEn),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){this.a[n]=x8(Pmt,{3:1,4:1,5:1,2018:1},658,t[n].length,0,1),this.b[n]=x8(Lmt,{3:1,4:1,5:1,2019:1},233,t[n].length,0,1)},MWn.Pf=function(n,t,e){Dgn(this,e[n][t],!0)},MWn.c=!1,vX(C3n,"ForsterConstraintResolver",816),wAn(233,1,{233:1},DY,uGn),MWn.Ib=function(){var n,t;for((t=new Ck).a+="[",n=0;n<this.d.length;n++)oO(t,$pn(this.d[n])),null!=lL(this.g,this.d[0]).a&&oO(oO((t.a+="<",t),ZI(lL(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=FWn);return(t.a+="]",t).a},MWn.a=0,MWn.c=0,MWn.f=0;var Cmt,Imt,Omt,Amt,$mt,Lmt=vX(C3n,"ForsterConstraintResolver/ConstraintGroup",233);wAn(1797,1,lVn,qd),MWn.td=function(n){Dgn(this.a,BB(n,10),!1)},vX(C3n,"ForsterConstraintResolver/lambda$0$Type",1797),wAn(214,1,{214:1,225:1},CGn),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Mf=function(){this.r=x8(ANt,hQn,25,this.n,15,1)},MWn.Pf=function(n,t,e){var i;(i=e[n][t].e)&&WB(this.b,i)},MWn.Qf=function(n,t,e,i){++this.n},MWn.Ib=function(){return izn(this.e,new Rv)},MWn.g=!1,MWn.i=!1,MWn.n=0,MWn.s=!1,vX(C3n,"GraphInfoHolder",214),wAn(1832,1,N1n,Pc),MWn.Nf=function(n,t,e,i,r,c){},MWn.Of=function(n,t){},MWn.Qf=function(n,t,e,i){},MWn._f=function(n,t,e){return e&&t>0?uZ(this.a,n[t-1],n[t]):!e&&t<n.length-1?uZ(this.a,n[t],n[t+1]):yrn(this.a,n[t],e?(kUn(),CIt):(kUn(),oIt)),bLn(this,n,t,e)},MWn.Mf=function(){this.d=x8(ANt,hQn,25,this.c,15,1),this.a=new QK(this.d)},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},MWn.c=0,vX(C3n,"GreedyPortDistributor",1832),wAn(1401,1,E3n,df),MWn.Yf=function(n){return Xhn(BB(n,37))},MWn.pf=function(n,t){XGn(BB(n,37),t)},vX(C3n,"InteractiveCrossingMinimizer",1401),wAn(1402,1,MYn,Gd),MWn.ue=function(n,t){return Hjn(this,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"InteractiveCrossingMinimizer/1",1402),wAn(507,1,{507:1,123:1,51:1},Ny),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Imt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){P_n(this,BB(n,37),t)},MWn.e=0,vX(C3n,"LayerSweepCrossingMinimizer",507),wAn(1398,1,lVn,zd),MWn.td=function(n){wBn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1398),wAn(1399,1,lVn,Ud),MWn.td=function(n){Ohn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1399),wAn(1400,1,lVn,Xd),MWn.td=function(n){pFn(this.a,BB(n,214))},vX(C3n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1400),wAn(454,22,{3:1,35:1,22:1,454:1},YP);var Nmt,xmt=Ben(C3n,"LayerSweepCrossingMinimizer/CrossMinType",454,Unt,D1,MF);wAn(1397,1,DVn,Ac),MWn.Mb=function(n){return _cn(),0==BB(n,29).a.c.length},vX(C3n,"LayerSweepCrossingMinimizer/lambda$0$Type",1397),wAn(1799,1,N1n,aZ),MWn.Mf=function(){},MWn.Nf=function(n,t,e,i,r,c){},MWn.Qf=function(n,t,e,i){},MWn.Of=function(n,t){t[n][0].c.p=n,this.b[n]=x8(_mt,{3:1,4:1,5:1,1944:1},659,t[n].length,0,1)},MWn.Pf=function(n,t,e){e[n][t].p=t,$X(this.b[n],t,new $c)},vX(C3n,"LayerSweepTypeDecider",1799),wAn(659,1,{659:1},$c),MWn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},MWn.a=0,MWn.b=0,MWn.c=0;var Dmt,Rmt,Kmt,_mt=vX(C3n,"LayerSweepTypeDecider/NodeInfo",659);wAn(1800,1,qYn,Lc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(C3n,"LayerSweepTypeDecider/lambda$0$Type",1800),wAn(1801,1,qYn,Nc),MWn.Lb=function(n){return zN(new m6(BB(n,11).b))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return zN(new m6(BB(n,11).b))},vX(C3n,"LayerSweepTypeDecider/lambda$1$Type",1801),wAn(1833,402,S3n,Dj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,o=new Wb(n.j);o.a<o.c.c.length;)0!=(a=BB(n0(o),11)).e.c.length&&(++i,a.j==(kUn(),sIt)&&++r);for(c=t+r,f=t+i,u=xwn(n,(ain(),Hvt)).Kc();u.Ob();)(a=BB(u.Pb(),11)).j==(kUn(),sIt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,u=xwn(n,(ain(),qvt)).Kc();u.Ob();)++h,s[(a=BB(u.Pb(),11)).p]=t+h;return h;default:throw Hp(new wv)}},vX(C3n,"LayerTotalPortDistributor",1833),wAn(660,817,{660:1,225:1},prn),MWn.ag=function(n,t,e,i){e?sjn(this,n):(Djn(this,n,i),ZGn(this,n,t)),n.c.length>1&&(qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),(HXn(),xdt))))?R$n(n,this.d,this):(SQ(),m$(n,this.d)),qy(TD(mMn(vW((l1(0,n.c.length),BB(n.c[0],10))),xdt)))||Ban(this.e,n))},vX(C3n,"ModelOrderBarycenterHeuristic",660),wAn(1803,1,MYn,Wd),MWn.ue=function(n,t){return KSn(this.a,BB(n,10),BB(t,10))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(C3n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1803),wAn(1403,1,E3n,jf),MWn.Yf=function(n){var t;return BB(n,37),dq(t=kA(Dmt),(yMn(),_at),(lWn(),Bot)),t},MWn.pf=function(n,t){mY((BB(n,37),t))},vX(C3n,"NoCrossingMinimizer",1403),wAn(796,402,S3n,Rj),MWn.$f=function(n,t,e){var i,r,c,a,u,o,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Wb(n.j);h.a<h.c.c.length;)0!=(o=BB(n0(h),11)).e.c.length&&(++r,o.j==(kUn(),sIt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=xwn(n,(ain(),Hvt)).Kc();s.Ob();)(o=BB(s.Pb(),11)).j==(kUn(),sIt)?(f[o.p]=a,a-=i):(f[o.p]=b,b-=i);break;case 2:for(u=0,h=new Wb(n.j);h.a<h.c.c.length;)0==(o=BB(n0(h),11)).g.c.length||++u;for(l=t+(i=1/(u+1)),s=xwn(n,(ain(),qvt)).Kc();s.Ob();)f[(o=BB(s.Pb(),11)).p]=l,l+=i;break;default:throw Hp(new _y("Port type is undefined"))}return 1},vX(C3n,"NodeRelativePortDistributor",796),wAn(807,1,{},Vz,HMn),vX(C3n,"SweepCopy",807),wAn(1798,1,N1n,wdn),MWn.Of=function(n,t){},MWn.Mf=function(){var n;n=x8(ANt,hQn,25,this.f,15,1),this.d=new eg(n),this.a=new QK(n)},MWn.Nf=function(n,t,e,i,r,c){var a;a=BB(xq(c[n][t].j,e),11),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},MWn.Pf=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(uSn(),Iut)},MWn.Qf=function(n,t,e,i){var r;(r=BB(xq(i[n][t].j,e),11)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(kUn(),oIt)?this.b[n]=!0:r.j==CIt&&n>0&&(this.b[n-1]=!0))},MWn.f=0,vX(L1n,"AllCrossingsCounter",1798),wAn(587,1,{},mrn),MWn.b=0,MWn.d=0,vX(L1n,"BinaryIndexedTree",587),wAn(524,1,{},QK),vX(L1n,"CrossingsCounter",524),wAn(1906,1,MYn,Vd),MWn.ue=function(n,t){return Xq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$0$Type",1906),wAn(1907,1,MYn,Qd),MWn.ue=function(n,t){return Wq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$1$Type",1907),wAn(1908,1,MYn,Yd),MWn.ue=function(n,t){return Vq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$2$Type",1908),wAn(1909,1,MYn,Jd),MWn.ue=function(n,t){return Qq(this.a,BB(n,11),BB(t,11))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(L1n,"CrossingsCounter/lambda$3$Type",1909),wAn(1910,1,lVn,Zd),MWn.td=function(n){p7(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$4$Type",1910),wAn(1911,1,DVn,ng),MWn.Mb=function(n){return yI(this.a,BB(n,11))},vX(L1n,"CrossingsCounter/lambda$5$Type",1911),wAn(1912,1,lVn,tg),MWn.td=function(n){mI(this,n)},vX(L1n,"CrossingsCounter/lambda$6$Type",1912),wAn(1913,1,lVn,ZP),MWn.td=function(n){var t;hH(),d3(this.b,(t=this.a,BB(n,11),t))},vX(L1n,"CrossingsCounter/lambda$7$Type",1913),wAn(826,1,qYn,xc),MWn.Lb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return hH(),Lx(BB(n,11),(hWn(),Elt))},vX(L1n,"CrossingsCounter/lambda$8$Type",826),wAn(1905,1,{},eg),vX(L1n,"HyperedgeCrossingsCounter",1905),wAn(467,1,{35:1,467:1},DR),MWn.wd=function(n){return vgn(this,BB(n,467))},MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0;var Fmt=vX(L1n,"HyperedgeCrossingsCounter/Hyperedge",467);wAn(362,1,{35:1,362:1},qV),MWn.wd=function(n){return l$n(this,BB(n,362))},MWn.b=0,MWn.c=0;var Bmt,Hmt,qmt=vX(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner",362);wAn(523,22,{3:1,35:1,22:1,523:1},JP);var Gmt,zmt,Umt,Xmt,Wmt,Vmt=Ben(L1n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",523,Unt,XY,SF);wAn(1405,1,E3n,lf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?zmt:null},MWn.pf=function(n,t){ljn(this,BB(n,37),t)},vX(I3n,"InteractiveNodePlacer",1405),wAn(1406,1,E3n,ff),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Umt:null},MWn.pf=function(n,t){jmn(this,BB(n,37),t)},vX(I3n,"LinearSegmentsNodePlacer",1406),wAn(257,1,{35:1,257:1},rm),MWn.wd=function(n){return uj(this,BB(n,257))},MWn.Fb=function(n){var t;return!!cL(n,257)&&(t=BB(n,257),this.b==t.b)},MWn.Hb=function(){return this.b},MWn.Ib=function(){return"ls"+LMn(this.e)},MWn.a=0,MWn.b=0,MWn.c=-1,MWn.d=-1,MWn.g=0;var Qmt,Ymt=vX(I3n,"LinearSegmentsNodePlacer/LinearSegment",257);wAn(1408,1,E3n,_G),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Qmt:null},MWn.pf=function(n,t){SXn(this,BB(n,37),t)},MWn.b=0,MWn.g=0,vX(I3n,"NetworkSimplexPlacer",1408),wAn(1427,1,MYn,Dc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"NetworkSimplexPlacer/0methodref$compare$Type",1427),wAn(1429,1,MYn,Rc),MWn.ue=function(n,t){return E$(BB(n,19).a,BB(t,19).a)},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(I3n,"NetworkSimplexPlacer/1methodref$compare$Type",1429),wAn(649,1,{649:1},nC);var Jmt=vX(I3n,"NetworkSimplexPlacer/EdgeRep",649);wAn(401,1,{401:1},GV),MWn.b=!1;var Zmt,nyt,tyt,eyt=vX(I3n,"NetworkSimplexPlacer/NodeRep",401);wAn(508,12,{3:1,4:1,20:1,28:1,52:1,12:1,14:1,15:1,54:1,508:1},um),vX(I3n,"NetworkSimplexPlacer/Path",508),wAn(1409,1,{},Kc),MWn.Kb=function(n){return BB(n,17).d.i.k},vX(I3n,"NetworkSimplexPlacer/Path/lambda$0$Type",1409),wAn(1410,1,DVn,_c),MWn.Mb=function(n){return BB(n,267)==(uSn(),Put)},vX(I3n,"NetworkSimplexPlacer/Path/lambda$1$Type",1410),wAn(1411,1,{},Fc),MWn.Kb=function(n){return BB(n,17).d.i},vX(I3n,"NetworkSimplexPlacer/Path/lambda$2$Type",1411),wAn(1412,1,DVn,ig),MWn.Mb=function(n){return HD(tdn(BB(n,10)))},vX(I3n,"NetworkSimplexPlacer/Path/lambda$3$Type",1412),wAn(1413,1,DVn,Bc),MWn.Mb=function(n){return hq(BB(n,11))},vX(I3n,"NetworkSimplexPlacer/lambda$0$Type",1413),wAn(1414,1,lVn,tC),MWn.td=function(n){D$(this.a,this.b,BB(n,11))},vX(I3n,"NetworkSimplexPlacer/lambda$1$Type",1414),wAn(1423,1,lVn,rg),MWn.td=function(n){WCn(this.a,BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$10$Type",1423),wAn(1424,1,{},Hc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$11$Type",1424),wAn(1425,1,lVn,cg),MWn.td=function(n){BDn(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$12$Type",1425),wAn(1426,1,{},qc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(I3n,"NetworkSimplexPlacer/lambda$13$Type",1426),wAn(1428,1,{},Gc),MWn.Kb=function(n){return BZ(),iln(BB(n,121).e)},vX(I3n,"NetworkSimplexPlacer/lambda$15$Type",1428),wAn(1430,1,DVn,zc),MWn.Mb=function(n){return BZ(),BB(n,401).c.k==(uSn(),Cut)},vX(I3n,"NetworkSimplexPlacer/lambda$17$Type",1430),wAn(1431,1,DVn,Uc),MWn.Mb=function(n){return BZ(),BB(n,401).c.j.c.length>1},vX(I3n,"NetworkSimplexPlacer/lambda$18$Type",1431),wAn(1432,1,lVn,zV),MWn.td=function(n){cwn(this.c,this.b,this.d,this.a,BB(n,401))},MWn.c=0,MWn.d=0,vX(I3n,"NetworkSimplexPlacer/lambda$19$Type",1432),wAn(1415,1,{},Xc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$2$Type",1415),wAn(1433,1,lVn,ag),MWn.td=function(n){N$(this.a,BB(n,11))},MWn.a=0,vX(I3n,"NetworkSimplexPlacer/lambda$20$Type",1433),wAn(1434,1,{},Wc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$21$Type",1434),wAn(1435,1,lVn,ug),MWn.td=function(n){dL(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$22$Type",1435),wAn(1436,1,DVn,Vc),MWn.Mb=function(n){return HD(n)},vX(I3n,"NetworkSimplexPlacer/lambda$23$Type",1436),wAn(1437,1,{},Qc),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$24$Type",1437),wAn(1438,1,DVn,og),MWn.Mb=function(n){return EO(this.a,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$25$Type",1438),wAn(1439,1,lVn,eC),MWn.td=function(n){MPn(this.a,this.b,BB(n,10))},vX(I3n,"NetworkSimplexPlacer/lambda$26$Type",1439),wAn(1440,1,DVn,Yc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$27$Type",1440),wAn(1441,1,DVn,Jc),MWn.Mb=function(n){return BZ(),!b5(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$28$Type",1441),wAn(1442,1,{},sg),MWn.Ce=function(n,t){return sL(this.a,BB(n,29),BB(t,29))},vX(I3n,"NetworkSimplexPlacer/lambda$29$Type",1442),wAn(1416,1,{},Zc),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(lbn(BB(n,10)).a.Kc(),new h))))},vX(I3n,"NetworkSimplexPlacer/lambda$3$Type",1416),wAn(1417,1,DVn,na),MWn.Mb=function(n){return BZ(),t2(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$4$Type",1417),wAn(1418,1,lVn,hg),MWn.td=function(n){iBn(this.a,BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$5$Type",1418),wAn(1419,1,{},ta),MWn.Kb=function(n){return BZ(),new Rq(null,new w1(BB(n,29).a,16))},vX(I3n,"NetworkSimplexPlacer/lambda$6$Type",1419),wAn(1420,1,DVn,ea),MWn.Mb=function(n){return BZ(),BB(n,10).k==(uSn(),Cut)},vX(I3n,"NetworkSimplexPlacer/lambda$7$Type",1420),wAn(1421,1,{},ia),MWn.Kb=function(n){return BZ(),new Rq(null,new zU(new oz(ZL(hbn(BB(n,10)).a.Kc(),new h))))},vX(I3n,"NetworkSimplexPlacer/lambda$8$Type",1421),wAn(1422,1,DVn,ra),MWn.Mb=function(n){return BZ(),UH(BB(n,17))},vX(I3n,"NetworkSimplexPlacer/lambda$9$Type",1422),wAn(1404,1,E3n,Cf),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?Zmt:null},MWn.pf=function(n,t){kHn(BB(n,37),t)},vX(I3n,"SimpleNodePlacer",1404),wAn(180,1,{180:1},qKn),MWn.Ib=function(){var n;return n="",this.c==(gJ(),tyt)?n+=aJn:this.c==nyt&&(n+=cJn),this.o==(oZ(),ryt)?n+=pJn:this.o==cyt?n+="UP":n+="BALANCED",n},vX($3n,"BKAlignedLayout",180),wAn(516,22,{3:1,35:1,22:1,516:1},cC);var iyt,ryt,cyt,ayt=Ben($3n,"BKAlignedLayout/HDirection",516,Unt,VY,PF);wAn(515,22,{3:1,35:1,22:1,515:1},rC);var uyt,oyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,vyt,myt,yyt,kyt,jyt,Eyt,Tyt,Myt,Syt=Ben($3n,"BKAlignedLayout/VDirection",515,Unt,QY,CF);wAn(1634,1,{},iC),vX($3n,"BKAligner",1634),wAn(1637,1,{},Jyn),vX($3n,"BKCompactor",1637),wAn(654,1,{654:1},ca),MWn.a=0,vX($3n,"BKCompactor/ClassEdge",654),wAn(458,1,{458:1},cm),MWn.a=null,MWn.b=0,vX($3n,"BKCompactor/ClassNode",458),wAn(1407,1,E3n,jI),MWn.Yf=function(n){return BB(mMn(BB(n,37),(hWn(),Zft)),21).Hc((bDn(),lft))?oyt:null},MWn.pf=function(n,t){rWn(this,BB(n,37),t)},MWn.d=!1,vX($3n,"BKNodePlacer",1407),wAn(1635,1,{},aa),MWn.d=0,vX($3n,"NeighborhoodInformation",1635),wAn(1636,1,MYn,fg),MWn.ue=function(n,t){return Mtn(this,BB(n,46),BB(t,46))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX($3n,"NeighborhoodInformation/NeighborComparator",1636),wAn(808,1,{}),vX($3n,"ThresholdStrategy",808),wAn(1763,808,{},dm),MWn.bg=function(n,t,e){return this.a.o==(oZ(),cyt)?RQn:KQn},MWn.cg=function(){},vX($3n,"ThresholdStrategy/NullThresholdStrategy",1763),wAn(579,1,{579:1},aC),MWn.c=!1,MWn.d=!1,vX($3n,"ThresholdStrategy/Postprocessable",579),wAn(1764,808,{},gm),MWn.bg=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,gJ(),r&&(c=THn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=THn(this,e,!1)),c):n},MWn.cg=function(){for(var n,t,e;0!=this.d.b;)(t=cFn(this,e=BB(PJ(this.d),579))).a&&(n=t.a,(qy(this.a.f[this.a.g[e.b.p].p])||b5(n)||n.c.i.c!=n.d.i.c)&&(b$n(this,e)||rA(this.e,e)));for(;0!=this.e.a.c.length;)b$n(this,BB(thn(this.e),579))},vX($3n,"ThresholdStrategy/SimpleThresholdStrategy",1764),wAn(635,1,{635:1,246:1,234:1},ua),MWn.Kf=function(){return Tan(this)},MWn.Xf=function(){return Tan(this)},vX(L3n,"EdgeRouterFactory",635),wAn(1458,1,E3n,If),MWn.Yf=function(n){return Uxn(BB(n,37))},MWn.pf=function(n,t){DHn(BB(n,37),t)},vX(L3n,"OrthogonalEdgeRouter",1458),wAn(1451,1,E3n,EI),MWn.Yf=function(n){return Ejn(BB(n,37))},MWn.pf=function(n,t){OUn(this,BB(n,37),t)},vX(L3n,"PolylineEdgeRouter",1451),wAn(1452,1,qYn,oa),MWn.Lb=function(n){return Qan(BB(n,10))},MWn.Fb=function(n){return this===n},MWn.Mb=function(n){return Qan(BB(n,10))},vX(L3n,"PolylineEdgeRouter/1",1452),wAn(1809,1,DVn,sa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$0$Type",1809),wAn(1810,1,{},ha),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$1$Type",1810),wAn(1811,1,DVn,fa),MWn.Mb=function(n){return BB(n,129).c==(O6(),Tyt)},vX(N3n,"HyperEdgeCycleDetector/lambda$2$Type",1811),wAn(1812,1,{},la),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$3$Type",1812),wAn(1813,1,{},ba),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$4$Type",1813),wAn(1814,1,{},wa),MWn.Ge=function(n){return BB(n,129).d},vX(N3n,"HyperEdgeCycleDetector/lambda$5$Type",1814),wAn(112,1,{35:1,112:1},Fan),MWn.wd=function(n){return oj(this,BB(n,112))},MWn.Fb=function(n){var t;return!!cL(n,112)&&(t=BB(n,112),this.g==t.g)},MWn.Hb=function(){return this.g},MWn.Ib=function(){var n,t,e,i;for(n=new lN("{"),i=new Wb(this.n);i.a<i.c.c.length;)null==(t=gyn((e=BB(n0(i),11)).i))&&(t="n"+AK(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},MWn.a=0,MWn.b=0,MWn.c=NaN,MWn.d=0,MWn.g=0,MWn.i=0,MWn.o=0,MWn.s=NaN,vX(N3n,"HyperEdgeSegment",112),wAn(129,1,{129:1},zZ),MWn.Ib=function(){return this.a+"->"+this.b+" ("+wx(this.c)+")"},MWn.d=0,vX(N3n,"HyperEdgeSegmentDependency",129),wAn(520,22,{3:1,35:1,22:1,520:1},uC);var Pyt,Cyt,Iyt,Oyt,Ayt,$yt,Lyt,Nyt,xyt=Ben(N3n,"HyperEdgeSegmentDependency/DependencyType",520,Unt,WY,IF);wAn(1815,1,{},lg),vX(N3n,"HyperEdgeSegmentSplitter",1815),wAn(1816,1,{},zj),MWn.a=0,MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/AreaRating",1816),wAn(329,1,{329:1},kB),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"HyperEdgeSegmentSplitter/FreeArea",329),wAn(1817,1,MYn,ja),MWn.ue=function(n,t){return OK(BB(n,112),BB(t,112))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(N3n,"HyperEdgeSegmentSplitter/lambda$0$Type",1817),wAn(1818,1,lVn,XV),MWn.td=function(n){n4(this.a,this.d,this.c,this.b,BB(n,112))},MWn.b=0,vX(N3n,"HyperEdgeSegmentSplitter/lambda$1$Type",1818),wAn(1819,1,{},Ea),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$2$Type",1819),wAn(1820,1,{},Ta),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$3$Type",1820),wAn(1821,1,{},Ma),MWn.Fe=function(n){return Gy(MD(n))},vX(N3n,"HyperEdgeSegmentSplitter/lambda$4$Type",1821),wAn(655,1,{},fX),MWn.a=0,MWn.b=0,MWn.c=0,vX(N3n,"OrthogonalRoutingGenerator",655),wAn(1638,1,{},Sa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).e,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$0$Type",1638),wAn(1639,1,{},Pa),MWn.Kb=function(n){return new Rq(null,new w1(BB(n,112).j,16))},vX(N3n,"OrthogonalRoutingGenerator/lambda$1$Type",1639),wAn(661,1,{}),vX(x3n,"BaseRoutingDirectionStrategy",661),wAn(1807,661,{},pm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xC(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xC(w,a=t+b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xC(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),SIt},MWn.gg=function(){return kUn(),sIt},vX(x3n,"NorthToSouthRoutingStrategy",1807),wAn(1808,661,{},vm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).a,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(l,a=f),DH(u.a,r),F_n(this,u,c,r,!1),(b=n.r)&&(r=new xC(w=Gy(MD(Dpn(b.e,0))),a),DH(u.a,r),F_n(this,u,c,r,!1),c=b,r=new xC(w,a=t-b.o*i),DH(u.a,r),F_n(this,u,c,r,!1)),r=new xC(g,a),DH(u.a,r),F_n(this,u,c,r,!1)))},MWn.eg=function(n){return n.i.n.a+n.n.a+n.a.a},MWn.fg=function(){return kUn(),sIt},MWn.gg=function(){return kUn(),SIt},vX(x3n,"SouthToNorthRoutingStrategy",1808),wAn(1806,661,{},mm),MWn.dg=function(n,t,i){var r,c,a,u,o,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Wb(n.n);h.a<h.c.c.length;)for(s=BB(n0(h),11),l=Aon(Pun(Gk(PMt,1),sVn,8,0,[s.i.n,s.n,s.a])).b,o=new Wb(s.g);o.a<o.c.c.length;)b5(u=BB(n0(o),17))||(d=u.d,g=Aon(Pun(Gk(PMt,1),sVn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>lZn&&(c=n,r=new xC(a=f,l),DH(u.a,r),F_n(this,u,c,r,!0),(b=n.r)&&(r=new xC(a,w=Gy(MD(Dpn(b.e,0)))),DH(u.a,r),F_n(this,u,c,r,!0),c=b,r=new xC(a=t+b.o*i,w),DH(u.a,r),F_n(this,u,c,r,!0)),r=new xC(a,g),DH(u.a,r),F_n(this,u,c,r,!0)))},MWn.eg=function(n){return n.i.n.b+n.n.b+n.a.b},MWn.fg=function(){return kUn(),oIt},MWn.gg=function(){return kUn(),CIt},vX(x3n,"WestToEastRoutingStrategy",1806),wAn(813,1,{},oBn),MWn.Ib=function(){return LMn(this.a)},MWn.b=0,MWn.c=!1,MWn.d=!1,MWn.f=0,vX(R3n,"NubSpline",813),wAn(407,1,{407:1},Exn,wJ),vX(R3n,"NubSpline/PolarCP",407),wAn(1453,1,E3n,hyn),MWn.Yf=function(n){return rTn(BB(n,37))},MWn.pf=function(n,t){cXn(this,BB(n,37),t)},vX(R3n,"SplineEdgeRouter",1453),wAn(268,1,{268:1},S6),MWn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},MWn.c=0,vX(R3n,"SplineEdgeRouter/Dependency",268),wAn(455,22,{3:1,35:1,22:1,455:1},oC);var Dyt,Ryt,Kyt,_yt,Fyt,Byt=Ben(R3n,"SplineEdgeRouter/SideToProcess",455,Unt,YY,OF);wAn(1454,1,DVn,ya),MWn.Mb=function(n){return gxn(),!BB(n,128).o},vX(R3n,"SplineEdgeRouter/lambda$0$Type",1454),wAn(1455,1,{},ma),MWn.Ge=function(n){return gxn(),BB(n,128).v+1},vX(R3n,"SplineEdgeRouter/lambda$1$Type",1455),wAn(1456,1,lVn,sC),MWn.td=function(n){iq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$2$Type",1456),wAn(1457,1,lVn,hC),MWn.td=function(n){rq(this.a,this.b,BB(n,46))},vX(R3n,"SplineEdgeRouter/lambda$3$Type",1457),wAn(128,1,{35:1,128:1},tCn,hqn),MWn.wd=function(n){return sj(this,BB(n,128))},MWn.b=0,MWn.e=!1,MWn.f=0,MWn.g=0,MWn.j=!1,MWn.k=!1,MWn.n=0,MWn.o=!1,MWn.p=!1,MWn.q=!1,MWn.s=0,MWn.u=0,MWn.v=0,MWn.F=0,vX(R3n,"SplineSegment",128),wAn(459,1,{459:1},ka),MWn.a=0,MWn.b=!1,MWn.c=!1,MWn.d=!1,MWn.e=!1,MWn.f=0,vX(R3n,"SplineSegment/EdgeInformation",459),wAn(1234,1,{},da),vX(H3n,iZn,1234),wAn(1235,1,MYn,ga),MWn.ue=function(n,t){return IIn(BB(n,135),BB(t,135))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H3n,rZn,1235),wAn(1233,1,{},AE),vX(H3n,"MrTree",1233),wAn(393,22,{3:1,35:1,22:1,393:1,246:1,234:1},fC),MWn.Kf=function(){return AIn(this)},MWn.Xf=function(){return AIn(this)};var Hyt,qyt=Ben(H3n,"TreeLayoutPhases",393,Unt,j3,AF);wAn(1130,209,NJn,_R),MWn.Ze=function(n,t){var e,i,r,c,a,u;for(qy(TD(ZAn(n,(CAn(),Ckt))))||jJ(new Tw((GM(),new Dy(n)))),qan(a=new P6,n),hon(a,(qqn(),skt),n),v_n(n,a,u=new xp),W_n(n,a,u),c=a,i=new Wb(r=x_n(this.a,c));i.a<i.c.c.length;)e=BB(n0(i),135),WEn(this.b,e,mcn(t,1/r.c.length));Izn(c=tWn(r))},vX(H3n,"TreeLayoutProvider",1130),wAn(1847,1,pVn,pa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/1",1847),wAn(1848,1,pVn,va),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(H3n,"TreeUtil/2",1848),wAn(502,134,{3:1,502:1,94:1,134:1}),MWn.g=0,vX(q3n,"TGraphElement",502),wAn(188,502,{3:1,188:1,502:1,94:1,134:1},UQ),MWn.Ib=function(){return this.b&&this.c?g0(this.b)+"->"+g0(this.c):"e_"+nsn(this)},vX(q3n,"TEdge",188),wAn(135,134,{3:1,135:1,94:1,134:1},P6),MWn.Ib=function(){var n,t,e,i,r;for(r=null,i=spn(this.b,0);i.b!=i.d.c;)r+=(null==(e=BB(b3(i),86)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=spn(this.a,0);t.b!=t.d.c;)r+=((n=BB(b3(t),188)).b&&n.c?g0(n.b)+"->"+g0(n.c):"e_"+nsn(n))+"\n";return r};var Gyt=vX(q3n,"TGraph",135);wAn(633,502,{3:1,502:1,633:1,94:1,134:1}),vX(q3n,"TShape",633),wAn(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},csn),MWn.Ib=function(){return g0(this)};var zyt,Uyt,Xyt,Wyt,Vyt,Qyt,Yyt=vX(q3n,"TNode",86);wAn(255,1,pVn,bg),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return new wg(spn(this.a.d,0))},vX(q3n,"TNode/2",255),wAn(358,1,QWn,wg),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(b3(this.a),188).c},MWn.Ob=function(){return EE(this.a)},MWn.Qb=function(){mtn(this.a)},vX(q3n,"TNode/2/1",358),wAn(1840,1,n1n,KR),MWn.pf=function(n,t){xFn(this,BB(n,135),t)},vX(G3n,"FanProcessor",1840),wAn(327,22,{3:1,35:1,22:1,327:1,234:1},lC),MWn.Kf=function(){switch(this.g){case 0:return new Qm;case 1:return new KR;case 2:return new Oa;case 3:return new Ca;case 4:return new $a;case 5:return new La;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var Jyt,Zyt,nkt,tkt,ekt,ikt,rkt,ckt,akt,ukt,okt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,vkt,mkt,ykt,kkt,jkt,Ekt,Tkt,Mkt,Skt,Pkt,Ckt,Ikt,Okt,Akt,$kt,Lkt,Nkt,xkt,Dkt,Rkt,Kkt,_kt=Ben(G3n,S1n,327,Unt,r9,$F);wAn(1843,1,n1n,Ca),MWn.pf=function(n,t){u$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"LevelHeightProcessor",1843),wAn(1844,1,pVn,Ia),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"LevelHeightProcessor/1",1844),wAn(1841,1,n1n,Oa),MWn.pf=function(n,t){QPn(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NeighborsProcessor",1841),wAn(1842,1,pVn,Aa),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return SQ(),LT(),bet},vX(G3n,"NeighborsProcessor/1",1842),wAn(1845,1,n1n,$a),MWn.pf=function(n,t){a$n(this,BB(n,135),t)},MWn.a=0,vX(G3n,"NodePositionProcessor",1845),wAn(1839,1,n1n,Qm),MWn.pf=function(n,t){ZHn(this,BB(n,135))},vX(G3n,"RootProcessor",1839),wAn(1846,1,n1n,La),MWn.pf=function(n,t){dln(BB(n,135))},vX(G3n,"Untreeifyer",1846),wAn(851,1,QYn,Pf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X3n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),kkt),(PPn(),gMt)),qkt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W3n),""),"Search Order"),"Which search order to use when computing a spanning tree."),mkt),gMt),Jkt),nbn(hMt)))),KGn((new Sf,n))},vX(V3n,"MrTreeMetaDataProvider",851),wAn(994,1,QYn,Sf),MWn.Qe=function(n){KGn(n)},vX(V3n,"MrTreeOptions",994),wAn(995,1,{},Na),MWn.$e=function(){return new _R},MWn._e=function(n){},vX(V3n,"MrTreeOptions/MrtreeFactory",995),wAn(480,22,{3:1,35:1,22:1,480:1},bC);var Fkt,Bkt,Hkt,qkt=Ben(V3n,"OrderWeighting",480,Unt,ZY,LF);wAn(425,22,{3:1,35:1,22:1,425:1},wC);var Gkt,zkt,Ukt,Xkt,Wkt,Vkt,Qkt,Ykt,Jkt=Ben(V3n,"TreeifyingOrder",425,Unt,JY,xF);wAn(1459,1,E3n,pf),MWn.Yf=function(n){return BB(n,135),zkt},MWn.pf=function(n,t){ycn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),wAn(1460,1,E3n,vf),MWn.Yf=function(n){return BB(n,135),Ukt},MWn.pf=function(n,t){fCn(this,BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),wAn(1461,1,E3n,gf),MWn.Yf=function(n){return BB(n,135),Xkt},MWn.pf=function(n,t){nRn(this,BB(n,135),t)},MWn.a=0,vX("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),wAn(1462,1,E3n,mf),MWn.Yf=function(n){return BB(n,135),Wkt},MWn.pf=function(n,t){xkn(BB(n,135),t)},vX("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462),wAn(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},dC),MWn.Kf=function(){return bwn(this)},MWn.Xf=function(){return bwn(this)};var Zkt,njt,tjt,ejt,ijt=Ben(J3n,"RadialLayoutPhases",495,Unt,nJ,NF);wAn(1131,209,NJn,OE),MWn.Ze=function(n,t){var e,i,r;if(OTn(t,"Radial layout",ECn(this,n).c.length),qy(TD(ZAn(n,(Uyn(),Ajt))))||jJ(new Tw((GM(),new Dy(n)))),r=uTn(n),Ypn(n,(wD(),Vkt),r),!r)throw Hp(new _y("The given graph is not a tree!"));for(0==(e=Gy(MD(ZAn(n,Djt))))&&(e=fIn(n)),Ypn(n,Djt,e),i=new Wb(ECn(this,n));i.a<i.c.c.length;)BB(n0(i),51).pf(n,mcn(t,1));HSn(t)},vX(J3n,"RadialLayoutProvider",1131),wAn(549,1,MYn,IE),MWn.ue=function(n,t){return DRn(this.a,this.b,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=0,MWn.b=0,vX(J3n,"RadialUtil/lambda$0$Type",549),wAn(1375,1,n1n,Da),MWn.pf=function(n,t){dGn(BB(n,33),t)},vX(t4n,"CalculateGraphSize",1375),wAn(442,22,{3:1,35:1,22:1,442:1,234:1},gC),MWn.Kf=function(){switch(this.g){case 0:return new Ba;case 1:return new xa;case 2:return new Da;default:throw Hp(new _y(M1n+(null!=this.f?this.f:""+this.g)))}};var rjt,cjt,ajt,ujt=Ben(t4n,S1n,442,Unt,R1,DF);wAn(645,1,{}),MWn.e=1,MWn.g=0,vX(e4n,"AbstractRadiusExtensionCompaction",645),wAn(1772,645,{},gD),MWn.hg=function(n){var t,e,i,r,c,a,u,o,s;for(this.c=BB(ZAn(n,(wD(),Vkt)),33),eb(this,this.c),this.d=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(o=BB(ZAn(n,Mjt),19))&&tb(this,o.a),ib(this,(kW(u=MD(ZAn(n,(sWn(),LPt)))),u)),s=wDn(this.c),this.d&&this.d.lg(s),vKn(this,s),a=new Jy(Pun(Gk(UOt,1),i4n,33,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new Jy(Pun(Gk(UOt,1),i4n,33,0,[(l1(t,s.c.length),BB(s.c[t],33))])),c=t<s.c.length-1?(l1(t+1,s.c.length),BB(s.c[t+1],33)):(l1(0,s.c.length),BB(s.c[0],33)),i=0==t?BB(xq(s,s.c.length-1),33):(l1(t-1,s.c.length),BB(s.c[t-1],33)),ZTn(this,(l1(t,s.c.length),BB(s.c[t],33),a),i,c,r)},vX(e4n,"AnnulusWedgeCompaction",1772),wAn(1374,1,n1n,xa),MWn.pf=function(n,t){bjn(BB(n,33),t)},vX(e4n,"GeneralCompactor",1374),wAn(1771,645,{},Ra),MWn.hg=function(n){var t,e,i,r;e=BB(ZAn(n,(wD(),Vkt)),33),this.f=e,this.b=Evn(BB(ZAn(n,(Uyn(),Rjt)),293)),(r=BB(ZAn(n,Mjt),19))&&tb(this,r.a),ib(this,(kW(i=MD(ZAn(n,(sWn(),LPt)))),i)),t=wDn(e),this.b&&this.b.lg(t),vPn(this,t)},MWn.a=0,vX(e4n,"RadialCompaction",1771),wAn(1779,1,{},Ka),MWn.ig=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Wb(a=wDn(n));c.a<c.c.c.length;)for(r=BB(n0(c),33),e=++i;e<a.c.length;e++)YFn(this,r,(l1(e,a.c.length),BB(a.c[e],33)))&&(t+=1);return t},vX(r4n,"CrossingMinimizationPosition",1779),wAn(1777,1,{},_a),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f,l,b,w,d;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),f=(o=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+o.g/2,l=o.j+o.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new Gj).a=f-c,b.b=l-a,Ukn(u=new xC(b.a,b.b),n.g,n.f),b.a-=u.a,b.b-=u.b,c=f-b.a,a=l-b.b,Ukn(s=new xC(b.a,b.b),o.g,o.f),b.a-=s.a,b.b-=s.b,w=(f=c+b.a)-c,d=(l=a+b.b)-a,r+=e.Math.sqrt(w*w+d*d);return r},vX(r4n,"EdgeLengthOptimization",1777),wAn(1778,1,{},Fa),MWn.ig=function(n){var t,i,r,c,a,u,o,s,f;for(r=0,i=new oz(ZL(dLn(n).a.Kc(),new h));dAn(i);)t=BB(U5(i),79),u=(a=PTn(BB(Wtn((!t.c&&(t.c=new hK(KOt,t,5,8)),t.c),0),82))).i+a.g/2,o=a.j+a.f/2,c=BB(ZAn(a,(sWn(),gPt)),8),s=u-(n.i+c.a+n.g/2),f=o-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},vX(r4n,"EdgeLengthPositionOptimization",1778),wAn(1373,645,n1n,Ba),MWn.pf=function(n,t){fLn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1373),wAn(426,22,{3:1,35:1,22:1,426:1},pC);var ojt,sjt,hjt,fjt,ljt=Ben(a4n,"AnnulusWedgeCriteria",426,Unt,tJ,RF);wAn(380,22,{3:1,35:1,22:1,380:1},vC);var bjt,wjt,djt,gjt,pjt,vjt,mjt,yjt,kjt,jjt,Ejt,Tjt,Mjt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,$jt,Ljt,Njt,xjt,Djt,Rjt,Kjt,_jt,Fjt,Bjt,Hjt,qjt,Gjt=Ben(a4n,FJn,380,Unt,K1,KF);wAn(852,1,QYn,yf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u4n),""),"Order ID"),"The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly."),iln(0)),(PPn(),vMt)),Att),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o4n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s4n),""),"Compaction"),"With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately."),gjt),gMt),Gjt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,h4n),""),"Compaction Step Size"),"Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration."),iln(1)),vMt),Att),nbn(hMt)))),a2(n,h4n,s4n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f4n),""),"Sorter"),"Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates."),jjt),gMt),Yjt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l4n),""),"Annulus Wedge Criteria"),"Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals."),Tjt),gMt),ljt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b4n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vjt),gMt),Vjt),nbn(hMt)))),tUn((new kf,n))},vX(a4n,"RadialMetaDataProvider",852),wAn(996,1,QYn,kf),MWn.Qe=function(n){tUn(n)},vX(a4n,"RadialOptions",996),wAn(997,1,{},Ha),MWn.$e=function(){return new OE},MWn._e=function(n){},vX(a4n,"RadialOptions/RadialFactory",997),wAn(340,22,{3:1,35:1,22:1,340:1},mC);var zjt,Ujt,Xjt,Wjt,Vjt=Ben(a4n,"RadialTranslationStrategy",340,Unt,E3,_F);wAn(293,22,{3:1,35:1,22:1,293:1},yC);var Qjt,Yjt=Ben(a4n,"SortingStrategy",293,Unt,F1,FF);wAn(1449,1,E3n,qa),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){SLn(this,BB(n,33),t)},MWn.c=0,vX("org.eclipse.elk.alg.radial.p1position","EadesRadial",1449),wAn(1775,1,{},Ga),MWn.jg=function(n){return Upn(n)},vX(d4n,"AnnulusWedgeByLeafs",1775),wAn(1776,1,{},za),MWn.jg=function(n){return VEn(this,n)},vX(d4n,"AnnulusWedgeByNodeSpace",1776),wAn(1450,1,E3n,Ua),MWn.Yf=function(n){return BB(n,33),null},MWn.pf=function(n,t){bEn(this,BB(n,33),t)},vX("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1450),wAn(811,1,{},Jm),MWn.kg=function(n){},MWn.lg=function(n){nv(this,n)},vX(g4n,"IDSorter",811),wAn(1774,1,MYn,Xa),MWn.ue=function(n,t){return Qrn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(g4n,"IDSorter/lambda$0$Type",1774),wAn(1773,1,{},Arn),MWn.kg=function(n){c2(this,n)},MWn.lg=function(n){n.dc()||(this.e||c2(this,nG(BB(n.Xb(0),33))),nv(this.e,n))},vX(g4n,"PolarCoordinateSorter",1773),wAn(1136,209,NJn,Wa),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,h,f,l,b,w,d,g,p,v,m,y,k,j,E,T;if(OTn(t,"Rectangle Packing",1),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),i=Gy(MD(ZAn(n,(W$n(),lEt)))),w=BB(ZAn(n,PEt),381),p=qy(TD(ZAn(n,yEt))),y=qy(TD(ZAn(n,SEt))),f=qy(TD(ZAn(n,gEt))),k=BB(ZAn(n,CEt),116),m=Gy(MD(ZAn(n,$Et))),r=qy(TD(ZAn(n,AEt))),l=qy(TD(ZAn(n,pEt))),g=qy(TD(ZAn(n,vEt))),T=Gy(MD(ZAn(n,LEt))),!n.a&&(n.a=new eU(UOt,n,10,11)),Trn(E=n.a),g){for(b=new Np,o=new AL(E);o.e!=o.i.gc();)P8(a=BB(kpn(o),33),dEt)&&(b.c[b.c.length]=a);for(s=new Wb(b);s.a<s.c.c.length;)snn(E,a=BB(n0(s),33));for(SQ(),m$(b,new Va),h=new Wb(b);h.a<h.c.c.length;)a=BB(n0(h),33),j=BB(ZAn(a,dEt),19).a,sln(E,j=e.Math.min(j,E.i),a);for(d=0,u=new AL(E);u.e!=u.i.gc();)Ypn(a=BB(kpn(u),33),wEt,iln(d)),++d}(v=XPn(n)).a-=k.b+k.c,v.b-=k.d+k.a,v.a,T<0||T<v.a?(c=OKn(new jB(i,w,p),E,m,k),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt))):c=new eq(i,T,0,(YLn(),_Et)),v.a+=k.b+k.c,v.b+=k.d+k.a,y||(Trn(E),c=kzn(new m3(i,f,l,r,m),E,e.Math.max(v.a,c.c),v,t,n,k)),pan(E,k),KUn(n,c.c+(k.b+k.c),c.b+(k.d+k.a),!1,!0),qy(TD(ZAn(n,MEt)))||jJ(new Tw((GM(),new Dy(n)))),t.n&&t.n&&n&&y0(t,o2(n),(Bsn(),uOt)),HSn(t)},vX(y4n,"RectPackingLayoutProvider",1136),wAn(1137,1,MYn,Va),MWn.ue=function(n,t){return wsn(BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y4n,"RectPackingLayoutProvider/lambda$0$Type",1137),wAn(1256,1,{},jB),MWn.a=0,MWn.c=!1,vX(k4n,"AreaApproximation",1256);var Jjt,Zjt,nEt,tEt=bq(k4n,"BestCandidateFilter");wAn(638,1,{526:1},Qa),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=RQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.min(a,(u.c+(i.b+i.c))*(u.b+(i.d+i.a)));for(c=new Wb(n);c.a<c.c.c.length;)((r=BB(n0(c),220)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&(s.c[s.c.length]=r);return s},vX(k4n,"AreaFilter",638),wAn(639,1,{526:1},Ya),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(o=new Np,s=RQn,u=new Wb(n);u.a<u.c.c.length;)a=BB(n0(u),220),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Wb(n);c.a<c.c.c.length;)r=BB(n0(c),220),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&(o.c[o.c.length]=r);return o},vX(k4n,"AspectRatioFilter",639),wAn(637,1,{526:1},Ja),MWn.mg=function(n,t,i){var r,c,a,u,o,s;for(s=new Np,a=KQn,o=new Wb(n);o.a<o.c.c.length;)u=BB(n0(o),220),a=e.Math.max(a,Yq(u.c+(i.b+i.c),u.b+(i.d+i.a),u.a));for(c=new Wb(n);c.a<c.c.c.length;)Yq((r=BB(n0(c),220)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&(s.c[s.c.length]=r);return s},vX(k4n,"ScaleMeasureFilter",637),wAn(381,22,{3:1,35:1,22:1,381:1},kC);var eEt,iEt,rEt,cEt,aEt,uEt,oEt,sEt,hEt,fEt,lEt,bEt,wEt,dEt,gEt,pEt,vEt,mEt,yEt,kEt,jEt,EEt,TEt,MEt,SEt,PEt,CEt,IEt,OEt,AEt,$Et,LEt,NEt=Ben(j4n,"OptimizationGoal",381,Unt,_1,BF);wAn(856,1,QYn,Of),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E4n),""),"Optimization Goal"),"Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored."),sEt),(PPn(),gMt)),NEt),nbn((rpn(),sMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T4n),""),"Shift Last Placed."),"When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces."),(hN(),!0)),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M4n),""),"Current position of a node in the order of nodes"),"The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,S4n),""),"Desired index of node"),"The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position."),iln(-1)),vMt),Att),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P4n),""),"Only Area Approximation"),"If enabled only the width approximation step is executed and the nodes are placed accordingly. The nodes are layouted according to the packingStrategy. If set to true not expansion of nodes is taking place."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,C4n),""),"Compact Rows"),"Enables compaction. Compacts blocks if they do not use the full height of the row. This option allows to have a smaller drawing. If this option is disabled all nodes are placed next to each other in rows."),!0),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,I4n),""),"Fit Aspect Ratio"),"Expands nodes if expandNodes is true to fit the aspect ratio instead of only in their bounds. The option is only useful if the used packingStrategy is ASPECT_RATIO_DRIVEN, otherwise this may result in unreasonable ndoe expansion."),!1),wMt),ktt),nbn(sMt)))),a2(n,I4n,A4n,null),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O4n),""),"Target Width"),"Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding."),-1),dMt),Ptt),nbn(sMt)))),NXn((new Af,n))},vX(j4n,"RectPackingMetaDataProvider",856),wAn(1004,1,QYn,Af),MWn.Qe=function(n){NXn(n)},vX(j4n,"RectPackingOptions",1004),wAn(1005,1,{},Za),MWn.$e=function(){return new Wa},MWn._e=function(n){},vX(j4n,"RectPackingOptions/RectpackingFactory",1005),wAn(1257,1,{},m3),MWn.a=0,MWn.b=!1,MWn.c=0,MWn.d=0,MWn.e=!1,MWn.f=!1,MWn.g=0,vX("org.eclipse.elk.alg.rectpacking.seconditeration","RowFillingAndCompaction",1257),wAn(187,1,{187:1},asn),MWn.a=0,MWn.c=!1,MWn.d=0,MWn.e=0,MWn.f=0,MWn.g=0,MWn.i=0,MWn.k=!1,MWn.o=RQn,MWn.p=RQn,MWn.r=0,MWn.s=0,MWn.t=0,vX(L4n,"Block",187),wAn(211,1,{211:1},RJ),MWn.a=0,MWn.b=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockRow",211),wAn(443,1,{443:1},KJ),MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=0,vX(L4n,"BlockStack",443),wAn(220,1,{220:1},eq,awn),MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0;var xEt,DEt,REt,KEt,_Et,FEt=vX(L4n,"DrawingData",220);wAn(355,22,{3:1,35:1,22:1,355:1},jC);var BEt,HEt,qEt,GEt,zEt=Ben(L4n,"DrawingDataDescriptor",355,Unt,N5,HF);wAn(200,1,{200:1},x0),MWn.b=0,MWn.c=0,MWn.e=0,MWn.f=0,vX(L4n,"RectRow",200),wAn(756,1,{},Ehn),MWn.j=0,vX(x4n,g1n,756),wAn(1245,1,{},nu),MWn.Je=function(n){return W8(n.a,n.b)},vX(x4n,p1n,1245),wAn(1246,1,{},dg),MWn.Je=function(n){return p6(this.a,n)},vX(x4n,v1n,1246),wAn(1247,1,{},gg),MWn.Je=function(n){return Opn(this.a,n)},vX(x4n,m1n,1247),wAn(1248,1,{},pg),MWn.Je=function(n){return uon(this.a,n)},vX(x4n,"ElkGraphImporter/lambda$3$Type",1248),wAn(1249,1,{},vg),MWn.Je=function(n){return iOn(this.a,n)},vX(x4n,y1n,1249),wAn(1133,209,NJn,$E),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h,f;for(P8(n,(MMn(),kTt))&&(f=SD(ZAn(n,(Bvn(),qTt))),(c=XRn(cin(),f))&&BB(sJ(c.f),209).Ze(n,mcn(t,1))),Ypn(n,gTt,($6(),ZEt)),Ypn(n,pTt,($Sn(),cTt)),Ypn(n,vTt,(Lun(),WTt)),a=BB(ZAn(n,(Bvn(),_Tt)),19).a,OTn(t,"Overlap removal",1),qy(TD(ZAn(n,KTt))),o=new mg(u=new Rv),e=GXn(i=new Ehn,n),s=!0,r=0;r<a&&s;){if(qy(TD(ZAn(n,FTt)))){if(u.a.$b(),HPn(new I$(o),e.i),0==u.a.gc())break;e.e=u}for(h2(this.b),CU(this.b,(Pbn(),HEt),(OM(),GTt)),CU(this.b,qEt,e.g),CU(this.b,GEt,(IM(),QEt)),this.a=$qn(this.b,e),h=new Wb(this.a);h.a<h.c.c.length;)BB(n0(h),51).pf(e,mcn(t,1));cjn(i,e),s=qy(TD(mMn(e,(Xcn(),Yrt)))),++r}DGn(i,e),HSn(t)},vX(x4n,"OverlapRemovalLayoutProvider",1133),wAn(1134,1,{},mg),vX(x4n,"OverlapRemovalLayoutProvider/lambda$0$Type",1134),wAn(437,22,{3:1,35:1,22:1,437:1},EC);var UEt,XEt,WEt=Ben(x4n,"SPOrEPhases",437,Unt,B1,qF);wAn(1255,1,{},LE),vX(x4n,"ShrinkTree",1255),wAn(1135,209,NJn,Zm),MWn.Ze=function(n,t){var e,i,r,c;P8(n,(MMn(),kTt))&&(c=SD(ZAn(n,kTt)),(r=XRn(cin(),c))&&BB(sJ(r.f),209).Ze(n,mcn(t,1))),e=GXn(i=new Ehn,n),$Ln(this.a,e,mcn(t,1)),DGn(i,e)},vX(x4n,"ShrinkTreeLayoutProvider",1135),wAn(300,134,{3:1,300:1,94:1,134:1},DJ),MWn.c=!1,vX("org.eclipse.elk.alg.spore.graph","Graph",300),wAn(482,22,{3:1,35:1,22:1,482:1,246:1,234:1},LM),MWn.Kf=function(){return esn(this)},MWn.Xf=function(){return esn(this)};var VEt,QEt,YEt=Ben(D4n,FJn,482,Unt,KV,GF);wAn(551,22,{3:1,35:1,22:1,551:1,246:1,234:1},vD),MWn.Kf=function(){return new ru},MWn.Xf=function(){return new ru};var JEt,ZEt,nTt,tTt=Ben(D4n,"OverlapRemovalStrategy",551,Unt,_V,zF);wAn(430,22,{3:1,35:1,22:1,430:1},TC);var eTt,iTt,rTt,cTt,aTt,uTt,oTt=Ben(D4n,"RootSelection",430,Unt,iJ,UF);wAn(316,22,{3:1,35:1,22:1,316:1},MC);var sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,vTt,mTt,yTt,kTt,jTt,ETt,TTt,MTt,STt,PTt,CTt,ITt,OTt,ATt,$Tt,LTt,NTt,xTt,DTt,RTt,KTt,_Tt,FTt,BTt,HTt,qTt,GTt,zTt=Ben(D4n,"SpanningTreeCostFunction",316,Unt,A5,XF);wAn(1002,1,QYn,Ef),MWn.Qe=function(n){yHn(n)},vX(D4n,"SporeCompactionOptions",1002),wAn(1003,1,{},tu),MWn.$e=function(){return new Zm},MWn._e=function(n){},vX(D4n,"SporeCompactionOptions/SporeCompactionFactory",1003),wAn(855,1,QYn,Tf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,K4n),""),"Underlying Layout Algorithm"),"A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,q4n),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),DTt),gMt),VTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_4n),W4n),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),NTt),gMt),YTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F4n),W4n),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),$Tt),gMt),zTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B4n),W4n),"Root node for spanning tree construction"),"The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen."),null),yMt),Qtt),nbn(hMt)))),a2(n,B4n,H4n,CTt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H4n),W4n),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OTt),gMt),oTt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,G4n),E2n),"Compaction Strategy"),"This option defines how the compaction is applied."),ETt),gMt),YEt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z4n),E2n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U4n),V4n),"Upper limit for iterations of overlap removal"),null),iln(64)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X4n),V4n),"Whether to run a supplementary scanline overlap check."),null),!0),wMt),ktt),nbn(hMt)))),AKn((new Mf,n)),yHn((new Ef,n))},vX(D4n,"SporeMetaDataProvider",855),wAn(VVn,1,QYn,Mf),MWn.Qe=function(n){AKn(n)},vX(D4n,"SporeOverlapRemovalOptions",VVn),wAn(1001,1,{},eu),MWn.$e=function(){return new $E},MWn._e=function(n){},vX(D4n,"SporeOverlapRemovalOptions/SporeOverlapFactory",1001),wAn(530,22,{3:1,35:1,22:1,530:1,246:1,234:1},XW),MWn.Kf=function(){return isn(this)},MWn.Xf=function(){return isn(this)};var UTt,XTt,WTt,VTt=Ben(D4n,"StructureExtractionStrategy",530,Unt,FV,WF);wAn(429,22,{3:1,35:1,22:1,429:1,246:1,234:1},SC),MWn.Kf=function(){return wwn(this)},MWn.Xf=function(){return wwn(this)};var QTt,YTt=Ben(D4n,"TreeConstructionStrategy",429,Unt,eJ,VF);wAn(1443,1,E3n,iu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){Tjn(BB(n,300),t)},vX(Y4n,"DelaunayTriangulationPhase",1443),wAn(1444,1,lVn,yg),MWn.td=function(n){WB(this.a,BB(n,65).a)},vX(Y4n,"DelaunayTriangulationPhase/lambda$0$Type",1444),wAn(783,1,E3n,Vm),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){this.ng(BB(n,300),t)},MWn.ng=function(n,t){var e;OTn(t,"Minimum spanning tree construction",1),e=n.d?n.d.a:BB(xq(n.i,0),65).a,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,e,n.b)),n),HSn(t)},vX(J4n,"MinSTPhase",783),wAn(1446,783,E3n,ym),MWn.ng=function(n,t){var e,i;OTn(t,"Maximum spanning tree construction",1),e=new kg(n),i=n.d?n.d.c:BB(xq(n.i,0),65).c,Kun(this,(qy(TD(mMn(n,(Xcn(),Qrt)))),YHn(n.e,i,e)),n),HSn(t)},vX(J4n,"MaxSTPhase",1446),wAn(1447,1,{},kg),MWn.Je=function(n){return IC(this.a,n)},vX(J4n,"MaxSTPhase/lambda$0$Type",1447),wAn(1445,1,lVn,jg),MWn.td=function(n){R$(this.a,BB(n,65))},vX(J4n,"MinSTPhase/lambda$0$Type",1445),wAn(785,1,E3n,ru),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){WTn(this,BB(n,300),t)},MWn.a=!1,vX(Z4n,"GrowTreePhase",785),wAn(786,1,lVn,EB),MWn.td=function(n){eun(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"GrowTreePhase/lambda$0$Type",786),wAn(1448,1,E3n,cu),MWn.Yf=function(n){return BB(n,300),new B2},MWn.pf=function(n,t){tmn(this,BB(n,300),t)},vX(Z4n,"ShrinkTreeCompactionPhase",1448),wAn(784,1,lVn,TB),MWn.td=function(n){lAn(this.a,this.b,this.c,BB(n,221))},vX(Z4n,"ShrinkTreeCompactionPhase/lambda$0$Type",784);var JTt,ZTt,nMt=bq(y3n,"IGraphElementVisitor");wAn(860,1,{527:1},R0),MWn.og=function(n){var t;qan(t=hRn(this,n),BB(RX(this.b,n),94)),yLn(this,n,t)},vX(xJn,"LayoutConfigurator",860);var tMt,eMt,iMt,rMt=bq(xJn,"LayoutConfigurator/IPropertyHolderOptionFilter");wAn(932,1,{1933:1},au),MWn.pg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$0$Type",932),wAn(933,1,{1933:1},uu),MWn.pg=function(n,t){return SE(n,t)},vX(xJn,"LayoutConfigurator/lambda$1$Type",933),wAn(931,1,{831:1},ou),MWn.qg=function(n,t){return Nun(),!n.Xe(t)},vX(xJn,"LayoutConfigurator/lambda$2$Type",931),wAn(934,1,DVn,LC),MWn.Mb=function(n){return YW(this.a,this.b,BB(n,1933))},vX(xJn,"LayoutConfigurator/lambda$3$Type",934),wAn(858,1,{},su),vX(xJn,"RecursiveGraphLayoutEngine",858),wAn(296,60,BVn,kv,rk),vX(xJn,"UnsupportedConfigurationException",296),wAn(453,60,BVn,ck),vX(xJn,"UnsupportedGraphException",453),wAn(754,1,{}),vX(y3n,"AbstractRandomListAccessor",754),wAn(500,754,{},CNn),MWn.rg=function(){return null},MWn.d=!0,MWn.e=!0,MWn.f=0,vX(t5n,"AlgorithmAssembler",500),wAn(1236,1,DVn,hu),MWn.Mb=function(n){return!!BB(n,123)},vX(t5n,"AlgorithmAssembler/lambda$0$Type",1236),wAn(1237,1,{},Eg),MWn.Kb=function(n){return bj(this.a,BB(n,123))},vX(t5n,"AlgorithmAssembler/lambda$1$Type",1237),wAn(1238,1,DVn,fu),MWn.Mb=function(n){return!!BB(n,80)},vX(t5n,"AlgorithmAssembler/lambda$2$Type",1238),wAn(1239,1,lVn,Tg),MWn.td=function(n){Jcn(this.a,BB(n,80))},vX(t5n,"AlgorithmAssembler/lambda$3$Type",1239),wAn(1240,1,lVn,NC),MWn.td=function(n){Dx(this.a,this.b,BB(n,234))},vX(t5n,"AlgorithmAssembler/lambda$4$Type",1240),wAn(1355,1,MYn,lu),MWn.ue=function(n,t){return FQ(BB(n,234),BB(t,234))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(t5n,"EnumBasedFactoryComparator",1355),wAn(80,754,{80:1},B2),MWn.rg=function(){return new Rv},MWn.a=0,vX(t5n,"LayoutProcessorConfiguration",80),wAn(1013,1,{527:1},$f),MWn.og=function(n){nan(eMt,new Mg(n))},vX(zYn,"DeprecatedLayoutOptionReplacer",1013),wAn(1014,1,lVn,bu),MWn.td=function(n){N9(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1014),wAn(1015,1,lVn,wu),MWn.td=function(n){Twn(BB(n,160))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1015),wAn(1016,1,{},Mg),MWn.Od=function(n,t){Rx(this.a,BB(n,146),BB(t,38))},vX(zYn,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1016),wAn(149,1,{686:1,149:1},MTn),MWn.Fb=function(n){return j5(this,n)},MWn.sg=function(){return this.b},MWn.tg=function(){return this.c},MWn.ne=function(){return this.e},MWn.Hb=function(){return vvn(this.c)},MWn.Ib=function(){return"Layout Algorithm: "+this.c};var cMt,aMt=vX(zYn,"LayoutAlgorithmData",149);wAn(263,1,{},du),vX(zYn,"LayoutAlgorithmData/Builder",263),wAn(1017,1,{527:1},gu),MWn.og=function(n){cL(n,239)&&!qy(TD(n.We((sWn(),zSt))))&&KFn(BB(n,33))},vX(zYn,"LayoutAlgorithmResolver",1017),wAn(229,1,{686:1,229:1},UZ),MWn.Fb=function(n){return!!cL(n,229)&&mK(this.b,BB(n,229).b)},MWn.sg=function(){return this.a},MWn.tg=function(){return this.b},MWn.ne=function(){return this.d},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return"Layout Type: "+this.b},vX(zYn,"LayoutCategoryData",229),wAn(344,1,{},pu),vX(zYn,"LayoutCategoryData/Builder",344),wAn(867,1,{},ORn),vX(zYn,"LayoutMetaDataService",867),wAn(868,1,{},UX),vX(zYn,"LayoutMetaDataService/Registry",868),wAn(478,1,{478:1},vu),vX(zYn,"LayoutMetaDataService/Registry/Triple",478),wAn(869,1,e5n,mu),MWn.ug=function(){return new Gj},vX(zYn,"LayoutMetaDataService/lambda$0$Type",869),wAn(870,1,i5n,yu),MWn.vg=function(n){return B$(BB(n,8))},vX(zYn,"LayoutMetaDataService/lambda$1$Type",870),wAn(879,1,e5n,ku),MWn.ug=function(){return new Np},vX(zYn,"LayoutMetaDataService/lambda$10$Type",879),wAn(880,1,i5n,ju),MWn.vg=function(n){return new t_(BB(n,12))},vX(zYn,"LayoutMetaDataService/lambda$11$Type",880),wAn(881,1,e5n,Eu),MWn.ug=function(){return new YT},vX(zYn,"LayoutMetaDataService/lambda$12$Type",881),wAn(882,1,i5n,Tu),MWn.vg=function(n){return zB(BB(n,68))},vX(zYn,"LayoutMetaDataService/lambda$13$Type",882),wAn(883,1,e5n,Mu),MWn.ug=function(){return new Rv},vX(zYn,"LayoutMetaDataService/lambda$14$Type",883),wAn(884,1,i5n,Su),MWn.vg=function(n){return JQ(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$15$Type",884),wAn(885,1,e5n,Pu),MWn.ug=function(){return new fA},vX(zYn,"LayoutMetaDataService/lambda$16$Type",885),wAn(886,1,i5n,Cu),MWn.vg=function(n){return S4(BB(n,53))},vX(zYn,"LayoutMetaDataService/lambda$17$Type",886),wAn(887,1,e5n,Iu),MWn.ug=function(){return new zv},vX(zYn,"LayoutMetaDataService/lambda$18$Type",887),wAn(888,1,i5n,Ou),MWn.vg=function(n){return GB(BB(n,208))},vX(zYn,"LayoutMetaDataService/lambda$19$Type",888),wAn(871,1,e5n,Au),MWn.ug=function(){return new km},vX(zYn,"LayoutMetaDataService/lambda$2$Type",871),wAn(872,1,i5n,$u),MWn.vg=function(n){return new Kj(BB(n,74))},vX(zYn,"LayoutMetaDataService/lambda$3$Type",872),wAn(873,1,e5n,Lu),MWn.ug=function(){return new lm},vX(zYn,"LayoutMetaDataService/lambda$4$Type",873),wAn(874,1,i5n,Nu),MWn.vg=function(n){return new A_(BB(n,142))},vX(zYn,"LayoutMetaDataService/lambda$5$Type",874),wAn(875,1,e5n,Du),MWn.ug=function(){return new bm},vX(zYn,"LayoutMetaDataService/lambda$6$Type",875),wAn(876,1,i5n,Ru),MWn.vg=function(n){return new O_(BB(n,116))},vX(zYn,"LayoutMetaDataService/lambda$7$Type",876),wAn(877,1,e5n,Ku),MWn.ug=function(){return new Yu},vX(zYn,"LayoutMetaDataService/lambda$8$Type",877),wAn(878,1,i5n,_u),MWn.vg=function(n){return new rnn(BB(n,373))},vX(zYn,"LayoutMetaDataService/lambda$9$Type",878);var uMt,oMt,sMt,hMt,fMt,lMt=bq(IJn,"IProperty");wAn(23,1,{35:1,686:1,23:1,146:1},bPn),MWn.wd=function(n){return gL(this,BB(n,146))},MWn.Fb=function(n){return cL(n,23)?mK(this.f,BB(n,23).f):cL(n,146)&&mK(this.f,BB(n,146).tg())},MWn.wg=function(){var n;if(cL(this.b,4)){if(null==(n=Jdn(this.b)))throw Hp(new Fy(o5n+this.f+"'. Make sure it's type is registered with the "+(ED(bAt),bAt.k)+c5n));return n}return this.b},MWn.sg=function(){return this.d},MWn.tg=function(){return this.f},MWn.ne=function(){return this.i},MWn.Hb=function(){return vvn(this.f)},MWn.Ib=function(){return"Layout Option: "+this.f},vX(zYn,"LayoutOptionData",23),wAn(24,1,{},Fu),vX(zYn,"LayoutOptionData/Builder",24),wAn(175,22,{3:1,35:1,22:1,175:1},AC);var bMt,wMt,dMt,gMt,pMt,vMt,mMt,yMt,kMt,jMt=Ben(zYn,"LayoutOptionData/Target",175,Unt,O5,QF);wAn(277,22,{3:1,35:1,22:1,277:1},$C);var EMt,TMt,MMt,SMt=Ben(zYn,"LayoutOptionData/Type",277,Unt,_tn,YF);wAn(110,1,{110:1},bA,UV,gY),MWn.Fb=function(n){var t;return!(null==n||!cL(n,110))&&(t=BB(n,110),cV(this.c,t.c)&&cV(this.d,t.d)&&cV(this.b,t.b)&&cV(this.a,t.a))},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.c,this.d,this.b,this.a]))},MWn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,vX(f1n,"ElkRectangle",110),wAn(8,1,{3:1,4:1,8:1,414:1},Gj,XZ,xC,wA),MWn.Fb=function(n){return nrn(this,n)},MWn.Hb=function(){return VO(this.a)+byn(VO(this.b))},MWn.Jf=function(n){var t,e,i;for(e=0;e<n.length&&xhn((b1(e,n.length),n.charCodeAt(e)),o1n);)++e;for(t=n.length;t>0&&xhn((b1(t-1,n.length),n.charCodeAt(t-1)),s1n);)--t;if(e>=t)throw Hp(new _y("The given string does not contain any numbers."));if(2!=(i=kKn(n.substr(e,t-e),",|;|\r|\n")).length)throw Hp(new _y("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=bSn(RMn(i[0])),this.b=bSn(RMn(i[1]))}catch(r){throw cL(r=lun(r),127)?Hp(new _y(h1n+r)):Hp(r)}},MWn.Ib=function(){return"("+this.a+","+this.b+")"},MWn.a=0,MWn.b=0;var PMt=vX(f1n,"KVector",8);wAn(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},km,Kj,Ux),MWn.Pc=function(){return Vsn(this)},MWn.Jf=function(n){var t,e,i,r,c;e=kKn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),yQ(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&RMn(e[t]).length>0&&(r%2==0?i=bSn(e[t]):c=bSn(e[t]),r>0&&r%2!=0&&DH(this,new xC(i,c)),++r),++t}catch(a){throw cL(a=lun(a),127)?Hp(new _y("The given string does not match the expected format for vectors."+a)):Hp(a)}},MWn.Ib=function(){var n,t,e;for(n=new lN("("),t=spn(this,0);t.b!=t.d.c;)oO(n,(e=BB(b3(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CMt,IMt,OMt,AMt,$Mt,LMt,NMt=vX(f1n,"KVectorChain",74);wAn(248,22,{3:1,35:1,22:1,248:1},DC);var xMt,DMt,RMt,KMt,_Mt,FMt,BMt,HMt,qMt,GMt,zMt,UMt,XMt,WMt,VMt,QMt,YMt,JMt,ZMt,nSt=Ben(h5n,"Alignment",248,Unt,J8,JF);wAn(979,1,QYn,Lf),MWn.Qe=function(n){G_n(n)},vX(h5n,"BoxLayouterOptions",979),wAn(980,1,{},xu),MWn.$e=function(){return new Gu},MWn._e=function(n){},vX(h5n,"BoxLayouterOptions/BoxFactory",980),wAn(291,22,{3:1,35:1,22:1,291:1},RC);var tSt,eSt,iSt,rSt,cSt,aSt,uSt,oSt,sSt,hSt,fSt,lSt,bSt,wSt,dSt,gSt,pSt,vSt,mSt,ySt,kSt,jSt,ESt,TSt,MSt,SSt,PSt,CSt,ISt,OSt,ASt,$St,LSt,NSt,xSt,DSt,RSt,KSt,_St,FSt,BSt,HSt,qSt,GSt,zSt,USt,XSt,WSt,VSt,QSt,YSt,JSt,ZSt,nPt,tPt,ePt,iPt,rPt,cPt,aPt,uPt,oPt,sPt,hPt,fPt,lPt,bPt,wPt,dPt,gPt,pPt,vPt,mPt,yPt,kPt,jPt,EPt,TPt,MPt,SPt,PPt,CPt,IPt,OPt,APt,$Pt,LPt,NPt,xPt,DPt,RPt,KPt,_Pt,FPt,BPt,HPt,qPt=Ben(h5n,"ContentAlignment",291,Unt,Y8,ZF);wAn(684,1,QYn,Nf),MWn.Qe=function(n){Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,w5n),""),"Layout Algorithm"),"Select a specific layout algorithm."),(PPn(),yMt)),Qtt),nbn((rpn(),hMt))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,d5n),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),mMt),aMt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,W2n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),rSt),gMt),nSt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,VJn),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,g5n),""),"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."),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,u3n),""),"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."),fSt),pMt),qPt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,X2n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(hN(),!1)),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,J2n),""),TJn),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),wSt),gMt),WPt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y2n),""),"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."),mSt),gMt),oCt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,A4n),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,d2n),""),"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`."),TSt),gMt),SCt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,QJn),""),"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."),WSt),mMt),_ut),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,jZn),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m3n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,MZn),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,EZn),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),oPt),gMt),aIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,g3n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),mMt),PMt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,pZn),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),vMt),Att),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,yZn),""),"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)."),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,kZn),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,o3n),""),"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."),ASt),mMt),NMt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,f3n),""),"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),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,l3n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,p5n),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),mMt),KNt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,p3n),""),"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."),LSt),mMt),Eut),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,z2n),""),"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),wMt),ktt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v5n),""),"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),dMt),Ptt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,m5n),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,y5n),""),"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'."),iln(100)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,k5n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,j5n),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),iln(4e3)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,E5n),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),iln(400)),vMt),Att),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,T5n),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,M5n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,S5n),""),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,P5n),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,b5n),"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."),oSt),gMt),cOt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,L2n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,N2n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,XJn),k2n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,x2n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,mZn),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,D2n),k2n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,R2n),k2n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,F2n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,K2n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,_2n),k2n),"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),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,vZn),k2n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,B2n),k2n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dMt),Ptt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,H2n),k2n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dMt),Ptt),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,q2n),k2n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),mMt),hOt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[uMt,fMt,oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,v3n),k2n),"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."),DPt),mMt),Eut),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,d3n),A5n),"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)."),vMt),Att),EG(hMt,Pun(Gk(jMt,1),$Vn,175,0,[sMt]))))),a2(n,d3n,w3n,JSt),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,w3n),A5n),"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."),QSt),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Z2n),$5n),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),xSt),mMt),_ut),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,CZn),$5n),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),RSt),pMt),GCt),EG(sMt,Pun(Gk(jMt,1),$Vn,175,0,[oMt]))))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,e3n),L5n),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),nPt),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,i3n),L5n),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,r3n),L5n),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,c3n),L5n),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,a3n),L5n),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gMt),JCt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,PZn),N5n),"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."),_St),pMt),YIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,SZn),N5n),"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."),GSt),pMt),iOt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,BZn),N5n),"Node Size Minimum"),"The minimal size to which a node can be reduced."),HSt),mMt),PMt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Y2n),N5n),"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),wMt),ktt),nbn(hMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,s3n),A2n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),pSt),gMt),nCt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,TZn),A2n),"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),wMt),ktt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,C5n),"font"),"Font Name"),"Font name used for a label."),yMt),Qtt),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,I5n),"font"),"Font Size"),"Font size used for a label."),vMt),Att),nbn(oMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,b3n),x5n),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),mMt),PMt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,h3n),x5n),"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."),vMt),Att),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,U2n),x5n),"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."),dPt),gMt),FIt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Ej(Cj(Mj(Sj(new Fu,G2n),x5n),"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."),dMt),Ptt),nbn(fMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,IZn),D5n),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),lPt),pMt),IIt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,n3n),D5n),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,t3n),D5n),"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),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,V2n),R5n),"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),wMt),ktt),nbn(sMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,Q2n),R5n),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wMt),ktt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,WJn),"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),dMt),Ptt),nbn(uMt)))),Abn(n,new bPn(Oj(Ij(Aj(Tj(Ej(Cj(Mj(Sj(new Fu,O5n),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),kSt),gMt),yCt),nbn(uMt)))),xM(n,new UZ(yj(jj(kj(new pu,w1n),"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.'))),xM(n,new UZ(yj(jj(kj(new pu,"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.'))),xM(n,new UZ(yj(jj(kj(new pu,gZn),"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."))),xM(n,new UZ(yj(jj(kj(new pu,"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."))),xM(n,new UZ(yj(jj(kj(new pu,Y3n),"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."))),xM(n,new UZ(yj(jj(kj(new pu,"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."))),xM(n,new UZ(yj(jj(kj(new pu,w4n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),bKn((new xf,n)),G_n((new Lf,n)),RDn((new Df,n))},vX(h5n,"CoreOptions",684),wAn(103,22,{3:1,35:1,22:1,103:1},KC);var GPt,zPt,UPt,XPt,WPt=Ben(h5n,TJn,103,Unt,C5,eB);wAn(272,22,{3:1,35:1,22:1,272:1},_C);var VPt,QPt,YPt,JPt,ZPt,nCt=Ben(h5n,"EdgeLabelPlacement",272,Unt,q1,iB);wAn(218,22,{3:1,35:1,22:1,218:1},FC);var tCt,eCt,iCt,rCt,cCt,aCt,uCt,oCt=Ben(h5n,"EdgeRouting",218,Unt,S3,rB);wAn(312,22,{3:1,35:1,22:1,312:1},BC);var sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,vCt,mCt,yCt=Ben(h5n,"EdgeType",312,Unt,a9,cB);wAn(977,1,QYn,xf),MWn.Qe=function(n){bKn(n)},vX(h5n,"FixedLayouterOptions",977),wAn(978,1,{},Vu),MWn.$e=function(){return new Hu},MWn._e=function(n){},vX(h5n,"FixedLayouterOptions/FixedFactory",978),wAn(334,22,{3:1,35:1,22:1,334:1},HC);var kCt,jCt,ECt,TCt,MCt,SCt=Ben(h5n,"HierarchyHandling",334,Unt,H1,aB);wAn(285,22,{3:1,35:1,22:1,285:1},qC);var PCt,CCt,ICt,OCt,ACt,$Ct,LCt,NCt,xCt,DCt,RCt=Ben(h5n,"LabelSide",285,Unt,M3,uB);wAn(93,22,{3:1,35:1,22:1,93:1},GC);var KCt,_Ct,FCt,BCt,HCt,qCt,GCt=Ben(h5n,"NodeLabelPlacement",93,Unt,ken,oB);wAn(249,22,{3:1,35:1,22:1,249:1},zC);var zCt,UCt,XCt,WCt,VCt,QCt,YCt,JCt=Ben(h5n,"PortAlignment",249,Unt,I5,sB);wAn(98,22,{3:1,35:1,22:1,98:1},UC);var ZCt,nIt,tIt,eIt,iIt,rIt,cIt,aIt=Ben(h5n,"PortConstraints",98,Unt,S8,hB);wAn(273,22,{3:1,35:1,22:1,273:1},XC);var uIt,oIt,sIt,hIt,fIt,lIt,bIt,wIt,dIt,gIt,pIt,vIt,mIt,yIt,kIt,jIt,EIt,TIt,MIt,SIt,PIt,CIt,IIt=Ben(h5n,"PortLabelPlacement",273,Unt,c9,fB);wAn(61,22,{3:1,35:1,22:1,61:1},WC);var OIt,AIt,$It,LIt,NIt,xIt,DIt,RIt,KIt,_It,FIt=Ben(h5n,"PortSide",61,Unt,h5,wB);wAn(981,1,QYn,Df),MWn.Qe=function(n){RDn(n)},vX(h5n,"RandomLayouterOptions",981),wAn(982,1,{},Qu),MWn.$e=function(){return new no},MWn._e=function(n){},vX(h5n,"RandomLayouterOptions/RandomFactory",982),wAn(374,22,{3:1,35:1,22:1,374:1},VC);var BIt,HIt,qIt,GIt,zIt,UIt,XIt,WIt,VIt,QIt,YIt=Ben(h5n,"SizeConstraint",374,Unt,T3,lB);wAn(259,22,{3:1,35:1,22:1,259:1},QC);var JIt,ZIt,nOt,tOt,eOt,iOt=Ben(h5n,"SizeOptions",259,Unt,Ein,bB);wAn(370,1,{1949:1},Xm),MWn.b=!1,MWn.c=0,MWn.d=-1,MWn.e=null,MWn.f=null,MWn.g=-1,MWn.j=!1,MWn.k=!1,MWn.n=!1,MWn.o=0,MWn.q=0,MWn.r=0,vX(y3n,"BasicProgressMonitor",370),wAn(972,209,NJn,Gu),MWn.Ze=function(n,t){var e,i,r,c,a,u,o,s,h;OTn(t,"Box layout",2),r=zy(MD(ZAn(n,(SMn(),XMt)))),c=BB(ZAn(n,GMt),116),e=qy(TD(ZAn(n,_Mt))),i=qy(TD(ZAn(n,FMt))),0===BB(ZAn(n,RMt),311).g?(u=new t_((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a)),SQ(),m$(u,new Sg(i)),a=u,o=XPn(n),(null==(s=MD(ZAn(n,DMt)))||(kW(s),s<=0))&&(s=1.3),KUn(n,(h=HUn(a,r,c,o.a,o.b,e,(kW(s),s))).a,h.b,!1,!0)):kqn(n,r,c,e),HSn(t)},vX(y3n,"BoxLayoutProvider",972),wAn(973,1,MYn,Sg),MWn.ue=function(n,t){return hNn(this,BB(n,33),BB(t,33))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},MWn.a=!1,vX(y3n,"BoxLayoutProvider/1",973),wAn(157,1,{157:1},Gtn,zx),MWn.Ib=function(){return this.c?zRn(this.c):LMn(this.b)},vX(y3n,"BoxLayoutProvider/Group",157),wAn(311,22,{3:1,35:1,22:1,311:1},YC);var rOt,cOt=Ben(y3n,"BoxLayoutProvider/PackingMode",311,Unt,P3,dB);wAn(974,1,MYn,zu),MWn.ue=function(n,t){return DQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$0$Type",974),wAn(975,1,MYn,Uu),MWn.ue=function(n,t){return cQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$1$Type",975),wAn(976,1,MYn,Xu),MWn.ue=function(n,t){return aQ(BB(n,157),BB(t,157))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(y3n,"BoxLayoutProvider/lambda$2$Type",976),wAn(1365,1,{831:1},Wu),MWn.qg=function(n,t){return AM(),!cL(t,160)||SE((Nun(),BB(n,160)),t)},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1365),wAn(1366,1,lVn,Pg),MWn.td=function(n){Jsn(this.a,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1366),wAn(1367,1,lVn,qu),MWn.td=function(n){BB(n,94),AM()},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1367),wAn(1371,1,lVn,Cg),MWn.td=function(n){Orn(this.a,BB(n,94))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1371),wAn(1369,1,DVn,JC),MWn.Mb=function(n){return Von(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1369),wAn(1368,1,DVn,ZC),MWn.Mb=function(n){return $x(this.a,this.b,BB(n,831))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1368),wAn(1370,1,lVn,nI),MWn.td=function(n){Fz(this.a,this.b,BB(n,146))},vX(y3n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1370),wAn(935,1,{},Bu),MWn.Kb=function(n){return yA(n)},MWn.Fb=function(n){return this===n},vX(y3n,"ElkUtil/lambda$0$Type",935),wAn(936,1,lVn,tI),MWn.td=function(n){rOn(this.a,this.b,BB(n,79))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$1$Type",936),wAn(937,1,lVn,eI),MWn.td=function(n){Ey(this.a,this.b,BB(n,202))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$2$Type",937),wAn(938,1,lVn,iI),MWn.td=function(n){t$(this.a,this.b,BB(n,137))},MWn.a=0,MWn.b=0,vX(y3n,"ElkUtil/lambda$3$Type",938),wAn(939,1,lVn,Ig),MWn.td=function(n){cq(this.a,BB(n,469))},vX(y3n,"ElkUtil/lambda$4$Type",939),wAn(342,1,{35:1,342:1},$p),MWn.wd=function(n){return vL(this,BB(n,236))},MWn.Fb=function(n){var t;return!!cL(n,342)&&(t=BB(n,342),this.a==t.a)},MWn.Hb=function(){return CJ(this.a)},MWn.Ib=function(){return this.a+" (exclusive)"},MWn.a=0,vX(y3n,"ExclusiveBounds/ExclusiveLowerBound",342),wAn(1138,209,NJn,Hu),MWn.Ze=function(n,t){var i,r,c,a,u,o,s,f,l,b,w,d,g,p,v,m,y,k,j,E,T;for(OTn(t,"Fixed Layout",1),a=BB(ZAn(n,(sWn(),vSt)),218),b=0,w=0,v=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));v.e!=v.i.gc();){for(g=BB(kpn(v),33),(T=BB(ZAn(g,(Xsn(),gCt)),8))&&(SA(g,T.a,T.b),BB(ZAn(g,fCt),174).Hc((mdn(),DIt))&&(d=BB(ZAn(g,bCt),8)).a>0&&d.b>0&&KUn(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 AL((!g.n&&(g.n=new eU(zOt,g,1,7)),g.n));f.e!=f.i.gc();)o=BB(kpn(f),137),(T=BB(ZAn(o,gCt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,g.i+o.i+o.g),w=e.Math.max(w,g.j+o.j+o.f);for(k=new AL((!g.c&&(g.c=new eU(XOt,g,9,9)),g.c));k.e!=k.i.gc();)for(y=BB(kpn(k),118),(T=BB(ZAn(y,gCt),8))&&SA(y,T.a,T.b),j=g.i+y.i,E=g.j+y.j,b=e.Math.max(b,j+y.g),w=e.Math.max(w,E+y.f),s=new AL((!y.n&&(y.n=new eU(zOt,y,1,7)),y.n));s.e!=s.i.gc();)o=BB(kpn(s),137),(T=BB(ZAn(o,gCt),8))&&SA(o,T.a,T.b),b=e.Math.max(b,j+o.i+o.g),w=e.Math.max(w,E+o.j+o.f);for(c=new oz(ZL(dLn(g).a.Kc(),new h));dAn(c);)l=_Un(i=BB(U5(c),79)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new oz(ZL(wLn(g).a.Kc(),new h));dAn(r);)JJ(PMn(i=BB(U5(r),79)))!=n&&(l=_Un(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(Mbn(),QPt))for(p=new AL((!n.a&&(n.a=new eU(UOt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new oz(ZL(dLn(g=BB(kpn(p),33)).a.Kc(),new h));dAn(r);)0==(u=rFn(i=BB(U5(r),79))).b?Ypn(i,OSt,null):Ypn(i,OSt,u);qy(TD(ZAn(n,(Xsn(),lCt))))||KUn(n,b+(m=BB(ZAn(n,wCt),116)).b+m.c,w+m.d+m.a,!0,!0),HSn(t)},vX(y3n,"FixedLayoutProvider",1138),wAn(373,134,{3:1,414:1,373:1,94:1,134:1},Yu,rnn),MWn.Jf=function(n){var t,e,i,r,c,a,u;if(n)try{for(a=kKn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=kKn(i[r],"\\:"),!(e=pGn(cin(),t[0])))throw Hp(new _y("Invalid option id: "+t[0]));if(null==(u=Zqn(e,t[1])))throw Hp(new _y("Invalid option value: "+t[1]));null==u?(!this.q&&(this.q=new xp),v6(this.q,e)):(!this.q&&(this.q=new xp),VW(this.q,e,u))}}catch(o){throw cL(o=lun(o),102)?Hp(new Fsn(o)):Hp(o)}},MWn.Ib=function(){return SD(P4($V((this.q?this.q:(SQ(),SQ(),het)).vc().Oc(),new Ju),x7(new YB,new Z,new W,new V,Pun(Gk(nit,1),$Vn,132,0,[]))))};var aOt,uOt,oOt,sOt,hOt=vX(y3n,"IndividualSpacings",373);wAn(971,1,{},Ju),MWn.Kb=function(n){return RQ(BB(n,42))},vX(y3n,"IndividualSpacings/lambda$0$Type",971),wAn(709,1,{},sG),MWn.c=0,vX(y3n,"InstancePool",709),wAn(1275,1,{},Zu),vX(y3n,"LoggedGraph",1275),wAn(396,22,{3:1,35:1,22:1,396:1},cI);var fOt,lOt,bOt,wOt=Ben(y3n,"LoggedGraph/Type",396,Unt,C3,gB);wAn(46,1,{20:1,46:1},rI),MWn.Jc=function(n){e5(this,n)},MWn.Fb=function(n){var t,e,i;return!!cL(n,46)&&(e=BB(n,46),t=null==this.a?null==e.a:Nfn(this.a,e.a),i=null==this.b?null==e.b:Nfn(this.b,e.b),t&&i)},MWn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:nsn(this.a)),t&QVn^(-65536&(e=null==this.b?0:nsn(this.b)))>>16&QVn|n^(e&QVn)<<16},MWn.Kc=function(){return new Og(this)},MWn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+Bbn(this.b)+")":null==this.b?"pair("+Bbn(this.a)+",null)":"pair("+Bbn(this.a)+","+Bbn(this.b)+")"},vX(y3n,"Pair",46),wAn(983,1,QWn,Og),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},MWn.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 Hp(new yv)},MWn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),Hp(new dv)},MWn.b=!1,MWn.c=!1,vX(y3n,"Pair/1",983),wAn(448,1,{448:1},VV),MWn.Fb=function(n){return cV(this.a,BB(n,448).a)&&cV(this.c,BB(n,448).c)&&cV(this.d,BB(n,448).d)&&cV(this.b,BB(n,448).b)},MWn.Hb=function(){return fhn(Pun(Gk(Ant,1),HWn,1,5,[this.a,this.c,this.d,this.b]))},MWn.Ib=function(){return"("+this.a+FWn+this.c+FWn+this.d+FWn+this.b+")"},vX(y3n,"Quadruple",448),wAn(1126,209,NJn,no),MWn.Ze=function(n,t){var e;OTn(t,"Random Layout",1),0!=(!n.a&&(n.a=new eU(UOt,n,10,11)),n.a).i?(iUn(n,(e=BB(ZAn(n,(vdn(),NIt)),19))&&0!=e.a?new C4(e.a):new sbn,zy(MD(ZAn(n,AIt))),zy(MD(ZAn(n,xIt))),BB(ZAn(n,$It),116)),HSn(t)):HSn(t)},vX(y3n,"RandomLayoutProvider",1126),wAn(553,1,{}),MWn.qf=function(){return new xC(this.f.i,this.f.j)},MWn.We=function(n){return EY(n,(sWn(),aPt))?ZAn(this.f,bOt):ZAn(this.f,n)},MWn.rf=function(){return new xC(this.f.g,this.f.f)},MWn.sf=function(){return this.g},MWn.Xe=function(n){return P8(this.f,n)},MWn.tf=function(n){Pen(this.f,n.a),Cen(this.f,n.b)},MWn.uf=function(n){Sen(this.f,n.a),Men(this.f,n.b)},MWn.vf=function(n){this.g=n},MWn.g=0,vX(H5n,"ElkGraphAdapters/AbstractElkGraphElementAdapter",553),wAn(554,1,{839:1},Ag),MWn.wf=function(){var n,t;if(!this.b)for(this.b=C2(mV(this.a).i),t=new AL(mV(this.a));t.e!=t.i.gc();)n=BB(kpn(t),137),WB(this.b,new Ry(n));return this.b},MWn.b=null,vX(H5n,"ElkGraphAdapters/ElkEdgeAdapter",554),wAn(301,553,{},Dy),MWn.xf=function(){return eyn(this)},MWn.a=null,vX(H5n,"ElkGraphAdapters/ElkGraphAdapter",301),wAn(630,553,{181:1},Ry),vX(H5n,"ElkGraphAdapters/ElkLabelAdapter",630),wAn(629,553,{680:1},JN),MWn.wf=function(){return nyn(this)},MWn.Af=function(){var n;return!(n=BB(ZAn(this.f,(sWn(),$St)),142))&&(n=new lm),n},MWn.Cf=function(){return tyn(this)},MWn.Ef=function(n){var t;t=new A_(n),Ypn(this.f,(sWn(),$St),t)},MWn.Ff=function(n){Ypn(this.f,(sWn(),XSt),new O_(n))},MWn.yf=function(){return this.d},MWn.zf=function(){var n,t;if(!this.a)for(this.a=new Np,t=new oz(ZL(wLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=new Np,t=new oz(ZL(dLn(BB(this.f,33)).a.Kc(),new h));dAn(t);)n=BB(U5(t),79),WB(this.c,new Ag(n));return this.c},MWn.Df=function(){return 0!=YQ(BB(this.f,33)).i||qy(TD(BB(this.f,33).We((sWn(),SSt))))},MWn.Gf=function(){_7(this,(GM(),lOt))},MWn.a=null,MWn.b=null,MWn.c=null,MWn.d=null,MWn.e=null,vX(H5n,"ElkGraphAdapters/ElkNodeAdapter",629),wAn(1266,553,{838:1},op),MWn.wf=function(){return kyn(this)},MWn.zf=function(){var n,t;if(!this.a)for(this.a=sx(BB(this.f,118).xg().i),t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.a,new Ag(n));return this.a},MWn.Bf=function(){var n,t;if(!this.c)for(this.c=sx(BB(this.f,118).yg().i),t=new AL(BB(this.f,118).yg());t.e!=t.i.gc();)n=BB(kpn(t),79),WB(this.c,new Ag(n));return this.c},MWn.Hf=function(){return BB(BB(this.f,118).We((sWn(),wPt)),61)},MWn.If=function(){var n,t,e,i,r,c,a;for(i=WJ(BB(this.f,118)),e=new AL(BB(this.f,118).yg());e.e!=e.i.gc();)for(a=new AL((!(n=BB(kpn(e),79)).c&&(n.c=new hK(KOt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ctn(PTn(c=BB(kpn(a),82)),i))return!0;if(PTn(c)==i&&qy(TD(ZAn(n,(sWn(),PSt)))))return!0}for(t=new AL(BB(this.f,118).xg());t.e!=t.i.gc();)for(r=new AL((!(n=BB(kpn(t),79)).b&&(n.b=new hK(KOt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ctn(PTn(BB(kpn(r),82)),i))return!0;return!1},MWn.a=null,MWn.b=null,MWn.c=null,vX(H5n,"ElkGraphAdapters/ElkPortAdapter",1266),wAn(1267,1,MYn,to),MWn.ue=function(n,t){return GRn(BB(n,118),BB(t,118))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(H5n,"ElkGraphAdapters/PortComparator",1267);var dOt,gOt,pOt,vOt,mOt,yOt,kOt,jOt,EOt,TOt,MOt,SOt,POt,COt,IOt,OOt,AOt,$Ot,LOt=bq(q5n,"EObject"),NOt=bq(G5n,z5n),xOt=bq(G5n,U5n),DOt=bq(G5n,X5n),ROt=bq(G5n,"ElkShape"),KOt=bq(G5n,W5n),_Ot=bq(G5n,V5n),FOt=bq(G5n,Q5n),BOt=bq(q5n,Y5n),HOt=bq(q5n,"EFactory"),qOt=bq(q5n,J5n),GOt=bq(q5n,"EPackage"),zOt=bq(G5n,Z5n),UOt=bq(G5n,n6n),XOt=bq(G5n,t6n);wAn(90,1,e6n),MWn.Jg=function(){return this.Kg(),null},MWn.Kg=function(){return null},MWn.Lg=function(){return this.Kg(),!1},MWn.Mg=function(){return!1},MWn.Ng=function(n){ban(this,n)},vX(i6n,"BasicNotifierImpl",90),wAn(97,90,f6n),MWn.nh=function(){return mA(this)},MWn.Og=function(n,t){return n},MWn.Pg=function(){throw Hp(new pv)},MWn.Qg=function(n){var t;return t=Cvn(BB(itn(this.Tg(),this.Vg()),18)),this.eh().ih(this,t.n,t.f,n)},MWn.Rg=function(n,t){throw Hp(new pv)},MWn.Sg=function(n,t,e){return T_n(this,n,t,e)},MWn.Tg=function(){var n;return this.Pg()&&(n=this.Pg().ck())?n:this.zh()},MWn.Ug=function(){return cAn(this)},MWn.Vg=function(){throw Hp(new pv)},MWn.Wg=function(){var n,t;return!(t=this.ph().dk())&&this.Pg().ik((QM(),t=null==(n=lJ(qFn(this.Tg())))?N$t:new QN(this,n))),t},MWn.Xg=function(n,t){return n},MWn.Yg=function(n){return n.Gj()?n.aj():Awn(this.Tg(),n)},MWn.Zg=function(){var n;return(n=this.Pg())?n.fk():null},MWn.$g=function(){return this.Pg()?this.Pg().ck():null},MWn._g=function(n,t,e){return Zpn(this,n,t,e)},MWn.ah=function(n){return S9(this,n)},MWn.bh=function(n,t){return V5(this,n,t)},MWn.dh=function(){var n;return!!(n=this.Pg())&&n.gk()},MWn.eh=function(){throw Hp(new pv)},MWn.fh=function(){return Ydn(this)},MWn.gh=function(n,t,e,i){return Npn(this,n,t,i)},MWn.hh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Qj(this,this.yh(),t-this.Ah(),n,e)},MWn.ih=function(n,t,e,i){return oJ(this,n,t,i)},MWn.jh=function(n,t,e){return BB(itn(this.Tg(),t),66).Nj().Rj(this,this.yh(),t-this.Ah(),n,e)},MWn.kh=function(){return!!this.Pg()&&!!this.Pg().ek()},MWn.lh=function(n){return vpn(this,n)},MWn.mh=function(n){return ZJ(this,n)},MWn.oh=function(n){return _qn(this,n)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return this.Pg()?this.Pg().ek():null},MWn.rh=function(){return Ydn(this)},MWn.sh=function(n,t){yCn(this,n,t)},MWn.th=function(n){this.ph().hk(n)},MWn.uh=function(n){this.ph().kk(n)},MWn.vh=function(n){this.ph().jk(n)},MWn.wh=function(n,t){var e,i,r,c;return(c=this.Zg())&&n&&(t=_pn(c.Vk(),this,t),c.Zk(this)),(i=this.eh())&&(0!=(gKn(this,this.eh(),this.Vg()).Bb&BQn)?(r=i.fh())&&(n?!c&&r.Zk(this):r.Yk(this)):(t=(e=this.Vg())>=0?this.Qg(t):this.eh().ih(this,-1-e,null,t),t=this.Sg(null,-1,t))),this.uh(n),t},MWn.xh=function(n){var t,e,i,r,c,a,u;if((c=Awn(e=this.Tg(),n))>=(t=this.Ah()))return BB(n,66).Nj().Uj(this,this.yh(),c-t);if(c<=-1){if(!(a=Fqn((IPn(),Z$t),e,n)))throw Hp(new _y(r6n+n.ne()+u6n));if(ZM(),BB(a,66).Oj()||(a=Z1(B7(Z$t,a))),r=BB((i=this.Yg(a))>=0?this._g(i,!0,!0):cOn(this,a,!0),153),(u=a.Zj())>1||-1==u)return BB(BB(r,215).hl(n,!1),76)}else if(n.$j())return BB((i=this.Yg(n))>=0?this._g(i,!1,!0):cOn(this,n,!1),76);return new II(this,n)},MWn.yh=function(){return Q7(this)},MWn.zh=function(){return(QX(),t$t).S},MWn.Ah=function(){return bX(this.zh())},MWn.Bh=function(n){mPn(this,n)},MWn.Ib=function(){return P$n(this)},vX(l6n,"BasicEObjectImpl",97),wAn(114,97,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1}),MWn.Ch=function(n){return Y7(this)[n]},MWn.Dh=function(n,t){$X(Y7(this),n,t)},MWn.Eh=function(n){$X(Y7(this),n,null)},MWn.Jg=function(){return BB(yan(this,4),126)},MWn.Kg=function(){throw Hp(new pv)},MWn.Lg=function(){return 0!=(4&this.Db)},MWn.Pg=function(){throw Hp(new pv)},MWn.Fh=function(n){hgn(this,2,n)},MWn.Rg=function(n,t){this.Db=t<<16|255&this.Db,this.Fh(n)},MWn.Tg=function(){return jY(this)},MWn.Vg=function(){return this.Db>>16},MWn.Wg=function(){var n;return QM(),null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?N$t:new QN(this,n)},MWn.Mg=function(){return 0==(1&this.Db)},MWn.Zg=function(){return BB(yan(this,128),1935)},MWn.$g=function(){return BB(yan(this,16),26)},MWn.dh=function(){return 0!=(32&this.Db)},MWn.eh=function(){return BB(yan(this,2),49)},MWn.kh=function(){return 0!=(64&this.Db)},MWn.ph=function(){throw Hp(new pv)},MWn.qh=function(){return BB(yan(this,64),281)},MWn.th=function(n){hgn(this,16,n)},MWn.uh=function(n){hgn(this,128,n)},MWn.vh=function(n){hgn(this,64,n)},MWn.yh=function(){return fgn(this)},MWn.Db=0,vX(l6n,"MinimalEObjectImpl",114),wAn(115,114,{105:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn.Fh=function(n){this.Cb=n},MWn.eh=function(){return this.Cb},vX(l6n,"MinimalEObjectImpl/Container",115),wAn(1985,115,{105:1,413:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Eyn(this,n,t,e)},MWn.jh=function(n,t,e){return eSn(this,n,t,e)},MWn.lh=function(n){return m0(this,n)},MWn.sh=function(n,t){rsn(this,n,t)},MWn.zh=function(){return CXn(),POt},MWn.Bh=function(n){zun(this,n)},MWn.Ve=function(){return lpn(this)},MWn.We=function(n){return ZAn(this,n)},MWn.Xe=function(n){return P8(this,n)},MWn.Ye=function(n,t){return Ypn(this,n,t)},vX(b6n,"EMapPropertyHolderImpl",1985),wAn(567,115,{105:1,469:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},ro),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void jen(this,Gy(MD(t)));case 1:return void Een(this,Gy(MD(t)))}yCn(this,n,t)},MWn.zh=function(){return CXn(),pOt},MWn.Bh=function(n){switch(n){case 0:return void jen(this,0);case 1:return void Een(this,0)}mPn(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (x: ",vE(n,this.a),n.a+=", y: ",vE(n,this.b),n.a+=")",n.a)},MWn.a=0,MWn.b=0,vX(b6n,"ElkBendPointImpl",567),wAn(723,1985,{105:1,413:1,160:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return _fn(this,n,t,e)},MWn.hh=function(n,t,e){return FTn(this,n,t,e)},MWn.jh=function(n,t,e){return run(this,n,t,e)},MWn.lh=function(n){return Ean(this,n)},MWn.sh=function(n,t){Gjn(this,n,t)},MWn.zh=function(){return CXn(),kOt},MWn.Bh=function(n){ofn(this,n)},MWn.zg=function(){return this.k},MWn.Ag=function(){return mV(this)},MWn.Ib=function(){return Yln(this)},MWn.k=null,vX(b6n,"ElkGraphElementImpl",723),wAn(724,723,{105:1,413:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Rbn(this,n,t,e)},MWn.lh=function(n){return fwn(this,n)},MWn.sh=function(n,t){zjn(this,n,t)},MWn.zh=function(){return CXn(),SOt},MWn.Bh=function(n){Dwn(this,n)},MWn.Bg=function(){return this.f},MWn.Cg=function(){return this.g},MWn.Dg=function(){return this.i},MWn.Eg=function(){return this.j},MWn.Fg=function(n,t){MA(this,n,t)},MWn.Gg=function(n,t){SA(this,n,t)},MWn.Hg=function(n){Pen(this,n)},MWn.Ig=function(n){Cen(this,n)},MWn.Ib=function(){return mSn(this)},MWn.f=0,MWn.g=0,MWn.i=0,MWn.j=0,vX(b6n,"ElkShapeImpl",724),wAn(725,724,{105:1,413:1,82:1,160:1,470:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1}),MWn._g=function(n,t,e){return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){return djn(this,n,t,e)},MWn.jh=function(n,t,e){return gjn(this,n,t,e)},MWn.lh=function(n){return Gon(this,n)},MWn.sh=function(n,t){LAn(this,n,t)},MWn.zh=function(){return CXn(),vOt},MWn.Bh=function(n){xpn(this,n)},MWn.xg=function(){return!this.d&&(this.d=new hK(_Ot,this,8,5)),this.d},MWn.yg=function(){return!this.e&&(this.e=new hK(_Ot,this,7,4)),this.e},vX(b6n,"ElkConnectableShapeImpl",725),wAn(352,723,{105:1,413:1,79:1,160:1,352:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},io),MWn.Qg=function(n){return Mkn(this,n)},MWn._g=function(n,t,e){switch(n){case 3:return XJ(this);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),this.a;case 7:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return hN(),!!nAn(this);case 9:return hN(),!!QIn(this);case 10:return hN(),!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return _fn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Mkn(this,e):this.Cb.ih(this,-1-i,null,e)),VD(this,BB(n,33),e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),Ywn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),Ywn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),Ywn(this.a,n,e)}return FTn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 3:return VD(this,null,e);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),_pn(this.b,n,e);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),_pn(this.c,n,e);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),_pn(this.a,n,e)}return run(this,n,t,e)},MWn.lh=function(n){switch(n){case 3:return!!XJ(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 hK(KOt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new hK(KOt,this,5,8)),this.c.i<=1));case 8:return nAn(this);case 9:return QIn(this);case 10:return!this.b&&(this.b=new hK(KOt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new hK(KOt,this,5,8)),0!=this.c.i)}return Ean(this,n)},MWn.sh=function(n,t){switch(n){case 3:return void HLn(this,BB(t,33));case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),sqn(this.b),!this.b&&(this.b=new hK(KOt,this,4,7)),void pX(this.b,BB(t,14));case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),sqn(this.c),!this.c&&(this.c=new hK(KOt,this,5,8)),void pX(this.c,BB(t,14));case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),sqn(this.a),!this.a&&(this.a=new eU(FOt,this,6,6)),void pX(this.a,BB(t,14))}Gjn(this,n,t)},MWn.zh=function(){return CXn(),mOt},MWn.Bh=function(n){switch(n){case 3:return void HLn(this,null);case 4:return!this.b&&(this.b=new hK(KOt,this,4,7)),void sqn(this.b);case 5:return!this.c&&(this.c=new hK(KOt,this,5,8)),void sqn(this.c);case 6:return!this.a&&(this.a=new eU(FOt,this,6,6)),void sqn(this.a)}ofn(this,n)},MWn.Ib=function(){return lHn(this)},vX(b6n,"ElkEdgeImpl",352),wAn(439,1985,{105:1,413:1,202:1,439:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},co),MWn.Qg=function(n){return skn(this,n)},MWn._g=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 $L(xOt,this,5)),this.a;case 6:return VJ(this);case 7:return t?Pvn(this):this.i;case 8:return t?Svn(this):this.f;case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),this.e;case 11:return this.d}return Eyn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?skn(this,e):this.Cb.ih(this,-1-i,null,e)),QD(this,BB(n,79),e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),Ywn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),Ywn(this.e,n,e)}return BB(itn(BB(yan(this,16),26)||(CXn(),yOt),t),66).Nj().Qj(this,fgn(this),t-bX((CXn(),yOt)),n,e)},MWn.jh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new $L(xOt,this,5)),_pn(this.a,n,e);case 6:return QD(this,null,e);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),_pn(this.g,n,e);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),_pn(this.e,n,e)}return eSn(this,n,t,e)},MWn.lh=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!!VJ(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 m0(this,n)},MWn.sh=function(n,t){switch(n){case 1:return void Ien(this,Gy(MD(t)));case 2:return void Aen(this,Gy(MD(t)));case 3:return void Ten(this,Gy(MD(t)));case 4:return void Oen(this,Gy(MD(t)));case 5:return!this.a&&(this.a=new $L(xOt,this,5)),sqn(this.a),!this.a&&(this.a=new $L(xOt,this,5)),void pX(this.a,BB(t,14));case 6:return void FLn(this,BB(t,79));case 7:return void Nin(this,BB(t,82));case 8:return void Lin(this,BB(t,82));case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),sqn(this.g),!this.g&&(this.g=new hK(FOt,this,9,10)),void pX(this.g,BB(t,14));case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),sqn(this.e),!this.e&&(this.e=new hK(FOt,this,10,9)),void pX(this.e,BB(t,14));case 11:return void crn(this,SD(t))}rsn(this,n,t)},MWn.zh=function(){return CXn(),yOt},MWn.Bh=function(n){switch(n){case 1:return void Ien(this,0);case 2:return void Aen(this,0);case 3:return void Ten(this,0);case 4:return void Oen(this,0);case 5:return!this.a&&(this.a=new $L(xOt,this,5)),void sqn(this.a);case 6:return void FLn(this,null);case 7:return void Nin(this,null);case 8:return void Lin(this,null);case 9:return!this.g&&(this.g=new hK(FOt,this,9,10)),void sqn(this.g);case 10:return!this.e&&(this.e=new hK(FOt,this,10,9)),void sqn(this.e);case 11:return void crn(this,null)}zun(this,n)},MWn.Ib=function(){return ROn(this)},MWn.b=0,MWn.c=0,MWn.d=null,MWn.j=0,MWn.k=0,vX(b6n,"ElkEdgeSectionImpl",439),wAn(150,115,{105:1,92:1,90:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn._g=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab):U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e)):BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.oh=function(n){return hUn(this,n)},MWn.sh=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.uh=function(n){hgn(this,128,n)},MWn.zh=function(){return gWn(),b$t},MWn.Bh=function(n){if(0===n)return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){this.Bb|=1},MWn.Hh=function(n){return N_n(this,n)},MWn.Bb=0,vX(l6n,"EModelElementImpl",150),wAn(704,150,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},Rf),MWn.Ih=function(n,t){return qGn(this,n,t)},MWn.Jh=function(n){var t,e,i,r;if(this.a!=Utn(n)||0!=(256&n.Bb))throw Hp(new _y(m6n+n.zb+g6n));for(e=kY(n);0!=a4(e.a).i;){if(iyn(t=BB(eGn(e,0,cL(r=BB(Wtn(a4(e.a),0),87).c,88)?BB(r,26):(gWn(),d$t)),26)))return BB(i=Utn(t).Nh().Jh(t),49).th(n),i;e=kY(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new fq(n):new jH(n)},MWn.Kh=function(n,t){return xXn(this,n,t)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.a}return U9(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t,e)},MWn.hh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 1:return this.a&&(e=BB(this.a,49).ih(this,4,GOt,e)),Jhn(this,BB(n,235),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 1:return Jhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),h$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),h$t)),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return O3(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void xMn(this,BB(t,235))}Lbn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n),t)},MWn.zh=function(){return gWn(),h$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void xMn(this,null)}qfn(this,n-bX((gWn(),h$t)),itn(BB(yan(this,16),26)||h$t,n))},vX(l6n,"EFactoryImpl",704),wAn(k6n,704,{105:1,2014:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1},ao),MWn.Ih=function(n,t){switch(n.yj()){case 12:return BB(t,146).tg();case 13:return Bbn(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 4:return new uo;case 6:return new jm;case 7:return new Em;case 8:return new io;case 9:return new ro;case 10:return new co;case 11:return new so;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 13:case 12:return null;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(b6n,"ElkGraphFactoryImpl",k6n),wAn(438,150,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1}),MWn.Wg=function(){var n;return null==(n=lJ(qFn(BB(yan(this,16),26)||this.zh())))?(QM(),QM(),N$t):new Wx(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.ne()}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),w$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.ne=function(){return this.zb},MWn.Lh=function(n){Nrn(this,n)},MWn.Ib=function(){return kfn(this)},MWn.zb=null,vX(l6n,"ENamedElementImpl",438),wAn(179,438,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},vY),MWn.Qg=function(n){return wkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,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 Jz(this,HAt,this)),this.rb;case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?BB(this.Cb,235):null:QJ(this)}return U9(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 4:return this.sb&&(e=BB(this.sb,49).ih(this,1,HOt,e)),jfn(this,BB(n,471),e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),Ywn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),Ywn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?wkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 4:return jfn(this,null,e);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),_pn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),_pn(this.vb,n,e);case 7:return T_n(this,null,7,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),v$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),v$t)),n,e)},MWn.lh=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!!QJ(this)}return O3(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.oh=function(n){return LNn(this,n)||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Drn(this,SD(t));case 3:return void xrn(this,SD(t));case 4:return void iSn(this,BB(t,471));case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),sqn(this.rb),!this.rb&&(this.rb=new Jz(this,HAt,this)),void pX(this.rb,BB(t,14));case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),sqn(this.vb),!this.vb&&(this.vb=new eK(GOt,this,6,7)),void pX(this.vb,BB(t,14))}Lbn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n),t)},MWn.vh=function(n){var t,e;if(n&&this.rb)for(e=new AL(this.rb);e.e!=e.i.gc();)cL(t=kpn(e),351)&&(BB(t,351).w=null);hgn(this,64,n)},MWn.zh=function(){return gWn(),v$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Drn(this,null);case 3:return void xrn(this,null);case 4:return void iSn(this,null);case 5:return!this.rb&&(this.rb=new Jz(this,HAt,this)),void sqn(this.rb);case 6:return!this.vb&&(this.vb=new eK(GOt,this,6,7)),void sqn(this.vb)}qfn(this,n-bX((gWn(),v$t)),itn(BB(yan(this,16),26)||v$t,n))},MWn.Gh=function(){Tyn(this)},MWn.Mh=function(){return!this.rb&&(this.rb=new Jz(this,HAt,this)),this.rb},MWn.Nh=function(){return this.sb},MWn.Oh=function(){return this.ub},MWn.Ph=function(){return this.xb},MWn.Qh=function(){return this.yb},MWn.Rh=function(n){this.ub=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?kfn(this):((n=new fN(kfn(this))).a+=" (nsURI: ",cO(n,this.yb),n.a+=", nsPrefix: ",cO(n,this.xb),n.a+=")",n.a)},MWn.xb=null,MWn.yb=null,vX(l6n,"EPackageImpl",179),wAn(555,179,{105:1,2016:1,555:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1},sAn),MWn.q=!1,MWn.r=!1;var WOt=!1;vX(b6n,"ElkGraphPackageImpl",555),wAn(354,724,{105:1,413:1,160:1,137:1,470:1,354:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},uo),MWn.Qg=function(n){return hkn(this,n)},MWn._g=function(n,t,e){switch(n){case 7:return YJ(this);case 8:return this.a}return Rbn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?hkn(this,e):this.Cb.ih(this,-1-i,null,e)),VG(this,BB(n,160),e)):FTn(this,n,t,e)},MWn.jh=function(n,t,e){return 7==t?VG(this,null,e):run(this,n,t,e)},MWn.lh=function(n){switch(n){case 7:return!!YJ(this);case 8:return!mK("",this.a)}return fwn(this,n)},MWn.sh=function(n,t){switch(n){case 7:return void INn(this,BB(t,160));case 8:return void xin(this,SD(t))}zjn(this,n,t)},MWn.zh=function(){return CXn(),jOt},MWn.Bh=function(n){switch(n){case 7:return void INn(this,null);case 8:return void xin(this,"")}Dwn(this,n)},MWn.Ib=function(){return cPn(this)},MWn.a="",vX(b6n,"ElkLabelImpl",354),wAn(239,725,{105:1,413:1,82:1,160:1,33:1,470:1,239:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},jm),MWn.Qg=function(n){return Skn(this,n)},MWn._g=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a;case 11:return JJ(this);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),this.b;case 13:return hN(),!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),Ywn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),Ywn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?Skn(this,e):this.Cb.ih(this,-1-i,null,e)),zR(this,BB(n,33),e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),Ywn(this.b,n,e)}return djn(this,n,t,e)},MWn.jh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),_pn(this.c,n,e);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),_pn(this.a,n,e);case 11:return zR(this,null,e);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),_pn(this.b,n,e)}return gjn(this,n,t,e)},MWn.lh=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!!JJ(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new eU(UOt,this,10,11)),this.a.i>0}return Gon(this,n)},MWn.sh=function(n,t){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),sqn(this.c),!this.c&&(this.c=new eU(XOt,this,9,9)),void pX(this.c,BB(t,14));case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),sqn(this.a),!this.a&&(this.a=new eU(UOt,this,10,11)),void pX(this.a,BB(t,14));case 11:return void nNn(this,BB(t,33));case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),sqn(this.b),!this.b&&(this.b=new eU(_Ot,this,12,3)),void pX(this.b,BB(t,14))}LAn(this,n,t)},MWn.zh=function(){return CXn(),EOt},MWn.Bh=function(n){switch(n){case 9:return!this.c&&(this.c=new eU(XOt,this,9,9)),void sqn(this.c);case 10:return!this.a&&(this.a=new eU(UOt,this,10,11)),void sqn(this.a);case 11:return void nNn(this,null);case 12:return!this.b&&(this.b=new eU(_Ot,this,12,3)),void sqn(this.b)}xpn(this,n)},MWn.Ib=function(){return zRn(this)},vX(b6n,"ElkNodeImpl",239),wAn(186,725,{105:1,413:1,82:1,160:1,118:1,470:1,186:1,94:1,92:1,90:1,56:1,108:1,49:1,97:1,114:1,115:1},Em),MWn.Qg=function(n){return fkn(this,n)},MWn._g=function(n,t,e){return 9==n?WJ(this):Hvn(this,n,t,e)},MWn.hh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?fkn(this,e):this.Cb.ih(this,-1-i,null,e)),YD(this,BB(n,33),e)):djn(this,n,t,e)},MWn.jh=function(n,t,e){return 9==t?YD(this,null,e):gjn(this,n,t,e)},MWn.lh=function(n){return 9==n?!!WJ(this):Gon(this,n)},MWn.sh=function(n,t){9!==n?LAn(this,n,t):BLn(this,BB(t,33))},MWn.zh=function(){return CXn(),TOt},MWn.Bh=function(n){9!==n?xpn(this,n):BLn(this,null)},MWn.Ib=function(){return URn(this)},vX(b6n,"ElkPortImpl",186);var VOt=bq(B6n,"BasicEMap/Entry");wAn(1092,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,114:1,115:1},so),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){Din(this,BB(n,146))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Zpn(this,n,t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return vpn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return void Din(this,BB(t,146));case 1:return void _in(this,t)}yCn(this,n,t)},MWn.zh=function(){return CXn(),MOt},MWn.Bh=function(n){switch(n){case 0:return void Din(this,null);case 1:return void _in(this,null)}mPn(this,n)},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=n?nsn(n):0),this.a},MWn.dd=function(){return this.c},MWn.Th=function(n){this.a=n},MWn.ed=function(n){var t;return t=this.c,_in(this,n),t},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):(oO(oO(oO(n=new Ck,this.b?this.b.tg():zWn),e1n),kN(this.c)),n.a)},MWn.a=-1,MWn.c=null;var QOt,YOt,JOt,ZOt,nAt,tAt,eAt,iAt,rAt=vX(b6n,"ElkPropertyToValueMapEntryImpl",1092);wAn(984,1,{},lo),vX(G6n,"JsonAdapter",984),wAn(210,60,BVn,ek),vX(G6n,"JsonImportException",210),wAn(857,1,{},dkn),vX(G6n,"JsonImporter",857),wAn(891,1,{},aI),vX(G6n,"JsonImporter/lambda$0$Type",891),wAn(892,1,{},uI),vX(G6n,"JsonImporter/lambda$1$Type",892),wAn(900,1,{},$g),vX(G6n,"JsonImporter/lambda$10$Type",900),wAn(902,1,{},oI),vX(G6n,"JsonImporter/lambda$11$Type",902),wAn(903,1,{},sI),vX(G6n,"JsonImporter/lambda$12$Type",903),wAn(909,1,{},fQ),vX(G6n,"JsonImporter/lambda$13$Type",909),wAn(908,1,{},hQ),vX(G6n,"JsonImporter/lambda$14$Type",908),wAn(904,1,{},hI),vX(G6n,"JsonImporter/lambda$15$Type",904),wAn(905,1,{},fI),vX(G6n,"JsonImporter/lambda$16$Type",905),wAn(906,1,{},lI),vX(G6n,"JsonImporter/lambda$17$Type",906),wAn(907,1,{},bI),vX(G6n,"JsonImporter/lambda$18$Type",907),wAn(912,1,{},Lg),vX(G6n,"JsonImporter/lambda$19$Type",912),wAn(893,1,{},Ng),vX(G6n,"JsonImporter/lambda$2$Type",893),wAn(910,1,{},xg),vX(G6n,"JsonImporter/lambda$20$Type",910),wAn(911,1,{},Dg),vX(G6n,"JsonImporter/lambda$21$Type",911),wAn(915,1,{},Rg),vX(G6n,"JsonImporter/lambda$22$Type",915),wAn(913,1,{},Kg),vX(G6n,"JsonImporter/lambda$23$Type",913),wAn(914,1,{},_g),vX(G6n,"JsonImporter/lambda$24$Type",914),wAn(917,1,{},Fg),vX(G6n,"JsonImporter/lambda$25$Type",917),wAn(916,1,{},Bg),vX(G6n,"JsonImporter/lambda$26$Type",916),wAn(918,1,lVn,wI),MWn.td=function(n){E9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$27$Type",918),wAn(919,1,lVn,dI),MWn.td=function(n){T9(this.b,this.a,SD(n))},vX(G6n,"JsonImporter/lambda$28$Type",919),wAn(920,1,{},gI),vX(G6n,"JsonImporter/lambda$29$Type",920),wAn(896,1,{},Hg),vX(G6n,"JsonImporter/lambda$3$Type",896),wAn(921,1,{},pI),vX(G6n,"JsonImporter/lambda$30$Type",921),wAn(922,1,{},qg),vX(G6n,"JsonImporter/lambda$31$Type",922),wAn(923,1,{},Gg),vX(G6n,"JsonImporter/lambda$32$Type",923),wAn(924,1,{},zg),vX(G6n,"JsonImporter/lambda$33$Type",924),wAn(925,1,{},Ug),vX(G6n,"JsonImporter/lambda$34$Type",925),wAn(859,1,{},Xg),vX(G6n,"JsonImporter/lambda$35$Type",859),wAn(929,1,{},MB),vX(G6n,"JsonImporter/lambda$36$Type",929),wAn(926,1,lVn,Wg),MWn.td=function(n){Y4(this.a,BB(n,469))},vX(G6n,"JsonImporter/lambda$37$Type",926),wAn(927,1,lVn,SI),MWn.td=function(n){lO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$38$Type",927),wAn(928,1,lVn,PI),MWn.td=function(n){bO(this.a,this.b,BB(n,202))},vX(G6n,"JsonImporter/lambda$39$Type",928),wAn(894,1,{},Vg),vX(G6n,"JsonImporter/lambda$4$Type",894),wAn(930,1,lVn,Qg),MWn.td=function(n){J4(this.a,BB(n,8))},vX(G6n,"JsonImporter/lambda$40$Type",930),wAn(895,1,{},Yg),vX(G6n,"JsonImporter/lambda$5$Type",895),wAn(899,1,{},Jg),vX(G6n,"JsonImporter/lambda$6$Type",899),wAn(897,1,{},Zg),vX(G6n,"JsonImporter/lambda$7$Type",897),wAn(898,1,{},np),vX(G6n,"JsonImporter/lambda$8$Type",898),wAn(901,1,{},tp),vX(G6n,"JsonImporter/lambda$9$Type",901),wAn(948,1,lVn,ep),MWn.td=function(n){nW(this.a,new GX(SD(n)))},vX(G6n,"JsonMetaDataConverter/lambda$0$Type",948),wAn(949,1,lVn,ip),MWn.td=function(n){_X(this.a,BB(n,237))},vX(G6n,"JsonMetaDataConverter/lambda$1$Type",949),wAn(950,1,lVn,rp),MWn.td=function(n){t1(this.a,BB(n,149))},vX(G6n,"JsonMetaDataConverter/lambda$2$Type",950),wAn(951,1,lVn,cp),MWn.td=function(n){FX(this.a,BB(n,175))},vX(G6n,"JsonMetaDataConverter/lambda$3$Type",951),wAn(237,22,{3:1,35:1,22:1,237:1},MI);var cAt,aAt=Ben(IJn,"GraphFeature",237,Unt,Ktn,pB);wAn(13,1,{35:1,146:1},up,iR,$O,XA),MWn.wd=function(n){return pL(this,BB(n,146))},MWn.Fb=function(n){return EY(this,n)},MWn.wg=function(){return mpn(this)},MWn.tg=function(){return this.b},MWn.Hb=function(){return vvn(this.b)},MWn.Ib=function(){return this.b},vX(IJn,"Property",13),wAn(818,1,MYn,ap),MWn.ue=function(n,t){return _ln(this,BB(n,94),BB(t,94))},MWn.Fb=function(n){return this===n},MWn.ve=function(){return new nw(this)},vX(IJn,"PropertyHolderComparator",818),wAn(695,1,QWn,sp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return A9(this)},MWn.Qb=function(){uE()},MWn.Ob=function(){return!!this.a},vX(c8n,"ElkGraphUtil/AncestorIterator",695);var uAt=bq(B6n,"EList");wAn(67,52,{20:1,28:1,52:1,14:1,15:1,67:1,58:1}),MWn.Vc=function(n,t){sln(this,n,t)},MWn.Fc=function(n){return f9(this,n)},MWn.Wc=function(n,t){return oon(this,n,t)},MWn.Gc=function(n){return pX(this,n)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.ai=function(){return!0},MWn.bi=function(n,t){},MWn.ci=function(){},MWn.di=function(n,t){L8(this,n,t)},MWn.ei=function(n,t,e){},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.Fb=function(n){return QDn(this,n)},MWn.Hb=function(){return Mun(this)},MWn.hi=function(){return!1},MWn.Kc=function(){return new AL(this)},MWn.Yc=function(){return new cx(this)},MWn.Zc=function(n){var t;if(t=this.gc(),n<0||n>t)throw Hp(new tK(n,t));return new GU(this,n)},MWn.ji=function(n,t){this.ii(n,this.Xc(t))},MWn.Mc=function(n){return snn(this,n)},MWn.li=function(n,t){return t},MWn._c=function(n,t){return ovn(this,n,t)},MWn.Ib=function(){return Jbn(this)},MWn.ni=function(){return!0},MWn.oi=function(n,t){return xsn(this,t)},vX(B6n,"AbstractEList",67),wAn(63,67,h8n,go,gtn,jcn),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Ifn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.$b=function(){a6(this)},MWn.Hc=function(n){return Sjn(this,n)},MWn.Xb=function(n){return Wtn(this,n)},MWn.qi=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)<n&&(t=n),this.g=this.ri(t),null!=i&&aHn(i,0,this.g,0,this.i))},MWn.Xc=function(n){return Wyn(this,n)},MWn.dc=function(){return 0==this.i},MWn.ii=function(n,t){return YIn(this,n,t)},MWn.ri=function(n){return x8(Ant,HWn,1,n,5,1)},MWn.ki=function(n){return this.g[n]},MWn.$c=function(n){return Lyn(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.gc=function(){return this.i},MWn.Pc=function(){return N3(this)},MWn.Qc=function(n){return Qwn(this,n)},MWn.i=0;var oAt=vX(B6n,"BasicEList",63),sAt=bq(B6n,"TreeIterator");wAn(694,63,f8n),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&BB(this.g[this.i-1],47).Ob():tZ(this)},MWn.Pb=function(){return aLn(this)},MWn.Qb=function(){if(!this.e)throw Hp(new Fy("There is no valid object to remove."));this.e.Qb()},MWn.c=!1,vX(B6n,"AbstractTreeIterator",694),wAn(685,694,f8n,OA),MWn.si=function(n){var t;return cL(t=BB(n,56).Wg().Kc(),279)&&BB(t,279).Nk(new bo),t},vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator",685),wAn(952,1,{},bo),vX(c8n,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",952);var hAt,fAt,lAt,bAt=vX(c8n,"ElkReflect",null);wAn(889,1,i5n,wo),MWn.vg=function(n){return hZ(),B6(BB(n,174))},vX(c8n,"ElkReflect/lambda$0$Type",889),bq(B6n,"ResourceLocator"),wAn(1051,1,{}),vX(B6n,"DelegatingResourceLocator",1051),wAn(1052,1051,{}),vX("org.eclipse.emf.common","EMFPlugin",1052);var wAt,dAt=bq(J8n,"Adapter"),gAt=bq(J8n,"Notification");wAn(1153,1,Z8n),MWn.ti=function(){return this.d},MWn.ui=function(n){},MWn.vi=function(n){this.d=n},MWn.wi=function(n){this.d==n&&(this.d=null)},MWn.d=null,vX(i6n,"AdapterImpl",1153),wAn(1995,67,n9n),MWn.Vh=function(n,t){return kwn(this,n,t)},MWn.Wh=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Vi(),i=n.Kc();i.Ob();)e=i.Pb(),this.Ii(this.oi(t,e)),++t;return!0},MWn.Xh=function(n,t){ZD(this,n,t)},MWn.Yh=function(n){eW(this,n)},MWn.Gi=function(){return this.Ji()},MWn.$b=function(){JD(this,this.Vi(),this.Wi())},MWn.Hc=function(n){return this.Li(n)},MWn.Ic=function(n){return this.Mi(n)},MWn.Hi=function(n,t){this.Si().jm()},MWn.Ii=function(n){this.Si().jm()},MWn.Ji=function(){return this.Si()},MWn.Ki=function(){this.Si().jm()},MWn.Li=function(n){return this.Si().jm()},MWn.Mi=function(n){return this.Si().jm()},MWn.Ni=function(n){return this.Si().jm()},MWn.Oi=function(n){return this.Si().jm()},MWn.Pi=function(){return this.Si().jm()},MWn.Qi=function(n){return this.Si().jm()},MWn.Ri=function(){return this.Si().jm()},MWn.Ti=function(n){return this.Si().jm()},MWn.Ui=function(n,t){return this.Si().jm()},MWn.Vi=function(){return this.Si().jm()},MWn.Wi=function(){return this.Si().jm()},MWn.Xi=function(n){return this.Si().jm()},MWn.Yi=function(){return this.Si().jm()},MWn.Fb=function(n){return this.Ni(n)},MWn.Xb=function(n){return this.li(n,this.Oi(n))},MWn.Hb=function(){return this.Pi()},MWn.Xc=function(n){return this.Qi(n)},MWn.dc=function(){return this.Ri()},MWn.ii=function(n,t){return AMn(this,n,t)},MWn.ki=function(n){return this.Oi(n)},MWn.$c=function(n){return wq(this,n)},MWn.Mc=function(n){var t;return(t=this.Xc(n))>=0&&(this.$c(t),!0)},MWn.mi=function(n,t){return this.Ui(n,this.oi(n,t))},MWn.gc=function(){return this.Vi()},MWn.Pc=function(){return this.Wi()},MWn.Qc=function(n){return this.Xi(n)},MWn.Ib=function(){return this.Yi()},vX(B6n,"DelegatingEList",1995),wAn(1996,1995,n9n),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){vqn(this)},MWn.Zi=function(n,t,e,i,r){return new NY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return!this.Ri()},MWn.ii=function(n,t){var e,i;return this.ej()?(i=this.fj(),e=AMn(this,n,t),this.$i(this.Zi(7,iln(t),e,n,i)),e):AMn(this,n,t)},MWn.$c=function(n){var t,e,i,r;return this.ej()?(e=null,i=this.fj(),t=this.Zi(4,r=wq(this,n),null,n,i),this.bj()&&r?(e=this.dj(r,e))?(e.Ei(t),e.Fi()):this.$i(t):e?(e.Ei(t),e.Fi()):this.$i(t),r):(r=wq(this,n),this.bj()&&r&&(e=this.dj(r,null))&&e.Fi(),r)},MWn.mi=function(n,t){return oFn(this,n,t)},vX(i6n,"DelegatingNotifyingListImpl",1996),wAn(143,1,t9n),MWn.Ei=function(n){return KEn(this,n)},MWn.Fi=function(){$7(this)},MWn.xi=function(){return this.d},MWn._i=function(){return null},MWn.gj=function(){return null},MWn.yi=function(n){return-1},MWn.zi=function(){return Rxn(this)},MWn.Ai=function(){return null},MWn.Bi=function(){return Kxn(this)},MWn.Ci=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},MWn.hj=function(){return!1},MWn.Di=function(n){var t,e,i,r,c,a,u,o;switch(this.d){case 1:case 2:switch(n.xi()){case 1:case 2:if(GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0}case 4:if(4===n.xi()&&GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null))return a=tGn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.Ci(),this.d=6,o=new gtn(2),c<=i?(f9(o,this.n),f9(o,n.Bi()),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=c,i+1])):(f9(o,n.Bi()),f9(o,this.n),this.g=Pun(Gk(ANt,1),hQn,25,15,[this.o=i,c])),this.n=o,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.xi()&&GI(n.Ai())===GI(this.Ai())&&this.yi(null)==n.yi(null)){for(a=tGn(this),i=n.Ci(),u=BB(this.g,48),e=x8(ANt,hQn,25,u.length+1,15,1),t=0;t<u.length&&(r=u[t])<=i;)e[t++]=r,++i;for(BB(this.n,15).Vc(t,n.Bi()),e[t]=i;++t<e.length;)e[t]=u[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},MWn.Ib=function(){var n,t,e;switch((e=new fN(nE(this.gm)+"@"+(nsn(this)>>>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:mE(e,this.d)}if(lKn(this)&&(e.a+=", touch: true"),e.a+=", position: ",mE(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",rO(e,this.Ai()),e.a+=", feature: ",rO(e,this._i()),e.a+=", oldValue: ",rO(e,Kxn(this)),e.a+=", newValue: ",6==this.d&&cL(this.g,48)){for(t=BB(this.g,48),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=FWn);e.a+="]"}else rO(e,Rxn(this));return e.a+=", isTouch: ",yE(e,lKn(this)),e.a+=", wasSet: ",yE(e,tGn(this)),e.a+=")",e.a},MWn.d=0,MWn.e=0,MWn.f=0,MWn.j=0,MWn.k=0,MWn.o=0,MWn.p=0,vX(i6n,"NotificationImpl",143),wAn(1167,143,t9n,NY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"DelegatingNotifyingListImpl/1",1167),wAn(242,63,h8n,po,Fj),MWn.Fc=function(n){return Mwn(this,BB(n,366))},MWn.Ei=function(n){return Mwn(this,n)},MWn.Fi=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=BB(this.g[n],366)).Ai())&&-1!=t.xi()&&BB(e,92).Ng(t)},MWn.ri=function(n){return x8(gAt,HWn,366,n,0,1)},vX(i6n,"NotificationChainImpl",242),wAn(1378,90,e6n),MWn.Kg=function(){return this.e},MWn.Mg=function(){return 0!=(1&this.f)},MWn.f=1,vX(i6n,"NotifierImpl",1378),wAn(1993,63,h8n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return this.Vh(this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.ai=function(){return!this.bj()},MWn.$b=function(){sqn(this)},MWn.Zi=function(n,t,e,i,r){return new xY(this,n,t,e,i,r)},MWn.$i=function(n){ban(this.Ai(),n)},MWn._i=function(){return null},MWn.aj=function(){return-1},MWn.Ai=function(){return null},MWn.bj=function(){return!1},MWn.ij=function(){return!1},MWn.cj=function(n,t){return t},MWn.dj=function(n,t){return t},MWn.ej=function(){return!1},MWn.fj=function(){return 0!=this.i},MWn.ii=function(n,t){return Iln(this,n,t)},MWn.$c=function(n){return fDn(this,n)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.jj=function(n,t){return t},MWn.kj=function(n,t){return t},MWn.lj=function(n,t,e){return e},vX(i6n,"NotifyingListImpl",1993),wAn(1166,143,t9n,xY),MWn._i=function(){return this.a._i()},MWn.yi=function(n){return this.a.aj()},MWn.Ai=function(){return this.a.Ai()},vX(i6n,"NotifyingListImpl/1",1166),wAn(953,63,h8n,aR),MWn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new $q(this),this.a=this.j),FT(this.b,n)):Sjn(this,n)},MWn.ni=function(){return!0},MWn.a=0,vX(B6n,"AbstractEList/1",953),wAn(295,73,NQn,tK),vX(B6n,"AbstractEList/BasicIndexOutOfBoundsException",295),wAn(40,1,QWn,AL),MWn.Nb=function(n){fU(this,n)},MWn.mj=function(){if(this.i.j!=this.f)throw Hp(new vv)},MWn.nj=function(){return kpn(this)},MWn.Ob=function(){return this.e!=this.i.gc()},MWn.Pb=function(){return this.nj()},MWn.Qb=function(){Qjn(this)},MWn.e=0,MWn.f=0,MWn.g=-1,vX(B6n,"AbstractEList/EIterator",40),wAn(278,40,cVn,cx,GU),MWn.Qb=function(){Qjn(this)},MWn.Rb=function(n){odn(this,n)},MWn.oj=function(){var n;try{return n=this.d.Xb(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.pj=function(n){kmn(this,n)},MWn.Sb=function(){return 0!=this.e},MWn.Tb=function(){return this.e},MWn.Ub=function(){return this.oj()},MWn.Vb=function(){return this.e-1},MWn.Wb=function(n){this.pj(n)},vX(B6n,"AbstractEList/EListIterator",278),wAn(341,40,QWn,ax),MWn.nj=function(){return jpn(this)},MWn.Qb=function(){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEIterator",341),wAn(385,278,cVn,ux,RK),MWn.Rb=function(n){throw Hp(new pv)},MWn.nj=function(){var n;try{return n=this.c.ki(this.e),this.mj(),this.g=this.e++,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.oj=function(){var n;try{return n=this.c.ki(--this.e),this.mj(),this.g=this.e,n}catch(t){throw cL(t=lun(t),73)?(this.mj(),Hp(new yv)):Hp(t)}},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"AbstractEList/NonResolvingEListIterator",385),wAn(1982,67,r9n),MWn.Vh=function(n,t){var e,i,r,c,a,u,o,s,h;if(0!=(i=t.gc())){for(e=Psn(this,(s=null==(o=BB(yan(this.a,4),126))?0:o.length)+i),(h=s-n)>0&&aHn(o,n,e,n+i,h),u=t.Kc(),c=0;c<i;++c)JA(e,n+c,xsn(this,a=u.Pb()));for(Fgn(this,e),r=0;r<i;++r)a=e[n],this.bi(n,a),++n;return!0}return++this.j,!1},MWn.Wh=function(n){var t,e,i,r,c,a,u,o,s;if(0!=(i=n.gc())){for(t=Psn(this,s=(o=null==(e=BB(yan(this.a,4),126))?0:e.length)+i),u=n.Kc(),c=o;c<s;++c)JA(t,c,xsn(this,a=u.Pb()));for(Fgn(this,t),r=o;r<s;++r)a=t[r],this.bi(r,a);return!0}return++this.j,!1},MWn.Xh=function(n,t){var e,i,r,c;e=Psn(this,(r=null==(i=BB(yan(this.a,4),126))?0:i.length)+1),c=xsn(this,t),n!=r&&aHn(i,n,e,n+1,r-n),$X(e,n,c),Fgn(this,e),this.bi(n,t)},MWn.Yh=function(n){var t,e,i;JA(t=Psn(this,(i=null==(e=BB(yan(this.a,4),126))?0:e.length)+1),i,xsn(this,n)),Fgn(this,t),this.bi(i,n)},MWn.Zh=function(){return new S5(this)},MWn.$h=function(){return new Yz(this)},MWn._h=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new BW(this,n)},MWn.$b=function(){var n,t;++this.j,t=null==(n=BB(yan(this.a,4),126))?0:n.length,Fgn(this,null),L8(this,t,n)},MWn.Hc=function(n){var t,e,i,r;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(Nfn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(GI(e[i])===GI(n))return!0;return!1},MWn.Xb=function(n){var t,e;if(n>=(e=null==(t=BB(yan(this.a,4),126))?0:t.length))throw Hp(new tK(n,e));return t[n]},MWn.Xc=function(n){var t,e,i;if(null!=(t=BB(yan(this.a,4),126)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(Nfn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(GI(t[e])===GI(n))return e;return-1},MWn.dc=function(){return null==BB(yan(this.a,4),126)},MWn.Kc=function(){return new M5(this)},MWn.Yc=function(){return new Qz(this)},MWn.Zc=function(n){var t,e;if(e=null==(t=BB(yan(this.a,4),126))?0:t.length,n<0||n>e)throw Hp(new tK(n,e));return new FW(this,n)},MWn.ii=function(n,t){var e,i,r;if(n>=(r=null==(e=$dn(this))?0:e.length))throw Hp(new Ay(u8n+n+o8n+r));if(t>=r)throw Hp(new Ay(s8n+t+o8n+r));return i=e[t],n!=t&&(n<t?aHn(e,n,e,n+1,t-n):aHn(e,t+1,e,t,n-t),$X(e,n,i),Fgn(this,e)),i},MWn.ki=function(n){return BB(yan(this.a,4),126)[n]},MWn.$c=function(n){return EOn(this,n)},MWn.mi=function(n,t){var e,i;return i=(e=$dn(this))[n],JA(e,n,xsn(this,t)),Fgn(this,e),i},MWn.gc=function(){var n;return null==(n=BB(yan(this.a,4),126))?0:n.length},MWn.Pc=function(){var n,t,e;return e=null==(n=BB(yan(this.a,4),126))?0:n.length,t=x8(dAt,i9n,415,e,0,1),e>0&&aHn(n,0,t,0,e),t},MWn.Qc=function(n){var t,e;return(e=null==(t=BB(yan(this.a,4),126))?0:t.length)>0&&(n.length<e&&(n=Den(tsn(n).c,e)),aHn(t,0,n,0,e)),n.length>e&&$X(n,e,null),n},vX(B6n,"ArrayDelegatingEList",1982),wAn(1038,40,QWn,M5),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EIterator",1038),wAn(706,278,cVn,Qz,FW),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},MWn.pj=function(n){kmn(this,n),this.a=BB(yan(this.b.a,4),126)},MWn.Qb=function(){Qjn(this),this.a=BB(yan(this.b.a,4),126)},vX(B6n,"ArrayDelegatingEList/EListIterator",706),wAn(1039,341,QWn,S5),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEIterator",1039),wAn(707,385,cVn,Yz,BW),MWn.mj=function(){if(this.b.j!=this.f||GI(BB(yan(this.b.a,4),126))!==GI(this.a))throw Hp(new vv)},vX(B6n,"ArrayDelegatingEList/NonResolvingEListIterator",707),wAn(606,295,NQn,LO),vX(B6n,"BasicEList/BasicIndexOutOfBoundsException",606),wAn(696,63,h8n,DI),MWn.Vc=function(n,t){throw Hp(new pv)},MWn.Fc=function(n){throw Hp(new pv)},MWn.Wc=function(n,t){throw Hp(new pv)},MWn.Gc=function(n){throw Hp(new pv)},MWn.$b=function(){throw Hp(new pv)},MWn.qi=function(n){throw Hp(new pv)},MWn.Kc=function(){return this.Zh()},MWn.Yc=function(){return this.$h()},MWn.Zc=function(n){return this._h(n)},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.$c=function(n){throw Hp(new pv)},MWn.Mc=function(n){throw Hp(new pv)},MWn._c=function(n,t){throw Hp(new pv)},vX(B6n,"BasicEList/UnmodifiableEList",696),wAn(705,1,{3:1,20:1,14:1,15:1,58:1,589:1}),MWn.Vc=function(n,t){Q$(this,n,BB(t,42))},MWn.Fc=function(n){return aD(this,BB(n,42))},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return BB(Wtn(this.c,n),133)},MWn.ii=function(n,t){return BB(this.c.ii(n,t),42)},MWn.ji=function(n,t){Y$(this,n,BB(t,42))},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BB(this.c.$c(n),42)},MWn._c=function(n,t){return uX(this,n,BB(t,42))},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.Wc=function(n,t){return this.c.Wc(n,t)},MWn.Gc=function(n){return this.c.Gc(n)},MWn.$b=function(){this.c.$b()},MWn.Hc=function(n){return this.c.Hc(n)},MWn.Ic=function(n){return oun(this.c,n)},MWn.qj=function(){var n,t;if(null==this.d){for(this.d=x8(oAt,c9n,63,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)Ivn(this,BB(n.nj(),133));this.e=t}},MWn.Fb=function(n){return NK(this,n)},MWn.Hb=function(){return Mun(this.c)},MWn.Xc=function(n){return this.c.Xc(n)},MWn.rj=function(){this.c=new hp(this)},MWn.dc=function(){return 0==this.f},MWn.Kc=function(){return this.c.Kc()},MWn.Yc=function(){return this.c.Yc()},MWn.Zc=function(n){return this.c.Zc(n)},MWn.sj=function(){return A8(this)},MWn.tj=function(n,t,e){return new SB(n,t,e)},MWn.uj=function(){return new vo},MWn.Mc=function(n){return hin(this,n)},MWn.gc=function(){return this.f},MWn.bd=function(n,t){return new s1(this.c,n,t)},MWn.Pc=function(){return this.c.Pc()},MWn.Qc=function(n){return this.c.Qc(n)},MWn.Ib=function(){return Jbn(this.c)},MWn.e=0,MWn.f=0,vX(B6n,"BasicEMap",705),wAn(1033,63,h8n,hp),MWn.bi=function(n,t){Av(this,BB(t,133))},MWn.ei=function(n,t,e){var i;++(i=this,BB(t,133),i).a.e},MWn.fi=function(n,t){$v(this,BB(t,133))},MWn.gi=function(n,t,e){VN(this,BB(t,133),BB(e,133))},MWn.di=function(n,t){aan(this.a)},vX(B6n,"BasicEMap/1",1033),wAn(1034,63,h8n,vo),MWn.ri=function(n){return x8(vAt,a9n,612,n,0,1)},vX(B6n,"BasicEMap/2",1034),wAn(1035,nVn,tVn,fp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return rdn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Bj(this.a)},MWn.Mc=function(n){var t;return t=this.a.f,Wdn(this.a,n),this.a.f!=t},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/3",1035),wAn(1036,28,ZWn,lp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){return YDn(this.a,n)},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new Hj(this.a)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/4",1036),wAn(1037,nVn,tVn,bp),MWn.$b=function(){this.a.c.$b()},MWn.Hc=function(n){var t,e,i,r,c,a,u,o,s;if(this.a.f>0&&cL(n,42)&&(this.a.qj(),r=null==(u=(o=BB(n,42)).cd())?0:nsn(u),c=eR(this.a,r),t=this.a.d[c]))for(e=BB(t.g,367),s=t.i,a=0;a<s;++a)if((i=e[a]).Sh()==r&&i.Fb(o))return!0;return!1},MWn.Kc=function(){return 0==this.a.f?(dD(),pAt.a):new pQ(this.a)},MWn.Mc=function(n){return IAn(this,n)},MWn.gc=function(){return this.a.f},vX(B6n,"BasicEMap/5",1037),wAn(613,1,QWn,pQ),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return-1!=this.b},MWn.Pb=function(){var n;if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.b)throw Hp(new yv);return this.d=this.a,this.e=this.b,ujn(this),n=BB(this.f.d[this.d].g[this.e],133),this.vj(n)},MWn.Qb=function(){if(this.f.e!=this.c)throw Hp(new vv);if(-1==this.e)throw Hp(new dv);this.f.c.Mc(Wtn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},MWn.vj=function(n){return n},MWn.a=0,MWn.b=-1,MWn.c=0,MWn.d=0,MWn.e=0,vX(B6n,"BasicEMap/BasicEMapIterator",613),wAn(1031,613,QWn,Bj),MWn.vj=function(n){return n.cd()},vX(B6n,"BasicEMap/BasicEMapKeyIterator",1031),wAn(1032,613,QWn,Hj),MWn.vj=function(n){return n.dd()},vX(B6n,"BasicEMap/BasicEMapValueIterator",1032),wAn(1030,1,JWn,wp),MWn.wc=function(n){nan(this,n)},MWn.yc=function(n,t,e){return Zln(this,n,t,e)},MWn.$b=function(){this.a.c.$b()},MWn._b=function(n){return BI(this,n)},MWn.uc=function(n){return YDn(this.a,n)},MWn.vc=function(){return I8(this.a)},MWn.Fb=function(n){return NK(this.a,n)},MWn.xc=function(n){return cdn(this.a,n)},MWn.Hb=function(){return Mun(this.a.c)},MWn.dc=function(){return 0==this.a.f},MWn.ec=function(){return O8(this.a)},MWn.zc=function(n,t){return vjn(this.a,n,t)},MWn.Bc=function(n){return Wdn(this.a,n)},MWn.gc=function(){return this.a.f},MWn.Ib=function(){return Jbn(this.a.c)},MWn.Cc=function(){return C8(this.a)},vX(B6n,"BasicEMap/DelegatingMap",1030),wAn(612,1,{42:1,133:1,612:1},SB),MWn.Fb=function(n){var t;return!!cL(n,42)&&(t=BB(n,42),(null!=this.b?Nfn(this.b,t.cd()):GI(this.b)===GI(t.cd()))&&(null!=this.c?Nfn(this.c,t.dd()):GI(this.c)===GI(t.dd())))},MWn.Sh=function(){return this.a},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return this.a^(null==this.c?0:nsn(this.c))},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){throw Hp(new sv)},MWn.ed=function(n){var t;return t=this.c,this.c=n,t},MWn.Ib=function(){return this.b+"->"+this.c},MWn.a=0;var pAt,vAt=vX(B6n,"BasicEMap/EntryImpl",612);wAn(536,1,{},oo),vX(B6n,"BasicEMap/View",536),wAn(768,1,{}),MWn.Fb=function(n){return NAn((SQ(),set),n)},MWn.Hb=function(){return Fon((SQ(),set))},MWn.Ib=function(){return LMn((SQ(),set))},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList",768),wAn(1312,1,cVn,mo),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Pb=function(){throw Hp(new yv)},MWn.Tb=function(){return 0},MWn.Ub=function(){throw Hp(new yv)},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Wb=function(n){throw Hp(new pv)},vX(B6n,"ECollections/BasicEmptyUnmodifiableEList/1",1312),wAn(1310,768,{20:1,14:1,15:1,58:1},Tm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},vX(B6n,"ECollections/EmptyUnmodifiableEList",1310),wAn(1311,768,{20:1,14:1,15:1,58:1,589:1},Mm),MWn.Vc=function(n,t){NE()},MWn.Fc=function(n){return xE()},MWn.Wc=function(n,t){return DE()},MWn.Gc=function(n){return RE()},MWn.$b=function(){KE()},MWn.Hc=function(n){return!1},MWn.Ic=function(n){return!1},MWn.Jc=function(n){e5(this,n)},MWn.Xb=function(n){return yO((SQ(),n)),null},MWn.Xc=function(n){return-1},MWn.dc=function(){return!0},MWn.Kc=function(){return this.a},MWn.Yc=function(){return this.a},MWn.Zc=function(n){return this.a},MWn.ii=function(n,t){return _E()},MWn.ji=function(n,t){FE()},MWn.Lc=function(){return new Rq(null,new w1(this,16))},MWn.$c=function(n){return BE()},MWn.Mc=function(n){return HE()},MWn._c=function(n,t){return qE()},MWn.gc=function(){return 0},MWn.ad=function(n){_rn(this,n)},MWn.Nc=function(){return new w1(this,16)},MWn.Oc=function(){return new Rq(null,new w1(this,16))},MWn.bd=function(n,t){return SQ(),new s1(set,n,t)},MWn.Pc=function(){return cz((SQ(),set))},MWn.Qc=function(n){return SQ(),Emn(set,n)},MWn.sj=function(){return SQ(),SQ(),het},vX(B6n,"ECollections/EmptyUnmodifiableEMap",1311);var mAt,yAt=bq(B6n,"Enumerator");wAn(281,1,{281:1},rRn),MWn.Fb=function(n){var t;return this===n||!!cL(n,281)&&(t=BB(n,281),this.f==t.f&&vG(this.i,t.i)&&pG(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&pG(this.d,t.d)&&pG(this.g,t.g)&&pG(this.e,t.e)&&Spn(this,t))},MWn.Hb=function(){return this.f},MWn.Ib=function(){return M_n(this)},MWn.f=0;var kAt,jAt,EAt,TAt=0,MAt=0,SAt=0,PAt=0,CAt=0,IAt=0,OAt=0,AAt=0,$At=0,LAt=0,NAt=0,xAt=0,DAt=0;vX(B6n,"URI",281),wAn(1091,43,tYn,Sm),MWn.zc=function(n,t){return BB(mZ(this,SD(n),BB(t,281)),281)},vX(B6n,"URI/URICache",1091),wAn(497,63,h8n,fo,rG),MWn.hi=function(){return!0},vX(B6n,"UniqueEList",497),wAn(581,60,BVn,L7),vX(B6n,"WrappedException",581);var RAt,KAt=bq(q5n,s9n),_At=bq(q5n,h9n),FAt=bq(q5n,f9n),BAt=bq(q5n,l9n),HAt=bq(q5n,b9n),qAt=bq(q5n,"EClass"),GAt=bq(q5n,"EDataType");wAn(1183,43,tYn,Pm),MWn.xc=function(n){return XI(n)?SJ(this,n):qI(AY(this.f,n))},vX(q5n,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1183);var zAt,UAt,XAt=bq(q5n,"EEnum"),WAt=bq(q5n,w9n),VAt=bq(q5n,d9n),QAt=bq(q5n,g9n),YAt=bq(q5n,p9n),JAt=bq(q5n,v9n);wAn(1029,1,{},ho),MWn.Ib=function(){return"NIL"},vX(q5n,"EStructuralFeature/Internal/DynamicValueHolder/1",1029),wAn(1028,43,tYn,Cm),MWn.xc=function(n){return XI(n)?SJ(this,n):qI(AY(this.f,n))},vX(q5n,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1028);var ZAt,n$t,t$t,e$t,i$t,r$t,c$t,a$t,u$t,o$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,v$t,m$t,y$t,k$t,j$t,E$t,T$t,M$t,S$t,P$t,C$t,I$t,O$t=bq(q5n,m9n),A$t=bq(q5n,"EValidator/PatternMatcher"),$$t=bq(y9n,"FeatureMap/Entry");wAn(535,1,{72:1},CI),MWn.ak=function(){return this.a},MWn.dd=function(){return this.b},vX(l6n,"BasicEObjectImpl/1",535),wAn(1027,1,k9n,II),MWn.Wj=function(n){return V5(this.a,this.b,n)},MWn.fj=function(){return ZJ(this.a,this.b)},MWn.Wb=function(n){NJ(this.a,this.b,n)},MWn.Xj=function(){PW(this.a,this.b)},vX(l6n,"BasicEObjectImpl/4",1027),wAn(1983,1,{108:1}),MWn.bk=function(n){this.e=0==n?M$t:x8(Ant,HWn,1,n,5,1)},MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.ck=function(){return this.c},MWn.dk=function(){throw Hp(new pv)},MWn.ek=function(){throw Hp(new pv)},MWn.fk=function(){return this.d},MWn.gk=function(){return null!=this.e},MWn.hk=function(n){this.c=n},MWn.ik=function(n){throw Hp(new pv)},MWn.jk=function(n){throw Hp(new pv)},MWn.kk=function(n){this.d=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderBaseImpl",1983),wAn(185,1983,{108:1},Kf),MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},vX(l6n,"BasicEObjectImpl/EPropertiesHolderImpl",185),wAn(506,97,f6n,yo),MWn.Kg=function(){return this.f},MWn.Pg=function(){return this.k},MWn.Rg=function(n,t){this.g=n,this.i=t},MWn.Tg=function(){return 0==(2&this.j)?this.zh():this.ph().ck()},MWn.Vg=function(){return this.i},MWn.Mg=function(){return 0!=(1&this.j)},MWn.eh=function(){return this.g},MWn.kh=function(){return 0!=(4&this.j)},MWn.ph=function(){return!this.k&&(this.k=new Kf),this.k},MWn.th=function(n){this.ph().hk(n),n?this.j|=2:this.j&=-3},MWn.vh=function(n){this.ph().jk(n),n?this.j|=4:this.j&=-5},MWn.zh=function(){return(QX(),t$t).S},MWn.i=0,MWn.j=1,vX(l6n,"EObjectImpl",506),wAn(780,506,{105:1,92:1,90:1,56:1,108:1,49:1,97:1},jH),MWn.Ch=function(n){return this.e[n]},MWn.Dh=function(n,t){this.e[n]=t},MWn.Eh=function(n){this.e[n]=null},MWn.Tg=function(){return this.d},MWn.Yg=function(n){return Awn(this.d,n)},MWn.$g=function(){return this.d},MWn.dh=function(){return null!=this.e},MWn.ph=function(){return!this.k&&(this.k=new ko),this.k},MWn.th=function(n){this.d=n},MWn.yh=function(){var n;return null==this.e&&(n=bX(this.d),this.e=0==n?S$t:x8(Ant,HWn,1,n,5,1)),this},MWn.Ah=function(){return 0},vX(l6n,"DynamicEObjectImpl",780),wAn(1376,780,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1},fq),MWn.Fb=function(n){return this===n},MWn.Hb=function(){return PN(this)},MWn.th=function(n){this.d=n,this.b=NNn(n,"key"),this.c=NNn(n,E6n)},MWn.Sh=function(){var n;return-1==this.a&&(n=J7(this,this.b),this.a=null==n?0:nsn(n)),this.a},MWn.cd=function(){return J7(this,this.b)},MWn.dd=function(){return J7(this,this.c)},MWn.Th=function(n){this.a=n},MWn.Uh=function(n){NJ(this,this.b,n)},MWn.ed=function(n){var t;return t=J7(this,this.c),NJ(this,this.c,n),t},MWn.a=0,vX(l6n,"DynamicEObjectImpl/BasicEMapEntry",1376),wAn(1377,1,{108:1},ko),MWn.bk=function(n){throw Hp(new pv)},MWn.Ch=function(n){throw Hp(new pv)},MWn.Dh=function(n,t){throw Hp(new pv)},MWn.Eh=function(n){throw Hp(new pv)},MWn.ck=function(){throw Hp(new pv)},MWn.dk=function(){return this.a},MWn.ek=function(){return this.b},MWn.fk=function(){return this.c},MWn.gk=function(){throw Hp(new pv)},MWn.hk=function(n){throw Hp(new pv)},MWn.ik=function(n){this.a=n},MWn.jk=function(n){this.b=n},MWn.kk=function(n){this.c=n},vX(l6n,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1377),wAn(510,150,{105:1,92:1,90:1,590:1,147:1,56:1,108:1,49:1,97:1,510:1,150:1,114:1,115:1},jo),MWn.Qg=function(n){return bkn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),this.b):(!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),A8(this.b));case 3:return bZ(this);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),this.a;case 5:return!this.c&&(this.c=new RL(LOt,this,5)),this.c}return U9(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?bkn(this,e):this.Cb.ih(this,-1-i,null,e)),QG(this,BB(n,147),e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),BK(this.b,n,e);case 3:return QG(this,null,e);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),e$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),e$t)),n,e)},MWn.lh=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!!bZ(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return O3(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void pq(this,SD(t));case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void tan(this.b,t);case 3:return void ONn(this,BB(t,147));case 4:return!this.a&&(this.a=new $L(LOt,this,4)),sqn(this.a),!this.a&&(this.a=new $L(LOt,this,4)),void pX(this.a,BB(t,14));case 5:return!this.c&&(this.c=new RL(LOt,this,5)),sqn(this.c),!this.c&&(this.c=new RL(LOt,this,5)),void pX(this.c,BB(t,14))}Lbn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n),t)},MWn.zh=function(){return gWn(),e$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Bin(this,null);case 2:return!this.b&&(this.b=new Jx((gWn(),k$t),X$t,this)),void this.b.c.$b();case 3:return void ONn(this,null);case 4:return!this.a&&(this.a=new $L(LOt,this,4)),void sqn(this.a);case 5:return!this.c&&(this.c=new RL(LOt,this,5)),void sqn(this.c)}qfn(this,n-bX((gWn(),e$t)),itn(BB(yan(this,16),26)||e$t,n))},MWn.Ib=function(){return Vfn(this)},MWn.d=null,vX(l6n,"EAnnotationImpl",510),wAn(151,705,j9n,y9),MWn.Xh=function(n,t){n$(this,n,BB(t,42))},MWn.lk=function(n,t){return FK(this,BB(n,42),t)},MWn.pi=function(n){return BB(BB(this.c,69).pi(n),133)},MWn.Zh=function(){return BB(this.c,69).Zh()},MWn.$h=function(){return BB(this.c,69).$h()},MWn._h=function(n){return BB(this.c,69)._h(n)},MWn.mk=function(n,t){return BK(this,n,t)},MWn.Wj=function(n){return BB(this.c,76).Wj(n)},MWn.rj=function(){},MWn.fj=function(){return BB(this.c,76).fj()},MWn.tj=function(n,t,e){var i;return(i=BB(Utn(this.b).Nh().Jh(this.b),133)).Th(n),i.Uh(t),i.ed(e),i},MWn.uj=function(){return new Ip(this)},MWn.Wb=function(n){tan(this,n)},MWn.Xj=function(){BB(this.c,76).Xj()},vX(y9n,"EcoreEMap",151),wAn(158,151,j9n,Jx),MWn.qj=function(){var n,t,e,i,r;if(null==this.d){for(r=x8(oAt,c9n,63,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=BB(e.nj(),133)).Sh()&DWn)%r.length])&&(n=r[i]=new Ip(this)),n.Fc(t);this.d=r}},vX(l6n,"EAnnotationImpl/1",158),wAn(284,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,472:1,49:1,97:1,150:1,284:1,114:1,115:1}),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void this.Lh(SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi())}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),E$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void this.Lh(null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi())}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Ikn(this),this.Bb|=1},MWn.Yj=function(){return Ikn(this)},MWn.Zj=function(){return this.t},MWn.$j=function(){var n;return(n=this.t)>1||-1==n},MWn.hi=function(){return 0!=(512&this.Bb)},MWn.nk=function(n,t){return Pfn(this,n,t)},MWn.ok=function(n){Nen(this,n)},MWn.Ib=function(){return KOn(this)},MWn.s=0,MWn.t=1,vX(l6n,"ETypedElementImpl",284),wAn(449,284,{105:1,92:1,90:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,449:1,284:1,114:1,115:1,677:1}),MWn.Qg=function(n){return Nyn(this,n)},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!this.$j();case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?Nyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 17:return T_n(this,null,17,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.$j();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void this.ok(BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),j$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void this.ok(1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.Gj=function(){return this.f},MWn.zj=function(){return qLn(this)},MWn.Hj=function(){return dZ(this)},MWn.Lj=function(){return null},MWn.pk=function(){return this.k},MWn.aj=function(){return this.n},MWn.Mj=function(){return oEn(this)},MWn.Nj=function(){var n,t,e,i,r,c,a,u,o;return this.p||((null==(e=dZ(this)).i&&qFn(e),e.i).length,(i=this.Lj())&&bX(dZ(i)),n=(a=(r=Ikn(this)).Bj())?0!=(1&a.i)?a==$Nt?ktt:a==ANt?Att:a==DNt?Ctt:a==xNt?Ptt:a==LNt?Rtt:a==RNt?_tt:a==NNt?Ttt:Stt:a:null,t=qLn(this),u=r.zj(),bbn(this),0!=(this.Bb&hVn)&&((c=mjn((IPn(),Z$t),e))&&c!=this||(c=Z1(B7(Z$t,this))))?this.p=new AI(this,c):this.$j()?this.rk()?i?0!=(this.Bb&T9n)?n?this.sk()?this.p=new lQ(47,n,this,i):this.p=new lQ(5,n,this,i):this.sk()?this.p=new w4(46,this,i):this.p=new w4(4,this,i):n?this.sk()?this.p=new lQ(49,n,this,i):this.p=new lQ(7,n,this,i):this.sk()?this.p=new w4(48,this,i):this.p=new w4(6,this,i):0!=(this.Bb&T9n)?n?n==Hnt?this.p=new PB(50,VOt,this):this.sk()?this.p=new PB(43,n,this):this.p=new PB(1,n,this):this.sk()?this.p=new RY(42,this):this.p=new RY(0,this):n?n==Hnt?this.p=new PB(41,VOt,this):this.sk()?this.p=new PB(45,n,this):this.p=new PB(3,n,this):this.sk()?this.p=new RY(44,this):this.p=new RY(2,this):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(512&this.Bb)?0!=(this.Bb&T9n)?this.p=n?new PB(9,n,this):new RY(8,this):this.p=n?new PB(11,n,this):new RY(10,this):0!=(this.Bb&T9n)?this.p=n?new PB(13,n,this):new RY(12,this):this.p=n?new PB(15,n,this):new RY(14,this):i?(o=i.t)>1||-1==o?this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(25,n,this,i):new w4(24,this,i):this.p=n?new lQ(27,n,this,i):new w4(26,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(29,n,this,i):new w4(28,this,i):this.p=n?new lQ(31,n,this,i):new w4(30,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new lQ(33,n,this,i):new w4(32,this,i):this.p=n?new lQ(35,n,this,i):new w4(34,this,i):0!=(this.Bb&T9n)?this.p=n?new lQ(37,n,this,i):new w4(36,this,i):this.p=n?new lQ(39,n,this,i):new w4(38,this,i):this.sk()?0!=(this.Bb&T9n)?this.p=n?new PB(17,n,this):new RY(16,this):this.p=n?new PB(19,n,this):new RY(18,this):0!=(this.Bb&T9n)?this.p=n?new PB(21,n,this):new RY(20,this):this.p=n?new PB(23,n,this):new RY(22,this):this.qk()?this.sk()?this.p=new CB(BB(r,26),this,i):this.p=new mJ(BB(r,26),this,i):cL(r,148)?n==$$t?this.p=new RY(40,this):0!=(this.Bb&T9n)?this.p=n?new nz(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new dQ(BB(r,148),t,u,this):this.p=n?new ZG(t,u,this,(Bwn(),a==ANt?q$t:a==$Nt?K$t:a==LNt?G$t:a==DNt?H$t:a==xNt?B$t:a==RNt?U$t:a==NNt?_$t:a==ONt?F$t:z$t)):new wQ(BB(r,148),t,u,this):this.rk()?i?0!=(this.Bb&T9n)?this.sk()?this.p=new NB(BB(r,26),this,i):this.p=new LB(BB(r,26),this,i):this.sk()?this.p=new $B(BB(r,26),this,i):this.p=new IB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.sk()?this.p=new eD(BB(r,26),this):this.p=new tD(BB(r,26),this):this.sk()?this.p=new nD(BB(r,26),this):this.p=new Zx(BB(r,26),this):this.sk()?i?0!=(this.Bb&T9n)?this.p=new xB(BB(r,26),this,i):this.p=new OB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new rD(BB(r,26),this):this.p=new iD(BB(r,26),this):i?0!=(this.Bb&T9n)?this.p=new DB(BB(r,26),this,i):this.p=new AB(BB(r,26),this,i):0!=(this.Bb&T9n)?this.p=new cD(BB(r,26),this):this.p=new cG(BB(r,26),this)),this.p},MWn.Ij=function(){return 0!=(this.Bb&k6n)},MWn.qk=function(){return!1},MWn.rk=function(){return!1},MWn.Jj=function(){return 0!=(this.Bb&hVn)},MWn.Oj=function(){return hnn(this)},MWn.sk=function(){return!1},MWn.Kj=function(){return 0!=(this.Bb&T9n)},MWn.tk=function(n){this.k=n},MWn.Lh=function(n){JZ(this,n)},MWn.Ib=function(){return ERn(this)},MWn.e=!1,MWn.n=0,vX(l6n,"EStructuralFeatureImpl",449),wAn(322,449,{105:1,92:1,90:1,34:1,147:1,191:1,56:1,170:1,66:1,108:1,472:1,49:1,97:1,322:1,150:1,449:1,284:1,114:1,115:1,677:1},Om),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),!!NIn(this);case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return t?uun(this):x6(this)}return U9(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return NIn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!x6(this)}return O3(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Uj(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void Gln(this,qy(TD(t)))}Lbn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n),t)},MWn.zh=function(){return gWn(),i$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return this.b=0,void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return void Gln(this,!1)}qfn(this,n-bX((gWn(),i$t)),itn(BB(yan(this,16),26)||i$t,n))},MWn.Gh=function(){uun(this),kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.$j=function(){return NIn(this)},MWn.nk=function(n,t){return this.b=0,this.a=null,Pfn(this,n,t)},MWn.ok=function(n){Uj(this,n)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (iD: ",yE(n,0!=(this.Bb&h6n)),n.a+=")",n.a)},MWn.b=0,vX(l6n,"EAttributeImpl",322),wAn(351,438,{105:1,92:1,90:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1}),MWn.uk=function(n){return n.Tg()==this},MWn.Qg=function(n){return fyn(this,n)},MWn.Rg=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Qj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e)}return BB(itn(BB(yan(this,16),26)||this.zh(),t),66).Nj().Rj(this,fgn(this),t-bX(this.zh()),n,e)},MWn.lh=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!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),c$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.yj=function(){var n;return-1==this.G&&(this.G=(n=Utn(this))?uvn(n.Mh(),this):-1),this.G},MWn.zj=function(){return null},MWn.Aj=function(){return Utn(this)},MWn.vk=function(){return this.v},MWn.Bj=function(){return iyn(this)},MWn.Cj=function(){return null!=this.D?this.D:this.B},MWn.Dj=function(){return this.F},MWn.wj=function(n){return SFn(this,n)},MWn.wk=function(n){this.v=n},MWn.xk=function(n){Urn(this,n)},MWn.yk=function(n){this.C=n},MWn.Lh=function(n){ZZ(this,n)},MWn.Ib=function(){return Cwn(this)},MWn.C=null,MWn.D=null,MWn.G=-1,vX(l6n,"EClassifierImpl",351),wAn(88,351,{105:1,92:1,90:1,26:1,138:1,147:1,191:1,56:1,108:1,49:1,97:1,88:1,351:1,150:1,473:1,114:1,115:1,676:1},_f),MWn.uk=function(n){return QR(this,n.Tg())},MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return null;case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return hN(),0!=(512&this.Bb);case 10:return kY(this);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),this.q;case 12:return YBn(this);case 13:return RBn(this);case 14:return RBn(this),this.r;case 15:return YBn(this),this.k;case 16:return WPn(this);case 17:return gBn(this);case 18:return qFn(this);case 19:return CLn(this);case 20:return YBn(this),this.o;case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),this.s;case 22:return a4(this);case 23:return HDn(this)}return U9(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),Ywn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),Ywn(this.s,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),_pn(this.q,n,e);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),_pn(this.s,n,e);case 22:return _pn(a4(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),r$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),r$t)),n,e)},MWn.lh=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!!iyn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==a4(this.u.a).i||this.n&&Rvn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=YBn(this).i;case 13:return 0!=RBn(this).i;case 14:return RBn(this),0!=this.r.i;case 15:return YBn(this),0!=this.k.i;case 16:return 0!=WPn(this).i;case 17:return 0!=gBn(this).i;case 18:return 0!=qFn(this).i;case 19:return 0!=CLn(this).i;case 20:return YBn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&Rvn(this.n);case 23:return 0!=HDn(this).i}return O3(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.oh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:NNn(this,n))||hUn(this,n)},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Jfn(this,qy(TD(t)));case 9:return void tln(this,qy(TD(t)));case 10:return vqn(kY(this)),void pX(kY(this),BB(t,14));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),sqn(this.q),!this.q&&(this.q=new eU(QAt,this,11,10)),void pX(this.q,BB(t,14));case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),sqn(this.s),!this.s&&(this.s=new eU(FAt,this,21,17)),void pX(this.s,BB(t,14));case 22:return sqn(a4(this)),void pX(a4(this),BB(t,14))}Lbn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n),t)},MWn.zh=function(){return gWn(),r$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Jfn(this,!1);case 9:return void tln(this,!1);case 10:return void(this.u&&vqn(this.u));case 11:return!this.q&&(this.q=new eU(QAt,this,11,10)),void sqn(this.q);case 21:return!this.s&&(this.s=new eU(FAt,this,21,17)),void sqn(this.s);case 22:return void(this.n&&sqn(this.n))}qfn(this,n-bX((gWn(),r$t)),itn(BB(yan(this,16),26)||r$t,n))},MWn.Gh=function(){var n,t;if(YBn(this),RBn(this),WPn(this),gBn(this),qFn(this),CLn(this),HDn(this),a6(XB(P5(this))),this.s)for(n=0,t=this.s.i;n<t;++n)vx(Wtn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)vx(Wtn(this.q,n));Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.Ib=function(){return dEn(this)},MWn.k=null,MWn.r=null,vX(l6n,"EClassImpl",88),wAn(1994,1993,D9n),MWn.Vh=function(n,t){return LFn(this,n,t)},MWn.Wh=function(n){return LFn(this,this.i,n)},MWn.Xh=function(n,t){qOn(this,n,t)},MWn.Yh=function(n){tAn(this,n)},MWn.lk=function(n,t){return Ywn(this,n,t)},MWn.pi=function(n){return F9(this,n)},MWn.mk=function(n,t){return _pn(this,n,t)},MWn.mi=function(n,t){return fBn(this,n,t)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"NotifyingInternalEListImpl",1994),wAn(622,1994,R9n),MWn.Hc=function(n){return bqn(this,n)},MWn.Zi=function(n,t,e,i,r){return yZ(this,n,t,e,i,r)},MWn.$i=function(n){Lv(this,n)},MWn.Wj=function(n){return this},MWn.ak=function(){return itn(this.e.Tg(),this.aj())},MWn._i=function(){return this.ak()},MWn.aj=function(){return Awn(this.e.Tg(),this.ak())},MWn.zk=function(){return BB(this.ak().Yj(),26).Bj()},MWn.Ak=function(){return Cvn(BB(this.ak(),18)).n},MWn.Ai=function(){return this.e},MWn.Bk=function(){return!0},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!1},MWn.Xc=function(n){return uvn(this,n)},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.e,this.Ak(),this.zk(),t):e.gh(this.e,Awn(e.Tg(),Cvn(BB(this.ak(),18))),null,t):e.gh(this.e,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.e,this.Ak(),this.zk(),t):e.ih(this.e,Awn(e.Tg(),Cvn(BB(this.ak(),18))),null,t):e.ih(this.e,-1-this.aj(),null,t)},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return x3(this.d,n)},MWn.ej=function(){return mA(this.e)},MWn.fj=function(){return 0!=this.i},MWn.ri=function(n){return Den(this.d,n)},MWn.li=function(n,t){return this.Fk()&&this.Ek()?GOn(this,n,BB(t,56)):t},MWn.Gk=function(n){return n.kh()?tfn(this.e,BB(n,49)):n},MWn.Wb=function(n){J$(this,n)},MWn.Pc=function(){return H9(this)},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.i-1;t>=0;--t)Wtn(this,t);return Qwn(this,n)},MWn.Xj=function(){sqn(this)},MWn.oi=function(n,t){return _en(this,n,t)},vX(y9n,"EcoreEList",622),wAn(496,622,R9n,yH),MWn.ai=function(){return!1},MWn.aj=function(){return this.c},MWn.bj=function(){return!1},MWn.Fk=function(){return!0},MWn.hi=function(){return!0},MWn.li=function(n,t){return t},MWn.ni=function(){return!1},MWn.c=0,vX(y9n,"EObjectEList",496),wAn(85,496,R9n,$L),MWn.bj=function(){return!0},MWn.Dk=function(){return!1},MWn.rk=function(){return!0},vX(y9n,"EObjectContainmentEList",85),wAn(545,85,R9n,LL),MWn.ci=function(){this.b=!0},MWn.fj=function(){return this.b},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.b,this.b=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.b=!1},MWn.b=!1,vX(y9n,"EObjectContainmentEList/Unsettable",545),wAn(1140,545,R9n,YG),MWn.ii=function(n,t){var e,i;return e=BB(Iln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),a$t),iln(t),cL(i=e.c,88)?BB(i,26):d$t,n)),e},MWn.jj=function(n,t){return Zwn(this,BB(n,87),t)},MWn.kj=function(n,t){return Jwn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return _jn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Rvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EClassImpl/1",1140),wAn(1154,1153,Z8n),MWn.ui=function(n){var t,e,i,r,c,a,u;if(8!=(e=n.xi())){if(0==(i=apn(n)))switch(e){case 1:case 9:null!=(u=n.Bi())&&(!(t=P5(BB(u,473))).c&&(t.c=new Bo),snn(t.c,n.Ai())),null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 3:null!=(a=n.zi())&&0==(1&(r=BB(a,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 5:if(null!=(a=n.zi()))for(c=BB(a,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),f9(t.c,BB(n.Ai(),26)));break;case 4:null!=(u=n.Bi())&&0==(1&(r=BB(u,473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()));break;case 6:if(null!=(u=n.Bi()))for(c=BB(u,14).Kc();c.Ob();)0==(1&(r=BB(c.Pb(),473)).Bb)&&(!(t=P5(r)).c&&(t.c=new Bo),snn(t.c,n.Ai()))}this.Hk(i)}},MWn.Hk=function(n){dRn(this,n)},MWn.b=63,vX(l6n,"ESuperAdapter",1154),wAn(1155,1154,Z8n,dp),MWn.Hk=function(n){ACn(this,n)},vX(l6n,"EClassImpl/10",1155),wAn(1144,696,R9n),MWn.Vh=function(n,t){return BTn(this,n,t)},MWn.Wh=function(n){return bmn(this,n)},MWn.Xh=function(n,t){Ifn(this,n,t)},MWn.Yh=function(n){c6(this,n)},MWn.pi=function(n){return F9(this,n)},MWn.mi=function(n,t){return onn(this,n,t)},MWn.lk=function(n,t){throw Hp(new pv)},MWn.Zh=function(){return new ax(this)},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},MWn.mk=function(n,t){throw Hp(new pv)},MWn.Wj=function(n){return this},MWn.fj=function(){return 0!=this.i},MWn.Wb=function(n){throw Hp(new pv)},MWn.Xj=function(){throw Hp(new pv)},vX(y9n,"EcoreEList/UnmodifiableEList",1144),wAn(319,1144,R9n,NO),MWn.ni=function(){return!1},vX(y9n,"EcoreEList/UnmodifiableEList/FastCompare",319),wAn(1147,319,R9n,don),MWn.Xc=function(n){var t,e;if(cL(n,170)&&-1!=(t=BB(n,170).aj()))for(e=this.i;t<e;++t)if(GI(this.g[t])===GI(n))return t;return-1},vX(l6n,"EClassImpl/1EAllStructuralFeaturesList",1147),wAn(1141,497,h8n,Eo),MWn.ri=function(n){return x8(VAt,B9n,87,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EGenericSuperTypeEList",1141),wAn(623,497,h8n,To),MWn.ri=function(n){return x8(FAt,N9n,170,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1EStructuralFeatureUniqueEList",623),wAn(741,497,h8n,Mo),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/1ReferenceList",741),wAn(1142,497,h8n,gp),MWn.bi=function(n,t){tz(this,BB(t,34))},MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/2",1142),wAn(1143,497,h8n,So),MWn.ri=function(n){return x8(BAt,N9n,34,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/3",1143),wAn(1145,319,R9n,EH),MWn.Fc=function(n){return mB(this,BB(n,34))},MWn.Yh=function(n){JE(this,BB(n,34))},vX(l6n,"EClassImpl/4",1145),wAn(1146,319,R9n,TH),MWn.Fc=function(n){return yB(this,BB(n,18))},MWn.Yh=function(n){ZE(this,BB(n,18))},vX(l6n,"EClassImpl/5",1146),wAn(1148,497,h8n,Po),MWn.ri=function(n){return x8(QAt,x9n,59,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/6",1148),wAn(1149,497,h8n,Co),MWn.ri=function(n){return x8(JAt,N9n,18,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/7",1149),wAn(1997,1996,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,67:1,58:1,69:1}),MWn.Vh=function(n,t){return uFn(this,n,t)},MWn.Wh=function(n){return uFn(this,this.Vi(),n)},MWn.Xh=function(n,t){eAn(this,n,t)},MWn.Yh=function(n){OOn(this,n)},MWn.lk=function(n,t){return wmn(this,n,t)},MWn.mk=function(n,t){return Fpn(this,n,t)},MWn.mi=function(n,t){return oFn(this,n,t)},MWn.pi=function(n){return this.Oi(n)},MWn.Zh=function(){return new ax(this)},MWn.Gi=function(){return this.Ji()},MWn.$h=function(){return new ux(this)},MWn._h=function(n){return sin(this,n)},vX(y9n,"DelegatingNotifyingInternalEListImpl",1997),wAn(742,1997,H9n),MWn.ai=function(){var n;return cL(n=itn(jY(this.b),this.aj()).Yj(),148)&&!cL(n,457)&&0==(1&n.Bj().i)},MWn.Hc=function(n){var t,e,i,r,c,a,u;if(this.Fk()){if((u=this.Vi())>4){if(!this.wj(n))return!1;if(this.rk()){if(a=(t=(e=BB(n,49)).Ug())==this.b&&(this.Dk()?e.Og(e.Vg(),BB(itn(jY(this.b),this.aj()).Yj(),26).Bj())==Cvn(BB(itn(jY(this.b),this.aj()),18)).n:-1-e.Vg()==this.aj()),this.Ek()&&!a&&!t&&e.Zg())for(i=0;i<u;++i)if(GI(Gz(this,this.Oi(i)))===GI(n))return!0;return a}if(this.Dk()&&!this.Ck()){if(GI(r=BB(n,56).ah(Cvn(BB(itn(jY(this.b),this.aj()),18))))===GI(this.b))return!0;if(null==r||!BB(r,56).kh())return!1}}if(c=this.Li(n),this.Ek()&&!c)for(i=0;i<u;++i)if(GI(e=Gz(this,this.Oi(i)))===GI(n))return!0;return c}return this.Li(n)},MWn.Zi=function(n,t,e,i,r){return new N7(this.b,n,this.aj(),t,e,i,r)},MWn.$i=function(n){ban(this.b,n)},MWn.Wj=function(n){return this},MWn._i=function(){return itn(jY(this.b),this.aj())},MWn.aj=function(){return Awn(jY(this.b),itn(jY(this.b),this.aj()))},MWn.Ai=function(){return this.b},MWn.Bk=function(){return!!itn(jY(this.b),this.aj()).Yj().Bj()},MWn.bj=function(){var n;return!(!cL(n=itn(jY(this.b),this.aj()),99)||0==(BB(n,18).Bb&h6n)&&!Cvn(BB(n,18)))},MWn.Ck=function(){var n,t,e;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!(t=Cvn(BB(n,18)))&&((e=t.t)>1||-1==e)},MWn.Dk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&!!Cvn(BB(n,18))},MWn.Ek=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&BQn)},MWn.Xc=function(n){var t,e,i;if((e=this.Qi(n))>=0)return e;if(this.Fk())for(t=0,i=this.Vi();t<i;++t)if(GI(Gz(this,this.Oi(t)))===GI(n))return t;return-1},MWn.cj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.gh(this.b,Cvn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.gh(this.b,Awn(e.Tg(),Cvn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.gh(this.b,-1-this.aj(),null,t)},MWn.dj=function(n,t){var e;return e=BB(n,49),this.Dk()?this.Bk()?e.ih(this.b,Cvn(BB(itn(jY(this.b),this.aj()),18)).n,BB(itn(jY(this.b),this.aj()).Yj(),26).Bj(),t):e.ih(this.b,Awn(e.Tg(),Cvn(BB(itn(jY(this.b),this.aj()),18))),null,t):e.ih(this.b,-1-this.aj(),null,t)},MWn.rk=function(){var n;return!!cL(n=itn(jY(this.b),this.aj()),99)&&0!=(BB(n,18).Bb&h6n)},MWn.Fk=function(){return cL(itn(jY(this.b),this.aj()).Yj(),88)},MWn.wj=function(n){return itn(jY(this.b),this.aj()).Yj().wj(n)},MWn.ej=function(){return mA(this.b)},MWn.fj=function(){return!this.Ri()},MWn.hi=function(){return itn(jY(this.b),this.aj()).hi()},MWn.li=function(n,t){return eGn(this,n,t)},MWn.Wb=function(n){vqn(this),pX(this,BB(n,15))},MWn.Pc=function(){var n;if(this.Ek())for(n=this.Vi()-1;n>=0;--n)eGn(this,n,this.Oi(n));return this.Wi()},MWn.Qc=function(n){var t;if(this.Ek())for(t=this.Vi()-1;t>=0;--t)eGn(this,t,this.Oi(t));return this.Xi(n)},MWn.Xj=function(){vqn(this)},MWn.oi=function(n,t){return B9(this,n,t)},vX(y9n,"DelegatingEcoreEList",742),wAn(1150,742,H9n,uR),MWn.Hi=function(n,t){lD(this,n,BB(t,26))},MWn.Ii=function(n){e$(this,BB(n,26))},MWn.Oi=function(n){var t;return cL(t=BB(Wtn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ti=function(n){var t;return cL(t=BB(fDn(a4(this.a),n),87).c,88)?BB(t,26):(gWn(),d$t)},MWn.Ui=function(n,t){return dmn(this,n,BB(t,26))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new pp(this)},MWn.Ki=function(){sqn(a4(this.a))},MWn.Li=function(n){return Ufn(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!Ufn(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==a4(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GI(t.Pb())!==GI(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e,i;for(t=1,n=new AL(a4(this.a));n.e!=n.i.gc();)t=31*t+((e=cL(i=BB(kpn(n),87).c,88)?BB(i,26):(gWn(),d$t))?PN(e):0);return t},MWn.Qi=function(n){var t,e,i,r;for(i=0,e=new AL(a4(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GI(n)===GI(cL(r=t.c,88)?BB(r,26):(gWn(),d$t)))return i;++i}return-1},MWn.Ri=function(){return 0==a4(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return a4(this.a).i},MWn.Wi=function(){var n,t,e,i,r,c;for(c=a4(this.a).i,r=x8(Ant,HWn,1,c,5,1),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),r[e++]=cL(i=n.c,88)?BB(i,26):(gWn(),d$t);return r},MWn.Xi=function(n){var t,e,i,r;for(r=a4(this.a).i,n.length<r&&(n=Den(tsn(n).c,r)),n.length>r&&$X(n,r,null),e=0,t=new AL(a4(this.a));t.e!=t.i.gc();)$X(n,e++,cL(i=BB(kpn(t),87).c,88)?BB(i,26):(gWn(),d$t));return n},MWn.Yi=function(){var n,t,e,i,r;for((r=new Sk).a+="[",n=a4(this.a),t=0,i=a4(this.a).i;t<i;)cO(r,kN(cL(e=BB(Wtn(n,t),87).c,88)?BB(e,26):(gWn(),d$t))),++t<i&&(r.a+=FWn);return r.a+="]",r.a},MWn.$i=function(n){},MWn.aj=function(){return 10},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,88)},MWn.fj=function(){return Q0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EClassImpl/8",1150),wAn(1151,1964,LVn,pp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return a4(this.a.a).i},vX(l6n,"EClassImpl/8/1",1151),wAn(1152,497,h8n,Io),MWn.ri=function(n){return x8(HAt,HWn,138,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"EClassImpl/9",1152),wAn(1139,53,eYn,Im),vX(l6n,"EClassImpl/MyHashSet",1139),wAn(566,351,{105:1,92:1,90:1,138:1,148:1,834:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,150:1,114:1,115:1,676:1},Ev),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return this.zj();case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb)}return U9(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t,e)},MWn.lh=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!!iyn(this);case 4:return null!=this.zj();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb)}return O3(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)))}Lbn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n),t)},MWn.zh=function(){return gWn(),u$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0)}qfn(this,n-bX(this.zh()),itn(BB(yan(this,16),26)||this.zh(),n))},MWn.Gh=function(){Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.Fj=function(){var n,t;if(!this.c&&!(n=G$n(Utn(this))).dc())for(t=n.Kc();t.Ob();)N_n(this,SD(t.Pb()))&&Rln(this);return this.b},MWn.zj=function(){var n;if(!this.e){n=null;try{n=iyn(this)}catch(t){if(!cL(t=lun(t),102))throw Hp(t)}this.d=null,n&&0!=(1&n.i)&&(this.d=n==$Nt?(hN(),ptt):n==ANt?iln(0):n==DNt?new Nb(0):n==xNt?0:n==LNt?jgn(0):n==RNt?rln(0):n==NNt?Pnn(0):fun(0)),this.e=!0}return this.d},MWn.Ej=function(){return 0!=(256&this.Bb)},MWn.Ik=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},MWn.xk=function(n){Urn(this,n),this.Ik(n)},MWn.yk=function(n){this.C=n,this.e=!1},MWn.Ib=function(){var n;return 0!=(64&this.Db)?Cwn(this):((n=new fN(Cwn(this))).a+=" (serializable: ",yE(n,0!=(256&this.Bb)),n.a+=")",n.a)},MWn.c=!1,MWn.d=null,MWn.e=!1,vX(l6n,"EDataTypeImpl",566),wAn(457,566,{105:1,92:1,90:1,138:1,148:1,834:1,671:1,147:1,191:1,56:1,108:1,49:1,97:1,351:1,457:1,150:1,114:1,115:1,676:1},Am),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return iyn(this);case 4:return Qsn(this);case 5:return this.F;case 6:return t?Utn(this):wZ(this);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),this.A;case 8:return hN(),0!=(256&this.Bb);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),this.a}return U9(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?fyn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,6,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),Ywn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 6:return T_n(this,null,6,e);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),_pn(this.A,n,e);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),o$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),o$t)),n,e)},MWn.lh=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!!iyn(this);case 4:return!!Qsn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!wZ(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void ZZ(this,SD(t));case 2:return void IA(this,SD(t));case 5:return void Yqn(this,SD(t));case 7:return!this.A&&(this.A=new NL(O$t,this,7)),sqn(this.A),!this.A&&(this.A=new NL(O$t,this,7)),void pX(this.A,BB(t,14));case 8:return void Zfn(this,qy(TD(t)));case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),sqn(this.a),!this.a&&(this.a=new eU(WAt,this,9,5)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n),t)},MWn.zh=function(){return gWn(),o$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,179)&&(BB(this.Cb,179).tb=null),void Nrn(this,null);case 2:return Dsn(this,null),void xen(this,this.D);case 5:return void Yqn(this,null);case 7:return!this.A&&(this.A=new NL(O$t,this,7)),void sqn(this.A);case 8:return void Zfn(this,!0);case 9:return!this.a&&(this.a=new eU(WAt,this,9,5)),void sqn(this.a)}qfn(this,n-bX((gWn(),o$t)),itn(BB(yan(this,16),26)||o$t,n))},MWn.Gh=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)vx(Wtn(this.a,n));Cfn((IPn(),Z$t),this).ne(),this.Bb|=1},MWn.zj=function(){return Qsn(this)},MWn.wj=function(n){return null!=n},MWn.Ik=function(n){},vX(l6n,"EEnumImpl",457),wAn(573,438,{105:1,92:1,90:1,1940:1,678:1,147:1,191:1,56:1,108:1,49:1,97:1,573:1,150:1,114:1,115:1},jv),MWn.ne=function(){return this.zb},MWn.Qg=function(n){return lkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return iln(this.d);case 3:return this.b?this.b:this.a;case 4:return null==(i=this.c)?this.zb:i;case 5:return this.Db>>16==5?BB(this.Cb,671):null}return U9(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?lkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 5:return T_n(this,null,5,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),s$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),s$t)),n,e)},MWn.lh=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||!BB(this.Cb,671))}return O3(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void $en(this,BB(t,19).a);case 3:return void gOn(this,BB(t,1940));case 4:return void Fin(this,SD(t))}Lbn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n),t)},MWn.zh=function(){return gWn(),s$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void $en(this,0);case 3:return void gOn(this,null);case 4:return void Fin(this,null)}qfn(this,n-bX((gWn(),s$t)),itn(BB(yan(this,16),26)||s$t,n))},MWn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},MWn.b=null,MWn.c=null,MWn.d=0,vX(l6n,"EEnumLiteralImpl",573);var L$t,N$t,x$t,D$t=bq(l6n,"EFactoryImpl/InternalEDateTimeFormat");wAn(489,1,{2015:1},vp),vX(l6n,"EFactoryImpl/1ClientInternalEDateTimeFormat",489),wAn(241,115,{105:1,92:1,90:1,87:1,56:1,108:1,49:1,97:1,241:1,114:1,115:1},Kp),MWn.Sg=function(n,t,e){var i;return e=T_n(this,n,t,e),this.e&&cL(n,170)&&(i=kLn(this,this.e))!=this.c&&(e=azn(this,i,e)),e},MWn._g=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new $L(VAt,this,1)),this.d;case 2:return t?lFn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?qvn(this):this.a}return U9(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return nfn(this,null,e);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),_pn(this.d,n,e);case 3:return Zhn(this,null,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),f$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),f$t)),n,e)},MWn.lh=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 O3(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void jEn(this,BB(t,87));case 1:return!this.d&&(this.d=new $L(VAt,this,1)),sqn(this.d),!this.d&&(this.d=new $L(VAt,this,1)),void pX(this.d,BB(t,14));case 3:return void kEn(this,BB(t,87));case 4:return void DMn(this,BB(t,836));case 5:return void cen(this,BB(t,138))}Lbn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n),t)},MWn.zh=function(){return gWn(),f$t},MWn.Bh=function(n){switch(n){case 0:return void jEn(this,null);case 1:return!this.d&&(this.d=new $L(VAt,this,1)),void sqn(this.d);case 3:return void kEn(this,null);case 4:return void DMn(this,null);case 5:return void cen(this,null)}qfn(this,n-bX((gWn(),f$t)),itn(BB(yan(this,16),26)||f$t,n))},MWn.Ib=function(){var n;return(n=new lN(P$n(this))).a+=" (expression: ",bHn(this,n),n.a+=")",n.a},vX(l6n,"EGenericTypeImpl",241),wAn(1969,1964,q9n),MWn.Xh=function(n,t){nR(this,n,t)},MWn.lk=function(n,t){return nR(this,this.gc(),n),t},MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return this.$h()},MWn.Gi=function(){return new Pp(this)},MWn.$h=function(){return this._h(0)},MWn._h=function(n){return this.Gi().Zc(n)},MWn.mk=function(n,t){return ywn(this,n,!0),t},MWn.ii=function(n,t){var e;return e=tkn(this,t),this.Zc(n).Rb(e),e},MWn.ji=function(n,t){ywn(this,t,!0),this.Zc(n).Rb(t)},vX(y9n,"AbstractSequentialInternalEList",1969),wAn(486,1969,q9n,QN),MWn.pi=function(n){return Dpn(this.Gi(),n)},MWn.Zh=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn.Gi=function(){return new DO(this.a,this.b)},MWn.$h=function(){return null==this.b?(YM(),YM(),x$t):this.Jk()},MWn._h=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.dc=function(){var n,t,e,i,r,c;if(null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(c=this.a.bh(n,!1),ZM(),BB(n,66).Oj()){for(i=0,r=(t=BB(c,153)).gc();i<r;++i)if(wX(t.il(i))&&null!=t.jl(i))return!1}else if(n.$j()){if(!BB(c,14).dc())return!1}else if(null!=c)return!1;return!0},MWn.Kc=function(){return Ern(this)},MWn.Zc=function(n){var t,e;if(null==this.b){if(0!=n)throw Hp(new Ay(e9n+n+", size=0"));return YM(),YM(),x$t}for(e=this.Lk()?this.Kk():this.Jk(),t=0;t<n;++t)Man(e);return e},MWn.ii=function(n,t){throw Hp(new pv)},MWn.ji=function(n,t){throw Hp(new pv)},MWn.Jk=function(){return new YN(this.a,this.b)},MWn.Kk=function(){return new Vx(this.a,this.b)},MWn.Lk=function(){return!0},MWn.gc=function(){var n,t,e,i,r,c,a;if(r=0,null!=this.b)for(e=0;e<this.b.length;++e)if(n=this.b[e],!this.Mk()||this.a.mh(n))if(a=this.a.bh(n,!1),ZM(),BB(n,66).Oj())for(i=0,c=(t=BB(a,153)).gc();i<c;++i)wX(t.il(i))&&null!=t.jl(i)&&++r;else n.$j()?r+=BB(a,14).gc():null!=a&&++r;return r},MWn.Mk=function(){return!0},vX(y9n,"EContentsEList",486),wAn(1156,486,q9n,Wx),MWn.Jk=function(){return new Qx(this.a,this.b)},MWn.Kk=function(){return new Yx(this.a,this.b)},MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1",1156),wAn(279,1,G9n,YN),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){throw Hp(new pv)},MWn.Nk=function(n){if(0!=this.g||this.e)throw Hp(new Fy("Iterator already in use or already filtered"));this.e=n},MWn.Ob=function(){var n,t,e,i,r,c;switch(this.g){case 3:case 2:return!0;case 1:return!1;case-3:this.p?this.p.Pb():++this.n;default:if(this.k&&(this.p?kPn(this,this.p):pOn(this)))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=3,!0;for(;this.d<this.c.length;)if(t=this.c[this.d++],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.$h():this.k.Yc(),this.p?kPn(this,this.p):pOn(this))return r=this.p?this.p.Pb():this.j?this.j.pi(this.n++):this.k.Xb(this.n++),this.f?((n=BB(r,72)).ak(),e=n.dd(),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.f=!1,this.g=1,!1}},MWn.Sb=function(){var n,t,e,i,r,c;switch(this.g){case-3:case-2:return!0;case-1:return!1;case 3:this.p?this.p.Ub():--this.n;default:if(this.k&&(this.p?jPn(this,this.p):wCn(this)))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),this.i=e):(e=r,this.i=e),this.g=-3,!0;for(;this.d>0;)if(t=this.c[--this.d],(!this.e||t.Gj()!=NOt||0!=t.aj())&&(!this.Mk()||this.b.mh(t)))if(c=this.b.bh(t,this.Lk()),this.f=(ZM(),BB(t,66).Oj()),this.f||t.$j()){if(this.Lk()?(i=BB(c,15),this.k=i):(i=BB(c,69),this.k=this.j=i),cL(this.k,54)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j._h(this.k.gc()):this.k.Zc(this.k.gc()),this.p?jPn(this,this.p):wCn(this))return r=this.p?this.p.Ub():this.j?this.j.pi(--this.n):this.k.Xb(--this.n),this.f?((n=BB(r,72)).ak(),e=n.dd(),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}},MWn.Pb=function(){return Man(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){throw Hp(new pv)},MWn.Lk=function(){return!1},MWn.Wb=function(n){throw Hp(new pv)},MWn.Mk=function(){return!0},MWn.a=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.n=0,MWn.o=0,vX(y9n,"EContentsEList/FeatureIteratorImpl",279),wAn(697,279,G9n,Vx),MWn.Lk=function(){return!0},vX(y9n,"EContentsEList/ResolvingFeatureIteratorImpl",697),wAn(1157,697,G9n,Yx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/1",1157),wAn(1158,279,G9n,Qx),MWn.Mk=function(){return!1},vX(l6n,"ENamedElementImpl/1/2",1158),wAn(36,143,t9n,f4,l4,nU,k9,N7,t6,Hen,S0,qen,P0,J5,C0,Uen,I0,Z5,O0,Gen,A0,tU,j9,GQ,zen,$0,n6,L0),MWn._i=function(){return h9(this)},MWn.gj=function(){var n;return(n=h9(this))?n.zj():null},MWn.yi=function(n){return-1==this.b&&this.a&&(this.b=this.c.Xg(this.a.aj(),this.a.Gj())),this.c.Og(this.b,n)},MWn.Ai=function(){return this.c},MWn.hj=function(){var n;return!!(n=h9(this))&&n.Kj()},MWn.b=-1,vX(l6n,"ENotificationImpl",36),wAn(399,284,{105:1,92:1,90:1,147:1,191:1,56:1,59:1,108:1,472:1,49:1,97:1,150:1,399:1,284:1,114:1,115:1},$m),MWn.Qg=function(n){return Pkn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,26):null;case 11:return!this.d&&(this.d=new NL(O$t,this,11)),this.d;case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oR(this,this)),this.a;case 14:return H7(this)}return U9(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Pkn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),Ywn(this.c,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e);case 11:return!this.d&&(this.d=new NL(O$t,this,11)),_pn(this.d,n,e);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),_pn(this.c,n,e);case 14:return _pn(H7(this),n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),g$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),g$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(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==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,26));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==H7(this.a.a).i||this.b&&Kvn(this.b));case 14:return!!this.b&&Kvn(this.b)}return O3(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),sqn(this.d),!this.d&&(this.d=new NL(O$t,this,11)),void pX(this.d,BB(t,14));case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),sqn(this.c),!this.c&&(this.c=new eU(YAt,this,12,10)),void pX(this.c,BB(t,14));case 13:return!this.a&&(this.a=new oR(this,this)),vqn(this.a),!this.a&&(this.a=new oR(this,this)),void pX(this.a,BB(t,14));case 14:return sqn(H7(this)),void pX(H7(this),BB(t,14))}Lbn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n),t)},MWn.zh=function(){return gWn(),g$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 11:return!this.d&&(this.d=new NL(O$t,this,11)),void sqn(this.d);case 12:return!this.c&&(this.c=new eU(YAt,this,12,10)),void sqn(this.c);case 13:return void(this.a&&vqn(this.a));case 14:return void(this.b&&sqn(this.b))}qfn(this,n-bX((gWn(),g$t)),itn(BB(yan(this,16),26)||g$t,n))},MWn.Gh=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)vx(Wtn(this.c,n));Ikn(this),this.Bb|=1},vX(l6n,"EOperationImpl",399),wAn(505,742,H9n,oR),MWn.Hi=function(n,t){fD(this,n,BB(t,138))},MWn.Ii=function(n){i$(this,BB(n,138))},MWn.Oi=function(n){return BB(Wtn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ti=function(n){return BB(fDn(H7(this.a),n),87).c||(gWn(),l$t)},MWn.Ui=function(n,t){return bgn(this,n,BB(t,138))},MWn.ai=function(){return!1},MWn.Zi=function(n,t,e,i,r){return null},MWn.Ji=function(){return new mp(this)},MWn.Ki=function(){sqn(H7(this.a))},MWn.Li=function(n){return oln(this,n)},MWn.Mi=function(n){var t;for(t=n.Kc();t.Ob();)if(!oln(this,t.Pb()))return!1;return!0},MWn.Ni=function(n){var t,e,i;if(cL(n,15)&&(i=BB(n,15)).gc()==H7(this.a).i){for(t=i.Kc(),e=new AL(this);t.Ob();)if(GI(t.Pb())!==GI(kpn(e)))return!1;return!0}return!1},MWn.Pi=function(){var n,t,e;for(t=1,n=new AL(H7(this.a));n.e!=n.i.gc();)t=31*t+((e=BB(kpn(n),87).c||(gWn(),l$t))?nsn(e):0);return t},MWn.Qi=function(n){var t,e,i;for(i=0,e=new AL(H7(this.a));e.e!=e.i.gc();){if(t=BB(kpn(e),87),GI(n)===GI(t.c||(gWn(),l$t)))return i;++i}return-1},MWn.Ri=function(){return 0==H7(this.a).i},MWn.Si=function(){return null},MWn.Vi=function(){return H7(this.a).i},MWn.Wi=function(){var n,t,e,i,r;for(r=H7(this.a).i,i=x8(Ant,HWn,1,r,5,1),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)n=BB(kpn(t),87),i[e++]=n.c||(gWn(),l$t);return i},MWn.Xi=function(n){var t,e,i;for(i=H7(this.a).i,n.length<i&&(n=Den(tsn(n).c,i)),n.length>i&&$X(n,i,null),e=0,t=new AL(H7(this.a));t.e!=t.i.gc();)$X(n,e++,BB(kpn(t),87).c||(gWn(),l$t));return n},MWn.Yi=function(){var n,t,e,i;for((i=new Sk).a+="[",n=H7(this.a),t=0,e=H7(this.a).i;t<e;)cO(i,kN(BB(Wtn(n,t),87).c||(gWn(),l$t))),++t<e&&(i.a+=FWn);return i.a+="]",i.a},MWn.$i=function(n){},MWn.aj=function(){return 13},MWn.Bk=function(){return!0},MWn.bj=function(){return!1},MWn.Ck=function(){return!1},MWn.Dk=function(){return!1},MWn.Ek=function(){return!0},MWn.rk=function(){return!1},MWn.Fk=function(){return!0},MWn.wj=function(n){return cL(n,138)},MWn.fj=function(){return V0(this.a)},MWn.hi=function(){return!0},MWn.ni=function(){return!0},vX(l6n,"EOperationImpl/1",505),wAn(1340,1964,LVn,mp),MWn.Zc=function(n){return sin(this.a,n)},MWn.gc=function(){return H7(this.a.a).i},vX(l6n,"EOperationImpl/1/1",1340),wAn(1341,545,R9n,JG),MWn.ii=function(n,t){var e;return e=BB(Iln(this,n,t),87),mA(this.e)&&Lv(this,new j9(this.a,7,(gWn(),p$t),iln(t),e.c||l$t,n)),e},MWn.jj=function(n,t){return Mfn(this,BB(n,87),t)},MWn.kj=function(n,t){return Sfn(this,BB(n,87),t)},MWn.lj=function(n,t,e){return Wgn(this,BB(n,87),BB(t,87),e)},MWn.Zi=function(n,t,e,i,r){switch(n){case 3:return yZ(this,n,t,e,i,this.i>1);case 5:return yZ(this,n,t,e,i,this.i-BB(e,15).gc()>0);default:return new N7(this.e,n,this.c,t,e,i,!0)}},MWn.ij=function(){return!0},MWn.fj=function(){return Kvn(this)},MWn.Xj=function(){sqn(this)},vX(l6n,"EOperationImpl/2",1341),wAn(498,1,{1938:1,498:1},OI),vX(l6n,"EPackageImpl/1",498),wAn(16,85,R9n,eU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectContainmentWithInverseEList",16),wAn(353,16,R9n,eK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Resolving",353),wAn(298,353,R9n,Jz),MWn.ci=function(){this.a.tb=null},vX(l6n,"EPackageImpl/2",298),wAn(1228,1,{},Oo),vX(l6n,"EPackageImpl/3",1228),wAn(718,43,tYn,Nm),MWn._b=function(n){return XI(n)?eY(this,n):!!AY(this.f,n)},vX(l6n,"EPackageRegistryImpl",718),wAn(509,284,{105:1,92:1,90:1,147:1,191:1,56:1,2017:1,108:1,472:1,49:1,97:1,150:1,509:1,284:1,114:1,115:1},Lm),MWn.Qg=function(n){return Ckn(this,n)},MWn._g=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(i=this.t)>1||-1==i;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?BB(this.Cb,59):null}return U9(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n),t,e)},MWn.hh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),Ywn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?Ckn(this,e):this.Cb.ih(this,-1-i,null,e)),T_n(this,n,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Qj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 9:return gX(this,e);case 10:return T_n(this,null,10,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),m$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),m$t)),n,e)},MWn.lh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(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==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return!(this.Db>>16!=10||!BB(this.Cb,59))}return O3(this,n-bX((gWn(),m$t)),itn(BB(yan(this,16),26)||m$t,n))},MWn.zh=function(){return gWn(),m$t},vX(l6n,"EParameterImpl",509),wAn(99,449,{105:1,92:1,90:1,147:1,191:1,56:1,18:1,170:1,66:1,108:1,472:1,49:1,97:1,150:1,99:1,449:1,284:1,114:1,115:1,677:1},pD),MWn._g=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return hN(),0!=(256&this.Bb);case 3:return hN(),0!=(512&this.Bb);case 4:return iln(this.s);case 5:return iln(this.t);case 6:return hN(),(r=this.t)>1||-1==r;case 7:return hN(),this.s>=1;case 8:return t?Ikn(this):this.r;case 9:return this.q;case 10:return hN(),0!=(this.Bb&k6n);case 11:return hN(),0!=(this.Bb&M9n);case 12:return hN(),0!=(this.Bb&_Qn);case 13:return this.j;case 14:return qLn(this);case 15:return hN(),0!=(this.Bb&T9n);case 16:return hN(),0!=(this.Bb&hVn);case 17:return dZ(this);case 18:return hN(),0!=(this.Bb&h6n);case 19:return hN(),!(!(i=Cvn(this))||0==(i.Bb&h6n));case 20:return hN(),0!=(this.Bb&BQn);case 21:return t?Cvn(this):this.b;case 22:return t?Ion(this):K5(this);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),this.a}return U9(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t,e)},MWn.lh=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 0==(256&this.Bb);case 3:return 0==(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==yW(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yW(this.q).i);case 10:return 0==(this.Bb&k6n);case 11:return 0!=(this.Bb&M9n);case 12:return 0!=(this.Bb&_Qn);case 13:return null!=this.j;case 14:return null!=qLn(this);case 15:return 0!=(this.Bb&T9n);case 16:return 0!=(this.Bb&hVn);case 17:return!!dZ(this);case 18:return 0!=(this.Bb&h6n);case 19:return!!(t=Cvn(this))&&0!=(t.Bb&h6n);case 20:return 0==(this.Bb&BQn);case 21:return!!this.b;case 22:return!!K5(this);case 23:return!!this.a&&0!=this.a.i}return O3(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.sh=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void JZ(this,SD(t));case 2:return void Yfn(this,qy(TD(t)));case 3:return void nln(this,qy(TD(t)));case 4:return void Len(this,BB(t,19).a);case 5:return void Nen(this,BB(t,19).a);case 8:return void Ihn(this,BB(t,138));case 9:return void((e=HTn(this,BB(t,87),null))&&e.Fi());case 10:return void Aln(this,qy(TD(t)));case 11:return void Nln(this,qy(TD(t)));case 12:return void $ln(this,qy(TD(t)));case 13:return void _I(this,SD(t));case 15:return void Lln(this,qy(TD(t)));case 16:return void qln(this,qy(TD(t)));case 18:return void YZ(this,qy(TD(t)));case 20:return void Uln(this,qy(TD(t)));case 21:return void rrn(this,BB(t,18));case 23:return!this.a&&(this.a=new RL(BAt,this,23)),sqn(this.a),!this.a&&(this.a=new RL(BAt,this,23)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n),t)},MWn.zh=function(){return gWn(),y$t},MWn.Bh=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),4),void Nrn(this,null);case 2:return void Yfn(this,!0);case 3:return void nln(this,!0);case 4:return void Len(this,0);case 5:return void Nen(this,1);case 8:return void Ihn(this,null);case 9:return void((t=HTn(this,null,null))&&t.Fi());case 10:return void Aln(this,!0);case 11:return void Nln(this,!1);case 12:return void $ln(this,!1);case 13:return this.i=null,void arn(this,null);case 15:return void Lln(this,!1);case 16:return void qln(this,!1);case 18:return zln(this,!1),void(cL(this.Cb,88)&&ACn(P5(BB(this.Cb,88)),2));case 20:return void Uln(this,!0);case 21:return void rrn(this,null);case 23:return!this.a&&(this.a=new RL(BAt,this,23)),void sqn(this.a)}qfn(this,n-bX((gWn(),y$t)),itn(BB(yan(this,16),26)||y$t,n))},MWn.Gh=function(){Ion(this),kV(B7((IPn(),Z$t),this)),Ikn(this),this.Bb|=1},MWn.Lj=function(){return Cvn(this)},MWn.qk=function(){var n;return!!(n=Cvn(this))&&0!=(n.Bb&h6n)},MWn.rk=function(){return 0!=(this.Bb&h6n)},MWn.sk=function(){return 0!=(this.Bb&BQn)},MWn.nk=function(n,t){return this.c=null,Pfn(this,n,t)},MWn.Ib=function(){var n;return 0!=(64&this.Db)?ERn(this):((n=new fN(ERn(this))).a+=" (containment: ",yE(n,0!=(this.Bb&h6n)),n.a+=", resolveProxies: ",yE(n,0!=(this.Bb&BQn)),n.a+=")",n.a)},vX(l6n,"EReferenceImpl",99),wAn(548,115,{105:1,42:1,92:1,90:1,133:1,56:1,108:1,49:1,97:1,548:1,114:1,115:1},Ao),MWn.Fb=function(n){return this===n},MWn.cd=function(){return this.b},MWn.dd=function(){return this.c},MWn.Hb=function(){return PN(this)},MWn.Uh=function(n){vq(this,SD(n))},MWn.ed=function(n){return $H(this,SD(n))},MWn._g=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return U9(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return O3(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.sh=function(n,t){switch(n){case 0:return void mq(this,SD(t));case 1:return void Kin(this,SD(t))}Lbn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n),t)},MWn.zh=function(){return gWn(),k$t},MWn.Bh=function(n){switch(n){case 0:return void Rin(this,null);case 1:return void Kin(this,null)}qfn(this,n-bX((gWn(),k$t)),itn(BB(yan(this,16),26)||k$t,n))},MWn.Sh=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:vvn(n)),this.a},MWn.Th=function(n){this.a=n},MWn.Ib=function(){var n;return 0!=(64&this.Db)?P$n(this):((n=new fN(P$n(this))).a+=" (key: ",cO(n,this.b),n.a+=", value: ",cO(n,this.c),n.a+=")",n.a)},MWn.a=-1,MWn.b=null,MWn.c=null;var R$t,K$t,_$t,F$t,B$t,H$t,q$t,G$t,z$t,U$t,X$t=vX(l6n,"EStringToStringMapEntryImpl",548),W$t=bq(y9n,"FeatureMap/Entry/Internal");wAn(565,1,z9n),MWn.Ok=function(n){return this.Pk(BB(n,49))},MWn.Pk=function(n){return this.Ok(n)},MWn.Fb=function(n){var t,e;return this===n||!!cL(n,72)&&(t=BB(n,72)).ak()==this.c&&(null==(e=this.dd())?null==t.dd():Nfn(e,t.dd()))},MWn.ak=function(){return this.c},MWn.Hb=function(){var n;return n=this.dd(),nsn(this.c)^(null==n?0:nsn(n))},MWn.Ib=function(){var n,t;return t=Utn((n=this.c).Hj()).Ph(),n.ne(),(null!=t&&0!=t.length?t+":"+n.ne():n.ne())+"="+this.dd()},vX(l6n,"EStructuralFeatureImpl/BasicFeatureMapEntry",565),wAn(776,565,z9n,rR),MWn.Pk=function(n){return new rR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return Scn(this,n,this.a,t,e)},MWn.Rk=function(n,t,e){return Pcn(this,n,this.a,t,e)},vX(l6n,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",776),wAn(1314,1,{},AI),MWn.Pj=function(n,t,e,i,r){return BB(S9(n,this.b),215).nl(this.a).Wj(i)},MWn.Qj=function(n,t,e,i,r){return BB(S9(n,this.b),215).el(this.a,i,r)},MWn.Rj=function(n,t,e,i,r){return BB(S9(n,this.b),215).fl(this.a,i,r)},MWn.Sj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a).fj()},MWn.Tj=function(n,t,e,i){BB(S9(n,this.b),215).nl(this.a).Wb(i)},MWn.Uj=function(n,t,e){return BB(S9(n,this.b),215).nl(this.a)},MWn.Vj=function(n,t,e){BB(S9(n,this.b),215).nl(this.a).Xj()},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1314),wAn(89,1,{},PB,lQ,RY,w4),MWn.Pj=function(n,t,e,i,r){var c;if(null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),!r)switch(this.e){case 50:case 41:return BB(c,589).sj();case 40:return BB(c,215).kl()}return c},MWn.Qj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))&&t.Dh(e,c=iWn(this,n)),BB(c,69).lk(i,r)},MWn.Rj=function(n,t,e,i,r){var c;return null!=(c=t.Ch(e))&&(r=BB(c,69).mk(i,r)),r},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&BB(i,76).fj()},MWn.Tj=function(n,t,e,i){var r;!(r=BB(t.Ch(e),76))&&t.Dh(e,r=iWn(this,n)),r.Wb(i)},MWn.Uj=function(n,t,e){var i;return null==(i=t.Ch(e))&&t.Dh(e,i=iWn(this,n)),cL(i,76)?BB(i,76):new Ep(BB(t.Ch(e),15))},MWn.Vj=function(n,t,e){var i;!(i=BB(t.Ch(e),76))&&t.Dh(e,i=iWn(this,n)),i.Xj()},MWn.b=0,MWn.e=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateMany",89),wAn(504,1,{}),MWn.Qj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Rj=function(n,t,e,i,r){throw Hp(new pv)},MWn.Uj=function(n,t,e){return new bQ(this,n,t,e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle",504),wAn(1331,1,k9n,bQ),MWn.Wj=function(n){return this.a.Pj(this.c,this.d,this.b,n,!0)},MWn.fj=function(){return this.a.Sj(this.c,this.d,this.b)},MWn.Wb=function(n){this.a.Tj(this.c,this.d,this.b,n)},MWn.Xj=function(){this.a.Vj(this.c,this.d,this.b)},MWn.b=0,vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1331),wAn(769,504,{},mJ),MWn.Pj=function(n,t,e,i,r){return gKn(n,n.eh(),n.Vg())==this.b?this.sk()&&i?cAn(n):n.eh():null},MWn.Qj=function(n,t,e,i,r){var c,a;return n.eh()&&(r=(c=n.Vg())>=0?n.Qg(r):n.eh().ih(n,-1-c,null,r)),a=Awn(n.Tg(),this.e),n.Sg(i,a,r)},MWn.Rj=function(n,t,e,i,r){var c;return c=Awn(n.Tg(),this.e),n.Sg(null,c,r)},MWn.Sj=function(n,t,e){var i;return i=Awn(n.Tg(),this.e),!!n.eh()&&n.Vg()==i},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));if(r=n.eh(),a=Awn(n.Tg(),this.e),GI(i)!==GI(r)||n.Vg()!=a&&null!=i){if(vkn(n,BB(i,56)))throw Hp(new _y(w6n+n.Ib()));o=null,r&&(o=(c=n.Vg())>=0?n.Qg(o):n.eh().ih(n,-1-c,null,o)),(u=BB(i,49))&&(o=u.gh(n,Awn(u.Tg(),this.b),null,o)),(o=n.Sg(u,a,o))&&o.Fi()}else n.Lg()&&n.Mg()&&ban(n,new nU(n,1,a,i,i))},MWn.Vj=function(n,t,e){var i,r,c;n.eh()?(c=(i=n.Vg())>=0?n.Qg(null):n.eh().ih(n,-1-i,null,null),r=Awn(n.Tg(),this.e),(c=n.Sg(null,r,c))&&c.Fi()):n.Lg()&&n.Mg()&&ban(n,new tU(n,1,this.e,null,null))},MWn.sk=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",769),wAn(1315,769,{},CB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1315),wAn(563,504,{}),MWn.Pj=function(n,t,e,i,r){var c;return null==(c=t.Ch(e))?this.b:GI(c)===GI(R$t)?null:c},MWn.Sj=function(n,t,e){var i;return null!=(i=t.Ch(e))&&(GI(i)===GI(R$t)||!Nfn(i,this.b))},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=null==(c=t.Ch(e))?this.b:GI(c)===GI(R$t)?null:c,null==i?null!=this.c?(t.Dh(e,null),i=this.b):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Tk(n,1,this.e,r,i))):null==i?null!=this.c?t.Dh(e,null):null!=this.b?t.Dh(e,R$t):t.Dh(e,null):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=null==(r=t.Ch(e))?this.b:GI(r)===GI(R$t)?null:r,t.Eh(e),ban(n,this.d.Tk(n,1,this.e,i,this.b))):t.Eh(e)},MWn.Sk=function(n){throw Hp(new bv)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",563),wAn(W9n,1,{},$o),MWn.Tk=function(n,t,e,i,r){return new tU(n,t,e,i,r)},MWn.Uk=function(n,t,e,i,r,c){return new GQ(n,t,e,i,r,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",W9n),wAn(1332,W9n,{},Lo),MWn.Tk=function(n,t,e,i,r){return new n6(n,t,e,qy(TD(i)),qy(TD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new L0(n,t,e,qy(TD(i)),qy(TD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1332),wAn(1333,W9n,{},No),MWn.Tk=function(n,t,e,i,r){return new Hen(n,t,e,BB(i,217).a,BB(r,217).a)},MWn.Uk=function(n,t,e,i,r,c){return new S0(n,t,e,BB(i,217).a,BB(r,217).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1333),wAn(1334,W9n,{},xo),MWn.Tk=function(n,t,e,i,r){return new qen(n,t,e,BB(i,172).a,BB(r,172).a)},MWn.Uk=function(n,t,e,i,r,c){return new P0(n,t,e,BB(i,172).a,BB(r,172).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1334),wAn(1335,W9n,{},Do),MWn.Tk=function(n,t,e,i,r){return new J5(n,t,e,Gy(MD(i)),Gy(MD(r)))},MWn.Uk=function(n,t,e,i,r,c){return new C0(n,t,e,Gy(MD(i)),Gy(MD(r)),c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1335),wAn(1336,W9n,{},Ro),MWn.Tk=function(n,t,e,i,r){return new Uen(n,t,e,BB(i,155).a,BB(r,155).a)},MWn.Uk=function(n,t,e,i,r,c){return new I0(n,t,e,BB(i,155).a,BB(r,155).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1336),wAn(1337,W9n,{},Ko),MWn.Tk=function(n,t,e,i,r){return new Z5(n,t,e,BB(i,19).a,BB(r,19).a)},MWn.Uk=function(n,t,e,i,r,c){return new O0(n,t,e,BB(i,19).a,BB(r,19).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1337),wAn(1338,W9n,{},_o),MWn.Tk=function(n,t,e,i,r){return new Gen(n,t,e,BB(i,162).a,BB(r,162).a)},MWn.Uk=function(n,t,e,i,r,c){return new A0(n,t,e,BB(i,162).a,BB(r,162).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1338),wAn(1339,W9n,{},Fo),MWn.Tk=function(n,t,e,i,r){return new zen(n,t,e,BB(i,184).a,BB(r,184).a)},MWn.Uk=function(n,t,e,i,r,c){return new $0(n,t,e,BB(i,184).a,BB(r,184).a,c)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1339),wAn(1317,563,{},wQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1317),wAn(1318,563,{},ZG),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1318),wAn(770,563,{}),MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c;n.Lg()&&n.Mg()?(r=!0,null==(c=t.Ch(e))?(r=!1,c=this.b):GI(c)===GI(R$t)&&(c=null),null==i?null!=this.c?(t.Dh(e,null),i=this.b):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i)),ban(n,this.d.Uk(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.Dh(e,null):t.Dh(e,R$t):(this.Sk(i),t.Dh(e,i))},MWn.Vj=function(n,t,e){var i,r;n.Lg()&&n.Mg()?(i=!0,null==(r=t.Ch(e))?(i=!1,r=this.b):GI(r)===GI(R$t)&&(r=null),t.Eh(e),ban(n,this.d.Uk(n,2,this.e,r,this.b,i))):t.Eh(e)},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",770),wAn(1319,770,{},dQ),MWn.Sk=function(n){if(!this.a.wj(n))throw Hp(new Ky(U9n+tsn(n)+X9n+this.a+"'"))},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1319),wAn(1320,770,{},nz),MWn.Sk=function(n){},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1320),wAn(398,504,{},cG),MWn.Pj=function(n,t,e,i,r){var c,a,u,o,s;if(s=t.Ch(e),this.Kj()&&GI(s)===GI(R$t))return null;if(this.sk()&&i&&null!=s){if((u=BB(s,49)).kh()&&u!=(o=tfn(n,u))){if(!SFn(this.a,o))throw Hp(new Ky(U9n+tsn(o)+X9n+this.a+"'"));t.Dh(e,s=o),this.rk()&&(c=BB(o,49),a=u.ih(n,this.b?Awn(u.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,null),!c.eh()&&(a=c.gh(n,this.b?Awn(c.Tg(),this.b):-1-Awn(n.Tg(),this.e),null,a)),a&&a.Fi()),n.Lg()&&n.Mg()&&ban(n,new tU(n,9,this.e,u,o))}return s}return s},MWn.Qj=function(n,t,e,i,r){var c,a;return GI(a=t.Ch(e))===GI(R$t)&&(a=null),t.Dh(e,i),this.bj()?GI(a)!==GI(i)&&null!=a&&(r=(c=BB(a,49)).ih(n,Awn(c.Tg(),this.b),null,r)):this.rk()&&null!=a&&(r=BB(a,49).ih(n,-1-Awn(n.Tg(),this.e),null,r)),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),r.Ei(new tU(n,1,this.e,a,i))),r},MWn.Rj=function(n,t,e,i,r){var c;return GI(c=t.Ch(e))===GI(R$t)&&(c=null),t.Eh(e),n.Lg()&&n.Mg()&&(!r&&(r=new Fj(4)),this.Kj()?r.Ei(new tU(n,2,this.e,c,null)):r.Ei(new tU(n,1,this.e,c,null))),r},MWn.Sj=function(n,t,e){return null!=t.Ch(e)},MWn.Tj=function(n,t,e,i){var r,c,a,u,o;if(null!=i&&!SFn(this.a,i))throw Hp(new Ky(U9n+(cL(i,56)?dEn(BB(i,56).Tg()):utn(tsn(i)))+X9n+this.a+"'"));u=null!=(o=t.Ch(e)),this.Kj()&&GI(o)===GI(R$t)&&(o=null),a=null,this.bj()?GI(o)!==GI(i)&&(null!=o&&(a=(r=BB(o,49)).ih(n,Awn(r.Tg(),this.b),null,a)),null!=i&&(a=(r=BB(i,49)).gh(n,Awn(r.Tg(),this.b),null,a))):this.rk()&&GI(o)!==GI(i)&&(null!=o&&(a=BB(o,49).ih(n,-1-Awn(n.Tg(),this.e),null,a)),null!=i&&(a=BB(i,49).gh(n,-1-Awn(n.Tg(),this.e),null,a))),null==i&&this.Kj()?t.Dh(e,R$t):t.Dh(e,i),n.Lg()&&n.Mg()?(c=new GQ(n,1,this.e,o,i,this.Kj()&&!u),a?(a.Ei(c),a.Fi()):ban(n,c)):a&&a.Fi()},MWn.Vj=function(n,t,e){var i,r,c,a,u;a=null!=(u=t.Ch(e)),this.Kj()&&GI(u)===GI(R$t)&&(u=null),c=null,null!=u&&(this.bj()?c=(i=BB(u,49)).ih(n,Awn(i.Tg(),this.b),null,c):this.rk()&&(c=BB(u,49).ih(n,-1-Awn(n.Tg(),this.e),null,c))),t.Eh(e),n.Lg()&&n.Mg()?(r=new GQ(n,this.Kj()?2:1,this.e,u,null,a),c?(c.Ei(r),c.Fi()):ban(n,r)):c&&c.Fi()},MWn.bj=function(){return!1},MWn.rk=function(){return!1},MWn.sk=function(){return!1},MWn.Kj=function(){return!1},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",398),wAn(564,398,{},Zx),MWn.rk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",564),wAn(1323,564,{},nD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1323),wAn(772,564,{},tD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",772),wAn(1325,772,{},eD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1325),wAn(640,564,{},IB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",640),wAn(1324,640,{},$B),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1324),wAn(773,640,{},LB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",773),wAn(1326,773,{},NB),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1326),wAn(641,398,{},iD),MWn.sk=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",641),wAn(1327,641,{},rD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1327),wAn(774,641,{},OB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",774),wAn(1328,774,{},xB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1328),wAn(1321,398,{},cD),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1321),wAn(771,398,{},AB),MWn.bj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",771),wAn(1322,771,{},DB),MWn.Kj=function(){return!0},vX(l6n,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1322),wAn(775,565,z9n,aW),MWn.Pk=function(n){return new aW(this.a,this.c,n)},MWn.dd=function(){return this.b},MWn.Qk=function(n,t,e){return D8(this,n,this.b,e)},MWn.Rk=function(n,t,e){return R8(this,n,this.b,e)},vX(l6n,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",775),wAn(1329,1,k9n,Ep),MWn.Wj=function(n){return this.a},MWn.fj=function(){return cL(this.a,95)?BB(this.a,95).fj():!this.a.dc()},MWn.Wb=function(n){this.a.$b(),this.a.Gc(BB(n,15))},MWn.Xj=function(){cL(this.a,95)?BB(this.a,95).Xj():this.a.$b()},vX(l6n,"EStructuralFeatureImpl/SettingMany",1329),wAn(1330,565,z9n,g4),MWn.Ok=function(n){return new cR((Uqn(),FLt),this.b.Ih(this.a,n))},MWn.dd=function(){return null},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1330),wAn(642,565,z9n,cR),MWn.Ok=function(n){return new cR(this.c,n)},MWn.dd=function(){return this.a},MWn.Qk=function(n,t,e){return e},MWn.Rk=function(n,t,e){return e},vX(l6n,"EStructuralFeatureImpl/SimpleFeatureMapEntry",642),wAn(391,497,h8n,Bo),MWn.ri=function(n){return x8(qAt,HWn,26,n,0,1)},MWn.ni=function(){return!1},vX(l6n,"ESuperAdapter/1",391),wAn(444,438,{105:1,92:1,90:1,147:1,191:1,56:1,108:1,836:1,49:1,97:1,150:1,444:1,114:1,115:1},Ho),MWn._g=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new aG(this,VAt,this)),this.a}return U9(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),_pn(this.Ab,n,e);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),_pn(this.a,n,e)}return BB(itn(BB(yan(this,16),26)||(gWn(),T$t),t),66).Nj().Rj(this,fgn(this),t-bX((gWn(),T$t)),n,e)},MWn.lh=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 O3(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},MWn.sh=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),sqn(this.Ab),!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void pX(this.Ab,BB(t,14));case 1:return void Nrn(this,SD(t));case 2:return!this.a&&(this.a=new aG(this,VAt,this)),sqn(this.a),!this.a&&(this.a=new aG(this,VAt,this)),void pX(this.a,BB(t,14))}Lbn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n),t)},MWn.zh=function(){return gWn(),T$t},MWn.Bh=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new eU(KAt,this,0,3)),void sqn(this.Ab);case 1:return void Nrn(this,null);case 2:return!this.a&&(this.a=new aG(this,VAt,this)),void sqn(this.a)}qfn(this,n-bX((gWn(),T$t)),itn(BB(yan(this,16),26)||T$t,n))},vX(l6n,"ETypeParameterImpl",444),wAn(445,85,R9n,aG),MWn.cj=function(n,t){return LTn(this,BB(n,87),t)},MWn.dj=function(n,t){return NTn(this,BB(n,87),t)},vX(l6n,"ETypeParameterImpl/1",445),wAn(634,43,tYn,xm),MWn.ec=function(){return new Tp(this)},vX(l6n,"ETypeParameterImpl/2",634),wAn(556,nVn,tVn,Tp),MWn.Fc=function(n){return YR(this,BB(n,87))},MWn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=BB(e.Pb(),87),null==VW(this.a,t,"")&&(i=!0);return i},MWn.$b=function(){$U(this.a)},MWn.Hc=function(n){return hU(this.a,n)},MWn.Kc=function(){return new Mp(new usn(new Pb(this.a).a))},MWn.Mc=function(n){return _6(this,n)},MWn.gc=function(){return NT(this.a)},vX(l6n,"ETypeParameterImpl/2/1",556),wAn(557,1,QWn,Mp),MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return BB(ten(this.a).cd(),87)},MWn.Ob=function(){return this.a.b},MWn.Qb=function(){o9(this.a)},vX(l6n,"ETypeParameterImpl/2/1/1",557),wAn(1276,43,tYn,Dm),MWn._b=function(n){return XI(n)?eY(this,n):!!AY(this.f,n)},MWn.xc=function(n){var t;return cL(t=XI(n)?SJ(this,n):qI(AY(this.f,n)),837)?(t=BB(t,837)._j(),VW(this,BB(n,235),t),t):null!=t?t:null==n?(JM(),rLt):null},vX(l6n,"EValidatorRegistryImpl",1276),wAn(1313,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,1941:1,49:1,97:1,150:1,114:1,115:1},qo),MWn.Ih=function(n,t){switch(n.yj()){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:Bbn(t);case 25:return Xtn(t);case 27:return X9(t);case 28:return W9(t);case 29:return null==t?null:H$(IOt[0],BB(t,199));case 41:return null==t?"":nE(BB(t,290));case 42:return Bbn(t);case 50:return SD(t);default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Om;case 1:return new jo;case 2:return new _f;case 4:return new Ev;case 5:return new Am;case 6:return new jv;case 7:return new Rf;case 10:return new yo;case 11:return new $m;case 12:return new vY;case 13:return new Lm;case 14:return new pD;case 17:return new Ao;case 18:return new Kp;case 19:return new Ho;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){switch(n.yj()){case 20:return null==t?null:new wE(t);case 21:return null==t?null:new $A(t);case 23:case 22:return null==t?null:Zdn(t);case 26:case 24:return null==t?null:Pnn(l_n(t,-128,127)<<24>>24);case 25:return d$n(t);case 27:return Syn(t);case 28:return Pyn(t);case 29:return gMn(t);case 32:case 31:return null==t?null:bSn(t);case 38:case 37:return null==t?null:new Dv(t);case 40:case 39:return null==t?null:iln(l_n(t,_Vn,DWn));case 41:case 42:return null;case 44:case 43:return null==t?null:jgn(rUn(t));case 49:case 48:return null==t?null:rln(l_n(t,Q9n,32767)<<16>>16);case 50:return t;default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(l6n,"EcoreFactoryImpl",1313),wAn(547,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,1939:1,49:1,97:1,150:1,179:1,547:1,114:1,115:1,675:1},UW),MWn.gb=!1,MWn.hb=!1;var V$t,Q$t=!1;vX(l6n,"EcorePackageImpl",547),wAn(1184,1,{837:1},Go),MWn._j=function(){return sN(),cLt},vX(l6n,"EcorePackageImpl/1",1184),wAn(1193,1,s7n,zo),MWn.wj=function(n){return cL(n,147)},MWn.xj=function(n){return x8(BOt,HWn,147,n,0,1)},vX(l6n,"EcorePackageImpl/10",1193),wAn(1194,1,s7n,Uo),MWn.wj=function(n){return cL(n,191)},MWn.xj=function(n){return x8(qOt,HWn,191,n,0,1)},vX(l6n,"EcorePackageImpl/11",1194),wAn(1195,1,s7n,Xo),MWn.wj=function(n){return cL(n,56)},MWn.xj=function(n){return x8(LOt,HWn,56,n,0,1)},vX(l6n,"EcorePackageImpl/12",1195),wAn(1196,1,s7n,Wo),MWn.wj=function(n){return cL(n,399)},MWn.xj=function(n){return x8(QAt,x9n,59,n,0,1)},vX(l6n,"EcorePackageImpl/13",1196),wAn(1197,1,s7n,Vo),MWn.wj=function(n){return cL(n,235)},MWn.xj=function(n){return x8(GOt,HWn,235,n,0,1)},vX(l6n,"EcorePackageImpl/14",1197),wAn(1198,1,s7n,Qo),MWn.wj=function(n){return cL(n,509)},MWn.xj=function(n){return x8(YAt,HWn,2017,n,0,1)},vX(l6n,"EcorePackageImpl/15",1198),wAn(1199,1,s7n,Yo),MWn.wj=function(n){return cL(n,99)},MWn.xj=function(n){return x8(JAt,N9n,18,n,0,1)},vX(l6n,"EcorePackageImpl/16",1199),wAn(1200,1,s7n,Jo),MWn.wj=function(n){return cL(n,170)},MWn.xj=function(n){return x8(FAt,N9n,170,n,0,1)},vX(l6n,"EcorePackageImpl/17",1200),wAn(1201,1,s7n,Zo),MWn.wj=function(n){return cL(n,472)},MWn.xj=function(n){return x8(_At,HWn,472,n,0,1)},vX(l6n,"EcorePackageImpl/18",1201),wAn(1202,1,s7n,ns),MWn.wj=function(n){return cL(n,548)},MWn.xj=function(n){return x8(X$t,a9n,548,n,0,1)},vX(l6n,"EcorePackageImpl/19",1202),wAn(1185,1,s7n,ts),MWn.wj=function(n){return cL(n,322)},MWn.xj=function(n){return x8(BAt,N9n,34,n,0,1)},vX(l6n,"EcorePackageImpl/2",1185),wAn(1203,1,s7n,es),MWn.wj=function(n){return cL(n,241)},MWn.xj=function(n){return x8(VAt,B9n,87,n,0,1)},vX(l6n,"EcorePackageImpl/20",1203),wAn(1204,1,s7n,is),MWn.wj=function(n){return cL(n,444)},MWn.xj=function(n){return x8(O$t,HWn,836,n,0,1)},vX(l6n,"EcorePackageImpl/21",1204),wAn(1205,1,s7n,rs),MWn.wj=function(n){return zI(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(l6n,"EcorePackageImpl/22",1205),wAn(1206,1,s7n,cs),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(l6n,"EcorePackageImpl/23",1206),wAn(1207,1,s7n,as),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(l6n,"EcorePackageImpl/24",1207),wAn(1208,1,s7n,us),MWn.wj=function(n){return cL(n,172)},MWn.xj=function(n){return x8(Stt,sVn,172,n,0,1)},vX(l6n,"EcorePackageImpl/25",1208),wAn(1209,1,s7n,os),MWn.wj=function(n){return cL(n,199)},MWn.xj=function(n){return x8(mtt,sVn,199,n,0,1)},vX(l6n,"EcorePackageImpl/26",1209),wAn(1210,1,s7n,ss),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(_Nt,HWn,2110,n,0,1)},vX(l6n,"EcorePackageImpl/27",1210),wAn(1211,1,s7n,hs),MWn.wj=function(n){return UI(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(l6n,"EcorePackageImpl/28",1211),wAn(1212,1,s7n,fs),MWn.wj=function(n){return cL(n,58)},MWn.xj=function(n){return x8(uAt,nZn,58,n,0,1)},vX(l6n,"EcorePackageImpl/29",1212),wAn(1186,1,s7n,ls),MWn.wj=function(n){return cL(n,510)},MWn.xj=function(n){return x8(KAt,{3:1,4:1,5:1,1934:1},590,n,0,1)},vX(l6n,"EcorePackageImpl/3",1186),wAn(1213,1,s7n,bs),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(yAt,HWn,1940,n,0,1)},vX(l6n,"EcorePackageImpl/30",1213),wAn(1214,1,s7n,ws),MWn.wj=function(n){return cL(n,153)},MWn.xj=function(n){return x8(oLt,nZn,153,n,0,1)},vX(l6n,"EcorePackageImpl/31",1214),wAn(1215,1,s7n,ds),MWn.wj=function(n){return cL(n,72)},MWn.xj=function(n){return x8($$t,h7n,72,n,0,1)},vX(l6n,"EcorePackageImpl/32",1215),wAn(1216,1,s7n,gs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Ctt,sVn,155,n,0,1)},vX(l6n,"EcorePackageImpl/33",1216),wAn(1217,1,s7n,ps),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(l6n,"EcorePackageImpl/34",1217),wAn(1218,1,s7n,vs),MWn.wj=function(n){return cL(n,290)},MWn.xj=function(n){return x8($nt,HWn,290,n,0,1)},vX(l6n,"EcorePackageImpl/35",1218),wAn(1219,1,s7n,ms),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(l6n,"EcorePackageImpl/36",1219),wAn(1220,1,s7n,ys),MWn.wj=function(n){return cL(n,83)},MWn.xj=function(n){return x8(Nnt,HWn,83,n,0,1)},vX(l6n,"EcorePackageImpl/37",1220),wAn(1221,1,s7n,ks),MWn.wj=function(n){return cL(n,591)},MWn.xj=function(n){return x8(iLt,HWn,591,n,0,1)},vX(l6n,"EcorePackageImpl/38",1221),wAn(1222,1,s7n,js),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(FNt,HWn,2111,n,0,1)},vX(l6n,"EcorePackageImpl/39",1222),wAn(1187,1,s7n,Es),MWn.wj=function(n){return cL(n,88)},MWn.xj=function(n){return x8(qAt,HWn,26,n,0,1)},vX(l6n,"EcorePackageImpl/4",1187),wAn(1223,1,s7n,Ts),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(l6n,"EcorePackageImpl/40",1223),wAn(1224,1,s7n,Ms),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(l6n,"EcorePackageImpl/41",1224),wAn(1225,1,s7n,Ss),MWn.wj=function(n){return cL(n,588)},MWn.xj=function(n){return x8(sAt,HWn,588,n,0,1)},vX(l6n,"EcorePackageImpl/42",1225),wAn(1226,1,s7n,Ps),MWn.wj=function(n){return!1},MWn.xj=function(n){return x8(BNt,sVn,2112,n,0,1)},vX(l6n,"EcorePackageImpl/43",1226),wAn(1227,1,s7n,Cs),MWn.wj=function(n){return cL(n,42)},MWn.xj=function(n){return x8(Hnt,kVn,42,n,0,1)},vX(l6n,"EcorePackageImpl/44",1227),wAn(1188,1,s7n,Is),MWn.wj=function(n){return cL(n,138)},MWn.xj=function(n){return x8(HAt,HWn,138,n,0,1)},vX(l6n,"EcorePackageImpl/5",1188),wAn(1189,1,s7n,Os),MWn.wj=function(n){return cL(n,148)},MWn.xj=function(n){return x8(GAt,HWn,148,n,0,1)},vX(l6n,"EcorePackageImpl/6",1189),wAn(1190,1,s7n,As),MWn.wj=function(n){return cL(n,457)},MWn.xj=function(n){return x8(XAt,HWn,671,n,0,1)},vX(l6n,"EcorePackageImpl/7",1190),wAn(1191,1,s7n,$s),MWn.wj=function(n){return cL(n,573)},MWn.xj=function(n){return x8(WAt,HWn,678,n,0,1)},vX(l6n,"EcorePackageImpl/8",1191),wAn(1192,1,s7n,Ls),MWn.wj=function(n){return cL(n,471)},MWn.xj=function(n){return x8(HOt,HWn,471,n,0,1)},vX(l6n,"EcorePackageImpl/9",1192),wAn(1025,1982,r9n,xy),MWn.bi=function(n,t){Afn(this,BB(t,415))},MWn.fi=function(n,t){eCn(this,n,BB(t,415))},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1025),wAn(1026,143,t9n,uW),MWn.Ai=function(){return this.a.a},vX(l6n,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1026),wAn(1053,1052,{},o$),vX("org.eclipse.emf.ecore.plugin","EcorePlugin",1053);var Y$t,J$t,Z$t,nLt,tLt,eLt,iLt=bq(f7n,"Resource");wAn(781,1378,l7n),MWn.Yk=function(n){},MWn.Zk=function(n){},MWn.Vk=function(){return!this.a&&(this.a=new Sp(this)),this.a},MWn.Wk=function(n){var t,e,i,r,c;if((i=n.length)>0){if(b1(0,n.length),47==n.charCodeAt(0)){for(c=new J6(4),r=1,t=1;t<i;++t)b1(t,n.length),47==n.charCodeAt(t)&&(WB(c,r==t?"":n.substr(r,t-r)),r=t+1);return WB(c,n.substr(r)),ojn(this,c)}b1(i-1,n.length),63==n.charCodeAt(i-1)&&(e=MK(n,YTn(63),i-2))>0&&(n=n.substr(0,e))}return jIn(this,n)},MWn.Xk=function(){return this.c},MWn.Ib=function(){return nE(this.gm)+"@"+(nsn(this)>>>0).toString(16)+" uri='"+this.d+"'"},MWn.b=!1,vX(b7n,"ResourceImpl",781),wAn(1379,781,l7n,Cp),vX(b7n,"BinaryResourceImpl",1379),wAn(1169,694,f8n),MWn.si=function(n){return cL(n,56)?TY(this,BB(n,56)):cL(n,591)?new AL(BB(n,591).Vk()):GI(n)===GI(this.f)?BB(n,14).Kc():(dD(),pAt.a)},MWn.Ob=function(){return bOn(this)},MWn.a=!1,vX(y9n,"EcoreUtil/ContentTreeIterator",1169),wAn(1380,1169,f8n,rU),MWn.si=function(n){return GI(n)===GI(this.f)?BB(n,15).Kc():new F2(BB(n,56))},vX(b7n,"ResourceImpl/5",1380),wAn(648,1994,D9n,Sp),MWn.Hc=function(n){return this.i<=4?Sjn(this,n):cL(n,49)&&BB(n,49).Zg()==this.a},MWn.bi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},MWn.di=function(n,t){0==n?this.a.b||(this.a.b=!0):L8(this,n,t)},MWn.fi=function(n,t){},MWn.gi=function(n,t,e){},MWn.aj=function(){return 2},MWn.Ai=function(){return this.a},MWn.bj=function(){return!0},MWn.cj=function(n,t){return t=BB(n,49).wh(this.a,t)},MWn.dj=function(n,t){return BB(n,49).wh(null,t)},MWn.ej=function(){return!1},MWn.hi=function(){return!0},MWn.ri=function(n){return x8(LOt,HWn,56,n,0,1)},MWn.ni=function(){return!1},vX(b7n,"ResourceImpl/ContentsEList",648),wAn(957,1964,LVn,Pp),MWn.Zc=function(n){return this.a._h(n)},MWn.gc=function(){return this.a.gc()},vX(y9n,"AbstractSequentialInternalEList/1",957),wAn(624,1,{},SH),vX(y9n,"BasicExtendedMetaData",624),wAn(1160,1,{},$I),MWn.$k=function(){return null},MWn._k=function(){return-2==this.a&&ob(this,aMn(this.d,this.b)),this.a},MWn.al=function(){return null},MWn.bl=function(){return SQ(),SQ(),set},MWn.ne=function(){return this.c==C7n&&hb(this,Egn(this.d,this.b)),this.c},MWn.cl=function(){return 0},MWn.a=-2,MWn.c=C7n,vX(y9n,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1160),wAn(1161,1,{},_0),MWn.$k=function(){return this.a==(R5(),tLt)&&sb(this,vNn(this.f,this.b)),this.a},MWn._k=function(){return 0},MWn.al=function(){return this.c==(R5(),tLt)&&fb(this,mNn(this.f,this.b)),this.c},MWn.bl=function(){return!this.d&&lb(this,SKn(this.f,this.b)),this.d},MWn.ne=function(){return this.e==C7n&&bb(this,Egn(this.f,this.b)),this.e},MWn.cl=function(){return-2==this.g&&wb(this,YEn(this.f,this.b)),this.g},MWn.e=C7n,MWn.g=-2,vX(y9n,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1161),wAn(1159,1,{},RI),MWn.b=!1,MWn.c=!1,vX(y9n,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1159),wAn(1162,1,{},K0),MWn.c=-2,MWn.e=C7n,MWn.f=C7n,vX(y9n,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1162),wAn(585,622,R9n,MH),MWn.aj=function(){return this.c},MWn.Fk=function(){return!1},MWn.li=function(n,t){return t},MWn.c=0,vX(y9n,"EDataTypeEList",585);var rLt,cLt,aLt,uLt,oLt=bq(y9n,"FeatureMap");wAn(75,585,{3:1,4:1,20:1,28:1,52:1,14:1,15:1,54:1,67:1,63:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},Ecn),MWn.Vc=function(n,t){lNn(this,n,BB(t,72))},MWn.Fc=function(n){return uLn(this,BB(n,72))},MWn.Yh=function(n){dX(this,BB(n,72))},MWn.cj=function(n,t){return HK(this,BB(n,72),t)},MWn.dj=function(n,t){return qK(this,BB(n,72),t)},MWn.ii=function(n,t){return a_n(this,n,t)},MWn.li=function(n,t){return hGn(this,n,BB(t,72))},MWn._c=function(n,t){return Pxn(this,n,BB(t,72))},MWn.jj=function(n,t){return GK(this,BB(n,72),t)},MWn.kj=function(n,t){return zK(this,BB(n,72),t)},MWn.lj=function(n,t,e){return gEn(this,BB(n,72),BB(t,72),e)},MWn.oi=function(n,t){return sTn(this,n,BB(t,72))},MWn.dl=function(n,t){return xKn(this,n,t)},MWn.Wc=function(n,t){var e,i,r,c,a,u,o,s,h;for(s=new gtn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=BB(r.Pb(),72)).ak(),$xn(this.e,c))(!c.hi()||!G3(this,c,i.dd())&&!Sjn(s,i))&&f9(s,i);else{for(h=axn(this.e.Tg(),c),e=BB(this.g,119),a=!0,u=0;u<this.i;++u)if(o=e[u],h.rl(o.ak())){BB(ovn(this,u,i),72),a=!1;break}a&&f9(s,i)}return oon(this,n,s)},MWn.Gc=function(n){var t,e,i,r,c,a,u,o,s;for(o=new gtn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=BB(i.Pb(),72)).ak(),$xn(this.e,r))(!r.hi()||!G3(this,r,e.dd())&&!Sjn(o,e))&&f9(o,e);else{for(s=axn(this.e.Tg(),r),t=BB(this.g,119),c=!0,a=0;a<this.i;++a)if(u=t[a],s.rl(u.ak())){BB(ovn(this,a,e),72),c=!1;break}c&&f9(o,e)}return pX(this,o)},MWn.Wh=function(n){return this.j=-1,LFn(this,this.i,n)},MWn.el=function(n,t,e){return PRn(this,n,t,e)},MWn.mk=function(n,t){return TKn(this,n,t)},MWn.fl=function(n,t,e){return ZBn(this,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this,n,t)},MWn.il=function(n){return BB(Wtn(this,n),72).ak()},MWn.jl=function(n){return BB(Wtn(this,n),72).dd()},MWn.kl=function(){return this.b},MWn.bj=function(){return!0},MWn.ij=function(){return!0},MWn.ll=function(n){return!adn(this,n)},MWn.ri=function(n){return x8(W$t,h7n,332,n,0,1)},MWn.Gk=function(n){return hD(this,n)},MWn.Wb=function(n){tX(this,n)},MWn.ml=function(n,t){MHn(this,n,t)},MWn.nl=function(n){return zin(this,n)},MWn.ol=function(n){Kmn(this,n)},vX(y9n,"BasicFeatureMap",75),wAn(1851,1,cVn),MWn.Nb=function(n){fU(this,n)},MWn.Rb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{Axn(this.e,this.b,this.a,n),this.d=this.e.j,cvn(this)}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.Ob=function(){return Ksn(this)},MWn.Sb=function(){return _sn(this)},MWn.Pb=function(){return cvn(this)},MWn.Tb=function(){return this.a},MWn.Ub=function(){var n;if(_sn(this))return mz(this),this.g=--this.a,this.Lk()&&(n=FIn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw Hp(new yv)},MWn.Vb=function(){return this.a-1},MWn.Qb=function(){if(-1==this.g)throw Hp(new dv);mz(this);try{aPn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw cL(n=lun(n),73)?Hp(new vv):Hp(n)}},MWn.Lk=function(){return!1},MWn.Wb=function(n){if(-1==this.g)throw Hp(new dv);mz(this);try{XFn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw cL(t=lun(t),73)?Hp(new vv):Hp(t)}},MWn.a=0,MWn.c=0,MWn.d=0,MWn.f=!1,MWn.g=0,MWn.i=0,vX(y9n,"FeatureMapUtil/BasicFeatureEIterator",1851),wAn(410,1851,cVn,Aan),MWn.pl=function(){var n,t,e;for(e=this.e.i,n=BB(this.e.g,119);this.c<e;){if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},MWn.ql=function(){var n,t;for(n=BB(this.e.g,119);--this.c>=0;)if(t=n[this.c],this.k.rl(t.ak()))return this.j=this.f?t:t.dd(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},vX(y9n,"BasicFeatureMap/FeatureEIterator",410),wAn(662,410,cVn,xO),MWn.Lk=function(){return!0},vX(y9n,"BasicFeatureMap/ResolvingFeatureEIterator",662),wAn(955,486,q9n,z$),MWn.Gi=function(){return this},vX(y9n,"EContentsEList/1",955),wAn(956,486,q9n,DO),MWn.Lk=function(){return!1},vX(y9n,"EContentsEList/2",956),wAn(954,279,G9n,U$),MWn.Nk=function(n){},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},vX(y9n,"EContentsEList/FeatureIteratorImpl/1",954),wAn(825,585,R9n,KL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EDataTypeEList/Unsettable",825),wAn(1849,585,R9n,_L),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList",1849),wAn(1850,825,R9n,FL),MWn.hi=function(){return!0},vX(y9n,"EDataTypeUniqueEList/Unsettable",1850),wAn(139,85,R9n,NL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Resolving",139),wAn(1163,545,R9n,xL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentEList/Unsettable/Resolving",1163),wAn(748,16,R9n,iK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectContainmentWithInverseEList/Unsettable",748),wAn(1173,748,R9n,rK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1173),wAn(743,496,R9n,DL),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectEList/Unsettable",743),wAn(328,496,R9n,RL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList",328),wAn(1641,743,R9n,BL),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectResolvingEList/Unsettable",1641),wAn(1381,1,{},Ns),vX(y9n,"EObjectValidator",1381),wAn(546,496,R9n,iU),MWn.zk=function(){return this.d},MWn.Ak=function(){return this.b},MWn.bj=function(){return!0},MWn.Dk=function(){return!0},MWn.b=0,vX(y9n,"EObjectWithInverseEList",546),wAn(1176,546,R9n,cK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/ManyInverse",1176),wAn(625,546,R9n,aK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EObjectWithInverseEList/Unsettable",625),wAn(1175,625,R9n,oK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseEList/Unsettable/ManyInverse",1175),wAn(749,546,R9n,uK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList",749),wAn(31,749,R9n,hK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/ManyInverse",31),wAn(750,625,R9n,sK),MWn.Ek=function(){return!0},MWn.li=function(n,t){return GOn(this,n,BB(t,56))},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable",750),wAn(1174,750,R9n,fK),MWn.Ck=function(){return!0},vX(y9n,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1174),wAn(1164,622,R9n),MWn.ai=function(){return 0==(1792&this.b)},MWn.ci=function(){this.b|=1},MWn.Bk=function(){return 0!=(4&this.b)},MWn.bj=function(){return 0!=(40&this.b)},MWn.Ck=function(){return 0!=(16&this.b)},MWn.Dk=function(){return 0!=(8&this.b)},MWn.Ek=function(){return 0!=(this.b&M9n)},MWn.rk=function(){return 0!=(32&this.b)},MWn.Fk=function(){return 0!=(this.b&k6n)},MWn.wj=function(n){return this.d?x3(this.d,n):this.ak().Yj().wj(n)},MWn.fj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},MWn.hi=function(){return 0!=(128&this.b)},MWn.Xj=function(){var n;sqn(this),0!=(2&this.b)&&(mA(this.e)?(n=0!=(1&this.b),this.b&=-2,Lv(this,new t6(this.e,2,Awn(this.e.Tg(),this.ak()),n,!1))):this.b&=-2)},MWn.ni=function(){return 0==(1536&this.b)},MWn.b=0,vX(y9n,"EcoreEList/Generic",1164),wAn(1165,1164,R9n,zQ),MWn.ak=function(){return this.a},vX(y9n,"EcoreEList/Dynamic",1165),wAn(747,63,h8n,Ip),MWn.ri=function(n){return Den(this.a.a,n)},vX(y9n,"EcoreEMap/1",747),wAn(746,85,R9n,Zz),MWn.bi=function(n,t){Ivn(this.b,BB(t,133))},MWn.di=function(n,t){aan(this.b)},MWn.ei=function(n,t,e){var i;++(i=this.b,BB(t,133),i).e},MWn.fi=function(n,t){Oln(this.b,BB(t,133))},MWn.gi=function(n,t,e){Oln(this.b,BB(e,133)),GI(e)===GI(t)&&BB(e,133).Th(c$(BB(t,133).cd())),Ivn(this.b,BB(t,133))},vX(y9n,"EcoreEMap/DelegateEObjectContainmentEList",746),wAn(1171,151,j9n,yin),vX(y9n,"EcoreEMap/Unsettable",1171),wAn(1172,746,R9n,lK),MWn.ci=function(){this.a=!0},MWn.fj=function(){return this.a},MWn.Xj=function(){var n;sqn(this),mA(this.e)?(n=this.a,this.a=!1,ban(this.e,new t6(this.e,2,this.c,n,!1))):this.a=!1},MWn.a=!1,vX(y9n,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1172),wAn(1168,228,tYn,lX),MWn.a=!1,MWn.b=!1,vX(y9n,"EcoreUtil/Copier",1168),wAn(745,1,QWn,F2),MWn.Nb=function(n){fU(this,n)},MWn.Ob=function(){return udn(this)},MWn.Pb=function(){var n;return udn(this),n=this.b,this.b=null,n},MWn.Qb=function(){this.a.Qb()},vX(y9n,"EcoreUtil/ProperContentIterator",745),wAn(1382,1381,{},Ff),vX(y9n,"EcoreValidator",1382),bq(y9n,"FeatureMapUtil/Validator"),wAn(1260,1,{1942:1},xs),MWn.rl=function(n){return!0},vX(y9n,"FeatureMapUtil/1",1260),wAn(757,1,{1942:1},cUn),MWn.rl=function(n){var t;return this.c==n||(null==(t=TD(RX(this.a,n)))?xRn(this,n)?(r6(this.a,n,(hN(),vtt)),!0):(r6(this.a,n,(hN(),ptt)),!1):t==(hN(),vtt))},MWn.e=!1,vX(y9n,"FeatureMapUtil/BasicValidator",757),wAn(758,43,tYn,X$),vX(y9n,"FeatureMapUtil/BasicValidator/Cache",758),wAn(501,52,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,69:1,95:1},xI),MWn.Vc=function(n,t){Axn(this.c,this.b,n,t)},MWn.Fc=function(n){return xKn(this.c,this.b,n)},MWn.Wc=function(n,t){return jHn(this.c,this.b,n,t)},MWn.Gc=function(n){return Z$(this,n)},MWn.Xh=function(n,t){htn(this.c,this.b,n,t)},MWn.lk=function(n,t){return PRn(this.c,this.b,n,t)},MWn.pi=function(n){return iHn(this.c,this.b,n,!1)},MWn.Zh=function(){return jA(this.c,this.b)},MWn.$h=function(){return EA(this.c,this.b)},MWn._h=function(n){return $8(this.c,this.b,n)},MWn.mk=function(n,t){return tR(this,n,t)},MWn.$b=function(){Nv(this)},MWn.Hc=function(n){return G3(this.c,this.b,n)},MWn.Ic=function(n){return Mcn(this.c,this.b,n)},MWn.Xb=function(n){return iHn(this.c,this.b,n,!0)},MWn.Wj=function(n){return this},MWn.Xc=function(n){return z3(this.c,this.b,n)},MWn.dc=function(){return HI(this)},MWn.fj=function(){return!adn(this.c,this.b)},MWn.Kc=function(){return cnn(this.c,this.b)},MWn.Yc=function(){return ann(this.c,this.b)},MWn.Zc=function(n){return lln(this.c,this.b,n)},MWn.ii=function(n,t){return mFn(this.c,this.b,n,t)},MWn.ji=function(n,t){Q6(this.c,this.b,n,t)},MWn.$c=function(n){return aPn(this.c,this.b,n)},MWn.Mc=function(n){return CKn(this.c,this.b,n)},MWn._c=function(n,t){return XFn(this.c,this.b,n,t)},MWn.Wb=function(n){AOn(this.c,this.b),Z$(this,BB(n,15))},MWn.gc=function(){return Kln(this.c,this.b)},MWn.Pc=function(){return G1(this.c,this.b)},MWn.Qc=function(n){return U3(this.c,this.b,n)},MWn.Ib=function(){var n,t;for((t=new Sk).a+="[",n=jA(this.c,this.b);Ksn(n);)cO(t,kN(cvn(n))),Ksn(n)&&(t.a+=FWn);return t.a+="]",t.a},MWn.Xj=function(){AOn(this.c,this.b)},vX(y9n,"FeatureMapUtil/FeatureEList",501),wAn(627,36,t9n,b4),MWn.yi=function(n){return eln(this,n)},MWn.Di=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.g=n.zi(),1==n.xi()&&(this.d=1),!0;break;case 3:if(3===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=5,f9(t=new gtn(2),this.g),f9(t,n.zi()),this.g=t,!0;break;case 5:if(3===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return BB(this.g,14).Fc(n.zi()),!0;break;case 4:switch(n.xi()){case 3:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=1,this.g=n.zi(),!0;break;case 4:if(GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return this.d=6,f9(r=new gtn(2),this.n),f9(r,n.Bi()),this.n=r,i=Pun(Gk(ANt,1),hQn,25,15,[this.o,n.Ci()]),this.g=i,!0}break;case 6:if(4===n.xi()&&GI(n.Ai())===GI(this.c)&&eln(this,null)==n.yi(null))return BB(this.n,14).Fc(n.Bi()),aHn(i=BB(this.g,48),0,e=x8(ANt,hQn,25,i.length+1,15,1),0,i.length),e[i.length]=n.Ci(),this.g=e,!0}return!1},vX(y9n,"FeatureMapUtil/FeatureENotificationImpl",627),wAn(552,501,{20:1,28:1,52:1,14:1,15:1,58:1,76:1,153:1,215:1,1937:1,69:1,95:1},lq),MWn.dl=function(n,t){return xKn(this.c,n,t)},MWn.el=function(n,t,e){return PRn(this.c,n,t,e)},MWn.fl=function(n,t,e){return ZBn(this.c,n,t,e)},MWn.gl=function(){return this},MWn.hl=function(n,t){return rHn(this.c,n,t)},MWn.il=function(n){return BB(iHn(this.c,this.b,n,!1),72).ak()},MWn.jl=function(n){return BB(iHn(this.c,this.b,n,!1),72).dd()},MWn.kl=function(){return this.a},MWn.ll=function(n){return!adn(this.c,n)},MWn.ml=function(n,t){MHn(this.c,n,t)},MWn.nl=function(n){return zin(this.c,n)},MWn.ol=function(n){Kmn(this.c,n)},vX(y9n,"FeatureMapUtil/FeatureFeatureMap",552),wAn(1259,1,k9n,KI),MWn.Wj=function(n){return iHn(this.b,this.a,-1,n)},MWn.fj=function(){return!adn(this.b,this.a)},MWn.Wb=function(n){MHn(this.b,this.a,n)},MWn.Xj=function(){AOn(this.b,this.a)},vX(y9n,"FeatureMapUtil/FeatureValue",1259);var sLt,hLt,fLt,lLt,bLt,wLt=bq(O7n,"AnyType");wAn(666,60,BVn,ik),vX(O7n,"InvalidDatatypeValueException",666);var dLt,gLt,pLt,vLt,mLt,yLt,kLt,jLt,ELt,TLt,MLt,SLt,PLt,CLt,ILt,OLt,ALt,$Lt,LLt,NLt,xLt,DLt,RLt,KLt,_Lt,FLt,BLt,HLt,qLt,GLt,zLt=bq(O7n,A7n),ULt=bq(O7n,$7n),XLt=bq(O7n,L7n);wAn(830,506,{105:1,92:1,90:1,56:1,49:1,97:1,843:1},Rm),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b)}return U9(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new Ecn(this,0)),TKn(this.c,n,e);case 1:return(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),69)).mk(n,e);case 2:return!this.b&&(this.b=new Ecn(this,2)),TKn(this.b,n,e)}return BB(itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX(this.zh()),n,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i}return O3(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t)}Lbn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),pLt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b)}qfn(this,n-bX(this.zh()),itn(0==(2&this.j)?this.zh():(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.c),n.a+=", anyAttribute: ",rO(n,this.b),n.a+=")",n.a)},vX(N7n,"AnyTypeImpl",830),wAn(667,506,{105:1,92:1,90:1,56:1,49:1,97:1,2021:1,667:1},Rs),MWn._g=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return U9(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return O3(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return void kb(this,SD(t));case 1:return void jb(this,SD(t))}Lbn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),OLt},MWn.Bh=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}qfn(this,n-bX((Uqn(),OLt)),itn(0==(2&this.j)?OLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (data: ",cO(n,this.a),n.a+=", target: ",cO(n,this.b),n.a+=")",n.a)},MWn.a=null,MWn.b=null,vX(N7n,"ProcessingInstructionImpl",667),wAn(668,830,{105:1,92:1,90:1,56:1,49:1,97:1,843:1,2022:1,668:1},_m),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new Ecn(this,0)),this.c):(!this.c&&(this.c=new Ecn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)):(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).kl();case 2:return e?(!this.b&&(this.b=new Ecn(this,2)),this.b):(!this.b&&(this.b=new Ecn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return this.a}return U9(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.lh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new Ecn(this,0)),null!=SD(rHn(this.c,(Uqn(),LLt),!0));case 4:return null!=gK(this.a,(!this.c&&(this.c=new Ecn(this,0)),SD(rHn(this.c,(Uqn(),LLt),!0))));case 5:return!!this.a}return O3(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void tX(this.c,t);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(BB(n1(this.c,(Uqn(),vLt)),153),215)).Wb(t);case 2:return!this.b&&(this.b=new Ecn(this,2)),void tX(this.b,t);case 3:return void F0(this,SD(t));case 4:return void F0(this,pK(this.a,t));case 5:return void Eb(this,BB(t,148))}Lbn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),$Lt},MWn.Bh=function(n){switch(n){case 0:return!this.c&&(this.c=new Ecn(this,0)),void sqn(this.c);case 1:return void(!this.c&&(this.c=new Ecn(this,0)),BB(n1(this.c,(Uqn(),vLt)),153)).$b();case 2:return!this.b&&(this.b=new Ecn(this,2)),void sqn(this.b);case 3:return!this.c&&(this.c=new Ecn(this,0)),void MHn(this.c,(Uqn(),LLt),null);case 4:return void F0(this,pK(this.a,null));case 5:return void(this.a=null)}qfn(this,n-bX((Uqn(),$Lt)),itn(0==(2&this.j)?$Lt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},vX(N7n,"SimpleAnyTypeImpl",668),wAn(669,506,{105:1,92:1,90:1,56:1,49:1,97:1,2023:1,669:1},Km),MWn._g=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new Ecn(this,0)),this.a):(!this.a&&(this.a=new Ecn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),this.b):(!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),A8(this.b));case 2:return e?(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),this.c):(!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),A8(this.c));case 3:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),DLt));case 4:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),RLt));case 5:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),_Lt));case 6:return!this.a&&(this.a=new Ecn(this,0)),n1(this.a,(Uqn(),FLt))}return U9(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t,e)},MWn.jh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new Ecn(this,0)),TKn(this.a,n,e);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),BK(this.b,n,e);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),BK(this.c,n,e);case 5:return!this.a&&(this.a=new Ecn(this,0)),tR(n1(this.a,(Uqn(),_Lt)),n,e)}return BB(itn(0==(2&this.j)?(Uqn(),xLt):(!this.k&&(this.k=new Kf),this.k).ck(),t),66).Nj().Rj(this,Q7(this),t-bX((Uqn(),xLt)),n,e)},MWn.lh=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 Ecn(this,0)),!HI(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),!HI(n1(this.a,(Uqn(),FLt)))}return O3(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.sh=function(n,t){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void tX(this.a,t);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void tan(this.b,t);case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void tan(this.c,t);case 3:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),DLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,DLt),BB(t,14));case 4:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),RLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,RLt),BB(t,14));case 5:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),_Lt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,_Lt),BB(t,14));case 6:return!this.a&&(this.a=new Ecn(this,0)),Nv(n1(this.a,(Uqn(),FLt))),!this.a&&(this.a=new Ecn(this,0)),void Z$(n1(this.a,FLt),BB(t,14))}Lbn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n),t)},MWn.zh=function(){return Uqn(),xLt},MWn.Bh=function(n){switch(n){case 0:return!this.a&&(this.a=new Ecn(this,0)),void sqn(this.a);case 1:return!this.b&&(this.b=new y9((gWn(),k$t),X$t,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new y9((gWn(),k$t),X$t,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),DLt)));case 4:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),RLt)));case 5:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),_Lt)));case 6:return!this.a&&(this.a=new Ecn(this,0)),void Nv(n1(this.a,(Uqn(),FLt)))}qfn(this,n-bX((Uqn(),xLt)),itn(0==(2&this.j)?xLt:(!this.k&&(this.k=new Kf),this.k).ck(),n))},MWn.Ib=function(){var n;return 0!=(4&this.j)?P$n(this):((n=new fN(P$n(this))).a+=" (mixed: ",rO(n,this.a),n.a+=")",n.a)},vX(N7n,"XMLTypeDocumentRootImpl",669),wAn(1919,704,{105:1,92:1,90:1,471:1,147:1,56:1,108:1,49:1,97:1,150:1,114:1,115:1,2024:1},Ds),MWn.Ih=function(n,t){switch(n.yj()){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:Bbn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return SD(t);case 6:return mD(BB(t,190));case 12:case 47:case 49:case 11:return qGn(this,n,t);case 13:return null==t?null:GBn(BB(t,240));case 15:case 14:return null==t?null:RU(Gy(MD(t)));case 17:return EEn((Uqn(),t));case 18:return EEn(t);case 21:case 20:return null==t?null:KU(BB(t,155).a);case 27:return yD(BB(t,190));case 30:return _mn((Uqn(),BB(t,15)));case 31:return _mn(BB(t,15));case 40:return jD((Uqn(),t));case 42:return TEn((Uqn(),t));case 43:return TEn(t);case 59:case 48:return kD((Uqn(),t));default:throw Hp(new _y(d6n+n.ne()+g6n))}},MWn.Jh=function(n){var t;switch(-1==n.G&&(n.G=(t=Utn(n))?uvn(t.Mh(),n):-1),n.G){case 0:return new Rm;case 1:return new Rs;case 2:return new _m;case 3:return new Km;default:throw Hp(new _y(m6n+n.zb+g6n))}},MWn.Kh=function(n,t){var e,i,r,c,a,u,o,s,h,f,l,b,w,d,g,p;switch(n.yj()){case 5:case 52:case 4:return t;case 6:return ypn(t);case 8:case 7:return null==t?null:_En(t);case 9:return null==t?null:Pnn(l_n((i=FBn(t,!0)).length>0&&(b1(0,i.length),43==i.charCodeAt(0))?i.substr(1):i,-128,127)<<24>>24);case 10:return null==t?null:Pnn(l_n((r=FBn(t,!0)).length>0&&(b1(0,r.length),43==r.charCodeAt(0))?r.substr(1):r,-128,127)<<24>>24);case 11:return SD(xXn(this,(Uqn(),kLt),t));case 12:return SD(xXn(this,(Uqn(),jLt),t));case 13:return null==t?null:new wE(FBn(t,!0));case 15:case 14:return gLn(t);case 16:return SD(xXn(this,(Uqn(),ELt),t));case 17:return Hdn((Uqn(),t));case 18:return Hdn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return FBn(t,!0);case 21:case 20:return ILn(t);case 22:return SD(xXn(this,(Uqn(),TLt),t));case 23:return SD(xXn(this,(Uqn(),MLt),t));case 24:return SD(xXn(this,(Uqn(),SLt),t));case 25:return SD(xXn(this,(Uqn(),PLt),t));case 26:return SD(xXn(this,(Uqn(),CLt),t));case 27:return Zgn(t);case 30:return qdn((Uqn(),t));case 31:return qdn(t);case 32:return null==t?null:iln(l_n((h=FBn(t,!0)).length>0&&(b1(0,h.length),43==h.charCodeAt(0))?h.substr(1):h,_Vn,DWn));case 33:return null==t?null:new $A((f=FBn(t,!0)).length>0&&(b1(0,f.length),43==f.charCodeAt(0))?f.substr(1):f);case 34:return null==t?null:iln(l_n((l=FBn(t,!0)).length>0&&(b1(0,l.length),43==l.charCodeAt(0))?l.substr(1):l,_Vn,DWn));case 36:return null==t?null:jgn(rUn((b=FBn(t,!0)).length>0&&(b1(0,b.length),43==b.charCodeAt(0))?b.substr(1):b));case 37:return null==t?null:jgn(rUn((w=FBn(t,!0)).length>0&&(b1(0,w.length),43==w.charCodeAt(0))?w.substr(1):w));case 40:return Vwn((Uqn(),t));case 42:return Gdn((Uqn(),t));case 43:return Gdn(t);case 44:return null==t?null:new $A((d=FBn(t,!0)).length>0&&(b1(0,d.length),43==d.charCodeAt(0))?d.substr(1):d);case 45:return null==t?null:new $A((g=FBn(t,!0)).length>0&&(b1(0,g.length),43==g.charCodeAt(0))?g.substr(1):g);case 46:return FBn(t,!1);case 47:return SD(xXn(this,(Uqn(),ILt),t));case 59:case 48:return Wwn((Uqn(),t));case 49:return SD(xXn(this,(Uqn(),ALt),t));case 50:return null==t?null:rln(l_n((p=FBn(t,!0)).length>0&&(b1(0,p.length),43==p.charCodeAt(0))?p.substr(1):p,Q9n,32767)<<16>>16);case 51:return null==t?null:rln(l_n((c=FBn(t,!0)).length>0&&(b1(0,c.length),43==c.charCodeAt(0))?c.substr(1):c,Q9n,32767)<<16>>16);case 53:return SD(xXn(this,(Uqn(),NLt),t));case 55:return null==t?null:rln(l_n((a=FBn(t,!0)).length>0&&(b1(0,a.length),43==a.charCodeAt(0))?a.substr(1):a,Q9n,32767)<<16>>16);case 56:return null==t?null:rln(l_n((u=FBn(t,!0)).length>0&&(b1(0,u.length),43==u.charCodeAt(0))?u.substr(1):u,Q9n,32767)<<16>>16);case 57:return null==t?null:jgn(rUn((o=FBn(t,!0)).length>0&&(b1(0,o.length),43==o.charCodeAt(0))?o.substr(1):o));case 58:return null==t?null:jgn(rUn((s=FBn(t,!0)).length>0&&(b1(0,s.length),43==s.charCodeAt(0))?s.substr(1):s));case 60:return null==t?null:iln(l_n((e=FBn(t,!0)).length>0&&(b1(0,e.length),43==e.charCodeAt(0))?e.substr(1):e,_Vn,DWn));case 61:return null==t?null:iln(l_n(FBn(t,!0),_Vn,DWn));default:throw Hp(new _y(d6n+n.ne()+g6n))}},vX(N7n,"XMLTypeFactoryImpl",1919),wAn(586,179,{105:1,92:1,90:1,147:1,191:1,56:1,235:1,108:1,49:1,97:1,150:1,179:1,114:1,115:1,675:1,1945:1,586:1},zW),MWn.N=!1,MWn.O=!1;var WLt,VLt,QLt,YLt,JLt,ZLt=!1;vX(N7n,"XMLTypePackageImpl",586),wAn(1852,1,{837:1},Ks),MWn._j=function(){return fFn(),TNt},vX(N7n,"XMLTypePackageImpl/1",1852),wAn(1861,1,s7n,_s),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/10",1861),wAn(1862,1,s7n,Fs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/11",1862),wAn(1863,1,s7n,Bs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/12",1863),wAn(1864,1,s7n,Hs),MWn.wj=function(n){return UI(n)},MWn.xj=function(n){return x8(Ptt,sVn,333,n,7,1)},vX(N7n,"XMLTypePackageImpl/13",1864),wAn(1865,1,s7n,qs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/14",1865),wAn(1866,1,s7n,Gs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/15",1866),wAn(1867,1,s7n,zs),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/16",1867),wAn(1868,1,s7n,Us),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/17",1868),wAn(1869,1,s7n,Xs),MWn.wj=function(n){return cL(n,155)},MWn.xj=function(n){return x8(Ctt,sVn,155,n,0,1)},vX(N7n,"XMLTypePackageImpl/18",1869),wAn(1870,1,s7n,Ws),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/19",1870),wAn(1853,1,s7n,Vs),MWn.wj=function(n){return cL(n,843)},MWn.xj=function(n){return x8(wLt,HWn,843,n,0,1)},vX(N7n,"XMLTypePackageImpl/2",1853),wAn(1871,1,s7n,Qs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/20",1871),wAn(1872,1,s7n,Ys),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/21",1872),wAn(1873,1,s7n,Js),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/22",1873),wAn(1874,1,s7n,Zs),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/23",1874),wAn(1875,1,s7n,nh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/24",1875),wAn(1876,1,s7n,th),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/25",1876),wAn(1877,1,s7n,eh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/26",1877),wAn(1878,1,s7n,ih),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/27",1878),wAn(1879,1,s7n,rh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/28",1879),wAn(1880,1,s7n,ch),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/29",1880),wAn(1854,1,s7n,ah),MWn.wj=function(n){return cL(n,667)},MWn.xj=function(n){return x8(zLt,HWn,2021,n,0,1)},vX(N7n,"XMLTypePackageImpl/3",1854),wAn(1881,1,s7n,uh),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/30",1881),wAn(1882,1,s7n,oh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/31",1882),wAn(1883,1,s7n,sh),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/32",1883),wAn(1884,1,s7n,hh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/33",1884),wAn(1885,1,s7n,fh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/34",1885),wAn(1886,1,s7n,lh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/35",1886),wAn(1887,1,s7n,bh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/36",1887),wAn(1888,1,s7n,wh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/37",1888),wAn(1889,1,s7n,dh),MWn.wj=function(n){return cL(n,15)},MWn.xj=function(n){return x8(Rnt,nZn,15,n,0,1)},vX(N7n,"XMLTypePackageImpl/38",1889),wAn(1890,1,s7n,gh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/39",1890),wAn(1855,1,s7n,ph),MWn.wj=function(n){return cL(n,668)},MWn.xj=function(n){return x8(ULt,HWn,2022,n,0,1)},vX(N7n,"XMLTypePackageImpl/4",1855),wAn(1891,1,s7n,vh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/40",1891),wAn(1892,1,s7n,mh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/41",1892),wAn(1893,1,s7n,yh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/42",1893),wAn(1894,1,s7n,kh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/43",1894),wAn(1895,1,s7n,jh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/44",1895),wAn(1896,1,s7n,Eh),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/45",1896),wAn(1897,1,s7n,Th),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/46",1897),wAn(1898,1,s7n,Mh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/47",1898),wAn(1899,1,s7n,Sh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/48",1899),wAn(sQn,1,s7n,Ph),MWn.wj=function(n){return cL(n,184)},MWn.xj=function(n){return x8(_tt,sVn,184,n,0,1)},vX(N7n,"XMLTypePackageImpl/49",sQn),wAn(1856,1,s7n,Ch),MWn.wj=function(n){return cL(n,669)},MWn.xj=function(n){return x8(XLt,HWn,2023,n,0,1)},vX(N7n,"XMLTypePackageImpl/5",1856),wAn(1901,1,s7n,Ih),MWn.wj=function(n){return cL(n,162)},MWn.xj=function(n){return x8(Rtt,sVn,162,n,0,1)},vX(N7n,"XMLTypePackageImpl/50",1901),wAn(1902,1,s7n,Oh),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/51",1902),wAn(1903,1,s7n,Ah),MWn.wj=function(n){return cL(n,19)},MWn.xj=function(n){return x8(Att,sVn,19,n,0,1)},vX(N7n,"XMLTypePackageImpl/52",1903),wAn(1857,1,s7n,$h),MWn.wj=function(n){return XI(n)},MWn.xj=function(n){return x8(Qtt,sVn,2,n,6,1)},vX(N7n,"XMLTypePackageImpl/6",1857),wAn(1858,1,s7n,Lh),MWn.wj=function(n){return cL(n,190)},MWn.xj=function(n){return x8(NNt,sVn,190,n,0,2)},vX(N7n,"XMLTypePackageImpl/7",1858),wAn(1859,1,s7n,Nh),MWn.wj=function(n){return zI(n)},MWn.xj=function(n){return x8(ktt,sVn,476,n,8,1)},vX(N7n,"XMLTypePackageImpl/8",1859),wAn(1860,1,s7n,xh),MWn.wj=function(n){return cL(n,217)},MWn.xj=function(n){return x8(Ttt,sVn,217,n,0,1)},vX(N7n,"XMLTypePackageImpl/9",1860),wAn(50,60,BVn,ak),vX(ant,"RegEx/ParseException",50),wAn(820,1,{},Dh),MWn.sl=function(n){return n<this.j&&63==fV(this.i,n)},MWn.tl=function(){var n,t,e,i,r;if(10!=this.c)throw Hp(new ak(kWn((u$(),g8n))));switch(n=this.a){case 101:n=27;break;case 102:n=12;break;case 110:n=10;break;case 114:n=13;break;case 116:n=9;break;case 120:if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if(123==this.a){for(r=0,e=0;;){if(QXn(this),0!=this.c)throw Hp(new ak(kWn((u$(),B8n))));if((r=Gvn(this.a))<0)break;if(e>16*e)throw Hp(new ak(kWn((u$(),H8n))));e=16*e+r}if(125!=this.a)throw Hp(new ak(kWn((u$(),q8n))));if(e>unt)throw Hp(new ak(kWn((u$(),G8n))));n=e}else{if(r=0,0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(e=r,QXn(this),0!=this.c||(r=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=e=16*e+r}break;case 117:if(i=0,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));n=t=16*t+i;break;case 118:if(QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if(t=16*t+i,QXn(this),0!=this.c||(i=Gvn(this.a))<0)throw Hp(new ak(kWn((u$(),B8n))));if((t=16*t+i)>unt)throw Hp(new ak(kWn((u$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw Hp(new ak(kWn((u$(),z8n))))}return n},MWn.ul=function(n){var t;switch(n){case 100:t=32==(32&this.e)?ZUn("Nd",!0):(wWn(),uNt);break;case 68:t=32==(32&this.e)?ZUn("Nd",!1):(wWn(),lNt);break;case 119:t=32==(32&this.e)?ZUn("IsWord",!0):(wWn(),kNt);break;case 87:t=32==(32&this.e)?ZUn("IsWord",!1):(wWn(),wNt);break;case 115:t=32==(32&this.e)?ZUn("IsSpace",!0):(wWn(),gNt);break;case 83:t=32==(32&this.e)?ZUn("IsSpace",!1):(wWn(),bNt);break;default:throw Hp(new dy(ont+n.toString(16)))}return t},MWn.vl=function(n){var t,e,i,r,c,a,u,o,s,h,f;for(this.b=1,QXn(this),t=null,0==this.c&&94==this.a?(QXn(this),n?(wWn(),wWn(),s=new M0(5)):(wWn(),wWn(),Yxn(t=new M0(4),0,unt),s=new M0(4))):(wWn(),wWn(),s=new M0(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:sHn(s,this.ul(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.Ll(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=DIn(this,e)))throw Hp(new ak(kWn((u$(),O8n))));sHn(s,h),i=!0;break;default:e=this.tl()}else if(20==f){if((c=lx(this.i,58,this.d))<0)throw Hp(new ak(kWn((u$(),A8n))));if(a=!0,94==fV(this.i,this.d)&&(++this.d,a=!1),!(u=b9(fx(this.i,this.d,c),a,512==(512&this.e))))throw Hp(new ak(kWn((u$(),L8n))));if(sHn(s,u),i=!0,c+1>=this.j||93!=fV(this.i,c+1))throw Hp(new ak(kWn((u$(),A8n))));this.d=c+2}if(QXn(this),!i)if(0!=this.c||45!=this.a)Yxn(s,e,e);else{if(QXn(this),1==(f=this.c))throw Hp(new ak(kWn((u$(),$8n))));0==f&&93==this.a?(Yxn(s,e,e),Yxn(s,45,45)):(o=this.a,10==f&&(o=this.tl()),QXn(this),Yxn(s,e,o))}(this.e&k6n)==k6n&&0==this.c&&44==this.a&&QXn(this)}if(1==this.c)throw Hp(new ak(kWn((u$(),$8n))));return t&&(WGn(t,s),s=t),T$n(s),qHn(s),this.b=0,QXn(this),s},MWn.wl=function(){var n,t,e,i;for(e=this.vl(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw Hp(new ak(kWn((u$(),_8n))));if(QXn(this),9!=this.c)throw Hp(new ak(kWn((u$(),K8n))));if(t=this.vl(!1),4==i)sHn(e,t);else if(45==n)WGn(e,t);else{if(38!=n)throw Hp(new dy("ASSERT"));kGn(e,t)}}return QXn(this),e},MWn.xl=function(){var n,t;return n=this.a-48,wWn(),wWn(),t=new vJ(12,null,n),!this.g&&(this.g=new _v),Cv(this.g,new Op(n)),QXn(this),t},MWn.yl=function(){return QXn(this),wWn(),pNt},MWn.zl=function(){return QXn(this),wWn(),dNt},MWn.Al=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Bl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Cl=function(){return QXn(this),fsn()},MWn.Dl=function(){return QXn(this),wWn(),mNt},MWn.El=function(){return QXn(this),wWn(),jNt},MWn.Fl=function(){var n;if(this.d>=this.j||64!=(65504&(n=fV(this.i,this.d++))))throw Hp(new ak(kWn((u$(),S8n))));return QXn(this),wWn(),wWn(),new oG(0,n-64)},MWn.Gl=function(){return QXn(this),RFn()},MWn.Hl=function(){return QXn(this),wWn(),ENt},MWn.Il=function(){var n;return wWn(),wWn(),n=new oG(0,105),QXn(this),n},MWn.Jl=function(){return QXn(this),wWn(),yNt},MWn.Kl=function(){return QXn(this),wWn(),vNt},MWn.Ll=function(n,t){return this.tl()},MWn.Ml=function(){return QXn(this),wWn(),hNt},MWn.Nl=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw Hp(new ak(kWn((u$(),E8n))));if(i=-1,t=null,49<=(n=fV(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new _v),Cv(this.g,new Op(i)),++this.d,41!=fV(this.i,this.d))throw Hp(new ak(kWn((u$(),y8n))));++this.d}else switch(63==n&&--this.d,QXn(this),(t=OXn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));break;default:throw Hp(new ak(kWn((u$(),T8n))))}if(QXn(this),e=null,2==(r=Vdn(this)).e){if(2!=r.em())throw Hp(new ak(kWn((u$(),M8n))));e=r.am(1),r=r.am(0)}if(7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),wWn(),wWn(),new jnn(i,t,r,e)},MWn.Ol=function(){return QXn(this),wWn(),fNt},MWn.Pl=function(){var n;if(QXn(this),n=uU(24,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ql=function(){var n;if(QXn(this),n=uU(20,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Rl=function(){var n;if(QXn(this),n=uU(22,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Sl=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=QOn(t=fV(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw Hp(new ak(kWn((u$(),k8n))))}if(58==t){if(++this.d,QXn(this),i=AX(Vdn(this),n,e),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));QXn(this)}else{if(41!=t)throw Hp(new ak(kWn((u$(),j8n))));++this.d,QXn(this),i=AX(Vdn(this),n,e)}return i},MWn.Tl=function(){var n;if(QXn(this),n=uU(21,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Ul=function(){var n;if(QXn(this),n=uU(23,Vdn(this)),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Vl=function(){var n,t;if(QXn(this),n=this.f++,t=oU(Vdn(this),n),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),t},MWn.Wl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Xl=function(n){return QXn(this),5==this.c?(QXn(this),gG(n,(wWn(),wWn(),new h4(9,n)))):gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),t=new r$(2),5==this.c?(QXn(this),tqn(t,sNt),tqn(t,n)):(tqn(t,n),tqn(t,sNt)),t},MWn.Zl=function(n){return QXn(this),5==this.c?(QXn(this),wWn(),wWn(),new h4(9,n)):(wWn(),wWn(),new h4(3,n))},MWn.a=0,MWn.b=0,MWn.c=0,MWn.d=0,MWn.e=0,MWn.f=1,MWn.g=null,MWn.j=0,vX(ant,"RegEx/RegexParser",820),wAn(1824,820,{},Fm),MWn.sl=function(n){return!1},MWn.tl=function(){return qDn(this)},MWn.ul=function(n){return d_n(n)},MWn.vl=function(n){return ZXn(this)},MWn.wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.xl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.yl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.zl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Al=function(){return QXn(this),d_n(67)},MWn.Bl=function(){return QXn(this),d_n(73)},MWn.Cl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Dl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.El=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Fl=function(){return QXn(this),d_n(99)},MWn.Gl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Hl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Il=function(){return QXn(this),d_n(105)},MWn.Jl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Kl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ll=function(n,t){return sHn(n,d_n(t)),-1},MWn.Ml=function(){return QXn(this),wWn(),wWn(),new oG(0,94)},MWn.Nl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ol=function(){return QXn(this),wWn(),wWn(),new oG(0,36)},MWn.Pl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ql=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Rl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Sl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Tl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Ul=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Vl=function(){var n;if(QXn(this),n=oU(Vdn(this),0),7!=this.c)throw Hp(new ak(kWn((u$(),y8n))));return QXn(this),n},MWn.Wl=function(){throw Hp(new ak(kWn((u$(),U8n))))},MWn.Xl=function(n){return QXn(this),gG(n,(wWn(),wWn(),new h4(3,n)))},MWn.Yl=function(n){var t;return QXn(this),wWn(),wWn(),tqn(t=new r$(2),n),tqn(t,sNt),t},MWn.Zl=function(n){return QXn(this),wWn(),wWn(),new h4(3,n)};var nNt=null,tNt=null;vX(ant,"RegEx/ParserForXMLSchema",1824),wAn(117,1,ynt,Ap),MWn.$l=function(n){throw Hp(new dy("Not supported."))},MWn._l=function(){return-1},MWn.am=function(n){return null},MWn.bm=function(){return null},MWn.cm=function(n){},MWn.dm=function(n){},MWn.em=function(){return 0},MWn.Ib=function(){return this.fm(0)},MWn.fm=function(n){return 11==this.e?".":""},MWn.e=0;var eNt,iNt,rNt,cNt,aNt,uNt,oNt,sNt,hNt,fNt,lNt,bNt,wNt,dNt,gNt,pNt,vNt,mNt,yNt,kNt,jNt,ENt,TNt,MNt,SNt=null,PNt=null,CNt=null,INt=vX(ant,"RegEx/Token",117);wAn(136,117,{3:1,136:1,117:1},M0),MWn.fm=function(n){var t,e,i;if(4==this.e)if(this==oNt)e=".";else if(this==uNt)e="\\d";else if(this==kNt)e="\\w";else if(this==gNt)e="\\s";else{for((i=new Sk).a+="[",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}else if(this==lNt)e="\\D";else if(this==wNt)e="\\W";else if(this==bNt)e="\\S";else{for((i=new Sk).a+="[^",t=0;t<this.b.length;t+=2)0!=(n&k6n)&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?cO(i,aBn(this.b[t])):(cO(i,aBn(this.b[t])),i.a+="-",cO(i,aBn(this.b[t+1])));i.a+="]",e=i.a}return e},MWn.a=!1,MWn.c=!1,vX(ant,"RegEx/RangeToken",136),wAn(584,1,{584:1},Op),MWn.a=0,vX(ant,"RegEx/RegexParser/ReferencePosition",584),wAn(583,1,{3:1,583:1},XE),MWn.Fb=function(n){var t;return null!=n&&!!cL(n,583)&&(t=BB(n,583),mK(this.b,t.b)&&this.a==t.a)},MWn.Hb=function(){return vvn(this.b+"/"+txn(this.a))},MWn.Ib=function(){return this.c.fm(this.a)},MWn.a=0,vX(ant,"RegEx/RegularExpression",583),wAn(223,117,ynt,oG),MWn._l=function(){return this.a},MWn.fm=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="\\"+PR(this.a&QVn);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>=BQn?"\\v"+fx(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+PR(this.a&QVn)}break;case 8:e=this==hNt||this==fNt?""+PR(this.a&QVn):"\\"+PR(this.a&QVn);break;default:e=null}return e},MWn.a=0,vX(ant,"RegEx/Token/CharToken",223),wAn(309,117,ynt,h4),MWn.am=function(n){return this.a},MWn.cm=function(n){this.b=n},MWn.dm=function(n){this.c=n},MWn.em=function(){return 1},MWn.fm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.fm(n)+"*";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): CLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.fm(n)+"*?";else if(this.c==this.b)t=this.a.fm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.fm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw Hp(new dy("Token#toString(): NONGREEDYCLOSURE "+this.c+FWn+this.b));t=this.a.fm(n)+"{"+this.c+",}?"}return t},MWn.b=0,MWn.c=0,vX(ant,"RegEx/Token/ClosureToken",309),wAn(821,117,ynt,UU),MWn.am=function(n){return 0==n?this.a:this.b},MWn.em=function(){return 2},MWn.fm=function(n){return 3==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+":9==this.b.e&&this.b.am(0)==this.a?this.a.fm(n)+"+?":this.a.fm(n)+""+this.b.fm(n)},vX(ant,"RegEx/Token/ConcatToken",821),wAn(1822,117,ynt,jnn),MWn.am=function(n){if(0==n)return this.d;if(1==n)return this.b;throw Hp(new dy("Internal Error: "+n))},MWn.em=function(){return this.b?2:1},MWn.fm=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},MWn.c=0,vX(ant,"RegEx/Token/ConditionToken",1822),wAn(1823,117,ynt,T0),MWn.am=function(n){return this.b},MWn.em=function(){return 1},MWn.fm=function(n){return"(?"+(0==this.a?"":txn(this.a))+(0==this.c?"":txn(this.c))+":"+this.b.fm(n)+")"},MWn.a=0,MWn.c=0,vX(ant,"RegEx/Token/ModifierToken",1823),wAn(822,117,ynt,cW),MWn.am=function(n){return this.a},MWn.em=function(){return 1},MWn.fm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.fm(n)+")":"("+this.a.fm(n)+")";break;case 20:t="(?="+this.a.fm(n)+")";break;case 21:t="(?!"+this.a.fm(n)+")";break;case 22:t="(?<="+this.a.fm(n)+")";break;case 23:t="(?<!"+this.a.fm(n)+")";break;case 24:t="(?>"+this.a.fm(n)+")"}return t},MWn.b=0,vX(ant,"RegEx/Token/ParenToken",822),wAn(521,117,{3:1,117:1,521:1},vJ),MWn.bm=function(){return this.b},MWn.fm=function(n){return 12==this.e?"\\"+this.a:iAn(this.b)},MWn.a=0,vX(ant,"RegEx/Token/StringToken",521),wAn(465,117,ynt,r$),MWn.$l=function(n){tqn(this,n)},MWn.am=function(n){return BB(bW(this.a,n),117)},MWn.em=function(){return this.a?this.a.a.c.length:0},MWn.fm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=BB(bW(this.a,0),117),r=3==(e=BB(bW(this.a,1),117)).e&&e.am(0)==t?t.fm(n)+"+":9==e.e&&e.am(0)==t?t.fm(n)+"+?":t.fm(n)+""+e.fm(n);else{for(c=new Sk,i=0;i<this.a.a.c.length;i++)cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==BB(bW(this.a,1),117).e)r=BB(bW(this.a,0),117).fm(n)+"?";else if(2==this.a.a.c.length&&7==BB(bW(this.a,0),117).e)r=BB(bW(this.a,1),117).fm(n)+"??";else{for(cO(c=new Sk,BB(bW(this.a,0),117).fm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",cO(c,BB(bW(this.a,i),117).fm(n));r=c.a}return r},vX(ant,"RegEx/Token/UnionToken",465),wAn(518,1,{592:1},UE),MWn.Ib=function(){return this.a.b},vX(knt,"XMLTypeUtil/PatternMatcherImpl",518),wAn(1622,1381,{},Rh),vX(knt,"XMLTypeValidator",1622),wAn(264,1,pVn,hz),MWn.Jc=function(n){e5(this,n)},MWn.Kc=function(){return(this.b-this.a)*this.c<0?MNt:new XL(this)},MWn.a=0,MWn.b=0,MWn.c=0,vX(Ent,"ExclusiveRange",264),wAn(1068,1,cVn,Kh),MWn.Rb=function(n){BB(n,19),l$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return GE()},MWn.Ub=function(){return zE()},MWn.Wb=function(n){BB(n,19),w$()},MWn.Ob=function(){return!1},MWn.Sb=function(){return!1},MWn.Tb=function(){return-1},MWn.Vb=function(){return-1},MWn.Qb=function(){throw Hp(new tk(Snt))},vX(Ent,"ExclusiveRange/1",1068),wAn(254,1,cVn,XL),MWn.Rb=function(n){BB(n,19),b$()},MWn.Nb=function(n){fU(this,n)},MWn.Pb=function(){return Fhn(this)},MWn.Ub=function(){return O9(this)},MWn.Wb=function(n){BB(n,19),d$()},MWn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},MWn.Sb=function(){return this.b>0},MWn.Tb=function(){return this.b},MWn.Vb=function(){return this.b-1},MWn.Qb=function(){throw Hp(new tk(Snt))},MWn.a=0,MWn.b=0,vX(Ent,"ExclusiveRange/RangeIterator",254);var ONt=RW(P9n,"C"),ANt=RW(O9n,"I"),$Nt=RW($Wn,"Z"),LNt=RW(A9n,"J"),NNt=RW(S9n,"B"),xNt=RW(C9n,"D"),DNt=RW(I9n,"F"),RNt=RW($9n,"S"),KNt=bq("org.eclipse.elk.core.labels","ILabelManager"),_Nt=bq(B6n,"DiagnosticChain"),FNt=bq(f7n,"ResourceSet"),BNt=vX(B6n,"InvocationTargetException",null),HNt=(Dk(),f5),qNt=qNt=hEn;Zen(Qp),scn("permProps",[[[Pnt,Cnt],[Int,"gecko1_8"]],[[Pnt,Cnt],[Int,"ie10"]],[[Pnt,Cnt],[Int,"ie8"]],[[Pnt,Cnt],[Int,"ie9"]],[[Pnt,Cnt],[Int,"safari"]]]),qNt(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 u=n("web-worker");c.workerFactory=function(n){return new u(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 o=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new o(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)},9487:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>k});var i=e(6432),r=e(9373),c=e(3349),a=e(7295),u=e.n(a);e(7484),e(7967),e(7856),e(277),e(5625),e(9354),e(1518),e(9542),e(285),e(8734);const o=new(u()),s={},h={};let f={};const l=(n,t,e)=>{const r={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 r.TD=r.TB,i.l.info("abc88",e,t,n),r[e][t][n]},b=(n,t,e)=>{if(i.l.info("getNextPort abc88",{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 r="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),r},w=function(n,t,e,c){i.l.info("abc78 edges = ",n);const a=c.insert("g").attr("class","edgeLabels");let u,o,s={},l=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,i.a)(n.defaultStyle);u=t.style,o=t.labelStyle}return n.forEach((function(t){var c="L-"+t.start+"-"+t.end;void 0===s[c]?(s[c]=0,i.l.info("abc78 new entry",c,s[c])):(s[c]++,i.l.info("abc78 new entry",c,s[c]));let w=c+"-"+s[c];i.l.info("abc78 new link id to be used is",c,w,s[c]);var d="LS-"+t.start,g="LE-"+t.end;const p={style:"",labelStyle:""};switch(p.minlen=t.length||1,"arrow_open"===t.type?p.arrowhead="none":p.arrowhead="normal",p.arrowTypeStart="arrow_open",p.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":p.arrowTypeStart="arrow_cross";case"arrow_cross":p.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":p.arrowTypeStart="arrow_point";case"arrow_point":p.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":p.arrowTypeStart="arrow_circle";case"arrow_circle":p.arrowTypeEnd="arrow_circle"}let v="",m="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==o&&(m=o),p.thickness="normal",p.pattern="solid";break;case"dotted":p.thickness="normal",p.pattern="dotted",p.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":p.thickness="thick",p.pattern="solid",p.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,i.a)(t.style);v=n.style,m=n.labelStyle}p.style=p.style+=v,p.labelStyle=p.labelStyle+=m,void 0!==t.interpolate?p.curve=(0,i.d)(t.interpolate,r.c_6):void 0!==n.defaultInterpolate?p.curve=(0,i.d)(n.defaultInterpolate,r.c_6):p.curve=(0,i.d)(h.curve,r.c_6),void 0===t.text?void 0!==t.style&&(p.arrowheadStyle="fill: #333"):(p.arrowheadStyle="fill: #333",p.labelpos="c"),p.labelType="text",p.label=t.text.replace(i.c.lineBreakRegex,"\n"),void 0===t.style&&(p.style=p.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),p.labelStyle=p.labelStyle.replace("color:","fill:"),p.id=w,p.classes="flowchart-link "+d+" "+g;const y=(0,i.f)(a,p),{source:k,target:j}=((n,t)=>{let e=n.start,i=n.end;const r=f[e],c=f[i];return r&&c?("diamond"===r.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===c.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i}):{source:e,target:i}})(t,l);i.l.debug("abc78 source and target",k,j),e.edges.push({id:"e"+t.start+t.end,sources:[k],targets:[j],labelEl:y,labels:[{width:p.width,height:p.height,orgWidth:p.width,orgHeight:p.height,text:p.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:p})})),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,c){const a=d(t.sources[0],t.targets[0],c),u=t.sections[0].startPoint,o=t.sections[0].endPoint,s=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+a.x,n.y+a.y])),h=[[u.x+a.x,u.y+a.y],...s,[o.x+a.x,o.y+a.y]],f=(0,r.jvg)().curve(r.c_6),l=n.insert("path").attr("d",f(h)).attr("class","path").attr("fill","none"),b=n.insert("g").attr("class","edgeLabel"),w=(0,r.Ys)(b.node().appendChild(t.labelEl)),g=w.node().firstChild.getBoundingClientRect();w.attr("width",g.width),w.attr("height",g.height),b.attr("transform",`translate(${t.labels[0].x+a.x}, ${t.labels[0].y+a.y})`),function(n,t,e,i){let r="";switch(i&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.arrowTypeStart){case"arrow_cross":n.attr("marker-start","url("+r+"#"+e+"-crossStart)");break;case"arrow_point":n.attr("marker-start","url("+r+"#"+e+"-pointStart)");break;case"arrow_barb":n.attr("marker-start","url("+r+"#"+e+"-barbStart)");break;case"arrow_circle":n.attr("marker-start","url("+r+"#"+e+"-circleStart)");break;case"aggregation":n.attr("marker-start","url("+r+"#"+e+"-aggregationStart)");break;case"extension":n.attr("marker-start","url("+r+"#"+e+"-extensionStart)");break;case"composition":n.attr("marker-start","url("+r+"#"+e+"-compositionStart)");break;case"dependency":n.attr("marker-start","url("+r+"#"+e+"-dependencyStart)");break;case"lollipop":n.attr("marker-start","url("+r+"#"+e+"-lollipopStart)")}switch(t.arrowTypeEnd){case"arrow_cross":n.attr("marker-end","url("+r+"#"+e+"-crossEnd)");break;case"arrow_point":n.attr("marker-end","url("+r+"#"+e+"-pointEnd)");break;case"arrow_barb":n.attr("marker-end","url("+r+"#"+e+"-barbEnd)");break;case"arrow_circle":n.attr("marker-end","url("+r+"#"+e+"-circleEnd)");break;case"aggregation":n.attr("marker-end","url("+r+"#"+e+"-aggregationEnd)");break;case"extension":n.attr("marker-end","url("+r+"#"+e+"-extensionEnd)");break;case"composition":n.attr("marker-end","url("+r+"#"+e+"-compositionEnd)");break;case"dependency":n.attr("marker-end","url("+r+"#"+e+"-dependencyEnd)");break;case"lollipop":n.attr("marker-end","url("+r+"#"+e+"-lollipopEnd)")}}(l,e,i.type,i.arrowMarkerAbsolute)},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)}))},v=(n,t,e,r,c,a,u)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:u,width:e.width,height:e.height},"group"===e.type){const r=c.insert("g").attr("class","subgraph");r.insert("rect").attr("class","subgraph subgraph-lvl-"+u%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const a=r.insert("g").attr("class","label");a.attr("transform",`translate(${e.labels[0].x+n+e.x}, ${e.labels[0].y+t+e.y})`),a.node().appendChild(e.labelData.labelNode),i.l.info("Id (UGH)= ",e.type,e.labels)}else i.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&&v(n+e.x,t+e.y,e.children,r,c,a,u+1)}))},m={getClasses:function(n,t){i.l.info("Extracting classes"),t.db.clear("ver-2");try{return t.parse(n),t.db.getClasses()}catch(e){return{}}},draw:async function(n,t,e,a){var u;a.db.clear(),f={},a.db.setGen("gen-2"),a.parser.parse(n);const s=(0,r.Ys)("body").append("div").attr("style","height:400px").attr("id","cy");let h={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(i.l.info("Drawing flowchart using v3 renderer",o),a.db.getDirection()){case"BT":h.layoutOptions["elk.direction"]="UP";break;case"TB":h.layoutOptions["elk.direction"]="DOWN";break;case"LR":h.layoutOptions["elk.direction"]="RIGHT";break;case"RL":h.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:l,flowchart:b}=(0,i.g)();let d;"sandbox"===l&&(d=(0,r.Ys)("#i"+t));const m="sandbox"===l?(0,r.Ys)(d.nodes()[0].contentDocument.body):(0,r.Ys)("body"),y="sandbox"===l?d.nodes()[0].contentDocument:document,k=m.select(`[id="${t}"]`);(0,i.i)(k,["point","circle","cross"],a.type,a.arrowMarkerAbsolute);const j=a.db.getVertices();let E;const T=a.db.getSubGraphs();i.l.info("Subgraphs - ",T);for(let i=T.length-1;i>=0;i--)E=T[i],a.db.addVertex(E.id,E.title,"group",void 0,E.classes,E.dir);const M=k.insert("g").attr("class","subgraphs"),S=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return i.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}(a.db);h=function(n,t,e,r,a,u,o){const s=e.select(`[id="${t}"]`),h=s.insert("g").attr("class","nodes");return Object.keys(n).forEach((function(t){const e=n[t];let o="default";e.classes.length>0&&(o=e.classes.join(" "));const l=(0,i.a)(e.styles);let b,w=void 0!==e.text?e.text:e.id;const d={width:0,height:0};if((0,i.e)((0,i.g)().flowchart.htmlLabels)){const n={label:w.replace(/fa[blrs]?:fa-[\w-]+/g,(n=>`<i class='${n.replace(":"," ")}'></i>`))};b=(0,c.a)(s,n).node();const t=b.getBBox();d.width=t.width,d.height=t.height,d.labelNode=b,b.parentNode.removeChild(b)}else{const n=r.createElementNS("http://www.w3.org/2000/svg","text");n.setAttribute("style",l.labelStyle.replace("color:","fill:"));const t=w.split(i.c.lineBreakRegex);for(const i of t){const t=r.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=i,n.appendChild(t)}b=n;const e=b.getBBox();d.width=e.width,d.height=e.height,d.labelNode=b}const g=[{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 p=0,v="",m={};switch(e.type){case"round":p=5,v="rect";break;case"square":case"group":default:v="rect";break;case"diamond":v="question",m={portConstraints:"FIXED_SIDE"};break;case"hexagon":v="hexagon";break;case"odd":case"odd_right":v="rect_left_inv_arrow";break;case"lean_right":v="lean_right";break;case"lean_left":v="lean_left";break;case"trapezoid":v="trapezoid";break;case"inv_trapezoid":v="inv_trapezoid";break;case"circle":v="circle";break;case"ellipse":v="ellipse";break;case"stadium":v="stadium";break;case"subroutine":v="subroutine";break;case"cylinder":v="cylinder";break;case"doublecircle":v="doublecircle"}const y={labelStyle:l.labelStyle,shape:v,labelText:w,rx:p,ry:p,class:o,style:l.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:a.db.getTooltip(e.id)||"",domId:a.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,i.g)().flowchart.padding};let k,j;"group"!==y.type&&(j=(0,i.b)(h,y,e.dir),k=j.node().getBBox());const E={id:e.id,ports:"diamond"===e.type?g:[],layoutOptions:m,labelText:w,labelData:d,domId:a.db.lookUpDomId(e.id),width:null==k?void 0:k.width,height:null==k?void 0:k.height,type:e.type,el:j,parent:u.parentById[e.id]};f[y.id]=E})),o}(j,t,m,y,a,S,h);const P=k.insert("g").attr("class","edges edgePath"),C=a.db.getEdges();h=w(C,a,h,k);Object.keys(f).forEach((n=>{const t=f[n];t.parent||h.children.push(t),void 0!==S.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(h.children,S),i.l.info("after layout",JSON.stringify(h,null,2));const I=await o.layout(h);v(0,0,I.children,k,M,a,0),i.l.info("after layout",I),null==(u=I.edges)||u.map((n=>{g(P,n,n.edgeData,a,S)})),(0,i.s)({},k,b.diagramPadding,b.useMaxWidth),s.remove()}},y=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.5;\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=>{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`,k={db:i.h,renderer:m,parser:i.p,styles:y}}}]); \ No newline at end of file diff --git a/assets/js/950.e8389ad9.js b/assets/js/950.e8389ad9.js new file mode 100644 index 000000000..7981b3372 --- /dev/null +++ b/assets/js/950.e8389ad9.js @@ -0,0 +1,742 @@ +"use strict"; +exports.id = 950; +exports.ids = [950]; +exports.modules = { + +/***/ 42950: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +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, 10, 12, 14, 16, 18, 19, 20, 21, 22], $V5 = [2, 4], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 20, 21, 22], $V7 = [20, 21, 22], $V8 = [2, 7], $V9 = [1, 12], $Va = [1, 13], $Vb = [1, 14], $Vc = [1, 15], $Vd = [1, 16], $Ve = [1, 17]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "PIE": 5, "document": 6, "showData": 7, "line": 8, "statement": 9, "txt": 10, "value": 11, "title": 12, "title_value": 13, "acc_title": 14, "acc_title_value": 15, "acc_descr": 16, "acc_descr_value": 17, "acc_descr_multiline_value": 18, "section": 19, "NEWLINE": 20, ";": 21, "EOF": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "PIE", 7: "showData", 10: "txt", 11: "value", 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: "NEWLINE", 21: ";", 22: "EOF" }, + productions_: [0, [3, 2], [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [9, 0], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [4, 1], [4, 1], [4, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setShowData(true); + break; + case 6: + this.$ = $$[$0 - 1]; + break; + case 8: + yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0])); + break; + case 9: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 10: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 11: + case 12: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 13: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 20: $V1, 21: $V2, 22: $V3 }, { 1: [3] }, { 3: 7, 4: 2, 5: $V0, 20: $V1, 21: $V2, 22: $V3 }, o($V4, $V5, { 6: 8, 7: [1, 9] }), o($V6, [2, 14]), o($V6, [2, 15]), o($V6, [2, 16]), { 1: [2, 1] }, o($V7, $V8, { 8: 10, 9: 11, 1: [2, 2], 10: $V9, 12: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 19: $Ve }), o($V4, $V5, { 6: 18 }), o($V4, [2, 5]), { 4: 19, 20: $V1, 21: $V2, 22: $V3 }, { 11: [1, 20] }, { 13: [1, 21] }, { 15: [1, 22] }, { 17: [1, 23] }, o($V7, [2, 12]), o($V7, [2, 13]), o($V7, $V8, { 8: 10, 9: 11, 1: [2, 3], 10: $V9, 12: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 19: $Ve }), o($V4, [2, 6]), o($V7, [2, 8]), o($V7, [2, 9]), o($V7, [2, 10]), o($V7, [2, 11])], + defaultActions: { 7: [2, 1] }, + 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 20; + case 3: + break; + case 4: + break; + case 5: + this.begin("title"); + return 12; + case 6: + this.popState(); + return "title_value"; + case 7: + this.begin("acc_title"); + return 14; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.begin("acc_descr"); + return 16; + 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: + this.begin("string"); + break; + case 15: + this.popState(); + break; + case 16: + return "txt"; + case 17: + return 5; + case 18: + return 7; + case 19: + return "value"; + case 20: + return 22; + } + }, + rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/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, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [6], "inclusive": false }, "string": { "rules": [15, 16], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 7, 9, 11, 14, 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; +const DEFAULT_PIE_CONFIG = _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.A.pie; +const DEFAULT_PIE_DB = { + sections: {}, + showData: false, + config: DEFAULT_PIE_CONFIG +}; +let sections = DEFAULT_PIE_DB.sections; +let showData = DEFAULT_PIE_DB.showData; +const config = structuredClone(DEFAULT_PIE_CONFIG); +const getConfig = () => structuredClone(config); +const clear = () => { + sections = structuredClone(DEFAULT_PIE_DB.sections); + showData = DEFAULT_PIE_DB.showData; + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const addSection = (label, value) => { + label = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(label, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (sections[label] === void 0) { + sections[label] = value; + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`added new section: ${label}, with value: ${value}`); + } +}; +const getSections = () => sections; +const cleanupValue = (value) => { + if (value.substring(0, 1) === ":") { + value = value.substring(1).trim(); + } + return Number(value.trim()); +}; +const setShowData = (toggle) => { + showData = toggle; +}; +const getShowData = () => showData; +const db = { + getConfig, + clear, + setDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.r, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.a, + addSection, + getSections, + cleanupValue, + setShowData, + getShowData +}; +const getStyles = (options) => ` + .pieCircle{ + stroke: ${options.pieStrokeColor}; + stroke-width : ${options.pieStrokeWidth}; + opacity : ${options.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${options.pieOuterStrokeColor}; + stroke-width: ${options.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${options.pieTitleTextSize}; + fill: ${options.pieTitleTextColor}; + font-family: ${options.fontFamily}; + } + .slice { + font-family: ${options.fontFamily}; + fill: ${options.pieSectionTextColor}; + font-size:${options.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${options.pieLegendTextColor}; + font-family: ${options.fontFamily}; + font-size: ${options.pieLegendTextSize}; + } +`; +const styles = getStyles; +const createPieArcs = (sections2) => { + const pieData = Object.entries(sections2).map((element) => { + return { + label: element[0], + value: element[1] + }; + }).sort((a, b) => { + return b.value - a.value; + }); + const pie$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .pie */ .ve8)().value( + (d3Section) => d3Section.value + ); + return pie$1(pieData); +}; +const draw = (text, id, _version, diagObj) => { + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering pie chart\n" + text); + const db2 = diagObj.db; + const globalConfig = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const pieConfig = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.B)(db2.getConfig(), globalConfig.pie); + const MARGIN = 40; + const LEGEND_RECT_SIZE = 18; + const LEGEND_SPACING = 4; + const height = 450; + const pieWidth = height; + const svg = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.z)(id); + const group = svg.append("g"); + const sections2 = db2.getSections(); + group.attr("transform", "translate(" + pieWidth / 2 + "," + height / 2 + ")"); + const { themeVariables } = globalConfig; + let [outerStrokeWidth] = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.C)(themeVariables.pieOuterStrokeWidth); + outerStrokeWidth ?? (outerStrokeWidth = 2); + const textPosition = pieConfig.textPosition; + const radius = Math.min(pieWidth, height) / 2 - MARGIN; + const arcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(0).outerRadius(radius); + const labelArcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(radius * textPosition).outerRadius(radius * textPosition); + group.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); + const arcs = createPieArcs(sections2); + const myGeneratedColors = [ + themeVariables.pie1, + themeVariables.pie2, + themeVariables.pie3, + themeVariables.pie4, + themeVariables.pie5, + themeVariables.pie6, + themeVariables.pie7, + themeVariables.pie8, + themeVariables.pie9, + themeVariables.pie10, + themeVariables.pie11, + themeVariables.pie12 + ]; + const color = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleOrdinal */ .PKp)(myGeneratedColors); + group.selectAll("mySlices").data(arcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum) => { + return color(datum.data.label); + }).attr("class", "pieCircle"); + let sum = 0; + Object.keys(sections2).forEach((key) => { + sum += sections2[key]; + }); + group.selectAll("mySlices").data(arcs).enter().append("text").text((datum) => { + return (datum.data.value / sum * 100).toFixed(0) + "%"; + }).attr("transform", (datum) => { + return "translate(" + labelArcGenerator.centroid(datum) + ")"; + }).style("text-anchor", "middle").attr("class", "slice"); + group.append("text").text(db2.getDiagramTitle()).attr("x", 0).attr("y", -(height - 50) / 2).attr("class", "pieTitleText"); + const legend = group.selectAll(".legend").data(color.domain()).enter().append("g").attr("class", "legend").attr("transform", (_datum, index) => { + const height2 = LEGEND_RECT_SIZE + LEGEND_SPACING; + const offset = height2 * color.domain().length / 2; + const horizontal = 12 * LEGEND_RECT_SIZE; + const vertical = index * height2 - offset; + return "translate(" + horizontal + "," + vertical + ")"; + }); + legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", color).style("stroke", color); + legend.data(arcs).append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((datum) => { + const { label, value } = datum.data; + if (db2.getShowData()) { + return `${label} [${value}]`; + } + return label; + }); + const longestTextWidth = Math.max( + ...legend.selectAll("text").nodes().map((node) => (node == null ? void 0 : node.getBoundingClientRect().width) ?? 0) + ); + const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth; + svg.attr("viewBox", `0 0 ${totalWidth} ${height}`); + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, totalWidth, pieConfig.useMaxWidth); +}; +const renderer = { draw }; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/973.39849cce.js b/assets/js/973.39849cce.js new file mode 100644 index 000000000..4b45c32c8 --- /dev/null +++ b/assets/js/973.39849cce.js @@ -0,0 +1,2600 @@ +"use strict"; +exports.id = 973; +exports.ids = [973]; +exports.modules = { + +/***/ 7973: +/***/ ((__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_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76365); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(72015); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + +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, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [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], $VJ = [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], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [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]; + var parser2 = { + trace: function trace() { + }, + 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 anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setDirection("TB"); + break; + case 4: + yy.setDirection("BT"); + break; + case 5: + yy.setDirection("RL"); + break; + case 6: + yy.setDirection("LR"); + break; + case 8: + case 9: + case 10: + case 11: + case 12: + yy.setC4Type($$[$0 - 3]); + break; + case 19: + yy.setTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 20: + yy.setAccDescription($$[$0].substring(15)); + this.$ = $$[$0].substring(15); + break; + case 21: + this.$ = $$[$0].trim(); + yy.setTitle(this.$); + break; + case 22: + case 23: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 28: + case 29: + $$[$0].splice(2, 0, "ENTERPRISE"); + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 30: + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 31: + $$[$0].splice(2, 0, "CONTAINER"); + yy.addContainerBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 32: + yy.addDeploymentNode("node", ...$$[$0]); + this.$ = $$[$0]; + break; + case 33: + yy.addDeploymentNode("nodeL", ...$$[$0]); + this.$ = $$[$0]; + break; + case 34: + yy.addDeploymentNode("nodeR", ...$$[$0]); + this.$ = $$[$0]; + break; + case 35: + yy.popBoundaryParseStack(); + break; + case 39: + yy.addPersonOrSystem("person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 40: + yy.addPersonOrSystem("external_person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 41: + yy.addPersonOrSystem("system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 42: + yy.addPersonOrSystem("system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 43: + yy.addPersonOrSystem("system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 44: + yy.addPersonOrSystem("external_system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 45: + yy.addPersonOrSystem("external_system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 46: + yy.addPersonOrSystem("external_system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 47: + yy.addContainer("container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 48: + yy.addContainer("container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 49: + yy.addContainer("container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 50: + yy.addContainer("external_container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 51: + yy.addContainer("external_container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 52: + yy.addContainer("external_container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 53: + yy.addComponent("component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 54: + yy.addComponent("component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 55: + yy.addComponent("component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 56: + yy.addComponent("external_component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 57: + yy.addComponent("external_component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 58: + yy.addComponent("external_component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 60: + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 61: + yy.addRel("birel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 62: + yy.addRel("rel_u", ...$$[$0]); + this.$ = $$[$0]; + break; + case 63: + yy.addRel("rel_d", ...$$[$0]); + this.$ = $$[$0]; + break; + case 64: + yy.addRel("rel_l", ...$$[$0]); + this.$ = $$[$0]; + break; + case 65: + yy.addRel("rel_r", ...$$[$0]); + this.$ = $$[$0]; + break; + case 66: + yy.addRel("rel_b", ...$$[$0]); + this.$ = $$[$0]; + break; + case 67: + $$[$0].splice(0, 1); + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 68: + yy.updateElStyle("update_el_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 69: + yy.updateRelStyle("update_rel_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 70: + yy.updateLayoutConfig("update_layout_config", ...$$[$0]); + this.$ = $$[$0]; + break; + case 71: + this.$ = [$$[$0]]; + break; + case 72: + $$[$0].unshift($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 73: + case 75: + this.$ = $$[$0].trim(); + break; + case 74: + let kv = {}; + kv[$$[$0 - 1].trim()] = $$[$0].trim(); + this.$ = kv; + break; + case 76: + this.$ = ""; + break; + } + }, + 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: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VH, [2, 14]), o($VI, [2, 16], { 12: [1, 76] }), o($VH, [2, 36], { 12: [1, 77] }), o($VJ, [2, 19]), o($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o($VH, [2, 15]), o($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VJ, [2, 21]), o($VJ, [2, 22]), o($VO, [2, 39]), o($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o($VQ, [2, 73]), { 78: [1, 133] }, o($VQ, [2, 75]), o($VQ, [2, 76]), o($VO, [2, 40]), o($VO, [2, 41]), o($VO, [2, 42]), o($VO, [2, 43]), o($VO, [2, 44]), o($VO, [2, 45]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 51]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), o($VO, [2, 55]), o($VO, [2, 56]), o($VO, [2, 57]), o($VO, [2, 58]), o($VO, [2, 60]), o($VO, [2, 61]), o($VO, [2, 62]), o($VO, [2, 63]), o($VO, [2, 64]), o($VO, [2, 65]), o($VO, [2, 66]), o($VO, [2, 67]), o($VO, [2, 68]), o($VO, [2, 69]), o($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o($VR, [2, 28]), o($VR, [2, 29]), o($VR, [2, 30]), o($VR, [2, 31]), o($VR, [2, 32]), o($VR, [2, 33]), o($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o($VI, [2, 18]), o($VH, [2, 38]), o($VP, [2, 72]), o($VQ, [2, 74]), o($VO, [2, 24]), o($VO, [2, 35]), o($VS, [2, 25]), o($VS, [2, 26], { 12: [1, 138] }), o($VS, [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 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 c2 = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c2 + "^"; + }, + // 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 6; + case 1: + return 7; + case 2: + return 8; + case 3: + return 9; + case 4: + return 22; + case 5: + return 23; + case 6: + this.begin("acc_title"); + return 24; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 26; + 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: + break; + case 14: + c; + break; + case 15: + return 12; + case 16: + break; + case 17: + return 11; + case 18: + return 15; + case 19: + return 16; + case 20: + return 17; + case 21: + return 18; + case 22: + this.begin("person_ext"); + return 45; + case 23: + this.begin("person"); + return 44; + case 24: + this.begin("system_ext_queue"); + return 51; + case 25: + this.begin("system_ext_db"); + return 50; + case 26: + this.begin("system_ext"); + return 49; + case 27: + this.begin("system_queue"); + return 48; + case 28: + this.begin("system_db"); + return 47; + case 29: + this.begin("system"); + return 46; + case 30: + this.begin("boundary"); + return 37; + case 31: + this.begin("enterprise_boundary"); + return 34; + case 32: + this.begin("system_boundary"); + return 36; + case 33: + this.begin("container_ext_queue"); + return 57; + case 34: + this.begin("container_ext_db"); + return 56; + case 35: + this.begin("container_ext"); + return 55; + case 36: + this.begin("container_queue"); + return 54; + case 37: + this.begin("container_db"); + return 53; + case 38: + this.begin("container"); + return 52; + case 39: + this.begin("container_boundary"); + return 38; + case 40: + this.begin("component_ext_queue"); + return 63; + case 41: + this.begin("component_ext_db"); + return 62; + case 42: + this.begin("component_ext"); + return 61; + case 43: + this.begin("component_queue"); + return 60; + case 44: + this.begin("component_db"); + return 59; + case 45: + this.begin("component"); + return 58; + case 46: + this.begin("node"); + return 39; + case 47: + this.begin("node"); + return 39; + case 48: + this.begin("node_l"); + return 40; + case 49: + this.begin("node_r"); + return 41; + case 50: + this.begin("rel"); + return 64; + case 51: + this.begin("birel"); + return 65; + case 52: + this.begin("rel_u"); + return 66; + case 53: + this.begin("rel_u"); + return 66; + case 54: + this.begin("rel_d"); + return 67; + case 55: + this.begin("rel_d"); + return 67; + case 56: + this.begin("rel_l"); + return 68; + case 57: + this.begin("rel_l"); + return 68; + case 58: + this.begin("rel_r"); + return 69; + case 59: + this.begin("rel_r"); + return 69; + case 60: + this.begin("rel_b"); + return 70; + case 61: + this.begin("rel_index"); + return 71; + case 62: + this.begin("update_el_style"); + return 72; + case 63: + this.begin("update_rel_style"); + return 73; + case 64: + this.begin("update_layout_config"); + return 74; + case 65: + return "EOF_IN_STRUCT"; + case 66: + this.begin("attribute"); + return "ATTRIBUTE_EMPTY"; + case 67: + this.begin("attribute"); + break; + case 68: + this.popState(); + this.popState(); + break; + case 69: + return 80; + case 70: + break; + case 71: + return 80; + case 72: + this.begin("string"); + break; + case 73: + this.popState(); + break; + case 74: + return "STR"; + case 75: + this.begin("string_kv"); + break; + case 76: + this.begin("string_kv_key"); + return "STR_KEY"; + case 77: + this.popState(); + this.begin("string_kv_value"); + break; + case 78: + return "STR_VALUE"; + case 79: + this.popState(); + this.popState(); + break; + case 80: + return "STR"; + 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": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "string_kv_value": { "rules": [78, 79], "inclusive": false }, "string_kv_key": { "rules": [77], "inclusive": false }, "string_kv": { "rules": [76], "inclusive": false }, "string": { "rules": [73, 74], "inclusive": false }, "attribute": { "rules": [68, 69, 70, 71, 72, 75, 80], "inclusive": false }, "update_layout_config": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_rel_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_el_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_b": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_d": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_u": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "node": { "rules": [65, 66, 67, 68], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext_queue": { "rules": [], "inclusive": false }, "component_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container": { "rules": [65, 66, 67, 68], "inclusive": false }, "birel": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "enterprise_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system": { "rules": [65, 66, 67, 68], "inclusive": false }, "person_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "person": { "rules": [65, 66, 67, 68], "inclusive": false }, "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": 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 c4ShapeArray = []; +let boundaryParseStack = [""]; +let currentBoundaryParse = "global"; +let parentBoundaryParse = ""; +let boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } +]; +let rels = []; +let title = ""; +let wrapEnabled = false; +let c4ShapeInRow$1 = 4; +let c4BoundaryInRow$1 = 2; +var c4Type; +const getC4Type = function() { + return c4Type; +}; +const setC4Type = function(c4TypeParam) { + let sanitizedText = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(c4TypeParam, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + c4Type = sanitizedText; +}; +const addRel = function(type, from, to, label, techn, descr, sprite, tags, link) { + if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) { + return; + } + let rel = {}; + const old = rels.find((rel2) => rel2.from === from && rel2.to === to); + if (old) { + rel = old; + } else { + rels.push(rel); + } + rel.type = type; + rel.from = from; + rel.to = to; + rel.label = { text: label }; + if (techn === void 0 || techn === null) { + rel.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + rel[key] = { text: value }; + } else { + rel.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + rel.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + rel[key] = { text: value }; + } else { + rel.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + rel[key] = value; + } else { + rel.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + rel[key] = value; + } else { + rel.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + rel[key] = value; + } else { + rel.link = link; + } + rel.wrap = autoWrap(); +}; +const addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let personOrSystem = {}; + const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias); + if (old && alias === old.alias) { + personOrSystem = old; + } else { + personOrSystem.alias = alias; + c4ShapeArray.push(personOrSystem); + } + if (label === void 0 || label === null) { + personOrSystem.label = { text: "" }; + } else { + personOrSystem.label = { text: label }; + } + if (descr === void 0 || descr === null) { + personOrSystem.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + personOrSystem[key] = { text: value }; + } else { + personOrSystem.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.link = link; + } + personOrSystem.typeC4Shape = { text: typeC4Shape }; + personOrSystem.parentBoundary = currentBoundaryParse; + personOrSystem.wrap = autoWrap(); +}; +const addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let container = {}; + const old = c4ShapeArray.find((container2) => container2.alias === alias); + if (old && alias === old.alias) { + container = old; + } else { + container.alias = alias; + c4ShapeArray.push(container); + } + if (label === void 0 || label === null) { + container.label = { text: "" }; + } else { + container.label = { text: label }; + } + if (techn === void 0 || techn === null) { + container.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + container[key] = { text: value }; + } else { + container.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + container.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + container[key] = { text: value }; + } else { + container.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + container[key] = value; + } else { + container.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + container[key] = value; + } else { + container.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + container[key] = value; + } else { + container.link = link; + } + container.wrap = autoWrap(); + container.typeC4Shape = { text: typeC4Shape }; + container.parentBoundary = currentBoundaryParse; +}; +const addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let component = {}; + const old = c4ShapeArray.find((component2) => component2.alias === alias); + if (old && alias === old.alias) { + component = old; + } else { + component.alias = alias; + c4ShapeArray.push(component); + } + if (label === void 0 || label === null) { + component.label = { text: "" }; + } else { + component.label = { text: label }; + } + if (techn === void 0 || techn === null) { + component.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + component[key] = { text: value }; + } else { + component.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + component.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + component[key] = { text: value }; + } else { + component.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + component[key] = value; + } else { + component.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + component[key] = value; + } else { + component.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + component[key] = value; + } else { + component.link = link; + } + component.wrap = autoWrap(); + component.typeC4Shape = { text: typeC4Shape }; + component.parentBoundary = currentBoundaryParse; +}; +const addPersonOrSystemBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "system" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addContainerBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "container" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "node" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (descr === void 0 || descr === null) { + boundary.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + boundary[key] = { text: value }; + } else { + boundary.descr = { text: descr }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.nodeType = nodeType; + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const popBoundaryParseStack = function() { + currentBoundaryParse = parentBoundaryParse; + boundaryParseStack.pop(); + parentBoundaryParse = boundaryParseStack.pop(); + boundaryParseStack.push(parentBoundaryParse); +}; +const updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) { + let old = c4ShapeArray.find((element) => element.alias === elementName); + if (old === void 0) { + old = boundarys.find((element) => element.alias === elementName); + if (old === void 0) { + return; + } + } + if (bgColor !== void 0 && bgColor !== null) { + if (typeof bgColor === "object") { + let [key, value] = Object.entries(bgColor)[0]; + old[key] = value; + } else { + old.bgColor = bgColor; + } + } + if (fontColor !== void 0 && fontColor !== null) { + if (typeof fontColor === "object") { + let [key, value] = Object.entries(fontColor)[0]; + old[key] = value; + } else { + old.fontColor = fontColor; + } + } + if (borderColor !== void 0 && borderColor !== null) { + if (typeof borderColor === "object") { + let [key, value] = Object.entries(borderColor)[0]; + old[key] = value; + } else { + old.borderColor = borderColor; + } + } + if (shadowing !== void 0 && shadowing !== null) { + if (typeof shadowing === "object") { + let [key, value] = Object.entries(shadowing)[0]; + old[key] = value; + } else { + old.shadowing = shadowing; + } + } + if (shape !== void 0 && shape !== null) { + if (typeof shape === "object") { + let [key, value] = Object.entries(shape)[0]; + old[key] = value; + } else { + old.shape = shape; + } + } + if (sprite !== void 0 && sprite !== null) { + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + old[key] = value; + } else { + old.sprite = sprite; + } + } + if (techn !== void 0 && techn !== null) { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + old[key] = value; + } else { + old.techn = techn; + } + } + if (legendText !== void 0 && legendText !== null) { + if (typeof legendText === "object") { + let [key, value] = Object.entries(legendText)[0]; + old[key] = value; + } else { + old.legendText = legendText; + } + } + if (legendSprite !== void 0 && legendSprite !== null) { + if (typeof legendSprite === "object") { + let [key, value] = Object.entries(legendSprite)[0]; + old[key] = value; + } else { + old.legendSprite = legendSprite; + } + } +}; +const updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) { + const old = rels.find((rel) => rel.from === from && rel.to === to); + if (old === void 0) { + return; + } + if (textColor !== void 0 && textColor !== null) { + if (typeof textColor === "object") { + let [key, value] = Object.entries(textColor)[0]; + old[key] = value; + } else { + old.textColor = textColor; + } + } + if (lineColor !== void 0 && lineColor !== null) { + if (typeof lineColor === "object") { + let [key, value] = Object.entries(lineColor)[0]; + old[key] = value; + } else { + old.lineColor = lineColor; + } + } + if (offsetX !== void 0 && offsetX !== null) { + if (typeof offsetX === "object") { + let [key, value] = Object.entries(offsetX)[0]; + old[key] = parseInt(value); + } else { + old.offsetX = parseInt(offsetX); + } + } + if (offsetY !== void 0 && offsetY !== null) { + if (typeof offsetY === "object") { + let [key, value] = Object.entries(offsetY)[0]; + old[key] = parseInt(value); + } else { + old.offsetY = parseInt(offsetY); + } + } +}; +const updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) { + let c4ShapeInRowValue = c4ShapeInRow$1; + let c4BoundaryInRowValue = c4BoundaryInRow$1; + if (typeof c4ShapeInRowParam === "object") { + const value = Object.values(c4ShapeInRowParam)[0]; + c4ShapeInRowValue = parseInt(value); + } else { + c4ShapeInRowValue = parseInt(c4ShapeInRowParam); + } + if (typeof c4BoundaryInRowParam === "object") { + const value = Object.values(c4BoundaryInRowParam)[0]; + c4BoundaryInRowValue = parseInt(value); + } else { + c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam); + } + if (c4ShapeInRowValue >= 1) { + c4ShapeInRow$1 = c4ShapeInRowValue; + } + if (c4BoundaryInRowValue >= 1) { + c4BoundaryInRow$1 = c4BoundaryInRowValue; + } +}; +const getC4ShapeInRow = function() { + return c4ShapeInRow$1; +}; +const getC4BoundaryInRow = function() { + return c4BoundaryInRow$1; +}; +const getCurrentBoundaryParse = function() { + return currentBoundaryParse; +}; +const getParentBoundaryParse = function() { + return parentBoundaryParse; +}; +const getC4ShapeArray = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return c4ShapeArray; + } else { + return c4ShapeArray.filter((personOrSystem) => { + return personOrSystem.parentBoundary === parentBoundary; + }); + } +}; +const getC4Shape = function(alias) { + return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); +}; +const getC4ShapeKeys = function(parentBoundary) { + return Object.keys(getC4ShapeArray(parentBoundary)); +}; +const getBoundarys = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return boundarys; + } else { + return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary); + } +}; +const getRels = function() { + return rels; +}; +const getTitle = function() { + return title; +}; +const setWrap = function(wrapSetting) { + wrapEnabled = wrapSetting; +}; +const autoWrap = function() { + return wrapEnabled; +}; +const clear = function() { + c4ShapeArray = []; + boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } + ]; + parentBoundaryParse = ""; + currentBoundaryParse = "global"; + boundaryParseStack = [""]; + rels = []; + boundaryParseStack = [""]; + title = ""; + wrapEnabled = false; + c4ShapeInRow$1 = 4; + c4BoundaryInRow$1 = 2; +}; +const 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 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const setTitle = function(txt) { + let sanitizedText = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.d)(txt, (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + title = sanitizedText; +}; +const db = { + addPersonOrSystem, + addPersonOrSystemBoundary, + addContainer, + addContainerBoundary, + addComponent, + addDeploymentNode, + popBoundaryParseStack, + addRel, + updateElStyle, + updateRelStyle, + updateLayoutConfig, + autoWrap, + setWrap, + getC4ShapeArray, + getC4Shape, + getC4ShapeKeys, + getBoundarys, + getCurrentBoundaryParse, + getParentBoundaryParse, + getRels, + getTitle, + getC4Type, + getC4ShapeInRow, + getC4BoundaryInRow, + setAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.g, + getAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.b, + getConfig: () => (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4, + clear, + LINETYPE, + ARROWTYPE, + PLACEMENT, + setTitle, + setC4Type + // apply, +}; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawImage = function(elem, width, height, x, y, link) { + const imageElem = elem.append("image"); + imageElem.attr("width", width); + imageElem.attr("height", height); + imageElem.attr("x", x); + imageElem.attr("y", y); + let sanitizedLink = link.startsWith("data:image/png;base64") ? link : (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(link); + imageElem.attr("xlink:href", sanitizedLink); +}; +const drawRels$1 = (elem, rels2, conf2) => { + const relsElem = elem.append("g"); + let i = 0; + for (let rel of rels2) { + let textColor = rel.textColor ? rel.textColor : "#444444"; + let strokeColor = rel.lineColor ? rel.lineColor : "#444444"; + let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0; + let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0; + let url = ""; + if (i === 0) { + let line = relsElem.append("line"); + line.attr("x1", rel.startPoint.x); + line.attr("y1", rel.startPoint.y); + line.attr("x2", rel.endPoint.x); + line.attr("y2", rel.endPoint.y); + line.attr("stroke-width", "1"); + line.attr("stroke", strokeColor); + line.style("fill", "none"); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + i = -1; + } else { + let line = relsElem.append("path"); + line.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr( + "d", + "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel.startPoint.x).replaceAll("starty", rel.startPoint.y).replaceAll( + "controlx", + rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4 + ).replaceAll("controly", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll("stopx", rel.endPoint.x).replaceAll("stopy", rel.endPoint.y) + ); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + } + let messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + rel.label.text, + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY, + rel.label.width, + rel.label.height, + { fill: textColor }, + messageConf + ); + if (rel.techn && rel.techn.text !== "") { + messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + "[" + rel.techn.text + "]", + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY, + Math.max(rel.label.width, rel.techn.width), + rel.techn.height, + { fill: textColor, "font-style": "italic" }, + messageConf + ); + } + } +}; +const drawBoundary$1 = function(elem, boundary, conf2) { + const boundaryElem = elem.append("g"); + let fillColor = boundary.bgColor ? boundary.bgColor : "none"; + let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444"; + let fontColor = boundary.fontColor ? boundary.fontColor : "black"; + let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" }; + if (boundary.nodeType) { + attrsValue = { "stroke-width": 1 }; + } + let rectData = { + x: boundary.x, + y: boundary.y, + fill: fillColor, + stroke: strokeColor, + width: boundary.width, + height: boundary.height, + rx: 2.5, + ry: 2.5, + attrs: attrsValue + }; + drawRect(boundaryElem, rectData); + let boundaryConf = conf2.boundaryFont(); + boundaryConf.fontWeight = "bold"; + boundaryConf.fontSize = boundaryConf.fontSize + 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.label.text, + boundaryElem, + boundary.x, + boundary.y + boundary.label.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + if (boundary.type && boundary.type.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.type.text, + boundaryElem, + boundary.x, + boundary.y + boundary.type.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } + if (boundary.descr && boundary.descr.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontSize = boundaryConf.fontSize - 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.descr.text, + boundaryElem, + boundary.x, + boundary.y + boundary.descr.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } +}; +const drawC4Shape = function(elem, c4Shape, conf2) { + var _a; + let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + "_bg_color"]; + let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + "_border_color"]; + let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF"; + let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + switch (c4Shape.typeC4Shape.text) { + case "person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + break; + case "external_person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="; + break; + } + const c4ShapeElem = elem.append("g"); + c4ShapeElem.attr("class", "person-man"); + const rect = (0,_svgDrawCommon_92a8ff2b_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + case "system": + case "external_system": + case "container": + case "external_container": + case "component": + case "external_component": + rect.x = c4Shape.x; + rect.y = c4Shape.y; + rect.fill = fillColor; + rect.width = c4Shape.width; + rect.height = c4Shape.height; + rect.stroke = strokeColor; + rect.rx = 2.5; + rect.ry = 2.5; + rect.attrs = { "stroke-width": 0.5 }; + drawRect(c4ShapeElem, rect); + break; + case "system_db": + case "external_system_db": + case "container_db": + case "external_container_db": + case "component_db": + case "external_component_db": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2) + ); + break; + case "system_queue": + case "external_system_queue": + case "container_queue": + case "external_container_queue": + case "component_queue": + case "external_component_queue": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2) + ); + break; + } + let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text); + c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>"); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + drawImage( + c4ShapeElem, + 48, + 48, + c4Shape.x + c4Shape.width / 2 - 24, + c4Shape.y + c4Shape.image.Y, + personImg + ); + break; + } + let textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontWeight = "bold"; + textFontConf.fontSize = textFontConf.fontSize + 2; + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.label.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.label.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontColor = fontColor; + if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.techn.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.techn.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } else if (c4Shape.type && c4Shape.type.text !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.type.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.type.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } + if (c4Shape.descr && c4Shape.descr.text !== "") { + textFontConf = conf2.personFont(); + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.descr.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.descr.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + } + return c4Shape.height; +}; +const insertDatabaseIcon = function(elem) { + elem.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" + ); +}; +const insertComputerIcon = function(elem) { + elem.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" + ); +}; +const insertClockIcon = function(elem) { + elem.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" + ); +}; +const insertArrowHead = function(elem) { + elem.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"); +}; +const insertArrowEnd = function(elem) { + elem.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"); +}; +const insertArrowFilledHead = function(elem) { + elem.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"); +}; +const insertDynamicNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4); + marker.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"); + marker.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"); +}; +const getC4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { fontSize, fontFamily, fontWeight } = conf2; + const lines = content.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * fontSize - fontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily); + text.append("tspan").attr("dy", dy).text(lines[i]).attr("alignment-baseline", "mathematical"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawBoundary: drawBoundary$1, + drawC4Shape, + drawRels: drawRels$1, + drawImage, + insertArrowHead, + insertArrowEnd, + insertArrowFilledHead, + insertDynamicNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon +}; +let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0; +let c4ShapeInRow = 4; +let c4BoundaryInRow = 2; +parser.yy = db; +let conf = {}; +class Bounds { + constructor(diagObj) { + 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; + setConf(diagObj.db.getConfig()); + } + setData(startx, stopx, starty, stopy) { + this.nextData.startx = this.data.startx = startx; + this.nextData.stopx = this.data.stopx = stopx; + this.nextData.starty = this.data.starty = starty; + this.nextData.stopy = this.data.stopy = stopy; + } + updateVal(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + } + insert(c4Shape) { + this.nextData.cnt = this.nextData.cnt + 1; + let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2; + let _stopx = _startx + c4Shape.width; + let _starty = this.nextData.starty + c4Shape.margin * 2; + let _stopy = _starty + c4Shape.height; + if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) { + _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX; + _starty = this.nextData.stopy + c4Shape.margin * 2; + this.nextData.stopx = _stopx = _startx + c4Shape.width; + this.nextData.starty = this.nextData.stopy; + this.nextData.stopy = _stopy = _starty + c4Shape.height; + this.nextData.cnt = 1; + } + c4Shape.x = _startx; + c4Shape.y = _starty; + this.updateVal(this.data, "startx", _startx, Math.min); + this.updateVal(this.data, "starty", _starty, Math.min); + this.updateVal(this.data, "stopx", _stopx, Math.max); + this.updateVal(this.data, "stopy", _stopy, Math.max); + this.updateVal(this.nextData, "startx", _startx, Math.min); + this.updateVal(this.nextData, "starty", _starty, Math.min); + this.updateVal(this.nextData, "stopx", _stopx, Math.max); + this.updateVal(this.nextData, "stopy", _stopy, Math.max); + } + init(diagObj) { + 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 + }; + setConf(diagObj.db.getConfig()); + } + bumpLastMargin(margin) { + this.data.stopx += margin; + this.data.stopy += margin; + } +} +const setConf = function(cnf) { + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); + if (cnf.fontFamily) { + conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const c4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const boundaryFont = (cnf) => { + return { + fontFamily: cnf.boundaryFontFamily, + fontSize: cnf.boundaryFontSize, + fontWeight: cnf.boundaryFontWeight + }; +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) { + if (!c4Shape[textType].width) { + if (c4ShapeTextWrap) { + c4Shape[textType].text = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.w)(c4Shape[textType].text, textLimitWidth, textConf); + c4Shape[textType].textLines = c4Shape[textType].text.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex).length; + c4Shape[textType].width = textLimitWidth; + c4Shape[textType].height = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.j)(c4Shape[textType].text, textConf); + } else { + let lines = c4Shape[textType].text.split(_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + c4Shape[textType].textLines = lines.length; + let lineHeight = 0; + c4Shape[textType].height = 0; + c4Shape[textType].width = 0; + for (const line of lines) { + c4Shape[textType].width = Math.max( + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.h)(line, textConf), + c4Shape[textType].width + ); + lineHeight = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.j)(line, textConf); + c4Shape[textType].height = c4Shape[textType].height + lineHeight; + } + } + } +} +const drawBoundary = function(diagram2, boundary, bounds) { + boundary.x = bounds.data.startx; + boundary.y = bounds.data.starty; + boundary.width = bounds.data.stopx - bounds.data.startx; + boundary.height = bounds.data.stopy - bounds.data.starty; + boundary.label.y = conf.c4ShapeMargin - 35; + let boundaryTextWrap = boundary.wrap && conf.wrap; + let boundaryLabelConf = boundaryFont(conf); + boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2; + boundaryLabelConf.fontWeight = "bold"; + let textLimitWidth = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.h)(boundary.label.text, boundaryLabelConf); + calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth); + svgDraw.drawBoundary(diagram2, boundary, conf); +}; +const drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) { + let Y = 0; + for (const c4ShapeKey of c4ShapeKeys) { + Y = 0; + const c4Shape = c4ShapeArray2[c4ShapeKey]; + let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2; + c4Shape.typeC4Shape.width = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.h)( + "«" + c4Shape.typeC4Shape.text + "»", + c4ShapeTypeConf + ); + c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2; + c4Shape.typeC4Shape.Y = conf.c4ShapePadding; + Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4; + c4Shape.image = { width: 0, height: 0, Y: 0 }; + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + break; + } + if (c4Shape.sprite) { + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + } + let c4ShapeTextWrap = c4Shape.wrap && conf.wrap; + let textLimitWidth = conf.width - conf.c4ShapePadding * 2; + let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2; + c4ShapeLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth); + c4Shape["label"].Y = Y + 8; + Y = c4Shape["label"].Y + c4Shape["label"].height; + if (c4Shape.type && c4Shape.type.text !== "") { + c4Shape.type.text = "[" + c4Shape.type.text + "]"; + let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth); + c4Shape["type"].Y = Y + 5; + Y = c4Shape["type"].Y + c4Shape["type"].height; + } else if (c4Shape.techn && c4Shape.techn.text !== "") { + c4Shape.techn.text = "[" + c4Shape.techn.text + "]"; + let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text); + calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth); + c4Shape["techn"].Y = Y + 5; + Y = c4Shape["techn"].Y + c4Shape["techn"].height; + } + let rectHeight = Y; + let rectWidth = c4Shape.label.width; + if (c4Shape.descr && c4Shape.descr.text !== "") { + let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth); + c4Shape["descr"].Y = Y + 20; + Y = c4Shape["descr"].Y + c4Shape["descr"].height; + rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width); + rectHeight = Y - c4Shape["descr"].textLines * 5; + } + rectWidth = rectWidth + conf.c4ShapePadding; + c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width); + c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height); + c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin; + currentBounds.insert(c4Shape); + svgDraw.drawC4Shape(diagram2, c4Shape, conf); + } + currentBounds.bumpLastMargin(conf.c4ShapeMargin); +}; +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } +} +let getIntersectPoint = function(fromNode, endPoint) { + let x1 = fromNode.x; + let y1 = fromNode.y; + let x2 = endPoint.x; + let y2 = endPoint.y; + let fromCenterX = x1 + fromNode.width / 2; + let fromCenterY = y1 + fromNode.height / 2; + let dx = Math.abs(x1 - x2); + let dy = Math.abs(y1 - y2); + let tanDYX = dy / dx; + let fromDYX = fromNode.height / fromNode.width; + let returnPoint = null; + if (y1 == y2 && x1 < x2) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY); + } else if (y1 == y2 && x1 > x2) { + returnPoint = new Point(x1, fromCenterY); + } else if (x1 == x2 && y1 < y2) { + returnPoint = new Point(fromCenterX, y1 + fromNode.height); + } else if (x1 == x2 && y1 > y2) { + returnPoint = new Point(fromCenterX, y1); + } + if (x1 > x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX - dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX + dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1); + } + } else if (x1 > x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX); + } else { + returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1); + } + } + return returnPoint; +}; +let getIntersectPoints = function(fromNode, endNode) { + let endIntersectPoint = { x: 0, y: 0 }; + endIntersectPoint.x = endNode.x + endNode.width / 2; + endIntersectPoint.y = endNode.y + endNode.height / 2; + let startPoint = getIntersectPoint(fromNode, endIntersectPoint); + endIntersectPoint.x = fromNode.x + fromNode.width / 2; + endIntersectPoint.y = fromNode.y + fromNode.height / 2; + let endPoint = getIntersectPoint(endNode, endIntersectPoint); + return { startPoint, endPoint }; +}; +const drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) { + let i = 0; + for (let rel of rels2) { + i = i + 1; + let relTextWrap = rel.wrap && conf.wrap; + let relConf = messageFont(conf); + let diagramType = diagObj.db.getC4Type(); + if (diagramType === "C4Dynamic") { + rel.label.text = i + ": " + rel.label.text; + } + let textLimitWidth = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.label.text, relConf); + calcC4ShapeTextWH("label", rel, relTextWrap, relConf, textLimitWidth); + if (rel.techn && rel.techn.text !== "") { + textLimitWidth = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.techn.text, relConf); + calcC4ShapeTextWH("techn", rel, relTextWrap, relConf, textLimitWidth); + } + if (rel.descr && rel.descr.text !== "") { + textLimitWidth = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.descr.text, relConf); + calcC4ShapeTextWH("descr", rel, relTextWrap, relConf, textLimitWidth); + } + let fromNode = getC4ShapeObj(rel.from); + let endNode = getC4ShapeObj(rel.to); + let points = getIntersectPoints(fromNode, endNode); + rel.startPoint = points.startPoint; + rel.endPoint = points.endPoint; + } + svgDraw.drawRels(diagram2, rels2, conf); +}; +function drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) { + let currentBounds = new Bounds(diagObj); + currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length); + for (let [i, currentBoundary] of currentBoundaries.entries()) { + let Y = 0; + currentBoundary.image = { width: 0, height: 0, Y: 0 }; + if (currentBoundary.sprite) { + currentBoundary.image.width = 48; + currentBoundary.image.height = 48; + currentBoundary.image.Y = Y; + Y = currentBoundary.image.Y + currentBoundary.image.height; + } + let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap; + let currentBoundaryLabelConf = boundaryFont(conf); + currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2; + currentBoundaryLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH( + "label", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryLabelConf, + currentBounds.data.widthLimit + ); + currentBoundary["label"].Y = Y + 8; + Y = currentBoundary["label"].Y + currentBoundary["label"].height; + if (currentBoundary.type && currentBoundary.type.text !== "") { + currentBoundary.type.text = "[" + currentBoundary.type.text + "]"; + let currentBoundaryTypeConf = boundaryFont(conf); + calcC4ShapeTextWH( + "type", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryTypeConf, + currentBounds.data.widthLimit + ); + currentBoundary["type"].Y = Y + 5; + Y = currentBoundary["type"].Y + currentBoundary["type"].height; + } + if (currentBoundary.descr && currentBoundary.descr.text !== "") { + let currentBoundaryDescrConf = boundaryFont(conf); + currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2; + calcC4ShapeTextWH( + "descr", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryDescrConf, + currentBounds.data.widthLimit + ); + currentBoundary["descr"].Y = Y + 20; + Y = currentBoundary["descr"].Y + currentBoundary["descr"].height; + } + if (i == 0 || i % c4BoundaryInRow === 0) { + let _x = parentBounds.data.startx + conf.diagramMarginX; + let _y = parentBounds.data.stopy + conf.diagramMarginY + Y; + currentBounds.setData(_x, _x, _y, _y); + } else { + let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx; + let _y = currentBounds.data.starty; + currentBounds.setData(_x, _x, _y, _y); + } + currentBounds.name = currentBoundary.alias; + let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias); + let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias); + if (currentPersonOrSystemKeys.length > 0) { + drawC4ShapeArray( + currentBounds, + diagram2, + currentPersonOrSystemArray, + currentPersonOrSystemKeys + ); + } + parentBoundaryAlias = currentBoundary.alias; + let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias); + if (nextCurrentBoundarys.length > 0) { + drawInsideBoundary( + diagram2, + parentBoundaryAlias, + currentBounds, + nextCurrentBoundarys, + diagObj + ); + } + if (currentBoundary.alias !== "global") { + drawBoundary(diagram2, currentBoundary, currentBounds); + } + parentBounds.data.stopy = Math.max( + currentBounds.data.stopy + conf.c4ShapeMargin, + parentBounds.data.stopy + ); + parentBounds.data.stopx = Math.max( + currentBounds.data.stopx + conf.c4ShapeMargin, + parentBounds.data.stopx + ); + globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx); + globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy); + } +} +const draw = function(_text, id, _version, diagObj) { + conf = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4; + const securityLevel = (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + let db2 = diagObj.db; + diagObj.db.setWrap(conf.wrap); + c4ShapeInRow = db2.getC4ShapeInRow(); + c4BoundaryInRow = db2.getC4BoundaryInRow(); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`C:${JSON.stringify(conf, null, 2)}`); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + let screenBounds = new Bounds(diagObj); + screenBounds.setData( + conf.diagramMarginX, + conf.diagramMarginX, + conf.diagramMarginY, + conf.diagramMarginY + ); + screenBounds.data.widthLimit = screen.availWidth; + globalBoundaryMaxX = conf.diagramMarginX; + globalBoundaryMaxY = conf.diagramMarginY; + const title2 = diagObj.db.getTitle(); + let currentBoundaries = diagObj.db.getBoundarys(""); + drawInsideBoundary(diagram2, "", screenBounds, currentBoundaries, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowEnd(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); + screenBounds.data.stopx = globalBoundaryMaxX; + screenBounds.data.stopy = globalBoundaryMaxY; + const box = screenBounds.data; + let boxHeight = box.stopy - box.starty; + let height = boxHeight + 2 * conf.diagramMarginY; + let boxWidth = box.stopx - box.startx; + const width = boxWidth + 2 * conf.diagramMarginX; + if (title2) { + diagram2.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY); + } + (0,_mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title2 ? 60 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, box); +}; +const renderer = { + drawPersonOrSystemArray: drawC4ShapeArray, + drawBoundary, + setConf, + draw +}; +const getStyles = (options) => `.person { + stroke: ${options.personBorder}; + fill: ${options.personBkg}; + } +`; +const styles = getStyles; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: ({ c4, wrap }) => { + renderer.setConf(c4); + db.setWrap(wrap); + } +}; + + + +/***/ }), + +/***/ 72015: +/***/ ((__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__(17967); +/* harmony import */ var _mermaid_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76365); + + +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); + 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_04fb0060_js__WEBPACK_IMPORTED_MODULE_1__.H, " "); + 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 */ .Nm)(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 */ .Nm)(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/9765.ce649b7e.js b/assets/js/9765.ce649b7e.js new file mode 100644 index 000000000..a0d7b0ef0 --- /dev/null +++ b/assets/js/9765.ce649b7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9765],{9765:(t,e,i)=>{i.d(e,{diagram:()=>T});var n=i(6365),r=i(4218),s=i(1644),a=i(5625),l=(i(7484),i(7967),i(7856),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;s<r.length;s++)if((i=this._input.match(this.rules[r[s]]))&&(!e||i[0].length>e[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.t)()}},_={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.jvg)().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.Ys)("#i"+e));const h=("sandbox"===c?(0,r.Ys)(o.nodes()[0].contentDocument.body):(0,r.Ys)("body")).select(`[id='${e}']`);g(h,R);const u=new a.k({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",["<<Element>>",`${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.bK)(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/9944d2ae.7565d3dd.js b/assets/js/9944d2ae.30924c3e.js similarity index 90% rename from assets/js/9944d2ae.7565d3dd.js rename to assets/js/9944d2ae.30924c3e.js index b0e23250a..b90f63dde 100644 --- a/assets/js/9944d2ae.7565d3dd.js +++ b/assets/js/9944d2ae.30924c3e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2640],{9665:s=>{s.exports=JSON.parse('{"label":"Users","permalink":"/docs/tags/users","allTagsPath":"/docs/tags","count":1,"items":[{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2640],{9665:s=>{s.exports=JSON.parse('{"label":"Users","permalink":"/docs/tags/users","allTagsPath":"/docs/tags","count":1,"items":[{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/9a63677c.4f4aa057.js b/assets/js/9a63677c.0955f839.js similarity index 89% rename from assets/js/9a63677c.4f4aa057.js rename to assets/js/9a63677c.0955f839.js index 256862221..a736c22ef 100644 --- a/assets/js/9a63677c.4f4aa057.js +++ b/assets/js/9a63677c.0955f839.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5169],{3884:t=>{t.exports=JSON.parse('{"label":"Eloqua","permalink":"/docs/tags/eloqua","allTagsPath":"/docs/tags","count":2,"items":[{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5169],{3884:t=>{t.exports=JSON.parse('{"label":"Eloqua","permalink":"/docs/tags/eloqua","allTagsPath":"/docs/tags","count":2,"items":[{"id":"js/snippets/engage-with-countdown","title":"Engage with Countdown","description":"Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.","permalink":"/docs/js/snippets/engage-with-countdown"},{"id":"js/snippets/tailor-with-data","title":"Tailor the experience with data logic","description":"Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don\'t be that person. Utilise the power of simple data logic and control the user flows.","permalink":"/docs/js/snippets/tailor-with-data"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/9be7a4ef.8d8e7884.js b/assets/js/9be7a4ef.8d8e7884.js deleted file mode 100644 index baa5a5d29..000000000 --- a/assets/js/9be7a4ef.8d8e7884.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1694],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),u=i,f=m["".concat(l,".").concat(u)]||m[u]||d[u]||o;return n?a.createElement(f,r(r({ref:t},c),{},{components:n})):a.createElement(f,r({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var p=2;p<o;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>o});var a=n(7294);const i="leadText_qzwo",o=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},8687:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var a=n(7462),i=(n(7294),n(4137)),o=n(1872);const r={id:"ampscript-style-guide",title:"AMPScript Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ampscript-style-guide.png",tags:["Marketing Cloud","AMPScript","Style Guide","Best Practice"]},s=void 0,l={unversionedId:"ampscript/ampscript-style-guide",id:"ampscript/ampscript-style-guide",title:"AMPScript Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",source:"@site/docs/ampscript/ampscript-style-guide.mdx",sourceDirName:"ampscript",slug:"/ampscript/ampscript-style-guide",permalink:"/docs/ampscript/ampscript-style-guide",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ampscript/ampscript-style-guide.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Style Guide",permalink:"/docs/tags/style-guide"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1671837824,formattedLastUpdatedAt:"Dec 23, 2022",frontMatter:{id:"ampscript-style-guide",title:"AMPScript Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ampscript-style-guide.png",tags:["Marketing Cloud","AMPScript","Style Guide","Best Practice"]},sidebar:"docs",previous:{title:"AMPScript",permalink:"/docs/category/ampscript"},next:{title:"Performance",permalink:"/docs/ssjs/ssjs-vs-ampscript-performance"}},p={},c=[{value:"Naming Convention",id:"naming-convention",level:2},{value:"Meaningful Names",id:"meaningful-names",level:3},{value:"AMPScript Letter Case",id:"ampscript-letter-case",level:3},{value:"AMPScript Variable Names",id:"ampscript-variable-names",level:4},{value:"AMPScript Functions",id:"ampscript-functions",level:4},{value:"AMPScript Loops, Ifs and Variable Declarations",id:"ampscript-loops-ifs-and-variable-declarations",level:4},{value:"Consistent Quotes",id:"consistent-quotes",level:3},{value:"Indentation and Spacing",id:"indentation-and-spacing",level:2},{value:"Consistent Indentation",id:"consistent-indentation",level:3},{value:"Intentional Spacing",id:"intentional-spacing",level:3},{value:"Comments",id:"comments",level:2},{value:"1. Table of Contents Comment",id:"1-table-of-contents-comment",level:3},{value:"2. Section Comments",id:"2-section-comments",level:3},{value:"3. Documentation Comments",id:"3-documentation-comments",level:3},{value:"Sum Up",id:"sum-up",level:2}],m={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(d,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(o.m,{content:"Script with style. Readable code is a few rules & conventions away.",mdxType:"LeadText"}),(0,i.kt)("p",null,"First things first: this Salesforce Marketing Cloud AMPScript style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Be consistent across your codebase."),(0,i.kt)("li",{parentName:"ol"},"Strive for good readability.")),(0,i.kt)("p",null,"Everything else is preference. And you are just about to learn about mine."),(0,i.kt)("h2",{id:"naming-convention"},"Naming Convention"),(0,i.kt)("p",null,"AMPScript gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity."),(0,i.kt)("h3",{id:"meaningful-names"},"Meaningful Names"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use descriptive names to provide context.")),(0,i.kt)("p",null,"As ",(0,i.kt)("a",{parentName:"p",href:"https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1"},"John F. Woods")," said, ",(0,i.kt)("inlineCode",{parentName:"p"},"always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"),". Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project."),(0,i.kt)("p",null,"Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your AMPScript better with meaningful variable names:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Use descriptive variable names. It is better to have a long explicit one (",(0,i.kt)("inlineCode",{parentName:"li"},"IsTrackingSuppressed"),") than a short mysterious abbreviation (",(0,i.kt)("inlineCode",{parentName:"li"},"Trk"),")."),(0,i.kt)("li",{parentName:"ol"},"When the variable is a boolean, prefix it with ",(0,i.kt)("inlineCode",{parentName:"li"},"Is")," (or ",(0,i.kt)("inlineCode",{parentName:"li"},"Has"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"Does"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"Are")," depending on the underlying data)."),(0,i.kt)("li",{parentName:"ol"},"When the variable is a date, suffix it with ",(0,i.kt)("inlineCode",{parentName:"li"},"Date"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Descriptive and suggesting boolean data type */\nSET @isTrackingSuppressed = false;\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nSET @value = false;\n\n/* \u2705 Descriptive and suggesting date data type */\nSET @trackingSupressionStartDate = Now();\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nSET @supressed = Now();\n")),(0,i.kt)("h3",{id:"ampscript-letter-case"},"AMPScript Letter Case"),(0,i.kt)("p",null,"AMPScript letter case is a minefield. I have seen all possible combinations of letter case used for variables and AMPScript functions - both in shared snippets and official documentation."),(0,i.kt)("p",null,"I even created a ",(0,i.kt)("a",{parentName:"p",href:"https://www.linkedin.com/feed/update/urn:li:activity:6807595457716518912/"},"survey")," to check which approach is the most popular. Outcomes from 168 votes?"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"45%: Mix of ",(0,i.kt)("inlineCode",{parentName:"li"},"ProperCase")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"UPPERCASE")," for various elements."),(0,i.kt)("li",{parentName:"ul"},"30%: ",(0,i.kt)("inlineCode",{parentName:"li"},"ProperCase")," for everything."),(0,i.kt)("li",{parentName:"ul"},"15%: ",(0,i.kt)("inlineCode",{parentName:"li"},"UPPERCASE")," for everything."),(0,i.kt)("li",{parentName:"ul"},"10%: Other conventions (including ",(0,i.kt)("inlineCode",{parentName:"li"},"lowercase")," with some ",(0,i.kt)("inlineCode",{parentName:"li"},"camelCase")," for functions and ",(0,i.kt)("inlineCode",{parentName:"li"},"snake_case")," for variables by ",(0,i.kt)("a",{parentName:"li",href:"https://www.linkedin.com/feed/update/urn:li:ugcPost:6807595457297084416?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A6807595457297084416%2C6807673667259125762%29&replyUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A6807595457297084416%2C6807687826575110145%29"},"Adam Spriggs"),", co-author of the AMPScript bible - ",(0,i.kt)("a",{parentName:"li",href:"https://ampscript.guide"},"ampscript.guide"),").")),(0,i.kt)("p",null,"So the best recommendation for you (and your team) to decide on one style - whichever it will be - and stay consistent."),(0,i.kt)("p",null,"I decided to use a mixed approach for the sake of readability. It might not be as simple as focusing on just one letter case format for the whole code, but it improves the experience of working with longer and more complex AMPScript a lot."),(0,i.kt)("h4",{id:"ampscript-variable-names"},"AMPScript Variable Names"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("inlineCode",{parentName:"strong"},"camelCase")," for variable names.")),(0,i.kt)("p",null,"I use ",(0,i.kt)("inlineCode",{parentName:"p"},"camelCase")," for AMPScript variables because:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"It is more readable than ",(0,i.kt)("inlineCode",{parentName:"li"},"lowercase")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"UPPERCASE")," - especially for longer names."),(0,i.kt)("li",{parentName:"ol"},"It is easier to differentiate variable name (",(0,i.kt)("inlineCode",{parentName:"li"},"@")," prefix and ",(0,i.kt)("inlineCode",{parentName:"li"},"camelCase"),") from the function name (",(0,i.kt)("inlineCode",{parentName:"li"},"PascalCase"),"), even if they use the same word (frequent for technical variables like counters)."),(0,i.kt)("li",{parentName:"ol"},"It is in line with the ",(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-style-guide#js-variables-functions--methods-letter-case"},"SSJS styling for variables"),", so it's easier to switch between languages.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 camelCase variable names */\nVAR @response, @salesforceCampaigns, @rowCount\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = RowCount(@salesforceCampaigns)\n\n/* \u274c lowercase variable names */\nVAR @response, @salesforcecampaigns, @rowcount\nSET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowcount = RowCount(@salesforcecampaigns)\n\n/* \u274c inconsistent case variable names */\nVAR @RESPONSE, @salesforcecampaigns, @RowCount\nSET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @RowCount = RowCount(@salesforcecampaigns)\n")),(0,i.kt)("h4",{id:"ampscript-functions"},"AMPScript Functions"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("inlineCode",{parentName:"strong"},"PascalCase")," for function names.")),(0,i.kt)("p",null,"I use ",(0,i.kt)("inlineCode",{parentName:"p"},"PascalCase")," for AMPScript functions because:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"It is more readable than ",(0,i.kt)("inlineCode",{parentName:"li"},"lowercase")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"UPPERCASE")," - especially for longer names."),(0,i.kt)("li",{parentName:"ol"},"It is easier to differentiate function name (",(0,i.kt)("inlineCode",{parentName:"li"},"PascalCase"),") from the variable name (",(0,i.kt)("inlineCode",{parentName:"li"},"@")," prefix and ",(0,i.kt)("inlineCode",{parentName:"li"},"camelCase"),"), even if they use the same word (frequent for technical variables like counters)."),(0,i.kt)("li",{parentName:"ol"},"It is in line with the ",(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-style-guide#ssjs-functions-letter-case"},"SSJS styling for built-in functions"),", so it's easier to switch between languages.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 PascalCase variable names */\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = RowCount(@salesforceCampaigns)\n\n/* \u274c lowercase function names */\nSET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = rowcount(@salesforceCampaigns)\n\n/* \u274c inconsistent case variable names */\nSET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = ROWCOUNT(@salesforceCampaigns)\n")),(0,i.kt)("h4",{id:"ampscript-loops-ifs-and-variable-declarations"},"AMPScript Loops, Ifs and Variable Declarations"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("inlineCode",{parentName:"strong"},"UPPERCASE")," for loops, if blocks and variable declarations.")),(0,i.kt)("p",null,"Although I recommend ",(0,i.kt)("inlineCode",{parentName:"p"},"PascalCase")," for most of the AMPScript syntax, I believe that limited usage of ",(0,i.kt)("inlineCode",{parentName:"p"},"UPPERCASE")," can have tremendous benefit to readability."),(0,i.kt)("p",null,"I use ",(0,i.kt)("inlineCode",{parentName:"p"},"UPPERCASE")," for three groups of elements:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Variable declaration and setting syntax (",(0,i.kt)("inlineCode",{parentName:"li"},"VAR")," & ",(0,i.kt)("inlineCode",{parentName:"li"},"SET"),")."),(0,i.kt)("li",{parentName:"ol"},"If statement syntax (",(0,i.kt)("inlineCode",{parentName:"li"},"IF"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"NOT"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"THEN")," ",(0,i.kt)("inlineCode",{parentName:"li"},"ELSEIF"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"ENDIF")," and also ",(0,i.kt)("inlineCode",{parentName:"li"},"IIF"),")."),(0,i.kt)("li",{parentName:"ol"},"Loop syntax (",(0,i.kt)("inlineCode",{parentName:"li"},"FOR"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"TO"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"DOWNTO"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"DO"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"NEXT"),").")),(0,i.kt)("p",null,"Those three groups are either fundamental data points within your AMPScript code (variables) or the only source of real complexity (",(0,i.kt)("inlineCode",{parentName:"p"},"IF")," statements and ",(0,i.kt)("inlineCode",{parentName:"p"},"FOR")," loops). That's why I recommend improving readability and increasing attention around those parts of the script."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 UPPERCASE for variable declarations, IF and FOR syntax */\nVAR @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = RowCount(@salesforceCampaigns)\n\nIF @rowCount > 0 THEN\n FOR @counter = 1 TO @rowCount DO\n SET @row = Row(@retrieve, @counter)\n SET @name = Field(@row, 'Name')\n SET @id = Field(@row, 'Id')\n SET @startDate = Field(@row, 'StartDate')\n SET @endDate = Field(@row, 'EndDate')\n SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n SET @response = Concat(@response, @rowData, ';')\n NEXT @counter\nENDIF\n\n/* \u274c PascalCase for variable declarations, IF and FOR syntax */\nVar @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response\nSet @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSet @rowCount = RowCount(@salesforceCampaigns)\n\nIf @rowCount > 0 Then\n For @counter = 1 To @rowCount Do\n Set @row = Row(@retrieve, @counter)\n Set @name = Field(@row, 'Name')\n Set @id = Field(@row, 'Id')\n Set @startDate = Field(@row, 'StartDate')\n Set @endDate = Field(@row, 'EndDate')\n Set @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n Set @response = Concat(@response, @rowData, ';')\n Next @counter\nEndif\n")),(0,i.kt)("h3",{id:"consistent-quotes"},"Consistent Quotes"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use single quote style.")),(0,i.kt)("p",null,"With AMPScript, you can use either single quotes (",(0,i.kt)("inlineCode",{parentName:"p"},"'"),") or double quotes (",(0,i.kt)("inlineCode",{parentName:"p"},'"'),"). I prefer the single quotes:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML."),(0,i.kt)("li",{parentName:"ol"},"On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster.")),(0,i.kt)("p",null,"However, there are many English words using apostrophes, and using double quotes means no need to escape them."),(0,i.kt)("p",null,"In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Single Quotes */\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\n\n/* \u274c Mixed Quotes */\nSET @salesforceCampaigns = RetrieveSalesforceObjects(\"Campaign\", 'Name,Id,StartDate,EndDate', \"IsActive\", \"=\", \"True\")\n")),(0,i.kt)("h2",{id:"indentation-and-spacing"},"Indentation and Spacing"),(0,i.kt)("p",null,"Letter case is just one element of syntax convention that helps with readability. Other important ones are indentation and spacing. AMPScript requires neither, but both can help you write better code."),(0,i.kt)("h3",{id:"consistent-indentation"},"Consistent Indentation"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use indentation to highlight code relationships.")),(0,i.kt)("p",null,"Indentation in AMPScript is even more critical than in SSJS. Without curly brackets, it is the last hope for readability. The indentation will help you quickly understand the relationships between the code lines."),(0,i.kt)("p",null,"It is straightforward to apply the correct indentation to the simplicity of AMPScript. There are just two elements that require it. ",(0,i.kt)("inlineCode",{parentName:"p"},"IF")," statements and ",(0,i.kt)("inlineCode",{parentName:"p"},"FOR")," loops - add indentation level inside of those and get readable code."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Indented Syntax */\nIF @rowCount > 0 THEN\n FOR @counter = 1 TO @rowCount DO\n SET @row = Row(@retrieve, @counter)\n SET @name = Field(@row, 'Name')\n SET @id = Field(@row, 'Id')\n SET @startDate = Field(@row, 'StartDate')\n SET @endDate = Field(@row, 'EndDate')\n SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n SET @response = Concat(@response, @rowData, ';')\n NEXT @counter\nENDIF\n\n/* \u274c Flat Syntax */\nIF @rowCount > 0 THEN\nFOR @counter = 1 TO @rowCount DO\nSET @row = Row(@retrieve, @counter)\nSET @name = Field(@row, 'Name')\nSET @id = Field(@row, 'Id')\nSET @startDate = Field(@row, 'StartDate')\nSET @endDate = Field(@row, 'EndDate')\nSET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\nSET @response = Concat(@response, @rowData, ';')\nNEXT @counter\nENDIF\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click.")),(0,i.kt)("h3",{id:"intentional-spacing"},"Intentional Spacing"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use spaces wherever it makes the code more readable.")),(0,i.kt)("p",null,"To visually separate elements, use spaces:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Around operators."),(0,i.kt)("li",{parentName:"ul"},"After commas.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Intentional spacing */\nIF @rowCount > 0 THEN\n FOR @counter = 1 TO @rowCount DO\n SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n SET @response = Concat(@response, @rowData, ';')\n NEXT @counter\nENDIF\n\n/* \u274c Lack of spacing */\nIF @rowCount>0 THEN\n FOR @counter=1 TO @rowCount DO\n SET @rowData=Concat(@name,',',@id,',',@startDate,',',@endDate)\n SET @response=Concat(@response,@rowData,';')\n NEXT @counter\nENDIF\n")),(0,i.kt)("h2",{id:"comments"},"Comments"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Code tells you how. Comments tell you why.")," - ",(0,i.kt)("a",{parentName:"p",href:"https://blog.codinghorror.com/code-tells-you-how-comments-tell-you-why/"},"Jeff Atwood")),(0,i.kt)("p",null,"To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks."),(0,i.kt)("p",null,"Whenever you build complex AMPScript code, I recommend using three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough."),(0,i.kt)("h3",{id:"1-table-of-contents-comment"},"1. Table of Contents Comment"),(0,i.kt)("p",null,"The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script."),(0,i.kt)("p",null,"Before writing the AMPScript, describe the desired outcome and all steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation."),(0,i.kt)("p",null,"As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* --------------------------------------------------------------------------\n\nAuthenticates each visitor to limit access only to SFMC logged-in users.\n\n1. Global Variables - should be updated for each implementation\n2. Authentication Flow\n 2.1. Authorisation\n 2.2. Authentication with REST Token\n 2.2.1. Upsert Logging Data Extension\n\n-------------------------------------------------------------------------- */\n")),(0,i.kt)("h3",{id:"2-section-comments"},"2. Section Comments"),(0,i.kt)("p",null,"To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts."),(0,i.kt)("p",null,"For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* ----------------------------------------------------------------------- */\n/* ------------------------- 1. GLOBAL VARIABLES ------------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ----------------------------------------------------------------------- */\n/* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */\n/* ----------------------------------------------------------------------- */\n\n/* ------------------------- 2.1. Authorisation -------------------------- */\n\n/* ------------------------- 2.2. Authentication ------------------------- */\n\n/* 2.2.1. Build token request payload */\n")),(0,i.kt)("h3",{id:"3-documentation-comments"},"3. Documentation Comments"),(0,i.kt)("p",null,"Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments."),(0,i.kt)("p",null,"When to write a comment? My rule of thumb is to add them whenever someone else reading your code for the first time would ask a question about context or purpose."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"}," /* Capture Session for Authorisation purposes */\n SET @session = RequestParameter('s')\n\n /* ----------------------------------------------------------------------- */\n /* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Session Validation ------------------------ */\n\n /* If there is Session parameter, validate it with logging DE*/\n IF NOT Empty(@session) THEN\n /* If user was authenticated for another app or if he is not authenticated, redirect to login page */\n IF Lookup(@authDE, 'appName', 'session', @session) != @appName THEN\n Redirect(@appURL)\n ENDIF\n /* Authenticated users jumps to main code */\n")),(0,i.kt)("h2",{id:"sum-up"},"Sum Up"),(0,i.kt)("p",null,"It is a long article, so let's gather all the recommendations in one place:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Be consistent"),(0,i.kt)("li",{parentName:"ol"},"Strive for readability"),(0,i.kt)("li",{parentName:"ol"},"Use descriptive names to provide context ",(0,i.kt)("a",{parentName:"li",href:"#meaningful-names"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"camelCase")," for variable names ",(0,i.kt)("a",{parentName:"li",href:"#ampscript-variable-names"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"PascalCase")," for function names ",(0,i.kt)("a",{parentName:"li",href:"#ampscript-functions"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"UPPERCASE")," for loops, if blocks and variable declarations ",(0,i.kt)("a",{parentName:"li",href:"#ampscript-loops-ifs-and-variable-declarations"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use single quote style ",(0,i.kt)("a",{parentName:"li",href:"#consistent-quotes"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use indentation to highlight code relationships ",(0,i.kt)("a",{parentName:"li",href:"#consistent-indentation"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use spaces wherever it makes the code more readable ",(0,i.kt)("a",{parentName:"li",href:"#intentional-spacing"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use comments to provide required context to your script ",(0,i.kt)("a",{parentName:"li",href:"#comments"},"\ud83d\udd17"))),(0,i.kt)("p",null,"If you want to share something I'm missing or have arguments for a different recommendation - ",(0,i.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/mateusz-dabrowski-marketing/"},"let me know"),"."),(0,i.kt)("p",null,"Looking for more Marketing Cloud style? Check out my:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-style-guide"},"SFMC SSJS Style Guide")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-style-guide"},"SFMC SQL Style Guide"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9be7a4ef.b33b89ca.js b/assets/js/9be7a4ef.b33b89ca.js new file mode 100644 index 000000000..e7cc55f87 --- /dev/null +++ b/assets/js/9be7a4ef.b33b89ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1694],{1244:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(5893),i=t(1151),a=t(1872);const o={id:"ampscript-style-guide",title:"AMPScript Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ampscript-style-guide.png",tags:["Marketing Cloud","AMPScript","Style Guide","Best Practice"]},r=void 0,c={id:"ampscript/ampscript-style-guide",title:"AMPScript Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",source:"@site/docs/ampscript/ampscript-style-guide.mdx",sourceDirName:"ampscript",slug:"/ampscript/ampscript-style-guide",permalink:"/docs/ampscript/ampscript-style-guide",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ampscript/ampscript-style-guide.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Style Guide",permalink:"/docs/tags/style-guide"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1671837824,formattedLastUpdatedAt:"Dec 23, 2022",frontMatter:{id:"ampscript-style-guide",title:"AMPScript Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ampscript-style-guide.png",tags:["Marketing Cloud","AMPScript","Style Guide","Best Practice"]},sidebar:"docs",previous:{title:"AMPScript",permalink:"/docs/category/ampscript"},next:{title:"Performance",permalink:"/docs/ssjs/ssjs-vs-ampscript-performance"}},l={},d=[{value:"Naming Convention",id:"naming-convention",level:2},{value:"Meaningful Names",id:"meaningful-names",level:3},{value:"AMPScript Letter Case",id:"ampscript-letter-case",level:3},{value:"AMPScript Variable Names",id:"ampscript-variable-names",level:4},{value:"AMPScript Functions",id:"ampscript-functions",level:4},{value:"AMPScript Loops, Ifs and Variable Declarations",id:"ampscript-loops-ifs-and-variable-declarations",level:4},{value:"Consistent Quotes",id:"consistent-quotes",level:3},{value:"Indentation and Spacing",id:"indentation-and-spacing",level:2},{value:"Consistent Indentation",id:"consistent-indentation",level:3},{value:"Intentional Spacing",id:"intentional-spacing",level:3},{value:"Comments",id:"comments",level:2},{value:"1. Table of Contents Comment",id:"1-table-of-contents-comment",level:3},{value:"2. Section Comments",id:"2-section-comments",level:3},{value:"3. Documentation Comments",id:"3-documentation-comments",level:3},{value:"Sum Up",id:"sum-up",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.m,{content:"Script with style. Readable code is a few rules & conventions away."}),"\n",(0,s.jsx)(n.p,{children:"First things first: this Salesforce Marketing Cloud AMPScript style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Be consistent across your codebase."}),"\n",(0,s.jsx)(n.li,{children:"Strive for good readability."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Everything else is preference. And you are just about to learn about mine."}),"\n",(0,s.jsx)(n.h2,{id:"naming-convention",children:"Naming Convention"}),"\n",(0,s.jsx)(n.p,{children:"AMPScript gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity."}),"\n",(0,s.jsx)(n.h3,{id:"meaningful-names",children:"Meaningful Names"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use descriptive names to provide context."})}),"\n",(0,s.jsxs)(n.p,{children:["As ",(0,s.jsx)(n.a,{href:"https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1",children:"John F. Woods"})," said, ",(0,s.jsx)(n.code,{children:"always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"}),". Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project."]}),"\n",(0,s.jsx)(n.p,{children:"Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your AMPScript better with meaningful variable names:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Use descriptive variable names. It is better to have a long explicit one (",(0,s.jsx)(n.code,{children:"IsTrackingSuppressed"}),") than a short mysterious abbreviation (",(0,s.jsx)(n.code,{children:"Trk"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:["When the variable is a boolean, prefix it with ",(0,s.jsx)(n.code,{children:"Is"})," (or ",(0,s.jsx)(n.code,{children:"Has"}),"/",(0,s.jsx)(n.code,{children:"Does"}),"/",(0,s.jsx)(n.code,{children:"Are"})," depending on the underlying data)."]}),"\n",(0,s.jsxs)(n.li,{children:["When the variable is a date, suffix it with ",(0,s.jsx)(n.code,{children:"Date"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Descriptive and suggesting boolean data type */\nSET @isTrackingSuppressed = false;\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nSET @value = false;\n\n/* \u2705 Descriptive and suggesting date data type */\nSET @trackingSupressionStartDate = Now();\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nSET @supressed = Now();\n"})}),"\n",(0,s.jsx)(n.h3,{id:"ampscript-letter-case",children:"AMPScript Letter Case"}),"\n",(0,s.jsx)(n.p,{children:"AMPScript letter case is a minefield. I have seen all possible combinations of letter case used for variables and AMPScript functions - both in shared snippets and official documentation."}),"\n",(0,s.jsxs)(n.p,{children:["I even created a ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/feed/update/urn:li:activity:6807595457716518912/",children:"survey"})," to check which approach is the most popular. Outcomes from 168 votes?"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["45%: Mix of ",(0,s.jsx)(n.code,{children:"ProperCase"})," and ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," for various elements."]}),"\n",(0,s.jsxs)(n.li,{children:["30%: ",(0,s.jsx)(n.code,{children:"ProperCase"})," for everything."]}),"\n",(0,s.jsxs)(n.li,{children:["15%: ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," for everything."]}),"\n",(0,s.jsxs)(n.li,{children:["10%: Other conventions (including ",(0,s.jsx)(n.code,{children:"lowercase"})," with some ",(0,s.jsx)(n.code,{children:"camelCase"})," for functions and ",(0,s.jsx)(n.code,{children:"snake_case"})," for variables by ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/feed/update/urn:li:ugcPost:6807595457297084416?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A6807595457297084416%2C6807673667259125762%29&replyUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A6807595457297084416%2C6807687826575110145%29",children:"Adam Spriggs"}),", co-author of the AMPScript bible - ",(0,s.jsx)(n.a,{href:"https://ampscript.guide",children:"ampscript.guide"}),")."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"So the best recommendation for you (and your team) to decide on one style - whichever it will be - and stay consistent."}),"\n",(0,s.jsx)(n.p,{children:"I decided to use a mixed approach for the sake of readability. It might not be as simple as focusing on just one letter case format for the whole code, but it improves the experience of working with longer and more complex AMPScript a lot."}),"\n",(0,s.jsx)(n.h4,{id:"ampscript-variable-names",children:"AMPScript Variable Names"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Use ",(0,s.jsx)(n.code,{children:"camelCase"})," for variable names."]})}),"\n",(0,s.jsxs)(n.p,{children:["I use ",(0,s.jsx)(n.code,{children:"camelCase"})," for AMPScript variables because:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["It is more readable than ",(0,s.jsx)(n.code,{children:"lowercase"})," or ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," - especially for longer names."]}),"\n",(0,s.jsxs)(n.li,{children:["It is easier to differentiate variable name (",(0,s.jsx)(n.code,{children:"@"})," prefix and ",(0,s.jsx)(n.code,{children:"camelCase"}),") from the function name (",(0,s.jsx)(n.code,{children:"PascalCase"}),"), even if they use the same word (frequent for technical variables like counters)."]}),"\n",(0,s.jsxs)(n.li,{children:["It is in line with the ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide#js-variables-functions--methods-letter-case",children:"SSJS styling for variables"}),", so it's easier to switch between languages."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 camelCase variable names */\nVAR @response, @salesforceCampaigns, @rowCount\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = RowCount(@salesforceCampaigns)\n\n/* \u274c lowercase variable names */\nVAR @response, @salesforcecampaigns, @rowcount\nSET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowcount = RowCount(@salesforcecampaigns)\n\n/* \u274c inconsistent case variable names */\nVAR @RESPONSE, @salesforcecampaigns, @RowCount\nSET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @RowCount = RowCount(@salesforcecampaigns)\n"})}),"\n",(0,s.jsx)(n.h4,{id:"ampscript-functions",children:"AMPScript Functions"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Use ",(0,s.jsx)(n.code,{children:"PascalCase"})," for function names."]})}),"\n",(0,s.jsxs)(n.p,{children:["I use ",(0,s.jsx)(n.code,{children:"PascalCase"})," for AMPScript functions because:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["It is more readable than ",(0,s.jsx)(n.code,{children:"lowercase"})," or ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," - especially for longer names."]}),"\n",(0,s.jsxs)(n.li,{children:["It is easier to differentiate function name (",(0,s.jsx)(n.code,{children:"PascalCase"}),") from the variable name (",(0,s.jsx)(n.code,{children:"@"})," prefix and ",(0,s.jsx)(n.code,{children:"camelCase"}),"), even if they use the same word (frequent for technical variables like counters)."]}),"\n",(0,s.jsxs)(n.li,{children:["It is in line with the ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide#ssjs-functions-letter-case",children:"SSJS styling for built-in functions"}),", so it's easier to switch between languages."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 PascalCase variable names */\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = RowCount(@salesforceCampaigns)\n\n/* \u274c lowercase function names */\nSET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = rowcount(@salesforceCampaigns)\n\n/* \u274c inconsistent case variable names */\nSET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = ROWCOUNT(@salesforceCampaigns)\n"})}),"\n",(0,s.jsx)(n.h4,{id:"ampscript-loops-ifs-and-variable-declarations",children:"AMPScript Loops, Ifs and Variable Declarations"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Use ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," for loops, if blocks and variable declarations."]})}),"\n",(0,s.jsxs)(n.p,{children:["Although I recommend ",(0,s.jsx)(n.code,{children:"PascalCase"})," for most of the AMPScript syntax, I believe that limited usage of ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," can have tremendous benefit to readability."]}),"\n",(0,s.jsxs)(n.p,{children:["I use ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," for three groups of elements:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Variable declaration and setting syntax (",(0,s.jsx)(n.code,{children:"VAR"})," & ",(0,s.jsx)(n.code,{children:"SET"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:["If statement syntax (",(0,s.jsx)(n.code,{children:"IF"}),", ",(0,s.jsx)(n.code,{children:"NOT"}),", ",(0,s.jsx)(n.code,{children:"THEN"})," ",(0,s.jsx)(n.code,{children:"ELSEIF"}),", ",(0,s.jsx)(n.code,{children:"ENDIF"})," and also ",(0,s.jsx)(n.code,{children:"IIF"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:["Loop syntax (",(0,s.jsx)(n.code,{children:"FOR"}),", ",(0,s.jsx)(n.code,{children:"TO"}),"/",(0,s.jsx)(n.code,{children:"DOWNTO"}),", ",(0,s.jsx)(n.code,{children:"DO"}),", ",(0,s.jsx)(n.code,{children:"NEXT"}),")."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Those three groups are either fundamental data points within your AMPScript code (variables) or the only source of real complexity (",(0,s.jsx)(n.code,{children:"IF"})," statements and ",(0,s.jsx)(n.code,{children:"FOR"})," loops). That's why I recommend improving readability and increasing attention around those parts of the script."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 UPPERCASE for variable declarations, IF and FOR syntax */\nVAR @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSET @rowCount = RowCount(@salesforceCampaigns)\n\nIF @rowCount > 0 THEN\n FOR @counter = 1 TO @rowCount DO\n SET @row = Row(@retrieve, @counter)\n SET @name = Field(@row, 'Name')\n SET @id = Field(@row, 'Id')\n SET @startDate = Field(@row, 'StartDate')\n SET @endDate = Field(@row, 'EndDate')\n SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n SET @response = Concat(@response, @rowData, ';')\n NEXT @counter\nENDIF\n\n/* \u274c PascalCase for variable declarations, IF and FOR syntax */\nVar @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response\nSet @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\nSet @rowCount = RowCount(@salesforceCampaigns)\n\nIf @rowCount > 0 Then\n For @counter = 1 To @rowCount Do\n Set @row = Row(@retrieve, @counter)\n Set @name = Field(@row, 'Name')\n Set @id = Field(@row, 'Id')\n Set @startDate = Field(@row, 'StartDate')\n Set @endDate = Field(@row, 'EndDate')\n Set @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n Set @response = Concat(@response, @rowData, ';')\n Next @counter\nEndif\n"})}),"\n",(0,s.jsx)(n.h3,{id:"consistent-quotes",children:"Consistent Quotes"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use single quote style."})}),"\n",(0,s.jsxs)(n.p,{children:["With AMPScript, you can use either single quotes (",(0,s.jsx)(n.code,{children:"'"}),") or double quotes (",(0,s.jsx)(n.code,{children:'"'}),"). I prefer the single quotes:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML."}),"\n",(0,s.jsx)(n.li,{children:"On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"However, there are many English words using apostrophes, and using double quotes means no need to escape them."}),"\n",(0,s.jsx)(n.p,{children:"In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Single Quotes */\nSET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')\n\n/* \u274c Mixed Quotes */\nSET @salesforceCampaigns = RetrieveSalesforceObjects(\"Campaign\", 'Name,Id,StartDate,EndDate', \"IsActive\", \"=\", \"True\")\n"})}),"\n",(0,s.jsx)(n.h2,{id:"indentation-and-spacing",children:"Indentation and Spacing"}),"\n",(0,s.jsx)(n.p,{children:"Letter case is just one element of syntax convention that helps with readability. Other important ones are indentation and spacing. AMPScript requires neither, but both can help you write better code."}),"\n",(0,s.jsx)(n.h3,{id:"consistent-indentation",children:"Consistent Indentation"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use indentation to highlight code relationships."})}),"\n",(0,s.jsx)(n.p,{children:"Indentation in AMPScript is even more critical than in SSJS. Without curly brackets, it is the last hope for readability. The indentation will help you quickly understand the relationships between the code lines."}),"\n",(0,s.jsxs)(n.p,{children:["It is straightforward to apply the correct indentation to the simplicity of AMPScript. There are just two elements that require it. ",(0,s.jsx)(n.code,{children:"IF"})," statements and ",(0,s.jsx)(n.code,{children:"FOR"})," loops - add indentation level inside of those and get readable code."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Indented Syntax */\nIF @rowCount > 0 THEN\n FOR @counter = 1 TO @rowCount DO\n SET @row = Row(@retrieve, @counter)\n SET @name = Field(@row, 'Name')\n SET @id = Field(@row, 'Id')\n SET @startDate = Field(@row, 'StartDate')\n SET @endDate = Field(@row, 'EndDate')\n SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n SET @response = Concat(@response, @rowData, ';')\n NEXT @counter\nENDIF\n\n/* \u274c Flat Syntax */\nIF @rowCount > 0 THEN\nFOR @counter = 1 TO @rowCount DO\nSET @row = Row(@retrieve, @counter)\nSET @name = Field(@row, 'Name')\nSET @id = Field(@row, 'Id')\nSET @startDate = Field(@row, 'StartDate')\nSET @endDate = Field(@row, 'EndDate')\nSET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\nSET @response = Concat(@response, @rowData, ';')\nNEXT @counter\nENDIF\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"You Should Know",type:"note",children:(0,s.jsx)(n.p,{children:"It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click."})}),"\n",(0,s.jsx)(n.h3,{id:"intentional-spacing",children:"Intentional Spacing"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use spaces wherever it makes the code more readable."})}),"\n",(0,s.jsx)(n.p,{children:"To visually separate elements, use spaces:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Around operators."}),"\n",(0,s.jsx)(n.li,{children:"After commas."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Intentional spacing */\nIF @rowCount > 0 THEN\n FOR @counter = 1 TO @rowCount DO\n SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)\n SET @response = Concat(@response, @rowData, ';')\n NEXT @counter\nENDIF\n\n/* \u274c Lack of spacing */\nIF @rowCount>0 THEN\n FOR @counter=1 TO @rowCount DO\n SET @rowData=Concat(@name,',',@id,',',@startDate,',',@endDate)\n SET @response=Concat(@response,@rowData,';')\n NEXT @counter\nENDIF\n"})}),"\n",(0,s.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Code tells you how. Comments tell you why."})," - ",(0,s.jsx)(n.a,{href:"https://blog.codinghorror.com/code-tells-you-how-comments-tell-you-why/",children:"Jeff Atwood"})]}),"\n",(0,s.jsx)(n.p,{children:"To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks."}),"\n",(0,s.jsx)(n.p,{children:"Whenever you build complex AMPScript code, I recommend using three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough."}),"\n",(0,s.jsx)(n.h3,{id:"1-table-of-contents-comment",children:"1. Table of Contents Comment"}),"\n",(0,s.jsx)(n.p,{children:"The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script."}),"\n",(0,s.jsx)(n.p,{children:"Before writing the AMPScript, describe the desired outcome and all steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation."}),"\n",(0,s.jsx)(n.p,{children:"As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* --------------------------------------------------------------------------\n\nAuthenticates each visitor to limit access only to SFMC logged-in users.\n\n1. Global Variables - should be updated for each implementation\n2. Authentication Flow\n 2.1. Authorisation\n 2.2. Authentication with REST Token\n 2.2.1. Upsert Logging Data Extension\n\n-------------------------------------------------------------------------- */\n"})}),"\n",(0,s.jsx)(n.h3,{id:"2-section-comments",children:"2. Section Comments"}),"\n",(0,s.jsx)(n.p,{children:"To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts."}),"\n",(0,s.jsx)(n.p,{children:"For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* ----------------------------------------------------------------------- */\n/* ------------------------- 1. GLOBAL VARIABLES ------------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ----------------------------------------------------------------------- */\n/* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */\n/* ----------------------------------------------------------------------- */\n\n/* ------------------------- 2.1. Authorisation -------------------------- */\n\n/* ------------------------- 2.2. Authentication ------------------------- */\n\n/* 2.2.1. Build token request payload */\n"})}),"\n",(0,s.jsx)(n.h3,{id:"3-documentation-comments",children:"3. Documentation Comments"}),"\n",(0,s.jsx)(n.p,{children:"Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments."}),"\n",(0,s.jsx)(n.p,{children:"When to write a comment? My rule of thumb is to add them whenever someone else reading your code for the first time would ask a question about context or purpose."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:" /* Capture Session for Authorisation purposes */\n SET @session = RequestParameter('s')\n\n /* ----------------------------------------------------------------------- */\n /* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Session Validation ------------------------ */\n\n /* If there is Session parameter, validate it with logging DE*/\n IF NOT Empty(@session) THEN\n /* If user was authenticated for another app or if he is not authenticated, redirect to login page */\n IF Lookup(@authDE, 'appName', 'session', @session) != @appName THEN\n Redirect(@appURL)\n ENDIF\n /* Authenticated users jumps to main code */\n"})}),"\n",(0,s.jsx)(n.h2,{id:"sum-up",children:"Sum Up"}),"\n",(0,s.jsx)(n.p,{children:"It is a long article, so let's gather all the recommendations in one place:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Be consistent"}),"\n",(0,s.jsx)(n.li,{children:"Strive for readability"}),"\n",(0,s.jsxs)(n.li,{children:["Use descriptive names to provide context ",(0,s.jsx)(n.a,{href:"#meaningful-names",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use ",(0,s.jsx)(n.code,{children:"camelCase"})," for variable names ",(0,s.jsx)(n.a,{href:"#ampscript-variable-names",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use ",(0,s.jsx)(n.code,{children:"PascalCase"})," for function names ",(0,s.jsx)(n.a,{href:"#ampscript-functions",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use ",(0,s.jsx)(n.code,{children:"UPPERCASE"})," for loops, if blocks and variable declarations ",(0,s.jsx)(n.a,{href:"#ampscript-loops-ifs-and-variable-declarations",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use single quote style ",(0,s.jsx)(n.a,{href:"#consistent-quotes",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use indentation to highlight code relationships ",(0,s.jsx)(n.a,{href:"#consistent-indentation",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use spaces wherever it makes the code more readable ",(0,s.jsx)(n.a,{href:"#intentional-spacing",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use comments to provide required context to your script ",(0,s.jsx)(n.a,{href:"#comments",children:"\ud83d\udd17"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you want to share something I'm missing or have arguments for a different recommendation - ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/mateusz-dabrowski-marketing/",children:"let me know"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Looking for more Marketing Cloud style? Check out my:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide",children:"SFMC SSJS Style Guide"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-style-guide",children:"SFMC SQL Style Guide"})}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,n,t)=>{t.d(n,{m:()=>a});t(7294);const s="leadText_qzwo";var i=t(5893);const a=e=>{let{content:n}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:s,children:n})})}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>o});var s=t(7294);const i={},a=s.createContext(i);function o(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(i):e.components||i:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e4ad429.17fdd2f9.js b/assets/js/9e4ad429.4ea748c4.js similarity index 86% rename from assets/js/9e4ad429.17fdd2f9.js rename to assets/js/9e4ad429.4ea748c4.js index 4b57ebc2d..a600d22be 100644 --- a/assets/js/9e4ad429.17fdd2f9.js +++ b/assets/js/9e4ad429.4ea748c4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5406],{6060:s=>{s.exports=JSON.parse('{"label":"Performance","permalink":"/docs/tags/performance","allTagsPath":"/docs/tags","count":1,"items":[{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5406],{6060:s=>{s.exports=JSON.parse('{"label":"Performance","permalink":"/docs/tags/performance","allTagsPath":"/docs/tags","count":1,"items":[{"id":"ssjs/ssjs-vs-ampscript-performance","title":"SSJS vs AMPScript Performance","description":"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.","permalink":"/docs/ssjs/ssjs-vs-ampscript-performance"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/a6709703.84b2269e.js b/assets/js/a6709703.6d4ee4f3.js similarity index 97% rename from assets/js/a6709703.84b2269e.js rename to assets/js/a6709703.6d4ee4f3.js index 67e455a7f..b1dbbf367 100644 --- a/assets/js/a6709703.84b2269e.js +++ b/assets/js/a6709703.6d4ee4f3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4650],{1517:e=>{e.exports=JSON.parse('{"label":"Best Practice","permalink":"/docs/tags/best-practice","allTagsPath":"/docs/tags","count":5,"items":[{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"},{"id":"zen-of-sfmc","title":"Zen of SFMC","description":"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.","permalink":"/docs/zen-of-sfmc"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4650],{1517:e=>{e.exports=JSON.parse('{"label":"Best Practice","permalink":"/docs/tags/best-practice","allTagsPath":"/docs/tags","count":5,"items":[{"id":"ampscript/ampscript-style-guide","title":"AMPScript Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ampscript/ampscript-style-guide"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","title":"Architecting Web Solutions in SFMC","description":"Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.","permalink":"/docs/webinars/sfmc-webinar-architecting-web-solutions"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"ssjs/ssjs-style-guide","title":"SSJS Style Guide","description":"Script with style. Readable code is a few rules & best practices away.","permalink":"/docs/ssjs/ssjs-style-guide"},{"id":"zen-of-sfmc","title":"Zen of SFMC","description":"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.","permalink":"/docs/zen-of-sfmc"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.b1cb7e77.js b/assets/js/a7bd4aaa.b1cb7e77.js new file mode 100644 index 000000000..4e06721ba --- /dev/null +++ b/assets/js/a7bd4aaa.b1cb7e77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8518],{604:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(7294);var r=s(9488),o=s(246),t=s(8801),i=s(8790),c=s(3647),u=s(5893);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.Z,{version:e.version,tag:(0,o.os)(e.pluginId,e.version)}),(0,u.jsx)(r.d,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){const{version:e,route:s}=n;return(0,u.jsx)(r.FG,{className:e.className,children:(0,u.jsx)(t.q,{version:e,children:(0,i.H)(s.routes)})})}function l(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(d,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a8b77297.5786a4c2.js b/assets/js/a8b77297.5786a4c2.js new file mode 100644 index 000000000..912e0a47b --- /dev/null +++ b/assets/js/a8b77297.5786a4c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[952],{5016:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var s=t(5893),n=t(1151),a=t(1872);const r={id:"sfmc-code-resource",title:"SFMC Code Resource",sidebar_label:"Power of Code Resources",description:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",image:"img/og/og-image-sfmc-code-resources.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},i=void 0,c={id:"config/sfmc-code-resource",title:"SFMC Code Resource",description:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",source:"@site/docs/config/sfmc-code-resource.mdx",sourceDirName:"config",slug:"/config/sfmc-code-resource",permalink:"/docs/config/sfmc-code-resource",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-code-resource.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"App",permalink:"/docs/tags/app"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1705965559,formattedLastUpdatedAt:"Jan 22, 2024",frontMatter:{id:"sfmc-code-resource",title:"SFMC Code Resource",sidebar_label:"Power of Code Resources",description:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",image:"img/og/og-image-sfmc-code-resources.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},sidebar:"docs",previous:{title:"MCC Integration Patterns",permalink:"/docs/config/sfmc-mcc-integration-patterns"},next:{title:"Contact Deletion Process",permalink:"/docs/config/sfmc-contact-deletion"}},l={},d=[{value:"What are the Code Resources?",id:"what-are-the-code-resources",level:2},{value:"Code Resource Use Cases",id:"code-resource-use-cases",level:2},{value:"Code Resource Basics",id:"code-resource-basics",level:3},{value:"Code Resource Fun Things",id:"code-resource-fun-things",level:3},{value:"Dynamic Code Resources",id:"dynamic-code-resources",level:4},{value:"Personalised Code Resources",id:"personalised-code-resources",level:4},{value:"Generated Code Resources",id:"generated-code-resources",level:4},{value:"Code Resource Backends",id:"code-resource-backends",level:3},{value:"Easy Form Backend with Cloud Page",id:"easy-form-backend-with-cloud-page",level:4},{value:"Good Form Backend with Code Resource",id:"good-form-backend-with-code-resource",level:4},{value:"More ideas",id:"more-ideas",level:4},{value:"Code Resource Security",id:"code-resource-security",level:2},{value:"Security through obscurity",id:"security-through-obscurity",level:3},{value:"Allowlisting",id:"allowlisting",level:3},{value:"DE Lookup",id:"de-lookup",level:3},{value:"SSO",id:"sso",level:3},{value:"Examples",id:"examples",level:2},{value:"Learn more",id:"learn-more",level:2}];function h(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.m,{content:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse."}),"\n",(0,s.jsx)(o.h2,{id:"what-are-the-code-resources",children:"What are the Code Resources?"}),"\n",(0,s.jsx)(o.p,{children:"Code Resources in Salesforce Marketing Cloud are a solution for hosting JavaScript, CSS, JSON, RSS, Text and XML files within your account."}),"\n",(0,s.jsx)(o.p,{children:"They were part of the legacy Classic CloudPages. However, their features and usefulness allowed them to survive sunsetting and thrive in the Web Studio."}),"\n",(0,s.jsx)(o.p,{children:"Why use Code Resources when we have new CloudPages in Web Studio and Code Content Blocks in Content Builder? Unique set of features makes Code Resources irreplaceable:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["Unlike Content Blocks, Code Resources have their ",(0,s.jsx)(o.strong,{children:"own URL"}),". It means that they are not just a building block but can work alone as a web asset. It also means that they can be linked and API called as any other website."]}),"\n",(0,s.jsxs)(o.li,{children:["Unlike Cloud Pages, Code Resources have ",(0,s.jsx)(o.strong,{children:"no HTML structures appended automatically"})," by Marketing Cloud. It allows you to have complete control over what is returned by the Code Resource."]}),"\n",(0,s.jsxs)(o.li,{children:["Unlike externally hosted files, you can leverage SFMC programmatic solutions - ",(0,s.jsx)(o.strong,{children:"SSJS and AMPScript"})," - to provide a backend logic to your Code Resources."]}),"\n",(0,s.jsxs)(o.li,{children:["Finally, unlike Cloud Pages, there is ",(0,s.jsx)(o.strong,{children:"no cost"})," associated with loading a Code Resource."]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"That combination makes Code Resources perfect for multiple use cases - from basic to complex ones. Let's see some examples."}),"\n",(0,s.jsx)(o.h2,{id:"code-resource-use-cases",children:"Code Resource Use Cases"}),"\n",(0,s.jsx)(o.h3,{id:"code-resource-basics",children:"Code Resource Basics"}),"\n",(0,s.jsx)(o.p,{children:"The most obvious use case is hosting shared CSS and JavaScript, just as you would on a CMS. It works great - you can paste your stylesheet or scripts and import it the standard way to your Cloud Pages benefitting from storing all assets on the same server:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-html",metastring:'title="JS & CSS imports from Code Resources - the URLs will follow your Marketing Cloud configuration"',children:'<link rel="stylesheet" type="text/css" href="https://code-resource.sfmc.com/my-css" />\n<script src="https://code-resource.sfmc.com/my-js"><\/script>\n'})}),"\n",(0,s.jsx)(o.p,{children:"Similarly, you can store complex data structures in JSON or XML files to leverage them later with SSJS or AMPScript/GTL. It can be a better solution for deep immutable structures than Data Extensions."}),"\n",(0,s.jsx)(o.p,{children:"As practical as it is, this approach does not showcase the true strength of the Code Resources, so let's check something more interesting."}),"\n",(0,s.jsx)(o.h3,{id:"code-resource-fun-things",children:"Code Resource Fun Things"}),"\n",(0,s.jsx)(o.p,{children:"The real power comes with using Salesforce Marketing Cloud programmatic languages - AMPScript and SSJS. Those two allow you to execute logic on the backend and impact the front-facing outcome on the Code Resource. It enables some powerful use cases."}),"\n",(0,s.jsx)(o.h4,{id:"dynamic-code-resources",children:"Dynamic Code Resources"}),"\n",(0,s.jsx)(o.p,{children:"For example, you cannot host fonts in Marketing Cloud. But, you can encode them to base64 and, in that format, add them to your CSS Code Resource."}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-css",metastring:'title="Web Font in CSS Code Resource" {1,4}',children:'%%[ SET @SalesforceSansRegular = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..." ]%%\n@font-face {\n font-family: "Salesforce Sans";\n src: url(data:font/ttf;base64,%%=v(@SalesforceSansRegular)=%%) format(\'truetype\');\n font-weight: 400;\n font-display: swap;\n}\n'})}),"\n",(0,s.jsx)(o.p,{children:"What if you need a different font depending on the market to cover various alphabets? Adding all of them to your CSS is not a good idea from the performance point of view. However, you can leverage the power of SFMC programmatic languages to load only the required font. How? By requesting the specific font using a query parameter:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-html",metastring:'title="CSS Import with query parameter on the frontend"',children:'<link rel="stylesheet" type="text/css" href="https://coderesource.sfmc.com/my-css?font=salesforce-sans" />\n'})}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-css",metastring:'{2-3} title="Dynamic Stylesheet on the backend"',children:'%%[\n SET @FontSelected = RequestParameter("font")\n IF @FontSelected == "salesforce-sans" THEN\n SET @FontName = "Salesforce Sans"\n SET @FontInBase64 = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..."\n ELSE\n SET @FontName = "Different Font"\n SET @FontInBase64 = "AAAEEMDJJEkdEDKEJ849DJEHD33DJslsAAAA3EKFEK03..."\n ENDIF\n]%%\n@font-face {\n font-family: "%%=v(@FontName)=%%";\n src: url(data:font/ttf;base64,%%=v(@FontInBase64)=%%) format(\'truetype\');\n font-weight: 400;\n font-display: swap;\n}\n'})}),"\n",(0,s.jsx)(o.h4,{id:"personalised-code-resources",children:"Personalised Code Resources"}),"\n",(0,s.jsx)(o.p,{children:"Making your CSS or JS dynamic is just the beginning. Code Resources lets you leverage the Marketing Cloud Data Model. With SSJS and AMPScript, you can make Lookups and use other functions to adapt the outcome to a specific subscriber."}),"\n",(0,s.jsx)(o.p,{children:"It is handy when you want to hide the business logic from the competition. For example, you might have a script for a web form that calculates rates based on loyalty status, purchases and LTV. You don't have to share your logic in an accessible JavaScript - you can Lookup required data for each subscriber with SSJS and calculate everything on the server side - outputting only the final multipliers to your JS Code Resource."}),"\n",(0,s.jsx)(o.p,{children:"You can even perform API calls with SSJS or AMPScript to external systems to securely take advantage of their data. That can be especially useful when working with JSON Code Resources that can hold whole data structures used for the presentation layer on the Cloud Page."}),"\n",(0,s.jsx)(o.h4,{id:"generated-code-resources",children:"Generated Code Resources"}),"\n",(0,s.jsxs)(o.p,{children:["JSON Code Resources are where the real magic happens. They pair beautifully with SSJS and allow us to generate whole outputs from scratch with a nifty combination of SSJS object, ",(0,s.jsx)(o.code,{children:"Stringify()"})," function and ",(0,s.jsx)(o.code,{children:"<ctrl:var name=string />"})," personalisation string. Yeah, you can have no line of JSON in your JSON Code Resource and still use it to its fullest potential. Let's dive into details."]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-html",metastring:'{3,5} title="Make a JSON from generated data"',children:"<script runat=\"server\">\n (...)\n var stringifiedResult = Stringify({ 'created': createdAssets, 'deleted': deletedAssets });\n<\/script>\n<ctrl:var name=stringifiedResult />\n"})}),"\n",(0,s.jsx)(o.p,{children:"As you can see above, there is no line of JSON, but the Code Resource will output a proper JSON. How?"}),"\n",(0,s.jsxs)(o.p,{children:["Once Marketing Cloud executes SSJS and AMPScript on the backend, it removes that code from the output. However, you can push some data to the frontend with a personalisation string. If that data is an SSJS object, you can convert it to proper JSON with ",(0,s.jsx)(o.code,{children:"Stringify()"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"This trick enables many different use cases that make Code Resources shine:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["AMPScript and ",(0,s.jsx)(o.a,{href:"/docs/ssjs/debugging-ssjs",children:"SSJS debugging"})," - there are many places where you might want to use SFMC programmatic languages. Most of them either doesn't allow for easy debugging or drive SuperMessages costs. Code Resources are free and allow you to output error descriptions."]}),"\n",(0,s.jsx)(o.li,{children:"Deploying, cleaning and retrieving scripts - in many situations doing things through SFMC User Interface is not the best option. Deploying dozens of Data Extensions on multiple business units, cleaning hundreds of archival images or pulling assets JSON for version control. We can cover all those use cases with a script that can do the work in a fraction of the time needed for a manual approach. Then, some things cannot be done through UI at all (like targeting AutoSuppression List with Query Activity). Code Resource again will allow you to write, test and run such solutions. For free."}),"\n",(0,s.jsx)(o.li,{children:"Creating custom mini backends - that use case deserves a separate section ;)"}),"\n"]}),"\n",(0,s.jsx)(o.h3,{id:"code-resource-backends",children:"Code Resource Backends"}),"\n",(0,s.jsx)(o.p,{children:"Code Resources can do so much more than just serve some content. Thanks to the Salesforce Marketing Cloud programmatic languages, they can become a dedicated backend for various solutions."}),"\n",(0,s.jsx)(o.p,{children:"The most popular use case for SFMC's Web Studio is a Cloud Page with a form (for leads, data capture, preference management or whitepaper download). As far as creating the form is a relatively simple task with the modern HTML, the complex part is capturing the submitted data and saving it into the Data Extension."}),"\n",(0,s.jsx)(o.h4,{id:"easy-form-backend-with-cloud-page",children:"Easy Form Backend with Cloud Page"}),"\n",(0,s.jsxs)(o.p,{children:["The most basic solution utilised two Cloud Pages. One contains the form, while the other contains the data capture logic and displays the thank you page. This approach is straightforward, as you can create a standard HTML form with action pointing to the second Cloud Page, and the modern web standards will do most of the work automatically. You are just left with the need to capture submitted data with SSJS ",(0,s.jsx)(o.code,{children:"Request.GetFormField()"})," or AMPScript ",(0,s.jsx)(o.code,{children:"RequestParameter()"})," and push it to a DataExtension."]}),"\n",(0,s.jsx)(o.p,{children:"This approach, while easy to implement, has many drawbacks:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Submission redirects to another page - it takes time and creates suboptimal User Experience"}),"\n",(0,s.jsx)(o.li,{children:"You can create only limited (frontend JS-based) validation - if you need some checks against the SFMC data, that needs to happen after submission on the second Cloud Page. And if the validation fails, the user will be redirected back to the form page (in many cases, losing the data submitted in the form)."}),"\n",(0,s.jsx)(o.li,{children:"As each Cloud Page load costs a SuperMessage, this solution will require 2 in the best scenario - and more if there is a validation fail on the thank you page"}),"\n",(0,s.jsx)(o.li,{children:"If you want to make your form dynamic, you need to have all required data in the front end (showing your business logic)"}),"\n",(0,s.jsx)(o.li,{children:"You will have limited antispam capabilities (only basic honeypots and validations)"}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["The second popular pattern is using a single Cloud Page and changing displayed content depending on the request type thanks to SSJS ",(0,s.jsx)(o.code,{children:"Request.Method()"})," (GET outputs form view and POST shows thank you page). Unfortunately, all drawbacks (including the cost) are the same as each Cloud Page load (whether it is the same or different) costs 1 SuperMessage."]}),"\n",(0,s.jsx)(o.h4,{id:"good-form-backend-with-code-resource",children:"Good Form Backend with Code Resource"}),"\n",(0,s.jsxs)(o.p,{children:["Code Resources come to save the day (or at least your forms and license limits). Instead of hosting your data processing code on the second Cloud Page - put it on the JSON Code Resource and ",(0,s.jsx)(o.a,{href:"#generated-code-resources",children:"generate"})," responses. On the form page, add AJAX calls to the Code Resource for all required interactions:"]}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-js",metastring:'{10,39} title="JavaScript helper functions on the form Cloud Page"',children:"/**\n * @function request\n * @description AJAX handler for POST calls to Code Resource Backend\n * @param {Object} payload - request payload with at least action key\n */\nfunction request(payload) {\n return new Promise(function(resolve, reject) {\n const xhr = new XMLHttpRequest();\n xhr.timeout = 30 * 1000;\n xhr.open('POST', codeResourceBackendURL, true);\n xhr.setRequestHeader('Content-type', 'application/json');\n xhr.onload = () => {\n if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 400)) {\n resolve(JSON.parse(xhr.response))\n } else {\n reject(xhr.status)\n }\n }\n xhr.onerror = () => {\n if (debugging) console.log('Connection Error')\n }\n xhr.ontimeout = () => {\n if (debugging) console.log('Request Timed Out')\n };\n xhr.send(JSON.stringify(payload));\n })\n}\n\n/**\n * @function pushData\n * @description UI handler for POST calls to Code Resource Backend\n * @param {Object} payload - prequest payload with at least action key\n */\nasync function pushData(payload) {\n if (debugging) debugValue('Processing', payload);\n\n /* Make the request with the optional spinner overlay during load time */\n overlaySectionSpinner.classList.add('overlay__section-show');\n let response = await request(payload);\n overlaySectionSpinner.classList.remove('overlay__section-show');\n\n if (debugging) debugValue(`${payload.action} Response`, response);\n\n return response\n}\n"})}),"\n",(0,s.jsx)(o.p,{children:"With that code you can trigger calls in an easy and readable manner:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-js",metastring:'{1,5} title="Example of pushing data to backend"',children:"pushData({\n action: 'createLead',\n payload: formData,\n sourceName: '<ctrl:var name=sourceName />'\n}).then(response => {\n /* Display appropriate feedback overlay based on the response */\n if (response.Status === 'OK') {\n overlaySectionSuccess.classList.add('overlay__section-show');\n } else {\n overlaySectionError.classList.add('overlay__section-show');\n };\n});\n"})}),"\n",(0,s.jsx)(o.p,{children:"Finally, that data needs to be captured, processed and responded on the Code Resource:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-html",metastring:'{3,13,24,26} title="Example processing structure on the Code Resource"',children:"<script runat=\"server\">\n /* Get the Form Submission Data from JSON POST */\n var postedData = Platform.Request.GetPostData();\n\n /* Parse Stringified JSON back to Object */\n var parsedData = Platform.Function.ParseJSON(postedData);\n if (debugging) debugValue('parsedData', parsedData);\n\n /* Capture data from POST body */\n var action = parsedData.action;\n var payload = parsedData.payload;\n\n switch (action) {\n case 'validateEmail':\n /* Your Validation code */\n result = { Action: 'validateEmail', Status: isEmailValdiated }\n break;\n case 'createLead':\n /* Your Lead processing code */\n result = { Action: 'createLead', Status: isLeadCreated }\n break;\n };\n\n stringifiedResult = Stringify(result);\n<\/script>\n<ctrl:var name=stringifiedResult />\n"})}),"\n",(0,s.jsx)(o.p,{children:"With this approach, any interaction (like form submission) is inserted into an object along with optional metadata, pushed through AJAX asynchronously, loaded in the Code Resource and directed to the appropriate processing unit within a switch block. Once SFMC completes the processing, the response is saved into an object and outputted as a JSON. Then it comes back from Code Resource through AJAX to the frontend with the form."}),"\n",(0,s.jsx)(o.p,{children:"Whoa, that's a lot. So why choose all of this instead of the easy solution?"}),"\n",(0,s.jsx)(o.p,{children:"Let's start with the obvious drawback: it's more complex and harder to implement."}),"\n",(0,s.jsx)(o.p,{children:"There is, however, a prize for all that work:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"It's using asynchronous AJAX calls, so the user never leaves your form - better User Experience."}),"\n",(0,s.jsx)(o.li,{children:"It separates your front end and backend - you can leverage a single Code Resource for many different forms."}),"\n",(0,s.jsx)(o.li,{children:"It enables the full power of the backend - you can build dynamic form, full-blown validation, antispam and more, as everything can just make a hidden call in the back of your experience."}),"\n",(0,s.jsx)(o.li,{children:"It minimises cost - Code Resources are free, so no matter how many AJAX calls you make, there will be just 1 Supermessage cost for the initial load of the Form Cloud Page."}),"\n",(0,s.jsx)(o.li,{children:"Once you complete the complex implementation, it becomes portable and can be easily copy-pasted to all your forms with minimal changes."}),"\n",(0,s.jsx)(o.li,{children:"You can create a Code Resource on a different Business Unit than the Form Cloud Page allowing for the data being added in a different context (for example, centralised parent BU backend managing all child BU specific front ends)."}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"And then there is more! Code Resource is available not only for Cloud Pages - you can use precisely the same approach for any form hosted on your CMS or even within internal systems. As long as your front end can make an AJAX call, you can target your Code Resource and use Marketing Cloud power. Nifty solution for providing Triggered Sends for 3rd party forms without the need to implement SFMC API on external services."}),"\n",(0,s.jsx)(o.h4,{id:"more-ideas",children:"More ideas"}),"\n",(0,s.jsx)(o.p,{children:"Using Code Resource as a form backend is a practical and frequent use case, but it is not the only one. It's worth considering whenever you need a more complex interaction with the Marketing Cloud features or data model."}),"\n",(0,s.jsx)(o.p,{children:"Custom Preference Center backend, personalisation builder for external websites, lookup tool for internal sales or support tools, trigger for communication pushes. Sure, we can build many of those approaches with the official API. Still, leveraging Code Resources might allow you to create a wrapper that will wrangle the data before outputting it to an external system."}),"\n",(0,s.jsx)(o.h2,{id:"code-resource-security",children:"Code Resource Security"}),"\n",(0,s.jsx)(o.p,{children:"With great power comes great responsibility. Security should be a top priority whenever dealing with Code Resources, as after publishing, they are available for everyone with the link. There are a few ways to protect your data:"}),"\n",(0,s.jsx)(o.h3,{id:"security-through-obscurity",children:"Security through obscurity"}),"\n",(0,s.jsx)(o.p,{children:"The most obvious form of security is the obscurity of the solution. While standard static Code Resources are fully transparent, any programmatic part written in SSJS/AMPScript won't be accessible from outside the Marketing Cloud."}),"\n",(0,s.jsxs)(o.p,{children:["And you can leverage that fact to your advantage by using SSJS ",(0,s.jsx)(o.code,{children:"Request.Method()"})," to control output depending on the request type. For example, if you are creating a web form backend, you will only need to output something for POST calls, so you can catch GET method calls and output an empty page."]}),"\n",(0,s.jsxs)(o.p,{children:["Another layer you can apply is looking for specific elements within the payload. In the examples above, I used the ",(0,s.jsx)(o.code,{children:"action"})," key in the frontend payload and built a ",(0,s.jsx)(o.code,{children:"switch"})," block around it on the Code Resource. Thanks to it, you not only need to know the correct ",(0,s.jsx)(o.code,{children:"action"})," value, but even then, you will only see its specific response."]}),"\n",(0,s.jsx)(o.p,{children:"This level of protection might be acceptable for low-risk solutions (for example, dynamic CSS/JS or publicly available data structured for processing), but you should consider additional security for anything more critical."}),"\n",(0,s.jsx)(o.h3,{id:"allowlisting",children:"Allowlisting"}),"\n",(0,s.jsx)(o.p,{children:"Another option available in the security arsenal are three types of allowlists:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"Referer Allowlist"})," allows you to limit which pages can interact with the Code Resource by using either SSJS ",(0,s.jsx)(o.code,{children:"Platform.Request.ReferrerURL"})," or AMPScript ",(0,s.jsx)(o.code,{children:"HTTPRequestHeader('Referer')"})," to check the URL."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"IP Allowlist"})," enables simillar feature, but checks IP address instead of URL with the help of SSJS ",(0,s.jsx)(o.code,{children:"Platform.Request.ClientIP()"})," or AMPScript ",(0,s.jsx)(o.code,{children:"HTTPRequestHeader('X-Forwarded-For')"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"Cookie Allowlist"})," let's you validate cookies created on previous step with SSJS ",(0,s.jsx)(o.code,{children:"Platform.Request.GetCookieValue('CookieName')"}),"."]}),"\n"]}),"\n",(0,s.jsx)(o.h3,{id:"de-lookup",children:"DE Lookup"}),"\n",(0,s.jsx)(o.p,{children:"If the request comes from Marketing Cloud controlled resource (Cloud Page, Email, another Code Resource), you can also leverage Data Extension for even more strict security. Insert some data into the Data Extension in the first step of the process and validate it with Lookup against the payload content within the Code Resource."}),"\n",(0,s.jsx)(o.h3,{id:"sso",children:"SSO"}),"\n",(0,s.jsxs)(o.p,{children:["Finally, if the Code Resource is part of your internal solution created only for Marketing Cloud users, you may leverage full-blown SSO to make it as secure as the whole platform. Read more on that approach in the ",(0,s.jsx)(o.a,{href:"/docs/ssjs/snippets/sfmc-cloud-page-apps#a-good-application-is-a-secure-application",children:"Cloud Page Apps article"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"examples",children:"Examples"}),"\n",(0,s.jsx)(o.p,{children:"With the flexibility of Code Resources, the sky is the limit for compelling use cases. Here, I want to share a few of my favourite ones to show you what can be done with this fantastic tool:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Protect your Cloud Page Forms from spambots with ",(0,s.jsx)(o.a,{href:"https://ampscript.xyz/how-tos/how-to-implement-google-recaptcha-on-marketing-cloud-forms/",children:"Google reCaptcha v2"})," and ",(0,s.jsx)(o.a,{href:"https://ampscript.xyz/how-tos/how-to-add-recaptcha-v3-to-your-forms-in-salesforce-marketing-cloud/",children:"v3"})," by ",(0,s.jsx)(o.a,{href:"https://www.linkedin.com/in/ivanrazine/",children:"Ivan Razine"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Run ",(0,s.jsx)(o.a,{href:"https://www.linkedin.com/pulse/ssjs-journey-builder-sascha-huwald/",children:"SSJS within a Journey Activity"})," by ",(0,s.jsx)(o.a,{href:"https://www.linkedin.com/in/sascha-huwald/",children:"Sascha Huwald"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Create a ",(0,s.jsx)(o.a,{href:"https://sfmr.dev/ideas/sfmc/tools/data-extension-search-engine",children:"custom Chrome search engine that can find and directly open SFMC Data Extensions right from your URL bar"})," by ",(0,s.jsx)(o.a,{href:"https://www.linkedin.com/in/michalrzepka90/",children:"Micha\u0142 Rzepka"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Create ",(0,s.jsx)(o.a,{href:"https://youtu.be/8gESkxxXJ7A",children:"Data Extension Search Engine in your Slack"})," by ",(0,s.jsx)(o.a,{href:"https://www.linkedin.com/in/camrobert/",children:"Cam Robert"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Build ",(0,s.jsx)(o.a,{href:"/docs/ssjs/snippets/sfmc-cloud-page-apps",children:"Cloud Page Apps"})," to make your and your team lives easier."]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"Know other inspiring Code Resource use cases? Let me know!"}),"\n",(0,s.jsx)(o.h2,{id:"learn-more",children:"Learn more"}),"\n",(0,s.jsx)(o.p,{children:"Looking for more? Check out follow up materials for added context and deeper dive:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Webinar recording on ",(0,s.jsx)(o.a,{href:"/docs/webinars/sfmc-webinar-architecting-web-solutions",children:"Architecting Web Solutions in SFMC"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Webinar recording on ",(0,s.jsx)(o.a,{href:"/docs/webinars/sfmc-webinar-cloud-page-apps",children:"Cloud Page Apps"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,o,t)=>{t.d(o,{m:()=>a});t(7294);const s="leadText_qzwo";var n=t(5893);const a=e=>{let{content:o}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:s,children:o})})}},1151:(e,o,t)=>{t.d(o,{Z:()=>i,a:()=>r});var s=t(7294);const n={},a=s.createContext(n);function r(e){const o=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a8b77297.98a212dc.js b/assets/js/a8b77297.98a212dc.js deleted file mode 100644 index 4242392cb..000000000 --- a/assets/js/a8b77297.98a212dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[952],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,o,n=function(e,t){if(null==e)return{};var a,o,n={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=o.createContext({}),c=function(e){var t=o.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},u=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=c(a),h=n,m=d["".concat(l,".").concat(h)]||d[h]||p[h]||r;return a?o.createElement(m,s(s({ref:t},u),{},{components:a})):o.createElement(m,s({ref:t},u))}));function m(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,s=new Array(r);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:n,s[1]=i;for(var c=2;c<r;c++)s[c]=a[c];return o.createElement.apply(null,s)}return o.createElement.apply(null,a)}h.displayName="MDXCreateElement"},1872:(e,t,a)=>{a.d(t,{m:()=>r});var o=a(7294);const n="leadText_qzwo",r=e=>{let{content:t}=e;return o.createElement(o.Fragment,null,o.createElement("p",{id:n},t))}},3325:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var o=a(7462),n=(a(7294),a(4137)),r=a(1872);const s={id:"sfmc-code-resource",title:"SFMC Code Resource",sidebar_label:"Power of Code Resources",description:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",image:"img/og/og-image-sfmc-code-resources.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},i=void 0,l={unversionedId:"config/sfmc-code-resource",id:"config/sfmc-code-resource",title:"SFMC Code Resource",description:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",source:"@site/docs/config/sfmc-code-resource.mdx",sourceDirName:"config",slug:"/config/sfmc-code-resource",permalink:"/docs/config/sfmc-code-resource",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-code-resource.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"App",permalink:"/docs/tags/app"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1679320846,formattedLastUpdatedAt:"Mar 20, 2023",frontMatter:{id:"sfmc-code-resource",title:"SFMC Code Resource",sidebar_label:"Power of Code Resources",description:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",image:"img/og/og-image-sfmc-code-resources.png",tags:["Marketing Cloud","SSJS","AMPScript","Snippet","Cloud Page","App"]},sidebar:"docs",previous:{title:"MCC Integration Patterns",permalink:"/docs/config/sfmc-mcc-integration-patterns"},next:{title:"Contact Deletion Process",permalink:"/docs/config/sfmc-contact-deletion"}},c={},u=[{value:"What are the Code Resources?",id:"what-are-the-code-resources",level:2},{value:"Code Resource Use Cases",id:"code-resource-use-cases",level:2},{value:"Code Resource Basics",id:"code-resource-basics",level:3},{value:"Code Resource Fun Things",id:"code-resource-fun-things",level:3},{value:"Dynamic Code Resources",id:"dynamic-code-resources",level:4},{value:"Personalised Code Resources",id:"personalised-code-resources",level:4},{value:"Generated Code Resources",id:"generated-code-resources",level:4},{value:"Code Resource Backends",id:"code-resource-backends",level:3},{value:"Easy Form Backend with Cloud Page",id:"easy-form-backend-with-cloud-page",level:4},{value:"Good Form Backend with Code Resource",id:"good-form-backend-with-code-resource",level:4},{value:"More ideas",id:"more-ideas",level:4},{value:"Code Resource Security",id:"code-resource-security",level:2},{value:"Security through obscurity",id:"security-through-obscurity",level:3},{value:"Allowlisting",id:"allowlisting",level:3},{value:"DE Lookup",id:"de-lookup",level:3},{value:"SSO",id:"sso",level:3},{value:"Examples",id:"examples",level:2},{value:"Learn more",id:"learn-more",level:2}],d={toc:u},p="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(r.m,{content:"Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.",mdxType:"LeadText"}),(0,n.kt)("h2",{id:"what-are-the-code-resources"},"What are the Code Resources?"),(0,n.kt)("p",null,"Code Resources in Salesforce Marketing Cloud are a solution for hosting JavaScript, CSS, JSON, RSS, Text and XML files within your account."),(0,n.kt)("p",null,"They were part of the legacy Classic CloudPages. However, their features and usefulness allowed them to survive sunsetting and thrive in the Web Studio. With ",(0,n.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=sf.mc_rn_2022_spring_cloud_pages_classic_editor_migrated_to_content_builder.htm&type=5"},"Spring '22 Release"),", they got a new home in Content Builder and live along with Content Blocks."),(0,n.kt)("p",null,"Why use Code Resources when we have new CloudPages in Web Studio and Code Content Blocks in Content Builder? Unique set of features makes Code Resources irreplaceable:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Unlike Content Blocks, Code Resources have their ",(0,n.kt)("strong",{parentName:"li"},"own URL"),". It means that they are not just a building block but can work alone as a web asset. It also means that they can be linked and API called as any other website."),(0,n.kt)("li",{parentName:"ul"},"Unlike Cloud Pages, Code Resources have ",(0,n.kt)("strong",{parentName:"li"},"no HTML structures appended automatically")," by Marketing Cloud. It allows you to have complete control over what is returned by the Code Resource."),(0,n.kt)("li",{parentName:"ul"},"Unlike externally hosted files, you can leverage SFMC programmatic solutions - ",(0,n.kt)("strong",{parentName:"li"},"SSJS and AMPScript")," - to provide a backend logic to your Code Resources."),(0,n.kt)("li",{parentName:"ul"},"Finally, unlike Cloud Pages, there is ",(0,n.kt)("strong",{parentName:"li"},"no cost")," associated with loading a Code Resource.")),(0,n.kt)("p",null,"That combination makes Code Resources perfect for multiple use cases - from basic to complex ones. Let's see some examples."),(0,n.kt)("h2",{id:"code-resource-use-cases"},"Code Resource Use Cases"),(0,n.kt)("h3",{id:"code-resource-basics"},"Code Resource Basics"),(0,n.kt)("p",null,"The most obvious use case is hosting shared CSS and JavaScript, just as you would on a CMS. It works great - you can paste your stylesheet or scripts and import it the standard way to your Cloud Pages benefitting from storing all assets on the same server:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="JS & CSS imports from Code Resources - the URLs will follow your Marketing Cloud configuration"',title:'"JS',"&":!0,CSS:!0,imports:!0,from:!0,Code:!0,Resources:!0,"-":!0,the:!0,URLs:!0,will:!0,follow:!0,your:!0,Marketing:!0,Cloud:!0,'configuration"':!0},'<link rel="stylesheet" type="text/css" href="https://code-resource.sfmc.com/my-css" />\n<script src="https://code-resource.sfmc.com/my-js"><\/script>\n')),(0,n.kt)("p",null,"Similarly, you can store complex data structures in JSON or XML files to leverage them later with SSJS or AMPScript/GTL. It can be a better solution for deep immutable structures than Data Extensions."),(0,n.kt)("p",null,"As practical as it is, this approach does not showcase the true strength of the Code Resources, so let's check something more interesting."),(0,n.kt)("h3",{id:"code-resource-fun-things"},"Code Resource Fun Things"),(0,n.kt)("p",null,"The real power comes with using Salesforce Marketing Cloud programmatic languages - AMPScript and SSJS. Those two allow you to execute logic on the backend and impact the front-facing outcome on the Code Resource. It enables some powerful use cases."),(0,n.kt)("h4",{id:"dynamic-code-resources"},"Dynamic Code Resources"),(0,n.kt)("p",null,"For example, you cannot host fonts in Marketing Cloud. But, you can encode them to base64 and, in that format, add them to your CSS Code Resource."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-css",metastring:'title="Web Font in CSS Code Resource" {1,4}',title:'"Web',Font:!0,in:!0,CSS:!0,Code:!0,'Resource"':!0,"{1,4}":!0},'%%[ SET @SalesforceSansRegular = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..." ]%%\n@font-face {\n font-family: "Salesforce Sans";\n src: url(data:font/ttf;base64,%%=v(@SalesforceSansRegular)=%%) format(\'truetype\');\n font-weight: 400;\n font-display: swap;\n}\n')),(0,n.kt)("p",null,"What if you need a different font depending on the market to cover various alphabets? Adding all of them to your CSS is not a good idea from the performance point of view. However, you can leverage the power of SFMC programmatic languages to load only the required font. How? By requesting the specific font using a query parameter:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="CSS Import with query parameter on the frontend"',title:'"CSS',Import:!0,with:!0,query:!0,parameter:!0,on:!0,the:!0,'frontend"':!0},'<link rel="stylesheet" type="text/css" href="https://coderesource.sfmc.com/my-css?font=salesforce-sans" />\n')),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-css",metastring:'{2-3} title="Dynamic Stylesheet on the backend"',"{2-3}":!0,title:'"Dynamic',Stylesheet:!0,on:!0,the:!0,'backend"':!0},'%%[\n SET @FontSelected = RequestParameter("font")\n IF @FontSelected == "salesforce-sans" THEN\n SET @FontName = "Salesforce Sans"\n SET @FontInBase64 = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..."\n ELSE\n SET @FontName = "Different Font"\n SET @FontInBase64 = "AAAEEMDJJEkdEDKEJ849DJEHD33DJslsAAAA3EKFEK03..."\n ENDIF\n]%%\n@font-face {\n font-family: "%%=v(@FontName)=%%";\n src: url(data:font/ttf;base64,%%=v(@FontInBase64)=%%) format(\'truetype\');\n font-weight: 400;\n font-display: swap;\n}\n')),(0,n.kt)("h4",{id:"personalised-code-resources"},"Personalised Code Resources"),(0,n.kt)("p",null,"Making your CSS or JS dynamic is just the beginning. Code Resources lets you leverage the Marketing Cloud Data Model. With SSJS and AMPScript, you can make Lookups and use other functions to adapt the outcome to a specific subscriber."),(0,n.kt)("p",null,"It is handy when you want to hide the business logic from the competition. For example, you might have a script for a web form that calculates rates based on loyalty status, purchases and LTV. You don't have to share your logic in an accessible JavaScript - you can Lookup required data for each subscriber with SSJS and calculate everything on the server side - outputting only the final multipliers to your JS Code Resource."),(0,n.kt)("p",null,"You can even perform API calls with SSJS or AMPScript to external systems to securely take advantage of their data. That can be especially useful when working with JSON Code Resources that can hold whole data structures used for the presentation layer on the Cloud Page."),(0,n.kt)("h4",{id:"generated-code-resources"},"Generated Code Resources"),(0,n.kt)("p",null,"JSON Code Resources are where the real magic happens. They pair beautifully with SSJS and allow us to generate whole outputs from scratch with a nifty combination of SSJS object, ",(0,n.kt)("inlineCode",{parentName:"p"},"Stringify()")," function and ",(0,n.kt)("inlineCode",{parentName:"p"},"<ctrl:var name=string />")," personalisation string. Yeah, you can have no line of JSON in your JSON Code Resource and still use it to its fullest potential. Let's dive into details."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'{3,5} title="Make a JSON from generated data"',"{3,5}":!0,title:'"Make',a:!0,JSON:!0,from:!0,generated:!0,'data"':!0},"<script runat=\"server\">\n (...)\n var stringifiedResult = Stringify({ 'created': createdAssets, 'deleted': deletedAssets });\n<\/script>\n<ctrl:var name=stringifiedResult />\n")),(0,n.kt)("p",null,"As you can see above, there is no line of JSON, but the Code Resource will output a proper JSON. How?"),(0,n.kt)("p",null,"Once Marketing Cloud executes SSJS and AMPScript on the backend, it removes that code from the output. However, you can push some data to the frontend with a personalisation string. If that data is an SSJS object, you can convert it to proper JSON with ",(0,n.kt)("inlineCode",{parentName:"p"},"Stringify()"),"."),(0,n.kt)("p",null,"This trick enables many different use cases that make Code Resources shine:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"AMPScript and ",(0,n.kt)("a",{parentName:"li",href:"/docs/ssjs/debugging-ssjs"},"SSJS debugging")," - there are many places where you might want to use SFMC programmatic languages. Most of them either doesn't allow for easy debugging or drive SuperMessages costs. Code Resources are free and allow you to output error descriptions."),(0,n.kt)("li",{parentName:"ol"},"Deploying, cleaning and retrieving scripts - in many situations doing things through SFMC User Interface is not the best option. Deploying dozens of Data Extensions on multiple business units, cleaning hundreds of archival images or pulling assets JSON for version control. We can cover all those use cases with a script that can do the work in a fraction of the time needed for a manual approach. Then, some things cannot be done through UI at all (like targeting AutoSuppression List with Query Activity). Code Resource again will allow you to write, test and run such solutions. For free."),(0,n.kt)("li",{parentName:"ol"},"Creating custom mini backends - that use case deserves a separate section ;)")),(0,n.kt)("h3",{id:"code-resource-backends"},"Code Resource Backends"),(0,n.kt)("p",null,"Code Resources can do so much more than just serve some content. Thanks to the Salesforce Marketing Cloud programmatic languages, they can become a dedicated backend for various solutions."),(0,n.kt)("p",null,"The most popular use case for SFMC's Web Studio is a Cloud Page with a form (for leads, data capture, preference management or whitepaper download). As far as creating the form is a relatively simple task with the modern HTML, the complex part is capturing the submitted data and saving it into the Data Extension."),(0,n.kt)("h4",{id:"easy-form-backend-with-cloud-page"},"Easy Form Backend with Cloud Page"),(0,n.kt)("p",null,"The most basic solution utilised two Cloud Pages. One contains the form, while the other contains the data capture logic and displays the thank you page. This approach is straightforward, as you can create a standard HTML form with action pointing to the second Cloud Page, and the modern web standards will do most of the work automatically. You are just left with the need to capture submitted data with SSJS ",(0,n.kt)("inlineCode",{parentName:"p"},"Request.GetFormField()")," or AMPScript ",(0,n.kt)("inlineCode",{parentName:"p"},"RequestParameter()")," and push it to a DataExtension."),(0,n.kt)("p",null,"This approach, while easy to implement, has many drawbacks:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Submission redirects to another page - it takes time and creates suboptimal User Experience"),(0,n.kt)("li",{parentName:"ul"},"You can create only limited (frontend JS-based) validation - if you need some checks against the SFMC data, that needs to happen after submission on the second Cloud Page. And if the validation fails, the user will be redirected back to the form page (in many cases, losing the data submitted in the form)."),(0,n.kt)("li",{parentName:"ul"},"As each Cloud Page load costs a SuperMessage, this solution will require 2 in the best scenario - and more if there is a validation fail on the thank you page"),(0,n.kt)("li",{parentName:"ul"},"If you want to make your form dynamic, you need to have all required data in the front end (showing your business logic)"),(0,n.kt)("li",{parentName:"ul"},"You will have limited antispam capabilities (only basic honeypots and validations)")),(0,n.kt)("p",null,"The second popular pattern is using a single Cloud Page and changing displayed content depending on the request type thanks to SSJS ",(0,n.kt)("inlineCode",{parentName:"p"},"Request.Method()")," (GET outputs form view and POST shows thank you page). Unfortunately, all drawbacks (including the cost) are the same as each Cloud Page load (whether it is the same or different) costs 1 SuperMessage."),(0,n.kt)("h4",{id:"good-form-backend-with-code-resource"},"Good Form Backend with Code Resource"),(0,n.kt)("p",null,"Code Resources come to save the day (or at least your forms and license limits). Instead of hosting your data processing code on the second Cloud Page - put it on the JSON Code Resource and ",(0,n.kt)("a",{parentName:"p",href:"#generated-code-resources"},"generate")," responses. On the form page, add AJAX calls to the Code Resource for all required interactions:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'{10,39} title="JavaScript helper functions on the form Cloud Page"',"{10,39}":!0,title:'"JavaScript',helper:!0,functions:!0,on:!0,the:!0,form:!0,Cloud:!0,'Page"':!0},"/**\n * @function request\n * @description AJAX handler for POST calls to Code Resource Backend\n * @param {Object} payload - request payload with at least action key\n */\nfunction request(payload) {\n return new Promise(function(resolve, reject) {\n const xhr = new XMLHttpRequest();\n xhr.timeout = 30 * 1000;\n xhr.open('POST', codeResourceBackendURL, true);\n xhr.setRequestHeader('Content-type', 'application/json');\n xhr.onload = () => {\n if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 400)) {\n resolve(JSON.parse(xhr.response))\n } else {\n reject(xhr.status)\n }\n }\n xhr.onerror = () => {\n if (debugging) console.log('Connection Error')\n }\n xhr.ontimeout = () => {\n if (debugging) console.log('Request Timed Out')\n };\n xhr.send(JSON.stringify(payload));\n })\n}\n\n/**\n * @function pushData\n * @description UI handler for POST calls to Code Resource Backend\n * @param {Object} payload - prequest payload with at least action key\n */\nasync function pushData(payload) {\n if (debugging) debugValue('Processing', payload);\n\n /* Make the request with the optional spinner overlay during load time */\n overlaySectionSpinner.classList.add('overlay__section-show');\n let response = await request(payload);\n overlaySectionSpinner.classList.remove('overlay__section-show');\n\n if (debugging) debugValue(`${payload.action} Response`, response);\n\n return response\n}\n")),(0,n.kt)("p",null,"With that code you can trigger calls in an easy and readable manner:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1,5} title="Example of pushing data to backend"',"{1,5}":!0,title:'"Example',of:!0,pushing:!0,data:!0,to:!0,'backend"':!0},"pushData({\n action: 'createLead',\n payload: formData,\n sourceName: '<ctrl:var name=sourceName />'\n}).then(response => {\n /* Display appropriate feedback overlay based on the response */\n if (response.Status === 'OK') {\n overlaySectionSuccess.classList.add('overlay__section-show');\n } else {\n overlaySectionError.classList.add('overlay__section-show');\n };\n});\n")),(0,n.kt)("p",null,"Finally, that data needs to be captured, processed and responded on the Code Resource:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'{3,13,24,26} title="Example processing structure on the Code Resource"',"{3,13,24,26}":!0,title:'"Example',processing:!0,structure:!0,on:!0,the:!0,Code:!0,'Resource"':!0},"<script runat=\"server\">\n /* Get the Form Submission Data from JSON POST */\n var postedData = Platform.Request.GetPostData();\n\n /* Parse Stringified JSON back to Object */\n var parsedData = Platform.Function.ParseJSON(postedData);\n if (debugging) debugValue('parsedData', parsedData);\n\n /* Capture data from POST body */\n var action = parsedData.action;\n var payload = parsedData.payload;\n\n switch (action) {\n case 'validateEmail':\n /* Your Validation code */\n result = { Action: 'validateEmail', Status: isEmailValdiated }\n break;\n case 'createLead':\n /* Your Lead processing code */\n result = { Action: 'createLead', Status: isLeadCreated }\n break;\n };\n\n stringifiedResult = Stringify(result);\n<\/script>\n<ctrl:var name=stringifiedResult />\n")),(0,n.kt)("p",null,"With this approach, any interaction (like form submission) is inserted into an object along with optional metadata, pushed through AJAX asynchronously, loaded in the Code Resource and directed to the appropriate processing unit within a switch block. Once SFMC completes the processing, the response is saved into an object and outputted as a JSON. Then it comes back from Code Resource through AJAX to the frontend with the form."),(0,n.kt)("p",null,"Whoa, that's a lot. So why choose all of this instead of the easy solution?"),(0,n.kt)("p",null,"Let's start with the obvious drawback: it's more complex and harder to implement."),(0,n.kt)("p",null,"There is, however, a prize for all that work:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"It's using asynchronous AJAX calls, so the user never leaves your form - better User Experience."),(0,n.kt)("li",{parentName:"ul"},"It separates your front end and backend - you can leverage a single Code Resource for many different forms."),(0,n.kt)("li",{parentName:"ul"},"It enables the full power of the backend - you can build dynamic form, full-blown validation, antispam and more, as everything can just make a hidden call in the back of your experience."),(0,n.kt)("li",{parentName:"ul"},"It minimises cost - Code Resources are free, so no matter how many AJAX calls you make, there will be just 1 Supermessage cost for the initial load of the Form Cloud Page."),(0,n.kt)("li",{parentName:"ul"},"Once you complete the complex implementation, it becomes portable and can be easily copy-pasted to all your forms with minimal changes."),(0,n.kt)("li",{parentName:"ul"},"You can create a Code Resource on a different Business Unit than the Form Cloud Page allowing for the data being added in a different context (for example, centralised parent BU backend managing all child BU specific front ends).")),(0,n.kt)("p",null,"And then there is more! Code Resource is available not only for Cloud Pages - you can use precisely the same approach for any form hosted on your CMS or even within internal systems. As long as your front end can make an AJAX call, you can target your Code Resource and use Marketing Cloud power. Nifty solution for providing Triggered Sends for 3rd party forms without the need to implement SFMC API on external services."),(0,n.kt)("h4",{id:"more-ideas"},"More ideas"),(0,n.kt)("p",null,"Using Code Resource as a form backend is a practical and frequent use case, but it is not the only one. It's worth considering whenever you need a more complex interaction with the Marketing Cloud features or data model."),(0,n.kt)("p",null,"Custom Preference Center backend, personalisation builder for external websites, lookup tool for internal sales or support tools, trigger for communication pushes. Sure, we can build many of those approaches with the official API. Still, leveraging Code Resources might allow you to create a wrapper that will wrangle the data before outputting it to an external system."),(0,n.kt)("h2",{id:"code-resource-security"},"Code Resource Security"),(0,n.kt)("p",null,"With great power comes great responsibility. Security should be a top priority whenever dealing with Code Resources, as after publishing, they are available for everyone with the link. There are a few ways to protect your data:"),(0,n.kt)("h3",{id:"security-through-obscurity"},"Security through obscurity"),(0,n.kt)("p",null,"The most obvious form of security is the obscurity of the solution. While standard static Code Resources are fully transparent, any programmatic part written in SSJS/AMPScript won't be accessible from outside the Marketing Cloud."),(0,n.kt)("p",null,"And you can leverage that fact to your advantage by using SSJS ",(0,n.kt)("inlineCode",{parentName:"p"},"Request.Method()")," to control output depending on the request type. For example, if you are creating a web form backend, you will only need to output something for POST calls, so you can catch GET method calls and output an empty page."),(0,n.kt)("p",null,"Another layer you can apply is looking for specific elements within the payload. In the examples above, I used the ",(0,n.kt)("inlineCode",{parentName:"p"},"action")," key in the frontend payload and built a ",(0,n.kt)("inlineCode",{parentName:"p"},"switch")," block around it on the Code Resource. Thanks to it, you not only need to know the correct ",(0,n.kt)("inlineCode",{parentName:"p"},"action")," value, but even then, you will only see its specific response."),(0,n.kt)("p",null,"This level of protection might be acceptable for low-risk solutions (for example, dynamic CSS/JS or publicly available data structured for processing), but you should consider additional security for anything more critical."),(0,n.kt)("h3",{id:"allowlisting"},"Allowlisting"),(0,n.kt)("p",null,"Another option available in the security arsenal are three types of allowlists:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Referer Allowlist")," allows you to limit which pages can interact with the Code Resource by using either SSJS ",(0,n.kt)("inlineCode",{parentName:"li"},"Platform.Request.ReferrerURL")," or AMPScript ",(0,n.kt)("inlineCode",{parentName:"li"},"HTTPRequestHeader('Referer')")," to check the URL."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"IP Allowlist")," enables simillar feature, but checks IP address instead of URL with the help of SSJS ",(0,n.kt)("inlineCode",{parentName:"li"},"Platform.Request.ClientIP()")," or AMPScript ",(0,n.kt)("inlineCode",{parentName:"li"},"HTTPRequestHeader('X-Forwarded-For')"),"."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Cookie Allowlist")," let's you validate cookies created on previous step with SSJS ",(0,n.kt)("inlineCode",{parentName:"li"},"Platform.Request.GetCookieValue('CookieName')"),".")),(0,n.kt)("h3",{id:"de-lookup"},"DE Lookup"),(0,n.kt)("p",null,"If the request comes from Marketing Cloud controlled resource (Cloud Page, Email, another Code Resource), you can also leverage Data Extension for even more strict security. Insert some data into the Data Extension in the first step of the process and validate it with Lookup against the payload content within the Code Resource."),(0,n.kt)("h3",{id:"sso"},"SSO"),(0,n.kt)("p",null,"Finally, if the Code Resource is part of your internal solution created only for Marketing Cloud users, you may leverage full-blown SSO to make it as secure as the whole platform. Read more on that approach in the ",(0,n.kt)("a",{parentName:"p",href:"/docs/ssjs/snippets/sfmc-cloud-page-apps#a-good-application-is-a-secure-application"},"Cloud Page Apps article"),"."),(0,n.kt)("h2",{id:"examples"},"Examples"),(0,n.kt)("p",null,"With the flexibility of Code Resources, the sky is the limit for compelling use cases. Here, I want to share a few of my favourite ones to show you what can be done with this fantastic tool:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Protect your Cloud Page Forms from spambots with ",(0,n.kt)("a",{parentName:"li",href:"https://ampscript.xyz/how-tos/how-to-implement-google-recaptcha-on-marketing-cloud-forms/"},"Google reCaptcha v2")," and ",(0,n.kt)("a",{parentName:"li",href:"https://ampscript.xyz/how-tos/how-to-add-recaptcha-v3-to-your-forms-in-salesforce-marketing-cloud/"},"v3")," by ",(0,n.kt)("a",{parentName:"li",href:"https://www.linkedin.com/in/ivanrazine/"},"Ivan Razine"),"."),(0,n.kt)("li",{parentName:"ol"},"Run ",(0,n.kt)("a",{parentName:"li",href:"https://www.linkedin.com/pulse/ssjs-journey-builder-sascha-huwald/"},"SSJS within a Journey Activity")," by ",(0,n.kt)("a",{parentName:"li",href:"https://www.linkedin.com/in/sascha-huwald/"},"Sascha Huwald"),"."),(0,n.kt)("li",{parentName:"ol"},"Create a ",(0,n.kt)("a",{parentName:"li",href:"https://sfmr.dev/ideas/sfmc/tools/data-extension-search-engine"},"custom Chrome search engine that can find and directly open SFMC Data Extensions right from your URL bar")," by ",(0,n.kt)("a",{parentName:"li",href:"https://www.linkedin.com/in/michalrzepka90/"},"Micha\u0142 Rzepka"),"."),(0,n.kt)("li",{parentName:"ol"},"Create ",(0,n.kt)("a",{parentName:"li",href:"https://youtu.be/8gESkxxXJ7A"},"Data Extension Search Engine in your Slack")," by ",(0,n.kt)("a",{parentName:"li",href:"https://www.linkedin.com/in/camrobert/"},"Cam Robert"),"."),(0,n.kt)("li",{parentName:"ol"},"Build ",(0,n.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/sfmc-cloud-page-apps"},"Cloud Page Apps")," to make your and your team lives easier.")),(0,n.kt)("p",null,"Know other inspiring Code Resource use cases? Let me know!"),(0,n.kt)("h2",{id:"learn-more"},"Learn more"),(0,n.kt)("p",null,"Looking for more? Check out follow up materials for added context and deeper dive:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Webinar recording on ",(0,n.kt)("a",{parentName:"li",href:"/docs/webinars/sfmc-webinar-architecting-web-solutions"},"Architecting Web Solutions in SFMC"),"."),(0,n.kt)("li",{parentName:"ol"},"Webinar recording on ",(0,n.kt)("a",{parentName:"li",href:"/docs/webinars/sfmc-webinar-cloud-page-apps"},"Cloud Page Apps"),".")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.010027ee.js b/assets/js/a94703ab.010027ee.js new file mode 100644 index 000000000..eea8dc69e --- /dev/null +++ b/assets/js/a94703ab.010027ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4368],{3699:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(512),i=n(9488),s=n(3702),l=n(8259),r=n(4432),c=n(7325),d=n(2957),u=n(3266);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(8986),x=n(6550),f=n(3488),j=n(107),k=n(6811);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(5830),S=n(3768);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(4639),Z=n(9003),A=n(4791),L=n(1048);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(2735),H=n(4082);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(3086),X=n(735);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5737);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5737:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(512),o=n(7325),i=n(3899),s=n(5893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{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."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/aeba84fb.db0b222d.js b/assets/js/aeba84fb.db0b222d.js deleted file mode 100644 index d092cd6b0..000000000 --- a/assets/js/aeba84fb.db0b222d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5354],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,h=p["".concat(s,".").concat(m)]||p[m]||d[m]||i;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,l=new Array(i);l[0]=m;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[p]="string"==typeof e?e:o,l[1]=r;for(var u=2;u<i;u++)l[u]=n[u];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},425:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7294),o=n(6010);const i={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:n,className:l}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(i.tabItem,l),hidden:n},t)}},3992:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7462),o=n(7294),i=n(6010),l=n(2957),r=n(6550),s=n(5238),u=n(3609),c=n(2560);function p(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function d(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,r.k6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(i),(0,o.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(a.location.search);t.set(i,e),a.replace({...a.location,search:t.toString()})}),[i,a])]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,i=d(e),[l,r]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:i}))),[s,u]=h({queryString:n,groupId:a}),[p,g]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,i]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:a}),f=(()=>{const e=s??p;return m({value:e,tabValues:i})?e:null})();(0,o.useLayoutEffect)((()=>{f&&r(f)}),[f]);return{selectedValue:l,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);r(e),u(e),g(e)}),[u,g,i]),tabValues:i}}var f=n(1048);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(e){let{className:t,block:n,selectedValue:r,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,l.o5)(),d=e=>{const t=e.currentTarget,n=c.indexOf(t),a=u[n].value;a!==r&&(p(t),s(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:l}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,key:t,ref:e=>c.push(e),onKeyDown:m,onClick:d},l,{className:(0,i.Z)("tabs__item",y.tabItem,l?.className,{"tabs__item--active":r===t})}),n??t)})))}function k(e){let{lazy:t,children:n,selectedValue:a}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function v(e){const t=g(e);return o.createElement("div",{className:(0,i.Z)("tabs-container",y.tabList)},o.createElement(b,(0,a.Z)({},e,t)),o.createElement(k,(0,a.Z)({},e,t)))}function w(e){const t=(0,f.Z)();return o.createElement(v,(0,a.Z)({key:String(t)},e))}},1872:(e,t,n)=>{n.d(t,{m:()=>i});var a=n(7294);const o="leadText_qzwo",i=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:o},t))}},4756:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>g,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=n(7462),o=(n(7294),n(4137)),i=n(3992),l=n(425),r=n(1872);const s={id:"zen-of-sfmc",title:"Zen of SFMC",description:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",image:"img/og/og-image-zen-of-sfmc.png",tags:["Marketing Cloud","Best Practice"],toc_max_heading_level:4},u=void 0,c={unversionedId:"zen-of-sfmc",id:"zen-of-sfmc",title:"Zen of SFMC",description:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",source:"@site/docs/zen-of-sfmc.mdx",sourceDirName:".",slug:"/zen-of-sfmc",permalink:"/docs/zen-of-sfmc",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/zen-of-sfmc.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1673650734,formattedLastUpdatedAt:"Jan 13, 2023",frontMatter:{id:"zen-of-sfmc",title:"Zen of SFMC",description:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",image:"img/og/og-image-zen-of-sfmc.png",tags:["Marketing Cloud","Best Practice"],toc_max_heading_level:4},sidebar:"docs",next:{title:"SSJS",permalink:"/docs/category/ssjs"}},p={},d=[{value:"Zen of SFMC",id:"zen-of-sfmc",level:2},{value:"Thoughts on Zen",id:"thoughts-on-zen",level:2},{value:"Beautiful is better than ugly.",id:"beautiful-is-better-than-ugly",level:3},{value:"Explicit is better than implicit.",id:"explicit-is-better-than-implicit",level:3},{value:"Simple is better than complex.",id:"simple-is-better-than-complex",level:3},{value:"KISS",id:"kiss",level:4},{value:"YAGNI",id:"yagni",level:4},{value:"Complex is better than complicated.",id:"complex-is-better-than-complicated",level:3},{value:"SOC",id:"soc",level:4},{value:"DRY",id:"dry",level:4},{value:"Flat is better than nested. Sparse is better than dense.",id:"flat-is-better-than-nested-sparse-is-better-than-dense",level:3},{value:"Readability counts.",id:"readability-counts",level:3},{value:"Naming conventions count twice.",id:"naming-conventions-count-twice",level:3},{value:"Special cases aren't special enough to break the rules. Although practicality beats purity.",id:"special-cases-arent-special-enough-to-break-the-rules-although-practicality-beats-purity",level:3},{value:"Errors should never pass silently. Unless explicitly silenced.",id:"errors-should-never-pass-silently-unless-explicitly-silenced",level:3},{value:"In the face of ambiguity, refuse the temptation to guess. Even when certain, test.",id:"in-the-face-of-ambiguity-refuse-the-temptation-to-guess-even-when-certain-test",level:3},{value:"Now is better than never. Although never is often better than right now.",id:"now-is-better-than-never-although-never-is-often-better-than-right-now",level:3},{value:"If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea.",id:"if-the-implementation-is-hard-to-explain-its-a-bad-idea-if-the-implementation-is-easy-to-explain-it-may-be-a-good-idea",level:3},{value:"Documentation is one honking great idea - let's do more of it!",id:"documentation-is-one-honking-great-idea---lets-do-more-of-it",level:3},{value:"Sum Up",id:"sum-up",level:2}],m={toc:d},h="wrapper";function g(e){let{components:t,...n}=e;return(0,o.kt)(h,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(r.m,{content:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",mdxType:"LeadText"}),(0,o.kt)("p",null,"I'm a massive fan of Tim Peters' ",(0,o.kt)("a",{parentName:"p",href:"https://www.python.org/dev/peps/pep-0020/"},"PEP20 - Zen of Python"),". In 19 short lines, he described his recommendations for writing good Python code. The outcome transcended the specific language, and I see it as a universal guide on software engineering."),(0,o.kt)("p",null,"In this article, I share my Salesforce Marting Cloud adaptation and interpretation of this pearl. Expect some modifications to the original text (minimal, as most of the recommendations are perfectly valid for our Marketing Automation world), followed by my comments on how particular lines can benefit SFMC practice."),(0,o.kt)("h2",{id:"zen-of-sfmc"},"Zen of SFMC"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-txt"},"Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nNaming conventions count twice.\nSpecial cases aren't special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nEven when certain, test.\nNow is better than never.\nAlthough never is often better than right now.\nIf the implementation is hard to explain, it's a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nDocumentation is one honking great idea - let's do more of it!\n")),(0,o.kt)("h2",{id:"thoughts-on-zen"},"Thoughts on Zen"),(0,o.kt)("p",null,"Remember that those recommendations are just that - recommendations. Not strict rules, but rather a set of (sometimes contradictory) guidelines that might help you in your day-to-day work with Salesforce Marketing Cloud."),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"beautiful-is-better-than-ugly"},"Beautiful is better than ugly."),(0,o.kt)("p",null,"Beauty might not immediately come to mind in the context of software development and implementation, especially in the world of short deadlines and evergrowing KPIs. However, one should not forget about beauty when deploying Marketing Cloud solutions."),(0,o.kt)("p",null,"It makes working on the tool more motivating and pleasant and supports many other recommendations listed here - with readability in the first place. Below you can see examples of implementing the beauty principle in the Salesforce Marketing Cloud."),(0,o.kt)(i.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"code",mdxType:"TabItem"},(0,o.kt)("p",null,"When you are writing code in Salesforce Marketing Cloud - be it AMPScript, SSJS, SQL, or other - you have a lot of flexibility regarding structure and style. Random indentation, lack of new lines, cryptic variables? Everything is possible and might work."),(0,o.kt)("p",null,"But you shouldn't stop at writing code that just works. Apply a beauty-focused mindset, and while writing might take a bit longer, the outcome will be more readable, understandable to others and easier to debug."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Both queries work - which one would you rather read?"',title:'"Both',queries:!0,work:!0,"-":!0,which:!0,one:!0,would:!0,you:!0,rather:!0,'read?"':!0},"/* Beauty */\nSELECT\n wel.SubscriberKey AS SubscriberKey\n , wel.EmailAddress AS EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* and the Beast */\nSelect a.subscriberkey, a.emailaddress, b.eventdate\nFrom welcomecampaignsegment a join _open b on a.subscriberkey = b.subscriberkey\n\n")),(0,o.kt)("p",null,"Check my Style Guides for ",(0,o.kt)("a",{parentName:"p",href:"/docs/ampscript/ampscript-style-guide"},"AMPScript"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-style-guide"},"SSJS"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-style-guide"},"SQL")," to see more guides on making your code beautiful.")),(0,o.kt)(l.Z,{value:"ui",mdxType:"TabItem"},(0,o.kt)("p",null,"The choice between beauty and ugliness is not limited to writing the code. The same is valid for working with Salesforce Marketing Cloud no-code tools."),(0,o.kt)("p",null,"Are you creating an Email Template using Blocks in Content Builder? You can drag and drop the empty blocks in proper order and call it a day. But you can also put a bit more work and add sample content with predefined styles to each block, provide placeholder images with visible dimensions and save those elements as separate blocks ready for reuse."),(0,o.kt)("p",null,"Both approaches deliver the Email Template, but the second one keeps beauty in mind resulting in improved usefulness and value of the final solution."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"explicit-is-better-than-implicit"},"Explicit is better than implicit."),(0,o.kt)("p",null,"Salesforce Marketing Cloud enables you to decide whether you want to create things implicitly or explicitly. Implicit is faster and easier. Explicit is sturdier and better."),(0,o.kt)("p",null,"As the SFMC is long term commitment used by many people, it's always worth spending a bit more effort and going for the explicit whenever possible. It will save you and your organisation much time in the long run, so consider it an investment."),(0,o.kt)(i.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"code",mdxType:"TabItem"},(0,o.kt)("p",null,"We can leverage many tricks when coding for Salesforce Marketing Cloud - implicit data type conversions, undocumented endpoints and function behaviours, or just language-specific syntactic sugar. As helpful as they are, those tricks obscure readability, introduce error risk to the code, and many won't know/understand them."),(0,o.kt)("p",null,"This is why, unless such tricks are necessary, I recommend going for the explicit, clear and obvious version. Even if it is slightly longer or not as sexy."),(0,o.kt)("p",null,"Of course, it is not always possible - some things are possible only by coding on the edge of the documentation. Even then, you can make it more explicit with good comments. And don't limit those to just the tricky parts. Describing the cleanest functions and scripts will help you (and your team) work more effectively."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:"title=\"'Code tells you how. Comments tell you why.' - Jeff Atwood\"",title:"\"'Code",tells:!0,you:!0,"how.":!0,Comments:!0,tell:!0,"why.'":!0,"-":!0,Jeff:!0,'Atwood"':!0},"/**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n")),(0,o.kt)("p",null,"Read more on using comments in ","[SSJS]","./ssjs/ssjs-style-guide.mdx#comments) and ",(0,o.kt)("a",{parentName:"p",href:"/docs/ampscript/ampscript-style-guide#comments"},"AMPScript"),"."),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"An explicit approach can (and should) be taken to the next level with smart use of asset Keys. They are frequently used in code - especially the Data Extension and Content Block keys. While the default pseudo-random ID does the work, I recommend going for the custom explicit Keys."),(0,o.kt)("p",{parentName:"admonition"},"If you keep Data Extension Name and Key in sync (it might not be possible with longer names due to the Key length limit), you won't have to worry about whether the Data Extension lookup uses the key or the name."),(0,o.kt)("p",{parentName:"admonition"},"You can get even more value from this approach with Content Blocks. It's popular to use them for AMPScript snippets shared across multiple emails or brand-wide dynamic footers. Frequently they are added to the Email Templates with the help of the AMPScript ",(0,o.kt)("inlineCode",{parentName:"p"},"ContentBlockByID")," function. However, as an asset collection grows, it will be harder to remember which Content Block you imported that way (IDs aren't helpful with that)."),(0,o.kt)("p",{parentName:"admonition"},"Explicit Content Block Key and ",(0,o.kt)("inlineCode",{parentName:"p"},"ContentBlockByKey")," function can help:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Which one would you rather see in the email template?"',title:'"Which',one:!0,would:!0,you:!0,rather:!0,see:!0,in:!0,the:!0,email:!0,'template?"':!0},'%%=ContentBlockByID("123456")=%%\n// vs\n%%=ContentBlockByKey("SharedFooterEMEA")=%%\n')))),(0,o.kt)(l.Z,{value:"ui",mdxType:"TabItem"},(0,o.kt)("p",null,"Being explicit is not limited to the code. When working with the SFMC no-code features, you will have many places to improve your solution by adding information."),(0,o.kt)("p",null,"Many assets offer one or more places to add details: Data Extensions, Installed Packages, Automations - or even Activity-grouping steps. Neither of those places ",(0,o.kt)("em",{parentName:"p"},"requires")," a description, but each and single one will benefit from explicitly stating its purpose and business/technical context."),(0,o.kt)("p",null,"There are also places where Salesforce Marketing Cloud lets you add smaller pieces of information. Not full descriptions, but rather optional micro data points that explain the purpose. Path names in Journey Builder Decision Splits. Additional Email Attribute Names in Content Builder. Collection and Cloud Page names in Web Studio. Whenever possible - spend that extra time needed to come up with explicit value."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"simple-is-better-than-complex"},"Simple is better than complex."),(0,o.kt)("p",null,"Marketing Cloud is a complex tool within a complex Salesforce ecosystem focused on solving complex business needs. But how you operate and develop SFMC should be as straightforward as possible. It will make your solution robust, agile and easily understandable."),(0,o.kt)("h4",{id:"kiss"},"KISS"),(0,o.kt)("p",null,"This recommendation is also known in the software development community under a popular acronym: ",(0,o.kt)("strong",{parentName:"p"},"KISS")," (Keep It Simple ",(0,o.kt)("del",{parentName:"p"},"Stupid")," Salesforce). In short, it advocates creating solutions as simple as they can be without sacrificing other values (like readability or performance)."),(0,o.kt)("h4",{id:"yagni"},"YAGNI"),(0,o.kt)("p",null,"Another popular acronym connected to the simplicity principle is ",(0,o.kt)("strong",{parentName:"p"},"YAGNI")," (You Aren't Gonna Need It). This Extreme Programming methodology mantra adds another perspective by stating that you should build only the necessary elements when creating the solution. Everything else is just bloat that makes the outcome more convoluted and error-prone."),(0,o.kt)(i.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"code",mdxType:"TabItem"},(0,o.kt)("p",null,"The simplicity focus is useful already when you select the best programming language to do the job. Sure, SSJS is much more powerful and flexible than AMPScript, but unless you have a specific need for this power (YAGNI) you should go for the simpler solution (KISS) (",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-vs-ampscript-performance#ampscript-vs-ssjs"},"more on selecting SSJS vs AMPScript"),")."),(0,o.kt)("p",null,"Once you select the best language for the job, you will have to code the solution. And here again, simplicity will be a helpful guideline. For example, yes, you can create a universal SSJS API wrapper class, but if your script only needs to update Salesforce objects, ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"built-in AMPScript functions")," will be enough (YAGNI) and much simpler (KISS)."),(0,o.kt)("p",null,"Think about KISS and YAGNI whenever you are coding, and it will help you deliver more straightforward and better solutions."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n SubscriberKey\n , CASE\n WHEN DateJoined >= DATEADD(MONTH, -1, GETDATE()) THEN 1\n WHEN DateJoined < DATEADD(MONTH, -1, GETDATE()) THEN 0\n END AS IsNewJoiner\nFROM Ent._Subscribers\n/* When you only need two opposite CASE rules, simple IIF shorthand is better */\nSELECT\n SubscriberKey\n , IIF(DateJoined >= DATEADD(MONTH, -1, GETDATE()), 1, 0) AS IsNewJoiner\nFROM Ent._Subscribers\n"))),(0,o.kt)(l.Z,{value:"ui",mdxType:"TabItem"},(0,o.kt)("p",null,"The two-step approach - limiting the scope (YAGNI) and selecting the easiest solution to deliver it (KISS) - can be applied to no-code solutions as well:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"When creating an email, ask yourself whether you have a specific need requiring custom HTML. If not, go for a simple Drag & Drop Blocks Template."),(0,o.kt)("li",{parentName:"ul"},"When creating a segment, ask yourself whether you need multiple data sources or calculated data. If not, simple filtered data extension might be enough."),(0,o.kt)("li",{parentName:"ul"},"When creating complex automation, ask yourself whether you need all those activities in a single process. If not, split into multiple single-purpose Automations.")),(0,o.kt)("p",null,"There are countless places in Salesforce Marketing Cloud to apply this approach to benefit the final solution."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"complex-is-better-than-complicated"},"Complex is better than complicated."),(0,o.kt)("p",null,"It might sound contradictory to the previous recommendation, but only on the surface. There is a limit to what can be simplified before it starts getting complicated. In such a case, the complex is the lesser evil."),(0,o.kt)("h4",{id:"soc"},"SOC"),(0,o.kt)("p",null,"When laser-focused on simplicity, you will feel tempted to create the whole solution as one element (one script, one Automation, one email). ",(0,o.kt)("strong",{parentName:"p"},"SOC")," (Separation of Concerns) rule tells us that it might be a bad idea to build one solution from multiple parts, each with a different purpose. Numerous concerns stacked within a single asset will make it complicated rather than simple. The recommendation? Split it into separate purpose-oriented elements. It will get more complex but less complicated."),(0,o.kt)("h4",{id:"dry"},"DRY"),(0,o.kt)("p",null,"Another essential acronym is ",(0,o.kt)("strong",{parentName:"p"},"DRY")," (Don't Repeat Yourself). It shows a different perspective on the same problem - the simple solution that needs to be replicated multiple times leads to a complicated outcome. Updating is a hassle; performance drops; readability is poor. DRY suggests finding such repetitive spots and refactoring them."),(0,o.kt)("p",null,"Another application of the DRY principle is related not to a specific solution but to work in general. If you find you are doing the same thing again and again, Don't Repeat Yourself. Automate it."),(0,o.kt)(i.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"code",mdxType:"TabItem"},(0,o.kt)("p",null,"I have seen many (too many) Subscription Preference Centers in SFMC built with AMPScript. Yes, it's a simple language and capable enough to deliver such a solution. But because of its simplicity, for this use case, it quickly gets full of repeating script lines (DRY violation), multiple purposes (SOC violation) and endless lines of code (readability suffers)."),(0,o.kt)("p",null,"My recommendation for most of the Preference Centers is to go with SSJS. Yes, it's a more complex language than AMPScript, but with a set of tools dedicated to delivering complex use cases. Implement SOC and make it DRY with functions & ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-loops"},"loops"),". Bring it to the next level by splitting Front-End (Cloud Page) and Back-End (Code Resource). Compared to a single Cloud Page with AMPScript, this solution will be more complex but much less complicated. Thus easier to debug and maintain.")),(0,o.kt)(l.Z,{value:"ui",mdxType:"TabItem"},(0,o.kt)("p",null,"The same rules apply to Marketing Cloud no-code solutions. Filtered Data Extensions with Data Relationships are excellent for simple segmentation. Still, when the segment requirements get more complicated, it's better to move to more complex SQL Queries in Automation Studio."),(0,o.kt)("p",null,"Similarly, you can leverage Marketing Cloud Connect and Journey Builder to update data in Salesforce CRM without any code. Still, when you get to the point of creating journeys with only such updates in mind - its better to go for more complex but less complicated ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/snippets/ampscript-in-ssjs#long-ampscript-code"},"AMPScript SalesforceObject")," functions."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"flat-is-better-than-nested-sparse-is-better-than-dense"},"Flat is better than nested. Sparse is better than dense."),(0,o.kt)("p",null,"When working on the solution, it is easy to build a matryoshka. Multiple goals within one asset? Let's add an ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-if-and-switch"},(0,o.kt)("inlineCode",{parentName:"a"},"if"),"/",(0,o.kt)("inlineCode",{parentName:"a"},"switch"))," in the code or a decision split in the Journey Builder. Edge case found during testing? Yet another ",(0,o.kt)("inlineCode",{parentName:"p"},"if"),". Multiple goals within one email? The 4-column layout is here! KPIs for leads, sales, loyalty and brand are not yet met? Let's pack them in a just-being-built welcome Journey."),(0,o.kt)("p",null,"This turn of events is natural during development, but it quickly leads to a complicated outcome. There are two ways to solve it:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Plan"),' - As Abraham Lincoln once said, "Give me six hours to chop down a tree, and I will spend the first four sharpening the axe". The same approach will benefit your Marketing Cloud instance.'),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Refactor")," - Planning is incredible, but it's nearly impossible to prepare a bulletproof plan. That's fine, as long as you refactor your solution after hitting the bump on the road.")),(0,o.kt)("p",null,"Following those steps will help you create simpler, lighter and better solutions. And the more refactors you do, the better in planning you will become."),(0,o.kt)(i.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"code",mdxType:"TabItem"},(0,o.kt)("p",null,"It's easy to write deeply nested code. It's even easier to write dense code, full of syntactic sugar that is short and looks 'professional'\u2014especially when copy-pasting a magical solution found on the Stack Overlow (been there, done that)."),(0,o.kt)("p",null,"However, the good code doesn't have to be short or prove that you know all quirks of the language. The good code must be ",(0,o.kt)("a",{parentName:"p",href:"#readability-counts"},"readable"),", ",(0,o.kt)("a",{parentName:"p",href:"#simple-is-better-than-complex"},"simple")," and ",(0,o.kt)("a",{parentName:"p",href:"#explicit-is-better-than-implicit"},"explicit"),". And in many cases, it will be a bit longer and created from simpler building blocks."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:"title=\"Just because it works, doesn't mean it's worth it\"",title:'"Just',because:!0,it:!0,"works,":!0,"doesn't":!0,mean:!0,"it's":!0,worth:!0,'it"':!0},"var region = country == 'UK' ? 'EMEA' : country == 'PL' ? 'EMEA' : country == 'US' ? 'AMER' : 'APAC';\n/* Chained ternary operator above might take less lines of code, but it's definitely not readable.\nMaking it more sparse and flat is not only easier for the readars but also for future modifications */\nif (country == 'UK' || country == 'PL') {\n var region = 'EMEA';\n} else if (country == 'US') {\n var region = 'AMER';\n} else {\n var region = 'APAC';\n};\n"))),(0,o.kt)(l.Z,{value:"ui",mdxType:"TabItem"},(0,o.kt)("p",null,"When building in Journey Builder, it is easy to nest Decision Splits to send various communication based on some criteria, but this approach will quickly become ",(0,o.kt)("a",{parentName:"p",href:"#complex-is-better-than-complicated"},"complicated")," and (with how SFMC renders multiple splits) ",(0,o.kt)("a",{parentName:"p",href:"#beautiful-is-better-than-ugly"},"ugly"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"If you want to add the splits to cover more appropriate personalisation - make your Journey flat by leveraging Dynamic Content instead."),(0,o.kt)("li",{parentName:"ul"},"If you want to add the splits to cover different campaign goals - make your Journey flat by splitting each goal into separate Journey (",(0,o.kt)("a",{parentName:"li",href:"#SOC"},"SOC principle"),").")),(0,o.kt)("p",null,"The same is true for Emails that frequently grow due to applying multiple KPIs. Sure, you can cram a lot if you go for a 4-column layout with numerous sections. But the layout bugs will emerge, deliverability will suffer, readability will tank, and the reader will get lost in the number of calls to action. Instead, focus on one concrete and targeted action that is crucial for your business."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"readability-counts"},"Readability counts."),(0,o.kt)("p",null,"Readability is key. In code, it limits bugs, simplifies debugging, improves future development and saves tons of time. In content, it's key to drive the message to the recipient. In short, without readability, there is no value."),(0,o.kt)("p",null,"I have already written a lot about readability of Marketing Cloud programmatic langauges: ",(0,o.kt)("a",{parentName:"p",href:"/docs/ampscript/ampscript-style-guide"},"AMPScript"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-style-guide"},"SSJS"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-style-guide"},"SQL"),"."),(0,o.kt)("p",null,"As for the readability of content:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Write short sentences (15 words are nice; stay under 30)."),(0,o.kt)("li",{parentName:"ol"},'Use simple language (instead of "due to the fact that" use "because").'),(0,o.kt)("li",{parentName:"ol"},'Prove with hard data (instead of "significant amount of customers recommends" use "93% of customer recommends").'),(0,o.kt)("li",{parentName:"ol"},'Cut marketing fluff (every part of the content should have an answer to the "so what?" question).'),(0,o.kt)("li",{parentName:"ol"},"Proofread. Proofread again.")),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"naming-conventions-count-twice"},"Naming conventions count twice."),(0,o.kt)("p",null,"I love naming conventions and believe they are crucial to the long term success of marketing automation solutions. They improve readability and maintainability, bring clarity and unlock even more automation possibilities."),(0,o.kt)("p",null,"What is unique about them is that they provide the most value when implemented from the very start and enforced everywhere. But if you are thinking long term (and with Marketing Automation tools - you should), it's better to implement one late than never. The bigger and older the solution, the more you will feel that a good naming convention is not nice-to-have but rather a must-have."),(0,o.kt)(i.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"code",mdxType:"TabItem"},(0,o.kt)("p",null,"You can benefit from implementing a naming convention in all SFMC programming languages. Strive for variable, function, column names that are obvious even for someone who sees the code for the first time. Saving a few characters for a shorter name is not worth the time lost for deciphering the meaning later."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* You may know what it means when you write the code... */\nif (ts && !tsd) tsd = new Date();\n\n/* ... but everyone else, and even you after a week, will be thankful for explicit names */\nif (isTrackingSuppressed && !trackingSuppressionStartDate) trackingSuppressionStartDate = new Date()\n")),(0,o.kt)("p",null,"Looking for more examples of good naming? Check Style Guide recommendations for ",(0,o.kt)("a",{parentName:"p",href:"/docs/ampscript/ampscript-style-guide#naming-convention"},"AMPScript"),", ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-style-guide#naming-convention"},"SSJS")," and ",(0,o.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-style-guide#explicit-vs-implicit"},"SQL"),".")),(0,o.kt)(l.Z,{value:"ui",mdxType:"TabItem"},(0,o.kt)("p",null,"The naming convention is huge when working with the Salesforce Marketing Cloud. Leveraging a proper one makes it much easier to search and differentiate the assets. It's also an excellent tool to enable some smart personalisations and checks in email communication (with the help of the ",(0,o.kt)("inlineCode",{parentName:"p"},"%%emailname_%%")," personalisation string). And that's not all - a good naming convention will increase value coming from System Data Views and reporting."),(0,o.kt)("p",null,"With all this praise - what is a good naming convention for the marketing automation assets? It, of course, depends on the specifics of your business, but my recommendation is to mix data-filled shortcuts with separators."),(0,o.kt)("p",null,"My favourite approach is to:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Define a set of business-oriented data points that bring value."),(0,o.kt)("li",{parentName:"ol"},"Create readable shortcuts for them to limit the final length of the naming convention."),(0,o.kt)("li",{parentName:"ol"},"Create a dedicated place for each separate element in the naming convention."),(0,o.kt)("li",{parentName:"ol"},"Split the elements with an underscore (",(0,o.kt)("inlineCode",{parentName:"li"},"_"),")."),(0,o.kt)("li",{parentName:"ol"},"Split parts of a single element with a hyphen (",(0,o.kt)("inlineCode",{parentName:"li"},"-"),").")),(0,o.kt)("p",null,"That's the theory, but what are good business-oriented data points? Some examples I frequently use are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Country (if you are operating in multiple markets)"),(0,o.kt)("li",{parentName:"ul"},"Business Unit (if you have a complex internal structure of the company)"),(0,o.kt)("li",{parentName:"ul"},"Segment (if you have a set of predefined master-segments / personas)"),(0,o.kt)("li",{parentName:"ul"},"Campaign Type (it's always helpful)"),(0,o.kt)("li",{parentName:"ul"},"Free-text Asset Name (the human-readable part that helps easily understand the purpose)"),(0,o.kt)("li",{parentName:"ul"},"Asset Type (can help in Content Builder to differentiate various partial assets)"),(0,o.kt)("li",{parentName:"ul"},"Date (beneficial, especially if you are creating a lot of similar assets for recurring goals)"),(0,o.kt)("li",{parentName:"ul"},"Campaign Code (or whatever you are using for closed-loop reporting and 360 analytics)")),(0,o.kt)("p",null,"How does it look when implemented? Let's check an example:"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"UK_DEV_C_WEL_brand-welcome-1_EML_21-10_01234")),(0,o.kt)("p",null,"It's elements would be:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Country: ",(0,o.kt)("inlineCode",{parentName:"li"},"UK")," = United Kingdom"),(0,o.kt)("li",{parentName:"ol"},"Business Unit: ",(0,o.kt)("inlineCode",{parentName:"li"},"DEV")," = Development"),(0,o.kt)("li",{parentName:"ol"},"Segment: ",(0,o.kt)("inlineCode",{parentName:"li"},"C")," = Customers"),(0,o.kt)("li",{parentName:"ol"},"Campaign Type: ",(0,o.kt)("inlineCode",{parentName:"li"},"WEL")," = Welcome"),(0,o.kt)("li",{parentName:"ol"},"Asset Name: ",(0,o.kt)("inlineCode",{parentName:"li"},"brand-welcome-1")),(0,o.kt)("li",{parentName:"ol"},"Asset Type: ",(0,o.kt)("inlineCode",{parentName:"li"},"EML")," = Email"),(0,o.kt)("li",{parentName:"ol"},"Date: ",(0,o.kt)("inlineCode",{parentName:"li"},"21-10")," = October 2021"),(0,o.kt)("li",{parentName:"ol"},"Campaign Code: ",(0,o.kt)("inlineCode",{parentName:"li"},"01234"))),(0,o.kt)("p",null,"As you can see, in under 50 characters, we captured eight different data points and a pretty good picture of the purpose of the asset."),(0,o.kt)("p",null,"What is more, the Business Intelligence team will be able to use a simple split by an underscore to capture each element as a separate category to enable filtering and grouping in reporting."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"special-cases-arent-special-enough-to-break-the-rules-although-practicality-beats-purity"},"Special cases aren't special enough to break the rules. Although practicality beats purity."),(0,o.kt)("p",null,"Those contradictory lines follow the ancient greek golden middle way philosophy. The thought behind them is pretty straightforward. Whenever you decide to stick to some recommendation or rule (be it from this article or else) - fight the temptation to create exceptions when you encounter the first bump on the road."),(0,o.kt)("p",null,'Sure, it might be easier to ignore the rule when the deadline is near or you have too much to do. It\'s easy to say, "I will align it later". But there is always more work to be done "later", and in the end, you finish with a messy solution that doesn\'t provide the promised value.'),(0,o.kt)("p",null,"On the other hand, following the rules by the book in every single case might stop you from delivering a working solution at all."),(0,o.kt)("p",null,"That's why we must learn how to follow the rules ",(0,o.kt)("strong",{parentName:"p"},"and")," when to break them."),(0,o.kt)("p",null,"So follow the rules as a default, break them only when there is no other option, and refactor them whenever possible."),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"errors-should-never-pass-silently-unless-explicitly-silenced"},"Errors should never pass silently. Unless explicitly silenced."),(0,o.kt)("p",null,"Every solution can encounter some problems or edge cases. You can even be hit with something outside of your control, like server issues. It is why capturing and analysing the errors is so essential."),(0,o.kt)("p",null,"In terms of code it means proper ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs"},"debugging and error handling"),". Especially ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#error-logging"},"error logging")," is good idea to keep up with the potential issues in matured Marketing Cloud solution. You can also protect your solution by creating last resort checks in messaging with the ",(0,o.kt)("inlineCode",{parentName:"p"},"RaiseError")," function."),(0,o.kt)("p",null,"But there are also platform-based features that capture issues. Journey pre-launch validation, Verification Activity for Automation Studio and its built-in error logging, Send Logs, and Audit Trail. Salesforce Marketing Cloud offers many tools to make sure you are up to speed with the state of your platform, so make sure you use all of them."),(0,o.kt)("p",null,"However, just because you can, it doesn't mean you always need to throw an error. There are some cases where silencing them is the right thing to do. Example?"),(0,o.kt)("p",null,"When sending a personalised email, you might find some contacts with missing data that would error out the send. Ask yourself whether you genuinely want an error in such cases, or rather a dynamic content with non-personalised default will work better."),(0,o.kt)("p",null,"Such workarounds are even more critical for errors on client-facing assets like Cloud Pages. When coding the user experience, check the possible errors and consider which should be visible to the end-user."),(0,o.kt)("p",null,"And - considering the quality of out-of-the-box SFMC errors - always provide custom error messages."),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"in-the-face-of-ambiguity-refuse-the-temptation-to-guess-even-when-certain-test"},"In the face of ambiguity, refuse the temptation to guess. Even when certain, test."),(0,o.kt)("p",null,"With the complexity of Marketing Cloud, cross-cloud integrations, constant platform updates and solution development, there is much room for ambiguity. It's even more significant when you consider how the SFMC is growing - by 3rd party acquisitions and building new features on top of the legacy ones. There is a constant technical debt and multiple frameworks co-existing at the same time. With updates hitting the platform multiple times a year, even with stuff you have already done numerous times in the past - don't assume it will work the same. Don't guess. Check."),(0,o.kt)("p",null,"There are multiple examples of this risk. SSJS is not-fully-supported ES3 limited by the .NET backend, so you never know which feature will work. SQL is a partial SQL Server 2016 with different behaviour in Script Activity and Query Studio. There are inconsistent approaches within the same solution (for example ",(0,o.kt)("a",{parentName:"p",href:"../../sites/ideas/marketing-cloud-ideas/#content-builder-shared-folders-permissions"},"shared folder permissions"),"). Unexpected bugs (like incorrect rendering of ",(0,o.kt)("a",{parentName:"p",href:"../../sites/ideas/marketing-cloud-ideas/#behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook"},"Behavioral Triggers"),"). Temporary issues that change the SSJS function responses for few days."),(0,o.kt)("p",null,"With all this ambiguity in the system, always check during development and always check again before go-live."),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"now-is-better-than-never-although-never-is-often-better-than-right-now"},"Now is better than never. Although never is often better than right now."),(0,o.kt)("p",null,"When you see an opportunity for improvement or encounter a helpful recommendation, it's a good idea to take a note and implement it to improve the value of your solution. However, fight the temptation to do it instantaneously. Even the enhancement most needed in your solution might break everything if you implement it hastily."),(0,o.kt)("p",null,"Using previous examples:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"If you are not yet using proper ",(0,o.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs"},"debugging and error handling"),", you definitely should implement it. Should you do it ",(0,o.kt)("em",{parentName:"p"},"right")," now? Well, there are some quirks that you should test beforehand; otherwise, your script might error out and break the existing process.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"If you want to implement the asset ",(0,o.kt)("a",{parentName:"p",href:"#naming-conventions-counts-twice"},"naming convention"),", definitely start with discovery and cross-department alignment to have a complete picture of needs before creating the naming template. I believe everyone should use the naming convention, but it will be counterproductive if you start using it too fast and later have to update it based on late feedback."))),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"if-the-implementation-is-hard-to-explain-its-a-bad-idea-if-the-implementation-is-easy-to-explain-it-may-be-a-good-idea"},"If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea."),(0,o.kt)("p",null,"Marketing Cloud implementation is not something that one can easily explain to a five-year-old. However, if you find it hard to explain it to your colleague or client, it means that the solution is either too complex, too ambiguous, or not understood enough. Each of those cases is dangerous. In the best scenario, it may lead to a non-optimised outcome, in the worst - to a business-breaking crash."),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"documentation-is-one-honking-great-idea---lets-do-more-of-it"},"Documentation is one honking great idea - let's do more of it!"),(0,o.kt)("p",null,"Writing and maintaining documentation is a pain. I agree. But you know what is even bigger pain? Not having that documentation in the long run. Marketing Automation projects are long term investments. There are change requests, new team members, mistakes and bugs."),(0,o.kt)("p",null,"In the long run, good documentation saves much more time than it takes to create it. With the complexity of the solution and the size of the team operating on it, that value grows exponentially."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1"},"John F. Woods"),' once said, "always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live". The same is true for the whole marketing automation solution - and documentation is your best bet at surviving ;)'),(0,o.kt)("hr",null),(0,o.kt)("h2",{id:"sum-up"},"Sum Up"),(0,o.kt)("p",null,"There is a lot of contradictory recommendations above. It's intentional. Zen of SFMC is not a list of rigid rules - it would be impossible with the number of differences between Marketing Cloud customers. Instead, it's a set of flexible guidelines. Treat them as friendly best practices, not absolute rules and adapt them to improve your work."),(0,o.kt)("p",null,"Across all those recommendations, you can see some key recurring ideas:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Make it simple"),(0,o.kt)("li",{parentName:"ol"},"Make it readable"),(0,o.kt)("li",{parentName:"ol"},"Make it understandable"),(0,o.kt)("li",{parentName:"ol"},"Make it maintainable"),(0,o.kt)("li",{parentName:"ol"},"Make it practical")),(0,o.kt)("p",null,"However, I still love to check the full text of the ",(0,o.kt)("a",{parentName:"p",href:"#zen-of-sfmc"},"zen of SFMC")," to see how well I aligned my solution with it."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/aeba84fb.ea4e46d2.js b/assets/js/aeba84fb.ea4e46d2.js new file mode 100644 index 000000000..f1c651cb6 --- /dev/null +++ b/assets/js/aeba84fb.ea4e46d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5354],{2047:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>u});var i=n(5893),s=n(1151),o=n(3992),a=n(425),r=n(1872);const l={id:"zen-of-sfmc",title:"Zen of SFMC",description:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",image:"img/og/og-image-zen-of-sfmc.png",tags:["Marketing Cloud","Best Practice"],toc_max_heading_level:4},c=void 0,d={id:"zen-of-sfmc",title:"Zen of SFMC",description:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",source:"@site/docs/zen-of-sfmc.mdx",sourceDirName:".",slug:"/zen-of-sfmc",permalink:"/docs/zen-of-sfmc",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/zen-of-sfmc.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1673650734,formattedLastUpdatedAt:"Jan 13, 2023",frontMatter:{id:"zen-of-sfmc",title:"Zen of SFMC",description:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.",image:"img/og/og-image-zen-of-sfmc.png",tags:["Marketing Cloud","Best Practice"],toc_max_heading_level:4},sidebar:"docs",next:{title:"SSJS",permalink:"/docs/category/ssjs"}},h={},u=[{value:"Zen of SFMC",id:"zen-of-sfmc",level:2},{value:"Thoughts on Zen",id:"thoughts-on-zen",level:2},{value:"Beautiful is better than ugly.",id:"beautiful-is-better-than-ugly",level:3},{value:"Explicit is better than implicit.",id:"explicit-is-better-than-implicit",level:3},{value:"Simple is better than complex.",id:"simple-is-better-than-complex",level:3},{value:"KISS",id:"kiss",level:4},{value:"YAGNI",id:"yagni",level:4},{value:"Complex is better than complicated.",id:"complex-is-better-than-complicated",level:3},{value:"SOC",id:"soc",level:4},{value:"DRY",id:"dry",level:4},{value:"Flat is better than nested. Sparse is better than dense.",id:"flat-is-better-than-nested-sparse-is-better-than-dense",level:3},{value:"Readability counts.",id:"readability-counts",level:3},{value:"Naming conventions count twice.",id:"naming-conventions-count-twice",level:3},{value:"Special cases aren't special enough to break the rules. Although practicality beats purity.",id:"special-cases-arent-special-enough-to-break-the-rules-although-practicality-beats-purity",level:3},{value:"Errors should never pass silently. Unless explicitly silenced.",id:"errors-should-never-pass-silently-unless-explicitly-silenced",level:3},{value:"In the face of ambiguity, refuse the temptation to guess. Even when certain, test.",id:"in-the-face-of-ambiguity-refuse-the-temptation-to-guess-even-when-certain-test",level:3},{value:"Now is better than never. Although never is often better than right now.",id:"now-is-better-than-never-although-never-is-often-better-than-right-now",level:3},{value:"If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea.",id:"if-the-implementation-is-hard-to-explain-its-a-bad-idea-if-the-implementation-is-easy-to-explain-it-may-be-a-good-idea",level:3},{value:"Documentation is one honking great idea - let's do more of it!",id:"documentation-is-one-honking-great-idea---lets-do-more-of-it",level:3},{value:"Sum Up",id:"sum-up",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.m,{content:"Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail."}),"\n",(0,i.jsxs)(t.p,{children:["I'm a massive fan of Tim Peters' ",(0,i.jsx)(t.a,{href:"https://www.python.org/dev/peps/pep-0020/",children:"PEP20 - Zen of Python"}),". In 19 short lines, he described his recommendations for writing good Python code. The outcome transcended the specific language, and I see it as a universal guide on software engineering."]}),"\n",(0,i.jsx)(t.p,{children:"In this article, I share my Salesforce Marting Cloud adaptation and interpretation of this pearl. Expect some modifications to the original text (minimal, as most of the recommendations are perfectly valid for our Marketing Automation world), followed by my comments on how particular lines can benefit SFMC practice."}),"\n",(0,i.jsx)(t.h2,{id:"zen-of-sfmc",children:"Zen of SFMC"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-txt",children:"Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nNaming conventions count twice.\nSpecial cases aren't special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nEven when certain, test.\nNow is better than never.\nAlthough never is often better than right now.\nIf the implementation is hard to explain, it's a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nDocumentation is one honking great idea - let's do more of it!\n"})}),"\n",(0,i.jsx)(t.h2,{id:"thoughts-on-zen",children:"Thoughts on Zen"}),"\n",(0,i.jsx)(t.p,{children:"Remember that those recommendations are just that - recommendations. Not strict rules, but rather a set of (sometimes contradictory) guidelines that might help you in your day-to-day work with Salesforce Marketing Cloud."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"beautiful-is-better-than-ugly",children:"Beautiful is better than ugly."}),"\n",(0,i.jsx)(t.p,{children:"Beauty might not immediately come to mind in the context of software development and implementation, especially in the world of short deadlines and evergrowing KPIs. However, one should not forget about beauty when deploying Marketing Cloud solutions."}),"\n",(0,i.jsx)(t.p,{children:"It makes working on the tool more motivating and pleasant and supports many other recommendations listed here - with readability in the first place. Below you can see examples of implementing the beauty principle in the Salesforce Marketing Cloud."}),"\n",(0,i.jsxs)(o.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],children:[(0,i.jsxs)(a.Z,{value:"code",children:[(0,i.jsx)(t.p,{children:"When you are writing code in Salesforce Marketing Cloud - be it AMPScript, SSJS, SQL, or other - you have a lot of flexibility regarding structure and style. Random indentation, lack of new lines, cryptic variables? Everything is possible and might work."}),(0,i.jsx)(t.p,{children:"But you shouldn't stop at writing code that just works. Apply a beauty-focused mindset, and while writing might take a bit longer, the outcome will be more readable, understandable to others and easier to debug."}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",metastring:'title="Both queries work - which one would you rather read?"',children:"/* Beauty */\nSELECT\n wel.SubscriberKey AS SubscriberKey\n , wel.EmailAddress AS EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* and the Beast */\nSelect a.subscriberkey, a.emailaddress, b.eventdate\nFrom welcomecampaignsegment a join _open b on a.subscriberkey = b.subscriberkey\n\n"})}),(0,i.jsxs)(t.p,{children:["Check my Style Guides for ",(0,i.jsx)(t.a,{href:"/docs/ampscript/ampscript-style-guide",children:"AMPScript"}),", ",(0,i.jsx)(t.a,{href:"/docs/ssjs/ssjs-style-guide",children:"SSJS"}),", ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-style-guide",children:"SQL"})," to see more guides on making your code beautiful."]})]}),(0,i.jsxs)(a.Z,{value:"ui",children:[(0,i.jsx)(t.p,{children:"The choice between beauty and ugliness is not limited to writing the code. The same is valid for working with Salesforce Marketing Cloud no-code tools."}),(0,i.jsx)(t.p,{children:"Are you creating an Email Template using Blocks in Content Builder? You can drag and drop the empty blocks in proper order and call it a day. But you can also put a bit more work and add sample content with predefined styles to each block, provide placeholder images with visible dimensions and save those elements as separate blocks ready for reuse."}),(0,i.jsx)(t.p,{children:"Both approaches deliver the Email Template, but the second one keeps beauty in mind resulting in improved usefulness and value of the final solution."})]})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"explicit-is-better-than-implicit",children:"Explicit is better than implicit."}),"\n",(0,i.jsx)(t.p,{children:"Salesforce Marketing Cloud enables you to decide whether you want to create things implicitly or explicitly. Implicit is faster and easier. Explicit is sturdier and better."}),"\n",(0,i.jsx)(t.p,{children:"As the SFMC is long term commitment used by many people, it's always worth spending a bit more effort and going for the explicit whenever possible. It will save you and your organisation much time in the long run, so consider it an investment."}),"\n",(0,i.jsxs)(o.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],children:[(0,i.jsxs)(a.Z,{value:"code",children:[(0,i.jsx)(t.p,{children:"We can leverage many tricks when coding for Salesforce Marketing Cloud - implicit data type conversions, undocumented endpoints and function behaviours, or just language-specific syntactic sugar. As helpful as they are, those tricks obscure readability, introduce error risk to the code, and many won't know/understand them."}),(0,i.jsx)(t.p,{children:"This is why, unless such tricks are necessary, I recommend going for the explicit, clear and obvious version. Even if it is slightly longer or not as sexy."}),(0,i.jsx)(t.p,{children:"Of course, it is not always possible - some things are possible only by coding on the edge of the documentation. Even then, you can make it more explicit with good comments. And don't limit those to just the tricky parts. Describing the cleanest functions and scripts will help you (and your team) work more effectively."}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:"title=\"'Code tells you how. Comments tell you why.' - Jeff Atwood\"",children:"/**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n"})}),(0,i.jsxs)(t.p,{children:["Read more on using comments in [SSJS]./ssjs/ssjs-style-guide.mdx#comments) and ",(0,i.jsx)(t.a,{href:"/docs/ampscript/ampscript-style-guide#comments",children:"AMPScript"}),"."]}),(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"An explicit approach can (and should) be taken to the next level with smart use of asset Keys. They are frequently used in code - especially the Data Extension and Content Block keys. While the default pseudo-random ID does the work, I recommend going for the custom explicit Keys."}),(0,i.jsx)(t.p,{children:"If you keep Data Extension Name and Key in sync (it might not be possible with longer names due to the Key length limit), you won't have to worry about whether the Data Extension lookup uses the key or the name."}),(0,i.jsxs)(t.p,{children:["You can get even more value from this approach with Content Blocks. It's popular to use them for AMPScript snippets shared across multiple emails or brand-wide dynamic footers. Frequently they are added to the Email Templates with the help of the AMPScript ",(0,i.jsx)(t.code,{children:"ContentBlockByID"})," function. However, as an asset collection grows, it will be harder to remember which Content Block you imported that way (IDs aren't helpful with that)."]}),(0,i.jsxs)(t.p,{children:["Explicit Content Block Key and ",(0,i.jsx)(t.code,{children:"ContentBlockByKey"})," function can help:"]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:'title="Which one would you rather see in the email template?"',children:'%%=ContentBlockByID("123456")=%%\n// vs\n%%=ContentBlockByKey("SharedFooterEMEA")=%%\n'})})]})]}),(0,i.jsxs)(a.Z,{value:"ui",children:[(0,i.jsx)(t.p,{children:"Being explicit is not limited to the code. When working with the SFMC no-code features, you will have many places to improve your solution by adding information."}),(0,i.jsxs)(t.p,{children:["Many assets offer one or more places to add details: Data Extensions, Installed Packages, Automations - or even Activity-grouping steps. Neither of those places ",(0,i.jsx)(t.em,{children:"requires"})," a description, but each and single one will benefit from explicitly stating its purpose and business/technical context."]}),(0,i.jsx)(t.p,{children:"There are also places where Salesforce Marketing Cloud lets you add smaller pieces of information. Not full descriptions, but rather optional micro data points that explain the purpose. Path names in Journey Builder Decision Splits. Additional Email Attribute Names in Content Builder. Collection and Cloud Page names in Web Studio. Whenever possible - spend that extra time needed to come up with explicit value."})]})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"simple-is-better-than-complex",children:"Simple is better than complex."}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud is a complex tool within a complex Salesforce ecosystem focused on solving complex business needs. But how you operate and develop SFMC should be as straightforward as possible. It will make your solution robust, agile and easily understandable."}),"\n",(0,i.jsx)(t.h4,{id:"kiss",children:"KISS"}),"\n",(0,i.jsxs)(t.p,{children:["This recommendation is also known in the software development community under a popular acronym: ",(0,i.jsx)(t.strong,{children:"KISS"})," (Keep It Simple ",(0,i.jsx)(t.del,{children:"Stupid"})," Salesforce). In short, it advocates creating solutions as simple as they can be without sacrificing other values (like readability or performance)."]}),"\n",(0,i.jsx)(t.h4,{id:"yagni",children:"YAGNI"}),"\n",(0,i.jsxs)(t.p,{children:["Another popular acronym connected to the simplicity principle is ",(0,i.jsx)(t.strong,{children:"YAGNI"})," (You Aren't Gonna Need It). This Extreme Programming methodology mantra adds another perspective by stating that you should build only the necessary elements when creating the solution. Everything else is just bloat that makes the outcome more convoluted and error-prone."]}),"\n",(0,i.jsxs)(o.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],children:[(0,i.jsxs)(a.Z,{value:"code",children:[(0,i.jsxs)(t.p,{children:["The simplicity focus is useful already when you select the best programming language to do the job. Sure, SSJS is much more powerful and flexible than AMPScript, but unless you have a specific need for this power (YAGNI) you should go for the simpler solution (KISS) (",(0,i.jsx)(t.a,{href:"/docs/ssjs/ssjs-vs-ampscript-performance#ampscript-vs-ssjs",children:"more on selecting SSJS vs AMPScript"}),")."]}),(0,i.jsxs)(t.p,{children:["Once you select the best language for the job, you will have to code the solution. And here again, simplicity will be a helpful guideline. For example, yes, you can create a universal SSJS API wrapper class, but if your script only needs to update Salesforce objects, ",(0,i.jsx)(t.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"built-in AMPScript functions"})," will be enough (YAGNI) and much simpler (KISS)."]}),(0,i.jsx)(t.p,{children:"Think about KISS and YAGNI whenever you are coding, and it will help you deliver more straightforward and better solutions."}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-sql",children:"SELECT\n SubscriberKey\n , CASE\n WHEN DateJoined >= DATEADD(MONTH, -1, GETDATE()) THEN 1\n WHEN DateJoined < DATEADD(MONTH, -1, GETDATE()) THEN 0\n END AS IsNewJoiner\nFROM Ent._Subscribers\n/* When you only need two opposite CASE rules, simple IIF shorthand is better */\nSELECT\n SubscriberKey\n , IIF(DateJoined >= DATEADD(MONTH, -1, GETDATE()), 1, 0) AS IsNewJoiner\nFROM Ent._Subscribers\n"})})]}),(0,i.jsxs)(a.Z,{value:"ui",children:[(0,i.jsx)(t.p,{children:"The two-step approach - limiting the scope (YAGNI) and selecting the easiest solution to deliver it (KISS) - can be applied to no-code solutions as well:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"When creating an email, ask yourself whether you have a specific need requiring custom HTML. If not, go for a simple Drag & Drop Blocks Template."}),"\n",(0,i.jsx)(t.li,{children:"When creating a segment, ask yourself whether you need multiple data sources or calculated data. If not, simple filtered data extension might be enough."}),"\n",(0,i.jsx)(t.li,{children:"When creating complex automation, ask yourself whether you need all those activities in a single process. If not, split into multiple single-purpose Automations."}),"\n"]}),(0,i.jsx)(t.p,{children:"There are countless places in Salesforce Marketing Cloud to apply this approach to benefit the final solution."})]})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"complex-is-better-than-complicated",children:"Complex is better than complicated."}),"\n",(0,i.jsx)(t.p,{children:"It might sound contradictory to the previous recommendation, but only on the surface. There is a limit to what can be simplified before it starts getting complicated. In such a case, the complex is the lesser evil."}),"\n",(0,i.jsx)(t.h4,{id:"soc",children:"SOC"}),"\n",(0,i.jsxs)(t.p,{children:["When laser-focused on simplicity, you will feel tempted to create the whole solution as one element (one script, one Automation, one email). ",(0,i.jsx)(t.strong,{children:"SOC"})," (Separation of Concerns) rule tells us that it might be a bad idea to build one solution from multiple parts, each with a different purpose. Numerous concerns stacked within a single asset will make it complicated rather than simple. The recommendation? Split it into separate purpose-oriented elements. It will get more complex but less complicated."]}),"\n",(0,i.jsx)(t.h4,{id:"dry",children:"DRY"}),"\n",(0,i.jsxs)(t.p,{children:["Another essential acronym is ",(0,i.jsx)(t.strong,{children:"DRY"})," (Don't Repeat Yourself). It shows a different perspective on the same problem - the simple solution that needs to be replicated multiple times leads to a complicated outcome. Updating is a hassle; performance drops; readability is poor. DRY suggests finding such repetitive spots and refactoring them."]}),"\n",(0,i.jsx)(t.p,{children:"Another application of the DRY principle is related not to a specific solution but to work in general. If you find you are doing the same thing again and again, Don't Repeat Yourself. Automate it."}),"\n",(0,i.jsxs)(o.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],children:[(0,i.jsxs)(a.Z,{value:"code",children:[(0,i.jsx)(t.p,{children:"I have seen many (too many) Subscription Preference Centers in SFMC built with AMPScript. Yes, it's a simple language and capable enough to deliver such a solution. But because of its simplicity, for this use case, it quickly gets full of repeating script lines (DRY violation), multiple purposes (SOC violation) and endless lines of code (readability suffers)."}),(0,i.jsxs)(t.p,{children:["My recommendation for most of the Preference Centers is to go with SSJS. Yes, it's a more complex language than AMPScript, but with a set of tools dedicated to delivering complex use cases. Implement SOC and make it DRY with functions & ",(0,i.jsx)(t.a,{href:"/docs/ssjs/ssjs-loops",children:"loops"}),". Bring it to the next level by splitting Front-End (Cloud Page) and Back-End (Code Resource). Compared to a single Cloud Page with AMPScript, this solution will be more complex but much less complicated. Thus easier to debug and maintain."]})]}),(0,i.jsxs)(a.Z,{value:"ui",children:[(0,i.jsx)(t.p,{children:"The same rules apply to Marketing Cloud no-code solutions. Filtered Data Extensions with Data Relationships are excellent for simple segmentation. Still, when the segment requirements get more complicated, it's better to move to more complex SQL Queries in Automation Studio."}),(0,i.jsxs)(t.p,{children:["Similarly, you can leverage Marketing Cloud Connect and Journey Builder to update data in Salesforce CRM without any code. Still, when you get to the point of creating journeys with only such updates in mind - its better to go for more complex but less complicated ",(0,i.jsx)(t.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs#long-ampscript-code",children:"AMPScript SalesforceObject"})," functions."]})]})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"flat-is-better-than-nested-sparse-is-better-than-dense",children:"Flat is better than nested. Sparse is better than dense."}),"\n",(0,i.jsxs)(t.p,{children:["When working on the solution, it is easy to build a matryoshka. Multiple goals within one asset? Let's add an ",(0,i.jsxs)(t.a,{href:"/docs/ssjs/ssjs-if-and-switch",children:[(0,i.jsx)(t.code,{children:"if"}),"/",(0,i.jsx)(t.code,{children:"switch"})]})," in the code or a decision split in the Journey Builder. Edge case found during testing? Yet another ",(0,i.jsx)(t.code,{children:"if"}),". Multiple goals within one email? The 4-column layout is here! KPIs for leads, sales, loyalty and brand are not yet met? Let's pack them in a just-being-built welcome Journey."]}),"\n",(0,i.jsx)(t.p,{children:"This turn of events is natural during development, but it quickly leads to a complicated outcome. There are two ways to solve it:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Plan"}),' - As Abraham Lincoln once said, "Give me six hours to chop down a tree, and I will spend the first four sharpening the axe". The same approach will benefit your Marketing Cloud instance.']}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Refactor"})," - Planning is incredible, but it's nearly impossible to prepare a bulletproof plan. That's fine, as long as you refactor your solution after hitting the bump on the road."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Following those steps will help you create simpler, lighter and better solutions. And the more refactors you do, the better in planning you will become."}),"\n",(0,i.jsxs)(o.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],children:[(0,i.jsxs)(a.Z,{value:"code",children:[(0,i.jsx)(t.p,{children:"It's easy to write deeply nested code. It's even easier to write dense code, full of syntactic sugar that is short and looks 'professional'\u2014especially when copy-pasting a magical solution found on the Stack Overlow (been there, done that)."}),(0,i.jsxs)(t.p,{children:["However, the good code doesn't have to be short or prove that you know all quirks of the language. The good code must be ",(0,i.jsx)(t.a,{href:"#readability-counts",children:"readable"}),", ",(0,i.jsx)(t.a,{href:"#simple-is-better-than-complex",children:"simple"})," and ",(0,i.jsx)(t.a,{href:"#explicit-is-better-than-implicit",children:"explicit"}),". And in many cases, it will be a bit longer and created from simpler building blocks."]}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",metastring:"title=\"Just because it works, doesn't mean it's worth it\"",children:"var region = country == 'UK' ? 'EMEA' : country == 'PL' ? 'EMEA' : country == 'US' ? 'AMER' : 'APAC';\n/* Chained ternary operator above might take less lines of code, but it's definitely not readable.\nMaking it more sparse and flat is not only easier for the readars but also for future modifications */\nif (country == 'UK' || country == 'PL') {\n var region = 'EMEA';\n} else if (country == 'US') {\n var region = 'AMER';\n} else {\n var region = 'APAC';\n};\n"})})]}),(0,i.jsxs)(a.Z,{value:"ui",children:[(0,i.jsxs)(t.p,{children:["When building in Journey Builder, it is easy to nest Decision Splits to send various communication based on some criteria, but this approach will quickly become ",(0,i.jsx)(t.a,{href:"#complex-is-better-than-complicated",children:"complicated"})," and (with how SFMC renders multiple splits) ",(0,i.jsx)(t.a,{href:"#beautiful-is-better-than-ugly",children:"ugly"}),"."]}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"If you want to add the splits to cover more appropriate personalisation - make your Journey flat by leveraging Dynamic Content instead."}),"\n",(0,i.jsxs)(t.li,{children:["If you want to add the splits to cover different campaign goals - make your Journey flat by splitting each goal into separate Journey (",(0,i.jsx)(t.a,{href:"#SOC",children:"SOC principle"}),")."]}),"\n"]}),(0,i.jsx)(t.p,{children:"The same is true for Emails that frequently grow due to applying multiple KPIs. Sure, you can cram a lot if you go for a 4-column layout with numerous sections. But the layout bugs will emerge, deliverability will suffer, readability will tank, and the reader will get lost in the number of calls to action. Instead, focus on one concrete and targeted action that is crucial for your business."})]})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"readability-counts",children:"Readability counts."}),"\n",(0,i.jsx)(t.p,{children:"Readability is key. In code, it limits bugs, simplifies debugging, improves future development and saves tons of time. In content, it's key to drive the message to the recipient. In short, without readability, there is no value."}),"\n",(0,i.jsxs)(t.p,{children:["I have already written a lot about readability of Marketing Cloud programmatic langauges: ",(0,i.jsx)(t.a,{href:"/docs/ampscript/ampscript-style-guide",children:"AMPScript"}),", ",(0,i.jsx)(t.a,{href:"/docs/ssjs/ssjs-style-guide",children:"SSJS"}),", ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-style-guide",children:"SQL"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"As for the readability of content:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Write short sentences (15 words are nice; stay under 30)."}),"\n",(0,i.jsx)(t.li,{children:'Use simple language (instead of "due to the fact that" use "because").'}),"\n",(0,i.jsx)(t.li,{children:'Prove with hard data (instead of "significant amount of customers recommends" use "93% of customer recommends").'}),"\n",(0,i.jsx)(t.li,{children:'Cut marketing fluff (every part of the content should have an answer to the "so what?" question).'}),"\n",(0,i.jsx)(t.li,{children:"Proofread. Proofread again."}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"naming-conventions-count-twice",children:"Naming conventions count twice."}),"\n",(0,i.jsx)(t.p,{children:"I love naming conventions and believe they are crucial to the long term success of marketing automation solutions. They improve readability and maintainability, bring clarity and unlock even more automation possibilities."}),"\n",(0,i.jsx)(t.p,{children:"What is unique about them is that they provide the most value when implemented from the very start and enforced everywhere. But if you are thinking long term (and with Marketing Automation tools - you should), it's better to implement one late than never. The bigger and older the solution, the more you will feel that a good naming convention is not nice-to-have but rather a must-have."}),"\n",(0,i.jsxs)(o.Z,{defaultValue:null,values:[{label:"SFMC Code Example",value:"code"},{label:"SFMC UI Example",value:"ui"}],children:[(0,i.jsxs)(a.Z,{value:"code",children:[(0,i.jsx)(t.p,{children:"You can benefit from implementing a naming convention in all SFMC programming languages. Strive for variable, function, column names that are obvious even for someone who sees the code for the first time. Saving a few characters for a shorter name is not worth the time lost for deciphering the meaning later."}),(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-js",children:"/* You may know what it means when you write the code... */\nif (ts && !tsd) tsd = new Date();\n\n/* ... but everyone else, and even you after a week, will be thankful for explicit names */\nif (isTrackingSuppressed && !trackingSuppressionStartDate) trackingSuppressionStartDate = new Date()\n"})}),(0,i.jsxs)(t.p,{children:["Looking for more examples of good naming? Check Style Guide recommendations for ",(0,i.jsx)(t.a,{href:"/docs/ampscript/ampscript-style-guide#naming-convention",children:"AMPScript"}),", ",(0,i.jsx)(t.a,{href:"/docs/ssjs/ssjs-style-guide#naming-convention",children:"SSJS"})," and ",(0,i.jsx)(t.a,{href:"/docs/sql/sfmc-sql-style-guide#explicit-vs-implicit",children:"SQL"}),"."]})]}),(0,i.jsxs)(a.Z,{value:"ui",children:[(0,i.jsxs)(t.p,{children:["The naming convention is huge when working with the Salesforce Marketing Cloud. Leveraging a proper one makes it much easier to search and differentiate the assets. It's also an excellent tool to enable some smart personalisations and checks in email communication (with the help of the ",(0,i.jsx)(t.code,{children:"%%emailname_%%"})," personalisation string). And that's not all - a good naming convention will increase value coming from System Data Views and reporting."]}),(0,i.jsx)(t.p,{children:"With all this praise - what is a good naming convention for the marketing automation assets? It, of course, depends on the specifics of your business, but my recommendation is to mix data-filled shortcuts with separators."}),(0,i.jsx)(t.p,{children:"My favourite approach is to:"}),(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Define a set of business-oriented data points that bring value."}),"\n",(0,i.jsx)(t.li,{children:"Create readable shortcuts for them to limit the final length of the naming convention."}),"\n",(0,i.jsx)(t.li,{children:"Create a dedicated place for each separate element in the naming convention."}),"\n",(0,i.jsxs)(t.li,{children:["Split the elements with an underscore (",(0,i.jsx)(t.code,{children:"_"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:["Split parts of a single element with a hyphen (",(0,i.jsx)(t.code,{children:"-"}),")."]}),"\n"]}),(0,i.jsx)(t.p,{children:"That's the theory, but what are good business-oriented data points? Some examples I frequently use are:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Country (if you are operating in multiple markets)"}),"\n",(0,i.jsx)(t.li,{children:"Business Unit (if you have a complex internal structure of the company)"}),"\n",(0,i.jsx)(t.li,{children:"Segment (if you have a set of predefined master-segments / personas)"}),"\n",(0,i.jsx)(t.li,{children:"Campaign Type (it's always helpful)"}),"\n",(0,i.jsx)(t.li,{children:"Free-text Asset Name (the human-readable part that helps easily understand the purpose)"}),"\n",(0,i.jsx)(t.li,{children:"Asset Type (can help in Content Builder to differentiate various partial assets)"}),"\n",(0,i.jsx)(t.li,{children:"Date (beneficial, especially if you are creating a lot of similar assets for recurring goals)"}),"\n",(0,i.jsx)(t.li,{children:"Campaign Code (or whatever you are using for closed-loop reporting and 360 analytics)"}),"\n"]}),(0,i.jsx)(t.p,{children:"How does it look when implemented? Let's check an example:"}),(0,i.jsx)(t.p,{children:(0,i.jsx)(t.code,{children:"UK_DEV_C_WEL_brand-welcome-1_EML_21-10_01234"})}),(0,i.jsx)(t.p,{children:"It's elements would be:"}),(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Country: ",(0,i.jsx)(t.code,{children:"UK"})," = United Kingdom"]}),"\n",(0,i.jsxs)(t.li,{children:["Business Unit: ",(0,i.jsx)(t.code,{children:"DEV"})," = Development"]}),"\n",(0,i.jsxs)(t.li,{children:["Segment: ",(0,i.jsx)(t.code,{children:"C"})," = Customers"]}),"\n",(0,i.jsxs)(t.li,{children:["Campaign Type: ",(0,i.jsx)(t.code,{children:"WEL"})," = Welcome"]}),"\n",(0,i.jsxs)(t.li,{children:["Asset Name: ",(0,i.jsx)(t.code,{children:"brand-welcome-1"})]}),"\n",(0,i.jsxs)(t.li,{children:["Asset Type: ",(0,i.jsx)(t.code,{children:"EML"})," = Email"]}),"\n",(0,i.jsxs)(t.li,{children:["Date: ",(0,i.jsx)(t.code,{children:"21-10"})," = October 2021"]}),"\n",(0,i.jsxs)(t.li,{children:["Campaign Code: ",(0,i.jsx)(t.code,{children:"01234"})]}),"\n"]}),(0,i.jsx)(t.p,{children:"As you can see, in under 50 characters, we captured eight different data points and a pretty good picture of the purpose of the asset."}),(0,i.jsx)(t.p,{children:"What is more, the Business Intelligence team will be able to use a simple split by an underscore to capture each element as a separate category to enable filtering and grouping in reporting."})]})]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"special-cases-arent-special-enough-to-break-the-rules-although-practicality-beats-purity",children:"Special cases aren't special enough to break the rules. Although practicality beats purity."}),"\n",(0,i.jsx)(t.p,{children:"Those contradictory lines follow the ancient greek golden middle way philosophy. The thought behind them is pretty straightforward. Whenever you decide to stick to some recommendation or rule (be it from this article or else) - fight the temptation to create exceptions when you encounter the first bump on the road."}),"\n",(0,i.jsx)(t.p,{children:'Sure, it might be easier to ignore the rule when the deadline is near or you have too much to do. It\'s easy to say, "I will align it later". But there is always more work to be done "later", and in the end, you finish with a messy solution that doesn\'t provide the promised value.'}),"\n",(0,i.jsx)(t.p,{children:"On the other hand, following the rules by the book in every single case might stop you from delivering a working solution at all."}),"\n",(0,i.jsxs)(t.p,{children:["That's why we must learn how to follow the rules ",(0,i.jsx)(t.strong,{children:"and"})," when to break them."]}),"\n",(0,i.jsx)(t.p,{children:"So follow the rules as a default, break them only when there is no other option, and refactor them whenever possible."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"errors-should-never-pass-silently-unless-explicitly-silenced",children:"Errors should never pass silently. Unless explicitly silenced."}),"\n",(0,i.jsx)(t.p,{children:"Every solution can encounter some problems or edge cases. You can even be hit with something outside of your control, like server issues. It is why capturing and analysing the errors is so essential."}),"\n",(0,i.jsxs)(t.p,{children:["In terms of code it means proper ",(0,i.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs",children:"debugging and error handling"}),". Especially ",(0,i.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs#error-logging",children:"error logging"})," is good idea to keep up with the potential issues in matured Marketing Cloud solution. You can also protect your solution by creating last resort checks in messaging with the ",(0,i.jsx)(t.code,{children:"RaiseError"})," function."]}),"\n",(0,i.jsx)(t.p,{children:"But there are also platform-based features that capture issues. Journey pre-launch validation, Verification Activity for Automation Studio and its built-in error logging, Send Logs, and Audit Trail. Salesforce Marketing Cloud offers many tools to make sure you are up to speed with the state of your platform, so make sure you use all of them."}),"\n",(0,i.jsx)(t.p,{children:"However, just because you can, it doesn't mean you always need to throw an error. There are some cases where silencing them is the right thing to do. Example?"}),"\n",(0,i.jsx)(t.p,{children:"When sending a personalised email, you might find some contacts with missing data that would error out the send. Ask yourself whether you genuinely want an error in such cases, or rather a dynamic content with non-personalised default will work better."}),"\n",(0,i.jsx)(t.p,{children:"Such workarounds are even more critical for errors on client-facing assets like Cloud Pages. When coding the user experience, check the possible errors and consider which should be visible to the end-user."}),"\n",(0,i.jsx)(t.p,{children:"And - considering the quality of out-of-the-box SFMC errors - always provide custom error messages."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"in-the-face-of-ambiguity-refuse-the-temptation-to-guess-even-when-certain-test",children:"In the face of ambiguity, refuse the temptation to guess. Even when certain, test."}),"\n",(0,i.jsx)(t.p,{children:"With the complexity of Marketing Cloud, cross-cloud integrations, constant platform updates and solution development, there is much room for ambiguity. It's even more significant when you consider how the SFMC is growing - by 3rd party acquisitions and building new features on top of the legacy ones. There is a constant technical debt and multiple frameworks co-existing at the same time. With updates hitting the platform multiple times a year, even with stuff you have already done numerous times in the past - don't assume it will work the same. Don't guess. Check."}),"\n",(0,i.jsxs)(t.p,{children:["There are multiple examples of this risk. SSJS is not-fully-supported ES3 limited by the .NET backend, so you never know which feature will work. SQL is a partial SQL Server 2016 with different behaviour in Script Activity and Query Studio. There are inconsistent approaches within the same solution (for example ",(0,i.jsx)(t.a,{href:"../../sites/ideas/marketing-cloud-ideas/#content-builder-shared-folders-permissions",children:"shared folder permissions"}),"). Unexpected bugs (like incorrect rendering of ",(0,i.jsx)(t.a,{href:"../../sites/ideas/marketing-cloud-ideas/#behavioral-trigger-content-block-rendering-on-yahoo-aol-windows-outlook",children:"Behavioral Triggers"}),"). Temporary issues that change the SSJS function responses for few days."]}),"\n",(0,i.jsx)(t.p,{children:"With all this ambiguity in the system, always check during development and always check again before go-live."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"now-is-better-than-never-although-never-is-often-better-than-right-now",children:"Now is better than never. Although never is often better than right now."}),"\n",(0,i.jsx)(t.p,{children:"When you see an opportunity for improvement or encounter a helpful recommendation, it's a good idea to take a note and implement it to improve the value of your solution. However, fight the temptation to do it instantaneously. Even the enhancement most needed in your solution might break everything if you implement it hastily."}),"\n",(0,i.jsx)(t.p,{children:"Using previous examples:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["If you are not yet using proper ",(0,i.jsx)(t.a,{href:"/docs/ssjs/debugging-ssjs",children:"debugging and error handling"}),", you definitely should implement it. Should you do it ",(0,i.jsx)(t.em,{children:"right"})," now? Well, there are some quirks that you should test beforehand; otherwise, your script might error out and break the existing process."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["If you want to implement the asset ",(0,i.jsx)(t.a,{href:"#naming-conventions-counts-twice",children:"naming convention"}),", definitely start with discovery and cross-department alignment to have a complete picture of needs before creating the naming template. I believe everyone should use the naming convention, but it will be counterproductive if you start using it too fast and later have to update it based on late feedback."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"if-the-implementation-is-hard-to-explain-its-a-bad-idea-if-the-implementation-is-easy-to-explain-it-may-be-a-good-idea",children:"If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea."}),"\n",(0,i.jsx)(t.p,{children:"Marketing Cloud implementation is not something that one can easily explain to a five-year-old. However, if you find it hard to explain it to your colleague or client, it means that the solution is either too complex, too ambiguous, or not understood enough. Each of those cases is dangerous. In the best scenario, it may lead to a non-optimised outcome, in the worst - to a business-breaking crash."}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h3,{id:"documentation-is-one-honking-great-idea---lets-do-more-of-it",children:"Documentation is one honking great idea - let's do more of it!"}),"\n",(0,i.jsx)(t.p,{children:"Writing and maintaining documentation is a pain. I agree. But you know what is even bigger pain? Not having that documentation in the long run. Marketing Automation projects are long term investments. There are change requests, new team members, mistakes and bugs."}),"\n",(0,i.jsx)(t.p,{children:"In the long run, good documentation saves much more time than it takes to create it. With the complexity of the solution and the size of the team operating on it, that value grows exponentially."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1",children:"John F. Woods"}),' once said, "always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live". The same is true for the whole marketing automation solution - and documentation is your best bet at surviving ;)']}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h2,{id:"sum-up",children:"Sum Up"}),"\n",(0,i.jsx)(t.p,{children:"There is a lot of contradictory recommendations above. It's intentional. Zen of SFMC is not a list of rigid rules - it would be impossible with the number of differences between Marketing Cloud customers. Instead, it's a set of flexible guidelines. Treat them as friendly best practices, not absolute rules and adapt them to improve your work."}),"\n",(0,i.jsx)(t.p,{children:"Across all those recommendations, you can see some key recurring ideas:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Make it simple"}),"\n",(0,i.jsx)(t.li,{children:"Make it readable"}),"\n",(0,i.jsx)(t.li,{children:"Make it understandable"}),"\n",(0,i.jsx)(t.li,{children:"Make it maintainable"}),"\n",(0,i.jsx)(t.li,{children:"Make it practical"}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["However, I still love to check the full text of the ",(0,i.jsx)(t.a,{href:"#zen-of-sfmc",children:"zen of SFMC"})," to see how well I aligned my solution with it."]})]})}function m(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},425:(e,t,n)=>{n.d(t,{Z:()=>a});n(7294);var i=n(512);const s={tabItem:"tabItem_Ymn6"};var o=n(5893);function a(e){let{children:t,hidden:n,className:a}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,i.Z)(s.tabItem,a),hidden:n,children:t})}},3992:(e,t,n)=>{n.d(t,{Z:()=>j});var i=n(7294),s=n(512),o=n(2957),a=n(6550),r=n(1270),l=n(5238),c=n(3609),d=n(2560);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:n}=e;return(0,i.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:i,default:s}}=e;return{value:t,label:n,attributes:i,default:s}}))}(n);return function(e){const t=(0,c.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const s=(0,a.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,i.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(s.location.search);t.set(o,e),s.replace({...s.location,search:t.toString()})}),[o,s])]}function g(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,o=u(e),[a,l]=(0,i.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const i=n.find((e=>e.default))??n[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:t,tabValues:o}))),[c,h]=m({queryString:n,groupId:s}),[g,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,o]=(0,d.Nk)(n);return[s,(0,i.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:s}),y=(()=>{const e=c??g;return p({value:e,tabValues:o})?e:null})();(0,r.Z)((()=>{y&&l(y)}),[y]);return{selectedValue:a,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),f(e)}),[h,f,o]),tabValues:o}}var f=n(1048);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function x(e){let{className:t,block:n,selectedValue:i,selectValue:a,tabValues:r}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.o5)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),s=r[n].value;s!==i&&(c(t),a(s))},h=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":n},t),children:r.map((e=>{let{value:t,label:n,attributes:o}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,ref:e=>l.push(e),onKeyDown:h,onClick:d,...o,className:(0,s.Z)("tabs__item",y.tabItem,o?.className,{"tabs__item--active":i===t}),children:n??t},t)}))})}function v(e){let{lazy:t,children:n,selectedValue:s}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,i.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function w(e){const t=g(e);return(0,b.jsxs)("div",{className:(0,s.Z)("tabs-container",y.tabList),children:[(0,b.jsx)(x,{...e,...t}),(0,b.jsx)(v,{...e,...t})]})}function j(e){const t=(0,f.Z)();return(0,b.jsx)(w,{...e,children:h(e.children)},String(t))}},1872:(e,t,n)=>{n.d(t,{m:()=>o});n(7294);const i="leadText_qzwo";var s=n(5893);const o=e=>{let{content:t}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var i=n(7294);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b33fbe49.bec08f3e.js b/assets/js/b33fbe49.643e6335.js similarity index 67% rename from assets/js/b33fbe49.bec08f3e.js rename to assets/js/b33fbe49.643e6335.js index 787c82f05..19c010143 100644 --- a/assets/js/b33fbe49.bec08f3e.js +++ b/assets/js/b33fbe49.643e6335.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3275],{6543:e=>{e.exports=JSON.parse('{"title":"MCP Serverside Code","description":"Guides focused on various aspects of Salesforce Marketing Cloud Personalization (Interaction Studio) Serverside Code.","image":"img/og/og-image-mcp-serverside-code.png","keywords":["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"],"slug":"/category/serverside-code","permalink":"/docs/category/serverside-code","navigation":{"previous":{"title":"Open Time Email","permalink":"/docs/interaction-studio/mcp-open-time-email"},"next":{"title":"Serverside Code Basics","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3275],{6543:e=>{e.exports=JSON.parse('{"title":"MCP Serverside Code","description":"Guides focused on various aspects of Salesforce Marketing Cloud Personalization (Interaction Studio) Serverside Code.","image":"img/og/og-image-mcp-serverside-code.png","keywords":["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","TypeScript"],"slug":"/category/serverside-code","permalink":"/docs/category/serverside-code","navigation":{"previous":{"title":"Catalog Architecture","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},"next":{"title":"Serverside Code Basics","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b39e9a29.37e14d41.js b/assets/js/b39e9a29.37e14d41.js new file mode 100644 index 000000000..06899f0bb --- /dev/null +++ b/assets/js/b39e9a29.37e14d41.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[924],{6402:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var t=n(5893),i=n(1151),r=n(1872);const o={id:"sfmc-sql-select",title:"SFMC SQL Select",sidebar_label:"Select",description:"Selected information on the SELECT statement in SFMC SQL.",image:"img/og/og-image-sql-select.png",tags:["Marketing Cloud","SQL"]},l=void 0,c={id:"sql/sfmc-sql-select",title:"SFMC SQL Select",description:"Selected information on the SELECT statement in SFMC SQL.",source:"@site/docs/sql/sfmc-sql-select.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-select",permalink:"/docs/sql/sfmc-sql-select",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-select.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-select",title:"SFMC SQL Select",sidebar_label:"Select",description:"Selected information on the SELECT statement in SFMC SQL.",image:"img/og/og-image-sql-select.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"SQL Basics",permalink:"/docs/sql/sfmc-sql-basics"},next:{title:"From",permalink:"/docs/sql/sfmc-sql-from"}},a={},d=[{value:"Aliasing with AS",id:"aliasing-with-as",level:2},{value:"Custom values",id:"custom-values",level:3},{value:"TOP",id:"top",level:2},{value:"TOP PERCENT",id:"top-percent",level:3},{value:"TOP with ORDER BY",id:"top-with-order-by",level:3},{value:"TOP WITH TIES",id:"top-with-ties",level:3},{value:"DISTINCT",id:"distinct",level:2},{value:"DISTINCT with TOP",id:"distinct-with-top",level:3},{value:"Table Prefixes",id:"table-prefixes",level:2},{value:"Flow control",id:"flow-control",level:2},{value:"Variables & Functions",id:"variables--functions",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.m,{content:"Selected information on the SELECT statement in SFMC SQL"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"SELECT"})," statement opens each query. It picks the columns from the source data extensions and system data views and allows you to create entirely new data points."]}),"\n",(0,t.jsxs)(s.p,{children:["The simplest version of this statement is ",(0,t.jsx)(s.code,{children:"SELECT *"}),", which targets all available columns from the source. I do not recommend this approach, as it is terrible for your query's readability and performance. As Salesforce Marketing Cloud caches the source Data Extension column names when you save SQL Query Activity, you won't have added value of flexible selection. You will still have to edit and save the activity. Also, ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-basics#query-studio",children:"Query Studio"})," does not support this shortcut. Don't use ",(0,t.jsx)(s.code,{children:"*"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"The prefered method is targeting columns explicitly by their names:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'title="Select ContactKey and EmailAddress columns"',children:"SELECT\n ContactKey\n , EmailAddres\n"})}),"\n",(0,t.jsx)(s.p,{children:"If a column name contains a space, hyphen or is a SQL's reserved keyword, you need to capture it with squared brackets:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4} title="Let\'s add another column with whitespace in its name"',children:"SELECT\n ContactKey\n , EmailAddres\n , [External Contact Id]\n"})}),"\n",(0,t.jsxs)(s.p,{children:["There are also some exceptional cases related to selected ",(0,t.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views",children:"System Data Views"})," in Salesforce Marketing Cloud, where you need to use an underscore prefix before a name (for example, when taking Subscriber ID from Enterprise Attributes):"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'title="There are some special column names with an underscore prefix"',children:"SELECT _SubscriberId\n"})}),"\n",(0,t.jsx)(s.h2,{id:"aliasing-with-as",children:"Aliasing with AS"}),"\n",(0,t.jsxs)(s.p,{children:["You can also utilise ",(0,t.jsx)(s.code,{children:"SELECT"})," as a tool to rename the source columns to match your needs in an outcome data extension. It is especially useful when pulling the data from Synchronized Data Extension with names coming from Salesforce custom fields."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4-5} title="Improve readability and consistency with aliasing"',children:"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n"})}),"\n",(0,t.jsx)(s.h3,{id:"custom-values",children:"Custom values"}),"\n",(0,t.jsx)(s.p,{children:"Use aliases also for passing new values directly from your query. Need to add a custom string to outcome data extension? Or maybe synchronisation timestamp for debugging purposes? You can leverage SQL for it."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:"{6-7} title=\"Add custom column aliased 'ImportDate' with a value equal to the UTC of the script execution for each record\"",children:"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n"})}),"\n",(0,t.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsx)(s.p,{children:"You can even go further by creating new values by leveraging existing data! For example, if you have a first name and last name, you can use SQL to create a FullName column from scratch:"}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4} title="Let\'s create a concatenated column for easier personalisation"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , FirstName + ' ' + LastName AS FullName\n"})}),(0,t.jsxs)(s.p,{children:["It becomes mighty with the ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions",children:"SQL String functions"}),"."]})]}),"\n",(0,t.jsx)(s.h2,{id:"top",children:"TOP"}),"\n",(0,t.jsxs)(s.p,{children:["You can add a ",(0,t.jsx)(s.code,{children:"TOP"})," clause to your ",(0,t.jsx)(s.code,{children:"SELECT"})," statement to limit the number of rows returned by your query."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{1} title="Returns 10 rows"',children:"SELECT TOP 10\n SubscriberKey\n , PreferredChannel\n , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact\n"})}),"\n",(0,t.jsx)(s.h3,{id:"top-percent",children:"TOP PERCENT"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"TOP"})," clause is not limited to an integer; you can also ask for a specific per cent of rows with ",(0,t.jsx)(s.code,{children:"PERCENT"})," modifier:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:"{1}",children:"SELECT TOP 10 PERCENT\n SubscriberKey\n , PreferredChannel\n , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The number of rows will be rounded up to the nearest integer (so ",(0,t.jsx)(s.code,{children:"TOP 50 PERCENT"})," from Data Extension with 101 rows will return 51 rows)."]}),"\n",(0,t.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"PERCENT"})," modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity."]})}),"\n",(0,t.jsx)(s.h3,{id:"top-with-order-by",children:"TOP with ORDER BY"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"TOP"})," clause best practice is to always use it with ",(0,t.jsx)(s.code,{children:"ORDER BY"}),". Only with sorted data, you will understand rows selection logic."]}),"\n",(0,t.jsxs)(s.p,{children:["To sort outcomes of your query, add ",(0,t.jsx)(s.code,{children:"ORDER BY"})," at the end - along with column(s) that used for sorting."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4} title="Top 10% with the lowest Quiz Score"',children:"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY QuizScore\n"})}),"\n",(0,t.jsxs)(s.p,{children:["You can control the sort order by applying ",(0,t.jsx)(s.code,{children:"ASC"})," (default) and ",(0,t.jsx)(s.code,{children:"DESC"})," after the column."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4} title="Top 10% with highest Quiz Score"',children:"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC\n"})}),"\n",(0,t.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"ORDER BY"})," sorts Text fields alphabetically. It might surprise you if you store numbers in such field type, as it will order ",(0,t.jsx)(s.code,{children:"10"})," before ",(0,t.jsx)(s.code,{children:"2"}),"."]}),(0,t.jsxs)(s.p,{children:["The best solution is to use the appropriate field type for numbers. However, if for whatever reason you cannot do it, leverage ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-conversion-functions#convert",children:(0,t.jsx)(s.code,{children:"CONVERT"})}),":"]}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4} title="Top 10% with highest Quiz Score if QuizScore is a Text field"',children:"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY CONVERT(INT, QuizScore) DESC\n"})}),(0,t.jsxs)(s.p,{children:["For example, it will be needed when you ",(0,t.jsx)(s.code,{children:"ORDER BY"})," ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#count",children:(0,t.jsx)(s.code,{children:"COUNT"})})," within ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#group-by",children:(0,t.jsx)(s.code,{children:"GROUP BY"})}),"."]}),(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"ORDER BY"})," will also sort dates in Marketing Cloud alphabetically using month(start with ",(0,t.jsx)(s.code,{children:"Apr"}),", follow up with ",(0,t.jsx)(s.code,{children:"Aug"})," and so on). You can fix it by using ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-conversion-functions#convert",children:(0,t.jsx)(s.code,{children:"CONVERT"})})," to ",(0,t.jsx)(s.code,{children:"DATE"})," (if you to order only by date) or ",(0,t.jsx)(s.code,{children:"DATETIME2"})," (if time is important for ordering as well), just as in previous example."]})]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"ORDER BY"})," can operate not only on the selected column. You already saw above that you can use expression (even ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case#conditional-values-with-case",children:(0,t.jsx)(s.code,{children:"CASE"})}),"!) to calculate the sorting value, but it's much more flexible."]}),"\n",(0,t.jsxs)(s.p,{children:["You can sort using a column not picked in ",(0,t.jsx)(s.code,{children:"SELECT"}),":"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{3} title="Top 10% with highest Quiz Score, without returning the score"',children:"SELECT TOP 10 PERCENT\n SubscriberKey\nORDER BY QuizScore DESC\n"})}),"\n",(0,t.jsxs)(s.p,{children:["You can sort using an ",(0,t.jsx)(s.a,{href:"#aliasing-with-as",children:"alias"})," defined in the ",(0,t.jsx)(s.code,{children:"SELECT"})," statement:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{3-4} title="Top 10% with highest Quiz Score, using an alias"',children:"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore AS Points\nORDER BY Points DESC\n"})}),"\n",(0,t.jsx)(s.p,{children:"And you can even sort using multiple values - each can have different sorting order."}),"\n",(0,t.jsx)(s.p,{children:"SQL will sort using the first provided column and then, while maintaining the order of the previous column, will sort again using the next value. Let's jump to an example:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{4} title="Top 10% with highest Quiz Score, first to solve"',children:"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC, QuizFilledDate ASC\n"})}),"\n",(0,t.jsx)(s.p,{children:"The query will first sort using QuizScore to find people with the most points. Next, it will apply the second sort on the date of quiz completion. As an outcome, we will have the highest scorers sorted from first to last within each high score."}),"\n",(0,t.jsx)(s.h3,{id:"top-with-ties",children:"TOP WITH TIES"}),"\n",(0,t.jsx)(s.p,{children:"Sometimes even such complex sorting might not be enough."}),"\n",(0,t.jsx)(s.p,{children:"For example, let's capture three top scorers of our quiz:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'title="Three top scorers"',children:"SELECT TOP 3\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC\n"})}),"\n",(0,t.jsx)(s.p,{children:"As an outcome, we got:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"SubscriberKey"}),(0,t.jsx)(s.th,{children:"QuizScore"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"XYZ"}),(0,t.jsx)(s.td,{children:"97"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"ACE"}),(0,t.jsx)(s.td,{children:"97"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"PIL"}),(0,t.jsx)(s.td,{children:"96"})]})]})]}),"\n",(0,t.jsx)(s.p,{children:"However, if we check our Data Extension, we could see more people with the same score:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"SubscriberKey"}),(0,t.jsx)(s.th,{children:"QuizScore"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"XYZ"}),(0,t.jsx)(s.td,{children:"97"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"ACE"}),(0,t.jsx)(s.td,{children:"97"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"PIL"}),(0,t.jsx)(s.td,{children:"96"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"UDO"}),(0,t.jsx)(s.td,{children:"96"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"SDJ"}),(0,t.jsx)(s.td,{children:"96"})]})]})]}),"\n",(0,t.jsxs)(s.p,{children:["What can we do to capture everyone with a score good enough for the Top 3 status? ",(0,t.jsx)(s.code,{children:"WITH TIES"})," will help:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'title="Despite asking for TOP 3, it will return 5 rows due to ties"',children:"SELECT TOP 3 WITH TIES\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC\n"})}),"\n",(0,t.jsxs)(s.p,{children:["With those two words added after the ",(0,t.jsx)(s.code,{children:"TOP"})," clause, our query will return all rows that match the sorted value in the last row. It, however, means that the number of outcomes is not set in stone, so be sure to prepare your next steps for that uncertainty."]}),"\n",(0,t.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"WITH TIES"})," modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity."]})}),"\n",(0,t.jsx)(s.h2,{id:"distinct",children:"DISTINCT"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"DISTINCT"})," clause is the most straightforward deduplication tool."]}),"\n",(0,t.jsxs)(s.p,{children:["When added to the ",(0,t.jsx)(s.code,{children:"SELECT"})," statement, it will check all available values and leave unique ones."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{1} title="Unique domains in your database sorted alphabetically"',children:"SELECT DISTINCT\n Domain\nORDER BY Domain\n"})}),"\n",(0,t.jsx)(s.p,{children:"It's perfect for single-column deduplication. However, when you apply it to a select with multiple columns, it will leverage all of them for deduplication."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:'{1} title="One row for each SubscriberKey - Domain pair, sorted alphabetically by domain"',children:"SELECT DISTINCT\n SubscriberKey\n , Domain\nORDER BY Domain\n"})}),"\n",(0,t.jsx)(s.p,{children:"In the above case, you will get a separate row for each Subscriber Key - Domain pair. It means that you might receive multiple rows with the same Subscriber Key (but each with a different Domain). And you will undoubtedly see numerous rows with the same domain (but each with a different Subscriber key)."}),"\n",(0,t.jsx)(s.h3,{id:"distinct-with-top",children:"DISTINCT with TOP"}),"\n",(0,t.jsxs)(s.p,{children:["You can use both ",(0,t.jsx)(s.code,{children:"DISTINCT"})," and ",(0,t.jsx)(s.code,{children:"TOP"})," in the same query."]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",metastring:"{1}",children:"SELECT DISTINCT TOP 10 PERCENT\n Domain\nORDER BY Domain\n"})}),"\n",(0,t.jsxs)(s.p,{children:["SQL will first deduplicate the results using ",(0,t.jsx)(s.code,{children:"DISTINCT"})," and then limit output with ",(0,t.jsx)(s.code,{children:"TOP"}),"."]}),"\n",(0,t.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,t.jsxs)(s.p,{children:["There is an important exception from stadard rules if you are using ",(0,t.jsx)(s.code,{children:"DISTINCT"})," and ",(0,t.jsx)(s.code,{children:"ORDER BY"})," in the same query. You have to add all columns used for sorting to the ",(0,t.jsx)(s.code,{children:"SELECT"}),", which might have painful impact on your deduplication rules."]})}),"\n",(0,t.jsx)(s.h2,{id:"table-prefixes",children:"Table Prefixes"}),"\n",(0,t.jsx)(s.p,{children:"Additional elements that you will be using in many of your queries are table prefixes for selecting columns from multiple joined Data Extensions."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-sql",children:"SELECT\n _Subscriber.SubscriberKey\n , _EnterpriseAttribute.LastName\n"})}),"\n",(0,t.jsxs)(s.p,{children:["I'm covering this topic in-depth in ",(0,t.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-join#table-name-prefix",children:[(0,t.jsx)(s.code,{children:"JOIN"})," statement documentation"]}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"flow-control",children:"Flow control"}),"\n",(0,t.jsxs)(s.p,{children:["Despite official ",(0,t.jsx)(s.a,{href:"https://help.salesforce.com/articleView?id=mc_as_sql_reference.htm&type=5",children:"SFMC SQL documentation"})," stating that it supports the ",(0,t.jsx)(s.code,{children:"IF"})," constructs, I could not make it work."]}),"\n",(0,t.jsx)(s.h2,{id:"variables--functions",children:"Variables & Functions"}),"\n",(0,t.jsx)(s.p,{children:"Unfortunately, SFMC SQL does not support variables."}),"\n",(0,t.jsxs)(s.p,{children:["Fortunately, it does support (selected) functions. Learn more about them in SFMC SQL Functions documentation pages related to ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions",children:"Strings"}),", ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions",children:"Dates"}),", ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-numeric-functions",children:"Numbers"}),", ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-conversion-functions",children:"Conversion"}),", ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions",children:"Aggregation"}),", ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case",children:(0,t.jsx)(s.code,{children:"CASE"})})," and ",(0,t.jsx)(s.a,{href:"/docs/sql/sfmc-sql-like",children:(0,t.jsx)(s.code,{children:"LIKE"})}),"."]})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},1872:(e,s,n)=>{n.d(s,{m:()=>r});n(7294);const t="leadText_qzwo";var i=n(5893);const r=e=>{let{content:s}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:t,children:s})})}},1151:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>o});var t=n(7294);const i={},r=t.createContext(i);function o(e){const s=t.useContext(r);return t.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(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b39e9a29.8736aa8d.js b/assets/js/b39e9a29.8736aa8d.js deleted file mode 100644 index e46e48b43..000000000 --- a/assets/js/b39e9a29.8736aa8d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[924],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(n),d=r,h=c["".concat(s,".").concat(d)]||c[d]||m[d]||i;return n?a.createElement(h,o(o({ref:t},p),{},{components:n})):a.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,o[1]=l;for(var u=2;u<i;u++)o[u]=n[u];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>i});var a=n(7294);const r="leadText_qzwo",i=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}},6718:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(4137)),i=n(1872);const o={id:"sfmc-sql-select",title:"SFMC SQL Select",sidebar_label:"Select",description:"Selected information on the SELECT statement in SFMC SQL.",image:"img/og/og-image-sql-select.png",tags:["Marketing Cloud","SQL"]},l=void 0,s={unversionedId:"sql/sfmc-sql-select",id:"sql/sfmc-sql-select",title:"SFMC SQL Select",description:"Selected information on the SELECT statement in SFMC SQL.",source:"@site/docs/sql/sfmc-sql-select.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-select",permalink:"/docs/sql/sfmc-sql-select",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-select.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-sql-select",title:"SFMC SQL Select",sidebar_label:"Select",description:"Selected information on the SELECT statement in SFMC SQL.",image:"img/og/og-image-sql-select.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"SQL Basics",permalink:"/docs/sql/sfmc-sql-basics"},next:{title:"From",permalink:"/docs/sql/sfmc-sql-from"}},u={},p=[{value:"Aliasing with AS",id:"aliasing-with-as",level:2},{value:"Custom values",id:"custom-values",level:3},{value:"TOP",id:"top",level:2},{value:"TOP PERCENT",id:"top-percent",level:3},{value:"TOP with ORDER BY",id:"top-with-order-by",level:3},{value:"TOP WITH TIES",id:"top-with-ties",level:3},{value:"DISTINCT",id:"distinct",level:2},{value:"DISTINCT with TOP",id:"distinct-with-top",level:3},{value:"Table Prefixes",id:"table-prefixes",level:2},{value:"Flow control",id:"flow-control",level:2},{value:"Variables & Functions",id:"variables--functions",level:2}],c={toc:p},m="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.m,{content:"Selected information on the SELECT statement in SFMC SQL",mdxType:"LeadText"}),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," statement opens each query. It picks the columns from the source data extensions and system data views and allows you to create entirely new data points."),(0,r.kt)("p",null,"The simplest version of this statement is ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT *"),", which targets all available columns from the source. I do not recommend this approach, as it is terrible for your query's readability and performance. As Salesforce Marketing Cloud caches the source Data Extension column names when you save SQL Query Activity, you won't have added value of flexible selection. You will still have to edit and save the activity. Also, ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics#query-studio"},"Query Studio")," does not support this shortcut. Don't use ",(0,r.kt)("inlineCode",{parentName:"p"},"*"),"."),(0,r.kt)("p",null,"The prefered method is targeting columns explicitly by their names:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Select ContactKey and EmailAddress columns"',title:'"Select',ContactKey:!0,and:!0,EmailAddress:!0,'columns"':!0},"SELECT\n ContactKey\n , EmailAddres\n")),(0,r.kt)("p",null,"If a column name contains a space, hyphen or is a SQL's reserved keyword, you need to capture it with squared brackets:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Let\'s add another column with whitespace in its name"',"{4}":!0,title:"\"Let's",add:!0,another:!0,column:!0,with:!0,whitespace:!0,in:!0,its:!0,'name"':!0},"SELECT\n ContactKey\n , EmailAddres\n , [External Contact Id]\n")),(0,r.kt)("p",null,"There are also some exceptional cases related to selected ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views"},"System Data Views")," in Salesforce Marketing Cloud, where you need to use an underscore prefix before a name (for example, when taking Subscriber ID from Enterprise Attributes):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="There are some special column names with an underscore prefix"',title:'"There',are:!0,some:!0,special:!0,column:!0,names:!0,with:!0,an:!0,underscore:!0,'prefix"':!0},"SELECT _SubscriberId\n")),(0,r.kt)("h2",{id:"aliasing-with-as"},"Aliasing with AS"),(0,r.kt)("p",null,"You can also utilise ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," as a tool to rename the source columns to match your needs in an outcome data extension. It is especially useful when pulling the data from Synchronized Data Extension with names coming from Salesforce custom fields."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4-5} title="Improve readability and consistency with aliasing"',"{4-5}":!0,title:'"Improve',readability:!0,and:!0,consistency:!0,with:!0,'aliasing"':!0},"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n")),(0,r.kt)("h3",{id:"custom-values"},"Custom values"),(0,r.kt)("p",null,"Use aliases also for passing new values directly from your query. Need to add a custom string to outcome data extension? Or maybe synchronisation timestamp for debugging purposes? You can leverage SQL for it."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6-7} title=\"Add custom column aliased 'ImportDate' with a value equal to the UTC of the script execution for each record\"","{6-7}":!0,title:'"Add',custom:!0,column:!0,aliased:!0,"'ImportDate'":!0,with:!0,a:!0,value:!0,equal:!0,to:!0,the:!0,UTC:!0,of:!0,script:!0,execution:!0,for:!0,each:!0,'record"':!0},"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can even go further by creating new values by leveraging existing data! For example, if you have a first name and last name, you can use SQL to create a FullName column from scratch:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Let\'s create a concatenated column for easier personalisation"',"{4}":!0,title:"\"Let's",create:!0,a:!0,concatenated:!0,column:!0,for:!0,easier:!0,'personalisation"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , FirstName + ' ' + LastName AS FullName\n")),(0,r.kt)("p",{parentName:"admonition"},"It becomes mighty with the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions"},"SQL String functions"),".")),(0,r.kt)("h2",{id:"top"},"TOP"),(0,r.kt)("p",null,"You can add a ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP")," clause to your ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," statement to limit the number of rows returned by your query."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",10:!0,className:"language-sql",metastring:'{1} title="Returns 10 rows"',"{1}":!0,title:'"Returns','rows"':!0},"SELECT TOP 10\n SubscriberKey\n , PreferredChannel\n , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact\n")),(0,r.kt)("h3",{id:"top-percent"},"TOP PERCENT"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP")," clause is not limited to an integer; you can also ask for a specific per cent of rows with ",(0,r.kt)("inlineCode",{parentName:"p"},"PERCENT")," modifier:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{1}","{1}":!0},"SELECT TOP 10 PERCENT\n SubscriberKey\n , PreferredChannel\n , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact\n")),(0,r.kt)("p",null,"The number of rows will be rounded up to the nearest integer (so ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP 50 PERCENT")," from Data Extension with 101 rows will return 51 rows)."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"PERCENT")," modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity.")),(0,r.kt)("h3",{id:"top-with-order-by"},"TOP with ORDER BY"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP")," clause best practice is to always use it with ",(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY"),". Only with sorted data, you will understand rows selection logic."),(0,r.kt)("p",null,"To sort outcomes of your query, add ",(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY")," at the end - along with column(s) that used for sorting."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Top 10% with the lowest Quiz Score"',"{4}":!0,title:'"Top',"10%":!0,with:!0,the:!0,lowest:!0,Quiz:!0,'Score"':!0},"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY QuizScore\n")),(0,r.kt)("p",null,"You can control the sort order by applying ",(0,r.kt)("inlineCode",{parentName:"p"},"ASC")," (default) and ",(0,r.kt)("inlineCode",{parentName:"p"},"DESC")," after the column."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Top 10% with highest Quiz Score"',"{4}":!0,title:'"Top',"10%":!0,with:!0,highest:!0,Quiz:!0,'Score"':!0},"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY")," sorts Text fields alphabetically. It might surprise you if you store numbers in such field type, as it will order ",(0,r.kt)("inlineCode",{parentName:"p"},"10")," before ",(0,r.kt)("inlineCode",{parentName:"p"},"2"),"."),(0,r.kt)("p",{parentName:"admonition"},"The best solution is to use the appropriate field type for numbers. However, if for whatever reason you cannot do it, leverage ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#convert"},(0,r.kt)("inlineCode",{parentName:"a"},"CONVERT")),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Top 10% with highest Quiz Score if QuizScore is a Text field"',"{4}":!0,title:'"Top',"10%":!0,with:!0,highest:!0,Quiz:!0,Score:!0,if:!0,QuizScore:!0,is:!0,a:!0,Text:!0,'field"':!0},"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY CONVERT(INT, QuizScore) DESC\n")),(0,r.kt)("p",{parentName:"admonition"},"For example, it will be needed when you ",(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY")," ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions#count"},(0,r.kt)("inlineCode",{parentName:"a"},"COUNT"))," within ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions#group-by"},(0,r.kt)("inlineCode",{parentName:"a"},"GROUP BY")),"."),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY")," will also sort dates in Marketing Cloud alphabetically using month(start with ",(0,r.kt)("inlineCode",{parentName:"p"},"Apr"),", follow up with ",(0,r.kt)("inlineCode",{parentName:"p"},"Aug")," and so on). You can fix it by using ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#convert"},(0,r.kt)("inlineCode",{parentName:"a"},"CONVERT"))," to ",(0,r.kt)("inlineCode",{parentName:"p"},"DATE")," (if you to order only by date) or ",(0,r.kt)("inlineCode",{parentName:"p"},"DATETIME2")," (if time is important for ordering as well), just as in previous example.")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY")," can operate not only on the selected column. You already saw above that you can use expression (even ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#conditional-values-with-case"},(0,r.kt)("inlineCode",{parentName:"a"},"CASE")),"!) to calculate the sorting value, but it's much more flexible."),(0,r.kt)("p",null,"You can sort using a column not picked in ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Top 10% with highest Quiz Score, without returning the score"',"{3}":!0,title:'"Top',"10%":!0,with:!0,highest:!0,Quiz:!0,"Score,":!0,without:!0,returning:!0,the:!0,'score"':!0},"SELECT TOP 10 PERCENT\n SubscriberKey\nORDER BY QuizScore DESC\n")),(0,r.kt)("p",null,"You can sort using an ",(0,r.kt)("a",{parentName:"p",href:"#aliasing-with-as"},"alias")," defined in the ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," statement:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3-4} title="Top 10% with highest Quiz Score, using an alias"',"{3-4}":!0,title:'"Top',"10%":!0,with:!0,highest:!0,Quiz:!0,"Score,":!0,using:!0,an:!0,'alias"':!0},"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore AS Points\nORDER BY Points DESC\n")),(0,r.kt)("p",null,"And you can even sort using multiple values - each can have different sorting order."),(0,r.kt)("p",null,"SQL will sort using the first provided column and then, while maintaining the order of the previous column, will sort again using the next value. Let's jump to an example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Top 10% with highest Quiz Score, first to solve"',"{4}":!0,title:'"Top',"10%":!0,with:!0,highest:!0,Quiz:!0,"Score,":!0,first:!0,to:!0,'solve"':!0},"SELECT TOP 10 PERCENT\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC, QuizFilledDate ASC\n")),(0,r.kt)("p",null,"The query will first sort using QuizScore to find people with the most points. Next, it will apply the second sort on the date of quiz completion. As an outcome, we will have the highest scorers sorted from first to last within each high score."),(0,r.kt)("h3",{id:"top-with-ties"},"TOP WITH TIES"),(0,r.kt)("p",null,"Sometimes even such complex sorting might not be enough."),(0,r.kt)("p",null,"For example, let's capture three top scorers of our quiz:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Three top scorers"',title:'"Three',top:!0,'scorers"':!0},"SELECT TOP 3\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC\n")),(0,r.kt)("p",null,"As an outcome, we got:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("th",{parentName:"tr",align:null},"QuizScore"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"XYZ"),(0,r.kt)("td",{parentName:"tr",align:null},"97")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ACE"),(0,r.kt)("td",{parentName:"tr",align:null},"97")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"PIL"),(0,r.kt)("td",{parentName:"tr",align:null},"96")))),(0,r.kt)("p",null,"However, if we check our Data Extension, we could see more people with the same score:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("th",{parentName:"tr",align:null},"QuizScore"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"XYZ"),(0,r.kt)("td",{parentName:"tr",align:null},"97")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ACE"),(0,r.kt)("td",{parentName:"tr",align:null},"97")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"PIL"),(0,r.kt)("td",{parentName:"tr",align:null},"96")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"UDO"),(0,r.kt)("td",{parentName:"tr",align:null},"96")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SDJ"),(0,r.kt)("td",{parentName:"tr",align:null},"96")))),(0,r.kt)("p",null,"What can we do to capture everyone with a score good enough for the Top 3 status? ",(0,r.kt)("inlineCode",{parentName:"p"},"WITH TIES")," will help:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",5:!0,className:"language-sql",metastring:'title="Despite asking for TOP 3, it will return 5 rows due to ties"',title:'"Despite',asking:!0,for:!0,TOP:!0,"3,":!0,it:!0,will:!0,return:!0,rows:!0,due:!0,to:!0,'ties"':!0},"SELECT TOP 3 WITH TIES\n SubscriberKey\n , QuizScore\nORDER BY QuizScore DESC\n")),(0,r.kt)("p",null,"With those two words added after the ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP")," clause, our query will return all rows that match the sorted value in the last row. It, however, means that the number of outcomes is not set in stone, so be sure to prepare your next steps for that uncertainty."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"WITH TIES")," modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity.")),(0,r.kt)("h2",{id:"distinct"},"DISTINCT"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"DISTINCT")," clause is the most straightforward deduplication tool."),(0,r.kt)("p",null,"When added to the ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," statement, it will check all available values and leave unique ones."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="Unique domains in your database sorted alphabetically"',"{1}":!0,title:'"Unique',domains:!0,in:!0,your:!0,database:!0,sorted:!0,'alphabetically"':!0},"SELECT DISTINCT\n Domain\nORDER BY Domain\n")),(0,r.kt)("p",null,"It's perfect for single-column deduplication. However, when you apply it to a select with multiple columns, it will leverage all of them for deduplication."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="One row for each SubscriberKey - Domain pair, sorted alphabetically by domain"',"{1}":!0,title:'"One',row:!0,for:!0,each:!0,SubscriberKey:!0,"-":!0,Domain:!0,"pair,":!0,sorted:!0,alphabetically:!0,by:!0,'domain"':!0},"SELECT DISTINCT\n SubscriberKey\n , Domain\nORDER BY Domain\n")),(0,r.kt)("p",null,"In the above case, you will get a separate row for each Subscriber Key - Domain pair. It means that you might receive multiple rows with the same Subscriber Key (but each with a different Domain). And you will undoubtedly see numerous rows with the same domain (but each with a different Subscriber key)."),(0,r.kt)("h3",{id:"distinct-with-top"},"DISTINCT with TOP"),(0,r.kt)("p",null,"You can use both ",(0,r.kt)("inlineCode",{parentName:"p"},"DISTINCT")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP")," in the same query."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{1}","{1}":!0},"SELECT DISTINCT TOP 10 PERCENT\n Domain\nORDER BY Domain\n")),(0,r.kt)("p",null,"SQL will first deduplicate the results using ",(0,r.kt)("inlineCode",{parentName:"p"},"DISTINCT")," and then limit output with ",(0,r.kt)("inlineCode",{parentName:"p"},"TOP"),"."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There is an important exception from stadard rules if you are using ",(0,r.kt)("inlineCode",{parentName:"p"},"DISTINCT")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"ORDER BY")," in the same query. You have to add all columns used for sorting to the ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT"),", which might have painful impact on your deduplication rules.")),(0,r.kt)("h2",{id:"table-prefixes"},"Table Prefixes"),(0,r.kt)("p",null,"Additional elements that you will be using in many of your queries are table prefixes for selecting columns from multiple joined Data Extensions."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n _Subscriber.SubscriberKey\n , _EnterpriseAttribute.LastName\n")),(0,r.kt)("p",null,"I'm covering this topic in-depth in ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join#table-name-prefix"},(0,r.kt)("inlineCode",{parentName:"a"},"JOIN")," statement documentation"),"."),(0,r.kt)("h2",{id:"flow-control"},"Flow control"),(0,r.kt)("p",null,"Despite official ",(0,r.kt)("a",{parentName:"p",href:"https://help.salesforce.com/articleView?id=mc_as_sql_reference.htm&type=5"},"SFMC SQL documentation")," stating that it supports the ",(0,r.kt)("inlineCode",{parentName:"p"},"IF")," constructs, I could not make it work."),(0,r.kt)("h2",{id:"variables--functions"},"Variables & Functions"),(0,r.kt)("p",null,"Unfortunately, SFMC SQL does not support variables."),(0,r.kt)("p",null,"Fortunately, it does support (selected) functions. Learn more about them in SFMC SQL Functions documentation pages related to ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions"},"Strings"),", ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions"},"Dates"),", ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-numeric-functions"},"Numbers"),", ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions"},"Conversion"),", ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions"},"Aggregation"),", ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case"},(0,r.kt)("inlineCode",{parentName:"a"},"CASE"))," and ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-like"},(0,r.kt)("inlineCode",{parentName:"a"},"LIKE")),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b463a77c.2afc4922.js b/assets/js/b463a77c.b5a80d88.js similarity index 69% rename from assets/js/b463a77c.2afc4922.js rename to assets/js/b463a77c.b5a80d88.js index 6c5e7deee..e5024aef3 100644 --- a/assets/js/b463a77c.2afc4922.js +++ b/assets/js/b463a77c.b5a80d88.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2618],{5816:e=>{e.exports=JSON.parse('{"label":"Behavioral Triggers","permalink":"/docs/tags/behavioral-triggers","allTagsPath":"/docs/tags","count":1,"items":[{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2618],{3170:e=>{e.exports=JSON.parse('{"label":"Behavioral Triggers","permalink":"/docs/tags/behavioral-triggers","allTagsPath":"/docs/tags","count":1,"items":[{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/b52e5d8d.ba7e203c.js b/assets/js/b52e5d8d.ba7e203c.js deleted file mode 100644 index bb74ee684..000000000 --- a/assets/js/b52e5d8d.ba7e203c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8693],{4137:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?l(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function o(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},l=Object.keys(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var s=n.createContext({}),d=function(t){var e=n.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=d(t.components);return n.createElement(s.Provider,{value:e},t.children)},m="mdxType",p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,s=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),m=d(a),c=r,k=m["".concat(s,".").concat(c)]||m[c]||p[c]||l;return a?n.createElement(k,i(i({ref:e},u),{},{components:a})):n.createElement(k,i({ref:e},u))}));function k(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=c;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[m]="string"==typeof t?t:r,i[1]=o;for(var d=2;d<l;d++)i[d]=a[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},1872:(t,e,a)=>{a.d(e,{m:()=>l});var n=a(7294);const r="leadText_qzwo",l=t=>{let{content:e}=t;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},e))}},5671:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var n=a(7462),r=(a(7294),a(4137)),l=a(1872);const i={id:"sfmc-features-on-demand",title:"SFMC Features On Demand",sidebar_label:"Features On Demand",description:"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.",image:"img/og/og-image-sfmc-features-on-demand.png",tags:["Marketing Cloud","Configuration","Deliverability","Email","SMS","Analytics","Journey","Automation","Data Extensions","Setup"]},o=void 0,s={unversionedId:"config/sfmc-features-on-demand",id:"config/sfmc-features-on-demand",title:"SFMC Features On Demand",description:"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.",source:"@site/docs/config/sfmc-features-on-demand.mdx",sourceDirName:"config",slug:"/config/sfmc-features-on-demand",permalink:"/docs/config/sfmc-features-on-demand",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-features-on-demand.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Deliverability",permalink:"/docs/tags/deliverability"},{label:"Email",permalink:"/docs/tags/email"},{label:"SMS",permalink:"/docs/tags/sms"},{label:"Analytics",permalink:"/docs/tags/analytics"},{label:"Journey",permalink:"/docs/tags/journey"},{label:"Automation",permalink:"/docs/tags/automation"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Setup",permalink:"/docs/tags/setup"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1690842936,formattedLastUpdatedAt:"Jul 31, 2023",frontMatter:{id:"sfmc-features-on-demand",title:"SFMC Features On Demand",sidebar_label:"Features On Demand",description:"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.",image:"img/og/og-image-sfmc-features-on-demand.png",tags:["Marketing Cloud","Configuration","Deliverability","Email","SMS","Analytics","Journey","Automation","Data Extensions","Setup"]},sidebar:"docs",previous:{title:"AppExchange Solutions",permalink:"/docs/config/sfmc-appexchange-solutions"},next:{title:"MC Personalization",permalink:"/docs/category/mc-personalization"}},d={},u=[{value:"What are Marketing Cloud's Features On Demand?",id:"what-are-marketing-clouds-features-on-demand",level:2},{value:"Marketing Cloud Settings Features",id:"marketing-cloud-settings-features",level:2},{value:"Deliverability Features",id:"deliverability-features",level:2},{value:"Email Studio Features",id:"email-studio-features",level:2},{value:"Mobile Studio Features",id:"mobile-studio-features",level:2},{value:"Analytics Builder Features",id:"analytics-builder-features",level:2},{value:"Interaction Studio Features",id:"interaction-studio-features",level:2},{value:"Journey Builder Features",id:"journey-builder-features",level:2},{value:"Automation Studio Features",id:"automation-studio-features",level:2},{value:"Contact Builder Features",id:"contact-builder-features",level:2},{value:"Developer Features",id:"developer-features",level:2}],m={toc:u},p="wrapper";function c(t){let{components:e,...a}=t;return(0,r.kt)(p,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)(l.m,{content:"Discover the Salesforce Marketing Cloud's Features On Demand and unlock platform potential.",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"what-are-marketing-clouds-features-on-demand"},"What are Marketing Cloud's Features On Demand?"),(0,r.kt)("p",null,"Salesforce Marketing Cloud is full of features straight out of the box. You can spend hours going through various panels and menus, discovering more options to make the instance your own and align it to the business needs."),(0,r.kt)("p",null,"There is, however, a group of features that you won't be able to find. Salesforce hid them until you ask the Support (Free) or Account Executive (Paid) to unlock them. SFMC Features On Demand."),(0,r.kt)("p",null,"Why are they not available by default? There are various reasons:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Some require irreversible changes, so Salesforce wants to be sure you know what you want."),(0,r.kt)("li",{parentName:"ol"},"Some are putting a strain on the backend, so it is better to keep them off by default and enable only when a client needs them."),(0,r.kt)("li",{parentName:"ol"},"Some have an additional cost and require a purchase before enabling."),(0,r.kt)("li",{parentName:"ol"},"Some are dependent on specific modules, so there is no need to have them by default."),(0,r.kt)("li",{parentName:"ol"},"Some will probably be added as a standard in the future (just as it has been done with previously on-demand Profile Attributes, Script Activity, Shared Folders and others - more on that in the bottom)."),(0,r.kt)("li",{parentName:"ol"},"Some are no longer provided even when you ask (sweet, sweet Code Activity for Journey Builder...)")),(0,r.kt)("p",null,"I always wanted to have a full list of those features but could never find it. So here it is."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"This document is a living thing. Salesforce adds, deletes and updates the Features On Demand with Marketing Cloud releases. I try to keep it up-to-date, but your help with this task will be appreciated."),(0,r.kt)("p",{parentName:"admonition"},"If you found anything below no longer correct or know yet another hidden SFMC feature - please ",(0,r.kt)("a",{parentName:"p",href:"mailto:feedback@mateuszdabrowski.pl?subject=Feedback%20on%20Features%20On%20Demand%20article"},"let me know"),".")),(0,r.kt)("h2",{id:"marketing-cloud-settings-features"},"Marketing Cloud Settings Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Basic Audit Trail"),(0,r.kt)("td",{parentName:"tr",align:null},"Captures information about SFMC access and security changes."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_overview_audit_trail.htm&type=5"},"Audit Trail")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Advanced Audit Trail"),(0,r.kt)("td",{parentName:"tr",align:null},"Captures Basic Audit Trail Events and critical events around Emails, MobileConnect, Mobile Push, Cloud Pages, Automations, Journeys and Google Analytics Integration."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_overview_audit_trail.htm&type=5"},"Audit Trail")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Smart Alerts for Marketing Cloud"),(0,r.kt)("td",{parentName:"tr",align:null},"Enables automatic notification for Marketing Cloud problems like slow Email Send speed, Journeys starting without contacts, Automation issues, etc."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000313872&type=1&mode=1"},"Proactive Services for Marketing Cloud")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Multi-Org Account"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to connect different Sales/Service Cloud Orgs for each Marketing Cloud Business Unit. It is not reversible."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_co_upgrade_to_multi-org.htm&type=5"},"Multi-Org Account")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Restore Encryption at Rest Key"),(0,r.kt)("td",{parentName:"tr",align:null},"If you revoked (Bring Your Own) Key for Encryption at Rest, this allows you to restore the key and retain the data if you act fast"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_overview_restore_byok.htm&type=5"},"Restore SFMC Encryption Key")),(0,r.kt)("td",{parentName:"tr",align:null},"?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SSO Metadata"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to implement Single Sign-On for your Marketing Cloud instance."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000356286&type=1&language=en_US&mode=1"},"SSO Implementation")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Access Permissions for SFTP"),(0,r.kt)("td",{parentName:"tr",align:null},"You can ask Support to configure per-folder permissions for your FTP users"),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SFTP Limited Access"),(0,r.kt)("td",{parentName:"tr",align:null},"You can ask Salesforce Support to limit an SFTP User access to only specific SFTP Folders"),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"deliverability-features"},"Deliverability Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Sender Authentication Package"),(0,r.kt)("td",{parentName:"tr",align:null},"SAP is a collection of products including Private Domain with link and image wrapping (unique for SAP), Dedicated IP, and Reply Mail Management. Must-have."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_sap.htm&type=5"},"SAP")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Additional Dedicated IP"),(0,r.kt)("td",{parentName:"tr",align:null},"You can purchase additional dedicated IPs to manage more significant volumes or split communication types."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_dedicated_ip.htm&type=5"},"Dedicated IP")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Additional Private Domain"),(0,r.kt)("td",{parentName:"tr",align:null},"You can purchase additional private domains to differentiate various communication types. This feature does not cover link and image branding."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000318538&type=1&mode=1"},"Private Domains")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SSL"),(0,r.kt)("td",{parentName:"tr",align:null},"Secures your traffic and gives that sweet ",(0,r.kt)("inlineCode",{parentName:"td"},"HTTPS"),", a must-have nowadays. Once purchased, configuration is now self-serve in SFMC Setup."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000339842&type=1&mode=1"},"SSL Certificate")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Reputation Audit Test"),(0,r.kt)("td",{parentName:"tr",align:null},"Ad hoc request allows you to receive information about the current state of the blacklists, authentication, DNS and content reviews (spam assessment) for your dedicated IPs."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.google.com/presentation/d/1TGDkSRWC-fB0vU7UjuP_18mgty6G_JHrDc2Anbmvi8Q/edit#slide=id.g863e745c9f_0_3842"},"Reputation Audit")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Reputation Audit Account"),(0,r.kt)("td",{parentName:"tr",align:null},"[",(0,r.kt)("strong",{parentName:"td"},"Deprecated"),"]"," Allows you to receive a dedicated account to Reputation Audit tool so that you can check the state of your dedicated IPs without creating recurring Reputation Audit Test requests. No longer supported."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.google.com/presentation/d/1TGDkSRWC-fB0vU7UjuP_18mgty6G_JHrDc2Anbmvi8Q/edit#slide=id.g863e745c9f_0_3842"},"Reputation Audit")),(0,r.kt)("td",{parentName:"tr",align:null},"N/A")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Bounce Detective"),(0,r.kt)("td",{parentName:"tr",align:null},"[",(0,r.kt)("strong",{parentName:"td"},"Deprecated"),"]"," Sends email alerts when recent send has an elevated bounce rate at any domain with 25+ recipients and provides per-domain bounce-focused analysis. No longer supported."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.google.com/presentation/d/1TGDkSRWC-fB0vU7UjuP_18mgty6G_JHrDc2Anbmvi8Q/edit#slide=id.g863e745c9f_0_4173"},"Bounce Detective")),(0,r.kt)("td",{parentName:"tr",align:null},"N/A")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Sender Rating"),(0,r.kt)("td",{parentName:"tr",align:null},"Provides a breakdown of current deliverability-focused sending scores, with trends, in a visually digestible format."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/s/articleView?id=000363130&type=1"},"Sender Rating")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Dedicated IP Custom Configuration"),(0,r.kt)("td",{parentName:"tr",align:null},"By default, if you have multiple dedicated IPs, your communication will use all of them by splitting the volume into 5000 emails batches and rotating the available IPs to push those. You can also assign a specific IP to a particular Delivery Profile. However, with the help of Support, you can create hybrid solutions like pools of few IPs per each delivery profile. It might be crucial for massive senders."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MTA Email Throttle"),(0,r.kt)("td",{parentName:"tr",align:null},"Apart from Email Studio Throttle feature focused on controlling engagement stream there is a deliverability-focused throttle added to a selected dedicated domain(s) on the MTA level. Perfect to limit send speed for reputation building purposes."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"email-studio-features"},"Email Studio Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CAN-SPAM Compliance Check"),(0,r.kt)("td",{parentName:"tr",align:null},"Marketing Cloud by default requires you to be compliant with US CAN-SPAM regulation by enforcing Commercial / Transactional split of messages and requiring specific data to be available in the email footer. If you are sending to non-US recipients, you can ask to switch off that requirement"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_can_spam_requirements.htm&type=5"},"CAN-SPAM Compliance")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Email Send Log"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to log send-time data about your emails. Requires two features: Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule (it can be set to Blank, _AUTO or ENT._AUTO depending on whether you want Send Log to ignore errors, capture Business Unit sends or all Account sends respectively). Ask for both."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_send_logging.htm&type=5"},"Send Logging in Email Studio")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Auto-Suppression List"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to suppress Contacts from receiving any Emails from the whole instance or specific classification and Business Unit. No need to attach to each send as with standard Suppression Lists."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_auto_suppresion_lists.htm&type=5"},"Auto-Suppression Lists")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Exclusion Scripts"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Journey Builder Emails. Ask for both."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000339899&type=1&mode=1"},"Email Studio Exclusion Scripts")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom List Detective"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to block sending and subscribing all contacts with specified Email Address username (for example ",(0,r.kt)("inlineCode",{parentName:"td"},"admin@"),") or domain (for example ",(0,r.kt)("inlineCode",{parentName:"td"},"@competitor.com"),"). Custom rules are applied for all current and future Business Units."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000316767&type=1&mode=1"},"Custom List Detective")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom List Detective Allowlist"),(0,r.kt)("td",{parentName:"tr",align:null},"On top of Custom List Detective you can also ask Support to add specific usernames or domains to Allowlist. Might be useful, as this setting will overwrite the standard List Detective."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000316767&type=1&mode=1"},"Custom List Detective")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Email Attachments"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to send emails with attachments."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_email_attachments.htm&type=5"},"Email Attachments")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Preserve Reply Attachments"),(0,r.kt)("td",{parentName:"tr",align:null},"Forwards attachments added to the reply email via RMM's auto-forwarding."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_reply_mail_management.htm&type=5"},"Reply Mail Management")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Enhanced Sender Profile"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to personalise the From Name and From Address per each Subscriber using AMPScript."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_sender_profile.htm&type=5"},"Personalised Sender Profile")),(0,r.kt)("td",{parentName:"tr",align:null},"?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Email Archiving"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to save a copy of your Emails of particular Send Classification to Enhanced FTP"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_email_archiving.htm&type=5"},"Email Archiving")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Email Send Throttle"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to control both the maximum amount of messages pushed in a given timeframe, as well as the hours when the sends occur."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_send_throttle.htm&type=5"},"Send Throttle")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CC and BCC for Email"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to use CC and BCC in your Emails. You can even use personalisation strings for it (f.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"%%AccountOwnerEmail%%"),"). Watch out for unsubscription rules!"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_select_audience.htm&type=5"},"Select Audience")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Additional Email Attributes"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to use custom email attributes to use for personalisation. Perfect for tracking links. You can ask Support to enable more than default 5."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000353527&language=en_US&mode=1&type=1"},"Additional Email Attributes")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Microsites"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to access a Classic view from the Email Studio - Content and create Microsites. As it is a legacy feature that is being sunset, you will need a strong business use case to get it."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Preference Center Links"),(0,r.kt)("td",{parentName:"tr",align:null},"SFMC has a set of personalisation strings for preference management: ",(0,r.kt)("inlineCode",{parentName:"td"},"%%subscription_center_url%%"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"%%profile_center_url%%"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"%%unsub_center_url%%"),". By default they link to the respective out-of-the-box pages, but support can redirect them to any other URL on request"),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom List-Unsubscribe Header Link"),(0,r.kt)("td",{parentName:"tr",align:null},"SFMC automatically unsubscribes your contacts from the list assigned to the email when List Unsubscribe is triggered. Support can redirect it to any other URL (like Preference Center or custom Cloud Page handler)."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Transactional Email Header & Footer"),(0,r.kt)("td",{parentName:"tr",align:null},"You can ask Salesforce Support to update your transactional emails header and footer"),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"mobile-studio-features"},"Mobile Studio Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SMS Send Log"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to log send-time data about your SMS. Requires two features: SMS Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_create_sms_sendlogging_de.htm&type=5"},"SMS Send Logging Data Extension")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Push Send Log"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to log send-time data about your push notifications. Requires two features: Push Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_create_push_sendlog.htm&type=5"},"Push Notification Send Logging Data Extension")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"analytics-builder-features"},"Analytics Builder Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Datorama Reports Advanced"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to customize and create dashboards, add dimensions and measurements, track cross-channel engagement and query the data. Replaced the Discover Reporting Tool."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"hhttps://trailhead.salesforce.com/en/content/learn/modules/datorama-reports-advanced-in-marketing-cloud/get-to-know-datorama-reports-advanced"},"Datorama Reports Advanced")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Reports"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to request creating a new Report aligned with your needs."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Account Utilisation Report"),(0,r.kt)("td",{parentName:"tr",align:null},"Ad hoc request to get the current utilisation status of Super Messages."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("p",null,"There are some additional analytics and tracking related features within ",(0,r.kt)("a",{parentName:"p",href:"#automation-studio-features"},"Automation Studio Features")," - Data Extract Types. For example Include User Agent Information, Unique Clicks and Opens, Campaing ID and more."),(0,r.kt)("h2",{id:"interaction-studio-features"},"Interaction Studio Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Guardian"),(0,r.kt)("td",{parentName:"tr",align:null},"Continuously monitors additional metrics like clicks, events and impressions gathered from your site, web application, or mobile app."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://doc.evergage.com/display/EKB/Guardian"},"Interaction Studio Guardian")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"journey-builder-features"},"Journey Builder Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Exclusion Scripts for Email Activity"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Email Studio. Ask for both."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000320456&type=1&mode=1"},"Journey Builder Exclusion Scripts")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Salesforce Activities for Single Org"),(0,r.kt)("td",{parentName:"tr",align:null},"By default integrated Single Org SFMC can use Salesforce Journey Activities (both Data Entry as well as Data Update ones) only on Parent BU, but Support can unlock those also for all Child BUs"),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"automation-studio-features"},"Automation Studio Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data Extract Types"),(0,r.kt)("td",{parentName:"tr",align:null},"Adds various Data Extract Activity options in Automation Studio. Don't feel limited by the list available in the documentation. There are multiple other available, for example: Delete File From ET FTP or Safehouse, Enhanced FTP File Move and Copy, Custom DE Extract With Zip, Data Extension Extract with File Encoding BOM and gzip. Just state what you need, and there is a big chance there is a ready solution that can be enabled. And if not - check next point."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_as_extract_types_reference.htm&type=5"},"Data Extract Activity")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Data Extract Types"),(0,r.kt)("td",{parentName:"tr",align:null},"If the Standard On-Demand Data Extract Types are not enough, you can request creating a custom one to suit your needs."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Salesforce Objects & Reports Import"),(0,r.kt)("td",{parentName:"tr",align:null},"If you are using Marketing Cloud Connect, you can ask Support to enable additional Import Activity Type to pull Objects and Reports to Salesforce Data Extensions folder."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_es_create_an_import_activity.htm&type=5"},"Import Activity")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Additional Automation Activities"),(0,r.kt)("td",{parentName:"tr",align:null},"You can ask Support to enable a few additional Automation Activities focused on Journey Builder and Salesforce integration."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=sf.mc_as_automation_studio_activities_reference.htm&type=5"},"On-Demand Activities")),(0,r.kt)("td",{parentName:"tr",align:null},"?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Allow Blank File Processing"),(0,r.kt)("td",{parentName:"tr",align:null},"By default, if your import activity encounters blank file, it will error out. This Business Rule allows it to continue the processing as normal."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"contact-builder-features"},"Contact Builder Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Data Extension Templates"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to request the creation of a custom Data Extension template that users can later use to auto-populate DE configuration."),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Custom Data Views"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to request the creation of Custom Data View. Mindblowing option."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://salesforce.stackexchange.com/a/293395/91679"},"Example Custom Data View")),(0,r.kt)("td",{parentName:"tr",align:null},"Paid")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data Extension Index"),(0,r.kt)("td",{parentName:"tr",align:null},"Required for ClaimRow() AMPScript function and an option of last resort for performance optimization in some cases."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://help.salesforce.com/articleView?id=000341701&language=en_US&mode=1&type=1"},"Applying an Index to a Data Extension")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("h2",{id:"developer-features"},"Developer Features"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Feature Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentation"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SOAP Triggered Send Prioritization"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to declare priority for your Triggered Sends created via API."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/creating_a_triggered_send_using_the_async_api.htm"},"Triggered Send Priority")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SOAP Disable Datetime Normalisation"),(0,r.kt)("td",{parentName:"tr",align:null},"By default dates coming to Marketing Cloud via SOAP API will be normalised. You can ask to disable it."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/incoming_date_normalization.htm"},"Datetime Normalisation")),(0,r.kt)("td",{parentName:"tr",align:null},"Free")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Salesforce AMPScript Functions for Single Org"),(0,r.kt)("td",{parentName:"tr",align:null},"By default integrated Single Org SFMC can use Salesforce AMPScript functions (like ",(0,r.kt)("inlineCode",{parentName:"td"},"RetrieveSalesforceObjects"),") only on Parent BU, but Support can unlock those also for all Child BUs"),(0,r.kt)("td",{parentName:"tr",align:null},"N/A"),(0,r.kt)("td",{parentName:"tr",align:null},"Free")))),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Some features are currently added Out of the Box for new Salesforce Marketing Cloud deployments but were not in the past. If you are rocking old instance, you might also be interested in features like:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Script Activity for Automation Studio: use SSJS in your Automations"),(0,r.kt)("li",{parentName:"ul"},"Shared Folders for Content Builder: make your Content available across multiple Business Units"),(0,r.kt)("li",{parentName:"ul"},"Profile Attributes for Email Studio: Subscriber attributes stored at All Subscribers level and available for personalisation"),(0,r.kt)("li",{parentName:"ul"},"Brand Builder: allows you to style Salesforce Marketing Cloud a bit by using accent colours and adding your company logo."))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b52e5d8d.e2ac5676.js b/assets/js/b52e5d8d.e2ac5676.js new file mode 100644 index 000000000..6b47ec720 --- /dev/null +++ b/assets/js/b52e5d8d.e2ac5676.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8693],{1264:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var i=s(5893),r=s(1151),n=s(1872);const a={id:"sfmc-features-on-demand",title:"SFMC Features On Demand",sidebar_label:"Features On Demand",description:"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.",image:"img/og/og-image-sfmc-features-on-demand.png",tags:["Marketing Cloud","Configuration","Deliverability","Email","SMS","Analytics","Journey","Automation","Data Extensions","Setup"]},d=void 0,o={id:"config/sfmc-features-on-demand",title:"SFMC Features On Demand",description:"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.",source:"@site/docs/config/sfmc-features-on-demand.mdx",sourceDirName:"config",slug:"/config/sfmc-features-on-demand",permalink:"/docs/config/sfmc-features-on-demand",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-features-on-demand.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Deliverability",permalink:"/docs/tags/deliverability"},{label:"Email",permalink:"/docs/tags/email"},{label:"SMS",permalink:"/docs/tags/sms"},{label:"Analytics",permalink:"/docs/tags/analytics"},{label:"Journey",permalink:"/docs/tags/journey"},{label:"Automation",permalink:"/docs/tags/automation"},{label:"Data Extensions",permalink:"/docs/tags/data-extensions"},{label:"Setup",permalink:"/docs/tags/setup"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1690842936,formattedLastUpdatedAt:"Jul 31, 2023",frontMatter:{id:"sfmc-features-on-demand",title:"SFMC Features On Demand",sidebar_label:"Features On Demand",description:"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.",image:"img/og/og-image-sfmc-features-on-demand.png",tags:["Marketing Cloud","Configuration","Deliverability","Email","SMS","Analytics","Journey","Automation","Data Extensions","Setup"]},sidebar:"docs",previous:{title:"AppExchange Solutions",permalink:"/docs/config/sfmc-appexchange-solutions"},next:{title:"MC Personalization",permalink:"/docs/category/mc-personalization"}},l={},c=[{value:"What are Marketing Cloud's Features On Demand?",id:"what-are-marketing-clouds-features-on-demand",level:2},{value:"Marketing Cloud Settings Features",id:"marketing-cloud-settings-features",level:2},{value:"Deliverability Features",id:"deliverability-features",level:2},{value:"Email Studio Features",id:"email-studio-features",level:2},{value:"Mobile Studio Features",id:"mobile-studio-features",level:2},{value:"Analytics Builder Features",id:"analytics-builder-features",level:2},{value:"Interaction Studio Features",id:"interaction-studio-features",level:2},{value:"Journey Builder Features",id:"journey-builder-features",level:2},{value:"Automation Studio Features",id:"automation-studio-features",level:2},{value:"Contact Builder Features",id:"contact-builder-features",level:2},{value:"Developer Features",id:"developer-features",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.m,{content:"Discover the Salesforce Marketing Cloud's Features On Demand and unlock platform potential."}),"\n",(0,i.jsx)(t.h2,{id:"what-are-marketing-clouds-features-on-demand",children:"What are Marketing Cloud's Features On Demand?"}),"\n",(0,i.jsx)(t.p,{children:"Salesforce Marketing Cloud is full of features straight out of the box. You can spend hours going through various panels and menus, discovering more options to make the instance your own and align it to the business needs."}),"\n",(0,i.jsx)(t.p,{children:"There is, however, a group of features that you won't be able to find. Salesforce hid them until you ask the Support (Free) or Account Executive (Paid) to unlock them. SFMC Features On Demand."}),"\n",(0,i.jsx)(t.p,{children:"Why are they not available by default? There are various reasons:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Some require irreversible changes, so Salesforce wants to be sure you know what you want."}),"\n",(0,i.jsx)(t.li,{children:"Some are putting a strain on the backend, so it is better to keep them off by default and enable only when a client needs them."}),"\n",(0,i.jsx)(t.li,{children:"Some have an additional cost and require a purchase before enabling."}),"\n",(0,i.jsx)(t.li,{children:"Some are dependent on specific modules, so there is no need to have them by default."}),"\n",(0,i.jsx)(t.li,{children:"Some will probably be added as a standard in the future (just as it has been done with previously on-demand Profile Attributes, Script Activity, Shared Folders and others - more on that in the bottom)."}),"\n",(0,i.jsx)(t.li,{children:"Some are no longer provided even when you ask (sweet, sweet Code Activity for Journey Builder...)"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"I always wanted to have a full list of those features but could never find it. So here it is."}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"This document is a living thing. Salesforce adds, deletes and updates the Features On Demand with Marketing Cloud releases. I try to keep it up-to-date, but your help with this task will be appreciated."}),(0,i.jsxs)(t.p,{children:["If you found anything below no longer correct or know yet another hidden SFMC feature - please ",(0,i.jsx)(t.a,{href:"mailto:feedback@mateuszdabrowski.pl?subject=Feedback%20on%20Features%20On%20Demand%20article",children:"let me know"}),"."]})]}),"\n",(0,i.jsx)(t.h2,{id:"marketing-cloud-settings-features",children:"Marketing Cloud Settings Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Basic Audit Trail"}),(0,i.jsx)(t.td,{children:"Captures information about SFMC access and security changes."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_overview_audit_trail.htm&type=5",children:"Audit Trail"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Advanced Audit Trail"}),(0,i.jsx)(t.td,{children:"Captures Basic Audit Trail Events and critical events around Emails, MobileConnect, Mobile Push, Cloud Pages, Automations, Journeys and Google Analytics Integration."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_overview_audit_trail.htm&type=5",children:"Audit Trail"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Smart Alerts for Marketing Cloud"}),(0,i.jsx)(t.td,{children:"Enables automatic notification for Marketing Cloud problems like slow Email Send speed, Journeys starting without contacts, Automation issues, etc."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000313872&type=1&mode=1",children:"Proactive Services for Marketing Cloud"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Multi-Org Account"}),(0,i.jsx)(t.td,{children:"Allows you to connect different Sales/Service Cloud Orgs for each Marketing Cloud Business Unit. It is not reversible."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_co_upgrade_to_multi-org.htm&type=5",children:"Multi-Org Account"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Restore Encryption at Rest Key"}),(0,i.jsx)(t.td,{children:"If you revoked (Bring Your Own) Key for Encryption at Rest, this allows you to restore the key and retain the data if you act fast"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_overview_restore_byok.htm&type=5",children:"Restore SFMC Encryption Key"})}),(0,i.jsx)(t.td,{children:"?"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"SSO Metadata"}),(0,i.jsx)(t.td,{children:"Allows you to implement Single Sign-On for your Marketing Cloud instance."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000356286&type=1&language=en_US&mode=1",children:"SSO Implementation"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Access Permissions for SFTP"}),(0,i.jsx)(t.td,{children:"You can ask Support to configure per-folder permissions for your FTP users"}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"SFTP Limited Access"}),(0,i.jsx)(t.td,{children:"You can ask Salesforce Support to limit an SFTP User access to only specific SFTP Folders"}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"deliverability-features",children:"Deliverability Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Sender Authentication Package"}),(0,i.jsx)(t.td,{children:"SAP is a collection of products including Private Domain with link and image wrapping (unique for SAP), Dedicated IP, and Reply Mail Management. Must-have."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_sap.htm&type=5",children:"SAP"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Additional Dedicated IP"}),(0,i.jsx)(t.td,{children:"You can purchase additional dedicated IPs to manage more significant volumes or split communication types."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_dedicated_ip.htm&type=5",children:"Dedicated IP"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Additional Private Domain"}),(0,i.jsx)(t.td,{children:"You can purchase additional private domains to differentiate various communication types. This feature does not cover link and image branding."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000318538&type=1&mode=1",children:"Private Domains"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"SSL"}),(0,i.jsxs)(t.td,{children:["Secures your traffic and gives that sweet ",(0,i.jsx)(t.code,{children:"HTTPS"}),", a must-have nowadays. Once purchased, configuration is now self-serve in SFMC Setup."]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000339842&type=1&mode=1",children:"SSL Certificate"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Reputation Audit Test"}),(0,i.jsx)(t.td,{children:"Ad hoc request allows you to receive information about the current state of the blacklists, authentication, DNS and content reviews (spam assessment) for your dedicated IPs."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1TGDkSRWC-fB0vU7UjuP_18mgty6G_JHrDc2Anbmvi8Q/edit#slide=id.g863e745c9f_0_3842",children:"Reputation Audit"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Reputation Audit Account"}),(0,i.jsxs)(t.td,{children:["[",(0,i.jsx)(t.strong,{children:"Deprecated"}),"] Allows you to receive a dedicated account to Reputation Audit tool so that you can check the state of your dedicated IPs without creating recurring Reputation Audit Test requests. No longer supported."]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1TGDkSRWC-fB0vU7UjuP_18mgty6G_JHrDc2Anbmvi8Q/edit#slide=id.g863e745c9f_0_3842",children:"Reputation Audit"})}),(0,i.jsx)(t.td,{children:"N/A"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Bounce Detective"}),(0,i.jsxs)(t.td,{children:["[",(0,i.jsx)(t.strong,{children:"Deprecated"}),"] Sends email alerts when recent send has an elevated bounce rate at any domain with 25+ recipients and provides per-domain bounce-focused analysis. No longer supported."]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://docs.google.com/presentation/d/1TGDkSRWC-fB0vU7UjuP_18mgty6G_JHrDc2Anbmvi8Q/edit#slide=id.g863e745c9f_0_4173",children:"Bounce Detective"})}),(0,i.jsx)(t.td,{children:"N/A"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Sender Rating"}),(0,i.jsx)(t.td,{children:"Provides a breakdown of current deliverability-focused sending scores, with trends, in a visually digestible format."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=000363130&type=1",children:"Sender Rating"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Dedicated IP Custom Configuration"}),(0,i.jsx)(t.td,{children:"By default, if you have multiple dedicated IPs, your communication will use all of them by splitting the volume into 5000 emails batches and rotating the available IPs to push those. You can also assign a specific IP to a particular Delivery Profile. However, with the help of Support, you can create hybrid solutions like pools of few IPs per each delivery profile. It might be crucial for massive senders."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"MTA Email Throttle"}),(0,i.jsx)(t.td,{children:"Apart from Email Studio Throttle feature focused on controlling engagement stream there is a deliverability-focused throttle added to a selected dedicated domain(s) on the MTA level. Perfect to limit send speed for reputation building purposes."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"email-studio-features",children:"Email Studio Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CAN-SPAM Compliance Check"}),(0,i.jsx)(t.td,{children:"Marketing Cloud by default requires you to be compliant with US CAN-SPAM regulation by enforcing Commercial / Transactional split of messages and requiring specific data to be available in the email footer. If you are sending to non-US recipients, you can ask to switch off that requirement"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_can_spam_requirements.htm&type=5",children:"CAN-SPAM Compliance"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Email Send Log"}),(0,i.jsx)(t.td,{children:"Allows you to log send-time data about your emails. Requires two features: Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule (it can be set to Blank, _AUTO or ENT._AUTO depending on whether you want Send Log to ignore errors, capture Business Unit sends or all Account sends respectively). Ask for both."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_send_logging.htm&type=5",children:"Send Logging in Email Studio"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Auto-Suppression List"}),(0,i.jsx)(t.td,{children:"Allows you to suppress Contacts from receiving any Emails from the whole instance or specific classification and Business Unit. No need to attach to each send as with standard Suppression Lists."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_auto_suppresion_lists.htm&type=5",children:"Auto-Suppression Lists"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Exclusion Scripts"}),(0,i.jsx)(t.td,{children:"Allows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Journey Builder Emails. Ask for both."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000339899&type=1&mode=1",children:"Email Studio Exclusion Scripts"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom List Detective"}),(0,i.jsxs)(t.td,{children:["Allows you to block sending and subscribing all contacts with specified Email Address username (for example ",(0,i.jsx)(t.code,{children:"admin@"}),") or domain (for example ",(0,i.jsx)(t.code,{children:"@competitor.com"}),"). Custom rules are applied for all current and future Business Units."]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000316767&type=1&mode=1",children:"Custom List Detective"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom List Detective Allowlist"}),(0,i.jsx)(t.td,{children:"On top of Custom List Detective you can also ask Support to add specific usernames or domains to Allowlist. Might be useful, as this setting will overwrite the standard List Detective."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000316767&type=1&mode=1",children:"Custom List Detective"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Email Attachments"}),(0,i.jsx)(t.td,{children:"Allows you to send emails with attachments."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_email_attachments.htm&type=5",children:"Email Attachments"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Preserve Reply Attachments"}),(0,i.jsx)(t.td,{children:"Forwards attachments added to the reply email via RMM's auto-forwarding."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_reply_mail_management.htm&type=5",children:"Reply Mail Management"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Enhanced Sender Profile"}),(0,i.jsx)(t.td,{children:"Allows you to personalise the From Name and From Address per each Subscriber using AMPScript."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_sender_profile.htm&type=5",children:"Personalised Sender Profile"})}),(0,i.jsx)(t.td,{children:"?"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Email Archiving"}),(0,i.jsx)(t.td,{children:"Allows you to save a copy of your Emails of particular Send Classification to Enhanced FTP"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_email_archiving.htm&type=5",children:"Email Archiving"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Email Send Throttle"}),(0,i.jsx)(t.td,{children:"Allows you to control both the maximum amount of messages pushed in a given timeframe, as well as the hours when the sends occur."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_send_throttle.htm&type=5",children:"Send Throttle"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"CC and BCC for Email"}),(0,i.jsxs)(t.td,{children:["Allows you to use CC and BCC in your Emails. You can even use personalisation strings for it (f.e. ",(0,i.jsx)(t.code,{children:"%%AccountOwnerEmail%%"}),"). Watch out for unsubscription rules!"]}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_select_audience.htm&type=5",children:"Select Audience"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Additional Email Attributes"}),(0,i.jsx)(t.td,{children:"Allows you to use custom email attributes to use for personalisation. Perfect for tracking links. You can ask Support to enable more than default 5."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000353527&language=en_US&mode=1&type=1",children:"Additional Email Attributes"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Microsites"}),(0,i.jsx)(t.td,{children:"Allows you to access a Classic view from the Email Studio - Content and create Microsites. As it is a legacy feature that is being sunset, you will need a strong business use case to get it."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Preference Center Links"}),(0,i.jsxs)(t.td,{children:["SFMC has a set of personalisation strings for preference management: ",(0,i.jsx)(t.code,{children:"%%subscription_center_url%%"}),", ",(0,i.jsx)(t.code,{children:"%%profile_center_url%%"}),", ",(0,i.jsx)(t.code,{children:"%%unsub_center_url%%"}),". By default they link to the respective out-of-the-box pages, but support can redirect them to any other URL on request"]}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom List-Unsubscribe Header Link"}),(0,i.jsx)(t.td,{children:"SFMC automatically unsubscribes your contacts from the list assigned to the email when List Unsubscribe is triggered. Support can redirect it to any other URL (like Preference Center or custom Cloud Page handler)."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Transactional Email Header & Footer"}),(0,i.jsx)(t.td,{children:"You can ask Salesforce Support to update your transactional emails header and footer"}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"mobile-studio-features",children:"Mobile Studio Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"SMS Send Log"}),(0,i.jsx)(t.td,{children:"Allows you to log send-time data about your SMS. Requires two features: SMS Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_create_sms_sendlogging_de.htm&type=5",children:"SMS Send Logging Data Extension"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Push Send Log"}),(0,i.jsx)(t.td,{children:"Allows you to log send-time data about your push notifications. Requires two features: Push Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_create_push_sendlog.htm&type=5",children:"Push Notification Send Logging Data Extension"})}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"analytics-builder-features",children:"Analytics Builder Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Datorama Reports Advanced"}),(0,i.jsx)(t.td,{children:"Allows you to customize and create dashboards, add dimensions and measurements, track cross-channel engagement and query the data. Replaced the Discover Reporting Tool."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"hhttps://trailhead.salesforce.com/en/content/learn/modules/datorama-reports-advanced-in-marketing-cloud/get-to-know-datorama-reports-advanced",children:"Datorama Reports Advanced"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Reports"}),(0,i.jsx)(t.td,{children:"Allows you to request creating a new Report aligned with your needs."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Account Utilisation Report"}),(0,i.jsx)(t.td,{children:"Ad hoc request to get the current utilisation status of Super Messages."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:["There are some additional analytics and tracking related features within ",(0,i.jsx)(t.a,{href:"#automation-studio-features",children:"Automation Studio Features"})," - Data Extract Types. For example Include User Agent Information, Unique Clicks and Opens, Campaing ID and more."]}),"\n",(0,i.jsx)(t.h2,{id:"interaction-studio-features",children:"Interaction Studio Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Guardian"}),(0,i.jsx)(t.td,{children:"Continuously monitors additional metrics like clicks, events and impressions gathered from your site, web application, or mobile app."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://doc.evergage.com/display/EKB/Guardian",children:"Interaction Studio Guardian"})}),(0,i.jsx)(t.td,{children:"Free"})]})})]}),"\n",(0,i.jsx)(t.h2,{id:"journey-builder-features",children:"Journey Builder Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Exclusion Scripts for Email Activity"}),(0,i.jsx)(t.td,{children:"Allows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Email Studio. Ask for both."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000320456&type=1&mode=1",children:"Journey Builder Exclusion Scripts"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Salesforce Activities for Single Org"}),(0,i.jsx)(t.td,{children:"By default integrated Single Org SFMC can use Salesforce Journey Activities (both Data Entry as well as Data Update ones) only on Parent BU, but Support can unlock those also for all Child BUs"}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"automation-studio-features",children:"Automation Studio Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Data Extract Types"}),(0,i.jsx)(t.td,{children:"Adds various Data Extract Activity options in Automation Studio. Don't feel limited by the list available in the documentation. There are multiple other available, for example: Delete File From ET FTP or Safehouse, Enhanced FTP File Move and Copy, Custom DE Extract With Zip, Data Extension Extract with File Encoding BOM and gzip. Just state what you need, and there is a big chance there is a ready solution that can be enabled. And if not - check next point."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_as_extract_types_reference.htm&type=5",children:"Data Extract Activity"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Data Extract Types"}),(0,i.jsx)(t.td,{children:"If the Standard On-Demand Data Extract Types are not enough, you can request creating a custom one to suit your needs."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Salesforce Objects & Reports Import"}),(0,i.jsx)(t.td,{children:"If you are using Marketing Cloud Connect, you can ask Support to enable additional Import Activity Type to pull Objects and Reports to Salesforce Data Extensions folder."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_es_create_an_import_activity.htm&type=5",children:"Import Activity"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Additional Automation Activities"}),(0,i.jsx)(t.td,{children:"You can ask Support to enable a few additional Automation Activities focused on Journey Builder and Salesforce integration."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=sf.mc_as_automation_studio_activities_reference.htm&type=5",children:"On-Demand Activities"})}),(0,i.jsx)(t.td,{children:"?"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Allow Blank File Processing"}),(0,i.jsx)(t.td,{children:"By default, if your import activity encounters blank file, it will error out. This Business Rule allows it to continue the processing as normal."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"contact-builder-features",children:"Contact Builder Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Data Extension Templates"}),(0,i.jsx)(t.td,{children:"Allows you to request the creation of a custom Data Extension template that users can later use to auto-populate DE configuration."}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Custom Data Views"}),(0,i.jsx)(t.td,{children:"Allows you to request the creation of Custom Data View. Mindblowing option."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://salesforce.stackexchange.com/a/293395/91679",children:"Example Custom Data View"})}),(0,i.jsx)(t.td,{children:"Paid"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Data Extension Index"}),(0,i.jsx)(t.td,{children:"Required for ClaimRow() AMPScript function and an option of last resort for performance optimization in some cases."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://help.salesforce.com/articleView?id=000341701&language=en_US&mode=1&type=1",children:"Applying an Index to a Data Extension"})}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsx)(t.h2,{id:"developer-features",children:"Developer Features"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Feature Name"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Documentation"}),(0,i.jsx)(t.th,{children:"Type"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"SOAP Triggered Send Prioritization"}),(0,i.jsx)(t.td,{children:"Allows you to declare priority for your Triggered Sends created via API."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/creating_a_triggered_send_using_the_async_api.htm",children:"Triggered Send Priority"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"SOAP Disable Datetime Normalisation"}),(0,i.jsx)(t.td,{children:"By default dates coming to Marketing Cloud via SOAP API will be normalised. You can ask to disable it."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/incoming_date_normalization.htm",children:"Datetime Normalisation"})}),(0,i.jsx)(t.td,{children:"Free"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Salesforce AMPScript Functions for Single Org"}),(0,i.jsxs)(t.td,{children:["By default integrated Single Org SFMC can use Salesforce AMPScript functions (like ",(0,i.jsx)(t.code,{children:"RetrieveSalesforceObjects"}),") only on Parent BU, but Support can unlock those also for all Child BUs"]}),(0,i.jsx)(t.td,{children:"N/A"}),(0,i.jsx)(t.td,{children:"Free"})]})]})]}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.p,{children:"Some features are currently added Out of the Box for new Salesforce Marketing Cloud deployments but were not in the past. If you are rocking old instance, you might also be interested in features like:"}),(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Script Activity for Automation Studio: use SSJS in your Automations"}),"\n",(0,i.jsx)(t.li,{children:"Shared Folders for Content Builder: make your Content available across multiple Business Units"}),"\n",(0,i.jsx)(t.li,{children:"Profile Attributes for Email Studio: Subscriber attributes stored at All Subscribers level and available for personalisation"}),"\n",(0,i.jsx)(t.li,{children:"Brand Builder: allows you to style Salesforce Marketing Cloud a bit by using accent colours and adding your company logo."}),"\n"]})]})]})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,t,s)=>{s.d(t,{m:()=>n});s(7294);const i="leadText_qzwo";var r=s(5893);const n=e=>{let{content:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:i,children:t})})}},1151:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>a});var i=s(7294);const r={},n=i.createContext(r);function a(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b840d82f.93e628b2.js b/assets/js/b840d82f.93e628b2.js new file mode 100644 index 000000000..cf4c35c9d --- /dev/null +++ b/assets/js/b840d82f.93e628b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7542],{4416:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>u,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>h,toc:()=>f});var i=n(5893),t=n(1151),r=n(1872),l=n(3992),a=n(425),o=n(7661);const c={id:"sfmc-sql-basics",title:"SFMC SQL Basics",sidebar_label:"SQL Basics",description:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",image:"img/og/og-image-sql-basics.png",tags:["Marketing Cloud","SQL"]},d=void 0,h={id:"sql/sfmc-sql-basics",title:"SFMC SQL Basics",description:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",source:"@site/docs/sql/sfmc-sql-basics.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-basics",permalink:"/docs/sql/sfmc-sql-basics",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-basics.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1704137670,formattedLastUpdatedAt:"Jan 1, 2024",frontMatter:{id:"sfmc-sql-basics",title:"SFMC SQL Basics",sidebar_label:"SQL Basics",description:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",image:"img/og/og-image-sql-basics.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"SFMC SQL",permalink:"/docs/category/sfmc-sql"},next:{title:"Select",permalink:"/docs/sql/sfmc-sql-select"}},u={},f=[{value:"How to segment data in Marketing Cloud",id:"how-to-segment-data-in-marketing-cloud",level:2},{value:"SQL in Salesforce Marketing Cloud",id:"sql-in-salesforce-marketing-cloud",level:2},{value:"Where to learn SFMC SQL",id:"where-to-learn-sfmc-sql",level:2},{value:"How to learn SFMC SQL",id:"how-to-learn-sfmc-sql",level:2},{value:"Level 1 - SELECT, FROM, WHERE",id:"level-1---select-from-where",level:3},{value:"Learning materials",id:"learning-materials",level:4},{value:"Check your skills",id:"check-your-skills",level:4},{value:"Level 2 - JOIN, Aliasing, NULL",id:"level-2---join-aliasing-null",level:3},{value:"Learning materials",id:"learning-materials-1",level:4},{value:"Check your skills",id:"check-your-skills-1",level:4},{value:"Level 3 - LIKE, CASE, Strings",id:"level-3---like-case-strings",level:3},{value:"Learning materials",id:"learning-materials-2",level:4},{value:"Check your skills",id:"check-your-skills-2",level:4},{value:"Level 4 - Dates, WHERE operators, Conversion",id:"level-4---dates-where-operators-conversion",level:3},{value:"Learning materials",id:"learning-materials-3",level:4},{value:"Check your skills",id:"check-your-skills-3",level:4},{value:"Level 5 - Multiple JOINS, UNION, INTERSECT and EXCEPT",id:"level-5---multiple-joins-union-intersect-and-except",level:3},{value:"Learning materials",id:"learning-materials-4",level:4},{value:"Check your skills",id:"check-your-skills-4",level:4},{value:"Level 6 - GROUP, COUNT, TOP and HAVING",id:"level-6---group-count-top-and-having",level:3},{value:"Learning materials",id:"learning-materials-5",level:4},{value:"Check your skills",id:"check-your-skills-5",level:4},{value:"Level 7 - coming soon-ish",id:"level-7---coming-soon-ish",level:3},{value:"Writing with style",id:"writing-with-style",level:2},{value:"Order of operations",id:"order-of-operations",level:2},{value:"All SQL Guides",id:"all-sql-guides",level:2}];function m(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.m,{content:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough."}),"\n",(0,i.jsx)(s.h2,{id:"how-to-segment-data-in-marketing-cloud",children:"How to segment data in Marketing Cloud"}),"\n",(0,i.jsx)(s.p,{children:"Salesforce Marketing Cloud offers a few ways of segmenting data for your marketing needs. Out of the box, you can use Filters and SQL Query Activities."}),"\n",(0,i.jsx)(s.p,{children:"Filters are a straightforward drag-and-drop solution for one-time (Filtered Data Extensions) or refreshed on-schedule (Data Filters with Automation) segmentation. Unfortunately, they are constrained, as they allow you to copy a single Data Extension with all its columns and filtered-down rows. That filtering can leverage source Data Extension values, another Data Extension values (through Data Relationship) or Measures. That's it. For real Marketing Automation, it's not enough."}),"\n",(0,i.jsx)(s.p,{children:"This is why you are looking to learn about SFMC SQL. Along with Automation Studio Query Activity, it will allow you to deploy any segmentation scenario you want with complete control over the output columns, names and values. However, with great power comes some learning required."}),"\n",(0,i.jsx)(s.p,{children:"There is also a third way - paid AppExchange solutions that offer you a way to eat a cookie and have a cookie: the full power of SQL with a drag-and-drop interface. For a price."}),"\n",(0,i.jsxs)(s.p,{children:["You can check my comparison of all the above options in my ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-appexchange-solutions#sfmc-segmentation-solutions",children:"here"}),". This article will focus only on the most powerful and free option - SFMC SQL."]}),"\n",(0,i.jsx)(s.h2,{id:"sql-in-salesforce-marketing-cloud",children:"SQL in Salesforce Marketing Cloud"}),"\n",(0,i.jsx)(s.p,{children:"SQL (Structured Query Language) is one of the best ways to work with relational databases. And Marketing Cloud's Data Extensions, with the help of Data Designer, offer precisely that. A relational database. The same is valid for system Data Views containing tracking data. Because of this, SQL is used in SFMC whenever powerful segmentation is needed (mainly using Automation Studio)."}),"\n",(0,i.jsxs)(s.p,{children:["The main difference from standard SQL (SFMC uses more or less SQL Server 2019) is that SFMC supports only the ",(0,i.jsx)(s.code,{children:"SELECT"})," statement. Neither ",(0,i.jsx)(s.code,{children:"INSERT"}),", ",(0,i.jsx)(s.code,{children:"UPDATE"})," or ",(0,i.jsx)(s.code,{children:"DELETE"})," are officially supported. It is because the queries are executed as a part of the backend query and are limited to provide non-breakable functionality."]}),"\n",(0,i.jsx)(s.p,{children:"Another limiting characteristic of SFMC SQL is visible in the data accessible by queries. Only data stored in data extensions or system data views is available. Moreover, you can save the results only to the data extensions. The reason is other data structures of SFMC are not relational databases."}),"\n",(0,i.jsx)(s.p,{children:"Finally, the significant limitation you might hit as your Marketing Cloud grows is AutoKill. It will automatically stop your query if the execution time exceeds the 30 minutes limit. Think about the query with the future in mind. It is vital for queries that are supposed to be the backbones of your data management flow in Marketing Cloud. Even if it works great now, consider how it will behave once you have more data in the system. One of the great ways to not trigger AutoKill is to implement retention periods for the Data Extensions used in the query to limit input data."}),"\n",(0,i.jsx)(s.h2,{id:"where-to-learn-sfmc-sql",children:"Where to learn SFMC SQL"}),"\n",(0,i.jsxs)(s.p,{children:["Before we start with the real deal, let's cover where to learn to write SQL. I recommend getting a ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-appexchange-solutions#query-studio",children:"Query Studio"}),". It's a free AppExchange add-on to Marketing Cloud developed by Salesforce. While it has cons, it's perfect for quickly learning how to query."]}),"\n",(0,i.jsx)(s.p,{children:"If you cannot install this app in your Marketing Cloud, you still can learn using Query Activities in Automation Studio, but it will be much less user-friendly. For each change in the query, you will have to update the target Data Extension manually and go through multiple steps across the platform to see the results."}),"\n",(0,i.jsxs)(s.p,{children:["My approach is to always start in ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-appexchange-solutions#query-studio",children:"Query Studio"}),", and only once my SQL Query is complete and validated do I move it to Automation Studio."]}),"\n",(0,i.jsx)(s.h2,{id:"how-to-learn-sfmc-sql",children:"How to learn SFMC SQL"}),"\n",(0,i.jsx)(s.p,{children:"SFMC SQL is very limited compared to the full power of Structured Query Language, but there are still many topics to cover. I split them into steps that slowly add more complex concepts to make it easier. Each should provide knowledge that you can actively use in your day-to-day work."}),"\n",(0,i.jsx)(s.p,{children:"In each level, you will see:"}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsx)(s.li,{children:"Learning materials to read."}),"\n",(0,i.jsx)(s.li,{children:"Exercise you can do in your Marketing Cloud platform to test your skills."}),"\n",(0,i.jsx)(s.li,{children:"Hint that can help you with the exercise if you are stuck."}),"\n",(0,i.jsx)(s.li,{children:"Example solution to that exercise. Keep in mind that there might be more than one correct approach."}),"\n"]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-1---select-from-where",children:"Level 1 - SELECT, FROM, WHERE"}),"\n",(0,i.jsx)(s.p,{children:"Learn the three essential SQL statements for all queries. They will give you similar power to what Filters can do - with the bonus of choosing the columns you need for your final segment."}),"\n",(0,i.jsx)(s.h4,{id:"learning-materials",children:"Learning materials"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:"SELECT"})," - just the first part, before the aliasing section."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from",children:"FROM"})," - whole article."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:"WHERE"})," - the first part, before the Basic Operators, plus ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#equality-operators",children:"Equality Operators"})," and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:"Logical Operators"}),". Don't worry about Comparison operators or shorthands for now. Don't worry about the examples with dates and unknown functions. We will get there. For now, think about how you can filter based on simple values like status."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views",children:"System Data Views"})," - the basics and ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_subscribers",children:"_Subscribers"})," Data View."]}),"\n"]}),"\n",(0,i.jsx)(s.h4,{id:"check-your-skills",children:"Check your skills"}),"\n",(0,i.jsxs)(l.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],children:[(0,i.jsx)(a.Z,{value:"exercise",children:(0,i.jsx)(s.p,{children:"Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list."})}),(0,i.jsx)(a.Z,{value:"hints",children:(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["All Subscribers List data is stored in ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_subscribers",children:"_Subscribers"})," Data View."]}),"\n",(0,i.jsxs)(s.li,{children:["If you are running your query on a child Business Unit, you will need to use ",(0,i.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-from#enterprise-system-data-views",children:[(0,i.jsx)(s.code,{children:"Ent."})," prefix"]}),"."]}),"\n",(0,i.jsxs)(s.li,{children:["You don't have to ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select",children:"SELECT"})," any columns but the SubscriberKey. You can use ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:"WHERE"})," on not selected columns."]}),"\n",(0,i.jsxs)(s.li,{children:["Current status of a Subscriber is saved in the ",(0,i.jsx)(s.code,{children:"Status"})," column of ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_subscribers",children:"_Subscribers"})," Data View as a string. You can use it for filtering with ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:"WHERE"}),"."]}),"\n"]})}),(0,i.jsxs)(a.Z,{value:"solution",children:[(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',children:"SELECT SubscriberKey\nFROM _Subscribers\nWHERE Status = 'active'\n"})}),(0,i.jsxs)(s.p,{children:["Bonus: you can change the last line to, for example, ",(0,i.jsx)(s.code,{children:"WHERE Domain = 'gmail.com'"})," to see how many Subscribers are using free Google inbox."]})]})]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-2---join-aliasing-null",children:"Level 2 - JOIN, Aliasing, NULL"}),"\n",(0,i.jsxs)(s.p,{children:["Learn how to leverage a second Data Extension or Data View, change the output's column name, and deal with basic ",(0,i.jsx)(s.code,{children:"NULL"})," cases."]}),"\n",(0,i.jsx)(s.h4,{id:"learning-materials-1",children:"Learning materials"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join",children:"JOIN"})," - ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#join-types",children:"JOIN Types"}),", ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#joining-on",children:"Joining ON"})," and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#table-name-prefix",children:"Table Name Prefixes"})," sections. It might be helpful to check out the ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#sfmc-sql-join-cheat-sheet",children:"visual cheatsheet"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#aliasing-with-as",children:"Aliasing"})," - just the Aliasing with AS and Custom values sections."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions",children:"NULL functions"})," - just the first three paragraphs and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#is-null",children:"IS NULL"})," section."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_sent",children:"_Sent"}),", ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_open",children:"_Open"})," and ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_click",children:"_Click"})," Data Views."]}),"\n"]}),"\n",(0,i.jsx)(s.h4,{id:"check-your-skills-1",children:"Check your skills"}),"\n",(0,i.jsxs)(l.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],children:[(0,i.jsx)(a.Z,{value:"exercise",children:(0,i.jsx)(s.p,{children:"Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list that were sent an email in the last 6 months."})}),(0,i.jsx)(a.Z,{value:"hints",children:(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsx)(s.li,{children:"Don't write SQL from scratch. Leverage what you already have."}),"\n",(0,i.jsxs)(s.li,{children:["Sent data is stored in ",(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_sent",children:"_Sent"})," Data View."]}),"\n",(0,i.jsx)(s.li,{children:"You don't have to worry about the 6-month requirement because _Sent Data View stores only six months of data."}),"\n",(0,i.jsxs)(s.li,{children:["You can chain multiple filters using ",(0,i.jsxs)(s.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:[(0,i.jsx)(s.code,{children:"WHERE"})," Logical Operators"]}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#left-and-right-joins",children:"LEFT JOIN"})," will add columns even if there is no data in the second table."]}),"\n",(0,i.jsxs)(s.li,{children:["You can find those records without data in the second table using ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-null-functions#is-null",children:(0,i.jsx)(s.code,{children:"IS NULL"})}),"."]}),"\n",(0,i.jsxs)(s.li,{children:["You need to join tables ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#joining-on",children:(0,i.jsx)(s.code,{children:"ON"})})," a common value."]}),"\n"]})}),(0,i.jsxs)(a.Z,{value:"solution",children:[(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',children:"SELECT sub.SubscriberKey\nFROM _Subscribers AS sub\n LEFT JOIN _Sent AS sent\n ON sent.SubscriberKey = sub.SubscriberKey\nWHERE\n sub.Status = 'active'\n AND sent.EventDate IS NOT NULL\n"})}),(0,i.jsxs)(s.p,{children:["You can write this query without the filter on ",(0,i.jsx)(s.code,{children:"sent.EventDate"})," but with ",(0,i.jsx)(s.code,{children:"INNER JOIN _Sent"})," instead. The above version makes it easier to change the query for the bonus below."]}),(0,i.jsxs)(s.p,{children:["Bonus: Change ",(0,i.jsx)(s.code,{children:"IS NOT NULL"})," to ",(0,i.jsx)(s.code,{children:"IS NULL"})," in the last line to see how many active Subscribers haven't received any communication in the last 6 months. It's an excellent segment for the win-back Journey!"]})]})]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-3---like-case-strings",children:"Level 3 - LIKE, CASE, Strings"}),"\n",(0,i.jsx)(s.p,{children:"Learn how to deal with string values, how to implement SQL version of if/else logic and how to make complex conditions calculating your data. With this, you are no longer limited to the data already available in the tables."}),"\n",(0,i.jsx)(s.h4,{id:"learning-materials-2",children:"Learning materials"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-like",children:"LIKE"})," - whole article, but focus on ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-like#like-with-wildcard",children:"LIKE with Wildcard"}),", you will use it more. Check out also the ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#like-operator",children:"LIKE operator in WHERE"})," section."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case",children:"CASE"})," - whole article plus ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#case-operator",children:"CASE operator in WHERE"})," section."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions",children:"String functions"})," - check out all, but focus on most frequently used ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions#left--right",children:"LEFT & RIGHT"}),", ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions#len",children:"LEN"})," and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions#charindex",children:"CHARINDEX"}),"."]}),"\n"]}),"\n",(0,i.jsx)(s.h4,{id:"check-your-skills-2",children:"Check your skills"}),"\n",(0,i.jsxs)(l.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],children:[(0,i.jsxs)(a.Z,{value:"exercise",children:[(0,i.jsxs)(s.p,{children:["Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list and add a new column called ",(0,i.jsx)(s.code,{children:"SubscriberKeyType"}),". In that new column, calculate whether the Subscriber Key is using an email address, Salesforce ID (and in this case - source object) or other. Possible values should be: ",(0,i.jsx)(s.code,{children:"Email"}),", ",(0,i.jsx)(s.code,{children:"Account"}),", ",(0,i.jsx)(s.code,{children:"Contact"}),", ",(0,i.jsx)(s.code,{children:"User"}),", ",(0,i.jsx)(s.code,{children:"Lead"}),", and ",(0,i.jsx)(s.code,{children:"Other"}),"."]}),(0,i.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(s.p,{children:["For our need here, if the Subscriber Key has 18 characters, no ",(0,i.jsx)(s.code,{children:"@"}),", and starts with three specific characters, it probably is a Salesforce ID. Those first three characters point to a specific Salesforce Object being a source of that record:"]}),(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"001 = Account"}),"\n",(0,i.jsx)(s.li,{children:"003 = Contact"}),"\n",(0,i.jsx)(s.li,{children:"005 = User"}),"\n",(0,i.jsx)(s.li,{children:"00Q = Lead"}),"\n"]})]})]}),(0,i.jsx)(a.Z,{value:"hints",children:(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["The easiest way to find an email is to use ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-like#like-with-wildcard",children:"LIKE with Wildcard"})," looking for ",(0,i.jsx)(s.code,{children:"{something}@{domain}.{tld}"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case",children:"CASE"})," returns the value assigned to the first matched scenario, so the order of ",(0,i.jsx)(s.code,{children:"WHEN"}),"s makes a difference."]}),"\n",(0,i.jsxs)(s.li,{children:["You can use multiple conditions and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-string-functions",children:"String functions"})," in the ",(0,i.jsx)(s.code,{children:"WHEN"})," checks."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-case",children:"CASE"})," can create a new column when you use it in ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#aliasing-with-as",children:"SELECT with an alias"}),"."]}),"\n"]})}),(0,i.jsxs)(a.Z,{value:"solution",children:[(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-sql",metastring:'title="Solution working on Parent Business Unit. The results will differ a lot depending on your SFMC implementation."',children:"SELECT\n SubscriberKey\n , CASE\n WHEN SubscriberKey LIKE '%@%.%' THEN 'Email'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '001' THEN 'Account'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '003' THEN 'Contact'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '005' THEN 'User'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '00Q' THEN 'Lead'\n ELSE 'Other'\n END AS SubscriberKeyType\nFROM _Subscribers\n"})}),(0,i.jsxs)(s.p,{children:["While you could use ",(0,i.jsx)(s.code,{children:"LIKE"})," for all the conditions, ",(0,i.jsx)(s.code,{children:"LEFT"})," will perform better in this ",(0,i.jsx)(s.code,{children:"CASE"})," because it will only compare the first three characters instead of anywhere in the whole string."]}),(0,i.jsx)(s.p,{children:"This query is excellent for understanding what the source of your Subscribers is. It will be even more helpful later when you learn how to aggregate the data. With it, you will quickly see the exact number of subscribers from each source."})]})]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-4---dates-where-operators-conversion",children:"Level 4 - Dates, WHERE operators, Conversion"}),"\n",(0,i.jsx)(s.p,{children:"Learn how to use the most important filter of all - date filtering. Read about essential date functions and what to do when you don't have the correct data type for your use case."}),"\n",(0,i.jsx)(s.h4,{id:"learning-materials-3",children:"Learning materials"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions",children:"Date functions"})," - ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate",children:"GETDATE"})," and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-date-functions#dateadd",children:"DATEADD"})," are the most important sections."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:"WHERE"})," - while we already covered parts of where, this is time to make a deeper dive into ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#comparison-operators",children:"Comparison operators"}),", ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#between-shorthand",children:"BETWEEN shorthand"})," and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where#in-shorthand",children:"IN shorthand"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-conversion-functions",children:"Conversion functions"})," - the whole article, but treat Data Types and Data Style Codes more as reference material."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_bounce",children:"_Bounce"})," Data View."]}),"\n"]}),"\n",(0,i.jsx)(s.h4,{id:"check-your-skills-3",children:"Check your skills"}),"\n",(0,i.jsxs)(l.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],children:[(0,i.jsxs)(a.Z,{value:"exercise",children:[(0,i.jsx)(s.p,{children:"Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list that joined the list within the last year and had a bounce on Google or Microsoft email between the first day of the current month (write that date manually, as a string) and today."}),(0,i.jsxs)(s.p,{children:["For this exercise, we will assume that Google users have emails like ",(0,i.jsx)(s.code,{children:"something@gmail.com"}),", Microsoft users - ",(0,i.jsx)(s.code,{children:"something@outlook.com"})," and Yahoo - ",(0,i.jsx)(s.code,{children:"something@yahoo.com"}),"."]})]}),(0,i.jsx)(a.Z,{value:"hints",children:(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["Consider impact of the ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#join-types",children:"JOIN type"})," on the query output. Can you leverage it to minimise the data you are working on?"]}),"\n",(0,i.jsx)(s.li,{children:"When writing the date comparison, take a pen and paper and draw a timeline with the part you want to capture. Seeing it makes it much easier to write it correctly."}),"\n",(0,i.jsx)(s.li,{children:"When deciding whether to use shorthands - go with the most readable option."}),"\n"]})}),(0,i.jsxs)(a.Z,{value:"solution",children:[(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',children:"SELECT sub.SubscriberKey\nFROM _Subscribers AS sub\n INNER JOIN _Bounce AS b\n ON b.SubscriberKey = sub.SubscriberKey\nWHERE\n sub.DateJoined >= DATEADD(YEAR, -1, GETDATE())\n AND b.Domain IN ('gmail.com', 'outlook.com', 'yahoo.com')\n AND b.EventDate BETWEEN CONVERT(DATE, '2023-01-01') AND GETDATE()\n"})}),(0,i.jsxs)(s.p,{children:["Bonus: Dive deeper into bounces by selecting SMTPBounceReason and SMTPMessage in the ",(0,i.jsx)(s.code,{children:"_Bounce"})," Data View to learn more about the root cause of the bounces."]})]})]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-5---multiple-joins-union-intersect-and-except",children:"Level 5 - Multiple JOINS, UNION, INTERSECT and EXCEPT"}),"\n",(0,i.jsx)(s.p,{children:"Learn to leverage data from multiple tables - the only limitations will be creativity and autokill function crashing queries after 30 minutes of execution ;)"}),"\n",(0,i.jsx)(s.h4,{id:"learning-materials-4",children:"Learning materials"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#multiple-joins",children:"JOINs"})," - yup, everything. The Cheat Sheet at the end should be useful to visualise multi-JOIN fun better."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#journey-data-views",children:"Journey Builder Data Views"})," - both _Journey and _JourneyActivity."]}),"\n"]}),"\n",(0,i.jsx)(s.h4,{id:"check-your-skills-4",children:"Check your skills"}),"\n",(0,i.jsxs)(l.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],children:[(0,i.jsxs)(a.Z,{value:"exercise",children:[(0,i.jsx)(s.p,{children:"Find some active Journey from the last quarter that already had some email sends with engagement. Note the name of the Journey and Email Activity."}),(0,i.jsx)(s.p,{children:"Write a query that will find Subscriber Key and Email Address for all Subscribers in your All Subscribers list that clicked a link in the first email activity in the Journey you selected."}),(0,i.jsxs)(s.p,{children:["Append a proof record with Subscriber Key equal to ",(0,i.jsx)(s.code,{children:"level5exercise"})," and your email address."]})]}),(0,i.jsx)(a.Z,{value:"hints",children:(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsx)(s.li,{children:"Think about which tables you need for the task. The less, the better."}),"\n",(0,i.jsxs)(s.li,{children:["Think what ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#join-types",children:"types of JOINs"})," will be needed. To make it easier - take a pen and paper and draw a diagram. Seriously, it's super helpful as the number of tables grows."]}),"\n",(0,i.jsx)(s.li,{children:"Think about what columns you can join the tables in a way that will protect you from the fan out (a one-to-many relationship that results in more rows than needed in the output)."}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#union",children:"UNION"})," with ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#aliasing-with-as",children:"aliases"})," is great for arbitrary added records in SQL."]}),"\n"]})}),(0,i.jsxs)(a.Z,{value:"solution",children:[(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',children:"SELECT\n sub.SubscriberKey\n , sub.EmailAddress\nFROM _Subscribers AS sub\n INNER JOIN _Click AS c\n ON c.SubscriberKey = sub.SubscriberKey\n AND c.IsUnique = 1\n INNER JOIN _JourneyActivity AS ja\n ON ja.JourneyActivityObjectID = c.TriggererSendDefinitionObjectID\n INNER JOIN _Journey AS j\n ON j.VersionID = ja.VersionID\nWHERE\n j.JourneyName = 'SelectedJourneyName'\n AND ja.ActivityName = 'SelectedEmailActivityName'\n\nUNION\n\nSELECT\n 'level5exercise' AS SubscriberKey\n , 'your@email.address' AS EmailAddress\n"})}),(0,i.jsxs)(s.p,{children:["Bonus: the fun with multiple joins ",(0,i.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution",children:"never ends"}),"."]})]})]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-6---group-count-top-and-having",children:"Level 6 - GROUP, COUNT, TOP and HAVING"}),"\n",(0,i.jsx)(s.p,{children:"Graduate from just playing with rows and start calculating the data to see patterns, outliers and problems. It is handy for SFMC Administrators and Consultants performing analysis on the platform data."}),"\n",(0,i.jsx)(s.h4,{id:"learning-materials-5",children:"Learning materials"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions",children:"Aggregate functions"})," - focus on ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#group-by",children:"GROUP BY"}),", ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#count",children:"COUNT"})," and ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#having",children:"HAVING"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"#order-of-operations",children:"Order of operations"})," - this is when it becomes tricky."]}),"\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#top",children:"TOP"})," - focus on how to use it with ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#top-with-order-by",children:"ORDER BY"})]}),"\n"]}),"\n",(0,i.jsx)(s.h4,{id:"check-your-skills-5",children:"Check your skills"}),"\n",(0,i.jsxs)(l.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],children:[(0,i.jsxs)(a.Z,{value:"exercise",children:[(0,i.jsx)(s.p,{children:"Find the number of sends, unique bounces, and the bounce rate (percent of bounces vs sends) per domain from deliveries attempted in the last month. Filter the records to only those Domains with at least 100 sends. Order by the bounce rate descending and limit to the top 20 records."}),(0,i.jsx)(s.p,{children:"If you send huge volumes, feel free to change the timeframe from last month to last week for the exercise."})]}),(0,i.jsxs)(a.Z,{value:"hints",children:[(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsx)(s.li,{children:"Build query step by step and validate the output. In this case, it might be easiest to write SELECT for just the Domain with the suitable tables and date filter, then add the GROUP BY to validate aggregation and then go with additional aggregate functions."}),"\n",(0,i.jsxs)(s.li,{children:["All calculated values require an ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#aliasing-with-as",children:"alias"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:["Pick the right ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-join#join-types",children:"type of JOIN"})," and correct set of joining rules so that you get precisely those rows that you need (limit the fan-out created by the possibility of many bounces per single send)."]}),"\n",(0,i.jsx)(s.li,{children:"When building the date filter, the output will be completely different depending on which date you use (hopefully, not every send will have a bounce)."}),"\n",(0,i.jsx)(s.li,{children:"Unfortunately, in SFMC, you cannot use alias in WHERE/HAVING/ORDER BY and similar places - you have to use the function/calculation."}),"\n",(0,i.jsx)(s.li,{children:"When calculating Bounce Rate, do it so that the outcome is an integer equal to a percent."}),"\n"]}),(0,i.jsxs)(s.p,{children:["Important: Because of the Query Studio bug, you cannot have spaces around the multiplication symbol (",(0,i.jsx)(s.code,{children:"*"}),"); otherwise, you will see an error related to a bad practice blanket SELECTs."]})]}),(0,i.jsxs)(a.Z,{value:"solution",children:[(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',children:"SELECT TOP 20\n s.Domain\n , COUNT(s.EventDate) AS SendCount\n , COUNT(b.EventDate) AS BounceCount\n , COUNT(b.EventDate)*100/COUNT(s.EventDate) AS BounceRate\nFROM _Sent AS s\n LEFT JOIN _Bounce AS b\n ON b.JobID = s.JobID\n AND b.ListID = s.ListID\n AND b.BatchID = s.BatchID\n AND b.SubscriberID = s.SubscriberID\n AND b.IsUnique = 1\nWHERE s.EventDate >= DATEADD(MONTH, -1, GETDATE())\nGROUP BY s.Domain\nHAVING COUNT(s.EventDate) >= 100\nORDER BY COUNT(b.EventDate)*100/COUNT(s.EventDate) DESC\n"})}),(0,i.jsx)(s.p,{children:"Bonus: This query might be performance heavy. One option to make it perform better is to shorten the timeframe in the WHERE filter. Another would be to split this query into two - one getting cumulative counts and the second responsible for doing math for Bounce Rate. Also, check how the numbers change when selecting only Hard Bounces."})]})]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"level-7---coming-soon-ish",children:"Level 7 - coming soon-ish"}),"\n",(0,i.jsx)(s.p,{children:"I will add more levels once I finish writing supporting learning materials :)"}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h2,{id:"writing-with-style",children:"Writing with style"}),"\n",(0,i.jsxs)(s.p,{children:["Knowing the available functions is one thing. Writing good and readable queries - another. Salesforce Marketing Cloud is always a team sport, so be sure to leverage the power of a ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-style-guide",children:"Style Guide"})," to improve the quality of your SQL."]}),"\n",(0,i.jsx)(s.h2,{id:"order-of-operations",children:"Order of operations"}),"\n",(0,i.jsx)(s.p,{children:"One of the key things to remember when building more complex queries is the order of operations, as it will decide what is in the output:"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-from",children:(0,i.jsx)(s.code,{children:"FROM"})})," > ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(s.code,{children:"WHERE"})})," > ",(0,i.jsx)(s.a,{href:"#group-by",children:(0,i.jsx)(s.code,{children:"GROUP BY"})})," > ",(0,i.jsx)(s.a,{href:"#having",children:(0,i.jsx)(s.code,{children:"HAVING"})})," > ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#distinct",children:(0,i.jsx)(s.code,{children:"DISTINCT"})})," > ",(0,i.jsx)(s.a,{href:"/docs/sql/sfmc-sql-select#top-with-order-by",children:(0,i.jsx)(s.code,{children:"ORDER BY"})})]}),"\n",(0,i.jsxs)(s.p,{children:["It means that rows filtered with ",(0,i.jsx)(s.code,{children:"WHERE"})," will not be considered for ",(0,i.jsx)(s.code,{children:"GROUP BY"})," and that ",(0,i.jsx)(s.code,{children:"DISTINCT"})," deduplication will be applied to results grouped and filtered by ",(0,i.jsx)(s.code,{children:"HAVING"})," - not the source data."]}),"\n",(0,i.jsx)(s.h2,{id:"all-sql-guides",children:"All SQL Guides"}),"\n",(0,i.jsx)(o.Z,{})]})}function x(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},7661:(e,s,n)=>{n.d(s,{Z:()=>g});n(7294);var i=n(512),t=n(8259),r=n(4791),l=n(2735),a=n(7325),o=n(3899);const c={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var d=n(5893);function h(e){let{href:s,children:n}=e;return(0,d.jsx)(r.Z,{href:s,className:(0,i.Z)("card padding--lg",c.cardContainer),children:n})}function u(e){let{href:s,icon:n,title:t,description:r}=e;return(0,d.jsxs)(h,{href:s,children:[(0,d.jsxs)(o.Z,{as:"h2",className:(0,i.Z)("text--truncate",c.cardTitle),title:t,children:[n," ",t]}),r&&(0,d.jsx)("p",{className:(0,i.Z)("text--truncate",c.cardDescription),title:r,children:r})]})}function f(e){let{item:s}=e;const n=(0,t.LM)(s);return n?(0,d.jsx)(u,{href:n,icon:"\ud83d\uddc3\ufe0f",title:s.label,description:s.description??(0,a.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:s.items.length})}):null}function m(e){let{item:s}=e;const n=(0,l.Z)(s.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,t.xz)(s.docId??void 0);return(0,d.jsx)(u,{href:s.href,icon:n,title:s.label,description:s.description??i?.description})}function x(e){let{item:s}=e;switch(s.type){case"link":return(0,d.jsx)(m,{item:s});case"category":return(0,d.jsx)(f,{item:s});default:throw new Error(`unknown item type ${JSON.stringify(s)}`)}}function j(e){let{className:s}=e;const n=(0,t.jA)();return(0,d.jsx)(g,{items:n.items,className:s})}function g(e){const{items:s,className:n}=e;if(!s)return(0,d.jsx)(j,{...e});const r=(0,t.MN)(s);return(0,d.jsx)("section",{className:(0,i.Z)("row",n),children:r.map(((e,s)=>(0,d.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,d.jsx)(x,{item:e})},s)))})}},425:(e,s,n)=>{n.d(s,{Z:()=>l});n(7294);var i=n(512);const t={tabItem:"tabItem_Ymn6"};var r=n(5893);function l(e){let{children:s,hidden:n,className:l}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,i.Z)(t.tabItem,l),hidden:n,children:s})}},3992:(e,s,n)=>{n.d(s,{Z:()=>w});var i=n(7294),t=n(512),r=n(2957),l=n(6550),a=n(1270),o=n(5238),c=n(3609),d=n(2560);function h(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,i.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:i,default:t}}=e;return{value:s,label:n,attributes:i,default:t}}))}(n);return function(e){const s=(0,c.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,n])}function f(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function m(e){let{queryString:s=!1,groupId:n}=e;const t=(0,l.k6)(),r=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,o._X)(r),(0,i.useCallback)((e=>{if(!r)return;const s=new URLSearchParams(t.location.search);s.set(r,e),t.replace({...t.location,search:s.toString()})}),[r,t])]}function x(e){const{defaultValue:s,queryString:n=!1,groupId:t}=e,r=u(e),[l,o]=(0,i.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(s){if(!f({value:s,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const i=n.find((e=>e.default))??n[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:s,tabValues:r}))),[c,h]=m({queryString:n,groupId:t}),[x,j]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[t,r]=(0,d.Nk)(n);return[t,(0,i.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:t}),g=(()=>{const e=c??x;return f({value:e,tabValues:r})?e:null})();(0,a.Z)((()=>{g&&o(g)}),[g]);return{selectedValue:l,selectValue:(0,i.useCallback)((e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),j(e)}),[h,j,r]),tabValues:r}}var j=n(1048);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=n(5893);function p(e){let{className:s,block:n,selectedValue:i,selectValue:l,tabValues:a}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.o5)(),d=e=>{const s=e.currentTarget,n=o.indexOf(s),t=a[n].value;t!==i&&(c(s),l(t))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.Z)("tabs",{"tabs--block":n},s),children:a.map((e=>{let{value:s,label:n,attributes:r}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:i===s?0:-1,"aria-selected":i===s,ref:e=>o.push(e),onKeyDown:h,onClick:d,...r,className:(0,t.Z)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":i===s}),children:n??s},s)}))})}function y(e){let{lazy:s,children:n,selectedValue:t}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=r.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((e,s)=>(0,i.cloneElement)(e,{key:s,hidden:e.props.value!==t})))})}function v(e){const s=x(e);return(0,b.jsxs)("div",{className:(0,t.Z)("tabs-container",g.tabList),children:[(0,b.jsx)(p,{...e,...s}),(0,b.jsx)(y,{...e,...s})]})}function w(e){const s=(0,j.Z)();return(0,b.jsx)(v,{...e,children:h(e.children)},String(s))}},1872:(e,s,n)=>{n.d(s,{m:()=>r});n(7294);const i="leadText_qzwo";var t=n(5893);const r=e=>{let{content:s}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("p",{id:i,children:s})})}},1151:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>l});var i=n(7294);const t={},r=i.createContext(t);function l(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b840d82f.d2e54469.js b/assets/js/b840d82f.d2e54469.js deleted file mode 100644 index ab8c71623..000000000 --- a/assets/js/b840d82f.d2e54469.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7542],{4137:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>p});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,n,l=function(e,t){if(null==e)return{};var a,n,l={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var o=n.createContext({}),u=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(o.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,i=e.originalType,o=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(a),h=l,p=d["".concat(o,".").concat(h)]||d[h]||m[h]||i;return a?n.createElement(p,r(r({ref:t},c),{},{components:a})):n.createElement(p,r({ref:t},c))}));function p(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var i=a.length,r=new Array(i);r[0]=h;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[d]="string"==typeof e?e:l,r[1]=s;for(var u=2;u<i;u++)r[u]=a[u];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"},7661:(e,t,a)=>{a.d(t,{Z:()=>k});var n=a(7294),l=a(6010),i=a(8259),r=a(3699),s=a(2735),o=a(7325);const u={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function c(e){let{href:t,children:a}=e;return n.createElement(r.Z,{href:t,className:(0,l.Z)("card padding--lg",u.cardContainer)},a)}function d(e){let{href:t,icon:a,title:i,description:r}=e;return n.createElement(c,{href:t},n.createElement("h2",{className:(0,l.Z)("text--truncate",u.cardTitle),title:i},a," ",i),r&&n.createElement("p",{className:(0,l.Z)("text--truncate",u.cardDescription),title:r},r))}function m(e){let{item:t}=e;const a=(0,i.Wl)(t);return a?n.createElement(d,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,o.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function h(e){let{item:t}=e;const a=(0,s.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,i.xz)(t.docId??void 0);return n.createElement(d,{href:t.href,icon:a,title:t.label,description:t.description??l?.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(h,{item:t});case"category":return n.createElement(m,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const a=(0,i.jA)();return n.createElement(k,{items:a.items,className:t})}function k(e){const{items:t,className:a}=e;if(!t)return n.createElement(f,e);const r=(0,i.MN)(t);return n.createElement("section",{className:(0,l.Z)("row",a)},r.map(((e,t)=>n.createElement("article",{key:t,className:"col col--6 margin-bottom--lg"},n.createElement(p,{item:e})))))}},425:(e,t,a)=>{a.d(t,{Z:()=>r});var n=a(7294),l=a(6010);const i={tabItem:"tabItem_Ymn6"};function r(e){let{children:t,hidden:a,className:r}=e;return n.createElement("div",{role:"tabpanel",className:(0,l.Z)(i.tabItem,r),hidden:a},t)}},3992:(e,t,a)=>{a.d(t,{Z:()=>v});var n=a(7462),l=a(7294),i=a(6010),r=a(2957),s=a(6550),o=a(5238),u=a(3609),c=a(2560);function d(e){return function(e){return l.Children.map(e,(e=>{if(!e||(0,l.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:l}}=e;return{value:t,label:a,attributes:n,default:l}}))}function m(e){const{values:t,children:a}=e;return(0,l.useMemo)((()=>{const e=t??d(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function h(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function p(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(i),(0,l.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})}),[i,n])]}function f(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,i=m(e),[r,s]=(0,l.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!h({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:i}))),[o,u]=p({queryString:a,groupId:n}),[d,f]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,i]=(0,c.Nk)(a);return[n,(0,l.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:n}),k=(()=>{const e=o??d;return h({value:e,tabValues:i})?e:null})();(0,l.useLayoutEffect)((()=>{k&&s(k)}),[k]);return{selectedValue:r,selectValue:(0,l.useCallback)((e=>{if(!h({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);s(e),u(e),f(e)}),[u,f,i]),tabValues:i}}var k=a(1048);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function y(e){let{className:t,block:a,selectedValue:s,selectValue:o,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.o5)(),m=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==s&&(d(t),o(n))},h=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;t=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;t=c[a]??c[c.length-1];break}}t?.focus()};return l.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:r}=e;return l.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>c.push(e),onKeyDown:h,onClick:m},r,{className:(0,i.Z)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":s===t})}),a??t)})))}function g(e){let{lazy:t,children:a,selectedValue:n}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===n));return e?(0,l.cloneElement)(e,{className:"margin-top--md"}):null}return l.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,l.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function N(e){const t=f(e);return l.createElement("div",{className:(0,i.Z)("tabs-container",b.tabList)},l.createElement(y,(0,n.Z)({},e,t)),l.createElement(g,(0,n.Z)({},e,t)))}function v(e){const t=(0,k.Z)();return l.createElement(N,(0,n.Z)({key:String(t)},e))}},1872:(e,t,a)=>{a.d(t,{m:()=>i});var n=a(7294);const l="leadText_qzwo",i=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:l},t))}},6927:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>c,default:()=>k,frontMatter:()=>u,metadata:()=>d,toc:()=>h});var n=a(7462),l=(a(7294),a(4137)),i=a(1872),r=a(3992),s=a(425),o=a(7661);const u={id:"sfmc-sql-basics",title:"SFMC SQL Basics",sidebar_label:"SQL Basics",description:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",image:"img/og/og-image-sql-basics.png",tags:["Marketing Cloud","SQL"]},c=void 0,d={unversionedId:"sql/sfmc-sql-basics",id:"sql/sfmc-sql-basics",title:"SFMC SQL Basics",description:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",source:"@site/docs/sql/sfmc-sql-basics.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-basics",permalink:"/docs/sql/sfmc-sql-basics",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-basics.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1673093914,formattedLastUpdatedAt:"Jan 7, 2023",frontMatter:{id:"sfmc-sql-basics",title:"SFMC SQL Basics",sidebar_label:"SQL Basics",description:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",image:"img/og/og-image-sql-basics.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"SFMC SQL",permalink:"/docs/category/sfmc-sql"},next:{title:"Select",permalink:"/docs/sql/sfmc-sql-select"}},m={},h=[{value:"How to segment data in Marketing Cloud",id:"how-to-segment-data-in-marketing-cloud",level:2},{value:"SQL in Salesforce Marketing Cloud",id:"sql-in-salesforce-marketing-cloud",level:2},{value:"Where to learn SFMC SQL",id:"where-to-learn-sfmc-sql",level:2},{value:"How to learn SFMC SQL",id:"how-to-learn-sfmc-sql",level:2},{value:"Level 1 - SELECT, FROM, WHERE",id:"level-1---select-from-where",level:3},{value:"Learning materials",id:"learning-materials",level:4},{value:"Check your skills",id:"check-your-skills",level:4},{value:"Level 2 - JOIN, Aliasing, NULL",id:"level-2---join-aliasing-null",level:3},{value:"Learning materials",id:"learning-materials-1",level:4},{value:"Check your skills",id:"check-your-skills-1",level:4},{value:"Level 3 - LIKE, CASE, Strings",id:"level-3---like-case-strings",level:3},{value:"Learning materials",id:"learning-materials-2",level:4},{value:"Check your skills",id:"check-your-skills-2",level:4},{value:"Level 4 - Dates, WHERE operators, Conversion",id:"level-4---dates-where-operators-conversion",level:3},{value:"Learning materials",id:"learning-materials-3",level:4},{value:"Check your skills",id:"check-your-skills-3",level:4},{value:"Level 5 - Multiple JOINS, UNION, INTERSECT and EXCEPT",id:"level-5---multiple-joins-union-intersect-and-except",level:3},{value:"Learning materials",id:"learning-materials-4",level:4},{value:"Check your skills",id:"check-your-skills-4",level:4},{value:"Level 6 - GROUP, COUNT, TOP and HAVING",id:"level-6---group-count-top-and-having",level:3},{value:"Learning materials",id:"learning-materials-5",level:4},{value:"Check your skills",id:"check-your-skills-5",level:4},{value:"Level 7 - coming soon-ish",id:"level-7---coming-soon-ish",level:3},{value:"Writing with style",id:"writing-with-style",level:2},{value:"Order of operations",id:"order-of-operations",level:2},{value:"All SQL Guides",id:"all-sql-guides",level:2}],p={toc:h},f="wrapper";function k(e){let{components:t,...a}=e;return(0,l.kt)(f,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)(i.m,{content:"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.",mdxType:"LeadText"}),(0,l.kt)("h2",{id:"how-to-segment-data-in-marketing-cloud"},"How to segment data in Marketing Cloud"),(0,l.kt)("p",null,"Salesforce Marketing Cloud offers a few ways of segmenting data for your marketing needs. Out of the box, you can use Filters and SQL Query Activities."),(0,l.kt)("p",null,"Filters are a straightforward drag-and-drop solution for one-time (Filtered Data Extensions) or refreshed on-schedule (Data Filters with Automation) segmentation. Unfortunately, they are constrained, as they allow you to copy a single Data Extension with all its columns and filtered-down rows. That filtering can leverage source Data Extension values, another Data Extension values (through Data Relationship) or Measures. That's it. For real Marketing Automation, it's not enough."),(0,l.kt)("p",null,"This is why you are looking to learn about SFMC SQL. Along with Automation Studio Query Activity, it will allow you to deploy any segmentation scenario you want with complete control over the output columns, names and values. However, with great power comes some learning required."),(0,l.kt)("p",null,"There is also a third way - paid AppExchange solutions that offer you a way to eat a cookie and have a cookie: the full power of SQL with a drag-and-drop interface. For a price."),(0,l.kt)("p",null,"You can check my comparison of all the above options in my ",(0,l.kt)("a",{parentName:"p",href:"/docs/config/sfmc-appexchange-solutions#sfmc-segmentation-solutions"},"here"),". This article will focus only on the most powerful and free option - SFMC SQL."),(0,l.kt)("h2",{id:"sql-in-salesforce-marketing-cloud"},"SQL in Salesforce Marketing Cloud"),(0,l.kt)("p",null,"SQL (Structured Query Language) is one of the best ways to work with relational databases. And Marketing Cloud's Data Extensions, with the help of Data Designer, offer precisely that. A relational database. The same is valid for system Data Views containing tracking data. Because of this, SQL is used in SFMC whenever powerful segmentation is needed (mainly using Automation Studio)."),(0,l.kt)("p",null,"The main difference from standard SQL (SFMC uses more or less SQL Server 2016) is that SFMC supports only the ",(0,l.kt)("inlineCode",{parentName:"p"},"SELECT")," statement. Neither ",(0,l.kt)("inlineCode",{parentName:"p"},"INSERT"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"UPDATE")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"DELETE")," are officially supported. It is because the queries are executed as a part of the backend query and are limited to provide non-breakable functionality."),(0,l.kt)("p",null,"Another limiting characteristic of SFMC SQL is visible in the data accessible by queries. Only data stored in data extensions or system data views is available. Moreover, you can save the results only to the data extensions. The reason is other data structures of SFMC are not relational databases."),(0,l.kt)("p",null,"Finally, the significant limitation you might hit as your Marketing Cloud grows is AutoKill. It will automatically stop your query if the execution time exceeds the 30 minutes limit. Think about the query with the future in mind. It is vital for queries that are supposed to be the backbones of your data management flow in Marketing Cloud. Even if it works great now, consider how it will behave once you have more data in the system. One of the great ways to not trigger AutoKill is to implement retention periods for the Data Extensions used in the query to limit input data."),(0,l.kt)("h2",{id:"where-to-learn-sfmc-sql"},"Where to learn SFMC SQL"),(0,l.kt)("p",null,"Before we start with the real deal, let's cover where to learn to write SQL. I recommend getting a ",(0,l.kt)("a",{parentName:"p",href:"/docs/config/sfmc-appexchange-solutions#query-studio"},"Query Studio"),". It's a free AppExchange add-on to Marketing Cloud developed by Salesforce. While it has cons, it's perfect for quickly learning how to query."),(0,l.kt)("p",null,"If you cannot install this app in your Marketing Cloud, you still can learn using Query Activities in Automation Studio, but it will be much less user-friendly. For each change in the query, you will have to update the target Data Extension manually and go through multiple steps across the platform to see the results."),(0,l.kt)("p",null,"My approach is to always start in ",(0,l.kt)("a",{parentName:"p",href:"/docs/config/sfmc-appexchange-solutions#query-studio"},"Query Studio"),", and only once my SQL Query is complete and validated do I move it to Automation Studio."),(0,l.kt)("h2",{id:"how-to-learn-sfmc-sql"},"How to learn SFMC SQL"),(0,l.kt)("p",null,"SFMC SQL is very limited compared to the full power of Structured Query Language, but there are still many topics to cover. I split them into steps that slowly add more complex concepts to make it easier. Each should provide knowledge that you can actively use in your day-to-day work."),(0,l.kt)("p",null,"In each level, you will see:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Learning materials to read."),(0,l.kt)("li",{parentName:"ol"},"Exercise you can do in your Marketing Cloud platform to test your skills."),(0,l.kt)("li",{parentName:"ol"},"Hint that can help you with the exercise if you are stuck."),(0,l.kt)("li",{parentName:"ol"},"Example solution to that exercise. Keep in mind that there might be more than one correct approach.")),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-1---select-from-where"},"Level 1 - SELECT, FROM, WHERE"),(0,l.kt)("p",null,"Learn the three essential SQL statements for all queries. They will give you similar power to what Filters can do - with the bonus of choosing the columns you need for your final segment."),(0,l.kt)("h4",{id:"learning-materials"},"Learning materials"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select"},"SELECT")," - just the first part, before the aliasing section."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-from"},"FROM")," - whole article."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},"WHERE")," - the first part, before the Basic Operators, plus ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#equality-operators"},"Equality Operators")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#logical-operators"},"Logical Operators"),". Don't worry about Comparison operators or shorthands for now. Don't worry about the examples with dates and unknown functions. We will get there. For now, think about how you can filter based on simple values like status."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views"},"System Data Views")," - the basics and ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_subscribers"},"_Subscribers")," Data View.")),(0,l.kt)("h4",{id:"check-your-skills"},"Check your skills"),(0,l.kt)(r.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],mdxType:"Tabs"},(0,l.kt)(s.Z,{value:"exercise",mdxType:"TabItem"},(0,l.kt)("p",null,"Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list.")),(0,l.kt)(s.Z,{value:"hints",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"All Subscribers List data is stored in ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_subscribers"},"_Subscribers")," Data View."),(0,l.kt)("li",{parentName:"ol"},"If you are running your query on a child Business Unit, you will need to use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-from#enterprise-system-data-views"},(0,l.kt)("inlineCode",{parentName:"a"},"Ent.")," prefix"),"."),(0,l.kt)("li",{parentName:"ol"},"You don't have to ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select"},"SELECT")," any columns but the SubscriberKey. You can use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},"WHERE")," on not selected columns."),(0,l.kt)("li",{parentName:"ol"},"Current status of a Subscriber is saved in the ",(0,l.kt)("inlineCode",{parentName:"li"},"Status")," column of ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_subscribers"},"_Subscribers")," Data View as a string. You can use it for filtering with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},"WHERE"),"."))),(0,l.kt)(s.Z,{value:"solution",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',title:'"Solution',working:!0,on:!0,Parent:!0,Business:!0,'Unit"':!0},"SELECT SubscriberKey\nFROM _Subscribers\nWHERE Status = 'active'\n")),(0,l.kt)("p",null,"Bonus: you can change the last line to, for example, ",(0,l.kt)("inlineCode",{parentName:"p"},"WHERE Domain = 'gmail.com'")," to see how many Subscribers are using free Google inbox."))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-2---join-aliasing-null"},"Level 2 - JOIN, Aliasing, NULL"),(0,l.kt)("p",null,"Learn how to leverage a second Data Extension or Data View, change the output's column name, and deal with basic ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," cases."),(0,l.kt)("h4",{id:"learning-materials-1"},"Learning materials"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},"JOIN")," - ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#join-types"},"JOIN Types"),", ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#joining-on"},"Joining ON")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#table-name-prefix"},"Table Name Prefixes")," sections. It might be helpful to check out the ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#sfmc-sql-join-cheat-sheet"},"visual cheatsheet"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#aliasing-with-as"},"Aliasing")," - just the Aliasing with AS and Custom values sections."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions"},"NULL functions")," - just the first three paragraphs and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions#is-null"},"IS NULL")," section."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_sent"},"_Sent"),", ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_open"},"_Open")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_click"},"_Click")," Data Views.")),(0,l.kt)("h4",{id:"check-your-skills-1"},"Check your skills"),(0,l.kt)(r.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],mdxType:"Tabs"},(0,l.kt)(s.Z,{value:"exercise",mdxType:"TabItem"},(0,l.kt)("p",null,"Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list that were sent an email in the last 6 months.")),(0,l.kt)(s.Z,{value:"hints",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Don't write SQL from scratch. Leverage what you already have."),(0,l.kt)("li",{parentName:"ol"},"Sent data is stored in ",(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_sent"},"_Sent")," Data View."),(0,l.kt)("li",{parentName:"ol"},"You don't have to worry about the 6-month requirement because _Sent Data View stores only six months of data."),(0,l.kt)("li",{parentName:"ol"},"You can chain multiple filters using ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#logical-operators"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE")," Logical Operators"),"."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#left-and-right-joins"},"LEFT JOIN")," will add columns even if there is no data in the second table."),(0,l.kt)("li",{parentName:"ol"},"You can find those records without data in the second table using ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-null-functions#is-null"},(0,l.kt)("inlineCode",{parentName:"a"},"IS NULL")),"."),(0,l.kt)("li",{parentName:"ol"},"You need to join tables ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#joining-on"},(0,l.kt)("inlineCode",{parentName:"a"},"ON"))," a common value."))),(0,l.kt)(s.Z,{value:"solution",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',title:'"Solution',working:!0,on:!0,Parent:!0,Business:!0,'Unit"':!0},"SELECT sub.SubscriberKey\nFROM _Subscribers AS sub\n LEFT JOIN _Sent AS sent\n ON sent.SubscriberKey = sub.SubscriberKey\nWHERE\n sub.Status = 'active'\n AND sent.EventDate IS NOT NULL\n")),(0,l.kt)("p",null,"You can write this query without the filter on ",(0,l.kt)("inlineCode",{parentName:"p"},"sent.EventDate")," but with ",(0,l.kt)("inlineCode",{parentName:"p"},"INNER JOIN _Sent")," instead. The above version makes it easier to change the query for the bonus below."),(0,l.kt)("p",null,"Bonus: Change ",(0,l.kt)("inlineCode",{parentName:"p"},"IS NOT NULL")," to ",(0,l.kt)("inlineCode",{parentName:"p"},"IS NULL")," in the last line to see how many active Subscribers haven't received any communication in the last 6 months. It's an excellent segment for the win-back Journey!"))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-3---like-case-strings"},"Level 3 - LIKE, CASE, Strings"),(0,l.kt)("p",null,"Learn how to deal with string values, how to implement SQL version of if/else logic and how to make complex conditions calculating your data. With this, you are no longer limited to the data already available in the tables."),(0,l.kt)("h4",{id:"learning-materials-2"},"Learning materials"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-like"},"LIKE")," - whole article, but focus on ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-like#like-with-wildcard"},"LIKE with Wildcard"),", you will use it more. Check out also the ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#like-operator"},"LIKE operator in WHERE")," section."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case"},"CASE")," - whole article plus ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#case-operator"},"CASE operator in WHERE")," section."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-string-functions"},"String functions")," - check out all, but focus on most frequently used ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-string-functions#left--right"},"LEFT & RIGHT"),", ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-string-functions#len"},"LEN")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-string-functions#charindex"},"CHARINDEX"),".")),(0,l.kt)("h4",{id:"check-your-skills-2"},"Check your skills"),(0,l.kt)(r.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],mdxType:"Tabs"},(0,l.kt)(s.Z,{value:"exercise",mdxType:"TabItem"},(0,l.kt)("p",null,"Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list and add a new column called ",(0,l.kt)("inlineCode",{parentName:"p"},"SubscriberKeyType"),". In that new column, calculate whether the Subscriber Key is using an email address, Salesforce ID (and in this case - source object) or other. Possible values should be: ",(0,l.kt)("inlineCode",{parentName:"p"},"Email"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"Account"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"Contact"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"User"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"Lead"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"Other"),"."),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"For our need here, if the Subscriber Key has 18 characters, no ",(0,l.kt)("inlineCode",{parentName:"p"},"@"),", and starts with three specific characters, it probably is a Salesforce ID. Those first three characters point to a specific Salesforce Object being a source of that record:"),(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},"001 = Account"),(0,l.kt)("li",{parentName:"ul"},"003 = Contact"),(0,l.kt)("li",{parentName:"ul"},"005 = User"),(0,l.kt)("li",{parentName:"ul"},"00Q = Lead")))),(0,l.kt)(s.Z,{value:"hints",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"The easiest way to find an email is to use ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-like#like-with-wildcard"},"LIKE with Wildcard")," looking for ",(0,l.kt)("inlineCode",{parentName:"li"},"{something}@{domain}.{tld}"),"."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case"},"CASE")," returns the value assigned to the first matched scenario, so the order of ",(0,l.kt)("inlineCode",{parentName:"li"},"WHEN"),"s makes a difference."),(0,l.kt)("li",{parentName:"ol"},"You can use multiple conditions and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-string-functions"},"String functions")," in the ",(0,l.kt)("inlineCode",{parentName:"li"},"WHEN")," checks."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case"},"CASE")," can create a new column when you use it in ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#aliasing-with-as"},"SELECT with an alias"),"."))),(0,l.kt)(s.Z,{value:"solution",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Solution working on Parent Business Unit. The results will differ a lot depending on your SFMC implementation."',title:'"Solution',working:!0,on:!0,Parent:!0,Business:!0,"Unit.":!0,The:!0,results:!0,will:!0,differ:!0,a:!0,lot:!0,depending:!0,your:!0,SFMC:!0,'implementation."':!0},"SELECT\n SubscriberKey\n , CASE\n WHEN SubscriberKey LIKE '%@%.%' THEN 'Email'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '001' THEN 'Account'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '003' THEN 'Contact'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '005' THEN 'User'\n WHEN LEN(SubscriberKey) = 18 AND LEFT(SubscriberKey, 3) = '00Q' THEN 'Lead'\n ELSE 'Other'\n END AS SubscriberKeyType\nFROM _Subscribers\n")),(0,l.kt)("p",null,"While you could use ",(0,l.kt)("inlineCode",{parentName:"p"},"LIKE")," for all the conditions, ",(0,l.kt)("inlineCode",{parentName:"p"},"LEFT")," will perform better in this ",(0,l.kt)("inlineCode",{parentName:"p"},"CASE")," because it will only compare the first three characters instead of anywhere in the whole string."),(0,l.kt)("p",null,"This query is excellent for understanding what the source of your Subscribers is. It will be even more helpful later when you learn how to aggregate the data. With it, you will quickly see the exact number of subscribers from each source."))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-4---dates-where-operators-conversion"},"Level 4 - Dates, WHERE operators, Conversion"),(0,l.kt)("p",null,"Learn how to use the most important filter of all - date filtering. Read about essential date functions and what to do when you don't have the correct data type for your use case."),(0,l.kt)("h4",{id:"learning-materials-3"},"Learning materials"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions"},"Date functions")," - ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#getdate--getutcdate"},"GETDATE")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-date-functions#dateadd"},"DATEADD")," are the most important sections."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},"WHERE")," - while we already covered parts of where, this is time to make a deeper dive into ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#comparison-operators"},"Comparison operators"),", ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#between-shorthand"},"BETWEEN shorthand")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where#in-shorthand"},"IN shorthand"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-conversion-functions"},"Conversion functions")," - the whole article, but treat Data Types and Data Style Codes more as reference material."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#_bounce"},"_Bounce")," Data View.")),(0,l.kt)("h4",{id:"check-your-skills-3"},"Check your skills"),(0,l.kt)(r.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],mdxType:"Tabs"},(0,l.kt)(s.Z,{value:"exercise",mdxType:"TabItem"},(0,l.kt)("p",null,"Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list that joined the list within the last year and had a bounce on Google or Microsoft email between the first day of the current month (write that date manually, as a string) and today."),(0,l.kt)("p",null,"For this exercise, we will assume that Google users have emails like ",(0,l.kt)("inlineCode",{parentName:"p"},"something@gmail.com"),", Microsoft users - ",(0,l.kt)("inlineCode",{parentName:"p"},"something@outlook.com")," and Yahoo - ",(0,l.kt)("inlineCode",{parentName:"p"},"something@yahoo.com"),".")),(0,l.kt)(s.Z,{value:"hints",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Consider impact of the ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#join-types"},"JOIN type")," on the query output. Can you leverage it to minimise the data you are working on?"),(0,l.kt)("li",{parentName:"ol"},"When writing the date comparison, take a pen and paper and draw a timeline with the part you want to capture. Seeing it makes it much easier to write it correctly."),(0,l.kt)("li",{parentName:"ol"},"When deciding whether to use shorthands - go with the most readable option."))),(0,l.kt)(s.Z,{value:"solution",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',title:'"Solution',working:!0,on:!0,Parent:!0,Business:!0,'Unit"':!0},"SELECT sub.SubscriberKey\nFROM _Subscribers AS sub\n INNER JOIN _Bounce AS b\n ON b.SubscriberKey = sub.SubscriberKey\nWHERE\n sub.DateJoined >= DATEADD(YEAR, -1, GETDATE())\n AND b.Domain IN ('gmail.com', 'outlook.com', 'yahoo.com')\n AND b.EventDate BETWEEN CONVERT(DATE, '2023-01-01') AND GETDATE()\n")),(0,l.kt)("p",null,"Bonus: Dive deeper into bounces by selecting SMTPBounceReason and SMTPMessage in the ",(0,l.kt)("inlineCode",{parentName:"p"},"_Bounce")," Data View to learn more about the root cause of the bounces."))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-5---multiple-joins-union-intersect-and-except"},"Level 5 - Multiple JOINS, UNION, INTERSECT and EXCEPT"),(0,l.kt)("p",null,"Learn to leverage data from multiple tables - the only limitations will be creativity and autokill function crashing queries after 30 minutes of execution ;)"),(0,l.kt)("h4",{id:"learning-materials-4"},"Learning materials"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#multiple-joins"},"JOINs")," - yup, everything. The Cheat Sheet at the end should be useful to visualise multi-JOIN fun better."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/config/sfmc-system-data-views#journey-data-views"},"Journey Builder Data Views")," - both _Journey and _JourneyActivity.")),(0,l.kt)("h4",{id:"check-your-skills-4"},"Check your skills"),(0,l.kt)(r.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],mdxType:"Tabs"},(0,l.kt)(s.Z,{value:"exercise",mdxType:"TabItem"},(0,l.kt)("p",null,"Find some active Journey from the last quarter that already had some email sends with engagement. Note the name of the Journey and Email Activity."),(0,l.kt)("p",null,"Write a query that will find Subscriber Key and Email Address for all Subscribers in your All Subscribers list that clicked a link in the first email activity in the Journey you selected."),(0,l.kt)("p",null,"Append a proof record with Subscriber Key equal to ",(0,l.kt)("inlineCode",{parentName:"p"},"level5exercise")," and your email address.")),(0,l.kt)(s.Z,{value:"hints",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Think about which tables you need for the task. The less, the better."),(0,l.kt)("li",{parentName:"ol"},"Think what ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#join-types"},"types of JOINs")," will be needed. To make it easier - take a pen and paper and draw a diagram. Seriously, it's super helpful as the number of tables grows."),(0,l.kt)("li",{parentName:"ol"},"Think about what columns you can join the tables in a way that will protect you from the fan out (a one-to-many relationship that results in more rows than needed in the output)."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#union"},"UNION")," with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#aliasing-with-as"},"aliases")," is great for arbitrary added records in SQL."))),(0,l.kt)(s.Z,{value:"solution",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',title:'"Solution',working:!0,on:!0,Parent:!0,Business:!0,'Unit"':!0},"SELECT\n sub.SubscriberKey\n , sub.EmailAddress\nFROM _Subscribers AS sub\n INNER JOIN _Click AS c\n ON c.SubscriberKey = sub.SubscriberKey\n AND c.IsUnique = 1\n INNER JOIN _JourneyActivity AS ja\n ON ja.JourneyActivityObjectID = c.TriggererSendDefinitionObjectID\n INNER JOIN _Journey AS j\n ON j.VersionID = ja.VersionID\nWHERE\n j.JourneyName = 'SelectedJourneyName'\n AND ja.ActivityName = 'SelectedEmailActivityName'\n\nUNION\n\nSELECT\n 'level5exercise' AS SubscriberKey\n , 'your@email.address' AS EmailAddress\n")),(0,l.kt)("p",null,"Bonus: the fun with multiple joins ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends#solution"},"never ends"),"."))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-6---group-count-top-and-having"},"Level 6 - GROUP, COUNT, TOP and HAVING"),(0,l.kt)("p",null,"Graduate from just playing with rows and start calculating the data to see patterns, outliers and problems. It is handy for SFMC Administrators and Consultants performing analysis on the platform data."),(0,l.kt)("h4",{id:"learning-materials-5"},"Learning materials"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-aggregate-functions"},"Aggregate functions")," - focus on ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-aggregate-functions#group-by"},"GROUP BY"),", ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-aggregate-functions#count"},"COUNT")," and ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-aggregate-functions#having"},"HAVING"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#order-of-operations"},"Order of operations")," - this is when it becomes tricky."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#top"},"TOP")," - focus on how to use it with ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#top-with-order-by"},"ORDER BY"))),(0,l.kt)("h4",{id:"check-your-skills-5"},"Check your skills"),(0,l.kt)(r.Z,{defaultValue:"exercise",values:[{label:"Exercise",value:"exercise"},{label:"Hints",value:"hints"},{label:"Solution",value:"solution"}],mdxType:"Tabs"},(0,l.kt)(s.Z,{value:"exercise",mdxType:"TabItem"},(0,l.kt)("p",null,"Find the number of sends, unique bounces, and the bounce rate (percent of bounces vs sends) per domain from deliveries attempted in the last month. Filter the records to only those Domains with at least 100 sends. Order by the bounce rate descending and limit to the top 20 records."),(0,l.kt)("p",null,"If you send huge volumes, feel free to change the timeframe from last month to last week for the exercise.")),(0,l.kt)(s.Z,{value:"hints",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Build query step by step and validate the output. In this case, it might be easiest to write SELECT for just the Domain with the suitable tables and date filter, then add the GROUP BY to validate aggregation and then go with additional aggregate functions."),(0,l.kt)("li",{parentName:"ol"},"All calculated values require an ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select#aliasing-with-as"},"alias"),"."),(0,l.kt)("li",{parentName:"ol"},"Pick the right ",(0,l.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#join-types"},"type of JOIN")," and correct set of joining rules so that you get precisely those rows that you need (limit the fan-out created by the possibility of many bounces per single send)."),(0,l.kt)("li",{parentName:"ol"},"When building the date filter, the output will be completely different depending on which date you use (hopefully, not every send will have a bounce)."),(0,l.kt)("li",{parentName:"ol"},"Unfortunately, in SFMC, you cannot use alias in WHERE/HAVING/ORDER BY and similar places - you have to use the function/calculation."),(0,l.kt)("li",{parentName:"ol"},"When calculating Bounce Rate, do it so that the outcome is an integer equal to a percent.")),(0,l.kt)("p",null,"Important: Because of the Query Studio bug, you cannot have spaces around the multiplication symbol (",(0,l.kt)("inlineCode",{parentName:"p"},"*"),"); otherwise, you will see an error related to a bad practice blanket SELECTs.")),(0,l.kt)(s.Z,{value:"solution",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Solution working on Parent Business Unit"',title:'"Solution',working:!0,on:!0,Parent:!0,Business:!0,'Unit"':!0},"SELECT TOP 20\n s.Domain\n , COUNT(s.EventDate) AS SendCount\n , COUNT(b.EventDate) AS BounceCount\n , COUNT(b.EventDate)*100/COUNT(s.EventDate) AS BounceRate\nFROM _Sent AS s\n LEFT JOIN _Bounce AS b\n ON b.JobID = s.JobID\n AND b.ListID = s.ListID\n AND b.BatchID = s.BatchID\n AND b.SubscriberID = s.SubscriberID\n AND b.IsUnique = 1\nWHERE s.EventDate >= DATEADD(MONTH, -1, GETDATE())\nGROUP BY s.Domain\nHAVING COUNT(s.EventDate) >= 100\nORDER BY COUNT(b.EventDate)*100/COUNT(s.EventDate) DESC\n")),(0,l.kt)("p",null,"Bonus: This query might be performance heavy. One option to make it perform better is to shorten the timeframe in the WHERE filter. Another would be to split this query into two - one getting cumulative counts and the second responsible for doing math for Bounce Rate. Also, check how the numbers change when selecting only Hard Bounces."))),(0,l.kt)("hr",null),(0,l.kt)("h3",{id:"level-7---coming-soon-ish"},"Level 7 - coming soon-ish"),(0,l.kt)("p",null,"I will add more levels once I finish writing supporting learning materials :)"),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"writing-with-style"},"Writing with style"),(0,l.kt)("p",null,"Knowing the available functions is one thing. Writing good and readable queries - another. Salesforce Marketing Cloud is always a team sport, so be sure to leverage the power of a ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-style-guide"},"Style Guide")," to improve the quality of your SQL."),(0,l.kt)("h2",{id:"order-of-operations"},"Order of operations"),(0,l.kt)("p",null,"One of the key things to remember when building more complex queries is the order of operations, as it will decide what is in the output:"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-from"},(0,l.kt)("inlineCode",{parentName:"a"},"FROM"))," > ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," > ",(0,l.kt)("a",{parentName:"p",href:"#group-by"},(0,l.kt)("inlineCode",{parentName:"a"},"GROUP BY"))," > ",(0,l.kt)("a",{parentName:"p",href:"#having"},(0,l.kt)("inlineCode",{parentName:"a"},"HAVING"))," > ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#distinct"},(0,l.kt)("inlineCode",{parentName:"a"},"DISTINCT"))," > ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#top-with-order-by"},(0,l.kt)("inlineCode",{parentName:"a"},"ORDER BY"))),(0,l.kt)("p",null,"It means that rows filtered with ",(0,l.kt)("inlineCode",{parentName:"p"},"WHERE")," will not be considered for ",(0,l.kt)("inlineCode",{parentName:"p"},"GROUP BY")," and that ",(0,l.kt)("inlineCode",{parentName:"p"},"DISTINCT")," deduplication will be applied to results grouped and filtered by ",(0,l.kt)("inlineCode",{parentName:"p"},"HAVING")," - not the source data."),(0,l.kt)("h2",{id:"all-sql-guides"},"All SQL Guides"),(0,l.kt)(o.Z,{mdxType:"DocCardList"}))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b84a6020.1c18e841.js b/assets/js/b84a6020.1c18e841.js deleted file mode 100644 index 3877adfc5..000000000 --- a/assets/js/b84a6020.1c18e841.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5811],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>h});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):r(r({},t),e)),o},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(o),u=a,h=p["".concat(l,".").concat(u)]||p[u]||m[u]||i;return o?n.createElement(h,r(r({ref:t},d),{},{components:o})):n.createElement(h,r({ref:t},d))}));function h(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,r[1]=s;for(var c=2;c<i;c++)r[c]=o[c];return n.createElement.apply(null,r)}return n.createElement.apply(null,o)}u.displayName="MDXCreateElement"},1872:(e,t,o)=>{o.d(t,{m:()=>i});var n=o(7294);const a="leadText_qzwo",i=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:a},t))}},268:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=o(7462),a=(o(7294),o(4137)),i=o(1872);const r={id:"ssjs-mobileconnect-phone-change",title:"MobileConnect Phone Change",sidebar_label:"MobileConnect Phone Change",description:"Control your MobileConnect data with hidden _MobileAddress features.",image:"img/og/og-image-ssjs-mobileconnect-phone-change.png",tags:["Marketing Cloud","SSJS","SMS"]},s=void 0,l={unversionedId:"ssjs/snippets/ssjs-mobileconnect-phone-change",id:"ssjs/snippets/ssjs-mobileconnect-phone-change",title:"MobileConnect Phone Change",description:"Control your MobileConnect data with hidden _MobileAddress features.",source:"@site/docs/ssjs/snippets/ssjs-mobileconnect-phone-change.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/ssjs-mobileconnect-phone-change",permalink:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/ssjs-mobileconnect-phone-change.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"SMS",permalink:"/docs/tags/sms"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1675714335,formattedLastUpdatedAt:"Feb 6, 2023",frontMatter:{id:"ssjs-mobileconnect-phone-change",title:"MobileConnect Phone Change",sidebar_label:"MobileConnect Phone Change",description:"Control your MobileConnect data with hidden _MobileAddress features.",image:"img/og/og-image-ssjs-mobileconnect-phone-change.png",tags:["Marketing Cloud","SSJS","SMS"]},sidebar:"snippets",previous:{title:"Solve with Cloud Page Apps",permalink:"/docs/ssjs/snippets/sfmc-cloud-page-apps"},next:{title:"AMPScript in SSJS",permalink:"/docs/ssjs/snippets/ampscript-in-ssjs"}},c={},d=[{value:"Problem with changing MobileConnect Mobile Number",id:"problem-with-changing-mobileconnect-mobile-number",level:2},{value:"Solution",id:"solution",level:2},{value:"Options",id:"options",level:2},{value:"Change or Merge Contact ID",id:"change-or-merge-contact-id",level:3},{value:"Add, Lookup, Remove",id:"add-lookup-remove",level:3},{value:"Self-serve it",id:"self-serve-it",level:3},{value:"Automate it",id:"automate-it",level:3}],p={toc:d},m="wrapper";function u(e){let{components:t,...o}=e;return(0,a.kt)(m,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(i.m,{content:"Control your MobileConnect data with hidden _MobileAddress features.",mdxType:"LeadText"}),(0,a.kt)("h2",{id:"problem-with-changing-mobileconnect-mobile-number"},"Problem with changing MobileConnect Mobile Number"),(0,a.kt)("p",null,"There is a lot to like about the Salesforce Marketing Cloud Mobile Connect, but Contact management is not the one."),(0,a.kt)("p",null,"One of the problems is managing the Mobile Phone Number. It is a crucial data point because we are using it to send the SMS and because it is the key value for many of the ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#mobileconnect-data-views"},"MobileConnect Data Views"),"."),(0,a.kt)("p",null,"There are many scenarios when we might want to update the user's Mobile Number. Be it wrong data in the initial load or client's request to change the number."),(0,a.kt)("p",null,"The official approach is to import the contact with the new Mobile Number. It, however, won't overwrite the previous phone. It will merely add a new one to the record with higher ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress"},"priority"),". Not perfect."),(0,a.kt)("p",null,"So what you can do? Leverage the ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress"},(0,a.kt)("inlineCode",{parentName:"a"},"_MobileAddress")," Data View")," along with simple SSJS snippet and force Marketing Cloud to do what you want it to do."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"The solution shown below is working perfectly fine right now. However, remember that Salesforce considers ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress"},(0,a.kt)("inlineCode",{parentName:"a"},"_MobileAddress")," Data View")," as legacy and unsupported, so be sure to make the first run on test data to check whether it is still working correctly."),(0,a.kt)("p",{parentName:"admonition"},"Considering how intertwined this Data View still is with MobileConnect, I don't expect changes anytime soon.")),(0,a.kt)("h2",{id:"solution"},"Solution"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress"},(0,a.kt)("inlineCode",{parentName:"a"},"_MobileAddress")," Data View")," is unique, as it can be modified using SSJS - this is not the case with most other Data Views. We can make use of this by using ",(0,a.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsUpdate.htm"},(0,a.kt)("inlineCode",{parentName:"a"},"Rows.Update"))," function."),(0,a.kt)("p",null,"We will need:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Contact ID - you can check it by going to MobileConnect \xbb Manage Contacts \xbb clicking a Contact Key \xbb Attributes tab. It will be in the first table."),(0,a.kt)("li",{parentName:"ul"},"New Mobile Number - must be in the MobileConnect format with the dialling code prefix (without the ",(0,a.kt)("inlineCode",{parentName:"li"},"+")," or ",(0,a.kt)("inlineCode",{parentName:"li"},"00"),"). For example, Poland has +48 dialling code and nine-digit numbers, so the correct form is 48123456789.")),(0,a.kt)("p",null,"With that two information, ",(0,a.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionFunctions.htm"},(0,a.kt)("inlineCode",{parentName:"a"},"Init"))," the Data View and update it. Remember to load the Core Library."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'{4-5} title="Change Mobile Number of a single Contact"',"{4-5}":!0,title:'"Change',Mobile:!0,Number:!0,of:!0,a:!0,single:!0,'Contact"':!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n var contactId = 123456789;\n var mobileAddressDataView = DataExtension.Init('_MobileAddress');\n var result = mobileAddressDataView.Rows.Update({_MobileNumber: '48123456789'}, ['_ContactID'], [contactId]);\n<\/script>\n")),(0,a.kt)("p",null,"That's it. Running this snippet - even in a Cloud Page or ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource"},"Code Resource")," - will change the Mobile Number assigned to the Contact. Just be sure to publish the page and load it. The Web Studio Preview won't work."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"If the new Mobile Number has different dialling code, be sure to also update ",(0,a.kt)("inlineCode",{parentName:"p"},"_CountryCode")," field with appropriate two-letter code (for example, ",(0,a.kt)("inlineCode",{parentName:"p"},"PL"),")"),(0,a.kt)("p",{parentName:"admonition"},"You can do it in one line:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-js"},"mobileAddressDataView.Rows.Update({_MobileNumber:'48123456789',_CountryCode:'PL'},['_ContactID'],[contactId]);\n"))),(0,a.kt)("h2",{id:"options"},"Options"),(0,a.kt)("p",null,"You can adapt the above script to better suit your needs."),(0,a.kt)("h3",{id:"change-or-merge-contact-id"},"Change or Merge Contact ID"),(0,a.kt)("p",null,"You are not limited to Mobile Number change in MobileConnect with this solution. You can leverage ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress"},(0,a.kt)("inlineCode",{parentName:"a"},"_MobileAddress")," Data View")," to even merge MobileConnect contacts."),(0,a.kt)("p",null,"Use cases?"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"You might have two contacts with different phone numbers that you have identified to be the same person (one tied to personal and second to work number). To optimize the contact count, you can make a merge."),(0,a.kt)("li",{parentName:"ul"},"Your client opted-in for Keyword using SMS. It created a Contact with the phone number as Contact Key. Later your CRM pushed this contact to Marketing Cloud with proper Contact Key. Merge it to have the engagement data adequately allocated.")),(0,a.kt)("p",null,"To do this, you search by Contact ID of the to-be-merged record and update it to the one you want to use after the merge."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:'{5-6} title="Change Contact ID of a single Contact"',"{5-6}":!0,title:'"Change',Contact:!0,ID:!0,of:!0,a:!0,single:!0,'Contact"':!0},"<script runat=\"server\">\n Platform.Load('Core','1');\n var currentContactId = 123456789;\n var targetContactId = 987654321;\n var mobileAddressDataView = DataExtension.Init('_MobileAddress');\n var result = mobileAddressDataView.Rows.Update({_ContactID: targetContactId}, ['_ContactID'], [currentContactId]);\n<\/script>\n")),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"You cannot merge two Contacts with the same Mobile Number. It is why it is crucial to leverage this snippet before you import new Contacts into MobileConnect."),(0,a.kt)("p",{parentName:"admonition"},"You can, however, change the Mobile Number before merging. For example, by adding 0 before the dialling code. The phone won't be correct, but you can lower priority. Engagement and Subscription history is assigned to Mobile Number, not specific Contact ID, so as long as the merged record will keep the original number, it will also have its history.")),(0,a.kt)("h3",{id:"add-lookup-remove"},"Add, Lookup, Remove"),(0,a.kt)("p",null,"You are not limited to updating. You can also leverage other SSJS functions to ",(0,a.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsAdd.htm"},"add"),", ",(0,a.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsLookup.htm"},"lookup")," or ",(0,a.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsRemove.htm"},"remove")," MobileConnect Contacts. Those might be great for enhancing your Preference Center or leveraging Automation Studio."),(0,a.kt)("h3",{id:"self-serve-it"},"Self-serve it"),(0,a.kt)("p",null,"Above snippets are great for single cases you want to cover, but you might consider using them as a part of your Preference Center and allow your customer to change their phone number themselves."),(0,a.kt)("p",null,"Be sure, however, to normalize the number provided manually by the client for it to be numbers only with appropriate dialling code and country code."),(0,a.kt)("h3",{id:"automate-it"},"Automate it"),(0,a.kt)("p",null,"You can also leverage the snippet within an Automation Studio using Data Extension as a batch data source and Script Activity for processing. Pack the snippet within a ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-loops"},(0,a.kt)("inlineCode",{parentName:"a"},"for")," loop")," and make a more significant change to your MobileConnect data."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Technically you can use this solution to modify any field of ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress"},(0,a.kt)("inlineCode",{parentName:"a"},"_MobileAddress")),". Due to the unsupported status of this Data View, I would recommend using Contact Builder whenever it is enough for your use case. It allows you to change everything but the Mobile Number and Contact ID.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b84a6020.b74538bf.js b/assets/js/b84a6020.b74538bf.js new file mode 100644 index 000000000..f585ea2aa --- /dev/null +++ b/assets/js/b84a6020.b74538bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[5811],{4215:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=o(5893),i=o(1151),s=o(1872);const a={id:"ssjs-mobileconnect-phone-change",title:"MobileConnect Phone Change",sidebar_label:"MobileConnect Phone Change",description:"Control your MobileConnect data with hidden _MobileAddress features.",image:"img/og/og-image-ssjs-mobileconnect-phone-change.png",tags:["Marketing Cloud","SSJS","SMS"]},r=void 0,c={id:"ssjs/snippets/ssjs-mobileconnect-phone-change",title:"MobileConnect Phone Change",description:"Control your MobileConnect data with hidden _MobileAddress features.",source:"@site/docs/ssjs/snippets/ssjs-mobileconnect-phone-change.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/ssjs-mobileconnect-phone-change",permalink:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/ssjs-mobileconnect-phone-change.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"SMS",permalink:"/docs/tags/sms"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1675714335,formattedLastUpdatedAt:"Feb 6, 2023",frontMatter:{id:"ssjs-mobileconnect-phone-change",title:"MobileConnect Phone Change",sidebar_label:"MobileConnect Phone Change",description:"Control your MobileConnect data with hidden _MobileAddress features.",image:"img/og/og-image-ssjs-mobileconnect-phone-change.png",tags:["Marketing Cloud","SSJS","SMS"]},sidebar:"snippets",previous:{title:"Solve with Cloud Page Apps",permalink:"/docs/ssjs/snippets/sfmc-cloud-page-apps"},next:{title:"AMPScript in SSJS",permalink:"/docs/ssjs/snippets/ampscript-in-ssjs"}},l={},d=[{value:"Problem with changing MobileConnect Mobile Number",id:"problem-with-changing-mobileconnect-mobile-number",level:2},{value:"Solution",id:"solution",level:2},{value:"Options",id:"options",level:2},{value:"Change or Merge Contact ID",id:"change-or-merge-contact-id",level:3},{value:"Add, Lookup, Remove",id:"add-lookup-remove",level:3},{value:"Self-serve it",id:"self-serve-it",level:3},{value:"Automate it",id:"automate-it",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.m,{content:"Control your MobileConnect data with hidden _MobileAddress features."}),"\n",(0,n.jsx)(t.h2,{id:"problem-with-changing-mobileconnect-mobile-number",children:"Problem with changing MobileConnect Mobile Number"}),"\n",(0,n.jsx)(t.p,{children:"There is a lot to like about the Salesforce Marketing Cloud Mobile Connect, but Contact management is not the one."}),"\n",(0,n.jsxs)(t.p,{children:["One of the problems is managing the Mobile Phone Number. It is a crucial data point because we are using it to send the SMS and because it is the key value for many of the ",(0,n.jsx)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#mobileconnect-data-views",children:"MobileConnect Data Views"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"There are many scenarios when we might want to update the user's Mobile Number. Be it wrong data in the initial load or client's request to change the number."}),"\n",(0,n.jsxs)(t.p,{children:["The official approach is to import the contact with the new Mobile Number. It, however, won't overwrite the previous phone. It will merely add a new one to the record with higher ",(0,n.jsx)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress",children:"priority"}),". Not perfect."]}),"\n",(0,n.jsxs)(t.p,{children:["So what you can do? Leverage the ",(0,n.jsxs)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress",children:[(0,n.jsx)(t.code,{children:"_MobileAddress"})," Data View"]})," along with simple SSJS snippet and force Marketing Cloud to do what you want it to do."]}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["The solution shown below is working perfectly fine right now. However, remember that Salesforce considers ",(0,n.jsxs)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress",children:[(0,n.jsx)(t.code,{children:"_MobileAddress"})," Data View"]})," as legacy and unsupported, so be sure to make the first run on test data to check whether it is still working correctly."]}),(0,n.jsx)(t.p,{children:"Considering how intertwined this Data View still is with MobileConnect, I don't expect changes anytime soon."})]}),"\n",(0,n.jsx)(t.h2,{id:"solution",children:"Solution"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsxs)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress",children:[(0,n.jsx)(t.code,{children:"_MobileAddress"})," Data View"]})," is unique, as it can be modified using SSJS - this is not the case with most other Data Views. We can make use of this by using ",(0,n.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsUpdate.htm",children:(0,n.jsx)(t.code,{children:"Rows.Update"})})," function."]}),"\n",(0,n.jsx)(t.p,{children:"We will need:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Contact ID - you can check it by going to MobileConnect \xbb Manage Contacts \xbb clicking a Contact Key \xbb Attributes tab. It will be in the first table."}),"\n",(0,n.jsxs)(t.li,{children:["New Mobile Number - must be in the MobileConnect format with the dialling code prefix (without the ",(0,n.jsx)(t.code,{children:"+"})," or ",(0,n.jsx)(t.code,{children:"00"}),"). For example, Poland has +48 dialling code and nine-digit numbers, so the correct form is 48123456789."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["With that two information, ",(0,n.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionFunctions.htm",children:(0,n.jsx)(t.code,{children:"Init"})})," the Data View and update it. Remember to load the Core Library."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'{4-5} title="Change Mobile Number of a single Contact"',children:"<script runat=\"server\">\n Platform.Load('Core','1');\n var contactId = 123456789;\n var mobileAddressDataView = DataExtension.Init('_MobileAddress');\n var result = mobileAddressDataView.Rows.Update({_MobileNumber: '48123456789'}, ['_ContactID'], [contactId]);\n<\/script>\n"})}),"\n",(0,n.jsxs)(t.p,{children:["That's it. Running this snippet - even in a Cloud Page or ",(0,n.jsx)(t.a,{href:"/docs/config/sfmc-code-resource",children:"Code Resource"})," - will change the Mobile Number assigned to the Contact. Just be sure to publish the page and load it. The Web Studio Preview won't work."]}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["If the new Mobile Number has different dialling code, be sure to also update ",(0,n.jsx)(t.code,{children:"_CountryCode"})," field with appropriate two-letter code (for example, ",(0,n.jsx)(t.code,{children:"PL"}),")"]}),(0,n.jsx)(t.p,{children:"You can do it in one line:"}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"mobileAddressDataView.Rows.Update({_MobileNumber:'48123456789',_CountryCode:'PL'},['_ContactID'],[contactId]);\n"})})]}),"\n",(0,n.jsx)(t.h2,{id:"options",children:"Options"}),"\n",(0,n.jsx)(t.p,{children:"You can adapt the above script to better suit your needs."}),"\n",(0,n.jsx)(t.h3,{id:"change-or-merge-contact-id",children:"Change or Merge Contact ID"}),"\n",(0,n.jsxs)(t.p,{children:["You are not limited to Mobile Number change in MobileConnect with this solution. You can leverage ",(0,n.jsxs)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress",children:[(0,n.jsx)(t.code,{children:"_MobileAddress"})," Data View"]})," to even merge MobileConnect contacts."]}),"\n",(0,n.jsx)(t.p,{children:"Use cases?"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"You might have two contacts with different phone numbers that you have identified to be the same person (one tied to personal and second to work number). To optimize the contact count, you can make a merge."}),"\n",(0,n.jsx)(t.li,{children:"Your client opted-in for Keyword using SMS. It created a Contact with the phone number as Contact Key. Later your CRM pushed this contact to Marketing Cloud with proper Contact Key. Merge it to have the engagement data adequately allocated."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"To do this, you search by Contact ID of the to-be-merged record and update it to the one you want to use after the merge."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'{5-6} title="Change Contact ID of a single Contact"',children:"<script runat=\"server\">\n Platform.Load('Core','1');\n var currentContactId = 123456789;\n var targetContactId = 987654321;\n var mobileAddressDataView = DataExtension.Init('_MobileAddress');\n var result = mobileAddressDataView.Rows.Update({_ContactID: targetContactId}, ['_ContactID'], [currentContactId]);\n<\/script>\n"})}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsx)(t.p,{children:"You cannot merge two Contacts with the same Mobile Number. It is why it is crucial to leverage this snippet before you import new Contacts into MobileConnect."}),(0,n.jsx)(t.p,{children:"You can, however, change the Mobile Number before merging. For example, by adding 0 before the dialling code. The phone won't be correct, but you can lower priority. Engagement and Subscription history is assigned to Mobile Number, not specific Contact ID, so as long as the merged record will keep the original number, it will also have its history."})]}),"\n",(0,n.jsx)(t.h3,{id:"add-lookup-remove",children:"Add, Lookup, Remove"}),"\n",(0,n.jsxs)(t.p,{children:["You are not limited to updating. You can also leverage other SSJS functions to ",(0,n.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsAdd.htm",children:"add"}),", ",(0,n.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsLookup.htm",children:"lookup"})," or ",(0,n.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-programmatic-content.meta/mc-programmatic-content/ssjs_dataExtensionRowsRemove.htm",children:"remove"})," MobileConnect Contacts. Those might be great for enhancing your Preference Center or leveraging Automation Studio."]}),"\n",(0,n.jsx)(t.h3,{id:"self-serve-it",children:"Self-serve it"}),"\n",(0,n.jsx)(t.p,{children:"Above snippets are great for single cases you want to cover, but you might consider using them as a part of your Preference Center and allow your customer to change their phone number themselves."}),"\n",(0,n.jsx)(t.p,{children:"Be sure, however, to normalize the number provided manually by the client for it to be numbers only with appropriate dialling code and country code."}),"\n",(0,n.jsx)(t.h3,{id:"automate-it",children:"Automate it"}),"\n",(0,n.jsxs)(t.p,{children:["You can also leverage the snippet within an Automation Studio using Data Extension as a batch data source and Script Activity for processing. Pack the snippet within a ",(0,n.jsxs)(t.a,{href:"/docs/ssjs/ssjs-loops",children:[(0,n.jsx)(t.code,{children:"for"})," loop"]})," and make a more significant change to your MobileConnect data."]}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(t.p,{children:["Technically you can use this solution to modify any field of ",(0,n.jsx)(t.a,{href:"/docs/config/sfmc-mobile-connect-data-views#_mobileaddress",children:(0,n.jsx)(t.code,{children:"_MobileAddress"})}),". Due to the unsupported status of this Data View, I would recommend using Contact Builder whenever it is enough for your use case. It allows you to change everything but the Mobile Number and Contact ID."]})})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1872:(e,t,o)=>{o.d(t,{m:()=>s});o(7294);const n="leadText_qzwo";var i=o(5893);const s=e=>{let{content:t}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:n,children:t})})}},1151:(e,t,o)=>{o.d(t,{Z:()=>r,a:()=>a});var n=o(7294);const i={},s=n.createContext(i);function a(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba7840dc.4e027f30.js b/assets/js/ba7840dc.4e027f30.js new file mode 100644 index 000000000..77d5a4a8a --- /dev/null +++ b/assets/js/ba7840dc.4e027f30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[770],{1881:e=>{e.exports=JSON.parse('{"pluginId":"sites","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"ideas":[{"type":"category","label":"Ideas","items":[{"type":"link","label":"Marketing Cloud","href":"/sites/ideas/marketing-cloud-ideas","docId":"ideas/marketing-cloud-ideas","unlisted":false},{"type":"link","label":"MC Personalization","href":"/sites/ideas/mc-personalization-ideas","docId":"ideas/mc-personalization-ideas","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/sites/category/ideas"}],"faq":[{"type":"category","label":"FAQ","items":[{"type":"link","label":"SFMC Hands-on Experience","href":"/sites/faq/how-to-get-sfmc-hands-on-experience","docId":"faq/how-to-get-sfmc-hands-on-experience","unlisted":false},{"type":"link","label":"SF Certification Vouchers","href":"/sites/faq/how-to-get-sf-certification-vouchers","docId":"faq/how-to-get-sf-certification-vouchers","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/sites/category/faq"}]},"docs":{"faq/how-to-get-sf-certification-vouchers":{"id":"faq/how-to-get-sf-certification-vouchers","title":"How to get SF Certification vouchers?","description":"Salesforce Certifications. What, why and how (you can pay less).","sidebar":"faq"},"faq/how-to-get-sfmc-hands-on-experience":{"id":"faq/how-to-get-sfmc-hands-on-experience","title":"How to get hands-on experience with SFMC","description":"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?","sidebar":"faq"},"ideas/marketing-cloud-ideas":{"id":"ideas/marketing-cloud-ideas","title":"Marketing Cloud Ideas","description":"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let\'s make the change!","sidebar":"ideas"},"ideas/mc-personalization-ideas":{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","sidebar":"ideas"},"licence":{"id":"licence","title":"License & Attribution","description":"Let\'s talk copyrights in a human-readable way"},"my-toolset":{"id":"my-toolset","title":"Toolset","description":"Show me your tools, and I will tell you who you are. Or so they say"},"newsletter":{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC."},"privacy":{"id":"privacy","title":"Privacy","description":"Legal stuff. Short and simple"}}}')}}]); \ No newline at end of file diff --git a/assets/js/ba7840dc.a5cbf57f.js b/assets/js/ba7840dc.a5cbf57f.js deleted file mode 100644 index 0856fa103..000000000 --- a/assets/js/ba7840dc.a5cbf57f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[770],{1881:e=>{e.exports=JSON.parse('{"pluginId":"sites","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"ideas":[{"type":"category","label":"Ideas","items":[{"type":"link","label":"Marketing Cloud","href":"/sites/ideas/marketing-cloud-ideas","docId":"ideas/marketing-cloud-ideas"},{"type":"link","label":"MC Personalization","href":"/sites/ideas/mc-personalization-ideas","docId":"ideas/mc-personalization-ideas"}],"collapsed":true,"collapsible":true,"href":"/sites/category/ideas"}],"faq":[{"type":"category","label":"FAQ","items":[{"type":"link","label":"SFMC Hands-on Experience","href":"/sites/faq/how-to-get-sfmc-hands-on-experience","docId":"faq/how-to-get-sfmc-hands-on-experience"},{"type":"link","label":"SF Certification Vouchers","href":"/sites/faq/how-to-get-sf-certification-vouchers","docId":"faq/how-to-get-sf-certification-vouchers"}],"collapsed":true,"collapsible":true,"href":"/sites/category/faq"}]},"docs":{"faq/how-to-get-sf-certification-vouchers":{"id":"faq/how-to-get-sf-certification-vouchers","title":"How to get SF Certification vouchers?","description":"Salesforce Certifications. What, why and how (you can pay less).","sidebar":"faq"},"faq/how-to-get-sfmc-hands-on-experience":{"id":"faq/how-to-get-sfmc-hands-on-experience","title":"How to get hands-on experience with SFMC","description":"You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?","sidebar":"faq"},"ideas/marketing-cloud-ideas":{"id":"ideas/marketing-cloud-ideas","title":"Marketing Cloud Ideas","description":"Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let\'s make the change!","sidebar":"ideas"},"ideas/mc-personalization-ideas":{"id":"ideas/mc-personalization-ideas","title":"MC Personalization Ideas","description":"Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let\'s make the change!","sidebar":"ideas"},"licence":{"id":"licence","title":"License & Attribution","description":"Let\'s talk copyrights in a human-readable way"},"my-toolset":{"id":"my-toolset","title":"Toolset","description":"Show me your tools, and I will tell you who you are. Or so they say"},"newsletter":{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC."},"privacy":{"id":"privacy","title":"Privacy","description":"Legal stuff. Short and simple"}}}')}}]); \ No newline at end of file diff --git a/assets/js/bb5d57b6.0d958107.js b/assets/js/bb5d57b6.0d958107.js deleted file mode 100644 index c8762fb5d..000000000 --- a/assets/js/bb5d57b6.0d958107.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8773],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,f=m["".concat(s,".").concat(d)]||m[d]||p[d]||o;return n?a.createElement(f,i(i({ref:t},c),{},{components:n})):a.createElement(f,i({ref:t},c))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:r,i[1]=l;for(var u=2;u<o;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>o});var a=n(7294);const r="leadText_qzwo",o=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}},383:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(7462),r=(n(7294),n(4137)),o=n(1872);const i={id:"sfmc-sql-numeric-functions",title:"SFMC SQL Numeric Functions",sidebar_label:"Numeric Functions",description:"Take control over numbers with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-numeric-functions.png",tags:["Marketing Cloud","SQL"]},l=void 0,s={unversionedId:"sql/sfmc-sql-numeric-functions",id:"sql/sfmc-sql-numeric-functions",title:"SFMC SQL Numeric Functions",description:"Take control over numbers with built-in SQL functions. Let the query do the job.",source:"@site/docs/sql/sfmc-sql-numeric-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-numeric-functions",permalink:"/docs/sql/sfmc-sql-numeric-functions",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-numeric-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1641649742,formattedLastUpdatedAt:"Jan 8, 2022",frontMatter:{id:"sfmc-sql-numeric-functions",title:"SFMC SQL Numeric Functions",sidebar_label:"Numeric Functions",description:"Take control over numbers with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-numeric-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Date Functions",permalink:"/docs/sql/sfmc-sql-date-functions"},next:{title:"Conversion Functions",permalink:"/docs/sql/sfmc-sql-conversion-functions"}},u={},c=[{value:"MIN and MAX",id:"min-and-max",level:2},{value:"AVG",id:"avg",level:2},{value:"SUM",id:"sum",level:2},{value:"FORMAT with Numbers",id:"format-with-numbers",level:2},{value:"Standard number formats",id:"standard-number-formats",level:3},{value:"Custom number formats",id:"custom-number-formats",level:3}],m={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Take control over numbers with built-in SQL functions. Let the query do the job.",mdxType:"LeadText"}),(0,r.kt)("p",null,"Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries."),(0,r.kt)("p",null,"Here, I will cover only selected numeric functions that I find most useful for Marketing Automation purposes. They will help you do the necessary calculations or format the numbers to match your needs."),(0,r.kt)("h2",{id:"min-and-max"},"MIN and MAX"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MIN")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MAX")," functions allow you to find the minimum and maximum values of column(s) in the selected data extension."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="What is your highest subscriber bounce count?"',"{1}":!0,title:'"What',is:!0,your:!0,highest:!0,subscriber:!0,bounce:!0,'count?"':!0},"SELECT MAX(s.BounceCount) AS HighestBounceCount\nFROM _Subscribers AS s\n")),(0,r.kt)("p",null,"Will you use it frequently? Probably not. Is it useless? Oh no."),(0,r.kt)("p",null,"Let's say you have a data extension storing information about a competition - including the number of points that participants gathered. Now it is time to send congratulations to the winner. ",(0,r.kt)("inlineCode",{parentName:"p"},"MAX")," function will make it easy."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{7-8} title="Get a Subscriber Key and Points of all the customers that have the biggest amount of points"',"{7-8}":!0,title:'"Get',a:!0,Subscriber:!0,Key:!0,and:!0,Points:!0,of:!0,all:!0,the:!0,customers:!0,that:!0,have:!0,biggest:!0,amount:!0,'points"':!0},"SELECT\n comp.SubscriberKey\n , comp.CompetitionPoints\nFROM CompetitionDataExtension AS comp\nWHERE\n comp.CompetitionPoints = (\n SELECT MAX(comp2.CompetitionPoints)\n FROM CompetitionDataExtension AS comp2\n )\n")),(0,r.kt)("p",null,"However, my favourite use case for ",(0,r.kt)("inlineCode",{parentName:"p"},"MAX")," is debugging Data Extensions and their values. Especially useful when working with data imports from external systems \u2014 for example, pulling data from Sales Cloud via Marketing Cloud Connect."),(0,r.kt)("p",null,"You might frequently encounter a situation where your automations responsible for moving data from Synchronized Data Extensions to standard Data Extensions crashes with cryptic information about truncated data. In most cases, the reason is a value exceeding the maximum length you set for the column in your local Data Extension."),(0,r.kt)("p",null,"How to find the culprit? With ",(0,r.kt)("inlineCode",{parentName:"p"},"MAX")," and ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions#len"},(0,r.kt)("inlineCode",{parentName:"a"},"LEN"))," functions:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",19:!0,className:"language-sql",metastring:'{2-3} title="For Datetime values, it will output 19 characters"',"{2-3}":!0,title:'"For',Datetime:!0,"values,":!0,it:!0,will:!0,output:!0,'characters"':!0},"SELECT\n MAX(LEN(c.Id)) AS SubscriberKey\n , MAX(LEN(c.Email)) AS EmailAddress\n /* Rest of the Contact fields you synchronized from Contact object */\nFROM Contact_Salesforce AS c\n")),(0,r.kt)("p",null,"This query can be used ",(0,r.kt)("em",{parentName:"p"},"ad hoc")," in ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics#query-studio"},"Query Studio")," to quickly show your current maximum lengths of the values coming from Sales Cloud. Compare them to the length of your fields in the destination data extension to see which column is crashing your automation."),(0,r.kt)("p",null,"You can also extend it with ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE"))," containing current lengths of fields in that data extension and make it part of your automation. It will find the records too long for the data extension, log them into data extension and allow you to leverage Verification Activity to alert you about the issue. Nice and clean."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"MAX")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"MIN")," are also instrumental as a ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions#min-and-max"},"part of an aggregate query"),"."),(0,r.kt)("h2",{id:"avg"},"AVG"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"AVG")," function returns the average value in a given column (excluding ",(0,r.kt)("inlineCode",{parentName:"p"},"NULL")," values)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="What is your average subscriber bounce count?"',"{1}":!0,title:'"What',is:!0,your:!0,average:!0,subscriber:!0,bounce:!0,'count?"':!0},"SELECT AVG(s.BounceCount) AS AverageBounceCount\nFROM _Subscribers AS s\n")),(0,r.kt)("p",null,"The above example might not look like much value, but with the help of ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#datediff"},(0,r.kt)("inlineCode",{parentName:"a"},"DATEDIFF"))," and ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#convert"},(0,r.kt)("inlineCode",{parentName:"a"},"CONVERT"))," functions you can make it much more interesting:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="What is the average age of your Subscribers?"',"{1}":!0,title:'"What',is:!0,the:!0,average:!0,age:!0,of:!0,your:!0,'Subscribers?"':!0},"SELECT DATEDIFF(MONTH, CONVERT(DATETIME, AVG(CONVERT(FLOAT, DateJoined))), GETDATE()) AS SubscribersAverageAgeInMonths\nFROM _Subscribers\n")),(0,r.kt)("p",null,"However, ",(0,r.kt)("inlineCode",{parentName:"p"},"AVG")," shows its true power with ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE"))," filtering:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Let\'s get your above-average spenders for an e-commerce up-sell campaign"',"{3}":!0,title:"\"Let's",get:!0,your:!0,"above-average":!0,spenders:!0,for:!0,an:!0,"e-commerce":!0,"up-sell":!0,'campaign"':!0},"SELECT SubscriberKey\nFROM Purchases\nWHERE Price > AVG(Price)\n")),(0,r.kt)("p",null,"You can mix two previous queries to create separate segments for your fresh and old subscribers."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"AVG")," function is also beneficial as a ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions#avg"},"part of an aggregate query"),"."),(0,r.kt)("h2",{id:"sum"},"SUM"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"SUM")," function allows you to calculate the sum of values."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{1} title="What is your total bounce count?"',"{1}":!0,title:'"What',is:!0,your:!0,total:!0,bounce:!0,'count?"':!0},"SELECT SUM(BounceCount) AS AllBouncesCount\nFROM _Subscribers\n")),(0,r.kt)("p",null,"It is helpful nearly only as a ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions#sum"},"part of an aggregate query"),"."),(0,r.kt)("h2",{id:"format-with-numbers"},"FORMAT with Numbers"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"FORMAT")," works only with datetime and numeric values, outputs a string and requires:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Value to be formatted (can be a column, string or function)"),(0,r.kt)("li",{parentName:"ol"},"Format specifier to be applied"),(0,r.kt)("li",{parentName:"ol"},"Optionally - ISO culture code")),(0,r.kt)("p",null,"It is a perfect tool to manipulate any numbers (or numeric strings with the help of ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions"},"conversion"),") available in your Data Extensions."),(0,r.kt)("h3",{id:"standard-number-formats"},"Standard number formats"),(0,r.kt)("p",null,"Standard formats use one required and one optional element."),(0,r.kt)("p",null,"The required one is the format specifier - which tells what the outcome should be. The optional is precision - it allows you to change the value on the go (for example, round it to two decimal places). If you do not use precision, the value will stay with its current precision."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Precision might lead to rounding. Note also the US thousands separator"',title:'"Precision',might:!0,lead:!0,to:!0,"rounding.":!0,Note:!0,also:!0,the:!0,US:!0,thousands:!0,'separator"':!0},"SELECT\n FORMAT(1234.56, 'N') AS WithoutCustomPrecision /* Output: 1,234.56 */\n , FORMAT(1234.56, 'N1') AS RoundedWithCustomPrecision /* Output: 1,234.6 */\n")),(0,r.kt)("p",null,"There are nine standard formats available, but only a few are useful on a day-to-day basis in Salesforce Marketing Cloud:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Format specifier"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Example (for US culture)"),(0,r.kt)("th",{parentName:"tr",align:null},"Comment"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'C'/'c'"),(0,r.kt)("td",{parentName:"tr",align:null},"Currency"),(0,r.kt)("td",{parentName:"tr",align:null},"$1,234.56"),(0,r.kt)("td",{parentName:"tr",align:null},"You can pass a culture code as a third argument to format the value straight to needed currency (including currency symbol and appropriate separators)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'D'/'d'"),(0,r.kt)("td",{parentName:"tr",align:null},"Decimal"),(0,r.kt)("td",{parentName:"tr",align:null},"1235"),(0,r.kt)("td",{parentName:"tr",align:null},"Support integers only. Precision enforces a minimum number of digits (great for adding leading zeroes)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'N'/'n'"),(0,r.kt)("td",{parentName:"tr",align:null},"Number"),(0,r.kt)("td",{parentName:"tr",align:null},"1,234.56"),(0,r.kt)("td",{parentName:"tr",align:null},"Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'P'/'p'"),(0,r.kt)("td",{parentName:"tr",align:null},"Percent"),(0,r.kt)("td",{parentName:"tr",align:null},"12.34 %"),(0,r.kt)("td",{parentName:"tr",align:null},"Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation")))),(0,r.kt)("p",null,"Just as highlighted in the table header - the examples are for the SFMC default US culture formating."),(0,r.kt)("p",null,"You can find the complete list of standard date format specifiers on ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings"},"Microsoft .Net Doc Pages"),"."),(0,r.kt)("h3",{id:"custom-number-formats"},"Custom number formats"),(0,r.kt)("p",null,"Of course, the formats shown above are not the limit of what you can do. Whenever you want something different, you can create a custom format by just providing a pattern:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Format specifier"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Comments"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'0'"),(0,r.kt)("td",{parentName:"tr",align:null},"Zero placeholder"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaces the zero with the digit if available; otherwise, zero appears in the result string.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'#'"),(0,r.kt)("td",{parentName:"tr",align:null},"Number placeholder"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaces the zero with the digit if available; otherwise, no number appears in the result string. It also ignores not significant zeroes (like leading ones)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'.'"),(0,r.kt)("td",{parentName:"tr",align:null},"Leading point"),(0,r.kt)("td",{parentName:"tr",align:null},"Informs the format function about desired decimal separator place")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'%'"),(0,r.kt)("td",{parentName:"tr",align:null},"Percentage placeholder"),(0,r.kt)("td",{parentName:"tr",align:null},"Multiplies the number by 100 and inserts per cent sign in the selected place")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'\\'"),(0,r.kt)("td",{parentName:"tr",align:null},"Escape character"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to escape any format specifier symbol if you want it literally in the outcome")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"'string'/\"string\""),(0,r.kt)("td",{parentName:"tr",align:null},"String literal"),(0,r.kt)("td",{parentName:"tr",align:null},"Passes the string straight to the outcome")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"';'"),(0,r.kt)("td",{parentName:"tr",align:null},"Section separator"),(0,r.kt)("td",{parentName:"tr",align:null},"Allows you to pass different custom formats for positive, zero and negative values")))),(0,r.kt)("p",null,"Again, the examples are for the default US culture formatting and might look different for different cultures (for example, hour separator might be changed automatically to ",(0,r.kt)("inlineCode",{parentName:"p"},".")," for Italy)."),(0,r.kt)("p",null,"You can find the complete list of standard date format specifiers on ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings"},"Microsoft .Net Doc Pages"),"."),(0,r.kt)("p",null,"The custom number formats can do wonders for your personalization needs. Example? Sure!"),(0,r.kt)("p",null,"Let's say you want your customers to validate their phone numbers before you leverage the SMS channel. You have them in Mobile Connect compliant format (only digits, no spaces, country code included). ",(0,r.kt)("inlineCode",{parentName:"p"},"48520935815")," is not a very user-friendly format to validate. Let's fix it:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",520:!0,935:!0,className:"language-sql",metastring:"{3} title=\"From '48520935815' to '(48) 520 935 815' in one line\"","{3}":!0,title:'"From',"'48520935815'":!0,to:!0,"'(48)":!0,"815'":!0,in:!0,one:!0,'line"':!0},"SELECT\n s.SubscriberKey\n , FORMAT(CONVERT(BIGINT, ea.MobileNumber), '(###) ### ### ###') AS FormattedPhone /* Output: (48) 520 935 815 */\nFROM _Subscribers AS s\n INNER JOIN EnterpriseAttribute AS ea\n ON ea._SubscriberID = s.SubscriberID\n")),(0,r.kt)("p",null,"As you can see, we had to use the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#cast--convert"},(0,r.kt)("inlineCode",{parentName:"a"},"CONVERT"))," function with the ",(0,r.kt)("inlineCode",{parentName:"p"},"BIGINT")," parameter, as the MobileNumber is a Text field. Thanks to conversion, we can use numeric functions to format it quickly. It could get even better with ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#like-in-case"},(0,r.kt)("inlineCode",{parentName:"a"},"LIKE")," in ",(0,r.kt)("inlineCode",{parentName:"a"},"CASE"))," used to create different formats depending on the country code."),(0,r.kt)("p",null,"Another use case? Let's assume we have a VIPDiscount field. It contains a number between 0.00 and 0.99 that tells what discount is appropriate for the selected user based on their VIP status. You store it in decimal numeric because it is a much more accessible format for SSJS or AMPScript to calculate the final price of items promoted in communication."),(0,r.kt)("p",null,"However, showing the customer that he has a ",(0,r.kt)("inlineCode",{parentName:"p"},"0.33")," discount is not a good idea. ",(0,r.kt)("inlineCode",{parentName:"p"},"FORMAT")," can help us once more:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Depending on your needs you may use Standard format or a Custom one"',title:'"Depending',on:!0,your:!0,needs:!0,you:!0,may:!0,use:!0,Standard:!0,format:!0,or:!0,a:!0,Custom:!0,'one"':!0},"SELECT\n FORMAT(VIPDiscount, 'P') AS StandardFormattedVIPDiscount /* Output: 33.00 % */\n , FORMAT(VIPDiscount, '-00.##%') AS CustomFormattedVIPDiscount /* Output: -33% */\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bb5d57b6.a77ec260.js b/assets/js/bb5d57b6.a77ec260.js new file mode 100644 index 000000000..61df30c4d --- /dev/null +++ b/assets/js/bb5d57b6.a77ec260.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8773],{5089:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=t(5893),i=t(1151),r=t(1872);const o={id:"sfmc-sql-numeric-functions",title:"SFMC SQL Numeric Functions",sidebar_label:"Numeric Functions",description:"Take control over numbers with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-numeric-functions.png",tags:["Marketing Cloud","SQL"]},a=void 0,c={id:"sql/sfmc-sql-numeric-functions",title:"SFMC SQL Numeric Functions",description:"Take control over numbers with built-in SQL functions. Let the query do the job.",source:"@site/docs/sql/sfmc-sql-numeric-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-numeric-functions",permalink:"/docs/sql/sfmc-sql-numeric-functions",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-numeric-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1641649742,formattedLastUpdatedAt:"Jan 8, 2022",frontMatter:{id:"sfmc-sql-numeric-functions",title:"SFMC SQL Numeric Functions",sidebar_label:"Numeric Functions",description:"Take control over numbers with built-in SQL functions. Let the query do the job.",image:"img/og/og-image-sql-numeric-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Date Functions",permalink:"/docs/sql/sfmc-sql-date-functions"},next:{title:"Conversion Functions",permalink:"/docs/sql/sfmc-sql-conversion-functions"}},l={},d=[{value:"MIN and MAX",id:"min-and-max",level:2},{value:"AVG",id:"avg",level:2},{value:"SUM",id:"sum",level:2},{value:"FORMAT with Numbers",id:"format-with-numbers",level:2},{value:"Standard number formats",id:"standard-number-formats",level:3},{value:"Custom number formats",id:"custom-number-formats",level:3}];function u(e){const n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.m,{content:"Take control over numbers with built-in SQL functions. Let the query do the job."}),"\n",(0,s.jsx)(n.p,{children:"Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries."}),"\n",(0,s.jsx)(n.p,{children:"Here, I will cover only selected numeric functions that I find most useful for Marketing Automation purposes. They will help you do the necessary calculations or format the numbers to match your needs."}),"\n",(0,s.jsx)(n.h2,{id:"min-and-max",children:"MIN and MAX"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"MIN"})," and ",(0,s.jsx)(n.code,{children:"MAX"})," functions allow you to find the minimum and maximum values of column(s) in the selected data extension."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{1} title="What is your highest subscriber bounce count?"',children:"SELECT MAX(s.BounceCount) AS HighestBounceCount\nFROM _Subscribers AS s\n"})}),"\n",(0,s.jsx)(n.p,{children:"Will you use it frequently? Probably not. Is it useless? Oh no."}),"\n",(0,s.jsxs)(n.p,{children:["Let's say you have a data extension storing information about a competition - including the number of points that participants gathered. Now it is time to send congratulations to the winner. ",(0,s.jsx)(n.code,{children:"MAX"})," function will make it easy."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{7-8} title="Get a Subscriber Key and Points of all the customers that have the biggest amount of points"',children:"SELECT\n comp.SubscriberKey\n , comp.CompetitionPoints\nFROM CompetitionDataExtension AS comp\nWHERE\n comp.CompetitionPoints = (\n SELECT MAX(comp2.CompetitionPoints)\n FROM CompetitionDataExtension AS comp2\n )\n"})}),"\n",(0,s.jsxs)(n.p,{children:["However, my favourite use case for ",(0,s.jsx)(n.code,{children:"MAX"})," is debugging Data Extensions and their values. Especially useful when working with data imports from external systems \u2014 for example, pulling data from Sales Cloud via Marketing Cloud Connect."]}),"\n",(0,s.jsx)(n.p,{children:"You might frequently encounter a situation where your automations responsible for moving data from Synchronized Data Extensions to standard Data Extensions crashes with cryptic information about truncated data. In most cases, the reason is a value exceeding the maximum length you set for the column in your local Data Extension."}),"\n",(0,s.jsxs)(n.p,{children:["How to find the culprit? With ",(0,s.jsx)(n.code,{children:"MAX"})," and ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-string-functions#len",children:(0,s.jsx)(n.code,{children:"LEN"})})," functions:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{2-3} title="For Datetime values, it will output 19 characters"',children:"SELECT\n MAX(LEN(c.Id)) AS SubscriberKey\n , MAX(LEN(c.Email)) AS EmailAddress\n /* Rest of the Contact fields you synchronized from Contact object */\nFROM Contact_Salesforce AS c\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This query can be used ",(0,s.jsx)(n.em,{children:"ad hoc"})," in ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-basics#query-studio",children:"Query Studio"})," to quickly show your current maximum lengths of the values coming from Sales Cloud. Compare them to the length of your fields in the destination data extension to see which column is crashing your automation."]}),"\n",(0,s.jsxs)(n.p,{children:["You can also extend it with ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,s.jsx)(n.code,{children:"WHERE"})})," containing current lengths of fields in that data extension and make it part of your automation. It will find the records too long for the data extension, log them into data extension and allow you to leverage Verification Activity to alert you about the issue. Nice and clean."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"MAX"})," and ",(0,s.jsx)(n.code,{children:"MIN"})," are also instrumental as a ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#min-and-max",children:"part of an aggregate query"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"avg",children:"AVG"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"AVG"})," function returns the average value in a given column (excluding ",(0,s.jsx)(n.code,{children:"NULL"})," values)."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{1} title="What is your average subscriber bounce count?"',children:"SELECT AVG(s.BounceCount) AS AverageBounceCount\nFROM _Subscribers AS s\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The above example might not look like much value, but with the help of ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-date-functions#datediff",children:(0,s.jsx)(n.code,{children:"DATEDIFF"})})," and ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-conversion-functions#convert",children:(0,s.jsx)(n.code,{children:"CONVERT"})})," functions you can make it much more interesting:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{1} title="What is the average age of your Subscribers?"',children:"SELECT DATEDIFF(MONTH, CONVERT(DATETIME, AVG(CONVERT(FLOAT, DateJoined))), GETDATE()) AS SubscribersAverageAgeInMonths\nFROM _Subscribers\n"})}),"\n",(0,s.jsxs)(n.p,{children:["However, ",(0,s.jsx)(n.code,{children:"AVG"})," shows its true power with ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,s.jsx)(n.code,{children:"WHERE"})})," filtering:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{3} title="Let\'s get your above-average spenders for an e-commerce up-sell campaign"',children:"SELECT SubscriberKey\nFROM Purchases\nWHERE Price > AVG(Price)\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can mix two previous queries to create separate segments for your fresh and old subscribers."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"AVG"})," function is also beneficial as a ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#avg",children:"part of an aggregate query"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"sum",children:"SUM"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"SUM"})," function allows you to calculate the sum of values."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{1} title="What is your total bounce count?"',children:"SELECT SUM(BounceCount) AS AllBouncesCount\nFROM _Subscribers\n"})}),"\n",(0,s.jsxs)(n.p,{children:["It is helpful nearly only as a ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#sum",children:"part of an aggregate query"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format-with-numbers",children:"FORMAT with Numbers"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"FORMAT"})," works only with datetime and numeric values, outputs a string and requires:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Value to be formatted (can be a column, string or function)"}),"\n",(0,s.jsx)(n.li,{children:"Format specifier to be applied"}),"\n",(0,s.jsx)(n.li,{children:"Optionally - ISO culture code"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["It is a perfect tool to manipulate any numbers (or numeric strings with the help of ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-conversion-functions",children:"conversion"}),") available in your Data Extensions."]}),"\n",(0,s.jsx)(n.h3,{id:"standard-number-formats",children:"Standard number formats"}),"\n",(0,s.jsx)(n.p,{children:"Standard formats use one required and one optional element."}),"\n",(0,s.jsx)(n.p,{children:"The required one is the format specifier - which tells what the outcome should be. The optional is precision - it allows you to change the value on the go (for example, round it to two decimal places). If you do not use precision, the value will stay with its current precision."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'title="Precision might lead to rounding. Note also the US thousands separator"',children:"SELECT\n FORMAT(1234.56, 'N') AS WithoutCustomPrecision /* Output: 1,234.56 */\n , FORMAT(1234.56, 'N1') AS RoundedWithCustomPrecision /* Output: 1,234.6 */\n"})}),"\n",(0,s.jsx)(n.p,{children:"There are nine standard formats available, but only a few are useful on a day-to-day basis in Salesforce Marketing Cloud:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Format specifier"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Example (for US culture)"}),(0,s.jsx)(n.th,{children:"Comment"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'C'/'c'"}),(0,s.jsx)(n.td,{children:"Currency"}),(0,s.jsx)(n.td,{children:"$1,234.56"}),(0,s.jsx)(n.td,{children:"You can pass a culture code as a third argument to format the value straight to needed currency (including currency symbol and appropriate separators)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'D'/'d'"}),(0,s.jsx)(n.td,{children:"Decimal"}),(0,s.jsx)(n.td,{children:"1235"}),(0,s.jsx)(n.td,{children:"Support integers only. Precision enforces a minimum number of digits (great for adding leading zeroes)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'N'/'n'"}),(0,s.jsx)(n.td,{children:"Number"}),(0,s.jsx)(n.td,{children:"1,234.56"}),(0,s.jsx)(n.td,{children:"Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'P'/'p'"}),(0,s.jsx)(n.td,{children:"Percent"}),(0,s.jsx)(n.td,{children:"12.34 %"}),(0,s.jsx)(n.td,{children:"Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation"})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"Just as highlighted in the table header - the examples are for the SFMC default US culture formating."}),"\n",(0,s.jsxs)(n.p,{children:["You can find the complete list of standard date format specifiers on ",(0,s.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings",children:"Microsoft .Net Doc Pages"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"custom-number-formats",children:"Custom number formats"}),"\n",(0,s.jsx)(n.p,{children:"Of course, the formats shown above are not the limit of what you can do. Whenever you want something different, you can create a custom format by just providing a pattern:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Format specifier"}),(0,s.jsx)(n.th,{children:"Description"}),(0,s.jsx)(n.th,{children:"Comments"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'0'"}),(0,s.jsx)(n.td,{children:"Zero placeholder"}),(0,s.jsx)(n.td,{children:"Replaces the zero with the digit if available; otherwise, zero appears in the result string."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'#'"}),(0,s.jsx)(n.td,{children:"Number placeholder"}),(0,s.jsx)(n.td,{children:"Replaces the zero with the digit if available; otherwise, no number appears in the result string. It also ignores not significant zeroes (like leading ones)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'.'"}),(0,s.jsx)(n.td,{children:"Leading point"}),(0,s.jsx)(n.td,{children:"Informs the format function about desired decimal separator place"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'%'"}),(0,s.jsx)(n.td,{children:"Percentage placeholder"}),(0,s.jsx)(n.td,{children:"Multiplies the number by 100 and inserts per cent sign in the selected place"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"''"}),(0,s.jsx)(n.td,{children:"Escape character"}),(0,s.jsx)(n.td,{children:"Allows you to escape any format specifier symbol if you want it literally in the outcome"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"'string'/\"string\""}),(0,s.jsx)(n.td,{children:"String literal"}),(0,s.jsx)(n.td,{children:"Passes the string straight to the outcome"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"';'"}),(0,s.jsx)(n.td,{children:"Section separator"}),(0,s.jsx)(n.td,{children:"Allows you to pass different custom formats for positive, zero and negative values"})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["Again, the examples are for the default US culture formatting and might look different for different cultures (for example, hour separator might be changed automatically to ",(0,s.jsx)(n.code,{children:"."})," for Italy)."]}),"\n",(0,s.jsxs)(n.p,{children:["You can find the complete list of standard date format specifiers on ",(0,s.jsx)(n.a,{href:"https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings",children:"Microsoft .Net Doc Pages"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The custom number formats can do wonders for your personalization needs. Example? Sure!"}),"\n",(0,s.jsxs)(n.p,{children:["Let's say you want your customers to validate their phone numbers before you leverage the SMS channel. You have them in Mobile Connect compliant format (only digits, no spaces, country code included). ",(0,s.jsx)(n.code,{children:"48520935815"})," is not a very user-friendly format to validate. Let's fix it:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:"{3} title=\"From '48520935815' to '(48) 520 935 815' in one line\"",children:"SELECT\n s.SubscriberKey\n , FORMAT(CONVERT(BIGINT, ea.MobileNumber), '(###) ### ### ###') AS FormattedPhone /* Output: (48) 520 935 815 */\nFROM _Subscribers AS s\n INNER JOIN EnterpriseAttribute AS ea\n ON ea._SubscriberID = s.SubscriberID\n"})}),"\n",(0,s.jsxs)(n.p,{children:["As you can see, we had to use the ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-conversion-functions#cast--convert",children:(0,s.jsx)(n.code,{children:"CONVERT"})})," function with the ",(0,s.jsx)(n.code,{children:"BIGINT"})," parameter, as the MobileNumber is a Text field. Thanks to conversion, we can use numeric functions to format it quickly. It could get even better with ",(0,s.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-case#like-in-case",children:[(0,s.jsx)(n.code,{children:"LIKE"})," in ",(0,s.jsx)(n.code,{children:"CASE"})]})," used to create different formats depending on the country code."]}),"\n",(0,s.jsx)(n.p,{children:"Another use case? Let's assume we have a VIPDiscount field. It contains a number between 0.00 and 0.99 that tells what discount is appropriate for the selected user based on their VIP status. You store it in decimal numeric because it is a much more accessible format for SSJS or AMPScript to calculate the final price of items promoted in communication."}),"\n",(0,s.jsxs)(n.p,{children:["However, showing the customer that he has a ",(0,s.jsx)(n.code,{children:"0.33"})," discount is not a good idea. ",(0,s.jsx)(n.code,{children:"FORMAT"})," can help us once more:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'title="Depending on your needs you may use Standard format or a Custom one"',children:"SELECT\n FORMAT(VIPDiscount, 'P') AS StandardFormattedVIPDiscount /* Output: 33.00 % */\n , FORMAT(VIPDiscount, '-00.##%') AS CustomFormattedVIPDiscount /* Output: -33% */\n"})})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1872:(e,n,t)=>{t.d(n,{m:()=>r});t(7294);const s="leadText_qzwo";var i=t(5893);const r=e=>{let{content:n}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:s,children:n})})}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var s=t(7294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.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(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/beb9716f.0aeff59d.js b/assets/js/beb9716f.0aeff59d.js new file mode 100644 index 000000000..0db114011 --- /dev/null +++ b/assets/js/beb9716f.0aeff59d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2769],{9021:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>m});var i=n(5893),r=n(1151),s=n(1872);n(7294);const o=e=>{let{formId:t}=e;const n="https://docs.google.com/forms/d/e/"+t+"/viewform?embedded=true&hl=en";return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("div",{class:"form--container",children:(0,i.jsx)("iframe",{src:n,frameborder:"0",marginheight:"0",marginwidth:"0"})})})},a={id:"newsletter",title:"Newsletter",description:"Get yet another email in your inbox. This time, about SFMC.",image:"img/og/og-image-newsletter.png",tags:["Marketing Cloud","Personalization","Best Practice"]},l=void 0,c={id:"newsletter",title:"Newsletter",description:"Get yet another email in your inbox. This time, about SFMC.",source:"@site/sites/newsletter.mdx",sourceDirName:".",slug:"/newsletter",permalink:"/sites/newsletter",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/newsletter.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"Personalization",permalink:"/sites/tags/personalization"},{label:"Best Practice",permalink:"/sites/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1702505741,formattedLastUpdatedAt:"Dec 13, 2023",frontMatter:{id:"newsletter",title:"Newsletter",description:"Get yet another email in your inbox. This time, about SFMC.",image:"img/og/og-image-newsletter.png",tags:["Marketing Cloud","Personalization","Best Practice"]}},d={},m=[];function u(e){const t={li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.m,{content:"Get yet another email in your inbox. This time, about SFMC."}),"\n",(0,i.jsx)(t.p,{children:"Looking for a Salesforce Marketing Cloud-focused newsletter lacking any specific cadence and jumping from one topic to another?"}),"\n",(0,i.jsx)(t.p,{children:"You are in the right place!"}),"\n",(0,i.jsx)(t.p,{children:"I plan to send short emails about:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"New content on my site."}),"\n",(0,i.jsx)(t.li,{children:"Interesting articles and videos by other Trailblazers."}),"\n",(0,i.jsx)(t.li,{children:"Exciting news from the SFMC world."}),"\n",(0,i.jsx)(t.li,{children:"Some random marketing-related stuff I find worthwhile."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Sounds good? Here you can join the list:"}),"\n",(0,i.jsx)(o,{formId:"1FAIpQLSchEjM7E23A7vBYnCktPplisn9PNyU4z4fKH4XmntSPzEttyQ"})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>s});n(7294);const i="leadText_qzwo";var r=n(5893);const s=e=>{let{content:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:i,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>o});var i=n(7294);const r={},s=i.createContext(r);function o(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/beb9716f.3850ee5a.js b/assets/js/beb9716f.3850ee5a.js deleted file mode 100644 index 687441ffe..000000000 --- a/assets/js/beb9716f.3850ee5a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2769],{4137:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=c(r),d=a,f=u["".concat(s,".").concat(d)]||u[d]||p[d]||o;return r?n.createElement(f,i(i({ref:t},m),{},{components:r})):n.createElement(f,i({ref:t},m))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},7746:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>g,frontMatter:()=>s,metadata:()=>m,toc:()=>p});var n=r(7462),a=r(7294),o=r(4137),i=r(1872);const l=e=>{let{formId:t}=e;const r="https://docs.google.com/forms/d/e/"+t+"/viewform?embedded=true&hl=en";return a.createElement(a.Fragment,null,a.createElement("div",{class:"form--container"},a.createElement("iframe",{src:r,frameborder:"0",marginheight:"0",marginwidth:"0"})))},s={id:"newsletter",title:"Newsletter",description:"Get yet another email in your inbox. This time, about SFMC.",image:"img/og/og-image-newsletter.png",tags:["Marketing Cloud","Personalization","Best Practice"]},c=void 0,m={unversionedId:"newsletter",id:"newsletter",title:"Newsletter",description:"Get yet another email in your inbox. This time, about SFMC.",source:"@site/sites/newsletter.mdx",sourceDirName:".",slug:"/newsletter",permalink:"/sites/newsletter",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/sites/newsletter.mdx",tags:[{label:"Marketing Cloud",permalink:"/sites/tags/marketing-cloud"},{label:"Personalization",permalink:"/sites/tags/personalization"},{label:"Best Practice",permalink:"/sites/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1702505741,formattedLastUpdatedAt:"Dec 13, 2023",frontMatter:{id:"newsletter",title:"Newsletter",description:"Get yet another email in your inbox. This time, about SFMC.",image:"img/og/og-image-newsletter.png",tags:["Marketing Cloud","Personalization","Best Practice"]}},u={},p=[],d={toc:p},f="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(f,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(i.m,{content:"Get yet another email in your inbox. This time, about SFMC.",mdxType:"LeadText"}),(0,o.kt)("p",null,"Looking for a Salesforce Marketing Cloud-focused newsletter lacking any specific cadence and jumping from one topic to another?"),(0,o.kt)("p",null,"You are in the right place!"),(0,o.kt)("p",null,"I plan to send short emails about:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"New content on my site."),(0,o.kt)("li",{parentName:"ul"},"Interesting articles and videos by other Trailblazers."),(0,o.kt)("li",{parentName:"ul"},"Exciting news from the SFMC world."),(0,o.kt)("li",{parentName:"ul"},"Some random marketing-related stuff I find worthwhile.")),(0,o.kt)("p",null,"Sounds good? Here you can join the list:"),(0,o.kt)(l,{formId:"1FAIpQLSchEjM7E23A7vBYnCktPplisn9PNyU4z4fKH4XmntSPzEttyQ",mdxType:"Form"}))}g.isMDXComponent=!0},1872:(e,t,r)=>{r.d(t,{m:()=>o});var n=r(7294);const a="leadText_qzwo",o=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:a},t))}}}]); \ No newline at end of file diff --git a/assets/js/c0a0d864.e50fa5e0.js b/assets/js/c0a0d864.309ed5ce.js similarity index 98% rename from assets/js/c0a0d864.e50fa5e0.js rename to assets/js/c0a0d864.309ed5ce.js index 5916a7de9..ad0794934 100644 --- a/assets/js/c0a0d864.e50fa5e0.js +++ b/assets/js/c0a0d864.309ed5ce.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6583],{5705:e=>{e.exports=JSON.parse('{"label":"SQL","permalink":"/docs/tags/sql","allTagsPath":"/docs/tags","count":20,"items":[{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/sfmc-sql-aggregate-functions","title":"SFMC SQL Aggregate Functions","description":"Group rows and apply aggregate functions to see the big picture in your data extensions.","permalink":"/docs/sql/sfmc-sql-aggregate-functions"},{"id":"sql/sfmc-sql-basics","title":"SFMC SQL Basics","description":"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.","permalink":"/docs/sql/sfmc-sql-basics"},{"id":"sql/sfmc-sql-case","title":"SFMC SQL Case","description":"Empower your Marketing Cloud queries with conditional SQL CASE logic.","permalink":"/docs/sql/sfmc-sql-case"},{"id":"sql/sfmc-sql-conversion-functions","title":"SFMC SQL Conversion Functions","description":"Break from the limits of Data Extension data types. Use full power of SQL to control your values.","permalink":"/docs/sql/sfmc-sql-conversion-functions"},{"id":"sql/sfmc-sql-date-functions","title":"SFMC SQL Date Functions","description":"Take control over dates with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-date-functions"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"sql/sfmc-sql-from","title":"SFMC SQL From","description":"Tell the SQL query FROM where you need the data.","permalink":"/docs/sql/sfmc-sql-from"},{"id":"sql/sfmc-sql-join","title":"SFMC SQL Join","description":"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.","permalink":"/docs/sql/sfmc-sql-join"},{"id":"sql/sfmc-sql-like","title":"SFMC SQL Like","description":"Get a LIKE and build more flexible SQL queries.","permalink":"/docs/sql/sfmc-sql-like"},{"id":"sql/sfmc-sql-null-functions","title":"SFMC SQL NULL Functions","description":"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-null-functions"},{"id":"sql/sfmc-sql-numeric-functions","title":"SFMC SQL Numeric Functions","description":"Take control over numbers with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-numeric-functions"},{"id":"sql/sfmc-sql-select","title":"SFMC SQL Select","description":"Selected information on the SELECT statement in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-select"},{"id":"sql/sfmc-sql-string-functions","title":"SFMC SQL String Functions","description":"Take control over strings with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-string-functions"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"sql/sfmc-sql-where","title":"SFMC SQL Where","description":"Use WHERE to make your query lean and to the point. Less is more.","permalink":"/docs/sql/sfmc-sql-where"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6583],{5705:e=>{e.exports=JSON.parse('{"label":"SQL","permalink":"/docs/tags/sql","allTagsPath":"/docs/tags","count":20,"items":[{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/sfmc-sql-aggregate-functions","title":"SFMC SQL Aggregate Functions","description":"Group rows and apply aggregate functions to see the big picture in your data extensions.","permalink":"/docs/sql/sfmc-sql-aggregate-functions"},{"id":"sql/sfmc-sql-basics","title":"SFMC SQL Basics","description":"SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.","permalink":"/docs/sql/sfmc-sql-basics"},{"id":"sql/sfmc-sql-case","title":"SFMC SQL Case","description":"Empower your Marketing Cloud queries with conditional SQL CASE logic.","permalink":"/docs/sql/sfmc-sql-case"},{"id":"sql/sfmc-sql-conversion-functions","title":"SFMC SQL Conversion Functions","description":"Break from the limits of Data Extension data types. Use full power of SQL to control your values.","permalink":"/docs/sql/sfmc-sql-conversion-functions"},{"id":"sql/sfmc-sql-date-functions","title":"SFMC SQL Date Functions","description":"Take control over dates with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-date-functions"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"sql/sfmc-sql-from","title":"SFMC SQL From","description":"Tell the SQL query FROM where you need the data.","permalink":"/docs/sql/sfmc-sql-from"},{"id":"sql/sfmc-sql-join","title":"SFMC SQL Join","description":"Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.","permalink":"/docs/sql/sfmc-sql-join"},{"id":"sql/sfmc-sql-like","title":"SFMC SQL Like","description":"Get a LIKE and build more flexible SQL queries.","permalink":"/docs/sql/sfmc-sql-like"},{"id":"sql/sfmc-sql-null-functions","title":"SFMC SQL NULL Functions","description":"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-null-functions"},{"id":"sql/sfmc-sql-numeric-functions","title":"SFMC SQL Numeric Functions","description":"Take control over numbers with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-numeric-functions"},{"id":"sql/sfmc-sql-select","title":"SFMC SQL Select","description":"Selected information on the SELECT statement in SFMC SQL.","permalink":"/docs/sql/sfmc-sql-select"},{"id":"sql/sfmc-sql-string-functions","title":"SFMC SQL String Functions","description":"Take control over strings with built-in SQL functions. Let the query do the job.","permalink":"/docs/sql/sfmc-sql-string-functions"},{"id":"sql/sfmc-sql-style-guide","title":"SFMC SQL Style Guide","description":"Query with style. Readable, bug-free code is a few shifts & spaces away.","permalink":"/docs/sql/sfmc-sql-style-guide"},{"id":"sql/sfmc-sql-where","title":"SFMC SQL Where","description":"Use WHERE to make your query lean and to the point. Less is more.","permalink":"/docs/sql/sfmc-sql-where"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.22e2e8ab.js b/assets/js/c4f5d8e4.22e2e8ab.js new file mode 100644 index 000000000..be33bd94f --- /dev/null +++ b/assets/js/c4f5d8e4.22e2e8ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4195],{9660:(e,i,n)=>{n.r(i),n.d(i,{default:()=>u});n(7294);var a=n(512),t=n(4960),s=n(4791),o=n(1514),r=n(9962),c=n(9524);const l={hero:"hero_syme",heroInner:"heroInner_VWeJ",heroProjectTagline:"heroProjectTagline_EkV5",heroProjectSubTagline:"heroProjectSubTagline_WKiD",heroCodeFunction:"heroCodeFunction_kPM9",heroCodeVariable:"heroCodeVariable_DdG0",heroCodeValue:"heroCodeValue_WuUN",heroCodeSymbols:"heroCodeSymbols_NdyX",heroProjectKeywords:"heroProjectKeywords_uRRc",features:"features_keug",featureImage:"featureImage_yA8i",featureHeading:"featureHeading_TLGJ",articles:"articles_L71A",articlesHeading:"articlesHeading_izBD",articleCard:"articleCard_oNRo",articleTitle:"articleTitle_Qstm",articleTag:"articleTag_W46I",articleLink:"articleLink_BNeC",buttons:"buttons_pzbO"};var m=n(5893);const g=[{title:(0,m.jsx)(m.Fragment,{children:"Let's connect"}),imageUrl:"img/md_profile_icon.png",description:(0,m.jsx)(m.Fragment,{children:"Ahoj! My name is Mateusz D\u0105browski. I'm Marketing Cloud Architect and Salesforce MVP. I find joy in telling the code to do my job. Got questions, suggestions or want to get in touch?"}),url:"https://www.linkedin.com/in/mateusz-dabrowski-pl/",cta:(0,m.jsx)(m.Fragment,{children:"Let's Connect"})},{title:(0,m.jsx)(m.Fragment,{children:"Pick my brain"}),imageUrl:"img/md_brain_icon.png",description:(0,m.jsx)(m.Fragment,{children:"My notes on AMPScript, SSJS, JavaScript, SQL and Configuration used in Marketing Cloud. Are you craving for more in-depth documentation or looking for tested code snippets? Hop in!"}),url:"/docs/",cta:(0,m.jsx)(m.Fragment,{children:"Docs & Snippets"})},{title:(0,m.jsx)(m.Fragment,{children:"Change the Cloud"}),imageUrl:"img/md_cloud_icon.png",description:(0,m.jsx)(m.Fragment,{children:"Salesforce Marketing Cloud is powerful. But it can always be more useful. Here you can find all my Salesforce IdeaExchange contributions. Vote to make Marketing Cloud a better tool."}),url:"/sites/category/ideas/",cta:(0,m.jsx)(m.Fragment,{children:"My Ideas"})}];function d(e){let{imageUrl:i,title:n,description:t,url:o,cta:r}=e;const g=(0,c.Z)(i);return(0,m.jsxs)("div",{className:(0,a.Z)("col col--4",l.feature),children:[g&&(0,m.jsx)("div",{className:"text--center",children:(0,m.jsx)("img",{className:l.featureImage,src:g,alt:n})}),(0,m.jsx)("h3",{className:l.featureHeading,children:n}),(0,m.jsx)("p",{children:t}),(0,m.jsx)("div",{className:l.buttons,children:(0,m.jsx)(s.Z,{className:(0,a.Z)("button button--outline button--block button--secondary button--lg shadow--md",l.getStarted),to:o,children:r})})]})}const h=[{title:(0,m.jsx)(m.Fragment,{children:"SQL Basics"}),url:"./docs/sql/sfmc-sql-basics/",imageUrl:"img/og/og-image-sql-basics.png",description:"Best place to start your journey with writing SQL Queries in SFMC.",mainTag:"SFMC SQL"},{title:(0,m.jsx)(m.Fragment,{children:"SQL Select"}),url:"./docs/sql/sfmc-sql-select/",imageUrl:"img/og/og-image-sql-select.png",description:"Learn how to SELECT the data and how to limit it with TOP & DISTINCT.",mainTag:"SFMC SQL"},{title:(0,m.jsx)(m.Fragment,{children:"SQL Join"}),url:"./docs/sql/sfmc-sql-join/",imageUrl:"img/og/og-image-sql-join.png",description:"Check how to work with more than one Data Extension or Data View.",mainTag:"SFMC SQL"},{title:(0,m.jsx)(m.Fragment,{children:"SQL Date Functions"}),url:"./docs/sql/sfmc-sql-date-functions/",imageUrl:"img/og/og-image-sql-date-functions.png",description:"Create, calculate and format date, time and timezone with SQL.",mainTag:"SFMC SQL"},{title:(0,m.jsx)(m.Fragment,{children:"System Data Views"}),url:"./docs/config/sfmc-system-data-views/",imageUrl:"img/og/og-image-sfmc-system-data-views.png",description:"Learn about hidden Data Views storing key data about your SFMC.",mainTag:"SFMC Config"},{title:(0,m.jsx)(m.Fragment,{children:"Debugging Email Sends"}),url:"./docs/sql/snippets/sfmc-sql-debugging-email-sends/",imageUrl:"img/og/og-image-sql-debugging-email-sends.png",description:"Step-by-step guide to resolving problems with SFMC email sends.",mainTag:"SFMC SQL Snippets"},{title:(0,m.jsx)(m.Fragment,{children:"Behavioral Triggers"}),url:"./docs/config/sfmc-behavioral-triggers/",imageUrl:"img/og/og-image-sfmc-behavioral-triggers.png",description:"All you need to know about working with SFMC Behavioral Triggers.",mainTag:"SFMC Config"},{title:(0,m.jsx)(m.Fragment,{children:"Contact Deletion"}),url:"./docs/config/sfmc-contact-deletion/",imageUrl:"img/og/og-image-sfmc-contact-deletion.png",description:"Everything you need to clean up your SFMC from dirty Contacts.",mainTag:"SFMC Config"}];function p(e){let{title:i,url:n,description:t,mainTag:o}=e;return(0,m.jsx)("div",{className:"col col--3",children:(0,m.jsxs)("div",{className:(0,a.Z)("card",l.articleCard),children:[(0,m.jsxs)("div",{className:"card__header",children:[(0,m.jsx)(s.Z,{className:l.articleTitle,to:n,children:(0,m.jsx)("strong",{children:i})}),(0,m.jsxs)("p",{className:l.articleTag,children:["#",o]})]}),(0,m.jsx)("div",{className:"card__body",children:t}),(0,m.jsx)("div",{className:"card__footer",children:(0,m.jsx)(s.Z,{className:l.articleLink,to:n,children:"Read more \xbb"})})]})})}const u=function(){const e=(0,r.Z)(),{siteConfig:{customFields:i={}}={}}=e;return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(o.Z,{children:[(0,m.jsx)("meta",{name:"author",content:"Mateusz D\u0105browski"}),(0,m.jsx)("meta",{name:"HandheldFriendly",content:"True"}),(0,m.jsx)("meta",{name:"referrer",content:"unsafe-url"}),(0,m.jsx)("link",{rel:"canonical",href:"https://mateuszdabrowski.pl/"}),(0,m.jsx)("meta",{property:"og:url",content:"https://mateuszdabrowski.pl/"}),(0,m.jsx)("meta",{property:"og:image",content:"/img/logotyp-og.png"}),(0,m.jsx)("meta",{property:"og:image:type",content:"image/png"}),(0,m.jsx)("meta",{property:"og:image:width",content:"1500"}),(0,m.jsx)("meta",{property:"og:image:height",content:"1500"}),(0,m.jsx)("meta",{property:"og:type",content:"website"}),(0,m.jsx)("link",{rel:"shortcut icon",sizes:"196x196",href:"/img/favicon_196.png"}),(0,m.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/img/apple-touch-icon.png"}),(0,m.jsx)("link",{rel:"icon",type:"image/png",sizes:"167x167",href:"/img/favicon_167.png"}),(0,m.jsx)("link",{rel:"apple-touch-icon",sizes:"152x152",href:"/img/favicon_152.png"}),(0,m.jsx)("link",{rel:"icon",type:"image/png",sizes:"128x128",href:"/img/favicon_128.png"}),(0,m.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/img/favicon_32.png"}),(0,m.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/img/favicon_16.png"}),(0,m.jsx)("link",{rel:"manifest",href:"/img/site.webmanifest"}),(0,m.jsx)("link",{rel:"mask-icon",href:"/img/safari-pinned-tab.svg",color:"#DA4E55"}),(0,m.jsx)("meta",{name:"msapplication-TileColor",content:"#F6B355"}),(0,m.jsx)("meta",{name:"msapplication-square70x70logo",content:"/img/favicon-128.png"}),(0,m.jsx)("meta",{name:"msapplication-square150x150logo",content:"/img/favicon-270.png"}),(0,m.jsx)("meta",{name:"msapplication-TileImage",content:"/img/favicon-270.png"}),(0,m.jsx)("meta",{name:"msapplication-config",content:"none"}),(0,m.jsx)("meta",{name:"theme-color",content:"#212121"})]}),(0,m.jsx)(t.Z,{title:"Automate Marketing Automation",description:i.description,keywords:i.keywords,children:(0,m.jsxs)("main",{children:[(0,m.jsx)("div",{className:l.hero,children:(0,m.jsxs)("div",{className:l.heroInner,children:[(0,m.jsxs)("h1",{className:l.heroProjectTagline,children:["Automate ",(0,m.jsx)("span",{className:l.heroProjectKeywords,children:"Marketing Automation"})]}),(0,m.jsxs)("h2",{className:l.heroProjectSubTagline,children:[(0,m.jsx)("span",{className:l.heroCodeFunction,children:"let"})," ",(0,m.jsx)("span",{className:l.heroCodeVariable,children:"code"})," ",(0,m.jsx)("span",{className:l.heroCodeSymbols,children:"="})," ",(0,m.jsx)("span",{className:l.heroCodeFunction,children:"do"}),(0,m.jsx)("span",{className:l.heroCodeSymbols,children:"("}),(0,m.jsx)("span",{className:l.heroCodeValue,children:"'our job'"}),(0,m.jsx)("span",{className:l.heroCodeSymbols,children:");"})]})]})}),g&&g.length>0&&(0,m.jsx)("section",{className:l.features,children:(0,m.jsx)("div",{className:"container",children:(0,m.jsx)("div",{className:"row",children:g.map(((e,i)=>(0,m.jsx)(d,{...e},i)))})})}),h&&h.length>0&&(0,m.jsx)("section",{className:l.articles,children:(0,m.jsxs)("div",{className:"container",children:[(0,m.jsx)("h2",{className:l.articlesHeading,children:"Most popular docs & snippets"}),(0,m.jsx)("div",{className:"row",children:h.map(((e,i)=>(0,m.jsx)(p,{...e},i)))})]})})]})})]})}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.8f51117e.js b/assets/js/c4f5d8e4.8f51117e.js deleted file mode 100644 index 4ebf053bf..000000000 --- a/assets/js/c4f5d8e4.8f51117e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4195],{9660:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var n=a(7462),r=a(7294),l=a(6010),i=a(241),o=a(3699),c=a(1514),m=a(9962),s=a(9524);const g={hero:"hero_syme",heroInner:"heroInner_VWeJ",heroProjectTagline:"heroProjectTagline_EkV5",heroProjectSubTagline:"heroProjectSubTagline_WKiD",heroCodeFunction:"heroCodeFunction_kPM9",heroCodeVariable:"heroCodeVariable_DdG0",heroCodeValue:"heroCodeValue_WuUN",heroCodeSymbols:"heroCodeSymbols_NdyX",heroProjectKeywords:"heroProjectKeywords_uRRc",features:"features_keug",featureImage:"featureImage_yA8i",featureHeading:"featureHeading_TLGJ",articles:"articles_L71A",articlesHeading:"articlesHeading_izBD",articleCard:"articleCard_oNRo",articleTitle:"articleTitle_Qstm",articleTag:"articleTag_W46I",articleLink:"articleLink_BNeC",buttons:"buttons_pzbO"},d=[{title:r.createElement(r.Fragment,null,"Let's connect"),imageUrl:"img/md_profile_icon.png",description:r.createElement(r.Fragment,null,"Ahoj! My name is Mateusz D\u0105browski. I'm Marketing Cloud Architect and Salesforce MVP. I find joy in telling the code to do my job. Got questions, suggestions or want to get in touch?"),url:"https://www.linkedin.com/in/mateusz-dabrowski-pl/",cta:r.createElement(r.Fragment,null,"Let's Connect")},{title:r.createElement(r.Fragment,null,"Pick my brain"),imageUrl:"img/md_brain_icon.png",description:r.createElement(r.Fragment,null,"My notes on AMPScript, SSJS, JavaScript, SQL and Configuration used in Marketing Cloud. Are you craving for more in-depth documentation or looking for tested code snippets? Hop in!"),url:"/docs/",cta:r.createElement(r.Fragment,null,"Docs & Snippets")},{title:r.createElement(r.Fragment,null,"Change the Cloud"),imageUrl:"img/md_cloud_icon.png",description:r.createElement(r.Fragment,null,"Salesforce Marketing Cloud is powerful. But it can always be more useful. Here you can find all my Salesforce IdeaExchange contributions. Vote to make Marketing Cloud a better tool."),url:"/sites/category/ideas/",cta:r.createElement(r.Fragment,null,"My Ideas")}];function u(e){let{imageUrl:t,title:a,description:n,url:i,cta:c}=e;const m=(0,s.Z)(t);return r.createElement("div",{className:(0,l.Z)("col col--4",g.feature)},m&&r.createElement("div",{className:"text--center"},r.createElement("img",{className:g.featureImage,src:m,alt:a})),r.createElement("h3",{className:g.featureHeading},a),r.createElement("p",null,n),r.createElement("div",{className:g.buttons},r.createElement(o.Z,{className:(0,l.Z)("button button--outline button--block button--secondary button--lg shadow--md",g.getStarted),to:i},c)))}const p=[{title:r.createElement(r.Fragment,null,"SQL Basics"),url:"./docs/sql/sfmc-sql-basics/",imageUrl:"img/og/og-image-sql-basics.png",description:"Best place to start your journey with writing SQL Queries in SFMC.",mainTag:"SFMC SQL"},{title:r.createElement(r.Fragment,null,"SQL Select"),url:"./docs/sql/sfmc-sql-select/",imageUrl:"img/og/og-image-sql-select.png",description:"Learn how to SELECT the data and how to limit it with TOP & DISTINCT.",mainTag:"SFMC SQL"},{title:r.createElement(r.Fragment,null,"SQL Join"),url:"./docs/sql/sfmc-sql-join/",imageUrl:"img/og/og-image-sql-join.png",description:"Check how to work with more than one Data Extension or Data View.",mainTag:"SFMC SQL"},{title:r.createElement(r.Fragment,null,"SQL Date Functions"),url:"./docs/sql/sfmc-sql-date-functions/",imageUrl:"img/og/og-image-sql-date-functions.png",description:"Create, calculate and format date, time and timezone with SQL.",mainTag:"SFMC SQL"},{title:r.createElement(r.Fragment,null,"System Data Views"),url:"./docs/config/sfmc-system-data-views/",imageUrl:"img/og/og-image-sfmc-system-data-views.png",description:"Learn about hidden Data Views storing key data about your SFMC.",mainTag:"SFMC Config"},{title:r.createElement(r.Fragment,null,"Debugging Email Sends"),url:"./docs/sql/snippets/sfmc-sql-debugging-email-sends/",imageUrl:"img/og/og-image-sql-debugging-email-sends.png",description:"Step-by-step guide to resolving problems with SFMC email sends.",mainTag:"SFMC SQL Snippets"},{title:r.createElement(r.Fragment,null,"Behavioral Triggers"),url:"./docs/config/sfmc-behavioral-triggers/",imageUrl:"img/og/og-image-sfmc-behavioral-triggers.png",description:"All you need to know about working with SFMC Behavioral Triggers.",mainTag:"SFMC Config"},{title:r.createElement(r.Fragment,null,"Contact Deletion"),url:"./docs/config/sfmc-contact-deletion/",imageUrl:"img/og/og-image-sfmc-contact-deletion.png",description:"Everything you need to clean up your SFMC from dirty Contacts.",mainTag:"SFMC Config"}];function E(e){let{title:t,url:a,description:n,mainTag:i}=e;return r.createElement("div",{className:"col col--3"},r.createElement("div",{className:(0,l.Z)("card",g.articleCard)},r.createElement("div",{className:"card__header"},r.createElement(o.Z,{className:g.articleTitle,to:a},r.createElement("strong",null,t)),r.createElement("p",{className:g.articleTag},"#",i)),r.createElement("div",{className:"card__body"},n),r.createElement("div",{className:"card__footer"},r.createElement(o.Z,{className:g.articleLink,to:a},"Read more \xbb"))))}const h=function(){const e=(0,m.Z)(),{siteConfig:{customFields:t={}}={}}=e;return r.createElement(r.Fragment,null,r.createElement(c.Z,null,r.createElement("meta",{name:"author",content:"Mateusz D\u0105browski"}),r.createElement("meta",{name:"HandheldFriendly",content:"True"}),r.createElement("meta",{name:"referrer",content:"unsafe-url"}),r.createElement("link",{rel:"canonical",href:"https://mateuszdabrowski.pl/"}),r.createElement("meta",{property:"og:url",content:"https://mateuszdabrowski.pl/"}),r.createElement("meta",{property:"og:image",content:"/img/logotyp-og.png"}),r.createElement("meta",{property:"og:image:type",content:"image/png"}),r.createElement("meta",{property:"og:image:width",content:"1500"}),r.createElement("meta",{property:"og:image:height",content:"1500"}),r.createElement("meta",{property:"og:type",content:"website"}),r.createElement("link",{rel:"shortcut icon",sizes:"196x196",href:"/img/favicon_196.png"}),r.createElement("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/img/apple-touch-icon.png"}),r.createElement("link",{rel:"icon",type:"image/png",sizes:"167x167",href:"/img/favicon_167.png"}),r.createElement("link",{rel:"apple-touch-icon",sizes:"152x152",href:"/img/favicon_152.png"}),r.createElement("link",{rel:"icon",type:"image/png",sizes:"128x128",href:"/img/favicon_128.png"}),r.createElement("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/img/favicon_32.png"}),r.createElement("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/img/favicon_16.png"}),r.createElement("link",{rel:"manifest",href:"/img/site.webmanifest"}),r.createElement("link",{rel:"mask-icon",href:"/img/safari-pinned-tab.svg",color:"#DA4E55"}),r.createElement("meta",{name:"msapplication-TileColor",content:"#F6B355"}),r.createElement("meta",{name:"msapplication-square70x70logo",content:"/img/favicon-128.png"}),r.createElement("meta",{name:"msapplication-square150x150logo",content:"/img/favicon-270.png"}),r.createElement("meta",{name:"msapplication-TileImage",content:"/img/favicon-270.png"}),r.createElement("meta",{name:"msapplication-config",content:"none"}),r.createElement("meta",{name:"theme-color",content:"#212121"})),r.createElement(i.Z,{title:"Automate Marketing Automation",description:t.description,keywords:t.keywords},r.createElement("main",null,r.createElement("div",{className:g.hero},r.createElement("div",{className:g.heroInner},r.createElement("h1",{className:g.heroProjectTagline},"Automate ",r.createElement("span",{className:g.heroProjectKeywords},"Marketing Automation")),r.createElement("h2",{className:g.heroProjectSubTagline},r.createElement("span",{className:g.heroCodeFunction},"let")," ",r.createElement("span",{className:g.heroCodeVariable},"code")," ",r.createElement("span",{className:g.heroCodeSymbols},"=")," ",r.createElement("span",{className:g.heroCodeFunction},"do"),r.createElement("span",{className:g.heroCodeSymbols},"("),r.createElement("span",{className:g.heroCodeValue},"'our job'"),r.createElement("span",{className:g.heroCodeSymbols},");")))),d&&d.length>0&&r.createElement("section",{className:g.features},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},d.map(((e,t)=>r.createElement(u,(0,n.Z)({key:t},e))))))),p&&p.length>0&&r.createElement("section",{className:g.articles},r.createElement("div",{className:"container"},r.createElement("h2",{className:g.articlesHeading},"Most popular docs & snippets"),r.createElement("div",{className:"row"},p.map(((e,t)=>r.createElement(E,(0,n.Z)({key:t},e))))))))))}}}]); \ No newline at end of file diff --git a/assets/js/c64b8421.2653a86c.js b/assets/js/c64b8421.2653a86c.js new file mode 100644 index 000000000..4dd6d0b8e --- /dev/null +++ b/assets/js/c64b8421.2653a86c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7921],{6835:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=t(5893),i=t(1151),a=t(1872);const o={id:"sfmc-sql-case",title:"SFMC SQL Case",sidebar_label:"Case",description:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",image:"img/og/og-image-sql-case.png",tags:["Marketing Cloud","SQL"]},r=void 0,l={id:"sql/sfmc-sql-case",title:"SFMC SQL Case",description:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",source:"@site/docs/sql/sfmc-sql-case.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-case",permalink:"/docs/sql/sfmc-sql-case",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-case.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672581436,formattedLastUpdatedAt:"Jan 1, 2023",frontMatter:{id:"sfmc-sql-case",title:"SFMC SQL Case",sidebar_label:"Case",description:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",image:"img/og/og-image-sql-case.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Where",permalink:"/docs/sql/sfmc-sql-where"},next:{title:"Like",permalink:"/docs/sql/sfmc-sql-like"}},c={},d=[{value:"Conditional values with CASE",id:"conditional-values-with-case",level:2},{value:"Search version of CASE",id:"search-version-of-case",level:3},{value:"LIKE in CASE",id:"like-in-case",level:3},{value:"IIF Shorthand",id:"iif-shorthand",level:3},{value:"CASE in WHERE",id:"case-in-where",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.m,{content:"Empower your Marketing Cloud queries with conditional SQL CASE logic."}),"\n",(0,s.jsx)(n.h2,{id:"conditional-values-with-case",children:"Conditional values with CASE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"CASE"})," statement evaluates a list of conditions and returns one of the multiple possible result expressions. For Marketing Cloud purposes, it is especially useful when you want to select a column and modify the values within it. Perfect for translating numeric codes to descriptive ones for personalisation purposes. Excellent for standardising data (change those ",(0,s.jsx)(n.code,{children:"1"}),", ",(0,s.jsx)(n.code,{children:"true"})," and ",(0,s.jsx)(n.code,{children:"on"})," values of opt-in to a single format)."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:"{8-14}",children:"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n , CASE MemberType__c\n WHEN 1 THEN 'Bronze'\n WHEN 2 THEN 'Silver'\n WHEN 3 THEN 'Gold'\n WHEN 4 THEN 'Platinum'\n ELSE 'Unregistered'\n END AS MemberType\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can have as many ",(0,s.jsx)(n.code,{children:"WHEN"}),"/",(0,s.jsx)(n.code,{children:"THEN"})," conditions as you want. Also, the ",(0,s.jsx)(n.code,{children:"ELSE"})," statement is optional but a good idea to catch unexpected values."]}),"\n",(0,s.jsxs)(n.p,{children:["Feel free also to leverage ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select#aliasing-with-as",children:"aliases"})," to manipulate the column name at the same time:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:"{14}",children:"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n , CASE MemberType__c\n WHEN 1 THEN 'Bronze'\n WHEN 2 THEN 'Silver'\n WHEN 3 THEN 'Gold'\n WHEN 4 THEN 'Platinum'\n ELSE 'Unregistered'\n END AS MemberType\n"})}),"\n",(0,s.jsx)(n.h3,{id:"search-version-of-case",children:"Search version of CASE"}),"\n",(0,s.jsxs)(n.p,{children:["The above examples are already helpful in segmentation, but there is also one more way to write and use a ",(0,s.jsx)(n.code,{children:"CASE"})," statement that gives even more power. The search ",(0,s.jsx)(n.code,{children:"CASE"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The difference is that you are not passing the column name on which you will be building conditions. Instead, you create a boolean expression from scratch for each scenario."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{8-14} title="The same query as the previous one, but written with Search Case"',children:"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n , CASE\n WHEN MemberType__c = 1 THEN 'Bronze'\n WHEN MemberType__c = 2 THEN 'Silver'\n WHEN MemberType__c = 3 THEN 'Gold'\n WHEN MemberType__c = 4 THEN 'Platinum'\n ELSE 'Unregistered'\n END AS MemberType\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The example above doesn't show why it is worth using the search ",(0,s.jsx)(n.code,{children:"CASE"}),". It is a bit longer than the standard approach! But there is a reason to use this form of ",(0,s.jsx)(n.code,{children:"CASE"})," statement that is visible once you want to create more elaborate conditions that are possible only with this version:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{3-7} title="Let\'s calculate what channel we should use in our campaign for a given user"',children:"SELECT\n ContactKey\n , CASE\n WHEN IsAppInstalled = 1 THEN 'Push'\n WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'\n WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'\n END AS PreferredChannel\n"})}),"\n",(0,s.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"CASE"})," statement returns ",(0,s.jsx)(n.code,{children:"THEN"})," value of the first condition that evaluated to ",(0,s.jsx)(n.code,{children:"TRUE"}),". In the above example, if the ",(0,s.jsx)(n.code,{children:"IsAppInstalled = 1"})," is true, other conditions are not considered. Even if for selected contact all of them will be true, it will still have the value ",(0,s.jsx)(n.code,{children:"Push"})," in PreferredChannel. It is perfect, as it allows us to prioritise cheaper channels."]}),(0,s.jsxs)(n.p,{children:["Always consider the order of the conditions in your ",(0,s.jsx)(n.code,{children:"CASE"})," statement. It both might lead to errors if you don't expect the behaviour mentioned above and make your life much easier if you know it works that way."]})]}),"\n",(0,s.jsxs)(n.p,{children:["As you can see, thanks to search ",(0,s.jsx)(n.code,{children:"CASE"})," statements, we can check conditions on multiple different columns and connect them with ",(0,s.jsx)(n.code,{children:"AND"}),"/",(0,s.jsx)(n.code,{children:"OR"})," statements for better control. You can use this version of the ",(0,s.jsx)(n.code,{children:"CASE"})," statement for all your needs (even those covered by the basic one) to not worry about two ways of formatting."]}),"\n",(0,s.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.code,{children:"CASE"})," statements inside a ",(0,s.jsx)(n.code,{children:"CASE"})," statement to have an even more dynamic query."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{3-16} title="Let\'s add another dimension of membership level to differentiate available channels"',children:"SELECT\n ContactKey\n , CASE\n WHEN MemberType = 'Platinum' THEN 'Key Account Manager'\n WHEN MemberType = 'Gold' OR MemberType = 'Silver' THEN\n CASE\n WHEN IsAppInstalled = 1 THEN 'Push'\n WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'\n WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'\n END\n WHEN MemberType = 'Bronze' THEN\n CASE\n WHEN IsAppInstalled = 1 THEN 'Push'\n WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'\n END\n END AS PreferredChannel\n"})})]}),"\n",(0,s.jsx)(n.h3,{id:"like-in-case",children:"LIKE in CASE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-like",children:(0,s.jsx)(n.code,{children:"LIKE"})})," is not only valuable for the ",(0,s.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-where#like-operator",children:[(0,s.jsx)(n.code,{children:"WHERE"})," Statement"]}),". It is also an incredible tool empowering the ",(0,s.jsx)(n.code,{children:"CASE"})," statement. It allows you to build flexible conditions on free text values:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Great way to split your database between Internal and External users for different communication"',children:"SELECT\n ContactKey\n , CASE\n WHEN EmailAddress LIKE '%@mateuszdabrowski.%' THEN 'Internal'\n ELSE 'External'\n END AS ContactType\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"SELECT"})," statement, the ",(0,s.jsx)(n.code,{children:"LIKE"})," operator is handy for fixing data coming from the free text fields. To learn more about the possibilities, check out the ",(0,s.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-like",children:[(0,s.jsx)(n.code,{children:"LIKE"})," guide"]}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"iif-shorthand",children:"IIF Shorthand"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"CASE"})," statement is a fantastic tool but can be overkill for simple conditions. The ",(0,s.jsx)(n.code,{children:"IIF"})," comes to the rescue."]}),"\n",(0,s.jsx)(n.p,{children:"It takes three arguments:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Condition"}),"\n",(0,s.jsx)(n.li,{children:"The value returned if the condition evaluates to true"}),"\n",(0,s.jsx)(n.li,{children:"The value returned if the condition evaluates to false"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["With it, instead of multiline ",(0,s.jsx)(n.code,{children:"CASE"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:"{3-6}",children:"SELECT\n _Subscriber.SubscriberKey\n , CASE\n WHEN _Subscriber.Status = 'active' THEN 'TRUE'\n ELSE 'FALSE'\n END AS Sendable\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can have the same outcome in a single, more readable ",(0,s.jsx)(n.code,{children:"IIF"})," line:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:"{3}",children:"SELECT\n _Subscriber,SubscriberKey,\n , IIF(_Subscriber.Status = 'active', 'TRUE', 'FALSE') AS Sendable\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Whenever you have a single condition - go with ",(0,s.jsx)(n.code,{children:"IIF"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(n.p,{children:["You can take both ",(0,s.jsx)(n.code,{children:"CASE"})," and ",(0,s.jsx)(n.code,{children:"IIF"})," to the next level with dynamic values. Don't limit yourself to a string, integer or boolean - pass a column name."]}),(0,s.jsxs)(n.p,{children:["Use case? Think of a Master Data Extension that stores a massive amount of contact information, including preferred channel (Email or Mobile). With dynamic values and ",(0,s.jsx)(n.code,{children:"IIF"})," in just a few lines, we can create an optimised Data Extension with crucial information:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sql",metastring:"{4}",children:"SELECT\n SubscriberKey\n , PreferredChannel\n , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact\n"})}),(0,s.jsx)(n.p,{children:"Now, even with just three columns in your Entry Point, you can create a Journey that adapts the channel to customer preferences."})]}),"\n",(0,s.jsx)(n.h2,{id:"case-in-where",children:"CASE in WHERE"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"CASE"})," statement is not only useful in a ",(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select",children:(0,s.jsx)(n.code,{children:"SELECT"})})," part of the query. You can use it also within the ",(0,s.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-where#case-operator",children:[(0,s.jsx)(n.code,{children:"WHERE"})," to apply conditional filtering"]}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,n,t)=>{t.d(n,{m:()=>a});t(7294);const s="leadText_qzwo";var i=t(5893);const a=e=>{let{content:n}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:s,children:n})})}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>o});var s=t(7294);const i={},a=s.createContext(i);function o(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(i):e.components||i:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c64b8421.ae233fe9.js b/assets/js/c64b8421.ae233fe9.js deleted file mode 100644 index 584f9ddc8..000000000 --- a/assets/js/c64b8421.ae233fe9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7921],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>E});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(n),u=r,E=d["".concat(s,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(E,i(i({ref:t},p),{},{components:n})):a.createElement(E,i({ref:t},p))}));function E(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var c=2;c<o;c++)i[c]=n[c];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>o});var a=n(7294);const r="leadText_qzwo",o=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}},4079:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(4137)),o=n(1872);const i={id:"sfmc-sql-case",title:"SFMC SQL Case",sidebar_label:"Case",description:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",image:"img/og/og-image-sql-case.png",tags:["Marketing Cloud","SQL"]},l=void 0,s={unversionedId:"sql/sfmc-sql-case",id:"sql/sfmc-sql-case",title:"SFMC SQL Case",description:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",source:"@site/docs/sql/sfmc-sql-case.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-case",permalink:"/docs/sql/sfmc-sql-case",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-case.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672581436,formattedLastUpdatedAt:"Jan 1, 2023",frontMatter:{id:"sfmc-sql-case",title:"SFMC SQL Case",sidebar_label:"Case",description:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",image:"img/og/og-image-sql-case.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Where",permalink:"/docs/sql/sfmc-sql-where"},next:{title:"Like",permalink:"/docs/sql/sfmc-sql-like"}},c={},p=[{value:"Conditional values with CASE",id:"conditional-values-with-case",level:2},{value:"Search version of CASE",id:"search-version-of-case",level:3},{value:"LIKE in CASE",id:"like-in-case",level:3},{value:"IIF Shorthand",id:"iif-shorthand",level:3},{value:"CASE in WHERE",id:"case-in-where",level:2}],d={toc:p},m="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Empower your Marketing Cloud queries with conditional SQL CASE logic.",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"conditional-values-with-case"},"Conditional values with CASE"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement evaluates a list of conditions and returns one of the multiple possible result expressions. For Marketing Cloud purposes, it is especially useful when you want to select a column and modify the values within it. Perfect for translating numeric codes to descriptive ones for personalisation purposes. Excellent for standardising data (change those ",(0,r.kt)("inlineCode",{parentName:"p"},"1"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"on")," values of opt-in to a single format)."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{8-14}","{8-14}":!0},"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n , CASE MemberType__c\n WHEN 1 THEN 'Bronze'\n WHEN 2 THEN 'Silver'\n WHEN 3 THEN 'Gold'\n WHEN 4 THEN 'Platinum'\n ELSE 'Unregistered'\n END AS MemberType\n")),(0,r.kt)("p",null,"You can have as many ",(0,r.kt)("inlineCode",{parentName:"p"},"WHEN"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"THEN")," conditions as you want. Also, the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELSE")," statement is optional but a good idea to catch unexpected values."),(0,r.kt)("p",null,"Feel free also to leverage ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#aliasing-with-as"},"aliases")," to manipulate the column name at the same time:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{14}","{14}":!0},"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n , CASE MemberType__c\n WHEN 1 THEN 'Bronze'\n WHEN 2 THEN 'Silver'\n WHEN 3 THEN 'Gold'\n WHEN 4 THEN 'Platinum'\n ELSE 'Unregistered'\n END AS MemberType\n")),(0,r.kt)("h3",{id:"search-version-of-case"},"Search version of CASE"),(0,r.kt)("p",null,"The above examples are already helpful in segmentation, but there is also one more way to write and use a ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement that gives even more power. The search ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE"),"."),(0,r.kt)("p",null,"The difference is that you are not passing the column name on which you will be building conditions. Instead, you create a boolean expression from scratch for each scenario."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{8-14} title="The same query as the previous one, but written with Search Case"',"{8-14}":!0,title:'"The',same:!0,query:!0,as:!0,the:!0,previous:!0,"one,":!0,but:!0,written:!0,with:!0,Search:!0,'Case"':!0},"SELECT\n ContactKey\n , EmailAddress\n , [External Contact Id] AS ExternalContactId\n , Gender__c AS Gender\n , 'Lead' AS RecordType\n , GETUTCDATE() AS ImportDate\n , CASE\n WHEN MemberType__c = 1 THEN 'Bronze'\n WHEN MemberType__c = 2 THEN 'Silver'\n WHEN MemberType__c = 3 THEN 'Gold'\n WHEN MemberType__c = 4 THEN 'Platinum'\n ELSE 'Unregistered'\n END AS MemberType\n")),(0,r.kt)("p",null,"The example above doesn't show why it is worth using the search ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE"),". It is a bit longer than the standard approach! But there is a reason to use this form of ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement that is visible once you want to create more elaborate conditions that are possible only with this version:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3-7} title="Let\'s calculate what channel we should use in our campaign for a given user"',"{3-7}":!0,title:"\"Let's",calculate:!0,what:!0,channel:!0,we:!0,should:!0,use:!0,in:!0,our:!0,campaign:!0,for:!0,a:!0,given:!0,'user"':!0},"SELECT\n ContactKey\n , CASE\n WHEN IsAppInstalled = 1 THEN 'Push'\n WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'\n WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'\n END AS PreferredChannel\n")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement returns ",(0,r.kt)("inlineCode",{parentName:"p"},"THEN")," value of the first condition that evaluated to ",(0,r.kt)("inlineCode",{parentName:"p"},"TRUE"),". In the above example, if the ",(0,r.kt)("inlineCode",{parentName:"p"},"IsAppInstalled = 1")," is true, other conditions are not considered. Even if for selected contact all of them will be true, it will still have the value ",(0,r.kt)("inlineCode",{parentName:"p"},"Push")," in PreferredChannel. It is perfect, as it allows us to prioritise cheaper channels."),(0,r.kt)("p",{parentName:"admonition"},"Always consider the order of the conditions in your ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement. It both might lead to errors if you don't expect the behaviour mentioned above and make your life much easier if you know it works that way.")),(0,r.kt)("p",null,"As you can see, thanks to search ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statements, we can check conditions on multiple different columns and connect them with ",(0,r.kt)("inlineCode",{parentName:"p"},"AND"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"OR")," statements for better control. You can use this version of the ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement for all your needs (even those covered by the basic one) to not worry about two ways of formatting."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can use ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statements inside a ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement to have an even more dynamic query."),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3-16} title="Let\'s add another dimension of membership level to differentiate available channels"',"{3-16}":!0,title:"\"Let's",add:!0,another:!0,dimension:!0,of:!0,membership:!0,level:!0,to:!0,differentiate:!0,available:!0,'channels"':!0},"SELECT\n ContactKey\n , CASE\n WHEN MemberType = 'Platinum' THEN 'Key Account Manager'\n WHEN MemberType = 'Gold' OR MemberType = 'Silver' THEN\n CASE\n WHEN IsAppInstalled = 1 THEN 'Push'\n WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'\n WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'\n END\n WHEN MemberType = 'Bronze' THEN\n CASE\n WHEN IsAppInstalled = 1 THEN 'Push'\n WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'\n END\n END AS PreferredChannel\n"))),(0,r.kt)("h3",{id:"like-in-case"},"LIKE in CASE"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-like"},(0,r.kt)("inlineCode",{parentName:"a"},"LIKE"))," is not only valuable for the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#like-operator"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE")," Statement"),". It is also an incredible tool empowering the ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement. It allows you to build flexible conditions on free text values:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Great way to split your database between Internal and External users for different communication"',"{4}":!0,title:'"Great',way:!0,to:!0,split:!0,your:!0,database:!0,between:!0,Internal:!0,and:!0,External:!0,users:!0,for:!0,different:!0,'communication"':!0},"SELECT\n ContactKey\n , CASE\n WHEN EmailAddress LIKE '%@mateuszdabrowski.%' THEN 'Internal'\n ELSE 'External'\n END AS ContactType\n")),(0,r.kt)("p",null,"In the ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," statement, the ",(0,r.kt)("inlineCode",{parentName:"p"},"LIKE")," operator is handy for fixing data coming from the free text fields. To learn more about the possibilities, check out the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-like"},(0,r.kt)("inlineCode",{parentName:"a"},"LIKE")," guide"),"."),(0,r.kt)("h3",{id:"iif-shorthand"},"IIF Shorthand"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement is a fantastic tool but can be overkill for simple conditions. The ",(0,r.kt)("inlineCode",{parentName:"p"},"IIF")," comes to the rescue."),(0,r.kt)("p",null,"It takes three arguments:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Condition"),(0,r.kt)("li",{parentName:"ol"},"The value returned if the condition evaluates to true"),(0,r.kt)("li",{parentName:"ol"},"The value returned if the condition evaluates to false")),(0,r.kt)("p",null,"With it, instead of multiline ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3-6}","{3-6}":!0},"SELECT\n _Subscriber.SubscriberKey\n , CASE\n WHEN _Subscriber.Status = 'active' THEN 'TRUE'\n ELSE 'FALSE'\n END AS Sendable\n")),(0,r.kt)("p",null,"You can have the same outcome in a single, more readable ",(0,r.kt)("inlineCode",{parentName:"p"},"IIF")," line:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3}","{3}":!0},"SELECT\n _Subscriber,SubscriberKey,\n , IIF(_Subscriber.Status = 'active', 'TRUE', 'FALSE') AS Sendable\n")),(0,r.kt)("p",null,"Whenever you have a single condition - go with ",(0,r.kt)("inlineCode",{parentName:"p"},"IIF"),"."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can take both ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"IIF")," to the next level with dynamic values. Don't limit yourself to a string, integer or boolean - pass a column name."),(0,r.kt)("p",{parentName:"admonition"},"Use case? Think of a Master Data Extension that stores a massive amount of contact information, including preferred channel (Email or Mobile). With dynamic values and ",(0,r.kt)("inlineCode",{parentName:"p"},"IIF")," in just a few lines, we can create an optimised Data Extension with crucial information:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4}","{4}":!0},"SELECT\n SubscriberKey\n , PreferredChannel\n , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact\n")),(0,r.kt)("p",{parentName:"admonition"},"Now, even with just three columns in your Entry Point, you can create a Journey that adapts the channel to customer preferences.")),(0,r.kt)("h2",{id:"case-in-where"},"CASE in WHERE"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"CASE")," statement is not only useful in a ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,r.kt)("inlineCode",{parentName:"a"},"SELECT"))," part of the query. You can use it also within the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#case-operator"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE")," to apply conditional filtering"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c7794043.ba82b1ba.js b/assets/js/c7794043.41a1b140.js similarity index 95% rename from assets/js/c7794043.ba82b1ba.js rename to assets/js/c7794043.41a1b140.js index 145e55275..e571b7a5a 100644 --- a/assets/js/c7794043.ba82b1ba.js +++ b/assets/js/c7794043.41a1b140.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6639],{7351:t=>{t.exports=JSON.parse('{"label":"Setup","permalink":"/docs/tags/setup","allTagsPath":"/docs/tags","count":5,"items":[{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[6639],{7351:t=>{t.exports=JSON.parse('{"label":"Setup","permalink":"/docs/tags/setup","allTagsPath":"/docs/tags","count":5,"items":[{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/c8a2287d.d9d8783f.js b/assets/js/c8a2287d.d9d8783f.js new file mode 100644 index 000000000..c895810ad --- /dev/null +++ b/assets/js/c8a2287d.d9d8783f.js @@ -0,0 +1 @@ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3786],{8004:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-appexchange-activation-studio.8844450.640.png 640w,"+i.p+"assets/ideal-img/article-image-appexchange-activation-studio.dc74313.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-appexchange-activation-studio.8844450.640.png",width:640,height:320},{path:i.p+"assets/ideal-img/article-image-appexchange-activation-studio.dc74313.1030.png",width:1030,height:515}],src:i.p+"assets/ideal-img/article-image-appexchange-activation-studio.8844450.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-appexchange-activation-studio.8844450.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVR4nE2LSwrCMABEc/+ruHNT1+qiqLhREGwlaiuosSn2l/STPjFufDDMMMyIyWzF7vbmeC8pipK6bjDGeFVVTdf1RFGECJYH7h1IbXnqF/98T1+kPCMW4f5XNiUPreiHnqZrGEeHMRb1KojjE2IeHvzQ2tZ7O7ZUQ+mzc857kqSIabBAZ4rL9YK8SnSm0VmOUookTcnznPVmyweYJbyQgmpT+QAAAABJRU5ErkJggg=="}},754:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png 640w,"+i.p+"assets/ideal-img/article-image-appexchange-deselect-segment.195eb32.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png",width:640,height:345},{path:i.p+"assets/ideal-img/article-image-appexchange-deselect-segment.195eb32.1030.png",width:1030,height:555}],src:i.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d87540a.640.png"},placeholder:void 0,width:640,height:345},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiklEQVR4nDWNyw7CIBRE+f9/c2NcutBqfWDsC2jLBe4xVF2cnEwymTH9acdkzzTNnt4ekaElTTeyu28sfct0PWA6e2GOmXF0OD9TgKx/dMsS3pgwPFCF4B3BeyRGksTNUi1CnF4Y1z1ZJRNCIEkipS+1kHOmqCLzgFl9hwKlZLQU6rz+QOsxLKPlA+k3weKoofNNAAAAAElFTkSuQmCC"}},6247:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png 640w,"+i.p+"assets/ideal-img/article-image-appexchange-flowchart.58f3137.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png",width:640,height:560},{path:i.p+"assets/ideal-img/article-image-appexchange-flowchart.58f3137.1030.png",width:1030,height:901}],src:i.p+"assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-appexchange-flowchart.d225868.640.png"},placeholder:void 0,width:640,height:560},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAACXBIWXMAAAsTAAALEwEAmpwYAAABBElEQVR4nGWPXUvCUACGz5/vB3TTZT8h6CYJglqiqYgkSUiubW5ON7edfZ5tOucTIZHRc/fCy/shtI+Mizuftj1yzvF40qYbEcgCsfE2zN7fOJSSJjY5qJAms6icNfViQVq1hNkesUtsSrtLERgkRo/c/yBfD8leZ6TP3Z98hAotYl1DBQaF2ycdToluOn9mfCNKuSIxB5TSRrljKt9GGVOafMs+saltl8owESpaIvUuZWSRWy+kvo5cjii2c3JvTNobkTxqiDp2UHYfFeiknxqFNyd1eiSDCbLz8FttLOY83d9S5TF14rIrJPvCYx+E1M7q5GpbxGA04fLqmqZp/h04P/MFOjZQFGiqSQcAAAAASUVORK5CYII="}},7274:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png 640w,"+i.p+"assets/ideal-img/article-image-appexchange-query-studio.95520e4.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png",width:640,height:270},{path:i.p+"assets/ideal-img/article-image-appexchange-query-studio.95520e4.1030.png",width:1030,height:435}],src:i.p+"assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-appexchange-query-studio.04a5ccb.640.png"},placeholder:void 0,width:640,height:270},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAfElEQVR4nB3FQQ7CIBQAUe5/LS9QXbhQQ2sBwUJN4X9j3HSMTPIy5mgz81JxWfBFuzkLU6oczonhFjnZJyYthdGOlLzyb9/3flXhOgbuPnbGp4KdAi5EXltja8r786U2YX5khkvqjAsJFcH7gPMBUaW1RsmFWitNlLis/AC6dpWGervhPQAAAABJRU5ErkJggg=="}},8570:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png 640w,"+i.p+"assets/ideal-img/article-image-appexchange-segmentation.161bd96.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png",width:640,height:514},{path:i.p+"assets/ideal-img/article-image-appexchange-segmentation.161bd96.1030.png",width:1030,height:828}],src:i.p+"assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png"},placeholder:void 0,width:640,height:514},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5UlEQVR4nE3Ob0vCUBTHcd94vYfsWUUPFpcKm5n5p6K0oKkQVJdIvKyIElsba2g4GbbdbzSH7jw5Pw4fzjkF8qX1oif/Uafx7TPgy59SyIP5ZMR3R+DWBJHjpLMwihmHcQazLYF1SX93DWWsM7NvsiuLtoTj+0f8ao3ofJv57Q6hOiVy5HJPCrXrMTRPeBIm78cVfFnl9e4IT5Yh8lZQNdq0ioKrrQoHZzZmV9G5LmNdGHw8t1fQOqwjNk2M5oCNxoBiXbHX6iNK+zx0m7kfkwT35xc5Cum9BPTsADmc4U1j0EkK/wC4MSKgt9bVqAAAAABJRU5ErkJggg=="}},3914:(e,t,i)=>{"use strict";i.r(t),i.d(t,{assets:()=>j,contentTitle:()=>A,default:()=>S,frontMatter:()=>y,metadata:()=>w,toc:()=>b});var n=i(5893),s=i(1151),a=i(1872),o=i(7271),r=i(5944),l=i(6247),h=i.n(l),d=i(8570),c=i.n(d),u=i(7274),p=i.n(u),g=i(754),m=i.n(g),x=i(8004),f=i.n(x);const y={id:"sfmc-appexchange-solutions",title:"SFMC AppExchange Solutions",sidebar_label:"AppExchange Solutions",description:"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.",image:"img/og/og-image-sfmc-appexchange.png",tags:["Marketing Cloud","App","AppExchange"]},A=void 0,w={id:"config/sfmc-appexchange-solutions",title:"SFMC AppExchange Solutions",description:"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.",source:"@site/docs/config/sfmc-appexchange-solutions.mdx",sourceDirName:"config",slug:"/config/sfmc-appexchange-solutions",permalink:"/docs/config/sfmc-appexchange-solutions",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-appexchange-solutions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"App",permalink:"/docs/tags/app"},{label:"AppExchange",permalink:"/docs/tags/app-exchange"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-appexchange-solutions",title:"SFMC AppExchange Solutions",sidebar_label:"AppExchange Solutions",description:"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.",image:"img/og/og-image-sfmc-appexchange.png",tags:["Marketing Cloud","App","AppExchange"]},sidebar:"docs",previous:{title:"Behavioral Triggers",permalink:"/docs/config/sfmc-behavioral-triggers"},next:{title:"Features On Demand",permalink:"/docs/config/sfmc-features-on-demand"}},j={},b=[{value:"When is AppExchange worth it?",id:"when-is-appexchange-worth-it",level:2},{value:"1. Define feature requirements",id:"1-define-feature-requirements",level:3},{value:"2. Validate out-of-the-box options",id:"2-validate-out-of-the-box-options",level:3},{value:"3. Free AppExchange Solutions",id:"3-free-appexchange-solutions",level:3},{value:"4. Custom Solution",id:"4-custom-solution",level:3},{value:"5. Paid AppExchange Solutions",id:"5-paid-appexchange-solutions",level:3},{value:"SFMC Segmentation Solutions",id:"sfmc-segmentation-solutions",level:2},{value:"Query Studio",id:"query-studio",level:3},{value:"The Good",id:"the-good",level:4},{value:"The Bad",id:"the-bad",level:4},{value:"The Sum Up",id:"the-sum-up",level:4},{value:"DESelect Segment",id:"deselect-segment",level:3},{value:"The Good",id:"the-good-1",level:4},{value:"The Bad",id:"the-bad-1",level:4},{value:"The Sum Up",id:"the-sum-up-1",level:4},{value:"Activation Studio",id:"activation-studio",level:3},{value:"The Good",id:"the-good-2",level:4},{value:"The Bad",id:"the-bad-2",level:4},{value:"The Sum Up",id:"the-sum-up-2",level:4}];function v(e){const t={a:"a",admonition:"admonition",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.m,{content:"Fill the feature gaps with plug-and-play apps. Solution highlights from Salesforce Marketing Cloud's AppExchange."}),"\n",(0,n.jsxs)(t.p,{children:["AppExchange is an app store for various Clouds within Salesforce Customer 360 platform. You will find in-house solutions from Salesforce Labs and 3rd party. Free and paid. Good and bad. But all - validated by ",(0,n.jsx)(t.a,{href:"https://developer.salesforce.com/docs/atlas.en-us.packagingGuide.meta/packagingGuide/security_review_guidelines.htm",children:"Salesforce Security Review"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["From over 4000 solutions available there, only around 60 are for the ",(0,n.jsx)(t.a,{href:"https://appexchange.salesforce.com/category/marketing",children:"Saleforce Marketing Cloud"}),". Here, I will focus only on those I had experience with to provide some value over the standard AppExchange descriptions."]}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsx)(t.p,{children:"This document is a living thing. New solutions keep popping up, and old ones sometimes disappear or are recreated. I try to keep it up-to-date, but your help with this task will be appreciated."})}),"\n",(0,n.jsx)(t.h2,{id:"when-is-appexchange-worth-it",children:"When is AppExchange worth it?"}),"\n",(0,n.jsx)(t.p,{children:"Before we jump into specific solutions available in the store, let's talk about whether you should consider going through AppExchange offerings. This question is especially relevant with how feature-packed and customizable the Marketing Cloud is. And not that easy to answer when you assess all decision drivers."}),"\n",(0,n.jsx)(t.h3,{id:"1-define-feature-requirements",children:"1. Define feature requirements"}),"\n",(0,n.jsx)(t.p,{children:"Ok, you want a feature and are eager to find a solution to deliver it. Now stop. Before opening the AppExchange repository, you should dive deep into the exact requirements the solution has to fulfil."}),"\n",(0,n.jsx)(t.p,{children:"Key things to consider:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"What it needs to do"})," - what is the minimum valuable outcome, and what is an ideal one?"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"How it needs to do it"})," - does it have to be a user-friendly no-code solution, or is a developer-oriented approach acceptable?"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Where it needs to do it"})," - does it have to be done within the SFMC, or can it be external?"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Who needs to do it"})," - do you have the resources to implement it, or should it be outsourced?"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"What is the budget"})," - does it have to be free, cheap, or you can pay for good value?"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Those requirements should be aligned with the final users and be clear enough to serve as a guardrail for making an informed decision."}),"\n",(0,n.jsx)(t.h3,{id:"2-validate-out-of-the-box-options",children:"2. Validate out-of-the-box options"}),"\n",(0,n.jsx)(t.p,{children:"Once you have requirements, it's time to check what already is within your Marketing Cloud license. Over the years, Salesforce baked in many solutions, so you might find something already there, just waiting to be used."}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(t.p,{children:["Not all solutions are available by default - some require a support ticket to be enabled. Check out my ",(0,n.jsx)(t.a,{href:"/docs/config/sfmc-features-on-demand",children:"list of features on-demand"})," to see if there is anything hidden that might fulfil your requirements."]})}),"\n",(0,n.jsx)(t.p,{children:"However, even if your requirement has an out-of-the-box solution, it doesn't always mean the end of the work. You need to check whether it is good and easy enough:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Good Enough"}),": Just because there is something, it might not meet all the requirements you gathered in the first step. Maybe it is too basic for your needs or doesn't have access to all data you want to leverage. It is where you start seeing the benefits of the prework."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Easy Enough"}),": Even if the solution is good enough, it might not be easy enough. Always assess the solution by considering the knowledge and skills of the end users - not yours (unless you will be the only end user, of course)."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"If the out-of-the-box solution checks both boxes - you hit the jackpot and can leverage what is already there."}),"\n",(0,n.jsx)(t.p,{children:"Else, it's time to look somewhere... else."}),"\n",(0,n.jsx)(t.h3,{id:"3-free-appexchange-solutions",children:"3. Free AppExchange Solutions"}),"\n",(0,n.jsxs)(t.p,{children:["Time to check whether there is any free solution available on demand. You can do it by going to ",(0,n.jsx)(t.a,{href:"https://appexchange.salesforce.com/category/marketing",children:"marketing AppExchange"})," and applying filters to get Free solutions dedicated to Marketing Cloud."]}),"\n",(0,n.jsxs)(t.p,{children:["To manage your expectations: for Salesforce Marketing Cloud, the list won't be long. And even then, you have to make sure the app is genuinely offering a meaningful free tier. Expect free Salesforce Labs solutions (like ",(0,n.jsx)(t.a,{href:"#query-studio",children:"Query Studio"})," covered below) and little pearls made by 3rd parties - like Content Builder asset finder ",(0,n.jsx)(t.a,{href:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3u00000PFaZrEAL",children:"DESelect Search"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["If you are lucky enough to find something free in AppExchange related to your requirements, check whether it is good enough. Just as you did in the ",(0,n.jsx)(t.a,{href:"#2-validate-out-of-the-box-options",children:"previous step"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"No luck? Before checking the paid filter in AppExchange, there is one more approach to consider."}),"\n",(0,n.jsx)(t.h3,{id:"4-custom-solution",children:"4. Custom Solution"}),"\n",(0,n.jsx)(t.p,{children:"A decade ago, building a custom solution for every requirement was all the rage. Since then, the platforms and their 3rd party ecosystems have grown significantly, making this approach much less tempting. Why?"}),"\n",(0,n.jsx)(t.p,{children:"There are four things to consider:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Can you build a Custom solution?"})," This can be done using in-house developers or outsourced to external specialists, but you need either skills or a budget."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Will it be good enough?"})," If you have the means, building a custom is easy. But do you have ",(0,n.jsx)(t.em,{children:"enough"})," skills or budget to make a good solution that will be user-friendly, optimized, polished and matching all your requirements?"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Will it be cheaper than AppExchange?"})," Sure, with enough time and money, you can build something good enough. But will it be more affordable than a similar solution available in the paid section of AppExchange?"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Will you maintain it?"})," Even if you answered yes to the previous three points, you must consider maintenance. In most cases, building a custom is just the beginning. Requirements change, new needs happen, platforms get updated and require refactor. With AppExchange solutions, it ",(0,n.jsx)(t.em,{children:"should"})," be much less of a worry in the long term."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["While the list might look like a hard pass for custom solutions, there is a place for them. Especially on the ends of the spectrum. Simple, but lifesaving micro solutions (",(0,n.jsx)(t.a,{href:"/docs/ssjs/snippets/sfmc-cloud-page-apps",children:"Cloud Page Apps"}),", ",(0,n.jsx)(t.a,{href:"/docs/config/sfmc-code-resource",children:"Code Resources"}),") or custom behemoths aligned to all non-negotiable quirks and features of your internal processes."]}),"\n",(0,n.jsx)(t.p,{children:'However, if you hit a hard "no" to any of the above questions, it\'s time to visit the AppExchange again.'}),"\n",(0,n.jsx)(t.h3,{id:"5-paid-appexchange-solutions",children:"5. Paid AppExchange Solutions"}),"\n",(0,n.jsx)(t.p,{children:"Here we are. After defining the requirements, we haven't found anything worthy among the out-of-the-box solutions, the land of the free AppExchange was barren, and the custom work didn't seem like the best choice. Paid AppExchange it is. But is it really?"}),"\n",(0,n.jsx)(t.p,{children:"Assuming you found a paid solution, you still need to assess whether it will be good enough. The positive part here? If you see only small pieces missing from the ideal, you might talk with the solution creators and discuss prioritization of the future changes."}),"\n",(0,n.jsx)(t.p,{children:"However, you also need to keep in mind the budget. Not only the subscription cost but also implementation, training, and enhancements. After considering all that, will you still see a return on investment? If yes - you are good to go."}),"\n",(0,n.jsxs)(t.p,{children:["If not, it's time to update your requirements - the list of needed features or the budget size - and ",(0,n.jsx)(t.a,{href:"#2-validate-out-of-the-box-options",children:"start again"}),"."]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.p,{children:"Sounds complex? Would you rather have a visual guide? Got you covered:"}),"\n",(0,n.jsx)(r.Z,{img:h(),alt:"Flowchart with visual representation of the When is AppExchange Worth It? analysis process"}),"\n",(0,n.jsx)(t.p,{children:"Looks complex? Would you rather have an example-based walkthrough? Got you covered as well in the next chapter:"}),"\n",(0,n.jsx)(t.h2,{id:"sfmc-segmentation-solutions",children:"SFMC Segmentation Solutions"}),"\n",(0,n.jsx)(t.p,{children:"Finding the right approach to database segmentation is one of the critical elements of successful marketing automation. In Salesforce Marketing Cloud, it's a complex topic because (spoiler) there is no perfect - powerful, simple and free - solution. You need to choose your priorities."}),"\n",(0,n.jsxs)(t.p,{children:["Looks like excellent use case to test the ",(0,n.jsx)(t.a,{href:"#when-is-appexchange-worth-it",children:'"Is AppExchange worth it?" process'})," on a real-life scenario, so let's check how it works."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"1. Feature Requirements"})}),"\n",(0,n.jsx)(t.p,{children:"Let me paraphrase the user story constraints I encounter on nearly every implementation:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"As a company, I want to have segmentation based on our comprehensive data so that we can send the right communication to the right persons at the right time."}),"\n",(0,n.jsx)(t.li,{children:"As a marketer, I want to have a drag and drop segmentation so that it is fast and easy to deliver correctly built segments."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Let's split it into crucial things to consider:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"What it needs to do"})," - Segment the database using multiple data points."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"How it needs to do it"})," - Simple drag and drop solution."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Where it needs to do it"})," - Within Marketing Cloud."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Who needs to do it"})," - Undecided, but no internal resources for implementation."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"What is the budget"})," - No budget."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Does it sound familiar? ;)"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"2. Out-of-the-box options"})}),"\n",(0,n.jsx)(t.p,{children:"There are two ways to segment contacts in Marketing Cloud core. Filtered Data Extensions and SQL Query Activities. How do they stack against our requirements?"}),"\n",(0,n.jsx)(t.p,{children:"Filtered Data Extensions are free, require nearly no implementation (apart from setting Data Relationships), work directly in SFMC, and are a simple drag and drop solution, but... They don't support segmenting on more than two Data Extensions. Not good enough."}),"\n",(0,n.jsxs)(t.p,{children:["SQL Query Activities are free, require no implementation, work directly in SFMC and allow segmenting on multiple data points, but... demand ",(0,n.jsx)(t.a,{href:"/docs/sql/sfmc-sql-basics",children:"SQL"})," skills. It means training requirements, slower segmentation and a higher risk of errors by inexperienced users. Not easy enough."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"3. Free AppExchange"})}),"\n",(0,n.jsxs)(t.p,{children:["Filtering the AppExchange for free solutions will show only one related to segmentation - ",(0,n.jsx)(t.a,{href:"#query-studio",children:"Query Studio"}),". While it's a great tool, it's still a SQL-based solution. It's also not an end-to-end tool for segmentation purposes. Not good enough."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"4. Custom Solution"})}),"\n",(0,n.jsx)(t.p,{children:"There are two base options for the drag and drop custom solution approach."}),"\n",(0,n.jsxs)(t.p,{children:["First - generator that modifies predefined segments. It's relatively simple to build, but it allows you to make only minor adaptations of the templated query, mostly on filtering (",(0,n.jsx)(t.a,{href:"/docs/sql/sfmc-sql-where",children:"SQL WHERE"}),". Very limited and requires hard coding for each new segment template. Not good enough and hard to maintain."]}),"\n",(0,n.jsx)(t.p,{children:"Second - fully-fledged visual wrapper over SQL queries. Full power with a drag and drop interface. Sounds like a dream? Correct. Such solution requires a lot of work and testing. The cost would skyrocket well above (spoiler alert) what is available in the paid section of AppExchange. Not worth it."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"5. Paid AppExchange"})}),"\n",(0,n.jsxs)(t.p,{children:["Finally, we get to the last stop. After a quick search, we can find two solutions: tried and tested ",(0,n.jsx)(t.a,{href:"#deselect-segment",children:"DESelect Segment"})," and the new contender ",(0,n.jsx)(t.a,{href:"#activation-studio",children:"Activation Studio"}),'. More details on them in a moment, but from the perspective of this exercise - both are subscription based, while one of the key things to consider was the beloved "no budget".']}),"\n",(0,n.jsx)(t.p,{children:"Therefore we get to the update requirements step, where the company needs to prioritize between powerful, simple and free."}),"\n",(0,n.jsx)(r.Z,{img:c(),alt:"Triangle with three corners - FREE, POWERFUL and SIMPLE - and three solutions: FREE and POWERFUL SQL Query Activity, FREE and SIMPLE Filtered Data Extensions, POWERFUL and SIMPLE DESelect Segment. "}),"\n",(0,n.jsx)(t.p,{children:"I hope it is now easier to find when AppExchange can solve Marketing Cloud requirements. With that, let's jump to the segmentation solutions available there."}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h3,{id:"query-studio",children:"Query Studio"}),"\n",(0,n.jsx)(r.Z,{img:p(),alt:"Screenshot of the Query Studio User Interface"}),"\n",(0,n.jsx)(t.p,{children:"Creator | Pricing"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"| -\nSalesforce Labs | Free"}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"the-good",children:"The Good"}),"\n",(0,n.jsx)(t.p,{children:"Query Studio solves two problems:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"SFMC SQL Query Testing"}),"\n",(0,n.jsx)(t.li,{children:"SFMC SQL Data Exploratory Analysis"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Why did I call it problems?"}),"\n",(0,n.jsx)(t.p,{children:"Because the only out-of-the-box solution for working with SQL in Marketing Cloud is Query Activity in Automation Studio. It allows you to validate whether your query is valid, but checking if the outcomes are as expected is a pain."}),"\n",(0,n.jsx)(t.p,{children:"You can see the results only after manually creating a data extension with the correct columns (names, data types, lengths) and executing the Query Activity. Outcomes are suboptimal and need to make some changes? The Data Extension needs a rework."}),"\n",(0,n.jsx)(t.p,{children:"It sometimes happens when you are writing and testing a new query. It happens all the time when you are doing exploratory analysis."}),"\n",(0,n.jsx)(t.p,{children:"Query Studio automatically builds a temporary Data Extension to store the query's output on every execution. It also displays a subset of outcomes below your SQL so you can quickly check whether it aligns with your expectations."}),"\n",(0,n.jsx)(t.p,{children:"And that's not all - Query Studio lets you save your work as ready-to-use Query Activities. Even in a way that is impossible through the Automation Studio (like query targeting Auto-Suppression List)!"}),"\n",(0,n.jsx)(t.h4,{id:"the-bad",children:"The Bad"}),"\n",(0,n.jsx)(t.p,{children:"However, Query Studio is not perfect. The main issue is that it has implemented a different (and not that good) query validation. The outcome?"}),"\n",(0,n.jsxs)(t.p,{children:["While every query you write in Query Studio will work in Query Activity, it is not always true the other way round. For example, Query Studio won't let you use comments, parentheses in the first line of the ",(0,n.jsx)(t.a,{href:"/docs/sql/sfmc-sql-select",children:"SELECT"})," statement, ",(0,n.jsx)(t.a,{href:"/docs/sql/sfmc-sql-select#top-percent",children:"TOP PERCENT"}),", ",(0,n.jsx)(t.a,{href:"/docs/sql/sfmc-sql-conversion-functions#cast",children:"CAST"})," in ",(0,n.jsx)(t.a,{href:"/docs/sql/sfmc-sql-select",children:"SELECT"})," and more that are not a problem in Query Activity."]}),"\n",(0,n.jsx)(t.p,{children:"It also has very poor error messages making it hard to debug your queries properly. Sometimes it is helpful to copy the SQL to Query Activity and validate there to get a better response."}),"\n",(0,n.jsx)(t.p,{children:"Finally, while it creates a temporary Data Extension on execution, it is not helpful as a template for the final solution because all fields have a Text data type regardless of the real data."}),"\n",(0,n.jsx)(t.h4,{id:"the-sum-up",children:"The Sum Up"}),"\n",(0,n.jsx)(t.p,{children:"Despite some quirks, Query Studio is a huge timesaver and quality of life improvement. Useful for creating queries, debugging outcomes, and quick checks on Data Views. Free. A must-have for any SQL-enabled or learning-to-be-enabled team."}),"\n",(0,n.jsx)(o.z,{link:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FP3yFUAT",text:"AppExchange",newTab:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h3,{id:"deselect-segment",children:"DESelect Segment"}),"\n",(0,n.jsx)(r.Z,{img:m(),alt:"Screenshot of the DESelect Segment User Interface"}),"\n",(0,n.jsx)(t.p,{children:"Creator | Pricing"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["| -\nDESelect | ",(0,n.jsx)(t.a,{href:"https://deselect.com/pricing/",children:"Starts at $700/month"})]}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"the-good-1",children:"The Good"}),"\n",(0,n.jsx)(t.p,{children:'DESelect Segment is the golden standard for the middle ground between the very limited Filtered Data Extensions and yes-code SQL Queries. Actually, "middle ground" is not fair.'}),"\n",(0,n.jsx)(t.p,{children:"Over time, DESelect team polished it to cover nearly all use cases that were possible only with SQL in the past. It makes the app more of a no-code alternative to Query Activities then an enhanced Filtered Data Extensions."}),"\n",(0,n.jsx)(t.p,{children:"In a fully drag and drop experience, DESelect Segment can:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Join multiple data points (both Data Extensions and Data Views)"}),"\n",(0,n.jsx)(t.li,{children:"Create complex, multilevel filters (using dynamic dates, aggregates and checks against other Data Extensions)"}),"\n",(0,n.jsx)(t.li,{children:"Build final Data Extension on demand with selected or custom-created columns"}),"\n",(0,n.jsx)(t.li,{children:"Deduplicate the data using specified logic"}),"\n",(0,n.jsx)(t.li,{children:"Preview the outcomes to validate the configuration"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"And it doesn't stop there. There are features not available in the out-of-the-box SFMC experience that lets you:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Create Picklists to mitigate typo issues when working with set lists of values"}),"\n",(0,n.jsx)(t.li,{children:"Build Data Sets that works as templated multi-table relationships for quick drag and drop"}),"\n",(0,n.jsx)(t.li,{children:"Share segmentation templates across Business Units to speed up rolling solutions"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"While the features sound great, true magic happens when you use them together. Why? Because they allow you to create your segment in one place, start to finish."}),"\n",(0,n.jsx)(t.p,{children:"The out-of-the-box path for query segmentation is:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Write and test segmentation query in Query Studio (with Contact Builder in another tab to check the values)"}),"\n",(0,n.jsx)(t.li,{children:"Manually create Data Extension that has all needed columns in correct data types and lengths in Contact Builder"}),"\n",(0,n.jsx)(t.li,{children:"Fix it in Email Studio because Content Builder is bugged around CustomerKey and default Current Date"}),"\n",(0,n.jsx)(t.li,{children:"Copy the query to Query Activity in Automation Studio"}),"\n",(0,n.jsx)(t.li,{children:"[Optionally] Create Automation"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"DESelect Segment can do all of it in a single, streamlined process using guided creator. Faster, simpler and less intimidating to beginners. Available right in the Marketing Cloud main menu."}),"\n",(0,n.jsx)(t.p,{children:"Is it perfect then?"}),"\n",(0,n.jsx)(t.h4,{id:"the-bad-1",children:"The Bad"}),"\n",(0,n.jsx)(t.p,{children:"Well, there are two issues:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"It's not free. But it is nicely priced for the power you get. It's up to you whether you want to invest in SQL competencies or a no-code solution that can do the same, by everyone, faster."}),"\n",(0,n.jsx)(t.li,{children:"It's complex. Sure, it's a clean drag-and-drop interface, but because of all the available features, it has some learning curve (and training offered by DESelect) to leverage its full potential."}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"the-sum-up-1",children:"The Sum Up"}),"\n",(0,n.jsx)(t.p,{children:"To fully leverage Salesforce Marketing Cloud, you need a robust segmentation solution. Filtered Data Extensions ain't it. It leaves you with SQL Query Activity and AppExchange."}),"\n",(0,n.jsxs)(t.p,{children:["While I'm a big fan of ",(0,n.jsx)(t.a,{href:"../sql/sfmc-sql-basics.mdx/",children:"SQL"}),", I know it's not a tool for everyone. The code-based solutions always make scaling the marketing team much harder. DESelect Segment is currently the best option to solve that problem, and - with ongoing updates - it keeps getting better."]}),"\n",(0,n.jsx)(o.V,{linkLeft:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000G0yE1UAJ",textLeft:"AppExchange",newTabLeft:"true",linkRight:"https://deselect.com/segment/",textRight:"Website",newTabRight:"true"}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h3,{id:"activation-studio",children:"Activation Studio"}),"\n",(0,n.jsx)(r.Z,{img:f(),alt:"Screenshot of the Activiation Studio User Interface"}),"\n",(0,n.jsx)(t.p,{children:"Creator | Pricing"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["| -\nHarvest Tech Labs | ",(0,n.jsx)(t.a,{href:"https://activation-studio.com/pricing/",children:"Starts at \u20ac350/month"})]}),"\n"]}),"\n",(0,n.jsx)(t.h4,{id:"the-good-2",children:"The Good"}),"\n",(0,n.jsx)(t.p,{children:"Activation Studio is a new player in the SFMC drag & drop segmentation game. Let's check what are the unique selling points that make it stand out:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Different target"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Activation Studio is not targeting power users but digital marketers that need an effortless but potent way of creating segments. You won't be able to leverage the full power of SQL in a drag-and-drop interface here. You also won't be able to join all Data Extensions available in your Marketing Cloud."}),"\n",(0,n.jsx)(t.p,{children:"Instead, you can leverage the Attribute Groups built in the Contact Builder Data Designer. While it limits what you can do, it also makes building segments a breeze, as all relationships are already defined."}),"\n",(0,n.jsx)(t.p,{children:"It also lets you quickly create the final Data Extension and leverage it as an Entry to the Journey. Och, and it provides you with engagement benchmarks and actual performance."}),"\n",(0,n.jsx)(t.p,{children:"Not a jack-of-all-trades, but a purpose build solution."}),"\n",(0,n.jsxs)(t.ol,{start:"2",children:["\n",(0,n.jsx)(t.li,{children:"More than just segmentation"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"While segmentation is the core of Activation Studio, there are more features (to be made) available. Lead Scoring and Behavioral data from the web are options that significantly increase the tool's power. Both are built with effortless usage by marketers in mind."}),"\n",(0,n.jsxs)(t.ol,{start:"3",children:["\n",(0,n.jsx)(t.li,{children:"Down-to-earth pricing"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Activation Studio segmentation is already significantly cheaper than other options, and additional features further improve the price-to-value ratio."}),"\n",(0,n.jsx)(t.h4,{id:"the-bad-2",children:"The Bad"}),"\n",(0,n.jsx)(t.p,{children:"It's a new product, and you can still see its infancy. While fully operational, some relatively basic features (like folders) are missing."}),"\n",(0,n.jsx)(t.p,{children:"However, the development pipeline is full of features, and many improvements will be delivered over the coming months improving the value proposition (and making me rewrite this mini-review)."}),"\n",(0,n.jsx)(t.h4,{id:"the-sum-up-2",children:"The Sum Up"}),"\n",(0,n.jsx)(t.p,{children:"Activation Studio fills a niche as a segmentation more potent than the Filtered Data Extensions and more effortless than the DESelect Segment (while sacrificing some of its power)."}),"\n",(0,n.jsx)(t.p,{children:"Especially with Scoring and Interaction-focused add-ons, it will be an excellent suite of solutions targeted at smaller Marketing Cloud users that would benefit from a streamlined tool dedicated to non-technical marketers."}),"\n",(0,n.jsx)(o.V,{linkLeft:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3u00000PurpQEAR",textLeft:"AppExchange",newTabLeft:"true",linkRight:"https://activation-studio.com/drag-and-drop-segmentation-salesforce-marketing-cloud/",textRight:"Website",newTabRight:"true"})]})}function S(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(v,{...e})}):v(e)}},7271:(e,t,i)=>{"use strict";i.d(t,{V:()=>a,z:()=>s});i(7294);var n=i(5893);const s=e=>{let{link:t,text:i,newTab:s=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:s?"_blank":"_self",children:i})})},a=e=>{let{linkLeft:t,textLeft:i,newTabLeft:s=!1,linkRight:a,textRight:o,newTabRight:r=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsxs)("div",{class:"col col--12",children:[(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:s?"_blank":"_self",children:i}),(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:a,target:r?"_blank":"_self",children:o})]})})}},1872:(e,t,i)=>{"use strict";i.d(t,{m:()=>a});i(7294);const n="leadText_qzwo";var s=i(5893);const a=e=>{let{content:t}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:n,children:t})})}}}]); \ No newline at end of file diff --git a/assets/js/c8a2287d.feb5464a.js b/assets/js/c8a2287d.feb5464a.js deleted file mode 100644 index c399aeb39..000000000 --- a/assets/js/c8a2287d.feb5464a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[3786],{8004:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png 640w,"+a.p+"assets/ideal-img/article-image-appexchange-activation-studio.dc74313.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png",width:640,height:320},{path:a.p+"assets/ideal-img/article-image-appexchange-activation-studio.dc74313.1030.png",width:1030,height:515}],src:a.p+"assets/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-appexchange-activation-studio.7592ef0.640.png"},placeholder:void 0,width:640,height:320},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnUlEQVQImR2MsU4DMRAF/f8fQo8iQZUUKahAQkpFkwoCEdwpttd7ttf2oPhJU73RuIfdC6fPGx/fAe8jIoKqklKaRBFijLjHw4lLgfOSuS5/MAb3jTFQ3SilUkrB7Y/v89hU+FmumBlalN77FL4uv4gk3NP+lWYV7wPNGtky67ZO8U7OlVor7vnwxujGLXjWsNJbZ3SwZqSks+qD8A/HKL6rlvET9AAAAABJRU5ErkJggg=="}},754:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png 640w,"+a.p+"assets/ideal-img/article-image-appexchange-deselect-segment.195eb32.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png",width:640,height:345},{path:a.p+"assets/ideal-img/article-image-appexchange-deselect-segment.195eb32.1030.png",width:1030,height:555}],src:a.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-appexchange-deselect-segment.d799e54.640.png"},placeholder:void 0,width:640,height:345},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiklEQVQImUXNyQrCMBgA4bz/w3kRvIpY0VrULLVN/iUjLuBh+I4T4mFDno4Mw47HtEfSBSkjNl/RMlLzlTxsCbfzgWc1Slko84o6iPVfjnbQ552wxgu9Q8mJlCKtVkQa0tpXVWoaCXE6UUVZlhUzw8w/qhrujgO2RMKaJtwNk4Zpo7v+M+G9q3nkBe7mwb5Cw07tAAAAAElFTkSuQmCC"}},6247:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png 640w,"+a.p+"assets/ideal-img/article-image-appexchange-flowchart.58f3137.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png",width:640,height:560},{path:a.p+"assets/ideal-img/article-image-appexchange-flowchart.58f3137.1030.png",width:1030,height:901}],src:a.p+"assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-appexchange-flowchart.63b92d6.640.png"},placeholder:void 0,width:640,height:560},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAACXBIWXMAAAsTAAALEwEAmpwYAAABBElEQVQYlW2QTU/CQABE97f7OzzoQWOiJ6M3oyJI0BiEaOVDYaWpUGi3tLtsgaX0mRgTDzLJXN+8jHgYaPYuxrgtOzOaJIxnGqHikGH3CbeIWM88nJnikg659LGtNtaVKOMQLhtj5R1WjciGVcx0gPbrmE6ftFr75ZYImwSo/g02/sQENbKmR3x6+U9BLNMJmayTJwE2eGQZByzkM06HrNQH+WCEabURdv5F1KtglY+WdbJIomQDE/bQQQPdeiW9vkVszAQX3GPjIen7FYuwj/YrZI0m8dn533S388bJ0SFWz1mZiHWuWduYwlo26Zxyu6UsCsSL12X/4Bi3KXb+WJblT78B62dP3QPzu1MAAAAASUVORK5CYII="}},7274:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png 640w,"+a.p+"assets/ideal-img/article-image-appexchange-query-studio.95520e4.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png",width:640,height:270},{path:a.p+"assets/ideal-img/article-image-appexchange-query-studio.95520e4.1030.png",width:1030,height:435}],src:a.p+"assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-appexchange-query-studio.5c0c958.640.png"},placeholder:void 0,width:640,height:270},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhElEQVQImR3D3QqCMACA0b3/W3Ud0U2QQTh/5+bSTd2PF8oXdeCI+9tQ9hOV9nSf8N/aFakdl4fiWrQUtUEMxiLLCq0N53lwHgc/KQZk0yObATVoRN0ZZNVTNwo7OWa3smyR2S00ynJ7Ku4vjRi0Zc+JcRwxxpBTIueM954YI/ueCWHjC5iplaeqoH8xAAAAAElFTkSuQmCC"}},8570:(e,t,a)=>{e.exports={src:{srcSet:a.p+"assets/ideal-img/article-image-appexchange-segmentation.25cd1a0.640.png 640w,"+a.p+"assets/ideal-img/article-image-appexchange-segmentation.161bd96.1030.png 1030w",images:[{path:a.p+"assets/ideal-img/article-image-appexchange-segmentation.25cd1a0.640.png",width:640,height:514},{path:a.p+"assets/ideal-img/article-image-appexchange-segmentation.161bd96.1030.png",width:1030,height:828}],src:a.p+"assets/ideal-img/article-image-appexchange-segmentation.25cd1a0.640.png",toString:function(){return a.p+"assets/ideal-img/article-image-appexchange-segmentation.25cd1a0.640.png"},placeholder:void 0,width:640,height:514},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA8ElEQVQYlUWNbUvCYBSG98v9B30oCIKoQLEhMe3FIX1oa34QZ0FFPdm+9CLq0OkGtpy2tiueZ4X3gXM4h+vct5bnOVL/s1g2+8CPGE8XaAWUqePPMiDqnRC0dJKRr25fScr8M0WTn7Kkol4bcViif1Qi7lubBChAqcWjYHbWZHl5wNrZZ+ldsPIflIVkVDRhyKhxztOxwaBeZ37X4O22zuTegNVEwQp8tzq0d3XsPQPDFJx2PbqOgXtVZfhsF9GydWom5S2dSlOw03ph2/QoW4JKrYrrNIDsLzpNGYcJNx8x1yLAFlPc15hhtIbsWzn+Asv4IlF02JDyAAAAAElFTkSuQmCC"}},7271:(e,t,a)=>{"use strict";a.d(t,{V:()=>o,z:()=>n});var i=a(7294);const n=e=>{let{link:t,text:a,newTab:n=!1}=e;return i.createElement(i.Fragment,null,i.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:n?"_blank":"_self"},a))},o=e=>{let{linkLeft:t,textLeft:a,newTabLeft:n=!1,linkRight:o,textRight:l,newTabRight:s=!1}=e;return i.createElement(i.Fragment,null,i.createElement("div",{class:"col col--12"},i.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:n?"_blank":"_self"},a),i.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:s?"_blank":"_self"},l)))}},1872:(e,t,a)=>{"use strict";a.d(t,{m:()=>o});var i=a(7294);const n="leadText_qzwo",o=e=>{let{content:t}=e;return i.createElement(i.Fragment,null,i.createElement("p",{id:n},t))}},1113:(e,t,a)=>{"use strict";a.r(t),a.d(t,{assets:()=>b,contentTitle:()=>A,default:()=>E,frontMatter:()=>y,metadata:()=>w,toc:()=>v});var i=a(7462),n=(a(7294),a(4137)),o=a(1872),l=a(7271),s=a(5944),r=a(6247),u=a.n(r),p=a(8570),h=a.n(p),d=a(7274),g=a.n(d),c=a(754),m=a.n(c),k=a(8004),f=a.n(k);const y={id:"sfmc-appexchange-solutions",title:"SFMC AppExchange Solutions",sidebar_label:"AppExchange Solutions",description:"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.",image:"img/og/og-image-sfmc-appexchange.png",tags:["Marketing Cloud","App","AppExchange"]},A=void 0,w={unversionedId:"config/sfmc-appexchange-solutions",id:"config/sfmc-appexchange-solutions",title:"SFMC AppExchange Solutions",description:"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.",source:"@site/docs/config/sfmc-appexchange-solutions.mdx",sourceDirName:"config",slug:"/config/sfmc-appexchange-solutions",permalink:"/docs/config/sfmc-appexchange-solutions",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-appexchange-solutions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"App",permalink:"/docs/tags/app"},{label:"AppExchange",permalink:"/docs/tags/app-exchange"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"sfmc-appexchange-solutions",title:"SFMC AppExchange Solutions",sidebar_label:"AppExchange Solutions",description:"Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.",image:"img/og/og-image-sfmc-appexchange.png",tags:["Marketing Cloud","App","AppExchange"]},sidebar:"docs",previous:{title:"Behavioral Triggers",permalink:"/docs/config/sfmc-behavioral-triggers"},next:{title:"Features On Demand",permalink:"/docs/config/sfmc-features-on-demand"}},b={},v=[{value:"When is AppExchange worth it?",id:"when-is-appexchange-worth-it",level:2},{value:"1. Define feature requirements",id:"1-define-feature-requirements",level:3},{value:"2. Validate out-of-the-box options",id:"2-validate-out-of-the-box-options",level:3},{value:"3. Free AppExchange Solutions",id:"3-free-appexchange-solutions",level:3},{value:"4. Custom Solution",id:"4-custom-solution",level:3},{value:"5. Paid AppExchange Solutions",id:"5-paid-appexchange-solutions",level:3},{value:"SFMC Segmentation Solutions",id:"sfmc-segmentation-solutions",level:2},{value:"Query Studio",id:"query-studio",level:3},{value:"The Good",id:"the-good",level:4},{value:"The Bad",id:"the-bad",level:4},{value:"The Sum Up",id:"the-sum-up",level:4},{value:"DESelect Segment",id:"deselect-segment",level:3},{value:"The Good",id:"the-good-1",level:4},{value:"The Bad",id:"the-bad-1",level:4},{value:"The Sum Up",id:"the-sum-up-1",level:4},{value:"Activation Studio",id:"activation-studio",level:3},{value:"The Good",id:"the-good-2",level:4},{value:"The Bad",id:"the-bad-2",level:4},{value:"The Sum Up",id:"the-sum-up-2",level:4}],x={toc:v},S="wrapper";function E(e){let{components:t,...a}=e;return(0,n.kt)(S,(0,i.Z)({},x,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(o.m,{content:"Fill the feature gaps with plug-and-play apps. Solution highlights from Salesforce Marketing Cloud's AppExchange.",mdxType:"LeadText"}),(0,n.kt)("p",null,"AppExchange is an app store for various Clouds within Salesforce Customer 360 platform. You will find in-house solutions from Salesforce Labs and 3rd party. Free and paid. Good and bad. But all - validated by ",(0,n.kt)("a",{parentName:"p",href:"https://developer.salesforce.com/docs/atlas.en-us.packagingGuide.meta/packagingGuide/security_review_guidelines.htm"},"Salesforce Security Review"),"."),(0,n.kt)("p",null,"From over 4000 solutions available there, only around 60 are for the ",(0,n.kt)("a",{parentName:"p",href:"https://appexchange.salesforce.com/category/marketing"},"Saleforce Marketing Cloud"),". Here, I will focus only on those I had experience with to provide some value over the standard AppExchange descriptions."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"This document is a living thing. New solutions keep popping up, and old ones sometimes disappear or are recreated. I try to keep it up-to-date, but your help with this task will be appreciated.")),(0,n.kt)("h2",{id:"when-is-appexchange-worth-it"},"When is AppExchange worth it?"),(0,n.kt)("p",null,"Before we jump into specific solutions available in the store, let's talk about whether you should consider going through AppExchange offerings. This question is especially relevant with how feature-packed and customizable the Marketing Cloud is. And not that easy to answer when you assess all decision drivers."),(0,n.kt)("h3",{id:"1-define-feature-requirements"},"1. Define feature requirements"),(0,n.kt)("p",null,"Ok, you want a feature and are eager to find a solution to deliver it. Now stop. Before opening the AppExchange repository, you should dive deep into the exact requirements the solution has to fulfil."),(0,n.kt)("p",null,"Key things to consider:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"What it needs to do")," - what is the minimum valuable outcome, and what is an ideal one?"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"How it needs to do it")," - does it have to be a user-friendly no-code solution, or is a developer-oriented approach acceptable?"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Where it needs to do it")," - does it have to be done within the SFMC, or can it be external?"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Who needs to do it")," - do you have the resources to implement it, or should it be outsourced?"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"What is the budget")," - does it have to be free, cheap, or you can pay for good value?")),(0,n.kt)("p",null,"Those requirements should be aligned with the final users and be clear enough to serve as a guardrail for making an informed decision."),(0,n.kt)("h3",{id:"2-validate-out-of-the-box-options"},"2. Validate out-of-the-box options"),(0,n.kt)("p",null,"Once you have requirements, it's time to check what already is within your Marketing Cloud license. Over the years, Salesforce baked in many solutions, so you might find something already there, just waiting to be used."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Not all solutions are available by default - some require a support ticket to be enabled. Check out my ",(0,n.kt)("a",{parentName:"p",href:"/docs/config/sfmc-features-on-demand"},"list of features on-demand")," to see if there is anything hidden that might fulfil your requirements.")),(0,n.kt)("p",null,"However, even if your requirement has an out-of-the-box solution, it doesn't always mean the end of the work. You need to check whether it is good and easy enough:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Good Enough"),": Just because there is something, it might not meet all the requirements you gathered in the first step. Maybe it is too basic for your needs or doesn't have access to all data you want to leverage. It is where you start seeing the benefits of the prework."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Easy Enough"),": Even if the solution is good enough, it might not be easy enough. Always assess the solution by considering the knowledge and skills of the end users - not yours (unless you will be the only end user, of course).")),(0,n.kt)("p",null,"If the out-of-the-box solution checks both boxes - you hit the jackpot and can leverage what is already there."),(0,n.kt)("p",null,"Else, it's time to look somewhere... else."),(0,n.kt)("h3",{id:"3-free-appexchange-solutions"},"3. Free AppExchange Solutions"),(0,n.kt)("p",null,"Time to check whether there is any free solution available on demand. You can do it by going to ",(0,n.kt)("a",{parentName:"p",href:"https://appexchange.salesforce.com/category/marketing"},"marketing AppExchange")," and applying filters to get Free solutions dedicated to Marketing Cloud."),(0,n.kt)("p",null,"To manage your expectations: for Salesforce Marketing Cloud, the list won't be long. And even then, you have to make sure the app is genuinely offering a meaningful free tier. Expect free Salesforce Labs solutions (like ",(0,n.kt)("a",{parentName:"p",href:"#query-studio"},"Query Studio")," covered below) and little pearls made by 3rd parties - like Content Builder asset finder ",(0,n.kt)("a",{parentName:"p",href:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3u00000PFaZrEAL"},"DESelect Search"),"."),(0,n.kt)("p",null,"If you are lucky enough to find something free in AppExchange related to your requirements, check whether it is good enough. Just as you did in the ",(0,n.kt)("a",{parentName:"p",href:"#2-validate-out-of-the-box-options"},"previous step"),"."),(0,n.kt)("p",null,"No luck? Before checking the paid filter in AppExchange, there is one more approach to consider."),(0,n.kt)("h3",{id:"4-custom-solution"},"4. Custom Solution"),(0,n.kt)("p",null,"A decade ago, building a custom solution for every requirement was all the rage. Since then, the platforms and their 3rd party ecosystems have grown significantly, making this approach much less tempting. Why?"),(0,n.kt)("p",null,"There are four things to consider:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Can you build a Custom solution?")," This can be done using in-house developers or outsourced to external specialists, but you need either skills or a budget."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Will it be good enough?")," If you have the means, building a custom is easy. But do you have ",(0,n.kt)("em",{parentName:"li"},"enough")," skills or budget to make a good solution that will be user-friendly, optimized, polished and matching all your requirements?"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Will it be cheaper than AppExchange?")," Sure, with enough time and money, you can build something good enough. But will it be more affordable than a similar solution available in the paid section of AppExchange?"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Will you maintain it?")," Even if you answered yes to the previous three points, you must consider maintenance. In most cases, building a custom is just the beginning. Requirements change, new needs happen, platforms get updated and require refactor. With AppExchange solutions, it ",(0,n.kt)("em",{parentName:"li"},"should")," be much less of a worry in the long term.")),(0,n.kt)("p",null,"While the list might look like a hard pass for custom solutions, there is a place for them. Especially on the ends of the spectrum. Simple, but lifesaving micro solutions (",(0,n.kt)("a",{parentName:"p",href:"/docs/ssjs/snippets/sfmc-cloud-page-apps"},"Cloud Page Apps"),", ",(0,n.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource"},"Code Resources"),") or custom behemoths aligned to all non-negotiable quirks and features of your internal processes."),(0,n.kt)("p",null,'However, if you hit a hard "no" to any of the above questions, it\'s time to visit the AppExchange again.'),(0,n.kt)("h3",{id:"5-paid-appexchange-solutions"},"5. Paid AppExchange Solutions"),(0,n.kt)("p",null,"Here we are. After defining the requirements, we haven't found anything worthy among the out-of-the-box solutions, the land of the free AppExchange was barren, and the custom work didn't seem like the best choice. Paid AppExchange it is. But is it really?"),(0,n.kt)("p",null,"Assuming you found a paid solution, you still need to assess whether it will be good enough. The positive part here? If you see only small pieces missing from the ideal, you might talk with the solution creators and discuss prioritization of the future changes."),(0,n.kt)("p",null,"However, you also need to keep in mind the budget. Not only the subscription cost but also implementation, training, and enhancements. After considering all that, will you still see a return on investment? If yes - you are good to go."),(0,n.kt)("p",null,"If not, it's time to update your requirements - the list of needed features or the budget size - and ",(0,n.kt)("a",{parentName:"p",href:"#2-validate-out-of-the-box-options"},"start again"),"."),(0,n.kt)("hr",null),(0,n.kt)("p",null,"Sounds complex? Would you rather have a visual guide? Got you covered:"),(0,n.kt)(s.Z,{img:u(),alt:"Flowchart with visual representation of the When is AppExchange Worth It? analysis process",mdxType:"Image"}),(0,n.kt)("p",null,"Looks complex? Would you rather have an example-based walkthrough? Got you covered as well in the next chapter:"),(0,n.kt)("h2",{id:"sfmc-segmentation-solutions"},"SFMC Segmentation Solutions"),(0,n.kt)("p",null,"Finding the right approach to database segmentation is one of the critical elements of successful marketing automation. In Salesforce Marketing Cloud, it's a complex topic because (spoiler) there is no perfect - powerful, simple and free - solution. You need to choose your priorities."),(0,n.kt)("p",null,"Looks like excellent use case to test the ",(0,n.kt)("a",{parentName:"p",href:"#when-is-appexchange-worth-it"},'"Is AppExchange worth it?" process')," on a real-life scenario, so let's check how it works."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"1. Feature Requirements")),(0,n.kt)("p",null,"Let me paraphrase the user story constraints I encounter on nearly every implementation:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"As a company, I want to have segmentation based on our comprehensive data so that we can send the right communication to the right persons at the right time."),(0,n.kt)("li",{parentName:"ul"},"As a marketer, I want to have a drag and drop segmentation so that it is fast and easy to deliver correctly built segments.")),(0,n.kt)("p",null,"Let's split it into crucial things to consider:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"What it needs to do")," - Segment the database using multiple data points."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"How it needs to do it")," - Simple drag and drop solution."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Where it needs to do it")," - Within Marketing Cloud."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Who needs to do it")," - Undecided, but no internal resources for implementation."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"What is the budget")," - No budget.")),(0,n.kt)("p",null,"Does it sound familiar? ;)"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"2. Out-of-the-box options")),(0,n.kt)("p",null,"There are two ways to segment contacts in Marketing Cloud core. Filtered Data Extensions and SQL Query Activities. How do they stack against our requirements?"),(0,n.kt)("p",null,"Filtered Data Extensions are free, require nearly no implementation (apart from setting Data Relationships), work directly in SFMC, and are a simple drag and drop solution, but... They don't support segmenting on more than two Data Extensions. Not good enough."),(0,n.kt)("p",null,"SQL Query Activities are free, require no implementation, work directly in SFMC and allow segmenting on multiple data points, but... demand ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics"},"SQL")," skills. It means training requirements, slower segmentation and a higher risk of errors by inexperienced users. Not easy enough."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"3. Free AppExchange")),(0,n.kt)("p",null,"Filtering the AppExchange for free solutions will show only one related to segmentation - ",(0,n.kt)("a",{parentName:"p",href:"#query-studio"},"Query Studio"),". While it's a great tool, it's still a SQL-based solution. It's also not an end-to-end tool for segmentation purposes. Not good enough."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"4. Custom Solution")),(0,n.kt)("p",null,"There are two base options for the drag and drop custom solution approach."),(0,n.kt)("p",null,"First - generator that modifies predefined segments. It's relatively simple to build, but it allows you to make only minor adaptations of the templated query, mostly on filtering (",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},"SQL WHERE"),". Very limited and requires hard coding for each new segment template. Not good enough and hard to maintain."),(0,n.kt)("p",null,"Second - fully-fledged visual wrapper over SQL queries. Full power with a drag and drop interface. Sounds like a dream? Correct. Such solution requires a lot of work and testing. The cost would skyrocket well above (spoiler alert) what is available in the paid section of AppExchange. Not worth it."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"5. Paid AppExchange")),(0,n.kt)("p",null,"Finally, we get to the last stop. After a quick search, we can find two solutions: tried and tested ",(0,n.kt)("a",{parentName:"p",href:"#deselect-segment"},"DESelect Segment")," and the new contender ",(0,n.kt)("a",{parentName:"p",href:"#activation-studio"},"Activation Studio"),'. More details on them in a moment, but from the perspective of this exercise - both are subscription based, while one of the key things to consider was the beloved "no budget".'),(0,n.kt)("p",null,"Therefore we get to the update requirements step, where the company needs to prioritize between powerful, simple and free."),(0,n.kt)(s.Z,{img:h(),alt:"Triangle with three corners - FREE, POWERFUL and SIMPLE - and three solutions: FREE and POWERFUL SQL Query Activity, FREE and SIMPLE Filtered Data Extensions, POWERFUL and SIMPLE DESelect Segment. ",mdxType:"Image"}),(0,n.kt)("p",null,"I hope it is now easier to find when AppExchange can solve Marketing Cloud requirements. With that, let's jump to the segmentation solutions available there."),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"query-studio"},"Query Studio"),(0,n.kt)(s.Z,{img:g(),alt:"Screenshot of the Query Studio User Interface",mdxType:"Image"}),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Creator"),(0,n.kt)("th",{parentName:"tr",align:null},"Pricing"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Salesforce Labs"),(0,n.kt)("td",{parentName:"tr",align:null},"Free")))),(0,n.kt)("h4",{id:"the-good"},"The Good"),(0,n.kt)("p",null,"Query Studio solves two problems:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"SFMC SQL Query Testing"),(0,n.kt)("li",{parentName:"ol"},"SFMC SQL Data Exploratory Analysis")),(0,n.kt)("p",null,"Why did I call it problems?"),(0,n.kt)("p",null,"Because the only out-of-the-box solution for working with SQL in Marketing Cloud is Query Activity in Automation Studio. It allows you to validate whether your query is valid, but checking if the outcomes are as expected is a pain."),(0,n.kt)("p",null,"You can see the results only after manually creating a data extension with the correct columns (names, data types, lengths) and executing the Query Activity. Outcomes are suboptimal and need to make some changes? The Data Extension needs a rework."),(0,n.kt)("p",null,"It sometimes happens when you are writing and testing a new query. It happens all the time when you are doing exploratory analysis."),(0,n.kt)("p",null,"Query Studio automatically builds a temporary Data Extension to store the query's output on every execution. It also displays a subset of outcomes below your SQL so you can quickly check whether it aligns with your expectations."),(0,n.kt)("p",null,"And that's not all - Query Studio lets you save your work as ready-to-use Query Activities. Even in a way that is impossible through the Automation Studio (like query targeting Auto-Suppression List)!"),(0,n.kt)("h4",{id:"the-bad"},"The Bad"),(0,n.kt)("p",null,"However, Query Studio is not perfect. The main issue is that it has implemented a different (and not that good) query validation. The outcome?"),(0,n.kt)("p",null,"While every query you write in Query Studio will work in Query Activity, it is not always true the other way round. For example, Query Studio won't let you use comments, parentheses in the first line of the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},"SELECT")," statement, ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#top-percent"},"TOP PERCENT"),", ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-conversion-functions#cast"},"CAST")," in ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},"SELECT")," and more that are not a problem in Query Activity."),(0,n.kt)("p",null,"It also has very poor error messages making it hard to debug your queries properly. Sometimes it is helpful to copy the SQL to Query Activity and validate there to get a better response."),(0,n.kt)("p",null,"Finally, while it creates a temporary Data Extension on execution, it is not helpful as a template for the final solution because all fields have a Text data type regardless of the real data."),(0,n.kt)("h4",{id:"the-sum-up"},"The Sum Up"),(0,n.kt)("p",null,"Despite some quirks, Query Studio is a huge timesaver and quality of life improvement. Useful for creating queries, debugging outcomes, and quick checks on Data Views. Free. A must-have for any SQL-enabled or learning-to-be-enabled team."),(0,n.kt)(l.z,{link:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FP3yFUAT",text:"AppExchange",newTab:"true",mdxType:"Button"}),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"deselect-segment"},"DESelect Segment"),(0,n.kt)(s.Z,{img:m(),alt:"Screenshot of the DESelect Segment User Interface",mdxType:"Image"}),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Creator"),(0,n.kt)("th",{parentName:"tr",align:null},"Pricing"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"DESelect"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://deselect.com/pricing/"},"Starts at $700/month"))))),(0,n.kt)("h4",{id:"the-good-1"},"The Good"),(0,n.kt)("p",null,'DESelect Segment is the golden standard for the middle ground between the very limited Filtered Data Extensions and yes-code SQL Queries. Actually, "middle ground" is not fair.'),(0,n.kt)("p",null,"Over time, DESelect team polished it to cover nearly all use cases that were possible only with SQL in the past. It makes the app more of a no-code alternative to Query Activities then an enhanced Filtered Data Extensions."),(0,n.kt)("p",null,"In a fully drag and drop experience, DESelect Segment can:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Join multiple data points (both Data Extensions and Data Views)"),(0,n.kt)("li",{parentName:"ul"},"Create complex, multilevel filters (using dynamic dates, aggregates and checks against other Data Extensions)"),(0,n.kt)("li",{parentName:"ul"},"Build final Data Extension on demand with selected or custom-created columns"),(0,n.kt)("li",{parentName:"ul"},"Deduplicate the data using specified logic"),(0,n.kt)("li",{parentName:"ul"},"Preview the outcomes to validate the configuration")),(0,n.kt)("p",null,"And it doesn't stop there. There are features not available in the out-of-the-box SFMC experience that lets you:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Create Picklists to mitigate typo issues when working with set lists of values"),(0,n.kt)("li",{parentName:"ul"},"Build Data Sets that works as templated multi-table relationships for quick drag and drop"),(0,n.kt)("li",{parentName:"ul"},"Share segmentation templates across Business Units to speed up rolling solutions")),(0,n.kt)("p",null,"While the features sound great, true magic happens when you use them together. Why? Because they allow you to create your segment in one place, start to finish."),(0,n.kt)("p",null,"The out-of-the-box path for query segmentation is:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Write and test segmentation query in Query Studio (with Contact Builder in another tab to check the values)"),(0,n.kt)("li",{parentName:"ol"},"Manually create Data Extension that has all needed columns in correct data types and lengths in Contact Builder"),(0,n.kt)("li",{parentName:"ol"},"Fix it in Email Studio because Content Builder is bugged around CustomerKey and default Current Date"),(0,n.kt)("li",{parentName:"ol"},"Copy the query to Query Activity in Automation Studio"),(0,n.kt)("li",{parentName:"ol"},"[Optionally]"," Create Automation")),(0,n.kt)("p",null,"DESelect Segment can do all of it in a single, streamlined process using guided creator. Faster, simpler and less intimidating to beginners. Available right in the Marketing Cloud main menu."),(0,n.kt)("p",null,"Is it perfect then?"),(0,n.kt)("h4",{id:"the-bad-1"},"The Bad"),(0,n.kt)("p",null,"Well, there are two issues:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"It's not free. But it is nicely priced for the power you get. It's up to you whether you want to invest in SQL competencies or a no-code solution that can do the same, by everyone, faster."),(0,n.kt)("li",{parentName:"ol"},"It's complex. Sure, it's a clean drag-and-drop interface, but because of all the available features, it has some learning curve (and training offered by DESelect) to leverage its full potential.")),(0,n.kt)("h4",{id:"the-sum-up-1"},"The Sum Up"),(0,n.kt)("p",null,"To fully leverage Salesforce Marketing Cloud, you need a robust segmentation solution. Filtered Data Extensions ain't it. It leaves you with SQL Query Activity and AppExchange."),(0,n.kt)("p",null,"While I'm a big fan of ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics/"},"SQL"),", I know it's not a tool for everyone. The code-based solutions always make scaling the marketing team much harder. DESelect Segment is currently the best option to solve that problem, and - with ongoing updates - it keeps getting better."),(0,n.kt)(l.V,{linkLeft:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000G0yE1UAJ",textLeft:"AppExchange",newTabLeft:"true",linkRight:"https://deselect.com/segment/",textRight:"Website",newTabRight:"true",mdxType:"ButtonRow"}),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"activation-studio"},"Activation Studio"),(0,n.kt)(s.Z,{img:f(),alt:"Screenshot of the Activiation Studio User Interface",mdxType:"Image"}),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Creator"),(0,n.kt)("th",{parentName:"tr",align:null},"Pricing"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Harvest Tech Labs"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://activation-studio.com/pricing/"},"Starts at \u20ac350/month"))))),(0,n.kt)("h4",{id:"the-good-2"},"The Good"),(0,n.kt)("p",null,"Activation Studio is a new player in the SFMC drag & drop segmentation game. Let's check what are the unique selling points that make it stand out:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Different target")),(0,n.kt)("p",null,"Activation Studio is not targeting power users but digital marketers that need an effortless but potent way of creating segments. You won't be able to leverage the full power of SQL in a drag-and-drop interface here. You also won't be able to join all Data Extensions available in your Marketing Cloud."),(0,n.kt)("p",null,"Instead, you can leverage the Attribute Groups built in the Contact Builder Data Designer. While it limits what you can do, it also makes building segments a breeze, as all relationships are already defined."),(0,n.kt)("p",null,"It also lets you quickly create the final Data Extension and leverage it as an Entry to the Journey. Och, and it provides you with engagement benchmarks and actual performance."),(0,n.kt)("p",null,"Not a jack-of-all-trades, but a purpose build solution."),(0,n.kt)("ol",{start:2},(0,n.kt)("li",{parentName:"ol"},"More than just segmentation")),(0,n.kt)("p",null,"While segmentation is the core of Activation Studio, there are more features (to be made) available. Lead Scoring and Behavioral data from the web are options that significantly increase the tool's power. Both are built with effortless usage by marketers in mind."),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},"Down-to-earth pricing")),(0,n.kt)("p",null,"Activation Studio segmentation is already significantly cheaper than other options, and additional features further improve the price-to-value ratio."),(0,n.kt)("h4",{id:"the-bad-2"},"The Bad"),(0,n.kt)("p",null,"It's a new product, and you can still see its infancy. While fully operational, some relatively basic features (like folders) are missing."),(0,n.kt)("p",null,"However, the development pipeline is full of features, and many improvements will be delivered over the coming months improving the value proposition (and making me rewrite this mini-review)."),(0,n.kt)("h4",{id:"the-sum-up-2"},"The Sum Up"),(0,n.kt)("p",null,"Activation Studio fills a niche as a segmentation more potent than the Filtered Data Extensions and more effortless than the DESelect Segment (while sacrificing some of its power)."),(0,n.kt)("p",null,"Especially with Scoring and Interaction-focused add-ons, it will be an excellent suite of solutions targeted at smaller Marketing Cloud users that would benefit from a streamlined tool dedicated to non-technical marketers."),(0,n.kt)(l.V,{linkLeft:"https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3u00000PurpQEAR",textLeft:"AppExchange",newTabLeft:"true",linkRight:"https://activation-studio.com/drag-and-drop-segmentation-salesforce-marketing-cloud/",textRight:"Website",newTabRight:"true",mdxType:"ButtonRow"}))}E.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cb12d9b9.db528504.js b/assets/js/cb12d9b9.86429a06.js similarity index 67% rename from assets/js/cb12d9b9.db528504.js rename to assets/js/cb12d9b9.86429a06.js index 441e52082..80132d171 100644 --- a/assets/js/cb12d9b9.db528504.js +++ b/assets/js/cb12d9b9.86429a06.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7983],{8542:e=>{e.exports=JSON.parse('{"label":"Interaction Studio","permalink":"/docs/tags/interaction-studio","allTagsPath":"/docs/tags","count":5,"items":[{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7983],{8542:e=>{e.exports=JSON.parse('{"label":"Interaction Studio","permalink":"/docs/tags/interaction-studio","allTagsPath":"/docs/tags","count":6,"items":[{"id":"interaction-studio/mcp-catalog-architecture","title":"MCP Catalog Architecture","description":"Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.","permalink":"/docs/interaction-studio/mcp-catalog-architecture"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-context","title":"MCP Serverside Code Context","description":"Context is king. Also when writing MCP Template Serverside Code.","permalink":"/docs/interaction-studio/mcp-serverside-code-context"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/ce321ae3.110e20cb.js b/assets/js/ce321ae3.7e3d354d.js similarity index 98% rename from assets/js/ce321ae3.110e20cb.js rename to assets/js/ce321ae3.7e3d354d.js index 0ccfbfd3f..ac50a404f 100644 --- a/assets/js/ce321ae3.110e20cb.js +++ b/assets/js/ce321ae3.7e3d354d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1837],{2141:e=>{e.exports=JSON.parse('{"label":"Configuration","permalink":"/docs/tags/configuration","allTagsPath":"/docs/tags","count":8,"items":[{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1837],{2141:e=>{e.exports=JSON.parse('{"label":"Configuration","permalink":"/docs/tags/configuration","allTagsPath":"/docs/tags","count":8,"items":[{"id":"js/snippets/export-import-document-sfmc-roles","title":"Export, Import & Document SFMC Roles","description":"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.","permalink":"/docs/js/snippets/export-import-document-sfmc-roles"},{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"webinars/sfmc-webinar-cloud-page-apps","title":"SFMC Cloud Page Apps","description":"Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.","permalink":"/docs/webinars/sfmc-webinar-cloud-page-apps"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mcc-integration-patterns","title":"SFMC MCC Integration Patterns","description":"Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.","permalink":"/docs/config/sfmc-mcc-integration-patterns"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/d44a7d50.7eb973ab.js b/assets/js/d44a7d50.7eb973ab.js new file mode 100644 index 000000000..ac887f075 --- /dev/null +++ b/assets/js/d44a7d50.7eb973ab.js @@ -0,0 +1 @@ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4514],{9982:(e,i,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png 640w,"+s.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.f5cc312.1030.png 1030w",images:[{path:s.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png",width:640,height:1310},{path:s.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.f5cc312.1030.png",width:1030,height:2109}],src:s.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png",toString:function(){return s.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.ac0ef20.640.png"},placeholder:void 0,width:640,height:1310},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAUCAYAAAC07qxWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+ElEQVR4nHWRW08TURRGz1/2RY0xwQcT9MFojCFpgBQh4RKJEAwp1EpBegGLQEstvUgh0lI6TGemM1M6ndsybaGC1fV6Vr5vn73FcrrJeKwB+Jw3LJInJqmzFjXNxnUcDvM15GYHEZicZuT5S1wPJEVBviigXhZoNBU8QG5aaKaN2N+JshlaxG4p+HqZi3KWYjqOc1XFrlyA79NFuNIBdmUbvXKAWVol+H6OBw8fcfU1QX16jubePq1iCeG4LrYPejWDWojwaW2dV2MBlPPvSNlFtOg2emoP4Xtebxazcoj28zOFaIzkxBTOtYalVVAiUfTdFMI0DRTNoFX7gf4rjp0r0tncHsx2i3g3FuDJ02d4XjcXXMvCabVunv0/YjWfoLy/Tlsuo1dTGOksjdXQcKJ6uks9F8ao5pCLGxhHx6jhyD+qA1M8HnnRu0KXjiTRPj27J3UR1XyS8uEaZjaPtrXF/xDtyyzmeRwjk0OLRPuVf9V2EY6UwarF0BIp5A8fb8T+BriDCIdWmJ+ZxDZMPN0YEgbi0tIy4+MTuK7Tv1AuT3Mrdm+HPdFXMnjSDurpN+SjBczjE9Qv0eHE9dAKszOTOJaJYxvomSxqZGPwodtcMTs3z+s3bwcnvKUr3C0XwWCQ0dFRXNcdKA3DplS/pqJ2aJgORtvlNy8S4LejeQNmAAAAAElFTkSuQmCC"}},1596:(e,i,s)=>{"use strict";s.r(i),s.d(i,{assets:()=>u,contentTitle:()=>d,default:()=>b,frontMatter:()=>c,metadata:()=>h,toc:()=>g});var t=s(5893),n=s(1151),r=s(1872),a=(s(7271),s(5944)),o=s(9982),l=s.n(o);const c={id:"sfmc-sql-debugging-email-sends",title:"SFMC SQL Debugging Email Sends",sidebar_label:"Debugging Email Sends",description:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.",image:"img/og/og-image-sql-debugging-email-sends.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},d=void 0,h={id:"sql/snippets/sfmc-sql-debugging-email-sends",title:"SFMC SQL Debugging Email Sends",description:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.",source:"@site/docs/sql/snippets/sfmc-sql-debugging-email-sends.mdx",sourceDirName:"sql/snippets",slug:"/sql/snippets/sfmc-sql-debugging-email-sends",permalink:"/docs/sql/snippets/sfmc-sql-debugging-email-sends",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/snippets/sfmc-sql-debugging-email-sends.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Email",permalink:"/docs/tags/email"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Analytics",permalink:"/docs/tags/analytics"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1680552941,formattedLastUpdatedAt:"Apr 3, 2023",frontMatter:{id:"sfmc-sql-debugging-email-sends",title:"SFMC SQL Debugging Email Sends",sidebar_label:"Debugging Email Sends",description:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.",image:"img/og/og-image-sql-debugging-email-sends.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},sidebar:"snippets",previous:{title:"SFMC SQL Snippets",permalink:"/docs/category/sfmc-sql-snippets"},next:{title:"Debugging Value Length",permalink:"/docs/sql/snippets/sfmc-sql-debugging-value-length"}},u={},g=[{value:"Problem with straightforward Email Send analysis",id:"problem-with-straightforward-email-send-analysis",level:2},{value:"Solution",id:"solution",level:2},{value:"Options",id:"options",level:2},{value:"Change timeframe",id:"change-timeframe",level:3},{value:"Limit to a single subscriber",id:"limit-to-a-single-subscriber",level:3},{value:"Limit to a single domain",id:"limit-to-a-single-domain",level:3},{value:"Limit to a single email",id:"limit-to-a-single-email",level:3},{value:"Limit to a single Journey",id:"limit-to-a-single-journey",level:3},{value:"Limit to single engagement type",id:"limit-to-single-engagement-type",level:3},{value:"Email Send Debugging Step-by-Step",id:"email-send-debugging-step-by-step",level:2},{value:"1. Query System Data Views",id:"1-query-system-data-views",level:3},{value:"2. Check Send Log",id:"2-check-send-log",level:3},{value:"3. Check All Subscribers List",id:"3-check-all-subscribers-list",level:3},{value:"4. Check Personalised Email Preview",id:"4-check-personalised-email-preview",level:3},{value:"5. Check Suppressions and Exclusions",id:"5-check-suppressions-and-exclusions",level:3},{value:"6. Create Support Ticket",id:"6-create-support-ticket",level:3},{value:"Email Send Debugging Flowchart",id:"email-send-debugging-flowchart",level:3}];function m(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.m,{content:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with the Query Studio to the rescue."}),"\n",(0,t.jsx)(i.h2,{id:"problem-with-straightforward-email-send-analysis",children:"Problem with straightforward Email Send analysis"}),"\n",(0,t.jsx)(i.p,{children:"Deliverability issues, unfortunately, are a standard both during the Salesforce Marketing Cloud implementation phase as well as after the go-live."}),"\n",(0,t.jsx)(i.p,{children:"The test you sent to yourself during the Marketing Cloud implementation that never arrived in the inbox. The subscriber that asks where is his newsletter with the promo code."}),"\n",(0,t.jsx)(i.p,{children:"You can try debugging it with Journey Builder data or Reports, but in most cases, those solutions provide either not enough or way too much for the specific check you need to make."}),"\n",(0,t.jsx)(i.h2,{id:"solution",children:"Solution"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-sql",children:"SELECT\n s.SubscriberKey AS SubscriberKey\n , sub.EmailAddress AS EmailAddress\n , sub.Status AS SubscriptionStatus\n , j.JourneyName AS JourneyName\n , j.VersionNumber AS JourneyVersion\n , job.EmailName AS EmailName\n , s.EventDate AS SentDate\n , job.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\n , c.EventDate AS ClickDate\n , b.EventDate AS BounceDate\n , b.BounceCategory AS BounceCategory\n , b.BounceSubcategory AS BounceSubcategory\n , b.SMTPBounceReason AS BounceReason\n , u.EventDate AS UnsubscribeDate\nFROM _Sent AS s\n LEFT JOIN _Job AS job\n ON job.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\n LEFT JOIN _Click AS c\n ON s.JobID = c.JobID\n AND c.ListID = s.ListID\n AND c.BatchID = s.BatchID\n AND c.SubscriberID = s.SubscriberID\n AND c.IsUnique = 1\n LEFT JOIN _Bounce AS b\n ON s.JobID = b.JobID\n AND b.ListID = s.ListID\n AND b.BatchID = s.BatchID\n AND b.SubscriberID = s.SubscriberID\n AND b.IsUnique = 1\n LEFT JOIN _Unsubscribe AS u\n ON s.JobID = u.JobID\n AND u.ListID = s.ListID\n AND u.BatchID = s.BatchID\n AND u.SubscriberID = s.SubscriberID\n AND u.IsUnique = 1\n LEFT JOIN _JourneyActivity AS ja\n ON ja.JourneyActivityObjectID = s.TriggererSendDefinitionObjectID\n LEFT JOIN _Journey AS j\n ON j.VersionID = ja.VersionID\n LEFT JOIN _Subscribers AS sub\n ON sub.SubscriberKey = s.SubscriberKey\nWHERE s.EventDate >= DATEADD(DAY, -1, GETDATE())\n"})}),"\n",(0,t.jsx)(i.p,{children:"Within a few seconds, you will see information about sends from the last day, with all the details that might be useful for debugging, like STMP Bounce Reason, Subscriber Status, Unsubscribe Date, etc."}),"\n",(0,t.jsxs)(i.p,{children:["Wondering what to do with that data? Check out ",(0,t.jsx)(i.a,{href:"#email-send-debugging-step-by-step",children:"Email Send Debugging Step-by-Step section"})," below."]}),"\n",(0,t.jsx)(i.admonition,{title:"You Should Know",type:"note",children:(0,t.jsxs)(i.p,{children:["If you are running it from the child Business Unit and do not see EmailAddress, BounceCount and Status, add the ",(0,t.jsx)(i.code,{children:"Ent."})," prefix to ",(0,t.jsx)(i.code,{children:"_Subscribers"})," Data View name in the last ",(0,t.jsx)(i.code,{children:"JOIN"}),". It will pull the data from _Subscribers of the parent Business Unit."]})}),"\n",(0,t.jsx)(i.h2,{id:"options",children:"Options"}),"\n",(0,t.jsx)(i.p,{children:"You can even adapt the above query to better suit your needs."}),"\n",(0,t.jsx)(i.h3,{id:"change-timeframe",children:"Change timeframe"}),"\n",(0,t.jsxs)(i.p,{children:["My default is checking the sends from the last day. You can change it by modifying the ",(0,t.jsxs)(i.a,{href:"/docs/sql/sfmc-sql-date-functions#dateadd",children:[(0,t.jsx)(i.code,{children:"DATEADD"})," function"]}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"limit-to-a-single-subscriber",children:"Limit to a single subscriber"}),"\n",(0,t.jsxs)(i.p,{children:["If you are looking for a problem related to only one specific subscriber, you can add ",(0,t.jsx)(i.code,{children:"s.SubscriberKey = 'SubscriberKeyOfThatContact'"})," or ",(0,t.jsx)(i.code,{children:"sub.EmailAddress = 'specific@email.address'"})," to the ",(0,t.jsxs)(i.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:[(0,t.jsx)(i.code,{children:"WHERE"})," statement"]}),". Or replace the current one not to be limited by the timeframe."]}),"\n",(0,t.jsx)(i.h3,{id:"limit-to-a-single-domain",children:"Limit to a single domain"}),"\n",(0,t.jsxs)(i.p,{children:["If you see problems with deliverability for a particular user, I highly recommend checking whether other users from the same domain also have such issues. Maybe it is related to corporate server policy? Add ",(0,t.jsx)(i.code,{children:"sub.Domain = 'Recipients.Domain'"})," to the ",(0,t.jsxs)(i.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:[(0,t.jsx)(i.code,{children:"WHERE"})," statement"]}),". Or replace the current one not to be limited by the timeframe."]}),"\n",(0,t.jsx)(i.h3,{id:"limit-to-a-single-email",children:"Limit to a single email"}),"\n",(0,t.jsxs)(i.p,{children:["If the problem is related to just one email asset, you can limit your outcomes by adding ",(0,t.jsx)(i.code,{children:"job.EmailName = 'ProblematicEmailName'"})," to the ",(0,t.jsxs)(i.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:[(0,t.jsx)(i.code,{children:"WHERE"})," statement"]}),". Or replace the current one not to be limited by the timeframe."]}),"\n",(0,t.jsx)(i.h3,{id:"limit-to-a-single-journey",children:"Limit to a single Journey"}),"\n",(0,t.jsxs)(i.p,{children:["If you want to focus on a single Journey, you can limit your outcomes by adding ",(0,t.jsx)(i.code,{children:"j.JourneyName = 'ProblematicJourneyName'"})," to the ",(0,t.jsxs)(i.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:[(0,t.jsx)(i.code,{children:"WHERE"})," statement"]}),". Or replace the current one not to be limited by the timeframe. You can also pinpoint it further by filtering on ",(0,t.jsx)(i.code,{children:"j.JourneyVersion"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"limit-to-single-engagement-type",children:"Limit to single engagement type"}),"\n",(0,t.jsxs)(i.p,{children:["If you are interested only in bounces and do not need any other sends, add ",(0,t.jsx)(i.code,{children:"b.IsUnique = 1"})," to the ",(0,t.jsxs)(i.a,{href:"/docs/sql/sfmc-sql-where#logical-operators",children:[(0,t.jsx)(i.code,{children:"WHERE"})," statement"]}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["You can use the same approach to output only opens or clicks by changing the prefix from ",(0,t.jsx)(i.code,{children:"b"})," to the ",(0,t.jsx)(i.a,{href:"/docs/sql/sfmc-sql-join#table-name-prefix",children:"alias"})," representing the needed ",(0,t.jsx)(i.a,{href:"/docs/config/sfmc-system-data-views",children:"System Data View"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"email-send-debugging-step-by-step",children:"Email Send Debugging Step-by-Step"}),"\n",(0,t.jsx)(i.p,{children:"Now you know the SFMC Email Send Debugging query in and out. But how to work with the outcomes? And what are the next steps?"}),"\n",(0,t.jsx)(i.p,{children:"As they say, with great power comes great complexity. And that's definitely true for finding the root cause of the undelivered email. The deliverability by itself is already a beautiful mess, and then there are various features and options you can use directly in Salesforce Marketing Cloud. Let's dive in."}),"\n",(0,t.jsxs)(i.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsx)(i.p,{children:"You don't have to follow the steps below in the same order as presented. You can mix and match them, as long as you leave the Support Ticket creation for when you tried all other options."}),(0,t.jsx)(i.p,{children:"I personally debug in that order because, while I wait for the Query Studio to return the output from query, I can check the following steps in parallel."})]}),"\n",(0,t.jsx)(i.h3,{id:"1-query-system-data-views",children:"1. Query System Data Views"}),"\n",(0,t.jsxs)(i.p,{children:["I like to start with the query described in this guide - filtered down to problematic subscriber - to get a high-level picture of the situation. Free Salesforce ",(0,t.jsx)(i.a,{href:"/docs/config/sfmc-appexchange-solutions#query-studio",children:"Query Studio"})," is the best place to execute that little exploratory analysis."]}),"\n",(0,t.jsx)(i.p,{children:"Once you see the outcome, there are few possibilities:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"There is no data for that subscriber/send"})," \xbb It's time go to to the ",(0,t.jsx)(i.a,{href:"#2-check-send-log",children:"next step"}),"."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"BounceDate is filled"})," \xbb Either the email is invalid (hence the bounce), or the recipient's inbox Admin blocked the email (they sometimes use fake bounces to fight spam - especially in enterprise B2B and public markets)."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"OpenDate or ClickDate is filled"})," \xbb It's time to compare their timestamps with DeliveryDate. If those are within a single second and there are no later subsequent opens/clicks, the email has been checked by an antispam bot and flagged for no delivery to the final recipient (again, B2B and Public). If the timestamps are spread out (especially engagement ones from the DeliveryDate), the email got delivered to the right person, and they just forgot or lost it."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"DeliveryDate is filled"})," \xbb If there is no Bounce, Open or Click timestamps, but Delivery is filled in, the email should be in the subscriber's Spam folder or Promotions tab."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"DeliveryDate is not filled"})," \xbb It's time go to to the ",(0,t.jsx)(i.a,{href:"#2-check-send-log",children:"next step"}),"."]}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"2-check-send-log",children:"2. Check Send Log"}),"\n",(0,t.jsxs)(i.p,{children:["If System Data Views don't have the data or the DeliveryDate is not filled, the email hasn't reached the recipient's inbox. Time to investigate the ",(0,t.jsx)(i.a,{href:"/docs/config/sfmc-enhanced-send-log",children:"Send Log"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"Check whether an ErrorCode column value is filled for the send and subscriber you are debugging."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"There is no data for that subscriber/send"})," \xbb It's time go to to the ",(0,t.jsx)(i.a,{href:"#3-check-all-subscribers-list",children:"next step"}),"."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"ErrorCode is filled"})," \xbb Check the ",(0,t.jsx)(i.a,{href:"/docs/config/sfmc-enhanced-send-log#send-log-errorcode-values",children:"Error Code value meaning"})," to find the root cause."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"ErrorCode is not filled"})," \xbb The email was sent but not delivered to the recipient - you have deliverability issues. Check your configuration (From Address Management in SFMC + SPF/DKIM/DMARC in DNS) and deliverability metrics (Salesforce offers Reputation Audit Test and Sender Rating as ",(0,t.jsx)(i.a,{href:"/docs/config/sfmc-features-on-demand#deliverability-features",children:"features-on-demand"}),")."]}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"3-check-all-subscribers-list",children:"3. Check All Subscribers List"}),"\n",(0,t.jsx)(i.p,{children:"If there is no trace of the send in System Data Views and Send Log, it means that Marketing Cloud was not able to attempt sending. There are few possible reasons for that. Let's start with potential subscriber issues by searching for problematic Contact in Email Studio All Subscribers."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"There is no subscriber"})," \xbb The most probable reason is subscriber block by SFMC ",(0,t.jsx)(i.a,{href:"https://help.salesforce.com/s/articleView?id=000335444&type=1",children:"List Detective"})," that protects your lists from nasty emails. What frequently trips people is that it scrubs various group addresses like ",(0,t.jsx)(i.code,{children:"admin@"}),", ",(0,t.jsx)(i.code,{children:"info@"})," and ",(0,t.jsx)(i.a,{href:"https://www.cameronrobert.com.au/sfmc/email-usernames-blocked-by-salesforce-marketing-cloud/",children:"more"}),"."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Subscriber Status is Unsubscribed or Held"})," \xbb Contact is not eligible for receiving the email. Should they want to get it - push them through the official subscription process to stay compliant."]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"If you are sending through Journey Builder and in the Journey configuration selected to use Email Address from the Entry Source instead of Contacts, be sure to also check whether the Email Address field in the Data Extension selected for Entry stores correct email for that subscriber."}),"\n",(0,t.jsx)(i.h3,{id:"4-check-personalised-email-preview",children:"4. Check Personalised Email Preview"}),"\n",(0,t.jsx)(i.p,{children:"If everything was fine with the Subscriber, another option is an issue with the Email Asset. To check that, go to Content Builder, find the email, go to Preview and Test and select the subscriber in the same context as the one used for sending (for example, in the sendable Data Extension used as an Entry to the Journey). Check also a few other subscribers from the same place."}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Email Preview errors out for all Subscribers"})," \xbb There is an issue with your email (probably with some programmatic content) that errored out during send."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Email Preview errors out only for that Subscriber"})," \xbb There is an issue with the personalisation data of that subscriber that clashes with your programmatic content."]}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"5-check-suppressions-and-exclusions",children:"5. Check Suppressions and Exclusions"}),"\n",(0,t.jsx)(i.p,{children:"If there are no errors within the Preview, the next potential culprit can be Exclusion or Suppression. There are quite a lot of them, and not all will be relevant for you, depending on the SFMC configuration and method of sending, so be sure to check applicable ones from the Exclusion List, Exclusion Script, Suppression List, Auto-Suppression List."}),"\n",(0,t.jsx)(i.h3,{id:"6-create-support-ticket",children:"6. Create Support Ticket"}),"\n",(0,t.jsx)(i.p,{children:"If, after all those checks, there is still no answer to the root cause - create a Support Ticket. Sometimes, it can be a master unsubscribe, server-related queue build-up or a bug on the Marketing Cloud backend."}),"\n",(0,t.jsx)(i.h3,{id:"email-send-debugging-flowchart",children:"Email Send Debugging Flowchart"}),"\n",(0,t.jsx)(i.p,{children:"Prefer complex processes visualised? Got you covered:"}),"\n",(0,t.jsx)(a.Z,{img:l(),alt:"Flowchart with visual representation of the debugging email sends process"})]})}function b(e={}){const{wrapper:i}={...(0,n.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(m,{...e})}):m(e)}},7271:(e,i,s)=>{"use strict";s.d(i,{V:()=>r,z:()=>n});s(7294);var t=s(5893);const n=e=>{let{link:i,text:s,newTab:n=!1}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:i,target:n?"_blank":"_self",children:s})})},r=e=>{let{linkLeft:i,textLeft:s,newTabLeft:n=!1,linkRight:r,textRight:a,newTabRight:o=!1}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)("div",{class:"col col--12",children:[(0,t.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:i,target:n?"_blank":"_self",children:s}),(0,t.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:r,target:o?"_blank":"_self",children:a})]})})}},1872:(e,i,s)=>{"use strict";s.d(i,{m:()=>r});s(7294);const t="leadText_qzwo";var n=s(5893);const r=e=>{let{content:i}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:t,children:i})})}}}]); \ No newline at end of file diff --git a/assets/js/d44a7d50.d1e2179b.js b/assets/js/d44a7d50.d1e2179b.js deleted file mode 100644 index 71e6b01fe..000000000 --- a/assets/js/d44a7d50.d1e2179b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4514],{9982:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png 640w,"+i.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.d1e0ee4.1030.png 1030w",images:[{path:i.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png",width:640,height:1310},{path:i.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.d1e0ee4.1030.png",width:1030,height:2109}],src:i.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png",toString:function(){return i.p+"assets/ideal-img/article-image-sfmc-debugging-email-sends.10a9a34.640.png"},placeholder:void 0,width:640,height:1310},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAVCAYAAAB/sn/zAAAACXBIWXMAAAsTAAALEwEAmpwYAAACE0lEQVQokW2S608TQRTF919XErXRQED9YkREAmkJhpehD0oRxVKIYCAstNoCtZQWuu1ut8tu9zHzM1uglOBJ5sudM+ecufcqcdXkU65FCNuT1NoBDUviCQgCn0KxgucLlOjqLqPRdYSQ5M91sodn5NRTSjWDIBCoZwYVzUGZGB/n2dBTRCjpmXBdAqcIgckgFL++S7e8gVVTsU/XmJ1b5MnzCM3sDlp0Ht+2Eb6P0jWqXGtlzOo+RiHJwuIyL4dHaB79pPFtgWYyjZnbQQkkBEAnJP5JsxJPMjb2FrOu0iomaCbSGJtZlLsM5ukW2vES1uY27amZXk2GnSiW6J5XUTKZDHOf5wlcC+l18G0H12gjpQAp7z8zG4vy5vUoIhA9BSv/u2clb0lSiN5R0PfhKot+kuNid5qOWkBPr/UuQ9w9UJLxZWamJgj8LkI6dNRj9PWNe0V5S1xanOfD+Dt8x0U4XQYhBzN6tT2cvxmMHzs0ZuduMkn5WNGuH2FWclhqAWPje5/0iKgVt7hQ45h7B7RWEg9s5aD1+48zDL0Y6Rd8w8CtX/Za9UCxms9S2ktgXRbRy9uYvw5ofln5j3UpR/UwhVUvoJ98pXOYp7V608eQchdBmZqO8Wp4rG/lNhq4lcqjFimTk5NEIhEC3+/P1gu3yQlw/fvpKKlUilgshrgdWbgzV22Xo4trSpc2Zc1B63j8A/evBgZUECuGAAAAAElFTkSuQmCC"}},7271:(e,t,i)=>{"use strict";i.d(t,{V:()=>s,z:()=>n});var a=i(7294);const n=e=>{let{link:t,text:i,newTab:n=!1}=e;return a.createElement(a.Fragment,null,a.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:n?"_blank":"_self"},i))},s=e=>{let{linkLeft:t,textLeft:i,newTabLeft:n=!1,linkRight:s,textRight:o,newTabRight:r=!1}=e;return a.createElement(a.Fragment,null,a.createElement("div",{class:"col col--12"},a.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:n?"_blank":"_self"},i),a.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:s,target:r?"_blank":"_self"},o)))}},1872:(e,t,i)=>{"use strict";i.d(t,{m:()=>s});var a=i(7294);const n="leadText_qzwo",s=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:n},t))}},3254:(e,t,i)=>{"use strict";i.r(t),i.d(t,{assets:()=>m,contentTitle:()=>d,default:()=>b,frontMatter:()=>u,metadata:()=>c,toc:()=>p});var a=i(7462),n=(i(7294),i(4137)),s=i(1872),o=(i(7271),i(5944)),r=i(9982),l=i.n(r);const u={id:"sfmc-sql-debugging-email-sends",title:"SFMC SQL Debugging Email Sends",sidebar_label:"Debugging Email Sends",description:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.",image:"img/og/og-image-sql-debugging-email-sends.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},d=void 0,c={unversionedId:"sql/snippets/sfmc-sql-debugging-email-sends",id:"sql/snippets/sfmc-sql-debugging-email-sends",title:"SFMC SQL Debugging Email Sends",description:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.",source:"@site/docs/sql/snippets/sfmc-sql-debugging-email-sends.mdx",sourceDirName:"sql/snippets",slug:"/sql/snippets/sfmc-sql-debugging-email-sends",permalink:"/docs/sql/snippets/sfmc-sql-debugging-email-sends",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/snippets/sfmc-sql-debugging-email-sends.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Email",permalink:"/docs/tags/email"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Analytics",permalink:"/docs/tags/analytics"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1680552941,formattedLastUpdatedAt:"Apr 3, 2023",frontMatter:{id:"sfmc-sql-debugging-email-sends",title:"SFMC SQL Debugging Email Sends",sidebar_label:"Debugging Email Sends",description:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.",image:"img/og/og-image-sql-debugging-email-sends.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},sidebar:"snippets",previous:{title:"SFMC SQL Snippets",permalink:"/docs/category/sfmc-sql-snippets"},next:{title:"Debugging Value Length",permalink:"/docs/sql/snippets/sfmc-sql-debugging-value-length"}},m={},p=[{value:"Problem with straightforward Email Send analysis",id:"problem-with-straightforward-email-send-analysis",level:2},{value:"Solution",id:"solution",level:2},{value:"Options",id:"options",level:2},{value:"Change timeframe",id:"change-timeframe",level:3},{value:"Limit to a single subscriber",id:"limit-to-a-single-subscriber",level:3},{value:"Limit to a single domain",id:"limit-to-a-single-domain",level:3},{value:"Limit to a single email",id:"limit-to-a-single-email",level:3},{value:"Limit to a single Journey",id:"limit-to-a-single-journey",level:3},{value:"Limit to single engagement type",id:"limit-to-single-engagement-type",level:3},{value:"Email Send Debugging Step-by-Step",id:"email-send-debugging-step-by-step",level:2},{value:"1. Query System Data Views",id:"1-query-system-data-views",level:3},{value:"2. Check Send Log",id:"2-check-send-log",level:3},{value:"3. Check All Subscribers List",id:"3-check-all-subscribers-list",level:3},{value:"4. Check Personalised Email Preview",id:"4-check-personalised-email-preview",level:3},{value:"5. Check Suppressions and Exclusions",id:"5-check-suppressions-and-exclusions",level:3},{value:"6. Create Support Ticket",id:"6-create-support-ticket",level:3},{value:"Email Send Debugging Flowchart",id:"email-send-debugging-flowchart",level:3}],h={toc:p},g="wrapper";function b(e){let{components:t,...i}=e;return(0,n.kt)(g,(0,a.Z)({},h,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(s.m,{content:"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with the Query Studio to the rescue.",mdxType:"LeadText"}),(0,n.kt)("h2",{id:"problem-with-straightforward-email-send-analysis"},"Problem with straightforward Email Send analysis"),(0,n.kt)("p",null,"Deliverability issues, unfortunately, are a standard both during the Salesforce Marketing Cloud implementation phase as well as after the go-live."),(0,n.kt)("p",null,"The test you sent to yourself during the Marketing Cloud implementation that never arrived in the inbox. The subscriber that asks where is his newsletter with the promo code."),(0,n.kt)("p",null,"You can try debugging it with Journey Builder data or Reports, but in most cases, those solutions provide either not enough or way too much for the specific check you need to make."),(0,n.kt)("h2",{id:"solution"},"Solution"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n s.SubscriberKey AS SubscriberKey\n , sub.EmailAddress AS EmailAddress\n , sub.Status AS SubscriptionStatus\n , j.JourneyName AS JourneyName\n , j.VersionNumber AS JourneyVersion\n , job.EmailName AS EmailName\n , s.EventDate AS SentDate\n , job.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\n , c.EventDate AS ClickDate\n , b.EventDate AS BounceDate\n , b.BounceCategory AS BounceCategory\n , b.BounceSubcategory AS BounceSubcategory\n , b.SMTPBounceReason AS BounceReason\n , u.EventDate AS UnsubscribeDate\nFROM _Sent AS s\n LEFT JOIN _Job AS job\n ON job.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\n LEFT JOIN _Click AS c\n ON s.JobID = c.JobID\n AND c.ListID = s.ListID\n AND c.BatchID = s.BatchID\n AND c.SubscriberID = s.SubscriberID\n AND c.IsUnique = 1\n LEFT JOIN _Bounce AS b\n ON s.JobID = b.JobID\n AND b.ListID = s.ListID\n AND b.BatchID = s.BatchID\n AND b.SubscriberID = s.SubscriberID\n AND b.IsUnique = 1\n LEFT JOIN _Unsubscribe AS u\n ON s.JobID = u.JobID\n AND u.ListID = s.ListID\n AND u.BatchID = s.BatchID\n AND u.SubscriberID = s.SubscriberID\n AND u.IsUnique = 1\n LEFT JOIN _JourneyActivity AS ja\n ON ja.JourneyActivityObjectID = s.TriggererSendDefinitionObjectID\n LEFT JOIN _Journey AS j\n ON j.VersionID = ja.VersionID\n LEFT JOIN _Subscribers AS sub\n ON sub.SubscriberKey = s.SubscriberKey\nWHERE s.EventDate >= DATEADD(DAY, -1, GETDATE())\n")),(0,n.kt)("p",null,"Within a few seconds, you will see information about sends from the last day, with all the details that might be useful for debugging, like STMP Bounce Reason, Subscriber Status, Unsubscribe Date, etc."),(0,n.kt)("p",null,"Wondering what to do with that data? Check out ",(0,n.kt)("a",{parentName:"p",href:"#email-send-debugging-step-by-step"},"Email Send Debugging Step-by-Step section")," below."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"If you are running it from the child Business Unit and do not see EmailAddress, BounceCount and Status, add the ",(0,n.kt)("inlineCode",{parentName:"p"},"Ent.")," prefix to ",(0,n.kt)("inlineCode",{parentName:"p"},"_Subscribers")," Data View name in the last ",(0,n.kt)("inlineCode",{parentName:"p"},"JOIN"),". It will pull the data from _Subscribers of the parent Business Unit.")),(0,n.kt)("h2",{id:"options"},"Options"),(0,n.kt)("p",null,"You can even adapt the above query to better suit your needs."),(0,n.kt)("h3",{id:"change-timeframe"},"Change timeframe"),(0,n.kt)("p",null,"My default is checking the sends from the last day. You can change it by modifying the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#dateadd"},(0,n.kt)("inlineCode",{parentName:"a"},"DATEADD")," function"),"."),(0,n.kt)("h3",{id:"limit-to-a-single-subscriber"},"Limit to a single subscriber"),(0,n.kt)("p",null,"If you are looking for a problem related to only one specific subscriber, you can add ",(0,n.kt)("inlineCode",{parentName:"p"},"s.SubscriberKey = 'SubscriberKeyOfThatContact'")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"sub.EmailAddress = 'specific@email.address'")," to the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#logical-operators"},(0,n.kt)("inlineCode",{parentName:"a"},"WHERE")," statement"),". Or replace the current one not to be limited by the timeframe."),(0,n.kt)("h3",{id:"limit-to-a-single-domain"},"Limit to a single domain"),(0,n.kt)("p",null,"If you see problems with deliverability for a particular user, I highly recommend checking whether other users from the same domain also have such issues. Maybe it is related to corporate server policy? Add ",(0,n.kt)("inlineCode",{parentName:"p"},"sub.Domain = 'Recipients.Domain'")," to the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#logical-operators"},(0,n.kt)("inlineCode",{parentName:"a"},"WHERE")," statement"),". Or replace the current one not to be limited by the timeframe."),(0,n.kt)("h3",{id:"limit-to-a-single-email"},"Limit to a single email"),(0,n.kt)("p",null,"If the problem is related to just one email asset, you can limit your outcomes by adding ",(0,n.kt)("inlineCode",{parentName:"p"},"job.EmailName = 'ProblematicEmailName'")," to the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#logical-operators"},(0,n.kt)("inlineCode",{parentName:"a"},"WHERE")," statement"),". Or replace the current one not to be limited by the timeframe."),(0,n.kt)("h3",{id:"limit-to-a-single-journey"},"Limit to a single Journey"),(0,n.kt)("p",null,"If you want to focus on a single Journey, you can limit your outcomes by adding ",(0,n.kt)("inlineCode",{parentName:"p"},"j.JourneyName = 'ProblematicJourneyName'")," to the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#logical-operators"},(0,n.kt)("inlineCode",{parentName:"a"},"WHERE")," statement"),". Or replace the current one not to be limited by the timeframe. You can also pinpoint it further by filtering on ",(0,n.kt)("inlineCode",{parentName:"p"},"j.JourneyVersion"),"."),(0,n.kt)("h3",{id:"limit-to-single-engagement-type"},"Limit to single engagement type"),(0,n.kt)("p",null,"If you are interested only in bounces and do not need any other sends, add ",(0,n.kt)("inlineCode",{parentName:"p"},"b.IsUnique = 1")," to the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#logical-operators"},(0,n.kt)("inlineCode",{parentName:"a"},"WHERE")," statement"),"."),(0,n.kt)("p",null,"You can use the same approach to output only opens or clicks by changing the prefix from ",(0,n.kt)("inlineCode",{parentName:"p"},"b")," to the ",(0,n.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join#table-name-prefix"},"alias")," representing the needed ",(0,n.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views"},"System Data View"),"."),(0,n.kt)("h2",{id:"email-send-debugging-step-by-step"},"Email Send Debugging Step-by-Step"),(0,n.kt)("p",null,"Now you know the SFMC Email Send Debugging query in and out. But how to work with the outcomes? And what are the next steps?"),(0,n.kt)("p",null,"As they say, with great power comes great complexity. And that's definitely true for finding the root cause of the undelivered email. The deliverability by itself is already a beautiful mess, and then there are various features and options you can use directly in Salesforce Marketing Cloud. Let's dive in."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"You don't have to follow the steps below in the same order as presented. You can mix and match them, as long as you leave the Support Ticket creation for when you tried all other options."),(0,n.kt)("p",{parentName:"admonition"},"I personally debug in that order because, while I wait for the Query Studio to return the output from query, I can check the following steps in parallel.")),(0,n.kt)("h3",{id:"1-query-system-data-views"},"1. Query System Data Views"),(0,n.kt)("p",null,"I like to start with the query described in this guide - filtered down to problematic subscriber - to get a high-level picture of the situation. Free Salesforce ",(0,n.kt)("a",{parentName:"p",href:"/docs/config/sfmc-appexchange-solutions#query-studio"},"Query Studio")," is the best place to execute that little exploratory analysis."),(0,n.kt)("p",null,"Once you see the outcome, there are few possibilities:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"There is no data for that subscriber/send")," \xbb It's time go to to the ",(0,n.kt)("a",{parentName:"li",href:"#2-check-send-log"},"next step"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"BounceDate is filled")," \xbb Either the email is invalid (hence the bounce), or the recipient's inbox Admin blocked the email (they sometimes use fake bounces to fight spam - especially in enterprise B2B and public markets)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OpenDate or ClickDate is filled")," \xbb It's time to compare their timestamps with DeliveryDate. If those are within a single second and there are no later subsequent opens/clicks, the email has been checked by an antispam bot and flagged for no delivery to the final recipient (again, B2B and Public). If the timestamps are spread out (especially engagement ones from the DeliveryDate), the email got delivered to the right person, and they just forgot or lost it."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"DeliveryDate is filled")," \xbb If there is no Bounce, Open or Click timestamps, but Delivery is filled in, the email should be in the subscriber's Spam folder or Promotions tab."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"DeliveryDate is not filled")," \xbb It's time go to to the ",(0,n.kt)("a",{parentName:"li",href:"#2-check-send-log"},"next step"),".")),(0,n.kt)("h3",{id:"2-check-send-log"},"2. Check Send Log"),(0,n.kt)("p",null,"If System Data Views don't have the data or the DeliveryDate is not filled, the email hasn't reached the recipient's inbox. Time to investigate the ",(0,n.kt)("a",{parentName:"p",href:"/docs/config/sfmc-enhanced-send-log"},"Send Log"),"."),(0,n.kt)("p",null,"Check whether an ErrorCode column value is filled for the send and subscriber you are debugging."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"There is no data for that subscriber/send")," \xbb It's time go to to the ",(0,n.kt)("a",{parentName:"li",href:"#3-check-all-subscribers-list"},"next step"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"ErrorCode is filled")," \xbb Check the ",(0,n.kt)("a",{parentName:"li",href:"/docs/config/sfmc-enhanced-send-log#send-log-errorcode-values"},"Error Code value meaning")," to find the root cause."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"ErrorCode is not filled")," \xbb The email was sent but not delivered to the recipient - you have deliverability issues. Check your configuration (From Address Management in SFMC + SPF/DKIM/DMARC in DNS) and deliverability metrics (Salesforce offers Reputation Audit Test and Sender Rating as ",(0,n.kt)("a",{parentName:"li",href:"/docs/config/sfmc-features-on-demand#deliverability-features"},"features-on-demand"),").")),(0,n.kt)("h3",{id:"3-check-all-subscribers-list"},"3. Check All Subscribers List"),(0,n.kt)("p",null,"If there is no trace of the send in System Data Views and Send Log, it means that Marketing Cloud was not able to attempt sending. There are few possible reasons for that. Let's start with potential subscriber issues by searching for problematic Contact in Email Studio All Subscribers."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"There is no subscriber")," \xbb The most probable reason is subscriber block by SFMC ",(0,n.kt)("a",{parentName:"li",href:"https://help.salesforce.com/s/articleView?id=000335444&type=1"},"List Detective")," that protects your lists from nasty emails. What frequently trips people is that it scrubs various group addresses like ",(0,n.kt)("inlineCode",{parentName:"li"},"admin@"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"info@")," and ",(0,n.kt)("a",{parentName:"li",href:"https://www.cameronrobert.com.au/sfmc/email-usernames-blocked-by-salesforce-marketing-cloud/"},"more"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Subscriber Status is Unsubscribed or Held")," \xbb Contact is not eligible for receiving the email. Should they want to get it - push them through the official subscription process to stay compliant.")),(0,n.kt)("p",null,"If you are sending through Journey Builder and in the Journey configuration selected to use Email Address from the Entry Source instead of Contacts, be sure to also check whether the Email Address field in the Data Extension selected for Entry stores correct email for that subscriber."),(0,n.kt)("h3",{id:"4-check-personalised-email-preview"},"4. Check Personalised Email Preview"),(0,n.kt)("p",null,"If everything was fine with the Subscriber, another option is an issue with the Email Asset. To check that, go to Content Builder, find the email, go to Preview and Test and select the subscriber in the same context as the one used for sending (for example, in the sendable Data Extension used as an Entry to the Journey). Check also a few other subscribers from the same place."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Email Preview errors out for all Subscribers")," \xbb There is an issue with your email (probably with some programmatic content) that errored out during send."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Email Preview errors out only for that Subscriber")," \xbb There is an issue with the personalisation data of that subscriber that clashes with your programmatic content.")),(0,n.kt)("h3",{id:"5-check-suppressions-and-exclusions"},"5. Check Suppressions and Exclusions"),(0,n.kt)("p",null,"If there are no errors within the Preview, the next potential culprit can be Exclusion or Suppression. There are quite a lot of them, and not all will be relevant for you, depending on the SFMC configuration and method of sending, so be sure to check applicable ones from the Exclusion List, Exclusion Script, Suppression List, Auto-Suppression List."),(0,n.kt)("h3",{id:"6-create-support-ticket"},"6. Create Support Ticket"),(0,n.kt)("p",null,"If, after all those checks, there is still no answer to the root cause - create a Support Ticket. Sometimes, it can be a master unsubscribe, server-related queue build-up or a bug on the Marketing Cloud backend."),(0,n.kt)("h3",{id:"email-send-debugging-flowchart"},"Email Send Debugging Flowchart"),(0,n.kt)("p",null,"Prefer complex processes visualised? Got you covered:"),(0,n.kt)(o.Z,{img:l(),alt:"Flowchart with visual representation of the debugging email sends process",mdxType:"Image"}))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4ed38e0.4a5c20ff.js b/assets/js/d4ed38e0.4a5c20ff.js deleted file mode 100644 index 0a73187f4..000000000 --- a/assets/js/d4ed38e0.4a5c20ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1441],{4137:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>k});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function l(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function i(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},o=Object.keys(t);for(a=0;a<o.length;a++)n=o[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a<o.length;a++)n=o[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var s=a.createContext({}),d=function(t){var e=a.useContext(s),n=e;return t&&(n="function"==typeof t?t(e):l(l({},e),t)),n},p=function(t){var e=d(t.components);return a.createElement(s.Provider,{value:e},t.children)},u="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,s=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),u=d(n),c=r,k=u["".concat(s,".").concat(c)]||u[c]||m[c]||o;return n?a.createElement(k,l(l({ref:e},p),{},{components:n})):a.createElement(k,l({ref:e},p))}));function k(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,l=new Array(o);l[0]=c;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=t,i[u]="string"==typeof t?t:r,l[1]=i;for(var d=2;d<o;d++)l[d]=n[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},1872:(t,e,n)=>{n.d(e,{m:()=>o});var a=n(7294);const r="leadText_qzwo",o=t=>{let{content:e}=t;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},e))}},1308:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(4137)),o=n(1872);const l={id:"sfmc-sql-conversion-functions",title:"SFMC SQL Conversion Functions",sidebar_label:"Conversion Functions",description:"Break from the limits of Data Extension data types. Use full power of SQL to control your values.",image:"img/og/og-image-sql-conversion-functions.png",tags:["Marketing Cloud","SQL"]},i=void 0,s={unversionedId:"sql/sfmc-sql-conversion-functions",id:"sql/sfmc-sql-conversion-functions",title:"SFMC SQL Conversion Functions",description:"Break from the limits of Data Extension data types. Use full power of SQL to control your values.",source:"@site/docs/sql/sfmc-sql-conversion-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-conversion-functions",permalink:"/docs/sql/sfmc-sql-conversion-functions",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-conversion-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1696366762,formattedLastUpdatedAt:"Oct 3, 2023",frontMatter:{id:"sfmc-sql-conversion-functions",title:"SFMC SQL Conversion Functions",sidebar_label:"Conversion Functions",description:"Break from the limits of Data Extension data types. Use full power of SQL to control your values.",image:"img/og/og-image-sql-conversion-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Numeric Functions",permalink:"/docs/sql/sfmc-sql-numeric-functions"},next:{title:"Aggregate Functions",permalink:"/docs/sql/sfmc-sql-aggregate-functions"}},d={},p=[{value:"CAST & CONVERT",id:"cast--convert",level:2},{value:"CAST",id:"cast",level:3},{value:"CONVERT",id:"convert",level:3},{value:"Data Types",id:"data-types",level:3},{value:"CONVERT Date Style Codes",id:"convert-date-style-codes",level:3}],u={toc:p},m="wrapper";function c(t){let{components:e,...n}=t;return(0,r.kt)(m,(0,a.Z)({},u,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Break from the limits of source data types. Use the full power of SQL to transform your values.",mdxType:"LeadText"}),(0,r.kt)("p",null,"Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries."),(0,r.kt)("p",null,"Here, I will cover only selected conversion functions, that I find most useful for Marketing Automation purposes. They will help you change the value types to enable the use of type-based Salesforce Marketing Cloud User Interface elements and type-specific functions."),(0,r.kt)("h2",{id:"cast--convert"},"CAST & CONVERT"),(0,r.kt)("p",null,"In Salesforce Marketing Cloud, you can use two universal conversion functions - ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"CONVERT"),"."),(0,r.kt)("h3",{id:"cast"},"CAST"),(0,r.kt)("p",null,"The first one, ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST"),", is straightforward and available in all SQL dialects:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Find all subscribers that joined after the given date"',"{3}":!0,title:'"Find',all:!0,subscribers:!0,that:!0,joined:!0,after:!0,the:!0,given:!0,'date"':!0},"SELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE DateJoined > CAST('2020-10-30' AS DATE)\n")),(0,r.kt)("p",null,"It takes a value and expected datatype with ",(0,r.kt)("inlineCode",{parentName:"p"},"AS")," operator in between."),(0,r.kt)("p",null,"However, in Salesforce Marketing Cloud, it is much better to use ",(0,r.kt)("inlineCode",{parentName:"p"},"CONVERT")," function instead. It covers all features of ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST")," plus adds quite a lot more. It is also better supported by the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-basics#query-studio"},"Query Studio")," (for example, you cannot use ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST")," in a ",(0,r.kt)("inlineCode",{parentName:"p"},"SELECT")," part of the query there)."),(0,r.kt)("h3",{id:"convert"},"CONVERT"),(0,r.kt)("p",null,"The basic form of ",(0,r.kt)("inlineCode",{parentName:"p"},"CONVERT")," is nearly the same as the ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST")," with reversed order of arguments:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Find all subscribers that joined after the given date"',"{3}":!0,title:'"Find',all:!0,subscribers:!0,that:!0,joined:!0,after:!0,the:!0,given:!0,'date"':!0},"SELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE DateJoined > CONVERT(DATE, '2020-10-30')\n")),(0,r.kt)("p",null,"With both functions you can stack functions within for more complex calculations:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{2} title="Calculate the end of the trial period and output date only"',"{2}":!0,title:'"Calculate',the:!0,end:!0,of:!0,trial:!0,period:!0,and:!0,output:!0,date:!0,'only"':!0},"SELECT CONVERT(DATE, DATEADD(MM, 1, GETUTCDATE())) AS TrialPeriodEndDate\n")),(0,r.kt)("p",null,"Up to this point, ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"CONVERT")," seem similar in the features."),(0,r.kt)("p",null,"However, only ",(0,r.kt)("inlineCode",{parentName:"p"},"CONVERT")," have an additional third optional argument - ",(0,r.kt)("a",{parentName:"p",href:"#convert-date-style-codes"},"style"),". Thanks to it, you can convert even from non-standard (for the server) formats that would result in an error:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3} title=\"Converting dd/MM/yyyy format throws 'Could not convert date and/or time from string data type'\"","{3}":!0,title:'"Converting',"dd/MM/yyyy":!0,format:!0,throws:!0,"'Could":!0,not:!0,convert:!0,date:!0,"and/or":!0,time:!0,from:!0,string:!0,data:!0,"type'\"":!0},"SELECT SubscriberKey\nFROM _Subscribers\nWHERE DateJoined > CONVERT(DATE, '30/10/2019') /* Error */\n")),(0,r.kt)("p",null,"With ",(0,r.kt)("a",{parentName:"p",href:"#convert-date-style-codes"},"style codes"),", we can make it work with minimal change:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Converting dd/MM/yyyy format with appropriate style code"',"{3}":!0,title:'"Converting',"dd/MM/yyyy":!0,format:!0,with:!0,appropriate:!0,style:!0,'code"':!0},"SELECT SubscriberKey\nFROM _Subscribers\nWHERE DateJoined > CONVERT(DATE, '30/10/2019', 103)\n")),(0,r.kt)("p",null,"It is not possible with ",(0,r.kt)("inlineCode",{parentName:"p"},"CAST"),"."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"You can also leverage ",(0,r.kt)("a",{parentName:"p",href:"#convert-date-style-codes"},"style codes")," to format your dates during conversion to string, without the need to use ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#format-with-dates"},(0,r.kt)("inlineCode",{parentName:"a"},"FORMAT"))," function on top."),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n CONVERT(NVARCHAR, GETDATE(), 101) AS DateFormat1 /* Output: 10/30/2020 */\n , CONVERT(NVARCHAR, GETDATE(), 102) AS DateFormat2 /* Output: 2020.10.30 */\n , CONVERT(NVARCHAR, GETDATE(), 107) AS DateFormat3 /* Output: Oct 30, 2020 */\n"))),(0,r.kt)("h3",{id:"data-types"},"Data Types"),(0,r.kt)("p",null,"There are over 30 data types available for conversion, but there are only a few that are useful on a day-to-day basis in Salesforce Marketing Cloud:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Data Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Comment"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"CHAR"),(0,r.kt)("td",{parentName:"tr",align:null},"Fixed-length string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"NCHAR"),(0,r.kt)("td",{parentName:"tr",align:null},"Fixed-length string with Unicode support"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"VARCHAR"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable-length string"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"NVARCHAR"),(0,r.kt)("td",{parentName:"tr",align:null},"Variable-length string with Unicode support"),(0,r.kt)("td",{parentName:"tr",align:null},"Best option for most SFMC string use cases")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"DECIMAL/NUMERIC"),(0,r.kt)("td",{parentName:"tr",align:null},"Decimal number with big precision"),(0,r.kt)("td",{parentName:"tr",align:null},"Best option if you need a decimal number")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"INT"),(0,r.kt)("td",{parentName:"tr",align:null},"Integer number"),(0,r.kt)("td",{parentName:"tr",align:null},"Best option if your number is not decimal")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BIGINT"),(0,r.kt)("td",{parentName:"tr",align:null},"Big integer number"),(0,r.kt)("td",{parentName:"tr",align:null},"When your number is bigger than 2,147,483,647, you need BIGINT")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"DATETIME"),(0,r.kt)("td",{parentName:"tr",align:null},"Legacy date and time"),(0,r.kt)("td",{parentName:"tr",align:null},"More friendly default formatting")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"DATETIME2"),(0,r.kt)("td",{parentName:"tr",align:null},"Modern date and time"),(0,r.kt)("td",{parentName:"tr",align:null},"Best when you need both date and time")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"DATETIMEOFFSET"),(0,r.kt)("td",{parentName:"tr",align:null},"Date with offset"),(0,r.kt)("td",{parentName:"tr",align:null},"When you need timezone offset")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"DATE"),(0,r.kt)("td",{parentName:"tr",align:null},"Only date"),(0,r.kt)("td",{parentName:"tr",align:null},"Best when you need date only")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TIME"),(0,r.kt)("td",{parentName:"tr",align:null},"Only time"),(0,r.kt)("td",{parentName:"tr",align:null},"Best when you need time only")))),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"There are also two more data types: ",(0,r.kt)("inlineCode",{parentName:"p"},"FLOAT")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"REAL"),". Don't use them. Both are ",(0,r.kt)("strong",{parentName:"p"},"Approximate")," Numeric Data Types and can lead to unpredicted behaviour, especially when used for equality-based conditions in ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE")),". ",(0,r.kt)("inlineCode",{parentName:"p"},"DECIMAL"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"NUMERIC")," is the way to go.")),(0,r.kt)("p",null,"When converting values to the selected data type, you can have even more control by passing optional argument right after type to declare the length of the output."),(0,r.kt)("p",null,"It is instrumental with ",(0,r.kt)("inlineCode",{parentName:"p"},"DECIMAL")," as it allows you to provide expected precision (number of digits in a number) and scale (number of digits to the right of the decimal point in a number)."),(0,r.kt)("p",null,"For example, you may have a string field containing a product price - ",(0,r.kt)("inlineCode",{parentName:"p"},"'123.99'"),". If you convert it to ",(0,r.kt)("inlineCode",{parentName:"p"},"DECIMAL")," without any arguments, it will round to ",(0,r.kt)("inlineCode",{parentName:"p"},"124"),". However, you can provide precision and scale to keep the current format:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n CONVERT(DECIMAL, '123.99') AS RoundedConversion /* Output: 124 */\n , CONVERT(DECIMAL(5,2), '123.99') AS FullConversion /* Output: 123.99 */\n")),(0,r.kt)("p",null,"Be sure to add correct precision. If it is smaller then the values in your source, it will lead to an error. It's better to have too big precision than too small."),(0,r.kt)("p",null,"As for scale - if your scale is smaller than in your source, the value is rounded."),(0,r.kt)("p",null,"You can also use the single argument with ",(0,r.kt)("inlineCode",{parentName:"p"},"DATETIME"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"DATETIME2"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"DATETIMEOFFSET")," (to control precision of the output) and string data types (",(0,r.kt)("inlineCode",{parentName:"p"},"CHAR"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"NCHAR"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"VARCHAR"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"NVARCHAR"),"). The latter won't directly limit the number of characters, but rather the number of bytes (which might be equal or not to the number of characters depending on what characters you are using)."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"CHAR")," allows for 1-8000 bytes range, whereas ",(0,r.kt)("inlineCode",{parentName:"p"},"NCHAR")," due to Unicode support allows for only 1-4000. ",(0,r.kt)("inlineCode",{parentName:"p"},"VARCHAR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"NVARCHAR")," support the same ranges respectively and have an additional possible option - ",(0,r.kt)("inlineCode",{parentName:"p"},"max")," that you can use if some values might exceed the range."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Always double-check the choice of data type you want to convert to, as it might have a massive impact into outcome."),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Different outcomes depending on the output data type"',title:'"Different',outcomes:!0,depending:!0,on:!0,the:!0,output:!0,data:!0,'type"':!0},"SELECT\n CAST(6.9 AS INT) AS CastToInt /* Output: 6 */\n , CAST(6.9 AS DECIMAL) AS CastToNumeric /* Output: 7 */\n , CONVERT(INT, 6.9) AS ConvertToInt /* Output: 6 */\n , CONVERT(DECIMAL, 6.9) AS ConvertToNumeric /* Output: 7 */\n")),(0,r.kt)("p",{parentName:"admonition"},"It is happening because conversions from ",(0,r.kt)("inlineCode",{parentName:"p"},"DECIMAL")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"FLOAT")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"INT")," are truncated. The rest is rounded if no specific precision/scale argument is available.")),(0,r.kt)("h3",{id:"convert-date-style-codes"},"CONVERT Date Style Codes"),(0,r.kt)("p",null,"Just as with data types - there are many style codes available. Here I will cover just the most popular ones (if you don't understand some formats codes, check ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#custom-date-formats"},"date formats guide"),"):"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Date format"),(0,r.kt)("th",{parentName:"tr",align:null},"Style code"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MMM dd yyyy hh:mmtt"),(0,r.kt)("td",{parentName:"tr",align:null},"100")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MM/dd/yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"101")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"yyyy.mm.dd"),(0,r.kt)("td",{parentName:"tr",align:null},"102")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"dd/mm/yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"103")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"dd.mm.yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"104")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"dd-mm-yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"105")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"dd MMM yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"106")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MMM dd, yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"107")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"HH:mm:ss"),(0,r.kt)("td",{parentName:"tr",align:null},"108")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MM-dd-yyyy"),(0,r.kt)("td",{parentName:"tr",align:null},"110")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"yyyy/MM/dd"),(0,r.kt)("td",{parentName:"tr",align:null},"111")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"yyyyMMdd"),(0,r.kt)("td",{parentName:"tr",align:null},"112")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"yyyy-MM-dd HH:mm:ss"),(0,r.kt)("td",{parentName:"tr",align:null},"120")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"MM/dd/yy hh:mm:ss tt"),(0,r.kt)("td",{parentName:"tr",align:null},"22")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"yyyy-mm-dd"),(0,r.kt)("td",{parentName:"tr",align:null},"23")))),(0,r.kt)("p",null,"Use it by adding the style code as the third argument of the ",(0,r.kt)("a",{parentName:"p",href:"#convert"},(0,r.kt)("inlineCode",{parentName:"a"},"CONVERT"))," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n CONVERT(NVARCHAR, GETDATE(), 101) AS DateAsString\n , CONVERT(DATETIME2, '2020-12-31 19:00:00', 120) AS StringAsDate\n")),(0,r.kt)("p",null,"You can find the full list of style codes on ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15#date-and-time-styles"},"Microsoft .Net Doc Pages"),"."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Date style codes should cover most scenarios, but it is possible to encounter a non-supported date format (for example: ",(0,r.kt)("inlineCode",{parentName:"p"},"27/12/2021 07:31:01"),"). In such a case, you have two options:"),(0,r.kt)("ol",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Change the format in the source")," - if possible, aligning the format to one of the supported date styles will be the best solution from the performance point of view."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Split conversion trick")," - if changing the format in the source is not possible, you can still enforce the conversion by splitting the string date and converting its parts.")),(0,r.kt)("p",{parentName:"admonition"},"For the second option, you have to find Date Style Codes within your string date and convert each separately. This can be easily done with ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions#left--right"},"LEFT & RIGHT")," functions."),(0,r.kt)("p",{parentName:"admonition"},"For example, the ",(0,r.kt)("inlineCode",{parentName:"p"},"27/12/2021 07:31:01")," string does not have a matching Date Style Code, but we can see that the date part matches Style Code 103 and the time part fits 108. With that, we can do the conversion:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"CONVERT(DATETIME, LEFT('27/12/2021 07:31:01', 10), 103) + CONVERT(DATETIME, RIGHT('27/12/2021 07:31:01', 8), 108) AS ConvertedDate\n")),(0,r.kt)("p",{parentName:"admonition"},"With ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions#left--right"},"LEFT & RIGHT")," functions we split the datetime on the space, then ",(0,r.kt)("a",{parentName:"p",href:"#convert"},"CONVERT")," each part to finally sum it into a single date that is equal to our original string."),(0,r.kt)("p",{parentName:"admonition"},"If you have specific parts of your date stored in separte fields, you can leverage ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-date-functions#datefromparts--datetimefromparts"},(0,r.kt)("inlineCode",{parentName:"a"},"DATETIMEFROMPARTS"))," function as well.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d4ed38e0.83ddf61b.js b/assets/js/d4ed38e0.83ddf61b.js new file mode 100644 index 000000000..c795438bd --- /dev/null +++ b/assets/js/d4ed38e0.83ddf61b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1441],{9875:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>a});var s=n(5893),r=n(1151),i=n(1872);const o={id:"sfmc-sql-conversion-functions",title:"SFMC SQL Conversion Functions",sidebar_label:"Conversion Functions",description:"Break from the limits of Data Extension data types. Use full power of SQL to control your values.",image:"img/og/og-image-sql-conversion-functions.png",tags:["Marketing Cloud","SQL"]},d=void 0,c={id:"sql/sfmc-sql-conversion-functions",title:"SFMC SQL Conversion Functions",description:"Break from the limits of Data Extension data types. Use full power of SQL to control your values.",source:"@site/docs/sql/sfmc-sql-conversion-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-conversion-functions",permalink:"/docs/sql/sfmc-sql-conversion-functions",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-conversion-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1696366762,formattedLastUpdatedAt:"Oct 3, 2023",frontMatter:{id:"sfmc-sql-conversion-functions",title:"SFMC SQL Conversion Functions",sidebar_label:"Conversion Functions",description:"Break from the limits of Data Extension data types. Use full power of SQL to control your values.",image:"img/og/og-image-sql-conversion-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Numeric Functions",permalink:"/docs/sql/sfmc-sql-numeric-functions"},next:{title:"Aggregate Functions",permalink:"/docs/sql/sfmc-sql-aggregate-functions"}},l={},a=[{value:"CAST & CONVERT",id:"cast--convert",level:2},{value:"CAST",id:"cast",level:3},{value:"CONVERT",id:"convert",level:3},{value:"Data Types",id:"data-types",level:3},{value:"CONVERT Date Style Codes",id:"convert-date-style-codes",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.m,{content:"Break from the limits of source data types. Use the full power of SQL to transform your values."}),"\n",(0,s.jsx)(t.p,{children:"Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries."}),"\n",(0,s.jsx)(t.p,{children:"Here, I will cover only selected conversion functions, that I find most useful for Marketing Automation purposes. They will help you change the value types to enable the use of type-based Salesforce Marketing Cloud User Interface elements and type-specific functions."}),"\n",(0,s.jsx)(t.h2,{id:"cast--convert",children:"CAST & CONVERT"}),"\n",(0,s.jsxs)(t.p,{children:["In Salesforce Marketing Cloud, you can use two universal conversion functions - ",(0,s.jsx)(t.code,{children:"CAST"})," and ",(0,s.jsx)(t.code,{children:"CONVERT"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"cast",children:"CAST"}),"\n",(0,s.jsxs)(t.p,{children:["The first one, ",(0,s.jsx)(t.code,{children:"CAST"}),", is straightforward and available in all SQL dialects:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'{3} title="Find all subscribers that joined after the given date"',children:"SELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE DateJoined > CAST('2020-10-30' AS DATE)\n"})}),"\n",(0,s.jsxs)(t.p,{children:["It takes a value and expected datatype with ",(0,s.jsx)(t.code,{children:"AS"})," operator in between."]}),"\n",(0,s.jsxs)(t.p,{children:["However, in Salesforce Marketing Cloud, it is much better to use ",(0,s.jsx)(t.code,{children:"CONVERT"})," function instead. It covers all features of ",(0,s.jsx)(t.code,{children:"CAST"})," plus adds quite a lot more. It is also better supported by the ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-basics#query-studio",children:"Query Studio"})," (for example, you cannot use ",(0,s.jsx)(t.code,{children:"CAST"})," in a ",(0,s.jsx)(t.code,{children:"SELECT"})," part of the query there)."]}),"\n",(0,s.jsx)(t.h3,{id:"convert",children:"CONVERT"}),"\n",(0,s.jsxs)(t.p,{children:["The basic form of ",(0,s.jsx)(t.code,{children:"CONVERT"})," is nearly the same as the ",(0,s.jsx)(t.code,{children:"CAST"})," with reversed order of arguments:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'{3} title="Find all subscribers that joined after the given date"',children:"SELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE DateJoined > CONVERT(DATE, '2020-10-30')\n"})}),"\n",(0,s.jsx)(t.p,{children:"With both functions you can stack functions within for more complex calculations:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'{2} title="Calculate the end of the trial period and output date only"',children:"SELECT CONVERT(DATE, DATEADD(MM, 1, GETUTCDATE())) AS TrialPeriodEndDate\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Up to this point, ",(0,s.jsx)(t.code,{children:"CAST"})," and ",(0,s.jsx)(t.code,{children:"CONVERT"})," seem similar in the features."]}),"\n",(0,s.jsxs)(t.p,{children:["However, only ",(0,s.jsx)(t.code,{children:"CONVERT"})," have an additional third optional argument - ",(0,s.jsx)(t.a,{href:"#convert-date-style-codes",children:"style"}),". Thanks to it, you can convert even from non-standard (for the server) formats that would result in an error:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:"{3} title=\"Converting dd/MM/yyyy format throws 'Could not convert date and/or time from string data type'\"",children:"SELECT SubscriberKey\nFROM _Subscribers\nWHERE DateJoined > CONVERT(DATE, '30/10/2019') /* Error */\n"})}),"\n",(0,s.jsxs)(t.p,{children:["With ",(0,s.jsx)(t.a,{href:"#convert-date-style-codes",children:"style codes"}),", we can make it work with minimal change:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'{3} title="Converting dd/MM/yyyy format with appropriate style code"',children:"SELECT SubscriberKey\nFROM _Subscribers\nWHERE DateJoined > CONVERT(DATE, '30/10/2019', 103)\n"})}),"\n",(0,s.jsxs)(t.p,{children:["It is not possible with ",(0,s.jsx)(t.code,{children:"CAST"}),"."]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["You can also leverage ",(0,s.jsx)(t.a,{href:"#convert-date-style-codes",children:"style codes"})," to format your dates during conversion to string, without the need to use ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-date-functions#format-with-dates",children:(0,s.jsx)(t.code,{children:"FORMAT"})})," function on top."]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"SELECT\n CONVERT(NVARCHAR, GETDATE(), 101) AS DateFormat1 /* Output: 10/30/2020 */\n , CONVERT(NVARCHAR, GETDATE(), 102) AS DateFormat2 /* Output: 2020.10.30 */\n , CONVERT(NVARCHAR, GETDATE(), 107) AS DateFormat3 /* Output: Oct 30, 2020 */\n"})})]}),"\n",(0,s.jsx)(t.h3,{id:"data-types",children:"Data Types"}),"\n",(0,s.jsx)(t.p,{children:"There are over 30 data types available for conversion, but there are only a few that are useful on a day-to-day basis in Salesforce Marketing Cloud:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Data Type"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Comment"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"CHAR"}),(0,s.jsx)(t.td,{children:"Fixed-length string"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"NCHAR"}),(0,s.jsx)(t.td,{children:"Fixed-length string with Unicode support"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"VARCHAR"}),(0,s.jsx)(t.td,{children:"Variable-length string"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"NVARCHAR"}),(0,s.jsx)(t.td,{children:"Variable-length string with Unicode support"}),(0,s.jsx)(t.td,{children:"Best option for most SFMC string use cases"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DECIMAL/NUMERIC"}),(0,s.jsx)(t.td,{children:"Decimal number with big precision"}),(0,s.jsx)(t.td,{children:"Best option if you need a decimal number"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"INT"}),(0,s.jsx)(t.td,{children:"Integer number"}),(0,s.jsx)(t.td,{children:"Best option if your number is not decimal"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"BIGINT"}),(0,s.jsx)(t.td,{children:"Big integer number"}),(0,s.jsx)(t.td,{children:"When your number is bigger than 2,147,483,647, you need BIGINT"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DATETIME"}),(0,s.jsx)(t.td,{children:"Legacy date and time"}),(0,s.jsx)(t.td,{children:"More friendly default formatting"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DATETIME2"}),(0,s.jsx)(t.td,{children:"Modern date and time"}),(0,s.jsx)(t.td,{children:"Best when you need both date and time"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DATETIMEOFFSET"}),(0,s.jsx)(t.td,{children:"Date with offset"}),(0,s.jsx)(t.td,{children:"When you need timezone offset"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"DATE"}),(0,s.jsx)(t.td,{children:"Only date"}),(0,s.jsx)(t.td,{children:"Best when you need date only"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"TIME"}),(0,s.jsx)(t.td,{children:"Only time"}),(0,s.jsx)(t.td,{children:"Best when you need time only"})]})]})]}),"\n",(0,s.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,s.jsxs)(t.p,{children:["There are also two more data types: ",(0,s.jsx)(t.code,{children:"FLOAT"})," and ",(0,s.jsx)(t.code,{children:"REAL"}),". Don't use them. Both are ",(0,s.jsx)(t.strong,{children:"Approximate"})," Numeric Data Types and can lead to unpredicted behaviour, especially when used for equality-based conditions in ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-where",children:(0,s.jsx)(t.code,{children:"WHERE"})}),". ",(0,s.jsx)(t.code,{children:"DECIMAL"}),"/",(0,s.jsx)(t.code,{children:"NUMERIC"})," is the way to go."]})}),"\n",(0,s.jsx)(t.p,{children:"When converting values to the selected data type, you can have even more control by passing optional argument right after type to declare the length of the output."}),"\n",(0,s.jsxs)(t.p,{children:["It is instrumental with ",(0,s.jsx)(t.code,{children:"DECIMAL"})," as it allows you to provide expected precision (number of digits in a number) and scale (number of digits to the right of the decimal point in a number)."]}),"\n",(0,s.jsxs)(t.p,{children:["For example, you may have a string field containing a product price - ",(0,s.jsx)(t.code,{children:"'123.99'"}),". If you convert it to ",(0,s.jsx)(t.code,{children:"DECIMAL"})," without any arguments, it will round to ",(0,s.jsx)(t.code,{children:"124"}),". However, you can provide precision and scale to keep the current format:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"SELECT\n CONVERT(DECIMAL, '123.99') AS RoundedConversion /* Output: 124 */\n , CONVERT(DECIMAL(5,2), '123.99') AS FullConversion /* Output: 123.99 */\n"})}),"\n",(0,s.jsx)(t.p,{children:"Be sure to add correct precision. If it is smaller then the values in your source, it will lead to an error. It's better to have too big precision than too small."}),"\n",(0,s.jsx)(t.p,{children:"As for scale - if your scale is smaller than in your source, the value is rounded."}),"\n",(0,s.jsxs)(t.p,{children:["You can also use the single argument with ",(0,s.jsx)(t.code,{children:"DATETIME"}),", ",(0,s.jsx)(t.code,{children:"DATETIME2"}),", ",(0,s.jsx)(t.code,{children:"DATETIMEOFFSET"})," (to control precision of the output) and string data types (",(0,s.jsx)(t.code,{children:"CHAR"}),", ",(0,s.jsx)(t.code,{children:"NCHAR"}),", ",(0,s.jsx)(t.code,{children:"VARCHAR"}),", ",(0,s.jsx)(t.code,{children:"NVARCHAR"}),"). The latter won't directly limit the number of characters, but rather the number of bytes (which might be equal or not to the number of characters depending on what characters you are using)."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"CHAR"})," allows for 1-8000 bytes range, whereas ",(0,s.jsx)(t.code,{children:"NCHAR"})," due to Unicode support allows for only 1-4000. ",(0,s.jsx)(t.code,{children:"VARCHAR"})," and ",(0,s.jsx)(t.code,{children:"NVARCHAR"})," support the same ranges respectively and have an additional possible option - ",(0,s.jsx)(t.code,{children:"max"})," that you can use if some values might exceed the range."]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsx)(t.p,{children:"Always double-check the choice of data type you want to convert to, as it might have a massive impact into outcome."}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",metastring:'title="Different outcomes depending on the output data type"',children:"SELECT\n CAST(6.9 AS INT) AS CastToInt /* Output: 6 */\n , CAST(6.9 AS DECIMAL) AS CastToNumeric /* Output: 7 */\n , CONVERT(INT, 6.9) AS ConvertToInt /* Output: 6 */\n , CONVERT(DECIMAL, 6.9) AS ConvertToNumeric /* Output: 7 */\n"})}),(0,s.jsxs)(t.p,{children:["It is happening because conversions from ",(0,s.jsx)(t.code,{children:"DECIMAL"})," or ",(0,s.jsx)(t.code,{children:"FLOAT"})," to ",(0,s.jsx)(t.code,{children:"INT"})," are truncated. The rest is rounded if no specific precision/scale argument is available."]})]}),"\n",(0,s.jsx)(t.h3,{id:"convert-date-style-codes",children:"CONVERT Date Style Codes"}),"\n",(0,s.jsxs)(t.p,{children:["Just as with data types - there are many style codes available. Here I will cover just the most popular ones (if you don't understand some formats codes, check ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-date-functions#custom-date-formats",children:"date formats guide"}),"):"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Date format"}),(0,s.jsx)(t.th,{children:"Style code"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["MMM dd yyyy hh",":mmtt"]}),(0,s.jsx)(t.td,{children:"100"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"MM/dd/yyyy"}),(0,s.jsx)(t.td,{children:"101"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"yyyy.mm.dd"}),(0,s.jsx)(t.td,{children:"102"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dd/mm/yyyy"}),(0,s.jsx)(t.td,{children:"103"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dd.mm.yyyy"}),(0,s.jsx)(t.td,{children:"104"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dd-mm-yyyy"}),(0,s.jsx)(t.td,{children:"105"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dd MMM yyyy"}),(0,s.jsx)(t.td,{children:"106"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"MMM dd, yyyy"}),(0,s.jsx)(t.td,{children:"107"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["HH:mm",":ss"]}),(0,s.jsx)(t.td,{children:"108"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"MM-dd-yyyy"}),(0,s.jsx)(t.td,{children:"110"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"yyyy/MM/dd"}),(0,s.jsx)(t.td,{children:"111"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"yyyyMMdd"}),(0,s.jsx)(t.td,{children:"112"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["yyyy-MM-dd HH:mm",":ss"]}),(0,s.jsx)(t.td,{children:"120"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["MM/dd/yy hh:mm",":ss"," tt"]}),(0,s.jsx)(t.td,{children:"22"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"yyyy-mm-dd"}),(0,s.jsx)(t.td,{children:"23"})]})]})]}),"\n",(0,s.jsxs)(t.p,{children:["Use it by adding the style code as the third argument of the ",(0,s.jsx)(t.a,{href:"#convert",children:(0,s.jsx)(t.code,{children:"CONVERT"})})," function:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"SELECT\n CONVERT(NVARCHAR, GETDATE(), 101) AS DateAsString\n , CONVERT(DATETIME2, '2020-12-31 19:00:00', 120) AS StringAsDate\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can find the full list of style codes on ",(0,s.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15#date-and-time-styles",children:"Microsoft .Net Doc Pages"}),"."]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["Date style codes should cover most scenarios, but it is possible to encounter a non-supported date format (for example: ",(0,s.jsx)(t.code,{children:"27/12/2021 07:31:01"}),"). In such a case, you have two options:"]}),(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Change the format in the source"})," - if possible, aligning the format to one of the supported date styles will be the best solution from the performance point of view."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Split conversion trick"})," - if changing the format in the source is not possible, you can still enforce the conversion by splitting the string date and converting its parts."]}),"\n"]}),(0,s.jsxs)(t.p,{children:["For the second option, you have to find Date Style Codes within your string date and convert each separately. This can be easily done with ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-string-functions#left--right",children:"LEFT & RIGHT"})," functions."]}),(0,s.jsxs)(t.p,{children:["For example, the ",(0,s.jsx)(t.code,{children:"27/12/2021 07:31:01"})," string does not have a matching Date Style Code, but we can see that the date part matches Style Code 103 and the time part fits 108. With that, we can do the conversion:"]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-sql",children:"CONVERT(DATETIME, LEFT('27/12/2021 07:31:01', 10), 103) + CONVERT(DATETIME, RIGHT('27/12/2021 07:31:01', 8), 108) AS ConvertedDate\n"})}),(0,s.jsxs)(t.p,{children:["With ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-string-functions#left--right",children:"LEFT & RIGHT"})," functions we split the datetime on the space, then ",(0,s.jsx)(t.a,{href:"#convert",children:"CONVERT"})," each part to finally sum it into a single date that is equal to our original string."]}),(0,s.jsxs)(t.p,{children:["If you have specific parts of your date stored in separte fields, you can leverage ",(0,s.jsx)(t.a,{href:"/docs/sql/sfmc-sql-date-functions#datefromparts--datetimefromparts",children:(0,s.jsx)(t.code,{children:"DATETIMEFROMPARTS"})})," function as well."]})]})]})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>i});n(7294);const s="leadText_qzwo";var r=n(5893);const i=e=>{let{content:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:s,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>o});var s=n(7294);const r={},i=s.createContext(r);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d5687ba7.6c478ae9.js b/assets/js/d5687ba7.6c478ae9.js deleted file mode 100644 index bf5f04c54..000000000 --- a/assets/js/d5687ba7.6c478ae9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7207],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||c[m]||i;return n?a.createElement(h,r(r({ref:t},d),{},{components:n})):a.createElement(h,r({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>i});var a=n(7294);const o="leadText_qzwo",i=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:o},t))}},8145:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(4137)),i=n(1872);const r={id:"ssjs-style-guide",title:"SSJS Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ssjs-style-guide.png",tags:["Marketing Cloud","SSJS","Style Guide","Best Practice"]},s=void 0,l={unversionedId:"ssjs/ssjs-style-guide",id:"ssjs/ssjs-style-guide",title:"SSJS Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",source:"@site/docs/ssjs/ssjs-style-guide.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-style-guide",permalink:"/docs/ssjs/ssjs-style-guide",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-style-guide.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Style Guide",permalink:"/docs/tags/style-guide"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1634736209,formattedLastUpdatedAt:"Oct 20, 2021",frontMatter:{id:"ssjs-style-guide",title:"SSJS Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ssjs-style-guide.png",tags:["Marketing Cloud","SSJS","Style Guide","Best Practice"]},sidebar:"docs",previous:{title:"Debugging & Error Handling",permalink:"/docs/ssjs/debugging-ssjs"},next:{title:"Performance",permalink:"/docs/ssjs/ssjs-vs-ampscript-performance"}},p={},d=[{value:"Naming Convention",id:"naming-convention",level:2},{value:"Meaningful Names",id:"meaningful-names",level:3},{value:"Variable Names",id:"variable-names",level:4},{value:"Function Names",id:"function-names",level:4},{value:"JS Variables, Functions & Methods Letter Case",id:"js-variables-functions--methods-letter-case",level:3},{value:"SSJS Functions Letter Case",id:"ssjs-functions-letter-case",level:3},{value:"Alignment and Indentation",id:"alignment-and-indentation",level:2},{value:"Expanded Syntax",id:"expanded-syntax",level:3},{value:"Consistent Indentation",id:"consistent-indentation",level:3},{value:"Intentional Spacing",id:"intentional-spacing",level:3},{value:"Debatable Styles",id:"debatable-styles",level:2},{value:"Semicolons",id:"semicolons",level:3},{value:"Consistent Quotes",id:"consistent-quotes",level:3},{value:"Comments",id:"comments",level:2},{value:"1. Table of Contents Comment",id:"1-table-of-contents-comment",level:3},{value:"2. Section Comments",id:"2-section-comments",level:3},{value:"3. Documentation Comments",id:"3-documentation-comments",level:3},{value:"Sum Up",id:"sum-up",level:2}],u={toc:d},c="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(i.m,{content:"Script with style. Readable code is a few rules & conventions away.",mdxType:"LeadText"}),(0,o.kt)("p",null,"First things first: this Salesforce Marketing Cloud SSJS style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Be consistent across your codebase."),(0,o.kt)("li",{parentName:"ol"},"Strive for good readability.")),(0,o.kt)("p",null,"Everything else is preference. And you are just about to learn about mine."),(0,o.kt)("h2",{id:"naming-convention"},"Naming Convention"),(0,o.kt)("p",null,"SSJS gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity."),(0,o.kt)("h3",{id:"meaningful-names"},"Meaningful Names"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Use descriptive names to provide context.")),(0,o.kt)("p",null,"As ",(0,o.kt)("a",{parentName:"p",href:"https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1"},"John F. Woods")," said, ",(0,o.kt)("inlineCode",{parentName:"p"},"always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"),". Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project."),(0,o.kt)("p",null,"Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your SSJS better with meaningful variable and function names."),(0,o.kt)("h4",{id:"variable-names"},"Variable Names"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Use descriptive variable names. It is better to have a long explicit one (",(0,o.kt)("inlineCode",{parentName:"li"},"isTrackingSuppressed"),") than a short mysterious abbreviation (",(0,o.kt)("inlineCode",{parentName:"li"},"trk"),")."),(0,o.kt)("li",{parentName:"ol"},"When the variable is a boolean, prefix it with ",(0,o.kt)("inlineCode",{parentName:"li"},"is")," (or ",(0,o.kt)("inlineCode",{parentName:"li"},"has"),"/",(0,o.kt)("inlineCode",{parentName:"li"},"does"),"/",(0,o.kt)("inlineCode",{parentName:"li"},"are")," depending on the underlying data)."),(0,o.kt)("li",{parentName:"ol"},"When the variable is a date, suffix it with ",(0,o.kt)("inlineCode",{parentName:"li"},"Date"),"."),(0,o.kt)("li",{parentName:"ol"},"When the variable is an array, use a plural name (",(0,o.kt)("inlineCode",{parentName:"li"},"optIns"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"favouriteProductCategories"),").")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Descriptive and suggesting boolean data type */\nvar isTrackingSuppressed = false;\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nvar value = false;\n\n/* \u2705 Descriptive and suggesting date data type */\nvar trackingSupressionStartDate = new Date();\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nvar supressed = new Date();\n")),(0,o.kt)("h4",{id:"function-names"},"Function Names"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Use descriptive function names. It is better to have a long explicit one (",(0,o.kt)("inlineCode",{parentName:"li"},"getEmailAddress"),") than a short mysterious abbreviation (",(0,o.kt)("inlineCode",{parentName:"li"},"geteml"),"). Think how you can add as much information as possible, without adding unnecessary bits (",(0,o.kt)("inlineCode",{parentName:"li"},"lookupContactBySubscriberKey")," vs ",(0,o.kt)("inlineCode",{parentName:"li"},"lookupAvailableContactBySubscriberKeyFromDataExtension"),")."),(0,o.kt)("li",{parentName:"ol"},"Use a verb (",(0,o.kt)("inlineCode",{parentName:"li"},"get"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"post"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"update"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"send"),") as the first part of the name to tell what the function is doing."),(0,o.kt)("li",{parentName:"ol"},"Apply ",(0,o.kt)("a",{parentName:"li",href:"#variable-names"},"variable naming rules")," to the parameters - leave single-letter names for minifiers.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Both function name and parameters are descriptive */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/* \u274c Neither function name nor parameters are descriptive */\nfunction write(d, v) {\n Write(d + ': ' + (typeof v == 'object' ? Stringify(v) : v) + '<br><br>');\n};\n")),(0,o.kt)("h3",{id:"js-variables-functions--methods-letter-case"},"JS Variables, Functions & Methods Letter Case"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Use ",(0,o.kt)("inlineCode",{parentName:"strong"},"camelCase")," for all elements of JS syntax.")),(0,o.kt)("p",null,"The first category of the building blocks in your code will be JavaScript (ECMAScript 3 in case of SSJS) native elements. Variables (",(0,o.kt)("inlineCode",{parentName:"p"},"var")," only), functions (no array goodies), and methods."),(0,o.kt)("p",null,"For all of those I'm using ",(0,o.kt)("inlineCode",{parentName:"p"},"camelCase"),". It's the most popular convetion, so it will make it easier to work with other programmers, leverage code snippets and onboard new-to-SSJS people to SFMC development."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 camelCase for JS syntax */\nvar variableName = 'Hello World';\nfunction functionName(variableName) {\n return variableName.toLowerCase();\n};\n\n/* \u274c Random case */\nvar VARIABLENAME = 'Hello World';\nfunction FunctionName(variableName) {\n return variableName.tolowercase();\n};\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"JavaScript variables are case sensitive. ",(0,o.kt)("inlineCode",{parentName:"p"},"Name")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"name")," are two different variables that can have different values, so it's critically important to have a stable convention.")),(0,o.kt)("h3",{id:"ssjs-functions-letter-case"},"SSJS Functions Letter Case"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Use ",(0,o.kt)("inlineCode",{parentName:"strong"},"PascalCase")," for all elements of SSJS syntax.")),(0,o.kt)("p",null,"I take a different approach when working with SSJS Functions from both Platform and Core libraries. For any element coming from those, I use ",(0,o.kt)("inlineCode",{parentName:"p"},"PascalCase"),"."),(0,o.kt)("p",null,"Not only it allows to differentiate JavaScript native and SFMC custom elements, but it also follows the official SSJS documentation (and therefore most of the snippets you might find)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 PamelCase for JS syntax */\nPlatform.Load('Core', '1');\nvar dataExtension = DataExtension.Retrieve({\n Property: 'CustomerKey',\n SimpleOperator: 'equals',\n Value: 'dataExtensionExternalKey'\n});\n\n/* \u274c Random case */\nPLATFORM.LOAD('Core', '1');\nvar dataExtension = dataextensions.retrieve({\n Property: 'CustomerKey',\n SimpleOperator: 'equals',\n Value: 'dataExtensionExternalKey'\n});\n")),(0,o.kt)("h2",{id:"alignment-and-indentation"},"Alignment and Indentation"),(0,o.kt)("p",null,"Letter case is just one element of syntax convention that helps with readability. Another huge one is alignment and indentation. JavaScript requires neither, but both can help you write better code."),(0,o.kt)("h3",{id:"expanded-syntax"},"Expanded Syntax"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Sparse is better than dense.")),(0,o.kt)("p",null,"Readability counts. Having fewer lines is not worth the mental gymnastics required to read a condensed code. It is also much easier to find unclosed brackets."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Expanded Variable Syntax */\nvar debugging = {\n request: true,\n response: true,\n error: true\n};\n\n/* \u274c Condensed Variable Syntax */\nvar debugging = { request: true, response: true, error: true };\n\n/* \u2705 Expanded Function Syntax */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/* \u274c Condensed Function Syntax */\nfunction debugValue(description, value) { Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>'); };\n\n/* \u2705 Expanded Try/Catch Syntax */\ntry {\n var response = HTTP.Get('http://www.example.c');\n} catch (error) {\n handleError(error);\n};\n\n/* \u274c Condensed Try/Catch Syntax */\ntry { var response = HTTP.Get('http://www.example.c'); } catch (error) { handleError(error); };\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"I have two exceptions to this rule - both related to ",(0,o.kt)("inlineCode",{parentName:"p"},"if")," statement shorthands."),(0,o.kt)("ol",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ol"},"Ternary operator")),(0,o.kt)("p",{parentName:"admonition"},"Ternary simplifies basic ",(0,o.kt)("inlineCode",{parentName:"p"},"if"),"/",(0,o.kt)("inlineCode",{parentName:"p"},"else")," statements, and when used correctly, it should be readable in a single line. If you fear it might be hard to understand, you probably shouldn't use the ternary operator in the first place."),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Condensed Ternary Syntax */\ntypeof value == 'object' ? Stringify(value) : value;\n\n/* \u274c Expanded Ternary Syntax */\ntypeof value == 'object'\n ? Stringify(value)\n : value;\n\n/* \u274c Too Complex for Ternary Syntax */\ndebugging ? debugValue(error) : Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);\n")),(0,o.kt)("ol",{parentName:"admonition",start:2},(0,o.kt)("li",{parentName:"ol"},"Single line ",(0,o.kt)("inlineCode",{parentName:"li"},"if")," statements.")),(0,o.kt)("p",{parentName:"admonition"},"Similarly to ternary, single-line if statements also should be used only for basic ",(0,o.kt)("inlineCode",{parentName:"p"},"if")," statements. Whenever there is any complexity (be it ",(0,o.kt)("inlineCode",{parentName:"p"},"else")," statement or just a longer case body), I always go with the expanded syntax."),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Condensed Shorthand If Syntax */\nif (debugging) debugValue(error);\n\n/* \u2705 Expanded Standard If Syntax */\nif (debugging) {\n debugValue(error);\n} else {\n Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);\n};\n\n/* \u274c Too Complex for Shorthand If Syntax */\nif (response.StatusCode == 200) { var parsedResponse = Platform.Function.ParseJSON(String(response.Response)); if (!parsedResponse.success) throw 'Wrong reCAPTCHA'; };\n")),(0,o.kt)("p",{parentName:"admonition"},"It's up to you to decide how complex is too complex. Whenever in doubt - use expanded syntax.")),(0,o.kt)("h3",{id:"consistent-indentation"},"Consistent Indentation"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Use indentation to highlight code relationships.")),(0,o.kt)("p",null,"This rule extends the expanded syntax guide. Don't stop at expanding. Indent. It will help you quickly understand the relationships between the code lines."),(0,o.kt)("p",null,"The easy way to implement correct identation is to add a level whenever you open curly bracket and remove one whenever you close it. However, sometimes readability can be improved with even more identation, for example within expanded array."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Indented Syntax */\nfor (var i = 0; i < response.length - 1; i++) {\n var responseRowData = response[i].split(',');\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n });\n};\n\n/* \u274c Flat Syntax */\nfor (var i = 0; i < response.length - 1; i++) {\nvar responseRowData = response[i].split(',');\ncampaignData.push({\nname: responseRowData[0],\nid: responseRowData[1],\nstartDate: responseRowData[2],\nendDate: responseRowData[3]\n});\n};\n")),(0,o.kt)("admonition",{title:"You Should Know",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click.")),(0,o.kt)("h3",{id:"intentional-spacing"},"Intentional Spacing"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Use spaces wherever it makes the code more readable.")),(0,o.kt)("p",null,"To visually separate elements, use spaces:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Around operators."),(0,o.kt)("li",{parentName:"ul"},"Before opening curly bracket and after closing curly bracket."),(0,o.kt)("li",{parentName:"ul"},"After commas."),(0,o.kt)("li",{parentName:"ul"},"After keywords (",(0,o.kt)("inlineCode",{parentName:"li"},"if"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"while"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"function"),", etc.).")),(0,o.kt)("p",null,"To provide important context, don't add spaces:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"After opening and before closing non-curly brackets."),(0,o.kt)("li",{parentName:"ul"},"Between function name and arguments.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Intentional spacing */\nif (response.StatusCode != 200) {\n throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'}\n};\n\n/* \u274c Lack of spacing */\nif(response.StatusCode!=200){\n throw{'message':'HTTP.Get Error','description':'Could not connect to example.com'}\n};\n\n/* \u2705 Intentional spacing */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/* \u274c Wrong spacing */\nfunction debugValue ( description, value ) {\n Write ( description + ': ' + ( typeof value == 'object' ? Stringify( value ) : value ) + '<br><br>' );\n};\n")),(0,o.kt)("h2",{id:"debatable-styles"},"Debatable Styles"),(0,o.kt)("p",null,"Apart from letter case and indentation, some additional style rules are important to consider. Multiple arguments favour various conventions, so feel free not to follow my recommendation as long as you stay consistent across your code."),(0,o.kt)("h3",{id:"semicolons"},"Semicolons"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Add a semicolon after each statement.")),(0,o.kt)("p",null,"The semicolons in JavaScript are optional. You can do without them entirely. But I prefer to use them. Why?"),(0,o.kt)("p",null,"If you do not use semicolons, JS will add them for you using Automatic Semicolon Injection (ASI). In most cases, it works perfectly, but there might be some situations where the outcome is not what you expected. And that will lead to a very long and frustrating debugging session. If you want to think about ASI when writing, you may ignore semicolons."),(0,o.kt)("p",null,"If you don't want to worry about ASI, per JS language specification, you should:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Mark the end of your simple statements with a semicolon ",(0,o.kt)("inlineCode",{parentName:"li"},";"),". Think variable declarations and operations."),(0,o.kt)("li",{parentName:"ul"},"Don't end complex statements with a semicolon. Think ",(0,o.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-if-and-switch#if-statements"},(0,o.kt)("inlineCode",{parentName:"a"},"if"))," statements, ",(0,o.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-loops"},"loops"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"functions"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"try/catch")," blocks."),(0,o.kt)("li",{parentName:"ul"},"But... you need a semicolon after the ",(0,o.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-loops#do-while"},(0,o.kt)("inlineCode",{parentName:"a"},"do/while")," loop"),". Because JavaScript (and yeah, it is different from ",(0,o.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-loops#while"},(0,o.kt)("inlineCode",{parentName:"a"},"while")," loop")," when considering the statement blocks). Oh, and you will need to add them in your ",(0,o.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-loops#for"},(0,o.kt)("inlineCode",{parentName:"a"},"for")," loop")," iteration rules.")),(0,o.kt)("p",null,"That's also a bit to digest and worry about when writing the code. Let's simplify it."),(0,o.kt)("p",null,"While you don't ",(0,o.kt)("strong",{parentName:"p"},"need")," a semicolon after complex statements, it won't hurt. It can even help you if you plan to minify the code. So, to make it straightforward and fail-safe, I recommend adding it after each statement."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Keep calm and spam semicolons"',title:'"Keep',calm:!0,and:!0,spam:!0,'semicolons"':!0},"/* \u2705 Semicolons everywhere */\nfor (var i = 0; i < response.length - 1; i++) {\n var responseRowData = response[i].split(',');\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n });\n};\n\n/* \u274c No semicolons - this will crash due to no semicolons between for iteration rules */\nfor (var i = 0 i < response.length - 1 i++) {\n var responseRowData = response[i].split(',')\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n })\n}\n")),(0,o.kt)("h3",{id:"consistent-quotes"},"Consistent Quotes"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Use single quote style.")),(0,o.kt)("p",null,"With SSJS, you can use either single quotes (",(0,o.kt)("inlineCode",{parentName:"p"},"'"),") or double quotes (",(0,o.kt)("inlineCode",{parentName:"p"},'"'),"). Don't follow the random approach of Salesforce SSJS documentation - choose one and be consistent."),(0,o.kt)("p",null,"I prefer single quotes for SSJS:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML."),(0,o.kt)("li",{parentName:"ol"},"On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster.")),(0,o.kt)("p",null,"However, there are also arguments for double quotes:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"There are many English words using apostrophes, and using double quotes means no need to escape them."),(0,o.kt)("li",{parentName:"ol"},"JSON requires double quotes.")),(0,o.kt)("p",null,"In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Single Quotes */\nif (response.StatusCode != 200) {\n throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};\n};\n\n/* \u2705 Double Quotes */\nif (response.StatusCode != 200) {\n throw {\"message\": \"HTTP.Get Error\", \"description\": \"Could not connect to example.com\"};\n};\n\n/* \u274c Mixed Quotes */\nif (response.StatusCode != 200) {\n throw {'message': \"HTTP.Get Error\", 'description': \"Could not connect to example.com\"};\n};\n")),(0,o.kt)("h2",{id:"comments"},"Comments"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Code tells you how. Comments tell you why.")," - ",(0,o.kt)("a",{parentName:"p",href:"https://blog.codinghorror.com/code-tells-you-how-comments-tell-you-why/"},"Jeff Atwood")),(0,o.kt)("p",null,"To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks."),(0,o.kt)("p",null,"Whenever you build more complex SSJS code, I recommend using at least three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough."),(0,o.kt)("h3",{id:"1-table-of-contents-comment"},"1. Table of Contents Comment"),(0,o.kt)("p",null,"The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script."),(0,o.kt)("p",null,"Before even starting to write SSJS, describe the desired outcome and steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation."),(0,o.kt)("p",null,"As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* ---------------------------------------------------------------------\n\nAuthenticates each visitor to limit access only to SFMC logged-in users.\n\n1. Global Variables - should be updated for each implementation\n2. Helper Functions\n 2.1. Error handling\n3. Authentication Flow\n 3.1. Authorisation\n 3.2. Authentication with REST Token\n 3.2.1. Upsert Logging Data Extension\n\n--------------------------------------------------------------------- */\n")),(0,o.kt)("h3",{id:"2-section-comments"},"2. Section Comments"),(0,o.kt)("p",null,"To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts."),(0,o.kt)("p",null,"For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/* ----------------------------------------------------------------------- */\n/* ------------------------- 1. GLOBAL VARIABLES ------------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ----------------------------------------------------------------------- */\n/* ------------------------- 2. HELPER FUNCTIONS ------------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ------------------------- 2.1. Error handling ------------------------- */\n\n/* ----------------------------------------------------------------------- */\n/* ------------------------- 3. AUTHENTICATION FLOW ---------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ------------------------- 3.1. Authorisation -------------------------- */\n\n/* ------------------------- 3.2. Authentication ------------------------- */\n\n/* 3.2.1. Build token request payload */\n")),(0,o.kt)("h3",{id:"3-documentation-comments"},"3. Documentation Comments"),(0,o.kt)("p",null,"Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments."),(0,o.kt)("p",null,"You should use one for every custom function you create, but it might also benefit variables (especially those with values coming from an API response). Rule of thumb - add them whenever someone else reading your code for the first time would ask a question about context or purpose."),(0,o.kt)("p",null,"I recommend using ",(0,o.kt)("a",{parentName:"p",href:"https://jsdoc.app/index.html"},"JSDoc")," for few reasons:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"It's a popular standard."),(0,o.kt)("li",{parentName:"ol"},"It provides recommendations on what to add to the comment."),(0,o.kt)("li",{parentName:"ol"},"Many code editors will help you write it and highlight its syntax."),(0,o.kt)("li",{parentName:"ol"},"Marketing Cloud ecosystem already leverages it in Interaction Studio.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"/**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/**\n * ClientID of SFMC Installed Package required for API calls\n * @type {string}\n * @const\n */\nvar clientID = 'CLIENT_ID';\n\n/**\n * Authentication GUID passed as a query string through SSO redirect\n * @type {string}\n */\nvar state = Platform.Request.GetQueryStringParameter('state');\n")),(0,o.kt)("p",null,"If you find it too complex, feel free to make it simpler, as long as your approach:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"describes context and purpose and"),(0,o.kt)("li",{parentName:"ol"},"is consistent across the codebase.")),(0,o.kt)("h2",{id:"sum-up"},"Sum Up"),(0,o.kt)("p",null,"It is a long article, so let's gather all the recommendations in one place:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Be consistent"),(0,o.kt)("li",{parentName:"ol"},"Strive for readability"),(0,o.kt)("li",{parentName:"ol"},"Use descriptive names to provide context ",(0,o.kt)("a",{parentName:"li",href:"#meaningful-names"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Use ",(0,o.kt)("inlineCode",{parentName:"li"},"camelCase")," for all elements of JS syntax ",(0,o.kt)("a",{parentName:"li",href:"#js-variables-functions--methods-case"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Use ",(0,o.kt)("inlineCode",{parentName:"li"},"PascalCase")," for all elements of SSJS syntax ",(0,o.kt)("a",{parentName:"li",href:"#ssjs-functions-case"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Sparse is better than dense ",(0,o.kt)("a",{parentName:"li",href:"#expanded-syntax"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Use indentation to highlight code relationships ",(0,o.kt)("a",{parentName:"li",href:"#consistent-indentation"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Use spaces wherever it makes the code more readable ",(0,o.kt)("a",{parentName:"li",href:"#intentional-spacing"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Add a semicolon after each statement ",(0,o.kt)("a",{parentName:"li",href:"#semicolons"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Use single quote style ",(0,o.kt)("a",{parentName:"li",href:"#consistent-quotes"},"\ud83d\udd17")),(0,o.kt)("li",{parentName:"ol"},"Use comments to provide required context to your script ",(0,o.kt)("a",{parentName:"li",href:"#comments"},"\ud83d\udd17"))),(0,o.kt)("p",null,"If you want to share something I'm missing or have arguments for a different recommendation - ",(0,o.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/mateusz-dabrowski-marketing/"},"let me know"),"."),(0,o.kt)("p",null,"Looking for more Marketing Cloud style? Check out my:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/ampscript/ampscript-style-guide"},"AMPScript Style Guide")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-style-guide"},"SFMC SQL Style Guide"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d5687ba7.860b7216.js b/assets/js/d5687ba7.860b7216.js new file mode 100644 index 000000000..0c9f0a028 --- /dev/null +++ b/assets/js/d5687ba7.860b7216.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7207],{7604:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var s=t(5893),o=t(1151),i=t(1872);const a={id:"ssjs-style-guide",title:"SSJS Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ssjs-style-guide.png",tags:["Marketing Cloud","SSJS","Style Guide","Best Practice"]},r=void 0,l={id:"ssjs/ssjs-style-guide",title:"SSJS Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",source:"@site/docs/ssjs/ssjs-style-guide.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-style-guide",permalink:"/docs/ssjs/ssjs-style-guide",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-style-guide.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Style Guide",permalink:"/docs/tags/style-guide"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1634736209,formattedLastUpdatedAt:"Oct 20, 2021",frontMatter:{id:"ssjs-style-guide",title:"SSJS Style Guide",sidebar_label:"Style Guide",description:"Script with style. Readable code is a few rules & best practices away.",image:"img/og/og-image-ssjs-style-guide.png",tags:["Marketing Cloud","SSJS","Style Guide","Best Practice"]},sidebar:"docs",previous:{title:"Debugging & Error Handling",permalink:"/docs/ssjs/debugging-ssjs"},next:{title:"Performance",permalink:"/docs/ssjs/ssjs-vs-ampscript-performance"}},d={},c=[{value:"Naming Convention",id:"naming-convention",level:2},{value:"Meaningful Names",id:"meaningful-names",level:3},{value:"Variable Names",id:"variable-names",level:4},{value:"Function Names",id:"function-names",level:4},{value:"JS Variables, Functions & Methods Letter Case",id:"js-variables-functions--methods-letter-case",level:3},{value:"SSJS Functions Letter Case",id:"ssjs-functions-letter-case",level:3},{value:"Alignment and Indentation",id:"alignment-and-indentation",level:2},{value:"Expanded Syntax",id:"expanded-syntax",level:3},{value:"Consistent Indentation",id:"consistent-indentation",level:3},{value:"Intentional Spacing",id:"intentional-spacing",level:3},{value:"Debatable Styles",id:"debatable-styles",level:2},{value:"Semicolons",id:"semicolons",level:3},{value:"Consistent Quotes",id:"consistent-quotes",level:3},{value:"Comments",id:"comments",level:2},{value:"1. Table of Contents Comment",id:"1-table-of-contents-comment",level:3},{value:"2. Section Comments",id:"2-section-comments",level:3},{value:"3. Documentation Comments",id:"3-documentation-comments",level:3},{value:"Sum Up",id:"sum-up",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.m,{content:"Script with style. Readable code is a few rules & conventions away."}),"\n",(0,s.jsx)(n.p,{children:"First things first: this Salesforce Marketing Cloud SSJS style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Be consistent across your codebase."}),"\n",(0,s.jsx)(n.li,{children:"Strive for good readability."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Everything else is preference. And you are just about to learn about mine."}),"\n",(0,s.jsx)(n.h2,{id:"naming-convention",children:"Naming Convention"}),"\n",(0,s.jsx)(n.p,{children:"SSJS gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity."}),"\n",(0,s.jsx)(n.h3,{id:"meaningful-names",children:"Meaningful Names"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use descriptive names to provide context."})}),"\n",(0,s.jsxs)(n.p,{children:["As ",(0,s.jsx)(n.a,{href:"https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1",children:"John F. Woods"})," said, ",(0,s.jsx)(n.code,{children:"always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"}),". Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project."]}),"\n",(0,s.jsx)(n.p,{children:"Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your SSJS better with meaningful variable and function names."}),"\n",(0,s.jsx)(n.h4,{id:"variable-names",children:"Variable Names"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Use descriptive variable names. It is better to have a long explicit one (",(0,s.jsx)(n.code,{children:"isTrackingSuppressed"}),") than a short mysterious abbreviation (",(0,s.jsx)(n.code,{children:"trk"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:["When the variable is a boolean, prefix it with ",(0,s.jsx)(n.code,{children:"is"})," (or ",(0,s.jsx)(n.code,{children:"has"}),"/",(0,s.jsx)(n.code,{children:"does"}),"/",(0,s.jsx)(n.code,{children:"are"})," depending on the underlying data)."]}),"\n",(0,s.jsxs)(n.li,{children:["When the variable is a date, suffix it with ",(0,s.jsx)(n.code,{children:"Date"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["When the variable is an array, use a plural name (",(0,s.jsx)(n.code,{children:"optIns"}),", ",(0,s.jsx)(n.code,{children:"favouriteProductCategories"}),")."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Descriptive and suggesting boolean data type */\nvar isTrackingSuppressed = false;\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nvar value = false;\n\n/* \u2705 Descriptive and suggesting date data type */\nvar trackingSupressionStartDate = new Date();\n\n/* \u274c Name neither describes the variable purpose nor suggest its data type */\nvar supressed = new Date();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"function-names",children:"Function Names"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Use descriptive function names. It is better to have a long explicit one (",(0,s.jsx)(n.code,{children:"getEmailAddress"}),") than a short mysterious abbreviation (",(0,s.jsx)(n.code,{children:"geteml"}),"). Think how you can add as much information as possible, without adding unnecessary bits (",(0,s.jsx)(n.code,{children:"lookupContactBySubscriberKey"})," vs ",(0,s.jsx)(n.code,{children:"lookupAvailableContactBySubscriberKeyFromDataExtension"}),")."]}),"\n",(0,s.jsxs)(n.li,{children:["Use a verb (",(0,s.jsx)(n.code,{children:"get"}),", ",(0,s.jsx)(n.code,{children:"post"}),", ",(0,s.jsx)(n.code,{children:"update"}),", ",(0,s.jsx)(n.code,{children:"send"}),") as the first part of the name to tell what the function is doing."]}),"\n",(0,s.jsxs)(n.li,{children:["Apply ",(0,s.jsx)(n.a,{href:"#variable-names",children:"variable naming rules"})," to the parameters - leave single-letter names for minifiers."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Both function name and parameters are descriptive */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/* \u274c Neither function name nor parameters are descriptive */\nfunction write(d, v) {\n Write(d + ': ' + (typeof v == 'object' ? Stringify(v) : v) + '<br><br>');\n};\n"})}),"\n",(0,s.jsx)(n.h3,{id:"js-variables-functions--methods-letter-case",children:"JS Variables, Functions & Methods Letter Case"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Use ",(0,s.jsx)(n.code,{children:"camelCase"})," for all elements of JS syntax."]})}),"\n",(0,s.jsxs)(n.p,{children:["The first category of the building blocks in your code will be JavaScript (ECMAScript 3 in case of SSJS) native elements. Variables (",(0,s.jsx)(n.code,{children:"var"})," only), functions (no array goodies), and methods."]}),"\n",(0,s.jsxs)(n.p,{children:["For all of those I'm using ",(0,s.jsx)(n.code,{children:"camelCase"}),". It's the most popular convetion, so it will make it easier to work with other programmers, leverage code snippets and onboard new-to-SSJS people to SFMC development."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 camelCase for JS syntax */\nvar variableName = 'Hello World';\nfunction functionName(variableName) {\n return variableName.toLowerCase();\n};\n\n/* \u274c Random case */\nvar VARIABLENAME = 'Hello World';\nfunction FunctionName(variableName) {\n return variableName.tolowercase();\n};\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"You Should Know",type:"note",children:(0,s.jsxs)(n.p,{children:["JavaScript variables are case sensitive. ",(0,s.jsx)(n.code,{children:"Name"})," and ",(0,s.jsx)(n.code,{children:"name"})," are two different variables that can have different values, so it's critically important to have a stable convention."]})}),"\n",(0,s.jsx)(n.h3,{id:"ssjs-functions-letter-case",children:"SSJS Functions Letter Case"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.strong,{children:["Use ",(0,s.jsx)(n.code,{children:"PascalCase"})," for all elements of SSJS syntax."]})}),"\n",(0,s.jsxs)(n.p,{children:["I take a different approach when working with SSJS Functions from both Platform and Core libraries. For any element coming from those, I use ",(0,s.jsx)(n.code,{children:"PascalCase"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Not only it allows to differentiate JavaScript native and SFMC custom elements, but it also follows the official SSJS documentation (and therefore most of the snippets you might find)."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 PamelCase for JS syntax */\nPlatform.Load('Core', '1');\nvar dataExtension = DataExtension.Retrieve({\n Property: 'CustomerKey',\n SimpleOperator: 'equals',\n Value: 'dataExtensionExternalKey'\n});\n\n/* \u274c Random case */\nPLATFORM.LOAD('Core', '1');\nvar dataExtension = dataextensions.retrieve({\n Property: 'CustomerKey',\n SimpleOperator: 'equals',\n Value: 'dataExtensionExternalKey'\n});\n"})}),"\n",(0,s.jsx)(n.h2,{id:"alignment-and-indentation",children:"Alignment and Indentation"}),"\n",(0,s.jsx)(n.p,{children:"Letter case is just one element of syntax convention that helps with readability. Another huge one is alignment and indentation. JavaScript requires neither, but both can help you write better code."}),"\n",(0,s.jsx)(n.h3,{id:"expanded-syntax",children:"Expanded Syntax"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Sparse is better than dense."})}),"\n",(0,s.jsx)(n.p,{children:"Readability counts. Having fewer lines is not worth the mental gymnastics required to read a condensed code. It is also much easier to find unclosed brackets."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Expanded Variable Syntax */\nvar debugging = {\n request: true,\n response: true,\n error: true\n};\n\n/* \u274c Condensed Variable Syntax */\nvar debugging = { request: true, response: true, error: true };\n\n/* \u2705 Expanded Function Syntax */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/* \u274c Condensed Function Syntax */\nfunction debugValue(description, value) { Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>'); };\n\n/* \u2705 Expanded Try/Catch Syntax */\ntry {\n var response = HTTP.Get('http://www.example.c');\n} catch (error) {\n handleError(error);\n};\n\n/* \u274c Condensed Try/Catch Syntax */\ntry { var response = HTTP.Get('http://www.example.c'); } catch (error) { handleError(error); };\n"})}),"\n",(0,s.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(n.p,{children:["I have two exceptions to this rule - both related to ",(0,s.jsx)(n.code,{children:"if"})," statement shorthands."]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Ternary operator"}),"\n"]}),(0,s.jsxs)(n.p,{children:["Ternary simplifies basic ",(0,s.jsx)(n.code,{children:"if"}),"/",(0,s.jsx)(n.code,{children:"else"})," statements, and when used correctly, it should be readable in a single line. If you fear it might be hard to understand, you probably shouldn't use the ternary operator in the first place."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Condensed Ternary Syntax */\ntypeof value == 'object' ? Stringify(value) : value;\n\n/* \u274c Expanded Ternary Syntax */\ntypeof value == 'object'\n ? Stringify(value)\n : value;\n\n/* \u274c Too Complex for Ternary Syntax */\ndebugging ? debugValue(error) : Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);\n"})}),(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["Single line ",(0,s.jsx)(n.code,{children:"if"})," statements."]}),"\n"]}),(0,s.jsxs)(n.p,{children:["Similarly to ternary, single-line if statements also should be used only for basic ",(0,s.jsx)(n.code,{children:"if"})," statements. Whenever there is any complexity (be it ",(0,s.jsx)(n.code,{children:"else"})," statement or just a longer case body), I always go with the expanded syntax."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Condensed Shorthand If Syntax */\nif (debugging) debugValue(error);\n\n/* \u2705 Expanded Standard If Syntax */\nif (debugging) {\n debugValue(error);\n} else {\n Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);\n};\n\n/* \u274c Too Complex for Shorthand If Syntax */\nif (response.StatusCode == 200) { var parsedResponse = Platform.Function.ParseJSON(String(response.Response)); if (!parsedResponse.success) throw 'Wrong reCAPTCHA'; };\n"})}),(0,s.jsx)(n.p,{children:"It's up to you to decide how complex is too complex. Whenever in doubt - use expanded syntax."})]}),"\n",(0,s.jsx)(n.h3,{id:"consistent-indentation",children:"Consistent Indentation"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use indentation to highlight code relationships."})}),"\n",(0,s.jsx)(n.p,{children:"This rule extends the expanded syntax guide. Don't stop at expanding. Indent. It will help you quickly understand the relationships between the code lines."}),"\n",(0,s.jsx)(n.p,{children:"The easy way to implement correct identation is to add a level whenever you open curly bracket and remove one whenever you close it. However, sometimes readability can be improved with even more identation, for example within expanded array."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Indented Syntax */\nfor (var i = 0; i < response.length - 1; i++) {\n var responseRowData = response[i].split(',');\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n });\n};\n\n/* \u274c Flat Syntax */\nfor (var i = 0; i < response.length - 1; i++) {\nvar responseRowData = response[i].split(',');\ncampaignData.push({\nname: responseRowData[0],\nid: responseRowData[1],\nstartDate: responseRowData[2],\nendDate: responseRowData[3]\n});\n};\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"You Should Know",type:"note",children:(0,s.jsx)(n.p,{children:"It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click."})}),"\n",(0,s.jsx)(n.h3,{id:"intentional-spacing",children:"Intentional Spacing"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use spaces wherever it makes the code more readable."})}),"\n",(0,s.jsx)(n.p,{children:"To visually separate elements, use spaces:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Around operators."}),"\n",(0,s.jsx)(n.li,{children:"Before opening curly bracket and after closing curly bracket."}),"\n",(0,s.jsx)(n.li,{children:"After commas."}),"\n",(0,s.jsxs)(n.li,{children:["After keywords (",(0,s.jsx)(n.code,{children:"if"}),", ",(0,s.jsx)(n.code,{children:"while"}),", ",(0,s.jsx)(n.code,{children:"function"}),", etc.)."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"To provide important context, don't add spaces:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"After opening and before closing non-curly brackets."}),"\n",(0,s.jsx)(n.li,{children:"Between function name and arguments."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Intentional spacing */\nif (response.StatusCode != 200) {\n throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'}\n};\n\n/* \u274c Lack of spacing */\nif(response.StatusCode!=200){\n throw{'message':'HTTP.Get Error','description':'Could not connect to example.com'}\n};\n\n/* \u2705 Intentional spacing */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/* \u274c Wrong spacing */\nfunction debugValue ( description, value ) {\n Write ( description + ': ' + ( typeof value == 'object' ? Stringify( value ) : value ) + '<br><br>' );\n};\n"})}),"\n",(0,s.jsx)(n.h2,{id:"debatable-styles",children:"Debatable Styles"}),"\n",(0,s.jsx)(n.p,{children:"Apart from letter case and indentation, some additional style rules are important to consider. Multiple arguments favour various conventions, so feel free not to follow my recommendation as long as you stay consistent across your code."}),"\n",(0,s.jsx)(n.h3,{id:"semicolons",children:"Semicolons"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Add a semicolon after each statement."})}),"\n",(0,s.jsx)(n.p,{children:"The semicolons in JavaScript are optional. You can do without them entirely. But I prefer to use them. Why?"}),"\n",(0,s.jsx)(n.p,{children:"If you do not use semicolons, JS will add them for you using Automatic Semicolon Injection (ASI). In most cases, it works perfectly, but there might be some situations where the outcome is not what you expected. And that will lead to a very long and frustrating debugging session. If you want to think about ASI when writing, you may ignore semicolons."}),"\n",(0,s.jsx)(n.p,{children:"If you don't want to worry about ASI, per JS language specification, you should:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Mark the end of your simple statements with a semicolon ",(0,s.jsx)(n.code,{children:";"}),". Think variable declarations and operations."]}),"\n",(0,s.jsxs)(n.li,{children:["Don't end complex statements with a semicolon. Think ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-if-and-switch#if-statements",children:(0,s.jsx)(n.code,{children:"if"})})," statements, ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-loops",children:"loops"}),", ",(0,s.jsx)(n.code,{children:"functions"}),", ",(0,s.jsx)(n.code,{children:"try/catch"})," blocks."]}),"\n",(0,s.jsxs)(n.li,{children:["But... you need a semicolon after the ",(0,s.jsxs)(n.a,{href:"/docs/ssjs/ssjs-loops#do-while",children:[(0,s.jsx)(n.code,{children:"do/while"})," loop"]}),". Because JavaScript (and yeah, it is different from ",(0,s.jsxs)(n.a,{href:"/docs/ssjs/ssjs-loops#while",children:[(0,s.jsx)(n.code,{children:"while"})," loop"]})," when considering the statement blocks). Oh, and you will need to add them in your ",(0,s.jsxs)(n.a,{href:"/docs/ssjs/ssjs-loops#for",children:[(0,s.jsx)(n.code,{children:"for"})," loop"]})," iteration rules."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"That's also a bit to digest and worry about when writing the code. Let's simplify it."}),"\n",(0,s.jsxs)(n.p,{children:["While you don't ",(0,s.jsx)(n.strong,{children:"need"})," a semicolon after complex statements, it won't hurt. It can even help you if you plan to minify the code. So, to make it straightforward and fail-safe, I recommend adding it after each statement."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="Keep calm and spam semicolons"',children:"/* \u2705 Semicolons everywhere */\nfor (var i = 0; i < response.length - 1; i++) {\n var responseRowData = response[i].split(',');\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n });\n};\n\n/* \u274c No semicolons - this will crash due to no semicolons between for iteration rules */\nfor (var i = 0 i < response.length - 1 i++) {\n var responseRowData = response[i].split(',')\n campaignData.push({\n name: responseRowData[0],\n id: responseRowData[1],\n startDate: responseRowData[2],\n endDate: responseRowData[3]\n })\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"consistent-quotes",children:"Consistent Quotes"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Use single quote style."})}),"\n",(0,s.jsxs)(n.p,{children:["With SSJS, you can use either single quotes (",(0,s.jsx)(n.code,{children:"'"}),") or double quotes (",(0,s.jsx)(n.code,{children:'"'}),"). Don't follow the random approach of Salesforce SSJS documentation - choose one and be consistent."]}),"\n",(0,s.jsx)(n.p,{children:"I prefer single quotes for SSJS:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML."}),"\n",(0,s.jsx)(n.li,{children:"On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"However, there are also arguments for double quotes:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"There are many English words using apostrophes, and using double quotes means no need to escape them."}),"\n",(0,s.jsx)(n.li,{children:"JSON requires double quotes."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* \u2705 Single Quotes */\nif (response.StatusCode != 200) {\n throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};\n};\n\n/* \u2705 Double Quotes */\nif (response.StatusCode != 200) {\n throw {\"message\": \"HTTP.Get Error\", \"description\": \"Could not connect to example.com\"};\n};\n\n/* \u274c Mixed Quotes */\nif (response.StatusCode != 200) {\n throw {'message': \"HTTP.Get Error\", 'description': \"Could not connect to example.com\"};\n};\n"})}),"\n",(0,s.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Code tells you how. Comments tell you why."})," - ",(0,s.jsx)(n.a,{href:"https://blog.codinghorror.com/code-tells-you-how-comments-tell-you-why/",children:"Jeff Atwood"})]}),"\n",(0,s.jsx)(n.p,{children:"To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks."}),"\n",(0,s.jsx)(n.p,{children:"Whenever you build more complex SSJS code, I recommend using at least three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough."}),"\n",(0,s.jsx)(n.h3,{id:"1-table-of-contents-comment",children:"1. Table of Contents Comment"}),"\n",(0,s.jsx)(n.p,{children:"The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script."}),"\n",(0,s.jsx)(n.p,{children:"Before even starting to write SSJS, describe the desired outcome and steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation."}),"\n",(0,s.jsx)(n.p,{children:"As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* ---------------------------------------------------------------------\n\nAuthenticates each visitor to limit access only to SFMC logged-in users.\n\n1. Global Variables - should be updated for each implementation\n2. Helper Functions\n 2.1. Error handling\n3. Authentication Flow\n 3.1. Authorisation\n 3.2. Authentication with REST Token\n 3.2.1. Upsert Logging Data Extension\n\n--------------------------------------------------------------------- */\n"})}),"\n",(0,s.jsx)(n.h3,{id:"2-section-comments",children:"2. Section Comments"}),"\n",(0,s.jsx)(n.p,{children:"To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts."}),"\n",(0,s.jsx)(n.p,{children:"For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/* ----------------------------------------------------------------------- */\n/* ------------------------- 1. GLOBAL VARIABLES ------------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ----------------------------------------------------------------------- */\n/* ------------------------- 2. HELPER FUNCTIONS ------------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ------------------------- 2.1. Error handling ------------------------- */\n\n/* ----------------------------------------------------------------------- */\n/* ------------------------- 3. AUTHENTICATION FLOW ---------------------- */\n/* ----------------------------------------------------------------------- */\n\n/* ------------------------- 3.1. Authorisation -------------------------- */\n\n/* ------------------------- 3.2. Authentication ------------------------- */\n\n/* 3.2.1. Build token request payload */\n"})}),"\n",(0,s.jsx)(n.h3,{id:"3-documentation-comments",children:"3. Documentation Comments"}),"\n",(0,s.jsx)(n.p,{children:"Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments."}),"\n",(0,s.jsx)(n.p,{children:"You should use one for every custom function you create, but it might also benefit variables (especially those with values coming from an API response). Rule of thumb - add them whenever someone else reading your code for the first time would ask a question about context or purpose."}),"\n",(0,s.jsxs)(n.p,{children:["I recommend using ",(0,s.jsx)(n.a,{href:"https://jsdoc.app/index.html",children:"JSDoc"})," for few reasons:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"It's a popular standard."}),"\n",(0,s.jsx)(n.li,{children:"It provides recommendations on what to add to the comment."}),"\n",(0,s.jsx)(n.li,{children:"Many code editors will help you write it and highlight its syntax."}),"\n",(0,s.jsx)(n.li,{children:"Marketing Cloud ecosystem already leverages it in Interaction Studio."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"/**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\nfunction debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n};\n\n/**\n * ClientID of SFMC Installed Package required for API calls\n * @type {string}\n * @const\n */\nvar clientID = 'CLIENT_ID';\n\n/**\n * Authentication GUID passed as a query string through SSO redirect\n * @type {string}\n */\nvar state = Platform.Request.GetQueryStringParameter('state');\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you find it too complex, feel free to make it simpler, as long as your approach:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"describes context and purpose and"}),"\n",(0,s.jsx)(n.li,{children:"is consistent across the codebase."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"sum-up",children:"Sum Up"}),"\n",(0,s.jsx)(n.p,{children:"It is a long article, so let's gather all the recommendations in one place:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Be consistent"}),"\n",(0,s.jsx)(n.li,{children:"Strive for readability"}),"\n",(0,s.jsxs)(n.li,{children:["Use descriptive names to provide context ",(0,s.jsx)(n.a,{href:"#meaningful-names",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use ",(0,s.jsx)(n.code,{children:"camelCase"})," for all elements of JS syntax ",(0,s.jsx)(n.a,{href:"#js-variables-functions--methods-case",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use ",(0,s.jsx)(n.code,{children:"PascalCase"})," for all elements of SSJS syntax ",(0,s.jsx)(n.a,{href:"#ssjs-functions-case",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Sparse is better than dense ",(0,s.jsx)(n.a,{href:"#expanded-syntax",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use indentation to highlight code relationships ",(0,s.jsx)(n.a,{href:"#consistent-indentation",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use spaces wherever it makes the code more readable ",(0,s.jsx)(n.a,{href:"#intentional-spacing",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Add a semicolon after each statement ",(0,s.jsx)(n.a,{href:"#semicolons",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use single quote style ",(0,s.jsx)(n.a,{href:"#consistent-quotes",children:"\ud83d\udd17"})]}),"\n",(0,s.jsxs)(n.li,{children:["Use comments to provide required context to your script ",(0,s.jsx)(n.a,{href:"#comments",children:"\ud83d\udd17"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you want to share something I'm missing or have arguments for a different recommendation - ",(0,s.jsx)(n.a,{href:"https://www.linkedin.com/in/mateusz-dabrowski-marketing/",children:"let me know"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Looking for more Marketing Cloud style? Check out my:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/ampscript/ampscript-style-guide",children:"AMPScript Style Guide"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/sql/sfmc-sql-style-guide",children:"SFMC SQL Style Guide"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,n,t)=>{t.d(n,{m:()=>i});t(7294);const s="leadText_qzwo";var o=t(5893);const i=e=>{let{content:n}=e;return(0,o.jsx)(o.Fragment,{children:(0,o.jsx)("p",{id:s,children:n})})}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var s=t(7294);const o={},i=s.createContext(o);function a(e){const n=s.useContext(i);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(o):e.components||o:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dc8b40ff.885ab7e7.js b/assets/js/dc8b40ff.885ab7e7.js deleted file mode 100644 index 270b064f0..000000000 --- a/assets/js/dc8b40ff.885ab7e7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4502],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>g});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?s(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):s(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(r),m=a,g=d["".concat(l,".").concat(m)]||d[m]||u[m]||s;return r?n.createElement(g,o(o({ref:t},c),{},{components:r})):n.createElement(g,o({ref:t},c))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,o=new Array(s);o[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:a,o[1]=i;for(var p=2;p<s;p++)o[p]=r[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},1872:(e,t,r)=>{r.d(t,{m:()=>s});var n=r(7294);const a="leadText_qzwo",s=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:a},t))}},6917:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(4137)),s=r(1872);const o={id:"ssjs-script-template",title:"SSJS Script Template",sidebar_label:"SSJS Script Template",description:"Jumpstart your coding with best practice fueled SSJS Template.",image:"img/og/og-image-ssjs-script-template.png",tags:["Marketing Cloud","SSJS","Snippet"]},i=void 0,l={unversionedId:"ssjs/snippets/ssjs-script-template",id:"ssjs/snippets/ssjs-script-template",title:"SSJS Script Template",description:"Jumpstart your coding with best practice fueled SSJS Template.",source:"@site/docs/ssjs/snippets/ssjs-script-template.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/ssjs-script-template",permalink:"/docs/ssjs/snippets/ssjs-script-template",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/ssjs-script-template.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Snippet",permalink:"/docs/tags/snippet"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"ssjs-script-template",title:"SSJS Script Template",sidebar_label:"SSJS Script Template",description:"Jumpstart your coding with best practice fueled SSJS Template.",image:"img/og/og-image-ssjs-script-template.png",tags:["Marketing Cloud","SSJS","Snippet"]},sidebar:"snippets",previous:{title:"SSJS Snippets",permalink:"/docs/category/ssjs-snippets"},next:{title:"Solve with Cloud Page Apps",permalink:"/docs/ssjs/snippets/sfmc-cloud-page-apps"}},p={},c=[{value:"SSJS Template Code",id:"ssjs-template-code",level:2},{value:"SSJS Template Description",id:"ssjs-template-description",level:2},{value:"Table of Contents",id:"table-of-contents",level:3},{value:"Global Variables",id:"global-variables",level:3},{value:"Multiuse empty variables",id:"multiuse-empty-variables",level:4},{value:"Customizable variables",id:"customizable-variables",level:4},{value:"Helper Functions",id:"helper-functions",level:3},{value:"Script Body",id:"script-body",level:3}],d={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(s.m,{content:"Jumpstart your coding with best practice fueled SSJS Template.",mdxType:"LeadText"}),(0,a.kt)("p",null,"Some like to start with a blank slate. Some - from a well-crafted template. I'm in the #TeamTemplate, and here you can see my SSJS one. Check the bottom of this page for a walkthrough."),(0,a.kt)("h2",{id:"ssjs-template-code"},"SSJS Template Code"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html"},"<script runat=\"server\">\n /* -------------------------------------------------------------------------\n\n Short description of the purpose of the script.\n\n 1. Global Variables\n 1.1. API Endpoint\n 1.2. Error Handling\n 2. Helper Functions\n 2.1. Debugging\n 2.2. Error handling\n 3. {{Section Name}}\n ...\n\n -------------------------------------------------------------------------- */\n\n Platform.Load('core', '1');\n // Uncomment below if you will be using SOAP API via WSProxy in the script\n // var soap = new Script.Util.WSProxy();\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n var endpoint, headerNames, headerValues, payload, response, parsedResponse;\n var debugging = false;\n\n /* ---------------------- 1.1. API Endpoint------------------------------- */\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n\n /* -------------------- 1.2. Error Handling------------------------------- */\n var scriptName = 'SCRIPT_NAME';\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Debugging --------------------------------- */\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /* ---------------------- 2.2. Error handling ---------------------------- */\n\n /**\n * @function handleError\n * @description Adds the error with context to error logging Data Extension and redirects to error page.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);\n Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);\n };\n };\n\n try {\n /* ----------------------------------------------------------------------- */\n /* ----------------------- 3. {{SECTION NAME}} --------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /**\n * There can be just one section for simpler scripts, or there can be multiple.\n * As your code grow, split it into separate numbered sections for easier navigation.\n * Always try to make each section coherent with code logic to make the split meaningful.\n */\n\n // if (debugging) debugValue('{{API Call Name}} Response', response);\n\n } catch (error) {\n handleError(error);\n }\n\n<\/script>\n")),(0,a.kt)("h2",{id:"ssjs-template-description"},"SSJS Template Description"),(0,a.kt)("h3",{id:"table-of-contents"},"Table of Contents"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"}," /* -------------------------------------------------------------------------\n\n Short description of the purpose of the script.\n\n 1. Global Variables\n 1.1. API Endpoint\n 1.2. Error Handling\n 2. Helper Functions\n 2.1. Debugging\n 2.2. Error handling\n 3. {{Section Name}}\n ...\n\n -------------------------------------------------------------------------- */\n")),(0,a.kt)("p",null,"The opening section of the template does two things:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Briefly informs everyone what the purpose of this script is"),(0,a.kt)("li",{parentName:"ol"},"Describes the high-level structure of the script to allow for quick navigation")),(0,a.kt)("p",null,"Read more on that approach in my ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-style-guide#1-table-of-contents-comment"},"SSJS Style Guide"),"."),(0,a.kt)("h3",{id:"global-variables"},"Global Variables"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"}," /* ----------------------------------------------------------------------- */\n /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n var endpoint, headerNames, headerValues, payload, response, parsedResponse;\n var debugging = false;\n\n /* ---------------------- 1.1. API Endpoint------------------------------- */\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n\n /* -------------------- 1.2. Error Handling------------------------------- */\n var scriptName = 'SCRIPT_NAME';\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n")),(0,a.kt)("p",null,"This section is responsible for storing all key variables. There are two main types I like to keep here:"),(0,a.kt)("h4",{id:"multiuse-empty-variables"},"Multiuse empty variables"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"},"var endpoint, headerNames, headerValues, payload, response, parsedResponse;\n")),(0,a.kt)("p",null,"In this category, you will find variables used multiple times within various parts of the script, but their specific values have too short lifespan to warrant a separate variable."),(0,a.kt)("p",null,"By declaring them here, I don't have to use ",(0,a.kt)("inlineCode",{parentName:"p"},"var")," later in the script, and therefore I don't have to worry about the order of the code if I make some changes during the refactoring phase."),(0,a.kt)("p",null,"There is also a second reason - defining them before the try/catch block, even without any value, will allow accessing its value after that block. Read more about that in ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#try-to-catch-the-error"},"Debugging & Error Handling"),"."),(0,a.kt)("h4",{id:"customizable-variables"},"Customizable variables"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"}," var debugging = false;\n\n /* ---------------------- 1.1. API Endpoint------------------------------- */\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n\n /* -------------------- 1.2. Error Handling------------------------------- */\n var scriptName = 'SCRIPT_NAME';\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n")),(0,a.kt)("p",null,"The second type I store here are customizable global variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"changing from script to script or"),(0,a.kt)("li",{parentName:"ul"},"controlling the script's behaviour (like configurational ones or the ",(0,a.kt)("inlineCode",{parentName:"li"},"debugging")," variable described in detail ",(0,a.kt)("a",{parentName:"li",href:"/docs/ssjs/debugging-ssjs#debugging-variable"},"here"),")")),(0,a.kt)("p",null,"The template contains the API Endpoint section that I frequently use, but if your script does not need it - delete it to optimize and simplify the code."),(0,a.kt)("h3",{id:"helper-functions"},"Helper Functions"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"}," /* ----------------------------------------------------------------------- */\n /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Debugging --------------------------------- */\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /* ---------------------- 2.2. Error handling ---------------------------- */\n\n /**\n * @function handleError\n * @description Adds the error with context to error logging Data Extension and redirects to error page.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);\n Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);\n };\n };\n")),(0,a.kt)("p",null,"In this section, I keep all the helper functions used multiple times in the script or are battle-tested and shared across various scripts."),(0,a.kt)("p",null,"In the template, you can find my two favourite ones that I use in every single script."),(0,a.kt)("p",null,"To learn more about them, check out detailed descriptions of ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#debugging-variable"},(0,a.kt)("inlineCode",{parentName:"a"},"debugValue"))," and ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#error-handler-function"},(0,a.kt)("inlineCode",{parentName:"a"},"handleError"))," functions."),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"If the script will be used in ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource"},"JSON Code Resource backend")," I modify those two functions a bit by:"),(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Changing the ",(0,a.kt)("inlineCode",{parentName:"p"},"debugValue")," Write to: ",(0,a.kt)("inlineCode",{parentName:"p"},"Write(' --- ' + description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + ' --- ');")," as break line tag will not work.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Removing the ",(0,a.kt)("inlineCode",{parentName:"p"},"Platform.Response.Redirect")," from ",(0,a.kt)("inlineCode",{parentName:"p"},"handleError")," as we don't want backend redirects. The ",(0,a.kt)("inlineCode",{parentName:"p"},"errorURL")," variable follows suit.")))),(0,a.kt)("p",null,"In many cross-cloud scenarios I also use ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"AMPScript runner"),", but as it is more use case specific solution, I don't keep it in base template."),(0,a.kt)("p",null,"I prefix all functions with ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-style-guide#3-documentation-comments"},"documentation comments"),"."),(0,a.kt)("h3",{id:"script-body"},"Script Body"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-js"}," try {\n /* ----------------------------------------------------------------------- */\n /* ----------------------- 3. {{SECTION NAME}} --------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /**\n * There can be just one section for simpler scripts, or there can be multiple.\n * As your code grow, split it into separate numbered sections for easier navigation.\n * Always try to make each section coherent with code logic to make the split meaningful.\n */\n\n } catch (error) {\n handleError(error);\n }\n")),(0,a.kt)("p",null,"The final part of the template is where I'm adding the main part of the script. It's wrapped in try/catch (more on that ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/debugging-ssjs#try-to-catch-the-error"},"here"),") and - if the script is long - split into ",(0,a.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-style-guide#2-section-comments"},"sections"),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dc8b40ff.ed60aaed.js b/assets/js/dc8b40ff.ed60aaed.js new file mode 100644 index 000000000..32c41473a --- /dev/null +++ b/assets/js/dc8b40ff.ed60aaed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[4502],{8279:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=r(5893),t=r(1151),i=r(1872);const o={id:"ssjs-script-template",title:"SSJS Script Template",sidebar_label:"SSJS Script Template",description:"Jumpstart your coding with best practice fueled SSJS Template.",image:"img/og/og-image-ssjs-script-template.png",tags:["Marketing Cloud","SSJS","Snippet"]},a=void 0,l={id:"ssjs/snippets/ssjs-script-template",title:"SSJS Script Template",description:"Jumpstart your coding with best practice fueled SSJS Template.",source:"@site/docs/ssjs/snippets/ssjs-script-template.mdx",sourceDirName:"ssjs/snippets",slug:"/ssjs/snippets/ssjs-script-template",permalink:"/docs/ssjs/snippets/ssjs-script-template",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/snippets/ssjs-script-template.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"Snippet",permalink:"/docs/tags/snippet"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"ssjs-script-template",title:"SSJS Script Template",sidebar_label:"SSJS Script Template",description:"Jumpstart your coding with best practice fueled SSJS Template.",image:"img/og/og-image-ssjs-script-template.png",tags:["Marketing Cloud","SSJS","Snippet"]},sidebar:"snippets",previous:{title:"SSJS Snippets",permalink:"/docs/category/ssjs-snippets"},next:{title:"Solve with Cloud Page Apps",permalink:"/docs/ssjs/snippets/sfmc-cloud-page-apps"}},c={},d=[{value:"SSJS Template Code",id:"ssjs-template-code",level:2},{value:"SSJS Template Description",id:"ssjs-template-description",level:2},{value:"Table of Contents",id:"table-of-contents",level:3},{value:"Global Variables",id:"global-variables",level:3},{value:"Multiuse empty variables",id:"multiuse-empty-variables",level:4},{value:"Customizable variables",id:"customizable-variables",level:4},{value:"Helper Functions",id:"helper-functions",level:3},{value:"Script Body",id:"script-body",level:3}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.m,{content:"Jumpstart your coding with best practice fueled SSJS Template."}),"\n",(0,s.jsx)(n.p,{children:"Some like to start with a blank slate. Some - from a well-crafted template. I'm in the #TeamTemplate, and here you can see my SSJS one. Check the bottom of this page for a walkthrough."}),"\n",(0,s.jsx)(n.h2,{id:"ssjs-template-code",children:"SSJS Template Code"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",children:"<script runat=\"server\">\n /* -------------------------------------------------------------------------\n\n Short description of the purpose of the script.\n\n 1. Global Variables\n 1.1. API Endpoint\n 1.2. Error Handling\n 2. Helper Functions\n 2.1. Debugging\n 2.2. Error handling\n 3. {{Section Name}}\n ...\n\n -------------------------------------------------------------------------- */\n\n Platform.Load('core', '1');\n // Uncomment below if you will be using SOAP API via WSProxy in the script\n // var soap = new Script.Util.WSProxy();\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n var endpoint, headerNames, headerValues, payload, response, parsedResponse;\n var debugging = false;\n\n /* ---------------------- 1.1. API Endpoint------------------------------- */\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n\n /* -------------------- 1.2. Error Handling------------------------------- */\n var scriptName = 'SCRIPT_NAME';\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n\n /* ----------------------------------------------------------------------- */\n /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Debugging --------------------------------- */\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /* ---------------------- 2.2. Error handling ---------------------------- */\n\n /**\n * @function handleError\n * @description Adds the error with context to error logging Data Extension and redirects to error page.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);\n Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);\n };\n };\n\n try {\n /* ----------------------------------------------------------------------- */\n /* ----------------------- 3. {{SECTION NAME}} --------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /**\n * There can be just one section for simpler scripts, or there can be multiple.\n * As your code grow, split it into separate numbered sections for easier navigation.\n * Always try to make each section coherent with code logic to make the split meaningful.\n */\n\n // if (debugging) debugValue('{{API Call Name}} Response', response);\n\n } catch (error) {\n handleError(error);\n }\n\n<\/script>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"ssjs-template-description",children:"SSJS Template Description"}),"\n",(0,s.jsx)(n.h3,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:" /* -------------------------------------------------------------------------\n\n Short description of the purpose of the script.\n\n 1. Global Variables\n 1.1. API Endpoint\n 1.2. Error Handling\n 2. Helper Functions\n 2.1. Debugging\n 2.2. Error handling\n 3. {{Section Name}}\n ...\n\n -------------------------------------------------------------------------- */\n"})}),"\n",(0,s.jsx)(n.p,{children:"The opening section of the template does two things:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Briefly informs everyone what the purpose of this script is"}),"\n",(0,s.jsx)(n.li,{children:"Describes the high-level structure of the script to allow for quick navigation"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Read more on that approach in my ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide#1-table-of-contents-comment",children:"SSJS Style Guide"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"global-variables",children:"Global Variables"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:" /* ----------------------------------------------------------------------- */\n /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n var endpoint, headerNames, headerValues, payload, response, parsedResponse;\n var debugging = false;\n\n /* ---------------------- 1.1. API Endpoint------------------------------- */\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n\n /* -------------------- 1.2. Error Handling------------------------------- */\n var scriptName = 'SCRIPT_NAME';\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n"})}),"\n",(0,s.jsx)(n.p,{children:"This section is responsible for storing all key variables. There are two main types I like to keep here:"}),"\n",(0,s.jsx)(n.h4,{id:"multiuse-empty-variables",children:"Multiuse empty variables"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"var endpoint, headerNames, headerValues, payload, response, parsedResponse;\n"})}),"\n",(0,s.jsx)(n.p,{children:"In this category, you will find variables used multiple times within various parts of the script, but their specific values have too short lifespan to warrant a separate variable."}),"\n",(0,s.jsxs)(n.p,{children:["By declaring them here, I don't have to use ",(0,s.jsx)(n.code,{children:"var"})," later in the script, and therefore I don't have to worry about the order of the code if I make some changes during the refactoring phase."]}),"\n",(0,s.jsxs)(n.p,{children:["There is also a second reason - defining them before the try/catch block, even without any value, will allow accessing its value after that block. Read more about that in ",(0,s.jsx)(n.a,{href:"/docs/ssjs/debugging-ssjs#try-to-catch-the-error",children:"Debugging & Error Handling"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"customizable-variables",children:"Customizable variables"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:" var debugging = false;\n\n /* ---------------------- 1.1. API Endpoint------------------------------- */\n var clientID = 'CLIENT_ID';\n var clientSecret = 'CLIENT_SECRET';\n var clientBase = 'API_BASE_URI';\n\n /* -------------------- 1.2. Error Handling------------------------------- */\n var scriptName = 'SCRIPT_NAME';\n var errorDE = 'ERROR_DATA_EXTENSION';\n var errorURL = 'ERROR_CLOUD_PAGE_URL';\n"})}),"\n",(0,s.jsx)(n.p,{children:"The second type I store here are customizable global variables:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"changing from script to script or"}),"\n",(0,s.jsxs)(n.li,{children:["controlling the script's behaviour (like configurational ones or the ",(0,s.jsx)(n.code,{children:"debugging"})," variable described in detail ",(0,s.jsx)(n.a,{href:"/docs/ssjs/debugging-ssjs#debugging-variable",children:"here"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The template contains the API Endpoint section that I frequently use, but if your script does not need it - delete it to optimize and simplify the code."}),"\n",(0,s.jsx)(n.h3,{id:"helper-functions",children:"Helper Functions"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:" /* ----------------------------------------------------------------------- */\n /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /* ---------------------- 2.1. Debugging --------------------------------- */\n\n /**\n * @function debugValue\n * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way\n * @param {string} description - Describes meaning of the second parameter in the output\n * @param {*} value - The value that needs to be debugged\n */\n function debugValue(description, value) {\n Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');\n };\n\n /* ---------------------- 2.2. Error handling ---------------------------- */\n\n /**\n * @function handleError\n * @description Adds the error with context to error logging Data Extension and redirects to error page.\n * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.\n * @param {string} error.message - First error key stores short error message describing the issue.\n * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis\n */\n function handleError(error) {\n if (debugging) {\n debugValue('Found error', error);\n } else {\n // Remember that if your Logging Data Extension is in Shared Folder, you need to add the \"ENT.\" prefix to name\n Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);\n Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);\n };\n };\n"})}),"\n",(0,s.jsx)(n.p,{children:"In this section, I keep all the helper functions used multiple times in the script or are battle-tested and shared across various scripts."}),"\n",(0,s.jsx)(n.p,{children:"In the template, you can find my two favourite ones that I use in every single script."}),"\n",(0,s.jsxs)(n.p,{children:["To learn more about them, check out detailed descriptions of ",(0,s.jsx)(n.a,{href:"/docs/ssjs/debugging-ssjs#debugging-variable",children:(0,s.jsx)(n.code,{children:"debugValue"})})," and ",(0,s.jsx)(n.a,{href:"/docs/ssjs/debugging-ssjs#error-handler-function",children:(0,s.jsx)(n.code,{children:"handleError"})})," functions."]}),"\n",(0,s.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(n.p,{children:["If the script will be used in ",(0,s.jsx)(n.a,{href:"/docs/config/sfmc-code-resource",children:"JSON Code Resource backend"})," I modify those two functions a bit by:"]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Changing the ",(0,s.jsx)(n.code,{children:"debugValue"})," Write to: ",(0,s.jsx)(n.code,{children:"Write(' --- ' + description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + ' --- ');"})," as break line tag will not work."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Removing the ",(0,s.jsx)(n.code,{children:"Platform.Response.Redirect"})," from ",(0,s.jsx)(n.code,{children:"handleError"})," as we don't want backend redirects. The ",(0,s.jsx)(n.code,{children:"errorURL"})," variable follows suit."]}),"\n"]}),"\n"]})]}),"\n",(0,s.jsxs)(n.p,{children:["In many cross-cloud scenarios I also use ",(0,s.jsx)(n.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"AMPScript runner"}),", but as it is more use case specific solution, I don't keep it in base template."]}),"\n",(0,s.jsxs)(n.p,{children:["I prefix all functions with ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide#3-documentation-comments",children:"documentation comments"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"script-body",children:"Script Body"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:" try {\n /* ----------------------------------------------------------------------- */\n /* ----------------------- 3. {{SECTION NAME}} --------------------------- */\n /* ----------------------------------------------------------------------- */\n\n /**\n * There can be just one section for simpler scripts, or there can be multiple.\n * As your code grow, split it into separate numbered sections for easier navigation.\n * Always try to make each section coherent with code logic to make the split meaningful.\n */\n\n } catch (error) {\n handleError(error);\n }\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The final part of the template is where I'm adding the main part of the script. It's wrapped in try/catch (more on that ",(0,s.jsx)(n.a,{href:"/docs/ssjs/debugging-ssjs#try-to-catch-the-error",children:"here"}),") and - if the script is long - split into ",(0,s.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide#2-section-comments",children:"sections"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1872:(e,n,r)=>{r.d(n,{m:()=>i});r(7294);const s="leadText_qzwo";var t=r(5893);const i=e=>{let{content:n}=e;return(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("p",{id:s,children:n})})}},1151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>o});var s=r(7294);const t={},i=s.createContext(t);function o(e){const n=s.useContext(i);return s.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:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.18eddc47.js b/assets/js/df203c0f.18eddc47.js new file mode 100644 index 000000000..6d2021c24 --- /dev/null +++ b/assets/js/df203c0f.18eddc47.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9924],{9114:(e,n,t)=>{t.d(n,{Z:()=>M});var i=t(7294),s=t(5893);function o(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=i.Children.toArray(e),t=n.find((e=>i.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=n.filter((e=>e!==t)),l=t?.props.children;return{mdxAdmonitionTitle:l,rest:o.length>0?(0,s.jsx)(s.Fragment,{children:o}):null}}(e.children),o=e.title??n;return{...e,...o&&{title:o},children:t}}var l=t(512),a=t(7325),r=t(3702);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:n,className:t,children:i}=e;return(0,s.jsx)("div",{className:(0,l.Z)(r.k.common.admonition,r.k.common.admonitionType(n),c.admonition,t),children:i})}function u(e){let{icon:n,title:t}=e;return(0,s.jsxs)("div",{className:c.admonitionHeading,children:[(0,s.jsx)("span",{className:c.admonitionIcon,children:n}),t]})}function h(e){let{children:n}=e;return n?(0,s.jsx)("div",{className:c.admonitionContent,children:n}):null}function m(e){const{type:n,icon:t,title:i,children:o,className:l}=e;return(0,s.jsxs)(d,{type:n,className:l,children:[(0,s.jsx)(u,{title:i,icon:t}),(0,s.jsx)(h,{children:o})]})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.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 x={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function f(e){return(0,s.jsx)(m,{...x,...e,className:(0,l.Z)("alert alert--secondary",e.className),children:e.children})}function j(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.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 p={icon:(0,s.jsx)(j,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,s.jsx)(m,{...p,...e,className:(0,l.Z)("alert alert--success",e.className),children:e.children})}function N(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.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 Z={icon:(0,s.jsx)(N,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,s.jsx)(m,{...Z,...e,className:(0,l.Z)("alert alert--info",e.className),children:e.children})}function T(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.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 b={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.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 z={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const C={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const k={...{note:f,tip:v,info:w,warning:function(e){return(0,s.jsx)(m,{...b,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(m,{...z,...e,className:(0,l.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(f,{title:"secondary",...e}),important:e=>(0,s.jsx)(w,{title:"important",...e}),success:e=>(0,s.jsx)(v,{title:"success",...e}),caution:function(e){return(0,s.jsx)(m,{...C,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})}}};function M(e){const n=o(e),t=(i=n.type,k[i]||(console.warn(`No admonition component found for admonition type "${i}". Using Info as fallback.`),k.info));var i;return(0,s.jsx)(t,{...n})}},615:(e,n,t)=>{t.r(n),t.d(n,{default:()=>j});t(7294);var i=t(512),s=t(4791),o=t(3777),l=t(9488),a=t(3702),r=t(7325),c=t(3647),d=t(9501),u=t(3899),h=t(5893);function m(e){const n=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,r.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". 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)',message:"One doc tagged|{count} docs tagged"},{count:n}))}();return(0,r.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:n(e.tag.count),tagName:e.tag.label})}function g(e){let{doc:n}=e;return(0,h.jsxs)("article",{className:"margin-vert--lg",children:[(0,h.jsx)(s.Z,{to:n.permalink,children:(0,h.jsx)(u.Z,{as:"h2",children:n.title})}),n.description&&(0,h.jsx)("p",{children:n.description})]})}function x(e){let{title:n}=e;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l.d,{title:n}),(0,h.jsx)(c.Z,{tag:"doc_tag_doc_list"})]})}function f(e){let{tag:n,title:t}=e;return(0,h.jsx)(l.FG,{className:(0,i.Z)(a.k.page.docsTagDocListPage),children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsx)("div",{className:"row",children:(0,h.jsxs)("main",{className:"col col--8 col--offset-2",children:[n.unlisted&&(0,h.jsx)(d.Z,{}),(0,h.jsxs)("header",{className:"margin-bottom--xl",children:[(0,h.jsx)(u.Z,{as:"h1",children:t}),(0,h.jsx)(s.Z,{href:n.allTagsPath,children:(0,h.jsx)(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,h.jsx)("section",{className:"margin-vert--lg",children:n.items.map((e=>(0,h.jsx)(g,{doc:e},e.id)))})]})})})})}function j(e){const n=m(e);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(x,{...e,title:n}),(0,h.jsx)(f,{...e,title:n})]})}},9501:(e,n,t)=>{t.d(n,{Z:()=>m});t(7294);var i=t(512),s=t(7325),o=t(1514),l=t(5893);function a(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,l.jsx)(s.Z,{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,l.jsx)(o.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(3702),u=t(9114);function h(e){let{className:n}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(a,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,l.jsx)(r,{})})}function m(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(h,{...e})]})}},3777:(e,n,t)=>{t.d(n,{c:()=>c});var i=t(7294),s=t(9962);const o=["zero","one","two","few","many","other"];function l(e){return o.filter((n=>e.includes(n)))}const a={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function r(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,i.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:l(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),a}}),[e])}function c(){const e=r();return{selectMessage:(n,t)=>function(e,n,t){const i=e.split("|");if(1===i.length)return i[0];i.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const s=t.select(n),o=t.pluralForms.indexOf(s);return i[Math.min(o,i.length-1)]}(t,n,e)}}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.6fd6f28b.js b/assets/js/df203c0f.6fd6f28b.js deleted file mode 100644 index 50a190aed..000000000 --- a/assets/js/df203c0f.6fd6f28b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9924],{615:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var a=l(7294),n=l(6010),r=l(3699),s=l(3777),c=l(9488),o=l(3702),i=l(7325),u=l(241),m=l(3647);function g(e){let{doc:t}=e;return a.createElement("article",{className:"margin-vert--lg"},a.createElement(r.Z,{to:t.permalink},a.createElement("h2",null,t.title)),t.description&&a.createElement("p",null,t.description))}function d(e){let{tag:t}=e;const l=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,i.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". 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)',message:"One doc tagged|{count} docs tagged"},{count:t}))}(),d=(0,i.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:l(t.count),tagName:t.label});return a.createElement(c.FG,{className:(0,n.Z)(o.k.wrapper.docsPages,o.k.page.docsTagDocListPage)},a.createElement(c.d,{title:d}),a.createElement(m.Z,{tag:"doc_tag_doc_list"}),a.createElement(u.Z,null,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("header",{className:"margin-bottom--xl"},a.createElement("h1",null,d),a.createElement(r.Z,{href:t.allTagsPath},a.createElement(i.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),a.createElement("section",{className:"margin-vert--lg"},t.items.map((e=>a.createElement(g,{key:e.id,doc:e})))))))))}},3777:(e,t,l)=>{l.d(t,{c:()=>i});var a=l(7294),n=l(9962);const r=["zero","one","two","few","many","other"];function s(e){return r.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:s(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.Z)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:s(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`),c}}),[e])}function i(){const e=o();return{selectMessage:(t,l)=>function(e,t,l){const a=e.split("|");if(1===a.length)return a[0];a.length>l.pluralForms.length&&console.error(`For locale=${l.locale}, a maximum of ${l.pluralForms.length} plural forms are expected (${l.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=l.select(t),r=l.pluralForms.indexOf(n);return a[Math.min(r,a.length-1)]}(l,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/e2615d27.c2585def.js b/assets/js/e2615d27.892ab758.js similarity index 97% rename from assets/js/e2615d27.c2585def.js rename to assets/js/e2615d27.892ab758.js index c1be2c50e..b36e71230 100644 --- a/assets/js/e2615d27.c2585def.js +++ b/assets/js/e2615d27.892ab758.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9117],{2797:e=>{e.exports=JSON.parse('{"label":"Email","permalink":"/docs/tags/email","allTagsPath":"/docs/tags","count":7,"items":[{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9117],{2797:e=>{e.exports=JSON.parse('{"label":"Email","permalink":"/docs/tags/email","allTagsPath":"/docs/tags","count":7,"items":[{"id":"interaction-studio/mcp-open-time-email","title":"MCP Open Time Email","description":"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.","permalink":"/docs/interaction-studio/mcp-open-time-email"},{"id":"config/sfmc-behavioral-triggers","title":"SFMC Behavioral Triggers","description":"Win-back your e-commerce customers with SFMC Behavioral Triggers.","permalink":"/docs/config/sfmc-behavioral-triggers"},{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"},{"id":"ssjs/debugging-ssjs","title":"SSJS Debugging & Error Handling","description":"To catch, or not to catch, that is debugging.","permalink":"/docs/ssjs/debugging-ssjs"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/e3f02ea0.7d8a622b.js b/assets/js/e3f02ea0.3f96c5cf.js similarity index 82% rename from assets/js/e3f02ea0.7d8a622b.js rename to assets/js/e3f02ea0.3f96c5cf.js index 79d96c42b..1a7ecc422 100644 --- a/assets/js/e3f02ea0.7d8a622b.js +++ b/assets/js/e3f02ea0.3f96c5cf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9379],{6791:e=>{e.exports=JSON.parse('{"label":"Best Practice","permalink":"/sites/tags/best-practice","allTagsPath":"/sites/tags","count":1,"items":[{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC.","permalink":"/sites/newsletter"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9379],{6791:e=>{e.exports=JSON.parse('{"label":"Best Practice","permalink":"/sites/tags/best-practice","allTagsPath":"/sites/tags","count":1,"items":[{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC.","permalink":"/sites/newsletter"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/e5aa2e7b.ef84462c.js b/assets/js/e5aa2e7b.84be1892.js similarity index 96% rename from assets/js/e5aa2e7b.ef84462c.js rename to assets/js/e5aa2e7b.84be1892.js index 5202e8020..c90c8ff0d 100644 --- a/assets/js/e5aa2e7b.ef84462c.js +++ b/assets/js/e5aa2e7b.84be1892.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8421],{5269:e=>{e.exports=JSON.parse('{"label":"Analytics","permalink":"/docs/tags/analytics","allTagsPath":"/docs/tags","count":5,"items":[{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8421],{5269:e=>{e.exports=JSON.parse('{"label":"Analytics","permalink":"/docs/tags/analytics","allTagsPath":"/docs/tags","count":5,"items":[{"id":"config/sfmc-enhanced-send-log","title":"SFMC Enhanced Send Log","description":"Create, customise and enhance SFMC Send Log for debugging and reporting.","permalink":"/docs/config/sfmc-enhanced-send-log"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","title":"SFMC SQL Debugging Email Sends","description":"Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/e5fc05e6.16e1e6aa.js b/assets/js/e5fc05e6.16e1e6aa.js new file mode 100644 index 000000000..f4e4d8ba3 --- /dev/null +++ b/assets/js/e5fc05e6.16e1e6aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[998],{5083:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var l=s(5893),i=s(1151),t=s(1872);const r={id:"sfmc-sql-null-functions",title:"SFMC SQL NULL Functions",sidebar_label:"Null Functions",description:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",image:"img/og/og-image-sql-null-functions.png",tags:["Marketing Cloud","SQL"]},o=void 0,a={id:"sql/sfmc-sql-null-functions",title:"SFMC SQL NULL Functions",description:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",source:"@site/docs/sql/sfmc-sql-null-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-null-functions",permalink:"/docs/sql/sfmc-sql-null-functions",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-null-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1657131299,formattedLastUpdatedAt:"Jul 6, 2022",frontMatter:{id:"sfmc-sql-null-functions",title:"SFMC SQL NULL Functions",sidebar_label:"Null Functions",description:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",image:"img/og/og-image-sql-null-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Aggregate Functions",permalink:"/docs/sql/sfmc-sql-aggregate-functions"},next:{title:"Style Guide",permalink:"/docs/sql/sfmc-sql-style-guide"}},d={},c=[{value:"NULL",id:"null",level:2},{value:"NULL with standard SQL Functions",id:"null-with-standard-sql-functions",level:3},{value:"NULL with relational operators",id:"null-with-relational-operators",level:3},{value:"NULL with conditional operators",id:"null-with-conditional-operators",level:3},{value:"NULL with logical operators",id:"null-with-logical-operators",level:3},{value:"AND operator",id:"and-operator",level:4},{value:"OR operator",id:"or-operator",level:4},{value:"NULL with aggregate functions",id:"null-with-aggregate-functions",level:3},{value:"IS NULL",id:"is-null",level:2},{value:"ISNULL",id:"isnull",level:2},{value:"COALESCE",id:"coalesce",level:2},{value:"NULLIF",id:"nullif",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.m,{content:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL."}),"\n",(0,l.jsx)(n.p,{children:"NULL is a fickle beast, and for the people not accustomed to how it works in SQL, it can create many problems (read: incorrect data output). This is especially true for those coming from nullish-friendly languages (like SSJS). Let's jump into the details."}),"\n",(0,l.jsx)(n.h2,{id:"null",children:"NULL"}),"\n",(0,l.jsxs)(n.p,{children:["Like in other languages, NULL is a placeholder that marks an absent (unknown) value. Unlike in other languages (like SSJS), it can be used in any data type. You can have ",(0,l.jsx)(n.code,{children:"NULL"})," Date (datetime) , ",(0,l.jsx)(n.code,{children:"NULL"})," Number (int), ",(0,l.jsx)(n.code,{children:"NULL"})," Text (nvarchar) or ",(0,l.jsx)(n.code,{children:"NULL"})," Boolean."]}),"\n",(0,l.jsxs)(n.p,{children:["Also, unlike in some other languages, SQL doesn't support a ",(0,l.jsx)(n.em,{children:"default"})," nullish coalescing. In simpler words, it means that empty string (",(0,l.jsx)(n.code,{children:"''"}),") or zero (",(0,l.jsx)(n.code,{children:"0"}),") are not equal to ",(0,l.jsx)(n.code,{children:"NULL"}),". It makes sense when you treat ",(0,l.jsx)(n.code,{children:"NULL"})," as an unknown value - unknown is not equal to ",(0,l.jsx)(n.code,{children:"0"}),"."]}),"\n",(0,l.jsx)(n.h3,{id:"null-with-standard-sql-functions",children:"NULL with standard SQL Functions"}),"\n",(0,l.jsxs)(n.p,{children:["Because ",(0,l.jsx)(n.code,{children:"NULL"})," is unknown, if you try to do any standard operation on the NULL (like adding an integer, or ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-string-functions#concat",children:"concatenating"})," it with a string), it will return unknown (",(0,l.jsx)(n.code,{children:"NULL"}),"):"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{2-3} title="\u274c Functions with NULLs"',children:"SELECT\n 1 + NULL AS MathFunctionWithNull -- Outputs NULL\n , CONCAT('Hello ', NULL) AS StringFunctionWithNull -- Outputs NULL\n"})}),"\n",(0,l.jsx)(n.h3,{id:"null-with-relational-operators",children:"NULL with relational operators"}),"\n",(0,l.jsxs)(n.p,{children:["The fun doesn't stop there - When you try to make any ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where#basic-operators",children:"comparision"})," with ",(0,l.jsx)(n.code,{children:"NULL"}),", it will fail, because it is a check against an unknown value. Or, to be more specific, the comparison will evaluate to ",(0,l.jsx)(n.code,{children:"FALSE"}),", impacting your output."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{4-6} title="\u274c Comparisons with NULLs"',children:"SELECT SubscriberKey\nFROM DataExtension\nWHERE\n NullablePurchaseCount > 0\n AND NullableProductName != 'T-Shirt'\n AND EmailAddress != NULL\n"})}),"\n",(0,l.jsxs)(n.p,{children:["In the example above, all three comparisons in the ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,l.jsx)(n.code,{children:"WHERE"})})," statement will return ",(0,l.jsx)(n.code,{children:"FALSE"})," for ",(0,l.jsx)(n.code,{children:"NULL"}),"s and the query will not output any rows."]}),"\n",(0,l.jsx)(n.p,{children:"Let's check why, step by step:"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"NullablePurchaseCount > 0"})," - The rows with a value (be it ",(0,l.jsx)(n.code,{children:"0"})," or ",(0,l.jsx)(n.code,{children:"10"}),") are evaluated normally. The rows with ",(0,l.jsx)(n.code,{children:"NULL"})," (absent value) evaluate as ",(0,l.jsx)(n.code,{children:"FALSE"})," and are removed from the output."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"NullableProductName != 'T-Shirt'"})," - The rows with a value (be it ",(0,l.jsx)(n.code,{children:"''"}),", ",(0,l.jsx)(n.code,{children:"'Hoodie'"})," or ",(0,l.jsx)(n.code,{children:"'T-Shirt'"}),") are evaluated normally. The rows with ",(0,l.jsx)(n.code,{children:"NULL"})," (absent value) evaluate as ",(0,l.jsx)(n.code,{children:"FALSE"})," and are removed from the output."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"EmailAddress != NULL"})," - Regardless of the ",(0,l.jsx)(n.code,{children:"EmailAddress"})," value, because we are comparing it to ",(0,l.jsx)(n.code,{children:"NULL"}),", check for every row evaluate to ",(0,l.jsx)(n.code,{children:"FALSE"})," and therefore is dropped from the output."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"null-with-conditional-operators",children:"NULL with conditional operators"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"NULL"})," gets even more problematic when you want to work with ",(0,l.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-where#in-shorthand",children:[(0,l.jsx)(n.code,{children:"IN"}),"/",(0,l.jsx)(n.code,{children:"NOT IN"})]})," or ",(0,l.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-where#between-shorthand",children:[(0,l.jsx)(n.code,{children:"BETWEEN"}),"/",(0,l.jsx)(n.code,{children:"NOT IN BETWEEN"})]}),"."]}),"\n",(0,l.jsxs)(n.p,{children:["When you use ",(0,l.jsx)(n.code,{children:"NULL"})," as one of the values searched by ",(0,l.jsx)(n.code,{children:"IN"})," shorthand, it will be ignored, and no rows with ",(0,l.jsx)(n.code,{children:"NULL"})," in the checked column will be outputted for this condition."]}),"\n",(0,l.jsxs)(n.p,{children:["When you use ",(0,l.jsx)(n.code,{children:"NULL"})," with the other shorthands (",(0,l.jsx)(n.code,{children:"NOT IN"}),", ",(0,l.jsx)(n.code,{children:"BETWEEN"})," and ",(0,l.jsx)(n.code,{children:"NOT IN BETWEEN"}),"), this condition will have no results."]}),"\n",(0,l.jsx)(n.h3,{id:"null-with-logical-operators",children:"NULL with logical operators"}),"\n",(0,l.jsxs)(n.p,{children:["When you are building a boolean logic with ",(0,l.jsx)(n.code,{children:"AND"}),"/",(0,l.jsx)(n.code,{children:"OR"})," operators (be it in ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,l.jsx)(n.code,{children:"WHERE"})})," or in ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case",children:(0,l.jsx)(n.code,{children:"CASE"})}),") treat ",(0,l.jsx)(n.code,{children:"NULL"})," as ",(0,l.jsx)(n.code,{children:"FALSE"}),"."]}),"\n",(0,l.jsx)(n.h4,{id:"and-operator",children:"AND operator"}),"\n",(0,l.jsxs)(n.p,{children:["When you have two booleans or expressions connected by the ",(0,l.jsx)(n.code,{children:"AND"})," operator, it will only evaluate to ",(0,l.jsx)(n.code,{children:"TRUE"})," if both are ",(0,l.jsx)(n.code,{children:"TRUE"}),"."]}),"\n",(0,l.jsx)(n.p,{children:"Boolean or Expression | Boolean or Expression | Result"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["| - | -\nTRUE | TRUE | ",(0,l.jsx)(n.strong,{children:"TRUE"}),"\nTRUE | FALSE | FALSE\nTRUE | NULL | NULL\nFALSE | TRUE | FALSE\nFALSE | FALSE | FALSE\nFALSE | NULL | NULL\nNULL | TRUE | NULL\nNULL | FALSE | NULL\nNULL | NULL | NULL"]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"or-operator",children:"OR operator"}),"\n",(0,l.jsxs)(n.p,{children:["When you have two booleans or expressions connected by the ",(0,l.jsx)(n.code,{children:"OR"})," operator, it will evaluate to ",(0,l.jsx)(n.code,{children:"TRUE"})," if at least one is ",(0,l.jsx)(n.code,{children:"TRUE"}),"."]}),"\n",(0,l.jsx)(n.p,{children:"Boolean or Expression | Boolean or Expression | Result"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["| - | -\nTRUE | TRUE | ",(0,l.jsx)(n.strong,{children:"TRUE"}),"\nTRUE | FALSE | ",(0,l.jsx)(n.strong,{children:"TRUE"}),"\nTRUE | NULL | ",(0,l.jsx)(n.strong,{children:"TRUE"}),"\nFALSE | TRUE | ",(0,l.jsx)(n.strong,{children:"TRUE"}),"\nFALSE | FALSE | FALSE\nFALSE | NULL | NULL\nNULL | TRUE | ",(0,l.jsx)(n.strong,{children:"TRUE"}),"\nNULL | FALSE | NULL\nNULL | NULL | NULL"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"null-with-aggregate-functions",children:"NULL with aggregate functions"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-aggregate-functions",children:"Aggregate functions"})," just ignore ",(0,l.jsx)(n.code,{children:"NULL"})," values. Calculating average? ",(0,l.jsx)(n.code,{children:"NULL"})," will not be taken into consideration at all - which can scew your output a lot."]}),"\n",(0,l.jsxs)(n.p,{children:["The only exception is ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-aggregate-functions#count",children:(0,l.jsx)(n.code,{children:"COUNT"})})," that has specific ",(0,l.jsx)(n.code,{children:"*"})," argument for counting rows with ",(0,l.jsx)(n.code,{children:"NULL"}),"."]}),"\n",(0,l.jsxs)(n.p,{children:["Ok, we discussed a lot of ",(0,l.jsx)(n.code,{children:"NULL"})," problems. Now it's time to solve them with dedicated ",(0,l.jsx)(n.code,{children:"NULL"})," functions."]}),"\n",(0,l.jsx)(n.h2,{id:"is-null",children:"IS NULL"}),"\n",(0,l.jsxs)(n.p,{children:["Firstly, let's cover how we can recognize whether a ",(0,l.jsx)(n.code,{children:"NULL"})," is a ",(0,l.jsx)(n.code,{children:"NULL"}),". Using standard ",(0,l.jsx)(n.code,{children:"="}),"/",(0,l.jsx)(n.code,{children:"!="})," operators won't work, but you can do it easily with dedicated ",(0,l.jsx)(n.code,{children:"IS NULL"}),"/",(0,l.jsx)(n.code,{children:"IS NOT NULL"})," operators:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{3} title="Subscribers with Email Address"',children:"SELECT SubscriberKey\nFROM DataExtension\nWHERE EmailAddress IS NOT NULL\n"})}),"\n",(0,l.jsx)(n.p,{children:"Because comparison operators don't work, if you are building filters on nullable values, you might have to query defensively:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{5} title="Subscribers with small amount of purchases"',children:"SELECT SubscriberKey\nFROM DataExtension\nWHERE\n PurchaseCount < 5\n OR PurchaseCount IS NULL\n"})}),"\n",(0,l.jsxs)(n.p,{children:["Assuming ",(0,l.jsx)(n.code,{children:"PurchaseCount"})," is a nullable field, should you use only ",(0,l.jsx)(n.code,{children:"PurchaseCount < 5"}),", you wouldn't see the rows with the ",(0,l.jsx)(n.code,{children:"NULL"})," in that column. Adding another condition that checks explicitly for ",(0,l.jsx)(n.code,{children:"NULL"})," solves that."]}),"\n",(0,l.jsxs)(n.p,{children:["However, there are other methods - dedicated shorthands of the universally helpful ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case",children:(0,l.jsx)(n.code,{children:"CASE"})})," statement. Let's check them."]}),"\n",(0,l.jsx)(n.h2,{id:"isnull",children:"ISNULL"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"ISNULL"})," function is the first line of defence against the ",(0,l.jsx)(n.code,{children:"NULL"}),"s. It takes two arguments, checks the first one, and returns it if it is not ",(0,l.jsx)(n.code,{children:"NULL"}),". Else, it returns the second. Perfect for creating a fallback value for nullable columns."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{3} title="Subscribers with small amount of purchases"',children:"SELECT SubscriberKey\nFROM DataExtension\nWHERE ISNULL(PurchaseCount, 0) < 5\n"})}),"\n",(0,l.jsxs)(n.p,{children:["Now the filter will check whether ",(0,l.jsx)(n.code,{children:"PurchaseCount"})," is ",(0,l.jsx)(n.code,{children:"NULL"}),". If not, it will use its value. If yes, it will consider it a zero for the conditional check."]}),"\n",(0,l.jsx)(n.p,{children:"The second argument doesn't have to be a standard value. It can also be a column. Just make sure it is not nullable, or..."}),"\n",(0,l.jsx)(n.h2,{id:"coalesce",children:"COALESCE"}),"\n",(0,l.jsxs)(n.p,{children:["If a single fallback provided by ",(0,l.jsx)(n.code,{children:"ISNULL"})," is not enough, the ",(0,l.jsx)(n.code,{children:"COALESCE"})," function lets you provide multiple. ",(0,l.jsx)(n.code,{children:"COALESCE"})," will return the first argument that is not ",(0,l.jsx)(n.code,{children:"NULL"}),". However, if all are ",(0,l.jsx)(n.code,{children:"NULL"})," - the final outcome will also be ",(0,l.jsx)(n.code,{children:"NULL"}),"."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{3,5} title="Find Subscribers with at least one available address for a direct mail"',children:"SELECT\n SubscriberKey\n , COALESCE(HomeAddress, WorkAddress, ParentAddress) AS AvailableAddress\nFROM DataExtension\nWHERE COALESCE(HomeAddress, WorkAddress, ParentAddress) IS NOT NULL\n"})}),"\n",(0,l.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"COALESCE"})," is perfect for creating concatenated fields where you are not sure if all parts will be available, as it lets you control the number of spaces between elements:"]}),(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'title="Calculate FullName with nullable MiddleName"',children:"SELECT CONCAT(FirstName, ' ', COALESCE(MiddleName + ' ', ''), LastName) AS FullName\n"})})]}),"\n",(0,l.jsx)(n.h2,{id:"nullif",children:"NULLIF"}),"\n",(0,l.jsxs)(n.p,{children:["Finally, there is the ",(0,l.jsx)(n.code,{children:"NULLIF"})," function that returns ",(0,l.jsx)(n.code,{children:"NULL"})," if two provided arguments are equal or the first argument if they are different:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Pulls WorkEmailAddress value only if it is different from general EmailAddress"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , NULLIF(WorkEmailAddress, EmailAddress) AS WorkEmailAddress\n"})}),"\n",(0,l.jsxs)(n.p,{children:["I personally find the standard ",(0,l.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case#iif-shorthand",children:(0,l.jsx)(n.code,{children:"IIF"})})," shorthand much more readable and user-friendly, despite being slightly longer than dedicated ",(0,l.jsx)(n.code,{children:"NULLIF"}),":"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sql",metastring:'{4} title="Pulls WorkEmailAddress value only if it is different from general Email Address with IIF"',children:"SELECT\n SubscriberKey\n , EmailAddress\n , IIF(WorkEmailAddress = EmailAddress, NULL, EmailAddress) AS WorkEmailAddress\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(h,{...e})}):h(e)}},1872:(e,n,s)=>{s.d(n,{m:()=>t});s(7294);const l="leadText_qzwo";var i=s(5893);const t=e=>{let{content:n}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:l,children:n})})}},1151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>r});var l=s(7294);const i={},t=l.createContext(i);function r(e){const n=l.useContext(t);return l.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(i):e.components||i:r(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e5fc05e6.eebfc85c.js b/assets/js/e5fc05e6.eebfc85c.js deleted file mode 100644 index 90dd886db..000000000 --- a/assets/js/e5fc05e6.eebfc85c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[998],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>c});var a=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,l=function(e,t){if(null==e)return{};var n,a,l={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},N=a.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,s=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=p(n),N=l,c=u["".concat(s,".").concat(N)]||u[N]||m[N]||r;return n?a.createElement(c,i(i({ref:t},d),{},{components:n})):a.createElement(c,i({ref:t},d))}));function c(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=n.length,i=new Array(r);i[0]=N;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[u]="string"==typeof e?e:l,i[1]=o;for(var p=2;p<r;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}N.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>r});var a=n(7294);const l="leadText_qzwo",r=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:l},t))}},5827:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>N,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=n(7462),l=(n(7294),n(4137)),r=n(1872);const i={id:"sfmc-sql-null-functions",title:"SFMC SQL NULL Functions",sidebar_label:"Null Functions",description:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",image:"img/og/og-image-sql-null-functions.png",tags:["Marketing Cloud","SQL"]},o=void 0,s={unversionedId:"sql/sfmc-sql-null-functions",id:"sql/sfmc-sql-null-functions",title:"SFMC SQL NULL Functions",description:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",source:"@site/docs/sql/sfmc-sql-null-functions.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-null-functions",permalink:"/docs/sql/sfmc-sql-null-functions",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-null-functions.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1657131299,formattedLastUpdatedAt:"Jul 6, 2022",frontMatter:{id:"sfmc-sql-null-functions",title:"SFMC SQL NULL Functions",sidebar_label:"Null Functions",description:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",image:"img/og/og-image-sql-null-functions.png",tags:["Marketing Cloud","SQL"]},sidebar:"docs",previous:{title:"Aggregate Functions",permalink:"/docs/sql/sfmc-sql-aggregate-functions"},next:{title:"Style Guide",permalink:"/docs/sql/sfmc-sql-style-guide"}},p={},d=[{value:"NULL",id:"null",level:2},{value:"NULL with standard SQL Functions",id:"null-with-standard-sql-functions",level:3},{value:"NULL with relational operators",id:"null-with-relational-operators",level:3},{value:"NULL with conditional operators",id:"null-with-conditional-operators",level:3},{value:"NULL with logical operators",id:"null-with-logical-operators",level:3},{value:"AND operator",id:"and-operator",level:4},{value:"OR operator",id:"or-operator",level:4},{value:"NULL with aggregate functions",id:"null-with-aggregate-functions",level:3},{value:"IS NULL",id:"is-null",level:2},{value:"ISNULL",id:"isnull",level:2},{value:"COALESCE",id:"coalesce",level:2},{value:"NULLIF",id:"nullif",level:2}],u={toc:d},m="wrapper";function N(e){let{components:t,...n}=e;return(0,l.kt)(m,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)(r.m,{content:"IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.",mdxType:"LeadText"}),(0,l.kt)("p",null,"NULL is a fickle beast, and for the people not accustomed to how it works in SQL, it can create many problems (read: incorrect data output). This is especially true for those coming from nullish-friendly languages (like SSJS). Let's jump into the details."),(0,l.kt)("h2",{id:"null"},"NULL"),(0,l.kt)("p",null,"Like in other languages, NULL is a placeholder that marks an absent (unknown) value. Unlike in other languages (like SSJS), it can be used in any data type. You can have ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," Date (datetime) , ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," Number (int), ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," Text (nvarchar) or ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," Boolean."),(0,l.kt)("p",null,"Also, unlike in some other languages, SQL doesn't support a ",(0,l.kt)("em",{parentName:"p"},"default")," nullish coalescing. In simpler words, it means that empty string (",(0,l.kt)("inlineCode",{parentName:"p"},"''"),") or zero (",(0,l.kt)("inlineCode",{parentName:"p"},"0"),") are not equal to ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),". It makes sense when you treat ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," as an unknown value - unknown is not equal to ",(0,l.kt)("inlineCode",{parentName:"p"},"0"),"."),(0,l.kt)("h3",{id:"null-with-standard-sql-functions"},"NULL with standard SQL Functions"),(0,l.kt)("p",null,"Because ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," is unknown, if you try to do any standard operation on the NULL (like adding an integer, or ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-string-functions#concat"},"concatenating")," it with a string), it will return unknown (",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"):"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{2-3} title="\u274c Functions with NULLs"',"{2-3}":!0,title:'"\u274c',Functions:!0,with:!0,'NULLs"':!0},"SELECT\n 1 + NULL AS MathFunctionWithNull -- Outputs NULL\n , CONCAT('Hello ', NULL) AS StringFunctionWithNull -- Outputs NULL\n")),(0,l.kt)("h3",{id:"null-with-relational-operators"},"NULL with relational operators"),(0,l.kt)("p",null,"The fun doesn't stop there - When you try to make any ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#basic-operators"},"comparision")," with ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),", it will fail, because it is a check against an unknown value. Or, to be more specific, the comparison will evaluate to ",(0,l.kt)("inlineCode",{parentName:"p"},"FALSE"),", impacting your output."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4-6} title="\u274c Comparisons with NULLs"',"{4-6}":!0,title:'"\u274c',Comparisons:!0,with:!0,'NULLs"':!0},"SELECT SubscriberKey\nFROM DataExtension\nWHERE\n NullablePurchaseCount > 0\n AND NullableProductName != 'T-Shirt'\n AND EmailAddress != NULL\n")),(0,l.kt)("p",null,"In the example above, all three comparisons in the ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," statement will return ",(0,l.kt)("inlineCode",{parentName:"p"},"FALSE")," for ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"s and the query will not output any rows."),(0,l.kt)("p",null,"Let's check why, step by step:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"NullablePurchaseCount > 0")," - The rows with a value (be it ",(0,l.kt)("inlineCode",{parentName:"li"},"0")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"10"),") are evaluated normally. The rows with ",(0,l.kt)("inlineCode",{parentName:"li"},"NULL")," (absent value) evaluate as ",(0,l.kt)("inlineCode",{parentName:"li"},"FALSE")," and are removed from the output."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"NullableProductName != 'T-Shirt'")," - The rows with a value (be it ",(0,l.kt)("inlineCode",{parentName:"li"},"''"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"'Hoodie'")," or ",(0,l.kt)("inlineCode",{parentName:"li"},"'T-Shirt'"),") are evaluated normally. The rows with ",(0,l.kt)("inlineCode",{parentName:"li"},"NULL")," (absent value) evaluate as ",(0,l.kt)("inlineCode",{parentName:"li"},"FALSE")," and are removed from the output."),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"EmailAddress != NULL")," - Regardless of the ",(0,l.kt)("inlineCode",{parentName:"li"},"EmailAddress")," value, because we are comparing it to ",(0,l.kt)("inlineCode",{parentName:"li"},"NULL"),", check for every row evaluate to ",(0,l.kt)("inlineCode",{parentName:"li"},"FALSE")," and therefore is dropped from the output.")),(0,l.kt)("h3",{id:"null-with-conditional-operators"},"NULL with conditional operators"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," gets even more problematic when you want to work with ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#in-shorthand"},(0,l.kt)("inlineCode",{parentName:"a"},"IN"),"/",(0,l.kt)("inlineCode",{parentName:"a"},"NOT IN"))," or ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#between-shorthand"},(0,l.kt)("inlineCode",{parentName:"a"},"BETWEEN"),"/",(0,l.kt)("inlineCode",{parentName:"a"},"NOT IN BETWEEN")),"."),(0,l.kt)("p",null,"When you use ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," as one of the values searched by ",(0,l.kt)("inlineCode",{parentName:"p"},"IN")," shorthand, it will be ignored, and no rows with ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," in the checked column will be outputted for this condition."),(0,l.kt)("p",null,"When you use ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," with the other shorthands (",(0,l.kt)("inlineCode",{parentName:"p"},"NOT IN"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"BETWEEN")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"NOT IN BETWEEN"),"), this condition will have no results."),(0,l.kt)("h3",{id:"null-with-logical-operators"},"NULL with logical operators"),(0,l.kt)("p",null,"When you are building a boolean logic with ",(0,l.kt)("inlineCode",{parentName:"p"},"AND"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"OR")," operators (be it in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,l.kt)("inlineCode",{parentName:"a"},"WHERE"))," or in ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case"},(0,l.kt)("inlineCode",{parentName:"a"},"CASE")),") treat ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," as ",(0,l.kt)("inlineCode",{parentName:"p"},"FALSE"),"."),(0,l.kt)("h4",{id:"and-operator"},"AND operator"),(0,l.kt)("p",null,"When you have two booleans or expressions connected by the ",(0,l.kt)("inlineCode",{parentName:"p"},"AND")," operator, it will only evaluate to ",(0,l.kt)("inlineCode",{parentName:"p"},"TRUE")," if both are ",(0,l.kt)("inlineCode",{parentName:"p"},"TRUE"),"."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Boolean or Expression"),(0,l.kt)("th",{parentName:"tr",align:null},"Boolean or Expression"),(0,l.kt)("th",{parentName:"tr",align:null},"Result"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"TRUE"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")))),(0,l.kt)("h4",{id:"or-operator"},"OR operator"),(0,l.kt)("p",null,"When you have two booleans or expressions connected by the ",(0,l.kt)("inlineCode",{parentName:"p"},"OR")," operator, it will evaluate to ",(0,l.kt)("inlineCode",{parentName:"p"},"TRUE")," if at least one is ",(0,l.kt)("inlineCode",{parentName:"p"},"TRUE"),"."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Boolean or Expression"),(0,l.kt)("th",{parentName:"tr",align:null},"Boolean or Expression"),(0,l.kt)("th",{parentName:"tr",align:null},"Result"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"TRUE"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"TRUE"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"TRUE"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"TRUE"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"TRUE"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"TRUE"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"FALSE"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL"),(0,l.kt)("td",{parentName:"tr",align:null},"NULL")))),(0,l.kt)("h3",{id:"null-with-aggregate-functions"},"NULL with aggregate functions"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions"},"Aggregate functions")," just ignore ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," values. Calculating average? ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," will not be taken into consideration at all - which can scew your output a lot."),(0,l.kt)("p",null,"The only exception is ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-aggregate-functions#count"},(0,l.kt)("inlineCode",{parentName:"a"},"COUNT"))," that has specific ",(0,l.kt)("inlineCode",{parentName:"p"},"*")," argument for counting rows with ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"."),(0,l.kt)("p",null,"Ok, we discussed a lot of ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," problems. Now it's time to solve them with dedicated ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," functions."),(0,l.kt)("h2",{id:"is-null"},"IS NULL"),(0,l.kt)("p",null,"Firstly, let's cover how we can recognize whether a ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," is a ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),". Using standard ",(0,l.kt)("inlineCode",{parentName:"p"},"="),"/",(0,l.kt)("inlineCode",{parentName:"p"},"!=")," operators won't work, but you can do it easily with dedicated ",(0,l.kt)("inlineCode",{parentName:"p"},"IS NULL"),"/",(0,l.kt)("inlineCode",{parentName:"p"},"IS NOT NULL")," operators:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Subscribers with Email Address"',"{3}":!0,title:'"Subscribers',with:!0,Email:!0,'Address"':!0},"SELECT SubscriberKey\nFROM DataExtension\nWHERE EmailAddress IS NOT NULL\n")),(0,l.kt)("p",null,"Because comparison operators don't work, if you are building filters on nullable values, you might have to query defensively:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{5} title="Subscribers with small amount of purchases"',"{5}":!0,title:'"Subscribers',with:!0,small:!0,amount:!0,of:!0,'purchases"':!0},"SELECT SubscriberKey\nFROM DataExtension\nWHERE\n PurchaseCount < 5\n OR PurchaseCount IS NULL\n")),(0,l.kt)("p",null,"Assuming ",(0,l.kt)("inlineCode",{parentName:"p"},"PurchaseCount")," is a nullable field, should you use only ",(0,l.kt)("inlineCode",{parentName:"p"},"PurchaseCount < 5"),", you wouldn't see the rows with the ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," in that column. Adding another condition that checks explicitly for ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," solves that."),(0,l.kt)("p",null,"However, there are other methods - dedicated shorthands of the universally helpful ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case"},(0,l.kt)("inlineCode",{parentName:"a"},"CASE"))," statement. Let's check them."),(0,l.kt)("h2",{id:"isnull"},"ISNULL"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"ISNULL")," function is the first line of defence against the ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"s. It takes two arguments, checks the first one, and returns it if it is not ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),". Else, it returns the second. Perfect for creating a fallback value for nullable columns."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3} title="Subscribers with small amount of purchases"',"{3}":!0,title:'"Subscribers',with:!0,small:!0,amount:!0,of:!0,'purchases"':!0},"SELECT SubscriberKey\nFROM DataExtension\nWHERE ISNULL(PurchaseCount, 0) < 5\n")),(0,l.kt)("p",null,"Now the filter will check whether ",(0,l.kt)("inlineCode",{parentName:"p"},"PurchaseCount")," is ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),". If not, it will use its value. If yes, it will consider it a zero for the conditional check."),(0,l.kt)("p",null,"The second argument doesn't have to be a standard value. It can also be a column. Just make sure it is not nullable, or..."),(0,l.kt)("h2",{id:"coalesce"},"COALESCE"),(0,l.kt)("p",null,"If a single fallback provided by ",(0,l.kt)("inlineCode",{parentName:"p"},"ISNULL")," is not enough, the ",(0,l.kt)("inlineCode",{parentName:"p"},"COALESCE")," function lets you provide multiple. ",(0,l.kt)("inlineCode",{parentName:"p"},"COALESCE")," will return the first argument that is not ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),". However, if all are ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," - the final outcome will also be ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{3,5} title="Find Subscribers with at least one available address for a direct mail"',"{3,5}":!0,title:'"Find',Subscribers:!0,with:!0,at:!0,least:!0,one:!0,available:!0,address:!0,for:!0,a:!0,direct:!0,'mail"':!0},"SELECT\n SubscriberKey\n , COALESCE(HomeAddress, WorkAddress, ParentAddress) AS AvailableAddress\nFROM DataExtension\nWHERE COALESCE(HomeAddress, WorkAddress, ParentAddress) IS NOT NULL\n")),(0,l.kt)("admonition",{title:"You Should Know",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"COALESCE")," is perfect for creating concatenated fields where you are not sure if all parts will be available, as it lets you control the number of spaces between elements:"),(0,l.kt)("pre",{parentName:"admonition"},(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="Calculate FullName with nullable MiddleName"',title:'"Calculate',FullName:!0,with:!0,nullable:!0,'MiddleName"':!0},"SELECT CONCAT(FirstName, ' ', COALESCE(MiddleName + ' ', ''), LastName) AS FullName\n"))),(0,l.kt)("h2",{id:"nullif"},"NULLIF"),(0,l.kt)("p",null,"Finally, there is the ",(0,l.kt)("inlineCode",{parentName:"p"},"NULLIF")," function that returns ",(0,l.kt)("inlineCode",{parentName:"p"},"NULL")," if two provided arguments are equal or the first argument if they are different:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Pulls WorkEmailAddress value only if it is different from general EmailAddress"',"{4}":!0,title:'"Pulls',WorkEmailAddress:!0,value:!0,only:!0,if:!0,it:!0,is:!0,different:!0,from:!0,general:!0,'EmailAddress"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , NULLIF(WorkEmailAddress, EmailAddress) AS WorkEmailAddress\n")),(0,l.kt)("p",null,"I personally find the standard ",(0,l.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#iif-shorthand"},(0,l.kt)("inlineCode",{parentName:"a"},"IIF"))," shorthand much more readable and user-friendly, despite being slightly longer than dedicated ",(0,l.kt)("inlineCode",{parentName:"p"},"NULLIF"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sql",metastring:'{4} title="Pulls WorkEmailAddress value only if it is different from general Email Address with IIF"',"{4}":!0,title:'"Pulls',WorkEmailAddress:!0,value:!0,only:!0,if:!0,it:!0,is:!0,different:!0,from:!0,general:!0,Email:!0,Address:!0,with:!0,'IIF"':!0},"SELECT\n SubscriberKey\n , EmailAddress\n , IIF(WorkEmailAddress = EmailAddress, NULL, EmailAddress) AS WorkEmailAddress\n")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ec6dc5c4.60577ed4.js b/assets/js/ec6dc5c4.60577ed4.js deleted file mode 100644 index 81a3a93dd..000000000 --- a/assets/js/ec6dc5c4.60577ed4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7873],{4137:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>h});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function s(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function a(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),m=p(o),d=r,h=m["".concat(l,".").concat(d)]||m[d]||u[d]||i;return o?n.createElement(h,s(s({ref:t},c),{},{components:o})):n.createElement(h,s({ref:t},c))}));function h(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=o.length,s=new Array(i);s[0]=d;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[m]="string"==typeof e?e:r,s[1]=a;for(var p=2;p<i;p++)s[p]=o[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,o)}d.displayName="MDXCreateElement"},7271:(e,t,o)=>{o.d(t,{V:()=>i,z:()=>r});var n=o(7294);const r=e=>{let{link:t,text:o,newTab:r=!1}=e;return n.createElement(n.Fragment,null,n.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:r?"_blank":"_self"},o))},i=e=>{let{linkLeft:t,textLeft:o,newTabLeft:r=!1,linkRight:i,textRight:s,newTabRight:a=!1}=e;return n.createElement(n.Fragment,null,n.createElement("div",{class:"col col--12"},n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:r?"_blank":"_self"},o),n.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:i,target:a?"_blank":"_self"},s)))}},1872:(e,t,o)=>{o.d(t,{m:()=>i});var n=o(7294);const r="leadText_qzwo",i=e=>{let{content:t}=e;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},t))}},8298:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>p,toc:()=>m});var n=o(7462),r=(o(7294),o(4137)),i=o(1872),s=o(7271);const a={id:"export-import-document-sfmc-roles",title:"Export, Import & Document SFMC Roles",sidebar_label:"Export, Import & Document SFMC Roles",description:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",image:"img/og/og-image-js-export-import-document-sfmc-roles.png",tags:["JavaScript","Marketing Cloud","Configuration","Users","Setup"]},l=void 0,p={unversionedId:"js/snippets/export-import-document-sfmc-roles",id:"js/snippets/export-import-document-sfmc-roles",title:"Export, Import & Document SFMC Roles",description:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",source:"@site/docs/js/snippets/export-import-document-sfmc-roles.mdx",sourceDirName:"js/snippets",slug:"/js/snippets/export-import-document-sfmc-roles",permalink:"/docs/js/snippets/export-import-document-sfmc-roles",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/snippets/export-import-document-sfmc-roles.mdx",tags:[{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Users",permalink:"/docs/tags/users"},{label:"Setup",permalink:"/docs/tags/setup"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1687990545,formattedLastUpdatedAt:"Jun 28, 2023",frontMatter:{id:"export-import-document-sfmc-roles",title:"Export, Import & Document SFMC Roles",sidebar_label:"Export, Import & Document SFMC Roles",description:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",image:"img/og/og-image-js-export-import-document-sfmc-roles.png",tags:["JavaScript","Marketing Cloud","Configuration","Users","Setup"]},sidebar:"snippets",previous:{title:"Engage with Countdown",permalink:"/docs/js/snippets/engage-with-countdown"},next:{title:"AMPScript Snippets",permalink:"/docs/category/ampscript-snippets"}},c={},m=[{value:"Where the magic happens",id:"where-the-magic-happens",level:2},{value:"Export & Import SFMC Roles",id:"export--import-sfmc-roles",level:2},{value:"Exporting an SFMC Role",id:"exporting-an-sfmc-role",level:3},{value:"Importing a SFMC Role",id:"importing-a-sfmc-role",level:3},{value:"Document SFMC Roles",id:"document-sfmc-roles",level:2},{value:"Backup of Standard Roles",id:"backup-of-standard-roles",level:2}],u={toc:m},d="wrapper";function h(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(i.m,{content:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",mdxType:"LeadText"}),(0,r.kt)("p",null,"While you get a set of standard user Roles in Salesforce Marketing Cloud, those are rarely enough. Instead, they are the base on which you can create custom-tailored solutions that align with your business architecture."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The best way to work with Roles and Permissions in Salesforce Marketing Cloud is to leverage standard roles and build on top of them with custom permissions/roles.")),(0,r.kt)("p",null,"On top of that, standard Roles are silently changing from release to release as permissions come and go, so keeping track of them is crucial to have a clear picture of what your users can do."),(0,r.kt)("p",null,"Marketing Cloud doesn't make it easy. There is no option to clone existing Roles to serve as a starting point for a new custom one. There is no option to export and import them between SFMC accounts. There is no option to create good documentation on them (unless you have a kink for super long print screens)."),(0,r.kt)("p",null,"Here comes JavaScript and ",(0,r.kt)("a",{parentName:"p",href:"/docs/js/js-dom"},"Document Object Model (DOM)")," to unlock all those scenarios."),(0,r.kt)("p",null,"Fear not - you don't have to be a developer to leverage it. I will describe everything step-by-step and share ready-to-use snippets with you. Let's dive in."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"When working with multiple roles or overlapping permissions, be sure to check what is the outcome on the user."),(0,r.kt)("p",{parentName:"admonition"},"Marketing Cloud goes with the most restrictive resulting permission possible:"),(0,r.kt)("ol",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ol"},"If at least one permission (role-based or individual) is set to Deny - the user will ",(0,r.kt)("strong",{parentName:"li"},"not")," be able to use the feature."),(0,r.kt)("li",{parentName:"ol"},"If there is neither Allow nor Deny permission - the user will ",(0,r.kt)("strong",{parentName:"li"},"not")," be able to use the feature."),(0,r.kt)("li",{parentName:"ol"},"If there is at least one Allow permission and not even one Deny permission - the user will be able to use the feature.")),(0,r.kt)("p",{parentName:"admonition"},"You can check the outcome by going to Setup > Users > Users > clicking checkbox next to a user > clicking Manage Roles > Edit Permissions. In this place, you can not only configure individual permissions but also, by expanding to the final permission level, check current result permission along with the source for that state.")),(0,r.kt)("h2",{id:"where-the-magic-happens"},"Where the magic happens"),(0,r.kt)("p",null,"To start using those SFMC Role-related, ",(0,r.kt)("a",{parentName:"p",href:"/docs/js/js-dom"},"DOM"),"-fueled solutions:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Go to Marketing Cloud Setup \xbb Users \xbb Roles."),(0,r.kt)("li",{parentName:"ol"},"Click on the name of the Role you want to work with."),(0,r.kt)("li",{parentName:"ol"},"Click the ",(0,r.kt)("inlineCode",{parentName:"li"},"expand all")," Button to see the whole permission tree for the Role."),(0,r.kt)("li",{parentName:"ol"},"Right-click any permission name within that tree and select ",(0,r.kt)("inlineCode",{parentName:"li"},"Inspect Element"),"."),(0,r.kt)("li",{parentName:"ol"},"This will open a Developer Console in a new part of your browser. Select the Console tab."),(0,r.kt)("li",{parentName:"ol"},"[Optional]"," Click the trash icon visible in the top left or right of the Console (depending on the browser you use) to clean up the working space."),(0,r.kt)("li",{parentName:"ol"},"You are ready for the fun!")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If any of the solutions described later in this article doesn't work:"),(0,r.kt)("ol",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ol"},"Inspect one of the permission names again (either with a right-click or using the aim icon visible on the top left side of the Console)."),(0,r.kt)("li",{parentName:"ol"},"If above didn't help, refresh the page and go through the steps once more."))),(0,r.kt)("h2",{id:"export--import-sfmc-roles"},"Export & Import SFMC Roles"),(0,r.kt)("p",null,"The export and import solution is super helpful when you want to either clone an existing Role and make some changes or move your perfect, tried and tested custom Role to yet another Salesforce Marketing Cloud Account."),(0,r.kt)("p",null,"It will require a two-step approach."),(0,r.kt)("h3",{id:"exporting-an-sfmc-role"},"Exporting an SFMC Role"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"#where-the-magic-happens"},"Access the Console")," and paste the below code:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Export SFMC role"',title:'"Export',SFMC:!0,'role"':!0},"let permissionsExport = {};\nfor (const permission of document.querySelectorAll('input[type=\"checkbox\"]')) {\n permissionsExport[permission.id] = permission.checked;\n};\nconsole.log(JSON.stringify(permissionsExport));\n")),(0,r.kt)("p",null,"Click enter to run it."),(0,r.kt)("p",null,"It will ",(0,r.kt)("a",{parentName:"p",href:"/docs/js/js-loops"},"loop")," through all the checkboxes that you can see next to the permissions, save them in a single JavaScript object and output them to the Console. Yeah, it looks awful, but that's all you need - list of checkboxes along with their status."),(0,r.kt)("p",null,"Save this long text (either by highlighting and copy-pasting or by right-clicking in an empty space within the Console row and clicking ",(0,r.kt)("inlineCode",{parentName:"p"},"Copy Selected"),"). It should start with ",(0,r.kt)("inlineCode",{parentName:"p"},"{")," and end with ",(0,r.kt)("inlineCode",{parentName:"p"},"}"),"."),(0,r.kt)("h3",{id:"importing-a-sfmc-role"},"Importing a SFMC Role"),(0,r.kt)("p",null,"Once you have your Role export saved, go to the new Role. It can be either an existing Role you want to overwrite or a new Role (in the same or different SFMC account)."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"#where-the-magic-happens"},"Access the Console")," and paste the below code:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'{1} title="Import SFMC role"',"{1}":!0,title:'"Import',SFMC:!0,'role"':!0},"let permissionsImport = {}; // replace {} with the object copied from Export script output\nfor (const [permissionId, permissionStatus] of Object.entries(permissionsImport)) {\n document.getElementById(permissionId).checked = permissionStatus;\n}\n")),(0,r.kt)("p",null,"Change the ",(0,r.kt)("inlineCode",{parentName:"p"},"{}")," in the first line with the export text you saved and click enter to run it."),(0,r.kt)("p",null,"It will ",(0,r.kt)("a",{parentName:"p",href:"/docs/js/js-loops"},"loop")," through all the saved checkboxes and update their state to the one from your export. If some new checkboxes don't exist in the export (for example, you did your export before Marketing Cloud Release that added some new permissions), those new ones will stay unchanged."),(0,r.kt)("p",null,"That's it. You cloned a Role."),(0,r.kt)("p",null,"Now, as you can see, the export text was not readable. If you don't want to clone a Role but rather create documentation for it, there is yet another script that is just as easy to use."),(0,r.kt)("h2",{id:"document-sfmc-roles"},"Document SFMC Roles"),(0,r.kt)("p",null,"Documenting Roles and Permissions is not easy. You cannot just copy-paste what you see, the HTML is a mess, and the indented names are not unique. Sure, you can print screen it, but that's a lot of checkboxes. And such images aren't accessible documentation. There must be a better way."),(0,r.kt)("p",null,"And there is, so ",(0,r.kt)("a",{parentName:"p",href:"#where-the-magic-happens"},"access the Console")," and paste the below code:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js",metastring:'{24} title="Create documentation of your SFMC role"',"{24}":!0,title:'"Create',documentation:!0,of:!0,your:!0,SFMC:!0,'role"':!0},"let permissions = {};\n/* Loop through all permission checkboxes to get their name and state */\nfor (const permission of document.querySelectorAll('input[type=\"checkbox\"]')) {\n /* Get the lowest-level permission name */\n let permissionName = permission.closest('tr').querySelector('div.PermissionNameText').innerText;\n\n /* Loop through all levels of permissions to build full path for each permission */\n let permissionContainer = permission.closest('table');\n do {\n permissionContainer = permissionContainer.parentElement.previousElementSibling;\n let permissionParentName = permissionContainer?.querySelector('div.PermissionNameText')?.innerText;\n if (permissionParentName) permissionName = `${permissionParentName} - ${permissionName}`;\n } while (permissionContainer && permissionContainer.id !== 'RolePanel');\n\n /* Differentiate between Allowed and Denied checkboxes */\n let permissionType = permission.id.startsWith('a') ? 'Allowed' : 'Denied';\n\n /* Insert permission state into permissions object */\n if (!permissions[permissionName]) permissions[permissionName] = {};\n permissions[permissionName][permissionType] = permission.checked;\n};\n\n/* Output permissions in documentation-friendly format (CSV) */\nconst delimiter = '\\t'; // Configure prefered CSV delimiter (tab, comma, pipe, etc.)\nlet csv = `Permission${delimiter}Allowed${delimiter}Denied\\n`; // Headers\n/* Loop through permissions object to build a single string for easy copying from console to table */\nfor (const [permissionName, permissionStatus] of Object.entries(permissions)) {\n csv += `${permissionName}${delimiter}${permissionStatus.Allowed}${delimiter}${permissionStatus.Denied}\\n`;\n};\n/* Clean up uneeded whitespace */\ncsv = csv.replace(/\\n\\t/g, '\\t').replace(/\\n /g, ' ');\nconsole.log(csv);\n")),(0,r.kt)("p",null,"Click enter to run it."),(0,r.kt)("p",null,"It will ",(0,r.kt)("a",{parentName:"p",href:"/docs/js/js-loops"},"loop")," through all the checkboxes that you can see next to the permissions and:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Save the permission name (for example, ",(0,r.kt)("inlineCode",{parentName:"li"},"View All Contacts"),")."),(0,r.kt)("li",{parentName:"ul"},"Prefix it with all the parent permissions to get a full path (for example, ",(0,r.kt)("inlineCode",{parentName:"li"},"Contacts - Contact Builder - View All Contacts"),")."),(0,r.kt)("li",{parentName:"ul"},"Capture the state of Allow and Deny (as a boolean)."),(0,r.kt)("li",{parentName:"ul"},"Output it to the Console as a single long text with Headers and delimiter of your choice.")),(0,r.kt)("p",null,"The default delimiter is a tab (",(0,r.kt)("inlineCode",{parentName:"p"},"\\t"),") because it allows you to copy-paste the outcome from Console to a spreadsheet and have it automatically populate the columns. However, depending on your needs, you can change the ",(0,r.kt)("inlineCode",{parentName:"p"},"delimiter")," variable to something else, like a comma (",(0,r.kt)("inlineCode",{parentName:"p"},","),") or pipe (",(0,r.kt)("inlineCode",{parentName:"p"},"|"),")."),(0,r.kt)("p",null,"Save this long text in its entirety (either by highlighting and copy-pasting or by right-clicking in empty space within the Console row and clicking ",(0,r.kt)("inlineCode",{parentName:"p"},"Copy Selected"),") - I recommend pushing it straight to a spreadsheet to leverage the autoformatting and filtering capabilities."),(0,r.kt)("p",null,"Add the Name of the Role and its purpose stored in the Description field, and that's it. You are good to go."),(0,r.kt)("h2",{id:"backup-of-standard-roles"},"Backup of Standard Roles"),(0,r.kt)("p",null,"As the default System Roles permissions in Salesforce Marketing Cloud can be edited freely and ",(0,r.kt)("a",{parentName:"p",href:"../../../../sites/ideas/marketing-cloud-ideas/#restore-default-permissions-for-sfmc-standard-system-roles"},"currently there is no easy way to revert those changes"),", I created a backup repository for you with all out-of-the-box configurations."),(0,r.kt)(s.z,{link:"https://github.com/MateuszDabrowski/sfmc-roles-backup",text:"SFMC Roles Backup",newTab:"true",mdxType:"Button"}))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ec6dc5c4.a8be3632.js b/assets/js/ec6dc5c4.a8be3632.js new file mode 100644 index 000000000..ba4a8845b --- /dev/null +++ b/assets/js/ec6dc5c4.a8be3632.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7873],{9970:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var n=o(5893),s=o(1151),i=o(1872),r=o(7271);const l={id:"export-import-document-sfmc-roles",title:"Export, Import & Document SFMC Roles",sidebar_label:"Export, Import & Document SFMC Roles",description:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",image:"img/og/og-image-js-export-import-document-sfmc-roles.png",tags:["JavaScript","Marketing Cloud","Configuration","Users","Setup"]},a=void 0,c={id:"js/snippets/export-import-document-sfmc-roles",title:"Export, Import & Document SFMC Roles",description:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",source:"@site/docs/js/snippets/export-import-document-sfmc-roles.mdx",sourceDirName:"js/snippets",slug:"/js/snippets/export-import-document-sfmc-roles",permalink:"/docs/js/snippets/export-import-document-sfmc-roles",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/snippets/export-import-document-sfmc-roles.mdx",tags:[{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Users",permalink:"/docs/tags/users"},{label:"Setup",permalink:"/docs/tags/setup"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1687990545,formattedLastUpdatedAt:"Jun 28, 2023",frontMatter:{id:"export-import-document-sfmc-roles",title:"Export, Import & Document SFMC Roles",sidebar_label:"Export, Import & Document SFMC Roles",description:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.",image:"img/og/og-image-js-export-import-document-sfmc-roles.png",tags:["JavaScript","Marketing Cloud","Configuration","Users","Setup"]},sidebar:"snippets",previous:{title:"Engage with Countdown",permalink:"/docs/js/snippets/engage-with-countdown"},next:{title:"AMPScript Snippets",permalink:"/docs/category/ampscript-snippets"}},d={},h=[{value:"Where the magic happens",id:"where-the-magic-happens",level:2},{value:"Export & Import SFMC Roles",id:"export--import-sfmc-roles",level:2},{value:"Exporting an SFMC Role",id:"exporting-an-sfmc-role",level:3},{value:"Importing a SFMC Role",id:"importing-a-sfmc-role",level:3},{value:"Document SFMC Roles",id:"document-sfmc-roles",level:2},{value:"Backup of Standard Roles",id:"backup-of-standard-roles",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.m,{content:"Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds."}),"\n",(0,n.jsx)(t.p,{children:"While you get a set of standard user Roles in Salesforce Marketing Cloud, those are rarely enough. Instead, they are the base on which you can create custom-tailored solutions that align with your business architecture."}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsx)(t.p,{children:"The best way to work with Roles and Permissions in Salesforce Marketing Cloud is to leverage standard roles and build on top of them with custom permissions/roles."})}),"\n",(0,n.jsx)(t.p,{children:"On top of that, standard Roles are silently changing from release to release as permissions come and go, so keeping track of them is crucial to have a clear picture of what your users can do."}),"\n",(0,n.jsx)(t.p,{children:"Marketing Cloud doesn't make it easy. There is no option to clone existing Roles to serve as a starting point for a new custom one. There is no option to export and import them between SFMC accounts. There is no option to create good documentation on them (unless you have a kink for super long print screens)."}),"\n",(0,n.jsxs)(t.p,{children:["Here comes JavaScript and ",(0,n.jsx)(t.a,{href:"/docs/js/js-dom",children:"Document Object Model (DOM)"})," to unlock all those scenarios."]}),"\n",(0,n.jsx)(t.p,{children:"Fear not - you don't have to be a developer to leverage it. I will describe everything step-by-step and share ready-to-use snippets with you. Let's dive in."}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsx)(t.p,{children:"When working with multiple roles or overlapping permissions, be sure to check what is the outcome on the user."}),(0,n.jsx)(t.p,{children:"Marketing Cloud goes with the most restrictive resulting permission possible:"}),(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["If at least one permission (role-based or individual) is set to Deny - the user will ",(0,n.jsx)(t.strong,{children:"not"})," be able to use the feature."]}),"\n",(0,n.jsxs)(t.li,{children:["If there is neither Allow nor Deny permission - the user will ",(0,n.jsx)(t.strong,{children:"not"})," be able to use the feature."]}),"\n",(0,n.jsx)(t.li,{children:"If there is at least one Allow permission and not even one Deny permission - the user will be able to use the feature."}),"\n"]}),(0,n.jsx)(t.p,{children:"You can check the outcome by going to Setup > Users > Users > clicking checkbox next to a user > clicking Manage Roles > Edit Permissions. In this place, you can not only configure individual permissions but also, by expanding to the final permission level, check current result permission along with the source for that state."})]}),"\n",(0,n.jsx)(t.h2,{id:"where-the-magic-happens",children:"Where the magic happens"}),"\n",(0,n.jsxs)(t.p,{children:["To start using those SFMC Role-related, ",(0,n.jsx)(t.a,{href:"/docs/js/js-dom",children:"DOM"}),"-fueled solutions:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Go to Marketing Cloud Setup \xbb Users \xbb Roles."}),"\n",(0,n.jsx)(t.li,{children:"Click on the name of the Role you want to work with."}),"\n",(0,n.jsxs)(t.li,{children:["Click the ",(0,n.jsx)(t.code,{children:"expand all"})," Button to see the whole permission tree for the Role."]}),"\n",(0,n.jsxs)(t.li,{children:["Right-click any permission name within that tree and select ",(0,n.jsx)(t.code,{children:"Inspect Element"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"This will open a Developer Console in a new part of your browser. Select the Console tab."}),"\n",(0,n.jsx)(t.li,{children:"[Optional] Click the trash icon visible in the top left or right of the Console (depending on the browser you use) to clean up the working space."}),"\n",(0,n.jsx)(t.li,{children:"You are ready for the fun!"}),"\n"]}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsx)(t.p,{children:"If any of the solutions described later in this article doesn't work:"}),(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Inspect one of the permission names again (either with a right-click or using the aim icon visible on the top left side of the Console)."}),"\n",(0,n.jsx)(t.li,{children:"If above didn't help, refresh the page and go through the steps once more."}),"\n"]})]}),"\n",(0,n.jsx)(t.h2,{id:"export--import-sfmc-roles",children:"Export & Import SFMC Roles"}),"\n",(0,n.jsx)(t.p,{children:"The export and import solution is super helpful when you want to either clone an existing Role and make some changes or move your perfect, tried and tested custom Role to yet another Salesforce Marketing Cloud Account."}),"\n",(0,n.jsx)(t.p,{children:"It will require a two-step approach."}),"\n",(0,n.jsx)(t.h3,{id:"exporting-an-sfmc-role",children:"Exporting an SFMC Role"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"#where-the-magic-happens",children:"Access the Console"})," and paste the below code:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Export SFMC role"',children:"let permissionsExport = {};\nfor (const permission of document.querySelectorAll('input[type=\"checkbox\"]')) {\n permissionsExport[permission.id] = permission.checked;\n};\nconsole.log(JSON.stringify(permissionsExport));\n"})}),"\n",(0,n.jsx)(t.p,{children:"Click enter to run it."}),"\n",(0,n.jsxs)(t.p,{children:["It will ",(0,n.jsx)(t.a,{href:"/docs/js/js-loops",children:"loop"})," through all the checkboxes that you can see next to the permissions, save them in a single JavaScript object and output them to the Console. Yeah, it looks awful, but that's all you need - list of checkboxes along with their status."]}),"\n",(0,n.jsxs)(t.p,{children:["Save this long text (either by highlighting and copy-pasting or by right-clicking in an empty space within the Console row and clicking ",(0,n.jsx)(t.code,{children:"Copy Selected"}),"). It should start with ",(0,n.jsx)(t.code,{children:"{"})," and end with ",(0,n.jsx)(t.code,{children:"}"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"importing-a-sfmc-role",children:"Importing a SFMC Role"}),"\n",(0,n.jsx)(t.p,{children:"Once you have your Role export saved, go to the new Role. It can be either an existing Role you want to overwrite or a new Role (in the same or different SFMC account)."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"#where-the-magic-happens",children:"Access the Console"})," and paste the below code:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{1} title="Import SFMC role"',children:"let permissionsImport = {}; // replace {} with the object copied from Export script output\nfor (const [permissionId, permissionStatus] of Object.entries(permissionsImport)) {\n document.getElementById(permissionId).checked = permissionStatus;\n}\n"})}),"\n",(0,n.jsxs)(t.p,{children:["Change the ",(0,n.jsx)(t.code,{children:"{}"})," in the first line with the export text you saved and click enter to run it."]}),"\n",(0,n.jsxs)(t.p,{children:["It will ",(0,n.jsx)(t.a,{href:"/docs/js/js-loops",children:"loop"})," through all the saved checkboxes and update their state to the one from your export. If some new checkboxes don't exist in the export (for example, you did your export before Marketing Cloud Release that added some new permissions), those new ones will stay unchanged."]}),"\n",(0,n.jsx)(t.p,{children:"That's it. You cloned a Role."}),"\n",(0,n.jsx)(t.p,{children:"Now, as you can see, the export text was not readable. If you don't want to clone a Role but rather create documentation for it, there is yet another script that is just as easy to use."}),"\n",(0,n.jsx)(t.h2,{id:"document-sfmc-roles",children:"Document SFMC Roles"}),"\n",(0,n.jsx)(t.p,{children:"Documenting Roles and Permissions is not easy. You cannot just copy-paste what you see, the HTML is a mess, and the indented names are not unique. Sure, you can print screen it, but that's a lot of checkboxes. And such images aren't accessible documentation. There must be a better way."}),"\n",(0,n.jsxs)(t.p,{children:["And there is, so ",(0,n.jsx)(t.a,{href:"#where-the-magic-happens",children:"access the Console"})," and paste the below code:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'{24} title="Create documentation of your SFMC role"',children:"let permissions = {};\n/* Loop through all permission checkboxes to get their name and state */\nfor (const permission of document.querySelectorAll('input[type=\"checkbox\"]')) {\n /* Get the lowest-level permission name */\n let permissionName = permission.closest('tr').querySelector('div.PermissionNameText').innerText;\n\n /* Loop through all levels of permissions to build full path for each permission */\n let permissionContainer = permission.closest('table');\n do {\n permissionContainer = permissionContainer.parentElement.previousElementSibling;\n let permissionParentName = permissionContainer?.querySelector('div.PermissionNameText')?.innerText;\n if (permissionParentName) permissionName = `${permissionParentName} - ${permissionName}`;\n } while (permissionContainer && permissionContainer.id !== 'RolePanel');\n\n /* Differentiate between Allowed and Denied checkboxes */\n let permissionType = permission.id.startsWith('a') ? 'Allowed' : 'Denied';\n\n /* Insert permission state into permissions object */\n if (!permissions[permissionName]) permissions[permissionName] = {};\n permissions[permissionName][permissionType] = permission.checked;\n};\n\n/* Output permissions in documentation-friendly format (CSV) */\nconst delimiter = '\\t'; // Configure prefered CSV delimiter (tab, comma, pipe, etc.)\nlet csv = `Permission${delimiter}Allowed${delimiter}Denied\\n`; // Headers\n/* Loop through permissions object to build a single string for easy copying from console to table */\nfor (const [permissionName, permissionStatus] of Object.entries(permissions)) {\n csv += `${permissionName}${delimiter}${permissionStatus.Allowed}${delimiter}${permissionStatus.Denied}\\n`;\n};\n/* Clean up uneeded whitespace */\ncsv = csv.replace(/\\n\\t/g, '\\t').replace(/\\n /g, ' ');\nconsole.log(csv);\n"})}),"\n",(0,n.jsx)(t.p,{children:"Click enter to run it."}),"\n",(0,n.jsxs)(t.p,{children:["It will ",(0,n.jsx)(t.a,{href:"/docs/js/js-loops",children:"loop"})," through all the checkboxes that you can see next to the permissions and:"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Save the permission name (for example, ",(0,n.jsx)(t.code,{children:"View All Contacts"}),")."]}),"\n",(0,n.jsxs)(t.li,{children:["Prefix it with all the parent permissions to get a full path (for example, ",(0,n.jsx)(t.code,{children:"Contacts - Contact Builder - View All Contacts"}),")."]}),"\n",(0,n.jsx)(t.li,{children:"Capture the state of Allow and Deny (as a boolean)."}),"\n",(0,n.jsx)(t.li,{children:"Output it to the Console as a single long text with Headers and delimiter of your choice."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The default delimiter is a tab (",(0,n.jsx)(t.code,{children:"\\t"}),") because it allows you to copy-paste the outcome from Console to a spreadsheet and have it automatically populate the columns. However, depending on your needs, you can change the ",(0,n.jsx)(t.code,{children:"delimiter"})," variable to something else, like a comma (",(0,n.jsx)(t.code,{children:","}),") or pipe (",(0,n.jsx)(t.code,{children:"|"}),")."]}),"\n",(0,n.jsxs)(t.p,{children:["Save this long text in its entirety (either by highlighting and copy-pasting or by right-clicking in empty space within the Console row and clicking ",(0,n.jsx)(t.code,{children:"Copy Selected"}),") - I recommend pushing it straight to a spreadsheet to leverage the autoformatting and filtering capabilities."]}),"\n",(0,n.jsx)(t.p,{children:"Add the Name of the Role and its purpose stored in the Description field, and that's it. You are good to go."}),"\n",(0,n.jsx)(t.h2,{id:"backup-of-standard-roles",children:"Backup of Standard Roles"}),"\n",(0,n.jsxs)(t.p,{children:["As the default System Roles permissions in Salesforce Marketing Cloud can be edited freely and ",(0,n.jsx)(t.a,{href:"../../../../sites/ideas/marketing-cloud-ideas/#restore-default-permissions-for-sfmc-standard-system-roles",children:"currently there is no easy way to revert those changes"}),", I created a backup repository for you with all out-of-the-box configurations."]}),"\n",(0,n.jsx)(r.z,{link:"https://github.com/MateuszDabrowski/sfmc-roles-backup",text:"SFMC Roles Backup",newTab:"true"})]})}function m(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},7271:(e,t,o)=>{o.d(t,{V:()=>i,z:()=>s});o(7294);var n=o(5893);const s=e=>{let{link:t,text:o,newTab:s=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:s?"_blank":"_self",children:o})})},i=e=>{let{linkLeft:t,textLeft:o,newTabLeft:s=!1,linkRight:i,textRight:r,newTabRight:l=!1}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsxs)("div",{class:"col col--12",children:[(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:s?"_blank":"_self",children:o}),(0,n.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:i,target:l?"_blank":"_self",children:r})]})})}},1872:(e,t,o)=>{o.d(t,{m:()=>i});o(7294);const n="leadText_qzwo";var s=o(5893);const i=e=>{let{content:t}=e;return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)("p",{id:n,children:t})})}},1151:(e,t,o)=>{o.d(t,{Z:()=>l,a:()=>r});var n=o(7294);const s={},i=n.createContext(s);function r(e){const t=n.useContext(i);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:r(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecbe7f2c.13620c1b.js b/assets/js/ecbe7f2c.13620c1b.js deleted file mode 100644 index 9f124edba..000000000 --- a/assets/js/ecbe7f2c.13620c1b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7120],{4137:(e,n,a)=>{a.d(n,{Zo:()=>d,kt:()=>N});var t=a(7294);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function s(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function l(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?s(Object(a),!0).forEach((function(n){i(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function r(e,n){if(null==e)return{};var a,t,i=function(e,n){if(null==e)return{};var a,t,i={},s=Object.keys(e);for(t=0;t<s.length;t++)a=s[t],n.indexOf(a)>=0||(i[a]=e[a]);return i}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t<s.length;t++)a=s[t],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var o=t.createContext({}),m=function(e){var n=t.useContext(o),a=n;return e&&(a="function"==typeof e?e(n):l(l({},n),e)),a},d=function(e){var n=m(e.components);return t.createElement(o.Provider,{value:n},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},u=t.forwardRef((function(e,n){var a=e.components,i=e.mdxType,s=e.originalType,o=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),c=m(a),u=i,N=c["".concat(o,".").concat(u)]||c[u]||p[u]||s;return a?t.createElement(N,l(l({ref:n},d),{},{components:a})):t.createElement(N,l({ref:n},d))}));function N(e,n){var a=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var s=a.length,l=new Array(s);l[0]=u;var r={};for(var o in n)hasOwnProperty.call(n,o)&&(r[o]=n[o]);r.originalType=e,r[c]="string"==typeof e?e:i,l[1]=r;for(var m=2;m<s;m++)l[m]=a[m];return t.createElement.apply(null,l)}return t.createElement.apply(null,a)}u.displayName="MDXCreateElement"},1872:(e,n,a)=>{a.d(n,{m:()=>s});var t=a(7294);const i="leadText_qzwo",s=e=>{let{content:n}=e;return t.createElement(t.Fragment,null,t.createElement("p",{id:i},n))}},6944:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>m,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var t=a(7462),i=(a(7294),a(4137)),s=a(1872);const l={id:"sfmc-sql-style-guide",title:"SFMC SQL Style Guide",sidebar_label:"Style Guide",description:"Query with style. Readable, bug-free code is a few shifts & spaces away.",image:"img/og/og-image-sql-style-guide.png",tags:["Marketing Cloud","SQL","Style Guide","Best Practice"]},r=void 0,o={unversionedId:"sql/sfmc-sql-style-guide",id:"sql/sfmc-sql-style-guide",title:"SFMC SQL Style Guide",description:"Query with style. Readable, bug-free code is a few shifts & spaces away.",source:"@site/docs/sql/sfmc-sql-style-guide.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-style-guide",permalink:"/docs/sql/sfmc-sql-style-guide",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-style-guide.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Style Guide",permalink:"/docs/tags/style-guide"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1641649742,formattedLastUpdatedAt:"Jan 8, 2022",frontMatter:{id:"sfmc-sql-style-guide",title:"SFMC SQL Style Guide",sidebar_label:"Style Guide",description:"Query with style. Readable, bug-free code is a few shifts & spaces away.",image:"img/og/og-image-sql-style-guide.png",tags:["Marketing Cloud","SQL","Style Guide","Best Practice"]},sidebar:"docs",previous:{title:"Null Functions",permalink:"/docs/sql/sfmc-sql-null-functions"},next:{title:"SFMC Config",permalink:"/docs/category/sfmc-config"}},m={},d=[{value:"Letter Case",id:"letter-case",level:2},{value:"SQL Syntax Case",id:"sql-syntax-case",level:3},{value:"Column & Table Names Case",id:"column--table-names-case",level:3},{value:"Alignment and Indentation",id:"alignment-and-indentation",level:2},{value:"Single Information per Line",id:"single-information-per-line",level:3},{value:"Left Aligned Keywords",id:"left-aligned-keywords",level:3},{value:"Consistent Indentation",id:"consistent-indentation",level:3},{value:"Intentional Spacing",id:"intentional-spacing",level:3},{value:"Commas Placement",id:"commas-placement",level:3},{value:"Explicit vs Implicit",id:"explicit-vs-implicit",level:2},{value:"Date Parts",id:"date-parts",level:3},{value:"JOIN and ON",id:"join-and-on",level:3},{value:"Table Aliases",id:"table-aliases",level:3},{value:"Not Equal To Symbol",id:"not-equal-to-symbol",level:3},{value:"Meaningful Column Names",id:"meaningful-column-names",level:3},{value:"Sum Up",id:"sum-up",level:2}],c={toc:d},p="wrapper";function u(e){let{components:n,...a}=e;return(0,i.kt)(p,(0,t.Z)({},c,a,{components:n,mdxType:"MDXLayout"}),(0,i.kt)(s.m,{content:"Query with style. Readable, bug-free code is a few shifts & spaces away.",mdxType:"LeadText"}),(0,i.kt)("p",null,"First things first: this Salesforce Marketing Cloud SQL style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Be consistent across your codebase."),(0,i.kt)("li",{parentName:"ol"},"Strive for good readability.")),(0,i.kt)("p",null,"Everything else is preference. And you are just about to learn about mine."),(0,i.kt)("h2",{id:"letter-case"},"Letter Case"),(0,i.kt)("p",null,"SQL gives you much freedom regarding the type of letter case you will be using for parts of your query. Let's use this freedom to create queries that are readable and aligned in convention to other Marketing Cloud programmatic languages operating on the same data."),(0,i.kt)("h3",{id:"sql-syntax-case"},"SQL Syntax Case"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("inlineCode",{parentName:"strong"},"UPPERCASE")," for all elements of SQL syntax.")),(0,i.kt)("p",null,"This approach helps visually differentiate query language from Tables (data extensions, data views) and Columns (fields) to improve readability."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Upper Case for SQL Syntax */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n\n/* \u274c Pascal Case for SQL Syntax */\nSelect\n SubscriberKey\n , EmailAddress\nFrom Ent._Subscribers\nWhere DateJoined >= DateAdd(Month, -1, GetDate())\n\n/* \u274c Lower Case for SQL Syntax */\nselect\n SubscriberKey\n , EmailAddress\nfrom Ent._Subscribers\nwhere DateJoined >= dateadd(month, -1, getdate())\n")),(0,i.kt)("h3",{id:"column--table-names-case"},"Column & Table Names Case"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("inlineCode",{parentName:"strong"},"PascalCase")," for all Table and Column names.")),(0,i.kt)("p",null,"Treat it as a soft recommendation, as it is highly connected to your organisation's conventions. If other connected systems are using a different style, it might be best to follow it in Marketing Cloud."),(0,i.kt)("p",null,"It is especially true for Tables, as you might be using mixed convention leveraging lowercase, uppercase and underscores for Data Extension names. However, try not to use hyphens, as those will require you to use square brackets around the name and might interfere in query syntax highlighting, leading to worse readability."),(0,i.kt)("p",null,"The most popular SQL convention for Table and Column names is ",(0,i.kt)("inlineCode",{parentName:"p"},"snake_case"),". However, in Marketing Cloud, the Table and Column names will share the case between your queries and the User Interface. It is essential to make them as readable and human friendly as possible. Additionally, in many cases, you will also leverage those names in AMPScript and SSJS."),(0,i.kt)("p",null,"Due to the above, I believe ",(0,i.kt)("inlineCode",{parentName:"p"},"PascalCase")," - especially for Column names - is the best choice for Marketing Cloud SQL."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Pascal Case for Table and Column names */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u2705 Pascal Case for Column names and custom consistent covention for Table names */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WEL_WelcomeCampaignSegment_20201011_OTH AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u274c Lower Case for Table and Column names */\nSELECT\n wel.subscriberkey\n , wel.emailaddress\n , o.eventdate AS opendate\nFROM welcomecampaignsegment AS wel\n INNER JOIN _open AS o\n ON o.subscriberkey = wel.subscriberkey\n\n/* \u274c Upper Case for Table and Column names */\nSELECT\n WEL.SUBSCRIBERKEY\n , WEL.EMAILADDRESS\n , O.EVENTDATE AS OPENDATE\nFROM WELCOMECAMPAIGNSEGMENT AS WEL\n INNER JOIN _OPEN AS O\n ON O.SUBSCRIBERKEY = WEL.SUBSCRIBERKEY\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you want to make your Style Guide even safer, you can decide on writing all Columns and Table names in square brackets. As Marketing Cloud is not checking whether you use SQL's reserved keywords, this approach will protect you from potential silent issue. The cost, however, is much more characters and less readable queries."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:'title="You need to decide how hard you want to leverage the square brackets"',title:'"You',need:!0,to:!0,decide:!0,how:!0,hard:!0,you:!0,want:!0,leverage:!0,the:!0,square:!0,'brackets"':!0},"SELECT\n [wel].[SubscriberKey]\n , [wel].[EmailAddress]\n , [o].[EventDate] AS [OpenDate]\nFROM [WelcomeCampaignSegment] AS [wel]\n INNER JOIN [_Open] AS [o]\n ON [o].[SubscriberKey] = [wel].[SubscriberKey]\n"))),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"alignment-and-indentation"},"Alignment and Indentation"),(0,i.kt)("p",null,"SQL is very flexible when it comes to alignment and indentation of the query. Writing everything in one line creates a valid code that will run. But just because it is correct, it doesn't mean it is good. Generous use of new lines and indents has close to no impact on performance but a massive impact on readability. Enter and Space keys are your friends."),(0,i.kt)("p",null,"There are many styles out there, and I decided to follow those that merge good writing speed with excellent readability."),(0,i.kt)("h3",{id:"single-information-per-line"},"Single Information per Line"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Limit information per line to one.")),(0,i.kt)("p",null,"I recommend keeping one information per line, as it allows for much easier scanning. The four most important examples of this approach are:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Each ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))," Column in a separate line"),(0,i.kt)("li",{parentName:"ol"},"Each ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE"))," condition in a separate line"),(0,i.kt)("li",{parentName:"ol"},"Each ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE"))," condition in a separate line"),(0,i.kt)("li",{parentName:"ol"},"Each ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," and ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#joining-on"},(0,i.kt)("inlineCode",{parentName:"a"},"ON"))," relationship in a separate line")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Single information per line */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n ELSE 0\n END\n\n/* \u274c Multiple pieces of information per line */\nSELECT s.SubscriberKey AS SubscriberKey, j.EmailName AS EmailName, s.EventDate AS SentDate, j.DeliveredTime AS DeliveryDate, o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j ON j.JobID = s.JobID\n LEFT JOIN _Open AS o ON o.JobID = s.JobID AND o.ListID = s.ListID AND o.BatchID = s.BatchID AND o.SubscriberID = s.SubscriberID AND o.IsUnique = 1\nWHERE 1 = CASE WHEN j.EmailName LIKE 'UPS_%' THEN 1 WHEN j.EmailName LIKE 'CRS_%' THEN 1 ELSE 0 END\n")),(0,i.kt)("p",null,"As you can see, the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))," and ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE"))," keywords have their separate line to mark respective block starting. For readability reasons, I make an exception if there is only one Column or condition to be used:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Single Column in SELECT and single condition in WHERE lines */\nSELECT SubscriberKey\nFROM _Subscribers\nWHERE Domain = 'mateuszdabrowski.pl'\n\n/* \u274c Separate lines with single SELECT Column and WHERE condition */\nSELECT\n SubscriberKey\nFROM _Subscribers\nWHERE\n Domain = 'mateuszdabrowski.pl'\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you are using ",(0,i.kt)("inlineCode",{parentName:"p"},"DISTINCT")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"TOP"),", put it into the same line as ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT")),". In such a case, even if you work on a single Column, move it to a separate row for better readability."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Single Column in SELECT and single condition in WHERE lines */\nSELECT DISTINCT TOP 10\n SubscriberKey\nFROM ContenstSubmissions\n\n/* \u274c Separate lines for single SELECT Column and WHERE condition */\nSELECT DISTINCT TOP 10 SubscriberKey\nFROM ContenstSubmissions\n"))),(0,i.kt)("h3",{id:"left-aligned-keywords"},"Left Aligned Keywords"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Align main SQL keywords to the left.")),(0,i.kt)("p",null,"This rule focuses on writing speed. While I prefer the Vertically Aligned Space approach's aesthetics, I don't see any significant readability gains. On the other hand, writing in this style in Marketing Cloud is a pain, as there is no autoformatter supporting it in the Query Studio or Query Activity. We would have to add all those additional spaces manually. It's just not worth it."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Left Aligned Keywords */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n\n/* \u274c Post Keyword Space Aligned Vertically */\nSELECT SubscriberKey,\n EmailAddress\n FROM Ent._Subscribers\n WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n")),(0,i.kt)("h3",{id:"consistent-indentation"},"Consistent Indentation"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use indentation to highlight SQL keyword relationships.")),(0,i.kt)("p",null,"This rule focuses on readability. The logic, in short, is to indent whenever the line is dependent on the previous line (child line), for example:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Selected Column Names are children of ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-select"},(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," keywords are children of the initial Table referenced with ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-from"},(0,i.kt)("inlineCode",{parentName:"a"},"FROM"))),(0,i.kt)("li",{parentName:"ul"},"Joining relationships (",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#joining-on"},(0,i.kt)("inlineCode",{parentName:"a"},"ON")),") are children of ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))),(0,i.kt)("li",{parentName:"ul"},"Case conditions are children of the ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE"))),(0,i.kt)("li",{parentName:"ul"},"Where conditions are children of the ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-where"},(0,i.kt)("inlineCode",{parentName:"a"},"WHERE"))),(0,i.kt)("li",{parentName:"ul"},"Sub-queries follow the same rules in respective indentation level.")),(0,i.kt)("p",null,"For simplicity I use 4-spaces indent, as it is both standard and can be added in Marketing Cloud Query with a single click of the Tab key."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Dependency based indentation */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n ELSE 0\n END\n\n/* \u274c Lack of indentation */\nSELECT\ns.SubscriberKey AS SubscriberKey\n, j.EmailName AS EmailName\n, s.EventDate AS SentDate\n, j.DeliveredTime AS DeliveryDate\n, o.EventDate AS OpenDate\nFROM _Sent AS s\nLEFT JOIN _Job AS j ON j.JobID = s.JobID\nLEFT JOIN _Open AS o ON o.JobID = s.JobID\nAND o.ListID = s.ListID\nAND o.BatchID = s.BatchID\nAND o.SubscriberID = s.SubscriberID\nAND o.IsUnique = 1\nWHERE 1 = CASE\nWHEN j.EmailName LIKE 'UPS_%' THEN 1\nWHEN j.EmailName LIKE 'CRS_%' THEN 1\nELSE 0\nEND\n")),(0,i.kt)("h3",{id:"intentional-spacing"},"Intentional Spacing"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use spaces wherever it makes the query more readable.")),(0,i.kt)("p",null,"The must-have is spacing around any ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where#basic-operators"},"operators")," (equality or comparison) and after commas."),(0,i.kt)("p",null,"However, there is another place where spacing is beneficial for readability but might require an exception in some scenarios. Spacing for ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-select#aliasing-with-as"},"aliases")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"THEN")," keywords of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE"))," statement."),(0,i.kt)("p",null,"I try to use it whenever possible, but when there is huge imbalance in length (for example one Column requires multi-function calculation or there is a single complex ",(0,i.kt)("inlineCode",{parentName:"p"},"WHEN")," in ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE")),") equal spacing might make the query harder to read. Always decide which approach works best for your query from readability perspective."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 Spacing around operators plus equalizing aliases and THEN */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n WHEN j.EmailName = 'OTH_SeedList' THEN 1\n ELSE 0\n END\n\n/* \u2705 Spacing around operators plus equalizing aliases with exceptions */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\n , DATEDIFF(HOUR, s.EventDate, o.EventDate) AS TimeToOpen\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' OR j.EmailName LIKE 'CRS_%' THEN 1\n WHEN j.EmailName = 'OTH_SeedList' THEN 1\n ELSE 0\n END\n\n/* \u274c Lack of spacing */\nSELECT\n s.SubscriberKey AS SubscriberKey\n ,j.EmailName AS EmailName\n ,s.EventDate AS SentDate\n ,j.DeliveredTime AS DeliveryDate\n ,o.EventDate AS OpenDate\n ,DATEDIFF(HOUR,s.EventDate,o.EventDate) AS TimeToOpen\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID=s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID=s.JobID\n AND o.ListID=s.ListID\n AND o.BatchID=s.BatchID\n AND o.SubscriberID=s.SubscriberID\n AND o.IsUnique=1\nWHERE\n 1=CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n WHEN j.EmailName='OTH_SeedList' THEN 1\n ELSE 0\n END\n")),(0,i.kt)("h3",{id:"commas-placement"},"Commas Placement"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use commas at the beginning of the line.")),(0,i.kt)("p",null,"There are few approaches related to comma placement. Initially, I favoured commas at the end of the line, as I found them more accessible to use due to their similarity to natural language. However, there are strong reasons to use the comma at the beginning of the line. Here is what convinced me to change my style:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Adding or deleting a Column requires a change in only one line. It's easier, faster and minimises the risk of a crash due to the trailing comma."),(0,i.kt)("li",{parentName:"ol"},"Above is also very beneficial during difference checking and when leveraging git for query version control. With a comma at the beginning of the line, the Column addition or deletion is displayed correctly as a single line change."),(0,i.kt)("li",{parentName:"ol"},"Having a comma in the beginning makes it easier to assess where a new Column definition starts quickly. It is a vast readability improvement when you are using more complex structures, like ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-case#conditional-values-with-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE")," in ",(0,i.kt)("inlineCode",{parentName:"a"},"SELECT")),"."),(0,i.kt)("li",{parentName:"ol"},"It's also easier to quickly assess whether you have a comma for each Column. With lines of various length, it is much harder with the comma at the end.")),(0,i.kt)("p",null,"For the sake of readability, I indent the first Column by two spaces so that it is in line with the following ones. Similarly, I indent ",(0,i.kt)("inlineCode",{parentName:"p"},"END")," after ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-case#conditional-values-with-case"},(0,i.kt)("inlineCode",{parentName:"a"},"CASE")," in ",(0,i.kt)("inlineCode",{parentName:"a"},"SELECT"))," by two spaces for the same reason."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3-5,10-12}","{3-5,10-12}":!0},"/* \u2705 Commas at the beginning */\nSELECT\n SubscriberKey\n , EmailAddress\n , DateJoined\nFROM Ent._Subscribers\n\n/* \u274c Commas in the end */\nSELECT\n SubscriberKey,\n EmailAddress,\n DateJoined\nFROM Ent._Subscribers\n")),(0,i.kt)("hr",null),(0,i.kt)("h2",{id:"explicit-vs-implicit"},"Explicit vs Implicit"),(0,i.kt)("p",null,"Many things in SQL can be done in multiple ways - using various functions, symbols or shortcuts. While all those options may work, not all are a good idea. Whenever you are choosing the approach, go for the explicit and straightforward. Even if it means writing a few characters more."),(0,i.kt)("h3",{id:"date-parts"},"Date Parts"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use full ",(0,i.kt)("a",{parentName:"strong",href:"/docs/sql/sfmc-sql-date-functions#date-parts"},"Date Parts")," names.")),(0,i.kt)("p",null,"Yes, abbreviations let you save few characters, but they kill the readability unless someone is fluent in those shortcuts. For Marketing Cloud purposes, the time saved during writing is not worth the time lost when reading. Go with the full version."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{6,13}","{6,13}":!0},"/* \u2705 Full Date Part */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n\n/* \u274c Abbreviated Date Part */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(M, -1, GETDATE())\n")),(0,i.kt)("h3",{id:"join-and-on"},"JOIN and ON"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("a",{parentName:"strong",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"INNER JOIN"))," name and reference Column from the new Table first after ",(0,i.kt)("a",{parentName:"strong",href:"/docs/sql/sfmc-sql-join#joining-on"},(0,i.kt)("inlineCode",{parentName:"a"},"ON")),".")),(0,i.kt)("p",null,"Instead of just ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN")),", write ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join#inner-join"},(0,i.kt)("inlineCode",{parentName:"a"},"INNER JOIN"))," - it's longer but explicit and in line with the rest of ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," keywords. It makes it easier to scan queries with ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join#multiple-various-joins"},"multiple various ",(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," statements."),(0,i.kt)("p",null,"Additionally, when defining ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," relationships after ",(0,i.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-join#joining-on"},(0,i.kt)("inlineCode",{parentName:"a"},"ON")),", firstly reference the Column from the joined Table. The previous Table should be on the right side. It will improve consistency and reading speed."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{7-8,16-17}","{7-8,16-17}":!0},"/* \u2705 Explicit Inner Join and Column from new Table on the left side of the ON condition */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u274c Implicit Inner Join and Column from new Table on the right side of the ON condition */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n JOIN _Open AS o\n ON wel.SubscriberKey = o.SubscriberKey\n")),(0,i.kt)("h3",{id:"table-aliases"},"Table Aliases"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"When using ",(0,i.kt)("inlineCode",{parentName:"strong"},"JOIN"),", add meaningful aliases for Tables and prefix all Columns with them.")),(0,i.kt)("p",null,"There are a few points:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"If you are working on only one Table without ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," - don't use ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#table-name-prefix"},"aliases")," at all. They are not needed and would make the query less readable."),(0,i.kt)("li",{parentName:"ol"},"If you have any ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join"},(0,i.kt)("inlineCode",{parentName:"a"},"JOIN"))," - always use ",(0,i.kt)("a",{parentName:"li",href:"/docs/sql/sfmc-sql-join#table-name-prefix"},"aliases and prefixes"),". SQL doesn't always require it, but it is much easier to read the query when the Columns have an explicit Table mention in the prefix."),(0,i.kt)("li",{parentName:"ol"},"When you create an alias for a Table, make it meaningful. Using subsequent letters of the alphabet is not a good idea. Instead, use something that will remind the reader of the full name - for example, abbreviation using the first letter of each word in the Table. It will allow for much easier reading."),(0,i.kt)("li",{parentName:"ol"},"Always use ",(0,i.kt)("inlineCode",{parentName:"li"},"AS")," keyword between the Table name and the alias.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql"},"/* \u2705 No aliasing in single Table query */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\n\n/* \u274c Aliasing in single Table query */\nSELECT\n s.SubscriberKey\n , s.EmailAddress\nFROM Ent._Subscribers AS s\n\n/* \u2705 Meaningful aliasing and prefixes in multi Table query */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u274c No aliasing and no prefix in multi Table query */\nSELECT\n SubscriberKey\n , EmailAddress\n , EventDate AS OpenDate\nFROM WelcomeCampaignSegment\n INNER JOIN _Open\n ON _Open.SubscriberKey = WelcomeCampaignSegment.SubscriberKey\n\n/* \u274c Not meaningful aliasing and no AS keyword in multi Table query */\nSELECT\n a.SubscriberKey\n , a.EmailAddress\n , b.EventDate AS OpenDate\nFROM WelcomeCampaignSegment a\n INNER JOIN _Open b\n ON a.SubscriberKey = b.SubscriberKey\n")),(0,i.kt)("h3",{id:"not-equal-to-symbol"},"Not Equal To Symbol"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use ",(0,i.kt)("inlineCode",{parentName:"strong"},"!=")," instead of ",(0,i.kt)("inlineCode",{parentName:"strong"},"<>"),".")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"!=")," symbol is much more popular and used in many languages. Using it makes the query more readable to people not experienced in SQL."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{4,9}","{4,9}":!0},"/* \u2705 Use of != for negation */\nSELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE CONVERT(DATE, DateJoined) != CONVERT(DATE, GETDATE())\n\n/* \u274c Use of <> for negation */\nSELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE CONVERT(DATE, DateJoined) <> CONVERT(DATE, GETDATE())\n")),(0,i.kt)("h3",{id:"meaningful-column-names"},"Meaningful Column Names"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Use Column names that suggest the data type.")),(0,i.kt)("p",null,"Just as with a letter case, you might have your hands tied by cross-system dependencies. But whenever possible, strive for meaningful names:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Use descriptive Column names. It is better to have a long explicit one (",(0,i.kt)("inlineCode",{parentName:"li"},"IsTrackingSuppressed"),") than a short mysterious abbreviation (",(0,i.kt)("inlineCode",{parentName:"li"},"trk"),")."),(0,i.kt)("li",{parentName:"ol"},"When the Column is a boolean, prefix it with ",(0,i.kt)("inlineCode",{parentName:"li"},"Is")," (or ",(0,i.kt)("inlineCode",{parentName:"li"},"Has"),"/",(0,i.kt)("inlineCode",{parentName:"li"},"Does")," depending on the underlying data)."),(0,i.kt)("li",{parentName:"ol"},"When the Column is a date, suffix it with ",(0,i.kt)("inlineCode",{parentName:"li"},"Date"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"{3-8,17-22}","{3-8,17-22}":!0},"/* \u2705 Meaningful and consistent Column Names */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\n , j.SuppressTracking AS IsTrackingSuppressed\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n\n/* \u274c No consistency and type alignment in Column Names */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryTime\n , o.EventDate AS OpenedAt\n , j.SuppressTracking AS SuppressTracking\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n")),(0,i.kt)("h2",{id:"sum-up"},"Sum Up"),(0,i.kt)("p",null,"It is a long article, so let's gather all the recommendations in one place:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Be consistent"),(0,i.kt)("li",{parentName:"ol"},"Strive for readability"),(0,i.kt)("li",{parentName:"ol"},"Use comments to provide required context to your query"),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"UPPERCASE")," for SQL syntax ",(0,i.kt)("a",{parentName:"li",href:"#sql-syntax-case"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"PascalCase")," for Table & Column names ",(0,i.kt)("a",{parentName:"li",href:"#column--table-names-case"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Limit information per line to one ",(0,i.kt)("a",{parentName:"li",href:"#single-information-per-line"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Align main SQL keywords to the left ",(0,i.kt)("a",{parentName:"li",href:"#left-aligned-keywords"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use indentation to highlight the relationship between SQL keywords ",(0,i.kt)("a",{parentName:"li",href:"#consistent-indentation"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use spaces wherever it makes the query more readable ",(0,i.kt)("a",{parentName:"li",href:"#intentional-spacing"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use commas at the beginning of the line ",(0,i.kt)("a",{parentName:"li",href:"#commas-placement"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use full Date Parts names ",(0,i.kt)("a",{parentName:"li",href:"#date-parts"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"INNER JOIN")," name over ",(0,i.kt)("inlineCode",{parentName:"li"},"JOIN")," ",(0,i.kt)("a",{parentName:"li",href:"#join-and-on"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"In ",(0,i.kt)("inlineCode",{parentName:"li"},"JOIN ON")," reference Column from newly joined Table on the left ",(0,i.kt)("a",{parentName:"li",href:"#join-and-on"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"When using ",(0,i.kt)("inlineCode",{parentName:"li"},"JOIN"),", add meaningful aliases for Tables and prefix all Columns ",(0,i.kt)("a",{parentName:"li",href:"#join-and-on"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Always use ",(0,i.kt)("inlineCode",{parentName:"li"},"AS")," keyword between the Table name and the alias ",(0,i.kt)("a",{parentName:"li",href:"#join-and-on"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"!=")," instead of ",(0,i.kt)("inlineCode",{parentName:"li"},"<>")," ",(0,i.kt)("a",{parentName:"li",href:"#not-equal-to-symbol"},"\ud83d\udd17")),(0,i.kt)("li",{parentName:"ol"},"Use Column names that suggest the data type ",(0,i.kt)("a",{parentName:"li",href:"#meaningful-column-names"},"\ud83d\udd17"))),(0,i.kt)("p",null,"If you want to share something I'm missing or have arguments for a different recommendation - ",(0,i.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/mateusz-dabrowski-marketing/"},"let me know"),"."),(0,i.kt)("p",null,"Looking for more Marketing Cloud style? Check out my:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ssjs/ssjs-style-guide"},"SSJS Style Guide")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/ampscript/ampscript-style-guide"},"AMPScript Style Guide"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ecbe7f2c.cabea261.js b/assets/js/ecbe7f2c.cabea261.js new file mode 100644 index 000000000..fc3f1377b --- /dev/null +++ b/assets/js/ecbe7f2c.cabea261.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7120],{2821:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>m,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=s(5893),a=s(1151),l=s(1872);const r={id:"sfmc-sql-style-guide",title:"SFMC SQL Style Guide",sidebar_label:"Style Guide",description:"Query with style. Readable, bug-free code is a few shifts & spaces away.",image:"img/og/og-image-sql-style-guide.png",tags:["Marketing Cloud","SQL","Style Guide","Best Practice"]},t=void 0,o={id:"sql/sfmc-sql-style-guide",title:"SFMC SQL Style Guide",description:"Query with style. Readable, bug-free code is a few shifts & spaces away.",source:"@site/docs/sql/sfmc-sql-style-guide.mdx",sourceDirName:"sql",slug:"/sql/sfmc-sql-style-guide",permalink:"/docs/sql/sfmc-sql-style-guide",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/sql/sfmc-sql-style-guide.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Style Guide",permalink:"/docs/tags/style-guide"},{label:"Best Practice",permalink:"/docs/tags/best-practice"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1641649742,formattedLastUpdatedAt:"Jan 8, 2022",frontMatter:{id:"sfmc-sql-style-guide",title:"SFMC SQL Style Guide",sidebar_label:"Style Guide",description:"Query with style. Readable, bug-free code is a few shifts & spaces away.",image:"img/og/og-image-sql-style-guide.png",tags:["Marketing Cloud","SQL","Style Guide","Best Practice"]},sidebar:"docs",previous:{title:"Null Functions",permalink:"/docs/sql/sfmc-sql-null-functions"},next:{title:"SFMC Config",permalink:"/docs/category/sfmc-config"}},c={},d=[{value:"Letter Case",id:"letter-case",level:2},{value:"SQL Syntax Case",id:"sql-syntax-case",level:3},{value:"Column & Table Names Case",id:"column--table-names-case",level:3},{value:"Alignment and Indentation",id:"alignment-and-indentation",level:2},{value:"Single Information per Line",id:"single-information-per-line",level:3},{value:"Left Aligned Keywords",id:"left-aligned-keywords",level:3},{value:"Consistent Indentation",id:"consistent-indentation",level:3},{value:"Intentional Spacing",id:"intentional-spacing",level:3},{value:"Commas Placement",id:"commas-placement",level:3},{value:"Explicit vs Implicit",id:"explicit-vs-implicit",level:2},{value:"Date Parts",id:"date-parts",level:3},{value:"JOIN and ON",id:"join-and-on",level:3},{value:"Table Aliases",id:"table-aliases",level:3},{value:"Not Equal To Symbol",id:"not-equal-to-symbol",level:3},{value:"Meaningful Column Names",id:"meaningful-column-names",level:3},{value:"Sum Up",id:"sum-up",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l.m,{content:"Query with style. Readable, bug-free code is a few shifts & spaces away."}),"\n",(0,i.jsx)(n.p,{children:"First things first: this Salesforce Marketing Cloud SQL style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Be consistent across your codebase."}),"\n",(0,i.jsx)(n.li,{children:"Strive for good readability."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Everything else is preference. And you are just about to learn about mine."}),"\n",(0,i.jsx)(n.h2,{id:"letter-case",children:"Letter Case"}),"\n",(0,i.jsx)(n.p,{children:"SQL gives you much freedom regarding the type of letter case you will be using for parts of your query. Let's use this freedom to create queries that are readable and aligned in convention to other Marketing Cloud programmatic languages operating on the same data."}),"\n",(0,i.jsx)(n.h3,{id:"sql-syntax-case",children:"SQL Syntax Case"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Use ",(0,i.jsx)(n.code,{children:"UPPERCASE"})," for all elements of SQL syntax."]})}),"\n",(0,i.jsx)(n.p,{children:"This approach helps visually differentiate query language from Tables (data extensions, data views) and Columns (fields) to improve readability."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Upper Case for SQL Syntax */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n\n/* \u274c Pascal Case for SQL Syntax */\nSelect\n SubscriberKey\n , EmailAddress\nFrom Ent._Subscribers\nWhere DateJoined >= DateAdd(Month, -1, GetDate())\n\n/* \u274c Lower Case for SQL Syntax */\nselect\n SubscriberKey\n , EmailAddress\nfrom Ent._Subscribers\nwhere DateJoined >= dateadd(month, -1, getdate())\n"})}),"\n",(0,i.jsx)(n.h3,{id:"column--table-names-case",children:"Column & Table Names Case"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Use ",(0,i.jsx)(n.code,{children:"PascalCase"})," for all Table and Column names."]})}),"\n",(0,i.jsx)(n.p,{children:"Treat it as a soft recommendation, as it is highly connected to your organisation's conventions. If other connected systems are using a different style, it might be best to follow it in Marketing Cloud."}),"\n",(0,i.jsx)(n.p,{children:"It is especially true for Tables, as you might be using mixed convention leveraging lowercase, uppercase and underscores for Data Extension names. However, try not to use hyphens, as those will require you to use square brackets around the name and might interfere in query syntax highlighting, leading to worse readability."}),"\n",(0,i.jsxs)(n.p,{children:["The most popular SQL convention for Table and Column names is ",(0,i.jsx)(n.code,{children:"snake_case"}),". However, in Marketing Cloud, the Table and Column names will share the case between your queries and the User Interface. It is essential to make them as readable and human friendly as possible. Additionally, in many cases, you will also leverage those names in AMPScript and SSJS."]}),"\n",(0,i.jsxs)(n.p,{children:["Due to the above, I believe ",(0,i.jsx)(n.code,{children:"PascalCase"})," - especially for Column names - is the best choice for Marketing Cloud SQL."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Pascal Case for Table and Column names */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u2705 Pascal Case for Column names and custom consistent covention for Table names */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WEL_WelcomeCampaignSegment_20201011_OTH AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u274c Lower Case for Table and Column names */\nSELECT\n wel.subscriberkey\n , wel.emailaddress\n , o.eventdate AS opendate\nFROM welcomecampaignsegment AS wel\n INNER JOIN _open AS o\n ON o.subscriberkey = wel.subscriberkey\n\n/* \u274c Upper Case for Table and Column names */\nSELECT\n WEL.SUBSCRIBERKEY\n , WEL.EMAILADDRESS\n , O.EVENTDATE AS OPENDATE\nFROM WELCOMECAMPAIGNSEGMENT AS WEL\n INNER JOIN _OPEN AS O\n ON O.SUBSCRIBERKEY = WEL.SUBSCRIBERKEY\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(n.p,{children:"If you want to make your Style Guide even safer, you can decide on writing all Columns and Table names in square brackets. As Marketing Cloud is not checking whether you use SQL's reserved keywords, this approach will protect you from potential silent issue. The cost, however, is much more characters and less readable queries."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:'title="You need to decide how hard you want to leverage the square brackets"',children:"SELECT\n [wel].[SubscriberKey]\n , [wel].[EmailAddress]\n , [o].[EventDate] AS [OpenDate]\nFROM [WelcomeCampaignSegment] AS [wel]\n INNER JOIN [_Open] AS [o]\n ON [o].[SubscriberKey] = [wel].[SubscriberKey]\n"})})]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"alignment-and-indentation",children:"Alignment and Indentation"}),"\n",(0,i.jsx)(n.p,{children:"SQL is very flexible when it comes to alignment and indentation of the query. Writing everything in one line creates a valid code that will run. But just because it is correct, it doesn't mean it is good. Generous use of new lines and indents has close to no impact on performance but a massive impact on readability. Enter and Space keys are your friends."}),"\n",(0,i.jsx)(n.p,{children:"There are many styles out there, and I decided to follow those that merge good writing speed with excellent readability."}),"\n",(0,i.jsx)(n.h3,{id:"single-information-per-line",children:"Single Information per Line"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Limit information per line to one."})}),"\n",(0,i.jsx)(n.p,{children:"I recommend keeping one information per line, as it allows for much easier scanning. The four most important examples of this approach are:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Each ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(n.code,{children:"SELECT"})})," Column in a separate line"]}),"\n",(0,i.jsxs)(n.li,{children:["Each ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(n.code,{children:"WHERE"})})," condition in a separate line"]}),"\n",(0,i.jsxs)(n.li,{children:["Each ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case",children:(0,i.jsx)(n.code,{children:"CASE"})})," condition in a separate line"]}),"\n",(0,i.jsxs)(n.li,{children:["Each ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})," and ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#joining-on",children:(0,i.jsx)(n.code,{children:"ON"})})," relationship in a separate line"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Single information per line */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n ELSE 0\n END\n\n/* \u274c Multiple pieces of information per line */\nSELECT s.SubscriberKey AS SubscriberKey, j.EmailName AS EmailName, s.EventDate AS SentDate, j.DeliveredTime AS DeliveryDate, o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j ON j.JobID = s.JobID\n LEFT JOIN _Open AS o ON o.JobID = s.JobID AND o.ListID = s.ListID AND o.BatchID = s.BatchID AND o.SubscriberID = s.SubscriberID AND o.IsUnique = 1\nWHERE 1 = CASE WHEN j.EmailName LIKE 'UPS_%' THEN 1 WHEN j.EmailName LIKE 'CRS_%' THEN 1 ELSE 0 END\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As you can see, the ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(n.code,{children:"SELECT"})})," and ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(n.code,{children:"WHERE"})})," keywords have their separate line to mark respective block starting. For readability reasons, I make an exception if there is only one Column or condition to be used:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Single Column in SELECT and single condition in WHERE lines */\nSELECT SubscriberKey\nFROM _Subscribers\nWHERE Domain = 'mateuszdabrowski.pl'\n\n/* \u274c Separate lines with single SELECT Column and WHERE condition */\nSELECT\n SubscriberKey\nFROM _Subscribers\nWHERE\n Domain = 'mateuszdabrowski.pl'\n"})}),"\n",(0,i.jsxs)(n.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsxs)(n.p,{children:["If you are using ",(0,i.jsx)(n.code,{children:"DISTINCT"})," or ",(0,i.jsx)(n.code,{children:"TOP"}),", put it into the same line as ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(n.code,{children:"SELECT"})}),". In such a case, even if you work on a single Column, move it to a separate row for better readability."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Single Column in SELECT and single condition in WHERE lines */\nSELECT DISTINCT TOP 10\n SubscriberKey\nFROM ContenstSubmissions\n\n/* \u274c Separate lines for single SELECT Column and WHERE condition */\nSELECT DISTINCT TOP 10 SubscriberKey\nFROM ContenstSubmissions\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"left-aligned-keywords",children:"Left Aligned Keywords"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Align main SQL keywords to the left."})}),"\n",(0,i.jsx)(n.p,{children:"This rule focuses on writing speed. While I prefer the Vertically Aligned Space approach's aesthetics, I don't see any significant readability gains. On the other hand, writing in this style in Marketing Cloud is a pain, as there is no autoformatter supporting it in the Query Studio or Query Activity. We would have to add all those additional spaces manually. It's just not worth it."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Left Aligned Keywords */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n\n/* \u274c Post Keyword Space Aligned Vertically */\nSELECT SubscriberKey,\n EmailAddress\n FROM Ent._Subscribers\n WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n"})}),"\n",(0,i.jsx)(n.h3,{id:"consistent-indentation",children:"Consistent Indentation"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Use indentation to highlight SQL keyword relationships."})}),"\n",(0,i.jsx)(n.p,{children:"This rule focuses on readability. The logic, in short, is to indent whenever the line is dependent on the previous line (child line), for example:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Selected Column Names are children of ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select",children:(0,i.jsx)(n.code,{children:"SELECT"})})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})," keywords are children of the initial Table referenced with ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-from",children:(0,i.jsx)(n.code,{children:"FROM"})})]}),"\n",(0,i.jsxs)(n.li,{children:["Joining relationships (",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#joining-on",children:(0,i.jsx)(n.code,{children:"ON"})}),") are children of ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})]}),"\n",(0,i.jsxs)(n.li,{children:["Case conditions are children of the ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case",children:(0,i.jsx)(n.code,{children:"CASE"})})]}),"\n",(0,i.jsxs)(n.li,{children:["Where conditions are children of the ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where",children:(0,i.jsx)(n.code,{children:"WHERE"})})]}),"\n",(0,i.jsx)(n.li,{children:"Sub-queries follow the same rules in respective indentation level."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"For simplicity I use 4-spaces indent, as it is both standard and can be added in Marketing Cloud Query with a single click of the Tab key."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Dependency based indentation */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n ELSE 0\n END\n\n/* \u274c Lack of indentation */\nSELECT\ns.SubscriberKey AS SubscriberKey\n, j.EmailName AS EmailName\n, s.EventDate AS SentDate\n, j.DeliveredTime AS DeliveryDate\n, o.EventDate AS OpenDate\nFROM _Sent AS s\nLEFT JOIN _Job AS j ON j.JobID = s.JobID\nLEFT JOIN _Open AS o ON o.JobID = s.JobID\nAND o.ListID = s.ListID\nAND o.BatchID = s.BatchID\nAND o.SubscriberID = s.SubscriberID\nAND o.IsUnique = 1\nWHERE 1 = CASE\nWHEN j.EmailName LIKE 'UPS_%' THEN 1\nWHEN j.EmailName LIKE 'CRS_%' THEN 1\nELSE 0\nEND\n"})}),"\n",(0,i.jsx)(n.h3,{id:"intentional-spacing",children:"Intentional Spacing"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Use spaces wherever it makes the query more readable."})}),"\n",(0,i.jsxs)(n.p,{children:["The must-have is spacing around any ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-where#basic-operators",children:"operators"})," (equality or comparison) and after commas."]}),"\n",(0,i.jsxs)(n.p,{children:["However, there is another place where spacing is beneficial for readability but might require an exception in some scenarios. Spacing for ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-select#aliasing-with-as",children:"aliases"})," and ",(0,i.jsx)(n.code,{children:"THEN"})," keywords of the ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case",children:(0,i.jsx)(n.code,{children:"CASE"})})," statement."]}),"\n",(0,i.jsxs)(n.p,{children:["I try to use it whenever possible, but when there is huge imbalance in length (for example one Column requires multi-function calculation or there is a single complex ",(0,i.jsx)(n.code,{children:"WHEN"})," in ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-case",children:(0,i.jsx)(n.code,{children:"CASE"})}),") equal spacing might make the query harder to read. Always decide which approach works best for your query from readability perspective."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 Spacing around operators plus equalizing aliases and THEN */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n WHEN j.EmailName = 'OTH_SeedList' THEN 1\n ELSE 0\n END\n\n/* \u2705 Spacing around operators plus equalizing aliases with exceptions */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\n , DATEDIFF(HOUR, s.EventDate, o.EventDate) AS TimeToOpen\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n AND o.ListID = s.ListID\n AND o.BatchID = s.BatchID\n AND o.SubscriberID = s.SubscriberID\n AND o.IsUnique = 1\nWHERE\n 1 = CASE\n WHEN j.EmailName LIKE 'UPS_%' OR j.EmailName LIKE 'CRS_%' THEN 1\n WHEN j.EmailName = 'OTH_SeedList' THEN 1\n ELSE 0\n END\n\n/* \u274c Lack of spacing */\nSELECT\n s.SubscriberKey AS SubscriberKey\n ,j.EmailName AS EmailName\n ,s.EventDate AS SentDate\n ,j.DeliveredTime AS DeliveryDate\n ,o.EventDate AS OpenDate\n ,DATEDIFF(HOUR,s.EventDate,o.EventDate) AS TimeToOpen\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID=s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID=s.JobID\n AND o.ListID=s.ListID\n AND o.BatchID=s.BatchID\n AND o.SubscriberID=s.SubscriberID\n AND o.IsUnique=1\nWHERE\n 1=CASE\n WHEN j.EmailName LIKE 'UPS_%' THEN 1\n WHEN j.EmailName LIKE 'CRS_%' THEN 1\n WHEN j.EmailName='OTH_SeedList' THEN 1\n ELSE 0\n END\n"})}),"\n",(0,i.jsx)(n.h3,{id:"commas-placement",children:"Commas Placement"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Use commas at the beginning of the line."})}),"\n",(0,i.jsx)(n.p,{children:"There are few approaches related to comma placement. Initially, I favoured commas at the end of the line, as I found them more accessible to use due to their similarity to natural language. However, there are strong reasons to use the comma at the beginning of the line. Here is what convinced me to change my style:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Adding or deleting a Column requires a change in only one line. It's easier, faster and minimises the risk of a crash due to the trailing comma."}),"\n",(0,i.jsx)(n.li,{children:"Above is also very beneficial during difference checking and when leveraging git for query version control. With a comma at the beginning of the line, the Column addition or deletion is displayed correctly as a single line change."}),"\n",(0,i.jsxs)(n.li,{children:["Having a comma in the beginning makes it easier to assess where a new Column definition starts quickly. It is a vast readability improvement when you are using more complex structures, like ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-case#conditional-values-with-case",children:[(0,i.jsx)(n.code,{children:"CASE"})," in ",(0,i.jsx)(n.code,{children:"SELECT"})]}),"."]}),"\n",(0,i.jsx)(n.li,{children:"It's also easier to quickly assess whether you have a comma for each Column. With lines of various length, it is much harder with the comma at the end."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For the sake of readability, I indent the first Column by two spaces so that it is in line with the following ones. Similarly, I indent ",(0,i.jsx)(n.code,{children:"END"})," after ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-case#conditional-values-with-case",children:[(0,i.jsx)(n.code,{children:"CASE"})," in ",(0,i.jsx)(n.code,{children:"SELECT"})]})," by two spaces for the same reason."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{3-5,10-12}",children:"/* \u2705 Commas at the beginning */\nSELECT\n SubscriberKey\n , EmailAddress\n , DateJoined\nFROM Ent._Subscribers\n\n/* \u274c Commas in the end */\nSELECT\n SubscriberKey,\n EmailAddress,\n DateJoined\nFROM Ent._Subscribers\n"})}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"explicit-vs-implicit",children:"Explicit vs Implicit"}),"\n",(0,i.jsx)(n.p,{children:"Many things in SQL can be done in multiple ways - using various functions, symbols or shortcuts. While all those options may work, not all are a good idea. Whenever you are choosing the approach, go for the explicit and straightforward. Even if it means writing a few characters more."}),"\n",(0,i.jsx)(n.h3,{id:"date-parts",children:"Date Parts"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Use full ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-date-functions#date-parts",children:"Date Parts"})," names."]})}),"\n",(0,i.jsx)(n.p,{children:"Yes, abbreviations let you save few characters, but they kill the readability unless someone is fluent in those shortcuts. For Marketing Cloud purposes, the time saved during writing is not worth the time lost when reading. Go with the full version."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{6,13}",children:"/* \u2705 Full Date Part */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())\n\n/* \u274c Abbreviated Date Part */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\nWHERE DateJoined >= DATEADD(M, -1, GETDATE())\n"})}),"\n",(0,i.jsx)(n.h3,{id:"join-and-on",children:"JOIN and ON"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Use ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"INNER JOIN"})})," name and reference Column from the new Table first after ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#joining-on",children:(0,i.jsx)(n.code,{children:"ON"})}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["Instead of just ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})}),", write ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#inner-join",children:(0,i.jsx)(n.code,{children:"INNER JOIN"})})," - it's longer but explicit and in line with the rest of ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})," keywords. It makes it easier to scan queries with ",(0,i.jsxs)(n.a,{href:"/docs/sql/sfmc-sql-join#multiple-various-joins",children:["multiple various ",(0,i.jsx)(n.code,{children:"JOIN"})]})," statements."]}),"\n",(0,i.jsxs)(n.p,{children:["Additionally, when defining ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})," relationships after ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#joining-on",children:(0,i.jsx)(n.code,{children:"ON"})}),", firstly reference the Column from the joined Table. The previous Table should be on the right side. It will improve consistency and reading speed."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{7-8,16-17}",children:"/* \u2705 Explicit Inner Join and Column from new Table on the left side of the ON condition */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u274c Implicit Inner Join and Column from new Table on the right side of the ON condition */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n JOIN _Open AS o\n ON wel.SubscriberKey = o.SubscriberKey\n"})}),"\n",(0,i.jsx)(n.h3,{id:"table-aliases",children:"Table Aliases"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["When using ",(0,i.jsx)(n.code,{children:"JOIN"}),", add meaningful aliases for Tables and prefix all Columns with them."]})}),"\n",(0,i.jsx)(n.p,{children:"There are a few points:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["If you are working on only one Table without ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})," - don't use ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#table-name-prefix",children:"aliases"})," at all. They are not needed and would make the query less readable."]}),"\n",(0,i.jsxs)(n.li,{children:["If you have any ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join",children:(0,i.jsx)(n.code,{children:"JOIN"})})," - always use ",(0,i.jsx)(n.a,{href:"/docs/sql/sfmc-sql-join#table-name-prefix",children:"aliases and prefixes"}),". SQL doesn't always require it, but it is much easier to read the query when the Columns have an explicit Table mention in the prefix."]}),"\n",(0,i.jsx)(n.li,{children:"When you create an alias for a Table, make it meaningful. Using subsequent letters of the alphabet is not a good idea. Instead, use something that will remind the reader of the full name - for example, abbreviation using the first letter of each word in the Table. It will allow for much easier reading."}),"\n",(0,i.jsxs)(n.li,{children:["Always use ",(0,i.jsx)(n.code,{children:"AS"})," keyword between the Table name and the alias."]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",children:"/* \u2705 No aliasing in single Table query */\nSELECT\n SubscriberKey\n , EmailAddress\nFROM Ent._Subscribers\n\n/* \u274c Aliasing in single Table query */\nSELECT\n s.SubscriberKey\n , s.EmailAddress\nFROM Ent._Subscribers AS s\n\n/* \u2705 Meaningful aliasing and prefixes in multi Table query */\nSELECT\n wel.SubscriberKey\n , wel.EmailAddress\n , o.EventDate AS OpenDate\nFROM WelcomeCampaignSegment AS wel\n INNER JOIN _Open AS o\n ON o.SubscriberKey = wel.SubscriberKey\n\n/* \u274c No aliasing and no prefix in multi Table query */\nSELECT\n SubscriberKey\n , EmailAddress\n , EventDate AS OpenDate\nFROM WelcomeCampaignSegment\n INNER JOIN _Open\n ON _Open.SubscriberKey = WelcomeCampaignSegment.SubscriberKey\n\n/* \u274c Not meaningful aliasing and no AS keyword in multi Table query */\nSELECT\n a.SubscriberKey\n , a.EmailAddress\n , b.EventDate AS OpenDate\nFROM WelcomeCampaignSegment a\n INNER JOIN _Open b\n ON a.SubscriberKey = b.SubscriberKey\n"})}),"\n",(0,i.jsx)(n.h3,{id:"not-equal-to-symbol",children:"Not Equal To Symbol"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["Use ",(0,i.jsx)(n.code,{children:"!="})," instead of ",(0,i.jsx)(n.code,{children:"<>"}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"!="})," symbol is much more popular and used in many languages. Using it makes the query more readable to people not experienced in SQL."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{4,9}",children:"/* \u2705 Use of != for negation */\nSELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE CONVERT(DATE, DateJoined) != CONVERT(DATE, GETDATE())\n\n/* \u274c Use of <> for negation */\nSELECT SubscriberKey\nFROM Ent._Subscribers\nWHERE CONVERT(DATE, DateJoined) <> CONVERT(DATE, GETDATE())\n"})}),"\n",(0,i.jsx)(n.h3,{id:"meaningful-column-names",children:"Meaningful Column Names"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Use Column names that suggest the data type."})}),"\n",(0,i.jsx)(n.p,{children:"Just as with a letter case, you might have your hands tied by cross-system dependencies. But whenever possible, strive for meaningful names:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Use descriptive Column names. It is better to have a long explicit one (",(0,i.jsx)(n.code,{children:"IsTrackingSuppressed"}),") than a short mysterious abbreviation (",(0,i.jsx)(n.code,{children:"trk"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:["When the Column is a boolean, prefix it with ",(0,i.jsx)(n.code,{children:"Is"})," (or ",(0,i.jsx)(n.code,{children:"Has"}),"/",(0,i.jsx)(n.code,{children:"Does"})," depending on the underlying data)."]}),"\n",(0,i.jsxs)(n.li,{children:["When the Column is a date, suffix it with ",(0,i.jsx)(n.code,{children:"Date"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sql",metastring:"{3-8,17-22}",children:"/* \u2705 Meaningful and consistent Column Names */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryDate\n , o.EventDate AS OpenDate\n , j.SuppressTracking AS IsTrackingSuppressed\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n\n/* \u274c No consistency and type alignment in Column Names */\nSELECT\n s.SubscriberKey AS SubscriberKey\n , j.EmailName AS EmailName\n , s.EventDate AS SentDate\n , j.DeliveredTime AS DeliveryTime\n , o.EventDate AS OpenedAt\n , j.SuppressTracking AS SuppressTracking\nFROM _Sent AS s\n LEFT JOIN _Job AS j\n ON j.JobID = s.JobID\n LEFT JOIN _Open AS o\n ON o.JobID = s.JobID\n"})}),"\n",(0,i.jsx)(n.h2,{id:"sum-up",children:"Sum Up"}),"\n",(0,i.jsx)(n.p,{children:"It is a long article, so let's gather all the recommendations in one place:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Be consistent"}),"\n",(0,i.jsx)(n.li,{children:"Strive for readability"}),"\n",(0,i.jsx)(n.li,{children:"Use comments to provide required context to your query"}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"UPPERCASE"})," for SQL syntax ",(0,i.jsx)(n.a,{href:"#sql-syntax-case",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"PascalCase"})," for Table & Column names ",(0,i.jsx)(n.a,{href:"#column--table-names-case",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Limit information per line to one ",(0,i.jsx)(n.a,{href:"#single-information-per-line",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Align main SQL keywords to the left ",(0,i.jsx)(n.a,{href:"#left-aligned-keywords",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use indentation to highlight the relationship between SQL keywords ",(0,i.jsx)(n.a,{href:"#consistent-indentation",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use spaces wherever it makes the query more readable ",(0,i.jsx)(n.a,{href:"#intentional-spacing",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use commas at the beginning of the line ",(0,i.jsx)(n.a,{href:"#commas-placement",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use full Date Parts names ",(0,i.jsx)(n.a,{href:"#date-parts",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"INNER JOIN"})," name over ",(0,i.jsx)(n.code,{children:"JOIN"})," ",(0,i.jsx)(n.a,{href:"#join-and-on",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["In ",(0,i.jsx)(n.code,{children:"JOIN ON"})," reference Column from newly joined Table on the left ",(0,i.jsx)(n.a,{href:"#join-and-on",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["When using ",(0,i.jsx)(n.code,{children:"JOIN"}),", add meaningful aliases for Tables and prefix all Columns ",(0,i.jsx)(n.a,{href:"#join-and-on",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Always use ",(0,i.jsx)(n.code,{children:"AS"})," keyword between the Table name and the alias ",(0,i.jsx)(n.a,{href:"#join-and-on",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use ",(0,i.jsx)(n.code,{children:"!="})," instead of ",(0,i.jsx)(n.code,{children:"<>"})," ",(0,i.jsx)(n.a,{href:"#not-equal-to-symbol",children:"\ud83d\udd17"})]}),"\n",(0,i.jsxs)(n.li,{children:["Use Column names that suggest the data type ",(0,i.jsx)(n.a,{href:"#meaningful-column-names",children:"\ud83d\udd17"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If you want to share something I'm missing or have arguments for a different recommendation - ",(0,i.jsx)(n.a,{href:"https://www.linkedin.com/in/mateusz-dabrowski-marketing/",children:"let me know"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Looking for more Marketing Cloud style? Check out my:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/ssjs/ssjs-style-guide",children:"SSJS Style Guide"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/ampscript/ampscript-style-guide",children:"AMPScript Style Guide"})}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,n,s)=>{s.d(n,{m:()=>l});s(7294);const i="leadText_qzwo";var a=s(5893);const l=e=>{let{content:n}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("p",{id:i,children:n})})}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>r});var i=s(7294);const a={},l=i.createContext(a);function r(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecd0154e.1b43ff83.js b/assets/js/ecd0154e.1b43ff83.js new file mode 100644 index 000000000..060bb90be --- /dev/null +++ b/assets/js/ecd0154e.1b43ff83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1654],{9896:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var s=n(5893),i=n(1151),r=n(1872);const l={id:"js-dom",title:"JS Document Object Model",sidebar_label:"DOM",description:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",image:"img/og/og-image-js-dom.png",tags:["JavaScript","Cloud Page","Personalisation"]},o=void 0,a={id:"js/js-dom",title:"JS Document Object Model",description:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",source:"@site/docs/js/js-dom.mdx",sourceDirName:"js",slug:"/js/js-dom",permalink:"/docs/js/js-dom",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/js-dom.mdx",tags:[{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"Personalisation",permalink:"/docs/tags/personalisation"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"js-dom",title:"JS Document Object Model",sidebar_label:"DOM",description:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",image:"img/og/og-image-js-dom.png",tags:["JavaScript","Cloud Page","Personalisation"]},sidebar:"docs",previous:{title:"Loops",permalink:"/docs/js/js-loops"},next:{title:"AMPScript",permalink:"/docs/category/ampscript"}},c={},d=[{value:"What is Document Object Model?",id:"what-is-document-object-model",level:2},{value:"Accessing the DOM",id:"accessing-the-dom",level:2},{value:"Should you use getElement or querySelector?",id:"should-you-use-getelement-or-queryselector",level:3},{value:"Exploring the DOM",id:"exploring-the-dom",level:2},{value:"attributes",id:"attributes",level:3},{value:"classList and className",id:"classlist-and-classname",level:3},{value:"id and tagName",id:"id-and-tagname",level:3},{value:"innerText and innerHTML",id:"innertext-and-innerhtml",level:3},{value:"hidden and style",id:"hidden-and-style",level:3},{value:"Traversing the DOM",id:"traversing-the-dom",level:2},{value:"parentElement",id:"parentelement",level:3},{value:"previousElementSibling and nextElementSibling",id:"previouselementsibling-and-nextelementsibling",level:3},{value:"All things children",id:"all-things-children",level:3},{value:"The power of DOM traversing",id:"the-power-of-dom-traversing",level:3},{value:"Manipulating the DOM",id:"manipulating-the-dom",level:2},{value:"addEventListener",id:"addeventlistener",level:3},{value:"Event types",id:"event-types",level:4},{value:"click",id:"click",level:5},{value:"submit",id:"submit",level:5},{value:"focus & blur",id:"focus--blur",level:5},{value:"mouseenter & mouseleave",id:"mouseenter--mouseleave",level:5},{value:"Changing attributes",id:"changing-attributes",level:3},{value:"Marketing Cloud Use Cases",id:"marketing-cloud-use-cases",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.m,{content:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods."}),"\n",(0,s.jsx)(t.h2,{id:"what-is-document-object-model",children:"What is Document Object Model?"}),"\n",(0,s.jsx)(t.p,{children:"The Document Object Model (DOM) represents the structure of a web document and serves as its programming interface. In simpler words, it lets JavaScript talk with the HTML of the page. And that is huge, especially in the Marketing Automation world."}),"\n",(0,s.jsx)(t.p,{children:"Why? Because it lets you manipulate your website in many ways - visible and not. Dynamic forms adapting to user actions, pages changing in real-time and enhanced data capture. All that (and so much more) is possible thanks to DOM access. So let's dive into details."}),"\n",(0,s.jsx)(t.h2,{id:"accessing-the-dom",children:"Accessing the DOM"}),"\n",(0,s.jsxs)(t.p,{children:["To start working with Document Object Model in JavaScript, you need to use one of the special objects - ",(0,s.jsx)(t.code,{children:"window"})," (browser tab) or ",(0,s.jsx)(t.code,{children:"document"})," (page within that tab). Each of those objects offers many methods that let you interact with a webpage."]}),"\n",(0,s.jsxs)(t.p,{children:["JavaScript lets you capture specific parts of your website and make them accessible for all your scripting needs with the help of ",(0,s.jsx)(t.code,{children:"document"})," object methods:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"getElementById"}),": returns an element with matching id attribute (for example, elemnt with ",(0,s.jsx)(t.code,{children:'id="emailAddressField"'})," using ",(0,s.jsx)(t.code,{children:"document.getElementById('emailAddressField')"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"getElementsByTagName"}),": returns a collection of matching HTML tags (for example, all ",(0,s.jsx)(t.code,{children:"<p>"})," tags using ",(0,s.jsx)(t.code,{children:"document.getElementByTagName('p')"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"getElementsByName"}),": returns a collection of elements with matching name attribute (for example, all inputs with ",(0,s.jsx)(t.code,{children:'name="email"'})," using ",(0,s.jsx)(t.code,{children:"document.getElementByName('email')"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"getElementsByClassName"}),": returns a collection of elements with matching class attribute (for example, all elements with ",(0,s.jsx)(t.code,{children:'class="hiddenContent"'})," using ",(0,s.jsx)(t.code,{children:"document.getElementByClassName('hiddenContent')"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"querySelector"}),": returns an element with a matching CSS3 selector (for example, ",(0,s.jsx)(t.code,{children:"<h2>"})," element that is within ",(0,s.jsx)(t.code,{children:'<p class="hiddenContent">'})," using ",(0,s.jsx)(t.code,{children:"document.querySelector(p.hiddenContent h2')"})," - notice the ",(0,s.jsx)(t.code,{children:"."})," prefix for a class). If there are multiple matching elements - it will return the first one."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"querySelectorAll"}),": returns a collection of elements matching CSS3 selector (for example, all ",(0,s.jsx)(t.code,{children:"<tr>"})," elements that are within elements with ",(0,s.jsx)(t.code,{children:'class=".DataCell"'})," that are within an element with ",(0,s.jsx)(t.code,{children:'id="attributes-repeater"'})," using ",(0,s.jsx)(t.code,{children:"document.querySelectorAll('#attributes-repeater .DataCell tr')"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:"querySelector"})," and ",(0,s.jsx)(t.code,{children:"querySelectorAll"})," allow you to select elements using the power of CSS3. It means that you can go really specific with the proper syntax."]}),(0,s.jsx)(t.p,{children:"You can select:"}),(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Tag by its name: ",(0,s.jsx)(t.code,{children:"document.querySelector('body')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Id with ",(0,s.jsx)(t.code,{children:"#"})," prefix: ",(0,s.jsx)(t.code,{children:"document.querySelector('#idName')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Class with ",(0,s.jsx)(t.code,{children:"."})," prefix: ",(0,s.jsx)(t.code,{children:"document.querySelector('.className')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Tag with specific class by chaining: ",(0,s.jsx)(t.code,{children:"document.querySelector('div.className')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Element with two classes: ",(0,s.jsx)(t.code,{children:"document.querySelector('.className1.className2')"})," (notice lack of space between classes)"]}),"\n",(0,s.jsxs)(t.li,{children:["Element that is direct child of another element: ",(0,s.jsx)(t.code,{children:"document.querySelector('div > h2')"})," (notice the ",(0,s.jsx)(t.code,{children:">"})," symbol between tags)"]}),"\n",(0,s.jsxs)(t.li,{children:["Element that is any child another element: ",(0,s.jsx)(t.code,{children:"document.querySelector('div h2')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Element that is any sibling (has the same parent): ",(0,s.jsx)(t.code,{children:"document.querySelector('p.className ~ h2')"})," (this will capture ",(0,s.jsx)(t.code,{children:"h2"})," that is under the same parent as ",(0,s.jsx)(t.code,{children:"p.className"}),")"]}),"\n",(0,s.jsxs)(t.li,{children:["Element that is adjecent sibling (has the same parent): ",(0,s.jsx)(t.code,{children:"document.querySelector('p.className + h2')"})," (this will capture ",(0,s.jsx)(t.code,{children:"h2"})," that is under the same parent as ",(0,s.jsx)(t.code,{children:"p.className"})," and after that paragraph)"]}),"\n",(0,s.jsxs)(t.li,{children:["Element with specific attribute: ",(0,s.jsx)(t.code,{children:"document.querySelector('[href]')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Element with specific value of attribute: ",(0,s.jsx)(t.code,{children:"document.querySelector('input[type=\"checkbox\"]')"})]}),"\n",(0,s.jsxs)(t.li,{children:["One of the listed elements: ",(0,s.jsx)(t.code,{children:"document.querySelector('ul, ol')"})]}),"\n",(0,s.jsxs)(t.li,{children:["All of the listed elements: ",(0,s.jsx)(t.code,{children:"document.querySelectorAll('ul, ol')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Elements targetet by ",(0,s.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes",children:"pseudo-class"}),": ",(0,s.jsx)(t.code,{children:"document.querySelectorAll('a:visited')"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements",children:"Pseudo-element"}),": ",(0,s.jsx)(t.code,{children:"document.querySelectorAll('h1::first-letter')"})]}),"\n",(0,s.jsxs)(t.li,{children:["Element with negated selection: ",(0,s.jsx)(t.code,{children:"document.querySelector('.className:not(div)')"})]}),"\n"]}),(0,s.jsx)(t.p,{children:"Sky is the limit, especially as you can chain all of the above into super query:"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('#content > article > div:nth-child(20) a:nth-child(1) > code');\n"})}),(0,s.jsx)(t.p,{children:"However, whenever possible, optimise. Either by finding a better way to select the element or by adding an easily selectable attribute to that element in the page HTML."})]}),"\n",(0,s.jsx)(t.p,{children:"As you can see, there are many options you can leverage."}),"\n",(0,s.jsx)(t.h3,{id:"should-you-use-getelement-or-queryselector",children:"Should you use getElement or querySelector?"}),"\n",(0,s.jsxs)(t.p,{children:["It depends on the purpose. The rule of thumb is that if one of the ",(0,s.jsx)(t.code,{children:"getElement"})," selectors can do the job, it's a better choice performance-wise (the longer HTML, the bigger difference). However, for complex selections, the newer ",(0,s.jsx)(t.code,{children:"querySelector"})," family might be better or the only possible choice."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Good use cases for the querySelector family"',children:"// Instead of using three getElement selectors (that wouldn't even work in this example, more on that in the next paragraph)\ndocument.getElementById('attributes-repeater').getElementsByClassName('DataCell').getElementsByTagName('tr');\n// you should use a single querySelectorAll selector\ndocument.querySelectorAll('#attributes-repeater .DataCell tr');\n\n// There are also cases where querySelector is the only choice\ndocument.querySelectorAll('input[type=\"checkbox\"]');\n"})}),"\n",(0,s.jsxs)(t.p,{children:["As always, the devil lies in the details. While chained ",(0,s.jsx)(t.code,{children:"getElement"})," selectors will have better performance than clean ",(0,s.jsx)(t.code,{children:"querySelector"}),", there are three issues with the former:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Readability: after two or three chained selectors, the ",(0,s.jsx)(t.code,{children:"getElement"})," chain gets really hard to read and debug; the natural CSS3 style of ",(0,s.jsx)(t.code,{children:"querySelector"})," is straightforward."]}),"\n",(0,s.jsxs)(t.li,{children:["Flexibility: you can only chain ",(0,s.jsx)(t.code,{children:"getElements"})," on single element. Refering to the previous code sample, while the ",(0,s.jsx)(t.code,{children:".getElementsByClassName('DataCell')"})," called on single outcome of ",(0,s.jsx)(t.code,{children:".getElementById('attributes-repeater')"})," works, the collection it will return would crash the ",(0,s.jsx)(t.code,{children:".getElementsByTagName('tr')"})," as the chaining works only on single element scope."]}),"\n",(0,s.jsxs)(t.li,{children:["Loopability: outcomes of ",(0,s.jsx)(t.code,{children:"getElements"})," selection cannot be looped using ",(0,s.jsx)(t.a,{href:"/docs/js/js-loops#foreach",children:(0,s.jsx)(t.code,{children:"forEach()"})}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["My approach is to use the more flexible and readable ",(0,s.jsx)(t.code,{children:"querySelector"})," whenever performance is not a dealbreaker and switch where possible to the ",(0,s.jsx)(t.code,{children:"getElement"})," toolset for use cases where the performance is crucial."]}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsx)(t.p,{children:"You can assign your DOM selection to a variable. It allows you to reuse it in multiple places of your script and lets you limit the scope of the selection."}),(0,s.jsxs)(t.p,{children:["You can do the latter by replacing the ",(0,s.jsx)(t.code,{children:"document"})," object with your variable - it will look for matching DOM elements only within the outcome of the previous selection."]}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"const form = document.querySelector('form');\nconst divsInForm = form.querySelectorAll('div.legalNotice'); // Returns only div tags with legalNotice class that are within your form\n"})}),(0,s.jsx)(t.p,{children:"It works like chaining selectors and with the same limitation - you can chain only if the previous outcome is a single element."}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* \u2705 Chain from a single element to a collection - same outcome as previous code snippet */\ndocument.querySelector('form').querySelectorAll('div.legalNotice');\n\n/* \u274c Chain from a collection to a collection - will throw TypeError */\ndocument.querySelectorAll('form').querySelectorAll('div.legalNotice');\n\n/* \u2705 Chain from a single element (thanks to index) to a collection */\ndocument.querySelectorAll('form')[0].querySelectorAll('div.legalNotice');\n\n/* Of course, in real scenario, you should use a compound selector for the same result */\ndocument.querySelectorAll('form div.legalNotice');\n"})})]}),"\n",(0,s.jsxs)(t.p,{children:["Selecting elements is just the beginning. Once you pick them, you can ",(0,s.jsx)(t.a,{href:"#exploring-the-dom",children:"explore"}),", ",(0,s.jsx)(t.a,{href:"#traversing-the-dom",children:"traverse"})," and ",(0,s.jsx)(t.a,{href:"#manipulating-the-dom",children:"manipulate"})," the DOM. You can check what is available for the selected element with ",(0,s.jsx)(t.code,{children:"console.dir(selectedElement)"})," in the developer console."]}),"\n",(0,s.jsx)(t.h2,{id:"exploring-the-dom",children:"Exploring the DOM"}),"\n",(0,s.jsxs)(t.p,{children:["Once you select a page element, you can learn more about it, thanks to properties. There is a ",(0,s.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/Element%5D",children:"long list"})," of available features, so let's focus on the ones most useful in marketing automation and real-time personalisation world."]}),"\n",(0,s.jsx)(t.h3,{id:"attributes",children:"attributes"}),"\n",(0,s.jsxs)(t.p,{children:["With ",(0,s.jsx)(t.code,{children:".attributes"})," property you can list all HTML attributes on selected element in a NamedNodeMap. What is more, you can drill down on those details to get specific values:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* <main id=\"content\" class=\"main-content\" role=\"main\">\u2026</main> */\ndocument.querySelector('#content').attributes; // returns a Map with id, class and role\ndocument.querySelector('#content').attributes.class.value; // returns 'main-content'\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can also list the names of all available attributes using ",(0,s.jsx)(t.code,{children:".getAttributesNames()"}),". With ",(0,s.jsx)(t.code,{children:"getAttrubute()"})," method you can pull a value of a specific attribute. Finally, there is a pair of condition checking methods: ",(0,s.jsx)(t.code,{children:"hasAttributes()"})," that checks whether the selected element has any attribute and ",(0,s.jsx)(t.code,{children:"hasAttribute()"})," that tells you if the selected element has a specified attribute."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* <main id=\"content\" class=\"main-content\" role=\"main\">\u2026</main> */\ndocument.querySelector('#content').getAttributesNames(); // returns ['id', 'class', 'role']\ndocument.querySelector('#content').getAttribute('role'); // returns 'main'\ndocument.querySelector('#content').hasAttributes(); // returns true\ndocument.querySelector('#content').hasAttribute('role'); // returns true\n"})}),"\n",(0,s.jsx)(t.p,{children:"Those methods are helpful for non-standard attributes that don't have a dedicated shorthand."}),"\n",(0,s.jsx)(t.h3,{id:"classlist-and-classname",children:"classList and className"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:".classList"})," property lets you directly list all classes assigned to the selected element (in the form of DOMTokenList). It is excellent when you want to ",(0,s.jsx)(t.a,{href:"/docs/js/js-loops",children:"loop"})," through to find a specific class or ",(0,s.jsx)(t.a,{href:"#manipulating-the-dom",children:"manipulate the DOM"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["On the other hand, when you want to do a simple ",(0,s.jsx)(t.a,{href:"/docs/js/js-if-and-switch",children:"check or condition"}),", ",(0,s.jsx)(t.code,{children:".className"})," is a great shorthand returning all classes as a string."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* <div class=\"page-wrapper category-api document-page\">\u2026</div> */\ndocument.querySelector('div.page-wrapper').classList; // returns an object with all the classes, length and value\ndocument.querySelector('div.page-wrapper').classList.contains('document-page'); // returns true\ndocument.querySelector('div.page-wrapper').classList.value; // returns 'page-wrapper category-api document-page'\ndocument.querySelector('div.page-wrapper').className; // shorthand of the previous, returns 'page-wrapper category-api document-page'\n"})}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:".classList"})," property is the bread and butter of page manipulation, as it allows you to add, remove, replace and toggle classes on an element. Think of hiding and displaying elements, changing the styles and other dynamic scenarios. More on that, in the ",(0,s.jsx)(t.a,{href:"#changing-attributes",children:"changing attributes"})," section."]}),"\n",(0,s.jsx)(t.h3,{id:"id-and-tagname",children:"id and tagName"}),"\n",(0,s.jsxs)(t.p,{children:["Similarly to class-related properties, ",(0,s.jsx)(t.code,{children:".id"})," property returns the value of the id attribute and ",(0,s.jsx)(t.code,{children:".tagName"})," property outputs the selected tag's name."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* <main id=\"content\" class=\"main-content\" role=\"main\">\u2026</main> */\ndocument.querySelector('.main-content').id; // returns 'content'\ndocument.querySelector('.main-content').tagName; // returns 'main'\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Those two are less frequently used and mostly have some value when ",(0,s.jsx)(t.a,{href:"#traversing-the-dom",children:"travelling through the DOM"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"innertext-and-innerhtml",children:"innerText and innerHTML"}),"\n",(0,s.jsxs)(t.p,{children:["Another extremely important properties are ",(0,s.jsx)(t.code,{children:".innerText"})," and ",(0,s.jsx)(t.code,{children:".innerHTML"}),". They allow you to look into what is within the selected element."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:".innerText"})," returns a plain text version of element content (including all child tags). Think copy-pasting fragment of the page into a chat."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Example output for the header of this section"',children:"document.querySelector('#innertext-and-innerhtml').innerText;\n// returns \".innerText and .innerHTML\"\n"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:".innerHTML"}),", on the other hand, will return a full-blown HTML code of the selected element (including all child tags within). However, keep in mind that it will be the rendered HTML, not the original HTML (so the version adapted to your screen, your device, your context)."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Example output for the header of this section"',children:'document.querySelector(\'#innertext-and-innerhtml\').innerHTML;\n// returns ".innerText and .innerHTML<a class=\\"hash-link\\" href=\\"#innertext-and-innerhtml\\" title=\\"Direct link to heading\\"></a>"\n'})}),"\n",(0,s.jsxs)(t.p,{children:["While those are already useful for exploration,they shine when you want to ",(0,s.jsx)(t.a,{href:"#changing-attributes",children:"manipulate your page"}),". More on that later."]}),"\n",(0,s.jsx)(t.h3,{id:"hidden-and-style",children:"hidden and style"}),"\n",(0,s.jsxs)(t.p,{children:["Finally, there are landing page must-haves: ",(0,s.jsx)(t.code,{children:".hidden"})," and ",(0,s.jsx)(t.code,{children:".style"}),". Those two properties describe the CSS of the selected element."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:".hidden"})," is straightforward. It returns a boolean telling you whether the element is hidden from the frontend of the page."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.code,{children:".style"})," is much deeper, as it returns an object with all possible ",(0,s.jsx)(t.strong,{children:"inline"})," CSS declarations for the element. You can then drill down to return a value of a specific declaration."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Example output for header of this section"',children:"document.querySelector('#hidden-and-style').hidden; // returns false\ndocument.querySelector('#hidden-and-style').style.display; // returns ''\n"})}),"\n",(0,s.jsxs)(t.p,{children:["As with properties mentioned previously, ",(0,s.jsx)(t.code,{children:".style"})," and ",(0,s.jsx)(t.code,{children:".hidden"})," truly shine when ",(0,s.jsx)(t.a,{href:"#changing-attributes",children:"manipulating the DOM"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"traversing-the-dom",children:"Traversing the DOM"}),"\n",(0,s.jsx)(t.p,{children:"Think about the DOM as a complex hierarchy of elements. When you select a specific element, it is located somewhere within that hierarchy. And with the help of the properties, you can learn more about structure of that web and travel through it."}),"\n",(0,s.jsx)(t.p,{children:"Before jumping to the how-to guide, let's first settle the DOM hierarchy naming convention."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-html",metastring:'title="HTML snippet"',children:'<article class="main-page-content">\n <h1>Main Header</h1>\n <div>\n <p>\n <strong>Example paragraph</strong> with some written content and a <a href="https://mateuszdabrowski.pl">link</a>.\n </p>\n <p>\n Yet another paragraph of this article.\n </p>\n </div>\n</article>\n'})}),"\n",(0,s.jsxs)(t.p,{children:["Let's select the ",(0,s.jsx)(t.code,{children:"div"})," tag from the above structure using:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div'); // selects <div>\n"})}),"\n",(0,s.jsx)(t.p,{children:"There are three relationships between the selected element and the rest of the code above:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["The selected ",(0,s.jsx)(t.code,{children:"div"})," tag is enclosed within ",(0,s.jsx)(t.code,{children:'<article class="main-page-content">'}),". The tag higher in the DOM hierarchy is called a ",(0,s.jsx)(t.strong,{children:"parent"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The selected ",(0,s.jsx)(t.code,{children:"div"})," tag is not alone within the ",(0,s.jsx)(t.code,{children:'<article class="main-page-content">'})," parent tag. There is also ",(0,s.jsx)(t.code,{children:"h1"}),". The tags at the same level of the DOM hierarchy are called ",(0,s.jsx)(t.strong,{children:"siblings"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The selected ",(0,s.jsx)(t.code,{children:"div"})," tag has two ",(0,s.jsx)(t.code,{children:"p"})," tags within itself. The tags lower in the DOM hierarchy are called ",(0,s.jsx)(t.strong,{children:"children"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["To sum up, our ",(0,s.jsx)(t.code,{children:"div"})," tag has an ",(0,s.jsx)(t.code,{children:"article"})," as a parent, ",(0,s.jsx)(t.code,{children:"h1"})," as a sibling, and two ",(0,s.jsx)(t.code,{children:"p"})," as children. Then, the first ",(0,s.jsx)(t.code,{children:"p"})," has two inline children: ",(0,s.jsx)(t.code,{children:"strong"})," and ",(0,s.jsx)(t.code,{children:"a"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Let's leverage all this information."}),"\n",(0,s.jsx)(t.h3,{id:"parentelement",children:"parentElement"}),"\n",(0,s.jsxs)(t.p,{children:["If you want to go up in the hierarchy from your selection, you can just use ",(0,s.jsx)(t.code,{children:".parentElement"})," (or ",(0,s.jsx)(t.code,{children:".parentNode"}),", which is nearly the same now)."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').parentElement; // selects <article class=\"main-page-content\">\n"})}),"\n",(0,s.jsx)(t.h3,{id:"previouselementsibling-and-nextelementsibling",children:"previousElementSibling and nextElementSibling"}),"\n",(0,s.jsxs)(t.p,{children:["For traversing the sibling elements, you can use either ",(0,s.jsx)(t.code,{children:".previousElementSibling"})," or ",(0,s.jsx)(t.code,{children:".nextElementSibling"})," to jump to the previous or next element. If there is no such element, you will get ",(0,s.jsx)(t.code,{children:"null"}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').previousElementSibling; // selects <h1>\ndocument.querySelector('article.main-page-content > div').nextElementSibling; // returns null\n"})}),"\n",(0,s.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,s.jsxs)(t.p,{children:["You can also encounter similar properties: ",(0,s.jsx)(t.code,{children:".previousSibling"})," and ",(0,s.jsx)(t.code,{children:".nextSibling"}),". That pair is operating on HTML Nodes and will return more then you might expect. For example, whitespace between the elements (",(0,s.jsx)(t.code,{children:"#text"})," node) or HTML comments. Unless you are sure you need it, ",(0,s.jsx)(t.code,{children:".previousElementSibling"})," or ",(0,s.jsx)(t.code,{children:".nextElementSibling"})," are better choice."]})}),"\n",(0,s.jsx)(t.h3,{id:"all-things-children",children:"All things children"}),"\n",(0,s.jsxs)(t.p,{children:["When you want to go down in the hierarchy, you can use ",(0,s.jsx)(t.code,{children:".children"})," to get a collection of HTML elements."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').children; // returns collection of two <p> tags\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can either ",(0,s.jsx)(t.a,{href:"/docs/js/js-loops",children:"loop"})," through those or pick a specific child with an index. Helpful here can be ",(0,s.jsx)(t.code,{children:".childElementCount"}),", which will show you the number of elements selected."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').childElementCount; // returns 2\n"})}),"\n",(0,s.jsxs)(t.p,{children:["The nice thing is that for the most popular selections - the first and last child - you can use a clean shorthands ",(0,s.jsx)(t.code,{children:".firstElementChild"})," and ",(0,s.jsx)(t.code,{children:".lastElementChild"}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* \u274c Unnecessary complex selection of the first and last child */\ndocument.querySelector('article.main-page-content > div').children[0]; // selects first child\ndocument.querySelector('article.main-page-content > div').children[document.querySelector('article.main-page-content > div').childElementCount - 1]; // selects last child\n\n/* \u2705 Optimised and readable selection of first and last child */\ndocument.querySelector('article.main-page-content > div').firstElementChild; // selects first child\ndocument.querySelector('article.main-page-content > div').lastElementChild; // selects last child\n"})}),"\n",(0,s.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,s.jsxs)(t.p,{children:["Like with sibling selection, here also you have set of similar properties - ",(0,s.jsx)(t.code,{children:".childNodes"}),", ",(0,s.jsx)(t.code,{children:".firstChild"}),", ",(0,s.jsx)(t.code,{children:".lastChild"}),". All three work on Nodes, so those will pick up not only elements but also text (whitespace) and comments. Unless you are sure you need it, ",(0,s.jsx)(t.code,{children:".children"}),", ",(0,s.jsx)(t.code,{children:".firstElementChild"})," and ",(0,s.jsx)(t.code,{children:".lastElementChild"})," are better choice."]})}),"\n",(0,s.jsx)(t.h3,{id:"the-power-of-dom-traversing",children:"The power of DOM traversing"}),"\n",(0,s.jsxs)(t.p,{children:["Ok, we know how to traverse the DOM, but why should we? Because sometimes you have to deal with a dynamic DOM and with traversing you can still leverage all ",(0,s.jsx)(t.a,{href:"#exploring-the-dom",children:"exploratory properties"}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').parentElement.className; // returns \"main-page-content\"\n"})}),"\n",(0,s.jsx)(t.p,{children:"You can also mix and match the traversing properties to jump multiple hierarchy levels."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').firstElementChild.lastElementChild.href // returns \"https://mateuszdabrowski.pl/\"\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Finally, you are not limited by the need to know the exact path from the currently selected element to another one ",(0,s.jsx)(t.strong,{children:"higher in the hierarchy"})," that you are interested in. You can leverage the ",(0,s.jsx)(t.code,{children:".closest"})," method to find it using the same CCS3 selection as with ",(0,s.jsx)(t.a,{href:"#accessing-the-dom",children:(0,s.jsx)(t.code,{children:"querySelector"})}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').closest('.main-page-content'); // selects <article class=\"main-page-content\">\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Remember that ",(0,s.jsx)(t.code,{children:".closest"})," can return the initially selected element if it fulfils the new selection. If you want to stop it from happening, you can just chain it after ",(0,s.jsx)(t.a,{href:"#parentElement",children:(0,s.jsx)(t.code,{children:".parentElement"})}),"."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('article.main-page-content > div').parentElement.closest('.main-page-content'); // selects <article class=\"main-page-content\">\n"})}),"\n",(0,s.jsx)(t.h2,{id:"manipulating-the-dom",children:"Manipulating the DOM"}),"\n",(0,s.jsx)(t.p,{children:"Everything discussed up to this point is nice but not breathtaking. Time to change it and jump straight into the real reason it is worth learning about the DOM. The ins and outs of manipulating it with JavaScript methods."}),"\n",(0,s.jsx)(t.h3,{id:"addeventlistener",children:"addEventListener"}),"\n",(0,s.jsxs)(t.p,{children:["One of the critical manipulation methods for marketing automation is adding events with ",(0,s.jsx)(t.code,{children:".addEventListener"}),". This method lets you perform some actions (a function) given a specific behaviour (event)."]}),"\n",(0,s.jsx)(t.p,{children:"In simpler words, you can tell the browser to execute a JavaScript function when the user clicks a button. Or moves the mouse out of the page to close it or change a tab. Or perform any event you configure. You do it by attaching an Event Listener to a document, window or selected element:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:'title="Example of attaching Click-based Event Listener on a <button> that logs click details to console"',children:"document.querySelector('button').addEventListener('click', event => console.log(event));\n"})}),"\n",(0,s.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,s.jsxs)(t.p,{children:["Using anonymous functions, like in the example above, is ",(0,s.jsx)(t.strong,{children:"not recommended"}),". Each anonymous function is unique for JavaScript, even if it has the same code within. This leads to two issues:"]}),(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"You may add multiple instances of the same anonymous function to a single element (no deduplication possible). It will lead to a negative performance impact and the function being triggered numerous times per single event."}),"\n",(0,s.jsx)(t.li,{children:"You cannot remove anonymous Event Listener."}),"\n"]}),(0,s.jsx)(t.p,{children:"In real-world scenarios, use named functions (unless you are absolutely sure what you are doing and have booked some time for debugging in the future):"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"const logEvent = event => console.log(event);\ndocument.querySelector('button').addEventListener('click', logEvent);\n"})}),(0,s.jsx)(t.p,{children:"It will allow you to easily remove Event Listener (by referencing the target, event type and named function) once it is no longer needed:"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"document.querySelector('button').removeEventListener('click', logEvent);\n"})})]}),"\n",(0,s.jsx)(t.h4,{id:"event-types",children:"Event types"}),"\n",(0,s.jsx)(t.p,{children:"There are over a hundred available events that you can use, so I will focus only on the most useful for our Marketing Automation needs."}),"\n",(0,s.jsx)(t.h5,{id:"click",children:"click"}),"\n",(0,s.jsxs)(t.p,{children:["Capturing a ",(0,s.jsx)(t.code,{children:"click"})," event is probably the most popular event in the world wide web. Technically, it's a shorthand for two separate events (that you can listen for separately) - ",(0,s.jsx)(t.code,{children:"mousedown"})," and ",(0,s.jsx)(t.code,{children:"mouseup"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"The interesting tidbit is that the event captures the number of consecutive clicks happening in short timeframe, so you can distinguish single, double, tripleclicks:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"const logClickCount = event => console.log(`Click count: ${event.detail}`);\ndocument.querySelector('button').addEventListener('click', logClickCount);\n"})}),"\n",(0,s.jsx)(t.h5,{id:"submit",children:"submit"}),"\n",(0,s.jsxs)(t.p,{children:["Another marketing must-have is the ",(0,s.jsx)(t.code,{children:"submit"})," event. It is triggered on the valid submission of a form."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"const logSubmissionTimestamp = event => console.log(`Submission timestamp: ${event.timeStamp}`); // miliseconds since the page/script load\ndocument.querySelector('form').addEventListener('submit', logSubmissionTimestamp);\n"})}),"\n",(0,s.jsxs)(t.p,{children:["The key feature with submit events is possibility to stop the default form processing with ",(0,s.jsx)(t.code,{children:".preventDefault"})," method:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:"{3}",children:"document.querySelector('form').addEventListener('submit',\n event => {\n event.preventDefault();\n const formData = Object.fromEntries(new FormData(event.target));\n console.log(formData);\n }\n);\n"})}),"\n",(0,s.jsxs)(t.p,{children:["This approach allows you to implement custom validation or data processing while benefiting from the HTML5 form backbone. Perfect when you want to push your form submission to a ",(0,s.jsx)(t.a,{href:"/docs/config/sfmc-code-resource#good-form-backend-with-code-resource",children:"Code Resource"})," asynchronously."]}),"\n",(0,s.jsx)(t.h5,{id:"focus--blur",children:"focus & blur"}),"\n",(0,s.jsxs)(t.p,{children:["Other events that are very useful for forms (and more) are ",(0,s.jsx)(t.code,{children:"focus"})," and ",(0,s.jsx)(t.code,{children:"blur"}),". The first one is triggered when an element gets into focus; the other on the opposite. What does it mean? Let's say you have a form. When the user clicks on the input, that element gets focused. When he clicks on something else (another input, submit button, or just anywhere else), it triggers a ",(0,s.jsx)(t.code,{children:"blur"})," event."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"const logInputValue = event => console.log(event.target.value);\ndocument.querySelector('input[type=\"email\"]').addEventListener('blur', logInputValue);\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Using ",(0,s.jsx)(t.code,{children:"blur"})," events can be great for triggering asynchronous checks on the provided data. For example, when the user finishes writing the email and goes to the following field, the Event Listener can then make an asynchronous call to the ",(0,s.jsx)(t.a,{href:"/docs/config/sfmc-code-resource#good-form-backend-with-code-resource",children:"Code Resource backend"}),". It will look up whether the email is used by an existing contact or new record needs to be created in Salesforce Sales Cloud to generate the Contact ID and return it back to the form's hidden field."]}),"\n",(0,s.jsx)(t.h5,{id:"mouseenter--mouseleave",children:"mouseenter & mouseleave"}),"\n",(0,s.jsxs)(t.p,{children:["With ",(0,s.jsx)(t.code,{children:"mouseenter"})," and ",(0,s.jsx)(t.code,{children:"mouseleave"}),", you can trigger events when the user moves the pointer in or out of a specific element. The caveat - there needs to be a pointer, so the solution is not working for touchscreen users."]}),"\n",(0,s.jsx)(t.p,{children:"Still, it can be used to capture which part of the website is getting hovered over with a mouse (and for how long) or to create those annoying pop-ups trying to guilt-trip you into staying on the page:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"const onLeavePopUp = alert('Sad Alert');\ndocument.documentElement.addEventListener('mouseleave', onLeavePopUp);\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Those are just a few key events that you can capture with ",(0,s.jsx)(t.code,{children:".addEventListener"}),". There is much more available, like ",(0,s.jsx)(t.code,{children:"keydown"})," & ",(0,s.jsx)(t.code,{children:"keyup"}),", ",(0,s.jsx)(t.code,{children:"select"}),", ",(0,s.jsx)(t.code,{children:"scroll"}),", ",(0,s.jsx)(t.code,{children:"paste"}),", ",(0,s.jsx)(t.code,{children:"error"}),". Check out the complete list on the ",(0,s.jsx)(t.a,{href:"https://developer.mozilla.org/en-US/docs/Web/Events#event_listing",children:"MDN"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"changing-attributes",children:"Changing attributes"}),"\n",(0,s.jsx)(t.p,{children:"Events are fantastic, but there is something even better. Attribute manipulation. With it, you can change your website in real-time according to your logic. How? By going one step further with what you have already learned."}),"\n",(0,s.jsxs)(t.p,{children:["For example, you can add, remove and toggle (add if it wasn't there or remove if it was) CSS classes with ",(0,s.jsx)(t.a,{href:"#classlist-and-classname",children:(0,s.jsx)(t.code,{children:".classlist"})}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* <div class=\"page-wrapper category-api document-page\">\u2026</div> */\ndocument.querySelector('div.page-wrapper').classList.remove('category-api'); // removes .categori-api\ndocument.querySelector('div.page-wrapper').classList.add('category-api'); // adds .categori-api back\ndocument.querySelector('div.page-wrapper').classList.toggle('category-api'); // removes .categori-api as it is on the element\n"})}),"\n",(0,s.jsxs)(t.p,{children:["And just like you could get custom ",(0,s.jsx)(t.a,{href:"#attributes",children:"attributes"}),", you can also create them with ",(0,s.jsx)(t.code,{children:".setAttribute"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:'/* <main id="content" class="main-content" role="main">\u2026</main> */\ndocument.querySelector(\'#content\').setAttribute(\'data-columns\', \'3\'); // adds data-columns="3" attribute\n'})}),"\n",(0,s.jsx)(t.p,{children:"Probably the most useful manipulation feature is possibility to alter the properties:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"/* <input type=\"checkbox\" id=\"isOptedIn\" name=\"isOptedIn\"> */\ndocument.querySelector('#isOptedIn').required; // returns false, as checkbox is not required\ndocument.querySelector('#isOptedIn').required = true; // makes the checkbox required\n\ndocument.querySelector('#isOptedIn').checked; // returns false, as checkbox is not checked\ndocument.querySelector('#isOptedIn').checked = true; // checks the checkbox\n\ndocument.querySelector('#isOptedIn').hidden; // returns false, as checkbox is not hidden\ndocument.querySelector('#isOptedIn').hidden = true; // hides the checkbox\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You can do the same with ",(0,s.jsxs)(t.a,{href:"#innerText-and-innerHTML",children:[(0,s.jsx)(t.code,{children:".innerText"}),"/",(0,s.jsx)(t.code,{children:".innerHTML"})]}),", ",(0,s.jsx)(t.a,{href:"#hidden-and-style",children:(0,s.jsx)(t.code,{children:".style.display"})})," and more."]}),"\n",(0,s.jsxs)(t.p,{children:["Finally, you can mix DOM manipulation methods and change attributes in response to specific ",(0,s.jsx)(t.a,{href:"#event-types",children:"events"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",metastring:"{5}",children:"document.querySelector('form').addEventListener('submit',\n event => {\n event.preventDefault();\n const formData = Object.fromEntries(new FormData(event.target));\n event.target.innerText = 'Submitted!'; // Replaces whole form with \"Submitted!\"\n }\n);\n"})}),"\n",(0,s.jsx)(t.p,{children:"Document Object Model can be used to adapt your website in real-time, fill in hidden fields with backend calls or even automate your processes through developer console. You are only limited by your imagination (and website performance)."}),"\n",(0,s.jsx)(t.h2,{id:"marketing-cloud-use-cases",children:"Marketing Cloud Use Cases"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"/docs/js/snippets/tailor-with-data",children:"Tailor with Data"})," - leverage DOM manipulation and personalisation strings to create dynamic experiences for your customers."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"/docs/js/snippets/export-import-document-sfmc-roles",children:"Export, Import & Document SFMC Roles"})," - Backup, clone and move cross-account the Salesforce Marketing Cloud roles. In seconds, thanks to DOM."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>r});n(7294);const s="leadText_qzwo";var i=n(5893);const r=e=>{let{content:t}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("p",{id:s,children:t})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var s=n(7294);const i={},r=s.createContext(i);function l(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecd0154e.f2e5d890.js b/assets/js/ecd0154e.f2e5d890.js deleted file mode 100644 index b20574a79..000000000 --- a/assets/js/ecd0154e.f2e5d890.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1654],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),c=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,s=e.parentName,p=r(e,["components","mdxType","originalType","parentName"]),m=c(n),u=i,h=m["".concat(s,".").concat(u)]||m[u]||d[u]||l;return n?a.createElement(h,o(o({ref:t},p),{},{components:n})):a.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=u;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[m]="string"==typeof e?e:i,o[1]=r;for(var c=2;c<l;c++)o[c]=n[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>l});var a=n(7294);const i="leadText_qzwo",l=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:i},t))}},8223:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),i=(n(7294),n(4137)),l=n(1872);const o={id:"js-dom",title:"JS Document Object Model",sidebar_label:"DOM",description:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",image:"img/og/og-image-js-dom.png",tags:["JavaScript","Cloud Page","Personalisation"]},r=void 0,s={unversionedId:"js/js-dom",id:"js/js-dom",title:"JS Document Object Model",description:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",source:"@site/docs/js/js-dom.mdx",sourceDirName:"js",slug:"/js/js-dom",permalink:"/docs/js/js-dom",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/js/js-dom.mdx",tags:[{label:"JavaScript",permalink:"/docs/tags/java-script"},{label:"Cloud Page",permalink:"/docs/tags/cloud-page"},{label:"Personalisation",permalink:"/docs/tags/personalisation"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"js-dom",title:"JS Document Object Model",sidebar_label:"DOM",description:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",image:"img/og/og-image-js-dom.png",tags:["JavaScript","Cloud Page","Personalisation"]},sidebar:"docs",previous:{title:"Loops",permalink:"/docs/js/js-loops"},next:{title:"AMPScript",permalink:"/docs/category/ampscript"}},c={},p=[{value:"What is Document Object Model?",id:"what-is-document-object-model",level:2},{value:"Accessing the DOM",id:"accessing-the-dom",level:2},{value:"Should you use getElement or querySelector?",id:"should-you-use-getelement-or-queryselector",level:3},{value:"Exploring the DOM",id:"exploring-the-dom",level:2},{value:"attributes",id:"attributes",level:3},{value:"classList and className",id:"classlist-and-classname",level:3},{value:"id and tagName",id:"id-and-tagname",level:3},{value:"innerText and innerHTML",id:"innertext-and-innerhtml",level:3},{value:"hidden and style",id:"hidden-and-style",level:3},{value:"Traversing the DOM",id:"traversing-the-dom",level:2},{value:"parentElement",id:"parentelement",level:3},{value:"previousElementSibling and nextElementSibling",id:"previouselementsibling-and-nextelementsibling",level:3},{value:"All things children",id:"all-things-children",level:3},{value:"The power of DOM traversing",id:"the-power-of-dom-traversing",level:3},{value:"Manipulating the DOM",id:"manipulating-the-dom",level:2},{value:"addEventListener",id:"addeventlistener",level:3},{value:"Event types",id:"event-types",level:4},{value:"click",id:"click",level:5},{value:"submit",id:"submit",level:5},{value:"focus & blur",id:"focus--blur",level:5},{value:"mouseenter & mouseleave",id:"mouseenter--mouseleave",level:5},{value:"Changing attributes",id:"changing-attributes",level:3},{value:"Marketing Cloud Use Cases",id:"marketing-cloud-use-cases",level:2}],m={toc:p},d="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(d,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(l.m,{content:"Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.",mdxType:"LeadText"}),(0,i.kt)("h2",{id:"what-is-document-object-model"},"What is Document Object Model?"),(0,i.kt)("p",null,"The Document Object Model (DOM) represents the structure of a web document and serves as its programming interface. In simpler words, it lets JavaScript talk with the HTML of the page. And that is huge, especially in the Marketing Automation world."),(0,i.kt)("p",null,"Why? Because it lets you manipulate your website in many ways - visible and not. Dynamic forms adapting to user actions, pages changing in real-time and enhanced data capture. All that (and so much more) is possible thanks to DOM access. So let's dive into details."),(0,i.kt)("h2",{id:"accessing-the-dom"},"Accessing the DOM"),(0,i.kt)("p",null,"To start working with Document Object Model in JavaScript, you need to use one of the special objects - ",(0,i.kt)("inlineCode",{parentName:"p"},"window")," (browser tab) or ",(0,i.kt)("inlineCode",{parentName:"p"},"document")," (page within that tab). Each of those objects offers many methods that let you interact with a webpage."),(0,i.kt)("p",null,"JavaScript lets you capture specific parts of your website and make them accessible for all your scripting needs with the help of ",(0,i.kt)("inlineCode",{parentName:"p"},"document")," object methods:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"getElementById"),": returns an element with matching id attribute (for example, elemnt with ",(0,i.kt)("inlineCode",{parentName:"li"},'id="emailAddressField"')," using ",(0,i.kt)("inlineCode",{parentName:"li"},"document.getElementById('emailAddressField')"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"getElementsByTagName"),": returns a collection of matching HTML tags (for example, all ",(0,i.kt)("inlineCode",{parentName:"li"},"<p>")," tags using ",(0,i.kt)("inlineCode",{parentName:"li"},"document.getElementByTagName('p')"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"getElementsByName"),": returns a collection of elements with matching name attribute (for example, all inputs with ",(0,i.kt)("inlineCode",{parentName:"li"},'name="email"')," using ",(0,i.kt)("inlineCode",{parentName:"li"},"document.getElementByName('email')"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"getElementsByClassName"),": returns a collection of elements with matching class attribute (for example, all elements with ",(0,i.kt)("inlineCode",{parentName:"li"},'class="hiddenContent"')," using ",(0,i.kt)("inlineCode",{parentName:"li"},"document.getElementByClassName('hiddenContent')"),")"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"querySelector"),": returns an element with a matching CSS3 selector (for example, ",(0,i.kt)("inlineCode",{parentName:"li"},"<h2>")," element that is within ",(0,i.kt)("inlineCode",{parentName:"li"},'<p class="hiddenContent">')," using ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector(p.hiddenContent h2')")," - notice the ",(0,i.kt)("inlineCode",{parentName:"li"},".")," prefix for a class). If there are multiple matching elements - it will return the first one."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"querySelectorAll"),": returns a collection of elements matching CSS3 selector (for example, all ",(0,i.kt)("inlineCode",{parentName:"li"},"<tr>")," elements that are within elements with ",(0,i.kt)("inlineCode",{parentName:"li"},'class=".DataCell"')," that are within an element with ",(0,i.kt)("inlineCode",{parentName:"li"},'id="attributes-repeater"')," using ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelectorAll('#attributes-repeater .DataCell tr')"),")")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"querySelector")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"querySelectorAll")," allow you to select elements using the power of CSS3. It means that you can go really specific with the proper syntax."),(0,i.kt)("p",{parentName:"admonition"},"You can select:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"Tag by its name: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('body')")),(0,i.kt)("li",{parentName:"ol"},"Id with ",(0,i.kt)("inlineCode",{parentName:"li"},"#")," prefix: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('#idName')")),(0,i.kt)("li",{parentName:"ol"},"Class with ",(0,i.kt)("inlineCode",{parentName:"li"},".")," prefix: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('.className')")),(0,i.kt)("li",{parentName:"ol"},"Tag with specific class by chaining: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('div.className')")),(0,i.kt)("li",{parentName:"ol"},"Element with two classes: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('.className1.className2')")," (notice lack of space between classes)"),(0,i.kt)("li",{parentName:"ol"},"Element that is direct child of another element: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('div > h2')")," (notice the ",(0,i.kt)("inlineCode",{parentName:"li"},">")," symbol between tags)"),(0,i.kt)("li",{parentName:"ol"},"Element that is any child another element: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('div h2')")),(0,i.kt)("li",{parentName:"ol"},"Element that is any sibling (has the same parent): ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('p.className ~ h2')")," (this will capture ",(0,i.kt)("inlineCode",{parentName:"li"},"h2")," that is under the same parent as ",(0,i.kt)("inlineCode",{parentName:"li"},"p.className"),")"),(0,i.kt)("li",{parentName:"ol"},"Element that is adjecent sibling (has the same parent): ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('p.className + h2')")," (this will capture ",(0,i.kt)("inlineCode",{parentName:"li"},"h2")," that is under the same parent as ",(0,i.kt)("inlineCode",{parentName:"li"},"p.className")," and after that paragraph)"),(0,i.kt)("li",{parentName:"ol"},"Element with specific attribute: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('[href]')")),(0,i.kt)("li",{parentName:"ol"},"Element with specific value of attribute: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('input[type=\"checkbox\"]')")),(0,i.kt)("li",{parentName:"ol"},"One of the listed elements: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('ul, ol')")),(0,i.kt)("li",{parentName:"ol"},"All of the listed elements: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelectorAll('ul, ol')")),(0,i.kt)("li",{parentName:"ol"},"Elements targetet by ",(0,i.kt)("a",{parentName:"li",href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes"},"pseudo-class"),": ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelectorAll('a:visited')")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("a",{parentName:"li",href:"https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements"},"Pseudo-element"),": ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelectorAll('h1::first-letter')")),(0,i.kt)("li",{parentName:"ol"},"Element with negated selection: ",(0,i.kt)("inlineCode",{parentName:"li"},"document.querySelector('.className:not(div)')"))),(0,i.kt)("p",{parentName:"admonition"},"Sky is the limit, especially as you can chain all of the above into super query:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('#content > article > div:nth-child(20) a:nth-child(1) > code');\n")),(0,i.kt)("p",{parentName:"admonition"},"However, whenever possible, optimise. Either by finding a better way to select the element or by adding an easily selectable attribute to that element in the page HTML.")),(0,i.kt)("p",null,"As you can see, there are many options you can leverage."),(0,i.kt)("h3",{id:"should-you-use-getelement-or-queryselector"},"Should you use getElement or querySelector?"),(0,i.kt)("p",null,"It depends on the purpose. The rule of thumb is that if one of the ",(0,i.kt)("inlineCode",{parentName:"p"},"getElement")," selectors can do the job, it's a better choice performance-wise (the longer HTML, the bigger difference). However, for complex selections, the newer ",(0,i.kt)("inlineCode",{parentName:"p"},"querySelector")," family might be better or the only possible choice."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Good use cases for the querySelector family"',title:'"Good',use:!0,cases:!0,for:!0,the:!0,querySelector:!0,'family"':!0},"// Instead of using three getElement selectors (that wouldn't even work in this example, more on that in the next paragraph)\ndocument.getElementById('attributes-repeater').getElementsByClassName('DataCell').getElementsByTagName('tr');\n// you should use a single querySelectorAll selector\ndocument.querySelectorAll('#attributes-repeater .DataCell tr');\n\n// There are also cases where querySelector is the only choice\ndocument.querySelectorAll('input[type=\"checkbox\"]');\n")),(0,i.kt)("p",null,"As always, the devil lies in the details. While chained ",(0,i.kt)("inlineCode",{parentName:"p"},"getElement")," selectors will have better performance than clean ",(0,i.kt)("inlineCode",{parentName:"p"},"querySelector"),", there are three issues with the former:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Readability: after two or three chained selectors, the ",(0,i.kt)("inlineCode",{parentName:"li"},"getElement")," chain gets really hard to read and debug; the natural CSS3 style of ",(0,i.kt)("inlineCode",{parentName:"li"},"querySelector")," is straightforward."),(0,i.kt)("li",{parentName:"ol"},"Flexibility: you can only chain ",(0,i.kt)("inlineCode",{parentName:"li"},"getElements")," on single element. Refering to the previous code sample, while the ",(0,i.kt)("inlineCode",{parentName:"li"},".getElementsByClassName('DataCell')")," called on single outcome of ",(0,i.kt)("inlineCode",{parentName:"li"},".getElementById('attributes-repeater')")," works, the collection it will return would crash the ",(0,i.kt)("inlineCode",{parentName:"li"},".getElementsByTagName('tr')")," as the chaining works only on single element scope."),(0,i.kt)("li",{parentName:"ol"},"Loopability: outcomes of ",(0,i.kt)("inlineCode",{parentName:"li"},"getElements")," selection cannot be looped using ",(0,i.kt)("a",{parentName:"li",href:"/docs/js/js-loops#foreach"},(0,i.kt)("inlineCode",{parentName:"a"},"forEach()")),".")),(0,i.kt)("p",null,"My approach is to use the more flexible and readable ",(0,i.kt)("inlineCode",{parentName:"p"},"querySelector")," whenever performance is not a dealbreaker and switch where possible to the ",(0,i.kt)("inlineCode",{parentName:"p"},"getElement")," toolset for use cases where the performance is crucial."),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can assign your DOM selection to a variable. It allows you to reuse it in multiple places of your script and lets you limit the scope of the selection."),(0,i.kt)("p",{parentName:"admonition"},"You can do the latter by replacing the ",(0,i.kt)("inlineCode",{parentName:"p"},"document")," object with your variable - it will look for matching DOM elements only within the outcome of the previous selection."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const form = document.querySelector('form');\nconst divsInForm = form.querySelectorAll('div.legalNotice'); // Returns only div tags with legalNotice class that are within your form\n")),(0,i.kt)("p",{parentName:"admonition"},"It works like chaining selectors and with the same limitation - you can chain only if the previous outcome is a single element."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u2705 Chain from a single element to a collection - same outcome as previous code snippet */\ndocument.querySelector('form').querySelectorAll('div.legalNotice');\n\n/* \u274c Chain from a collection to a collection - will throw TypeError */\ndocument.querySelectorAll('form').querySelectorAll('div.legalNotice');\n\n/* \u2705 Chain from a single element (thanks to index) to a collection */\ndocument.querySelectorAll('form')[0].querySelectorAll('div.legalNotice');\n\n/* Of course, in real scenario, you should use a compound selector for the same result */\ndocument.querySelectorAll('form div.legalNotice');\n"))),(0,i.kt)("p",null,"Selecting elements is just the beginning. Once you pick them, you can ",(0,i.kt)("a",{parentName:"p",href:"#exploring-the-dom"},"explore"),", ",(0,i.kt)("a",{parentName:"p",href:"#traversing-the-dom"},"traverse")," and ",(0,i.kt)("a",{parentName:"p",href:"#manipulating-the-dom"},"manipulate")," the DOM. You can check what is available for the selected element with ",(0,i.kt)("inlineCode",{parentName:"p"},"console.dir(selectedElement)")," in the developer console."),(0,i.kt)("h2",{id:"exploring-the-dom"},"Exploring the DOM"),(0,i.kt)("p",null,"Once you select a page element, you can learn more about it, thanks to properties. There is a ",(0,i.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/API/Element%5D"},"long list")," of available features, so let's focus on the ones most useful in marketing automation and real-time personalisation world."),(0,i.kt)("h3",{id:"attributes"},"attributes"),(0,i.kt)("p",null,"With ",(0,i.kt)("inlineCode",{parentName:"p"},".attributes")," property you can list all HTML attributes on selected element in a NamedNodeMap. What is more, you can drill down on those details to get specific values:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* <main id=\"content\" class=\"main-content\" role=\"main\">\u2026</main> */\ndocument.querySelector('#content').attributes; // returns a Map with id, class and role\ndocument.querySelector('#content').attributes.class.value; // returns 'main-content'\n")),(0,i.kt)("p",null,"You can also list the names of all available attributes using ",(0,i.kt)("inlineCode",{parentName:"p"},".getAttributesNames()"),". With ",(0,i.kt)("inlineCode",{parentName:"p"},"getAttrubute()")," method you can pull a value of a specific attribute. Finally, there is a pair of condition checking methods: ",(0,i.kt)("inlineCode",{parentName:"p"},"hasAttributes()")," that checks whether the selected element has any attribute and ",(0,i.kt)("inlineCode",{parentName:"p"},"hasAttribute()")," that tells you if the selected element has a specified attribute."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* <main id=\"content\" class=\"main-content\" role=\"main\">\u2026</main> */\ndocument.querySelector('#content').getAttributesNames(); // returns ['id', 'class', 'role']\ndocument.querySelector('#content').getAttribute('role'); // returns 'main'\ndocument.querySelector('#content').hasAttributes(); // returns true\ndocument.querySelector('#content').hasAttribute('role'); // returns true\n")),(0,i.kt)("p",null,"Those methods are helpful for non-standard attributes that don't have a dedicated shorthand."),(0,i.kt)("h3",{id:"classlist-and-classname"},"classList and className"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},".classList")," property lets you directly list all classes assigned to the selected element (in the form of DOMTokenList). It is excellent when you want to ",(0,i.kt)("a",{parentName:"p",href:"/docs/js/js-loops"},"loop")," through to find a specific class or ",(0,i.kt)("a",{parentName:"p",href:"#manipulating-the-dom"},"manipulate the DOM"),"."),(0,i.kt)("p",null,"On the other hand, when you want to do a simple ",(0,i.kt)("a",{parentName:"p",href:"/docs/js/js-if-and-switch"},"check or condition"),", ",(0,i.kt)("inlineCode",{parentName:"p"},".className")," is a great shorthand returning all classes as a string."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* <div class=\"page-wrapper category-api document-page\">\u2026</div> */\ndocument.querySelector('div.page-wrapper').classList; // returns an object with all the classes, length and value\ndocument.querySelector('div.page-wrapper').classList.contains('document-page'); // returns true\ndocument.querySelector('div.page-wrapper').classList.value; // returns 'page-wrapper category-api document-page'\ndocument.querySelector('div.page-wrapper').className; // shorthand of the previous, returns 'page-wrapper category-api document-page'\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},".classList")," property is the bread and butter of page manipulation, as it allows you to add, remove, replace and toggle classes on an element. Think of hiding and displaying elements, changing the styles and other dynamic scenarios. More on that, in the ",(0,i.kt)("a",{parentName:"p",href:"#changing-attributes"},"changing attributes")," section."),(0,i.kt)("h3",{id:"id-and-tagname"},"id and tagName"),(0,i.kt)("p",null,"Similarly to class-related properties, ",(0,i.kt)("inlineCode",{parentName:"p"},".id")," property returns the value of the id attribute and ",(0,i.kt)("inlineCode",{parentName:"p"},".tagName")," property outputs the selected tag's name."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* <main id=\"content\" class=\"main-content\" role=\"main\">\u2026</main> */\ndocument.querySelector('.main-content').id; // returns 'content'\ndocument.querySelector('.main-content').tagName; // returns 'main'\n")),(0,i.kt)("p",null,"Those two are less frequently used and mostly have some value when ",(0,i.kt)("a",{parentName:"p",href:"#traversing-the-dom"},"travelling through the DOM"),"."),(0,i.kt)("h3",{id:"innertext-and-innerhtml"},"innerText and innerHTML"),(0,i.kt)("p",null,"Another extremely important properties are ",(0,i.kt)("inlineCode",{parentName:"p"},".innerText")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".innerHTML"),". They allow you to look into what is within the selected element."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},".innerText")," returns a plain text version of element content (including all child tags). Think copy-pasting fragment of the page into a chat."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Example output for the header of this section"',title:'"Example',output:!0,for:!0,the:!0,header:!0,of:!0,this:!0,'section"':!0},"document.querySelector('#innertext-and-innerhtml').innerText;\n// returns \".innerText and .innerHTML\"\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},".innerHTML"),", on the other hand, will return a full-blown HTML code of the selected element (including all child tags within). However, keep in mind that it will be the rendered HTML, not the original HTML (so the version adapted to your screen, your device, your context)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Example output for the header of this section"',title:'"Example',output:!0,for:!0,the:!0,header:!0,of:!0,this:!0,'section"':!0},'document.querySelector(\'#innertext-and-innerhtml\').innerHTML;\n// returns ".innerText and .innerHTML<a class=\\"hash-link\\" href=\\"#innertext-and-innerhtml\\" title=\\"Direct link to heading\\"></a>"\n')),(0,i.kt)("p",null,"While those are already useful for exploration,they shine when you want to ",(0,i.kt)("a",{parentName:"p",href:"#changing-attributes"},"manipulate your page"),". More on that later."),(0,i.kt)("h3",{id:"hidden-and-style"},"hidden and style"),(0,i.kt)("p",null,"Finally, there are landing page must-haves: ",(0,i.kt)("inlineCode",{parentName:"p"},".hidden")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".style"),". Those two properties describe the CSS of the selected element."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},".hidden")," is straightforward. It returns a boolean telling you whether the element is hidden from the frontend of the page."),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},".style")," is much deeper, as it returns an object with all possible ",(0,i.kt)("strong",{parentName:"p"},"inline")," CSS declarations for the element. You can then drill down to return a value of a specific declaration."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Example output for header of this section"',title:'"Example',output:!0,for:!0,header:!0,of:!0,this:!0,'section"':!0},"document.querySelector('#hidden-and-style').hidden; // returns false\ndocument.querySelector('#hidden-and-style').style.display; // returns ''\n")),(0,i.kt)("p",null,"As with properties mentioned previously, ",(0,i.kt)("inlineCode",{parentName:"p"},".style")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".hidden")," truly shine when ",(0,i.kt)("a",{parentName:"p",href:"#changing-attributes"},"manipulating the DOM"),"."),(0,i.kt)("h2",{id:"traversing-the-dom"},"Traversing the DOM"),(0,i.kt)("p",null,"Think about the DOM as a complex hierarchy of elements. When you select a specific element, it is located somewhere within that hierarchy. And with the help of the properties, you can learn more about structure of that web and travel through it."),(0,i.kt)("p",null,"Before jumping to the how-to guide, let's first settle the DOM hierarchy naming convention."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="HTML snippet"',title:'"HTML','snippet"':!0},'<article class="main-page-content">\n <h1>Main Header</h1>\n <div>\n <p>\n <strong>Example paragraph</strong> with some written content and a <a href="https://mateuszdabrowski.pl">link</a>.\n </p>\n <p>\n Yet another paragraph of this article.\n </p>\n </div>\n</article>\n')),(0,i.kt)("p",null,"Let's select the ",(0,i.kt)("inlineCode",{parentName:"p"},"div")," tag from the above structure using:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div'); // selects <div>\n")),(0,i.kt)("p",null,"There are three relationships between the selected element and the rest of the code above:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"The selected ",(0,i.kt)("inlineCode",{parentName:"li"},"div")," tag is enclosed within ",(0,i.kt)("inlineCode",{parentName:"li"},'<article class="main-page-content">'),". The tag higher in the DOM hierarchy is called a ",(0,i.kt)("strong",{parentName:"li"},"parent"),"."),(0,i.kt)("li",{parentName:"ol"},"The selected ",(0,i.kt)("inlineCode",{parentName:"li"},"div")," tag is not alone within the ",(0,i.kt)("inlineCode",{parentName:"li"},'<article class="main-page-content">')," parent tag. There is also ",(0,i.kt)("inlineCode",{parentName:"li"},"h1"),". The tags at the same level of the DOM hierarchy are called ",(0,i.kt)("strong",{parentName:"li"},"siblings"),"."),(0,i.kt)("li",{parentName:"ol"},"The selected ",(0,i.kt)("inlineCode",{parentName:"li"},"div")," tag has two ",(0,i.kt)("inlineCode",{parentName:"li"},"p")," tags within itself. The tags lower in the DOM hierarchy are called ",(0,i.kt)("strong",{parentName:"li"},"children"),".")),(0,i.kt)("p",null,"To sum up, our ",(0,i.kt)("inlineCode",{parentName:"p"},"div")," tag has an ",(0,i.kt)("inlineCode",{parentName:"p"},"article")," as a parent, ",(0,i.kt)("inlineCode",{parentName:"p"},"h1")," as a sibling, and two ",(0,i.kt)("inlineCode",{parentName:"p"},"p")," as children. Then, the first ",(0,i.kt)("inlineCode",{parentName:"p"},"p")," has two inline children: ",(0,i.kt)("inlineCode",{parentName:"p"},"strong")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"a"),"."),(0,i.kt)("p",null,"Let's leverage all this information."),(0,i.kt)("h3",{id:"parentelement"},"parentElement"),(0,i.kt)("p",null,"If you want to go up in the hierarchy from your selection, you can just use ",(0,i.kt)("inlineCode",{parentName:"p"},".parentElement")," (or ",(0,i.kt)("inlineCode",{parentName:"p"},".parentNode"),", which is nearly the same now)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').parentElement; // selects <article class=\"main-page-content\">\n")),(0,i.kt)("h3",{id:"previouselementsibling-and-nextelementsibling"},"previousElementSibling and nextElementSibling"),(0,i.kt)("p",null,"For traversing the sibling elements, you can use either ",(0,i.kt)("inlineCode",{parentName:"p"},".previousElementSibling")," or ",(0,i.kt)("inlineCode",{parentName:"p"},".nextElementSibling")," to jump to the previous or next element. If there is no such element, you will get ",(0,i.kt)("inlineCode",{parentName:"p"},"null"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').previousElementSibling; // selects <h1>\ndocument.querySelector('article.main-page-content > div').nextElementSibling; // returns null\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can also encounter similar properties: ",(0,i.kt)("inlineCode",{parentName:"p"},".previousSibling")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".nextSibling"),". That pair is operating on HTML Nodes and will return more then you might expect. For example, whitespace between the elements (",(0,i.kt)("inlineCode",{parentName:"p"},"#text")," node) or HTML comments. Unless you are sure you need it, ",(0,i.kt)("inlineCode",{parentName:"p"},".previousElementSibling")," or ",(0,i.kt)("inlineCode",{parentName:"p"},".nextElementSibling")," are better choice.")),(0,i.kt)("h3",{id:"all-things-children"},"All things children"),(0,i.kt)("p",null,"When you want to go down in the hierarchy, you can use ",(0,i.kt)("inlineCode",{parentName:"p"},".children")," to get a collection of HTML elements."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').children; // returns collection of two <p> tags\n")),(0,i.kt)("p",null,"You can either ",(0,i.kt)("a",{parentName:"p",href:"/docs/js/js-loops"},"loop")," through those or pick a specific child with an index. Helpful here can be ",(0,i.kt)("inlineCode",{parentName:"p"},".childElementCount"),", which will show you the number of elements selected."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').childElementCount; // returns 2\n")),(0,i.kt)("p",null,"The nice thing is that for the most popular selections - the first and last child - you can use a clean shorthands ",(0,i.kt)("inlineCode",{parentName:"p"},".firstElementChild")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".lastElementChild"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* \u274c Unnecessary complex selection of the first and last child */\ndocument.querySelector('article.main-page-content > div').children[0]; // selects first child\ndocument.querySelector('article.main-page-content > div').children[document.querySelector('article.main-page-content > div').childElementCount - 1]; // selects last child\n\n/* \u2705 Optimised and readable selection of first and last child */\ndocument.querySelector('article.main-page-content > div').firstElementChild; // selects first child\ndocument.querySelector('article.main-page-content > div').lastElementChild; // selects last child\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Like with sibling selection, here also you have set of similar properties - ",(0,i.kt)("inlineCode",{parentName:"p"},".childNodes"),", ",(0,i.kt)("inlineCode",{parentName:"p"},".firstChild"),", ",(0,i.kt)("inlineCode",{parentName:"p"},".lastChild"),". All three work on Nodes, so those will pick up not only elements but also text (whitespace) and comments. Unless you are sure you need it, ",(0,i.kt)("inlineCode",{parentName:"p"},".children"),", ",(0,i.kt)("inlineCode",{parentName:"p"},".firstElementChild")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".lastElementChild")," are better choice.")),(0,i.kt)("h3",{id:"the-power-of-dom-traversing"},"The power of DOM traversing"),(0,i.kt)("p",null,"Ok, we know how to traverse the DOM, but why should we? Because sometimes you have to deal with a dynamic DOM and with traversing you can still leverage all ",(0,i.kt)("a",{parentName:"p",href:"#exploring-the-dom"},"exploratory properties"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').parentElement.className; // returns \"main-page-content\"\n")),(0,i.kt)("p",null,"You can also mix and match the traversing properties to jump multiple hierarchy levels."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').firstElementChild.lastElementChild.href // returns \"https://mateuszdabrowski.pl/\"\n")),(0,i.kt)("p",null,"Finally, you are not limited by the need to know the exact path from the currently selected element to another one ",(0,i.kt)("strong",{parentName:"p"},"higher in the hierarchy")," that you are interested in. You can leverage the ",(0,i.kt)("inlineCode",{parentName:"p"},".closest")," method to find it using the same CCS3 selection as with ",(0,i.kt)("a",{parentName:"p",href:"#accessing-the-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"querySelector")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').closest('.main-page-content'); // selects <article class=\"main-page-content\">\n")),(0,i.kt)("p",null,"Remember that ",(0,i.kt)("inlineCode",{parentName:"p"},".closest")," can return the initially selected element if it fulfils the new selection. If you want to stop it from happening, you can just chain it after ",(0,i.kt)("a",{parentName:"p",href:"#parentElement"},(0,i.kt)("inlineCode",{parentName:"a"},".parentElement")),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('article.main-page-content > div').parentElement.closest('.main-page-content'); // selects <article class=\"main-page-content\">\n")),(0,i.kt)("h2",{id:"manipulating-the-dom"},"Manipulating the DOM"),(0,i.kt)("p",null,"Everything discussed up to this point is nice but not breathtaking. Time to change it and jump straight into the real reason it is worth learning about the DOM. The ins and outs of manipulating it with JavaScript methods."),(0,i.kt)("h3",{id:"addeventlistener"},"addEventListener"),(0,i.kt)("p",null,"One of the critical manipulation methods for marketing automation is adding events with ",(0,i.kt)("inlineCode",{parentName:"p"},".addEventListener"),". This method lets you perform some actions (a function) given a specific behaviour (event)."),(0,i.kt)("p",null,"In simpler words, you can tell the browser to execute a JavaScript function when the user clicks a button. Or moves the mouse out of the page to close it or change a tab. Or perform any event you configure. You do it by attaching an Event Listener to a document, window or selected element:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Example of attaching Click-based Event Listener on a <button> that logs click details to console"',title:'"Example',of:!0,attaching:!0,"Click-based":!0,Event:!0,Listener:!0,on:!0,a:!0,"<button>":!0,that:!0,logs:!0,click:!0,details:!0,to:!0,'console"':!0},"document.querySelector('button').addEventListener('click', event => console.log(event));\n")),(0,i.kt)("admonition",{title:"You Should Know",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Using anonymous functions, like in the example above, is ",(0,i.kt)("strong",{parentName:"p"},"not recommended"),". Each anonymous function is unique for JavaScript, even if it has the same code within. This leads to two issues:"),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"You may add multiple instances of the same anonymous function to a single element (no deduplication possible). It will lead to a negative performance impact and the function being triggered numerous times per single event."),(0,i.kt)("li",{parentName:"ol"},"You cannot remove anonymous Event Listener.")),(0,i.kt)("p",{parentName:"admonition"},"In real-world scenarios, use named functions (unless you are absolutely sure what you are doing and have booked some time for debugging in the future):"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const logEvent = event => console.log(event);\ndocument.querySelector('button').addEventListener('click', logEvent);\n")),(0,i.kt)("p",{parentName:"admonition"},"It will allow you to easily remove Event Listener (by referencing the target, event type and named function) once it is no longer needed:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js"},"document.querySelector('button').removeEventListener('click', logEvent);\n"))),(0,i.kt)("h4",{id:"event-types"},"Event types"),(0,i.kt)("p",null,"There are over a hundred available events that you can use, so I will focus only on the most useful for our Marketing Automation needs."),(0,i.kt)("h5",{id:"click"},"click"),(0,i.kt)("p",null,"Capturing a ",(0,i.kt)("inlineCode",{parentName:"p"},"click")," event is probably the most popular event in the world wide web. Technically, it's a shorthand for two separate events (that you can listen for separately) - ",(0,i.kt)("inlineCode",{parentName:"p"},"mousedown")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"mouseup"),"."),(0,i.kt)("p",null,"The interesting tidbit is that the event captures the number of consecutive clicks happening in short timeframe, so you can distinguish single, double, tripleclicks:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const logClickCount = event => console.log(`Click count: ${event.detail}`);\ndocument.querySelector('button').addEventListener('click', logClickCount);\n")),(0,i.kt)("h5",{id:"submit"},"submit"),(0,i.kt)("p",null,"Another marketing must-have is the ",(0,i.kt)("inlineCode",{parentName:"p"},"submit")," event. It is triggered on the valid submission of a form."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const logSubmissionTimestamp = event => console.log(`Submission timestamp: ${event.timeStamp}`); // miliseconds since the page/script load\ndocument.querySelector('form').addEventListener('submit', logSubmissionTimestamp);\n")),(0,i.kt)("p",null,"The key feature with submit events is possibility to stop the default form processing with ",(0,i.kt)("inlineCode",{parentName:"p"},".preventDefault")," method:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{3}","{3}":!0},"document.querySelector('form').addEventListener('submit',\n event => {\n event.preventDefault();\n const formData = Object.fromEntries(new FormData(event.target));\n console.log(formData);\n }\n);\n")),(0,i.kt)("p",null,"This approach allows you to implement custom validation or data processing while benefiting from the HTML5 form backbone. Perfect when you want to push your form submission to a ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource#good-form-backend-with-code-resource"},"Code Resource")," asynchronously."),(0,i.kt)("h5",{id:"focus--blur"},"focus & blur"),(0,i.kt)("p",null,"Other events that are very useful for forms (and more) are ",(0,i.kt)("inlineCode",{parentName:"p"},"focus")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"blur"),". The first one is triggered when an element gets into focus; the other on the opposite. What does it mean? Let's say you have a form. When the user clicks on the input, that element gets focused. When he clicks on something else (another input, submit button, or just anywhere else), it triggers a ",(0,i.kt)("inlineCode",{parentName:"p"},"blur")," event."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const logInputValue = event => console.log(event.target.value);\ndocument.querySelector('input[type=\"email\"]').addEventListener('blur', logInputValue);\n")),(0,i.kt)("p",null,"Using ",(0,i.kt)("inlineCode",{parentName:"p"},"blur")," events can be great for triggering asynchronous checks on the provided data. For example, when the user finishes writing the email and goes to the following field, the Event Listener can then make an asynchronous call to the ",(0,i.kt)("a",{parentName:"p",href:"/docs/config/sfmc-code-resource#good-form-backend-with-code-resource"},"Code Resource backend"),". It will look up whether the email is used by an existing contact or new record needs to be created in Salesforce Sales Cloud to generate the Contact ID and return it back to the form's hidden field."),(0,i.kt)("h5",{id:"mouseenter--mouseleave"},"mouseenter & mouseleave"),(0,i.kt)("p",null,"With ",(0,i.kt)("inlineCode",{parentName:"p"},"mouseenter")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"mouseleave"),", you can trigger events when the user moves the pointer in or out of a specific element. The caveat - there needs to be a pointer, so the solution is not working for touchscreen users."),(0,i.kt)("p",null,"Still, it can be used to capture which part of the website is getting hovered over with a mouse (and for how long) or to create those annoying pop-ups trying to guilt-trip you into staying on the page:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"const onLeavePopUp = alert('Sad Alert');\ndocument.documentElement.addEventListener('mouseleave', onLeavePopUp);\n")),(0,i.kt)("p",null,"Those are just a few key events that you can capture with ",(0,i.kt)("inlineCode",{parentName:"p"},".addEventListener"),". There is much more available, like ",(0,i.kt)("inlineCode",{parentName:"p"},"keydown")," & ",(0,i.kt)("inlineCode",{parentName:"p"},"keyup"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"select"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"scroll"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"paste"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"error"),". Check out the complete list on the ",(0,i.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/Events#event_listing"},"MDN"),"."),(0,i.kt)("h3",{id:"changing-attributes"},"Changing attributes"),(0,i.kt)("p",null,"Events are fantastic, but there is something even better. Attribute manipulation. With it, you can change your website in real-time according to your logic. How? By going one step further with what you have already learned."),(0,i.kt)("p",null,"For example, you can add, remove and toggle (add if it wasn't there or remove if it was) CSS classes with ",(0,i.kt)("a",{parentName:"p",href:"#classlist-and-classname"},(0,i.kt)("inlineCode",{parentName:"a"},".classlist")),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* <div class=\"page-wrapper category-api document-page\">\u2026</div> */\ndocument.querySelector('div.page-wrapper').classList.remove('category-api'); // removes .categori-api\ndocument.querySelector('div.page-wrapper').classList.add('category-api'); // adds .categori-api back\ndocument.querySelector('div.page-wrapper').classList.toggle('category-api'); // removes .categori-api as it is on the element\n")),(0,i.kt)("p",null,"And just like you could get custom ",(0,i.kt)("a",{parentName:"p",href:"#attributes"},"attributes"),", you can also create them with ",(0,i.kt)("inlineCode",{parentName:"p"},".setAttribute"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},'/* <main id="content" class="main-content" role="main">\u2026</main> */\ndocument.querySelector(\'#content\').setAttribute(\'data-columns\', \'3\'); // adds data-columns="3" attribute\n')),(0,i.kt)("p",null,"Probably the most useful manipulation feature is possibility to alter the properties:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},"/* <input type=\"checkbox\" id=\"isOptedIn\" name=\"isOptedIn\"> */\ndocument.querySelector('#isOptedIn').required; // returns false, as checkbox is not required\ndocument.querySelector('#isOptedIn').required = true; // makes the checkbox required\n\ndocument.querySelector('#isOptedIn').checked; // returns false, as checkbox is not checked\ndocument.querySelector('#isOptedIn').checked = true; // checks the checkbox\n\ndocument.querySelector('#isOptedIn').hidden; // returns false, as checkbox is not hidden\ndocument.querySelector('#isOptedIn').hidden = true; // hides the checkbox\n")),(0,i.kt)("p",null,"You can do the same with ",(0,i.kt)("a",{parentName:"p",href:"#innerText-and-innerHTML"},(0,i.kt)("inlineCode",{parentName:"a"},".innerText"),"/",(0,i.kt)("inlineCode",{parentName:"a"},".innerHTML")),", ",(0,i.kt)("a",{parentName:"p",href:"#hidden-and-style"},(0,i.kt)("inlineCode",{parentName:"a"},".style.display"))," and more."),(0,i.kt)("p",null,"Finally, you can mix DOM manipulation methods and change attributes in response to specific ",(0,i.kt)("a",{parentName:"p",href:"#event-types"},"events"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:"{5}","{5}":!0},"document.querySelector('form').addEventListener('submit',\n event => {\n event.preventDefault();\n const formData = Object.fromEntries(new FormData(event.target));\n event.target.innerText = 'Submitted!'; // Replaces whole form with \"Submitted!\"\n }\n);\n")),(0,i.kt)("p",null,"Document Object Model can be used to adapt your website in real-time, fill in hidden fields with backend calls or even automate your processes through developer console. You are only limited by your imagination (and website performance)."),(0,i.kt)("h2",{id:"marketing-cloud-use-cases"},"Marketing Cloud Use Cases"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/snippets/tailor-with-data"},"Tailor with Data")," - leverage DOM manipulation and personalisation strings to create dynamic experiences for your customers."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("a",{parentName:"li",href:"/docs/js/snippets/export-import-document-sfmc-roles"},"Export, Import & Document SFMC Roles")," - Backup, clone and move cross-account the Salesforce Marketing Cloud roles. In seconds, thanks to DOM.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/edb10261.1cab876a.js b/assets/js/edb10261.1cab876a.js new file mode 100644 index 000000000..2eaa1684c --- /dev/null +++ b/assets/js/edb10261.1cab876a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8819],{2432:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var i=n(5893),r=n(1151),s=n(1872),o=n(7577);const a={id:"sfmc-webinar-account-architecture",title:"SFMC Account Architecture",sidebar_label:"Account Architecture",description:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",image:"img/og/og-image-webinar-sfmc-account-architecture.png",tags:["Webinar","Marketing Cloud","Setup","Configuration","Deliverability"]},c=void 0,l={id:"webinars/sfmc-webinar-account-architecture",title:"SFMC Account Architecture",description:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",source:"@site/docs/webinars/sfmc-webinar-account-architecture.mdx",sourceDirName:"webinars",slug:"/webinars/sfmc-webinar-account-architecture",permalink:"/docs/webinars/sfmc-webinar-account-architecture",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/webinars/sfmc-webinar-account-architecture.mdx",tags:[{label:"Webinar",permalink:"/docs/tags/webinar"},{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Setup",permalink:"/docs/tags/setup"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Deliverability",permalink:"/docs/tags/deliverability"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1704489222,formattedLastUpdatedAt:"Jan 5, 2024",frontMatter:{id:"sfmc-webinar-account-architecture",title:"SFMC Account Architecture",sidebar_label:"Account Architecture",description:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",image:"img/og/og-image-webinar-sfmc-account-architecture.png",tags:["Webinar","Marketing Cloud","Setup","Configuration","Deliverability"]},sidebar:"webinars",previous:{title:"SFMC Webinars",permalink:"/docs/category/sfmc-webinars"},next:{title:"Architecting Web Solutions",permalink:"/docs/webinars/sfmc-webinar-architecting-web-solutions"}},d={},u=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Video",id:"video",level:2},{value:"Important errata related to the Multi-Org limitations",id:"important-errata-related-to-the-multi-org-limitations",level:3},{value:"Materials",id:"materials",level:2}];function h(e){const t={a:"a",admonition:"admonition",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.m,{content:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features."}),"\n",(0,i.jsx)(t.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["SFMC Business Units (",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=353",children:"5:53"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Business Units Setup Patterns (",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=1262",children:"21:02"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Single-Org vs Multi-Org (",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=1651",children:"27:31"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Marketing Cloud Connect Patterns (",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=2496",children:"41:36"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["SAP, Private Domains & IPs (",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=3021",children:"50:21"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Deliverability & IP Warmup (",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=3382",children:"56:22"}),")"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"video",children:"Video"}),"\n",(0,i.jsx)(o._,{videoId:"dRxcbwIA1K0",title:"SFMC Account Architecture Webinar Recording"}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,i.jsx)(t.h3,{id:"important-errata-related-to-the-multi-org-limitations",children:"Important errata related to the Multi-Org limitations"}),(0,i.jsxs)(t.p,{children:["While one SF Org can have only one integration to a single Marketing Cloud Account, you can leverage ",(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=000381081&type=1",children:"more than one Integration User on the Salesforce side"})," for that connection. Doing so provides a few significant benefits:"]}),(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=2639",children:"recommended limit of up to 5 Business Units per integration in Multi-Org"})," is applied to the SF Integration User, not Marketing Cloud Connect itself. It enables you to use multiple SF Integration Users in a single SF Org to connect dozens of Business Units (up to 5 per User)."]}),"\n",(0,i.jsxs)(t.li,{children:["The ",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=2037",children:"shared Synchronized Objects configuration per SF Org"})," is applied to SF Integration User. It enables you to set distinct configurations per each SF Integration User (shared across Business Units connected using the same User)."]}),"\n",(0,i.jsxs)(t.li,{children:["While you still cannot control the ",(0,i.jsx)(t.a,{href:"https://youtu.be/dRxcbwIA1K0?t=2173",children:"Synchronized DEs visibility"})," of SFMC Users, you can control which Objects and Records are being synchronized to each Business Unit by applying appropriate Permissions to each SF Integration User. It enables use cases like syncing different Contact Record Types to each Business Unit."]}),"\n"]}),(0,i.jsxs)(t.p,{children:["Using the above approach requires additional User licences on the SF CRM side and adds complexity to your implementation. However, it can significantly expand possible use cases in Multi-Org configurations. Full details in the ",(0,i.jsx)(t.a,{href:"/docs/config/sfmc-mcc-integration-patterns",children:"Marketing Cloud Connect Integration Patterns deep dive"}),"."]})]}),"\n",(0,i.jsx)(t.h2,{id:"materials",children:"Materials"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"28 January 2023"}),(0,i.jsx)(t.th,{children:"Salesforce Marketing Cloud Infrastructure Setup - Org Setup"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Recording"}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.a,{href:"https://www.youtube.com/watch?v=dRxcbwIA1K0&list=PLOWi4YJyd0lTtKyr72NHpOawIsoGjbuwr&index=6",children:"YouTube"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Articles"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.a,{href:"/docs/config/sfmc-mcc-integration-patterns",children:"SFMC MCC Integration Patterns"})," ",(0,i.jsx)("br",{})," Salesforce Architects blog on ",(0,i.jsx)(t.a,{href:"https://medium.com/salesforce-architects/adopting-business-units-in-marketing-cloud-98eac8eda216",children:"Business Units"})," and ",(0,i.jsx)(t.a,{href:"https://medium.com/salesforce-architects/implementing-marketing-cloud-with-multiple-salesforce-orgs-part-1-cf8637cf0985",children:"Marketing Cloud Connect"}),(0,i.jsx)("br",{}),"Salesforce Documentation on ",(0,i.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_co_faqs_for_multi_org.htm",children:"Multi-Org Considerations"})]})]})]})]})]})}function m(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1872:(e,t,n)=>{n.d(t,{m:()=>s});n(7294);const i="leadText_qzwo";var r=n(5893);const s=e=>{let{content:t}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:i,children:t})})}},7577:(e,t,n)=>{n.d(t,{_:()=>r});n(7294);var i=n(5893);const r=e=>{let{videoId:t,title:n="YouTube video player"}=e;const r="https://www.youtube-nocookie.com/embed/"+t;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("div",{class:"video--container",children:(0,i.jsx)("iframe",{src:r,title:n,class:"video",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen;",allowfullscreen:!0})})})}},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>o});var i=n(7294);const r={},s=i.createContext(r);function o(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/edb10261.87a0b6a3.js b/assets/js/edb10261.87a0b6a3.js deleted file mode 100644 index 834d26a72..000000000 --- a/assets/js/edb10261.87a0b6a3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8819],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=l(n),m=a,b=d["".concat(s,".").concat(m)]||d[m]||p[m]||i;return n?r.createElement(b,o(o({ref:t},u),{},{components:n})):r.createElement(b,o({ref:t},u))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[d]="string"==typeof e?e:a,o[1]=c;for(var l=2;l<i;l++)o[l]=n[l];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1872:(e,t,n)=>{n.d(t,{m:()=>i});var r=n(7294);const a="leadText_qzwo",i=e=>{let{content:t}=e;return r.createElement(r.Fragment,null,r.createElement("p",{id:a},t))}},7577:(e,t,n)=>{n.d(t,{_:()=>a});var r=n(7294);const a=e=>{let{videoId:t,title:n="YouTube video player"}=e;const a="https://www.youtube-nocookie.com/embed/"+t;return r.createElement(r.Fragment,null,r.createElement("div",{class:"video--container"},r.createElement("iframe",{src:a,title:n,class:"video",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen;",allowfullscreen:!0})))}},2043:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>b,frontMatter:()=>c,metadata:()=>l,toc:()=>d});var r=n(7462),a=(n(7294),n(4137)),i=n(1872),o=n(7577);const c={id:"sfmc-webinar-account-architecture",title:"SFMC Account Architecture",sidebar_label:"Account Architecture",description:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",image:"img/og/og-image-webinar-sfmc-account-architecture.png",tags:["Webinar","Marketing Cloud","Setup","Configuration","Deliverability"]},s=void 0,l={unversionedId:"webinars/sfmc-webinar-account-architecture",id:"webinars/sfmc-webinar-account-architecture",title:"SFMC Account Architecture",description:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",source:"@site/docs/webinars/sfmc-webinar-account-architecture.mdx",sourceDirName:"webinars",slug:"/webinars/sfmc-webinar-account-architecture",permalink:"/docs/webinars/sfmc-webinar-account-architecture",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/webinars/sfmc-webinar-account-architecture.mdx",tags:[{label:"Webinar",permalink:"/docs/tags/webinar"},{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Setup",permalink:"/docs/tags/setup"},{label:"Configuration",permalink:"/docs/tags/configuration"},{label:"Deliverability",permalink:"/docs/tags/deliverability"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1691565403,formattedLastUpdatedAt:"Aug 9, 2023",frontMatter:{id:"sfmc-webinar-account-architecture",title:"SFMC Account Architecture",sidebar_label:"Account Architecture",description:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",image:"img/og/og-image-webinar-sfmc-account-architecture.png",tags:["Webinar","Marketing Cloud","Setup","Configuration","Deliverability"]},sidebar:"webinars",previous:{title:"SFMC Webinars",permalink:"/docs/category/sfmc-webinars"},next:{title:"Architecting Web Solutions",permalink:"/docs/webinars/sfmc-webinar-architecting-web-solutions"}},u={},d=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Video",id:"video",level:2},{value:"Materials",id:"materials",level:2}],p={toc:d},m="wrapper";function b(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)(i.m,{content:"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.",mdxType:"LeadText"}),(0,a.kt)("h2",{id:"table-of-contents"},"Table of Contents"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"SFMC Business Units (",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=353"},"5:53"),")"),(0,a.kt)("li",{parentName:"ol"},"Business Units Setup Patterns (",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=1262"},"21:02"),")"),(0,a.kt)("li",{parentName:"ol"},"Single-Org vs Multi-Org (",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=1651"},"27:31"),")"),(0,a.kt)("li",{parentName:"ol"},"Marketing Cloud Connect Patterns (",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=2496"},"41:36"),")"),(0,a.kt)("li",{parentName:"ol"},"SAP, Private Domains & IPs (",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=3021"},"50:21"),")"),(0,a.kt)("li",{parentName:"ol"},"Deliverability & IP Warmup (",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=3382"},"56:22"),")")),(0,a.kt)("h2",{id:"video"},"Video"),(0,a.kt)(o._,{videoId:"dRxcbwIA1K0",title:"SFMC Account Architecture Webinar Recording",mdxType:"YouTube"}),(0,a.kt)("br",null),(0,a.kt)("admonition",{title:"You Should Know",type:"note"},(0,a.kt)("h3",{parentName:"admonition",id:"important-errata-related-to-the-multi-org-limitations"},"Important errata related to the Multi-Org limitations"),(0,a.kt)("p",{parentName:"admonition"},"While one SF Org can have only one integration to a single Marketing Cloud Account, you can leverage ",(0,a.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?id=000381081&type=1"},"more than one Integration User on the Salesforce side")," for that connection. Doing so provides a few significant benefits:"),(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=2639"},"recommended limit of up to 5 Business Units per integration in Multi-Org")," is applied to the SF Integration User, not Marketing Cloud Connect itself. It enables you to use multiple SF Integration Users in a single SF Org to connect dozens of Business Units (up to 5 per User)."),(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=2037"},"shared Synchronized Objects configuration per SF Org")," is applied to SF Integration User. It enables you to set distinct configurations per each SF Integration User (shared across Business Units connected using the same User)."),(0,a.kt)("li",{parentName:"ol"},"While you still cannot control the ",(0,a.kt)("a",{parentName:"li",href:"https://youtu.be/dRxcbwIA1K0?t=2173"},"Synchronized DEs visibility")," of SFMC Users, you can control which Objects and Records are being synchronized to each Business Unit by applying appropriate Permissions to each SF Integration User. It enables use cases like syncing different Contact Record Types to each Business Unit.")),(0,a.kt)("p",{parentName:"admonition"},"Using the above approach requires additional User licences on the SF CRM side and adds complexity to your implementation. However, it can significantly expand possible use cases in Multi-Org configurations. Full details in the ",(0,a.kt)("a",{parentName:"p",href:"/docs/config/sfmc-mcc-integration-patterns"},"Marketing Cloud Connect Integration Patterns deep dive"),".")),(0,a.kt)("h2",{id:"materials"},"Materials"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"28 January 2023"),(0,a.kt)("th",{parentName:"tr",align:null},"Salesforce Marketing Cloud Infrastructure Setup - Org Setup"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Recording"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"td",href:"https://www.youtube.com/watch?v=dRxcbwIA1K0&list=PLOWi4YJyd0lTtKyr72NHpOawIsoGjbuwr&index=6"},"YouTube"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Articles"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"td",href:"/docs/config/sfmc-mcc-integration-patterns"},"SFMC MCC Integration Patterns")," ",(0,a.kt)("br",null)," Salesforce Architects blog on ",(0,a.kt)("a",{parentName:"td",href:"https://medium.com/salesforce-architects/adopting-business-units-in-marketing-cloud-98eac8eda216"},"Business Units")," and ",(0,a.kt)("a",{parentName:"td",href:"https://medium.com/salesforce-architects/implementing-marketing-cloud-with-multiple-salesforce-orgs-part-1-cf8637cf0985"},"Marketing Cloud Connect"),(0,a.kt)("br",null),"Salesforce Documentation on ",(0,a.kt)("a",{parentName:"td",href:"https://help.salesforce.com/s/articleView?id=sf.mc_co_faqs_for_multi_org.htm"},"Multi-Org Considerations"))))))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f3b2d393.dd9463de.js b/assets/js/f3b2d393.f3dfe2e5.js similarity index 96% rename from assets/js/f3b2d393.dd9463de.js rename to assets/js/f3b2d393.f3dfe2e5.js index c4780d312..ac72dae1c 100644 --- a/assets/js/f3b2d393.dd9463de.js +++ b/assets/js/f3b2d393.f3dfe2e5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9865],{2946:e=>{e.exports=JSON.parse('{"label":"Data Extensions","permalink":"/docs/tags/data-extensions","allTagsPath":"/docs/tags","count":5,"items":[{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[9865],{2946:e=>{e.exports=JSON.parse('{"label":"Data Extensions","permalink":"/docs/tags/data-extensions","allTagsPath":"/docs/tags","count":5,"items":[{"id":"config/sfmc-contact-deletion","title":"SFMC Contact Deletion","description":"Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let\'s do it.","permalink":"/docs/config/sfmc-contact-deletion"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"},{"id":"config/sfmc-mobile-connect-data-views","title":"SFMC Mobile Connect Data Views","description":"Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-mobile-connect-data-views"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","title":"SFMC SQL Debugging Value Length","description":"Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.","permalink":"/docs/sql/snippets/sfmc-sql-debugging-value-length"},{"id":"config/sfmc-system-data-views","title":"SFMC System Data Views","description":"Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.","permalink":"/docs/config/sfmc-system-data-views"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/f564aeae.007c6dbd.js b/assets/js/f564aeae.007c6dbd.js new file mode 100644 index 000000000..b5d6b2281 --- /dev/null +++ b/assets/js/f564aeae.007c6dbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1572],{1950:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>x,frontMatter:()=>r,metadata:()=>c,toc:()=>o});var n=t(5893),d=t(1151),i=t(1872);const r={id:"sfmc-enhanced-send-log",title:"SFMC Enhanced Send Log",sidebar_label:"Enhanced Send Log",description:"Create, customise and enhance SFMC Send Log for debugging and reporting.",image:"img/og/og-image-sql-enhanced-send-log.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},l=void 0,c={id:"config/sfmc-enhanced-send-log",title:"SFMC Enhanced Send Log",description:"Create, customise and enhance SFMC Send Log for debugging and reporting.",source:"@site/docs/config/sfmc-enhanced-send-log.mdx",sourceDirName:"config",slug:"/config/sfmc-enhanced-send-log",permalink:"/docs/config/sfmc-enhanced-send-log",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-enhanced-send-log.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Email",permalink:"/docs/tags/email"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Analytics",permalink:"/docs/tags/analytics"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1706048382,formattedLastUpdatedAt:"Jan 23, 2024",frontMatter:{id:"sfmc-enhanced-send-log",title:"SFMC Enhanced Send Log",sidebar_label:"Enhanced Send Log",description:"Create, customise and enhance SFMC Send Log for debugging and reporting.",image:"img/og/og-image-sql-enhanced-send-log.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},sidebar:"docs",previous:{title:"Contact Deletion Process",permalink:"/docs/config/sfmc-contact-deletion"},next:{title:"Behavioral Triggers",permalink:"/docs/config/sfmc-behavioral-triggers"}},a={},o=[{value:"What is Send Log",id:"what-is-send-log",level:2},{value:"Send Log Data Extension Template",id:"send-log-data-extension-template",level:3},{value:"Send Log vs _Sent System Data View",id:"send-log-vs-_sent-system-data-view",level:3},{value:"1. Captured data is not precisely the same.",id:"1-captured-data-is-not-precisely-the-same",level:4},{value:"2. You can customise the Send Log",id:"2-you-can-customise-the-send-log",level:4},{value:"Custom Send Log",id:"custom-send-log",level:2},{value:"Customised Send Log Example",id:"customised-send-log-example",level:3},{value:"Enhanced Send Log",id:"enhanced-send-log",level:2},{value:"Enhanced Send Log Example",id:"enhanced-send-log-example",level:3},{value:"Enhanced Send Log SQL Query Activity",id:"enhanced-send-log-sql-query-activity",level:3},{value:"Send Log ErrorCode Values",id:"send-log-errorcode-values",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.m,{content:"Create, customise and enhance SFMC Send Log for debugging and reporting."}),"\n",(0,n.jsx)(s.h2,{id:"what-is-send-log",children:"What is Send Log"}),"\n",(0,n.jsx)(s.p,{children:"Send Log is a table that captures relevant data about sends happening in the platform. In the case of Salesforce Marketing Cloud, it is a unique Data Extension that automatically captures the data (no need for AMPScript or SSJS to populate it)."}),"\n",(0,n.jsxs)(s.p,{children:["SFMC doesn't have Send Log out of the box, but you can make one yourself. On the first screen of Data Extension creation, select ",(0,n.jsx)(s.code,{children:"Create From Template"})," in the ",(0,n.jsx)(s.code,{children:"Creation Method"})," field. You will see a picklist with multiple templates, including ",(0,n.jsx)(s.code,{children:"SendLog"})," (for Emails), ",(0,n.jsx)(s.code,{children:"SMSSendLog"})," and ",(0,n.jsx)(s.code,{children:"PushSendLog"}),". If you do not see any of those templates - you might need to request this as a free ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-features-on-demand",children:"feature on demand"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"Once you create it, it will automatically populate with each attempted send originating from its Business Unit."}),"\n",(0,n.jsx)(s.h3,{id:"send-log-data-extension-template",children:"Send Log Data Extension Template"}),"\n",(0,n.jsx)(s.p,{children:"The Send Log template comes with six default fields:"}),"\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:"Name"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Length"}),(0,n.jsx)(s.th,{children:"Primary Key"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendID"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"36"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ErrorCode"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"JobID"})," and ",(0,n.jsx)(s.code,{children:"BatchID"})," allow you to differentiate the send if you push the same email on multiple days or campaigns."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"ListID"})," contains the ID of the list used for the send (for example, All Subscribers list)."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"SubID"})," contains Subscriber ID - a unique Subscriber identifier, different from Subscriber Key. Subscriber ID is a backend system number that we cannot change."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"TriggeredSendID"})," stores the ID of a Triggered Send Definition if it was used for the specific send."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"ErrorCode"})," captures an error that stopped a specific send. I have added the list of all possible codes with an explanation ",(0,n.jsx)(s.a,{href:"#send-log-errorcode-values",children:"at the bottom"}),"."]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:["If your send was not delivered, but you can see it in the Send Log without any ",(0,n.jsx)(s.code,{children:"ErrorCode"}),", leverage ",(0,n.jsx)(s.a,{href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends",children:"Email Sends Debugging Query"})," to learn what happened with the message."]})}),"\n",(0,n.jsx)(s.h3,{id:"send-log-vs-_sent-system-data-view",children:"Send Log vs _Sent System Data View"}),"\n",(0,n.jsxs)(s.p,{children:["You might wonder - why use email Send Log when ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_sent",children:"_Sent Data View"})," captures the same data out of the box? There are two reasons."]}),"\n",(0,n.jsx)(s.h4,{id:"1-captured-data-is-not-precisely-the-same",children:"1. Captured data is not precisely the same."}),"\n",(0,n.jsxs)(s.p,{children:["It's not only about the ",(0,n.jsxs)(s.a,{href:"#send-log-errorcode-values",children:[(0,n.jsx)(s.code,{children:"ErrorCode"})," field"]})," in the Send Log, and multiple additional fields in the ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#_sent",children:"_Sent Data View"}),". It's also about when the data is captured."]}),"\n",(0,n.jsxs)(s.p,{children:["Send Log is populated when SFMC prepares the send. That's why it can log ",(0,n.jsx)(s.a,{href:"#send-log-errorcode-values",children:"ErrorCode"})," if the send fails. The Data View is populated later when SFMC pushes a correctly constructed email out to the Email Service Providers."]}),"\n",(0,n.jsx)(s.p,{children:"It means that Send Log is an incredible tool to check why some emails did not go out of SFMC."}),"\n",(0,n.jsx)(s.h4,{id:"2-you-can-customise-the-send-log",children:"2. You can customise the Send Log"}),"\n",(0,n.jsxs)(s.p,{children:["Data Views are set in stone (unless you purchase a ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views#custom-data-views",children:"custom one"}),"), but you can add fields to the Send Log to align it better with your business needs. Let's dive into how it works and why you should use it."]}),"\n",(0,n.jsx)(s.h2,{id:"custom-send-log",children:"Custom Send Log"}),"\n",(0,n.jsx)(s.p,{children:"The true power of Send Log lies in the possibility to customise it. The default six columns are just beginning - you can add additional ones per your business needs. With performance in mind, I would recommend adding up to 5 custom fields."}),"\n",(0,n.jsx)(s.p,{children:"Columns added to Send Log are unique because you can make them fill in automatically. How does it work?"}),"\n",(0,n.jsxs)(s.p,{children:["When Marketing Cloud prepares the email for sending, Send Log evaluates all available ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?language=en_US&type=5&id=sf.mc_es_available_personalization_strings.htm",children:"personalisation strings"}),", Sendable Data Extension fields and AMPScript variables. Each value that shares a name with Send Log column is automatically filled. Examples?"]}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["If you want to capture the recipient's Email Address in the SendLog, you can add the ",(0,n.jsx)(s.code,{children:"EmailAddr"})," field, and it will be automatically filled thanks to ",(0,n.jsx)(s.code,{children:"%%emailaddr%%"})," personalisation string."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Capturing Subscriber Key is a bit tricky, as the personalisation string is ",(0,n.jsx)(s.code,{children:"%%_subscriberkey%%"})," - you cannot add a field starting with the underscore to Data Extension. There are two ways to capture this information. In most cases, you will have the ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," field in the Data Extension used for sending - you can use the same column name in the Send Log. Alternatively, you can create an AMPScript variable using the personalisation string: ",(0,n.jsx)(s.code,{children:"SET @SubscriberKey = AttributeValue('_subscriberkey')"}),". Send Log will pick up your AMPScript variable and fill the column."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"You can also use AMPScript variables for other interesting things, like capturing information from Additional Email Attributes or custom values manually configured within the email body."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,n.jsxs)(s.p,{children:["In most cases, you can dry-test automatic filling by adding ",(0,n.jsx)(s.code,{children:"%%[Output(Concat('SendLogColumnName: ', @SendLogColumnName))]%%"})," to the bottom of the email (where ",(0,n.jsx)(s.code,{children:"SendLogColumnName"})," is equal to the Send Log field you want to test). This AMPScript one-liner should output ",(0,n.jsx)(s.code,{children:"SendLogColumnName: "})," along with the value that SFMC would add to the Send Log. If it doesn't - there might not be an appropriate variable, or it is not assigned a value."]})}),"\n",(0,n.jsx)(s.h3,{id:"customised-send-log-example",children:"Customised Send Log Example"}),"\n",(0,n.jsx)(s.p,{children:"Here you can see sample Customised Send Log that I like to use:"}),"\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:"Name"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Length"}),(0,n.jsx)(s.th,{children:"Primary Key"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendID"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"36"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ErrorCode"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"18"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailAddr"}),(0,n.jsx)(s.td,{children:"Email"}),(0,n.jsx)(s.td,{children:"254"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailName_"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"150"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"LogDate"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BusinessSpecificField1"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BusinessSpecificField2"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["I always add the ",(0,n.jsx)(s.code,{children:"SubscriberKey"})," field (filled from a column of the same name in the Data Extension used for send) along with ",(0,n.jsx)(s.code,{children:"EmailAddr"})," and ",(0,n.jsx)(s.code,{children:"EmailName_"})," fields filled in from personalisation strings. I also add ",(0,n.jsx)(s.code,{children:"LogDate"})," field filled with current date as default to be able to filter rows based on a attempted send date."]}),"\n",(0,n.jsx)(s.p,{children:"As Send Log will show the data as it is at the moment of email preparation, I frequently extend it with customer-specific fields that are crucial for send-time data checks. For example - VIP status, Contact vs Lead status, assigned Account Executive."}),"\n",(0,n.jsx)(s.p,{children:"All those data points can be beneficial during debugging. VIP offer sent to the standard customer? Send Log will tell you whether the Subscriber was VIP at the moment of send or it is a bug in your Journey criteria."}),"\n",(0,n.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(s.p,{children:["Another handy field that I would love to capture in the Send Log would be the name of the Data Extension used for the send. It should be possible, as there is a dedicated personalisation string: ",(0,n.jsx)(s.code,{children:"%%_DataSourceName%%"}),". But..."]}),(0,n.jsxs)(s.p,{children:["You can add the ",(0,n.jsx)(s.code,{children:"DataSourceName"})," field to Send Log and ",(0,n.jsx)(s.code,{children:"SET @DataSourceName = AttributeValue('_datasourcename')"})," snippet to the email. However, it will work correctly only for the Send Flow."]}),(0,n.jsxs)(s.p,{children:["Unfortunately, it currently does not support Journey Builder Sends. Learn more and vote for a fix ",(0,n.jsx)(s.a,{href:"../../../sites/ideas/marketing-cloud-ideas/#_datasourcename-for-entry-data-extension-in-journey-builder",children:"here"}),"."]})]}),"\n",(0,n.jsx)(s.h2,{id:"enhanced-send-log",children:"Enhanced Send Log"}),"\n",(0,n.jsx)(s.p,{children:"Custom Send Log is already a fantastic tool, but it's more suited for administrators with its technical field names and lack of post-send data. However, you can easily leverage it to create something perfect for your more business-oriented SFMC users."}),"\n",(0,n.jsx)(s.p,{children:"To do it, you will need additional Data Extension and simple Automation with single Query Activity."}),"\n",(0,n.jsx)(s.h3,{id:"enhanced-send-log-example",children:"Enhanced Send Log Example"}),"\n",(0,n.jsx)(s.p,{children:"Create standard Data Extension with more user-friendly names and extend it with journey and engagement data points:"}),"\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:"Name"}),(0,n.jsx)(s.th,{children:"Type"}),(0,n.jsx)(s.th,{children:"Length"}),(0,n.jsx)(s.th,{children:"Primary Key"}),(0,n.jsx)(s.th,{children:"Nullable"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberKey"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"18"}),(0,n.jsx)(s.td,{children:"Yes"}),(0,n.jsx)(s.td,{children:"No"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SubscriberID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailAddress"}),(0,n.jsx)(s.td,{children:"Email"}),(0,n.jsx)(s.td,{children:"254"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BusinessSpecificField1"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BusinessSpecificField2"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"EmailName"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"150"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyName"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"100"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JourneyVersion"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"100"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"LogDate"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"SentDate"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Delivered"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"20"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"FirstOpenDate"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"FirstClickDate"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BounceDate"}),(0,n.jsx)(s.td,{children:"Date"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"JobID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ListID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"BatchID"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"TriggeredSendID"}),(0,n.jsx)(s.td,{children:"String"}),(0,n.jsx)(s.td,{children:"36"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ErrorCode"}),(0,n.jsx)(s.td,{children:"Numeric"}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{}),(0,n.jsx)(s.td,{children:"Yes"})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"enhanced-send-log-sql-query-activity",children:"Enhanced Send Log SQL Query Activity"}),"\n",(0,n.jsxs)(s.p,{children:["Create Automation with Query Activity that will take data from your technical ",(0,n.jsx)(s.a,{href:"#send-log-data-extension-template",children:"template-based Send Log"})," and ",(0,n.jsx)(s.a,{href:"/docs/config/sfmc-system-data-views",children:"System Data Views"})," to populate your Enhanced Send Log DE with actionable data."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-sql",children:"SELECT\n sl.SubscriberKey AS SubscriberKey\n , sl.SubID AS SubscriberID\n , sl.EmailAddr AS EmailAddress\n , sl.BusinessSpecificField1 AS BusinessSpecificField1\n , sl.BusinessSpecificField2 AS BusinessSpecificField2\n , sl.EmailName AS EmailName\n , j.JourneyName AS JourneyName\n , j.VersionNumber AS JourneyVersion\n , sl.LogDate AS LogDate\n , s.EventDate AS SentDate\n , CASE\n WHEN s.EventDate IS NULL THEN 'False'\n WHEN job.DeliveredTime IS NOT NULL THEN CONVERT(NVARCHAR, job.DeliveredTime)\n WHEN b.EventDate IS NOT NULL THEN 'False'\n WHEN o.EventDate IS NOT NULL OR c.EventDate IS NOT NULL THEN 'True'\n WHEN s.EventDate > DATEADD(MINUTE, -15, GETDATE()) THEN 'Pending'\n ELSE 'True'\n END AS Delivered\n , CASE\n WHEN o.EventDate IS NOT NULL THEN o.EventDate\n WHEN c.EventDate IS NOT NULL THEN c.EventDate\n END AS FirstOpenDate\n , c.EventDate AS FirstClickDate\n , b.EventDate AS BounceDate\n , sl.JobID AS JobID\n , sl.ListID AS ListID\n , sl.BatchID AS BatchID\n , sl.TriggeredSendID AS TriggeredSendID\n , sl.ErrorCode AS ErrorCode\nFROM TechnicalSendLog AS sl\n LEFT JOIN _Job AS job\n ON sl.JobID = job.JobID\n LEFT JOIN _Sent AS s\n ON sl.JobID = s.JobID\n AND sl.ListID = s.ListID\n AND sl.BatchID = s.BatchID\n AND sl.SubID = s.SubscriberID\n LEFT JOIN _Open AS o\n ON s.JobID = o.JobID\n AND s.ListID = o.ListID\n AND s.BatchID = o.BatchID\n AND s.SubscriberID = o.SubscriberID\n AND o.IsUnique = 1\n LEFT JOIN _Click AS c\n ON s.JobID = c.JobID\n AND s.ListID = c.ListID\n AND s.BatchID = c.BatchID\n AND s.SubscriberID = c.SubscriberID\n AND c.IsUnique = 1\n LEFT JOIN _Bounce AS b\n ON s.JobID = b.JobID\n AND s.ListID = b.ListID\n AND s.BatchID = b.BatchID\n AND s.SubscriberID = b.SubscriberID\n AND b.IsUnique = 1\n LEFT JOIN _JourneyActivity AS ja\n ON s.TriggererSendDefinitionObjectID = ja.JourneyActivityObjectID\n LEFT JOIN _Journey AS j\n ON ja.VersionID = j.VersionID\nWHERE\n sl.SubscriberKey IS NOT NULL\n AND CONVERT(DATE, sl.LogDate) >= DATEADD(MONTH, -1, CONVERT(DATE, GETDATE()))\n"})}),"\n",(0,n.jsx)(s.p,{children:"In the above query, we pull Journey Builder information and Sent, Delivered, Open, Click, Bounce information. We are also adding a custom logic that will provide more real Delivery and Open data using the fundamental assumption that if the recipient clicked something - the email had to be delivered and opened."}),"\n",(0,n.jsxs)(s.p,{children:["In the ",(0,n.jsx)(s.a,{href:"/docs/sql/sfmc-sql-where",children:(0,n.jsx)(s.code,{children:"WHERE"})})," section, we filter the data to pull only updates for sends from the last month to optimise the query performance."]}),"\n",(0,n.jsx)(s.p,{children:"Schedule that Automation nightly and share the Enhanced Send Log with your users."}),"\n",(0,n.jsx)(s.h2,{id:"send-log-errorcode-values",children:"Send Log ErrorCode Values"}),"\n",(0,n.jsxs)(s.p,{children:["List of email Send Log errorCode values from the ",(0,n.jsx)(s.a,{href:"https://help.salesforce.com/s/articleView?language=en_US&type=5&id=sf.mc_es_email_send_error_codes.htm",children:"official SFMC Documentation"}),":"]}),"\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:"Error Code"}),(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Description"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"1"}),(0,n.jsx)(s.td,{children:"Unsubscribed"}),(0,n.jsx)(s.td,{children:"The subscriber status is unsubscribed."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"2"}),(0,n.jsx)(s.td,{children:"Held"}),(0,n.jsx)(s.td,{children:"The subscriber status is held."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"3"}),(0,n.jsx)(s.td,{children:"Partner Unsubscribed"}),(0,n.jsx)(s.td,{children:"The subscriber partner system status is unsubscribed."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"4"}),(0,n.jsx)(s.td,{children:"Missing Email Address"}),(0,n.jsx)(s.td,{children:"The subscriber record or the API call that initiated the send doesn't contain an email address for the subscriber."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"5"}),(0,n.jsx)(s.td,{children:"Invalid Email Address"}),(0,n.jsx)(s.td,{children:"The subscriber email address is invalid."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"6"}),(0,n.jsx)(s.td,{children:"Duplicate Email"}),(0,n.jsx)(s.td,{children:"The subscriber email is identical to another subscriber email in this send."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"7"}),(0,n.jsx)(s.td,{children:"Invalid SubscriberID Provided"}),(0,n.jsx)(s.td,{children:"The subscriber ID is invalid."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"8"}),(0,n.jsx)(s.td,{children:"Missing Subscriber ID"}),(0,n.jsx)(s.td,{children:"The subscriber key and subscriber ID values are empty or null."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"9"}),(0,n.jsx)(s.td,{children:"Missing Owner ID"}),(0,n.jsx)(s.td,{children:"The business unit ID for the child client account is missing for this enterprise account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"10"}),(0,n.jsx)(s.td,{children:"Missing Required Attributes"}),(0,n.jsx)(s.td,{children:"The subscriber is missing required attribute values."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"11"}),(0,n.jsx)(s.td,{children:"No All Subscribers List Entry"}),(0,n.jsx)(s.td,{children:"The subscriber isn't on the AllSubscribers list for the account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"12"}),(0,n.jsx)(s.td,{children:"Invalid Owner ID Provided"}),(0,n.jsx)(s.td,{children:"The child client account isn't a member of the enterprise account."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"13"}),(0,n.jsx)(s.td,{children:"Subscriber Key Mismatch"}),(0,n.jsx)(s.td,{children:"The subscriber key in the system doesn't match the subscriber key provided."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"14"}),(0,n.jsx)(s.td,{children:"Email Address Mismatch"}),(0,n.jsx)(s.td,{children:"The email address in the system doesn't match the email address provided for this subscriber."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"15"}),(0,n.jsx)(s.td,{children:"Unspecified Error"}),(0,n.jsx)(s.td,{children:"The subscriber didn't pass validation. Contact your Marketing Cloud account representative for more information."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"16"}),(0,n.jsx)(s.td,{children:"Invalid Attribute Value"}),(0,n.jsx)(s.td,{children:"The value specified for a subscriber attribute doesn't match the attribute's data type."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"17"}),(0,n.jsx)(s.td,{children:"Attribute Value Max Length Err"}),(0,n.jsx)(s.td,{children:"The value specified for a subscriber attribute is over the maximum length allowed for the attribute."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"18"}),(0,n.jsx)(s.td,{children:"Invalid Attribute Value Count"}),(0,n.jsx)(s.td,{children:"The number of subscriber attribute values doesn't match the expected count."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"19"}),(0,n.jsx)(s.td,{children:"Missing Required Fields"}),(0,n.jsx)(s.td,{children:"Required data extension field values are missing for the subscriber."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"20"}),(0,n.jsx)(s.td,{children:"Invalid Field Value"}),(0,n.jsx)(s.td,{children:"The value specified for a data extension field doesn't match the field type."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"21"}),(0,n.jsx)(s.td,{children:"Duplicate Data Extension Row"}),(0,n.jsx)(s.td,{children:"A row in the data extension was identified as a duplicate. The triggered send data extension doesn't allow duplicate rows."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"22"}),(0,n.jsx)(s.td,{children:"Data Extension Insert Failed"}),(0,n.jsx)(s.td,{children:"The send failed to insert a row into the triggered send data extension."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"23"}),(0,n.jsx)(s.td,{children:"Domain Exclusion"}),(0,n.jsx)(s.td,{children:"A domain exclusion list excluded the subscriber."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"24"}),(0,n.jsx)(s.td,{children:"List Detective Exclusion"}),(0,n.jsx)(s.td,{children:"List Detective excluded the subscriber."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"25"}),(0,n.jsx)(s.td,{children:"Subscriber Blacked Out"}),(0,n.jsx)(s.td,{children:"The subscriber is ineligible to receive the email. Marketing Cloud reschedules the triggered send."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"26"}),(0,n.jsx)(s.td,{children:"Build Email Error"}),(0,n.jsx)(s.td,{children:"An error occurred when attempting to build an email for the subscriber."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"27"}),(0,n.jsx)(s.td,{children:"Suppression List Exclusion"}),(0,n.jsx)(s.td,{children:"The subscriber is on a suppression list and is ineligible to receive the email."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"28"}),(0,n.jsx)(s.td,{children:"Opt Out List Exclusion"}),(0,n.jsx)(s.td,{children:"The subscriber is on an opt-out list and ineligible to receive the email."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"29"}),(0,n.jsx)(s.td,{children:"Missing Subscriber Key Value"}),(0,n.jsx)(s.td,{children:"The subscriber key value is null or empty."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"30"}),(0,n.jsx)(s.td,{children:"Subscriber Key Too Long"}),(0,n.jsx)(s.td,{children:"The subscriber key value exceeds the character limit."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"37"}),(0,n.jsx)(s.td,{children:"Queued Transaction Deleted"}),(0,n.jsx)(s.td,{children:"The queued email subscriber was deleted from the Triggered Send Queue using Clear Queue"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"39"}),(0,n.jsx)(s.td,{children:"Subscriber Queue Cleared"}),(0,n.jsx)(s.td,{children:"The queued SMS subscriber was deleted from the Triggered Send Queue."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"40"}),(0,n.jsx)(s.td,{children:"Subscriber Deleted"}),(0,n.jsx)(s.td,{children:"Subscriber or contact is deleted and can't be added to Marketing Cloud."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"138"}),(0,n.jsx)(s.td,{children:"Exceeded Expiration Policy"}),(0,n.jsx)(s.td,{children:"Paused triggered sends that were later resumed without clearing the queue sent old messages that were no longer relevant."})]})]})]})]})}function x(e={}){const{wrapper:s}={...(0,d.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1872:(e,s,t)=>{t.d(s,{m:()=>i});t(7294);const n="leadText_qzwo";var d=t(5893);const i=e=>{let{content:s}=e;return(0,d.jsx)(d.Fragment,{children:(0,d.jsx)("p",{id:n,children:s})})}},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>r});var n=t(7294);const d={},i=n.createContext(d);function r(e){const s=n.useContext(i);return n.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(d):e.components||d:r(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f564aeae.7ebdc609.js b/assets/js/f564aeae.7ebdc609.js deleted file mode 100644 index 76c8cfdf4..000000000 --- a/assets/js/f564aeae.7ebdc609.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[1572],{4137:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?l(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function d(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},l=Object.keys(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=n.createContext({}),s=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=s(t.components);return n.createElement(o.Provider,{value:e},t.children)},m="mdxType",p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},g=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,u=d(t,["components","mdxType","originalType","parentName"]),m=s(a),g=r,c=m["".concat(o,".").concat(g)]||m[g]||p[g]||l;return a?n.createElement(c,i(i({ref:e},u),{},{components:a})):n.createElement(c,i({ref:e},u))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=g;var d={};for(var o in e)hasOwnProperty.call(e,o)&&(d[o]=e[o]);d.originalType=t,d[m]="string"==typeof t?t:r,i[1]=d;for(var s=2;s<l;s++)i[s]=a[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}g.displayName="MDXCreateElement"},1872:(t,e,a)=>{a.d(e,{m:()=>l});var n=a(7294);const r="leadText_qzwo",l=t=>{let{content:e}=t;return n.createElement(n.Fragment,null,n.createElement("p",{id:r},e))}},621:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>d,default:()=>g,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(7462),r=(a(7294),a(4137)),l=a(1872);const i={id:"sfmc-enhanced-send-log",title:"SFMC Enhanced Send Log",sidebar_label:"Enhanced Send Log",description:"Create, customise and enhance SFMC Send Log for debugging and reporting.",image:"img/og/og-image-sql-enhanced-send-log.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},d=void 0,o={unversionedId:"config/sfmc-enhanced-send-log",id:"config/sfmc-enhanced-send-log",title:"SFMC Enhanced Send Log",description:"Create, customise and enhance SFMC Send Log for debugging and reporting.",source:"@site/docs/config/sfmc-enhanced-send-log.mdx",sourceDirName:"config",slug:"/config/sfmc-enhanced-send-log",permalink:"/docs/config/sfmc-enhanced-send-log",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/config/sfmc-enhanced-send-log.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SQL",permalink:"/docs/tags/sql"},{label:"Snippet",permalink:"/docs/tags/snippet"},{label:"Email",permalink:"/docs/tags/email"},{label:"Debugging",permalink:"/docs/tags/debugging"},{label:"Analytics",permalink:"/docs/tags/analytics"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1695799131,formattedLastUpdatedAt:"Sep 27, 2023",frontMatter:{id:"sfmc-enhanced-send-log",title:"SFMC Enhanced Send Log",sidebar_label:"Enhanced Send Log",description:"Create, customise and enhance SFMC Send Log for debugging and reporting.",image:"img/og/og-image-sql-enhanced-send-log.png",tags:["Marketing Cloud","SQL","Snippet","Email","Debugging","Analytics"]},sidebar:"docs",previous:{title:"Contact Deletion Process",permalink:"/docs/config/sfmc-contact-deletion"},next:{title:"Behavioral Triggers",permalink:"/docs/config/sfmc-behavioral-triggers"}},s={},u=[{value:"What is Send Log",id:"what-is-send-log",level:2},{value:"Send Log Data Extension Template",id:"send-log-data-extension-template",level:3},{value:"Send Log vs _Sent System Data View",id:"send-log-vs-_sent-system-data-view",level:3},{value:"1. Captured data is not precisely the same.",id:"1-captured-data-is-not-precisely-the-same",level:4},{value:"2. You can customise the Send Log",id:"2-you-can-customise-the-send-log",level:4},{value:"Custom Send Log",id:"custom-send-log",level:2},{value:"Customised Send Log Example",id:"customised-send-log-example",level:3},{value:"Enhanced Send Log",id:"enhanced-send-log",level:2},{value:"Enhanced Send Log Example",id:"enhanced-send-log-example",level:3},{value:"Enhanced Send Log SQL Query Activity",id:"enhanced-send-log-sql-query-activity",level:3},{value:"Send Log ErrorCode Values",id:"send-log-errorcode-values",level:2}],m={toc:u},p="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(p,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)(l.m,{content:"Create, customise and enhance SFMC Send Log for debugging and reporting.",mdxType:"LeadText"}),(0,r.kt)("h2",{id:"what-is-send-log"},"What is Send Log"),(0,r.kt)("p",null,"Send Log is a table that captures relevant data about sends happening in the platform. In the case of Salesforce Marketing Cloud, it is a unique Data Extension that automatically captures the data (no need for AMPScript or SSJS to populate it)."),(0,r.kt)("p",null,"SFMC doesn't have Send Log out of the box, but you can make one yourself. On the first screen of Data Extension creation, select ",(0,r.kt)("inlineCode",{parentName:"p"},"Create From Template")," in the ",(0,r.kt)("inlineCode",{parentName:"p"},"Creation Method")," field. You will see a picklist with multiple templates, including ",(0,r.kt)("inlineCode",{parentName:"p"},"SendLog")," (for Emails), ",(0,r.kt)("inlineCode",{parentName:"p"},"SMSSendLog")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PushSendLog"),". If you do not see any of those templates - you might need to request this as a free ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-features-on-demand"},"feature on demand"),"."),(0,r.kt)("p",null,"Once you create it, it will automatically populate with each attempted send originating from its Business Unit."),(0,r.kt)("h3",{id:"send-log-data-extension-template"},"Send Log Data Extension Template"),(0,r.kt)("p",null,"The Send Log template comes with six default fields:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Length"),(0,r.kt)("th",{parentName:"tr",align:null},"Primary Key"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JobID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ListID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TriggeredSendID"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"36"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ErrorCode"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"JobID")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"BatchID")," allow you to differentiate the send if you push the same email on multiple days or campaigns."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"ListID")," contains the ID of the list used for the send (for example, All Subscribers list)."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"SubID")," contains Subscriber ID - a unique Subscriber identifier, different from Subscriber Key. Subscriber ID is a backend system number that we cannot change."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"TriggeredSendID")," stores the ID of a Triggered Send Definition if it was used for the specific send."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"ErrorCode")," captures an error that stopped a specific send. I have added the list of all possible codes with an explanation ",(0,r.kt)("a",{parentName:"p",href:"#send-log-errorcode-values"},"at the bottom"),"."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If your send was not delivered, but you can see it in the Send Log without any ",(0,r.kt)("inlineCode",{parentName:"p"},"ErrorCode"),", leverage ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/snippets/sfmc-sql-debugging-email-sends"},"Email Sends Debugging Query")," to learn what happened with the message.")),(0,r.kt)("h3",{id:"send-log-vs-_sent-system-data-view"},"Send Log vs _Sent System Data View"),(0,r.kt)("p",null,"You might wonder - why use email Send Log when ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#_sent"},"_Sent Data View")," captures the same data out of the box? There are two reasons."),(0,r.kt)("h4",{id:"1-captured-data-is-not-precisely-the-same"},"1. Captured data is not precisely the same."),(0,r.kt)("p",null,"It's not only about the ",(0,r.kt)("a",{parentName:"p",href:"#send-log-errorcode-values"},(0,r.kt)("inlineCode",{parentName:"a"},"ErrorCode")," field")," in the Send Log, and multiple additional fields in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#_sent"},"_Sent Data View"),". It's also about when the data is captured."),(0,r.kt)("p",null,"Send Log is populated when SFMC prepares the send. That's why it can log ",(0,r.kt)("a",{parentName:"p",href:"#send-log-errorcode-values"},"ErrorCode")," if the send fails. The Data View is populated later when SFMC pushes a correctly constructed email out to the Email Service Providers."),(0,r.kt)("p",null,"It means that Send Log is an incredible tool to check why some emails did not go out of SFMC."),(0,r.kt)("h4",{id:"2-you-can-customise-the-send-log"},"2. You can customise the Send Log"),(0,r.kt)("p",null,"Data Views are set in stone (unless you purchase a ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views#custom-data-views"},"custom one"),"), but you can add fields to the Send Log to align it better with your business needs. Let's dive into how it works and why you should use it."),(0,r.kt)("h2",{id:"custom-send-log"},"Custom Send Log"),(0,r.kt)("p",null,"The true power of Send Log lies in the possibility to customise it. The default six columns are just beginning - you can add additional ones per your business needs. With performance in mind, I would recommend adding up to 5 custom fields."),(0,r.kt)("p",null,"Columns added to Send Log are unique because you can make them fill in automatically. How does it work?"),(0,r.kt)("p",null,"When Marketing Cloud prepares the email for sending, Send Log evaluates all available ",(0,r.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?language=en_US&type=5&id=sf.mc_es_available_personalization_strings.htm"},"personalisation strings"),", Sendable Data Extension fields and AMPScript variables. Each value that shares a name with Send Log column is automatically filled. Examples?"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you want to capture the recipient's Email Address in the SendLog, you can add the ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailAddr")," field, and it will be automatically filled thanks to ",(0,r.kt)("inlineCode",{parentName:"p"},"%%emailaddr%%")," personalisation string.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Capturing Subscriber Key is a bit tricky, as the personalisation string is ",(0,r.kt)("inlineCode",{parentName:"p"},"%%_subscriberkey%%")," - you cannot add a field starting with the underscore to Data Extension. There are two ways to capture this information. In most cases, you will have the ",(0,r.kt)("inlineCode",{parentName:"p"},"SubscriberKey")," field in the Data Extension used for sending - you can use the same column name in the Send Log. Alternatively, you can create an AMPScript variable using the personalisation string: ",(0,r.kt)("inlineCode",{parentName:"p"},"SET @SubscriberKey = AttributeValue('_subscriberkey')"),". Send Log will pick up your AMPScript variable and fill the column.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"You can also use AMPScript variables for other interesting things, like capturing information from Additional Email Attributes or custom values manually configured within the email body."))),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"In most cases, you can dry-test automatic filling by adding ",(0,r.kt)("inlineCode",{parentName:"p"},"%%[Output(Concat('SendLogColumnName: ', @SendLogColumnName))]%%")," to the bottom of the email (where ",(0,r.kt)("inlineCode",{parentName:"p"},"SendLogColumnName")," is equal to the Send Log field you want to test). This AMPScript one-liner should output ",(0,r.kt)("inlineCode",{parentName:"p"},"SendLogColumnName: ")," along with the value that SFMC would add to the Send Log. If it doesn't - there might not be an appropriate variable, or it is not assigned a value.")),(0,r.kt)("h3",{id:"customised-send-log-example"},"Customised Send Log Example"),(0,r.kt)("p",null,"Here you can see sample Customised Send Log that I like to use:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Length"),(0,r.kt)("th",{parentName:"tr",align:null},"Primary Key"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JobID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ListID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TriggeredSendID"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"36"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ErrorCode"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"EmailAddr"),(0,r.kt)("td",{parentName:"tr",align:null},"Email"),(0,r.kt)("td",{parentName:"tr",align:null},"254"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"EmailName_"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"150"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"LogDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BusinessSpecificField1"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BusinessSpecificField2"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")))),(0,r.kt)("p",null,"I always add the ",(0,r.kt)("inlineCode",{parentName:"p"},"SubscriberKey")," field (filled from a column of the same name in the Data Extension used for send) along with ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailAddr")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"EmailName_")," fields filled in from personalisation strings. I also add ",(0,r.kt)("inlineCode",{parentName:"p"},"LogDate")," field filled with current date as default to be able to filter rows based on a attempted send date."),(0,r.kt)("p",null,"As Send Log will show the data as it is at the moment of email preparation, I frequently extend it with customer-specific fields that are crucial for send-time data checks. For example - VIP status, Contact vs Lead status, assigned Account Executive."),(0,r.kt)("p",null,"All those data points can be beneficial during debugging. VIP offer sent to the standard customer? Send Log will tell you whether the Subscriber was VIP at the moment of send or it is a bug in your Journey criteria."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Another handy field that I would love to capture in the Send Log would be the name of the Data Extension used for the send. It should be possible, as there is a dedicated personalisation string: ",(0,r.kt)("inlineCode",{parentName:"p"},"%%_DataSourceName%%"),". But..."),(0,r.kt)("p",{parentName:"admonition"},"You can add the ",(0,r.kt)("inlineCode",{parentName:"p"},"DataSourceName")," field to Send Log and ",(0,r.kt)("inlineCode",{parentName:"p"},"SET @DataSourceName = AttributeValue('_datasourcename')")," snippet to the email. However, it will work correctly only for the Send Flow."),(0,r.kt)("p",{parentName:"admonition"},"Unfortunately, it currently does not support Journey Builder Sends. Learn more and vote for a fix ",(0,r.kt)("a",{parentName:"p",href:"../../../sites/ideas/marketing-cloud-ideas/#_datasourcename-for-entry-data-extension-in-journey-builder"},"here"),".")),(0,r.kt)("h2",{id:"enhanced-send-log"},"Enhanced Send Log"),(0,r.kt)("p",null,"Custom Send Log is already a fantastic tool, but it's more suited for administrators with its technical field names and lack of post-send data. However, you can easily leverage it to create something perfect for your more business-oriented SFMC users."),(0,r.kt)("p",null,"To do it, you will need additional Data Extension and simple Automation with single Query Activity."),(0,r.kt)("h3",{id:"enhanced-send-log-example"},"Enhanced Send Log Example"),(0,r.kt)("p",null,"Create standard Data Extension with more user-friendly names and extend it with journey and engagement data points:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Length"),(0,r.kt)("th",{parentName:"tr",align:null},"Primary Key"),(0,r.kt)("th",{parentName:"tr",align:null},"Nullable"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberKey"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"No")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SubscriberID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"EmailAddress"),(0,r.kt)("td",{parentName:"tr",align:null},"Email"),(0,r.kt)("td",{parentName:"tr",align:null},"254"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BusinessSpecificField1"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BusinessSpecificField2"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"EmailName"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"150"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JourneyName"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"100"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JourneyVersion"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"100"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"LogDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"SentDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Delivered"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"FirstOpenDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"FirstClickDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BounceDate"),(0,r.kt)("td",{parentName:"tr",align:null},"Date"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"JobID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ListID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"BatchID"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes"),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"TriggeredSendID"),(0,r.kt)("td",{parentName:"tr",align:null},"String"),(0,r.kt)("td",{parentName:"tr",align:null},"36"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ErrorCode"),(0,r.kt)("td",{parentName:"tr",align:null},"Numeric"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Yes")))),(0,r.kt)("h3",{id:"enhanced-send-log-sql-query-activity"},"Enhanced Send Log SQL Query Activity"),(0,r.kt)("p",null,"Create Automation with Query Activity that will take data from your technical Send Log and ",(0,r.kt)("a",{parentName:"p",href:"/docs/config/sfmc-system-data-views"},"System Data Views")," to populate your Enhanced Send Log DE with actionable data."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sql"},"SELECT\n sl.SubscriberKey AS SubscriberKey\n , sl.SubID AS SubscriberID\n , sl.EmailAddr AS EmailAddress\n , sl.BusinessSpecificField1 AS BusinessSpecificField1\n , sl.BusinessSpecificField2 AS BusinessSpecificField2\n , sl.EmailName AS EmailName\n , j.JourneyName AS JourneyName\n , j.VersionNumber AS JourneyVersion\n , sl.LogDate AS LogDate\n , s.EventDate AS SentDate\n , CASE\n WHEN s.EventDate IS NULL THEN 'False'\n WHEN job.DeliveredTime IS NOT NULL THEN CONVERT(NVARCHAR, job.DeliveredTime)\n WHEN b.EventDate IS NOT NULL THEN 'False'\n WHEN o.EventDate IS NOT NULL OR c.EventDate IS NOT NULL THEN 'True'\n WHEN s.EventDate > DATEADD(MINUTE, -15, GETDATE()) THEN 'Pending'\n ELSE 'True'\n END AS Delivered\n , CASE\n WHEN o.EventDate IS NOT NULL THEN o.EventDate\n WHEN c.EventDate IS NOT NULL THEN c.EventDate\n END AS FirstOpenDate\n , c.EventDate AS FirstClickDate\n , b.EventDate AS BounceDate\n , sl.JobID AS JobID\n , sl.ListID AS ListID\n , sl.BatchID AS BatchID\n , sl.TriggeredSendID AS TriggeredSendID\n , sl.ErrorCode AS ErrorCode\nFROM TechnicalSendLog AS sl\n LEFT JOIN _Job AS job\n ON sl.JobID = job.JobID\n LEFT JOIN _Sent AS s\n ON sl.JobID = s.JobID\n AND sl.ListID = s.ListID\n AND sl.BatchID = s.BatchID\n AND sl.SubID = s.SubscriberID\n LEFT JOIN _Open AS o\n ON s.JobID = o.JobID\n AND s.ListID = o.ListID\n AND s.BatchID = o.BatchID\n AND s.SubscriberID = o.SubscriberID\n AND o.IsUnique = 1\n LEFT JOIN _Click AS c\n ON s.JobID = c.JobID\n AND s.ListID = c.ListID\n AND s.BatchID = c.BatchID\n AND s.SubscriberID = c.SubscriberID\n AND c.IsUnique = 1\n LEFT JOIN _Bounce AS b\n ON s.JobID = b.JobID\n AND s.ListID = b.ListID\n AND s.BatchID = b.BatchID\n AND s.SubscriberID = b.SubscriberID\n AND b.IsUnique = 1\n LEFT JOIN _JourneyActivity AS ja\n ON s.TriggererSendDefinitionObjectID = ja.JourneyActivityObjectID\n LEFT JOIN _Journey AS j\n ON ja.VersionID = j.VersionID\nWHERE\n sl.SubscriberKey IS NOT NULL\n AND CONVERT(DATE, sl.LogDate) >= DATEADD(MONTH, -1, CONVERT(DATE, GETDATE()))\n")),(0,r.kt)("p",null,"In the above query, we pull Journey Builder information and Sent, Delivered, Open, Click, Bounce information. We are also adding a custom logic that will provide more real Delivery and Open data using the fundamental assumption that if the recipient clicked something - the email had to be delivered and opened."),(0,r.kt)("p",null,"In the ",(0,r.kt)("a",{parentName:"p",href:"/docs/sql/sfmc-sql-where"},(0,r.kt)("inlineCode",{parentName:"a"},"WHERE"))," section, we filter the data to pull only updates for sends from the last month to optimise the query performance."),(0,r.kt)("p",null,"Schedule that Automation nightly and share the Enhanced Send Log with your users."),(0,r.kt)("h2",{id:"send-log-errorcode-values"},"Send Log ErrorCode Values"),(0,r.kt)("p",null,"List of email Send Log errorCode values from the ",(0,r.kt)("a",{parentName:"p",href:"https://help.salesforce.com/s/articleView?language=en_US&type=5&id=sf.mc_es_email_send_error_codes.htm"},"official SFMC Documentation"),":"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Error Code"),(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"Unsubscribed"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber status is unsubscribed.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"Held"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber status is held.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"Partner Unsubscribed"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber partner system status is unsubscribed.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"Missing Email Address"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber record or the API call that initiated the send doesn't contain an email address for the subscriber.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalid Email Address"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber email address is invalid.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"Duplicate Email"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber email is identical to another subscriber email in this send.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalid SubscriberID Provided"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber ID is invalid.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"Missing Subscriber ID"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key and subscriber ID values are empty or null.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"Missing Owner ID"),(0,r.kt)("td",{parentName:"tr",align:null},"The business unit ID for the child client account is missing for this enterprise account.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"Missing Required Attributes"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber is missing required attribute values.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"No All Subscribers List Entry"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber isn't on the AllSubscribers list for the account.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalid Owner ID Provided"),(0,r.kt)("td",{parentName:"tr",align:null},"The child client account isn't a member of the enterprise account.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"13"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber Key Mismatch"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key in the system doesn't match the subscriber key provided.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"Email Address Mismatch"),(0,r.kt)("td",{parentName:"tr",align:null},"The email address in the system doesn't match the email address provided for this subscriber.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"15"),(0,r.kt)("td",{parentName:"tr",align:null},"Unspecified Error"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber didn't pass validation. Contact your Marketing Cloud account representative for more information.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalid Attribute Value"),(0,r.kt)("td",{parentName:"tr",align:null},"The value specified for a subscriber attribute doesn't match the attribute's data type.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"17"),(0,r.kt)("td",{parentName:"tr",align:null},"Attribute Value Max Length Err"),(0,r.kt)("td",{parentName:"tr",align:null},"The value specified for a subscriber attribute is over the maximum length allowed for the attribute.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalid Attribute Value Count"),(0,r.kt)("td",{parentName:"tr",align:null},"The number of subscriber attribute values doesn't match the expected count.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"19"),(0,r.kt)("td",{parentName:"tr",align:null},"Missing Required Fields"),(0,r.kt)("td",{parentName:"tr",align:null},"Required data extension field values are missing for the subscriber.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"Invalid Field Value"),(0,r.kt)("td",{parentName:"tr",align:null},"The value specified for a data extension field doesn't match the field type.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"21"),(0,r.kt)("td",{parentName:"tr",align:null},"Duplicate Data Extension Row"),(0,r.kt)("td",{parentName:"tr",align:null},"A row in the data extension was identified as a duplicate. The triggered send data extension doesn't allow duplicate rows.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"22"),(0,r.kt)("td",{parentName:"tr",align:null},"Data Extension Insert Failed"),(0,r.kt)("td",{parentName:"tr",align:null},"The send failed to insert a row into the triggered send data extension.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"23"),(0,r.kt)("td",{parentName:"tr",align:null},"Domain Exclusion"),(0,r.kt)("td",{parentName:"tr",align:null},"A domain exclusion list excluded the subscriber.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"24"),(0,r.kt)("td",{parentName:"tr",align:null},"List Detective Exclusion"),(0,r.kt)("td",{parentName:"tr",align:null},"List Detective excluded the subscriber.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"25"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber Blacked Out"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber is ineligible to receive the email. Marketing Cloud reschedules the triggered send.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"26"),(0,r.kt)("td",{parentName:"tr",align:null},"Build Email Error"),(0,r.kt)("td",{parentName:"tr",align:null},"An error occurred when attempting to build an email for the subscriber.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"27"),(0,r.kt)("td",{parentName:"tr",align:null},"Suppression List Exclusion"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber is on a suppression list and is ineligible to receive the email.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"28"),(0,r.kt)("td",{parentName:"tr",align:null},"Opt Out List Exclusion"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber is on an opt-out list and ineligible to receive the email.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"29"),(0,r.kt)("td",{parentName:"tr",align:null},"Missing Subscriber Key Value"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key value is null or empty.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"30"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber Key Too Long"),(0,r.kt)("td",{parentName:"tr",align:null},"The subscriber key value exceeds the character limit.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"37"),(0,r.kt)("td",{parentName:"tr",align:null},"Queued Transaction Deleted"),(0,r.kt)("td",{parentName:"tr",align:null},"The queued email subscriber was deleted from the Triggered Send Queue using Clear Queue")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"39"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber Queue Cleared"),(0,r.kt)("td",{parentName:"tr",align:null},"The queued SMS subscriber was deleted from the Triggered Send Queue.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"40"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber Deleted"),(0,r.kt)("td",{parentName:"tr",align:null},"Subscriber or contact is deleted and can't be added to Marketing Cloud.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"138"),(0,r.kt)("td",{parentName:"tr",align:null},"Exceeded Expiration Policy"),(0,r.kt)("td",{parentName:"tr",align:null},"Paused triggered sends that were later resumed without clearing the queue sent old messages that were no longer relevant.")))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f881cc1a.11f5b3c0.js b/assets/js/f881cc1a.c06a2035.js similarity index 89% rename from assets/js/f881cc1a.11f5b3c0.js rename to assets/js/f881cc1a.c06a2035.js index 9287a0fcf..a3b9dde52 100644 --- a/assets/js/f881cc1a.11f5b3c0.js +++ b/assets/js/f881cc1a.c06a2035.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2907],{6216:e=>{e.exports=JSON.parse('{"label":"Deliverability","permalink":"/docs/tags/deliverability","allTagsPath":"/docs/tags","count":2,"items":[{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2907],{6216:e=>{e.exports=JSON.parse('{"label":"Deliverability","permalink":"/docs/tags/deliverability","allTagsPath":"/docs/tags","count":2,"items":[{"id":"webinars/sfmc-webinar-account-architecture","title":"SFMC Account Architecture","description":"Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.","permalink":"/docs/webinars/sfmc-webinar-account-architecture"},{"id":"config/sfmc-features-on-demand","title":"SFMC Features On Demand","description":"Discover the Salesforce Marketing Cloud Features On Demand and unlock platform potential.","permalink":"/docs/config/sfmc-features-on-demand"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/fcb5ea75.49291732.js b/assets/js/fcb5ea75.c5d8153c.js similarity index 81% rename from assets/js/fcb5ea75.49291732.js rename to assets/js/fcb5ea75.c5d8153c.js index b28b15b2e..dad1c1372 100644 --- a/assets/js/fcb5ea75.49291732.js +++ b/assets/js/fcb5ea75.c5d8153c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[633],{96:e=>{e.exports=JSON.parse('{"label":"Personalization","permalink":"/sites/tags/personalization","allTagsPath":"/sites/tags","count":1,"items":[{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC.","permalink":"/sites/newsletter"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[633],{96:e=>{e.exports=JSON.parse('{"label":"Personalization","permalink":"/sites/tags/personalization","allTagsPath":"/sites/tags","count":1,"items":[{"id":"newsletter","title":"Newsletter","description":"Get yet another email in your inbox. This time, about SFMC.","permalink":"/sites/newsletter"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/fd9368c3.172e512b.js b/assets/js/fd9368c3.172e512b.js new file mode 100644 index 000000000..2069712a8 --- /dev/null +++ b/assets/js/fd9368c3.172e512b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7805],{7244:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=a(5893),n=a(1151),o=a(1872);a(7271);const r={id:"mcp-catalog-etl-metadata-viewer",title:"MCP Catalog ETL Metadata Viewer",sidebar_label:"Catalog ETL Metadata Viewer",description:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",image:"img/og/og-image-mcp-catalog-etl-metadata-viewer.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","TypeScript","Data Management"]},s=void 0,l={id:"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",title:"MCP Catalog ETL Metadata Viewer",description:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",source:"@site/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer.mdx",sourceDirName:"interaction-studio/snippets",slug:"/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",permalink:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"TypeScript",permalink:"/docs/tags/type-script"},{label:"Data Management",permalink:"/docs/tags/data-management"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"mcp-catalog-etl-metadata-viewer",title:"MCP Catalog ETL Metadata Viewer",sidebar_label:"Catalog ETL Metadata Viewer",description:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",image:"img/og/og-image-mcp-catalog-etl-metadata-viewer.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","TypeScript","Data Management"]},sidebar:"snippets",previous:{title:"MC Personalization Snippets",permalink:"/docs/category/mc-personalization-snippets"}},d={},c=[{value:"Problem with debugging Catalog data",id:"problem-with-debugging-catalog-data",level:2},{value:"Solution",id:"solution",level:2},{value:"Implementation Guide",id:"implementation-guide",level:3},{value:"Serverside Code",id:"serverside-code",level:3},{value:"Limitations",id:"limitations",level:2},{value:"Data scope",id:"data-scope",level:3},{value:"Data quality",id:"data-quality",level:3},{value:"Context.event.fields.item",id:"contexteventfieldsitem",level:3},{value:"Options",id:"options",level:2}];function u(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.m,{content:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code."}),"\n",(0,i.jsx)(t.h2,{id:"problem-with-debugging-catalog-data",children:"Problem with debugging Catalog data"}),"\n",(0,i.jsxs)(t.p,{children:["Marketing Cloud Personalization (Interaction Studio) can pull ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-catalog-architecture",children:"product, content and related catalog data"})," from multiple sources and does it continuously. That's perfect when all works great, but debugging features are minimal once you see some data discrepancies."]}),"\n",(0,i.jsx)(t.p,{children:"Sure, SFTP stores processed CSV Feed files, but finding the culprit takes work, especially if you push frequently with delta files."}),"\n",(0,i.jsx)(t.p,{children:"Knowing which exact ETL load introduced problematic attribute values is a tremendous help in finding the root cause of the issue and rectifying the data pipeline. While it is available only for custom attributes (hover over the value to see it), we can:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://ideas.salesforce.com/s/idea/a0B8W00000NWbmJUAT/full-mcp-catalog-metadata-visibility",children:"Vote for IdeaExchange"})," to make it perfect out-of-the-box."]}),"\n",(0,i.jsx)(t.li,{children:"Build a more powerful custom solution for it in the meantime."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"solution",children:"Solution"}),"\n",(0,i.jsxs)(t.p,{children:["Inspired by the excellent User Metadata Serverside template created by ",(0,i.jsx)(t.a,{href:"https://www.linkedin.com/in/christopherlong/",children:"Christopher Long"})," available ",(0,i.jsx)(t.a,{href:"https://github.com/christopher-longSFDC/mcp/wiki/Serverside-Templates",children:"here"})," I decided to create something similar for the Catalog Object data."]}),"\n",(0,i.jsx)(t.p,{children:"A Serverside Template that leverages built-in Simulated Payload Preview available in Template Editor to display hidden changelog for ETL updates: attribute's current value, timeframe it was first introduced and first CSV that provided it to MCP."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="Example response"',children:'"item": {\n "attributes": {\n "archived": {\n "value": false,\n "addedBySource": "ETL",\n "addedByFile": "product-2022-12-05_08-19-35.csv",\n "addedDate": "Dec 05 2022 07:25:30"\n },\n "brand":{\n "value":"Apple",\n "addedBySource":"Not ETL"\n }\n }\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This approach leverages native features of the platform to access unsurfaced data in a techy but easily transferable format."}),"\n",(0,i.jsxs)(t.p,{children:["Additionally, it's a great way to showcase some ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-serverside-code-basics",children:"MCP Serverside Code"})," approaches that can be useful for building standard campaign templates."]}),"\n",(0,i.jsx)(t.h3,{id:"implementation-guide",children:"Implementation Guide"}),"\n",(0,i.jsx)(t.p,{children:"Implementation is straightforward, and you can have a working solution within a minute."}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Go to SFMC \xbb Personalization"}),"\n",(0,i.jsx)(t.li,{children:"On the left pane, hover over Server-Side and click on Server-Side and Triggered Templates"}),"\n",(0,i.jsx)(t.li,{children:"Click New Template"}),"\n",(0,i.jsx)(t.li,{children:'Provide a meaningful name (for example: "Catalog ETL Metadata Viewer")'}),"\n",(0,i.jsx)(t.li,{children:"Copy-paste the code available below"}),"\n",(0,i.jsx)(t.li,{children:"Save"}),"\n",(0,i.jsx)(t.li,{children:"Use :)"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"You don't need to Publish a template to leverage the Simulated Payload Preview. Keeping it unpublished guarantees no one will use it for a live Campaign."}),"\n",(0,i.jsx)(t.h3,{id:"serverside-code",children:"Serverside Code"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ts",children:"export class CatalogETLMetadataViewer implements CampaignTemplateComponent {\n\n @header(' ')\n\n @markdown(`\n##### How to use\n\nIn the Payload Preview pane on the right:\n\n1. Select catalog object in the Current Item Type\n2. Select item in the Current Item\n3. View the Details in the section below\n\nOptionally, you can modify the scope of returned data in the left Configuration pane.\n`)\n\n @title('Item attribute metadata to display:')\n @subtitle('File and Change Date are available only for the ETL Source.')\n showItemAttributeDetails: ('Value'|'Source'|'File'|'Change Date'|'Locale')[] = ['Value', 'Source', 'File', 'Change Date'];\n\n @markdown(`Platform displays partially incorrect data when you manually Save Item in the Catalog, learn more [here](https://mateuszdabrowski.pl/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/).`)\n\n @title('Item non-attribute values to display:')\n @subtitle('Only values are available - no Source/File/Change Date/Locale data is exposed by the platform.')\n showItemContextDetails: ('ID'|'Location'|'Related Catalog Objects'|'Categories'|'SKUs')[];\n\n run(context: CampaignComponentContext) {\n // Pulls Catalog Object type from Simulation configuration\n const itemType = context.event.itemType();\n // Pulls selected Item ID from Simulation configuration\n const itemId = JSON.parse(context.event.fields.item as string)._id.value;\n // Pulls full Item data from the Catalog\n const itemDetail = context.services.catalog.findItem(itemType, itemId);\n\n // Prepares the payload response according to Configuration pane\n function itemProcessor(item, config) {\n let processedItem = {\n attributes: {},\n };\n const attributes = processedItem.attributes;\n\n const makeEpochReadableAgain = epoch => String(new Date(epoch)).substring(4, 24);\n\n // Conditional non-attribute data stuffing\n if (config.itemContext?.includes('ID')) processedItem['id'] = item.id;\n if (config.itemContext?.includes('SKUs')) processedItem['skus'] = item.skus;\n if (config.itemContext?.includes('Categories')) processedItem['categories'] = item.categories;\n if (config.itemContext?.includes('Related Catalog Objects')) processedItem['relatedCatalogObjects'] = item.dimensions;\n if (config.itemContext?.includes('Locations')) processedItem['locations'] = item.locations;\n\n // Conditional attribute data stuffing with processing\n for (const [attribute, attributeData] of (<any>Object).entries(item.attributes)) {\n let processedAttributes = {};\n\n if (config.itemAttributes?.includes('Value')) processedAttributes['value'] = attributeData.value;\n if (Number.isInteger(attributeData.value) && attributeData.value > 10e10) processedAttributes['readableValue'] = makeEpochReadableAgain(attributeData.value);\n if (config.itemAttributes?.includes('Source')) processedAttributes['addedBySource'] = attributeData.metadata?.origin || 'Not ETL';\n if (config.itemAttributes?.includes('File') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedByFile'] = attributeData.metadata?.provider.substring(16);\n if (config.itemAttributes?.includes('Change Date') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedDate'] = makeEpochReadableAgain(attributeData.metadata?.lastUpdated);\n if (config.itemAttributes?.includes('Locale')) processedAttributes['locale'] = attributeData.locale;\n\n attributes[attribute] = processedAttributes;\n }\n\n return processedItem\n }\n\n // Outputs final payload to the Payload Preview pane\n return {\n item: itemProcessor(itemDetail, {itemAttributes: this.showItemAttributeDetails, itemContext: this.showItemContextDetails}),\n };\n }\n}\n"})}),"\n",(0,i.jsx)(t.h2,{id:"limitations",children:"Limitations"}),"\n",(0,i.jsxs)(t.p,{children:["While this solution can benefit ",(0,i.jsx)(t.a,{href:"/docs/interaction-studio/mcp-catalog-architecture",children:"MCP Catalog Object"})," debugging, there are a few significant limitations."]}),"\n",(0,i.jsx)(t.h3,{id:"data-scope",children:"Data scope"}),"\n",(0,i.jsx)(t.p,{children:"Unfortunately, at the moment, the platform surfaces metadata only for Catalog Items updated using ETL. Any other source (Manual update, Web or Mobile SDK) provides only current value but no information about the last change or the exact Source (apart from it not being an ETL)."}),"\n",(0,i.jsx)(t.p,{children:"Additionally, the metadata returned for the ETL uploads provides only the file name and timestamp that first introduced the current value. There is no option to check what was the previous value."}),"\n",(0,i.jsx)(t.p,{children:"It is still very helpful to understand whether the MC Personalization overwrote the attribute using incorrect ETL data and which CSVs you should check to confirm the pipeline issues."}),"\n",(0,i.jsx)(t.h3,{id:"data-quality",children:"Data quality"}),"\n",(0,i.jsx)(t.p,{children:"Another huge caveat with the metadata is that Manual changes through the Catalog UI create many issues by silently changing attribute values and/or metadata. Example behaviours:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Manual changes to field value retain metadata information of the previous value source (so values marked as coming from both ",(0,i.jsx)(t.code,{children:"ETL"})," and ",(0,i.jsx)(t.code,{children:"Not ETL"})," Sources could be introduced via UI)."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"price"}),", ",(0,i.jsx)(t.code,{children:"listPrice"}),", ",(0,i.jsx)(t.code,{children:"margin"}),", ",(0,i.jsx)(t.code,{children:"published"}),", and ",(0,i.jsx)(t.code,{children:"expiration"})," are being changed from ",(0,i.jsx)(t.code,{children:"ETL"})," to ",(0,i.jsx)(t.code,{children:"Not ETL"})," Source even when manual changes weren't touching those attributes."]}),"\n",(0,i.jsxs)(t.li,{children:["if ",(0,i.jsx)(t.code,{children:"expiration"})," was ",(0,i.jsx)(t.code,{children:"NULL"}),", it gets set to timestamp 100 years in the future"]}),"\n",(0,i.jsxs)(t.li,{children:["if ",(0,i.jsx)(t.code,{children:"margin"})," was ",(0,i.jsx)(t.code,{children:"NULL"}),", it gets set to 0"]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"It is awful, but hopefully, only a few manual changes are happening in the production dataset, and this issue will be minimal. Still, it's worth remembering this when the metadata preview doesn't match data in the CSV."}),"\n",(0,i.jsx)(t.h3,{id:"contexteventfieldsitem",children:"Context.event.fields.item"}),"\n",(0,i.jsxs)(t.p,{children:["While ",(0,i.jsx)(t.code,{children:"context.event.fields.item"})," is perfect for the use case described here, don't try to use it in standard Campaigns. Unfortunately, it is filled in only in the Simulation Preview and will not be available when deployed to a website. It is a massive limitation with one dirty workaround."]}),"\n",(0,i.jsx)(t.p,{children:"To get a similar outcome in an actual campaign, you have to:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Create a string User Attribute to store the last viewed product ID."}),"\n",(0,i.jsxs)(t.li,{children:["In the Sitemap, extend the Product View Page Type ",(0,i.jsx)(t.code,{children:"onActionEvent"})," to push the current product ID to the attribute created in the previous step."]}),"\n",(0,i.jsxs)(t.li,{children:["Leverage ",(0,i.jsx)(t.code,{children:"context?.user?.attributes?.nameOfYourNewAttribute"})," to get the ID and leverage it for .findItem and other purposes."]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"options",children:"Options"}),"\n",(0,i.jsx)(t.p,{children:"I created the current version of the solution with an easy-to-use, straightforward interface leveraging out-of-the-box features of the platform. However, you can extend the code with an additional field accepting a list of IDs to return payloads for multiple items in a single run to facilitate faster debugging."})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},7271:(e,t,a)=>{a.d(t,{V:()=>o,z:()=>n});a(7294);var i=a(5893);const n=e=>{let{link:t,text:a,newTab:n=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:n?"_blank":"_self",children:a})})},o=e=>{let{linkLeft:t,textLeft:a,newTabLeft:n=!1,linkRight:o,textRight:r,newTabRight:s=!1}=e;return(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{class:"col col--12",children:[(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:n?"_blank":"_self",children:a}),(0,i.jsx)("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:s?"_blank":"_self",children:r})]})})}},1872:(e,t,a)=>{a.d(t,{m:()=>o});a(7294);const i="leadText_qzwo";var n=a(5893);const o=e=>{let{content:t}=e;return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("p",{id:i,children:t})})}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var i=a(7294);const n={},o=i.createContext(n);function r(e){const t=i.useContext(o);return i.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(n):e.components||n:r(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fd9368c3.cd3f9f7b.js b/assets/js/fd9368c3.cd3f9f7b.js deleted file mode 100644 index ce4d17047..000000000 --- a/assets/js/fd9368c3.cd3f9f7b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7805],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>g});var i=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,i,n=function(e,t){if(null==e)return{};var a,i,n={},o=Object.keys(e);for(i=0;i<o.length;i++)a=o[i],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)a=o[i],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=i.createContext({}),d=function(e){var t=i.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},u=function(e){var t=d(e.components);return i.createElement(s.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=d(a),m=n,g=c["".concat(s,".").concat(m)]||c[m]||p[m]||o;return a?i.createElement(g,r(r({ref:t},u),{},{components:a})):i.createElement(g,r({ref:t},u))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:n,r[1]=l;for(var d=2;d<o;d++)r[d]=a[d];return i.createElement.apply(null,r)}return i.createElement.apply(null,a)}m.displayName="MDXCreateElement"},7271:(e,t,a)=>{a.d(t,{V:()=>o,z:()=>n});var i=a(7294);const n=e=>{let{link:t,text:a,newTab:n=!1}=e;return i.createElement(i.Fragment,null,i.createElement("a",{class:"button button--outline button--lg button--primary col col--6 col--offset-3",href:t,target:n?"_blank":"_self"},a))},o=e=>{let{linkLeft:t,textLeft:a,newTabLeft:n=!1,linkRight:o,textRight:r,newTabRight:l=!1}=e;return i.createElement(i.Fragment,null,i.createElement("div",{class:"col col--12"},i.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-0",href:t,target:n?"_blank":"_self"},a),i.createElement("a",{class:"button button--outline button--lg button--primary col col--5 col--offset-2",href:o,target:l?"_blank":"_self"},r)))}},1872:(e,t,a)=>{a.d(t,{m:()=>o});var i=a(7294);const n="leadText_qzwo",o=e=>{let{content:t}=e;return i.createElement(i.Fragment,null,i.createElement("p",{id:n},t))}},6823:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var i=a(7462),n=(a(7294),a(4137)),o=a(1872);a(7271);const r={id:"mcp-catalog-etl-metadata-viewer",title:"MCP Catalog ETL Metadata Viewer",sidebar_label:"Catalog ETL Metadata Viewer",description:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",image:"img/og/og-image-mcp-catalog-etl-metadata-viewer.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","TypeScript","Data Management"]},l=void 0,s={unversionedId:"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",id:"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",title:"MCP Catalog ETL Metadata Viewer",description:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",source:"@site/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer.mdx",sourceDirName:"interaction-studio/snippets",slug:"/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",permalink:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"TypeScript",permalink:"/docs/tags/type-script"},{label:"Data Management",permalink:"/docs/tags/data-management"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"mcp-catalog-etl-metadata-viewer",title:"MCP Catalog ETL Metadata Viewer",sidebar_label:"Catalog ETL Metadata Viewer",description:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",image:"img/og/og-image-mcp-catalog-etl-metadata-viewer.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","TypeScript","Data Management"]},sidebar:"snippets",previous:{title:"MC Personalization Snippets",permalink:"/docs/category/mc-personalization-snippets"}},d={},u=[{value:"Problem with debugging Catalog data",id:"problem-with-debugging-catalog-data",level:2},{value:"Solution",id:"solution",level:2},{value:"Implementation Guide",id:"implementation-guide",level:3},{value:"Serverside Code",id:"serverside-code",level:3},{value:"Limitations",id:"limitations",level:2},{value:"Data scope",id:"data-scope",level:3},{value:"Data quality",id:"data-quality",level:3},{value:"Context.event.fields.item",id:"contexteventfieldsitem",level:3},{value:"Options",id:"options",level:2}],c={toc:u},p="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,i.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(o.m,{content:"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.",mdxType:"LeadText"}),(0,n.kt)("h2",{id:"problem-with-debugging-catalog-data"},"Problem with debugging Catalog data"),(0,n.kt)("p",null,"Marketing Cloud Personalization (Interaction Studio) can pull ",(0,n.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-catalog-architecture"},"product, content and related catalog data")," from multiple sources and does it continuously. That's perfect when all works great, but debugging features are minimal once you see some data discrepancies."),(0,n.kt)("p",null,"Sure, SFTP stores processed CSV Feed files, but finding the culprit takes work, especially if you push frequently with delta files."),(0,n.kt)("p",null,"Knowing which exact ETL load introduced problematic attribute values is a tremendous help in finding the root cause of the issue and rectifying the data pipeline. While it is available only for custom attributes (hover over the value to see it), we can:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://ideas.salesforce.com/s/idea/a0B8W00000NWbmJUAT/full-mcp-catalog-metadata-visibility"},"Vote for IdeaExchange")," to make it perfect out-of-the-box."),(0,n.kt)("li",{parentName:"ol"},"Build a more powerful custom solution for it in the meantime.")),(0,n.kt)("h2",{id:"solution"},"Solution"),(0,n.kt)("p",null,"Inspired by the excellent User Metadata Serverside template created by ",(0,n.kt)("a",{parentName:"p",href:"https://www.linkedin.com/in/christopherlong/"},"Christopher Long")," available ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/christopher-longSFDC/mcp/wiki/Serverside-Templates"},"here")," I decided to create something similar for the Catalog Object data."),(0,n.kt)("p",null,"A Serverside Template that leverages built-in Simulated Payload Preview available in Template Editor to display hidden changelog for ETL updates: attribute's current value, timeframe it was first introduced and first CSV that provided it to MCP."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="Example response"',title:'"Example','response"':!0},'"item": {\n "attributes": {\n "archived": {\n "value": false,\n "addedBySource": "ETL",\n "addedByFile": "product-2022-12-05_08-19-35.csv",\n "addedDate": "Dec 05 2022 07:25:30"\n },\n "brand":{\n "value":"Apple",\n "addedBySource":"Not ETL"\n }\n }\n}\n')),(0,n.kt)("p",null,"This approach leverages native features of the platform to access unsurfaced data in a techy but easily transferable format."),(0,n.kt)("p",null,"Additionally, it's a great way to showcase some ",(0,n.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-serverside-code-basics"},"MCP Serverside Code")," approaches that can be useful for building standard campaign templates."),(0,n.kt)("h3",{id:"implementation-guide"},"Implementation Guide"),(0,n.kt)("p",null,"Implementation is straightforward, and you can have a working solution within a minute."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Go to SFMC \xbb Personalization"),(0,n.kt)("li",{parentName:"ol"},"On the left pane, hover over Server-Side and click on Server-Side and Triggered Templates"),(0,n.kt)("li",{parentName:"ol"},"Click New Template"),(0,n.kt)("li",{parentName:"ol"},'Provide a meaningful name (for example: "Catalog ETL Metadata Viewer")'),(0,n.kt)("li",{parentName:"ol"},"Copy-paste the code available below"),(0,n.kt)("li",{parentName:"ol"},"Save"),(0,n.kt)("li",{parentName:"ol"},"Use :)")),(0,n.kt)("p",null,"You don't need to Publish a template to leverage the Simulated Payload Preview. Keeping it unpublished guarantees no one will use it for a live Campaign."),(0,n.kt)("h3",{id:"serverside-code"},"Serverside Code"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-ts"},"export class CatalogETLMetadataViewer implements CampaignTemplateComponent {\n\n @header(' ')\n\n @markdown(`\n##### How to use\n\nIn the Payload Preview pane on the right:\n\n1. Select catalog object in the Current Item Type\n2. Select item in the Current Item\n3. View the Details in the section below\n\nOptionally, you can modify the scope of returned data in the left Configuration pane.\n`)\n\n @title('Item attribute metadata to display:')\n @subtitle('File and Change Date are available only for the ETL Source.')\n showItemAttributeDetails: ('Value'|'Source'|'File'|'Change Date'|'Locale')[] = ['Value', 'Source', 'File', 'Change Date'];\n\n @markdown(`Platform displays partially incorrect data when you manually Save Item in the Catalog, learn more [here](https://mateuszdabrowski.pl/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/).`)\n\n @title('Item non-attribute values to display:')\n @subtitle('Only values are available - no Source/File/Change Date/Locale data is exposed by the platform.')\n showItemContextDetails: ('ID'|'Location'|'Related Catalog Objects'|'Categories'|'SKUs')[];\n\n run(context: CampaignComponentContext) {\n // Pulls Catalog Object type from Simulation configuration\n const itemType = context.event.itemType();\n // Pulls selected Item ID from Simulation configuration\n const itemId = JSON.parse(context.event.fields.item as string)._id.value;\n // Pulls full Item data from the Catalog\n const itemDetail = context.services.catalog.findItem(itemType, itemId);\n\n // Prepares the payload response according to Configuration pane\n function itemProcessor(item, config) {\n let processedItem = {\n attributes: {},\n };\n const attributes = processedItem.attributes;\n\n const makeEpochReadableAgain = epoch => String(new Date(epoch)).substring(4, 24);\n\n // Conditional non-attribute data stuffing\n if (config.itemContext?.includes('ID')) processedItem['id'] = item.id;\n if (config.itemContext?.includes('SKUs')) processedItem['skus'] = item.skus;\n if (config.itemContext?.includes('Categories')) processedItem['categories'] = item.categories;\n if (config.itemContext?.includes('Related Catalog Objects')) processedItem['relatedCatalogObjects'] = item.dimensions;\n if (config.itemContext?.includes('Locations')) processedItem['locations'] = item.locations;\n\n // Conditional attribute data stuffing with processing\n for (const [attribute, attributeData] of (<any>Object).entries(item.attributes)) {\n let processedAttributes = {};\n\n if (config.itemAttributes?.includes('Value')) processedAttributes['value'] = attributeData.value;\n if (Number.isInteger(attributeData.value) && attributeData.value > 10e10) processedAttributes['readableValue'] = makeEpochReadableAgain(attributeData.value);\n if (config.itemAttributes?.includes('Source')) processedAttributes['addedBySource'] = attributeData.metadata?.origin || 'Not ETL';\n if (config.itemAttributes?.includes('File') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedByFile'] = attributeData.metadata?.provider.substring(16);\n if (config.itemAttributes?.includes('Change Date') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedDate'] = makeEpochReadableAgain(attributeData.metadata?.lastUpdated);\n if (config.itemAttributes?.includes('Locale')) processedAttributes['locale'] = attributeData.locale;\n\n attributes[attribute] = processedAttributes;\n }\n\n return processedItem\n }\n\n // Outputs final payload to the Payload Preview pane\n return {\n item: itemProcessor(itemDetail, {itemAttributes: this.showItemAttributeDetails, itemContext: this.showItemContextDetails}),\n };\n }\n}\n")),(0,n.kt)("h2",{id:"limitations"},"Limitations"),(0,n.kt)("p",null,"While this solution can benefit ",(0,n.kt)("a",{parentName:"p",href:"/docs/interaction-studio/mcp-catalog-architecture"},"MCP Catalog Object")," debugging, there are a few significant limitations."),(0,n.kt)("h3",{id:"data-scope"},"Data scope"),(0,n.kt)("p",null,"Unfortunately, at the moment, the platform surfaces metadata only for Catalog Items updated using ETL. Any other source (Manual update, Web or Mobile SDK) provides only current value but no information about the last change or the exact Source (apart from it not being an ETL)."),(0,n.kt)("p",null,"Additionally, the metadata returned for the ETL uploads provides only the file name and timestamp that first introduced the current value. There is no option to check what was the previous value."),(0,n.kt)("p",null,"It is still very helpful to understand whether the MC Personalization overwrote the attribute using incorrect ETL data and which CSVs you should check to confirm the pipeline issues."),(0,n.kt)("h3",{id:"data-quality"},"Data quality"),(0,n.kt)("p",null,"Another huge caveat with the metadata is that Manual changes through the Catalog UI create many issues by silently changing attribute values and/or metadata. Example behaviours:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Manual changes to field value retain metadata information of the previous value source (so values marked as coming from both ",(0,n.kt)("inlineCode",{parentName:"li"},"ETL")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"Not ETL")," Sources could be introduced via UI)."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("inlineCode",{parentName:"li"},"price"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"listPrice"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"margin"),", ",(0,n.kt)("inlineCode",{parentName:"li"},"published"),", and ",(0,n.kt)("inlineCode",{parentName:"li"},"expiration")," are being changed from ",(0,n.kt)("inlineCode",{parentName:"li"},"ETL")," to ",(0,n.kt)("inlineCode",{parentName:"li"},"Not ETL")," Source even when manual changes weren't touching those attributes."),(0,n.kt)("li",{parentName:"ol"},"if ",(0,n.kt)("inlineCode",{parentName:"li"},"expiration")," was ",(0,n.kt)("inlineCode",{parentName:"li"},"NULL"),", it gets set to timestamp 100 years in the future"),(0,n.kt)("li",{parentName:"ol"},"if ",(0,n.kt)("inlineCode",{parentName:"li"},"margin")," was ",(0,n.kt)("inlineCode",{parentName:"li"},"NULL"),", it gets set to 0")),(0,n.kt)("p",null,"It is awful, but hopefully, only a few manual changes are happening in the production dataset, and this issue will be minimal. Still, it's worth remembering this when the metadata preview doesn't match data in the CSV."),(0,n.kt)("h3",{id:"contexteventfieldsitem"},"Context.event.fields.item"),(0,n.kt)("p",null,"While ",(0,n.kt)("inlineCode",{parentName:"p"},"context.event.fields.item")," is perfect for the use case described here, don't try to use it in standard Campaigns. Unfortunately, it is filled in only in the Simulation Preview and will not be available when deployed to a website. It is a massive limitation with one dirty workaround."),(0,n.kt)("p",null,"To get a similar outcome in an actual campaign, you have to:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Create a string User Attribute to store the last viewed product ID."),(0,n.kt)("li",{parentName:"ol"},"In the Sitemap, extend the Product View Page Type ",(0,n.kt)("inlineCode",{parentName:"li"},"onActionEvent")," to push the current product ID to the attribute created in the previous step."),(0,n.kt)("li",{parentName:"ol"},"Leverage ",(0,n.kt)("inlineCode",{parentName:"li"},"context?.user?.attributes?.nameOfYourNewAttribute")," to get the ID and leverage it for .findItem and other purposes.")),(0,n.kt)("h2",{id:"options"},"Options"),(0,n.kt)("p",null,"I created the current version of the solution with an easy-to-use, straightforward interface leveraging out-of-the-box features of the platform. However, you can extend the code with an additional field accepting a list of IDs to return payloads for multiple items in a single run to facilitate faster debugging."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fe4d0c3d.08defbff.js b/assets/js/fe4d0c3d.08defbff.js new file mode 100644 index 000000000..973886e1e --- /dev/null +++ b/assets/js/fe4d0c3d.08defbff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8700],{9099:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var n=i(5893),a=i(1151),l=i(1872);const o={id:"mcp-open-time-email",title:"MCP Open Time Email",sidebar_label:"Open Time Email",description:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",image:"img/og/og-image-mcp-open-time-email.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","Email"]},r=void 0,s={id:"interaction-studio/mcp-open-time-email",title:"MCP Open Time Email",description:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",source:"@site/docs/interaction-studio/mcp-open-time-email.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-open-time-email",permalink:"/docs/interaction-studio/mcp-open-time-email",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-open-time-email.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Email",permalink:"/docs/tags/email"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"mcp-open-time-email",title:"MCP Open Time Email",sidebar_label:"Open Time Email",description:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",image:"img/og/og-image-mcp-open-time-email.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","Email"]},sidebar:"docs",previous:{title:"Serverside Code Context",permalink:"/docs/interaction-studio/mcp-serverside-code-context"}},c={},d=[{value:"What is Open Time Email Campaign",id:"what-is-open-time-email-campaign",level:2},{value:"Open Time Email Template",id:"open-time-email-template",level:2},{value:"Basic OTE Template",id:"basic-ote-template",level:3},{value:"Attributes vs Custom Fields",id:"attributes-vs-custom-fields",level:3},{value:"Formatting values",id:"formatting-values",level:3},{value:"Fallback for null values",id:"fallback-for-null-values",level:3},{value:"Conditional content with if/else",id:"conditional-content-with-ifelse",level:3},{value:"Related Catalog Object support",id:"related-catalog-object-support",level:3},{value:"Example dynamic OTE Template",id:"example-dynamic-ote-template",level:2}];function m(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.m,{content:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic."}),"\n",(0,n.jsx)(t.h2,{id:"what-is-open-time-email-campaign",children:"What is Open Time Email Campaign"}),"\n",(0,n.jsxs)(t.p,{children:["In short, Open Time Email Campaign in Marketing Cloud Personalization (Interaction Studio) is a solution for providing ",(0,n.jsx)(t.strong,{children:"always up-to-date"}),", personalised recommendations to your customers."]}),"\n",(0,n.jsx)(t.p,{children:"The general rule of email communication is that the moment you send the email, you lose control and cannot make any changes (just like with paper mail). There are, however, two exceptions:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Links"})," - you cannot change the URL used in the email, but (if you use wrapper/tracking links), you can change the final target URL. In Marketing Cloud, it is done via ",(0,n.jsx)(t.a,{href:"https://help.salesforce.com/s/articleView?id=sf.mc_es_update_joblinks_overview.htm",children:"updating Job Links"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Images"})," - you cannot change the URL of the image used in the email, but you can change the image that is hosted behind that URL. It is precisely what the Open Time Email feature in MC Personalization is all about."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["It consists of two parts. In ",(0,n.jsx)(t.strong,{children:"Open Time Email Template"}),", you define the format of the recommendation (dimensions, content, personalisations). Then in ",(0,n.jsx)(t.strong,{children:"Open Time Email Campaign"}),", you use that template with selected recommendations logic (Einstein Recipe) to automatically generate HTML that will render the ever-updating Next Best Action in your emails. But..."]}),"\n",(0,n.jsx)(t.p,{children:"There are three caveats:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Open Time Email recommendation is an image (that's the only way to enable updating after sending), which means that the inboxes that hide images by default will not display the recommendations."}),"\n",(0,n.jsx)(t.li,{children:"Some inboxes cache images. In this case, the customer might not see the updates to the recommendation, or they might be delayed."}),"\n",(0,n.jsx)(t.li,{children:"Apple Mail Privacy blocks the magic behind the Open Time Email and falls back to a static recommendation generated on send time."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"With that out of the way, let's dive into what is officially possible and what is possible with MCP Open Time Email."}),"\n",(0,n.jsx)(t.h2,{id:"open-time-email-template",children:"Open Time Email Template"}),"\n",(0,n.jsx)(t.p,{children:"To create an Open Time Email Campaign, first, you need to code the structure of the recommendation with HTML, CSS and personalisations. MC Personalization will use it to generate the image on the fly."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Good thing"}),": because this HTML will be used for image generation and will not be available in the final Campaign, you are not limited to markup supported by Email clients."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Bad thing"}),": because MCP will use this HTML for image generation, you are not able to leverage custom fonts - there are only ",(0,n.jsx)(t.a,{href:"https://doc.evergage.com/display/EKB/Create+Open-Time+Item+Templates#CreateOpenTimeItemTemplates-AvailableFontsforEmail",children:"17 built-in western"})," and ",(0,n.jsx)(t.a,{href:"https://developer.evergage.com/campaign-development/email-campaigns-and-templates/render-non-western-characters",children:"4 non-western"})," fonts to choose from."]}),"\n",(0,n.jsx)(t.p,{children:"To start building the template, you need to provide the dimensions of the final image. It is super important because once you select and save those, you won't be able to edit them. Those dimensions are for the recommendation image only - you will be configuring the whole campaign dimensions separately in the Open Time Email Campaign configuration, so leave some pixels for whitespace."}),"\n",(0,n.jsx)(t.admonition,{title:"You Should Know",type:"note",children:(0,n.jsx)(t.p,{children:'Open Time Email code editor isn\'t very robust and likes to crash completly if there is a "wrong" set of characters for it to preview. I recommend writing code outside and just copy-pasting it into OTE for validation to not lose the work progress.'})}),"\n",(0,n.jsx)(t.h3,{id:"basic-ote-template",children:"Basic OTE Template"}),"\n",(0,n.jsxs)(t.p,{children:["Building the template requires basic HTML & CSS knowledge and leveraging the built-in ",(0,n.jsx)(t.code,{children:"Insert {Dynamic}"})," personalisation option to connect the code boilerplate with catalog data."]}),"\n",(0,n.jsx)(t.p,{children:"The most popular boilerplate will leverage product image, name and price plus a call to action. The basic approach could look like this:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",children:'<div style="padding:10px; text-align:center; font-family: Arial;">\n <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">\n <div style="text-align:left;">\n ${item.name}\n </div>\n <div style="margin-top:5px; text-align:left;">\n $currency.format(${item.price})\n </div>\n <div style="position:absolute; left: 0px; right: 0px; bottom: 10px;">\n <button style="border:none; padding: 10px; background:#1D73C9; color:#ffffff; font-size:16px;">\n Buy now \xbb\n </button>\n </div>\n</div>\n'})}),"\n",(0,n.jsx)(t.p,{children:"You can see a whole section wrapped in a div that sets the font and padding for proper spacing and three key elements within it:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"img"})," for displaying how the product looks (with ",(0,n.jsx)(t.code,{children:"max-width"})," & ",(0,n.jsx)(t.code,{children:"max-height"})," to control non-standard images)"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"div"}),"s with name and price personalisation strings (we will talk about the format difference in a moment)"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"div"})," with a button (we don't need any link because the whole final image will be a link)"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"That's it. You can add more personalisation strings - including those using attributes defined on the catalog object. You can also write nicer HTML with a separate CSS style section (and either way - be sure to test the code a lot with edge cases from your catalog). But in the end - it will be just a boilerplate for an image you can preview directly in the editor."}),"\n",(0,n.jsx)(t.p,{children:'It\'s okay, but you can quickly come up with the "what if..." scenarios (f.e. showing both current price and listPrice only if there is a promotion or displaying a placeholder if the image is broken) that would require a bit more control over the template. Thankfully, some undocumented features can solve those needs.'}),"\n",(0,n.jsx)(t.h3,{id:"attributes-vs-custom-fields",children:"Attributes vs Custom Fields"}),"\n",(0,n.jsxs)(t.p,{children:["When you select ",(0,n.jsx)(t.code,{children:"Insert {Dynamic}"}),", you will find both Attributes and Custom Field options at the bottom of the picklist."]}),"\n",(0,n.jsx)(t.p,{children:"That differentiation is a mess, as depending on the product value, you can use one, two or all three:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Difference in scope"',children:"// ID\n${item.id} // Returns Product ID\n${item.attributes.published.value} // Error generating preview image: Unfulfilled variable\n${item.custom.customDatetime} // Error generating preview image: Unfulfilled variable\n\n// Name\n${item.name} // Returns Product Name\n${item.attributes.name.value} // Returns Product Name\n${item.custom.name} // Returns Product Name\n\n// Published Date\n${item.published} // Returns Product Published Date\n${item.attributes.published.value} // Returns Product Published Date\n${item.custom.published} // Error generating preview image: Unfulfilled variable\n"})}),"\n",(0,n.jsx)(t.p,{children:"To make it even more chaotic, the formatting of the output might be different:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Difference in output"',children:"${item.published} // Wed Nov 30 23:00:00 UTC 2022\n${item.attributes.published.value} // 1669849200000\n\n${item.attributes.customDatetime.value} // 1672182000000\n${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z\n"})}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["While the ",(0,n.jsx)(t.code,{children:"Insert {Dynamic}"})," will suggest you should use ",(0,n.jsx)(t.code,{children:"${item.attributes.xxxx.value}"})," notation for custom attributes, this is not always true."]}),(0,n.jsx)(t.p,{children:'If you try this style for an Object or MultiString (Array) attribute, it will instead crash with: "Error generating preview image: Failed to render DMC for template [email]".'}),(0,n.jsxs)(t.p,{children:["Marketing Cloud Personalization will display the value correctly if you drop the ",(0,n.jsx)(t.code,{children:".value"})," suffix from the personalisation string: ",(0,n.jsx)(t.code,{children:"${item.attributes.MultiStringAttribute}"}),"."]})]}),"\n",(0,n.jsx)(t.h3,{id:"formatting-values",children:"Formatting values"}),"\n",(0,n.jsx)(t.p,{children:"The only working formatting option I was able to find are the currency ones:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"$currency.format(${item.price}) // 49,00\n$currency.formatNumber(${item.price},0) // 49\n"})}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"$currency.formatNumber(decimal, scale)"})," lets you provide second argument to define the number of decimal places in the formatted value."]}),(0,n.jsx)(t.p,{children:"If scale is smaller than original value - it will be rounded. If scale is higher - zeroes will be added."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"// For item.price === 39,99\n$currency.formatNumber(${item.price},0) // 40\n$currency.formatNumber(${item.price},1) // 40,0\n$currency.formatNumber(${item.price},2) // 39,99\n$currency.formatNumber(${item.price},3) // 39,990\n"})})]}),"\n",(0,n.jsx)(t.p,{children:"Currency formatting isn't limited to built-in price and listPrice. You can leverage it also for any custom integer or decimal attribute:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"$currency.format(${item.attributes.decimalAttribute.value})\n"})}),"\n",(0,n.jsx)(t.p,{children:"There is also a pseudo-formatting hack for datetime fields, but it is lacking:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Various datetime outputs"',children:"${item.published} // Wed Nov 30 23:00:00 UTC 2022\n${item.attributes.published.value} // 1669849200000\n\n${item.attributes.customDatetime.value} // 1672182000000\n${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z\n"})}),"\n",(0,n.jsxs)(t.p,{children:["As you can see, the built-in datetime attributes return a semi-readable date, ",(0,n.jsx)(t.code,{children:"item.attributes"})," is outputting epoch timestamp (for both built-in and custom attributes) and the ",(0,n.jsx)(t.code,{children:"item.custom"})," returns the full ISO format. Neither is remotely useful for Open Time Email..."]}),"\n",(0,n.jsxs)(t.p,{children:["Applying the ",(0,n.jsx)(t.code,{children:".getDate()"})," or ",(0,n.jsx)(t.code,{children:".substring()"})," methods leads to an error."]}),"\n",(0,n.jsx)(t.h3,{id:"fallback-for-null-values",children:"Fallback for null values"}),"\n",(0,n.jsxs)(t.p,{children:["The first problem you may encounter with the official implementation is crashing on ",(0,n.jsx)(t.code,{children:"null"})," values. If you want to leverage a product attribute for personalisation (for example, the brand with ",(0,n.jsx)(t.code,{children:"${item.attributes.brand.value}"}),'), products missing this value will error out with "Error generating preview image: Unfulfilled variable".']}),"\n",(0,n.jsxs)(t.p,{children:["Thankfully, there is a solution for it - a ",(0,n.jsx)(t.code,{children:"#field()"})," function:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"#field(${item.attributes.brand.value}, 'Fallback Value')\n"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"#field()"})," functions expect two parameters:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"The personalisation you want to use"}),"\n",(0,n.jsxs)(t.li,{children:["The fallback value. It can be either a string or another variable. However, you cannot nest the ",(0,n.jsx)(t.code,{children:"#field()"})," function as a parameter of the ",(0,n.jsx)(t.code,{children:"#field()"})," function, so if you decide to use another variable, be sure it is filled in for all the products."]}),"\n"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Field function with two variables as parameters"',children:"#field(${item.attributes.customPromotionalImageUrl.value}, ${item.imageUrl})\n"})}),"\n",(0,n.jsxs)(t.p,{children:["In most cases, the most useful way to use ",(0,n.jsx)(t.code,{children:"#field()"})," will be with fallback to an empty string, as it will just hide the personalisation from the image while protecting against the error:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Field function with empty fallback"',children:"#field(${item.attributes.brand.value}, '')\n"})}),"\n",(0,n.jsx)(t.p,{children:"If you want to add a fallback for formatted currency value, you need to wrap it around the formatting function:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:'title="Fallback for formatted custom decimal attribute"',children:"#field($currency.format(${item.attributes.decimalAttribute.value}), '')\n"})}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["Once again, the MultiString attributes are problematic, as they are not considered ",(0,n.jsx)(t.code,{children:"null"})," when empty and will show ",(0,n.jsx)(t.code,{children:"[]"})," instead (ignoring the fallback)."]}),(0,n.jsxs)(t.p,{children:["Empty Object fields fall back correctly when they are truly empty. However, once you fill them with a JSON Object, UI will no longer let you truly empty that field, forcing you to write at least ",(0,n.jsx)(t.code,{children:"{}"})," and leading to the same issue as with MultiString."]})]}),"\n",(0,n.jsx)(t.h3,{id:"conditional-content-with-ifelse",children:"Conditional content with if/else"}),"\n",(0,n.jsxs)(t.p,{children:["Sometimes you need more than just a fallback for a ",(0,n.jsx)(t.code,{children:"null"})," value. When it is not about the ",(0,n.jsx)(t.code,{children:"null"})," or there are more conditions to check, ",(0,n.jsx)(t.code,{children:"if"}),"/",(0,n.jsx)(t.code,{children:"else"})," is the best. Thankfully, it also can be leveraged in OTE:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'{3,7} title="Show strike-through listPrice only if the current price is lower"',children:'<div style="text-align:left;">\n $currency.format(${item.price})\n \x3c!-- #if(${item.listPrice} > ${item.price}) --\x3e\n <span style="font-size: 14px; text-decoration: line-through;">\n $currency.format(${item.listPrice})\n </span>\n \x3c!-- #end --\x3e\n</div>\n'})}),"\n",(0,n.jsxs)(t.p,{children:["As you can see, for the ",(0,n.jsx)(t.code,{children:"if"})," block you need to use HTML comment notation with ",(0,n.jsx)(t.code,{children:"#if()"})," and ",(0,n.jsx)(t.code,{children:"#end"})," statements. The ",(0,n.jsx)(t.code,{children:"#if()"})," accepts parameters that return a boolean, just as in ",(0,n.jsxs)(t.a,{href:"/docs/js/js-if-and-switch",children:["JavaScript ",(0,n.jsx)(t.code,{children:"if"})]}),"."]}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["The Object and MultiString attributes do not work correctly with ",(0,n.jsx)(t.code,{children:"if"}),"/",(0,n.jsx)(t.code,{children:"else"})," statements."]}),(0,n.jsxs)(t.p,{children:["If you test Object or MultiString with basic ",(0,n.jsx)(t.code,{children:"#if(${item.attributes.attributeName})"}),", it will be treated as true even for an empty field. And even though ",(0,n.jsx)(t.code,{children:"${item.attributes.MultiStringAttribute}"})," will output ",(0,n.jsx)(t.code,{children:"[]"})," doing ",(0,n.jsx)(t.code,{children:"#if(${item.attributes.attributeName} == [])"})," or ",(0,n.jsx)(t.code,{children:"#if(${item.attributes.attributeName} == '[]')"})," will return false."]})]}),"\n",(0,n.jsxs)(t.p,{children:["You can add more condition-based paths with ",(0,n.jsx)(t.code,{children:"#else"}),":"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'{3} title="If imageUrl is not proper .jpg link, display placeholder image"',children:'\x3c!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith(\'.jpg\')}) --\x3e\n <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">\n\x3c!-- #else --\x3e\n <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">\n\x3c!-- #end --\x3e\n'})}),"\n",(0,n.jsxs)(t.admonition,{title:"You Should Know",type:"note",children:[(0,n.jsxs)(t.p,{children:["While the ",(0,n.jsx)(t.code,{children:"if"}),"/",(0,n.jsx)(t.code,{children:"else"})," block in the Open Time Email Template works similarly to what you may know from JavaScript or SSJS, it has one huge disadvantage - it is evaluating code in all paths."]}),(0,n.jsx)(t.p,{children:"It means that even if MC Personalization is not using a path for the final image generation, the code written there can still error out the whole Campaign. Example:"}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'{2} title="Will error out for a product without Brand"',children:"\x3c!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) --\x3e\n ${item.attributes.brand.value}\n\x3c!-- #end --\x3e\n"})}),(0,n.jsx)(t.p,{children:"Even with checking whether there is a value behind the Brand attribute and only then personalising it, a template with such code would still error out for products without a brand."}),(0,n.jsxs)(t.p,{children:["Always use ",(0,n.jsx)(t.a,{href:"#fallback-for-null-values",children:"fallbacks"})," along with ",(0,n.jsx)(t.code,{children:"if"}),"/",(0,n.jsx)(t.code,{children:"else"})," blocks:"]}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'{2} title="Will NOT error out for a product without Brand"',children:"\x3c!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) --\x3e\n #field(${item.attributes.brand.value}, '')\n\x3c!-- #end --\x3e\n"})})]}),"\n",(0,n.jsx)(t.h3,{id:"related-catalog-object-support",children:"Related Catalog Object support"}),"\n",(0,n.jsx)(t.p,{children:"Unfortunatelly support for Related Catalog Objects is heavily limited in Open Time Email."}),"\n",(0,n.jsxs)(t.p,{children:["You can leverage ",(0,n.jsx)(t.code,{children:'${item.getTagValue("YourRelatedCatalogObject")}'})," call to return the ID of the Item in RCO but you won't be able to get any other information (like name or URL of that Item). Additionally, if you have one-to-many relationship, you will still get only one ID for the first related Item. Due to those limitations, I recommend using it only if you have RCO with one-to-one relationship and readable IDs (for example, ",(0,n.jsx)(t.code,{children:"RED"})," as an ID in the Color RCO)."]}),"\n",(0,n.jsxs)(t.p,{children:["The workaround for other use cases is to pass the crucial RCO data as custom attributes on the Product (for example,",(0,n.jsx)(t.code,{children:"productColorName"})," attribute if you are using numeric IDs for colors in the RCO). It's not perfect as it duplicates the data and eats up attributes, but it is currently the only way you will be able to leverage that information in OTE."]}),"\n",(0,n.jsx)(t.h2,{id:"example-dynamic-ote-template",children:"Example dynamic OTE Template"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-html",metastring:'title="OTE Template with image fallback, null attribute fallbacks and conditional promo price display"',children:'<div style="padding:10px; text-align:center; font-family:Arial; font-size:16px;">\n \x3c!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith(\'.jpg\')}) --\x3e\n <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">\n \x3c!-- #else --\x3e\n <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">\n \x3c!-- #end --\x3e\n <div style="text-align:left;">\n <span style="font-size:14px; color:#212121;">\n #field(${item.attributes.categoryName.value}, \'\')\n </span>\n \x3c!-- #if (!${item.attributes.categoryName.value}) --\x3e\n <br />\n \x3c!-- #end --\x3e\n <span style="margin-top:5px; overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;">\n #field(${item.attributes.brand.value}, \'\') $item.name\n </span>\n </div>\n <div style="margin-top:5px; text-align:left;">\n $currency.format(${item.price})\n \x3c!-- #if(${item.listPrice} > ${item.price}) --\x3e\n <span style="font-size:14px; color:#212121;text-decoration:line-through;">\n $currency.format(${item.listPrice})\n </span>\n \x3c!-- #end --\x3e\n </div>\n <div style="position:absolute; left:0px; right:0px; bottom:10px;">\n <button style="border:none; padding:10px; background-color:#1D73C9; color:#ffffff;">\n Buy now \xbb\n </button>\n </div>\n</div>\n'})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},1872:(e,t,i)=>{i.d(t,{m:()=>l});i(7294);const n="leadText_qzwo";var a=i(5893);const l=e=>{let{content:t}=e;return(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("p",{id:n,children:t})})}},1151:(e,t,i)=>{i.d(t,{Z:()=>r,a:()=>o});var n=i(7294);const a={},l=n.createContext(a);function o(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe4d0c3d.3a405712.js b/assets/js/fe4d0c3d.3a405712.js deleted file mode 100644 index 85956bc5c..000000000 --- a/assets/js/fe4d0c3d.3a405712.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[8700],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>h});var i=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function r(e,t){if(null==e)return{};var a,i,n=function(e,t){if(null==e)return{};var a,i,n={},o=Object.keys(e);for(i=0;i<o.length;i++)a=o[i],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)a=o[i],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=i.createContext({}),m=function(e){var t=i.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=m(e.components);return i.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=r(e,["components","mdxType","originalType","parentName"]),u=m(a),d=n,h=u["".concat(s,".").concat(d)]||u[d]||c[d]||o;return a?i.createElement(h,l(l({ref:t},p),{},{components:a})):i.createElement(h,l({ref:t},p))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=d;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[u]="string"==typeof e?e:n,l[1]=r;for(var m=2;m<o;m++)l[m]=a[m];return i.createElement.apply(null,l)}return i.createElement.apply(null,a)}d.displayName="MDXCreateElement"},1872:(e,t,a)=>{a.d(t,{m:()=>o});var i=a(7294);const n="leadText_qzwo",o=e=>{let{content:t}=e;return i.createElement(i.Fragment,null,i.createElement("p",{id:n},t))}},5945:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var i=a(7462),n=(a(7294),a(4137)),o=a(1872);const l={id:"mcp-open-time-email",title:"MCP Open Time Email",sidebar_label:"Open Time Email",description:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",image:"img/og/og-image-mcp-open-time-email.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","Email"]},r=void 0,s={unversionedId:"interaction-studio/mcp-open-time-email",id:"interaction-studio/mcp-open-time-email",title:"MCP Open Time Email",description:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",source:"@site/docs/interaction-studio/mcp-open-time-email.mdx",sourceDirName:"interaction-studio",slug:"/interaction-studio/mcp-open-time-email",permalink:"/docs/interaction-studio/mcp-open-time-email",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/interaction-studio/mcp-open-time-email.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"Marketing Cloud Personalization",permalink:"/docs/tags/marketing-cloud-personalization"},{label:"Interaction Studio",permalink:"/docs/tags/interaction-studio"},{label:"Personalisation",permalink:"/docs/tags/personalisation"},{label:"Email",permalink:"/docs/tags/email"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1697287433,formattedLastUpdatedAt:"Oct 14, 2023",frontMatter:{id:"mcp-open-time-email",title:"MCP Open Time Email",sidebar_label:"Open Time Email",description:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",image:"img/og/og-image-mcp-open-time-email.png",tags:["Marketing Cloud","Marketing Cloud Personalization","Interaction Studio","Personalisation","Email"]},sidebar:"docs",previous:{title:"Catalog Architecture",permalink:"/docs/interaction-studio/mcp-catalog-architecture"},next:{title:"Serverside Code",permalink:"/docs/category/serverside-code"}},m={},p=[{value:"What is Open Time Email Campaign",id:"what-is-open-time-email-campaign",level:2},{value:"Open Time Email Template",id:"open-time-email-template",level:2},{value:"Basic OTE Template",id:"basic-ote-template",level:3},{value:"Attributes vs Custom Fields",id:"attributes-vs-custom-fields",level:3},{value:"Formatting values",id:"formatting-values",level:3},{value:"Fallback for null values",id:"fallback-for-null-values",level:3},{value:"Conditional content with if/else",id:"conditional-content-with-ifelse",level:3},{value:"Related Catalog Object support",id:"related-catalog-object-support",level:3},{value:"Example dynamic OTE Template",id:"example-dynamic-ote-template",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(c,(0,i.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(o.m,{content:"Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.",mdxType:"LeadText"}),(0,n.kt)("h2",{id:"what-is-open-time-email-campaign"},"What is Open Time Email Campaign"),(0,n.kt)("p",null,"In short, Open Time Email Campaign in Marketing Cloud Personalization (Interaction Studio) is a solution for providing ",(0,n.kt)("strong",{parentName:"p"},"always up-to-date"),", personalised recommendations to your customers."),(0,n.kt)("p",null,"The general rule of email communication is that the moment you send the email, you lose control and cannot make any changes (just like with paper mail). There are, however, two exceptions:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Links")," - you cannot change the URL used in the email, but (if you use wrapper/tracking links), you can change the final target URL. In Marketing Cloud, it is done via ",(0,n.kt)("a",{parentName:"li",href:"https://help.salesforce.com/s/articleView?id=sf.mc_es_update_joblinks_overview.htm"},"updating Job Links"),"."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Images")," - you cannot change the URL of the image used in the email, but you can change the image that is hosted behind that URL. It is precisely what the Open Time Email feature in MC Personalization is all about.")),(0,n.kt)("p",null,"It consists of two parts. In ",(0,n.kt)("strong",{parentName:"p"},"Open Time Email Template"),", you define the format of the recommendation (dimensions, content, personalisations). Then in ",(0,n.kt)("strong",{parentName:"p"},"Open Time Email Campaign"),", you use that template with selected recommendations logic (Einstein Recipe) to automatically generate HTML that will render the ever-updating Next Best Action in your emails. But..."),(0,n.kt)("p",null,"There are three caveats:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Open Time Email recommendation is an image (that's the only way to enable updating after sending), which means that the inboxes that hide images by default will not display the recommendations."),(0,n.kt)("li",{parentName:"ol"},"Some inboxes cache images. In this case, the customer might not see the updates to the recommendation, or they might be delayed."),(0,n.kt)("li",{parentName:"ol"},"Apple Mail Privacy blocks the magic behind the Open Time Email and falls back to a static recommendation generated on send time.")),(0,n.kt)("p",null,"With that out of the way, let's dive into what is officially possible and what is possible with MCP Open Time Email."),(0,n.kt)("h2",{id:"open-time-email-template"},"Open Time Email Template"),(0,n.kt)("p",null,"To create an Open Time Email Campaign, first, you need to code the structure of the recommendation with HTML, CSS and personalisations. MC Personalization will use it to generate the image on the fly."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Good thing"),": because this HTML will be used for image generation and will not be available in the final Campaign, you are not limited to markup supported by Email clients."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Bad thing"),": because MCP will use this HTML for image generation, you are not able to leverage custom fonts - there are only ",(0,n.kt)("a",{parentName:"p",href:"https://doc.evergage.com/display/EKB/Create+Open-Time+Item+Templates#CreateOpenTimeItemTemplates-AvailableFontsforEmail"},"17 built-in western")," and ",(0,n.kt)("a",{parentName:"p",href:"https://developer.evergage.com/campaign-development/email-campaigns-and-templates/render-non-western-characters"},"4 non-western")," fonts to choose from."),(0,n.kt)("p",null,"To start building the template, you need to provide the dimensions of the final image. It is super important because once you select and save those, you won't be able to edit them. Those dimensions are for the recommendation image only - you will be configuring the whole campaign dimensions separately in the Open Time Email Campaign configuration, so leave some pixels for whitespace."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},'Open Time Email code editor isn\'t very robust and likes to crash completly if there is a "wrong" set of characters for it to preview. I recommend writing code outside and just copy-pasting it into OTE for validation to not lose the work progress.')),(0,n.kt)("h3",{id:"basic-ote-template"},"Basic OTE Template"),(0,n.kt)("p",null,"Building the template requires basic HTML & CSS knowledge and leveraging the built-in ",(0,n.kt)("inlineCode",{parentName:"p"},"Insert {Dynamic}")," personalisation option to connect the code boilerplate with catalog data."),(0,n.kt)("p",null,"The most popular boilerplate will leverage product image, name and price plus a call to action. The basic approach could look like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html"},'<div style="padding:10px; text-align:center; font-family: Arial;">\n <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">\n <div style="text-align:left;">\n ${item.name}\n </div>\n <div style="margin-top:5px; text-align:left;">\n $currency.format(${item.price})\n </div>\n <div style="position:absolute; left: 0px; right: 0px; bottom: 10px;">\n <button style="border:none; padding: 10px; background:#1D73C9; color:#ffffff; font-size:16px;">\n Buy now \xbb\n </button>\n </div>\n</div>\n')),(0,n.kt)("p",null,"You can see a whole section wrapped in a div that sets the font and padding for proper spacing and three key elements within it:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("inlineCode",{parentName:"li"},"img")," for displaying how the product looks (with ",(0,n.kt)("inlineCode",{parentName:"li"},"max-width")," & ",(0,n.kt)("inlineCode",{parentName:"li"},"max-height")," to control non-standard images)"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("inlineCode",{parentName:"li"},"div"),"s with name and price personalisation strings (we will talk about the format difference in a moment)"),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("inlineCode",{parentName:"li"},"div")," with a button (we don't need any link because the whole final image will be a link)")),(0,n.kt)("p",null,"That's it. You can add more personalisation strings - including those using attributes defined on the catalog object. You can also write nicer HTML with a separate CSS style section (and either way - be sure to test the code a lot with edge cases from your catalog). But in the end - it will be just a boilerplate for an image you can preview directly in the editor."),(0,n.kt)("p",null,'It\'s okay, but you can quickly come up with the "what if..." scenarios (f.e. showing both current price and listPrice only if there is a promotion or displaying a placeholder if the image is broken) that would require a bit more control over the template. Thankfully, some undocumented features can solve those needs.'),(0,n.kt)("h3",{id:"attributes-vs-custom-fields"},"Attributes vs Custom Fields"),(0,n.kt)("p",null,"When you select ",(0,n.kt)("inlineCode",{parentName:"p"},"Insert {Dynamic}"),", you will find both Attributes and Custom Field options at the bottom of the picklist."),(0,n.kt)("p",null,"That differentiation is a mess, as depending on the product value, you can use one, two or all three:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Difference in scope"',title:'"Difference',in:!0,'scope"':!0},"// ID\n${item.id} // Returns Product ID\n${item.attributes.published.value} // Error generating preview image: Unfulfilled variable\n${item.custom.customDatetime} // Error generating preview image: Unfulfilled variable\n\n// Name\n${item.name} // Returns Product Name\n${item.attributes.name.value} // Returns Product Name\n${item.custom.name} // Returns Product Name\n\n// Published Date\n${item.published} // Returns Product Published Date\n${item.attributes.published.value} // Returns Product Published Date\n${item.custom.published} // Error generating preview image: Unfulfilled variable\n")),(0,n.kt)("p",null,"To make it even more chaotic, the formatting of the output might be different:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Difference in output"',title:'"Difference',in:!0,'output"':!0},"${item.published} // Wed Nov 30 23:00:00 UTC 2022\n${item.attributes.published.value} // 1669849200000\n\n${item.attributes.customDatetime.value} // 1672182000000\n${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z\n")),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"While the ",(0,n.kt)("inlineCode",{parentName:"p"},"Insert {Dynamic}")," will suggest you should use ",(0,n.kt)("inlineCode",{parentName:"p"},"${item.attributes.xxxx.value}")," notation for custom attributes, this is not always true."),(0,n.kt)("p",{parentName:"admonition"},'If you try this style for an Object or MultiString (Array) attribute, it will instead crash with: "Error generating preview image: Failed to render DMC for template ',"[","email","]",'".'),(0,n.kt)("p",{parentName:"admonition"},"Marketing Cloud Personalization will display the value correctly if you drop the ",(0,n.kt)("inlineCode",{parentName:"p"},".value")," suffix from the personalisation string: ",(0,n.kt)("inlineCode",{parentName:"p"},"${item.attributes.MultiStringAttribute}"),".")),(0,n.kt)("h3",{id:"formatting-values"},"Formatting values"),(0,n.kt)("p",null,"The only working formatting option I was able to find are the currency ones:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js"},"$currency.format(${item.price}) // 49,00\n$currency.formatNumber(${item.price},0) // 49\n")),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("inlineCode",{parentName:"p"},"$currency.formatNumber(decimal, scale)")," lets you provide second argument to define the number of decimal places in the formatted value."),(0,n.kt)("p",{parentName:"admonition"},"If scale is smaller than original value - it will be rounded. If scale is higher - zeroes will be added."),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-js"},"// For item.price === 39,99\n$currency.formatNumber(${item.price},0) // 40\n$currency.formatNumber(${item.price},1) // 40,0\n$currency.formatNumber(${item.price},2) // 39,99\n$currency.formatNumber(${item.price},3) // 39,990\n"))),(0,n.kt)("p",null,"Currency formatting isn't limited to built-in price and listPrice. You can leverage it also for any custom integer or decimal attribute:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js"},"$currency.format(${item.attributes.decimalAttribute.value})\n")),(0,n.kt)("p",null,"There is also a pseudo-formatting hack for datetime fields, but it is lacking:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Various datetime outputs"',title:'"Various',datetime:!0,'outputs"':!0},"${item.published} // Wed Nov 30 23:00:00 UTC 2022\n${item.attributes.published.value} // 1669849200000\n\n${item.attributes.customDatetime.value} // 1672182000000\n${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z\n")),(0,n.kt)("p",null,"As you can see, the built-in datetime attributes return a semi-readable date, ",(0,n.kt)("inlineCode",{parentName:"p"},"item.attributes")," is outputting epoch timestamp (for both built-in and custom attributes) and the ",(0,n.kt)("inlineCode",{parentName:"p"},"item.custom")," returns the full ISO format. Neither is remotely useful for Open Time Email..."),(0,n.kt)("p",null,"Applying the ",(0,n.kt)("inlineCode",{parentName:"p"},".getDate()")," or ",(0,n.kt)("inlineCode",{parentName:"p"},".substring()")," methods leads to an error."),(0,n.kt)("h3",{id:"fallback-for-null-values"},"Fallback for null values"),(0,n.kt)("p",null,"The first problem you may encounter with the official implementation is crashing on ",(0,n.kt)("inlineCode",{parentName:"p"},"null")," values. If you want to leverage a product attribute for personalisation (for example, the brand with ",(0,n.kt)("inlineCode",{parentName:"p"},"${item.attributes.brand.value}"),'), products missing this value will error out with "Error generating preview image: Unfulfilled variable".'),(0,n.kt)("p",null,"Thankfully, there is a solution for it - a ",(0,n.kt)("inlineCode",{parentName:"p"},"#field()")," function:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js"},"#field(${item.attributes.brand.value}, 'Fallback Value')\n")),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"#field()")," functions expect two parameters:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"The personalisation you want to use"),(0,n.kt)("li",{parentName:"ol"},"The fallback value. It can be either a string or another variable. However, you cannot nest the ",(0,n.kt)("inlineCode",{parentName:"li"},"#field()")," function as a parameter of the ",(0,n.kt)("inlineCode",{parentName:"li"},"#field()")," function, so if you decide to use another variable, be sure it is filled in for all the products.")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Field function with two variables as parameters"',title:'"Field',function:!0,with:!0,two:!0,variables:!0,as:!0,'parameters"':!0},"#field(${item.attributes.customPromotionalImageUrl.value}, ${item.imageUrl})\n")),(0,n.kt)("p",null,"In most cases, the most useful way to use ",(0,n.kt)("inlineCode",{parentName:"p"},"#field()")," will be with fallback to an empty string, as it will just hide the personalisation from the image while protecting against the error:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Field function with empty fallback"',title:'"Field',function:!0,with:!0,empty:!0,'fallback"':!0},"#field(${item.attributes.brand.value}, '')\n")),(0,n.kt)("p",null,"If you want to add a fallback for formatted currency value, you need to wrap it around the formatting function:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="Fallback for formatted custom decimal attribute"',title:'"Fallback',for:!0,formatted:!0,custom:!0,decimal:!0,'attribute"':!0},"#field($currency.format(${item.attributes.decimalAttribute.value}), '')\n")),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Once again, the MultiString attributes are problematic, as they are not considered ",(0,n.kt)("inlineCode",{parentName:"p"},"null")," when empty and will show ",(0,n.kt)("inlineCode",{parentName:"p"},"[]")," instead (ignoring the fallback)."),(0,n.kt)("p",{parentName:"admonition"},"Empty Object fields fall back correctly when they are truly empty. However, once you fill them with a JSON Object, UI will no longer let you truly empty that field, forcing you to write at least ",(0,n.kt)("inlineCode",{parentName:"p"},"{}")," and leading to the same issue as with MultiString.")),(0,n.kt)("h3",{id:"conditional-content-with-ifelse"},"Conditional content with if/else"),(0,n.kt)("p",null,"Sometimes you need more than just a fallback for a ",(0,n.kt)("inlineCode",{parentName:"p"},"null")," value. When it is not about the ",(0,n.kt)("inlineCode",{parentName:"p"},"null")," or there are more conditions to check, ",(0,n.kt)("inlineCode",{parentName:"p"},"if"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"else")," is the best. Thankfully, it also can be leveraged in OTE:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'{3,7} title="Show strike-through listPrice only if the current price is lower"',"{3,7}":!0,title:'"Show',"strike-through":!0,listPrice:!0,only:!0,if:!0,the:!0,current:!0,price:!0,is:!0,'lower"':!0},'<div style="text-align:left;">\n $currency.format(${item.price})\n \x3c!-- #if(${item.listPrice} > ${item.price}) --\x3e\n <span style="font-size: 14px; text-decoration: line-through;">\n $currency.format(${item.listPrice})\n </span>\n \x3c!-- #end --\x3e\n</div>\n')),(0,n.kt)("p",null,"As you can see, for the ",(0,n.kt)("inlineCode",{parentName:"p"},"if")," block you need to use HTML comment notation with ",(0,n.kt)("inlineCode",{parentName:"p"},"#if()")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"#end")," statements. The ",(0,n.kt)("inlineCode",{parentName:"p"},"#if()")," accepts parameters that return a boolean, just as in ",(0,n.kt)("a",{parentName:"p",href:"/docs/js/js-if-and-switch"},"JavaScript ",(0,n.kt)("inlineCode",{parentName:"a"},"if")),"."),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"The Object and MultiString attributes do not work correctly with ",(0,n.kt)("inlineCode",{parentName:"p"},"if"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"else")," statements."),(0,n.kt)("p",{parentName:"admonition"},"If you test Object or MultiString with basic ",(0,n.kt)("inlineCode",{parentName:"p"},"#if(${item.attributes.attributeName})"),", it will be treated as true even for an empty field. And even though ",(0,n.kt)("inlineCode",{parentName:"p"},"${item.attributes.MultiStringAttribute}")," will output ",(0,n.kt)("inlineCode",{parentName:"p"},"[]")," doing ",(0,n.kt)("inlineCode",{parentName:"p"},"#if(${item.attributes.attributeName} == [])")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"#if(${item.attributes.attributeName} == '[]')")," will return false.")),(0,n.kt)("p",null,"You can add more condition-based paths with ",(0,n.kt)("inlineCode",{parentName:"p"},"#else"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'{3} title="If imageUrl is not proper .jpg link, display placeholder image"',"{3}":!0,title:'"If',imageUrl:!0,is:!0,not:!0,proper:!0,".jpg":!0,"link,":!0,display:!0,placeholder:!0,'image"':!0},'\x3c!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith(\'.jpg\')}) --\x3e\n <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">\n\x3c!-- #else --\x3e\n <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">\n\x3c!-- #end --\x3e\n')),(0,n.kt)("admonition",{title:"You Should Know",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"While the ",(0,n.kt)("inlineCode",{parentName:"p"},"if"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"else")," block in the Open Time Email Template works similarly to what you may know from JavaScript or SSJS, it has one huge disadvantage - it is evaluating code in all paths."),(0,n.kt)("p",{parentName:"admonition"},"It means that even if MC Personalization is not using a path for the final image generation, the code written there can still error out the whole Campaign. Example:"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'{2} title="Will error out for a product without Brand"',"{2}":!0,title:'"Will',error:!0,out:!0,for:!0,a:!0,product:!0,without:!0,'Brand"':!0},"\x3c!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) --\x3e\n ${item.attributes.brand.value}\n\x3c!-- #end --\x3e\n")),(0,n.kt)("p",{parentName:"admonition"},"Even with checking whether there is a value behind the Brand attribute and only then personalising it, a template with such code would still error out for products without a brand."),(0,n.kt)("p",{parentName:"admonition"},"Always use ",(0,n.kt)("a",{parentName:"p",href:"#fallback-for-null-values"},"fallbacks")," along with ",(0,n.kt)("inlineCode",{parentName:"p"},"if"),"/",(0,n.kt)("inlineCode",{parentName:"p"},"else")," blocks:"),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'{2} title="Will NOT error out for a product without Brand"',"{2}":!0,title:'"Will',NOT:!0,error:!0,out:!0,for:!0,a:!0,product:!0,without:!0,'Brand"':!0},"\x3c!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) --\x3e\n #field(${item.attributes.brand.value}, '')\n\x3c!-- #end --\x3e\n"))),(0,n.kt)("h3",{id:"related-catalog-object-support"},"Related Catalog Object support"),(0,n.kt)("p",null,"Unfortunatelly support for Related Catalog Objects is heavily limited in Open Time Email."),(0,n.kt)("p",null,"You can leverage ",(0,n.kt)("inlineCode",{parentName:"p"},'${item.getTagValue("YourRelatedCatalogObject")}')," call to return the ID of the Item in RCO but you won't be able to get any other information (like name or URL of that Item). Additionally, if you have one-to-many relationship, you will still get only one ID for the first related Item. Due to those limitations, I recommend using it only if you have RCO with one-to-one relationship and readable IDs (for example, ",(0,n.kt)("inlineCode",{parentName:"p"},"RED")," as an ID in the Color RCO)."),(0,n.kt)("p",null,"The workaround for other use cases is to pass the crucial RCO data as custom attributes on the Product (for example,",(0,n.kt)("inlineCode",{parentName:"p"},"productColorName")," attribute if you are using numeric IDs for colors in the RCO). It's not perfect as it duplicates the data and eats up attributes, but it is currently the only way you will be able to leverage that information in OTE."),(0,n.kt)("h2",{id:"example-dynamic-ote-template"},"Example dynamic OTE Template"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-html",metastring:'title="OTE Template with image fallback, null attribute fallbacks and conditional promo price display"',title:'"OTE',Template:!0,with:!0,image:!0,"fallback,":!0,null:!0,attribute:!0,fallbacks:!0,and:!0,conditional:!0,promo:!0,price:!0,'display"':!0},'<div style="padding:10px; text-align:center; font-family:Arial; font-size:16px;">\n \x3c!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith(\'.jpg\')}) --\x3e\n <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">\n \x3c!-- #else --\x3e\n <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">\n \x3c!-- #end --\x3e\n <div style="text-align:left;">\n <span style="font-size:14px; color:#212121;">\n #field(${item.attributes.categoryName.value}, \'\')\n </span>\n \x3c!-- #if (!${item.attributes.categoryName.value}) --\x3e\n <br />\n \x3c!-- #end --\x3e\n <span style="margin-top:5px; overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;">\n #field(${item.attributes.brand.value}, \'\') $item.name\n </span>\n </div>\n <div style="margin-top:5px; text-align:left;">\n $currency.format(${item.price})\n \x3c!-- #if(${item.listPrice} > ${item.price}) --\x3e\n <span style="font-size:14px; color:#212121;text-decoration:line-through;">\n $currency.format(${item.listPrice})\n </span>\n \x3c!-- #end --\x3e\n </div>\n <div style="position:absolute; left:0px; right:0px; bottom:10px;">\n <button style="border:none; padding:10px; background-color:#1D73C9; color:#ffffff;">\n Buy now \xbb\n </button>\n </div>\n</div>\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff2c7cca.58ca14b1.js b/assets/js/ff2c7cca.f057c476.js similarity index 56% rename from assets/js/ff2c7cca.58ca14b1.js rename to assets/js/ff2c7cca.f057c476.js index 695d7b252..c49947d6b 100644 --- a/assets/js/ff2c7cca.58ca14b1.js +++ b/assets/js/ff2c7cca.f057c476.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7706],{5028:e=>{e.exports=JSON.parse('{"label":"TypeScript","permalink":"/docs/tags/type-script","allTagsPath":"/docs/tags","count":3,"items":[{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[7706],{5028:e=>{e.exports=JSON.parse('{"label":"TypeScript","permalink":"/docs/tags/type-script","allTagsPath":"/docs/tags","count":4,"items":[{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","title":"MCP Catalog ETL Metadata Viewer","description":"Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.","permalink":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer"},{"id":"interaction-studio/mcp-serverside-code-basics","title":"MCP Serverside Code Basics","description":"Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.","permalink":"/docs/interaction-studio/mcp-serverside-code-basics"},{"id":"interaction-studio/mcp-serverside-code-context","title":"MCP Serverside Code Context","description":"Context is king. Also when writing MCP Template Serverside Code.","permalink":"/docs/interaction-studio/mcp-serverside-code-context"},{"id":"interaction-studio/mcp-serverside-code-properties","title":"MCP Serverside Code Properties","description":"Build your marketers\' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.","permalink":"/docs/interaction-studio/mcp-serverside-code-properties"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/ff6cdf17.1c6a804c.js b/assets/js/ff6cdf17.1c6a804c.js deleted file mode 100644 index 41dc227e0..000000000 --- a/assets/js/ff6cdf17.1c6a804c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2163],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),c=p(n),d=r,k=c["".concat(s,".").concat(d)]||c[d]||m[d]||l;return n?a.createElement(k,i(i({ref:t},u),{},{components:n})):a.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[c]="string"==typeof e?e:r,i[1]=o;for(var p=2;p<l;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},425:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(7294),r=n(6010);const l={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(l.tabItem,i),hidden:n},t)}},3992:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(7462),r=n(7294),l=n(6010),i=n(2957),o=n(6550),s=n(5238),p=n(3609),u=n(2560);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function m(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function d(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function k(e){let{queryString:t=!1,groupId:n}=e;const a=(0,o.k6)(),l=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(l),(0,r.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(a.location.search);t.set(l,e),a.replace({...a.location,search:t.toString()})}),[l,a])]}function h(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,l=m(e),[i,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!d({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:l}))),[s,p]=k({queryString:n,groupId:a}),[c,h]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,l]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&l.set(e)}),[n,l])]}({groupId:a}),g=(()=>{const e=s??c;return d({value:e,tabValues:l})?e:null})();(0,r.useLayoutEffect)((()=>{g&&o(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);o(e),p(e),h(e)}),[p,h,l]),tabValues:l}}var g=n(1048);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function S(e){let{className:t,block:n,selectedValue:o,selectValue:s,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),m=e=>{const t=e.currentTarget,n=u.indexOf(t),a=p[n].value;a!==o&&(c(t),s(a))},d=e=>{let t=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>u.push(e),onKeyDown:d,onClick:m},i,{className:(0,l.Z)("tabs__item",f.tabItem,i?.className,{"tabs__item--active":o===t})}),n??t)})))}function b(e){let{lazy:t,children:n,selectedValue:a}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function N(e){const t=h(e);return r.createElement("div",{className:(0,l.Z)("tabs-container",f.tabList)},r.createElement(S,(0,a.Z)({},e,t)),r.createElement(b,(0,a.Z)({},e,t)))}function v(e){const t=(0,g.Z)();return r.createElement(N,(0,a.Z)({key:String(t)},e))}},1872:(e,t,n)=>{n.d(t,{m:()=>l});var a=n(7294);const r="leadText_qzwo",l=e=>{let{content:t}=e;return a.createElement(a.Fragment,null,a.createElement("p",{id:r},t))}},1598:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>u,toc:()=>m});var a=n(7462),r=(n(7294),n(4137)),l=n(3992),i=n(425),o=n(1872);const s={id:"ssjs-vs-ampscript-performance",title:"SSJS vs AMPScript Performance",sidebar_label:"Performance",description:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",image:"img/og/og-image-ssjs-vs-ampscript-performance.png",tags:["Marketing Cloud","SSJS","AMPScript","Performance"]},p=void 0,u={unversionedId:"ssjs/ssjs-vs-ampscript-performance",id:"ssjs/ssjs-vs-ampscript-performance",title:"SSJS vs AMPScript Performance",description:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",source:"@site/docs/ssjs/ssjs-vs-ampscript-performance.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-vs-ampscript-performance",permalink:"/docs/ssjs/ssjs-vs-ampscript-performance",draft:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-vs-ampscript-performance.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Performance",permalink:"/docs/tags/performance"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"ssjs-vs-ampscript-performance",title:"SSJS vs AMPScript Performance",sidebar_label:"Performance",description:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",image:"img/og/og-image-ssjs-vs-ampscript-performance.png",tags:["Marketing Cloud","SSJS","AMPScript","Performance"]},sidebar:"docs",previous:{title:"Style Guide",permalink:"/docs/ssjs/ssjs-style-guide"},next:{title:"JavaScript",permalink:"/docs/category/javascript"}},c={},m=[{value:"Conclusions",id:"conclusions",level:2},{value:"AMPScript vs SSJS",id:"ampscript-vs-ssjs",level:3},{value:"SSJS Best Practices",id:"ssjs-best-practices",level:3},{value:"Methodology",id:"methodology",level:2},{value:"Performance Test Cases",id:"performance-test-cases",level:2},{value:"Code Block Breaking",id:"code-block-breaking",level:3},{value:"Test Cases",id:"test-cases",level:4},{value:"Outcomes (ms)",id:"outcomes-ms",level:4},{value:"Sum Up",id:"sum-up",level:4},{value:"ProperCase",id:"propercase",level:3},{value:"Test Cases",id:"test-cases-1",level:4},{value:"Outcomes (ms)",id:"outcomes-ms-1",level:4},{value:"Sum Up:",id:"sum-up-1",level:4},{value:"LowerCase & UpperCase",id:"lowercase--uppercase",level:3},{value:"Test Cases",id:"test-cases-2",level:4},{value:"Outcomes (ms)",id:"outcomes-ms-2",level:4},{value:"Sum up",id:"sum-up-2",level:4}],d={toc:m},k="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(k,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)(o.m,{content:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",mdxType:"LeadText"}),(0,r.kt)("p",null,"There is much knowledge shared on blogs, social networks, and Stack Exchange in the Salesforce Marketing Cloud world. Frequently you will see some strong opinions on which scripting approach is best."),(0,r.kt)("p",null,"I decided to check some of those assumptions empirically. Some test results are obvious, and some might surprise you (just as they surprised me)."),(0,r.kt)("p",null,"I split the article into two sections:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"#conclusions"},"Conclusions")," are the TL;DR of my tests. If you want quick high-level findings - go there."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"#performance-test-cases"},"Performance Test Cases")," are the nerdy part, where I describe the exact code used for each case and more dive into detailed outcomes that might give you a better basis for a decision on what to use.")),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"This article will be in constant Work In Progress state, as I plan to add new test cases and conclusions perpetually."),(0,r.kt)("p",{parentName:"admonition"},"Should you have any interesting idea for a test case - let me know!"),(0,r.kt)("p",{parentName:"admonition"},"Next: speed comparison of mirrored SSJS Platform and Core functions.")),(0,r.kt)("h2",{id:"conclusions"},"Conclusions"),(0,r.kt)("h3",{id:"ampscript-vs-ssjs"},"AMPScript vs SSJS"),(0,r.kt)("p",null,"For scripting in time-critical assets (Emails, SMS, Pushes), go with AMPScript. It is much more optimised for the most popular use cases in this space, which will make a difference when scaled for hundreds of thousands of executions."),(0,r.kt)("p",null,"For scripting in other assets (Landing Pages, Automation Studio), it depends on the use case. As a rule of thumb, AMPScript might be a bit more optimised, but for more complex projects, it lacks readability, flexibility and power (arrays, objects, try/catch, etc.). If you are building something simple - AMPScript might be the way to go. Otherwise, go with SSJS (or mix for optimisation)."),(0,r.kt)("h3",{id:"ssjs-best-practices"},"SSJS Best Practices"),(0,r.kt)("p",null,"When splitting your SSJS code block, try not to do it within a long loop (",(0,r.kt)("a",{parentName:"p",href:"#code-block-breaking"},"Code Block Breaking"),")."),(0,r.kt)("p",null,"However, if you find an out-of-the-box AMPScript function that does something requiring custom development on the SSJS side (ProperCase, SFDC integration), it might be worth to inject AMPScript into your SSJS. The impact of code splitting on execution time might be much smaller than that of the complex code necessary to replicate a function (",(0,r.kt)("a",{parentName:"p",href:"#propercase"},"ProperCase"),"). For functions available in both languages, you should stay with the SSJS not to mix scripting contexts (",(0,r.kt)("a",{parentName:"p",href:"#lowercase--uppercase"},"LowerCase & UpperCase"),")."),(0,r.kt)("h2",{id:"methodology"},"Methodology"),(0,r.kt)("p",null,"The testing toolset is minimal by the nature of SSJS and AMPScript. I'm using a Cloud Page and ",(0,r.kt)("inlineCode",{parentName:"p"},"new Date().getTime();")," to capture the execution's beginning and end. Within this scope, I run a ",(0,r.kt)("a",{parentName:"p",href:"/docs/ssjs/ssjs-loops"},"loop")," with the code I want to test. Finally, I divide the total time by the number of loop iterations to get an average run time."),(0,r.kt)("p",null,"This approach means that the millisecond values I provide are in no way the exact times you can use to calculate the speed at scale. But they should be standardised enough to allow for meaningful comparison between various scenarios. The actual times also change a bit when we run the test multiple times, as the strain on Marketing Cloud servers at the very moment of execution also has an impact. Focus less on exact milliseconds count and more on relations between the values."),(0,r.kt)("p",null,"In the test case descriptions, you can find additional details on the methodology: input used for the test, expected output, number of loop iterations or exact code tested."),(0,r.kt)("admonition",{title:"You Should Know",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"For testing the execution speed of AMPScript block solutions, I'm using the SSJS to start and stop the count. I compared it with calculation using AMPScript ",(0,r.kt)("inlineCode",{parentName:"p"},"FormatDate(Now(), 'ISO')"),", and there was no meaningful difference between the two.")),(0,r.kt)("h2",{id:"performance-test-cases"},"Performance Test Cases"),(0,r.kt)("h3",{id:"code-block-breaking"},"Code Block Breaking"),(0,r.kt)("p",null,"I wanted to test the cost of breaking out of a code block for both SSJS and AMPScript."),(0,r.kt)("p",null,"Understanding the execution time impact of the scripting context switch was necessary for me to make valid conclusions for future tests and help decide on the best approach when coding a personalisation solution."),(0,r.kt)("h4",{id:"test-cases"},"Test Cases"),(0,r.kt)(l.Z,{defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"SSJS + HTML",value:"html"},{label:"SSJS + AMPScript",value:"ampinssjs"},{label:"AMPScript",value:"ampscript"},{label:"AMPScript x2",value:"ampscript2"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"ssjs",mdxType:"TabItem"},(0,r.kt)("p",null,"In this scenario, there is no context switch. I timed a pure SSJS loop to have a base for analysis."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"for (var i = 0; i < 10000; i++) {\n var a;\n};\n"))),(0,r.kt)(i.Z,{value:"html",mdxType:"TabItem"},(0,r.kt)("p",null,"In the next scenario, I added empty breaking out of SSJS within a loop."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'for (var i = 0; i < 10000; i++) {\n var b;\n <\/script>\n\n <script runat="server">\n};\n'))),(0,r.kt)(i.Z,{value:"ampinssjs",mdxType:"TabItem"},(0,r.kt)("p",null,"Next, I pushed an AMPScript block within the break."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'for (var i = 0; i < 10000; i++) {\n <\/script>\n %%[\n VAR @c\n ]%%\n <script runat="server">\n};\n'))),(0,r.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,r.kt)("p",null,"Then I put the for loop in the AMPScript context. As a result, the SSJS code block breaking impact count only once per 10 000 executions, making it irrelevant for the final average. It gives us another base for the next test."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'<\/script>\n%%[\n FOR @current = 1 TO 10000 DO\n VAR @d\n NEXT @current\n]%%\n<script runat="server">\n\n'))),(0,r.kt)(i.Z,{value:"ampscript2",mdxType:"TabItem"},(0,r.kt)("p",null,"For the final scenario I decided to break out of AMPScript context within an AMPScript loop, as this is popular way for creating dynamic content in Marketing Cloud."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'<\/script>\n %%[\n FOR @current = 1 TO 10000 DO\n VAR @e\n ]%%\n\n %%[\n NEXT @current\n ]%%\n<script runat="server">\n')))),(0,r.kt)("h4",{id:"outcomes-ms"},"Outcomes (ms)"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"SSJS"),(0,r.kt)("th",{parentName:"tr",align:null},"SSJS + HTML"),(0,r.kt)("th",{parentName:"tr",align:null},"SSJS + AMPScript"),(0,r.kt)("th",{parentName:"tr",align:null},"AMPScript"),(0,r.kt)("th",{parentName:"tr",align:null},"AMPScript x2"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"0.0016"),(0,r.kt)("td",{parentName:"tr",align:null},"0.1453"),(0,r.kt)("td",{parentName:"tr",align:null},"0.1422"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0015"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0016")))),(0,r.kt)("h4",{id:"sum-up"},"Sum Up"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Breaking out of the SSJS code block is impacting execution time."),(0,r.kt)("li",{parentName:"ol"},"Breaking out of the AMPScript code block has close to none impact on execution time.")),(0,r.kt)("h3",{id:"propercase"},"ProperCase"),(0,r.kt)("p",null,"What should you use when you want to change a string to Proper Case? As there is no single function in SSJS for that, I compared two pure SSJS approaches (",(0,r.kt)("inlineCode",{parentName:"p"},"split"),"/",(0,r.kt)("inlineCode",{parentName:"p"},"join")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"replace")," with RegEx) with ",(0,r.kt)("a",{parentName:"p",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"AMPScript in SSJS")," and (nearly) pure AMPScript."),(0,r.kt)("p",null,"The test was performed using ten different strings varying in number of words and capitalization:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"var sentences = [\n 'one', // 1\n 'one Two', // 2\n 'one Two THREE', // 3\n 'one Two THREE fOUR', // 4\n 'one Two THREE fOUR FiVe', // 5\n 'one Two THREE fOUR FiVe siX', // 6\n 'one Two THREE fOUR FiVe siX &', // 7\n 'one Two THREE fOUR FiVe siX & 8', // 8\n 'one Two THREE fOUR FiVe siX & 8 nine', // 9\n 'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10\n];\n")),(0,r.kt)("p",null,"All approaches output final sentence as: ",(0,r.kt)("inlineCode",{parentName:"p"},"One Two Three Four Five Six & 8 Nine-ten")),(0,r.kt)("h4",{id:"test-cases-1"},"Test Cases"),(0,r.kt)(l.Z,{defaultValue:"split",values:[{label:"SSJS Split",value:"split"},{label:"SSJS Replace",value:"replace"},{label:"AMPScript in SSJS",value:"ampinssjs"},{label:"AMPScript",value:"ampscript"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"split",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'function toTitleCase(string) {\n var sentence = string.toLowerCase().split(" ");\n for (var i = 0; i < sentence.length; i++) {\n sentence[i] = sentence[i][0].toUpperCase() + sentence[i].slice(1);\n };\n sentence = sentence.join(" ");\n return sentence;\n};\n\ntitle = toTitleCase(testedString);\n'))),(0,r.kt)(i.Z,{value:"replace",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"title = testedString.replace(\n /[a-zA-Z]\\S*/g,\n function(string) {\n return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase()\n }\n);\n"))),(0,r.kt)(i.Z,{value:"ampinssjs",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"function ampScript(code) {\n var ampBlock = '\\%\\%[' + code + ']\\%\\%';\n Platform.Function.TreatAsContent(ampBlock);\n return Variable.GetValue('@response');\n};\n\ntitle = ampScript(\"SET @response = ProperCase('\" + testedString + \"')\");\n"))),(0,r.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"%%[\nSET @response = ProperCase(@sentence)\n]%%\n")))),(0,r.kt)("h4",{id:"outcomes-ms-1"},"Outcomes (ms)"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Sentence"),(0,r.kt)("th",{parentName:"tr",align:null},"SSJS Split"),(0,r.kt)("th",{parentName:"tr",align:null},"SSJS Replace"),(0,r.kt)("th",{parentName:"tr",align:null},"AMPScript in SSJS"),(0,r.kt)("th",{parentName:"tr",align:null},"AMPScript"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0968"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0782"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3686"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0032")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"0.1376"),(0,r.kt)("td",{parentName:"tr",align:null},"0.1186"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3688"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0032")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"0.175"),(0,r.kt)("td",{parentName:"tr",align:null},"0.1594"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3874"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0032")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2218"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2032"),(0,r.kt)("td",{parentName:"tr",align:null},"0.375"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0062")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2562"),(0,r.kt)("td",{parentName:"tr",align:null},"0.247"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3686"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0064")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2968"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2812"),(0,r.kt)("td",{parentName:"tr",align:null},"0.372"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0062")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3344"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2844"),(0,r.kt)("td",{parentName:"tr",align:null},"0.375"),(0,r.kt)("td",{parentName:"tr",align:null},"0.003")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"0.372"),(0,r.kt)("td",{parentName:"tr",align:null},"0.2874"),(0,r.kt)("td",{parentName:"tr",align:null},"0.372"),(0,r.kt)("td",{parentName:"tr",align:null},"0.003")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"0.4126"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3312"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3718"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0064")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"0.4124"),(0,r.kt)("td",{parentName:"tr",align:null},"0.342"),(0,r.kt)("td",{parentName:"tr",align:null},"0.375"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0064")))),(0,r.kt)("h4",{id:"sum-up-1"},"Sum Up:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Pure AMPScript execution time for ProperCase scenario murders SSJS."),(0,r.kt)("li",{parentName:"ol"},"When working with arrays or regex replace, SSJS execution time extends with each additional word. However, AMPScript execution time is constant thanks to the optimised out-of-the-box ",(0,r.kt)("inlineCode",{parentName:"li"},"ProperCase")," function."),(0,r.kt)("li",{parentName:"ol"},"Although ",(0,r.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"AMPScript in SSJS")," is doing levels-of-magnitude worse than pure AMPScript, it will be a better choice then pure SSJS for long sentences (10+ words)."),(0,r.kt)("li",{parentName:"ol"},"SSJS Replace might be the option to choose despite the performance if you want more flexibility (for example, changing that ",(0,r.kt)("inlineCode",{parentName:"li"},"Nine-ten")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"Nine-Ten"),")."),(0,r.kt)("li",{parentName:"ol"},"Otherwise, for anything longer than a few words, consider ",(0,r.kt)("a",{parentName:"li",href:"#code-block-breaking"},"breaking from the SSJS code block")," to leverage AMPscript.")),(0,r.kt)("h3",{id:"lowercase--uppercase"},"LowerCase & UpperCase"),(0,r.kt)("p",null,"Based on the ",(0,r.kt)("a",{parentName:"p",href:"#propercase"},"Proper Case")," scenario's exciting outcomes, I decided to follow up on that with a performance comparison on a function that is available out-of-the-box in both SSJS and AMPScript. For testing, I used sibling string modification - Lower Case."),(0,r.kt)("p",null,"The test was performed using ten different strings varying in number of words and capitalization (same as for Proper Case):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},"var sentences = [\n 'one', // 1\n 'one Two', // 2\n 'one Two THREE', // 3\n 'one Two THREE fOUR', // 4\n 'one Two THREE fOUR FiVe', // 5\n 'one Two THREE fOUR FiVe siX', // 6\n 'one Two THREE fOUR FiVe siX &', // 7\n 'one Two THREE fOUR FiVe siX & 8', // 8\n 'one Two THREE fOUR FiVe siX & 8 nine', // 9\n 'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10\n];\n")),(0,r.kt)("p",null,"All approaches output final sentence as: ",(0,r.kt)("inlineCode",{parentName:"p"},"one two three four five six & 8 nine-ten")),(0,r.kt)("h4",{id:"test-cases-2"},"Test Cases"),(0,r.kt)(l.Z,{defaultValue:"method",values:[{label:"SSJS Method",value:"method"},{label:"SSJS Function",value:"function"},{label:"AMPScript in SSJS",value:"ampinssjs"},{label:"AMPScript",value:"ampscript"}],mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"method",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"title = testedString.toLowerCase();\n"))),(0,r.kt)(i.Z,{value:"function",mdxType:"TabItem"},(0,r.kt)("p",null,"This approach doesn't make sense but gives an idea of the impact of using function vs method."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"function toLowerCase(string) {\n var sentence = string.toLowerCase();\n return sentence;\n};\ntitle = toLowerCase(sentences[a]);\n"))),(0,r.kt)(i.Z,{value:"ampinssjs",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"function ampScript(code) {\n var ampBlock = '\\%\\%[' + code + ']\\%\\%';\n Platform.Function.TreatAsContent(ampBlock);\n return Variable.GetValue('@response');\n};\n\ntitle = ampScript(\"SET @response = LowerCase('\" + testedString + \"')\");\n"))),(0,r.kt)(i.Z,{value:"ampscript",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"%%[\nSET @response = LowerCase(@sentence)\n]%%\n")))),(0,r.kt)("h4",{id:"outcomes-ms-2"},"Outcomes (ms)"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Sentence"),(0,r.kt)("th",{parentName:"tr",align:null},"SSJS Method"),(0,r.kt)("th",{parentName:"tr",align:null},"SSJS Function"),(0,r.kt)("th",{parentName:"tr",align:null},"AMPScript in SSJS"),(0,r.kt)("th",{parentName:"tr",align:null},"AMPScript"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"0.014"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0203"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3625"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0032")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0187"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3625"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0031")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0188"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3625"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0031")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0188"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3687"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0016")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0187"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3641"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0015")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0188"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3641"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0031")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0187"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3625"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0032")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0187"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3672"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0031")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0125"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0204"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3593"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0032")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"0.014"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0203"),(0,r.kt)("td",{parentName:"tr",align:null},"0.3625"),(0,r.kt)("td",{parentName:"tr",align:null},"0.0016")))),(0,r.kt)("h4",{id:"sum-up-2"},"Sum up"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The out-of-the-box JavaScript method works much better then the custom solution developer for ",(0,r.kt)("a",{parentName:"li",href:"#propercase"},"Proper Case")," - just like the AMPScript function, it executes in constant time regardless of sentence length."),(0,r.kt)("li",{parentName:"ol"},"Pure AMPScript execution time still is better, but due to constant time in both languages and much faster SSJS speed, there is no longer any reason to use ",(0,r.kt)("a",{parentName:"li",href:"/docs/ssjs/snippets/ampscript-in-ssjs"},"AMPScript in SSJS")," or ",(0,r.kt)("a",{parentName:"li",href:"#code-block-breaking"},"break out of SSJS code block"),".")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff6cdf17.66f64fbc.js b/assets/js/ff6cdf17.66f64fbc.js new file mode 100644 index 000000000..b6727630e --- /dev/null +++ b/assets/js/ff6cdf17.66f64fbc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmd=self.webpackChunkmd||[]).push([[2163],{6044:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>h,contentTitle:()=>l,default:()=>x,frontMatter:()=>a,metadata:()=>d,toc:()=>u});var t=n(5893),r=n(1151),i=n(3992),o=n(425),c=n(1872);const a={id:"ssjs-vs-ampscript-performance",title:"SSJS vs AMPScript Performance",sidebar_label:"Performance",description:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",image:"img/og/og-image-ssjs-vs-ampscript-performance.png",tags:["Marketing Cloud","SSJS","AMPScript","Performance"]},l=void 0,d={id:"ssjs/ssjs-vs-ampscript-performance",title:"SSJS vs AMPScript Performance",description:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",source:"@site/docs/ssjs/ssjs-vs-ampscript-performance.mdx",sourceDirName:"ssjs",slug:"/ssjs/ssjs-vs-ampscript-performance",permalink:"/docs/ssjs/ssjs-vs-ampscript-performance",draft:!1,unlisted:!1,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/docs/ssjs/ssjs-vs-ampscript-performance.mdx",tags:[{label:"Marketing Cloud",permalink:"/docs/tags/marketing-cloud"},{label:"SSJS",permalink:"/docs/tags/ssjs"},{label:"AMPScript",permalink:"/docs/tags/amp-script"},{label:"Performance",permalink:"/docs/tags/performance"}],version:"current",lastUpdatedBy:"Mateusz D\u0105browski",lastUpdatedAt:1672049341,formattedLastUpdatedAt:"Dec 26, 2022",frontMatter:{id:"ssjs-vs-ampscript-performance",title:"SSJS vs AMPScript Performance",sidebar_label:"Performance",description:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.",image:"img/og/og-image-ssjs-vs-ampscript-performance.png",tags:["Marketing Cloud","SSJS","AMPScript","Performance"]},sidebar:"docs",previous:{title:"Style Guide",permalink:"/docs/ssjs/ssjs-style-guide"},next:{title:"JavaScript",permalink:"/docs/category/javascript"}},h={},u=[{value:"Conclusions",id:"conclusions",level:2},{value:"AMPScript vs SSJS",id:"ampscript-vs-ssjs",level:3},{value:"SSJS Best Practices",id:"ssjs-best-practices",level:3},{value:"Methodology",id:"methodology",level:2},{value:"Performance Test Cases",id:"performance-test-cases",level:2},{value:"Code Block Breaking",id:"code-block-breaking",level:3},{value:"Test Cases",id:"test-cases",level:4},{value:"Outcomes (ms)",id:"outcomes-ms",level:4},{value:"Sum Up",id:"sum-up",level:4},{value:"ProperCase",id:"propercase",level:3},{value:"Test Cases",id:"test-cases-1",level:4},{value:"Outcomes (ms)",id:"outcomes-ms-1",level:4},{value:"Sum Up:",id:"sum-up-1",level:4},{value:"LowerCase & UpperCase",id:"lowercase--uppercase",level:3},{value:"Test Cases",id:"test-cases-2",level:4},{value:"Outcomes (ms)",id:"outcomes-ms-2",level:4},{value:"Sum up",id:"sum-up-2",level:4}];function p(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.m,{content:"Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases."}),"\n",(0,t.jsx)(s.p,{children:"There is much knowledge shared on blogs, social networks, and Stack Exchange in the Salesforce Marketing Cloud world. Frequently you will see some strong opinions on which scripting approach is best."}),"\n",(0,t.jsx)(s.p,{children:"I decided to check some of those assumptions empirically. Some test results are obvious, and some might surprise you (just as they surprised me)."}),"\n",(0,t.jsx)(s.p,{children:"I split the article into two sections:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"#conclusions",children:"Conclusions"})," are the TL;DR of my tests. If you want quick high-level findings - go there."]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"#performance-test-cases",children:"Performance Test Cases"})," are the nerdy part, where I describe the exact code used for each case and more dive into detailed outcomes that might give you a better basis for a decision on what to use."]}),"\n"]}),"\n",(0,t.jsxs)(s.admonition,{title:"You Should Know",type:"note",children:[(0,t.jsx)(s.p,{children:"This article will be in constant Work In Progress state, as I plan to add new test cases and conclusions perpetually."}),(0,t.jsx)(s.p,{children:"Should you have any interesting idea for a test case - let me know!"}),(0,t.jsx)(s.p,{children:"Next: speed comparison of mirrored SSJS Platform and Core functions."})]}),"\n",(0,t.jsx)(s.h2,{id:"conclusions",children:"Conclusions"}),"\n",(0,t.jsx)(s.h3,{id:"ampscript-vs-ssjs",children:"AMPScript vs SSJS"}),"\n",(0,t.jsx)(s.p,{children:"For scripting in time-critical assets (Emails, SMS, Pushes), go with AMPScript. It is much more optimised for the most popular use cases in this space, which will make a difference when scaled for hundreds of thousands of executions."}),"\n",(0,t.jsx)(s.p,{children:"For scripting in other assets (Landing Pages, Automation Studio), it depends on the use case. As a rule of thumb, AMPScript might be a bit more optimised, but for more complex projects, it lacks readability, flexibility and power (arrays, objects, try/catch, etc.). If you are building something simple - AMPScript might be the way to go. Otherwise, go with SSJS (or mix for optimisation)."}),"\n",(0,t.jsx)(s.h3,{id:"ssjs-best-practices",children:"SSJS Best Practices"}),"\n",(0,t.jsxs)(s.p,{children:["When splitting your SSJS code block, try not to do it within a long loop (",(0,t.jsx)(s.a,{href:"#code-block-breaking",children:"Code Block Breaking"}),")."]}),"\n",(0,t.jsxs)(s.p,{children:["However, if you find an out-of-the-box AMPScript function that does something requiring custom development on the SSJS side (ProperCase, SFDC integration), it might be worth to inject AMPScript into your SSJS. The impact of code splitting on execution time might be much smaller than that of the complex code necessary to replicate a function (",(0,t.jsx)(s.a,{href:"#propercase",children:"ProperCase"}),"). For functions available in both languages, you should stay with the SSJS not to mix scripting contexts (",(0,t.jsx)(s.a,{href:"#lowercase--uppercase",children:"LowerCase & UpperCase"}),")."]}),"\n",(0,t.jsx)(s.h2,{id:"methodology",children:"Methodology"}),"\n",(0,t.jsxs)(s.p,{children:["The testing toolset is minimal by the nature of SSJS and AMPScript. I'm using a Cloud Page and ",(0,t.jsx)(s.code,{children:"new Date().getTime();"})," to capture the execution's beginning and end. Within this scope, I run a ",(0,t.jsx)(s.a,{href:"/docs/ssjs/ssjs-loops",children:"loop"})," with the code I want to test. Finally, I divide the total time by the number of loop iterations to get an average run time."]}),"\n",(0,t.jsx)(s.p,{children:"This approach means that the millisecond values I provide are in no way the exact times you can use to calculate the speed at scale. But they should be standardised enough to allow for meaningful comparison between various scenarios. The actual times also change a bit when we run the test multiple times, as the strain on Marketing Cloud servers at the very moment of execution also has an impact. Focus less on exact milliseconds count and more on relations between the values."}),"\n",(0,t.jsx)(s.p,{children:"In the test case descriptions, you can find additional details on the methodology: input used for the test, expected output, number of loop iterations or exact code tested."}),"\n",(0,t.jsx)(s.admonition,{title:"You Should Know",type:"note",children:(0,t.jsxs)(s.p,{children:["For testing the execution speed of AMPScript block solutions, I'm using the SSJS to start and stop the count. I compared it with calculation using AMPScript ",(0,t.jsx)(s.code,{children:"FormatDate(Now(), 'ISO')"}),", and there was no meaningful difference between the two."]})}),"\n",(0,t.jsx)(s.h2,{id:"performance-test-cases",children:"Performance Test Cases"}),"\n",(0,t.jsx)(s.h3,{id:"code-block-breaking",children:"Code Block Breaking"}),"\n",(0,t.jsx)(s.p,{children:"I wanted to test the cost of breaking out of a code block for both SSJS and AMPScript."}),"\n",(0,t.jsx)(s.p,{children:"Understanding the execution time impact of the scripting context switch was necessary for me to make valid conclusions for future tests and help decide on the best approach when coding a personalisation solution."}),"\n",(0,t.jsx)(s.h4,{id:"test-cases",children:"Test Cases"}),"\n",(0,t.jsxs)(i.Z,{defaultValue:"ssjs",values:[{label:"SSJS",value:"ssjs"},{label:"SSJS + HTML",value:"html"},{label:"SSJS + AMPScript",value:"ampinssjs"},{label:"AMPScript",value:"ampscript"},{label:"AMPScript x2",value:"ampscript2"}],children:[(0,t.jsxs)(o.Z,{value:"ssjs",children:[(0,t.jsx)(s.p,{children:"In this scenario, there is no context switch. I timed a pure SSJS loop to have a base for analysis."}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"for (var i = 0; i < 10000; i++) {\n var a;\n};\n"})})]}),(0,t.jsxs)(o.Z,{value:"html",children:[(0,t.jsx)(s.p,{children:"In the next scenario, I added empty breaking out of SSJS within a loop."}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:'for (var i = 0; i < 10000; i++) {\n var b;\n <\/script>\n\n <script runat="server">\n};\n'})})]}),(0,t.jsxs)(o.Z,{value:"ampinssjs",children:[(0,t.jsx)(s.p,{children:"Next, I pushed an AMPScript block within the break."}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:'for (var i = 0; i < 10000; i++) {\n <\/script>\n %%[\n VAR @c\n ]%%\n <script runat="server">\n};\n'})})]}),(0,t.jsxs)(o.Z,{value:"ampscript",children:[(0,t.jsx)(s.p,{children:"Then I put the for loop in the AMPScript context. As a result, the SSJS code block breaking impact count only once per 10 000 executions, making it irrelevant for the final average. It gives us another base for the next test."}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:'<\/script>\n%%[\n FOR @current = 1 TO 10000 DO\n VAR @d\n NEXT @current\n]%%\n<script runat="server">\n\n'})})]}),(0,t.jsxs)(o.Z,{value:"ampscript2",children:[(0,t.jsx)(s.p,{children:"For the final scenario I decided to break out of AMPScript context within an AMPScript loop, as this is popular way for creating dynamic content in Marketing Cloud."}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:'<\/script>\n %%[\n FOR @current = 1 TO 10000 DO\n VAR @e\n ]%%\n\n %%[\n NEXT @current\n ]%%\n<script runat="server">\n'})})]})]}),"\n",(0,t.jsx)(s.h4,{id:"outcomes-ms",children:"Outcomes (ms)"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"SSJS"}),(0,t.jsx)(s.th,{children:"SSJS + HTML"}),(0,t.jsx)(s.th,{children:"SSJS + AMPScript"}),(0,t.jsx)(s.th,{children:"AMPScript"}),(0,t.jsx)(s.th,{children:"AMPScript x2"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"0.0016"}),(0,t.jsx)(s.td,{children:"0.1453"}),(0,t.jsx)(s.td,{children:"0.1422"}),(0,t.jsx)(s.td,{children:"0.0015"}),(0,t.jsx)(s.td,{children:"0.0016"})]})})]}),"\n",(0,t.jsx)(s.h4,{id:"sum-up",children:"Sum Up"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Breaking out of the SSJS code block is impacting execution time."}),"\n",(0,t.jsx)(s.li,{children:"Breaking out of the AMPScript code block has close to none impact on execution time."}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"propercase",children:"ProperCase"}),"\n",(0,t.jsxs)(s.p,{children:["What should you use when you want to change a string to Proper Case? As there is no single function in SSJS for that, I compared two pure SSJS approaches (",(0,t.jsx)(s.code,{children:"split"}),"/",(0,t.jsx)(s.code,{children:"join"})," & ",(0,t.jsx)(s.code,{children:"replace"})," with RegEx) with ",(0,t.jsx)(s.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"AMPScript in SSJS"})," and (nearly) pure AMPScript."]}),"\n",(0,t.jsx)(s.p,{children:"The test was performed using ten different strings varying in number of words and capitalization:"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-js",children:"var sentences = [\n 'one', // 1\n 'one Two', // 2\n 'one Two THREE', // 3\n 'one Two THREE fOUR', // 4\n 'one Two THREE fOUR FiVe', // 5\n 'one Two THREE fOUR FiVe siX', // 6\n 'one Two THREE fOUR FiVe siX &', // 7\n 'one Two THREE fOUR FiVe siX & 8', // 8\n 'one Two THREE fOUR FiVe siX & 8 nine', // 9\n 'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10\n];\n"})}),"\n",(0,t.jsxs)(s.p,{children:["All approaches output final sentence as: ",(0,t.jsx)(s.code,{children:"One Two Three Four Five Six & 8 Nine-ten"})]}),"\n",(0,t.jsx)(s.h4,{id:"test-cases-1",children:"Test Cases"}),"\n",(0,t.jsxs)(i.Z,{defaultValue:"split",values:[{label:"SSJS Split",value:"split"},{label:"SSJS Replace",value:"replace"},{label:"AMPScript in SSJS",value:"ampinssjs"},{label:"AMPScript",value:"ampscript"}],children:[(0,t.jsx)(o.Z,{value:"split",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:'function toTitleCase(string) {\n var sentence = string.toLowerCase().split(" ");\n for (var i = 0; i < sentence.length; i++) {\n sentence[i] = sentence[i][0].toUpperCase() + sentence[i].slice(1);\n };\n sentence = sentence.join(" ");\n return sentence;\n};\n\ntitle = toTitleCase(testedString);\n'})})}),(0,t.jsx)(o.Z,{value:"replace",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"title = testedString.replace(\n /[a-zA-Z]\\S*/g,\n function(string) {\n return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase()\n }\n);\n"})})}),(0,t.jsx)(o.Z,{value:"ampinssjs",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"function ampScript(code) {\n var ampBlock = '\\%\\%[' + code + ']\\%\\%';\n Platform.Function.TreatAsContent(ampBlock);\n return Variable.GetValue('@response');\n};\n\ntitle = ampScript(\"SET @response = ProperCase('\" + testedString + \"')\");\n"})})}),(0,t.jsx)(o.Z,{value:"ampscript",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"%%[\nSET @response = ProperCase(@sentence)\n]%%\n"})})})]}),"\n",(0,t.jsx)(s.h4,{id:"outcomes-ms-1",children:"Outcomes (ms)"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Sentence"}),(0,t.jsx)(s.th,{children:"SSJS Split"}),(0,t.jsx)(s.th,{children:"SSJS Replace"}),(0,t.jsx)(s.th,{children:"AMPScript in SSJS"}),(0,t.jsx)(s.th,{children:"AMPScript"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"1"}),(0,t.jsx)(s.td,{children:"0.0968"}),(0,t.jsx)(s.td,{children:"0.0782"}),(0,t.jsx)(s.td,{children:"0.3686"}),(0,t.jsx)(s.td,{children:"0.0032"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"2"}),(0,t.jsx)(s.td,{children:"0.1376"}),(0,t.jsx)(s.td,{children:"0.1186"}),(0,t.jsx)(s.td,{children:"0.3688"}),(0,t.jsx)(s.td,{children:"0.0032"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"3"}),(0,t.jsx)(s.td,{children:"0.175"}),(0,t.jsx)(s.td,{children:"0.1594"}),(0,t.jsx)(s.td,{children:"0.3874"}),(0,t.jsx)(s.td,{children:"0.0032"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"4"}),(0,t.jsx)(s.td,{children:"0.2218"}),(0,t.jsx)(s.td,{children:"0.2032"}),(0,t.jsx)(s.td,{children:"0.375"}),(0,t.jsx)(s.td,{children:"0.0062"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"5"}),(0,t.jsx)(s.td,{children:"0.2562"}),(0,t.jsx)(s.td,{children:"0.247"}),(0,t.jsx)(s.td,{children:"0.3686"}),(0,t.jsx)(s.td,{children:"0.0064"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"6"}),(0,t.jsx)(s.td,{children:"0.2968"}),(0,t.jsx)(s.td,{children:"0.2812"}),(0,t.jsx)(s.td,{children:"0.372"}),(0,t.jsx)(s.td,{children:"0.0062"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"7"}),(0,t.jsx)(s.td,{children:"0.3344"}),(0,t.jsx)(s.td,{children:"0.2844"}),(0,t.jsx)(s.td,{children:"0.375"}),(0,t.jsx)(s.td,{children:"0.003"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"8"}),(0,t.jsx)(s.td,{children:"0.372"}),(0,t.jsx)(s.td,{children:"0.2874"}),(0,t.jsx)(s.td,{children:"0.372"}),(0,t.jsx)(s.td,{children:"0.003"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"9"}),(0,t.jsx)(s.td,{children:"0.4126"}),(0,t.jsx)(s.td,{children:"0.3312"}),(0,t.jsx)(s.td,{children:"0.3718"}),(0,t.jsx)(s.td,{children:"0.0064"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"10"}),(0,t.jsx)(s.td,{children:"0.4124"}),(0,t.jsx)(s.td,{children:"0.342"}),(0,t.jsx)(s.td,{children:"0.375"}),(0,t.jsx)(s.td,{children:"0.0064"})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"sum-up-1",children:"Sum Up:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Pure AMPScript execution time for ProperCase scenario murders SSJS."}),"\n",(0,t.jsxs)(s.li,{children:["When working with arrays or regex replace, SSJS execution time extends with each additional word. However, AMPScript execution time is constant thanks to the optimised out-of-the-box ",(0,t.jsx)(s.code,{children:"ProperCase"})," function."]}),"\n",(0,t.jsxs)(s.li,{children:["Although ",(0,t.jsx)(s.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"AMPScript in SSJS"})," is doing levels-of-magnitude worse than pure AMPScript, it will be a better choice then pure SSJS for long sentences (10+ words)."]}),"\n",(0,t.jsxs)(s.li,{children:["SSJS Replace might be the option to choose despite the performance if you want more flexibility (for example, changing that ",(0,t.jsx)(s.code,{children:"Nine-ten"})," to ",(0,t.jsx)(s.code,{children:"Nine-Ten"}),")."]}),"\n",(0,t.jsxs)(s.li,{children:["Otherwise, for anything longer than a few words, consider ",(0,t.jsx)(s.a,{href:"#code-block-breaking",children:"breaking from the SSJS code block"})," to leverage AMPscript."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"lowercase--uppercase",children:"LowerCase & UpperCase"}),"\n",(0,t.jsxs)(s.p,{children:["Based on the ",(0,t.jsx)(s.a,{href:"#propercase",children:"Proper Case"})," scenario's exciting outcomes, I decided to follow up on that with a performance comparison on a function that is available out-of-the-box in both SSJS and AMPScript. For testing, I used sibling string modification - Lower Case."]}),"\n",(0,t.jsx)(s.p,{children:"The test was performed using ten different strings varying in number of words and capitalization (same as for Proper Case):"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-js",children:"var sentences = [\n 'one', // 1\n 'one Two', // 2\n 'one Two THREE', // 3\n 'one Two THREE fOUR', // 4\n 'one Two THREE fOUR FiVe', // 5\n 'one Two THREE fOUR FiVe siX', // 6\n 'one Two THREE fOUR FiVe siX &', // 7\n 'one Two THREE fOUR FiVe siX & 8', // 8\n 'one Two THREE fOUR FiVe siX & 8 nine', // 9\n 'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10\n];\n"})}),"\n",(0,t.jsxs)(s.p,{children:["All approaches output final sentence as: ",(0,t.jsx)(s.code,{children:"one two three four five six & 8 nine-ten"})]}),"\n",(0,t.jsx)(s.h4,{id:"test-cases-2",children:"Test Cases"}),"\n",(0,t.jsxs)(i.Z,{defaultValue:"method",values:[{label:"SSJS Method",value:"method"},{label:"SSJS Function",value:"function"},{label:"AMPScript in SSJS",value:"ampinssjs"},{label:"AMPScript",value:"ampscript"}],children:[(0,t.jsx)(o.Z,{value:"method",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"title = testedString.toLowerCase();\n"})})}),(0,t.jsxs)(o.Z,{value:"function",children:[(0,t.jsx)(s.p,{children:"This approach doesn't make sense but gives an idea of the impact of using function vs method."}),(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"function toLowerCase(string) {\n var sentence = string.toLowerCase();\n return sentence;\n};\ntitle = toLowerCase(sentences[a]);\n"})})]}),(0,t.jsx)(o.Z,{value:"ampinssjs",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"function ampScript(code) {\n var ampBlock = '\\%\\%[' + code + ']\\%\\%';\n Platform.Function.TreatAsContent(ampBlock);\n return Variable.GetValue('@response');\n};\n\ntitle = ampScript(\"SET @response = LowerCase('\" + testedString + \"')\");\n"})})}),(0,t.jsx)(o.Z,{value:"ampscript",children:(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"%%[\nSET @response = LowerCase(@sentence)\n]%%\n"})})})]}),"\n",(0,t.jsx)(s.h4,{id:"outcomes-ms-2",children:"Outcomes (ms)"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Sentence"}),(0,t.jsx)(s.th,{children:"SSJS Method"}),(0,t.jsx)(s.th,{children:"SSJS Function"}),(0,t.jsx)(s.th,{children:"AMPScript in SSJS"}),(0,t.jsx)(s.th,{children:"AMPScript"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"1"}),(0,t.jsx)(s.td,{children:"0.014"}),(0,t.jsx)(s.td,{children:"0.0203"}),(0,t.jsx)(s.td,{children:"0.3625"}),(0,t.jsx)(s.td,{children:"0.0032"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"2"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0187"}),(0,t.jsx)(s.td,{children:"0.3625"}),(0,t.jsx)(s.td,{children:"0.0031"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"3"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0188"}),(0,t.jsx)(s.td,{children:"0.3625"}),(0,t.jsx)(s.td,{children:"0.0031"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"4"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0188"}),(0,t.jsx)(s.td,{children:"0.3687"}),(0,t.jsx)(s.td,{children:"0.0016"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"5"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0187"}),(0,t.jsx)(s.td,{children:"0.3641"}),(0,t.jsx)(s.td,{children:"0.0015"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"6"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0188"}),(0,t.jsx)(s.td,{children:"0.3641"}),(0,t.jsx)(s.td,{children:"0.0031"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"7"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0187"}),(0,t.jsx)(s.td,{children:"0.3625"}),(0,t.jsx)(s.td,{children:"0.0032"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"8"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0187"}),(0,t.jsx)(s.td,{children:"0.3672"}),(0,t.jsx)(s.td,{children:"0.0031"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"9"}),(0,t.jsx)(s.td,{children:"0.0125"}),(0,t.jsx)(s.td,{children:"0.0204"}),(0,t.jsx)(s.td,{children:"0.3593"}),(0,t.jsx)(s.td,{children:"0.0032"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"10"}),(0,t.jsx)(s.td,{children:"0.014"}),(0,t.jsx)(s.td,{children:"0.0203"}),(0,t.jsx)(s.td,{children:"0.3625"}),(0,t.jsx)(s.td,{children:"0.0016"})]})]})]}),"\n",(0,t.jsx)(s.h4,{id:"sum-up-2",children:"Sum up"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["The out-of-the-box JavaScript method works much better then the custom solution developer for ",(0,t.jsx)(s.a,{href:"#propercase",children:"Proper Case"})," - just like the AMPScript function, it executes in constant time regardless of sentence length."]}),"\n",(0,t.jsxs)(s.li,{children:["Pure AMPScript execution time still is better, but due to constant time in both languages and much faster SSJS speed, there is no longer any reason to use ",(0,t.jsx)(s.a,{href:"/docs/ssjs/snippets/ampscript-in-ssjs",children:"AMPScript in SSJS"})," or ",(0,t.jsx)(s.a,{href:"#code-block-breaking",children:"break out of SSJS code block"}),"."]}),"\n"]})]})}function x(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},425:(e,s,n)=>{n.d(s,{Z:()=>o});n(7294);var t=n(512);const r={tabItem:"tabItem_Ymn6"};var i=n(5893);function o(e){let{children:s,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,t.Z)(r.tabItem,o),hidden:n,children:s})}},3992:(e,s,n)=>{n.d(s,{Z:()=>w});var t=n(7294),r=n(512),i=n(2957),o=n(6550),c=n(1270),a=n(5238),l=n(3609),d=n(2560);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:s}=e;return!!s&&"object"==typeof s&&"value"in s}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:s,children:n}=e;return(0,t.useMemo)((()=>{const e=s??function(e){return h(e).map((e=>{let{props:{value:s,label:n,attributes:t,default:r}}=e;return{value:s,label:n,attributes:t,default:r}}))}(n);return function(e){const s=(0,l.l)(e,((e,s)=>e.value===s.value));if(s.length>0)throw new Error(`Docusaurus error: Duplicate values "${s.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[s,n])}function p(e){let{value:s,tabValues:n}=e;return n.some((e=>e.value===s))}function x(e){let{queryString:s=!1,groupId:n}=e;const r=(0,o.k6)(),i=function(e){let{queryString:s=!1,groupId:n}=e;if("string"==typeof s)return s;if(!1===s)return null;if(!0===s&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:s,groupId:n});return[(0,a._X)(i),(0,t.useCallback)((e=>{if(!i)return;const s=new URLSearchParams(r.location.search);s.set(i,e),r.replace({...r.location,search:s.toString()})}),[i,r])]}function j(e){const{defaultValue:s,queryString:n=!1,groupId:r}=e,i=u(e),[o,a]=(0,t.useState)((()=>function(e){let{defaultValue:s,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(s){if(!p({value:s,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${s}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return s}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:s,tabValues:i}))),[l,h]=x({queryString:n,groupId:r}),[j,m]=function(e){let{groupId:s}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(s),[r,i]=(0,d.Nk)(n);return[r,(0,t.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:r}),S=(()=>{const e=l??j;return p({value:e,tabValues:i})?e:null})();(0,c.Z)((()=>{S&&a(S)}),[S]);return{selectedValue:o,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);a(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=n(1048);const S={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(5893);function g(e){let{className:s,block:n,selectedValue:t,selectValue:o,tabValues:c}=e;const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.o5)(),d=e=>{const s=e.currentTarget,n=a.indexOf(s),r=c[n].value;r!==t&&(l(s),o(r))},h=e=>{let s=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=a.indexOf(e.currentTarget)+1;s=a[n]??a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;s=a[n]??a[a.length-1];break}}s?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},s),children:c.map((e=>{let{value:s,label:n,attributes:i}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:t===s?0:-1,"aria-selected":t===s,ref:e=>a.push(e),onKeyDown:h,onClick:d,...i,className:(0,r.Z)("tabs__item",S.tabItem,i?.className,{"tabs__item--active":t===s}),children:n??s},s)}))})}function b(e){let{lazy:s,children:n,selectedValue:r}=e;const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(s){const e=i.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:i.map(((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==r})))})}function v(e){const s=j(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",S.tabList),children:[(0,f.jsx)(g,{...e,...s}),(0,f.jsx)(b,{...e,...s})]})}function w(e){const s=(0,m.Z)();return(0,f.jsx)(v,{...e,children:h(e.children)},String(s))}},1872:(e,s,n)=>{n.d(s,{m:()=>i});n(7294);const t="leadText_qzwo";var r=n(5893);const i=e=>{let{content:s}=e;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)("p",{id:t,children:s})})}},1151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>o});var t=n(7294);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.2ee7034c.js b/assets/js/main.2ee7034c.js new file mode 100644 index 000000000..d39ddc3ad --- /dev/null +++ b/assets/js/main.2ee7034c.js @@ -0,0 +1,2 @@ +/*! For license information please see main.2ee7034c.js.LICENSE.txt */ +(self.webpackChunkmd=self.webpackChunkmd||[]).push([[179],{830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const s={"05bf1b0a":[()=>n.e(3877).then(n.t.bind(n,1071,19)),"~docs/default/tag-docs-tags-data-management-6fc.json",1071],"06bea203":[()=>Promise.all([n.e(532),n.e(8845)]).then(n.bind(n,6025)),"@site/sites/privacy.mdx",6025],"09792c4b":[()=>n.e(6606).then(n.t.bind(n,2521,19)),"~docs/default/tag-docs-tags-app-exchange-d11.json",2521],"0ae20921":[()=>Promise.all([n.e(532),n.e(130)]).then(n.bind(n,2250)),"@site/docs/config/sfmc-contact-deletion.mdx",2250],"0b7df9a2":[()=>n.e(6795).then(n.t.bind(n,5673,19)),"~docs/default/tag-docs-tags-integration-442.json",5673],"0cb3f831":[()=>Promise.all([n.e(532),n.e(5605)]).then(n.bind(n,4343)),"@site/docs/js/js-loops.mdx",4343],"0e89a207":[()=>n.e(9855).then(n.t.bind(n,5480,19)),"~docs/default/category-docs-webinars-category-sfmc-webinars-2ea.json",5480],"1328d02f":[()=>Promise.all([n.e(532),n.e(800)]).then(n.bind(n,4878)),"@site/docs/sql/sfmc-sql-date-functions.mdx",4878],"139f0dd3":[()=>Promise.all([n.e(532),n.e(9517)]).then(n.bind(n,9249)),"@site/sites/toolset.mdx",9249],"13f9d961":[()=>Promise.all([n.e(532),n.e(8537)]).then(n.bind(n,3983)),"@site/docs/config/sfmc-mcc-integration-patterns.mdx",3983],"14add631":[()=>Promise.all([n.e(532),n.e(7215)]).then(n.bind(n,2410)),"@site/docs/interaction-studio/mcp-catalog-architecture.mdx",2410],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,118)),"@theme/DocCategoryGeneratedIndexPage",118],"15878b2f":[()=>Promise.all([n.e(532),n.e(2731)]).then(n.bind(n,4003)),"@site/docs/webinars/sfmc-webinar-architecting-web-solutions.mdx",4003],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,7741)),"@theme/DocItem",7741],"1843ef45":[()=>Promise.all([n.e(532),n.e(2050)]).then(n.bind(n,6339)),"@site/docs/js/js-if-and-switch.mdx",6339],"18f12793":[()=>Promise.all([n.e(532),n.e(4799)]).then(n.bind(n,4785)),"@site/docs/sql/snippets/sfmc-sql-debugging-value-length.mdx",4785],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,8167)),"@theme/SearchPage",8167],"1ad5d13a":[()=>Promise.all([n.e(532),n.e(1706)]).then(n.bind(n,5650)),"@site/sites/faq/how-to-get-sf-certification-vouchers.mdx",5650],"20e039ae":[()=>Promise.all([n.e(532),n.e(1872)]).then(n.bind(n,300)),"@site/docs/sql/sfmc-sql-from.mdx",300],"22145d1a":[()=>Promise.all([n.e(532),n.e(3207)]).then(n.bind(n,5576)),"@site/docs/ssjs/ssjs-loops.mdx",5576],"240325d0":[()=>Promise.all([n.e(532),n.e(6648),n.e(5244)]).then(n.bind(n,5580)),"@site/docs/interaction-studio/mcp-serverside-code-basics.mdx",5580],"2b07918c":[()=>n.e(8798).then(n.t.bind(n,1268,19)),"~docs/default/tag-docs-tags-journey-7d1.json",1268],"2cf43088":[()=>Promise.all([n.e(532),n.e(6167)]).then(n.bind(n,2845)),"@site/docs/ssjs/snippets/sfmc-cloud-page-apps.mdx",2845],"2e2f252f":[()=>Promise.all([n.e(532),n.e(4331)]).then(n.bind(n,4983)),"@site/sites/ideas/marketing-cloud-ideas.mdx",4983],"30084dac":[()=>Promise.all([n.e(532),n.e(3687)]).then(n.bind(n,3513)),"@site/docs/sql/sfmc-sql-aggregate-functions.mdx",3513],"3365a9e9":[()=>Promise.all([n.e(532),n.e(8645)]).then(n.bind(n,2099)),"@site/docs/config/sfmc-behavioral-triggers.mdx",2099],"33ffb019":[()=>Promise.all([n.e(532),n.e(6576)]).then(n.bind(n,6203)),"@site/docs/docs-and-snippets.mdx",6203],"369b6fa3":[()=>n.e(3664).then(n.t.bind(n,4214,19)),"~docs/sites/tag-sites-tags-marketing-cloud-personalization-172.json",4214],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,6495)),"@theme/DocTagsListPage",6495],"3b360413":[()=>n.e(5831).then(n.t.bind(n,9961,19)),"~docs/default/tag-docs-tags-automation-c98.json",9961],"3b7e54b4":[()=>n.e(8847).then(n.t.bind(n,9367,19)),"~docs/sites/tag-sites-tags-marketing-cloud-8c8.json",9367],"407fe916":[()=>Promise.all([n.e(532),n.e(1099)]).then(n.bind(n,5124)),"@site/docs/js/snippets/tailor-with-data.mdx",5124],"409b673b":[()=>n.e(9021).then(n.t.bind(n,4646,19)),"~docs/default/tag-docs-tags-sms-360.json",4646],"420d9621":[()=>n.e(7279).then(n.t.bind(n,2451,19)),"~docs/default/tag-docs-tags-crm-4a8.json",2451],"42b43273":[()=>n.e(927).then(n.t.bind(n,5132,19)),"~docs/default/category-docs-docs-category-ssjs-f97.json",5132],"45ce19ba":[()=>n.e(9887).then(n.t.bind(n,7986,19)),"~docs/default/category-docs-docs-category-javascript-020.json",7986],"48b2f688":[()=>n.e(3637).then(n.t.bind(n,556,19)),"~docs/default/tag-docs-tags-marketing-cloud-f0e.json",556],"4d6aece4":[()=>Promise.all([n.e(532),n.e(3466)]).then(n.bind(n,1246)),"@site/docs/webinars/sfmc-webinar-cloud-page-apps.mdx",1246],"509f2ea4":[()=>Promise.all([n.e(532),n.e(9134)]).then(n.bind(n,7041)),"@site/docs/sql/sfmc-sql-where.mdx",7041],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"5ad68b42":[()=>n.e(5413).then(n.t.bind(n,7085,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],"5e95c892":[()=>n.e(9661).then(n.bind(n,4942)),"@theme/DocsRoot",4942],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5ee690fc":[()=>Promise.all([n.e(532),n.e(6648),n.e(9484)]).then(n.bind(n,4529)),"@site/docs/sql/sfmc-sql-join.mdx",4529],"5ee7ecad":[()=>Promise.all([n.e(532),n.e(840)]).then(n.bind(n,3180)),"@site/docs/sql/sfmc-sql-string-functions.mdx",3180],"612d51b5":[()=>Promise.all([n.e(532),n.e(3108)]).then(n.bind(n,6178)),"@site/docs/config/sfmc-mobile-connect-data-views.mdx",6178],"655aa231":[()=>n.e(2831).then(n.t.bind(n,301,19)),"~docs/default/tag-docs-tags-style-guide-c3b.json",301],"66b75e7a":[()=>n.e(4414).then(n.t.bind(n,8784,19)),"~docs/default/category-docs-snippets-category-sfmc-ssjs-snippets-327.json",8784],"67a57efa":[()=>Promise.all([n.e(532),n.e(945)]).then(n.bind(n,642)),"@site/docs/ssjs/ssjs-if-and-switch.mdx",642],"6a99b79c":[()=>n.e(7008).then(n.t.bind(n,8526,19)),"~docs/default/tag-docs-tags-personalisation-15d.json",8526],"6d83c2a5":[()=>Promise.all([n.e(532),n.e(4134)]).then(n.bind(n,5138)),"@site/docs/sql/sfmc-sql-like.mdx",5138],"6ef4e5a9":[()=>n.e(299).then(n.t.bind(n,3769,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"6f35f557":[()=>n.e(5295).then(n.t.bind(n,3591,19)),"~docs/default/tag-docs-tags-cloud-page-7fa.json",3591],"7046da09":[()=>n.e(4853).then(n.t.bind(n,6670,19)),"~docs/default/category-docs-docs-category-marketing-cloud-personalization-5dd.json",6670],"734af923":[()=>n.e(3265).then(n.t.bind(n,2693,19)),"~docs/sites/tag-sites-tags-faq-bee.json",2693],"75f11010":[()=>n.e(362).then(n.t.bind(n,7772,19)),"~docs/default/tag-docs-tags-marketing-cloud-personalization-494.json",7772],"772c8612":[()=>Promise.all([n.e(532),n.e(3157)]).then(n.bind(n,6655)),"@site/sites/licence.mdx",6655],"7827587b":[()=>Promise.all([n.e(532),n.e(4507)]).then(n.bind(n,7237)),"@site/docs/ssjs/snippets/ampscript-in-ssjs.mdx",7237],"78bdd589":[()=>n.e(6091).then(n.t.bind(n,9483,19)),"~docs/default/tag-docs-tags-app-88f.json",9483],"7a40f54e":[()=>n.e(1697).then(n.t.bind(n,9728,19)),"~docs/default/tag-docs-tags-webinar-73f.json",9728],"7e516c75":[()=>n.e(9922).then(n.t.bind(n,8573,19)),"~docs/default/tag-docs-tags-java-script-6c3.json",8573],"7eaafb14":[()=>n.e(1351).then(n.t.bind(n,7537,19)),"~docs/sites/tag-sites-tags-interaction-studio-c23.json",7537],"7f3cd917":[()=>Promise.all([n.e(532),n.e(4219)]).then(n.bind(n,5624)),"@site/docs/js/snippets/engage-with-countdown.mdx",5624],"7f9f5c99":[()=>Promise.all([n.e(532),n.e(1092)]).then(n.bind(n,4664)),"@site/docs/config/sfmc-system-data-views.mdx",4664],"81e44c7d":[()=>n.e(5590).then(n.t.bind(n,2136,19)),"~docs/default/tag-docs-tags-ssjs-70d.json",2136],"81fb7942":[()=>Promise.all([n.e(532),n.e(1918)]).then(n.bind(n,914)),"@site/sites/faq/how-to-get-sfmc-hands-on-experience.mdx",914],"8440116e":[()=>n.e(2244).then(n.t.bind(n,5244,19)),"~docs/default/tag-docs-tags-amp-script-2e2.json",5244],"8a538aec":[()=>n.e(3009).then(n.t.bind(n,6418,19)),"~docs/default/tag-docs-tags-snippet-022.json",6418],"8dfb128c":[()=>Promise.all([n.e(532),n.e(4715)]).then(n.bind(n,8764)),"@site/sites/ideas/mc-personalization-ideas.mdx",8764],"8e6f5683":[()=>n.e(3864).then(n.t.bind(n,480,19)),"~docs/default/tag-docs-tags-einstein-dfb.json",480],"9177d15f":[()=>n.e(6440).then(n.t.bind(n,9110,19)),"~docs/default/tag-docs-tags-debugging-005.json",9110],"929714a5":[()=>Promise.all([n.e(532),n.e(2493)]).then(n.bind(n,7083)),"@site/docs/interaction-studio/mcp-serverside-code-context.mdx",7083],"92cda9bf":[()=>Promise.all([n.e(532),n.e(4200)]).then(n.bind(n,5325)),"@site/docs/ssjs/debugging-ssjs.mdx",5325],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"937990e1":[()=>Promise.all([n.e(532),n.e(7531)]).then(n.bind(n,7907)),"@site/docs/interaction-studio/mcp-serverside-code-properties.mdx",7907],"9944d2ae":[()=>n.e(2640).then(n.t.bind(n,9665,19)),"~docs/default/tag-docs-tags-users-5c3.json",9665],"99db9621":[()=>n.e(5647).then(n.t.bind(n,8114,19)),"~docs/default/category-docs-docs-category-sfmc-config-cef.json",8114],"9a63677c":[()=>n.e(5169).then(n.t.bind(n,3884,19)),"~docs/default/tag-docs-tags-eloqua-400.json",3884],"9be7a4ef":[()=>Promise.all([n.e(532),n.e(1694)]).then(n.bind(n,1244)),"@site/docs/ampscript/ampscript-style-guide.mdx",1244],"9e4ad429":[()=>n.e(5406).then(n.t.bind(n,6060,19)),"~docs/default/tag-docs-tags-performance-339.json",6060],a6709703:[()=>n.e(4650).then(n.t.bind(n,1517,19)),"~docs/default/tag-docs-tags-best-practice-f6e.json",1517],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,604)),"@theme/DocVersionRoot",604],a8b77297:[()=>Promise.all([n.e(532),n.e(952)]).then(n.bind(n,5016)),"@site/docs/config/sfmc-code-resource.mdx",5016],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,3699)),"@theme/DocRoot",3699],aeba84fb:[()=>Promise.all([n.e(532),n.e(5354)]).then(n.bind(n,2047)),"@site/docs/zen-of-sfmc.mdx",2047],b33fbe49:[()=>n.e(3275).then(n.t.bind(n,6543,19)),"~docs/default/category-docs-docs-category-mcp-serverside-code-62c.json",6543],b39e9a29:[()=>Promise.all([n.e(532),n.e(924)]).then(n.bind(n,6402)),"@site/docs/sql/sfmc-sql-select.mdx",6402],b463a77c:[()=>n.e(2618).then(n.t.bind(n,3170,19)),"~docs/default/tag-docs-tags-behavioral-triggers-d29.json",3170],b52e5d8d:[()=>Promise.all([n.e(532),n.e(8693)]).then(n.bind(n,1264)),"@site/docs/config/sfmc-features-on-demand.mdx",1264],b840d82f:[()=>Promise.all([n.e(532),n.e(7542)]).then(n.bind(n,4416)),"@site/docs/sql/sfmc-sql-basics.mdx",4416],b84a6020:[()=>Promise.all([n.e(532),n.e(5811)]).then(n.bind(n,4215)),"@site/docs/ssjs/snippets/ssjs-mobileconnect-phone-change.mdx",4215],b8693892:[()=>n.e(7670).then(n.t.bind(n,2314,19)),"~docs/sites/category-sites-faq-category-frequently-asked-questions-aca.json",2314],ba7840dc:[()=>n.e(770).then(n.t.bind(n,1881,19)),"~docs/sites/version-current-metadata-prop-751.json",1881],bb5d57b6:[()=>Promise.all([n.e(532),n.e(8773)]).then(n.bind(n,5089)),"@site/docs/sql/sfmc-sql-numeric-functions.mdx",5089],beb9716f:[()=>Promise.all([n.e(532),n.e(2769)]).then(n.bind(n,9021)),"@site/sites/newsletter.mdx",9021],c0a0d864:[()=>n.e(6583).then(n.t.bind(n,5705,19)),"~docs/default/tag-docs-tags-sql-a7a.json",5705],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,9660)),"@site/src/pages/index.js",9660],c60f9f65:[()=>n.e(8833).then(n.t.bind(n,2089,19)),"~docs/default/category-docs-snippets-category-marketing-cloud-personalization-snippets-aca.json",2089],c64b8421:[()=>Promise.all([n.e(532),n.e(7921)]).then(n.bind(n,6835)),"@site/docs/sql/sfmc-sql-case.mdx",6835],c7794043:[()=>n.e(6639).then(n.t.bind(n,7351,19)),"~docs/default/tag-docs-tags-setup-90f.json",7351],c792d462:[()=>n.e(4941).then(n.t.bind(n,4115,19)),"~docs/sites/tags-list-current-prop-15a.json",4115],c8a2287d:[()=>Promise.all([n.e(532),n.e(6648),n.e(3786)]).then(n.bind(n,3914)),"@site/docs/config/sfmc-appexchange-solutions.mdx",3914],cafad187:[()=>n.e(3447).then(n.t.bind(n,1495,19)),"~docs/default/category-docs-docs-category-sfmc-sql-2d9.json",1495],cb12d9b9:[()=>n.e(7983).then(n.t.bind(n,8542,19)),"~docs/default/tag-docs-tags-interaction-studio-526.json",8542],ce321ae3:[()=>n.e(1837).then(n.t.bind(n,2141,19)),"~docs/default/tag-docs-tags-configuration-143.json",2141],d164ef0a:[()=>n.e(1247).then(n.t.bind(n,5745,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],d2c975d1:[()=>n.e(9449).then(n.t.bind(n,5736,19)),"~docs/default/category-docs-snippets-category-js-snippets-970.json",5736],d44a7d50:[()=>Promise.all([n.e(532),n.e(6648),n.e(4514)]).then(n.bind(n,1596)),"@site/docs/sql/snippets/sfmc-sql-debugging-email-sends.mdx",1596],d4ed38e0:[()=>Promise.all([n.e(532),n.e(1441)]).then(n.bind(n,9875)),"@site/docs/sql/sfmc-sql-conversion-functions.mdx",9875],d5687ba7:[()=>Promise.all([n.e(532),n.e(7207)]).then(n.bind(n,7604)),"@site/docs/ssjs/ssjs-style-guide.mdx",7604],dc8b40ff:[()=>Promise.all([n.e(532),n.e(4502)]).then(n.bind(n,8279)),"@site/docs/ssjs/snippets/ssjs-script-template.mdx",8279],df203c0f:[()=>Promise.all([n.e(532),n.e(9924)]).then(n.bind(n,615)),"@theme/DocTagDocListPage",615],dfa9382d:[()=>n.e(1074).then(n.t.bind(n,7077,19)),"~docs/default/category-docs-snippets-category-sfmc-ampscript-snippets-a3c.json",7077],e2615d27:[()=>n.e(9117).then(n.t.bind(n,2797,19)),"~docs/default/tag-docs-tags-email-9f4.json",2797],e3f02ea0:[()=>n.e(9379).then(n.t.bind(n,6791,19)),"~docs/sites/tag-sites-tags-best-practice-f65.json",6791],e5aa2e7b:[()=>n.e(8421).then(n.t.bind(n,5269,19)),"~docs/default/tag-docs-tags-analytics-b03.json",5269],e5fc05e6:[()=>Promise.all([n.e(532),n.e(998)]).then(n.bind(n,5083)),"@site/docs/sql/sfmc-sql-null-functions.mdx",5083],ec6dc5c4:[()=>Promise.all([n.e(532),n.e(7873)]).then(n.bind(n,9970)),"@site/docs/js/snippets/export-import-document-sfmc-roles.mdx",9970],ecbe7f2c:[()=>Promise.all([n.e(532),n.e(7120)]).then(n.bind(n,2821)),"@site/docs/sql/sfmc-sql-style-guide.mdx",2821],ecd0154e:[()=>Promise.all([n.e(532),n.e(1654)]).then(n.bind(n,9896)),"@site/docs/js/js-dom.mdx",9896],ecf138d3:[()=>n.e(7576).then(n.t.bind(n,2364,19)),"~docs/sites/category-sites-ideas-category-ideas-e6c.json",2364],edb10261:[()=>Promise.all([n.e(532),n.e(8819)]).then(n.bind(n,2432)),"@site/docs/webinars/sfmc-webinar-account-architecture.mdx",2432],f3b2d393:[()=>n.e(9865).then(n.t.bind(n,2946,19)),"~docs/default/tag-docs-tags-data-extensions-fa4.json",2946],f4b177ec:[()=>n.e(6050).then(n.t.bind(n,8407,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-plugin-content-docs/sites/plugin-route-context-module-100.json",8407],f564aeae:[()=>Promise.all([n.e(532),n.e(1572)]).then(n.bind(n,1950)),"@site/docs/config/sfmc-enhanced-send-log.mdx",1950],f881cc1a:[()=>n.e(2907).then(n.t.bind(n,6216,19)),"~docs/default/tag-docs-tags-deliverability-66a.json",6216],fa7b3a47:[()=>n.e(4027).then(n.t.bind(n,7140,19)),"~docs/default/category-docs-snippets-category-sfmc-sql-snippets-2fe.json",7140],fcb5ea75:[()=>n.e(633).then(n.t.bind(n,96,19)),"~docs/sites/tag-sites-tags-personalization-03d.json",96],fd9368c3:[()=>Promise.all([n.e(532),n.e(7805)]).then(n.bind(n,7244)),"@site/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer.mdx",7244],fe4d0c3d:[()=>Promise.all([n.e(532),n.e(8700)]).then(n.bind(n,9099)),"@site/docs/interaction-studio/mcp-open-time-email.mdx",9099],ff2c7cca:[()=>n.e(7706).then(n.t.bind(n,5028,19)),"~docs/default/tag-docs-tags-type-script-6e5.json",5028],ff324314:[()=>n.e(3605).then(n.t.bind(n,7377,19)),"~docs/default/category-docs-docs-category-ampscript-398.json",7377],ff6cdf17:[()=>Promise.all([n.e(532),n.e(2163)]).then(n.bind(n,6044)),"@site/docs/ssjs/ssjs-vs-ampscript-performance.mdx",6044]};var i=n(5893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,i.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,i.jsx)("p",{children:String(t)}),(0,i.jsx)("div",{children:(0,i.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,i.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,i.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,i.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,i.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,i.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,i.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,i.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,i.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,i.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(5304),u=n(9656);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(868).then(n.bind(n,868)),modules:["@theme/NotFound"],webpack:()=>[868],render(e,t){const n=e.default;return(0,i.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,i.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],m=(0,c.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=s[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let s=a;const i=n.split(".");i.slice(0,-1).forEach((e=>{s=s[e]})),s[i[i.length-1]]=o}));const o=a.__comp;delete a.__comp;const s=a.__context;return delete a.__context,(0,i.jsx)(u.z,{value:s,children:(0,i.jsx)(o,{...a,...n})})}})}const p=[{path:"/search/",component:d("/search/","a24"),exact:!0},{path:"/docs/",component:d("/docs/","0ee"),routes:[{path:"/docs/",component:d("/docs/","32e"),routes:[{path:"/docs/tags/",component:d("/docs/tags/","71d"),exact:!0},{path:"/docs/tags/amp-script/",component:d("/docs/tags/amp-script/","460"),exact:!0},{path:"/docs/tags/analytics/",component:d("/docs/tags/analytics/","b32"),exact:!0},{path:"/docs/tags/app-exchange/",component:d("/docs/tags/app-exchange/","459"),exact:!0},{path:"/docs/tags/app/",component:d("/docs/tags/app/","789"),exact:!0},{path:"/docs/tags/automation/",component:d("/docs/tags/automation/","a3b"),exact:!0},{path:"/docs/tags/behavioral-triggers/",component:d("/docs/tags/behavioral-triggers/","fea"),exact:!0},{path:"/docs/tags/best-practice/",component:d("/docs/tags/best-practice/","627"),exact:!0},{path:"/docs/tags/cloud-page/",component:d("/docs/tags/cloud-page/","2ef"),exact:!0},{path:"/docs/tags/configuration/",component:d("/docs/tags/configuration/","d0c"),exact:!0},{path:"/docs/tags/crm/",component:d("/docs/tags/crm/","965"),exact:!0},{path:"/docs/tags/data-extensions/",component:d("/docs/tags/data-extensions/","0f8"),exact:!0},{path:"/docs/tags/data-management/",component:d("/docs/tags/data-management/","e6e"),exact:!0},{path:"/docs/tags/debugging/",component:d("/docs/tags/debugging/","466"),exact:!0},{path:"/docs/tags/deliverability/",component:d("/docs/tags/deliverability/","824"),exact:!0},{path:"/docs/tags/einstein/",component:d("/docs/tags/einstein/","1a7"),exact:!0},{path:"/docs/tags/eloqua/",component:d("/docs/tags/eloqua/","f6f"),exact:!0},{path:"/docs/tags/email/",component:d("/docs/tags/email/","a00"),exact:!0},{path:"/docs/tags/integration/",component:d("/docs/tags/integration/","d21"),exact:!0},{path:"/docs/tags/interaction-studio/",component:d("/docs/tags/interaction-studio/","6d9"),exact:!0},{path:"/docs/tags/java-script/",component:d("/docs/tags/java-script/","62f"),exact:!0},{path:"/docs/tags/journey/",component:d("/docs/tags/journey/","302"),exact:!0},{path:"/docs/tags/marketing-cloud-personalization/",component:d("/docs/tags/marketing-cloud-personalization/","2ab"),exact:!0},{path:"/docs/tags/marketing-cloud/",component:d("/docs/tags/marketing-cloud/","05e"),exact:!0},{path:"/docs/tags/performance/",component:d("/docs/tags/performance/","6d4"),exact:!0},{path:"/docs/tags/personalisation/",component:d("/docs/tags/personalisation/","fc7"),exact:!0},{path:"/docs/tags/setup/",component:d("/docs/tags/setup/","5a6"),exact:!0},{path:"/docs/tags/sms/",component:d("/docs/tags/sms/","dc4"),exact:!0},{path:"/docs/tags/snippet/",component:d("/docs/tags/snippet/","574"),exact:!0},{path:"/docs/tags/sql/",component:d("/docs/tags/sql/","f3f"),exact:!0},{path:"/docs/tags/ssjs/",component:d("/docs/tags/ssjs/","19a"),exact:!0},{path:"/docs/tags/style-guide/",component:d("/docs/tags/style-guide/","f8a"),exact:!0},{path:"/docs/tags/type-script/",component:d("/docs/tags/type-script/","bbd"),exact:!0},{path:"/docs/tags/users/",component:d("/docs/tags/users/","091"),exact:!0},{path:"/docs/tags/webinar/",component:d("/docs/tags/webinar/","a18"),exact:!0},{path:"/docs/",component:d("/docs/","cff"),routes:[{path:"/docs/",component:d("/docs/","d13"),exact:!0,sidebar:"docs"},{path:"/docs/ampscript/ampscript-style-guide/",component:d("/docs/ampscript/ampscript-style-guide/","e83"),exact:!0,sidebar:"docs"},{path:"/docs/category/ampscript-snippets/",component:d("/docs/category/ampscript-snippets/","0ef"),exact:!0,sidebar:"snippets"},{path:"/docs/category/ampscript/",component:d("/docs/category/ampscript/","e32"),exact:!0,sidebar:"docs"},{path:"/docs/category/javascript/",component:d("/docs/category/javascript/","ea1"),exact:!0,sidebar:"docs"},{path:"/docs/category/js-snippets/",component:d("/docs/category/js-snippets/","8cf"),exact:!0,sidebar:"snippets"},{path:"/docs/category/mc-personalization-snippets/",component:d("/docs/category/mc-personalization-snippets/","c5b"),exact:!0,sidebar:"snippets"},{path:"/docs/category/mc-personalization/",component:d("/docs/category/mc-personalization/","ae2"),exact:!0,sidebar:"docs"},{path:"/docs/category/serverside-code/",component:d("/docs/category/serverside-code/","0ef"),exact:!0,sidebar:"docs"},{path:"/docs/category/sfmc-config/",component:d("/docs/category/sfmc-config/","92c"),exact:!0,sidebar:"docs"},{path:"/docs/category/sfmc-sql-snippets/",component:d("/docs/category/sfmc-sql-snippets/","e14"),exact:!0,sidebar:"snippets"},{path:"/docs/category/sfmc-sql/",component:d("/docs/category/sfmc-sql/","dea"),exact:!0,sidebar:"docs"},{path:"/docs/category/sfmc-webinars/",component:d("/docs/category/sfmc-webinars/","679"),exact:!0,sidebar:"webinars"},{path:"/docs/category/ssjs-snippets/",component:d("/docs/category/ssjs-snippets/","86b"),exact:!0,sidebar:"snippets"},{path:"/docs/category/ssjs/",component:d("/docs/category/ssjs/","b2a"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-appexchange-solutions/",component:d("/docs/config/sfmc-appexchange-solutions/","b71"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-behavioral-triggers/",component:d("/docs/config/sfmc-behavioral-triggers/","66a"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-code-resource/",component:d("/docs/config/sfmc-code-resource/","bc5"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-contact-deletion/",component:d("/docs/config/sfmc-contact-deletion/","806"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-enhanced-send-log/",component:d("/docs/config/sfmc-enhanced-send-log/","68f"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-features-on-demand/",component:d("/docs/config/sfmc-features-on-demand/","499"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-mcc-integration-patterns/",component:d("/docs/config/sfmc-mcc-integration-patterns/","d62"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-mobile-connect-data-views/",component:d("/docs/config/sfmc-mobile-connect-data-views/","1f6"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-system-data-views/",component:d("/docs/config/sfmc-system-data-views/","5bd"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-catalog-architecture/",component:d("/docs/interaction-studio/mcp-catalog-architecture/","339"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-open-time-email/",component:d("/docs/interaction-studio/mcp-open-time-email/","f61"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-serverside-code-basics/",component:d("/docs/interaction-studio/mcp-serverside-code-basics/","d80"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-serverside-code-context/",component:d("/docs/interaction-studio/mcp-serverside-code-context/","129"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-serverside-code-properties/",component:d("/docs/interaction-studio/mcp-serverside-code-properties/","bf2"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/",component:d("/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/","7d9"),exact:!0,sidebar:"snippets"},{path:"/docs/js/js-dom/",component:d("/docs/js/js-dom/","3e7"),exact:!0,sidebar:"docs"},{path:"/docs/js/js-if-and-switch/",component:d("/docs/js/js-if-and-switch/","ac9"),exact:!0,sidebar:"docs"},{path:"/docs/js/js-loops/",component:d("/docs/js/js-loops/","809"),exact:!0,sidebar:"docs"},{path:"/docs/js/snippets/engage-with-countdown/",component:d("/docs/js/snippets/engage-with-countdown/","c2a"),exact:!0,sidebar:"snippets"},{path:"/docs/js/snippets/export-import-document-sfmc-roles/",component:d("/docs/js/snippets/export-import-document-sfmc-roles/","3a0"),exact:!0,sidebar:"snippets"},{path:"/docs/js/snippets/tailor-with-data/",component:d("/docs/js/snippets/tailor-with-data/","bb9"),exact:!0,sidebar:"snippets"},{path:"/docs/sql/sfmc-sql-aggregate-functions/",component:d("/docs/sql/sfmc-sql-aggregate-functions/","4cd"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-basics/",component:d("/docs/sql/sfmc-sql-basics/","626"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-case/",component:d("/docs/sql/sfmc-sql-case/","032"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-conversion-functions/",component:d("/docs/sql/sfmc-sql-conversion-functions/","732"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-date-functions/",component:d("/docs/sql/sfmc-sql-date-functions/","4a6"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-from/",component:d("/docs/sql/sfmc-sql-from/","3c2"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-join/",component:d("/docs/sql/sfmc-sql-join/","de4"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-like/",component:d("/docs/sql/sfmc-sql-like/","5e2"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-null-functions/",component:d("/docs/sql/sfmc-sql-null-functions/","789"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-numeric-functions/",component:d("/docs/sql/sfmc-sql-numeric-functions/","dc8"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-select/",component:d("/docs/sql/sfmc-sql-select/","7c1"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-string-functions/",component:d("/docs/sql/sfmc-sql-string-functions/","a6e"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-style-guide/",component:d("/docs/sql/sfmc-sql-style-guide/","f0a"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-where/",component:d("/docs/sql/sfmc-sql-where/","633"),exact:!0,sidebar:"docs"},{path:"/docs/sql/snippets/sfmc-sql-debugging-email-sends/",component:d("/docs/sql/snippets/sfmc-sql-debugging-email-sends/","dde"),exact:!0,sidebar:"snippets"},{path:"/docs/sql/snippets/sfmc-sql-debugging-value-length/",component:d("/docs/sql/snippets/sfmc-sql-debugging-value-length/","e61"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/debugging-ssjs/",component:d("/docs/ssjs/debugging-ssjs/","b7f"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/snippets/ampscript-in-ssjs/",component:d("/docs/ssjs/snippets/ampscript-in-ssjs/","a8c"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/snippets/sfmc-cloud-page-apps/",component:d("/docs/ssjs/snippets/sfmc-cloud-page-apps/","bd9"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/",component:d("/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/","3f3"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/snippets/ssjs-script-template/",component:d("/docs/ssjs/snippets/ssjs-script-template/","0fd"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/ssjs-if-and-switch/",component:d("/docs/ssjs/ssjs-if-and-switch/","675"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/ssjs-loops/",component:d("/docs/ssjs/ssjs-loops/","e7c"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/ssjs-style-guide/",component:d("/docs/ssjs/ssjs-style-guide/","d86"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/ssjs-vs-ampscript-performance/",component:d("/docs/ssjs/ssjs-vs-ampscript-performance/","a13"),exact:!0,sidebar:"docs"},{path:"/docs/webinars/sfmc-webinar-account-architecture/",component:d("/docs/webinars/sfmc-webinar-account-architecture/","8c9"),exact:!0,sidebar:"webinars"},{path:"/docs/webinars/sfmc-webinar-architecting-web-solutions/",component:d("/docs/webinars/sfmc-webinar-architecting-web-solutions/","7d1"),exact:!0,sidebar:"webinars"},{path:"/docs/webinars/sfmc-webinar-cloud-page-apps/",component:d("/docs/webinars/sfmc-webinar-cloud-page-apps/","28d"),exact:!0,sidebar:"webinars"},{path:"/docs/zen-of-sfmc/",component:d("/docs/zen-of-sfmc/","24d"),exact:!0,sidebar:"docs"}]}]}]},{path:"/sites/",component:d("/sites/","83d"),routes:[{path:"/sites/",component:d("/sites/","1fc"),routes:[{path:"/sites/tags/",component:d("/sites/tags/","e2e"),exact:!0},{path:"/sites/tags/best-practice/",component:d("/sites/tags/best-practice/","c5e"),exact:!0},{path:"/sites/tags/faq/",component:d("/sites/tags/faq/","7c2"),exact:!0},{path:"/sites/tags/interaction-studio/",component:d("/sites/tags/interaction-studio/","2bc"),exact:!0},{path:"/sites/tags/marketing-cloud-personalization/",component:d("/sites/tags/marketing-cloud-personalization/","175"),exact:!0},{path:"/sites/tags/marketing-cloud/",component:d("/sites/tags/marketing-cloud/","07d"),exact:!0},{path:"/sites/tags/personalization/",component:d("/sites/tags/personalization/","70f"),exact:!0},{path:"/sites/",component:d("/sites/","aa1"),routes:[{path:"/sites/category/faq/",component:d("/sites/category/faq/","a76"),exact:!0,sidebar:"faq"},{path:"/sites/category/ideas/",component:d("/sites/category/ideas/","25e"),exact:!0,sidebar:"ideas"},{path:"/sites/faq/how-to-get-sf-certification-vouchers/",component:d("/sites/faq/how-to-get-sf-certification-vouchers/","a25"),exact:!0,sidebar:"faq"},{path:"/sites/faq/how-to-get-sfmc-hands-on-experience/",component:d("/sites/faq/how-to-get-sfmc-hands-on-experience/","55d"),exact:!0,sidebar:"faq"},{path:"/sites/ideas/marketing-cloud-ideas/",component:d("/sites/ideas/marketing-cloud-ideas/","f06"),exact:!0,sidebar:"ideas"},{path:"/sites/ideas/mc-personalization-ideas/",component:d("/sites/ideas/mc-personalization-ideas/","e39"),exact:!0,sidebar:"ideas"},{path:"/sites/licence/",component:d("/sites/licence/","404"),exact:!0},{path:"/sites/my-toolset/",component:d("/sites/my-toolset/","7ae"),exact:!0},{path:"/sites/newsletter/",component:d("/sites/newsletter/","8b7"),exact:!0},{path:"/sites/privacy/",component:d("/sites/privacy/","6e8"),exact:!0}]}]}]},{path:"/",component:d("/","f16"),exact:!0},{path:"*",component:d("*")}]},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>s});var r=n(7294),a=n(5893);const o=r.createContext(!1);function s(e){let{children:t}=e;const[n,s]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{s(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},9717:(e,t,n)=>{"use strict";var r=n(7294),a=n(745),o=n(3727),s=n(405),i=n(6136);const l=[n(4313),n(984),n(2251),n(9957),n(6930)];var c=n(997),u=n(6550),d=n(8790),p=n(5893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(1514),g=n(9962),h=n(9524),b=n(107),y=n(9488),v=n(626),w=n(8181),x=n(246),k=n(3905),S=n(3647);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.Z)(),r=(0,v.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(m.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,u.TH)();return e+(0,k.applyTrailingSlash)((0,h.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(_,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.Z,{tag:x.HX,locale:e}),(0,p.jsx)(m.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function j(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var N=n(8121),A=n(694),L=n(1270);function I(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:s}=t;if(s){const e=decodeURIComponent(s.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),I("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=i.Z.canUseDOM?I("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=I("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const M=O,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${F}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${z}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${z}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,p.jsx)(p.Fragment,{children:!i.Z.canUseDOM&&(0,p.jsx)(m.Z,{children:(0,p.jsx)("script",{children:B(e)})})})}function q(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?(0,p.jsx)(U,{}):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:a}}=(0,g.Z)(),o=(0,h.Z)(e),{htmlLang:s,direction:i}=a[r];return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("html",{lang:s,dir:i}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:o})]})}var Z=n(3256),H=n(1048);function V(){const e=(0,H.Z)();return(0,p.jsx)(m.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function W(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return(0,p.jsx)(Z.Z,{children:(0,p.jsx)(A.M,{children:(0,p.jsxs)(N.t,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)($,{}),(0,p.jsx)(C,{}),(0,p.jsx)(q,{}),(0,p.jsx)(M,{location:j(t),children:e})]}),(0,p.jsx)(V,{})]})})})}var G=n(6887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(5304);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(i.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(s.B6,{children:(0,p.jsx)(o.VK,{children:(0,p.jsx)(W,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};R(window.location.pathname).then(i)}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["GTM-N46LB5K"],"anonymizeIP":true,"id":"default"}},"docusaurus-plugin-content-docs":{"sites":{"path":"/sites","versions":[{"name":"current","label":"Next","isLast":true,"path":"/sites","mainDocId":"ideas/marketing-cloud-ideas","docs":[{"id":"faq/how-to-get-sf-certification-vouchers","path":"/sites/faq/how-to-get-sf-certification-vouchers","sidebar":"faq"},{"id":"faq/how-to-get-sfmc-hands-on-experience","path":"/sites/faq/how-to-get-sfmc-hands-on-experience","sidebar":"faq"},{"id":"ideas/marketing-cloud-ideas","path":"/sites/ideas/marketing-cloud-ideas","sidebar":"ideas"},{"id":"ideas/mc-personalization-ideas","path":"/sites/ideas/mc-personalization-ideas","sidebar":"ideas"},{"id":"licence","path":"/sites/licence"},{"id":"my-toolset","path":"/sites/my-toolset"},{"id":"newsletter","path":"/sites/newsletter"},{"id":"privacy","path":"/sites/privacy"},{"id":"/category/ideas","path":"/sites/category/ideas","sidebar":"ideas"},{"id":"/category/faq","path":"/sites/category/faq","sidebar":"faq"}],"draftIds":[],"sidebars":{"ideas":{"link":{"path":"/sites/category/ideas","label":"Ideas"}},"faq":{"link":{"path":"/sites/category/faq","label":"FAQ"}}}}],"breadcrumbs":true},"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"docs-and-snippets","docs":[{"id":"ampscript/ampscript-style-guide","path":"/docs/ampscript/ampscript-style-guide","sidebar":"docs"},{"id":"config/sfmc-appexchange-solutions","path":"/docs/config/sfmc-appexchange-solutions","sidebar":"docs"},{"id":"config/sfmc-behavioral-triggers","path":"/docs/config/sfmc-behavioral-triggers","sidebar":"docs"},{"id":"config/sfmc-code-resource","path":"/docs/config/sfmc-code-resource","sidebar":"docs"},{"id":"config/sfmc-contact-deletion","path":"/docs/config/sfmc-contact-deletion","sidebar":"docs"},{"id":"config/sfmc-enhanced-send-log","path":"/docs/config/sfmc-enhanced-send-log","sidebar":"docs"},{"id":"config/sfmc-features-on-demand","path":"/docs/config/sfmc-features-on-demand","sidebar":"docs"},{"id":"config/sfmc-mcc-integration-patterns","path":"/docs/config/sfmc-mcc-integration-patterns","sidebar":"docs"},{"id":"config/sfmc-mobile-connect-data-views","path":"/docs/config/sfmc-mobile-connect-data-views","sidebar":"docs"},{"id":"config/sfmc-system-data-views","path":"/docs/config/sfmc-system-data-views","sidebar":"docs"},{"id":"docs-and-snippets","path":"/docs/","sidebar":"docs"},{"id":"interaction-studio/mcp-catalog-architecture","path":"/docs/interaction-studio/mcp-catalog-architecture","sidebar":"docs"},{"id":"interaction-studio/mcp-open-time-email","path":"/docs/interaction-studio/mcp-open-time-email","sidebar":"docs"},{"id":"interaction-studio/mcp-serverside-code-basics","path":"/docs/interaction-studio/mcp-serverside-code-basics","sidebar":"docs"},{"id":"interaction-studio/mcp-serverside-code-context","path":"/docs/interaction-studio/mcp-serverside-code-context","sidebar":"docs"},{"id":"interaction-studio/mcp-serverside-code-properties","path":"/docs/interaction-studio/mcp-serverside-code-properties","sidebar":"docs"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","path":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","sidebar":"snippets"},{"id":"js/js-dom","path":"/docs/js/js-dom","sidebar":"docs"},{"id":"js/js-if-and-switch","path":"/docs/js/js-if-and-switch","sidebar":"docs"},{"id":"js/js-loops","path":"/docs/js/js-loops","sidebar":"docs"},{"id":"js/snippets/engage-with-countdown","path":"/docs/js/snippets/engage-with-countdown","sidebar":"snippets"},{"id":"js/snippets/export-import-document-sfmc-roles","path":"/docs/js/snippets/export-import-document-sfmc-roles","sidebar":"snippets"},{"id":"js/snippets/tailor-with-data","path":"/docs/js/snippets/tailor-with-data","sidebar":"snippets"},{"id":"sql/sfmc-sql-aggregate-functions","path":"/docs/sql/sfmc-sql-aggregate-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-basics","path":"/docs/sql/sfmc-sql-basics","sidebar":"docs"},{"id":"sql/sfmc-sql-case","path":"/docs/sql/sfmc-sql-case","sidebar":"docs"},{"id":"sql/sfmc-sql-conversion-functions","path":"/docs/sql/sfmc-sql-conversion-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-date-functions","path":"/docs/sql/sfmc-sql-date-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-from","path":"/docs/sql/sfmc-sql-from","sidebar":"docs"},{"id":"sql/sfmc-sql-join","path":"/docs/sql/sfmc-sql-join","sidebar":"docs"},{"id":"sql/sfmc-sql-like","path":"/docs/sql/sfmc-sql-like","sidebar":"docs"},{"id":"sql/sfmc-sql-null-functions","path":"/docs/sql/sfmc-sql-null-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-numeric-functions","path":"/docs/sql/sfmc-sql-numeric-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-select","path":"/docs/sql/sfmc-sql-select","sidebar":"docs"},{"id":"sql/sfmc-sql-string-functions","path":"/docs/sql/sfmc-sql-string-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-style-guide","path":"/docs/sql/sfmc-sql-style-guide","sidebar":"docs"},{"id":"sql/sfmc-sql-where","path":"/docs/sql/sfmc-sql-where","sidebar":"docs"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","path":"/docs/sql/snippets/sfmc-sql-debugging-email-sends","sidebar":"snippets"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","path":"/docs/sql/snippets/sfmc-sql-debugging-value-length","sidebar":"snippets"},{"id":"ssjs/debugging-ssjs","path":"/docs/ssjs/debugging-ssjs","sidebar":"docs"},{"id":"ssjs/snippets/ampscript-in-ssjs","path":"/docs/ssjs/snippets/ampscript-in-ssjs","sidebar":"snippets"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","path":"/docs/ssjs/snippets/sfmc-cloud-page-apps","sidebar":"snippets"},{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","path":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change","sidebar":"snippets"},{"id":"ssjs/snippets/ssjs-script-template","path":"/docs/ssjs/snippets/ssjs-script-template","sidebar":"snippets"},{"id":"ssjs/ssjs-if-and-switch","path":"/docs/ssjs/ssjs-if-and-switch","sidebar":"docs"},{"id":"ssjs/ssjs-loops","path":"/docs/ssjs/ssjs-loops","sidebar":"docs"},{"id":"ssjs/ssjs-style-guide","path":"/docs/ssjs/ssjs-style-guide","sidebar":"docs"},{"id":"ssjs/ssjs-vs-ampscript-performance","path":"/docs/ssjs/ssjs-vs-ampscript-performance","sidebar":"docs"},{"id":"webinars/sfmc-webinar-account-architecture","path":"/docs/webinars/sfmc-webinar-account-architecture","sidebar":"webinars"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","path":"/docs/webinars/sfmc-webinar-architecting-web-solutions","sidebar":"webinars"},{"id":"webinars/sfmc-webinar-cloud-page-apps","path":"/docs/webinars/sfmc-webinar-cloud-page-apps","sidebar":"webinars"},{"id":"zen-of-sfmc","path":"/docs/zen-of-sfmc","sidebar":"docs"},{"id":"/category/ssjs","path":"/docs/category/ssjs","sidebar":"docs"},{"id":"/category/javascript","path":"/docs/category/javascript","sidebar":"docs"},{"id":"/category/ampscript","path":"/docs/category/ampscript","sidebar":"docs"},{"id":"/category/sfmc-sql","path":"/docs/category/sfmc-sql","sidebar":"docs"},{"id":"/category/sfmc-config","path":"/docs/category/sfmc-config","sidebar":"docs"},{"id":"/category/mc-personalization","path":"/docs/category/mc-personalization","sidebar":"docs"},{"id":"/category/serverside-code","path":"/docs/category/serverside-code","sidebar":"docs"},{"id":"/category/ssjs-snippets","path":"/docs/category/ssjs-snippets","sidebar":"snippets"},{"id":"/category/js-snippets","path":"/docs/category/js-snippets","sidebar":"snippets"},{"id":"/category/ampscript-snippets","path":"/docs/category/ampscript-snippets","sidebar":"snippets"},{"id":"/category/sfmc-sql-snippets","path":"/docs/category/sfmc-sql-snippets","sidebar":"snippets"},{"id":"/category/mc-personalization-snippets","path":"/docs/category/mc-personalization-snippets","sidebar":"snippets"},{"id":"/category/sfmc-webinars","path":"/docs/category/sfmc-webinars","sidebar":"webinars"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/zen-of-sfmc","label":"zen-of-sfmc"}},"snippets":{"link":{"path":"/docs/category/ssjs-snippets","label":"SSJS Snippets"}},"webinars":{"link":{"path":"/docs/category/sfmc-webinars","label":"SFMC Webinars"}}}}],"breadcrumbs":true}}}'),s=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var i=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"1.3.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.1.1"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"3.1.1"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.1.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.1.1"}}}');var c=n(5893);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:s,codeTranslations:i},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(6136),o=n(1514),s=n(3905),i=n(4960),l=n(5893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,s.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(o.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(i.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(405),a=n(5893);function o(e){return(0,a.jsx)(r.ql,{...e})}},4791:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(3727),o=n(3905),s=n(9962),i=n(2735),l=n(6136),c=n(168),u=n(9524),d=n(5893);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:x}=(0,u.C)(),k=(0,c.Z)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const _=(0,i.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(j=C,b&&(e=>e.startsWith("/"))(j)?x(j):j):void 0;var j;T&&_&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const N=(0,r.useRef)(!1),A=n?a.OL:a.rU,L=l.Z.canUseIntersectionObserver,I=(0,r.useRef)(),P=()=>{N.current||null==T||(window.docusaurus.preload(T),N.current=!0)};(0,r.useEffect)((()=>(!L&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&I.current&&I.current.disconnect()})),[I,T,L,_]);const R=T?.startsWith("#")??!1,O=!y.target||"_self"===y.target,M=!T||!_||!O||R;return h||!R&&M||k.collectLink(T),y.id&&k.collectAnchor(y.id),M?(0,d.jsx)("a",{ref:S,href:T,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(A,{...y,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,L&&e&&_&&(I.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(I.current.unobserve(e),I.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),I.current.observe(e))},to:T,...n&&{isActive:g,activeClassName:m}})}const f=r.forwardRef(p)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(7294),a=n(5893);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var s=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return s[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(s,r)})}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>s,Z:()=>i});var r=n(7294),a=n(9962),o=n(2735);function s(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:s=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const i=n.startsWith(t)?n:t+n.replace(/^\//,"");return s?e+i:i}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=s();return n(e,t)}},168:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(7294);n(5893);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function s(){return o()}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(694);function o(){return(0,r.useContext)(a._)}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8121);function o(){return(0,r.useContext)(a._)}},1270:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const a=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,s]=n;const i=a?`${a}.${o}`:o;r(s)?e(s,i):t[i]=s}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>s});var r=n(7294),a=n(5893);const o=r.createContext(null);function s(e){let{children:t,value:n}=e;const s=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:s,value:n})),[s,n]);return(0,a.jsx)(o.Provider,{value:i,children:t})}},9871:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>f,WS:()=>m,_r:()=>d,Jo:()=>y,zh:()=>p,yW:()=>h,gB:()=>g});var r=n(6550),a=n(9962),o=n(6875);function s(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const i=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=i(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>s("docusaurus-plugin-content-docs")??u,p=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=s(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function m(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function g(e){return p(e).versions}function h(e){const t=p(e);return i(t)}function b(e){const t=p(e),{pathname:n}=(0,r.TH)();return c(t,n)}function y(e){const t=p(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=i(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4313:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(2573),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(2391)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},3899:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(512),a=n(7325),o=n(107),s=n(4791),i=n(168);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(5893);function u(e){let{as:t,id:n,...u}=e;const d=(0,i.Z)(),{navbar:{hideOnScroll:p}}=(0,o.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(s.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},4082:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(5893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},4960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>jt});var r=n(7294),a=n(512),o=n(3256),s=n(9488),i=n(6550),l=n(7325),c=n(3266),u=n(5893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,i.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(3702),b=n(8181);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:y.skipToContent})}var w=n(107),x=n(5830);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...s}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...s,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function j(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,x.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),o&&(0,u.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var N=n(735),A=n(2957);var L=n(3768),I=n(3086);const P=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,I.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,s=(0,L.D9)(o);return(0,r.useEffect)((()=>{o&&!s&&a(!0)}),[o,s]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(P.Provider,{value:n,children:t})}function O(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function M(){const e=(0,r.useContext)(P);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,I.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:O(o)})),[a,o,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=M();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(9200),z=n(1048);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const q={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function $(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const s=(0,z.Z)(),i=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.Z)(q.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.Z)("clean-btn",q.toggleButton,!s&&q.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!s,title:i,"aria-label":i,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,a.Z)(q.toggleIcon,q.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,a.Z)(q.toggleIcon,q.darkToggleIcon)})]})})}const Z=r.memo($),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,F.I)();return r?null:(0,u.jsx)(Z,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var W=n(6811);function G(){return(0,u.jsx)(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,N.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(G,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(Y,{})]})}var Q=n(4791),X=n(9524),J=n(2735),ee=n(1500),te=n(4082);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:s,isDropdownLink:i,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.Z)(a),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,m&&(0,u.jsx)(te.Z,{...i&&{width:12,height:12}})]})};return a?(0,u.jsx)(Q.Z,{href:l?f:a,...c,...g}):(0,u.jsx)(Q.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(p)},...c,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var se=n(4639),ie=n(9003),le=n(9962);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,ie.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:s,...i}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:i.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:i.children??i.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ze,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:s,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,i.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ze,{mobile:!0,isDropdownItem:!0,onClick:s,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(626);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var be=n(3935);function ye(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ve=n(830),we=["translations"];function xe(){return xe=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},xe.apply(this,arguments)}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],s=!0,i=!1;try{for(n=n.call(e);!(s=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);s=!0);}catch(l){i=!0,a=l}finally{try{s||null==n.return||n.return()}finally{if(i)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Se(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Se(e,t)}(e,t)||function(){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 Se(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ee(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var _e="Ctrl";var Ce=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ee(e,we),s=a.buttonText,i=void 0===s?"Search":s,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=ke((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(_e))}),[]),r.createElement("button",xe({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ve.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},i)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===_e?r.createElement(ye,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Te=n(1514),je=n(5358),Ne=n(2327),Ae=n(246);const Le={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Ie=null;function Pe(e){let{hit:t,children:n}=e;return(0,u.jsx)(Q.Z,{to:t.url,children:n})}function Re(e){let{state:t,onClose:n}=e;const r=(0,je.M)();return(0,u.jsx)(Q.Z,{to:r(t.query),onClick:n,children:(0,u.jsx)(l.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Oe(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:s}=(0,le.Z)(),l=(0,Ne.l)(),c=function(){const{locale:e,tags:t}=(0,Ae._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],p=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,d):d,f={...o.searchParameters,facetFilters:p},m=(0,i.k6)(),g=(0,r.useRef)(null),h=(0,r.useRef)(null),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)(void 0),x=(0,r.useCallback)((()=>Ie?Promise.resolve():Promise.all([n.e(1426).then(n.bind(n,1426)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(2153)]).then(n.bind(n,2153))]).then((e=>{let[{DocSearchModal:t}]=e;Ie=t}))),[]),k=(0,r.useCallback)((()=>{x().then((()=>{g.current=document.createElement("div"),document.body.insertBefore(g.current,document.body.firstChild),y(!0)}))}),[x,y]),S=(0,r.useCallback)((()=>{y(!1),g.current?.remove()}),[y]),E=(0,r.useCallback)((e=>{x().then((()=>{y(!0),w(e.key)}))}),[x,y,w]),_=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(a,t)?window.location.href=t:m.push(t)}}).current,C=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:l(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,u.jsx)(Re,{...e,onClose:S})),[S]),j=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",s.docusaurusVersion),e)),[s.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,s=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),s&&s.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,s])}({isOpen:b,onOpen:k,onClose:S,onInput:E,searchButtonRef:h}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te.Z,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(Ce,{onTouchStart:x,onFocus:x,onMouseOver:x,onClick:k,ref:h,translations:Le.button}),b&&Ie&&g.current&&(0,be.createPortal)((0,u.jsx)(Ie,{onClose:S,initialScrollY:window.scrollY,initialQuery:v,navigator:_,transformItems:C,hitComponent:Pe,transformSearchClient:j,...o.searchPagePath&&{resultsFooterComponent:T},...o,searchParameters:f,placeholder:Le.placeholder,translations:Le.modal}),g.current)]})}function Me(){const{siteConfig:e}=(0,le.Z)();return(0,u.jsx)(Oe,{...e.themeConfig.algolia})}const De={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Fe(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.Z)(n,De.navbarSearchContainer),children:t})}var ze=n(9871),Be=n(8259);var Ue=n(6409);const qe=e=>e.docs.find((t=>t.id===e.mainDocId));const $e={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:s,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,me.l)(),{search:f,hash:m}=(0,i.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===s?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[s].label;return(0,u.jsx)(fe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Fe,{className:n,children:(0,u.jsx)(Me,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const s=o?"li":"div";return(0,u.jsx)(s,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ze.Iw)(r),s=(0,Be.vY)(t,r),i=o?.path===s?.path;return null===s||s.unlisted&&!i?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>i||!!o?.sidebar&&o.sidebar===s.sidebar,label:n??s.id,to:s.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,ze.Iw)(r),s=(0,Be.oz)(t,r).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??s.label,to:s.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,Be.lO)(r)[0],s=t??o.label,i=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:s,to:i})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...s}=e;const{search:c,hash:d}=(0,i.TH)(),p=(0,ze.Iw)(n),f=(0,ze.gB)(n),{savePreferredVersionName:m}=(0,Ue.J)(n),g=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??qe(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],h=(0,Be.lO)(n)[0],b=t&&g.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&g.length>1?void 0:qe(h).path;return g.length<=1?(0,u.jsx)(oe,{...s,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...s,mobile:t,label:b,to:y,items:g,isActive:r?()=>!1:void 0})}};function Ze(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=$e[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function He(){const e=(0,N.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ze,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ve(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function We(){const e=0===(0,w.L)().navbar.items.length,t=M();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ve,{onClick:()=>t.hide()}),t.content]})}function Ge(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(D,{header:(0,u.jsx)(K,{}),primaryMenu:(0,u.jsx)(He,{}),secondaryMenu:(0,u.jsx)(We,{})}):null}const Ye={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ke(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Qe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),s=(0,N.e)(),{navbarRef:i,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),s=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,A.RF)(((t,r)=>{let{scrollY:s}=t;if(!e)return;if(s<o.current)return void n(!0);if(a.current)return void(a.current=!1);const i=r?.scrollY,l=document.documentElement.scrollHeight-o.current,c=window.innerHeight;i&&s>=i?n(!1):s+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:s,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:i,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ye.navbarHideable,!d&&Ye.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":s.shown}),children:[t,(0,u.jsx)(Ke,{onClick:s.toggle}),(0,u.jsx)(Ge,{})]})}var Xe=n(2303);const Je="right";function et(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function tt(){const{toggle:e,shown:t}=(0,N.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(et,{})})}const nt={colorModeToggle:"colorModeToggle_DEke"};function rt(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Xe.QW,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ze,{...e})},t)))})}function at(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ot(){const e=(0,N.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(at,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(tt,{}),(0,u.jsx)(G,{}),(0,u.jsx)(rt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(rt,{items:r}),(0,u.jsx)(V,{className:nt.colorModeToggle}),!a&&(0,u.jsx)(Fe,{children:(0,u.jsx)(Me,{})})]})})}function st(){return(0,u.jsx)(Qe,{children:(0,u.jsx)(ot,{})})}function it(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...s}=t,i=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Q.Z,{className:"footer__link-item",...r?{href:o?l:r}:{to:i},...s,children:[a,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function lt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(it,{item:t})},t.href??t.to)}function ct(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(lt,{item:e},t)))})]})}function ut(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(ct,{column:e},t)))})}function dt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function pt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(it,{item:t})}function ft(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(pt,{item:e}),t.length!==n+1&&(0,u.jsx)(dt,{})]},n)))})})}function mt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ut,{columns:t}):(0,u.jsx)(ft,{links:t})}var gt=n(9839);const ht={footerLogoLink:"footerLogoLink_BH7S"};function bt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(gt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function yt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Q.Z,{href:t.href,className:ht.footerLogoLink,target:t.target,children:(0,u.jsx)(bt,{logo:t})}):(0,u.jsx)(bt,{logo:t})}function vt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function wt(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function xt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(wt,{style:a,links:n&&n.length>0&&(0,u.jsx)(mt,{links:n}),logo:r&&(0,u.jsx)(yt,{logo:r}),copyright:t&&(0,u.jsx)(vt,{copyright:t})})}const kt=r.memo(xt),St=(0,L.Qc)([F.S,x.pl,A.OC,Ue.L5,s.VC,function(e){let{children:t}=e;return(0,u.jsx)(I.n2,{children:(0,u.jsx)(N.M,{children:(0,u.jsx)(R,{children:t})})})}]);function Et(e){let{children:t}=e;return(0,u.jsx)(St,{children:t})}var _t=n(3899);function Ct(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(_t.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Xe.Cw,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Xe.aG,{error:t})})]})})})}const Tt={mainWrapper:"mainWrapper_z2l0"};function jt(e){const{children:t,noFooter:n,wrapperClassName:r,title:i,description:l}=e;return(0,b.t)(),(0,u.jsxs)(Et,{children:[(0,u.jsx)(s.d,{title:i,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(j,{}),(0,u.jsx)(st,{}),(0,u.jsx)("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,Tt.mainWrapper,r),children:(0,u.jsx)(o.Z,{fallback:e=>(0,u.jsx)(Ct,{...e}),children:t})}),!n&&(0,u.jsx)(kt,{})]})}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(4791),a=n(9524),o=n(9962),s=n(107),i=n(9839),l=n(5893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},s=(0,l.jsx)(i.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:s}):s}function u(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:i}}=(0,s.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,a.Z)(i?.href||"/"),m=n?"":t,g=i?.alt??m;return(0,l.jsxs)(r.Z,{to:f,...p,...i?.target&&{target:i.target},children:[i&&(0,l.jsx)(c,{logo:i,alt:g,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(1514),a=n(5893);function o(e){let{locale:t,version:n,tag:o}=e;const s=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),s&&(0,a.jsx)("meta",{name:"docsearch:language",content:s}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},9839:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7294),a=n(512),o=n(1048),s=n(9200);const i={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(5893);function c(e){let{className:t,children:n}=e;const c=(0,o.Z)(),{colorMode:u}=(0,s.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,i.themedComponent,i[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(7294),a=n(6136),o=n(1270),s=n(8986),i=n(5893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,s.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function i(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function m(e){if(!a.Z.canUseDOM)return e?u:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:s,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),(0,i.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),s?.(n))},className:l,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,s]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.Z)((()=>{t||s(!0)}),[t]),(0,o.Z)((()=>{a&&c(t)}),[a,t]),a?(0,i.jsx)(g,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,i.jsx)(r,{...n})}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>g,pl:()=>m});var r=n(7294),a=n(1048),o=n(2560),s=n(3768),i=n(107),l=n(5893);const c=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,i.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const s=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:s})),[e,n,s])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>h});var r=n(7294),a=n(6136),o=n(3768),s=n(2560),i=n(107),l=n(5893);const c=r.createContext(void 0),u="theme",d=(0,s.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,i.L)(),[a,o]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&s(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:s,get isDarkTheme(){return a===p.dark},setLightTheme(){s(p.light)},setDarkTheme(){s(p.dark)}})),[a,s])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b,Oh:()=>w});var r=n(7294),a=n(9871),o=n(6875),s=n(107),i=n(8259),l=n(3768),c=n(2560),u=n(5893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,s.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,i]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{i(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),i((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,u.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return i.cE?(0,u.jsx)(h,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,s]=y(),{preferredVersionName:i}=n[e];return{preferredVersion:t.versions.find((e=>e.name===i))??null,savePreferredVersionName:(0,r.useCallback)((t=>{s.savePreferredVersion(e,t)}),[s,e])}}function w(){const e=(0,a._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(7294),a=n(3768),o=n(5893);const s=Symbol("EmptyContext"),i=r.createContext(s);function l(e){let{children:t,name:n,items:a}=e;const s=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(i.Provider,{value:s,children:t})}function c(){const e=(0,r.useContext)(i);if(e===s)throw new a.i6("DocsSidebarProvider");return e}},8801:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(3768),o=n(5893);const s=r.createContext(null);function i(e){let{children:t,version:n}=e;return(0,o.jsx)(s.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(s);if(null===e)throw new a.i6("DocsVersionProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),a=n(3086),o=n(3488),s=n(5238),i=n(107),l=n(3768),c=n(5893);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,i.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,s.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>i});var r=n(7294),a=n(3768),o=n(5893);const s=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(s.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(s);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(s);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,i]=o,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{i({component:t,props:l})}),[i,t,l]),(0,r.useEffect)((()=>()=>i({component:null,props:null})),[i]),null}},8181:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},5358:(e,t,n)=>{"use strict";n.d(t,{K:()=>i,M:()=>l});var r=n(7294),a=n(9962),o=n(5238);const s="q";function i(){return(0,o.Nc)(s)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${s}=${encodeURIComponent(t)}`),[e,n])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>i});var r=n(7294),a=n(6136);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},s=996;function i(e){let{desktopBreakpoint:t=s}=void 0===e?{}:e;const[n,i]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){i(function(e){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{LM:()=>m,MN:()=>T,SN:()=>C,_F:()=>y,cE:()=>p,f:()=>w,jA:()=>g,lO:()=>S,oz:()=>E,s1:()=>k,vY:()=>_,xz:()=>f});var r=n(7294),a=n(6550),o=n(8790),s=n(9871),i=n(6409),l=n(8801),c=n(4432),u=n(3609),d=n(9003);const p=!!s._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=x({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function x(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function k(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,s.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?x({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,s.Iw)(e),{preferredVersion:n}=(0,i.J)(e),a=(0,s.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,l.E)(),s=t.routes,i=s.find((e=>(0,a.LX)(n.pathname,e)));if(!i)return null;const c=i.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.H)(s),sidebarName:c,sidebarItems:u}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},2303:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Ac:()=>c,Cw:()=>l,QW:()=>d});var r=n(7294),a=n(7325),o=n(3905);const s={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var i=n(5893);function l(e){return(0,i.jsx)("button",{type:"button",...e,children:(0,i.jsx)(a.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,i.jsxs)("div",{className:s.errorBoundaryFallback,children:[(0,i.jsx)("p",{children:t.message}),(0,i.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,o.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,i.jsx)("p",{className:s.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},2733:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(9962);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},5238:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>l,Rb:()=>s,_X:()=>i});var r=n(7294),a=n(6550),o=n(3768);function s(e){!function(e){const t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function i(e){return function(e){const t=(0,a.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function l(e){const t=i(e)??"",n=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(r?.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},9488:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>m});var r=n(7294),a=n(512),o=n(1514),s=n(9656);function i(){const e=r.useContext(s._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(9524),c=n(2733),u=n(5893);function d(e){let{title:t,description:n,keywords:r,image:a,children:s}=e;const i=(0,c.p)(t),{withBaseUrl:d}=(0,l.C)(),p=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.Z,{children:[t&&(0,u.jsx)("title",{children:i}),t&&(0,u.jsx)("meta",{property:"og:title",content:i}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),s]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const s=r.useContext(p),i=(0,a.Z)(s,t);return(0,u.jsxs)(p.Provider,{value:i,children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("html",{className:i})}),n]})}function m(e){let{children:t}=e;const n=i(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,a.Z)(r,o),children:t})}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>s});var r=n(7294),a=n(1270),o=n(5893);function s(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},1500:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>s,Ns:()=>i});var r=n(7294),a=n(997),o=n(9962);function s(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function i(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>g,OC:()=>u,RF:()=>f,o5:()=>m});var r=n(7294),a=n(6136),o=n(1048),s=n(1270),i=n(3768),l=n(5893);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const p=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(p()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function m(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,s.Z)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function g(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>s,_q:()=>l,os:()=>i});var r=n(9871),a=n(9962),o=n(6409);const s="default";function i(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,o.Oh)();const c=[s,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=l[e],o=t[e].versions.find((e=>e.isLast));return i(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>u,WA:()=>c});var r=n(7294);const a="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=s(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function u(e,t){const n=(0,r.useRef)((()=>null===e?l:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(9962),a=n(6550),o=n(3905);function s(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:s,currentLocale:i}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=i===s?e:e.replace(`/${i}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===s?`${u}`:`${u}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>s});var r=n(7294),a=n(6550),o=n(3768);function s(e){const t=(0,a.TH)(),n=(0,o.D9)(t),s=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&s({location:t,previousLocation:n})}),[s,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){return(0,r.Z)().siteConfig.themeConfig}},7263:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},2327:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(7294),a=n(1500),o=n(9524),s=n(7263);function i(){const{withBaseUrl:e}=(0,o.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,s.L)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.F)(t,o.href))return r;const s=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(s,n))}),[e,t,n])}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(s=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(s):function(e){return e.endsWith("/")?e.slice(0,-1):e}(s));var s;return e.replace(a,o)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>j,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const s=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],s=t&&t.split("/")||[],i=e&&a(e),l=t&&a(t),c=i||l;if(e&&a(e)?s=r:r.length&&(s.pop(),s=s.concat(r)),!s.length)return"/";if(s.length){var u=s[s.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=s.length;p>=0;p--){var f=s[p];"."===f?o(s,p):".."===f?(o(s,p),d++):d&&(o(s,p),d--)}if(!c)for(;d--;d)s.unshift("..");!c||""===s[0]||s[0]&&a(s[0])||s.unshift("");var m=s.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var i=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=s(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,i.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),s=e,c=s.forceRefresh,w=void 0!==c&&c,x=s.getUserConfirmation,k=void 0===x?h:x,S=s.keyLength,E=void 0===S?6:S,_=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return _&&(o=u(o,_)),f(o,r,n)}function T(){return Math.random().toString(36).substr(2,E)}var j=m();function N(e){(0,r.Z)(U,e),U.length=n.length,j.notifyListeners(U.location,U.action)}function A(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||P(C(e.state))}function L(){P(C(v()))}var I=!1;function P(e){if(I)I=!1,N();else{j.confirmTransitionTo(e,"POP",k,(function(t){t?N({action:"POP",location:e}):function(e){var t=U.location,n=O.indexOf(t.key);-1===n&&(n=0);var r=O.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(I=!0,D(a))}(e)}))}}var R=C(v()),O=[R.key];function M(e){return _+p(e)}function D(e){n.go(e)}var F=0;function z(e){1===(F+=e)&&1===e?(window.addEventListener(b,A),o&&window.addEventListener(y,L)):0===F&&(window.removeEventListener(b,A),o&&window.removeEventListener(y,L))}var B=!1;var U={length:n.length,action:"POP",location:R,createHref:M,push:function(e,t){var r="PUSH",o=f(e,t,T(),U.location);j.confirmTransitionTo(o,r,k,(function(e){if(e){var t=M(o),s=o.key,i=o.state;if(a)if(n.pushState({key:s,state:i},null,t),w)window.location.href=t;else{var l=O.indexOf(U.location.key),c=O.slice(0,l+1);c.push(o.key),O=c,N({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,T(),U.location);j.confirmTransitionTo(o,r,k,(function(e){if(e){var t=M(o),s=o.key,i=o.state;if(a)if(n.replaceState({key:s,state:i},null,t),w)window.location.replace(t);else{var l=O.indexOf(U.location.key);-1!==l&&(O[l]=o.key),N({action:r,location:o})}else window.location.replace(t)}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=j.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=j.appendListener(e);return z(1),function(){z(-1),t()}}};return U}var x="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,i.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,s=n.hashType,c=void 0===s?"slash":s,b=e.basename?d(l(e.basename)):"",y=k[c],v=y.encodePath,w=y.decodePath;function C(){var e=w(E());return b&&(e=u(e,b)),f(e)}var T=m();function j(e){(0,r.Z)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var N=!1,A=null;function L(){var e,t,n=E(),r=v(n);if(n!==r)_(r);else{var a=C(),s=B.location;if(!N&&(t=a,(e=s).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(A===p(a))return;A=null,function(e){if(N)N=!1,j();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?j({action:t,location:e}):function(e){var t=B.location,n=O.lastIndexOf(p(t));-1===n&&(n=0);var r=O.lastIndexOf(p(e));-1===r&&(r=0);var a=n-r;a&&(N=!0,M(a))}(e)}))}}(a)}}var I=E(),P=v(I);I!==P&&_(P);var R=C(),O=[p(R)];function M(e){t.go(e)}var D=0;function F(e){1===(D+=e)&&1===e?window.addEventListener(x,L):0===D&&window.removeEventListener(x,L)}var z=!1;var B={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=v(b+t);if(E()!==a){A=t,function(e){window.location.hash=e}(a);var o=O.lastIndexOf(p(B.location)),s=O.slice(0,o+1);s.push(t),O=s,j({action:n,location:r})}else j()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=v(b+t);E()!==a&&(A=t,_(a));var o=O.indexOf(p(B.location));-1!==o&&(O[o]=t),j({action:n,location:r})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return z||(F(1),z=!0),function(){return z&&(z=!1,F(-1)),t()}},listen:function(e){var t=T.appendListener(e);return F(1),function(){F(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function j(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,s=t.initialIndex,i=void 0===s?0:s,l=t.keyLength,c=void 0===l?6:l,u=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,c)}var h=T(i,0,o.length-1),b=o.map((function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())})),y=p;function v(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:y,push:function(e,t){var r="PUSH",a=f(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},s={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function l(e){return r.isMemo(e)?s:i[e.$$typeof]||a}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=s;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var s=u(n);d&&(s=s.concat(d(n)));for(var i=l(t),g=l(n),h=0;h<s.length;++h){var b=s[h];if(!(o[b]||r&&r[b]||g&&g[b]||i&&i[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,s,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,s,i],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},984:(e,t,n)=>{"use strict";n.r(t)},6930:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function s(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,i((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,s(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,s=t.querySelector(r.barSelector),i=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(s,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var i=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return i(o(e,t),t)},e.exports.tokensToFunction=i,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,s=0,i="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(i+=e.slice(s,f),s=f+d.length,p)i+=p[1];else{var m=e[s],g=n[2],h=n[3],b=n[4],y=n[5],v=n[6],w=n[7];i&&(r.push(i),i="");var x=null!=g&&null!=m&&m!==g,k="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=b||y;r.push({name:h||o++,prefix:g||"",delimiter:E,optional:S,repeat:k,partial:x,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return s<e.length&&(i+=e.substr(s)),i&&r.push(i),r}function s(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function i(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",i=t||{},l=(a||{}).pretty?s:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');o+=u.prefix+d}}else o+=u}return o}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,s="",i=0;i<e.length;i++){var c=e[i];if("string"==typeof c)s+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),s+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),g=s.slice(-m.length)===m;return a||(s=(g?s.slice(0,-m.length):s)+"(?:"+m+"(?=$))?"),s+=o?"$":a&&g?"":"(?="+m+"|$)",u(new RegExp("^"+s,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(f(e[a],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(o(e,n),t,n)}(e,t,n)}},4277:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var s=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,i=s.length;-1!==n.code.indexOf(a=t(r,i));)++i;return s[i]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function s(i){for(var l=0;l<i.length&&!(a>=o.length);l++){var c=i[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];g&&y.push.apply(y,s([g])),y.push(h),b&&y.push.apply(y,s([b])),"string"==typeof c?i.splice.apply(i,[l,1].concat(y)):c.content=y}}else c.content&&s(c.content)}return i}(n.tokens)}}}})}(Prism)},5266:()=>{Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}},2391:(e,t,n)=>{var r={"./prism-json":4277,"./prism-sql":5266};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=2391},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,s){if(s!==r){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var s=new Set,i={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(i[e]=t,e=0;e<t.length;e++)s.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function g(e,t,n,r,a,o,s){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var h={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){h[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];h[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){h[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){h[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){h[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){h[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){h[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){h[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){h[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var a=h.hasOwnProperty(t)?h[t]:null;(null!==a?0!==a.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);h[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);h[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);h[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){h[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),h.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){h[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),k=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),j=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),A=Symbol.for("react.suspense_list"),L=Symbol.for("react.memo"),I=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var P=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var R=Symbol.iterator;function O(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=R&&e[R]||e["@@iterator"])?e:null}var M,D=Object.assign;function F(e){if(void 0===M)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);M=t&&t[1]||""}return"\n"+M+e}var z=!1;function B(e,t){if(!e||z)return"";z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var a=c.stack.split("\n"),o=r.stack.split("\n"),s=a.length-1,i=o.length-1;1<=s&&0<=i&&a[s]!==o[i];)i--;for(;1<=s&&0<=i;s--,i--)if(a[s]!==o[i]){if(1!==s||1!==i)do{if(s--,0>--i||a[s]!==o[i]){var l="\n"+a[s].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=s&&0<=i);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?F(e):""}function U(e){switch(e.tag){case 5:return F(e.type);case 16:return F("Lazy");case 13:return F("Suspense");case 19:return F("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function q(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case k:return"Portal";case _:return"Profiler";case E:return"StrictMode";case N:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case j:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case L:return null!==(t=e.displayName||null)?t:q(e.type)||"Memo";case I:t=e._payload,e=e._init;try{return q(e(t))}catch(n){}}return null}function $(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return q(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function V(e){e._valueTracker||(e._valueTracker=function(e){var t=H(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=H(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function G(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Y(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function K(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Q(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){Q(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&G(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(o(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ae(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(o(92));if(te(n)){if(1<n.length)throw Error(o(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function oe(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function se(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function ie(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?ie(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function ge(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function he(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=ge(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(o(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(o(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(o(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(o(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Se=null,Ee=null;function _e(e){if(e=va(e)){if("function"!=typeof ke)throw Error(o(280));var t=e.stateNode;t&&(t=xa(t),ke(e.stateNode,e.type,t))}}function Ce(e){Se?Ee?Ee.push(e):Ee=[e]:Se=e}function Te(){if(Se){var e=Se,t=Ee;if(Ee=Se=null,_e(e),t)for(e=0;e<t.length;e++)_e(t[e])}}function je(e,t){return e(t)}function Ne(){}var Ae=!1;function Le(e,t,n){if(Ae)return e(t,n);Ae=!0;try{return je(e,t,n)}finally{Ae=!1,(null!==Se||null!==Ee)&&(Ne(),Te())}}function Ie(e,t){var n=e.stateNode;if(null===n)return null;var r=xa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(o(231,t,typeof n));return n}var Pe=!1;if(u)try{var Re={};Object.defineProperty(Re,"passive",{get:function(){Pe=!0}}),window.addEventListener("test",Re,Re),window.removeEventListener("test",Re,Re)}catch(ue){Pe=!1}function Oe(e,t,n,r,a,o,s,i,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Me=!1,De=null,Fe=!1,ze=null,Be={onError:function(e){Me=!0,De=e}};function Ue(e,t,n,r,a,o,s,i,l){Me=!1,De=null,Oe.apply(Be,arguments)}function qe(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function $e(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ze(e){if(qe(e)!==e)throw Error(o(188))}function He(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=qe(e)))throw Error(o(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var s=a.alternate;if(null===s){if(null!==(r=a.return)){n=r;continue}break}if(a.child===s.child){for(s=a.child;s;){if(s===n)return Ze(a),e;if(s===r)return Ze(a),t;s=s.sibling}throw Error(o(188))}if(n.return!==r.return)n=a,r=s;else{for(var i=!1,l=a.child;l;){if(l===n){i=!0,n=a,r=s;break}if(l===r){i=!0,r=a,n=s;break}l=l.sibling}if(!i){for(l=s.child;l;){if(l===n){i=!0,n=s,r=a;break}if(l===r){i=!0,r=s,n=a;break}l=l.sibling}if(!i)throw Error(o(189))}}if(n.alternate!==r)throw Error(o(190))}if(3!==n.tag)throw Error(o(188));return n.stateNode.current===n?e:t}(e))?Ve(e):null}function Ve(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ve(e);if(null!==t)return t;e=e.sibling}return null}var We=a.unstable_scheduleCallback,Ge=a.unstable_cancelCallback,Ye=a.unstable_shouldYield,Ke=a.unstable_requestPaint,Qe=a.unstable_now,Xe=a.unstable_getCurrentPriorityLevel,Je=a.unstable_ImmediatePriority,et=a.unstable_UserBlockingPriority,tt=a.unstable_NormalPriority,nt=a.unstable_LowPriority,rt=a.unstable_IdlePriority,at=null,ot=null;var st=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(it(e)/lt|0)|0},it=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,s=268435455&n;if(0!==s){var i=s&~a;0!==i?r=dt(i):0!==(o&=s)&&(r=dt(o))}else 0!==(s=n&~a)?r=dt(s):0!==o&&(r=dt(o));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&a)&&((a=r&-r)>=(o=t&-t)||16===a&&0!=(4194240&o)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-st(t)),r|=e[n],t&=~a;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function gt(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function ht(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-st(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-st(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,kt,St,Et,_t,Ct=!1,Tt=[],jt=null,Nt=null,At=null,Lt=new Map,It=new Map,Pt=[],Rt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ot(e,t){switch(e){case"focusin":case"focusout":jt=null;break;case"dragenter":case"dragleave":Nt=null;break;case"mouseover":case"mouseout":At=null;break;case"pointerover":case"pointerout":Lt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":It.delete(t.pointerId)}}function Mt(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},null!==t&&(null!==(t=va(t))&&kt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function Dt(e){var t=ya(e.target);if(null!==t){var n=qe(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=$e(n)))return e.blockedOn=t,void _t(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Ft(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Yt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=va(n))&&kt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function zt(e,t,n){Ft(e)&&n.delete(t)}function Bt(){Ct=!1,null!==jt&&Ft(jt)&&(jt=null),null!==Nt&&Ft(Nt)&&(Nt=null),null!==At&&Ft(At)&&(At=null),Lt.forEach(zt),It.forEach(zt)}function Ut(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,Bt)))}function qt(e){function t(t){return Ut(t,e)}if(0<Tt.length){Ut(Tt[0],e);for(var n=1;n<Tt.length;n++){var r=Tt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==jt&&Ut(jt,e),null!==Nt&&Ut(Nt,e),null!==At&&Ut(At,e),Lt.forEach(t),It.forEach(t),n=0;n<Pt.length;n++)(r=Pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Pt.length&&null===(n=Pt[0]).blockedOn;)Dt(n),null===n.blockedOn&&Pt.shift()}var $t=w.ReactCurrentBatchConfig,Zt=!0;function Ht(e,t,n,r){var a=vt,o=$t.transition;$t.transition=null;try{vt=1,Wt(e,t,n,r)}finally{vt=a,$t.transition=o}}function Vt(e,t,n,r){var a=vt,o=$t.transition;$t.transition=null;try{vt=4,Wt(e,t,n,r)}finally{vt=a,$t.transition=o}}function Wt(e,t,n,r){if(Zt){var a=Yt(e,t,n,r);if(null===a)Zr(e,t,r,Gt,n),Ot(e,r);else if(function(e,t,n,r,a){switch(t){case"focusin":return jt=Mt(jt,e,t,n,r,a),!0;case"dragenter":return Nt=Mt(Nt,e,t,n,r,a),!0;case"mouseover":return At=Mt(At,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Lt.set(o,Mt(Lt.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,It.set(o,Mt(It.get(o)||null,e,t,n,r,a)),!0}return!1}(a,e,t,n,r))r.stopPropagation();else if(Ot(e,r),4&t&&-1<Rt.indexOf(e)){for(;null!==a;){var o=va(a);if(null!==o&&xt(o),null===(o=Yt(e,t,n,r))&&Zr(e,t,r,Gt,n),o===a)break;a=o}null!==a&&r.stopPropagation()}else Zr(e,t,r,null,n)}}var Gt=null;function Yt(e,t,n,r){if(Gt=null,null!==(e=ya(e=xe(r))))if(null===(t=qe(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=$e(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gt=e,null}function Kt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Qt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,a="value"in Qt?Qt.value:Qt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var s=r-e;for(t=1;t<=s&&n[r-t]===a[o-t];t++);return Jt=a.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function an(e){function t(t,n,r,a,o){for(var s in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(s)&&(t=e[s],this[s]=t?t(a):a[s]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var on,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=an(cn),dn=D({},cn,{view:0,detail:0}),pn=an(dn),fn=D({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:_n,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(on=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=on=0,ln=e),on)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=an(fn),gn=an(D({},fn,{dataTransfer:0})),hn=an(D({},dn,{relatedTarget:0})),bn=an(D({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=D({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=an(yn),wn=an(D({},cn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function _n(){return En}var Cn=D({},dn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:_n,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=an(Cn),jn=an(D({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=an(D({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:_n})),An=an(D({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=D({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),In=an(Ln),Pn=[9,13,27,32],Rn=u&&"CompositionEvent"in window,On=null;u&&"documentMode"in document&&(On=document.documentMode);var Mn=u&&"TextEvent"in window&&!On,Dn=u&&(!Rn||On&&8<On&&11>=On),Fn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Pn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Un(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var qn=!1;var $n={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!$n[e.type]:"textarea"===t}function Hn(e,t,n,r){Ce(r),0<(t=Vr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Wn=null;function Gn(e){Fr(e,0)}function Yn(e){if(W(wa(e)))return e}function Kn(e,t){if("change"===e)return t}var Qn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Wn=Vn=null)}function nr(e){if("value"===e.propertyName&&Yn(Wn)){var t=[];Hn(t,Wn,e,xe(e)),Le(Gn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Wn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function ar(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Yn(Wn)}function or(e,t){if("click"===e)return Yn(t)}function sr(e,t){if("input"===e||"change"===e)return Yn(t)}var ir="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(ir(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!d.call(t,a)||!ir(e[a],t[a]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=G();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=G((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=void 0===r.end?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=ur(n,o);var s=ur(n,r);a&&s&&(1!==e.rangeCount||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&((t=t.createRange()).setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var gr=u&&"documentMode"in document&&11>=document.documentMode,hr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==hr||hr!==G(r)||("selectionStart"in(r=hr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Vr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=hr)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kr={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},Sr={},Er={};function _r(e){if(Sr[e])return Sr[e];if(!kr[e])return e;var t,n=kr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Er)return Sr[e]=n[t];return e}u&&(Er=document.createElement("div").style,"AnimationEvent"in window||(delete kr.animationend.animation,delete kr.animationiteration.animation,delete kr.animationstart.animation),"TransitionEvent"in window||delete kr.transitionend.transition);var Cr=_r("animationend"),Tr=_r("animationiteration"),jr=_r("animationstart"),Nr=_r("transitionend"),Ar=new Map,Lr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ir(e,t){Ar.set(e,t),l(t,[e])}for(var Pr=0;Pr<Lr.length;Pr++){var Rr=Lr[Pr];Ir(Rr.toLowerCase(),"on"+(Rr[0].toUpperCase()+Rr.slice(1)))}Ir(Cr,"onAnimationEnd"),Ir(Tr,"onAnimationIteration"),Ir(jr,"onAnimationStart"),Ir("dblclick","onDoubleClick"),Ir("focusin","onFocus"),Ir("focusout","onBlur"),Ir(Nr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Or="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Mr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Or));function Dr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,s,i,l,c){if(Ue.apply(this,arguments),Me){if(!Me)throw Error(o(198));var u=De;Me=!1,De=null,Fe||(Fe=!0,ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Fr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var s=r.length-1;0<=s;s--){var i=r[s],l=i.instance,c=i.currentTarget;if(i=i.listener,l!==o&&a.isPropagationStopped())break e;Dr(a,i,c),o=l}else for(s=0;s<r.length;s++){if(l=(i=r[s]).instance,c=i.currentTarget,i=i.listener,l!==o&&a.isPropagationStopped())break e;Dr(a,i,c),o=l}}}if(Fe)throw e=ze,Fe=!1,ze=null,e}function zr(e,t){var n=t[ga];void 0===n&&(n=t[ga]=new Set);var r=e+"__bubble";n.has(r)||($r(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),$r(n,e,r,t)}var Ur="_reactListening"+Math.random().toString(36).slice(2);function qr(e){if(!e[Ur]){e[Ur]=!0,s.forEach((function(t){"selectionchange"!==t&&(Mr.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Ur]||(t[Ur]=!0,Br("selectionchange",!1,t))}}function $r(e,t,n,r){switch(Kt(t)){case 1:var a=Ht;break;case 4:a=Vt;break;default:a=Wt}n=a.bind(null,t,n,e),a=void 0,!Pe||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Zr(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var s=r.tag;if(3===s||4===s){var i=r.stateNode.containerInfo;if(i===a||8===i.nodeType&&i.parentNode===a)break;if(4===s)for(s=r.return;null!==s;){var l=s.tag;if((3===l||4===l)&&((l=s.stateNode.containerInfo)===a||8===l.nodeType&&l.parentNode===a))return;s=s.return}for(;null!==i;){if(null===(s=ya(i)))return;if(5===(l=s.tag)||6===l){r=o=s;continue e}i=i.parentNode}}r=r.return}Le((function(){var r=o,a=xe(n),s=[];e:{var i=Ar.get(e);if(void 0!==i){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":c="focus",l=hn;break;case"focusout":c="blur",l=hn;break;case"beforeblur":case"afterblur":l=hn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=gn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Nn;break;case Cr:case Tr:case jr:l=bn;break;case Nr:l=An;break;case"scroll":l=pn;break;case"wheel":l=In;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=jn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==i?i+"Capture":null:i;u=[];for(var f,m=r;null!==m;){var g=(f=m).stateNode;if(5===f.tag&&null!==g&&(f=g,null!==p&&(null!=(g=Ie(m,p))&&u.push(Hr(m,g,f)))),d)break;m=m.return}0<u.length&&(i=new l(i,c,null,n,a),s.push({event:i,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(i="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!ya(c)&&!c[ma])&&(l||i)&&(i=a.window===a?a:(i=a.ownerDocument)?i.defaultView||i.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?ya(c):null)&&(c!==(d=qe(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=mn,g="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=jn,g="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?i:wa(l),f=null==c?i:wa(c),(i=new u(g,m+"leave",l,n,a)).target=d,i.relatedTarget=f,g=null,ya(a)===r&&((u=new u(p,m+"enter",c,n,a)).target=f,u.relatedTarget=d,g=u),d=g,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Wr(f))m++;for(f=0,g=p;g;g=Wr(g))f++;for(;0<m-f;)u=Wr(u),m--;for(;0<f-m;)p=Wr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Wr(u),p=Wr(p)}u=null}else u=null;null!==l&&Gr(s,i,l,u,!1),null!==c&&null!==d&&Gr(s,d,c,u,!0)}if("select"===(l=(i=r?wa(r):window).nodeName&&i.nodeName.toLowerCase())||"input"===l&&"file"===i.type)var h=Kn;else if(Zn(i))if(Qn)h=sr;else{h=ar;var b=rr}else(l=i.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===i.type||"radio"===i.type)&&(h=or);switch(h&&(h=h(e,r))?Hn(s,h,n,a):(b&&b(e,i,r),"focusout"===e&&(b=i._wrapperState)&&b.controlled&&"number"===i.type&&ee(i,"number",i.value)),b=r?wa(r):window,e){case"focusin":(Zn(b)||"true"===b.contentEditable)&&(hr=b,br=r,yr=null);break;case"focusout":yr=br=hr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(s,n,a);break;case"selectionchange":if(gr)break;case"keydown":case"keyup":wr(s,n,a)}var y;if(Rn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else qn?Bn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Dn&&"ko"!==n.locale&&(qn||"onCompositionStart"!==v?"onCompositionEnd"===v&&qn&&(y=en()):(Xt="value"in(Qt=a)?Qt.value:Qt.textContent,qn=!0)),0<(b=Vr(r,v)).length&&(v=new wn(v,e,null,n,a),s.push({event:v,listeners:b}),y?v.data=y:null!==(y=Un(n))&&(v.data=y))),(y=Mn?function(e,t){switch(e){case"compositionend":return Un(t);case"keypress":return 32!==t.which?null:(zn=!0,Fn);case"textInput":return(e=t.data)===Fn&&zn?null:e;default:return null}}(e,n):function(e,t){if(qn)return"compositionend"===e||!Rn&&Bn(e,t)?(e=en(),Jt=Xt=Qt=null,qn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Dn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Vr(r,"onBeforeInput")).length&&(a=new wn("onBeforeInput","beforeinput",null,n,a),s.push({event:a,listeners:r}),a.data=y))}Fr(s,t)}))}function Hr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Vr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=Ie(e,n))&&r.unshift(Hr(e,o,a)),null!=(o=Ie(e,t))&&r.push(Hr(e,o,a))),e=e.return}return r}function Wr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Gr(e,t,n,r,a){for(var o=t._reactName,s=[];null!==n&&n!==r;){var i=n,l=i.alternate,c=i.stateNode;if(null!==l&&l===r)break;5===i.tag&&null!==c&&(i=c,a?null!=(l=Ie(n,o))&&s.unshift(Hr(n,l,i)):a||null!=(l=Ie(n,o))&&s.push(Hr(n,l,i))),n=n.return}0!==s.length&&e.push({event:t,listeners:s})}var Yr=/\r\n?/g,Kr=/\u0000|\uFFFD/g;function Qr(e){return("string"==typeof e?e:""+e).replace(Yr,"\n").replace(Kr,"")}function Xr(e,t,n){if(t=Qr(t),Qr(e)!==t&&n)throw Error(o(425))}function Jr(){}var ea=null,ta=null;function na(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ra="function"==typeof setTimeout?setTimeout:void 0,aa="function"==typeof clearTimeout?clearTimeout:void 0,oa="function"==typeof Promise?Promise:void 0,sa="function"==typeof queueMicrotask?queueMicrotask:void 0!==oa?function(e){return oa.resolve(null).then(e).catch(ia)}:ra;function ia(e){setTimeout((function(){throw e}))}function la(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0===r)return e.removeChild(a),void qt(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=a}while(n);qt(t)}function ca(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function ua(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var da=Math.random().toString(36).slice(2),pa="__reactFiber$"+da,fa="__reactProps$"+da,ma="__reactContainer$"+da,ga="__reactEvents$"+da,ha="__reactListeners$"+da,ba="__reactHandles$"+da;function ya(e){var t=e[pa];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ma]||n[pa]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=ua(e);null!==e;){if(n=e[pa])return n;e=ua(e)}return t}n=(e=n).parentNode}return null}function va(e){return!(e=e[pa]||e[ma])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function wa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(o(33))}function xa(e){return e[fa]||null}var ka=[],Sa=-1;function Ea(e){return{current:e}}function _a(e){0>Sa||(e.current=ka[Sa],ka[Sa]=null,Sa--)}function Ca(e,t){Sa++,ka[Sa]=e.current,e.current=t}var Ta={},ja=Ea(Ta),Na=Ea(!1),Aa=Ta;function La(e,t){var n=e.type.contextTypes;if(!n)return Ta;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Ia(e){return null!=(e=e.childContextTypes)}function Pa(){_a(Na),_a(ja)}function Ra(e,t,n){if(ja.current!==Ta)throw Error(o(168));Ca(ja,t),Ca(Na,n)}function Oa(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in t))throw Error(o(108,$(e)||"Unknown",a));return D({},n,r)}function Ma(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ta,Aa=ja.current,Ca(ja,e),Ca(Na,Na.current),!0}function Da(e,t,n){var r=e.stateNode;if(!r)throw Error(o(169));n?(e=Oa(e,t,Aa),r.__reactInternalMemoizedMergedChildContext=e,_a(Na),_a(ja),Ca(ja,e)):_a(Na),Ca(Na,n)}var Fa=null,za=!1,Ba=!1;function Ua(e){null===Fa?Fa=[e]:Fa.push(e)}function qa(){if(!Ba&&null!==Fa){Ba=!0;var e=0,t=vt;try{var n=Fa;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Fa=null,za=!1}catch(a){throw null!==Fa&&(Fa=Fa.slice(e+1)),We(Je,qa),a}finally{vt=t,Ba=!1}}return null}var $a=[],Za=0,Ha=null,Va=0,Wa=[],Ga=0,Ya=null,Ka=1,Qa="";function Xa(e,t){$a[Za++]=Va,$a[Za++]=Ha,Ha=e,Va=t}function Ja(e,t,n){Wa[Ga++]=Ka,Wa[Ga++]=Qa,Wa[Ga++]=Ya,Ya=e;var r=Ka;e=Qa;var a=32-st(r)-1;r&=~(1<<a),n+=1;var o=32-st(t)+a;if(30<o){var s=a-a%5;o=(r&(1<<s)-1).toString(32),r>>=s,a-=s,Ka=1<<32-st(t)+a|n<<a|r,Qa=o+e}else Ka=1<<o|n<<a|r,Qa=e}function eo(e){null!==e.return&&(Xa(e,1),Ja(e,1,0))}function to(e){for(;e===Ha;)Ha=$a[--Za],$a[Za]=null,Va=$a[--Za],$a[Za]=null;for(;e===Ya;)Ya=Wa[--Ga],Wa[Ga]=null,Qa=Wa[--Ga],Wa[Ga]=null,Ka=Wa[--Ga],Wa[Ga]=null}var no=null,ro=null,ao=!1,oo=null;function so(e,t){var n=Ic(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function io(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,no=e,ro=ca(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,no=e,ro=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ya?{id:Ka,overflow:Qa}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Ic(18,null,null,0)).stateNode=t,n.return=e,e.child=n,no=e,ro=null,!0);default:return!1}}function lo(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function co(e){if(ao){var t=ro;if(t){var n=t;if(!io(e,t)){if(lo(e))throw Error(o(418));t=ca(n.nextSibling);var r=no;t&&io(e,t)?so(r,n):(e.flags=-4097&e.flags|2,ao=!1,no=e)}}else{if(lo(e))throw Error(o(418));e.flags=-4097&e.flags|2,ao=!1,no=e}}}function uo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;no=e}function po(e){if(e!==no)return!1;if(!ao)return uo(e),ao=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!na(e.type,e.memoizedProps)),t&&(t=ro)){if(lo(e))throw fo(),Error(o(418));for(;t;)so(e,t),t=ca(t.nextSibling)}if(uo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(o(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){ro=ca(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ro=null}}else ro=no?ca(e.stateNode.nextSibling):null;return!0}function fo(){for(var e=ro;e;)e=ca(e.nextSibling)}function mo(){ro=no=null,ao=!1}function go(e){null===oo?oo=[e]:oo.push(e)}var ho=w.ReactCurrentBatchConfig;function bo(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var yo=Ea(null),vo=null,wo=null,xo=null;function ko(){xo=wo=vo=null}function So(e){var t=yo.current;_a(yo),e._currentValue=t}function Eo(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function _o(e,t){vo=e,xo=wo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(wi=!0),e.firstContext=null)}function Co(e){var t=e._currentValue;if(xo!==e)if(e={context:e,memoizedValue:t,next:null},null===wo){if(null===vo)throw Error(o(308));wo=e,vo.dependencies={lanes:0,firstContext:e}}else wo=wo.next=e;return t}var To=null;function jo(e){null===To?To=[e]:To.push(e)}function No(e,t,n,r){var a=t.interleaved;return null===a?(n.next=n,jo(t)):(n.next=a.next,a.next=n),t.interleaved=n,Ao(e,r)}function Ao(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Lo=!1;function Io(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Po(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ro(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Oo(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Nl)){var a=r.pending;return null===a?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Ao(e,n)}return null===(a=r.interleaved)?(t.next=t,jo(r)):(t.next=a.next,a.next=t),r.interleaved=t,Ao(e,n)}function Mo(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Do(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=s:o=o.next=s,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Fo(e,t,n,r){var a=e.updateQueue;Lo=!1;var o=a.firstBaseUpdate,s=a.lastBaseUpdate,i=a.shared.pending;if(null!==i){a.shared.pending=null;var l=i,c=l.next;l.next=null,null===s?o=c:s.next=c,s=l;var u=e.alternate;null!==u&&((i=(u=u.updateQueue).lastBaseUpdate)!==s&&(null===i?u.firstBaseUpdate=c:i.next=c,u.lastBaseUpdate=l))}if(null!==o){var d=a.baseState;for(s=0,u=c=l=null,i=o;;){var p=i.lane,f=i.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(p=t,f=n,g.tag){case 1:if("function"==typeof(m=g.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=g.payload)?m.call(f,d,p):m))break e;d=D({},d,p);break e;case 2:Lo=!0}}null!==i.callback&&0!==i.lane&&(e.flags|=64,null===(p=a.effects)?a.effects=[i]:p.push(i))}else f={eventTime:f,lane:p,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,s|=p;if(null===(i=i.next)){if(null===(i=a.shared.pending))break;i=(p=i).next,p.next=null,a.lastBaseUpdate=p,a.shared.pending=null}}if(null===u&&(l=d),a.baseState=l,a.firstBaseUpdate=c,a.lastBaseUpdate=u,null!==(t=a.shared.interleaved)){a=t;do{s|=a.lane,a=a.next}while(a!==t)}else null===o&&(a.shared.lanes=0);Dl|=s,e.lanes=s,e.memoizedState=d}}function zo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(o(191,a));a.call(r)}}}var Bo=(new r.Component).refs;function Uo(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var qo={isMounted:function(e){return!!(e=e._reactInternals)&&qe(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),a=nc(e),o=Ro(r,a);o.payload=t,null!=n&&(o.callback=n),null!==(t=Oo(e,o,a))&&(rc(t,e,a,r),Mo(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),a=nc(e),o=Ro(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=Oo(e,o,a))&&(rc(t,e,a,r),Mo(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),a=Ro(n,r);a.tag=2,null!=t&&(a.callback=t),null!==(t=Oo(e,a,r))&&(rc(t,e,r,n),Mo(t,e,r))}};function $o(e,t,n,r,a,o,s){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,s):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(a,o))}function Zo(e,t,n){var r=!1,a=Ta,o=t.contextType;return"object"==typeof o&&null!==o?o=Co(o):(a=Ia(t)?Aa:ja.current,o=(r=null!=(r=t.contextTypes))?La(e,a):Ta),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=qo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function Ho(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&qo.enqueueReplaceState(t,t.state,null)}function Vo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=Bo,Io(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=Co(o):(o=Ia(t)?Aa:ja.current,a.context=La(e,o)),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(Uo(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&qo.enqueueReplaceState(a,a.state,null),Fo(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4194308)}function Wo(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(o(309));var r=n.stateNode}if(!r)throw Error(o(147,e));var a=r,s=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===s?t.ref:(t=function(e){var t=a.refs;t===Bo&&(t=a.refs={}),null===e?delete t[s]:t[s]=e},t._stringRef=s,t)}if("string"!=typeof e)throw Error(o(284));if(!n._owner)throw Error(o(290,e))}return e}function Go(e,t){throw e=Object.prototype.toString.call(t),Error(o(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Yo(e){return(0,e._init)(e._payload)}function Ko(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Rc(e,t)).index=0,e.sibling=null,e}function s(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function i(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Fc(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function c(e,t,n,r){var o=n.type;return o===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===o||"object"==typeof o&&null!==o&&o.$$typeof===I&&Yo(o)===t.type)?((r=a(t,n.props)).ref=Wo(e,t,n),r.return=e,r):((r=Oc(n.type,n.key,n.props,null,e.mode,r)).ref=Wo(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=zc(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=Mc(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Fc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Oc(t.type,t.key,t.props,null,e.mode,n)).ref=Wo(e,null,t),n.return=e,n;case k:return(t=zc(t,e.mode,n)).return=e,t;case I:return p(e,(0,t._init)(t._payload),n)}if(te(t)||O(t))return(t=Mc(t,e.mode,n,null)).return=e,t;Go(e,t)}return null}function f(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==a?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===a?c(e,t,n,r):null;case k:return n.key===a?u(e,t,n,r):null;case I:return f(e,t,(a=n._init)(n._payload),r)}if(te(n)||O(n))return null!==a?null:d(e,t,n,r,null);Go(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a);case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,a);case I:return m(e,t,n,(0,r._init)(r._payload),a)}if(te(r)||O(r))return d(t,e=e.get(n)||null,r,a,null);Go(t,r)}return null}function g(a,o,i,l){for(var c=null,u=null,d=o,g=o=0,h=null;null!==d&&g<i.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=f(a,d,i[g],l);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),o=s(b,o,g),null===u?c=b:u.sibling=b,u=b,d=h}if(g===i.length)return n(a,d),ao&&Xa(a,g),c;if(null===d){for(;g<i.length;g++)null!==(d=p(a,i[g],l))&&(o=s(d,o,g),null===u?c=d:u.sibling=d,u=d);return ao&&Xa(a,g),c}for(d=r(a,d);g<i.length;g++)null!==(h=m(d,a,g,i[g],l))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),o=s(h,o,g),null===u?c=h:u.sibling=h,u=h);return e&&d.forEach((function(e){return t(a,e)})),ao&&Xa(a,g),c}function h(a,i,l,c){var u=O(l);if("function"!=typeof u)throw Error(o(150));if(null==(l=u.call(l)))throw Error(o(151));for(var d=u=null,g=i,h=i=0,b=null,y=l.next();null!==g&&!y.done;h++,y=l.next()){g.index>h?(b=g,g=null):b=g.sibling;var v=f(a,g,y.value,c);if(null===v){null===g&&(g=b);break}e&&g&&null===v.alternate&&t(a,g),i=s(v,i,h),null===d?u=v:d.sibling=v,d=v,g=b}if(y.done)return n(a,g),ao&&Xa(a,h),u;if(null===g){for(;!y.done;h++,y=l.next())null!==(y=p(a,y.value,c))&&(i=s(y,i,h),null===d?u=y:d.sibling=y,d=y);return ao&&Xa(a,h),u}for(g=r(a,g);!y.done;h++,y=l.next())null!==(y=m(g,a,h,y.value,c))&&(e&&null!==y.alternate&&g.delete(null===y.key?h:y.key),i=s(y,i,h),null===d?u=y:d.sibling=y,d=y);return e&&g.forEach((function(e){return t(a,e)})),ao&&Xa(a,h),u}return function e(r,o,s,l){if("object"==typeof s&&null!==s&&s.type===S&&null===s.key&&(s=s.props.children),"object"==typeof s&&null!==s){switch(s.$$typeof){case x:e:{for(var c=s.key,u=o;null!==u;){if(u.key===c){if((c=s.type)===S){if(7===u.tag){n(r,u.sibling),(o=a(u,s.props.children)).return=r,r=o;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===I&&Yo(c)===u.type){n(r,u.sibling),(o=a(u,s.props)).ref=Wo(r,u,s),o.return=r,r=o;break e}n(r,u);break}t(r,u),u=u.sibling}s.type===S?((o=Mc(s.props.children,r.mode,l,s.key)).return=r,r=o):((l=Oc(s.type,s.key,s.props,null,r.mode,l)).ref=Wo(r,o,s),l.return=r,r=l)}return i(r);case k:e:{for(u=s.key;null!==o;){if(o.key===u){if(4===o.tag&&o.stateNode.containerInfo===s.containerInfo&&o.stateNode.implementation===s.implementation){n(r,o.sibling),(o=a(o,s.children||[])).return=r,r=o;break e}n(r,o);break}t(r,o),o=o.sibling}(o=zc(s,r.mode,l)).return=r,r=o}return i(r);case I:return e(r,o,(u=s._init)(s._payload),l)}if(te(s))return g(r,o,s,l);if(O(s))return h(r,o,s,l);Go(r,s)}return"string"==typeof s&&""!==s||"number"==typeof s?(s=""+s,null!==o&&6===o.tag?(n(r,o.sibling),(o=a(o,s)).return=r,r=o):(n(r,o),(o=Fc(s,r.mode,l)).return=r,r=o),i(r)):n(r,o)}}var Qo=Ko(!0),Xo=Ko(!1),Jo={},es=Ea(Jo),ts=Ea(Jo),ns=Ea(Jo);function rs(e){if(e===Jo)throw Error(o(174));return e}function as(e,t){switch(Ca(ns,t),Ca(ts,e),Ca(es,Jo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}_a(es),Ca(es,t)}function os(){_a(es),_a(ts),_a(ns)}function ss(e){rs(ns.current);var t=rs(es.current),n=le(t,e.type);t!==n&&(Ca(ts,e),Ca(es,n))}function is(e){ts.current===e&&(_a(es),_a(ts))}var ls=Ea(0);function cs(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var us=[];function ds(){for(var e=0;e<us.length;e++)us[e]._workInProgressVersionPrimary=null;us.length=0}var ps=w.ReactCurrentDispatcher,fs=w.ReactCurrentBatchConfig,ms=0,gs=null,hs=null,bs=null,ys=!1,vs=!1,ws=0,xs=0;function ks(){throw Error(o(321))}function Ss(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ir(e[n],t[n]))return!1;return!0}function Es(e,t,n,r,a,s){if(ms=s,gs=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,ps.current=null===e||null===e.memoizedState?ii:li,e=n(r,a),vs){s=0;do{if(vs=!1,ws=0,25<=s)throw Error(o(301));s+=1,bs=hs=null,t.updateQueue=null,ps.current=ci,e=n(r,a)}while(vs)}if(ps.current=si,t=null!==hs&&null!==hs.next,ms=0,bs=hs=gs=null,ys=!1,t)throw Error(o(300));return e}function _s(){var e=0!==ws;return ws=0,e}function Cs(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bs?gs.memoizedState=bs=e:bs=bs.next=e,bs}function Ts(){if(null===hs){var e=gs.alternate;e=null!==e?e.memoizedState:null}else e=hs.next;var t=null===bs?gs.memoizedState:bs.next;if(null!==t)bs=t,hs=e;else{if(null===e)throw Error(o(310));e={memoizedState:(hs=e).memoizedState,baseState:hs.baseState,baseQueue:hs.baseQueue,queue:hs.queue,next:null},null===bs?gs.memoizedState=bs=e:bs=bs.next=e}return bs}function js(e,t){return"function"==typeof t?t(e):t}function Ns(e){var t=Ts(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=hs,a=r.baseQueue,s=n.pending;if(null!==s){if(null!==a){var i=a.next;a.next=s.next,s.next=i}r.baseQueue=a=s,n.pending=null}if(null!==a){s=a.next,r=r.baseState;var l=i=null,c=null,u=s;do{var d=u.lane;if((ms&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,i=r):c=c.next=p,gs.lanes|=d,Dl|=d}u=u.next}while(null!==u&&u!==s);null===c?i=r:c.next=l,ir(r,t.memoizedState)||(wi=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){a=e;do{s=a.lane,gs.lanes|=s,Dl|=s,a=a.next}while(a!==e)}else null===a&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function As(e){var t=Ts(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,s=t.memoizedState;if(null!==a){n.pending=null;var i=a=a.next;do{s=e(s,i.action),i=i.next}while(i!==a);ir(s,t.memoizedState)||(wi=!0),t.memoizedState=s,null===t.baseQueue&&(t.baseState=s),n.lastRenderedState=s}return[s,r]}function Ls(){}function Is(e,t){var n=gs,r=Ts(),a=t(),s=!ir(r.memoizedState,a);if(s&&(r.memoizedState=a,wi=!0),r=r.queue,Zs(Os.bind(null,n,r,e),[e]),r.getSnapshot!==t||s||null!==bs&&1&bs.memoizedState.tag){if(n.flags|=2048,zs(9,Rs.bind(null,n,r,a,t),void 0,null),null===Al)throw Error(o(349));0!=(30&ms)||Ps(n,t,a)}return a}function Ps(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=gs.updateQueue)?(t={lastEffect:null,stores:null},gs.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Rs(e,t,n,r){t.value=n,t.getSnapshot=r,Ms(t)&&Ds(e)}function Os(e,t,n){return n((function(){Ms(t)&&Ds(e)}))}function Ms(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!ir(e,n)}catch(r){return!0}}function Ds(e){var t=Ao(e,1);null!==t&&rc(t,e,1,-1)}function Fs(e){var t=Cs();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:js,lastRenderedState:e},t.queue=e,e=e.dispatch=ni.bind(null,gs,e),[t.memoizedState,e]}function zs(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=gs.updateQueue)?(t={lastEffect:null,stores:null},gs.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Bs(){return Ts().memoizedState}function Us(e,t,n,r){var a=Cs();gs.flags|=e,a.memoizedState=zs(1|t,n,void 0,void 0===r?null:r)}function qs(e,t,n,r){var a=Ts();r=void 0===r?null:r;var o=void 0;if(null!==hs){var s=hs.memoizedState;if(o=s.destroy,null!==r&&Ss(r,s.deps))return void(a.memoizedState=zs(t,n,o,r))}gs.flags|=e,a.memoizedState=zs(1|t,n,o,r)}function $s(e,t){return Us(8390656,8,e,t)}function Zs(e,t){return qs(2048,8,e,t)}function Hs(e,t){return qs(4,2,e,t)}function Vs(e,t){return qs(4,4,e,t)}function Ws(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Gs(e,t,n){return n=null!=n?n.concat([e]):null,qs(4,4,Ws.bind(null,t,e),n)}function Ys(){}function Ks(e,t){var n=Ts();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ss(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Qs(e,t){var n=Ts();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ss(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Xs(e,t,n){return 0==(21&ms)?(e.baseState&&(e.baseState=!1,wi=!0),e.memoizedState=n):(ir(n,t)||(n=gt(),gs.lanes|=n,Dl|=n,e.baseState=!0),t)}function Js(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fs.transition;fs.transition={};try{e(!1),t()}finally{vt=n,fs.transition=r}}function ei(){return Ts().memoizedState}function ti(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ri(e))ai(t,n);else if(null!==(n=No(e,t,n,r))){rc(n,e,r,tc()),oi(n,t,r)}}function ni(e,t,n){var r=nc(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ri(e))ai(t,a);else{var o=e.alternate;if(0===e.lanes&&(null===o||0===o.lanes)&&null!==(o=t.lastRenderedReducer))try{var s=t.lastRenderedState,i=o(s,n);if(a.hasEagerState=!0,a.eagerState=i,ir(i,s)){var l=t.interleaved;return null===l?(a.next=a,jo(t)):(a.next=l.next,l.next=a),void(t.interleaved=a)}}catch(c){}null!==(n=No(e,t,a,r))&&(rc(n,e,r,a=tc()),oi(n,t,r))}}function ri(e){var t=e.alternate;return e===gs||null!==t&&t===gs}function ai(e,t){vs=ys=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function oi(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var si={readContext:Co,useCallback:ks,useContext:ks,useEffect:ks,useImperativeHandle:ks,useInsertionEffect:ks,useLayoutEffect:ks,useMemo:ks,useReducer:ks,useRef:ks,useState:ks,useDebugValue:ks,useDeferredValue:ks,useTransition:ks,useMutableSource:ks,useSyncExternalStore:ks,useId:ks,unstable_isNewReconciler:!1},ii={readContext:Co,useCallback:function(e,t){return Cs().memoizedState=[e,void 0===t?null:t],e},useContext:Co,useEffect:$s,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Us(4194308,4,Ws.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Us(4194308,4,e,t)},useInsertionEffect:function(e,t){return Us(4,2,e,t)},useMemo:function(e,t){var n=Cs();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Cs();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ti.bind(null,gs,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Cs().memoizedState=e},useState:Fs,useDebugValue:Ys,useDeferredValue:function(e){return Cs().memoizedState=e},useTransition:function(){var e=Fs(!1),t=e[0];return e=Js.bind(null,e[1]),Cs().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=gs,a=Cs();if(ao){if(void 0===n)throw Error(o(407));n=n()}else{if(n=t(),null===Al)throw Error(o(349));0!=(30&ms)||Ps(r,t,n)}a.memoizedState=n;var s={value:n,getSnapshot:t};return a.queue=s,$s(Os.bind(null,r,s,e),[e]),r.flags|=2048,zs(9,Rs.bind(null,r,s,n,t),void 0,null),n},useId:function(){var e=Cs(),t=Al.identifierPrefix;if(ao){var n=Qa;t=":"+t+"R"+(n=(Ka&~(1<<32-st(Ka)-1)).toString(32)+n),0<(n=ws++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=xs++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},li={readContext:Co,useCallback:Ks,useContext:Co,useEffect:Zs,useImperativeHandle:Gs,useInsertionEffect:Hs,useLayoutEffect:Vs,useMemo:Qs,useReducer:Ns,useRef:Bs,useState:function(){return Ns(js)},useDebugValue:Ys,useDeferredValue:function(e){return Xs(Ts(),hs.memoizedState,e)},useTransition:function(){return[Ns(js)[0],Ts().memoizedState]},useMutableSource:Ls,useSyncExternalStore:Is,useId:ei,unstable_isNewReconciler:!1},ci={readContext:Co,useCallback:Ks,useContext:Co,useEffect:Zs,useImperativeHandle:Gs,useInsertionEffect:Hs,useLayoutEffect:Vs,useMemo:Qs,useReducer:As,useRef:Bs,useState:function(){return As(js)},useDebugValue:Ys,useDeferredValue:function(e){var t=Ts();return null===hs?t.memoizedState=e:Xs(t,hs.memoizedState,e)},useTransition:function(){return[As(js)[0],Ts().memoizedState]},useMutableSource:Ls,useSyncExternalStore:Is,useId:ei,unstable_isNewReconciler:!1};function ui(e,t){try{var n="",r=t;do{n+=U(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a,digest:null}}function di(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function pi(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fi="function"==typeof WeakMap?WeakMap:Map;function mi(e,t,n){(n=Ro(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Hl||(Hl=!0,Vl=r),pi(0,t)},n}function gi(e,t,n){(n=Ro(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){pi(0,t)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){pi(0,t),"function"!=typeof r&&(null===Wl?Wl=new Set([this]):Wl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function hi(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fi;var a=new Set;r.set(t,a)}else void 0===(a=r.get(t))&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=Cc.bind(null,e,t,n),t.then(e,e))}function bi(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function yi(e,t,n,r,a){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Ro(-1,1)).tag=2,Oo(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=a,e)}var vi=w.ReactCurrentOwner,wi=!1;function xi(e,t,n,r){t.child=null===e?Xo(t,null,n,r):Qo(t,e.child,n,r)}function ki(e,t,n,r,a){n=n.render;var o=t.ref;return _o(t,a),r=Es(e,t,n,r,o,a),n=_s(),null===e||wi?(ao&&n&&eo(t),t.flags|=1,xi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Hi(e,t,a))}function Si(e,t,n,r,a){if(null===e){var o=n.type;return"function"!=typeof o||Pc(o)||void 0!==o.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Oc(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=o,Ei(e,t,o,r,a))}if(o=e.child,0==(e.lanes&a)){var s=o.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(s,r)&&e.ref===t.ref)return Hi(e,t,a)}return t.flags|=1,(e=Rc(o,r)).ref=t.ref,e.return=t,t.child=e}function Ei(e,t,n,r,a){if(null!==e){var o=e.memoizedProps;if(lr(o,r)&&e.ref===t.ref){if(wi=!1,t.pendingProps=r=o,0==(e.lanes&a))return t.lanes=e.lanes,Hi(e,t,a);0!=(131072&e.flags)&&(wi=!0)}}return Ti(e,t,n,r,a)}function _i(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ca(Rl,Pl),Pl|=n;else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ca(Rl,Pl),Pl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==o?o.baseLanes:n,Ca(Rl,Pl),Pl|=r}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Ca(Rl,Pl),Pl|=r;return xi(e,t,a,n),t.child}function Ci(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ti(e,t,n,r,a){var o=Ia(n)?Aa:ja.current;return o=La(t,o),_o(t,a),n=Es(e,t,n,r,o,a),r=_s(),null===e||wi?(ao&&r&&eo(t),t.flags|=1,xi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Hi(e,t,a))}function ji(e,t,n,r,a){if(Ia(n)){var o=!0;Ma(t)}else o=!1;if(_o(t,a),null===t.stateNode)Zi(e,t),Zo(t,n,r),Vo(t,n,r,a),r=!0;else if(null===e){var s=t.stateNode,i=t.memoizedProps;s.props=i;var l=s.context,c=n.contextType;"object"==typeof c&&null!==c?c=Co(c):c=La(t,c=Ia(n)?Aa:ja.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof s.getSnapshotBeforeUpdate;d||"function"!=typeof s.UNSAFE_componentWillReceiveProps&&"function"!=typeof s.componentWillReceiveProps||(i!==r||l!==c)&&Ho(t,s,r,c),Lo=!1;var p=t.memoizedState;s.state=p,Fo(t,r,s,a),l=t.memoizedState,i!==r||p!==l||Na.current||Lo?("function"==typeof u&&(Uo(t,n,u,r),l=t.memoizedState),(i=Lo||$o(t,n,i,r,p,l,c))?(d||"function"!=typeof s.UNSAFE_componentWillMount&&"function"!=typeof s.componentWillMount||("function"==typeof s.componentWillMount&&s.componentWillMount(),"function"==typeof s.UNSAFE_componentWillMount&&s.UNSAFE_componentWillMount()),"function"==typeof s.componentDidMount&&(t.flags|=4194308)):("function"==typeof s.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),s.props=r,s.state=l,s.context=c,r=i):("function"==typeof s.componentDidMount&&(t.flags|=4194308),r=!1)}else{s=t.stateNode,Po(e,t),i=t.memoizedProps,c=t.type===t.elementType?i:bo(t.type,i),s.props=c,d=t.pendingProps,p=s.context,"object"==typeof(l=n.contextType)&&null!==l?l=Co(l):l=La(t,l=Ia(n)?Aa:ja.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof s.getSnapshotBeforeUpdate)||"function"!=typeof s.UNSAFE_componentWillReceiveProps&&"function"!=typeof s.componentWillReceiveProps||(i!==d||p!==l)&&Ho(t,s,r,l),Lo=!1,p=t.memoizedState,s.state=p,Fo(t,r,s,a);var m=t.memoizedState;i!==d||p!==m||Na.current||Lo?("function"==typeof f&&(Uo(t,n,f,r),m=t.memoizedState),(c=Lo||$o(t,n,c,r,p,m,l)||!1)?(u||"function"!=typeof s.UNSAFE_componentWillUpdate&&"function"!=typeof s.componentWillUpdate||("function"==typeof s.componentWillUpdate&&s.componentWillUpdate(r,m,l),"function"==typeof s.UNSAFE_componentWillUpdate&&s.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof s.componentDidUpdate&&(t.flags|=4),"function"==typeof s.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof s.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof s.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),s.props=r,s.state=m,s.context=l,r=c):("function"!=typeof s.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof s.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Ni(e,t,n,r,o,a)}function Ni(e,t,n,r,a,o){Ci(e,t);var s=0!=(128&t.flags);if(!r&&!s)return a&&Da(t,n,!1),Hi(e,t,o);r=t.stateNode,vi.current=t;var i=s&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&s?(t.child=Qo(t,e.child,null,o),t.child=Qo(t,null,i,o)):xi(e,t,i,o),t.memoizedState=r.state,a&&Da(t,n,!0),t.child}function Ai(e){var t=e.stateNode;t.pendingContext?Ra(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ra(0,t.context,!1),as(e,t.containerInfo)}function Li(e,t,n,r,a){return mo(),go(a),t.flags|=256,xi(e,t,n,r),t.child}var Ii,Pi,Ri,Oi,Mi={dehydrated:null,treeContext:null,retryLane:0};function Di(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fi(e,t,n){var r,a=t.pendingProps,s=ls.current,i=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&s)),r?(i=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(s|=1),Ca(ls,1&s),null===e)return co(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=a.children,e=a.fallback,i?(a=t.mode,i=t.child,l={mode:"hidden",children:l},0==(1&a)&&null!==i?(i.childLanes=0,i.pendingProps=l):i=Dc(l,a,0,null),e=Mc(e,a,n,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=Di(n),t.memoizedState=Mi,e):zi(t,l));if(null!==(s=e.memoizedState)&&null!==(r=s.dehydrated))return function(e,t,n,r,a,s,i){if(n)return 256&t.flags?(t.flags&=-257,Bi(e,t,i,r=di(Error(o(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(s=r.fallback,a=t.mode,r=Dc({mode:"visible",children:r.children},a,0,null),(s=Mc(s,a,i,null)).flags|=2,r.return=t,s.return=t,r.sibling=s,t.child=r,0!=(1&t.mode)&&Qo(t,e.child,null,i),t.child.memoizedState=Di(i),t.memoizedState=Mi,s);if(0==(1&t.mode))return Bi(e,t,i,null);if("$!"===a.data){if(r=a.nextSibling&&a.nextSibling.dataset)var l=r.dgst;return r=l,Bi(e,t,i,r=di(s=Error(o(419)),r,void 0))}if(l=0!=(i&e.childLanes),wi||l){if(null!==(r=Al)){switch(i&-i){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}0!==(a=0!=(a&(r.suspendedLanes|i))?0:a)&&a!==s.retryLane&&(s.retryLane=a,Ao(e,a),rc(r,e,a,-1))}return hc(),Bi(e,t,i,r=di(Error(o(421))))}return"$?"===a.data?(t.flags|=128,t.child=e.child,t=jc.bind(null,e),a._reactRetry=t,null):(e=s.treeContext,ro=ca(a.nextSibling),no=t,ao=!0,oo=null,null!==e&&(Wa[Ga++]=Ka,Wa[Ga++]=Qa,Wa[Ga++]=Ya,Ka=e.id,Qa=e.overflow,Ya=t),t=zi(t,r.children),t.flags|=4096,t)}(e,t,l,a,r,s,n);if(i){i=a.fallback,l=t.mode,r=(s=e.child).sibling;var c={mode:"hidden",children:a.children};return 0==(1&l)&&t.child!==s?((a=t.child).childLanes=0,a.pendingProps=c,t.deletions=null):(a=Rc(s,c)).subtreeFlags=14680064&s.subtreeFlags,null!==r?i=Rc(r,i):(i=Mc(i,l,n,null)).flags|=2,i.return=t,a.return=t,a.sibling=i,t.child=a,a=i,i=t.child,l=null===(l=e.child.memoizedState)?Di(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},i.memoizedState=l,i.childLanes=e.childLanes&~n,t.memoizedState=Mi,a}return e=(i=e.child).sibling,a=Rc(i,{mode:"visible",children:a.children}),0==(1&t.mode)&&(a.lanes=n),a.return=t,a.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=a,t.memoizedState=null,a}function zi(e,t){return(t=Dc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bi(e,t,n,r){return null!==r&&go(r),Qo(t,e.child,null,n),(e=zi(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Ui(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Eo(e.return,t,n)}function qi(e,t,n,r,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function $i(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(xi(e,t,r.children,n),0!=(2&(r=ls.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Ui(e,n,t);else if(19===e.tag)Ui(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ca(ls,r),0==(1&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===cs(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),qi(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===cs(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}qi(t,!0,n,null,o);break;case"together":qi(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Zi(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Hi(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Dl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(o(153));if(null!==t.child){for(n=Rc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Rc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Vi(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Wi(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=14680064&a.subtreeFlags,r|=14680064&a.flags,a.return=e,a=a.sibling;else for(a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Gi(e,t,n){var r=t.pendingProps;switch(to(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Wi(t),null;case 1:case 17:return Ia(t.type)&&Pa(),Wi(t),null;case 3:return r=t.stateNode,os(),_a(Na),_a(ja),ds(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(po(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==oo&&(ic(oo),oo=null))),Pi(e,t),Wi(t),null;case 5:is(t);var a=rs(ns.current);if(n=t.type,null!==e&&null!=t.stateNode)Ri(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(o(166));return Wi(t),null}if(e=rs(es.current),po(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[pa]=t,r[fa]=s,e=0!=(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(a=0;a<Or.length;a++)zr(Or[a],r);break;case"source":zr("error",r);break;case"img":case"image":case"link":zr("error",r),zr("load",r);break;case"details":zr("toggle",r);break;case"input":K(r,s),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!s.multiple},zr("invalid",r);break;case"textarea":ae(r,s),zr("invalid",r)}for(var l in ye(n,s),a=null,s)if(s.hasOwnProperty(l)){var c=s[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==s.suppressHydrationWarning&&Xr(r.textContent,c,e),a=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==s.suppressHydrationWarning&&Xr(r.textContent,c,e),a=["children",""+c]):i.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&zr("scroll",r)}switch(n){case"input":V(r),J(r,s,!0);break;case"textarea":V(r),se(r);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(r.onclick=Jr)}r=a,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===a.nodeType?a:a.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=ie(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[pa]=t,e[fa]=r,Ii(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":zr("cancel",e),zr("close",e),a=r;break;case"iframe":case"object":case"embed":zr("load",e),a=r;break;case"video":case"audio":for(a=0;a<Or.length;a++)zr(Or[a],e);a=r;break;case"source":zr("error",e),a=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),a=r;break;case"details":zr("toggle",e),a=r;break;case"input":K(e,r),a=Y(e,r),zr("invalid",e);break;case"option":default:a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=D({},r,{value:void 0}),zr("invalid",e);break;case"textarea":ae(e,r),a=re(e,r),zr("invalid",e)}for(s in ye(n,a),c=a)if(c.hasOwnProperty(s)){var u=c[s];"style"===s?he(e,u):"dangerouslySetInnerHTML"===s?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===s?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(i.hasOwnProperty(s)?null!=u&&"onScroll"===s&&zr("scroll",e):null!=u&&v(e,s,u,l))}switch(n){case"input":V(e),J(e,r,!1);break;case"textarea":V(e),se(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(s=r.value)?ne(e,!!r.multiple,s,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Wi(t),null;case 6:if(e&&null!=t.stateNode)Oi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(o(166));if(n=rs(ns.current),rs(es.current),po(t)){if(r=t.stateNode,n=t.memoizedProps,r[pa]=t,(s=r.nodeValue!==n)&&null!==(e=no))switch(e.tag){case 3:Xr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,0!=(1&e.mode))}s&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[pa]=t,t.stateNode=r}return Wi(t),null;case 13:if(_a(ls),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ao&&null!==ro&&0!=(1&t.mode)&&0==(128&t.flags))fo(),mo(),t.flags|=98560,s=!1;else if(s=po(t),null!==r&&null!==r.dehydrated){if(null===e){if(!s)throw Error(o(318));if(!(s=null!==(s=t.memoizedState)?s.dehydrated:null))throw Error(o(317));s[pa]=t}else mo(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Wi(t),s=!1}else null!==oo&&(ic(oo),oo=null),s=!0;if(!s)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ls.current)?0===Ol&&(Ol=3):hc())),null!==t.updateQueue&&(t.flags|=4),Wi(t),null);case 4:return os(),Pi(e,t),null===e&&qr(t.stateNode.containerInfo),Wi(t),null;case 10:return So(t.type._context),Wi(t),null;case 19:if(_a(ls),null===(s=t.memoizedState))return Wi(t),null;if(r=0!=(128&t.flags),null===(l=s.rendering))if(r)Vi(s,!1);else{if(0!==Ol||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=cs(e))){for(t.flags|=128,Vi(s,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(s=n).flags&=14680066,null===(l=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=l.childLanes,s.lanes=l.lanes,s.child=l.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=l.memoizedProps,s.memoizedState=l.memoizedState,s.updateQueue=l.updateQueue,s.type=l.type,e=l.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ca(ls,1&ls.current|2),t.child}e=e.sibling}null!==s.tail&&Qe()>$l&&(t.flags|=128,r=!0,Vi(s,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=cs(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Vi(s,!0),null===s.tail&&"hidden"===s.tailMode&&!l.alternate&&!ao)return Wi(t),null}else 2*Qe()-s.renderingStartTime>$l&&1073741824!==n&&(t.flags|=128,r=!0,Vi(s,!1),t.lanes=4194304);s.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=s.last)?n.sibling=l:t.child=l,s.last=l)}return null!==s.tail?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=Qe(),t.sibling=null,n=ls.current,Ca(ls,r?1&n|2:1&n),t):(Wi(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Pl)&&(Wi(t),6&t.subtreeFlags&&(t.flags|=8192)):Wi(t),null;case 24:case 25:return null}throw Error(o(156,t.tag))}function Yi(e,t){switch(to(t),t.tag){case 1:return Ia(t.type)&&Pa(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return os(),_a(Na),_a(ja),ds(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return is(t),null;case 13:if(_a(ls),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(o(340));mo()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return _a(ls),null;case 4:return os(),null;case 10:return So(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Ii=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Pi=function(){},Ri=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,rs(es.current);var o,s=null;switch(n){case"input":a=Y(e,a),r=Y(e,r),s=[];break;case"select":a=D({},a,{value:void 0}),r=D({},r,{value:void 0}),s=[];break;case"textarea":a=re(e,a),r=re(e,r),s=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&null!=a[u])if("style"===u){var l=a[u];for(o in l)l.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(i.hasOwnProperty(u)?s||(s=[]):(s=s||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=a?a[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(o in l)!l.hasOwnProperty(o)||c&&c.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in c)c.hasOwnProperty(o)&&l[o]!==c[o]&&(n||(n={}),n[o]=c[o])}else n||(s||(s=[]),s.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(s=s||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(s=s||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(i.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),s||l===c||(s=[])):(s=s||[]).push(u,c))}n&&(s=s||[]).push("style",n);var u=s;(t.updateQueue=u)&&(t.flags|=4)}},Oi=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ki=!1,Qi=!1,Xi="function"==typeof WeakSet?WeakSet:Set,Ji=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_c(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){_c(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,void 0!==o&&tl(t,n,o)}a=a.next}while(a!==r)}}function al(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function sl(e){var t=e.alternate;null!==t&&(e.alternate=null,sl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[pa],delete t[fa],delete t[ga],delete t[ha],delete t[ba])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)ml(e,t,n),n=n.sibling}function ml(e,t,n){if(ot&&"function"==typeof ot.onCommitFiberUnmount)try{ot.onCommitFiberUnmount(at,n)}catch(i){}switch(n.tag){case 5:Qi||el(n,t);case 6:var r=dl,a=pl;dl=null,fl(e,t,n),pl=a,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?la(e.parentNode,n):1===e.nodeType&&la(e,n),qt(e)):la(dl,n.stateNode));break;case 4:r=dl,a=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=a;break;case 0:case 11:case 14:case 15:if(!Qi&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){a=r=r.next;do{var o=a,s=o.destroy;o=o.tag,void 0!==s&&(0!=(2&o)||0!=(4&o))&&tl(n,t,s),a=a.next}while(a!==r)}fl(e,t,n);break;case 1:if(!Qi&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(i){_c(n,t,i)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Qi=(r=Qi)||null!==n.memoizedState,fl(e,t,n),Qi=r):fl(e,t,n);break;default:fl(e,t,n)}}function gl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xi),t.forEach((function(t){var r=Nc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function hl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var a=n[r];try{var s=e,i=t,l=i;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(o(160));ml(s,i,a),dl=null,pl=!1;var c=a.alternate;null!==c&&(c.return=null),a.return=null}catch(u){_c(a,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(hl(t,e),yl(e),4&r){try{rl(3,e,e.return),al(3,e)}catch(h){_c(e,e.return,h)}try{rl(5,e,e.return)}catch(h){_c(e,e.return,h)}}break;case 1:hl(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(hl(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var a=e.stateNode;try{pe(a,"")}catch(h){_c(e,e.return,h)}}if(4&r&&null!=(a=e.stateNode)){var s=e.memoizedProps,i=null!==n?n.memoizedProps:s,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===s.type&&null!=s.name&&Q(a,s),ve(l,i);var u=ve(l,s);for(i=0;i<c.length;i+=2){var d=c[i],p=c[i+1];"style"===d?he(a,p):"dangerouslySetInnerHTML"===d?de(a,p):"children"===d?pe(a,p):v(a,d,p,u)}switch(l){case"input":X(a,s);break;case"textarea":oe(a,s);break;case"select":var f=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!s.multiple;var m=s.value;null!=m?ne(a,!!s.multiple,m,!1):f!==!!s.multiple&&(null!=s.defaultValue?ne(a,!!s.multiple,s.defaultValue,!0):ne(a,!!s.multiple,s.multiple?[]:"",!1))}a[fa]=s}catch(h){_c(e,e.return,h)}}break;case 6:if(hl(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(o(162));a=e.stateNode,s=e.memoizedProps;try{a.nodeValue=s}catch(h){_c(e,e.return,h)}}break;case 3:if(hl(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{qt(t.containerInfo)}catch(h){_c(e,e.return,h)}break;case 4:default:hl(t,e),yl(e);break;case 13:hl(t,e),yl(e),8192&(a=e.child).flags&&(s=null!==a.memoizedState,a.stateNode.isHidden=s,!s||null!==a.alternate&&null!==a.alternate.memoizedState||(ql=Qe())),4&r&&gl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Qi=(u=Qi)||d,hl(t,e),Qi=u):hl(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Ji=e,d=e.child;null!==d;){for(p=Ji=d;null!==Ji;){switch(m=(f=Ji).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var g=f.stateNode;if("function"==typeof g.componentWillUnmount){r=f,n=f.return;try{t=r,g.props=t.memoizedProps,g.state=t.memoizedState,g.componentWillUnmount()}catch(h){_c(r,n,h)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==m?(m.return=f,Ji=m):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{a=p.stateNode,u?"function"==typeof(s=a.style).setProperty?s.setProperty("display","none","important"):s.display="none":(l=p.stateNode,i=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=ge("display",i))}catch(h){_c(e,e.return,h)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(h){_c(e,e.return,h)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:hl(t,e),yl(e),4&r&&gl(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(o(160))}switch(r.tag){case 5:var a=r.stateNode;32&r.flags&&(pe(a,""),r.flags&=-33),ul(e,ll(e),a);break;case 3:case 4:var s=r.stateNode.containerInfo;cl(e,ll(e),s);break;default:throw Error(o(161))}}catch(i){_c(e,e.return,i)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Ji=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Ji;){var a=Ji,o=a.child;if(22===a.tag&&r){var s=null!==a.memoizedState||Ki;if(!s){var i=a.alternate,l=null!==i&&null!==i.memoizedState||Qi;i=Ki;var c=Qi;if(Ki=s,(Qi=l)&&!c)for(Ji=a;null!==Ji;)l=(s=Ji).child,22===s.tag&&null!==s.memoizedState?Sl(a):null!==l?(l.return=s,Ji=l):Sl(a);for(;null!==o;)Ji=o,wl(o,t,n),o=o.sibling;Ji=a,Ki=i,Qi=c}xl(e)}else 0!=(8772&a.subtreeFlags)&&null!==o?(o.return=a,Ji=o):xl(e)}}function xl(e){for(;null!==Ji;){var t=Ji;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Qi||al(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Qi)if(null===n)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:bo(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var s=t.updateQueue;null!==s&&zo(t,s,r);break;case 3:var i=t.updateQueue;if(null!==i){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}zo(t,i,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&qt(p)}}}break;default:throw Error(o(163))}Qi||512&t.flags&&ol(t)}catch(f){_c(t,t.return,f)}}if(t===e){Ji=null;break}if(null!==(n=t.sibling)){n.return=t.return,Ji=n;break}Ji=t.return}}function kl(e){for(;null!==Ji;){var t=Ji;if(t===e){Ji=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Ji=n;break}Ji=t.return}}function Sl(e){for(;null!==Ji;){var t=Ji;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{al(4,t)}catch(l){_c(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var a=t.return;try{r.componentDidMount()}catch(l){_c(t,a,l)}}var o=t.return;try{ol(t)}catch(l){_c(t,o,l)}break;case 5:var s=t.return;try{ol(t)}catch(l){_c(t,s,l)}}}catch(l){_c(t,t.return,l)}if(t===e){Ji=null;break}var i=t.sibling;if(null!==i){i.return=t.return,Ji=i;break}Ji=t.return}}var El,_l=Math.ceil,Cl=w.ReactCurrentDispatcher,Tl=w.ReactCurrentOwner,jl=w.ReactCurrentBatchConfig,Nl=0,Al=null,Ll=null,Il=0,Pl=0,Rl=Ea(0),Ol=0,Ml=null,Dl=0,Fl=0,zl=0,Bl=null,Ul=null,ql=0,$l=1/0,Zl=null,Hl=!1,Vl=null,Wl=null,Gl=!1,Yl=null,Kl=0,Ql=0,Xl=null,Jl=-1,ec=0;function tc(){return 0!=(6&Nl)?Qe():-1!==Jl?Jl:Jl=Qe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&Nl)&&0!==Il?Il&-Il:null!==ho.transition?(0===ec&&(ec=gt()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Kt(e.type)}function rc(e,t,n,r){if(50<Ql)throw Ql=0,Xl=null,Error(o(185));bt(e,n,r),0!=(2&Nl)&&e===Al||(e===Al&&(0==(2&Nl)&&(Fl|=n),4===Ol&&lc(e,Il)),ac(e,r),1===n&&0===Nl&&0==(1&t.mode)&&($l=Qe()+500,za&&qa()))}function ac(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var s=31-st(o),i=1<<s,l=a[s];-1===l?0!=(i&n)&&0==(i&r)||(a[s]=ft(i,t)):l<=t&&(e.expiredLanes|=i),o&=~i}}(e,t);var r=pt(e,e===Al?Il:0);if(0===r)null!==n&&Ge(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ge(n),1===t)0===e.tag?function(e){za=!0,Ua(e)}(cc.bind(null,e)):Ua(cc.bind(null,e)),sa((function(){0==(6&Nl)&&qa()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Ac(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Jl=-1,ec=0,0!=(6&Nl))throw Error(o(327));var n=e.callbackNode;if(Sc()&&e.callbackNode!==n)return null;var r=pt(e,e===Al?Il:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var a=Nl;Nl|=2;var s=gc();for(Al===e&&Il===t||(Zl=null,$l=Qe()+500,fc(e,t));;)try{vc();break}catch(l){mc(e,l)}ko(),Cl.current=s,Nl=a,null!==Ll?t=0:(Al=null,Il=0,t=Ol)}if(0!==t){if(2===t&&(0!==(a=mt(e))&&(r=a,t=sc(e,a))),1===t)throw n=Ml,fc(e,0),lc(e,r),ac(e,Qe()),n;if(6===t)lc(e,r);else{if(a=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!ir(o(),a))return!1}catch(i){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(a)&&(2===(t=bc(e,r))&&(0!==(s=mt(e))&&(r=s,t=sc(e,s))),1===t))throw n=Ml,fc(e,0),lc(e,r),ac(e,Qe()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(o(345));case 2:case 5:kc(e,Ul,Zl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=ql+500-Qe())){if(0!==pt(e,0))break;if(((a=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=ra(kc.bind(null,e,Ul,Zl),t);break}kc(e,Ul,Zl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,a=-1;0<r;){var i=31-st(r);s=1<<i,(i=t[i])>a&&(a=i),r&=~s}if(r=a,10<(r=(120>(r=Qe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ra(kc.bind(null,e,Ul,Zl),r);break}kc(e,Ul,Zl);break;default:throw Error(o(329))}}}return ac(e,Qe()),e.callbackNode===n?oc.bind(null,e):null}function sc(e,t){var n=Bl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=Ul,Ul=n,null!==t&&ic(t)),e}function ic(e){null===Ul?Ul=e:Ul.push.apply(Ul,e)}function lc(e,t){for(t&=~zl,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-st(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&Nl))throw Error(o(327));Sc();var t=pt(e,0);if(0==(1&t))return ac(e,Qe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=sc(e,r))}if(1===n)throw n=Ml,fc(e,0),lc(e,t),ac(e,Qe()),n;if(6===n)throw Error(o(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,Ul,Zl),ac(e,Qe()),null}function uc(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&($l=Qe()+500,za&&qa())}}function dc(e){null!==Yl&&0===Yl.tag&&0==(6&Nl)&&Sc();var t=Nl;Nl|=1;var n=jl.transition,r=vt;try{if(jl.transition=null,vt=1,e)return e()}finally{vt=r,jl.transition=n,0==(6&(Nl=t))&&qa()}}function pc(){Pl=Rl.current,_a(Rl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,aa(n)),null!==Ll)for(n=Ll.return;null!==n;){var r=n;switch(to(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Pa();break;case 3:os(),_a(Na),_a(ja),ds();break;case 5:is(r);break;case 4:os();break;case 13:case 19:_a(ls);break;case 10:So(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Al=e,Ll=e=Rc(e.current,null),Il=Pl=t,Ol=0,Ml=null,zl=Fl=Dl=0,Ul=Bl=null,null!==To){for(t=0;t<To.length;t++)if(null!==(r=(n=To[t]).interleaved)){n.interleaved=null;var a=r.next,o=n.pending;if(null!==o){var s=o.next;o.next=a,r.next=s}n.pending=r}To=null}return e}function mc(e,t){for(;;){var n=Ll;try{if(ko(),ps.current=si,ys){for(var r=gs.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ys=!1}if(ms=0,bs=hs=gs=null,vs=!1,ws=0,Tl.current=null,null===n||null===n.return){Ol=1,Ml=t,Ll=null;break}e:{var s=e,i=n.return,l=n,c=t;if(t=Il,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=bi(i);if(null!==m){m.flags&=-257,yi(m,i,l,0,t),1&m.mode&&hi(s,u,t),c=u;var g=(t=m).updateQueue;if(null===g){var h=new Set;h.add(c),t.updateQueue=h}else g.add(c);break e}if(0==(1&t)){hi(s,u,t),hc();break e}c=Error(o(426))}else if(ao&&1&l.mode){var b=bi(i);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),yi(b,i,l,0,t),go(ui(c,l));break e}}s=c=ui(c,l),4!==Ol&&(Ol=2),null===Bl?Bl=[s]:Bl.push(s),s=i;do{switch(s.tag){case 3:s.flags|=65536,t&=-t,s.lanes|=t,Do(s,mi(0,c,t));break e;case 1:l=c;var y=s.type,v=s.stateNode;if(0==(128&s.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Wl||!Wl.has(v)))){s.flags|=65536,t&=-t,s.lanes|=t,Do(s,gi(s,l,t));break e}}s=s.return}while(null!==s)}xc(n)}catch(w){t=w,Ll===n&&null!==n&&(Ll=n=n.return);continue}break}}function gc(){var e=Cl.current;return Cl.current=si,null===e?si:e}function hc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===Al||0==(268435455&Dl)&&0==(268435455&Fl)||lc(Al,Il)}function bc(e,t){var n=Nl;Nl|=2;var r=gc();for(Al===e&&Il===t||(Zl=null,fc(e,t));;)try{yc();break}catch(a){mc(e,a)}if(ko(),Nl=n,Cl.current=r,null!==Ll)throw Error(o(261));return Al=null,Il=0,Ol}function yc(){for(;null!==Ll;)wc(Ll)}function vc(){for(;null!==Ll&&!Ye();)wc(Ll)}function wc(e){var t=El(e.alternate,e,Pl);e.memoizedProps=e.pendingProps,null===t?xc(e):Ll=t,Tl.current=null}function xc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Gi(n,t,Pl)))return void(Ll=n)}else{if(null!==(n=Yi(n,t)))return n.flags&=32767,void(Ll=n);if(null===e)return Ol=6,void(Ll=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ll=t);Ll=t=e}while(null!==t);0===Ol&&(Ol=5)}function kc(e,t,n){var r=vt,a=jl.transition;try{jl.transition=null,vt=1,function(e,t,n,r){do{Sc()}while(null!==Yl);if(0!=(6&Nl))throw Error(o(327));n=e.finishedWork;var a=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(o(177));e.callbackNode=null,e.callbackPriority=0;var s=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-st(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}(e,s),e===Al&&(Ll=Al=null,Il=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Gl||(Gl=!0,Ac(tt,(function(){return Sc(),null}))),s=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||s){s=jl.transition,jl.transition=null;var i=vt;vt=1;var l=Nl;Nl|=4,Tl.current=null,function(e,t){if(ea=Zt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var a=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch(x){n=null;break e}var i=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==a&&3!==p.nodeType||(l=i+a),p!==s||0!==r&&3!==p.nodeType||(c=i+r),3===p.nodeType&&(i+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===a&&(l=i),f===s&&++d===r&&(c=i),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(ta={focusedElem:e,selectionRange:n},Zt=!1,Ji=t;null!==Ji;)if(e=(t=Ji).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Ji=e;else for(;null!==Ji;){t=Ji;try{var g=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==g){var h=g.memoizedProps,b=g.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?h:bo(t.type,h),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(o(163))}}catch(x){_c(t,t.return,x)}if(null!==(e=t.sibling)){e.return=t.return,Ji=e;break}Ji=t.return}g=nl,nl=!1}(e,n),bl(n,e),mr(ta),Zt=!!ea,ta=ea=null,e.current=n,vl(n,e,a),Ke(),Nl=l,vt=i,jl.transition=s}else e.current=n;if(Gl&&(Gl=!1,Yl=e,Kl=a),s=e.pendingLanes,0===s&&(Wl=null),function(e){if(ot&&"function"==typeof ot.onCommitFiberRoot)try{ot.onCommitFiberRoot(at,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),ac(e,Qe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(Hl)throw Hl=!1,e=Vl,Vl=null,e;0!=(1&Kl)&&0!==e.tag&&Sc(),s=e.pendingLanes,0!=(1&s)?e===Xl?Ql++:(Ql=0,Xl=e):Ql=0,qa()}(e,t,n,r)}finally{jl.transition=a,vt=r}return null}function Sc(){if(null!==Yl){var e=wt(Kl),t=jl.transition,n=vt;try{if(jl.transition=null,vt=16>e?16:e,null===Yl)var r=!1;else{if(e=Yl,Yl=null,Kl=0,0!=(6&Nl))throw Error(o(331));var a=Nl;for(Nl|=4,Ji=e.current;null!==Ji;){var s=Ji,i=s.child;if(0!=(16&Ji.flags)){var l=s.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Ji=u;null!==Ji;){var d=Ji;switch(d.tag){case 0:case 11:case 15:rl(8,d,s)}var p=d.child;if(null!==p)p.return=d,Ji=p;else for(;null!==Ji;){var f=(d=Ji).sibling,m=d.return;if(sl(d),d===u){Ji=null;break}if(null!==f){f.return=m,Ji=f;break}Ji=m}}}var g=s.alternate;if(null!==g){var h=g.child;if(null!==h){g.child=null;do{var b=h.sibling;h.sibling=null,h=b}while(null!==h)}}Ji=s}}if(0!=(2064&s.subtreeFlags)&&null!==i)i.return=s,Ji=i;else e:for(;null!==Ji;){if(0!=(2048&(s=Ji).flags))switch(s.tag){case 0:case 11:case 15:rl(9,s,s.return)}var y=s.sibling;if(null!==y){y.return=s.return,Ji=y;break e}Ji=s.return}}var v=e.current;for(Ji=v;null!==Ji;){var w=(i=Ji).child;if(0!=(2064&i.subtreeFlags)&&null!==w)w.return=i,Ji=w;else e:for(i=v;null!==Ji;){if(0!=(2048&(l=Ji).flags))try{switch(l.tag){case 0:case 11:case 15:al(9,l)}}catch(k){_c(l,l.return,k)}if(l===i){Ji=null;break e}var x=l.sibling;if(null!==x){x.return=l.return,Ji=x;break e}Ji=l.return}}if(Nl=a,qa(),ot&&"function"==typeof ot.onPostCommitFiberRoot)try{ot.onPostCommitFiberRoot(at,e)}catch(k){}r=!0}return r}finally{vt=n,jl.transition=t}}return!1}function Ec(e,t,n){e=Oo(e,t=mi(0,t=ui(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),ac(e,t))}function _c(e,t,n){if(3===e.tag)Ec(e,e,n);else for(;null!==t;){if(3===t.tag){Ec(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Wl||!Wl.has(r))){t=Oo(t,e=gi(t,e=ui(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),ac(t,e));break}}t=t.return}}function Cc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Al===e&&(Il&n)===n&&(4===Ol||3===Ol&&(130023424&Il)===Il&&500>Qe()-ql?fc(e,0):zl|=n),ac(e,t)}function Tc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=Ao(e,t))&&(bt(e,t,n),ac(e,n))}function jc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Tc(e,n)}function Nc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(o(314))}null!==r&&r.delete(t),Tc(e,n)}function Ac(e,t){return We(e,t)}function Lc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ic(e,t,n,r){return new Lc(e,t,n,r)}function Pc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Rc(e,t){var n=e.alternate;return null===n?((n=Ic(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Oc(e,t,n,r,a,s){var i=2;if(r=e,"function"==typeof e)Pc(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case S:return Mc(n.children,a,s,t);case E:i=8,a|=8;break;case _:return(e=Ic(12,n,t,2|a)).elementType=_,e.lanes=s,e;case N:return(e=Ic(13,n,t,a)).elementType=N,e.lanes=s,e;case A:return(e=Ic(19,n,t,a)).elementType=A,e.lanes=s,e;case P:return Dc(n,a,s,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:i=10;break e;case T:i=9;break e;case j:i=11;break e;case L:i=14;break e;case I:i=16,r=null;break e}throw Error(o(130,null==e?e:typeof e,""))}return(t=Ic(i,n,t,a)).elementType=e,t.type=r,t.lanes=s,t}function Mc(e,t,n,r){return(e=Ic(7,e,r,t)).lanes=n,e}function Dc(e,t,n,r){return(e=Ic(22,e,r,t)).elementType=P,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Ic(6,e,null,t)).lanes=n,e}function zc(e,t,n){return(t=Ic(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bc(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ht(0),this.expirationTimes=ht(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ht(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function Uc(e,t,n,r,a,o,s,i,l){return e=new Bc(e,t,n,i,l),1===t?(t=1,!0===o&&(t|=8)):t=0,o=Ic(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Io(o),e}function qc(e){if(!e)return Ta;e:{if(qe(e=e._reactInternals)!==e||1!==e.tag)throw Error(o(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ia(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(o(171))}if(1===e.tag){var n=e.type;if(Ia(n))return Oa(e,n,t)}return t}function $c(e,t,n,r,a,o,s,i,l){return(e=Uc(n,r,!0,e,0,o,0,i,l)).context=qc(null),n=e.current,(o=Ro(r=tc(),a=nc(n))).callback=null!=t?t:null,Oo(n,o,a),e.current.lanes=a,bt(e,a,r),ac(e,r),e}function Zc(e,t,n,r){var a=t.current,o=tc(),s=nc(a);return n=qc(n),null===t.context?t.context=n:t.pendingContext=n,(t=Ro(o,s)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Oo(a,t,s))&&(rc(e,a,s,o),Mo(e,a,s)),s}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Vc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Wc(e,t){Vc(e,t),(e=e.alternate)&&Vc(e,t)}El=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Na.current)wi=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return wi=!1,function(e,t,n){switch(t.tag){case 3:Ai(t),mo();break;case 5:ss(t);break;case 1:Ia(t.type)&&Ma(t);break;case 4:as(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;Ca(yo,r._currentValue),r._currentValue=a;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Ca(ls,1&ls.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Fi(e,t,n):(Ca(ls,1&ls.current),null!==(e=Hi(e,t,n))?e.sibling:null);Ca(ls,1&ls.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return $i(e,t,n);t.flags|=128}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),Ca(ls,ls.current),r)break;return null;case 22:case 23:return t.lanes=0,_i(e,t,n)}return Hi(e,t,n)}(e,t,n);wi=0!=(131072&e.flags)}else wi=!1,ao&&0!=(1048576&t.flags)&&Ja(t,Va,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Zi(e,t),e=t.pendingProps;var a=La(t,ja.current);_o(t,n),a=Es(null,t,r,e,a,n);var s=_s();return t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ia(r)?(s=!0,Ma(t)):s=!1,t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,Io(t),a.updater=qo,t.stateNode=a,a._reactInternals=t,Vo(t,r,e,n),t=Ni(null,t,r,!0,s,n)):(t.tag=0,ao&&s&&eo(t),xi(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Zi(e,t),e=t.pendingProps,r=(a=r._init)(r._payload),t.type=r,a=t.tag=function(e){if("function"==typeof e)return Pc(e)?1:0;if(null!=e){if((e=e.$$typeof)===j)return 11;if(e===L)return 14}return 2}(r),e=bo(r,e),a){case 0:t=Ti(null,t,r,e,n);break e;case 1:t=ji(null,t,r,e,n);break e;case 11:t=ki(null,t,r,e,n);break e;case 14:t=Si(null,t,r,bo(r.type,e),n);break e}throw Error(o(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,Ti(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 1:return r=t.type,a=t.pendingProps,ji(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 3:e:{if(Ai(t),null===e)throw Error(o(387));r=t.pendingProps,a=(s=t.memoizedState).element,Po(e,t),Fo(t,r,null,n);var i=t.memoizedState;if(r=i.element,s.isDehydrated){if(s={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=s,t.memoizedState=s,256&t.flags){t=Li(e,t,r,n,a=ui(Error(o(423)),t));break e}if(r!==a){t=Li(e,t,r,n,a=ui(Error(o(424)),t));break e}for(ro=ca(t.stateNode.containerInfo.firstChild),no=t,ao=!0,oo=null,n=Xo(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(mo(),r===a){t=Hi(e,t,n);break e}xi(e,t,r,n)}t=t.child}return t;case 5:return ss(t),null===e&&co(t),r=t.type,a=t.pendingProps,s=null!==e?e.memoizedProps:null,i=a.children,na(r,a)?i=null:null!==s&&na(r,s)&&(t.flags|=32),Ci(e,t),xi(e,t,i,n),t.child;case 6:return null===e&&co(t),null;case 13:return Fi(e,t,n);case 4:return as(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Qo(t,null,r,n):xi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,ki(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 7:return xi(e,t,t.pendingProps,n),t.child;case 8:case 12:return xi(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,s=t.memoizedProps,i=a.value,Ca(yo,r._currentValue),r._currentValue=i,null!==s)if(ir(s.value,i)){if(s.children===a.children&&!Na.current){t=Hi(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var l=s.dependencies;if(null!==l){i=s.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===s.tag){(c=Ro(-1,n&-n)).tag=2;var u=s.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),Eo(s.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===s.tag)i=s.type===t.type?null:s.child;else if(18===s.tag){if(null===(i=s.return))throw Error(o(341));i.lanes|=n,null!==(l=i.alternate)&&(l.lanes|=n),Eo(i,n,t),i=s.sibling}else i=s.child;if(null!==i)i.return=s;else for(i=s;null!==i;){if(i===t){i=null;break}if(null!==(s=i.sibling)){s.return=i.return,i=s;break}i=i.return}s=i}xi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,_o(t,n),r=r(a=Co(a)),t.flags|=1,xi(e,t,r,n),t.child;case 14:return a=bo(r=t.type,t.pendingProps),Si(e,t,r,a=bo(r.type,a),n);case 15:return Ei(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:bo(r,a),Zi(e,t),t.tag=1,Ia(r)?(e=!0,Ma(t)):e=!1,_o(t,n),Zo(t,r,a),Vo(t,r,a,n),Ni(null,t,r,!0,e,n);case 19:return $i(e,t,n);case 22:return _i(e,t,n)}throw Error(o(156,t.tag))};var Gc="function"==typeof reportError?reportError:function(e){console.error(e)};function Yc(e){this._internalRoot=e}function Kc(e){this._internalRoot=e}function Qc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,a){var o=n._reactRootContainer;if(o){var s=o;if("function"==typeof a){var i=a;a=function(){var e=Hc(s);i.call(e)}}Zc(t,s,e,a)}else s=function(e,t,n,r,a){if(a){if("function"==typeof r){var o=r;r=function(){var e=Hc(s);o.call(e)}}var s=$c(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=s,e[ma]=s.current,qr(8===e.nodeType?e.parentNode:e),dc(),s}for(;a=e.lastChild;)e.removeChild(a);if("function"==typeof r){var i=r;r=function(){var e=Hc(l);i.call(e)}}var l=Uc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ma]=l.current,qr(8===e.nodeType?e.parentNode:e),dc((function(){Zc(t,l,n,r)})),l}(n,t,e,a,r);return Hc(s)}Kc.prototype.render=Yc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(o(409));Zc(e,t,null,null)},Kc.prototype.unmount=Yc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Zc(null,e,null,null)})),t[ma]=null}},Kc.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Pt.length&&0!==t&&t<Pt[n].priority;n++);Pt.splice(n,0,e),0===n&&Dt(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),ac(t,Qe()),0==(6&Nl)&&($l=Qe()+500,qa()))}break;case 13:dc((function(){var t=Ao(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Wc(e,1)}},kt=function(e){if(13===e.tag){var t=Ao(e,134217728);if(null!==t)rc(t,e,134217728,tc());Wc(e,134217728)}},St=function(e){if(13===e.tag){var t=nc(e),n=Ao(e,t);if(null!==n)rc(n,e,t,tc());Wc(e,t)}},Et=function(){return vt},_t=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},ke=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=xa(r);if(!a)throw Error(o(90));W(r),X(r,a)}}}break;case"textarea":oe(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},je=uc,Ne=dc;var tu={usingClientEntryPoint:!1,Events:[va,wa,xa,Ce,Te,uc]},nu={findFiberByHostInstance:ya,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=He(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var au=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!au.isDisabled&&au.supportsFiber)try{at=au.inject(ru),ot=au}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Qc(t))throw Error(o(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Qc(e))throw Error(o(299));var n=!1,r="",a=Gc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(a=t.onRecoverableError)),t=Uc(e,1,!1,null,0,n,0,r,a),e[ma]=t.current,qr(8===e.nodeType?e.parentNode:e),new Yc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(o(188));throw e=Object.keys(e).join(","),Error(o(268,e))}return e=null===(e=He(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Xc(t))throw Error(o(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Qc(e))throw Error(o(405));var r=null!=n&&n.hydratedSources||null,a=!1,s="",i=Gc;if(null!=n&&(!0===n.unstable_strictMode&&(a=!0),void 0!==n.identifierPrefix&&(s=n.identifierPrefix),void 0!==n.onRecoverableError&&(i=n.onRecoverableError)),t=$c(t,null,e,1,null!=n?n:null,a,0,s,i),e[ma]=t.current,qr(e),r)for(e=0;e<r.length;e++)a=(a=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Kc(t)},t.render=function(e,t,n){if(!Xc(t))throw Error(o(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Xc(e))throw Error(o(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ma]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Xc(n))throw Error(o(200));if(null==e||void 0===e._reactInternals)throw Error(o(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},745:(e,t,n)=>{"use strict";var r=n(3935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,s){if(e===s)return!0;if(e&&s&&"object"==typeof e&&"object"==typeof s){if(e.constructor!==s.constructor)return!1;var i,l,c,u;if(Array.isArray(e)){if((i=e.length)!=s.length)return!1;for(l=i;0!=l--;)if(!o(e[l],s[l]))return!1;return!0}if(n&&e instanceof Map&&s instanceof Map){if(e.size!==s.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!s.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!o(l.value[1],s.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&s instanceof Set){if(e.size!==s.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!s.has(l.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(s)){if((i=e.length)!=s.length)return!1;for(l=i;0!=l--;)if(e[l]!==s[l])return!1;return!0}if(e.constructor===RegExp)return e.source===s.source&&e.flags===s.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof s.valueOf)return e.valueOf()===s.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof s.toString)return e.toString()===s.toString();if((i=(c=Object.keys(e)).length)!==Object.keys(s).length)return!1;for(l=i;0!=l--;)if(!Object.prototype.hasOwnProperty.call(s,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=i;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!o(e[c[l]],s[c[l]]))return!1;return!0}return e!=e&&s!=s}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>H,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),s=n(9590),i=n.n(s),l=n(1143),c=n.n(l),u=n(6774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),x={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(x).reduce((function(e,t){return e[x[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},j=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),s=0;s<o.length;s+=1){var i=o[s],l=i.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(i)||"innerHTML"!==i&&"cssText"!==i&&"itemprop"!==i||(n=i)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][c]&&(a[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),s=0;s<o.length;s+=1){var i=o[s],l=p({},r[i],a[i]);r[i]=l}return e}),[]).reverse()},N=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},A=function(e){return Array.isArray(e)?e.join(""):e},L=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},I=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},P=[h.NOSCRIPT,h.SCRIPT,h.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},O=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[x[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=x[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},F=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=M(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=O(n),o=A(t);return a?"<"+e+' data-rh="true" '+a+">"+R(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return O(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",s=-1===P.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(s?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,s=e.styleTags,i=e.title,l=void 0===i?"":i,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=L(e.metaTags,v),o=L(t,b),s=L(n,y);return{priorityMethods:{toComponent:function(){return[].concat(D(h.META,a.priority),D(h.LINK,o.priority),D(h.SCRIPT,s.priority))},toString:function(){return F(h.META,a.priority,r)+" "+F(h.LINK,o.priority,r)+" "+F(h.SCRIPT,s.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:s.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:F(h.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",a,r),link:F(h.LINK,u,r),meta:F(h.META,d,r),noscript:F(h.NOSCRIPT,o,r),script:F(h.SCRIPT,p,r),style:F(h.STYLE,s,r),title:F(h.TITLE,{title:l,titleAttributes:c},r)}},B=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},q=r.createContext({}),$=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),Z="undefined"!=typeof document,H=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(q.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=Z,H.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),s=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):s.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),s.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:s}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),s=Object.keys(t),i=0;i<s.length;i+=1){var l=s[i],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===a.indexOf(l)&&a.push(l);var u=o.indexOf(l);-1!==u&&o.splice(u,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==s.join(",")&&n.setAttribute("data-rh",s.join(","))}},G=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,s=e.noscriptTags,i=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=A(e)),W(h.TITLE,t)}(u,d);var p={baseTag:V(h.BASE,n),linkTags:V(h.LINK,a),metaTags:V(h.META,o),noscriptTags:V(h.NOSCRIPT,s),scriptTags:V(h.SCRIPT,l),styleTags:V(h.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),i(e,f,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:j(h.LINK,["rel","href"],e),metaTags:j(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:j(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:j(h.SCRIPT,["src","innerHTML"],e),styleTags:j(h.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:N(e,"prioritizeSeoTags")});H.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){G(t,(function(){Y=null}))})):(G(t),Y=null)):z&&(a=z(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:$.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!i()(I(this.props,"helmetData"),I(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,s=e.nestedChildren;switch(r.type){case h.TITLE:return p({},a,((t={})[r.type]=s,t.titleAttributes=p({},o),t));case h.BODY:return p({},a,{bodyAttributes:p({},o)});case h.HTML:return p({},a,{htmlAttributes:p({},o)});default:return p({},a,((n={})[r.type]=p({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,s=g(r,Q),i=Object.keys(s).reduce((function(e,t){return e[k[t]||t]=s[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,o),l){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:i,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:i,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),a=p({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof U||(o=new U(o.context,o.instances)),o?r.createElement(K,p({},a,{context:o.value,helmetData:void 0})):r.createElement(q.Consumer,null,(function(e){return r.createElement(K,p({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,s=n?Symbol.for("react.strict_mode"):60108,i=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case o:case i:case s:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case g:case l:return e;default:return t}}case a:return t}}}function k(e){return x(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=i,t.StrictMode=s,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||x(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return x(e)===c},t.isContextProvider=function(e){return x(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===o},t.isLazy=function(e){return x(e)===h},t.isMemo=function(e){return x(e)===g},t.isPortal=function(e){return x(e)===a},t.isProfiler=function(e){return x(e)===i},t.isStrictMode=function(e){return x(e)===s},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===i||e===s||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=x},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(this,arguments)}var i=n(7294),l=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return i.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=s({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return c.push(h),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),p=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var s=n.prototype;return s.UNSAFE_componentWillMount=function(){this._loadModule()},s.componentDidMount=function(){this._mounted=!0},s._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},s.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},s._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},s.render=function(){return this.state.loading||this.state.error?i.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(i.Component),o(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return i.Children.only(this.props.children)},t}(i.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:l.func.isRequired}),o(h,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>i,f:()=>s});var r=n(6550),a=n(7462),o=n(7294);function s(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&s(e.routes,t,n)),a})),n}function i(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>h});var r=n(6550),a=n(5068),o=n(7294),s=n(9318),i=n(7462),l=n(3366),c=n(8776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,s.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,s.ob)(e,null,null,t):e},f=function(e){return e},m=o.forwardRef;void 0===m&&(m=f);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,s=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=s.target,u=(0,i.Z)({},s,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,o.createElement("a",u)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,u=e.replace,h=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(h,e.location),e.location),l=r?n.createHref(r):"",g=(0,i.Z)({},y,{href:l,navigate:function(){var t=d(h,e.location),r=(0,s.Ep)(e.location)===(0,s.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},y=o.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,s=e.activeClassName,u=void 0===s?"active":s,f=e.activeStyle,m=e.className,g=e.exact,v=e.isActive,w=e.location,x=e.sensitive,k=e.strict,S=e.style,E=e.to,_=e.innerRef,C=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,s=p(d(E,n),n),l=s.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),j=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:x,strict:k}):null,N=!!(v?v(j,n):j),A="function"==typeof m?m(N):m,L="function"==typeof S?S(N):S;N&&(A=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(A,u),L=(0,i.Z)({},L,f));var I=(0,i.Z)({"aria-current":N&&a||null,className:A,style:L,to:s},C);return b!==y?I.ref=t||_:I.innerRef=_,o.createElement(h,I)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>E,F0:()=>v,LX:()=>S,TH:()=>P,k6:()=>I,rs:()=>A,s6:()=>y});var r=n(5068),a=n(7294),o=n(5697),s=n.n(o),i=n(9318),l=n(8776),c=n(7462),u=n(4779),d=n.n(u),p=(n(9864),n(3366)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=a.createContext||function(e,t){var n,o,i="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),s=0;s<a;s++)o[s]=arguments[s];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(s=a)?0!==o||1/o==1/s:o!=o&&s!=s)?n=0:(n="function"==typeof t?t(r,a):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,s},a.render=function(){return this.props.children},n}(a.Component);l.childContextTypes=((n={})[i]=s().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},a.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},a.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},a.getValue=function(){return this.context[i]?this.context[i].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return c.contextTypes=((o={})[i]=s().object,o),{Provider:l,Consumer:c}},h=function(e){var t=g();return t.displayName=e,t},b=h("Router-History"),y=h("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},x=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,s=n.strict,i=void 0!==s&&s,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return k<x&&(r[e]=o,k++),o}(n,{end:o,strict:i,sensitive:c}),a=r.regexp,s=r.keys,l=a.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return o&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:s.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var E=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,c.Z)({},t,{location:n,match:r}),s=e.props,i=s.children,u=s.component,d=s.render;return Array.isArray(i)&&function(e){return 0===a.Children.count(e)}(i)&&(i=null),a.createElement(y.Provider,{value:o},o.match?i?"function"==typeof i?i(o):i:u?a.createElement(u,o):d?d(o):null:"function"==typeof i?i(o):null)}))},t}(a.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,i.Ep)(e)}function j(e){return function(){(0,l.Z)(!1)}}function N(){}a.Component;var A=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var s=e.props.path||e.props.from;r=s?S(o.pathname,(0,c.Z)({},e.props,{path:s})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var L=a.useContext;function I(){return L(b)}function P(){return L(y).location}},5251:(e,t,n)=>{"use strict";var r=n(7294),a=Symbol.for("react.element"),o=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,i=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)s.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:a,type:e,key:c,ref:u,props:o,_owner:i.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,h={};function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,g(w,b.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var a,o={},s=null,i=null;if(null!=t)for(a in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)k.call(t,a)&&!E.hasOwnProperty(a)&&(o[a]=t[a]);var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===o[a]&&(o[a]=l[a]);return{$$typeof:n,type:e,key:s,ref:i,props:o,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function j(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function N(e,t,a,o,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var l=!1;if(null===e)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return s=s(l=e),e=""===o?"."+j(l,0):o,x(s)?(a="",null!=e&&(a=e.replace(T,"$&/")+"/"),N(s,t,a,"",(function(e){return e}))):null!=s&&(C(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,a+(!s.key||l&&l.key===s.key?"":(""+s.key).replace(T,"$&/")+"/")+e)),t.push(s)),1;if(l=0,o=""===o?".":o+":",x(e))for(var c=0;c<e.length;c++){var u=o+j(i=e[c],c);l+=N(i,t,a,u,s)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(i=e.next()).done;)l+=N(i=i.value,t,a,u=o+j(i,c++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function A(e,t,n){if(null==e)return e;var r=[],a=0;return N(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function L(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var I={current:null},P={transition:null},R={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:P,ReactCurrentOwner:S};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=a,t.Profiler=s,t.PureComponent=v,t.StrictMode=o,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var a=g({},e.props),o=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=S.current),void 0!==t.key&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)k.call(t,c)&&!E.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}return{$$typeof:n,type:e.type,key:o,ref:s,props:a,_owner:i}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=P.transition;P.transition={};try{e()}finally{P.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return I.current.useCallback(e,t)},t.useContext=function(e){return I.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return I.current.useDeferredValue(e)},t.useEffect=function(e,t){return I.current.useEffect(e,t)},t.useId=function(){return I.current.useId()},t.useImperativeHandle=function(e,t,n){return I.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return I.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return I.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return I.current.useMemo(e,t)},t.useReducer=function(e,t,n){return I.current.useReducer(e,t,n)},t.useRef=function(e){return I.current.useRef(e)},t.useState=function(e){return I.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return I.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return I.current.useTransition()},t.version="18.2.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,a=e[r];if(!(0<o(a,t)))break e;e[r]=t,e[n]=a,n=r}}function r(e){return 0===e.length?null:e[0]}function a(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length,s=a>>>1;r<s;){var i=2*(r+1)-1,l=e[i],c=i+1,u=e[c];if(0>o(l,n))c<a&&0>o(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[i]=n,r=i);else{if(!(c<a&&0>o(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function o(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var s=performance;t.unstable_now=function(){return s.now()}}else{var i=Date,l=i.now();t.unstable_now=function(){return i.now()-l}}var c=[],u=[],d=1,p=null,f=3,m=!1,g=!1,h=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)a(u);else{if(!(t.startTime<=e))break;a(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function x(e){if(h=!1,w(e),!g)if(null!==r(c))g=!0,P(k);else{var t=r(u);null!==t&&R(x,t.startTime-e)}}function k(e,n){g=!1,h&&(h=!1,y(C),C=-1),m=!0;var o=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!N());){var s=p.callback;if("function"==typeof s){p.callback=null,f=p.priorityLevel;var i=s(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof i?p.callback=i:p===r(c)&&a(c),w(n)}else a(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&R(x,d.startTime-n),l=!1}return l}finally{p=null,f=o,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,E=!1,_=null,C=-1,T=5,j=-1;function N(){return!(t.unstable_now()-j<T)}function A(){if(null!==_){var e=t.unstable_now();j=e;var n=!0;try{n=_(!0,e)}finally{n?S():(E=!1,_=null)}}else E=!1}if("function"==typeof v)S=function(){v(A)};else if("undefined"!=typeof MessageChannel){var L=new MessageChannel,I=L.port2;L.port1.onmessage=A,S=function(){I.postMessage(null)}}else S=function(){b(A,0)};function P(e){_=e,E||(E=!0,S())}function R(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){g||m||(g=!0,P(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,a,o){var s=t.unstable_now();switch("object"==typeof o&&null!==o?o="number"==typeof(o=o.delay)&&0<o?s+o:s:o=s,e){case 1:var i=-1;break;case 2:i=250;break;case 5:i=1073741823;break;case 4:i=1e4;break;default:i=5e3}return e={id:d++,callback:a,priorityLevel:e,startTime:o,expirationTime:i=o+i,sortIndex:-1},o>s?(e.sortIndex=o,n(u,e),null===r(c)&&e===r(u)&&(h?(y(C),C=-1):h=!0,R(x,o-s))):(e.sortIndex=i,n(c,e),g||m||(g=!0,P(k))),e},t.unstable_shouldYield=N,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),s=Object.keys(t);if(o.length!==s.length)return!1;for(var i=Object.prototype.hasOwnProperty.bind(t),l=0;l<o.length;l++){var c=o[l];if(!i(c))return!1;var u=e[c],d=t[c];if(!1===(a=n?n.call(r,u,d,c):void 0)||void 0===a&&u!==d)return!1}return!0}},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Mateusz D\u0105browski",tagline:"Automate Marketing Automation",url:"https://mateuszdabrowski.pl",baseUrl:"/",trailingSlash:!0,favicon:"img/favicon.ico",organizationName:"MateuszDabrowski",projectName:"mateuszdabrowski.pl",onBrokenLinks:"warn",onBrokenAnchors:"warn",onBrokenMarkdownLinks:"warn",customFields:{description:'Personal website focused on making the most out of Salesforce Marketing Cloud. let code = do("our job").',keywords:["Mateusz D\u0105browski","mateuszdabrowski","Salesforce","Marketing Cloud","Salesforce Marketing Cloud","SFMC","Interaction Studio","Personalization","JavaScript","AMPScript","SSJS","SQL","JS"]},markdown:{mermaid:!0,format:"mdx",mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}},themeConfig:{image:"img/og/og-image-base.png",defaultMode:"dark",respectPrefersColorScheme:!0,metadata:[{name:"author",content:"Mateusz D\u0105browski"},{name:"theme-color",content:"#212121"},{name:"msapplication-TileColor",content:"#F6B355"}],docs:{sidebar:{autoCollapseCategories:!0,hideable:!1},versionPersistence:"localStorage"},announcementBar:{id:"announcementBar",content:'\ud83d\udce7 Looking for more SFMC-related spam? Happy to help with my new <a href="/sites/newsletter/" style="text-decoration: underline">Newsletter</a> \ud83d\udce7',backgroundColor:"#0176d3",textColor:"#fffffe",isCloseable:!0},navbar:{logo:{alt:"Mateusz D\u0105browski Logo",src:"img/logo-horizontal-light-2x.png",srcDark:"img/logo-horizontal-dark-2x.png"},items:[{label:"Docs",to:"docs",activeBasePath:"docs",position:"left",items:[{label:"Zen of SFMC",type:"doc",docId:"zen-of-sfmc"},{label:"SSJS",to:"docs/category/ssjs/"},{label:"JavaScript",to:"docs/category/javascript/"},{label:"AMPScript",to:"docs/category/ampscript/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql/"},{label:"SFMC Config",to:"docs/category/sfmc-config/"},{label:"MC Personalization",to:"docs/category/mc-personalization/"}]},{label:"Snippets",to:"docs",activeBasePath:"docs",position:"left",items:[{label:"SSJS",to:"docs/category/ssjs-snippets/"},{label:"JavaScript",to:"docs/category/js-snippets/"},{label:"AMPScript",to:"docs/category/ampscript-snippets/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql-snippets/"},{label:"MC Personalization",to:"docs/category/mc-personalization-snippets/"}]},{label:"Webinars",to:"docs/category/sfmc-webinars/",position:"left",items:[{label:"SFMC Account Architecture",to:"docs/webinars/sfmc-webinar-account-architecture"},{label:"Architecting Web Solutions",to:"docs/webinars/sfmc-webinar-architecting-web-solutions"},{label:"Cloud Page Apps",to:"docs/webinars/sfmc-webinar-cloud-page-apps"}]},{label:"FAQ",to:"sites/category/faq",activeBasePath:"sites/faq",position:"left",items:[{label:"How to get SFMC Demo Account",to:"sites/faq/how-to-get-sfmc-hands-on-experience/"},{label:"How to get SF Certification Vouchers",to:"sites/faq/how-to-get-sf-certification-vouchers/"}]},{label:"Ideas",to:"sites/category/ideas",activeBasePath:"sites/ideas",position:"left",items:[{label:"Marketing Cloud",to:"sites/ideas/marketing-cloud-ideas/"},{label:"MC Personalization",to:"sites/ideas/mc-personalization-ideas/"}]},{label:"Tags",to:"docs/tags",position:"left"},{label:"Newsletter",to:"sites/newsletter",position:"left"},{href:"https://www.linkedin.com/in/mateusz-dabrowski-pl",position:"right",className:"header-linkedin-link","aria-label":"LinkedIn Profile"},{href:"https://trailblazer.me/id/madabrowski",position:"right",className:"header-salesforce-link","aria-label":"Trailblazer Profile"},{href:"https://github.com/MateuszDabrowski",position:"right",className:"header-github-link","aria-label":"GitHub repository"}],hideOnScroll:!1},prism:{defaultLanguage:"javascript",theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},additionalLanguages:["sql","json"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},mermaid:{theme:{light:"neutral",dark:"dark"},options:{}},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Zen of SFMC",to:"docs/zen-of-sfmc"},{label:"SSJS",to:"docs/category/ssjs/"},{label:"JavaScript",to:"docs/category/javascript/"},{label:"AMPScript",to:"docs/category/ampscript/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql/"},{label:"SFMC Config",to:"docs/category/sfmc-config/"},{label:"MC Personalization",to:"docs/category/mc-personalization/"}]},{title:"Snippets",items:[{label:"SSJS",to:"docs/category/ssjs-snippets/"},{label:"JavaScript",to:"docs/category/js-snippets/"},{label:"AMPScript",to:"docs/category/ampscript-snippets/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql-snippets/"},{label:"MC Personalization",to:"docs/category/mc-personalization-snippets/"}]},{title:"My",items:[{label:"Newsletter",to:"sites/newsletter"},{label:"Webinars",to:"docs/category/sfmc-webinars"},{label:"Toolset",to:"sites/my-toolset"},{label:"Ideas",to:"sites/category/ideas"},{label:"FAQ",to:"sites/category/faq"}]},{title:"Legal",items:[{label:"Licence & Attribution",to:"sites/licence"},{label:"Privacy",to:"sites/privacy"}]}]},algolia:{appId:"F4XVDD6BM8",apiKey:"d7932184e92b94d052fab9cea784b13f",indexName:"mateuszdabrowski",placeholder:"Search Docs & Snipptes",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{path:"docs",routeBasePath:"docs",include:["**/*.md","**/*.mdx"],sidebarPath:"/Users/md/Documents/Code/JS/md/docs/docsSidebar.js",showLastUpdateAuthor:!0,showLastUpdateTime:!0,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/"},theme:{customCss:"/Users/md/Documents/Code/JS/md/src/css/custom.css"},sitemap:{changefreq:"weekly",priority:.5},gtag:{trackingID:"GTM-N46LB5K",anonymizeIP:!0}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"sites",path:"sites",routeBasePath:"sites",include:["**/*.md","**/*.mdx"],sidebarPath:"/Users/md/Documents/Code/JS/md/sites/sitesSidebar.js",showLastUpdateAuthor:!0,showLastUpdateTime:!0,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/"}],["@docusaurus/plugin-ideal-image",{quality:70,max:1030,min:640,steps:2}],["@docusaurus/plugin-client-redirects",{redirects:[{from:["/docs/sql/sfmc-sql-snippet-enhanced-send-log/","/docs/usecase/sfmc-enhanced-send-log/"],to:"/docs/config/sfmc-enhanced-send-log/"},{from:["/docs/config/sfmc-config-behavioral-triggers/","/docs/usecase/sfmc-behavioral-triggers/"],to:"/docs/config/sfmc-behavioral-triggers/"},{from:["/docs/usecase/sfmc-contact-deletion/"],to:"/docs/config/sfmc-contact-deletion/"},{from:["/docs/usecase/sfmc-code-resource/"],to:"/docs/config/sfmc-code-resource/"},{from:["/docs/appexchange/sfmc-appexchange-overview/","/docs/config/sfmc-config-appexchange-solutions/"],to:"/docs/config/sfmc-appexchange-solutions/"},{from:["/docs/config/sfmc-config-permissions/"],to:"/docs/js/snippets/export-import-document-sfmc-roles/"},{from:["/docs/config/sfmc-permissions/"],to:"/docs/js/snippets/export-import-document-sfmc-roles/"},{from:["/docs/config/sfmc-config-system-data-views/"],to:"/docs/config/sfmc-system-data-views/"},{from:["/docs/config/sfmc-config-features-on-demand/"],to:"/docs/config/sfmc-features-on-demand/"},{from:["/docs/ideas/engage-with-countdown/","/ideas/engage-with-countdown/","/docs/usecase/engage-with-countdown/"],to:"/docs/js/snippets/engage-with-countdown/"},{from:["/docs/ideas/tailor-with-data/","/ideas/tailor-with-data/","/docs/usecase/tailor-with-data/"],to:"/docs/js/snippets/tailor-with-data/"},{from:["/docs/ssjs/ssjs-snippet-ampscript-in-ssjs/"],to:"/docs/ssjs/snippets/ampscript-in-ssjs/"},{from:["/docs/ssjs/ssjs-snippet-mobileconnect-phone-change/"],to:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/"},{from:["/docs/ssjs/ssjs-snippet-ssjs-script-template/"],to:"/docs/ssjs/snippets/ssjs-script-template/"},{from:["/docs/js/js-snippet-export-import-document-sfmc-roles/"],to:"/docs/js/snippets/export-import-document-sfmc-roles/"},{from:["/docs/sql/sfmc-sql-snippet-debugging-email-sends/"],to:"/docs/sql/snippets/sfmc-sql-debugging-email-sends/"},{from:["/docs/sql/sfmc-sql-snippet-debugging-value-length/"],to:"/docs/sql/snippets/sfmc-sql-debugging-value-length/"},{from:["/docs/usecase/sfmc-cloud-apps/","/docs/usecase/sfmc-cloud-page-apps/"],to:"/docs/ssjs/snippets/sfmc-cloud-page-apps/"},{from:["/docs/category/interaction-studio/"],to:"/docs/category/mc-personalization/"},{from:["/docs/interaction-studio/is-catalog-architecture/"],to:"/docs/interaction-studio/mcp-catalog-architecture/"},{from:["/docs/interaction-studio/is-open-time-email/"],to:"/docs/interaction-studio/mcp-open-time-email/"},{from:["/docs/category/interaction-studio-snippets/"],to:"/docs/category/mc-personalization-snippets/"},{from:["/docs/interaction-studio/snippets/is-catalog-etl-metadata-viewer/"],to:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/"},{from:["/sites/ideas/interaction-studio-ideas/"],to:"/sites/ideas/mc-personalization-ideas/"},{from:["/docs/sql/"],to:"/docs/category/sfmc-sql/"},{from:["/docs/ssjs/"],to:"/docs/category/ssjs/"},{from:["/docs/sfmc-webinars/"],to:"/docs/category/sfmc-webinars/"},{from:["/docs/category/sfmc-use-cases/"],to:"/docs/category/sfmc-config/"},{from:["/docs/interaction-studio/"],to:"/docs/category/mc-personalization/"},{from:["/ideas/","/sites/ideas/"],to:"/sites/ideas/marketing-cloud-ideas/"}]}],"@docusaurus/theme-mermaid"],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",staticDirectories:["static"],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},512:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n)}else for(n in e)e[n]&&(a&&(a+=" "),a+=n);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},2573:(e,t,n)=>{"use strict";n.d(t,{p1:()=>T,y$:()=>ee});var r,a,o,s,i,l,c,u=n(7294),d=n(512),p=Object.create,f=Object.defineProperty,m=Object.defineProperties,g=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&k(e,n,t[n]);if(y)for(var n of y(t))x.call(t,n)&&k(e,n,t[n]);return e},E=(e,t)=>m(e,h(t)),_=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&y)for(var r of y(e))t.indexOf(r)<0&&x.call(e,r)&&(n[r]=e[r]);return n},C=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var s in a={},n[o]=a,t)t.hasOwnProperty(s)&&(a[s]=e(t[s],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],s={};for(var i in o)if(o.hasOwnProperty(i)){if(i==t)for(var l in n)n.hasOwnProperty(l)&&(s[l]=n[l]);n.hasOwnProperty(i)||(s[i]=o[i])}var c=a[e];return a[e]=s,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=s)})),s},DFS:function e(t,n,a,o){o=o||{};var s=r.util.objId;for(var i in t)if(t.hasOwnProperty(i)){n.call(t,i,t[i],a||i);var l=t[i],c=r.util.type(l);"Object"!==c||o[s(l)]?"Array"!==c||o[s(l)]||(o[s(l)]=!0,e(l,n,i,o)):(o[s(l)]=!0,e(l,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",o),!o.grammar)throw new Error('The language "'+o.language+'" has no grammar.');return o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new i;return l(a,a.head,e),s(e,a,t,a.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function s(e,t,n,i,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var g=f[m],h=g.inside,b=!!g.lookbehind,y=!!g.greedy,v=g.alias;if(y&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var x=g.pattern||g,k=i.next,S=u;k!==t.tail&&!(d&&S>=d.reach);S+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof a)){var _,C=1;if(y){if(!(_=o(x,S,e,b))||_.index>=e.length)break;var T=_.index,j=_.index+_[0].length,N=S;for(N+=k.value.length;T>=N;)N+=(k=k.next).value.length;if(S=N-=k.value.length,k.value instanceof a)continue;for(var A=k;A!==t.tail&&(N<j||"string"==typeof A.value);A=A.next)C++,N+=A.value.length;C--,E=e.slice(S,N),_.index-=S}else if(!(_=o(x,0,E,b)))continue;T=_.index;var L=_[0],I=E.slice(0,T),P=E.slice(T+L.length),R=S+E.length;d&&R>d.reach&&(d.reach=R);var O=k.prev;if(I&&(O=l(t,O,I),S+=I.length),c(t,O,C),k=l(t,O,new a(p,h?r.tokenize(L,h):L,v,L)),P&&l(t,k,P),C>1){var M={cause:p+","+m,reach:R};s(e,t,n,k.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function i(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},s=t.alias;s&&(Array.isArray(s)?Array.prototype.push.apply(o.classes,s):o.classes.push(s)),r.hooks.run("wrap",o);var i="";for(var l in o.attributes)i+=" "+l+'="'+(o.attributes[l]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+i+">"+o.content+"</"+o.tag+">"},r}();t.exports=n,n.default=n}},function(){return a||(0,r[b(r)[0]])((a={exports:{}}).exports,a),a.exports}),T=((e,t,n)=>(n=null!=e?p(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of b(t))w.call(e,a)||a===n||f(e,a,{get:()=>t[a],enumerable:!(r=g(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?n:f(n,"default",{value:e,enumerable:!0}),e)))(C());T.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},T.languages.markup.tag.inside["attr-value"].inside.entity=T.languages.markup.entity,T.languages.markup.doctype.inside["internal-subset"].inside=T.languages.markup,T.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(T.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:T.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:T.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},T.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(T.languages.markup.tag,"addAttribute",{value:function(e,t){T.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:T.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),T.languages.html=T.languages.markup,T.languages.mathml=T.languages.markup,T.languages.svg=T.languages.markup,T.languages.xml=T.languages.extend("markup",{}),T.languages.ssml=T.languages.xml,T.languages.atom=T.languages.xml,T.languages.rss=T.languages.xml,o=T,s={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},l="(?:[^\\\\-]|"+(i=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",l=RegExp(l+"-"+l),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},o.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:l,inside:{escape:i,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":s,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:i}},"special-escape":s,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:i,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},T.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},T.languages.javascript=T.languages.extend("clike",{"class-name":[T.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),T.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,T.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:T.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:T.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:T.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:T.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:T.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),T.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:T.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),T.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),T.languages.markup&&(T.languages.markup.tag.addInlined("script","javascript"),T.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),T.languages.js=T.languages.javascript,T.languages.actionscript=T.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),T.languages.actionscript["class-name"].alias="function",delete T.languages.actionscript.parameter,delete T.languages.actionscript["literal-property"],T.languages.markup&&T.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:T.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(T),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},a="doc-comment";if(o=e.languages[t]){var o,s=o[a];if((s=s||(o=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[a])instanceof RegExp&&(s=o[a]={pattern:s}),Array.isArray(s))for(var i=0,l=s.length;i<l;i++)s[i]instanceof RegExp&&(s[i]={pattern:s[i]}),r(s[i]);else r(s)}}))}}),t.addSupport(["java","javascript","php"],t)}(T),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(T),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(T),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function s(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:s(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:s(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:s(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:s(o),lookbehind:!0,greedy:!0},number:{pattern:s(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(T),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,s=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a,o=t[n];"code"!==o.type?e(o.content):(a=o.content[1],o=o.content[3],a&&o&&"code-language"===a.type&&"code-block"===o.type&&"string"==typeof a.content&&(a=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),a="language-"+(a=(/[a-z][\w-]*/i.exec(a)||[""])[0].toLowerCase()),o.alias?"string"==typeof o.alias?o.alias=[o.alias,a]:o.alias.push(a):o.alias=[a]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r];if(o=/language-(.+)/.exec(o)){n=o[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(s,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):i[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),i={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(T),T.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:T.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},T.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var o=p(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var s=u(0);"variable"===s.type&&(f(s,"variable-input"),a.push(s.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<a.length)){var i=p(/^\{$/,/^\}$/);if(-1!==i)for(var l=n;l<i;l++){var c=t[l];"variable"===c.type&&0<=a.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var a=1,o=n;o<t.length;o++){var s=t[o],i=s.content;if("punctuation"===s.type&&"string"==typeof i)if(e.test(i))a++;else if(r.test(i)&&0==--a)return o}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),T.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function s(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function i(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,s){var l=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),c=0,u={},d=(l=i(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+s.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,s),Object.keys(u));return c=0,function t(n){for(var o=0;o<n.length;o++){if(c>=d.length)return;var s,l,p,f,m,g,h,b=n[o];"string"==typeof b||"string"==typeof b.content?(s=d[c],-1!==(h=(g="string"==typeof b?b:b.content).indexOf(s))&&(++c,l=g.substring(0,h),m=u[s],p=void 0,(f={})["interpolation-punctuation"]=a,3===(f=e.tokenize(m,f)).length&&((p=[1,1]).push.apply(p,i(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,m),f=g.substring(h+s.length),m=[],l&&m.push(l),m.push(p),f&&(t(g=[f]),m.push.apply(m,g)),"string"==typeof b?(n.splice.apply(n,[o,1].concat(m)),o+=m.length-1):b.content=m)):(h=b.content,Array.isArray(h)?t(h):t([h]))}}(l),new e.Token(s,l,"language-"+s,t)}e.languages.javascript["template-string"]=[s("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),s("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),s("svg",/\bsvg/.source),s("markdown",/\b(?:markdown|md)/.source),s("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),s("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,a=n.length;r<a;r++){var o,s,i,c=n[r];"string"!=typeof c&&(o=c.content,Array.isArray(o)?"template-string"===c.type?(c=o[1],3===o.length&&"string"!=typeof c&&"embedded-code"===c.type&&(s=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,i=e.languages[c])&&(o[1]=l(s,i,c))):t(o):"string"!=typeof o&&t([o]))}}(t.tokens)}))}(T),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(T),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(T),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(T),T.languages.n4js=T.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),T.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),T.languages.n4jsd=T.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];a=(o="RegExp"===e.util.type(o)?e.languages.javascript[a]={pattern:o}:o).inside||{};(o.inside=a)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(T),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}function s(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;"string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"!==a.content[a.content.length-1].content&&n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&0<n.length&&0===n[n.length-1].openedBraces&&(o=i(a),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(o+=i(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(o=i(t[r-1])+o,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",o,null,o)),a.content&&"string"!=typeof a.content&&s(a.content)}}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(T),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(T),T.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},T.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=T.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(T),T.languages.c=T.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),T.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),T.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},T.languages.c.string],char:T.languages.c.char,comment:T.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:T.languages.c}}}}),T.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete T.languages.c.boolean,T.languages.objectivec=T.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete T.languages.objectivec["class-name"],T.languages.objc=T.languages.objectivec,T.languages.reason=T.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),T.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete T.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(T),T.languages.go=T.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),T.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete T.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(T),T.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},T.languages.python["string-interpolation"].inside.interpolation.inside.rest=T.languages.python,T.languages.py=T.languages.python;((e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>j,duotoneDark:()=>N,duotoneLight:()=>A,github:()=>L,jettwaveDark:()=>Z,jettwaveLight:()=>H,nightOwl:()=>I,nightOwlLight:()=>P,oceanicNext:()=>M,okaidia:()=>D,oneDark:()=>V,oneLight:()=>W,palenight:()=>F,shadesOfPurple:()=>z,synthwave84:()=>B,ultramin:()=>U,vsDark:()=>q,vsLight:()=>$});var j={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},N={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},A={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},L={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},I={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},P={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},R="#c5a5c5",O="#8dc891",M={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:R}},{types:["attr-value"],style:{color:O}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:O}},{types:["punctuation"],style:{color:O}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:R}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},D={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},z={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},U={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},q={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},$={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},Z={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},G=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:a}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=S(S({},e[t]),a);e[t]=n})),e}),{});return r.root=n,r.plain=E(S({},n),{backgroundColor:void 0}),r},Y=/\r\n|\r|\n/,K=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Q=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},X=e=>{const t=[[]],n=[e],r=[0],a=[e.length];let o=0,s=0,i=[];const l=[i];for(;s>-1;){for(;(o=r[s]++)<a[s];){let e,c=t[s];const u=n[s][o];if("string"==typeof u?(c=s>0?c:["plain"],e=u):(c=Q(c,u.type),u.alias&&(c=Q(c,u.alias)),e=u.content),"string"!=typeof e){s++,t.push(c),n.push(e),r.push(0),a.push(e.length);continue}const d=e.split(Y),p=d.length;i.push({types:c,content:d[0]});for(let t=1;t<p;t++)K(i),l.push(i=[]),i.push({types:c,content:d[t]})}s--,t.pop(),n.pop(),r.pop(),a.pop()}return K(i),l},J=({children:e,language:t,code:n,theme:r,prism:a})=>{const o=t.toLowerCase(),s=((e,t)=>{const[n,r]=(0,u.useState)(G(t,e)),a=(0,u.useRef)(),o=(0,u.useRef)();return(0,u.useEffect)((()=>{t===a.current&&e===o.current||(a.current=t,o.current=e,r(G(t,e)))}),[e,t]),n})(o,r),i=(e=>(0,u.useCallback)((t=>{var n=t,{className:r,style:a,line:o}=n,s=_(n,["className","style","line"]);const i=E(S({},s),{className:(0,d.Z)("token-line",r)});return"object"==typeof e&&"plain"in e&&(i.style=e.plain),"object"==typeof a&&(i.style=S(S({},i.style||{}),a)),i}),[e]))(s),l=(e=>{const t=(0,u.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,u.useCallback)((e=>{var n=e,{token:r,className:a,style:o}=n,s=_(n,["token","className","style"]);const i=E(S({},s),{className:(0,d.Z)("token",...r.types,a),children:r.content,style:t(r)});return null!=o&&(i.style=S(S({},i.style||{}),o)),i}),[t])})(s),c=(({prism:e,code:t,grammar:n,language:r})=>{const a=(0,u.useRef)(e);return(0,u.useMemo)((()=>{if(null==n)return X([t]);const e={code:t,grammar:n,language:r,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),X(e.tokens)}),[t,n,r])})({prism:a,language:o,code:n,grammar:a.languages[o]});return e({tokens:c,className:`prism-code language-${o}`,style:null!=s?s.root:{},getLineProps:i,getTokenProps:l})},ee=e=>(0,u.createElement)(J,E(S({},e),{prism:e.prism||T,theme:e.theme||q,code:e.code,language:e.language}))},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/search/-a24":{"__comp":"1a4e3797","__context":{"plugin":"5ad68b42"}},"/docs/-0ee":{"__comp":"5e95c892","__context":{"plugin":"6ef4e5a9"}},"/docs/-32e":{"__comp":"a7bd4aaa","version":"935f2afb"},"/docs/tags/-71d":{"__comp":"3720c009","tags":"55960ee5"},"/docs/tags/amp-script/-460":{"__comp":"df203c0f","tag":"8440116e"},"/docs/tags/analytics/-b32":{"__comp":"df203c0f","tag":"e5aa2e7b"},"/docs/tags/app-exchange/-459":{"__comp":"df203c0f","tag":"09792c4b"},"/docs/tags/app/-789":{"__comp":"df203c0f","tag":"78bdd589"},"/docs/tags/automation/-a3b":{"__comp":"df203c0f","tag":"3b360413"},"/docs/tags/behavioral-triggers/-fea":{"__comp":"df203c0f","tag":"b463a77c"},"/docs/tags/best-practice/-627":{"__comp":"df203c0f","tag":"a6709703"},"/docs/tags/cloud-page/-2ef":{"__comp":"df203c0f","tag":"6f35f557"},"/docs/tags/configuration/-d0c":{"__comp":"df203c0f","tag":"ce321ae3"},"/docs/tags/crm/-965":{"__comp":"df203c0f","tag":"420d9621"},"/docs/tags/data-extensions/-0f8":{"__comp":"df203c0f","tag":"f3b2d393"},"/docs/tags/data-management/-e6e":{"__comp":"df203c0f","tag":"05bf1b0a"},"/docs/tags/debugging/-466":{"__comp":"df203c0f","tag":"9177d15f"},"/docs/tags/deliverability/-824":{"__comp":"df203c0f","tag":"f881cc1a"},"/docs/tags/einstein/-1a7":{"__comp":"df203c0f","tag":"8e6f5683"},"/docs/tags/eloqua/-f6f":{"__comp":"df203c0f","tag":"9a63677c"},"/docs/tags/email/-a00":{"__comp":"df203c0f","tag":"e2615d27"},"/docs/tags/integration/-d21":{"__comp":"df203c0f","tag":"0b7df9a2"},"/docs/tags/interaction-studio/-6d9":{"__comp":"df203c0f","tag":"cb12d9b9"},"/docs/tags/java-script/-62f":{"__comp":"df203c0f","tag":"7e516c75"},"/docs/tags/journey/-302":{"__comp":"df203c0f","tag":"2b07918c"},"/docs/tags/marketing-cloud-personalization/-2ab":{"__comp":"df203c0f","tag":"75f11010"},"/docs/tags/marketing-cloud/-05e":{"__comp":"df203c0f","tag":"48b2f688"},"/docs/tags/performance/-6d4":{"__comp":"df203c0f","tag":"9e4ad429"},"/docs/tags/personalisation/-fc7":{"__comp":"df203c0f","tag":"6a99b79c"},"/docs/tags/setup/-5a6":{"__comp":"df203c0f","tag":"c7794043"},"/docs/tags/sms/-dc4":{"__comp":"df203c0f","tag":"409b673b"},"/docs/tags/snippet/-574":{"__comp":"df203c0f","tag":"8a538aec"},"/docs/tags/sql/-f3f":{"__comp":"df203c0f","tag":"c0a0d864"},"/docs/tags/ssjs/-19a":{"__comp":"df203c0f","tag":"81e44c7d"},"/docs/tags/style-guide/-f8a":{"__comp":"df203c0f","tag":"655aa231"},"/docs/tags/type-script/-bbd":{"__comp":"df203c0f","tag":"ff2c7cca"},"/docs/tags/users/-091":{"__comp":"df203c0f","tag":"9944d2ae"},"/docs/tags/webinar/-a18":{"__comp":"df203c0f","tag":"7a40f54e"},"/docs/-cff":{"__comp":"a94703ab"},"/docs/-d13":{"__comp":"17896441","content":"33ffb019"},"/docs/ampscript/ampscript-style-guide/-e83":{"__comp":"17896441","content":"9be7a4ef"},"/docs/category/ampscript-snippets/-0ef":{"__comp":"14eb3368","categoryGeneratedIndex":"dfa9382d"},"/docs/category/ampscript/-e32":{"__comp":"14eb3368","categoryGeneratedIndex":"ff324314"},"/docs/category/javascript/-ea1":{"__comp":"14eb3368","categoryGeneratedIndex":"45ce19ba"},"/docs/category/js-snippets/-8cf":{"__comp":"14eb3368","categoryGeneratedIndex":"d2c975d1"},"/docs/category/mc-personalization-snippets/-c5b":{"__comp":"14eb3368","categoryGeneratedIndex":"c60f9f65"},"/docs/category/mc-personalization/-ae2":{"__comp":"14eb3368","categoryGeneratedIndex":"7046da09"},"/docs/category/serverside-code/-0ef":{"__comp":"14eb3368","categoryGeneratedIndex":"b33fbe49"},"/docs/category/sfmc-config/-92c":{"__comp":"14eb3368","categoryGeneratedIndex":"99db9621"},"/docs/category/sfmc-sql-snippets/-e14":{"__comp":"14eb3368","categoryGeneratedIndex":"fa7b3a47"},"/docs/category/sfmc-sql/-dea":{"__comp":"14eb3368","categoryGeneratedIndex":"cafad187"},"/docs/category/sfmc-webinars/-679":{"__comp":"14eb3368","categoryGeneratedIndex":"0e89a207"},"/docs/category/ssjs-snippets/-86b":{"__comp":"14eb3368","categoryGeneratedIndex":"66b75e7a"},"/docs/category/ssjs/-b2a":{"__comp":"14eb3368","categoryGeneratedIndex":"42b43273"},"/docs/config/sfmc-appexchange-solutions/-b71":{"__comp":"17896441","content":"c8a2287d"},"/docs/config/sfmc-behavioral-triggers/-66a":{"__comp":"17896441","content":"3365a9e9"},"/docs/config/sfmc-code-resource/-bc5":{"__comp":"17896441","content":"a8b77297"},"/docs/config/sfmc-contact-deletion/-806":{"__comp":"17896441","content":"0ae20921"},"/docs/config/sfmc-enhanced-send-log/-68f":{"__comp":"17896441","content":"f564aeae"},"/docs/config/sfmc-features-on-demand/-499":{"__comp":"17896441","content":"b52e5d8d"},"/docs/config/sfmc-mcc-integration-patterns/-d62":{"__comp":"17896441","content":"13f9d961"},"/docs/config/sfmc-mobile-connect-data-views/-1f6":{"__comp":"17896441","content":"612d51b5"},"/docs/config/sfmc-system-data-views/-5bd":{"__comp":"17896441","content":"7f9f5c99"},"/docs/interaction-studio/mcp-catalog-architecture/-339":{"__comp":"17896441","content":"14add631"},"/docs/interaction-studio/mcp-open-time-email/-f61":{"__comp":"17896441","content":"fe4d0c3d"},"/docs/interaction-studio/mcp-serverside-code-basics/-d80":{"__comp":"17896441","content":"240325d0"},"/docs/interaction-studio/mcp-serverside-code-context/-129":{"__comp":"17896441","content":"929714a5"},"/docs/interaction-studio/mcp-serverside-code-properties/-bf2":{"__comp":"17896441","content":"937990e1"},"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/-7d9":{"__comp":"17896441","content":"fd9368c3"},"/docs/js/js-dom/-3e7":{"__comp":"17896441","content":"ecd0154e"},"/docs/js/js-if-and-switch/-ac9":{"__comp":"17896441","content":"1843ef45"},"/docs/js/js-loops/-809":{"__comp":"17896441","content":"0cb3f831"},"/docs/js/snippets/engage-with-countdown/-c2a":{"__comp":"17896441","content":"7f3cd917"},"/docs/js/snippets/export-import-document-sfmc-roles/-3a0":{"__comp":"17896441","content":"ec6dc5c4"},"/docs/js/snippets/tailor-with-data/-bb9":{"__comp":"17896441","content":"407fe916"},"/docs/sql/sfmc-sql-aggregate-functions/-4cd":{"__comp":"17896441","content":"30084dac"},"/docs/sql/sfmc-sql-basics/-626":{"__comp":"17896441","content":"b840d82f"},"/docs/sql/sfmc-sql-case/-032":{"__comp":"17896441","content":"c64b8421"},"/docs/sql/sfmc-sql-conversion-functions/-732":{"__comp":"17896441","content":"d4ed38e0"},"/docs/sql/sfmc-sql-date-functions/-4a6":{"__comp":"17896441","content":"1328d02f"},"/docs/sql/sfmc-sql-from/-3c2":{"__comp":"17896441","content":"20e039ae"},"/docs/sql/sfmc-sql-join/-de4":{"__comp":"17896441","content":"5ee690fc"},"/docs/sql/sfmc-sql-like/-5e2":{"__comp":"17896441","content":"6d83c2a5"},"/docs/sql/sfmc-sql-null-functions/-789":{"__comp":"17896441","content":"e5fc05e6"},"/docs/sql/sfmc-sql-numeric-functions/-dc8":{"__comp":"17896441","content":"bb5d57b6"},"/docs/sql/sfmc-sql-select/-7c1":{"__comp":"17896441","content":"b39e9a29"},"/docs/sql/sfmc-sql-string-functions/-a6e":{"__comp":"17896441","content":"5ee7ecad"},"/docs/sql/sfmc-sql-style-guide/-f0a":{"__comp":"17896441","content":"ecbe7f2c"},"/docs/sql/sfmc-sql-where/-633":{"__comp":"17896441","content":"509f2ea4"},"/docs/sql/snippets/sfmc-sql-debugging-email-sends/-dde":{"__comp":"17896441","content":"d44a7d50"},"/docs/sql/snippets/sfmc-sql-debugging-value-length/-e61":{"__comp":"17896441","content":"18f12793"},"/docs/ssjs/debugging-ssjs/-b7f":{"__comp":"17896441","content":"92cda9bf"},"/docs/ssjs/snippets/ampscript-in-ssjs/-a8c":{"__comp":"17896441","content":"7827587b"},"/docs/ssjs/snippets/sfmc-cloud-page-apps/-bd9":{"__comp":"17896441","content":"2cf43088"},"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/-3f3":{"__comp":"17896441","content":"b84a6020"},"/docs/ssjs/snippets/ssjs-script-template/-0fd":{"__comp":"17896441","content":"dc8b40ff"},"/docs/ssjs/ssjs-if-and-switch/-675":{"__comp":"17896441","content":"67a57efa"},"/docs/ssjs/ssjs-loops/-e7c":{"__comp":"17896441","content":"22145d1a"},"/docs/ssjs/ssjs-style-guide/-d86":{"__comp":"17896441","content":"d5687ba7"},"/docs/ssjs/ssjs-vs-ampscript-performance/-a13":{"__comp":"17896441","content":"ff6cdf17"},"/docs/webinars/sfmc-webinar-account-architecture/-8c9":{"__comp":"17896441","content":"edb10261"},"/docs/webinars/sfmc-webinar-architecting-web-solutions/-7d1":{"__comp":"17896441","content":"15878b2f"},"/docs/webinars/sfmc-webinar-cloud-page-apps/-28d":{"__comp":"17896441","content":"4d6aece4"},"/docs/zen-of-sfmc/-24d":{"__comp":"17896441","content":"aeba84fb"},"/sites/-83d":{"__comp":"5e95c892","__context":{"plugin":"f4b177ec"}},"/sites/-1fc":{"__comp":"a7bd4aaa","version":"ba7840dc"},"/sites/tags/-e2e":{"__comp":"3720c009","tags":"c792d462"},"/sites/tags/best-practice/-c5e":{"__comp":"df203c0f","tag":"e3f02ea0"},"/sites/tags/faq/-7c2":{"__comp":"df203c0f","tag":"734af923"},"/sites/tags/interaction-studio/-2bc":{"__comp":"df203c0f","tag":"7eaafb14"},"/sites/tags/marketing-cloud-personalization/-175":{"__comp":"df203c0f","tag":"369b6fa3"},"/sites/tags/marketing-cloud/-07d":{"__comp":"df203c0f","tag":"3b7e54b4"},"/sites/tags/personalization/-70f":{"__comp":"df203c0f","tag":"fcb5ea75"},"/sites/-aa1":{"__comp":"a94703ab"},"/sites/category/faq/-a76":{"__comp":"14eb3368","categoryGeneratedIndex":"b8693892"},"/sites/category/ideas/-25e":{"__comp":"14eb3368","categoryGeneratedIndex":"ecf138d3"},"/sites/faq/how-to-get-sf-certification-vouchers/-a25":{"__comp":"17896441","content":"1ad5d13a"},"/sites/faq/how-to-get-sfmc-hands-on-experience/-55d":{"__comp":"17896441","content":"81fb7942"},"/sites/ideas/marketing-cloud-ideas/-f06":{"__comp":"17896441","content":"2e2f252f"},"/sites/ideas/mc-personalization-ideas/-e39":{"__comp":"17896441","content":"8dfb128c"},"/sites/licence/-404":{"__comp":"17896441","content":"772c8612"},"/sites/my-toolset/-7ae":{"__comp":"17896441","content":"139f0dd3"},"/sites/newsletter/-8b7":{"__comp":"17896441","content":"beb9716f"},"/sites/privacy/-6e8":{"__comp":"17896441","content":"06bea203"},"/-f16":{"__comp":"c4f5d8e4","__context":{"plugin":"d164ef0a"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9717,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.91b2a2ce.js.LICENSE.txt b/assets/js/main.2ee7034c.js.LICENSE.txt similarity index 76% rename from assets/js/main.91b2a2ce.js.LICENSE.txt rename to assets/js/main.2ee7034c.js.LICENSE.txt index eb75d6910..91dc89499 100644 --- a/assets/js/main.91b2a2ce.js.LICENSE.txt +++ b/assets/js/main.2ee7034c.js.LICENSE.txt @@ -1,15 +1,22 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */ +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + /** * @license React - * use-sync-external-store-shim.production.min.js + * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -18,16 +25,8 @@ object-assign */ /** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** @license React v0.20.2 - * scheduler.production.min.js + * @license React + * react-jsx-runtime.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -35,8 +34,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.13.1 - * react-is.production.min.js +/** + * @license React + * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -44,8 +44,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v17.0.2 - * react-dom.production.min.js +/** + * @license React + * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -53,8 +54,8 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v17.0.2 - * react.production.min.js +/** @license React v16.13.1 + * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * diff --git a/assets/js/main.91b2a2ce.js b/assets/js/main.91b2a2ce.js deleted file mode 100644 index 0f687c7b5..000000000 --- a/assets/js/main.91b2a2ce.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.91b2a2ce.js.LICENSE.txt */ -(self.webpackChunkmd=self.webpackChunkmd||[]).push([[179],{830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),s=n(6887);const l={"05bf1b0a":[()=>n.e(3877).then(n.t.bind(n,1071,19)),"~docs/default/tag-docs-tags-data-management-6fc.json",1071],"06bea203":[()=>Promise.all([n.e(532),n.e(8845)]).then(n.bind(n,6044)),"@site/sites/privacy.mdx",6044],"09792c4b":[()=>n.e(6606).then(n.t.bind(n,2521,19)),"~docs/default/tag-docs-tags-app-exchange-d11.json",2521],"0ae20921":[()=>Promise.all([n.e(532),n.e(130)]).then(n.bind(n,794)),"@site/docs/config/sfmc-contact-deletion.mdx",794],"0b7df9a2":[()=>n.e(6795).then(n.t.bind(n,5673,19)),"~docs/default/tag-docs-tags-integration-442.json",5673],"0cb3f831":[()=>Promise.all([n.e(532),n.e(5605)]).then(n.bind(n,6394)),"@site/docs/js/js-loops.mdx",6394],"0e89a207":[()=>n.e(9855).then(n.t.bind(n,5480,19)),"~docs/default/category-docs-webinars-category-sfmc-webinars-2ea.json",5480],"1328d02f":[()=>Promise.all([n.e(532),n.e(800)]).then(n.bind(n,1291)),"@site/docs/sql/sfmc-sql-date-functions.mdx",1291],"139f0dd3":[()=>Promise.all([n.e(532),n.e(9517)]).then(n.bind(n,7663)),"@site/sites/toolset.mdx",7663],"13f9d961":[()=>Promise.all([n.e(532),n.e(8537)]).then(n.bind(n,5040)),"@site/docs/config/sfmc-mcc-integration-patterns.mdx",5040],"14add631":[()=>Promise.all([n.e(532),n.e(7215)]).then(n.bind(n,2915)),"@site/docs/interaction-studio/mcp-catalog-architecture.mdx",2915],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,118)),"@theme/DocCategoryGeneratedIndexPage",118],"15878b2f":[()=>Promise.all([n.e(532),n.e(2731)]).then(n.bind(n,8448)),"@site/docs/webinars/sfmc-webinar-architecting-web-solutions.mdx",8448],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,1770)),"@theme/DocItem",1770],"1843ef45":[()=>Promise.all([n.e(532),n.e(2050)]).then(n.bind(n,5088)),"@site/docs/js/js-if-and-switch.mdx",5088],"18f12793":[()=>Promise.all([n.e(532),n.e(4799)]).then(n.bind(n,1944)),"@site/docs/sql/snippets/sfmc-sql-debugging-value-length.mdx",1944],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,8167)),"@theme/SearchPage",8167],"1ad5d13a":[()=>Promise.all([n.e(532),n.e(1706)]).then(n.bind(n,6609)),"@site/sites/faq/how-to-get-sf-certification-vouchers.mdx",6609],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,1299)),"@theme/DocPage",1299],"20e039ae":[()=>Promise.all([n.e(532),n.e(1872)]).then(n.bind(n,5209)),"@site/docs/sql/sfmc-sql-from.mdx",5209],"22145d1a":[()=>Promise.all([n.e(532),n.e(3207)]).then(n.bind(n,3477)),"@site/docs/ssjs/ssjs-loops.mdx",3477],"240325d0":[()=>Promise.all([n.e(532),n.e(1765),n.e(5244)]).then(n.bind(n,6280)),"@site/docs/interaction-studio/mcp-serverside-code-basics.mdx",6280],"2b07918c":[()=>n.e(8798).then(n.t.bind(n,1268,19)),"~docs/default/tag-docs-tags-journey-7d1.json",1268],"2cf43088":[()=>Promise.all([n.e(532),n.e(6167)]).then(n.bind(n,9223)),"@site/docs/ssjs/snippets/sfmc-cloud-page-apps.mdx",9223],"2e2f252f":[()=>Promise.all([n.e(532),n.e(4331)]).then(n.bind(n,8936)),"@site/sites/ideas/marketing-cloud-ideas.mdx",8936],"30084dac":[()=>Promise.all([n.e(532),n.e(3687)]).then(n.bind(n,201)),"@site/docs/sql/sfmc-sql-aggregate-functions.mdx",201],"3365a9e9":[()=>Promise.all([n.e(532),n.e(8645)]).then(n.bind(n,3005)),"@site/docs/config/sfmc-behavioral-triggers.mdx",3005],"33ffb019":[()=>Promise.all([n.e(532),n.e(6576)]).then(n.bind(n,4770)),"@site/docs/docs-and-snippets.mdx",4770],"369b6fa3":[()=>n.e(3664).then(n.t.bind(n,4214,19)),"~docs/sites/tag-sites-tags-marketing-cloud-personalization-172.json",4214],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,6495)),"@theme/DocTagsListPage",6495],"3b360413":[()=>n.e(5831).then(n.t.bind(n,9961,19)),"~docs/default/tag-docs-tags-automation-c98.json",9961],"3b7e54b4":[()=>n.e(8847).then(n.t.bind(n,9367,19)),"~docs/sites/tag-sites-tags-marketing-cloud-8c8.json",9367],"407fe916":[()=>Promise.all([n.e(532),n.e(1099)]).then(n.bind(n,2637)),"@site/docs/js/snippets/tailor-with-data.mdx",2637],"409b673b":[()=>n.e(9021).then(n.t.bind(n,4646,19)),"~docs/default/tag-docs-tags-sms-360.json",4646],"420d9621":[()=>n.e(7279).then(n.t.bind(n,2451,19)),"~docs/default/tag-docs-tags-crm-4a8.json",2451],"42b43273":[()=>n.e(927).then(n.t.bind(n,5132,19)),"~docs/default/category-docs-docs-category-ssjs-f97.json",5132],"45ce19ba":[()=>n.e(9887).then(n.t.bind(n,7986,19)),"~docs/default/category-docs-docs-category-javascript-020.json",7986],"48b2f688":[()=>n.e(3637).then(n.t.bind(n,556,19)),"~docs/default/tag-docs-tags-marketing-cloud-f0e.json",556],"4d6aece4":[()=>Promise.all([n.e(532),n.e(3466)]).then(n.bind(n,2611)),"@site/docs/webinars/sfmc-webinar-cloud-page-apps.mdx",2611],"509f2ea4":[()=>Promise.all([n.e(532),n.e(9134)]).then(n.bind(n,9682)),"@site/docs/sql/sfmc-sql-where.mdx",9682],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"5ad68b42":[()=>n.e(5413).then(n.t.bind(n,7085,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5ee690fc":[()=>Promise.all([n.e(532),n.e(1765),n.e(9484)]).then(n.bind(n,3599)),"@site/docs/sql/sfmc-sql-join.mdx",3599],"5ee7ecad":[()=>Promise.all([n.e(532),n.e(840)]).then(n.bind(n,5657)),"@site/docs/sql/sfmc-sql-string-functions.mdx",5657],"612d51b5":[()=>Promise.all([n.e(532),n.e(3108)]).then(n.bind(n,7591)),"@site/docs/config/sfmc-mobile-connect-data-views.mdx",7591],"655aa231":[()=>n.e(2831).then(n.t.bind(n,301,19)),"~docs/default/tag-docs-tags-style-guide-c3b.json",301],"66b75e7a":[()=>n.e(4414).then(n.t.bind(n,8784,19)),"~docs/default/category-docs-snippets-category-sfmc-ssjs-snippets-327.json",8784],"67a57efa":[()=>Promise.all([n.e(532),n.e(945)]).then(n.bind(n,8188)),"@site/docs/ssjs/ssjs-if-and-switch.mdx",8188],"6a99b79c":[()=>n.e(7008).then(n.t.bind(n,8526,19)),"~docs/default/tag-docs-tags-personalisation-15d.json",8526],"6d83c2a5":[()=>Promise.all([n.e(532),n.e(4134)]).then(n.bind(n,4183)),"@site/docs/sql/sfmc-sql-like.mdx",4183],"6ef4e5a9":[()=>n.e(299).then(n.t.bind(n,3769,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"6f35f557":[()=>n.e(5295).then(n.t.bind(n,3591,19)),"~docs/default/tag-docs-tags-cloud-page-7fa.json",3591],"7046da09":[()=>n.e(4853).then(n.t.bind(n,6670,19)),"~docs/default/category-docs-docs-category-marketing-cloud-personalization-5dd.json",6670],"734af923":[()=>n.e(3265).then(n.t.bind(n,7980,19)),"~docs/sites/tag-sites-tags-faq-bee.json",7980],"75f11010":[()=>n.e(362).then(n.t.bind(n,7772,19)),"~docs/default/tag-docs-tags-marketing-cloud-personalization-494.json",7772],"772c8612":[()=>Promise.all([n.e(532),n.e(3157)]).then(n.bind(n,5110)),"@site/sites/licence.mdx",5110],"7827587b":[()=>Promise.all([n.e(532),n.e(4507)]).then(n.bind(n,260)),"@site/docs/ssjs/snippets/ampscript-in-ssjs.mdx",260],"78bdd589":[()=>n.e(6091).then(n.t.bind(n,9483,19)),"~docs/default/tag-docs-tags-app-88f.json",9483],"7a40f54e":[()=>n.e(1697).then(n.t.bind(n,9728,19)),"~docs/default/tag-docs-tags-webinar-73f.json",9728],"7e516c75":[()=>n.e(9922).then(n.t.bind(n,8573,19)),"~docs/default/tag-docs-tags-java-script-6c3.json",8573],"7eaafb14":[()=>n.e(1351).then(n.t.bind(n,7537,19)),"~docs/sites/tag-sites-tags-interaction-studio-c23.json",7537],"7f3cd917":[()=>Promise.all([n.e(532),n.e(4219)]).then(n.bind(n,1273)),"@site/docs/js/snippets/engage-with-countdown.mdx",1273],"7f9f5c99":[()=>Promise.all([n.e(532),n.e(1092)]).then(n.bind(n,6266)),"@site/docs/config/sfmc-system-data-views.mdx",6266],"81e44c7d":[()=>n.e(5590).then(n.t.bind(n,2136,19)),"~docs/default/tag-docs-tags-ssjs-70d.json",2136],"81fb7942":[()=>Promise.all([n.e(532),n.e(1918)]).then(n.bind(n,6985)),"@site/sites/faq/how-to-get-sfmc-hands-on-experience.mdx",6985],"8440116e":[()=>n.e(2244).then(n.t.bind(n,5244,19)),"~docs/default/tag-docs-tags-amp-script-2e2.json",5244],"8a538aec":[()=>n.e(3009).then(n.t.bind(n,6418,19)),"~docs/default/tag-docs-tags-snippet-022.json",6418],"8dfb128c":[()=>Promise.all([n.e(532),n.e(4715)]).then(n.bind(n,1936)),"@site/sites/ideas/mc-personalization-ideas.mdx",1936],"8e6f5683":[()=>n.e(3864).then(n.t.bind(n,480,19)),"~docs/default/tag-docs-tags-einstein-dfb.json",480],"9177d15f":[()=>n.e(6440).then(n.t.bind(n,9110,19)),"~docs/default/tag-docs-tags-debugging-005.json",9110],"92cda9bf":[()=>Promise.all([n.e(532),n.e(4200)]).then(n.bind(n,8943)),"@site/docs/ssjs/debugging-ssjs.mdx",8943],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"937990e1":[()=>Promise.all([n.e(532),n.e(7531)]).then(n.bind(n,5196)),"@site/docs/interaction-studio/mcp-serverside-code-properties.mdx",5196],"9944d2ae":[()=>n.e(2640).then(n.t.bind(n,9665,19)),"~docs/default/tag-docs-tags-users-5c3.json",9665],"99db9621":[()=>n.e(5647).then(n.t.bind(n,8114,19)),"~docs/default/category-docs-docs-category-sfmc-config-cef.json",8114],"9a63677c":[()=>n.e(5169).then(n.t.bind(n,3884,19)),"~docs/default/tag-docs-tags-eloqua-400.json",3884],"9be7a4ef":[()=>Promise.all([n.e(532),n.e(1694)]).then(n.bind(n,8687)),"@site/docs/ampscript/ampscript-style-guide.mdx",8687],"9e4ad429":[()=>n.e(5406).then(n.t.bind(n,6060,19)),"~docs/default/tag-docs-tags-performance-339.json",6060],a6709703:[()=>n.e(4650).then(n.t.bind(n,1517,19)),"~docs/default/tag-docs-tags-best-practice-f6e.json",1517],a8b77297:[()=>Promise.all([n.e(532),n.e(952)]).then(n.bind(n,3325)),"@site/docs/config/sfmc-code-resource.mdx",3325],aeba84fb:[()=>Promise.all([n.e(532),n.e(5354)]).then(n.bind(n,4756)),"@site/docs/zen-of-sfmc.mdx",4756],b33fbe49:[()=>n.e(3275).then(n.t.bind(n,6543,19)),"~docs/default/category-docs-docs-category-mcp-serverside-code-62c.json",6543],b39e9a29:[()=>Promise.all([n.e(532),n.e(924)]).then(n.bind(n,6718)),"@site/docs/sql/sfmc-sql-select.mdx",6718],b463a77c:[()=>n.e(2618).then(n.t.bind(n,5816,19)),"~docs/default/tag-docs-tags-behavioral-triggers-d29.json",5816],b52e5d8d:[()=>Promise.all([n.e(532),n.e(8693)]).then(n.bind(n,5671)),"@site/docs/config/sfmc-features-on-demand.mdx",5671],b840d82f:[()=>Promise.all([n.e(532),n.e(7542)]).then(n.bind(n,6927)),"@site/docs/sql/sfmc-sql-basics.mdx",6927],b84a6020:[()=>Promise.all([n.e(532),n.e(5811)]).then(n.bind(n,268)),"@site/docs/ssjs/snippets/ssjs-mobileconnect-phone-change.mdx",268],b8693892:[()=>n.e(7670).then(n.t.bind(n,2314,19)),"~docs/sites/category-sites-faq-category-frequently-asked-questions-aca.json",2314],ba7840dc:[()=>n.e(770).then(n.t.bind(n,1881,19)),"~docs/sites/version-current-metadata-prop-751.json",1881],bb5d57b6:[()=>Promise.all([n.e(532),n.e(8773)]).then(n.bind(n,383)),"@site/docs/sql/sfmc-sql-numeric-functions.mdx",383],beb9716f:[()=>Promise.all([n.e(532),n.e(2769)]).then(n.bind(n,7746)),"@site/sites/newsletter.mdx",7746],c0a0d864:[()=>n.e(6583).then(n.t.bind(n,5705,19)),"~docs/default/tag-docs-tags-sql-a7a.json",5705],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,9660)),"@site/src/pages/index.js",9660],c60f9f65:[()=>n.e(8833).then(n.t.bind(n,2089,19)),"~docs/default/category-docs-snippets-category-marketing-cloud-personalization-snippets-aca.json",2089],c64b8421:[()=>Promise.all([n.e(532),n.e(7921)]).then(n.bind(n,4079)),"@site/docs/sql/sfmc-sql-case.mdx",4079],c7794043:[()=>n.e(6639).then(n.t.bind(n,7351,19)),"~docs/default/tag-docs-tags-setup-90f.json",7351],c792d462:[()=>n.e(4941).then(n.t.bind(n,4115,19)),"~docs/sites/tags-list-current-prop-15a.json",4115],c8a2287d:[()=>Promise.all([n.e(532),n.e(1765),n.e(3786)]).then(n.bind(n,1113)),"@site/docs/config/sfmc-appexchange-solutions.mdx",1113],cafad187:[()=>n.e(3447).then(n.t.bind(n,1495,19)),"~docs/default/category-docs-docs-category-sfmc-sql-2d9.json",1495],cb12d9b9:[()=>n.e(7983).then(n.t.bind(n,8542,19)),"~docs/default/tag-docs-tags-interaction-studio-526.json",8542],ce321ae3:[()=>n.e(1837).then(n.t.bind(n,2141,19)),"~docs/default/tag-docs-tags-configuration-143.json",2141],d164ef0a:[()=>n.e(1247).then(n.t.bind(n,5745,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],d2c975d1:[()=>n.e(9449).then(n.t.bind(n,5736,19)),"~docs/default/category-docs-snippets-category-js-snippets-970.json",5736],d44a7d50:[()=>Promise.all([n.e(532),n.e(1765),n.e(4514)]).then(n.bind(n,3254)),"@site/docs/sql/snippets/sfmc-sql-debugging-email-sends.mdx",3254],d4ed38e0:[()=>Promise.all([n.e(532),n.e(1441)]).then(n.bind(n,1308)),"@site/docs/sql/sfmc-sql-conversion-functions.mdx",1308],d5687ba7:[()=>Promise.all([n.e(532),n.e(7207)]).then(n.bind(n,8145)),"@site/docs/ssjs/ssjs-style-guide.mdx",8145],dc8b40ff:[()=>Promise.all([n.e(532),n.e(4502)]).then(n.bind(n,6917)),"@site/docs/ssjs/snippets/ssjs-script-template.mdx",6917],df203c0f:[()=>n.e(9924).then(n.bind(n,615)),"@theme/DocTagDocListPage",615],dfa9382d:[()=>n.e(1074).then(n.t.bind(n,7077,19)),"~docs/default/category-docs-snippets-category-sfmc-ampscript-snippets-a3c.json",7077],e2615d27:[()=>n.e(9117).then(n.t.bind(n,2797,19)),"~docs/default/tag-docs-tags-email-9f4.json",2797],e3f02ea0:[()=>n.e(9379).then(n.t.bind(n,6791,19)),"~docs/sites/tag-sites-tags-best-practice-f65.json",6791],e5aa2e7b:[()=>n.e(8421).then(n.t.bind(n,5269,19)),"~docs/default/tag-docs-tags-analytics-b03.json",5269],e5fc05e6:[()=>Promise.all([n.e(532),n.e(998)]).then(n.bind(n,5827)),"@site/docs/sql/sfmc-sql-null-functions.mdx",5827],ec6dc5c4:[()=>Promise.all([n.e(532),n.e(7873)]).then(n.bind(n,8298)),"@site/docs/js/snippets/export-import-document-sfmc-roles.mdx",8298],ecbe7f2c:[()=>Promise.all([n.e(532),n.e(7120)]).then(n.bind(n,6944)),"@site/docs/sql/sfmc-sql-style-guide.mdx",6944],ecd0154e:[()=>Promise.all([n.e(532),n.e(1654)]).then(n.bind(n,8223)),"@site/docs/js/js-dom.mdx",8223],ecf138d3:[()=>n.e(7576).then(n.t.bind(n,2364,19)),"~docs/sites/category-sites-ideas-category-ideas-e6c.json",2364],edb10261:[()=>Promise.all([n.e(532),n.e(8819)]).then(n.bind(n,2043)),"@site/docs/webinars/sfmc-webinar-account-architecture.mdx",2043],f3b2d393:[()=>n.e(9865).then(n.t.bind(n,2946,19)),"~docs/default/tag-docs-tags-data-extensions-fa4.json",2946],f4b177ec:[()=>n.e(6050).then(n.t.bind(n,8407,19)),"/Users/md/Documents/Code/JS/md/.docusaurus/docusaurus-plugin-content-docs/sites/plugin-route-context-module-100.json",8407],f564aeae:[()=>Promise.all([n.e(532),n.e(1572)]).then(n.bind(n,621)),"@site/docs/config/sfmc-enhanced-send-log.mdx",621],f881cc1a:[()=>n.e(2907).then(n.t.bind(n,6216,19)),"~docs/default/tag-docs-tags-deliverability-66a.json",6216],fa7b3a47:[()=>n.e(4027).then(n.t.bind(n,7140,19)),"~docs/default/category-docs-snippets-category-sfmc-sql-snippets-2fe.json",7140],fcb5ea75:[()=>n.e(633).then(n.t.bind(n,96,19)),"~docs/sites/tag-sites-tags-personalization-03d.json",96],fd9368c3:[()=>Promise.all([n.e(532),n.e(7805)]).then(n.bind(n,6823)),"@site/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer.mdx",6823],fe4d0c3d:[()=>Promise.all([n.e(532),n.e(8700)]).then(n.bind(n,5945)),"@site/docs/interaction-studio/mcp-open-time-email.mdx",5945],ff2c7cca:[()=>n.e(7706).then(n.t.bind(n,5028,19)),"~docs/default/tag-docs-tags-type-script-6e5.json",5028],ff324314:[()=>n.e(3605).then(n.t.bind(n,7377,19)),"~docs/default/category-docs-docs-category-ampscript-398.json",7377],ff6cdf17:[()=>Promise.all([n.e(532),n.e(2163)]).then(n.bind(n,1598)),"@site/docs/ssjs/ssjs-vs-ampscript-performance.mdx",1598]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(5304),d=n(9656);function p(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=s[`${e}-${t}`],p={},f=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{o=o[e]})),o[s[s.length-1]]=a}));const s=i.__comp;delete i.__comp;const l=i.__context;return delete i.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,a.Z)({},i,n)))}})}const f=[{path:"/docs/tags/",component:p("/docs/tags/","871"),exact:!0},{path:"/docs/tags/amp-script/",component:p("/docs/tags/amp-script/","2c5"),exact:!0},{path:"/docs/tags/analytics/",component:p("/docs/tags/analytics/","7ca"),exact:!0},{path:"/docs/tags/app-exchange/",component:p("/docs/tags/app-exchange/","381"),exact:!0},{path:"/docs/tags/app/",component:p("/docs/tags/app/","3cf"),exact:!0},{path:"/docs/tags/automation/",component:p("/docs/tags/automation/","21d"),exact:!0},{path:"/docs/tags/behavioral-triggers/",component:p("/docs/tags/behavioral-triggers/","f5a"),exact:!0},{path:"/docs/tags/best-practice/",component:p("/docs/tags/best-practice/","91a"),exact:!0},{path:"/docs/tags/cloud-page/",component:p("/docs/tags/cloud-page/","606"),exact:!0},{path:"/docs/tags/configuration/",component:p("/docs/tags/configuration/","14e"),exact:!0},{path:"/docs/tags/crm/",component:p("/docs/tags/crm/","bc1"),exact:!0},{path:"/docs/tags/data-extensions/",component:p("/docs/tags/data-extensions/","5d0"),exact:!0},{path:"/docs/tags/data-management/",component:p("/docs/tags/data-management/","e83"),exact:!0},{path:"/docs/tags/debugging/",component:p("/docs/tags/debugging/","61d"),exact:!0},{path:"/docs/tags/deliverability/",component:p("/docs/tags/deliverability/","565"),exact:!0},{path:"/docs/tags/einstein/",component:p("/docs/tags/einstein/","891"),exact:!0},{path:"/docs/tags/eloqua/",component:p("/docs/tags/eloqua/","04a"),exact:!0},{path:"/docs/tags/email/",component:p("/docs/tags/email/","4e7"),exact:!0},{path:"/docs/tags/integration/",component:p("/docs/tags/integration/","d6e"),exact:!0},{path:"/docs/tags/interaction-studio/",component:p("/docs/tags/interaction-studio/","d34"),exact:!0},{path:"/docs/tags/java-script/",component:p("/docs/tags/java-script/","e74"),exact:!0},{path:"/docs/tags/journey/",component:p("/docs/tags/journey/","1df"),exact:!0},{path:"/docs/tags/marketing-cloud-personalization/",component:p("/docs/tags/marketing-cloud-personalization/","c50"),exact:!0},{path:"/docs/tags/marketing-cloud/",component:p("/docs/tags/marketing-cloud/","acb"),exact:!0},{path:"/docs/tags/performance/",component:p("/docs/tags/performance/","b47"),exact:!0},{path:"/docs/tags/personalisation/",component:p("/docs/tags/personalisation/","256"),exact:!0},{path:"/docs/tags/setup/",component:p("/docs/tags/setup/","e61"),exact:!0},{path:"/docs/tags/sms/",component:p("/docs/tags/sms/","d5b"),exact:!0},{path:"/docs/tags/snippet/",component:p("/docs/tags/snippet/","1d3"),exact:!0},{path:"/docs/tags/sql/",component:p("/docs/tags/sql/","af9"),exact:!0},{path:"/docs/tags/ssjs/",component:p("/docs/tags/ssjs/","d1c"),exact:!0},{path:"/docs/tags/style-guide/",component:p("/docs/tags/style-guide/","e50"),exact:!0},{path:"/docs/tags/type-script/",component:p("/docs/tags/type-script/","3e8"),exact:!0},{path:"/docs/tags/users/",component:p("/docs/tags/users/","811"),exact:!0},{path:"/docs/tags/webinar/",component:p("/docs/tags/webinar/","d03"),exact:!0},{path:"/search/",component:p("/search/","a24"),exact:!0},{path:"/sites/tags/",component:p("/sites/tags/","80b"),exact:!0},{path:"/sites/tags/best-practice/",component:p("/sites/tags/best-practice/","06e"),exact:!0},{path:"/sites/tags/faq/",component:p("/sites/tags/faq/","40a"),exact:!0},{path:"/sites/tags/interaction-studio/",component:p("/sites/tags/interaction-studio/","1d8"),exact:!0},{path:"/sites/tags/marketing-cloud-personalization/",component:p("/sites/tags/marketing-cloud-personalization/","2dc"),exact:!0},{path:"/sites/tags/marketing-cloud/",component:p("/sites/tags/marketing-cloud/","ebc"),exact:!0},{path:"/sites/tags/personalization/",component:p("/sites/tags/personalization/","58c"),exact:!0},{path:"/docs/",component:p("/docs/","496"),routes:[{path:"/docs/",component:p("/docs/","d13"),exact:!0,sidebar:"docs"},{path:"/docs/ampscript/ampscript-style-guide/",component:p("/docs/ampscript/ampscript-style-guide/","e83"),exact:!0,sidebar:"docs"},{path:"/docs/category/ampscript-snippets/",component:p("/docs/category/ampscript-snippets/","0ef"),exact:!0,sidebar:"snippets"},{path:"/docs/category/ampscript/",component:p("/docs/category/ampscript/","e32"),exact:!0,sidebar:"docs"},{path:"/docs/category/javascript/",component:p("/docs/category/javascript/","ea1"),exact:!0,sidebar:"docs"},{path:"/docs/category/js-snippets/",component:p("/docs/category/js-snippets/","8cf"),exact:!0,sidebar:"snippets"},{path:"/docs/category/mc-personalization-snippets/",component:p("/docs/category/mc-personalization-snippets/","c5b"),exact:!0,sidebar:"snippets"},{path:"/docs/category/mc-personalization/",component:p("/docs/category/mc-personalization/","ae2"),exact:!0,sidebar:"docs"},{path:"/docs/category/serverside-code/",component:p("/docs/category/serverside-code/","0ef"),exact:!0,sidebar:"docs"},{path:"/docs/category/sfmc-config/",component:p("/docs/category/sfmc-config/","92c"),exact:!0,sidebar:"docs"},{path:"/docs/category/sfmc-sql-snippets/",component:p("/docs/category/sfmc-sql-snippets/","e14"),exact:!0,sidebar:"snippets"},{path:"/docs/category/sfmc-sql/",component:p("/docs/category/sfmc-sql/","dea"),exact:!0,sidebar:"docs"},{path:"/docs/category/sfmc-webinars/",component:p("/docs/category/sfmc-webinars/","679"),exact:!0,sidebar:"webinars"},{path:"/docs/category/ssjs-snippets/",component:p("/docs/category/ssjs-snippets/","86b"),exact:!0,sidebar:"snippets"},{path:"/docs/category/ssjs/",component:p("/docs/category/ssjs/","b2a"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-appexchange-solutions/",component:p("/docs/config/sfmc-appexchange-solutions/","b71"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-behavioral-triggers/",component:p("/docs/config/sfmc-behavioral-triggers/","66a"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-code-resource/",component:p("/docs/config/sfmc-code-resource/","bc5"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-contact-deletion/",component:p("/docs/config/sfmc-contact-deletion/","806"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-enhanced-send-log/",component:p("/docs/config/sfmc-enhanced-send-log/","68f"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-features-on-demand/",component:p("/docs/config/sfmc-features-on-demand/","499"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-mcc-integration-patterns/",component:p("/docs/config/sfmc-mcc-integration-patterns/","d62"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-mobile-connect-data-views/",component:p("/docs/config/sfmc-mobile-connect-data-views/","1f6"),exact:!0,sidebar:"docs"},{path:"/docs/config/sfmc-system-data-views/",component:p("/docs/config/sfmc-system-data-views/","5bd"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-catalog-architecture/",component:p("/docs/interaction-studio/mcp-catalog-architecture/","339"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-open-time-email/",component:p("/docs/interaction-studio/mcp-open-time-email/","f61"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-serverside-code-basics/",component:p("/docs/interaction-studio/mcp-serverside-code-basics/","d80"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/mcp-serverside-code-properties/",component:p("/docs/interaction-studio/mcp-serverside-code-properties/","bf2"),exact:!0,sidebar:"docs"},{path:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/",component:p("/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/","7d9"),exact:!0,sidebar:"snippets"},{path:"/docs/js/js-dom/",component:p("/docs/js/js-dom/","3e7"),exact:!0,sidebar:"docs"},{path:"/docs/js/js-if-and-switch/",component:p("/docs/js/js-if-and-switch/","ac9"),exact:!0,sidebar:"docs"},{path:"/docs/js/js-loops/",component:p("/docs/js/js-loops/","809"),exact:!0,sidebar:"docs"},{path:"/docs/js/snippets/engage-with-countdown/",component:p("/docs/js/snippets/engage-with-countdown/","c2a"),exact:!0,sidebar:"snippets"},{path:"/docs/js/snippets/export-import-document-sfmc-roles/",component:p("/docs/js/snippets/export-import-document-sfmc-roles/","3a0"),exact:!0,sidebar:"snippets"},{path:"/docs/js/snippets/tailor-with-data/",component:p("/docs/js/snippets/tailor-with-data/","bb9"),exact:!0,sidebar:"snippets"},{path:"/docs/sql/sfmc-sql-aggregate-functions/",component:p("/docs/sql/sfmc-sql-aggregate-functions/","4cd"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-basics/",component:p("/docs/sql/sfmc-sql-basics/","626"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-case/",component:p("/docs/sql/sfmc-sql-case/","032"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-conversion-functions/",component:p("/docs/sql/sfmc-sql-conversion-functions/","732"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-date-functions/",component:p("/docs/sql/sfmc-sql-date-functions/","4a6"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-from/",component:p("/docs/sql/sfmc-sql-from/","3c2"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-join/",component:p("/docs/sql/sfmc-sql-join/","de4"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-like/",component:p("/docs/sql/sfmc-sql-like/","5e2"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-null-functions/",component:p("/docs/sql/sfmc-sql-null-functions/","789"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-numeric-functions/",component:p("/docs/sql/sfmc-sql-numeric-functions/","dc8"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-select/",component:p("/docs/sql/sfmc-sql-select/","7c1"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-string-functions/",component:p("/docs/sql/sfmc-sql-string-functions/","a6e"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-style-guide/",component:p("/docs/sql/sfmc-sql-style-guide/","f0a"),exact:!0,sidebar:"docs"},{path:"/docs/sql/sfmc-sql-where/",component:p("/docs/sql/sfmc-sql-where/","633"),exact:!0,sidebar:"docs"},{path:"/docs/sql/snippets/sfmc-sql-debugging-email-sends/",component:p("/docs/sql/snippets/sfmc-sql-debugging-email-sends/","dde"),exact:!0,sidebar:"snippets"},{path:"/docs/sql/snippets/sfmc-sql-debugging-value-length/",component:p("/docs/sql/snippets/sfmc-sql-debugging-value-length/","e61"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/debugging-ssjs/",component:p("/docs/ssjs/debugging-ssjs/","b7f"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/snippets/ampscript-in-ssjs/",component:p("/docs/ssjs/snippets/ampscript-in-ssjs/","a8c"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/snippets/sfmc-cloud-page-apps/",component:p("/docs/ssjs/snippets/sfmc-cloud-page-apps/","bd9"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/",component:p("/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/","3f3"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/snippets/ssjs-script-template/",component:p("/docs/ssjs/snippets/ssjs-script-template/","0fd"),exact:!0,sidebar:"snippets"},{path:"/docs/ssjs/ssjs-if-and-switch/",component:p("/docs/ssjs/ssjs-if-and-switch/","675"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/ssjs-loops/",component:p("/docs/ssjs/ssjs-loops/","e7c"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/ssjs-style-guide/",component:p("/docs/ssjs/ssjs-style-guide/","d86"),exact:!0,sidebar:"docs"},{path:"/docs/ssjs/ssjs-vs-ampscript-performance/",component:p("/docs/ssjs/ssjs-vs-ampscript-performance/","a13"),exact:!0,sidebar:"docs"},{path:"/docs/webinars/sfmc-webinar-account-architecture/",component:p("/docs/webinars/sfmc-webinar-account-architecture/","8c9"),exact:!0,sidebar:"webinars"},{path:"/docs/webinars/sfmc-webinar-architecting-web-solutions/",component:p("/docs/webinars/sfmc-webinar-architecting-web-solutions/","7d1"),exact:!0,sidebar:"webinars"},{path:"/docs/webinars/sfmc-webinar-cloud-page-apps/",component:p("/docs/webinars/sfmc-webinar-cloud-page-apps/","28d"),exact:!0,sidebar:"webinars"},{path:"/docs/zen-of-sfmc/",component:p("/docs/zen-of-sfmc/","24d"),exact:!0,sidebar:"docs"}]},{path:"/sites/",component:p("/sites/","1e0"),routes:[{path:"/sites/category/faq/",component:p("/sites/category/faq/","a76"),exact:!0,sidebar:"faq"},{path:"/sites/category/ideas/",component:p("/sites/category/ideas/","25e"),exact:!0,sidebar:"ideas"},{path:"/sites/faq/how-to-get-sf-certification-vouchers/",component:p("/sites/faq/how-to-get-sf-certification-vouchers/","a25"),exact:!0,sidebar:"faq"},{path:"/sites/faq/how-to-get-sfmc-hands-on-experience/",component:p("/sites/faq/how-to-get-sfmc-hands-on-experience/","55d"),exact:!0,sidebar:"faq"},{path:"/sites/ideas/marketing-cloud-ideas/",component:p("/sites/ideas/marketing-cloud-ideas/","f06"),exact:!0,sidebar:"ideas"},{path:"/sites/ideas/mc-personalization-ideas/",component:p("/sites/ideas/mc-personalization-ideas/","e39"),exact:!0,sidebar:"ideas"},{path:"/sites/licence/",component:p("/sites/licence/","404"),exact:!0},{path:"/sites/my-toolset/",component:p("/sites/my-toolset/","7ae"),exact:!0},{path:"/sites/newsletter/",component:p("/sites/newsletter/","8b7"),exact:!0},{path:"/sites/privacy/",component:p("/sites/privacy/","6e8"),exact:!0}]},{path:"/",component:p("/","f16"),exact:!0},{path:"*",component:p("*")}]},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9717:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),s=n(6136);const l=[n(4313),n(984),n(2251),n(9957),n(6930)];var c=n(997),u=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(1514),g=n(9962),h=n(9524),b=n(107),v=n(9488),y=n(626),w=n(8181),k=n(246),E=n(3905),S=n(3647);function x(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,h.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(x,null),r.createElement(S.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var P=n(8121),L=n(694);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function j(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),j(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const I=O,D="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",q="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${q}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${q}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,r.useLayoutEffect)((()=>{window[F]=!1}),[]),r.createElement(r.Fragment,null,!s.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(z,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:s,direction:l}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var G=n(3256),H=n(1048);function Z(){const e=(0,H.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function V(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(G.Z,null,r.createElement(L.M,null,r.createElement(P.t,null,r.createElement(p,null,r.createElement($,null),r.createElement(C,null),r.createElement(U,null),r.createElement(I,{location:A(t)},e)),r.createElement(Z,null))))}var W=n(6887);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),j(e))},te=Object.freeze(ee);if(s.Z.canUseDOM){window.docusaurus=te;const e=a.hydrate;j(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(V,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["GTM-N46LB5K"],"anonymizeIP":true,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"docs-and-snippets","docs":[{"id":"ampscript/ampscript-style-guide","path":"/docs/ampscript/ampscript-style-guide","sidebar":"docs"},{"id":"config/sfmc-appexchange-solutions","path":"/docs/config/sfmc-appexchange-solutions","sidebar":"docs"},{"id":"config/sfmc-behavioral-triggers","path":"/docs/config/sfmc-behavioral-triggers","sidebar":"docs"},{"id":"config/sfmc-code-resource","path":"/docs/config/sfmc-code-resource","sidebar":"docs"},{"id":"config/sfmc-contact-deletion","path":"/docs/config/sfmc-contact-deletion","sidebar":"docs"},{"id":"config/sfmc-enhanced-send-log","path":"/docs/config/sfmc-enhanced-send-log","sidebar":"docs"},{"id":"config/sfmc-features-on-demand","path":"/docs/config/sfmc-features-on-demand","sidebar":"docs"},{"id":"config/sfmc-mcc-integration-patterns","path":"/docs/config/sfmc-mcc-integration-patterns","sidebar":"docs"},{"id":"config/sfmc-mobile-connect-data-views","path":"/docs/config/sfmc-mobile-connect-data-views","sidebar":"docs"},{"id":"config/sfmc-system-data-views","path":"/docs/config/sfmc-system-data-views","sidebar":"docs"},{"id":"docs-and-snippets","path":"/docs/","sidebar":"docs"},{"id":"interaction-studio/mcp-catalog-architecture","path":"/docs/interaction-studio/mcp-catalog-architecture","sidebar":"docs"},{"id":"interaction-studio/mcp-open-time-email","path":"/docs/interaction-studio/mcp-open-time-email","sidebar":"docs"},{"id":"interaction-studio/mcp-serverside-code-basics","path":"/docs/interaction-studio/mcp-serverside-code-basics","sidebar":"docs"},{"id":"interaction-studio/mcp-serverside-code-properties","path":"/docs/interaction-studio/mcp-serverside-code-properties","sidebar":"docs"},{"id":"interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","path":"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer","sidebar":"snippets"},{"id":"js/js-dom","path":"/docs/js/js-dom","sidebar":"docs"},{"id":"js/js-if-and-switch","path":"/docs/js/js-if-and-switch","sidebar":"docs"},{"id":"js/js-loops","path":"/docs/js/js-loops","sidebar":"docs"},{"id":"js/snippets/engage-with-countdown","path":"/docs/js/snippets/engage-with-countdown","sidebar":"snippets"},{"id":"js/snippets/export-import-document-sfmc-roles","path":"/docs/js/snippets/export-import-document-sfmc-roles","sidebar":"snippets"},{"id":"js/snippets/tailor-with-data","path":"/docs/js/snippets/tailor-with-data","sidebar":"snippets"},{"id":"sql/sfmc-sql-aggregate-functions","path":"/docs/sql/sfmc-sql-aggregate-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-basics","path":"/docs/sql/sfmc-sql-basics","sidebar":"docs"},{"id":"sql/sfmc-sql-case","path":"/docs/sql/sfmc-sql-case","sidebar":"docs"},{"id":"sql/sfmc-sql-conversion-functions","path":"/docs/sql/sfmc-sql-conversion-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-date-functions","path":"/docs/sql/sfmc-sql-date-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-from","path":"/docs/sql/sfmc-sql-from","sidebar":"docs"},{"id":"sql/sfmc-sql-join","path":"/docs/sql/sfmc-sql-join","sidebar":"docs"},{"id":"sql/sfmc-sql-like","path":"/docs/sql/sfmc-sql-like","sidebar":"docs"},{"id":"sql/sfmc-sql-null-functions","path":"/docs/sql/sfmc-sql-null-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-numeric-functions","path":"/docs/sql/sfmc-sql-numeric-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-select","path":"/docs/sql/sfmc-sql-select","sidebar":"docs"},{"id":"sql/sfmc-sql-string-functions","path":"/docs/sql/sfmc-sql-string-functions","sidebar":"docs"},{"id":"sql/sfmc-sql-style-guide","path":"/docs/sql/sfmc-sql-style-guide","sidebar":"docs"},{"id":"sql/sfmc-sql-where","path":"/docs/sql/sfmc-sql-where","sidebar":"docs"},{"id":"sql/snippets/sfmc-sql-debugging-email-sends","path":"/docs/sql/snippets/sfmc-sql-debugging-email-sends","sidebar":"snippets"},{"id":"sql/snippets/sfmc-sql-debugging-value-length","path":"/docs/sql/snippets/sfmc-sql-debugging-value-length","sidebar":"snippets"},{"id":"ssjs/debugging-ssjs","path":"/docs/ssjs/debugging-ssjs","sidebar":"docs"},{"id":"ssjs/snippets/ampscript-in-ssjs","path":"/docs/ssjs/snippets/ampscript-in-ssjs","sidebar":"snippets"},{"id":"ssjs/snippets/sfmc-cloud-page-apps","path":"/docs/ssjs/snippets/sfmc-cloud-page-apps","sidebar":"snippets"},{"id":"ssjs/snippets/ssjs-mobileconnect-phone-change","path":"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change","sidebar":"snippets"},{"id":"ssjs/snippets/ssjs-script-template","path":"/docs/ssjs/snippets/ssjs-script-template","sidebar":"snippets"},{"id":"ssjs/ssjs-if-and-switch","path":"/docs/ssjs/ssjs-if-and-switch","sidebar":"docs"},{"id":"ssjs/ssjs-loops","path":"/docs/ssjs/ssjs-loops","sidebar":"docs"},{"id":"ssjs/ssjs-style-guide","path":"/docs/ssjs/ssjs-style-guide","sidebar":"docs"},{"id":"ssjs/ssjs-vs-ampscript-performance","path":"/docs/ssjs/ssjs-vs-ampscript-performance","sidebar":"docs"},{"id":"webinars/sfmc-webinar-account-architecture","path":"/docs/webinars/sfmc-webinar-account-architecture","sidebar":"webinars"},{"id":"webinars/sfmc-webinar-architecting-web-solutions","path":"/docs/webinars/sfmc-webinar-architecting-web-solutions","sidebar":"webinars"},{"id":"webinars/sfmc-webinar-cloud-page-apps","path":"/docs/webinars/sfmc-webinar-cloud-page-apps","sidebar":"webinars"},{"id":"zen-of-sfmc","path":"/docs/zen-of-sfmc","sidebar":"docs"},{"id":"/category/ssjs","path":"/docs/category/ssjs","sidebar":"docs"},{"id":"/category/javascript","path":"/docs/category/javascript","sidebar":"docs"},{"id":"/category/ampscript","path":"/docs/category/ampscript","sidebar":"docs"},{"id":"/category/sfmc-sql","path":"/docs/category/sfmc-sql","sidebar":"docs"},{"id":"/category/sfmc-config","path":"/docs/category/sfmc-config","sidebar":"docs"},{"id":"/category/mc-personalization","path":"/docs/category/mc-personalization","sidebar":"docs"},{"id":"/category/serverside-code","path":"/docs/category/serverside-code","sidebar":"docs"},{"id":"/category/ssjs-snippets","path":"/docs/category/ssjs-snippets","sidebar":"snippets"},{"id":"/category/js-snippets","path":"/docs/category/js-snippets","sidebar":"snippets"},{"id":"/category/ampscript-snippets","path":"/docs/category/ampscript-snippets","sidebar":"snippets"},{"id":"/category/sfmc-sql-snippets","path":"/docs/category/sfmc-sql-snippets","sidebar":"snippets"},{"id":"/category/mc-personalization-snippets","path":"/docs/category/mc-personalization-snippets","sidebar":"snippets"},{"id":"/category/sfmc-webinars","path":"/docs/category/sfmc-webinars","sidebar":"webinars"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/zen-of-sfmc","label":"zen-of-sfmc"}},"snippets":{"link":{"path":"/docs/category/ssjs-snippets","label":"SSJS Snippets"}},"webinars":{"link":{"path":"/docs/category/sfmc-webinars","label":"SFMC Webinars"}}}}],"breadcrumbs":true},"sites":{"path":"/sites","versions":[{"name":"current","label":"Next","isLast":true,"path":"/sites","mainDocId":"ideas/marketing-cloud-ideas","docs":[{"id":"faq/how-to-get-sf-certification-vouchers","path":"/sites/faq/how-to-get-sf-certification-vouchers","sidebar":"faq"},{"id":"faq/how-to-get-sfmc-hands-on-experience","path":"/sites/faq/how-to-get-sfmc-hands-on-experience","sidebar":"faq"},{"id":"ideas/marketing-cloud-ideas","path":"/sites/ideas/marketing-cloud-ideas","sidebar":"ideas"},{"id":"ideas/mc-personalization-ideas","path":"/sites/ideas/mc-personalization-ideas","sidebar":"ideas"},{"id":"licence","path":"/sites/licence"},{"id":"my-toolset","path":"/sites/my-toolset"},{"id":"newsletter","path":"/sites/newsletter"},{"id":"privacy","path":"/sites/privacy"},{"id":"/category/ideas","path":"/sites/category/ideas","sidebar":"ideas"},{"id":"/category/faq","path":"/sites/category/faq","sidebar":"faq"}],"draftIds":[],"sidebars":{"ideas":{"link":{"path":"/sites/category/ideas","label":"Ideas"}},"faq":{"link":{"path":"/sites/category/faq","label":"FAQ"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"1.2.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.3"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"2.4.3"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.3"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.3"}}}'),c={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(6136),o=n(1514),i=n(3905),s=n(241);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),a=n(7294),o=n(3727),i=n(3905),s=n(9962),l=n(2735),c=n(6136);const u=a.createContext({collectLink:()=>{}});var d=n(9524);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=p||f;const _=(0,l.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const P=(0,a.useRef)(!1),L=n?o.OL:o.rU,R=c.Z.canUseIntersectionObserver,N=(0,a.useRef)(),j=()=>{P.current||null==T||(window.docusaurus.preload(T),P.current=!0)};(0,a.useEffect)((()=>(!R&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&N.current&&N.current.disconnect()})),[N,T,R,_]);const O=T?.startsWith("#")??!1,I=!T||!_||O;return I||h||E.collectLink(T),I?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(L,(0,r.Z)({},v,{onMouseEnter:j,onTouchStart:j,innerRef:e=>{S.current=e,R&&e&&_&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),N.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const f=a.forwardRef(p)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return r.createElement(r.Fragment,null,a(s,o))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),a=n(9962),o=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(694);function o(){return(0,r.useContext)(a._)}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8121);function o(){return(0,r.useContext)(a._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},9871:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>f,WS:()=>m,_r:()=>d,Jo:()=>v,zh:()=>p,yW:()=>h,gB:()=>g});var r=n(6550),a=n(9962),o=n(6875);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function m(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function g(e){return p(e).versions}function h(e){const t=p(e);return s(t)}function b(e){const t=p(e),{pathname:n}=(0,r.TH)();return c(t,n)}function v(e){const t=p(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4313:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},4082:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},241:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Lt});var r=n(7294),a=n(6010),o=n(3256),i=n(9488),s=n(7462),l=n(6550),c=n(7325),u=n(3266);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(3702),b=n(8181);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(107),k=n(5830);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...l}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function x(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,s.Z)({},e,{className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(x,{onClick:n,className:T.announcementBarClose}))}var P=n(735),L=n(2957);var R=n(3768),N=n(3086);const j=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,P.e)(),t=(0,N.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,R.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(j.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(j);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var q=n(9200),F=n(1048);function B(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function z(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function $(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const s=(0,F.Z)(),l=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(U.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!s&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(B,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement(z,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})))}const G=r.memo($),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,q.I)();return a?null:r.createElement(G,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var V=n(6811);function W(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,P.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(Z,{className:"margin-right--md"}),r.createElement(K,null))}var Q=n(3699),X=n(9524),J=n(2735),ee=n(1500),te=n(4082);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:l,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,X.Z)(a),f=(0,X.Z)(t),m=(0,X.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,c&&{width:12,height:12}))};return o?r.createElement(Q.Z,(0,s.Z)({href:u?m:o},d,h)):r.createElement(Q.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(f)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,s.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,s.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,s.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),se=n(9003),le=n(9962);function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement($e,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,s.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),f()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement($e,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const a=t?de:ue;return r.createElement(a,n)}var fe=n(626);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";function he(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var be=n(830),ve=["translations"];function ye(){return ye=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ye.apply(this,arguments)}function we(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(l){s=!0,a=l}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return ke(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ke(e,t)}(e,t)||function(){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 ke(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ee(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Se="Ctrl";var xe=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ee(e,ve),i=a.buttonText,s=void 0===i?"Search":i,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=we((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(Se))}),[]),r.createElement("button",ye({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(be.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Se?r.createElement(he,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),_e=n(1514),Ce=n(5358),Te=n(2327),Ae=n(246);var Pe=n(3935);const Le={button:{buttonText:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,c.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,c.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,c.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,c.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,c.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,c.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,c.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,c.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,c.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,c.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,c.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,c.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,c.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,c.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Re=null;function Ne(e){let{hit:t,children:n}=e;return r.createElement(Q.Z,{to:t.url},n)}function je(e){let{state:t,onClose:n}=e;const a=(0,Ce.M)();return r.createElement(Q.Z,{to:a(t.query),onClick:n},r.createElement(c.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Oe(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,le.Z)(),c=(0,Te.l)(),u=function(){const{locale:e,tags:t}=(0,Ae._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],p=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(u,d):d,f={...o.searchParameters,facetFilters:p},m=(0,l.k6)(),g=(0,r.useRef)(null),h=(0,r.useRef)(null),[b,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(void 0),k=(0,r.useCallback)((()=>Re?Promise.resolve():Promise.all([n.e(1426).then(n.bind(n,1426)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(2153)]).then(n.bind(n,2153))]).then((e=>{let[{DocSearchModal:t}]=e;Re=t}))),[]),E=(0,r.useCallback)((()=>{k().then((()=>{g.current=document.createElement("div"),document.body.insertBefore(g.current,document.body.firstChild),v(!0)}))}),[k,v]),S=(0,r.useCallback)((()=>{v(!1),g.current?.remove()}),[v]),x=(0,r.useCallback)((e=>{k().then((()=>{v(!0),w(e.key)}))}),[k,v,w]),_=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(a,t)?window.location.href=t:m.push(t)}}).current,C=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:c(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>r.createElement(je,(0,s.Z)({},e,{onClose:S}))),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:b,onOpen:E,onClose:S,onInput:x,searchButtonRef:h}),r.createElement(r.Fragment,null,r.createElement(_e.Z,null,r.createElement("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})),r.createElement(xe,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:E,ref:h,translations:Le.button}),b&&Re&&g.current&&(0,Pe.createPortal)(r.createElement(Re,(0,s.Z)({onClose:S,initialScrollY:window.scrollY,initialQuery:y,navigator:_,transformItems:C,hitComponent:Ne,transformSearchClient:A},o.searchPagePath&&{resultsFooterComponent:T},o,{searchParameters:f,placeholder:Le.placeholder,translations:Le.modal})),g.current))}function Ie(){const{siteConfig:e}=(0,le.Z)();return r.createElement(Oe,e.themeConfig.algolia)}const De={searchBox:"searchBox_ZlJk"};function Me(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,De.searchBox)},t)}var qe=n(9871),Fe=n(8259);var Be=n(6409);const ze=e=>e.docs.find((t=>t.id===e.mainDocId));const Ue={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,l.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,s.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Me,{className:n},r.createElement(Ie,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return r.createElement(s,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,qe.Iw)(a),l=(0,Fe.vY)(t,a);return null===l?null:r.createElement(oe,(0,s.Z)({exact:!0},o,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,qe.Iw)(a),l=(0,Fe.oz)(t,a).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,s.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,Fe.lO)(a)[0],l=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,s.Z)({},o,{label:l,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:p}=(0,l.TH)(),f=(0,qe.Iw)(n),m=(0,qe.gB)(n),{savePreferredVersionName:g}=(0,Be.J)(n),h=[...o,...m.map((e=>{const t=f.alternateDocVersions[e.name]??ze(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,Fe.lO)(n)[0],v=t&&h.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ze(b).path;return h.length<=1?r.createElement(oe,(0,s.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(pe,(0,s.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function $e(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ue[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Ge(){const e=(0,P.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement($e,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function He(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ze(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(He,{onClick:()=>t.hide()}),t.content)}function Ve(){const e=(0,P.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(Y,null),primaryMenu:r.createElement(Ge,null),secondaryMenu:r.createElement(Ze,null)}):null}const We={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ke(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ye(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,P.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,L.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-o.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,u.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[We.navbarHideable,!l&&We.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ke,{onClick:i.toggle}),r.createElement(Ve,null))}var Qe=n(3905);const Xe={errorBoundaryError:"errorBoundaryError_a6uf"};function Je(e){return r.createElement("button",(0,s.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function et(e){let{error:t}=e;const n=(0,Qe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Xe.errorBoundaryError},n)}class tt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const nt="right";function rt(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,s.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function at(){const{toggle:e,shown:t}=(0,P.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(rt,null))}const ot={colorModeToggle:"colorModeToggle_DEke"};function it(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(tt,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement($e,e)))))}function st(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function lt(){const e=(0,P.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??nt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(st,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(at,null),r.createElement(W,null),r.createElement(it,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(it,{items:a}),r.createElement(Z,{className:ot.colorModeToggle}),!o&&r.createElement(Me,null,r.createElement(Ie,null)))})}function ct(){return r.createElement(Ye,null,r.createElement(lt,null))}function ut(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...l}=t,c=(0,X.Z)(n),u=(0,X.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(Q.Z,(0,s.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},l),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function dt(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(ut,{item:t}))}function pt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(dt,{key:t,item:e})))))}function ft(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(pt,{key:t,column:e}))))}function mt(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function gt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(ut,{item:t})}function ht(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(gt,{item:e}),t.length!==n+1&&r.createElement(mt,null))))))}function bt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(ft,{columns:t}):r.createElement(ht,{links:t})}var vt=n(7909);const yt={footerLogoLink:"footerLogoLink_BH7S"};function wt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(vt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function kt(e){let{logo:t}=e;return t.href?r.createElement(Q.Z,{href:t.href,className:yt.footerLogoLink,target:t.target},r.createElement(wt,{logo:t})):r.createElement(wt,{logo:t})}function Et(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function St(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function xt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(St,{style:o,links:n&&n.length>0&&r.createElement(bt,{links:n}),logo:a&&r.createElement(kt,{logo:a}),copyright:t&&r.createElement(Et,{copyright:t})})}const _t=r.memo(xt),Ct=(0,R.Qc)([q.S,k.pl,L.OC,Be.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(P.M,null,r.createElement(O,null,t)))}]);function Tt(e){let{children:t}=e;return r.createElement(Ct,null,t)}function At(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Je,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(et,{error:t})))))}const Pt={mainWrapper:"mainWrapper_z2l0"};function Lt(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:c}=e;return(0,b.t)(),r.createElement(Tt,null,r.createElement(i.d,{title:l,description:c}),r.createElement(y,null),r.createElement(A,null),r.createElement(ct,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,Pt.mainWrapper,s)},r.createElement(o.Z,{fallback:e=>r.createElement(At,e)},t)),!n&&r.createElement(_t,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(3699),i=n(9524),s=n(9962),l=n(107),c=n(7909);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:c}}=(0,l.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},f,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:p},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(1514);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},7909:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(1048),s=n(9200);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(l.themedImage,l[`themedImage--${e}`],u)},p)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>h});var r=n(7462),a=n(7294),o=n(6136),i=n(8986);const s="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??s}`,height:`${t}px`}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const c=(0,a.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:l?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:s},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[s,l]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&l(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:s})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),a=n(1048),o=n(2560),i=n(3768),s=n(107);const l=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(6136),o=n(3768),i=n(2560),s=n(107);const l=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{u.set(p(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(l.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(l);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h,Oh:()=>y});var r=n(7294),a=n(9871),o=n(6875),i=n(107),s=n(8259),l=n(3768),c=n(2560);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function h(e){let{children:t}=e;return s.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function y(){const e=(0,a._r)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(7294),a=n(3768);const o=Symbol("EmptyContext"),i=r.createContext(o);function s(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function l(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},8801:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var r=n(7294),a=n(3768);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>p});var r=n(7294),a=n(3086),o=n(3488),i=n(5238),s=n(107),l=n(3768);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>i});var r=n(7294),a=n(3768);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},8181:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},5358:(e,t,n)=>{"use strict";n.d(t,{K:()=>s,M:()=>l});var r=n(7294),a=n(9962),o=n(5238);const i="q";function s(){return(0,o.Nc)(i)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(6136);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const l=!1;function c(){const[e,t]=(0,r.useState)((()=>l?"ssr":s()));return(0,r.useEffect)((()=>{function e(){t(s())}const n=l?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},8259:(e,t,n)=>{"use strict";n.d(t,{MN:()=>_,Wl:()=>m,_F:()=>v,cE:()=>p,hI:()=>x,jA:()=>g,lO:()=>k,oz:()=>E,s1:()=>w,vY:()=>S,xz:()=>f});var r=n(7294),a=n(6550),o=n(8790),i=n(9871),s=n(6409),l=n(8801),c=n(4432),u=n(3609),d=n(9003);const p=!!i._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function x(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,s=i.find((e=>(0,a.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?n.docsSidebars[l]:void 0;return{docElement:(0,o.H)(i),sidebarName:l,sidebarItems:c}}function _(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},2733:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(9962);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},5238:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>c,Rb:()=>s,_X:()=>l});var r=n(7294),a=n(6550),o=n(1688),i=n(3768);function s(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function l(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function c(e){const t=l(e)??"",n=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(r?.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},3609:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},9488:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),a=n(6010),o=n(1514),i=n(9656);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(9524),c=n(2733);function u(e){let{title:t,description:n,keywords:a,image:i,children:s}=e;const u=(0,c.p)(t),{withBaseUrl:d}=(0,l.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(o.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,a.Z)(o,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>l,i6:()=>s,zX:()=>o});var r=n(7294);const a=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},1500:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),a=n(997),o=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>l,RF:()=>d,o5:()=>p});var r=n(7294),a=n(6136),o=n(1048),i=n(3768);const s=r.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(s.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(9871),a=n(9962),o=n(6409);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,o.Oh)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=l[e],o=t[e].versions.find((e=>e.isLast));return s(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},2560:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=s(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),a=n(6550),o=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(3768);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){return(0,r.Z)().siteConfig.themeConfig}},7263:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},2327:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(7294),a=n(1500),o=n(9524),i=n(7263);function s(){const{withBaseUrl:e}=(0,o.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.F)(t,o.href))return r;const i=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>A,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&a(e),l=t&&a(t),c=s||l;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,E=void 0===k?h:k,S=i.keyLength,x=void 0===S?6:S,_=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return _&&(o=u(o,_)),f(o,r,n)}function T(){return Math.random().toString(36).substr(2,x)}var A=m();function P(e){(0,r.Z)(z,e),z.length=n.length,A.notifyListeners(z.location,z.action)}function L(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||j(C(e.state))}function R(){j(C(y()))}var N=!1;function j(e){if(N)N=!1,P();else{A.confirmTransitionTo(e,"POP",E,(function(t){t?P({action:"POP",location:e}):function(e){var t=z.location,n=I.indexOf(t.key);-1===n&&(n=0);var r=I.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(N=!0,M(a))}(e)}))}}var O=C(y()),I=[O.key];function D(e){return _+p(e)}function M(e){n.go(e)}var q=0;function F(e){1===(q+=e)&&1===e?(window.addEventListener(b,L),o&&window.addEventListener(v,R)):0===q&&(window.removeEventListener(b,L),o&&window.removeEventListener(v,R))}var B=!1;var z={length:n.length,action:"POP",location:O,createHref:D,push:function(e,t){var r="PUSH",o=f(e,t,T(),z.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=D(o),i=o.key,s=o.state;if(a)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=I.indexOf(z.location.key),c=I.slice(0,l+1);c.push(o.key),I=c,P({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,T(),z.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=D(o),i=o.key,s=o.state;if(a)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=I.indexOf(z.location.key);-1!==l&&(I[l]=o.key),P({action:r,location:o})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=A.appendListener(e);return F(1),function(){F(-1),t()}}};return z}var k="hashchange",E={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",v=E[c],y=v.encodePath,w=v.decodePath;function C(){var e=w(x());return b&&(e=u(e,b)),f(e)}var T=m();function A(e){(0,r.Z)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var P=!1,L=null;function R(){var e,t,n=x(),r=y(n);if(n!==r)_(r);else{var a=C(),i=B.location;if(!P&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(L===p(a))return;L=null,function(e){if(P)P=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=B.location,n=I.lastIndexOf(p(t));-1===n&&(n=0);var r=I.lastIndexOf(p(e));-1===r&&(r=0);var a=n-r;a&&(P=!0,D(a))}(e)}))}}(a)}}var N=x(),j=y(N);N!==j&&_(j);var O=C(),I=[p(O)];function D(e){t.go(e)}var M=0;function q(e){1===(M+=e)&&1===e?window.addEventListener(k,R):0===M&&window.removeEventListener(k,R)}var F=!1;var B={length:t.length,action:"POP",location:O,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=y(b+t);if(x()!==a){L=t,function(e){window.location.hash=e}(a);var o=I.lastIndexOf(p(B.location)),i=I.slice(0,o+1);i.push(t),I=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=y(b+t);x()!==a&&(L=t,_(a));var o=I.indexOf(p(B.location));-1!==o&&(I[o]=t),A({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return F||(q(1),F=!0),function(){return F&&(F=!1,q(-1)),t()}},listen:function(e){var t=T.appendListener(e);return q(1),function(){q(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,c)}var h=T(s,0,o.length-1),b=o.map((function(e){return f(e,void 0,"string"==typeof e?g():e.key||g())})),v=p;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:v,push:function(e,t){var r="PUSH",a=f(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),h=0;h<i.length;++h){var b=i[h];if(!(o[b]||r&&r[b]||g&&g[b]||s&&s[b])){var v=p(n,b);try{c(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},984:(e,t,n)=>{"use strict";n.r(t)},6930:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l<arguments.length;l++){for(var c in o=Object(arguments[l]))n.call(o,c)&&(s[c]=o[c]);if(t){i=t(o);for(var u=0;u<i.length;u++)r.call(o,i[u])&&(s[i[u]]=o[i[u]])}}return s}},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=g&&null!=m&&m!==g,E="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||u,_=b||v;r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(x)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",s=t||{},l=(a||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');o+=u.prefix+d}}else o+=u}return o}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),g=i.slice(-m.length)===m;return a||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+m+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(f(e[a],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(o(e,n),t,n)}(e,t,n)}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var s in o)if(o.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=o[s])}var c=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],a||s);var l=t[s],c=r.util.type(l);"Object"!==c||o[i(l)]?"Array"!==c||o[i(l)]||(o[i(l)]=!0,e(l,n,s,o)):(o[i(l)]=!0,e(l,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",o),o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new s;return l(a,a.head,e),i(e,a,t,a.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var g=f[m],h=g.inside,b=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var k=g.pattern||g,E=s.next,S=u;E!==t.tail&&!(d&&S>=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,C=1;if(v){if(!(_=o(k,S,e,b))||_.index>=e.length)break;var T=_.index,A=_.index+_[0].length,P=S;for(P+=E.value.length;T>=P;)P+=(E=E.next).value.length;if(S=P-=E.value.length,E.value instanceof a)continue;for(var L=E;L!==t.tail&&(P<A||"string"==typeof L.value);L=L.next)C++,P+=L.value.length;C--,x=e.slice(S,P),_.index-=S}else if(!(_=o(k,0,x,b)))continue;T=_.index;var R=_[0],N=x.slice(0,T),j=x.slice(T+R.length),O=S+x.length;d&&O>d.reach&&(d.reach=O);var I=E.prev;if(N&&(I=l(t,I,N),S+=N.length),c(t,I,C),E=l(t,I,new a(p,h?r.tokenize(R,h):R,y,R)),j&&l(t,E,j),C>1){var D={cause:p+","+m,reach:O};i(e,t,n,E.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var s="";for(var l in o.attributes)s+=" "+l+'="'+(o.attributes[l]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+s+">"+o.content+"</"+o.tag+">"},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.shell=e.languages.bash}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a=t[n];if("code"===a.type){var o=a.content[1],i=a.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var s=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),l="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,l]:i.alias.push(l):i.alias=[l]}}else e(a.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r],c=/language-(.+)/.exec(o);if(c){n=c[1];break}}var u,d=e.languages[n];if(d)t.content=e.highlight((u=t.content,u.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n);var r=s[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var o=p(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),a.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&a.indexOf(c.content)>=0&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return!1}return!0}function p(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))a++;else if(r.test(s)&&0===--a)return o}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,l(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=l(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(i++,r)););return u[n]=a,n})).join(""),n,r),p=Object.keys(u);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[i],o="string"==typeof r?r:r.content,s=o.indexOf(a);if(-1!==s){++i;var l=o.substring(0,s),d=c(u[a]),f=o.substring(s+a.length),m=[];if(l&&m.push(l),m.push(d),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r<a;r++){var o=n[r];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var l=p(s),c=s.alias,d=Array.isArray(c)?c[0]:c,f=e.languages[d];if(!f)continue;i[1]=u(l,f,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(a),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[a]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(a),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;if("string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var l=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(l+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=i(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(a>=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function a(r,o){if(!(r in n)){o.push(r);var i=o.indexOf(r);if(i<o.length-1)throw new Error("Circular dependency: "+o.slice(i).join(" -> "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in a(t,o),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;a(m);){for(var g in p={},m){var h=l[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in f(b))if(v in u){p[b]=!0;break}for(var y in m=p)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return s[e]=a}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var s=new Set,l={};function c(e,t){u(e,t),u(e+"Capture",t)}function u(e,t){for(l[e]=t,e=0;e<t.length;e++)s.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f=Object.prototype.hasOwnProperty,m={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=b.hasOwnProperty(t)?b[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!f.call(g,e)||!f.call(m,e)&&(p.test(e)?g[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var k=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,E=60103,S=60106,x=60107,_=60108,C=60114,T=60109,A=60110,P=60112,L=60113,R=60120,N=60115,j=60116,O=60121,I=60128,D=60129,M=60130,q=60131;if("function"==typeof Symbol&&Symbol.for){var F=Symbol.for;E=F("react.element"),S=F("react.portal"),x=F("react.fragment"),_=F("react.strict_mode"),C=F("react.profiler"),T=F("react.provider"),A=F("react.context"),P=F("react.forward_ref"),L=F("react.suspense"),R=F("react.suspense_list"),N=F("react.memo"),j=F("react.lazy"),O=F("react.block"),F("react.scope"),I=F("react.opaque.id"),D=F("react.debug_trace_mode"),M=F("react.offscreen"),q=F("react.legacy_hidden")}var B,z="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=z&&e[z]||e["@@iterator"])?e:null}function $(e){if(void 0===B)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);B=t&&t[1]||""}return"\n"+B+e}var G=!1;function H(e,t){if(!e||G)return"";G=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(l){var r=l}Reflect.construct(e,[],t)}else{try{t.call()}catch(l){r=l}e.call(t.prototype)}else{try{throw Error()}catch(l){r=l}e()}}catch(l){if(l&&r&&"string"==typeof l.stack){for(var a=l.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(1!==i||1!==s)do{if(i--,0>--s||a[i]!==o[s])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=s);break}}}finally{G=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?$(e):""}function Z(e){switch(e.tag){case 5:return $(e.type);case 16:return $("Lazy");case 13:return $("Suspense");case 19:return $("SuspenseList");case 0:case 2:case 15:return e=H(e.type,!1);case 11:return e=H(e.type.render,!1);case 22:return e=H(e.type._render,!1);case 1:return e=H(e.type,!0);default:return""}}function V(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case S:return"Portal";case C:return"Profiler";case _:return"StrictMode";case L:return"Suspense";case R:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case A:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case P:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return V(e.type);case O:return V(e._render);case j:t=e._payload,e=e._init;try{return V(e(t))}catch(n){}}return null}function W(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function K(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=K(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=K(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=W(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ae(e,t.type,n):t.hasOwnProperty("defaultValue")&&ae(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ae(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=a({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function se(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function ce(e,t){var n=W(t.value),r=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ue(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function fe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,he=(ge=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function ke(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ve).forEach((function(e){ye.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var Ee=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(Ee[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function xe(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ce=null,Te=null,Ae=null;function Pe(e){if(e=na(e)){if("function"!=typeof Ce)throw Error(i(280));var t=e.stateNode;t&&(t=aa(t),Ce(e.stateNode,e.type,t))}}function Le(e){Te?Ae?Ae.push(e):Ae=[e]:Te=e}function Re(){if(Te){var e=Te,t=Ae;if(Ae=Te=null,Pe(e),t)for(e=0;e<t.length;e++)Pe(t[e])}}function Ne(e,t){return e(t)}function je(e,t,n,r,a){return e(t,n,r,a)}function Oe(){}var Ie=Ne,De=!1,Me=!1;function qe(){null===Te&&null===Ae||(Oe(),Re())}function Fe(e,t){var n=e.stateNode;if(null===n)return null;var r=aa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var Be=!1;if(d)try{var ze={};Object.defineProperty(ze,"passive",{get:function(){Be=!0}}),window.addEventListener("test",ze,ze),window.removeEventListener("test",ze,ze)}catch(ge){Be=!1}function Ue(e,t,n,r,a,o,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var $e=!1,Ge=null,He=!1,Ze=null,Ve={onError:function(e){$e=!0,Ge=e}};function We(e,t,n,r,a,o,i,s,l){$e=!1,Ge=null,Ue.apply(Ve,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Qe(e){if(Ke(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return Qe(a),e;if(o===r)return Qe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var s=!1,l=a.child;l;){if(l===n){s=!0,n=a,r=o;break}if(l===r){s=!0,r=a,n=o;break}l=l.sibling}if(!s){for(l=o.child;l;){if(l===n){s=!0,n=o,r=a;break}if(l===r){s=!0,r=o,n=a;break}l=l.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,at=!1,ot=[],it=null,st=null,lt=null,ct=new Map,ut=new Map,dt=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ft(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":lt=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ut.delete(t.pointerId)}}function gt(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=ft(t,n,r,a,o),null!==t&&(null!==(t=na(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function ht(e){var t=ta(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=na(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){bt(e)&&n.delete(t)}function yt(){for(at=!1;0<ot.length;){var e=ot[0];if(null!==e.blockedOn){null!==(e=na(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&ot.shift()}null!==it&&bt(it)&&(it=null),null!==st&&bt(st)&&(st=null),null!==lt&&bt(lt)&&(lt=null),ct.forEach(vt),ut.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,at||(at=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,yt)))}function kt(e){function t(t){return wt(t,e)}if(0<ot.length){wt(ot[0],e);for(var n=1;n<ot.length;n++){var r=ot[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==st&&wt(st,e),null!==lt&&wt(lt,e),ct.forEach(t),ut.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)ht(n),null===n.blockedOn&&dt.shift()}function Et(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var St={animationend:Et("Animation","AnimationEnd"),animationiteration:Et("Animation","AnimationIteration"),animationstart:Et("Animation","AnimationStart"),transitionend:Et("Transition","TransitionEnd")},xt={},_t={};function Ct(e){if(xt[e])return xt[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in _t)return xt[e]=n[t];return e}d&&(_t=document.createElement("div").style,"AnimationEvent"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),"TransitionEvent"in window||delete St.transitionend.transition);var Tt=Ct("animationend"),At=Ct("animationiteration"),Pt=Ct("animationstart"),Lt=Ct("transitionend"),Rt=new Map,Nt=new Map,jt=["abort","abort",Tt,"animationEnd",At,"animationIteration",Pt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Lt,"transitionEnd","waiting","waiting"];function Ot(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],a=e[n+1];a="on"+(a[0].toUpperCase()+a.slice(1)),Nt.set(r,t),Rt.set(r,a),c(a,[r])}}(0,o.unstable_now)();var It=8;function Dt(e){if(0!=(1&e))return It=15,1;if(0!=(2&e))return It=14,2;if(0!=(4&e))return It=13,4;var t=24&e;return 0!==t?(It=12,t):0!=(32&e)?(It=11,32):0!==(t=192&e)?(It=10,t):0!=(256&e)?(It=9,256):0!==(t=3584&e)?(It=8,t):0!=(4096&e)?(It=7,4096):0!==(t=4186112&e)?(It=6,t):0!==(t=62914560&e)?(It=5,t):67108864&e?(It=4,67108864):0!=(134217728&e)?(It=3,134217728):0!==(t=805306368&e)?(It=2,t):0!=(1073741824&e)?(It=1,1073741824):(It=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return It=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,s=e.pingedLanes;if(0!==o)r=o,a=It=15;else if(0!==(o=134217727&n)){var l=o&~i;0!==l?(r=Dt(l),a=It):0!==(s&=o)&&(r=Dt(s),a=It)}else 0!==(o=n&~i)?(r=Dt(o),a=It):0!==s&&(r=Dt(s),a=It);if(0===r)return 0;if(r=n&((0>(r=31-$t(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),a<=It)return t;It=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-$t(t)),r|=e[n],t&=~a;return r}function qt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Ft(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=Bt(24&~t))?Ft(10,t):e;case 10:return 0===(e=Bt(192&~t))?Ft(8,t):e;case 8:return 0===(e=Bt(3584&~t))&&(0===(e=Bt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=Bt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function Bt(e){return e&-e}function zt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-$t(t)]=n}var $t=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Gt(e)/Ht|0)|0},Gt=Math.log,Ht=Math.LN2;var Zt=o.unstable_UserBlockingPriority,Vt=o.unstable_runWithPriority,Wt=!0;function Kt(e,t,n,r){De||Oe();var a=Qt,o=De;De=!0;try{je(a,e,t,n,r)}finally{(De=o)||qe()}}function Yt(e,t,n,r){Vt(Zt,Qt.bind(null,e,t,n,r))}function Qt(e,t,n,r){var a;if(Wt)if((a=0==(4&t))&&0<ot.length&&-1<pt.indexOf(e))e=ft(null,e,t,n,r),ot.push(e);else{var o=Xt(e,t,n,r);if(null===o)a&&mt(e,r);else{if(a){if(-1<pt.indexOf(e))return e=ft(o,e,t,n,r),void ot.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return it=gt(it,e,t,n,r,a),!0;case"dragenter":return st=gt(st,e,t,n,r,a),!0;case"mouseover":return lt=gt(lt,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ct.set(o,gt(ct.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,ut.set(o,gt(ut.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;mt(e,r)}Or(e,t,r,null,n)}}}function Xt(e,t,n,r){var a=_e(r);if(null!==(a=ta(a))){var o=Ke(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Ye(o)))return a;a=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;a=null}else o!==a&&(a=null)}}return Or(e,t,r,a,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,a="value"in Jt?Jt.value:Jt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return tn=a.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function on(){return!1}function sn(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?an:on,this.isPropagationStopped=on,this}return a(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var ln,cn,un,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(dn),fn=a({},dn,{view:0,detail:0}),mn=sn(fn),gn=a({},fn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Tn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==un&&(un&&"mousemove"===e.type?(ln=e.screenX-un.screenX,cn=e.screenY-un.screenY):cn=ln=0,un=e),ln)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),hn=sn(gn),bn=sn(a({},gn,{dataTransfer:0})),vn=sn(a({},fn,{relatedTarget:0})),yn=sn(a({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=a({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),kn=sn(wn),En=sn(a({},dn,{data:0})),Sn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},_n={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Cn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=_n[e])&&!!t[e]}function Tn(){return Cn}var An=a({},fn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Tn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Pn=sn(An),Ln=sn(a({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Rn=sn(a({},fn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Tn})),Nn=sn(a({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),jn=a({},gn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),On=sn(jn),In=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var qn=d&&"TextEvent"in window&&!Mn,Fn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),Bn=String.fromCharCode(32),zn=!1;function Un(e,t){switch(e){case"keyup":return-1!==In.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Gn=!1;var Hn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Vn(e,t,n,r){Le(r),0<(t=Dr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Wn=null,Kn=null;function Yn(e){Ar(e,0)}function Qn(e){if(Q(ra(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){Wn&&(Wn.detachEvent("onpropertychange",ar),Kn=Wn=null)}function ar(e){if("value"===e.propertyName&&Qn(Kn)){var t=[];if(Vn(t,Kn,e,_e(e)),e=Yn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,qe()}}}}function or(e,t,n){"focusin"===e?(rr(),Kn=n,(Wn=t).attachEvent("onpropertychange",ar)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Qn(Kn)}function sr(e,t){if("click"===e)return Qn(t)}function lr(e,t){if("input"===e||"change"===e)return Qn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},ur=Object.prototype.hasOwnProperty;function dr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!ur.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function pr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=pr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function gr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,vr=null,yr=null,wr=null,kr=!1;function Er(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;kr||null==vr||vr!==X(r)||("selectionStart"in(r=vr)&&hr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(yr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}Ot("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Ot("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Ot(jt,2);for(var Sr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),xr=0;xr<Sr.length;xr++)Nt.set(Sr[xr],0);u("onMouseEnter",["mouseout","mouseover"]),u("onMouseLeave",["mouseout","mouseover"]),u("onPointerEnter",["pointerout","pointerover"]),u("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var _r="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Cr=new Set("cancel close invalid load scroll toggle".split(" ").concat(_r));function Tr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,s,l,c){if(We.apply(this,arguments),$e){if(!$e)throw Error(i(198));var u=Ge;$e=!1,Ge=null,He||(He=!0,Ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Ar(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;Tr(a,s,c),o=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;Tr(a,s,c),o=l}}}if(He)throw e=Ze,He=!1,Ze=null,e}function Pr(e,t){var n=oa(t),r=e+"__bubble";n.has(r)||(jr(t,e,2,!1),n.add(r))}var Lr="_reactListening"+Math.random().toString(36).slice(2);function Rr(e){e[Lr]||(e[Lr]=!0,s.forEach((function(t){Cr.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==r&&!t&&Cr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=oa(o),s=e+"__"+(t?"capture":"bubble");i.has(s)||(t&&(a|=4),jr(o,e,a,t),i.add(s))}function jr(e,t,n,r){var a=Nt.get(t);switch(void 0===a?2:a){case 0:a=Kt;break;case 1:a=Yt;break;default:a=Qt}n=a.bind(null,t,n,e),a=void 0,!Be||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Or(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===a||8===s.nodeType&&s.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===a||8===l.nodeType&&l.parentNode===a))return;i=i.return}for(;null!==s;){if(null===(i=ta(s)))return;if(5===(l=i.tag)||6===l){r=o=i;continue e}s=s.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Ie(e,t,n)}finally{Me=!1,qe()}}((function(){var r=o,a=_e(n),i=[];e:{var s=Rt.get(e);if(void 0!==s){var l=pn,c=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":l=Pn;break;case"focusin":c="focus",l=vn;break;case"focusout":c="blur",l=vn;break;case"beforeblur":case"afterblur":l=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Rn;break;case Tt:case At:case Pt:l=yn;break;case Lt:l=Nn;break;case"scroll":l=mn;break;case"wheel":l=On;break;case"copy":case"cut":case"paste":l=kn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Ln}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,m=r;null!==m;){var g=(f=m).stateNode;if(5===f.tag&&null!==g&&(f=g,null!==p&&(null!=(g=Fe(m,p))&&u.push(Ir(m,g,f)))),d)break;m=m.return}0<u.length&&(s=new l(s,c,null,n,a),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(c=n.relatedTarget||n.fromElement)||!ta(c)&&!c[Jr])&&(l||s)&&(s=a.window===a?a:(s=a.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?ta(c):null)&&(c!==(d=Ke(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=hn,g="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Ln,g="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?s:ra(l),f=null==c?s:ra(c),(s=new u(g,m+"leave",l,n,a)).target=d,s.relatedTarget=f,g=null,ta(a)===r&&((u=new u(p,m+"enter",c,n,a)).target=f,u.relatedTarget=d,g=u),d=g,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Mr(f))m++;for(f=0,g=p;g;g=Mr(g))f++;for(;0<m-f;)u=Mr(u),m--;for(;0<f-m;)p=Mr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Mr(u),p=Mr(p)}u=null}else u=null;null!==l&&qr(i,s,l,u,!1),null!==c&&null!==d&&qr(i,d,c,u,!0)}if("select"===(l=(s=r?ra(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var h=Xn;else if(Zn(s))if(Jn)h=lr;else{h=ir;var b=or}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(h=sr);switch(h&&(h=h(e,r))?Vn(i,h,n,a):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ae(s,"number",s.value)),b=r?ra(r):window,e){case"focusin":(Zn(b)||"true"===b.contentEditable)&&(vr=b,yr=r,wr=null);break;case"focusout":wr=yr=vr=null;break;case"mousedown":kr=!0;break;case"contextmenu":case"mouseup":case"dragend":kr=!1,Er(i,n,a);break;case"selectionchange":if(br)break;case"keydown":case"keyup":Er(i,n,a)}var v;if(Dn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Gn?Un(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(Fn&&"ko"!==n.locale&&(Gn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Gn&&(v=nn()):(en="value"in(Jt=a)?Jt.value:Jt.textContent,Gn=!0)),0<(b=Dr(r,y)).length&&(y=new En(y,e,null,n,a),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=$n(n))&&(y.data=v))),(v=qn?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(zn=!0,Bn);case"textInput":return(e=t.data)===Bn&&zn?null:e;default:return null}}(e,n):function(e,t){if(Gn)return"compositionend"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Jt=null,Gn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Fn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(a=new En("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Ar(i,t)}))}function Ir(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=Fe(e,n))&&r.unshift(Ir(e,o,a)),null!=(o=Fe(e,t))&&r.push(Ir(e,o,a))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function qr(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,a?null!=(l=Fe(n,o))&&i.unshift(Ir(n,l,s)):a||null!=(l=Fe(n,o))&&i.push(Ir(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Fr(){}var Br=null,zr=null;function Ur(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function $r(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Gr="function"==typeof setTimeout?setTimeout:void 0,Hr="function"==typeof clearTimeout?clearTimeout:void 0;function Zr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Vr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Wr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Kr=0;var Yr=Math.random().toString(36).slice(2),Qr="__reactFiber$"+Yr,Xr="__reactProps$"+Yr,Jr="__reactContainer$"+Yr,ea="__reactEvents$"+Yr;function ta(e){var t=e[Qr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Qr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Wr(e);null!==e;){if(n=e[Qr])return n;e=Wr(e)}return t}n=(e=n).parentNode}return null}function na(e){return!(e=e[Qr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ra(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function aa(e){return e[Xr]||null}function oa(e){var t=e[ea];return void 0===t&&(t=e[ea]=new Set),t}var ia=[],sa=-1;function la(e){return{current:e}}function ca(e){0>sa||(e.current=ia[sa],ia[sa]=null,sa--)}function ua(e,t){sa++,ia[sa]=e.current,e.current=t}var da={},pa=la(da),fa=la(!1),ma=da;function ga(e,t){var n=e.type.contextTypes;if(!n)return da;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ha(e){return null!=(e=e.childContextTypes)}function ba(){ca(fa),ca(pa)}function va(e,t,n){if(pa.current!==da)throw Error(i(168));ua(pa,t),ua(fa,n)}function ya(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(i(108,V(t)||"Unknown",o));return a({},n,r)}function wa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||da,ma=pa.current,ua(pa,e),ua(fa,fa.current),!0}function ka(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=ya(e,t,ma),r.__reactInternalMemoizedMergedChildContext=e,ca(fa),ca(pa),ua(pa,e)):ca(fa),ua(fa,n)}var Ea=null,Sa=null,xa=o.unstable_runWithPriority,_a=o.unstable_scheduleCallback,Ca=o.unstable_cancelCallback,Ta=o.unstable_shouldYield,Aa=o.unstable_requestPaint,Pa=o.unstable_now,La=o.unstable_getCurrentPriorityLevel,Ra=o.unstable_ImmediatePriority,Na=o.unstable_UserBlockingPriority,ja=o.unstable_NormalPriority,Oa=o.unstable_LowPriority,Ia=o.unstable_IdlePriority,Da={},Ma=void 0!==Aa?Aa:function(){},qa=null,Fa=null,Ba=!1,za=Pa(),Ua=1e4>za?Pa:function(){return Pa()-za};function $a(){switch(La()){case Ra:return 99;case Na:return 98;case ja:return 97;case Oa:return 96;case Ia:return 95;default:throw Error(i(332))}}function Ga(e){switch(e){case 99:return Ra;case 98:return Na;case 97:return ja;case 96:return Oa;case 95:return Ia;default:throw Error(i(332))}}function Ha(e,t){return e=Ga(e),xa(e,t)}function Za(e,t,n){return e=Ga(e),_a(e,t,n)}function Va(){if(null!==Fa){var e=Fa;Fa=null,Ca(e)}Wa()}function Wa(){if(!Ba&&null!==qa){Ba=!0;var e=0;try{var t=qa;Ha(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),qa=null}catch(n){throw null!==qa&&(qa=qa.slice(e+1)),_a(Ra,Va),n}finally{Ba=!1}}}var Ka=k.ReactCurrentBatchConfig;function Ya(e,t){if(e&&e.defaultProps){for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Qa=la(null),Xa=null,Ja=null,eo=null;function to(){eo=Ja=Xa=null}function no(e){var t=Qa.current;ca(Qa),e.type._context._currentValue=t}function ro(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ao(e,t){Xa=e,eo=Ja=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function oo(e,t){if(eo!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(eo=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ja){if(null===Xa)throw Error(i(308));Ja=t,Xa.dependencies={lanes:0,firstContext:t,responders:null}}else Ja=Ja.next=t;return e._currentValue}var io=!1;function so(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function lo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function co(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function uo(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function po(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fo(e,t,n,r){var o=e.updateQueue;io=!1;var i=o.firstBaseUpdate,s=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var c=l,u=c.next;c.next=null,null===s?i=u:s.next=u,s=c;var d=e.alternate;if(null!==d){var p=(d=d.updateQueue).lastBaseUpdate;p!==s&&(null===p?d.firstBaseUpdate=u:p.next=u,d.lastBaseUpdate=c)}}if(null!==i){for(p=o.baseState,s=0,d=u=c=null;;){l=i.lane;var f=i.eventTime;if((r&l)===l){null!==d&&(d=d.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(l=t,f=n,g.tag){case 1:if("function"==typeof(m=g.payload)){p=m.call(f,p,l);break e}p=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(l="function"==typeof(m=g.payload)?m.call(f,p,l):m))break e;p=a({},p,l);break e;case 2:io=!0}}null!==i.callback&&(e.flags|=32,null===(l=o.effects)?o.effects=[i]:l.push(i))}else f={eventTime:f,lane:l,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(u=d=f,c=p):d=d.next=f,s|=l;if(null===(i=i.next)){if(null===(l=o.shared.pending))break;i=l.next,l.next=null,o.lastBaseUpdate=l,o.shared.pending=null}}null===d&&(c=p),o.baseState=c,o.firstBaseUpdate=u,o.lastBaseUpdate=d,zs|=s,e.lanes=s,e.memoizedState=p}}function mo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(i(191,a));a.call(r)}}}var go=(new r.Component).refs;function ho(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:a({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var bo={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=pl(),a=fl(e),o=co(r,a);o.payload=t,null!=n&&(o.callback=n),uo(e,o),ml(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=pl(),a=fl(e),o=co(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),uo(e,o),ml(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=pl(),r=fl(e),a=co(n,r);a.tag=2,null!=t&&(a.callback=t),uo(e,a),ml(e,r,n)}};function vo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(a,o))}function yo(e,t,n){var r=!1,a=da,o=t.contextType;return"object"==typeof o&&null!==o?o=oo(o):(a=ha(t)?ma:pa.current,o=(r=null!=(r=t.contextTypes))?ga(e,a):da),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=bo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function wo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&bo.enqueueReplaceState(t,t.state,null)}function ko(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=go,so(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=oo(o):(o=ha(t)?ma:pa.current,a.context=ga(e,o)),fo(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(ho(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&bo.enqueueReplaceState(a,a.state,null),fo(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var Eo=Array.isArray;function So(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=r.refs;t===go&&(t=r.refs={}),null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function xo(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function _o(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Zl(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function s(t){return e&&null===t.alternate&&(t.flags=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Yl(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=So(e,t,n),r.return=e,r):((r=Vl(n.type,n.key,n.props,null,e.mode,r)).ref=So(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Ql(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=Wl(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Yl(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=Vl(t.type,t.key,t.props,null,e.mode,n)).ref=So(e,null,t),n.return=e,n;case S:return(t=Ql(t,e.mode,n)).return=e,t}if(Eo(t)||U(t))return(t=Wl(t,e.mode,n,null)).return=e,t;xo(e,t)}return null}function f(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case E:return n.key===a?n.type===x?d(e,t,n.props.children,r,a):c(e,t,n,r):null;case S:return n.key===a?u(e,t,n,r):null}if(Eo(n)||U(n))return null!==a?null:d(e,t,n,r,null);xo(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case E:return e=e.get(null===r.key?n:r.key)||null,r.type===x?d(t,e,r.props.children,a,r.key):c(t,e,r,a);case S:return u(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(Eo(r)||U(r))return d(t,e=e.get(n)||null,r,a,null);xo(t,r)}return null}function g(a,i,s,l){for(var c=null,u=null,d=i,g=i=0,h=null;null!==d&&g<s.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=f(a,d,s[g],l);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),i=o(b,i,g),null===u?c=b:u.sibling=b,u=b,d=h}if(g===s.length)return n(a,d),c;if(null===d){for(;g<s.length;g++)null!==(d=p(a,s[g],l))&&(i=o(d,i,g),null===u?c=d:u.sibling=d,u=d);return c}for(d=r(a,d);g<s.length;g++)null!==(h=m(d,a,g,s[g],l))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),i=o(h,i,g),null===u?c=h:u.sibling=h,u=h);return e&&d.forEach((function(e){return t(a,e)})),c}function h(a,s,l,c){var u=U(l);if("function"!=typeof u)throw Error(i(150));if(null==(l=u.call(l)))throw Error(i(151));for(var d=u=null,g=s,h=s=0,b=null,v=l.next();null!==g&&!v.done;h++,v=l.next()){g.index>h?(b=g,g=null):b=g.sibling;var y=f(a,g,v.value,c);if(null===y){null===g&&(g=b);break}e&&g&&null===y.alternate&&t(a,g),s=o(y,s,h),null===d?u=y:d.sibling=y,d=y,g=b}if(v.done)return n(a,g),u;if(null===g){for(;!v.done;h++,v=l.next())null!==(v=p(a,v.value,c))&&(s=o(v,s,h),null===d?u=v:d.sibling=v,d=v);return u}for(g=r(a,g);!v.done;h++,v=l.next())null!==(v=m(g,a,h,v.value,c))&&(e&&null!==v.alternate&&g.delete(null===v.key?h:v.key),s=o(v,s,h),null===d?u=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),u}return function(e,r,o,l){var c="object"==typeof o&&null!==o&&o.type===x&&null===o.key;c&&(o=o.props.children);var u="object"==typeof o&&null!==o;if(u)switch(o.$$typeof){case E:e:{for(u=o.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(o.type===x){n(e,c.sibling),(r=a(c,o.props.children)).return=e,e=r;break e}}else if(c.elementType===o.type){n(e,c.sibling),(r=a(c,o.props)).ref=So(e,c,o),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}o.type===x?((r=Wl(o.props.children,e.mode,l,o.key)).return=e,e=r):((l=Vl(o.type,o.key,o.props,null,e.mode,l)).ref=So(e,r,o),l.return=e,e=l)}return s(e);case S:e:{for(c=o.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Ql(o,e.mode,l)).return=e,e=r}return s(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Yl(o,e.mode,l)).return=e,e=r),s(e);if(Eo(o))return g(e,r,o,l);if(U(o))return h(e,r,o,l);if(u&&xo(e,o),void 0===o&&!c)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,V(e.type)||"Component"))}return n(e,r)}}var Co=_o(!0),To=_o(!1),Ao={},Po=la(Ao),Lo=la(Ao),Ro=la(Ao);function No(e){if(e===Ao)throw Error(i(174));return e}function jo(e,t){switch(ua(Ro,t),ua(Lo,e),ua(Po,Ao),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:fe(null,"");break;default:t=fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ca(Po),ua(Po,t)}function Oo(){ca(Po),ca(Lo),ca(Ro)}function Io(e){No(Ro.current);var t=No(Po.current),n=fe(t,e.type);t!==n&&(ua(Lo,e),ua(Po,n))}function Do(e){Lo.current===e&&(ca(Po),ca(Lo))}var Mo=la(0);function qo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Fo=null,Bo=null,zo=!1;function Uo(e,t){var n=Gl(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function $o(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Go(e){if(zo){var t=Bo;if(t){var n=t;if(!$o(e,t)){if(!(t=Vr(n.nextSibling))||!$o(e,t))return e.flags=-1025&e.flags|2,zo=!1,void(Fo=e);Uo(Fo,n)}Fo=e,Bo=Vr(t.firstChild)}else e.flags=-1025&e.flags|2,zo=!1,Fo=e}}function Ho(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Fo=e}function Zo(e){if(e!==Fo)return!1;if(!zo)return Ho(e),zo=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!$r(t,e.memoizedProps))for(t=Bo;t;)Uo(e,t),t=Vr(t.nextSibling);if(Ho(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){Bo=Vr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}Bo=null}}else Bo=Fo?Vr(e.stateNode.nextSibling):null;return!0}function Vo(){Bo=Fo=null,zo=!1}var Wo=[];function Ko(){for(var e=0;e<Wo.length;e++)Wo[e]._workInProgressVersionPrimary=null;Wo.length=0}var Yo=k.ReactCurrentDispatcher,Qo=k.ReactCurrentBatchConfig,Xo=0,Jo=null,ei=null,ti=null,ni=!1,ri=!1;function ai(){throw Error(i(321))}function oi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,a,o){if(Xo=o,Jo=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Yo.current=null===e||null===e.memoizedState?Ni:ji,e=n(r,a),ri){o=0;do{if(ri=!1,!(25>o))throw Error(i(301));o+=1,ti=ei=null,t.updateQueue=null,Yo.current=Oi,e=n(r,a)}while(ri)}if(Yo.current=Ri,t=null!==ei&&null!==ei.next,Xo=0,ti=ei=Jo=null,ni=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Jo.memoizedState=ti=e:ti=ti.next=e,ti}function li(){if(null===ei){var e=Jo.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Jo.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Jo.memoizedState=ti=e:ti=ti.next=e}return ti}function ci(e,t){return"function"==typeof t?t(e):t}function ui(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var s=a.next;a.next=o.next,o.next=s}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var l=s=o=null,c=a;do{var u=c.lane;if((Xo&u)===u)null!==l&&(l=l.next={lane:0,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),r=c.eagerReducer===e?c.eagerState:e(r,c.action);else{var d={lane:u,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===l?(s=l=d,o=r):l=l.next=d,Jo.lanes|=u,zs|=u}c=c.next}while(null!==c&&c!==a);null===l?o=r:l.next=s,cr(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=l,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(null!==a){n.pending=null;var s=a=a.next;do{o=e(o,s.action),s=s.next}while(s!==a);cr(o,t.memoizedState)||(Di=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function pi(e,t,n){var r=t._getVersion;r=r(t._source);var a=t._workInProgressVersionPrimary;if(null!==a?e=a===r:(e=e.mutableReadLanes,(e=(Xo&e)===e)&&(t._workInProgressVersionPrimary=r,Wo.push(t))),e)return n(t._source);throw Wo.push(t),Error(i(350))}function fi(e,t,n,r){var a=js;if(null===a)throw Error(i(349));var o=t._getVersion,s=o(t._source),l=Yo.current,c=l.useState((function(){return pi(a,t,n)})),u=c[1],d=c[0];c=ti;var p=e.memoizedState,f=p.refs,m=f.getSnapshot,g=p.source;p=p.subscribe;var h=Jo;return e.memoizedState={refs:f,source:t,subscribe:r},l.useEffect((function(){f.getSnapshot=n,f.setSnapshot=u;var e=o(t._source);if(!cr(s,e)){e=n(t._source),cr(d,e)||(u(e),e=fl(h),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var l=31-$t(i),c=1<<l;r[l]|=e,i&=~c}}}),[n,t,r]),l.useEffect((function(){return r(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var r=fl(h);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),cr(m,n)&&cr(g,t)&&cr(p,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=u=Li.bind(null,Jo,e),c.queue=e,c.baseQueue=null,d=pi(a,t,n),c.memoizedState=c.baseState=d),d}function mi(e,t,n){return fi(li(),e,t,n)}function gi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Li.bind(null,Jo,e),[t.memoizedState,e]}function hi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Jo.updateQueue)?(t={lastEffect:null},Jo.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},si().memoizedState=e}function vi(){return li().memoizedState}function yi(e,t,n,r){var a=si();Jo.flags|=e,a.memoizedState=hi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var a=li();r=void 0===r?null:r;var o=void 0;if(null!==ei){var i=ei.memoizedState;if(o=i.destroy,null!==r&&oi(r,i.deps))return void hi(t,n,o,r)}Jo.flags|=e,a.memoizedState=hi(1|t,n,o,r)}function ki(e,t){return yi(516,4,e,t)}function Ei(e,t){return wi(516,4,e,t)}function Si(e,t){return wi(4,2,e,t)}function xi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function _i(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,xi.bind(null,t,e),n)}function Ci(){}function Ti(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ai(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Pi(e,t){var n=$a();Ha(98>n?98:n,(function(){e(!0)})),Ha(97<n?97:n,(function(){var n=Qo.transition;Qo.transition=1;try{e(!1),t()}finally{Qo.transition=n}}))}function Li(e,t,n){var r=pl(),a=fl(e),o={lane:a,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===Jo||null!==i&&i===Jo)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var s=t.lastRenderedState,l=i(s,n);if(o.eagerReducer=i,o.eagerState=l,cr(l,s))return}catch(c){}ml(e,a,r)}}var Ri={readContext:oo,useCallback:ai,useContext:ai,useEffect:ai,useImperativeHandle:ai,useLayoutEffect:ai,useMemo:ai,useReducer:ai,useRef:ai,useState:ai,useDebugValue:ai,useDeferredValue:ai,useTransition:ai,useMutableSource:ai,useOpaqueIdentifier:ai,unstable_isNewReconciler:!1},Ni={readContext:oo,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:oo,useEffect:ki,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,yi(4,2,xi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return yi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Li.bind(null,Jo,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ci,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return ki((function(){var t=Qo.transition;Qo.transition=1;try{r(e)}finally{Qo.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Pi.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fi(r,e,t,n)},useOpaqueIdentifier:function(){if(zo){var e=!1,t=function(e){return{$$typeof:I,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Kr++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&Jo.mode)&&(Jo.flags|=516,hi(5,(function(){n("r:"+(Kr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Kr++).toString(36)),t},unstable_isNewReconciler:!1},ji={readContext:oo,useCallback:Ti,useContext:oo,useEffect:Ei,useImperativeHandle:_i,useLayoutEffect:Si,useMemo:Ai,useReducer:ui,useRef:vi,useState:function(){return ui(ci)},useDebugValue:Ci,useDeferredValue:function(e){var t=ui(ci),n=t[0],r=t[1];return Ei((function(){var t=Qo.transition;Qo.transition=1;try{r(e)}finally{Qo.transition=t}}),[e]),n},useTransition:function(){var e=ui(ci)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ui(ci)[0]},unstable_isNewReconciler:!1},Oi={readContext:oo,useCallback:Ti,useContext:oo,useEffect:Ei,useImperativeHandle:_i,useLayoutEffect:Si,useMemo:Ai,useReducer:di,useRef:vi,useState:function(){return di(ci)},useDebugValue:Ci,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return Ei((function(){var t=Qo.transition;Qo.transition=1;try{r(e)}finally{Qo.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Ii=k.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?To(t,null,n,r):Co(t,e.child,n,r)}function qi(e,t,n,r,a){n=n.render;var o=t.ref;return ao(t,a),r=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Mi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,os(e,t,a))}function Fi(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Hl(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Vl(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,Bi(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(a,r)&&e.ref===t.ref)?os(e,t,o):(t.flags|=1,(e=Zl(i,r)).ref=t.ref,e.return=t,t.child=e)}function Bi(e,t,n,r,a,o){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(o&a))return t.lanes=e.lanes,os(e,t,o);0!=(16384&e.flags)&&(Di=!0)}return $i(e,t,n,r,o)}function zi(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},El(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},El(t,e),null;t.memoizedState={baseLanes:0},El(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,El(t,r);return Mi(e,t,a,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function $i(e,t,n,r,a){var o=ha(n)?ma:pa.current;return o=ga(t,o),ao(t,a),n=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Mi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,os(e,t,a))}function Gi(e,t,n,r,a){if(ha(n)){var o=!0;wa(t)}else o=!1;if(ao(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),yo(t,n,r),ko(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=oo(c):c=ga(t,c=ha(n)?ma:pa.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&wo(t,i,r,c),io=!1;var p=t.memoizedState;i.state=p,fo(t,r,i,a),l=t.memoizedState,s!==r||p!==l||fa.current||io?("function"==typeof u&&(ho(t,n,u,r),l=t.memoizedState),(s=io||vo(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,lo(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:Ya(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=oo(l):l=ga(t,l=ha(n)?ma:pa.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&wo(t,i,r,l),io=!1,p=t.memoizedState,i.state=p,fo(t,r,i,a);var m=t.memoizedState;s!==d||p!==m||fa.current||io?("function"==typeof f&&(ho(t,n,f,r),m=t.memoizedState),(c=io||vo(t,n,c,r,p,m,l))?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),r=!1)}return Hi(e,t,n,r,o,a)}function Hi(e,t,n,r,a,o){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&ka(t,n,!1),os(e,t,o);r=t.stateNode,Ii.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Co(t,e.child,null,o),t.child=Co(t,null,s,o)):Mi(e,t,s,o),t.memoizedState=r.state,a&&ka(t,n,!0),t.child}function Zi(e){var t=e.stateNode;t.pendingContext?va(0,t.pendingContext,t.pendingContext!==t.context):t.context&&va(0,t.context,!1),jo(e,t.containerInfo)}var Vi,Wi,Ki,Yi,Qi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,a=t.pendingProps,o=Mo.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&o)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),ua(Mo,1&o),null===e?(void 0!==a.fallback&&Go(t),e=a.children,o=a.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qi,e):"number"==typeof a.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qi,t.lanes=33554432,e):((n=Kl({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=ts(e,t,a.children,a.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Qi,a):(n=es(e,t,a.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var a=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&a)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Kl(t,a,0,null),n=Wl(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function es(e,t,n,r){var a=e.child;return e=a.sibling,n=Zl(a,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ts(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var s={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=s,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Zl(i,s),null!==e?r=Zl(e,r):(r=Wl(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function ns(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ro(e.return,t)}function rs(e,t,n,r,a,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=a,i.lastEffect=o)}function as(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Mo.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ns(e,n);else if(19===e.tag)ns(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ua(Mo,r),0==(2&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===qo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rs(t,!1,a,n,o,t.lastEffect);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===qo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rs(t,!0,n,null,o,t.lastEffect);break;case"together":rs(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function os(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),zs|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Zl(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Zl(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function is(e,t){if(!zo)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ss(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return ha(t.type)&&ba(),null;case 3:return Oo(),ca(fa),ca(pa),Ko(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Zo(t)?t.flags|=4:r.hydrate||(t.flags|=256)),Wi(t),null;case 5:Do(t);var o=No(Ro.current);if(n=t.type,null!==e&&null!=t.stateNode)Ki(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=No(Po.current),Zo(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[Qr]=t,r[Xr]=s,n){case"dialog":Pr("cancel",r),Pr("close",r);break;case"iframe":case"object":case"embed":Pr("load",r);break;case"video":case"audio":for(e=0;e<_r.length;e++)Pr(_r[e],r);break;case"source":Pr("error",r);break;case"img":case"image":case"link":Pr("error",r),Pr("load",r);break;case"details":Pr("toggle",r);break;case"input":ee(r,s),Pr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!s.multiple},Pr("invalid",r);break;case"textarea":le(r,s),Pr("invalid",r)}for(var c in Se(n,s),e=null,s)s.hasOwnProperty(c)&&(o=s[c],"children"===c?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):l.hasOwnProperty(c)&&null!=o&&"onScroll"===c&&Pr("scroll",r));switch(n){case"input":Y(r),re(r,s,!0);break;case"textarea":Y(r),ue(r);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(r.onclick=Fr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(c=9===o.nodeType?o:o.ownerDocument,e===de.html&&(e=pe(n)),e===de.html?"script"===n?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),"select"===n&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Qr]=t,e[Xr]=r,Vi(e,t,!1,!1),t.stateNode=e,c=xe(n,r),n){case"dialog":Pr("cancel",e),Pr("close",e),o=r;break;case"iframe":case"object":case"embed":Pr("load",e),o=r;break;case"video":case"audio":for(o=0;o<_r.length;o++)Pr(_r[o],e);o=r;break;case"source":Pr("error",e),o=r;break;case"img":case"image":case"link":Pr("error",e),Pr("load",e),o=r;break;case"details":Pr("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Pr("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Pr("invalid",e);break;case"textarea":le(e,r),o=se(e,r),Pr("invalid",e);break;default:o=r}Se(n,o);var u=o;for(s in u)if(u.hasOwnProperty(s)){var d=u[s];"style"===s?ke(e,d):"dangerouslySetInnerHTML"===s?null!=(d=d?d.__html:void 0)&&he(e,d):"children"===s?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(l.hasOwnProperty(s)?null!=d&&"onScroll"===s&&Pr("scroll",e):null!=d&&w(e,s,d,c))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ue(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(s=r.value)?ie(e,!!r.multiple,s,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Fr)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=No(Ro.current),No(Po.current),Zo(t)?(r=t.stateNode,n=t.memoizedProps,r[Qr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Qr]=t,t.stateNode=r)}return null;case 13:return ca(Mo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Zo(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Mo.current)?0===qs&&(qs=3):(0!==qs&&3!==qs||(qs=4),null===js||0==(134217727&zs)&&0==(134217727&Us)||vl(js,Is))),(r||n)&&(t.flags|=4),null);case 4:return Oo(),Wi(t),null===e&&Rr(t.stateNode.containerInfo),null;case 10:return no(t),null;case 19:if(ca(Mo),null===(r=t.memoizedState))return null;if(s=0!=(64&t.flags),null===(c=r.rendering))if(s)is(r,!1);else{if(0!==qs||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(c=qo(e))){for(t.flags|=64,is(r,!1),null!==(s=c.updateQueue)&&(t.updateQueue=s,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(s=n).flags&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(c=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=c.childLanes,s.lanes=c.lanes,s.child=c.child,s.memoizedProps=c.memoizedProps,s.memoizedState=c.memoizedState,s.updateQueue=c.updateQueue,s.type=c.type,e=c.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ua(Mo,1&Mo.current|2),t.child}e=e.sibling}null!==r.tail&&Ua()>Zs&&(t.flags|=64,s=!0,is(r,!1),t.lanes=33554432)}else{if(!s)if(null!==(e=qo(c))){if(t.flags|=64,s=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),is(r,!0),null===r.tail&&"hidden"===r.tailMode&&!c.alternate&&!zo)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ua()-r.renderingStartTime>Zs&&1073741824!==n&&(t.flags|=64,s=!0,is(r,!1),t.lanes=33554432);r.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=r.last)?n.sibling=c:t.child=c,r.last=c)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ua(),n.sibling=null,t=Mo.current,ua(Mo,s?1&t|2:1&t),n):null;case 23:case 24:return Sl(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function ls(e){switch(e.tag){case 1:ha(e.type)&&ba();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Oo(),ca(fa),ca(pa),Ko(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Do(e),null;case 13:return ca(Mo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ca(Mo),null;case 4:return Oo(),null;case 10:return no(e),null;case 23:case 24:return Sl(),null;default:return null}}function cs(e,t){try{var n="",r=t;do{n+=Z(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a}}function us(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Vi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Wi=function(){},Ki=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,No(Po.current);var i,s=null;switch(n){case"input":o=J(e,o),r=J(e,r),s=[];break;case"option":o=oe(e,o),r=oe(e,r),s=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),s=[];break;case"textarea":o=se(e,o),r=se(e,r),s=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Fr)}for(d in Se(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var c=o[d];for(i in c)c.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(l.hasOwnProperty(d)?s||(s=[]):(s=s||[]).push(d,null));for(d in r){var u=r[d];if(c=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&u!==c&&(null!=u||null!=c))if("style"===d)if(c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(n||(n={}),n[i]=u[i])}else n||(s||(s=[]),s.push(d,n)),n=u;else"dangerouslySetInnerHTML"===d?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(s=s||[]).push(d,u)):"children"===d?"string"!=typeof u&&"number"!=typeof u||(s=s||[]).push(d,""+u):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(l.hasOwnProperty(d)?(null!=u&&"onScroll"===d&&Pr("scroll",e),s||c===u||(s=[])):"object"==typeof u&&null!==u&&u.$$typeof===I?u.toString():(s=s||[]).push(d,u))}n&&(s=s||[]).push("style",n);var d=s;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var ds="function"==typeof WeakMap?WeakMap:Map;function ps(e,t,n){(n=co(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ys||(Ys=!0,Qs=r),us(0,t)},n}function fs(e,t,n){(n=co(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return us(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xs?Xs=new Set([this]):Xs.add(this),us(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ms="function"==typeof WeakSet?WeakSet:Set;function gs(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){Bl(e,n)}else t.current=null}function hs(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ya(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Zr(t.stateNode.containerInfo))}throw Error(i(163))}function bs(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var a=e;r=a.next,0!=(4&(a=a.tag))&&0!=(1&a)&&(Ml(n,e),Dl(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ya(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&mo(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}mo(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&kt(n)))))}throw Error(i(163))}function vs(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var a=n.memoizedProps.style;a=null!=a&&a.hasOwnProperty("display")?a.display:null,r.style.display=we("display",a)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ys(e,t){if(Sa&&"function"==typeof Sa.onCommitFiberUnmount)try{Sa.onCommitFiberUnmount(Ea,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,a=r.destroy;if(r=r.tag,void 0!==a)if(0!=(4&r))Ml(t,n);else{r=t;try{a()}catch(o){Bl(r,o)}}n=n.next}while(n!==e)}break;case 1:if(gs(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){Bl(t,o)}break;case 5:gs(t);break;case 4:_s(e,t)}}function ws(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function ks(e){return 5===e.tag||3===e.tag||4===e.tag}function Es(e){e:{for(var t=e.return;null!==t;){if(ks(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||ks(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Ss(e,n,t):xs(e,n,t)}function Ss(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Fr));else if(4!==r&&null!==(e=e.child))for(Ss(e,t,n),e=e.sibling;null!==e;)Ss(e,t,n),e=e.sibling}function xs(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(xs(e,t,n),e=e.sibling;null!==e;)xs(e,t,n),e=e.sibling}function _s(e,t){for(var n,r,a=t,o=!1;;){if(!o){o=a.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}o=o.return}o=!0}if(5===a.tag||6===a.tag){e:for(var s=e,l=a,c=l;;)if(ys(s,c),null!==c.child&&4!==c.tag)c.child.return=c,c=c.child;else{if(c===l)break e;for(;null===c.sibling;){if(null===c.return||c.return===l)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}r?(s=n,l=a.stateNode,8===s.nodeType?s.parentNode.removeChild(l):s.removeChild(l)):n.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){n=a.stateNode.containerInfo,r=!0,a.child.return=a,a=a.child;continue}}else if(ys(e,a),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(o=!1)}a.sibling.return=a.return,a=a.sibling}}function Cs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),xe(e,a),t=xe(e,r),a=0;a<o.length;a+=2){var s=o[a],l=o[a+1];"style"===s?ke(n,l):"dangerouslySetInnerHTML"===s?he(n,l):"children"===s?be(n,l):w(n,s,l,t)}switch(e){case"input":ne(n,r);break;case"textarea":ce(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(o=r.value)?ie(n,!!r.multiple,o,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,kt(n.containerInfo)));case 13:return null!==t.memoizedState&&(Hs=Ua(),vs(t.child,!0)),void Ts(t);case 19:return void Ts(t);case 23:case 24:return void vs(t,null!==t.memoizedState)}throw Error(i(163))}function Ts(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ms),t.forEach((function(t){var r=Ul.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function As(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ps=Math.ceil,Ls=k.ReactCurrentDispatcher,Rs=k.ReactCurrentOwner,Ns=0,js=null,Os=null,Is=0,Ds=0,Ms=la(0),qs=0,Fs=null,Bs=0,zs=0,Us=0,$s=0,Gs=null,Hs=0,Zs=1/0;function Vs(){Zs=Ua()+500}var Ws,Ks=null,Ys=!1,Qs=null,Xs=null,Js=!1,el=null,tl=90,nl=[],rl=[],al=null,ol=0,il=null,sl=-1,ll=0,cl=0,ul=null,dl=!1;function pl(){return 0!=(48&Ns)?Ua():-1!==sl?sl:sl=Ua()}function fl(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===$a()?1:2;if(0===ll&&(ll=Bs),0!==Ka.transition){0!==cl&&(cl=null!==Gs?Gs.pendingLanes:0),e=ll;var t=4186112&~cl;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=$a(),0!=(4&Ns)&&98===e?e=Ft(12,ll):e=Ft(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ll),e}function ml(e,t,n){if(50<ol)throw ol=0,il=null,Error(i(185));if(null===(e=gl(e,t)))return null;Ut(e,t,n),e===js&&(Us|=t,4===qs&&vl(e,Is));var r=$a();1===t?0!=(8&Ns)&&0==(48&Ns)?yl(e):(hl(e,n),0===Ns&&(Vs(),Va())):(0==(4&Ns)||98!==r&&99!==r||(null===al?al=new Set([e]):al.add(e)),hl(e,n)),Gs=e}function gl(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hl(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,s=e.pendingLanes;0<s;){var l=31-$t(s),c=1<<l,u=o[l];if(-1===u){if(0==(c&r)||0!=(c&a)){u=t,Dt(c);var d=It;o[l]=10<=d?u+250:6<=d?u+5e3:-1}}else u<=t&&(e.expiredLanes|=c);s&=~c}if(r=Mt(e,e===js?Is:0),t=It,0===r)null!==n&&(n!==Da&&Ca(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Da&&Ca(n)}15===t?(n=yl.bind(null,e),null===qa?(qa=[n],Fa=_a(Ra,Wa)):qa.push(n),n=Da):14===t?n=Za(99,yl.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Za(n,bl.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bl(e){if(sl=-1,cl=ll=0,0!=(48&Ns))throw Error(i(327));var t=e.callbackNode;if(Il()&&e.callbackNode!==t)return null;var n=Mt(e,e===js?Is:0);if(0===n)return null;var r=n,a=Ns;Ns|=16;var o=Cl();for(js===e&&Is===r||(Vs(),xl(e,r));;)try{Pl();break}catch(l){_l(e,l)}if(to(),Ls.current=o,Ns=a,null!==Os?r=0:(js=null,Is=0,r=qs),0!=(Bs&Us))xl(e,0);else if(0!==r){if(2===r&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Zr(e.containerInfo)),0!==(n=qt(e))&&(r=Tl(e,n))),1===r)throw t=Fs,xl(e,0),vl(e,n),hl(e,Ua()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Nl(e);break;case 3:if(vl(e,n),(62914560&n)===n&&10<(r=Hs+500-Ua())){if(0!==Mt(e,0))break;if(((a=e.suspendedLanes)&n)!==n){pl(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Gr(Nl.bind(null,e),r);break}Nl(e);break;case 4:if(vl(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var s=31-$t(n);o=1<<s,(s=r[s])>a&&(a=s),n&=~o}if(n=a,10<(n=(120>(n=Ua()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ps(n/1960))-n)){e.timeoutHandle=Gr(Nl.bind(null,e),n);break}Nl(e);break;default:throw Error(i(329))}}return hl(e,Ua()),e.callbackNode===t?bl.bind(null,e):null}function vl(e,t){for(t&=~$s,t&=~Us,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-$t(t),r=1<<n;e[n]=-1,t&=~r}}function yl(e){if(0!=(48&Ns))throw Error(i(327));if(Il(),e===js&&0!=(e.expiredLanes&Is)){var t=Is,n=Tl(e,t);0!=(Bs&Us)&&(n=Tl(e,t=Mt(e,t)))}else n=Tl(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Zr(e.containerInfo)),0!==(t=qt(e))&&(n=Tl(e,t))),1===n)throw n=Fs,xl(e,0),vl(e,t),hl(e,Ua()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Nl(e),hl(e,Ua()),null}function wl(e,t){var n=Ns;Ns|=1;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Va())}}function kl(e,t){var n=Ns;Ns&=-2,Ns|=8;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Va())}}function El(e,t){ua(Ms,Ds),Ds|=t,Bs|=t}function Sl(){Ds=Ms.current,ca(Ms)}function xl(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Hr(n)),null!==Os)for(n=Os.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&ba();break;case 3:Oo(),ca(fa),ca(pa),Ko();break;case 5:Do(r);break;case 4:Oo();break;case 13:case 19:ca(Mo);break;case 10:no(r);break;case 23:case 24:Sl()}n=n.return}js=e,Os=Zl(e.current,null),Is=Ds=Bs=t,qs=0,Fs=null,$s=Us=zs=0}function _l(e,t){for(;;){var n=Os;try{if(to(),Yo.current=Ri,ni){for(var r=Jo.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ni=!1}if(Xo=0,ti=ei=Jo=null,ri=!1,Rs.current=null,null===n||null===n.return){qs=1,Fs=t,Os=null;break}e:{var o=e,i=n.return,s=n,l=t;if(t=Is,s.flags|=2048,s.firstEffect=s.lastEffect=null,null!==l&&"object"==typeof l&&"function"==typeof l.then){var c=l;if(0==(2&s.mode)){var u=s.alternate;u?(s.updateQueue=u.updateQueue,s.memoizedState=u.memoizedState,s.lanes=u.lanes):(s.updateQueue=null,s.memoizedState=null)}var d=0!=(1&Mo.current),p=i;do{var f;if(f=13===p.tag){var m=p.memoizedState;if(null!==m)f=null!==m.dehydrated;else{var g=p.memoizedProps;f=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!d)}}if(f){var h=p.updateQueue;if(null===h){var b=new Set;b.add(c),p.updateQueue=b}else h.add(c);if(0==(2&p.mode)){if(p.flags|=64,s.flags|=16384,s.flags&=-2981,1===s.tag)if(null===s.alternate)s.tag=17;else{var v=co(-1,1);v.tag=2,uo(s,v)}s.lanes|=1;break e}l=void 0,s=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new ds,l=new Set,y.set(c,l)):void 0===(l=y.get(c))&&(l=new Set,y.set(c,l)),!l.has(s)){l.add(s);var w=zl.bind(null,o,c,s);c.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);l=Error((V(s.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==qs&&(qs=2),l=cs(l,s),p=i;do{switch(p.tag){case 3:o=l,p.flags|=4096,t&=-t,p.lanes|=t,po(p,ps(0,o,t));break e;case 1:o=l;var k=p.type,E=p.stateNode;if(0==(64&p.flags)&&("function"==typeof k.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Xs||!Xs.has(E)))){p.flags|=4096,t&=-t,p.lanes|=t,po(p,fs(p,o,t));break e}}p=p.return}while(null!==p)}Rl(n)}catch(S){t=S,Os===n&&null!==n&&(Os=n=n.return);continue}break}}function Cl(){var e=Ls.current;return Ls.current=Ri,null===e?Ri:e}function Tl(e,t){var n=Ns;Ns|=16;var r=Cl();for(js===e&&Is===t||xl(e,t);;)try{Al();break}catch(a){_l(e,a)}if(to(),Ns=n,Ls.current=r,null!==Os)throw Error(i(261));return js=null,Is=0,qs}function Al(){for(;null!==Os;)Ll(Os)}function Pl(){for(;null!==Os&&!Ta();)Ll(Os)}function Ll(e){var t=Ws(e.alternate,e,Ds);e.memoizedProps=e.pendingProps,null===t?Rl(e):Os=t,Rs.current=null}function Rl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ss(n,t,Ds)))return void(Os=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ds)||0==(4&n.mode)){for(var r=0,a=n.child;null!==a;)r|=a.lanes|a.childLanes,a=a.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=ls(t)))return n.flags&=2047,void(Os=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Os=t);Os=t=e}while(null!==t);0===qs&&(qs=5)}function Nl(e){var t=$a();return Ha(99,jl.bind(null,e,t)),null}function jl(e,t){do{Il()}while(null!==el);if(0!=(48&Ns))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,a=r,o=e.pendingLanes&~a;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=a,e.mutableReadLanes&=a,e.entangledLanes&=a,a=e.entanglements;for(var s=e.eventTimes,l=e.expirationTimes;0<o;){var c=31-$t(o),u=1<<c;a[c]=0,s[c]=-1,l[c]=-1,o&=~u}if(null!==al&&0==(24&r)&&al.has(e)&&al.delete(e),e===js&&(Os=js=null,Is=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Ns,Ns|=32,Rs.current=null,Br=Wt,hr(s=gr())){if("selectionStart"in s)l={start:s.selectionStart,end:s.selectionEnd};else e:if(l=(l=s.ownerDocument)&&l.defaultView||window,(u=l.getSelection&&l.getSelection())&&0!==u.rangeCount){l=u.anchorNode,o=u.anchorOffset,c=u.focusNode,u=u.focusOffset;try{l.nodeType,c.nodeType}catch(C){l=null;break e}var d=0,p=-1,f=-1,m=0,g=0,h=s,b=null;t:for(;;){for(var v;h!==l||0!==o&&3!==h.nodeType||(p=d+o),h!==c||0!==u&&3!==h.nodeType||(f=d+u),3===h.nodeType&&(d+=h.nodeValue.length),null!==(v=h.firstChild);)b=h,h=v;for(;;){if(h===s)break t;if(b===l&&++m===o&&(p=d),b===c&&++g===u&&(f=d),null!==(v=h.nextSibling))break;b=(h=b).parentNode}h=v}l=-1===p||-1===f?null:{start:p,end:f}}else l=null;l=l||{start:0,end:0}}else l=null;zr={focusedElem:s,selectionRange:l},Wt=!1,ul=null,dl=!1,Ks=r;do{try{Ol()}catch(C){if(null===Ks)throw Error(i(330));Bl(Ks,C),Ks=Ks.nextEffect}}while(null!==Ks);ul=null,Ks=r;do{try{for(s=e;null!==Ks;){var y=Ks.flags;if(16&y&&be(Ks.stateNode,""),128&y){var w=Ks.alternate;if(null!==w){var k=w.ref;null!==k&&("function"==typeof k?k(null):k.current=null)}}switch(1038&y){case 2:Es(Ks),Ks.flags&=-3;break;case 6:Es(Ks),Ks.flags&=-3,Cs(Ks.alternate,Ks);break;case 1024:Ks.flags&=-1025;break;case 1028:Ks.flags&=-1025,Cs(Ks.alternate,Ks);break;case 4:Cs(Ks.alternate,Ks);break;case 8:_s(s,l=Ks);var E=l.alternate;ws(l),null!==E&&ws(E)}Ks=Ks.nextEffect}}catch(C){if(null===Ks)throw Error(i(330));Bl(Ks,C),Ks=Ks.nextEffect}}while(null!==Ks);if(k=zr,w=gr(),y=k.focusedElem,s=k.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==s&&hr(y)&&(w=s.start,void 0===(k=s.end)&&(k=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(k,y.value.length)):(k=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(k=k.getSelection(),l=y.textContent.length,E=Math.min(s.start,l),s=void 0===s.end?E:Math.min(s.end,l),!k.extend&&E>s&&(l=s,s=E,E=l),l=fr(y,E),o=fr(y,s),l&&o&&(1!==k.rangeCount||k.anchorNode!==l.node||k.anchorOffset!==l.offset||k.focusNode!==o.node||k.focusOffset!==o.offset)&&((w=w.createRange()).setStart(l.node,l.offset),k.removeAllRanges(),E>s?(k.addRange(w),k.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),k.addRange(w))))),w=[];for(k=y;k=k.parentNode;)1===k.nodeType&&w.push({element:k,left:k.scrollLeft,top:k.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(k=w[y]).element.scrollLeft=k.left,k.element.scrollTop=k.top}Wt=!!Br,zr=Br=null,e.current=n,Ks=r;do{try{for(y=e;null!==Ks;){var S=Ks.flags;if(36&S&&bs(y,Ks.alternate,Ks),128&S){w=void 0;var x=Ks.ref;if(null!==x){var _=Ks.stateNode;Ks.tag,w=_,"function"==typeof x?x(w):x.current=w}}Ks=Ks.nextEffect}}catch(C){if(null===Ks)throw Error(i(330));Bl(Ks,C),Ks=Ks.nextEffect}}while(null!==Ks);Ks=null,Ma(),Ns=a}else e.current=n;if(Js)Js=!1,el=e,tl=t;else for(Ks=r;null!==Ks;)t=Ks.nextEffect,Ks.nextEffect=null,8&Ks.flags&&((S=Ks).sibling=null,S.stateNode=null),Ks=t;if(0===(r=e.pendingLanes)&&(Xs=null),1===r?e===il?ol++:(ol=0,il=e):ol=0,n=n.stateNode,Sa&&"function"==typeof Sa.onCommitFiberRoot)try{Sa.onCommitFiberRoot(Ea,n,void 0,64==(64&n.current.flags))}catch(C){}if(hl(e,Ua()),Ys)throw Ys=!1,e=Qs,Qs=null,e;return 0!=(8&Ns)||Va(),null}function Ol(){for(;null!==Ks;){var e=Ks.alternate;dl||null===ul||(0!=(8&Ks.flags)?Je(Ks,ul)&&(dl=!0):13===Ks.tag&&As(e,Ks)&&Je(Ks,ul)&&(dl=!0));var t=Ks.flags;0!=(256&t)&&hs(e,Ks),0==(512&t)||Js||(Js=!0,Za(97,(function(){return Il(),null}))),Ks=Ks.nextEffect}}function Il(){if(90!==tl){var e=97<tl?97:tl;return tl=90,Ha(e,ql)}return!1}function Dl(e,t){nl.push(t,e),Js||(Js=!0,Za(97,(function(){return Il(),null})))}function Ml(e,t){rl.push(t,e),Js||(Js=!0,Za(97,(function(){return Il(),null})))}function ql(){if(null===el)return!1;var e=el;if(el=null,0!=(48&Ns))throw Error(i(331));var t=Ns;Ns|=32;var n=rl;rl=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],s=a.destroy;if(a.destroy=void 0,"function"==typeof s)try{s()}catch(c){if(null===o)throw Error(i(330));Bl(o,c)}}for(n=nl,nl=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var l=a.create;a.destroy=l()}catch(c){if(null===o)throw Error(i(330));Bl(o,c)}}for(l=e.current.firstEffect;null!==l;)e=l.nextEffect,l.nextEffect=null,8&l.flags&&(l.sibling=null,l.stateNode=null),l=e;return Ns=t,Va(),!0}function Fl(e,t,n){uo(e,t=ps(0,t=cs(n,t),1)),t=pl(),null!==(e=gl(e,1))&&(Ut(e,1,t),hl(e,t))}function Bl(e,t){if(3===e.tag)Fl(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Fl(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xs||!Xs.has(r))){var a=fs(n,e=cs(t,e),1);if(uo(n,a),a=pl(),null!==(n=gl(n,1)))Ut(n,1,a),hl(n,a);else if("function"==typeof r.componentDidCatch&&(null===Xs||!Xs.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function zl(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=pl(),e.pingedLanes|=e.suspendedLanes&n,js===e&&(Is&n)===n&&(4===qs||3===qs&&(62914560&Is)===Is&&500>Ua()-Hs?xl(e,0):$s|=n),hl(e,t)}function Ul(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===$a()?1:2:(0===ll&&(ll=Bs),0===(t=Bt(62914560&~ll))&&(t=4194304))),n=pl(),null!==(e=gl(e,t))&&(Ut(e,t,n),hl(e,n))}function $l(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Gl(e,t,n,r){return new $l(e,t,n,r)}function Hl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Zl(e,t){var n=e.alternate;return null===n?((n=Gl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Vl(e,t,n,r,a,o){var s=2;if(r=e,"function"==typeof e)Hl(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case x:return Wl(n.children,a,o,t);case D:s=8,a|=16;break;case _:s=8,a|=1;break;case C:return(e=Gl(12,n,t,8|a)).elementType=C,e.type=C,e.lanes=o,e;case L:return(e=Gl(13,n,t,a)).type=L,e.elementType=L,e.lanes=o,e;case R:return(e=Gl(19,n,t,a)).elementType=R,e.lanes=o,e;case M:return Kl(n,a,o,t);case q:return(e=Gl(24,n,t,a)).elementType=q,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:s=10;break e;case A:s=9;break e;case P:s=11;break e;case N:s=14;break e;case j:s=16,r=null;break e;case O:s=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Gl(s,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function Wl(e,t,n,r){return(e=Gl(7,e,r,t)).lanes=n,e}function Kl(e,t,n,r){return(e=Gl(23,e,r,t)).elementType=M,e.lanes=n,e}function Yl(e,t,n){return(e=Gl(6,e,null,t)).lanes=n,e}function Ql(e,t,n){return(t=Gl(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xl(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=zt(0),this.expirationTimes=zt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zt(0),this.mutableSourceEagerHydrationData=null}function Jl(e,t,n,r){var a=t.current,o=pl(),s=fl(a);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(ha(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(i(171))}if(1===n.tag){var c=n.type;if(ha(c)){n=ya(n,c,l);break e}}n=l}else n=da;return null===t.context?t.context=n:t.pendingContext=n,(t=co(o,s)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),uo(a,t),ml(a,s,o),s}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xl(e,t,null!=n&&!0===n.hydrate),t=Gl(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,so(t),e[Jr]=n.current,Rr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var a=(t=r[e])._getVersion;a=a(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a)}this._internalRoot=n}function ac(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function oc(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var s=a;a=function(){var e=ec(i);s.call(e)}}Jl(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var l=a;a=function(){var e=ec(i);l.call(e)}}kl((function(){Jl(t,i,e,a)}))}return ec(i)}function ic(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ac(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Ws=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||fa.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Zi(t),Vo();break;case 5:Io(t);break;case 1:ha(t.type)&&wa(t);break;case 4:jo(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;ua(Qa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(ua(Mo,1&Mo.current),null!==(t=os(e,t,n))?t.sibling:null);ua(Mo,1&Mo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return as(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),ua(Mo,Mo.current),r)break;return null;case 23:case 24:return t.lanes=0,zi(e,t,n)}return os(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=ga(t,pa.current),ao(t,n),a=ii(null,t,r,e,a,n),t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ha(r)){var o=!0;wa(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,so(t);var s=r.getDerivedStateFromProps;"function"==typeof s&&ho(t,r,s,e),a.updater=bo,t.stateNode=a,a._reactInternals=t,ko(t,r,e,n),t=Hi(null,t,r,!0,o,n)}else t.tag=0,Mi(null,t,a,n),t=t.child;return t;case 16:a=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return Hl(e)?1:0;if(null!=e){if((e=e.$$typeof)===P)return 11;if(e===N)return 14}return 2}(a),e=Ya(a,e),o){case 0:t=$i(null,t,a,e,n);break e;case 1:t=Gi(null,t,a,e,n);break e;case 11:t=qi(null,t,a,e,n);break e;case 14:t=Fi(null,t,a,Ya(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,$i(e,t,r,a=t.elementType===r?a:Ya(r,a),n);case 1:return r=t.type,a=t.pendingProps,Gi(e,t,r,a=t.elementType===r?a:Ya(r,a),n);case 3:if(Zi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,lo(e,t),fo(t,r,null,n),(r=t.memoizedState.element)===a)Vo(),t=os(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&(Bo=Vr(t.stateNode.containerInfo.firstChild),Fo=t,o=zo=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],Wo.push(o);for(n=To(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Vo();t=t.child}return t;case 5:return Io(t),null===e&&Go(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,s=a.children,$r(r,a)?s=null:null!==o&&$r(r,o)&&(t.flags|=16),Ui(e,t),Mi(e,t,s,n),t.child;case 6:return null===e&&Go(t),null;case 13:return Xi(e,t,n);case 4:return jo(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Co(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,qi(e,t,r,a=t.elementType===r?a:Ya(r,a),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,s=t.memoizedProps,o=a.value;var l=t.type._context;if(ua(Qa,l._currentValue),l._currentValue=o,null!==s)if(l=s.value,0===(o=cr(l,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(l,o):1073741823))){if(s.children===a.children&&!fa.current){t=os(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var c=l.dependencies;if(null!==c){s=l.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&o)){1===l.tag&&((u=co(-1,n&-n)).tag=2,uo(l,u)),l.lanes|=n,null!==(u=l.alternate)&&(u.lanes|=n),ro(l.return,n),c.lanes|=n;break}u=u.next}}else s=10===l.tag&&l.type===t.type?null:l.child;if(null!==s)s.return=l;else for(s=l;null!==s;){if(s===t){s=null;break}if(null!==(l=s.sibling)){l.return=s.return,s=l;break}s=s.return}l=s}Mi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,ao(t,n),r=r(a=oo(a,o.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return o=Ya(a=t.type,t.pendingProps),Fi(e,t,a,o=Ya(a.type,o),r,n);case 15:return Bi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Ya(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,ha(r)?(e=!0,wa(t)):e=!1,ao(t,n),yo(t,r,a),ko(t,r,a,n),Hi(null,t,r,!0,e,n);case 19:return as(e,t,n);case 23:case 24:return zi(e,t,n)}throw Error(i(156,t.tag))},rc.prototype.render=function(e){Jl(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Jl(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ml(e,4,pl()),nc(e,4))},tt=function(e){13===e.tag&&(ml(e,67108864,pl()),nc(e,67108864))},nt=function(e){if(13===e.tag){var t=pl(),n=fl(e);ml(e,n,t),nc(e,n)}},rt=function(e,t){return t()},Ce=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=aa(r);if(!a)throw Error(i(90));Q(r),ne(r,a)}}}break;case"textarea":ce(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=wl,je=function(e,t,n,r,a){var o=Ns;Ns|=4;try{return Ha(98,e.bind(null,t,n,r,a))}finally{0===(Ns=o)&&(Vs(),Va())}},Oe=function(){0==(49&Ns)&&(function(){if(null!==al){var e=al;al=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hl(e,Ua())}))}Va()}(),Il())},Ie=function(e,t){var n=Ns;Ns|=2;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Va())}};var sc={Events:[na,ra,aa,Le,Re,Il,{current:!1}]},lc={findFiberByHostInstance:ta,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cc={bundleType:lc.bundleType,version:lc.version,rendererPackageName:lc.rendererPackageName,rendererConfig:lc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:k.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:lc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uc=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uc.isDisabled&&uc.supportsFiber)try{Ea=uc.inject(cc),Sa=uc}catch(ge){}}t.createPortal=ic,t.hydrate=function(e,t,n){if(!ac(t))throw Error(i(200));return oc(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!o(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!o(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!o(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>H,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),s=n.n(i),l=n(1143),c=n.n(l),u=n(6774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},E=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},x=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},A=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var s=o[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][c]&&(a[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var s=o[i],l=p({},r[s],a[s]);r[s]=l}return e}),[]).reverse()},P=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},L=function(e){return Array.isArray(e)?e.join(""):e},R=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},j=[h.NOSCRIPT,h.SCRIPT,h.STYLE],O=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},I=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},q=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=D(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=I(n),o=L(t);return a?"<"+e+' data-rh="true" '+a+">"+O(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+O(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return I(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+O(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===j.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},F=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=R(e.metaTags,y),o=R(t,b),i=R(n,v);return{priorityMethods:{toComponent:function(){return[].concat(M(h.META,a.priority),M(h.LINK,o.priority),M(h.SCRIPT,i.priority))},toString:function(){return q(h.META,a.priority,r)+" "+q(h.LINK,o.priority,r)+" "+q(h.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:q(h.BASE,t,r),bodyAttributes:q("bodyAttributes",n,r),htmlAttributes:q("htmlAttributes",a,r),link:q(h.LINK,u,r),meta:q(h.META,d,r),noscript:q(h.NOSCRIPT,o,r),script:q(h.SCRIPT,p,r),style:q(h.STYLE,i,r),title:q(h.TITLE,{title:l,titleAttributes:c},r)}},B=[],z=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=F({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),$=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),G="undefined"!=typeof document,H=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new z(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=G,H.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var Z=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===a.indexOf(l)&&a.push(l);var u=o.indexOf(l);-1!==u&&o.splice(u,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},W=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;V(h.BODY,e.bodyAttributes),V(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=L(e)),V(h.TITLE,t)}(u,d);var p={baseTag:Z(h.BASE,n),linkTags:Z(h.LINK,a),metaTags:Z(h.META,o),noscriptTags:Z(h.NOSCRIPT,i),scriptTags:Z(h.SCRIPT,l),styleTags:Z(h.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,f,m)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:A(h.LINK,["rel","href"],e),metaTags:A(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:A(h.SCRIPT,["src","innerHTML"],e),styleTags:A(h.STYLE,["cssText"],e),title:x(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:P(e,"prioritizeSeoTags")});H.canUseDOM?(t=o,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){W(t,(function(){K=null}))})):(W(t),K=null)):F&&(a=F(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:$.isRequired},Y.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return p({},a,((t={})[r.type]=i,t.titleAttributes=p({},o),t));case h.BODY:return p({},a,{bodyAttributes:p({},o)});case h.HTML:return p({},a,{htmlAttributes:p({},o)});default:return p({},a,((n={})[r.type]=p({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,Q),s=Object.keys(i).reduce((function(e,t){return e[E[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,o),l){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:s,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),a=p({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof z||(o=new z(o.context,o.instances)),o?r.createElement(Y,p({},a,{context:o.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,p({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case o:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case h:case g:case l:return e;default:return t}}case a:return t}}}function E(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return E(e)||k(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===g},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(7294),l=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return c.push(h),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),p=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(s.Component),o(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:l.func.isRequired}),o(h,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(6550),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>u,rU:()=>h});var r=n(6550),a=n(5068),o=n(7294),i=n(9318),s=n(7462),l=n(3366),c=n(8776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},m=o.forwardRef;void 0===m&&(m=f);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,o.createElement("a",u)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,u=e.replace,h=e.to,b=e.innerRef,v=(0,l.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(h,e.location),e.location),l=r?n.createHref(r):"",g=(0,s.Z)({},v,{href:l,navigate:function(){var t=d(h,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},v=o.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,w=e.location,k=e.sensitive,E=e.strict,S=e.style,x=e.to,_=e.innerRef,C=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=p(d(x,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:k,strict:E}):null,P=!!(y?y(A,n):A),L="function"==typeof m?m(P):m,R="function"==typeof S?S(P):S;P&&(L=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(L,u),R=(0,s.Z)({},R,f));var N=(0,s.Z)({"aria-current":P&&a||null,className:L,style:R,to:i},C);return b!==v?N.ref=t||_:N.innerRef=_,o.createElement(h,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>y,LX:()=>S,TH:()=>j,k6:()=>N,rs:()=>L,s6:()=>v});var r=n(5068),a=n(7294),o=n(5697),i=n.n(o),s=n(9318),l=n(8776),c=n(7462),u=n(4779),d=n.n(u),p=(n(9864),n(3366)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=a.createContext||function(e,t){var n,o,s="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},a.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},a.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},a.getValue=function(){return this.context[s]?this.context[s].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return c.contextTypes=((o={})[s]=i().object,o),{Provider:l,Consumer:c}},h=function(e){var t=g();return t.displayName=e,t},b=h("Router-History"),v=h("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},k=1e4,E=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return E<k&&(r[e]=o,E++),o}(n,{end:o,strict:s,sensitive:c}),a=r.regexp,i=r.keys,l=a.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return o&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,c.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===a.Children.count(e)}(s)&&(s=null),a.createElement(v.Provider,{value:o},o.match?s?"function"==typeof s?s(o):s:u?a.createElement(u,o):d?d(o):null:"function"==typeof s?s(o):null)}))},t}(a.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function A(e){return function(){(0,l.Z)(!1)}}function P(){}a.Component;var L=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var R=a.useContext;function N(){return R(b)}function j(){return R(v).location}},2408:(e,t,n)=>{"use strict";var r=n(7418),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,s=60110,l=60112;t.Suspense=60113;var c=60115,u=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),s=d("react.context"),l=d("react.forward_ref"),t.Suspense=d("react.suspense"),c=d("react.memo"),u=d("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function f(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function h(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=h.prototype;var y=v.prototype=new b;y.constructor=v,r(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},k=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,o={},i=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,r)&&!E.hasOwnProperty(r)&&(o[r]=t[r]);var l=arguments.length-2;if(1===l)o.children=n;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===o[r]&&(o[r]=l[r]);return{$$typeof:a,type:e,key:i,ref:s,props:o,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var _=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case a:case o:l=!0}}if(l)return i=i(l=e),e=""===r?"."+C(l,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(_,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(x(i)&&(i=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(_,"$&/")+"/")+e)),t.push(i)),1;if(l=0,r=""===r?".":r+":",Array.isArray(e))for(var c=0;c<e.length;c++){var u=r+C(s=e[c],c);l+=T(s,t,n,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=T(s=s.value,t,n,u=r+C(s,c++),i);else if("object"===s)throw t=""+e,Error(f(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return l}function A(e,t,n){if(null==e)return e;var r=[],a=0;return T(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function P(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var L={current:null};function R(){var e=L.current;if(null===e)throw Error(f(321));return e}var N={ReactCurrentDispatcher:L,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(f(143));return e}},t.Component=h,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var o=r({},e.props),i=e.key,s=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,l=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)k.call(t,u)&&!E.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=n;else if(1<u){c=Array(u);for(var d=0;d<u;d++)c[d]=arguments[d+2];o.children=c}return{$$typeof:a,type:e.type,key:i,ref:s,props:o,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:P}},t.memo=function(e,t){return{$$typeof:c,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return R().useCallback(e,t)},t.useContext=function(e,t){return R().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return R().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return R().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return R().useLayoutEffect(e,t)},t.useMemo=function(e,t){return R().useMemo(e,t)},t.useReducer=function(e,t,n){return R().useReducer(e,t,n)},t.useRef=function(e){return R().useRef(e)},t.useState=function(e){return R().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,a,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var c=null,u=null,d=function(){if(null!==c)try{var e=t.unstable_now();c(!0,e),c=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==c?setTimeout(n,0,e):(c=e,setTimeout(d,0))},r=function(e,t){u=setTimeout(e,t)},a=function(){clearTimeout(u)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,f=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,h=null,b=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,k=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+v;try{h(!0,e)?k.postMessage(null):(g=!1,h=null)}catch(n){throw k.postMessage(null),n}}else g=!1},n=function(e){h=e,g||(g=!0,k.postMessage(null))},r=function(e,n){b=p((function(){e(t.unstable_now())}),n)},a=function(){f(b),b=-1}}function E(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,a=e[r];if(!(void 0!==a&&0<_(a,t)))break e;e[r]=t,e[n]=a,n=r}}function S(e){return void 0===(e=e[0])?null:e}function x(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],s=o+1,l=e[s];if(void 0!==i&&0>_(i,n))void 0!==l&&0>_(l,i)?(e[r]=l,e[s]=n,r=s):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==l&&0>_(l,n)))break e;e[r]=l,e[s]=n,r=s}}}return t}return null}function _(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],A=1,P=null,L=3,R=!1,N=!1,j=!1;function O(e){for(var t=S(T);null!==t;){if(null===t.callback)x(T);else{if(!(t.startTime<=e))break;x(T),t.sortIndex=t.expirationTime,E(C,t)}t=S(T)}}function I(e){if(j=!1,O(e),!N)if(null!==S(C))N=!0,n(D);else{var t=S(T);null!==t&&r(I,t.startTime-e)}}function D(e,n){N=!1,j&&(j=!1,a()),R=!0;var o=L;try{for(O(n),P=S(C);null!==P&&(!(P.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=P.callback;if("function"==typeof i){P.callback=null,L=P.priorityLevel;var s=i(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?P.callback=s:P===S(C)&&x(C),O(n)}else x(C);P=S(C)}if(null!==P)var l=!0;else{var c=S(T);null!==c&&r(I,c.startTime-n),l=!1}return l}finally{P=null,L=o,R=!1}}var M=o;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||R||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return L},t.unstable_getFirstCallbackNode=function(){return S(C)},t.unstable_next=function(e){switch(L){case 1:case 2:case 3:var t=3;break;default:t=L}var n=L;L=t;try{return e()}finally{L=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=L;L=e;try{return t()}finally{L=n}},t.unstable_scheduleCallback=function(e,o,i){var s=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?s+i:s:i=s,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:A++,callback:o,priorityLevel:e,startTime:i,expirationTime:l=i+l,sortIndex:-1},i>s?(e.sortIndex=i,E(T,e),null===S(C)&&e===S(T)&&(j?a():j=!0,r(I,i-s))):(e.sortIndex=l,E(C,e),N||R||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=L;return function(){var n=L;L=t;try{return e.apply(this,arguments)}finally{L=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<o.length;l++){var c=o[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(a=n?n.call(r,u,d,c):void 0)||void 0===a&&u!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,s=r.useLayoutEffect,l=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!a(e,n)}catch(r){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=o({inst:{value:n,getSnapshot:t}}),a=r[0].inst,u=r[1];return s((function(){a.value=n,a.getSnapshot=t,c(a)&&u({inst:a})}),[e,n,t]),i((function(){return c(a)&&u({inst:a}),e((function(){c(a)&&u({inst:a})}))}),[e]),l(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:u},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Mateusz D\u0105browski",tagline:"Automate Marketing Automation",url:"https://mateuszdabrowski.pl",baseUrl:"/",trailingSlash:!0,favicon:"img/favicon.ico",organizationName:"MateuszDabrowski",projectName:"mateuszdabrowski.pl",onBrokenLinks:"warn",onBrokenMarkdownLinks:"warn",customFields:{description:'Personal website focused on making the most out of Salesforce Marketing Cloud. let code = do("our job").',keywords:["Mateusz D\u0105browski","mateuszdabrowski","Salesforce","Marketing Cloud","Salesforce Marketing Cloud","SFMC","Interaction Studio","Personalization","JavaScript","AMPScript","SSJS","SQL","JS"]},markdown:{mermaid:!0},themeConfig:{image:"img/og/og-image-base.png",defaultMode:"dark",respectPrefersColorScheme:!0,metadata:[{name:"author",content:"Mateusz D\u0105browski"},{name:"theme-color",content:"#212121"},{name:"msapplication-TileColor",content:"#F6B355"}],docs:{sidebar:{autoCollapseCategories:!0,hideable:!1},versionPersistence:"localStorage"},announcementBar:{id:"announcementBar",content:'\ud83d\udce7 Looking for more SFMC-related spam? Happy to help with my new <a href="/sites/newsletter/" style="text-decoration: underline">Newsletter</a>. Coming to your inbox in 2024 \ud83d\udce7',backgroundColor:"#0176d3",textColor:"#fffffe",isCloseable:!0},navbar:{logo:{alt:"Mateusz D\u0105browski Logo",src:"img/logo-horizontal-light-2x.png",srcDark:"img/logo-horizontal-dark-2x.png"},items:[{label:"Docs",to:"docs",activeBasePath:"docs",position:"left",items:[{label:"Zen of SFMC",type:"doc",docId:"zen-of-sfmc"},{label:"SSJS",to:"docs/category/ssjs/"},{label:"JavaScript",to:"docs/category/javascript/"},{label:"AMPScript",to:"docs/category/ampscript/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql/"},{label:"SFMC Config",to:"docs/category/sfmc-config/"},{label:"MC Personalization",to:"docs/category/mc-personalization/"}]},{label:"Snippets",to:"docs",activeBasePath:"docs",position:"left",items:[{label:"SSJS",to:"docs/category/ssjs-snippets/"},{label:"JavaScript",to:"docs/category/js-snippets/"},{label:"AMPScript",to:"docs/category/ampscript-snippets/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql-snippets/"},{label:"MC Personalization",to:"docs/category/mc-personalization-snippets/"}]},{label:"Webinars",to:"docs/category/sfmc-webinars/",position:"left",items:[{label:"SFMC Account Architecture",to:"docs/webinars/sfmc-webinar-account-architecture"},{label:"Architecting Web Solutions",to:"docs/webinars/sfmc-webinar-architecting-web-solutions"},{label:"Cloud Page Apps",to:"docs/webinars/sfmc-webinar-cloud-page-apps"}]},{label:"FAQ",to:"sites/category/faq",activeBasePath:"sites/faq",position:"left",items:[{label:"How to get SFMC Demo Account",to:"sites/faq/how-to-get-sfmc-hands-on-experience/"},{label:"How to get SF Certification Vouchers",to:"sites/faq/how-to-get-sf-certification-vouchers/"}]},{label:"Ideas",to:"sites/category/ideas",activeBasePath:"sites/ideas",position:"left",items:[{label:"Marketing Cloud",to:"sites/ideas/marketing-cloud-ideas/"},{label:"MC Personalization",to:"sites/ideas/mc-personalization-ideas/"}]},{label:"Tags",to:"docs/tags",position:"left"},{label:"Newsletter",to:"sites/newsletter",position:"left"},{href:"https://www.linkedin.com/in/mateusz-dabrowski-pl",position:"right",className:"header-linkedin-link","aria-label":"LinkedIn Profile"},{href:"https://trailblazer.me/id/madabrowski",position:"right",className:"header-salesforce-link","aria-label":"Trailblazer Profile"},{href:"https://github.com/MateuszDabrowski",position:"right",className:"header-github-link","aria-label":"GitHub repository"}],hideOnScroll:!1},prism:{defaultLanguage:"javascript",theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},mermaid:{theme:{light:"neutral",dark:"dark"},options:{}},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Zen of SFMC",to:"docs/zen-of-sfmc"},{label:"SSJS",to:"docs/category/ssjs/"},{label:"JavaScript",to:"docs/category/javascript/"},{label:"AMPScript",to:"docs/category/ampscript/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql/"},{label:"SFMC Config",to:"docs/category/sfmc-config/"},{label:"MC Personalization",to:"docs/category/mc-personalization/"}]},{title:"Snippets",items:[{label:"SSJS",to:"docs/category/ssjs-snippets/"},{label:"JavaScript",to:"docs/category/js-snippets/"},{label:"AMPScript",to:"docs/category/ampscript-snippets/"},{label:"SFMC SQL",to:"docs/category/sfmc-sql-snippets/"},{label:"MC Personalization",to:"docs/category/mc-personalization-snippets/"}]},{title:"My",items:[{label:"Newsletter",to:"sites/newsletter"},{label:"Webinars",to:"docs/category/sfmc-webinars"},{label:"Toolset",to:"sites/my-toolset"},{label:"Ideas",to:"sites/category/ideas"},{label:"FAQ",to:"sites/category/faq"}]},{title:"Legal",items:[{label:"Licence & Attribution",to:"sites/licence"},{label:"Privacy",to:"sites/privacy"}]}]},algolia:{appId:"F4XVDD6BM8",apiKey:"d7932184e92b94d052fab9cea784b13f",indexName:"mateuszdabrowski",placeholder:"Search Docs & Snipptes",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{path:"docs",routeBasePath:"docs",include:["**/*.md","**/*.mdx"],sidebarPath:"/Users/md/Documents/Code/JS/md/docs/docsSidebar.js",showLastUpdateAuthor:!0,showLastUpdateTime:!0,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/"},theme:{customCss:"/Users/md/Documents/Code/JS/md/src/css/custom.css"},sitemap:{changefreq:"weekly",priority:.5},gtag:{trackingID:"GTM-N46LB5K",anonymizeIP:!0}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"sites",path:"sites",routeBasePath:"sites",include:["**/*.md","**/*.mdx"],sidebarPath:"/Users/md/Documents/Code/JS/md/sites/sitesSidebar.js",showLastUpdateAuthor:!0,showLastUpdateTime:!0,editUrl:"https://github.com/MateuszDabrowski/mateuszdabrowski.pl/edit/master/"}],["@docusaurus/plugin-ideal-image",{quality:70,max:1030,min:640,steps:2}],["@docusaurus/plugin-client-redirects",{redirects:[{from:["/docs/sql/sfmc-sql-snippet-enhanced-send-log/","/docs/usecase/sfmc-enhanced-send-log/"],to:"/docs/config/sfmc-enhanced-send-log/"},{from:["/docs/config/sfmc-config-behavioral-triggers/","/docs/usecase/sfmc-behavioral-triggers/"],to:"/docs/config/sfmc-behavioral-triggers/"},{from:["/docs/usecase/sfmc-contact-deletion/"],to:"/docs/config/sfmc-contact-deletion/"},{from:["/docs/usecase/sfmc-code-resource/"],to:"/docs/config/sfmc-code-resource/"},{from:["/docs/appexchange/sfmc-appexchange-overview/","/docs/config/sfmc-config-appexchange-solutions/"],to:"/docs/config/sfmc-appexchange-solutions/"},{from:["/docs/config/sfmc-config-permissions/"],to:"/docs/js/snippets/export-import-document-sfmc-roles/"},{from:["/docs/config/sfmc-permissions/"],to:"/docs/js/snippets/export-import-document-sfmc-roles/"},{from:["/docs/config/sfmc-config-system-data-views/"],to:"/docs/config/sfmc-system-data-views/"},{from:["/docs/config/sfmc-config-features-on-demand/"],to:"/docs/config/sfmc-features-on-demand/"},{from:["/docs/ideas/engage-with-countdown/","/ideas/engage-with-countdown/","/docs/usecase/engage-with-countdown/"],to:"/docs/js/snippets/engage-with-countdown/"},{from:["/docs/ideas/tailor-with-data/","/ideas/tailor-with-data/","/docs/usecase/tailor-with-data/"],to:"/docs/js/snippets/tailor-with-data/"},{from:["/docs/ssjs/ssjs-snippet-ampscript-in-ssjs/"],to:"/docs/ssjs/snippets/ampscript-in-ssjs/"},{from:["/docs/ssjs/ssjs-snippet-mobileconnect-phone-change/"],to:"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/"},{from:["/docs/ssjs/ssjs-snippet-ssjs-script-template/"],to:"/docs/ssjs/snippets/ssjs-script-template/"},{from:["/docs/js/js-snippet-export-import-document-sfmc-roles/"],to:"/docs/js/snippets/export-import-document-sfmc-roles/"},{from:["/docs/sql/sfmc-sql-snippet-debugging-email-sends/"],to:"/docs/sql/snippets/sfmc-sql-debugging-email-sends/"},{from:["/docs/sql/sfmc-sql-snippet-debugging-value-length/"],to:"/docs/sql/snippets/sfmc-sql-debugging-value-length/"},{from:["/docs/usecase/sfmc-cloud-apps/","/docs/usecase/sfmc-cloud-page-apps/"],to:"/docs/ssjs/snippets/sfmc-cloud-page-apps/"},{from:["/docs/category/interaction-studio/"],to:"/docs/category/mc-personalization/"},{from:["/docs/interaction-studio/is-catalog-architecture/"],to:"/docs/interaction-studio/mcp-catalog-architecture/"},{from:["/docs/interaction-studio/is-open-time-email/"],to:"/docs/interaction-studio/mcp-open-time-email/"},{from:["/docs/category/interaction-studio-snippets/"],to:"/docs/category/mc-personalization-snippets/"},{from:["/docs/interaction-studio/snippets/is-catalog-etl-metadata-viewer/"],to:"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/"},{from:["/sites/ideas/interaction-studio-ideas/"],to:"/sites/ideas/mc-personalization-ideas/"},{from:["/docs/sql/"],to:"/docs/category/sfmc-sql/"},{from:["/docs/ssjs/"],to:"/docs/category/ssjs/"},{from:["/docs/sfmc-webinars/"],to:"/docs/category/sfmc-webinars/"},{from:["/docs/category/sfmc-use-cases/"],to:"/docs/category/sfmc-config/"},{from:["/docs/interaction-studio/"],to:"/docs/category/mc-personalization/"},{from:["/ideas/","/sites/ideas/"],to:"/sites/ideas/marketing-cloud-ideas/"}]}],"@docusaurus/theme-mermaid"],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",staticDirectories:["static"],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/docs/tags/-871":{"__comp":"3720c009","__context":{"plugin":"6ef4e5a9"},"tags":"55960ee5"},"/docs/tags/amp-script/-2c5":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"8440116e"},"/docs/tags/analytics/-7ca":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"e5aa2e7b"},"/docs/tags/app-exchange/-381":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"09792c4b"},"/docs/tags/app/-3cf":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"78bdd589"},"/docs/tags/automation/-21d":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"3b360413"},"/docs/tags/behavioral-triggers/-f5a":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"b463a77c"},"/docs/tags/best-practice/-91a":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"a6709703"},"/docs/tags/cloud-page/-606":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"6f35f557"},"/docs/tags/configuration/-14e":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"ce321ae3"},"/docs/tags/crm/-bc1":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"420d9621"},"/docs/tags/data-extensions/-5d0":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"f3b2d393"},"/docs/tags/data-management/-e83":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"05bf1b0a"},"/docs/tags/debugging/-61d":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"9177d15f"},"/docs/tags/deliverability/-565":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"f881cc1a"},"/docs/tags/einstein/-891":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"8e6f5683"},"/docs/tags/eloqua/-04a":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"9a63677c"},"/docs/tags/email/-4e7":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"e2615d27"},"/docs/tags/integration/-d6e":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"0b7df9a2"},"/docs/tags/interaction-studio/-d34":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"cb12d9b9"},"/docs/tags/java-script/-e74":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"7e516c75"},"/docs/tags/journey/-1df":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"2b07918c"},"/docs/tags/marketing-cloud-personalization/-c50":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"75f11010"},"/docs/tags/marketing-cloud/-acb":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"48b2f688"},"/docs/tags/performance/-b47":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"9e4ad429"},"/docs/tags/personalisation/-256":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"6a99b79c"},"/docs/tags/setup/-e61":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"c7794043"},"/docs/tags/sms/-d5b":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"409b673b"},"/docs/tags/snippet/-1d3":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"8a538aec"},"/docs/tags/sql/-af9":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"c0a0d864"},"/docs/tags/ssjs/-d1c":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"81e44c7d"},"/docs/tags/style-guide/-e50":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"655aa231"},"/docs/tags/type-script/-3e8":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"ff2c7cca"},"/docs/tags/users/-811":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"9944d2ae"},"/docs/tags/webinar/-d03":{"__comp":"df203c0f","__context":{"plugin":"6ef4e5a9"},"tag":"7a40f54e"},"/search/-a24":{"__comp":"1a4e3797","__context":{"plugin":"5ad68b42"}},"/sites/tags/-80b":{"__comp":"3720c009","__context":{"plugin":"f4b177ec"},"tags":"c792d462"},"/sites/tags/best-practice/-06e":{"__comp":"df203c0f","__context":{"plugin":"f4b177ec"},"tag":"e3f02ea0"},"/sites/tags/faq/-40a":{"__comp":"df203c0f","__context":{"plugin":"f4b177ec"},"tag":"734af923"},"/sites/tags/interaction-studio/-1d8":{"__comp":"df203c0f","__context":{"plugin":"f4b177ec"},"tag":"7eaafb14"},"/sites/tags/marketing-cloud-personalization/-2dc":{"__comp":"df203c0f","__context":{"plugin":"f4b177ec"},"tag":"369b6fa3"},"/sites/tags/marketing-cloud/-ebc":{"__comp":"df203c0f","__context":{"plugin":"f4b177ec"},"tag":"3b7e54b4"},"/sites/tags/personalization/-58c":{"__comp":"df203c0f","__context":{"plugin":"f4b177ec"},"tag":"fcb5ea75"},"/docs/-496":{"__comp":"1be78505","__context":{"plugin":"6ef4e5a9"},"versionMetadata":"935f2afb"},"/docs/-d13":{"__comp":"17896441","content":"33ffb019"},"/docs/ampscript/ampscript-style-guide/-e83":{"__comp":"17896441","content":"9be7a4ef"},"/docs/category/ampscript-snippets/-0ef":{"__comp":"14eb3368","categoryGeneratedIndex":"dfa9382d"},"/docs/category/ampscript/-e32":{"__comp":"14eb3368","categoryGeneratedIndex":"ff324314"},"/docs/category/javascript/-ea1":{"__comp":"14eb3368","categoryGeneratedIndex":"45ce19ba"},"/docs/category/js-snippets/-8cf":{"__comp":"14eb3368","categoryGeneratedIndex":"d2c975d1"},"/docs/category/mc-personalization-snippets/-c5b":{"__comp":"14eb3368","categoryGeneratedIndex":"c60f9f65"},"/docs/category/mc-personalization/-ae2":{"__comp":"14eb3368","categoryGeneratedIndex":"7046da09"},"/docs/category/serverside-code/-0ef":{"__comp":"14eb3368","categoryGeneratedIndex":"b33fbe49"},"/docs/category/sfmc-config/-92c":{"__comp":"14eb3368","categoryGeneratedIndex":"99db9621"},"/docs/category/sfmc-sql-snippets/-e14":{"__comp":"14eb3368","categoryGeneratedIndex":"fa7b3a47"},"/docs/category/sfmc-sql/-dea":{"__comp":"14eb3368","categoryGeneratedIndex":"cafad187"},"/docs/category/sfmc-webinars/-679":{"__comp":"14eb3368","categoryGeneratedIndex":"0e89a207"},"/docs/category/ssjs-snippets/-86b":{"__comp":"14eb3368","categoryGeneratedIndex":"66b75e7a"},"/docs/category/ssjs/-b2a":{"__comp":"14eb3368","categoryGeneratedIndex":"42b43273"},"/docs/config/sfmc-appexchange-solutions/-b71":{"__comp":"17896441","content":"c8a2287d"},"/docs/config/sfmc-behavioral-triggers/-66a":{"__comp":"17896441","content":"3365a9e9"},"/docs/config/sfmc-code-resource/-bc5":{"__comp":"17896441","content":"a8b77297"},"/docs/config/sfmc-contact-deletion/-806":{"__comp":"17896441","content":"0ae20921"},"/docs/config/sfmc-enhanced-send-log/-68f":{"__comp":"17896441","content":"f564aeae"},"/docs/config/sfmc-features-on-demand/-499":{"__comp":"17896441","content":"b52e5d8d"},"/docs/config/sfmc-mcc-integration-patterns/-d62":{"__comp":"17896441","content":"13f9d961"},"/docs/config/sfmc-mobile-connect-data-views/-1f6":{"__comp":"17896441","content":"612d51b5"},"/docs/config/sfmc-system-data-views/-5bd":{"__comp":"17896441","content":"7f9f5c99"},"/docs/interaction-studio/mcp-catalog-architecture/-339":{"__comp":"17896441","content":"14add631"},"/docs/interaction-studio/mcp-open-time-email/-f61":{"__comp":"17896441","content":"fe4d0c3d"},"/docs/interaction-studio/mcp-serverside-code-basics/-d80":{"__comp":"17896441","content":"240325d0"},"/docs/interaction-studio/mcp-serverside-code-properties/-bf2":{"__comp":"17896441","content":"937990e1"},"/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/-7d9":{"__comp":"17896441","content":"fd9368c3"},"/docs/js/js-dom/-3e7":{"__comp":"17896441","content":"ecd0154e"},"/docs/js/js-if-and-switch/-ac9":{"__comp":"17896441","content":"1843ef45"},"/docs/js/js-loops/-809":{"__comp":"17896441","content":"0cb3f831"},"/docs/js/snippets/engage-with-countdown/-c2a":{"__comp":"17896441","content":"7f3cd917"},"/docs/js/snippets/export-import-document-sfmc-roles/-3a0":{"__comp":"17896441","content":"ec6dc5c4"},"/docs/js/snippets/tailor-with-data/-bb9":{"__comp":"17896441","content":"407fe916"},"/docs/sql/sfmc-sql-aggregate-functions/-4cd":{"__comp":"17896441","content":"30084dac"},"/docs/sql/sfmc-sql-basics/-626":{"__comp":"17896441","content":"b840d82f"},"/docs/sql/sfmc-sql-case/-032":{"__comp":"17896441","content":"c64b8421"},"/docs/sql/sfmc-sql-conversion-functions/-732":{"__comp":"17896441","content":"d4ed38e0"},"/docs/sql/sfmc-sql-date-functions/-4a6":{"__comp":"17896441","content":"1328d02f"},"/docs/sql/sfmc-sql-from/-3c2":{"__comp":"17896441","content":"20e039ae"},"/docs/sql/sfmc-sql-join/-de4":{"__comp":"17896441","content":"5ee690fc"},"/docs/sql/sfmc-sql-like/-5e2":{"__comp":"17896441","content":"6d83c2a5"},"/docs/sql/sfmc-sql-null-functions/-789":{"__comp":"17896441","content":"e5fc05e6"},"/docs/sql/sfmc-sql-numeric-functions/-dc8":{"__comp":"17896441","content":"bb5d57b6"},"/docs/sql/sfmc-sql-select/-7c1":{"__comp":"17896441","content":"b39e9a29"},"/docs/sql/sfmc-sql-string-functions/-a6e":{"__comp":"17896441","content":"5ee7ecad"},"/docs/sql/sfmc-sql-style-guide/-f0a":{"__comp":"17896441","content":"ecbe7f2c"},"/docs/sql/sfmc-sql-where/-633":{"__comp":"17896441","content":"509f2ea4"},"/docs/sql/snippets/sfmc-sql-debugging-email-sends/-dde":{"__comp":"17896441","content":"d44a7d50"},"/docs/sql/snippets/sfmc-sql-debugging-value-length/-e61":{"__comp":"17896441","content":"18f12793"},"/docs/ssjs/debugging-ssjs/-b7f":{"__comp":"17896441","content":"92cda9bf"},"/docs/ssjs/snippets/ampscript-in-ssjs/-a8c":{"__comp":"17896441","content":"7827587b"},"/docs/ssjs/snippets/sfmc-cloud-page-apps/-bd9":{"__comp":"17896441","content":"2cf43088"},"/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/-3f3":{"__comp":"17896441","content":"b84a6020"},"/docs/ssjs/snippets/ssjs-script-template/-0fd":{"__comp":"17896441","content":"dc8b40ff"},"/docs/ssjs/ssjs-if-and-switch/-675":{"__comp":"17896441","content":"67a57efa"},"/docs/ssjs/ssjs-loops/-e7c":{"__comp":"17896441","content":"22145d1a"},"/docs/ssjs/ssjs-style-guide/-d86":{"__comp":"17896441","content":"d5687ba7"},"/docs/ssjs/ssjs-vs-ampscript-performance/-a13":{"__comp":"17896441","content":"ff6cdf17"},"/docs/webinars/sfmc-webinar-account-architecture/-8c9":{"__comp":"17896441","content":"edb10261"},"/docs/webinars/sfmc-webinar-architecting-web-solutions/-7d1":{"__comp":"17896441","content":"15878b2f"},"/docs/webinars/sfmc-webinar-cloud-page-apps/-28d":{"__comp":"17896441","content":"4d6aece4"},"/docs/zen-of-sfmc/-24d":{"__comp":"17896441","content":"aeba84fb"},"/sites/-1e0":{"__comp":"1be78505","__context":{"plugin":"f4b177ec"},"versionMetadata":"ba7840dc"},"/sites/category/faq/-a76":{"__comp":"14eb3368","categoryGeneratedIndex":"b8693892"},"/sites/category/ideas/-25e":{"__comp":"14eb3368","categoryGeneratedIndex":"ecf138d3"},"/sites/faq/how-to-get-sf-certification-vouchers/-a25":{"__comp":"17896441","content":"1ad5d13a"},"/sites/faq/how-to-get-sfmc-hands-on-experience/-55d":{"__comp":"17896441","content":"81fb7942"},"/sites/ideas/marketing-cloud-ideas/-f06":{"__comp":"17896441","content":"2e2f252f"},"/sites/ideas/mc-personalization-ideas/-e39":{"__comp":"17896441","content":"8dfb128c"},"/sites/licence/-404":{"__comp":"17896441","content":"772c8612"},"/sites/my-toolset/-7ae":{"__comp":"17896441","content":"139f0dd3"},"/sites/newsletter/-8b7":{"__comp":"17896441","content":"beb9716f"},"/sites/privacy/-6e8":{"__comp":"17896441","content":"06bea203"},"/-f16":{"__comp":"c4f5d8e4","__context":{"plugin":"d164ef0a"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9717,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/runtime~main.b0a683b9.js b/assets/js/runtime~main.b0a683b9.js new file mode 100644 index 000000000..58413308e --- /dev/null +++ b/assets/js/runtime~main.b0a683b9.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,f,c,d={},b={};function t(e){var a=b[e];if(void 0!==a)return a.exports;var f=b[e]={exports:{}};return d[e].call(f.exports,f,f.exports,t),f.exports}t.m=d,e=[],t.O=(a,f,c,d)=>{if(!f){var b=1/0;for(i=0;i<e.length;i++){f=e[i][0],c=e[i][1],d=e[i][2];for(var r=!0,o=0;o<f.length;o++)(!1&d||b>=d)&&Object.keys(t.O).every((e=>t.O[e](f[o])))?f.splice(o--,1):(r=!1,d<b&&(b=d));if(r){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[f,c,d]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);t.r(d);var b={};a=a||[null,f({}),f([]),f(f)];for(var r=2&c&&e;"object"==typeof r&&!~a.indexOf(r);r=f(r))Object.getOwnPropertyNames(r).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,t.d(d,b),d},t.d=(e,a)=>{for(var f in a)t.o(a,f)&&!t.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,f)=>(t.f[f](e,a),a)),[])),t.u=e=>"assets/js/"+({53:"935f2afb",130:"0ae20921",299:"6ef4e5a9",362:"75f11010",633:"fcb5ea75",770:"ba7840dc",800:"1328d02f",840:"5ee7ecad",924:"b39e9a29",927:"42b43273",945:"67a57efa",952:"a8b77297",998:"e5fc05e6",1074:"dfa9382d",1092:"7f9f5c99",1099:"407fe916",1247:"d164ef0a",1351:"7eaafb14",1441:"d4ed38e0",1572:"f564aeae",1654:"ecd0154e",1694:"9be7a4ef",1697:"7a40f54e",1706:"1ad5d13a",1837:"ce321ae3",1872:"20e039ae",1918:"81fb7942",2050:"1843ef45",2163:"ff6cdf17",2244:"8440116e",2493:"929714a5",2618:"b463a77c",2640:"9944d2ae",2731:"15878b2f",2769:"beb9716f",2831:"655aa231",2907:"f881cc1a",3009:"8a538aec",3108:"612d51b5",3157:"772c8612",3207:"22145d1a",3265:"734af923",3275:"b33fbe49",3447:"cafad187",3466:"4d6aece4",3605:"ff324314",3637:"48b2f688",3664:"369b6fa3",3687:"30084dac",3751:"3720c009",3786:"c8a2287d",3864:"8e6f5683",3877:"05bf1b0a",4027:"fa7b3a47",4121:"55960ee5",4134:"6d83c2a5",4195:"c4f5d8e4",4200:"92cda9bf",4219:"7f3cd917",4331:"2e2f252f",4368:"a94703ab",4414:"66b75e7a",4502:"dc8b40ff",4507:"7827587b",4514:"d44a7d50",4650:"a6709703",4715:"8dfb128c",4799:"18f12793",4853:"7046da09",4941:"c792d462",5169:"9a63677c",5244:"240325d0",5295:"6f35f557",5354:"aeba84fb",5406:"9e4ad429",5413:"5ad68b42",5590:"81e44c7d",5605:"0cb3f831",5647:"99db9621",5811:"b84a6020",5831:"3b360413",6050:"f4b177ec",6091:"78bdd589",6167:"2cf43088",6440:"9177d15f",6576:"33ffb019",6583:"c0a0d864",6606:"09792c4b",6639:"c7794043",6795:"0b7df9a2",7008:"6a99b79c",7120:"ecbe7f2c",7207:"d5687ba7",7215:"14add631",7279:"420d9621",7531:"937990e1",7542:"b840d82f",7576:"ecf138d3",7670:"b8693892",7706:"ff2c7cca",7805:"fd9368c3",7873:"ec6dc5c4",7918:"17896441",7920:"1a4e3797",7921:"c64b8421",7983:"cb12d9b9",8421:"e5aa2e7b",8518:"a7bd4aaa",8537:"13f9d961",8645:"3365a9e9",8693:"b52e5d8d",8700:"fe4d0c3d",8773:"bb5d57b6",8798:"2b07918c",8819:"edb10261",8833:"c60f9f65",8845:"06bea203",8847:"3b7e54b4",9021:"409b673b",9117:"e2615d27",9134:"509f2ea4",9379:"e3f02ea0",9449:"d2c975d1",9484:"5ee690fc",9517:"139f0dd3",9661:"5e95c892",9817:"14eb3368",9855:"0e89a207",9865:"f3b2d393",9887:"45ce19ba",9922:"7e516c75",9924:"df203c0f"}[e]||e)+"."+{53:"fb7b5285",89:"ec26e043",130:"4f282c77",194:"d3822238",299:"cb5cf355",339:"5eb1b06a",362:"51fb09b8",633:"c5d8153c",770:"4e027f30",800:"75c32aa1",840:"03eab702",861:"031f60e4",868:"aaba0928",885:"03927ccf",924:"37e14d41",927:"37d4a00c",945:"0470c88d",952:"5786a4c2",998:"16e1e6aa",1074:"6fc496ec",1092:"3558effb",1099:"a95b4e8a",1247:"5dfdf68d",1308:"d88e366a",1351:"41c5fb03",1426:"51dbbb76",1441:"83ddf61b",1572:"007c6dbd",1644:"6a09559c",1654:"1b43ff83",1694:"b33b89ca",1697:"77fd8205",1706:"e01c73ea",1837:"7e3d354d",1872:"9ce9760a",1918:"c6e9c5b4",2005:"fab1d5ca",2050:"4145bf52",2153:"ba5319f1",2163:"66f64fbc",2244:"ae436dba",2491:"142e201b",2493:"4a927c7b",2494:"8c5c79ce",2618:"b5a80d88",2640:"30924c3e",2731:"be2fa562",2769:"0aeff59d",2788:"9cb2f862",2831:"8a8da211",2907:"c06a2035",2924:"5200593f",2950:"857e63af",3009:"56982abd",3108:"e39fe4d5",3157:"51679971",3177:"66020859",3207:"0a2eb044",3265:"66e54a0c",3275:"643e6335",3304:"44ae58a6",3343:"99c6e554",3447:"db005bf0",3466:"4cba0721",3605:"34bac101",3637:"6b3adc53",3664:"2659af38",3687:"dd2d0530",3751:"5613754b",3786:"d9d8783f",3864:"04266e36",3877:"13876b19",4027:"945299aa",4121:"f30931d4",4134:"900a528b",4168:"efe5e5a8",4195:"22e2e8ab",4200:"8f424d73",4219:"896568e6",4237:"dd6d72d0",4331:"75b39c57",4368:"010027ee",4414:"8467bdee",4502:"ed60aaed",4507:"5c2a3ddb",4514:"7eb973ab",4641:"d2f189f5",4650:"6d4ee4f3",4715:"255e587c",4799:"9100f5f4",4852:"480c4bbc",4853:"3aaf63ac",4941:"a0470937",5169:"0955f839",5244:"7bda18e2",5295:"12b190b2",5354:"ea4e46d2",5364:"d6ef04bc",5406:"4ea748c4",5413:"ef3c436d",5590:"4bc6f105",5605:"09bc0128",5622:"8bc30185",5647:"86977d30",5811:"b74538bf",5831:"a59b8a66",6050:"d55e6b4d",6091:"38c2e2c5",6167:"5c1dd59f",6440:"0dc44d60",6576:"c8948b17",6583:"309ed5ce",6606:"060c4844",6639:"41a1b140",6648:"874be767",6795:"276be331",6945:"a569def7",7008:"b0c3b401",7120:"cabea261",7207:"860b7216",7215:"4b638deb",7273:"b7681d25",7279:"f692ed56",7531:"dcd84fb0",7542:"93e628b2",7576:"93a412ab",7670:"99126ef3",7706:"f057c476",7805:"172e512b",7873:"a8be3632",7918:"7cdefb8f",7920:"e5687d1b",7921:"2653a86c",7973:"04e2016d",7983:"86429a06",8421:"84be1892",8518:"b1cb7e77",8537:"8c9e649b",8645:"53894df1",8693:"e2ac5676",8700:"08defbff",8773:"a77ec260",8798:"bfd74b30",8819:"1cab876a",8833:"7c0f6cf1",8845:"bb59e779",8847:"ee78072b",8932:"3e18a2bf",9021:"4d59d03e",9117:"892ab758",9134:"2daddc7a",9261:"c462d503",9277:"67e8f16f",9379:"3f96c5cf",9449:"00633d8b",9484:"f9c9811f",9517:"1a38ff23",9661:"d98fe6f3",9765:"ce649b7e",9817:"03ea700a",9855:"ca99072c",9865:"f3dfe2e5",9887:"938d0fd2",9922:"f8b1bb27",9924:"18eddc47"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},t.l=(e,a,f,d)=>{if(c[e])c[e].push(a);else{var b,r;if(void 0!==f)for(var o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var i=o[n];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")=="md:"+f){b=i;break}}b||(r=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,t.nc&&b.setAttribute("nonce",t.nc),b.setAttribute("data-webpack","md:"+f),b.src=e),c[e]=[a];var u=(a,f)=>{b.onerror=b.onload=null,clearTimeout(l);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(f))),a)return a(f)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),r&&document.head.appendChild(b)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918","935f2afb":"53","0ae20921":"130","6ef4e5a9":"299","75f11010":"362",fcb5ea75:"633",ba7840dc:"770","1328d02f":"800","5ee7ecad":"840",b39e9a29:"924","42b43273":"927","67a57efa":"945",a8b77297:"952",e5fc05e6:"998",dfa9382d:"1074","7f9f5c99":"1092","407fe916":"1099",d164ef0a:"1247","7eaafb14":"1351",d4ed38e0:"1441",f564aeae:"1572",ecd0154e:"1654","9be7a4ef":"1694","7a40f54e":"1697","1ad5d13a":"1706",ce321ae3:"1837","20e039ae":"1872","81fb7942":"1918","1843ef45":"2050",ff6cdf17:"2163","8440116e":"2244","929714a5":"2493",b463a77c:"2618","9944d2ae":"2640","15878b2f":"2731",beb9716f:"2769","655aa231":"2831",f881cc1a:"2907","8a538aec":"3009","612d51b5":"3108","772c8612":"3157","22145d1a":"3207","734af923":"3265",b33fbe49:"3275",cafad187:"3447","4d6aece4":"3466",ff324314:"3605","48b2f688":"3637","369b6fa3":"3664","30084dac":"3687","3720c009":"3751",c8a2287d:"3786","8e6f5683":"3864","05bf1b0a":"3877",fa7b3a47:"4027","55960ee5":"4121","6d83c2a5":"4134",c4f5d8e4:"4195","92cda9bf":"4200","7f3cd917":"4219","2e2f252f":"4331",a94703ab:"4368","66b75e7a":"4414",dc8b40ff:"4502","7827587b":"4507",d44a7d50:"4514",a6709703:"4650","8dfb128c":"4715","18f12793":"4799","7046da09":"4853",c792d462:"4941","9a63677c":"5169","240325d0":"5244","6f35f557":"5295",aeba84fb:"5354","9e4ad429":"5406","5ad68b42":"5413","81e44c7d":"5590","0cb3f831":"5605","99db9621":"5647",b84a6020:"5811","3b360413":"5831",f4b177ec:"6050","78bdd589":"6091","2cf43088":"6167","9177d15f":"6440","33ffb019":"6576",c0a0d864:"6583","09792c4b":"6606",c7794043:"6639","0b7df9a2":"6795","6a99b79c":"7008",ecbe7f2c:"7120",d5687ba7:"7207","14add631":"7215","420d9621":"7279","937990e1":"7531",b840d82f:"7542",ecf138d3:"7576",b8693892:"7670",ff2c7cca:"7706",fd9368c3:"7805",ec6dc5c4:"7873","1a4e3797":"7920",c64b8421:"7921",cb12d9b9:"7983",e5aa2e7b:"8421",a7bd4aaa:"8518","13f9d961":"8537","3365a9e9":"8645",b52e5d8d:"8693",fe4d0c3d:"8700",bb5d57b6:"8773","2b07918c":"8798",edb10261:"8819",c60f9f65:"8833","06bea203":"8845","3b7e54b4":"8847","409b673b":"9021",e2615d27:"9117","509f2ea4":"9134",e3f02ea0:"9379",d2c975d1:"9449","5ee690fc":"9484","139f0dd3":"9517","5e95c892":"9661","14eb3368":"9817","0e89a207":"9855",f3b2d393:"9865","45ce19ba":"9887","7e516c75":"9922",df203c0f:"9924"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,f)=>{var c=t.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((f,d)=>c=e[a]=[f,d]));f.push(c[2]=d);var b=t.p+t.u(a),r=new Error;t.l(b,(f=>{if(t.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var d=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;r.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",r.name="ChunkLoadError",r.type=d,r.request=b,c[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,f)=>{var c,d,b=f[0],r=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(c in r)t.o(r,c)&&(t.m[c]=r[c]);if(o)var i=o(t)}for(a&&a(f);n<b.length;n++)d=b[n],t.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return t.O(i)},f=self.webpackChunkmd=self.webpackChunkmd||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.b2d63b24.js b/assets/js/runtime~main.b2d63b24.js deleted file mode 100644 index 5a0d7c415..000000000 --- a/assets/js/runtime~main.b2d63b24.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,f,d,c={},b={};function t(e){var a=b[e];if(void 0!==a)return a.exports;var f=b[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,t),f.loaded=!0,f.exports}t.m=c,t.c=b,e=[],t.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i<e.length;i++){f=e[i][0],d=e[i][1],c=e[i][2];for(var r=!0,o=0;o<f.length;o++)(!1&c||b>=c)&&Object.keys(t.O).every((e=>t.O[e](f[o])))?f.splice(o--,1):(r=!1,c<b&&(b=c));if(r){e.splice(i--,1);var n=d();void 0!==n&&(a=n)}}return a}c=c||0;for(var i=e.length;i>0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);t.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var r=2&d&&e;"object"==typeof r&&!~a.indexOf(r);r=f(r))Object.getOwnPropertyNames(r).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,t.d(c,b),c},t.d=(e,a)=>{for(var f in a)t.o(a,f)&&!t.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,f)=>(t.f[f](e,a),a)),[])),t.u=e=>"assets/js/"+({53:"935f2afb",130:"0ae20921",299:"6ef4e5a9",362:"75f11010",633:"fcb5ea75",770:"ba7840dc",800:"1328d02f",840:"5ee7ecad",924:"b39e9a29",927:"42b43273",945:"67a57efa",952:"a8b77297",998:"e5fc05e6",1074:"dfa9382d",1092:"7f9f5c99",1099:"407fe916",1247:"d164ef0a",1351:"7eaafb14",1441:"d4ed38e0",1572:"f564aeae",1654:"ecd0154e",1694:"9be7a4ef",1697:"7a40f54e",1706:"1ad5d13a",1837:"ce321ae3",1872:"20e039ae",1918:"81fb7942",2050:"1843ef45",2163:"ff6cdf17",2244:"8440116e",2618:"b463a77c",2640:"9944d2ae",2731:"15878b2f",2769:"beb9716f",2831:"655aa231",2907:"f881cc1a",3009:"8a538aec",3108:"612d51b5",3157:"772c8612",3207:"22145d1a",3265:"734af923",3275:"b33fbe49",3447:"cafad187",3466:"4d6aece4",3605:"ff324314",3637:"48b2f688",3664:"369b6fa3",3687:"30084dac",3751:"3720c009",3786:"c8a2287d",3864:"8e6f5683",3877:"05bf1b0a",4027:"fa7b3a47",4121:"55960ee5",4134:"6d83c2a5",4195:"c4f5d8e4",4200:"92cda9bf",4219:"7f3cd917",4331:"2e2f252f",4414:"66b75e7a",4502:"dc8b40ff",4507:"7827587b",4514:"d44a7d50",4650:"a6709703",4715:"8dfb128c",4799:"18f12793",4853:"7046da09",4941:"c792d462",5169:"9a63677c",5244:"240325d0",5295:"6f35f557",5354:"aeba84fb",5406:"9e4ad429",5413:"5ad68b42",5590:"81e44c7d",5605:"0cb3f831",5647:"99db9621",5811:"b84a6020",5831:"3b360413",6050:"f4b177ec",6091:"78bdd589",6167:"2cf43088",6440:"9177d15f",6576:"33ffb019",6583:"c0a0d864",6606:"09792c4b",6639:"c7794043",6795:"0b7df9a2",7008:"6a99b79c",7120:"ecbe7f2c",7207:"d5687ba7",7215:"14add631",7279:"420d9621",7531:"937990e1",7542:"b840d82f",7576:"ecf138d3",7670:"b8693892",7706:"ff2c7cca",7805:"fd9368c3",7873:"ec6dc5c4",7918:"17896441",7920:"1a4e3797",7921:"c64b8421",7983:"cb12d9b9",8421:"e5aa2e7b",8537:"13f9d961",8645:"3365a9e9",8693:"b52e5d8d",8700:"fe4d0c3d",8773:"bb5d57b6",8798:"2b07918c",8819:"edb10261",8833:"c60f9f65",8845:"06bea203",8847:"3b7e54b4",9021:"409b673b",9117:"e2615d27",9134:"509f2ea4",9379:"e3f02ea0",9449:"d2c975d1",9484:"5ee690fc",9514:"1be78505",9517:"139f0dd3",9817:"14eb3368",9855:"0e89a207",9865:"f3b2d393",9887:"45ce19ba",9922:"7e516c75",9924:"df203c0f"}[e]||e)+"."+{53:"fc80ed25",130:"c9e843a1",299:"cb5cf355",362:"669b6480",633:"49291732",770:"a5cbf57f",800:"94855e42",840:"7dfd9771",924:"8736aa8d",927:"37d4a00c",945:"7afccd58",952:"98a212dc",998:"eebfc85c",1074:"6fc496ec",1092:"283a3766",1099:"9f16b5e1",1247:"5dfdf68d",1351:"3ea7593f",1426:"71674b4b",1441:"4a5c20ff",1572:"7ebdc609",1654:"f2e5d890",1694:"8d8e7884",1697:"60f7c7e3",1706:"573648bd",1765:"bbf8e0e8",1837:"110e20cb",1872:"d0481e11",1918:"0b5c08e5",2050:"001f1829",2153:"ba5319f1",2163:"1c6a804c",2244:"c4f35040",2618:"2afc4922",2640:"7565d3dd",2731:"2e60eca3",2769:"3850ee5a",2831:"fc8c5aed",2907:"11f5b3c0",3009:"125cb74f",3108:"6e1d1434",3157:"e1066268",3207:"43f6683b",3265:"f5f662e0",3275:"bec08f3e",3447:"db005bf0",3466:"ad869df5",3605:"34bac101",3637:"f0eeff23",3664:"e8674569",3687:"ce88301b",3751:"465c883a",3786:"feb5464a",3864:"2ea92753",3877:"edf8973f",4027:"945299aa",4121:"d90f5bbc",4134:"0534db3b",4195:"8f51117e",4200:"c1740670",4219:"b05fc5c0",4248:"360e6c79",4331:"5cf41d20",4414:"8467bdee",4502:"885ab7e7",4507:"59bf63a4",4514:"d1e2179b",4650:"84b2269e",4715:"01423c01",4799:"eca4f6de",4853:"3aaf63ac",4941:"a0470937",5169:"4f4aa057",5244:"2d6dbe4f",5295:"0bd177a2",5354:"db0b222d",5406:"17fdd2f9",5413:"ef3c436d",5590:"eef205bf",5605:"0bbf7690",5647:"86977d30",5811:"1c18e841",5831:"da161dd4",6050:"d55e6b4d",6091:"4ea7e967",6167:"e4910f97",6316:"2009feb9",6440:"9dbda4fa",6576:"c602af21",6583:"e50fa5e0",6606:"6060a3e7",6639:"ba82b1ba",6795:"5f8000b0",6945:"a569def7",7008:"df1b5be0",7120:"13620c1b",7207:"6c478ae9",7215:"316e2c03",7279:"a7b1a4cb",7531:"64309f69",7542:"d2e54469",7576:"93a412ab",7670:"99126ef3",7706:"58ca14b1",7724:"4286755f",7805:"cd3f9f7b",7873:"60577ed4",7918:"957336a6",7920:"dcd342f8",7921:"ae233fe9",7983:"db528504",8421:"ef84462c",8537:"b940ac19",8645:"7010b386",8693:"ba7e203c",8700:"3a405712",8773:"0d958107",8798:"e2871f9b",8819:"87a0b6a3",8833:"7c0f6cf1",8845:"01f84522",8847:"19f43cb3",9021:"246861c2",9117:"c2585def",9134:"61b2f7a5",9379:"7d8a622b",9449:"00633d8b",9484:"579e0ecc",9487:"178ea76e",9514:"6fd0c9a9",9517:"86b16f74",9817:"96621dc4",9855:"ca99072c",9865:"dd9463de",9887:"938d0fd2",9922:"c476101a",9924:"6fd6f28b"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},t.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var b,r;if(void 0!==f)for(var o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var i=o[n];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")=="md:"+f){b=i;break}}b||(r=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,t.nc&&b.setAttribute("nonce",t.nc),b.setAttribute("data-webpack","md:"+f),b.src=e),d[e]=[a];var u=(a,f)=>{b.onerror=b.onload=null,clearTimeout(l);var c=d[e];if(delete d[e],b.parentNode&&b.parentNode.removeChild(b),c&&c.forEach((e=>e(f))),a)return a(f)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),r&&document.head.appendChild(b)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918","935f2afb":"53","0ae20921":"130","6ef4e5a9":"299","75f11010":"362",fcb5ea75:"633",ba7840dc:"770","1328d02f":"800","5ee7ecad":"840",b39e9a29:"924","42b43273":"927","67a57efa":"945",a8b77297:"952",e5fc05e6:"998",dfa9382d:"1074","7f9f5c99":"1092","407fe916":"1099",d164ef0a:"1247","7eaafb14":"1351",d4ed38e0:"1441",f564aeae:"1572",ecd0154e:"1654","9be7a4ef":"1694","7a40f54e":"1697","1ad5d13a":"1706",ce321ae3:"1837","20e039ae":"1872","81fb7942":"1918","1843ef45":"2050",ff6cdf17:"2163","8440116e":"2244",b463a77c:"2618","9944d2ae":"2640","15878b2f":"2731",beb9716f:"2769","655aa231":"2831",f881cc1a:"2907","8a538aec":"3009","612d51b5":"3108","772c8612":"3157","22145d1a":"3207","734af923":"3265",b33fbe49:"3275",cafad187:"3447","4d6aece4":"3466",ff324314:"3605","48b2f688":"3637","369b6fa3":"3664","30084dac":"3687","3720c009":"3751",c8a2287d:"3786","8e6f5683":"3864","05bf1b0a":"3877",fa7b3a47:"4027","55960ee5":"4121","6d83c2a5":"4134",c4f5d8e4:"4195","92cda9bf":"4200","7f3cd917":"4219","2e2f252f":"4331","66b75e7a":"4414",dc8b40ff:"4502","7827587b":"4507",d44a7d50:"4514",a6709703:"4650","8dfb128c":"4715","18f12793":"4799","7046da09":"4853",c792d462:"4941","9a63677c":"5169","240325d0":"5244","6f35f557":"5295",aeba84fb:"5354","9e4ad429":"5406","5ad68b42":"5413","81e44c7d":"5590","0cb3f831":"5605","99db9621":"5647",b84a6020:"5811","3b360413":"5831",f4b177ec:"6050","78bdd589":"6091","2cf43088":"6167","9177d15f":"6440","33ffb019":"6576",c0a0d864:"6583","09792c4b":"6606",c7794043:"6639","0b7df9a2":"6795","6a99b79c":"7008",ecbe7f2c:"7120",d5687ba7:"7207","14add631":"7215","420d9621":"7279","937990e1":"7531",b840d82f:"7542",ecf138d3:"7576",b8693892:"7670",ff2c7cca:"7706",fd9368c3:"7805",ec6dc5c4:"7873","1a4e3797":"7920",c64b8421:"7921",cb12d9b9:"7983",e5aa2e7b:"8421","13f9d961":"8537","3365a9e9":"8645",b52e5d8d:"8693",fe4d0c3d:"8700",bb5d57b6:"8773","2b07918c":"8798",edb10261:"8819",c60f9f65:"8833","06bea203":"8845","3b7e54b4":"8847","409b673b":"9021",e2615d27:"9117","509f2ea4":"9134",e3f02ea0:"9379",d2c975d1:"9449","5ee690fc":"9484","1be78505":"9514","139f0dd3":"9517","14eb3368":"9817","0e89a207":"9855",f3b2d393:"9865","45ce19ba":"9887","7e516c75":"9922",df203c0f:"9924"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,f)=>{var d=t.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=t.p+t.u(a),r=new Error;t.l(b,(f=>{if(t.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;r.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",r.name="ChunkLoadError",r.type=c,r.request=b,d[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],r=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in r)t.o(r,d)&&(t.m[d]=r[d]);if(o)var i=o(t)}for(a&&a(f);n<b.length;n++)c=b[n],t.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return t.O(i)},f=self.webpackChunkmd=self.webpackChunkmd||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})(); \ No newline at end of file diff --git a/certs/Salesforce/SF Business Analyst.pdf b/certs/Salesforce/SF Business Analyst.pdf new file mode 100644 index 0000000000000000000000000000000000000000..73d088506d23429d55b5550f8c644b91f77a5412 GIT binary patch literal 792884 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%0AdXLr4DdgUgUaI@tH%QABcEd&JdVufaq8p8 z@IlAn9X_M~f^xk}1v=c-q^CJPDW#(A<$#ovqz?o~77El^$l)|?d;ThK4|u(q$@Uky zqNNiIe0rr;*{e7F`glXBq@gjl*<qEb2+Y8t`<ppB5f1^Q0`_6@gh)_EZ!Dl(7jhsw zkb4G3Ob$ER^bDZd&^rTJBkVSC(J}4A$=GmfX;{>Qbe^~wZCOKYq*5>)BZ?2w7&&OF z_|9MzG0EUTCK)^<LBn$|=|j>B4LhvLutcI5G}Kma)%JU5D~17fipgk|)^9l8+Gu3v z-@F46VFiMnEreiGTL@T!_>mP59Z4-Al_N<p33M*><~uc<lFjHbbkdr#A{_aj%&7yF zd_c@CJv+@$yd|A%A?XksC-!SCF5DW>YX#h~1#1n~seS`4259cM?Y#qt4~dMMGThWa zdZ%y2x%4+AvLZ3ndeaGDtuPWn{<is2#g;tukN(~Ik4&LAS8S>GStFvNYqtBrM%P!} zU;`WOj!`4R>Kb+jyg>v@d@*i2Y=l?_e)A1FR<1-k`8ZBVy6MqgN8PF6(|!U9=t(6J zTYx0!t3#m0)HiA6`;RkPkKXrtquxfG7DwPk2Q41;IR@!OKQN{CY6Ih0`pb}-;l^JE zjhuqoqQW?XmMiO;6cZOaw4COul`ag>bokUQ8PK5~K?zu)ePVK8=c&I>r3d)!AJ#7I z7#bzLGE%qVh`ca#2Xk-eK!Zhgl0v(jWs>oTysCQJ$-s3>kN2Zj&@Ym@rBI>9E&h&U zNC_f$$Oi*07DIiQbq>zWxbXaFBOw({DCqX-<OVtFPkYN53aEWHN`s0I=ox?gDxWZZ z@hBzJ-kLMNQWQUxQIptC*%SzhKN2ozI0v~qYDqkz&6EQiYaX=X`>uFxd04lOG&Rk+ zY+wM?+r!J)T)FP+C4$byUr=N6K#krmigKX;uYLmvE!hzBZmMXp|GH}97AR$W5-4`p z?=w1}b<GxW{4x-C*CY}oosSu5^f+sYRss(SRn!WZfiD7#_0F_UEY0^SRczqN4tIT( z1^Q}&a(<J;UZ~m{^6tuuU`pRtLp-pGhO`$MDTjFBd3t(RQp*jC81`PRn+}Zy+j=av zmN@)^O8z!6XBR@mcjVcxqo~?!y#we?T0JjTDq-%C1^_3XglZ(?!fV`a1MXo56r7$m z?z0m9zBN=pT!q<sGA;<J23j52bzv*ae(0Dqr%S$&VjQV|S~lt@R~?Ps@zd8lVBHST z(H(wO1=t7jjyw5AR~VU-t6mqF&ui^YmmBy{t0PQyhF9_#iV2`T$3Z;4h1cCgl4DFA zS)#efBMn62xT9v-b{!_a*;OUsEbDMM_}FezHMs7f^Ou`^6&9chnb7y^6WZl)I#6Si zn5SKZieHW?ZG6?Q&cUxe&s*r9W|K`cxpW6-J#B^@nQC9GG1a4R1QXG>(ZCUfx_q;V zI;DvLzYyLTnKrHhZ(XLQ7x$3mS}5S^A(qdOIY!t~pUOnaqwoqT0pk01dR2!-xODhB zVBImNYxh5*%Op#d+X#Yto}w;Le3*yxX#08pt;`%nY1Li%5=bDz!w1BuV4}WV&jW() zkyczpZNZL<7#%-s2GV~cnDkkyiLdjCq;h@50Fki5vm0D|)hHPTPp2yRE$#+;@Pt9x zeDtfcy7R3Q05@-Wao^G^Y<J?mJKovRsIJpZ&v-W2?zc`@7vCZn%<WZV1#Zog9b?Cn z`D1@12yk}KuA_pM7<&-ieCz1B+=&U9#qZs>CF?jmm-j7-uR2$arMB=p^l0V|@?gw9 zga~cN*7MBX=h=A?QoCt~ze6{Y^gyMYZ=O8==(?`4l1!xo!)hIJ6R;YHdyMR$1eSbI z^0VKvDfPHH|5OO9CJo7mg94wDCpWR?J621EbzK5mo@x4g3nD2Fkm|ZUr9ian0~D9% zwY5W;`Jsng+6b_5Wfxlbx7T&Bt1>W<>l-6foo$T^&yoqMM(s%ncx>Lb#T<ETxP62} zYexA!gSqepHKx&VRHmmG(=2KkzAE+kt-~;O`$Fsu>Z_Akoyh4)lw=d^ftSCt8<OIv zGp-zuXAhEp-m~iv`mE57-!qMK*5VxVOih#gX44`V899aYkW=VzbJjD*J1c=E--H;9 z4BS!2Z$))W5;$h+AxPRQCndfAyQ9;Vw~kiN?{PJ>$|q2vnZs6$`8v^SVBIijO_jG@ zNX92El?cAtsEoUfpUWfdmbQtP^Ri*kQKoNgLFfafsO|@|-SdQb%+RVyJ#Ybw^*S;# z!3|y=H9?K4JV+CcvIxE|fvcugUuj|p?ir1q(P+AL=jZ&GJX3ZwJVRMJzN9tFTTG(f zr>f~)rWx9}^~Rj4+wwsex&lh0(BgZLxjiH{{&^&7Xn5-+5uIE}r0THC&sc|OY%X;4 z<m+p8eFc%TB*L%xHO9OwBa2V?N396^UC%B1wU#lLBX_vY6uV=k$Ma66ScMeAO2iD= zwin-|<TE6;*b!f%C_M*&OlIg%MC5iu$NxxEOx&jcdPF56I@vKV4u&#vq#b3XC0Hmm z<DMrqm56wuh>@EiMolpSASWJHe-IdB326IzlE!!RFzpFm8BY|?Qfjs7Pko*DsQ5A3 zplGW3P_nnFV4=QRcNbag*pSPy&4W?s;@J{Pe;UqC(fRP9I^UCG^a3Lr^U1Bw;})EH zldMP3P>gz>p{SwpbARAzkoV<fZONXoF3#(XbqOl9F0I76DB}u}90+ptKa!;*K3rn+ zHN~OP;@M8R-=B>#A853098rDF@UWM|s28gVANsW@lYXtl<L&3yG;~bxsoM1XF27iz zFFY1bUnn)62!KXWIi0#oiZNWY<ysG?13j_BKpJn1Z3O^cP;DaE#K$@+VT1U1;s8{m zjRltnuxw<$SV`%iVK?`BMl^o;RY6a!x8_lcl5d=csV=VD(6YzB4qDR|G19&77;ys5 z(H~RhHj)AGMu1~m)7D-Fc&X5w5XCm+Zivhf(Is0mu10au`Kmt&e^kL>7Ew?ob_3Ra z+Z$Ch3x=7f0o7){UBEO9uKJZql8=7EO|1(BH7_0Ml$A3TSU|Cf6>x3qOk6j=Iq!Or z>{xlzN0@5?yRJ)P<)Uwfx*Y<n3A(Gb=c9GjITS@WJM+Z|a)@%Dq2k5rAxrxO8_HN$ zvgm#(4Oc{N{g_Q3h?upO?AoQpm3+zjy7}Y=UOOKEl0b?FG{_1W?##XH-ZV18GCS5} zjvmiZB0P*0_7B1yKX)|KS)}nv-Q+J!@KGnJ#niMh89+r{=k>B;tGT%@NsDp#6q8&y zmTKHMHbV6(sTeChPA7k&y3}V%h=ZRsP+Sn^6++4@j05i@W9(91INNc$WA(&E8ZXv) z8^P>U=hny~xQTVVoRG>ws~}YMpt7Mw{4a-9J!Z1VFl9zfjw(HX|FJX(AL8kP`ZM<x z{|BQFo5M*|O<lw=B3`Xi&m8{euPz6>C3~TIAC<3NZN`n0>fEJjr@MFYP+Ilfeez6R z*BB_oD9z!U2oWo782l5VL)}Ap5<{hI(Il-5lTf%`cX-uS@V?UHt_5R?YNiRCG@FR7 zZ4E`^H{beH#AzN2s~DkTJORd@nt_f*q_oQ~QosRb2x~OJJ_9%C7@SZctUq{B===?( z5S;M#DS2y<T0(~zud^pO_?z+gv^_F961rz=)CCM^>smaIDpbKUSpd@JMcTctZ}4fj z1bPBnY(zO~oP=*SI9%xgS!|8{q@-%obwzc&4?Fb;9xFJ0p`i_A4G&dRM|PkouCM_3 zC*a4S;`xre#S7b!W6E%m5<!E<sy%URSFXQT(g82-3>1ZcQ0sbGv$->+t@;_70Qvoz zR~Z)S1XD8w{dIlO!)k71fq@5@+ryE7YbF}auHL9zuto{RMIATTyupo}`V6o5H@KQs z1pD;oj=#|TA*CM^YcJ2C)u@=z9C{W`#P-zevfp_|R2-w{>H<}#x;nK<H@I-~{AyQ$ zed#JC?YsRXSR+B{yUqyg4W*jhp$Zuee!Y&B^40=X8pUDd06Q7u)*;vC1e~bYKyA)^ z)#oU()l^#l_#3~F--I3?oa9(nIKF@W0-cAdQpe0x*LLy?*7HjHea`L<D=FnTPhfih zENvKL)MYi$W7Z+5^(d2-0Y>@}U9Gvn8$(oGp5r|Vx%`;qzT?mUBNAbu+YGPi2DGwA zQc`p9sM^@|auX1-Bih)ZjcsO**XZ(aU<l~wpQOwJovY1&-DO-nJJ%IS666lnG&r4& z?6Kg)RIs&ZG@%LB=9NHeUBbI3@d@V^_ov?hwwQ0W;1l-Ui8IkUK%#})wI6XhVvx*| zAdmri;>Zbfj6E~O3U)g9C2i}P*2yWQjt!@9jRBxxmG@g&)X5nlpa#^_PvDHIh28J^ z|NI4|ly!p9OCN{jxIr*SoMzk+fY%{~hnO4(=c)?uC1UA|n!lB!oAGJMmxdurris&4 z_sq3TA>gI0CMvr^2FSR{{5*h4GoSqp2&dlNFed-?jC=jf^9)`0HX^e+zq+LH6Puva zcyVcc#>Us-gz!cgF|3ut(u3=?@neRwZP5#MUbsC@R~0CWd?TaR)<S8_sDyrdhHgez zWKI27JyKf@sfM4(Nrg8X^=om|RFf;-P<)YZq2Us0Uk?h<^kn{|`Z9Zn`^5g6Ag;aE z)wn~KqE19(v>Q1A_pXrbMqb>i%2f1k<fun}XqTUAw(UlLz!!a2((b8`@|CpeMl<-- zI4L2qcvy?L-B#q?ly6zidy|N)Zgm1~`x(`)oNh%#MAM&QZUOQ8yp9{TG$<l}KlZbe zJyJh}AR=%f-D(bC+`8$ATiU`CtUB7YJUe0BPz3CW9^yw8OK#}aFP{L$Z3v?JbVfRY zHL4X3Tipbu>Ze!SMy%@mKQN_7J|!J>uLa_-I#gQ@32oBfsvjvQeb;9#W<aBc5BS7~ z?Puj|5-XZD-JdI&K;ZDQGy`rX`;7jstHwSf$MrT)1-@fACIq|k<b}#CrpnQeq7O<( zApNZ86^I%*`6_oir5FsFA3rM>=~#C}b!Zr#qXi4(gv;r)yH^jV0%mi1y-1Oc>cG)n z?^`w7Vr&YO7TKy{ifNFdkhn8;)0*2lokjoX+vlc%VP@V<Wcz$eln>&eYs3lZmpH+B z$1)T#FCN6iuy#w_=*9`Qez{Svk+6}Rw*QSEknp0*UzlG@J|SVIk>6At074_N;@@@> zBP7N8!e3Wx7CNts=MBk68vvNS$9EV=LZgftU*M?JdnJpq+;|7(SFhnNL)-|<Et3p@ zGw9h1W85_urXv^&09HV$ze+Ip@E2R#L-PwdLE?CF)1IY}GGE^)2r&<_T2zCglw?a4 zntG-%<ep{}Oc<Gl+!8fjSdnt`U?v=}$P_fqy>txGAkVb_@?0j@a@;@=ywi$tVDzvr zK2iQ(6_J>y6FK<ZXrL-9m-vpaL!wr1U(WCK(~xa*A<3^vVF*b2s{#DV-WO`yg1Y!b z-zg0*X?3^zFvX2xZeVCGt&$sFU{6DYZ5}(v=N$@a-uTuq9?wuw$CU+!iD#ge80)XZ zzSGRTb<D}Ha`yg^asJ5-`NKr#H=|bE)PNV(-xQ&4E61NS_B*ocZ@$-=KX3uW8aNrv zTH}qF`t8z7n@5Y=#oP!CPm?BG04XJQ`shqbmLL~s>M(279yaQDImwB5`yrU`dB$TJ z-C5#DY<TplSzvIDv!H=%Oc$ny<sJIIb6$v3jzPL<823}8E+sjRK=ZdJ@In_D>EKub z2ejb|BKw1~5G)C<S~&Nh2faIJR|lFwqS8z*;Ual~-^dP++yo-OW7KdEApF>tZ#)zj zy81hzqr@yE=6Yt1^i|*Iv7=W8^K6QYE+poKcjDwABNQJy={ppAhK}xfrtYgBl&F{y zP~}V1wn)dY>RJwYmr(MdgDg6@-FXCO<f+$YjcNhCOk2-(U$w@1Bw}#QlQnp5Nd4gU zxX*HS6o+PlxUNw7`jQFlZ`IA=?I$5aFX0&}XvupHMfVwuNelE?gU{YmK*EQ_zO6BM zXb@NdP-0v?8}SgeB-{8DrPr>aU~u_#BVb-)(_tHi8KN^x_IFI(FKA^A(=Np;ZEiGh z7bX|BHk^G2+OT43s}=FOqn)3A(yA%6hc2h6unvaXQho?HuR$?Oju=va0a8M7tYKd2 z&YV?!ezn*``~ITCFthkINO4lpn&6ou1_r(cM3&f86~|8B>N4bHO}oTH6trgnY?NG; z$uX#~(i7f%O~==>rg!JPR-Pz+2c@l+q&Y31nHBrpUUEeQnkquM+0Uo6S1zD4O<Q8s z)fJ{u8TBpfg2C)N6Z}+IITcs)oiOu>y<v!^`ZNuR<L9eu%m5lSV@z2&35s7t@TC(| zhS#0{d($i}0q2^&<gaV6g!AXxcq^R6*_n`#jO7~JYr3+1Je59G>f;D{9ajvUIk}ZP z?|#nAe79i~Ke@4tFg5riZmp+=DNBo*q;&eq)UK2S#u-z`3UHYBH6gMz%q_3ywrZ*l z;}}6j#<d9TwKKr9t&Y<`jrYhYqa7zup=He^gW5(*2a|b?7DDVwIRsQnH(#pdbIr~5 zW~LQ$X$$V*Rl`;gy%e=EO^pxI)=+5}a$gaNXzas18|=)6WVe44R9|4_5OmV_*x<@V zj^fU#nu)5vab0gXZPXhDUF~=y-Hz@x7@cqG*~69c2vlwu;ma_HC+O7BT)@^2Zk*Fi z?O36$RU$@)&ud-*J|VuNLzAzdv>9&N>UwkKH^Cj=o{we$&%IefJGy&!qeK`~MQD#_ zn=SA9qxZ20@P1_MB!#c1a^DdWEqPdd=-|3?JEK&>;%UK&A5|Q1OD-U0l>2&mZ7a$= zZ{Fdo+X?40AtF^s$Nn|kELCVZ5>Kd}FS^kTsT${ClDY{o=c%1O|EfLrr-)i{UW#Y> zsV16flH5;Ji$aX<8Zn}~J?7&!^<zJ69v&?zRF}Nf!RWhEPHT4RtpUJwJ_Eo#F_6#Y zI_TEuL>yxo=)S(=h?(|m28#L7h}<lU7j^Y2@f5UjZXu+dnej<5iL-sUeu;bMQU~N~ zif;F=($;buHBK`I2jkQszGFx^aZ=-*4JMs2Meu}PoR@^Qo>Ys*u@8JxrynXhjv1FX zM;1`+xnm3|y;YMWHrZu|``dGhoepRwgC*VM<Iv6js`DjjR2{UOq0Y(~^84QXnR#7n zi+R`C>gqJMfCZ<^wE2_r;HSle1TT9CDE;&a7~-Fc-WYPWkf9SAx^<T=ImwO-0)6^j z_xW_%`q9acEa*)+(N?(Qe8Gzv#Y>vseqSJ{9A+iCdR8F>l#CU_p@-a(^UNaqg@&rv z_^e<o(PRcxq^byk=|waecpR^qfTIi;fR>+yNQMDuC}aGr$v?a>%42fH8_HU-Q#Tn4 z?C`riAg!khhBjbxUrs9wqap69zq5v!jCngD&vaufq{JSH0nd)5{@kDz;swc_k@^`` zljh3Y^+0w)d8H;Lq%JdoEYXA}zicZsM#5}$OAVu4d_HVSM~XO>`{sEEM?G;!*pNFH z099hyr|o4dMw}K8|GG<;czM>>KE8w$d}1dk3q4$!!~xa~XiZALA2kyx{xpM5`zVf9 zo1ttij~}DN`GC3(DUW0ho?~dI|2RwcBa1g{uMsQE$&!rcNAc5_F8xaX408xI=dBwn zIN&_)hYdR*Z49gP@d(h|u+h})G8#p&5hx;2Ag3a+L+ElOi~)E44AW{+8=esIe0_Zv zj3&hhTJ!`q!E93M7;|P9NIE!OYf#i`jq*p8nlS+u_|umxqy^#9S8T@jtM+u{01d;! z(g1-R&)kQOnGGoCW7|HQ5EN9~MMq638mr2fOXUiP;>QKCsCk30$+p@K%*>~IPcwsB z$n6YA1*)nTUMSBuH1M{3-(=IyWCL&gPUpcSFm7@2CD$f2Djf3+G7JM`9B#2b%^}7c zG<!ZijdDKyYrCaGGAtDT(Kuco1n;~?QKr9|U9}M!!~vRHds?fHz0|cevo1*FJ6A-~ zx%eU!jMnB4He7NqXjoH$XAW{a5H(zx;6`U<Y4s<y03!VL^UN_FKQC-HjlhV@I2s|o zshQKn!Y<mp22#x!W`>cwLsK^f11dx3sg6T#{plpr*u+eG9h<PD)$AonV5+2C<DQ`3 z{L;Z$FY|fJ1X3^n{z`~N+$_e*9w(^5WUPS-lV5OXIP4DVc}7rvrNwAw*Zf0eV+$+E zGJ%vi1T=i=K1<=~v7keTEzFIGuRz7)qgXMYeOh53XPhsW?GsBvi?}lv>T)<`rLFvz zxu9=*WkM;YgQ7d-ISv84>Erafy+pu_xHuWx#<X}lD5g|<5Q%jNJ)+a=(V0?M$)f`@ zu6k!Y(ceD`#>sE_j%cD?9C?BI^BXWgdG2QtZ8}Y^O8?T?`@Uv_Po{>a{H?d61GMb@ z${wJlcywm5*B^dxXAjDsfB%TETg37&H;6z^D}=SKBGej*@gHWrA2wC2i_wHcG1~0R zTVHczjP}Z$ve#K}%!Y$Z54%r5^}6DW+3{QC-I+PU!W}WI$8(Ut@DPy(Stn@e$44fA zy~$SMX+<PYaC1!!KZ;kTzo9_1Fyqs2$YVxq>z?syz0{0e1vwpU?0k9~N2IUfH@f4? zg&deFJRq=|-_JY<euds~L2g2UGS>)=`es*{s}fg3SUPi^y5n;CquCkhCL1Qe>i5r& z*e@wX$U3t!e|TJZe$ykQbTzX_I7)d4s(VCQRt`jYI-Ja4cV&&{9#F#SRU0u^Bn_N2 zjT;dnd;kM}loNCagJpn(W)(vNTX`ZlpKf(Oi%FXqkAY+ED7irt)l+#HTyjqdlMP1` z{hM|U4aM{*H3+LIZY=Xa)Vn@?ehusr<&J(Yn5D;l4vegs)pDQg{mXJ1K+@K@LYAV2 z*MT+ggERP^E<}~lR|JDNlUScGI05!rlw%4pIXG?cFiUGp(;*%m&M>`&(0Ctg$4CNo zc}RzJ?z32%drcZh(lk#*4K-M^8aZf5vx<}Q<qhw)G->Lmu`Y<7x{Q;&N>c>Egc_&z zosq_<VEZ`p@b?P`tH>j4I9H4^<S2ZMXSke25mq&oYU6yfVm$F!J<fH<do6u}UKduL zajx;5;sS!w+3uz_hAU!^h+T0i@y{LHt|95^{y7YMfPIz|G?o@TM7H!?&y>HZUpbD( z9?(-`8qQ|-ng5@UPo(oh?Z$^_{%?{<*OOt{q>M6O%y@px5Mkg*6w%BWGtRv)t2A!D zg|@!7g4z+Yx~aea`;X@GwwCOMf}qbRCV}CB7V*$s=I^qqF?9CtJO$v2?z-Q!J7u)B zrt3;m8DqYo`m_D{D4KUL(z{&9qaoURp6J+Dl@WTj<}5EOLy8J7F(1@~>Ij4kN~R$b z+zGXBve3fh*BIuVScPC;e0gN-+wZ~(^KEs#TX$7hu?h~)o_*d7iWJbu*0w|H43!*e zy6=n&cuY2Tni63-%RYSOShtx{0Yv|Ex?1K}?1b#@@V}c652rX3gNThZ#dOYNC7rnW z`-w8|kb5ops}&d_c1rwRh*)-ldTa#CT#6gP+9Mh^zsuXqo1YWLb^_{-bC+6JRO45> z*u@lG%{NOE?MdpdO6w;m?#@ZC7~8!N>Q*tX7&C3jQes$Sg=d!+s2jTY4kh&3!y};0 zO9nw<=_o-%9<NGg6B6oJE6Sb8=G%KoVt5H|k-WY-1-Gt8-7YjnqH(wK;z!2Q5#E8G zh5xVYv+00KppJSn?LiiHg3UT;@s8iprf5jXwH+S7GU#>dy;G0akVxjnRUY7Co%fz3 zJo41Z<F%0g8+oG193hH*VH0$iZKm?@CvF;xqXFty$a=;`GFXLt-k=|hF}vNteXdao z%Frk}uJ6$`!)_nN2{cYf%dy+<04{oYn`9M-*RP|N@WUY0|2{s1uIWKsAQ@^6B!fRa zL@j3C<>++boaK;3FN_f=s`{|?`*j|?DR!<&ROD#P$Avs({c~X%WIxpFYgebv^)^|% zlH(4jRh6*@yN@5=P61q)JskCAtU?&yYs5+7<{EJ~0u{fVxq=1^zr*W$xFJrxL&w#b z%DVh&h8Yy+)8|QOCugjp*4(;A8L?X4Y6QS_x#m3LM2VWLp7&04mn&i|XVXbrq_Z}_ zVJh~Mn@7BFv{2XfrrK_G1rm*k4!hoK!~ObkVbtPkYOl?x&6X@jkePM3B1EoKm)FEC zuBrV&Y-L3B%5$pfpWk!Y{A_W`Tth&8jI|f-S_7*jjZKh6VXk#Y-1&A|U-mrD&NlS< zk`uOPM4s6R$H2_&U37Q{Bt)?gqt^{5f2D#1xV8S$5Nk3G<(G3?0?Q<M`j!QSShb#X zA`l~0fcYzzCY|ESdsN0rWkSQ-G*~^oz2fP^K}{$-=apEiZ&G75a!nZ`4UU+WYMS0s zZRfm#J_@Y`T}FyUlOD^}SmesIj)C!AJENpCM6%aCzm~%mJ-;0$4y6ebq9H4XW$%L& zuJr$#r^vN#5dvH*<0LhorCigc%F%+oz>*QlsK*t1;CsI9)VY3`qQY?h>5x-Sbg0$# z)C(vO3i}n&e2S{sPxbWm{!}lV$3JvhP6xRD6#tY^W#n_WNb1f=8j+n(Vr^^RQe)x) zj-%J3SQA+vv8J%2=t~n*(X+>!g7CvmQk0*rkPVVxQJI8*U2zf`cixzdn&1^akM3wb z4@B8F>t0{Yk;H*?wjQQNXkjjQGrkzD`YP;Z23XGsfBs~nOANRx3WFc<xq8>LQ$iZc zHDp*W0?=ZF^7ITQulM0hp+Da)RO+=q0`A-KYy<~5`;Gkz_t1cJcOM>90Y_(C63}`R zD(@(kC6`Dkc7KR^3-J(1UJR?;5d2gS0ysMN&NDUS3Vu7L1$gR)iT2Y(#iaBekV5&z zs2eMltHvFVs~oOmFC9u@Ia$LQFI<J2Y{GRI-g+L1;nW~rHjxp=D!@0XkM$_9VgYhu zfVAnLcZDTSs8$0=sJEp!9&YNb^5}9Md9*VgZh{qGta8BP+!JX8Yte4XY%9isST$HQ zlyEG32adHlUJ@9UOl{4yOV~T36)F!#gu=s?Y@L&3bIn@GB}W+WUIPk+6G?U$-XGg1 ztg}p-%ht`T!Qe7!H>ZZEwNryO;$*SH+*);1b|vq*^myO#B&g+hQk-e#denzVQIl`( zky@Q{NCidX93-KC)hu680jz8=rzHx`Qqgi6ws2<!s92U@D{gpDDv6>_-8ib53@Vru z0JGrI${?rLI_ia*<>+Y%tYWW5^Z8!?I4lPGiJ!VKgAH~gJw7r{vhoS9jo92|>4+8$ zM-w@)9<#4ahvpn<*BcWemAY=tZ_-F=^y)iP4CL1roEO#NDqu0vHam-;MCo<VnlnTu zc-#~Vur&~&5wZ$E&%wo)O~g-F{hz<am8?*5N{WmOkTdKG-LbSFCBWel@6!|tiab6f z!J-^1B1tI5@t6I?UosSgAJRC>kmSXnH|T%LbxPM<94F=`<Mlj^^j+Jfq>Y9%0%~eB zUCKNYq~pA1q6X1}>XDA<+o-Z;|A?;KANA=d$MYjRUV1>8(w-D~zavD9;yGz`=fM$X z=QW>~&t2EbT%5gULelc+0IIs1#2Pk@lJiE=C`qJeIvsq7J7B}Y?bG{<DMM?>n-}_P z5W8%!wQiV2Nu1k(ErX9p#h26s-l(rls?g;coO0-%#B>sQ9inOHZ0_-HFE#nDaE4)O z@J^MSv~rTs&V740%7bZWM|I%>h=JGZ4o7fw2tp*ag1lJVoaKyCq%%TZY@#tXHLyqc z^$BNIN~<|IMwv6{QqHaVmplE5t-4(B(ME)@H2!+JETKDA?~rV0O~uZqoA@`gG?>Ge zOkXIB{MuW7Tc;QJhMT0wGA|tmPJXVGE-!3}h%1D4f(Qmopptoq9T9u`Xndt-1#S=& z0;KK{FpudTh%C}a)=rwXooBqfF?uSXv6s*jeY4nYBeY7HP}nK)<m?d_=RN3d$II4~ z{}gzhs7|xinq#5AoetilxbnX)O<S!c?rdpMJm3Z5NZquXSp}E09JtUQIACSVUmT4M z3U{2WV?6M6#FV4fPk^VZJjqHQjueOoAxCPvvubF^ysA9Ys-<*LVjou(=qz?f`1v_Q zHAXa3NU#mzq%bLUazexMRf5gV==Pcfw+t$bdntGZ5z;(zf1}QSxWA_Nd%E|}UpGUE zUn`WHBgW}js#>bFOPSe9sjmq#6%cE3$a4zY%|VC<=WHec*WC%C=55R=CVPnUT{^`m zF-jW6N-x^~XFOnt#zK<_1?;0v?4$tZhVH`Hoh`hkH;1~q%=mDY)-|jIu&>lW@n?Nn zow)@eC9+7<nJUh(qb(u^oQf|c%%%Ps*g7PZ&6WWxBn4~1G98W-G8x8YAu}8$QLJof zZxMe+e$votq)<+sATS@5VFq~QoWqz1Tw!gjvEP(tw;}m<WB0a77pRh*Dvjxt7CFLk z2)f$gC;e@B9C>pFwnFAmVydNn{(T=n$>qUfKXV#^ig|*f)Zu0X=7FCAQhBOXE5Aoz zmWpIsSRdr>M8f(_eUP1UYc#GPC(6v+H$o(3xy`LG!!aYKpOY%Y2(V>uBo@_EA)8x_ z9Zi2CyAE{9s)$AQj=eq;Z19WFow$1o@UR59sq0#_FUXZLuEvH^8oB{Wb={n1=Y6*_ z<0tCoiNUZH-9tdGf~I{>5U%MJvFr1ngE;PZ*tnM9Q*c_6<I^uFm@omjFzUwQcE(DJ zl$G_w5}W-sHI_MR=DHu=#a21ZJ>kqWC|lR9?Geu2ovdm|i^tKgMf8p*<ohZqi9L!x zh{5qJajWazKma7d2KP?32`jro^(aOfap<>*hil#w#BeC2p{YT+#^Rz8r#Lf_0l7;N zTxW(~R&<R&Mt2b9YfRouHS`hcjtDU~29AgstD($G+;O71))-p`yy!J@yE3B5UDg>B zS&#`lV*dzgYHP%)o&ErleAyB!GB8C8v6i=Oz?`7NU;HiY1TTNUC_x?pl=KlE`ErTn zq?coS<j*S;6OVn&E8pSlGB0^W>qXe*k}&Y}4Xb&0-(o$1-jgZwE9DV~Nzg@^uMLjg z&8<5GyA79EZBdG~W`}LlD1~wIJ0*F+oKHJLEsCu?bjK~lWIpXUv_c%baZD(~MU|sw zMu++z&t-D$NR9--drLtDSP%OmPhV&BzmA!MHK!`#Co+Ku4_`9&%Zqym-aX1pco^XE zi%ULyYlVbOEDlQY?qV3`=`X}Mz~CRMSTE*GV1{;qUE?0*Bwe`)=ev`9=(a#L8x=Ey zn!n6bCA~=qd$e!FdV59*s2Td#R(*sdXG{}PiF+p!YM5L7yhsT75ck?EyP*-@G!M39 z3-D;9Ga|0v9-2lWHzvx~R@l2EADbE02_>w`BSz5?b|%qcdM5GJT6la8O($8P#7Qi4 zF`07X^ZW8Gw<WG@#G)kO!ja85ivt^AoEQXt>r+a4EL7!V31>_D-QVg6*HfberY1X- zhWf_}ekJ}*UrrI+f|=4voTscLMbKU1jd4LS@d3QUOQ@hs(+f65p35I)#D+CJK>YqO zn?f634X@QW(x`=MtL4~-n&07DmTtSoZ+TEREs0*{((O1}Pj!!N-#(!6UilC;^m1Pn zxKgrnIaGJzAp&TJ1<1pfoJSM?{&P!<0DY-!&Tyf=YFU8xT2kn<sl?O~>0*yI$Q&y1 ztLwMDDD#!~K?rmE=UPgw$jgsctLPPbw_@b0QDdFH+MA+{Q`4Q}&R<%h+m$mtTzA?j z_ni`s&p0SNe3dYds{@n7*rd)im;4)t+c$#xHJKf%a#i^4TLDsy8@|-VQ20%nqpEnR z5lV-cp2@C-2^omNS1(z{Gtsm^Gu?@krUF(dpCsC;=gB_X&xOB=&YjPxF_~*+&1(D9 zpv}DW3q_$xUH3L(=UBlW&-qNd1(*Fab9ydJ1=BxWS$HZ$xOgi@>uc~`X);()*?d=5 zvK3MUQ8&oS&NPu%-{^eD7(e&I+KfGB4K2(4uCY!wo-ZGA@;^Cu+<IK48s4%54~&R9 zB|wk9Lj~29RnI0V4+?&FwsExPo6m^G*TfzNf1LBOr~D<c;V#2)?wXoxm-aKc%*{sf zzLRm*tMhGa_Rh-4kz;)CoAp_|y-%H;VtprceXWo|_Q1-lJTqd<;-ymU^g_NoS$1R_ zY6HG&i#g&%GhXMVGh*0w?j{u4rce3Du1Lx2CbT$3A&4Q#9Jo)C_aO;`S%jdaQTmTg zhtgTmIC>K<9{g9Si1xbF1N8sAwKe)%Lreaym7HN25Kh(rW`LqlU-s7aOCLEz)0leF z`8()X=|WQnyh_<Ic{8Dl>&}N7i?Stk9mL<uIbnIqK%!x_x}*3h6_U$TO|Tlk3imC+ zvYomzp`B{R7Q3l`rJGP;bsrqiM7N%1?1z-4+Si8+-Kx-;ih@4qnNRRF<eP!^%!po4 zs67h`TMpIBV?^zh0kj&Niqs{VNBvC!fKuJXeD8kGtRNdZ7b9~)LMuV9?DYbWDQ-T$ zgO@#ysy3~@8Puh+V8(Hqq2|X7XN6WX&n3LW%-@VyGf>vY3>wlfLw#T=>xH)PNAs8^ z&e{dKvF9VAy+TCuZ&jo#`$@a<5f+A?075%aiO`-sk@b50u_b+SSmZ`b!YBNBmH$pt zclfL-Z(-Dg(ZpK%RL`U0!dLIr?#l4E-39by^b=X2)*~ic)_-ihWLTtQx3DM+Cc_@- zm^q<FG4A;)(0e?2F?>PSTKDLWT#U#2<M?$QK`Nn)-KdLxkK!tHDY8O`MZCYH`85Nb zr@4;0(%r!b+KGN5E!8qm^UVh^(P>abx5Rp=%g$1SS<7@2Mb}gAu0s$f5qnS^FMX`D z?`_y29j^{ymKb!(gO@rH$MIZ*;9}GM;YO!XXr)$U^w^c>q>t69_1TqPVpnA5c%@Y{ z;F_M9C@^J<5o6S!QyRaNb<+L&%oFd^U9H%lp&4vAFtDsg(18g~_AnkxUn)0Not=>{ zU*-cGC|2*<06A74hu72o?EUQEOs>1HzWT*7^^`LS3QuX8h^GWNGY%L?AE2l+y(P|6 zC*NaU*P73~dV4kz<~&slZUKKf;3Zq?fO|P{$*~%`<evDbkzVqi6t&%?`}ZZQB(m(d z%;&{xlt{a7Y$Dz9B<BYV*BPk{rlh9lU-vxEuSX*&=z)_rR1pBOY<@|&xUq+(i{tE@ zF1meP>HUiz1thKc^IHZK+i8f&^(Z!<atm*-*<&gN@T))7HV9Rqv7`Y{rqc-!j8l#; z$Tn52xGH`EC9b{FG<pNBS6FM=wQhjJx`U5J)0}|smbS@=x+>>XJDsR&C|ni{G+u5v zc~_0p^u!-1D_O=luSu0~WjS#^jGaOCJP0xGoiok^vytFx5MYOjS>kZ{m*6Uhg$q0& z6DgN3UzjRw$TT%dH_-8>SBj(T1qfjq4oQ>y3@-j8hN@<AO?{-RZY`x^+pK}vFBx_% z%D?|aod^nDUgqdjhAE^TonH)|u4lc>H5UJ2@EjN(8fFiAnS<WXm=4qjkd9z{fH{=? z({((2H=&Y$S6F&5s-{E>o2WVZ$ZNndR63fJO_0T0ZGM%w*Ij-?H>#w}tReSk-Y9XK z+X%|Jxc<c3DFd;Z(H40EP*S%}Q^oa>rs_v8ugMlh$wz(L2_lU~=F`Jea4qhme>&$q zJ(Bce>7M>+jCWF1r_+WiWt@1)Z!BDi*@zmkqd6S9Lh47UkiBHV+AJVnbZ9BK)Af=R z*~pk$l@lK9MOVy*%<TR&a6I%+vxX1<{im5)8Kw%32X}1d4xm!0rz|MZGm0PChIHu; zm~D9|5e`_)lhrq%uTGa46hh;-7DQM!`Ym-;T((Z6`E}r+8AA&`vU9;}YuB)c?&w0G ze`4u4uMV-({MbHD)0$Gqx5BpB5eVOp&KR(0qe&F}M98_nedWzE_?>Z!w06_WChgb+ zZewp7!*#UJ+r-HWILV826-;vy#<dz9K%cbO#{QG?F-TrPkF^pB^wHH7%@R)xdue%; zxS1ARFTX>@Z0Kr~L!!{>UZ2ZqN0X(+@2?}O^K375P<dVf;#%U2uL34&yrIDEV=B1c z&(-Orpf_<d`4k*>K}WCV$d87v1!FCabBhGW6uSxB4ZFOgw`Ymh^PbO?_&60{7Fp;q z@z5MrhMy=8^|hh2p81Xd(=a>g!ZhVIojxNmZmhWGoJs0)24bi*+{vFQdb26Og&$fP z_%qI4qlSF)=+}W?ER0yV|NQfP%-ll(*9AMVvL(N3@<<o)43Qa;d(pOS78sdD{oBKG zi3RYWO!!CRMf(YA!DZJd(Exfo!upauJZKd#GT|^_+q=<fSVP<-C4G?#9YSj@3N_YR zD*05tGyWS)DltUcUe9mZ4He$KT0>ncCYZ+^1>r#Z+Zt(q|7DMoz$z^a_(MT;ly!je zp%5!ankawMgC?u=fG|;^+tv|~D#fB$5*NjFBmj(&`txP*!XTl5@}G0i@5-c@$()pc zco`b`yL8V7>}rz}l<bu`oZw4$Hp4$vOO7Blj&kI(El1q^X6*S*d;RmX$zo^oSjR=s zhR=UFAsTN_poSUfL4v{Uu@*dD1M4!v+A`5cCKgSib-#`nJh;oekC&ZojRY|7>Bx?Y z0<S0YCRz-0qJ)OPQ*pUGHZ!nBLdu?*D9+YaR<u`+cX`>0*MOo1kJfIsc|Nk~!z3Yb zfFw48+K3O*L`_+pnjLm396F{ZmkAM#V&7@b4!$e*^+>j79NWiaUfYB8v>h5-XmuOP zTXsy9p@%6Oj#nk=<1wjTzAn=qr&P>tsBxPwI0a?9N+fmJVROb^P;sBew;FK0j~nH0 z2CEfm<c8i)em`z%Re_vQkP@G%LUdIMjoES}eLd3d?f*aR?I$W#lhwRYSGMT1Gazmw zV*v2gqqv{5-j*)_TnnVHgWsF(ThhhX_4X?{Zm9wZn<L|iDR%Ixy(M-XH5J`4UGlmf z(~<fg$z@;zFbu-5S9St0iS_@>7P|+43ZgcwyUS2@UA=SQVDIhG47iT5X?`sOO=G?G z&>doU8AAlSZWvP+<?yo$BpN}g1f*|AntviAO-rG|IatWUyn3ErfB^t;%^@lZWo~41 zbaG{3Z3<;>WN%_>3NbJsFd%PYY6?6&ATLH~Y;<LEATLI2VRU6gWn*t-WeP7$Wo~D5 zXdpN_HZU{_K0XR_baG{3Z3;+<G?z(|BsmTQ@BIpXAY8bD<a_$s|38l^m~$wpbOu+0 z!C)9`e7Bta?RLwE{>?hdnP1<nj9tIztDO4XS^oWJ?DL&5%HChJQ3k6<Z)MM~Z9eb% z=9+~?bvS+2_MP5K#JBG$vu-wDCB`?Sm)ZKaICI_Hlj-fU{**Pp%e2|ow>Qf!huktp z|HhmQe}h#_ALm=aCD#{+@yVU*F8$=LlVuUB^!BZs%`*>AX~FWsF<<LZTK&!%h3kB= zR$-?%Iqui*D8Keyf8OgGdzat-4*$)=v-qul_cUjp^UcoB?R<UmJ2-59`E_QrURLF1 z;PUJH>+P^&v39mqexrROfS?0#V}~)n(}M5&waE@Vu}yEZ22f8<o$cc~V6;Gu9eDL+ zr)3m_9e8$KqPe27qWo6pDXpwn-z65m#Unc)@0L;e0e@fN0-}2FEx#a~mn|g$|Nj7E zuT7i;iz{rx8F{I@zq+IR4iT-hMD5@93}&(*Dz`s=?r$+Yni1qx&3XHlAQ&-)nVEgC zf@rnvjK+>ba0Adzy~53fCuAA~@;avnPv+FgLz}z6keU~Z$xp)=2^)U|oa)D2!0*Dv z2(RESOdZvr1iZb2>$X+lA=lgRQHYx0)+hnr1FRU>d0!S0>k}Rh+>1Xp!8R@p6f2pu z4YeS&I2qG_|Jm^5$OoPZuTI&0a*+FyNt^g@;=hb`BjF@Hi$*{h7XfzX!ka|!L6Gl) z;WkaS=Xj$f-kVVKj9&-td3)K>xb<>?+#r&h#0(?c3B)>ruy=iT>%e`2tHAx{n|n9e z7XvIl4vd$-EIMG=0ihF$M%eaMMw|n>(vkEh`@G8{!b{{%MJ+N*7BAyk2c-DN0QV%~ zha2>>{U-gc6lIHV&K!CG9pZa)V1ou4bvUr)cjRqZL+CSkyBA-r972D>SA%2)mt)|s zw<W&4`y$dj6Z6-h@+7a$VgKdjF7)GR2i$826zrZUcjuCe!z`|9R4W(#dua~8O}2{y zve3L|YR2{QR}-qCQbCm4OgD2MCEL91qJ!OUg>DPO1%|xc0PjnzFF6sidCbQW$p3NK z0oqYTo5RoxmzeKF?LzXK+k$Q*ukPAOwV$F-++2iGUqd}0!E##(Yl06dLPLfwnED)~ zVjflJ0-;b2;0b~XuHfe}P@)p<R!NXJf?~O7E^5`#U-!MfnMr_Q{!Wl=xyp<%$)Oe4 zo?HbWCnxb6D730L8k70AA0rTZr)=^^Z@G+Y_MJ1&7)%0^3u_tKR0Rge3r=PLJ+9+j z5rTz7Kn@@H24V7p0b)8VCD3ViM_}BJm8*^cSEiANI(^yoMG7^zuj=tYv}MV(+9uB% zZ$m}Aqyj*;Gol!|PFZGIYv%cN05*&~u5~lrt)L>PGjRXP#3k(9A7N!fPvdN$$+xM2 zQypLMb6X^vHQ1zCO+{t^DzuvelWX@}1{<j9j_u5DMmWy%m$@5`m?qZ71&e1=v9)VS zx{gs8wzGhsN;C_fSTI7eD*KBPc~dqU)%~l@A!N%-b*jWxe3z<@2jKm1S5Od#FO!m? zlfHn$7q8}{fuyb*q0!c%)>)sL1|TFu-m<6B7;nt9{_l+)6VEY${u}G^X~B?9COc-T z*7;7*t>i8C$XoE!yzi=8VO>d}3`7UqtkDvA_#Q1&pYP39zXayWAAuS31;Qko`@z@b zln{rdc3C7LQU+qI9P!aF?q;zWr2mNS?pq+v3#kd7fuE`++4r6K*71g(SI0lCqz4Sj zaw>!B-j8RY;6N7OySZ*~-ZdLZ^Kf(cni&jTYldBWW{mYzn!n5iUTo!?CRml#Q1?-P zYYvV%gmV9-&{ObCv^~a4v?}6NpO&gZ!msNxbLq^NvaeiZVxLS$;xZ&vl@#*D-0wA> zK%{t1gm<M@GFG41PaqGksn8sAW&-aS=gHC4hA{E}tX8zBT2HikiWaf%`i@E2ka?+o zFOBO;@pK(27CXl%9FnCHA$@qND9ZD+_NLSl^YjGjG0wpuC<am&Q2KI?%FUuHDW1lQ zvTKqQj*#9u?klUUbK8QKm1C!(ht@#!FNJ3q=@AMM)djygrgL!Kb{bZw?IW#G&lg?P zR)0(t10B!d*;ij-om(v{p`v6Z?Bi8Jyx%L89p$u`#{4U$kePyevgOEvJJWYql&ymh z)q;XtWt16cV3c(|wUGVN2~pPpV#p+Gzwy@{q|e1t3emAFdhw1CS~p#Xdbx54Nk$&D zA&~>{O9!e`Nz>OUt`TX8tlH_4_H)Ymovp{fJD&S2QL18Bxx!>T8T7P7@Q;kqS83ev zRs4ZR+DiXUqg9ib7`AKPrD3B8p)WeP=g$Tq#IK#2LZrv5tEVvp`|1+teK49k)&D%F zIPC&s|Ft<J@e@%UXEH;_sR(a1*ix$}t^K5JeQw@3q<P;HxLwq;ui`S~gDOEUVd>Qz zU$eg%hDdYVU*D7lx@n->%}6nT%0eY=_^Ij3iF?)|oqEh1ve;tpulII9L(tOh-=6;e zxd?lNSD&&a=onjE7eLwj`H*I>tEqI+)UJ8E$k4}YK73iszh<rtvoW%TF+Uk-$x0TH z48w-bHpf~((+0`h7|t&nA#mUMMmy1X9TuvcZH|Q;R!174`C2YHY)>Ym?A%PCKuVJw z_*|++v8A)N{`9+(Pdk*zp08)KYgd@`3S9@ytp-J^@b1NZ?JK7slIPE@u29ogcAf}X zu`vzJp5~OhEPJ!`G3aNum3sIb;fJ7A#pFkRBcmK;l}q2j_)NLcZe(ErG@@A+&rUlG ztPp4s>Gg61i)~0|hB~_%^uuCf1%@qT;^Etpo-HN>6xg}fYl{qAl*!|_4u-cvf@!jI z5wD%I^X(She0UZY=tEj;Bxo*kYZi{KMjCa<;1gezw#;D-?`6CsnnTOci_RlyYkAQc zPTK_jYbimtdL*MY<QnBaXFZb#yV#7niFO*1BL^ly)`4$u(RYUQwgwpeZ93he-c#C3 zT3x2w8?yUpSv{FfCl$x0EAxa~5d~W#n7fL-NF^9(4FPbvafC9KAnr7X&d~qbB=O$< z>@$Uw+vNNv+L{6?1-EIhA8ba6@nQaoa`s2Lpw<*!eFi13^s5w7iER|XvR^ZX-)Bp* z|ND=EZKNCIqYWSi<Q8zI!=c1=kTBqsf1WOz0pimXsK_Lty{hJ0;ZgY!KwiTFOQqAN z;>#<K#*zaNxA00<3b?@`VC%Qx6jTZT0>ULJHi(cmk)-4kFk}f4rtX%`TVJj1RnqfI z)kJah)gzR&j&?=Fba`?!Z0Q%dTcr+kO^Eh_l)Z?WN5MYcmJMgO+GYU+QxcCehdu^y zdYZkidf6?Que<>l4Bztv{WL}Ie>9iLwIeqW1n;tf4sag!#V5)Ct0EGdgPw-?KsUOU ztVq9pXy3Y-+=<RLT3t86-&e_45Pcn~uApE@qhwh83KL*e=yrPYqazL9@dqBMNLxiM z^6Q9Ry4%dl1_;gYi26ziu}g3`Gs&Pi`E#|t_pqQ&2BxDSI??SWQn8+O?N!WPAF*!n zi;P9!6nf~y0*2;j6QaT26&rZjbW-M4yAWl*n8MUMTBT|;zk7aCFm`GzU?-F(a9?8o z`jCW>%#4ffWPhU|gR48hlG?9N8;S?zh-Chom9tk?>_%5wMy}lpQMs}*%Y1Ac4_!nI zeP?$JW~zIm793=97#j<j({Dub&iKWXkoc>I&uU2fRjtzf-#-?YbD|M!_oVpdNcE2L z8fVOux2fR~YLb75$(i}TVWvNFsOvxI9wxED<wX;XvA+z2a8jE6*Iq^FkO)IH=P3=n zng$7lpD>(OQ2ebR7>D>RjMp^$3_ubpE}$k5fo)NnIZlAV*A8Xgf&TpF)x-V~=lG9C zdEeOfj(xB#ta<q|U1GAIEYY)eA}v^YbnDotl-#uU2|-^r#R$8qd{9U25znpm7DdG0 zC3V#6n-2<pSeucZB-0qfY&ud=lVf37tXvQcR_UK~XC#ASPlQx@#>tLCSx1LV+BDnS zcT!qti11*BNN|NZ<l{18wxEFyX1Csta7{6XktBbn$E2u1f;UN5N3wf33`o<kzL~rg z-6o=d^ChbT4xE<mt0}fi0I*}TvYFf6m#B%%3C5w;>uNh0$Tg$*rA~9!GN_%jFGNo9 zbM$=7kW6``f3{y2a(pZcHQY*8xiivb=>gH9Jx-urOUz@`uTY0FjGf7dkVyo1vF1^V z+_E%U!wCrZ$ojE?=$A31xV@n0WOfB19oh(6={RS1uI;c_^MrX6w+TP7^8{jU$iB{U z;yw)xm!?fGV`q}K_GoV@Fmvk;xg;MquK2f}BhfJMz)39^ods#GJs&}DDsW$v*{Lzf z_Z?wWw478g{y)kOT2GA764+MIwujTi*0UsLg3Dh4TO}`e%wuD@7Q$NkeGpBNuV&3k zaZVrEx2p|41brIOrzLEi&^pOe>IslC@O8+cs~_S0-k%Bh@qE0UxVQw;8WXT$Bt}3< zmvHvaYutR0xjxU1T&9**V@jxUL+8UZBU`3bn123*vMjk9ZMd19yRL8=3p0P&I)L4u zQ`#wjZD}P4gq!5hqtuEStoLS=(Eq_VEEvkx;_dkO*r&)e6tZbQpjJFCsbSEBd;i>@ zBB!_O`6Ml3Bf8qZe&QJoWsO0+Rj)Um+tfrVqVrkNfgIyeUWGT?pUdo9(}Cai>n_bI zXyC%bM*VH+zDK8l%ph2#%=c(fLyjcnMT(kNqE0VCq;I5_3(y<C%Q7eMd7d%zCc2@C z1spp1m6%sTIT*9YUa+9r-I;0}vM=-*B?5i8LACm2(@JKJZE^k0H-wpwjbTR$7Yi0Y z63fT}1_-skQY<L*?NP1J3wqz96oiz$gq3ltR9L_4y)f}Gj)CqB9R>`S^m1r{`oye9 z?c6hs<mVEUVP*8?(<}sN5J>R8>(R&^mb!1wc;q2Nf$`01Sv<z&am@zr=i&C%3Tm!8 zk#vml@TY`o{h9eBjyqmiI$^APPUgZ_k2079mlhGZS<t0~Lks_`79D!QKVlw;o+7IA znc_jQDV}JqxD(IO6;-m)Ey*jKl@pcH7J*{{g(+$&6@CIbP{vGgd<SvgZkkR_H)%bQ zKUTQ5dZ>%*$uKimc=P5GfQ(bN<?j30?kS>qt@44))*fUoM#K+sFEBuZ#}|F$JxK~H zgi2cqQj?|!!83m4I}$#Tpji68oLJ}gd4f#4p%Eb}xnY|R2h4?n>cj1<IDc87IA-Pu zGrr%PB0|ghnGW3;F?6E_ORY5_N#7JLr*&gnJtrsSZDzrjiB{q(M`8#O^%4SQ#azE* ze7_EfH3>hv2wq+{O3VQ~<d}1h#Q8#^&b7CORB2aQah5p)+cR^@oFo0~w0pz6{xv^e z=1!!E75F9R>}ow4GRIB4CNjdcat@5oP+??e&i(5e%3*Q2@67wwMhGiw{?WCjm-Kmi zBsaN5LM%f{h+b8(&Rl-wrEaTxtnu}p@{?DlJfA#DKoL>4;HT*DzR>Wk7v%e#p&?G8 z8e+*aiQsczBI+;iq|2(CUGGKjn9y62(4B8j+C|}{y_KG06bA_88sfO!C8Z^QQLFo^ z%qmHl{mmbxINE-tSW++5yS!@c=f0YrZM~YV<Gl{qfUjTO8-jv<lv`hG)O0T-GPcM3 z%KMbz=)&sjvJrw-*wW)@;9cp~^#;tKvDY&tMaE4pLj8NXi&pL@U0*WW(S{p%K^uA| zq35W<HPj1G^k!Gk`X@3iHzz->&L>6vC9ib9%3Up-7D*fF^Li6HR_x)Yd%r_^zes4U z`9}oQ5F(%)hr(dI_@SsQfsQnvhyqL04x82L;k(sprb+a?KY=IR)jm-3uSw$R^ay*z zrTT_KFaCC_wl_FR;QYoy26%@>?)1^#Wcn0B>4ZvhoKQ30blY=*8Dbq(xf+@Lw#r5( z;mz1nyi<zT(IBXI6^x8JPnC7Y={PMD*BEp~t9j(`VIghYW!S~Bz49I&24H5g@6bD= zy#=M6{(*1Z*mU|^L32DlXq58FWDH}Feal_Q(EG6hBr)2=kR#JIxp{?DQZSNAX*uKI z9-*0*JBT|sxCZXD_%;&X$3vnFX{o6jmbRZGghq&QeO%Reh~zc0V;S`z-kEP~wkbMj z|47UV(%nq$tv2K;B6VHi!kq#L2P(vZ;>u;5q7198`8bayXAR;3*(C_~bGUn)a9W6z zDr2FgJim(hj<JwzB@oE=q)vBxWfS%-wA8jX&U}2VYZ0m;oVX9is|-zRgq)=83af4T zQf8}|T{8i_iy|v<j@iJ<^0>Yp&FkEjqdN=4GP<H8NDwmoxTKz8jQu=AMPZkTulxCm zk~8Ch2P?#hkJp?`Q<OPN0c&9HTcDqJ42&^!K=6L*hZnW-N=$9N6x7NDZ_g?91OdZF zvi5URl~gR7KUPU7)duO!^2Jp5NYw$n)W>|jZE#PGot31qqX}aDmK-Qjj~pR_#c@X2 zEGDVuF%7=ol{A-27i7Q3D>CJ#ZKsy%K2b}sHRiPNsu_2d!Aiz+LXe+f0*VZG*}RlH zYK)y^vZ`XXf8^<?8Bx~}RR{wapHYMR!(^wibvhgv$+j}3^0FcHWuu%J5r!N}tV3xj zLr$z8b5U%YR}HW4&l<ZpgrwYn{>Xl`>wZe$Zt#f<8Asi&zi6xJ%;nYIK4Zfnj4FJb z7@ax?>^Cwt+6<R<dor8ZHTeT|)L9pic`~|K>3|46u0~xRxkXW-&u2=;{iC)Iw$Ilv zT?b2cDc>Gd?V4PQo|(uD{PgWz?#J#Ymz~ry>}W5((E-s(&{bxLI#Q)iQ7^VnWjkqX znmfhS67A-Z4?o&MwiDaQW#bOnUgc+mn<%-t+~36I4)kaAmoKq+k+)COR$ToPu2*V} zM~%6?pXR3t^Tcm#e|Njs2118Cuun2vb+%-<p?Zf|25&e=RM5PBJ__c*5>Pono#u(N zKXXE`8mVa}nR>1ieoc5-Wx|0U+ah8|S8=%n?BO74?WXA}QSaA}#)<xsibYX`MWH<M z3lX~<Y?Spx3@aYYynq8ni)v6Em-xp>BP!P(?RoG<%NPZi+~9+`qg++oDL-*}BFdW_ z;5=taaYVP;tR9#zJ3(oAnMy09T%A|U<v$7OVRY!3f1T~u-Z%pEmsb%ldsE6WBdCw# z###&BXQVbg?2ZQk(%B(@gz>ln;X-Lvd&E^!ISnmxIHO`hr8(~0I)h=R1lk*}EsWZ9 z7G&^$n#<%mmKz9ycUdtGj2`yI9$mluzbYazI+1KP8bDQ6F02BNja3a8ZdsAV2o5X| z`b}uW_rpH$)ktE%jxmS~BtHVjN4L&QuB(UG!r-PJ9m7`bIrVmuC|{2(+EOl|Es<Dh z14nf-OjFbvQ{9afTabR~2HvJC8m5EVLzUW~r_gHDr_U#iyw7%6`HzE%ZjncP0>AYT zz|Dga#)Dv~UG)j&#%J<XrrEFVq(e6?(GQO388m|)O84RPo_xpHH90dv#P^Ll-C0H) zQcUHW(mUMKRWyuYvsmREY3o2ooeuBm1>za_S`i}<4`(da9_3{y1;B9hjaZ^nEfPxC zVosT6)tWvx$o<IFz)G7J?c%iw0mov|a$!_Ns-GD()M5e@Xf<{Oqr|~ZkT{%N?ghsN zsSaS(T!JXE+~fU3dl7sTvr1RJ$I`Z+O_gpAgXX*paKsAU^xF(5{{ila8jj?RhUq1O zUa2mzX!?ns2e^n3(iZ-TAUop3(Dg?it^H<L{cIq5fc$^oCnOdsdFSJ>Y6>%Fb%~=U z`$;tI5lxigQIQzcef2Kkv=~8&XwDy(*>|XFJMEa&D+O^l7&Bbx*(EvvP*K$$ch$(9 zJB&0Fuq;pq6P1{7z<>peYI0jP552-s%_luUw|UJl_zp`p-fSLq0GoY7;g(v?A8B|R zJ)|W4xePO-(;=kMq7pFZ8lfc7-f);D`H_JwPiCe_dbkzuunIMnmuZ5?O`<Vv0e=vN z#r>F{GT?ARe28WfHt3W^$eLT}Y)7psfTbHX;@{(pJ~~oLpx&yd2_P)Sf)rh-xg>A% z4>%D^mbjyu)6=PG{iyV6y1<Q1gS6ne(3|5dRc`GE-Waw@wDB>=j0-`Hg)xPcLq}DR zC^<cX1x%}3NY_j|ufq;SyumQ=*a&xgsD%!OZ_u@pt7wK^*Dz9=1kKX)PvCd-PCFI^ zKh0fZvz*ZQw57M2!Za}|7JV3mWKPhuQ<S03GyG&$^XWJu-0dJptr`v8Zoo!&WQPO= z-Dk_?r>RTpNV)N@AHC<iE&lbSsru8ce}}%BZi_YooH$^KNPiovj#Jnf>8a_!*K4A+ zpA!z~RPKvYP=Yj<dQY1c>`y-3Iqvt2)NL|H?f}lL_yj=R?=jytgat<$H&Xyr?bw7B zNkbag8u!N?nB?;Ugc;9x@cNjTF-<%&X7U2{y-=qiV>N?_T}*g^cADif&yX$2DquG0 zjFN6BU1CTF!B)<;w7jNNXIpaN7;$L?EAhuSSlY4;R<y)4Bx@ZXIUP4)>?N&jYQV$p z7HgBtXYOImQH9&fg@{H%pJzyNbTCbYFIb(E0YGDbdN*y<Yg{!<p158f%-G~@8Z#2r zdozJ7LI_Xt1gnMohTi(jgBv#5+9a>k7#5o0qEV8F0CSID+c2C^Z2-vRunj<>8T%bt zVa@z?x-lqAFU|z4_uyodx7==!)v&gB-wp3MQ(D>sl;K@|b|0+79Z<;-x--Q+?{FqV zo1|J+n0|w;Hht&FyK)$jrJI?clKPAnm3fO461L>V+{CRhteYF0{!HChQP<_Mi0&Wk z%(s`479YB=dHR|G4vc@C2L|aYpGJ0%D&ZwNXqK2!WoFEP2j@7ZN8!mwz#}5#BDE@1 zAUy$n@T2$t>TNcNIfe>vgwoNpY=liD(ej9T_bRhPff5E7PcFDN*yu>RIf4+n^_`pe zS#9X`2=DJ50lLyxXllP5S)(O%)WX!D>~=*X#5F@S*8$5L6!-3Da844~SHf=47vjzk z0x5&wg^R9fMS7!IXtHbAa!@fIS&sR+Ov!ahM&d{1!A)NI%IkGx5#8z|?|5sy6CXUy z&v2J3*B8fP`A)O7@$K4RxnM|%@%Ff$OTOX>1gya*uz_xtCp(tGb-JeOTU6c3!D1tM z@2eujHkDaoi@vyoXtwJNy171uA4T0>PtkZnBbRw{X()UL(wybxi?l&ipcaWFg%MfZ zldF>&p91Xl*x!Lxj=-H~I~C&@OrWzMh9&cTCpeLXY8BPIGL2mCn4BTDnP)Tm)<hr$ zU}{AyRBbJoM21HAI_{KCu`|y!M;xl6(8J=9S=sk$T%P;oiOwW`knyEddCMa35~%1j z_N$MmdNlI~f30YROSu0QI1`AabCuE<M!t&G(5Tj!Bd-Rvhj5`wYLipX{p?)5Ckgbc zgl$x?#wrTHx$YD7s&`#Z*_4^Qm~MDl*?DF%K{bJTxbL*Y`<ZW^ZHa7}2-x?J&-UYQ zpUJ9!-h0c@aqZ~8XC(xb9m;SA0Ib!_DfDX`l^RN}Gw7-BiYHko7pjhemzFfS^m?Aw z%8Z<q%9IsDZT&QzR1{{l5DHZhQPZC7UnkNB@BE-br<O=z`1^FTX&KT>xUkIE@hj6! zG<ohHQm`83hl?gKtG}o}llq*PURlsO@pJvosO?p?gkeAW;NswWCjPa@gY%vNI34<p zIhDq3KF~A94htqgIv(=p=x=-+U%6}EH+1`zdz=~PkTE>BzcCCqQ1+cEWLC=?IZf{V z4K(EdP(ZK0`DEx<hH#li9dUHi63Gn6SC;9xvP^O5F4J2NAJkMWL^QHl2QB*%1Hh5> zLsvSrP}(kGx%)Cx$?Qs(O#yfnDN5pe>_`mxNT93vA+*5mOS0}>wR+)l`6ZWU7;r`( ziFy|arx^GimwQqk_=`onqG9~_UinZFBsancokV&dQ1eMdW5ls3EHY?>MRrzt4h$3N zF>~GKAozxMAnL@aMJNiko}!IRNEEJNOm8h2wy&w=rg$plo<F6O;g2M#JHW|uf*QR& zd4nUpkawV4c_W&vdpQZB?o1^)thyc!?A6%UV+KUDuc$z3zms`l28wY_|F9$cqWL)$ zN3PuGF|d#rll$yr<CJ<(oys}!GG;rgpqp8-Nze%I9;#qo!vTSXrX^aB5y1n8jh#&6 z*RxHggMG{6rv}SR^jGtxHH!J-+A(bV*?kQfi#Pvi=jY(mY)zgt+cee3YH$8iEnLgZ z`bVdDlw+M@ojq<cyxY0~F^3z9n~#9N<rgjKl-ye6r(s)1rbO48ZDfy}jPbA37IA$O zqVv`2k!PR3kSNEEY31EaNWCM_(_^n~(11GC;1zQ@pAT=5pmpvqdnhwBLN`B?PWWX3 zdL4h?^ErM^F^e?6NgE`q%N>mkOQ2RfFwizxkiJY7D-OXpV(0HmA2N#h<i#MEWx#@~ z{baxlW4(+$&e?n^hjBIr#dsNm=qyQzf;nYXqjM#5)6~k|U|T7jaaH%_t+IRo7;|U9 zy|c*Nw#5(3OYO*tr#;oEzakp`j&JCw<3ANv=+ktl_$X9~9u(468873~9rrM}lD=if z{RTw=vbkTKfh+othxu?F$(LQA@L(hgP2f_T4Cr8jwW$M+pwrHp1t!M`$q2^}PFsa1 zs2p&?IQM4*cMkc_U*rFNkDmVwTH3B-4sqYl2oq_ldqNTm9FCgl12AkM{d<V^=wQSe z*&+tS+77-Pmexd#&oGE+)qoDL8hvEiYlxM%b?A^52;eYuOrJ7Cs-x}%%~U~p88!<{ zH81s%uZ>rHaC7x;+YdkR5gwyMgKfG$<6l1=3KZUB1-bpmtn7FrZoIw)05u=VcSjE= z76_<LWKH_js3+;kSzUaZbVrbd+e{mv%*8djZNxjkFMH=KUV+-dO@>L+)CMX}9O!1q z0K0_x|5=Kof>z<-DJg}*B%neN3{Ry+>sz%2xoQJ~jEX)P&%pwPK3)jG(RDe|`K<<r zkb7fpZFAMuQHHi~0$L2sj$48-Pw3of&spJ+f|H6AI@fK?m_#@b+G7vftTT6Il&S$C zz0G>bsDU2?&6>#-xYxh6dFug`*8w-S`12plWpZV?t|UQKt^(Ny^Pp3;{@ZWn;9FH* z6hQ(J9zMu16|&SN7Q&aFS*ovIA40E5a<S8}+S02)_3ijCWDU{~S%%x49QT&+HBZyh zp=Y`;vuXKy-h1N%m_Ulx-*<B&LK^P{e`XAeWt2k08fCp8-{7D{YNB@M8+aA9*t_m$ ze&YdJH{R+qcM@vrFYjp%og%9FOpX}_HX^Vwq`IdPh$~PMxi$l3qIyPN9)QLg%+i!^ zWu5*`exWAz4Bp9k(Z~TxDfI#sqD7yuWJSU99G`pz2H5W4EU5tO*M~m-Uw-h{i)4Zn z90*?Jg4e*pT%;RdtF;1~3}vxdVNb)Wz<197S`OBwdsEd32X`_VUYUoHgv7(nq$5-c zWt3V+Q`DXITskvJ&wRb?WVR)L;r0LVTlSgx-I3aVc><YmizDlTQ|7el`=ov^>M?+o zUi^lldN^t28%aZ+T3Cz_jqYeUjZ_nl;)S*7;u(0Q9uAOZ5HieU!`u|J3`<Q>&kf7c z;Fe-*bzq@Qof-_l^;8<r(vHFzaph>N+exMje~~ge_J<Si$7#Z#?btsir#_SnP<Um0 z{$Hx!nrH@+x6d1u(r1hB9u!vEM1bKGZ{%^yL2-c!L~-daX>$5s2A)emPMKt<pxvE0 zk-(jk`mzmP$uhLhr(?F66F_A8@eAWd;0(1S5_h1b#GjvjXd5E=eJz1T6BwdZ)POSp z#}N{(WE0$Ey{bq5{r`J~L54D-!p{E?smGwkGV^eKlh%0UTKjo|s(#lRe!&FDE0mv> zA4!rOWTrT>>Sf`#m8;B5K<tkI5GPJJ{FtIO$hZ`FXyiuCs-2yi$Wu*rfd{ohdLju` z_DHcVH)}xqhO>7JZsUGNN6Xz4nA(&Gd4*ZjhPT*UrX6`YA(8V`BiT`>Y~K|Yji0h1 zuU@D0Jb3Y5;IlH)!6SbGuQJ3ggTi@a;TEER2~C*s9bIOF%7Cu%C82_5s5@LbF+`K7 zWAf;cP!2aGf5u9vaTF1`o$BWdfQh!5$KkFCx5-%?v7^gHi(sH&>S&n4z|_V4k+JeL zY_gn1Xos=rRA<U__v6KkphjZlqZIM@O%bL}nWX%wfJyD~6PlFAT_X%W=<-Rp;r2hX zZ10-N|BLtGk~p?_ClH`DO5$RV>2Gumr_Ku~<tXEuK;2n^%&0#9-k7%w$OhmVQdzJc z%VdFL_jnf^G30>RVi*g#Nju0fb(H`4!!J%M+rIL?;Pc0euI^fbZ_l*0XIeRZF-vam zIO1Au!k=y@Hn%*3E-)e;poAT~^B8V4#x3IUr*K2ollJPH&2;ggb7~s3l+>1Cp3CXi z(Ib#zb1scq7Sz7%*|Jg9;*V4r^zk)$UabO4(ZT)&hup-w*YVN?s5Cg}qxc=`Z?Yib z+Aq4BnOriI{WZj}jmRQN7+D;2vk}vFPlAvVk;vjazHCIl@HC4O>1h(MG>WFDp)wl6 zzCfkVuD<xx2-0FUYEFl7lu3+fJxK^+>M!ou6Z3(QP<I2P0N3Qm8R9e$)_j_Q#ivAF z<Zo44s2_tRF0cofGnr>I%&m==S0CMO1<-3Y%H5~tSC6As*QZBYb0k<Bf80Q4_s67v zO2;J2GI4O5&kUG=Gi>#Hc^0o9HQR<wGmVz?GF4mde{(`P!O_;*QM|U~Tv5G2^K}g5 zxaJM?otaAtOgn$jPS_Kh&?3cb;xDk`l3%R9O|3@k$Zhc@*avXfT|i8(usbGHb7L<L z_Qzl(*n1g~O$zu@TnDQ#f}1*B5i}k22--vc=Wr9dO<5<`&jP(|9`889*#w@6tK<g^ zo_*6uT?Fd@h%H+P@D?Yq<GSGw{24TSxc$X4{DolY=wT>k7zQdW>Fi+)?PI6h`i0|N z&3B#e9qN36$2lGZN3oL@Zh4yUmskamFBj`M8(*BL*X3eIs_ImE2jSOy*!+H9<h*Ua ztSSXJ0C-_Y2@)5>+bs7LCsucq&&?>8UUA6CzpKj29MbX(ejv~U)&VXzu(<{fXU+5p zdM+cvvHh)@2p{J6Swzz+y}>g%+#GdKNFbzBUl0E<H6TnHD7AgtIHl9a3T8VC$R8ez z3G7L!tn7ptx4{N2Pf>CE#>z_3{v`OCoDgaAbMSI~aixssSpSAyUMf2fx!tEwyqnAj zb9N<XKpG$@`zXj1kRUjzmX#A0WrYu$1F=x-V`V0rCb|>|UCgj{!{e;1gu_4hACy+T zMSH|N5w#JMR3Mtv8wPzLG^wZfqMiU#rR<xp(eU*QpeCkH-(=FP+R`2#|5HAi4o;dr zCo7t;m#@gHC9fKmfKF-rrlT~cerV~3n3H_p|N8c6>YOer!&iI?D2pV;=jgNQ=Z{$F zNltFlO-4{rq<AkAD7wu`xV^ao|8+mNWzY0nr+ZF>*pR7b1HU_!gN_f#W`)uBNQzDi z{Ig~jWo<@<|G6f4%=a81{r5eVoi84-(2^|k_SoPU)|wMA#k7iZf@EiF20b~aw_&(l zv$2*%`&8?@G2ZmmWjSF}5AoH-A$w2Z0<Lv|fqUt%z$M?)t4Qn<H+NPrZL<!&W$h)W zG_>!pp_&0!c;(Cruo=O$*tjEW22()>eunZRerom!(mEc>N`L!+Vw%jLD>p%F+>2<f z`g0+DQ#$G_)npV_^y^PEv@;3V03~x4gXuRx7BLe9L%+!b0GVq&=5SsdXH|Y&?f-rg zd&RvIYo`*>3>V*A53%9wA2H?Zx6C38F|Sko_%6h<9@~%kB9Kh8=6+05%Ew2dJ$$4` z3ymQk<B`@IbHF3Ur8Q%0$ZzJ<2D`_yMqAz0K;xG*3x}ThacE7fsE>!+e@rA34*@W= zkkFM>efxY|T@YO9eCJa2zgAyikelngpynZoji(6QFrqP5Btjv3N^{JH=*o=tT)tPd zQkwrm9j?K&K5=S6umX0XMF^O_PKld0iiT`amYe8#pA7c6L#6UYfsx7%J`N1q>nEm6 z`O&&XI$^9CuX_w9%h!NYN$ezsMzk>w5a$siGs2I0$5EeEo~={*HS(H+ksGyVEj18N z=_^8WBJ9#-_b_-jNc5)->A5zSE!^$MxiY-z?J2u<=GtmzH>pI!Gvbm=d`3Px-<*Xe zam^hkW$!hRSF56v(wFL_j$Bw{zph5LiHiF?8#E^H&7s=34b9Hvqg}!U`aEYVM(;(7 zEvN68!=0$K<$o)zTcp4mN|i8%vW0v%g&y-Woy{9qX!Sr_ssq%z&bUzi7%S#bR~zf9 z&!r$5;ML-H;n@C6@`??W0%pF%=<6tAq&3i5ZS0c^H9WUsF-<M^d=jQ*moHeNrzQ#j zaoT6<c|_m8<W}ej($ZL)4Z3q8JDZ_Q54R*NlsIe?#ujF>wSTb5_BRuTArXdLZG;ub zDLcqp^;3ijv!gC<LZ&QLl~TMBnsXIJ7@6ynncxBIZ)Pe<f26A8JXVE#8^ma|9B=Gm z^jUb*XE1~A6XvM)=r6mqVwgh$?+bU*6#JRV{sLg%o@}oA2;Y#{Nm<HD^*Yp1WmQ0` z_dWNkfKK8v$_CL2whgLXb=9NN75&MT9XZa7$20669S`{Jz(M}+jt8WG;7)z82<3QO zlMTZRX+0R?##BS&&scF<T@B605Jq&rUJlzWXH4n0|8#t_#=;?0^QR}gHO@2Z?1*o4 zY)||JNs@j#*G?VZbnt^+dX){G)4!O=JvR@~)M?Mik?p4u&Ya!XLB{>@G%1LKX{|RU zhsrz-W^i_eni+MDiLV)PRAe)ddU@LUlc;!H#$7ZNQRo)516T*3o9%ddi;?z2S2|@j zPB;R_qcpj%5zourH?8E2(Ff3uf%|o%;;{{+GizzgF-}rSC#ciUgWOYVt^@YL1*5_3 zN}l%q0A}e^c{$KR9~o>~{4?JTkZ*3>p1c98f;ayk&t-NU$qfWSSH^+S!+rR)^8Z&6 ziCKM-1RLEzRaPFy+{gVG#tW<H4A4k<4a{B5lJAz(WQqG+Q2T4A7$0cugP#S)RuLw) zip>NYAETsvq&MO&wv8A1dZw*Vfa;CjhM@xR1~9C=Ho$<>|J0!mI{eKJ;G~}##UX15 z@ufIbGk_elrW@xQ6qT-hB(~fA|B1h2N3rvKV+m2des^4DMFE=z<J?G>UT;Qoq@M#H zNii4f__O;Y<;YL_X;3+~EEbTj8v$gp!?``LO6j}J3d8Wpp{_|GW(+V79T%nDdMcnb zybgz5?r>!LyN*;6*B(`l!H&hGmX-U1l9;kLE=}W7e^Dz=2>k%_Mn=9wi79PjD!pV- znw~6D2A^GiY3dcvY5O5STMDCoY(0|IAlY|ie-Q(42oxwD-PN{}A&o_ENu3~Ngdkv& z7KEuK-8mC*&NQgT71{1{VrXqML(SW-mX9)dNgg)`K=B$Pp1wBBS!c#K{ZQ?l!>@Ss zBWT(Pts`={S}nvLHye7YM?wEF&``9(sA^1n5zglyCzJVBYI(k|IL<El)1E)9a3Q}T z2dtYF@Wg0!Fv~kxXr8a<t+Yv{rgkSE?dmB)MQc4(rp;pyYUl_%MPJT%b15rFp^gQC zM`s)_M2cH+ptoJ7P_{$w#{Vg3J1qq*dATf$H*ElPg`ack79t<Et8g;g6~&NUuI=kj z@I9!#rcDSMSYQOe0xzjrNU$QQh!v4WQzs`ENlG<GGX06PQDRf^Ui{J!vTb;<x#Dz& zWJPipne8ta2ufh_2J6l^_+}%w<L8x+L<<EqFNSc{WdGqbRau=^7Y7-{5Lq*iR@!;2 zAtEwiENMme4VV&8g4C66`Gm&c{Ygej`Byl-Qo+rC{>>}!c(BBN>;MNWCzT?~o~FbK zgUd6*fOp6vG{sEm6v#6hQ(Bip((>-0A1-_JEuXad*skRQRDx3KV`Nk>eEcTkwwATF zCavcDs-Y#@$b=Or$C3hHUjUrrP34bcSW|}kV-J{<8jG0zn%3kW%uYVQHTCy4$)F0H zUTj<O|82eaW#tn$nwK`cz|#_*rlT4%GO8jDy*gn2>?n{CcPn5^1OlziX(*wzB0W?J zmhhOzf!6sX$2dnG9WEMAcB@a-=&Tg1k{$;^iE?N=A0AI5lwh-6*Xa5z_1xq&i=nd9 z%H}Iu?1TE=9X{LS9lPGYSqoT9L$H2`rk(7ftr0!d^Vx|LBP`7Ek6o1jWJn@6ADHe& zeUYTtnzCOGm>Gc~dBobbAbwPXS*&^FKp)g{eX>R32PlC03|%GTrj1I1VMb1AF<Mwo z4W%NC5d%83g+D1P!!#%$+s$sN<3QyT7b*Lulf!N>w_mG*p~Ix7Xxhs+&)UZhUwk!< z{n^W-S)@)_jt|ojZP&rBm>eytynMXnh=J7{Yk|Ag$X063Z~5Qyf;YYi%J$R~qstb7 zc_~~CWb>l=Z1=8l{8D24WF(k9^HBiyy@uGQ7c?|b<JNZEJDO>b)8QOR8Z}%B4#+4? z&n9#37bEVpA5+RT&^nS$hc8`@gb%LEOigZ4B4gC}+?qH-{z;pmSjl6R78A_E37Du8 zhx7@`ElEq_l7Y|QPvw=>ypj3iJbPuBTKgBu_BzQ|H$6#iyUkDrID3+v>4AI&_~+ce z^cNyC-0gVv(&F%dFa4@7Ljs6T^5HS9a?X{&_?*F4f|9aOrAR&t3>kIi)j4Fs>q(B= z<z=q+)9I~$w=4}Xs{q^9>`3hn8?lFH4Osdfio1ETdL7LuoW%m=znKqFC%127=X7cH zgt9IBdu7>b9~Vxn$5+0(NkCglHsPqLlh*9@DCMikRu4BaDs_IPtyL`?i6qR=(vCyi zk(29m!oM6BEChs-*_k_Hd)}UIs)afIk9CsZ%pHfmmn134KCE%*d~+sy^VaYypD`oq zO|%imwqIYW>V|rc)aXhV2&y_7W9aMMRJd4B5@Zg*eXhkmOIBxvV#}ikB2=$fxXFcw z5#PuAv3W##4`3_~UT1Rw2}c)b%cM~d^*NDgPpdyk0y}yLC%!`ogBxAzl}n!;6L=xY zs>|ZD_<L`3^?&w$F!jpG6<Ho{P{Rq7FDj?5en*gH>23_3D~vMJbO+O!1xg74uyEwV zVK51Nt`2%8>%K>?`YtUD?4zT8olypo1s;u`xHjI>4c?DWK`^y&)rB72y3Rw*6WX6= z@l9en++nmbc@<1#w<#bYPLLIbW_uinn$Kh(ggK;!VJN!FHGSV*mX}a~3chGQ{Elr_ zX)jW6=jNd(ySASdQ>@?9n)o7u*^+9BH_&8u&Gk+>(Xy#E(0r&NMFbgMOs~-J7xqRh zR(7EdO&H92!!E4+s0e8eNNYJGlsu{Qjvc{0GInpx+~YQrPm5$p_S?LQMXOn1RC@ee zrA%)hP_0KpW3-aIr&sDa9N6u8qB(PJw+)#mYd4;y>iay)cdoxy$w6`OCyx27+)j_z za$~$qiGQL7#d<3ux|&*l-iQ_WI=g7aeJhYvo}m#Y&+iPU`yLvBV|3;I6us&bxwIO+ zLtM4ty1l}8DXm(@26E)B@6sp*`>c7&?i$sBAO5_x{d)|k|6S5sWKA@<1~jK*y&!Gz z<QeqCIRl-0CtcF&40hg0xrUaVwU(sFo!1iv#dKyLbvcsA)IgNihs;>2$2Dxj($`o9 z0Sypo16`NaZA0ttb2J;oyk?bcvxa3zL-p_DwO!#$+xxGe@Mg`?89XgO@Uv9ysWuoH zMA^)Rk&k}wLnl69&xb|TCU}i^nF>(`7DGUL9;)%*Zy3088n2BDstpS{0pnpnWQcU9 zE}-h?eU2im-rl6mge%=z-)|O6J{O<kylN@mHW?;V0~IGvV8?h`5`m|X`$rG4RMJB! zZ}xOuE}?Wcht!xU`|^xtFl=;gdu-HS43e|9iZ<r6Yw()EO_IfI8u=u@odx-3I1Ccx z+*txC5azLieoONX8fDoCmMq(124vzjveW{h%PA};^o`XY()*2r37>bNCE<_oeaWRR zB;Ezqz^K5M5e?ZWqEVAWF3*|{BP@!~WiXo7Md`t!MV^)y>Y9OI_%f0;Vu^(5=@hxs zqG^DPqAP?J|7)UHH{yAt7Ko>w<)fHR1q{7O7=ggRtTHZV#px=_A*gP2Q^=D;>yvGH z@z|TapR)HD>H`NhxfcRXwA3D8D4#!&0S|Sua5{)G;|AnQIR+1vS=NTkxDHARc6BNN zqfVtJ9v)>|uIz}lv#s4(+T*UW0l^)UU!Nty32KSbdS48vFE7+rnG@ryj9!@Als(={ zAhU_t&=NI5gceQ%7n#t&AuO0YYTKU2n>EI8$c*jzz|JXm*gwV)JZ<eIGZ?!`30Js6 z$GKvC!SbRUI9DKco+TZSv95K;f@%j^jG;Ox3pH@5*lT@H{Ibl0QP3VAi>p0u5n3(u zjs>NzHh(d`p?yuZw){L-gA0G1XOEYQ1BI^-L$Z{ik!R>DAk*)kHlE+tpRozxEUAWr z@WoC@D6s=c4UIWBSzPUm$wI%)ruO@il66Qx2!7}-`J{0yGfecL!fn?%T8u=~T~ru_ zawr|m-plUymzC72WTnwwz*@<8$y3hUjI}cMQ15N}+rQZ}mCX=?N>aHjOUMR5Q6pxq z*dBS$1-ujGbk*4dTP?X9rl-TacgU^32no}FB>7l%W9F-ZEbm>vxTE17`aADSs#@D= zMpKX!?=2Ljc3uuY;&XjM<=loUQt@FLKoq~!5bomnVSJPl;N?Z%!r0c#E8@b2W<uaE z^Nwd4X}Kyd{qjz*8!w2ZQHwQ~axQ`dX^OPLAncgF%;@MQ!EhvVzCR;INzO?<c)sma z^=tY<f=BX*fsuit)39AejUTUx<3FCu<l2!O34-^Qf(o!6_C=n#&gg#~GY6|rRm9Is z0I|4R(EUrVrf>%X*YJu8GMg1=7aWMt8lQe=knzM$x{d`!@jfw7I8mVw4W@MSu);~$ zo1)u4SW<*TcIV;%1R1>_ZLAnerxZ@1;?rvCWkEviQqI#I6G@%5pSDm5#d_PC1FCvf z0YZ7nxZ~LcBPI2Oy(f_@a4&SH-5We1=q55lVzd2HFaP;Rog$siM5swS4u<?(ns+2h zwKsu&yGfM>g^SZ_ZK;RM5Y}?#r(H8})z}G-PyJS$U-<*vov>FYCIg}|5bdgPccZRU zEv`|?taaRE75=Tnsu*8FR{d#_Su%`)C@?QDLeOX`(v(`plN;_x1Ns{+c&tR|s1=NY zbI=XLF=ft-srA&<PZhd@@7o~{=+gG4|3aTwnpk+LOc8wW{4T!%5})Qvd>N-;nE8l( zd;6P+`5T*q^4JM)ybp%y3f$PUboXwO5NDzOngBRsb_}e4&UlbmGVLk0rHur)dDUtI zF6qcFF)(|!&<Poz#E!<jPO#Jqe-~BQ$5Dr7Y|>5JaXqw<P*Y#dce}pI)~NX$0TBN6 zp?BkX<38qILqRXgtf>tDPB@llLuY%~vEO(TV$LO~{gSXW!gXOC`p0@|PGmKsDDh@j zz0<OI)YFixa&+C_Pn}BC`5GEZya!6ZDk`yWXjv5@PzAc2Jt?ANeSS0F(L;oC=m)kS zO=3^=U@0Lb?Y-&$*#U)e!c7x8x40mv_q6_7Q6qX@f>>SYJ7^d7nBfvq%M(D!)i5~N zp^UmY4tZc^xssgm%&m~DneII*BG^j`X+uXVlHlk>|8h1eh|=1xmG9Fe7@U}riWz0& z(l#S8@1&^TAVH&sC1}lt+HV-uj<#t>*A(_Rm#wi+@?F`KJe%02qRkM7YSLy+t!)+G zzE=oSYmR-^S_wDP_U)D8P&Zac+d^%_$%7iPH0xhl)BqRKXsMSBIYgR^I}zC`6iZua z6+0<|Cf!eO$rH9Qz1EzLRC9+~RAtc%PKUdv-ssP%VzE+GCcI{(Uw?y!%uh6HkjFPb zKMtX=s$t{vzkf`p;$)dB|JGqzM4ap|nNG7-`6Da~xy)pwh(-}56Cw$7E9O5t=*_a^ z^BOeraValqX}}uh!^>w#Imt)N!^m4mPGhW-mr3Ll;={FgYWea|?v2>$sag0YAd1}I zX@USh)43wk4HRDqFgKE{xJ7Puga*??J#%Kc5g#x;H|geIi-Y_a4~43ELFp?pmLW}& zuF<)kc2z1Zv08uTv29j<H$@x$L!(WN$>YO-Y7K&zESyw%PU$`q=%`5zfTW--+oB<; zKTp@)(lBu!Ki#OnxJTU5ybmjAc*PslR_=+HvJjRPBJ6l`Remkm$5U}qUl6ux4;qT9 zL8dOtok_0ZZKXn0T*^>)^s)lA^Xi8q$YJTvWXx1Kf*8#^c5;cL;vSn|MYeY`bDo3G zmqQ0SwNcqdf{1CgGsOZ*Q&3K2s?(PPyPlflekCx`|0+&Z^IQ0>f$6$i2EZHPWxtP_ ziM0qOhc3ht%Lp~;Z8%e(@k})pZvChRsv(uVl{`L~r~9uMz1a;l4XvdG*n(7MQ1|lb z)xtZ{5t`B|2@Su7&^viuY~f|>;eKp2oB{n|V~FTn2dN-PzxpbmOT<eKBHtYQ*r7~v zlt-PRC`6tZwFKaF7Y7ls)2y|Ss~ReoHaQoCW<#-6a<&VX=NVls2^jAq_pZzng7c<Y zhdk{2G2^^2Y<qkG%_!t=I9xfKII!}hDBh*{8zSe0%xBQPV*x2qn%wb-UnCGQLvb=L z+;qAF!4R#9hLzyBaNoQ^cr#377GfefJC+pt%hV$BFko2Z&&zh`Ym(@y%U04-Qb1EP z%D`7=RCSISdHX8mlORo6^PVh_(c3dH*_}>r4ne#<>398<$*cuTCpw1fzuE0ki_^;L zZ@^o;?C`diJ1;{>i8~10WSOtdTuJP8U~!N<TQ9VL_Zu|@3BE+)yb^&u>F6b<O{YR) zS*P<UR|=jG%Hx#V`ZIOa151hwlMhKjt%T6AS>#>cr`E)^MfGpWodr_5@(ww_G{#p3 zW?uO$4lWRWRhgrjTlP*ojrzOG%494d!M^0^gmy1XYc4<BRtRlT3d<Qw6nB>8r7P9B zB8Q<C0F}va98z@MG=L7q0uP=VELghOw-IjfV%xUfZxJvcliF~g;x}a$1mc##m#;$z z-_&@Im)SRS*=Doj{HX}_Og@|KYyxHIs$$b3_n;j3@bY#Dn(0hB=omGyfHN<bG%q${ zI|&y^leig$C<GCJg&n`*C1Ns_1Q}1%*hoUjAS%jXL9}J~o&|C`4Z$G`dhb_ZGcTuQ znB+I=P?hBNI8~)9QR~B;Ga@C!YU~gcMzTdn8e>ri;A-%V1vSO=915Wfm!=So%sIUn z7?>6X<~QHBsk)Gtlv2%Tl}k1Tw>?PWIU@1#uG|P|P-t0zwyI$`h9Nh?v(;qmnAjN? zm0y9q_FI&W&!)656|AIuhh2{h+$zTVd*u&=;*T;hw8EVM2Fb4{OV}zQyF|)r8U1nj zRY<c9Rnm(WLi?#rE;RVtSQ_FEEVDq^Ni-Gm#||1)P0R3k<*zFCPrD5uCG|6BbFAS% z*JkK>g0x0S0noSz>TNCHI2h!g3=hcjc39=l=yrF78XMuvBCI;YsKinr{$0ZktROQp ze6(YT-$7HJ`Q8Ir6TR!ve8`E)-_BufCYf;GuL`}&!)Alw#U?R7+ox!ajwrK2NW1tz zd=CBooy2{{LqW1(cj7}Ow?(-v2A!y{$PO#(>G709f=ETSK>JvNHJZCQb50Fys`M^! z=xjDIrhDF4yQ9RcVP@W6=&82i)Xb&s+Max{LZaJxn8<m1)(AmNo}=V7LR%z6Wxv|@ zs(kB@E~j|u<q#AKn5Ud+ReU(&!9w83i#Q*wx7&Ie{nZSHY*?w9V+T%oS9TK;9WcME zl%Jzl)xWQ-?MM$eyE5i{7uQ@AdR6S>+KYlGu$f@eIOnZxBL3gEc2xz}kf6V7!(1&w zv^X?t?y%KNcW45zr_h#i3TY;1J;z{KK(EFsVxXetMh(l#t!Dy3kxW^9)c|8cQ-7hc z!z}#i<SFGEW0{^9pSWu>G1RZQAJF=q!$xXxOMd2yl%9N@eZ_zzeqO&s*REekxm7>E z^5_nXmQb8jB)I7gZsiQZiX&i#!Xl+AypuM!1gO~Y@I~CXX;})z(q*Om+eKT!@(f~J zdWQbEsdOlHIdK#=))3M~WxoB0!jXg~2Y%fru4#w%V~VKAIqlcAj;v{Q+)Bl@w;KUs z1=7B+`T4&JaUN5t5O080My7?JjJ$6PXHlB=rrlCbhzvd2{{}@z^hm0fe^l3co}mdi zkkWSrgJGJV#v+fA`=Od}Sq0RMxZcH@L5ycsaC$t1S5z4>OBDtNKI(Lj4EHyZUaFzx z)<k)w36%SF=F@w0Uq5)-38S3eV;Q$*q5ix{SDAf2Td}Avfz4-ulSy}LP4>p{;wdN^ zgEG=Lx%vh@&aIEa^tVoW^+2s79;n~*k^^D?`K0KolWr@ZJ4ES$$kNoUblW#49RRgt z$wA5wXAboxk>xyFU$Is|Zw08e{+RekIz@vMKPF%cO+LT5349>&HLl*qgC-F}o|i$k z%G6QxL%qo<Q@7}N&A34|Jv)%Z+qSl}bAm{%WSWqOqKn<B^tjU|^EE_7+#6Thlvc@y zH9xMnsiUsC%3eRj(^Xr2d}jR!aDrP1jzVOCgnOqZPwx{hH0Lg<DR7}|(;g<aDOsM# zIVic~OuRxb+SQ@Wf|zbePEfQnr@+d3-49r6hKgOr8$ABcbD3jHaw9=d=PBv})erk} z9;!3<S83)bQtDsmL?#g7;ftnL?ORxycxOt9{aj)rew5MIS73{o!E1<W%|EcxCDO`o z&Io?>-#0E7|J{>A^yu5V>CrhN4E(3P-<2Bk5~bVQGP9$28>4_NGzt`k%B;{8S27UH zzdtHKQ|%G6_;B{r-)GDmNX5rgVu48|Fgv7RayibF$)$HW!E_T)nr=i7t^Si(wOdHe zh;+Jd)#=>CDvGaHCf9*qLSHP^c{!^Z`qmq}3a-!F!{)A<sROqg@n~#9RDYa3XL~-= z%m<yii6J<0xVccTY;v55S;i|aWV#H;)?XSilI}1f2^0*uiOnacQ$0~5bL@~A&9N>1 zZtCPE0mKyL`0yB-#v^dTVjhPk*e)yZ)dr2zo=Fi8OotBdNTs?-$a>gw{fPt}B9&6B zcF1Zm2l~(A4yl95lPvpE+()>P9ZbQE9^z~$<6xd|tV++s4~<fl{`i*9gE+~Lv$oIp zFNuI4$XF--5OiZ;cpPlS{exT!H7tk9Q|09O>A)yi^QOCh|0N-Y#%suwKe<5tkT;>k zo@>EAf09r7dTbr0;91D9tJNHe(d))o4p&do7mpit`O6{ZaDCXBPm|T#hbfA)_2l7W z3a_j0I=}m&1hj(3UY3=M0Q^Ty5B3_(Trf~5b$z5AsxM#j1x!IeGUAJQ*nWYL8x3fh z6<%$M;PlOZVI!)L7sE8X0IJM%H7{jAdI6)&7DND<7PgUhD9cAnNEaKEu<2f4$vClw zYl^}7MWV(e9JL%Kt6(h@qeb9f9*|9@h8@H|^=P#uI@L%hw}am{wB?K~3RbB^&u>_> zTlaeHIfo#67K)}*-0ZAlM$amj^?y&y4bM{n3P>M`v3!Ut9~hucgKC}=ITFLqN=vMo zQVoaSv1e=t9mar4hdc17A<bvmZybnpbgyR8AjcPMlpl6d!G2{j$8*m}4Y!vEwYJw_ zNp-1eHO!5eXPLDJ4N&1>3|c_*(b!V3RJJH+L>M3f(&}nah#;_mEuAnZ7Sy)xP)8=3 z_{L8xc-+OTnW(1c<kqY=&Zq+U|C%58xn)~$ECPfTUez;8+lQZY%dm*=<ff6h86DxC zViMGC`3!>L>HPvIQ+hn<_I|bsl81SCo;#Wgz8Wf8(9X_Al%B8h|F;LP?C2--+M<H- zZ*++PGm6B6^JRt?CYeD42AEefa!mOy#t~Nx191o($Ca8?;4X6>D_{!(&uhny6=N`| z>itCvogg={!}FbsS1_bb?%uH*kuiUldqQajhz6L)gLO=dI4eQX|Njzc%b2JM6OaP& z1ji`cN1RSkBoDph;a^UGMetRMHteW?RhsG~B*!pIXJiK;UIr=6gUJXfaK1TxaVQ)$ z=)sfRXs^+2InM06LiW|n!*|}($}>zxpxr_^Kq6<Lma<m!nl%}P>7tb|fkI)F2!U|P z&YQ27<b^3T6g?ArnqCuTlD-mtn&ZoBHCZ4^0=t~U{NTr?MguNvS|izykw(FxPU_mW zL?W%K6`(%(bo69I9u|b01ca@XMlIHRkG?g|TSD)Tux0QzWKcM$hTr#aDr3eZ|GT0c zJ3#M0AS>(bX-5)JjWbkPq$s<Tr=hBflNQ>b(%@r_W5~Mvt^~I<fQPqC3&J>%=iN7K zi6Nmf3<i~4Mp1>=YjzNMi!WHQBR!DTF?a7hKzuP;h_*AM!E`K9Y5E35dc4dCFLFp) zpADim5I~LSQH@KeI+ONb`lbG5=@F)&`)+S(Q-?C+@M2VT<mNUbjK)Rv)Rrtfr`Bea z*bc1=1^z+|6Gk1|T)`W-OhL4@J|i}ul%K=ZA6YlGY%O8HM`AR+A8*%S^_Z|)19G{t zzdeB3*G-BTSFGF}2x)3>&V2T7WW<0&c7G!rAb<83Jg||VL*X9!Vt=22mpzhkmee#} zODz*xoPBXMSB<PbKf9h?rLpIEUIjrz8!J>5gcip;b$`${NX{0N(;yXZO@6>Qi{kA9 z#h7{ui=zj=7F0sFfHjUCJEG5^Oe;|c<*oo?RVTatqQUh(asJXKq#ko>HrU&gQlEP@ zJm{hlLA<(og5s9-Vu}Q923aPxMkT9bE%p;+x?RmC(BFiHJd*sdsdgNr&Xm_J!$BBW zM2FPY(WSXEgQun4nLYxhtGP_QZoZWWP{xYN(k#0e=>x1AOqjR6irwLv4bzqJZy=2B zZ|jgNX}Er&a5^loEDa@T%JJO=3ckxuu)J|X38?z_J$_*CoT2$8olR5;eD;yt%R!G( z5(Lw2W9~{vzj9H7+c$VvJqtTj%O*;*O+3B7khkH6W@ha@DRA5K=&-U|E%>4R(Kr1C z)Ou)Wq`PxUX7)G{!!5LP1a_w@0Umd@s1KGCr|lkyP88s4d3L(M-J9}w;KZiDcj|3O zKumth8X89;w6?hrEw5?pK?jDJr~`0w=Gi@pj()#fa$<xnE==+K;;{+<`z!TfGC$ZR z%ug0hc;{%x%_W0+zhDBQfFxfU4nCE+MaavWl-JyPYl)hF2iPCo&Z09k)J;&r;&PW_ zE$@VZ!*}=3?H=K}uwql$L~Xi!Z5TTo>rz<Nf(2)kw+Palmw}l{n0Gw`{~fvu+H$pE z&EuJJnUm{S2&%D8ddwzcfU$IdXh4TXV`!^afI<pfiG$&7o<)e)7Hf;J2SkIKYb{Fc zuX7_w)bzlNE6?BIpv6|w6j~n{DMq_%#;8$Tgr(#@tnAnlRy4hD->~c49xl@9v7iJW z7o-cfnOc`GqVng&Y!w()AN!rMfNn(ScYm*F4lB|RcS8(gLfyr^&&V3vk6+V`%d#>u z4PXUuEJ<}nlit^;(~)~a%6yi<gt>PHrqL{pi95|)L?aSuCWX+Yd=Dio#wa~tlXfN_ z7TQ&FXH57?-t)eFW5&y{W~H}J-K4_r<ap=0Ppc&I=hYOwAhSvi!y5fGl~pFFTBjwu zbDJ8=C<m-slDFK4kWA@(!8Q^xD{wz_@Lf#>cHadvW&jR`!|N|N&1f%cYR1KBR~=@v zGCpS={`Y&%+N`d))vWOa%@SXraKj2}UQ14~6PP$Fhn8N~4??-)jxcZ|E+S&Q_4Z`m zI?1w<e!8bu|K_hYRB-z}E7<hkR{45st4w2FFShhD&x+x5pF;F{0s1TrNH1amXVzDH zoj+=poj07hOR90D<%Lz>QZ*wYsIB>Mb|3QK<~IvY+zj-fhLPl{lI;iB_G~wdDtGBI z?u!j&^=D(ImhSrU`P`%9@djw+$Wm85Z|*p&y6TuoEt$l9GI%wW%DgW1*?FD6GwOVo z`wChDGK=l2Z|=LmEa+xVGwAw$sY4Dyu;dVd=}^aT&qp&BjTOK<>La6k?DB%DVbBg@ z0Y5UDCN_+QA7i1%v%q>lW;?7`ZqvRDs-h0aol0}Kv+W*!4e3o&QRr2M$$J6L;@gsR zDke!Ay(IFn`y+BH<tA}3LiT1wHUZl$>Xd`(m+P}1EHJb?oXi+L>TH4r0drFQNjK5A zYv9;VnR?u}>NWQhFWvXi>qTQIxEbz%!$3<398YYW@o}F_YIGG+s`-Qz+YzyqSP)y- zDn|Dp-YrrJ#I{FE9Q7G0dC8s1`cZV0^%6&|^sh6Y^xOWE=-Hk*C>n}rqW<9oRqPQ> z&UrWIVpC2mi6NIa=}`ieZpxj0L>n`AB8?sx!z5;$9gR)_vzj5*yBl<;AJH$#`Ycf< zMtRSl9o114BvjY6q|}b7-6yV#=4um7gPZZ$h)dwrON~}*@20oY-lf!=2w9|D9biE( z^@uy>^GLKiJ~CL+NA}Fat}_lNUb7>%n_(I;*lYYlbD3kykt0D+=PBv}#fN=4Ppdum zSI5jzEs=$vnE)a@d<lE*^3#c?2bdmCSGz|{tWkDibIW7eMjhqLWpgF_hUL5|-Ex+U z6)heO`wSz^9Iv-f@rtpGO~0|{yfj6Nw*=x-yRZ7h8&k}J`Ch8F#NR09j_q1H-+Y+M z4Nz}rm^QL81~`obi!m%j(W{N55qeRx)T2PglLWG>Jtqa-p8`~vJaO#oXXVuo#OY%Q zT8TV#5we=jzvnO~)f8dwmlViW)Mc5iv{U_sE&cn%J`~St9&4F98FwWpfs@AUgmCA5 zp-%EK_ibaX!4F1CSUk^iA;`dw0HzbqaVez^)`Yp`v<fU<5lo>=2$@1{=p>31JB|3n z)XikH<kS-J{^yTzcj!-He~iTb3>|SwM=1-&XPlQczdZS@r!+eK3`jC&49bvF!8+GB z?7Q<VNry~_jd!q)1iU`_+N#Zha}J;x-F(YQ4I|;~0g7Z_D$N`Y!b-rkdUE4%^yN&7 zTcWRn;fvYT4Ko2Fc_ijHIZ_ipO|Xt)c&cmFOW44jI)@)4qXXZpPd_SUBJW?=&KEeW z=9ZGjxOYQ@rPGr00l{$m^DpJ~^=MnpZXbzF&Vd~1rzxl!i!!b}Ywpzqz$JL8uE6T* z6xUBTF6yRCPB}?^2BEbGg*0O|I63^?>?j8(UG-S;W=A;~q_?<l_{5(Np@b74OTp+& zj@@?2{0=M69_Cs=#PJcRPm(X!SgNgHXh@wbOk7|<KW#{l&{vQ9MVf&iKOMsyrYpU0 zH4cNbQv1t&uQT7d&(79TcQS9oLe!Xn6}Lh|_-xEmLZl3^p(PRjyR2%aZ*OnP(0!P} z!j2a@uB7L0?O!a+vGM#RBgS8LkDOPtE`CD$u46Llmbeh9lq=RmT@J&QEs68oaFmr^ z9!;~L_j#JxsibZavG_Q`%?<PqJ%*K|u)c)oe1@M+@@0y;`p)&M-p0XWN9v=EiqU-z zXM||c7$}Ai_abHm(wc;0qVT7!ix*H^=~YqfRIs?Y=B~7uk#qA<azZVnwisGjeDfV< zj)TxUk`BAraQI(g7^P;|{{{$nA#R<r`LpNGUE&uPHZ(2niH?fVu`iD6<R_3<1!=#3 zG}3rchO3}~&G=g7B<SP>qg{Fc21dn3-G&#<F!MF-^U0)R9|HLi34ij&)COHV&#{!& z7Io0~(mEu)T{A*LQc{dMj@0-DE86d_Z3W@~{vl8>=<k^WU;dkCX66)8f?8Z@Nnd`q zK9kAqd-i=!wZsK^vT_BHXSe9stP?$7;R0_KUFPOI*R-$Go_$RzlwI>`dNr$z)Qw_& zG_1TF<C-)C)R}Q-nSe(x6SM3Ip!_%(cvgE>TKMN#$Tlo%hrOd;j`on84`V^in4eRh z1ZJvRm*dd$Tv0R`Erj^$L0bYA5ZB@=_LvSl9mRZ5onZ7BwN9pbo@a!ES)r~iVGsrv zsmC&D^xxxZ`&da3oTX)uNFZh|%F{Dw+5<<Cl$lX1WxY(xCtP8Jq(l@;wt(E13=Plh z=BRSHdx9auETyIc_w&C$qHG1EINK6KiY&<1dLKQ@BN#zGejwMYy>=wY+<=%tGn9Q9 z6bFWG%;-MUw{HfF8FYY@dYj?&I$rmr8EbkxWg*N9>j8{zL1kX{fb$tIzG-hp24V;+ z_U4uosbeZl2GTGV+jQxtiVyX;M5-t&<3>5LQ)h|vUPB3>$&aH_TCh!ONOP`IsEpD& z5N<-cZ^G&pxyecUS9q00PV9M2Hr~Tl8vA%(JDy-wQAtM=xo4yKB%t}bWhUh1Qy#OA z5~hv{vmp75N8qXrH9Nk*R!dq&JDyf54u_uk=?b%mD-~Z*lof);gnc~8e_{iiil;S~ z)zoG%n3RpP%F)VW2*0PfEw+pYsi_Z2(w8lWv>PBdJppIuvnP4Q)-7<#&Q6ykZOV(8 z4M%UFC)%sWX_2bxOv);%H7CUTa*KyJ<I8+zO|5^&8ai_RzFMY@`Ymac&mt2>n^|Kd zW^UhT{H@_K8z{Lb-88tXuh^>^-|=&za?u(wHCJWl2v{I0h_vIE`iXg?;KJ8y-Pk4R zl#%39CcxyRFo)iXb}1H?3_;>Ljs#OxrE(3;jkAu!*0+tYM%08oI}jYxkYdmH{?^_a z<|5zHVE|6Pg}R{2Bloi3kYqSJy=oe0jsJ6=uW7p1hD7R3H|_bZntw;p7_bA5(uvpI zj%bPgcp|PN?nZ}Qu%f)t9>l-!BiX?>`eV2+1St>T-H=FxfWwTX-McX_y84~W5!Zfy z#{Z(h+WL{o6u<t__S=i3haL4Z8{EVaqXtSqQ(wN=NiwF3X;eex5@Hbp82I+oTM_|X zw0PPc{4hAfU(o9n%>uk9u5MELAy-yvynyCxFM)j>X5H@8ek7Z5u^yGe5`)Wxu^Dqc zQKnuJ*LwWa)R7qqDxNo-G!tFwOMSh+MAx!#EaXh)+ruiTMJK@v$JkRjZ35GC!(iVG zGe?;*yG9FCY{fNC^vXuDB&&0No;`5NS8km&%1EnO`KpX(*&&0k#`D`KN5RbUE&kOF zXa_Xq{pC^VeBZo7-$!?EWrw+2)W`0AB?H)biGP717p&*^)`*aQ)s)MCFUw;>1+8IY zav%kab^%0Rk;E-Qo95F4#Xzd2A!Tk-^rc75eKcn^QV*xq<<^g$piKJhzF{vGn91fO zHb&~Dwq1XHZZc<6WJ+A=SN=G-k*%>1D@YKUCVVzPx-op_t7AHmT(%1*abO#NBF>a{ z*U0Kr49$n_L?btqN}GFsDReuZD~itN!g<@9SeS0Y<=Xh8xIq>eO_LBKvWHvilM?>+ z)ra~L)TA~ZdOv(e=fpe5#&0QSN-ZPe*@9_E2P||6AEOPue$Am!*5~Au{(cUXcjzz^ z$<ltKckmGRS{H2=S3A==^CeVToSvz9aX}I9s<d;_bf`6U=4|JpyKrJac!|$jjxP?C z(VjeGM)0?lWE+aIw>DSZ47LwEHR6QhHaXi}!3_%tJduX`0$)h=skYYd#sRSegpt>) z;O7<UxTy&^kHz@PZKaE!t2}j=z-6T@#L}=d3nQ-gPCc?W#LnE6m+1V^We?p5Bmnhr zLvJJ}^5JXW9r3a4svWwF#K`8xG`%Qikh90pU72!Ox9#I-zOoTWaIn7^K{i13%S_b! z%B1lg%zF$eYO;PFn6;Cf^yN|5N^=B^&q#nVNpx4>MOk&K6(J$;X}j5OBA`kgD-`>! zSW^}#PgCut{_?#=xo`K|X13)ir#y6AfgH7549*+V$$!pG#-K%ia{z6kW~mrF{WMiQ zdg}r%v{S6S!0TI7si?jaj5eJ(MTtFTrAM+^IY}t2SmV^>xj)ygj@PGjwH}+=p1jsy z++k&Bn0&39pupi`7xO6TB7TwuDxsaNKbOSHh(P)ph?_PW;R4arq%t{OURn}5N?T(V zt;uTTr|als&p@*V5ove0<r0pIgFrN{>}0m@V&DBD31_@6DA1KWS@o5}>36Nnx5QJe zz4sanpEW`6Wqw|z#<AA<4$$IE<&PX(=$v;<dFRHVfXkEXnUJ~{hIa&*Wtl=}l^#j+ zJ%_8LcvjJ;%#Oj6CP>d_7jE0H3vg}TGZQKA_Np2ZbQGz=)Lpf}fLXCIljP9vs|-y$ zy+3G}=R{8*f({B=ff(LCW>E0O)dq*6Hb878_WQ(be^vYE$7^C~@GSo&O8SNQP~S2u zTq!4FFnR_<vdZ1e9Ov!UO}d`3@4$~0%u{<)Sj`>I>dE!d^%K5ljYi4U6UTggh@syZ zL!E2x#(&1$j~aL(uW7fW1_`8cl^dJ=7)D}{h0?Ymgn~+$DxQH7Fbq)QsmYuyDCRA6 zr-p~_h?>6if1b<aNRk{0f~+J1wSxQLX_o)*s2W1%)t#t_0N`$J2UFdgQz@|=6AI@W zp+q3foJ*`+=n-p=1CV@sSbd2ro&gLe@<O<z6f*eA@u~56v@a5NeJo!AxH|C2SfhW{ z3a%Cgm%NfpRg<u$YEo5~@?6kJKtiI9bKpDXlb~1C+S!{*KN$nz@`buqmJ6C{kAg$q zsh#?GPL_Zo^*CIlIfh+x=uXqC)~B(h=5!wX%%{UeT`r%vXF8Gc@i<T|AF<KO{ne6z zvl#eeI(aGNIbuzNEECgEb2e$RXJsS;onnNE(V(wL(Uxqjg670iV@~Accqc59-_zoB z$=;l0F52>W%#@T><I?Q?JkKft@1JIBWPx)JKBwV2<2=Jv6J2*dPmMHX1uzg*AIh|C zGOpHc3-GRyF5YPqESfZ*_{ga3@V=%}31wt8k*CL1a;UicZJ=3MstEu(Q5JQgkTuzD zB__F`2}mr|(cZXKI(l`uoNn}Ic`@lR#WU8_@lPEz&ck|=|03U7>+_7Y8m#&5VnOp= zqCjhYcp+QjczzoAtubm=V?C2UOMNCE^7I`oucX@e&*2^>g=3=ROJO2eI@hW8RgP8P znkKVJ>D<FeauXhyCqNfkbrel4WhEW$`#gNT)PfC7KEasDr!XsOd)i?-f~kB7JnHpS zwhmQH&6HVH={f!e<4IV6d)1TVhKZU9YWNc9U-MBl1~r^}68EkXQGGP7b9QQ-xHq&M zywtqddZDqpGt5!4lS7|~SbfyPVTx2SnX{es(rGjF-j9kaYItMp47uXyPm6K*-e5$U z)ke$ko4lj}Rz46UG|HWZu`#!1hYdKG26nQRu$2rnXuN~)CsB9HFw%M+xzh0Xjc(-O z(pQM^28TXQBHVS8ByiBrcG)OSH0pf#l9QPvJ^B_0oMyDVL32af=vt$-Jy|4HF67tm zd`Jp;`$pGKsXO!pzxBgg(IbaahUN=M!br4*K8N=pjeso2t>s%%07gK$zt%_rb>;Qf zDa9=50>;oG=y0T;IEes#Xi7a3e_lU%r>D^{ty3n+R45y=r&FEIF{T`!!Ry9Fe%-GP z-H<}yU?;91XKZ>(l@3JQt|sNDzDh04wnC&q0{<}Hq>vv3c2L{4^wS>he~~gG14O}& zbPw*rDe~B*s}TD7NeK<5K(aDPO)tj{$tA}fYN!MeB<cRZUB(#`GN&bPy#{E}AGXF7 z)MezO@I3B;*%@O*X?z?Q4rcF)<@qB~QYcNiPMUvhaU#LWeBcrU*wSUuWZm5{uWh{< zjpL0Yh5CEPBl5-`5wqIt1#beVY9%Sw(M57G^9#kQJ^p2g2L8ZR21MtOHk}pqv#Pql zs)?e0FRA&d=_lpN`1h@Gses|wLC(5qzee;q9fkvNRp$ylgrPdPuFHgpg{i4`1&R-p zx@t2ANkb!WB)?qLz_`s5Jk3KZ6@urwev(2_!S$A#szHy<I>ny?zlOhL?&k0b0Zu|K z8l~b+KYPu%*u)azVs85M@6aCyhsHKoXeuWK(e?o+9%?T}*?T^YU<~M+lh7#j<gn!* z{afN`f9m~rVh)7g4CN-mG%biq#sR?(6?<XpPxpm6Zm|%WA&<<_mV+8A2O+WDZs9K8 zn8Ke8wu%~~&+#~cv*V7TJ@&X7^SrTM!gSa!rT&K%I(BbXX1Q6}vB<s!d1R%eIE@DF zsS8%85BsjqFCJ}Ov%O&{kJ>FGD@EQ#fM@ZA5}SZ~bP}E7Feh#v4iR1@JotYTWUf;C z%Oc`WbM7n-k<Mg8&O*H8W`VHNgYIPBOpa)Y%Hec70=K*mg))RHkt}0oIB<w`HA34- zcF4BlrzpkyCcn{GN7?LzM5{y$v?E3R6o1Cv%;i`k`XKK<;5DzvMb3P9<bI1<N!KSV zQ+F&G71Ovf9dXkP(2_+ooIs7i-m{04xGugDN>k1yEqpQBXO@xCF!zG}#BNYiruj;j z%|_9`6`as|0Y;Z7m0mEo5^>&)Bi&xZy(PVXy<5;lqWXEF5MC6S-JWFWY%F64K*mqQ z>!*=Q!qW84j5Ick>QuGHw4#;-xVpxZ@$4o?)r!gEE`7{g0nZb=+I4%+pmB%j(RBQr zubn+RypCJc4W}O+3@T(~1o~a0kZ^$M*1-i#{j}({FgNuW6^5B7>2pSfU-ularO=_% z*WZjLw=#VUy7k9gs&@)Kjk)m(2Q4+iROf;b+b{=u!CCYcd?!u<%r!-}I0je=ZKny! zNdc^8t1{Q~I5mu|gL##ybos{OY}1{HH+X1*w3>g)Mp^MVTT#EyaG7s4Q>)Ks$xa+t zed_Pz-5oOpuxtEbw-<;#9%`pYUCjig<=H~aV9P!AdNbtpr-GCza9eBxrV>)2KNB>r z=~+ljD>$6sH71RdcV3=D8{|i})4@BS;pT}Wv1Ft9wO0=;EOoeJ#3ftHIAE<Lzoq_o z<eACGYxi%;YEBR{ezrzIuFyl(kqvo?Rti~c6?LaYI{0#ZiCXFi^!RhP7ZqA4ekB9y z@_Q`SQW6qcx@MN7z&s?WsW5dq0VWQIHL+zN#ml13muhZeO!-3CtpCLraGAuRy*HAe zDJ`d+swW?j<o$@wb0x-XotDSdO$;Lz;B>O2B>uA)16>9S>RQf5@aQ%Xrvv|RmaEtE zC91(aHoid9lz=#EPyGA(Y>WibCd6yPt&jV+P9uR9$c#XHQ&9!cv|8xx?vG=VXD{dk zeZbbN3S!F6JEK2qErUQfn<^=heeeWQv_V-hsdgPgjm<DV8L+ynigzF~ydL8a@Dv@k z?im6WZt@#1T_NsElo;Ur4sBn{!%@eAgFQCgnDdy&`955&+On>-;r0g*DRX~vkq9|v z$t)P$Lis3dTog;w0CoCJn*1{pT<&&M)sqEXn$SK#;&R)+@ipSme@7H^0miu_Zkkj2 z1mSeWUY=#6WyomhkLJJ3NN7p;I9riZ_bK;m*6wJB9eJ4vV)&iIt$l>@7B(cPezc4I zsX5%$!HF=bY5={<xT%%c1p}?VaX(%h9BD*^K|Gc6B~CRVlB=kJ;6KSs=|%YfkUN3X z-o4Sa`6k$Ly!G!+bAlhClte&O`*|J~C~CJy^qF@&%=LSGmsr>A^e~m_@S%X7-)NCo zxVJv}npC^{#NDrDGf@<SQ%rnC{X@|1j5#k=@^X!OLnA!JAB&Zl`caK~fwQN~F;V*U zJX5pXSD9*=0#<IE<s2t$$j#_aO`ha3bv~zFLm$)0XIB<J5}Nj%7NIdxj@xTBzeBE) zc*GhAiVKPn_bGZ`wOVAYSSnUl_}TX;QZt}VP`ZYPqMrJDR)(U8gn{3i1-jf~wRnm; z9W8Ci3|3_<{aBQ+y5NXJgc-0NpM#exNqk5(HPsI43o}UQG@5O6iC1c_ATNn{NGAXF z<O?OHd_2YEguRz^Zu-zLmbmO*KUuFTQ&HHL$;sPQN_Lj-4bSVBz>Oa7PgX8LepRp7 z^sSw#5zpF+&0tM3{no?{Yc!i~xu*D)^>)y&<P_77slV$xs^OIt@$-%fsg?d+sB46^ zQayK;Mfa<WCd0zCuP{zm`^qP8ro=;^u@pz0FUb)^C4RgX`JUeKW=*%4#Aq45j+Psv zZ5@phDDhqoW++PW<dgplk12qroI8)`o)2cjabbARJP(~Gr(><=>EJaZKh2ok(K9V& z^pyAe4Ffk83o}kG)4(59;K>KJcq!PNqLMg7b-ev3!t5C}?zv0}TDF{uX`BfO`hof; zwv9Kky5IKAbt0{^e}#*)U)y~Qv0Hl#0q=!Z&SQE48sCQV^q=mo^Foqkq8)zYNhm(_ zb!EDcl_m|#1CmUU29@<F?=kkjG?%%REH@AYby_hF3?J^p9;&4ODkBo}rG0~KbOUu{ zMV=G<Q6@=|y$WW4Av}X_-Y7p|ExMbb15}VvffWW&f2Vvk_yWW9bBRPTf`fT?%Z!TO zC+qsrDF2N<u+qXbx3tF=U^6!8jSI_QP_?VP34><eOqiXabB^h7k13<F9ZLlJjit9o z9&g44P&jC~qfLvN(dNi;{LS2uCI|%_eWC5;gluTSkp}ERXDIb^hK6vxG28daXvWAo zJ{-j|%ZVFxRF7!%u{vz6PFkFK>_O4%*l*-lj{+3T9tLRPtCMjkNXSk(n@Z^u5G%gs zBYcdo6k>j>c2bD*2^AoIXgjR?V;G_)<jj%Z)B$}g2#p#tBBdvYmb82P@$f{LdQ5}D zY(Gp*7xSfKbHcERl72p`oy0(DTj3Kr!B1{NT&(^sMQ_IgK?6$ygT#f3*y_H*C>?e; zmHAXxf-H%gkU8%UGVK{L^afqIzNS=EU3mfoaB8uM3QqZmvzDp68x95DdEE*Udp8!m zNxrmNDl6DrIL-2J?4~1<_zK_8J4}bTfsoIKq$8j=YD<E@BgD>Z08^#>t*Am8^g%Y! zBU4q?2{1!Gs%wdj4fe%NoSdKVB92-Rv!BqkNBIh3N~-B6d5OMd{%i~I<{oORsta11 zjvgp{)za1c45kQkgOup0#GEtYsYaBSB{Z@441b@+l6U5C{=}Cd(QgYqDTv3a=?G@m zA;iqh=+6XJ0?zuqRt&eE&<czvBt9x&oiUAkpy@R4voV#||AHV5#O6|xm&+=Fv$zQr z@aIp4HLyKor^!vZXmTq_lpJk|iYV;SKGJ5hDl1q%iup;GIn)a08(d#A!$J=N3BBF+ zcF4_e>iCm%<_;CjN17hRbLk8HYAZp8FLCa}`ww5|AiY}3&tRNRxk%1j{w{B(>Jc(# z>CGqDPBaeGZ3uhNq%u%D(r)iBYe$9epxVs1(do92+H)UZBRRZamuEJ$pRsFwjaM)# z8Xey?kZFmXF7K8?EG=&?Ig~cU;vmgD-|suL>W0ijFp~Bbf5!8AUNflf@_=A0pxU0C zNW180BYQ!^UP|y@9GRcSG`leGj6}E7V|+-$@wzRE1sPmEp9UrHW=<v=f^g{VCplLr zsbspRejF9dSn7;q&rcu00DE^J%KT{wWwYL>V^mXf)VdORDC^9+)}CfNOj4)zsM)6a zE6~MY!8>3>TYN_&8g?%IdNWnAw<(3A@dQhdJjvR*&jm;`gh29VnvEKcm$kB*XntzS zqRL+W)fufIJNn~YCB~3<aw9JGpz26YD>-G4=!znST<EtTB15a-Wu<D`h~Fb4R~BcW z@b^S`g2pLQpDeKpN)kJ|(>qv&@8ti{#6W>;#DfwQ{X!2+!HP;f)Qvss6-ZitL+U2w zVP7T`VMU3g@50l&#-LUxr9CBgwi+367R3TxIc6oE+DgToquul4^Pv&?m;-2xz7s`S z6{RV7>ZO>mnfs8c6M|54(e~C-6-_BKRV#4BHz^BmY1%2?_!MfsB&`;YT=zYZC})7C z;Ge&~+0XO#<H?wzp{>RqJCLqi{@+X)_ivPuSBm>X3ZtAo9;V`PEs;p=-{w^T`)ET$ z^GaL=;b&hXlAMnriTcwMG+pxgCDK_?aj+wbktE=PH1=<vuo~Ut8(E?60K2@?I>Uk> zmyK`!<cl+1_IfIX&RZDFmQxpZr2Ysi&|-ytQ-3G-u9><<rZXb!Q(MT$rH%W|==ch` zBcY|4+)#oxj#tE(%=<dJb`W0nw$_ui_Um46Yf|muW>b&!@Q$SMR82)VX(%6(<zcCq zMsp7%&s~^Q198?xRI6=A2%Y0(-5#eKkp=|!QnU3uwnvc%!>JPIlPMv$q_%6M9LYFb z$UYET*(HWlB>#pPd26w_`K*jUmsNc#f$K+!K(=?fu<f6<Aq2e7I*O)@C{!K3&_1Tq zQ~-Xrm?7>lY-nN!l7IfoE4o`1_B8&s6PluQBP!5S{=Npvb2>zuphYomjbo&;PR_<! z)N4Qcg+BE$q9KfH<?GPgXyn~55|=6xUlK48qyxpb{Q`%`%Jr~>=Ry*S_&sBXc$^$k zy4y){)sGW(u`l_aed!o!QRy5JSmSCp1+dk8BGxP>Is#xd(y2Jh$wYgf`ie~;=&vzb zchK^acdgVM5k4tdK1%seMu)R#rfh_s24QZTjKxM3sW4kLw3)@;7G!h^g8h!rQ8T&} zQ~8rtRy^cLChUzMJ6{7KyxJf;aUJDvgy(=e01XXt56a*42^}2t`P|MOB33Jty7wKg z^|eAcY#%M6mL`4(Fl<ugOnKy$2*SSFG$G0mDHvVDOKNkbrN8kCkCFP;_@FFIYre>E zkj}$J!T&B9cxZuV2aM<lRH5Z)f>X?k#v!RCWd!)qSu<(Wy=esBNUNNQJv=Quhgw9n z^pGQXT7wpY$e6*e!w{VQXiS|)0n1su`iNV|lE5<qmx|%nSxS4dK%Cck1j`%Tv~-^9 zG47^#B-kU@!4}cCFm8}tG)-L(lt6W5X=Y-LJ0tZhob>kOYUL%`3<b%{$-rTWBu<%p zyttrn{0Gy)RgRgcC{;;1r(7*}Dq7}Y>S1CKOatSWQ?>*~L$PB_Jm<<1lE309*3$oQ zDBe1!{_XgCrOUJ>`)}QX?go#El~Fi?qG}U1WtWikH=Q@*OU!>flXlfR3)dw+i$v?0 zD209ZGiUq|9t3Y^r(<^uacJ6ecw7|!sgyxtF@Z`LTTK1^8O6iZ7n$nLI<2IdqD{2T z9D1XT7)Sc-WQkH(x=kjASp{7Aag((e*!7&I?Bg_STTI{}`x(q{qpp>xB_;XuM!?vj z%vFz0@*OV=1ZoDPGYKv)Ti5s=7iiZdvuwSm%ueDTraA-+eJ9eZxPZtL&2LZ1htH__ z{<@qtm&w|b865#@{N}n8{1=s>1&rF(BpM_IfscH4=+I{rRi`0k;5cI8q+{7cV20wL zN*wxQi!ertYR^>Ldu3*^aGm4qA?tKBD`E~G*jKIeB|K}Mj=k_CNwepNPT4_*uVS*P z$x~Y<4hz83<@b4Bvs>2H6di#r_UX>3{n3URmca+8To(4v@6c*3c|8QAn#Mt89}3|Z z4sSFh5b{dgP^Ip|iR)#P7;&|3iVPjkMx2xEM8L@^3-1Hp!TV1t`)ohJiVgocr##O( z2ri#uL7nj+yla}(bD5Tw`dBANyI!N|Af2+8--^7i+<(l&b!0gY#*sQJgLsABSeTKd ztBh5@b98%g19F_Nz22DbNPbk>SJfJNJo~|eAk-^TdV%~~MBHK_aF*>{t}ajjB=xFC zrhR(K5<DW82nS15qc=X6ULlq&P}?*GSg`_yUuCUFc`#bc3$r+dl_?gPy?hIBsv4V8 zdw7Kv$|94Lwf#Gy^Sk*J85I&)fhLI(D{>B3kDmRQtUtY<`wx}%r$E>{s#80Ks7Hq9 zkyT^bO0vodI(dR_UX7TkaZ|`EWU<?n^J+O_4U1yJy}!#A@YP2j<ZzW>by?;1*eF(Z z4z1rSPA3gSH2_V1yGb`Ix(Jca2AO%rJZBsCPeU)~2>)Y6l69M2N()(kr1Vu)TYI0Q zZOX{L8`US~{R#K_DS4F>n}xSV{f+f1EIQ9wyN^1TcExQ|`{(Bf@~%FzUgq7Vbs=J` z?bQ3fZ%w|+bI8nZso5~gS|m}fEj!;elwS{$Gl;}r75|F1o^+q_PFi1$;idrP+{el^ zGJ@3l-MMRLt3FckSkl8UGIp0!!}xXcZj6_CH^wddh<{hnS2B{k*VvV;QFp~tl^P6Y z1rx#mOyb9FFY%9oQy%T4JQ#H;7%FJT=M|CTf0oPK%3&i4g1(|)0^B$E5sz%;@2aYY z*1iP^aPW`r>NjS~7k12k4J;&-K*Gd<jv(&1UNzW(?fx1J(EA(d65Y<+>r&qsx!++m zj2&5xa{MvYv}IWot@`$k3hXR3rSB%ZBCBQZrvcC;Bu1z(bG$xf&rvxS1{T+mxj=e5 zzr|O>REI#+YzEHgouDP{%z8sN*N9Qp(-;JWoh|h|6>715l?pBP(qpr$b=gF<jB!)# zlw0JEky*)IDB>=WNJO0XyevR-anL-v8&!=xsj4ORukz}z<0!bODphE5uhQ(`UOHVx zSmnF+nE<KgsMZWOR{GHc0{nUa91)xF09?=zV=Sk}L9mh?uQ^+(_bD9vvZlJx_6>ET zk(oGfPmBN1WmxN@r=_@qYH!YP5)A6|y_qm`41+D+$T_K@?rGZ5JSFx6Y>LeoEMjG~ z_23B8U_L3(NdWE7q#39f`IJvJ@)~+REJY6|9nFiI^0fPCz<eq(r0u2;aS6=0PD?J$ ztgzg%93Q#EBp{k(3=K5b_t_RTSfp<7V)D(la`FvnH4GFvl!3~~52f|;7rtUuB`M1u zlBzxh$!O*m<UR|-P3mh2p`AdR$aZEBt;MFck`RVVbbT!7o7{(fMyMU#_a^GS_yzo% zQJN1RM>ImnJU_-X5mEx~osU90_9drYSE3032@y-4P<$v;3|^JJYL>Js5=g}N>_^0C zg*SnTXC!*=G+&jE+{@IO@Cs2H5>|T8J>7W;y+a4A$<ly!d+c5@Ao>1=)yLaHBLPiG zv>1=UHOr>Pnh^@FFzvk$=_lcV>|yf-)#fkKB+a|e`@%?J%nU5C0aSs*C9o`~*ykuF zEZI{q%fLjQ7mRjqFBoyaWT_prOm-?rtKsTagQ*m1>gm7bGl2OtZeqn+65|o%40gz1 zlIdQNso6v@BN`aZxx7h0RdVVw&Ge6X(SfPd@-lWt%3*P<Yo9WVyJB96ot?uNOt<T( z<6X>1b?Vi)IG)6DlL&7F(*v2DL4TL#Sg9q>@foH7lY*AGw>?s6LMfFu8SDumgHrjB z_5@i}UU{QxV{<y2Z|=mCkv&dV1>Jnd6v+QtJpZ}~K}doG`|e94CvGf*M`vg>Lb)-U zE-o3m(8)UOP!H$wD-tn++>=Krf$T*o3>{4^VX|LO2|v7+o~lcok5NVg#`mJr2|pTK zNrK`AI`E{uXA2dAYuPEF8L>MPR+L>oVX@wSGOkph-Ks#-q0Mwq`pb4MmxQTSb%Sr( z{mj&juc9lp19kbo1mYn=Rqx+_8sHhwKXO6itsSiI$ns~ec?EYsvv-I6S){msTvv(Z zM9tjHEs6FJ4&P<uO%gfCrwvmge^@WREI(0PRo}UA+f1*#uAJI@Exd(#OrFr1`}E;? z#|fuz7_loP;<aktMIsz#o?Kok6>qAKCS}qkWSun=CDFZM##0+SoIw}ATmdb<j_h?# zX5{ejNZyhudg@<AO?qnn*kPvmdj94Ne4lUL0HwdenJImy2mnjE<qo&whQ%|9)Q(ad zVHt^&e%YoiTAr|v$a85O&ki#Ni<m3!XgiX94W4|=Y>c1NQz*Wdz2sF|gi9FrRb5-& z$nAF^@DD~|d30*<QKSWR%DK3Ay)~%{eTybh&6%>Cr65IE>!~4s1CIw}sdlmWKtmrE zeS~(MYeub6tidw!=03EstnLq;b<Q>y)Mtt}6A>Hh?dRwtCu@p8l&+-1PlOqGp@wHS zG+y^+NZu&Xs?6Be*=t^*we`L&LoJ#rtK<Wel&N)X%FO`UGD?o_3eT>rmj2Sh(mk%) zsN~EI2!NH0Ybnz~3>U?0$ClEG&XBY%XXlRd9JNJMCfUR*XXYzA0mhpYyXM1rC|4AJ zWW&dbMqeLCzx~<jCUdS`J%%f*8Wl#C$Gb$n)b2MgRdiJTHtN+n7#bf1H8`DxP*Zfz zzm=lZNG?u+M`uI($SXvg*$zbEe9C(tno^h#Rv)Rv_*nCV1-!`?M1A<6#J%h{l;k{2 zI_V1UKnf@5Jf+@e1u_vQa+;*OF_ZtCww8QmAF|U0o4~mlX9pF#03hD#7$1*Azl;VM zbH)#<Vv8L(YD9<C3W&#Lo+;uH4R^Nr(u1Q`-Yi(b8uXN_@*zRBB?mmM=`~_{<q<Xx zk%I#W8%)28e}B|>ZstnIo1FE(++UMQY4FIx<4p9H{+f93)qSEVZ*SC$)m0r@=WFVi zsQJB#6iQC#vMwKKt`XL&sud+$Dd2O@QGIQC%_<Qh@p!+!T)7BIGdo%>wtdqMkL5UW zH$^k9@b#luilKq;dTuymjX*%<6a_O;ND?5MaZ0$U&qsJGYm8c5=Tbjm9W8Z#>aVI@ ztz$bg&8X@!@Q|K$m(93ZZX|_i7BYE^ij7e6D_}Iw=-G*>>-~*zP(#li1P7r|1y0_S zmcg58e)s2{$r3FDRO79efz&*gx7YiY<hDm4M%@xWm;MYJ9J7cBv~q?&Zx})M-UePy z?F6_28cDJTx&Q(2%}~}Tk@2pR?i!{zk@GI0jU>vXq0Zl;rB4wKkLB;A-d|>4HR2A8 z{6si*YTn%v--DLglD-}69{qA&M4uIV6Q8>8aUKeMg^By%>G~emlGQkY%lU(}RV6S% z#bWY-+pJ^GR9EKro}sm?QMEnC6Z}dGEv`(YXgJMF?v{qcO(FSU=*)JG(SP`8>f{q4 z6#o0M?7iVqsv2k>zVZNO`K7ZT5o<Ri#BHlv$c1~T#>_aN8W_hw6{<CHe;UmkLW9kg z#BcO|;(SSxf`mNE;n9Q;Jp&3?vnfx+Rk4wVPRA*HOSKDQJDG`_x}ZGxA=yDgy)Rwx z3ds(3`9+W+^(&rNlBC{;Q_VoAqgQtpl6%lQn`YDzg{Ov+0M(@$c2*->?gzEiVhlqp zR1%-|xeZLJT~gOfcALjOv=`OP65M1EJHc3_ye6rwti{}!60@9XH<3^hM6l_7t?R`` zkRX}R5Sn1QD2u6a=a+Z=<wzP_gU5SjaFAJkDEU+gp9EH_@dE7)C9G)-^JhT9D_0_Z zWqN_x9?bHRm&`B?d7WXpwMA2!)~PmA1$|Q7<JKx)pb!knjC7%+#JsubKA-*e_#WTU z7~b+*%7K82$GKnvvI>wQ-sUCRx3N(2=ikczYW-&`e8-baV_<GEG#YGNbC-6z7&?1b zlIhUqSsK*W1XD(skh&}xr!$xMFVtA__v`8}1a-3^qb0oDG@hIM$aj=#um@Jj$k?gm zCW37DVfYBr<%xo_eSc=&uBG!`vdqgjs)G`Asz9-nJ6|kr$-Lr{Uo+liI$0wsAlZZ} zxW_PIH<XK+t{w{5Z6d3{8sE>s0ZWN&wipJ$924Mz+ZNNe2Kl8iGHJ&}cV&i)!nqGc z8EO_sjR$fQ!&viR(;q5uETFTkq^LHBdd=$vAv&bVJ{pd=a^LB$s2&M7RAJ;r<@Fni zOnmTCndX(-qB6v_m^~L}g2iP&ZufVtFlHGpomU=+q`b8`hR!b&D02+Y5hd!I{^<fn zPYI-<t*^=inn4l$0XM9Mb~P@Xzu+;WT|)p@@U329(jc3QR7%|H)W*y%ZxN%M*!l{R zTqfY;o}o>da?r||-{DY0+_B+XBjZRTq){k><p9ljkt->Y=UkcSl0-yVd=W61=Z@e^ zX<CriTzdhtNE80Qqc;41o(d!Ie>bU<RTWEpi+h-3IH?$a5SlN;fmR4=48-);78E1; zd7pi6@mqYy@Kp9ro4GPVp+(f1{(n4lA|LO=yQ8{~^*A)G%N4}Gdc^@Sg+K%)`J<X4 z-_J{)0%205m0l2qVW!p}FmVOhi8ohKw5jV05pM~hER5#K6;-?&Ptkra%=)wRDjyF` zX5o1Dl`H?VT;|r2+&~c2X~j4&`*0ujP+j`3G9obo-*Wml8bDQ69{2$r(~=!rMPIJe zvfze&-znFKq<*E%c?>yKi<xyi@|u6&Yr{ElDRh=+eE;M+T9y6D5$^dN!BAF>xux89 z&~e^DySBf*+m!45v{6~dxUZYKFh?E=6^SQE?RHJ=(0u*5Ii@7|m3Wx+V9DXDJvMY1 zof@OPPPKsYS_C&^LR9@UeAi%NM^tRN)yUV`hM*#v=&XFR*v3Q@e3^2=*HYeHHVu{M zfiU0Zj!oLa<iWf1p?PN9l(6<@fIHRw!@S{uV<R#Wx>GT-zkx)Boif#a+gXE5I~`s( zZ&8DD-VDCE@Nn`OQqFw6b@I0mbDEXn3r&s8yMY&4AtuyJH=Ka6krSYewddmvZPSh6 z_CQT+@DVEHmR~*6JnnRXO;M<3jV+VE#tB^kVC3OCwK*>w*L!%;u;GYGgOpC5v`+kn z7nmdd_;iU)6Itb7h($vs-xfwxLY~Su{bXczNZXNvwCQYeo*unDS~o$-``eZ?;*R^l z^A&-jH1r-l*%Co}@*$cOm{ryjn6AJqN5BWu9Qu?CynB+Ntvv`=d)8DXt5~IDCWx$R z3sqtTQHTsfETU@Mxc;Wndp%KI(MLHdX7)63`gE5$|D2@I`jnafBHm%lA(h88EAZ39 zlIhZR9Y9FEt9i6kmoOCqT|yhSM<+3?n@*x2)*20`pbHS#LN5{s>P31ORKGIvWIE1! zK7+?^?m3?4InM+sCfO!kKhGCc;IP~IIT*;rHBjf2BQ#fS#K6?~Xj%USa)^03Vf<M; zK49eZ>RroRp7CQUW`8~p;C^(1sjW`XA%U4vFYM#}wRDlFOpH8g34%)p>l*VEFd!&# zlJRUQs^=O=HQ}P&r*k1m=}L3kj}KbBbPO<kjAtee7?+4J>AWU7EZ<Pjp(EBmdR%>W zjq>Ql4QTP=g&kC~e&g0@=laNCb+2dWTT-W{Kg!&uPMcUG0+iD>`5$^?a_H)!$)PuU zWV(18$>j7%omWGWKip9k3jdo?YB<sy6PII-k^T)jGp7;4CLIYNS2BFokpM-{okar^ zQ$d3InWq*Xa+10-cnx^(lH+OR6U^{PjD)mw)NveO_(>DB9EqxH&JvtLF;3LoLb7JW zWE3-^5Hd%`i<=`~8MJ}sB(f&R=PZWN>){Ne9TqpQYR(c^OPrhx(ob?P0Axx`y+>ID zH&njz0OqpQ)!@{v-7qHlU0C@rCPR7D<YT*_AJ*9V+(?p+H63Zbi<%U?KQcs7Z8aax zClty+`3Cha+o|Z+Ve^*0Of_-kFQ!yU8EkfGKsYl$Gv2Dhm)C*h)y`#;P2_E=eJG*B zp5Z$>d1;{spB#UWgoeI2P;8A9jZ<PL6(5-$ITb`1QU{U_BD(;pICFrrK2CL#tmEFZ zgBS~+C8%|kN@;;m8z}13CILrZ>FW?id@o#cAfL`u^fwhWt9_a&F{pb9;NO25Ob}nM zJ>jyAOAlieRMa?1v&}&GD=o+Hw)9z-66e=Igs6qWSj`-95N4)|k)|Dj-8rP2V;ZN{ zyC>l_6NNk0_&46>Py>Bw2E5I4TSy!DH0;$}hNgg=u`Nw2O7Z=OHmcm9#sgpg9hjq< z`~&>Yk6J4vcquU?2Bm$da#VGfXVGo-lGtHGM}p)5D(1&@_0dk=YBuDrcoYgS{fT`j zu_M#A6J3BTH__Yb40_a9WQ!tT7NxITZ@ff8YxIGPkCwO~Aw>s7dATnR4z&Mr373ee z<m_ytp2Q6UA_5@n#xIKZ6H=#x?_)A_KwJrT#xeR&3?hDYD8ON8W21*Qvdxco(+YDX zbKrbK0x#1fAv|uHrxVxA8L#*nWmGk~jpi(Heec1ey|vmX9IaB2Xi=q5g;pk?@H!W| znU5-P_#DG43v)BJXfiv0W;i*RbXkM-FZUCF`YvY<z~bY<3HJI5`JUFw!L?-pNGg5; z8pYjcB-n;8P`VTEbrMAzl_SErVwxZLMwe&|4~`#LV@|Ky4oYw)O@52V{BrXFeK8Ax z!WWns6&#YPB5-po^~V|7Y3}#hF1{g2kT3q`$!hNj+?OYmceJcxK7GP>Zwe~KvJd-S zh{gHaCRh$OIFT~8LL?qt?eOS*#f1Z6f2%ezo-vC~Wxo!u<xxReqRb4*7&x8FttD3N z*t=19#K0Bt$RjP#kbZ^c$2rxi2oe5PjBD{!%)?H1VKv|yC9Ap_(QDWUGI}^?BwW@w z8F=>9%pu0CNeMEDLwtg1=+l%7Dx30f(=;JVyg{8KQ$o5XV^P&&u$j^{egyJAnTJk4 zVDba9oflNsV{??|Shs9?%x)itnl$Jza#M9_j_0@8i(8r0Xg@l;Gpl~AeYlN&vzj(y zu^8Rs-sOdt|FYf)G-61pMk|jw_Vl$HqX5<Y#z*RaX&eAnshgaQU2>tOXXvulBWH<e z->{n5wZ>vr8Ly2;00Vq%H7p!QNBB6vQeZ45UROGqPPDXQwT!eg{HgoZg@twNdC6x! z&sQl#hpcc8nk-(wBO*NB&9p!;@JGSG);RNm!y>O9>Sug}e~krcq{vX7Q`rO1Rb^84 zY!Q~3u+ziW8D?ju#e%f1F|C5t2@-1~N5_IZf}s*yG=s_0d*-s~<7M2Zh-&1sqY(6o zhQ>rX<Uk&$QA<oa?j%ZwHuRdf@MlD%w~h?8JZz+hUk#=<a^KJ>Luro7#+_@&Xz4q- zNLNU8$5dDMplfiYZvZ5es*jSUN&@TXJ9JqsG_gWl9Y<0O0OkOWpb=!kzM3RnNQRLE zz?M-~>thRh?34VVIa*#)9YZjA0C)BnF5Zl<@6PM-QGK4b9|1d`lhcTs<46iVcz0r! z(RI_A1E<9pw6)p3+E?1GKivJfOe}^=k{?`?A!d!FC&NSL^ibJC{$md%=C}{t>e21# zdE+bSbFb~WVo<2z9Y&%M$;#OvgQG6gMT0=kIL3yUYiAokQ^0Ab>t?)m$jKV24V7BU zDdg19!uRnRq6^-8JQ>8lPdEzuHD4CkQH2Q_Ya)?^%5TuPjDZG>kl?fmI=A+W!UXrR z#3A(gBFGwfz&C?rJU$4XFYXi$iC+WS_XVOGLm+GT8y-1{Hp@igXS6}wc~Yny6FTJ@ zNB}4VevVFmoGY+O9vK!^;+icp@?Bm5OTeeUSlHspOnp58R1P+zR$Z<ip^~MNB}I)j zIm+#fyXk-OmGcm=uqgLM)S!kQ!Pv>Us9W;gnmUb)?~ZF((|;LH9VQM^$D|y_Yr6oQ z@hVO!i44g=gqzci1##T?k4Ed_d->(T<$275T7LIX3%VZ}7Li?adFr&YIunF8tav<o zpHF#r5$8)9@dT1{53lk7%GnleBQDzJZ|9W6t<P@W#=}VM7)^K?)aAjAH&o+#M(gXu zs&ace_r9aTL85zUNj&d;O<@sjKQmc{Ycthb8)#_6Pp}ha+otarFCA@;ca^;5qY<aH z?{iQ*i1r<dK5e?GZ^X)<^3KU4rjB<{onepf_{AEy4RxA6pxx;zX^1g#BT)}gkrki| zAAtFdIvm4_zJ~Y{!@{D`-<7b7q2gmua||U1zVtb!9|>zLH7biB-QL{Xk>~y}+@IWl z`pPv&4fPwk;+X0Ken&p5!2v>tN<|WeFaTvo?N?$Xi*dctr82_{;KSqPFY|H5&;%D6 z-CNzT`rxLhETa2)MVHLYuJD_Au)-(T)>DLuN9keH%RKbF(t6xHa7r@y$}no?T{V85 zSc@XXuwBPkvXNvQ^t+8|Ly<B_e(ovJNC~FID`ESB$FCIQHu@Niy#(VK8A|lePe?HL zMWbS;JulxcE9Ph=2k?Yinv;sr^{R#xeAi#30$n2t$p?%urS-&7p8QX9nPWGSWI<5x zQ{V!q7yELaQM>Q2j+qBaBAG-YBmd%Vej+#+S$Q(Nu(UqkeVPu=#Wfrf)Pc>$FB?=9 zUM!mrz_<dKo+QM=yj(lHS`GPg#T3%LGGha5$Yz$NS5Da6`xu0y+N@p!2M`R;Q(fVD z7TFx=ij;iDHs_pt{iB*ixhEP_xx^w}ui!G`;g6cQKtE&9RUdW>zlz{W$mA@|iCK1? zj@59Z8Dp*XGxloa-6_H@5gx7>B>fb#eMDq|+Zg*@G#Z)DeOwdda_v%$f4#P&fVrl3 z{`)>>(U06R-W48{bGbXk?-yWYl%@A#Vw`k_2)JVL-V=Er|C#q0g0Am;6;0o{gvY7O zP(G|okB_8$x4!DBW&G{9`sF&~+^-KuqtIk_tRdaXG%l*PB;~?8)b;CVwV?K0fT!;} zgPwUogK~7EPtUxlndePVk?#x4Mjf296^-}4A>n2AT11#5?!>lCY)QH>^6BAv?B6|V zl6m$4o_kw^^Q-VviOvbwqpjV#M^-xfCzGzXZNL44*R+a>{Go1c?Uv8n+CG)LEB?N{ z9?Y$azp{%gersw&eH2BALUBBx@^RiJEfjU|+p^{q_ArHtkTDch((y)=OMmE3sKhg+ zZ0j7-5<_sayZ&7r8O`Og;8FOAsmx)T;&k&Vrt+ky4!b<fwGl4r(yAI%W(ZMb-n~9$ zE_#jeCe}iA1zsdSV-SV!ff+p@N<7ZVJROL->B~bbe15c413$xuohH4;-f)3O>NU(n zi#JLDSx!Cc`I=!2fjR~pfkjti=Z@)Mo@ab50ZVh-=Vy+c%yB4cZ9n^jykoKF^k=a= zJ?WJypSW(#%$}D=@#&cn(92!&uMB@e(AxcxkG1=z{Zr)}7R^1JWyc8v2sFMZrgFt& zCDOv6Qn+`{6!H)_rITC3FE<3nO^UK2Ngjx5k<6%+Sa%E<Fiw|f{g!QG9fqCWOLDpw zh2L>S`HDAV;{>j)s2Y$kfKb|g`V37nKzs(+i9wjLM0C+^1>0ok2;qXFYMxCmf`byx zcz8$;f{+QJB4ka7T-&VlD6=t;O7BXjqz_u^;!J&=N2)!+P?R-cgk`lo-VR%q=c%P( zRUjS~x3TtnuQ2reg#sp1zU^YI%&eaxEh|VFsHX8Tpe1^=;QNk23-9s~7xdW~!1p^i z^-KhvqR!t4(745nV6@~yPc$<}2p|Lt+j<f{Y<(_Ks83L#C5x0q%{hM-fL?L5nT&HH z7>P84Ukp7*@MuiEv^&)RXS)eF+nF;wEtj$B-!yNw_g+a?oz6%{**pUn@}1DOQ`2NL zjOU|<lmyeeqERYF0Mn#rjg5yl=`3kbzcepOS>#2h@g!4*&MQm*%3$s^C?<CnPBVmi z?-5HGT*K>L38qq`vmnCa2`}GrH~<uZGj$>hhjkj#uYIlziGaa9!n0;l1z{>PD1&^; z1*w3WXnb+Ut3vH9^^wGv4UO2k*%94pO{s=!y#1SM8zlet&kGf~R5QX|$8kUKJJe=> zy0vhSwc#LEXRd1Mruy=&f8&TLjtJm}W}295gDiJ2MM(hE6W{!}pHsHmiZss{f(U;i z@5L>3Id_<2L|c28Y4w+rx$G2Ult3?)bqxr+KMlW8K38+S{J_-nh^q7|nLW(I9a=`j zfx*80)3k>hIboLeCqXt_&!at*3l_*np`ES9doM#4Sh<j<w&Xs?5|~n^Tl#F@cifg4 zd*d%L(B%fbG?mh~x3W$2>`r!gv$dz@ydzI@&!_aoX>A>VjyS^|dIA5ok^EpQIZ9a> z7H6io@~!B{6mC55x-^1nfvl|A2RI7t(S{TCswj11lni4cJ2QScxGzX4stsp_Oj{4W zkPX#Ih2TK*L@C&rL7ANC%?bC+it_34d>D>7bVhb8+<kf`(b+sE%a!>T2v4AeNiCsI zWZ8_;k!!=mpMqd9dNUI0<sGPEbC2J`ILdUHm;KbN))x)%5I01K=Al@gdMIErOxw5B z{3<@sGR8m-|H*;npJ}c6zf?+9hM9u@juqHsAE_b5ufk(@O_&az&DZ)@2`AO1?qyhd za%hcca~CIJ>#HZ`2cI_Zu$(g_G!qr<n{E2~Z{C81vkKo8SFKldv7JZ+ee?>zBR4dQ z$4n*IHjRuOXW$UY9V~Gvz#^_N>!!zX;^pWr;_l+DG*?Yt;R{#QgSS?aalS&8qsS0X zMMvst4t>dpat8}$fm)xBI5|G8Y(w3TnjC&M7P_ak-)p}4XgDAv(d3JOkNjN{X#9Yy z3cS;ink#(Q8u`v<`Z+Vu?jvK^`^Er0RI{$08lcaqOVSzl?YvaiUra~Li?3a}ZL=_I zx_C^3b#gi>+llsD*qeQvi7<S=B@?!y=d0#+a;7s~wb?=68i!7i*xP33tST-LrLA&2 zlZezAJlLEYM{|m^t|Eb@X3}OxO2|jHOn{CY#-;-D5-dd(Z4o?bBs9U~)W~r*@>JY> z&l-=VL^I<)wti1r$J^c-Y48Or4>{I_hX8`vBwvKG9y3{88EeZvX7;e=<EO+CU2bd{ ze$7@?v6dG)hRTyaACY}sgvcF%j`92NAIEDFf?8DoZpN>uvD`C$PBNVyI<dkG8DW}k zD^xYeK4xz#N|-lUz*g*@8))V*?OsW)WsB?;&A4$@n!}*l4&T*NV&;6|dEoUmuJQT( zM8?9TH!Is9O|(d>8<<F>SnvqX$jelv1Z}Btiu1;X<?wC0{Gj%<beyAi%j=Y<yeh6I z5oycQc~4FhT{NDCcg|4FTQlmy{_L9e9Fdq7J9U&!p~Iy|;wP(+WP#jQBi|olCAo+% znX0u!gB)Y6sPGKjMXryThNh(3lcm|JlEcA%ml(y$#8vF8)C^B=Z`3A3qWk1!DIFpv zZ9HF52pq+lk5wm>hwDa4C=*Iz(9#lFD_TE~(1&c(hw%)tKcTc`sx$|9e&{$yw67!4 z-a;7%G*ikseF9+l%+_{ot-90|GwyVc<HX0Q3@={-wc0o+<GlWHW1H3}A>bLx1nYD| zWAuCX*u;t(I(#f^^T0cSASfYn42246nI)JI_)L;w@PQO|D3P?}XHtWL&KEr-lzXPI zhLM?Icqe91_Ch21O1Vh`{!&S&Op-bw{_nJ;4b~cuZxargP6kWN$PSKRCnjHbpD(8w zl%{)JolBVJ6TROAt1p960&B=nlR|O4CC<%X?quo?YmYa@0w0s63td{t75BLXOHa49 z6n8c`l{J~-8P$yk<1>iH50E=GFtL^sq;8LGk2{?PnM!gKM=*4{d`k|{R8PpAo-%-P z`OR~r`}<IxF4SC_iM7)GvP6n8lJk-OkBu}&%y<)hWe@9%8rpz4BAqgem}wF;j7rMN zh(8U+ybN#JD||9^xTJ(5Q1NIcVE6fAkicWe8ClG)fFa9b^&qd|iFDx3?9B34?c_C; z46=qXkV||WBRdt|me>XuaO|l*CUpv_CqcCS+T7YhYolEsrpj(HZ^GZ%Ar^j#4H+Gk zYjft{Fmouc38pnS&#|+2TtMLi*3+Ee_%y^}^FQNjI?Yg_k*I`|7?|JG@Zp}x$HKJj z<Zu{Npz0-Uo8x#i<sjR*eRyZYaMAs_yonlK_I#-VGaHJ<bJMc-fv{_5eWxWO&0G?| zJ`1OL54uJTP?Y6us)Wn8n@hJ?SPhy>J85F6WTp*(mX+qFxdPT`L5W-F$}NNPbpa2r zyBH5o`88pcE&($+hBqVFBh$5i-6l8X6iYwO1<@W6Sz@+$<r<z$_(J(h(9)%6Q`dFm zeG&!Mk$0Kd&%XVsDs14g=4%*Dmzc!zdfjyu4zn4Dn-5^lNe7$C)Ko^RLCEle*asKb zQ14+&d{q>$B$slN-4_ygQw4t0{ONd%|I=J1*OJ^o47|&VcA)2RUwj(*e^mt7I!T|? ztYR@UfdF@DeAt#=Bpp<5MMpRFjBeV-L({s!B^EFk8fFU$d5Ha8N2rF~2HU}PZ>Z)Z zK%li|N-&3K**-(VZrRavRaR*33kMuF4z**LA`CPVWpxj;UY6Z+<TzP!pbIGH=Zq3$ zhG@J;q7`>?^?+fJ3;P|l$k7{4J(F<e4vDaEqvmJ5toR*#*op!jXXE;uYj*n_=AgJ| za*vZ^9-Y3#D^6O3J?=&*zcfK0hJ!Hcx&?;G^C5Mb$4Ei7_jS*;?zX9VAn;IFbl8V* zA7b8hAng9xODe@C^mnS&vuolY$k6$h3x+8+afj09SIIEXvPo|3S(*WIXp)k--~};O zmw|wMTrgee!FO9OmqJGMbDectY#MrGp=*!F5pUX)P1jmeTA(A`d5tsIZ{ot$Lx`%U zExvp^6%D17YMD(UOn#DJwc&>gSfSaqwD#tczannoEF3|DS@p+qCHYfRZavfo2>vpT zL-l~G*k#_(qC+J`Y`mHVSojfXS(ZLOc^u|85m0|v$-Mr`M!3F>m!M3tyBzJpjX${U z|2WFLqCx_b@|Ir#7v-1`0#8X|{7=-fYT!Gs6EKdkfw39OeagA4s)OhKTfxjJYadaF z?~?8$@tUaV%^h7=A{_=dx#XdY+c>a&%NhdCo&J4mBG5`mU2n;c`K|Hbx7LCYJpaUF zs|-7`Q}-44h1^W|O7FZ^@;P?K(&#O5m8g1qUyLTbds%Abk|2Kf;$-#QXOE0=!#7rt z8}2PDw(PGCbp~!N*11{Zh!(S_mNllt0yDDqt2l(3Ewn|hw`=PDD6jP0rlh0=D&NPi zzk1!-MiXAg)+W>*(x@x-rBO%83jd@7+0G=MHw7z!H%(tMD`tl@W_hNO>A8NHuDr_5 z%wg)|P1vCFS5$Kb&<UpEW=?NrkdNNc`78dmEY;|_(|+u&xgHhWWHuM3iE%|nsCn~E za;dpT_{@U^*Y>n$y#>TM8BTq2q|m2_W-8d#_EoUXAggloEtJF)Hlc)lyQ!JR*o0Qv zf-GPvlu12}F{!6Dwy)%ld^frBa5akZ)p>wBFm^<^Pb95a;}fyB4<hb8jBvP+z_9A? zC+HBv9@HVqibI&TRLeofBYD_Ld-$WzRGergX2gkRu0glDzFN16eR&;%`dE(`k9N6Z zf;UvCPr`VyW1bJ7V3fk&ea^`N@m6YG5^T_^VC{)wx`IJp{kTPBV$Zt3wm-rJJgs$y zYSSSlX{f3Q^Rpx0<ADJA3|7zteXN}SphS&Sv`6t;VGzb858*1U-d1OG4W-0n*`r4X zm@cef>h0?n<*v2`U|9MPlxj6vi0N4eOI#HyB0^0AqX=akrL0&}-y<zAn%&o%2B1s4 zlGP-zuv(GT=!R>D%X7nlUq@nj#0O`CiRVY3!;Wg<#_K1`jgghL80fr)Zgy^j&(r&Z zPadYCPi4n^xRVPP<AYJS#BZsdlp8XWa*YZrF}6JtewU!)1hB6!1caRo?V)AdYlwT= z3hkOaYz3+O1&w3+0fc$nNfhBGsp|Ye4}Y895^;{lc29x<X@&n@8`XfI1{osu-7iGg z^=z{8+utnFo^+zKB{M7`e<ZGqETH5k{4+;=<ld$@xIeSc*JI5tp)#|nmiOhNo)XDQ zvUjpmMX;Rzm5d{O;$Tky$Vb!O<830P*%e7?^CQPO*-3G|8T`&8<yMTAW<&09im3Qy zjEAhtPh8+C!6yPGy)n)Ulw~>)n9&<ori*i*kFm5%c*auwNSuulR}DKr=V+&2DxI_# z5~cxx@HgBg(epEe|LUuki6qfgnDL|QR9*QEw=nF~%Jupu4eZ$z>Scw7mB+BYI0I60 zKAh{1VNCb7<+@TfT;O%5cy0askgL*rn|1-WX)!;L<~xXP4<>nde63|5x_GXP$u9-H z@9QV1)d)vb9k*zJ93;lDiGd5*a43!c%^QDnC<^^SFkjvzlg-36$1TLTM}XdGn_&lZ zkneKZme;y^%EgZQ)A3aTI9+%*P<R}k<fx5svwUfTHiNJF=F30rh$+gO<!B%0Blyk* z?m$%IHp2LvRyb%@TfISU_&tT*0*1OA?6u9!P0a^=>~TLCgS+{&gwYV>otV{{NyUrB z3-}iZoL-VLA}h^V=iV8m?&mf|nJe?<9G;Jxq9@l3$EYD(0lc9qfF8F6O@(HjVUK&K zB`s6AbYIN*<^vq=9LJ|qc^Z_)mHQ5Qt?@Lw)HGuwJ|vwpjzOz(-L_<>)W{_C`l+KQ z0{*&&Uw2E7oZZw@a3ra6Joi%6qDM%}j|KTg9gSMc<Mb0g;Xv{%s>hvw{FVe7>bH5Y zlg%SeiiZmo`gj{R<;I#wsYJiG7u^YEx@nCnM=))U>>4@FO`wHwv}MPlI<bl$-^K+_ zPS7<Ve(sm$M!?BIZ#sIiS38LV;`YS~4LZJ?zFZ|>=pp%fTG?wixbg?l2N9+hXc{Z> zsQT+>PC|1Y3H*taC2Wxp6D+^i-q*?RIRiT@lNQ6NiFP(bi6h;ROl2_pwfF$cpAa-X zwA;$~RGP&OOW?&_8<%7M^~lI~C(|`q*62XBt|v#Qebx8)ot4ji>4pt<<MATq14FF5 zaEK;!>qM{@@W)8?8z*N=l7hd%nCmo`L~knh>aP||^Y{IVFJ(#D+%Aa;e2(K5Q9|zr z7va03<wr;6EcF$US8-m??TV1_rLQ_xK@d$XzTEBX<IQK3$Fzp-al<0jzyBD40(_La z+KFq4X?%*b$?>Nh-ZJ${5arpHqo>19&?SV3D<ofN6fbOgCQfT^nK#3;weXY4O#@OQ zyt#*wY(Q0e*5s~AX;pRpv%!-(Ta2G>t^vNv7#!}Pzt*dKmnzXC$#FDJ-Xxc33Lhqu zQP$$1ABCEyIy-bvi7B8AEhlkU;T-JuwU$l%h4!HAR+M^#&%Sxm27r{<Y9f%G6!+#N zc4BLpc%X)s$c82y2hx(`nvSY6^B!(h9bUeG>p0tXQmao3z;k#%sy<Ifyo{VG{Y?7k zKd;mcl27P4?yT7)Bf*W^VS{x%Ez|MLrGpx=0~p~V7TtLf?a?BBje$uoGX{6l<CqqQ zs2QMrw7l^%NkaxtaCWyXjFGh&lLWfxv<wg*3PL>~cMjy{ZaBL?v!=YU;#bF5x})Fu zB-ISxdAFyb&lozX)?}gS<I{Sh@BnCk<nUhV!;1x&Na`ZQ*CyNVbVsNQv$QBe=aP2t zf>$m^%OFutd*pMM*EWK*!6j{YgnW*vPetUIgIbq$A7aTS?BP&t|1eD4qux7QqjB&* zVX$x-Gr1#khOl<#<30HRRY0o0C^1b%v~_ivVXnwi%!MV8#q)y*b}&KmV;t;iTmv~5 zqXU3YJMoq8m?`VfgG!c8q-z$Vtz3WxxqB*P!kx_9hE<vZUVvLyhTx@M#}IaY;yIbS zp!E4o@05?j@%XX8g2`~&@fdv<7jA}-1-~O;FNkHfR3INq$2Vo4tOj>5!E7dLIc<p1 z4A@JBVf`b)vI!~Zx=Yh#_y9x3G|`z=?#U*LZ?BqXI?#`nCJ-j^Y&Mx@k_IHT6TMr~ zkx|6yF=oJ*(KZ&eY%szIVePv(nqY_u_7SU7piN%@nH<)|A3A1f=ZZy%F-Zd>*~@vt zO~`oMt%A`-AU<%Rz*1<EBfpC1Tj}}I<>HzbBT*7sK_9``bh(mrk$|>d0Oi8WXU-2^ zxo&+UpYb6$tjh=M>-`x2Jlr<TSozM6X?kFWawh0rDIM<s%xs^5<d_uM!>#n4C37IZ z5&FICQM8Qx*%ZE5RtL^`ViTqB%I<(7`W3@!4#k4Taaedjgpk%~Kbyj8-6cMaf7}1j zTqfBK-9QYyiY_2O&cmIO`)^YPDl6Nx{ukNo1`4!E0-S?tx?mibe$F^dbTY}tgO9>6 zL}Ik)u<_*B5!UAK^*VP9t=-KXuebZm)NT2UcC1Rl6o?@9i(J;cmDoC(?Q<-HF^Udh z0wl-w!sK9=hz<)obi)F#O?Mwebg#sM9+y2s1==p~3(b7ydO~c_yl;C;g>eZA5|0j> zkWN`p-`Ve$r;ZCZ+RQ_I=aHD^ud7ce%)j{u8hRO#Reed9dThJPb)A|N!?78$%k6hX zb#lcQrMON+-ZE-jfrkLn6P7cPfXG0U`IWzgJ)WT(rdL1d@0JL9(af$MP63dvx=@Bx z{8bUy^%d#0$R*x-o{P2VEOVRk_ynF=b)RX_M3F8(m%=fTNfgaztbxt@^nuUV<!bDr zDHKC85PKXh%p44wK#sWq&DFLLfJ^yF(5hmIsL%T>?lM=s=uz5FVVLD4Q&!l#ZnC-} z?~Bxcd>!=AYpAPGo}m*j`V(K^Q_PCE$O>~>eNzHYR&Hk8=V*d%(*m=>1Xd`byPW1W zP^dT^7A=}Hlcx$LXm;u1om>|S^w7=12sE%FLdhRU`8wl;C27kw?jff$&nzWrDdsq1 z6(DP>Vu*^jS1A%-XYIbY1uSqngYJ@^^Bf(c&42OlzjQoH>~gr`AU0S#OOb2W6w=?C zl%6M<=dAUS2$c7Sd)>oYzdiK(+v(f8&GYy)6f=J3(e<jJ<55{bKu>>_xmvQ75kXT> zT2-7|XvInHGbQGhwYOuxm?O7mp7!QzGx(wAU07<DT)k1no)r|Zy=(8e8d2-KHp5Qp znXfrSWBbRqj5oXKu^Bexm-X8tEvdt?))U3jt*2GH)h4y2d0o$fB>V>9M48j}4o5~~ zYrP1^i<8${+2X2I@YfkzD?^8gp`BM$+iwW*JpS%4yE&-kJtF{*{f1ctz99yOS%Rgy z3c^vvRRjZ&B61(}su>Kz4R<RVQ=GXGp4`@iyjS{BaoYE3Q{l2NeqN(hx_6Df?d3aE zv23lCz*i(tS-2d%N~b{}?pq-}UM~6J&o5DFmwctvYO3fk-{Lz+7aSNU3hf}*BD4c` za`*d5x}ojRO--wtzz8iFW7u^)V=&3`5a%)+#ym8bg9Nwz+yyU-11*m;aQu@=K3!OM zr6dPwV`t81W6fvU2+)1QsP7qFrMG8?1^m%4l^hInMz;_1*A;9{wS{N(-4jzaD6)y2 zI2vbOm?{WBS)zQLhBByXpd|;;GTROyivXG3(H;bEy>G0C2|bh`5-B^9g!&_E%oEn= z!AyB1`aLkvkp#8%W?4vPkxiwVmA~nP@xW(35aL!#HkX?pkBty6;mHQ)?-C+i$U}R0 zB_x7m%)-$NMX<&WWV8gNWE{S4sRH&jcF4=ZrTlAIIJ45?#+9ESre^6grWX&~x&QN? zLEyLTV@h*g6qTYIc8a}GGbQBY6WV>kgND=Xe%VzSm2MvqS8rwpfCCZTc`pi(@{kGX z<;9fsOCBuD`0ffqwujm+QX-D0U&L`j3iT@qAhZNK4bq?4AJX@h@F3ut)f!!b%#Z{0 zFoVoN;C;w@SHjvUK>{Ai&Hn-hM)R3tWgwdLz|fjfBK)S5Hm!oJBgH1kSOpSM{3TgO z)iw<+FQ6GeQ-xW1f4-X<PJGc!6$&y_A??XsD@X43KysJ$u-`#hre=OjZ>lKiZO15v z24#nt@JfQNDKIT$3e<82TG?Mp?0lg>+IJS1`2@)|!#1SP8{0CDE?c=$W(JFep8^|M zYbb7r?DM=>TNn|C6gqQ(Yh?mO?%uP|q6R!<O!Uy?8Hj}!v+ZT+Dtj27(2JM-sv6zA zqyGQpGk%Ck{d6vPJK_*Z2&$i#MZT4K^Cll+CbmpgM+;hX!B9c~F5tkAxv1L9)j3WQ z=)6D5U1{0D`Fk>myED9Dr?|%x0a<3pmYts^od`UBV~5m=;3E`~X-HIY5VL2`*O*PT zs`EICiDJZMlAEyG?F=jH#7DNxn_H_@^L?UlUR{1C{y7vXGnP)FELl6hKAA?O`JpLO zIh>DtdOr=NJ|TIuBo9P6Vhn+T=6{-s2+{CL81xsLnwZ4{-u7~csSLN?u(D>PlNSbm z%GS=&`F~3cKr_W+Kh0R;0n}d#-jq=LT)qqINMe>~#HDIz9N<Yvtn|Et&d!n)ft%bu z+HLl;AMr$9N+RLYo7Sb>#mXeAs&4Xe5t}$r5kf}r!<--4&nt&HIPXrxL2J|c{4j;u zPOCV+7zJ;)nYew$GZJYx6)us&tGsgKZ0aKAt#Tv{g#^MGBbdy|;c1K@8BTSh-?q(# z>w8(|+<=VfR>-s0**C3lD4F))3r(Al#%~vMXLqPY;R*J-tR7uM!1*}176we1(*i;+ zP?K0qmpLi4Cwp~Pk(l0+N$Ca%;q?kvOX2uOs(h^?<&&W5D_d1XM~EXXW>uv=i^hk^ zZa0AU?oA9%7k=#vszK%cv^WU!7HaNU{X9+8nXJlSP&gmxUa~8EPh9e3q$)+SEHDa} z$E{MP5(NV76g}?jFCoL=L}|2L#tW&CS`i%g$EP(4w%AO6ipP0{Ra%b%FQHI68(PH6 z5inNzyj4Nb9%pz3=LUWhC&b)<HnMOMcYTPu!5*2S%@zIgmhL!N>h-=Qc1tyVuqNa1 z@*Rz6?cL$mOO|$8)hJtbsEapmJ8J(uC->?ZnzDLcb)C6L09BBEtb*3U6Lgn0WR+sv z)Nnb7R-=Rj)2I+@s^PuZ&$$Mn*=yQpaNP>*%0({cn%Nwg;cwKT=Bis&aZ4E1VO3mb z_{>geD|17iyhiG%65H^z)3>Gvb>nKxnb9gPaivA8y1>NZJcI^>>mx|+G<OLQ2sE}B zbGuP%MnhNiG8z>hg2c$^I9S?x#^0(B{y%q0dNn}lh%&+de0}yo87JnX$?`+PW1B`A z-oQBpbM9tDUpd+2_SJ2U^lzR8m3B}1bRal4s<AK*KGYem1RjeS@#pL7`+AN>mrW<6 zn)WCmv_W^(UyO|<Oo=+@M&*WtMhhrrH^+X}Ard;6W+JYkS{;630eqeH=0fm08ZL2g zwwS$0$Y#B)Vf~e9XPg}zr=Kp%$M+Mq8+@-(JthJgaDK5JIg_ss<OEEXhOrfh`!=Lt zR38?%LujDRs%Zh;SFB6uY@lc{S-4rcz-bwe-TzAFIMX_lPpH?-%nid7rMV6-DtT^F zUb>AZ)K$|K6UkTUpf&+Pm+{ha9|ow@nGrqs-WeBv4(&B)@z;-YKz-)B=P&ZM+urBB zZcS9aFhw$C>T%aZg`hLz#PqU5!~;~P6<d7;2EJEN0i&dxn_0te&O;Ll8e^uz2Uy*i zhaRZoVG~Q|&QJX@k~S*=ag%#Kk|MK(k^~^T#egVAg-9L25jvwNLmm;>Y;eQOY(J!< z2|6NVD*4(qVd1W=uaIJoK6NT|O%1YS0pR3B!r9|ZNmpm<KUt)mY}_ggK4!g`nmpRe zk89iGS`MMc*<q8Sh_zbE*Cx~11>caoR8sRT&Q8tBj*JgM^{R840W&#-O=FRw+XJZR zUdH9CGE=R=MH74_d08Kxrss9@udR4;p;#R@WYEYa8B7rVyv%?kb5QORKX@r)MZ6gw zZn?fJa=1ZrhA{PQKh)txl*<ee(TS>^KwUzQfH>7hKcPcnZWGxYD=`VI+6g#VZ%tNV z-vjZ0KRM8Sc?^~Ln6+-c2Ok-!ToRcdiDKSFwwb*NfZVB}PV-DO?1_ex*Qv>gj|;Xm z92zxQP~lNlCqZ`y2NP_N-s<HImsWD!LMlWp7H;fs(F#F^jKvF~sKrWhHOVCIassKg z=NG7}ysmXB?s^&zU3!h3a*O|%@L%`pJCeKUTd){qbN>-&#b#NCk|mmr8D82!;F?;} z<0}N@5p~e^AI)WQ?M4m+L09Mi^{_8KY5c!VM1nf$6KZq=Rh66d=H{^`SRU}sZ5Jav zbGXPfH$qxuSQZpl`Foik!=vya9YaWZ4$gw92xVayhQBG;EcR#{W=obvJpFE#+23}2 zp-KDYyuqN3aN(x+(^!X?MeGn_>Yw~@;w83-&^q8Ed%PB=$?0Qdszh6pmjt4x<Bx4T zGO&S?pOwKXap;gV#Q-xKj!aPutXjG49NCTm<H+ZzBV*G9-k`{f&K$0Ki_f602kaj; zX?psjZ*h<I$|v|>;X8+G9mfe|@gFXLyPTd1@67h$9@_2i6!ScMOrjdDsm(>baP>e_ zA6#WwS>a%<sxmXJI#55W#an%6QX>vQf$%IOCF+zL?fataWGpE?F2X5^IPDY&jpJtg z&cIsj%b|(~#wqY$W(TTj7pI<?vAmu@j8EuoyiINYHqlO@2mgXJzbs8dNZ96=RHwu3 z;mA2u`MR=VY3?k)y6oo<K-3%D={=GfE*x)0`%d!>+;?HiQGG@gq_LOrI6Dc~;O5X> zwwJD;(&6ftPO|7%@Qd|JS&k7@@G}PPfy1Z0U!vZmP@wE7UY9NH#wG|eM7(rABPoyH zT+eqSX=a#`AmqXr;R;r6%q=VU{PVU^o+Ura3I>RZJ^oXz;F`bKMS+osJfk6x+bK-J z%*pxV4xifk6Avy`=s+!=XqPMIZyN;=kgU<Cyqpp=wRu^;>b`&8NkS=a8_uHU<i;qY z0mppSVM)FwwAe;jVBP*Sz3Lquplt;4ZZsFf4p-=rk<-k0T&ORvxvQH2+*WUl>R;D> zY~gcq&)@f47c9H(I1tzPfN?V)7=~2Oa8&E9^6Kn8=*>B;T)xP7bWgFAcpI#fO3P1; zCbPmHBgI@1u@rO15TtZX*J*k8dDSg`%N|U5d@V0rvyDb|t?I&`@9to%7NeeKwxkE) zq^{%R0Qbp024mE$%}{=Z=cae_xrvO}_O^~#`5hAy4tXtry_esEx63$hR<UhwqKEpf zpq=xYPS-e@bAJMkYjCh|gf;2FXrjIgp58s9_;PmuR;i>2%%>R_we;#~9CtxFB3lCa zt{;#Gmq2}xx*yd2<4PrZHno4nk6al@n=>h<^KkWGeLqqu(hd`=Y)L!bl|5XogcRpa z?vT7<4<#=>rv!JyOfb?;oRb7k=!@zv##)-}{YR7a8rQ&Uh^XI?3G~Zg+!D53Q9b#1 z<Vv2wO&q(0teX9O8O<RGjXx@t`K9JCf1zlqLjnfv+c%05;qyx6Mq~~j9C-#AKR+2d z&Zsh!pmdOpuIQ*#g~A_$jpZHGdvQwD?s_BDu1CI);MN4Ih#fnwW_pHbW>bu>Zd{$c z$+T!OJm3hj)bie)7^*gtl(Y?0Wksv&pIk?UpEg8=$6|eS04HDRBQ|J9{M>`z#HzSS zc8qaoss`?ZQ8=*$6cR$xjjX7-hHl4=$mBPUWyjiSY0f>*(iAt*_npJZR6E`xs_lKa z`$VtS-9HNhwOoj5!JH%R&p=h;uMY3)v0TbG&ujyyHk1F^adI{C5GPmHbAKxe%o3G> zP*&LfxxoouWrg9Dbd2e$3~>9;RCX?~6zx-=?X0@NArR)Xreo)Dk+1gLtAZ}ls}1N) zOUj3sjVfVxFn_WKu-~6cZh&5-_uNMbMQ-%kPBaVcr&jv$lj9c7ZCU^zy{zZh3l~!8 zi^%Im3mjLk!`(&>$hf0NMuUD51=JokaaCOt3%aswO7G1!XC=xSLfit6pLr8g5`AFt zRg+SH!*p8OuEFZ8s<fd5dKU4fA@?Q?mE9AeIFf0#soLz(JLM$WPTFAV3hazs^~Fd| zJ)9PkS!+Z!_;V}aW;ZFyd^dmbt{>;r2zaFcBcK#(Mx1JT;{+RmHAf~^_Fn}|nszry zlj<8qk7`==q4@cc6gFJw$tvvW&Pqb>)jDX&ZE1xNE`~?oOh*(u0hDqZBcgBBgBvsD z8!uBi@`0=Z0k`ab4edG&!CaTTyFQE!qtsjgY*11Ux%h+zunUFGv&GS=(-8UTOQ?Ca zv4Zx@`|v}if|#m4D84Y%Askev8$Q&@YHXuV^zLB}@eB8{Npr4JW46Id`}B?{*H5A9 z8E70k)L@lNo+YP~KFo~Q1n~iP2?JlsxaeeeESy-NzGBRsW##;PeDc$1f&LWaZ+|kh zSFwQyUu<e9-u9q?p;4;lzdPOmeC|&(Cq`iDWkN<H=Oj#0s0vB7VUkcOjiKYy?DfkN zv{H0Bep~xJB;ERP{Nh;<xCMlqy%Q!mVGDK$;~U;!2<E4imZ|?LsMy3R-cxVASIh)j z(@WZhPT`Jqjq=J(@^Y?D2#yxUl2H)}8d77~8QNWcMQ8A=027nOeF75vSwy0F@sD$2 z7SwBNIc>e8#gsg=C;K@_U=CzyERQ2D<Tw|#7^22t>(k94SU?j%9KB;aB;TN}8ZgEb zI-7xqwj>InX9Fd4^GLi*3lG~#2ARf<^W+4Bf?Acph5i)<PbamYy3`f<g~r1j$N(<{ zQk<E-P<$#1JA)bM9xsEDdnju`x&FLwM~Y6xztR!r<$<Nb)jZ(^sU2)lq4(l{^iWf! zdJR%sX-5SbC#hHAprkY_-ZaBr4Kv!ps-5P`4B!Y3p$nd%ZJ@atm*~*qJ$2<ha6O0M zV@A77yAuX(<%j24o|(7(J*H6;z<GejTAtpqcgP)=dlL_0ohtB(&4gi01`^qfh<_p7 z<|TmW5r|i6U}8a>9!PB0;Rs`>`phkucFZ1AZa|V&7~<)`F^{|E=BO|YZ-$sO_iI5b zcW9~!ZTkC`c6(3VIo^_k?NcV0nWeO5=H)Gjp>?_pKmSOYBjS~F#Ja`2m%ufDWON75 zORik|W=_AS#2i<6=*FmjV=QRiQ8{P$W2~J*>iBTL>`bLg<^<!1kD+(Wt2D2y!Ya0^ z_2@R&9O-2Zt9)fk!8-5rGFA5A3(WRR6{Wrtyxx#0^MsAfJQcMS)638}Z8FD7CUg{g z=3H~}1MHR}<Szb^yI|U;92z*Clo0QZL$jD2E(0a);rBA`m}Y$;+$_A*!<P?gj6LAP zJPW=`+MF|6s9QPl52`ADQ9}vxv6|~)U4wGs&iPeh@l6%Ln3|~u|7GtG`n1==Q5LFY z0JO@~osT^z`9iQZ9}pB$g4qxz9NUM6lr?`rQQlrsn$fO0h+Ur8CQAqn)k59=5gbN{ zb^9kTTNr49W|K~;<Z@C?JbTDf{<v0qN)ud&2>A)}PjKFFk26k`ryVMeKqu9aigz(@ zd^t9!ceZ><Bq2O*x;rs5e7!{!ZambC8BjCg)Hv(wlc-gYO$(}!T&->alr3OZnorPy zO{0y{o9+oBS@gd(&u@IXaV8DgtA2rluZ(@va=WraMXKpOk7$B;lcV;;%k=Dk?we5$ zB<UJeY;UjPYZ_E^3IEGHjbO3ySMwdBR?3c><%!#ZfTo%<d7^wpe|yo4hpnD510Z@m zey;#sFTR@(aAOELx=>$0s4&uoN3{6!guS471kq?Jl;fICEYVKFWrf#2*A!#m7({y@ zXoD#WH~hsOZH0$-81w{SoYD2WOTe>$dRI$Y33p>=llpFItr)<K4C)N4t#l^z{CdY_ zjEVz&LZ`uudsJs(xgkMbH(kwA{pe9~^Uvw77Ten1?8FT_vm;8^pIz2;>xFx)d~rTK z-hdBwB0^ybn55xEY04o8hF~xRf+sFLK47dGn)yoq%g=~;tI(R}A5vjpS}c=@8}i?P zQ%3xMf1*6NSh)!iE3FwY(zGnbj=Pc&tb%lEIBCNu0(v})s#=pwrhd7t6MqW}d2C&_ zA!z<jbD11Rk^@0dl~$l>xDTCX_5ZGWfPBq#u}}aqGcKlNR_(tbsl^&ib=t}{5jPTe zy0qch7)lIJ_d5R4@IiDO5Z-?AO?<E-IrJqwGlc2w)MUU%!MHLmHC|5C6B_x{E8nSJ zcqJ$9_M0{bLz5(_!|tB33b+LrT6SWN5A|C`G3~ljWDn(#o{R%d_(|wnF{UxFOsDpX zwN+;5G8~h<^ik8V%DK%_F9SxjkI}xc=Mo0$e@2?7F8Hu4kGr+yQq(e|<_1w#-#K9l zNUOzDF0G$5<&58?gauRX+(5`z6~kF)T1Kf^jr4_Td9VTu7C|3JJ{|N|7k~zEC*Pr( zlO1*$QKzpcINL65v#mrin9Bl0w%N1g9ni^bDSt$aG(eDaiAthZAKhDz&!+j!1U57U zjK#L~J4D>#d0B+z+j>6J=Vjc1(T~g_lp6F;{7bm_j`#sfx3^y0ji|SVb0<dm5rqYQ zMtBiIA8h3-r*k50<e=V#X*j5%y&>I<1fQdwJ6>6RkE|UhP@ja(qgcEHB8sS))cc@G zM_(anO@^z);t_Cy<nI*qF#9oMIN?)Sp_XTq*Z>|#$JU$7#x)rk1dSbZ6(bDJ161yi z8Tw<#3FqGE`HB5?Bj$~9JDS>fG(I-z1YVg5a%1N2gu2N?(ZH`Tl;1AB-!sMz=)xh_ z&I^ILYIv0N0xHDGTr*+hV&Tq6bUabe+ivpMSM1&dyNh?aa_odmZeh{T&bYH|Von+N zN#?|j&UE%_qHc6o-ryb1ptKQM5eZo8!j~*rn&8OlRdCI{DBA>|7eq`f?{`sbeqi3f z-pzxhDPYObUUk*H$D>`j%Z}k$!Z;TP9TFDFr^JL5_$q$&f!XM!YbfqbEoCDNILFOi z7>6>R>1w||S3EbZrKTjmL1@AvIH5{DG0w$L6+fxxS=)=d&gI)uY>)2~p^^QM?X6kI z_4SZElRbP1g0#vjKGkFY*{21sjEFPt7aBLYX)Uy51-OU-p2+05Ma`on*`@zVdNuV< zLjqyv$9J^y+NRxfT-t2eLuNs|8T~A3p3o;Z;`q-;E7>b=f#ZL_ZwV0}0bm~)k3{g+ zs9e9Ug_Q{0zv??pw?u(=%3fY6xxp&lS81;noZFiIc)|t1A2sP2WNNbVr<9V$W%eKl ziGe4okD<sBHaFRV=#VY&3a+D3(;M2TLN93MOy1=QCM9WOXidgzIimL5IVH;1mnd*j zN+Kr@@GG9XY5W|^c@jii#SlV`ZwQOIslfbQVqO4DC^*e4BcK5eIIq<iZ{U@;YjVgM zAkl6>vy}cNLzNz&ElDQ0vStGB6|uhC3C%S<U9mq|!@=uyk;W9#y@tFlQ7B+WE5Otr z1w;>IiBLHXG*0GfyHr7Wq<d5y$GVSeM$I<yPE$U5K1{+=9(jNR1HV_OdRR%VhCT5- z)N4HAGs{YibA~N#VAxY7k~~|4{!kTyqy#Ic5%xI3QnRPY5c?rZ&&Scd*&k^<?iz8< zeI)vmXkoJ2KHx+Shhk7y#GsF4vIvF~q@-+Ju9DJ}l;-4nIAuO)RGOylO=%j2LGGN8 z!!#ir$0!gXHAW=FD1mE70wF@<DM`0@!Jz}Z(a{}Al$m;rfuTei8cQ1aD8|tb#aN%< zSR`zr*FDpwq|2&k`bpEbO(^w=eh0T2gD2n^1G$w&l46g&!2N)b4LpjK98_m;0tqAo zr~wHW^e9V09Bt=M+mxdSji&Q>PUpt@$WRHRD{c2P%<;w9t)tnT&o8OlqCM`2TAM#v zv)6ACsI{}R@EI);lxkPkI0!14=54kW$H$DH=kGf56V<S|ov#rv)Rm<QnR;GNk%x=~ zMsg$qir484wVE{g6TG@cg--@l=8`D7=>(k>usz0-3aVGj!I16sy{%^>yicru*VTC# z02^x8Jgc-(<eavp@0fDkMT<|@VB*0c%qeG^GCS{zP_-*gz9el<O|AOW+0jI&4_RhM z^8krAk-_#RGSpD&?7us;tCMdZv9teDM`KIU3cPRdfWPm_PE|Xa^io6n#+#i4Brm&2 z2JlKoAa#pHgrsS&O-YS09)EtR=`~r6b9u-!YRz_%&lGYuA6hl@8P+2?sh?1kp>8Li zF{%uEk{}f~N3=G=utvjEf1_dLyr#z^tC=2OAvDD+C&vFw7s2Qy$16{-M*>(PX^)LF z+B!2yyYRAUu{pHoW!;8b8`@mWM!m+z1Xbgqo}_{X0?w!NZaIF1+g27Om3SxggXYSQ zJp;gLDjpjm_!xJZf>m)b6}TCQmRY32)DW(Vrf?fRY8j&r{U)AN!~z@n=~96cjTnNQ z>?BXPx6YS8^<)paQq65t(a{e6D*qWhYjhH7wRU5`Hcs-8{-B7^wdt~H!ZjAyGZ&Tn z7#<M^lpKb-I;K2;o8cB`(v*2sK~}W;%jdVo-|+I|7vX}e5Nc>Ve?MAF!PmCq!Z{RO zrn@Z-vfgJ0uT86NlPTiaSwTf&>{&?*ATpYzb6^N)Y|~neXf@O?Yd2f|%r^tHKRAET z7vTz}WqiV%K)E>7jq62nWD(uwm4U=5jiU!O*9lDV-|?P^NCK>$kFwUSiO$@`%GEuS zkZ9UZNT;rwl76+Jp9<n+pb|=|z-=@9#xCa(s62;9H#voUSFrfB)}z{f76YXcNY>t7 zDR*d-oQEC%7_GQcHHPtvs-E#IDIaC<9t-GnFXta7Jlqooh%W){7M~`c!`>8XQWoy$ z>~p${!?KaE@zg0rTVVPPm*Nd%Iv54oAL)tfuM66FAWa&hL|mTeq(_0boJQeG8P7>Z zp)-as(o-7RUXlda=rJ`6P;|jNe5NlpJm}B4;bbiMvwSUBO7uaiJ>#Qj1mpd&cq4dY z-n!L2>B%>n(W#-T`gvP@+?RRWD^fruc>^`7kwb>XQ2^3?TkEfr>o@0<MF-HJuncQG z6N@|G_lQCDO#bB~Uo63EoY4y-Ekze-JD??pt0hBzB`PPyHznbkD8M%XTwDkKpEj{6 z)D{Z>-q*W1RUH{wsG$qi@~fRS$>anmx4uP&UdXbQ8({zAk)H1Q*2$^<y|=8c3o#XW z0?#cs!@q=&*qu*TO!*B@R~_yN#8d?LDx%Okh%s6r>EznHa#Dp`y|b+ST6r_JmGTWK zc{@xjz>D2b1v=bzP)96qg>pmBY(=+sbP5*z$iipGw-{ehz1K)ueQ2PZ9KDQZauBL+ z9loh9X0G-7Ug5z_s0vADO^aLk44$7$OQMO3@r;0^yh-iXd<M<cjB#roG5Y10xBJNI zhk+0UrG^FM2+E1I7e0m7YUZEZKn$4u;x&Ny=IK^wMWhM}DeX|scwggpVFLJd^hJDz zk22qzIy;mJIzyt>@Ce`ka0Fb6w_c+GzJ>H5ABxId`Q%~9`9^yO|Il-X7Jin{IRtIp zOax3-BjsB8h6M51nd=YPeupDvF&U{neG>a@n8}0tsHJ7OLhVO{QkG>68G{q{?khE> z2wcRz9dP(epgkVZ0{#gZTg2$(qhG8`i`YsOHAD97&R?Q&3^nnpg~}AT>fLF_6`PK$ zV?akrDyq%EOh=J+mFXd+6TVo0wq6I{-#0Sl49pkbBv>3^qaL~lMaD5;B6Z!0=naj= z7O9~p%A!{*N+7g5>4X~Vutlfu4e@&a9VItzs?+j_O0VN?a*~ddHvK8Pz0nIWL{d5M zea@?>3~X}V<~(qwb1oA^8IK0cT>4<iGdzK3<pF577L{Jl8gHXT)VIn&bt-j+BR|Y2 z@dL9npNUX9+pIA}v^4}IhWU@CNl%XRvW7n3rrt<WsF{;Kgy#8maMaJ_ac_MdPvjU) zMiJ7IQ_CWHQo^egv*_1M1{oN-JN(UYr;-C|ts!eP7&R^x8>FQ(sA;Op|1_7$ksC1( z1YMy6jKF>PB>DeUW`TMxmKXrt)pcl-oETJ2<EYj3wu~V?zwbA`y2t9O=`qY2@0j5j z=4xBL+z^8!oJBJzH~{4!KkROxFo1%fV*!4OYaJ-s6o0L21378l2S}6>W!KNIXfmmw zC6%%XJG}OFNzV)AP@!)78zehu?EoNht?{GBBn_$kmr+(7$sb9lZEM|LLfOJYW7*>N zNCq^vy);B&aQ^{L;*yFojk@~sMs08W-b9t=%7pg#R{#-*{uOSA*PFun?k~;#f|<@d z(NY10=w`(IEBZEEI+LPInjlqA$d+B7xiDA`@MCJcx)I@c=tFX)X+${QZC|IlEIjo2 zv<XW^)$MB^N&_s-^e0Y<&l+2|yr%hy$dJgk=&ytc=|Cbd{%Rvm@7p1;b+ZXQsy9o# zmJ=4dct)(uOc59D>{{tg?s=(k8Cg?12^+Fn>O=exaHh^n?<Y9=RX?(aBd?gE?Rh1s z4ehH^Apb#H#*cF;?G0lsn5i5|l3p23*D+qYg<4+S@=d?->=1I~ZkusOmS!Bou01@@ z0@F$FaCFhK@8Dr_2%B^^$KRk*!%bRa-PVYRVSAkj{$vUqXSPfg(CbdE)W*qTfz$v8 zg93fFPQ%6zL9wOmZG6$qFl2O(bKuL;yi1}Ea>zUk$z>?mM`75wwk@+c8ItRUFuQ|> zx@GbX;5asZmKu|ZX)h9*D-@_G|IUgFwFRL^uPbTIx?_^rgK!SXWIFY<7rVoCdBN;z zHU=G|tj@Er0$Dco8_7hcU^wnFUT40JO5xfEC<y!S1S3601CPMyWl874LGVNoKKK`Q zBg)5|;6W<w%qDy9c+REg<1+MK-DBYa={gc>?&Nd$ZT$n#8pjVCGyps#kOr~<5yO2K zXjMbn1l>W<)j*A`Fna*zN^pJyGP&IHf*Yla1qL{cMV+2@!h0wbUTnU8eiwCi^e(9A zFQUTcRn+07-;0*10-tl2scz_1)$a2FV9%O5l+RY;$>W<)edZn_xM#jx>I_ObXw&0i zhY;W4CZ@2;hs$WD3ogZI<d2r>i<^Sep~&kBDw%kMX!Fv%V%sq-7)Y2h`VzSsRj103 zv1pkOblcczJ!@|SIGf{SnMF;jMz=T}j{CYA^_6{V|E_T5bB}{Ow;pAI`DunIF;WJn ztD(*|I=6KEc#NSZFXkNSY0KnZQiGD8Xd9mWGhrMnARka5&9-q*!$gMwHw)Xm!~%%8 zZ&&q-^Q|$x<eRGR9B<=|i2eEfu4OMWMk}+%OGUW{G^2!$w(s8^3@^o)qkhO*Yrkq9 zV^e>xN$)gOJquOGmzqpT!<y7rlT1_!2N75khNR{178jESTw%SgfNa@Cn;rnsQF!c= zR<?ZFL#qw27y%$UCbHe9L!Uu~_xCvSq$0hzh(;KEVZ$;2++;`Pg2JOfEoNHY6{u4$ zxO5i}%QyX3!QRw>_nA@C#6d>a2qB-ZLCrYasW}R)Q&ZN>sGVnqmp9F*VJ2pMvo|nR z&Zn+7^I3OBO?FDnXa?^2<CO39n{q`)CWvv833@`v^~|;(Tj>0ylR$q`Q-h$4GcEEw z3egEo$-(!rl8#K?I?DY-6*W6@+jt8#NeM#KCWg{iU@Ae1$gd_u3YJ8pNRz3bQG1ED zkM)SQQ5vcEXn3cD#bc%G?W5<gy%z5T1728lWY*>U`#8U(l?UTuY(*F5e*tPcc!_ol zPEcKLPQrv}ybgfqd6I&EB3d_hV5J76$B3idQpS2xY)ze`bmc^d&4~4<hQv7Ju|zV^ zOTLR-YQcYs+TvwZ-Dwz8b^WZmZ13@D5!5X@j(@`}H)?-==4C1l?4Vq|MeT`(NaK#~ zdFs?9S!_o?rbrXfV4ci;gd6VGVQ%@g$7a-cEjFpk{byICDh*B7_482_3xk$;;7RgS z=`l*Sem!4AH2UbAhQn<hV07cI&YsU*ndvlS3hH_Ot1k^%dzzp_!>Px`9c^{zNT-HP zli$`XHCzcN$@Q&1E7;(A?c&io_49aDj|o8IthZXlZP2&fV><aTG?yt9Vj9zySg3jR z%$QfzTzfm6VU#hEMhmPau)yFK$x@p<avLE^0W{Jl=Cy0!wA#-Ri`b~n6c+Qjal+Wg z0o(Dv+-WnEj?-*0@YE;ts_*Z{34MQY6Wu>a3ZP*oIjlUG(uy>;r1!scA^Dp>ZY+Lj zX`^FcmN23u37KN9*2EMeevCO+>NDm5o8d2u@yg&?JjS$?zy-1wg&1*7^TjC=EDOJ> z1Blc&d)%Ff$g@n7jzvpalJEe6(N3h8>}pN$gi^X>WBOALKpRj_WV`{-5EvfpxTgey z-0Z~?B<vn~;zSZe9mtljdJ_H=i#Rv|y!&{87CHJ1$yoJkZ~_Gttd4gpPNaA1hJv?* zBcigMA~+S_%71W_EEIK;zv*c6ZarP6aP`Q*>(f;vx1f8IY3mT?kvZ!=8DjR#`a(jb zUP7nKk4|Qlk-0&a0mLv~Khwe{rZ}u!DVW^WlRfwwzBTL!yAVJH)k2p&)GLO+n$0L2 zkHHpE+{$JY{nN{NfvlQ4dv2#WSpKHIyw$W&l8rt`FHAstX{0*uO~|$LBXZ<AV$z^W z8UBkfJ6LT?!2ICqExlYb-AEEhb)l$@cWsLcA2_AWtf>B-r~mBe=Y>PMpqCOc{KZKF zrE4-)%o|sU<!$M>?p5yP1OsGKs>d_4imw%;$h1OZp;M36jORAbdg3k-(}wEI?_^P? zB;FHd+AC}mJHXp0sBoq``X@Uogg`T9%^fh+4-lykUK|jlbc{1!7%~taBr(M#4YdYL za3g-*rA<^Z?W>T3B&z9Kc|en{aZR4eIyBShrO`n<U0Yh)o@0;W1`nN%V%Iz71`g#U zxrZZgq5uxuomnH8y!3vQ7fQf8+i|L}R|{f>YMDcdF}<{|3))FSV4h)<kFW&*RPN9_ zN{)FEZX^C=89Rj*C_zU{Uf~F%gZm_xSZt7Bn#37XD0@Y4d`#-V5PTr1m2ojs3dU~W z!n|mk1-mBT#7BtlngGj8C9YIuRmkb8X?w+s9BJky$V!Uc$&|<dA%uc<`Bcuo$s$#A zZ>Ad3IsKt`rC90jd_&2B&}sZ59ReTIuIu+pf?DNwx2qLjgQnk%;~JR@d_sjlw@#Nq z@~M@|odD%)GO-91yw@-RDpCzwjKt1FZ(zf_Xl03O_zIXjU9+R_7E;yPQP&%0;Elez zA{ukPg8-r2TCXr9qOih%?6+c`{qufg0&t&>D@#1KpL~1xBu}4Y(U4_W6Y-{KAIZ{4 z=3zVn@%cQm+|J2J2`kEEt*=IErx2~AaxzFeDOH&=0?&o5owTKn2rr{6wQljzc0>R6 zX0QL|pF+VwGnPpzq+7#ul55fFWgP0(+Hs|R{%H`}fsB$RWCHVV9NP(`0!bh@r+))A z>n@3NMF@JW{2t^z$P$S@?NLQBE@99^h_@#xI`nuGOs|2FEwsxKsnmpzn?GPkxd=wo zHC@NcR{-Km9c4p4I!YoXgV~>evKK+Xz%G6}oQ&gNg=g{C<<j$KICwN%`q9bqhQDr= z<N1|7aqPUbJ9Yarb#g;id84EXKsj#;6w{)3q`|c9DjgbIaraYL$P7axSuIH%bS+~k zAC%&_S*SwjQ|}iwt3`qFRvfW4CwW-Z8V+x|75x&=Sm~j?_yThGN^$xvwKG+8hL6FK z@0jz%QDOn#nIcisuP-vx)Z9jX>~Y9^V?`B)o{f?<q0GatjzDKHa|Q#jYT{t#()nBh zOQQ4(sAknq)5{XG?40ElD3aMkwUZcC%YsO&hSLxlBNsHtuNqXn9xrWLO;ah~)-I~I z<1tN}l9-ab42IW-;tZw?Do6aIxy-TU$dMqZ_bKWE#fN=4PpdumSI5jzl=v%|NB|KY zz7)~@iKJ_1D;6uTCn~Zc;>O4qn#bwl!qlQYlpb(5EUz|px0s0?NA|T*`n(3z<57Mt zhA~jD;S->7f<SYgR9&gCy&!8uC%-m}5W|E0$iGILG)Fb_5|4Gxh=Edg>oPd8jR8~~ zRJnOP69zK#)vYW37$91S`y0=MK_DwHKyfuWvrl`hXM9T6m!ZRbuphRNOS85;Cpwx# zq0e;0d88SN5#3s_Ry9jJ0R1s48r~ie)6dp*o+(}^^oT3aH47Df+wNHUW<ys@@-z25 zdJ;GKQ;OE#h!`f1_C~utR*f6SXUd5!jG=?q+{fZrKt3X89KSl{i5A<BN+k)*8<#Vp zcixDIfYc9gaYbta$cgROY&&?Sl=~9MvsV6r{0yZ(ew{y7e=%mp8zc<r6{dbPF^%F@ z`K_oh8n&WjS?%d$pQN%L5jJAg<X7aVL9K=`4MC!uf?zJAC5d4zabkiqEUXDp+k?Yl zIP|57j3b8BMCjcTDz|xWD-VV{YDq5n7%F>W=diCyb9hiWj7MPM7)?oaiLZDE333|e z@)bSSxXH6DcT)Q_RYCH)OXseG?gC(zX3F9Pex7bYw4-{-{Zi<{!<KAxXgLf(jS*Il zlC)Su-{*HFIHAy;r8f9rQ1HnVFOQAW;lcS?;HA8Z-r>ySqt+7d{BA9Lh>w4qJCw_K zzoo6$_Y5Re@4b#Ul0#!O_<bJ?jf+Y%YXpImC}vG*WS@9g9`G_zX4CO2D+uD5D6?(8 zObZcnYs{$PbX-I&n~NL@F*TN*6%BjLXvf#YyV!Emo8%vXUg+rdYXW=-@NSdH4e_@; zij(1FfAZNR9#nfqpuR({A9DOYFted{NcNn2CoCx(H2m_;zCAtzC8^PRefy3)^N2r~ zPcrTwwh`q^pAUByJ&*3d_8hoV%EYtI2;8Y+-6fP3>EQC2C4Q695)O`pVU$9_79?}@ zMZ-<!3QHV$Sh1PQa(WxA43}6wf*pXt(ZZ=8=oEioX~3r2Zc|2&1)!{w51xtpR!k2y zD|zQdhvP6vo%6JS_1}N4zF3x?$9!@>x7bL}pYX6h7Y0zBzRuQ8u)Au{PB^5*bRDln zw|HmqIpv8)AZ1#4W~+5M_%g=BTa$@m5iSKPEXH6W5WI7#&(vWqP<5AOxRycSf@b>8 zPWo0GzsB=JcRAMv*|9>SETSZpDt?_M$LsF>&g(1<cQPi)YKw`VlH<K4Iq17~iA%j) z&0NR>+5KoR5pMZ&nfBt12@r4z^YmRu$B7HZkv^BZRO+QM?dp>2*dv~_7>Vrnx;kUu z0Rft@uVX1E!IDmx2EEwenspriXKd(N-eStGzflN1d5L+7jX$v;uG%7q3T-2<Ijb-# zdK8`*SiKt}T7=s+b^O+$qeWzISVg|AS{ak+cMq?0eR300c=9|<+$E>fBARh=G5@_s zvSwb}f1gyrx(5OV-TO?9S5UV`MT5@?X56L|q=WUGQ%>5!%sVGwmbJOfei5qdC*rwr z%ai5&rkXo&Nj1S}wxfDz;wSYT0?_(mj_iVFEfofmzn*jA;?cPgT-QJ8=QKPm7)G^8 z&zm!E&r2dG#p{WaAY+BRf}UwvL{Hm4jE#pnIbsHxY^ORc`v_Qt>h2GzrVte6McSqR zeFFfRMh4&}YB>=rqsByt#jDbtH#8#w!oiwW!@&Z`H`dIvCAKlru`+Ks=c55F@9-qt z%&s`%H)F+!Cxwkj3$$?mBpPC!L*r<Wlz8K^e?(FoZz=+#KC-Ftl@gLE3qpE6>_X?p znow4i=Q65tGPs8H!iB&wylyGLiR5@gYg-=Oq0g-)oRsl~1EkoLfGifL%KW8DaxkVf zJgrHTrc0uTR6boHPc5@0fU7^Qw|~mPs*wjZE>W%C$BmP6d08A|rVve`fvB6RGjky& zeuUgj5w<k`D*<rFjn2fkXj`D9w#fhrBEub3p<ot{#0Iytr;u2DRFob+$z(p`VAa_j z=Kv&;dxX~z8g1tCZmejjDvEW9Ro-6K!i^;h;3c^1oKNvhv^$EYZ&226lvj>d&*F&r zKfT4U3VI7Q8Qupgeswzi@gK_Zh(|f{wrn{CsV0U2i_wwbdGJ?47NCd|#%DtMpA{3m zo>{^)LGmp1|BX;ZASe@C6ebqXD#s=W8+AsFmmKi(Z7oP(5b($CdAmZDmn1LkcHv32 z9VF4DK}^QfLoVrD4>`~>=jg^aBiN3%Msz>h31cTMAO%S*nAK-EwX@sb)KUL4V}IOd z^0gIj&5nt4x?(;%k*1QPF~O4Wj9=8La*G|Y(SF;pF2XV23eB3&o~uDYydkAi#;1nb z{F%>kF-#-T01IIU%>mMmSwUC+HDEpmCZ6r68FXTs(Q9Tc`J$zRhLTWzFBT)VpJ90Z zym+zp0o@N@jX(C-i9e>5#2-_fk%{tK?WR<-_lRG55o&U%!8A-yYs_llY?PRm{gPM* z*aO}SzRYS|D7IH180W@|X8fhaPUK4zqsY8&PP~5(Gdx6w9+KJnRe|^5@czPOGhDWJ zDAFg&Wny*ig+fF50E&w==rf_U#55Rl$N0rujL1jmwdQBdyJ5zzt;=^%VB<qS<#mmW z74|XojNFOp?zhP9d*X^15gR{!uIG*_ymL@IkyWfF#w%WyMdN3(Dg~cRD{1DTtU@J7 z6AvhF^S6t$2B5HW)%2oQJ$Zw}R-+pIG;}JbJQ$%ImVlGk{A$Yd{JF>Sfi%rwi|)g- zkv1s_i<-vEA*pQ06nv0`mp3Z4)Cafo{{7af{<&uVs2upm*ffuAI;f^MD5aTUwaWO0 zz>h^HUB?89!GpI?bL8wat#MqjC(nR$qL<8?0&D%RE_;3&MX*YoP#b3}kGGMai=*0X zyGO+{fQgSys?U^p@_Os@Xv>+1g;6+dCuP=cRLw?<qK0Lv(ZW1A<>;({B!6rjj;!7^ z*$@zcIQwHn{K|3RDH{}(2FR6r64JB;fGR3d2Q^f`VxY4HOQ(n0nU>n_V}G0rZinMB zlK=pxmbcAo5<W>sXIdo@5nbY)Gqv@>PHzJs_y#RzD{TY>3IkP!hc+_}O@&loY9eoY zZjnn)`s+yYCY|hnlw<Z2LRm?=UBTS>huRM`i<JP4DvcXLp+ii|gv#FJQi4T)HC&v- zA-)LLA6rQSi45`&Tw;^ZTkt{o!d+)1{QUdRcZ6W?vo2rFH2dA3;8!u-OclV={b2~K zV@;j56G(A6vqiLLE9uA*_jDVXqeOf_+V0VQ5LnX_?~YOVGnz-2eyuQ$5B8?Sd@Je4 z(a=(ZkETU5fi_V<Nh20tOt6Tl&V%s2(lbCRaXeqcKxJ^m5zOogPd~*1FiqO5u)zUD zqOreeW)iFx<wSq8$ml@r>sHys6D)MS9H4*0Iz|j_Wx(pYf7QSE&hgj=mape5<GsbG z|My-hLRmZCdLDJLb>2V~J7IK!2;99oKc3JC<q6B%OFOu@71rpadtCDxTBc)MUn$H* zm9n4clEvzdAqb1FKU$ZaVm8%ONxK=cTeA!O=mrecT=G~t<&}O_7w~BdsU@mGz<xo7 z>D62Sh>i12eKk3;QtYpcml=eiZQiR&ZwfCh0Xkl$>3VqXen7I_EHD!4`2Tu$s5F3f z;*4R8W>34BG<f$o2#urTa<rwdSPajA+VtzahYEq+akL66fNv#b$V6b1yXlb4oAKe@ zwOWNgI6U;X(?hOpqUq0p3e9Lbd;rUM>CgYNj+^!tALiWiaaoQ=C_(H9odkU$|Kq@; z{nE)5(JQs&26cv{Ms)0yjARL0g1f`n*pQ=2U;M-I=L@bq!u>6;2Z+xddeb+f5NZMM zUvJ_W6to-UfpRwRE>+l{@T;15{?Bun96NRcLC_UCz#rHbpXC2pnFUIR35_ts1JGSv zi++pNhFToi_~CBPfebL0sDbvSQ6Tb9Uy?YJ-^+^$QZ=HY6fCDxiy*8=Dig#-7=WTE zR*nYuu3L7NGW?DMCUSrz1sOR2$8rt4XNGC3=|u+&SUP}E{w!z|G~&==j5zaJ#t7)J zBvs!CE2*$6mVvF$tSG}LX2o(+=avZ=Pwh1gD)|hOY2b{3Z@y`Vh(G}p+SdM^1pF(i z-c(W}msINI#S-ss{)Pf;Jm!18ywnAY@!+1vOD)InjOBwR#{)xkrzmD+o)~PbDHJrG zaZ;zXMZdmU@21bA;q@)dgbK}7oJXb7x5Vd3@DY@w{nVj71mp8m9OpzjjT3}P0<f;K z@A$<L+3eGhB&4|3pw31W-E(Z{KE5d?bKPfEWjk%?wNkBVl$bW1yNOoAyKCGbogcB* zO&d63cr8e5GY0=N>YD-<>}))I6DG0Nv>3h~QgH0I9^~rBb@}@__S07UIJb&jnI)hC zsi4)b0BhSf^hSvjicdNVn=rgt60uN?Y1iA~cdIc4(r@{yLcWt0_OIIpl};;7Au9`1 z{1`dNuT4AKsQA4}3(=tSB9YWMu7FQyGKF43Q+Y#a*H>;g`K=U7_TtA_m8tcb31iy6 zk4fyr!$EDzDtpXp$zELtaFXao!sRGYS~H)4G0E|iq|Nyxj-{PYGqsueWJ7|CZnk_u zaoXCXO{T6Sp;~wzK!x5x%veJ?=25Qe%e}Xb#M%}6%F+!3;Gh3QOyA14GT^AWa6nsT z2?Gx=W{DgGKP}+a<fqQp8jxR3s&;wkKtj!{|9U+j2ghN7u9k(Eah;+r@Van=B{rcR z{m9FH5OH2cM0+x{O%xML2zvbm)!o6}S~CLp9ZEOkwiLRR1v3+00S=lw2pF5N@+QM> z2`8^;68L$oHl9wNu#0cgu4^*xh|{IO-A&7X!)LZ<7FdwL+2mNbN9Pn?g}^AI-v!Wx zI&7L=@|&pFV&UWlEP(KmgQk>ZJry-ty6I^6VkGjQgzGnKJc7Pu(>C5^NfX3nw*Eqq znIV5zB&PK%YTFb;L{)C5mqFqt^+lH{tI9;dg)y&)lV{;1eW<!7O*biXbn;XoZx*7y z(hjcXO(+?PD|oxpek?<6>2}Ad)MNt|==IRL+((mh*Dy4jC{3wZ;_8&<@V%)L3x2iw zfb1>V&SMPmO^5bh;X2O@g&zKC=-?;S+`RkP{Kzf3abjN&?(pU}K)NCeH+A)T*MQMk zP@A=ZV7$Z)U5&_fg=R2Rx5_rkc8|rppm-!jCcY>!R~+vw?eH2r9+&@J-HBhHJ09N? zG;2hiO~Ym@|IEkY`S2E-UEnX0;-xOu60}F<%x_vQze|M<-@AGTd$KeWK<MrnQec6< zyxW}?D*QSz8k0+<PMpY5pI876-GeX^b<|j^qPDxFPsP0y@K#bOw8!S)A$kCZrKYv} zZBu?$)<(<%E0k{}2*K65zGDA{@Ydh&oqe-KJHAe1js0_kozz`TW!k&=DI*kAKI=P= zi77T?>od0dc8^-Ha`J3^3?o_HM>C$hvv%SIz8iX3c^_D*)$^vj!uxnK5cZzaNNfG8 z#;MD++t6B!KUupr+clZ=x7OdzwzJ~*SM2D|yW|c!=G>vx^=^7(Q*YYuyD0<^QwX$f z3aYi*d0-3vSmE4UR15LyqBzSnTbegAS>af{tuogB`Y_6PeK2ae@Bf%u%z##}|5pVj zWNTCH`v6fuuD`5)32hxUR<?wV+CxW)83#aG2v+*bH<~w}`&inx->W054~Ur4k5Iic z3ku`~&S=Nn56*qO8F-!|kZ;===t)8uiVm<Y^U@{b<pABB#OrtB9^KU_Tpxe;o4$(w zB01y$7HGoTq)*zJ;vOq}`EL^=kw(xa7u-D`7l<A<HT}STd{Oan^2r_Z5y}95SO1Zd z0Lcs<<)ufy_gS-}2CMq>&frXT<IiKaHbcIQ^A61eB)alBK);C<Jp*rtM`yGrJSrct z=~oiCRy^^W7yJ1Ckyv$1Jz?-|cSECrz<i{hPzLSmB3P)YqSBBkqcpUHvr}b)rydm_ z06Fpc{q#jfQG>+eRP#$zRj#qK%9N&CA-fT~CaR)!Cpv~#IZx`C?U~F4A;SLZ<w_-W zgb`U9J@3=h5^tgI-dG6^6s$Y(bU$V8?WwmHU;)ByISB^udShmf-lL)3JL(NaaXYaI zeYfWmYWP}KYEq9@qA(xQ+m2t--#{c9l3`ypBrRb|)6$Ncrd|+xbZ!)xg&ChGkuPJ9 z)~9!`x9t7T9Tj?|e+nt-pY)syD(Zqmk5yMZ)@%=%`mjRLoP~4Sb80HHvmp24<`~}R z0C5M7tcDK|uMobURW9{uZ9ldpp8(I?&2Ei2%bBr3?ZAY#mwK<b)0=-+?z>P>jz`=n z{k%9@75qv%THFQ(C)^PikxbRSo3KA|!3eWXnNGEzmF~}MAF-m@E;|l={m|0KO}WIc zNr;6NmetnZeV?tbBb&6i9;3BsBmsT7aiYUjZc&QHdGVn|PG{QgWo2>ZLv+SVnL+rI zoD%9cr<91I=!}gs%ajD5^URfLN47B$r5PronHp$Fn{sPv>L|Fm>Z;_>NeqG6Yx`y} zhWC;7N0OWI3?~8@&2LLjX?{~H#91<*t~nml7#M5S3^~Q@cwWRXD0(-_GGCHx;cYRM zQKck*_^*$7blYR|sK&?4+H;IT9S4VZ0x2Ft@;H5c@DyCp--t8tW_%ecdDDwd3nz?P zp6m&X2UAI%JPDp6Uw*_)Y+sY4^Pry2Teu<x&kr6TiG~Ge3D)V#v^@hLe-Y>2HCxja zC5VIC4Sjzr#g=Srug_-zHXU}z28Xt*_7@uJ2_SxD-C&^Oyh8wx$lr`Gcip)Fs<sBM zx8rqYfe!<qc1<l@w`w()n@EcglOOIH_VsCI2f<vEXetZl0lz|XYIwUXsoWLC>3nQ? z%XRBbsciVMb|8?>Tf1f?llf{@Dek8+8dX-n(jdj$&fsXTaTv^#bwKZ5Qq*T@5E^x8 zB!sX0$9J2(H;2j6q0^e?^H~WI2L%NT(;c!P-`1na*1X)`#SpUh3s^*>TenUpRv7f+ zZVVbN<{oV32)Lsqi>w5rD!h|$N|I?c3@!P3CIzqqrU)#$t`w&QXD$tsazI<F5kS;a zqIfKTdjcb~E`|<v?5dG&80=Kx;P64@>zU&lQTi%H8ZxMarj``t%C_SJihqfR9-*z7 zBOr&}VFy(~Y0v?W!(WHU1vLc$l?U3R6_bj`nc7XrzhNF)z=w80DPS8m2AvdyY3T7r zO$_gk{muod(RO{thz+RFh0JTLKwe^=rtu+#_(KT<EyaNlkSMU?B){aiWhZY66w{Je z!j-xm{(Jb&48wpDtQb|RmJ4>o;aRBH)318hk_>Q3b`CfJ#mZ+(^a&r3+t+yISd{3k zh)=o&9SsyY5^eiROf6TXv}QqP0i4Mh)%lm9nY=<7s)jLE_nRCA0=u~?g8=*masSy_ zG6S{1mk%G*^KdTEy{aB9km0;VPv|k?=NwBfd<3V^qG(^gC$&{MU2(4<b?L|>oX(qB zi`{kW(BDCPuYnQg<<f$G-qHy|fCvJdr4|mZKU40K?%DXHsOX?XKSR#~zkS?8AL+5g zwO@mr0CSSx8zIMP!1C$*=B&pfnjyJN6?PN2SG0X!d<+Fe(fNPqNRN2D6zAw2C9?0v z6`NP+NlQGSFc?8XC5N<hb+(!LTO&Id1MWoMf58Y`@JwM*R1X@1CHr`}(Q~Q3|4U%} z@MPqxl~v5GhC|=Y4X{lf!H0P#&<&%iO8@d)9><OyK@fBW4q#)n@QL*Q%FG%pPaFR& zMs-)0&>4eIqZ(Zq!oJ?X{`rk%q~jI28AbI5Hq<$4D<jw9Ah_&eN^^JRICRAYY;o7U zd1Kzb*qwWWMZkok_m2jX&=jfwJVR=1w(|?U*1uT?`B17ol{wINB#*<c{U)J6EF}>m zV(@Vgn0#53$qw~s)EF!Jn2@?#Xa*wl3^cpMyoDy=u_pC%!V5^8Z+M{e#kpg)HG>)k zuxb69ep2t0(P4m|mN2qcAn~9nDK|+vb1O=*f?yyCwp&HLaHG<WrIT=jfer@*iTY^+ z&bZ<I{b!#2aMU9V`gkG|-k{Ex3BEkCo>Y{1EOSMi3}B99^+t%-=9jvGsi#NOPGU+u ztW~YAWWq0wZ%}1{*A}N&li}Yp^F(`Nm%=U<a7R;D#G7LC6Givd{S)sie43zb^-ZB6 zQSn}7J`1o#hGQ9n(#!`tI2yl2U2f+f;>9k%c^`~dQ(AAl#?DZ%2=&$e(>AFWo4|+` zyOdf2jb?DQ3s{?wIE$=DXiFAmAlfxC#T^NC@CO*~cz&v9F1uw2KPrLXNJoX0^n<mG z<+^#%tqC}+0o!x^+}&Y+t@;Xt^j<uzchjPO-?%>3Kz2?!wWL{bjA?PBk_H|<<%~&I zq_V=Q__wx*E%(!huT9v~L6uu#foJAHH!Gq4Y_jZu5+D%w8EM_PCRr7T+1Ac6gZBF| zkgUHy2Dq>wQvp{&7Y2_S121MQ+vxgEKP`D|KqBkaq^*@iH4H&EqjB+M6vrbfOr;4x zBn9(Y(uKMK5n-sv6EBdA7E`bLuKUH7Em>*Dyc{*b$q^0Mp3EVkvTeNI;DBP=d);x6 zgI1bj6QRzP0JRYbS?G328oF}7L6hD!RAPpy6W&hp%aq*bi+5o!)0>mSmmP93-|buu z8*_$%&$#-_k@e+BI$v{NSb2gxbL8sdWl^1`NmEzO2M&x8oV)%OX?&W_2<OuidXXe( zZi0rR)^(%8JL#C-G@B)HW#0KKi#!67mu}kd(<#S}Cxbb0CoZBKlGuVBjdfp<GwCZc zLQT2K$p3iIGR5|MI&niwf$(<h0JlQtI>8mnWZM~2sR!1mjJ`wE`1%*u$UZ=m53@ez z9S%!$VCf8+pRgQ^%x77mlMfOcvIiVy6c_=FcU)9vyX{(Gn{`WI&Ig*qwHHH@SSXZQ z5VU#h%6+%5zMt*f4i|~7rbX^4Gau;edLqU2<!JF-)n{5^*TyZ$IvWz`BW?jTTGnn0 zof`4D5hg}Ek(U$!mjHteEUJ?=Q8XPRi+D<R`euDWVsBZ}->AN1k*yU|=4OA=$)clq zF|JVX<4M5a`jheO-!>x&7$K?xvWCo{!TbtRtR)6S&*4Fow`fRiTqb|>%fyPh!oA;V zif{>)GKTWO%|1s<kYgmU*t|nsnsu2+WxJol4RjBDxbY8%^J9G{Q0)N_CYlrdjf#(@ zI>rF|I1Rj}06WjLe=%NZ1dEsn&B7ARTnaLXZt>y9upTLWMyll%3wL3fW6l%$9Xh!% zCMwAXo_5*y@*n!<?=rhC+52jzY~zaY<2U@*^o`=&BQK0uR334@V*0L*c;%DN<v03B zA+@w~-49HkO(T5#eA>l|E_=V6e1J_dj79#6{ECgekVdE&UIyS<w7rD;TrCN|(Ltm# zXeLht3##mQV<2W?2^N5!=u-gZ()X029h`pQfTFo#OorBG|8IN=FS`2SH_u$gQr(J{ zO{K{?2cyITwVyEa4cDICDdl{>IxnVevyFbe{G1e=kcjCr+(i?iBuCu+)$y(H_Lj%> zX9Z-=?oY=2Njf|O__agMU&%72SX$n{a^jQdwwZ755(K-<Xn{-4w*xKy<F}bv$u|h^ zedBj6yD8D{+i?zmCp3Lw(b>k!s=UWw3Z{!py2opnXYw9r!}s)^Dwv7#WSG;Sh*OH= zPhnalB-Pt>zUn23u;tZJ$YtiDv|%Nq>fXycjXj6_Ng|`3ZZ7JbMH}iIr0rX2-)OLb z$#sBZj)23o(18@AobG|20uhL@`ylrc02l*>p{+#?(XY=1(^V0cwV8%sc_xx6V$ble z7FWWjl9{-Yl|@^kJX3=mZud<MaWkWaaAbxl{-v4D-p-Wk#M;b!il5A93+12|2vL7C z+*y60+o6^?<<;54&b176FTXe{TZGVM3ti3CgJsH1MTp9g`gcAw3K4PxFV*VFOSrj@ z#1((IWFutqWMK0P7(O~I0baRlM$w>AC^A&6^25@{AUI^}TNCc2-YXcsng!jHR4gCx z0d%;={+Cd(y|qgx0Fcm8R9+_Kui+ZZh>~@HL6NqmW-!N;o|MQJ_y%db(wDo+UfgkC zp+BGal>G$D?L7xWaJVhVdc{@2Ec-ST<UKM<VvR~T_fHA&(jT?*Mxji6iZFVrL5-e< zYIe-oc#<n?Dava_rzQ3o;oequs28!#iu=-jEAAC|?5;CV?YXzH&9O@3i69^<!Yx0J zSPjhZ`RFt5h|fTafvjF+i`23I>bA(A_2*Z#9P23d-j4PjqKTeI{EuZ<<H&5h1BsnR zW3f`_Q4-z@8oBXS)5J22Q$5~_iBK)#zjV~lR9O8RZyy)e(r;WGOnPRl-;P)Nnh|L7 zN06twdcjV)S9SKz^NX*s3*IO(T!t?nP>g4qSDvqbEDA(@#<V983gP4n&8u3jGiY*E zr<Abr6dbzfJt8-n<{cXlkL-EEbH>3#1JDvqTlbg`<0n@do$GaV<BeGtkBM0(G^T|Q z{71Icsl~qtzf$`1{T13W82~Sn0a#$f%?@1_?Zdvtp4)p>$b8WWDfefkdbfl`oh$cS z70OMVO0s#vmmt#tympjfeo<%q;?T{LG&DEC3)~EKs{?NpK-|>bUZ|3Z1WtypDRGIC zpocj<FPxQOo^wAF-@YL!1Kvtn(>B*!Pb+VrFa*l8#>AcENHr;cqU1KFH0M5b5Gc#y z(N$=L>%oFoO(m$x9!VbiMb;h{CrpgDiM5R>G5Fq^;Jaf|x@I@ovj2^e-Jp2#8(Ey+ ztns{51H`^09iILo?aLy&Z=!1wd;fF}tPXjrBMH*9IPF?1FW$0-c2#GXo5f!ArsHK_ zoU>EkWdTE0WwcMpIWXpR9_!J~txq?BsFv0A#@!eRt_n@j1y?i}w21!-m{Gh>gF(B@ zSJxwI(gZ`#)vEl~yjt6;i2E@1g<7|*c5Xjl*jSC9qnU2&&{s#o-epQEFxRj&_8WN* ziHCOEr!qactzUp@{XY9!Tgwny^kE99wi_f^<7zvqqmea~G|3WA5rfdEK>`WJD8rxn z<wYTCZAKdJw)oTvOe-{?2l&bt)Uj?|Hg_}iEs<SyU?wih18t%kY_7q%8Tcv##HZ-{ z;__yDaaQBSzcA?^LG9FN(uPBmkVH4Lz-$}J#+G_-3m3wx;U?>3li`cFJ65z3h5m+5 z`9)PPMIwOFbFn}vbjrilc&-c-O^Mj>+`CeT2n=O0!F^%CJ(J4VM{eO1#J0sk=uV;e zk*M2~P@$z2<=An!pyV#CBDJg^drE2Rv;TrNwuQ+kJR6r@1q0ROFE0u&>C0Oh#oRC~ z7*2RNgu-q+PonxB)R%jHR}R+y&i9<o1CX!qt3%gSCJy$pOb{cC)Jn-t9K)j&vzt`a zlMXO4B|#4D0E0MD`W9UqAz%W}wvuLvs_~~uGrNm~`0GC{{_<T)G-_G!o8ha<+itbW zUlpg@JzgQC9A@rY)j;D7^s3==C}JXbA5dQbM77`5Qp0gh))KZE7ZK2HP%2cxh#Vx! zips>1yjNVdcQJ>#G?7XFYSs*W04L8Mx6-OV-h|4YOrb;0OxI=q-#P!$T;^Do+dvTX zb&9?K=Mg(_9=W6YyNXD#9cezB3s9)ajGWgt6_`Ph|K3af(@W@Yu0T`FYC$*7DY-OS zh}w6z{fUj%kvU3}DmErTk3D3aJ=pjCS1Q@0YF$J<ecc+qC3Ps}){a_jQ=l{=Pg_i@ zPZtd5Q-&@*)sC2Z9EycC-H9u{o873#LFpSEJ<z&SH;()ydhScfOQ%+Sly5_pr%S`U zOKEv@DE>u9)v5<uTz(oYW7@PID6if)^pB@b&6Xgb$8h$X39DFf2j&ERqE*`Mbu5C_ zjujYtl#uSAyry0Mr?Y3kFjXPDeS&5xst%t7Qnd5!U|yvzw#dQ=kP|ivemb@@E>ljR zT~&`lml9EDVVed1=d*iSKhAk70EP=Wgl{9B)TVu-6g!|IRN_c2^sD5P`5W^_ffch9 zME~q){2!F6C1*MKuPLYmgfPVbyOD>Pl`r^%d8}m+;DV?bc9F4TvpS=yIj(bAjJM{b z*ZfY(?iX4E^@glSIj^!+6eNVK05nBu8I*>jEvA5;WXTw$MsC$5n}srz{pK`9i8pB; zLAZU@M0*)&H!Z4U-l(VPi8gwj32Al5221+IL+fd!M`M7@IJa*j?#LF`?)tdy+G}<a zXexJ-pyk-By2Y$%3-m-07|QkWmN=zLxBglEWD)xK4t6+*%KeepALq2*M`*$(K^LRs zPpHoOamfwMR{A$i7fH$-*ocqf(2kAB%9m0&RxFLk^Cv1IuH_Uf6BKzRBSd^E;dP}P z@XfMg9sQJpkza{XRd%TJLYEdRQO)e+SVJ7}T{i$#9iYeHG}n6J4$7gcWnX>SQbA=F z>b3uv-AkDa`Kf`*k!fzm1y8p&P3lLYT*8uMdgDV&=J1&&8v&*xE>9Z^PkeT@SZ)xw z534NT?pZD*FUr!`R@kU2ORmlH4(0RurakqyM=-fU2jK3)f+eZS9MXaa;;-lO`v}Ye zzsyi5UqEDbs}d1X5%xiPMxc3uRimAG2z}3TS<^za4Ve){p>-QuSR*m^izFx6A@Ryf zMJH+rB@*4!vZ|igGBdmsd!?t@ANAiiA~m`Tgr$qjLsYl2285S!Ov-}K1AuS|<@FMy zIo&puT0$^+m9s)(U$to5h&NxiWPt0=Mx!lRgbD9tb<+sKGtJD}ZkCk2c&1A)^X5&3 z(k!_xjES`I-lWZZd5x?|{$k?pJvM_O6?^kg+OA1yWA&S|ns^Zm9@_xtJx6|kpAg3O z=E9U!hvZ>6fPaE%$SlPCDrKGKR$tgCn(aMB0tU0x5>?yOwquA>ST`b}DNLC6pbP$P zJuWlFK*g#@2d(#{@rA(0Hn87j)277Zp}K4kwEfC1Jv(Mh;M_per-_jl>%Aoxc9<Aw zjaNN3!8{()WKNE1-PH_Vyg%aTq^OEcP3og=bD<?C@DQh;1@FuKi^FfuO?RT`&1L_+ ze(3aMihuuE_|5jP`>`7&>Xn5*Lyble7VR(s33hmpeKn!HdWo8G21}Q*Fg90ZF)JGA z1*VSS_aQ1W-@wL>^sH%Pdk<CgL*jz6&a2T!A6cGtu3++@{L(F58|CKuq9{xL9lZOz z*$;W4dGy1<r^nXOHbOi%`)u~LHM+srkDg4CROUUra5FBOZA?R--G|uxY?>kRI2buT z>qA0N>SAI+mNr9jvbw_>(B<tATJDKJuXNBJzE41V-E;fdQ-9uGIIvau+0KMxJ`GOA zJ#CI$Ea8#{!b9TU499EYWF+%j^LGpR^9;T4YMWD)gUJr3r>;Cx#^$|83R7_=8rO2J z;1iZ>9!y-~9!@U=H*t21lM5U~O@L&C14IBHtMkQZ1KI?-%s}O&;EN(2-cQ@}o0lHl z=!nq<)9KusW5xw2xD~x+1qT?{x4FQ}f^4iOF#aqLkoTPBj{L2}vse!=xWbe!kLY{` z`Plec^*I*VcN8r};$=owpvFOnKmsSywRhosC0tyk6yMGMLDup*6#00&E$CzHJKr|| zNINeLF;$1v)=e>QzaalOK{YT8$gyS4<5_6Ok<4DYxjK_8D(-WP%Ca15jBDuSwYs4* zWTjWheleBW*IGu8E$d$_e-<6o`&}j1c0PyFR_5Wa*H(x+_bp2M_ueOY=Gyyy*Jw9e zW(8OL0u$<ZvkGR`7=~|xPxUUfw7WxFFgx@g-Xu!(yJev)h3O~7LnXe#I8W2BQCOti zs;@|ON?d2T=Wqj1bI&144{ILFj+EVkGB-IqK9ag{=u*39UJ^xZjHS{nlK?v-0dfZ3 z1F$CvA+x3T+g>#WX9JGgkq$94#su`#krr*Irj2)IOacz)Bh0|7y>D~c#%73lXQ5<R zmK$<fMnLQcq`5;z;1r!Wt2d|Nre-MD&IOM}ojKBOaVYuRWFL<9^jIA2;mBc$L8jSn z_~ap}D&yZ;+CUNM8Ewb@y+YH^xI$A~6m837zPJR%6sx7lD^`Xr1+B>&v#{(doh-aK zDih(|-h(X8C>)h+45-rC=f2WO|M-wHk^m#*phXJsn*9ne;2e>bf+EuQT<P=+*u!?l zkd%5^JW>xQa{+_0^M>JdJ0n`gj{4K)hvC*#wuq#uyhY<_8Q&OBPrK?(D?Wpk5e+b_ zehWNQJ1V}+12K$VzoXRx{Sy|5GjDwp80qVpq-~;+o|t02jlo0465Dr_9?4Qnw!uO> ze#eMqA4y%yE<MX*7Isz)EP4J*W42ftzn@eibNXGv3dsr(sJcYKc+h!xqG2I~(Qvl( zuom8_rj7)J=*c}W0~;U>b7}LJWccOL+y1i7JMD&<!xx8;V$64r_o|V=ROk+&YH6&U zJNLOHwqmi5{4Jc3e_~>w+04+3Z!6ywmq(D#X!CxESNP<N(2Iba9g7kZSGGfYXC$=g z8p@)PSQ^EftzOb>ynO&t&D7Y<V99_YLt;gvjWlqPwvP{KUra;n?PfZ$H`D@O@j4@e z_oAAzbJSgS)@MhcQEFfP^Qpm%l+ZJcWvG(UDdwg0Dl3a9-QQAg@S3VrBW;`FHMf*; zwb?XK_@aqn*j>%ei;Z?q-R1V3*kbJ1ZQa<xQu_WRAMj#rH_q@cd%Y<o46Dbz^O7{8 z8E6_J6M^bXZc@FHcywz5k6X63P0D1FgzQY6S*r#81@V<=NEi2FKr?8bo7hw+L!H`8 zsB5V8P7*v<+bb<Oj7`kKX-R_gGZiyFnj46Z<F^P>MY##H`3y=`tW%Xeu?|z}QX3H| z&dy`?z-P-nB@AuwDgDd3l2()R9lF|o<6|=ol-yI&CZ0^qmME_nVYqv<miBwD&7)U0 zfNzd({aAOMl?$D%@ad|byB2gB<MSa(-^4I_MXG389lwxBhrK!d`b;$mtbE4Ig&96Y z=H;xakwXhC#x)?g9><P{N}9qMs)$E5Q4}LBU-l%XFkM!OJXO4|DFJ1Q0Y1Y)IPpbZ z?myM*jzby3d;6(gw`~jKE^P70_=LRl7Qd|gDKCvY@{@)Tl8b!mZmK~yYjsX2XszuU z2&l`X@(TLE<0^pQrMyZ}icMMQnZ^=}$DYlUofwcxD4NJz8UiHo*jp~~H}+8+Vp^pL z4xAQZ#FAb6ConuSOKka}(gRH|c9lV4pA36(`mH?geq&qENdl}shBlWjLW@SU5eM(K zYghyY4vG}w>`II~acXz@?wF6V<c4;FD@AyNR>d%<HgJ#<=ZH}}8gT%eUUt$Hz!`F3 zIBmHeJKprX3#{+8;*!8g7ZAgeDlaXQdt@iZAgp;Zk;7w_D!xpl6uA(N6kz~MDGmRn zP=X-uL+8#tWI76)r@`6byk{oL!A%)clRyB2&(aM4(_H3OvfMxr)M>>yFnqWVd#HZ; zuQDPrl=dyA(G65(<-zmQR<+O;I2iWDP|2&Y@x_;VMgxpwW5IX_+y)oDY1di6`zp5= zOF>`=%AC~GHS9>1p};%P(4}Z|BhP{E(ICp@NT(TU)6oMbTr%IdM$AyM)YoVLRGGWm z<3*oGJh{JM*mes35hLHjW3kfnd1PATYirSWI2=5=^vtw+>}>Hj8M|r_3_$_|I$;6a zWE0$iSOXwxczy)};eenvEre5Otvm|-X&G(9z!jJF|9#2GK<j<>%^^e3_|0dhYEjn? zCM$R-_kC%dsF75`!T-2IyY_o%Q`tZ7p$<~~f>M$t#eU@7MS9I|khEVf*2WQogflt! ztbELqVK+#HOnt~@z9hmu^{J`F_DiiLKe>r|A&>r<3WO{`F;h_IB1IS775{M_WUgp1 zDIE#%E18y-wiQR3k8Ohua+Ptg?PQc4ef~N+W*F$a$3p{Kel4*SJdBQ3&dN*Qe6K_U z!<}`=G<EUVGWFt>WP^2s*VH$=-$nD#x^mCM@)R#QdX*5H(~#_`s9>heHE)u*76qL> z=a#Bb4VeRqhVix&SSYO;%@uWgC$TOwTh&4eMa!1sJiAzpT^F9Qpd+jfZ9>ccy0LH$ zcDPZXX1b+FzH}8PIu;wI9z<o3`WaeTT2*hr(?gui@YSPe09T^9=2ZD=_9%JS(s35| zTx}*G9L=BRg+d^qM<8l;X8f?tad%gHd%|T7g;#~{9azpP{f{?uQ4;Y6##`vKayK%E z+3bOd#*F$Hp*S)cFMn4b_6`37bh!=*(Z7jv&!B;APe9_~u0*z@F#9)#hKO#-<!pz! zSXk@J$5OK@<75-KS<U(4fQJKBJx_$1NJDV=D34?RR5qlhhQ2*b`d4M)rylWE9WVgs zaJ-9$)^Nb|0AQN+Jb2MowAj-af}vTlzmZ*;y2WQu@2Q8bvjoQaFf#`WBO}*R@cXRD z=`~KnWGfl9L^3U*Z<S-z4Ctrq0EIA{X0~lY^(BbjrTYyu#BtUm@$$c!P8(%j&B?S8 zv7nH{&sYgc{<n-;ulpiUgQ`o+393Uw$Mbm7T(2!mz>rcKYTV_Z7B8u~JkZY<IT=Ly zjLK1_X;XDflZ$9Bug=Nh=%w|W9y@5)DLs?A;x{FN^U=kgU7s61HRci1Q(^}Uxe$|X zcq(xzAdrk-mU$bPA&<sF?-b-~RWHR(&`Mn-C}1=|!p>U+_Ot4G(9GU*i=#chU}0w_ zkl(+j(_~dgnmY8-qJ>fCi%dVdJVw$6T55zDYUg_Sq|Pvnx0g?}(ridX={vDzhLj93 zi9x(HUT~n-GajnH&^h)mQ<|n$*G9-I+A7|@dt#1`Imr%GUSE5?k(;J=kSc(N`I6qt zE9N-e6~6k>A=6h^(jt?&KPEvHF@f@i=#7hdi-gXG{!U1{=rN6@Yq`KM<g;o=aq94< zl+yQtWRE@3)tYn*Z_wpw&@(f1v0YAx^B3fX0!C?RK73MLfYNzpG7nXC891$3t@ZSE zVtF);9ybCS*BjZ*PJ36;Sos#rM;nsQGR>YW@dYMgDHdKk-9(C(k|1M^`E-v>D$vT( z&Mo1JC)Ai6kTpNFiQ)7DnvaC3_47C1A<XY*4X@-Lin*Z}Ogk;34mPu_?1>fkFh^PA z8TKw~HJk+KeK8`!hz0rIIxJdWOP=xCoX*zkD<;*{hi@lB`-A|pTQmSP4s~4u4pe%} z5Ef=q5K0AwhI{!RixI`$D%EqK@M+T#a06$2$|lU|7O}QO<mlbmB#%l#$U}sR1Mz;p zJan-5T<~#?Zqr%m&IB=lZ)ORn#N2OY!gnkgg9{1K?*EzsE4Pmz_R9?Yf!p^H?mlD1 zfGC%VM`8h()CjP-!z*9mr@`izX5kcDBw0VvVwhSekv)_}SI!ay{W*|?lDe?O8((@D z5D>}&FfBVfhSb|!^1j$A?u3PQ0q^4`2g3OlXZPf2TU+UhIN)Sprh4PmRe?oxqE-oS zK)WXH9U#)2@I|F7D8+6=r@qCu@XTc%BAW0eyqZMD!Mmg;8X+ZegoNTV5cV)w$Yk>C z;!GpLdM!fD(oWXB`Zf7<ajXhNu8~GLpjLm!*j+VPP%iT8)r-DRgBz)#n~P4&6MM2k zY3xxKuFse=p_{AaoLS%*9W6Rqh6Wf$Z{2z$Oz5<>22jE&_ts~eP=FwjchhC2VJrV@ z#!F@jd~u(#1~~AQ-18OWDswGPL_R+3ZML=h`}{!9ja9tzSmBMM=-`Bv=b^SR2tm>s zNW&!^MV?_s%%rUF&`26vA){|5p}aFLLGK!DxqS%Yc96DqNehUWf<CVb6to2H+8(jF zM$duYpSLzsSE&Qq${N?qso2}sZw-dcZFDKeF9?eDI|F9IlcJ#V=MG-pNoNdjuERe( zq=`}j;5{_1zOw9kUR}zsE*Yj2?>X1hH<}b;F<};(TBNBBy^j96P^0tdRLdz1NqM=U zvs+<Cy~<{C*o?Oq7x&DE3!wyVX7SDTc?4Qr!@e1S*E!*L0<F5DCjxW{YVHI!02}u! zYPTRB*<+Z}mx^<pfP=8!7)XOoitd|9G1<KFy7A6m$=)3rvJ5uk){yF}eF=kX?;xLF zz3%vpt*Yx_pAeOr#XTH;Tj1=sk^rKW%Iw=7PJfaJ!!o!+Y9PyOsjF-2dx*(jJWG4_ zOQyOjDT9lK%MuFZvObgz`EFP>`OYTDh_{3!@%N83BR#9O^o>38N50H83Yd_0ujY1< zczM6noUFPi>#QSmelkvB?_7tUs_4-vprnz2sp2XDeMSf2C&gZsXjIZ!Dt<>D>FUT9 z@zI_WKgb@$=xUG&7vTtp)H|zIn124}9?_@Sem&i0!$>epalyl$!l9{)*Z}|_h1AHP zw3M^)ODITr<=FfGIEw#Con*KswNU^rma{3%kv%i3XW^&NxBhR^++EJ=x@Mrw69)lS z?(+-ItB#_dm<%ok5+ALv=Q?_VlFsDL^PGtcrFR)RUDyB!w9iu%-y%P?xUY16J`Yp} zFCIF~=0cCpTV1|u&q%fP+?N76p4pNggw`|yXvaDatE|^6X}_6GHwmQ}NU%NOuoZ@1 z&-m$KHHR6zXY^Mb<w=P!kSpO&;2drC&>h{l&=o_eyeB5iW5A7doe^)n>=HqG*?ynj zT~@O@^35)3iA`TD)ihtz9BxN5BC<1XaXw>Rt)1SxJ9&EVLifeV*>UG|7H6Y_U$Z|4 z-$qQoo@3-0Fw1*H!A)>j@HWF|PB_{VlL8UMaAEs(u4W0fV;rng96X9e*9;`#{G`4u zzUllkHHH>3G~^+9&sfupHPV0$=qAmU55blmD&c6Lqa$9)v_!ojXcm6c*Nt$Y2K#pv zudb`z<}!jy;!!DKsUe{!uj-LU@=}xbO{_<I$TLPZK$=L{J+Jt%yr#xq9ZFA>WeNTO zrDo6JK$<-}cd>nf)p%NB+>EeC?rw3lA6wB42F>dOi>}4D(`_0WJzO^uCZ56xhe5Hd zHm!{l`Rlem7aBI!v-LFJPg@QyVhLwbFAj!ZKSU$&?O~~RIpQ0^e!-xrqExe+t{l-O zH3QA2H>z2v`Q@L#ny6J5n~oRj*^)Q>l3|TstZBxt^5_aXSk)n=SMZFoeHt`+ykpg< zLsgb=%8}rQ8S{7z+KeLCwKI_o7qmPcoeI%4@nLl<CF37AjUT5|%lMn7Uz1}hE~Ejf zW{Nc*)uFL;{+e0W{8r(g140^bIF`IpPIBp|0j_Xwm5`oEy!Qpe$_qEgs<%8NSz)LK zB&&KYo7E_`du;#83Uo{!@M^Npw`w7#3)*Xs0%6}9L&KCsgQ}E5D~X!GY`H)y|Kqt# zt|d8gAb6(~r9kzIebI@d|8>kfs(EVuWaSco!(lGZ7&B}E{xtG!eC4rp=0^C;PgHdj z`(S9bIeU`T`gOH7*Y=h}*xI%3(A?L>CCAcza~2DX#P=YJ$yZH$iVllYR%-#uR=!M0 z#LrxS2{78YGdZ%IPsuW6jL|$xsb{(wth5TdRvpR?-k5qQTgHLlHaa(6p80C?&uu8C zI>v<;ZR}!$)j=c&k&p=mACAycP8h}(<R9dyWN{9TiEJxZ%Jp|&PRO)ZS6v<^h+}|K z2K9kjC7d_|;}M~E=heAI2aGATcO)}!co!|mtYVvSd#74H83I`QC~h}3Nde{QzD+my zYKj5^r`Z7>?g9@u&Pe16ogbxVBf(QD%qd2Q?dxLYls`xDD*d!Q$%qOjNl=eaxj`i1 z_s>46y{K_9JMHBLr2)7J`jkiEQU$wFF-%WWX>n7NuEaQWrV2EDvQh=ry+6<ybxTgH z9Nv{xQNZsWho4fb+!ixgH(XKGR7P{pmjQ+ieK%1R7W>D^hCInET-uSMmoV^mX(g0; zqe$T;-Nzh4&sLNLZ&J_NYk*gODY%M<bs_mK?4&c5o}s(gsxh!TJS*EFm0+`Tq2-s} z)K<*XVl{EZlEB?YA}T&!#n(33Fw*ng<bRrWZRN?33;Dq7I<Kc^$n$^Z%$J$^#As(Y z`6V0f^k@GF2B^&h4lPMRnP=tN!0||qq9EH-jUB98=GgokwUV_|YaoGPIVxEjQt4EW zZgakjg$T(0q8r*39wQx4(=I%!B>k9f>{rqfKW0%)nGk8H2xg4Q9K2?S+^}oz=L<RZ z{B+a-H-@tz4N(bqk0~^H0K{Q(Sbm@X{Uh0d)qFel(#4Asw-Ud|NBpg}A*rbc+z<)c z+Fp?yc*7cr1(W6*4u{i*su*X!Aa|USL`(R}CSg{AREUmu4W@j+44uwTiqc}G-2Z3$ z48D$l3zD%tkiwL6(UCA8Zfq+k&mBsRZul>w#J}6TG0l7wb~=Gr8~jWmgMGf-8%oVO zpJQd~3^cUawFrmOf=*`6hp`-d+1b<LRdbbKp5Oph@N13&;~mdDg+1BP>hSMOF1<lK zW7R}^iz>=@k9QGk?;`~lR!nHi8z>s62a5|uyg@ck_E{7G@(A3W=+V{69f)c0i`6Bs z7S{7*+`+w$81&2;0e;@)rV{<!ZEMcV&Cttt(uh>yFRINZz;J^lsA434n{2sp6xU8d z#fFu2cI>g3DULcs@Av7R?g0k;jRwZcF3hm57A!P-jX+P=$`a046=<5Qv%~AAwZ=Pz z@j-#Mvw;r<5y6tpf-G)4gJsDbs^-XyAcuRRtKj<SmV<BGPN%P=kOD7vu);%`l<xS< z=|D=58hK;WU^G}o7`!FCYAMBa_ny6F=IUU#EUkTRu%aWt8-;8d?Bqe#929S&hWwDQ zhEn(EC~-;BxeG3^>4~>ovE8^8+V>5zrnGo$J2y53du-leEd<og+Z)gubzn!MMYHQc z;_x(omxLMapoXLp{6|+{V;U!al!?L)O_($-j5%`y$KFlq<ZHJ}btm*a!sHH77XNG7 zOjLWI-6mdSNAik0GTM#fRaAQ6w++yUn<XT3i>PzqO{B#$Z}k}bNjK@iZ9QERwNK9t zx~YhEO_gi~`s@hPV=CO)64Z2RsyA@X9a^_*>9})wCjH$mW2Thl`nh&j8rm*gk8%00 z<__KBAGF}gVH2T}bm97JF+ttNH_;}u@^OtG?Hl$(bvyw_AX9jO{eo9j+j1UJQiMy# zs-2sGj`|jSfANwF8juKp`v#{eKVK$Du*$d34O>YclmRPeuQF2G3p_RI<<g=*?%W-B z0cD<<xM)kz=EgwpO#bi|HwNE?Z|x@QK&&#GSZi_NI~)#`xg6h1sL7!wXv7I;t)ovS zfB;}4p?j+D$d?c~cld>S>odVZsG-M2X-^S7Wf6vIn#l4B>$2AaM~OiI@fEnNFjtKU zV}>)cUu(tkIt3jg0}rSe2e2!|=?iFI3q99+@_RmZI8*Kw>Qvcnu$&9pg~Z=8^h`P! zzc(D)ntkj8k-HnqqUF!?BHqZ{89I>l!=RRYQH_~BnM!}VUf8ivlR(W{uL*0S34Yai z4t1&?@az5*7~JX!7mQL|luPH`Vos7UoN?F4mr_KzjRqIlonN;7-eZq(jxQ4R)9kGP zMG?i_mVts(Xh_XEAoej?VXT&=gia~&G*vM;_ONGnw8X5wQ{>LJImu#p!;p7NO!Ujp zU4=`>P$#^E*iPKBc8_X4W5{PF1Pfa8mk5_H;$ZaK3y*2MD`)dZRV4J$2!HN`O$+3G zn4<9ZRedx3S$ho9bYNVw;v|lj&y-+MtbH3_h2HF!R6R>>`wd1K9j7xt`aSS$pzuDE zM&3t9M$dgN*t3HC%(;j?u!e47tHVH#hhJw+YVyy!&GeOY!A!XVt9+LZD&(pJha=Gx z9FW|e2*+%pldtj~+S>42La5S@E;aZPy^t&8XK`HHNfcj2FK~0rkvRKR_^10m9;ug+ zT<hPdVz}vuIP7{<<Vcc{=Ym9RPMYPF=j-AqGxq4UZR%}5J^bsn9xKl^1^(~*-P%qJ zW4n+5*BIi^QQja=)L<!Ik&l2Qy&_Ed&PXUa^FXWacOcaL$)QiPr$<`2uQdI<%KSay z`~iREnF(={U&<#jIXyOFk2H%j_xHA8yK@cN(ajMA@*1zDSo>@ISw3m4l*9W_$C~}6 zwyuqgvXk&o6+@&K_G?7(!VJ_YPZLven)F+oqSHh7-<Kcvll8g@cbGr|5Z5?xBn!e5 z6&weulMgTeWk9CcX1p;fZ@+bFP*Xb1ElD=yb>2V@SDs_L5;#4<&mbhXGTv;%8lQ~6 zVDI?ruULdxug4;kq<3K>GMY9*KTNW+2Th^4o=nj2tpDxo8X7~jx|OjaezqJ}_Qbw= zUgnn%W{uCEwK5{bVV$NFTCHum*uF%ho7K$YI*<D%T|J}JWk%e$=^py?QhO*sCXa{9 zc?Qg#EJ-2Xj`()Xl@quJwzV?n<tdn$RAtUIvv^bW%OgA{+9R=XvQPLQGfNX;RF4Gn z|F+&$^h8d8$p2qbS}M`A@>WK?zQmZ7r`ueYqJ&U|B&F))YR!M4h|eY;<PLKNTZq1@ z{H$dU0<rfjeq})g=W{RbV6$%;VG7MxVE0@kXz`%_&_LqUFULE?&%R}MxvNT;kP07@ z4K9ATb+)TJf)P*zBt~9r;@BwmqfKgL#Wo8(?eE?y>GKwWmZMUZSP9cYWNJl-T8I-3 z{iITifBGa|xE`DF{jCSYX6+BwmjB_`J_{-+pk!rJ4ZTt1bAm-aYZ5A4qlXIbQ!-wM z5=O`|1uJ#^TyCatT(G!3{JDPxz)Y#Sh<f;_OJvb;s2~QzpCwtgW^;#ep&uW)wKgD_ zL8ILmhGTVij~i-u&o}OR+<?byEKLfZlE<+IH=N$FX!SN%I9-l;AWx3?2>Q$S-IoxI z0s}gAvy5d+u2n<#(KuXR%v@v(J{$?$^8DSb@eJ2ABCMH4HexodB#j_lvF_M&3fhc{ zIkJgIUO*CT-A)3sqbG^zKzwX%hKVO4-Euv(q002+#23~((1nhi4n`l(J*j_E*~zJo z9Ws^is*9w}b)p8%!lX}<AJ_PsO}>)+{9F#$u1k}TA~uv`nq;fKY`N&P;c_Pc7(Qp4 zNuQkHvyGjMs&LkE7UL_w;ct_l>D6Gzam=@uuig8>Xh&6pV{Z;~mm^-X5V*tcc3GOj z42S9lbZH#l#1o*Tg}OSW-PO`=bZ(N-?Kh{{y@aCx`q;~MpgD$H#4+OzB2Hly_Ia{A zw)ugjC$3#Sf7AFyJB2ks#ygTC`2`{sFBaYh2z;{lnAv4!WLNa$Ip49I?rB6=nXQG{ zb=o*6ohbi*p3B@?k{bwuI;|K7h7b2)57njrDkBo}DE%F5qZ_Eo%41OpQLEt2M6xBr zoX>zD6|J>eSYmKEVU0-zOZ>z}RQtWmr}cv=ql7RR*Ppa~Fx>;3ECb&4|LI=lXhl&! zu?BQ!`QqbmLJGHCG;sj9A-fJY%(R!4A$yXaj3a!34^KpU>RV`m7UdKHHMg0gvjX%e z+=L_<u(8yeMciV{ywZjX<IU!ecZcI)M4Ou7&tQHo)P+<t4dbKnYk7V=UDfyDzdn;m zzrLBON*+^G_@1I^u@95$V-7wO#Ob%;vapDMm%pikYCoNYA)UE*VO=LUVlsFa&KW_N zcn76+KqH!_3GV!YhHzLOj838BI@jyI@iL&d-S98M8qdOxWlPz?2v;l4tqX*M?0^lf z%adj+CL-lzhqM7@v5Q;G^icf=Ane#_`og}<Z9cJgOcxxB@W}>@>L4s>?3jc|q)|bc zo2bqh4!6iGRw~{FEZ-gAEZ3=RH!=Zz?N6GA<c2l`k`~w0GKfNOEu-2pEQ-{!1-ZBb zwX4_!2(X_6*L;KSg->_ePwCdsYdCm4C35A7heJJS(*hZm#-T^6_&xuQf_1eFo>(9Y z>j`hPIAR2q)59Ac)@vZTH=auJa$X?PHe|aUDsn&<KryXSUViVW+dqG`G?>D0-zw|p zNq=LxxJ6q=J3dKi@3FLPsT0gF@78uU8oglHO=&N+)WsEUA@KlVcL0IHy*F&2t^LCa z4U=QT4=XF2w6yGUtXSc_Xtb{#zIJIkWhXh6&#slvda#j(cy!1*N7uA?HG99{?Qu^o zk0;3GYaEs3G5%Q|90pXcWLjV7M@FpL!JhiI2NNyDJt4G9Q|*wlvZiz6Z^(jE+rl0u zw8^BTG#OV2EJ`Lw#uGI>D7%P~I(u*h8tjp=Re#7~n%961CW!1f%WaQic!DeQ6?!XH zi;9Jrn6fCxKZ=O~p|z0Wt-<cK1RPTjMyZDGfv!6)Iwl9Iz=pEqjnNy39;}^_>tS+} zTP6}l&CFtGGqdUWi18hdH5pBRJIoVgQoo^F-#b5hjx;oMnp>`?!u`w2PU`X%FcAz? z_6$qph{iPzB8!l`d;>k$Ab}!f5V1p1+o`b*Q>zIrM2t>^?SL+48UjNy?D0lZvGvtd z#rMI5GXspWa2c8TL@9Bre4&S_h5n={-4}3|9!z2|c*P7O53RcPjbBnk&3meBYNP7Y zgz>o1;OAd0lxHaZeRt9Bc~t!{J2cqL!8mGZOFdL=We39HH@@K1sFM7wu+b}8Geo&0 zS|dM0k0#0TqR5izu0H7;@po!t0~JAyJJe25<jkJeqPC;X6aqKMO39}fL(rl;Gqe(# z1(V2;AqFG{fZF>G2C8UEXzyY)#m#ibe1>R9fkC}PsYQ%9g!2H9g}~V!hnRM2CPi)x z-%>65h)e0362lD_6#RSCFv~hjsD?P*3#CDIii6cAgC@mvNi(sj#}9SVQb|7DhEG1) zje897_P9VS;=p|Dri0pXYec0uzMg0xFAUnTb$%K?rX7fEn3CKVZ5Xi)Tea9drm+IL ztvE2<F_nzg=F_pM?GX<<sKlPy&>EWCMiwn1_Dj>WuNmU}<YdMh*Nk4TUKI0ObaS1; z4P4j}=G>8_)ZgRnnd@FkIPT~+_y9u6Q3(V{WY^z2VDtHV(HZ;Rfb{`Mrjd49a>AKf zB7Ota%r=e8{NQ;*aYtE-D%4Qifp^S~ipFipC?bt743if}I^i873Q>)pu#E3x0##UJ z5d6&ZjxMM=_hhu24wU*|jFbFlO6oCVSM8!xCaJ<9VOHkmCTW2=k{JVsxovW3<or^G zW)`EmmqXuS2qelep*(Okh-Skpm%gxAk}a>7te;C~7ci`bo?^NL;mt5f-x7lEF>jJT zndxFWG|O?lx}{Qfm?E!fb>z&+yJoJJXe%to0_Wy*Rg=LpwSaPsPBqQUmQBnYN%T{x zuEqmdrJj_#(pLb=LKkZ+aOczBm-uJ(_+6jui^Vj<P}y974`GU90dkBuqIk23vCzO) zr`Vg6`KY8C)246XoRVmjt!MVE#}(A^!j;&X9p80jWgn#Z_&7jg=5PaL5vKUf>DL*1 z>3wrN8b}j4aCNd`^w?1AOOd)^&rs>L9Lk6B4Ez@GpoEN2ckY3Gqll1<t>*#kP88(C z>ei|zVZVg$&LyfUmNWo*e1dmv<X?fX(3NkuCig%vJv%nA7zSD@?lpi#q1hxQ45Po{ zdv<E<-Y2}a_e)f&;*ef{G@l%?8SWrE-u9~0$_+(-SA?bte5d?dpM8adY6$detm`RM zYbqs6972h$jmp5~EMNfaYbFwKe@$|kMBvau&|lP|`QGIj4!>{IqlN{5-<JXUosAYV z%dCJ3VTb6_q0RzWuwHV{p;uo->?U(o=}J%kog#h<%$e}_<%4(w7UaL?l}FNno4DKt ztluSb_)Ht&fiE+)ZN8px(}yoZxE><A@d{b^%6I%F#6fh3))$N-aW0$$*{|Re*Y27v z&W|<5*9w~{X0yVzCrsA93~I-flN9B?<+Qtx!MZ$yz1`bq7|MfGR0T|aWrc%9R#=lw zJi*Z8`tB=PW@V*z)mXKr-#5yHa_Al1slHv$%Rj1$j8S&wye4b+rX|56a_+aU&rroz zWDols|6mg<wLL<1h=c&DMQGhNSL_LE(xeaBt?J9S!Y(W6fu`4EgkJ`szf6BVCtEt! zgL#1~T)98;(hsIAQpax}x-e}_L+(sOtiTHZpjBs9UX<aNAV(Z_<R@!u`c$hC@;|O^ z={!qjsz1NSY;kmD<}u%Y1r(=*EVf^K-Od>dBAgV;yyu-%0Of`V|N7lWQt`?={X6~P zXMkgTf`vK%U(h_4r}pzdDe+x-N)vKlAJmUDqObS4IF$Cf)zk;wUEwpVFbey%U8-OK zj_I#|fJ4d)IBNR9H61QiM)F}`cDDzZC1Fo^0>&v%2u4NEl+yx)@$6_&y~cQ`?hn*^ zq+o%5lSg%CP}>`h-vG_)*JZ8thyg+<+ZUO7hVvTJwcjY#^BdR|kgMiDZqUTq^gDjs z&`q_@J*06xqQ?NVazlLukw0{2@<&yhd(3kS!#r-FKwY|1k$=?yH=4WeR4JpWR0_HH zh9M-{4DSiwwI8pZm+IuiszS(`3ftGfbJ`=;Cahx50%RSQV3mAJ*qBmGpXo2Cg~5k9 zz}>V;ZW0M{i5>`4M+dgm!VgawsPPXD6s^GZWfOX`(_v_@M1k(p6S^6}0sTsZC44e` zMf`_or6H)sln5QBz4;qAS~NdlF`sw7sd|&mqoGW}(dKgN`ZQH<LD%lvu+}ffB)mqH zH}exyQlD%a++e;r-wuR*Dcd(FtCA@Wg#^SC_c;T%!g=R`M(;2g2ugqTVVWOpAf!FY zdhSEP(ZoMcD-lx@TOt|Q7lfW`Fy&J|(%(pb2D$O9R~o%^K(TFQYb^P#qub9zElUiR z6~GuT$7{xCotQHz-|4Jx6ynyV^$vAC=SAKtT08Av_Zdn4Nh<_ipD&zO30g4^ZXy%a z@PB`OFT8MQOek}Q1~`?%z$WMNO-+d;eq@?*bc39{OL|MpOq}j`TEJAjB3xLp+Jdbm z!3|ojapRSjZhZe-03eB5SKyETPd|8}D#I`2U_iy1_2wDxjB4_{=9PZk`^=`}K|rxr zfXOs4OgzOlw&Vxi52$4M(##JvCwC0YK({=KR~ZDK5#{LDj3k;w6H6kAstzX~#~buE zZFT1Ga5e3M6KXU$x+I3KX(|QGcA)r)aIeHNokKBZweWzk>&_Ru?1;H+!yy0BTqf6Y z+&~b#%ZhPe_^>ZNN&a6Ikr<vn8*EGiRav=UOv4}sIj(DvGI@XsgWYDH+b?+-{q}j$ zZ})tom(&|unC>3kf1e4D>Z|E;Q6b~yO$ac4j_n&L2L8ZwO7{84i!zY;byG3(>#g>} zgsb0pR9ZirgdQ^J?bUeOTN7=YF+}W$<>NQ|BaJ<Ktb6aUGmzV;&Xg)BF352QSU1k} zVg75(t45Y{Q{2mGwsY-0(7DIj_)++mm8I`qpKXeO1iI0S$=aOXaa6R%u;UvB)ctoF z+4=gWCW8v}^N8;nJ2(O$Y*mmiI8O(of;PBeX?8d+*#eAwmH^;O<kLR@NkF#0AzkE_ zMv^K>1p~<^YC#nHqe=_wMOh%E&+zCW(KUsHD^GqGQ#%09u&qF38FFDvs!`(2F>A@9 z16HLBtDaE97}^d45rr>Otj+WNUw4Pdx-zM*fEVb9y_!d-e0Zid+e=I**h}itnP9wJ z;6Ao+vm*Vy--6q#2c@85VAD><me>wE$Ty9QBiC?_^=O5>M`Z|kPBqVuU3Z$o7 zezSvGh-lW4?7|KM4LzH!#?a3u74m0==cmm__VI?um2x(#B+O6B9Kc`#_X4H)(;5tn zM4Z#qpD%mi@rD;P^#CaS>jm!9&|^>33@pu@JuqSiz@PpW7i6Q}Pf?%R2%AcC4_%lV z=<A^%61rxE4!8J>L^4hdZVvQ4nwgRl=%tsX6)7eI1~YFC<<~Dtzg_5+$lXMHfVVp! zI!DUJ!)ajEb^=yP+bL}a<&$<U%~;ykZ_CInP&&D%(PdCWoOCo&Bj`ZkdH>)W-2u}r z=K<7phZLeiJ9vi3fN7@?damX0=He(C|Ko}R;+R8$*XNxmqSq^)5{hh5KdIt2S7wyE zH*4%nk!F5e1hZu1j!5rJw?DPOD>#DRYW^;530fm(!UYVmpOS4`8tho_{Er51QRHPo zC@P8+febMWi;Ko05)cQ5F3eB=0saPCSTLSJ-;s&{X9AWh4lV?RSJ(s+)ncrb6-D6R zyh9|&uFg!ma^ey<Jri+$wlXH0D`|Wiqv&^ur349)=+Uu~tS}y|cr^!%&V${a%VRls zMsR0($ZyGVmPcu~d{8LQBk8n*v}+Hys+R)mEI^PQsC?ZHDJ{!<BGD>VqJZxIkR|C@ zP`ccY<jtE81p1opob(!)j2f6MLlZcng-hqyV>WS_kQEyUpls%uL=$7xktTX6RP_&? z>(Bb2Tz#bKVMRfbi7h4tr-T3bI4jx+XT?A@gb?3#np!kpCSPcRH0fOjMtjkjNge5W zCf3+Bg-!{JH1j4C30o+NGWkJ%d~U;;r-$v)>dcu?7N%%KT{;=#zkdWCa!l>HH=<~F zj}ywC1IsmTZ3+?m8G74`B2apo#zk!I9qG(~fI2K8pEzArC3JdxoxU8ZVP`QTX-rpy zojq=8W7^CHQeoG4W5^}{&ZK8_nA@eWW8jJ!s%1^oQK)stDp;gHb1bVc`J}qe9S`fv z3^TF=Bx=!MZMv&WBkb0N>DrO$8+{J5h2y&;E&J=d;Rd-4&E>i3#FXuNB}+lF(|*V! zgv-E6>3SShkV1B4RCNImb2;(prs0L3(7J79mtHY7Q$(|$>u<j>1D1%nf+0oK=)uUd zSEuz14lRr1l${;>#Q{ZW3l2`&eZ$YV<Gv80tSJME)XiO{2TOM1w-r88m`PwN2>t>- z_pTlx+yOU<h4S)SNJ{R^n>2;r=C95`H<Z>*WNC59L0ONN<-AZ5r*r&x+_A07{c{ZJ zoE`(14h0iAwB^tnFlzAw+kP<J`^GR(J<y`*AYxE{l{cQGWmMEphK)MLfKC<Z=yF;< zG%1V3fq8>>!I*sPG@?+q#);{J)|<~AZ98Ft(bRSWB#L!w=J`JFM#)E<+6s>O!g)^4 zXt%_7tFd||P+H(SltHhZw4SM#QD*V^M$hD%^PC>7CYwD@B3H=7T_u#U<*0LV_AU!V z`xid6Hd%0oF}9X|J2@pfy~|3D(*Uo8plwSvxSnl33%v5&!XtDoI@Rr9?Bv$6%e2m| z=3oEBP8mQ?O@R@22;#;f=+l`Pf3k^uJoNM$jGm0kep-E6O?Wt&po9atzv^gv!o$$| z7acF30P-@a0p-M97(fgjMi`JnKtZ$c4n`d7VSv#_5<CCgmuObxpn*@$Lk42QktTr+ z_&rT>Hbt4HlKr@z0uy3oLJ!xMU~%&pe8M0F0xBP=xor=1z^2JpY1Sj)?|Ab@@&{9J z6hU1E^_ed&dT~#Mcp>14hYhxFfb=la#z$$52+6c1%h`IGU`D-^;@oEy%&>a%<2>SZ znlhDBL6fn6t&BAEQksJlx1v{HJYV?id`MP&OBh~i0f(^i(%xm(H7NC%2HC;+8;z@+ z<wVec1N`9|-t>MhExt%Vm9D$bV1t`uP`I!6xX2Vt$_g##=J(Y2sp{BMRV)&sIeDh0 z>EN}M{C1rugN={l=6oYooAsir<zrQc8S{qEgx$Go?V4s@f#;52!5o<Gu$vSd3am|v zoY~{;8Gzcfw2OD5#=Hz(x0fnfaxhe>F-)0FvJSdb71iRG#)I^o`BMw#RtBYA=e+MM z<q(j7J2z4yybDOqaMcpnF+A{Wl4*r2&{bnD-SO<iw8`_|+H&%Eaq#Fd*})P#0@H9? zc%NrV))hOx!6P>%cR<!qc&<?;M>-5(@gBTk-9qEA$hHE{&iN;%f)>?~887bUAvEhp z@u!{EOnWi4C(&(p>^J01;PS$jZ7BeaxIP1ft#5%;a_xF%Y;lbv=L#h$=R2Z;Jku4% z^lLClVVh2kk^Y*4j=e47d40YHC7aW#>`_@TAdGC{IE1**mkJCF77IJU?ArxBKyCdU z=}W6sFgH2Ku<jScDXgFfEJ8nDOp&;+Em?(MnLP~drlq;zOH*UcjU<?hXZ|uYHJfZS zKSJr+P7S27kym!YBnu7}zq=h~ipP+Hd!9!IkUf%V@n=xV&JkGPlnmdOf|lcg!p4s> z=J)1oayV1Y5`5E~8~UjG`%<^Kn5qh3C0VITdtiezjV)k}W5J@VU{<C*pyp%wF@^j1 zj$Ah1J_u5S@~!=O^QyTocBYQ!%W4<y)|gnqhg<e>r7~TEcLLOxN8Jbh8i=KkBev;V zX#w8IeS<2Mku|2yu^g5E9G;V|C>&LFH=%%@_U8>=3?5%$X+|9C;JjmbnSG;B42Isy zcTSIGa-SY=WevsezQuXHJ1aXwz=}S|s~mlNIyd0FnKdWe>kZnRF2H#g?A4gUCZrYk zH&`eplf%i0Y!T{;ucwW)6G0C(uma*eK+`RjcTCpoxl70g*|O>&x#L^YiU0e14fDa; zqwK8FrCr|#OdB=sl;8b2W2?BbWpqCo2<3}hXP^D<gSq+S$~UM|*qsUsGv|DTX}`ia zUUk0ml~i53e_R-u==8xz#fn#cZKqos!}e8<rV=t7{J@irn)O&IZ=kA~qr829<Fvr# zFjcUb08%Rhpwa~%1WylKVG?g>S1@jwqB`P|yMWF7N|#sK64sikuWGe>a3=WmB&^Z5 z<*%C#x);WI?)@91Q}-LApUUB_sCj+ER;)Ruk$-psI1sD-#`e4sZJ9&&nIO(@xcl%_ zTH*HQALe$U$5qP_^D(6~V(|MO{gIpW(UzC$TDg$X%tDVShQO#G#3f%f85rQ;*&wtP z*BQ<mS<pj;9hw1*Q+;6x6Ka@Kd{fmj<|Ef>ubHa-1WW?9i&n%zm7(>TUkY-w$K2xS z$KQZhHCHXvzaw_hf@_y?3FoK<3{=n5Fty`<p3CG2ZX5`Lu8adz5I10y{QoMmz}<&J z8i)je?&><$6`2(?{}@dLzN&+j5(s>tDNIg6RhZrjU!@Bx%f5jqWXYZR9^Byb`{qju z@?PO{#x*!bT$K-GGF1xav4%>kM^MGDrO+C6_@Z4|ia4wPQg)6cET|}d$?_3=2t|3{ zk#}CyunxJmUW2eHBi^O=&rt{v(-mx|+%qEb-;`LDdl?pkMO)jIE?vrkRqUP0po=kw zEd{ITb9M+2mZ+B<-n1EOOJT&IMoHJABUBNzQk(Vw$xnx|KMA;a-%<Pq$*jMzcl<rC zW0P=nY_}J0t5<RG%`#YQ-_h<--l_f58VVh)p%9Io+`)nNaku!%dNtf=RQw=x+%=p` z^}P05%GS^s4)BA=7|Rw^(A1>Q9d<KfZ%=f>@up}!PW-1+Hqxd2$o7d*WJ9EWT)(c# z@ZOYi(yo(v(2dha+?swp0|YnsnM0|!>K~4N(QqBVNsX>!t`Z60uX1!e@!n~3PiB~0 z&rG4em(o=qh!2h@8zpubQ;yEFCYDS%!Pv5mLY1Z+gAFq$b`6cWw$W!9OT-|(+}b3J zgVBiopre6}1ARhYrmNj<x;h*hvka<DUnn_9GoKwQZ9ZGcrJI@WhQd{|rQYWFbH_7n zcz}iy0o&(24T*cXg4{595bqxoAD6Q(J4wplwl>#(#luVtRf?%8n4QE_>sJzFbrOv% zHb#Q132)9s-OV8u*H%ay6>r7g=rqI7$_T`HBi*g6I41SCm}bG=YEOV5FTx<_CzsEX zH<}h||1@)Q9|O#jya8&>cgvlIo?X_@8+@%YTdGZC@>hZc=Z0Vw1GIqo0#OarnmT!d z8;Sr-Zb~&_ze$an<9&X7meT*4Fz6x*_eIxuo+(}+XhL=hM5A&VvT6I7tnLUWm|-~> zKFJIo;J(wdNM^4<;V1OT5qn8<dA^GW7o^bwMd|s<Po;0vXPWaSKNTFGrwXRJPIV5G zIk~e&uw!>RqB`wu<0q|)FC1wu>}kO%?_iYqCHG+O$JQtFx=#3&JjZfqI1oi$FwJ1V zJs3~J75przIhmGo<O2xZf*ZO{6n-AVKJp2pp)_qQqmLcHmLPl>Lz$8eLLsN$K+=kL zqN<*ds~n0v9N%W62cYS^Fv`uPqpV2wP{p7Q*AEaGRiB(sF!D?poW<q&0*t^A^BZdg zQu=AP7@A2Q*AHrCU@B;^<?K3((R6-1kF}yo9{jqsj^$Z?83ug;yq3AL@#r5QY->@I z=v%XK7$k&(PbPZ)^md(Jss`iG>&=r^TOHzgz}>uKEZ7WyM9u)JYX))aYbU{m7n-IS zJ{_8%YSz7t9Ps0DR=1I%1R+(Z3Ui~%Wan~c0Q7+<`II^2!%a!7H!bqQyc#o^StZ?I z)Zhs*>sgwe7n4k^ZQ+eB<FZHZ(ai?8t>P0{6vQwjfhTj~o{C~(N32Viv3vPqpB zBTZ*q9C9;(;VyZ@>o~g{&TJ{ot){lqYKhj?GPst@GS#%!QC=~h+BI06*)O?%#U${D z-wfo=8^eEbNE4_;>R|yBl4`1z>#h3&ay_lC3|Hll@(<%g1i>J}xHT(yiL3w&`ncd& z=a?0?ZLqJ~dXAyh9Qmp@t{?@b&$+0QpV5R4R|Kz5Tmkj>OGT6vp)t3Vd({i<fvIN- zTZ-_PrAkC-E&&_NhZ3fEVsTeyVh{QDxWLdvaK;<<d<23L<*QVH-v~BX-8?C>Sb#s< zib##5y+;C@)O`appy~oO@jEXqHtkHf@vZX{s{7Kr<BXQxDgN7H4}O;<Gk)I?1jTdP zZX62kd3MR|rV|H4Fp^N1M2!EiFmdF|QUSXMlT2IieM2MYGem*G6s@7)`-HJKiDp>_ zgV3Ntrb#s}&RGiFU~y3xN%9%ueMICCx7T!_7ZW2gl7@WnKStd}$%@4snvPOFo$HAd zRctG4Udd-D<{M~IRAcBM1FT40aC7{2(JKBTW%gvC;kYsepeL+7^6U<UOboGM>5(tZ zERNmlm!;-+ImkyM<ahnJnHU7fd8hB|oyE;Dx(HM_bZSH49~NZKh-Azvm5WBGT7tr+ zDI$#NBu!9@r_-03u>~@5|3oAT#_-W_-9NueY{NjxsV)ogk&z9VFsFycE3`x3z^7+x z+BoRhBl&<`xY~rmzamNjmh$PpVfB%Zxn0_CS><D`!4<%>+?83TKoNn-=bomkj&5j= zstc;SB^Xr23g|3`LZZaENyF^ErWwYfIu6qGiVGXG{q63%%avI6N07~gii(PQi@^dt z9rcs8R}408!f2swNR*kdDd9`8V+^uOQf<VC|KhAHX<w=W$PJtay;j_Tw%*?`Nojcp zop0WeV)KBEw|t-(7&#iSs3mcAM9h`M7V%^WBT%m>uG|?IOKF{|*#D<#pMvX-_8Vm% z-Rjn96@hNXrML$wgEcc0j}CaZ|Flt?{-_2+YfGVu6jrxp1GNMRz><YE(_mhrE(VcD zC(eC->fdoZs&)XCZ)mym_(-)g1K#NUaNnuXi{QQ8Z7JktEG);#hpFJ2Et)suS{^e( zlw0Ugx~kLNE3SGYf{#)&##OzY%=;KTCgoKIhx1@EA&a7e0J*w=q`uvHS0;4Z#L5SH zGDMFhdn)tB<;@sNcB-!;6SeFyx~zB+o_L+lryT2eHAW68hK)}xp(IOfuG5*~R^vaO zLS?s6r_am3W<@yDm)eb=Pl17?x=NXbR9YhRh;Ef0DRrUd<F!Agw$roJ;<+o#)~!>K zrFa<M3w+$gPcBItHwdfd8L!+DKW$jy2-`U7G&q?>C%!x#b|Heqk`|Z9scW+;MULiS z57i{(BDnJ%)qHq3YCX6l@dyUB3}9RLRGJrYfn%R^6;4Mt-6lDOq|0_r<fDnFsBTs; zN{>VqBZ|r7Y_4cdc!FurjXx$8wsQ00BrmtNY~{TNdYpFdcSO0IzcPE$PjrrXh`(p! z7GBlLp^QxA8-B#7!rbH1A?c#WkFia^#1Jb0gip%=qtC<!Y_sBKs`(7x6?EGxSSXUr z$vqc(An<o!0UA6E!&R)ifsbKg?^G*7`7qKk3m{SKK1@%~a;BKFcX^1p7tg=|5~5o4 z(1$sZOj8WH5}&U7c%BnJ-LVeFg<*TWJ_7eMxip3BCe7{;>IiHf#LA)*Zf#Gzf70V) z9tCsL%G#PYClvZEk84f20xg?qwkPK&7js6G-ilqKdm<oU;VOn!C6p<lSj9%dQ{qjH ztv`h(vIrz+3U<6)s;Oe0A0*jkrlrQ67dhq4i5wt4T2we|EWDTXQ<kem)*n$=zy7xS z8SaO<qsEABO&9q9!(HN9oPUlC1!iczcbLWvGZh_VZUbk@taS3ahyt(aEj<AyIxp$; zKn=lxZx6gQODiJhQ{%L|B>g}NT^9V7*uz_}c^7uz2VnX68fM~%BidL3gmbS2_41WM zG#U0@HZZGr&ytrE$7B8W|M&7}^VX|o=(|>=q@r(lf})!)?54=`CHk_MUGB1q^rO9I z-(#4v=0$h*;}WOc7byN_Q`lja_R$C;EX}L<L?cTEbl#Y9ku_oQr7K~>rL+pWI4fXz z-b}dph^METkMp8@TFo7%=C0AR@u~6p(n<INBH&u3$AjHKH!r5!PP%Fq-oeHvqy@1- zk>RK#*ln^+RT(V~bXYGSgWYyT>kjI_6AO?qSGqW!Sl2}w*bA0CxJ97y<OM2P;x z$!V{nhE$DkiWL>w9BFehs4JXbrIpwhqN&Q^9XK*GF0nN0F|AsS$vPQzoj<6Vse|rk zzt=}In{?EMIS~k1O*!b)*|*4u^iR&VdbR)=4UDGuP(kBc<^7_6ge8u0^N;5;xw0Hb zf}kp20p=riK&Ni~uVd!m^r?O!Ndkz)!#tjW{b;D$aZ{;uqa@Rwd(m$v%S^-3(3!y0 zj8+S%;|K{Hi4GMyGRK?3qbtrzcf|;nD&W#vqHw0G5)=MRcO>M@%IU0}_Y6-7{*6pr zy~X2}fSxaL>e?dOYU9sFT}IC%oY#e&nR)vt#q9Lw+gF=}dHG;UllJ2)yqI61sc2~f zE6MR~;ZA+YAtNJ&Lx!Tn+vpGssK*m<P(>FgO{zt(8(J^5qdLM!eaUsi&!I%)Ik<Yi z;`KH$s@>p<Rh?){Ud2H#dEJawzBlivYB5&gTNGV<+w36lj^G;IGUBYnz;L=4=*Scl z!=D7w`j91i%fg5!aRd{uwJ&cjT!cVcG`3!qhzD8?b{*zDZ0sQKSvu)2xi|PcwV5qw z+|x{R24#3>elnAA_|9_ZyAR=b>0=?hg$9-#89p%cBjm0G@XQfVL<Ib0;Z$*5>M-QQ z>3TeZkY^N#w{W9rc$G}!BPw=E;p&h!E*h=*h%_6bBCCW=`n4zcLKeQR)565X>2gZ_ zT+ZTq-I?zlbwTQnM(Hi*8YL~R<_amY>hw|*3GGv@QY?lU7983o+cx_b2VL8Hu4&t- zP1h9~swUXAIKPs^>RRsMq~DpPod`jj)K*}v1~7&My@NNBNj#<?cGmTwdK-<ZmK7!A zuD(R-cZ?jtZN<=yB%cd(bZXKi10B$)JbE$Pb4+a`$L;8F)N@b-LvZbiu<|)lu#gok zfz}N*;LQS8uX%@*ubN>ZZTyBXuS9oU5H~~kZ||Yhq*Ym%9?1^qPN>cJa)>Vfe?AJ+ z0C==`8T)l2mnG_~g(<%&pyX_82M4A`z|eMqp=6)-X*ds(O(uW_!_R7sI3yKMKf5vF zKH_Dk%$?&p;%Oi5@F#AfvfP7rv|nbKI*j!4j<!nLHJh7JJI(xsPAUO%nB={+jAV`- ztF)5&Jad(3@u$}tnQzDRBI;B1Bqyk+CAVmZ44u*Ju<=`3OE~ed1V+5Td&zF-R5Q4s zCKB#5nlhd^Q6~PoV=tC9@5mlPa7ba1h~oSn5(j6%H3kA%*wLT0G@pJ{$W0g)3NbAx zYhd$Z?S5Ur5dGLlEK=1bE#ITui-IloqBWq&+0HuUexd@M-ruNY$pS?&uluoF{0u)f zvu=w6revZDwElLAseCkdsE>ELEty9`%}^&PbKj;ZWcZW!jZI`h^0x1`^zQ;(B%-Zv z)LKQz4K%Ow%YxWp+%|<Ky#OI(fy2|Fvv`tWrLm0yVDL#St>iZ6ZArs3ooBSec|X55 z*UHYP*mfS4(k>}&*g8(}nZ#7>J++1MShzZUQZ!*kFlX-&3^7LBKos<XL34B!L6#Zf zK;Ys~A4{(%aA)+3Df9w)V52GI`(0|$XK1WHEecu7Sl}H^gs(KT4E#Ik$Sj<g#G~;s z8_NSMEBg?bWo0i!Su%jHb}sT*u+k0~gt`%33wFd$Vux<^v9`j*<wXaITFA)8nTqoy zaEhOcm}?<?kDhoXp0#v0Za1#)WQDenXI`bi5(iM?Z+y?5$x~okCoccEMo!m#?9itF z+{dcDyioB?TV{=R7NFdqQvEqZK-fdT79N$pYv&%d>=2$8(h9OxAUPeMshHoT>lc`K zKyZ;MweuR`8)DKDA&yT;tTj;|v8|@z29Go-+N5EB_`bfN9cDm=n8|dYnC_Fvk?*e< z=NlhON!&?zfRaEclYvCf6xPXC=+F~EKe~_FZ}GjTgVj04SDmf6@Wzu`zMk?)xz z7s)8bvactddQvv9RWeW2<e8!;4*n(G)VvY8U5)2N!VU?sC$+IE{R(%$|9^^|UF#J$ z$$rzdR9-o^^=A}@;JzpCKm#ki4{vn3buaytU+I1q&EWtix@C#ya4J|1SL7E*`M<33 z?Y6S^2G6I4G?3iN#ht<Z!_|%Z?lkHE4n}Mg7bc+$Yr+>_+no4F+R&QZ@1U~Rib(;( z+f(~H`wo+52^3-0F*Z2wC3|@;(<|df1Sxep^I($kSv|}VlbIC+Xy5N_se1%vNP5X` zOU{vZ$a>ELx<dR0*Ecx&6=WmrI+U<%2E;HpL8~40WW{NQZgiA(_3VE|O*6Rvf5xWq zts%6!b0msax#-DSo~bh^EZ33bH`iq}zffS;del4x_!qaE*SoT!TK7OC#UW?ACVE1I z0%kmu=BQ9oowh3Du5hOe0AcDJ(^9PBps@0LSCAf>ptEmP?~6W6r@?!q^_}_FG6=W? z%3|E7@SM2BpUBu%YgS0P-5Szdv5a%4FdGl|_{uUzdPIV4_d~O!)AS1R&W_b&?ot=b zO~R66DxT97ggutEKzlVgZ>o*#Q;IxB_66~o?dWi##=>Q4R-D*D@@DtnW7_1@fh`hZ zV&%pchT|`J2AaB)9_8SdYj9DN%7z$eg!lA7i<aX}eBZ5U^*xKdi#)7pL^O9h-Oq}o zk8;+fOUeSMAGoSSiXzII9#^x82B)K5MVt>*W@w~=m1}o-uUq%`DT8n@x{m#P30c>m zR0|{VebM!d@M?VSDP>n=vqAzVse1V&cV&f#XCm<5cxB%3sT{pI)%LF(6|-ighS06Z zw`IEwm<-A-V&za}#~eUBJl(QFk#OO%g!G&Mp~8{*-m(x_bFLSD6nV$Or$b2oVu2ib zxnrBA5v(f<?5G!;NBY+o0)=i2@ci@gOj&N2SK3VeSb|f22-Kg?4;>_vvX<)w9Y`~N z#nL(A${8kZIfd~JenBZ0oaUwFLj^NuLUqKYx?)$9U%Jgt5Xu7sSOQMF19z?zA#D^) zcZ3-R&SQ$7!+@+sMMc>>R{%Ad!<T)ah>|D{I;(UY`kos7(ICUoeZ=HtJ3?Pg1$25@ z24vdMNSq1<RZ$#r8vt=DL-m*E9Scmzomuy6LaRsWmoPVx#r^U4Q<F+o5CEr^<Hdgn zrTX)fp6SWL8^`1;CG@-H8g9=KPd=(W?b=f(F#mVbXV5-Asb1_R`|5Ri9N@Ek*@vh1 z@uSq_e7!k9fL!I7dgYu+t9{(%k~)_{{QN3sT=5xXf^2(QincpCk5-ciUw@HiiG;Cm z4IVEcG-O^tvRST>qciTv_s)AK2{l?j`a5}xq$ikb>n$?fM+P9E$N2D?#ZoF^Qp#;4 z7KLEsjBDzXY&u=a3h@%BYD-%=ukVdFyzhHHK0b_F8C>(@l|`iQ#Ao9k)MW6@efP5x z0+x(EO(`ovZM*yrT(WXRc;U8a;qqP;M`qUAHDW5x$O@)S=l4|5#Tx+9#>=-%=vf!% z3N-RKmHUo|IoAQ9@(c(W>WoYZ-=j~D!wHLed!!<d!^t4@S<))*+#(*u-pk#NLQZ8( zZaLHds^~W5)Seh7YUd6H&DaTHK8k*13Cx16{W?RVWjkxrctMYU)}N$z581fWJtTSE zP9KL(^~WRyUG)g6d7!2hO(Yw9(L<|LkzUOa=OD-0uAtx3+9fqsxMW_E%;Q6udHT@D z345%2^c=nSI~=tu+h92worpC3&~}Ml7hN3kuRd+yA(wj)-YY8OD+FKT=MaVm@Kh|l zrX)+3QyuO0jrSYNR3{uAh8wO}A3P%Ao1Z~aqSgYAWXTFMtM<G^fmnotz;`p(6+O#B zB3-IqR~G$2j2KI~RwoG#w$bktLsFcTen=!OF6?mRGu$DF_jH4io1!7xMkWvZ@HIl; zjAj>t>>{oY^rg4E44;^(5=w(iDI-2I>9njm;S3UVL}HY?-&vO_g;HAKexQ51uH{N} z98F5DP+C`RN7G+Y>H07gK&&2jg-%|%Cj@TS^yx(tOp*Q7ly*mv5JMz6jQbJa5dW}k z{zr3}WLJ#iKyY8D@CDpYq&S|Zx7GLGc0@wn+5DnJ0*M^7AY<C?AkuzZX?{@i?nqDA zc0Z{rbL)-g{@mJtgYHw`JBC|3wCXqG$m^|!<S)3y-AP&OYf?l2dvZ)DNZ?XHV;hh; zQK?@O(woowOOjUBly}xtnDg`RKN%QmThGz7f9tV)SvYd@EJ4kE)ceB<i^+XwPM~61 zPPixDcf6Hib3K)%6#_@ggkT{Bl{Y@muCgdll%;)!=GVj(s<e2CCsQA^S`|3)XvQxV zOrNjo^J6Gs+6p^v;jiz=n1!kyBUO~$(Z5|u0OdG(DDk^-oo_osK(tsel)dit= z(sW1sdMV(V03uwEbrRH9{Eb`eFQ|EZrYf4eH!me_M8?e~Y0)-l6}VR%^RH>@l?9x% zovUMupKudA*vF}2+?vl5<%?H9!!nOFW~7G9{ysJPX*AslVW68SNLuI#C)P53_jT>7 z`jdiEAq`MLzuG2Yg_i|?C`bsMyn4T7YDVTaEC+BBIAul%FX&L-CE~MV3B#US3n<5m zHzD<eQxdjhe_{*Z;y0=K?7x}uX$gIgUW9&c2|+N?3&UL@RT}PDB@H(mkFOe%_A<E6 z+Sga5*=4YD`qZJD@#~{l=523T7uD*sP)gdd%SzhG_awmx4-I&wuJ^%~lo0N)p_0la z1iJcZ!8)?tl@29#_XzR(ok#{NchVy#-Ua9e%S!rHG}dV`#jLPTyej;<u=s^t8lyXi zexnC(bRPqeIHAqBxrqHLvui36N}CG|Rm1SrYvnEX+U4T7xJTWuyD94axRpE$tvj+3 znxiX0wEI!wmeWod%kv>0S>tK*+|ksIGGo^}Y1vL38yqlZIlUcYy*1KFT+vG3Lo$lz z)F2)wUW2%A;N0RB-?EWcT(!u9$MywQUPF4ye6By9HCzQe+ScVuwYE~D&i07Z)<>O4 z!?4Sadd=*j?<1L0&mDtKaog@?wo_{ql$Gp1?c~F6RhI$bC3PXOQ$HRk&(kqp6 zWr^LX)@NnR23N9B=#vSkYcJl?LnpaJN>weW*f@3waF701G#CobyK~^6_{$+GfaKFP zW?7(?-mZPRai+c@{Bx?6XIe<H2qerU(mFM!s>vkA+4vHoh@SBP`DdA5xzwu6266vD zOSv0p-$z7n$+!wr-)550u)6)d;WCu=@w>*xxdg*_$^{rKeI;WWOkWDvIRhLU4{~LK zCC16F&t8>XwHa$9K+v9++9+{1S=V-3V4E_ta?)kNp8sKq2OOFy_Ur#tES!|^r8&MB zyM?!I%7rP7;U!{G2>|!FM<S1*ZFVF_CI3tYM7XBa7maMbWawB#l8G@QVxrPpUMf5w zjApRPS!8U4s?nPC;2uL|_An7~Ko>wWb<G>gyVq36p_<;z;M*RRblVx{d1bI3&~M!u z0kJ35JxyG&kFHI1m#~VeCnq&?Y3*a~_4%C<naQ5dtG~NHlFqQ8l<ob}V>g)IJT+D# zTUSey>K^7Fs{E1CJg+NnV8A}1zG`j9(f3h<!V2U-BYwJR;^dq(e+;3W%yskjC3ONl z9zHn$e;F{kX(A-?Na4Y&P#CEJKQ0VHzbbSdLLoin`yj|OFM`3R9Z-2Pmw;X3xIb?L z*$K8y!e)xz{`pi^5+vA0RlB?g0Z|K(@H+A4q9#ir2tN!eK+7}K3*@-(z4}F#-sc-5 z)Hj^m;<`8_GybG0ZIm*z&0HFmZ2ansyp-!v9a!06w-+QP&NYFCg1Zl;Yg!T3W(ea2 zjJuAxbhC{Ws6pan;^?8Bi`h7}20+1|mSm>|qObo9ZvE7Y%@}XyzuTN#<!F!F&!8q- z#cK_Z2O}6K-ui!hxj>Wq2D_v-zQI$PG3k%VEcY>%<er6-q-vs?X?Euz3o;ow{F@aT zv7{e{*gJIX_mDlzL;KB}UtR3}(S%m}gVyuI<bt)5ADyFs)UvJ&VIMc+HMRCBnw~(a znq-5S!O=N*N$AaRI`eY11Ew<)&Yh?9Ab?a~oi@UdRK&|sP3AifoszH#wFYdR<JxOI z`>Kmz>{jfF&VJuoQ*_1;RX__;B}TvVl%Zkf)wnx8l6}-EqR1K;p{n}F9+bW&9?(WA z1W_JS_ojFH?>|dOq;X6lH1x9+Q&p<HT+{CA0@taP9oVw1D?nMJ2l`fhU<)KQnR3;# z7rCBBl+L*CRl9R^gyn@6{$))$_<Ig&{Wp*GU5_DUyVj^tU*88B9q|xTxy&Ib?E*Bd z9uX~RUp(xs(<8Fm8!~G3Jzjth_%R4NGquuUH_TBxqj9C){qw(n21*x=VNGcp1@c@+ z!)7oUTF3Okk@|)s-Z4*!W?aaKS*R7e49?>n+c&_odGrzQ_zk&w<@~<&kf&o?X1o<O zw7<EB6_Z6F74$&HlsRY741Md;j12ZiMdJxQ@!`IUvb5H4pI^DzH<VXsh7ve&5?$P< ztcHj_d5EH8rhjbhSRo!bR~CL1_M(u)j3Ut;e9OoDMXjaU=rb!ouZNAF77bx|dq3f9 zW`2L<4_IM(X)X^@@v!Q16DfHw{-O>k2bGfUHxVr3^=Z~ggVml9=2OMq2uqJusWsS( zF$@XJSk$><TU5FkK72knuuluw`=_ms-_t|BfBL(CZ@B6ymA2*4KR{mfeVhvBuy;FM z>TW9G1Qd0>e-7X+l@5VsA5AbU_Q&~(BzFA;3tIAg4sATK5@_YkAz|dEpVZTgGAd89 zP*Cjf>usJDFSb7n=zumQ6vIy~K&aXs{FWB##9e8Sz>4_OXURLN-4<$Bv#3MT607MK zfW;oEnoicGlKs`Z?Q+johsNwcqiAm{m#8n$@zEP!GUTFoL}>?~S<Xcl`NZ75I(!=? z3Z7kN)ldQk-d<jIvcoZnm+f}eqA?_?;^kW?<j)eAz5o~=CQ5tQ%RcuoEECtAv`dX~ z0EiV=_la;fqO8?7)^L>FGKdI{(dXPSF&<+iji4>CBfdKkjWG6~#4w$&ur(!!Ck`@` zO{i^Wim;bg8aW#E5yy@Uyp=<esHmE@<WR`zxWS#tEqu7W74+Z%a|sY^iMkY6ia8$c z7<L@SSt*KO>ZY*XuB7$Y%JKQz)3p6OOlzkdG_UnoB-7Z=<vq2;rfW<@qI?F(-#_#n z$uRKxHSWmEFch<9yYMh4&uU)n7RsmjHFCB}hD}P)*zR*b-h(&xNP5)`6{{A#BKtIJ zWZx%?zngleup%+}bFUsJuOOAP*;AIOeHnM3f)Q3+S6I<g4fBD6DDiqEhW{qS5E|bU zl(qh;_xw0%D`=5BczW%uNFVh%fcjdLt$zs{>!`Dj+NK(gyDIs+Aq!or`&1Nry}{?z zRCO(aE9>5ho3hPgw=wt}Jm2g3#-67rf(mGwP~+Coez*|E&&o^ybQ^P?UB_C8tnrEL zf<BgmB9|JtmNYZcyN=lHlQli1+aU3Tl9dGFHs)hH%PY2fWgoWpN;8Wd9BmfLkr4H} zFp9hTCeHupz_DgA_3pDMz6zE|Jb0fcF_8i0;nxKZXGt8#ZvdJu-!n-Dd`ycKBd{cA z0Y<a_<NMar!*cFoq>esOyJo=rjo;ZW*iycsPg-iigs$%0*+!MllQqaz4oCTUe7S;c zcP!o*M?N<<{a&?C<LFUHxgk%JL^oj0t=s?AV#r&+6T99Dlo*Dp?F8}H$_&{}NK6S_ zkQgpT_dv|RUFr7ddF3=5*)`Bxfn*K?AU_QzM<4Y&x%7zNXARsfk4^cHAkk$t2W?Wn zC3g)Ps=`c5oN&jI0Psl7iS-!>Fbj{BoiY-0>T8~sbGVCJ_s1Ja72<E~&tMoca<*}L zjj~asjry7>*X{nF=Q6pn95#ZWEA2qfBNk%uN%H@yh%B~FGmTGzKvh;QkW@yV4OaQ) zspUum0ZCh7LbWTGgQ^+Xtj&Zp?!+x?g*jDgULf&^=?RpP)x4)g)(d*g6*65#<MTDa z*&HDubx=p@9ZcGuW>@BPs>atsA7^Tcux<2|C?*O}(=9lThnpzCS+hWutBi=fNNmDy zis+eczt@o9iJHMfl((Xk`6$T8l~Yk_m~Bo;05seL9GHzC{7<dzHfl}M{nnaj_TAmT zHCmm{>S%g~22oRAJ;X^DIBG`TqppJ3dqkwS;a{=x!X7;kg$1T%wJIlvpY8uQG@Dh0 z>7pcMeG_|yXf#ClN5SmE{+ez>tcbmeGqRl~Nmkx(YAGyE))k1bG|S}Ko(~!~ZP56& zK>5YTj{+IEbcIQ*b53+H=|U(T%OYHNAO+3N{PbZt|4~je46F20=m#5)M+DmO2tAA2 z=Vq$<AFI!hfDok7`lejV<db1Md)3vO1M^}B{)UL6t$^8lc?*G$jd@LYyA?s~JVM3r zaYZYbFySPPoU~sj_!iTw%szFB{eE%ng=rzOZtz}Kj+K$PlD;YvBO_eB-#15;9%X*n zF;;mn2#?W1$V679*`10&1-lokyW<J^40>!ZjAGY{kj|$1Dy`p@XY6>1!HIT-`>%|L zZH1n_2t9r6;0On{5)p+u(j!%^Qkt`(JwPWau9>r^N|w-Dnub(l=%3bGvi7!!Ar}|m zD&O@d<#EYQ3pMZcp2;b8U`m-PJ(tXtmcCw@-73C+W0iU@4F^)uVgPj2P=i!=)Kv9S z{<pYM>0iC1|Fv1ZW;7EKT8LNW(nBo4-4#rC)M%Vj5-x|vS6u#+GjZ?tiDNP2^zt== zRa<k)`F3?Z_6x-~I_Qtyn7wDDe441~Jv33fWxku3&_gv{jSdYrw%c27Y*~q>n#OEP z_otQDQ;S<UyPMdF`&)6n;NPz{nPbH>;=Ft8uRih>Qu@fHF13h*uc@@zh{V%82@*q1 z%j)%0L2^rD;#_Zg^Eo;&V>a6=5oP*0ZymECk#ZH1$?la_Lv8WWM?+%;pU-gbmd;_y zmuj$~aO;or%FDX;-OAZ7O|#DamRvDO^JM9hEyXGeRQ8Q0VE=V1Ll_4g>=jYx988L~ z2h0f+gGf{dV|sP)hLux{94z>f0uXNu|0kOuc)KSQMKnxB<+xPY#3b&48AEHc=c~qT zQ`gL8q{1e3c)+zPmw~V!D5^V$M-Ph(F~&0y3a}>(am*Nr1Fi>84i)8AF!Vp@&`zGx zg<qjSw(P!fpW^a(!c*Dv(mZXmv}!s%aY>4rww0`vhJ({-@r<`N5OoNBTu%4I{4wiK z&k7%7NYvN-P30KxpI|}gK+c#`JJJkuwwkKrXedq>UVhd)_)^ygcrqD0Olw|xa@b5f zIhHvO8{F?&jUQrRE(9)=tTCjN1c)3qFxoW18cUpX&fQFHxsmzeksBJsoe+CfKI%uJ zpt2s%XbAfGJWb{AYhulZnEH6?_B_?;b{&SqNQDL9btt3z8j}4ckkZpfCCPhTwi`c^ z&TwQ{DL3CmMmXYe>aQHj-(Vnnjg{_8Xfd&@02K7bd^L9Vp7!6V>+=H*YnF!hs9wxu zd#K+Qc=B%T?QijyT>@}uSOXa#0XIYwvlHbuVMzPW%}!Ey{BsW+YK_`4nd31JW<~SC z{cts93Rt<H^phR_oqP^X=@7<{7FVtZVK>@5z{sp;kiM0&3<`8p&gN%OfuStrP|Zj} z8OO9iUXNYyg0?(T+wv5}R$<30q3o>4<F1@KlH56VP6?_;%T{cP@cyXvXJn&U)fj?j z<VaFMn0=VZG(D`n(Wn8k=BX7O?a#PxnkeH648cO#fmE^ZiocxFUYa0|;ijKBos$Dl zURHgNO5Hq!e<OzcOo}q=`&;hgwMa!)B=PMjO%jpK7EPmP+RW%kYx)mJZUIq~Cky9G ztW)2UcJ^n)vQ7hM&eUl&tE^D(+^#DqG5Yh$xi_k#x%iouAZO~dfUB}{i#Qs3gA-E| z;%|Fi1NS(UpBH+0q&*a3Wd~E>=-CMY)sORD*ZSru@QW{w!Ctkn!Z5GciCT8qB1OSs zahKd~D`h-2>n~IVF)?IKLt4}HjBekIR7o|gaaefm&3^e7rM(_n`*L%{+f!uTW1!wA zPdP?h$@CJvW97y<Eil2&Rdh*ydB)W~1HhUzz94$gk;3Ww9BD1x43<WUV=0&Pl5P&j zh#2)l&H#mZN_vO9mIRXf4WnObvSz``H9*g=|6$EYlO+xIn<bTTeXq_ZYxHbBIjUm@ zq!)%hwB9oEJ14z4r{Tl8ED13aJd{<c?u~D~^cc%_>Jmw563$zFKp1;mQ`d7~Y^-oi zONXv+zv;uf(kt<JB|p0r(MY#6nRfJq9njarK>NN&J@b5Q1TuIp{lhJB7{Rmmhn?06 zVQZ!95^U5_9PUs-hh7%k_ae5VCgaruoB+By)n6@|Q!ebwN(%b{r8^q8zDJpnHCCRu zj~XCr=-lyi4V9IKW3lQV&y*)V%qvJ7-?+lf@fNWD$!ienriTvxiQVib58lGkk0Lc0 zI;WH|-r!Z|e6OT}1%AH;g36E4br;ES|4f28^-VV$6C|Jiw|1)MJc>L6J+-?&qC3#T zd^Mu;W5Z{MXGCyd*p{<5Lx)f8zG^;Y%+vqaw<JksU9tQvN^ruyt)4QOcw=VpmfAq} zJ(A?rOAt;H$FRC32sjwy?T`&aMasw%u1}0yB{wTHJgh+k9!US2>@cW6drGzVEy;4M zzqV-A4-;#!?8VWr?*`*z@^3w(N<KNJ0#GKyAjvF^NLp-wCq@8=UL~5$&IzPrlvge3 z?o*wf6-XlQ(Oa;(QeF5lSyg$*tmFib4t{6?NH(A8IO(vQS3Za)es1D?r1DJFu1rYW zCMzqv>>Q0}eWvGm?VN_@DU&s-0?NS3L}{P8?@c@ZXR?Cu49$~6DxkC;f5zu>IsDg4 z!@DLVboeM*^TwM&N;?jxX^tD7j;qXkE;#^?#mpo&;tnCIkz>+~p-f=<(iI27)3N~c z80ZEib<<~@X{Cr$IV}ElLO^=csOH@=L(FTBc?B(d&lp^o!pNmj7FxnSf}xe>+CL`G zmM>H27Fll^A{UTN`rD|N>EsR-9ZO6d*Is4wPZCi~d_AMFd}H$;UDk!``6{*8irEFd zH_UEWc+aT3!B>F5bH6y!e;gAbVqAHGKZZp2a{;#FN>X|%-ylddRZk=zTw$JgqfD5} zsPN^5cU9s&AY2Z_0arAHWkw9M*G($b#sPtGzL-Z1;e7B;V7Xt4>#@q*`tC}4OqDqf zDe-T%!u}z}MjV17vEWp+q1efi<q8D(t*8l&{75^Aq8x4}YNDg^EcS(tMxBen4^^|i z3a3F)6a9FmU*An!RV1`D+#}Y4-~ajTDb(BoIG$MkU$AghwDYt=2ieJ>Kwc@x?QebG zk?6rYdl!>!5W9!_(NNI{-~3B<<ucbl0dVLT%+V`%F;GN4_};Y(TL&AL#35tZH(Jpx znN-O|-08i4vghRcZIC+4>|q#uE1@SJ1JoQaYj}uA8hGte$mTyg+)Zt^HDdNY2k<N0 z$8~eZJcIi><=ZN(pz+tRdGy&^c6)E$0~TS7jTW!$ZbCRN7(i{F?iil>U5<OJ&mBi+ zyY?4DuFi_b*Kss$@*}Ui@Mes7&Fm<<ux1JPF;-fHqrQBOQ<@VWEyq%>6GB;IUWD9| z86>KXQ_)`jE;Za{cMM(2P9i<l`#0Iq?k;_awU3vU*q1*!$(rda-gShnTHgN}yJn@W zUy1w(jMzV$ud(WaJ5F`h_sk(9Ybbs0M}0Qt{dfJ3<}%5$9LZtezE1Hk5dGw{{5-Yo z`>)#!RIf6UUp|o_0D|?SHgpoDMI-WLo(TE@sC2(20vW-XGeWH=6uW=g%PCu}8{6qJ zc<GS^7tFJTrg|6mzh2pX7~$gEZ-D+DE$j5YS;sq_4wPU4NPy&<#6d3|;kQT+P{^|5 z*yC5*9HdDfZQ~y!UR8033$wb|@f0+N&J~&<*2}t1U7nvW*jvFRvZ}7jR=DY)%#KfD z_9`F2Od*LyCtN9Pc16+SAhoAzJ_itywO21G`_n!R#Q1N~ligOH`rPX}<_{j9byFPp z)#C)h?WPt<;Oju+tfsGe6KPV7%b@I;C%_n*ygyy#QkLmH0PNRCrt)8HXL31TxyeIx ziPGnE&=R8V_~s{>vN-9qTwPbIjoczeC#gQBR(UI9z{P3`d=zgD0Kb+jUwp*<em{ z;8y_S3eib=UpH97LK`wQQiaU5S`tKT*1=Y`Y1bywGJWS-3WWjKy=Yd{JbJNINI);% z{@O{})HV`9e?;MIa&4`Hg>yRrao^y7#^3(wQ%5=w^c<fe*fPfu;+B4GsPWr>D|YS0 z@p1YW3lat-HNXoo57@Sh2SlyB#A~NbWqRGZYV7v>5ad<qoqoRu?YC8{EbZ>>J35)Z z$e?0s%G)G=OCrDw#e5~lJ8)J|)2mcsM)iblam&)kc$tX`PfbS#vGvtd?zix3q@*<l zx{Mo-ehSTIoy5Kpl30$63$vpunVPCoy+?lf4wy#<*Z}tCFyP&C|Km*Ib2ZZAt!{W@ zg^9hzRx|$D_1}y*@ibD6E%ed5S9`OiBC<~*H?nLquAY|FLsZ9}TOB*>uU;*1#wtkm z{`J1iA^dK-MAuV?!6LI7V3meRG}=4Tu6;dK_?!+We2A8_ZrjCKuR=922IC3)p%x#| zZUvO9phSi|cFRI|mYE@C8ElEn64;SH0wAiL{7cAh8%4-ly^^z?R*29LS*HDuMChP* zZaD%8*CDXWa;XtBeX9`{rV7a`t*t9{m6D)EGsttel7)u0-vVy5X^74q*S|`*ZsDZk ztej4WktsJ-0+VqiaJNq=)A<VJ`w6qXZ_1U^WK+pKdc!R^JDHfebwzovU`y$~;!Ww^ z5p({SzIOA|h}?>s854l{*mc&Fr)F6NZ`Ly>x{;;u7Co{Vf3Y%Kx~zX#(wXcN*UA-p zEDi-13tF7O6rW6%%TcNCx-5;*$;9^R9ZZSYa-EiHOOIPpTjl(Mi&@4i1M0S`wRz93 zYc_~>%oy7i(Qw(aFGtzD6$6KaYVx@Mj1iPLeD{g73JGZ{wYS7HY5D4@jB7kSi(-Xt zHK+HCGN&j-3^huAEmm`IjHRRk&wI)WUqxOkd}<tE_M}d`4D*($XdP!!0yLwKes4LF zBTcNFrk=Xvi5q>ZGtd3>NSA7IkMvzLgqEeP^8Y7FMYc0Skl9jJpqapmt4n{P$g9ST zSCdQ{dZr^tA#R;CI)W0g#I3Ri4rYxrM=sNu<^M1O*7Yg#=s+Y+8SC&py#^+oDO+zZ z>O4g|J8{JYy$-X>BWPL&Qf4yJ!I+}GNt&Q&p)1d2Tmt6L7I$#r-kAe?EU$DaDZNKh zzdyEK!o<mud$3}CV}Y|J<IWGF-m2G2`m`qd7Jlv{gRtPt8e}dMY^?!tcZ9l<2lhl0 zYHizyoc;R`rE%D8@CL<h5{Z|-FayN#YogfRXCh<gOqvd#Bj23B8m6O&0OMlo9B{A> z0Kj9U@Az5VNEPvdbcMSC&&O7{{DKz#S{#aZAr1Rxk(m=Ecs^Qzu@^+ixECaE@`8={ zk5#;|Mo-<_D_s!LHIs<OgO`eY9S%6fnbNwVfYi|(x4V=5KPWL*qH3hyW9}Q1)&X85 zuRSoXqaW2r&sNQqO_;ZzW6~pe6QR%uV$W#ysQCR2V&EiYg_viu^Z&<0A{3uPX>{&o z+djjZTU2IDfKoBqgRbbCGs9BPd}6D5rh?pY+GAN~M}{~aZ6gW7w^6&?U^!$F5db^) zl(I8AI_jjsh$)xjr}nIy*V4iE<=~C|$xhq;bQvA7Wa##geeE&U5xC_eAPyA_?%(UZ zuZG`Mvuqb3=Tx3Kre)7_p<ZfB<QC620or4>hS$|%0a2Qn6buzclT4&WhN0VY)M*X) zJ}v9G+au1Jbb7(Y;BKpSQgzyI2pY+vwW&agdVD-0m(Ayjl<P&~zlZ=`6lrp~T@l?< zyyO%eqiC3B2Ag`(ks36Zf_a0;TSfrE!hwg5;_r7Z#UmO`G(EQh+?Q)kVG+PJh57NC zbAOJS7@%cSEW-y3dt;GJO<~g8G|`g4<d^njZ))Ix;-u47_Mr(hqZ6Q<Jg#fG1C)7h zS&P=2&K1v0zIXl);Fb|P)Wg*36nw!w{mDka18=k1$Lmei=b66+N&7A;&ApV~<-{1c zb%5(E<!sbiw$X_3dgs#m1Rzv8){^J5)h^M>(0j6M>#5m@oVU6(J#=G8v~*)ujH`eJ z4P2Dkrdo)nUhS!TV7uR&WoTwU$p;h;18B@njDns^leEP{daKLn*IRB8(JOYsAscE< zMj&Gld43x+&__j}fVizq=SVZeP%Eh6w^7d>J7ar7$G^Qae~EN`kn4W`6JP)yhVu&w zWo~41baG{3Z3<;>WN%_>3NbMtFd%PYY6?6&ATLH~Y;<LEATLI2VRU6gWn*t-WeP7$ zWo~D5XdpN@HZV5|K0XR_baG{3Z3;+<G?&S>BsUBM@3NvCsCwMM#U5Qp{$CXV_FP8& zq2hu>A`_f3zP9S~*52kf$9(?$GXOq7!M};^GJmnUGt|G`G7?`I)zDb{zizCqZ}ex5 z`jvAsP`@banSFe7g^@D9QR?&WKeO$x)Ld5TSL-ud`R4JocKB$uXV&($Rx{GRI-ASN z_{z-Kc7yiBi7#ShWPCBl6MKEV=T5tRt-CJP`S{b=THhh7Se!R{M#eYhdSW)Nd%r1P zZ^v~(=6x8Oi?r$!Q8=$<q<<^=6C=KHKPenCUDh{O5rY=-wZZ1SePw54oG<t)fN<74 zZZv*{>*`5-i1ql+I!{y%$y@+z^Eo&C`u(KUZ=cK#RBF%7E7c>1an84UqCycW7Z~8w zOJ1|Eby$P}hI9H=J?uK3v4J3qS%G|1mMs8Cz^kxQF_tZI$_m%bam}xQu+5CPc_-38 zfcZsQUUN{6UUD7Z6Z$W=>RE*f=7Xw@xxX`Wt2w^_mN6@Q$YoS$ksVt>#BLF4i1ahY zxWugBUAZM&eYr{0Z|zJL0DD%Tj{Obq2-^2=$Xv-DsMdvJly9%$D!}SHck1h#y+2)O zOJ)YIAuEyb<*E*)mS=Ua+TGehfN!06y1C~fcwQFU0Kv}6vJQw{Md~wh6@3z|Jspa9 zv$xVwtlv+M1^sS>3N^v#f|0FLI2Xh^6f37^pwd+YYz>bu)N`C%MLwryjC1!|Pwx<_ z*Nil(I3C*^l#Foh4qKwv4Wc_^vgNVO$H--9!J%(@VfoBUjt)VDq#e~HV;z#Or@@^| z<U*|qAGJkG=f*V4Jh^HD_Oh_00RVe8*wB-rh0C2rg!EhH(X6$7)W&34e#C9%VMCSL z$<r!)<e1hKwM0#w+A_Ow2>oe{3ZQmRYowCQF6b0+KDL<Za!3eqV^O8;6@ar9K+d8a z#h5_($l$3I&(sf1(PdQ?3@LqpUOlS^Rk;CDFa5EzB-sJ?QN+D2wE-v&)m@}g-Aw^G zfV|<Y4Ri7w<Yy%jE0WZ<`*ivdv}>3TY(44;RpaI~Lp1<Lx+qkTX?Dtis}T1=5O2v3 zxgRn_9^g|qKz)nN4UHkFxBy3k*p!1D`5PoRfY~Ir#3>e62BJQ>Vgt{Jco3gu(KZHv z9y}<u-MA(Cv8+nAy0ZaVrJr2A`e*$PbeE#T{ZyBo!U+4D3#RghOu!hqvmsF>G1@$u ze`|j!iG3!^-i<~ah^K6u=mul77>*`LFWn9J)&-2Vd2YIY0Yx2G9yWL`O3HWM0K{f; zOpWn?>gBmD_O<=HP}PveI-FS)ZN(LD(+Ibrno|0DlzFXV$}HkGM^jp$94XSTz8v|D zxpG02QDc7>=q(!X)xT(a0v6F+UJ$M-(1N+h5kHVG@6U%{F>kU}uPGF4l>V>V$+`u| zk)44XQ7-~8;5Kx*K0|_7mZel<z|F6qbBokr<V5*d_~Df=CW>RzF5IxrObgpn;$HG+ z{k2`#WA5#*2?3Aox4`_`|C{37G6p4b?x3Knx(uAtszdj7XKow6OJe`r2B>t;+#AkS zvz^DB+-Utgb1G;tavd<OkugdqZgs0HMi9A`^9r>a7MjtBd*^vt^HlEm=Ogb18Pa{{ zUu#g0k^+;9L@Mj+XfSP@39Xwd(sU+UYtj?P9%=ogYB|&~sO2(5vMKJ93dpp#Ar6Vj zOmI9d&YkWijo~opx*2y!nc!T7j>!>ybN7Z{i4FpQ+!#SIN;>J=wuptXlAicFv8C5f zUDk00*`e1naz)j3%7NDlgdh<7SAS`WSU7)_YzQD225O$mvaZhi4OeM{Tzb1>77;#L zM!KV_5r(@qcP{JFF=N=W4ch6XtXKfXG~XU~IC~urd%x=>#%(h_8+bZ3oH~3s@hzLQ z+<wT3@e<QX;Vy&pRjzlkT%O_(xwZOkmoKxU4O-5n?<mS?HD;&s!|A0-Q6TyxCgWQQ z?Hl~Cnl7V2Csn6jHzT5y17VbY=K(A%?f9h-^idLXba`M1`LeF?<r_|1WB=eCW8b_T z^Ge)huq|opIOufuj#+L;F>$9-<&P@hW8RT7wF~~)+ynl4UH8n7Vd&7B_=jTFdu&}d zIdIbUUZ=s5P#`kRei|yh>4vgv{|pqtd$W#7i=^BglRQl<x|-=Rpqpui{i9W&Fjz?v zGxP*M0`ThlCSXcm89~7`J6{VY@j{Ds&2|k&)+`U2CL|1I;N>bU!22gb6B24Neygzm zNU9@6Q=N*`8wtt}y($~z?4%y;Q0^s<;x7A8@C}B4j43PQeka-g-0woACjpvyWQ>is zhTC(p@n%rC^t=U4>2(5@7w3nO{JDUVQ6z)t^zQs>&dW=i^{Uw>&^1epfsUJ^jn;qg zP4^Vx<8eZ~&bf6+7qbrM*4=82+{&`)i&pd`I}yUj9;EL6*Rr2-mpNodlEY`B>(9R4 zD}kmRC(Ta&ui^76TUIWPlVt1{1D`*aE@1}oWA|B?)aUA-@0eCI#xdCgK31%Qd_U@+ z$K<ogLw@pp*?exRErr)^T=&A7VZS|_eWt186Evw??GRswJ+smv<JbK66sF^L<$xcT zF!>6~b<EfGR+b+otk#^GinMR>RHS@e5$fs77HFhuIi!s%Y`Y|hZVv~(Bg!sXqI26M zp;1N0+*d_sQZ&?;dA0UjTkc9twijyBZCF+NuV^pDPiY^?vuVNa6=g-rw(jbUs&;#> zN9?o_xS#F5o%^mrm!CR>Qf(7xNYht>JyT?LJ0+(hU29%X=G7ZQrM0Cc@A`9FbviBC zk?Q*4edxN(&ObjVbtX=?O$XO)r$yJ3*Y#f{?A!@aDvIQUEX^L$-34+2ZIPr-0I4pH z0Q=k#plcN_3wh_Iu!EFNXNm1iTH2<W%t)bjohlj`Ll#vRCzlibPA<zI&Nt~$cp#wu z=Av^QeEOL2HKteOTms-*vN=v2=V!+$UR1eER^-)>1CE>P3wo-9S$^*L7CB=wB-fnf zU*9%qu1g>A6^W%*F=Wc2Iot@IM9z~A=;z!KQ>L9eQRXwPrbD<+x6R3PC*K@Qe?rT4 z*HIl`W8_QsHe-&sE6?|CzB!kJLq1WQmS--5x;-B&8k*nC9~otiU^{dF5CPJvz&e&o zcjor6XPw)%?AK|;KSxfT={nHJi0=_wUq$~t4|cZnr6+?K$6w}C8#kfZ^EulbzuJ9< z9NP~TbY+jhkRdNG<|+ByaVp_S`g={$Xp+!j)OQS$-vrGK@?nG2(0kACy~$gOl==Q| zA$)DEtz=}m=6#PH4oLlRg)=PfLmDSfbn>v8Ickmj<eOMYIQQ)PB;+V~bU}9rHv_7$ z&28_N8-i?F`nD`PAEhndto=9F@?CeJ@YSlb@m*014q8y)>hYZy{!M*z=)*HGr3_I7 zrt9i3X2}n*9j@~~&1IHdxst=ct#|{jqnwp{dcFVOjsWGaa`7rB5(L2J<YGI+wj7s5 zPM%M`;SXNWc)EP}dpoPiV$g0juf)B5Ov5h4+_5PQ%Smv@YbPOU<l(1nhNpZGf0H#d zU`D*le#ra}?y8vJ%F<ZW7H;$8r7^WEEd=Pk<nKXa+MU^t0G;AVqR7j|+OeeT7u>{I z2`qQGcPDZ1><ivHpm~+a>rlJ01_&yz43y>b9ev`FiJXj)owS^jZ|w05jeV+H39UGA z$uS0n$jwKNKDTF9?G|3>^et9SVtfyrIxV?sCy3wy9zCuqt&MpcGwWckr$TTrcj-Rh z$>#IPP@$;onQtWQu<8g3Mq=a)S{|^>SXn2(Q@;Tt-IFW9*t4Z2=!sD|*k#HYrI^sN zPJZV5p@+!UFvs0FE><I30pW%n80)J%k+Lr%nwxKM8lj${OW!%|-U$1k!pQ)qK|b^# zc4%m5o1D1QR+)Wvn3E>Qfd1$Yh6>eMEH$T*rv7G~{T~h=95Q>>jTso~MxKB`HuozX z%M9VR*^+45UOHEph(Xba@&qa^NojBe`TJoYp(CxPeIgsOjzq-<69Y(ekuLA)*`4O; zuG_697Ak4YZO=)fPs>-^v5WKKDRP6@jrWIEhe-3yIp3J7!F*3CimWhyri#|HJ5+*^ z{8`VRpforJD6nolng{RRAKk0OCJas@O8+9VN)?a_7&{%bx&o2Vn=V@<KNbLu+hL(K zEVUP4TO{0TX8Z~6v=NB)k2CD6DQsPeB?(LT$WX0A6eFH~!4Nma(xG@98C$bHqW&CA zU;VoYY=MzWo)1wS8ACjO97J|%&;=WxJHos(8*7=uT(C#7V{C>N^jcNT?xe$Yx41aj zTY?WC?;s<4>9A?44T+35J0Xwq7|jZ;Cvnt3{IZS?8fr-!)L=uSTC153!W4zGv{6+j z&1MT$_!9rW62q6ELjNU}PWLn9GNI245_25c#yB7nnggEY#i(QY(MxD<yy~3yyXrGa z)!4PygP>cl%A@0{@@QH&sfnO8z3NFNOyE0`c%24Kx+7!lOL9Y<myV$V_IL`YcY6|Z z5E2}x=&EW8GZH~fD#xotn{}Wg7l(J$1joivtALNzz`3ATL{k;B?LaZYWPO%l6RwpM z;oA6W$<B9vpzh&mP=nP;48`0a4ov_{f9)~BDQ1KEov(*h2-i-#&;2^Bi(!hf3;L-3 zLEn~GjCE|+(JZ}AIYgYDed1o`wNc)$`;mfh#MKbP5j$Q=ju_t^j45(c#=hC<xV!6G z9F!3t(m!f>if%|bsr~t1wrWL6`^g2Rsgs6mBwdY>%6i&JS{$*DQr?qpZ}ZL3Q)^LV zJ#A8GQNOV7N5ivOP${+r{*tv~I!SsppoG3TS*p(LL8NS~^vykYzUmq-$kT=j15v@4 zqzNs~lut<+q5Wa9qpMsVz#wX5p_e+{C^feG-_E3=4?8y!daTTjsO|WH0XokuEmY#z ztbVsn@qI%TIP=p~Y;@G}&C?z@i7`Pz9iboQ-Snoi3)JqPf-j7Qv+K?*@|aUDG=|e$ zw$`SHY=#!(a|}IwH#CW#^*E{Tz&_TE*nl2#S-fU>n47-SjC?jj)bo|I>Knq)`-~pT zly)zN^g;_e-Uo<$E(&7*i9ZS}KPqsya9!VBuHw-!|JbIyK7ko~(Y5Ze2fDZ}RQu3p zXdg*GN8{pniIjZr=MFJGncOZ2K9SCj5x$Nr7^2jKWU$zPl0s%|&)4E#*!89dyT)sm zbv<N5TRK*}thB)Y@&CT*l6grQZ%eagXwxG*OE|Q)C#D%O!w(<n*>mO8Cu@+YXC_1` z5kT85eqPpPF7mX#%iy<grfu}-kQ@R?aSXl^!kDl#+S&?Zj2b2SuuKjL>E{=pBqsst zs+;2ob;zvIGM<P<ktD*01C8V5{UO1zfiEaHyyjhHrW}A!9u`R5`hk}`tG%%^9&sG0 z&{SZgnTBxza`>M_X}(_NUnfG%wmV=9%&x*ISvkeM5gKO~S;$Fm^LPo|OV|m^)=Gmj zD6(OIO{%3tM@d@h$JsPv9r@HRHrv<}>H5)>KuE^iy`b>H8t?|i=a9Fd$KM%k_&@G4 z^NG{#)K;JSlp*7c;PwEB$v3~a)Y{~oG0-g1CwY&f-zDwS3CT^!T}E3tBIDs<4(hcA zaE>?MP<T~ypLq1&18Zz$>?i=9>~s}E<{e182dy{iP4;WxI+DoDTu5$R4CBNz(o7NR zGroZiDxu`rAHfg1qshA1L%Y3C7QyCNKV$NAS@Ab^gou!hnc^`P{5<bx0dyMW(2iXm z;&5X1iu<l$krdZFw@GpDx3Ui1h_+2qZzhKI+4TK7e@YzN+qn_y=fvSUP<hSKK3WzT zh&G+RYSWBiVGzH4_Xe@gs%4j4+snGGqc}?%g@~nPG{Q4iON2Tv!2}kluXowY*>Z@E zo#E>j`iqhO?POKuCnDn|n|<i%eax`^_z2`*ue)_97K4$7?s02(jAQ)OEN?NWNz2na zQ0RGY`$kEv@##jGkWLG<I$3$&ay5T}U+;&qhtJl&rCi=5+KQiaawq24V?z&=wo zyvy&>f>_q^==PQo+8}QKS5rF8$|A#=A+)ZqjlIaPhafNiO!Hc05nV-|k~t>`?f$Ql zC}00B)MMB#POG^iV7{q<YCEk8sz?HO$N(0prS`8sMr<5`wt(JKxEu#^vS5p2UvoM{ zn#Om@-<E!WM-Q_L_O8C(nNpme(!Uc9#sd-Ig<VOZX29FS$byw**_4M8g8re#UsUqn zvDqg=vvgS+qVDx)hMb%>&B&7&M#A(_JM`*EC}b8&{hgC;utpQw*r^(ZwX#0<=RS35 z4u1S`O1<Zjq3Rd>MwabevyJPIghty?{$_;wn|Ckr<}|#9Hp+Fc1B2^;ZZd$FE(vUo zk4G4C!IlpJ%P5M=OxU%b;b~Hkq>d`(B)b^5s?8D!vsv%F&KhRE)EvIf0M^-2j0j33 zBd<9kZq{NJyDl0ud6w+9-;j!K2FJaXWycPIPeguA2}Jb?&Jn}_-VtV-Cf(waSXO=# zFHWUzU}@}CXa+1k`SCwvQp&9u|Ni%VronOP?iD*XV#fh^4>Pomj%L&)j!tHQ@h<m{ z4?lU~DGTp|92xTFE0^F#3O^=hrN+98FEe&ozS1~_6SV6-Xexg5>k%!jK-Q$XjB1_M zs#=ltMUmn}Ck@l3F6$mcC%V5@037H2z@bL`I{k!TF;yk+nQN5TIcofJ9auc7hFA<k zi`UGOq_-$jP{-(r>YYh|KSwd1(BJRh=eYs(UTKf%v}QyOD`t0O$@t@BG}0<00l!#H zkfFd=y#YE_;MvLM)H_@FslhIsk~0DK=o4DyzDN{?c#AUSk?_B5af*BZj=ol|S*zG+ zg^t!AsKvuLX&q%GpoF}4nxfYslHW*sg*(!F4l>Q@!`i>TQX0)XB0{>|EY<2!iAYFA zwvtWWGR2IS(lX>L@;szQnH{C82II`E`$LBG|Azm4y2mW5SVH3HdP+!kk-KtpKeag} zQg5g@inP5+=a1NmC5#FyircYd3x_cU4c)^jtprd4`gM-!(f6n3UDs_H#TeA`+=%d- zIS>(McOjxImwSQAZkZK$A#O9`9p+Wvuf<p2w^z{x+_(;uevLX$Hq7qiIzwddnk3x= z$5@vh;VjQ_Zkd2bJoR!W84vGU26V?l?y@*{_p&&rB`Nx#ldXCAV^=r5XO4$orW-VI zk$@%7X)VB5WxKBZ-V|fK1mIg54egtEi+?+BokshFR5f{T%pv_g#IHv1#0bhDGZA(y zq&UfRQ+fVRbD3mUjN?FX->2{eTu+?E^Ypg*{@ad7$UB=~lt>_vL)?~6sS|yd@w~P` zdzx`QUE(c!D#I!IP(u|165NvD(Th8_S9S3T@cbm7XqMk6?s-%?<&Lo++UY;bJ>PQN zyXQ-~NV)Mq;@wBKe6-8A?+mOKe3!R>OSJ5-Xg!F>)159(7c2kgPL=vq8RC7)w3+Vm z2%9B5nISj2t%OG|o)uP3w3y-2U6^K6WJBRwS!Ww+SBbD;NR*PEs8v#-H3n||{o<0g zmg7Lk#}B<aqFi4~b-zTmnO60r{=dlpaBDImAWzDqu)QS$wg}d8e)GS~ehrOHANA%B z&!pfcG@37=7%OHOjGe*;)WypgOw}JE9d04bQ(r-t<v6FJt*>g2knk1PaA4<!P`dcS zvW){8W@1n;1hKeC>!%=bpOFB?CI~d5dm%3-^{35IUgGk)%_KF+!RuVdHeB2GQ+jZl z6wQ~w&Gysx6Ho@9MrYy8)UpX2#^+x;@Gv6nEe*M9HMehoxqGE+%BbF79T_WXALs4f zT5w-EZ2d?Z!7FKsW;&(4Y59Ew=nlS2t00i>g53T7bjjQ)yk^@g0=lM73P;#8eYj7x zo&R?dR~HlFv^`GxbpSd8ur*t(t>{vR(1IjZa0D=8r&8(@D@{`xfbREWj|Uay3O{oD zNN8;};9VN>;<TCe+TBidLP#tDiS`3CP_BFop#-2q2^N=t&-RM!ARtE^vhn_5h|31G z2ZmGV2jmhCWd&F+(Pv0$$(0XaZxnV+)iqCHNFHhhD%qd!BX>J_XM`rQCgiF5*iTs3 z6#z#0jWS0=OCvjd7KP(HWkgxK$sWTja8r|8*<om)1RXdRD4ASn<Os7C@bl|nP@c#| z(_TZslR7;+`(%Jv+4-0h^AxsjA$|J9&}MT;Ug|n!?Ut2c3bb{aqj74Dxj{k<FY=)) zoP}+$MEIQYK1UF1+(x~cA`ZGaMa9jrDfv5Gc`G<@Y8rlWND4OVD!7h;Dop^pqG?Uf z0ZylQ-T6EtSW$H{G+Xe(0X<B$DA=hJz&upuXIZYg98lY@2-Br`7WIlkv8{=M9N-rH z>yKk=DP{Y5Zn8WYTh?BOW-;GMp`@!)>V?IMZndtHOjXwWQX6ZC8GzDlMW4`6n#lJl zQ@kt-_bbX${GY5%$C#%;n%iB$z3}oCtCSZlgQQ4FC{gm8LyE`zf#PXKj!Ai6%DX{I z#0S8)nDzhuXH%%yZ`NkofgDo0?4#uH+Yd%Eafp@EL$K@%E^<A+HafJ;Z)slFbub&0 zBs1a)L=fM#nV=R!Kx&D1)ByFKlhau0&WfN}u^%-{?AykKECG9J{_lUb1Q;B+27dp| zQzLM3=YV5f`?3e`$C3Vcf~`N`|0kletzw-(u%vz7X6^Ic20#9@4Huc=&g>rO(7K!| z3q~Mquz35~U-7IRbRDs5F{(Ud7iyv;&s7+sSNqJbS1p=Lo!*=h*c_^1hJ996sH;7Q z=|1B_hNaM$Kev78d4wk4xPK7S>$44jw3&i{WN`W;R`)EdQhJWNCdaPp<8I&hLveps z`*2Ua3^18#2Locu_(U+Ao)%Sf#`YU3xWyzU&N94?;bcf1*0%<l`uBL)MgMwPNzlIA zj~TQaRrA`EMs6r;$*tErLk)VMjQDmQ;5}V+aOz5jyIo06V1?`Nk$sx_(2T{QO#jQf zZlq1~jI}L#>g^-C;}JMptRXA7h#*y}d+S`I=1w{s=~Ejun^LAeskpafbJDRp$H&l0 zyxcq2_*h&m3_n*@;QE&2H2Lc$8gL;_%swkzia;h>lE3nk>tQ4B3~R%gqqz2wjSxJF z5J|*|j;Yi<@f@y@HAV!G67(nXN~;d^f?QC<l0^Ih*EPHr<e#KMi!$W@5<s(~@=Eb{ zQ1}SZ-6Ewe^h81MXc2h8KhK|d8~Jd6ocsL*zPsS|9GrT$u*?`W{jMn_J-*-uhfh}< z&yU^#EPfv3vlD-eLe^mDxC=mjS6P=5M19Ks%nU6Le58%p|9p|ZN{V;P&pT->bVcX> zIjm>J%k8QwHtZw?bhzoYQTNV-8k4KT&qB?Jwrs|FVeeK_t+{o^;>uK<(A4Tn>BER( zLT>ayKTGisj=h7KCw>;Qv$&^`b;X<NMB~uAcB_AOb#O|}XtK!#>o0hA%9mHVBTiR8 zJJU*RvC-ni13L_#an@rrT+WR1q{2@ex=yJ32o~iaE`%=b<DDPH{6{xV%|2KESa3bN zT_p-YFW4zvy?13n%gKkCoz}kmP{FAQ0j1T9A?=wT@)Eh$%;A{42_Y?zVh^9ZV)8u# z;s+8+FyM`_>HN{s`v%=$bWx#muwN?uGCYTQ(>%Pp#mU<foA+v^S0qEiH}OfrP5q@K zz7t$iFc9%1&f$3_A1U=a5?tM9;@eIj1jdJnmiZm*mtYW$r#n-2H$&bdsEZ!Vn9mYG z|J+1UW^^T%oN^pTtYg#JW~w?eCwD^Z^yS9h)4YPA)`p$8a@a4kqKN&Xu5^LR_3zpw zQ_g6ien%^%JjZ+T4EKF>Fo%jfwvLJK;_Wadad5vB%^k}W!387?O~KKY`z|RyR}sZw z<KHAwH&Lb-U|DKrK?7^yKcpNXvqj3U*2Ecyg(<oSmp!ZqYFN~YicbNDFfhXcStg5T z{KdfW(NOZIAqO1oGUTg99$rNJQ#~}6VY#j`<R#yd9sBk>KXOy5t?>p?@2-7{v^E>- zK&Sm4C0oKzBUJo@pLm4RrZ&6RzAYuW)N0V$vCpm$J0I`coPZ}Ql>DA-<8<O|1Hci1 z;|kl7ZfYyN$PgN%U)_^oj$IuIYSQeczssT!I-&}{8@`Uln^@mwQ3QFl+Q_<v+17vi z-7dY0uAR)ty<?HRC38bB11rtZo6^yQX~tt7|CuS1iBgxP@wx#2ci~A!k`HUbV7mqm zfdMPG@+RJbd-}cOr1;G7r!-xAsQLKSjlK3-v%B?9dU=&f$*`7sv2*Hc@YeBRx&;h) z2rJBIeb0Jgq6SD=>iWXmtx+@64LVsPXIKK$ZO_VhGsVi`q|YqS@aJaRRF$&UlPrIS zHZxCY_{8yWc4VrB*YIfWQ@?cp5YInT3K)i5o?i4&sr@yz4yDg@m8%U{A~|5ufON;q zx}^hinsZGbnkqLlR%!Qy>xW;^b`ASSeW3yWcnuc*gqMsNK<zkdD#BIyNOSE;g!<JZ zT`xPi(F%`n>!~Wmi1nNjWEf*LVshB;#L?x{FeT8<PZHE}rNzR!YrT~erkvXTK63IA zB_Idk-1#H1sZRMCRDCJ|^Q~(hnbAwVnmi5e9bN!17t>R)^Hs_zx+ycY9AQfkw9-K^ zA*v@%V;3mx>NB&3e{v$1J}6arT5+ZL7;?n`i_f{muarZ!9QqGE++v)TqiI`%GX=>% z?7ZUOHloe-EQ7nhHv<BQ9T|EWk@_{XnvnuM-GloQX>P4O4AH-}w&e@gR$sMt5@H7B zAMJaLYgidSkXh3(<p^Bs^g5{Nii3)uQ}<H=>oO}CHMA-MURZ5RSx(NWwJ6mAKPkSo zyY1H0Wc;QQnptORo|_dfT>I!%NLc@E>FDO{Z*}vn0k}-BctUbp6*IZx1}nxxaZjaJ zz!s&Rg|Q*&OdDMT1Q6>tPMfqLSa$$56x2~@kL{aU=b0V|{LGy$&)FJZf+cx?+3$td zraC?!tNYy<*!$VcBn4>l)}%8r!=C@C(cBR~_sJ6b8|pe7gMURzvYU;U9>SlHcJxV7 zfhofM=EAAvvW3xc(_;%2Ql@xi>t02XuGa0vS0{YM>72i%=7we+V5J?bA^L%d&@-6+ znsBGWD1%-PCl;>OK%V_S&t-BYxeg>jRZ4;EN2~;Nn$iC{W*+==>S`nbg0Z+;?9>bS z-X*i@Oss$yE>T9kzImNcma5`zCj~R*zHCcbc+^s5{kBJ^-CwhLe=Q_bxVC6g&U)S; zHEW2G2GeovN9|fr&xjYjwnZz)I#po$+KtmdK2a*YZ|7sk!HU;Pq2-27y5(73#)#{q zuh;8X)wrM6UPZy-1UN58UWF<8_MZAZ(eO71lolo-yk*GFw><#B{^~mP^564OLh3@2 zm^-+^ervA(=b3xXjH;m&>q$72g=}rPW!$g~InS6zrL@4*QUi-_^!B$9Xe$j;QnI<h z&*tT1sZn&L|J1e=hKHkgv1_Sp*NPM@x)Emo*hgz_g?zk4DcI+O6CrSEl3Vx;1S%hU z7b<=T#>hDp4j`b6q3IA(mCPCVY<|2{dfs>eO|-^`uBT=4;-?R8uh~1RCRzb_X8?fw z$xtgu&ZFGc*YdT)w-FoXNI)BrSjpFZlJLOz^*6{drttDhk0A=D9=ffAS+@UAL=*XU z_=3CHl`n1D3i|lLLoDQ3m`%jiH(Y4=J9&Gl{qD3_Izi3i4+ic2`$iXSvw1iFkKFe+ zqtCQ7UW9lBmb!iN)^H?>4mI2XP7O!#2*|RSkMnD4V7|qRM{h?!#N%D#+2#NNuYCjD z-DY3<Jl}-pbU-yl3eSv~zYeT#jfhDh$%xrFLwX{gc5Od&gogNYz|B}|(+6frx$5JP zYJweNBf7_vxO{s)1vq+mhL9GZa})IXQsn5*zYK|VPp7UNK#r+Dk)rHT)Vv4ce6VpE zpV+W)(XZhi2Q^#ps@l<3n){zPaUTVlN4R4k`_kQma<MmqeU}@plzlr#`@GfyUE5?6 z+whXBg&=Ufl7Z`l5aPmA|2b1$IhoJud~u5YPK$;;(j}iqg_1_IqTZwyF1NlkAfQ)6 z*xe2u_fOr5++DPS^twrL%BCaR?>_}_+J^V+D0a6T6djKI21SK*>H+s^R6MhL2#f{3 zlrrsGdsP*lr)4x_mo7T9goR+<-NAL%3OdR|y2RMo*6dh6i#*ie$eM&eMYpG9pOvbt zVe<VjrdpDlDRG$pUTbd(Y*@f8nxoOt6nfz5d7m18jQoI~Z_BNON!|m^Q*C+5IfTrO zb(5X;5Q#o4*|FuP?V3|5dOwK4aH?cw$1}mYsxL&(2_l~-Lbg2h7RHKuF|+oZosmXV zxKG|kuTWR+yC1-_MrjaOvEyoatqIcoPr^Q;Hmdu4L@vMF6LID*>Nb#;Tec>zZdM3D zt#oU`+|6Mr<!qepQWkT5!q!??^3QQ2!qb|QL^B5hSM0yVLwsugXKHO!i3nHklcUw@ zmRnL8y$&}UehVKy>H<QBIwtj}dbrp(mM%VgW*a#;l>X9hPA)(Xyu@CRdg|*0?Uafv zm3nGNVjX|0e=^GoHAluBKWc$4=-rqIPD@j1TDJY=^bwM4wy)}q(&CsFZ>ON2M>Sab zN{X&?m+LL97&W@d5idDh`|~MQ?iZBxs`WW*lxfLC?a5QzWg|Kgkq*UzMPZ?kTvW#o zwzVIsK>TTG&OYA|$u7Qc^3ZuA@mwv#BWp7(x9OtFWp}Wl;5Iq!=`d;Qt$mh7-9WIW zqc&$6K~^9PdwRP+?bBajQp4U(U}=p`4lb>+rM#P<&;|!b+6u^%6%{lUwgbr7hZgD1 z|HB&T7~fJ&Wj+?vY)XtTa?NC)?*)S{-p*j*D=#sL=l=g|I&$(l#c;ge$2??ee?hGe zhSw98Rqxs@!xj4o-Z&M`oh~)N)h-<cpCrg6gdviKQU_BtSEXu)B28zB5%W(5MRR^e z|B~LL&{oE*yX*f1$m)rKutK$4J=EB{*H>c>I_$G=D#?yR7XH%T=2xwgr>tpgDJ$)h z6)XR($l;U+{9Mj#DYAx}zbK6@v`e3`<TqlA_;SztHJaH#yz|~_#s@^SV}qJ>tQMYq zy!jSm($}46+xi*9()*+L2*gax6^I_yoY%9`{bG$e=I!bs4@aSdfyl2bEn}ZU+b*pk z=z!4Q|JG3nXd~=Yj}q0>pNgGz1bx#^<CDZ)k{A~(CAIlhB(Z8!ZN<`%Qc6G3RDt&i zq^%Ow(&^zvxk|66+K4Nt(oaPN>Hm})b$(l|Y3Mv<giE*JD$!`Fi8)Cx5#lupK(s6e zNzzPa;6+!G=CNS{&<of_o*fswt<VrRGX^}B-in*?ogLX2<n_b?p3H(VYfYekhWhBR z7-X=Dl_wnz7f@I^XmWI*Z*V}b!zs6y7c<^`<@1Q*nkVJ@7G<F7Z(Wmeed?^Pn{X-U zFv+B+NiY}S;a-oR+$*zLFe8=tK!1a142PEJ`}35li!1Y)ANdsjsW}!>@Q7zRb@8e^ zm)IUsAsU5oE}gLpmXH9)f_v-`fQs-tL|*oiZ?Nn}>E*V0f^y3NOeB0&LQb9HgZOu& z#LB}yS%4IhWt}7==_T$cM;Dcp^gFSZ*9CkxXiCU>;9MQ(PiS>#zH_e4#Ci$2JuIw_ zH^j@S8I<~?K)gl8n^+JJ`oK+u_a*m=LhoViH;pAXk3^6qs)6Qi#Hl+q9=jHQjjJ0t zp<eK0lgyrZ<p`BKRNw4?qfjENa>hBQriT?zb~xB#krPJa52pt>y=IWtP4-C5Ahhx` zGjg<VlWxt6Xt3vcE>7@t=N7CigNz36T%%Vwa0H<DAGu{__5ZX4AIb>WUJq1dlGOK` zK@ar}iT{zxp~{_sIFd_j^JJQfY(}eYW-R8rH)9wLQNvfWqY&69GRJ(#iQR<aVBLYm z8FF*@IHeD-<iI<EbJH30WTLdxc)3F@38Dqa3*XV4Xys!jy5LD>-Z3p_d@wU^s@n0D zbo$SBR#QR*Rv+MdW|aEZ6<Xi=A43i&Azwo9wqp(OK8?+5;WxkJr%4W%DBo@`tR5C; z0ef(&l|7sRUI(itdi-duMCc{PGp|&jeA5TA+?((4Uj#arvoIybS4F5Plb-O5X38zu zS!VvC3r|3dR;9PN%jS=_q(vouT_KJmQu-!<KT-(8WSgKqY_BbyW`4mHa^p>aKl<4L zx1ZFMNHjY;XY+YN!LLnS*JqTDINbaa#Y~ey!+iwE4E#i$7DE-}vH~q`TR<O{PkzEr z^!w-3J7yjt*8xZRS!(<3Auj4%e0R`ge|Iy>0p;r&rJ*==BWNtP-=tG^B>BlnUB}D& z)TQH>%TYtY7h;Cyw=+7jfE%XL;n-N9+Z2AOWH~)3Q6liG;w`O9x|GM1fZsxDZ%p(j z@)|?Airs?U7J(L#=>E~E<g_k<4Yjxl4?6~~_@0Mo52TC*;ltQ=Bx%S*YYCinM=vtH zBQ@J{IF}7sEK8mn{m=k(&({s#n=&44Rp7vyLefFGPRVd}r!MY4!hW7a3wv?*ap>9U zl~w~J2_dGQB=TvC!>X|3m&G`ex}o+MXkjevJ^1#i)h@3m)(s2P^h!`*QTCy7AxZ(Q z+auI+vD>5%GExoNCk`^fhuw3}`3M5siU`EdSiugY@oA)01Qpq;fU78vgp>9UH2xe$ zouqz_yv@Rxfra793}*c%UmoK7LArdXH&7@n_NhFGB$Jq@MP^_yKNWJi&qVs^vlq#* zf)J~(llTsm4C%+2JPF}cNZm)I=FA%AY|@xps}AP#f$XF*nr`ifdvW*Oo2i2}W3Vgu zN3I|Kq!lbH<0h<TJ*u(@LIt0g%OXqoT-o*%-wWr<M&OW4rEbG06Z=7Pq$w8-pVCtM zBe?*Vh%Lg6Z`aaIJsUAvsdtL!Nrfy;c~;}>RFOmJs!O88-Le}9J6g-smbEkMv9|wP z>A5*e=hjo4ziqW4*i_H$8d1E%{Xd$^<VtcJiGr$x0y&S^37vZMzqZ+T_NlTE1mN)H zFP6bTqe({EC+XD4^z5U_dLmWKw^lFS_N{rji5=7*MLcFNM56*;IyMt5n<l|Wy~M+d z!7KyXBl{i+<d^1t#y1pkohV$Y-m2<zeC_@gWig8-mS)o`{?a~YW&{`^A;Kn;qU<s4 zS9+7nRNfQxe54e+HD<?djmes-0n2DlzlDBw{;L?W^RFnMAHU&vbFFyd+tUAq?ao;q z?woD;el{n^*g%Xtl4eiojCPC~Se|(@-dNTy$W4@VtC4WH3LaupC&+<ADOiCBu7Rtv z)CU61Ym1xHw-*}SU0`&oZbH^KHE+M`=ZVJ*5x@Ouqk@VloKXx_4M5HcL@;mkox zBa__Ft6+Q0iC|kX_E|>)a#cSDgg<tH_I9=hfjquLX!qJs0=EUCW!D=@=pRH+$?X=E zoHQO4xTQGy5gcwc|07aTT6%C5CwYs+b@DisLyc?4A2bDu^tPQ_`R@$_z4qHKmUQgb ztIsQLeXCr{*!+a%*zF_RrA_NRX~-vA0J{|<sj$!B?U7c7;j0o-dwhigV9rkfyiW-L zsx#DP=th1tMrl482r2P8!!5k&f*LG!YeHzPy`_3pE;}pacAG%uP2{Qa=DsD1glt#d zOnhXLnj$jkNH2=1Rq{&iDOHr7@T9G}@wPE)V3cJ(1?hH5LTq5{S(zLKUMP9vKANDV z2+ZO1^b-vza76CV_vJ^TC$~jWPafy<e)ZpGLZ=}C^iP&*)zq@L9>8-*q~;2$HhqfQ zQsokgYS$ru6CoyOWD{*0b?I~FC!+O0<mZl(*-mO8@_#4VA1q(SB7ncU#Jb(4KD9ZH z0<2idp=en`f7wwuxmBLv%#@+p@^HPn&d6Z$SPMPI_&t^76V{l&w_JeE<OYF3$KkLZ z@t&zs37lEh=7lo>y1*fVouI^wp+tA(3KZivM-9*mge#aCzajr=uy!=angL54n7#t} z-QxO`u6zkqb>FXtTTvhQ$rF!8Cojg<hO}38fdUspm=Ip|_c17OFg|3poEgrEvqWJK zgjRGV2<JYq-Xe>4*;O@`es=V?{OpA%T6~?6ogSgZroNIEmKbHCZp@a)l0NNPbLNG^ zm;AMzEpm)1=|#&;dZ8_8(=*8Fb(6Icv0tJ4R9U3R7%Or4{F>*<K?rC{$0qw$5p^H+ zMmF7@JO6GQu}m;|vC<W#Np0ub*B9NsV}|guek%o`on?pKtgm~b_c#RE_L|G<+g|I_ zomso&N(0PO57c|}60|1^_X|ZwyG4TzQm3`<DXrg^Fgsk>5u{i!ie+?8c_6(1=iYd7 zyl9uOgp|wN`%PzaH+lD3K7pXWU%y<&ebOJY#dUD57L4{7VN|j1F-6N=1DQE8RQNZV zh1O^8$H>BsqZksIjM^T-+Ek#Cq1{?KQU4O*zS-8xZ4FT~fc%g+B@p|TgBBnocgob^ zP>*~iHZz@rzTi7o$X$SE992m^T55>jIA6_K09UwWyiduj2Ihk(nOVtEDa_g%3Rb7Z zt1z-F>SkP_BXL6sYuQm#+w$gg+6^7?Q*cG5B0Ch*`=`L#GEsBL+A=E&tfNqBV)6?s zO)Qwm!@|i&lf<2!Pui14W83Uy;hK2A$n;!_zZ?!)Jai4_qAXl%`iVf&+^6`0HPhOE z)A6j2;0bow5=nOxv8TDzZABEYM(RNA<pXL(<_ehY^02Jz&!H}BpA<BsV;j@eXAT#q zxn9Nd*5g#$QS%Eh8*fr@yoP;4+tsr|$6Xd2&xHLJ0}7rr*i&mKv$e{kv2Y8;%U*bY zr>}S9$U?(Jd^Tr(fm8~dXfE<L(^t#h2?gf?77hky9C8#T1hIY#)DpE_*<tE+1?-g- zI6r!1Kdn?q>oEN0@XgFbE3<M!sOp)vb2e0GRoT~f**DgJ?EO=#R4KdsNKv*;k@t4N zJus~5n7!5tyzvZ}nH;{gL+k_AN9L*X*NocQr<H6$bwCJIXhZJRh60I5wP}@6&(q_j zRW|dJzEEX45dUQ9R)U2l2F^7Kk{dy5#SlwJRhYFSco69k_TDcBW<8OflQ-Kfso$0* zTaLHki6TlXxZ;~1e%quhM8b+zBMHT>wJM-GgDEz}I||Jd10^ZM9968Fo7u+@_MRt> zQk$0a%=VS^K`dGLSUL*-#y8n8P(iO|Sm6R&XxBbksM|thHZayzR6Bj9+pV;>5opq} zMs%lPpS{x7C$nc;w}7<b-cnZcFMf4C-Zj4Y7(5uM4J7w(ie}(e7uyR*l$3M)9LEo9 zj0HwrBx**II<&K-OZ(IzqrHQ?PXA6pC3Xl9j35R1M3k;DfsJAX*V-0ZnD9@@dN|jC zt$WtW2+??52V@GS<jwc@|C}{f`>;&v7p77M)yPA!Q5Bfp_rt^<?HI&MnC*mBr~OxF zw;EAlbKn0Uc=RAX-8O^xPz7_xS3Wc7B9<>w9oM_Vl<4Xi9-MYf(Ctx$9Cac4p70Ri z`MycGC-=!Fy&%8YN#P*^?%qcZR`Kw8Bljk`yQfxKJPwS;%_r9}JnDdP6~{${CzCmJ z2KmGnMDq=kQW2;|sE};gioXFRJpzJ~ZHb7cc}Di_5&*^ElRAzqRpmNTzKChazhzCD z)z3bq{U;bC6iz31>r);(6&`VC^V1?FD*A^l>J^VxTKGRnQS|~gyrp>hNH!i{sAzlZ z?JAxbZRLwOU62|x+R9Q##Q}ZSPQLu{fOy~(aeK-cq3=$E^!Jl&G+PAOQ@-==75jpC zA~hboJ}o#^vxc{HFVUFOu8dw>sRVfjNjycyYYNDxoT4hU43l_rbGZNp{3t|)jN8jq zs#Nt!s9U~FaI|rxD+n?uTz_WKgra%UNzHsdk=0;DVr$AqJBeE(2b!qwq`u+_ARcmF zCF!4lrGkCLvK;j!pTItnB?~If{SzDZ?qwZ>8#Yn-xpvu$*I*d&D<5h=3?b%X>@q1m zjR(xJX_k?38lBw;z*hmuam)>aaLf8UW5?OFvYH6xG#yH9DSzLopL%}`#&yCNN<hir zP<$sIg<SKnG=ygge-xLo+oESI+%v<Zyt9?dTVz1=77|`E%>cpz?C82g4%`K$JYbcR zq?POhHM&M~Ks-a-i4lb`6Vv!m=8!^_1ld`%0oIl;^ic$<H8|XT-@KwybJmUHdcxVj zcj>NEJaHCf3`+kor^4sonLd+mQIE?mJS47*g2WJ&ekfkE#r}v>w|i*Z>mPF#+Z|eZ zSqINDxko=0DE<qP`3>M9B5wKAK)b4mJ-|!$qRe4tYe<;TqQ^WZ0-D_OlmDl)s!3?M z?A7b$o*PT>x2f;!nZOVt3uG{(Lt+%1Q9Ws80W<|<jS<|%Gc}w$<}1iA{BdVg$*9~( z_fFp?pM~I&34TQidZf{8g+g1BzO_%wIJ1Uk2}98<&5Uh?Vh=iRN+xXXj7aj{4z*Dv z?O_6p%6T;4-AgI{Im=Cnw7Wm`>|@fG<gs}~q<n|Qw41E#G6gD*o|EkFsP(@Ns5D0c z#S_f>3;qawJDxEsz=;sG%yg9EU)K<_^2%MjPKlLaQx~n7CIcf(&*Di$m0i;g@T;v0 z<)dWvxZuEh8EG2Yj^%8<Ns7wWnP-jC+xwkSZN73TJeCW*-v(Xe`-#Z^lMG@Sbs)zv z?qn`qpe$<HN3UdF<7J+_ZIGw7versdj;6TuI(XdugAsc3fBrqS%f6^JE)kyxeX+#c z<$=$2g{kom>;&0PXG*BGkCwOc16VZbDR|#3>=@iXt(@<07u@wP&1I4$Ij$tZeVxKD zQ2B_NIM3f!-+$X8YRp|Yf*=7iH66AUoU)wb5Q!JPK=F?b0XF#KPi(1e%ux4G^1o9r z*nKrhArs8qOU<SSQ{E@;dqs6wv;Qs`Ik=eKWjJ6Hz}qy;QPJE42J5E!vyUpnlp!3C zNsbD?B38lezuKwC0?&@Juhdc7wcmVY1pxVO5-h>A29%>h^}gUK^XxvV6vsNj?b^Bd zibeZZ7llo)(%_(6(W7M>kO&P}oav$BJ8jl09rS8n%)h?sEl9?~ddi`u<SA;<PxWDW zT}|~XQ4F|#)GkK2r&;H-*DIrMk9j7@Ff<B2VQ^O(u;v?+OPYm3e2C`6u?&aI4lJMc z7$iqdKZ=igNy(th15x<zpUhcom}>{%|5wk=x3+SgEb)Oiw^6{Xy=O26<Pf``I_Z^n z#|IuiIkY0Z?qf*El?}QB76^D2t!_EHuHq}^u4mp>F4gM3!KV!it<Zze3Yj(j(`_^= zl4qxCVsKS&ddUd1Zx)0CDFq2CeCb`*hl(02kaM#i@b}DzMkmwt7`AE(%wz&Z6z<_X z5NM1Xfq#!E8V{uCsatMQf*Go5h5B{#$BcR4Ul!ia=zP81l)Z}49kQ$AoV1`TCC*{o zhDS-FnL59-Yg+He3|#BUxa!?o6=R5~iS#{HuT$(PH>l!n1Gc+;GqTN<c1%R#S4zGI zZb&aoo#)@G*!xEi$W}MomZi4Q__GmQWqvbAK<DFFxbZ!$8hcb3`EyuAn;%^@A2h3i zs{@!}6`A;sTTJ{0G`wIIuwbR^6BiK&qi&kegN(O`zdR7LyxvHG_TiR<Tv<(EO9}2n zXI2ntkWy8VqU9_qMG<NR>*jX4hN_BbVK&i^w;2AjucvaG%6HyRA8+{PRJ@Hog0VYF zMUzI=**Ev43r)1D#vv@#_$`;xxq6VOW*?7f#RSH7Zj?^NKa7L6<FHEnO}f5(Yciz~ zZN#-an<<@RmDyO1l4fHUwQEU&C@slri?uBo_YK+WT4QbkR#XbUD08#qvCjg@ZLvwA z7tAHh+{;Y8Wv{qG4_LHZL$GMM%u(2~T}EJAX@?^b!XehY?Nrkc;UH-6j?HUKa~Zs2 zZb{JPnzm)@$CE|0ldr?Ix#d*sqY%9e=W7dIr`6ZonP|o)`(@z|ppTj}S)<3;YP#ZR z`Nt{qd*l2y$QgePaw00}CzeeIy>>hS3-RGlc`uz?rAh~`Y0it0A`wIF4QXmnTe<o3 z7C>lE?E7?lEZ~m+I!g-WMt|}K+?a0efB!t+C6?ji{=m@j==+J<w7*7w>+Eb%CUsP3 zxqwq*v%k1+5Y~-7k2o>*oCvSN<v|QadePOsU<A&oF-UoIfkzV*6hJiFp*DIg{Hdf} zzfWBM(Hhzuy57TSv>=x7jpFnlO5KDQ!UlZjFZtn^4<Wkd;9h;EI{=}c+lV=Ao)L3r zK`DPLhVDcqQ8p7yp=pyUKx|K<D-*|SjSy-<^6necC!qJq5;*SUU4vInzlAX+wlN8} z$1G}3oSyvzessRuhLU;~Dp>IbjEXmU4NF$dQH^tb-{R+XQEd&ti{EiBlN{usmp}C4 zbW;<^hwjs3>U#qZGV6Wbuu)gAz0x&X6av7ond#rFY5w7t=x_JuiN))fza^&NN+{84 z_aX5Omq=2yQ2O)O|K7PX)m^yS!n;apMH-0G5nRCN@ZoJMn3158v^q6?E$%(OPW*R@ z_^4$Uo>G(K`k?6=5g8WcAk=VQ>*F5k6SccI4h39Uao#StA)Ndap6eJ~#l^FYrmp%3 zK%z!J6>R51`0S13D{^NR@i3gpio@RfV%Cm?WlESz3-D{4ZvB!GoIqBn$ntz~T{}<7 z{!~=YwOXF)(m3DO0r$L`TCXSj&aFh-9(9hEXtJ(+#tO(nF~@6Q$-AA)7;J6Cs$&|_ zybMmG_grRISeTFADknHr&wcusn0?lGo|)%;yfgdWQa3~a8p=M${|a|~)5^B1V2z*V zs*PHKfT*}pA!6L*@n?lro>a^w3@3v#!AG|TP5R&56Pe(JexId;UiML`trW5bM0kFh z9($C9wjTF^h`#dfuAT6ddeFD!2uM=rcuPLY%e5LH)r`0d9jwsCP?IM3MsU?Tvxz=A zCW#gPqK!s_UDCFEgT%20jY%=vD)-9$li;wsU~cf+(aZwyua>Vx3*NlxC|&cnAoep- zlvjCfKZC(NIVEuJ$+U|%1S##lAr>q}MY$G=paM(mJhk%vt%<>DWUVP%yd0t2Ii<$r z<>gzQ)OE1}Uq*TNL#JBS@EX8YTXNEZPH_>uAA|)|vodtb0!)L^VkWvif#Kao$lMON z#UpKDaq^6*<#<euLeGlC{URv4;u0%R3ZuVKuNLUgb`EI=HXxpoBmI6jZvSl)$;`2N z1GDhkQb%3RocCs*kz{6{UWuaom$mp3msBK|IC{Y1)(#9<dw1o9ru$R^Jj4w{$bNpn zqke}FEXTHcq4&1$LLIny<(lC>?FfBfzMuLYg&FaMmhX=Fm9H_EmiVhWtVKD+dR`2x z6HDC0P(M%qdiCI}ZRaYp20@8rn?Bw=!_zARD>UvsA2hhmPx#E1N;N|*@ByQv%@1TF zYPdvlT?HskU@BT~daR`3yMDUwS+j`ho!c@CK>4f>`HgXQI(Dwxgg3<?XrjjRo1rI~ zxD0zOGo+owRym9HIjTAwJ%M=MZ(v(oi(|d=Cg##=Fb+^;=97Xu)ux*#R=YvcGfE<7 zw39hE06abgw!hy}x+!U9STqx}CINT#Ru5=lhbR7zHT*-~-Z9;JFJaMZh@(az*tlCj z>^CgnbUdk{Ym6)mB`kWV)qWx^z+(KRgQmgDKAt{jef>O0hg00|#|EAH2#i*ErkyRj zl3Q|eXq(&7!TtncU<Phtr6-N1xkd(gM!S<DF-Q+(UfRo#*6?^k#<CE#@+5q)Pt#Sr z#?+iwpzyyGF0n;Arh{=F>F)lZLrLDhggjf3ZM|sX1v~(3epj(L0AE0$zpvgwssXdD zkN^2&b#?HsM3CoxM%OnB8tH@su!36+a+(H*DTw(h*;@IZ;xp=N2-zE}uSk9S9yxO% zWaFb0B%RKqn~2>EzVTF?*J3J)z3jxb1TVs=S0A4OH}_G1UG7DSkKV!~y<7p^z<VRp zSe;MHfhbIbc*96}kpP|foP^%W6(~Gd085cGVPhaHY{K{xAmPO6rHnSw)|C>_Z7#(j zAC<V=jQ_*CaQxW%@;C8+L*+i74KkJu-SCd(=~j2g1kI5b5teplV893G=BaifS3^r# z$8P#v_Q3`{)qSY<GqMkLt(ViF<2K!V{PI;HIHW1pujw7hIBrTNaOo|ZqIpavxDpl5 zjCj9U9<`jh9`wWwpYV(xwL4lGU0khT=<&w%dB=3qrX&AweZ+O*eDTqC=i&e`et6?m z(tNcTE2eu_K;-LzVBenFvnni06R!F2Lz2Xdf979LEH*Xg)184BCyC&V2a%6%`x1lH zXd<xXqjH5-G5S&q3OFC4Iaf<?v6>Koo6r(&RRKm-49`d&MjTKIX=N`NXeZAQi>?%8 zbb3iE_>q=AByZ`yNMzt)SULmPd8~r*swE9-w5f8)V*8<OMEIG|ru1XdJF!saIFD-> zoR}2t-kGD~;zLan1vSGjPriX2%E2Db3#2zy&~BO@SP*Oky=Juaa6<gp*QVMYFF?7q zN;T|01IaYlUDIsL!&`As)2{x|72k%;YQ{yz%c};$h{+f#Gm?^t`rkk1OAiKO;qCKN zarqR#TapCznEItdp*2a$`yX@5aq#KU8hMW2SPa;4N;<Uez&>yB&_^+FC;ep#yoEcK zv=53<xcszi>B|4}Tqai*BRLYhw-jH2oX6N1I#ug`9Ww{3Z~2j2f`G%9UDooLnpldr zY!-%{K*xg+aA$w?gb5^nA6yQpbHq#27&`-57PiEgarX>{6^#9jR<7Xy-X-O0EFH<| zMm^pm^XE5Uj^q2A@--Eo&jm~B@im4H|B)r~HAvp$xBr1FG4Z#r2_+|}!Ea_2nq?-< zh_{7jTr>0KXf#0ee}Z6u@cNrCezI`oVz;>`W(@`@+RzYw45umeE*kruiao401wP~K zyvZPx#$e`{Z{+&h`#t<vDb^KsLV8A&F89fHo_+(x5r-rprh*RKWCa#v`N$1EF^aiQ zin_V#`AnM#R9uKSG4_A%sR5OW&N*#t36Zp1r!iy1FU?o+HYDAIMSsjTwoP;=Tv0o* z;eXl>_qroNq3H#{UuV@h$<T-BN$;CuYIv8u(|!!ws!fi4TL+bREx5@Rl#3v$%LF&L zc+0nTA<IdqAeeg1uHcFpAcugYnb12>u%tnw6<ywzQuLp~l?val0O>U14F5n#Ih+N! zr!Ec)SQuFC7U`-M-QMU(=j_3~7UN9~I5?k?oagK4*6RZXurT&eVdU|1e~MQWZ#^v$ z;!k~xIi0$5H&zi$&Y0$)+JG_3;8PPSym$ym2Q>k<`by>cYven;2lfqdP5Qs&BXp*W z(bWAusc>rPe0uS%Ga`l0^eU5}Yc_akyvtm=P2a9yPb*XM&%CESvGa4>L|!Ub20=d! zN_mYQ*L|2Vd%3NB&Ui}aqQXBAhF|`*UBlTWr?APBb?`o(dG(KcE<GKdg+Z-UIPdm# zT2q1Qd4;g|>FRH4>Y>Mk07feBTP8p!D2=8U9z3)~!+UBr!Q=6O(Y`Kj53KW?#!Z$A z?0cKT7xL--%r#~_--b+tBF!w1_HA&G8@n3x&8h)oFJIlz>D#3I0=C>8EJ&^aityh# z<rG&w9Wj|sW5DB?nI=BWH*}jPi(u^pMIiKIYX7kYt7O_-=VAV->$W>IRO6l!*nC_) zU$6ss5ZqP{F^hy3C{G3)K~Q~SSE4+aCLjy0rT2t>bikcBC$9{>MQKh9|Ec~3y9)q3 z`|GhzCv!N}^%X<o{Fqi8#ZbUq^{Ih;zKNdNi&gI(DE0Hn6+?*u9nhx|>{_&}JWrHY zFfhFT+lpIr5Q{r2(5eG-*vz-!db1{g`lzc@&phikBc!W3b$b2ZKLUOJ)x@Mbq`Aos zebnwlTcFQYyjlx)AoKtrM*mhI#OTT@fUY|H-N(1sE3<f4bUI&o`oHZ89Uwa+V6o3{ zPI+{L_RIe%z>}+=LaE(q#Yp#a3(HjW7H93CZMr$Tcum+*=|wv8a`6na3_j|)sX>Dx zMU<|)ibr*GlI^I`8xQI>$!4!wxtRr*7=p(p$G%1Gv5W@G=j@0=aA8eV^8w1ldEb(W z>q>N&*KRJe>Ztofty(fZl2?;Ta9D_3-ItqjO1VA{rM^j4%3H!$pS|>QrH9^zjc5_Y zZNAH0EdS}BmTsA%vysm}rMGV@QGU&LOBVZXYm<rDCq8`Ukm}Ww3NJacJiu$aH(r?> z8t-t;N2{DdaM74poAGN;Iv39oGto3*WmS%Fvh<NqW1C`wINR-S8JsxA-33Q(Qr>+P zAEejCC;@%9iSI0`X(D2zQsKkff{EBE+9uVuL?E9%XW3od+m4;W7LRfqP5p>{TY7+I z`UHadq|I#AAF0C?&?;6KAt7OyJR~dd*cjzul-*oU%zr^mOL|V4k0=BM+E&>qdFk`D z)o=x+m-SuiBj!@-!^xLp^5Fi2e)VKxMISFaR3C;h>6Qh5LwJ01&o$pZ=uXAO8DgNk zsMzr}82Ci0|6BP9dpt@Ui%@A|M8(KFu*;}CvFS+L<tz@fYrsl7l{DeXhk$w4jnCK7 zve!JhD^!QAX~2~Sy#n*ll^M6hK13hS8PNyrh>LP$Bp$A1apjFwrX~)hD@z=p8w`ww zZ`r|Mwon}xBMB07`)<L;s>ib!?o3c{{7rOiJFEq1#v>RH%~K{y7B9(kJb9=Qv-|B( zB6KklL!0LPovmE0NwuF@N!3X=v@b&Q!UOiFCD2{-Zi_wOChm@zc)<XP<kuMet-=jK zxjS;*-wSZ&IEj5BX)5fiXQ2h}PJvT;4{&@0`FqMAa}O$zScPzal>KYTK^723es?!S znRpFRkq!m}goV8X`u;iq66O46e0*vL0hz^xFrIj!j^HIHT}?Bg)o;$e8CIE-aUenC z(yzPhwp<ukKo)e4vrM1QS?-Xqxk=|DL@$?~;RkghWY-zctvIC4-ink<Cp9u%V8{@c z4X?b|kKxEzxJN|1OPV>Y_K<FL!%mKSo`?@O-48C82bvm80aJ|LBV&)>$ftR_m$}AC zjy@|iVfCQC_A>$u$?-xeh6xkE(%N20I!rn;dp}zl$L;C@dq|FHa=u?YlQ5*f4&U6R zN{w73@qze(k|nQDVV0a-^OLCnYz<=WW6m=q{}@d<5#N4PA_^<kYFxK3mvGuAtD)Hm zPN<cWogC#V*pRG5O$Bl2BL`qgZx<NTs8z>g`437p*^jOS;!_PzRCJI#_c5v21^XPP zBIV!_)r5!%KixX#t7q*$Bf$77Hz?yi4QF0=CGGRm+L&6coY*a$U{6<?o}oGIWGjOP zHC_Y1Od)ZjE2yY}Q0MtbYfY(H%|(vm7qXOS8ci@sy3tg$80WY2eLD|g2+5{Pd$@7} zW^f>7gRC571yq3?eZ_34=(Kz8!`|JoQln8^zm_Pluq1<@9$x;W0Q`|s?}Ad^dYcN( zUM(18$#YE(k>GS1XXex|>fIcjUL)j34M{)<7pQiGRLrk1Iaov^szN84qg%lE)y>j? zQZ6hhW39@{Ra>JkFHxZvF(O-DzNs|@1r?xSQ}Lt%_W{ifR8BoxU_H5yPTiiXU~)>E zrcAY#!j3!I5hl^pY50CT<`x(kUAOsMWG_ss6mFJu(~G3t)~8?Y3^u*!S&lv{((F6R zcQIcUh%MW4N9Lq&9O=q=bVVtlpAg_blo)Xa(?d)*wI?UG*0c2g{AUNs{d)mK;~7p+ z?itLfFd=7{-$|8LPx@5$qBigxoJ-?UFPt(1{Zuxe{#AOEcHzx*MnGEDZNL9gqQ&1b zl&A&f83csDtMAWMXc>cRwc<UdjmUyt_48({>hqrKj3Es+?;|^w80+e7Z0J*@!K%}o zZ1D;{pSM&ai{6Sx2paL*MxAF=4dkGJ6YEheeh4-&6_pm7Q-n0%7P6TiX>4K5ZMNX% zb#U=3+jTiUj|N>yX1u)&1|6UU$W!9mE^a*_ANHX+{o~q-5{9>Dre@$kU!_}7BX83I zWGLCK<<xrm=Z3c-%l&>Du+^XA`EwP|1j%N%$4f3x+#ZpHQ;T=8rTX7N*B&u}0g4Y$ zeEi~w*uQ!tEG-=g6AfchD%L3&Dsm?eRV-r}l)|N`D5wO3h-FN?l6!^<%d*(fyYBxK zc6>K29p*xo>H5eu>@fi9&U$=eKkkf{ukzEEo-4;4^Rx6{WIq1Wf9}%r_!P|XoB4KL zAW2=_F{nsXn{g`~lg^<>KxmYGX|vqPH}LyN>^BakS3!EgY0#H_<BK%iaY6c_&rHcO zlGN3maE`J;ZB#CJ5$jclQ%8F&nmdd`^MhjRRD$)>!##PA8DiRnrm)8gu1b&c_#B!} zEz{Jrvp8~~rgMhRwUp1Z%9yfPF`e#dtg8-KTRIF??{u=luHgylCO;pS(Yg{HOFR<u znr<*p(N8?_#O*VCFAX0cQNer+i|7J;qp{|^g6frHt~8E*^b@=O|1_6LmfbiK1ow4{ zyg=3?K#b?9t@{4kHuInsdXn%-5Qy;b0gDYk8q7q{<_B(n1XeHqkG;^}3z9D*Y*?Cc zh<V@P!q<e*B=5cT>=Gib$jLK?c<&|76I1ZHSMdb1{-2p2Ig^GoTS6>dUf>!PjWk$H zj|Taz>||sUHs!ANtB<FfD7MAf?@Tkn#r@)$XC$7<l?FI(nRJ%FOnAmb(_5>A$7yZj zFCu4e$caV-exf7Kbq~nmNF>l%v$zJ!9-s1?lbb%jFy{r5`eK3D1l%}szlzOH7k_aO z;!?GF%$A0-!=uWGe*IU#diVwL+~xJD6o=!dMX{F;`>Z6nD00l9vCO|0RetJ5S4Q;% zx|(8^g3D64ielf228$`zx|?g;6Gs2l6l9#m-SBp+n<S#5IwmhcV_F>%S46$C_7sB1 zlZku3T9CQ?9wdLXmMfk%<!CV1qs}jA{@MZk)O5(!vp!kl{v6tso@@FZ!}?grd2JLA zeeA#jBy0iO{etH--Nx(vh6iNxspF7UWQxbr>`SMrnGzY3gY!@MxM#e&ix$aLj81 zU&P8&F0%s}=!F%S7Ah)OQ5K;)K|Mcp9k_!&hvoHa1~!ArgbQxq{;L5QX2I$73qC!{ zl=G&a6<TJttM_5(;#Pc*8H|6JfcBYwkJ8=T?vd<S04YO^P8e90_BC1I$=Xw<@5Mwl z?}SmTp1;12lCeV1N8Wo)L~c63+VPgJT<r$qXzy8YYNUg5Bx&6%5BlT4OFjCe7emo9 zKajI&kO3%J7|3G*Ga_p+99&Wt@cZKVWP4UjeXeYim0z=5y$-oQYdPq^v8V}fmQdFc z-}{my-|WP3_o?@;DDW!%mal)c;I;BqH~GzsMMr3T06i3GgV2yC!U{ISsU4JDQ^y8R zO`yJ|Qpm6Fs9|^b3=T$!mVvT7R}IJ&qy$$m8u!$D%B};%1-|1kQY$Nv_j^+y{Fbx) z>H+7?ds|r@RkSU449!rOjtY1E%n%sb088Cwm~~v0b-C6mS%{k5(ls-Y!=*uUxL)XJ zb#(<uBG$eJ>l+1G_`K#TZCZV?eZ`?>seiA*>BshA1^>-!Xn@}5H;&0>L%GBl?`xh} zIi+h?+`U?Ait)!aiDlJua_^t-IbrRZ8k)7IMDx|zgi`qSt6A_6F-p@ARnTqmZMh*J z$T^0lU9x~lo=gvn5K~}fmS$Qw|Ggq8dSvPsCK-Y1)fPBDAUi^0Cn8~X;zOwYI@ybU z#p2o1H?=`K;yE%b0WY23pK48+Hu!)#<)9HevuiYl+B?)<Bkzk3Sn*-O<MDCvc%^tT z8v@X6PXQ*f?>L3*eMYIICi^Y?2OrLe4DE>Q`PLvs{6;I9$pA_rqsA@T{Gy`It%<yW z*E!|b#;aMZxrJzk^x&|xAO{9Gc~8UZL<;#R5|I(H%G~PeAJs-Ssol-DDJw<X87S(s zG=$R9`p9f0U9e=&tUd5KnY!~78^0OkRwVcdgG~AMtev7v+0<!InhP8rP5my)#lYn? z8Rvv@Ptk?seLa9MibP29d)=b=oz#jBtfKGP9<}4vH`R&dKYA$iEj1CuzGHFhW#&?e zQkSkCNL@NkBgVg&b7~<zCnXo|lDO&AD1y@)5jNQ|G6>SG=$!i8G@vKBIpGkC1f$RI zAs92|aDo2k3BcS+7L@NPgr<fdPniYd432%*iGZ6H(bW+=Wdw{xk}@8({FaX5-Mbvc zjz5Zc&hj01r2)E=6Myu;*DbE*#-ZbCV0GEK0h7m8>T}L5pQFsjj<ub^k7LS=>X<6v zf{CuK=&Nw(<;OmAy8wN&8#*+zUL4wz0QGSZG=1ESjo0i=`?*LVkB|+jZrMS(UGk8R zb&Qot2niK1bd^h~jYRm4Eb^8&y-&>Q``0iMiK4yBw>=*uw(}t>JbU=Lgmmc~Zc&Lr zR&%Y-$N+!dODi3X2A9ugw)g#93KuYF!072SwOzd&`?enOsd4>1%4QV+kdIhcx8rE> z^z5~a4e`ashI=Z^G2U4L6Vya|+jr#-rG^IurorSyeHnFs9+erqm4arlVJ5tHQisk( z5Kx($?6kz=_yJ03&2}6i3Q5H=Gh5AEdY|~~q%T%~r00Yy-79C8oRiixE02vg$mJV= z7=QBv4)*&6K&lm}BoJ!BPhusbn0VTs>?z_N>tfDy+Hn`<%*~?bB#WAkv<k=3rbL2y z&0dN2pdc;T$h68o+K^Bh$m=~zGyb9hy<H2mkis`O_{tAwDx7JFfm7psuyjbmk7JrJ zfRZ48ymX(`=J!b4J9pypy=AF{G%O(lU?sp83tT_Cc=iqg37OE%P=n4fm-e5YwCFQX zbb}B`TGb9_ngOvv9i%MLeqkLQU?0Y=*M${Z-nneD<^{?#sOi%Q&P<++h)f%+c=_ZO zc+#;*y++!VFDde}DM}y8>`8@G=8l;J(?y5nypH&G0J<}%;$94hMxslF+yAdT(#=B_ z@2=|pfB(FXkjat+^`kTDPQ{h_xQWJV$XAzQw&{%sWl&f$rcyV5v_(x31#Gd4ug%Ym z<mqHa&0&n^JuAdh66}Hog9543%ZcMZpT6s9A1SCka7U+=cm&>hvqCQs4E;%((jN3} zrxH4pX3bgCJ#fVPg{=0(%*`L-9MI|^RCidJaA>z>2_mL+x|zMQ(HP;T(SdsO;?YM< zj~QpwawuSGPSia)<gBcM^bjg<-je|0Cx~VNK5JX8;we3cHi(s#r-poTv-cJXA)@t3 z2dV81PYyb<XLhH&7bFgIPnCrNb>~>G(M}!$7!zU`R3(<56?lNx2r6;L3Xe_om@`hh z)<og>ncdI6S-G*QdISfb6?nB0>U^C;kJ(@wKsAxY8Bvp>xuzDO<#O#Ug6A#3TY}u) z;+<&;BJGVP44y}Lizk{ivy%d_cm*F0u(AXGh_6`Qw&ZYbM+s-oPMfJru$|{iv8<sH zoKkwNs~BVFj}~Ff++S`eayO0UncE^W`hgZ<YJ!ig7iC*ADJ!DF&PD6}R>x$}K~=p6 z0g{%uTFlZ&N&2HZ&Rbsc$y3eIn?H+^R4ZY=xTCeSm@dfdF=tCq=xCa5YZ4Wf<9KR? z%EOh58?8V|-zIc<j|)7R448na`BAu^jFbFk`r6V)?$%9sfeBs<^D?pq`jO&4tlbce zYj4`~C(rdUzIVr|HE{pL7182DMLfi;GeCt9^E#m6o~+Q#k-|hGbFh9wZA-J*v$;Zs z3Rsv`pMwilwZSn>`?~&OT6S=Jz6x^?+puR2?zOgDX|o~`tj%PL)n~G$D=jI>rr-3T zDaK)=SjAC5un+7GeBw0&AN~Ymr)EqR->SPnyy2|Kpi>4`i)h-G(mN~9*DDd7*dXjr zfgIQmN}#1~dw!$Q85{>_xA6@S9G}6Xgej(DrgPV?_Zl;rFwf1v?tZ?3eQ&;pL3+Yj zO+jPeFo1st)_{R}NDs4~38VTN2;8AammY3B>ERjmP;HLc_&2y?Yt$n}A^h!{&PNO1 zfBsin<$luG@toZa=0|lGf|xY=W`^X$HbWVrI3JWXAErn`?AaY(<$%hWPwyZ7_LwNC z^|V@>F&NVC+s8-bQ1*`$-AZpL{u{O@I-F7$rB4fKeM4CfDQGk6hSt{qDv60hmB68d zHXmk)2}E6HprtCQJQr0`aPv8IW(5aCu5Z|%_l^D!P4mbJAYe@Ez@^-J#74#K4Hck{ zU|ytTD&<UwdDKTXcp<dpDOT8el;+Zo@yYkg%)ivM{}uT0DDZs4;_}IaC<PveqLUED z)J9Wq%54<UXd7O?r2TNzcxO~2uqaBM_TwpMdBr=Vra@7r;&a*?CjkTY|MOfX*<s^I z5Z%`)bOHGhGkBib*8SK0e<a--%Yq0J$c&6ZK<I_IIi3ogJLQ#zd${(FmGkw1+KA`a z<+&&>`$23x7~=?ny4FK`qDy<?r#h0cx9^2c<>ij342S=fq0pJmoF2L7#YwDIZVy`6 zagC54V?w*(E*C^7@RL2~Y2`dCB6SBhMqQ?4mgQzK%mT%Pr*x-L>1+I3D-ITJ7_*$P zK*wkOadNcELl^9itC!v})jDNR5T|USncC~`MprU{zLmG6-HUs9LzS`VEx}VX?HG9> z#C+4w_S0zmYw9#HJRx)Qz_}GF4$m4GdcrHE?Cx<mcB^R8W}*q5NdCM6njX>Za(+OV znv#LQLj2R!3C_fsPa<x!U}hk*g^vL5X~<|sKi~TFq((L=&ywR21m+|fF<a6a`Y_fH z)c)$glHMNoSOXzv!kg59d58r)AmHU_Jox67UVK|?LGL&iBK0?0DDKLb<Pr1+?D|cr z+QLP&AlE&V@#0aY6l#X0b{SoC>Q?HN7aasPc+7rd{3%mJ`}7sdt{w_BI>71NVW{#J z&3npvOrM#v>9HN}*m-_$snEaw{PLGG+#;1ol%mQYa?rggQo0rK_a~=jk4A_d|El}1 zrftaS-39F{AHXb2e!rU$BXPJ%{~#c6@3GIn*3F;96C~Hah=MFIvQ5(GVc<o{w$x(V zq3jsI4Scm8G^BFWp8J!2AXjzXPP%~rH_`>3ra&zIiVGdgrm)Y*rYMxtw0r-*K;iGb zRr92!?X=n#p?T-6eSOF2|85_j+B`-e+kjz@vMRbWD|Gf$)#;3Lsh3!hH5BKVImn+O zqu*w#+j)le?wfr_mA7^vBE&CGTbLzJM;;)MgqJ0_ljnYQF4r4iyJD_?<$*3&FQcL% ztv?a_-?e8VFWWk1=*`-yi1n+3-EzZPjFg@aeEpGDbrvh$geAN0L*o_<x|YHUEFgUZ zeILrI=QfX}l3g38<}RmScIk}H5%5db;rQuRrMlns=rpqps=GFB84@Myu7%>V8idDc z^&>W#E8MZw-Q?MkHO?k5;V&>IcyV=2?NC(WvhbfVOJe_dQ&rZU^0Rb51^b=HT;@J8 zVK0b#H2l`g^lu+<-x39Rp+q<lQA0bZ;ncKFCm_!2cTnhIfpNa{(5F;IaYg;9p>NtI z6TgS7v}*a_GZ-S)w1d`XXt(|F9E`XvA6#L{dK1N+(O%X}r#?j&TJEQrcf@9sf4rZO zRPYd#5buolgdXCL{Ezg-e|Cx9kZ#r4`8mV9vJzxIGvs1FyktA*m+ADwU^__GLnT3Z z1?DsRrp%IS5yE7GDJ3{lScD>pxwY9@nPE=%@yC$C*jB-(BqV7<{}Lsij*!1Q<=J$t zg$LjpJFnL73vC_FOf6m|Lox)lJqjL3-de-u2<gR0ZSOQ>{U8~mr}~cZe8SI6FdVtB zw$M%yM55<_jZW2M*^;5u_2O69t~pw`wRq6~YVCYW=kG!=;Km73vepYJzWe%Czn^jU z`)sL0=HBDOjvrJ+0$WW$W^%?V2FHPpHMtU|HTf<#9kV<IvYRg7>drR>?_swImvz|< zu|j*QZw{9Zbr^jD_H71ACwq#JevjO4oB47|hoton6<gI3Ia_N>Ao-)>2`{H^90OOT zZo*2&oEi~9B~DKbjbQx7p-Evw&)jZJ0a!}skeK;?<8YMX37L#<8WI~Eo{!d@hb`yh zQc$Q{U#YQg-=A<|6t&l|-j5ud2Yc>F-%yXqa(rX|rmI^Nk0OVd@&G;LZ*f*yNH31C zrnsXTHp<*jxuuFCVV#;Q4P4ML5`5^6!as`oPR@;KTqWWX<O<Qz!z~96rr?<&Q7#oy zqdG}4&fYA?AR+Izija?U+^v0$ANnb`NbRo@F)6rg8buHos{~*Vg=8zYry$xt9od08 zbWXG^{gD}3sm+qUyJ^nrt*$%2C0qN+%Khu02p~+WL!vKowiUqh_8QY|6I98ZM45bx zp}T`0eW&=ZE$+>fp}f-utI{3i&;|r{KBIziCs3-~yR^KgMXZ<^T@gLPXkCL|c>s{y z^YW`}(_kDkW4r?#9LJ$>S^?f@nsnR#0HrTEwpj17oTv@7<4-j>0qZt>rsqw{j>USU z0MA5Gbaj{~4w7x)V#Y^GYNPfA8M{oEtgbIRwr=;2@byQIujY+I#qlwlHe7?Z-KAbj zEn2`Ox62-OWb4KgN3@d5I_{<O^OLuVt=Y^^2h}}{z*EkbzHI%ip7ni0%sN^ddE<IR z5xU;nKSBr>#~H^}a>BD>l`*b?;w~S8A*Bc(GC++<;L#+dF{KAgRx%Dgemk!E_<ai& z$)|Dp#I&DXEk3XZLt|3ta_$j_m1D6QZB&+cDW?MSBul*UF4MNVW9aLI0^>2ymsc)Z zS4F_Xkmv*<;UOEEclNcy)bo6SNaq9EZoZfzE+f@UIMMzLzaTIZHI#G+)ihzJ4P}>i z!<<8%z=}bIrZ#Paht#4_Ao2udNb=jxd80l@YBwCdO{@qy%Wi(WAfw5qx(yR1kRpV( zvXPgeU(r?+v$EXfVN<P9cIGX*SL)f!a?ZDL_r&obfIuWmxCxrp5T)g>P%L#sIsmw5 z)Axpgnkm!vUa0zEAX=2=xNsB39R4MI?y`{{u0QtL^Xdzkht4$RCA;Rd_oqBR*G)`g z56ABI@*bmTBUv(B*#wpkgwcoI%hO9G>3^S0saU=`X3!*I9$nEj2T~SXFjeL#Ac>aR zp{}3^)fechmYt~zpS(?u;&@7jO?*ufj{_j7Cr{$WaQXeG-%+FaQcHsAPk*JJEGUmo zKvw`vLZCT*d_Yekn+2GM77rrs5Do7v-2D5`XadG11mOW7qtEj2FC>8W{pj1h3baFK z6FCO6G4tXuMEil3D3)&_vMo%C0{i4na&&^CmSiea?~#7jkM85-3J~*#J+-^j5#+DY zUN&84%xAc-R(KfXj8^Ykv@rn03@cMQu;Q*M*iWrNf6&x?PDvY-46>*?PlDhRe#JC( z$#*sZG_%I@T%P$vxeb-isDv=-h)IZ*sr}17xV}e-9tuHsrigy?P%Lz3<tBK!q9lrT zj?G>2a=8Pr&GlBKVr9j!&uuAk%q<i|2PA~udtGCM_~!@PjqK!lAjkPI)I||kq1U0K z`Rcb)7U9Hc5Plk&w_hLvG?sWcdAD!4o^v_$BTv01sQaTE?<42bVep0pC%!P2`ZX(< zuBjXLbI~+vt<H~Jk95hPa{xIa*K6|eD{qiRQN=vf%dxI43hYZ8GxmKcKeh0FO~(?0 zp1caU1K0(b#4z)*5vf_&sN~G1sJCnHK*yh2LBn7_HGQ;v-Rw#Mw%F-;Ms7$+HbE|- zt+iV?LR7$9%L*gPsW)XCH}}6cZjXIKJmugxj7FWdD4KaY#oe&~W;pw<6&iN3&tW_< z5nvmy__Mc^)3dT-jkd6O>ls>pa!!HK{hp-QX#O^Nj#{~<J9T)DyvWfXwgBq@-@jRV zV{jGTn~~B1K43?oow=Saaoy}|hN|qFBUbr8)=pTh*66~2dF-jz&mN1x+N12Yd|-x> z4qmEkQrGC%iFf}!glM_8U0)Gbm;2!Re!O!{aVMZGxWUTI`W|0VQQ4>HuJ@~-)+nxL zWgqOl@nCjhjrnzA#LU~Tm?hQ#Iykkb1x~nW(MlVCo;(8JV&ye+qyI%m!wiU^I2� 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≧OrB$*epjH7tHi=TXS$jA|8O6i*y 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%0DOifRs;9&h%C9zUp|}NFt*?9Q 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̩*9IkjZJW|1eGXbqphve!4*>Zi;Oq55TTt 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 literal 0 HcmV?d00001 diff --git a/certs/Salesforce/SFMC Associate.pdf b/certs/Salesforce/SFMC Associate.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e2a7688635f6385f2491fac371d40e9bc32f81d7 GIT binary patch literal 793757 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%0AdXLr4DdgUgUaI@tH%QABcEd&JdVufaq8p8 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� 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≧OrB$*epjH7tHi=TXS$jA|8O6i*y z8HF@U)gnw$_!NqWY-4+J0ajx}I$t&N4Nnj0WO?FM$ya<s)4gfnH7~x|5B{yk&&7El z2Sx{Io$a7#6}7Y0%qsuFJ4YYCyBzCYE?PAISHjQ1ew(HF3rtygqAx{=dyaH`pD&2j zcYXJebh!^CJl!fC+>HPF`qMW@t-d&ai4;ztc~m^*S${!)=W+61X!TLb_VZhRn764b zi<U}<^aUt%57?Eejxnf9-^D5~4G^tcBL^CGY0&xj7KBa<$wOC5kt4XXtoZ9pzY6SA z#*J3GC2Q{#%u~%QC&lQxN8}B;3Ck}UdgGOK3#zDc`i4lq8e9unR>n{GbGrpge$Et> z&AdiL?@X#?Xdbz6e(P<&Zv2yt=7oGQ{P_gaUyavsPggfx@f)xftz2Z*9;1MT4=;jN zcyZ;idlMBnW4FYtj&ykcN$;0>)A_j?$w`Yr5gNQya-Z(J_P$H|HgxJUylvNR+1mN) zE>k6&&Wcd^WND^<=|7_Us<!r~)0>sAVdPf31w`(9ayDb?zg<^y{2aSw{hh^#d{26= zU-dB%u{C^Za<Zp7fK~9sNapuxKo3p<^Da0J_gpcUlshdBQe<HH720b!8<2&+5cwI~ zKnk1RnB9$}#?fy)^mhs={p#Qw@uU-yzR6=>buuAsJ|$nA&~F=0uX!bRBKJ^-C&Y{% z>EujM`<e3-+JP$z6cO)I#6g#26Ha*dQ_q3?=Xe8gcJiOUrNAkKj(8<#bQpek7c2){ z)^l?e%pML}x8#Fi5OYht)}xsi(tFSSU@2OcvxO*#2exUaJVM^_#*=NjszD6Ft>*wn z>p5Fx4RKyH)^^b0S0GQ<C&OUo1x#V|r28~|YP;q(fcaQ6YaLH+!dk}q?5wJm@Rf0C z)1Q%F8D-KRd0zFMO2Y|gW-@}$X*MiVM{(r0h2FkFGThxo@{+9OmTm%FA)*BVKjO}_ zho=9nvz4XbY(2Zq7^)cPCIIf}+4GAUJ#HqOd19BSg4JHxUf5OM?Ez7>^pvXSMypm6 zf?9RyE9ux8N!8Bm-KwMeheG;ypWmv+Rk{R1!c~3VH1s44WqveEFQKOs6ApB?n&;_n zZC5+LMQN*^0vq=YHVlNmyP3;I;pg^QC>zq>n9slQiN%}Ufgq$I;hG&5uGbz7EuYU1 z?Q+qd(BDxqO-#PRdSnIz*i?1gKT*#m`Vsq}15<0_s$F;7-DxRG*knCa)>=@el(d;* z;<jDwB8h3x8nynBcu8W<oUlZz>XdfUM7!Y(q?;_m>^;rPFkTxzL%f-tV~iZjTW_`( z>;z9{5VxXdi}Mqp(~71;^zUzGTNFVu=kB7?D`X_xU2DnAe}+N635=HCbqCncn*vb9 zM=qA%V}`&hg{MqKpvZembZ!9E6;Y%7Q4!^2$!>@mb%v;W|8WFJ2V)XETmQsm;BEUG zJ##hQQm<2OQR9rCF7M;#l)*iB$>5AKGoV?*SjjeGsb%jasc*94neo6;-6LEZl^D*V z&1+`Y74R+c*6^kLNNhR9#l`I%Mu5j|i~!qKiqaronIU$eOdHBD-R{MI@efa0-C!9_ zi{bSq64)Y)grBu9BL^Z<(<3LZoG|lIPC%8{+USH_eZA6D(AGPvT2V1_pbDkNz{0XM zUvlKT$~0h(N)ERM)=RLEGoD>{7g@&S|3`C~T+5LoLGV6Olmf+vebI@n|8>k9#Y_J# zFp&vFc=+<iOK|k*2bb1kr7ua9v4}5*fEL(Xi|EnCMa>^==8Uwihcm6{k77}m=gZ-l zt$0g3R!={BMQ6Q_BlNs0A%x;_*Zq8Pye@3uA8IM(@?Ujo(ZJT7mH9HFzFUcpp!i0( zLZPnvnXt9(e1hA|r&xKA6X^L3Z<zJ812b8HhBnWH!<l&}^0TQ1b5m^8y7K2We^jBj zuC~s$@Uh^{gkm_*A@~h2iw`p4Ouf%mm#i*WzootegrOxfnT)0psReMAA)0dFHnryB z2CZ^TaOyg|VHE3HGNaf+ajLy}*=)wevq@?yzep$TiPeB@uM*ON<$h;b3UW5t`=rv{ z-;1Zm^EU`3;W0Z2Kig>xu~&E`dS*zyhEx?*d~88XZE8}Ssqc<>9X7Gu(PQbvUsN^3 zg##;4##S(m+n<0u4Ah|Lk_S8jPiREsgM*YebPSz&CjLm=)#ilSOsJ>H$^8@d>j^OE zx^EfUD4*!2scf3#MXf`%f$OKOlG!<IHexnVP`uAETQob=q#eio=$ff|^UnSRM|8Oz zN-oq6XfEASH;tcTeAuh##V|{wN0SIxnlmf^!*<vz(bHwqY`V|rcaxn&aVR8q=%YXD z7V`4w3yQjeA!A>7#{jDJD-y+ZH_vqHH2v8PXzUn2s9fI0PI4Fw;|6esWBRD!-9fk- zOm{48VRu23#;jrTN<IoVpzEKmN_d+~S+P}aO4GAMnE-gKMfW>M-}peXe;kdg8_mH6 zy}nZZrOx7pK0lv$Y0~0fhC^>BfFj@XYzY#cL^VTLmE$z{Lav8ejee4_uBgl$D80@e z#4O8v;)j)md*$Q%QDd)ludqD4EO7K{i2%$r62-+-)EmtyvCZu>z{OeFM^|P@dH{}l z^Hfuj_#A|^1UoA?PhrcR*G8#ZASGE<N5v%=nH!?n&!g4?FLX@P<g+(2REBZTU4Em! zhkyewFzbeSNn0ge3zS0$H!CB3Wgi%5k=-)ARsSG(&$`s2mw>yb=w5H-{DSBN-s9DP z`ZIT*naq@@wicKZSon84O?Aolv~oR1SI(dfWeqfCg=;ajs#-ZwS<v1xA`1eUGi#vR zIiiw(<lq|GWL{Ckm+`0r^K?Asf*~Y2xVD7BS9^-d!b*7KFn{{aE{WiZlhtj{TT`a$ z2Rw6?o0SuNUK%txvr48XDzK(_dTZ;WqSXKZcbSu|{U}WPpc58eiz2O-r;G_qP*f?c z4Clhns!$ubh6En2-J;^1TL%pY)Sf$YM!m#lA9aYfv$6wS_5r=SvS#5S;Y}qT2uYb? zq%BdTNzE)5plp$rvp4u=G9-Ulqrv)ttd+I0){~Z8Gj43x_`-a>;tQS1s)BE*JcXRI zp`2L5oYj=cH|^{lzZ-eRP4mm>zgruj_P->S+LYIaYl6s{t^!b6<@+;k8jiGLJ&e%` zTgx^cW|Gq|aL%=D=shVZ%%H2V?PsoE+hsoXDX%;48k%+B0)WojM~N225@!3i0{7Gw zaPF4`0>(-?G-JQASRkGf)JYowb-o7f_k%DEKlmD5U+g8LApmzKXvLOSLs3X}T9ij4 zD$sF0?~iHd0hE-1T{DkBRp;3=*tC@S8|&s+t8D3}qu&@W2_nfN1mV>*%I^S038_5N z69QcD)q@ocO#7|i@bj?}Nsx_TRKWRPUiDTq&ySwosrB;obV6?@6C@kXc*Gg0%UXB# zdg!n|ibkm<=Go>m$su11srx|O&Qwd$S_#?r&0f*{x=(_xp)lIDSIGV<Tv<c9CU6=S zH`@qQoYy#2#y=S`Rj>;T*Y^-}wxGU20d^2yiV}rHaQ&tgB?IIIY@4=3xjZ|*4g-xC zE0<`FhlQDed;f{!lS|3p$x%V|M#|$Dk<=ECG;sOy0V@1_D4RfN(~YUso2ee=#S<y- zPYVrlcI<XxX$=Pe)oeny$&CZkx1Xyx>8S>xN4lAL0|uT!smLQGW7aj`%FC71ctj^M zT6=CrZe!0Bk3YZDs7wb4(YH%AF_a$-PbBa%1q2E=F=<Wk9>W>T-WjwN?|4`26aM!R zyJjr)?zU8)bf`C}6gQ?f)jOV=9Mp>@RqsgByAjCd`>!9O-kmSD+ha>upoTmH$NkBN zryagAkMIAmpeL~n0~`uvp=V?@pxqncl{0#5iYEWOuG-MnyDV;aJex{9Y>xFYu1(R< zbUx0^sU}-aH@uR!2Jf3Ywq(Bhy!r?~wj?h%sYgtgX1yxi8%8<t_hygzGQkLhwEVx+ z01jpQ^vqacI59GmlboSeC3-Lwx_XuXgF&Ok=<RLvX(W+naFS;FX-O;P4cC^!DKe@A zEd5SchL=DVRcYQ5ODt1Oi1j@bqnTE^=^^<GJ|vGp0Y~d@K&vAkGL6*aI{wYHC1dAw z6dR-a2`QgMLEaieT!YVFT$G<6DiGk8sjaQLvQB=Nq#pt$<&ses$+CZ_O<KIJU`6zB zB~qsmw+A{#*etZ94H#lsW*kCBg2@nSEAR;&v|r@iUez%`IDBHA=#@jT{Yf9Qp{f;m zpax8a3MF>UCt@$B@Dm7!g0)9}fZ}#vB^Ev5=s$)tM)I41+(+{NYNoBi(%DN@C|*5Y z8&iF41OyURSQNPokM)JRPd-eMw^Y@sL>8#6*hFquK16M6^5d83YU;e!Gp9D**^fy* zX9~;99B|wd9AJT|)SJACb7&>7i5LE=hvpfY)I<+%Bw>O*bkTBuRljl)JdhBoICY9o zA0bQWeKMpyR#!`suCm6xPyE#gb8=7}p)1_`jvSrwEV))i>bgU%`qkxAL)+t<pbJg< zw}OO{H-YI^M)pl1Ydt8uPWsDc1jVNeg7HmQ(PKYV$Q4IOzvzPYZ_>+R2`c5XA{df$ z)M%zWq6>z8y!fpaMJo+E0)AZs7|%oJ$IWs^b({z9E5Y|yC+fq4p&wN&K*C4YHIxQN zyE$>jIU^e)lWmH;x`7fU1%4&AwzC4itD4N_b5t+~bNTjB=u|Ee*_fx{JPkM_F$DSp zR_+0BE$Q;xK*aHJmGl@p8kk5Y4XY#jxU>i!<h5Sk%_L8!bAb0E%!x`*?BLx;40vXg z$9>hD_mGdVP^MWk9{3bwbY!#v_NSJ<Gcg_e^#!_Vr27npnH0_vZ`rw(R`#n5hxGf9 zn0x`Gd%{Sp-5594lvVyRHdRb0&Q;0m@{YK{jr_UqYk0%1B=|JPaXSDw`N)ZZdmoWZ zI^^(jVveFdbKDaQ<hWZ@b;{e*L2%OYIoO!An%SmO!-48R_tyGKcJl(c8k<L<;qz1l zW%uCj^QCe?M-g+FG3sk)m#VDO5EQRLj(E1ochZX%plF2R&IDS=bmY5$EQXI2=sRr6 z8cHdpH*JS%M)E*f0ui1HV?yS@UKmNLZy*1tR|ae=%*+aMXcrn?IH3~Yv()lt?(AtE zGzV?p2jvBi{e5dEqr`K>l7DLk-mD!4?(hHd1r6d?s}bGt6#Jb)`;(JKvOVc}FdJJ} z-yh^Nls8TzHzuIGy4>JLKk>Vt_Wsm219N0dM+{#oY_J?qSi9$S;jH&D883rU4T|&4 zV0@ip@+M9nb6(T2BiRO-h0A+u5r@EM*MMcdrU^2QNkI1No(?v_S14X9B3zFgB3vbv zj`Bhx57TF6(nY=p4)SkCX&H0sn~sy|uoqURLt-Q5IRB`#%b-nlM628LKZf3((OFM^ z{BW;tV3ov-HC*pseN4$H@$UZUK{Lbx1N0cvQgjbFVBGR*${|O6M6>UFbacah%+|k} zNcv)6=;5tAP2wu;5!<>yDD2Z8{oVibTqakN<VFy^j})aq*2BKY!|PE0EB`lS@zkBD z2n676Zp+LB$&sstHT66`#U#|XLhG%eY<tUiY%9b0UVuE_oW3y;7<p=p=M!|bC77Y$ z`{bN0z_78i$NHcVU%gc$cBxNE5(8C|JKpzjJbh%G9q^`1?RfBL(v@x%u9X4NH^iQ! zZp=Z50eM@phYENyHo_>XtQ&rs_*{nXIsJamkxaDQEABCJYs6&br6pF*@3S^4ccfg3 zQ!uJwPGBkS$Fpex=*Y7G`#cK(-#63B#6yf6iT^~MH4_>%RuE1vGKcQ#S%CIM)MV4@ z2AUV~KWBdesly4~>u~OR9zcQ5=BvCC>ILpIO54kt24b!xwViJT6-~dTyV1J-p7#7$ z;-$v4#>BM*Tv?ByvW-(85-ku08b4ZJq6DuuD?|PS3x5-%YNpHdC=4;3^{HgL4`#a1 z@dql7?HQWN9p?kK?(?!saPsnb<`&Q-e|#wUbI9};^k8-F^UH)@{B&_*^wTGC7x*<B zy1@P97<}RM{R}xwKqK17Ps-GjbfFKohj+=5KTJtRNXNhFuniLhD=to`O1(W#$khFZ zp^KgvD*R8f?R}}^Ms2k>Ipuv0MCFp1O)V((bv{gG@VhwY5=xU@+mK5&E*Uqi!j`zr zMw;J5Im7CHp$p`$`7+kws6m~MacfxNZ<AV2Bm~m)^ptC4;uGd3xH0YxY00>^I946s zdE8p>nUDi$?cQD%kGQH$H@H#5LU*dJPj6uKysIXyLTT9+6SIt`{2R+<eAV+-(_2of zjK}lI05>a?9Csye3@3U^4Fowv={NE9nmnysGgn#zNOizk8rv=@ABubN4f5LXI!E4) zi*4yS_c>Kc1|%k3XXjvYt{<LX{W(nwXyF=^S2Y$#NQo>}Klz3(Qrp;ET^D%H#dt@= z2={~7(Zq1N_VJkh*o=KZtKU(|0{_Mgx(V>5kZOg3z;8!%|ETr}oQJvBgoEhFkK_O# z2mgtE%ju8f^3&UwB98MtGXz{q6+d@Hf|S7H#9vBYz*z?#34^!jJw<`yI(n8!763zA zd*zW!9r=uQSK6iQF-yF{A^QrCq0qc>q+vgU=PXD{y!Q3C4dspT*K#ak7#FQa1AGPK z7TzUryf}Bwb;UX>ty}zEIRjc$N4LGWY9H^!8Xtde;le8_rtQ3DP~MR8{48}I$KTGI zmjTi{5pB%+(&jxSlcFw;6wNkLtRYRyYWJehJ@-+IY7#AgluI>$x@H!r7l#?5qGzQ( zyT)rr4Bf23w;Y|uJ_pFkO}?0vYDZg&-XwNo>OkgOLlzNxgXs`KtU#eWuLi~k!#d_L z(LIf3Z}-me&{y^C=@bM}K%7!GlX(kOZp~xPX~4*9NQh>5LIqW1)uNB^a}ev%v9fZ$ z`ExQDVeML^6c94?VoAM4L(C4-nZG%vemZ5Dz;%>7b)GX-q4qn~(T-PEWW$```enPl z9Q2mk;OLaaMOm+wtMWl+o)wDNT2`vo%d#wtU@9foX7jE(y_FRhE`g&k@>czpWepfU z)s$|{iAX1xnOQmc%$heG%?flhBC=}<sJAwQiNydVi?Twg*$A?%I^4=fnH1l;ulp{6 z6`Hn-p5{Gt<0v+IlJr$|LdxoY{@Ef!C&ii^-G3C4{q9238YSP{sn47n{vKO~;tRif zWG|Y4eL(@i{W}4;#Z>-mxgw3y=arW4F+W|NVr|D?{F}8KW8ia|OxIwOks3qu6DDQN z!Os4hzi~sW7_a9Uz<N%)Z*~$cY2TJrGFi$IeBhN&%|lve&}Cuz`xpej(uU}A9@10L zDhm7@ss%1QV;9CN6c^Z06%9kI2Cbq9T-kO;;aEXeP+gn8@-c?$yw}v$k<GPOKw0#x zHNNQ4T8gpx-qSY?t0@xqJ0-W2|Ca{r)daMbIRfcDzKCY~Oaip<fB^0X-0N(Z9o}pp z1V385QTKO(Msn*ii_ZO>Gh>Lec)u$Y*BSQdH)Ygf#H2XanrY|yg!`TSUBU;Zi0+E^ zB9ksX_n5BjUiG_1MR}^e)WeFq^F6qAt$Z(f-M`>0^8tOtl>GM}p;6wfuM)>4&}V=B z1D<#?kx}d4T=m$I9WwpvXk9mhHRkwsbaOtj(cVr&cxNC%M``0b>@Zx$c=r2ksj)7j zUgo!@BbuaTEj?#%JD^x|{*5RO`Z7?<gxk-z$?XI}qyNzctTw1E)DgVdWe}%n<twwk z6+p3bPO1<i%0sX=w6<^#$~7%LF+xk=oIk=X4?=QDu56n()>q2iEl<&;9#U>4%~KA_ z4s{b<f@)=8z!s*D@st91L$ebcm6>gZM0kS(CN1|ZIud$p^a*crniO@Kc;DBIVlA)9 zKjTmJ04RC}(>xhc|I|;O-mU%VXNeB-w^_4BDXt&`809@xZKAphkY7z|{lD&Vg-m1N zuL|IBJf5m6NI+#MXm2M8CPE1BzwmH*T&q5|K30=KXqYGlrWT^|iSsf7FRhulcA;dn z7~4@Y-I$kaz8IRx9dE;cjT`S``|mSAi|*@hlG^UHtc?YR_{2kb;aDWdZp>%2WC0Rf z+&v2bj+zeYHmxZX{`-83vMQ`0U>Z-nq8w@attU{{;FWv_A6JJTiV18npU<Ia6NgfK zizWtp%KS7rLpS>Tcn^W=dasv$ZggtC^t6L>>sK{{EZAN_h@-=H#wu%E@T^^`)*8!G zT_fC|ENiA~sIRN^TRTm?E0E~YtH?d73b^UjdbkUmGt*eU2X%WI3VyY|^nA5geQg`g ze!Z|}HaIUXaL(c_O%Rj)j0b8W3q71`fIylJA?zB9-IzhGW}=F`)wUe<vP?3@8WCUu z5c&{;g2?%k7bx#<ZF(a!-+kuGh~!8nX~C|(WYZmu4KgpsY|zI|pnGw^D7F$U^(YZw z^O~k1p>G>5uN`hL7IsshL$O|RY)Q2=Vu%mJ<ppHemj|hB%H(DhO4u4h<7lY~sBpp& zFdGmQ$h1PGvuDA<97I-=U1IKxjpZdsJ#I%cp-HPl%$jrc67)5SY@=h0cD@woyMzmu z#VY(#a|7yKpa=Q{hq@q7#GzqQIH(_2McEhL2sbRME83tyPT5_MIV~N*?^s>M#7<u? zwEbNY%uY`l`aFkdgUp{=OvW2AL<E4XWm*U?(*nJM9e0F2$_pn{*4b2eIPH%{)Ofmh zv}HQ*M(#-Q>O&htr=w7Yj)}I$(SP(T({`@s;+3QuCZ<ZcSa;y&PkWQTl00}2QOFnA zc%+pd+<_dk>J7<7(JU3&XenU8{5V*;lyxMX52URH{HQy_2GWzRtDJ-;?c&FHV<wo) z{hr?ag996i-*nI=F&J@r_NkHMxB10s)Ogf{(~tJe)=o-z)N@G)xUryR4Bmd7BV2J3 zA@4}r?g9|;qcS7I!3FU$)apsbv!GOh)20Yj+H_w;Z#}yPE31Pj-ZQ6qTLC>o(>-tX z`uKSApA&b{cMQ*G!qCa8RT&jX6P$Vn-{UB%^aqJ}a-`9nY8<n}<F243iFy-e>oN4K zffI$sD7wT!-S(ZQhH@V-$oM9=j>Guotz*-(Qo~puUH!2FxVmq4ld^YKO1!1-!5yWh zQDVOf1+K0J3_YUGsWDko8;3g&CPYV7k=<)(SA2@vIlHXzl;SG6U5RxVZoa58*~uY; zKQ3!8O)j~1;HEryo6pmJ2KYTQ#ccW$O%w|DOlH&l<p2tYWoprK51?MoG_T$AZUxEW z?6)Y^sJOc!h3|L6t{1>L=0Ciq(5&j241F?2S6JbYPv`yW<2~t>&vk5Fdp%dxwrA<O zcQvthEVr!G|2$Wx7{@ww?xZd9JxeyTCXoI|bD3nzjpRUZ->1k6NRKfy&ePlK`)}LK z!P@CVWHJJ9_~5V8RyE_#0Q5S`KPvD0rqc3Z-(y4p#E=?foxvEl8Bq~_gzaG1ah4wC z#%xjpHZBmDWBI(6_S!8UUH<ob1`p9X^so2UdYhDPwPQ)*cCl5ZRf7mQf9<b5EKAIY z1iqzN26AH9pPh$Vc?UrgcdLZIg-xL~PinBgtgGYdu9B+0f)NPi=n|at$joPGBY;?S zId(KRr}9Lt*#M{EPrF;AP6=lX8{GBRt|!+gF$9vRv9q2`Kaa57&rL7&q|-3gkv^Qx z?;mTL$X2xjW&QI#mqYNb7TcQ4>3RIX%@S~k+rC2-1Uc%Jcl(E+T#--R??P|h+X7A| zhY^Ax4Qr@fXYt+8RqJV}mZz5Y^&@VDPC0W}iar@8N!Hhx)(Bd(TUo*te=$N8Z_Rwy zGQo&71%NU82aF@O1<!T*gZ*qWj1W^)sob<qXad9-LxH$^0DNkPQ6HxN7NqCNc3~WD zRAlJL-c!I|wJ>aeRHH$iSq?TQ7I;Wxbxs#8PRL#A227W6XBAk+eZF0qIe|d>D8g-W z>?0PT)h>-JnyF4T9VmIIREju7oY|bLl|&>P+p{dgq`d*9eU6Pqr1{BKOt#DJ*w}k+ z4R$IpcmbZu?7t;O_4!B<uI!&pg|AKsmrD%wbRt%9S*%o?FqIRgkNh(&@gpt2Gx&xO zBpdP2gLwa;JDQ*4_dT(p%8I1ZA|G$^29;Bqte{*6si3U4m|C|Mu`o;-@ld9uKb0v= zuYTQJPxCN(>7JWl$*8AT+JkTf6nyq4me-5pfB{5_v%93wE2-(Gviq9dmd*D9igS4v znCvaD(qQA~tdj6pDrJ6Qevtkz4Qd8raLv85)%PI%<fzqeVMALHXSq}eLD?dpz0Aix zWd_=ZDILn&V{AC*h}FT|y98RD;B^6I3|#ykzxjNA=#Hcxrl}o*FNbYD#@!S=Sq>>K zKHGIf?S9fO3NTmv&M5lUyzP(LPYIX)?gVD-GkC9Ea2sYh=A{cSh}_sXDyvSZJZRdq zn!!$Q6(C_WfLR?>(>)Yme|8#y%h%J=_a1mrALV*)+&(>!gLiyt`@Mf-<Z0xB*P0X- zQ_Vg;u8Pa*<5Op2#4E1c$}KqNSDu_{IeEK0KYOaPcU9>1&ffrMfDJkQ8I=u`umAo> zVG*R87)Fx-;m#*d*Wl8zBbRT}XQ-Ea(!O}|!fp5cq6ET*_e{ch9Ht4Uk`$XYzYL@g z6+g*9h9t<w92KK{bU(RvgH^X<Hft&PEk0pa8k4XEZyXj@`){vos7&|>&)O_wUsp)Z zxB;xuaB7o`hW940fv5Oj<KtyA2F#TZN&^!OX~<By4WaAiLoDy=DV>bjDBFbTK?E|$ ze?y#U_e~6uI<~rW&KrBtS(=stq(C&{64^}to>>E?Z^G;;y$P(k*Jk&RAK)Fv?Gl{( zZ$#=DxM#ak^7wVw;cD&P$H{gu#665MFYT6v4SToJ9*lyngEOZ6xY@5Ej6-!dXQWUn z&r2{@-1f_%^nREaz<n)<Bwq4Vf(@!>u<lvBmFNKcw66aK+oTFnkgk95Wtqm;@OlKC zLOk=%(dwVyVB|LLJtsy+*?V;!ucv%ngL0b9(vFI2M)&eZUK>Q@UAl1omcSj5(ku#J zeG=dpEXEP07Y5K9DXP~gvp|rAufSk!<`H^9lLsx>65(x69R0Ya+-YIvtZZoJo|3ft zGZ`c;jtmZtVbuNvoi1xUjda?Gt3_p36}tqhOQ)~D;o3Wk3-^(~d<l$i$>f6Uy?usf zWqDK%5WT;cF#&f$1h&VQ5Z$Hv-V^6K8G=*dZ+G^m$VsS}jAT;Y;6JWty7B^Ah3$;} zp`dBzH-v?nizcw|C*R@!B2d)eTiU)Jt{n}+Eb!E!f<#vZOoTjF6D&8S9iCIpqEpxq zR)x28UlC@Ak^8#jw5pN?HH;{GvKW4wClv<ddrtp^!lmY&&w+rq=LEp1BS=eU-g0i8 zgcWFTxBL=x^K>V?)buB3K%ERA>yDBnDohouF6kgn0Oe(U!o-i>C%=C5r}MY9u5khn zeeO(pHy1I#4cKQEWSe{Id#?ufx53g`dCf+%E3imDi+BTG4J)sW9XCx4w03@A&ryDk z$_g)TK@*8@GQoCud#z9HWNvkO!=n3C<>V=@hV%7EdWsgqvCk?|q{hF{YLp3q-l;Hj zp4x!rrY*AhGkx!{f9>QcFilMS9on*EbmVw#&=DD;j)ODyWjmt`vLiK`$114|iKeaL zCte1kG_;Xl;=~-o_ohl_3BJMK{Z7JdRhTjRp*Xa<o_Q{4IU3fT=D|5HboWnc=NVsZ zjFp;KeZO}bL$StXQ*zJzKolx>*4OX>Px>7~z$}U3*tJ=;6$(7#)Av+JdZ|3CZm0m9 z0CWdT0$Y~dzyJM5AopNzs9`NwcMoc7v{vrJ$ROOUcgvdDo80DU-fRD~cjv1(=AY{~ zgS|(O9ZGXe`}^;@>l7DQI`{o3!A836d(V$JJ_6v7VM0jyz~YOQIZx<kX78sC{pN`$ z=2WujIT)-Zs1Fpy^`|d+XP#k=pd2}iJCB%&c{KRGWab6i)0m}Cx^kpMhog#{xCsn1 z^hq=BN5ey2X8+wVoCQ*Q!ogD}!pk5>d1sn8J+LkunVJ08al=)FFe(EXIX@kK>U4_5 zO{r_L%vK|UU~Z#9^Qk?IR-M?eNRcl1m3n%KRr7Q&BmuI2X2k0ntBK_d)Vw38mCe;l z75n=MD`QhNo09P2Vl+?+X{&C&=gk+5v&}S$!^VX2WexcoMd#6o@6ZD($EvRKERpyG zi`v;6W2>}<Paxm*s4wt(L_eJkVu$`QR%bp52ZPItw^)=J@7C>tepMr*Z`7pBD)f-1 z5%#JLuRb-V+6+6M&oW6aC<TXTWvXIzxX7z&17Qd={)hz(N1UtmI5;t{G|SCN#(K3e z-*S9<678G*U4!>NagcqKrNK6qEzuKBxle0(R)qv+qMB+yCq}n3{lv_(HGeo?M;?O; zX#e%2>VVIHXH*3fOU6B(7suGKD(%%zpYq0fC!H?|E!UhUZDddBq7GHMrZWcAGh@2- z#NNq#x|GpF%h7p!xY5DC8=R<7FAq>|KMd70w&K@J(2Nyqg`<T{V`~fqQ{vtUAhG4} zy;^DTkepB*4r_#?y%(TB@5LUQeShn0k9%l10q6_1qfz7EG(@-ksnNf<#Pb?Ve_(5M zk722)gr+S>>c>+zQ3sIj_#<Y13^FD*Jg9lBD=vE$Q9JMa$uM`;bXNa17={yp<6n0l zGZ|noecPM>xx&EB|L_cECRzkVp30#5ALs+5dH_J84j5Y#eh9L+jM=HIMK~z4*UGf~ zS**rr^~$O3TQuY`4|em11$w*WjJ`|o7rh<9@*hSNYroD%2*?#1L_xLk7ITGvDRAgI z+>$9l>cVAAi3WIrXA2cY7*%b=f>!DsP+9K)!V!{SU!B9^i#Hx#DElE$x!$@Gwn9fv zjeD0l<5MagIX13B^@UNUl^GTAJ<Zk0Q-HvwYRqW(151LAqZ%%$&xq*Q{y#!`7>{sF zfBoA0=wKNq;-{oGMNxZv<F)=6P}h?hDq!eT{+ruAO&_tkS_BoBJ)ocUo}20^=aJ4l zC5-Z<vhA#=baqPa<Rc?*-4+ut-FP<zd%{<((Ch@6uAu1R=I5$;t%EsfR_U5zuhX}9 z09F+I^Yz|$yw0Bqu_Ir3jV_Iq8jGp7>58Gob+Ws!deGM=6-wN^^`4N(Lo~p3>{~YS zb5FVXKkyfWZ&n<524{w?_5$?qt`Rn!R~rphf4XT<H5mWrxy-RE$AKW|&nf-|z8;7j z=NY%>{_aF1sJ0|Q1PN4S<s$YI^1e#Ob|f1uQ1H#Htp(2vs~9!4`WiTT$I5>Vtwm02 zO9AuYdO6|S@L`3){5FLBQRyi{esN#xNhn`cREPRC%8sn`x4LFot?E}Dt#?41u509_ z5Q7+O43H%ERZ6EoZ?oPh21jq?U=64MNkF#0n>m_L&r1bSPG!_^igL~T3wP1pb7~PX z(+Mr&0h8A983(J)+YLCxs?zf!S<y2}RI)}D(layJN$txeBI9kBIOx_-W~WnwX<MSi zfg|*94b#-}0<_5Xb={onHtbiI$%I3UnMi+B&nmx*l&-%U0Z~idbl=h`2Yur<7$(B( z`F5uE$-b@Aav(I}BZTML^5wd4TK&f*Ic43)WZOUYu_@73Jbk?@sAsA7^~1q~G=M~o zFt1K)Kr{DM{H$9|gO}r3RenG1mG|!i?5t3jwo}dW_kzw@p4zYb?Csp>XN8Z0-lIh4 zPRWZ-dzIr=i9!<YQr>?1xs*z~9_v|A<}&X-u%X=r8-PUdX{TN36hGT(Zn*Ozi-<Ba zpeS3$S0Si$j||Uw=R+WQ6jALD-SUMd6>Co>ZeMIPq@&t(rz-^Q2+h9l2))GKk_E>d zw4KxP_|{f8_^=5iM^>knku{D*=En6v4)(B^4*!_%@XxdE`P&nUV1&{GS!9PHxOlVq z4$l1w)h*MOQKgpKLPu{+xc!gJC}&M6&K};mDK!t#`*(zU`6~#OLBI4LvUVs8GC|1G z;<f8|70MxfuC!LUMl@6bCK{-TW-z3Ef*3)O1->xu8G{PfnpEqNv?c4+h?5}+alEr^ z{h~h*x&6Uh-GNn+mLw#w<BXp@E^7+@>zSf$)3fwAFqNAUw9M%eaq8x(q?~?L5(9VD z6;&&*mS*B12SUZTdb^TPQRQt{x-8c3IXhjHY|NjQUU5%)HK9IUSPKw>9LAJ!EdWMg z32}|WOxUgc(#fd$=ht#1t&TckMPpUY4Wpx;>nk4SsAPo#A5S75Tb0oax9&1j#D2At zxySrdIL}B=i<U}A#9B#eJ)43FUo$i}ev!%XB@C61;@Bc$z&jO)6fluqbV@Yhm|2Yz ztjQ5t!`Kt8;SC>P28-#Q41K!ubIo44uJ183o$Eobf7-9j1>{pphJ>|iVu_U>Oi6q+ zE&<aQXAh|K(ZH1M5=?ICCnY3!5v(A97->4tZ_2wSLaV(%TDz^CT6CQ|cyN?wcU>3& zf}<utB(&%GKnc+Zz5ao<%nW%UDgqa=gUGh`n-?a>XL6x9^90>TDK!`x<T>vE|ND<| zQl6U2IKVZWXxVit5Pa>?dL(l&11%ZX;8T;0w%PV$FbY{uhN+p1aAjLsoq2tdoz_i_ zUydb|@pxZ>Wda)j8Gyj+Z%W%eDGgq2e#j(8swLSmeo3o!M}&=oHQ5j2EgIPb>Jl@1 z4TI`bL+#6<;%(;6M{KXrau4?Gbv=UF)OJ7mG&yrY0_L0NH@K~7zb!VYf!q6~c@s`$ z5>FP^6Va+pp9Y0=!tJxkTq!aktN7eX9d<sA1(2@*56;d_@^+kTP3OG=Y7ZhmO7u#6 zMHMUPs<Mz*;+Ue5J$XN`*%aI;RiPlG3&4fzKDwbaWXq+^9x1WMxU}`lP`}Q!dX#PU zgBMT_0Ob?R;A!?qHMLvN0T+RRk;Wgl^c`Ai5W6(RU@}4ur+%^KWb?@oYAKgmy{F#& zVKSgwIeatXIa-4kb{0nZu6y-K7U+vx#=3@nZ`<y?wfTZ&WAhA(%`P||o4ZTZun8DE zF5t~dHu10X<Qb3vIF!L|Ksu-=WoAxMW(W5ao9djV?=I|6N8*N->Zr=FTCbNxSlF+s zD^m%DCq%&}v!wt#JUsk+-)2x|1}5LpZYn;<XL0I%tkm|vuYmc}r*r3bc(P;~bal<C zIz!t!J|Gq&=Hc{v-G%d>MD{2x!~-d26En}b`;lqAvWA)Jbc*sQUWbYAq3I}<w0zEp z(ilTe%L2}nDhw#HX-l7?U7KRT+&dfx)<&G-Xo|<o$_W(>Q-}@@QL3?P>|;o}bjupW z=evVi_|uh>E2|eJ`L)Q=C#TeTYid{nFfiX>?3TcJie3W55{6zy$1c7Rbm%@;o}%_9 z&Iug$Jr$jT^;uEB^KLzLs=~J}hr_E(D9%m=sUvUVe7e7>^(lEq3y~R_Rd;>YPUdLB zsiUP*Tk@`-=*Y@B73XAE#Y2#~2Ii>HghO|3%&{O3SJ)@FJ&#<Fx+oA^Z^{~+1-vIT z+U5O6$IwC5q;^|aBMHJH=iKeu`bVd67$G%a)O-)pXw-jll9j%z3v;_~QLB^B!P|x7 zVM*SGJ_Z>CbP0`_SIgx4>RY=xhBb-0eHK(vcUGi?&BDw%T$l+MY?J6u&g6tJ7z8S? zn5U+Gh|kFu=~M(GRl)s5zFhNon=B>S_x1anPV-Nm>v5BhHEL!qzp#HlfM5N1h;{G7 zA&9ITbzSqCqdsY%_lZ4w6u*Ph^3HAU_s*oqRA%4Lb>WqQ#(&%*uZ%I``i_lOQD841 zn+Tgml(;zCl@-RpBw<6_)82-vn=u0WdD|YtC^q(spc&Ff9Ju5~OA9?}L7peiNCXi- zjZ3{HC?oz-yhg}^S27o<=Gf;2bq^;`2D4mHhnO}aL&0lEg1j@itwSWexnknVF+E&a z@2EAHc}gIcZqW6^I61Uu<r%!iidUJ2$kyJ`2F4#<VjcAz|0<b568k<QKj)kz*WWY5 z?MNl-r{prgd{LF*>|S;g_$yq7_?*i(RgK)A|NimyHpn#q-bQ$8CV3Qjl())drl`w{ zJ(h8Z;y{B&|F})-@Gdx@@G{g{*DnoUHIibBZIG*pWFKw6|6;*(!Y+>1qk0JBoVl*X zA)B_c%`+ZD#UdFL=5<ipwq6-AR;UuX4wpdHKwdlVf5h9F>Ju8q%Z4HGKuKprjckYC zVM-bx>+GHC_~9xKZRzWpv<PE;b?@ehV;t;P8rRH%G|{7-wMBrZfKy(vz&d|bdMbN> z)A}CnwfqdwEH>(Jv6P_uGHDa9$dK}gj!#>1E~{t_rnIKR@Z#)=ZFFg?Z#oQ=J{D;! zf%T&Y@q6(yeaHXkYV5v#=h0Tt`~)-|(E@65JL=zF&#wV8Y+1@Zb-uc$7Wc#g8^Ctx zTpQNz24JwaOXIR}(^dOtxgiK^QUv`b;q64+M$+1kCW|qsRr|*{h@9O@;L(u46{Cp? z69eKI>9JvS8_W1bUm5d8r5jC$ei3Es$dk1^F{hBgZr9>MO9T#(t|z9l<QXimIYJN2 z?2M>3FsJ#k(h2~kmm-a0=#VympU(QJ{W|p5Y-_yYtyjrSbm-T8&+8-g@PUq5poO+| z`lX(m7mBB$@uR<qVp5l+1*6QcrziR0x!H6%k>)5^M&)CHyAf2tK@5{ortTyn=~=Hy z){Mz{u=&m!3q~Y@ia}0ARwdSINkrT&nFC;}?T_)$^P~Tg-=jVz?G#bv7DGtC0Z!2} zoZWbPuBA1;Rb`ez1n~(`2-Q%iOp1f1sVP0Vkm3$B6B|o$n)ws^wtBLpyyBNQq%VZO zxsc&9=&hf#<64q(Yjcmu#jYwRh4FwN9P#h$E5nA54R{n6@2&7q6F<_uFwDd^s_$%i zdHn3YzIk#5pVx3$!wH5T6AC2an5#RxifMj$Qz0GVRg!gelM<88J~8_KS&>!h2Y6F0 zJ=hNG(=A#sj)mSIzSI570i+Qlq2@ba(ldne*Mf1P0m^5LD3`QMs=!s=9aZ?^nO<%G zYRU8$g9-0yv9eF02Bj2dZ6ylwH$dC={Y%M8z5@i^p{Ww1qnH0_E|V<FaU2Nl>lFV2 zSx*$_^Yk|R{@XTls2BM%f+0~P;1j-QHFN%>Bu)>!g1Fcp)V!>RsN~fr@o#De++n*u z$+Vu-%j8#wmAF?;W%^0rZ(vxKpPpqV;*Dm^zj;aw`4sQZQ~<>6STWs+FF1>^N!}Bb zl*@_bO}^wJkE9xz`P^u%$oz1)xjSz`(k-1Gj;`F7GKwTC{7IK+kpHLx19Y9Z+aI&u z6-WaanD!R|L3w;?&P0hnM#-b(a92>3dPwV`=41-Y6mvwsI~gS&T^@C~(o55M>zt6b z^o%f+fsYk79a%xuCHZSvU-w3ApLy~gk59!ER1gX%%WE7to{9~O{iJ{porRTy`x<DN ziv8fb34pJ1C#1UZ&DWL^GhLwD5!64g^w$+T@V>(PMIjzR&{2<-&mrfLAaKY{THaIg zy>UO%!>15~X*;#QAw#-BQtRlHerD$SqvO1qWncQ1uwQ|i{<o!}uGQ^%r}sNT#M&x6 z=z>Fy?fn~_@J@K+pQuu=ANbQq4}4rrVS^rl`lGX&@wCDo+D%Stx%urI3^`kiZgK+? ziibUgflhH>jjV5F=XmX%*87^}(e|)24(BPwajiTRw}8vPRpp&yOKX%q{`7*h?PrGy z<@@&H-Muhmdga@+Ff|!m^QO;e>J9vvC1f8%Cg_(T=5^Ueut%s{iHNCZxP}7RodKb` z)O=O-ARR(Q>fV@7y@$bCRltWp$u$ovIM+wVqa*rxXUkD%JWq-9>j;C~|8>n4wtDUX zIe)+B0(I8*spk|=RqZvz3ze~U@!TUE+d3Q-mBcsbsd93ilXHMD!#`JEA=jTo3>jfz zmX&@@r{4u-*~}U#AfnShtcE1E(KcNBVIOvN-Da5#)2tgVQwaA#T>IL^$mi^8`nrV` zA(E5d_K^hi7+6>VkxSH(9}J<P)_UH8rn5}}@q{;Ebr#!p34n-BV@32%77pw+)8PIn zv4oco_fTVp8r`bqhn6|h_x#b)NweYYI-Sg95pIRauR0ZS?*E&JpUFt#VcHDgS~{Bp z8+aoR(`?W`Wsa<9xvfOxdQOF=?nild@J^vt`{d{=i?ts+RWz@y>e)#Z*<h6(LgL&7 z`6ET=JusqP(<8+)B;cGe1#<70v($Emgs8zj^`2rQA#HX`_l+Np4x{x7(2DzxO*GqH zvKefQvVbVl%V(Zvd=wY1?dmGG@Mi+ogsvL#mgQX0r7e}^(8v>80xs#5!_ug_XmM$` z7B{7ITc7nibtU2^f~s;-yeDGDQZung^VBmrbbUN`qQsj`YVM?#ojNBDJ|ilC_{ljD zrALp{<+uK8^o&dz1=gu3U^zq;HUT=k4ZhIlTcIM!p~XI1MUOkmoS*hZtp;#(TX^+m z;e88Tin3KP;+%|9rl2$P3}7)6(@Rqiv%|7jf+E36ZQJ2%P~k4ah+~@}skbqVty6*R zSVaSy#|#UQ8-pZs#?vBGUr?j=SJbE-qgOB-RS9REQ`yn)Xbw4xKKmwqM*8L_7rgQm zTqZ#85P4=`NqU{IxEbM$yJm%&InZ76&jP70)FO%|fvzaoFhLL9#{^y1rw-F|FQ*0$ z0p!}6mBBZlS6!Sdm(7knapUB^h0-?S>zd_6i~2d-ZOJui4!8+u*uu*E!DcW0zQ+4j zlY|CyT^==SoJenzkH+hz(zBZbi%fT3VbUboKg@UTv8|%7h&_u%PEQOqgGSC4-xsIM zV5z&a)6C_auQG4|t?gLH0Y~a*ZbflTq{}WkqNR({M|;^8pKh8*_xh$heb7lTtk?$c zl@V>Pcr?=@edO(S&{Z|mdGb1b9Yg6ibDkvu44#4GuAuxPV{7l4Ta~{zBby8Gw<Ys& zWDw$5%BW?!c<pl*s3UEBofdp$IdQ(3peV3zwPV2t$T+3?%r=LyK*QZZ*`8*vHy!sn zTSew8`_0VwXCJMPv+{?;(apVDv(!raRCY-5)O`JPN4xOnsL%JO6DA8B?zMsfoiM=> z6OQp~gsJVx*yTh>oOA3!CfUupnL3vuc0jPMsfoS$P%p9Wj!4?+aZ(-m5~ANE#&Poc zC5x)ShrKn}A?=RTp301gc8b`uW;)wRD_)8P)D;8j{()beLlR!Pp(-oO#NI)`D<?<_ zWO}X!DaP?o)UYK!cC&%8;V>eh;J@)0m%P4kL4F4Pj^`XTIdkDi$Fro|{&bp01QRHs zBfsy&&5Ig?Am4EKbVj?121cUENTiGKHYGsDOTLSb?La_>d6ldyphzE1V@#4R03(V# z%%!GCte$o%97AH7RPHddayEV6<Z=B1AdKCJEOdjAkuRCErOE}4ZajrcZeU<Wx~56q zEOk#^6^Q~b@u7S4q5UIra|J(rPUg^wGByR~UdKAitw+2vfxv=-@eI@uH<wBtN;f%n z{JcHR3i*&ci`qX%9?WRk_#1Vn!q?a6{K*LVG+UeZj=_9pZ6~ZvS~_Y)!=x&cu+SVO zS=pIp|MSms@|^jeQUb%*bG~fxI1&Kbr3kdVXP6Eu7OmV#1ms|Zbo`*m=i(2=AKZJr zrRS{B-5qsUXy}@`@)C^iZy};xbhKxeTCXuHcC_ah=<M1;Hy>?<wVU|1(9OBB`z`rc zRB9+_jZ%GeQO#F&=Q==w`_bhfjTO+(0v}lwBTQTg8S4t9S{s2&1YAP0g2V!Woe=FY zO(Z>{v?<ko^AzRaBEQZ5ulml)N%V<koAp`~AZhy+8Rlu$9AD3GJACf!j&|_xx2Mp{ zP6&8Uh}s6Tm8aAh_^;}=y52P7t>0EC(kj#2jpeGnyUtFKdl2%!tj!vtSet>s-#qsw zTKKLC#u{H(c}yMm1CABRea$?>2R6R@9YVyUgI=f}GWVh7JNL>)P7^@f%B=dDaVVXz ze)GwifdaN;;~#7AD1e<t?30Z&@mUQd(NsZcSLgc6;pqeku*Udh<CRvC0GcDjqC?qt zO_$_75Oi<*5Y*UHoSiRa-h>_T36)!|*(P8GVrLI;j}p#K&X$E(zWj{P;nn~e@DFNk zEP9{!BS?64N`J#5<}_ckC}(_JlXZ)mC(E+(Bw)$fJ=@3Ho_GQi5UH>TRi%-zolNuQ z08S8mN0nG9_@g=}ph2)qCs}%?4>2+AY(yxbDf9Mdj0*)V!3mvq0lg<*{`Vh2Jic~b zbJk`u&=iX?_qu{{jrQ^CeQk@#sO#CzhcE9ha8^4PoRfRAc4|&)c@JpxaldxnC6CeG zf-hGm)&IivDgo{68NL=W-)D)-O1514d<=ca&PLw_uaZI|N$sS-uxV#2H)v|olb+dN z^ol6Bu=;A<CdDRUENYPK$sx&TT?sT+<@>PMN-uSxjjzFuyQ1d}!>h%5qF{MSUa8{y zxYBFN;=1hJ0#+Dw3M{YY%AuNiw?DHOu>md+Qaw&r9}ad!Q`TDI%`{|`Sy10Gv>i@f z-@{tWY`mAK65~@kS3K>l1%M2kxa4CZig`X(5(D`6bp7;LfE)Add4|#s6gl>4MJ}%2 zAKR9>&D?mIZy$OyrG=Y#f>+x{n8qsecLwAgbIVCY;857=e7^bZP6sWb2=MPF%`2r( zLWCVxgD!<9eGoLr7s(8m=En3!j9yO7iYmRPHzSV%W1OiN@>VGgJda4Zobd+rV>)fN z%2u7v5h6$wyRuj3&_j7uF_BMhk(ZE^S2!PV`jAQuY>}&TGz4}55~H<BhL)X|w0OmW zc`?ysI4|kJM_u9vv!hm=1X>B)gsJT%qi%CBy%#cu*v@W7)I=A9?i=Om4h1<KEf?Y4 zXpk_hy-^SV&HryD=XAB3?r!2W>hnLE%OuNk90!8?JVjg}@`<x}p59j7f7@mb)hgpN zMTrC)K5&#d;#BzkL@Nig@k%N$JTvc!|K`7B?U#D<c|1DoGGqPgZKK_aW@Z7YP^WLB zcO?e@&ouDVLJv(2QJ%a5EeKC?2&C~^I-^N%=8lo~CA>&OJ#{zDP}~;V)itUKFUR0! z;_*(tMb<Zrp|@`(tMRw?=xLpZvvl|stokr1u0#NnS3=>E)02^G{WB`!>9~z=Ln~(n zG%gtM;?c~BEvRGu;5Uy8l)((SaQw|#hraCoG=r7d=IGUX0_j!D4Skf`32zK(X#L11 zRHbqEuA@3l1-MDE6jiN_fFoIY5ohF>Oi3dR^0WkG7MRit#c~MUjiv(0pXNyF?;_^F zr%fq_-!K4|bPrrQ%#JEK{HNQ9&w((LSTts@O09^uuun7M3GJ{oXw(M2o1*L~*Z(Ld z4j{i(Lbgy8yU)TC{R0hgSR1A7be7qef>;N96UUC}C{J)*jVN!je;ZQPXE+GkH`25x zSX=6vJ9OVTpQ+Stf1Bq>ug0M1ZzL*44~{&t42lklz|5{W-w7NP<0dElu5eshiC%co zMTIxWV4t6m*THZn$oLCi7@zga^a`*AosBf6yx9V^Z{-ST&IPz^e_ITlu9&Xa!u3S_ z?}E%^mfwEU?q4bYku`o9@FDr|D(=I7O|{okQoFdiRbun21OzHvu?+hHfx8DH6wQTZ zE^%%U30t;oZsG}~19|2dud7fn%!-UM@q7U*8Hg1cIrFKehBy&s$rGEx^*JT1JWhNt z7Et45`qa(2DJSI<^L>+hev=2RglbaOST%9xr>SM+h>fmay-6fQNNKy5=@bkwKz?6a zxLm=BudwK^(-cfkVH9@`;_T5BN6~fO_&COj$U4=mRphIT+;kKq97Skq20i2}t$Dew z{jZN{5be9ll1_E)fV<>W4Q>Y-TZvI?7;(38zEB%$%(WHhIuvd+pxMXnby>)`Hgu&s zrR>wH<|zxnSGr1R(}(6;66rcI#dL(4(zmW%tEa?>hk}!ajT-Wm{YG#9PO*mv0>L}` zctu8c>{~gpYa$(_K}{ctudB$8+Cb@AwR}7yA&Rw9E>?8p)G4B-br}Xuji#zLTfx5x z15ZU0TK)(pEdQXsCw~w}ZQ`H{^Gz3qVZtNG2U^vkE7YbdWH%K<2u_`(#i6(j(i<a# zh*{ZQ>Pe<yp%oo?@n)7$-1bwqJ8FB@xTXv{UejMz7*iE`fQx6QtUKpspS|vWCL$R4 zX-Ct2K69U}01UOF<1Nm~?esBirnTe4zv^REI<7)O1ho`nc@?<5kNV#DB1gw^Br!Mu zTgmIP`xUm3lTyHnR2sBQGoBR|f{&3*&vtuIsvP(|@Ut9Fk^DR<r{2$+!4Mqb{rRVs z&VOs0W_@c-3Uw<d%9@IpGHYXUE@%EbLuQwQhVy#>R2PIuEw;BwZky0Z7gHTNXvLpT z*=y@kMuzI0V$8l3X7}k7uM6O)XPT`~RybI-Jp&!Ips&k5W_a^*M#dtf?HMblX^eu) zOR{=CaO_Mb|G6b(=c^US=IcdXoz5vGXcZNJaT!w4njv=LTA}=u8yVW<xcner(i&Pj z{~e!pax8cuBSpu&n*;O_yJNQOE4C1O<d{%_{+=4em5J9v)o{|IRTIQm@BNK+2m<>~ zDQ=DaRTFyB)GdP8MVro76hInTYM`ZvKOV>Y)2f8AD+6lo)jDZw3kzxM4Q*kxpEone zbj{+wErcA(`O&TJsplciJA)#QDG?5Y>bb3ec2X9|VD|8lq#SoGE1w`lVA$yi#kKbq zy<fF(J}2Vsz5t^%U|akKhnFVdV7k{-Om>7r<M@^ad4)A=zL&DrltaDJ96FL-(zU$r z)HGC8nvrT}zE|n98mQBZ2JUFCE~`{=g%RDiJ~ykLzP7(jYvu{ejbgPKvvQ`RhGd&& zYn6KM?d^11BEz^ig=nKpBZK5X^fW<h*}@(76f(3ED{i8d?P+S~&dLlP*(Q-br;JIo z;Z^BfXbSC(z3DdG(2JjmCxXGwDGOAVmys>|^d-yHi!U)hs80>JkeKDQ_KoV5wOv5N zVFuhV*Db?lxV6=zjHjk<Pm3YZ?XrDq#v@V5_`v%mk6*j1sRR576d0n!r_ANyk5-9j zf%`BkxZ0mJ6=}`b)BMc~nO`T>R_SfuBn};yJ9NK<rXT&*i5q^CBE~HvgB$1aeuBH_ zhMVI*2nvjv6uA{y5Nz@iwtDnrNayxBW#V5>1F5G?3^=Db#(>^q`e!uje}BYAT7fKG z>MRP>%x!Lg`;8ipE!oo!+Y%vDVM2yS&s#U>c{3zUw_>IlcUPv_d&StpBuc2chb%`_ zQUfX%L4YQwnY(Fya(f5iCiMVm7~#ihNlVOMx?l%t#`l9qLm``(I=#^Wy`H-r8m=fG zT{4r|jAjmsQSeQ+Z821{;^Ip|+pV*muD$R#d!A&@{ux@y#79}$>9@gk$__{ON}>9H zq0Ml65<a@Vsb^`&S#)VU3oyb!x%;?r=q%9ER~hJLN_h(qk{Ea~Wtd|4czsx)hpxSn ze_VUi(|ObF*1B*!WX_1iTp}t6Uq=9Melx+*jSlJdEK%<lEOhu)QD?z82|}M$9XUpe zOu>L?r&94!5RIP>@~HN&p^wUIAFn*}f@>46xo{RfUVyBL8V0H5?=o?US(h1J^Xi){ zX%(|)>hs4BUX3#}7j}kw2oH<-I^@<{xfaB%te77rmSOcQ1VYox(DdcB+t!N)-FOi5 z>aY0XxKCM(S4Ti|5Or|q=@35e%A`J8C0~5>6^v^8a?*Q%1J+tM^N7q>f{sHr)GV3n z#l~LFsZ)w$eYF<|snRiPfq|Y<ua@i8a$O330smZ|p}fzVF`S?vEx{{O=4{&L5I1#w z1DlS$_BWV938pzi&wFL1Ym??%?`NsZt4VQ5V0X&SEEux{8SsSJg+oNcJwQ`BgpK~b zJj#O3dHk4m9sl3!+#dl>34o}FIm!~W)>n+*)sZoWYskI6^?d><_NcQ8;6->W>zZ#_ z-|H#Ks(8T)iWgV&ZaXWpUsd43$x`j23RBIySKVimNi3=Ik)*dETD0FAuym4^mf1>L zZcm)V{b5Vx8CLceLU(iEqMrC!aJucr$u`*;@R9lGO17b8^Y}HHJK3x~ToL~Kk-O7y zR(3r4=IOhl%zyz$73Oah6j^&SLwoAMvTsY><7b<!dcJph%qshI;5|>Bo6v!IKy_}6 zfDFb71j{OG01=eZoHv}z+8xnq>>c;aQ+PFa=Vw#7DQz}t7ZqpU6-2cLXQK!Z>)-Do z+6@*Djv+CTyVCFFwxbo!id3zzp$%`X939Y^p9^SFqb0D8n3%ODN%Isuph;#0#yRNo z*;<ag2+nz$JqTxx9Eqwz)6DqaH}8?Rsp*j;>d>aRov$%3vyRPIOtt^~kx8GvzqLMF z*1*H;-(GDiYnY00&-aDN#lT)=mZnfHdgV#qdPcPDo|E#fm_79s3g)R#;<M70`vBsp z8&bqb>n0(r5hMuR_vha~Vt8r(FRVYIJz?J7Q`4fa(%F3TbcBGzvceg!jmtFUV%Gr0 z7o9g<NapsP;fEOBR<pevCVJE)ZHND1JQi$o<;hD0Zmjg;+`IV<&@^Z)!&2yLgJ^oK zfxP(=aMq8?Dzww<tdim7l?^->-7qmR5tX<u%F=rX8Q|vA##@MI8i<UNmk-L}?<((b z6Ax}!QVKXlwp}_lV>Ukwcn?!E6^Yal^;|n_EE-#}`bAKtY^lkT_y5mxnOw__13}Og zI?(fo9q>v1pC=+g=_GwLK>}4-xk#H`_0JQk^gWy794YXNOn-0Z8hs__06gU+4O5n8 ze0oGj{O!5ZaAhf(OK~%yDO}B|RRBFM0(gv~{fZ=^=Se<`Jdd8KQzFBgd%S;DQ(LS( z#}x4}n~X#ydfnr54V7U71$^F3L)Gy;#ylpWCHwd#O+5u@{YDO)0m-iAc!*@2_om_k zwV8Z;gbwQqV9+}2=SX7Knwzx>`WE;ho@CzziV5m<EivPZg7=k8p`&vhl7xcU0PlJ# z>Z=S@Wu(S;LFhSLRefU3YO*3+b;F$I4aI({y;=1dyw9uY+MEfpY|5d*dtWzo9S9$y zrc2?{O3v`MMscjqZZ^nDEBVH~QA>HEIuqBB(pk%0DOifRs;9&h%C9zUp|}NFt*?9Q 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̩*9IkjZJW|1eGXbqphve!4*>Zi;Oq55TTt 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 bUe7HD6MKhmqX|ImjFd#tfWe9yXK4NlKcsHS literal 0 HcmV?d00001 diff --git a/docs/ampscript/ampscript-style-guide/index.html b/docs/ampscript/ampscript-style-guide/index.html index f2bb8bcf1..7dd6495fc 100644 --- a/docs/ampscript/ampscript-style-guide/index.html +++ b/docs/ampscript/ampscript-style-guide/index.html @@ -1,22 +1,140 @@ <!doctype html> -<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ampscript/ampscript-style-guide" data-has-hydrated="false"> +<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-ampscript/ampscript-style-guide" data-has-hydrated="false"> <head> <meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v2.4.3"> -<title data-rh="true">AMPScript Style Guide | Mateusz Dąbrowski + +AMPScript Style Guide | Mateusz Dąbrowski - - - + + + -
    -

    AMPScript Style Guide

    Script with style. Readable code is a few rules & conventions away.

    First things first: this Salesforce Marketing Cloud AMPScript style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:

    1. Be consistent across your codebase.
    2. Strive for good readability.

    Everything else is preference. And you are just about to learn about mine.

    Naming Convention

    AMPScript gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity.

    Meaningful Names

    Use descriptive names to provide context.

    As John F. Woods said, always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project.

    Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your AMPScript better with meaningful variable names:

    1. Use descriptive variable names. It is better to have a long explicit one (IsTrackingSuppressed) than a short mysterious abbreviation (Trk).
    2. When the variable is a boolean, prefix it with Is (or Has/Does/Are depending on the underlying data).
    3. When the variable is a date, suffix it with Date.
    /* ✅ Descriptive and suggesting boolean data type */
    SET @isTrackingSuppressed = false;

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    SET @value = false;

    /* ✅ Descriptive and suggesting date data type */
    SET @trackingSupressionStartDate = Now();

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    SET @supressed = Now();

    AMPScript Letter Case

    AMPScript letter case is a minefield. I have seen all possible combinations of letter case used for variables and AMPScript functions - both in shared snippets and official documentation.

    I even created a survey to check which approach is the most popular. Outcomes from 168 votes?

    • 45%: Mix of ProperCase and UPPERCASE for various elements.
    • 30%: ProperCase for everything.
    • 15%: UPPERCASE for everything.
    • 10%: Other conventions (including lowercase with some camelCase for functions and snake_case for variables by Adam Spriggs, co-author of the AMPScript bible - ampscript.guide).

    So the best recommendation for you (and your team) to decide on one style - whichever it will be - and stay consistent.

    I decided to use a mixed approach for the sake of readability. It might not be as simple as focusing on just one letter case format for the whole code, but it improves the experience of working with longer and more complex AMPScript a lot.

    AMPScript Variable Names

    Use camelCase for variable names.

    I use camelCase for AMPScript variables because:

    1. It is more readable than lowercase or UPPERCASE - especially for longer names.
    2. It is easier to differentiate variable name (@ prefix and camelCase) from the function name (PascalCase), even if they use the same word (frequent for technical variables like counters).
    3. It is in line with the SSJS styling for variables, so it's easier to switch between languages.
    /* ✅ camelCase variable names */
    VAR @response, @salesforceCampaigns, @rowCount
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = RowCount(@salesforceCampaigns)

    /* ❌ lowercase variable names */
    VAR @response, @salesforcecampaigns, @rowcount
    SET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowcount = RowCount(@salesforcecampaigns)

    /* ❌ inconsistent case variable names */
    VAR @RESPONSE, @salesforcecampaigns, @RowCount
    SET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @RowCount = RowCount(@salesforcecampaigns)

    AMPScript Functions

    Use PascalCase for function names.

    I use PascalCase for AMPScript functions because:

    1. It is more readable than lowercase or UPPERCASE - especially for longer names.
    2. It is easier to differentiate function name (PascalCase) from the variable name (@ prefix and camelCase), even if they use the same word (frequent for technical variables like counters).
    3. It is in line with the SSJS styling for built-in functions, so it's easier to switch between languages.
    /* ✅ PascalCase variable names */
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = RowCount(@salesforceCampaigns)

    /* ❌ lowercase function names */
    SET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = rowcount(@salesforceCampaigns)

    /* ❌ inconsistent case variable names */
    SET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = ROWCOUNT(@salesforceCampaigns)

    AMPScript Loops, Ifs and Variable Declarations

    Use UPPERCASE for loops, if blocks and variable declarations.

    Although I recommend PascalCase for most of the AMPScript syntax, I believe that limited usage of UPPERCASE can have tremendous benefit to readability.

    I use UPPERCASE for three groups of elements:

    1. Variable declaration and setting syntax (VAR & SET).
    2. If statement syntax (IF, NOT, THEN ELSEIF, ENDIF and also IIF).
    3. Loop syntax (FOR, TO/DOWNTO, DO, NEXT).

    Those three groups are either fundamental data points within your AMPScript code (variables) or the only source of real complexity (IF statements and FOR loops). That's why I recommend improving readability and increasing attention around those parts of the script.

    /* ✅ UPPERCASE for variable declarations, IF and FOR syntax */
    VAR @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = RowCount(@salesforceCampaigns)

    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @row = Row(@retrieve, @counter)
    SET @name = Field(@row, 'Name')
    SET @id = Field(@row, 'Id')
    SET @startDate = Field(@row, 'StartDate')
    SET @endDate = Field(@row, 'EndDate')
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF

    /* ❌ PascalCase for variable declarations, IF and FOR syntax */
    Var @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response
    Set @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    Set @rowCount = RowCount(@salesforceCampaigns)

    If @rowCount > 0 Then
    For @counter = 1 To @rowCount Do
    Set @row = Row(@retrieve, @counter)
    Set @name = Field(@row, 'Name')
    Set @id = Field(@row, 'Id')
    Set @startDate = Field(@row, 'StartDate')
    Set @endDate = Field(@row, 'EndDate')
    Set @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    Set @response = Concat(@response, @rowData, ';')
    Next @counter
    Endif

    Consistent Quotes

    Use single quote style.

    With AMPScript, you can use either single quotes (') or double quotes ("). I prefer the single quotes:

    1. I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML.
    2. On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster.

    However, there are many English words using apostrophes, and using double quotes means no need to escape them.

    In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)

    /* ✅ Single Quotes */
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')

    /* ❌ Mixed Quotes */
    SET @salesforceCampaigns = RetrieveSalesforceObjects("Campaign", 'Name,Id,StartDate,EndDate', "IsActive", "=", "True")

    Indentation and Spacing

    Letter case is just one element of syntax convention that helps with readability. Other important ones are indentation and spacing. AMPScript requires neither, but both can help you write better code.

    Consistent Indentation

    Use indentation to highlight code relationships.

    Indentation in AMPScript is even more critical than in SSJS. Without curly brackets, it is the last hope for readability. The indentation will help you quickly understand the relationships between the code lines.

    It is straightforward to apply the correct indentation to the simplicity of AMPScript. There are just two elements that require it. IF statements and FOR loops - add indentation level inside of those and get readable code.

    /* ✅ Indented Syntax */
    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @row = Row(@retrieve, @counter)
    SET @name = Field(@row, 'Name')
    SET @id = Field(@row, 'Id')
    SET @startDate = Field(@row, 'StartDate')
    SET @endDate = Field(@row, 'EndDate')
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF

    /* ❌ Flat Syntax */
    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @row = Row(@retrieve, @counter)
    SET @name = Field(@row, 'Name')
    SET @id = Field(@row, 'Id')
    SET @startDate = Field(@row, 'StartDate')
    SET @endDate = Field(@row, 'EndDate')
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF
    You Should Know

    It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click.

    Intentional Spacing

    Use spaces wherever it makes the code more readable.

    To visually separate elements, use spaces:

    • Around operators.
    • After commas.
    /* ✅ Intentional spacing */
    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF

    /* ❌ Lack of spacing */
    IF @rowCount>0 THEN
    FOR @counter=1 TO @rowCount DO
    SET @rowData=Concat(@name,',',@id,',',@startDate,',',@endDate)
    SET @response=Concat(@response,@rowData,';')
    NEXT @counter
    ENDIF

    Comments

    Code tells you how. Comments tell you why. - Jeff Atwood

    To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks.

    Whenever you build complex AMPScript code, I recommend using three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough.

    1. Table of Contents Comment

    The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script.

    Before writing the AMPScript, describe the desired outcome and all steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation.

    As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces.

    /* --------------------------------------------------------------------------

    Authenticates each visitor to limit access only to SFMC logged-in users.

    1. Global Variables - should be updated for each implementation
    2. Authentication Flow
    2.1. Authorisation
    2.2. Authentication with REST Token
    2.2.1. Upsert Logging Data Extension

    -------------------------------------------------------------------------- */

    2. Section Comments

    To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts.

    For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */
    /* ----------------------------------------------------------------------- */

    /* ------------------------- 2.1. Authorisation -------------------------- */

    /* ------------------------- 2.2. Authentication ------------------------- */

    /* 2.2.1. Build token request payload */

    3. Documentation Comments

    Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments.

    When to write a comment? My rule of thumb is to add them whenever someone else reading your code for the first time would ask a question about context or purpose.

        /* Capture Session for Authorisation purposes */
    SET @session = RequestParameter('s')

    /* ----------------------------------------------------------------------- */
    /* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Session Validation ------------------------ */

    /* If there is Session parameter, validate it with logging DE*/
    IF NOT Empty(@session) THEN
    /* If user was authenticated for another app or if he is not authenticated, redirect to login page */
    IF Lookup(@authDE, 'appName', 'session', @session) != @appName THEN
    Redirect(@appURL)
    ENDIF
    /* Authenticated users jumps to main code */

    Sum Up

    It is a long article, so let's gather all the recommendations in one place:

    1. Be consistent
    2. Strive for readability
    3. Use descriptive names to provide context 🔗
    4. Use camelCase for variable names 🔗
    5. Use PascalCase for function names 🔗
    6. Use UPPERCASE for loops, if blocks and variable declarations 🔗
    7. Use single quote style 🔗
    8. Use indentation to highlight code relationships 🔗
    9. Use spaces wherever it makes the code more readable 🔗
    10. Use comments to provide required context to your script 🔗

    If you want to share something I'm missing or have arguments for a different recommendation - let me know.

    Looking for more Marketing Cloud style? Check out my:

    - - +

    AMPScript Style Guide

    Script with style. Readable code is a few rules & conventions away.

    +

    First things first: this Salesforce Marketing Cloud AMPScript style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:

    +
      +
    1. Be consistent across your codebase.
    2. +
    3. Strive for good readability.
    4. +
    +

    Everything else is preference. And you are just about to learn about mine.

    +

    Naming Convention

    +

    AMPScript gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity.

    +

    Meaningful Names

    +

    Use descriptive names to provide context.

    +

    As John F. Woods said, always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project.

    +

    Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your AMPScript better with meaningful variable names:

    +
      +
    1. Use descriptive variable names. It is better to have a long explicit one (IsTrackingSuppressed) than a short mysterious abbreviation (Trk).
    2. +
    3. When the variable is a boolean, prefix it with Is (or Has/Does/Are depending on the underlying data).
    4. +
    5. When the variable is a date, suffix it with Date.
    6. +
    +
    /* ✅ Descriptive and suggesting boolean data type */
    SET @isTrackingSuppressed = false;

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    SET @value = false;

    /* ✅ Descriptive and suggesting date data type */
    SET @trackingSupressionStartDate = Now();

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    SET @supressed = Now();
    +

    AMPScript Letter Case

    +

    AMPScript letter case is a minefield. I have seen all possible combinations of letter case used for variables and AMPScript functions - both in shared snippets and official documentation.

    +

    I even created a survey to check which approach is the most popular. Outcomes from 168 votes?

    +
      +
    • 45%: Mix of ProperCase and UPPERCASE for various elements.
    • +
    • 30%: ProperCase for everything.
    • +
    • 15%: UPPERCASE for everything.
    • +
    • 10%: Other conventions (including lowercase with some camelCase for functions and snake_case for variables by Adam Spriggs, co-author of the AMPScript bible - ampscript.guide).
    • +
    +

    So the best recommendation for you (and your team) to decide on one style - whichever it will be - and stay consistent.

    +

    I decided to use a mixed approach for the sake of readability. It might not be as simple as focusing on just one letter case format for the whole code, but it improves the experience of working with longer and more complex AMPScript a lot.

    +

    AMPScript Variable Names

    +

    Use camelCase for variable names.

    +

    I use camelCase for AMPScript variables because:

    +
      +
    1. It is more readable than lowercase or UPPERCASE - especially for longer names.
    2. +
    3. It is easier to differentiate variable name (@ prefix and camelCase) from the function name (PascalCase), even if they use the same word (frequent for technical variables like counters).
    4. +
    5. It is in line with the SSJS styling for variables, so it's easier to switch between languages.
    6. +
    +
    /* ✅ camelCase variable names */
    VAR @response, @salesforceCampaigns, @rowCount
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = RowCount(@salesforceCampaigns)

    /* ❌ lowercase variable names */
    VAR @response, @salesforcecampaigns, @rowcount
    SET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowcount = RowCount(@salesforcecampaigns)

    /* ❌ inconsistent case variable names */
    VAR @RESPONSE, @salesforcecampaigns, @RowCount
    SET @salesforcecampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @RowCount = RowCount(@salesforcecampaigns)
    +

    AMPScript Functions

    +

    Use PascalCase for function names.

    +

    I use PascalCase for AMPScript functions because:

    +
      +
    1. It is more readable than lowercase or UPPERCASE - especially for longer names.
    2. +
    3. It is easier to differentiate function name (PascalCase) from the variable name (@ prefix and camelCase), even if they use the same word (frequent for technical variables like counters).
    4. +
    5. It is in line with the SSJS styling for built-in functions, so it's easier to switch between languages.
    6. +
    +
    /* ✅ PascalCase variable names */
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = RowCount(@salesforceCampaigns)

    /* ❌ lowercase function names */
    SET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = rowcount(@salesforceCampaigns)

    /* ❌ inconsistent case variable names */
    SET @salesforceCampaigns = retrievesalesforceobjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = ROWCOUNT(@salesforceCampaigns)
    +

    AMPScript Loops, Ifs and Variable Declarations

    +

    Use UPPERCASE for loops, if blocks and variable declarations.

    +

    Although I recommend PascalCase for most of the AMPScript syntax, I believe that limited usage of UPPERCASE can have tremendous benefit to readability.

    +

    I use UPPERCASE for three groups of elements:

    +
      +
    1. Variable declaration and setting syntax (VAR & SET).
    2. +
    3. If statement syntax (IF, NOT, THEN ELSEIF, ENDIF and also IIF).
    4. +
    5. Loop syntax (FOR, TO/DOWNTO, DO, NEXT).
    6. +
    +

    Those three groups are either fundamental data points within your AMPScript code (variables) or the only source of real complexity (IF statements and FOR loops). That's why I recommend improving readability and increasing attention around those parts of the script.

    +
    /* ✅ UPPERCASE for variable declarations, IF and FOR syntax */
    VAR @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    SET @rowCount = RowCount(@salesforceCampaigns)

    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @row = Row(@retrieve, @counter)
    SET @name = Field(@row, 'Name')
    SET @id = Field(@row, 'Id')
    SET @startDate = Field(@row, 'StartDate')
    SET @endDate = Field(@row, 'EndDate')
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF

    /* ❌ PascalCase for variable declarations, IF and FOR syntax */
    Var @response, @salesforceCampaigns, @rowCount, @counter, @row, @name, @id, @startDate, @endDate, @rowData, @response
    Set @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')
    Set @rowCount = RowCount(@salesforceCampaigns)

    If @rowCount > 0 Then
    For @counter = 1 To @rowCount Do
    Set @row = Row(@retrieve, @counter)
    Set @name = Field(@row, 'Name')
    Set @id = Field(@row, 'Id')
    Set @startDate = Field(@row, 'StartDate')
    Set @endDate = Field(@row, 'EndDate')
    Set @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    Set @response = Concat(@response, @rowData, ';')
    Next @counter
    Endif
    +

    Consistent Quotes

    +

    Use single quote style.

    +

    With AMPScript, you can use either single quotes (') or double quotes ("). I prefer the single quotes:

    +
      +
    1. I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML.
    2. +
    3. On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster.
    4. +
    +

    However, there are many English words using apostrophes, and using double quotes means no need to escape them.

    +

    In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)

    +
    /* ✅ Single Quotes */
    SET @salesforceCampaigns = RetrieveSalesforceObjects('Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True')

    /* ❌ Mixed Quotes */
    SET @salesforceCampaigns = RetrieveSalesforceObjects("Campaign", 'Name,Id,StartDate,EndDate', "IsActive", "=", "True")
    +

    Indentation and Spacing

    +

    Letter case is just one element of syntax convention that helps with readability. Other important ones are indentation and spacing. AMPScript requires neither, but both can help you write better code.

    +

    Consistent Indentation

    +

    Use indentation to highlight code relationships.

    +

    Indentation in AMPScript is even more critical than in SSJS. Without curly brackets, it is the last hope for readability. The indentation will help you quickly understand the relationships between the code lines.

    +

    It is straightforward to apply the correct indentation to the simplicity of AMPScript. There are just two elements that require it. IF statements and FOR loops - add indentation level inside of those and get readable code.

    +
    /* ✅ Indented Syntax */
    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @row = Row(@retrieve, @counter)
    SET @name = Field(@row, 'Name')
    SET @id = Field(@row, 'Id')
    SET @startDate = Field(@row, 'StartDate')
    SET @endDate = Field(@row, 'EndDate')
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF

    /* ❌ Flat Syntax */
    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @row = Row(@retrieve, @counter)
    SET @name = Field(@row, 'Name')
    SET @id = Field(@row, 'Id')
    SET @startDate = Field(@row, 'StartDate')
    SET @endDate = Field(@row, 'EndDate')
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF
    +
    You Should Know

    It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click.

    +

    Intentional Spacing

    +

    Use spaces wherever it makes the code more readable.

    +

    To visually separate elements, use spaces:

    +
      +
    • Around operators.
    • +
    • After commas.
    • +
    +
    /* ✅ Intentional spacing */
    IF @rowCount > 0 THEN
    FOR @counter = 1 TO @rowCount DO
    SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate)
    SET @response = Concat(@response, @rowData, ';')
    NEXT @counter
    ENDIF

    /* ❌ Lack of spacing */
    IF @rowCount>0 THEN
    FOR @counter=1 TO @rowCount DO
    SET @rowData=Concat(@name,',',@id,',',@startDate,',',@endDate)
    SET @response=Concat(@response,@rowData,';')
    NEXT @counter
    ENDIF
    +

    Comments

    +

    Code tells you how. Comments tell you why. - Jeff Atwood

    +

    To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks.

    +

    Whenever you build complex AMPScript code, I recommend using three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough.

    +

    1. Table of Contents Comment

    +

    The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script.

    +

    Before writing the AMPScript, describe the desired outcome and all steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation.

    +

    As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces.

    +
    /* --------------------------------------------------------------------------

    Authenticates each visitor to limit access only to SFMC logged-in users.

    1. Global Variables - should be updated for each implementation
    2. Authentication Flow
    2.1. Authorisation
    2.2. Authentication with REST Token
    2.2.1. Upsert Logging Data Extension

    -------------------------------------------------------------------------- */
    +

    2. Section Comments

    +

    To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts.

    +

    For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments

    +
    /* ----------------------------------------------------------------------- */
    /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */
    /* ----------------------------------------------------------------------- */

    /* ------------------------- 2.1. Authorisation -------------------------- */

    /* ------------------------- 2.2. Authentication ------------------------- */

    /* 2.2.1. Build token request payload */
    +

    3. Documentation Comments

    +

    Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments.

    +

    When to write a comment? My rule of thumb is to add them whenever someone else reading your code for the first time would ask a question about context or purpose.

    +
        /* Capture Session for Authorisation purposes */
    SET @session = RequestParameter('s')

    /* ----------------------------------------------------------------------- */
    /* ----------------------- 2. AUTHENTICATION FLOW ------------------------ */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Session Validation ------------------------ */

    /* If there is Session parameter, validate it with logging DE*/
    IF NOT Empty(@session) THEN
    /* If user was authenticated for another app or if he is not authenticated, redirect to login page */
    IF Lookup(@authDE, 'appName', 'session', @session) != @appName THEN
    Redirect(@appURL)
    ENDIF
    /* Authenticated users jumps to main code */
    +

    Sum Up

    +

    It is a long article, so let's gather all the recommendations in one place:

    +
      +
    1. Be consistent
    2. +
    3. Strive for readability
    4. +
    5. Use descriptive names to provide context 🔗
    6. +
    7. Use camelCase for variable names 🔗
    8. +
    9. Use PascalCase for function names 🔗
    10. +
    11. Use UPPERCASE for loops, if blocks and variable declarations 🔗
    12. +
    13. Use single quote style 🔗
    14. +
    15. Use indentation to highlight code relationships 🔗
    16. +
    17. Use spaces wherever it makes the code more readable 🔗
    18. +
    19. Use comments to provide required context to your script 🔗
    20. +
    +

    If you want to share something I'm missing or have arguments for a different recommendation - let me know.

    +

    Looking for more Marketing Cloud style? Check out my:

    +
    \ No newline at end of file diff --git a/docs/category/ampscript-snippets/index.html b/docs/category/ampscript-snippets/index.html index eac36b14b..f141555e5 100644 --- a/docs/category/ampscript-snippets/index.html +++ b/docs/category/ampscript-snippets/index.html @@ -1,22 +1,19 @@ - + - -SFMC AMPScript Snippets | Mateusz Dąbrowski + +SFMC AMPScript Snippets | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/ampscript/index.html b/docs/category/ampscript/index.html index 9a4d6c515..1efb63c90 100644 --- a/docs/category/ampscript/index.html +++ b/docs/category/ampscript/index.html @@ -1,22 +1,19 @@ - + - -AMPScript | Mateusz Dąbrowski + +AMPScript | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/javascript/index.html b/docs/category/javascript/index.html index f80408d95..4002d132f 100644 --- a/docs/category/javascript/index.html +++ b/docs/category/javascript/index.html @@ -1,22 +1,19 @@ - + - -JavaScript | Mateusz Dąbrowski + +JavaScript | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/js-snippets/index.html b/docs/category/js-snippets/index.html index 9226d94cd..f2d0d4b0c 100644 --- a/docs/category/js-snippets/index.html +++ b/docs/category/js-snippets/index.html @@ -1,22 +1,19 @@ - + - -JS Snippets | Mateusz Dąbrowski + +JS Snippets | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/mc-personalization-snippets/index.html b/docs/category/mc-personalization-snippets/index.html index fd6ae5e77..09396fbf8 100644 --- a/docs/category/mc-personalization-snippets/index.html +++ b/docs/category/mc-personalization-snippets/index.html @@ -1,22 +1,19 @@ - + - -Marketing Cloud Personalization Snippets | Mateusz Dąbrowski + +Marketing Cloud Personalization Snippets | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/mc-personalization/index.html b/docs/category/mc-personalization/index.html index 3bf9f6664..400f03065 100644 --- a/docs/category/mc-personalization/index.html +++ b/docs/category/mc-personalization/index.html @@ -1,22 +1,19 @@ - + - -Marketing Cloud Personalization | Mateusz Dąbrowski + +Marketing Cloud Personalization | Mateusz Dąbrowski - - - + + + -
    -
    - - +
    \ No newline at end of file diff --git a/docs/category/serverside-code/index.html b/docs/category/serverside-code/index.html index 46cbe976c..e34af3eac 100644 --- a/docs/category/serverside-code/index.html +++ b/docs/category/serverside-code/index.html @@ -1,22 +1,19 @@ - + - -MCP Serverside Code | Mateusz Dąbrowski + +MCP Serverside Code | Mateusz Dąbrowski - - - + + + - - - +
    \ No newline at end of file diff --git a/docs/category/sfmc-config/index.html b/docs/category/sfmc-config/index.html index a83164c92..93c79aecc 100644 --- a/docs/category/sfmc-config/index.html +++ b/docs/category/sfmc-config/index.html @@ -1,22 +1,19 @@ - + - -SFMC Config | Mateusz Dąbrowski + +SFMC Config | Mateusz Dąbrowski - - - + + + -
    -
    - - +
    \ No newline at end of file diff --git a/docs/category/sfmc-sql-snippets/index.html b/docs/category/sfmc-sql-snippets/index.html index 9caf0c38f..d7e6bc1db 100644 --- a/docs/category/sfmc-sql-snippets/index.html +++ b/docs/category/sfmc-sql-snippets/index.html @@ -1,22 +1,19 @@ - + - -SFMC SQL Snippets | Mateusz Dąbrowski + +SFMC SQL Snippets | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/sfmc-sql/index.html b/docs/category/sfmc-sql/index.html index f9c69550e..57360fc0e 100644 --- a/docs/category/sfmc-sql/index.html +++ b/docs/category/sfmc-sql/index.html @@ -1,22 +1,19 @@ - + - -SFMC SQL | Mateusz Dąbrowski + +SFMC SQL | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL

    To fully leverage the Salesforce Marketing Cloud Data Extensions and Automation Studio, SQL is a must-have. Here I gathered both the language basics and some of the most valuable snippets to copy and paste shamelessly.

    - - +

    SFMC SQL

    To fully leverage the Salesforce Marketing Cloud Data Extensions and Automation Studio, SQL is a must-have. Here I gathered both the language basics and some of the most valuable snippets to copy and paste shamelessly.

    \ No newline at end of file diff --git a/docs/category/sfmc-webinars/index.html b/docs/category/sfmc-webinars/index.html index d73b1a1be..8947d193d 100644 --- a/docs/category/sfmc-webinars/index.html +++ b/docs/category/sfmc-webinars/index.html @@ -1,22 +1,19 @@ - + - -SFMC Webinars | Mateusz Dąbrowski + +SFMC Webinars | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/ssjs-snippets/index.html b/docs/category/ssjs-snippets/index.html index 8f91ec90e..f56e8f90e 100644 --- a/docs/category/ssjs-snippets/index.html +++ b/docs/category/ssjs-snippets/index.html @@ -1,22 +1,19 @@ - + - -SFMC SSJS Snippets | Mateusz Dąbrowski + +SFMC SSJS Snippets | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/category/ssjs/index.html b/docs/category/ssjs/index.html index 29dd4c39c..a31efdaae 100644 --- a/docs/category/ssjs/index.html +++ b/docs/category/ssjs/index.html @@ -1,22 +1,19 @@ - + - -SSJS | Mateusz Dąbrowski + +SSJS | Mateusz Dąbrowski - - - + + + -
    -
    - - +
    \ No newline at end of file diff --git a/docs/config/sfmc-appexchange-solutions/index.html b/docs/config/sfmc-appexchange-solutions/index.html index b917aa365..17de4f819 100644 --- a/docs/config/sfmc-appexchange-solutions/index.html +++ b/docs/config/sfmc-appexchange-solutions/index.html @@ -1,22 +1,209 @@ - + - -SFMC AppExchange Solutions | Mateusz Dąbrowski + +SFMC AppExchange Solutions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Solution highlights from Salesforce Marketing Cloud's AppExchange.

    AppExchange is an app store for various Clouds within Salesforce Customer 360 platform. You will find in-house solutions from Salesforce Labs and 3rd party. Free and paid. Good and bad. But all - validated by Salesforce Security Review.

    From over 4000 solutions available there, only around 60 are for the Saleforce Marketing Cloud. Here, I will focus only on those I had experience with to provide some value over the standard AppExchange descriptions.

    You Should Know

    This document is a living thing. New solutions keep popping up, and old ones sometimes disappear or are recreated. I try to keep it up-to-date, but your help with this task will be appreciated.

    When is AppExchange worth it?

    Before we jump into specific solutions available in the store, let's talk about whether you should consider going through AppExchange offerings. This question is especially relevant with how feature-packed and customizable the Marketing Cloud is. And not that easy to answer when you assess all decision drivers.

    1. Define feature requirements

    Ok, you want a feature and are eager to find a solution to deliver it. Now stop. Before opening the AppExchange repository, you should dive deep into the exact requirements the solution has to fulfil.

    Key things to consider:

    • What it needs to do - what is the minimum valuable outcome, and what is an ideal one?
    • How it needs to do it - does it have to be a user-friendly no-code solution, or is a developer-oriented approach acceptable?
    • Where it needs to do it - does it have to be done within the SFMC, or can it be external?
    • Who needs to do it - do you have the resources to implement it, or should it be outsourced?
    • What is the budget - does it have to be free, cheap, or you can pay for good value?

    Those requirements should be aligned with the final users and be clear enough to serve as a guardrail for making an informed decision.

    2. Validate out-of-the-box options

    Once you have requirements, it's time to check what already is within your Marketing Cloud license. Over the years, Salesforce baked in many solutions, so you might find something already there, just waiting to be used.

    You Should Know

    Not all solutions are available by default - some require a support ticket to be enabled. Check out my list of features on-demand to see if there is anything hidden that might fulfil your requirements.

    However, even if your requirement has an out-of-the-box solution, it doesn't always mean the end of the work. You need to check whether it is good and easy enough:

    • Good Enough: Just because there is something, it might not meet all the requirements you gathered in the first step. Maybe it is too basic for your needs or doesn't have access to all data you want to leverage. It is where you start seeing the benefits of the prework.
    • Easy Enough: Even if the solution is good enough, it might not be easy enough. Always assess the solution by considering the knowledge and skills of the end users - not yours (unless you will be the only end user, of course).

    If the out-of-the-box solution checks both boxes - you hit the jackpot and can leverage what is already there.

    Else, it's time to look somewhere... else.

    3. Free AppExchange Solutions

    Time to check whether there is any free solution available on demand. You can do it by going to marketing AppExchange and applying filters to get Free solutions dedicated to Marketing Cloud.

    To manage your expectations: for Salesforce Marketing Cloud, the list won't be long. And even then, you have to make sure the app is genuinely offering a meaningful free tier. Expect free Salesforce Labs solutions (like Query Studio covered below) and little pearls made by 3rd parties - like Content Builder asset finder DESelect Search.

    If you are lucky enough to find something free in AppExchange related to your requirements, check whether it is good enough. Just as you did in the previous step.

    No luck? Before checking the paid filter in AppExchange, there is one more approach to consider.

    4. Custom Solution

    A decade ago, building a custom solution for every requirement was all the rage. Since then, the platforms and their 3rd party ecosystems have grown significantly, making this approach much less tempting. Why?

    There are four things to consider:

    1. Can you build a Custom solution? This can be done using in-house developers or outsourced to external specialists, but you need either skills or a budget.
    2. Will it be good enough? If you have the means, building a custom is easy. But do you have enough skills or budget to make a good solution that will be user-friendly, optimized, polished and matching all your requirements?
    3. Will it be cheaper than AppExchange? Sure, with enough time and money, you can build something good enough. But will it be more affordable than a similar solution available in the paid section of AppExchange?
    4. Will you maintain it? Even if you answered yes to the previous three points, you must consider maintenance. In most cases, building a custom is just the beginning. Requirements change, new needs happen, platforms get updated and require refactor. With AppExchange solutions, it should be much less of a worry in the long term.

    While the list might look like a hard pass for custom solutions, there is a place for them. Especially on the ends of the spectrum. Simple, but lifesaving micro solutions (Cloud Page Apps, Code Resources) or custom behemoths aligned to all non-negotiable quirks and features of your internal processes.

    However, if you hit a hard "no" to any of the above questions, it's time to visit the AppExchange again.

    5. Paid AppExchange Solutions

    Here we are. After defining the requirements, we haven't found anything worthy among the out-of-the-box solutions, the land of the free AppExchange was barren, and the custom work didn't seem like the best choice. Paid AppExchange it is. But is it really?

    Assuming you found a paid solution, you still need to assess whether it will be good enough. The positive part here? If you see only small pieces missing from the ideal, you might talk with the solution creators and discuss prioritization of the future changes.

    However, you also need to keep in mind the budget. Not only the subscription cost but also implementation, training, and enhancements. After considering all that, will you still see a return on investment? If yes - you are good to go.

    If not, it's time to update your requirements - the list of needed features or the budget size - and start again.


    Sounds complex? Would you rather have a visual guide? Got you covered:

    Looks complex? Would you rather have an example-based walkthrough? Got you covered as well in the next chapter:

    SFMC Segmentation Solutions

    Finding the right approach to database segmentation is one of the critical elements of successful marketing automation. In Salesforce Marketing Cloud, it's a complex topic because (spoiler) there is no perfect - powerful, simple and free - solution. You need to choose your priorities.

    Looks like excellent use case to test the "Is AppExchange worth it?" process on a real-life scenario, so let's check how it works.

    1. Feature Requirements

    Let me paraphrase the user story constraints I encounter on nearly every implementation:

    • As a company, I want to have segmentation based on our comprehensive data so that we can send the right communication to the right persons at the right time.
    • As a marketer, I want to have a drag and drop segmentation so that it is fast and easy to deliver correctly built segments.

    Let's split it into crucial things to consider:

    • What it needs to do - Segment the database using multiple data points.
    • How it needs to do it - Simple drag and drop solution.
    • Where it needs to do it - Within Marketing Cloud.
    • Who needs to do it - Undecided, but no internal resources for implementation.
    • What is the budget - No budget.

    Does it sound familiar? ;)

    2. Out-of-the-box options

    There are two ways to segment contacts in Marketing Cloud core. Filtered Data Extensions and SQL Query Activities. How do they stack against our requirements?

    Filtered Data Extensions are free, require nearly no implementation (apart from setting Data Relationships), work directly in SFMC, and are a simple drag and drop solution, but... They don't support segmenting on more than two Data Extensions. Not good enough.

    SQL Query Activities are free, require no implementation, work directly in SFMC and allow segmenting on multiple data points, but... demand SQL skills. It means training requirements, slower segmentation and a higher risk of errors by inexperienced users. Not easy enough.

    3. Free AppExchange

    Filtering the AppExchange for free solutions will show only one related to segmentation - Query Studio. While it's a great tool, it's still a SQL-based solution. It's also not an end-to-end tool for segmentation purposes. Not good enough.

    4. Custom Solution

    There are two base options for the drag and drop custom solution approach.

    First - generator that modifies predefined segments. It's relatively simple to build, but it allows you to make only minor adaptations of the templated query, mostly on filtering (SQL WHERE. Very limited and requires hard coding for each new segment template. Not good enough and hard to maintain.

    Second - fully-fledged visual wrapper over SQL queries. Full power with a drag and drop interface. Sounds like a dream? Correct. Such solution requires a lot of work and testing. The cost would skyrocket well above (spoiler alert) what is available in the paid section of AppExchange. Not worth it.

    5. Paid AppExchange

    Finally, we get to the last stop. After a quick search, we can find two solutions: tried and tested DESelect Segment and the new contender Activation Studio. More details on them in a moment, but from the perspective of this exercise - both are subscription based, while one of the key things to consider was the beloved "no budget".

    Therefore we get to the update requirements step, where the company needs to prioritize between powerful, simple and free.

    I hope it is now easier to find when AppExchange can solve Marketing Cloud requirements. With that, let's jump to the segmentation solutions available there.


    Query Studio

    CreatorPricing
    Salesforce LabsFree

    The Good

    Query Studio solves two problems:

    1. SFMC SQL Query Testing
    2. SFMC SQL Data Exploratory Analysis

    Why did I call it problems?

    Because the only out-of-the-box solution for working with SQL in Marketing Cloud is Query Activity in Automation Studio. It allows you to validate whether your query is valid, but checking if the outcomes are as expected is a pain.

    You can see the results only after manually creating a data extension with the correct columns (names, data types, lengths) and executing the Query Activity. Outcomes are suboptimal and need to make some changes? The Data Extension needs a rework.

    It sometimes happens when you are writing and testing a new query. It happens all the time when you are doing exploratory analysis.

    Query Studio automatically builds a temporary Data Extension to store the query's output on every execution. It also displays a subset of outcomes below your SQL so you can quickly check whether it aligns with your expectations.

    And that's not all - Query Studio lets you save your work as ready-to-use Query Activities. Even in a way that is impossible through the Automation Studio (like query targeting Auto-Suppression List)!

    The Bad

    However, Query Studio is not perfect. The main issue is that it has implemented a different (and not that good) query validation. The outcome?

    While every query you write in Query Studio will work in Query Activity, it is not always true the other way round. For example, Query Studio won't let you use comments, parentheses in the first line of the SELECT statement, TOP PERCENT, CAST in SELECT and more that are not a problem in Query Activity.

    It also has very poor error messages making it hard to debug your queries properly. Sometimes it is helpful to copy the SQL to Query Activity and validate there to get a better response.

    Finally, while it creates a temporary Data Extension on execution, it is not helpful as a template for the final solution because all fields have a Text data type regardless of the real data.

    The Sum Up

    Despite some quirks, Query Studio is a huge timesaver and quality of life improvement. Useful for creating queries, debugging outcomes, and quick checks on Data Views. Free. A must-have for any SQL-enabled or learning-to-be-enabled team.

    AppExchange

    DESelect Segment

    CreatorPricing
    DESelectStarts at $700/month

    The Good

    DESelect Segment is the golden standard for the middle ground between the very limited Filtered Data Extensions and yes-code SQL Queries. Actually, "middle ground" is not fair.

    Over time, DESelect team polished it to cover nearly all use cases that were possible only with SQL in the past. It makes the app more of a no-code alternative to Query Activities then an enhanced Filtered Data Extensions.

    In a fully drag and drop experience, DESelect Segment can:

    • Join multiple data points (both Data Extensions and Data Views)
    • Create complex, multilevel filters (using dynamic dates, aggregates and checks against other Data Extensions)
    • Build final Data Extension on demand with selected or custom-created columns
    • Deduplicate the data using specified logic
    • Preview the outcomes to validate the configuration

    And it doesn't stop there. There are features not available in the out-of-the-box SFMC experience that lets you:

    • Create Picklists to mitigate typo issues when working with set lists of values
    • Build Data Sets that works as templated multi-table relationships for quick drag and drop
    • Share segmentation templates across Business Units to speed up rolling solutions

    While the features sound great, true magic happens when you use them together. Why? Because they allow you to create your segment in one place, start to finish.

    The out-of-the-box path for query segmentation is:

    1. Write and test segmentation query in Query Studio (with Contact Builder in another tab to check the values)
    2. Manually create Data Extension that has all needed columns in correct data types and lengths in Contact Builder
    3. Fix it in Email Studio because Content Builder is bugged around CustomerKey and default Current Date
    4. Copy the query to Query Activity in Automation Studio
    5. [Optionally] Create Automation

    DESelect Segment can do all of it in a single, streamlined process using guided creator. Faster, simpler and less intimidating to beginners. Available right in the Marketing Cloud main menu.

    Is it perfect then?

    The Bad

    Well, there are two issues:

    1. It's not free. But it is nicely priced for the power you get. It's up to you whether you want to invest in SQL competencies or a no-code solution that can do the same, by everyone, faster.
    2. It's complex. Sure, it's a clean drag-and-drop interface, but because of all the available features, it has some learning curve (and training offered by DESelect) to leverage its full potential.

    The Sum Up

    To fully leverage Salesforce Marketing Cloud, you need a robust segmentation solution. Filtered Data Extensions ain't it. It leaves you with SQL Query Activity and AppExchange.

    While I'm a big fan of SQL, I know it's not a tool for everyone. The code-based solutions always make scaling the marketing team much harder. DESelect Segment is currently the best option to solve that problem, and - with ongoing updates - it keeps getting better.


    Activation Studio

    CreatorPricing
    Harvest Tech LabsStarts at €350/month

    The Good

    Activation Studio is a new player in the SFMC drag & drop segmentation game. Let's check what are the unique selling points that make it stand out:

    1. Different target

    Activation Studio is not targeting power users but digital marketers that need an effortless but potent way of creating segments. You won't be able to leverage the full power of SQL in a drag-and-drop interface here. You also won't be able to join all Data Extensions available in your Marketing Cloud.

    Instead, you can leverage the Attribute Groups built in the Contact Builder Data Designer. While it limits what you can do, it also makes building segments a breeze, as all relationships are already defined.

    It also lets you quickly create the final Data Extension and leverage it as an Entry to the Journey. Och, and it provides you with engagement benchmarks and actual performance.

    Not a jack-of-all-trades, but a purpose build solution.

    1. More than just segmentation

    While segmentation is the core of Activation Studio, there are more features (to be made) available. Lead Scoring and Behavioral data from the web are options that significantly increase the tool's power. Both are built with effortless usage by marketers in mind.

    1. Down-to-earth pricing

    Activation Studio segmentation is already significantly cheaper than other options, and additional features further improve the price-to-value ratio.

    The Bad

    It's a new product, and you can still see its infancy. While fully operational, some relatively basic features (like folders) are missing.

    However, the development pipeline is full of features, and many improvements will be delivered over the coming months improving the value proposition (and making me rewrite this mini-review).

    The Sum Up

    Activation Studio fills a niche as a segmentation more potent than the Filtered Data Extensions and more effortless than the DESelect Segment (while sacrificing some of its power).

    Especially with Scoring and Interaction-focused add-ons, it will be an excellent suite of solutions targeted at smaller Marketing Cloud users that would benefit from a streamlined tool dedicated to non-technical marketers.

    - - +

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Solution highlights from Salesforce Marketing Cloud's AppExchange.

    +

    AppExchange is an app store for various Clouds within Salesforce Customer 360 platform. You will find in-house solutions from Salesforce Labs and 3rd party. Free and paid. Good and bad. But all - validated by Salesforce Security Review.

    +

    From over 4000 solutions available there, only around 60 are for the Saleforce Marketing Cloud. Here, I will focus only on those I had experience with to provide some value over the standard AppExchange descriptions.

    +
    You Should Know

    This document is a living thing. New solutions keep popping up, and old ones sometimes disappear or are recreated. I try to keep it up-to-date, but your help with this task will be appreciated.

    +

    When is AppExchange worth it?

    +

    Before we jump into specific solutions available in the store, let's talk about whether you should consider going through AppExchange offerings. This question is especially relevant with how feature-packed and customizable the Marketing Cloud is. And not that easy to answer when you assess all decision drivers.

    +

    1. Define feature requirements

    +

    Ok, you want a feature and are eager to find a solution to deliver it. Now stop. Before opening the AppExchange repository, you should dive deep into the exact requirements the solution has to fulfil.

    +

    Key things to consider:

    +
      +
    • What it needs to do - what is the minimum valuable outcome, and what is an ideal one?
    • +
    • How it needs to do it - does it have to be a user-friendly no-code solution, or is a developer-oriented approach acceptable?
    • +
    • Where it needs to do it - does it have to be done within the SFMC, or can it be external?
    • +
    • Who needs to do it - do you have the resources to implement it, or should it be outsourced?
    • +
    • What is the budget - does it have to be free, cheap, or you can pay for good value?
    • +
    +

    Those requirements should be aligned with the final users and be clear enough to serve as a guardrail for making an informed decision.

    +

    2. Validate out-of-the-box options

    +

    Once you have requirements, it's time to check what already is within your Marketing Cloud license. Over the years, Salesforce baked in many solutions, so you might find something already there, just waiting to be used.

    +
    You Should Know

    Not all solutions are available by default - some require a support ticket to be enabled. Check out my list of features on-demand to see if there is anything hidden that might fulfil your requirements.

    +

    However, even if your requirement has an out-of-the-box solution, it doesn't always mean the end of the work. You need to check whether it is good and easy enough:

    +
      +
    • Good Enough: Just because there is something, it might not meet all the requirements you gathered in the first step. Maybe it is too basic for your needs or doesn't have access to all data you want to leverage. It is where you start seeing the benefits of the prework.
    • +
    • Easy Enough: Even if the solution is good enough, it might not be easy enough. Always assess the solution by considering the knowledge and skills of the end users - not yours (unless you will be the only end user, of course).
    • +
    +

    If the out-of-the-box solution checks both boxes - you hit the jackpot and can leverage what is already there.

    +

    Else, it's time to look somewhere... else.

    +

    3. Free AppExchange Solutions

    +

    Time to check whether there is any free solution available on demand. You can do it by going to marketing AppExchange and applying filters to get Free solutions dedicated to Marketing Cloud.

    +

    To manage your expectations: for Salesforce Marketing Cloud, the list won't be long. And even then, you have to make sure the app is genuinely offering a meaningful free tier. Expect free Salesforce Labs solutions (like Query Studio covered below) and little pearls made by 3rd parties - like Content Builder asset finder DESelect Search.

    +

    If you are lucky enough to find something free in AppExchange related to your requirements, check whether it is good enough. Just as you did in the previous step.

    +

    No luck? Before checking the paid filter in AppExchange, there is one more approach to consider.

    +

    4. Custom Solution

    +

    A decade ago, building a custom solution for every requirement was all the rage. Since then, the platforms and their 3rd party ecosystems have grown significantly, making this approach much less tempting. Why?

    +

    There are four things to consider:

    +
      +
    1. Can you build a Custom solution? This can be done using in-house developers or outsourced to external specialists, but you need either skills or a budget.
    2. +
    3. Will it be good enough? If you have the means, building a custom is easy. But do you have enough skills or budget to make a good solution that will be user-friendly, optimized, polished and matching all your requirements?
    4. +
    5. Will it be cheaper than AppExchange? Sure, with enough time and money, you can build something good enough. But will it be more affordable than a similar solution available in the paid section of AppExchange?
    6. +
    7. Will you maintain it? Even if you answered yes to the previous three points, you must consider maintenance. In most cases, building a custom is just the beginning. Requirements change, new needs happen, platforms get updated and require refactor. With AppExchange solutions, it should be much less of a worry in the long term.
    8. +
    +

    While the list might look like a hard pass for custom solutions, there is a place for them. Especially on the ends of the spectrum. Simple, but lifesaving micro solutions (Cloud Page Apps, Code Resources) or custom behemoths aligned to all non-negotiable quirks and features of your internal processes.

    +

    However, if you hit a hard "no" to any of the above questions, it's time to visit the AppExchange again.

    +

    5. Paid AppExchange Solutions

    +

    Here we are. After defining the requirements, we haven't found anything worthy among the out-of-the-box solutions, the land of the free AppExchange was barren, and the custom work didn't seem like the best choice. Paid AppExchange it is. But is it really?

    +

    Assuming you found a paid solution, you still need to assess whether it will be good enough. The positive part here? If you see only small pieces missing from the ideal, you might talk with the solution creators and discuss prioritization of the future changes.

    +

    However, you also need to keep in mind the budget. Not only the subscription cost but also implementation, training, and enhancements. After considering all that, will you still see a return on investment? If yes - you are good to go.

    +

    If not, it's time to update your requirements - the list of needed features or the budget size - and start again.

    +
    +

    Sounds complex? Would you rather have a visual guide? Got you covered:

    +
    +

    Looks complex? Would you rather have an example-based walkthrough? Got you covered as well in the next chapter:

    +

    SFMC Segmentation Solutions

    +

    Finding the right approach to database segmentation is one of the critical elements of successful marketing automation. In Salesforce Marketing Cloud, it's a complex topic because (spoiler) there is no perfect - powerful, simple and free - solution. You need to choose your priorities.

    +

    Looks like excellent use case to test the "Is AppExchange worth it?" process on a real-life scenario, so let's check how it works.

    +

    1. Feature Requirements

    +

    Let me paraphrase the user story constraints I encounter on nearly every implementation:

    +
      +
    • As a company, I want to have segmentation based on our comprehensive data so that we can send the right communication to the right persons at the right time.
    • +
    • As a marketer, I want to have a drag and drop segmentation so that it is fast and easy to deliver correctly built segments.
    • +
    +

    Let's split it into crucial things to consider:

    +
      +
    • What it needs to do - Segment the database using multiple data points.
    • +
    • How it needs to do it - Simple drag and drop solution.
    • +
    • Where it needs to do it - Within Marketing Cloud.
    • +
    • Who needs to do it - Undecided, but no internal resources for implementation.
    • +
    • What is the budget - No budget.
    • +
    +

    Does it sound familiar? ;)

    +

    2. Out-of-the-box options

    +

    There are two ways to segment contacts in Marketing Cloud core. Filtered Data Extensions and SQL Query Activities. How do they stack against our requirements?

    +

    Filtered Data Extensions are free, require nearly no implementation (apart from setting Data Relationships), work directly in SFMC, and are a simple drag and drop solution, but... They don't support segmenting on more than two Data Extensions. Not good enough.

    +

    SQL Query Activities are free, require no implementation, work directly in SFMC and allow segmenting on multiple data points, but... demand SQL skills. It means training requirements, slower segmentation and a higher risk of errors by inexperienced users. Not easy enough.

    +

    3. Free AppExchange

    +

    Filtering the AppExchange for free solutions will show only one related to segmentation - Query Studio. While it's a great tool, it's still a SQL-based solution. It's also not an end-to-end tool for segmentation purposes. Not good enough.

    +

    4. Custom Solution

    +

    There are two base options for the drag and drop custom solution approach.

    +

    First - generator that modifies predefined segments. It's relatively simple to build, but it allows you to make only minor adaptations of the templated query, mostly on filtering (SQL WHERE. Very limited and requires hard coding for each new segment template. Not good enough and hard to maintain.

    +

    Second - fully-fledged visual wrapper over SQL queries. Full power with a drag and drop interface. Sounds like a dream? Correct. Such solution requires a lot of work and testing. The cost would skyrocket well above (spoiler alert) what is available in the paid section of AppExchange. Not worth it.

    +

    5. Paid AppExchange

    +

    Finally, we get to the last stop. After a quick search, we can find two solutions: tried and tested DESelect Segment and the new contender Activation Studio. More details on them in a moment, but from the perspective of this exercise - both are subscription based, while one of the key things to consider was the beloved "no budget".

    +

    Therefore we get to the update requirements step, where the company needs to prioritize between powerful, simple and free.

    +
    +

    I hope it is now easier to find when AppExchange can solve Marketing Cloud requirements. With that, let's jump to the segmentation solutions available there.

    +
    +

    Query Studio

    +
    +

    Creator | Pricing

    +
      +
    • | - +Salesforce Labs | Free
    • +
    +

    The Good

    +

    Query Studio solves two problems:

    +
      +
    1. SFMC SQL Query Testing
    2. +
    3. SFMC SQL Data Exploratory Analysis
    4. +
    +

    Why did I call it problems?

    +

    Because the only out-of-the-box solution for working with SQL in Marketing Cloud is Query Activity in Automation Studio. It allows you to validate whether your query is valid, but checking if the outcomes are as expected is a pain.

    +

    You can see the results only after manually creating a data extension with the correct columns (names, data types, lengths) and executing the Query Activity. Outcomes are suboptimal and need to make some changes? The Data Extension needs a rework.

    +

    It sometimes happens when you are writing and testing a new query. It happens all the time when you are doing exploratory analysis.

    +

    Query Studio automatically builds a temporary Data Extension to store the query's output on every execution. It also displays a subset of outcomes below your SQL so you can quickly check whether it aligns with your expectations.

    +

    And that's not all - Query Studio lets you save your work as ready-to-use Query Activities. Even in a way that is impossible through the Automation Studio (like query targeting Auto-Suppression List)!

    +

    The Bad

    +

    However, Query Studio is not perfect. The main issue is that it has implemented a different (and not that good) query validation. The outcome?

    +

    While every query you write in Query Studio will work in Query Activity, it is not always true the other way round. For example, Query Studio won't let you use comments, parentheses in the first line of the SELECT statement, TOP PERCENT, CAST in SELECT and more that are not a problem in Query Activity.

    +

    It also has very poor error messages making it hard to debug your queries properly. Sometimes it is helpful to copy the SQL to Query Activity and validate there to get a better response.

    +

    Finally, while it creates a temporary Data Extension on execution, it is not helpful as a template for the final solution because all fields have a Text data type regardless of the real data.

    +

    The Sum Up

    +

    Despite some quirks, Query Studio is a huge timesaver and quality of life improvement. Useful for creating queries, debugging outcomes, and quick checks on Data Views. Free. A must-have for any SQL-enabled or learning-to-be-enabled team.

    +AppExchange +
    +

    DESelect Segment

    +
    +

    Creator | Pricing

    + +

    The Good

    +

    DESelect Segment is the golden standard for the middle ground between the very limited Filtered Data Extensions and yes-code SQL Queries. Actually, "middle ground" is not fair.

    +

    Over time, DESelect team polished it to cover nearly all use cases that were possible only with SQL in the past. It makes the app more of a no-code alternative to Query Activities then an enhanced Filtered Data Extensions.

    +

    In a fully drag and drop experience, DESelect Segment can:

    +
      +
    • Join multiple data points (both Data Extensions and Data Views)
    • +
    • Create complex, multilevel filters (using dynamic dates, aggregates and checks against other Data Extensions)
    • +
    • Build final Data Extension on demand with selected or custom-created columns
    • +
    • Deduplicate the data using specified logic
    • +
    • Preview the outcomes to validate the configuration
    • +
    +

    And it doesn't stop there. There are features not available in the out-of-the-box SFMC experience that lets you:

    +
      +
    • Create Picklists to mitigate typo issues when working with set lists of values
    • +
    • Build Data Sets that works as templated multi-table relationships for quick drag and drop
    • +
    • Share segmentation templates across Business Units to speed up rolling solutions
    • +
    +

    While the features sound great, true magic happens when you use them together. Why? Because they allow you to create your segment in one place, start to finish.

    +

    The out-of-the-box path for query segmentation is:

    +
      +
    1. Write and test segmentation query in Query Studio (with Contact Builder in another tab to check the values)
    2. +
    3. Manually create Data Extension that has all needed columns in correct data types and lengths in Contact Builder
    4. +
    5. Fix it in Email Studio because Content Builder is bugged around CustomerKey and default Current Date
    6. +
    7. Copy the query to Query Activity in Automation Studio
    8. +
    9. [Optionally] Create Automation
    10. +
    +

    DESelect Segment can do all of it in a single, streamlined process using guided creator. Faster, simpler and less intimidating to beginners. Available right in the Marketing Cloud main menu.

    +

    Is it perfect then?

    +

    The Bad

    +

    Well, there are two issues:

    +
      +
    1. It's not free. But it is nicely priced for the power you get. It's up to you whether you want to invest in SQL competencies or a no-code solution that can do the same, by everyone, faster.
    2. +
    3. It's complex. Sure, it's a clean drag-and-drop interface, but because of all the available features, it has some learning curve (and training offered by DESelect) to leverage its full potential.
    4. +
    +

    The Sum Up

    +

    To fully leverage Salesforce Marketing Cloud, you need a robust segmentation solution. Filtered Data Extensions ain't it. It leaves you with SQL Query Activity and AppExchange.

    +

    While I'm a big fan of SQL, I know it's not a tool for everyone. The code-based solutions always make scaling the marketing team much harder. DESelect Segment is currently the best option to solve that problem, and - with ongoing updates - it keeps getting better.

    + +
    +

    Activation Studio

    +
    +

    Creator | Pricing

    + +

    The Good

    +

    Activation Studio is a new player in the SFMC drag & drop segmentation game. Let's check what are the unique selling points that make it stand out:

    +
      +
    1. Different target
    2. +
    +

    Activation Studio is not targeting power users but digital marketers that need an effortless but potent way of creating segments. You won't be able to leverage the full power of SQL in a drag-and-drop interface here. You also won't be able to join all Data Extensions available in your Marketing Cloud.

    +

    Instead, you can leverage the Attribute Groups built in the Contact Builder Data Designer. While it limits what you can do, it also makes building segments a breeze, as all relationships are already defined.

    +

    It also lets you quickly create the final Data Extension and leverage it as an Entry to the Journey. Och, and it provides you with engagement benchmarks and actual performance.

    +

    Not a jack-of-all-trades, but a purpose build solution.

    +
      +
    1. More than just segmentation
    2. +
    +

    While segmentation is the core of Activation Studio, there are more features (to be made) available. Lead Scoring and Behavioral data from the web are options that significantly increase the tool's power. Both are built with effortless usage by marketers in mind.

    +
      +
    1. Down-to-earth pricing
    2. +
    +

    Activation Studio segmentation is already significantly cheaper than other options, and additional features further improve the price-to-value ratio.

    +

    The Bad

    +

    It's a new product, and you can still see its infancy. While fully operational, some relatively basic features (like folders) are missing.

    +

    However, the development pipeline is full of features, and many improvements will be delivered over the coming months improving the value proposition (and making me rewrite this mini-review).

    +

    The Sum Up

    +

    Activation Studio fills a niche as a segmentation more potent than the Filtered Data Extensions and more effortless than the DESelect Segment (while sacrificing some of its power).

    +

    Especially with Scoring and Interaction-focused add-ons, it will be an excellent suite of solutions targeted at smaller Marketing Cloud users that would benefit from a streamlined tool dedicated to non-technical marketers.

    +
    \ No newline at end of file diff --git a/docs/config/sfmc-behavioral-triggers/index.html b/docs/config/sfmc-behavioral-triggers/index.html index 5b6d5fc81..45d6b8353 100644 --- a/docs/config/sfmc-behavioral-triggers/index.html +++ b/docs/config/sfmc-behavioral-triggers/index.html @@ -1,22 +1,262 @@ - + - -SFMC Behavioral Triggers | Mateusz Dąbrowski + +SFMC Behavioral Triggers | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Behavioral Triggers

    Win-back your e-commerce customers with SFMC Behavioral Triggers.

    Marketing Cloud Behavioral Triggers

    Behavioral Triggers are a solution for smoothly moving abandoned engagement data from your e-commerce to Salesforce Marketing Cloud. They enable powerful win-back communication you can create with minimal technical knowledge in express time.

    Currently, there are three scenarios available:

    1. Abandoned Cart
    2. Abandoned Browse
    3. Abandoned Wishlist

    In each case, what Behavioral Triggers does is push relevant data (items left in the cart, browsed without conversion or added to wishlist) to the Einstein Backend and - after configured time - to Marketing Cloud Data Extension.

    You can then leverage this data extension as both Journey Entry and a source of personalisation using built-in Behavioral Trigger Content Block. The latter allows you to use clean UI to configure dynamic content using the obtained engagement data.

    Behavioral Triggers Pre-Work

    Before you use the Behavioral Triggers, be sure to fulfil pre-requisites:

    1. As Behavioral Triggers are extending the Einstein Recommendations, get a license and enable it in your Business Unit.
    2. Many data leveraged by Triggers is coming from the Product Catalog, so be sure to configure it before capturing the events.
    3. Behavioural data is saved only for records that have Einstein Profile (IGO_PROFILE), so you need to enable Einstein Data Extensions.
    4. Implement the Collect.js script on your e-commerce to capture session and engagement data.
    5. Finally, configure Behavioral Triggers to bring relevant data to Marketing Cloud Data Extensions.

    As you can see, if you already use Einstein Recommendations, most of the necessary work is already done, and full implementation should take you just a few minutes. In such a case, you will only need to update Collect.js and configure the Behavioral Triggers slightly.

    How the Behavioral Triggers work

    Behavioral Triggers seems to be easy to implement, but a lot is going in the backend. It is good to understand its basics, as it might help a lot when triaging a problem or customising the solution.

    1. A customer enters your e-commerce site - you trigger first Collect.js scripts to capture the Session and Page View.
    2. Customer clicks on a product page - you trigger the Page View data layer with a link to that product (Abandoned Browse scenario).
    3. Customer finds an exciting product and adds it to the wishlist - you trigger the Wishlist data layer (Abandoned Wishlist scenario).
    4. A customer decides on one of the products and adds it to the cart - you trigger the Cart data layer (Abandoned Cart scenario).
    5. Customer goes through the purchase process and buys the product - you trigger the Cart data layer with explicit parameter (This blocks Abandoned Cart from launching communication).
    6. Each of the above triggers is sent to Einstein Backend (IgoDigital) that stores the information.
    7. Marketing Cloud Behavioral Triggers query the Einstein Backend for any events that occurred some time ago - you can configure it in the range from 15 minutes to 3 hours (in 15 minutes increments).
    8. If there is a matching event, it checks whether there is any other event that overwrites it. For example, if your customer viewed a product page, and a few minutes later, added this product to the cart, the page view will be ignored. The Behavioral Trigger will wait for the abandoned cart.
    9. Once there is an event ripe for reengagement, Behavioral Trigger will put it into a system created Data Extension (one per scenario) with three data points: subscriber key, timestamp and encrypted data.
    10. Now you can use this to add the customer to a Customer Journey.
    11. In the Journey, you can use an Email with a built-in Behavioral Trigger Content Block. At the moment of sending, this block makes a call to Einstein Backend (IgoDigital) and gets the real-time state of your customer interaction. It validates that he or she did not convert to purchase in the meantime and provides all the details required for creating personalised content in the email presenting the abandoned products.

    As you can see, a lot is happening, and it's time to dive deeper into each step to understand it better.

    You Should Know

    There are many quirks and tricks - read on to learn how to get more out of Behavioral Triggers.


    Marketing Cloud Configuration

    Before you implement the Collect.js, you have to make the basic configuration of the Behavioral Triggers.

    Email Recommendations Configuration

    If you haven't yet configured the Einstein Email Recommendations, you will have to do it first. Go to Einstein » Einstein Overview » Email Recommendations » Admin » Implementation, and it will guide you through the steps needed.

    If you already configured it previously, go to Einstein » Einstein Overview » Email Recommendations » Admin » Options and make sure you have the additional options related to Behavioral Triggers enabled as described below.

    For the Behavioral Triggers, be sure to select Product Catalog implementation.

    Catalog and Product Attributes

    On the next screen, you will be able to select which Standard Product Attributes you want to use, plus have the option to create Custom ones. It is a crucial step, as the data you choose and create here will be the basis for the Behavioral Trigger Content Block available in the win-back email.

    Just remember that those attributes are global (linked to a product, not to a particular Subscriber), so don't add here parameters that are individual (like PersonalisationString).

    User and Profile Attributes

    The next step allows you to configure Custom Profile Attributes. It is beneficial for general Einstein purposes, but it is also crucial for Behavioral Triggers if you want to personalise your win-back email for unknown (to Marketing Cloud) customers.

    If this is something you want to do, enable Custom User Profile Attributes and add necessary ones.

    You can also enable localisation here, which will allow you to present the product name in the user's language.

    Activity Tracking

    On this last step before Summary, you configure what you will be tracking. Category View and In-Site Search are nice to have for general Einstein features, but for Behavioral Triggers, be sure to check Cart Activity and Purchase Activity. You will need it for Collect.js.

    Initial Catalog Upload

    Once you configure the Email Recommendations, it is time to make the first upload of the Catalog. Go to Einstein » Einstein Overview » Email Recommendations » Admin » Catalog and click Connect a New Catalog. Select the Product Catalog, import method and format. Pass the column's name that contains Unique ID and tell SFMC whether it is complete or partial Catalog import.

    Once Marketing Cloud completes the upload, be sure to map the fields from your source to the Standard and Custom Fields available in the Catalog.

    Einstein Data Extension

    The last step here is to enable Einstein Data Extensions. To do this:

    1. Go to Einstein » Einstein Overview » Email Recommendations » Admin » Status.
    2. Click on the cog icon in the top right and select Data Extension Settings.
    3. Enable them with a toggle.

    If the toggle is inactive, you need to:

    1. Make sure your Catalog is uploaded and mapped.
    2. Make test Collect.js push to initialise Einstein. To start, you can utilise ready-to-use base script:
    initialise Einstein with basic Collect.js
    <script type="text/javascript" src="MID.collect.igodigital.com/collect.js"></script>
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "initialise Einstein"}]);
    _etmc.push(["trackPageView"]);
    </script>

    Create a Cloud Page, paste the above snippet in the HTML block - update both MID's with the Business Unit you implement the Behavioral Triggers on - and publish it. After opening the website, you can delete the Cloud Page - so that it doesn't affect your future Einstein data.

    You will find details on what is happening in this script in the Collect.js section below. As for now, you have to wait for the initialisation to happen. It can take a day. To check whether it is ready, try to Enable the Einstein Data Extensions again. During the initialisation, the Status page won't be loading (you will see the circle spinning infinitely).

    Behavioral Triggers Configuration

    Once you configure and enable the Email Recommendations, it is time to set up the Behavioral Triggers themselves. It will be simpler and easier. Head to Journey Builder » Behavioral Triggers.

    First, click New Trigger in the top right. You can select from the three available abandonment scenarios:

    1. Abandoned Cart
    2. Abandoned Browse
    3. Abandoned Wishlist

    Select the one you want to start with, and you will be able to set suppression rules - one related to multiple triggers and the second to a recent purchase. For initial configuration, I recommend setting both to 0. It will make testing much more manageable. Once you go to production, change those appropriately as per your business requirements.

    When you confirm the setup, Marketing Cloud creates the system Data Extension to store Behavioral Trigger data (one per scenario).

    The only left option is the Session Timeout Limit. You can access it by clicking the cog icon next to the New Trigger button. You can select from a range starting at 15 minutes and going in 15 minutes increments up to 3 hours. Again, for testing purposes, make it the shortest possible and later update based on business needs.

    You Should Know

    Currently, it is not working at all - it does not save the selected setting, and it always shows 1 hour. Until fixed, you can manage this by going to Einstein » Einstein Overview » Email Recommendations » Admin » Implementation and clicking Advanced Settings on the left pane. There will be a Session Length option with the same range. It is the same setting.


    Collect.js

    You have seen the Collect.js script mentioned multiple times here, and it is also the most technical elements of the standard Behavioral Triggers implementation. Time for details.

    Collect Code Script

    Before you start building the data layers, you first need to import the code responsible for pushing data to Einstein Backend (IgoDigital). You do this by putting this line on every page:

    Collect Code Script
    <script type="text/javascript" src="MID.collect.igodigital.com/collect.js"></script>

    Be sure to change the MID in the above URL to the ID of the Business Unit that you want to use for your Behavioral Triggers.

    Once you have it, you may start building the data layers that will move the information from your e-commerce to Marketing Cloud. For simplicity, I won't be writing the above code in the snippets below.

    Set Org ID

    The first data layer you need to push contains, again, the MID of the Business Unit. Just as with the Collect Code Script, be sure to change the MID to your SFMC BU's actual ID.

    Set Org ID Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    </script>

    Set User Info

    The second data layer that will be key for sending Behavioral Triggered communication pushes the customer's data. Remember that this layer must be added to your Collect.js before any tracking layer for proper attribution.

    Set User Info Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    </script>

    The base function is pushing your customer's unique identifier (don't be intimidated by the email in that code - you do not have to pass the email address there). Depending on your use case, it might be either:

    1. Subscriber Key (if you plan on sending only to contacts known to Marketing Cloud or have an option to generate Subscriber straight from your e-commerce) or
    2. Email Address (recommended if you want to push win-back emails to unknown users in your Marketing Cloud and you do not have an option to create them properly.)
    You Should Know

    If you decide to push an Email Address to communicate with people not yet in the Marketing Cloud, be sure to make them Subscribers. You can easily do it using the classic Export-Transfer-Import Automation on the data stored in the Behavioral Triggers Data Extension. Leverage SQL Activity to copy the needed data to another Data Extension using this query:

    Basic Subscriber data preparation
    SELECT
    GUID() AS SubscriberKey, // OR: subscriber_key AS SubscriberKey,
    subscriber_key AS EmailAddress
    FROM abandoned_cart_123456789

    Be sure to update the name of the Behavioral Trigger Data Extension.

    You can leverage the same automation to trigger the Journey Entry to ensure that all records in the Journey already exist as Subscribers.

    You can provide more data in this data layer by adding Custom Einstein Profile Attributes as second parameter:

    Extended Set User Info Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {
    "email": "UniqueIdentifier",
    "details": {"gender": "male"}
    }]);
    </script>
    You Should Know

    Remember that the snippet I shared above is just an example. You will probably use different Custom Profile Attributes. To get the snippet based on your configuration, go to Einstein » Email Recommendations » Admin » Implementation.

    Be sure to create all those Custom Profile Attributes in your Einstein implementation before pushing it via Collect.js.

    Catalog Update Streaming

    There are two options to keep your Einstein Catalog up-to-date. Manual uploads and Catalog Update Streaming.

    You Should Know

    With April 2021 Marketing Cloud Release the Collect.js Streaming Updates will be deprecated. The way forward will be Streaming Updates via API. Read more here.

    As existing implementation will be available for some time still to allow for migration, I'm keeping this section until the end of the grace period.

    Manual uploads might be fine if you nearly never update items or their parameters in your e-commerce. For all other use cases, you should be using Catalog Update Streaming Data Layer.

    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["updateItem", {
    "item_type": "product",
    "item": "ProductCode",
    "name": "ProductName",
    "description": "ProductDescription",
    "url": "ProductURL",
    "unique_id": "ProductSKU",
    "available": "y",
    "image_url": "ProductImage",
    "sale_price": "ProductSalePrice",
    "price": "ProductRegularPrice",
    "release_date": "ProductReleaseDate",
    "custom_attribute": "ProductAttribute"
    }]);
    </script>
    You Should Know

    Remember that the snippet I shared above is for a fully-fledged Catalog with one sample Custom Attribute. You may use only some of those parameters or utilise multiple custom attributes.

    You can get the complete list of the parameters you need to use by going to Einstein » Email Recommendations » Admin » Implementation. If you have Streaming Updates enabled (and you should have to use this data layer) below, you will see the entire snippet adapted to your configuration.

    Be sure to check also the Domain table visible above it - you should add all the domains connected to your Streaming Update, so:

    1. The domain where the Stream is happening
    2. The domain of the Product URL
    3. The domain of the Product Image URL

    In many cases, all those domains might be the same, but if you are using Content Delivery Network or a different subdomain for the backend, those might differ. If you cannot click Register, be sure you pass just the domain - the bolded part of https://domain.name/folder/structure?query=string.

    With this data layer, you can be sure that the Catalog stored in Marketing Cloud is always up-to-date. It is crucial, as everything in the Behavioral Trigger Content Block uses the Catalog data.

    The available parameter is essential as it is the best way to make sure the personalisation in the email won't show the product that is no longer available even if it was in the abandoned cart. Of course, this is true for the moment of email send, not the moment of email open.

    You can either:

    1. Add this data layer to other pushes of Collect.js as shown in the snippet above or
    2. Create a separate process on the backend of your e-commerce. It can shoot an update whenever there is a change in the product parameters.

    The first approach is straightforward; the second is wise.

    You Should Know that

    Remember that this data layer updates the Catalog. Even if you push it in the context of a specific subscriber and along the Track Cart data layer, it will still update the global Catalog for everyone.

    If your customer has a unique product price (for example, via VIP status or coupon), use the Track Cart data layer to share this information.

    If you are using localisation, you may also pass the translated product name using "locale_pl_name": "PolishProductName". The Behavioral Trigger Content Block can leverage it with a trick.

    Track Page View

    Time for our first real tracking - Page View. The basic data layer pushes just the information about the event:

    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView"]);
    </script>

    However, you can do much more with this data layer by providing additional parameters. The most important for Behavioral Triggers is item:

    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView", {"item": "ProductCode"}]);
    </script>

    Once you swap ProductCode for the actual product code matching one of the items in Einstein Product Catalog, you will be able to leverage the first Behavioral Trigger scenario - Abandoned Browse. Once you push this event and the customer does not convert further, this will populate Abandoned Browse Data Extension and allow win-back communication.

    You can also add other parameters that are not used by the Behavioral Triggers but rather standard Einstein Recommendations - category and search:

    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView", {
    "item": "ProductCode",
    "category": "ProductCategory",
    "search": "SearchTerm"
    }]);
    </script>

    You do not have to use all three; you can trigger various ones depending on the page the user is on. The floor is yours.

    Track Wishlist

    The second Behavioral Trigger scenario - Abandoned Wishlist - has its own data layer:

    Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackWishlist", { "wishlist": [
    {"item": "ProductCode", "unique_id": "ProductSKU"},
    {"item": "ProductCode", "unique_id": "ProductSKU"}
    ]}]);
    </script>

    As you can see, not much is configurable here - all of the product data come from the Einstein Catalog, so be sure to have it up to date.

    Track Cart

    The third Behavioral Trigger scenario - Abandoned Cart - also has its own data layer:

    Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackCart", { "cart": [
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}
    ]}]);
    </script>

    Few things here are important to consider:

    1. As you can see, there are four possible parameters for each item - item and unique_id are required and must be available in your Einstein Product Catalog to work. The other two - quantity and price are optional.
    2. The price parameter here is different from price or sales_price available in Catalog Update. The Catalog ones are global - the same for all your customers. The price pushed within Track Cart is unique for this customer and might differ from the global ones (think VIP status or a coupon used). It won't update your Einstein Catalog.
    3. Always push the whole cart. If your customer has more than one item in it - put all of them in this data layer. If a customer deletes an item from the cart - push the data layer without the deleted one. The last version pushed is considered the final state of the cart for personalisation purposes.
    4. Always be sure to clear the Track Cart data whenever the cart data is no longer needed. If the customer purchased the products, be sure to use the Track Purchase data layer. If the customer deleted all the products from their cart, use the Clear Cart parameter:
    Clear the Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackCart", {"clear_cart": true}]);
    </script>

    Otherwise, your customers might receive win-back communication for products that they already bought.

    Track Purchase

    Whenever the customer converts, be sure to track this purchase. It is not only crucial for Einstein Recommendations and Discover's ROI calculation. For Behavioral Triggers, it is vital, as it informs that the cart converted. It blocks win-back communication for already purchased products.

    The basic structure of the Track Purchase data layer is very similar to the Track Cart one:

    Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView", {"item": "ProductCode"}]);
    _etmc.push(["trackConversion", { "cart": [
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}
    ]}]);
    </script>

    Do Not Track

    You may suppress all of the configured trackings by using a data layer based on customer decision and local laws.

    Do Not Track Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["doNotTrack"]);
    </script>

    More details on Collect.js

    If you want even more details and implementation considerations related to the Collect.js code used by Behavioral Triggers and Einstein Recommendations, check the awesome documentation by Jörn Berkefeld and excellent PDF guide directly from Salesforce.


    Behavioral Trigger Content Block

    Now you can go forward with Behavioral Triggers. Collect.js will push the required data to Einstein backend, and after Session Timeout Limit, it will evaluate it against Suppression Rules as per your configuration. Then, the Behavioral Triggers adds Abandoned Engagement data to the respective Data Extension. Now it's time to use it.

    The standard way the leverage this information is to use those abandonment Data Extensions as a Journey Entry Source. The real magic, however, will happen in the email you will be sending in this Journey. And that is thanks to the out-of-the-box Behavioral Trigger Content Block.

    To check it out, edit email, and on the bottom of the left pane containing all the Content Blocks, you will find the Behavioral Trigger one. Drag and drop it to the email so that you can start configuring it.

    When you click that block after adding it to the email, you will be able to limit the maximum number of products shown, control the layout with columns, change order and decide which data points should be visible for products.

    It's easy, it's quick, but there are multiple issues if you want anything a bit more customised for your needs. With the out-of-the-box solution:

    1. You don't have a straightforward way to control the style of this information. You can only go to the Styling tab of the editor and modify the CSS available there.
    2. You are limited only to the fields that you configured for the Product Catalog. For example, you cannot use the individual price you passed in the Track Cart data layer. You can vote for it on IdeaExchange.
    3. There is no information on how to access the data outside of the Content Block - but you can learn about it later in this article.
    4. You cannot leverage Einstein API's full potential, as the hard-coded request does not have a parameter responsible for pulling the Einstein Custom Profile Attributes. You can vote for it on IdeaExchange.
    5. You cannot use multiple Content Blocks pointing to various Behavioral Trigger scenarios (for example,first focus on the cart and then present the wishlist).

    As far as you can fix the first issue with good CSS knowledge, the rest require more work.

    So what can you do? Configure the Content Block to be as close as possible to what you want, go to Code View of your Email and look for Concat('{"trigger_payload":"', data, '"}'). It starts the code responsible for Behavioral Trigger Content Block.

    Below you can see two tabs.

    1. In t Original Code, you will find the complete code of the built-in Behavioral Trigger Content Block. Shown configuration displays a product image with name and description plus regular/sale price. The number of items is limited to four in a two-column layout.
    2. In the Code Highlights tab, I focus on some part of the code that I found exciting and deserve some attention.

    1. AMPScript personalisation

    %%[
    Set @data = Concat('{"trigger_payload":"', data, '"}')
    Set @mid = memberid
    ]%%

    The first four lines of the Behavioral Trigger Content Block code are already interesting. They are using AMPScript, although the rest is in SSJS. It could easily be written in SSJS altogether for more optimised execution.

    You can also see that they are pulling the behavioural data by using a personalisation string on data - the Abandoned Engagement Data Extension column containing encrypted information. If you want to have more control over the source of this information, you can think about making a lookup here. It would allow you to even use multiple Content Blocks in one email (or mix browsed, wishlisted and added to cart items in one block).

    2. Try/Catch block

    try {
    // Behavioral Trigger Content Block code
    } catch(e) {
    Write(e);
    Platform.Function.RaiseError("Quit send.", true, "statusCode","3");
    }

    The try/catch block is a great idea, but as it has separate scope in SSJS, it means that no SSJS variable from within will be available outside of it. Thankfully the other part of the code is sharing the Behavioral Trigger data using AMPScript variables.

    If you want to access the SSJS ones, you can declare them before the try/catch starts or pull them from the AMPScript.

    3. Settings & Markup Fragments

    var settings = {
    // Content Block settings from UI
    };
    var markupFragments = {
    // HTML fragments
    };

    Those two variables store most options that you have selected when configuring the Behavioral Trigger Content Block. You can use them to make configuration impossible in the UI. You can also change the HTML used for the product presentation.

    Remember, however, that the Behavioral Trigger Content Block use classes visible in the markupFragments in the CSS. Changes might break the styling.

    You Should Know

    The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. Learn more here.

    Fix it by changing rem units in markupFragments to px ones.

    Later there are also two other settings-related lines:

    var useRecentItems = false;
    // Some code
    var useSalePricing = true;

    You can also configure them within the Behavioral Trigger Content Block UI. Respectively, by checking either:

    • "If the subscriber's abandoned items have changed since the triggering event, include the updated items" or
    • "Only show sale price if sale price is > 0"

    Both checkboxes are available in the Product Fields section. The second one, however, is visible only if you add the sale_price field.

    If you don't enable the useRecentItems, the Content Block will take the products initially pushed with Track Cart Collect.js. If you use it, it will instead take the latest data available that, in some cases, might be either bigger (if your customer added few items) or smaller (if he deleted some or just cleared the whole cart). There is also a block that stops the send if there are no more items in the current cart.

    As for useSalePricing, it is much less straightforward. What "Only show sale price if sale price is > 0" enabled does is check whether there is sale price and whether it is lower than the regular price and - if yes - it adds strike-through style to the regular price — end of the story. For anything more attractive, you will need to play with custom CSS and maybe additional SSJS logic.

    4. Pulling data

    var data = Platform.Variable.GetValue("@data");
    var mid = Platform.Variable.GetValue("@mid");
    var event_locale = Platform.Variable.GetValue("@event_locale");

    Two first lines here are pulling data from the AMPScript described in the first highlight. As mentioned, it can be optimised by making the personalisation here and removing AMPScript altogether.

    More interesting, however, is the third line. You can configure localisation for your products in Email Recommendations Configuration, but it is not used by the Behavioral Triggers - officially. Thanks to this little line, you can - even with the built-in standard Content Block - declare the locale source for the Subscriber and set it to @event_locale AMPScript variable. Bam, your Behavioral Triggers are now localised.

    5. Building the API query

    var protocol = "https";
    var hostname = mid + ".recs.igodigital.com";
    var qs = "?item_count=" + settings["maxItems"] + "&sort_by=" + settings["sortBy"] + "&sort_direction=" + settings["sortDirection"];
    var includes = [];
    for (var key in settings["fields"]) {
    if(defaults[key] == null) {
    includes = includes.concat(settings["fields"][key]);
    }
    }
    if(includes.length > 0) {
    qs += "&include=" + includes.join("|")
    }
    if(event_locale){
    qs += "&locale=" + event_locale
    }
    var url = protocol + "://" + hostname + "/" + mid + "/trigger" + qs;

    The above snippet is responsible for building the URL that is used for an HTTP.Post API call to Einstein Backend (IgoDigital). You can make a simple addition that will enable you access to Einstein Custom Profile Attributes. Must-have if you want to boost engagement with personalisation for new customers.

    To do so, just before the line highlighted in the snippet above add a new one with:

    qs += "&user_attributes=CustomProfileAttribute1|CustomProfileAttribute2"

    Just change the values after the equal sign to the exact names of your Einstein Custom Profile Attributes that you want to have available in your code (separated by |).

    6. Response parsing

    for(var responseField in response) {
    var value = response[responseField];

    if(responseField === "products" || responseField === "current_cart") {
    var prefix = (responseField === "products") ? "@item_" : "@cart_";
    for(var i=0; i<value.length; i++) {
    for(var itemField in value[i]) {
    var name = prefix + itemField + "_" + (i+1);
    var val = value[i][itemField];
    Platform.Variable.SetValue(name, val);
    }
    }
    }
    else if(responseField === "user") {
    var prefix = "@user_";
    for(var userField in value) {
    var name = prefix + userField;
    var val = value[userField];
    Platform.Variable.SetValue(name, val);
    }
    }
    else {
    Platform.Variable.SetValue("@"+responseField, value);
    }
    }

    The code you see above is responsible for reading the response from Einstein Backend (Igodigital). It goes through each element of the response and creates a separate AMPScript variable with an appropriate value.

    1. For each element of the products key, it creates a variable build with item_ prefix, value name and _X suffix, where X is the counter of the item (so 1 for the first item, 2 for the second and so on). It means you can get the first link to the first item by calling the @item_link_1 variable. To get the name of the second item goes with @item_name_2.
    2. If the response contains the current_cart key (it is available only if the Track Cart was triggered), it also creates variables for it. The structure is nearly the same - just the prefix changes to cart_. The most compelling use case here? You can get the price information that you pushed via Track Cart (the one unique to a specific cart, not coming from the Product Catalog) by calling @cart_amount_1 for the first item.
    3. There is even a system that gets Custom Profile Attributes as AMPScript variables! It uses user_ prefix, so if you want to get, for example, the gender - call @user_gender variable.
    4. All other keys of the response are also created with just their name. So to get information on whether the cart converted, you can call @purchased variable.

    To check what is available to you, check example API responses coming from Einstein Backend.

    You Should Know
    1. The current_cart key and the amount variable is available only for the Abandoned Cart Behavioral Trigger. Wishlist and Browse only contain products information coming from the Product Catalog.
    2. Even though there is already a code that parses Custom Profile Attributes, it won't give you anything on the built-in standard Behavioral Trigger Content Block. It won't have the user key populated. You must enable each attribute in the API call.
    3. If you want to use more than one Abandonment Engagement in one email, you will have to alter the prefixes in this code not to overwrite the AMPScript variables.

    Those AMPScript variables are a must if you want to create a Call to Action button that will rebuild the cart in your e-commerce. Remember, however, that it is custom development without any out-of-the-box snippets from Salesforce.

    The rest of the code is just taking care of the proper display of the information in the email and stopping the send with RaiseError if the customer purchased the cart or the API did not respond. It is added to the email using %%=treatascontentarea('BT Trigger', @content)=%%.

    API Responses

    To fully leverage the Behavioral Trigger Content Block's customisation options, you can check the sample responses from Einstein Backend (IgoDigital) available below. They will help you know what AMPScript variables can be available after the Content Block.

    {
    "products": [
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode002",
    "name": "ProductName2",
    "regular_price": 88,
    "sale_price": 55,
    "sku_id": "SKU2",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "44.00"
    },
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode001",
    "name": "ProductName1",
    "regular_price": 99,
    "sale_price": 66,
    "sku_id": "SKU1",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "33.00"
    }
    ],
    "current_cart": [
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode001",
    "name": "ProductName1",
    "regular_price": 99,
    "sale_price": 66,
    "sku_id": "SKU1",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "33.00"
    },
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode002",
    "name": "ProductName2",
    "regular_price": 88,
    "sale_price": 55,
    "sku_id": "SKU2",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "44.00"
    }
    ],
    "same_products": "Y",
    "user": {
    "gender": "Male"
    },
    "purchased": false,
    "abandoned_items": "SKU2|SKU1",
    "tracking_pixel": " "
    }
    You Should Know
    1. You can see that there is "gender" data in the "user" key in the example above. You will see information here only if you alter your API call. Otherwise, it will be empty.
    2. The amount key is available in both products and current_cart keys, but it is in a string format. Other prices (regular_price and sale_price) are integers.
    3. In same_products, you will have information ("Y"/"N") whether the Cart content changed between the moment you pushed this data and the API call.

    Debugging Behavioral Triggers

    There are three critical steps of Behavioral Trigger implementation when you might need to debug your solution. As you will be merging multiple systems and working on time-sensitive data using a new feature, look behind the curtain will be crucial. Thankfully, there are few options that we can use.

    Debugging Collect.js

    The first thing to check is your frontend Collect.js implementation. To quickly review whether Collect.js is available on your website, open Developer Tools in your browser and go to the Console tab. In there, write _etmc.

    If you see ReferenceError: _etmc is not defined, it means that the script is not available. Ensure that you are checking a page that is supposed to have Behavioral Triggers implemented and that the script is added correctly.

    If the script is implemented, you will see an Object containing over a dozen of keys. Many of which are the functions that pass the data from your website to IgoDigital.

    Now you can leverage its power by writing in the console _etmc.debug = true to enable debugging mode of Collect.js. Once set, it will log every change applied to the dataLayer. Make a tracked action - like adding a product to a cart - to see it work.

    Example data logged after enabling debug and adding product to the cart
    {
    "cart": [
    {
    "item": "2020572",
    "unique_id": "2020572AEUAEL",
    "name": "Women’s Red Box Pullover Hoodie",
    "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html",
    "price": 50,
    "sale_price": 50,
    "item_type": "product"
    }
    ],
    "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"
    }
    You Should Know

    You can check how Collect.js works by reviewing its contents. To do this, go to the link contained in your base Collect code. It should be: http://YOUR_MID.collect.igodigital.com/collect.js.

    Another option to observe what Collect.js is sending to Einstein IgoDigital backend is to go to Network tab of the Developer Tools and look for calls made to igodigital.com address. You will see the above data in form of API request payload:

    https://stack7.collect.igodigital.com/c2/northerntrailoutfitters/track_cart?payload={"cart":[{"item":"2020572","unique_id":"2020572AEUAEL","name":"Women’s Red Box Pullover Hoodie","url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html","price":50,"sale_price":50,"item_type":"product"}],"url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"}

    Using either of those two tools will allow you to make sure that:

    1. You have correctly implemented the Collect.js script.
    2. It is correctly assigned to the website events you want to track.
    3. It captures necessary information, like price, name of the product, id.
    4. It passes the correctly structured JSON with this data to IgoDigital.
    5. You receive status 200 on the API call in the Network tab.

    Once all of the above is validated, the correct data should be available to Salesforce Marketing Cloud Einstein and Behavioral Triggers.

    Debugging Data Flow

    Now it's time to check whether the data is coming through to your Salesforce Marketing Cloud.

    There are few things to check:

    1. Go to Journey Builder » Behavioral Triggers and check whether there is a required Trigger Type available with Active status.
    2. Go to the Status tab and check whether the Status next to Collect Tracking Code Type is Ok. Don't worry about the numbers in Collected Today - those are frequently not aligned with reality.
    3. Go to Audience Builder » Contact Builder » Data Extensions and in the main local folder look for IGO_PRODUCTS and IGO_PROFILES Data Extensions. You should see the captured users and products details. It validates that the data is flowing through Collect.js.
    4. Finally, it's time to check the Data Extension related to the Behavioral Trigger Type you have activated. It should be in the same main local folder, named abandoned_TYPE_01234 (with TYPE being wishlist, cart or browse depending on what you enabled).

    Remember that the Behavioral Trigger data will be delayed by the amount of time configured during the setup (between 15 minutes and 3 hours). For debugging purposes, the shorter, the better.

    If you do not see data in the above places - the most probable cause is Collect.js script implementation. Go to the previous debugging step and check whether everything is set up correctly. If you are confident that all is good and after waiting the required amount of time, contact Salesforce Support for help.

    Debugging BT Content Block

    Once you complete the above steps, it's time to play with Behavioral Trigger Content Block.

    The easiest way to check whether everything works fine is by adding the default one and checking whether the data makes sense. The hard part starts when there is an issue with the outcome (incorrect data, missing data or just no preview).

    I use a simple script to find what might be the source of the issue:

    <script runat="server">

    Platform.Load('Core', '1');

    try {
    var defaults = {
    'link' : 'Link',
    'image_link' : 'ImageLink',
    'product_code' : 'ProductCode',
    'name' : 'Name',
    'regular_price' : 'RegularPrice',
    'sale_price' : 'SalePrice',
    'sku_id' : 'SkuID'
    };

    // Data from Marketing Cloud
    var data = Platform.Variable.GetValue('@data');
    var mid = Platform.Variable.GetValue('@mid');
    var subKey = Attribute.GetValue('_subscriberkey');
    var email = Attribute.GetValue('emailaddr');

    // Data from block settings
    var settings = {'fields':{'image_link':'ImageLink','name':'ProductName','regular_price':'RegularPrice','quantity':'quantity'},'maxItems':3,'sortBy':'item_order','sortDirection':'desc','desktopCols':1,'mobileCols':0,'useSalePricing':false};

    // Build the url
    var protocol = 'https';
    var hostname = mid + '.recs.igodigital.com';
    var qs = '?item_count=' + settings['maxItems'] + '&sort_by=' + settings['sortBy'] + '&sort_direction=' + settings['sortDirection'] + '&user_attributes=gender';
    var includes = [];
    for (var key in settings['fields']) {
    if (defaults[key] == null) {
    includes = includes.concat(settings['fields'][key]);
    }
    }
    if (includes.length > 0) {
    qs += '&include=' + includes.join('|')
    }
    var url = protocol + '://' + hostname + '/' + mid + '/trigger' + qs;

    // Call IdoDigital Backend
    var result = HTTP.Post(url, 'application/json', data, []);
    if (result.StatusCode == 200) {
    var response = Platform.Function.ParseJSON(result.Response[0]);
    }

    // Print it in the Email
    Write('Your Subscriber Key: ' + subKey + '<br>')
    Write('Your Email: ' + email + '<br>')
    Write('Your Data: ' + data + '<br>')
    Write('Your Items: ' + Stringify(response) + '<br>');

    } catch(e) {
    Write(e);
    Platform.Function.RaiseError('Quit send.', true, 'statusCode','3');
    }
    </script>

    It is a very basic script but helps with finding the source of an issue. As you can see, a lot of it is just a copy-paste of the original Behavioral Trigger Content Block. But instead of displaying a beautiful abandoned cart message, it will show you Subscriber Key, Email Address, raw data that is being shot to IdoDigital Backend and the response from it.

    Using that information, you can validate whether the raw data, email address and subscriber key belong to the same Contact and whether the response is aligned with what you were pushing during your testing on the website.

    If there is anything wrong with that information, check whether you have a correct Collect.js implementation, whether it captures the accurate product information and assigns it to the right Contact data.

    If the response is correct, but there are still some issues with what the Behavioral Trigger Content Block displays - check Content Block settings. If something is still off - welcome to the new adventure - a Custom Behavioral Trigger Content Block creation.

    - - +

    SFMC Behavioral Triggers

    Win-back your e-commerce customers with SFMC Behavioral Triggers.

    +

    Marketing Cloud Behavioral Triggers

    +

    Behavioral Triggers are a solution for smoothly moving abandoned engagement data from your e-commerce to Salesforce Marketing Cloud. They enable powerful win-back communication you can create with minimal technical knowledge in express time.

    +

    Currently, there are three scenarios available:

    +
      +
    1. Abandoned Cart
    2. +
    3. Abandoned Browse
    4. +
    5. Abandoned Wishlist
    6. +
    +

    In each case, what Behavioral Triggers does is push relevant data (items left in the cart, browsed without conversion or added to wishlist) to the Einstein Backend and - after configured time - to Marketing Cloud Data Extension.

    +

    You can then leverage this data extension as both Journey Entry and a source of personalisation using built-in Behavioral Trigger Content Block. The latter allows you to use clean UI to configure dynamic content using the obtained engagement data.

    +

    Behavioral Triggers Pre-Work

    +

    Before you use the Behavioral Triggers, be sure to fulfil pre-requisites:

    +
      +
    1. As Behavioral Triggers are extending the Einstein Recommendations, get a license and enable it in your Business Unit.
    2. +
    3. Many data leveraged by Triggers is coming from the Product Catalog, so be sure to configure it before capturing the events.
    4. +
    5. Behavioural data is saved only for records that have Einstein Profile (IGO_PROFILE), so you need to enable Einstein Data Extensions.
    6. +
    7. Implement the Collect.js script on your e-commerce to capture session and engagement data.
    8. +
    9. Finally, configure Behavioral Triggers to bring relevant data to Marketing Cloud Data Extensions.
    10. +
    +

    As you can see, if you already use Einstein Recommendations, most of the necessary work is already done, and full implementation should take you just a few minutes. In such a case, you will only need to update Collect.js and configure the Behavioral Triggers slightly.

    +

    How the Behavioral Triggers work

    +

    Behavioral Triggers seems to be easy to implement, but a lot is going in the backend. It is good to understand its basics, as it might help a lot when triaging a problem or customising the solution.

    +
      +
    1. A customer enters your e-commerce site - you trigger first Collect.js scripts to capture the Session and Page View.
    2. +
    3. Customer clicks on a product page - you trigger the Page View data layer with a link to that product (Abandoned Browse scenario).
    4. +
    5. Customer finds an exciting product and adds it to the wishlist - you trigger the Wishlist data layer (Abandoned Wishlist scenario).
    6. +
    7. A customer decides on one of the products and adds it to the cart - you trigger the Cart data layer (Abandoned Cart scenario).
    8. +
    9. Customer goes through the purchase process and buys the product - you trigger the Cart data layer with explicit parameter (This blocks Abandoned Cart from launching communication).
    10. +
    11. Each of the above triggers is sent to Einstein Backend (IgoDigital) that stores the information.
    12. +
    13. Marketing Cloud Behavioral Triggers query the Einstein Backend for any events that occurred some time ago - you can configure it in the range from 15 minutes to 3 hours (in 15 minutes increments).
    14. +
    15. If there is a matching event, it checks whether there is any other event that overwrites it. For example, if your customer viewed a product page, and a few minutes later, added this product to the cart, the page view will be ignored. The Behavioral Trigger will wait for the abandoned cart.
    16. +
    17. Once there is an event ripe for reengagement, Behavioral Trigger will put it into a system created Data Extension (one per scenario) with three data points: subscriber key, timestamp and encrypted data.
    18. +
    19. Now you can use this to add the customer to a Customer Journey.
    20. +
    21. In the Journey, you can use an Email with a built-in Behavioral Trigger Content Block. At the moment of sending, this block makes a call to Einstein Backend (IgoDigital) and gets the real-time state of your customer interaction. It validates that he or she did not convert to purchase in the meantime and provides all the details required for creating personalised content in the email presenting the abandoned products.
    22. +
    +

    As you can see, a lot is happening, and it's time to dive deeper into each step to understand it better.

    +
    You Should Know

    There are many quirks and tricks - read on to learn how to get more out of Behavioral Triggers.

    +
    +

    Marketing Cloud Configuration

    +

    Before you implement the Collect.js, you have to make the basic configuration of the Behavioral Triggers.

    +

    Email Recommendations Configuration

    +

    If you haven't yet configured the Einstein Email Recommendations, you will have to do it first. Go to Einstein » Einstein Overview » Email Recommendations » Admin » Implementation, and it will guide you through the steps needed.

    +

    If you already configured it previously, go to Einstein » Einstein Overview » Email Recommendations » Admin » Options and make sure you have the additional options related to Behavioral Triggers enabled as described below.

    +

    For the Behavioral Triggers, be sure to select Product Catalog implementation.

    +

    Catalog and Product Attributes

    +

    On the next screen, you will be able to select which Standard Product Attributes you want to use, plus have the option to create Custom ones. It is a crucial step, as the data you choose and create here will be the basis for the Behavioral Trigger Content Block available in the win-back email.

    +

    Just remember that those attributes are global (linked to a product, not to a particular Subscriber), so don't add here parameters that are individual (like PersonalisationString).

    +

    User and Profile Attributes

    +

    The next step allows you to configure Custom Profile Attributes. It is beneficial for general Einstein purposes, but it is also crucial for Behavioral Triggers if you want to personalise your win-back email for unknown (to Marketing Cloud) customers.

    +

    If this is something you want to do, enable Custom User Profile Attributes and add necessary ones.

    +

    You can also enable localisation here, which will allow you to present the product name in the user's language.

    +

    Activity Tracking

    +

    On this last step before Summary, you configure what you will be tracking. Category View and In-Site Search are nice to have for general Einstein features, but for Behavioral Triggers, be sure to check Cart Activity and Purchase Activity. You will need it for Collect.js.

    +

    Initial Catalog Upload

    +

    Once you configure the Email Recommendations, it is time to make the first upload of the Catalog. Go to Einstein » Einstein Overview » Email Recommendations » Admin » Catalog and click Connect a New Catalog. Select the Product Catalog, import method and format. Pass the column's name that contains Unique ID and tell SFMC whether it is complete or partial Catalog import.

    +

    Once Marketing Cloud completes the upload, be sure to map the fields from your source to the Standard and Custom Fields available in the Catalog.

    +

    Einstein Data Extension

    +

    The last step here is to enable Einstein Data Extensions. To do this:

    +
      +
    1. Go to Einstein » Einstein Overview » Email Recommendations » Admin » Status.
    2. +
    3. Click on the cog icon in the top right and select Data Extension Settings.
    4. +
    5. Enable them with a toggle.
    6. +
    +

    If the toggle is inactive, you need to:

    +
      +
    1. Make sure your Catalog is uploaded and mapped.
    2. +
    3. Make test Collect.js push to initialise Einstein. To start, you can utilise ready-to-use base script:
    4. +
    +
    initialise Einstein with basic Collect.js
    <script type="text/javascript" src="MID.collect.igodigital.com/collect.js"></script>
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "initialise Einstein"}]);
    _etmc.push(["trackPageView"]);
    </script>
    +

    Create a Cloud Page, paste the above snippet in the HTML block - update both MID's with the Business Unit you implement the Behavioral Triggers on - and publish it. After opening the website, you can delete the Cloud Page - so that it doesn't affect your future Einstein data.

    +

    You will find details on what is happening in this script in the Collect.js section below. As for now, you have to wait for the initialisation to happen. It can take a day. To check whether it is ready, try to Enable the Einstein Data Extensions again. During the initialisation, the Status page won't be loading (you will see the circle spinning infinitely).

    +

    Behavioral Triggers Configuration

    +

    Once you configure and enable the Email Recommendations, it is time to set up the Behavioral Triggers themselves. It will be simpler and easier. Head to Journey Builder » Behavioral Triggers.

    +

    First, click New Trigger in the top right. You can select from the three available abandonment scenarios:

    +
      +
    1. Abandoned Cart
    2. +
    3. Abandoned Browse
    4. +
    5. Abandoned Wishlist
    6. +
    +

    Select the one you want to start with, and you will be able to set suppression rules - one related to multiple triggers and the second to a recent purchase. For initial configuration, I recommend setting both to 0. It will make testing much more manageable. Once you go to production, change those appropriately as per your business requirements.

    +

    When you confirm the setup, Marketing Cloud creates the system Data Extension to store Behavioral Trigger data (one per scenario).

    +

    The only left option is the Session Timeout Limit. You can access it by clicking the cog icon next to the New Trigger button. You can select from a range starting at 15 minutes and going in 15 minutes increments up to 3 hours. Again, for testing purposes, make it the shortest possible and later update based on business needs.

    +
    You Should Know

    Currently, it is not working at all - it does not save the selected setting, and it always shows 1 hour. Until fixed, you can manage this by going to Einstein » Einstein Overview » Email Recommendations » Admin » Implementation and clicking Advanced Settings on the left pane. There will be a Session Length option with the same range. It is the same setting.

    +
    +

    Collect.js

    +

    You have seen the Collect.js script mentioned multiple times here, and it is also the most technical elements of the standard Behavioral Triggers implementation. Time for details.

    +

    Collect Code Script

    +

    Before you start building the data layers, you first need to import the code responsible for pushing data to Einstein Backend (IgoDigital). You do this by putting this line on every page:

    +
    Collect Code Script
    <script type="text/javascript" src="MID.collect.igodigital.com/collect.js"></script>
    +

    Be sure to change the MID in the above URL to the ID of the Business Unit that you want to use for your Behavioral Triggers.

    +

    Once you have it, you may start building the data layers that will move the information from your e-commerce to Marketing Cloud. For simplicity, I won't be writing the above code in the snippets below.

    +

    Set Org ID

    +

    The first data layer you need to push contains, again, the MID of the Business Unit. Just as with the Collect Code Script, be sure to change the MID to your SFMC BU's actual ID.

    +
    Set Org ID Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    </script>
    +

    Set User Info

    +

    The second data layer that will be key for sending Behavioral Triggered communication pushes the customer's data. Remember that this layer must be added to your Collect.js before any tracking layer for proper attribution.

    +
    Set User Info Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    </script>
    +

    The base function is pushing your customer's unique identifier (don't be intimidated by the email in that code - you do not have to pass the email address there). Depending on your use case, it might be either:

    +
      +
    1. Subscriber Key (if you plan on sending only to contacts known to Marketing Cloud or have an option to generate Subscriber straight from your e-commerce) or
    2. +
    3. Email Address (recommended if you want to push win-back emails to unknown users in your Marketing Cloud and you do not have an option to create them properly.)
    4. +
    +
    You Should Know

    If you decide to push an Email Address to communicate with people not yet in the Marketing Cloud, be sure to make them Subscribers. You can easily do it using the classic Export-Transfer-Import Automation on the data stored in the Behavioral Triggers Data Extension. Leverage SQL Activity to copy the needed data to another Data Extension using this query:

    Basic Subscriber data preparation
    SELECT
    GUID() AS SubscriberKey, // OR: subscriber_key AS SubscriberKey,
    subscriber_key AS EmailAddress
    FROM abandoned_cart_123456789

    Be sure to update the name of the Behavioral Trigger Data Extension.

    You can leverage the same automation to trigger the Journey Entry to ensure that all records in the Journey already exist as Subscribers.

    +

    You can provide more data in this data layer by adding Custom Einstein Profile Attributes as second parameter:

    +
    Extended Set User Info Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {
    "email": "UniqueIdentifier",
    "details": {"gender": "male"}
    }]);
    </script>
    +
    You Should Know

    Remember that the snippet I shared above is just an example. You will probably use different Custom Profile Attributes. To get the snippet based on your configuration, go to Einstein » Email Recommendations » Admin » Implementation.

    +

    Be sure to create all those Custom Profile Attributes in your Einstein implementation before pushing it via Collect.js.

    +

    Catalog Update Streaming

    +

    There are two options to keep your Einstein Catalog up-to-date. Manual uploads and Catalog Update Streaming.

    +
    You Should Know

    With April 2021 Marketing Cloud Release the Collect.js Streaming Updates will be deprecated. The way forward will be Streaming Updates via API. Read more here.

    As existing implementation will be available for some time still to allow for migration, I'm keeping this section until the end of the grace period.

    +

    Manual uploads might be fine if you nearly never update items or their parameters in your e-commerce. For all other use cases, you should be using Catalog Update Streaming Data Layer.

    +
    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["updateItem", {
    "item_type": "product",
    "item": "ProductCode",
    "name": "ProductName",
    "description": "ProductDescription",
    "url": "ProductURL",
    "unique_id": "ProductSKU",
    "available": "y",
    "image_url": "ProductImage",
    "sale_price": "ProductSalePrice",
    "price": "ProductRegularPrice",
    "release_date": "ProductReleaseDate",
    "custom_attribute": "ProductAttribute"
    }]);
    </script>
    +
    You Should Know

    Remember that the snippet I shared above is for a fully-fledged Catalog with one sample Custom Attribute. You may use only some of those parameters or utilise multiple custom attributes.

    You can get the complete list of the parameters you need to use by going to Einstein » Email Recommendations » Admin » Implementation. If you have Streaming Updates enabled (and you should have to use this data layer) below, you will see the entire snippet adapted to your configuration.

    Be sure to check also the Domain table visible above it - you should add all the domains connected to your Streaming Update, so:

      +
    1. The domain where the Stream is happening
    2. +
    3. The domain of the Product URL
    4. +
    5. The domain of the Product Image URL
    6. +

    In many cases, all those domains might be the same, but if you are using Content Delivery Network or a different subdomain for the backend, those might differ. If you cannot click Register, be sure you pass just the domain - the bolded part of https://domain.name/folder/structure?query=string.

    +

    With this data layer, you can be sure that the Catalog stored in Marketing Cloud is always up-to-date. It is crucial, as everything in the Behavioral Trigger Content Block uses the Catalog data.

    +

    The available parameter is essential as it is the best way to make sure the personalisation in the email won't show the product that is no longer available even if it was in the abandoned cart. Of course, this is true for the moment of email send, not the moment of email open.

    +

    You can either:

    +
      +
    1. Add this data layer to other pushes of Collect.js as shown in the snippet above or
    2. +
    3. Create a separate process on the backend of your e-commerce. It can shoot an update whenever there is a change in the product parameters.
    4. +
    +

    The first approach is straightforward; the second is wise.

    +
    You Should Know that

    Remember that this data layer updates the Catalog. Even if you push it in the context of a specific subscriber and along the Track Cart data layer, it will still update the global Catalog for everyone.

    If your customer has a unique product price (for example, via VIP status or coupon), use the Track Cart data layer to share this information.

    +

    If you are using localisation, you may also pass the translated product name using "locale_pl_name": "PolishProductName". The Behavioral Trigger Content Block can leverage it with a trick.

    +

    Track Page View

    +

    Time for our first real tracking - Page View. The basic data layer pushes just the information about the event:

    +
    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView"]);
    </script>
    +

    However, you can do much more with this data layer by providing additional parameters. The most important for Behavioral Triggers is item:

    +
    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView", {"item": "ProductCode"}]);
    </script>
    +

    Once you swap ProductCode for the actual product code matching one of the items in Einstein Product Catalog, you will be able to leverage the first Behavioral Trigger scenario - Abandoned Browse. Once you push this event and the customer does not convert further, this will populate Abandoned Browse Data Extension and allow win-back communication.

    +

    You can also add other parameters that are not used by the Behavioral Triggers but rather standard Einstein Recommendations - category and search:

    +
    Page View Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView", {
    "item": "ProductCode",
    "category": "ProductCategory",
    "search": "SearchTerm"
    }]);
    </script>
    +

    You do not have to use all three; you can trigger various ones depending on the page the user is on. The floor is yours.

    +

    Track Wishlist

    +

    The second Behavioral Trigger scenario - Abandoned Wishlist - has its own data layer:

    +
    Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackWishlist", { "wishlist": [
    {"item": "ProductCode", "unique_id": "ProductSKU"},
    {"item": "ProductCode", "unique_id": "ProductSKU"}
    ]}]);
    </script>
    +

    As you can see, not much is configurable here - all of the product data come from the Einstein Catalog, so be sure to have it up to date.

    +

    Track Cart

    +

    The third Behavioral Trigger scenario - Abandoned Cart - also has its own data layer:

    +
    Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackCart", { "cart": [
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}
    ]}]);
    </script>
    +

    Few things here are important to consider:

    +
      +
    1. As you can see, there are four possible parameters for each item - item and unique_id are required and must be available in your Einstein Product Catalog to work. The other two - quantity and price are optional.
    2. +
    3. The price parameter here is different from price or sales_price available in Catalog Update. The Catalog ones are global - the same for all your customers. The price pushed within Track Cart is unique for this customer and might differ from the global ones (think VIP status or a coupon used). It won't update your Einstein Catalog.
    4. +
    5. Always push the whole cart. If your customer has more than one item in it - put all of them in this data layer. If a customer deletes an item from the cart - push the data layer without the deleted one. The last version pushed is considered the final state of the cart for personalisation purposes.
    6. +
    7. Always be sure to clear the Track Cart data whenever the cart data is no longer needed. If the customer purchased the products, be sure to use the Track Purchase data layer. If the customer deleted all the products from their cart, use the Clear Cart parameter:
    8. +
    +
    Clear the Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackCart", {"clear_cart": true}]);
    </script>
    +

    Otherwise, your customers might receive win-back communication for products that they already bought.

    +

    Track Purchase

    +

    Whenever the customer converts, be sure to track this purchase. It is not only crucial for Einstein Recommendations and Discover's ROI calculation. For Behavioral Triggers, it is vital, as it informs that the cart converted. It blocks win-back communication for already purchased products.

    +

    The basic structure of the Track Purchase data layer is very similar to the Track Cart one:

    +
    Track Cart Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["setUserInfo", {"email": "UniqueIdentifier"}]);
    _etmc.push(["trackPageView", {"item": "ProductCode"}]);
    _etmc.push(["trackConversion", { "cart": [
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"},
    {"item": "ProductCode", "quantity": "Quantity", "price": "IndividualPrice", "unique_id": "ProductSKU"}
    ]}]);
    </script>
    +

    Do Not Track

    +

    You may suppress all of the configured trackings by using a data layer based on customer decision and local laws.

    +
    Do Not Track Data Layer
    <script type="text/javascript">
    _etmc.push(["setOrgId", "MID"]);
    _etmc.push(["doNotTrack"]);
    </script>
    +

    More details on Collect.js

    +

    If you want even more details and implementation considerations related to the Collect.js code used by Behavioral Triggers and Einstein Recommendations, check the awesome documentation by Jörn Berkefeld and excellent PDF guide directly from Salesforce.

    + +
    +

    Behavioral Trigger Content Block

    +

    Now you can go forward with Behavioral Triggers. Collect.js will push the required data to Einstein backend, and after Session Timeout Limit, it will evaluate it against Suppression Rules as per your configuration. Then, the Behavioral Triggers adds Abandoned Engagement data to the respective Data Extension. Now it's time to use it.

    +

    The standard way the leverage this information is to use those abandonment Data Extensions as a Journey Entry Source. The real magic, however, will happen in the email you will be sending in this Journey. And that is thanks to the out-of-the-box Behavioral Trigger Content Block.

    +

    To check it out, edit email, and on the bottom of the left pane containing all the Content Blocks, you will find the Behavioral Trigger one. Drag and drop it to the email so that you can start configuring it.

    +

    When you click that block after adding it to the email, you will be able to limit the maximum number of products shown, control the layout with columns, change order and decide which data points should be visible for products.

    +

    It's easy, it's quick, but there are multiple issues if you want anything a bit more customised for your needs. With the out-of-the-box solution:

    +
      +
    1. You don't have a straightforward way to control the style of this information. You can only go to the Styling tab of the editor and modify the CSS available there.
    2. +
    3. You are limited only to the fields that you configured for the Product Catalog. For example, you cannot use the individual price you passed in the Track Cart data layer. You can vote for it on IdeaExchange.
    4. +
    5. There is no information on how to access the data outside of the Content Block - but you can learn about it later in this article.
    6. +
    7. You cannot leverage Einstein API's full potential, as the hard-coded request does not have a parameter responsible for pulling the Einstein Custom Profile Attributes. You can vote for it on IdeaExchange.
    8. +
    9. You cannot use multiple Content Blocks pointing to various Behavioral Trigger scenarios (for example,first focus on the cart and then present the wishlist).
    10. +
    +

    As far as you can fix the first issue with good CSS knowledge, the rest require more work.

    +

    So what can you do? Configure the Content Block to be as close as possible to what you want, go to Code View of your Email and look for Concat('{"trigger_payload":"', data, '"}'). It starts the code responsible for Behavioral Trigger Content Block.

    +

    Below you can see two tabs.

    +
      +
    1. In t Original Code, you will find the complete code of the built-in Behavioral Trigger Content Block. Shown configuration displays a product image with name and description plus regular/sale price. The number of items is limited to four in a two-column layout.
    2. +
    3. In the Code Highlights tab, I focus on some part of the code that I found exciting and deserve some attention.
    4. +
    +

    1. AMPScript personalisation

    %%[
    Set @data = Concat('{"trigger_payload":"', data, '"}')
    Set @mid = memberid
    ]%%

    The first four lines of the Behavioral Trigger Content Block code are already interesting. They are using AMPScript, although the rest is in SSJS. It could easily be written in SSJS altogether for more optimised execution.

    You can also see that they are pulling the behavioural data by using a personalisation string on data - the Abandoned Engagement Data Extension column containing encrypted information. If you want to have more control over the source of this information, you can think about making a lookup here. It would allow you to even use multiple Content Blocks in one email (or mix browsed, wishlisted and added to cart items in one block).

    2. Try/Catch block

    try {
    // Behavioral Trigger Content Block code
    } catch(e) {
    Write(e);
    Platform.Function.RaiseError("Quit send.", true, "statusCode","3");
    }

    The try/catch block is a great idea, but as it has separate scope in SSJS, it means that no SSJS variable from within will be available outside of it. Thankfully the other part of the code is sharing the Behavioral Trigger data using AMPScript variables.

    If you want to access the SSJS ones, you can declare them before the try/catch starts or pull them from the AMPScript.

    3. Settings & Markup Fragments

    var settings = {
    // Content Block settings from UI
    };
    var markupFragments = {
    // HTML fragments
    };

    Those two variables store most options that you have selected when configuring the Behavioral Trigger Content Block. You can use them to make configuration impossible in the UI. You can also change the HTML used for the product presentation.

    Remember, however, that the Behavioral Trigger Content Block use classes visible in the markupFragments in the CSS. Changes might break the styling.

    You Should Know

    The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. Learn more here.

    Fix it by changing rem units in markupFragments to px ones.

    Later there are also two other settings-related lines:

    var useRecentItems = false;
    // Some code
    var useSalePricing = true;

    You can also configure them within the Behavioral Trigger Content Block UI. Respectively, by checking either:

      +
    • "If the subscriber's abandoned items have changed since the triggering event, include the updated items" or
    • +
    • "Only show sale price if sale price is > 0"
    • +

    Both checkboxes are available in the Product Fields section. The second one, however, is visible only if you add the sale_price field.

    If you don't enable the useRecentItems, the Content Block will take the products initially pushed with Track Cart Collect.js. If you use it, it will instead take the latest data available that, in some cases, might be either bigger (if your customer added few items) or smaller (if he deleted some or just cleared the whole cart). There is also a block that stops the send if there are no more items in the current cart.

    As for useSalePricing, it is much less straightforward. What "Only show sale price if sale price is > 0" enabled does is check whether there is sale price and whether it is lower than the regular price and - if yes - it adds strike-through style to the regular price — end of the story. For anything more attractive, you will need to play with custom CSS and maybe additional SSJS logic.

    4. Pulling data

    var data = Platform.Variable.GetValue("@data");
    var mid = Platform.Variable.GetValue("@mid");
    var event_locale = Platform.Variable.GetValue("@event_locale");

    Two first lines here are pulling data from the AMPScript described in the first highlight. As mentioned, it can be optimised by making the personalisation here and removing AMPScript altogether.

    More interesting, however, is the third line. You can configure localisation for your products in Email Recommendations Configuration, but it is not used by the Behavioral Triggers - officially. Thanks to this little line, you can - even with the built-in standard Content Block - declare the locale source for the Subscriber and set it to @event_locale AMPScript variable. Bam, your Behavioral Triggers are now localised.

    5. Building the API query

    var protocol = "https";
    var hostname = mid + ".recs.igodigital.com";
    var qs = "?item_count=" + settings["maxItems"] + "&sort_by=" + settings["sortBy"] + "&sort_direction=" + settings["sortDirection"];
    var includes = [];
    for (var key in settings["fields"]) {
    if(defaults[key] == null) {
    includes = includes.concat(settings["fields"][key]);
    }
    }
    if(includes.length > 0) {
    qs += "&include=" + includes.join("|")
    }
    if(event_locale){
    qs += "&locale=" + event_locale
    }
    var url = protocol + "://" + hostname + "/" + mid + "/trigger" + qs;

    The above snippet is responsible for building the URL that is used for an HTTP.Post API call to Einstein Backend (IgoDigital). You can make a simple addition that will enable you access to Einstein Custom Profile Attributes. Must-have if you want to boost engagement with personalisation for new customers.

    To do so, just before the line highlighted in the snippet above add a new one with:

    qs += "&user_attributes=CustomProfileAttribute1|CustomProfileAttribute2"

    Just change the values after the equal sign to the exact names of your Einstein Custom Profile Attributes that you want to have available in your code (separated by |).

    6. Response parsing

    for(var responseField in response) {
    var value = response[responseField];

    if(responseField === "products" || responseField === "current_cart") {
    var prefix = (responseField === "products") ? "@item_" : "@cart_";
    for(var i=0; i<value.length; i++) {
    for(var itemField in value[i]) {
    var name = prefix + itemField + "_" + (i+1);
    var val = value[i][itemField];
    Platform.Variable.SetValue(name, val);
    }
    }
    }
    else if(responseField === "user") {
    var prefix = "@user_";
    for(var userField in value) {
    var name = prefix + userField;
    var val = value[userField];
    Platform.Variable.SetValue(name, val);
    }
    }
    else {
    Platform.Variable.SetValue("@"+responseField, value);
    }
    }

    The code you see above is responsible for reading the response from Einstein Backend (Igodigital). It goes through each element of the response and creates a separate AMPScript variable with an appropriate value.

      +
    1. For each element of the products key, it creates a variable build with item_ prefix, value name and _X suffix, where X is the counter of the item (so 1 for the first item, 2 for the second and so on). It means you can get the first link to the first item by calling the @item_link_1 variable. To get the name of the second item goes with @item_name_2.
    2. +
    3. If the response contains the current_cart key (it is available only if the Track Cart was triggered), it also creates variables for it. The structure is nearly the same - just the prefix changes to cart_. The most compelling use case here? You can get the price information that you pushed via Track Cart (the one unique to a specific cart, not coming from the Product Catalog) by calling @cart_amount_1 for the first item.
    4. +
    5. There is even a system that gets Custom Profile Attributes as AMPScript variables! It uses user_ prefix, so if you want to get, for example, the gender - call @user_gender variable.
    6. +
    7. All other keys of the response are also created with just their name. So to get information on whether the cart converted, you can call @purchased variable.
    8. +

    To check what is available to you, check example API responses coming from Einstein Backend.

    You Should Know
      +
    1. The current_cart key and the amount variable is available only for the Abandoned Cart Behavioral Trigger. Wishlist and Browse only contain products information coming from the Product Catalog.
    2. +
    3. Even though there is already a code that parses Custom Profile Attributes, it won't give you anything on the built-in standard Behavioral Trigger Content Block. It won't have the user key populated. You must enable each attribute in the API call.
    4. +
    5. If you want to use more than one Abandonment Engagement in one email, you will have to alter the prefixes in this code not to overwrite the AMPScript variables.
    6. +

    Those AMPScript variables are a must if you want to create a Call to Action button that will rebuild the cart in your e-commerce. Remember, however, that it is custom development without any out-of-the-box snippets from Salesforce.

    The rest of the code is just taking care of the proper display of the information in the email and stopping the send with RaiseError if the customer purchased the cart or the API did not respond. It is added to the email using %%=treatascontentarea('BT Trigger', @content)=%%.

    +

    API Responses

    +

    To fully leverage the Behavioral Trigger Content Block's customisation options, you can check the sample responses from Einstein Backend (IgoDigital) available below. They will help you know what AMPScript variables can be available after the Content Block.

    +
    {
    "products": [
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode002",
    "name": "ProductName2",
    "regular_price": 88,
    "sale_price": 55,
    "sku_id": "SKU2",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "44.00"
    },
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode001",
    "name": "ProductName1",
    "regular_price": 99,
    "sale_price": 66,
    "sku_id": "SKU1",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "33.00"
    }
    ],
    "current_cart": [
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode001",
    "name": "ProductName1",
    "regular_price": 99,
    "sale_price": 66,
    "sku_id": "SKU1",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "33.00"
    },
    {
    "link": "https://123456789.collect.igodigital.com/redirect/UNIQUE_CODE",
    "image_link": "https://your.product/image.png",
    "product_code": "ProductCode002",
    "name": "ProductName2",
    "regular_price": 88,
    "sale_price": 55,
    "sku_id": "SKU2",
    "online_availability": "Y",
    "quantity": 1,
    "amount": "44.00"
    }
    ],
    "same_products": "Y",
    "user": {
    "gender": "Male"
    },
    "purchased": false,
    "abandoned_items": "SKU2|SKU1",
    "tracking_pixel": " "
    }
    You Should Know
      +
    1. You can see that there is "gender" data in the "user" key in the example above. You will see information here only if you alter your API call. Otherwise, it will be empty.
    2. +
    3. The amount key is available in both products and current_cart keys, but it is in a string format. Other prices (regular_price and sale_price) are integers.
    4. +
    5. In same_products, you will have information ("Y"/"N") whether the Cart content changed between the moment you pushed this data and the API call.
    6. +
    +

    Debugging Behavioral Triggers

    +

    There are three critical steps of Behavioral Trigger implementation when you might need to debug your solution. As you will be merging multiple systems and working on time-sensitive data using a new feature, look behind the curtain will be crucial. Thankfully, there are few options that we can use.

    +

    Debugging Collect.js

    +

    The first thing to check is your frontend Collect.js implementation. To quickly review whether Collect.js is available on your website, open Developer Tools in your browser and go to the Console tab. In there, write _etmc.

    +

    If you see ReferenceError: _etmc is not defined, it means that the script is not available. Ensure that you are checking a page that is supposed to have Behavioral Triggers implemented and that the script is added correctly.

    +

    If the script is implemented, you will see an Object containing over a dozen of keys. Many of which are the functions that pass the data from your website to IgoDigital.

    +

    Now you can leverage its power by writing in the console _etmc.debug = true to enable debugging mode of Collect.js. Once set, it will log every change applied to the dataLayer. Make a tracked action - like adding a product to a cart - to see it work.

    +
    Example data logged after enabling debug and adding product to the cart
    {
    "cart": [
    {
    "item": "2020572",
    "unique_id": "2020572AEUAEL",
    "name": "Women’s Red Box Pullover Hoodie",
    "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html",
    "price": 50,
    "sale_price": 50,
    "item_type": "product"
    }
    ],
    "url": "https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"
    }
    +
    You Should Know

    You can check how Collect.js works by reviewing its contents. To do this, go to the link contained in your base Collect code. It should be: http://YOUR_MID.collect.igodigital.com/collect.js.

    +

    Another option to observe what Collect.js is sending to Einstein IgoDigital backend is to go to Network tab of the Developer Tools and look for calls made to igodigital.com address. You will see the above data in form of API request payload:

    +
    https://stack7.collect.igodigital.com/c2/northerntrailoutfitters/track_cart?payload={"cart":[{"item":"2020572","unique_id":"2020572AEUAEL","name":"Women’s Red Box Pullover Hoodie","url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572AEUAEL.html","price":50,"sale_price":50,"item_type":"product"}],"url":"https://production-internal-ccdemo.demandware.net/s/NTOSFRA/default/women%E2%80%99s-red-box-pullover-hoodie-2020572BHX.html?source=igodigital"}
    +

    Using either of those two tools will allow you to make sure that:

    +
      +
    1. You have correctly implemented the Collect.js script.
    2. +
    3. It is correctly assigned to the website events you want to track.
    4. +
    5. It captures necessary information, like price, name of the product, id.
    6. +
    7. It passes the correctly structured JSON with this data to IgoDigital.
    8. +
    9. You receive status 200 on the API call in the Network tab.
    10. +
    +

    Once all of the above is validated, the correct data should be available to Salesforce Marketing Cloud Einstein and Behavioral Triggers.

    +

    Debugging Data Flow

    +

    Now it's time to check whether the data is coming through to your Salesforce Marketing Cloud.

    +

    There are few things to check:

    +
      +
    1. Go to Journey Builder » Behavioral Triggers and check whether there is a required Trigger Type available with Active status.
    2. +
    3. Go to the Status tab and check whether the Status next to Collect Tracking Code Type is Ok. Don't worry about the numbers in Collected Today - those are frequently not aligned with reality.
    4. +
    5. Go to Audience Builder » Contact Builder » Data Extensions and in the main local folder look for IGO_PRODUCTS and IGO_PROFILES Data Extensions. You should see the captured users and products details. It validates that the data is flowing through Collect.js.
    6. +
    7. Finally, it's time to check the Data Extension related to the Behavioral Trigger Type you have activated. It should be in the same main local folder, named abandoned_TYPE_01234 (with TYPE being wishlist, cart or browse depending on what you enabled).
    8. +
    +

    Remember that the Behavioral Trigger data will be delayed by the amount of time configured during the setup (between 15 minutes and 3 hours). For debugging purposes, the shorter, the better.

    +

    If you do not see data in the above places - the most probable cause is Collect.js script implementation. Go to the previous debugging step and check whether everything is set up correctly. If you are confident that all is good and after waiting the required amount of time, contact Salesforce Support for help.

    +

    Debugging BT Content Block

    +

    Once you complete the above steps, it's time to play with Behavioral Trigger Content Block.

    +

    The easiest way to check whether everything works fine is by adding the default one and checking whether the data makes sense. The hard part starts when there is an issue with the outcome (incorrect data, missing data or just no preview).

    +

    I use a simple script to find what might be the source of the issue:

    +
    <script runat="server">

    Platform.Load('Core', '1');

    try {
    var defaults = {
    'link' : 'Link',
    'image_link' : 'ImageLink',
    'product_code' : 'ProductCode',
    'name' : 'Name',
    'regular_price' : 'RegularPrice',
    'sale_price' : 'SalePrice',
    'sku_id' : 'SkuID'
    };

    // Data from Marketing Cloud
    var data = Platform.Variable.GetValue('@data');
    var mid = Platform.Variable.GetValue('@mid');
    var subKey = Attribute.GetValue('_subscriberkey');
    var email = Attribute.GetValue('emailaddr');

    // Data from block settings
    var settings = {'fields':{'image_link':'ImageLink','name':'ProductName','regular_price':'RegularPrice','quantity':'quantity'},'maxItems':3,'sortBy':'item_order','sortDirection':'desc','desktopCols':1,'mobileCols':0,'useSalePricing':false};

    // Build the url
    var protocol = 'https';
    var hostname = mid + '.recs.igodigital.com';
    var qs = '?item_count=' + settings['maxItems'] + '&sort_by=' + settings['sortBy'] + '&sort_direction=' + settings['sortDirection'] + '&user_attributes=gender';
    var includes = [];
    for (var key in settings['fields']) {
    if (defaults[key] == null) {
    includes = includes.concat(settings['fields'][key]);
    }
    }
    if (includes.length > 0) {
    qs += '&include=' + includes.join('|')
    }
    var url = protocol + '://' + hostname + '/' + mid + '/trigger' + qs;

    // Call IdoDigital Backend
    var result = HTTP.Post(url, 'application/json', data, []);
    if (result.StatusCode == 200) {
    var response = Platform.Function.ParseJSON(result.Response[0]);
    }

    // Print it in the Email
    Write('Your Subscriber Key: ' + subKey + '<br>')
    Write('Your Email: ' + email + '<br>')
    Write('Your Data: ' + data + '<br>')
    Write('Your Items: ' + Stringify(response) + '<br>');

    } catch(e) {
    Write(e);
    Platform.Function.RaiseError('Quit send.', true, 'statusCode','3');
    }
    </script>
    +

    It is a very basic script but helps with finding the source of an issue. As you can see, a lot of it is just a copy-paste of the original Behavioral Trigger Content Block. But instead of displaying a beautiful abandoned cart message, it will show you Subscriber Key, Email Address, raw data that is being shot to IdoDigital Backend and the response from it.

    +

    Using that information, you can validate whether the raw data, email address and subscriber key belong to the same Contact and whether the response is aligned with what you were pushing during your testing on the website.

    +

    If there is anything wrong with that information, check whether you have a correct Collect.js implementation, whether it captures the accurate product information and assigns it to the right Contact data.

    +

    If the response is correct, but there are still some issues with what the Behavioral Trigger Content Block displays - check Content Block settings. If something is still off - welcome to the new adventure - a Custom Behavioral Trigger Content Block creation.

    \ No newline at end of file diff --git a/docs/config/sfmc-code-resource/index.html b/docs/config/sfmc-code-resource/index.html index ae3fc897b..94facaea1 100644 --- a/docs/config/sfmc-code-resource/index.html +++ b/docs/config/sfmc-code-resource/index.html @@ -1,22 +1,130 @@ - + - -SFMC Code Resource | Mateusz Dąbrowski + +SFMC Code Resource | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    What are the Code Resources?

    Code Resources in Salesforce Marketing Cloud are a solution for hosting JavaScript, CSS, JSON, RSS, Text and XML files within your account.

    They were part of the legacy Classic CloudPages. However, their features and usefulness allowed them to survive sunsetting and thrive in the Web Studio. With Spring '22 Release, they got a new home in Content Builder and live along with Content Blocks.

    Why use Code Resources when we have new CloudPages in Web Studio and Code Content Blocks in Content Builder? Unique set of features makes Code Resources irreplaceable:

    • Unlike Content Blocks, Code Resources have their own URL. It means that they are not just a building block but can work alone as a web asset. It also means that they can be linked and API called as any other website.
    • Unlike Cloud Pages, Code Resources have no HTML structures appended automatically by Marketing Cloud. It allows you to have complete control over what is returned by the Code Resource.
    • Unlike externally hosted files, you can leverage SFMC programmatic solutions - SSJS and AMPScript - to provide a backend logic to your Code Resources.
    • Finally, unlike Cloud Pages, there is no cost associated with loading a Code Resource.

    That combination makes Code Resources perfect for multiple use cases - from basic to complex ones. Let's see some examples.

    Code Resource Use Cases

    Code Resource Basics

    The most obvious use case is hosting shared CSS and JavaScript, just as you would on a CMS. It works great - you can paste your stylesheet or scripts and import it the standard way to your Cloud Pages benefitting from storing all assets on the same server:

    JS & CSS imports from Code Resources - the URLs will follow your Marketing Cloud configuration
    <link rel="stylesheet" type="text/css" href="https://code-resource.sfmc.com/my-css" />
    <script src="https://code-resource.sfmc.com/my-js"></script>

    Similarly, you can store complex data structures in JSON or XML files to leverage them later with SSJS or AMPScript/GTL. It can be a better solution for deep immutable structures than Data Extensions.

    As practical as it is, this approach does not showcase the true strength of the Code Resources, so let's check something more interesting.

    Code Resource Fun Things

    The real power comes with using Salesforce Marketing Cloud programmatic languages - AMPScript and SSJS. Those two allow you to execute logic on the backend and impact the front-facing outcome on the Code Resource. It enables some powerful use cases.

    Dynamic Code Resources

    For example, you cannot host fonts in Marketing Cloud. But, you can encode them to base64 and, in that format, add them to your CSS Code Resource.

    Web Font in CSS Code Resource
    %%[ SET @SalesforceSansRegular = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..." ]%%
    @font-face {
    font-family: "Salesforce Sans";
    src: url(data:font/ttf;base64,%%=v(@SalesforceSansRegular)=%%) format('truetype');
    font-weight: 400;
    font-display: swap;
    }

    What if you need a different font depending on the market to cover various alphabets? Adding all of them to your CSS is not a good idea from the performance point of view. However, you can leverage the power of SFMC programmatic languages to load only the required font. How? By requesting the specific font using a query parameter:

    CSS Import with query parameter on the frontend
    <link rel="stylesheet" type="text/css" href="https://coderesource.sfmc.com/my-css?font=salesforce-sans" />
    Dynamic Stylesheet on the backend
    %%[
    SET @FontSelected = RequestParameter("font")
    IF @FontSelected == "salesforce-sans" THEN
    SET @FontName = "Salesforce Sans"
    SET @FontInBase64 = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..."
    ELSE
    SET @FontName = "Different Font"
    SET @FontInBase64 = "AAAEEMDJJEkdEDKEJ849DJEHD33DJslsAAAA3EKFEK03..."
    ENDIF
    ]%%
    @font-face {
    font-family: "%%=v(@FontName)=%%";
    src: url(data:font/ttf;base64,%%=v(@FontInBase64)=%%) format('truetype');
    font-weight: 400;
    font-display: swap;
    }

    Personalised Code Resources

    Making your CSS or JS dynamic is just the beginning. Code Resources lets you leverage the Marketing Cloud Data Model. With SSJS and AMPScript, you can make Lookups and use other functions to adapt the outcome to a specific subscriber.

    It is handy when you want to hide the business logic from the competition. For example, you might have a script for a web form that calculates rates based on loyalty status, purchases and LTV. You don't have to share your logic in an accessible JavaScript - you can Lookup required data for each subscriber with SSJS and calculate everything on the server side - outputting only the final multipliers to your JS Code Resource.

    You can even perform API calls with SSJS or AMPScript to external systems to securely take advantage of their data. That can be especially useful when working with JSON Code Resources that can hold whole data structures used for the presentation layer on the Cloud Page.

    Generated Code Resources

    JSON Code Resources are where the real magic happens. They pair beautifully with SSJS and allow us to generate whole outputs from scratch with a nifty combination of SSJS object, Stringify() function and <ctrl:var name=string /> personalisation string. Yeah, you can have no line of JSON in your JSON Code Resource and still use it to its fullest potential. Let's dive into details.

    Make a JSON from generated data
    <script runat="server">
    (...)
    var stringifiedResult = Stringify({ 'created': createdAssets, 'deleted': deletedAssets });
    </script>
    <ctrl:var name=stringifiedResult />

    As you can see above, there is no line of JSON, but the Code Resource will output a proper JSON. How?

    Once Marketing Cloud executes SSJS and AMPScript on the backend, it removes that code from the output. However, you can push some data to the frontend with a personalisation string. If that data is an SSJS object, you can convert it to proper JSON with Stringify().

    This trick enables many different use cases that make Code Resources shine:

    1. AMPScript and SSJS debugging - there are many places where you might want to use SFMC programmatic languages. Most of them either doesn't allow for easy debugging or drive SuperMessages costs. Code Resources are free and allow you to output error descriptions.
    2. Deploying, cleaning and retrieving scripts - in many situations doing things through SFMC User Interface is not the best option. Deploying dozens of Data Extensions on multiple business units, cleaning hundreds of archival images or pulling assets JSON for version control. We can cover all those use cases with a script that can do the work in a fraction of the time needed for a manual approach. Then, some things cannot be done through UI at all (like targeting AutoSuppression List with Query Activity). Code Resource again will allow you to write, test and run such solutions. For free.
    3. Creating custom mini backends - that use case deserves a separate section ;)

    Code Resource Backends

    Code Resources can do so much more than just serve some content. Thanks to the Salesforce Marketing Cloud programmatic languages, they can become a dedicated backend for various solutions.

    The most popular use case for SFMC's Web Studio is a Cloud Page with a form (for leads, data capture, preference management or whitepaper download). As far as creating the form is a relatively simple task with the modern HTML, the complex part is capturing the submitted data and saving it into the Data Extension.

    Easy Form Backend with Cloud Page

    The most basic solution utilised two Cloud Pages. One contains the form, while the other contains the data capture logic and displays the thank you page. This approach is straightforward, as you can create a standard HTML form with action pointing to the second Cloud Page, and the modern web standards will do most of the work automatically. You are just left with the need to capture submitted data with SSJS Request.GetFormField() or AMPScript RequestParameter() and push it to a DataExtension.

    This approach, while easy to implement, has many drawbacks:

    • Submission redirects to another page - it takes time and creates suboptimal User Experience
    • You can create only limited (frontend JS-based) validation - if you need some checks against the SFMC data, that needs to happen after submission on the second Cloud Page. And if the validation fails, the user will be redirected back to the form page (in many cases, losing the data submitted in the form).
    • As each Cloud Page load costs a SuperMessage, this solution will require 2 in the best scenario - and more if there is a validation fail on the thank you page
    • If you want to make your form dynamic, you need to have all required data in the front end (showing your business logic)
    • You will have limited antispam capabilities (only basic honeypots and validations)

    The second popular pattern is using a single Cloud Page and changing displayed content depending on the request type thanks to SSJS Request.Method() (GET outputs form view and POST shows thank you page). Unfortunately, all drawbacks (including the cost) are the same as each Cloud Page load (whether it is the same or different) costs 1 SuperMessage.

    Good Form Backend with Code Resource

    Code Resources come to save the day (or at least your forms and license limits). Instead of hosting your data processing code on the second Cloud Page - put it on the JSON Code Resource and generate responses. On the form page, add AJAX calls to the Code Resource for all required interactions:

    JavaScript helper functions on the form Cloud Page
    /**
    * @function request
    * @description AJAX handler for POST calls to Code Resource Backend
    * @param {Object} payload - request payload with at least action key
    */
    function request(payload) {
    return new Promise(function(resolve, reject) {
    const xhr = new XMLHttpRequest();
    xhr.timeout = 30 * 1000;
    xhr.open('POST', codeResourceBackendURL, true);
    xhr.setRequestHeader('Content-type', 'application/json');
    xhr.onload = () => {
    if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 400)) {
    resolve(JSON.parse(xhr.response))
    } else {
    reject(xhr.status)
    }
    }
    xhr.onerror = () => {
    if (debugging) console.log('Connection Error')
    }
    xhr.ontimeout = () => {
    if (debugging) console.log('Request Timed Out')
    };
    xhr.send(JSON.stringify(payload));
    })
    }

    /**
    * @function pushData
    * @description UI handler for POST calls to Code Resource Backend
    * @param {Object} payload - prequest payload with at least action key
    */
    async function pushData(payload) {
    if (debugging) debugValue('Processing', payload);

    /* Make the request with the optional spinner overlay during load time */
    overlaySectionSpinner.classList.add('overlay__section-show');
    let response = await request(payload);
    overlaySectionSpinner.classList.remove('overlay__section-show');

    if (debugging) debugValue(`${payload.action} Response`, response);

    return response
    }

    With that code you can trigger calls in an easy and readable manner:

    Example of pushing data to backend
    pushData({
    action: 'createLead',
    payload: formData,
    sourceName: '<ctrl:var name=sourceName />'
    }).then(response => {
    /* Display appropriate feedback overlay based on the response */
    if (response.Status === 'OK') {
    overlaySectionSuccess.classList.add('overlay__section-show');
    } else {
    overlaySectionError.classList.add('overlay__section-show');
    };
    });

    Finally, that data needs to be captured, processed and responded on the Code Resource:

    Example processing structure on the Code Resource
    <script runat="server">
    /* Get the Form Submission Data from JSON POST */
    var postedData = Platform.Request.GetPostData();

    /* Parse Stringified JSON back to Object */
    var parsedData = Platform.Function.ParseJSON(postedData);
    if (debugging) debugValue('parsedData', parsedData);

    /* Capture data from POST body */
    var action = parsedData.action;
    var payload = parsedData.payload;

    switch (action) {
    case 'validateEmail':
    /* Your Validation code */
    result = { Action: 'validateEmail', Status: isEmailValdiated }
    break;
    case 'createLead':
    /* Your Lead processing code */
    result = { Action: 'createLead', Status: isLeadCreated }
    break;
    };

    stringifiedResult = Stringify(result);
    </script>
    <ctrl:var name=stringifiedResult />

    With this approach, any interaction (like form submission) is inserted into an object along with optional metadata, pushed through AJAX asynchronously, loaded in the Code Resource and directed to the appropriate processing unit within a switch block. Once SFMC completes the processing, the response is saved into an object and outputted as a JSON. Then it comes back from Code Resource through AJAX to the frontend with the form.

    Whoa, that's a lot. So why choose all of this instead of the easy solution?

    Let's start with the obvious drawback: it's more complex and harder to implement.

    There is, however, a prize for all that work:

    • It's using asynchronous AJAX calls, so the user never leaves your form - better User Experience.
    • It separates your front end and backend - you can leverage a single Code Resource for many different forms.
    • It enables the full power of the backend - you can build dynamic form, full-blown validation, antispam and more, as everything can just make a hidden call in the back of your experience.
    • It minimises cost - Code Resources are free, so no matter how many AJAX calls you make, there will be just 1 Supermessage cost for the initial load of the Form Cloud Page.
    • Once you complete the complex implementation, it becomes portable and can be easily copy-pasted to all your forms with minimal changes.
    • You can create a Code Resource on a different Business Unit than the Form Cloud Page allowing for the data being added in a different context (for example, centralised parent BU backend managing all child BU specific front ends).

    And then there is more! Code Resource is available not only for Cloud Pages - you can use precisely the same approach for any form hosted on your CMS or even within internal systems. As long as your front end can make an AJAX call, you can target your Code Resource and use Marketing Cloud power. Nifty solution for providing Triggered Sends for 3rd party forms without the need to implement SFMC API on external services.

    More ideas

    Using Code Resource as a form backend is a practical and frequent use case, but it is not the only one. It's worth considering whenever you need a more complex interaction with the Marketing Cloud features or data model.

    Custom Preference Center backend, personalisation builder for external websites, lookup tool for internal sales or support tools, trigger for communication pushes. Sure, we can build many of those approaches with the official API. Still, leveraging Code Resources might allow you to create a wrapper that will wrangle the data before outputting it to an external system.

    Code Resource Security

    With great power comes great responsibility. Security should be a top priority whenever dealing with Code Resources, as after publishing, they are available for everyone with the link. There are a few ways to protect your data:

    Security through obscurity

    The most obvious form of security is the obscurity of the solution. While standard static Code Resources are fully transparent, any programmatic part written in SSJS/AMPScript won't be accessible from outside the Marketing Cloud.

    And you can leverage that fact to your advantage by using SSJS Request.Method() to control output depending on the request type. For example, if you are creating a web form backend, you will only need to output something for POST calls, so you can catch GET method calls and output an empty page.

    Another layer you can apply is looking for specific elements within the payload. In the examples above, I used the action key in the frontend payload and built a switch block around it on the Code Resource. Thanks to it, you not only need to know the correct action value, but even then, you will only see its specific response.

    This level of protection might be acceptable for low-risk solutions (for example, dynamic CSS/JS or publicly available data structured for processing), but you should consider additional security for anything more critical.

    Allowlisting

    Another option available in the security arsenal are three types of allowlists:

    1. Referer Allowlist allows you to limit which pages can interact with the Code Resource by using either SSJS Platform.Request.ReferrerURL or AMPScript HTTPRequestHeader('Referer') to check the URL.
    2. IP Allowlist enables simillar feature, but checks IP address instead of URL with the help of SSJS Platform.Request.ClientIP() or AMPScript HTTPRequestHeader('X-Forwarded-For').
    3. Cookie Allowlist let's you validate cookies created on previous step with SSJS Platform.Request.GetCookieValue('CookieName').

    DE Lookup

    If the request comes from Marketing Cloud controlled resource (Cloud Page, Email, another Code Resource), you can also leverage Data Extension for even more strict security. Insert some data into the Data Extension in the first step of the process and validate it with Lookup against the payload content within the Code Resource.

    SSO

    Finally, if the Code Resource is part of your internal solution created only for Marketing Cloud users, you may leverage full-blown SSO to make it as secure as the whole platform. Read more on that approach in the Cloud Page Apps article.

    Examples

    With the flexibility of Code Resources, the sky is the limit for compelling use cases. Here, I want to share a few of my favourite ones to show you what can be done with this fantastic tool:

    1. Protect your Cloud Page Forms from spambots with Google reCaptcha v2 and v3 by Ivan Razine.
    2. Run SSJS within a Journey Activity by Sascha Huwald.
    3. Create a custom Chrome search engine that can find and directly open SFMC Data Extensions right from your URL bar by Michał Rzepka.
    4. Create Data Extension Search Engine in your Slack by Cam Robert.
    5. Build Cloud Page Apps to make your and your team lives easier.

    Know other inspiring Code Resource use cases? Let me know!

    Learn more

    Looking for more? Check out follow up materials for added context and deeper dive:

    1. Webinar recording on Architecting Web Solutions in SFMC.
    2. Webinar recording on Cloud Page Apps.
    - - +

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    +

    What are the Code Resources?

    +

    Code Resources in Salesforce Marketing Cloud are a solution for hosting JavaScript, CSS, JSON, RSS, Text and XML files within your account.

    +

    They were part of the legacy Classic CloudPages. However, their features and usefulness allowed them to survive sunsetting and thrive in the Web Studio.

    +

    Why use Code Resources when we have new CloudPages in Web Studio and Code Content Blocks in Content Builder? Unique set of features makes Code Resources irreplaceable:

    +
      +
    • Unlike Content Blocks, Code Resources have their own URL. It means that they are not just a building block but can work alone as a web asset. It also means that they can be linked and API called as any other website.
    • +
    • Unlike Cloud Pages, Code Resources have no HTML structures appended automatically by Marketing Cloud. It allows you to have complete control over what is returned by the Code Resource.
    • +
    • Unlike externally hosted files, you can leverage SFMC programmatic solutions - SSJS and AMPScript - to provide a backend logic to your Code Resources.
    • +
    • Finally, unlike Cloud Pages, there is no cost associated with loading a Code Resource.
    • +
    +

    That combination makes Code Resources perfect for multiple use cases - from basic to complex ones. Let's see some examples.

    +

    Code Resource Use Cases

    +

    Code Resource Basics

    +

    The most obvious use case is hosting shared CSS and JavaScript, just as you would on a CMS. It works great - you can paste your stylesheet or scripts and import it the standard way to your Cloud Pages benefitting from storing all assets on the same server:

    +
    JS & CSS imports from Code Resources - the URLs will follow your Marketing Cloud configuration
    <link rel="stylesheet" type="text/css" href="https://code-resource.sfmc.com/my-css" />
    <script src="https://code-resource.sfmc.com/my-js"></script>
    +

    Similarly, you can store complex data structures in JSON or XML files to leverage them later with SSJS or AMPScript/GTL. It can be a better solution for deep immutable structures than Data Extensions.

    +

    As practical as it is, this approach does not showcase the true strength of the Code Resources, so let's check something more interesting.

    +

    Code Resource Fun Things

    +

    The real power comes with using Salesforce Marketing Cloud programmatic languages - AMPScript and SSJS. Those two allow you to execute logic on the backend and impact the front-facing outcome on the Code Resource. It enables some powerful use cases.

    +

    Dynamic Code Resources

    +

    For example, you cannot host fonts in Marketing Cloud. But, you can encode them to base64 and, in that format, add them to your CSS Code Resource.

    +
    Web Font in CSS Code Resource
    %%[ SET @SalesforceSansRegular = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..." ]%%
    @font-face {
    font-family: "Salesforce Sans";
    src: url(data:font/ttf;base64,%%=v(@SalesforceSansRegular)=%%) format('truetype');
    font-weight: 400;
    font-display: swap;
    }
    +

    What if you need a different font depending on the market to cover various alphabets? Adding all of them to your CSS is not a good idea from the performance point of view. However, you can leverage the power of SFMC programmatic languages to load only the required font. How? By requesting the specific font using a query parameter:

    +
    CSS Import with query parameter on the frontend
    <link rel="stylesheet" type="text/css" href="https://coderesource.sfmc.com/my-css?font=salesforce-sans" />
    +
    Dynamic Stylesheet on the backend
    %%[
    SET @FontSelected = RequestParameter("font")
    IF @FontSelected == "salesforce-sans" THEN
    SET @FontName = "Salesforce Sans"
    SET @FontInBase64 = "AAEAAAASAQAAABAAgR0RFRgQOBQMAAN38AAAAKEdQT1N..."
    ELSE
    SET @FontName = "Different Font"
    SET @FontInBase64 = "AAAEEMDJJEkdEDKEJ849DJEHD33DJslsAAAA3EKFEK03..."
    ENDIF
    ]%%
    @font-face {
    font-family: "%%=v(@FontName)=%%";
    src: url(data:font/ttf;base64,%%=v(@FontInBase64)=%%) format('truetype');
    font-weight: 400;
    font-display: swap;
    }
    +

    Personalised Code Resources

    +

    Making your CSS or JS dynamic is just the beginning. Code Resources lets you leverage the Marketing Cloud Data Model. With SSJS and AMPScript, you can make Lookups and use other functions to adapt the outcome to a specific subscriber.

    +

    It is handy when you want to hide the business logic from the competition. For example, you might have a script for a web form that calculates rates based on loyalty status, purchases and LTV. You don't have to share your logic in an accessible JavaScript - you can Lookup required data for each subscriber with SSJS and calculate everything on the server side - outputting only the final multipliers to your JS Code Resource.

    +

    You can even perform API calls with SSJS or AMPScript to external systems to securely take advantage of their data. That can be especially useful when working with JSON Code Resources that can hold whole data structures used for the presentation layer on the Cloud Page.

    +

    Generated Code Resources

    +

    JSON Code Resources are where the real magic happens. They pair beautifully with SSJS and allow us to generate whole outputs from scratch with a nifty combination of SSJS object, Stringify() function and <ctrl:var name=string /> personalisation string. Yeah, you can have no line of JSON in your JSON Code Resource and still use it to its fullest potential. Let's dive into details.

    +
    Make a JSON from generated data
    <script runat="server">
    (...)
    var stringifiedResult = Stringify({ 'created': createdAssets, 'deleted': deletedAssets });
    </script>
    <ctrl:var name=stringifiedResult />
    +

    As you can see above, there is no line of JSON, but the Code Resource will output a proper JSON. How?

    +

    Once Marketing Cloud executes SSJS and AMPScript on the backend, it removes that code from the output. However, you can push some data to the frontend with a personalisation string. If that data is an SSJS object, you can convert it to proper JSON with Stringify().

    +

    This trick enables many different use cases that make Code Resources shine:

    +
      +
    1. AMPScript and SSJS debugging - there are many places where you might want to use SFMC programmatic languages. Most of them either doesn't allow for easy debugging or drive SuperMessages costs. Code Resources are free and allow you to output error descriptions.
    2. +
    3. Deploying, cleaning and retrieving scripts - in many situations doing things through SFMC User Interface is not the best option. Deploying dozens of Data Extensions on multiple business units, cleaning hundreds of archival images or pulling assets JSON for version control. We can cover all those use cases with a script that can do the work in a fraction of the time needed for a manual approach. Then, some things cannot be done through UI at all (like targeting AutoSuppression List with Query Activity). Code Resource again will allow you to write, test and run such solutions. For free.
    4. +
    5. Creating custom mini backends - that use case deserves a separate section ;)
    6. +
    +

    Code Resource Backends

    +

    Code Resources can do so much more than just serve some content. Thanks to the Salesforce Marketing Cloud programmatic languages, they can become a dedicated backend for various solutions.

    +

    The most popular use case for SFMC's Web Studio is a Cloud Page with a form (for leads, data capture, preference management or whitepaper download). As far as creating the form is a relatively simple task with the modern HTML, the complex part is capturing the submitted data and saving it into the Data Extension.

    +

    Easy Form Backend with Cloud Page

    +

    The most basic solution utilised two Cloud Pages. One contains the form, while the other contains the data capture logic and displays the thank you page. This approach is straightforward, as you can create a standard HTML form with action pointing to the second Cloud Page, and the modern web standards will do most of the work automatically. You are just left with the need to capture submitted data with SSJS Request.GetFormField() or AMPScript RequestParameter() and push it to a DataExtension.

    +

    This approach, while easy to implement, has many drawbacks:

    +
      +
    • Submission redirects to another page - it takes time and creates suboptimal User Experience
    • +
    • You can create only limited (frontend JS-based) validation - if you need some checks against the SFMC data, that needs to happen after submission on the second Cloud Page. And if the validation fails, the user will be redirected back to the form page (in many cases, losing the data submitted in the form).
    • +
    • As each Cloud Page load costs a SuperMessage, this solution will require 2 in the best scenario - and more if there is a validation fail on the thank you page
    • +
    • If you want to make your form dynamic, you need to have all required data in the front end (showing your business logic)
    • +
    • You will have limited antispam capabilities (only basic honeypots and validations)
    • +
    +

    The second popular pattern is using a single Cloud Page and changing displayed content depending on the request type thanks to SSJS Request.Method() (GET outputs form view and POST shows thank you page). Unfortunately, all drawbacks (including the cost) are the same as each Cloud Page load (whether it is the same or different) costs 1 SuperMessage.

    +

    Good Form Backend with Code Resource

    +

    Code Resources come to save the day (or at least your forms and license limits). Instead of hosting your data processing code on the second Cloud Page - put it on the JSON Code Resource and generate responses. On the form page, add AJAX calls to the Code Resource for all required interactions:

    +
    JavaScript helper functions on the form Cloud Page
    /**
    * @function request
    * @description AJAX handler for POST calls to Code Resource Backend
    * @param {Object} payload - request payload with at least action key
    */
    function request(payload) {
    return new Promise(function(resolve, reject) {
    const xhr = new XMLHttpRequest();
    xhr.timeout = 30 * 1000;
    xhr.open('POST', codeResourceBackendURL, true);
    xhr.setRequestHeader('Content-type', 'application/json');
    xhr.onload = () => {
    if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 400)) {
    resolve(JSON.parse(xhr.response))
    } else {
    reject(xhr.status)
    }
    }
    xhr.onerror = () => {
    if (debugging) console.log('Connection Error')
    }
    xhr.ontimeout = () => {
    if (debugging) console.log('Request Timed Out')
    };
    xhr.send(JSON.stringify(payload));
    })
    }

    /**
    * @function pushData
    * @description UI handler for POST calls to Code Resource Backend
    * @param {Object} payload - prequest payload with at least action key
    */
    async function pushData(payload) {
    if (debugging) debugValue('Processing', payload);

    /* Make the request with the optional spinner overlay during load time */
    overlaySectionSpinner.classList.add('overlay__section-show');
    let response = await request(payload);
    overlaySectionSpinner.classList.remove('overlay__section-show');

    if (debugging) debugValue(`${payload.action} Response`, response);

    return response
    }
    +

    With that code you can trigger calls in an easy and readable manner:

    +
    Example of pushing data to backend
    pushData({
    action: 'createLead',
    payload: formData,
    sourceName: '<ctrl:var name=sourceName />'
    }).then(response => {
    /* Display appropriate feedback overlay based on the response */
    if (response.Status === 'OK') {
    overlaySectionSuccess.classList.add('overlay__section-show');
    } else {
    overlaySectionError.classList.add('overlay__section-show');
    };
    });
    +

    Finally, that data needs to be captured, processed and responded on the Code Resource:

    +
    Example processing structure on the Code Resource
    <script runat="server">
    /* Get the Form Submission Data from JSON POST */
    var postedData = Platform.Request.GetPostData();

    /* Parse Stringified JSON back to Object */
    var parsedData = Platform.Function.ParseJSON(postedData);
    if (debugging) debugValue('parsedData', parsedData);

    /* Capture data from POST body */
    var action = parsedData.action;
    var payload = parsedData.payload;

    switch (action) {
    case 'validateEmail':
    /* Your Validation code */
    result = { Action: 'validateEmail', Status: isEmailValdiated }
    break;
    case 'createLead':
    /* Your Lead processing code */
    result = { Action: 'createLead', Status: isLeadCreated }
    break;
    };

    stringifiedResult = Stringify(result);
    </script>
    <ctrl:var name=stringifiedResult />
    +

    With this approach, any interaction (like form submission) is inserted into an object along with optional metadata, pushed through AJAX asynchronously, loaded in the Code Resource and directed to the appropriate processing unit within a switch block. Once SFMC completes the processing, the response is saved into an object and outputted as a JSON. Then it comes back from Code Resource through AJAX to the frontend with the form.

    +

    Whoa, that's a lot. So why choose all of this instead of the easy solution?

    +

    Let's start with the obvious drawback: it's more complex and harder to implement.

    +

    There is, however, a prize for all that work:

    +
      +
    • It's using asynchronous AJAX calls, so the user never leaves your form - better User Experience.
    • +
    • It separates your front end and backend - you can leverage a single Code Resource for many different forms.
    • +
    • It enables the full power of the backend - you can build dynamic form, full-blown validation, antispam and more, as everything can just make a hidden call in the back of your experience.
    • +
    • It minimises cost - Code Resources are free, so no matter how many AJAX calls you make, there will be just 1 Supermessage cost for the initial load of the Form Cloud Page.
    • +
    • Once you complete the complex implementation, it becomes portable and can be easily copy-pasted to all your forms with minimal changes.
    • +
    • You can create a Code Resource on a different Business Unit than the Form Cloud Page allowing for the data being added in a different context (for example, centralised parent BU backend managing all child BU specific front ends).
    • +
    +

    And then there is more! Code Resource is available not only for Cloud Pages - you can use precisely the same approach for any form hosted on your CMS or even within internal systems. As long as your front end can make an AJAX call, you can target your Code Resource and use Marketing Cloud power. Nifty solution for providing Triggered Sends for 3rd party forms without the need to implement SFMC API on external services.

    +

    More ideas

    +

    Using Code Resource as a form backend is a practical and frequent use case, but it is not the only one. It's worth considering whenever you need a more complex interaction with the Marketing Cloud features or data model.

    +

    Custom Preference Center backend, personalisation builder for external websites, lookup tool for internal sales or support tools, trigger for communication pushes. Sure, we can build many of those approaches with the official API. Still, leveraging Code Resources might allow you to create a wrapper that will wrangle the data before outputting it to an external system.

    +

    Code Resource Security

    +

    With great power comes great responsibility. Security should be a top priority whenever dealing with Code Resources, as after publishing, they are available for everyone with the link. There are a few ways to protect your data:

    +

    Security through obscurity

    +

    The most obvious form of security is the obscurity of the solution. While standard static Code Resources are fully transparent, any programmatic part written in SSJS/AMPScript won't be accessible from outside the Marketing Cloud.

    +

    And you can leverage that fact to your advantage by using SSJS Request.Method() to control output depending on the request type. For example, if you are creating a web form backend, you will only need to output something for POST calls, so you can catch GET method calls and output an empty page.

    +

    Another layer you can apply is looking for specific elements within the payload. In the examples above, I used the action key in the frontend payload and built a switch block around it on the Code Resource. Thanks to it, you not only need to know the correct action value, but even then, you will only see its specific response.

    +

    This level of protection might be acceptable for low-risk solutions (for example, dynamic CSS/JS or publicly available data structured for processing), but you should consider additional security for anything more critical.

    +

    Allowlisting

    +

    Another option available in the security arsenal are three types of allowlists:

    +
      +
    1. Referer Allowlist allows you to limit which pages can interact with the Code Resource by using either SSJS Platform.Request.ReferrerURL or AMPScript HTTPRequestHeader('Referer') to check the URL.
    2. +
    3. IP Allowlist enables simillar feature, but checks IP address instead of URL with the help of SSJS Platform.Request.ClientIP() or AMPScript HTTPRequestHeader('X-Forwarded-For').
    4. +
    5. Cookie Allowlist let's you validate cookies created on previous step with SSJS Platform.Request.GetCookieValue('CookieName').
    6. +
    +

    DE Lookup

    +

    If the request comes from Marketing Cloud controlled resource (Cloud Page, Email, another Code Resource), you can also leverage Data Extension for even more strict security. Insert some data into the Data Extension in the first step of the process and validate it with Lookup against the payload content within the Code Resource.

    +

    SSO

    +

    Finally, if the Code Resource is part of your internal solution created only for Marketing Cloud users, you may leverage full-blown SSO to make it as secure as the whole platform. Read more on that approach in the Cloud Page Apps article.

    +

    Examples

    +

    With the flexibility of Code Resources, the sky is the limit for compelling use cases. Here, I want to share a few of my favourite ones to show you what can be done with this fantastic tool:

    +
      +
    1. Protect your Cloud Page Forms from spambots with Google reCaptcha v2 and v3 by Ivan Razine.
    2. +
    3. Run SSJS within a Journey Activity by Sascha Huwald.
    4. +
    5. Create a custom Chrome search engine that can find and directly open SFMC Data Extensions right from your URL bar by Michał Rzepka.
    6. +
    7. Create Data Extension Search Engine in your Slack by Cam Robert.
    8. +
    9. Build Cloud Page Apps to make your and your team lives easier.
    10. +
    +

    Know other inspiring Code Resource use cases? Let me know!

    +

    Learn more

    +

    Looking for more? Check out follow up materials for added context and deeper dive:

    +
      +
    1. Webinar recording on Architecting Web Solutions in SFMC.
    2. +
    3. Webinar recording on Cloud Page Apps.
    4. +
    \ No newline at end of file diff --git a/docs/config/sfmc-contact-deletion/index.html b/docs/config/sfmc-contact-deletion/index.html index c247a2eb9..07386cc4b 100644 --- a/docs/config/sfmc-contact-deletion/index.html +++ b/docs/config/sfmc-contact-deletion/index.html @@ -1,23 +1,248 @@ - + - -SFMC Contact Deletion | Mateusz Dąbrowski + +SFMC Contact Deletion | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    Outline

    1. Learn everything about SFMC Contact Deletion Process
    2. Check out sample segments just waiting to be deleted
    3. Create privacy-focused Contact Deletion Archive

    Contact Deletion in SFMC

    Salesforce Marketing Cloud makes Contact Deletion not only easy but also powerful. The out-of-the-box solution does most of the heavy lifting, leaving us the decision of who and when should be deleted from our platform.

    But before we start the cleanup, let's see why we should do it in the first place. It's not easy to get new opted-in Contacts, so we shouldn't take removal lightly. However, there are multiple good reasons to do that:

    • Compliance: Many legal systems (like European GDPR) allow subscribers to request contact deletion.
    • Licensing: A marketing Cloud licence allows you to store a limited number of Contacts.
    • Performance: The more Contacts you have, the slower will be your Journeys and Automations.
    • Cost: Sending to dead Contacts means burning SuperMessages without any value in return.
    • Deliverability: Sending to dead or bad quality Contacts hurts your email deliverability and inbox placement.
    • Analytics: Bad quality data negatively impacts the quality of your analytics, making it harder to make the right decisions.

    Once we know why we should delete, it's time to see what exactly is the built-in SFMC Contact Deletion process doing behind the scenes:

    1. It manages supression period for contacts requested for deletion:
      • Suppression in Contact Builder hides the contacts and blocks the possibility to create a new one with the same Contact Key.
      • Suppression in Email Studio hides the contacts and blocks them from receiving Emails or interacting with Triggered Sends.
      • Suppression in Journey Builder blocks the contacts from entering Journeys and Automations.
      • Suppression in Mobile Studio (MobileConnect, MobilePush, GroupConnect) hides the contacts and blocks them from receiving any communication and doing any interactions (exception - block requests are still processed).
      • Suppression in Einstein hides the contacts and blocks both Recommendations and Analytics.
    2. After the suppression period, it deletes contacts from:
      • Sendable Data Extensions
      • Populations
      • Lists
      • Groups
      • Journeys
      • Automations
      • Einstein

    As you can see, a lot out-of-the-box. But what is the purpose of the suppression period when we just want to delete some contacts?

    Contact Deletion is irreversible. Once we remove the contact, it is deleted for good, and there is no option to bring it back. Sure, you can add it again, but it won't have any past data. So, if you are not confident in your Contact Deletion process, you might configure suppression period to have some time for reflection. That's why it is there by default (currently at two days). If you find a mistake during that period, put a Support ticket as soon as possible with high priority.

    There is also a second reason for the suppression period. Depending on the parallel processes run in your Marketing Cloud, the number of contacts requested for deletion, as well as the volume of data in the system, SFMC Contact Deletion can be a very time-consuming process. Suppression makes sure that even if it takes longer than you would like, the Contact will not get any unwanted communication.

    You Should Know

    Few places are not targeted by the out-of-the-box Marketing Cloud Contact Deletion process:

    • Non-Sendable Data Extensions » Can be removed with either retention or heavy custom scripting
    • Synchronized Data Extensions » Can be removed in the source system
    • Triggered Send Lists » Can be removed using API method

    It also ignores any data that is not connected to the deleted contact by Contact Key / Subscriber Key / Contact ID, so be sure to have a proper deduplication process in place for compliance.

    Enable Contact Deletion

    To use the Contact Deletion Process in Salesforce Marketing Cloud, you must enable it first. To do this, you need to have a Marketing Cloud Administrator role.

    1. Go to parent Business Unit.
    2. Go to Audience Builder » Contact Builder.
    3. Click Contacts Configuration in the top menu.
    4. Enable the process in the Contact Delete section.
    5. Configure suppression period by clicking Manage Settings (default is two days).
    6. Save.

    If you want the Contact Deletion process to trigger automatically after starting it, set the suppression period to 0 days. It will be added to the processing queue instantly after the request.

    You Should Know

    For the most popular SFMC tenant type - Enterprise 2.0 - the deletion must happen at the parent level and automatically apply across all Business Units.

    If you have a different tenant type, check the official documentation.

    Manual Contact Deletion

    Once the Contact Deletion is enabled and configured, you can start cleaning. The easiest way is to leverage manual deletion options available in the Contact Builder.

    You Should Know

    Manual Contact Deletion in Email Studio will remove the contact only from Email Studio. To trigger the Contact Deletion Process, you must leverage Contact Builder or API method.

    Delete contacts from All Contacts

    This method is best if you have just a few contacts you want to delete. It's simple, it's fast, it's constrained.

    1. Go to parent Business Unit.
    2. Go to Audience Builder » Contact Builder.
    3. Click All Contacts in the top menu.
    4. Find a contact(s) you want to delete and click checkboxes next to them.
    5. Click the trash icon and select Delete selected contacts.

    Using this method, you can delete multiple contacts, but only from a single page of results. If you navigate to the next page of results, previously checked contacts will no longer be part of your selection.

    If you want to remove more contacts, leverage the Data Extension method shared below.

    Delete all contacts from List or Data Extension

    This method will be better if you want to remove a significant number of contacts once but don't want the hassle of the most potent API method.

    1. Go to parent Business Unit.
    2. Go to Audience Builder » Contact Builder.
    3. Click All Contacts in the top menu.
    4. Without selecting any contact, click the trash icon.
    5. Click Delete contacts from list / data extension depending on your needs.
    6. Select the Sendable Data Extension used for the Contact Deletion process.
    7. Decide whether the Data Extension itself should stay in the system after SFMC deletes the contacts.
    8. Click Delete Contacts.
    9. Review and confirm by clicking Delete.
    You Should Know

    This method allows you to delete up to one million contacts per operation. If you want to remove more than that, you will have to run the above steps multiple times or leverage contact deletion automation.

    SFMC API Contact Deletion

    Previous methods are nice, but they require manual triggering in the Salesforce Marketing cloud each time you run the Contact Deletion Process. There are, however, many use cases where you might want to trigger it automatically - for example, from a different system responsible for managing privacy.

    Thankfully, SFMC offers a solution for that as well with REST API. To implement it:

    1. Create authentication endpoint with correct permissions with Installed Package
      1. Go to Setup in Parent Business Unit.
      2. Within the Platform Tools section, roll out Apps and click Installed Packages.
      3. Click New in the top right.
      4. Provide a meaningful name and description for your Installed Package.
      5. Add Component - API Integration.
      6. Select the Server-to-Server integration type.
      7. Select Read and Write for List and Subscribers within the Contacts section. Write is needed for Deletion. Read - for checking the deletion status.
      8. Click Save.
    2. Copy Client Id, Client Secret and Client Base (the unique string in either of the API URIs that is between https:// and API type).
    3. Leverage the contact deletion endpoint in the solution of your choice: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete.

    This single endpoint will allow you to trigger the Contact Deletion process in three ways by adding a query string at the end. All scenarios will use the same Method, Content-Type and Authorization, but the endpoint and payload will be different:

    • Method: POST
    • Content-Type: application/json
    • Authorization: Bearer TOKEN

    Contact Deletion by Contact ID

    Endpoint: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=ids

    Delete by Contact ID Payload
    {
    "values": [1111111, 22222222],
    "deleteOperationType": "ContactAndAttributes"
    }

    This endpoint's values is an array of Contact IDs (integers).

    Contact Deletion by Contact Key

    Endpoint: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=keys

    Delete by Contact Key Payload
    {
    "values": ["A1B2C3D4", "E5F6G7H8"],
    "deleteOperationType": "ContactAndAttributes"
    }

    This endpoint's values is an array of Contact Keys (strings).

    Contact Deletion using Data Extension

    Endpoint: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=listReference

    Delete using Data Extension Payload
    {
    "deleteOperationType": "ContactAndAttributes",
    "targetList": {
    "listType": { "listTypeID": 3 },
    "listKey": "contactDeletionDEKey"
    },
    "deleteListWhenCompleted": false,
    "deleteListContentsWhenCompleted": true
    }

    In this endpoint, you have control over three values:

    • listKey: the external key of the Data Extension you use for the Contact Deletion process.
    • deleteListWhenCompleted: when true, it will delete the Data Extension during the Contact Deletion process.
    • deleteListContentsWhenCompleted: when true it will delete records from the Data Extensions during Contact Deletion process.

    Contact Deletion with Automation Studio

    With the API Contact Deletion we are not limited to external triggers. We can also leverage AMPScript or SSJS to trigger it directly from Marketing Cloud.

    The most popular use case is a Contact Deletion Automation scheduled to clean up the database regularly. It's a great idea to keep your SFMC instance clean without much of a hassle.

    My recommended approach is to create a dedicated Pending Contact Deletion Shared Data Extension that will store records to be deleted along with some context and remove its content nightly with the Script Activity.

    Contact Deletion Pending Data Extension

    If you want to capture contacts-to-be-deleted from multiple Business Units, make it Shared Data Extension.

    NameDataTypeDefault ValueLengthNullable
    🔑 SubscriberKeyText18No
    DeletionReasonText50Yes
    DeletionDateDateCurrent dateYes

    External Key: contact-deletion-pending-de -Sendable: true

    You don't need anything but the Subscriber Key for essential contact deletion. However, I prefer to add a bit more context that I can leverage in the Contact Deletion archive described later in this article.

    Contact Deletion Script Activity

    Below you can find ready-to-use SSJS snippet for Script Activity. Change clientSecret, clientID and clientBase variables to data you saved during Installed Package configuration. If needed, change also the contactDeletionDEKey, errorDE and automationName variables to reflect your configuration.

    To learn more about errorDE check my debugging guide. You will find there also details about helper functions from the script.

    Contact Deletion Script Activity SSJS Snippet
    <script runat="server">
    Platform.Load('core', '1')

    /* -------------------------------------------------------------------------

    1. Global Variables
    1.1. Contact Deletion DE Key
    1.2. REST API Authorization
    1.3. Error Handling
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. Main Script
    3.1. REST API Authorization
    3.2. Contact Deletion Process

    -------------------------------------------------------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------------ 1.1 Contact Deletion DE Key -------------------------- */

    var contactDeletionDEKey = 'contact-deletion-pending-de';

    /* ------------------------ 1.2 REST API Authorization --------------------------- */

    var payload, endpoint, response;

    var clientSecret = 'clientSecretFromInstalledPackage';
    var clientID = 'clientIDFromInstalledPackage';
    var clientBase = 'clientBaseUrl'
    var contentType = 'application/json';
    var debugging = false;


    /* ------------------------ 1.3 Error Handling --------------------------- */

    var errorDE = 'error-log-de';
    var automationName = 'contact-deletion-process';


    /* ----------------------------------------------------------------------- */
    /* ------------------------- 2. HELPER FUNCTIONS ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* --------------------------- 2.1. Debugging ---------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* -------------------------- 2.2. Error handling ------------------------ */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to an error page.
    * @param {Object} error - The caught error object. It can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores a short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    Platform.Function.InsertData(errorDE, ['ID', 'ErrorSource', 'ErrorMessage', 'ErrorDescription'], [GUID(), automationName, error.message, error.description]);
    };
    };


    /* ----------------------------------------------------------------------- */
    /* --------------------------- 3. MAIN SCRIPT ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------- 3.1. REST API Authorization --------------------- */

    endpoint = 'https://' + clientBase + '.auth.marketingcloudapis.com/v2/token';
    payload = {
    client_id: clientID,
    client_secret: clientSecret,
    grant_type: 'client_credentials'
    };
    if (debugging) debugValue('Payload', payload);

    try {
    response = HTTP.Post(endpoint, contentType, Stringify(payload));
    } catch (error) {
    handleError(error);
    }
    var accessToken = Platform.Function.ParseJSON(response['Response'][0]).access_token;
    if (debugging) debugValue('AccessToken', accessToken);

    /* ------------------- 3.2. Contact Deletion Process --------------------- */

    endpoint = 'https://' + clientBase + '.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=listReference';
    payload = {
    deleteOperationType: 'ContactAndAttributes',
    targetList: {
    listType: { listTypeID: 3 },
    listKey: contactDeletionDEKey
    },
    deleteListWhenCompleted: false,
    deleteListContentsWhenCompleted: true
    };
    var headerNames = ['Authorization'];
    var headerValues = ['Bearer ' + accessToken];

    try {
    response = HTTP.Post(endpoint, contentType, Stringify(payload), headerNames, headerValues);
    if (debugging) debugValue('Response', response);
    } catch (error) {
    handleError(error);
    }
    </script>

    Monitor Contact Deletion Process

    There are three ways to monitor what is happening with your Contact Deletion requests (you should perform all three from the parent Business Unit):

    1. In Contact Builder, in the top menu, click All Contacts. Click the trash icon in the top right, and select View Pending Deletions.
    2. In Contact Builder, in the top menu, click Contact Analytics. You will see a full Contact Deletion Dashboard.
    3. Request details using Contact Deletion Details API.

    Which contacts should you delete?

    You should always align this question with the specific business needs of your company. However, there are some very popular segments that may inspire you.

    You can add them within the same Automation as the Contact Deletion Script Activity to ensure they are captured right before cleanup. You may also create separate Automations on your child Business Unit to capture BU-specific candidates for cleanup using data available only there.

    Remember to test those recommendations and queries (for example, using Query Studio) before implementing them in your Contact Deletion Process, as even a small mistake might lead to irreversible data loss.

    Contacts deleted in Salesforce CRM

    If you use Marketing Cloud Connect to integrate your Salesforce CRM with the Marketing Cloud, you should think about synchronizing deletions between those two systems. It does not happen automatically. By default, contacts deleted in SF CRM are removed from Synchronized Data Extensions and stay in other Marketing Cloud tables.

    You can, however, add this using Query Activity in Automation Studio. For the email channel, it's straightforward:

    Find subscribers deleted in SF CRM
    SELECT
    subscriber.SubscriberKey
    , 'Deleted in SF CRM' AS DeletionReason
    FROM _Subscribers AS subscriber
    LEFT JOIN Contact_Salesforce AS contact
    ON contact.Id = subscriber.SubscriberKey
    WHERE contact.Id IS NULL

    If you are also using other channels, you can include their System Data Views to the query.

    Leads and Users deleted or filtered in Salesforce CRM

    This method is also great for removing deleted or unused records from other objects counted against your All Contacts licence limits - Leads and Users. There are two caveats, however.

    First, to remove unused Leads and Users, you must first stop them from synchronizing via Marketing Cloud Connect. Otherwise, they will come back to SFMC at the next scheduled synchronization. The best way to do it is to create a boolean field on those objects (for example, ShouldSyncToSFMC) that would be true only for records you need in your system. Depending on your use case, it might be neither (so just set false as the default value), or it might be complicated (the calculated field will be your best friend). With such a boolean, you will be able to select it as a filter for your Marketing Cloud Connect object synchronization.

    Second is the problem of finding those records in the Marketing Cloud. The easy way is to create a copy of Synchronized Data Extensions before filtering them. However, this will not always be possible, and it won't capture Leads and Users that were removed in the past from CRM.

    If you have Mobile Studio in your SFMC licence, you have a nice workaround:

    1. Go to Contact Builder.
    2. Click All Contacts in the top menu.
    3. Select the Mobile List tab.
    4. Click Create Mobile List button in the top right.
    5. Leave MobileConnect as the channel and select Filtered List as a type. Click Ok.
    6. Select All Contacts and click Select.
    7. Remove prepopulated Mobile Number filter and on the left pane select System Data » Contact.
    8. Drag and drop Contact Key and configure it to is not null. Click Done.
    9. Click the Save as Filter button in the top right.
    10. Provide a sensible name (like "AllContactsList") and click Save.
    You Should Know

    All Contacts view shows many cool data fields, but unfortunately, most are no longer available after the export to the List.

    Mobile List fields are: SubscriberKey, CustomerKey, AudienceID, TrackingCode, AudienceCode, SegmentCode, SegmentName, Priority, SegmentID, SplitID.

    So in nearly every case you will have to take the Subscriber Key and enrich it with JOIN to other more interesting Data Extensions or System Data Views.

    It will create and populate the list with all your Contacts. Save its name - it will be helpful for the Query.

    If you want to remove all Leads and Users, you will need only this List:

    Find all Users and Leads
    SELECT SubscriberKey
    FROM AllContactsList
    WHERE
    SubscriberKey LIKE '005%'
    OR SubscriberKey LIKE '00Q%'
    You Should Know

    You might wonder what is happening within the WHERE filter above - this is magic that is possible thanks to Salesforce ID structure. The ID is not entirely random. Instead, it has a specific format.

    For our need here, the key is the three-character prefix that point to a specific Salesforce Object:

    • 001 = Account
    • 003 = Contact
    • 005 = User
    • 00Q = Lead

    For the complete list, check Daniel Ballinger's cheat sheet.

    If you want to remove only those Leads / Users that you no longer synchronize via filtered Marketing Cloud Connect, you will need to add a comparison similar to the Contacts use case.

    Find all Users and Leads that are no longer synchronized to SFMC
    SELECT contact.SubscriberKey
    FROM AllContactsList AS contact
    LEFT JOIN Leads_Salesforce AS lead
    ON contact.SubscriberKey = lead.ID
    LEFT JOIN Users_Salesforce AS user
    ON contact.SubscriberKey = user.ID
    WHERE
    (
    SubscriberKey LIKE '005%'
    AND user.ID IS NULL
    )
    OR
    (
    SubscriberKey LIKE '00Q%'
    AND lead.ID IS NULL
    )

    Contactless Contacts

    Another group ripe for deletion are Contacts that you cannot contact. Multiple subgroups fill that definition:

    1. Suppressed contacts
    2. Hard bounced contacts
    3. Contacts that do not have any channel information (like an email address or mobile phone)
    4. Bad quality contacts (test records, fake emails, contacts that failed Email Studio List Detective)
    5. Hidden Triggered Send Managed List Subscribers

    Before deletion, it might be worth saving some of this data for the future (especially suppressed contacts for compliance or hard bounced contacts for future deliverability).

    Zombie Contacts

    Apart from contactless contacts, there are always some zombies in each database. Contacts that you can contact - and you do - but they are not reacting in any way. No opens, no clicks, for months.

    I know it might be hard to delete opted-in contacts when obtaining new ones is hard work, but you need to finish this toxic relationship after some time. Zombie contacts skew your analytics, put unnecessary strain on your instance, degrade your IP Reputation and create costs without providing any value to your business in return. You will be far better without them.

    Align with your business the threshold for marking a contact as a zombie. It will be different from company to company, but my starting point recommendation is a contact that (1) Was sent at least six emails, (2) within at least three different months and (3) did not open or click any email.

    1. Makes sure that you tried enough times to make your opinion based on solid facts
    2. Makes sure that it's not a matter of out-of-office period, but a constant issue
    3. Makes sure that temporary problem is not leading to deletion of otherwise valuable contact

    Before making the final decision, I recommend checking a few versions of those rules against your database to see which variation gives you the best results without being too lax.


    Contact Deletion Archive

    Deleting contacts is super fun, but sometimes you might need to know whom you have deleted. Or be able to debug recurring deletions to fix a leak in your data pipeline. Contact Deletion Archive is the way to go - it allows you to keep details of your deletions in a privacy-first way.

    It is built with two additional elements on top of the standard Contact Deletion process described above.

    Contact Deletion Archive Data Extension

    It will store the information about past deletions allowing you to check multiple things securely:

    1. Subscriber Key of deleted contacts.
    2. Hashed Emails of the deleted contacts.
    3. Reason for the deletion.
    4. Date of first and last deletion (and, therefore, whether we deleted the SubscriberKey more than once).

    Important: Make sure you configure it as NOT sendable Data Extension. Otherwise, your Contact Deletion Process will remove data also from it.

    NameDataTypeDefault ValueLengthNullable
    🔑 SubscriberKeyText18No
    HashedEmailText254Yes
    DeletionReasonText50Yes
    FirstDeletionDateDateCurrent dateYes
    LastDeletionDateDateNo

    Contact Deletion Archive Query Activity

    We will need new Query Activity to fill that Archive Data Extension. One that moves the data from the Contact Deletion Pending Data Extension.

    It will leverage the HASHBYTES function to hash the Email Address. On the one hand, it will protect the privacy of the deleted contacts and make sure no one will use them for any send. On the other - it allows you to check the list of deleted contacts against known email by hashing it the same way.

    Archive your deletions on schedule
    SELECT
    pending.SubscriberKey
    , CONVERT(NVARCHAR(128), HASHBYTES('SHA2_256', sub.EmailAddress), 2) AS HashedEmail
    , pending.DeletionReason
    , pending.DeletionDate AS LastDeletionDate
    FROM [Contact Deletion Pending DE] AS pending
    INNER JOIN _Subscribers AS sub
    ON sub.SubscriberKey = pending.SubscriberKey

    This new Query Activity should be put in the Contact Deletion Automation between the Contact Deletion Query Activity that selects the contacts to-be-deleted and the Contact Deletion Script Activity that does the deed.

    - - +

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    +

    Outline

    +
      +
    1. Learn everything about SFMC Contact Deletion Process
    2. +
    3. Check out sample segments just waiting to be deleted
    4. +
    5. Create privacy-focused Contact Deletion Archive
    6. +
    +

    Contact Deletion in SFMC

    +

    Salesforce Marketing Cloud makes Contact Deletion not only easy but also powerful. The out-of-the-box solution does most of the heavy lifting, leaving us the decision of who and when should be deleted from our platform.

    +

    But before we start the cleanup, let's see why we should do it in the first place. It's not easy to get new opted-in Contacts, so we shouldn't take removal lightly. However, there are multiple good reasons to do that:

    +
      +
    • Compliance: Many legal systems (like European GDPR) allow subscribers to request contact deletion.
    • +
    • Licensing: A marketing Cloud licence allows you to store a limited number of Contacts.
    • +
    • Performance: The more Contacts you have, the slower will be your Journeys and Automations.
    • +
    • Cost: Sending to dead Contacts means burning SuperMessages without any value in return.
    • +
    • Deliverability: Sending to dead or bad quality Contacts hurts your email deliverability and inbox placement.
    • +
    • Analytics: Bad quality data negatively impacts the quality of your analytics, making it harder to make the right decisions.
    • +
    +

    Once we know why we should delete, it's time to see what exactly is the built-in SFMC Contact Deletion process doing behind the scenes:

    +
      +
    1. It manages supression period for contacts requested for deletion: +
        +
      • Suppression in Contact Builder hides the contacts and blocks the possibility to create a new one with the same Contact Key.
      • +
      • Suppression in Email Studio hides the contacts and blocks them from receiving Emails or interacting with Triggered Sends.
      • +
      • Suppression in Journey Builder blocks the contacts from entering Journeys and Automations.
      • +
      • Suppression in Mobile Studio (MobileConnect, MobilePush, GroupConnect) hides the contacts and blocks them from receiving any communication and doing any interactions (exception - block requests are still processed).
      • +
      • Suppression in Einstein hides the contacts and blocks both Recommendations and Analytics.
      • +
      +
    2. +
    3. After the suppression period, it deletes contacts from: +
        +
      • Sendable Data Extensions
      • +
      • Populations
      • +
      • Lists
      • +
      • Groups
      • +
      • Journeys
      • +
      • Automations
      • +
      • Einstein
      • +
      +
    4. +
    +

    As you can see, a lot out-of-the-box. But what is the purpose of the suppression period when we just want to delete some contacts?

    +

    Contact Deletion is irreversible. Once we remove the contact, it is deleted for good, and there is no option to bring it back. Sure, you can add it again, but it won't have any past data. So, if you are not confident in your Contact Deletion process, you might configure suppression period to have some time for reflection. That's why it is there by default (currently at two days). If you find a mistake during that period, put a Support ticket as soon as possible with high priority.

    +

    There is also a second reason for the suppression period. Depending on the parallel processes run in your Marketing Cloud, the number of contacts requested for deletion, as well as the volume of data in the system, SFMC Contact Deletion can be a very time-consuming process. Suppression makes sure that even if it takes longer than you would like, the Contact will not get any unwanted communication.

    +
    You Should Know

    Few places are not targeted by the out-of-the-box Marketing Cloud Contact Deletion process:

      +
    • Non-Sendable Data Extensions » Can be removed with either retention or heavy custom scripting
    • +
    • Synchronized Data Extensions » Can be removed in the source system
    • +
    • Triggered Send Lists » Can be removed using API method
    • +

    It also ignores any data that is not connected to the deleted contact by Contact Key / Subscriber Key / Contact ID, so be sure to have a proper deduplication process in place for compliance.

    +

    Enable Contact Deletion

    +

    To use the Contact Deletion Process in Salesforce Marketing Cloud, you must enable it first. To do this, you need to have a Marketing Cloud Administrator role.

    +
      +
    1. Go to parent Business Unit.
    2. +
    3. Go to Audience Builder » Contact Builder.
    4. +
    5. Click Contacts Configuration in the top menu.
    6. +
    7. Enable the process in the Contact Delete section.
    8. +
    9. Configure suppression period by clicking Manage Settings (default is two days).
    10. +
    11. Save.
    12. +
    +

    If you want the Contact Deletion process to trigger automatically after starting it, set the suppression period to 0 days. It will be added to the processing queue instantly after the request.

    +
    You Should Know

    For the most popular SFMC tenant type - Enterprise 2.0 - the deletion must happen at the parent level and automatically apply across all Business Units.

    If you have a different tenant type, check the official documentation.

    +

    Manual Contact Deletion

    +

    Once the Contact Deletion is enabled and configured, you can start cleaning. The easiest way is to leverage manual deletion options available in the Contact Builder.

    +
    You Should Know

    Manual Contact Deletion in Email Studio will remove the contact only from Email Studio. To trigger the Contact Deletion Process, you must leverage Contact Builder or API method.

    +

    Delete contacts from All Contacts

    +

    This method is best if you have just a few contacts you want to delete. It's simple, it's fast, it's constrained.

    +
      +
    1. Go to parent Business Unit.
    2. +
    3. Go to Audience Builder » Contact Builder.
    4. +
    5. Click All Contacts in the top menu.
    6. +
    7. Find a contact(s) you want to delete and click checkboxes next to them.
    8. +
    9. Click the trash icon and select Delete selected contacts.
    10. +
    +

    Using this method, you can delete multiple contacts, but only from a single page of results. If you navigate to the next page of results, previously checked contacts will no longer be part of your selection.

    +

    If you want to remove more contacts, leverage the Data Extension method shared below.

    +

    Delete all contacts from List or Data Extension

    +

    This method will be better if you want to remove a significant number of contacts once but don't want the hassle of the most potent API method.

    +
      +
    1. Go to parent Business Unit.
    2. +
    3. Go to Audience Builder » Contact Builder.
    4. +
    5. Click All Contacts in the top menu.
    6. +
    7. Without selecting any contact, click the trash icon.
    8. +
    9. Click Delete contacts from list / data extension depending on your needs.
    10. +
    11. Select the Sendable Data Extension used for the Contact Deletion process.
    12. +
    13. Decide whether the Data Extension itself should stay in the system after SFMC deletes the contacts.
    14. +
    15. Click Delete Contacts.
    16. +
    17. Review and confirm by clicking Delete.
    18. +
    +
    You Should Know

    This method allows you to delete up to one million contacts per operation. If you want to remove more than that, you will have to run the above steps multiple times or leverage contact deletion automation.

    +

    SFMC API Contact Deletion

    +

    Previous methods are nice, but they require manual triggering in the Salesforce Marketing cloud each time you run the Contact Deletion Process. There are, however, many use cases where you might want to trigger it automatically - for example, from a different system responsible for managing privacy.

    +

    Thankfully, SFMC offers a solution for that as well with REST API. To implement it:

    +
      +
    1. Create authentication endpoint with correct permissions with Installed Package +
        +
      1. Go to Setup in Parent Business Unit.
      2. +
      3. Within the Platform Tools section, roll out Apps and click Installed Packages.
      4. +
      5. Click New in the top right.
      6. +
      7. Provide a meaningful name and description for your Installed Package.
      8. +
      9. Add Component - API Integration.
      10. +
      11. Select the Server-to-Server integration type.
      12. +
      13. Select Read and Write for List and Subscribers within the Contacts section. Write is needed for Deletion. Read - for checking the deletion status.
      14. +
      15. Click Save.
      16. +
      +
    2. +
    3. Copy Client Id, Client Secret and Client Base (the unique string in either of the API URIs that is between https:// and API type).
    4. +
    5. Leverage the contact deletion endpoint in the solution of your choice: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete.
    6. +
    +

    This single endpoint will allow you to trigger the Contact Deletion process in three ways by adding a query string at the end. All scenarios will use the same Method, Content-Type and Authorization, but the endpoint and payload will be different:

    +
      +
    • Method: POST
    • +
    • Content-Type: application/json
    • +
    • Authorization: Bearer TOKEN
    • +
    +

    Contact Deletion by Contact ID

    +

    Endpoint: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=ids

    +
    Delete by Contact ID Payload
    {
    "values": [1111111, 22222222],
    "deleteOperationType": "ContactAndAttributes"
    }
    +

    This endpoint's values is an array of Contact IDs (integers).

    +

    Contact Deletion by Contact Key

    +

    Endpoint: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=keys

    +
    Delete by Contact Key Payload
    {
    "values": ["A1B2C3D4", "E5F6G7H8"],
    "deleteOperationType": "ContactAndAttributes"
    }
    +

    This endpoint's values is an array of Contact Keys (strings).

    +

    Contact Deletion using Data Extension

    +

    Endpoint: https://CLIENT_BASE.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=listReference

    +
    Delete using Data Extension Payload
    {
    "deleteOperationType": "ContactAndAttributes",
    "targetList": {
    "listType": { "listTypeID": 3 },
    "listKey": "contactDeletionDEKey"
    },
    "deleteListWhenCompleted": false,
    "deleteListContentsWhenCompleted": true
    }
    +

    In this endpoint, you have control over three values:

    +
      +
    • listKey: the external key of the Data Extension you use for the Contact Deletion process.
    • +
    • deleteListWhenCompleted: when true, it will delete the Data Extension during the Contact Deletion process.
    • +
    • deleteListContentsWhenCompleted: when true it will delete records from the Data Extensions during Contact Deletion process.
    • +
    +

    Contact Deletion with Automation Studio

    +

    With the API Contact Deletion we are not limited to external triggers. We can also leverage AMPScript or SSJS to trigger it directly from Marketing Cloud.

    +

    The most popular use case is a Contact Deletion Automation scheduled to clean up the database regularly. It's a great idea to keep your SFMC instance clean without much of a hassle.

    +

    My recommended approach is to create a dedicated Pending Contact Deletion Shared Data Extension that will store records to be deleted along with some context and remove its content nightly with the Script Activity.

    +

    Contact Deletion Pending Data Extension

    +

    If you want to capture contacts-to-be-deleted from multiple Business Units, make it Shared Data Extension.

    +
    NameDataTypeDefault ValueLengthNullable
    🔑 SubscriberKeyText18No
    DeletionReasonText50Yes
    DeletionDateDateCurrent dateYes
    +

    External Key: contact-deletion-pending-de +Sendable: true

    +

    You don't need anything but the Subscriber Key for essential contact deletion. However, I prefer to add a bit more context that I can leverage in the Contact Deletion archive described later in this article.

    +

    Contact Deletion Script Activity

    +

    Below you can find ready-to-use SSJS snippet for Script Activity. Change clientSecret, clientID and clientBase variables to data you saved during Installed Package configuration. If needed, change also the contactDeletionDEKey, errorDE and automationName variables to reflect your configuration.

    +

    To learn more about errorDE check my debugging guide. You will find there also details about helper functions from the script.

    +
    Contact Deletion Script Activity SSJS Snippet
    <script runat="server">
    Platform.Load('core', '1')

    /* -------------------------------------------------------------------------

    1. Global Variables
    1.1. Contact Deletion DE Key
    1.2. REST API Authorization
    1.3. Error Handling
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. Main Script
    3.1. REST API Authorization
    3.2. Contact Deletion Process

    -------------------------------------------------------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------------ 1.1 Contact Deletion DE Key -------------------------- */

    var contactDeletionDEKey = 'contact-deletion-pending-de';

    /* ------------------------ 1.2 REST API Authorization --------------------------- */

    var payload, endpoint, response;

    var clientSecret = 'clientSecretFromInstalledPackage';
    var clientID = 'clientIDFromInstalledPackage';
    var clientBase = 'clientBaseUrl'
    var contentType = 'application/json';
    var debugging = false;


    /* ------------------------ 1.3 Error Handling --------------------------- */

    var errorDE = 'error-log-de';
    var automationName = 'contact-deletion-process';


    /* ----------------------------------------------------------------------- */
    /* ------------------------- 2. HELPER FUNCTIONS ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* --------------------------- 2.1. Debugging ---------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* -------------------------- 2.2. Error handling ------------------------ */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to an error page.
    * @param {Object} error - The caught error object. It can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores a short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    Platform.Function.InsertData(errorDE, ['ID', 'ErrorSource', 'ErrorMessage', 'ErrorDescription'], [GUID(), automationName, error.message, error.description]);
    };
    };


    /* ----------------------------------------------------------------------- */
    /* --------------------------- 3. MAIN SCRIPT ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------- 3.1. REST API Authorization --------------------- */

    endpoint = 'https://' + clientBase + '.auth.marketingcloudapis.com/v2/token';
    payload = {
    client_id: clientID,
    client_secret: clientSecret,
    grant_type: 'client_credentials'
    };
    if (debugging) debugValue('Payload', payload);

    try {
    response = HTTP.Post(endpoint, contentType, Stringify(payload));
    } catch (error) {
    handleError(error);
    }
    var accessToken = Platform.Function.ParseJSON(response['Response'][0]).access_token;
    if (debugging) debugValue('AccessToken', accessToken);

    /* ------------------- 3.2. Contact Deletion Process --------------------- */

    endpoint = 'https://' + clientBase + '.rest.marketingcloudapis.com/contacts/v1/contacts/actions/delete?type=listReference';
    payload = {
    deleteOperationType: 'ContactAndAttributes',
    targetList: {
    listType: { listTypeID: 3 },
    listKey: contactDeletionDEKey
    },
    deleteListWhenCompleted: false,
    deleteListContentsWhenCompleted: true
    };
    var headerNames = ['Authorization'];
    var headerValues = ['Bearer ' + accessToken];

    try {
    response = HTTP.Post(endpoint, contentType, Stringify(payload), headerNames, headerValues);
    if (debugging) debugValue('Response', response);
    } catch (error) {
    handleError(error);
    }
    </script>
    +

    Monitor Contact Deletion Process

    +

    There are three ways to monitor what is happening with your Contact Deletion requests (you should perform all three from the parent Business Unit):

    +
      +
    1. In Contact Builder, in the top menu, click All Contacts. Click the trash icon in the top right, and select View Pending Deletions.
    2. +
    3. In Contact Builder, in the top menu, click Contact Analytics. You will see a full Contact Deletion Dashboard.
    4. +
    5. Request details using Contact Deletion Details API.
    6. +
    +
    +

    Which contacts should you delete?

    +

    You should always align this question with the specific business needs of your company. However, there are some very popular segments that may inspire you.

    +

    You can add them within the same Automation as the Contact Deletion Script Activity to ensure they are captured right before cleanup. You may also create separate Automations on your child Business Unit to capture BU-specific candidates for cleanup using data available only there.

    +

    Remember to test those recommendations and queries (for example, using Query Studio) before implementing them in your Contact Deletion Process, as even a small mistake might lead to irreversible data loss.

    +

    Contacts deleted in Salesforce CRM

    +

    If you use Marketing Cloud Connect to integrate your Salesforce CRM with the Marketing Cloud, you should think about synchronizing deletions between those two systems. It does not happen automatically. By default, contacts deleted in SF CRM are removed from Synchronized Data Extensions and stay in other Marketing Cloud tables.

    +

    You can, however, add this using Query Activity in Automation Studio. For the email channel, it's straightforward:

    +
    Find subscribers deleted in SF CRM
    SELECT
    subscriber.SubscriberKey
    , 'Deleted in SF CRM' AS DeletionReason
    FROM _Subscribers AS subscriber
    LEFT JOIN Contact_Salesforce AS contact
    ON contact.Id = subscriber.SubscriberKey
    WHERE contact.Id IS NULL
    +

    If you are also using other channels, you can include their System Data Views to the query.

    +

    Leads and Users deleted or filtered in Salesforce CRM

    +

    This method is also great for removing deleted or unused records from other objects counted against your All Contacts licence limits - Leads and Users. There are two caveats, however.

    +

    First, to remove unused Leads and Users, you must first stop them from synchronizing via Marketing Cloud Connect. Otherwise, they will come back to SFMC at the next scheduled synchronization. The best way to do it is to create a boolean field on those objects (for example, ShouldSyncToSFMC) that would be true only for records you need in your system. Depending on your use case, it might be neither (so just set false as the default value), or it might be complicated (the calculated field will be your best friend). With such a boolean, you will be able to select it as a filter for your Marketing Cloud Connect object synchronization.

    +

    Second is the problem of finding those records in the Marketing Cloud. The easy way is to create a copy of Synchronized Data Extensions before filtering them. However, this will not always be possible, and it won't capture Leads and Users that were removed in the past from CRM.

    +

    If you have Mobile Studio in your SFMC licence, you have a nice workaround:

    +
      +
    1. Go to Contact Builder.
    2. +
    3. Click All Contacts in the top menu.
    4. +
    5. Select the Mobile List tab.
    6. +
    7. Click Create Mobile List button in the top right.
    8. +
    9. Leave MobileConnect as the channel and select Filtered List as a type. Click Ok.
    10. +
    11. Select All Contacts and click Select.
    12. +
    13. Remove prepopulated Mobile Number filter and on the left pane select System Data » Contact.
    14. +
    15. Drag and drop Contact Key and configure it to is not null. Click Done.
    16. +
    17. Click the Save as Filter button in the top right.
    18. +
    19. Provide a sensible name (like "AllContactsList") and click Save.
    20. +
    +
    You Should Know

    All Contacts view shows many cool data fields, but unfortunately, most are no longer available after the export to the List.

    Mobile List fields are: SubscriberKey, CustomerKey, AudienceID, TrackingCode, AudienceCode, SegmentCode, SegmentName, Priority, SegmentID, SplitID.

    So in nearly every case you will have to take the Subscriber Key and enrich it with JOIN to other more interesting Data Extensions or System Data Views.

    +

    It will create and populate the list with all your Contacts. Save its name - it will be helpful for the Query.

    +

    If you want to remove all Leads and Users, you will need only this List:

    +
    Find all Users and Leads
    SELECT SubscriberKey
    FROM AllContactsList
    WHERE
    SubscriberKey LIKE '005%'
    OR SubscriberKey LIKE '00Q%'
    +
    You Should Know

    You might wonder what is happening within the WHERE filter above - this is magic that is possible thanks to Salesforce ID structure. The ID is not entirely random. Instead, it has a specific format.

    For our need here, the key is the three-character prefix that point to a specific Salesforce Object:

      +
    • 001 = Account
    • +
    • 003 = Contact
    • +
    • 005 = User
    • +
    • 00Q = Lead
    • +

    For the complete list, check Daniel Ballinger's cheat sheet.

    +

    If you want to remove only those Leads / Users that you no longer synchronize via filtered Marketing Cloud Connect, you will need to add a comparison similar to the Contacts use case.

    +
    Find all Users and Leads that are no longer synchronized to SFMC
    SELECT contact.SubscriberKey
    FROM AllContactsList AS contact
    LEFT JOIN Leads_Salesforce AS lead
    ON contact.SubscriberKey = lead.ID
    LEFT JOIN Users_Salesforce AS user
    ON contact.SubscriberKey = user.ID
    WHERE
    (
    SubscriberKey LIKE '005%'
    AND user.ID IS NULL
    )
    OR
    (
    SubscriberKey LIKE '00Q%'
    AND lead.ID IS NULL
    )
    +

    Contactless Contacts

    +

    Another group ripe for deletion are Contacts that you cannot contact. Multiple subgroups fill that definition:

    +
      +
    1. Suppressed contacts
    2. +
    3. Hard bounced contacts
    4. +
    5. Contacts that do not have any channel information (like an email address or mobile phone)
    6. +
    7. Bad quality contacts (test records, fake emails, contacts that failed Email Studio List Detective)
    8. +
    9. Hidden Triggered Send Managed List Subscribers
    10. +
    +

    Before deletion, it might be worth saving some of this data for the future (especially suppressed contacts for compliance or hard bounced contacts for future deliverability).

    +

    Zombie Contacts

    +

    Apart from contactless contacts, there are always some zombies in each database. Contacts that you can contact - and you do - but they are not reacting in any way. No opens, no clicks, for months.

    +

    I know it might be hard to delete opted-in contacts when obtaining new ones is hard work, but you need to finish this toxic relationship after some time. Zombie contacts skew your analytics, put unnecessary strain on your instance, degrade your IP Reputation and create costs without providing any value to your business in return. You will be far better without them.

    +

    Align with your business the threshold for marking a contact as a zombie. It will be different from company to company, but my starting point recommendation is a contact that (1) Was sent at least six emails, (2) within at least three different months and (3) did not open or click any email.

    +
      +
    1. Makes sure that you tried enough times to make your opinion based on solid facts
    2. +
    3. Makes sure that it's not a matter of out-of-office period, but a constant issue
    4. +
    5. Makes sure that temporary problem is not leading to deletion of otherwise valuable contact
    6. +
    +

    Before making the final decision, I recommend checking a few versions of those rules against your database to see which variation gives you the best results without being too lax.

    +
    +

    Contact Deletion Archive

    +

    Deleting contacts is super fun, but sometimes you might need to know whom you have deleted. Or be able to debug recurring deletions to fix a leak in your data pipeline. Contact Deletion Archive is the way to go - it allows you to keep details of your deletions in a privacy-first way.

    +

    It is built with two additional elements on top of the standard Contact Deletion process described above.

    +

    Contact Deletion Archive Data Extension

    +

    It will store the information about past deletions allowing you to check multiple things securely:

    +
      +
    1. Subscriber Key of deleted contacts.
    2. +
    3. Hashed Emails of the deleted contacts.
    4. +
    5. Reason for the deletion.
    6. +
    7. Date of first and last deletion (and, therefore, whether we deleted the SubscriberKey more than once).
    8. +
    +

    Important: Make sure you configure it as NOT sendable Data Extension. Otherwise, your Contact Deletion Process will remove data also from it.

    +
    NameDataTypeDefault ValueLengthNullable
    🔑 SubscriberKeyText18No
    HashedEmailText254Yes
    DeletionReasonText50Yes
    FirstDeletionDateDateCurrent dateYes
    LastDeletionDateDateNo
    +

    Contact Deletion Archive Query Activity

    +

    We will need new Query Activity to fill that Archive Data Extension. One that moves the data from the Contact Deletion Pending Data Extension.

    +

    It will leverage the HASHBYTES function to hash the Email Address. On the one hand, it will protect the privacy of the deleted contacts and make sure no one will use them for any send. On the other - it allows you to check the list of deleted contacts against known email by hashing it the same way.

    +
    Archive your deletions on schedule
    SELECT
    pending.SubscriberKey
    , CONVERT(NVARCHAR(128), HASHBYTES('SHA2_256', sub.EmailAddress), 2) AS HashedEmail
    , pending.DeletionReason
    , pending.DeletionDate AS LastDeletionDate
    FROM [Contact Deletion Pending DE] AS pending
    INNER JOIN _Subscribers AS sub
    ON sub.SubscriberKey = pending.SubscriberKey
    +

    This new Query Activity should be put in the Contact Deletion Automation between the Contact Deletion Query Activity that selects the contacts to-be-deleted and the Contact Deletion Script Activity that does the deed.

    \ No newline at end of file diff --git a/docs/config/sfmc-enhanced-send-log/index.html b/docs/config/sfmc-enhanced-send-log/index.html index 7ac694bac..c903e3a6a 100644 --- a/docs/config/sfmc-enhanced-send-log/index.html +++ b/docs/config/sfmc-enhanced-send-log/index.html @@ -1,22 +1,78 @@ - + - -SFMC Enhanced Send Log | Mateusz Dąbrowski + +SFMC Enhanced Send Log | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Enhanced Send Log

    Create, customise and enhance SFMC Send Log for debugging and reporting.

    What is Send Log

    Send Log is a table that captures relevant data about sends happening in the platform. In the case of Salesforce Marketing Cloud, it is a unique Data Extension that automatically captures the data (no need for AMPScript or SSJS to populate it).

    SFMC doesn't have Send Log out of the box, but you can make one yourself. On the first screen of Data Extension creation, select Create From Template in the Creation Method field. You will see a picklist with multiple templates, including SendLog (for Emails), SMSSendLog and PushSendLog. If you do not see any of those templates - you might need to request this as a free feature on demand.

    Once you create it, it will automatically populate with each attempted send originating from its Business Unit.

    Send Log Data Extension Template

    The Send Log template comes with six default fields:

    NameTypeLengthPrimary KeyNullable
    JobIDNumericYes
    ListIDNumericYes
    BatchIDNumericYes
    SubIDNumericYes
    TriggeredSendIDString36Yes
    ErrorCodeNumericYes

    JobID and BatchID allow you to differentiate the send if you push the same email on multiple days or campaigns.

    ListID contains the ID of the list used for the send (for example, All Subscribers list).

    SubID contains Subscriber ID - a unique Subscriber identifier, different from Subscriber Key. Subscriber ID is a backend system number that we cannot change.

    TriggeredSendID stores the ID of a Triggered Send Definition if it was used for the specific send.

    ErrorCode captures an error that stopped a specific send. I have added the list of all possible codes with an explanation at the bottom.

    You Should Know

    If your send was not delivered, but you can see it in the Send Log without any ErrorCode, leverage Email Sends Debugging Query to learn what happened with the message.

    Send Log vs _Sent System Data View

    You might wonder - why use email Send Log when _Sent Data View captures the same data out of the box? There are two reasons.

    1. Captured data is not precisely the same.

    It's not only about the ErrorCode field in the Send Log, and multiple additional fields in the _Sent Data View. It's also about when the data is captured.

    Send Log is populated when SFMC prepares the send. That's why it can log ErrorCode if the send fails. The Data View is populated later when SFMC pushes a correctly constructed email out to the Email Service Providers.

    It means that Send Log is an incredible tool to check why some emails did not go out of SFMC.

    2. You can customise the Send Log

    Data Views are set in stone (unless you purchase a custom one), but you can add fields to the Send Log to align it better with your business needs. Let's dive into how it works and why you should use it.

    Custom Send Log

    The true power of Send Log lies in the possibility to customise it. The default six columns are just beginning - you can add additional ones per your business needs. With performance in mind, I would recommend adding up to 5 custom fields.

    Columns added to Send Log are unique because you can make them fill in automatically. How does it work?

    When Marketing Cloud prepares the email for sending, Send Log evaluates all available personalisation strings, Sendable Data Extension fields and AMPScript variables. Each value that shares a name with Send Log column is automatically filled. Examples?

    1. If you want to capture the recipient's Email Address in the SendLog, you can add the EmailAddr field, and it will be automatically filled thanks to %%emailaddr%% personalisation string.

    2. Capturing Subscriber Key is a bit tricky, as the personalisation string is %%_subscriberkey%% - you cannot add a field starting with the underscore to Data Extension. There are two ways to capture this information. In most cases, you will have the SubscriberKey field in the Data Extension used for sending - you can use the same column name in the Send Log. Alternatively, you can create an AMPScript variable using the personalisation string: SET @SubscriberKey = AttributeValue('_subscriberkey'). Send Log will pick up your AMPScript variable and fill the column.

    3. You can also use AMPScript variables for other interesting things, like capturing information from Additional Email Attributes or custom values manually configured within the email body.

    You Should Know

    In most cases, you can dry-test automatic filling by adding %%[Output(Concat('SendLogColumnName: ', @SendLogColumnName))]%% to the bottom of the email (where SendLogColumnName is equal to the Send Log field you want to test). This AMPScript one-liner should output SendLogColumnName: along with the value that SFMC would add to the Send Log. If it doesn't - there might not be an appropriate variable, or it is not assigned a value.

    Customised Send Log Example

    Here you can see sample Customised Send Log that I like to use:

    NameTypeLengthPrimary KeyNullable
    JobIDNumericYes
    ListIDNumericYes
    BatchIDNumericYes
    SubIDNumericYes
    TriggeredSendIDString36Yes
    ErrorCodeNumericYes
    SubscriberKeyString18Yes
    EmailAddrEmail254Yes
    EmailName_String150Yes
    LogDateDate
    BusinessSpecificField1Yes
    BusinessSpecificField2Yes

    I always add the SubscriberKey field (filled from a column of the same name in the Data Extension used for send) along with EmailAddr and EmailName_ fields filled in from personalisation strings. I also add LogDate field filled with current date as default to be able to filter rows based on a attempted send date.

    As Send Log will show the data as it is at the moment of email preparation, I frequently extend it with customer-specific fields that are crucial for send-time data checks. For example - VIP status, Contact vs Lead status, assigned Account Executive.

    All those data points can be beneficial during debugging. VIP offer sent to the standard customer? Send Log will tell you whether the Subscriber was VIP at the moment of send or it is a bug in your Journey criteria.

    You Should Know

    Another handy field that I would love to capture in the Send Log would be the name of the Data Extension used for the send. It should be possible, as there is a dedicated personalisation string: %%_DataSourceName%%. But...

    You can add the DataSourceName field to Send Log and SET @DataSourceName = AttributeValue('_datasourcename') snippet to the email. However, it will work correctly only for the Send Flow.

    Unfortunately, it currently does not support Journey Builder Sends. Learn more and vote for a fix here.

    Enhanced Send Log

    Custom Send Log is already a fantastic tool, but it's more suited for administrators with its technical field names and lack of post-send data. However, you can easily leverage it to create something perfect for your more business-oriented SFMC users.

    To do it, you will need additional Data Extension and simple Automation with single Query Activity.

    Enhanced Send Log Example

    Create standard Data Extension with more user-friendly names and extend it with journey and engagement data points:

    NameTypeLengthPrimary KeyNullable
    SubscriberKeyString18YesNo
    SubscriberIDNumericYes
    EmailAddressEmail254Yes
    BusinessSpecificField1Yes
    BusinessSpecificField2Yes
    EmailNameString150Yes
    JourneyNameString100Yes
    JourneyVersionString100Yes
    LogDateDateYes
    SentDateDateYes
    DeliveredString20Yes
    FirstOpenDateDateYes
    FirstClickDateDateYes
    BounceDateDateYes
    JobIDNumericYesYes
    ListIDNumericYesYes
    BatchIDNumericYesYes
    TriggeredSendIDString36Yes
    ErrorCodeNumericYes

    Enhanced Send Log SQL Query Activity

    Create Automation with Query Activity that will take data from your technical Send Log and System Data Views to populate your Enhanced Send Log DE with actionable data.

    SELECT
    sl.SubscriberKey AS SubscriberKey
    , sl.SubID AS SubscriberID
    , sl.EmailAddr AS EmailAddress
    , sl.BusinessSpecificField1 AS BusinessSpecificField1
    , sl.BusinessSpecificField2 AS BusinessSpecificField2
    , sl.EmailName AS EmailName
    , j.JourneyName AS JourneyName
    , j.VersionNumber AS JourneyVersion
    , sl.LogDate AS LogDate
    , s.EventDate AS SentDate
    , CASE
    WHEN s.EventDate IS NULL THEN 'False'
    WHEN job.DeliveredTime IS NOT NULL THEN CONVERT(NVARCHAR, job.DeliveredTime)
    WHEN b.EventDate IS NOT NULL THEN 'False'
    WHEN o.EventDate IS NOT NULL OR c.EventDate IS NOT NULL THEN 'True'
    WHEN s.EventDate > DATEADD(MINUTE, -15, GETDATE()) THEN 'Pending'
    ELSE 'True'
    END AS Delivered
    , CASE
    WHEN o.EventDate IS NOT NULL THEN o.EventDate
    WHEN c.EventDate IS NOT NULL THEN c.EventDate
    END AS FirstOpenDate
    , c.EventDate AS FirstClickDate
    , b.EventDate AS BounceDate
    , sl.JobID AS JobID
    , sl.ListID AS ListID
    , sl.BatchID AS BatchID
    , sl.TriggeredSendID AS TriggeredSendID
    , sl.ErrorCode AS ErrorCode
    FROM TechnicalSendLog AS sl
    LEFT JOIN _Job AS job
    ON sl.JobID = job.JobID
    LEFT JOIN _Sent AS s
    ON sl.JobID = s.JobID
    AND sl.ListID = s.ListID
    AND sl.BatchID = s.BatchID
    AND sl.SubID = s.SubscriberID
    LEFT JOIN _Open AS o
    ON s.JobID = o.JobID
    AND s.ListID = o.ListID
    AND s.BatchID = o.BatchID
    AND s.SubscriberID = o.SubscriberID
    AND o.IsUnique = 1
    LEFT JOIN _Click AS c
    ON s.JobID = c.JobID
    AND s.ListID = c.ListID
    AND s.BatchID = c.BatchID
    AND s.SubscriberID = c.SubscriberID
    AND c.IsUnique = 1
    LEFT JOIN _Bounce AS b
    ON s.JobID = b.JobID
    AND s.ListID = b.ListID
    AND s.BatchID = b.BatchID
    AND s.SubscriberID = b.SubscriberID
    AND b.IsUnique = 1
    LEFT JOIN _JourneyActivity AS ja
    ON s.TriggererSendDefinitionObjectID = ja.JourneyActivityObjectID
    LEFT JOIN _Journey AS j
    ON ja.VersionID = j.VersionID
    WHERE
    sl.SubscriberKey IS NOT NULL
    AND CONVERT(DATE, sl.LogDate) >= DATEADD(MONTH, -1, CONVERT(DATE, GETDATE()))

    In the above query, we pull Journey Builder information and Sent, Delivered, Open, Click, Bounce information. We are also adding a custom logic that will provide more real Delivery and Open data using the fundamental assumption that if the recipient clicked something - the email had to be delivered and opened.

    In the WHERE section, we filter the data to pull only updates for sends from the last month to optimise the query performance.

    Schedule that Automation nightly and share the Enhanced Send Log with your users.

    Send Log ErrorCode Values

    List of email Send Log errorCode values from the official SFMC Documentation:

    Error CodeNameDescription
    1UnsubscribedThe subscriber status is unsubscribed.
    2HeldThe subscriber status is held.
    3Partner UnsubscribedThe subscriber partner system status is unsubscribed.
    4Missing Email AddressThe subscriber record or the API call that initiated the send doesn't contain an email address for the subscriber.
    5Invalid Email AddressThe subscriber email address is invalid.
    6Duplicate EmailThe subscriber email is identical to another subscriber email in this send.
    7Invalid SubscriberID ProvidedThe subscriber ID is invalid.
    8Missing Subscriber IDThe subscriber key and subscriber ID values are empty or null.
    9Missing Owner IDThe business unit ID for the child client account is missing for this enterprise account.
    10Missing Required AttributesThe subscriber is missing required attribute values.
    11No All Subscribers List EntryThe subscriber isn't on the AllSubscribers list for the account.
    12Invalid Owner ID ProvidedThe child client account isn't a member of the enterprise account.
    13Subscriber Key MismatchThe subscriber key in the system doesn't match the subscriber key provided.
    14Email Address MismatchThe email address in the system doesn't match the email address provided for this subscriber.
    15Unspecified ErrorThe subscriber didn't pass validation. Contact your Marketing Cloud account representative for more information.
    16Invalid Attribute ValueThe value specified for a subscriber attribute doesn't match the attribute's data type.
    17Attribute Value Max Length ErrThe value specified for a subscriber attribute is over the maximum length allowed for the attribute.
    18Invalid Attribute Value CountThe number of subscriber attribute values doesn't match the expected count.
    19Missing Required FieldsRequired data extension field values are missing for the subscriber.
    20Invalid Field ValueThe value specified for a data extension field doesn't match the field type.
    21Duplicate Data Extension RowA row in the data extension was identified as a duplicate. The triggered send data extension doesn't allow duplicate rows.
    22Data Extension Insert FailedThe send failed to insert a row into the triggered send data extension.
    23Domain ExclusionA domain exclusion list excluded the subscriber.
    24List Detective ExclusionList Detective excluded the subscriber.
    25Subscriber Blacked OutThe subscriber is ineligible to receive the email. Marketing Cloud reschedules the triggered send.
    26Build Email ErrorAn error occurred when attempting to build an email for the subscriber.
    27Suppression List ExclusionThe subscriber is on a suppression list and is ineligible to receive the email.
    28Opt Out List ExclusionThe subscriber is on an opt-out list and ineligible to receive the email.
    29Missing Subscriber Key ValueThe subscriber key value is null or empty.
    30Subscriber Key Too LongThe subscriber key value exceeds the character limit.
    37Queued Transaction DeletedThe queued email subscriber was deleted from the Triggered Send Queue using Clear Queue
    39Subscriber Queue ClearedThe queued SMS subscriber was deleted from the Triggered Send Queue.
    40Subscriber DeletedSubscriber or contact is deleted and can't be added to Marketing Cloud.
    138Exceeded Expiration PolicyPaused triggered sends that were later resumed without clearing the queue sent old messages that were no longer relevant.
    - - +

    SFMC Enhanced Send Log

    Create, customise and enhance SFMC Send Log for debugging and reporting.

    +

    What is Send Log

    +

    Send Log is a table that captures relevant data about sends happening in the platform. In the case of Salesforce Marketing Cloud, it is a unique Data Extension that automatically captures the data (no need for AMPScript or SSJS to populate it).

    +

    SFMC doesn't have Send Log out of the box, but you can make one yourself. On the first screen of Data Extension creation, select Create From Template in the Creation Method field. You will see a picklist with multiple templates, including SendLog (for Emails), SMSSendLog and PushSendLog. If you do not see any of those templates - you might need to request this as a free feature on demand.

    +

    Once you create it, it will automatically populate with each attempted send originating from its Business Unit.

    +

    Send Log Data Extension Template

    +

    The Send Log template comes with six default fields:

    +
    NameTypeLengthPrimary KeyNullable
    JobIDNumericYes
    ListIDNumericYes
    BatchIDNumericYes
    SubIDNumericYes
    TriggeredSendIDString36Yes
    ErrorCodeNumericYes
    +

    JobID and BatchID allow you to differentiate the send if you push the same email on multiple days or campaigns.

    +

    ListID contains the ID of the list used for the send (for example, All Subscribers list).

    +

    SubID contains Subscriber ID - a unique Subscriber identifier, different from Subscriber Key. Subscriber ID is a backend system number that we cannot change.

    +

    TriggeredSendID stores the ID of a Triggered Send Definition if it was used for the specific send.

    +

    ErrorCode captures an error that stopped a specific send. I have added the list of all possible codes with an explanation at the bottom.

    +
    You Should Know

    If your send was not delivered, but you can see it in the Send Log without any ErrorCode, leverage Email Sends Debugging Query to learn what happened with the message.

    +

    Send Log vs _Sent System Data View

    +

    You might wonder - why use email Send Log when _Sent Data View captures the same data out of the box? There are two reasons.

    +

    1. Captured data is not precisely the same.

    +

    It's not only about the ErrorCode field in the Send Log, and multiple additional fields in the _Sent Data View. It's also about when the data is captured.

    +

    Send Log is populated when SFMC prepares the send. That's why it can log ErrorCode if the send fails. The Data View is populated later when SFMC pushes a correctly constructed email out to the Email Service Providers.

    +

    It means that Send Log is an incredible tool to check why some emails did not go out of SFMC.

    +

    2. You can customise the Send Log

    +

    Data Views are set in stone (unless you purchase a custom one), but you can add fields to the Send Log to align it better with your business needs. Let's dive into how it works and why you should use it.

    +

    Custom Send Log

    +

    The true power of Send Log lies in the possibility to customise it. The default six columns are just beginning - you can add additional ones per your business needs. With performance in mind, I would recommend adding up to 5 custom fields.

    +

    Columns added to Send Log are unique because you can make them fill in automatically. How does it work?

    +

    When Marketing Cloud prepares the email for sending, Send Log evaluates all available personalisation strings, Sendable Data Extension fields and AMPScript variables. Each value that shares a name with Send Log column is automatically filled. Examples?

    +
      +
    1. +

      If you want to capture the recipient's Email Address in the SendLog, you can add the EmailAddr field, and it will be automatically filled thanks to %%emailaddr%% personalisation string.

      +
    2. +
    3. +

      Capturing Subscriber Key is a bit tricky, as the personalisation string is %%_subscriberkey%% - you cannot add a field starting with the underscore to Data Extension. There are two ways to capture this information. In most cases, you will have the SubscriberKey field in the Data Extension used for sending - you can use the same column name in the Send Log. Alternatively, you can create an AMPScript variable using the personalisation string: SET @SubscriberKey = AttributeValue('_subscriberkey'). Send Log will pick up your AMPScript variable and fill the column.

      +
    4. +
    5. +

      You can also use AMPScript variables for other interesting things, like capturing information from Additional Email Attributes or custom values manually configured within the email body.

      +
    6. +
    +
    You Should Know

    In most cases, you can dry-test automatic filling by adding %%[Output(Concat('SendLogColumnName: ', @SendLogColumnName))]%% to the bottom of the email (where SendLogColumnName is equal to the Send Log field you want to test). This AMPScript one-liner should output SendLogColumnName: along with the value that SFMC would add to the Send Log. If it doesn't - there might not be an appropriate variable, or it is not assigned a value.

    +

    Customised Send Log Example

    +

    Here you can see sample Customised Send Log that I like to use:

    +
    NameTypeLengthPrimary KeyNullable
    JobIDNumericYes
    ListIDNumericYes
    BatchIDNumericYes
    SubIDNumericYes
    TriggeredSendIDString36Yes
    ErrorCodeNumericYes
    SubscriberKeyString18Yes
    EmailAddrEmail254Yes
    EmailName_String150Yes
    LogDateDate
    BusinessSpecificField1Yes
    BusinessSpecificField2Yes
    +

    I always add the SubscriberKey field (filled from a column of the same name in the Data Extension used for send) along with EmailAddr and EmailName_ fields filled in from personalisation strings. I also add LogDate field filled with current date as default to be able to filter rows based on a attempted send date.

    +

    As Send Log will show the data as it is at the moment of email preparation, I frequently extend it with customer-specific fields that are crucial for send-time data checks. For example - VIP status, Contact vs Lead status, assigned Account Executive.

    +

    All those data points can be beneficial during debugging. VIP offer sent to the standard customer? Send Log will tell you whether the Subscriber was VIP at the moment of send or it is a bug in your Journey criteria.

    +
    You Should Know

    Another handy field that I would love to capture in the Send Log would be the name of the Data Extension used for the send. It should be possible, as there is a dedicated personalisation string: %%_DataSourceName%%. But...

    You can add the DataSourceName field to Send Log and SET @DataSourceName = AttributeValue('_datasourcename') snippet to the email. However, it will work correctly only for the Send Flow.

    Unfortunately, it currently does not support Journey Builder Sends. Learn more and vote for a fix here.

    +

    Enhanced Send Log

    +

    Custom Send Log is already a fantastic tool, but it's more suited for administrators with its technical field names and lack of post-send data. However, you can easily leverage it to create something perfect for your more business-oriented SFMC users.

    +

    To do it, you will need additional Data Extension and simple Automation with single Query Activity.

    +

    Enhanced Send Log Example

    +

    Create standard Data Extension with more user-friendly names and extend it with journey and engagement data points:

    +
    NameTypeLengthPrimary KeyNullable
    SubscriberKeyString18YesNo
    SubscriberIDNumericYes
    EmailAddressEmail254Yes
    BusinessSpecificField1Yes
    BusinessSpecificField2Yes
    EmailNameString150Yes
    JourneyNameString100Yes
    JourneyVersionString100Yes
    LogDateDateYes
    SentDateDateYes
    DeliveredString20Yes
    FirstOpenDateDateYes
    FirstClickDateDateYes
    BounceDateDateYes
    JobIDNumericYesYes
    ListIDNumericYesYes
    BatchIDNumericYesYes
    TriggeredSendIDString36Yes
    ErrorCodeNumericYes
    +

    Enhanced Send Log SQL Query Activity

    +

    Create Automation with Query Activity that will take data from your technical template-based Send Log and System Data Views to populate your Enhanced Send Log DE with actionable data.

    +
    SELECT
    sl.SubscriberKey AS SubscriberKey
    , sl.SubID AS SubscriberID
    , sl.EmailAddr AS EmailAddress
    , sl.BusinessSpecificField1 AS BusinessSpecificField1
    , sl.BusinessSpecificField2 AS BusinessSpecificField2
    , sl.EmailName AS EmailName
    , j.JourneyName AS JourneyName
    , j.VersionNumber AS JourneyVersion
    , sl.LogDate AS LogDate
    , s.EventDate AS SentDate
    , CASE
    WHEN s.EventDate IS NULL THEN 'False'
    WHEN job.DeliveredTime IS NOT NULL THEN CONVERT(NVARCHAR, job.DeliveredTime)
    WHEN b.EventDate IS NOT NULL THEN 'False'
    WHEN o.EventDate IS NOT NULL OR c.EventDate IS NOT NULL THEN 'True'
    WHEN s.EventDate > DATEADD(MINUTE, -15, GETDATE()) THEN 'Pending'
    ELSE 'True'
    END AS Delivered
    , CASE
    WHEN o.EventDate IS NOT NULL THEN o.EventDate
    WHEN c.EventDate IS NOT NULL THEN c.EventDate
    END AS FirstOpenDate
    , c.EventDate AS FirstClickDate
    , b.EventDate AS BounceDate
    , sl.JobID AS JobID
    , sl.ListID AS ListID
    , sl.BatchID AS BatchID
    , sl.TriggeredSendID AS TriggeredSendID
    , sl.ErrorCode AS ErrorCode
    FROM TechnicalSendLog AS sl
    LEFT JOIN _Job AS job
    ON sl.JobID = job.JobID
    LEFT JOIN _Sent AS s
    ON sl.JobID = s.JobID
    AND sl.ListID = s.ListID
    AND sl.BatchID = s.BatchID
    AND sl.SubID = s.SubscriberID
    LEFT JOIN _Open AS o
    ON s.JobID = o.JobID
    AND s.ListID = o.ListID
    AND s.BatchID = o.BatchID
    AND s.SubscriberID = o.SubscriberID
    AND o.IsUnique = 1
    LEFT JOIN _Click AS c
    ON s.JobID = c.JobID
    AND s.ListID = c.ListID
    AND s.BatchID = c.BatchID
    AND s.SubscriberID = c.SubscriberID
    AND c.IsUnique = 1
    LEFT JOIN _Bounce AS b
    ON s.JobID = b.JobID
    AND s.ListID = b.ListID
    AND s.BatchID = b.BatchID
    AND s.SubscriberID = b.SubscriberID
    AND b.IsUnique = 1
    LEFT JOIN _JourneyActivity AS ja
    ON s.TriggererSendDefinitionObjectID = ja.JourneyActivityObjectID
    LEFT JOIN _Journey AS j
    ON ja.VersionID = j.VersionID
    WHERE
    sl.SubscriberKey IS NOT NULL
    AND CONVERT(DATE, sl.LogDate) >= DATEADD(MONTH, -1, CONVERT(DATE, GETDATE()))
    +

    In the above query, we pull Journey Builder information and Sent, Delivered, Open, Click, Bounce information. We are also adding a custom logic that will provide more real Delivery and Open data using the fundamental assumption that if the recipient clicked something - the email had to be delivered and opened.

    +

    In the WHERE section, we filter the data to pull only updates for sends from the last month to optimise the query performance.

    +

    Schedule that Automation nightly and share the Enhanced Send Log with your users.

    +

    Send Log ErrorCode Values

    +

    List of email Send Log errorCode values from the official SFMC Documentation:

    +
    Error CodeNameDescription
    1UnsubscribedThe subscriber status is unsubscribed.
    2HeldThe subscriber status is held.
    3Partner UnsubscribedThe subscriber partner system status is unsubscribed.
    4Missing Email AddressThe subscriber record or the API call that initiated the send doesn't contain an email address for the subscriber.
    5Invalid Email AddressThe subscriber email address is invalid.
    6Duplicate EmailThe subscriber email is identical to another subscriber email in this send.
    7Invalid SubscriberID ProvidedThe subscriber ID is invalid.
    8Missing Subscriber IDThe subscriber key and subscriber ID values are empty or null.
    9Missing Owner IDThe business unit ID for the child client account is missing for this enterprise account.
    10Missing Required AttributesThe subscriber is missing required attribute values.
    11No All Subscribers List EntryThe subscriber isn't on the AllSubscribers list for the account.
    12Invalid Owner ID ProvidedThe child client account isn't a member of the enterprise account.
    13Subscriber Key MismatchThe subscriber key in the system doesn't match the subscriber key provided.
    14Email Address MismatchThe email address in the system doesn't match the email address provided for this subscriber.
    15Unspecified ErrorThe subscriber didn't pass validation. Contact your Marketing Cloud account representative for more information.
    16Invalid Attribute ValueThe value specified for a subscriber attribute doesn't match the attribute's data type.
    17Attribute Value Max Length ErrThe value specified for a subscriber attribute is over the maximum length allowed for the attribute.
    18Invalid Attribute Value CountThe number of subscriber attribute values doesn't match the expected count.
    19Missing Required FieldsRequired data extension field values are missing for the subscriber.
    20Invalid Field ValueThe value specified for a data extension field doesn't match the field type.
    21Duplicate Data Extension RowA row in the data extension was identified as a duplicate. The triggered send data extension doesn't allow duplicate rows.
    22Data Extension Insert FailedThe send failed to insert a row into the triggered send data extension.
    23Domain ExclusionA domain exclusion list excluded the subscriber.
    24List Detective ExclusionList Detective excluded the subscriber.
    25Subscriber Blacked OutThe subscriber is ineligible to receive the email. Marketing Cloud reschedules the triggered send.
    26Build Email ErrorAn error occurred when attempting to build an email for the subscriber.
    27Suppression List ExclusionThe subscriber is on a suppression list and is ineligible to receive the email.
    28Opt Out List ExclusionThe subscriber is on an opt-out list and ineligible to receive the email.
    29Missing Subscriber Key ValueThe subscriber key value is null or empty.
    30Subscriber Key Too LongThe subscriber key value exceeds the character limit.
    37Queued Transaction DeletedThe queued email subscriber was deleted from the Triggered Send Queue using Clear Queue
    39Subscriber Queue ClearedThe queued SMS subscriber was deleted from the Triggered Send Queue.
    40Subscriber DeletedSubscriber or contact is deleted and can't be added to Marketing Cloud.
    138Exceeded Expiration PolicyPaused triggered sends that were later resumed without clearing the queue sent old messages that were no longer relevant.
    \ No newline at end of file diff --git a/docs/config/sfmc-features-on-demand/index.html b/docs/config/sfmc-features-on-demand/index.html index 7360d2d60..9079a0ec8 100644 --- a/docs/config/sfmc-features-on-demand/index.html +++ b/docs/config/sfmc-features-on-demand/index.html @@ -1,22 +1,60 @@ - + - -SFMC Features On Demand | Mateusz Dąbrowski + +SFMC Features On Demand | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Features On Demand

    Discover the Salesforce Marketing Cloud's Features On Demand and unlock platform potential.

    What are Marketing Cloud's Features On Demand?

    Salesforce Marketing Cloud is full of features straight out of the box. You can spend hours going through various panels and menus, discovering more options to make the instance your own and align it to the business needs.

    There is, however, a group of features that you won't be able to find. Salesforce hid them until you ask the Support (Free) or Account Executive (Paid) to unlock them. SFMC Features On Demand.

    Why are they not available by default? There are various reasons:

    1. Some require irreversible changes, so Salesforce wants to be sure you know what you want.
    2. Some are putting a strain on the backend, so it is better to keep them off by default and enable only when a client needs them.
    3. Some have an additional cost and require a purchase before enabling.
    4. Some are dependent on specific modules, so there is no need to have them by default.
    5. Some will probably be added as a standard in the future (just as it has been done with previously on-demand Profile Attributes, Script Activity, Shared Folders and others - more on that in the bottom).
    6. Some are no longer provided even when you ask (sweet, sweet Code Activity for Journey Builder...)

    I always wanted to have a full list of those features but could never find it. So here it is.

    You Should Know

    This document is a living thing. Salesforce adds, deletes and updates the Features On Demand with Marketing Cloud releases. I try to keep it up-to-date, but your help with this task will be appreciated.

    If you found anything below no longer correct or know yet another hidden SFMC feature - please let me know.

    Marketing Cloud Settings Features

    Feature NameDescriptionDocumentationType
    Basic Audit TrailCaptures information about SFMC access and security changes.Audit TrailFree
    Advanced Audit TrailCaptures Basic Audit Trail Events and critical events around Emails, MobileConnect, Mobile Push, Cloud Pages, Automations, Journeys and Google Analytics Integration.Audit TrailPaid
    Smart Alerts for Marketing CloudEnables automatic notification for Marketing Cloud problems like slow Email Send speed, Journeys starting without contacts, Automation issues, etc.Proactive Services for Marketing CloudPaid
    Multi-Org AccountAllows you to connect different Sales/Service Cloud Orgs for each Marketing Cloud Business Unit. It is not reversible.Multi-Org AccountFree
    Restore Encryption at Rest KeyIf you revoked (Bring Your Own) Key for Encryption at Rest, this allows you to restore the key and retain the data if you act fastRestore SFMC Encryption Key?
    SSO MetadataAllows you to implement Single Sign-On for your Marketing Cloud instance.SSO ImplementationFree
    Custom Access Permissions for SFTPYou can ask Support to configure per-folder permissions for your FTP usersN/AFree
    SFTP Limited AccessYou can ask Salesforce Support to limit an SFTP User access to only specific SFTP FoldersN/AFree

    Deliverability Features

    Feature NameDescriptionDocumentationType
    Sender Authentication PackageSAP is a collection of products including Private Domain with link and image wrapping (unique for SAP), Dedicated IP, and Reply Mail Management. Must-have.SAPPaid
    Additional Dedicated IPYou can purchase additional dedicated IPs to manage more significant volumes or split communication types.Dedicated IPPaid
    Additional Private DomainYou can purchase additional private domains to differentiate various communication types. This feature does not cover link and image branding.Private DomainsPaid
    SSLSecures your traffic and gives that sweet HTTPS, a must-have nowadays. Once purchased, configuration is now self-serve in SFMC Setup.SSL CertificatePaid
    Reputation Audit TestAd hoc request allows you to receive information about the current state of the blacklists, authentication, DNS and content reviews (spam assessment) for your dedicated IPs.Reputation AuditFree
    Reputation Audit Account[Deprecated] Allows you to receive a dedicated account to Reputation Audit tool so that you can check the state of your dedicated IPs without creating recurring Reputation Audit Test requests. No longer supported.Reputation AuditN/A
    Bounce Detective[Deprecated] Sends email alerts when recent send has an elevated bounce rate at any domain with 25+ recipients and provides per-domain bounce-focused analysis. No longer supported.Bounce DetectiveN/A
    Sender RatingProvides a breakdown of current deliverability-focused sending scores, with trends, in a visually digestible format.Sender RatingFree
    Dedicated IP Custom ConfigurationBy default, if you have multiple dedicated IPs, your communication will use all of them by splitting the volume into 5000 emails batches and rotating the available IPs to push those. You can also assign a specific IP to a particular Delivery Profile. However, with the help of Support, you can create hybrid solutions like pools of few IPs per each delivery profile. It might be crucial for massive senders.N/AFree
    MTA Email ThrottleApart from Email Studio Throttle feature focused on controlling engagement stream there is a deliverability-focused throttle added to a selected dedicated domain(s) on the MTA level. Perfect to limit send speed for reputation building purposes.N/AFree

    Email Studio Features

    Feature NameDescriptionDocumentationType
    CAN-SPAM Compliance CheckMarketing Cloud by default requires you to be compliant with US CAN-SPAM regulation by enforcing Commercial / Transactional split of messages and requiring specific data to be available in the email footer. If you are sending to non-US recipients, you can ask to switch off that requirementCAN-SPAM ComplianceFree
    Email Send LogAllows you to log send-time data about your emails. Requires two features: Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule (it can be set to Blank, _AUTO or ENT._AUTO depending on whether you want Send Log to ignore errors, capture Business Unit sends or all Account sends respectively). Ask for both.Send Logging in Email StudioFree
    Auto-Suppression ListAllows you to suppress Contacts from receiving any Emails from the whole instance or specific classification and Business Unit. No need to attach to each send as with standard Suppression Lists.Auto-Suppression ListsFree
    Exclusion ScriptsAllows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Journey Builder Emails. Ask for both.Email Studio Exclusion ScriptsFree
    Custom List DetectiveAllows you to block sending and subscribing all contacts with specified Email Address username (for example admin@) or domain (for example @competitor.com). Custom rules are applied for all current and future Business Units.Custom List DetectiveFree
    Custom List Detective AllowlistOn top of Custom List Detective you can also ask Support to add specific usernames or domains to Allowlist. Might be useful, as this setting will overwrite the standard List Detective.Custom List DetectiveFree
    Email AttachmentsAllows you to send emails with attachments.Email AttachmentsPaid
    Preserve Reply AttachmentsForwards attachments added to the reply email via RMM's auto-forwarding.Reply Mail ManagementFree
    Enhanced Sender ProfileAllows you to personalise the From Name and From Address per each Subscriber using AMPScript.Personalised Sender Profile?
    Email ArchivingAllows you to save a copy of your Emails of particular Send Classification to Enhanced FTPEmail ArchivingPaid
    Email Send ThrottleAllows you to control both the maximum amount of messages pushed in a given timeframe, as well as the hours when the sends occur.Send ThrottleFree
    CC and BCC for EmailAllows you to use CC and BCC in your Emails. You can even use personalisation strings for it (f.e. %%AccountOwnerEmail%%). Watch out for unsubscription rules!Select AudienceFree
    Additional Email AttributesAllows you to use custom email attributes to use for personalisation. Perfect for tracking links. You can ask Support to enable more than default 5.Additional Email AttributesFree
    MicrositesAllows you to access a Classic view from the Email Studio - Content and create Microsites. As it is a legacy feature that is being sunset, you will need a strong business use case to get it.N/AFree
    Custom Preference Center LinksSFMC has a set of personalisation strings for preference management: %%subscription_center_url%%, %%profile_center_url%%, %%unsub_center_url%%. By default they link to the respective out-of-the-box pages, but support can redirect them to any other URL on requestN/AFree
    Custom List-Unsubscribe Header LinkSFMC automatically unsubscribes your contacts from the list assigned to the email when List Unsubscribe is triggered. Support can redirect it to any other URL (like Preference Center or custom Cloud Page handler).N/AFree
    Custom Transactional Email Header & FooterYou can ask Salesforce Support to update your transactional emails header and footerN/AFree

    Mobile Studio Features

    Feature NameDescriptionDocumentationType
    SMS Send LogAllows you to log send-time data about your SMS. Requires two features: SMS Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both.SMS Send Logging Data ExtensionFree
    Push Send LogAllows you to log send-time data about your push notifications. Requires two features: Push Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both.Push Notification Send Logging Data ExtensionFree

    Analytics Builder Features

    Feature NameDescriptionDocumentationType
    Datorama Reports AdvancedAllows you to customize and create dashboards, add dimensions and measurements, track cross-channel engagement and query the data. Replaced the Discover Reporting Tool.Datorama Reports AdvancedPaid
    Custom ReportsAllows you to request creating a new Report aligned with your needs.N/APaid
    Account Utilisation ReportAd hoc request to get the current utilisation status of Super Messages.N/AFree

    There are some additional analytics and tracking related features within Automation Studio Features - Data Extract Types. For example Include User Agent Information, Unique Clicks and Opens, Campaing ID and more.

    Interaction Studio Features

    Feature NameDescriptionDocumentationType
    GuardianContinuously monitors additional metrics like clicks, events and impressions gathered from your site, web application, or mobile app.Interaction Studio GuardianFree

    Journey Builder Features

    Feature NameDescriptionDocumentationType
    Exclusion Scripts for Email ActivityAllows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Email Studio. Ask for both.Journey Builder Exclusion ScriptsFree
    Salesforce Activities for Single OrgBy default integrated Single Org SFMC can use Salesforce Journey Activities (both Data Entry as well as Data Update ones) only on Parent BU, but Support can unlock those also for all Child BUsN/AFree

    Automation Studio Features

    Feature NameDescriptionDocumentationType
    Data Extract TypesAdds various Data Extract Activity options in Automation Studio. Don't feel limited by the list available in the documentation. There are multiple other available, for example: Delete File From ET FTP or Safehouse, Enhanced FTP File Move and Copy, Custom DE Extract With Zip, Data Extension Extract with File Encoding BOM and gzip. Just state what you need, and there is a big chance there is a ready solution that can be enabled. And if not - check next point.Data Extract ActivityFree
    Custom Data Extract TypesIf the Standard On-Demand Data Extract Types are not enough, you can request creating a custom one to suit your needs.N/APaid
    Salesforce Objects & Reports ImportIf you are using Marketing Cloud Connect, you can ask Support to enable additional Import Activity Type to pull Objects and Reports to Salesforce Data Extensions folder.Import ActivityFree
    Additional Automation ActivitiesYou can ask Support to enable a few additional Automation Activities focused on Journey Builder and Salesforce integration.On-Demand Activities?
    Allow Blank File ProcessingBy default, if your import activity encounters blank file, it will error out. This Business Rule allows it to continue the processing as normal.N/AFree

    Contact Builder Features

    Feature NameDescriptionDocumentationType
    Custom Data Extension TemplatesAllows you to request the creation of a custom Data Extension template that users can later use to auto-populate DE configuration.N/APaid
    Custom Data ViewsAllows you to request the creation of Custom Data View. Mindblowing option.Example Custom Data ViewPaid
    Data Extension IndexRequired for ClaimRow() AMPScript function and an option of last resort for performance optimization in some cases.Applying an Index to a Data ExtensionFree

    Developer Features

    Feature NameDescriptionDocumentationType
    SOAP Triggered Send PrioritizationAllows you to declare priority for your Triggered Sends created via API.Triggered Send PriorityFree
    SOAP Disable Datetime NormalisationBy default dates coming to Marketing Cloud via SOAP API will be normalised. You can ask to disable it.Datetime NormalisationFree
    Salesforce AMPScript Functions for Single OrgBy default integrated Single Org SFMC can use Salesforce AMPScript functions (like RetrieveSalesforceObjects) only on Parent BU, but Support can unlock those also for all Child BUsN/AFree
    You Should Know

    Some features are currently added Out of the Box for new Salesforce Marketing Cloud deployments but were not in the past. If you are rocking old instance, you might also be interested in features like:

    • Script Activity for Automation Studio: use SSJS in your Automations
    • Shared Folders for Content Builder: make your Content available across multiple Business Units
    • Profile Attributes for Email Studio: Subscriber attributes stored at All Subscribers level and available for personalisation
    • Brand Builder: allows you to style Salesforce Marketing Cloud a bit by using accent colours and adding your company logo.
    - - +

    SFMC Features On Demand

    Discover the Salesforce Marketing Cloud's Features On Demand and unlock platform potential.

    +

    What are Marketing Cloud's Features On Demand?

    +

    Salesforce Marketing Cloud is full of features straight out of the box. You can spend hours going through various panels and menus, discovering more options to make the instance your own and align it to the business needs.

    +

    There is, however, a group of features that you won't be able to find. Salesforce hid them until you ask the Support (Free) or Account Executive (Paid) to unlock them. SFMC Features On Demand.

    +

    Why are they not available by default? There are various reasons:

    +
      +
    1. Some require irreversible changes, so Salesforce wants to be sure you know what you want.
    2. +
    3. Some are putting a strain on the backend, so it is better to keep them off by default and enable only when a client needs them.
    4. +
    5. Some have an additional cost and require a purchase before enabling.
    6. +
    7. Some are dependent on specific modules, so there is no need to have them by default.
    8. +
    9. Some will probably be added as a standard in the future (just as it has been done with previously on-demand Profile Attributes, Script Activity, Shared Folders and others - more on that in the bottom).
    10. +
    11. Some are no longer provided even when you ask (sweet, sweet Code Activity for Journey Builder...)
    12. +
    +

    I always wanted to have a full list of those features but could never find it. So here it is.

    +
    You Should Know

    This document is a living thing. Salesforce adds, deletes and updates the Features On Demand with Marketing Cloud releases. I try to keep it up-to-date, but your help with this task will be appreciated.

    If you found anything below no longer correct or know yet another hidden SFMC feature - please let me know.

    +

    Marketing Cloud Settings Features

    +
    Feature NameDescriptionDocumentationType
    Basic Audit TrailCaptures information about SFMC access and security changes.Audit TrailFree
    Advanced Audit TrailCaptures Basic Audit Trail Events and critical events around Emails, MobileConnect, Mobile Push, Cloud Pages, Automations, Journeys and Google Analytics Integration.Audit TrailPaid
    Smart Alerts for Marketing CloudEnables automatic notification for Marketing Cloud problems like slow Email Send speed, Journeys starting without contacts, Automation issues, etc.Proactive Services for Marketing CloudPaid
    Multi-Org AccountAllows you to connect different Sales/Service Cloud Orgs for each Marketing Cloud Business Unit. It is not reversible.Multi-Org AccountFree
    Restore Encryption at Rest KeyIf you revoked (Bring Your Own) Key for Encryption at Rest, this allows you to restore the key and retain the data if you act fastRestore SFMC Encryption Key?
    SSO MetadataAllows you to implement Single Sign-On for your Marketing Cloud instance.SSO ImplementationFree
    Custom Access Permissions for SFTPYou can ask Support to configure per-folder permissions for your FTP usersN/AFree
    SFTP Limited AccessYou can ask Salesforce Support to limit an SFTP User access to only specific SFTP FoldersN/AFree
    +

    Deliverability Features

    +
    Feature NameDescriptionDocumentationType
    Sender Authentication PackageSAP is a collection of products including Private Domain with link and image wrapping (unique for SAP), Dedicated IP, and Reply Mail Management. Must-have.SAPPaid
    Additional Dedicated IPYou can purchase additional dedicated IPs to manage more significant volumes or split communication types.Dedicated IPPaid
    Additional Private DomainYou can purchase additional private domains to differentiate various communication types. This feature does not cover link and image branding.Private DomainsPaid
    SSLSecures your traffic and gives that sweet HTTPS, a must-have nowadays. Once purchased, configuration is now self-serve in SFMC Setup.SSL CertificatePaid
    Reputation Audit TestAd hoc request allows you to receive information about the current state of the blacklists, authentication, DNS and content reviews (spam assessment) for your dedicated IPs.Reputation AuditFree
    Reputation Audit Account[Deprecated] Allows you to receive a dedicated account to Reputation Audit tool so that you can check the state of your dedicated IPs without creating recurring Reputation Audit Test requests. No longer supported.Reputation AuditN/A
    Bounce Detective[Deprecated] Sends email alerts when recent send has an elevated bounce rate at any domain with 25+ recipients and provides per-domain bounce-focused analysis. No longer supported.Bounce DetectiveN/A
    Sender RatingProvides a breakdown of current deliverability-focused sending scores, with trends, in a visually digestible format.Sender RatingFree
    Dedicated IP Custom ConfigurationBy default, if you have multiple dedicated IPs, your communication will use all of them by splitting the volume into 5000 emails batches and rotating the available IPs to push those. You can also assign a specific IP to a particular Delivery Profile. However, with the help of Support, you can create hybrid solutions like pools of few IPs per each delivery profile. It might be crucial for massive senders.N/AFree
    MTA Email ThrottleApart from Email Studio Throttle feature focused on controlling engagement stream there is a deliverability-focused throttle added to a selected dedicated domain(s) on the MTA level. Perfect to limit send speed for reputation building purposes.N/AFree
    +

    Email Studio Features

    +
    Feature NameDescriptionDocumentationType
    CAN-SPAM Compliance CheckMarketing Cloud by default requires you to be compliant with US CAN-SPAM regulation by enforcing Commercial / Transactional split of messages and requiring specific data to be available in the email footer. If you are sending to non-US recipients, you can ask to switch off that requirementCAN-SPAM ComplianceFree
    Email Send LogAllows you to log send-time data about your emails. Requires two features: Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule (it can be set to Blank, _AUTO or ENT._AUTO depending on whether you want Send Log to ignore errors, capture Business Unit sends or all Account sends respectively). Ask for both.Send Logging in Email StudioFree
    Auto-Suppression ListAllows you to suppress Contacts from receiving any Emails from the whole instance or specific classification and Business Unit. No need to attach to each send as with standard Suppression Lists.Auto-Suppression ListsFree
    Exclusion ScriptsAllows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Journey Builder Emails. Ask for both.Email Studio Exclusion ScriptsFree
    Custom List DetectiveAllows you to block sending and subscribing all contacts with specified Email Address username (for example admin@) or domain (for example @competitor.com). Custom rules are applied for all current and future Business Units.Custom List DetectiveFree
    Custom List Detective AllowlistOn top of Custom List Detective you can also ask Support to add specific usernames or domains to Allowlist. Might be useful, as this setting will overwrite the standard List Detective.Custom List DetectiveFree
    Email AttachmentsAllows you to send emails with attachments.Email AttachmentsPaid
    Preserve Reply AttachmentsForwards attachments added to the reply email via RMM's auto-forwarding.Reply Mail ManagementFree
    Enhanced Sender ProfileAllows you to personalise the From Name and From Address per each Subscriber using AMPScript.Personalised Sender Profile?
    Email ArchivingAllows you to save a copy of your Emails of particular Send Classification to Enhanced FTPEmail ArchivingPaid
    Email Send ThrottleAllows you to control both the maximum amount of messages pushed in a given timeframe, as well as the hours when the sends occur.Send ThrottleFree
    CC and BCC for EmailAllows you to use CC and BCC in your Emails. You can even use personalisation strings for it (f.e. %%AccountOwnerEmail%%). Watch out for unsubscription rules!Select AudienceFree
    Additional Email AttributesAllows you to use custom email attributes to use for personalisation. Perfect for tracking links. You can ask Support to enable more than default 5.Additional Email AttributesFree
    MicrositesAllows you to access a Classic view from the Email Studio - Content and create Microsites. As it is a legacy feature that is being sunset, you will need a strong business use case to get it.N/AFree
    Custom Preference Center LinksSFMC has a set of personalisation strings for preference management: %%subscription_center_url%%, %%profile_center_url%%, %%unsub_center_url%%. By default they link to the respective out-of-the-box pages, but support can redirect them to any other URL on requestN/AFree
    Custom List-Unsubscribe Header LinkSFMC automatically unsubscribes your contacts from the list assigned to the email when List Unsubscribe is triggered. Support can redirect it to any other URL (like Preference Center or custom Cloud Page handler).N/AFree
    Custom Transactional Email Header & FooterYou can ask Salesforce Support to update your transactional emails header and footerN/AFree
    +

    Mobile Studio Features

    +
    Feature NameDescriptionDocumentationType
    SMS Send LogAllows you to log send-time data about your SMS. Requires two features: SMS Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both.SMS Send Logging Data ExtensionFree
    Push Send LogAllows you to log send-time data about your push notifications. Requires two features: Push Send Log Data Extension Template and Business Rule on the backend of SFMC to populate Data Extension based on this template. If your Send Log doesn't work, you probably miss the Business Rule. Ask for both.Push Notification Send Logging Data ExtensionFree
    +

    Analytics Builder Features

    +
    Feature NameDescriptionDocumentationType
    Datorama Reports AdvancedAllows you to customize and create dashboards, add dimensions and measurements, track cross-channel engagement and query the data. Replaced the Discover Reporting Tool.Datorama Reports AdvancedPaid
    Custom ReportsAllows you to request creating a new Report aligned with your needs.N/APaid
    Account Utilisation ReportAd hoc request to get the current utilisation status of Super Messages.N/AFree
    +

    There are some additional analytics and tracking related features within Automation Studio Features - Data Extract Types. For example Include User Agent Information, Unique Clicks and Opens, Campaing ID and more.

    +

    Interaction Studio Features

    +
    Feature NameDescriptionDocumentationType
    GuardianContinuously monitors additional metrics like clicks, events and impressions gathered from your site, web application, or mobile app.Interaction Studio GuardianFree
    +

    Journey Builder Features

    +
    Feature NameDescriptionDocumentationType
    Exclusion Scripts for Email ActivityAllows you to define custom exclusion logic evaluated at send time using AMPScript. If possible, use segmentation, suppression and auto-suppression lists due to performance reasons, but in some cases, Exclusion Script might be the only way. There is also a matching feature for Email Studio. Ask for both.Journey Builder Exclusion ScriptsFree
    Salesforce Activities for Single OrgBy default integrated Single Org SFMC can use Salesforce Journey Activities (both Data Entry as well as Data Update ones) only on Parent BU, but Support can unlock those also for all Child BUsN/AFree
    +

    Automation Studio Features

    +
    Feature NameDescriptionDocumentationType
    Data Extract TypesAdds various Data Extract Activity options in Automation Studio. Don't feel limited by the list available in the documentation. There are multiple other available, for example: Delete File From ET FTP or Safehouse, Enhanced FTP File Move and Copy, Custom DE Extract With Zip, Data Extension Extract with File Encoding BOM and gzip. Just state what you need, and there is a big chance there is a ready solution that can be enabled. And if not - check next point.Data Extract ActivityFree
    Custom Data Extract TypesIf the Standard On-Demand Data Extract Types are not enough, you can request creating a custom one to suit your needs.N/APaid
    Salesforce Objects & Reports ImportIf you are using Marketing Cloud Connect, you can ask Support to enable additional Import Activity Type to pull Objects and Reports to Salesforce Data Extensions folder.Import ActivityFree
    Additional Automation ActivitiesYou can ask Support to enable a few additional Automation Activities focused on Journey Builder and Salesforce integration.On-Demand Activities?
    Allow Blank File ProcessingBy default, if your import activity encounters blank file, it will error out. This Business Rule allows it to continue the processing as normal.N/AFree
    +

    Contact Builder Features

    +
    Feature NameDescriptionDocumentationType
    Custom Data Extension TemplatesAllows you to request the creation of a custom Data Extension template that users can later use to auto-populate DE configuration.N/APaid
    Custom Data ViewsAllows you to request the creation of Custom Data View. Mindblowing option.Example Custom Data ViewPaid
    Data Extension IndexRequired for ClaimRow() AMPScript function and an option of last resort for performance optimization in some cases.Applying an Index to a Data ExtensionFree
    +

    Developer Features

    +
    Feature NameDescriptionDocumentationType
    SOAP Triggered Send PrioritizationAllows you to declare priority for your Triggered Sends created via API.Triggered Send PriorityFree
    SOAP Disable Datetime NormalisationBy default dates coming to Marketing Cloud via SOAP API will be normalised. You can ask to disable it.Datetime NormalisationFree
    Salesforce AMPScript Functions for Single OrgBy default integrated Single Org SFMC can use Salesforce AMPScript functions (like RetrieveSalesforceObjects) only on Parent BU, but Support can unlock those also for all Child BUsN/AFree
    +
    You Should Know

    Some features are currently added Out of the Box for new Salesforce Marketing Cloud deployments but were not in the past. If you are rocking old instance, you might also be interested in features like:

      +
    • Script Activity for Automation Studio: use SSJS in your Automations
    • +
    • Shared Folders for Content Builder: make your Content available across multiple Business Units
    • +
    • Profile Attributes for Email Studio: Subscriber attributes stored at All Subscribers level and available for personalisation
    • +
    • Brand Builder: allows you to style Salesforce Marketing Cloud a bit by using accent colours and adding your company logo.
    • +
    \ No newline at end of file diff --git a/docs/config/sfmc-mcc-integration-patterns/index.html b/docs/config/sfmc-mcc-integration-patterns/index.html index b7a9e8e5e..6368b4170 100644 --- a/docs/config/sfmc-mcc-integration-patterns/index.html +++ b/docs/config/sfmc-mcc-integration-patterns/index.html @@ -1,22 +1,165 @@ - + - -SFMC MCC Integration Patterns | Mateusz Dąbrowski + +SFMC MCC Integration Patterns | Mateusz Dąbrowski - - - + + + -
    -

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    Marketing Cloud Connect Basics

    So you have Salesforce CRM & Marketing Cloud and want to integrate them to create data-driven, personalised customer engagement. Perfect idea, but don't start without throughout planning.

    Unfortunately, Marketing Cloud is not (yet?) on the same Lightning Platform as the Salesforce CRM (be it Sales Cloud, Service Cloud, Health Cloud or what-have-you). It means that the data from one tool is not available out-of-the-box in the other for instant use.

    Fortunately, an out-of-the-box integration suite made by Salesforce called Marketing Cloud Connect (MCC) lets you use those tools in tandem. It offers many features ranging from simple data sync between the platforms, through dedicated Journey Builder activities and AMPScript functions, to reporting feedback loop and extended marketing features for the CRM. Using it also means no need for custom API calls eating up the licence limits.

    The connector is flexible and provides a wide range of configuration options to meet your organisation's needs. That's perfect, but it also means you must architect how you want the connection to work. It is especially true for the very initial step of deciding on the integration approach between the CRM(s) and SFMC(s), as configuration won't be (easily or even at all) reversible after the initial choice is made.

    In this article, I will share quirks and features of possible integration patterns and help you make the right choice from the start. Let's dive in.

    Single-Org vs Multi-Org

    When discussing Marketing Cloud Connect, the key thing to understand is the difference between Single-Org and Multi-Org SFMC configuration and their limits.

    By default, each Marketing Cloud instance is configured as a Single-Org. It means it can connect to only one Salesforce CRM Org. The integration is done on SFMC's Parent Business Unit level, and benefits are shared across all available Business Units. It's a straightforward setup with two fundamental limitations: only one CRM Org can be integrated, and all Business Units have access to the same integration scope (data, permissions, features).

    You Should Know

    If you don't see some MCC features on Child Business Units on integrated Single-Org - create a Salesforce Support ticket. Some of the inheritance rules need to be enabled on the backend. It should be applied out-of-the-box, but sometimes it needs one more push.

    In most cases, when one of those limitations is against the business needs, the solution is to go Multi-Org. However, take that decision seriously - Multi-Org configuration can be enabled only by Salesforce Support, and it is not reversible (it is so important, I will repeat it few times in this article). Multi-Org has some limitations, and the only way to return to Single-Org is to get a completely new Salesforce Marketing Cloud Account.

    Key differencesSingle-OrgMulti-Org
    Integrated SF CRM Orgs11 or many
    Integrated SFMC Business UnitsAllAny or All
    Connected SF Integration Users11 or many
    Integrated SFMC Business Units
    per single SF Integration User
    AllUp to 5
    Synchronised Data Extension
    Configuration and Filtering
    SharedShared per Integration User
    Synchronised Data Extension VisibilityParent only or AllAll integrated
    Shared Data ExtensionSupportedSupported
    Shared Salesforce Data ExtensionSupportedNot Supported
    Profile/Preference CenterStandard or CustomCustom only
    Profile Attributes CRM SyncAutomaticCustom Automation only
    Web CollectSupportedNot Supported
    Disconnecting MCC IntegrationOn Parent for whole SFMCOn per Business Unit basis

    Additional MCC Considerations

    On top of the differences showcased above, there are a few other things that you should keep in mind:

    1. You can change Single-Org to Multi-Org anytime (existing integration will stay at Parent BU). You cannot change Multi-Org to Single-Org.
    2. All Contact, Lead and User Synchronized Data Extensions records will be automatically added to the All Contacts list and counted against your licence limit.
    3. With Multi-Org, you need to manage the duplicate Subscribers risk. If the same Contact, Lead or User exists in multiple integrated SF Orgs, it will have a different Contact ID in each of them and thus will be created as a separate Contact in SFMC.
    4. You can only partially limit access to data between Business Units. There are some options to make data belonging to other BUs harder to see (like All Subscribers List filters or denied Shared Data Extensions permissions). Still, in the end, someone determined will be able to access the data, for example, through AMPScript/SSJS/SQL. The only currently available approach to fully silo the data is to have separate Salesforce Marketing Cloud Accounts.
    5. You cannot connect multiple Salesforce CRM Orgs to a single Marketing Cloud Business Unit (unless you do it partially via the API or using merge org pattern).
    6. You cannot connect one Salesforce CRM Org to multiple Marketing Cloud Accounts (separate SFMCs) using Marketing Cloud Connect.

    Marketing Cloud Connect Patterns

    With a high-level overview and fundamental limitations covered, let's discuss various possible integration patterns with their pros, cons and best-matched use cases.

    Single-Org Patterns

    The default Salesforce Marketing Cloud configuration allows you to connect all Business Units to a single Salesforce CRM Org using the official Marketing Cloud Connect integration tool.

    Single Business Unit Single-Org Setup

    It is your choice if you have:

    • one Salesforce CRM Org and
    • one SFMC Business Unit

    Keep it simple and rejoice in straightforward architecture with no limitations.

    Multiple Business Units Single-Org Setup

    It might be your choice if you have:

    • one Salesforce CRM Org and
    • multiple SFMC Business Units

    It is perfect if you are ok with all Business Units having the same configuration and filters applied. It brings simplicity and unlimited Business Unit scaling.

    However, if you need to have different objects or scopes of Contacts/Leads/Users synchronised to each Business Unit, you will have to go with Filtered Multi-Org Setup. Keep in mind that by doing so, you will:

    • need separate Integration Users for each version of configuration/filtering
    • loose possibility to hide Synchronized Data Extensions on Child Business Units
    • loose Shared Salesforce Data Extensions
    • loose Standard Profile Center
    • loose Web Collect

    And as going Multi-Org is non-reversible, you should be 110% certain that custom configuration/filters are worth it.

    API Extended Single-Org Setup

    It might (but shouldn't) be your choice if you have:

    • one production Salesforce CRM Org and
    • one developer Salesforce CRM Org and
    • multiple SFMC Business Units

    I wouldn't recommend this approach. In most cases, it is much better to either go with Basic Multi-Org Setup or Multiple BU Single-Org Setup and have test data in production CRM.

    When might this pattern be the right one for you?

    1. You have dozens of SFMC Business Units.
    2. You want to use only one Integration User.
    3. You want to avoid having dev/test data on production SF CRM.

    However, calculate the implementation cost of custom API integration and check the API licence limits, as you might find that going with Multi-Org will be better and cheaper in the end.

    Additionally, this approach pushes both test and production data to your Dev & Test Business Unit (as you cannot limit the Single-Org MCC integration scope), which creates a risk of sending test assets to actual customers.

    Merge-Org Setup

    It might be your choice if you have:

    • multiple Salesforce CRM Orgs and
    • single SFMC with one or many Business Units

    This approach moves the complexity from Marketing Cloud Connect to Salesforce CRM. Using one SF Org as a Merge Org where the data from multiple other Orgs is synchronised, we can create simple MCC Single-Org integration covering all available Business Units.

    Of course, it has (considerable) drawbacks:

    1. Cost & Complexity - you need to have (and integrate into the data pipeline) yet another Salesforce CRM Org to serve as a Merge Org.
    2. Real-timeness - as there is an additional step in the integration (Merge Org), the data sync loop will be slower.

    Due to the above, I would only consider this approach when you need data from multiple Salesforce CRMs in a single Business Unit and full support for Marketing Cloud Connect features (f.e. SF Journey Builder Activities and Entries).

    Multi-Org Patterns

    The optional Salesforce Marketing Cloud configuration allows you to connect multiple Salesforce CRM Orgs to various Business Units or differentiate synchronised data filters on each Business Unit. You can enable it with a Support request but keep in mind it is not reversible - once it's switched on, there is no going back to Single-Org.

    Basic Multi-Org Setup

    It might be your choice if you have:

    • one production Salesforce CRM Org and
    • one developer Salesforce CRM Org and
    • multiple SFMC Business Units

    This pattern covers one of the most popular Multi-Org setups where you have between one and five production Business Units connected to the production Salesforce CRM Org and want a complete testing suite with dedicated Dev & Test Business Unit connected to a SF CRM Dev Org. It is the closest you can get to CI/CD due to the lack of a true SFMC sandbox offering.

    It is a much cleaner approach than the API Extended Single-Org Setup, and it doesn't have significant cons other than standard Multi-Org limitations.

    If you have more than five production Business Units or need different data filters per each production Business Unit, you will need to go with Filtered Multi-Org Setup instead.

    Complex Multi-Org Setup

    It might be your choice if you have:

    • multiple Salesforce CRM Orgs and
    • multiple SFMC Business Units

    This pattern is where Multi-Org truly shines. Multiple CRMs (production, sandbox or dev) and multiple Business Units connected in various configurations - a prevalent approach for enterprises where each country or brand can have a separate CRM and dedicated SFMC Business Unit.

    You can plan 1 CRM to 1 BU integrations, 1 CRM to multiple Business Units integrations and even keep some Business Units not integrated (for example, for markets using non-SF CRMs). This flexibility results in complexity, as each integration will require a separate configuration, connection and data pipeline.

    If you want to connect more than five production Business Units to a single CRM within this setup, you will need to mix this approach with Filtered Multi-Org Setup.

    Filtered Multi-Org Setup

    It might be your choice if you have:

    • multiple Salesforce CRM Orgs and
    • multiple SFMC Business Units

    This pattern leverages multiple CRM Integration Users per single CRM to get around two limitations of Marketing Cloud Connect:

    1. One CRM Integration User share Object synchronisation configuration and filters across all integrated Business Units.
    2. One CRM Integration User in Multi-Org Setup can integrate up to five Business Units before the integration performance and stability are impacted.

    As you can see, both cases are per one CRM Integration User. And while you are limited to only one Marketing Cloud Connect in a single Salesforce CRM, you can have multiple Integration Users connecting to the target Marketing Cloud Account. It allows you to go around both those issues - and is now easier than ever on your licence costs with freshly introduced five free CRM integration users.

    You Should Know

    The workaround for up to five BUs limitation is straightforward - you create multiple integration users and connect each of them to up to five Business Units.

    The same is true for different Object configurations - for each Integration User you can choose other Objects and fields to synchronise.

    The workaround for unique filters adds a bit of complexity. While the filter setup can also be set per integration user just as the Object sync configuration, the filtering options are limited - with the most useful field-based filter available only on booleans.

    You can make the most of it by creating checkbox flags for your filters, for example, IsGermanContact, IsUnitedStatesContact and IsPolishContact fields that match the country (or brand, or contact type) assignment of a Contact record.

    Keep in mind that those checkboxes cannot be calculated using a formula. You will need to fill them in using the default value, Apex Trigger or Flow (generally any means that triggers record update).

    Additionally, you can leverage Integration User permissions for scope limitationso that you can layer different filters. For example - limit permissions to only one RecordType and use boolean to flag records within that RecordType that have consent.

    Marketing Cloud Connect Best Practices

    Plan before you do

    Abraham Lincoln once said "give me six hours to chop down a tree, and I will spend the first four sharpening the axe". While this is an excellent maxim for most Marketing Cloud work, it is especially true for Marketing Cloud Connect configuration. In the best case, the wrong decision can add you hours of work. In worst - it locks you with a suboptimal setup you can change only by purchasing a fresh Marketing Cloud Account. Plan, read up, check and recheck before you commit to the work.

    Document what you do

    Marketing Cloud Connect integration is complex, and - especially with Multi-Org - many configurations, usernames and passwords are involved. Document all of that. It will save you hours or days in the future.

    Use dedicated emails

    When implementing Marketing Cloud Connect, you will need to create (sometimes a lot of) Integration Users. Don't use individual email addresses. Always make a dedicated group email inbox that will be used for those integration users. Employees come and go, and the last thing you want is to rebuild the whole integration from scratch on production because you cannot access the inbox of an employee that left a year ago.

    Manage the data

    Marketing Cloud Connect lets you move the data between the clouds. A lot of data. It can impact the performance of your platform and even create compliance risks. Always try to minimise the amount and visibility of the data to what is truly necessary.

    1. Don't synchronise all Objects - pick only those truly needed.
    2. Even if you have to synchronise useless prerequisite Objects, use synchronisation filters to stop the data from flowing. This is especially true for Leads and User Objects that are required but, in many cases, not needed. The easiest way to do so is to add on those Objects a IsSynced checkbox that defaults to false and use it as a synchronisation filter.
    3. Don't synchronise all fields - pick only those truly needed.
    4. If you go Multi-Org, consider using different filters per Business Unit as suggested in Filtered Multi-Org Setup.
    5. If you go Multi-Org, make the Parent Business Unit an administrative BU, not a production one. Parent will have visibility over data from all the integrations, which can lead to compliance issues in many setups.
    6. If you go Multi-Org, be wary of duplicates - if you have the same Contact in two CRMs, those will have different Salesforce IDs and, therefore, will be created as two separate Contacts in SFMC (and eat up your licence contact count limit appropriately).

    Don't use Synchronized Data Extensions directly

    Synchronised Data Extensions are fantastic - they get updated every 15 minutes with fresh data from Salesforce CRM. However, I wouldn't recommend using them directly as Journey Entries or segmentation/decisioning logic. If there is an issue with the Marketing Cloud Connect (be it a rare backend one or a more frequent user error), the Synchronized Data Extensions will disappear along with all the data. It will also break dependent Journeys.

    Moreover, if you use a Multi-Org setup, Synchronised Data Extensions from subsequent integrations get a numeric suffix in their name. When the integration breaks, their name might change to a different suffix, breaking all your SQL queries.

    I recommend creating Master Data Extensions that will capture all the needed data points from Synchronized Data Extensions and keep them updated with Automation Studio Query Activities. Then, use those Master Data Extensions for all your Journey, segmentation and decisioning needs instead of directly pulling from Synchronized DEs.

    This approach will provide two security layers:

    1. Master Data Extensions will not disappear even when there is an issue with Marketing Cloud Connect, meaning that the dependent assets will not break.
    2. Master Data Extensions will keep the last synchronised version of data during the MCC crash, letting segmentation and decisioning work correctly on slightly older data while you fix the sync.

    Of course, there is one downside to this approach. As you need to use Automation Studio to copy Synchronised Data Extensions data to your Master Data Extensions, it will add 60 minutes (minimum Automation Studio schedule) to the 15-minute (minimum Marketing Cloud Connect schedule) delay in the real-timeness. Still, this is a small price for security and peace of mind.

    - - +

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    +

    Marketing Cloud Connect Basics

    +

    So you have Salesforce CRM & Marketing Cloud and want to integrate them to create data-driven, personalised customer engagement. Perfect idea, but don't start without throughout planning.

    +

    Unfortunately, Marketing Cloud is not (yet?) on the same Lightning Platform as the Salesforce CRM (be it Sales Cloud, Service Cloud, Health Cloud or what-have-you). It means that the data from one tool is not available out-of-the-box in the other for instant use.

    +

    Fortunately, an out-of-the-box integration suite made by Salesforce called Marketing Cloud Connect (MCC) lets you use those tools in tandem. It offers many features ranging from simple data sync between the platforms, through dedicated Journey Builder activities and AMPScript functions, to reporting feedback loop and extended marketing features for the CRM. Using it also means no need for custom API calls eating up the licence limits.

    +

    The connector is flexible and provides a wide range of configuration options to meet your organisation's needs. That's perfect, but it also means you must architect how you want the connection to work. It is especially true for the very initial step of deciding on the integration approach between the CRM(s) and SFMC(s), as configuration won't be (easily or even at all) reversible after the initial choice is made.

    +

    In this article, I will share quirks and features of possible integration patterns and help you make the right choice from the start. Let's dive in.

    +

    Single-Org vs Multi-Org

    +

    When discussing Marketing Cloud Connect, the key thing to understand is the difference between Single-Org and Multi-Org SFMC configuration and their limits.

    +

    By default, each Marketing Cloud instance is configured as a Single-Org. It means it can connect to only one Salesforce CRM Org. The integration is done on SFMC's Parent Business Unit level, and benefits are shared across all available Business Units. It's a straightforward setup with two fundamental limitations: only one CRM Org can be integrated, and all Business Units have access to the same integration scope (data, permissions, features).

    +
    You Should Know

    If you don't see some MCC features on Child Business Units on integrated Single-Org - create a Salesforce Support ticket. Some of the inheritance rules need to be enabled on the backend. It should be applied out-of-the-box, but sometimes it needs one more push.

    +

    In most cases, when one of those limitations is against the business needs, the solution is to go Multi-Org. However, take that decision seriously - Multi-Org configuration can be enabled only by Salesforce Support, and it is not reversible (it is so important, I will repeat it few times in this article). Multi-Org has some limitations, and the only way to return to Single-Org is to get a completely new Salesforce Marketing Cloud Account.

    +
    Key differencesSingle-OrgMulti-Org
    Integrated SF CRM Orgs11 or many
    Integrated SFMC Business UnitsAllAny or All
    Connected SF Integration Users11 or many
    Integrated SFMC Business Units
    per single SF Integration User
    AllUp to 5
    Synchronised Data Extension
    Configuration and Filtering
    SharedShared per Integration User
    Synchronised Data Extension VisibilityParent only or AllAll integrated
    Shared Data ExtensionSupportedSupported
    Shared Salesforce Data ExtensionSupportedNot Supported
    Profile/Preference CenterStandard or CustomCustom only
    Profile Attributes CRM SyncAutomaticCustom Automation only
    Web CollectSupportedNot Supported
    Disconnecting MCC IntegrationOn Parent for whole SFMCOn per Business Unit basis
    +

    Additional MCC Considerations

    +

    On top of the differences showcased above, there are a few other things that you should keep in mind:

    +
      +
    1. You can change Single-Org to Multi-Org anytime (existing integration will stay at Parent BU). You cannot change Multi-Org to Single-Org.
    2. +
    3. All Contact, Lead and User Synchronized Data Extensions records will be automatically added to the All Contacts list and counted against your licence limit.
    4. +
    5. With Multi-Org, you need to manage the duplicate Subscribers risk. If the same Contact, Lead or User exists in multiple integrated SF Orgs, it will have a different Contact ID in each of them and thus will be created as a separate Contact in SFMC.
    6. +
    7. You can only partially limit access to data between Business Units. There are some options to make data belonging to other BUs harder to see (like All Subscribers List filters or denied Shared Data Extensions permissions). Still, in the end, someone determined will be able to access the data, for example, through AMPScript/SSJS/SQL. The only currently available approach to fully silo the data is to have separate Salesforce Marketing Cloud Accounts.
    8. +
    9. You cannot connect multiple Salesforce CRM Orgs to a single Marketing Cloud Business Unit (unless you do it partially via the API or using merge org pattern).
    10. +
    11. You cannot connect one Salesforce CRM Org to multiple Marketing Cloud Accounts (separate SFMCs) using Marketing Cloud Connect.
    12. +
    +

    Marketing Cloud Connect Patterns

    +

    With a high-level overview and fundamental limitations covered, let's discuss various possible integration patterns with their pros, cons and best-matched use cases.

    +

    Single-Org Patterns

    +

    The default Salesforce Marketing Cloud configuration allows you to connect all Business Units to a single Salesforce CRM Org using the official Marketing Cloud Connect integration tool.

    +

    Single Business Unit Single-Org Setup

    + +

    It is your choice if you have:

    +
      +
    • one Salesforce CRM Org and
    • +
    • one SFMC Business Unit
    • +
    +

    Keep it simple and rejoice in straightforward architecture with no limitations.

    +

    Multiple Business Units Single-Org Setup

    + +

    It might be your choice if you have:

    +
      +
    • one Salesforce CRM Org and
    • +
    • multiple SFMC Business Units
    • +
    +

    It is perfect if you are ok with all Business Units having the same configuration and filters applied. It brings simplicity and unlimited Business Unit scaling.

    +

    However, if you need to have different objects or scopes of Contacts/Leads/Users synchronised to each Business Unit, you will have to go with Filtered Multi-Org Setup. Keep in mind that by doing so, you will:

    +
      +
    • need separate Integration Users for each version of configuration/filtering
    • +
    • loose possibility to hide Synchronized Data Extensions on Child Business Units
    • +
    • loose Shared Salesforce Data Extensions
    • +
    • loose Standard Profile Center
    • +
    • loose Web Collect
    • +
    +

    And as going Multi-Org is non-reversible, you should be 110% certain that custom configuration/filters are worth it.

    +

    API Extended Single-Org Setup

    + +

    It might (but shouldn't) be your choice if you have:

    +
      +
    • one production Salesforce CRM Org and
    • +
    • one developer Salesforce CRM Org and
    • +
    • multiple SFMC Business Units
    • +
    +

    I wouldn't recommend this approach. In most cases, it is much better to either go with Basic Multi-Org Setup or Multiple BU Single-Org Setup and have test data in production CRM.

    +

    When might this pattern be the right one for you?

    +
      +
    1. You have dozens of SFMC Business Units.
    2. +
    3. You want to use only one Integration User.
    4. +
    5. You want to avoid having dev/test data on production SF CRM.
    6. +
    +

    However, calculate the implementation cost of custom API integration and check the API licence limits, as you might find that going with Multi-Org will be better and cheaper in the end.

    +

    Additionally, this approach pushes both test and production data to your Dev & Test Business Unit (as you cannot limit the Single-Org MCC integration scope), which creates a risk of sending test assets to actual customers.

    +

    Merge-Org Setup

    + +

    It might be your choice if you have:

    +
      +
    • multiple Salesforce CRM Orgs and
    • +
    • single SFMC with one or many Business Units
    • +
    +

    This approach moves the complexity from Marketing Cloud Connect to Salesforce CRM. Using one SF Org as a Merge Org where the data from multiple other Orgs is synchronised, we can create simple MCC Single-Org integration covering all available Business Units.

    +

    Of course, it has (considerable) drawbacks:

    +
      +
    1. Cost & Complexity - you need to have (and integrate into the data pipeline) yet another Salesforce CRM Org to serve as a Merge Org.
    2. +
    3. Real-timeness - as there is an additional step in the integration (Merge Org), the data sync loop will be slower.
    4. +
    +

    Due to the above, I would only consider this approach when you need data from multiple Salesforce CRMs in a single Business Unit and full support for Marketing Cloud Connect features (f.e. SF Journey Builder Activities and Entries).

    +

    Multi-Org Patterns

    +

    The optional Salesforce Marketing Cloud configuration allows you to connect multiple Salesforce CRM Orgs to various Business Units or differentiate synchronised data filters on each Business Unit. You can enable it with a Support request but keep in mind it is not reversible - once it's switched on, there is no going back to Single-Org.

    +

    Basic Multi-Org Setup

    + +

    It might be your choice if you have:

    +
      +
    • one production Salesforce CRM Org and
    • +
    • one developer Salesforce CRM Org and
    • +
    • multiple SFMC Business Units
    • +
    +

    This pattern covers one of the most popular Multi-Org setups where you have between one and five production Business Units connected to the production Salesforce CRM Org and want a complete testing suite with dedicated Dev & Test Business Unit connected to a SF CRM Dev Org. It is the closest you can get to CI/CD due to the lack of a true SFMC sandbox offering.

    +

    It is a much cleaner approach than the API Extended Single-Org Setup, and it doesn't have significant cons other than standard Multi-Org limitations.

    +

    If you have more than five production Business Units or need different data filters per each production Business Unit, you will need to go with Filtered Multi-Org Setup instead.

    +

    Complex Multi-Org Setup

    + +

    It might be your choice if you have:

    +
      +
    • multiple Salesforce CRM Orgs and
    • +
    • multiple SFMC Business Units
    • +
    +

    This pattern is where Multi-Org truly shines. Multiple CRMs (production, sandbox or dev) and multiple Business Units connected in various configurations - a prevalent approach for enterprises where each country or brand can have a separate CRM and dedicated SFMC Business Unit.

    +

    You can plan 1 CRM to 1 BU integrations, 1 CRM to multiple Business Units integrations and even keep some Business Units not integrated (for example, for markets using non-SF CRMs). This flexibility results in complexity, as each integration will require a separate configuration, connection and data pipeline.

    +

    If you want to connect more than five production Business Units to a single CRM within this setup, you will need to mix this approach with Filtered Multi-Org Setup.

    +

    Filtered Multi-Org Setup

    + +

    It might be your choice if you have:

    +
      +
    • multiple Salesforce CRM Orgs and
    • +
    • multiple SFMC Business Units
    • +
    +

    This pattern leverages multiple CRM Integration Users per single CRM to get around two limitations of Marketing Cloud Connect:

    +
      +
    1. One CRM Integration User share Object synchronisation configuration and filters across all integrated Business Units.
    2. +
    3. One CRM Integration User in Multi-Org Setup can integrate up to five Business Units before the integration performance and stability are impacted.
    4. +
    +

    As you can see, both cases are per one CRM Integration User. And while you are limited to only one Marketing Cloud Connect in a single Salesforce CRM, you can have multiple Integration Users connecting to the target Marketing Cloud Account. It allows you to go around both those issues - and is now easier than ever on your licence costs with freshly introduced five free CRM integration users.

    +
    You Should Know

    The workaround for up to five BUs limitation is straightforward - you create multiple integration users and connect each of them to up to five Business Units.

    The same is true for different Object configurations - for each Integration User you can choose other Objects and fields to synchronise.

    The workaround for unique filters adds a bit of complexity. While the filter setup can also be set per integration user just as the Object sync configuration, the filtering options are limited - with the most useful field-based filter available only on booleans.

    You can make the most of it by creating checkbox flags for your filters, for example, IsGermanContact, IsUnitedStatesContact and IsPolishContact fields that match the country (or brand, or contact type) assignment of a Contact record.

    Keep in mind that those checkboxes cannot be calculated using a formula. You will need to fill them in using the default value, Apex Trigger or Flow (generally any means that triggers record update).

    Additionally, you can leverage Integration User permissions for scope limitationso that you can layer different filters. For example - limit permissions to only one RecordType and use boolean to flag records within that RecordType that have consent.

    +

    Marketing Cloud Connect Best Practices

    +

    Plan before you do

    +

    Abraham Lincoln once said "give me six hours to chop down a tree, and I will spend the first four sharpening the axe". While this is an excellent maxim for most Marketing Cloud work, it is especially true for Marketing Cloud Connect configuration. In the best case, the wrong decision can add you hours of work. In worst - it locks you with a suboptimal setup you can change only by purchasing a fresh Marketing Cloud Account. Plan, read up, check and recheck before you commit to the work.

    +

    Document what you do

    +

    Marketing Cloud Connect integration is complex, and - especially with Multi-Org - many configurations, usernames and passwords are involved. Document all of that. It will save you hours or days in the future.

    +

    Use dedicated emails

    +

    When implementing Marketing Cloud Connect, you will need to create (sometimes a lot of) Integration Users. Don't use individual email addresses. Always make a dedicated group email inbox that will be used for those integration users. Employees come and go, and the last thing you want is to rebuild the whole integration from scratch on production because you cannot access the inbox of an employee that left a year ago.

    +

    Manage the data

    +

    Marketing Cloud Connect lets you move the data between the clouds. A lot of data. It can impact the performance of your platform and even create compliance risks. Always try to minimise the amount and visibility of the data to what is truly necessary.

    +
      +
    1. Don't synchronise all Objects - pick only those truly needed.
    2. +
    3. Even if you have to synchronise useless prerequisite Objects, use synchronisation filters to stop the data from flowing. This is especially true for Leads and User Objects that are required but, in many cases, not needed. The easiest way to do so is to add on those Objects a IsSynced checkbox that defaults to false and use it as a synchronisation filter.
    4. +
    5. Don't synchronise all fields - pick only those truly needed.
    6. +
    7. If you go Multi-Org, consider using different filters per Business Unit as suggested in Filtered Multi-Org Setup.
    8. +
    9. If you go Multi-Org, make the Parent Business Unit an administrative BU, not a production one. Parent will have visibility over data from all the integrations, which can lead to compliance issues in many setups.
    10. +
    11. If you go Multi-Org, be wary of duplicates - if you have the same Contact in two CRMs, those will have different Salesforce IDs and, therefore, will be created as two separate Contacts in SFMC (and eat up your licence contact count limit appropriately).
    12. +
    +

    Don't use Synchronized Data Extensions directly

    +

    Synchronised Data Extensions are fantastic - they get updated every 15 minutes with fresh data from Salesforce CRM. However, I wouldn't recommend using them directly as Journey Entries or segmentation/decisioning logic. If there is an issue with the Marketing Cloud Connect (be it a rare backend one or a more frequent user error), the Synchronized Data Extensions will disappear along with all the data. It will also break dependent Journeys.

    +

    Moreover, if you use a Multi-Org setup, Synchronised Data Extensions from subsequent integrations get a numeric suffix in their name. When the integration breaks, their name might change to a different suffix, breaking all your SQL queries.

    +

    I recommend creating Master Data Extensions that will capture all the needed data points from Synchronized Data Extensions and keep them updated with Automation Studio Query Activities. Then, use those Master Data Extensions for all your Journey, segmentation and decisioning needs instead of directly pulling from Synchronized DEs.

    +

    This approach will provide two security layers:

    +
      +
    1. Master Data Extensions will not disappear even when there is an issue with Marketing Cloud Connect, meaning that the dependent assets will not break.
    2. +
    3. Master Data Extensions will keep the last synchronised version of data during the MCC crash, letting segmentation and decisioning work correctly on slightly older data while you fix the sync.
    4. +
    +

    Of course, there is one downside to this approach. As you need to use Automation Studio to copy Synchronised Data Extensions data to your Master Data Extensions, it will add 60 minutes (minimum Automation Studio schedule) to the 15-minute (minimum Marketing Cloud Connect schedule) delay in the real-timeness. Still, this is a small price for security and peace of mind.

    \ No newline at end of file diff --git a/docs/config/sfmc-mobile-connect-data-views/index.html b/docs/config/sfmc-mobile-connect-data-views/index.html index 50679bcad..2b48d14ad 100644 --- a/docs/config/sfmc-mobile-connect-data-views/index.html +++ b/docs/config/sfmc-mobile-connect-data-views/index.html @@ -1,22 +1,106 @@ - + - -SFMC Mobile Connect Data Views | Mateusz Dąbrowski + +SFMC Mobile Connect Data Views | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Mobile Connect Data Views

    Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    System Data Views

    Learn about SFMC System Data Views Basics and specific backend tables covering Email Studio, Journey Builder & Automation Studio data here.

    MobileConnect Data Views

    MobileConnect Data Views are unique, as most of them are no longer supported by Salesforce. But some still works. All those data views show data limited to a specific Business Unit.

    You Should Know

    Most of the MobileConnect data is assigned to Mobile Number, not Contact. It means that it might be shared by a few contacts (if multiple have the same mobile number set) or migrate between them (if the mobile number gets reassigned).

    It shouldn't be a big problem in B2C environments, as most people will have their mobile number and keep it long. However, remember that unused numbers might be recycled after a few years by telecom and go back to the market and given to a new user.

    Mobile number recycling is much more present in the B2B scenario, where there is a bigger chance for shared mobile numbers and much faster recycling of the numbers. Many companies reuse the phone number of the employees that left.

    When working with Mobile Number history of engagement and subscription, take this into consideration.

    _MobileAddress

    _MobileAddress Data View is officially not supported by Salesforce. But it's too good not to use it. And there is no replacement for it. Why? Because Marketing Cloud still uses this Data View as a backend data source for the MobileConnect Demographics Data.

    NameDescriptionData TypeNullable
    _MobileIDMobileConnect Contact IDNumberX
    _ContactIDGlobal Contact ID (not Contact Key)Number
    _MobileNumberMobile number for the subscriberText
    _StatusStatus of the ContactNumberX
    _SourceSource of the ContactNumberX
    _SourceObjectIdID of the object if _Source = 10TextX
    _PriorityIn case the contact uses multiple mobile numbers, the Priority field's value establishes the order in which to use those mobile numbers. _Priority = 1 is first in orderNumberX
    _ChannelCommunication channel. Used to be Mobile, now not in useTextX
    _CarrierIDNumeric code for the mobile carrier used by the contactNumber
    _CountryCodeTwo letter country codeText
    _CreatedDateDate the subscription was createdDate
    _CreatedByPerson responsible for contact creationDate
    _ModifiedByPerson responsible for contact modificationTextX
    _CityContact's CityTextX
    _StateContact's StateTextX
    _ZipCodeContact's Zip CodeTextX
    _FirstNameContact's First NameTextX
    _LastNameContact's Last NameTextX
    _UTCOffsetThe number of hours from which the user's time zone deviates from UTC. Defaults to 0NumberX
    _IsHonorDSTWhether the user's time zone observers Daylight Savings Time or not. Defaults to falseBooleanX

    When working with _MobileAddress Data View:

    1. There is no guarantee of how long it will work and how long the data will be correct. Be sure you are checking it periodically or - even better - have validation in your code.
    2. The rule of thumb when working with MobileConnect is to use the official, supported solutions. Only when they cannot deliver - check whether _MobileAddress can help.
    3. Do not use the User Interface editor in MobileConnect Demographics part of the Contact to edit information in this Data View. It is broken and overwrites all connected Mobile Numbers with a change made to just one. However, the changes are possible with SSJS - including ContactID and MobileNumber changes and limited merging. It is the most significant selling point of this Data View.
    4. _MobileAddress Data View is available in Data Designer within MobileConnect Attribute Group. It allows you to add custom fields to it that you can later leverage in sends.
    5. Whenever creating a MobileConnect Contact, be sure to provide the _MobileNumber with the dialling code prefix (without the + or 00). For example, Poland has a +48 dialling code and nine-digit numbers, so the correct format is 48123456789. Double-check whether _CountryCode is an appropriate two-letter code (for example, PL).
    6. The Contact may have multiple Mobile Numbers assigned, but it will receive communication only to the one with the highest _Priority.
    7. Whenever you add a Mobile Number to a new Contact, for all other Contacts with this number, it gets lower _Priority (SFMC assumes that it was transferred).
    8. _ContactID makes this Data View useful for cross-channel applications. New Data Views (_SMSSubscriptionLog and _SMSMessageTracking) have Subscriber Key information, but if the Mobile Number is shared, it won't provide the data.

    _MobileSubscription

    _MobileSubscription Data View is officially unsupported by Salesforce. Marketing Cloud still fills it with data, but there is no guarantee of how long it will persist or whether it will be correct.

    Worry not, there is a nearly identical Data View available and supported - _SMSSubscriptionLog.

    The new Data View contains nearly all the same fields (sans _CreatedBy and _ModifiedBy) and even adds three more (LogDate, SubscriberKey and MovileSubscriptionID).

    NameDescriptionData TypeNullable
    _SubscriptionDefinitionIDThe unique ID of the subscription recordText
    _MobileNumberMobile number for the subscriberText
    _OptOutStatusIDWhether the subscriber has opted out of SMS messagesTextX
    _OptOutMethodIDMethod the subscriber used to opt-out of SMS messagesTextX
    _OptOutDateDate, the subscriber, opted out of SMS messagesDateX
    _OptInStatusIDWhether the subscriber has opted-in to the SMS messagesText
    _OptInMethodIDMethod the subscriber used to opt-in to the SMS messagesTextX
    _OptInDateDate, the subscriber, opted-in to the SMS messagesDateX
    _SourceThe subscription sourceTextX
    _CreatedDateDate the subscription was createdDate
    _CreatedByPerson responsible for subscription creationTextX
    _ModifiedDateDate the subscription was modifiedDate
    _ModifiedByPerson responsible for the modificationTextX

    You shouldn't be working with _MobileSubscription Data View. Use _SMSSubscriptionLog instead.


    _SubscriberSMS

    _SubscriberSMS Data View is a legacy table. It is neither supported nor updated, and you won't have records there. Marketing Cloud used it in pre-MobileConnect times, so I do not recommend using it for any projects.

    NameDescriptionData TypeNullable
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    MobileNumberMobile number for the subscriberPhone
    TransactionalOptInWhether the subscriber has opted-in to Transactional SMS messagesBoolean
    TransactionalOptInDateDate, the subscriber, opted-in to Transactional SMS messagesDate
    TransactionalOptOutDateDate, the subscriber, opted out of Transactional SMS messagesDateX
    MarketingOptInWhether the subscriber has opted-in to Marketing SMS messagesBoolean
    MarketingOptInDateDate, the subscriber, opted-in to Marketing SMS messagesDate
    MarketingOptOutDateDate, the subscriber, opted out of Marketing SMS messagesDateX
    SMSCarrierNameName of the SMS Carrier used for deliveryTextX

    You shouldn't be working with _SubscriberSMS Data View.


    _SMSSubscriptionLog

    _SMSSubscriptionLog Data View stores complete information about subscription status for each Mobile Number. It replaced the unsupported _MobileSubscription Data View.

    NameDescriptionData TypeNullable
    LogDateThe date the subscription is loggedDateX
    SubscriberKeyThe subscriber key for the affected subscriberText
    MobileSubscriptionIDThe unique ID of the subscription recordNumber
    SubscriptionDefinitionIDThe unique Keyword ID (GUID())Text
    MobileNumberMobile number for the subscriberPhone
    OptOutStatusIDWhether the subscriber has opted out of SMS messagesNumberX
    OptOutMethodIDMethod the subscriber used to opt-out of SMS messagesNumberX
    OptOutDateDate, the subscriber, opted out of SMS messagesDateX
    OptInStatusIDWhether the subscriber has opted-in to the SMS messageNumber
    OptInMethodIDMethod the subscriber used to opt-in to the SMS messagesNumberX
    OptInDateDate, the subscriber, opted-in to the SMS messagesDateX
    SourceThe subscription sourceNumberX
    CreatedDateDate the subscription was createdDate
    ModifiedDateDate the subscription was modifiedDate

    When working with _SMSSubscriptionLog Data View:

    1. SFMC assigns subscription data to Mobile Number, not particular SubscriberKey or Contact. If you reassign the Phone Number to a different contact - Subscriptions will follow.
    2. SubscriberKey will be correctly populated if there is one (and only one) Subscriber with the same Mobile Number. Otherwise, it will have either have a No MobileAddress record has been found or this mobile number or Multiple subscriber keys found for this mobile number as a value.
    3. SubscriptionDefinitionID is a GUID, and there is no apparent connection to a specific Keyword. But there are two tricks.
      • JOIN _SMSMessageTracking Data View and use KeywordID and SharedKeyword columns to map the GUID to readable Keyword name. If you cannot find this information there, there is a second option:
      • Go to MobileConnect Contacts, open your test contact and make sure he is subscribed to all your Keywords. Click the Attributes tab and scroll to MobileConnect Data. Click on the Carrier ID value. It will open a MobileConnect Subscriptions view - the above Data View in User Interface format. If you check the Keyword column, you will see your MobileConnect Short or Long Code along with Keyword in a readable format. Write it down and click Edit. Now you will see the same data, but with Keyword GUID. With those two values, you can use a SQL CASE statement to convert this Data View to a more readable format.

    _SMSMessageTracking

    NameDescriptionData TypeNullable
    MobileMessageTrackingIDUnique Tracking ID - one for each SMS sentNumber
    EIDEnterprise ID number for the senderNumberX
    MIDMember ID (Business Unit ID)NumberX
    MobileMobile number for the subscriberPhone
    MessageIDUnique Mobile Message IDNumber
    KeywordIDUnique identifier for the keyword (GUID)TextX
    CodeIDUnique identifier for the SMS code (GUID)TextX
    ConversationIDUnique identifier for the SMS conversation. Currently always null.TextX
    CampaignIDThe SMS campaign tied to the recordNumberX
    SentIf the message was sentBoolean
    DeliveredIf the message was deliveredBooleanX
    UndeliveredWhether the message was delivered successfully or notBooleanX
    UnsubIf the subscriber unsubscribed. Currently always null.BooleanX
    OptInWhether the subscriber has opted-in to the SMS messages. Currently always null.BooleanX
    OptOutWhether the subscriber has opted out of SMS messages. Currently always null.BooleanX
    OutboundIf the message was outgoingBooleanX
    InboundIf the message was incomingBooleanX
    CreateDateTimeThe date and time the tracking record was createdDate
    ModifiedDateTimeThe date and CST time the tracking record was modifiedDate
    ActionDateTimeThe actual date/time the Marketing Cloud received a delivery or non-delivery event. Timestamps for delivery receipts are not indicative of when a message was received on a handset. The SMS industry does not support read receipts, and the data returned in this view are based on when a delivery receipt is returned to our system.Date
    MessageTextThe text of the messageTextX
    IsTestIf the message was a test messageNumberX
    MobileMessageRecurrenceIDThe ID of the recurrence schedule for the message. Can be used for troubleshooting send issues.NumberX
    ResponseToMobileMessageTrackingIDThe tracking ID of the response to the messageNumberX
    IsValidPopulates to 1 for inbound message and 0 for Outbound messageNumberX
    InvalidationCodeInvalidation code for the message. Currently always null.NumberX
    SMSJobIDGUID with JobID matching value in SMS Send Log. Filled only for sends since Spring 2023.StringX
    SMSBatchIDBatchID matching value in SMS Send Log. Filled only for sends since Spring 2023.NumberX
    SendIDThe send ID number for the SMS sendNumberX
    SendSplitIDIf the message was split, the ID of the splitNumberX
    SendSegmentIDThe ID of the segment tied to the messageNumberX
    SendJobIDThe job ID for the SMS sendNumberX
    SendGroupIDThe group ID for the SMS sendNumberX
    SendPersonIDThe sendperson ID for the SMS sendNumberX
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber recordNumberX
    SubscriberKeyThe subscriber key for the affected subscriberTextX
    SMSStandardStatusCodeIdSFMC delivery status codeNumberX
    DescriptionDetailed description of the status codeTextX
    NameThe SMS Message or Journey Activity nameTextX
    ShortCodeThe short code or long code used to send your messageTextX
    SharedKeywordThe keyword used in your messageTextX
    OrdinalRepresents the parts in a multi-part message. Represented in ascending order starting at 0.NumberX
    FromNameFrom Name that an individual message was deployed with. Maximum length: 11 charactersTextX
    JBDefinitionIDUnique identifier for the related journeyTextX
    JBActivityIDUnique identifier for the related journey activityTextX

    When working with _SMSMessageTracking Data View:

    1. If you send one SMS to multiple Subscribers, you will have multiple rows of data with different MobileMessageTrackingID but the same MessageID. Apart from MessageID you may also use the Name field that contains the asset name from MobileConnect.
    2. KeywordID and CodeID are GUIDs, but the same table also has the readable versions of those columns - ShortCode and SharedKeyword. ShortCode, despite the name, also displays Long Codes.
    3. The fields marked above as boolean (like Sent, Delivered, IsTest, Outbound) have the value in the form of a number: 0 = false, 1 = true. Some might also be null - for example, if a message was outbound, Outbound will have the value of 1, whereas Inbound will be null.
    4. MessageText will not only show you the text you sent in your SMS - it will also display it after personalisation is applied. On the one hand, it is great for debugging, as it allows you to check the final content the user received. On the other hand, you won't be able to assess personalisations used across your messaging.
    5. ResponseToMobileMessageTrackingID is an excellent way to check customer response. You can make Self-Join between inbound ResponseToMobileMessageTrackingID and outbound MobileMessageTrackingID to output response data in the same line.
    6. Some fields in this Data View are filled only under specific conditions:
      • CampaignID is populated only when an SMS is sent to Data Extension as Audience or send type is Send to Data Extension. SMS must be connected to a Campaign for the field to be populated.
      • SendID, SendJobID are populated only for SMS messages sent via Automation Studio's Send SMS Activity or when an SMS is sent to Data Extension as Audience.
      • SendSplitID, SendSegmentID, SendGroupID, SendPersonID are populated only when SMS is sent to Data Extension as Audience.
      • ConversationID is populated only when a conversation is created with a MO user using AMPScript CreateSMSConversation.
    7. Unsub, OptIn, OptOut are currently not populated at all. You should pull that data from _SMSSubscriptionLog.
    8. JBDefinitionID and JBActivityID let you cleanly match SMS data to Journey and _JourneyActivity Data Views using VersionID and ActivityID respectively. However, it won't work for old (created before October 2020) SMS Activities - for those you can make a JOIN using Name field: ON smsTracking.Name = journeyActivity.ActivityName.
    9. SMSStandardStatusCodeId and Description are great for understanding your SMS send's current status.
    10. SMSJobID and SMSBatchID are the only way to connect _SMSMessageTracking Data View to SMS Send Log. You can JOIN ON smsTracking.SubscriberID = sendLog.SubID AND smsTracking.SMSJobID = sendLog.SMSJobID AND smsTracking.SMSBatchID = sendLog.BatchID.

    SMS Status Codes

    CodeStatusDefinition
    1000QueuedToSfmcSendServiceMessage queued to internal send service.
    1500QueueFailureToSfmcSendServiceMessage failed to queue to internal send service. Retry your send.
    1501ValidationErrorInternal validation error. Retry your send.
    2000DeliveredToAggregatorMessage delivered to the aggregator. The status will be updated when the delivery confirmation comes from the carrier or mobile device. For shared codes, this is the final status.
    2500FailedToAggregatorMessage not delivered to the aggregator. Retry your send.
    2501UnknownToAggregatorUnknown aggregator error.
    2600ThrottledToAggregatorMessage not accepted by aggregator due to capacity issues. Send will be retried automatically.
    3000EnrouteMessage is en route to carrier. Waiting on carrier confirmation.
    3001SentToCarrierMessage sent to carrier. Waiting to be accepted by carrier.
    3002AcceptedByCarrierMessage accepted by carrier. Waiting for delivery confirmation.
    3400UnknownUnknown error
    4000DeliveredMessage delivered to mobile device.
    4500UndeliverableMessage not delivered to mobile device.
    4501ExpiredMessage expired. Message exhausted the carrier retry process. Mobile device may be out of carrier range.
    4502DeletedMessage deleted by the carrier.
    4503RejectedMessage rejected. Carrier may have detected a loop or assumed that message is spam. This status can indicate an administrative or financial problem between the operator and the end-users.

    _UndeliverableSMS

    Stores information about failed message deliveries from MobileConnect.

    There might be multiple reasons for the SMS to be undelivered, for example:

    • The mobile device is powered off.
    • The user is out of range of cellular networks
    • The number is for a landline
    NameDescriptionData TypeNullable
    MobileNumberMobile number for the subscriberText
    UndeliverableWhether the subscriber is eligible for future deliveriesBoolean
    BounceCountNumber of times message was not deliveredNumber
    FirstBounceDateDate of the first unsuccessful deliveryDate
    HoldDateDate when the subscriber can be used in sends againDateX

    When working with _JourneyActivity Data View:

    1. If Undeliverable is TRUE, check HoldDate to know when the number will be reachable again.
    2. Monitor this data view and blocklist numbers with significant BounceCount values to clean up your database, save money and protect from spamming potential future owners of the recycled phone number.
    3. It's impossible to know the actual delivery status for SMS sends - Marketing Cloud reports only whether the SMS carrier accepted the message. It does not know what happens with it after the carrier takes over. However, most of the SMS messages accepted by carriers are delivered.
    - - +

    SFMC Mobile Connect Data Views

    Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    +

    System Data Views

    +

    Learn about SFMC System Data Views Basics and specific backend tables covering Email Studio, Journey Builder & Automation Studio data here.

    +

    MobileConnect Data Views

    +

    MobileConnect Data Views are unique, as most of them are no longer supported by Salesforce. But some still works. All those data views show data limited to a specific Business Unit.

    +
    You Should Know

    Most of the MobileConnect data is assigned to Mobile Number, not Contact. It means that it might be shared by a few contacts (if multiple have the same mobile number set) or migrate between them (if the mobile number gets reassigned).

    It shouldn't be a big problem in B2C environments, as most people will have their mobile number and keep it long. However, remember that unused numbers might be recycled after a few years by telecom and go back to the market and given to a new user.

    Mobile number recycling is much more present in the B2B scenario, where there is a bigger chance for shared mobile numbers and much faster recycling of the numbers. Many companies reuse the phone number of the employees that left.

    When working with Mobile Number history of engagement and subscription, take this into consideration.

    +

    _MobileAddress

    +

    _MobileAddress Data View is officially not supported by Salesforce. But it's too good not to use it. And there is no replacement for it. Why? Because Marketing Cloud still uses this Data View as a backend data source for the MobileConnect Demographics Data.

    +
    NameDescriptionData TypeNullable
    _MobileIDMobileConnect Contact IDNumberX
    _ContactIDGlobal Contact ID (not Contact Key)Number
    _MobileNumberMobile number for the subscriberText
    _StatusStatus of the ContactNumberX
    _SourceSource of the ContactNumberX
    _SourceObjectIdID of the object if _Source = 10TextX
    _PriorityIn case the contact uses multiple mobile numbers, the Priority field's value establishes the order in which to use those mobile numbers. _Priority = 1 is first in orderNumberX
    _ChannelCommunication channel. Used to be Mobile, now not in useTextX
    _CarrierIDNumeric code for the mobile carrier used by the contactNumber
    _CountryCodeTwo letter country codeText
    _CreatedDateDate the subscription was createdDate
    _CreatedByPerson responsible for contact creationDate
    _ModifiedByPerson responsible for contact modificationTextX
    _CityContact's CityTextX
    _StateContact's StateTextX
    _ZipCodeContact's Zip CodeTextX
    _FirstNameContact's First NameTextX
    _LastNameContact's Last NameTextX
    _UTCOffsetThe number of hours from which the user's time zone deviates from UTC. Defaults to 0NumberX
    _IsHonorDSTWhether the user's time zone observers Daylight Savings Time or not. Defaults to falseBooleanX
    +

    When working with _MobileAddress Data View:

    +
      +
    1. There is no guarantee of how long it will work and how long the data will be correct. Be sure you are checking it periodically or - even better - have validation in your code.
    2. +
    3. The rule of thumb when working with MobileConnect is to use the official, supported solutions. Only when they cannot deliver - check whether _MobileAddress can help.
    4. +
    5. Do not use the User Interface editor in MobileConnect Demographics part of the Contact to edit information in this Data View. It is broken and overwrites all connected Mobile Numbers with a change made to just one. However, the changes are possible with SSJS - including ContactID and MobileNumber changes and limited merging. It is the most significant selling point of this Data View.
    6. +
    7. _MobileAddress Data View is available in Data Designer within MobileConnect Attribute Group. It allows you to add custom fields to it that you can later leverage in sends.
    8. +
    9. Whenever creating a MobileConnect Contact, be sure to provide the _MobileNumber with the dialling code prefix (without the + or 00). For example, Poland has a +48 dialling code and nine-digit numbers, so the correct format is 48123456789. Double-check whether _CountryCode is an appropriate two-letter code (for example, PL).
    10. +
    11. The Contact may have multiple Mobile Numbers assigned, but it will receive communication only to the one with the highest _Priority.
    12. +
    13. Whenever you add a Mobile Number to a new Contact, for all other Contacts with this number, it gets lower _Priority (SFMC assumes that it was transferred).
    14. +
    15. _ContactID makes this Data View useful for cross-channel applications. New Data Views (_SMSSubscriptionLog and _SMSMessageTracking) have Subscriber Key information, but if the Mobile Number is shared, it won't provide the data.
    16. +
    +
    +

    _MobileSubscription

    +

    _MobileSubscription Data View is officially unsupported by Salesforce. Marketing Cloud still fills it with data, but there is no guarantee of how long it will persist or whether it will be correct.

    +

    Worry not, there is a nearly identical Data View available and supported - _SMSSubscriptionLog.

    +

    The new Data View contains nearly all the same fields (sans _CreatedBy and _ModifiedBy) and even adds three more (LogDate, SubscriberKey and MovileSubscriptionID).

    +
    NameDescriptionData TypeNullable
    _SubscriptionDefinitionIDThe unique ID of the subscription recordText
    _MobileNumberMobile number for the subscriberText
    _OptOutStatusIDWhether the subscriber has opted out of SMS messagesTextX
    _OptOutMethodIDMethod the subscriber used to opt-out of SMS messagesTextX
    _OptOutDateDate, the subscriber, opted out of SMS messagesDateX
    _OptInStatusIDWhether the subscriber has opted-in to the SMS messagesText
    _OptInMethodIDMethod the subscriber used to opt-in to the SMS messagesTextX
    _OptInDateDate, the subscriber, opted-in to the SMS messagesDateX
    _SourceThe subscription sourceTextX
    _CreatedDateDate the subscription was createdDate
    _CreatedByPerson responsible for subscription creationTextX
    _ModifiedDateDate the subscription was modifiedDate
    _ModifiedByPerson responsible for the modificationTextX
    +

    You shouldn't be working with _MobileSubscription Data View. Use _SMSSubscriptionLog instead.

    +
    +

    _SubscriberSMS

    +

    _SubscriberSMS Data View is a legacy table. It is neither supported nor updated, and you won't have records there. Marketing Cloud used it in pre-MobileConnect times, so I do not recommend using it for any projects.

    +
    NameDescriptionData TypeNullable
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    MobileNumberMobile number for the subscriberPhone
    TransactionalOptInWhether the subscriber has opted-in to Transactional SMS messagesBoolean
    TransactionalOptInDateDate, the subscriber, opted-in to Transactional SMS messagesDate
    TransactionalOptOutDateDate, the subscriber, opted out of Transactional SMS messagesDateX
    MarketingOptInWhether the subscriber has opted-in to Marketing SMS messagesBoolean
    MarketingOptInDateDate, the subscriber, opted-in to Marketing SMS messagesDate
    MarketingOptOutDateDate, the subscriber, opted out of Marketing SMS messagesDateX
    SMSCarrierNameName of the SMS Carrier used for deliveryTextX
    +

    You shouldn't be working with _SubscriberSMS Data View.

    +
    +

    _SMSSubscriptionLog

    +

    _SMSSubscriptionLog Data View stores complete information about subscription status for each Mobile Number. It replaced the unsupported _MobileSubscription Data View.

    +
    NameDescriptionData TypeNullable
    LogDateThe date the subscription is loggedDateX
    SubscriberKeyThe subscriber key for the affected subscriberText
    MobileSubscriptionIDThe unique ID of the subscription recordNumber
    SubscriptionDefinitionIDThe unique Keyword ID (GUID())Text
    MobileNumberMobile number for the subscriberPhone
    OptOutStatusIDWhether the subscriber has opted out of SMS messagesNumberX
    OptOutMethodIDMethod the subscriber used to opt-out of SMS messagesNumberX
    OptOutDateDate, the subscriber, opted out of SMS messagesDateX
    OptInStatusIDWhether the subscriber has opted-in to the SMS messageNumber
    OptInMethodIDMethod the subscriber used to opt-in to the SMS messagesNumberX
    OptInDateDate, the subscriber, opted-in to the SMS messagesDateX
    SourceThe subscription sourceNumberX
    CreatedDateDate the subscription was createdDate
    ModifiedDateDate the subscription was modifiedDate
    +

    When working with _SMSSubscriptionLog Data View:

    +
      +
    1. SFMC assigns subscription data to Mobile Number, not particular SubscriberKey or Contact. If you reassign the Phone Number to a different contact - Subscriptions will follow.
    2. +
    3. SubscriberKey will be correctly populated if there is one (and only one) Subscriber with the same Mobile Number. Otherwise, it will have either have a No MobileAddress record has been found or this mobile number or Multiple subscriber keys found for this mobile number as a value.
    4. +
    5. SubscriptionDefinitionID is a GUID, and there is no apparent connection to a specific Keyword. But there are two tricks. +
        +
      • JOIN _SMSMessageTracking Data View and use KeywordID and SharedKeyword columns to map the GUID to readable Keyword name. If you cannot find this information there, there is a second option:
      • +
      • Go to MobileConnect Contacts, open your test contact and make sure he is subscribed to all your Keywords. Click the Attributes tab and scroll to MobileConnect Data. Click on the Carrier ID value. It will open a MobileConnect Subscriptions view - the above Data View in User Interface format. If you check the Keyword column, you will see your MobileConnect Short or Long Code along with Keyword in a readable format. Write it down and click Edit. Now you will see the same data, but with Keyword GUID. With those two values, you can use a SQL CASE statement to convert this Data View to a more readable format.
      • +
      +
    6. +
    +
    +

    _SMSMessageTracking

    +
    NameDescriptionData TypeNullable
    MobileMessageTrackingIDUnique Tracking ID - one for each SMS sentNumber
    EIDEnterprise ID number for the senderNumberX
    MIDMember ID (Business Unit ID)NumberX
    MobileMobile number for the subscriberPhone
    MessageIDUnique Mobile Message IDNumber
    KeywordIDUnique identifier for the keyword (GUID)TextX
    CodeIDUnique identifier for the SMS code (GUID)TextX
    ConversationIDUnique identifier for the SMS conversation. Currently always null.TextX
    CampaignIDThe SMS campaign tied to the recordNumberX
    SentIf the message was sentBoolean
    DeliveredIf the message was deliveredBooleanX
    UndeliveredWhether the message was delivered successfully or notBooleanX
    UnsubIf the subscriber unsubscribed. Currently always null.BooleanX
    OptInWhether the subscriber has opted-in to the SMS messages. Currently always null.BooleanX
    OptOutWhether the subscriber has opted out of SMS messages. Currently always null.BooleanX
    OutboundIf the message was outgoingBooleanX
    InboundIf the message was incomingBooleanX
    CreateDateTimeThe date and time the tracking record was createdDate
    ModifiedDateTimeThe date and CST time the tracking record was modifiedDate
    ActionDateTimeThe actual date/time the Marketing Cloud received a delivery or non-delivery event. Timestamps for delivery receipts are not indicative of when a message was received on a handset. The SMS industry does not support read receipts, and the data returned in this view are based on when a delivery receipt is returned to our system.Date
    MessageTextThe text of the messageTextX
    IsTestIf the message was a test messageNumberX
    MobileMessageRecurrenceIDThe ID of the recurrence schedule for the message. Can be used for troubleshooting send issues.NumberX
    ResponseToMobileMessageTrackingIDThe tracking ID of the response to the messageNumberX
    IsValidPopulates to 1 for inbound message and 0 for Outbound messageNumberX
    InvalidationCodeInvalidation code for the message. Currently always null.NumberX
    SMSJobIDGUID with JobID matching value in SMS Send Log. Filled only for sends since Spring 2023.StringX
    SMSBatchIDBatchID matching value in SMS Send Log. Filled only for sends since Spring 2023.NumberX
    SendIDThe send ID number for the SMS sendNumberX
    SendSplitIDIf the message was split, the ID of the splitNumberX
    SendSegmentIDThe ID of the segment tied to the messageNumberX
    SendJobIDThe job ID for the SMS sendNumberX
    SendGroupIDThe group ID for the SMS sendNumberX
    SendPersonIDThe sendperson ID for the SMS sendNumberX
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber recordNumberX
    SubscriberKeyThe subscriber key for the affected subscriberTextX
    SMSStandardStatusCodeIdSFMC delivery status codeNumberX
    DescriptionDetailed description of the status codeTextX
    NameThe SMS Message or Journey Activity nameTextX
    ShortCodeThe short code or long code used to send your messageTextX
    SharedKeywordThe keyword used in your messageTextX
    OrdinalRepresents the parts in a multi-part message. Represented in ascending order starting at 0.NumberX
    FromNameFrom Name that an individual message was deployed with. Maximum length: 11 charactersTextX
    JBDefinitionIDUnique identifier for the related journeyTextX
    JBActivityIDUnique identifier for the related journey activityTextX
    +

    When working with _SMSMessageTracking Data View:

    +
      +
    1. If you send one SMS to multiple Subscribers, you will have multiple rows of data with different MobileMessageTrackingID but the same MessageID. Apart from MessageID you may also use the Name field that contains the asset name from MobileConnect.
    2. +
    3. KeywordID and CodeID are GUIDs, but the same table also has the readable versions of those columns - ShortCode and SharedKeyword. ShortCode, despite the name, also displays Long Codes.
    4. +
    5. The fields marked above as boolean (like Sent, Delivered, IsTest, Outbound) have the value in the form of a number: 0 = false, 1 = true. Some might also be null - for example, if a message was outbound, Outbound will have the value of 1, whereas Inbound will be null.
    6. +
    7. MessageText will not only show you the text you sent in your SMS - it will also display it after personalisation is applied. On the one hand, it is great for debugging, as it allows you to check the final content the user received. On the other hand, you won't be able to assess personalisations used across your messaging.
    8. +
    9. ResponseToMobileMessageTrackingID is an excellent way to check customer response. You can make Self-Join between inbound ResponseToMobileMessageTrackingID and outbound MobileMessageTrackingID to output response data in the same line.
    10. +
    11. Some fields in this Data View are filled only under specific conditions: +
        +
      • CampaignID is populated only when an SMS is sent to Data Extension as Audience or send type is Send to Data Extension. SMS must be connected to a Campaign for the field to be populated.
      • +
      • SendID, SendJobID are populated only for SMS messages sent via Automation Studio's Send SMS Activity or when an SMS is sent to Data Extension as Audience.
      • +
      • SendSplitID, SendSegmentID, SendGroupID, SendPersonID are populated only when SMS is sent to Data Extension as Audience.
      • +
      • ConversationID is populated only when a conversation is created with a MO user using AMPScript CreateSMSConversation.
      • +
      +
    12. +
    13. Unsub, OptIn, OptOut are currently not populated at all. You should pull that data from _SMSSubscriptionLog.
    14. +
    15. JBDefinitionID and JBActivityID let you cleanly match SMS data to Journey and _JourneyActivity Data Views using VersionID and ActivityID respectively. However, it won't work for old (created before October 2020) SMS Activities - for those you can make a JOIN using Name field: ON smsTracking.Name = journeyActivity.ActivityName.
    16. +
    17. SMSStandardStatusCodeId and Description are great for understanding your SMS send's current status.
    18. +
    19. SMSJobID and SMSBatchID are the only way to connect _SMSMessageTracking Data View to SMS Send Log. You can JOIN ON smsTracking.SubscriberID = sendLog.SubID AND smsTracking.SMSJobID = sendLog.SMSJobID AND smsTracking.SMSBatchID = sendLog.BatchID.
    20. +
    +

    SMS Status Codes

    +
    CodeStatusDefinition
    1000QueuedToSfmcSendServiceMessage queued to internal send service.
    1500QueueFailureToSfmcSendServiceMessage failed to queue to internal send service. Retry your send.
    1501ValidationErrorInternal validation error. Retry your send.
    2000DeliveredToAggregatorMessage delivered to the aggregator. The status will be updated when the delivery confirmation comes from the carrier or mobile device. For shared codes, this is the final status.
    2500FailedToAggregatorMessage not delivered to the aggregator. Retry your send.
    2501UnknownToAggregatorUnknown aggregator error.
    2600ThrottledToAggregatorMessage not accepted by aggregator due to capacity issues. Send will be retried automatically.
    3000EnrouteMessage is en route to carrier. Waiting on carrier confirmation.
    3001SentToCarrierMessage sent to carrier. Waiting to be accepted by carrier.
    3002AcceptedByCarrierMessage accepted by carrier. Waiting for delivery confirmation.
    3400UnknownUnknown error
    4000DeliveredMessage delivered to mobile device.
    4500UndeliverableMessage not delivered to mobile device.
    4501ExpiredMessage expired. Message exhausted the carrier retry process. Mobile device may be out of carrier range.
    4502DeletedMessage deleted by the carrier.
    4503RejectedMessage rejected. Carrier may have detected a loop or assumed that message is spam. This status can indicate an administrative or financial problem between the operator and the end-users.
    +
    +

    _UndeliverableSMS

    +

    Stores information about failed message deliveries from MobileConnect.

    +

    There might be multiple reasons for the SMS to be undelivered, for example:

    +
      +
    • The mobile device is powered off.
    • +
    • The user is out of range of cellular networks
    • +
    • The number is for a landline
    • +
    +
    NameDescriptionData TypeNullable
    MobileNumberMobile number for the subscriberText
    UndeliverableWhether the subscriber is eligible for future deliveriesBoolean
    BounceCountNumber of times message was not deliveredNumber
    FirstBounceDateDate of the first unsuccessful deliveryDate
    HoldDateDate when the subscriber can be used in sends againDateX
    +

    When working with _JourneyActivity Data View:

    +
      +
    1. If Undeliverable is TRUE, check HoldDate to know when the number will be reachable again.
    2. +
    3. Monitor this data view and blocklist numbers with significant BounceCount values to clean up your database, save money and protect from spamming potential future owners of the recycled phone number.
    4. +
    5. It's impossible to know the actual delivery status for SMS sends - Marketing Cloud reports only whether the SMS carrier accepted the message. It does not know what happens with it after the carrier takes over. However, most of the SMS messages accepted by carriers are delivered.
    6. +
    \ No newline at end of file diff --git a/docs/config/sfmc-system-data-views/index.html b/docs/config/sfmc-system-data-views/index.html index ed7767a3d..275f4b86f 100644 --- a/docs/config/sfmc-system-data-views/index.html +++ b/docs/config/sfmc-system-data-views/index.html @@ -1,23 +1,371 @@ - + - -SFMC System Data Views | Mateusz Dąbrowski + +SFMC System Data Views | Mateusz Dąbrowski - - - + + + -
    -

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    Data Views Basics

    System Data Views are built-in backend Data Extensions that you can use to find information about your subscribers and sends. You cannot change them, but you can leverage their data in SQL queries for quick reports in Query Studio or outputting to the standard Data Extension. They are excellent fuel for SSJS logic.

    Data Views have data retention settings set to 6 months. If you want to store any data for a more extended period, you must create an Automation that will be copying data to your Data Extension.

    Be careful, however, as some of the System Data Views can get absurdly big quick, and making copies within your Marketing Cloud Instance may lead to performance issues. In such cases, a much better idea might be to export that data on a scheduled basis to an external Data Warehouse.

    Another important point related to Data Views is always knowing which Data View you genuinely want to use. For example, in most cases, you will be interested in parent-level _Subscribers Data View, which means you will need to use the Ent. prefix in your query.

    You Should Know

    Below you can find selected Salesforce Marketing Cloud Data Views focused on Subscribers, Journeys, Email and SMS Channel. I plan to cover the rest of them in the future.

    Be sure to check the excellent Dataviews.io - an interactive system tables relationship diagram created by Zuzanna Jarczyńska. It will for sure help you with multi-view JOINs.

    There is also a more detailed System Tables relationship diagram created by Cameron Roberts that contains SQL Database structure along with field lengths.


    Subscriber Data Views

    _Subscribers

    Stores information about your Subscribers. Great for high-level perspective or adding Email Address field to other more detailed Data Views.

    NameDescriptionData TypeNullable
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    DateUndeliverableThe date an email for the subscriber was returned as undeliverableDateX
    DateJoinedThe Date, the subscriber, joined your listDateX
    DateUnsubscribedThe Date, the subscriber, unsubscribed from your listDateX
    DomainThe domain of the subscriberTextX
    EmailAddressThe subscriber's email addressEmail
    BounceCountThe total number of bounces accrued by the subscriberNumber
    SubscriberKeyA potential alternate identifier for subscribers.Text
    SubscriberTypeThe subscriber type for the affected subscriberText
    StatusThe status of the subscriberTextX
    LocaleThe locale code for the subscriberLocaleX

    When working with _Subscribers Data View:

    1. If you are using the query in the child Business Unit, use Ent. prefix, as the data is stored on Parent BU level.
    2. If you need high-level data on your subscribers, this Data View might be enough. If you want to learn more (for example, why a subscriber bounced, where did he unsubscribe), you will need to JOIN other Data Views.
    3. Use SubscriberID to JOIN data from different engagement-based Data Views like _Sent, _Open, _Click or _Bounce.
    4. The Status field is excellent for a quick check of your database quality. It is also nice to manage multiple records. Pull the selection of your subscribers with SQL Query, add a new status with custom value (for example, 'unsubscribed' AS Status) and leverage Automation to export-transfer-import the Data Extension to All Subscribers.
    5. This Data View, along with _EnterpriseAttribute, _BusinessUnitUnsubscribes and _ListSubscribers, does not have six-month data retention.

    _EnterpriseAttribute

    Stores information about your Profile and Preference Attributes from Email Studio.

    NameDescriptionData TypeNullable
    _SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record stored.Number

    When working with _EnterpriseAttribute Data View:

    1. If you are using the query in the child Business Unit, always use ENT. prefix as it is enterprise-level only Data View.
    2. When querying or joining _EnterpriseAttribute, always include the underscore before SubscriberID - this is the only Data View that requires it.
    3. Despite the Email Address field is visible in the Salesforce Marketing Cloud UI when you go to Profile Attributes, it is not part of the _EnterpriseAttribute Data View. To get the Email Address of your Subscriber, query the _Subscribers Data View.
    4. Unfortunately, the default Preference Attribute HTML Email is not accessible via query.
    5. _EnterpriseAttribute Data View is unique, as it might contain spaces in field names. You build it by creating the Profile Attributes in Email Studio. If your profile attribute name contains space, you will have to use the square bracket notation to capture it: SELECT [Attribute With Spaces] FROM _EnterpriseAttribute.
    6. This Data View, along with _Subscribers, _BusinessUnitUnsubscribes and _ListSubscribers , does not have six-month data retention.

    Email Data Views

    _Job

    Stores information about your Email Sends Jobs. Great for capturing detailed data about your communication, especially when paired with Send Log. Must-have for extending your engagement-based Email Data Views.

    NameDescriptionData TypeNullable
    JobIDThe job ID number for the email sendNumber
    EmailIDThe email ID for the jobNumberX
    AccountIDThe ID number for the account that performed the jobNumberX
    AccountUserIDThe ID number for the account user that performed the jobNumberX
    FromNameThe from name in the email sendTextX
    FromEmailThe from email address in the email sendEmailX
    SchedTimeThe time the job was scheduledDateX
    PickupTimeThe time the Marketing Cloud application started the jobDateX
    DeliveredTimeThe time the email was deliveredDateX
    EventIDThe ID for the job eventTextX
    IsMultipartWhether the job was sent as multi-part MIME or notBoolean
    JobTypeThe type of jobTextX
    JobStatusThe status of the jobTextX
    ModifiedByIf modified, the user who modified the jobNumberX
    ModifiedDateThe date the job was modifiedDateX
    EmailNameThe name of the email sent by the jobTextX
    EmailSubjectThe subject of the email sendTextX
    IsWrappedWhether the links in the email were wrapped for trackingBoolean
    TestEmailAddrThe test email address used in the jobEmailX
    CategoryThe job categoryText
    BccEmailAny email address send in the BCC fieldEmailX
    OriginalSchedTimeThe initially scheduled time for the jobDateX
    CreatedDateThe date the job was createdDate
    CharacterSetThe character set used in the jobTextX
    IPAddressThis value will always be a null value.TextX
    SalesForceTotalSubscriberCountThe total number of Salesforce subscribers included in the jobNumber
    SalesForceErrorSubscriberCountThe total number of Salesforce subscribers included in the job that received errorsNumber
    SendTypeThe type of send used in the jobText
    DynamicEmailSubjectThe dynamic email subject included in the jobTextX
    SuppressTrackingIf tracking information for this job was suppressedBoolean
    SendClassificationTypeThe type of send classification for the jobTextX
    SendClassificationThe custom name of send classification for the jobTextX
    ResolveLinksWithCurrentDataIf the job resolved links with current dataBoolean
    EmailSendDefinitionThe email send definition used in the jobTextX
    DeduplicateByEmailWhether the email addresses in the job are used to deduplicate subscribersBoolean
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionNumberX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX

    When working with _Job Data View:

    1. JobID field will be your bread and butter to JOIN with other engagement-based Data Views.
    2. EmailName, FromName, and FromEmail are handy data points missing in the _Sent, _Open, _Click, _Bounce Data Views and are worth checking for reporting needs.
    3. If you are performing A/B tests or want to analyse the subject line's impact on performance, be sure to pick EmailSubject. Pair it with CASE to create a great knowledge source for your content team.
    4. For debugging purposes, be sure to check out IsWrapped and SuppressTracking - if you are missing tracking data, CharacterSet - if you have problems with formatting, SendClassification - if you have issues with unsubscribers or spam complaints.
    5. AccountUserID field is fantastic for _Job-based Audit Log creation. Unfortunately, there is no UI-based easy way to determine which user has which UserID. You can either use SOAP API or match based on these SQL results.
    You Should Know

    _Job Data View is unique among other Email-focused Data Views, as it shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _Job. You can query only those jobs that occurred in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.


    _Sent

    Stores information about your Email Sends. Great for understanding who had a chance to receive your message and whose communication did not leave your system.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the send took placeDate
    DomainThe domain at which the send occurredText
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX

    When working with _Sent Data View:

    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Open, _Click, _Bounce for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. The most valuable data here is the EventDate field that lets you know when the email was sent (and whether that happened at all).
    3. If you have triggered a send for an email and after a few minutes you don't see it here, in most cases, it means that the send was blocked and never left Marketing Cloud. Check enhanced Send Log, applied personalisation, data source, RaiseError scripts.

    _Open

    Stores information about your Email Opens. For when you need to know when someone opened your email. Kind of.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the open took placeDate
    DomainThe domain at which the open occurredText
    IsUniqueWhether the event is unique or repeatedBooleanX
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX

    When working with _Open Data View:

    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Click, _Bounce for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. Use _open.IsUnique = 1 in JOIN or WHERE to focus on the the first occurence of each event. Example: Query for Debugging Email Sends.
    3. The most valuable data here is the EventDate field that lets you know when the email was opened (and whether that happened at all). But with email opens, it's not that easy. In many cases, the lack of open data in this Data View doesn't mean that your recipient for sure did not open the email. And in some instances, tracked open might not mean he did.
    You Should Know

    There is no official engagement feedback loop that informs Marketing Cloud (or any other Marketing Automation Platform) that your recipient opened the email.

    All Marketing Automation Platforms put an invisible 1px wide image in the email body that is unique for every email you send. When someone opens an email, its images are downloaded from the server. SFMC treats the download of this 1px wide image as proof that the recipient opened the email. And in most cases, it is correct. But...

    The images don't always render (that's why you should always use alt-text). Some recipients opt-in on a per-email basis to download email graphics. Government audiences might not even have this option. Because of the admin policy, the privacy concerns over engagement tracking or limited internet bandwidth. In such a case, even if the user opens an email, you won't have information about it.

    It might lead to weird data, like clicks visible for contacts that did not open. Marketing Automation Platforms track Clicks via a different, more confident approach.

    It can also lead to cases where a user has both click and open data, but click data is earlier than the open. Why? Your recipient clicked something in your email and only after that decided to allow his email program to load the images in it.

    There might be cases where the data is wrong the other way - when you see that email as opened, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on _Open and _Click Data Views, as those bots will open the email and click all its links within a second. Something not possible for an actual human.


    _Click

    Stores information about your Email Clicks. Detailed click reporting and behavioural logic are possible, thanks to this one.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the click took placeDate
    DomainThe domain at which the click occurredText
    URLThe URL for the link clicked. Dynamic elements are shown as code: www.example.com?id=%%SubID%%TextX
    LinkNameThe link name assigned in the email sendTextX
    LinkContentThe link content assigned in the email send. Dynamic elements are shown as result: www.example.com?id=12345TextX
    IsUniqueWhether the event is unique or repeated
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX

    When working with _Click Data View:

    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Open, _Bounce for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. Use _click.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event. Example: Query for Debugging Email Sends.
    3. The most valuable data here is the EventDate field that lets you know when the email was clicked (and whether that happened at all).
    4. You can significantly improve the value of that information by checking the LinkName and LinkContent fields to understand which links proved interesting for your customers.
    5. Suppose you want to create an extensive report on link clicks. In that case, you might want to use the URL field instead of LinkContent due to the former not showing final personalisation values. It will be much easier to group clicks or even cleanly delete all AMPScript from them.
    You Should Know

    There might be cases where the click data is wrong - when you see that email as clicked, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on _Open and _Click Data Views, as those bots will open the email and click all its links within a second. Something not possible for a actual human.


    _Bounce

    Stores information about your Email Bounces. Best place in Marketing Cloud to understand why your messages are not getting delivered.

    This Data View, along with _Complaint, should be monitored regularly to assess the health of your email marketing.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the bounce took placeDate
    IsUniqueWhether the event is unique or repeated - 1 for the first occurrence, 0 for subsequentBoolean
    DomainThe domain at which the bounce occurredText
    BounceCategoryIDThe ID number for the bounce categoryNumber
    BounceCategoryThe category of the bounceTextX
    BounceSubcategoryIDThe ID number for the bounce subcategoryNumberX
    BounceSubcategoryThe subcategory of the bounceTextX
    BounceTypeIDThe ID number for the bounce typeNumber
    BounceTypeThe type of bounce that occurredTextX
    SMTPBounceReasonThe reason for the bounce relayed by the mail systemTextX
    SMTPMessageThe message regarding the bounce from the mail systemTextX
    SMTPCodeThe error code for the bounce from the mail systemNumberX
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX
    IsFalseBounceIndicates a false bounce if SFMC received delivery receipt after receiving bounce.BooleanX

    When working with _Bounce Data View:

    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Open, _Click for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. Use _bounce.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event. Example: Query for Debugging Email Sends.
    3. The Domain helps aggregate the bounce data to see any domain-specific problem with deliverability.
    4. SMTPBounceReason is the most helpful information when you want to understand what happened to your send. Be careful - this value can be configured to a custom string by the server owner. Some administrators are using this to inform you about a specific issue. Some are even faking the information to limit the emails coming to their servers from selected sources.
    5. SMTPCode is useful for getting additional data on the Bounce Reason. Watch especially for 541 and 554. In most cases, it means you are considered a spammer by the server or already blocklisted. I recommend you to create an Automation with Verification Activity to get an automated warning whenever there are more than a few occurrences. Triage immediately.
    6. If you get errors when trying to select IsFalseBounce - it might be missing on the SFMC backend. Create a Support Ticket to resolve it.
    You Should Know

    SMTPBounceReason field is nvarchar(max) SQL type, and due to that might be longer than the 4000 characters limit for the Data Extension string length in Salesforce Marketing Cloud. If you want to save this data outside of Data View, be sure to use LEFT(SMTPBounceReason, 4000).

    _Complaint

    _Complaint Data View stores Email Service Providers Feedback Loop (FBL) data. It means that if someone clicks the Report Spam button for your email and there is FBL in place, this information will be added to the Data View. It will also result in an unsubscribe event and be visible in the _Unsubscribe.

    Currently, Salesforce Marketing Cloud supports Feedback Loops for Bluetie (Excite), Comcast, Cox, Fastmail, Microsoft Hotmail, Italia Online, La Poste, Liberty Global, Locaweb, Mail.ru, OpenSRS (Tucows), Rackspace (Mailtrust), Seznam, Synacor, Telenor, Telstra, Terra, UOL (Brazil), USA.net, XS4ALL and Yandex.

    You can additionally register for the Yahoo Feedback Loop. Gmail also has a Feedback Loop system, but it works differently and won't be in _Complaint Data View.

    This Data View, along with _Bounce, should be monitored regularly to assess the health of your email marketing.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the send took placeDate
    IsUniqueWhether the event is unique or repeated - 1 for the first occurrence, 0 for subsequentBoolean
    DomainThe domain at which the send occurredText

    When working with _Complaint Data View:

    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Open, _Click for a single engagement with a particular subscriber.
    2. Use _complaint.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event.
    3. The Domain helps aggregate the Complaint data to see any domain-specific problem with targeting your communication.

    Subscription Data Views

    Subscription management in Salesforce Marketing Cloud is complex. Very complex.

    It starts with four levels of unsubscriptions:

    1. List unsubscribe = no more sends from a particular list or publication list.
    2. Business Unit unsubscribe = no more sends from a particular business unit.
    3. Master unsubscribe = no more sends from your Marketing Cloud.
    4. Global unsubscribe = no more sends from Marketing Cloud. Any, globally.

    And it gets even more interesting when you consider that triggering specific unsubscription level depends on email configuration, Email Studio configuration, preference center configuration and subscriber's behaviour.

    Oh, and there is no out-of-the-box unsubscription from Data Extensions, which are currently the most popular segmentation and targeting tool.

    To give us at least a chance to make sense of that mess, Salesforce created multiple System Data Views related to (un)subscriptions.

    You Should Know

    Spam Complaint and List-Unsubscribe Header are pretty particular unsubscription use cases. They are added to _Unsubscribe and _BusinessUnitUnsubscribe as unsubscriptions from a list used in send (for example, ID of Publication List selected for the send). In reality, Marketing Cloud will perform automatic unsubscribe from the All Subscriber list (depending on Email Studio settings - Child BU's or Enterprise one), not the list mentioned in ListID.

    As a result, when querying, you will see the list-specific unsubscribe that doesn't result in unsubscription from the list but instead blocks all commercial communication as a Business Unit or Master unsubscribe.

    Custom solution (Automation with Query and Script Activities) will be necessary to perform the list-specific unsubscribe.

    _Unsubscribe

    _Unsubscribe Data View stores data about unsubscribe events. The wording here is crucial, as it explains the difference from _Subscribers Data View unsubsrciption counts.

    In _Subscribers, you can check what is the current subscription status for the All Subscribers list. In _Unsubscribe, you see the unsubscription events happening from List-Unsubscribe Header, LogUnsubEvent API call, Reply Mail Management responses, Complaints and out-of-the-box Preference Center - all linked to a specific _Job. It is also not limited to All Subscribers but also covers unsubscribes from other types of lists.

    It means that status changes like Import Activity, direct API change, manual change in the Email Studio (not Job-specific) will be reflected in the _Subscribers Data View, but not in the _Unsubscribe. On the other hand, UnsubEvents does not necessarily change the Status in the _Subscribers. For example, taking care of List-Unsubscribe Header clicks require dedicated Automation to get this data from _Unsubscribe Data View and push it to other parts of your consent data model.

    This Data View stores data only for six-months, so retention-less _Subscribers Data View might show more unsubscribed records if you are not cleaning them from SFMC regularly.

    All of this makes _Unsubscribe a much better source of knowledge about unsubscription.

    NameDescriptionData TypeNullable
    AccountIDYour account ID numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the unsubscribe took placeDate
    IsUniqueWhether the event is unique or repeated - 1 for the first occurrence, 0 for subsequentBoolean
    DomainThe domain at which the unsubscribe occurredText

    When working with _Unsubscribe Data View:

    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Job and _Subscribers to check unsubscription context.
    2. Use _unsubscribe.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event.
    3. If you query this Data View on the child Business Unit, it will return only unsubscribe events from that specific BU.
    4. The most valuable data here are:
      • EventDate field that lets you know when the unsubscription happened
      • ListID field that tells you which list is impacted by the unsubscription
    You Should Know

    If the subscriber clicks "Unsubscribe from All" on the out-of-the-box unsubscription center, it will perform Master Unsubscribe from all Lists. As it is a single event, it will be stored as a single record in the _Unsubscribe Data View with random ListID assigned to it. For a complete picture, you will need to check _ListSubscribers Data View.


    _BusinessUnitUnsubscribes

    _Subscribers Data View might give you information about the current state of subscriptions on the All Subscribers list. But if in Email Studio you configure Business Unit Level unsubscribes, this information will not be helpful, as the data stored there will not reflect the subscription status in a specific Business Unit.

    Here comes the fresh _BusinessUnitUnsubscribes Data View. It shows you the only unsubscribed contacts for each Business Unit. If the contact resubscribes - it will disappear from this Data View.

    _BusinessUnitUnsubscribes Data View will work differently depending on your SFMC unsubscription configuration. You will be able to query it from the Child BU level only for Business Units set to "unsubscribe from this business unit only".

    NameDescriptionData TypeNullable
    BusinessUnitIDThe Account ID for the Business UnitNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    UnsubDateUTCThe date the subscriber unsubscribed on the BU.DateX
    UnsubReasonThe reason listed is a custom value configured by your administrator.TextX

    When working with _BusinessUnitUnsubscribes Data View:

    1. Remember that it stores only currently unsubscribed contacts. Not unsubscribe event data (that's in _Unsubscribe) and not other statuses (like bounced, held). It will also not show unsubscribed users after they resubscribed or got deleted.
    2. SubscriberID or SubscriberKey along with UnsubDateUTC might fuzzy match the data in this data view with _Unsubscribe.
    3. UnsubDateUTC, as name suggests, is in UTC instead of the SFMC-standard UTC-6. Remember to use DATEADD to normalize it before comparing to other system dates.
    4. The real treat in this data view (apart from finally having an easy option to see Business Unit unsubscribes) is the UnsubReason field that can tell you more about the unsubscribe.
    5. This Data View, along with _Subscribers, _EnterpriseAttribute and _ListSubscribers, does not have six-month data retention.
    You Should Know

    UnsubDateUTC not only uses a different timezone from the rest of the system dates. It differs by a few milliseconds from _Unsubscribe EventDate. When querying (SFMC doesn't show seconds for date fields), you won't see it, but the comparison is using the full datetime value.

    Because of it, you cannot match it out-of-the-box. DATEDIFF is here to save the day:

    DATEDIFF will allow you to compare despite the difference
    DATEDIFF(MINUTE, _Unsubscribe.EventDate, DATEADD(HOUR, -6, _BusinessUnitUnsubscribes.UnsubDateUTC)) < 1

    _ListSubscribers

    _ListSubscribers Data View stores data about the current status of the subscription. It might sound similar to _Subscribers and _BusinessUnitUnsubscribes, but there are significant differences:

    • _Subscribers has data about All Subscribers list only. _ListSubscribers shows status for all Lists available in Salesforce Marketing Cloud.
    • _BusinessUnitUnsubscribes has data about contacts unsubscribed from All Subscribers on every Business Unit. _ListSubscribers doesn't show Business Unit information, but it covers all Lists and all Statuses.
    NameDescriptionData TypeNullable
    AddedByThe ID of the user who ran the process that added the subscriber (might also be 0 or -1000)Number
    AddMethodThe method by which the subscriber was addedText
    CreatedDateThe date the subscriber was added to the specific listDateX
    DateUnsubscribedThe date the subscriber unsubscribedDateX
    EmailAddressThe subscriber's email addressTextX
    ListIDThe list ID number for the list used in the sendNumberX
    ListNameThe name of the list containing the subscribersTextX
    ListTypeShows whether the type is list or groupText
    StatusThe status of the subscriberTextX
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    SubscriberTypeThe type of subscriber (it will be ExactTarget)TextX

    When working with _ListSubscribers Data View:

    1. Thanks to having ListID, ListName and ListType fields, it allows you to make sense of the ListID field available in all other engagement-based System Data Views.
    2. This Data View, along with _Subscribers, _EnterpriseAttribute and _BusinessUnitUnsubscribes, does not have six-month data retention.
    3. You can only query Lists available on the current Business Unit. It's not possible to check Child's List subscription status from the Parent BU. The exception is the All Subscribers list that is shared across all Business Units.

    Mobile Connect Data Views

    Learn more about Mobile Connect SMS Data Views here.


    Journey Data Views

    _Journey

    Stores information about your Journeys for when context matters.

    NameDescriptionData TypeNullable
    VersionIDThe unique identifier for the version of the JourneyText
    JourneyIDThe unique identifier for the Journey. There are one or more VersionID's associated to a JourneyID.Text
    JourneyNameThe name of the JourneyText
    VersionNumberThe version number of the version of the JourneyNumber
    CreatedDateThe date that the version of the Journey was createdDate
    LastPublishedDateThe date that the version of the Journey was last publishedDateX
    ModifiedDateThe date that the version of the Journey was last editedDate
    JourneyStatusThe current running mode of the JourneyText

    When working with _Journey Data View:

    1. VersionID field is perfect to JOIN with _JourneyActivity. It lets you map multi-channel engagement to a particular Journey (visible in JourneyName) and its specific version (as shown in VersionNumber).
    2. You can also connect it to SMS channel using _SMSMessageTracking Data View by making a JOIN ON journey.VersionID = smsTracking.JBDefinitionID.
    3. Use JourneyStatus to check what is the current Journey Status. It is fantastic for both the WHERE statement and a data point for engagement analysis. Think about scheduled Automation that finds all emails performing below expectations and checks which are in the Active Journeys. For all found, it sends you a notification to check and improve. For awful results, you can even use this data in Script Activity to automatically stop the Journey with the SFMC REST API.
    4. The Date fields (CreatedDate, LastPublishedDate, ModifiedDate) are cool for automated cleanup of old Journeys, especially when paired with the _Sent data. For example, you can create monthly Automation that checks all Journeys that were last modified at least three months ago and, based on the send volume or performance, stop them and notify you about that.
    5. You can query only Journeys that currently exists in your Business Unit.
    You Should Know

    _Journey Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _Journey. You can query only those Journeys that were created in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.


    _JourneyActivity

    Stores information about Activities available in your Journeys. Must-have for joining Email data with Journey data.

    NameDescriptionData TypeNullable
    VersionIDThe unique identifier for the version of the JourneyText
    ActivityIDThe unique identifier for the activity. There are one or more ActivityID's associated to a VersionID.Text
    ActivityNameThe name of the activityTextX
    ActivityExternalKeyThe external key associated with the activityText
    JourneyActivityObjectIDUse this unique identifier to join to email tracking system Data Views to identify a Journey email's Triggered Send Definition.TextX
    ActivityTypeThe type of activityTextX

    When working with _JourneyActivity Data View:

    1. There are two key fields here: VersionID and JourneyActivityObjectID. JourneyActivityObjectID lets you match Journey Activity with specific Email Send. Use TriggererSendDefinitionObjectID available on either _Job, _Sent, _Open, _Click or _Bounce Data View. It is handy when you later use the VersionID field to JOIN _Journey Data View and with this connect specific Email engagement with particular Journey and its exact version. Fantastic for full scope reporting.
    2. You can also connect it to SMS channel using _SMSMessageTracking Data View by making a JOIN ON journeyActivity.ActivityID = smsTracking.JBActivityID.
    3. With the help of _Journey Data View, you can use the ActivityType field for an excellent little report created with SQL that will show which Journeys use which channels and what types of logic. For a more in-depth understanding of what happens in Journey, you need to use Script Activity with REST API instead, but SQL is perfect for glancing at the multi-channel use.
    4. _JourneyActivity Data View holds data about activities from deleted Journeys and Journey Versions, so if you want to see only activities currently in use, JOIN _Journey Data View.
    You Should Know

    _JourneyActivity Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _JourneyActivity. You can query only those Journey Activities that were created in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.


    Automation Data Views

    _AutomationInstance

    Provides historical information about Automation runs.

    NameDescriptionData TypeNullable
    MemberIDThe Account ID for the Business UnitNumber
    AutomationNameThe name of the automationText
    AutomationDescriptionThe description of the automationTextX
    AutomationCustomerKeyThe unique ID of the automationText
    AutomationInstanceIDThe unique ID of the specific automation runText
    AutomationTypeThe type of starting source used in automationText
    AutomationNotificationRecipient_CompleteEmail(s) receiving notification about completed runsTextX
    AutomationNotificationRecipient_ErrorEmail(s) receiving notification about errored runsTextX
    AutomationNotificationRecipient_SkipEmail(s) receiving notification about skipped runsTextX
    AutomationStepCountThe number of steps in the automationNumber
    AutomationInstanceIsRunOnceWas this specific automation run executed with Run Once? 1 for true, 0 for false in File Drop and Triggered automations. Null in Schedule automationsBoolean
    FilenameFromTriggerName of the file that triggered the automation for Triggered and File Drop automations. Null for Schedule automationsTextX
    AutomationInstanceScheduledTime_UTCStarting schedule datetime in UTC timezone for Schedule automations. Null for Triggered and File Drop automationDateX
    AutomationInstanceStartTime_UTCAutomation run start datetime in UTC timezone. Null if run is skippedDateX
    AutomationInstanceEndTime_UTCAutomation run end datetime in UTC timezone. Null if run is skipped or still runningDateX
    AutomationInstanceStatusThe status of the automation run at the time of queryingText
    AutomationInstanceActivityErrorDetailsThe first error message encountered in the automation runTextX

    When working with _AutomationInstance Data View:

    1. This data view stores all Automation runs, so you will see here separte row for each execution of the Automation. This is great basic audit tool for logging changes to the automation as well as a nice way to counting the amount of automation executions against licence limits.
    2. Key limitation of _AutomationInstance is that it shows data with 24 hours delay. If you need real-time information about Automation Studio status, you will still need an API approach. But for not that urget use cases this new option will be much more performant.
    3. If automation run errored out due to system or unclassified error, AutomationInstanceActivityErrorDetails will show "System Error occurred. Please contact support for details.". In other cases it will store the first error message. If there are more and you want to find them, you will need to leverage _AutomationActivityInstance Data View.
    4. All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with SQL Date Functions it might be best to use GETUTCDATE() instead of system date from GETDATE().
    5. AutomationInstanceID field is perfect to JOIN with _AutomationActivityInstance. It lets you find information about execution of each activity within the Automation in the specific run.
    You Should Know

    _AutomationInstance Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _AutomationInstance. You can query only those Automtion runs that were executed in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.

    _AutomationActivityInstance

    Provides historical information about Automation Studio Activity runs.

    NameDescriptionData TypeNullable
    MemberIDThe Account ID for the Business UnitNumber
    AutomationNameThe name of the automationText
    AutomationCustomerKeyThe unique ID of the automationText
    AutomationInstanceIDThe unique ID of the specific automation runText
    ActivityCustomerKeyThe unique ID of the activityText
    ActivityInstanceIDThe unique ID of the specific activity executionText
    ActivityTypeThe type of the activity (numeric ID)Number
    ActivityNameThe name of the activityText
    ActivityDescriptionThe description of the activityTextX
    ActivityInstanceStepThe two-dimensional description where in automation the activity is locatedText
    ActivityInstanceStartTime_UTCActivity execution start datetime in UTC timezone. Null if run is skippedDateX
    ActivityInstanceEndTime_UTCActivity execution end datetime in UTC timezone. Null if run is skipped or still runningDateX
    ActivityInstanceStatusThe status of the activity run at the time of queryingText
    ActivityInstanceStatusDetailsThe error message encountered in the activity executionTextX

    When working with _AutomationActivityInstance Data View:

    1. This data view stores all Automation Activity runs, so you will see here separte row for each execution of each Activity. It is awesome tool for checking how optimised our Activities are and what errors are troubling our Automations.
    2. Key limitation of _AutomationActivityInstance is that it shows data with 24 hours delay.
    3. If activity run errored out due to system or unclassified error, ActivityInstanceStatusDetails will show "System Error occurred. Please contact support for details.". In other cases it will store the error message.
    4. All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with SQL Date Functions it might be best to use GETUTCDATE() instead of system date from GETDATE().
    5. The start and end dates in this data view can be leveraged with DATEDIFF and AVG to calculate average time needed for each activity to finish. This information is crucial to assess whether the current automation Schedule is correct and where the optimisation efforts are required to protect against 30 minutes autokill.
    6. AutomationInstanceID field is perfect to JOIN with _AutomationInstance. It lets you find information about the Automation using this Activity.
    You Should Know

    _AutomationActivityInstance Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _AutomationActivityInstance. You can query only those Automation Activities that were created in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.


    Custom Data Views

    On top of all the built-in Data Views mentioned above, there is also a paid option for custom Data Views. As for the possibilities, the sky is the limit. Example? Lukas Lunow highlighted a fascinating one that solves the problem of knowing what is the current status of a Contact in a given Journey:

    You Should Know

    As shared by Lukas, since May 2021, there is longer no possibility to create Custom Data Views leveraging the Journey Builder.

    NameDescriptionData TypeNullable
    JourneyVersionNumberThe version number of the version of the JourneyNumber
    JourneyNameThe name of the JourneyText
    JourneyStatusTells you whether the Journey is still ActiveText
    ContactKeyThe subscriber key for the affected subscriberText
    ContactIDGlobal Contact ID (not Contact Key)Number
    ContactStatusTell you whether the contact is still in the Journey (Active, Exited or even more detailed like DidNotMeetEntryCriteria, ContactExitedByAPI)Text
    EntryDateDate of Journey EntryDate
    ExitDateDate of Journey Exit - including Goal / Exit Criteria. Null if still in Journey.Datex

    Yes, you can create a workaround to know whether the Contact is in a given Journey using standard Data Extension and Update Contact Journey Activities at the beginning and end of every Journey. Not only it requires you to remember always to add those additional steps. It also blocks you from using Goals and Exit Criteria.

    Custom Data View allow you to eat a cookie and have a cookie.

    You can certainly come up with other use cases that could be solved if only you had one additional data point. Now you can.

    - - +

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    +

    Data Views Basics

    +

    System Data Views are built-in backend Data Extensions that you can use to find information about your subscribers and sends. You cannot change them, but you can leverage their data in SQL queries for quick reports in Query Studio or outputting to the standard Data Extension. They are excellent fuel for SSJS logic.

    +

    Data Views have data retention settings set to 6 months. If you want to store any data for a more extended period, you must create an Automation that will be copying data to your Data Extension.

    +

    Be careful, however, as some of the System Data Views can get absurdly big quick, and making copies within your Marketing Cloud Instance may lead to performance issues. In such cases, a much better idea might be to export that data on a scheduled basis to an external Data Warehouse.

    +

    Another important point related to Data Views is always knowing which Data View you genuinely want to use. For example, in most cases, you will be interested in parent-level _Subscribers Data View, which means you will need to use the Ent. prefix in your query.

    +
    You Should Know

    Below you can find selected Salesforce Marketing Cloud Data Views focused on Subscribers, Journeys, Email and SMS Channel. I plan to cover the rest of them in the future.

    Be sure to check the excellent Dataviews.io - an interactive system tables relationship diagram created by Zuzanna Jarczyńska. It will for sure help you with multi-view JOINs.

    There is also a more detailed System Tables relationship diagram created by Cameron Roberts that contains SQL Database structure along with field lengths.

    +
    +

    Subscriber Data Views

    +

    _Subscribers

    +

    Stores information about your Subscribers. Great for high-level perspective or adding Email Address field to other more detailed Data Views.

    +
    NameDescriptionData TypeNullable
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    DateUndeliverableThe date an email for the subscriber was returned as undeliverableDateX
    DateJoinedThe Date, the subscriber, joined your listDateX
    DateUnsubscribedThe Date, the subscriber, unsubscribed from your listDateX
    DomainThe domain of the subscriberTextX
    EmailAddressThe subscriber's email addressEmail
    BounceCountThe total number of bounces accrued by the subscriberNumber
    SubscriberKeyA potential alternate identifier for subscribers.Text
    SubscriberTypeThe subscriber type for the affected subscriberText
    StatusThe status of the subscriberTextX
    LocaleThe locale code for the subscriberLocaleX
    +

    When working with _Subscribers Data View:

    +
      +
    1. If you are using the query in the child Business Unit, use Ent. prefix, as the data is stored on Parent BU level.
    2. +
    3. If you need high-level data on your subscribers, this Data View might be enough. If you want to learn more (for example, why a subscriber bounced, where did he unsubscribe), you will need to JOIN other Data Views.
    4. +
    5. Use SubscriberID to JOIN data from different engagement-based Data Views like _Sent, _Open, _Click or _Bounce.
    6. +
    7. The Status field is excellent for a quick check of your database quality. It is also nice to manage multiple records. Pull the selection of your subscribers with SQL Query, add a new status with custom value (for example, 'unsubscribed' AS Status) and leverage Automation to export-transfer-import the Data Extension to All Subscribers.
    8. +
    9. This Data View, along with _EnterpriseAttribute, _BusinessUnitUnsubscribes and _ListSubscribers, does not have six-month data retention.
    10. +
    +
    +

    _EnterpriseAttribute

    +

    Stores information about your Profile and Preference Attributes from Email Studio.

    +
    NameDescriptionData TypeNullable
    _SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record stored.Number
    +

    When working with _EnterpriseAttribute Data View:

    +
      +
    1. If you are using the query in the child Business Unit, always use ENT. prefix as it is enterprise-level only Data View.
    2. +
    3. When querying or joining _EnterpriseAttribute, always include the underscore before SubscriberID - this is the only Data View that requires it.
    4. +
    5. Despite the Email Address field is visible in the Salesforce Marketing Cloud UI when you go to Profile Attributes, it is not part of the _EnterpriseAttribute Data View. To get the Email Address of your Subscriber, query the _Subscribers Data View.
    6. +
    7. Unfortunately, the default Preference Attribute HTML Email is not accessible via query.
    8. +
    9. _EnterpriseAttribute Data View is unique, as it might contain spaces in field names. You build it by creating the Profile Attributes in Email Studio. If your profile attribute name contains space, you will have to use the square bracket notation to capture it: SELECT [Attribute With Spaces] FROM _EnterpriseAttribute.
    10. +
    11. This Data View, along with _Subscribers, _BusinessUnitUnsubscribes and _ListSubscribers , does not have six-month data retention.
    12. +
    +
    +

    Email Data Views

    +

    _Job

    +

    Stores information about your Email Sends Jobs. Great for capturing detailed data about your communication, especially when paired with Send Log. Must-have for extending your engagement-based Email Data Views.

    +
    NameDescriptionData TypeNullable
    JobIDThe job ID number for the email sendNumber
    EmailIDThe email ID for the jobNumberX
    AccountIDThe ID number for the account that performed the jobNumberX
    AccountUserIDThe ID number for the account user that performed the jobNumberX
    FromNameThe from name in the email sendTextX
    FromEmailThe from email address in the email sendEmailX
    SchedTimeThe time the job was scheduledDateX
    PickupTimeThe time the Marketing Cloud application started the jobDateX
    DeliveredTimeThe time the email was deliveredDateX
    EventIDThe ID for the job eventTextX
    IsMultipartWhether the job was sent as multi-part MIME or notBoolean
    JobTypeThe type of jobTextX
    JobStatusThe status of the jobTextX
    ModifiedByIf modified, the user who modified the jobNumberX
    ModifiedDateThe date the job was modifiedDateX
    EmailNameThe name of the email sent by the jobTextX
    EmailSubjectThe subject of the email sendTextX
    IsWrappedWhether the links in the email were wrapped for trackingBoolean
    TestEmailAddrThe test email address used in the jobEmailX
    CategoryThe job categoryText
    BccEmailAny email address send in the BCC fieldEmailX
    OriginalSchedTimeThe initially scheduled time for the jobDateX
    CreatedDateThe date the job was createdDate
    CharacterSetThe character set used in the jobTextX
    IPAddressThis value will always be a null value.TextX
    SalesForceTotalSubscriberCountThe total number of Salesforce subscribers included in the jobNumber
    SalesForceErrorSubscriberCountThe total number of Salesforce subscribers included in the job that received errorsNumber
    SendTypeThe type of send used in the jobText
    DynamicEmailSubjectThe dynamic email subject included in the jobTextX
    SuppressTrackingIf tracking information for this job was suppressedBoolean
    SendClassificationTypeThe type of send classification for the jobTextX
    SendClassificationThe custom name of send classification for the jobTextX
    ResolveLinksWithCurrentDataIf the job resolved links with current dataBoolean
    EmailSendDefinitionThe email send definition used in the jobTextX
    DeduplicateByEmailWhether the email addresses in the job are used to deduplicate subscribersBoolean
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionNumberX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX
    +

    When working with _Job Data View:

    +
      +
    1. JobID field will be your bread and butter to JOIN with other engagement-based Data Views.
    2. +
    3. EmailName, FromName, and FromEmail are handy data points missing in the _Sent, _Open, _Click, _Bounce Data Views and are worth checking for reporting needs.
    4. +
    5. If you are performing A/B tests or want to analyse the subject line's impact on performance, be sure to pick EmailSubject. Pair it with CASE to create a great knowledge source for your content team.
    6. +
    7. For debugging purposes, be sure to check out IsWrapped and SuppressTracking - if you are missing tracking data, CharacterSet - if you have problems with formatting, SendClassification - if you have issues with unsubscribers or spam complaints.
    8. +
    9. AccountUserID field is fantastic for _Job-based Audit Log creation. Unfortunately, there is no UI-based easy way to determine which user has which UserID. You can either use SOAP API or match based on these SQL results.
    10. +
    +
    You Should Know

    _Job Data View is unique among other Email-focused Data Views, as it shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _Job. You can query only those jobs that occurred in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.

    +
    +

    _Sent

    +

    Stores information about your Email Sends. Great for understanding who had a chance to receive your message and whose communication did not leave your system.

    +
    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the send took placeDate
    DomainThe domain at which the send occurredText
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX
    +

    When working with _Sent Data View:

    +
      +
    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Open, _Click, _Bounce for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. +
    3. The most valuable data here is the EventDate field that lets you know when the email was sent (and whether that happened at all).
    4. +
    5. If you have triggered a send for an email and after a few minutes you don't see it here, in most cases, it means that the send was blocked and never left Marketing Cloud. Check enhanced Send Log, applied personalisation, data source, RaiseError scripts.
    6. +
    +
    +

    _Open

    +

    Stores information about your Email Opens. For when you need to know when someone opened your email. Kind of.

    +
    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the open took placeDate
    DomainThe domain at which the open occurredText
    IsUniqueWhether the event is unique or repeatedBooleanX
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX
    +

    When working with _Open Data View:

    +
      +
    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Click, _Bounce for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. +
    3. Use _open.IsUnique = 1 in JOIN or WHERE to focus on the the first occurence of each event. Example: Query for Debugging Email Sends.
    4. +
    5. The most valuable data here is the EventDate field that lets you know when the email was opened (and whether that happened at all). But with email opens, it's not that easy. In many cases, the lack of open data in this Data View doesn't mean that your recipient for sure did not open the email. And in some instances, tracked open might not mean he did.
    6. +
    +
    You Should Know

    There is no official engagement feedback loop that informs Marketing Cloud (or any other Marketing Automation Platform) that your recipient opened the email.

    All Marketing Automation Platforms put an invisible 1px wide image in the email body that is unique for every email you send. When someone opens an email, its images are downloaded from the server. SFMC treats the download of this 1px wide image as proof that the recipient opened the email. And in most cases, it is correct. But...

    The images don't always render (that's why you should always use alt-text). Some recipients opt-in on a per-email basis to download email graphics. Government audiences might not even have this option. Because of the admin policy, the privacy concerns over engagement tracking or limited internet bandwidth. In such a case, even if the user opens an email, you won't have information about it.

    It might lead to weird data, like clicks visible for contacts that did not open. Marketing Automation Platforms track Clicks via a different, more confident approach.

    It can also lead to cases where a user has both click and open data, but click data is earlier than the open. Why? Your recipient clicked something in your email and only after that decided to allow his email program to load the images in it.

    There might be cases where the data is wrong the other way - when you see that email as opened, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on _Open and _Click Data Views, as those bots will open the email and click all its links within a second. Something not possible for an actual human.

    +
    +

    _Click

    +

    Stores information about your Email Clicks. Detailed click reporting and behavioural logic are possible, thanks to this one.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber record.Number
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the click took placeDate
    DomainThe domain at which the click occurredText
    URLThe URL for the link clicked. Dynamic elements are shown as code: www.example.com?id=%%SubID%%TextX
    LinkNameThe link name assigned in the email sendTextX
    LinkContentThe link content assigned in the email send. Dynamic elements are shown as result: www.example.com?id=12345TextX
    IsUniqueWhether the event is unique or repeated
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX
    +

    When working with _Click Data View:

    +
      +
    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Open, _Bounce for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. +
    3. Use _click.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event. Example: Query for Debugging Email Sends.
    4. +
    5. The most valuable data here is the EventDate field that lets you know when the email was clicked (and whether that happened at all).
    6. +
    7. You can significantly improve the value of that information by checking the LinkName and LinkContent fields to understand which links proved interesting for your customers.
    8. +
    9. Suppose you want to create an extensive report on link clicks. In that case, you might want to use the URL field instead of LinkContent due to the former not showing final personalisation values. It will be much easier to group clicks or even cleanly delete all AMPScript from them.
    10. +
    +
    You Should Know

    There might be cases where the click data is wrong - when you see that email as clicked, but in reality, the user didn't engage with it. It sometimes happens for B2B sends when your recipient's administrator uses bots that automatically check the emails for malicious or spammy content. You can recognise such things by checking the EventDate on _Open and _Click Data Views, as those bots will open the email and click all its links within a second. Something not possible for a actual human.

    +
    +

    _Bounce

    +

    Stores information about your Email Bounces. Best place in Marketing Cloud to understand why your messages are not getting delivered.

    This Data View, along with _Complaint, should be monitored regularly to assess the health of your email marketing.

    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the bounce took placeDate
    IsUniqueWhether the event is unique or repeated - 1 for the first occurrence, 0 for subsequentBoolean
    DomainThe domain at which the bounce occurredText
    BounceCategoryIDThe ID number for the bounce categoryNumber
    BounceCategoryThe category of the bounceTextX
    BounceSubcategoryIDThe ID number for the bounce subcategoryNumberX
    BounceSubcategoryThe subcategory of the bounceTextX
    BounceTypeIDThe ID number for the bounce typeNumber
    BounceTypeThe type of bounce that occurredTextX
    SMTPBounceReasonThe reason for the bounce relayed by the mail systemTextX
    SMTPMessageThe message regarding the bounce from the mail systemTextX
    SMTPCodeThe error code for the bounce from the mail systemNumberX
    TriggererSendDefinitionObjectIDThe object ID for the triggered send definitionTextX
    TriggeredSendCustomerKeyThe customer key for the triggered sendTextX
    IsFalseBounceIndicates a false bounce if SFMC received delivery receipt after receiving bounce.BooleanX
    +

    When working with _Bounce Data View:

    +
      +
    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Open, _Click for a single engagement with a particular subscriber. Example: Query for Debugging Email Sends.
    2. +
    3. Use _bounce.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event. Example: Query for Debugging Email Sends.
    4. +
    5. The Domain helps aggregate the bounce data to see any domain-specific problem with deliverability.
    6. +
    7. SMTPBounceReason is the most helpful information when you want to understand what happened to your send. Be careful - this value can be configured to a custom string by the server owner. Some administrators are using this to inform you about a specific issue. Some are even faking the information to limit the emails coming to their servers from selected sources.
    8. +
    9. SMTPCode is useful for getting additional data on the Bounce Reason. Watch especially for 541 and 554. In most cases, it means you are considered a spammer by the server or already blocklisted. I recommend you to create an Automation with Verification Activity to get an automated warning whenever there are more than a few occurrences. Triage immediately.
    10. +
    11. If you get errors when trying to select IsFalseBounce - it might be missing on the SFMC backend. Create a Support Ticket to resolve it.
    12. +
    +
    You Should Know

    SMTPBounceReason field is nvarchar(max) SQL type, and due to that might be longer than the 4000 characters limit for the Data Extension string length in Salesforce Marketing Cloud. If you want to save this data outside of Data View, be sure to use LEFT(SMTPBounceReason, 4000).

    +

    _Complaint

    +

    _Complaint Data View stores Email Service Providers Feedback Loop (FBL) data. It means that if someone clicks the Report Spam button for your email and there is FBL in place, this information will be added to the Data View. It will also result in an unsubscribe event and be visible in the _Unsubscribe.

    +

    Currently, Salesforce Marketing Cloud supports Feedback Loops for Bluetie (Excite), Comcast, Cox, Fastmail, Microsoft Hotmail, Italia Online, La Poste, Liberty Global, Locaweb, Mail.ru, OpenSRS (Tucows), Rackspace (Mailtrust), Seznam, Synacor, Telenor, Telstra, Terra, UOL (Brazil), USA.net, XS4ALL and Yandex.

    +

    You can additionally register for the Yahoo Feedback Loop. Gmail also has a Feedback Loop system, but it works differently and won't be in _Complaint Data View.

    +

    This Data View, along with _Bounce, should be monitored regularly to assess the health of your email marketing.

    +
    NameDescriptionData TypeNullable
    AccountIDYour parent account ID (MID) numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the send took placeDate
    IsUniqueWhether the event is unique or repeated - 1 for the first occurrence, 0 for subsequentBoolean
    DomainThe domain at which the send occurredText
    +

    When working with _Complaint Data View:

    +
      +
    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Sent, _Open, _Click for a single engagement with a particular subscriber.
    2. +
    3. Use _complaint.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event.
    4. +
    5. The Domain helps aggregate the Complaint data to see any domain-specific problem with targeting your communication.
    6. +
    +
    +

    Subscription Data Views

    +

    Subscription management in Salesforce Marketing Cloud is complex. Very complex.

    +

    It starts with four levels of unsubscriptions:

    +
      +
    1. List unsubscribe = no more sends from a particular list or publication list.
    2. +
    3. Business Unit unsubscribe = no more sends from a particular business unit.
    4. +
    5. Master unsubscribe = no more sends from your Marketing Cloud.
    6. +
    7. Global unsubscribe = no more sends from Marketing Cloud. Any, globally.
    8. +
    +

    And it gets even more interesting when you consider that triggering specific unsubscription level depends on email configuration, Email Studio configuration, preference center configuration and subscriber's behaviour.

    +

    Oh, and there is no out-of-the-box unsubscription from Data Extensions, which are currently the most popular segmentation and targeting tool.

    +

    To give us at least a chance to make sense of that mess, Salesforce created multiple System Data Views related to (un)subscriptions.

    +
    You Should Know

    Spam Complaint and List-Unsubscribe Header are pretty particular unsubscription use cases. They are added to _Unsubscribe and _BusinessUnitUnsubscribe as unsubscriptions from a list used in send (for example, ID of Publication List selected for the send). In reality, Marketing Cloud will perform automatic unsubscribe from the All Subscriber list (depending on Email Studio settings - Child BU's or Enterprise one), not the list mentioned in ListID.

    As a result, when querying, you will see the list-specific unsubscribe that doesn't result in unsubscription from the list but instead blocks all commercial communication as a Business Unit or Master unsubscribe.

    Custom solution (Automation with Query and Script Activities) will be necessary to perform the list-specific unsubscribe.

    +

    _Unsubscribe

    +

    _Unsubscribe Data View stores data about unsubscribe events. The wording here is crucial, as it explains the difference from _Subscribers Data View unsubsrciption counts.

    +

    In _Subscribers, you can check what is the current subscription status for the All Subscribers list. In _Unsubscribe, you see the unsubscription events happening from List-Unsubscribe Header, LogUnsubEvent API call, Reply Mail Management responses, Complaints and out-of-the-box Preference Center - all linked to a specific _Job. It is also not limited to All Subscribers but also covers unsubscribes from other types of lists.

    +

    It means that status changes like Import Activity, direct API change, manual change in the Email Studio (not Job-specific) will be reflected in the _Subscribers Data View, but not in the _Unsubscribe. On the other hand, UnsubEvents does not necessarily change the Status in the _Subscribers. For example, taking care of List-Unsubscribe Header clicks require dedicated Automation to get this data from _Unsubscribe Data View and push it to other parts of your consent data model.

    +

    This Data View stores data only for six-months, so retention-less _Subscribers Data View might show more unsubscribed records if you are not cleaning them from SFMC regularly.

    +

    All of this makes _Unsubscribe a much better source of knowledge about unsubscription.

    +
    NameDescriptionData TypeNullable
    AccountIDYour account ID numberNumber
    OYBAccountIDThe account ID (MID) number of the child Business Unit that owns the data. If queried on parent Business Unit, it will be NullNumberX
    JobIDThe job ID number for the email sendNumber
    ListIDThe list ID number for the list used in the sendNumber
    BatchIDThe batch ID number for any batches used in the sendNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    EventDateThe date the unsubscribe took placeDate
    IsUniqueWhether the event is unique or repeated - 1 for the first occurrence, 0 for subsequentBoolean
    DomainThe domain at which the unsubscribe occurredText
    +

    When working with _Unsubscribe Data View:

    +
      +
    1. Use JobID, ListID, BatchID and SubscriberId or SubscriberKey to match various events from multiple Data Views like _Job and _Subscribers to check unsubscription context.
    2. +
    3. Use _unsubscribe.IsUnique = 1 in JOIN or WHERE to focus on the first occurence of each event.
    4. +
    5. If you query this Data View on the child Business Unit, it will return only unsubscribe events from that specific BU.
    6. +
    7. The most valuable data here are: +
        +
      • EventDate field that lets you know when the unsubscription happened
      • +
      • ListID field that tells you which list is impacted by the unsubscription
      • +
      +
    8. +
    +
    You Should Know

    If the subscriber clicks "Unsubscribe from All" on the out-of-the-box unsubscription center, it will perform Master Unsubscribe from all Lists. As it is a single event, it will be stored as a single record in the _Unsubscribe Data View with random ListID assigned to it. For a complete picture, you will need to check _ListSubscribers Data View.

    +
    +

    _BusinessUnitUnsubscribes

    +

    _Subscribers Data View might give you information about the current state of subscriptions on the All Subscribers list. But if in Email Studio you configure Business Unit Level unsubscribes, this information will not be helpful, as the data stored there will not reflect the subscription status in a specific Business Unit.

    +

    Here comes the fresh _BusinessUnitUnsubscribes Data View. It shows you the only unsubscribed contacts for each Business Unit. If the contact resubscribes - it will disappear from this Data View.

    +

    _BusinessUnitUnsubscribes Data View will work differently depending on your SFMC unsubscription configuration. You will be able to query it from the Child BU level only for Business Units set to "unsubscribe from this business unit only".

    +
    NameDescriptionData TypeNullable
    BusinessUnitIDThe Account ID for the Business UnitNumber
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    UnsubDateUTCThe date the subscriber unsubscribed on the BU.DateX
    UnsubReasonThe reason listed is a custom value configured by your administrator.TextX
    +

    When working with _BusinessUnitUnsubscribes Data View:

    +
      +
    1. Remember that it stores only currently unsubscribed contacts. Not unsubscribe event data (that's in _Unsubscribe) and not other statuses (like bounced, held). It will also not show unsubscribed users after they resubscribed or got deleted.
    2. +
    3. SubscriberID or SubscriberKey along with UnsubDateUTC might fuzzy match the data in this data view with _Unsubscribe.
    4. +
    5. UnsubDateUTC, as name suggests, is in UTC instead of the SFMC-standard UTC-6. Remember to use DATEADD to normalize it before comparing to other system dates.
    6. +
    7. The real treat in this data view (apart from finally having an easy option to see Business Unit unsubscribes) is the UnsubReason field that can tell you more about the unsubscribe.
    8. +
    9. This Data View, along with _Subscribers, _EnterpriseAttribute and _ListSubscribers, does not have six-month data retention.
    10. +
    +
    You Should Know

    UnsubDateUTC not only uses a different timezone from the rest of the system dates. It differs by a few milliseconds from _Unsubscribe EventDate. When querying (SFMC doesn't show seconds for date fields), you won't see it, but the comparison is using the full datetime value.

    Because of it, you cannot match it out-of-the-box. DATEDIFF is here to save the day:

    DATEDIFF will allow you to compare despite the difference
    DATEDIFF(MINUTE, _Unsubscribe.EventDate, DATEADD(HOUR, -6, _BusinessUnitUnsubscribes.UnsubDateUTC)) < 1
    +
    +

    _ListSubscribers

    +

    _ListSubscribers Data View stores data about the current status of the subscription. It might sound similar to _Subscribers and _BusinessUnitUnsubscribes, but there are significant differences:

    +
      +
    • _Subscribers has data about All Subscribers list only. _ListSubscribers shows status for all Lists available in Salesforce Marketing Cloud.
    • +
    • _BusinessUnitUnsubscribes has data about contacts unsubscribed from All Subscribers on every Business Unit. _ListSubscribers doesn't show Business Unit information, but it covers all Lists and all Statuses.
    • +
    +
    NameDescriptionData TypeNullable
    AddedByThe ID of the user who ran the process that added the subscriber (might also be 0 or -1000)Number
    AddMethodThe method by which the subscriber was addedText
    CreatedDateThe date the subscriber was added to the specific listDateX
    DateUnsubscribedThe date the subscriber unsubscribedDateX
    EmailAddressThe subscriber's email addressTextX
    ListIDThe list ID number for the list used in the sendNumberX
    ListNameThe name of the list containing the subscribersTextX
    ListTypeShows whether the type is list or groupText
    StatusThe status of the subscriberTextX
    SubscriberIDThe subscriber ID for the affected subscriberNumber
    SubscriberKeyThe subscriber key for the affected subscriberText
    SubscriberTypeThe type of subscriber (it will be ExactTarget)TextX
    +

    When working with _ListSubscribers Data View:

    +
      +
    1. Thanks to having ListID, ListName and ListType fields, it allows you to make sense of the ListID field available in all other engagement-based System Data Views.
    2. +
    3. This Data View, along with _Subscribers, _EnterpriseAttribute and _BusinessUnitUnsubscribes, does not have six-month data retention.
    4. +
    5. You can only query Lists available on the current Business Unit. It's not possible to check Child's List subscription status from the Parent BU. The exception is the All Subscribers list that is shared across all Business Units.
    6. +
    +
    +

    Mobile Connect Data Views

    +

    Learn more about Mobile Connect SMS Data Views here.

    +
    +

    Journey Data Views

    +

    _Journey

    +

    Stores information about your Journeys for when context matters.

    +
    NameDescriptionData TypeNullable
    VersionIDThe unique identifier for the version of the JourneyText
    JourneyIDThe unique identifier for the Journey. There are one or more VersionID's associated to a JourneyID.Text
    JourneyNameThe name of the JourneyText
    VersionNumberThe version number of the version of the JourneyNumber
    CreatedDateThe date that the version of the Journey was createdDate
    LastPublishedDateThe date that the version of the Journey was last publishedDateX
    ModifiedDateThe date that the version of the Journey was last editedDate
    JourneyStatusThe current running mode of the JourneyText
    +

    When working with _Journey Data View:

    +
      +
    1. VersionID field is perfect to JOIN with _JourneyActivity. It lets you map multi-channel engagement to a particular Journey (visible in JourneyName) and its specific version (as shown in VersionNumber).
    2. +
    3. You can also connect it to SMS channel using _SMSMessageTracking Data View by making a JOIN ON journey.VersionID = smsTracking.JBDefinitionID.
    4. +
    5. Use JourneyStatus to check what is the current Journey Status. It is fantastic for both the WHERE statement and a data point for engagement analysis. Think about scheduled Automation that finds all emails performing below expectations and checks which are in the Active Journeys. For all found, it sends you a notification to check and improve. For awful results, you can even use this data in Script Activity to automatically stop the Journey with the SFMC REST API.
    6. +
    7. The Date fields (CreatedDate, LastPublishedDate, ModifiedDate) are cool for automated cleanup of old Journeys, especially when paired with the _Sent data. For example, you can create monthly Automation that checks all Journeys that were last modified at least three months ago and, based on the send volume or performance, stop them and notify you about that.
    8. +
    9. You can query only Journeys that currently exists in your Business Unit.
    10. +
    +
    You Should Know

    _Journey Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _Journey. You can query only those Journeys that were created in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.

    +
    +

    _JourneyActivity

    +

    Stores information about Activities available in your Journeys. Must-have for joining Email data with Journey data.

    +
    NameDescriptionData TypeNullable
    VersionIDThe unique identifier for the version of the JourneyText
    ActivityIDThe unique identifier for the activity. There are one or more ActivityID's associated to a VersionID.Text
    ActivityNameThe name of the activityTextX
    ActivityExternalKeyThe external key associated with the activityText
    JourneyActivityObjectIDUse this unique identifier to join to email tracking system Data Views to identify a Journey email's Triggered Send Definition.TextX
    ActivityTypeThe type of activityTextX
    +

    When working with _JourneyActivity Data View:

    +
      +
    1. There are two key fields here: VersionID and JourneyActivityObjectID. JourneyActivityObjectID lets you match Journey Activity with specific Email Send. Use TriggererSendDefinitionObjectID available on either _Job, _Sent, _Open, _Click or _Bounce Data View. It is handy when you later use the VersionID field to JOIN _Journey Data View and with this connect specific Email engagement with particular Journey and its exact version. Fantastic for full scope reporting.
    2. +
    3. You can also connect it to SMS channel using _SMSMessageTracking Data View by making a JOIN ON journeyActivity.ActivityID = smsTracking.JBActivityID.
    4. +
    5. With the help of _Journey Data View, you can use the ActivityType field for an excellent little report created with SQL that will show which Journeys use which channels and what types of logic. For a more in-depth understanding of what happens in Journey, you need to use Script Activity with REST API instead, but SQL is perfect for glancing at the multi-channel use.
    6. +
    7. _JourneyActivity Data View holds data about activities from deleted Journeys and Journey Versions, so if you want to see only activities currently in use, JOIN _Journey Data View.
    8. +
    +
    You Should Know

    _JourneyActivity Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _JourneyActivity. You can query only those Journey Activities that were created in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.

    +
    +

    Automation Data Views

    +

    _AutomationInstance

    +

    Provides historical information about Automation runs.

    +
    NameDescriptionData TypeNullable
    MemberIDThe Account ID for the Business UnitNumber
    AutomationNameThe name of the automationText
    AutomationDescriptionThe description of the automationTextX
    AutomationCustomerKeyThe unique ID of the automationText
    AutomationInstanceIDThe unique ID of the specific automation runText
    AutomationTypeThe type of starting source used in automationText
    AutomationNotificationRecipient_CompleteEmail(s) receiving notification about completed runsTextX
    AutomationNotificationRecipient_ErrorEmail(s) receiving notification about errored runsTextX
    AutomationNotificationRecipient_SkipEmail(s) receiving notification about skipped runsTextX
    AutomationStepCountThe number of steps in the automationNumber
    AutomationInstanceIsRunOnceWas this specific automation run executed with Run Once? 1 for true, 0 for false in File Drop and Triggered automations. Null in Schedule automationsBoolean
    FilenameFromTriggerName of the file that triggered the automation for Triggered and File Drop automations. Null for Schedule automationsTextX
    AutomationInstanceScheduledTime_UTCStarting schedule datetime in UTC timezone for Schedule automations. Null for Triggered and File Drop automationDateX
    AutomationInstanceStartTime_UTCAutomation run start datetime in UTC timezone. Null if run is skippedDateX
    AutomationInstanceEndTime_UTCAutomation run end datetime in UTC timezone. Null if run is skipped or still runningDateX
    AutomationInstanceStatusThe status of the automation run at the time of queryingText
    AutomationInstanceActivityErrorDetailsThe first error message encountered in the automation runTextX
    +

    When working with _AutomationInstance Data View:

    +
      +
    1. This data view stores all Automation runs, so you will see here separte row for each execution of the Automation. This is great basic audit tool for logging changes to the automation as well as a nice way to counting the amount of automation executions against licence limits.
    2. +
    3. Key limitation of _AutomationInstance is that it shows data with 24 hours delay. If you need real-time information about Automation Studio status, you will still need an API approach. But for not that urget use cases this new option will be much more performant.
    4. +
    5. If automation run errored out due to system or unclassified error, AutomationInstanceActivityErrorDetails will show "System Error occurred. Please contact support for details.". In other cases it will store the first error message. If there are more and you want to find them, you will need to leverage _AutomationActivityInstance Data View.
    6. +
    7. All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with SQL Date Functions it might be best to use GETUTCDATE() instead of system date from GETDATE().
    8. +
    9. AutomationInstanceID field is perfect to JOIN with _AutomationActivityInstance. It lets you find information about execution of each activity within the Automation in the specific run.
    10. +
    +
    You Should Know

    _AutomationInstance Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _AutomationInstance. You can query only those Automtion runs that were executed in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.

    +

    _AutomationActivityInstance

    +

    Provides historical information about Automation Studio Activity runs.

    +
    NameDescriptionData TypeNullable
    MemberIDThe Account ID for the Business UnitNumber
    AutomationNameThe name of the automationText
    AutomationCustomerKeyThe unique ID of the automationText
    AutomationInstanceIDThe unique ID of the specific automation runText
    ActivityCustomerKeyThe unique ID of the activityText
    ActivityInstanceIDThe unique ID of the specific activity executionText
    ActivityTypeThe type of the activity (numeric ID)Number
    ActivityNameThe name of the activityText
    ActivityDescriptionThe description of the activityTextX
    ActivityInstanceStepThe two-dimensional description where in automation the activity is locatedText
    ActivityInstanceStartTime_UTCActivity execution start datetime in UTC timezone. Null if run is skippedDateX
    ActivityInstanceEndTime_UTCActivity execution end datetime in UTC timezone. Null if run is skipped or still runningDateX
    ActivityInstanceStatusThe status of the activity run at the time of queryingText
    ActivityInstanceStatusDetailsThe error message encountered in the activity executionTextX
    +

    When working with _AutomationActivityInstance Data View:

    +
      +
    1. This data view stores all Automation Activity runs, so you will see here separte row for each execution of each Activity. It is awesome tool for checking how optimised our Activities are and what errors are troubling our Automations.
    2. +
    3. Key limitation of _AutomationActivityInstance is that it shows data with 24 hours delay.
    4. +
    5. If activity run errored out due to system or unclassified error, ActivityInstanceStatusDetails will show "System Error occurred. Please contact support for details.". In other cases it will store the error message.
    6. +
    7. All date fields in this data view are UTC based (unlike most other Data Views) so when manipulating them with SQL Date Functions it might be best to use GETUTCDATE() instead of system date from GETDATE().
    8. +
    9. The start and end dates in this data view can be leveraged with DATEDIFF and AVG to calculate average time needed for each activity to finish. This information is crucial to assess whether the current automation Schedule is correct and where the optimisation efforts are required to protect against 30 minutes autokill.
    10. +
    11. AutomationInstanceID field is perfect to JOIN with _AutomationInstance. It lets you find information about the Automation using this Activity.
    12. +
    +
    You Should Know

    _AutomationActivityInstance Data View shows data limited to a specific Business Unit. Your parent Business Unit has access to _Sent, _Open, _Click and other data from all Business Units, but this is not the case with _AutomationActivityInstance. You can query only those Automation Activities that were created in the Business Unit where you execute your SQL snippet.

    Always consider this when choosing Business Unit to execute the query and the type of JOIN statement.

    +
    +

    Custom Data Views

    +

    On top of all the built-in Data Views mentioned above, there is also a paid option for custom Data Views. As for the possibilities, the sky is the limit. Example? Lukas Lunow highlighted a fascinating one that solves the problem of knowing what is the current status of a Contact in a given Journey:

    +
    You Should Know

    As shared by Lukas, since May 2021, there is longer no possibility to create Custom Data Views leveraging the Journey Builder.

    +
    NameDescriptionData TypeNullable
    JourneyVersionNumberThe version number of the version of the JourneyNumber
    JourneyNameThe name of the JourneyText
    JourneyStatusTells you whether the Journey is still ActiveText
    ContactKeyThe subscriber key for the affected subscriberText
    ContactIDGlobal Contact ID (not Contact Key)Number
    ContactStatusTell you whether the contact is still in the Journey (Active, Exited or even more detailed like DidNotMeetEntryCriteria, ContactExitedByAPI)Text
    EntryDateDate of Journey EntryDate
    ExitDateDate of Journey Exit - including Goal / Exit Criteria. Null if still in Journey.Datex
    +

    Yes, you can create a workaround to know whether the Contact is in a given Journey using standard Data Extension and Update Contact Journey Activities at the beginning and end of every Journey. Not only it requires you to remember always to add those additional steps. It also blocks you from using Goals and Exit Criteria.

    +

    Custom Data View allow you to eat a cookie and have a cookie.

    +

    You can certainly come up with other use cases that could be solved if only you had one additional data point. Now you can.

    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 5aff7a889..eb7dd9c75 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,22 +1,122 @@ - + - -Docs & Snippets | Mateusz Dąbrowski + +Docs & Snippets | Mateusz Dąbrowski - - - + + + -
    -

    Docs & Snippets

    SSJS + JS + AMPScript + SQL + SFMC & MCP Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.

    Zen of SFMC

    Salesforce Marketing Cloud is a complex and flexible tool. This combination is a dream-come-true set for enterprise Marketing Automation tools, but on the other hand, it enables mistakes and messy solutions. Find the right path to success through a best-practice fuelled checklist full of tool-based explanations and examples.

    Read about Zen of SFMC

    Server-Side JavaScript

    SSJS is an XX-century version of JavaScript paired with proprietary libraries created by Salesforce. It is one of the programmatic tools useful to leverage Marketing Cloud to its fullest potential. I am creating this documentation to make my (and hopefully also yours) work easier.

    SSJS Documentation

    SSJS Snippets

    Read about SSJS

    JavaScript

    In this part, I am gathering selected elements of modern vanilla JavaScript that I find helpful for marketing technologists. Expect guides on asynchronous calls to API and backend resources, form-focused DOM manipulation and playing with data objects.

    JS Documentation

    JS Snippets

    Read about JavaScript

    AMPScript

    AMPScript is a proprietary scripting language in Salesforce Marketing Cloud along with SSJS. Out of the two, it is simpler and more performant, but too limited for complex solutions. Good starting point for marketers without development experience. Best option for scripting in messaging.

    AMPScript Documentation

    AMPScript Snippets

    Read about AMPScript

    SFMC SQL

    To fully leverage the Salesforce Marketing Cloud Data Extensions and Automation Studio, SQL is a must-have. Here I gathered both the language basics and some of the most valuable snippets to copy and paste shamelessly.

    SQL Documentation

    SQL Snippets

    Read about SFMC SQL

    SFMC Config

    Many things in Salesforce Marketing Cloud aren't coding but have a massive impact on the code. Permissions. System Data Views. Configuration options. Here I focus on the most important ones that are crucial for Marketing Cloud developers.

    Read about SFMC Config

    Marketing Cloud Personalization

    Salesforce Marketing Cloud Personalization (Interaction Studio) is a cross-channel real-time hyper-personalisation engine in Salesforce Marketing Cloud. Behind that cool-looking description is a powerful tool that lets your company adapt every point of contact to each person. Neat!

    MC Personalization Documentation

    MC Personalization Snippets

    Read about MC Personalization

    Changes

    I'm updating the docs ongoingly, so expect changes. You can track those by watching and starring the website's Github Repository.

    - - +

    Docs & Snippets

    SSJS + JS + AMPScript + SQL + SFMC & MCP Config documentation and code snippets that I find useful for developing Salesforce Marketing Cloud.

    +

    Zen of SFMC

    +

    Salesforce Marketing Cloud is a complex and flexible tool. This combination is a dream-come-true set for enterprise Marketing Automation tools, but on the other hand, it enables mistakes and messy solutions. Find the right path to success through a best-practice fuelled checklist full of tool-based explanations and examples.

    +Read about Zen of SFMC +

    Server-Side JavaScript

    +

    SSJS is an XX-century version of JavaScript paired with proprietary libraries created by Salesforce. It is one of the programmatic tools useful to leverage Marketing Cloud to its fullest potential. I am creating this documentation to make my (and hopefully also yours) work easier.

    +

    SSJS Documentation

    + +

    SSJS Snippets

    + +Read about SSJS +

    JavaScript

    +

    In this part, I am gathering selected elements of modern vanilla JavaScript that I find helpful for marketing technologists. Expect guides on asynchronous calls to API and backend resources, form-focused DOM manipulation and playing with data objects.

    +

    JS Documentation

    + +

    JS Snippets

    + +Read about JavaScript +

    AMPScript

    +

    AMPScript is a proprietary scripting language in Salesforce Marketing Cloud along with SSJS. Out of the two, it is simpler and more performant, but too limited for complex solutions. Good starting point for marketers without development experience. Best option for scripting in messaging.

    +

    AMPScript Documentation

    + +

    AMPScript Snippets

    + +Read about AMPScript +

    SFMC SQL

    +

    To fully leverage the Salesforce Marketing Cloud Data Extensions and Automation Studio, SQL is a must-have. Here I gathered both the language basics and some of the most valuable snippets to copy and paste shamelessly.

    +

    SQL Documentation

    + +

    SQL Snippets

    + +Read about SFMC SQL +

    SFMC Config

    +

    Many things in Salesforce Marketing Cloud aren't coding but have a massive impact on the code. Permissions. System Data Views. Configuration options. Here I focus on the most important ones that are crucial for Marketing Cloud developers.

    + +Read about SFMC Config +

    Marketing Cloud Personalization

    +

    Salesforce Marketing Cloud Personalization (Interaction Studio) is a cross-channel real-time hyper-personalisation engine in Salesforce Marketing Cloud. Behind that cool-looking description is a powerful tool that lets your company adapt every point of contact to each person. Neat!

    +

    MC Personalization Documentation

    + +

    MC Personalization Snippets

    + +Read about MC Personalization +

    Changes

    +

    I'm updating the docs ongoingly, so expect changes. You can track those by watching and starring the website's Github Repository.

    \ No newline at end of file diff --git a/docs/interaction-studio/mcp-catalog-architecture/index.html b/docs/interaction-studio/mcp-catalog-architecture/index.html index 8da696ddb..0dfebb709 100644 --- a/docs/interaction-studio/mcp-catalog-architecture/index.html +++ b/docs/interaction-studio/mcp-catalog-architecture/index.html @@ -1,22 +1,233 @@ - + - -MCP Catalog Architecture | Mateusz Dąbrowski + +MCP Catalog Architecture | Mateusz Dąbrowski - - - + + + -
    -

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    Catalog Basics & Limitations

    The purpose of the Marketing Cloud Personalization (Interaction Studio) Catalog is to store your asseet data along with interconnecting relationships for personalisation and machine learning purposes.

    There are five out-of-the-box objects: Products, Articles, Blog Posts, Categories and Promotions. You can also create up to 25 custom Catalog Objects.

    Each Object contains some built-in attributes (like Name, URL, Description, Promotable) and can be extended with custom attributes up to a total of 35 attributes on an Object.

    All of the above can be stitched together using prebuilt and custom relationships between Catalog Objects (for example, the built-in relationship between a Product and a Category) - allowing for connections of up to 15 Categories per Item and up to 50 related Catalog Object values per Item.

    With up to 2 000 000 Items per Catalog and up to 10 000 000 Items in total across all Catalogs, MC Personalization provides a lot of flexibility to architect a Catalog of your dreams.

    However, some quirks and features require more consideration to make the most out of MCP capabilities. Especially as some wrong moves can be tough to reverse. Let's dive in.

    Catalog Data Sources

    There are three key sources of data for the Catalog:

    1. Manual via UI - Good for checking data and performing minor fixes, but awful for data ingestion.
    2. Web/Mobile SDK - Real-time, but performance-heavy and dependent on user behaviour.
    3. ETL Feed - Best performance and can cover the whole Catalog regardless of user behaviour, but can be updated at most every 15 minutes.

    So which one should you use - Sitemap or ETL?

    Why not both?

    Mixing both sources is very tempting as it sounds like the best of both worlds. Unfortunately, it is not recommended approach due to MCP's backend limitations. Sending the same Items through both channels impacts performance, creates concurrency and can lead to incorrect and not-so-easy-to-fix issues with your Catalog.

    For example, if you control the Exclusion and Eligibility of the Products using Sitemap and the promotable attribute, the ETL won't be able to overwrite it (despite officially having higher priority as a data source). It can quickly lead to considerable discrepancies in Product availability for recommendations. Due to that, I recommend enabling Strict Catalog Security setting to protect your Catalog integrity if you are using ETL.

    Another issue related to mixing is functional differences between the sources. For example, Sitemap and Category ETL use different mechanisms for building hierarchy that are not compatible with each other.

    To sum up - do not mix Sitemap and ETL. And if you have to - do not mix Sitemap and ETL on the same Object. And if you have to - do not mix Sitemap and ETL for the promotable and archived attributes. But really, do not mix it.

    Sitemap vs ETL

    Assuming you want to keep things clean, you have two options:

    1. MC Personalization with Sitemap

    Pros:

    • You need Sitemap either way.
    • The updates will happen in real-time once the User views the Item.
    • You can build a drill-down Category hierarchy in the UI.

    Cons:

    • Sitemap will be more complex - depending on where the Catalog details are available on the website (dataLayer, JSON LD, HTML), getting them might get convoluted and impact the performance of your data capture and Campaigns.
    • Changes to the website can break your data capture (for example, updates to breadcrumb attributes or dataLayer structure).
    • Catalog gets updated only when a user views an Item, which creates a risk of incorrect recommendations for less-visited Items.
    • Can trigger massive amounts of concurrent updates for high-traffic Items.
    • Cannot overwrite Multistring Object attributes and relationships (like Category) - Sitemap can only append.
    • Catalog can be manipulated from the front end by malicious actors.

    2. MC Personalization with ETL

    Pros:

    • Full Catalog upsert possible every 15 minutes (delta files recommended).
    • Full control over final Catalog values - regardless of Item page visits.
    • Better control over history of value changes and easier debugging.
    • Much better performance, especially for bigger Catalogs.
    • More secure with Strict Catalog Security option
      WARNING: A bug currently stops Add To Cart and Purchase actions from being associated with Categories with this setting enabled.
    • Much more lean and performant Sitemap.

    Cons:

    • Require you to export data in a particularly formatted .csv to MCP SFTP.
    • Not real-time (but every 15 minutes is pretty damn close, come on!).
    • Doesn't support drill-down Category hierarchy in the UI*.

    Considering the above, ETL seems like an obvious choice. And it nearly is. I see only two scenarios where we should choose Sitemap to populate the Catalog (spoiler alert, you should try to overcome those scenarios as much as possible):

    1. You must have Item (especially Product) updates in real-time.

    For example, due to swift changes in the price based on demand. Or due to having single-stock items that need to be pulled quickly from the recommendations (unfortunately, Purchase action does not adjust the stock). Consider this only if it is crucial for your business. Otherwise, the 15-minute cadence with ETL is close and lets you benefit from all the good things.

    1. You cannot schedule a correctly prepared .csv file to MC Personalization SFTP.

    In most cases, your systems already use flat files and FTPs for communication, and you can extend the architecture to cover MCP. If not, many tools can help you transform your data cleanly into a nice .csv and add it to Marketing Cloud Personalization Feed with the correct naming convention. You can even leverage Marketing Cloud's Automation Studio to prepare and deliver the files in the proper format! But sometimes data is just not there - and then, ETL is a no-go.

    While you can begin with Sitemap and then migrate to the ETL approach, the transitory period may be problematic due to issues described in the Why not both? section above. I recommend finding a workaround and starting with the better option.

    Once you know how to populate the MC Personalization Catalog, it's time to decide what you will be filling in.

    Catalog Attributes

    Each Catalog provides a set of attributes available on each Item. You can use them to store the metadata about Products, Categories or other Objects - and you can leverage it for recommendations and personalisations. However, there are some quirks and features that need to be taken into consideration when planning the Catalog Architecture.

    Catalog Built-in Attributes

    Let's start with what is available out of the box. There are three groups of available attributes (basic, location-based and promotion-related), plus a few special attributes unique to Product and Category Catalogs.

    Basic Catalog Attributes

    AttributeData TypePurposeComment
    IDStringUnique identifier for each ItemIt must be unique per Object and can be reused in others (for example, you can use the same ID in Product and Category Objects).
    NameStringReadable name of an ItemUsed to identify an Item across the UI. It does not have to be unique; you might have multiple Items with the same name. Required to recommend an Item.
    URLStringLink to the ItemRedirect target when User clicks on an Item in a Campaign. Required to recommend an Item.
    Image URLStringLink used to display an Image of an ItemUsed to showcase a Product. Required to recommend a Product (not needed for other Item types).
    DescriptionStringClient-friendly description of an ItemAny text beyond 200 characters will be replaced with an ellipsis (...).
    Average RatingDecimalAverage score of an Item based on all RatingsUseful as a filter for Einstein Recipes and Triggered Campaigns.
    Number of RatingsIntegerNumber of ratings an Item gatheredCan be used in Serverside Code to conditionally hide Rating personalisation when it is based on a single rating.

    Out of the above Basic Catalog Attributes, the first four are the most important: ID, Name, URL, and Image URL. The Average Rating helps filter products for Campaigns. The rest might be helpful for personalization purposes, but can be skipped in most implementations.

    Location Catalog Attributes

    AttributeData Type
    CityString
    State / Provine CodeString
    Postal CodeString
    LongitudeDecimal
    LatitudeDecimal
    Country CodeString

    Location-based Attributes are niche but powerful. They are utterly useless for most implementations (as in most cases, the Item is either available in many locations or its location is irrelevant). However, for businesses offering unique, location-based Items (hotels, houses, unique Products), filling those attributes allows for location-based recommendations (triggered by either User or currently viewed Item geo data).

    Promotion Settings Catalog Attributes

    AttributeData TypePurposeComment
    PublishedDatetimeAvailability start date for an ItemMust be null or in the past for MC Personalization to recommend the Item. If you set a future date - The Item will not be promoted until then.
    ExpirationDatetimeAvailability end date for an ItemMust be null or in the future for MC Personalization to recommend the Item. Once you hit that date, the Item stops being recommended.
    PromotablePicklistMarks whether Item should be PromotedItems can be either Eligible or Excluded. Only Eligible ones will be returned in the recommendations, regardless of Published/Expiration values.
    ArchivedBooleanMarks whether Item should be ArchivedArchived Items are treated as Excluded (won't be recommended) and are hidden from the Catalog UI.
    You Should Know

    Published and Expiration fields (as all Interacton Studio date type fields) use ISO-8601 datetime formar. You must pass them as 2022-04-12T10:23:37Z.

    If you want to push a datetime to MCP using ETL, you can prepare the data with SQL using clean FORMAT: FORMAT(YourDateField,'yyyy-MM-ddTHH:mm:ssZ') and output it to a String field type (Text, if we are talking SFMC Data Extension).

    Promotion-related attributes are crucial for controlling what MC Personalization will recommend. They are also the most tricky ones, as they seem to be very similar to each other. Rule of thumb when selecting what to use:

    1. If you are frequently updating the Catalog (thanks to using ETL), go with the Promotable attribute.
    2. If you have less control over when the update will come (due to using Sitemap), or need the recommendation to start/end at a particular time that is not perfectly aligned with your sync schedule, go with Published/Expiration attributes.
    3. If you are sure you don't need an Item, archive it. But it is a last resort solution for incorrect data, not a general tool for managing Catalog content.
    You Should Know

    Archiving does not delete Items (there is no such option in MC Personalization). It only hides them from the Catalog UI while preserving all its values. It has two significant ramifications:

    1. Marketing Cloud Personalization still uses archived Items for the personalisation engine - especially as anchors for recommendations. For example, a campaign promoting Similar Items to the Item currently viewed will work on the archvied Item page (and leverage all its metadata). If you want to avoid it, clean all attributes and relationships before archiving.
    2. You can't easily find archived items to make any changes or unarchive them. Find partial workarounds in the Tips & Tricks section.

    Product Catalog Unique Attributes

    AttributeData TypePurposeComment
    Units in StockIntegerProvides products Inventory CountIf the Product is available, but the exact stock is unknown, provide 1. Otherwise, it will not get recommended.
    Alternate IDMultistringPipe-separated SKUs for the ProductAs there is no option to provide separate details for each SKU, it's pretty useless now.
    PriceDecimalCurrent price of the productUsed for personalization and Einstein Recipe price-based filtering. A price equal to 0 will block the Product from recommendations.
    List PriceDecimalFull sticker price of the productUseful for price drop personalization and Product Price Reduction Triggered Campaigns. Unfortunately, there is no Price Reduction Recipe yet.
    Price DescriptionStringInformation about the current PriceYou can pass here the promotion name that resulted in a lower Price for personalisation purposes.
    CurrencyStringISO-4217 Currency CodeRequired when you enable Product Localization and capture Product price in multiple currencies. To pass Currency, you need to pass it along with Locale.
    MarginDecimalProfit margin on the ProductUseless.

    As you can see, there are two must-have attributes - Units in Stock and Price - followed by one highly recommended for most implementations - List Price. The rest is either niche or useless.

    You Should Know

    The Price attribute should reflect the current global price. Apply site-wide promotions to it, but don't change it to a Client-specific or voucher-based ones. The Product can have only one Price.

    Don't worry about the final, unique basket price. Cart and Purchase actions have a separate model for storing the Product price data allowing for per-customer uniqueness without impacting the global Product Catalog Price.

    Category Catalog Unique Attributes

    AttributeData TypePurposeComment
    ID PathMultistringStores Category hierarchy informationEach Category can have only one Parent Category, and the root (top-level) Category should have this field empty.
    Is DepartmentBooleanMarks root (top-level) CategoryUsed in Einstein Recipes for Department-based configurations.

    Dedicated Category Catalog attributes focus on the hierarchical relationship between the Categories. This area is a bit of a mess in the MC Personalization because it works differently depending on whether you use ETL or Sitemap.

    1. Sitemap-based hierarchy is using the basic ID attribute. It expects pipe-delimited IDs providing a full hierarchy path, so Electronics (single ID) for root Category, Electronics|Computers (two IDs pipe-delimited) for first-level child Category and so on for further levels (it can get quite long for deeper structures: Electronics|Computers|Laptops|Ultrabooks). It will unlock the visual hierarchy with tracking data rollups in the Category Catalog UI.
    2. ETL-based hierarchy uses the ID Path and Is Department attributes unique to Category Catalog. Each Category has a single ID, passes a single Parent ID (if it has a parent) or Is Department as True (if it doesn't have a parent) and based on the above, MCP generates the ID Path. It's cleaner, but it won't provide the nice visual hierarchy with tracking data rollups in the Category Catalog UI as the Sitemap option offers. I created an Idea to fix that.
    You Should Know

    Officially, there is no option to overcome the above limitations. If you try to push pipe-delimited IDs via Product ETL, they will be treated as separate values and assign the Product to multiple categories.

    However, if you dare, there is a workaround to eat a cookie and have a cookie. You can push Sitemap-style IDs via ETL and create the visual hierarchy in Category UI if you replace pipes with their hex code: &#x7c;. So instead of Electronics|Computers|Laptops|Ultrabooks, you would have to push Electronics&#x7c;Computers&#x7c;Laptops&#x7c;Ultrabooks.

    Remember that it is not official or supported and can break anytime. Implementing it is risky. But for now, it works.

    Catalog Custom Attributes

    Outside of the built-in attributes, you can go wild with custom ones until you hit 35 attributes of any type on a single Object. Those are great for personalization - crucial for an Open Time Email campaign where you don't have much wiggle room to manipulate the values.

    Unfortunately, there is a considerable feature gap related to custom Catalog Attributes, limiting their usefulness. You cannot use them in Einstein Recipes to Include, Exclude, Boost or limit with Variations.

    That's a huge letdown, but fear not. There is a workaround - custom Catalog Objects and Object relationships.

    Custom Catalog Objects

    Let's start with the basics. You can create (up to 25) custom Catalog Objects that extend the out-of-the-box set of Products, Articles, Blog Posts, Categories and Promotions Objects. Like the built-in ones, custom Objects structure and group Items assigned to them.

    You Should Know

    Depending on where you look in the Marketing Cloud Personalization, you might still see "Dimensions" - an old name for related Catalog Objects.

    Custom Catalog Objects have three superpowers:

    1. You can create relationships between Items from various Catalogs (for example, between specific Products and specific colours in custom "Color" Catalog Object - this doesn't sound awesome now, but the following two points will show you that it is something completely different from custom Attributes).
    2. You can capture the affinity of each User towards those related Items (for example, how much each User likes specific colour).
    3. You can leverage them in Einstein Recipes in multiple ways.

    This set of features makes custom Catalog Objects a big deal when you want absolute control over your recommendations. Examples? Sure.

    You want to recommend only the products that are on promotion. Create a custom Catalog Object "Promotions" with an Item "Promoted" and assign it (via ETL or Sitemap) to each deserving Product. Then you can use this information in Einstein Recipes » Exclusion tab to Include the "Promotions" Catalog and select "Promoted" using "from explicit selection" option.

    You can even go a step further and create additional Items in that Catalog like "0-10%", "11-20%", "21-30%", etc., to be able to include (or prioritize in the Serverside Code of the template) more significant promotions.

    More? Extend that Catalog with specific promotion names like "BlackFriday", "CyberMonday", "SpeedyTuesday", "FreeDelivery", "AnotherPromotionBecauseWeNeedToCloseTheQuarterHigherToGetBonus" and assign those to all eligible products. Now you can create different Recipes for each promotion and show each customer the best products for their needs that are currently at a better price.

    Still not satisfied? Ask your database mages to calculate the standard deviation for each current price drop per Product or Category and use it to assign the "coolness factor" of the promotion. 10% on phone cases differs from 10% on the newest flagship smartphone. Use that to focus on the real treats in your recommendations.

    Just remember that a single relationship (like this "Promotions") can store a maximum of 50 values per Item (per specific Product in this case), so don't go overboard ;)

    Another widespread use case is to display products similar to the one currently viewed (especially when the Product is Out Of Stock).

    Sure, there is a Similar Items Ingredient in Einstein Recipes. Still, with custom Catalog Objects, you can bring it to the next level by sharing crucial specification details (like graphic card, storage, colour, price bracket) and returning recommendations of products that are genuinely a matching alternative - not just from the name.

    Custom Affinity Wheel

    Another excellent use case for custom Catalog Objects is related to the Affinity Wheel you can see when viewing a User Profile. By default, you will see four values: Category, Product Class, Brand and Color. While those are good choices for many brands, they are not always the perfect match for your business.

    Thankfully, there is a (dirty) way to change it. You won't be able to swap Category (and that's fine, as it is a must-have one, in my opinion), but the other three are yours to take.

    To make them whatever you want, create a custom Catalog Object with a special ID: Style, Brand or ItemClass. Use one of those and put what you want in the Name. Once you save it, MC Personalization will show the Name and selected Items in the Affinity Wheel.

    Unfortunately, you will have to use those hardcoded IDs for populating data via ETL or Sitemap. Not perfect, but it still makes your Affinity Wheel nice and valuable.

    Catalog Tips & Tricks

    There are some gotchas you can encounter when working with MCP Catalog. Here I gathered solutions to frequent problems and some undocumented tricks that can make your life easier.

    When MCP recommends an Item?

    Understanding when MC Personalization decides to recommend an Item might not be that easy, as there are quite a lot of rules checked in the backend:

    1. Four conditions related to special Promotion attributes:
      • Item cannot be Archived
      • Item must be Eligible
      • Item cannot have Published date in the future
      • Item cannot have Expiration date in the past
    2. Two conditions related to key Basic attributes:
      • Item must have Name
      • Item must have URL
    3. Three Product-only conditions related to that Object's Unique attributes:
      • Product must have Image
      • Product must have Price
      • Product must have Inventory

    Items missing in MCP Catalog

    If you cannot find an Item in the Catalog UI, there are three possible options:

    1. The Item is not in the Catalog - Check .csv files on the SFTP if you are using ETL or use Visual Editor to validate whether the Item is captured by the Sitemap.
    2. The Item does not have any item actions - The catalog only shows items that have been viewied, added to cart or purchased.
    3. The Item is filtered out with Date Picker - MC Personalization displays an Item in the Catalog only if there was any Item Action (View, Add to Cart or Purchase) in that time range selected in the Date Picker. You can extend it to up to 5 years to see more Items. Alternatively, use my viewer script that shows all non-archived Items.
    4. The Item is archived - Catalog does not display archived Items. Check out possible workarounds here.

    Data is not added to MCP Catalog

    If Items are not missing in the MCP Catalog, but you don't see the data you expect, there are three options:

    1. You have Strict Catalog Security enabled - In Personalization » Settings » Catalog and Profile Objects » Catalog Settings » Security section » Strict Catalog Security option. If it is checked and you use Sitemap, only the Item ID will be added to the Catalog. It is a security feature that protects the integrity of your data, but you should use it only if you are using ETL to populate the Catalog metadata. You should uncheck if you use Sitemap to build Catalog.
    2. You send item localization with the Catalog Localization switched off - In Personalization » Settings » Catalog and Profile Objects » Catalog Settings » Locale section » Localization of Catalog Metadata Based on Page Locale option. If it is unchecked, but you push locale along with Item data, it will be ignored by MCP. Either remove the locale information or enable that option.
    3. You have a bug in the Sitemap - Use Visual Editor from the Salesforce Interactions browser extension and execute Sitemap in it on the Item page. Check the left pane to see if the data is populated there. If not - you must fix the JavaScript that captures that data from the website.
    4. You have another bug in the Sitemap - If Visual Editor shows all the data, but you still don't have it on most Items, the most probable reason is an issue with timing. Depending on how you capture Item metadata, some might not be available when the Sitemap executes on page load (but is ready when you launch the browser extension). Add a console.log to see whether the data is ready when needed, and leverage JS promises to solve the issue.

    Export full MCP Catalog data

    Officially, the only option to export your Catalog data is to open the Catalog listing in the MC Personalization UI and click the Export button in the top right. Sounds easy, but there are three big problems with it:

    1. You have limited control over what it will export - The export file returns ID, Name, Views, ViewTime, AverageViewSeconds and URL. The Product Catalog will also contain Cart, Purchase, Revenue, Price, Categories, and all related Catalog Objects (each as concatenated IDs without any delimiter...). Och and you cannot Export Categories at all. No way to get any additional details like other attributes (especially the key ones like Inventory Stock, Promotion State, Archived, etc.).
    2. You might not be able to export all Items - The export file will contain only the Items in the current Catalog view. It means that the Date Picker in the top right impact the scope of returned Items. Date Picker has a limited range possible, so you might need to do multiple exports and deduplicate outcomes in the future. Items that do not yet have any action (view, cart or purchase) will also not be visible.
    3. You cannot export archived Items - Export contains only visible Items - and archived ones are hidden. So no luck. I discuss partial workarounds here.

    Ok, you know all the limitations. What now?

    I started this section with "officially" because I found an unofficial way. It's not as clean, but it solves most problems:

    1. You need a .csv file with all Item Ids - You can get it using the official export described above or pull it from your website/e-commerce database. Extend that .csv with (empty) columns containing all your attributes and related Catalog Objects and one row with an ID that doesn't exist in your Catalog (ID fullDataPlease in the example below). For Product it might look like that:
    id,categories,attribute:name,attribute:url,attribute:imageUrl,attribute:description,attribute:promotable,attribute:price,attribute:listPrice,attribute:priceDescription,attribute:margin,attribute:inventoryCount,attribute:published,attribute:expiration,attribute:currency,attribute:archived,attribute: Rating,attribute:numRatings,attribute:myCustomAttribute1,attribute:myCustomAttribute2,relatedCatalogObject:myRelatedCatalogObject1,relatedCatalogObject:myRelatedCatalogObject2
    123,,,,,,,,,,,,,,,,,,,,,
    456,,,,,,,,,,,,,,,,,,,,,
    (...)
    fullDataPlease,,,,,,,,,,,,,,,,,,,,,
    1. Upload that file to the testing folder on the Marketing Cloud Personalization SFTP
    2. In MC Personalization UI, go to Feeds » Feeds Dashboard » Select the right ETL (all custom Catalog Objects are using CatalogObjectETL) and click Validate or Execute button at the top.
    3. Click Select File » Double click the Testing folder » Select your .csv file. In the File Data section, you should see all the columns you have passed and all the items with only the ID column filled in.
    4. Click Run Test in the bottom left and wait for it to complete. It might take some time for bigger loads. Do NOT click the Commit button once it is ready.
    5. Click the Export {Something} button in the bottom right - the download will start for the stagedObjects file.
    6. Open it, and you will see three key row types: labels in the first row and then rows starting with either Original or Change value. You don't need any of the Change ones. Filter them out with the tool of your choice. I like to do it in VSCode with ^Change.*(\n|) regex replacement to nothing.
    7. Here you have it; the full MCP Catalog exported to a .csv file. Two notes: fields you pushed with the relatedCatalogObject prefix will return with the dimensions prefix, and Multistring fields will return as Arrays instead of being pipe-delimited.

    That's dirty, but there is currently no other option for that. I created an Idea to change that.

    View archived Items in the MCP Catalog

    Archiving hides Items, making viewing them hard. They won't be visible in the Catalog UI or exported when you click the Export button. Salesforce Support won't be able to provide .csv with them.

    There are, however, two ways to do it:

    1. One-by-One - Great when you know the ID of the archived Item and need to view/edit only a few of them:
      • Option A: Go to the same Catalog as the Archived Item » Click any Item » Click the Edit button on the right pane » In the URL, find &itemid=123456 and replace the value after the equal sign with the ID of the archived item » Click Enter. A
      • Option B: Open any Recipe » Simulate it » Find the archived Item in the Anchor Item picklist (because archived items still work as anchors) » Click the Book icon on the right side of the picklist.
    2. All-at-Once - Great when you know all possible Item IDs and need to find which are archived:
      • Perform Full MCP Catalog data export using full list of IDs from your source system. It will return the archived status for each one. Then you can leverage it for mass update with reupload via ETL.

    As you can see, in both cases, you need to know the IDs (either exact or all possible). If you don't know what IDs could have been archived because there is no backup of all possible options - you are out of luck. Currently, there is no option to view such Items. I created an Idea to change that.

    - - +

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    +

    Catalog Basics & Limitations

    +

    The purpose of the Marketing Cloud Personalization (Interaction Studio) Catalog is to store your asseet data along with interconnecting relationships for personalisation and machine learning purposes.

    +

    There are five out-of-the-box objects: Products, Articles, Blog Posts, Categories and Promotions. You can also create up to 25 custom Catalog Objects.

    +

    Each Object contains some built-in attributes (like Name, URL, Description, Promotable) and can be extended with custom attributes up to a total of 35 attributes on an Object.

    +

    All of the above can be stitched together using prebuilt and custom relationships between Catalog Objects (for example, the built-in relationship between a Product and a Category) - allowing for connections of up to 15 Categories per Item and up to 50 related Catalog Object values per Item.

    +

    With up to 2 000 000 Items per Catalog and up to 10 000 000 Items in total across all Catalogs, MC Personalization provides a lot of flexibility to architect a Catalog of your dreams.

    +

    However, some quirks and features require more consideration to make the most out of MCP capabilities. Especially as some wrong moves can be tough to reverse. Let's dive in.

    +

    Catalog Data Sources

    +

    There are three key sources of data for the Catalog:

    +
      +
    1. Manual via UI - Good for checking data and performing minor fixes, but awful for data ingestion.
    2. +
    3. Web/Mobile SDK - Real-time, but performance-heavy and dependent on user behaviour.
    4. +
    5. ETL Feed - Best performance and can cover the whole Catalog regardless of user behaviour, but can be updated at most every 15 minutes.
    6. +
    +

    So which one should you use - Sitemap or ETL?

    +

    Why not both?

    +

    Mixing both sources is very tempting as it sounds like the best of both worlds. Unfortunately, it is not recommended approach due to MCP's backend limitations. Sending the same Items through both channels impacts performance, creates concurrency and can lead to incorrect and not-so-easy-to-fix issues with your Catalog.

    +

    For example, if you control the Exclusion and Eligibility of the Products using Sitemap and the promotable attribute, the ETL won't be able to overwrite it (despite officially having higher priority as a data source). It can quickly lead to considerable discrepancies in Product availability for recommendations. Due to that, I recommend enabling Strict Catalog Security setting to protect your Catalog integrity if you are using ETL.

    +

    Another issue related to mixing is functional differences between the sources. For example, Sitemap and Category ETL use different mechanisms for building hierarchy that are not compatible with each other.

    +

    To sum up - do not mix Sitemap and ETL. And if you have to - do not mix Sitemap and ETL on the same Object. And if you have to - do not mix Sitemap and ETL for the promotable and archived attributes. But really, do not mix it.

    +

    Sitemap vs ETL

    +

    Assuming you want to keep things clean, you have two options:

    +

    1. MC Personalization with Sitemap

    +

    Pros:

    +
      +
    • You need Sitemap either way.
    • +
    • The updates will happen in real-time once the User views the Item.
    • +
    • You can build a drill-down Category hierarchy in the UI.
    • +
    +

    Cons:

    +
      +
    • Sitemap will be more complex - depending on where the Catalog details are available on the website (dataLayer, JSON LD, HTML), getting them might get convoluted and impact the performance of your data capture and Campaigns.
    • +
    • Changes to the website can break your data capture (for example, updates to breadcrumb attributes or dataLayer structure).
    • +
    • Catalog gets updated only when a user views an Item, which creates a risk of incorrect recommendations for less-visited Items.
    • +
    • Can trigger massive amounts of concurrent updates for high-traffic Items.
    • +
    • Cannot overwrite Multistring Object attributes and relationships (like Category) - Sitemap can only append.
    • +
    • Catalog can be manipulated from the front end by malicious actors.
    • +
    +

    2. MC Personalization with ETL

    +

    Pros:

    +
      +
    • Full Catalog upsert possible every 15 minutes (delta files recommended).
    • +
    • Full control over final Catalog values - regardless of Item page visits.
    • +
    • Better control over history of value changes and easier debugging.
    • +
    • Much better performance, especially for bigger Catalogs.
    • +
    • More secure with Strict Catalog Security option
      WARNING: A bug currently stops Add To Cart and Purchase actions from being associated with Categories with this setting enabled.
    • +
    • Much more lean and performant Sitemap.
    • +
    +

    Cons:

    +
      +
    • Require you to export data in a particularly formatted .csv to MCP SFTP.
    • +
    • Not real-time (but every 15 minutes is pretty damn close, come on!).
    • +
    • Doesn't support drill-down Category hierarchy in the UI*.
    • +
    + +

    Considering the above, ETL seems like an obvious choice. And it nearly is. I see only two scenarios where we should choose Sitemap to populate the Catalog (spoiler alert, you should try to overcome those scenarios as much as possible):

    +
      +
    1. You must have Item (especially Product) updates in real-time.
    2. +
    +

    For example, due to swift changes in the price based on demand. Or due to having single-stock items that need to be pulled quickly from the recommendations (unfortunately, Purchase action does not adjust the stock). Consider this only if it is crucial for your business. Otherwise, the 15-minute cadence with ETL is close and lets you benefit from all the good things.

    +
      +
    1. You cannot schedule a correctly prepared .csv file to MC Personalization SFTP.
    2. +
    +

    In most cases, your systems already use flat files and FTPs for communication, and you can extend the architecture to cover MCP. If not, many tools can help you transform your data cleanly into a nice .csv and add it to Marketing Cloud Personalization Feed with the correct naming convention. You can even leverage Marketing Cloud's Automation Studio to prepare and deliver the files in the proper format! But sometimes data is just not there - and then, ETL is a no-go.

    +

    While you can begin with Sitemap and then migrate to the ETL approach, the transitory period may be problematic due to issues described in the Why not both? section above. I recommend finding a workaround and starting with the better option.

    + +

    Once you know how to populate the MC Personalization Catalog, it's time to decide what you will be filling in.

    +

    Catalog Attributes

    +

    Each Catalog provides a set of attributes available on each Item. You can use them to store the metadata about Products, Categories or other Objects - and you can leverage it for recommendations and personalisations. However, there are some quirks and features that need to be taken into consideration when planning the Catalog Architecture.

    +

    Catalog Built-in Attributes

    +

    Let's start with what is available out of the box. There are three groups of available attributes (basic, location-based and promotion-related), plus a few special attributes unique to Product and Category Catalogs.

    +

    Basic Catalog Attributes

    +
    AttributeData TypePurposeComment
    IDStringUnique identifier for each ItemIt must be unique per Object and can be reused in others (for example, you can use the same ID in Product and Category Objects).
    NameStringReadable name of an ItemUsed to identify an Item across the UI. It does not have to be unique; you might have multiple Items with the same name. Required to recommend an Item.
    URLStringLink to the ItemRedirect target when User clicks on an Item in a Campaign. Required to recommend an Item.
    Image URLStringLink used to display an Image of an ItemUsed to showcase a Product. Required to recommend a Product (not needed for other Item types).
    DescriptionStringClient-friendly description of an ItemAny text beyond 200 characters will be replaced with an ellipsis (...).
    Average RatingDecimalAverage score of an Item based on all RatingsUseful as a filter for Einstein Recipes and Triggered Campaigns.
    Number of RatingsIntegerNumber of ratings an Item gatheredCan be used in Serverside Code to conditionally hide Rating personalisation when it is based on a single rating.
    +

    Out of the above Basic Catalog Attributes, the first four are the most important: ID, Name, URL, and Image URL. The Average Rating helps filter products for Campaigns. The rest might be helpful for personalization purposes, but can be skipped in most implementations.

    +

    Location Catalog Attributes

    +
    AttributeData Type
    CityString
    State / Provine CodeString
    Postal CodeString
    LongitudeDecimal
    LatitudeDecimal
    Country CodeString
    +

    Location-based Attributes are niche but powerful. They are utterly useless for most implementations (as in most cases, the Item is either available in many locations or its location is irrelevant). However, for businesses offering unique, location-based Items (hotels, houses, unique Products), filling those attributes allows for location-based recommendations (triggered by either User or currently viewed Item geo data).

    +

    Promotion Settings Catalog Attributes

    +
    AttributeData TypePurposeComment
    PublishedDatetimeAvailability start date for an ItemMust be null or in the past for MC Personalization to recommend the Item. If you set a future date - The Item will not be promoted until then.
    ExpirationDatetimeAvailability end date for an ItemMust be null or in the future for MC Personalization to recommend the Item. Once you hit that date, the Item stops being recommended.
    PromotablePicklistMarks whether Item should be PromotedItems can be either Eligible or Excluded. Only Eligible ones will be returned in the recommendations, regardless of Published/Expiration values.
    ArchivedBooleanMarks whether Item should be ArchivedArchived Items are treated as Excluded (won't be recommended) and are hidden from the Catalog UI.
    +
    You Should Know

    Published and Expiration fields (as all Interacton Studio date type fields) use ISO-8601 datetime formar. You must pass them as 2022-04-12T10:23:37Z.

    If you want to push a datetime to MCP using ETL, you can prepare the data with SQL using clean FORMAT: FORMAT(YourDateField,'yyyy-MM-ddTHH:mm:ssZ') and output it to a String field type (Text, if we are talking SFMC Data Extension).

    +

    Promotion-related attributes are crucial for controlling what MC Personalization will recommend. They are also the most tricky ones, as they seem to be very similar to each other. Rule of thumb when selecting what to use:

    +
      +
    1. If you are frequently updating the Catalog (thanks to using ETL), go with the Promotable attribute.
    2. +
    3. If you have less control over when the update will come (due to using Sitemap), or need the recommendation to start/end at a particular time that is not perfectly aligned with your sync schedule, go with Published/Expiration attributes.
    4. +
    5. If you are sure you don't need an Item, archive it. But it is a last resort solution for incorrect data, not a general tool for managing Catalog content.
    6. +
    +
    You Should Know

    Archiving does not delete Items (there is no such option in MC Personalization). It only hides them from the Catalog UI while preserving all its values. It has two significant ramifications:

      +
    1. Marketing Cloud Personalization still uses archived Items for the personalisation engine - especially as anchors for recommendations. For example, a campaign promoting Similar Items to the Item currently viewed will work on the archvied Item page (and leverage all its metadata). If you want to avoid it, clean all attributes and relationships before archiving.
    2. +
    3. You can't easily find archived items to make any changes or unarchive them. Find partial workarounds in the Tips & Tricks section.
    4. +
    +

    Product Catalog Unique Attributes

    +
    AttributeData TypePurposeComment
    Units in StockIntegerProvides products Inventory CountIf the Product is available, but the exact stock is unknown, provide 1. Otherwise, it will not get recommended.
    Alternate IDMultistringPipe-separated SKUs for the ProductAs there is no option to provide separate details for each SKU, it's pretty useless now.
    PriceDecimalCurrent price of the productUsed for personalization and Einstein Recipe price-based filtering. A price equal to 0 will block the Product from recommendations.
    List PriceDecimalFull sticker price of the productUseful for price drop personalization and Product Price Reduction Triggered Campaigns. Unfortunately, there is no Price Reduction Recipe yet.
    Price DescriptionStringInformation about the current PriceYou can pass here the promotion name that resulted in a lower Price for personalisation purposes.
    CurrencyStringISO-4217 Currency CodeRequired when you enable Product Localization and capture Product price in multiple currencies. To pass Currency, you need to pass it along with Locale.
    MarginDecimalProfit margin on the ProductUseless.
    +

    As you can see, there are two must-have attributes - Units in Stock and Price - followed by one highly recommended for most implementations - List Price. The rest is either niche or useless.

    +
    You Should Know

    The Price attribute should reflect the current global price. Apply site-wide promotions to it, but don't change it to a Client-specific or voucher-based ones. The Product can have only one Price.

    Don't worry about the final, unique basket price. Cart and Purchase actions have a separate model for storing the Product price data allowing for per-customer uniqueness without impacting the global Product Catalog Price.

    +

    Category Catalog Unique Attributes

    +
    AttributeData TypePurposeComment
    ID PathMultistringStores Category hierarchy informationEach Category can have only one Parent Category, and the root (top-level) Category should have this field empty.
    Is DepartmentBooleanMarks root (top-level) CategoryUsed in Einstein Recipes for Department-based configurations.
    +

    Dedicated Category Catalog attributes focus on the hierarchical relationship between the Categories. This area is a bit of a mess in the MC Personalization because it works differently depending on whether you use ETL or Sitemap.

    +
      +
    1. Sitemap-based hierarchy is using the basic ID attribute. It expects pipe-delimited IDs providing a full hierarchy path, so Electronics (single ID) for root Category, Electronics|Computers (two IDs pipe-delimited) for first-level child Category and so on for further levels (it can get quite long for deeper structures: Electronics|Computers|Laptops|Ultrabooks). It will unlock the visual hierarchy with tracking data rollups in the Category Catalog UI.
    2. +
    3. ETL-based hierarchy uses the ID Path and Is Department attributes unique to Category Catalog. Each Category has a single ID, passes a single Parent ID (if it has a parent) or Is Department as True (if it doesn't have a parent) and based on the above, MCP generates the ID Path. It's cleaner, but it won't provide the nice visual hierarchy with tracking data rollups in the Category Catalog UI as the Sitemap option offers. I created an Idea to fix that.
    4. +
    +
    You Should Know

    Officially, there is no option to overcome the above limitations. If you try to push pipe-delimited IDs via Product ETL, they will be treated as separate values and assign the Product to multiple categories.

    However, if you dare, there is a workaround to eat a cookie and have a cookie. You can push Sitemap-style IDs via ETL and create the visual hierarchy in Category UI if you replace pipes with their hex code: &#x7c;. So instead of Electronics|Computers|Laptops|Ultrabooks, you would have to push Electronics&#x7c;Computers&#x7c;Laptops&#x7c;Ultrabooks.

    Remember that it is not official or supported and can break anytime. Implementing it is risky. But for now, it works.

    +

    Catalog Custom Attributes

    +

    Outside of the built-in attributes, you can go wild with custom ones until you hit 35 attributes of any type on a single Object. Those are great for personalization - crucial for an Open Time Email campaign where you don't have much wiggle room to manipulate the values.

    +

    Unfortunately, there is a considerable feature gap related to custom Catalog Attributes, limiting their usefulness. You cannot use them in Einstein Recipes to Include, Exclude, Boost or limit with Variations.

    +

    That's a huge letdown, but fear not. There is a workaround - custom Catalog Objects and Object relationships.

    +

    Custom Catalog Objects

    +

    Let's start with the basics. You can create (up to 25) custom Catalog Objects that extend the out-of-the-box set of Products, Articles, Blog Posts, Categories and Promotions Objects. Like the built-in ones, custom Objects structure and group Items assigned to them.

    +
    You Should Know

    Depending on where you look in the Marketing Cloud Personalization, you might still see "Dimensions" - an old name for related Catalog Objects.

    +

    Custom Catalog Objects have three superpowers:

    +
      +
    1. You can create relationships between Items from various Catalogs (for example, between specific Products and specific colours in custom "Color" Catalog Object - this doesn't sound awesome now, but the following two points will show you that it is something completely different from custom Attributes).
    2. +
    3. You can capture the affinity of each User towards those related Items (for example, how much each User likes specific colour).
    4. +
    5. You can leverage them in Einstein Recipes in multiple ways.
    6. +
    +

    This set of features makes custom Catalog Objects a big deal when you want absolute control over your recommendations. Examples? Sure.

    + +

    You want to recommend only the products that are on promotion. Create a custom Catalog Object "Promotions" with an Item "Promoted" and assign it (via ETL or Sitemap) to each deserving Product. Then you can use this information in Einstein Recipes » Exclusion tab to Include the "Promotions" Catalog and select "Promoted" using "from explicit selection" option.

    +

    You can even go a step further and create additional Items in that Catalog like "0-10%", "11-20%", "21-30%", etc., to be able to include (or prioritize in the Serverside Code of the template) more significant promotions.

    +

    More? Extend that Catalog with specific promotion names like "BlackFriday", "CyberMonday", "SpeedyTuesday", "FreeDelivery", "AnotherPromotionBecauseWeNeedToCloseTheQuarterHigherToGetBonus" and assign those to all eligible products. Now you can create different Recipes for each promotion and show each customer the best products for their needs that are currently at a better price.

    +

    Still not satisfied? Ask your database mages to calculate the standard deviation for each current price drop per Product or Category and use it to assign the "coolness factor" of the promotion. 10% on phone cases differs from 10% on the newest flagship smartphone. Use that to focus on the real treats in your recommendations.

    +

    Just remember that a single relationship (like this "Promotions") can store a maximum of 50 values per Item (per specific Product in this case), so don't go overboard ;)

    + +

    Another widespread use case is to display products similar to the one currently viewed (especially when the Product is Out Of Stock).

    +

    Sure, there is a Similar Items Ingredient in Einstein Recipes. Still, with custom Catalog Objects, you can bring it to the next level by sharing crucial specification details (like graphic card, storage, colour, price bracket) and returning recommendations of products that are genuinely a matching alternative - not just from the name.

    +

    Custom Affinity Wheel

    +

    Another excellent use case for custom Catalog Objects is related to the Affinity Wheel you can see when viewing a User Profile. By default, you will see four values: Category, Product Class, Brand and Color. While those are good choices for many brands, they are not always the perfect match for your business.

    +

    Thankfully, there is a (dirty) way to change it. You won't be able to swap Category (and that's fine, as it is a must-have one, in my opinion), but the other three are yours to take.

    +

    To make them whatever you want, create a custom Catalog Object with a special ID: Style, Brand or ItemClass. Use one of those and put what you want in the Name. Once you save it, MC Personalization will show the Name and selected Items in the Affinity Wheel.

    +

    Unfortunately, you will have to use those hardcoded IDs for populating data via ETL or Sitemap. Not perfect, but it still makes your Affinity Wheel nice and valuable.

    +

    Catalog Tips & Tricks

    +

    There are some gotchas you can encounter when working with MCP Catalog. Here I gathered solutions to frequent problems and some undocumented tricks that can make your life easier.

    +

    When MCP recommends an Item?

    +

    Understanding when MC Personalization decides to recommend an Item might not be that easy, as there are quite a lot of rules checked in the backend:

    +
      +
    1. Four conditions related to special Promotion attributes: +
        +
      • Item cannot be Archived
      • +
      • Item must be Eligible
      • +
      • Item cannot have Published date in the future
      • +
      • Item cannot have Expiration date in the past
      • +
      +
    2. +
    3. Two conditions related to key Basic attributes: +
        +
      • Item must have Name
      • +
      • Item must have URL
      • +
      +
    4. +
    5. Three Product-only conditions related to that Object's Unique attributes: +
        +
      • Product must have Image
      • +
      • Product must have Price
      • +
      • Product must have Inventory
      • +
      +
    6. +
    + +

    Items missing in MCP Catalog

    +

    If you cannot find an Item in the Catalog UI, there are three possible options:

    +
      +
    1. The Item is not in the Catalog - Check .csv files on the SFTP if you are using ETL or use Visual Editor to validate whether the Item is captured by the Sitemap.
    2. +
    3. The Item does not have any item actions - The catalog only shows items that have been viewied, added to cart or purchased.
    4. +
    5. The Item is filtered out with Date Picker - MC Personalization displays an Item in the Catalog only if there was any Item Action (View, Add to Cart or Purchase) in that time range selected in the Date Picker. You can extend it to up to 5 years to see more Items. Alternatively, use my viewer script that shows all non-archived Items.
    6. +
    7. The Item is archived - Catalog does not display archived Items. Check out possible workarounds here.
    8. +
    +

    Data is not added to MCP Catalog

    +

    If Items are not missing in the MCP Catalog, but you don't see the data you expect, there are three options:

    +
      +
    1. You have Strict Catalog Security enabled - In Personalization » Settings » Catalog and Profile Objects » Catalog Settings » Security section » Strict Catalog Security option. If it is checked and you use Sitemap, only the Item ID will be added to the Catalog. It is a security feature that protects the integrity of your data, but you should use it only if you are using ETL to populate the Catalog metadata. You should uncheck if you use Sitemap to build Catalog.
    2. +
    3. You send item localization with the Catalog Localization switched off - In Personalization » Settings » Catalog and Profile Objects » Catalog Settings » Locale section » Localization of Catalog Metadata Based on Page Locale option. If it is unchecked, but you push locale along with Item data, it will be ignored by MCP. Either remove the locale information or enable that option.
    4. +
    5. You have a bug in the Sitemap - Use Visual Editor from the Salesforce Interactions browser extension and execute Sitemap in it on the Item page. Check the left pane to see if the data is populated there. If not - you must fix the JavaScript that captures that data from the website.
    6. +
    7. You have another bug in the Sitemap - If Visual Editor shows all the data, but you still don't have it on most Items, the most probable reason is an issue with timing. Depending on how you capture Item metadata, some might not be available when the Sitemap executes on page load (but is ready when you launch the browser extension). Add a console.log to see whether the data is ready when needed, and leverage JS promises to solve the issue.
    8. +
    +

    Export full MCP Catalog data

    +

    Officially, the only option to export your Catalog data is to open the Catalog listing in the MC Personalization UI and click the Export button in the top right. Sounds easy, but there are three big problems with it:

    +
      +
    1. You have limited control over what it will export - The export file returns ID, Name, Views, ViewTime, AverageViewSeconds and URL. The Product Catalog will also contain Cart, Purchase, Revenue, Price, Categories, and all related Catalog Objects (each as concatenated IDs without any delimiter...). Och and you cannot Export Categories at all. No way to get any additional details like other attributes (especially the key ones like Inventory Stock, Promotion State, Archived, etc.).
    2. +
    3. You might not be able to export all Items - The export file will contain only the Items in the current Catalog view. It means that the Date Picker in the top right impact the scope of returned Items. Date Picker has a limited range possible, so you might need to do multiple exports and deduplicate outcomes in the future. Items that do not yet have any action (view, cart or purchase) will also not be visible.
    4. +
    5. You cannot export archived Items - Export contains only visible Items - and archived ones are hidden. So no luck. I discuss partial workarounds here.
    6. +
    +

    Ok, you know all the limitations. What now?

    +

    I started this section with "officially" because I found an unofficial way. It's not as clean, but it solves most problems:

    +
      +
    1. You need a .csv file with all Item Ids - You can get it using the official export described above or pull it from your website/e-commerce database. Extend that .csv with (empty) columns containing all your attributes and related Catalog Objects and one row with an ID that doesn't exist in your Catalog (ID fullDataPlease in the example below). For Product it might look like that:
    2. +
    +
    id,categories,attribute:name,attribute:url,attribute:imageUrl,attribute:description,attribute:promotable,attribute:price,attribute:listPrice,attribute:priceDescription,attribute:margin,attribute:inventoryCount,attribute:published,attribute:expiration,attribute:currency,attribute:archived,attribute: Rating,attribute:numRatings,attribute:myCustomAttribute1,attribute:myCustomAttribute2,relatedCatalogObject:myRelatedCatalogObject1,relatedCatalogObject:myRelatedCatalogObject2
    123,,,,,,,,,,,,,,,,,,,,,
    456,,,,,,,,,,,,,,,,,,,,,
    (...)
    fullDataPlease,,,,,,,,,,,,,,,,,,,,,
    +
      +
    1. Upload that file to the testing folder on the Marketing Cloud Personalization SFTP
    2. +
    3. In MC Personalization UI, go to Feeds » Feeds Dashboard » Select the right ETL (all custom Catalog Objects are using CatalogObjectETL) and click Validate or Execute button at the top.
    4. +
    5. Click Select File » Double click the Testing folder » Select your .csv file. In the File Data section, you should see all the columns you have passed and all the items with only the ID column filled in.
    6. +
    7. Click Run Test in the bottom left and wait for it to complete. It might take some time for bigger loads. Do NOT click the Commit button once it is ready.
    8. +
    9. Click the Export {Something} button in the bottom right - the download will start for the stagedObjects file.
    10. +
    11. Open it, and you will see three key row types: labels in the first row and then rows starting with either Original or Change value. You don't need any of the Change ones. Filter them out with the tool of your choice. I like to do it in VSCode with ^Change.*(\n|) regex replacement to nothing.
    12. +
    13. Here you have it; the full MCP Catalog exported to a .csv file. Two notes: fields you pushed with the relatedCatalogObject prefix will return with the dimensions prefix, and Multistring fields will return as Arrays instead of being pipe-delimited.
    14. +
    +

    That's dirty, but there is currently no other option for that. I created an Idea to change that.

    +

    View archived Items in the MCP Catalog

    +

    Archiving hides Items, making viewing them hard. They won't be visible in the Catalog UI or exported when you click the Export button. Salesforce Support won't be able to provide .csv with them.

    +

    There are, however, two ways to do it:

    +
      +
    1. One-by-One - Great when you know the ID of the archived Item and need to view/edit only a few of them: +
        +
      • Option A: Go to the same Catalog as the Archived Item » Click any Item » Click the Edit button on the right pane » In the URL, find &itemid=123456 and replace the value after the equal sign with the ID of the archived item » Click Enter. A
      • +
      • Option B: Open any Recipe » Simulate it » Find the archived Item in the Anchor Item picklist (because archived items still work as anchors) » Click the Book icon on the right side of the picklist.
      • +
      +
    2. +
    3. All-at-Once - Great when you know all possible Item IDs and need to find which are archived: +
        +
      • Perform Full MCP Catalog data export using full list of IDs from your source system. It will return the archived status for each one. Then you can leverage it for mass update with reupload via ETL.
      • +
      +
    4. +
    +

    As you can see, in both cases, you need to know the IDs (either exact or all possible). If you don't know what IDs could have been archived because there is no backup of all possible options - you are out of luck. Currently, there is no option to view such Items. I created an Idea to change that.

    \ No newline at end of file diff --git a/docs/interaction-studio/mcp-open-time-email/index.html b/docs/interaction-studio/mcp-open-time-email/index.html index 79d1abe13..34904ccb1 100644 --- a/docs/interaction-studio/mcp-open-time-email/index.html +++ b/docs/interaction-studio/mcp-open-time-email/index.html @@ -1,22 +1,98 @@ - + - -MCP Open Time Email | Mateusz Dąbrowski + +MCP Open Time Email | Mateusz Dąbrowski - - - + + + -
    -

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    What is Open Time Email Campaign

    In short, Open Time Email Campaign in Marketing Cloud Personalization (Interaction Studio) is a solution for providing always up-to-date, personalised recommendations to your customers.

    The general rule of email communication is that the moment you send the email, you lose control and cannot make any changes (just like with paper mail). There are, however, two exceptions:

    1. Links - you cannot change the URL used in the email, but (if you use wrapper/tracking links), you can change the final target URL. In Marketing Cloud, it is done via updating Job Links.
    2. Images - you cannot change the URL of the image used in the email, but you can change the image that is hosted behind that URL. It is precisely what the Open Time Email feature in MC Personalization is all about.

    It consists of two parts. In Open Time Email Template, you define the format of the recommendation (dimensions, content, personalisations). Then in Open Time Email Campaign, you use that template with selected recommendations logic (Einstein Recipe) to automatically generate HTML that will render the ever-updating Next Best Action in your emails. But...

    There are three caveats:

    1. Open Time Email recommendation is an image (that's the only way to enable updating after sending), which means that the inboxes that hide images by default will not display the recommendations.
    2. Some inboxes cache images. In this case, the customer might not see the updates to the recommendation, or they might be delayed.
    3. Apple Mail Privacy blocks the magic behind the Open Time Email and falls back to a static recommendation generated on send time.

    With that out of the way, let's dive into what is officially possible and what is possible with MCP Open Time Email.

    Open Time Email Template

    To create an Open Time Email Campaign, first, you need to code the structure of the recommendation with HTML, CSS and personalisations. MC Personalization will use it to generate the image on the fly.

    Good thing: because this HTML will be used for image generation and will not be available in the final Campaign, you are not limited to markup supported by Email clients.

    Bad thing: because MCP will use this HTML for image generation, you are not able to leverage custom fonts - there are only 17 built-in western and 4 non-western fonts to choose from.

    To start building the template, you need to provide the dimensions of the final image. It is super important because once you select and save those, you won't be able to edit them. Those dimensions are for the recommendation image only - you will be configuring the whole campaign dimensions separately in the Open Time Email Campaign configuration, so leave some pixels for whitespace.

    You Should Know

    Open Time Email code editor isn't very robust and likes to crash completly if there is a "wrong" set of characters for it to preview. I recommend writing code outside and just copy-pasting it into OTE for validation to not lose the work progress.

    Basic OTE Template

    Building the template requires basic HTML & CSS knowledge and leveraging the built-in Insert {Dynamic} personalisation option to connect the code boilerplate with catalog data.

    The most popular boilerplate will leverage product image, name and price plus a call to action. The basic approach could look like this:

    <div style="padding:10px; text-align:center; font-family: Arial;">
    <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">
    <div style="text-align:left;">
    ${item.name}
    </div>
    <div style="margin-top:5px; text-align:left;">
    $currency.format(${item.price})
    </div>
    <div style="position:absolute; left: 0px; right: 0px; bottom: 10px;">
    <button style="border:none; padding: 10px; background:#1D73C9; color:#ffffff; font-size:16px;">
    Buy now »
    </button>
    </div>
    </div>

    You can see a whole section wrapped in a div that sets the font and padding for proper spacing and three key elements within it:

    1. img for displaying how the product looks (with max-width & max-height to control non-standard images)
    2. divs with name and price personalisation strings (we will talk about the format difference in a moment)
    3. div with a button (we don't need any link because the whole final image will be a link)

    That's it. You can add more personalisation strings - including those using attributes defined on the catalog object. You can also write nicer HTML with a separate CSS style section (and either way - be sure to test the code a lot with edge cases from your catalog). But in the end - it will be just a boilerplate for an image you can preview directly in the editor.

    It's okay, but you can quickly come up with the "what if..." scenarios (f.e. showing both current price and listPrice only if there is a promotion or displaying a placeholder if the image is broken) that would require a bit more control over the template. Thankfully, some undocumented features can solve those needs.

    Attributes vs Custom Fields

    When you select Insert {Dynamic}, you will find both Attributes and Custom Field options at the bottom of the picklist.

    That differentiation is a mess, as depending on the product value, you can use one, two or all three:

    Difference in scope
    // ID
    ${item.id} // Returns Product ID
    ${item.attributes.published.value} // Error generating preview image: Unfulfilled variable
    ${item.custom.customDatetime} // Error generating preview image: Unfulfilled variable

    // Name
    ${item.name} // Returns Product Name
    ${item.attributes.name.value} // Returns Product Name
    ${item.custom.name} // Returns Product Name

    // Published Date
    ${item.published} // Returns Product Published Date
    ${item.attributes.published.value} // Returns Product Published Date
    ${item.custom.published} // Error generating preview image: Unfulfilled variable

    To make it even more chaotic, the formatting of the output might be different:

    Difference in output
    ${item.published}                       // Wed Nov 30 23:00:00 UTC 2022
    ${item.attributes.published.value} // 1669849200000

    ${item.attributes.customDatetime.value} // 1672182000000
    ${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z
    You Should Know

    While the Insert {Dynamic} will suggest you should use ${item.attributes.xxxx.value} notation for custom attributes, this is not always true.

    If you try this style for an Object or MultiString (Array) attribute, it will instead crash with: "Error generating preview image: Failed to render DMC for template [email]".

    Marketing Cloud Personalization will display the value correctly if you drop the .value suffix from the personalisation string: ${item.attributes.MultiStringAttribute}.

    Formatting values

    The only working formatting option I was able to find are the currency ones:

    $currency.format(${item.price}) // 49,00
    $currency.formatNumber(${item.price},0) // 49
    You Should Know

    $currency.formatNumber(decimal, scale) lets you provide second argument to define the number of decimal places in the formatted value.

    If scale is smaller than original value - it will be rounded. If scale is higher - zeroes will be added.

    // For item.price === 39,99
    $currency.formatNumber(${item.price},0) // 40
    $currency.formatNumber(${item.price},1) // 40,0
    $currency.formatNumber(${item.price},2) // 39,99
    $currency.formatNumber(${item.price},3) // 39,990

    Currency formatting isn't limited to built-in price and listPrice. You can leverage it also for any custom integer or decimal attribute:

    $currency.format(${item.attributes.decimalAttribute.value})

    There is also a pseudo-formatting hack for datetime fields, but it is lacking:

    Various datetime outputs
    ${item.published}                       // Wed Nov 30 23:00:00 UTC 2022
    ${item.attributes.published.value} // 1669849200000

    ${item.attributes.customDatetime.value} // 1672182000000
    ${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z

    As you can see, the built-in datetime attributes return a semi-readable date, item.attributes is outputting epoch timestamp (for both built-in and custom attributes) and the item.custom returns the full ISO format. Neither is remotely useful for Open Time Email...

    Applying the .getDate() or .substring() methods leads to an error.

    Fallback for null values

    The first problem you may encounter with the official implementation is crashing on null values. If you want to leverage a product attribute for personalisation (for example, the brand with ${item.attributes.brand.value}), products missing this value will error out with "Error generating preview image: Unfulfilled variable".

    Thankfully, there is a solution for it - a #field() function:

    #field(${item.attributes.brand.value}, 'Fallback Value')

    #field() functions expect two parameters:

    1. The personalisation you want to use
    2. The fallback value. It can be either a string or another variable. However, you cannot nest the #field() function as a parameter of the #field() function, so if you decide to use another variable, be sure it is filled in for all the products.
    Field function with two variables as parameters
    #field(${item.attributes.customPromotionalImageUrl.value}, ${item.imageUrl})

    In most cases, the most useful way to use #field() will be with fallback to an empty string, as it will just hide the personalisation from the image while protecting against the error:

    Field function with empty fallback
    #field(${item.attributes.brand.value}, '')

    If you want to add a fallback for formatted currency value, you need to wrap it around the formatting function:

    Fallback for formatted custom decimal attribute
    #field($currency.format(${item.attributes.decimalAttribute.value}), '')
    You Should Know

    Once again, the MultiString attributes are problematic, as they are not considered null when empty and will show [] instead (ignoring the fallback).

    Empty Object fields fall back correctly when they are truly empty. However, once you fill them with a JSON Object, UI will no longer let you truly empty that field, forcing you to write at least {} and leading to the same issue as with MultiString.

    Conditional content with if/else

    Sometimes you need more than just a fallback for a null value. When it is not about the null or there are more conditions to check, if/else is the best. Thankfully, it also can be leveraged in OTE:

    Show strike-through listPrice only if the current price is lower
    <div style="text-align:left;">
    $currency.format(${item.price})
    <!-- #if(${item.listPrice} > ${item.price}) -->
    <span style="font-size: 14px; text-decoration: line-through;">
    $currency.format(${item.listPrice})
    </span>
    <!-- #end -->
    </div>

    As you can see, for the if block you need to use HTML comment notation with #if() and #end statements. The #if() accepts parameters that return a boolean, just as in JavaScript if.

    You Should Know

    The Object and MultiString attributes do not work correctly with if/else statements.

    If you test Object or MultiString with basic #if(${item.attributes.attributeName}), it will be treated as true even for an empty field. And even though ${item.attributes.MultiStringAttribute} will output [] doing #if(${item.attributes.attributeName} == []) or #if(${item.attributes.attributeName} == '[]') will return false.

    You can add more condition-based paths with #else:

    If imageUrl is not proper .jpg link, display placeholder image
    <!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith('.jpg')}) -->
    <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">
    <!-- #else -->
    <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">
    <!-- #end -->
    You Should Know

    While the if/else block in the Open Time Email Template works similarly to what you may know from JavaScript or SSJS, it has one huge disadvantage - it is evaluating code in all paths.

    It means that even if MC Personalization is not using a path for the final image generation, the code written there can still error out the whole Campaign. Example:

    Will error out for a product without Brand
    <!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) -->
    ${item.attributes.brand.value}
    <!-- #end -->

    Even with checking whether there is a value behind the Brand attribute and only then personalising it, a template with such code would still error out for products without a brand.

    Always use fallbacks along with if/else blocks:

    Will NOT error out for a product without Brand
    <!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) -->
    #field(${item.attributes.brand.value}, '')
    <!-- #end -->

    Unfortunatelly support for Related Catalog Objects is heavily limited in Open Time Email.

    You can leverage ${item.getTagValue("YourRelatedCatalogObject")} call to return the ID of the Item in RCO but you won't be able to get any other information (like name or URL of that Item). Additionally, if you have one-to-many relationship, you will still get only one ID for the first related Item. Due to those limitations, I recommend using it only if you have RCO with one-to-one relationship and readable IDs (for example, RED as an ID in the Color RCO).

    The workaround for other use cases is to pass the crucial RCO data as custom attributes on the Product (for example,productColorName attribute if you are using numeric IDs for colors in the RCO). It's not perfect as it duplicates the data and eats up attributes, but it is currently the only way you will be able to leverage that information in OTE.

    Example dynamic OTE Template

    OTE Template with image fallback, null attribute fallbacks and conditional promo price display
    <div style="padding:10px; text-align:center; font-family:Arial; font-size:16px;">
    <!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith('.jpg')}) -->
    <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">
    <!-- #else -->
    <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">
    <!-- #end -->
    <div style="text-align:left;">
    <span style="font-size:14px; color:#212121;">
    #field(${item.attributes.categoryName.value}, '')
    </span>
    <!-- #if (!${item.attributes.categoryName.value}) -->
    <br />
    <!-- #end -->
    <span style="margin-top:5px; overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;">
    #field(${item.attributes.brand.value}, '') $item.name
    </span>
    </div>
    <div style="margin-top:5px; text-align:left;">
    $currency.format(${item.price})
    <!-- #if(${item.listPrice} > ${item.price}) -->
    <span style="font-size:14px; color:#212121;text-decoration:line-through;">
    $currency.format(${item.listPrice})
    </span>
    <!-- #end -->
    </div>
    <div style="position:absolute; left:0px; right:0px; bottom:10px;">
    <button style="border:none; padding:10px; background-color:#1D73C9; color:#ffffff;">
    Buy now »
    </button>
    </div>
    </div>
    - - +

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    +

    What is Open Time Email Campaign

    +

    In short, Open Time Email Campaign in Marketing Cloud Personalization (Interaction Studio) is a solution for providing always up-to-date, personalised recommendations to your customers.

    +

    The general rule of email communication is that the moment you send the email, you lose control and cannot make any changes (just like with paper mail). There are, however, two exceptions:

    +
      +
    1. Links - you cannot change the URL used in the email, but (if you use wrapper/tracking links), you can change the final target URL. In Marketing Cloud, it is done via updating Job Links.
    2. +
    3. Images - you cannot change the URL of the image used in the email, but you can change the image that is hosted behind that URL. It is precisely what the Open Time Email feature in MC Personalization is all about.
    4. +
    +

    It consists of two parts. In Open Time Email Template, you define the format of the recommendation (dimensions, content, personalisations). Then in Open Time Email Campaign, you use that template with selected recommendations logic (Einstein Recipe) to automatically generate HTML that will render the ever-updating Next Best Action in your emails. But...

    +

    There are three caveats:

    +
      +
    1. Open Time Email recommendation is an image (that's the only way to enable updating after sending), which means that the inboxes that hide images by default will not display the recommendations.
    2. +
    3. Some inboxes cache images. In this case, the customer might not see the updates to the recommendation, or they might be delayed.
    4. +
    5. Apple Mail Privacy blocks the magic behind the Open Time Email and falls back to a static recommendation generated on send time.
    6. +
    +

    With that out of the way, let's dive into what is officially possible and what is possible with MCP Open Time Email.

    +

    Open Time Email Template

    +

    To create an Open Time Email Campaign, first, you need to code the structure of the recommendation with HTML, CSS and personalisations. MC Personalization will use it to generate the image on the fly.

    +

    Good thing: because this HTML will be used for image generation and will not be available in the final Campaign, you are not limited to markup supported by Email clients.

    +

    Bad thing: because MCP will use this HTML for image generation, you are not able to leverage custom fonts - there are only 17 built-in western and 4 non-western fonts to choose from.

    +

    To start building the template, you need to provide the dimensions of the final image. It is super important because once you select and save those, you won't be able to edit them. Those dimensions are for the recommendation image only - you will be configuring the whole campaign dimensions separately in the Open Time Email Campaign configuration, so leave some pixels for whitespace.

    +
    You Should Know

    Open Time Email code editor isn't very robust and likes to crash completly if there is a "wrong" set of characters for it to preview. I recommend writing code outside and just copy-pasting it into OTE for validation to not lose the work progress.

    +

    Basic OTE Template

    +

    Building the template requires basic HTML & CSS knowledge and leveraging the built-in Insert {Dynamic} personalisation option to connect the code boilerplate with catalog data.

    +

    The most popular boilerplate will leverage product image, name and price plus a call to action. The basic approach could look like this:

    +
    <div style="padding:10px; text-align:center; font-family: Arial;">
    <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">
    <div style="text-align:left;">
    ${item.name}
    </div>
    <div style="margin-top:5px; text-align:left;">
    $currency.format(${item.price})
    </div>
    <div style="position:absolute; left: 0px; right: 0px; bottom: 10px;">
    <button style="border:none; padding: 10px; background:#1D73C9; color:#ffffff; font-size:16px;">
    Buy now »
    </button>
    </div>
    </div>
    +

    You can see a whole section wrapped in a div that sets the font and padding for proper spacing and three key elements within it:

    +
      +
    1. img for displaying how the product looks (with max-width & max-height to control non-standard images)
    2. +
    3. divs with name and price personalisation strings (we will talk about the format difference in a moment)
    4. +
    5. div with a button (we don't need any link because the whole final image will be a link)
    6. +
    +

    That's it. You can add more personalisation strings - including those using attributes defined on the catalog object. You can also write nicer HTML with a separate CSS style section (and either way - be sure to test the code a lot with edge cases from your catalog). But in the end - it will be just a boilerplate for an image you can preview directly in the editor.

    +

    It's okay, but you can quickly come up with the "what if..." scenarios (f.e. showing both current price and listPrice only if there is a promotion or displaying a placeholder if the image is broken) that would require a bit more control over the template. Thankfully, some undocumented features can solve those needs.

    +

    Attributes vs Custom Fields

    +

    When you select Insert {Dynamic}, you will find both Attributes and Custom Field options at the bottom of the picklist.

    +

    That differentiation is a mess, as depending on the product value, you can use one, two or all three:

    +
    Difference in scope
    // ID
    ${item.id} // Returns Product ID
    ${item.attributes.published.value} // Error generating preview image: Unfulfilled variable
    ${item.custom.customDatetime} // Error generating preview image: Unfulfilled variable

    // Name
    ${item.name} // Returns Product Name
    ${item.attributes.name.value} // Returns Product Name
    ${item.custom.name} // Returns Product Name

    // Published Date
    ${item.published} // Returns Product Published Date
    ${item.attributes.published.value} // Returns Product Published Date
    ${item.custom.published} // Error generating preview image: Unfulfilled variable
    +

    To make it even more chaotic, the formatting of the output might be different:

    +
    Difference in output
    ${item.published}                       // Wed Nov 30 23:00:00 UTC 2022
    ${item.attributes.published.value} // 1669849200000

    ${item.attributes.customDatetime.value} // 1672182000000
    ${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z
    +
    You Should Know

    While the Insert {Dynamic} will suggest you should use ${item.attributes.xxxx.value} notation for custom attributes, this is not always true.

    If you try this style for an Object or MultiString (Array) attribute, it will instead crash with: "Error generating preview image: Failed to render DMC for template [email]".

    Marketing Cloud Personalization will display the value correctly if you drop the .value suffix from the personalisation string: ${item.attributes.MultiStringAttribute}.

    +

    Formatting values

    +

    The only working formatting option I was able to find are the currency ones:

    +
    $currency.format(${item.price}) // 49,00
    $currency.formatNumber(${item.price},0) // 49
    +
    You Should Know

    $currency.formatNumber(decimal, scale) lets you provide second argument to define the number of decimal places in the formatted value.

    If scale is smaller than original value - it will be rounded. If scale is higher - zeroes will be added.

    // For item.price === 39,99
    $currency.formatNumber(${item.price},0) // 40
    $currency.formatNumber(${item.price},1) // 40,0
    $currency.formatNumber(${item.price},2) // 39,99
    $currency.formatNumber(${item.price},3) // 39,990
    +

    Currency formatting isn't limited to built-in price and listPrice. You can leverage it also for any custom integer or decimal attribute:

    +
    $currency.format(${item.attributes.decimalAttribute.value})
    +

    There is also a pseudo-formatting hack for datetime fields, but it is lacking:

    +
    Various datetime outputs
    ${item.published}                       // Wed Nov 30 23:00:00 UTC 2022
    ${item.attributes.published.value} // 1669849200000

    ${item.attributes.customDatetime.value} // 1672182000000
    ${item.custom.customDatetime} // 2022-12-27T23:00:00.000Z
    +

    As you can see, the built-in datetime attributes return a semi-readable date, item.attributes is outputting epoch timestamp (for both built-in and custom attributes) and the item.custom returns the full ISO format. Neither is remotely useful for Open Time Email...

    +

    Applying the .getDate() or .substring() methods leads to an error.

    +

    Fallback for null values

    +

    The first problem you may encounter with the official implementation is crashing on null values. If you want to leverage a product attribute for personalisation (for example, the brand with ${item.attributes.brand.value}), products missing this value will error out with "Error generating preview image: Unfulfilled variable".

    +

    Thankfully, there is a solution for it - a #field() function:

    +
    #field(${item.attributes.brand.value}, 'Fallback Value')
    +

    #field() functions expect two parameters:

    +
      +
    1. The personalisation you want to use
    2. +
    3. The fallback value. It can be either a string or another variable. However, you cannot nest the #field() function as a parameter of the #field() function, so if you decide to use another variable, be sure it is filled in for all the products.
    4. +
    +
    Field function with two variables as parameters
    #field(${item.attributes.customPromotionalImageUrl.value}, ${item.imageUrl})
    +

    In most cases, the most useful way to use #field() will be with fallback to an empty string, as it will just hide the personalisation from the image while protecting against the error:

    +
    Field function with empty fallback
    #field(${item.attributes.brand.value}, '')
    +

    If you want to add a fallback for formatted currency value, you need to wrap it around the formatting function:

    +
    Fallback for formatted custom decimal attribute
    #field($currency.format(${item.attributes.decimalAttribute.value}), '')
    +
    You Should Know

    Once again, the MultiString attributes are problematic, as they are not considered null when empty and will show [] instead (ignoring the fallback).

    Empty Object fields fall back correctly when they are truly empty. However, once you fill them with a JSON Object, UI will no longer let you truly empty that field, forcing you to write at least {} and leading to the same issue as with MultiString.

    +

    Conditional content with if/else

    +

    Sometimes you need more than just a fallback for a null value. When it is not about the null or there are more conditions to check, if/else is the best. Thankfully, it also can be leveraged in OTE:

    +
    Show strike-through listPrice only if the current price is lower
    <div style="text-align:left;">
    $currency.format(${item.price})
    <!-- #if(${item.listPrice} > ${item.price}) -->
    <span style="font-size: 14px; text-decoration: line-through;">
    $currency.format(${item.listPrice})
    </span>
    <!-- #end -->
    </div>
    +

    As you can see, for the if block you need to use HTML comment notation with #if() and #end statements. The #if() accepts parameters that return a boolean, just as in JavaScript if.

    +
    You Should Know

    The Object and MultiString attributes do not work correctly with if/else statements.

    If you test Object or MultiString with basic #if(${item.attributes.attributeName}), it will be treated as true even for an empty field. And even though ${item.attributes.MultiStringAttribute} will output [] doing #if(${item.attributes.attributeName} == []) or #if(${item.attributes.attributeName} == '[]') will return false.

    +

    You can add more condition-based paths with #else:

    +
    If imageUrl is not proper .jpg link, display placeholder image
    <!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith('.jpg')}) -->
    <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">
    <!-- #else -->
    <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">
    <!-- #end -->
    +
    You Should Know

    While the if/else block in the Open Time Email Template works similarly to what you may know from JavaScript or SSJS, it has one huge disadvantage - it is evaluating code in all paths.

    It means that even if MC Personalization is not using a path for the final image generation, the code written there can still error out the whole Campaign. Example:

    Will error out for a product without Brand
    <!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) -->
    ${item.attributes.brand.value}
    <!-- #end -->

    Even with checking whether there is a value behind the Brand attribute and only then personalising it, a template with such code would still error out for products without a brand.

    Always use fallbacks along with if/else blocks:

    Will NOT error out for a product without Brand
    <!-- #if(${item.attributes.brand.value} && !${item.attributes.categoryName.value}) -->
    #field(${item.attributes.brand.value}, '')
    <!-- #end -->
    + +

    Unfortunatelly support for Related Catalog Objects is heavily limited in Open Time Email.

    +

    You can leverage ${item.getTagValue("YourRelatedCatalogObject")} call to return the ID of the Item in RCO but you won't be able to get any other information (like name or URL of that Item). Additionally, if you have one-to-many relationship, you will still get only one ID for the first related Item. Due to those limitations, I recommend using it only if you have RCO with one-to-one relationship and readable IDs (for example, RED as an ID in the Color RCO).

    +

    The workaround for other use cases is to pass the crucial RCO data as custom attributes on the Product (for example,productColorName attribute if you are using numeric IDs for colors in the RCO). It's not perfect as it duplicates the data and eats up attributes, but it is currently the only way you will be able to leverage that information in OTE.

    +

    Example dynamic OTE Template

    +
    OTE Template with image fallback, null attribute fallbacks and conditional promo price display
    <div style="padding:10px; text-align:center; font-family:Arial; font-size:16px;">
    <!-- #if (${item.imageUrl} && ${item.imageUrl.endsWith('.jpg')}) -->
    <img src="${item.imageUrl}" style="max-width:180px; max-height:150px;">
    <!-- #else -->
    <img src="https://mateuszdabrowski.pl/placeholder-image.jpg" style="max-width:180px; max-height:150px;">
    <!-- #end -->
    <div style="text-align:left;">
    <span style="font-size:14px; color:#212121;">
    #field(${item.attributes.categoryName.value}, '')
    </span>
    <!-- #if (!${item.attributes.categoryName.value}) -->
    <br />
    <!-- #end -->
    <span style="margin-top:5px; overflow:hidden; text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;">
    #field(${item.attributes.brand.value}, '') $item.name
    </span>
    </div>
    <div style="margin-top:5px; text-align:left;">
    $currency.format(${item.price})
    <!-- #if(${item.listPrice} > ${item.price}) -->
    <span style="font-size:14px; color:#212121;text-decoration:line-through;">
    $currency.format(${item.listPrice})
    </span>
    <!-- #end -->
    </div>
    <div style="position:absolute; left:0px; right:0px; bottom:10px;">
    <button style="border:none; padding:10px; background-color:#1D73C9; color:#ffffff;">
    Buy now »
    </button>
    </div>
    </div>
    \ No newline at end of file diff --git a/docs/interaction-studio/mcp-serverside-code-basics/index.html b/docs/interaction-studio/mcp-serverside-code-basics/index.html index bb2ef1a6d..e8e08a696 100644 --- a/docs/interaction-studio/mcp-serverside-code-basics/index.html +++ b/docs/interaction-studio/mcp-serverside-code-basics/index.html @@ -1,22 +1,75 @@ - + - -MCP Serverside Code Basics | Mateusz Dąbrowski + +MCP Serverside Code Basics | Mateusz Dąbrowski - - - + + + -
    -

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Purpose

    Whether you are creating a Web, Serverside or Triggered Campaign Template in the Marketing Cloud Personalization (Interaction Studio), you start with the Serverside Code tab. It is the true heart of the MCP platform responsible for delivering data-driven personalisations.

    The developer can use the Serverside Code to:

    • leverage user profile and behavioural data
    • lookup company catalog data
    • build campaign configuration and use provided data
    • select and pull Einstein Recipe recommendations

    to output a transformed payload containing everything needed for a unique experience for each customer.


    MCP Serverside Code Basics

    All the above things are done within the Serverside Code tab of the MC Personalization Template creation UI with TypeScript programming language and built-in functions. Don't worry if you don't know TypeScript - basic knowledge of modern JavaScript is enough to create good templates.

    You Should Know

    Open Time Email Campaigns are using different, older system. I covered its details in a separate guide.

    When you open the Serverside Code tab in a new Template creation screen for Web, Serverside or Triggered Campaign within the Marketing Cloud Personalization, you will be greeted by a bit intimidating interface. Let's start by breaking it down section by section:

    1. The middle pane contains your TypeScript code responsible for all the magic happening on the server side.
    2. Within the middle section (1), you will see two sections. The first one is responsible for defining the Campaign configuration form. In the screenshot above, a header field is defined as a string and decorated with a custom title.
    3. The form definitions you develop (2) will be available for a preview on the left pane. This section lets you see what the Campaign Configuration screen will look like and enables you to fill it in to see the interactions.
    4. Returning to the middle section (1), below the configuration form definitions (2), you will find the run function with context being passed as an argument. This is where you can optionally transform or enrich the data captured from the configuration form. The context provided to the function contains triggering event data and access to many helper functions to bring your template to the next level. You can also add properties (for example, debugging details) to the returned object to make them available in the payload (5).
    5. The bottom part of the right pane displays the Payload Preview. It is updated in real-time as you write your TypeScript (1) or change the configuration (3). it is an excellent way to validate whether you are getting the desired outcome.
    6. If your template leverages user or catalog data (for example, user attributes for personalisation or anchored recipes) to see the proper payload, you must provide example data. The top section of the right pane lets you do it. You can add the IDs and see the payload (5) adapt to the simulated scenario.

    The final outcome of your work in this tab is the personalised payload (5). Depending on the type of campaign this template is for, it will either be delivered as is (Serverside), put into a Data Extension (Triggered Campaign) or be available to leverage for logic in Clientside Code and experience in Handlebars tabs (Web Campaign).

    You Should Know

    If you don't see experience or campaign in the payload object (5), it means there is a bug in your template code (1).

    If you don't see the configuration form preview (3) updates despite making changes in the serverside code (1), MCP probably froze. Check whether you are still logged in to the MC Personalization (MCP session length is shorter than SFMC's). If yes, cut (ctrl/cmd + x) your whole serverside code, provide any symbol (like a') to overwrite the cache and replace it back by pasting the code (ctrl/cmd+v`).


    Writing Serverside Code

    As mentioned above, when you create a new Web, Serverside or Triggered Campaign Template and view the Serverside Code tab, you will get a concise and simple code snippet:

    export class NewTemplate implements CampaignTemplateComponent {

    @title("Example Field")
    header: string;

    run(context: CampaignComponentContext) {
    return {};
    }

    }

    There is a collection of much more complex Global Templates available that are great starting points for building actual campaigns, but here we will start with the base snippet and build up from it for learning purposes.

    There are three critical parts of that snippet:

    export class NewTemplate implements CampaignTemplateComponent {

    // 1: field configuraiton
    @title("Example Field")
    header: string;

    run(context: CampaignComponentContext) {
    // 2: run block

    return {}; // 3: return statement
    }
    }

    1. Field Configuration

    The field configuration lets you add properties that will become part of the campaign configuration form used by marketers to set the experiences. It is the primary data input; MCP will directly pass all properties you add here to the campaign response.

    Learn more

    2. Run Block

    Run block has access to the context object containing trigger event details and MC Personalization data. It can also pull information configured in the properties by the marketer. With all of this, you can use it to enrich and transform the data that the campaign will return.

    3. Return Statement

    Return statement within the run block lets you add custom properties to the final campaign payload. Whatever you add to the returned object will be available along with the properties from the field configuration section.

    You Should Know

    The run block execution works differently during the template creation and campaign configuration. When the marketer configures the campaign, MCP applies the changes executed within the run in real time - this may lead to content changes or even the removal of field input. You shouldn't transform the data in the fields directly but rather do it on new variables:

    export class PersonalizedOverlay implements CampaignTemplateComponent {

    @title("Personalized Header")
    @subtitle("Use {firstName} to insert first name personalization")
    initialHeader: string;

    run(context: CampaignComponentContext) {
    let header = this.initialHeader.replace(/{firstName}/g, context.user.attributes?.firstName || 'Trailblazer');

    return { header };
    }
    }

    This way, the configured field will stay as it is, but in the final campaign payload, you will also have the transformed variable for use.

    Keep this in mind when you have to provide a payload according to a specification (e.g. in the Serverside Campaign Template). If you want to make any transformations to a manual input, add some prefix to the property in the field configuration section (e.g. initial) and output the expected name only through the return statement of the run block, as shown in the snippet above.

    With the basics of Serverside Code processing, you are ready to start coding. Next step - build MCP Campaign Template inputs with Serverside Code Properties.


    All MCP Serverside Code Guides


    Learn more

    Here, I want to share a few of my favourite sources focusing on MCP Serverside Code and its use in Campaign Templates:

    1. My MCP Campaign Templates and code snippets
    2. Official GitHub repository with Global Templates
    3. Christoper's Long GitHub repository with Complex Templates
    4. Salesforce Japan Template Catalog with Web Campaigns

    Found other inspiring MCP Serverside Code examples? Let me know!

    - - +

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    +

    MCP Serverside Code Purpose

    +

    Whether you are creating a Web, Serverside or Triggered Campaign Template in the Marketing Cloud Personalization (Interaction Studio), you start with the Serverside Code tab. It is the true heart of the MCP platform responsible for delivering data-driven personalisations.

    +

    The developer can use the Serverside Code to:

    +
      +
    • leverage user profile and behavioural data
    • +
    • lookup company catalog data
    • +
    • build campaign configuration and use provided data
    • +
    • select and pull Einstein Recipe recommendations
    • +
    +

    to output a transformed payload containing everything needed for a unique experience for each customer.

    +
    +
    +

    MCP Serverside Code Basics

    +

    All the above things are done within the Serverside Code tab of the MC Personalization Template creation UI with TypeScript programming language and built-in functions. Don't worry if you don't know TypeScript - basic knowledge of modern JavaScript is enough to create good templates.

    +
    You Should Know

    Open Time Email Campaigns are using different, older system. I covered its details in a separate guide.

    +

    When you open the Serverside Code tab in a new Template creation screen for Web, Serverside or Triggered Campaign within the Marketing Cloud Personalization, you will be greeted by a bit intimidating interface. Let's start by breaking it down section by section:

    +
    +
      +
    1. The middle pane contains your TypeScript code responsible for all the magic happening on the server side.
    2. +
    3. Within the middle section (1), you will see two sections. The first one is responsible for defining the Campaign configuration form. In the screenshot above, a header field is defined as a string and decorated with a custom title.
    4. +
    5. The form definitions you develop (2) will be available for a preview on the left pane. This section lets you see what the Campaign Configuration screen will look like and enables you to fill it in to see the interactions.
    6. +
    7. Returning to the middle section (1), below the configuration form definitions (2), you will find the run function with context being passed as an argument. This is where you can optionally transform or enrich the data captured from the configuration form. The context provided to the function contains triggering event data and access to many helper functions to bring your template to the next level. You can also add properties (for example, debugging details) to the returned object to make them available in the payload (5).
    8. +
    9. The bottom part of the right pane displays the Payload Preview. It is updated in real-time as you write your TypeScript (1) or change the configuration (3). it is an excellent way to validate whether you are getting the desired outcome.
    10. +
    11. If your template leverages user or catalog data (for example, user attributes for personalisation or anchored recipes) to see the proper payload, you must provide example data. The top section of the right pane lets you do it. You can add the IDs and see the payload (5) adapt to the simulated scenario.
    12. +
    +

    The final outcome of your work in this tab is the personalised payload (5). Depending on the type of campaign this template is for, it will either be delivered as is (Serverside), put into a Data Extension (Triggered Campaign) or be available to leverage for logic in Clientside Code and experience in Handlebars tabs (Web Campaign).

    +
    You Should Know

    If you don't see experience or campaign in the payload object (5), it means there is a bug in your template code (1).

    If you don't see the configuration form preview (3) updates despite making changes in the serverside code (1), MCP probably froze. Check whether you are still logged in to the MC Personalization (MCP session length is shorter than SFMC's). If yes, cut (ctrl/cmd + x) your whole serverside code, provide any symbol (like a) to overwrite the cache and replace it back by pasting the code (ctrl/cmd + v).

    +
    +

    Writing Serverside Code

    +

    As mentioned above, when you create a new Web, Serverside or Triggered Campaign Template and view the Serverside Code tab, you will get a concise and simple code snippet:

    +
    export class NewTemplate implements CampaignTemplateComponent {

    @title("Example Field")
    header: string;

    run(context: CampaignComponentContext) {
    return {};
    }

    }
    +

    There is a collection of much more complex Global Templates available that are great starting points for building actual campaigns, but here we will start with the base snippet and build up from it for learning purposes.

    +

    There are three critical parts of that snippet:

    +
    export class NewTemplate implements CampaignTemplateComponent {

    // 1: field configuraiton
    @title("Example Field")
    header: string;

    run(context: CampaignComponentContext) {
    // 2: run block

    return {}; // 3: return statement
    }
    }
    +

    1. Field Configuration

    +

    The field configuration lets you add properties that will become part of the campaign configuration form used by marketers to set the experiences. It is the primary data input; MCP will directly pass all properties you add here to the campaign response.

    +Learn more +

    2. Run Block

    +

    Run block has access to the context object containing trigger event details and MC Personalization data. It can also pull information configured in the properties by the marketer. With all of this, you can use it to enrich and transform the data that the campaign will return.

    +

    3. Return Statement

    +

    Return statement within the run block lets you add custom properties to the final campaign payload. Whatever you add to the returned object will be available along with the properties from the field configuration section.

    +
    You Should Know

    The run block execution works differently during the template creation and campaign configuration. When the marketer configures the campaign, MCP applies the changes executed within the run in real time - this may lead to content changes or even the removal of field input. You shouldn't transform the data in the fields directly but rather do it on new variables:

    export class PersonalizedOverlay implements CampaignTemplateComponent {

    @title("Personalized Header")
    @subtitle("Use {firstName} to insert first name personalization")
    initialHeader: string;

    run(context: CampaignComponentContext) {
    let header = this.initialHeader.replace(/{firstName}/g, context.user.attributes?.firstName || 'Trailblazer');

    return { header };
    }
    }

    This way, the configured field will stay as it is, but in the final campaign payload, you will also have the transformed variable for use.

    Keep this in mind when you have to provide a payload according to a specification (e.g. in the Serverside Campaign Template). If you want to make any transformations to a manual input, add some prefix to the property in the field configuration section (e.g. initial) and output the expected name only through the return statement of the run block, as shown in the snippet above.

    +

    With the basics of Serverside Code processing, you are ready to start coding. Next step - build MCP Campaign Template inputs with Serverside Code Properties.

    +
    +

    All MCP Serverside Code Guides

    +
    +
    +

    Learn more

    +

    Here, I want to share a few of my favourite sources focusing on MCP Serverside Code and its use in Campaign Templates:

    +
      +
    1. My MCP Campaign Templates and code snippets
    2. +
    3. My GitHub repository with Global and Custom Templates
    4. +
    5. Christoper's Long GitHub repository with Complex Templates
    6. +
    7. Salesforce Japan Template Catalog with Web Campaigns
    8. +
    +

    Found other inspiring MCP Serverside Code examples? Let me know!

    \ No newline at end of file diff --git a/docs/interaction-studio/mcp-serverside-code-context/index.html b/docs/interaction-studio/mcp-serverside-code-context/index.html new file mode 100644 index 000000000..14ad7f0da --- /dev/null +++ b/docs/interaction-studio/mcp-serverside-code-context/index.html @@ -0,0 +1,184 @@ + + + + + +MCP Serverside Code Context | Mateusz Dąbrowski + + + + + + + + + + +

    MCP Serverside Code Context

    Context is king. Also when coding MCP Campaign Templates. Read about all its undocumented tricks.

    +

    Marketing Cloud Personalization offers a flexible campaign template creation tooling with multiple properties and imports that help you fulfil business needs with a pleasant user experience for the marketer. There is also one more - undocumented - feature that can change your template from good to outstanding. The CampaignComponentContext object.

    +
    You Should Know

    In this article, I'm covering the main CampaignComponentContext object that is passed as a context argument to the run method in the Serverside Code of every campaign template.

    Some other contexts (like GearLifecycleContext passed to search methods) have different structures and are out of the scope of this article.

    +

    The CampaignComponentContext object is available in the Serverside Code of the Web, Serverside and Triggered Campaign Templates and provides extensive details about triggering event, user and delivered experience.

    +
    Structure of the context object
    {
    "campaignId": string,
    "experienceId": string,
    "userGroup": string,
    "beaconVersion": number,
    "event": Object,
    "contentZone": string,
    "trigger": Object,
    "locale": string,
    "services": Object,
    "user": Object,
    "accountId": string,
    "datasetId": string,
    "configuration": Object
    }
    +

    It's straightforward to use once you know what's in there. For example, you can pull product ID stored with Sitemap in a User Attribute and leverage it to pull complete data about that product for personalisation:

    +
    Leverage context in the run method of your Serverside Code
        run(context: CampaignComponentContext) {
    let lastAddedToCartProductId = context.user.attributes?.lastAddedToCartProduct?.value;
    let lastAddedToCartProductDetails = context.services.catalog.findItem('Product', lastAddedToCartProductId);
    return { lastATCDetails: lastAddedToCartProductDetails };
    }
    +

    And that's just a basic usage. The key to unlocking the power of a context object is knowing what is stored there and how you can use it. So let's dive in, property by property (hint, the fun part starts at event).

    +
    You Should Know

    This article is in a work-in-progress state - I'm ongoingly extending details about various parts of the context object as I can use it in real life.

    +

    campaignId & experienceId

    +

    The first two string properties of the context object are campaignId and experienceId, and their purpose is very straightforward. They provide the five-character, case-sensitive, alphanumerical IDs for the campaign and experience selected for a user (for example, vALdQ for Campaign ID and f3WpK for Experience ID).

    +

    Both those values are passed by default from serverside to clientside and handlebars (as campaign and experience accordingly), so there is not much added value in those two unless you want to append those values as query strings to the links for tracking purposes.

    +

    However, for Web Campaigns, you can do it easily within the handlebars tab, and for Serverside and Triggered Campaigns, you can do it on the receiving system side.

    +

    userGroup

    +

    The userGroup string property should tell you which user group the user was assigned. Well, it should. In practice, you will see there one of the two values: Test for users that got an A/B Test or Rule-Based experience and testUserGroup for those that are in the Control group (or in the Template preview pane within MCP UI).

    +

    However, you will see better values in the out-of-the-box serverside payload userGroup property that correctly shows values like Test, Default, and Control and only displays testUserGroup during preview.

    +
    You Should Know

    The control group creates more problems for the context, as it keeps displaying the payload preview version of it. So you will also see only the placeholder values for campaignId and experienceId, beaconVersion and skip other datapoints like event.fields.

    In short, don't use context for custom payload dedicated to control group users.

    +

    beaconVersion

    +

    The beaconVersion number property will display the current Web SDK version (f.e. 16 at the moment of writing it) or 0 for the preview/control group. Not really useful.

    +

    event

    +

    The event object property is where the magic of the context object starts. It stores information about the event that triggered the campaign - the data you can see when you leverage the .setLoggingLevel('debug') method in your Sitemap.

    +
    You Should Know

    The context.event object won't work correctly in the Template Preview sidebar, as there is no valid event in that mode. Use an active campaign directly on the website to preview the actual output during development. Just make sure you use the campaign targeting to limit execution just to you.

    +
    Structure of the context.event object
    {
    "time": datetime,
    "fields": Object,
    "ipAddress": (): string,
    "itemId": (): string,
    "itemType": (): string
    }
    +

    While the context.event.time is not that useful (unless you want to make some time-dependent changes to the campaign payload), the three available methods are much more practical.

    +

    event methods

    +

    context.event.ipAddress()

    +

    Returns an IP address of the user visiting your website. You might use it to blocklist specific IP ranges (internal or competitors) from seeing your campaigns. It's not a clean solution (as the campaign needs to be executed to get this far), but this might be your best bet, as there is no MCP-level IP blocklist. Of course, a much better solution would be to build such logic on the website side to block IPs already on the Web SDK import step conditionally, but that might not always be possible.

    +

    context.event.itemId()

    +

    Returns the ID of the Catalog Item the user viewed in the event. It pairs perfectly with the following method: context.event.itemType().

    +

    context.event.itemType()

    +

    Returns the Catalog of the Item viewed (f.e. 'Product' for Product View).

    +

    The pair of itemId and itemType is handy, as those two details are precisely what MCP requires for a context.services.catalog.findItem() call that lets you get complete details about the currently displayed item. It enables use cases where you want to change the campaign payload based on displayed item attributes, related catalog objects, or other information on the item details. For example, access to localized item data.

    +
    You Should Know

    Event is not only an excellent data point that you can access through context. It is also the basis for the anchor in Einstein Recipes. You can leverage it (in a filthy way) to create fake anchors and deploy recommendations for products related to the one currently viewed.

    +

    On top of the above, context.event also contains the context.event.fields subobject, capturing even more details about the triggering event.

    +

    event.fields

    +
    Structure of the context.event.fields object
    {
    ".anonId": string,
    ".bv": string,
    ".pv": boolean,
    ".scv": number,
    ".skipProcessing": boolean,
    "action": string,
    "channel": string,
    "clientIp": string,
    "contentZones": string[],
    "pageType": string,
    "url": string,
    "urlref": string,
    "userAgent": string,
    "_anon": boolean,
    "_debug": boolean,
    "customAttribute1": any,
    "customAttribute2": any
    }
    +

    context.event.fields subobject groups multiple data points, many of which are very technical and not really useful for us. But some can open exciting use cases - let's dive in.

    +

    context.event.fields.pageType

    +

    Returns the name of the currently viewed page type as configured in the Sitemap (f.e. 'Home'). It is useful when you want to adapt the serverside payload of the campaign based on page type when the content zone is shared across many sites.

    +

    context.event.fields.action

    +

    Returns the name of the currently pushed action as configured in the Sitemap (f.e. 'Viewed Home'). It shines for custom action names that can drive different campaign experiences - despite being triggered on the same page type.

    +

    context.event.fields.url

    +

    Returns the URL where the event originated. The cool part is that it contains the hash and query strings, so you can drive use cases using those elements (f.e. change the experience based on the query string values you set in the email campaign using SFMC data).

    +

    context.event.fields.customAttribute

    +

    Apart from those always-there properties, you will also see custom attributes you passed along with the event. For example, if in the Sitemap you are passing SFMC Contact Key along with the event: actionEvent.user.attributes.sfmcContactKey = queryParameters.get('sk'); you will have context.event.fields.sfmcContactKey property available with that value. This is huge - it enables us to build campaigns leveraging real-time data. Use cases? Sure! Create an hasAddedInsurance attribute filled out by the Add to Cart event to determine whether you want to promote a cross-sell. Add the hasMetFreeDeliveryThershold boolean field to conditionally trigger recommendations of products that will help the customer get over the line of free delivery. The sky is the limit with those.

    +
    You Should Know

    If you need some data only for the specific event purpose and don't want to store it in an attribute (be it due to limits or because Sitemap cannot remove the attribute value later), you can still use the actionEvent.user.attributes.customAttribute = 'value' approach to pass that information. It won't be stored on the user attribute (if there isn't one matching the name) but will still be available on the Event Stream and in the context object as context.event.fields.customAttribute. Works also for pushing custom events:

    Pushing custom event with a custom attribute that does not exist as a user attribute
    Evergage.sendEvent({
    action: 'Custom Event',
    user: {
    attributes: {
    customAttribute: 'value',
    },
    },
    source: {
    contentZones: [{ name: 'virtual_for_global_control' }],
    }
    })
    +

    contentZone

    +

    The contentZone string property returns the Content Zone selected for the Campaign. It might be helpful if your campaign supports multiple content zones and you want to alter some payload elements based on the one selected (f.e. change the number of returned recommendations):

    +
    Leverage context.contentZone to change the serverside payload
    // Limit the number of recommendations to the first four for smaller placements
    if (['search_see-more', 'listing_see-more'].includes(context.contentZone)) {
    recommendations = recommendations.slice(0,4);
    }
    +

    trigger

    +

    The trigger object property is filled only for the Triggered Campaign Templates.

    +

    🚧 Work in progress 🚧

    +

    locale

    +

    If you have switched on Locale support in your Marketing Cloud Personalization, the locale string will return a five-character long combination of ISO language code and ISO country code (language_COUNTRY, for example: en_US for American English).

    +

    You can use it to return the campaign content based on the most recent user locale (be it based on manually entered variations in the Campaign configuration or by pulling directly from the localized Catalog):

    +
    Leverage context.locale to pull localized product details
    const recommendedIds = recommendIdsOnly(context, recipeConfig);
    // Return localized recommendations with key data points needed for the campaign
    let localisedRecommendations = context.services.catalog
    .findItems('Product', recommendedIds)
    .map(product => product.toFlatJSON(
    ['id', 'name,' 'imageUrl', 'url', 'price'],
    context.locale || ''
    ))
    +

    services

    +

    context.services is the most potent part of the context object - packed to the brim with methods that give you access to Marketing Cloud Personalization data or let you create new recommendations.

    +
    Structure of the context.services object
    {
    "catalog": Object,
    "recommendations": Object,
    "smartTrends": Object,
    "surveys": Object,
    "decisions": Object,
    "corvus": Object,
    "promotionCatalog": Object
    }
    +

    It's a nested object, so let's go through it property by property to discuss each group of methods.

    +

    services.catalog

    +
    Structure of the context.services.catalog object
    {
    "dimensionFilter": (dimension: string): ItemFilter<any>,
    "findClosestItems": (request: ClosestItemsRequest): Item[],
    "findItem": (type: string, id: string): Item,
    "findItems": (type: string, ids: string[]): Item[] || (type: ItemFilter<any>, ids: ItemSort<any>): Item[] || (type: ItemFilter<any>): Item[]
    }
    +

    🚧 Work in progress 🚧

    +

    services.recommendations

    +
    Structure of the context.services.recommendations object
    {
    "recommend": (request: RecommendationsRequest): Item[],
    "recommendIdsOnly": (request: RecommendationsRequest): Item[],
    "smartSearch": (request: SmartSearchRequest): Item[],
    "smartSort": (request: SmartSort): Item[]
    }
    +

    🚧 Work in progress 🚧

    +

    services.smartTrends

    +
    Structure of the context.services.smartTrends object
    {
    "smartTrends": (request: SmartTrendsRequest): ItemTrends[]
    }
    +

    🚧 Work in progress 🚧

    +

    services.surveys

    +
    Structure of the context.services.surveys object
    {
    "getSurey": (surveyId: string): Survey
    }
    +

    🚧 Work in progress 🚧

    +

    services.decisions

    +
    Structure of the context.services.decisions object
    {
    "decide": (request: ContextualBanditRequest): Item[]
    }
    +

    🚧 Work in progress 🚧

    +

    services.corvus

    +
    Structure of the context.services.corvus object
    {
    "contextualBandit": {
    "decide": (request: ContextualBanditRequest, filter: PromotionFilter): Item[]
    }
    }
    +

    🚧 Work in progress 🚧

    +

    services.promotionCatalog

    +
    Structure of the context.services.promotionCatalog object
    {
    "findPromotions": (filter: ItemFilter<any>, context: CampaignComponentContext): Promotion: [],
    "promotionFilter": (contentZone: string): PromotionFilter
    }
    +

    🚧 Work in progress 🚧

    +

    user

    +

    context.user is the most significant property covering massive information about the user that triggered the campaign. It contains multiple subobjects (which I will cover separately below) and methods perfect for statistics-based use cases within the serverside code.

    +
    Structure of the context.user object
    {
    "attributes": Object,
    "profileObjects": Object,
    "visits": [Object],
    "orderHistory": [Object],
    "location": Object,
    "currentCart": Object,
    "anonymous": boolean,
    "segmentMembership": [Object],
    "id": string,
    actionCount: (request: ActionStatsRequest): number,
    actionCountPerItem: (request: ActionStatsRequest): Object,
    getDimensionActivity: (dimension: string, start: Date, end: Date): {
    [itemId: string]: ItemActionStats
    },
    getDimensionActivityByDay: (dimension: string, start: Date, end: Date): {
    [date: string] : ItemActionStats
    },
    getEmailSendHistory: (start: Date, end: Date): EmailSendActivity[] || (): EmailSendActivity[],
    getLatestOrderByStatus: (status: 'Open' | 'Purchased' | 'Cancelled'): Order,
    getSegmentJoinDate: (segmentId: string): Date,
    itemStatTotal: (request: ItemStatsRequest): number,
    itemStatTotalPerItem: (request: ItemStatsRequest): ItemStat[],
    pageViewCount: (request: StatsRequest): number,
    visitCount: (request: StatsRequest): number,
    visitDurationMillis: (request: StatsRequest): number,
    }
    +

    Let's start our discovery of context.user with the methods.

    +

    user methods

    +

    context.user.actionCount()

    +

    Requires an ActionStatsRequest ({actionName: 'Name of the action'}) and returns the total of provided action triggers for the current user. You can also extend ActionStatsRequest with start or end (but not both due to an MCP bug) date properties to limit the timeframe of the action count.

    +
    Check how many times customer viewed cart within the last day
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let homeViewCount = context.user.actionCount({actionName: 'Viewed Cart', start: yesterday}); // Returns: 4
    +

    context.user.actionCountPerItem()

    +

    In theory, it should be able to return the action count per item (after passing a 'Viewed Product' action in ActionStatsRequest, it should show the counts per each product where that action triggered). But it doesn't. It returns the same information as actionCount() method, but instead of doing it directly as a number, it does it as an object with an action name. Unless I'm missing something - useless.

    +
    Full on promise, null on delivery actionCountPerItem method
    let homeViewCount = context.user.actionCountPerItem({actionName: 'Viewed Product'}); // Returns: {'Viewed Product': 5}
    +

    context.user.getDimensionActivity()

    +

    Requires a dimension (a Catalog, like 'Product', 'Category' or 'CustomCatalog') and start + end date boundaries. This time, you must always provide both in that exact order. The significant difference with this method is that you pass direct arguments, not a grouping Stat object. It returns an object with Item IDs and related activity data from the selected Dimension with which the user interacted during the timeframe.

    +
    Find the activity in a specified catalog
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let brandActivity = context.user.getDimensionActivity('Brand', yesterday, today); // Returns:
    // {
    // "Apple": {
    // "view": 2,
    // "viewOutOfStock": 0,
    // "viewDetail": 0,
    // "viewTime": 43339,
    // "cart": 1,
    // "cartValue": 215,
    // "purchase": 1,
    // "purchaseValue": 215,
    // "review": 0,
    // "share": 0,
    // "comment": 0,
    // "favorite": 0
    // }
    // }
    +

    That's an excellent set of data to calculate the most viewed Category, longest viewed Product or most purchased Brand by that specific user. Unfortunately, it's still just a proxy for the actual affinity data that is unavailable.

    +
    You Should Know

    While you can work on the returned object, you cannot directly pass it to the serverside payload. You can output the final value (f.e. brandActivity.Apple.view), but both brandActivity and brandActivity.Apple will break it.

    You can perform calculations in serverside code on any level, but if you need to output it directly in the payload, there is a trick: JSON.parse(JSON.strinify(brandActivity)).

    +

    context.user.getDimensionActivityByDay()

    +

    The getDimensionActivityByDay method works nearly the same as getDimensionActivity. There are two key differences:

    +
      +
    1. It requires additional argument - right after selecting the Dimension, you must also pass the specific Item ID for which you want to see the activity.
    2. +
    3. The returned Object will have epoch properties for each activity day within the selected period.
    4. +
    +
    Find the activity in a specified catalog
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let brandActivity = context.user.getDimensionActivityByDay('Brand', 'Apple', yesterday, today); // Returns:
    // {
    // "1707782400000": {
    // "view": 2,
    // "viewOutOfStock": 0,
    // "viewDetail": 0,
    // "viewTime": 43339,
    // "cart": 1,
    // "cartValue": 215,
    // "purchase": 1,
    // "purchaseValue": 215,
    // "review": 0,
    // "share": 0,
    // "comment": 0,
    // "favorite": 0
    // }
    // }
    +

    It also has the same payload limitation as getDimensionActivity, and the same workaround is available.

    +

    context.user.getEmailSendHistory()

    +

    Requires either nothing or start/end data boundary and returns... nothing. At least I couldn't get it to work with the OTE Campaign data. It may leverage the barely working External Email Campaign ETL.

    +

    context.user.getLatestOrderByStatus()

    +

    Requires an order status ('Open', 'Purchased' or 'Cancelled') and returns the most recent Order object in the selected state. The data structure and content are the same as in the user.orderHistory.

    +

    context.user.getSegmentJoinDate()

    +

    Requires Segment ID (you can view it in User Segments after you add the ID column or by opening a specific segment and copying five alphanumerical characters from URL: .../segment/{SegmentID}/members...) and returns an epoch with join date. It's a fantastic way to capture additional context for the user (f.e. how many days ago he joined the Gold Tier segment).

    +
    Segment join epoch fun
    let segmentJoinEpoch = context.user.getSegmentJoinDate('qWeR1'); // Returns: 1695796858287
    +

    If the Segment ID is incorrect or the user has not joined the provided segment, it will return null.

    +
    You Should Know

    You can easily convert epoch to date to simplify date calculations:

    Perform date comparisons on epoch
    let segmentJoinEpoch = context.user.getSegmentJoinDate('qWeR1'); // Returns: 1695796858287
    let segmentJoinDate = new Date(segmentJoinEpoch);

    let today = new Date();
    let lastWeek = new Date(today.setDate(today.getDate() - 7));

    let hasJoinedLastWeek = segmentJoinDate > lastWeek;
    +

    context.user.itemStatTotal()

    +

    Requires an ItemStatsRequest ({itemType: 'CatalogName', statType: 'StatTypeName'}) and returns the count for that stat for a given Catalog. You can also extend ItemStatsRequest with another optional property itemId: 'id' to limit the result to a specific Item within a given Catalog (itemType). Finally, as with actionCount(), you can also use start or end timeframe boundaries - but not both.

    +
    Time spent by the user on Laptop Category within the last day in milliseconds
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let itemViewTime = context.user.itemStatTotal({
    itemId: 'Laptop',
    itemType: 'Category',
    statType: 'ViewTime',
    start: yesterday
    }); // Returns: 98663
    +

    Available statTypes: 'View', 'ViewOutOfStock', 'ViewValue', 'ViewDetail', 'QuickView', 'ViewTime', 'Cart', 'CartValue', 'Purchase', 'Visit', 'PurchaseValue', 'Review', 'Share', 'Comment', 'Favorite', 'Searches', 'SearchClicks', 'ClickThrough', 'RemoveFromCart', 'RemoveFromCartValue', 'RecommendedCount', 'PageLoadTime', 'PageLoadTimeCount', 'DomLoadTime', 'DomLoadTimeCount', 'TwReceiverTime', 'TwReceiverTimeCount', 'NumErrorEvents', 'TriggeredCount', 'RequestedForServing', 'EligibleForServing', 'Served'.

    +

    Remember that the meaning of the returned value will differ depending on the selected statType - it can be count, milliseconds or money.

    +
    You Should Know

    This method works perfectly with the context.event.itemId() and context.event.itemType() as with those, you can pull relevant stats for a currently viewed Item and adapt payload for it (f.e. adapt Exit Intent incentive based on the number of visits or time spent on currently viewed product).

    +

    context.user.itemStatTotalPerItem()

    +

    itemStatsPerItem() works in a very similar manner to itemStatsTotal() and accepts the same ItemStatsRequest. The key difference is that instead of a single value, it will return an array of objects, each containing an itemId and value specific to that item.

    +
    Time spent by the user on Products within the last day in milliseconds
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let itemViewTime = context.user.itemStatPerItem({
    itemType: 'Product',
    statType: 'ViewTime',
    start: yesterday
    }); // Returns: [{itemId: '123', value: 9238}, {itemId: '456', value: 26651}]
    +

    While you can pass itemId: 'id' in the ItemStatsRequest, it will limit the outputted array to a single object for that item, making it not useful vs itemStatsTotal().

    +

    context.user.pageViewCount()

    +

    Requires StatsRequest ({start: Date, end: Date} - use either start or end; using both will always return 0) and returns the count of pages viewed in that timeframe. Both timeframe bounds are required.

    +
    Pages viewed within the last day
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let itemViewTime = context.user.pageViewCount({
    start: yesterday
    }); // Returns: 9
    +

    context.user.visitCount()

    +

    Similar to pageViewCount(), it requires StatsRequest ({start: Date, end: Date} - use either start or end; using both will always return 0) but returns the count of visits instead of specific pages.

    +
    You Should Know

    Visit for Marketing Cloud Personalization starts from the first page view and ends after the user reaches 30 minutes of inactivity on the site. So if a user goes to your website to view a few pages, leaves and then returns after 40 minutes - it will be counted as a separate visit.

    +
    Visits within the last day
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let itemViewTime = context.user.visitCount({
    start: yesterday
    }); // Returns: 2
    +

    context.user.visitDurationMilis()

    +

    Similar to pageViewCount(), it requires StatsRequest ({start: Date, end: Date} - use either start or end, using both will always return 0) but returns the number of milliseconds the user spent on your website in a specified timeframe.

    +
    Visits within the last day
    let today = new Date();
    let yesterday = new Date(today.setDate(today.getDate() - 1));
    let itemViewTime = context.user.visitDurationMilis({
    start: yesterday,
    end: today
    }); // Returns: 98663
    +

    user.attributes

    +

    context.user.attributes object contains out-of-the-box, custom and hidden attributes with respective values for the user. It's an instrumental part of the context as it allows you to pull user-specific data not only from the triggering event (like it is also possible with context.event.fields.customAttribute) but also from past events. This enables fun use cases like saving in custom attributes the last viewed Product and Category with Sitemap and then leveraging that information when the user is on the non-product page of your website to bring them back onto the funnel. It's also great to personalize your campaign (f.e. with the first name in the info banner or overlay).

    +
    Structure of the context.user.attributes object
    {
    "created": {
    "value": number // epoch
    },
    "customAttribute": {
    "value": any
    },
    "originatingReferrer": {
    "value": "{\"medium\":\"Direct\",\"source\":null,\"terms\":null,\"domain\":null,\"subdomainReversed\":null,\"url\":null,\"landingUrl\":\"https://www.mateuszdabrowski.pl/\"}"
    },
    "firstName": {
    "value": string
    },
    "lastViewedCartAt": {
    "value": number // epoch
    },
    "firstActivity": {
    "value": number // epoch
    }
    }
    +

    user.profileObjects

    +

    🚧 Work in progress 🚧

    +

    user.visits

    +

    context.user.visits is an Array with user visits. Remember that the Marketing Cloud Personalization visit starts from the first page view and ends after the user reaches 30 minutes of inactivity on the site. So if a user goes to your website to view a few pages, leaves and then returns after 40 minutes - it will be counted as a separate visit. It is critical - there is no way to access the history of each page the user visits. You can only see the visit (session start data) with a pageViewIndex with a count of page views during that visit.

    +
    Structure of the context.user.visits array
    [
    {
    "start": number, // epoch
    "lastEventTime": number, // epoch
    "timeSinceLastVisit": number, // milliseconds
    "referrer": { // || null
    "medium": "Direct",
    "source": null,
    "terms": null,
    "domain": null,
    "subdomainReversed": null,
    "url": null,
    "landingUrl": "https://www.mateuszdabrowski.pl/"
    },
    "deviceType": "Computer",
    "browser": "Chrome",
    "platform": "Web",
    "operatingSystem": "Windows",
    "weather": { // || null
    "temperature": 71,
    "humidity": 67,
    "windSpeed": 7,
    "rain3h": 0,
    "snow3h": 0,
    "cloudCoverage": 0,
    "condition": {
    "id": 800,
    "name": "clear sky",
    "icon": "01d",
    "category": "Clear"
    }
    },
    "pageViewIndex": 9
    }
    ]
    +

    While there are a few attributes here, I would like to focus on two that enable exciting use cases:

    +
      +
    1. referrer can contain data of the website that led the user to you. If this is the case, you can create a dedicated campaign focusing on the source (f.e. small vouchers to convert people coming from voucher-gathering websites) or terms (f.e. changing the experience based on social ad terms passed).
    2. +
    3. weather can provide you with details about temperature, rain and snow, unlocking like-magic use cases, f.e. if it is cold and showers for your customer, display a campaign with a dedicated message promoting a sunny and hot travel destination.
    4. +
    +

    user.orderHistory

    +

    context.user.orderHistory is an array with past orders in any status (open, purchased or cancelled) for the user. It contains everything - timeframes, order value and currency and even a list of all products in that order.

    +
    Structure of the context.user.orderHistory array
    [
    {
    "id": null,
    "created": number, // epoch
    "updated": number, // epoch
    "purchaseDate": null,
    "visitAgeAtPurchase": number, // milliseconds
    "totalValue": number,
    "totalValueCurrency": null,
    "status": "Open",
    "metadata": null,
    "lineItems": [
    {
    "quantity": number,
    "price": number,
    "itemId": string,
    "attributes": {}
    },
    ],
    "attributes": {}
    }
    ]
    +

    user.location

    +

    context.user.location can be magic or trash - depending on the Internet Service Providers of your audience. The rule of thumb is good data for B2B and mixed data for B2C. It's worth checking because if you can trust/clean this data, you can do astounding things with it.

    +
    Structure of the context.user.location object
    {
    "geographicPoint": {
    "latitude": number,
    "longitude": number
    },
    "timeZoneId": "Europe/Warsaw",
    "continentKey": "EU",
    "countryCode": "PL",
    "countryNumericCode": 616,
    "stateProvinceCode": "14",
    "city": "Warsaw",
    "postalCode": "00-633",
    "organization": "Pwc Polska Sp. Z O.o.",
    "naicsCode": "517311"
    }
    +

    Firstly, context.user.location.geographicPoint contains latitude and longitude that can be perfect for context.services.catalog.findClosestItems() call.

    +

    Secondly, if you target B2B customers and get organisation details (the example above is real - it returned all those details when I checked it from the PwC Poland office), it can help you get precious information about your known and anonymous visitors! However, a (big) grain of salt is needed - the NAICS Code (2017 NAICS Definition) returned for me Wired Telecommunications Carriers, which looks like code for Internet Services Provider, not PwC. For B2C, the organisation field will return the Internet Service Provider name in most cases.

    +

    user.currentCart

    +

    context.user.currentCart is a single object with the same structure as each of the orders stored in context.user.orderHistory. But because it is still a cart, not an order, most fields will be null/0.

    +
    Structure of the context.user.currentCart object
    {
    "id": null,
    "created": number, // epoch
    "updated": number, // epoch
    "purchaseDate": null,
    "visitAgeAtPurchase": 0,
    "totalValue": 0,
    "totalValueCurrency": null,
    "status": "Open",
    "metadata": null,
    "lineItems": [
    {
    "quantity": number,
    "price": number,
    "itemId": string,
    "attributes": {}
    },
    ],
    "attributes": {}
    }
    +

    The fun use case here is checking when the user updated the cart and, if enough time has passed, leveraging the lineItems to deploy an abandoned basket Web Campaign.

    +

    user.segmentMembership

    +

    context.user.segmentMembership is an array with segments the user is a member of. With a good segmentation naming convention, the segmentName and joined can capture valuable additional context for the user (f.e. how many days ago he joined the Gold Tier segment or became an at-risk customer).

    +
    Structure of the context.user.segmentMembership array
    [
    {
    "segmentId": string,
    "segmentName": string,
    "joined": number, // epoch
    "createIfMissing": boolean,
    "removal": boolean,
    "userId": string,
    "customerId": string,
    "customerType": "User"
    }
    ]
    +

    accountId & datasetId

    +

    accountId and datasetId are string properties that contain information about the Marketing Cloud Personalization account and dataset that generated the event. It is only handy if you want environment-aware debug log visibility logic.

    +

    configuration

    +

    The configuration object property contains information about the campaign properties (fields you expect the marketer to fill in when configuring the campaign) in the experience for a given user. Not really useful, as in the serverside code, you can access the same information using the this keyword (f.e. this.campaignPropertyName).

    + + \ No newline at end of file diff --git a/docs/interaction-studio/mcp-serverside-code-properties/index.html b/docs/interaction-studio/mcp-serverside-code-properties/index.html index 27b9a30db..b7a6f67bd 100644 --- a/docs/interaction-studio/mcp-serverside-code-properties/index.html +++ b/docs/interaction-studio/mcp-serverside-code-properties/index.html @@ -1,22 +1,213 @@ - + - -MCP Serverside Code Properties | Mateusz Dąbrowski + +MCP Serverside Code Properties | Mateusz Dąbrowski - - - + + + -
    -

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    Once you learn the very basics of Serverside Code in Marketing Cloud Personalization (Interaction Studio), it is time to start writing code. The easiest way is, to begin with creating the campaign creation UI for the marketer - defining all the inputs they will need to fill in to drive the experience. It will be our focus in this article.

    MCP Serverside Code offers five basic property data types: Boolean, String, Number, Color and DateTime. Those, their combinations into complex properties and modifications through decorators enable you to build nearly anything you need for your campaign configuration screen.

    Let's dive into how you can make the most of those features.

    Basic properties

    Basic properties are the base building blocks of your campaign configuration. They are all you need to make a perfect campaign template, and mastering them will be essential to doing more complex UIs with complex properties and decorators.

    Boolean

    The boolean property lets you capture a true or false flag by creating a checkbox input:

    Create simple checkbox
    isTextLeftToRight: boolean;
    // Input: Editable unchecked checkbox
    // Output: true or false

    The boolean property is unchecked by default (returns false), but you can change it by passing a true value in the code:

    Checkbox checked by default
    isTextLeftToRight: boolean = true;
    // Input: Editable checked checkbox
    // Output: true or false

    Boolean fields are crucial for template development as they are perfect for building logic, for example, with the @shownIf decorator.

    String

    String property lets you capture a text input:

    Create empty text input field
    content: string;
    // Input: Empty text input
    // Output: "Provided text"

    However, there is much more to string property than just that.

    › Array String

    You may want to capture more than one string. Easy, you can do it with two characters:

    Capture multiple strings
    hashtags: string[];
    // Input: Empty text input with an option for converting entered text into one of the values
    // Output: ["Array", "of", "Strings"]

    By adding [] after the type definition, we convert the field to an array of strings. During configuration, you can provide multiple values that, in the payload, will be returned as an array. It doesn't accept duplicate values.

    › Default String

    To simplify the work for your marketers or to provide recommended examples of expected data, you can easily add a default value to your string by delivering it as a string after the equal sign:

    Add default content
    content: string = 'This is default content';
    // Input: Editable prefilled text input
    // Output: "Provided text"

    It can be freely edited during configuration but will be passed as-is to the payload if no changes are made.

    You Should Know

    You can provide default values also for string arrays:

    Default values for array string
    hashtags: string[] = ['interaction-studio', 'marketing-cloud-personalization'];
    // Input: Editable prefilled text input with two deletable values and space to write additional ones
    // Output: ["Array", "of", "Strings"]

    › Select String

    You can go one step further and lock the string property to only a set of preconfigured values using the @options decorator. It is excellent when you need a particular value, for example, for a programmatic logic in other parts of your template.

    Limit possible values with select
    @options(['brandA', 'brandB', 'brandC'])
    brand: string;
    // Input: Empty text input showing dropdown with configured options on click
    // Output: "Selected text"

    With such code, the campaign configuration will display a picklist with the hardcoded values. It will output a string to the campaign payload.

    You can also provide default value for your select field:

    Provide default select value
    @options(['brandA', 'brandB', 'brandC'])
    brand: string = 'brandA';
    // Input: Editable prefilled text input showing dropdown with configured options on click
    // Output: "Selected text"
    You Should Know

    You can also create a select field without the decorator using literals:

    Literal select field
    brand: 'brandA' | 'brandB' | 'brandC';
    // Input: Empty text input showing dropdown with configured options on click
    // Output: "Selected text"

    Just as you can capture an array of text inputs, you can do the same for select strings and create a multi-picklist. However, while the preconfigured options will be visible and accessible to pick, new options - outside of what you hardcoded - can be freely added.

    Multi-picklist
    @options(['brandA', 'brandB', 'brandC'])
    brands: string[];
    // Input: Empty text field with picklist and option to create new values. Allows for multiple additions.
    // Output: ["Array", "of", "Strings"]

    You can also provide default value for your multi-select field:

    Provide default multi-select values
    @options(['brandA', 'brandB', 'brandC'])
    brands: string[] = ['brandA', 'brandB'];
    // Input: Editable prefilled text field with picklist and option to create new values. Allows for multiple additions.
    // Output: ["Array", "of", "Strings"]

    It will output an array of strings to the campaign payload.

    You Should Know

    You can also create a multi-select field without the decorator using literals:

    Literal multi-select field
    brand: ('brandA' | 'brandB' | 'brandC')[];
    // Input: Empty text field with picklist and option to create new values. Allows for multiple additions.
    // Output: ["Array", "of", "Strings"]

    › Rich Text String

    You can easily convert this simple text input into a rich text field by using a @richText decorator:

    Capture styling with a single decorator
    @richText(true)
    content: string;
    // Input: Text input that adapts to the content size and provides bold, italic, underscore and link WYSIWYG options.
    // Output: "String with <span style='font-weight:bold;'>optional</span>HTML<br/>Includes multiline"

    This decorator will change the input field to a multiline box with bold, italic, underscore and link features. The payload will return those styles in the form of HTML that can then be used directly, for example, in the Handlebars tab of Web Campaign.

    You Should Know

    While the rich text options are minimal, you can write some other HTML (for example, <span> with style attribute) directly in the box, which will be passed to the output correctly. It will even display as a formatted text after you revisit the configuration.

    Number

    Number property lets you capture integer (3) and decimal (3.14) values:

    Create empty numeric input
    recommendationsCount: number;
    // Input: Empty text (sic!) input
    // Output: 3.14

    Keep in mind that non-numeric values might break the campaign without any error visible in the configuration screen. You can either display a warning using @shownIf decorator and a string field or create sanitization logic in the run block.

    You Should Know

    You can use @unit decorator to provide a unit description next to the input. It has no impact on the outputted value but gives marketer information about the expected value:

    Unit decorator on number
    @unit('ms')
    delayBeforeDisplay: number;

    › Array Number

    Just as with strings, you can capture multiple numeric values by adding []:

    Capture multiple numbers
    productIds: number[];
    // Input: A plus icon that adds new text inputs with delete buttons
    // Output: [3.14, 3, 5]

    It will output an array of numbers to the campaign payload.

    › Default Number

    Again, just as with strings, you can provide an editable default value:

    Default numeric value
    recommendationsCount: number = 6;
    // Input: Editable prefilled text input
    // Output: 6

    The same can be done for Array Numbers:

    Default numeric array value
    productIds: number[] = [123, 456, 789];
    // Input: Editable and deletable prefilled text inputs and a plus icon that can add more
    // Output: [123, 456, 32]

    › Select Number

    As with strings, you can create a numeric picklist:

    Numeric picklist
    recommendationsCount: 1 | 3 | 6 | 9;
    // Input: Empty text input showing dropdown with configured options on click
    // Output: 1

    You can also pass a default value:

    Numeric picklist with default value
    recommendationsCount: 1 | 3 | 6 | 9 = 6;
    // Input: Editable prefilled text input showing dropdown with configured options on click
    // Output: 6

    You can also create a numeric multi-picklist:

    Numeric multi-picklist
    orderOfSections: (1 | 2 | 3 | 4 | 5)[];
    // Input: Empty text field with picklist. Allows for multiple additions.
    // Output: [1, 3, 4, 2, 5]

    Different from strings multi-select, with a numeric multi-picklist, the marketer won't be able to add new options outside of what you preconfigured. Yay!

    However, there are three caveats to keep in mind:

    1. You cannot have 0 as one of the options. The picklist will crash.
    2. You cannot use @options to create the picklist. It will be ignored.
    3. The single-select picklist will always cut the visibility of the last digit in the longest option after selecting it.

    Color

    Color property lets you create a color picker with a single line of code:

    Create color picker
    backgroundColor: Color;
    // Input: An input pseudo-prefilled with #FFFFFF and a color box that, on click, opens the color selection interface
    // Output: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    //}

    You will be able to select the color by dragging the selector over a colour palette or by providing hex/rgba/hsl values. The property will output to payload a color object with both hex and rgba values.

    You Should Know

    While the property will look like it is prefilled with white color, it will output 'null' until you pick a color in the interface. If you want the white to be a working default option, you must configure it explicitly.

    › Default Color

    You can provide a default color, but it will be more complex. You cannot just give a single hex value; you need to replicate the whole output object:

    backgroundColor: Color = {
    "hex": "#da4e55",
    "r": 218,
    "g": 78,
    "b": 85,
    "a": 1
    };
    // Input: An input truly prefilled with #FFFFFF and a color box that, on click, opens the color selection interface
    // Output: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    //}

    Datetime

    Datetime property provides a clean-looking calendar widget that lets the marketer easily pick up a date.

    Create datetime picker
    promotionDate: DateTime;
    // Input: Empty input with calendar icon that, on click, opens full calendar for date selection
    // Output: {
    // "dateTime": [
    // "2023-10-01T16:00:00.000Z"
    // ]
    //}

    There are two payload-related things to consider:

    1. The DateTime property always outputs an object with a single dateTime property assigned to an array of strings.
    2. The date-times are returned as ISO 8601 strings (2023-10-01T16:00:00.000Z).

    › Datetime Range

    While you cannot create a multi-select datetime field, you can use the @range decorator to select two dates within a nice UI.

    Create range datetime picker
    @range(true)
    promotionDate: DateTime;
    // Input: Empty input with calendar icon that on click opens full calendar for two dates selection with range indicator
    // Output: {
    // "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ]
    //}

    The output will return both selected dates in the dateTime array of strings.


    Readonly property

    Apart from basic string property there is also a very similar readonly string property:

    Static readonly property
    readonly templateVersion = "Version 1.1"
    // Input: No input, just a readonly text written in the form
    // Output: 'Version 1.1'

    As you can see, the key difference is the readonly prefix before defining the property. It also uses the default string approach to assign the value.

    However, readonly property has one superpower. You can assign an arrow function to it (as long as it will return a string) and use values from other properties to transform them:

    Dynamic readonly property
    header: string = 'DEFault heaDER';
    readonly upperCaseHeader = () => this?.header.toUpperCase || '';
    // Input: No input, just a readonly text updating real-time based on header input
    // Output: 'DEFAULT HEADER'
    readonly titleCaseHeader = () => {
    return this?.header
    .toLowerCase()
    .split(' ')
    .filter(word => word !== '')
    .map(word => word.replace(word[0], word[0].toUpperCase()))
    .join(' ')
    || '';
    }
    // Input: No input, just a readonly text updating real-time based on header input
    // Output: 'Default Header'

    With the dynamic readonly property, you can transform string inputs, concatenate multiple inputs into one field or even create a logic based on non-string inputs (as long as the output is a string).

    You Should Know

    You can do the same things later in the run() block. It will be even more powerful there, as you can use the context object. However, you must manually add those calculated values to the return statement to see it in the payload.

    For simple use cases, the readonly property will be more straightforward and provide a nifty real-time preview of the calculated value for the marketer.


    Complex property

    The input configuration fun starts when you combine basic properties into complex ones. The method is straightforward. Outside the main class that implements CampaignTemplateComponent, create a new class export that contains all the basic inputs you need:

    Define complex property
    export class TimeframedColorPicker {
    @range(true)
    timeframe: DateTime;

    color: Color;
    }

    With complex property defined, you can leverage it in the main class the same way as you do with basic properties:

    Use complex property
    timeframedColor: TimeframedColorPicker;
    // Input: Set of basic properties - datetime range and color pickers, in this case
    // Output: {
    // timeframedColor: {
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    // }
    //}

    What are the benefits of this approach?

    1. You can define your complex property class once and then use it multiple times in your form.
    2. You can control the structure of the Serverside payload.

    A complex property creates a new nested object assigned to an input property. Let's look at the difference:

    Payload using basic properties
    @range(true)
    timeframe: DateTime;

    color: Color;
    // Input: Two basic properties - datetime range and color pickers, in this case
    // Output: {
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    //}
    Payload using complex property
    timeframedColor: TimeframedColorPicker;
    // Input: Set of basic properties - datetime range and color pickers in this case
    // Output: {
    // timeframedColor: {
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    // }
    //}

    As you can see, data from basic inputs is assigned as properties to the complex property. This can help with payload readability and might be crucial when adapting your payload to specific requirements (for example, schema expected by a React website or 3rd party system).

    1. You can nest complex properties

    Just as you can add a complex property to a field, you can also create a complex property using complex properties. While it can again give you all the benefits mentioned here, be careful not to go overboard. Deep nesting is more challenging to understand and use. There is no perfect rule, but check out Simple/Complex recommendations in Zen of SFMC.

    1. You can leverage it to build an Array of complex properties!

    This is the real game changer - out of the basic properties, only Strings and Numbers can be used as arrays. But using a complex one, you can also leverage Boolean, Color and Datetime. The approach is the same as previously - just add []:

    Array of complex properties
    timeframedColor: TimeframedColorPicker[];
    // Input: A plus icon that adds new sets of basic properties with delete buttons
    // Output: {
    // timeframedColor: [{
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    // }]
    //}

    It allows you to capture multiple complex configurations (for example, multiple recommendations or - as in the example above - various colors that can change in the campaign based on the current date).

    You Should Know

    There is a bug with the removal UI for arrays of complex properties.

    Let's say you have multiple properties configured in an array and want to remove one. If you click the removal button, regardless of which element you did it, the UI will remove the bottom one. However, the correct one was removed in the backend, which you can check in the Payload Preview. Save, reenter the configuration screen or refresh, and you will see the correct configuration.

    Complex default values

    With complex properties, you can provide default values in two ways:

    1. You can provide default values within the defining class directly on basic properties.
    Define complex property with default values
    export class RecommendationsConfig {
    recommendationsHeader: string = 'Chosen for You';
    recommendationsDisplayed: number = 6;
    }

    This approach will work for complex property arrays but not single complex properties.

    1. You can provide a default value in the main class implementing the CampaignTemplateComponent.
    Use complex property with default value
    recsConfig: RecommendationsConfig = {
    "recommendationsHeader": "Chosen for You",
    "recommendationsDisplayed": 6
    };

    This approach will work for single complex property and - if you provide the default value(s) in the array - also for arrays for complex properties.

    Use an array of complex properties with default values
    recsConfig: RecommendationsConfig = [{
    "recommendationsHeader": "Chosen for You",
    "recommendationsDisplayed": 6
    }, {
    "recommendationsHeader": "Bestsellers",
    "recommendationsDisplayed": 3
    }];

    As you can see, both approaches work for arrays of complex properties but result in a different outcome. The first approach provides default values to all elements of a complex property array you will create. The second approach prefills the array with the provided default elements. You can use both simultaneously to have a few array elements prefilled and provide default values for all new elements created on top of it.

    Complex picklist

    Similar to how you can create a selection for strings and numbers, you can also build picklists for complex properties. And I don't mean using the selects within the complex property (which is also possible), but simplifying your complex property to a single straightforward picklist.

    Using the previous complex property example:

    Complex property with a hidden label property
    export class RecommendationsConfig {
    recommendationsHeader: string;
    recommendationsDisplayed: number;
    @hidden(true)
    label: string;
    }

    Instead of requiring the user to fill in those values and giving them a free hand at that, you can instead provide preconfigured options with user-friendly labels using the @options decorator:

    Change complex property to a single picklist with @options decorator
    @options([
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },
    { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },
    ])
    recsConfig: RecommendationsConfig;
    // Input: Single picklist showing only the label values
    // Output: {
    // "recommendationsHeader": "Bestsellers",
    // "recommendationsDisplayed": 12
    // "label": "Bestsellers Home Page"
    //}

    The campaign UI will display only a single picklist using the label values. At the same time, you can provide dozens of appropriately configured properties to the campaign payload in the backend.

    You Should Know

    You can leverage complex picklist and default values at the same time. Just pass one of the @options decorator objects.

    Complex property picklist with default value
    @options([
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },
    { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },
    ])
    recsConfig: RecommendationsConfig = {
    recommendationsHeader: "Chosen For You",
    recommendationsDisplayed: 6,
    label: "Chosen for You Global"
    };

    Complex tabular view

    Complex properties can take up a lot of space in your campaign configuration screen. Sometimes, you can save some space using the @tabular decorator.

    Example complex property with two numeric inputs
    export class PriceRange {
    @title('Price starts at')
    lowerPriceBoundary: number;
    @title('Price ends at')
    upperPriceBoundary: number;
    }

    The complex property above will take 5 lines in the campaign configuration pane - complex property title and two input label + title sets. We can change it to 3 lines with the @tabular decorator:

    Tabular decorator on a single complex property
    @tabular()
    priceRange: PriceRange;
    // Input: Two inputs are provided side by side instead of one below the other
    // Output: {
    // "lowerPriceBoundary": 10,
    // "upperPriceBoundary": 20
    //}
    You Should Know

    You can also use that decorator for arrays of complex properties, but you will see that the input labels are now visible only on the first element of the array for an even more compact view. If it doesn't suit your needs, you can pass an argument to the decorator to change that behaviour: @tabular({headersPerRow: true}).


    Decorators

    Decorators are a TypeScript feature that can change or extend the behaviour of properties in the MC Personalization's Serverside Code. You have already seen some of them:

    But there is so much more available:

    @title & @subtitle

    When you add a property, its name will be used as a label for the input - in a smart way, with space being added before each uppercase (but not a digit):

    Examples of default conversion from property name to label
    header: string;             // Label: Header
    productDescription: string; // Label: Product Description
    listElement3: string; // Label: List Element3

    That's neat, but sometimes you might want to be more descriptive - without changing the actual property passed in the payload. This is where the @title decorator comes in. Adding it above a property and passing a string can change the label to anything you want.

    Examples of default conversion from property name to label
    @title('Recommendations Box Header')
    header: string; // Label: Recommendations Box Header
    You Should Know

    You can also pass a space into the @title decorator to remove the input label altogether:

    Using space to hide the label
    @title(' ')
    header: string; // No label

    It can be helpful in some cases, like complex objects with their own label and labels of all properties used to create them, or cases where you want to use @markdown decorator instead.

    On the other hand, adding a @subtitle decorator above a property will show the provided text in a smaller font right below the input. It's a great tool to give more context or example data to aid the person configuring the campaign.

    Example use of @subheader decorator for added context
    @title('Recommendations Box Header')
    @subtitle('Use Title Case and stay below 40 characters')
    header: string;

    @markdown

    When @title and @subtitle are not enough for the context you want to provide, you can use the @markdown decorator to go wild with text, styling and even links.

    Notice the backticks used to open and close markdown content in this decorator
    @markdown(`
    ---
    #### Conditional Configuration

    **Use only on campaigns targeted to small audiences**
    `)
    @title('Use Conditional Configuration?')
    isConditionalConfigurationUsed: boolean = false;
    You Should Know

    For @markdown to work, you need to add the content without any indentation:

    @markdown decorator works only with unindented markdown
        @markdown(`
    ---
    #### Conditional Configuration

    **Use only on campaigns targeted to small audiences**
    `)
    @title('Use Conditional Configuration?')
    isConditionalConfigurationUsed: boolean = false;

    @header & @headerSubtitle

    There is also a pair of @header and @subheader decorators that are very similar to @title and @subtitle with one key difference - they are not attaching to a property. That's right, you can use them anywhere to add context to whole sections of your campaign configuration form.

    Example use of @subheader decorator for added context
    @header('Recommendations Box Header')
    @headerSubtitle('Use Title Case and stay below 40 characters')

    The @header will be in the same font size as the input labels, and @headerSubtitle will match @subtitle style. Oh, and passing a space - @header(' ') - will add a bit of whitespace. Perfect for those of us with OCD who can't stand that uneven spacing between inputs.

    @hidden & @shownIf

    @hidden & @shownIf are some of the most important decorators, as they allow you to control the visibility of the inputs. Big if you want to provide a nice and clean campaign configuration UI that won't overwhelm the marketer.

    There are two ways to use them.

    First, with a basic true boolean argument, it makes sense only for @hidden. It is perfect for data you will calculate in the run() block or don't want to show to the marketer.

    Example use of simple boolean @hidden decorator
    @hidden(true)
    templateVersion: string = "Version 1.1";

    It gets much more interesting with the second way to use those decorators - with a function that returns a boolean as an argument. With this, you can build conditional logic based on other inputs:

    Example use of function-based @shownIf decorator
    bannerType: 'Manual' | 'Promotion' | 'Einstein';

    @shownIf(this, (self) => self.bannerType === 'Manual')
    imageURL: string;
    You Should Know

    Technically, in both scenarios, you can use @hidden and @shownIf interchangeably after appropriately flipping the boolean. However, I find using @hidden only with a true boolean argument and @shownIf with a function argument easier to grasp when reading the code.

    @buttonGroup

    @buttonGroup is a simple decorator that can change a single-select picklist into a set of buttons with one line:

    Example use of @buttonGroup decorator
    @buttonGroup(true)
    bannerType: 'Manual' | 'Promotion' | 'Einstein';

    It's nice if you have a small pool of options with short names.

    @optional

    The @optional decorator was an excellent tool for setting required and non-required inputs. Was. It no longer works. Whether you add it to the code or not, nothing will change in the UI or on saving. And I doubt it will start working, as bringing the functionality back would break all templates created with it not working in mind. To sum up, there is no way to enforce filling an input.

    - - +

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    +

    Once you learn the very basics of Serverside Code in Marketing Cloud Personalization (Interaction Studio), it is time to start writing code. The easiest way is, to begin with creating the campaign creation UI for the marketer - defining all the inputs they will need to fill in to drive the experience. It will be our focus in this article.

    +

    MCP Serverside Code offers five basic property data types: Boolean, String, Number, Color and DateTime. Those, their combinations into complex properties and modifications through decorators enable you to build nearly anything you need for your campaign configuration screen.

    +

    Let's dive into how you can make the most of those features.

    +

    Basic properties

    +

    Basic properties are the base building blocks of your campaign configuration. They are all you need to make a perfect campaign template, and mastering them will be essential to doing more complex UIs with complex properties and decorators.

    +

    Boolean

    +

    The boolean property lets you capture a true or false flag by creating a checkbox input:

    +
    Create simple checkbox
    isTextLeftToRight: boolean;
    // Input: Editable unchecked checkbox
    // Output: true or false
    +

    The boolean property is unchecked by default (returns false), but you can change it by passing a true value in the code:

    +
    Checkbox checked by default
    isTextLeftToRight: boolean = true;
    // Input: Editable checked checkbox
    // Output: true or false
    +

    Boolean fields are crucial for template development as they are perfect for building logic, for example, with the @shownIf decorator.

    +

    String

    +

    String property lets you capture a text input:

    +
    Create empty text input field
    content: string;
    // Input: Empty text input
    // Output: "Provided text"
    +

    However, there is much more to string property than just that.

    +

    › Array String

    +

    You may want to capture more than one string. Easy, you can do it with two characters:

    +
    Capture multiple strings
    hashtags: string[];
    // Input: Empty text input with an option for converting entered text into one of the values
    // Output: ["Array", "of", "Strings"]
    +

    By adding [] after the type definition, we convert the field to an array of strings. During configuration, you can provide multiple values that, in the payload, will be returned as an array. It doesn't accept duplicate values.

    +

    › Default String

    +

    To simplify the work for your marketers or to provide recommended examples of expected data, you can easily add a default value to your string by delivering it as a string after the equal sign:

    +
    Add default content
    content: string = 'This is default content';
    // Input: Editable prefilled text input
    // Output: "Provided text"
    +

    It can be freely edited during configuration but will be passed as-is to the payload if no changes are made.

    +
    You Should Know

    You can provide default values also for string arrays:

    Default values for array string
    hashtags: string[] = ['interaction-studio', 'marketing-cloud-personalization'];
    // Input: Editable prefilled text input with two deletable values and space to write additional ones
    // Output: ["Array", "of", "Strings"]
    +

    › Select String

    +

    You can go one step further and lock the string property to only a set of preconfigured values using the @options decorator. It is excellent when you need a particular value, for example, for a programmatic logic in other parts of your template.

    +
    Limit possible values with select
    @options(['brandA', 'brandB', 'brandC'])
    brand: string;
    // Input: Empty text input showing dropdown with configured options on click
    // Output: "Selected text"
    +

    With such code, the campaign configuration will display a picklist with the hardcoded values. It will output a string to the campaign payload.

    +

    You can also provide default value for your select field:

    +
    Provide default select value
    @options(['brandA', 'brandB', 'brandC'])
    brand: string = 'brandA';
    // Input: Editable prefilled text input showing dropdown with configured options on click
    // Output: "Selected text"
    +
    You Should Know

    You can also create a select field without the decorator using literals:

    Literal select field
    brand: 'brandA' | 'brandB' | 'brandC';
    // Input: Empty text input showing dropdown with configured options on click
    // Output: "Selected text"
    +

    Just as you can capture an array of text inputs, you can do the same for select strings and create a multi-picklist. However, while the preconfigured options will be visible and accessible to pick, new options - outside of what you hardcoded - can be freely added.

    +
    Multi-picklist
    @options(['brandA', 'brandB', 'brandC'])
    brands: string[];
    // Input: Empty text field with picklist and option to create new values. Allows for multiple additions.
    // Output: ["Array", "of", "Strings"]
    +

    You can also provide default value for your multi-select field:

    +
    Provide default multi-select values
    @options(['brandA', 'brandB', 'brandC'])
    brands: string[] = ['brandA', 'brandB'];
    // Input: Editable prefilled text field with picklist and option to create new values. Allows for multiple additions.
    // Output: ["Array", "of", "Strings"]
    +

    It will output an array of strings to the campaign payload.

    +
    You Should Know

    You can also create a multi-select field without the decorator using literals:

    Literal multi-select field
    brand: ('brandA' | 'brandB' | 'brandC')[];
    // Input: Empty text field with picklist and option to create new values. Allows for multiple additions.
    // Output: ["Array", "of", "Strings"]
    +

    › Rich Text String

    +

    You can easily convert this simple text input into a rich text field by using a @richText decorator:

    +
    Capture styling with a single decorator
    @richText(true)
    content: string;
    // Input: Text input that adapts to the content size and provides bold, italic, underscore and link WYSIWYG options.
    // Output: "String with <span style='font-weight:bold;'>optional</span>HTML<br/>Includes multiline"
    +

    This decorator will change the input field to a multiline box with bold, italic, underscore and link features. The payload will return those styles in the form of HTML that can then be used directly, for example, in the Handlebars tab of Web Campaign.

    +
    You Should Know

    While the rich text options are minimal, you can write some other HTML (for example, <span> with style attribute) directly in the box, which will be passed to the output correctly. It will even display as a formatted text after you revisit the configuration.

    +

    Number

    +

    Number property lets you capture integer (3) and decimal (3.14) values:

    +
    Create empty numeric input
    recommendationsCount: number;
    // Input: Empty text (sic!) input
    // Output: 3.14
    +

    Keep in mind that non-numeric values might break the campaign without any error visible in the configuration screen. You can either display a warning using @shownIf decorator and a string field or create sanitization logic in the run block.

    +
    You Should Know

    You can use @unit decorator to provide a unit description next to the input. It has no impact on the outputted value but gives marketer information about the expected value:

    Unit decorator on number
    @unit('ms')
    delayBeforeDisplay: number;
    +

    › Array Number

    +

    Just as with strings, you can capture multiple numeric values by adding []:

    +
    Capture multiple numbers
    productIds: number[];
    // Input: A plus icon that adds new text inputs with delete buttons
    // Output: [3.14, 3, 5]
    +

    It will output an array of numbers to the campaign payload.

    +

    › Default Number

    +

    Again, just as with strings, you can provide an editable default value:

    +
    Default numeric value
    recommendationsCount: number = 6;
    // Input: Editable prefilled text input
    // Output: 6
    +

    The same can be done for Array Numbers:

    +
    Default numeric array value
    productIds: number[] = [123, 456, 789];
    // Input: Editable and deletable prefilled text inputs and a plus icon that can add more
    // Output: [123, 456, 32]

    +

    › Select Number

    +

    As with strings, you can create a numeric picklist:

    +
    Numeric picklist
    recommendationsCount: 1 | 3 | 6 | 9;
    // Input: Empty text input showing dropdown with configured options on click
    // Output: 1
    +

    You can also pass a default value:

    +
    Numeric picklist with default value
    recommendationsCount: 1 | 3 | 6 | 9 = 6;
    // Input: Editable prefilled text input showing dropdown with configured options on click
    // Output: 6
    +

    You can also create a numeric multi-picklist:

    +
    Numeric multi-picklist
    orderOfSections: (1 | 2 | 3 | 4 | 5)[];
    // Input: Empty text field with picklist. Allows for multiple additions.
    // Output: [1, 3, 4, 2, 5]
    +

    Different from strings multi-select, with a numeric multi-picklist, the marketer won't be able to add new options outside of what you preconfigured. Yay!

    +

    However, there are three caveats to keep in mind:

    +
      +
    1. You cannot have 0 as one of the options. The picklist will crash.
    2. +
    3. You cannot use @options to create the picklist. It will be ignored.
    4. +
    5. The single-select picklist will always cut the visibility of the last digit in the longest option after selecting it.
    6. +
    +

    Color

    +

    Color property lets you create a color picker with a single line of code:

    +
    Create color picker
    backgroundColor: Color;
    // Input: An input pseudo-prefilled with #FFFFFF and a color box that, on click, opens the color selection interface
    // Output: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    //}
    +

    You will be able to select the color by dragging the selector over a colour palette or by providing hex/rgba/hsl values. The property will output to payload a color object with both hex and rgba values.

    +
    You Should Know

    While the property will look like it is prefilled with white color, it will output 'null' until you pick a color in the interface. If you want the white to be a working default option, you must configure it explicitly.

    +

    › Default Color

    +

    You can provide a default color, but it will be more complex. You cannot just give a single hex value; you need to replicate the whole output object:

    +
    backgroundColor: Color = {
    "hex": "#da4e55",
    "r": 218,
    "g": 78,
    "b": 85,
    "a": 1
    };
    // Input: An input truly prefilled with #FFFFFF and a color box that, on click, opens the color selection interface
    // Output: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    //}
    +

    Datetime

    +

    Datetime property provides a clean-looking calendar widget that lets the marketer easily pick up a date.

    +
    Create datetime picker
    promotionDate: DateTime;
    // Input: Empty input with calendar icon that, on click, opens full calendar for date selection
    // Output: {
    // "dateTime": [
    // "2023-10-01T16:00:00.000Z"
    // ]
    //}
    +

    There are two payload-related things to consider:

    +
      +
    1. The DateTime property always outputs an object with a single dateTime property assigned to an array of strings.
    2. +
    3. The date-times are returned as ISO 8601 strings (2023-10-01T16:00:00.000Z).
    4. +
    +

    › Datetime Range

    +

    While you cannot create a multi-select datetime field, you can use the @range decorator to select two dates within a nice UI.

    +
    Create range datetime picker
    @range(true)
    promotionDate: DateTime;
    // Input: Empty input with calendar icon that on click opens full calendar for two dates selection with range indicator
    // Output: {
    // "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ]
    //}
    +

    The output will return both selected dates in the dateTime array of strings.

    +
    +

    Readonly property

    +

    Apart from basic string property there is also a very similar readonly string property:

    +
    Static readonly property
    readonly templateVersion = "Version 1.1"
    // Input: No input, just a readonly text written in the form
    // Output: 'Version 1.1'
    +

    As you can see, the key difference is the readonly prefix before defining the property. It also uses the default string approach to assign the value.

    +

    However, readonly property has one superpower. You can assign an arrow function to it (as long as it will return a string) and use values from other properties to transform them:

    +
    Dynamic readonly property
    header: string = 'DEFault heaDER';
    readonly upperCaseHeader = () => this?.header.toUpperCase || '';
    // Input: No input, just a readonly text updating real-time based on header input
    // Output: 'DEFAULT HEADER'
    readonly titleCaseHeader = () => {
    return this?.header
    .toLowerCase()
    .split(' ')
    .filter(word => word !== '')
    .map(word => word.replace(word[0], word[0].toUpperCase()))
    .join(' ')
    || '';
    }
    // Input: No input, just a readonly text updating real-time based on header input
    // Output: 'Default Header'
    +

    With the dynamic readonly property, you can transform string inputs, concatenate multiple inputs into one field or even create a logic based on non-string inputs (as long as the output is a string).

    +
    You Should Know

    You can do the same things later in the run() block. It will be even more powerful there, as you can use the context object. However, you must manually add those calculated values to the return statement to see it in the payload.

    For simple use cases, the readonly property will be more straightforward and provide a nifty real-time preview of the calculated value for the marketer.

    +
    +

    Complex property

    +

    The input configuration fun starts when you combine basic properties into complex ones. The method is straightforward. Outside the main class that implements CampaignTemplateComponent, create a new class export that contains all the basic inputs you need:

    +
    Define complex property
    export class TimeframedColorPicker {
    @range(true)
    timeframe: DateTime;

    color: Color;
    }
    +

    With complex property defined, you can leverage it in the main class the same way as you do with basic properties:

    +
    Use complex property
    timeframedColor: TimeframedColorPicker;
    // Input: Set of basic properties - datetime range and color pickers, in this case
    // Output: {
    // timeframedColor: {
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    // }
    //}
    +

    What are the benefits of this approach?

    +
      +
    1. You can define your complex property class once and then use it multiple times in your form.
    2. +
    3. You can control the structure of the Serverside payload.
    4. +
    +

    A complex property creates a new nested object assigned to an input property. Let's look at the difference:

    +
    Payload using basic properties
    @range(true)
    timeframe: DateTime;

    color: Color;
    // Input: Two basic properties - datetime range and color pickers, in this case
    // Output: {
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    //}
    +
    Payload using complex property
    timeframedColor: TimeframedColorPicker;
    // Input: Set of basic properties - datetime range and color pickers in this case
    // Output: {
    // timeframedColor: {
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    // }
    //}
    +

    As you can see, data from basic inputs is assigned as properties to the complex property. This can help with payload readability and might be crucial when adapting your payload to specific requirements (for example, schema expected by a React website or 3rd party system).

    +
      +
    1. You can nest complex properties
    2. +
    +

    Just as you can add a complex property to a field, you can also create a complex property using complex properties. While it can again give you all the benefits mentioned here, be careful not to go overboard. Deep nesting is more challenging to understand and use. There is no perfect rule, but check out Simple/Complex recommendations in Zen of SFMC.

    +
      +
    1. You can leverage it to build an Array of complex properties!
    2. +
    +

    This is the real game changer - out of the basic properties, only Strings and Numbers can be used as arrays. But using a complex one, you can also leverage Boolean, Color and Datetime. The approach is the same as previously - just add []:

    +
    Array of complex properties
    timeframedColor: TimeframedColorPicker[];
    // Input: A plus icon that adds new sets of basic properties with delete buttons
    // Output: {
    // timeframedColor: [{
    // timeframe: "dateTime": [
    // "2023-10-01T16:00:00.000Z",
    // "2023-10-03T16:00:00.000Z"
    // ],
    // color: {
    // "hex": "#da4e55",
    // "r": 218,
    // "g": 78,
    // "b": 85,
    // "a": 1
    // }
    // }]
    //}
    +

    It allows you to capture multiple complex configurations (for example, multiple recommendations or - as in the example above - various colors that can change in the campaign based on the current date).

    +
    You Should Know

    There is a bug with the removal UI for arrays of complex properties.

    Let's say you have multiple properties configured in an array and want to remove one. If you click the removal button, regardless of which element you did it, the UI will remove the bottom one. However, the correct one was removed in the backend, which you can check in the Payload Preview. Save, reenter the configuration screen or refresh, and you will see the correct configuration.

    +

    Complex default values

    +

    With complex properties, you can provide default values in two ways:

    +
      +
    1. You can provide default values within the defining class directly on basic properties.
    2. +
    +
    Define complex property with default values
    export class RecommendationsConfig {
    recommendationsHeader: string = 'Chosen for You';
    recommendationsDisplayed: number = 6;
    }
    +

    This approach will work for complex property arrays but not single complex properties.

    +
      +
    1. You can provide a default value in the main class implementing the CampaignTemplateComponent.
    2. +
    +
    Use complex property with default value
    recsConfig: RecommendationsConfig = {
    "recommendationsHeader": "Chosen for You",
    "recommendationsDisplayed": 6
    };
    +

    This approach will work for single complex property and - if you provide the default value(s) in the array - also for arrays for complex properties.

    +
    Use an array of complex properties with default values
    recsConfig: RecommendationsConfig = [{
    "recommendationsHeader": "Chosen for You",
    "recommendationsDisplayed": 6
    }, {
    "recommendationsHeader": "Bestsellers",
    "recommendationsDisplayed": 3
    }];
    +

    As you can see, both approaches work for arrays of complex properties but result in a different outcome. The first approach provides default values to all elements of a complex property array you will create. The second approach prefills the array with the provided default elements. You can use both simultaneously to have a few array elements prefilled and provide default values for all new elements created on top of it.

    +

    Complex picklist

    +

    Similar to how you can create a selection for strings and numbers, you can also build picklists for complex properties. And I don't mean using the selects within the complex property (which is also possible), but simplifying your complex property to a single straightforward picklist.

    +

    Using the previous complex property example:

    +
    Complex property with a hidden label property
    export class RecommendationsConfig {
    recommendationsHeader: string;
    recommendationsDisplayed: number;
    @hidden(true)
    label: string;
    }
    +

    Instead of requiring the user to fill in those values and giving them a free hand at that, you can instead provide preconfigured options with user-friendly labels using the @options decorator:

    +
    Change complex property to a single picklist with @options decorator
    @options([
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },
    { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },
    ])
    recsConfig: RecommendationsConfig;
    // Input: Single picklist showing only the label values
    // Output: {
    // "recommendationsHeader": "Bestsellers",
    // "recommendationsDisplayed": 12
    // "label": "Bestsellers Home Page"
    //}
    +

    The campaign UI will display only a single picklist using the label values. At the same time, you can provide dozens of appropriately configured properties to the campaign payload in the backend.

    +
    You Should Know

    You can leverage complex picklist and default values at the same time. Just pass one of the @options decorator objects.

    Complex property picklist with default value
    @options([
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 12, label: "Bestsellers Home Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 8, label: "Bestsellers Category Page" },
    { recommendationsHeader: "Bestsellers", recommendationsDisplayed: 4, label: "Bestsellers Search Page" },
    { recommendationsHeader: "Chosen For You", recommendationsDisplayed: 6, label: "Chosen for You Global" },
    ])
    recsConfig: RecommendationsConfig = {
    recommendationsHeader: "Chosen For You",
    recommendationsDisplayed: 6,
    label: "Chosen for You Global"
    };
    +

    Complex tabular view

    +

    Complex properties can take up a lot of space in your campaign configuration screen. Sometimes, you can save some space using the @tabular decorator.

    +
    Example complex property with two numeric inputs
    export class PriceRange {
    @title('Price starts at')
    lowerPriceBoundary: number;
    @title('Price ends at')
    upperPriceBoundary: number;
    }
    +

    The complex property above will take 5 lines in the campaign configuration pane - complex property title and two input label + title sets. We can change it to 3 lines with the @tabular decorator:

    +
    Tabular decorator on a single complex property
    @tabular()
    priceRange: PriceRange;
    // Input: Two inputs are provided side by side instead of one below the other
    // Output: {
    // "lowerPriceBoundary": 10,
    // "upperPriceBoundary": 20
    //}
    +
    You Should Know

    You can also use that decorator for arrays of complex properties, but you will see that the input labels are now visible only on the first element of the array for an even more compact view. If it doesn't suit your needs, you can pass an argument to the decorator to change that behaviour: @tabular({headersPerRow: true}).

    +
    +

    Decorators

    +

    Decorators are a TypeScript feature that can change or extend the behaviour of properties in the MC Personalization's Serverside Code. You have already seen some of them:

    + +

    But there is so much more available:

    +

    @title & @subtitle

    +

    When you add a property, its name will be used as a label for the input - in a smart way, with space being added before each uppercase (but not a digit):

    +
    Examples of default conversion from property name to label
    header: string;             // Label: Header
    productDescription: string; // Label: Product Description
    listElement3: string; // Label: List Element3
    +

    That's neat, but sometimes you might want to be more descriptive - without changing the actual property passed in the payload. This is where the @title decorator comes in. Adding it above a property and passing a string can change the label to anything you want.

    +
    Examples of default conversion from property name to label
    @title('Recommendations Box Header')
    header: string; // Label: Recommendations Box Header
    +
    You Should Know

    You can also pass a space into the @title decorator to remove the input label altogether:

    Using space to hide the label
    @title(' ')
    header: string; // No label

    It can be helpful in some cases, like complex objects with their own label and labels of all properties used to create them, or cases where you want to use @markdown decorator instead.

    +

    On the other hand, adding a @subtitle decorator above a property will show the provided text in a smaller font right below the input. It's a great tool to give more context or example data to aid the person configuring the campaign.

    +
    Example use of @subheader decorator for added context
    @title('Recommendations Box Header')
    @subtitle('Use Title Case and stay below 40 characters')
    header: string;
    +

    @markdown

    +

    When @title and @subtitle are not enough for the context you want to provide, you can use the @markdown decorator to go wild with text, styling and even links.

    +
    Notice the backticks used to open and close markdown content in this decorator
    @markdown(`
    ---
    #### Conditional Configuration

    **Use only on campaigns targeted to small audiences**
    `)
    @title('Use Conditional Configuration?')
    isConditionalConfigurationUsed: boolean = false;
    +
    You Should Know

    For @markdown to work, you need to add the content without any indentation:

    @markdown decorator works only with unindented markdown
        @markdown(`
    ---
    #### Conditional Configuration

    **Use only on campaigns targeted to small audiences**
    `)
    @title('Use Conditional Configuration?')
    isConditionalConfigurationUsed: boolean = false;
    +

    @header & @headerSubtitle

    +

    There is also a pair of @header and @subheader decorators that are very similar to @title and @subtitle with one key difference - they are not attaching to a property. That's right, you can use them anywhere to add context to whole sections of your campaign configuration form.

    +
    Example use of @subheader decorator for added context
    @header('Recommendations Box Header')
    @headerSubtitle('Use Title Case and stay below 40 characters')
    +

    The @header will be in the same font size as the input labels, and @headerSubtitle will match @subtitle style. Oh, and passing a space - @header(' ') - will add a bit of whitespace. Perfect for those of us with OCD who can't stand that uneven spacing between inputs.

    +

    @hidden & @shownIf

    +

    @hidden & @shownIf are some of the most important decorators, as they allow you to control the visibility of the inputs. Big if you want to provide a nice and clean campaign configuration UI that won't overwhelm the marketer.

    +

    There are two ways to use them.

    +

    First, with a basic true boolean argument, it makes sense only for @hidden. It is perfect for data you will calculate in the run() block or don't want to show to the marketer.

    +
    Example use of simple boolean @hidden decorator
    @hidden(true)
    templateVersion: string = "Version 1.1";
    +

    It gets much more interesting with the second way to use those decorators - with a function that returns a boolean as an argument. With this, you can build conditional logic based on other inputs:

    +
    Example use of function-based @shownIf decorator
    bannerType: 'Manual' | 'Promotion' | 'Einstein';

    @shownIf(this, (self) => self.bannerType === 'Manual')
    imageURL: string;
    +
    You Should Know

    Technically, in both scenarios, you can use @hidden and @shownIf interchangeably after appropriately flipping the boolean. However, I find using @hidden only with a true boolean argument and @shownIf with a function argument easier to grasp when reading the code.

    +

    @buttonGroup

    +

    @buttonGroup is a simple decorator that can change a single-select picklist into a set of buttons with one line:

    +
    Example use of @buttonGroup decorator
    @buttonGroup(true)
    bannerType: 'Manual' | 'Promotion' | 'Einstein';
    +

    It's nice if you have a small pool of options with short names.

    +

    @optional

    +

    The @optional decorator was an excellent tool for setting required and non-required inputs. Was. It no longer works. Whether you add it to the code or not, nothing will change in the UI or on saving. And I doubt it will start working, as bringing the functionality back would break all templates created with it not working in mind. To sum up, there is no way to enforce filling an input.

    \ No newline at end of file diff --git a/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/index.html b/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/index.html index 12255ce1a..00c133461 100644 --- a/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/index.html +++ b/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/index.html @@ -1,22 +1,72 @@ - + - -MCP Catalog ETL Metadata Viewer | Mateusz Dąbrowski + +MCP Catalog ETL Metadata Viewer | Mateusz Dąbrowski - - - + + + -
    -

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    Problem with debugging Catalog data

    Marketing Cloud Personalization (Interaction Studio) can pull product, content and related catalog data from multiple sources and does it continuously. That's perfect when all works great, but debugging features are minimal once you see some data discrepancies.

    Sure, SFTP stores processed CSV Feed files, but finding the culprit takes work, especially if you push frequently with delta files.

    Knowing which exact ETL load introduced problematic attribute values is a tremendous help in finding the root cause of the issue and rectifying the data pipeline. While it is available only for custom attributes (hover over the value to see it), we can:

    1. Vote for IdeaExchange to make it perfect out-of-the-box.
    2. Build a more powerful custom solution for it in the meantime.

    Solution

    Inspired by the excellent User Metadata Serverside template created by Christopher Long available here I decided to create something similar for the Catalog Object data.

    A Serverside Template that leverages built-in Simulated Payload Preview available in Template Editor to display hidden changelog for ETL updates: attribute's current value, timeframe it was first introduced and first CSV that provided it to MCP.

    Example response
    "item": {
    "attributes": {
    "archived": {
    "value": false,
    "addedBySource": "ETL",
    "addedByFile": "product-2022-12-05_08-19-35.csv",
    "addedDate": "Dec 05 2022 07:25:30"
    },
    "brand":{
    "value":"Apple",
    "addedBySource":"Not ETL"
    }
    }
    }

    This approach leverages native features of the platform to access unsurfaced data in a techy but easily transferable format.

    Additionally, it's a great way to showcase some MCP Serverside Code approaches that can be useful for building standard campaign templates.

    Implementation Guide

    Implementation is straightforward, and you can have a working solution within a minute.

    1. Go to SFMC » Personalization
    2. On the left pane, hover over Server-Side and click on Server-Side and Triggered Templates
    3. Click New Template
    4. Provide a meaningful name (for example: "Catalog ETL Metadata Viewer")
    5. Copy-paste the code available below
    6. Save
    7. Use :)

    You don't need to Publish a template to leverage the Simulated Payload Preview. Keeping it unpublished guarantees no one will use it for a live Campaign.

    Serverside Code

    export class CatalogETLMetadataViewer implements CampaignTemplateComponent {

    @header(' ')

    @markdown(`
    ##### How to use

    In the Payload Preview pane on the right:

    1. Select catalog object in the Current Item Type
    2. Select item in the Current Item
    3. View the Details in the section below

    Optionally, you can modify the scope of returned data in the left Configuration pane.
    `)

    @title('Item attribute metadata to display:')
    @subtitle('File and Change Date are available only for the ETL Source.')
    showItemAttributeDetails: ('Value'|'Source'|'File'|'Change Date'|'Locale')[] = ['Value', 'Source', 'File', 'Change Date'];

    @markdown(`Platform displays partially incorrect data when you manually Save Item in the Catalog, learn more [here](https://mateuszdabrowski.pl/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/).`)

    @title('Item non-attribute values to display:')
    @subtitle('Only values are available - no Source/File/Change Date/Locale data is exposed by the platform.')
    showItemContextDetails: ('ID'|'Location'|'Related Catalog Objects'|'Categories'|'SKUs')[];

    run(context: CampaignComponentContext) {
    // Pulls Catalog Object type from Simulation configuration
    const itemType = context.event.itemType();
    // Pulls selected Item ID from Simulation configuration
    const itemId = JSON.parse(context.event.fields.item as string)._id.value;
    // Pulls full Item data from the Catalog
    const itemDetail = context.services.catalog.findItem(itemType, itemId);

    // Prepares the payload response according to Configuration pane
    function itemProcessor(item, config) {
    let processedItem = {
    attributes: {},
    };
    const attributes = processedItem.attributes;

    const makeEpochReadableAgain = epoch => String(new Date(epoch)).substring(4, 24);

    // Conditional non-attribute data stuffing
    if (config.itemContext?.includes('ID')) processedItem['id'] = item.id;
    if (config.itemContext?.includes('SKUs')) processedItem['skus'] = item.skus;
    if (config.itemContext?.includes('Categories')) processedItem['categories'] = item.categories;
    if (config.itemContext?.includes('Related Catalog Objects')) processedItem['relatedCatalogObjects'] = item.dimensions;
    if (config.itemContext?.includes('Locations')) processedItem['locations'] = item.locations;

    // Conditional attribute data stuffing with processing
    for (const [attribute, attributeData] of (<any>Object).entries(item.attributes)) {
    let processedAttributes = {};

    if (config.itemAttributes?.includes('Value')) processedAttributes['value'] = attributeData.value;
    if (Number.isInteger(attributeData.value) && attributeData.value > 10e10) processedAttributes['readableValue'] = makeEpochReadableAgain(attributeData.value);
    if (config.itemAttributes?.includes('Source')) processedAttributes['addedBySource'] = attributeData.metadata?.origin || 'Not ETL';
    if (config.itemAttributes?.includes('File') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedByFile'] = attributeData.metadata?.provider.substring(16);
    if (config.itemAttributes?.includes('Change Date') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedDate'] = makeEpochReadableAgain(attributeData.metadata?.lastUpdated);
    if (config.itemAttributes?.includes('Locale')) processedAttributes['locale'] = attributeData.locale;

    attributes[attribute] = processedAttributes;
    }

    return processedItem
    }

    // Outputs final payload to the Payload Preview pane
    return {
    item: itemProcessor(itemDetail, {itemAttributes: this.showItemAttributeDetails, itemContext: this.showItemContextDetails}),
    };
    }
    }

    Limitations

    While this solution can benefit MCP Catalog Object debugging, there are a few significant limitations.

    Data scope

    Unfortunately, at the moment, the platform surfaces metadata only for Catalog Items updated using ETL. Any other source (Manual update, Web or Mobile SDK) provides only current value but no information about the last change or the exact Source (apart from it not being an ETL).

    Additionally, the metadata returned for the ETL uploads provides only the file name and timestamp that first introduced the current value. There is no option to check what was the previous value.

    It is still very helpful to understand whether the MC Personalization overwrote the attribute using incorrect ETL data and which CSVs you should check to confirm the pipeline issues.

    Data quality

    Another huge caveat with the metadata is that Manual changes through the Catalog UI create many issues by silently changing attribute values and/or metadata. Example behaviours:

    1. Manual changes to field value retain metadata information of the previous value source (so values marked as coming from both ETL and Not ETL Sources could be introduced via UI).
    2. price, listPrice, margin, published, and expiration are being changed from ETL to Not ETL Source even when manual changes weren't touching those attributes.
    3. if expiration was NULL, it gets set to timestamp 100 years in the future
    4. if margin was NULL, it gets set to 0

    It is awful, but hopefully, only a few manual changes are happening in the production dataset, and this issue will be minimal. Still, it's worth remembering this when the metadata preview doesn't match data in the CSV.

    Context.event.fields.item

    While context.event.fields.item is perfect for the use case described here, don't try to use it in standard Campaigns. Unfortunately, it is filled in only in the Simulation Preview and will not be available when deployed to a website. It is a massive limitation with one dirty workaround.

    To get a similar outcome in an actual campaign, you have to:

    1. Create a string User Attribute to store the last viewed product ID.
    2. In the Sitemap, extend the Product View Page Type onActionEvent to push the current product ID to the attribute created in the previous step.
    3. Leverage context?.user?.attributes?.nameOfYourNewAttribute to get the ID and leverage it for .findItem and other purposes.

    Options

    I created the current version of the solution with an easy-to-use, straightforward interface leveraging out-of-the-box features of the platform. However, you can extend the code with an additional field accepting a list of IDs to return payloads for multiple items in a single run to facilitate faster debugging.

    - - +

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    +

    Problem with debugging Catalog data

    +

    Marketing Cloud Personalization (Interaction Studio) can pull product, content and related catalog data from multiple sources and does it continuously. That's perfect when all works great, but debugging features are minimal once you see some data discrepancies.

    +

    Sure, SFTP stores processed CSV Feed files, but finding the culprit takes work, especially if you push frequently with delta files.

    +

    Knowing which exact ETL load introduced problematic attribute values is a tremendous help in finding the root cause of the issue and rectifying the data pipeline. While it is available only for custom attributes (hover over the value to see it), we can:

    +
      +
    1. Vote for IdeaExchange to make it perfect out-of-the-box.
    2. +
    3. Build a more powerful custom solution for it in the meantime.
    4. +
    +

    Solution

    +

    Inspired by the excellent User Metadata Serverside template created by Christopher Long available here I decided to create something similar for the Catalog Object data.

    +

    A Serverside Template that leverages built-in Simulated Payload Preview available in Template Editor to display hidden changelog for ETL updates: attribute's current value, timeframe it was first introduced and first CSV that provided it to MCP.

    +
    Example response
    "item": {
    "attributes": {
    "archived": {
    "value": false,
    "addedBySource": "ETL",
    "addedByFile": "product-2022-12-05_08-19-35.csv",
    "addedDate": "Dec 05 2022 07:25:30"
    },
    "brand":{
    "value":"Apple",
    "addedBySource":"Not ETL"
    }
    }
    }
    +

    This approach leverages native features of the platform to access unsurfaced data in a techy but easily transferable format.

    +

    Additionally, it's a great way to showcase some MCP Serverside Code approaches that can be useful for building standard campaign templates.

    +

    Implementation Guide

    +

    Implementation is straightforward, and you can have a working solution within a minute.

    +
      +
    1. Go to SFMC » Personalization
    2. +
    3. On the left pane, hover over Server-Side and click on Server-Side and Triggered Templates
    4. +
    5. Click New Template
    6. +
    7. Provide a meaningful name (for example: "Catalog ETL Metadata Viewer")
    8. +
    9. Copy-paste the code available below
    10. +
    11. Save
    12. +
    13. Use :)
    14. +
    +

    You don't need to Publish a template to leverage the Simulated Payload Preview. Keeping it unpublished guarantees no one will use it for a live Campaign.

    +

    Serverside Code

    +
    export class CatalogETLMetadataViewer implements CampaignTemplateComponent {

    @header(' ')

    @markdown(`
    ##### How to use

    In the Payload Preview pane on the right:

    1. Select catalog object in the Current Item Type
    2. Select item in the Current Item
    3. View the Details in the section below

    Optionally, you can modify the scope of returned data in the left Configuration pane.
    `)

    @title('Item attribute metadata to display:')
    @subtitle('File and Change Date are available only for the ETL Source.')
    showItemAttributeDetails: ('Value'|'Source'|'File'|'Change Date'|'Locale')[] = ['Value', 'Source', 'File', 'Change Date'];

    @markdown(`Platform displays partially incorrect data when you manually Save Item in the Catalog, learn more [here](https://mateuszdabrowski.pl/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/).`)

    @title('Item non-attribute values to display:')
    @subtitle('Only values are available - no Source/File/Change Date/Locale data is exposed by the platform.')
    showItemContextDetails: ('ID'|'Location'|'Related Catalog Objects'|'Categories'|'SKUs')[];

    run(context: CampaignComponentContext) {
    // Pulls Catalog Object type from Simulation configuration
    const itemType = context.event.itemType();
    // Pulls selected Item ID from Simulation configuration
    const itemId = JSON.parse(context.event.fields.item as string)._id.value;
    // Pulls full Item data from the Catalog
    const itemDetail = context.services.catalog.findItem(itemType, itemId);

    // Prepares the payload response according to Configuration pane
    function itemProcessor(item, config) {
    let processedItem = {
    attributes: {},
    };
    const attributes = processedItem.attributes;

    const makeEpochReadableAgain = epoch => String(new Date(epoch)).substring(4, 24);

    // Conditional non-attribute data stuffing
    if (config.itemContext?.includes('ID')) processedItem['id'] = item.id;
    if (config.itemContext?.includes('SKUs')) processedItem['skus'] = item.skus;
    if (config.itemContext?.includes('Categories')) processedItem['categories'] = item.categories;
    if (config.itemContext?.includes('Related Catalog Objects')) processedItem['relatedCatalogObjects'] = item.dimensions;
    if (config.itemContext?.includes('Locations')) processedItem['locations'] = item.locations;

    // Conditional attribute data stuffing with processing
    for (const [attribute, attributeData] of (<any>Object).entries(item.attributes)) {
    let processedAttributes = {};

    if (config.itemAttributes?.includes('Value')) processedAttributes['value'] = attributeData.value;
    if (Number.isInteger(attributeData.value) && attributeData.value > 10e10) processedAttributes['readableValue'] = makeEpochReadableAgain(attributeData.value);
    if (config.itemAttributes?.includes('Source')) processedAttributes['addedBySource'] = attributeData.metadata?.origin || 'Not ETL';
    if (config.itemAttributes?.includes('File') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedByFile'] = attributeData.metadata?.provider.substring(16);
    if (config.itemAttributes?.includes('Change Date') && attributeData.metadata?.origin === 'ETL' ) processedAttributes['addedDate'] = makeEpochReadableAgain(attributeData.metadata?.lastUpdated);
    if (config.itemAttributes?.includes('Locale')) processedAttributes['locale'] = attributeData.locale;

    attributes[attribute] = processedAttributes;
    }

    return processedItem
    }

    // Outputs final payload to the Payload Preview pane
    return {
    item: itemProcessor(itemDetail, {itemAttributes: this.showItemAttributeDetails, itemContext: this.showItemContextDetails}),
    };
    }
    }
    +

    Limitations

    +

    While this solution can benefit MCP Catalog Object debugging, there are a few significant limitations.

    +

    Data scope

    +

    Unfortunately, at the moment, the platform surfaces metadata only for Catalog Items updated using ETL. Any other source (Manual update, Web or Mobile SDK) provides only current value but no information about the last change or the exact Source (apart from it not being an ETL).

    +

    Additionally, the metadata returned for the ETL uploads provides only the file name and timestamp that first introduced the current value. There is no option to check what was the previous value.

    +

    It is still very helpful to understand whether the MC Personalization overwrote the attribute using incorrect ETL data and which CSVs you should check to confirm the pipeline issues.

    +

    Data quality

    +

    Another huge caveat with the metadata is that Manual changes through the Catalog UI create many issues by silently changing attribute values and/or metadata. Example behaviours:

    +
      +
    1. Manual changes to field value retain metadata information of the previous value source (so values marked as coming from both ETL and Not ETL Sources could be introduced via UI).
    2. +
    3. price, listPrice, margin, published, and expiration are being changed from ETL to Not ETL Source even when manual changes weren't touching those attributes.
    4. +
    5. if expiration was NULL, it gets set to timestamp 100 years in the future
    6. +
    7. if margin was NULL, it gets set to 0
    8. +
    +

    It is awful, but hopefully, only a few manual changes are happening in the production dataset, and this issue will be minimal. Still, it's worth remembering this when the metadata preview doesn't match data in the CSV.

    +

    Context.event.fields.item

    +

    While context.event.fields.item is perfect for the use case described here, don't try to use it in standard Campaigns. Unfortunately, it is filled in only in the Simulation Preview and will not be available when deployed to a website. It is a massive limitation with one dirty workaround.

    +

    To get a similar outcome in an actual campaign, you have to:

    +
      +
    1. Create a string User Attribute to store the last viewed product ID.
    2. +
    3. In the Sitemap, extend the Product View Page Type onActionEvent to push the current product ID to the attribute created in the previous step.
    4. +
    5. Leverage context?.user?.attributes?.nameOfYourNewAttribute to get the ID and leverage it for .findItem and other purposes.
    6. +
    +

    Options

    +

    I created the current version of the solution with an easy-to-use, straightforward interface leveraging out-of-the-box features of the platform. However, you can extend the code with an additional field accepting a list of IDs to return payloads for multiple items in a single run to facilitate faster debugging.

    \ No newline at end of file diff --git a/docs/js/js-dom/index.html b/docs/js/js-dom/index.html index b1cb91146..92b789f65 100644 --- a/docs/js/js-dom/index.html +++ b/docs/js/js-dom/index.html @@ -1,22 +1,180 @@ - + - -JS Document Object Model | Mateusz Dąbrowski + +JS Document Object Model | Mateusz Dąbrowski - - - + + + -
    -

    JS Document Object Model

    Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.

    What is Document Object Model?

    The Document Object Model (DOM) represents the structure of a web document and serves as its programming interface. In simpler words, it lets JavaScript talk with the HTML of the page. And that is huge, especially in the Marketing Automation world.

    Why? Because it lets you manipulate your website in many ways - visible and not. Dynamic forms adapting to user actions, pages changing in real-time and enhanced data capture. All that (and so much more) is possible thanks to DOM access. So let's dive into details.

    Accessing the DOM

    To start working with Document Object Model in JavaScript, you need to use one of the special objects - window (browser tab) or document (page within that tab). Each of those objects offers many methods that let you interact with a webpage.

    JavaScript lets you capture specific parts of your website and make them accessible for all your scripting needs with the help of document object methods:

    • getElementById: returns an element with matching id attribute (for example, elemnt with id="emailAddressField" using document.getElementById('emailAddressField'))
    • getElementsByTagName: returns a collection of matching HTML tags (for example, all <p> tags using document.getElementByTagName('p'))
    • getElementsByName: returns a collection of elements with matching name attribute (for example, all inputs with name="email" using document.getElementByName('email'))
    • getElementsByClassName: returns a collection of elements with matching class attribute (for example, all elements with class="hiddenContent" using document.getElementByClassName('hiddenContent'))
    • querySelector: returns an element with a matching CSS3 selector (for example, <h2> element that is within <p class="hiddenContent"> using document.querySelector(p.hiddenContent h2') - notice the . prefix for a class). If there are multiple matching elements - it will return the first one.
    • querySelectorAll: returns a collection of elements matching CSS3 selector (for example, all <tr> elements that are within elements with class=".DataCell" that are within an element with id="attributes-repeater" using document.querySelectorAll('#attributes-repeater .DataCell tr'))
    You Should Know

    querySelector and querySelectorAll allow you to select elements using the power of CSS3. It means that you can go really specific with the proper syntax.

    You can select:

    1. Tag by its name: document.querySelector('body')
    2. Id with # prefix: document.querySelector('#idName')
    3. Class with . prefix: document.querySelector('.className')
    4. Tag with specific class by chaining: document.querySelector('div.className')
    5. Element with two classes: document.querySelector('.className1.className2') (notice lack of space between classes)
    6. Element that is direct child of another element: document.querySelector('div > h2') (notice the > symbol between tags)
    7. Element that is any child another element: document.querySelector('div h2')
    8. Element that is any sibling (has the same parent): document.querySelector('p.className ~ h2') (this will capture h2 that is under the same parent as p.className)
    9. Element that is adjecent sibling (has the same parent): document.querySelector('p.className + h2') (this will capture h2 that is under the same parent as p.className and after that paragraph)
    10. Element with specific attribute: document.querySelector('[href]')
    11. Element with specific value of attribute: document.querySelector('input[type="checkbox"]')
    12. One of the listed elements: document.querySelector('ul, ol')
    13. All of the listed elements: document.querySelectorAll('ul, ol')
    14. Elements targetet by pseudo-class: document.querySelectorAll('a:visited')
    15. Pseudo-element: document.querySelectorAll('h1::first-letter')
    16. Element with negated selection: document.querySelector('.className:not(div)')

    Sky is the limit, especially as you can chain all of the above into super query:

    document.querySelector('#content > article > div:nth-child(20) a:nth-child(1) > code');

    However, whenever possible, optimise. Either by finding a better way to select the element or by adding an easily selectable attribute to that element in the page HTML.

    As you can see, there are many options you can leverage.

    Should you use getElement or querySelector?

    It depends on the purpose. The rule of thumb is that if one of the getElement selectors can do the job, it's a better choice performance-wise (the longer HTML, the bigger difference). However, for complex selections, the newer querySelector family might be better or the only possible choice.

    Good use cases for the querySelector family
    // Instead of using three getElement selectors (that wouldn't even work in this example, more on that in the next paragraph)
    document.getElementById('attributes-repeater').getElementsByClassName('DataCell').getElementsByTagName('tr');
    // you should use a single querySelectorAll selector
    document.querySelectorAll('#attributes-repeater .DataCell tr');

    // There are also cases where querySelector is the only choice
    document.querySelectorAll('input[type="checkbox"]');

    As always, the devil lies in the details. While chained getElement selectors will have better performance than clean querySelector, there are three issues with the former:

    1. Readability: after two or three chained selectors, the getElement chain gets really hard to read and debug; the natural CSS3 style of querySelector is straightforward.
    2. Flexibility: you can only chain getElements on single element. Refering to the previous code sample, while the .getElementsByClassName('DataCell') called on single outcome of .getElementById('attributes-repeater') works, the collection it will return would crash the .getElementsByTagName('tr') as the chaining works only on single element scope.
    3. Loopability: outcomes of getElements selection cannot be looped using forEach().

    My approach is to use the more flexible and readable querySelector whenever performance is not a dealbreaker and switch where possible to the getElement toolset for use cases where the performance is crucial.

    You Should Know

    You can assign your DOM selection to a variable. It allows you to reuse it in multiple places of your script and lets you limit the scope of the selection.

    You can do the latter by replacing the document object with your variable - it will look for matching DOM elements only within the outcome of the previous selection.

    const form = document.querySelector('form');
    const divsInForm = form.querySelectorAll('div.legalNotice'); // Returns only div tags with legalNotice class that are within your form

    It works like chaining selectors and with the same limitation - you can chain only if the previous outcome is a single element.

    /* ✅ Chain from a single element to a collection - same outcome as previous code snippet */
    document.querySelector('form').querySelectorAll('div.legalNotice');

    /* ❌ Chain from a collection to a collection - will throw TypeError */
    document.querySelectorAll('form').querySelectorAll('div.legalNotice');

    /* ✅ Chain from a single element (thanks to index) to a collection */
    document.querySelectorAll('form')[0].querySelectorAll('div.legalNotice');

    /* Of course, in real scenario, you should use a compound selector for the same result */
    document.querySelectorAll('form div.legalNotice');

    Selecting elements is just the beginning. Once you pick them, you can explore, traverse and manipulate the DOM. You can check what is available for the selected element with console.dir(selectedElement) in the developer console.

    Exploring the DOM

    Once you select a page element, you can learn more about it, thanks to properties. There is a long list of available features, so let's focus on the ones most useful in marketing automation and real-time personalisation world.

    attributes

    With .attributes property you can list all HTML attributes on selected element in a NamedNodeMap. What is more, you can drill down on those details to get specific values:

    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('#content').attributes; // returns a Map with id, class and role
    document.querySelector('#content').attributes.class.value; // returns 'main-content'

    You can also list the names of all available attributes using .getAttributesNames(). With getAttrubute() method you can pull a value of a specific attribute. Finally, there is a pair of condition checking methods: hasAttributes() that checks whether the selected element has any attribute and hasAttribute() that tells you if the selected element has a specified attribute.

    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('#content').getAttributesNames(); // returns ['id', 'class', 'role']
    document.querySelector('#content').getAttribute('role'); // returns 'main'
    document.querySelector('#content').hasAttributes(); // returns true
    document.querySelector('#content').hasAttribute('role'); // returns true

    Those methods are helpful for non-standard attributes that don't have a dedicated shorthand.

    classList and className

    The .classList property lets you directly list all classes assigned to the selected element (in the form of DOMTokenList). It is excellent when you want to loop through to find a specific class or manipulate the DOM.

    On the other hand, when you want to do a simple check or condition, .className is a great shorthand returning all classes as a string.

    /* <div class="page-wrapper category-api document-page">…</div> */
    document.querySelector('div.page-wrapper').classList; // returns an object with all the classes, length and value
    document.querySelector('div.page-wrapper').classList.contains('document-page'); // returns true
    document.querySelector('div.page-wrapper').classList.value; // returns 'page-wrapper category-api document-page'
    document.querySelector('div.page-wrapper').className; // shorthand of the previous, returns 'page-wrapper category-api document-page'

    The .classList property is the bread and butter of page manipulation, as it allows you to add, remove, replace and toggle classes on an element. Think of hiding and displaying elements, changing the styles and other dynamic scenarios. More on that, in the changing attributes section.

    id and tagName

    Similarly to class-related properties, .id property returns the value of the id attribute and .tagName property outputs the selected tag's name.

    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('.main-content').id; // returns 'content'
    document.querySelector('.main-content').tagName; // returns 'main'

    Those two are less frequently used and mostly have some value when travelling through the DOM.

    innerText and innerHTML

    Another extremely important properties are .innerText and .innerHTML. They allow you to look into what is within the selected element.

    .innerText returns a plain text version of element content (including all child tags). Think copy-pasting fragment of the page into a chat.

    Example output for the header of this section
    document.querySelector('#innertext-and-innerhtml').innerText;
    // returns ".innerText and .innerHTML"

    .innerHTML, on the other hand, will return a full-blown HTML code of the selected element (including all child tags within). However, keep in mind that it will be the rendered HTML, not the original HTML (so the version adapted to your screen, your device, your context).

    Example output for the header of this section
    document.querySelector('#innertext-and-innerhtml').innerHTML;
    // returns ".innerText and .innerHTML<a class=\"hash-link\" href=\"#innertext-and-innerhtml\" title=\"Direct link to heading\"></a>"

    While those are already useful for exploration,they shine when you want to manipulate your page. More on that later.

    hidden and style

    Finally, there are landing page must-haves: .hidden and .style. Those two properties describe the CSS of the selected element.

    .hidden is straightforward. It returns a boolean telling you whether the element is hidden from the frontend of the page.

    .style is much deeper, as it returns an object with all possible inline CSS declarations for the element. You can then drill down to return a value of a specific declaration.

    Example output for header of this section
    document.querySelector('#hidden-and-style').hidden;         // returns false
    document.querySelector('#hidden-and-style').style.display; // returns ''

    As with properties mentioned previously, .style and .hidden truly shine when manipulating the DOM.

    Traversing the DOM

    Think about the DOM as a complex hierarchy of elements. When you select a specific element, it is located somewhere within that hierarchy. And with the help of the properties, you can learn more about structure of that web and travel through it.

    Before jumping to the how-to guide, let's first settle the DOM hierarchy naming convention.

    HTML snippet
    <article class="main-page-content">
    <h1>Main Header</h1>
    <div>
    <p>
    <strong>Example paragraph</strong> with some written content and a <a href="https://mateuszdabrowski.pl">link</a>.
    </p>
    <p>
    Yet another paragraph of this article.
    </p>
    </div>
    </article>

    Let's select the div tag from the above structure using:

    document.querySelector('article.main-page-content > div'); // selects <div>

    There are three relationships between the selected element and the rest of the code above:

    1. The selected div tag is enclosed within <article class="main-page-content">. The tag higher in the DOM hierarchy is called a parent.
    2. The selected div tag is not alone within the <article class="main-page-content"> parent tag. There is also h1. The tags at the same level of the DOM hierarchy are called siblings.
    3. The selected div tag has two p tags within itself. The tags lower in the DOM hierarchy are called children.

    To sum up, our div tag has an article as a parent, h1 as a sibling, and two p as children. Then, the first p has two inline children: strong and a.

    Let's leverage all this information.

    parentElement

    If you want to go up in the hierarchy from your selection, you can just use .parentElement (or .parentNode, which is nearly the same now).

    document.querySelector('article.main-page-content > div').parentElement; // selects <article class="main-page-content">

    previousElementSibling and nextElementSibling

    For traversing the sibling elements, you can use either .previousElementSibling or .nextElementSibling to jump to the previous or next element. If there is no such element, you will get null.

    document.querySelector('article.main-page-content > div').previousElementSibling;   // selects <h1>
    document.querySelector('article.main-page-content > div').nextElementSibling; // returns null
    You Should Know

    You can also encounter similar properties: .previousSibling and .nextSibling. That pair is operating on HTML Nodes and will return more then you might expect. For example, whitespace between the elements (#text node) or HTML comments. Unless you are sure you need it, .previousElementSibling or .nextElementSibling are better choice.

    All things children

    When you want to go down in the hierarchy, you can use .children to get a collection of HTML elements.

    document.querySelector('article.main-page-content > div').children; // returns collection of two <p> tags

    You can either loop through those or pick a specific child with an index. Helpful here can be .childElementCount, which will show you the number of elements selected.

    document.querySelector('article.main-page-content > div').childElementCount; // returns 2

    The nice thing is that for the most popular selections - the first and last child - you can use a clean shorthands .firstElementChild and .lastElementChild.

    /* ❌ Unnecessary complex selection of the first and last child */
    document.querySelector('article.main-page-content > div').children[0]; // selects first child
    document.querySelector('article.main-page-content > div').children[document.querySelector('article.main-page-content > div').childElementCount - 1]; // selects last child

    /* ✅ Optimised and readable selection of first and last child */
    document.querySelector('article.main-page-content > div').firstElementChild; // selects first child
    document.querySelector('article.main-page-content > div').lastElementChild; // selects last child
    You Should Know

    Like with sibling selection, here also you have set of similar properties - .childNodes, .firstChild, .lastChild. All three work on Nodes, so those will pick up not only elements but also text (whitespace) and comments. Unless you are sure you need it, .children, .firstElementChild and .lastElementChild are better choice.

    The power of DOM traversing

    Ok, we know how to traverse the DOM, but why should we? Because sometimes you have to deal with a dynamic DOM and with traversing you can still leverage all exploratory properties.

    document.querySelector('article.main-page-content > div').parentElement.className; // returns "main-page-content"

    You can also mix and match the traversing properties to jump multiple hierarchy levels.

    document.querySelector('article.main-page-content > div').firstElementChild.lastElementChild.href // returns "https://mateuszdabrowski.pl/"

    Finally, you are not limited by the need to know the exact path from the currently selected element to another one higher in the hierarchy that you are interested in. You can leverage the .closest method to find it using the same CCS3 selection as with querySelector.

    document.querySelector('article.main-page-content > div').closest('.main-page-content'); // selects <article class="main-page-content">

    Remember that .closest can return the initially selected element if it fulfils the new selection. If you want to stop it from happening, you can just chain it after .parentElement.

    document.querySelector('article.main-page-content > div').parentElement.closest('.main-page-content'); // selects <article class="main-page-content">

    Manipulating the DOM

    Everything discussed up to this point is nice but not breathtaking. Time to change it and jump straight into the real reason it is worth learning about the DOM. The ins and outs of manipulating it with JavaScript methods.

    addEventListener

    One of the critical manipulation methods for marketing automation is adding events with .addEventListener. This method lets you perform some actions (a function) given a specific behaviour (event).

    In simpler words, you can tell the browser to execute a JavaScript function when the user clicks a button. Or moves the mouse out of the page to close it or change a tab. Or perform any event you configure. You do it by attaching an Event Listener to a document, window or selected element:

    Example of attaching Click-based Event Listener on a <button> that logs click details to console
    document.querySelector('button').addEventListener('click', event => console.log(event));
    You Should Know

    Using anonymous functions, like in the example above, is not recommended. Each anonymous function is unique for JavaScript, even if it has the same code within. This leads to two issues:

    1. You may add multiple instances of the same anonymous function to a single element (no deduplication possible). It will lead to a negative performance impact and the function being triggered numerous times per single event.
    2. You cannot remove anonymous Event Listener.

    In real-world scenarios, use named functions (unless you are absolutely sure what you are doing and have booked some time for debugging in the future):

    const logEvent = event => console.log(event);
    document.querySelector('button').addEventListener('click', logEvent);

    It will allow you to easily remove Event Listener (by referencing the target, event type and named function) once it is no longer needed:

    document.querySelector('button').removeEventListener('click', logEvent);

    Event types

    There are over a hundred available events that you can use, so I will focus only on the most useful for our Marketing Automation needs.

    click

    Capturing a click event is probably the most popular event in the world wide web. Technically, it's a shorthand for two separate events (that you can listen for separately) - mousedown and mouseup.

    The interesting tidbit is that the event captures the number of consecutive clicks happening in short timeframe, so you can distinguish single, double, tripleclicks:

    const logClickCount = event => console.log(`Click count: ${event.detail}`);
    document.querySelector('button').addEventListener('click', logClickCount);
    submit

    Another marketing must-have is the submit event. It is triggered on the valid submission of a form.

    const logSubmissionTimestamp = event => console.log(`Submission timestamp: ${event.timeStamp}`); // miliseconds since the page/script load
    document.querySelector('form').addEventListener('submit', logSubmissionTimestamp);

    The key feature with submit events is possibility to stop the default form processing with .preventDefault method:

    document.querySelector('form').addEventListener('submit',
    event => {
    event.preventDefault();
    const formData = Object.fromEntries(new FormData(event.target));
    console.log(formData);
    }
    );

    This approach allows you to implement custom validation or data processing while benefiting from the HTML5 form backbone. Perfect when you want to push your form submission to a Code Resource asynchronously.

    focus & blur

    Other events that are very useful for forms (and more) are focus and blur. The first one is triggered when an element gets into focus; the other on the opposite. What does it mean? Let's say you have a form. When the user clicks on the input, that element gets focused. When he clicks on something else (another input, submit button, or just anywhere else), it triggers a blur event.

    const logInputValue = event => console.log(event.target.value);
    document.querySelector('input[type="email"]').addEventListener('blur', logInputValue);

    Using blur events can be great for triggering asynchronous checks on the provided data. For example, when the user finishes writing the email and goes to the following field, the Event Listener can then make an asynchronous call to the Code Resource backend. It will look up whether the email is used by an existing contact or new record needs to be created in Salesforce Sales Cloud to generate the Contact ID and return it back to the form's hidden field.

    mouseenter & mouseleave

    With mouseenter and mouseleave, you can trigger events when the user moves the pointer in or out of a specific element. The caveat - there needs to be a pointer, so the solution is not working for touchscreen users.

    Still, it can be used to capture which part of the website is getting hovered over with a mouse (and for how long) or to create those annoying pop-ups trying to guilt-trip you into staying on the page:

    const onLeavePopUp = alert('Sad Alert');
    document.documentElement.addEventListener('mouseleave', onLeavePopUp);

    Those are just a few key events that you can capture with .addEventListener. There is much more available, like keydown & keyup, select, scroll, paste, error. Check out the complete list on the MDN.

    Changing attributes

    Events are fantastic, but there is something even better. Attribute manipulation. With it, you can change your website in real-time according to your logic. How? By going one step further with what you have already learned.

    For example, you can add, remove and toggle (add if it wasn't there or remove if it was) CSS classes with .classlist:

    /* <div class="page-wrapper category-api document-page">…</div> */
    document.querySelector('div.page-wrapper').classList.remove('category-api'); // removes .categori-api
    document.querySelector('div.page-wrapper').classList.add('category-api'); // adds .categori-api back
    document.querySelector('div.page-wrapper').classList.toggle('category-api'); // removes .categori-api as it is on the element

    And just like you could get custom attributes, you can also create them with .setAttribute:

    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('#content').setAttribute('data-columns', '3'); // adds data-columns="3" attribute

    Probably the most useful manipulation feature is possibility to alter the properties:

    /* <input type="checkbox" id="isOptedIn" name="isOptedIn"> */
    document.querySelector('#isOptedIn').required; // returns false, as checkbox is not required
    document.querySelector('#isOptedIn').required = true; // makes the checkbox required

    document.querySelector('#isOptedIn').checked; // returns false, as checkbox is not checked
    document.querySelector('#isOptedIn').checked = true; // checks the checkbox

    document.querySelector('#isOptedIn').hidden; // returns false, as checkbox is not hidden
    document.querySelector('#isOptedIn').hidden = true; // hides the checkbox

    You can do the same with .innerText/.innerHTML, .style.display and more.

    Finally, you can mix DOM manipulation methods and change attributes in response to specific events:

    document.querySelector('form').addEventListener('submit',
    event => {
    event.preventDefault();
    const formData = Object.fromEntries(new FormData(event.target));
    event.target.innerText = 'Submitted!'; // Replaces whole form with "Submitted!"
    }
    );

    Document Object Model can be used to adapt your website in real-time, fill in hidden fields with backend calls or even automate your processes through developer console. You are only limited by your imagination (and website performance).

    Marketing Cloud Use Cases

    1. Tailor with Data - leverage DOM manipulation and personalisation strings to create dynamic experiences for your customers.
    2. Export, Import & Document SFMC Roles - Backup, clone and move cross-account the Salesforce Marketing Cloud roles. In seconds, thanks to DOM.
    - - +

    JS Document Object Model

    Explore, traverse and modify web pages with the power of JavaScript DOM properties and methods.

    +

    What is Document Object Model?

    +

    The Document Object Model (DOM) represents the structure of a web document and serves as its programming interface. In simpler words, it lets JavaScript talk with the HTML of the page. And that is huge, especially in the Marketing Automation world.

    +

    Why? Because it lets you manipulate your website in many ways - visible and not. Dynamic forms adapting to user actions, pages changing in real-time and enhanced data capture. All that (and so much more) is possible thanks to DOM access. So let's dive into details.

    +

    Accessing the DOM

    +

    To start working with Document Object Model in JavaScript, you need to use one of the special objects - window (browser tab) or document (page within that tab). Each of those objects offers many methods that let you interact with a webpage.

    +

    JavaScript lets you capture specific parts of your website and make them accessible for all your scripting needs with the help of document object methods:

    +
      +
    • getElementById: returns an element with matching id attribute (for example, elemnt with id="emailAddressField" using document.getElementById('emailAddressField'))
    • +
    • getElementsByTagName: returns a collection of matching HTML tags (for example, all <p> tags using document.getElementByTagName('p'))
    • +
    • getElementsByName: returns a collection of elements with matching name attribute (for example, all inputs with name="email" using document.getElementByName('email'))
    • +
    • getElementsByClassName: returns a collection of elements with matching class attribute (for example, all elements with class="hiddenContent" using document.getElementByClassName('hiddenContent'))
    • +
    • querySelector: returns an element with a matching CSS3 selector (for example, <h2> element that is within <p class="hiddenContent"> using document.querySelector(p.hiddenContent h2') - notice the . prefix for a class). If there are multiple matching elements - it will return the first one.
    • +
    • querySelectorAll: returns a collection of elements matching CSS3 selector (for example, all <tr> elements that are within elements with class=".DataCell" that are within an element with id="attributes-repeater" using document.querySelectorAll('#attributes-repeater .DataCell tr'))
    • +
    +
    You Should Know

    querySelector and querySelectorAll allow you to select elements using the power of CSS3. It means that you can go really specific with the proper syntax.

    You can select:

      +
    1. Tag by its name: document.querySelector('body')
    2. +
    3. Id with # prefix: document.querySelector('#idName')
    4. +
    5. Class with . prefix: document.querySelector('.className')
    6. +
    7. Tag with specific class by chaining: document.querySelector('div.className')
    8. +
    9. Element with two classes: document.querySelector('.className1.className2') (notice lack of space between classes)
    10. +
    11. Element that is direct child of another element: document.querySelector('div > h2') (notice the > symbol between tags)
    12. +
    13. Element that is any child another element: document.querySelector('div h2')
    14. +
    15. Element that is any sibling (has the same parent): document.querySelector('p.className ~ h2') (this will capture h2 that is under the same parent as p.className)
    16. +
    17. Element that is adjecent sibling (has the same parent): document.querySelector('p.className + h2') (this will capture h2 that is under the same parent as p.className and after that paragraph)
    18. +
    19. Element with specific attribute: document.querySelector('[href]')
    20. +
    21. Element with specific value of attribute: document.querySelector('input[type="checkbox"]')
    22. +
    23. One of the listed elements: document.querySelector('ul, ol')
    24. +
    25. All of the listed elements: document.querySelectorAll('ul, ol')
    26. +
    27. Elements targetet by pseudo-class: document.querySelectorAll('a:visited')
    28. +
    29. Pseudo-element: document.querySelectorAll('h1::first-letter')
    30. +
    31. Element with negated selection: document.querySelector('.className:not(div)')
    32. +

    Sky is the limit, especially as you can chain all of the above into super query:

    document.querySelector('#content > article > div:nth-child(20) a:nth-child(1) > code');

    However, whenever possible, optimise. Either by finding a better way to select the element or by adding an easily selectable attribute to that element in the page HTML.

    +

    As you can see, there are many options you can leverage.

    +

    Should you use getElement or querySelector?

    +

    It depends on the purpose. The rule of thumb is that if one of the getElement selectors can do the job, it's a better choice performance-wise (the longer HTML, the bigger difference). However, for complex selections, the newer querySelector family might be better or the only possible choice.

    +
    Good use cases for the querySelector family
    // Instead of using three getElement selectors (that wouldn't even work in this example, more on that in the next paragraph)
    document.getElementById('attributes-repeater').getElementsByClassName('DataCell').getElementsByTagName('tr');
    // you should use a single querySelectorAll selector
    document.querySelectorAll('#attributes-repeater .DataCell tr');

    // There are also cases where querySelector is the only choice
    document.querySelectorAll('input[type="checkbox"]');
    +

    As always, the devil lies in the details. While chained getElement selectors will have better performance than clean querySelector, there are three issues with the former:

    +
      +
    1. Readability: after two or three chained selectors, the getElement chain gets really hard to read and debug; the natural CSS3 style of querySelector is straightforward.
    2. +
    3. Flexibility: you can only chain getElements on single element. Refering to the previous code sample, while the .getElementsByClassName('DataCell') called on single outcome of .getElementById('attributes-repeater') works, the collection it will return would crash the .getElementsByTagName('tr') as the chaining works only on single element scope.
    4. +
    5. Loopability: outcomes of getElements selection cannot be looped using forEach().
    6. +
    +

    My approach is to use the more flexible and readable querySelector whenever performance is not a dealbreaker and switch where possible to the getElement toolset for use cases where the performance is crucial.

    +
    You Should Know

    You can assign your DOM selection to a variable. It allows you to reuse it in multiple places of your script and lets you limit the scope of the selection.

    You can do the latter by replacing the document object with your variable - it will look for matching DOM elements only within the outcome of the previous selection.

    const form = document.querySelector('form');
    const divsInForm = form.querySelectorAll('div.legalNotice'); // Returns only div tags with legalNotice class that are within your form

    It works like chaining selectors and with the same limitation - you can chain only if the previous outcome is a single element.

    /* ✅ Chain from a single element to a collection - same outcome as previous code snippet */
    document.querySelector('form').querySelectorAll('div.legalNotice');

    /* ❌ Chain from a collection to a collection - will throw TypeError */
    document.querySelectorAll('form').querySelectorAll('div.legalNotice');

    /* ✅ Chain from a single element (thanks to index) to a collection */
    document.querySelectorAll('form')[0].querySelectorAll('div.legalNotice');

    /* Of course, in real scenario, you should use a compound selector for the same result */
    document.querySelectorAll('form div.legalNotice');
    +

    Selecting elements is just the beginning. Once you pick them, you can explore, traverse and manipulate the DOM. You can check what is available for the selected element with console.dir(selectedElement) in the developer console.

    +

    Exploring the DOM

    +

    Once you select a page element, you can learn more about it, thanks to properties. There is a long list of available features, so let's focus on the ones most useful in marketing automation and real-time personalisation world.

    +

    attributes

    +

    With .attributes property you can list all HTML attributes on selected element in a NamedNodeMap. What is more, you can drill down on those details to get specific values:

    +
    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('#content').attributes; // returns a Map with id, class and role
    document.querySelector('#content').attributes.class.value; // returns 'main-content'
    +

    You can also list the names of all available attributes using .getAttributesNames(). With getAttrubute() method you can pull a value of a specific attribute. Finally, there is a pair of condition checking methods: hasAttributes() that checks whether the selected element has any attribute and hasAttribute() that tells you if the selected element has a specified attribute.

    +
    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('#content').getAttributesNames(); // returns ['id', 'class', 'role']
    document.querySelector('#content').getAttribute('role'); // returns 'main'
    document.querySelector('#content').hasAttributes(); // returns true
    document.querySelector('#content').hasAttribute('role'); // returns true
    +

    Those methods are helpful for non-standard attributes that don't have a dedicated shorthand.

    +

    classList and className

    +

    The .classList property lets you directly list all classes assigned to the selected element (in the form of DOMTokenList). It is excellent when you want to loop through to find a specific class or manipulate the DOM.

    +

    On the other hand, when you want to do a simple check or condition, .className is a great shorthand returning all classes as a string.

    +
    /* <div class="page-wrapper category-api document-page">…</div> */
    document.querySelector('div.page-wrapper').classList; // returns an object with all the classes, length and value
    document.querySelector('div.page-wrapper').classList.contains('document-page'); // returns true
    document.querySelector('div.page-wrapper').classList.value; // returns 'page-wrapper category-api document-page'
    document.querySelector('div.page-wrapper').className; // shorthand of the previous, returns 'page-wrapper category-api document-page'
    +

    The .classList property is the bread and butter of page manipulation, as it allows you to add, remove, replace and toggle classes on an element. Think of hiding and displaying elements, changing the styles and other dynamic scenarios. More on that, in the changing attributes section.

    +

    id and tagName

    +

    Similarly to class-related properties, .id property returns the value of the id attribute and .tagName property outputs the selected tag's name.

    +
    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('.main-content').id; // returns 'content'
    document.querySelector('.main-content').tagName; // returns 'main'
    +

    Those two are less frequently used and mostly have some value when travelling through the DOM.

    +

    innerText and innerHTML

    +

    Another extremely important properties are .innerText and .innerHTML. They allow you to look into what is within the selected element.

    +

    .innerText returns a plain text version of element content (including all child tags). Think copy-pasting fragment of the page into a chat.

    +
    Example output for the header of this section
    document.querySelector('#innertext-and-innerhtml').innerText;
    // returns ".innerText and .innerHTML"
    +

    .innerHTML, on the other hand, will return a full-blown HTML code of the selected element (including all child tags within). However, keep in mind that it will be the rendered HTML, not the original HTML (so the version adapted to your screen, your device, your context).

    +
    Example output for the header of this section
    document.querySelector('#innertext-and-innerhtml').innerHTML;
    // returns ".innerText and .innerHTML<a class=\"hash-link\" href=\"#innertext-and-innerhtml\" title=\"Direct link to heading\"></a>"
    +

    While those are already useful for exploration,they shine when you want to manipulate your page. More on that later.

    +

    hidden and style

    +

    Finally, there are landing page must-haves: .hidden and .style. Those two properties describe the CSS of the selected element.

    +

    .hidden is straightforward. It returns a boolean telling you whether the element is hidden from the frontend of the page.

    +

    .style is much deeper, as it returns an object with all possible inline CSS declarations for the element. You can then drill down to return a value of a specific declaration.

    +
    Example output for header of this section
    document.querySelector('#hidden-and-style').hidden;         // returns false
    document.querySelector('#hidden-and-style').style.display; // returns ''
    +

    As with properties mentioned previously, .style and .hidden truly shine when manipulating the DOM.

    +

    Traversing the DOM

    +

    Think about the DOM as a complex hierarchy of elements. When you select a specific element, it is located somewhere within that hierarchy. And with the help of the properties, you can learn more about structure of that web and travel through it.

    +

    Before jumping to the how-to guide, let's first settle the DOM hierarchy naming convention.

    +
    HTML snippet
    <article class="main-page-content">
    <h1>Main Header</h1>
    <div>
    <p>
    <strong>Example paragraph</strong> with some written content and a <a href="https://mateuszdabrowski.pl">link</a>.
    </p>
    <p>
    Yet another paragraph of this article.
    </p>
    </div>
    </article>
    +

    Let's select the div tag from the above structure using:

    +
    document.querySelector('article.main-page-content > div'); // selects <div>
    +

    There are three relationships between the selected element and the rest of the code above:

    +
      +
    1. The selected div tag is enclosed within <article class="main-page-content">. The tag higher in the DOM hierarchy is called a parent.
    2. +
    3. The selected div tag is not alone within the <article class="main-page-content"> parent tag. There is also h1. The tags at the same level of the DOM hierarchy are called siblings.
    4. +
    5. The selected div tag has two p tags within itself. The tags lower in the DOM hierarchy are called children.
    6. +
    +

    To sum up, our div tag has an article as a parent, h1 as a sibling, and two p as children. Then, the first p has two inline children: strong and a.

    +

    Let's leverage all this information.

    +

    parentElement

    +

    If you want to go up in the hierarchy from your selection, you can just use .parentElement (or .parentNode, which is nearly the same now).

    +
    document.querySelector('article.main-page-content > div').parentElement; // selects <article class="main-page-content">
    +

    previousElementSibling and nextElementSibling

    +

    For traversing the sibling elements, you can use either .previousElementSibling or .nextElementSibling to jump to the previous or next element. If there is no such element, you will get null.

    +
    document.querySelector('article.main-page-content > div').previousElementSibling;   // selects <h1>
    document.querySelector('article.main-page-content > div').nextElementSibling; // returns null
    +
    You Should Know

    You can also encounter similar properties: .previousSibling and .nextSibling. That pair is operating on HTML Nodes and will return more then you might expect. For example, whitespace between the elements (#text node) or HTML comments. Unless you are sure you need it, .previousElementSibling or .nextElementSibling are better choice.

    +

    All things children

    +

    When you want to go down in the hierarchy, you can use .children to get a collection of HTML elements.

    +
    document.querySelector('article.main-page-content > div').children; // returns collection of two <p> tags
    +

    You can either loop through those or pick a specific child with an index. Helpful here can be .childElementCount, which will show you the number of elements selected.

    +
    document.querySelector('article.main-page-content > div').childElementCount; // returns 2
    +

    The nice thing is that for the most popular selections - the first and last child - you can use a clean shorthands .firstElementChild and .lastElementChild.

    +
    /* ❌ Unnecessary complex selection of the first and last child */
    document.querySelector('article.main-page-content > div').children[0]; // selects first child
    document.querySelector('article.main-page-content > div').children[document.querySelector('article.main-page-content > div').childElementCount - 1]; // selects last child

    /* ✅ Optimised and readable selection of first and last child */
    document.querySelector('article.main-page-content > div').firstElementChild; // selects first child
    document.querySelector('article.main-page-content > div').lastElementChild; // selects last child
    +
    You Should Know

    Like with sibling selection, here also you have set of similar properties - .childNodes, .firstChild, .lastChild. All three work on Nodes, so those will pick up not only elements but also text (whitespace) and comments. Unless you are sure you need it, .children, .firstElementChild and .lastElementChild are better choice.

    +

    The power of DOM traversing

    +

    Ok, we know how to traverse the DOM, but why should we? Because sometimes you have to deal with a dynamic DOM and with traversing you can still leverage all exploratory properties.

    +
    document.querySelector('article.main-page-content > div').parentElement.className; // returns "main-page-content"
    +

    You can also mix and match the traversing properties to jump multiple hierarchy levels.

    +
    document.querySelector('article.main-page-content > div').firstElementChild.lastElementChild.href // returns "https://mateuszdabrowski.pl/"
    +

    Finally, you are not limited by the need to know the exact path from the currently selected element to another one higher in the hierarchy that you are interested in. You can leverage the .closest method to find it using the same CCS3 selection as with querySelector.

    +
    document.querySelector('article.main-page-content > div').closest('.main-page-content'); // selects <article class="main-page-content">
    +

    Remember that .closest can return the initially selected element if it fulfils the new selection. If you want to stop it from happening, you can just chain it after .parentElement.

    +
    document.querySelector('article.main-page-content > div').parentElement.closest('.main-page-content'); // selects <article class="main-page-content">
    +

    Manipulating the DOM

    +

    Everything discussed up to this point is nice but not breathtaking. Time to change it and jump straight into the real reason it is worth learning about the DOM. The ins and outs of manipulating it with JavaScript methods.

    +

    addEventListener

    +

    One of the critical manipulation methods for marketing automation is adding events with .addEventListener. This method lets you perform some actions (a function) given a specific behaviour (event).

    +

    In simpler words, you can tell the browser to execute a JavaScript function when the user clicks a button. Or moves the mouse out of the page to close it or change a tab. Or perform any event you configure. You do it by attaching an Event Listener to a document, window or selected element:

    +
    Example of attaching Click-based Event Listener on a <button> that logs click details to console
    document.querySelector('button').addEventListener('click', event => console.log(event));
    +
    You Should Know

    Using anonymous functions, like in the example above, is not recommended. Each anonymous function is unique for JavaScript, even if it has the same code within. This leads to two issues:

      +
    1. You may add multiple instances of the same anonymous function to a single element (no deduplication possible). It will lead to a negative performance impact and the function being triggered numerous times per single event.
    2. +
    3. You cannot remove anonymous Event Listener.
    4. +

    In real-world scenarios, use named functions (unless you are absolutely sure what you are doing and have booked some time for debugging in the future):

    const logEvent = event => console.log(event);
    document.querySelector('button').addEventListener('click', logEvent);

    It will allow you to easily remove Event Listener (by referencing the target, event type and named function) once it is no longer needed:

    document.querySelector('button').removeEventListener('click', logEvent);
    +

    Event types

    +

    There are over a hundred available events that you can use, so I will focus only on the most useful for our Marketing Automation needs.

    +
    click
    +

    Capturing a click event is probably the most popular event in the world wide web. Technically, it's a shorthand for two separate events (that you can listen for separately) - mousedown and mouseup.

    +

    The interesting tidbit is that the event captures the number of consecutive clicks happening in short timeframe, so you can distinguish single, double, tripleclicks:

    +
    const logClickCount = event => console.log(`Click count: ${event.detail}`);
    document.querySelector('button').addEventListener('click', logClickCount);
    +
    submit
    +

    Another marketing must-have is the submit event. It is triggered on the valid submission of a form.

    +
    const logSubmissionTimestamp = event => console.log(`Submission timestamp: ${event.timeStamp}`); // miliseconds since the page/script load
    document.querySelector('form').addEventListener('submit', logSubmissionTimestamp);
    +

    The key feature with submit events is possibility to stop the default form processing with .preventDefault method:

    +
    document.querySelector('form').addEventListener('submit',
    event => {
    event.preventDefault();
    const formData = Object.fromEntries(new FormData(event.target));
    console.log(formData);
    }
    );
    +

    This approach allows you to implement custom validation or data processing while benefiting from the HTML5 form backbone. Perfect when you want to push your form submission to a Code Resource asynchronously.

    +
    focus & blur
    +

    Other events that are very useful for forms (and more) are focus and blur. The first one is triggered when an element gets into focus; the other on the opposite. What does it mean? Let's say you have a form. When the user clicks on the input, that element gets focused. When he clicks on something else (another input, submit button, or just anywhere else), it triggers a blur event.

    +
    const logInputValue = event => console.log(event.target.value);
    document.querySelector('input[type="email"]').addEventListener('blur', logInputValue);
    +

    Using blur events can be great for triggering asynchronous checks on the provided data. For example, when the user finishes writing the email and goes to the following field, the Event Listener can then make an asynchronous call to the Code Resource backend. It will look up whether the email is used by an existing contact or new record needs to be created in Salesforce Sales Cloud to generate the Contact ID and return it back to the form's hidden field.

    +
    mouseenter & mouseleave
    +

    With mouseenter and mouseleave, you can trigger events when the user moves the pointer in or out of a specific element. The caveat - there needs to be a pointer, so the solution is not working for touchscreen users.

    +

    Still, it can be used to capture which part of the website is getting hovered over with a mouse (and for how long) or to create those annoying pop-ups trying to guilt-trip you into staying on the page:

    +
    const onLeavePopUp = alert('Sad Alert');
    document.documentElement.addEventListener('mouseleave', onLeavePopUp);
    +

    Those are just a few key events that you can capture with .addEventListener. There is much more available, like keydown & keyup, select, scroll, paste, error. Check out the complete list on the MDN.

    +

    Changing attributes

    +

    Events are fantastic, but there is something even better. Attribute manipulation. With it, you can change your website in real-time according to your logic. How? By going one step further with what you have already learned.

    +

    For example, you can add, remove and toggle (add if it wasn't there or remove if it was) CSS classes with .classlist:

    +
    /* <div class="page-wrapper category-api document-page">…</div> */
    document.querySelector('div.page-wrapper').classList.remove('category-api'); // removes .categori-api
    document.querySelector('div.page-wrapper').classList.add('category-api'); // adds .categori-api back
    document.querySelector('div.page-wrapper').classList.toggle('category-api'); // removes .categori-api as it is on the element
    +

    And just like you could get custom attributes, you can also create them with .setAttribute:

    +
    /* <main id="content" class="main-content" role="main">…</main> */
    document.querySelector('#content').setAttribute('data-columns', '3'); // adds data-columns="3" attribute
    +

    Probably the most useful manipulation feature is possibility to alter the properties:

    +
    /* <input type="checkbox" id="isOptedIn" name="isOptedIn"> */
    document.querySelector('#isOptedIn').required; // returns false, as checkbox is not required
    document.querySelector('#isOptedIn').required = true; // makes the checkbox required

    document.querySelector('#isOptedIn').checked; // returns false, as checkbox is not checked
    document.querySelector('#isOptedIn').checked = true; // checks the checkbox

    document.querySelector('#isOptedIn').hidden; // returns false, as checkbox is not hidden
    document.querySelector('#isOptedIn').hidden = true; // hides the checkbox
    +

    You can do the same with .innerText/.innerHTML, .style.display and more.

    +

    Finally, you can mix DOM manipulation methods and change attributes in response to specific events:

    +
    document.querySelector('form').addEventListener('submit',
    event => {
    event.preventDefault();
    const formData = Object.fromEntries(new FormData(event.target));
    event.target.innerText = 'Submitted!'; // Replaces whole form with "Submitted!"
    }
    );
    +

    Document Object Model can be used to adapt your website in real-time, fill in hidden fields with backend calls or even automate your processes through developer console. You are only limited by your imagination (and website performance).

    +

    Marketing Cloud Use Cases

    +
      +
    1. Tailor with Data - leverage DOM manipulation and personalisation strings to create dynamic experiences for your customers.
    2. +
    3. Export, Import & Document SFMC Roles - Backup, clone and move cross-account the Salesforce Marketing Cloud roles. In seconds, thanks to DOM.
    4. +
    \ No newline at end of file diff --git a/docs/js/js-if-and-switch/index.html b/docs/js/js-if-and-switch/index.html index 57c53452f..0d6deafe2 100644 --- a/docs/js/js-if-and-switch/index.html +++ b/docs/js/js-if-and-switch/index.html @@ -1,23 +1,82 @@ - + - -JS If & Switch | Mateusz Dąbrowski + +JS If & Switch | Mateusz Dąbrowski - - - + + + -
    -

    JS If & Switch

    Deep dive into the two pillars of JavaScript flow control

    If Statements

    The most popular way of handling conditional logic is with the if statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code.

    Create a segment of customers that made more than two purchases
    for (let customer of customers) {
    if (customer.purchases > 2) {
    marketingSegment.push(customer.email);
    }
    }

    Basic if can be extended by adding optional else if for an additional condition with the different outcome or optional else for all scenarios not caught by above conditions.

    Create multiple segments for different levels of customers
    for (let customer of customers) {
    if (customer.purchases > 10) {
    goldCustomerSegment.push(customer.email);
    } else if (customer.purchases > 5) {
    silverCustomerSegment.push(customer.email);
    } else {
    bronzeCustomerSegment.push(customer.email);
    }
    }

    And, Or, Brackets

    The if statement is even more powerful if you enhance your conditions with the ORs (||), ANDs (&&) and brackets:

    Split customers into two segments depending on a condition group
    for (let customer of customers) {
    if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {
    reengagementCampaignSegment.push(customer);
    } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {
    upsellCampaignSegment.push(customer);
    }
    }

    Boolean evaluation

    You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable.

    If the customer has domain of your competiton, add him to blocklist
    for (let customer of customers) {
    const competitionUser = customer.email.includes('@competition.com');
    if (competitionUser) { // if comptetitionUser is true, block will be exectuted
    blocklist.push(customer);
    }
    }

    Flip Booleans with Bang

    Bang symbol (!) can be used to flip the value of a boolean:

    If the customer does not have competition domain in email, add him to campaign
    for (let customer of customers) {
    const competitionUser = customer.email.includes('@competition.com');
    if (!competitionUser) { // if not competition user, execute content
    campaignSegment.push(customer);
    }
    }

    Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean.

    Falsy values in JavaScript are: false, 0, empty string "", null, undefined, NaN. -All other possible values are considered truthy.

    This is very useful, as it allows you to leverage boolean evaluation on truthy values:

    Applies either personalized name or default value
    for (let customer of customers) {
    let helloPersonalization;
    if (customer.firstName) { // if customer.firstName has characters, it is truthy
    helloPersonalization = customer.firstName;
    } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy
    helloPersonalization = 'Valued Customer';
    }
    }

    To make it clear - above code is very "dirty" and can be written much better (for example without else if by applying default value on variable initialization). You will find an example of how to write it better later.

    You Should Know

    You can level up the use of this feature by leveraging double bang !! to convert truthy/falsy value into an (appropriate) boolean.

    If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true
    const isOptedIn = !!optInDate;

    If Shorthand

    For simple, one-line if statements, there is also a one-line shorthand:

    If the customer is opted in, send an email
    if (isOptedIn) sendEmail(emailAddress, emailID);

    You could probably use simple if statements for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out.


    Ternary

    If a simple if statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:

    Dirty if statement using basic 'if'
    for (let customer of customers) {
    let helloPersonalization = 'Hello ';
    if (customer.firstName) {
    helloPersonalization += customer.firstName;
    } else if (!customer.firstName) {
    helloPersonalization += 'Valued Customer';
    }
    }

    we can use a clean ternary:

    Same logic changed to a clean ternary
    for (let customer of customers) {
    let helloPersonalization = customer.firstName ? 'Hello ' + customer.firstName : 'Hello Valued Customer';
    }

    Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: variable = condition ? valueIfTrue : valueIfFalse;. So in the example above, if the customer.firstName is not empty (is truthy), it will be pushed as the value of helloPersonalization. If it is empty, the default value will be assigned instead.

    You Should Know

    The ternary has more uses not than just the standard if statement. It is awesome text customization with interpolation:

    Fill in the sentence with different words depending on boolean value of isOptedIn
    const optInStatusMessage = `You are ${isOptedIn ? 'opted in' : 'not opted in'}`;

    Ternaries are not limited to variables and strings. They can also run functions:

    If isLoggedIn is false, the redirectToLogInPage function will be executed
    !isLoggedIn ? redirectToLogInPage() : null;

    Shortcircuiting

    We already covered using OR || + AND && operators. But by using them correctly, you can optimize the speed of your scripts greatly.

    Shortcircuiting OR

    OR evaluates to true if at least one value is equal to true.

    If the left side of the OR evaluates to true, we know for sure that the whole statement is true. Checking the value of the right side is not needed. And JavaScript knows this too.

    Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side.

    If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign
    for (let customer of customers) {
    if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {
    exclusionSegment.push(customer)
    }
    }

    Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the lastPurchaseDate is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish.

    Shortcircuiting AND

    Similar logic can be applied to AND operator. && evaluates to true only if both sides are true. If we have a more straightforward condition or we suspect it might frequently evaluate to false, we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator.

    If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid
    if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {
    const isLoggedIn = true;
    }

    In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password.

    You Should Know

    Using shortcircuit is a quite popular pattern, especially for managing user interface components:

    If the user is not an admin, shortcircuit and don't render the AdminBar component
    isAdmin && showAdminBar()

    Switch Statement

    Sometimes you have many options for a single condition. You could write it with a simple if, but the switch might be much more readable than a long list of else if statements with nearly identical conditions.

    Return the error type based on the code
    function errorDescription(error) {
    switch (error.code) {
    case 400:
    return 'Bad Request';
    case 401:
    return 'Unauthorized';
    case 403:
    return 'Forbidden';
    case 404:
    return 'Not Found'
    default:
    return 'Unknown Error';
    }
    }

    Some things to remember when working with a switch:

    • If multiple cases fulfil the condition, a switch will execute the first from the top.
    • You can assign multiple cases to the same code block:
    Return either sum or difference of two values (sum by default)
    let outcome;
    switch (a, operation, b) {
    default:
    case '+':
    case 'plus':
    outcome = a + b;
    break;
    case '-':
    case 'minus':
    outcome = a - b;
    break;
    }
    • Use either break statement to end each case or use the return statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen.
    • Always use default statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered.
    • Cases in a switch are using strict comparison (===) for evaluation, so the provided value must match the case not only by value but also by type. A string value of '0' won't trigger an integer 0 case.
    You Should Know

    By default, the switch statement is a single block for the scope. If you, however, want to declare variables of the same name in different cases, you can do it by adding parentheses:

    Despite 'outcome' variable being initialized twice with 'let', it will not drop an error because of two different block scopes
    switch (a, operation, b) {
    default:
    case '+':
    case 'plus': {
    let outcome = a + b;
    break;
    }
    case '-':
    case 'minus': {
    let outcome = a - b;
    break;
    }
    }
    - - +

    JS If & Switch

    Deep dive into the two pillars of JavaScript flow control

    +

    If Statements

    +

    The most popular way of handling conditional logic is with the if statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code.

    +
    Create a segment of customers that made more than two purchases
    for (let customer of customers) {
    if (customer.purchases > 2) {
    marketingSegment.push(customer.email);
    }
    }
    +

    Basic if can be extended by adding optional else if for an additional condition with the different outcome or optional else for all scenarios not caught by above conditions.

    +
    Create multiple segments for different levels of customers
    for (let customer of customers) {
    if (customer.purchases > 10) {
    goldCustomerSegment.push(customer.email);
    } else if (customer.purchases > 5) {
    silverCustomerSegment.push(customer.email);
    } else {
    bronzeCustomerSegment.push(customer.email);
    }
    }
    +

    And, Or, Brackets

    +

    The if statement is even more powerful if you enhance your conditions with the ORs (||), ANDs (&&) and brackets:

    +
    Split customers into two segments depending on a condition group
    for (let customer of customers) {
    if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {
    reengagementCampaignSegment.push(customer);
    } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {
    upsellCampaignSegment.push(customer);
    }
    }
    +

    Boolean evaluation

    +

    You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable.

    +
    If the customer has domain of your competiton, add him to blocklist
    for (let customer of customers) {
    const competitionUser = customer.email.includes('@competition.com');
    if (competitionUser) { // if comptetitionUser is true, block will be exectuted
    blocklist.push(customer);
    }
    }
    +

    Flip Booleans with Bang

    +

    Bang symbol (!) can be used to flip the value of a boolean:

    +
    If the customer does not have competition domain in email, add him to campaign
    for (let customer of customers) {
    const competitionUser = customer.email.includes('@competition.com');
    if (!competitionUser) { // if not competition user, execute content
    campaignSegment.push(customer);
    }
    }
    +

    Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean.

    +

    Falsy values in JavaScript are: false, 0, empty string "", null, undefined, NaN. +All other possible values are considered truthy.

    +

    This is very useful, as it allows you to leverage boolean evaluation on truthy values:

    +
    Applies either personalized name or default value
    for (let customer of customers) {
    let helloPersonalization;
    if (customer.firstName) { // if customer.firstName has characters, it is truthy
    helloPersonalization = customer.firstName;
    } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy
    helloPersonalization = 'Valued Customer';
    }
    }
    +

    To make it clear - above code is very "dirty" and can be written much better (for example without else if by applying default value on variable initialization). You will find an example of how to write it better later.

    +
    You Should Know

    You can level up the use of this feature by leveraging double bang !! to convert truthy/falsy value into an (appropriate) boolean.

    If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true
    const isOptedIn = !!optInDate;
    +

    If Shorthand

    +

    For simple, one-line if statements, there is also a one-line shorthand:

    +
    If the customer is opted in, send an email
    if (isOptedIn) sendEmail(emailAddress, emailID);
    +

    You could probably use simple if statements for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out.

    +
    +

    Ternary

    +

    If a simple if statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:

    +
    Dirty if statement using basic 'if'
    for (let customer of customers) {
    let helloPersonalization = 'Hello ';
    if (customer.firstName) {
    helloPersonalization += customer.firstName;
    } else if (!customer.firstName) {
    helloPersonalization += 'Valued Customer';
    }
    }
    +

    we can use a clean ternary:

    +
    Same logic changed to a clean ternary
    for (let customer of customers) {
    let helloPersonalization = customer.firstName ? 'Hello ' + customer.firstName : 'Hello Valued Customer';
    }
    +

    Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: variable = condition ? valueIfTrue : valueIfFalse;. So in the example above, if the customer.firstName is not empty (is truthy), it will be pushed as the value of helloPersonalization. If it is empty, the default value will be assigned instead.

    +
    You Should Know

    The ternary has more uses not than just the standard if statement. It is awesome text customization with interpolation:

    Fill in the sentence with different words depending on boolean value of isOptedIn
    const optInStatusMessage = `You are ${isOptedIn ? 'opted in' : 'not opted in'}`;

    Ternaries are not limited to variables and strings. They can also run functions:

    If isLoggedIn is false, the redirectToLogInPage function will be executed
    !isLoggedIn ? redirectToLogInPage() : null;
    +
    +

    Shortcircuiting

    +

    We already covered using OR || + AND && operators. But by using them correctly, you can optimize the speed of your scripts greatly.

    +

    Shortcircuiting OR

    +

    OR evaluates to true if at least one value is equal to true.

    +

    If the left side of the OR evaluates to true, we know for sure that the whole statement is true. Checking the value of the right side is not needed. And JavaScript knows this too.

    +

    Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side.

    +
    If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign
    for (let customer of customers) {
    if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {
    exclusionSegment.push(customer)
    }
    }
    +

    Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the lastPurchaseDate is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish.

    +

    Shortcircuiting AND

    +

    Similar logic can be applied to AND operator. && evaluates to true only if both sides are true. If we have a more straightforward condition or we suspect it might frequently evaluate to false, we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator.

    +
    If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid
    if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {
    const isLoggedIn = true;
    }
    +

    In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password.

    +
    You Should Know

    Using shortcircuit is a quite popular pattern, especially for managing user interface components:

    If the user is not an admin, shortcircuit and don't render the AdminBar component
    isAdmin && showAdminBar()
    +
    +

    Switch Statement

    +

    Sometimes you have many options for a single condition. You could write it with a simple if, but the switch might be much more readable than a long list of else if statements with nearly identical conditions.

    +
    Return the error type based on the code
    function errorDescription(error) {
    switch (error.code) {
    case 400:
    return 'Bad Request';
    case 401:
    return 'Unauthorized';
    case 403:
    return 'Forbidden';
    case 404:
    return 'Not Found'
    default:
    return 'Unknown Error';
    }
    }
    +

    Some things to remember when working with a switch:

    +
      +
    • If multiple cases fulfil the condition, a switch will execute the first from the top.
    • +
    • You can assign multiple cases to the same code block:
    • +
    +
    Return either sum or difference of two values (sum by default)
    let outcome;
    switch (a, operation, b) {
    default:
    case '+':
    case 'plus':
    outcome = a + b;
    break;
    case '-':
    case 'minus':
    outcome = a - b;
    break;
    }
    +
      +
    • Use either break statement to end each case or use the return statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen.
    • +
    • Always use default statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered.
    • +
    • Cases in a switch are using strict comparison (===) for evaluation, so the provided value must match the case not only by value but also by type. A string value of '0' won't trigger an integer 0 case.
    • +
    +
    You Should Know

    By default, the switch statement is a single block for the scope. If you, however, want to declare variables of the same name in different cases, you can do it by adding parentheses:

    Despite 'outcome' variable being initialized twice with 'let', it will not drop an error because of two different block scopes
    switch (a, operation, b) {
    default:
    case '+':
    case 'plus': {
    let outcome = a + b;
    break;
    }
    case '-':
    case 'minus': {
    let outcome = a - b;
    break;
    }
    }
    \ No newline at end of file diff --git a/docs/js/js-loops/index.html b/docs/js/js-loops/index.html index dd35f00c9..8d24d5a90 100644 --- a/docs/js/js-loops/index.html +++ b/docs/js/js-loops/index.html @@ -1,22 +1,87 @@ - + - -JS Loops | Mateusz Dąbrowski + +JS Loops | Mateusz Dąbrowski - - - + + + -
    -

    JS Loops

    JavaScript offers four for loops and two while loops. What's the difference?

    For Loops

    For

    The classic for loop might be a bit long to write, but it has a lot of excellent properties:

    • Available in each JavaScript version.
    • Works with break and continue statements for better looping control.
    • Both initial and increment expressions can do multiple things.
    • Condition is not limited to iterable size.
    • Fast across various scenarios.
    Example of for loop iterating over an array
    for (let i = 0; i < array.length; i++) {
    console.log(array[i]);
    }

    Let's break the script down to five steps each for loop follows:

    1. Execute initial expression (let i = 0 in the above example).
    2. Evaluate the condition (i < array.length). If it is false - the loop terminates. If true:
    3. The statement within the loop is executed (console.log(array[i])).
    4. Finally, the increment expression will evaluate (i++).
    5. The loop goes back to step 2 until it is false.

    If in doubt of which loop to use, pick the classic. To optimize speed, cache the length used for condition:

    Initial expression assigns array.length to a variable to cache it
    for (let i = 0, arrayLength = array.length; i < arrayLength; i++) {
    console.log(array[i]);
    }

    For of

    For...of loop came to JavaScript in ES6 (as many good things have). It loops over iterables: strings, arrays, NodeLists, maps, sets and other array-like objects.

    Example of for...of loop iterating over letters of a string
    for (const letter of name) {
    console.log(letter);
    }

    This loop is blazing fast for very small iterables. From martech perspective, it is a fantastic tool to iterate over NodeLists/HTMLCollections when working with DOM. Works great for working with outputs of API calls. Worth also using for operating on split-string-arrays (for example comma-separated strings).

    It has many qualities that set it apart from the classic for loop:

    Key-Value Pair of Object

    It can iterate over key-value paired iterators (for example map or even object - thanks to Object.entries()):

    for (const [key, value] of Object.entries(object)) {
    console.log(key, value);
    }

    Index-Value Pair of Array

    It can catch array values along with indexes:

    for (const [index, value] of array.entries()) {
    console.log(index, value);
    }

    In-place Destructuring

    It can destructure object on the go:

    const persons = [{ name: 'John Smith' }, { name: 'Jane Doe' }];

    for (const { name } of persons) {
    console.log(name); // returns: 'John Smith' \n 'Jane Doe'
    }

    In this example, for...of loop not only iterates over objects within an array but also automatically destructures them by getting the value of the name key. Thanks to it, the console.log will be printing the names in one line.

    Iterating over Function Arguments

    Thanks to existance of special function variable arguments, for...of can loop over undefined amount of arguments.

    Function will return sum of any number of integers provided thanks to for-of loop
    function sum() {
    let sum = 0;
    for (const number of arguments) {
    sum += number;
    }
    return sum;
    }

    sum(1, 2, 3); // returns: 6

    For in

    for...in loop is a good idea when you want to loop over object prototype methods and properties. Any other scenario? Not worth it. Don't use it. Just don't.

    for (const key in object) {
    console.log(key);
    }

    forEach

    forEach iterates directly over an array. It applies function to each item but does not return anything.

    array.forEach((item, index, array) => {
    console.log(`${item} has index ${index}`);
    if (index === array.length - 1) {
    console.log('Last iteration!');
    }
    });

    It differs from other loops:

    • No need to define an iteration variable.
    • continue or break won't work.
    • In the callback function, we can leverage up to three optional parameters for an array: item, index, array.
    • Because it uses a callback function, the logic is block scoped.

    In most scenarios, the for...of loop will be a better choice.


    While Loops

    While

    A while loop executes its statement as long as the condition evaluates to true.

    Infinite while loop
    let run = true
    while (run === true) {
    console.log('To the infinity and beyond!');
    }

    To break out of while loop, there must be logic within it that will change the condition to false (or a break statement):

    let run = true;
    let i = 0;
    while (run === true) {
    console.log('To the infinity and beyond!');
    i++;
    if (i > 10) {
    run = false;
    }
    }

    or just:

    This loop has the same outcome as the one above
    let run = true;
    let i = 0;
    while (i <= 10) {
    console.log('To the infinity and beyond!');
    i++;
    }

    while loop is the best option for iterating over big arrays.

    Do While

    Same as while, but the code runs once before evaluating the condition.

    do {
    console.log('Running!');
    } while (run === true)

    Perfect when you need to run an API call, check whether there are more pages of outcomes and act accordingly.

    You Should Know

    JavaScript support labels for loops. It allows you to name each loop for even better control with both continue and break statements.

    Labelled loop example using a nested for loops
    MainLoopLabel:
    for (let i = 0; i < array.length; i++) {
    // Logic
    SecondaryLoopLabel:
    for (let j = 0; j < array[i].length; j++) {
    // Logic
    if (array[i][j] === 'important') {
    break MainLoopLabel;
    };
    };
    };

    As you can see, in the first line we added a label for the first for loop. Then, in the statement within the second for loop, we used break followed by the label. Once executed, it will break both for loops, even if there were still iterations in the main one. The same approach works with the continue statement.

    - - +

    JS Loops

    JavaScript offers four for loops and two while loops. What's the difference?

    +

    For Loops

    +

    For

    +

    The classic for loop might be a bit long to write, but it has a lot of excellent properties:

    +
      +
    • Available in each JavaScript version.
    • +
    • Works with break and continue statements for better looping control.
    • +
    • Both initial and increment expressions can do multiple things.
    • +
    • Condition is not limited to iterable size.
    • +
    • Fast across various scenarios.
    • +
    +
    Example of for loop iterating over an array
    for (let i = 0; i < array.length; i++) {
    console.log(array[i]);
    }
    +

    Let's break the script down to five steps each for loop follows:

    +
      +
    1. Execute initial expression (let i = 0 in the above example).
    2. +
    3. Evaluate the condition (i < array.length). If it is false - the loop terminates. If true:
    4. +
    5. The statement within the loop is executed (console.log(array[i])).
    6. +
    7. Finally, the increment expression will evaluate (i++).
    8. +
    9. The loop goes back to step 2 until it is false.
    10. +
    +

    If in doubt of which loop to use, pick the classic. To optimize speed, cache the length used for condition:

    +
    Initial expression assigns array.length to a variable to cache it
    for (let i = 0, arrayLength = array.length; i < arrayLength; i++) {
    console.log(array[i]);
    }
    +

    For of

    +

    For...of loop came to JavaScript in ES6 (as many good things have). It loops over iterables: strings, arrays, NodeLists, maps, sets and other array-like objects.

    +
    Example of for...of loop iterating over letters of a string
    for (const letter of name) {
    console.log(letter);
    }
    +

    This loop is blazing fast for very small iterables. From martech perspective, it is a fantastic tool to iterate over NodeLists/HTMLCollections when working with DOM. Works great for working with outputs of API calls. Worth also using for operating on split-string-arrays (for example comma-separated strings).

    +

    It has many qualities that set it apart from the classic for loop:

    +

    Key-Value Pair of Object

    +

    It can iterate over key-value paired iterators (for example map or even object - thanks to Object.entries()):

    +
    for (const [key, value] of Object.entries(object)) {
    console.log(key, value);
    }
    +

    Index-Value Pair of Array

    +

    It can catch array values along with indexes:

    +
    for (const [index, value] of array.entries()) {
    console.log(index, value);
    }
    +

    In-place Destructuring

    +

    It can destructure object on the go:

    +
    const persons = [{ name: 'John Smith' }, { name: 'Jane Doe' }];

    for (const { name } of persons) {
    console.log(name); // returns: 'John Smith' \n 'Jane Doe'
    }
    +

    In this example, for...of loop not only iterates over objects within an array but also automatically destructures them by getting the value of the name key. Thanks to it, the console.log will be printing the names in one line.

    +

    Iterating over Function Arguments

    +

    Thanks to existance of special function variable arguments, for...of can loop over undefined amount of arguments.

    +
    Function will return sum of any number of integers provided thanks to for-of loop
    function sum() {
    let sum = 0;
    for (const number of arguments) {
    sum += number;
    }
    return sum;
    }

    sum(1, 2, 3); // returns: 6
    +

    For in

    +

    for...in loop is a good idea when you want to loop over object prototype methods and properties. Any other scenario? Not worth it. Don't use it. Just don't.

    +
    for (const key in object) {
    console.log(key);
    }
    +

    forEach

    +

    forEach iterates directly over an array. It applies function to each item but does not return anything.

    +
    array.forEach((item, index, array) => {
    console.log(`${item} has index ${index}`);
    if (index === array.length - 1) {
    console.log('Last iteration!');
    }
    });
    +

    It differs from other loops:

    +
      +
    • No need to define an iteration variable.
    • +
    • continue or break won't work.
    • +
    • In the callback function, we can leverage up to three optional parameters for an array: item, index, array.
    • +
    • Because it uses a callback function, the logic is block scoped.
    • +
    +

    In most scenarios, the for...of loop will be a better choice.

    +
    +

    While Loops

    +

    While

    +

    A while loop executes its statement as long as the condition evaluates to true.

    +
    Infinite while loop
    let run = true
    while (run === true) {
    console.log('To the infinity and beyond!');
    }
    +

    To break out of while loop, there must be logic within it that will change the condition to false (or a break statement):

    +
    let run = true;
    let i = 0;
    while (run === true) {
    console.log('To the infinity and beyond!');
    i++;
    if (i > 10) {
    run = false;
    }
    }
    +

    or just:

    +
    This loop has the same outcome as the one above
    let run = true;
    let i = 0;
    while (i <= 10) {
    console.log('To the infinity and beyond!');
    i++;
    }
    +

    while loop is the best option for iterating over big arrays.

    +

    Do While

    +

    Same as while, but the code runs once before evaluating the condition.

    +
    do {
    console.log('Running!');
    } while (run === true)
    +

    Perfect when you need to run an API call, check whether there are more pages of outcomes and act accordingly.

    +
    You Should Know

    JavaScript support labels for loops. It allows you to name each loop for even better control with both continue and break statements.

    Labelled loop example using a nested for loops
    MainLoopLabel:
    for (let i = 0; i < array.length; i++) {
    // Logic
    SecondaryLoopLabel:
    for (let j = 0; j < array[i].length; j++) {
    // Logic
    if (array[i][j] === 'important') {
    break MainLoopLabel;
    };
    };
    };

    As you can see, in the first line we added a label for the first for loop. Then, in the statement within the second for loop, we used break followed by the label. Once executed, it will break both for loops, even if there were still iterations in the main one. The same approach works with the continue statement.

    \ No newline at end of file diff --git a/docs/js/snippets/engage-with-countdown/index.html b/docs/js/snippets/engage-with-countdown/index.html index 40e6078ad..5f44eaebd 100644 --- a/docs/js/snippets/engage-with-countdown/index.html +++ b/docs/js/snippets/engage-with-countdown/index.html @@ -1,24 +1,63 @@ - + - -Engage with Countdown | Mateusz Dąbrowski + +Engage with Countdown | Mateusz Dąbrowski - - - + + + -
    -

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    Outline

    1. Learn how to implement the solution
    2. Adapt it to the story you are telling
    3. Leverage personalisation for even better results

    Lured visitors to your landing page? Great! Now it is time to convert them to your cause. Whitepaper download, product purchase or enrollment, doesn't matter. In each case, you will fight for the attention of the user and drive him towards the goal set for him. It's not easy in the modern web environment, but even the basics might give you the upper hand.

    Final countdown

    Let's talk about a simple solution you can implement on your landing page in just 8 minutes and 0 seconds — a counter.

    To add a dynamic countdown to your website, you will need basic HTML (to put it into a specific place) and a JavaScript code to do the math. CSS is optional but might spice up the style of your page.

    HTML

    Firstly, you will need to create an id attribute to mark the container in which you want to display the counter. It might be on the <p> element for an inline solution or on <div> element were you to create a more visual version.

    Next, the spans. Add empty <span> elements with the class corresponding to the time unit you want to show. JavaScript will swap it for the correct numeric value and dynamically change it as time passes. You can add just hours, or you can go for full spectrum.

    For example, did you know there is only 215 days, 21 hours, 4 minutes and 33 seconds left till 55th anniversary of the first moon landing?

    <p id="counter1">
    For example, did you know there is only <span class="days"></span> days, <span class="hours"></span> hours, <span class="minutes"></span> minutes and <span class="seconds"></span> seconds left till 50th anniversary of the first moonlanding?
    </p>

    <script>
    function getTimeRemaining(endtime) {
    const now = new Date().getTime();
    const t = endtime - now;
    const seconds = Math.floor((t / 1000) % 60);
    const minutes = Math.floor((t / 1000 / 60) % 60);
    const hours = Math.floor((t / (1000 * 60 * 60)) % 24);
    const days = Math.floor(t / (1000 * 60 * 60 * 24));
    return {
    'total': t,
    'days': days,
    'hours': hours,
    'minutes': minutes,
    'seconds': seconds
    };
    }

    function initializeClock(element, endtime) {
    const clock = document.querySelector(element);
    const daysSpan = clock.querySelector('.days');
    const hoursSpan = clock.querySelector('.hours');
    const minutesSpan = clock.querySelector('.minutes');
    const secondsSpan = clock.querySelector('.seconds');

    function updateClock() {
    const t = getTimeRemaining(endtime);
    daysSpan.innerHTML = t.days;
    hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
    minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
    secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);
    if (t.total <= 0) {
    clearInterval(timeinterval);
    }
    }
    updateClock();
    const timeinterval = setInterval(updateClock, 1000);
    }

    /* Declare deadline time */
    const deadline = new Date("2019-07-20T20:17:00+00:00").getTime()
    /* Trigger counter function by targeting specific element and passing the above deadline */
    initializeClock('#counter1', deadline);
    </script>

    JavaScript

    There is much more fun in the JavaScript part. Worry not - you don't need to know the language at all. Let's have a look at the lines to understand what is happening on the general level and then focus on personalisation options.

    Function getTimeRemaining

    The first function does the math behind countdown. With the deadline set for the counter and the current time took from visitor's hardware, it calculates the remaining values of each time unit.

    Remember to keep there those and only those units that you actually use in your counter. The rest should be deleted (for example, if you want to get rid of the day unit, remove both the const days = (...) line and 'days': days, from the return statement).

    Function initializeClock

    The second function is responsible for finding the id attribute and <span> elements we created in the HTML part and updating the countdown every second. Simple and only possible edit would be to delete the line with time unit that will not be used, just as mentioned above.

    Function updateClock

    The job of the last one is to swap span elements targeted in initializeClock to values calculated by getTimeRemaining - and to stop counter refreshing after it gets to zero. Again - only edit needed would be to delete the unneeded unit.

    To not leave you with “delete this, delete that” talk and empty hands, feel free to take a look at a simplified sample code that counts only days. As for the placement in your code - it will be best to put the <script>(...)</script> part right before the closing </body> tag.

    Counting options

    Time for the important part - the one you will always edit. The counter's deadline. You probably already noticed const deadline in the sample and guessed it is the line we will focus on now. It might look a bit intimidating with the weird structure, but in this way, it actually gives you a lot of power. This date formatting is an example of an ISO 8601 standard.

    const deadline = new Date("2077-07-20T20:17:00+00:00").getTime()

    To use it, insert date in a YYYY-MM-DDThh:mm:ss +hh:mm format. The T is just a delimiter between date and time, +hh:mm, on the other hand, allows you to add time variable (for example summertime change).

    However, depending on the needs, you may want to use other available formats, for example, simplified only-date format perfect when you need to count days.

    const deadline = new Date("2077-01-31").getTime();

    Another option is to calculate the amount of time to count down from instead of a static end date. It might be a much better solution if you want to create a feeling of pressure for a small task or engage visitor without a real deadline on your side.

    To use this solution, you need to declare the starting value. In below example, it is set to 15 days. The code multiplies 1000 milliseconds times 60 seconds times 60 minutes times 24 hours. Want to count 5 minutes? Go for 1000 60 60 * 5.

    const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);

    Take advantage of dynamic content

    Simple countdown on landing page already can make an enormous difference to your conversion rate. But, of course, you can get even more out of it by using the toolset of your marketing automation tool.

    There are many cases where urgency is a perfect solution, however, not always all visitors should +

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    +

    Outline

    +
      +
    1. Learn how to implement the solution
    2. +
    3. Adapt it to the story you are telling
    4. +
    5. Leverage personalisation for even better results
    6. +
    +

    Lured visitors to your landing page? Great! Now it is time to convert them to your cause. Whitepaper download, product purchase or enrollment, doesn't matter. In each case, you will fight for the attention of the user and drive him towards the goal set for him. It's not easy in the modern web environment, but even the basics might give you the upper hand.

    +

    Final countdown

    +

    Let's talk about a simple solution you can implement on your landing page in just 8 minutes and 0 seconds — a counter.

    +

    To add a dynamic countdown to your website, you will need basic HTML (to put it into a specific place) and a JavaScript code to do the math. CSS is optional but might spice up the style of your page.

    +

    HTML

    +

    Firstly, you will need to create an id attribute to mark the container in which you want to display the counter. It might be on the <p> element for an inline solution or on <div> element were you to create a more visual version.

    +

    Next, the spans. Add empty <span> elements with the class corresponding to the time unit you want to show. JavaScript will swap it for the correct numeric value and dynamically change it as time passes. You can add just hours, or you can go for full spectrum.

    +

    For example, did you know there is only 150 days, 22 hours, 35 minutes and 52 seconds left till 55th anniversary of the first moon landing?

    +
    <p id="counter1">
    For example, did you know there is only <span class="days"></span> days, <span class="hours"></span> hours, <span class="minutes"></span> minutes and <span class="seconds"></span> seconds left till 50th anniversary of the first moonlanding?
    </p>

    <script>
    function getTimeRemaining(endtime) {
    const now = new Date().getTime();
    const t = endtime - now;
    const seconds = Math.floor((t / 1000) % 60);
    const minutes = Math.floor((t / 1000 / 60) % 60);
    const hours = Math.floor((t / (1000 * 60 * 60)) % 24);
    const days = Math.floor(t / (1000 * 60 * 60 * 24));
    return {
    'total': t,
    'days': days,
    'hours': hours,
    'minutes': minutes,
    'seconds': seconds
    };
    }

    function initializeClock(element, endtime) {
    const clock = document.querySelector(element);
    const daysSpan = clock.querySelector('.days');
    const hoursSpan = clock.querySelector('.hours');
    const minutesSpan = clock.querySelector('.minutes');
    const secondsSpan = clock.querySelector('.seconds');

    function updateClock() {
    const t = getTimeRemaining(endtime);
    daysSpan.innerHTML = t.days;
    hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
    minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
    secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);
    if (t.total <= 0) {
    clearInterval(timeinterval);
    }
    }
    updateClock();
    const timeinterval = setInterval(updateClock, 1000);
    }

    /* Declare deadline time */
    const deadline = new Date("2019-07-20T20:17:00+00:00").getTime()
    /* Trigger counter function by targeting specific element and passing the above deadline */
    initializeClock('#counter1', deadline);
    </script>
    +

    JavaScript

    +

    There is much more fun in the JavaScript part. Worry not - you don't need to know the language at all. Let's have a look at the lines to understand what is happening on the general level and then focus on personalisation options.

    +

    Function getTimeRemaining

    +

    The first function does the math behind countdown. With the deadline set for the counter and the current time took from visitor's hardware, it calculates the remaining values of each time unit.

    +

    Remember to keep there those and only those units that you actually use in your counter. The rest should be deleted (for example, if you want to get rid of the day unit, remove both the const days = (...) line and 'days': days, from the return statement).

    +

    Function initializeClock

    +

    The second function is responsible for finding the id attribute and <span> elements we created in the HTML part and updating the countdown every second. Simple and only possible edit would be to delete the line with time unit that will not be used, just as mentioned above.

    +

    Function updateClock

    +

    The job of the last one is to swap span elements targeted in initializeClock to values calculated by getTimeRemaining - and to stop counter refreshing after it gets to zero. Again - only edit needed would be to delete the unneeded unit.

    +

    To not leave you with “delete this, delete that” talk and empty hands, feel free to take a look at a simplified sample code that counts only days. As for the placement in your code - it will be best to put the <script>(...)</script> part right before the closing </body> tag.

    +

    Counting options

    +

    Time for the important part - the one you will always edit. The counter's deadline. You probably already noticed const deadline in the sample and guessed it is the line we will focus on now. It might look a bit intimidating with the weird structure, but in this way, it actually gives you a lot of power. This date formatting is an example of an ISO 8601 standard.

    +
    const deadline = new Date("2077-07-20T20:17:00+00:00").getTime()
    +

    To use it, insert date in a YYYY-MM-DDThh:mm:ss **+**hh:mm format. The T is just a delimiter between date and time, **+**hh:mm, on the other hand, allows you to add time variable (for example summertime change).

    +

    However, depending on the needs, you may want to use other available formats, for example, simplified only-date format perfect when you need to count days.

    +
    const deadline = new Date("2077-01-31").getTime();
    +

    Another option is to calculate the amount of time to count down from instead of a static end date. It might be a much better solution if you want to create a feeling of pressure for a small task or engage visitor without a real deadline on your side.

    +

    To use this solution, you need to declare the starting value. In below example, it is set to 15 days. The code multiplies 1000 milliseconds times 60 seconds times 60 minutes times 24 hours. Want to count 5 minutes? Go for 1000 * 60 * 60 * 5.

    +
    const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);
    +

    Take advantage of dynamic content

    +

    Simple countdown on landing page already can make an enormous difference to your conversion rate. But, of course, you can get even more out of it by using the toolset of your marketing automation tool.

    +

    There are many cases where urgency is a perfect solution, however, not always all visitors should see the same timeframe. An example? Renewal notification that counts downtime before a subscription expires. Instead of a -static product end date, implement the counter and put some pressure with seconds running out in real-time.

    To do this, make your marketing automation tool push a date value (in above mentioned ISO 8601 format) from the visitor data model right into var deadline JavaScript line.

    In Salesforce Marketing Cloud, you can use either AMPScript personalisation string or SSJS personalisation string:

    /* Remember to check whether the date you are using has Local or System based timezone */
    const deadline = new Date('<ctrl:field name=DateTypeAttributeName />').getTime();

    Wondering what will happen with visitors that don't have this date value? With just personalisation string such users will see the counter set to zero right from the start. Of course, we would rather not have it that way. Thankfully SSJS personalisations strings allow us to add default value very easily:

    const deadline = new Date('<ctrl:field name=DateTypeAttributeName default='2077-07-20T20:17:00+00:00' />').getTime();

    You can also easily create a dynamic content block that will be visible only when the date from personalisation string is soon enough, by leveraging a simple if/else logic of SSJS.

    Use it hard. How? Put that renewal offer with a counter inside a dynamic content and insert it into every content landing page. Simple and quick solution to make sure your customers will be notified when they should. You can also put single dynamic content box related to events or webinars and push information with the counter about the nearest happening one. Just be sure to leverage dynamic content options to show different texts depending on visitor persona. And, of course, update that dynamic content after the event.

    What next? Take the code, implement on a landing page, build an urgency fueled story and watch boosted engagement do its job. You can count on it.

    You Should Know

    As emails don't support JavaScript, you won't be able to leverage the above code for your sends. However, that doesn't mean you cannot increase engagement with a countdown in your outbound.

    Multiple solutions create dynamically changing .gifs that allows you to create a real-time timer in your email. I'm using Sendtric. A different approach, same engagement boosting value.

    - - +static product end date, implement the counter and put some pressure with seconds running out in real-time.

    +

    To do this, make your marketing automation tool push a date value (in above mentioned ISO 8601 format) from the visitor data model right into var deadline JavaScript line.

    +

    In Salesforce Marketing Cloud, you can use either AMPScript personalisation string or SSJS personalisation string:

    /* Remember to check whether the date you are using has Local or System based timezone */
    const deadline = new Date('<ctrl:field name=DateTypeAttributeName />').getTime();

    Wondering what will happen with visitors that don't have this date value? With just personalisation string such users will see the counter set to zero right from the start. Of course, we would rather not have it that way. Thankfully SSJS personalisations strings allow us to add default value very easily:

    const deadline = new Date('<ctrl:field name=DateTypeAttributeName default='2077-07-20T20:17:00+00:00' />').getTime();

    You can also easily create a dynamic content block that will be visible only when the date from personalisation string is soon enough, by leveraging a simple if/else logic of SSJS.

    +

    Use it hard. How? Put that renewal offer with a counter inside a dynamic content and insert it into every content landing page. Simple and quick solution to make sure your customers will be notified when they should. You can also put single dynamic content box related to events or webinars and push information with the counter about the nearest happening one. Just be sure to leverage dynamic content options to show different texts depending on visitor persona. And, of course, update that dynamic content after the event.

    +

    What next? Take the code, implement on a landing page, build an urgency fueled story and watch boosted engagement do its job. You can count on it.

    +
    You Should Know

    As emails don't support JavaScript, you won't be able to leverage the above code for your sends. However, that doesn't mean you cannot increase engagement with a countdown in your outbound.

    Multiple solutions create dynamically changing .gifs that allows you to create a real-time timer in your email. I'm using Sendtric. A different approach, same engagement boosting value.

    \ No newline at end of file diff --git a/docs/js/snippets/export-import-document-sfmc-roles/index.html b/docs/js/snippets/export-import-document-sfmc-roles/index.html index 4c5d5a692..6d2dc7cb2 100644 --- a/docs/js/snippets/export-import-document-sfmc-roles/index.html +++ b/docs/js/snippets/export-import-document-sfmc-roles/index.html @@ -1,22 +1,80 @@ - + - -Export, Import & Document SFMC Roles | Mateusz Dąbrowski + +Export, Import & Document SFMC Roles | Mateusz Dąbrowski - - - + + + -
    -

    Export, Import & Document SFMC Roles

    Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.

    While you get a set of standard user Roles in Salesforce Marketing Cloud, those are rarely enough. Instead, they are the base on which you can create custom-tailored solutions that align with your business architecture.

    You Should Know

    The best way to work with Roles and Permissions in Salesforce Marketing Cloud is to leverage standard roles and build on top of them with custom permissions/roles.

    On top of that, standard Roles are silently changing from release to release as permissions come and go, so keeping track of them is crucial to have a clear picture of what your users can do.

    Marketing Cloud doesn't make it easy. There is no option to clone existing Roles to serve as a starting point for a new custom one. There is no option to export and import them between SFMC accounts. There is no option to create good documentation on them (unless you have a kink for super long print screens).

    Here comes JavaScript and Document Object Model (DOM) to unlock all those scenarios.

    Fear not - you don't have to be a developer to leverage it. I will describe everything step-by-step and share ready-to-use snippets with you. Let's dive in.

    You Should Know

    When working with multiple roles or overlapping permissions, be sure to check what is the outcome on the user.

    Marketing Cloud goes with the most restrictive resulting permission possible:

    1. If at least one permission (role-based or individual) is set to Deny - the user will not be able to use the feature.
    2. If there is neither Allow nor Deny permission - the user will not be able to use the feature.
    3. If there is at least one Allow permission and not even one Deny permission - the user will be able to use the feature.

    You can check the outcome by going to Setup > Users > Users > clicking checkbox next to a user > clicking Manage Roles > Edit Permissions. In this place, you can not only configure individual permissions but also, by expanding to the final permission level, check current result permission along with the source for that state.

    Where the magic happens

    To start using those SFMC Role-related, DOM-fueled solutions:

    1. Go to Marketing Cloud Setup » Users » Roles.
    2. Click on the name of the Role you want to work with.
    3. Click the expand all Button to see the whole permission tree for the Role.
    4. Right-click any permission name within that tree and select Inspect Element.
    5. This will open a Developer Console in a new part of your browser. Select the Console tab.
    6. [Optional] Click the trash icon visible in the top left or right of the Console (depending on the browser you use) to clean up the working space.
    7. You are ready for the fun!
    You Should Know

    If any of the solutions described later in this article doesn't work:

    1. Inspect one of the permission names again (either with a right-click or using the aim icon visible on the top left side of the Console).
    2. If above didn't help, refresh the page and go through the steps once more.

    Export & Import SFMC Roles

    The export and import solution is super helpful when you want to either clone an existing Role and make some changes or move your perfect, tried and tested custom Role to yet another Salesforce Marketing Cloud Account.

    It will require a two-step approach.

    Exporting an SFMC Role

    Access the Console and paste the below code:

    Export SFMC role
    let permissionsExport = {};
    for (const permission of document.querySelectorAll('input[type="checkbox"]')) {
    permissionsExport[permission.id] = permission.checked;
    };
    console.log(JSON.stringify(permissionsExport));

    Click enter to run it.

    It will loop through all the checkboxes that you can see next to the permissions, save them in a single JavaScript object and output them to the Console. Yeah, it looks awful, but that's all you need - list of checkboxes along with their status.

    Save this long text (either by highlighting and copy-pasting or by right-clicking in an empty space within the Console row and clicking Copy Selected). It should start with { and end with }.

    Importing a SFMC Role

    Once you have your Role export saved, go to the new Role. It can be either an existing Role you want to overwrite or a new Role (in the same or different SFMC account).

    Access the Console and paste the below code:

    Import SFMC role
    let permissionsImport = {}; // replace {} with the object copied from Export script output
    for (const [permissionId, permissionStatus] of Object.entries(permissionsImport)) {
    document.getElementById(permissionId).checked = permissionStatus;
    }

    Change the {} in the first line with the export text you saved and click enter to run it.

    It will loop through all the saved checkboxes and update their state to the one from your export. If some new checkboxes don't exist in the export (for example, you did your export before Marketing Cloud Release that added some new permissions), those new ones will stay unchanged.

    That's it. You cloned a Role.

    Now, as you can see, the export text was not readable. If you don't want to clone a Role but rather create documentation for it, there is yet another script that is just as easy to use.

    Document SFMC Roles

    Documenting Roles and Permissions is not easy. You cannot just copy-paste what you see, the HTML is a mess, and the indented names are not unique. Sure, you can print screen it, but that's a lot of checkboxes. And such images aren't accessible documentation. There must be a better way.

    And there is, so access the Console and paste the below code:

    Create documentation of your SFMC role
    let permissions = {};
    /* Loop through all permission checkboxes to get their name and state */
    for (const permission of document.querySelectorAll('input[type="checkbox"]')) {
    /* Get the lowest-level permission name */
    let permissionName = permission.closest('tr').querySelector('div.PermissionNameText').innerText;

    /* Loop through all levels of permissions to build full path for each permission */
    let permissionContainer = permission.closest('table');
    do {
    permissionContainer = permissionContainer.parentElement.previousElementSibling;
    let permissionParentName = permissionContainer?.querySelector('div.PermissionNameText')?.innerText;
    if (permissionParentName) permissionName = `${permissionParentName} - ${permissionName}`;
    } while (permissionContainer && permissionContainer.id !== 'RolePanel');

    /* Differentiate between Allowed and Denied checkboxes */
    let permissionType = permission.id.startsWith('a') ? 'Allowed' : 'Denied';

    /* Insert permission state into permissions object */
    if (!permissions[permissionName]) permissions[permissionName] = {};
    permissions[permissionName][permissionType] = permission.checked;
    };

    /* Output permissions in documentation-friendly format (CSV) */
    const delimiter = '\t'; // Configure prefered CSV delimiter (tab, comma, pipe, etc.)
    let csv = `Permission${delimiter}Allowed${delimiter}Denied\n`; // Headers
    /* Loop through permissions object to build a single string for easy copying from console to table */
    for (const [permissionName, permissionStatus] of Object.entries(permissions)) {
    csv += `${permissionName}${delimiter}${permissionStatus.Allowed}${delimiter}${permissionStatus.Denied}\n`;
    };
    /* Clean up uneeded whitespace */
    csv = csv.replace(/\n\t/g, '\t').replace(/\n /g, ' ');
    console.log(csv);

    Click enter to run it.

    It will loop through all the checkboxes that you can see next to the permissions and:

    • Save the permission name (for example, View All Contacts).
    • Prefix it with all the parent permissions to get a full path (for example, Contacts - Contact Builder - View All Contacts).
    • Capture the state of Allow and Deny (as a boolean).
    • Output it to the Console as a single long text with Headers and delimiter of your choice.

    The default delimiter is a tab (\t) because it allows you to copy-paste the outcome from Console to a spreadsheet and have it automatically populate the columns. However, depending on your needs, you can change the delimiter variable to something else, like a comma (,) or pipe (|).

    Save this long text in its entirety (either by highlighting and copy-pasting or by right-clicking in empty space within the Console row and clicking Copy Selected) - I recommend pushing it straight to a spreadsheet to leverage the autoformatting and filtering capabilities.

    Add the Name of the Role and its purpose stored in the Description field, and that's it. You are good to go.

    Backup of Standard Roles

    As the default System Roles permissions in Salesforce Marketing Cloud can be edited freely and currently there is no easy way to revert those changes, I created a backup repository for you with all out-of-the-box configurations.

    SFMC Roles Backup
    - - +

    Export, Import & Document SFMC Roles

    Backup, clone, and move cross-account the Salesforce Marketing Cloud roles. In seconds.

    +

    While you get a set of standard user Roles in Salesforce Marketing Cloud, those are rarely enough. Instead, they are the base on which you can create custom-tailored solutions that align with your business architecture.

    +
    You Should Know

    The best way to work with Roles and Permissions in Salesforce Marketing Cloud is to leverage standard roles and build on top of them with custom permissions/roles.

    +

    On top of that, standard Roles are silently changing from release to release as permissions come and go, so keeping track of them is crucial to have a clear picture of what your users can do.

    +

    Marketing Cloud doesn't make it easy. There is no option to clone existing Roles to serve as a starting point for a new custom one. There is no option to export and import them between SFMC accounts. There is no option to create good documentation on them (unless you have a kink for super long print screens).

    +

    Here comes JavaScript and Document Object Model (DOM) to unlock all those scenarios.

    +

    Fear not - you don't have to be a developer to leverage it. I will describe everything step-by-step and share ready-to-use snippets with you. Let's dive in.

    +
    You Should Know

    When working with multiple roles or overlapping permissions, be sure to check what is the outcome on the user.

    Marketing Cloud goes with the most restrictive resulting permission possible:

      +
    1. If at least one permission (role-based or individual) is set to Deny - the user will not be able to use the feature.
    2. +
    3. If there is neither Allow nor Deny permission - the user will not be able to use the feature.
    4. +
    5. If there is at least one Allow permission and not even one Deny permission - the user will be able to use the feature.
    6. +

    You can check the outcome by going to Setup > Users > Users > clicking checkbox next to a user > clicking Manage Roles > Edit Permissions. In this place, you can not only configure individual permissions but also, by expanding to the final permission level, check current result permission along with the source for that state.

    +

    Where the magic happens

    +

    To start using those SFMC Role-related, DOM-fueled solutions:

    +
      +
    1. Go to Marketing Cloud Setup » Users » Roles.
    2. +
    3. Click on the name of the Role you want to work with.
    4. +
    5. Click the expand all Button to see the whole permission tree for the Role.
    6. +
    7. Right-click any permission name within that tree and select Inspect Element.
    8. +
    9. This will open a Developer Console in a new part of your browser. Select the Console tab.
    10. +
    11. [Optional] Click the trash icon visible in the top left or right of the Console (depending on the browser you use) to clean up the working space.
    12. +
    13. You are ready for the fun!
    14. +
    +
    You Should Know

    If any of the solutions described later in this article doesn't work:

      +
    1. Inspect one of the permission names again (either with a right-click or using the aim icon visible on the top left side of the Console).
    2. +
    3. If above didn't help, refresh the page and go through the steps once more.
    4. +
    +

    Export & Import SFMC Roles

    +

    The export and import solution is super helpful when you want to either clone an existing Role and make some changes or move your perfect, tried and tested custom Role to yet another Salesforce Marketing Cloud Account.

    +

    It will require a two-step approach.

    +

    Exporting an SFMC Role

    +

    Access the Console and paste the below code:

    +
    Export SFMC role
    let permissionsExport = {};
    for (const permission of document.querySelectorAll('input[type="checkbox"]')) {
    permissionsExport[permission.id] = permission.checked;
    };
    console.log(JSON.stringify(permissionsExport));
    +

    Click enter to run it.

    +

    It will loop through all the checkboxes that you can see next to the permissions, save them in a single JavaScript object and output them to the Console. Yeah, it looks awful, but that's all you need - list of checkboxes along with their status.

    +

    Save this long text (either by highlighting and copy-pasting or by right-clicking in an empty space within the Console row and clicking Copy Selected). It should start with { and end with }.

    +

    Importing a SFMC Role

    +

    Once you have your Role export saved, go to the new Role. It can be either an existing Role you want to overwrite or a new Role (in the same or different SFMC account).

    +

    Access the Console and paste the below code:

    +
    Import SFMC role
    let permissionsImport = {}; // replace {} with the object copied from Export script output
    for (const [permissionId, permissionStatus] of Object.entries(permissionsImport)) {
    document.getElementById(permissionId).checked = permissionStatus;
    }
    +

    Change the {} in the first line with the export text you saved and click enter to run it.

    +

    It will loop through all the saved checkboxes and update their state to the one from your export. If some new checkboxes don't exist in the export (for example, you did your export before Marketing Cloud Release that added some new permissions), those new ones will stay unchanged.

    +

    That's it. You cloned a Role.

    +

    Now, as you can see, the export text was not readable. If you don't want to clone a Role but rather create documentation for it, there is yet another script that is just as easy to use.

    +

    Document SFMC Roles

    +

    Documenting Roles and Permissions is not easy. You cannot just copy-paste what you see, the HTML is a mess, and the indented names are not unique. Sure, you can print screen it, but that's a lot of checkboxes. And such images aren't accessible documentation. There must be a better way.

    +

    And there is, so access the Console and paste the below code:

    +
    Create documentation of your SFMC role
    let permissions = {};
    /* Loop through all permission checkboxes to get their name and state */
    for (const permission of document.querySelectorAll('input[type="checkbox"]')) {
    /* Get the lowest-level permission name */
    let permissionName = permission.closest('tr').querySelector('div.PermissionNameText').innerText;

    /* Loop through all levels of permissions to build full path for each permission */
    let permissionContainer = permission.closest('table');
    do {
    permissionContainer = permissionContainer.parentElement.previousElementSibling;
    let permissionParentName = permissionContainer?.querySelector('div.PermissionNameText')?.innerText;
    if (permissionParentName) permissionName = `${permissionParentName} - ${permissionName}`;
    } while (permissionContainer && permissionContainer.id !== 'RolePanel');

    /* Differentiate between Allowed and Denied checkboxes */
    let permissionType = permission.id.startsWith('a') ? 'Allowed' : 'Denied';

    /* Insert permission state into permissions object */
    if (!permissions[permissionName]) permissions[permissionName] = {};
    permissions[permissionName][permissionType] = permission.checked;
    };

    /* Output permissions in documentation-friendly format (CSV) */
    const delimiter = '\t'; // Configure prefered CSV delimiter (tab, comma, pipe, etc.)
    let csv = `Permission${delimiter}Allowed${delimiter}Denied\n`; // Headers
    /* Loop through permissions object to build a single string for easy copying from console to table */
    for (const [permissionName, permissionStatus] of Object.entries(permissions)) {
    csv += `${permissionName}${delimiter}${permissionStatus.Allowed}${delimiter}${permissionStatus.Denied}\n`;
    };
    /* Clean up uneeded whitespace */
    csv = csv.replace(/\n\t/g, '\t').replace(/\n /g, ' ');
    console.log(csv);
    +

    Click enter to run it.

    +

    It will loop through all the checkboxes that you can see next to the permissions and:

    +
      +
    • Save the permission name (for example, View All Contacts).
    • +
    • Prefix it with all the parent permissions to get a full path (for example, Contacts - Contact Builder - View All Contacts).
    • +
    • Capture the state of Allow and Deny (as a boolean).
    • +
    • Output it to the Console as a single long text with Headers and delimiter of your choice.
    • +
    +

    The default delimiter is a tab (\t) because it allows you to copy-paste the outcome from Console to a spreadsheet and have it automatically populate the columns. However, depending on your needs, you can change the delimiter variable to something else, like a comma (,) or pipe (|).

    +

    Save this long text in its entirety (either by highlighting and copy-pasting or by right-clicking in empty space within the Console row and clicking Copy Selected) - I recommend pushing it straight to a spreadsheet to leverage the autoformatting and filtering capabilities.

    +

    Add the Name of the Role and its purpose stored in the Description field, and that's it. You are good to go.

    +

    Backup of Standard Roles

    +

    As the default System Roles permissions in Salesforce Marketing Cloud can be edited freely and currently there is no easy way to revert those changes, I created a backup repository for you with all out-of-the-box configurations.

    +SFMC Roles Backup
    \ No newline at end of file diff --git a/docs/js/snippets/tailor-with-data/index.html b/docs/js/snippets/tailor-with-data/index.html index 042b5b751..d74fd6b02 100644 --- a/docs/js/snippets/tailor-with-data/index.html +++ b/docs/js/snippets/tailor-with-data/index.html @@ -1,22 +1,65 @@ - + - -Tailor the experience with data logic | Mateusz Dąbrowski + +Tailor the experience with data logic | Mateusz Dąbrowski - - - + + + -
    -

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    Outline

    1. Review the use cases possible thanks to the tailored data logic
    2. Check easy to implement script examples
    3. Create personalisation fueled conditional user flows

    Leverage the data

    Most Marketing Automation tools allow you to use the contact and account data for personalisation. Are you inserting a user-specific value from a data model to landing page or email? Creating custom content tailored to the user? Easy and simple. Eloqua's Field Merges or Marketing Cloud's personalisation strings. But you can do so much more!

    Change the structure of the landing page

    Part of your subscription centre should be visible only to your clients? Instead of creating and managing two separate pages, you can use personalisation to check whether the visitor has any license and unhide product-related data & subscription section.

    Create a genuinely dynamic form

    Not keen on asking your customers, again and again, the same questions in your content form? Use personalisation to hide form fields that won't give you new knowledge. The shorter the form, the better.

    Enrich your data

    You got multi picklist storing information on topics that are interesting to your customers? Want to use whitepaper download form to add such data point? Sure, all Marketing Automation Platforms have form processing that will be able to append such value. But unfortunately, in most, you won't be able to check whether it will result in a duplicate data point. You guessed it, personalisation with a simple script can fix it.

    Script your solution

    Time to create a script that will solve the problems mentioned above. Firstly, you will need to pull from your data model.

    For Marketing Cloud, the easiest way is to use the personalisation string. The code is straightforward:

    <ctrl:field name=ProfileAttributeName />

    The only thing you need is the name of the Profile Attribute or Data Extension field. It gets a bit more elaborate if you want to leverage other sources, but still viable. You can use the Lookup function for non-sendable Data Extensions. You can even dig into Salesforce Objects with a bit of AMPScript.

    To create a script that will allow for three use cases mentioned in the first part of the post, we need one more thing - an id attribute. Some elements will already have it (for example, in Eloqua each form field exists in separate div element: <div id='formElement1' ...>). For others, you will have to add it to the HTML manually.

    You Should Know

    You are not limited to the id attribute. Leverage any attribute and capture it with DOM selectors, like document.querySelector() or document.querySelectorAll(). For example, capturing class is great to change multiple related parts of the website at once.

    With personalisation code and value of the id attribute at hand, we can start the (short) scripting.

    Hiding elements on the website

    Hide element with id='idName' if viewers EmailOptedIn attribute has value 'True'
    <script>
    window.addEventListener('load', () => { // 1.
    if ('<ctrl:field name=EmailOptedIn />' === 'True') { // 2.
    document.querySelector('#idValue').display = 'none'; // 3.
    };
    };
    </script>

    Above script has three important lines that deserve some explanation.

    First one uses Event Listener to launch the logic only after the whole page loaded. It is essential, as it guarantees that the browser already rendered the website element you want to hide.

    Next is the if statement. It evaluates the data model value received via personalisation (left side of ==) with another value we choose (right side of ==). In this case, it checks whether Email Opted In for a particular user is set to True (names and values may differ in your data model).

    The third line looks for an HTML element with id equal to 'idValue' and hides it from the user.

    You Should Know

    You can adapt this script to do almost anything. Once you have your element selected with querySelector you can programmatically change its value, add or remove a class from it to impact the CSS applied or even create new elements around it.

    With this script, you can both modify the structure of your landing page and alter the form fields (or even just form field options) visible for the user. Hide some elements, show other, change the style of a web element to make it more prominent on the website. But that's not all!

    Changing elements on the website

    For our data enrichment use case, we will need to alter the script slightly.

    Change value of a hidden form field if Profile Attribute value includes 'Tax'
    <script>
    window.addEventListener('load', () => { // 1.
    const regexSearchValue = /Tax/; // 2.
    if (regexSearchValue.test('<ctrl:field name=Interests />')) { // 3.
    document.querySelector('#alreadyInterested').value = 'True'; // 4.
    };
    };
    </script>

    In this scenario, we have a multi picklist field Interests that captures what fascinates specific customer. If he is captivated by more than one topic, the names are semicolon-separated. A nice marketing tactic is to enrich this list each time the customer engages with something directly related to a particular topic. For example, downloads your new whitepaper.

    In most Marketing Automation Platforms, it is straightforward to append a value to a column. Simple adding, however, leads to a (quite big) possibility of having duplicates. And this is neither good from the data quality perspective nor field length compliance.

    So how to use the above script to enrich your data cleanly? We will need a hidden form field inside the whitepaper download form. In the HTML look for (or create) hidden field input (<input id='alreadyInterested' type='hidden' ...>). The id attribute will be useful again.

    You already know the first line from the previous section. The new things come next. We declare value we want to check in our data model picklist. In this example, we will test whether the user is already interested in Tax topic. The / before and after the word are special characters used for a regular expression.

    The third line is the fastest way to check whether the declared value is already in the Interests field.

    Finally, in case of the value already being in the multi picklist, we put True inside the hidden form field. It enables us to enforce on form processing to append new interest conditionally - only if the hidden field is blank in the submission data.

    Create conditional logic

    Simple manipulation of visibility and values on your landing page is just beginning. You can get even more out of scripted-backed personalisations and take control over user & data flows.

    Looking for an excellent way to tell your Google Analytics whether the user just downloaded a whitepaper or did he also wanted to receive product presentation on top of that? Not keen on creating two mirror-like Thank You pages with different conversion script? Sure!

    Your form processing page should append date stamp to a data model field in case of the user becoming a lead (asking for a product presentation). This data, apart from being a great source of knowledge for your lead reporting and data processing trigger, will be handy for this solution.

    <script>
    const leadCreationDate = '<ctrl:field name=leadCreationDate />';
    if (Date.now() - new Date(leadCreationDate) < 93600000) {
    dataLayer.push({
    // Your Lead conversion dataLayer model
    });
    } else {
    dataLayer.push({
    // Your Whitepaper conversion dataLayer model
    });
    }
    </script>

    Why? Because once you have this script on your Thank You page, you can check how distant in the past the personalised date is. And if it is within minutes, you can be pretty sure the user just became your lead. Which tells the script to push the lead conversion data layer instead of the whitepaper data layer. Simple and quick.

    Remember to take into consideration the difference between local time and server time, which might play a role depending on the Marketing Automation Platform and configuration.

    Possibilities are endless.

    Want to be sure only recognised users will enter your subscription centre?

    Add email address or contact key personalisation. If it is empty, it means Marketing Cloud did not recognise this user. JavaScript can automatically redirect him to your subscription centre entry form that will take care of authorization.

     if ('<ctrl:field name="Email Address" />' == '') {
    window.location.replace('https://redirect.here')
    }

    Want to double-check by querying the Salesforce Core? Add API call within the condition. You can also push some information from a data extension, or profile attributes to an external page. Personalise that data and use JavaScript to append it to redirect link as a query string or send it as a payload within POST call. Imagination is the only limit.

    - - +

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    +

    Outline

    +
      +
    1. Review the use cases possible thanks to the tailored data logic
    2. +
    3. Check easy to implement script examples
    4. +
    5. Create personalisation fueled conditional user flows
    6. +
    +

    Leverage the data

    +

    Most Marketing Automation tools allow you to use the contact and account data for personalisation. Are you inserting a user-specific value from a data model to landing page or email? Creating custom content tailored to the user? Easy and simple. Eloqua's Field Merges or Marketing Cloud's personalisation strings. But you can do so much more!

    +

    Change the structure of the landing page

    +

    Part of your subscription centre should be visible only to your clients? Instead of creating and managing two separate pages, you can use personalisation to check whether the visitor has any license and unhide product-related data & subscription section.

    +

    Create a genuinely dynamic form

    +

    Not keen on asking your customers, again and again, the same questions in your content form? Use personalisation to hide form fields that won't give you new knowledge. The shorter the form, the better.

    +

    Enrich your data

    +

    You got multi picklist storing information on topics that are interesting to your customers? Want to use whitepaper download form to add such data point? Sure, all Marketing Automation Platforms have form processing that will be able to append such value. But unfortunately, in most, you won't be able to check whether it will result in a duplicate data point. You guessed it, personalisation with a simple script can fix it.

    +

    Script your solution

    +

    Time to create a script that will solve the problems mentioned above. Firstly, you will need to pull from your data model.

    +

    For Marketing Cloud, the easiest way is to use the personalisation string. The code is straightforward:

    <ctrl:field name=ProfileAttributeName />

    The only thing you need is the name of the Profile Attribute or Data Extension field. It gets a bit more elaborate if you want to leverage other sources, but still viable. You can use the Lookup function for non-sendable Data Extensions. You can even dig into Salesforce Objects with a bit of AMPScript.

    +

    To create a script that will allow for three use cases mentioned in the first part of the post, we need one more thing - an id attribute. Some elements will already have it (for example, in Eloqua each form field exists in separate div element: <div id='formElement1' ...>). For others, you will have to add it to the HTML manually.

    +
    You Should Know

    You are not limited to the id attribute. Leverage any attribute and capture it with DOM selectors, like document.querySelector() or document.querySelectorAll(). For example, capturing class is great to change multiple related parts of the website at once.

    +

    With personalisation code and value of the id attribute at hand, we can start the (short) scripting.

    +

    Hiding elements on the website

    +
    Hide element with id='idName' if viewers EmailOptedIn attribute has value 'True'
    <script>
    window.addEventListener('load', () => { // 1.
    if ('<ctrl:field name=EmailOptedIn />' === 'True') { // 2.
    document.querySelector('#idValue').display = 'none'; // 3.
    };
    };
    </script>
    +

    Above script has three important lines that deserve some explanation.

    +

    First one uses Event Listener to launch the logic only after the whole page loaded. It is essential, as it guarantees that the browser already rendered the website element you want to hide.

    +

    Next is the if statement. It evaluates the data model value received via personalisation (left side of ==) with another value we choose (right side of ==). In this case, it checks whether Email Opted In for a particular user is set to True (names and values may differ in your data model).

    +

    The third line looks for an HTML element with id equal to 'idValue' and hides it from the user.

    +
    You Should Know

    You can adapt this script to do almost anything. Once you have your element selected with querySelector you can programmatically change its value, add or remove a class from it to impact the CSS applied or even create new elements around it.

    +

    With this script, you can both modify the structure of your landing page and alter the form fields (or even just form field options) visible for the user. Hide some elements, show other, change the style of a web element to make it more prominent on the website. But that's not all!

    +

    Changing elements on the website

    +

    For our data enrichment use case, we will need to alter the script slightly.

    +
    Change value of a hidden form field if Profile Attribute value includes 'Tax'
    <script>
    window.addEventListener('load', () => { // 1.
    const regexSearchValue = /Tax/; // 2.
    if (regexSearchValue.test('<ctrl:field name=Interests />')) { // 3.
    document.querySelector('#alreadyInterested').value = 'True'; // 4.
    };
    };
    </script>
    +

    In this scenario, we have a multi picklist field Interests that captures what fascinates specific customer. If he is captivated by more than one topic, the names are semicolon-separated. A nice marketing tactic is to enrich this list each time the customer engages with something directly related to a particular topic. For example, downloads your new whitepaper.

    +

    In most Marketing Automation Platforms, it is straightforward to append a value to a column. Simple adding, however, leads to a (quite big) possibility of having duplicates. And this is neither good from the data quality perspective nor field length compliance.

    +

    So how to use the above script to enrich your data cleanly? We will need a hidden form field inside the whitepaper download form. In the HTML look for (or create) hidden field input (<input id='alreadyInterested' type='hidden' ...>). The id attribute will be useful again.

    +

    You already know the first line from the previous section. The new things come next. We declare value we want to check in our data model picklist. In this example, we will test whether the user is already interested in Tax topic. The / before and after the word are special characters used for a regular expression.

    +

    The third line is the fastest way to check whether the declared value is already in the Interests field.

    +

    Finally, in case of the value already being in the multi picklist, we put True inside the hidden form field. It enables us to enforce on form processing to append new interest conditionally - only if the hidden field is blank in the submission data.

    +

    Create conditional logic

    +

    Simple manipulation of visibility and values on your landing page is just beginning. You can get even more out of scripted-backed personalisations and take control over user & data flows.

    +

    Looking for an excellent way to tell your Google Analytics whether the user just downloaded a whitepaper or did he also wanted to receive product presentation on top of that? Not keen on creating two mirror-like Thank You pages with different conversion script? Sure!

    +

    Your form processing page should append date stamp to a data model field in case of the user becoming a lead (asking for a product presentation). This data, apart from being a great source of knowledge for your lead reporting and data processing trigger, will be handy for this solution.

    <script>
    const leadCreationDate = '<ctrl:field name=leadCreationDate />';
    if (Date.now() - new Date(leadCreationDate) < 93600000) {
    dataLayer.push({
    // Your Lead conversion dataLayer model
    });
    } else {
    dataLayer.push({
    // Your Whitepaper conversion dataLayer model
    });
    }
    </script>
    +

    Why? Because once you have this script on your Thank You page, you can check how distant in the past the personalised date is. And if it is within minutes, you can be pretty sure the user just became your lead. Which tells the script to push the lead conversion data layer instead of the whitepaper data layer. Simple and quick.

    +

    Remember to take into consideration the difference between local time and server time, which might play a role depending on the Marketing Automation Platform and configuration.

    +

    Possibilities are endless.

    +

    Want to be sure only recognised users will enter your subscription centre?

    +

    Add email address or contact key personalisation. If it is empty, it means Marketing Cloud did not recognise this user. JavaScript can automatically redirect him to your subscription centre entry form that will take care of authorization.

     if ('<ctrl:field name="Email Address" />' == '') {
    window.location.replace('https://redirect.here')
    }

    Want to double-check by querying the Salesforce Core? Add API call within the condition. You can also push some information from a data extension, or profile attributes to an external page. Personalise that data and use JavaScript to append it to redirect link as a query string or send it as a payload within POST call. Imagination is the only limit.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-aggregate-functions/index.html b/docs/sql/sfmc-sql-aggregate-functions/index.html index 881a24056..222acd165 100644 --- a/docs/sql/sfmc-sql-aggregate-functions/index.html +++ b/docs/sql/sfmc-sql-aggregate-functions/index.html @@ -1,22 +1,90 @@ - + - -SFMC SQL Aggregate Functions | Mateusz Dąbrowski + +SFMC SQL Aggregate Functions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Aggregate Functions

    Group rows and apply aggregate functions to see the big picture in your data.

    GROUP BY

    GROUP BY allows you to create aggregation by grouping the input data on selected column(s).

    It limits the data you can SELECT to either GROUP BY column(s) or aggregate functions.

    Let's say you want to check which email domains are most popular in your database.

    SELECT
    Domain
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY Domain

    With this simple query, you have all subscribers grouped by their domain with the number of matching rows thanks to the COUNT function.

    You can quickly improve this query by limiting the records with TOP and sorting ORDER BY to leverage Pareto's principle and pick 20% of the records responsible for 80% of the results. In this case - 20% domains covering approximately 80% subscribers.

    SELECT TOP 20 PERCENT
    Domain
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY Domain
    ORDER BY COUNT(*) DESC

    With such data, you can assess your mailing list and decide, for example, whether using AMP for Email will be worth the effort for your business.

    It is, however, just the beginning of what you can do with GROUP BY. The real magic happens with multiple columns used for the grouping.

    Let's check how the domain numbers are changing in years with the help of the DATEPART function and DateJoined field.

    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY
    Domain
    , DATEPART(YEAR, DateJoined)
    ORDER BY COUNT(*) DESC

    As you can see, by just adding more columns after a comma (order is irrelevant), we can make even more exciting groupings. In this case, we will have a separate row for each domain and year. Easy to see how many Subscribers using Gmail joined your database in 2021 vs 2020.

    You Should Know

    GROUP BY will group NULL values as if they are equal.

    GROUP BY ROLLUP

    ROLLUP takes the multi-column grouping to the next level by showing totals and subtotals in the outcomes. Not useful for campaign segmentation, but excellent for quick analysis and reporting.

    To use it - add the ROLLUP keyword and wrap grouping columns in parentheses.

    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY ROLLUP (
    Domain
    , DATEPART(YEAR, DateJoined)
    )
    ORDER BY COUNT(*) DESC

    In the outcomes, you will see some rows with NULL as columns - those are rows for total and subtotals.

    Notice that the NULLs are either in all columns (total) or the YearJoined column (subtotals). There are no rows with NULL only in Domain. It is because the ROLLUP rolls columns provided in parentheses from right to left when calculating subtotals.

    Order of columns will have a massive impact on outcomes!

    You Should Know

    You can also perform partial rollup by keeping some columns outside of the ROLLUP operator. In the example below, I excluded Domain from the ROLLUP resulting in the lack of total in the outcomes.

    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY
    Domain
    , ROLLUP(DATEPART(YEAR, DateJoined))
    ORDER BY COUNT(*) DESC

    GROUP BY CUBE

    If you thought that right-to-left execution of the ROLLUP is not helping your use case and instead you would rather have all possible groupings - CUBE is here to help.

    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY CUBE (
    Domain
    , DATEPART(YEAR, DateJoined)
    )
    ORDER BY COUNT(*) DESC

    It rolls data like ROLLUP, but for all combinations of columns. Notice in the outcomes the second and third rows with NULLs in first column and count for the whole year.

    COUNT

    COUNT function allows you to count the number of rows that matches a query. It is excellent for both ad hoc data exploration and creating administrative queries that help maintain your instance. It's also a must-have for GROUP BY.

    Let's get the count of our Subscribers in Master Data Extension.

    Count all rows in the _Subscribers Data View
    SELECT COUNT(*)
    FROM ContactMasterDE

    Nice, but it does not give us any information that we couldn't find more comfortable in the User Interface. So, where is the added value?

    For example, in seeing whether you have potential duplicate contacts. Instead of looking for all rows with COUNT(*), we will change the function argument to the specific column to count only its non-NULL values.

    This query will show you which Email Addresses exists on more than one subscriber
    SELECT
    EmailAddress
    , COUNT(EmailAddress) AS EmailCount
    FROM ContactMasterDE
    GROUP BY EmailAddress
    HAVING COUNT(EmailAddress) > 1

    With GROUP BY and HAVING above, we can simplify the output by showing only the duplicate values with corresponding counts.

    You Should Know

    You can take it to the next level with the subquery approach:

    Returns Subscriber Key, Email Address and Duplicate Count of your database
    SELECT
    subscribers.SubscriberKey
    , subscribers.EmailAddress
    , counted.EmailCount
    FROM ContactMasterDE AS subscribers
    INNER JOIN (
    SELECT
    contacts.EmailAddress AS EmailAddress
    , COUNT(contacts.EmailAddress) AS EmailCount
    FROM ContactMasterDE AS contacts
    GROUP BY contacts.EmailAddress
    HAVING COUNT(contacts.EmailAddress) > 1
    ) AS counted
    ON counted.EmailAddress = subscribers.EmailAddress

    This extended query will not only tell you that there are potential duplicates. It will also give you Subscriber Keys of duplicate contacts so that you can investigate the reason and clean up records after fixing the underlying issue.

    Pack it into Automation with Verification Activity on top and keep your database clean with ease.

    COUNT *, ALL and DISTINCT

    There are three approaches to using COUNT that differ slightly from each other.

    • COUNT(*) will return the number of items, including NULL values and duplicates.
    • COUNT(FieldName) / COUNT(ALL FieldName) will return the number on non-NULL values including duplicates.
    • COUNT(DISTINCT FieldName) will return the number of non-NULL and non-duplicate values.
    Let's find out whether we have multiple Subscribers with the same Email Address
    SELECT
    COUNT(EmailAddress) AS EmailCount
    , COUNT(DISTINCT EmailAddress) AS UniqueEmailCount
    FROM _Subscribers

    HAVING

    HAVING works nearly the same as WHERE and allows you to filter outcomes of your GROUP BY.

    This query will show you which Email Addresses exists on more than one subscriber
    SELECT
    EmailAddress
    , COUNT(EmailAddress) AS EmailCount
    FROM _Subscribers
    GROUP BY EmailAddress
    HAVING COUNT(EmailAddress) > 1

    You can leverage all filtering tricks from WHERE. In practice, I mostly use it along with aggregate functions like COUNT.

    HAVING vs WHERE

    I just wrote that HAVING and WHERE work similarly, and both filter the outcomes. What is the difference?

    1. WHERE filters individual data (rows before GROUP BY is applied)
    2. HAVING filters aggregated data (rows after GROUP BY is applied)
    This query will show you which Email Addresses exists on more than one active subscriber
    SELECT
    EmailAddress
    , COUNT(EmailAddress) AS EmailCount
    FROM _Subscribers
    WHERE Status = 'active'
    GROUP BY EmailAddress
    HAVING COUNT(EmailAddress) > 1

    Thanks to using both WHERE and HAVING in this query, we will look only for duplicate active Subscribers. If we have two subscribers with the same email, but one is inactive, this query won't output it.

    You Should Know

    You can use both in the same query and even mix it with DISTINCT.

    However, when building such layered filters, keep in mind the SQL's order of execution for clauses:

    FROM > WHERE > GROUP BY > HAVING > DISTINCT > ORDER BY

    It means that rows filtered with WHERE will not be taken into consideration for GROUP BY and that DISTINCT deduplication will be applied to results grouped and filtered by HAVING - not the source data.

    MIN and MAX

    MIN and MAX functions can help you find the minimum and maximum values within a group.

    As they are aggregate functions, we can use them in both the SELECT part of the query and for filtering with WHERE or HAVING.

    Let's find domains that are no longer getting new subscribers
    SELECT TOP 10
    Domain
    , MIN(DATEDIFF(DAY, DateJoined, GETDATE())) AS YoungestSubscriberDaysOfService
    , MAX(DATEDIFF(DAY, DateJoined, GETDATE())) AS OldestSubscriberDaysOfService
    FROM _Subscribers
    GROUP BY Domain
    ORDER BY MIN(DATEDIFF(DAY, DateJoined, GETDATE())) DESC

    Learn more about MIN and MAX in Numeric Functions documentation.

    AVG

    AVG function allows you to find the average of values within the group.

    It ignores NULL values for the calculation and we can use it in SELECT, WHERE or HAVING part of the query.

    Let's find domain that are bouncing for most users
    SELECT TOP 10
    Domain
    , AVG(BounceCount) AS AverageBounceCount
    FROM _Subscribers
    GROUP BY Domain
    HAVING AVG(BounceCount) > 0
    ORDER BY AVG(BounceCount) DESC

    Learn more about AVG in Numeric Functions documentation.

    You Should Know

    AVG will ignore rows with NULL, which can skew your results. COALESCE will be your best friend to make sense out of imperfect data.

    SUM

    SUM function allows you to find the sum of values within the group.

    It ignores NULL values for the calculation and we can use it in SELECT, WHERE or HAVING part of the query.

    Let's find product categories responsible for the highest income
    SELECT TOP 3
    ProductCategory
    , COUNT(Orders) AS TotalOrders
    , SUM(Price) AS TotalIncome
    FROM Purchases
    WHERE Status = 'Complete'
    GROUP BY ProductCategory
    HAVING SUM(Price) > 1000
    ORDER BY SUM(Price) DESC
    - - +

    SFMC SQL Aggregate Functions

    Group rows and apply aggregate functions to see the big picture in your data.

    +

    GROUP BY

    +

    GROUP BY allows you to create aggregation by grouping the input data on selected column(s).

    +

    It limits the data you can SELECT to either GROUP BY column(s) or aggregate functions.

    +

    Let's say you want to check which email domains are most popular in your database.

    +
    SELECT
    Domain
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY Domain
    +

    With this simple query, you have all subscribers grouped by their domain with the number of matching rows thanks to the COUNT function.

    +

    You can quickly improve this query by limiting the records with TOP and sorting ORDER BY to leverage Pareto's principle and pick 20% of the records responsible for 80% of the results. In this case - 20% domains covering approximately 80% subscribers.

    +
    SELECT TOP 20 PERCENT
    Domain
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY Domain
    ORDER BY COUNT(*) DESC
    +

    With such data, you can assess your mailing list and decide, for example, whether using AMP for Email will be worth the effort for your business.

    +

    It is, however, just the beginning of what you can do with GROUP BY. The real magic happens with multiple columns used for the grouping.

    +

    Let's check how the domain numbers are changing in years with the help of the DATEPART function and DateJoined field.

    +
    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY
    Domain
    , DATEPART(YEAR, DateJoined)
    ORDER BY COUNT(*) DESC
    +

    As you can see, by just adding more columns after a comma (order is irrelevant), we can make even more exciting groupings. In this case, we will have a separate row for each domain and year. Easy to see how many Subscribers using Gmail joined your database in 2021 vs 2020.

    +
    You Should Know

    GROUP BY will group NULL values as if they are equal.

    +

    GROUP BY ROLLUP

    +

    ROLLUP takes the multi-column grouping to the next level by showing totals and subtotals in the outcomes. Not useful for campaign segmentation, but excellent for quick analysis and reporting.

    +

    To use it - add the ROLLUP keyword and wrap grouping columns in parentheses.

    +
    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY ROLLUP (
    Domain
    , DATEPART(YEAR, DateJoined)
    )
    ORDER BY COUNT(*) DESC
    +

    In the outcomes, you will see some rows with NULL as columns - those are rows for total and subtotals.

    +

    Notice that the NULLs are either in all columns (total) or the YearJoined column (subtotals). There are no rows with NULL only in Domain. It is because the ROLLUP rolls columns provided in parentheses from right to left when calculating subtotals.

    +

    Order of columns will have a massive impact on outcomes!

    +
    You Should Know

    You can also perform partial rollup by keeping some columns outside of the ROLLUP operator. In the example below, I excluded Domain from the ROLLUP resulting in the lack of total in the outcomes.

    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY
    Domain
    , ROLLUP(DATEPART(YEAR, DateJoined))
    ORDER BY COUNT(*) DESC
    +

    GROUP BY CUBE

    +

    If you thought that right-to-left execution of the ROLLUP is not helping your use case and instead you would rather have all possible groupings - CUBE is here to help.

    +
    SELECT TOP 20 PERCENT
    Domain
    , DATEPART(YEAR, DateJoined) AS YearJoined
    , COUNT(*) AS SubscriberCount
    FROM _Subscribers
    GROUP BY CUBE (
    Domain
    , DATEPART(YEAR, DateJoined)
    )
    ORDER BY COUNT(*) DESC
    +

    It rolls data like ROLLUP, but for all combinations of columns. Notice in the outcomes the second and third rows with NULLs in first column and count for the whole year.

    +

    COUNT

    +

    COUNT function allows you to count the number of rows that matches a query. It is excellent for both ad hoc data exploration and creating administrative queries that help maintain your instance. It's also a must-have for GROUP BY.

    +

    Let's get the count of our Subscribers in Master Data Extension.

    +
    Count all rows in the _Subscribers Data View
    SELECT COUNT(*)
    FROM ContactMasterDE
    +

    Nice, but it does not give us any information that we couldn't find more comfortable in the User Interface. So, where is the added value?

    +

    For example, in seeing whether you have potential duplicate contacts. Instead of looking for all rows with COUNT(*), we will change the function argument to the specific column to count only its non-NULL values.

    +
    This query will show you which Email Addresses exists on more than one subscriber
    SELECT
    EmailAddress
    , COUNT(EmailAddress) AS EmailCount
    FROM ContactMasterDE
    GROUP BY EmailAddress
    HAVING COUNT(EmailAddress) > 1
    +

    With GROUP BY and HAVING above, we can simplify the output by showing only the duplicate values with corresponding counts.

    +
    You Should Know

    You can take it to the next level with the subquery approach:

    Returns Subscriber Key, Email Address and Duplicate Count of your database
    SELECT
    subscribers.SubscriberKey
    , subscribers.EmailAddress
    , counted.EmailCount
    FROM ContactMasterDE AS subscribers
    INNER JOIN (
    SELECT
    contacts.EmailAddress AS EmailAddress
    , COUNT(contacts.EmailAddress) AS EmailCount
    FROM ContactMasterDE AS contacts
    GROUP BY contacts.EmailAddress
    HAVING COUNT(contacts.EmailAddress) > 1
    ) AS counted
    ON counted.EmailAddress = subscribers.EmailAddress

    This extended query will not only tell you that there are potential duplicates. It will also give you Subscriber Keys of duplicate contacts so that you can investigate the reason and clean up records after fixing the underlying issue.

    Pack it into Automation with Verification Activity on top and keep your database clean with ease.

    +

    COUNT *, ALL and DISTINCT

    +

    There are three approaches to using COUNT that differ slightly from each other.

    +
      +
    • COUNT(*) will return the number of items, including NULL values and duplicates.
    • +
    • COUNT(FieldName) / COUNT(ALL FieldName) will return the number on non-NULL values including duplicates.
    • +
    • COUNT(DISTINCT FieldName) will return the number of non-NULL and non-duplicate values.
    • +
    +
    Let's find out whether we have multiple Subscribers with the same Email Address
    SELECT
    COUNT(EmailAddress) AS EmailCount
    , COUNT(DISTINCT EmailAddress) AS UniqueEmailCount
    FROM _Subscribers
    +

    HAVING

    +

    HAVING works nearly the same as WHERE and allows you to filter outcomes of your GROUP BY.

    +
    This query will show you which Email Addresses exists on more than one subscriber
    SELECT
    EmailAddress
    , COUNT(EmailAddress) AS EmailCount
    FROM _Subscribers
    GROUP BY EmailAddress
    HAVING COUNT(EmailAddress) > 1
    +

    You can leverage all filtering tricks from WHERE. In practice, I mostly use it along with aggregate functions like COUNT.

    +

    HAVING vs WHERE

    +

    I just wrote that HAVING and WHERE work similarly, and both filter the outcomes. What is the difference?

    +
      +
    1. WHERE filters individual data (rows before GROUP BY is applied)
    2. +
    3. HAVING filters aggregated data (rows after GROUP BY is applied)
    4. +
    +
    This query will show you which Email Addresses exists on more than one active subscriber
    SELECT
    EmailAddress
    , COUNT(EmailAddress) AS EmailCount
    FROM _Subscribers
    WHERE Status = 'active'
    GROUP BY EmailAddress
    HAVING COUNT(EmailAddress) > 1
    +

    Thanks to using both WHERE and HAVING in this query, we will look only for duplicate active Subscribers. If we have two subscribers with the same email, but one is inactive, this query won't output it.

    +
    You Should Know

    You can use both in the same query and even mix it with DISTINCT.

    However, when building such layered filters, keep in mind the SQL's order of execution for clauses:

    FROM > WHERE > GROUP BY > HAVING > DISTINCT > ORDER BY

    It means that rows filtered with WHERE will not be taken into consideration for GROUP BY and that DISTINCT deduplication will be applied to results grouped and filtered by HAVING - not the source data.

    +

    MIN and MAX

    +

    MIN and MAX functions can help you find the minimum and maximum values within a group.

    +

    As they are aggregate functions, we can use them in both the SELECT part of the query and for filtering with WHERE or HAVING.

    +
    Let's find domains that are no longer getting new subscribers
    SELECT TOP 10
    Domain
    , MIN(DATEDIFF(DAY, DateJoined, GETDATE())) AS YoungestSubscriberDaysOfService
    , MAX(DATEDIFF(DAY, DateJoined, GETDATE())) AS OldestSubscriberDaysOfService
    FROM _Subscribers
    GROUP BY Domain
    ORDER BY MIN(DATEDIFF(DAY, DateJoined, GETDATE())) DESC
    +

    Learn more about MIN and MAX in Numeric Functions documentation.

    +

    AVG

    +

    AVG function allows you to find the average of values within the group.

    +

    It ignores NULL values for the calculation and we can use it in SELECT, WHERE or HAVING part of the query.

    +
    Let's find domain that are bouncing for most users
    SELECT TOP 10
    Domain
    , AVG(BounceCount) AS AverageBounceCount
    FROM _Subscribers
    GROUP BY Domain
    HAVING AVG(BounceCount) > 0
    ORDER BY AVG(BounceCount) DESC
    +

    Learn more about AVG in Numeric Functions documentation.

    +
    You Should Know

    AVG will ignore rows with NULL, which can skew your results. COALESCE will be your best friend to make sense out of imperfect data.

    +

    SUM

    +

    SUM function allows you to find the sum of values within the group.

    +

    It ignores NULL values for the calculation and we can use it in SELECT, WHERE or HAVING part of the query.

    +
    Let's find product categories responsible for the highest income
    SELECT TOP 3
    ProductCategory
    , COUNT(Orders) AS TotalOrders
    , SUM(Price) AS TotalIncome
    FROM Purchases
    WHERE Status = 'Complete'
    GROUP BY ProductCategory
    HAVING SUM(Price) > 1000
    ORDER BY SUM(Price) DESC
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-basics/index.html b/docs/sql/sfmc-sql-basics/index.html index 811bf5a3e..0ff345258 100644 --- a/docs/sql/sfmc-sql-basics/index.html +++ b/docs/sql/sfmc-sql-basics/index.html @@ -1,22 +1,162 @@ - + - -SFMC SQL Basics | Mateusz Dąbrowski + +SFMC SQL Basics | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Basics

    SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.

    How to segment data in Marketing Cloud

    Salesforce Marketing Cloud offers a few ways of segmenting data for your marketing needs. Out of the box, you can use Filters and SQL Query Activities.

    Filters are a straightforward drag-and-drop solution for one-time (Filtered Data Extensions) or refreshed on-schedule (Data Filters with Automation) segmentation. Unfortunately, they are constrained, as they allow you to copy a single Data Extension with all its columns and filtered-down rows. That filtering can leverage source Data Extension values, another Data Extension values (through Data Relationship) or Measures. That's it. For real Marketing Automation, it's not enough.

    This is why you are looking to learn about SFMC SQL. Along with Automation Studio Query Activity, it will allow you to deploy any segmentation scenario you want with complete control over the output columns, names and values. However, with great power comes some learning required.

    There is also a third way - paid AppExchange solutions that offer you a way to eat a cookie and have a cookie: the full power of SQL with a drag-and-drop interface. For a price.

    You can check my comparison of all the above options in my here. This article will focus only on the most powerful and free option - SFMC SQL.

    SQL in Salesforce Marketing Cloud

    SQL (Structured Query Language) is one of the best ways to work with relational databases. And Marketing Cloud's Data Extensions, with the help of Data Designer, offer precisely that. A relational database. The same is valid for system Data Views containing tracking data. Because of this, SQL is used in SFMC whenever powerful segmentation is needed (mainly using Automation Studio).

    The main difference from standard SQL (SFMC uses more or less SQL Server 2016) is that SFMC supports only the SELECT statement. Neither INSERT, UPDATE or DELETE are officially supported. It is because the queries are executed as a part of the backend query and are limited to provide non-breakable functionality.

    Another limiting characteristic of SFMC SQL is visible in the data accessible by queries. Only data stored in data extensions or system data views is available. Moreover, you can save the results only to the data extensions. The reason is other data structures of SFMC are not relational databases.

    Finally, the significant limitation you might hit as your Marketing Cloud grows is AutoKill. It will automatically stop your query if the execution time exceeds the 30 minutes limit. Think about the query with the future in mind. It is vital for queries that are supposed to be the backbones of your data management flow in Marketing Cloud. Even if it works great now, consider how it will behave once you have more data in the system. One of the great ways to not trigger AutoKill is to implement retention periods for the Data Extensions used in the query to limit input data.

    Where to learn SFMC SQL

    Before we start with the real deal, let's cover where to learn to write SQL. I recommend getting a Query Studio. It's a free AppExchange add-on to Marketing Cloud developed by Salesforce. While it has cons, it's perfect for quickly learning how to query.

    If you cannot install this app in your Marketing Cloud, you still can learn using Query Activities in Automation Studio, but it will be much less user-friendly. For each change in the query, you will have to update the target Data Extension manually and go through multiple steps across the platform to see the results.

    My approach is to always start in Query Studio, and only once my SQL Query is complete and validated do I move it to Automation Studio.

    How to learn SFMC SQL

    SFMC SQL is very limited compared to the full power of Structured Query Language, but there are still many topics to cover. I split them into steps that slowly add more complex concepts to make it easier. Each should provide knowledge that you can actively use in your day-to-day work.

    In each level, you will see:

    1. Learning materials to read.
    2. Exercise you can do in your Marketing Cloud platform to test your skills.
    3. Hint that can help you with the exercise if you are stuck.
    4. Example solution to that exercise. Keep in mind that there might be more than one correct approach.

    Level 1 - SELECT, FROM, WHERE

    Learn the three essential SQL statements for all queries. They will give you similar power to what Filters can do - with the bonus of choosing the columns you need for your final segment.

    Learning materials

    • SELECT - just the first part, before the aliasing section.
    • FROM - whole article.
    • WHERE - the first part, before the Basic Operators, plus Equality Operators and Logical Operators. Don't worry about Comparison operators or shorthands for now. Don't worry about the examples with dates and unknown functions. We will get there. For now, think about how you can filter based on simple values like status.
    • System Data Views - the basics and _Subscribers Data View.

    Check your skills

    Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list.


    Level 2 - JOIN, Aliasing, NULL

    Learn how to leverage a second Data Extension or Data View, change the output's column name, and deal with basic NULL cases.

    Learning materials

    Check your skills

    Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list that were sent an email in the last 6 months.


    Level 3 - LIKE, CASE, Strings

    Learn how to deal with string values, how to implement SQL version of if/else logic and how to make complex conditions calculating your data. With this, you are no longer limited to the data already available in the tables.

    Learning materials

    Check your skills

    Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list and add a new column called SubscriberKeyType. In that new column, calculate whether the Subscriber Key is using an email address, Salesforce ID (and in this case - source object) or other. Possible values should be: Email, Account, Contact, User, Lead, and Other.

    You Should Know

    For our need here, if the Subscriber Key has 18 characters, no @, and starts with three specific characters, it probably is a Salesforce ID. Those first three characters point to a specific Salesforce Object being a source of that record:

    • 001 = Account
    • 003 = Contact
    • 005 = User
    • 00Q = Lead

    Level 4 - Dates, WHERE operators, Conversion

    Learn how to use the most important filter of all - date filtering. Read about essential date functions and what to do when you don't have the correct data type for your use case.

    Learning materials

    Check your skills

    Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list that joined the list within the last year and had a bounce on Google or Microsoft email between the first day of the current month (write that date manually, as a string) and today.

    For this exercise, we will assume that Google users have emails like something@gmail.com, Microsoft users - something@outlook.com and Yahoo - something@yahoo.com.


    Level 5 - Multiple JOINS, UNION, INTERSECT and EXCEPT

    Learn to leverage data from multiple tables - the only limitations will be creativity and autokill function crashing queries after 30 minutes of execution ;)

    Learning materials

    • JOINs - yup, everything. The Cheat Sheet at the end should be useful to visualise multi-JOIN fun better.
    • Journey Builder Data Views - both _Journey and _JourneyActivity.

    Check your skills

    Find some active Journey from the last quarter that already had some email sends with engagement. Note the name of the Journey and Email Activity.

    Write a query that will find Subscriber Key and Email Address for all Subscribers in your All Subscribers list that clicked a link in the first email activity in the Journey you selected.

    Append a proof record with Subscriber Key equal to level5exercise and your email address.


    Level 6 - GROUP, COUNT, TOP and HAVING

    Graduate from just playing with rows and start calculating the data to see patterns, outliers and problems. It is handy for SFMC Administrators and Consultants performing analysis on the platform data.

    Learning materials

    Check your skills

    Find the number of sends, unique bounces, and the bounce rate (percent of bounces vs sends) per domain from deliveries attempted in the last month. Filter the records to only those Domains with at least 100 sends. Order by the bounce rate descending and limit to the top 20 records.

    If you send huge volumes, feel free to change the timeframe from last month to last week for the exercise.


    Level 7 - coming soon-ish

    I will add more levels once I finish writing supporting learning materials :)


    Writing with style

    Knowing the available functions is one thing. Writing good and readable queries - another. Salesforce Marketing Cloud is always a team sport, so be sure to leverage the power of a Style Guide to improve the quality of your SQL.

    Order of operations

    One of the key things to remember when building more complex queries is the order of operations, as it will decide what is in the output:

    FROM > WHERE > GROUP BY > HAVING > DISTINCT > ORDER BY

    It means that rows filtered with WHERE will not be considered for GROUP BY and that DISTINCT deduplication will be applied to results grouped and filtered by HAVING - not the source data.

    All SQL Guides

    - - +

    SFMC SQL Basics

    SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.

    +

    How to segment data in Marketing Cloud

    +

    Salesforce Marketing Cloud offers a few ways of segmenting data for your marketing needs. Out of the box, you can use Filters and SQL Query Activities.

    +

    Filters are a straightforward drag-and-drop solution for one-time (Filtered Data Extensions) or refreshed on-schedule (Data Filters with Automation) segmentation. Unfortunately, they are constrained, as they allow you to copy a single Data Extension with all its columns and filtered-down rows. That filtering can leverage source Data Extension values, another Data Extension values (through Data Relationship) or Measures. That's it. For real Marketing Automation, it's not enough.

    +

    This is why you are looking to learn about SFMC SQL. Along with Automation Studio Query Activity, it will allow you to deploy any segmentation scenario you want with complete control over the output columns, names and values. However, with great power comes some learning required.

    +

    There is also a third way - paid AppExchange solutions that offer you a way to eat a cookie and have a cookie: the full power of SQL with a drag-and-drop interface. For a price.

    +

    You can check my comparison of all the above options in my here. This article will focus only on the most powerful and free option - SFMC SQL.

    +

    SQL in Salesforce Marketing Cloud

    +

    SQL (Structured Query Language) is one of the best ways to work with relational databases. And Marketing Cloud's Data Extensions, with the help of Data Designer, offer precisely that. A relational database. The same is valid for system Data Views containing tracking data. Because of this, SQL is used in SFMC whenever powerful segmentation is needed (mainly using Automation Studio).

    +

    The main difference from standard SQL (SFMC uses more or less SQL Server 2019) is that SFMC supports only the SELECT statement. Neither INSERT, UPDATE or DELETE are officially supported. It is because the queries are executed as a part of the backend query and are limited to provide non-breakable functionality.

    +

    Another limiting characteristic of SFMC SQL is visible in the data accessible by queries. Only data stored in data extensions or system data views is available. Moreover, you can save the results only to the data extensions. The reason is other data structures of SFMC are not relational databases.

    +

    Finally, the significant limitation you might hit as your Marketing Cloud grows is AutoKill. It will automatically stop your query if the execution time exceeds the 30 minutes limit. Think about the query with the future in mind. It is vital for queries that are supposed to be the backbones of your data management flow in Marketing Cloud. Even if it works great now, consider how it will behave once you have more data in the system. One of the great ways to not trigger AutoKill is to implement retention periods for the Data Extensions used in the query to limit input data.

    +

    Where to learn SFMC SQL

    +

    Before we start with the real deal, let's cover where to learn to write SQL. I recommend getting a Query Studio. It's a free AppExchange add-on to Marketing Cloud developed by Salesforce. While it has cons, it's perfect for quickly learning how to query.

    +

    If you cannot install this app in your Marketing Cloud, you still can learn using Query Activities in Automation Studio, but it will be much less user-friendly. For each change in the query, you will have to update the target Data Extension manually and go through multiple steps across the platform to see the results.

    +

    My approach is to always start in Query Studio, and only once my SQL Query is complete and validated do I move it to Automation Studio.

    +

    How to learn SFMC SQL

    +

    SFMC SQL is very limited compared to the full power of Structured Query Language, but there are still many topics to cover. I split them into steps that slowly add more complex concepts to make it easier. Each should provide knowledge that you can actively use in your day-to-day work.

    +

    In each level, you will see:

    +
      +
    1. Learning materials to read.
    2. +
    3. Exercise you can do in your Marketing Cloud platform to test your skills.
    4. +
    5. Hint that can help you with the exercise if you are stuck.
    6. +
    7. Example solution to that exercise. Keep in mind that there might be more than one correct approach.
    8. +
    +
    +

    Level 1 - SELECT, FROM, WHERE

    +

    Learn the three essential SQL statements for all queries. They will give you similar power to what Filters can do - with the bonus of choosing the columns you need for your final segment.

    +

    Learning materials

    +
      +
    • SELECT - just the first part, before the aliasing section.
    • +
    • FROM - whole article.
    • +
    • WHERE - the first part, before the Basic Operators, plus Equality Operators and Logical Operators. Don't worry about Comparison operators or shorthands for now. Don't worry about the examples with dates and unknown functions. We will get there. For now, think about how you can filter based on simple values like status.
    • +
    • System Data Views - the basics and _Subscribers Data View.
    • +
    +

    Check your skills

    +

    Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list.

    +
    +

    Level 2 - JOIN, Aliasing, NULL

    +

    Learn how to leverage a second Data Extension or Data View, change the output's column name, and deal with basic NULL cases.

    +

    Learning materials

    + +

    Check your skills

    +

    Write a query that will find Subscriber Key for all Active (opted-in) Subscribers in your All Subscribers list that were sent an email in the last 6 months.

    +
    +

    Level 3 - LIKE, CASE, Strings

    +

    Learn how to deal with string values, how to implement SQL version of if/else logic and how to make complex conditions calculating your data. With this, you are no longer limited to the data already available in the tables.

    +

    Learning materials

    + +

    Check your skills

    +

    Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list and add a new column called SubscriberKeyType. In that new column, calculate whether the Subscriber Key is using an email address, Salesforce ID (and in this case - source object) or other. Possible values should be: Email, Account, Contact, User, Lead, and Other.

    You Should Know

    For our need here, if the Subscriber Key has 18 characters, no @, and starts with three specific characters, it probably is a Salesforce ID. Those first three characters point to a specific Salesforce Object being a source of that record:

      +
    • 001 = Account
    • +
    • 003 = Contact
    • +
    • 005 = User
    • +
    • 00Q = Lead
    • +
    +
    +

    Level 4 - Dates, WHERE operators, Conversion

    +

    Learn how to use the most important filter of all - date filtering. Read about essential date functions and what to do when you don't have the correct data type for your use case.

    +

    Learning materials

    + +

    Check your skills

    +

    Write a query that will find Subscriber Key for all Subscribers in your All Subscribers list that joined the list within the last year and had a bounce on Google or Microsoft email between the first day of the current month (write that date manually, as a string) and today.

    For this exercise, we will assume that Google users have emails like something@gmail.com, Microsoft users - something@outlook.com and Yahoo - something@yahoo.com.

    +
    +

    Level 5 - Multiple JOINS, UNION, INTERSECT and EXCEPT

    +

    Learn to leverage data from multiple tables - the only limitations will be creativity and autokill function crashing queries after 30 minutes of execution ;)

    +

    Learning materials

    +
      +
    • JOINs - yup, everything. The Cheat Sheet at the end should be useful to visualise multi-JOIN fun better.
    • +
    • Journey Builder Data Views - both _Journey and _JourneyActivity.
    • +
    +

    Check your skills

    +

    Find some active Journey from the last quarter that already had some email sends with engagement. Note the name of the Journey and Email Activity.

    Write a query that will find Subscriber Key and Email Address for all Subscribers in your All Subscribers list that clicked a link in the first email activity in the Journey you selected.

    Append a proof record with Subscriber Key equal to level5exercise and your email address.

    +
    +

    Level 6 - GROUP, COUNT, TOP and HAVING

    +

    Graduate from just playing with rows and start calculating the data to see patterns, outliers and problems. It is handy for SFMC Administrators and Consultants performing analysis on the platform data.

    +

    Learning materials

    + +

    Check your skills

    +

    Find the number of sends, unique bounces, and the bounce rate (percent of bounces vs sends) per domain from deliveries attempted in the last month. Filter the records to only those Domains with at least 100 sends. Order by the bounce rate descending and limit to the top 20 records.

    If you send huge volumes, feel free to change the timeframe from last month to last week for the exercise.

    +
    +

    Level 7 - coming soon-ish

    +

    I will add more levels once I finish writing supporting learning materials :)

    +
    +

    Writing with style

    +

    Knowing the available functions is one thing. Writing good and readable queries - another. Salesforce Marketing Cloud is always a team sport, so be sure to leverage the power of a Style Guide to improve the quality of your SQL.

    +

    Order of operations

    +

    One of the key things to remember when building more complex queries is the order of operations, as it will decide what is in the output:

    +

    FROM > WHERE > GROUP BY > HAVING > DISTINCT > ORDER BY

    +

    It means that rows filtered with WHERE will not be considered for GROUP BY and that DISTINCT deduplication will be applied to results grouped and filtered by HAVING - not the source data.

    +

    All SQL Guides

    +
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-case/index.html b/docs/sql/sfmc-sql-case/index.html index 4366a4d6f..55a9d6291 100644 --- a/docs/sql/sfmc-sql-case/index.html +++ b/docs/sql/sfmc-sql-case/index.html @@ -1,22 +1,54 @@ - + - -SFMC SQL Case | Mateusz Dąbrowski + +SFMC SQL Case | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Case

    Empower your Marketing Cloud queries with conditional SQL CASE logic.

    Conditional values with CASE

    CASE statement evaluates a list of conditions and returns one of the multiple possible result expressions. For Marketing Cloud purposes, it is especially useful when you want to select a column and modify the values within it. Perfect for translating numeric codes to descriptive ones for personalisation purposes. Excellent for standardising data (change those 1, true and on values of opt-in to a single format).

    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    , CASE MemberType__c
    WHEN 1 THEN 'Bronze'
    WHEN 2 THEN 'Silver'
    WHEN 3 THEN 'Gold'
    WHEN 4 THEN 'Platinum'
    ELSE 'Unregistered'
    END AS MemberType

    You can have as many WHEN/THEN conditions as you want. Also, the ELSE statement is optional but a good idea to catch unexpected values.

    Feel free also to leverage aliases to manipulate the column name at the same time:

    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    , CASE MemberType__c
    WHEN 1 THEN 'Bronze'
    WHEN 2 THEN 'Silver'
    WHEN 3 THEN 'Gold'
    WHEN 4 THEN 'Platinum'
    ELSE 'Unregistered'
    END AS MemberType

    Search version of CASE

    The above examples are already helpful in segmentation, but there is also one more way to write and use a CASE statement that gives even more power. The search CASE.

    The difference is that you are not passing the column name on which you will be building conditions. Instead, you create a boolean expression from scratch for each scenario.

    The same query as the previous one, but written with Search Case
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    , CASE
    WHEN MemberType__c = 1 THEN 'Bronze'
    WHEN MemberType__c = 2 THEN 'Silver'
    WHEN MemberType__c = 3 THEN 'Gold'
    WHEN MemberType__c = 4 THEN 'Platinum'
    ELSE 'Unregistered'
    END AS MemberType

    The example above doesn't show why it is worth using the search CASE. It is a bit longer than the standard approach! But there is a reason to use this form of CASE statement that is visible once you want to create more elaborate conditions that are possible only with this version:

    Let's calculate what channel we should use in our campaign for a given user
    SELECT
    ContactKey
    , CASE
    WHEN IsAppInstalled = 1 THEN 'Push'
    WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
    WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'
    END AS PreferredChannel
    You Should Know

    CASE statement returns THEN value of the first condition that evaluated to TRUE. In the above example, if the IsAppInstalled = 1 is true, other conditions are not considered. Even if for selected contact all of them will be true, it will still have the value Push in PreferredChannel. It is perfect, as it allows us to prioritise cheaper channels.

    Always consider the order of the conditions in your CASE statement. It both might lead to errors if you don't expect the behaviour mentioned above and make your life much easier if you know it works that way.

    As you can see, thanks to search CASE statements, we can check conditions on multiple different columns and connect them with AND/OR statements for better control. You can use this version of the CASE statement for all your needs (even those covered by the basic one) to not worry about two ways of formatting.

    You Should Know

    You can use CASE statements inside a CASE statement to have an even more dynamic query.

    Let's add another dimension of membership level to differentiate available channels
    SELECT
    ContactKey
    , CASE
    WHEN MemberType = 'Platinum' THEN 'Key Account Manager'
    WHEN MemberType = 'Gold' OR MemberType = 'Silver' THEN
    CASE
    WHEN IsAppInstalled = 1 THEN 'Push'
    WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
    WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'
    END
    WHEN MemberType = 'Bronze' THEN
    CASE
    WHEN IsAppInstalled = 1 THEN 'Push'
    WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
    END
    END AS PreferredChannel

    LIKE in CASE

    LIKE is not only valuable for the WHERE Statement. It is also an incredible tool empowering the CASE statement. It allows you to build flexible conditions on free text values:

    Great way to split your database between Internal and External users for different communication
    SELECT
    ContactKey
    , CASE
    WHEN EmailAddress LIKE '%@mateuszdabrowski.%' THEN 'Internal'
    ELSE 'External'
    END AS ContactType

    In the SELECT statement, the LIKE operator is handy for fixing data coming from the free text fields. To learn more about the possibilities, check out the LIKE guide.

    IIF Shorthand

    The CASE statement is a fantastic tool but can be overkill for simple conditions. The IIF comes to the rescue.

    It takes three arguments:

    1. Condition
    2. The value returned if the condition evaluates to true
    3. The value returned if the condition evaluates to false

    With it, instead of multiline CASE:

    SELECT
    _Subscriber.SubscriberKey
    , CASE
    WHEN _Subscriber.Status = 'active' THEN 'TRUE'
    ELSE 'FALSE'
    END AS Sendable

    You can have the same outcome in a single, more readable IIF line:

    SELECT
    _Subscriber,SubscriberKey,
    , IIF(_Subscriber.Status = 'active', 'TRUE', 'FALSE') AS Sendable

    Whenever you have a single condition - go with IIF.

    You Should Know

    You can take both CASE and IIF to the next level with dynamic values. Don't limit yourself to a string, integer or boolean - pass a column name.

    Use case? Think of a Master Data Extension that stores a massive amount of contact information, including preferred channel (Email or Mobile). With dynamic values and IIF in just a few lines, we can create an optimised Data Extension with crucial information:

    SELECT
    SubscriberKey
    , PreferredChannel
    , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact

    Now, even with just three columns in your Entry Point, you can create a Journey that adapts the channel to customer preferences.

    CASE in WHERE

    The CASE statement is not only useful in a SELECT part of the query. You can use it also within the WHERE to apply conditional filtering.

    - - +

    SFMC SQL Case

    Empower your Marketing Cloud queries with conditional SQL CASE logic.

    +

    Conditional values with CASE

    +

    CASE statement evaluates a list of conditions and returns one of the multiple possible result expressions. For Marketing Cloud purposes, it is especially useful when you want to select a column and modify the values within it. Perfect for translating numeric codes to descriptive ones for personalisation purposes. Excellent for standardising data (change those 1, true and on values of opt-in to a single format).

    +
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    , CASE MemberType__c
    WHEN 1 THEN 'Bronze'
    WHEN 2 THEN 'Silver'
    WHEN 3 THEN 'Gold'
    WHEN 4 THEN 'Platinum'
    ELSE 'Unregistered'
    END AS MemberType
    +

    You can have as many WHEN/THEN conditions as you want. Also, the ELSE statement is optional but a good idea to catch unexpected values.

    +

    Feel free also to leverage aliases to manipulate the column name at the same time:

    +
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    , CASE MemberType__c
    WHEN 1 THEN 'Bronze'
    WHEN 2 THEN 'Silver'
    WHEN 3 THEN 'Gold'
    WHEN 4 THEN 'Platinum'
    ELSE 'Unregistered'
    END AS MemberType
    +

    Search version of CASE

    +

    The above examples are already helpful in segmentation, but there is also one more way to write and use a CASE statement that gives even more power. The search CASE.

    +

    The difference is that you are not passing the column name on which you will be building conditions. Instead, you create a boolean expression from scratch for each scenario.

    +
    The same query as the previous one, but written with Search Case
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    , CASE
    WHEN MemberType__c = 1 THEN 'Bronze'
    WHEN MemberType__c = 2 THEN 'Silver'
    WHEN MemberType__c = 3 THEN 'Gold'
    WHEN MemberType__c = 4 THEN 'Platinum'
    ELSE 'Unregistered'
    END AS MemberType
    +

    The example above doesn't show why it is worth using the search CASE. It is a bit longer than the standard approach! But there is a reason to use this form of CASE statement that is visible once you want to create more elaborate conditions that are possible only with this version:

    +
    Let's calculate what channel we should use in our campaign for a given user
    SELECT
    ContactKey
    , CASE
    WHEN IsAppInstalled = 1 THEN 'Push'
    WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
    WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'
    END AS PreferredChannel
    +
    You Should Know

    CASE statement returns THEN value of the first condition that evaluated to TRUE. In the above example, if the IsAppInstalled = 1 is true, other conditions are not considered. Even if for selected contact all of them will be true, it will still have the value Push in PreferredChannel. It is perfect, as it allows us to prioritise cheaper channels.

    Always consider the order of the conditions in your CASE statement. It both might lead to errors if you don't expect the behaviour mentioned above and make your life much easier if you know it works that way.

    +

    As you can see, thanks to search CASE statements, we can check conditions on multiple different columns and connect them with AND/OR statements for better control. You can use this version of the CASE statement for all your needs (even those covered by the basic one) to not worry about two ways of formatting.

    +
    You Should Know

    You can use CASE statements inside a CASE statement to have an even more dynamic query.

    Let's add another dimension of membership level to differentiate available channels
    SELECT
    ContactKey
    , CASE
    WHEN MemberType = 'Platinum' THEN 'Key Account Manager'
    WHEN MemberType = 'Gold' OR MemberType = 'Silver' THEN
    CASE
    WHEN IsAppInstalled = 1 THEN 'Push'
    WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
    WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone'
    END
    WHEN MemberType = 'Bronze' THEN
    CASE
    WHEN IsAppInstalled = 1 THEN 'Push'
    WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email'
    END
    END AS PreferredChannel
    +

    LIKE in CASE

    +

    LIKE is not only valuable for the WHERE Statement. It is also an incredible tool empowering the CASE statement. It allows you to build flexible conditions on free text values:

    +
    Great way to split your database between Internal and External users for different communication
    SELECT
    ContactKey
    , CASE
    WHEN EmailAddress LIKE '%@mateuszdabrowski.%' THEN 'Internal'
    ELSE 'External'
    END AS ContactType
    +

    In the SELECT statement, the LIKE operator is handy for fixing data coming from the free text fields. To learn more about the possibilities, check out the LIKE guide.

    +

    IIF Shorthand

    +

    The CASE statement is a fantastic tool but can be overkill for simple conditions. The IIF comes to the rescue.

    +

    It takes three arguments:

    +
      +
    1. Condition
    2. +
    3. The value returned if the condition evaluates to true
    4. +
    5. The value returned if the condition evaluates to false
    6. +
    +

    With it, instead of multiline CASE:

    +
    SELECT
    _Subscriber.SubscriberKey
    , CASE
    WHEN _Subscriber.Status = 'active' THEN 'TRUE'
    ELSE 'FALSE'
    END AS Sendable
    +

    You can have the same outcome in a single, more readable IIF line:

    +
    SELECT
    _Subscriber,SubscriberKey,
    , IIF(_Subscriber.Status = 'active', 'TRUE', 'FALSE') AS Sendable
    +

    Whenever you have a single condition - go with IIF.

    +
    You Should Know

    You can take both CASE and IIF to the next level with dynamic values. Don't limit yourself to a string, integer or boolean - pass a column name.

    Use case? Think of a Master Data Extension that stores a massive amount of contact information, including preferred channel (Email or Mobile). With dynamic values and IIF in just a few lines, we can create an optimised Data Extension with crucial information:

    SELECT
    SubscriberKey
    , PreferredChannel
    , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact

    Now, even with just three columns in your Entry Point, you can create a Journey that adapts the channel to customer preferences.

    +

    CASE in WHERE

    +

    The CASE statement is not only useful in a SELECT part of the query. You can use it also within the WHERE to apply conditional filtering.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-conversion-functions/index.html b/docs/sql/sfmc-sql-conversion-functions/index.html index 832c57415..ad87d0ca1 100644 --- a/docs/sql/sfmc-sql-conversion-functions/index.html +++ b/docs/sql/sfmc-sql-conversion-functions/index.html @@ -1,22 +1,63 @@ - + - -SFMC SQL Conversion Functions | Mateusz Dąbrowski + +SFMC SQL Conversion Functions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Conversion Functions

    Break from the limits of source data types. Use the full power of SQL to transform your values.

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    Here, I will cover only selected conversion functions, that I find most useful for Marketing Automation purposes. They will help you change the value types to enable the use of type-based Salesforce Marketing Cloud User Interface elements and type-specific functions.

    CAST & CONVERT

    In Salesforce Marketing Cloud, you can use two universal conversion functions - CAST and CONVERT.

    CAST

    The first one, CAST, is straightforward and available in all SQL dialects:

    Find all subscribers that joined after the given date
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE DateJoined > CAST('2020-10-30' AS DATE)

    It takes a value and expected datatype with AS operator in between.

    However, in Salesforce Marketing Cloud, it is much better to use CONVERT function instead. It covers all features of CAST plus adds quite a lot more. It is also better supported by the Query Studio (for example, you cannot use CAST in a SELECT part of the query there).

    CONVERT

    The basic form of CONVERT is nearly the same as the CAST with reversed order of arguments:

    Find all subscribers that joined after the given date
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE DateJoined > CONVERT(DATE, '2020-10-30')

    With both functions you can stack functions within for more complex calculations:

    Calculate the end of the trial period and output date only
    SELECT CONVERT(DATE, DATEADD(MM, 1, GETUTCDATE())) AS TrialPeriodEndDate

    Up to this point, CAST and CONVERT seem similar in the features.

    However, only CONVERT have an additional third optional argument - style. Thanks to it, you can convert even from non-standard (for the server) formats that would result in an error:

    Converting dd/MM/yyyy format throws 'Could not convert date and/or time from string data type'
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE DateJoined > CONVERT(DATE, '30/10/2019') /* Error */

    With style codes, we can make it work with minimal change:

    Converting dd/MM/yyyy format with appropriate style code
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE DateJoined > CONVERT(DATE, '30/10/2019', 103)

    It is not possible with CAST.

    You Should Know

    You can also leverage style codes to format your dates during conversion to string, without the need to use FORMAT function on top.

    SELECT
    CONVERT(NVARCHAR, GETDATE(), 101) AS DateFormat1 /* Output: 10/30/2020 */
    , CONVERT(NVARCHAR, GETDATE(), 102) AS DateFormat2 /* Output: 2020.10.30 */
    , CONVERT(NVARCHAR, GETDATE(), 107) AS DateFormat3 /* Output: Oct 30, 2020 */

    Data Types

    There are over 30 data types available for conversion, but there are only a few that are useful on a day-to-day basis in Salesforce Marketing Cloud:

    Data TypeDescriptionComment
    CHARFixed-length string
    NCHARFixed-length string with Unicode support
    VARCHARVariable-length string
    NVARCHARVariable-length string with Unicode supportBest option for most SFMC string use cases
    DECIMAL/NUMERICDecimal number with big precisionBest option if you need a decimal number
    INTInteger numberBest option if your number is not decimal
    BIGINTBig integer numberWhen your number is bigger than 2,147,483,647, you need BIGINT
    DATETIMELegacy date and timeMore friendly default formatting
    DATETIME2Modern date and timeBest when you need both date and time
    DATETIMEOFFSETDate with offsetWhen you need timezone offset
    DATEOnly dateBest when you need date only
    TIMEOnly timeBest when you need time only
    You Should Know

    There are also two more data types: FLOAT and REAL. Don't use them. Both are Approximate Numeric Data Types and can lead to unpredicted behaviour, especially when used for equality-based conditions in WHERE. DECIMAL/NUMERIC is the way to go.

    When converting values to the selected data type, you can have even more control by passing optional argument right after type to declare the length of the output.

    It is instrumental with DECIMAL as it allows you to provide expected precision (number of digits in a number) and scale (number of digits to the right of the decimal point in a number).

    For example, you may have a string field containing a product price - '123.99'. If you convert it to DECIMAL without any arguments, it will round to 124. However, you can provide precision and scale to keep the current format:

    SELECT
    CONVERT(DECIMAL, '123.99') AS RoundedConversion /* Output: 124 */
    , CONVERT(DECIMAL(5,2), '123.99') AS FullConversion /* Output: 123.99 */

    Be sure to add correct precision. If it is smaller then the values in your source, it will lead to an error. It's better to have too big precision than too small.

    As for scale - if your scale is smaller than in your source, the value is rounded.

    You can also use the single argument with DATETIME, DATETIME2, DATETIMEOFFSET (to control precision of the output) and string data types (CHAR, NCHAR, VARCHAR, NVARCHAR). The latter won't directly limit the number of characters, but rather the number of bytes (which might be equal or not to the number of characters depending on what characters you are using).

    CHAR allows for 1-8000 bytes range, whereas NCHAR due to Unicode support allows for only 1-4000. VARCHAR and NVARCHAR support the same ranges respectively and have an additional possible option - max that you can use if some values might exceed the range.

    You Should Know

    Always double-check the choice of data type you want to convert to, as it might have a massive impact into outcome.

    Different outcomes depending on the output data type
    SELECT
    CAST(6.9 AS INT) AS CastToInt /* Output: 6 */
    , CAST(6.9 AS DECIMAL) AS CastToNumeric /* Output: 7 */
    , CONVERT(INT, 6.9) AS ConvertToInt /* Output: 6 */
    , CONVERT(DECIMAL, 6.9) AS ConvertToNumeric /* Output: 7 */

    It is happening because conversions from DECIMAL or FLOAT to INT are truncated. The rest is rounded if no specific precision/scale argument is available.

    CONVERT Date Style Codes

    Just as with data types - there are many style codes available. Here I will cover just the most popular ones (if you don't understand some formats codes, check date formats guide):

    Date formatStyle code
    MMM dd yyyy hh:mmtt100
    MM/dd/yyyy101
    yyyy.mm.dd102
    dd/mm/yyyy103
    dd.mm.yyyy104
    dd-mm-yyyy105
    dd MMM yyyy106
    MMM dd, yyyy107
    HH:mm:ss108
    MM-dd-yyyy110
    yyyy/MM/dd111
    yyyyMMdd112
    yyyy-MM-dd HH:mm:ss120
    MM/dd/yy hh:mm:ss tt22
    yyyy-mm-dd23

    Use it by adding the style code as the third argument of the CONVERT function:

    SELECT
    CONVERT(NVARCHAR, GETDATE(), 101) AS DateAsString
    , CONVERT(DATETIME2, '2020-12-31 19:00:00', 120) AS StringAsDate

    You can find the full list of style codes on Microsoft .Net Doc Pages.

    You Should Know

    Date style codes should cover most scenarios, but it is possible to encounter a non-supported date format (for example: 27/12/2021 07:31:01). In such a case, you have two options:

    1. Change the format in the source - if possible, aligning the format to one of the supported date styles will be the best solution from the performance point of view.
    2. Split conversion trick - if changing the format in the source is not possible, you can still enforce the conversion by splitting the string date and converting its parts.

    For the second option, you have to find Date Style Codes within your string date and convert each separately. This can be easily done with LEFT & RIGHT functions.

    For example, the 27/12/2021 07:31:01 string does not have a matching Date Style Code, but we can see that the date part matches Style Code 103 and the time part fits 108. With that, we can do the conversion:

    CONVERT(DATETIME, LEFT('27/12/2021 07:31:01', 10), 103) + CONVERT(DATETIME, RIGHT('27/12/2021 07:31:01', 8), 108) AS ConvertedDate

    With LEFT & RIGHT functions we split the datetime on the space, then CONVERT each part to finally sum it into a single date that is equal to our original string.

    If you have specific parts of your date stored in separte fields, you can leverage DATETIMEFROMPARTS function as well.

    - - +

    SFMC SQL Conversion Functions

    Break from the limits of source data types. Use the full power of SQL to transform your values.

    +

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    +

    Here, I will cover only selected conversion functions, that I find most useful for Marketing Automation purposes. They will help you change the value types to enable the use of type-based Salesforce Marketing Cloud User Interface elements and type-specific functions.

    +

    CAST & CONVERT

    +

    In Salesforce Marketing Cloud, you can use two universal conversion functions - CAST and CONVERT.

    +

    CAST

    +

    The first one, CAST, is straightforward and available in all SQL dialects:

    +
    Find all subscribers that joined after the given date
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE DateJoined > CAST('2020-10-30' AS DATE)
    +

    It takes a value and expected datatype with AS operator in between.

    +

    However, in Salesforce Marketing Cloud, it is much better to use CONVERT function instead. It covers all features of CAST plus adds quite a lot more. It is also better supported by the Query Studio (for example, you cannot use CAST in a SELECT part of the query there).

    +

    CONVERT

    +

    The basic form of CONVERT is nearly the same as the CAST with reversed order of arguments:

    +
    Find all subscribers that joined after the given date
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE DateJoined > CONVERT(DATE, '2020-10-30')
    +

    With both functions you can stack functions within for more complex calculations:

    +
    Calculate the end of the trial period and output date only
    SELECT CONVERT(DATE, DATEADD(MM, 1, GETUTCDATE())) AS TrialPeriodEndDate
    +

    Up to this point, CAST and CONVERT seem similar in the features.

    +

    However, only CONVERT have an additional third optional argument - style. Thanks to it, you can convert even from non-standard (for the server) formats that would result in an error:

    +
    Converting dd/MM/yyyy format throws 'Could not convert date and/or time from string data type'
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE DateJoined > CONVERT(DATE, '30/10/2019') /* Error */
    +

    With style codes, we can make it work with minimal change:

    +
    Converting dd/MM/yyyy format with appropriate style code
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE DateJoined > CONVERT(DATE, '30/10/2019', 103)
    +

    It is not possible with CAST.

    +
    You Should Know

    You can also leverage style codes to format your dates during conversion to string, without the need to use FORMAT function on top.

    SELECT
    CONVERT(NVARCHAR, GETDATE(), 101) AS DateFormat1 /* Output: 10/30/2020 */
    , CONVERT(NVARCHAR, GETDATE(), 102) AS DateFormat2 /* Output: 2020.10.30 */
    , CONVERT(NVARCHAR, GETDATE(), 107) AS DateFormat3 /* Output: Oct 30, 2020 */
    +

    Data Types

    +

    There are over 30 data types available for conversion, but there are only a few that are useful on a day-to-day basis in Salesforce Marketing Cloud:

    +
    Data TypeDescriptionComment
    CHARFixed-length string
    NCHARFixed-length string with Unicode support
    VARCHARVariable-length string
    NVARCHARVariable-length string with Unicode supportBest option for most SFMC string use cases
    DECIMAL/NUMERICDecimal number with big precisionBest option if you need a decimal number
    INTInteger numberBest option if your number is not decimal
    BIGINTBig integer numberWhen your number is bigger than 2,147,483,647, you need BIGINT
    DATETIMELegacy date and timeMore friendly default formatting
    DATETIME2Modern date and timeBest when you need both date and time
    DATETIMEOFFSETDate with offsetWhen you need timezone offset
    DATEOnly dateBest when you need date only
    TIMEOnly timeBest when you need time only
    +
    You Should Know

    There are also two more data types: FLOAT and REAL. Don't use them. Both are Approximate Numeric Data Types and can lead to unpredicted behaviour, especially when used for equality-based conditions in WHERE. DECIMAL/NUMERIC is the way to go.

    +

    When converting values to the selected data type, you can have even more control by passing optional argument right after type to declare the length of the output.

    +

    It is instrumental with DECIMAL as it allows you to provide expected precision (number of digits in a number) and scale (number of digits to the right of the decimal point in a number).

    +

    For example, you may have a string field containing a product price - '123.99'. If you convert it to DECIMAL without any arguments, it will round to 124. However, you can provide precision and scale to keep the current format:

    +
    SELECT
    CONVERT(DECIMAL, '123.99') AS RoundedConversion /* Output: 124 */
    , CONVERT(DECIMAL(5,2), '123.99') AS FullConversion /* Output: 123.99 */
    +

    Be sure to add correct precision. If it is smaller then the values in your source, it will lead to an error. It's better to have too big precision than too small.

    +

    As for scale - if your scale is smaller than in your source, the value is rounded.

    +

    You can also use the single argument with DATETIME, DATETIME2, DATETIMEOFFSET (to control precision of the output) and string data types (CHAR, NCHAR, VARCHAR, NVARCHAR). The latter won't directly limit the number of characters, but rather the number of bytes (which might be equal or not to the number of characters depending on what characters you are using).

    +

    CHAR allows for 1-8000 bytes range, whereas NCHAR due to Unicode support allows for only 1-4000. VARCHAR and NVARCHAR support the same ranges respectively and have an additional possible option - max that you can use if some values might exceed the range.

    +
    You Should Know

    Always double-check the choice of data type you want to convert to, as it might have a massive impact into outcome.

    Different outcomes depending on the output data type
    SELECT
    CAST(6.9 AS INT) AS CastToInt /* Output: 6 */
    , CAST(6.9 AS DECIMAL) AS CastToNumeric /* Output: 7 */
    , CONVERT(INT, 6.9) AS ConvertToInt /* Output: 6 */
    , CONVERT(DECIMAL, 6.9) AS ConvertToNumeric /* Output: 7 */

    It is happening because conversions from DECIMAL or FLOAT to INT are truncated. The rest is rounded if no specific precision/scale argument is available.

    +

    CONVERT Date Style Codes

    +

    Just as with data types - there are many style codes available. Here I will cover just the most popular ones (if you don't understand some formats codes, check date formats guide):

    +
    Date formatStyle code
    MMM dd yyyy hh:mmtt100
    MM/dd/yyyy101
    yyyy.mm.dd102
    dd/mm/yyyy103
    dd.mm.yyyy104
    dd-mm-yyyy105
    dd MMM yyyy106
    MMM dd, yyyy107
    HH:mm:ss108
    MM-dd-yyyy110
    yyyy/MM/dd111
    yyyyMMdd112
    yyyy-MM-dd HH:mm:ss120
    MM/dd/yy hh:mm:ss tt22
    yyyy-mm-dd23
    +

    Use it by adding the style code as the third argument of the CONVERT function:

    +
    SELECT
    CONVERT(NVARCHAR, GETDATE(), 101) AS DateAsString
    , CONVERT(DATETIME2, '2020-12-31 19:00:00', 120) AS StringAsDate
    +

    You can find the full list of style codes on Microsoft .Net Doc Pages.

    +
    You Should Know

    Date style codes should cover most scenarios, but it is possible to encounter a non-supported date format (for example: 27/12/2021 07:31:01). In such a case, you have two options:

      +
    1. Change the format in the source - if possible, aligning the format to one of the supported date styles will be the best solution from the performance point of view.
    2. +
    3. Split conversion trick - if changing the format in the source is not possible, you can still enforce the conversion by splitting the string date and converting its parts.
    4. +

    For the second option, you have to find Date Style Codes within your string date and convert each separately. This can be easily done with LEFT & RIGHT functions.

    For example, the 27/12/2021 07:31:01 string does not have a matching Date Style Code, but we can see that the date part matches Style Code 103 and the time part fits 108. With that, we can do the conversion:

    CONVERT(DATETIME, LEFT('27/12/2021 07:31:01', 10), 103) + CONVERT(DATETIME, RIGHT('27/12/2021 07:31:01', 8), 108) AS ConvertedDate

    With LEFT & RIGHT functions we split the datetime on the space, then CONVERT each part to finally sum it into a single date that is equal to our original string.

    If you have specific parts of your date stored in separte fields, you can leverage DATETIMEFROMPARTS function as well.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-date-functions/index.html b/docs/sql/sfmc-sql-date-functions/index.html index 9b84c75e0..9278fc514 100644 --- a/docs/sql/sfmc-sql-date-functions/index.html +++ b/docs/sql/sfmc-sql-date-functions/index.html @@ -1,23 +1,150 @@ - + - -SFMC SQL Date Functions | Mateusz Dąbrowski + +SFMC SQL Date Functions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Date Functions

    Take control over dates with built-in SQL functions. Let the query do the job.

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    Here, I will cover only selected date functions that I find most useful for Marketing Automation purposes. They will help you find the current date, calculate a new one or format it to match your needs.

    GETDATE & GETUTCDATE

    The GETDATE function is the most straightforward way to get the current timestamp within your query.

    SELECT GETDATE() AS CurrentDate
    You Should Know

    GETDATE() gets server time. For Salesforce Marketing Cloud, it means Central Standard Time (UTC-6) without changes between standard and daylight savings time. It cannot be changed, even with timezone and culture settings in Setup.

    You can get the datetime with appropriate offset information using the SYSDATETIMEOFFSET() function. It will return the same datetime as GETDATE() but in a format showcasing the timezone offset: 2020-12-28 15:08:01.7239173 -06:00.

    You can see the 24-hour clock format and milliseconds and UTC-6 offset at the end. This last information will be helpful for timezone conversions with the AT TIME ZONE function.

    You can also leverage `TODATETIMEOFFSET' to work with standard GETDATE.

    The GETUTCDATE function works the same as GETDATE but returns datetime in the UTC timezone.

    SELECT GETUTCDATE() AS CurrentUTCDate

    Both return a datetime object (for example, Oct 30 2020 1:15AM), so no conversion is needed to use other Date Functions on the outcome of this function.

    However, you can limit its output to either date or time part by using CONVERT or FORMAT Functions.

    DATEPART

    The DATEPART function returns the chosen part of the provided date.

    Find all Subscribers that joined in 2020
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DATEPART(YEAR, DateJoined) = 2020

    It outputs an integer, so be sure you use a number when making comparisons. If you need a string output, check out the similar DATENAME function.

    You Should Know

    There are also three shortcuts for the most popular use cases: YEAR(), MONTH() and DAY().

    Find all Subscribers that joined in 2020 - shorter approach
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE YEAR(DateJoined) = 2020

    In the backend, those functions are just wrappers around DATEPART, so you can use whatever you prefer.

    Date parts

    You can reference date parts both by their full name and an abbreviation.

    Date partAbbreviations
    YEARyy, yyyy
    QUARTERqq, q
    MONTHmm, m
    DAYOFYEARdy, y
    DAYdd, d
    WEEKwk, ww
    WEEKDAYdw, w
    HOURhh
    MINUTEmi, n
    SECONDss, s
    MILLISECONDms
    MICROSECONDmcs
    NANOSECONDns

    DAYOFYEAR, DAY, and WEEKDAY sounds similar to each other, but they return a bit different value. DAYOFYEAR will tell you which day of the year it is (f.e. 257). DAY returns number of the day within the month (f.e. 14). WEEKDAY returns number of the day within a week (f.e. 2 for Monday).

    For 99% of SFMC needs, you will be fine with YEAR, MONTH, DAY, HOUR and MINUTE. Using only those with the full name will make your queries readable and straightforward for everyone.

    DATENAME

    The DATENAME functions return the string value of the specified date part from a given date.

    Capture the whole day's name
    SELECT
    SubscriberKey
    , DATENAME(WEEKDAY, DateJoined) AS DayJoined
    FROM Ent._Subscribers

    It might help quickly cut the date to just an important part (like a year for anniversary personalisation or capturing anniversary bins). However, its standout feature is returning the day's name for a given date, thanks to the WEEKDAY date part.

    Create an automation that will capture weekend meetings for Friday reminder
    SELECT SubscriberKey
    FROM SalesMeetings
    WHERE DATENAME(WEEKDAY, DayOfMeeting) IN ('Friday', 'Saturday', 'Sunday')
    AND DATEDIFF(DAY, GETDATE(), DayOfMeeting) < 3

    It works for months as well: DATENAME(MONTH, GETDATE()).

    As DATENAME returns a string, you won't be able to do any calculations on the outcome - even if it will contain only digits (like DATENAME from the YEAR date part). If you want to perform operations, you must use the DATEPART function.

    DATEFROMPARTS & DATETIMEFROMPARTS

    While DATEPART and DATENAME allow you to pull specific parts from a given date, there are also three functions that will enable you to go the other way round.

    DATEFROMPARTS lets you create a date value from three integers representing a year, month and day.

    SELECT
    SubscriberKey
    , DATEFROMPARTS(2022, 01, 31) AS DateValue

    DATETIMEFROMEPARTS is a sibling function that requires more data but outputs a fully-fledged datetime value. On top of the year, month and day, add an hour, minute, seconds and milliseconds. You won't be able to see the time part in the Salesforce Marketing Cloud UI (Contact Builder or Email Studio), but it will be available for calculations.

    SELECT
    SubscriberKey
    , DATETIMEFROMPARTS(2022, 01, 31, 23, 59, 59, 0) AS DatetimeValue

    There is also a third function: TIMEFROMEPARTS. It requires an hour, minute, seconds, fraction and precision as arguments. Its usefulness in Marketing Cloud is close to none.

    You Should Know

    Of course, you don't have to pass hardcoded integers as arguments for those functions - you can pass existing fields or even calculated values.

    However, keep in mind that if at least one provided date part is a NULL, the whole output will be a NULL.

    DATEADD

    The DATEADD functions give you the power to add and subtract from your date values.

    Add seven days to the current UTC date
    SELECT
    GETUTCDATE() AS TrialStartDate
    , DATEADD(DAY, 7, GETUTCDATE()) AS TrialEndDate

    It requires three things:

    1. Date part - The date element that will be changed
    2. Number - The integer (or an expression evaluating to integer) for interval
    3. Date - The original date that the DATEADD function will change. It can be in any date data type. The output will be of the same type.
    You Should Know

    DATEADD does not take into consideration timezone offset.

    However, if you change the date with the 31st day of the month by some months and the outcome month is shorter, SQL will account for that and return the last day of a given month.

    DATEADD is especially useful when used with the WHERE statement, as it allows to filter records dynamically:

    Find all Subscribers that joined within the last month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    It's even better with ranges:

    Find all Subscribers registered to an event within the next month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM EventRegistration
    WHERE EventDate BETWEEN GETDATE() AND DATEADD(MONTH, 1, GETDATE())
    You Should Know

    A similar date calculation is also available with the DATEADD() AMPScript function. Depending on the use case, consider whether you want to manipulate the date in the Data Extension or only in the communication.

    If the date field is nullable, be sure to use COALESCE or add a NULL checking condition.

    DATEDIFF

    The DATEDIFF function calculates the difference between two dates.

    You need to provide the date part used for the calculation and two dates (start and end order).

    You may use it in the SELECT statement:

    Check how long someone was a subscriber
    SELECT
    SubscriberKey
    , DATEDIFF(DAY, DateJoined, GETDATE()) AS SubscriptionTime
    FROM Ent._Subscribers

    You may use it in the WHERE statement:

    Get everyone that hit one year on the subscription list
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE DATEDIFF(DAY, DateJoined, GETDATE()) = 365
    You Should Know

    DATEDIFF can output positive and negative numbers depending on provided values and their order.

    SELECT
    DATEDIFF(DAY, DATEADD(DAY, -1, GETDATE()), GETDATE()) AS YesterdayPostive /* Output: 1 */
    , DATEDIFF(DAY, GETDATE(), DATEADD(DAY, -1, GETDATE())) AS YesterdayNegative /* Output: -1 */

    It is crucial for creating correct comparisons within WHERE.

    It takes into consideration the leap years. If you provide dates with offset, it will include the timezone differences and Daylight Saving Time.

    You can also use DATEDIFF for capturing ranges.

    Find all Subscribers registered to an event within next 31 days
    SELECT
    SubscriberKey
    , EmailAddress
    FROM EventRegistration
    WHERE DATEDIFF(DAY, GETDATE(), EventDate) <= 31

    It is shorter than DATEADD but with a different level of control. Because DATEDIFF operates on Date Parts, it will consider only the chosen part. For example:

    Different ranges, same outcome
    SELECT
    DATEDIFF(MONTH, 'Mar 31 2021', 'Apr 01 2021') AS ShortDiff /* Output: 1 */
    , DATEDIFF(MONTH, 'Mar 01 2021', 'Apr 30 2021') AS LongDiff /* Output: 1 */

    Despite dates in the first DATEDIFF being just a day apart and in the second nearly two months apart, both return 1. The reason is that DATEDIFF compares only the month date part - March to April is a single month of difference.

    Depending on the use case, it might be good or bad, so be sure to select the correct function for your needs.

    You Should Know

    There is a limit to how big the difference can be. If you go down to the SECOND date part, the query's maximum time difference is 68 years, 19 days, 3 hours, 14 minutes and 7 seconds. It shouldn't be an issue in Marketing Cloud for most use cases.

    If the date field is nullable, be sure to use COALESCE or add a NULL checking condition.

    AT TIME ZONE

    The AT TIME ZONE function provides two incredible features:

    1. It can give timezone offset information for any datetime missing this data.
    2. It can convert datetime with offset to a different timezone.

    It's a must-have for multi-country senders and beneficial for others planning to personalize or calculate using date data.

    You Should Know

    AT TIME ZONE always outputs DATETIMEOFFSET data type. If you need it in another type/format, use CONVERT or FORMAT.

    Add offset with AT TIME ZONE

    When you work with timezones, you want to have offset for the datetime fields you are using. Unfortunately, in most cases, it is missing. Neither Salesforce Marketing Cloud system timestamps nor the popular GETDATE function provides offset information.

    You can quickly fix it with AT TIME ZONE. When you apply this function to a timezone-less datetime, it will assume that you are defining it and return value with an appropriate offset.

    Daylight Saving Time magic
    SELECT
    CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CST /* Output: 2020-01-01 18:00:00 -06:00 */
    , CONVERT(DATETIME2(0), '2020-07-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CDT /* Output: 2020-07-01 18:00:00 -05:00 */

    In the above snippet, we CONVERT the dates to datetime without offset. Then the AT TIME ZONE function adds the offset and calculates the Daylight Saving Time offset change for you.

    You Should Know

    Not all available timezones observe Daylight Saving Time. For example, Central Standard Time observes DST, while Central America Standard Time does not. Always double-check the behaviour of the timezone you are selecting for your query.

    AT TIME ZONE vs TODATETIMEOFFSET

    As astonishing as it might seem, taking Daylight Saving Time into consideration is a problem when working with Salesforce Marketing Cloud system dates (including the GETDATE).

    Salesforce Marketing Cloud uses Central Standard Time (UTC-6) without changes between standard and daylight savings time. It means that AT TIME ZONE's excellent feature is working against us.

    There are, however, two workarounds:

    1. Central America Standard Time. It is a CST-like timezone that stays at the same offset for the whole year.
    No Daylight Saving Time magic
    SELECT
    CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central America Standard Time' AS CST /* Output: 2020-01-01 18:00:00 -06:00 */
    , CONVERT(DATETIME2(0), '2020-07-01T18:00:00') AT TIME ZONE 'Central America Standard Time' AS AlsoCST /* Output: 2020-07-01 18:00:00 -06:00 */
    1. TODATETIMEOFFSET. It is a simplified version of the AT TIME ZONE that adds arbitrary offset without any logic on Daylight Saving Time. Just as we would like for the SFMC system dates.

    To use it, provide a datetime and an offset (for example, '-06:00' or '+01:00'):

    No Daylight Saving Time magic
    SELECT
    TODATETIMEOFFSET(CONVERT(DATETIME2(0), '2020-01-01T18:00:00'), '-06:00') AS CST /* Output: 2020-01-01 18:00:00 -06:00 */
    , TODATETIMEOFFSET(CONVERT(DATETIME2(0), '2020-07-01T18:00:00'), '-06:00') AS AlsoCST /* Output: 2020-07-01 18:00:00 -06:00 */

    Of course, for any datetime values that include the Daylight Saving Time - pushed from a website or your data warehouse - AT TIME ZONE will be the better solution.

    Change timezone with AT TIME ZONE

    AT TIME ZONE is useful also for changing the timezone of a datetime with offset.

    You use it as previously - by providing the original datetime and the target timezone. But because the first argument already contains the offset, the function will convert the time to a new timezone in this scenario.

    Change CST datetime with offset to CET
    SELECT CONVERT(DATETIMEOFFSET(0), '2018-01-01 18:00:00 -06:00') AT TIME ZONE 'Central European Standard Time' AS CSTtoCET /* Output: 2020-01-02 01:00:00 +01:00 */

    It will also automatically consider any differences between Daylight Saving Time start and end times for each timezone.

    You Should Know

    You can leverage both features of the AT THE TIMEZONE in one line to apply the timezone to offset-less datetime and convert it to another timezone by using the function twice:

    First, apply the timezone. Then change the timezone
    SELECT CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Central European Standard Time' AS DateToCSTtoCET, /* Output: 2020-01-02 01:00:00 +01:00 */

    It works because the function's first execution adds the offset with AT TIME ZONE. The second uses the output with an offset applied and change the timezone.

    Of course, for Salesforce Marketing Cloud system dates, we still need either of the workarounds:

    No Daylight Saving Time magic but still changing the timezone
    SELECT
    GETDATE() AT TIME ZONE 'Central America Standard Time' AT TIME ZONE 'Central European Standard Time' AS SystemDateToCSTtoCET_v1
    , TODATETIMEOFFSET(GETDATE(), '-06:00') AT TIME ZONE 'Central European Standard Time' AS SystemDateToCSTtoCET_v2

    Available timezones

    You can choose from 140 available timezones: -Dateline Standard Time, UTC-11, Aleutian Standard Time, Hawaiian Standard Time, Marquesas Standard Time, Alaskan Standard Time, UTC-09, Pacific Standard Time (Mexico), UTC-08, Pacific Standard Time, US Mountain Standard Time, Mountain Standard Time (Mexico), Mountain Standard Time, Central America Standard Time, Central Standard Time, Easter Island Standard Time, Central Standard Time (Mexico), Canada Central Standard Time, SA Pacific Standard Time, Eastern Standard Time (Mexico), Eastern Standard Time, Haiti Standard Time, Cuba Standard Time, US Eastern Standard Time, Paraguay Standard Time, Atlantic Standard Time, Venezuela Standard Time, Central Brazilian Standard Time, SA Western Standard Time, Pacific SA Standard Time, Turks And Caicos Standard Time, Newfoundland Standard Time, Tocantins Standard Time, E. South America Standard Time, SA Eastern Standard Time, Argentina Standard Time, Greenland Standard Time, Montevideo Standard Time, Magallanes Standard Time, Saint Pierre Standard Time, Bahia Standard Time, UTC-02, Mid-Atlantic Standard Time, Azores Standard Time, Cape Verde Standard Time, UTC, Morocco Standard Time, GMT Standard Time, Greenwich Standard Time, W. Europe Standard Time, Central Europe Standard Time, Romance Standard Time, Central European Standard Time, W. Central Africa Standard Time, Namibia Standard Time, Jordan Standard Time, GTB Standard Time, Middle East Standard Time, Egypt Standard Time, E. Europe Standard Time, Syria Standard Time, West Bank Standard Time, South Africa Standard Time, FLE Standard Time, Israel Standard Time, Kaliningrad Standard Time, Libya Standard Time, Arabic Standard Time, Turkey Standard Time, Arab Standard Time, Belarus Standard Time, Russian Standard Time, E. Africa Standard Time, Iran Standard Time, Arabian Standard Time, Astrakhan Standard Time, Azerbaijan Standard Time, Russia Time Zone 3, Mauritius Standard Time, Saratov Standard Time, Georgian Standard Time, Caucasus Standard Time, Afghanistan Standard Time, West Asia Standard Time, Ekaterinburg Standard Time, Pakistan Standard Time, India Standard Time, Sri Lanka Standard Time, Nepal Standard Time, Central Asia Standard Time, Bangladesh Standard Time, Omsk Standard Time, Myanmar Standard Time, SE Asia Standard Time, Altai Standard Time, W. Mongolia Standard Time, North Asia Standard Time, N. Central Asia Standard Time, Tomsk Standard Time, China Standard Time, North Asia East Standard Time, Singapore Standard Time, W. Australia Standard Time, Taipei Standard Time, Ulaanbaatar Standard Time, North Korea Standard Time, Aus Central W. Standard Time, Transbaikal Standard Time, Tokyo Standard Time, Korea Standard Time, Yakutsk Standard Time, Cen. Australia Standard Time, AUS Central Standard Time, E. Australia Standard Time, AUS Eastern Standard Time, West Pacific Standard Time, Tasmania Standard Time, Vladivostok Standard Time, Lord Howe Standard Time, Bougainville Standard Time, Russia Time Zone 10, Magadan Standard Time, Norfolk Standard Time, Sakhalin Standard Time, Central Pacific Standard Time, Russia Time Zone 11, New Zealand Standard Time, UTC+12, Fiji Standard Time, Kamchatka Standard Time, Chatham Islands Standard Time, UTC+13, Tonga Standard Time, Samoa Standard Time, Line Islands Standard Time.

    Don't worry about Daylight Saving Time names - AT TIME ZONE use the Standard ones and will take care of DST.

    FORMAT with Dates

    The FORMAT works only with datetime and numeric values, outputs a string and requires:

    1. Value to be formatted (can be a column, string or a function)
    2. Format specifier to be applied
    3. Optionally - ISO culture code

    It is a perfect tool to manipulate any dates (or date-like strings with the help of conversion) available in your Data Extensions. For personalization. For comparison between system and imported dates outside of the query. For preparing data to export it to an external system with specific format requirements.

    Instead of creating complex AMPScript logic to adapt dates, format them
    SELECT
    FORMAT(CONVERT(DATE, '10/30/2020'), 'd', 'en-GB') AS DateOrderedProperly
    , FORMAT(GETUTCDATE(), 'dd/MM/yyyy') AS TodayCustomFormat
    , FORMAT(DateJoined, 'D', 'de-DE') AS DateExpandedIndian

    In the example above, the first two FORMAT functions return the date in the same format - 30/10/2020 - one by using manually provided value, another by taking the current UTC date from the function.

    The last line outputs Freitag, 7. Februar 2020. Neat for running it with CASE to change your short date into an extended date personalized on user language.

    Standard date formats

    Above, you have seen three different format specifiers used to manipulate the date, but many more are available. You can find the most useful below:

    Format specifierDescriptionExample (for US culture)
    'd'Short date10/30/2020
    'D'Long dateFriday, October 30, 2020
    'm'/'M'Month DayOctober 30
    'y'/'Y'Year MonthOctober 2020
    't'Short time2:15 PM
    'T'Long time2:15:30 PM
    'g'General short time10/30/2020 2:15 PM
    'G'General long time10/30/2020 2:15:30 PM
    'f'Full short timeFriday, October 30, 2020 2:15 PM
    'F'Full long timeFriday, October 30, 2020 2:15:30 PM
    'r'/'R'RFC1123Fri, 30 Oct 2020 14:15:30 GMT

    As highlighted in the table header - the examples are for the SFMC default US culture formating. If you add a specific culture code as a third parameter, the outcome will be different, as various countries have different defaults of elements order and separator style.

    You can find the complete list of standard date format specifiers on Microsoft .Net Doc Pages.

    Custom date formats

    Of course, you are not limited to the formats shown above. Whenever you want something different, you can create a custom format by just providing a full pattern instead of a short specifier by using those elements:

    Format specifierDescriptionExample (for US culture)
    'd'Day of the month1
    'dd'Zero-based day of the month01
    'ddd'Abbreviated day of the monthMon
    'dddd'Full day of the monthMonday
    'M'Month1
    'MM'Zero-based month01
    'MMM'Abbreviated monthJan
    'MMMM'Full monthJanuary
    'yy'Last two digits of the year20
    'yyyy'Four digits year2020
    'h'Hour (12-hour clock)1
    'hh'Zero-based hour (12-hour clock)01
    'tt'AM/PM designatorAM
    'H'Hour (24-hour clock)13
    'HH'Zero-based hour (24-hour clock)01
    'm'Minute1
    'mm'Zero-based minute01
    's'Seconds1
    'ss'Zero-based seconds01
    ':'Time separator':'
    '/'Date separator'/'

    Again, the examples are for the default US culture formatting and might look different for different cultures (for example, the hour separator might be changed automatically to . for Italy).

    You can use the above format specifiers to obtain the exact format needed:

    SELECT FORMAT(GETUTCDATE(), 'dddd (dd MMMM yyyy) - HH:mm', 'en-GB') AS FormattedDate

    The above query will return Saturday (30 October 2020) - 02:15.

    You can find the complete list of custom date format specifiers on Microsoft .Net Doc Pages.

    You Should Know

    AMPScript uses very similar custom formatting with FORMAT() and FORMATDATE() functions. Depending on the use case, consider whether you want to manipulate the date visual representation in the Data Extension or only in the communication.

    - - +

    SFMC SQL Date Functions

    Take control over dates with built-in SQL functions. Let the query do the job.

    +

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    +

    Here, I will cover only selected date functions that I find most useful for Marketing Automation purposes. They will help you find the current date, calculate a new one or format it to match your needs.

    +

    GETDATE & GETUTCDATE

    +

    The GETDATE function is the most straightforward way to get the current timestamp within your query.

    +
    SELECT GETDATE() AS CurrentDate
    +
    You Should Know

    GETDATE() gets server time. For Salesforce Marketing Cloud, it means Central Standard Time (UTC-6) without changes between standard and daylight savings time. It cannot be changed, even with timezone and culture settings in Setup.

    You can get the datetime with appropriate offset information using the SYSDATETIMEOFFSET() function. It will return the same datetime as GETDATE() but in a format showcasing the timezone offset: 2020-12-28 15:08:01.7239173 -06:00.

    You can see the 24-hour clock format and milliseconds and UTC-6 offset at the end. This last information will be helpful for timezone conversions with the AT TIME ZONE function.

    You can also leverage [TODATETIMEOFFSET'](#at-time-zone-vs-todatetimeoffset) to work with standard GETDATE`.

    +

    The GETUTCDATE function works the same as GETDATE but returns datetime in the UTC timezone.

    +
    SELECT GETUTCDATE() AS CurrentUTCDate
    +

    Both return a datetime object (for example, Oct 30 2020 1:15AM), so no conversion is needed to use other Date Functions on the outcome of this function.

    +

    However, you can limit its output to either date or time part by using CONVERT or FORMAT Functions.

    +

    DATEPART

    +

    The DATEPART function returns the chosen part of the provided date.

    +
    Find all Subscribers that joined in 2020
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DATEPART(YEAR, DateJoined) = 2020
    +

    It outputs an integer, so be sure you use a number when making comparisons. If you need a string output, check out the similar DATENAME function.

    +
    You Should Know

    There are also three shortcuts for the most popular use cases: YEAR(), MONTH() and DAY().

    Find all Subscribers that joined in 2020 - shorter approach
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE YEAR(DateJoined) = 2020

    In the backend, those functions are just wrappers around DATEPART, so you can use whatever you prefer.

    +

    Date parts

    +

    You can reference date parts both by their full name and an abbreviation.

    +
    Date partAbbreviations
    YEARyy, yyyy
    QUARTERqq, q
    MONTHmm, m
    DAYOFYEARdy, y
    DAYdd, d
    WEEKwk, ww
    WEEKDAYdw, w
    HOURhh
    MINUTEmi, n
    SECONDss, s
    MILLISECONDms
    MICROSECONDmcs
    NANOSECONDns
    +

    DAYOFYEAR, DAY, and WEEKDAY sounds similar to each other, but they return a bit different value. DAYOFYEAR will tell you which day of the year it is (f.e. 257). DAY returns number of the day within the month (f.e. 14). WEEKDAY returns number of the day within a week (f.e. 2 for Monday).

    +

    For 99% of SFMC needs, you will be fine with YEAR, MONTH, DAY, HOUR and MINUTE. Using only those with the full name will make your queries readable and straightforward for everyone.

    +

    DATENAME

    +

    The DATENAME functions return the string value of the specified date part from a given date.

    +
    Capture the whole day's name
    SELECT
    SubscriberKey
    , DATENAME(WEEKDAY, DateJoined) AS DayJoined
    FROM Ent._Subscribers
    +

    It might help quickly cut the date to just an important part (like a year for anniversary personalisation or capturing anniversary bins). However, its standout feature is returning the day's name for a given date, thanks to the WEEKDAY date part.

    +
    Create an automation that will capture weekend meetings for Friday reminder
    SELECT SubscriberKey
    FROM SalesMeetings
    WHERE DATENAME(WEEKDAY, DayOfMeeting) IN ('Friday', 'Saturday', 'Sunday')
    AND DATEDIFF(DAY, GETDATE(), DayOfMeeting) < 3
    +

    It works for months as well: DATENAME(MONTH, GETDATE()).

    +

    As DATENAME returns a string, you won't be able to do any calculations on the outcome - even if it will contain only digits (like DATENAME from the YEAR date part). If you want to perform operations, you must use the DATEPART function.

    +

    DATEFROMPARTS & DATETIMEFROMPARTS

    +

    While DATEPART and DATENAME allow you to pull specific parts from a given date, there are also three functions that will enable you to go the other way round.

    +

    DATEFROMPARTS lets you create a date value from three integers representing a year, month and day.

    +
    SELECT
    SubscriberKey
    , DATEFROMPARTS(2022, 01, 31) AS DateValue
    +

    DATETIMEFROMEPARTS is a sibling function that requires more data but outputs a fully-fledged datetime value. On top of the year, month and day, add an hour, minute, seconds and milliseconds. You won't be able to see the time part in the Salesforce Marketing Cloud UI (Contact Builder or Email Studio), but it will be available for calculations.

    +
    SELECT
    SubscriberKey
    , DATETIMEFROMPARTS(2022, 01, 31, 23, 59, 59, 0) AS DatetimeValue
    +

    There is also a third function: TIMEFROMEPARTS. It requires an hour, minute, seconds, fraction and precision as arguments. Its usefulness in Marketing Cloud is close to none.

    +
    You Should Know

    Of course, you don't have to pass hardcoded integers as arguments for those functions - you can pass existing fields or even calculated values.

    However, keep in mind that if at least one provided date part is a NULL, the whole output will be a NULL.

    +

    DATEADD

    +

    The DATEADD functions give you the power to add and subtract from your date values.

    +
    Add seven days to the current UTC date
    SELECT
    GETUTCDATE() AS TrialStartDate
    , DATEADD(DAY, 7, GETUTCDATE()) AS TrialEndDate
    +

    It requires three things:

    +
      +
    1. Date part - The date element that will be changed
    2. +
    3. Number - The integer (or an expression evaluating to integer) for interval
    4. +
    5. Date - The original date that the DATEADD function will change. It can be in any date data type. The output will be of the same type.
    6. +
    +
    You Should Know

    DATEADD does not take into consideration timezone offset.

    However, if you change the date with the 31st day of the month by some months and the outcome month is shorter, SQL will account for that and return the last day of a given month.

    +

    DATEADD is especially useful when used with the WHERE statement, as it allows to filter records dynamically:

    +
    Find all Subscribers that joined within the last month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())
    +

    It's even better with ranges:

    +
    Find all Subscribers registered to an event within the next month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM EventRegistration
    WHERE EventDate BETWEEN GETDATE() AND DATEADD(MONTH, 1, GETDATE())
    +
    You Should Know

    A similar date calculation is also available with the DATEADD() AMPScript function. Depending on the use case, consider whether you want to manipulate the date in the Data Extension or only in the communication.

    +

    If the date field is nullable, be sure to use COALESCE or add a NULL checking condition.

    +

    DATEDIFF

    +

    The DATEDIFF function calculates the difference between two dates.

    +

    You need to provide the date part used for the calculation and two dates (start and end order).

    +

    You may use it in the SELECT statement:

    +
    Check how long someone was a subscriber
    SELECT
    SubscriberKey
    , DATEDIFF(DAY, DateJoined, GETDATE()) AS SubscriptionTime
    FROM Ent._Subscribers
    +

    You may use it in the WHERE statement:

    +
    Get everyone that hit one year on the subscription list
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE DATEDIFF(DAY, DateJoined, GETDATE()) = 365
    +
    You Should Know

    DATEDIFF can output positive and negative numbers depending on provided values and their order.

    SELECT
    DATEDIFF(DAY, DATEADD(DAY, -1, GETDATE()), GETDATE()) AS YesterdayPostive /* Output: 1 */
    , DATEDIFF(DAY, GETDATE(), DATEADD(DAY, -1, GETDATE())) AS YesterdayNegative /* Output: -1 */

    It is crucial for creating correct comparisons within WHERE.

    +

    It takes into consideration the leap years. If you provide dates with offset, it will include the timezone differences and Daylight Saving Time.

    +

    You can also use DATEDIFF for capturing ranges.

    +
    Find all Subscribers registered to an event within next 31 days
    SELECT
    SubscriberKey
    , EmailAddress
    FROM EventRegistration
    WHERE DATEDIFF(DAY, GETDATE(), EventDate) <= 31
    +

    It is shorter than DATEADD but with a different level of control. Because DATEDIFF operates on Date Parts, it will consider only the chosen part. For example:

    +
    Different ranges, same outcome
    SELECT
    DATEDIFF(MONTH, 'Mar 31 2021', 'Apr 01 2021') AS ShortDiff /* Output: 1 */
    , DATEDIFF(MONTH, 'Mar 01 2021', 'Apr 30 2021') AS LongDiff /* Output: 1 */
    +

    Despite dates in the first DATEDIFF being just a day apart and in the second nearly two months apart, both return 1. The reason is that DATEDIFF compares only the month date part - March to April is a single month of difference.

    +

    Depending on the use case, it might be good or bad, so be sure to select the correct function for your needs.

    +
    You Should Know

    There is a limit to how big the difference can be. If you go down to the SECOND date part, the query's maximum time difference is 68 years, 19 days, 3 hours, 14 minutes and 7 seconds. It shouldn't be an issue in Marketing Cloud for most use cases.

    +

    If the date field is nullable, be sure to use COALESCE or add a NULL checking condition.

    +

    AT TIME ZONE

    +

    The AT TIME ZONE function provides two incredible features:

    +
      +
    1. It can give timezone offset information for any datetime missing this data.
    2. +
    3. It can convert datetime with offset to a different timezone.
    4. +
    +

    It's a must-have for multi-country senders and beneficial for others planning to personalize or calculate using date data.

    +
    You Should Know

    AT TIME ZONE always outputs DATETIMEOFFSET data type. If you need it in another type/format, use CONVERT or FORMAT.

    +

    Add offset with AT TIME ZONE

    +

    When you work with timezones, you want to have offset for the datetime fields you are using. Unfortunately, in most cases, it is missing. Neither Salesforce Marketing Cloud system timestamps nor the popular GETDATE function provides offset information.

    +

    You can quickly fix it with AT TIME ZONE. When you apply this function to a timezone-less datetime, it will assume that you are defining it and return value with an appropriate offset.

    +
    Daylight Saving Time magic
    SELECT
    CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CST /* Output: 2020-01-01 18:00:00 -06:00 */
    , CONVERT(DATETIME2(0), '2020-07-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CDT /* Output: 2020-07-01 18:00:00 -05:00 */
    +

    In the above snippet, we CONVERT the dates to datetime without offset. Then the AT TIME ZONE function adds the offset and calculates the Daylight Saving Time offset change for you.

    +
    You Should Know

    Not all available timezones observe Daylight Saving Time. For example, Central Standard Time observes DST, while Central America Standard Time does not. Always double-check the behaviour of the timezone you are selecting for your query.

    +

    AT TIME ZONE vs TODATETIMEOFFSET

    +

    As astonishing as it might seem, taking Daylight Saving Time into consideration is a problem when working with Salesforce Marketing Cloud system dates (including the GETDATE).

    +

    Salesforce Marketing Cloud uses Central Standard Time (UTC-6) without changes between standard and daylight savings time. It means that AT TIME ZONE's excellent feature is working against us.

    +

    There are, however, two workarounds:

    +
      +
    1. Central America Standard Time. It is a CST-like timezone that stays at the same offset for the whole year.
    2. +
    +
    No Daylight Saving Time magic
    SELECT
    CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central America Standard Time' AS CST /* Output: 2020-01-01 18:00:00 -06:00 */
    , CONVERT(DATETIME2(0), '2020-07-01T18:00:00') AT TIME ZONE 'Central America Standard Time' AS AlsoCST /* Output: 2020-07-01 18:00:00 -06:00 */
    +
      +
    1. TODATETIMEOFFSET. It is a simplified version of the AT TIME ZONE that adds arbitrary offset without any logic on Daylight Saving Time. Just as we would like for the SFMC system dates.
    2. +
    +

    To use it, provide a datetime and an offset (for example, '-06:00' or '+01:00'):

    +
    No Daylight Saving Time magic
    SELECT
    TODATETIMEOFFSET(CONVERT(DATETIME2(0), '2020-01-01T18:00:00'), '-06:00') AS CST /* Output: 2020-01-01 18:00:00 -06:00 */
    , TODATETIMEOFFSET(CONVERT(DATETIME2(0), '2020-07-01T18:00:00'), '-06:00') AS AlsoCST /* Output: 2020-07-01 18:00:00 -06:00 */
    +

    Of course, for any datetime values that include the Daylight Saving Time - pushed from a website or your data warehouse - AT TIME ZONE will be the better solution.

    +

    Change timezone with AT TIME ZONE

    +

    AT TIME ZONE is useful also for changing the timezone of a datetime with offset.

    +

    You use it as previously - by providing the original datetime and the target timezone. But because the first argument already contains the offset, the function will convert the time to a new timezone in this scenario.

    +
    Change CST datetime with offset to CET
    SELECT CONVERT(DATETIMEOFFSET(0), '2018-01-01 18:00:00 -06:00') AT TIME ZONE 'Central European Standard Time' AS CSTtoCET /* Output: 2020-01-02 01:00:00 +01:00 */
    +

    It will also automatically consider any differences between Daylight Saving Time start and end times for each timezone.

    +
    You Should Know

    You can leverage both features of the AT THE TIMEZONE in one line to apply the timezone to offset-less datetime and convert it to another timezone by using the function twice:

    First, apply the timezone. Then change the timezone
    SELECT CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Central European Standard Time' AS DateToCSTtoCET, /* Output: 2020-01-02 01:00:00 +01:00 */

    It works because the function's first execution adds the offset with AT TIME ZONE. The second uses the output with an offset applied and change the timezone.

    Of course, for Salesforce Marketing Cloud system dates, we still need either of the workarounds:

    No Daylight Saving Time magic but still changing the timezone
    SELECT
    GETDATE() AT TIME ZONE 'Central America Standard Time' AT TIME ZONE 'Central European Standard Time' AS SystemDateToCSTtoCET_v1
    , TODATETIMEOFFSET(GETDATE(), '-06:00') AT TIME ZONE 'Central European Standard Time' AS SystemDateToCSTtoCET_v2
    +

    Available timezones

    +

    You can choose from 140 available timezones: +Dateline Standard Time, UTC-11, Aleutian Standard Time, Hawaiian Standard Time, Marquesas Standard Time, Alaskan Standard Time, UTC-09, Pacific Standard Time (Mexico), UTC-08, Pacific Standard Time, US Mountain Standard Time, Mountain Standard Time (Mexico), Mountain Standard Time, Central America Standard Time, Central Standard Time, Easter Island Standard Time, Central Standard Time (Mexico), Canada Central Standard Time, SA Pacific Standard Time, Eastern Standard Time (Mexico), Eastern Standard Time, Haiti Standard Time, Cuba Standard Time, US Eastern Standard Time, Paraguay Standard Time, Atlantic Standard Time, Venezuela Standard Time, Central Brazilian Standard Time, SA Western Standard Time, Pacific SA Standard Time, Turks And Caicos Standard Time, Newfoundland Standard Time, Tocantins Standard Time, E. South America Standard Time, SA Eastern Standard Time, Argentina Standard Time, Greenland Standard Time, Montevideo Standard Time, Magallanes Standard Time, Saint Pierre Standard Time, Bahia Standard Time, UTC-02, Mid-Atlantic Standard Time, Azores Standard Time, Cape Verde Standard Time, UTC, Morocco Standard Time, GMT Standard Time, Greenwich Standard Time, W. Europe Standard Time, Central Europe Standard Time, Romance Standard Time, Central European Standard Time, W. Central Africa Standard Time, Namibia Standard Time, Jordan Standard Time, GTB Standard Time, Middle East Standard Time, Egypt Standard Time, E. Europe Standard Time, Syria Standard Time, West Bank Standard Time, South Africa Standard Time, FLE Standard Time, Israel Standard Time, Kaliningrad Standard Time, Libya Standard Time, Arabic Standard Time, Turkey Standard Time, Arab Standard Time, Belarus Standard Time, Russian Standard Time, E. Africa Standard Time, Iran Standard Time, Arabian Standard Time, Astrakhan Standard Time, Azerbaijan Standard Time, Russia Time Zone 3, Mauritius Standard Time, Saratov Standard Time, Georgian Standard Time, Caucasus Standard Time, Afghanistan Standard Time, West Asia Standard Time, Ekaterinburg Standard Time, Pakistan Standard Time, India Standard Time, Sri Lanka Standard Time, Nepal Standard Time, Central Asia Standard Time, Bangladesh Standard Time, Omsk Standard Time, Myanmar Standard Time, SE Asia Standard Time, Altai Standard Time, W. Mongolia Standard Time, North Asia Standard Time, N. Central Asia Standard Time, Tomsk Standard Time, China Standard Time, North Asia East Standard Time, Singapore Standard Time, W. Australia Standard Time, Taipei Standard Time, Ulaanbaatar Standard Time, North Korea Standard Time, Aus Central W. Standard Time, Transbaikal Standard Time, Tokyo Standard Time, Korea Standard Time, Yakutsk Standard Time, Cen. Australia Standard Time, AUS Central Standard Time, E. Australia Standard Time, AUS Eastern Standard Time, West Pacific Standard Time, Tasmania Standard Time, Vladivostok Standard Time, Lord Howe Standard Time, Bougainville Standard Time, Russia Time Zone 10, Magadan Standard Time, Norfolk Standard Time, Sakhalin Standard Time, Central Pacific Standard Time, Russia Time Zone 11, New Zealand Standard Time, UTC+12, Fiji Standard Time, Kamchatka Standard Time, Chatham Islands Standard Time, UTC+13, Tonga Standard Time, Samoa Standard Time, Line Islands Standard Time.

    +

    Don't worry about Daylight Saving Time names - AT TIME ZONE use the Standard ones and will take care of DST.

    +

    FORMAT with Dates

    +

    The FORMAT works only with datetime and numeric values, outputs a string and requires:

    +
      +
    1. Value to be formatted (can be a column, string or a function)
    2. +
    3. Format specifier to be applied
    4. +
    5. Optionally - ISO culture code
    6. +
    +

    It is a perfect tool to manipulate any dates (or date-like strings with the help of conversion) available in your Data Extensions. For personalization. For comparison between system and imported dates outside of the query. For preparing data to export it to an external system with specific format requirements.

    +
    Instead of creating complex AMPScript logic to adapt dates, format them
    SELECT
    FORMAT(CONVERT(DATE, '10/30/2020'), 'd', 'en-GB') AS DateOrderedProperly
    , FORMAT(GETUTCDATE(), 'dd/MM/yyyy') AS TodayCustomFormat
    , FORMAT(DateJoined, 'D', 'de-DE') AS DateExpandedIndian
    +

    In the example above, the first two FORMAT functions return the date in the same format - 30/10/2020 - one by using manually provided value, another by taking the current UTC date from the function.

    +

    The last line outputs Freitag, 7. Februar 2020. Neat for running it with CASE to change your short date into an extended date personalized on user language.

    +

    Standard date formats

    +

    Above, you have seen three different format specifiers used to manipulate the date, but many more are available. You can find the most useful below:

    +
    Format specifierDescriptionExample (for US culture)
    'd'Short date10/30/2020
    'D'Long dateFriday, October 30, 2020
    'm'/'M'Month DayOctober 30
    'y'/'Y'Year MonthOctober 2020
    't'Short time2:15 PM
    'T'Long time2:15:30 PM
    'g'General short time10/30/2020 2:15 PM
    'G'General long time10/30/2020 2:15:30 PM
    'f'Full short timeFriday, October 30, 2020 2:15 PM
    'F'Full long timeFriday, October 30, 2020 2:15:30 PM
    'r'/'R'RFC1123Fri, 30 Oct 2020 14:15:30 GMT
    +

    As highlighted in the table header - the examples are for the SFMC default US culture formating. If you add a specific culture code as a third parameter, the outcome will be different, as various countries have different defaults of elements order and separator style.

    +

    You can find the complete list of standard date format specifiers on Microsoft .Net Doc Pages.

    +

    Custom date formats

    +

    Of course, you are not limited to the formats shown above. Whenever you want something different, you can create a custom format by just providing a full pattern instead of a short specifier by using those elements:

    +
    Format specifierDescriptionExample (for US culture)
    'd'Day of the month1
    'dd'Zero-based day of the month01
    'ddd'Abbreviated day of the monthMon
    'dddd'Full day of the monthMonday
    'M'Month1
    'MM'Zero-based month01
    'MMM'Abbreviated monthJan
    'MMMM'Full monthJanuary
    'yy'Last two digits of the year20
    'yyyy'Four digits year2020
    'h'Hour (12-hour clock)1
    'hh'Zero-based hour (12-hour clock)01
    'tt'AM/PM designatorAM
    'H'Hour (24-hour clock)13
    'HH'Zero-based hour (24-hour clock)01
    'm'Minute1
    'mm'Zero-based minute01
    's'Seconds1
    'ss'Zero-based seconds01
    ':'Time separator':'
    '/'Date separator'/'
    +

    Again, the examples are for the default US culture formatting and might look different for different cultures (for example, the hour separator might be changed automatically to . for Italy).

    +

    You can use the above format specifiers to obtain the exact format needed:

    +
    SELECT FORMAT(GETUTCDATE(), 'dddd (dd MMMM yyyy) - HH:mm', 'en-GB') AS FormattedDate
    +

    The above query will return Saturday (30 October 2020) - 02:15.

    +

    You can find the complete list of custom date format specifiers on Microsoft .Net Doc Pages.

    +
    You Should Know

    AMPScript uses very similar custom formatting with FORMAT() and FORMATDATE() functions. Depending on the use case, consider whether you want to manipulate the date visual representation in the Data Extension or only in the communication.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-from/index.html b/docs/sql/sfmc-sql-from/index.html index c1d10351a..95acc5a75 100644 --- a/docs/sql/sfmc-sql-from/index.html +++ b/docs/sql/sfmc-sql-from/index.html @@ -1,22 +1,43 @@ - + - -SFMC SQL From | Mateusz Dąbrowski + +SFMC SQL From | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL From

    Tell the SQL query FROM where you need the data

    Basic FROM

    The SELECT statement alone won't do much. In most cases, once you have selected data you want to work with, you also need to pick the table (Data Extension or System Data View) FROM which the query will take the required columns. The code for this is simple:

    Get ContactKey and EmailAddress from Data Extension named MasterSubscriberDE
    SELECT
    ContactKey
    , EmailAddress
    FROM MasterSubscriberDE

    Just as with column names, if the name of your Data Extension has spaces or hyphens in it, be sure to enclose it in brackets.

    SELECT
    ContactKey
    , EmailAddress
    FROM [Master-Subscriber DE]

    There are, however, two cases specific to Salesforce Marketing Cloud that adds a twist. System Data Views and Enterprise Data Extensions.

    System Data Views

    Salesforce Marketing Cloud is partially hiding the System Data Views Data Extensions that store tracking data. Think about Email Sent history, Opens and Clicks, Bounces and Complaints. You can find there the tracking data for SMS and Social channels. Also, more technical data points, like Jobs and Enterprise Attributes, are available in the System Data Views. You won't find them in the User Interface but can query them with the SQL. The difference related to those tables is in naming convention. When querying them, you must leverage _ prefix:

    SELECT
    JobID
    , EmailID
    , EmailName
    , EmailSubject
    , EmailSendDefinition
    , DeliveredTime
    FROM _Job

    Enterprise Data Extension

    Here the approach changes depending on where you run your Query. Shared Data Extensions and Synchronized Data Extensions are considered Enterprise and located on the Parent Business Unit level. It means that when you want to query them from the Parent, you need to write it the same way as for standard Data Extensions.

    SELECT
    ContactKey
    , EmailAddress
    FROM SharedDataExtension

    However, if you want to query them from the child Business Unit level, you will have to use a unique prefix - Ent.:

    SELECT
    ContactKey
    , EmailAddress
    FROM Ent.SharedDataExtension

    The same is true for Synchronized Data Extensions. If you want to pull data from a child Business Unit, you will need the Ent. prefix:

    SELECT
    Id AS SubscriberKey
    , Email AS EmailAddress
    FROM Ent.Contact_Salesforce

    Remember that account permissions restrictions may apply.

    You Should Know

    In the past, the opposite was also available. You could query Data Extension located on child Business Unit from the Parent. To do this, you had to use the MID of the child BU (visible next to BU name on the Business Unit selection drop down) as a prefix:

    On Parent BU query DataExtensionOnChildBU from Child BU with MID 5123456
    SELECT
    ContactKey
    , EmailAddress
    FROM 5123456.DataExtensionOnChildBU

    Since 2020, trying to do so will result in an error: An error occurred while checking the query syntax. Errors: The 123456.DataExtensionOnChildBU table has a multi-part specification. This is not allowed. The workaround is to use Shared Data Extensions.

    Marketing Cloud legend says that there are still some instances that support this legacy type of querying. You might try it, but even if you are the lucky one, I would recommend using the Shared Data Extensions to worry not about unexpected Automation errors in the future.

    Enterprise System Data Views

    Using Ent. prefix on a System Data View might give you different results.

    For example, if you query _Subscribers on child Business Unit, you will receive data only for the subscribers stored in this child BU.

    By adding the Ent. prefix, however, you can query all your subscribers on the Parent BU:

    SELECT
    SubscriberKey
    , EmailAddress
    , DateJoined
    , DateUnsubscribed
    FROM Ent._Subscribers

    When selecting Data Extensions to pull data from, remember the best practice to avoid ones spanning a cumulative field width greater than 4000 characters. They will badly impact the performance of your query. If needed, consider splitting your query into multiple consecutive queries.

    - - +

    SFMC SQL From

    Tell the SQL query FROM where you need the data

    +

    Basic FROM

    +

    The SELECT statement alone won't do much. In most cases, once you have selected data you want to work with, you also need to pick the table (Data Extension or System Data View) FROM which the query will take the required columns. The code for this is simple:

    +
    Get ContactKey and EmailAddress from Data Extension named MasterSubscriberDE
    SELECT
    ContactKey
    , EmailAddress
    FROM MasterSubscriberDE
    +

    Just as with column names, if the name of your Data Extension has spaces or hyphens in it, be sure to enclose it in brackets.

    +
    SELECT
    ContactKey
    , EmailAddress
    FROM [Master-Subscriber DE]
    +

    There are, however, two cases specific to Salesforce Marketing Cloud that adds a twist. System Data Views and Enterprise Data Extensions.

    +

    System Data Views

    +

    Salesforce Marketing Cloud is partially hiding the System Data Views Data Extensions that store tracking data. Think about Email Sent history, Opens and Clicks, Bounces and Complaints. You can find there the tracking data for SMS and Social channels. Also, more technical data points, like Jobs and Enterprise Attributes, are available in the System Data Views. You won't find them in the User Interface but can query them with the SQL. The difference related to those tables is in naming convention. When querying them, you must leverage _ prefix:

    +
    SELECT
    JobID
    , EmailID
    , EmailName
    , EmailSubject
    , EmailSendDefinition
    , DeliveredTime
    FROM _Job
    +

    Enterprise Data Extension

    +

    Here the approach changes depending on where you run your Query. Shared Data Extensions and Synchronized Data Extensions are considered Enterprise and located on the Parent Business Unit level. It means that when you want to query them from the Parent, you need to write it the same way as for standard Data Extensions.

    +
    SELECT
    ContactKey
    , EmailAddress
    FROM SharedDataExtension
    +

    However, if you want to query them from the child Business Unit level, you will have to use a unique prefix - Ent.:

    +
    SELECT
    ContactKey
    , EmailAddress
    FROM Ent.SharedDataExtension
    +

    The same is true for Synchronized Data Extensions. If you want to pull data from a child Business Unit, you will need the Ent. prefix:

    +
    SELECT
    Id AS SubscriberKey
    , Email AS EmailAddress
    FROM Ent.Contact_Salesforce
    +

    Remember that account permissions restrictions may apply.

    +
    You Should Know

    In the past, the opposite was also available. You could query Data Extension located on child Business Unit from the Parent. To do this, you had to use the MID of the child BU (visible next to BU name on the Business Unit selection drop down) as a prefix:

    On Parent BU query DataExtensionOnChildBU from Child BU with MID 5123456
    SELECT
    ContactKey
    , EmailAddress
    FROM 5123456.DataExtensionOnChildBU

    Since 2020, trying to do so will result in an error: An error occurred while checking the query syntax. Errors: The 123456.DataExtensionOnChildBU table has a multi-part specification. This is not allowed. The workaround is to use Shared Data Extensions.

    Marketing Cloud legend says that there are still some instances that support this legacy type of querying. You might try it, but even if you are the lucky one, I would recommend using the Shared Data Extensions to worry not about unexpected Automation errors in the future.

    +

    Enterprise System Data Views

    +

    Using Ent. prefix on a System Data View might give you different results.

    +

    For example, if you query _Subscribers on child Business Unit, you will receive data only for the subscribers stored in this child BU.

    +

    By adding the Ent. prefix, however, you can query all your subscribers on the Parent BU:

    +
    SELECT
    SubscriberKey
    , EmailAddress
    , DateJoined
    , DateUnsubscribed
    FROM Ent._Subscribers
    +

    When selecting Data Extensions to pull data from, remember the best practice to avoid ones spanning a cumulative field width greater than 4000 characters. They will badly impact the performance of your query. If needed, consider splitting your query into multiple consecutive queries.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-join/index.html b/docs/sql/sfmc-sql-join/index.html index dca8d256f..ef4ddd2ab 100644 --- a/docs/sql/sfmc-sql-join/index.html +++ b/docs/sql/sfmc-sql-join/index.html @@ -1,22 +1,145 @@ - + - -SFMC SQL Join | Mateusz Dąbrowski + +SFMC SQL Join | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Join

    Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.

    There are cases where all you need is to pull (and maybe transform) data FROM a single Data Extension. But the real magic of SQL is visible when you need to combine information from multiple data points. Here comes the JOIN statement.

    Check who opened the email and when by querying the _Open System Data View
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    Let's dive in the details of what you see above.

    JOIN Types

    In the example above, you can see the JOIN word. There are many JOIN statement types available in SQL. The appropriate joining will allow you to segment your records precisely the way you want and without the need for extensive WHERE clauses. Understanding differences between various types and using the correct one for the task at hand will make your code shorter, easier to read and optimised. Let's check what is in the quiver:

    Inner Join

    The most straightforward join is INNER JOIN. It takes records from the first table (Welcome-Campaign-Segment Data Extension in the above example) and the second table (_Open System Data View in this case) to output records available in both of them (based on selected relation).

    In our query, it will be contacts that are in the Data Extension and at the same time have some email opens in _Open System Data View. It will ignore all contacts that are not visible in the _Open System Data View, and all the email opens that are not related to contacts in the Welcome-Campaign-Segment Data Extension.

    Of course, this query in its current state is not perfect and could output wrong results (like tracked opens for the contacts from our Data Extension, but coming from the entirely different campaign) as it doesn't limit the scope to just one campaign or Job.

    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    When using INNER JOIN, you can write just the word JOIN, as in the first example, to have the same result. However, it is best practice to state this type explicitly by writing the full name. It makes it easier to differentiate from the following types of JOIN.

    Left and Right Joins

    The following joins are LEFT JOIN (also known as LEFT OUTER JOIN) and RIGHT JOIN (also known as RIGHT OUTER JOIN). Instead of limiting the output to records available in both tables, they take complete data from one table and append the additional information from the second one (if it is available).

    LEFT JOIN will take complete data of the first table (in our example, Data Extension selected by FROM) and extend it with information from the second one (_Open System Data View joined with LEFT JOIN).

    You can go the other way around with RIGHT JOIN (in our example, it would output everything in _Open System Data View and append to it the data from the Data Extension - not that useful).

    The same query, but this time joined with LEFT JOIN
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    As you can see, the only thing we changed in the above query is the type of JOIN. This simple change will alter our outcomes to show a complete list of all Subscriber Keys and Email Addresses from Welcome-Campaign-Segment Data Extension with the email open date for those contacts who engaged with the communication. Unengaged ones would have null values in the OpenDate column. Again, it is not a proper way of building such a report. There will be the ready-to-use snippet at the bottom.

    Due to the similarity of LEFT JOIN and RIGHT JOIN, I highly recommend choosing one type and use it consistently to lower the risk of an error.

    You Should Know

    If you would want to see all contacts from our Data Extension that did not open the email, you could use LEFT JOIN with exclusion (called LEFT EXCLUDING JOIN):

    Example of exclusion applied to LEFT JOIN
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    WHERE o.SubscriberKey IS NULL

    Find more about it in the WHERE statement guide.

    Full Join

    The last classic SQL JOIN is the FULL JOIN (also known as FULL OUTER JOIN) that allows you to get data from both sources.

    In our example, it would mean all contacts from Welcome-Campaign-Segment Data Extension and all records from _Open System Data View, with null values in the columns without a match. Contacts that did not open and tracked opens nor related to contacts available in the Data Extension we selected.

    Not a best use case for the FULL JOIN
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    FULL JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    FULL JOIN is an excellent tool when you, for example, want to create a master segment from multiple smaller ones. Another use case - checking multiple tracking data points with a clear view which are missing (for example, which users have a tracked email click without open and vice versa).

    Self-join

    Then there is Self-join. It is not a separate type of JOIN statement but rather a specific use case for the above types. It joins the table to itself. Useful when you have columns in your data extension that point to other columns in the same extension.

    A use case I can think of in the world of Salesforce Marketing Cloud could be, for example, a Data Extension that stores product categories and subcategories.

    Input Data Extension:

    CategoryNameCategoryIDParentCategoryID
    Wristwatches1
    Diver Watches21
    Pilot Watches31

    In such a scenario, you can use Self-join to build a more readable table that might be useful for personalisation:

    Self-join using INNER JOIN will output only categories that have a parent category
    SELECT
    c.CategoryName AS Category
    , pc.CategoryName AS ParentCategory
    FROM WristwatchesDE AS c
    INNER JOIN WristwatchesDE AS pc
    ON pc.ParentCategoryID = c.CategoryID

    Output Data Extension:

    CategoryParentCategory
    Diver WatchesWristwatches
    Pilot WatchesWristwatches

    Another use case? You might have a product table for your e-commerce wherein one column store recommended products that are often purchased together. To personalise an email with such offers, self-join on that column would be perfect.

    You won't be using Self-join a lot, but it might be a colossal timesaver when needed.

    You Should Know

    Self-join might be the perfect tool for working with data coming from Salesforce through Marketing Cloud Connect to Synchronized Data Extensions.

    Very often, you might encounter Accounts that are related to another Account. This hierarchical structure uses the ParentId field. You can flatten this relationship for use in personalisation and journeys with self-join.

    Flattening three levels of Salesforce Account hierarchy
    SELECT
    a1.Id AS Level1AccountId
    , a1.Name AS Level1AccountName
    , a2.Id AS Level2AccountId
    , a2.Name AS Level2AccountName
    , a3.Id AS Level3AccountId
    , a3.Name AS Level3AccountName
    FROM Account_Salesforce AS a1
    LEFT JOIN Account_Salesforce AS a2
    ON a2.Id = a1.ParentId
    LEFT JOIN Account_Salesforce AS a3
    ON a3.Id = a2.ParentId

    Thinking about how much easier it would be with a neat visual cheat sheet? Perfect - I prepared one for you at the bottom :)

    Joining ON

    I was writing a lot about the various JOIN statements, but there is also the ON element. We use it to define the relationship between the joined data sources. It tells the query which value it should consider to decide whether the record is available in both columns.

    In our example, we used ON de.SubscriberKey = o.SubscriberKey that takes the SubscriberKey from the Data Extension and the System Data View and matches the rows based on it. You can use any other but always think about edge cases. Is the email address always unique? It is a very similar experience to what you do in the Salesforce Marketing Cloud Data Designer.

    This column does not have to be the Primary Key of the Data Extension or System Data View. You can select any as long as its values have a match in the second source.

    You can also add a bit of logic to it by leveraging AND/OR statements. It is handy when either:

    1. You are not sure which column will have a match. For example, you have separate columns for 15 characters Salesforce ID and 18 characters one and want to match on either one.
    2. You want to match multiple criteria. For example, not only the EmailAddress field but also LastName to cover shared email address.
    3. You want to join more than two data sources together using convoluted logic. You will find an example soon in the Multiple Various Joins section.
    You Should Know

    You are not limited to the simple ON ColumnA = ColumnB. If needed, you can go for more dynamic joins that leverage SQL functions:

    Joining on a normalised phone number from Data View and potentially prefixed phone of Data Extension
    SELECT
    wel.SubscriberKey
    , sms.OptInStatusID
    , sms.OptOutStatusID
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _SMSSubscriptionLog AS sms
    ON sms.MobileNumber LIKE CONCAT('%', wel.MobilePhone)

    Remember that such an approach will have a significant impact on performance.

    Table Name Prefix

    When you are joining multiple data sources with columns of the same name, you will have to tell the SQL from which source you select each column. You can do it by using the table name prefix before the column name:

    Example of SQL with full table name prefixes
    SELECT
    _Sent.SubscriberKey
    , _Job.EmailName
    FROM _Sent
    LEFT JOIN _Job
    ON _Job.JobID = _Sent.JobID

    However, you probably saw in the previous examples that there is another way. You don't have to write the full name of the data source every time. You can leverage aliases just as with columns to make it shorter:

    Example of SQL with aliased table name prefixes
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    All you need to do is write your alias after a data source name. For readability purposes, I recommend using the AS keyword between. Now you can leverage the shortened name to prefix the selected columns. It's instrumental when pulling data from multiple Data Extensions.

    Using table name prefixes is not always required (for example, when the two sources you JOIN don't have any columns of the same name). You might see some examples without it. However, it is best practice to leverage this feature for consistency, readability and error-deferring purposes.

    Multiple Joins

    Joining two tables is just the beginning. Working with multiple columns can be much more mind-boggling, and in some cases taking paper and pencil to draw some Venn Diagrams can make a huge difference. Let's check some of the most popular use cases.

    You Should Know

    Order of joining the tables is always important, but it is crucial with multi-table JOINs as it can have enormous impact on the final outcome:

    As you can see, changing the order of second and third table creates significantly different outcome. And there is more - based on what you use in the ON, the order might also impact to which records enriching data is applied.

    For example, if you enrich data with the first joined table and then add some new records with the another - only the records from the initial table will be enriched. The ones added in last step will not have this added context. Changing order of JOINs can solve it.

    Multiple Inner Joins

    In many cases, you will want to get a segment of people who simultaneously fulfil multiple requirements. For example, contacts that were part of three different ToFu campaigns related to a particular product. Such data might make an ideal audience for your next campaign further down in the marketing funnel. For such a scenario, you will use multiple INNER JOIN statements chained in one query:

    Contacts used for three different ToFu campaigns that are ready for a MoFu campaign
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , nsl.PhoneNumber
    , ebo.EbookName
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN NewsletterPromoCampaignSegment AS nsl
    ON nsl.SubscriberKey = wel.SubscriberKey
    INNER JOIN EbookDownloadCampaignSegment AS ebo
    ON ebo.SubscriberKey = wel.SubscriberKey

    This SQL will only give you those contacts that were in all three Data Extensions.

    Multiple Left Joins

    Another huge group of cases you might encounter are queries with multiple LEFT JOIN statements. They are great when you want to extend the data for your main data source with multiple other data points without losing records that do not have a match. Awesome for building a segment for a campaign from Data Extensions with extensive personalisation:

    To the list of contacts, add the product details we want to use in the email content along with a special offer description
    SELECT
    up.SubscriberKey
    , up.EmailAddress
    , prod.ProductName
    , prod.ProductPrice
    , promo.Offer
    FROM UpSellCampaignSegment AS up
    LEFT JOIN ProductDetailsList AS prod
    ON prod.ProductId = up.OfferedProduct
    LEFT JOIN CustomOfferList AS promo
    ON promo.PromotionId = up.OfferedPromotion

    Notice that we joined additional Data Extensions on different columns in this case. What is more, we don't need to SELECT those columns to filter on them. Thanks to using LEFT JOIN instead of INNER JOIN, this query will return to us also contacts that do not have any custom offer applied (we can hide appropriate content block with personalisation for them).

    Multiple Various Joins

    You are not limited to just one type of join when creating your query. You can mix and match different types of joins to extract precisely the data you need. However, the more complexity you add (either by the number of sources or by the number of various joins), the more recommended drawing the Venn Diagrams will be.

    Same query as above, but this time with a mix of INNER JOIN and LEFT JOIN
    SELECT
    up.SubscriberKey
    , up.EmailAddress
    , prod.ProductName
    , prod.ProductPrice
    , promo.Offer
    FROM UpSellCampaignSegment AS up
    INNER JOIN ProductDetailsList AS prod
    ON prod.ProductId = up.OfferedProduct
    LEFT JOIN CustomOfferList AS promo
    ON promo.PromotionId = up.OfferedPromotion

    In the example above, we took the same query as for the Multiple Left Joins, but we changed the first JOIN type to INNER. What is the impact? This time, we will get only those contacts from Up-Sell-Campaign-Segment that have a matching product in Product-Details-List and only then we would extend them with optional information about the custom offer.

    This approach might be better for our needs, as we would be sure that all contacts have available data for Product Name and Product Price. A great way to make our content better and more comfortable to create.

    How complex can a JOIN can get? Very. You will encounter such monstrosities, especially in the world of reporting queries that require information from multiple System Data Views - for example, when you want to debug your email sends.

    One thing to remember - the more complex query you create, the more error-prone it is and the closer you are to the 30 minutes AutoKill limit for the query execution. Always minimise your query to only the data you truly need.

    UNION

    Apart from the JOIN, a UNION operator also serves a similar purpose. It concatenates the outcomes of multiple SELECT statements.

    Group subscribers from two Data Extensions
    SELECT
    jan.SubscriberKey
    , jan.EmailAddress
    FROM JanuaryEventParticipants AS jan

    UNION

    SELECT
    feb.SubscriberKey
    , feb.EmailAddress
    FROM FebruaryEventParticipantsSegment AS feb

    As you can see in the above example, the UNION doesn't require any relationship between the two queries. There is no ON element. On the other hand, the UNION cannot add any new columns.

    UNION works only if:

    1. Both queries have the same number of columns.
    2. Both queries have the same order of columns.
    3. Columns in both queries have the same data types.

    The names do not have to be the same. You don't even have to add aliases for static values. However, it is best practice to match the aliases across all queries for readability purposes.

    To simplify the difference between JOIN and UNION:

    • If you want to add columns - use JOIN.
    • If you want to add rows - use UNION.
    • If you want to add both - use both (or FULL JOIN)
    You Should Know

    By default, the UNION will ignore duplicates. If you want to keep them, use UNION ALL.

    Group subscribers from two Data Extensions
    SELECT
    jan.SubscriberKey
    , jan.EmailAddress
    FROM JanuaryEventParticipantsSegment AS jan

    UNION ALL

    SELECT
    feb.SubscriberKey
    , feb.EmailAddress
    FROM FebruaryEventParticipantsSegment AS feb

    The obvious use case for UNION is gathering subscribers from multiple Data Extensions to build a master segment.

    There is, however, another use case that I find perfect for UNION - attaching Seedlists.

    If you are using a deliverability monitoring suite, you probably are using seedlist. If not - a seedlist is a list of bot email addresses used to estimate your communication inbox placement.

    In most cases, you will store your seedlist in a separate Data Extension and will have only Email Address and fake Subscriber Key columns filled in. How to push them quickly into your segment? With UNION, of course:

    Append Seedlist to your Segment
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , wel.FirstName
    , wel.Interest
    FROM WelcomeCampaignSegment AS wel

    UNION

    SELECT
    sl.SubscriberKey
    , sl.EmailAddress
    , 'Seed' AS FirstName
    , 'Estimating' AS Interest
    FROM Seedlist AS sl

    In the example above, we add the Seedlist to the master segment and provide static value placeholders for columns used in personalisation.

    You Should Know

    You can mix and match JOIN and UNION to create your perfect segment. And even add arbitrary data without a FROM.

    AutoKill is the limit of your imagination
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , wel.FirstName
    , i.Interest
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN InterestsDataPoint AS i
    ON i.SubscriberKey = wel.SubscriberKey

    UNION

    SELECT
    sl.SubscriberKey
    , sl.EmailAddress
    , 'Seed' AS FirstName
    , 'Estimating' AS Interest
    FROM Seedlist AS sl

    UNION ALL

    SELECT
    '123456789987654321' AS SubscriberKey
    , 'sales@company.com' AS EmailAddress
    , 'SalesDepartment' AS FirstName
    , 'Leads' AS Interest

    INTERSECT

    The INTERSECT operator is very similar in usage to UNION, but instead of concatenating outcomes, it outputs only those that exist in both queries.

    Let's check who converted from our Black Friday promotion
    SELECT bf.SubscriberKey
    FROM BlackFridayPromoSegment AS bf

    INTERSECT

    SELECT p.SubscriberKey
    FROM PurchasesDataPoint AS p

    As with UNION, INTERSECT works only if:

    1. Both queries have the same number of columns.
    2. Both queries have the same order of columns.
    3. Columns in both queries have the same data types.

    The check for rows existing in both queries is done considering data in all provided columns.

    You can have the same outcome with more control over comparison logic with a mix of JOIN and WHERE.

    EXCEPT

    The EXCEPT operator is very similar in usage to UNION, but instead of concatenating outcomes, it outputs only those that exist in the first query.

    Let's check who did not convert from our Black Friday promotion
    SELECT bf.SubscriberKey
    FROM BlackFridayPromoSegment AS bf

    EXCEPT

    SELECT p.SubscriberKey
    FROM PurchasesDataPoint AS p

    As with UNION, EXCEPT works only if:

    1. Both queries have the same number of columns.
    2. Both queries have the same order of columns.
    3. Columns in both queries have the same data types.

    The check for rows existing in both queries is done considering data in all provided columns.

    You can have the same outcome with more control over comparison logic with a mix of JOIN and WHERE.

    SFMC SQL JOIN Cheat Sheet

    All standard SQL JOINs in a single image with name, example SFMC-focused use case, key part of the SQL query and diagrams visualising the output. Ready to bookmark or download. Full size version linked below the preview.



    View full size
    - - +

    SFMC SQL Join

    Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.

    +

    There are cases where all you need is to pull (and maybe transform) data FROM a single Data Extension. But the real magic of SQL is visible when you need to combine information from multiple data points. Here comes the JOIN statement.

    +
    Check who opened the email and when by querying the _Open System Data View
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    +

    Let's dive in the details of what you see above.

    +

    JOIN Types

    +

    In the example above, you can see the JOIN word. There are many JOIN statement types available in SQL. The appropriate joining will allow you to segment your records precisely the way you want and without the need for extensive WHERE clauses. Understanding differences between various types and using the correct one for the task at hand will make your code shorter, easier to read and optimised. Let's check what is in the quiver:

    +

    Inner Join

    +

    The most straightforward join is INNER JOIN. It takes records from the first table (Welcome-Campaign-Segment Data Extension in the above example) and the second table (_Open System Data View in this case) to output records available in both of them (based on selected relation).

    +

    In our query, it will be contacts that are in the Data Extension and at the same time have some email opens in _Open System Data View. It will ignore all contacts that are not visible in the _Open System Data View, and all the email opens that are not related to contacts in the Welcome-Campaign-Segment Data Extension.

    +

    Of course, this query in its current state is not perfect and could output wrong results (like tracked opens for the contacts from our Data Extension, but coming from the entirely different campaign) as it doesn't limit the scope to just one campaign or Job.

    +
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    +

    When using INNER JOIN, you can write just the word JOIN, as in the first example, to have the same result. However, it is best practice to state this type explicitly by writing the full name. It makes it easier to differentiate from the following types of JOIN.

    +

    Left and Right Joins

    +

    The following joins are LEFT JOIN (also known as LEFT OUTER JOIN) and RIGHT JOIN (also known as RIGHT OUTER JOIN). Instead of limiting the output to records available in both tables, they take complete data from one table and append the additional information from the second one (if it is available).

    +

    LEFT JOIN will take complete data of the first table (in our example, Data Extension selected by FROM) and extend it with information from the second one (_Open System Data View joined with LEFT JOIN).

    +

    You can go the other way around with RIGHT JOIN (in our example, it would output everything in _Open System Data View and append to it the data from the Data Extension - not that useful).

    +
    The same query, but this time joined with LEFT JOIN
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    +

    As you can see, the only thing we changed in the above query is the type of JOIN. This simple change will alter our outcomes to show a complete list of all Subscriber Keys and Email Addresses from Welcome-Campaign-Segment Data Extension with the email open date for those contacts who engaged with the communication. Unengaged ones would have null values in the OpenDate column. Again, it is not a proper way of building such a report. There will be the ready-to-use snippet at the bottom.

    +

    Due to the similarity of LEFT JOIN and RIGHT JOIN, I highly recommend choosing one type and use it consistently to lower the risk of an error.

    +
    You Should Know

    If you would want to see all contacts from our Data Extension that did not open the email, you could use LEFT JOIN with exclusion (called LEFT EXCLUDING JOIN):

    Example of exclusion applied to LEFT JOIN
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    WHERE o.SubscriberKey IS NULL

    Find more about it in the WHERE statement guide.

    +

    Full Join

    +

    The last classic SQL JOIN is the FULL JOIN (also known as FULL OUTER JOIN) that allows you to get data from both sources.

    +

    In our example, it would mean all contacts from Welcome-Campaign-Segment Data Extension and all records from _Open System Data View, with null values in the columns without a match. Contacts that did not open and tracked opens nor related to contacts available in the Data Extension we selected.

    +
    Not a best use case for the FULL JOIN
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    FULL JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    +

    FULL JOIN is an excellent tool when you, for example, want to create a master segment from multiple smaller ones. Another use case - checking multiple tracking data points with a clear view which are missing (for example, which users have a tracked email click without open and vice versa).

    +

    Self-join

    +

    Then there is Self-join. It is not a separate type of JOIN statement but rather a specific use case for the above types. It joins the table to itself. Useful when you have columns in your data extension that point to other columns in the same extension.

    +

    A use case I can think of in the world of Salesforce Marketing Cloud could be, for example, a Data Extension that stores product categories and subcategories.

    +

    Input Data Extension:

    +
    CategoryNameCategoryIDParentCategoryID
    Wristwatches1
    Diver Watches21
    Pilot Watches31
    +

    In such a scenario, you can use Self-join to build a more readable table that might be useful for personalisation:

    +
    Self-join using INNER JOIN will output only categories that have a parent category
    SELECT
    c.CategoryName AS Category
    , pc.CategoryName AS ParentCategory
    FROM WristwatchesDE AS c
    INNER JOIN WristwatchesDE AS pc
    ON pc.ParentCategoryID = c.CategoryID
    +

    Output Data Extension:

    +
    CategoryParentCategory
    Diver WatchesWristwatches
    Pilot WatchesWristwatches
    +

    Another use case? You might have a product table for your e-commerce wherein one column store recommended products that are often purchased together. To personalise an email with such offers, self-join on that column would be perfect.

    +

    You won't be using Self-join a lot, but it might be a colossal timesaver when needed.

    +
    You Should Know

    Self-join might be the perfect tool for working with data coming from Salesforce through Marketing Cloud Connect to Synchronized Data Extensions.

    Very often, you might encounter Accounts that are related to another Account. This hierarchical structure uses the ParentId field. You can flatten this relationship for use in personalisation and journeys with self-join.

    Flattening three levels of Salesforce Account hierarchy
    SELECT
    a1.Id AS Level1AccountId
    , a1.Name AS Level1AccountName
    , a2.Id AS Level2AccountId
    , a2.Name AS Level2AccountName
    , a3.Id AS Level3AccountId
    , a3.Name AS Level3AccountName
    FROM Account_Salesforce AS a1
    LEFT JOIN Account_Salesforce AS a2
    ON a2.Id = a1.ParentId
    LEFT JOIN Account_Salesforce AS a3
    ON a3.Id = a2.ParentId
    +

    Thinking about how much easier it would be with a neat visual cheat sheet? Perfect - I prepared one for you at the bottom :)

    +

    Joining ON

    +

    I was writing a lot about the various JOIN statements, but there is also the ON element. We use it to define the relationship between the joined data sources. It tells the query which value it should consider to decide whether the record is available in both columns.

    +

    In our example, we used ON de.SubscriberKey = o.SubscriberKey that takes the SubscriberKey from the Data Extension and the System Data View and matches the rows based on it. You can use any other but always think about edge cases. Is the email address always unique? It is a very similar experience to what you do in the Salesforce Marketing Cloud Data Designer.

    +

    This column does not have to be the Primary Key of the Data Extension or System Data View. You can select any as long as its values have a match in the second source.

    +

    You can also add a bit of logic to it by leveraging AND/OR statements. It is handy when either:

    +
      +
    1. You are not sure which column will have a match. For example, you have separate columns for 15 characters Salesforce ID and 18 characters one and want to match on either one.
    2. +
    3. You want to match multiple criteria. For example, not only the EmailAddress field but also LastName to cover shared email address.
    4. +
    5. You want to join more than two data sources together using convoluted logic. You will find an example soon in the Multiple Various Joins section.
    6. +
    +
    You Should Know

    You are not limited to the simple ON ColumnA = ColumnB. If needed, you can go for more dynamic joins that leverage SQL functions:

    Joining on a normalised phone number from Data View and potentially prefixed phone of Data Extension
    SELECT
    wel.SubscriberKey
    , sms.OptInStatusID
    , sms.OptOutStatusID
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN _SMSSubscriptionLog AS sms
    ON sms.MobileNumber LIKE CONCAT('%', wel.MobilePhone)

    Remember that such an approach will have a significant impact on performance.

    +

    Table Name Prefix

    +

    When you are joining multiple data sources with columns of the same name, you will have to tell the SQL from which source you select each column. You can do it by using the table name prefix before the column name:

    +
    Example of SQL with full table name prefixes
    SELECT
    _Sent.SubscriberKey
    , _Job.EmailName
    FROM _Sent
    LEFT JOIN _Job
    ON _Job.JobID = _Sent.JobID
    +

    However, you probably saw in the previous examples that there is another way. You don't have to write the full name of the data source every time. You can leverage aliases just as with columns to make it shorter:

    +
    Example of SQL with aliased table name prefixes
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey
    +

    All you need to do is write your alias after a data source name. For readability purposes, I recommend using the AS keyword between. Now you can leverage the shortened name to prefix the selected columns. It's instrumental when pulling data from multiple Data Extensions.

    +

    Using table name prefixes is not always required (for example, when the two sources you JOIN don't have any columns of the same name). You might see some examples without it. However, it is best practice to leverage this feature for consistency, readability and error-deferring purposes.

    +

    Multiple Joins

    +

    Joining two tables is just the beginning. Working with multiple columns can be much more mind-boggling, and in some cases taking paper and pencil to draw some Venn Diagrams can make a huge difference. Let's check some of the most popular use cases.

    +
    You Should Know

    Order of joining the tables is always important, but it is crucial with multi-table JOINs as it can have enormous impact on the final outcome:

    As you can see, changing the order of second and third table creates significantly different outcome. And there is more - based on what you use in the ON, the order might also impact to which records enriching data is applied.

    For example, if you enrich data with the first joined table and then add some new records with the another - only the records from the initial table will be enriched. The ones added in last step will not have this added context. Changing order of JOINs can solve it.

    +

    Multiple Inner Joins

    +

    In many cases, you will want to get a segment of people who simultaneously fulfil multiple requirements. For example, contacts that were part of three different ToFu campaigns related to a particular product. Such data might make an ideal audience for your next campaign further down in the marketing funnel. For such a scenario, you will use multiple INNER JOIN statements chained in one query:

    +
    Contacts used for three different ToFu campaigns that are ready for a MoFu campaign
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , nsl.PhoneNumber
    , ebo.EbookName
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN NewsletterPromoCampaignSegment AS nsl
    ON nsl.SubscriberKey = wel.SubscriberKey
    INNER JOIN EbookDownloadCampaignSegment AS ebo
    ON ebo.SubscriberKey = wel.SubscriberKey
    +

    This SQL will only give you those contacts that were in all three Data Extensions.

    +

    Multiple Left Joins

    +

    Another huge group of cases you might encounter are queries with multiple LEFT JOIN statements. They are great when you want to extend the data for your main data source with multiple other data points without losing records that do not have a match. Awesome for building a segment for a campaign from Data Extensions with extensive personalisation:

    +
    To the list of contacts, add the product details we want to use in the email content along with a special offer description
    SELECT
    up.SubscriberKey
    , up.EmailAddress
    , prod.ProductName
    , prod.ProductPrice
    , promo.Offer
    FROM UpSellCampaignSegment AS up
    LEFT JOIN ProductDetailsList AS prod
    ON prod.ProductId = up.OfferedProduct
    LEFT JOIN CustomOfferList AS promo
    ON promo.PromotionId = up.OfferedPromotion
    +

    Notice that we joined additional Data Extensions on different columns in this case. What is more, we don't need to SELECT those columns to filter on them. Thanks to using LEFT JOIN instead of INNER JOIN, this query will return to us also contacts that do not have any custom offer applied (we can hide appropriate content block with personalisation for them).

    +

    Multiple Various Joins

    +

    You are not limited to just one type of join when creating your query. You can mix and match different types of joins to extract precisely the data you need. However, the more complexity you add (either by the number of sources or by the number of various joins), the more recommended drawing the Venn Diagrams will be.

    +
    Same query as above, but this time with a mix of INNER JOIN and LEFT JOIN
    SELECT
    up.SubscriberKey
    , up.EmailAddress
    , prod.ProductName
    , prod.ProductPrice
    , promo.Offer
    FROM UpSellCampaignSegment AS up
    INNER JOIN ProductDetailsList AS prod
    ON prod.ProductId = up.OfferedProduct
    LEFT JOIN CustomOfferList AS promo
    ON promo.PromotionId = up.OfferedPromotion
    +

    In the example above, we took the same query as for the Multiple Left Joins, but we changed the first JOIN type to INNER. What is the impact? This time, we will get only those contacts from Up-Sell-Campaign-Segment that have a matching product in Product-Details-List and only then we would extend them with optional information about the custom offer.

    +

    This approach might be better for our needs, as we would be sure that all contacts have available data for Product Name and Product Price. A great way to make our content better and more comfortable to create.

    +

    How complex can a JOIN can get? Very. You will encounter such monstrosities, especially in the world of reporting queries that require information from multiple System Data Views - for example, when you want to debug your email sends.

    +

    One thing to remember - the more complex query you create, the more error-prone it is and the closer you are to the 30 minutes AutoKill limit for the query execution. Always minimise your query to only the data you truly need.

    +

    UNION

    +

    Apart from the JOIN, a UNION operator also serves a similar purpose. It concatenates the outcomes of multiple SELECT statements.

    +
    Group subscribers from two Data Extensions
    SELECT
    jan.SubscriberKey
    , jan.EmailAddress
    FROM JanuaryEventParticipants AS jan

    UNION

    SELECT
    feb.SubscriberKey
    , feb.EmailAddress
    FROM FebruaryEventParticipantsSegment AS feb
    +

    As you can see in the above example, the UNION doesn't require any relationship between the two queries. There is no ON element. On the other hand, the UNION cannot add any new columns.

    +

    UNION works only if:

    +
      +
    1. Both queries have the same number of columns.
    2. +
    3. Both queries have the same order of columns.
    4. +
    5. Columns in both queries have the same data types.
    6. +
    +

    The names do not have to be the same. You don't even have to add aliases for static values. However, it is best practice to match the aliases across all queries for readability purposes.

    +

    To simplify the difference between JOIN and UNION:

    +
      +
    • If you want to add columns - use JOIN.
    • +
    • If you want to add rows - use UNION.
    • +
    • If you want to add both - use both (or FULL JOIN)
    • +
    +
    You Should Know

    By default, the UNION will ignore duplicates. If you want to keep them, use UNION ALL.

    Group subscribers from two Data Extensions
    SELECT
    jan.SubscriberKey
    , jan.EmailAddress
    FROM JanuaryEventParticipantsSegment AS jan

    UNION ALL

    SELECT
    feb.SubscriberKey
    , feb.EmailAddress
    FROM FebruaryEventParticipantsSegment AS feb
    +

    The obvious use case for UNION is gathering subscribers from multiple Data Extensions to build a master segment.

    +

    There is, however, another use case that I find perfect for UNION - attaching Seedlists.

    +

    If you are using a deliverability monitoring suite, you probably are using seedlist. If not - a seedlist is a list of bot email addresses used to estimate your communication inbox placement.

    +

    In most cases, you will store your seedlist in a separate Data Extension and will have only Email Address and fake Subscriber Key columns filled in. How to push them quickly into your segment? With UNION, of course:

    +
    Append Seedlist to your Segment
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , wel.FirstName
    , wel.Interest
    FROM WelcomeCampaignSegment AS wel

    UNION

    SELECT
    sl.SubscriberKey
    , sl.EmailAddress
    , 'Seed' AS FirstName
    , 'Estimating' AS Interest
    FROM Seedlist AS sl
    +

    In the example above, we add the Seedlist to the master segment and provide static value placeholders for columns used in personalisation.

    +
    You Should Know

    You can mix and match JOIN and UNION to create your perfect segment. And even add arbitrary data without a FROM.

    AutoKill is the limit of your imagination
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , wel.FirstName
    , i.Interest
    FROM WelcomeCampaignSegment AS wel
    LEFT JOIN InterestsDataPoint AS i
    ON i.SubscriberKey = wel.SubscriberKey

    UNION

    SELECT
    sl.SubscriberKey
    , sl.EmailAddress
    , 'Seed' AS FirstName
    , 'Estimating' AS Interest
    FROM Seedlist AS sl

    UNION ALL

    SELECT
    '123456789987654321' AS SubscriberKey
    , 'sales@company.com' AS EmailAddress
    , 'SalesDepartment' AS FirstName
    , 'Leads' AS Interest
    +

    INTERSECT

    +

    The INTERSECT operator is very similar in usage to UNION, but instead of concatenating outcomes, it outputs only those that exist in both queries.

    +
    Let's check who converted from our Black Friday promotion
    SELECT bf.SubscriberKey
    FROM BlackFridayPromoSegment AS bf

    INTERSECT

    SELECT p.SubscriberKey
    FROM PurchasesDataPoint AS p
    +

    As with UNION, INTERSECT works only if:

    +
      +
    1. Both queries have the same number of columns.
    2. +
    3. Both queries have the same order of columns.
    4. +
    5. Columns in both queries have the same data types.
    6. +
    +

    The check for rows existing in both queries is done considering data in all provided columns.

    +

    You can have the same outcome with more control over comparison logic with a mix of JOIN and WHERE.

    +

    EXCEPT

    +

    The EXCEPT operator is very similar in usage to UNION, but instead of concatenating outcomes, it outputs only those that exist in the first query.

    +
    Let's check who did not convert from our Black Friday promotion
    SELECT bf.SubscriberKey
    FROM BlackFridayPromoSegment AS bf

    EXCEPT

    SELECT p.SubscriberKey
    FROM PurchasesDataPoint AS p
    +

    As with UNION, EXCEPT works only if:

    +
      +
    1. Both queries have the same number of columns.
    2. +
    3. Both queries have the same order of columns.
    4. +
    5. Columns in both queries have the same data types.
    6. +
    +

    The check for rows existing in both queries is done considering data in all provided columns.

    +

    You can have the same outcome with more control over comparison logic with a mix of JOIN and WHERE.

    +

    SFMC SQL JOIN Cheat Sheet

    +

    All standard SQL JOINs in a single image with name, example SFMC-focused use case, key part of the SQL query and diagrams visualising the output. Ready to bookmark or download. Full size version linked below the preview.

    +
    +
    +
    +View full size
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-like/index.html b/docs/sql/sfmc-sql-like/index.html index c9c0dce34..83ead1a66 100644 --- a/docs/sql/sfmc-sql-like/index.html +++ b/docs/sql/sfmc-sql-like/index.html @@ -1,22 +1,64 @@ - + - -SFMC SQL Like | Mateusz Dąbrowski + +SFMC SQL Like | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Like

    Get a LIKE and build more flexible SQL queries.

    LIKE operator allows you to leverage wildcards and groups to search for matching records based on value fragment. You may use it in the SELECT CASE and WHERE statements.

    In SELECT, think about normalizing and categorizing data. In WHERE - about filtering with just a part of the value (for example email domain in EmailAddress field) or with a single element of multi picklist (for instance finding one value within the comma-separated list of all purchased products).

    There are two levels of LIKE usage. First is focused on two essential character wildcards and is very straightforward — the second use full potential of group operator. Let's go through both with practical examples.

    LIKE with Wildcard

    Wildcards available in LIKE:

    WildcardDescription
    %Zero, one or more characters
    _Exactly one character

    % Wildcard

    The % symbol allows you to match zero, one or more characters within your LIKE search.

    For example, you can search for %@mateuszdabrowski.pl domain in EmailAddress to get all contacts with an email address ending with @mateuszdabrowski.pl.

    You can change this filter to %@mateuszdabrowski.%. With the second wildcard at the end, it will be looking for any email address that contains @mateuszdabrowski. but may have more text on either side of it. It will capture all emails ending with @mateuszdabrowski.pl domain just as the previous filter, but also match those with @mateuszdabrowski.com, @mateuszdabrowski.sfmc.eu and other top-level domains.

    All subscribers that have an email address ending with 'mateuszdabrowski.pl' domain
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE EmailAddress LIKE '%@%mateuszdabrowski.pl'

    In the above example, I used two wildcards - one before and one just after @ symbol. It allows not only to catch contacts in @mateuszdabrowski.pl domain, but also any subdomain, like @dev.mateuszdabrowski.pl.

    In the marketing automation world, however, LIKE operator is especially useful for selecting contacts based on the multi picklist columns. Consider ActiveSubscriptions field that can have any combination of values Phone, TV, Internet.

    Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use equality operator (WHERE ActiveSubscription = 'Phone'), as it would return only contacts that have just this one subscription. Some of your customers might, however, have multiple (phone and tv or phone and internet plans). For SQL, a field containing 'Phone' is not equal with the one having a value of 'Phone', Internet'. LIKE operator is here to save the day.

    All subscribers that have at least Phone subscription
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE ActiveSubscription LIKE '%Phone%'
    You Should Know

    Always be sure to check whether you apply the wildcards correctly. Popular error is to have either too narrow or too wide scope of your filter. A common issue is lack of % operator in the end or beginning of the searched string. For your query, it means that the value should end there.

    For example, WHERE EmailAddress LIKE '@gmail.com' should provide you zero results, as it would be looking for precisely the @gmail.com value in the EmailAddress field - without any characters before the @ symbol.

    _ Wildcard

    Another wildcard working with LIKE is the underscore _. It is much simpler as all it does it pretending to be any single character.

    Let's consider a scenario, where you have a multi picklist field containing comma-separated product IDs. For example, a customer with three recommended products might have a value 1,14,27. The system codes single digit values to subscriptions, and two-digit codes to various product categories. Let's use it in the query.

    All subscribers with at least one subscription product in their recommendations
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '_'
    OR RecommendedProducts LIKE '_,%'
    OR RecommendedProducts LIKE '%,_,%'
    OR RecommendedProducts LIKE '%,_'

    In the query above, we are filtering our database with RecommendedProducts field. To add a contact to our segment, in four steps, we check if at least one condition is true:

    1. If the record has exactly one recommended product that has a single-digit code (subscription)
    2. If the record has multiple recommended products and the first one is a single-digit (subscription)
    3. If the record has multiple recommended products and one in the middle is a single-digit (subscription)
    4. If the record has multiple recommended products and the last one is a single-digit (subscription)

    LIKE with Group

    There is also a group operator [] for LIKE statements. It allows you to create even more complex conditions:

    Advanced OperatorDescription
    []Any single character from the list specified inside
    -Range operator for []
    ^Exclusion operator for []

    [] Operator

    The group operator [] allows you to provide a list of characters that you want to find a match.

    Consider the previous example with a field containing multiple IDs of your subscription and standard products. The field stores subscriptions in the form of single-digit product IDs. First four IDs are related to Premium subscriptions. IDs from 5 to 9 are Standard subscriptions.

    If we would like to output only the Premium subscriptions, we would have to create a separate filter for each ID.

    This approach would require 16 lines to cover the use case
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '1'
    OR RecommendedProducts LIKE '1,%'
    OR RecommendedProducts LIKE '%,1,%'
    OR RecommendedProducts LIKE '%,1'
    OR RecommendedProducts LIKE '2'
    OR RecommendedProducts LIKE '2,%'
    OR RecommendedProducts LIKE '%,2,%'
    OR RecommendedProducts LIKE '%,2'
    ...

    With a group, we can optimize it — a lot.

    Same outcome with just 4 lines
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '[1234]'
    OR RecommendedProducts LIKE '[1234],%'
    OR RecommendedProducts LIKE '%,[1234],%'
    OR RecommendedProducts LIKE '%,[1234]'

    Thanks to the group operator, instead of covering every single case, we can provide all values within the []. Short, clean and readable. And it can get even better.

    You Should Know

    Group wildcard ([]) is also useful as a way to escape character in the LIKE statement. For example, you might want to look for all values, including a per cent sign (%).

    Writing LIKE '10%' is not a good idea, as it would return you all values starting with 10 - as the per cent sign is a wildcard meaning zero, one or more characters. You can, however, obtain what you want by writing:

    If the client has a discount between 1 and 9%, let's bump it up to either 5% or 10%. If he or she has a higher one - leave it as it is. If no discount is available, make it 2%
    SELECT
    ContactKey
    , CASE
    WHEN Discount LIKE '[56789][%]' THEN '10%'
    WHEN Discount LIKE '[01234][%]' THEN '5%'
    WHEN Discount IS NOT NULL THEN Discount
    ELSE '2%'
    END AS NewDiscount

    By wrapping the % with the grouping sign [], we are telling SQL to look for exactly the per cent sign. Thanks to it '[1234][%]' search will look for 1%, 2%, 3% or 4% values only.

    Same works with _ wildcard.

    - Operator

    We can simplify more with the use of range operator -. Instead of writing each possible character within our group [] (it gets awful when we are looking for any letter - lower or uppercase), we can ask for a range:

    Now with range operator
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '[1-4]'
    OR RecommendedProducts LIKE '[1-4],%'
    OR RecommendedProducts LIKE '%,[1-4],%'
    OR RecommendedProducts LIKE '%,[1-4]'

    As you can see, all we need to do, it to put range operator - between the first and last value that we want to catch. For alphabetical searches where we want both lowercase and uppercase letters, you will need to write it like this: LIKE '[a-zA-Z]'.

    If you want to search for a hyphen '-' within a grouping operator that uses a range, add it in the very beginning. LIKE '[-0-9] will look for either - or any digit.

    You Should Know

    You can mix and match groups, ranges and wildcards.

    It is an excellent tool to create essential categorization solutions for uncontrolled data. For example, to clean up free text job title coming from web forms.

    Simplified Job Title categorization
    SELECT
    SubscriberKey
    , CASE
    WHEN FreeTextJobTitle LIKE '[Cc]_[Oo]' THEN 'C-Suite'
    WHEN FreeTextJobTitle LIKE '%[Mm]anager%' THEN 'Management'
    WHEN FreeTextJobTitle LIKE '%[Ss]pecialist%' THEN 'Specialists'
    END AS CorporateJobTitleGroup
    FROM _Subscriber

    ^ Operator

    There is one more operator that is sometimes useful - the exclusion operator ^. Add it to the beginning of your group, and SQL will not look for any of the grouped characters. For example, LIKE '[^0-9]' will look for any character that is not a digit.

    This operator is especially useful for the use in WHERE statement. Best example? SQL for finding contacts with Subscriber Key not being correct Salesforce ID:

    Find all records in All Subscribers with Subscriber Key other than Salesforce ID
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE
    SubscriberKey LIKE '%[^a-zA-Z0-9]%'
    AND LEN(SubscriberKey) != 18

    This short and straightforward query will look into each SubscriberKey and check whether in there is any character other the letter or digit (case-insensitive) or whether the length is not equal to 18. All such records have incorrect value and are eligible for cleanup or investigation. Perfect for Automation with deletion SSJS script or Verification Activity to alert administrator about issues.

    NOT LIKE

    Finally, just as with other statements, you can add NOT statement before LIKE to search for not matching records:

    Same query as at the beginning of our CASE journey, but flipped
    SELECT
    ContactKey
    , CASE
    WHEN EmailAddress NOT LIKE '%@mateuszdabrowski.pl' THEN 'External'
    ELSE 'Internal'
    END AS ContactType
    - - +

    SFMC SQL Like

    Get a LIKE and build more flexible SQL queries.

    +

    LIKE operator allows you to leverage wildcards and groups to search for matching records based on value fragment. You may use it in the SELECT CASE and WHERE statements.

    +

    In SELECT, think about normalizing and categorizing data. In WHERE - about filtering with just a part of the value (for example email domain in EmailAddress field) or with a single element of multi picklist (for instance finding one value within the comma-separated list of all purchased products).

    +

    There are two levels of LIKE usage. First is focused on two essential character wildcards and is very straightforward — the second use full potential of group operator. Let's go through both with practical examples.

    +

    LIKE with Wildcard

    +

    Wildcards available in LIKE:

    +
    WildcardDescription
    %Zero, one or more characters
    _Exactly one character
    +

    % Wildcard

    +

    The % symbol allows you to match zero, one or more characters within your LIKE search.

    +

    For example, you can search for %@mateuszdabrowski.pl domain in EmailAddress to get all contacts with an email address ending with @mateuszdabrowski.pl.

    +

    You can change this filter to %@mateuszdabrowski.%. With the second wildcard at the end, it will be looking for any email address that contains @mateuszdabrowski. but may have more text on either side of it. It will capture all emails ending with @mateuszdabrowski.pl domain just as the previous filter, but also match those with @mateuszdabrowski.com, @mateuszdabrowski.sfmc.eu and other top-level domains.

    +
    All subscribers that have an email address ending with 'mateuszdabrowski.pl' domain
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE EmailAddress LIKE '%@%mateuszdabrowski.pl'

    In the above example, I used two wildcards - one before and one just after @ symbol. It allows not only to catch contacts in @mateuszdabrowski.pl domain, but also any subdomain, like @dev.mateuszdabrowski.pl.

    In the marketing automation world, however, LIKE operator is especially useful for selecting contacts based on the multi picklist columns. Consider ActiveSubscriptions field that can have any combination of values Phone, TV, Internet.

    Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use equality operator (WHERE ActiveSubscription = 'Phone'), as it would return only contacts that have just this one subscription. Some of your customers might, however, have multiple (phone and tv or phone and internet plans). For SQL, a field containing 'Phone' is not equal with the one having a value of 'Phone', Internet'. LIKE operator is here to save the day.

    All subscribers that have at least Phone subscription
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE ActiveSubscription LIKE '%Phone%'
    +
    You Should Know

    Always be sure to check whether you apply the wildcards correctly. Popular error is to have either too narrow or too wide scope of your filter. A common issue is lack of % operator in the end or beginning of the searched string. For your query, it means that the value should end there.

    For example, WHERE EmailAddress LIKE '@gmail.com' should provide you zero results, as it would be looking for precisely the @gmail.com value in the EmailAddress field - without any characters before the @ symbol.

    +

    _ Wildcard

    +

    Another wildcard working with LIKE is the underscore _. It is much simpler as all it does it pretending to be any single character.

    +

    Let's consider a scenario, where you have a multi picklist field containing comma-separated product IDs. For example, a customer with three recommended products might have a value 1,14,27. The system codes single digit values to subscriptions, and two-digit codes to various product categories. Let's use it in the query.

    +
    All subscribers with at least one subscription product in their recommendations
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '_'
    OR RecommendedProducts LIKE '_,%'
    OR RecommendedProducts LIKE '%,_,%'
    OR RecommendedProducts LIKE '%,_'

    In the query above, we are filtering our database with RecommendedProducts field. To add a contact to our segment, in four steps, we check if at least one condition is true:

    +
      +
    1. If the record has exactly one recommended product that has a single-digit code (subscription)
    2. +
    3. If the record has multiple recommended products and the first one is a single-digit (subscription)
    4. +
    5. If the record has multiple recommended products and one in the middle is a single-digit (subscription)
    6. +
    7. If the record has multiple recommended products and the last one is a single-digit (subscription)
    8. +
    +

    LIKE with Group

    +

    There is also a group operator [] for LIKE statements. It allows you to create even more complex conditions:

    +
    Advanced OperatorDescription
    []Any single character from the list specified inside
    -Range operator for []
    ^Exclusion operator for []
    +

    [] Operator

    +

    The group operator [] allows you to provide a list of characters that you want to find a match.

    +

    Consider the previous example with a field containing multiple IDs of your subscription and standard products. The field stores subscriptions in the form of single-digit product IDs. First four IDs are related to Premium subscriptions. IDs from 5 to 9 are Standard subscriptions.

    +

    If we would like to output only the Premium subscriptions, we would have to create a separate filter for each ID.

    This approach would require 16 lines to cover the use case
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '1'
    OR RecommendedProducts LIKE '1,%'
    OR RecommendedProducts LIKE '%,1,%'
    OR RecommendedProducts LIKE '%,1'
    OR RecommendedProducts LIKE '2'
    OR RecommendedProducts LIKE '2,%'
    OR RecommendedProducts LIKE '%,2,%'
    OR RecommendedProducts LIKE '%,2'
    ...

    With a group, we can optimize it — a lot.

    Same outcome with just 4 lines
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '[1234]'
    OR RecommendedProducts LIKE '[1234],%'
    OR RecommendedProducts LIKE '%,[1234],%'
    OR RecommendedProducts LIKE '%,[1234]'
    +

    Thanks to the group operator, instead of covering every single case, we can provide all values within the []. Short, clean and readable. And it can get even better.

    +
    You Should Know

    Group wildcard ([]) is also useful as a way to escape character in the LIKE statement. For example, you might want to look for all values, including a per cent sign (%).

    Writing LIKE '10%' is not a good idea, as it would return you all values starting with 10 - as the per cent sign is a wildcard meaning zero, one or more characters. You can, however, obtain what you want by writing:

    If the client has a discount between 1 and 9%, let's bump it up to either 5% or 10%. If he or she has a higher one - leave it as it is. If no discount is available, make it 2%
    SELECT
    ContactKey
    , CASE
    WHEN Discount LIKE '[56789][%]' THEN '10%'
    WHEN Discount LIKE '[01234][%]' THEN '5%'
    WHEN Discount IS NOT NULL THEN Discount
    ELSE '2%'
    END AS NewDiscount

    By wrapping the % with the grouping sign [], we are telling SQL to look for exactly the per cent sign. Thanks to it '[1234][%]' search will look for 1%, 2%, 3% or 4% values only.

    Same works with _ wildcard.

    +

    - Operator

    +

    We can simplify more with the use of range operator -. Instead of writing each possible character within our group [] (it gets awful when we are looking for any letter - lower or uppercase), we can ask for a range:

    +
    Now with range operator
    SELECT
    SubscriberKey
    , EmailAddress
    , RecommendedProducts
    FROM EcommerceUpsellDE
    WHERE
    RecommendedProducts LIKE '[1-4]'
    OR RecommendedProducts LIKE '[1-4],%'
    OR RecommendedProducts LIKE '%,[1-4],%'
    OR RecommendedProducts LIKE '%,[1-4]'
    +

    As you can see, all we need to do, it to put range operator - between the first and last value that we want to catch. For alphabetical searches where we want both lowercase and uppercase letters, you will need to write it like this: LIKE '[a-zA-Z]'.

    +

    If you want to search for a hyphen '-' within a grouping operator that uses a range, add it in the very beginning. LIKE '[-0-9] will look for either - or any digit.

    +
    You Should Know

    You can mix and match groups, ranges and wildcards.

    It is an excellent tool to create essential categorization solutions for uncontrolled data. For example, to clean up free text job title coming from web forms.

    Simplified Job Title categorization
    SELECT
    SubscriberKey
    , CASE
    WHEN FreeTextJobTitle LIKE '[Cc]_[Oo]' THEN 'C-Suite'
    WHEN FreeTextJobTitle LIKE '%[Mm]anager%' THEN 'Management'
    WHEN FreeTextJobTitle LIKE '%[Ss]pecialist%' THEN 'Specialists'
    END AS CorporateJobTitleGroup
    FROM _Subscriber
    +

    ^ Operator

    +

    There is one more operator that is sometimes useful - the exclusion operator ^. Add it to the beginning of your group, and SQL will not look for any of the grouped characters. For example, LIKE '[^0-9]' will look for any character that is not a digit.

    +

    This operator is especially useful for the use in WHERE statement. Best example? SQL for finding contacts with Subscriber Key not being correct Salesforce ID:

    +
    Find all records in All Subscribers with Subscriber Key other than Salesforce ID
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE
    SubscriberKey LIKE '%[^a-zA-Z0-9]%'
    AND LEN(SubscriberKey) != 18
    +

    This short and straightforward query will look into each SubscriberKey and check whether in there is any character other the letter or digit (case-insensitive) or whether the length is not equal to 18. All such records have incorrect value and are eligible for cleanup or investigation. Perfect for Automation with deletion SSJS script or Verification Activity to alert administrator about issues.

    +

    NOT LIKE

    +

    Finally, just as with other statements, you can add NOT statement before LIKE to search for not matching records:

    +
    Same query as at the beginning of our CASE journey, but flipped
    SELECT
    ContactKey
    , CASE
    WHEN EmailAddress NOT LIKE '%@mateuszdabrowski.pl' THEN 'External'
    ELSE 'Internal'
    END AS ContactType
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-null-functions/index.html b/docs/sql/sfmc-sql-null-functions/index.html index 97986f9f9..89ecc06ea 100644 --- a/docs/sql/sfmc-sql-null-functions/index.html +++ b/docs/sql/sfmc-sql-null-functions/index.html @@ -1,22 +1,97 @@ - + - -SFMC SQL NULL Functions | Mateusz Dąbrowski + +SFMC SQL NULL Functions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL NULL Functions

    IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.

    NULL is a fickle beast, and for the people not accustomed to how it works in SQL, it can create many problems (read: incorrect data output). This is especially true for those coming from nullish-friendly languages (like SSJS). Let's jump into the details.

    NULL

    Like in other languages, NULL is a placeholder that marks an absent (unknown) value. Unlike in other languages (like SSJS), it can be used in any data type. You can have NULL Date (datetime) , NULL Number (int), NULL Text (nvarchar) or NULL Boolean.

    Also, unlike in some other languages, SQL doesn't support a default nullish coalescing. In simpler words, it means that empty string ('') or zero (0) are not equal to NULL. It makes sense when you treat NULL as an unknown value - unknown is not equal to 0.

    NULL with standard SQL Functions

    Because NULL is unknown, if you try to do any standard operation on the NULL (like adding an integer, or concatenating it with a string), it will return unknown (NULL):

    ❌ Functions with NULLs
    SELECT
    1 + NULL AS MathFunctionWithNull -- Outputs NULL
    , CONCAT('Hello ', NULL) AS StringFunctionWithNull -- Outputs NULL

    NULL with relational operators

    The fun doesn't stop there - When you try to make any comparision with NULL, it will fail, because it is a check against an unknown value. Or, to be more specific, the comparison will evaluate to FALSE, impacting your output.

    ❌ Comparisons with NULLs
    SELECT SubscriberKey
    FROM DataExtension
    WHERE
    NullablePurchaseCount > 0
    AND NullableProductName != 'T-Shirt'
    AND EmailAddress != NULL

    In the example above, all three comparisons in the WHERE statement will return FALSE for NULLs and the query will not output any rows.

    Let's check why, step by step:

    1. NullablePurchaseCount > 0 - The rows with a value (be it 0 or 10) are evaluated normally. The rows with NULL (absent value) evaluate as FALSE and are removed from the output.
    2. NullableProductName != 'T-Shirt' - The rows with a value (be it '', 'Hoodie' or 'T-Shirt') are evaluated normally. The rows with NULL (absent value) evaluate as FALSE and are removed from the output.
    3. EmailAddress != NULL - Regardless of the EmailAddress value, because we are comparing it to NULL, check for every row evaluate to FALSE and therefore is dropped from the output.

    NULL with conditional operators

    NULL gets even more problematic when you want to work with IN/NOT IN or BETWEEN/NOT IN BETWEEN.

    When you use NULL as one of the values searched by IN shorthand, it will be ignored, and no rows with NULL in the checked column will be outputted for this condition.

    When you use NULL with the other shorthands (NOT IN, BETWEEN and NOT IN BETWEEN), this condition will have no results.

    NULL with logical operators

    When you are building a boolean logic with AND/OR operators (be it in WHERE or in CASE) treat NULL as FALSE.

    AND operator

    When you have two booleans or expressions connected by the AND operator, it will only evaluate to TRUE if both are TRUE.

    Boolean or ExpressionBoolean or ExpressionResult
    TRUETRUETRUE
    TRUEFALSEFALSE
    TRUENULLNULL
    FALSETRUEFALSE
    FALSEFALSEFALSE
    FALSENULLNULL
    NULLTRUENULL
    NULLFALSENULL
    NULLNULLNULL

    OR operator

    When you have two booleans or expressions connected by the OR operator, it will evaluate to TRUE if at least one is TRUE.

    Boolean or ExpressionBoolean or ExpressionResult
    TRUETRUETRUE
    TRUEFALSETRUE
    TRUENULLTRUE
    FALSETRUETRUE
    FALSEFALSEFALSE
    FALSENULLNULL
    NULLTRUETRUE
    NULLFALSENULL
    NULLNULLNULL

    NULL with aggregate functions

    Aggregate functions just ignore NULL values. Calculating average? NULL will not be taken into consideration at all - which can scew your output a lot.

    The only exception is COUNT that has specific * argument for counting rows with NULL.

    Ok, we discussed a lot of NULL problems. Now it's time to solve them with dedicated NULL functions.

    IS NULL

    Firstly, let's cover how we can recognize whether a NULL is a NULL. Using standard =/!= operators won't work, but you can do it easily with dedicated IS NULL/IS NOT NULL operators:

    Subscribers with Email Address
    SELECT SubscriberKey
    FROM DataExtension
    WHERE EmailAddress IS NOT NULL

    Because comparison operators don't work, if you are building filters on nullable values, you might have to query defensively:

    Subscribers with small amount of purchases
    SELECT SubscriberKey
    FROM DataExtension
    WHERE
    PurchaseCount < 5
    OR PurchaseCount IS NULL

    Assuming PurchaseCount is a nullable field, should you use only PurchaseCount < 5, you wouldn't see the rows with the NULL in that column. Adding another condition that checks explicitly for NULL solves that.

    However, there are other methods - dedicated shorthands of the universally helpful CASE statement. Let's check them.

    ISNULL

    ISNULL function is the first line of defence against the NULLs. It takes two arguments, checks the first one, and returns it if it is not NULL. Else, it returns the second. Perfect for creating a fallback value for nullable columns.

    Subscribers with small amount of purchases
    SELECT SubscriberKey
    FROM DataExtension
    WHERE ISNULL(PurchaseCount, 0) < 5

    Now the filter will check whether PurchaseCount is NULL. If not, it will use its value. If yes, it will consider it a zero for the conditional check.

    The second argument doesn't have to be a standard value. It can also be a column. Just make sure it is not nullable, or...

    COALESCE

    If a single fallback provided by ISNULL is not enough, the COALESCE function lets you provide multiple. COALESCE will return the first argument that is not NULL. However, if all are NULL - the final outcome will also be NULL.

    Find Subscribers with at least one available address for a direct mail
    SELECT
    SubscriberKey
    , COALESCE(HomeAddress, WorkAddress, ParentAddress) AS AvailableAddress
    FROM DataExtension
    WHERE COALESCE(HomeAddress, WorkAddress, ParentAddress) IS NOT NULL
    You Should Know

    COALESCE is perfect for creating concatenated fields where you are not sure if all parts will be available, as it lets you control the number of spaces between elements:

    Calculate FullName with nullable MiddleName
    SELECT CONCAT(FirstName, ' ', COALESCE(MiddleName + ' ', ''), LastName) AS FullName

    NULLIF

    Finally, there is the NULLIF function that returns NULL if two provided arguments are equal or the first argument if they are different:

    Pulls WorkEmailAddress value only if it is different from general EmailAddress
    SELECT
    SubscriberKey
    , EmailAddress
    , NULLIF(WorkEmailAddress, EmailAddress) AS WorkEmailAddress

    I personally find the standard IIF shorthand much more readable and user-friendly, despite being slightly longer than dedicated NULLIF:

    Pulls WorkEmailAddress value only if it is different from general Email Address with IIF
    SELECT
    SubscriberKey
    , EmailAddress
    , IIF(WorkEmailAddress = EmailAddress, NULL, EmailAddress) AS WorkEmailAddress
    - - +

    SFMC SQL NULL Functions

    IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.

    +

    NULL is a fickle beast, and for the people not accustomed to how it works in SQL, it can create many problems (read: incorrect data output). This is especially true for those coming from nullish-friendly languages (like SSJS). Let's jump into the details.

    +

    NULL

    +

    Like in other languages, NULL is a placeholder that marks an absent (unknown) value. Unlike in other languages (like SSJS), it can be used in any data type. You can have NULL Date (datetime) , NULL Number (int), NULL Text (nvarchar) or NULL Boolean.

    +

    Also, unlike in some other languages, SQL doesn't support a default nullish coalescing. In simpler words, it means that empty string ('') or zero (0) are not equal to NULL. It makes sense when you treat NULL as an unknown value - unknown is not equal to 0.

    +

    NULL with standard SQL Functions

    +

    Because NULL is unknown, if you try to do any standard operation on the NULL (like adding an integer, or concatenating it with a string), it will return unknown (NULL):

    +
    ❌ Functions with NULLs
    SELECT
    1 + NULL AS MathFunctionWithNull -- Outputs NULL
    , CONCAT('Hello ', NULL) AS StringFunctionWithNull -- Outputs NULL
    +

    NULL with relational operators

    +

    The fun doesn't stop there - When you try to make any comparision with NULL, it will fail, because it is a check against an unknown value. Or, to be more specific, the comparison will evaluate to FALSE, impacting your output.

    +
    ❌ Comparisons with NULLs
    SELECT SubscriberKey
    FROM DataExtension
    WHERE
    NullablePurchaseCount > 0
    AND NullableProductName != 'T-Shirt'
    AND EmailAddress != NULL
    +

    In the example above, all three comparisons in the WHERE statement will return FALSE for NULLs and the query will not output any rows.

    +

    Let's check why, step by step:

    +
      +
    1. NullablePurchaseCount > 0 - The rows with a value (be it 0 or 10) are evaluated normally. The rows with NULL (absent value) evaluate as FALSE and are removed from the output.
    2. +
    3. NullableProductName != 'T-Shirt' - The rows with a value (be it '', 'Hoodie' or 'T-Shirt') are evaluated normally. The rows with NULL (absent value) evaluate as FALSE and are removed from the output.
    4. +
    5. EmailAddress != NULL - Regardless of the EmailAddress value, because we are comparing it to NULL, check for every row evaluate to FALSE and therefore is dropped from the output.
    6. +
    +

    NULL with conditional operators

    +

    NULL gets even more problematic when you want to work with IN/NOT IN or BETWEEN/NOT IN BETWEEN.

    +

    When you use NULL as one of the values searched by IN shorthand, it will be ignored, and no rows with NULL in the checked column will be outputted for this condition.

    +

    When you use NULL with the other shorthands (NOT IN, BETWEEN and NOT IN BETWEEN), this condition will have no results.

    +

    NULL with logical operators

    +

    When you are building a boolean logic with AND/OR operators (be it in WHERE or in CASE) treat NULL as FALSE.

    +

    AND operator

    +

    When you have two booleans or expressions connected by the AND operator, it will only evaluate to TRUE if both are TRUE.

    +

    Boolean or Expression | Boolean or Expression | Result

    +
      +
    • | - | - +TRUE | TRUE | TRUE +TRUE | FALSE | FALSE +TRUE | NULL | NULL +FALSE | TRUE | FALSE +FALSE | FALSE | FALSE +FALSE | NULL | NULL +NULL | TRUE | NULL +NULL | FALSE | NULL +NULL | NULL | NULL
    • +
    +

    OR operator

    +

    When you have two booleans or expressions connected by the OR operator, it will evaluate to TRUE if at least one is TRUE.

    +

    Boolean or Expression | Boolean or Expression | Result

    +
      +
    • | - | - +TRUE | TRUE | TRUE +TRUE | FALSE | TRUE +TRUE | NULL | TRUE +FALSE | TRUE | TRUE +FALSE | FALSE | FALSE +FALSE | NULL | NULL +NULL | TRUE | TRUE +NULL | FALSE | NULL +NULL | NULL | NULL
    • +
    +

    NULL with aggregate functions

    +

    Aggregate functions just ignore NULL values. Calculating average? NULL will not be taken into consideration at all - which can scew your output a lot.

    +

    The only exception is COUNT that has specific * argument for counting rows with NULL.

    +

    Ok, we discussed a lot of NULL problems. Now it's time to solve them with dedicated NULL functions.

    +

    IS NULL

    +

    Firstly, let's cover how we can recognize whether a NULL is a NULL. Using standard =/!= operators won't work, but you can do it easily with dedicated IS NULL/IS NOT NULL operators:

    +
    Subscribers with Email Address
    SELECT SubscriberKey
    FROM DataExtension
    WHERE EmailAddress IS NOT NULL
    +

    Because comparison operators don't work, if you are building filters on nullable values, you might have to query defensively:

    +
    Subscribers with small amount of purchases
    SELECT SubscriberKey
    FROM DataExtension
    WHERE
    PurchaseCount < 5
    OR PurchaseCount IS NULL
    +

    Assuming PurchaseCount is a nullable field, should you use only PurchaseCount < 5, you wouldn't see the rows with the NULL in that column. Adding another condition that checks explicitly for NULL solves that.

    +

    However, there are other methods - dedicated shorthands of the universally helpful CASE statement. Let's check them.

    +

    ISNULL

    +

    ISNULL function is the first line of defence against the NULLs. It takes two arguments, checks the first one, and returns it if it is not NULL. Else, it returns the second. Perfect for creating a fallback value for nullable columns.

    +
    Subscribers with small amount of purchases
    SELECT SubscriberKey
    FROM DataExtension
    WHERE ISNULL(PurchaseCount, 0) < 5
    +

    Now the filter will check whether PurchaseCount is NULL. If not, it will use its value. If yes, it will consider it a zero for the conditional check.

    +

    The second argument doesn't have to be a standard value. It can also be a column. Just make sure it is not nullable, or...

    +

    COALESCE

    +

    If a single fallback provided by ISNULL is not enough, the COALESCE function lets you provide multiple. COALESCE will return the first argument that is not NULL. However, if all are NULL - the final outcome will also be NULL.

    +
    Find Subscribers with at least one available address for a direct mail
    SELECT
    SubscriberKey
    , COALESCE(HomeAddress, WorkAddress, ParentAddress) AS AvailableAddress
    FROM DataExtension
    WHERE COALESCE(HomeAddress, WorkAddress, ParentAddress) IS NOT NULL
    +
    You Should Know

    COALESCE is perfect for creating concatenated fields where you are not sure if all parts will be available, as it lets you control the number of spaces between elements:

    Calculate FullName with nullable MiddleName
    SELECT CONCAT(FirstName, ' ', COALESCE(MiddleName + ' ', ''), LastName) AS FullName
    +

    NULLIF

    +

    Finally, there is the NULLIF function that returns NULL if two provided arguments are equal or the first argument if they are different:

    +
    Pulls WorkEmailAddress value only if it is different from general EmailAddress
    SELECT
    SubscriberKey
    , EmailAddress
    , NULLIF(WorkEmailAddress, EmailAddress) AS WorkEmailAddress
    +

    I personally find the standard IIF shorthand much more readable and user-friendly, despite being slightly longer than dedicated NULLIF:

    +
    Pulls WorkEmailAddress value only if it is different from general Email Address with IIF
    SELECT
    SubscriberKey
    , EmailAddress
    , IIF(WorkEmailAddress = EmailAddress, NULL, EmailAddress) AS WorkEmailAddress
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-numeric-functions/index.html b/docs/sql/sfmc-sql-numeric-functions/index.html index d81a4af3b..cb5f23fb7 100644 --- a/docs/sql/sfmc-sql-numeric-functions/index.html +++ b/docs/sql/sfmc-sql-numeric-functions/index.html @@ -1,22 +1,75 @@ - + - -SFMC SQL Numeric Functions | Mateusz Dąbrowski + +SFMC SQL Numeric Functions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Numeric Functions

    Take control over numbers with built-in SQL functions. Let the query do the job.

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    Here, I will cover only selected numeric functions that I find most useful for Marketing Automation purposes. They will help you do the necessary calculations or format the numbers to match your needs.

    MIN and MAX

    MIN and MAX functions allow you to find the minimum and maximum values of column(s) in the selected data extension.

    What is your highest subscriber bounce count?
    SELECT MAX(s.BounceCount) AS HighestBounceCount
    FROM _Subscribers AS s

    Will you use it frequently? Probably not. Is it useless? Oh no.

    Let's say you have a data extension storing information about a competition - including the number of points that participants gathered. Now it is time to send congratulations to the winner. MAX function will make it easy.

    Get a Subscriber Key and Points of all the customers that have the biggest amount of points
    SELECT
    comp.SubscriberKey
    , comp.CompetitionPoints
    FROM CompetitionDataExtension AS comp
    WHERE
    comp.CompetitionPoints = (
    SELECT MAX(comp2.CompetitionPoints)
    FROM CompetitionDataExtension AS comp2
    )

    However, my favourite use case for MAX is debugging Data Extensions and their values. Especially useful when working with data imports from external systems — for example, pulling data from Sales Cloud via Marketing Cloud Connect.

    You might frequently encounter a situation where your automations responsible for moving data from Synchronized Data Extensions to standard Data Extensions crashes with cryptic information about truncated data. In most cases, the reason is a value exceeding the maximum length you set for the column in your local Data Extension.

    How to find the culprit? With MAX and LEN functions:

    For Datetime values, it will output 19 characters
    SELECT
    MAX(LEN(c.Id)) AS SubscriberKey
    , MAX(LEN(c.Email)) AS EmailAddress
    /* Rest of the Contact fields you synchronized from Contact object */
    FROM Contact_Salesforce AS c

    This query can be used ad hoc in Query Studio to quickly show your current maximum lengths of the values coming from Sales Cloud. Compare them to the length of your fields in the destination data extension to see which column is crashing your automation.

    You can also extend it with WHERE containing current lengths of fields in that data extension and make it part of your automation. It will find the records too long for the data extension, log them into data extension and allow you to leverage Verification Activity to alert you about the issue. Nice and clean.

    MAX and MIN are also instrumental as a part of an aggregate query.

    AVG

    The AVG function returns the average value in a given column (excluding NULL values).

    What is your average subscriber bounce count?
    SELECT AVG(s.BounceCount) AS AverageBounceCount
    FROM _Subscribers AS s

    The above example might not look like much value, but with the help of DATEDIFF and CONVERT functions you can make it much more interesting:

    What is the average age of your Subscribers?
    SELECT DATEDIFF(MONTH, CONVERT(DATETIME, AVG(CONVERT(FLOAT, DateJoined))), GETDATE()) AS SubscribersAverageAgeInMonths
    FROM _Subscribers

    However, AVG shows its true power with WHERE filtering:

    Let's get your above-average spenders for an e-commerce up-sell campaign
    SELECT SubscriberKey
    FROM Purchases
    WHERE Price > AVG(Price)

    You can mix two previous queries to create separate segments for your fresh and old subscribers.

    AVG function is also beneficial as a part of an aggregate query.

    SUM

    The SUM function allows you to calculate the sum of values.

    What is your total bounce count?
    SELECT SUM(BounceCount) AS AllBouncesCount
    FROM _Subscribers

    It is helpful nearly only as a part of an aggregate query.

    FORMAT with Numbers

    The FORMAT works only with datetime and numeric values, outputs a string and requires:

    1. Value to be formatted (can be a column, string or function)
    2. Format specifier to be applied
    3. Optionally - ISO culture code

    It is a perfect tool to manipulate any numbers (or numeric strings with the help of conversion) available in your Data Extensions.

    Standard number formats

    Standard formats use one required and one optional element.

    The required one is the format specifier - which tells what the outcome should be. The optional is precision - it allows you to change the value on the go (for example, round it to two decimal places). If you do not use precision, the value will stay with its current precision.

    Precision might lead to rounding. Note also the US thousands separator
    SELECT
    FORMAT(1234.56, 'N') AS WithoutCustomPrecision /* Output: 1,234.56 */
    , FORMAT(1234.56, 'N1') AS RoundedWithCustomPrecision /* Output: 1,234.6 */

    There are nine standard formats available, but only a few are useful on a day-to-day basis in Salesforce Marketing Cloud:

    Format specifierDescriptionExample (for US culture)Comment
    'C'/'c'Currency$1,234.56You can pass a culture code as a third argument to format the value straight to needed currency (including currency symbol and appropriate separators)
    'D'/'d'Decimal1235Support integers only. Precision enforces a minimum number of digits (great for adding leading zeroes)
    'N'/'n'Number1,234.56Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation
    'P'/'p'Percent12.34 %Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation

    Just as highlighted in the table header - the examples are for the SFMC default US culture formating.

    You can find the complete list of standard date format specifiers on Microsoft .Net Doc Pages.

    Custom number formats

    Of course, the formats shown above are not the limit of what you can do. Whenever you want something different, you can create a custom format by just providing a pattern:

    Format specifierDescriptionComments
    '0'Zero placeholderReplaces the zero with the digit if available; otherwise, zero appears in the result string.
    '#'Number placeholderReplaces the zero with the digit if available; otherwise, no number appears in the result string. It also ignores not significant zeroes (like leading ones)
    '.'Leading pointInforms the format function about desired decimal separator place
    '%'Percentage placeholderMultiplies the number by 100 and inserts per cent sign in the selected place
    '\'Escape characterAllows you to escape any format specifier symbol if you want it literally in the outcome
    'string'/"string"String literalPasses the string straight to the outcome
    ';'Section separatorAllows you to pass different custom formats for positive, zero and negative values

    Again, the examples are for the default US culture formatting and might look different for different cultures (for example, hour separator might be changed automatically to . for Italy).

    You can find the complete list of standard date format specifiers on Microsoft .Net Doc Pages.

    The custom number formats can do wonders for your personalization needs. Example? Sure!

    Let's say you want your customers to validate their phone numbers before you leverage the SMS channel. You have them in Mobile Connect compliant format (only digits, no spaces, country code included). 48520935815 is not a very user-friendly format to validate. Let's fix it:

    From '48520935815' to '(48) 520 935 815' in one line
    SELECT
    s.SubscriberKey
    , FORMAT(CONVERT(BIGINT, ea.MobileNumber), '(###) ### ### ###') AS FormattedPhone /* Output: (48) 520 935 815 */
    FROM _Subscribers AS s
    INNER JOIN EnterpriseAttribute AS ea
    ON ea._SubscriberID = s.SubscriberID

    As you can see, we had to use the CONVERT function with the BIGINT parameter, as the MobileNumber is a Text field. Thanks to conversion, we can use numeric functions to format it quickly. It could get even better with LIKE in CASE used to create different formats depending on the country code.

    Another use case? Let's assume we have a VIPDiscount field. It contains a number between 0.00 and 0.99 that tells what discount is appropriate for the selected user based on their VIP status. You store it in decimal numeric because it is a much more accessible format for SSJS or AMPScript to calculate the final price of items promoted in communication.

    However, showing the customer that he has a 0.33 discount is not a good idea. FORMAT can help us once more:

    Depending on your needs you may use Standard format or a Custom one
    SELECT
    FORMAT(VIPDiscount, 'P') AS StandardFormattedVIPDiscount /* Output: 33.00 % */
    , FORMAT(VIPDiscount, '-00.##%') AS CustomFormattedVIPDiscount /* Output: -33% */
    - - +

    SFMC SQL Numeric Functions

    Take control over numbers with built-in SQL functions. Let the query do the job.

    +

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    +

    Here, I will cover only selected numeric functions that I find most useful for Marketing Automation purposes. They will help you do the necessary calculations or format the numbers to match your needs.

    +

    MIN and MAX

    +

    MIN and MAX functions allow you to find the minimum and maximum values of column(s) in the selected data extension.

    +
    What is your highest subscriber bounce count?
    SELECT MAX(s.BounceCount) AS HighestBounceCount
    FROM _Subscribers AS s
    +

    Will you use it frequently? Probably not. Is it useless? Oh no.

    +

    Let's say you have a data extension storing information about a competition - including the number of points that participants gathered. Now it is time to send congratulations to the winner. MAX function will make it easy.

    +
    Get a Subscriber Key and Points of all the customers that have the biggest amount of points
    SELECT
    comp.SubscriberKey
    , comp.CompetitionPoints
    FROM CompetitionDataExtension AS comp
    WHERE
    comp.CompetitionPoints = (
    SELECT MAX(comp2.CompetitionPoints)
    FROM CompetitionDataExtension AS comp2
    )
    +

    However, my favourite use case for MAX is debugging Data Extensions and their values. Especially useful when working with data imports from external systems — for example, pulling data from Sales Cloud via Marketing Cloud Connect.

    +

    You might frequently encounter a situation where your automations responsible for moving data from Synchronized Data Extensions to standard Data Extensions crashes with cryptic information about truncated data. In most cases, the reason is a value exceeding the maximum length you set for the column in your local Data Extension.

    +

    How to find the culprit? With MAX and LEN functions:

    +
    For Datetime values, it will output 19 characters
    SELECT
    MAX(LEN(c.Id)) AS SubscriberKey
    , MAX(LEN(c.Email)) AS EmailAddress
    /* Rest of the Contact fields you synchronized from Contact object */
    FROM Contact_Salesforce AS c
    +

    This query can be used ad hoc in Query Studio to quickly show your current maximum lengths of the values coming from Sales Cloud. Compare them to the length of your fields in the destination data extension to see which column is crashing your automation.

    +

    You can also extend it with WHERE containing current lengths of fields in that data extension and make it part of your automation. It will find the records too long for the data extension, log them into data extension and allow you to leverage Verification Activity to alert you about the issue. Nice and clean.

    +

    MAX and MIN are also instrumental as a part of an aggregate query.

    +

    AVG

    +

    The AVG function returns the average value in a given column (excluding NULL values).

    +
    What is your average subscriber bounce count?
    SELECT AVG(s.BounceCount) AS AverageBounceCount
    FROM _Subscribers AS s
    +

    The above example might not look like much value, but with the help of DATEDIFF and CONVERT functions you can make it much more interesting:

    +
    What is the average age of your Subscribers?
    SELECT DATEDIFF(MONTH, CONVERT(DATETIME, AVG(CONVERT(FLOAT, DateJoined))), GETDATE()) AS SubscribersAverageAgeInMonths
    FROM _Subscribers
    +

    However, AVG shows its true power with WHERE filtering:

    +
    Let's get your above-average spenders for an e-commerce up-sell campaign
    SELECT SubscriberKey
    FROM Purchases
    WHERE Price > AVG(Price)
    +

    You can mix two previous queries to create separate segments for your fresh and old subscribers.

    +

    AVG function is also beneficial as a part of an aggregate query.

    +

    SUM

    +

    The SUM function allows you to calculate the sum of values.

    +
    What is your total bounce count?
    SELECT SUM(BounceCount) AS AllBouncesCount
    FROM _Subscribers
    +

    It is helpful nearly only as a part of an aggregate query.

    +

    FORMAT with Numbers

    +

    The FORMAT works only with datetime and numeric values, outputs a string and requires:

    +
      +
    1. Value to be formatted (can be a column, string or function)
    2. +
    3. Format specifier to be applied
    4. +
    5. Optionally - ISO culture code
    6. +
    +

    It is a perfect tool to manipulate any numbers (or numeric strings with the help of conversion) available in your Data Extensions.

    +

    Standard number formats

    +

    Standard formats use one required and one optional element.

    +

    The required one is the format specifier - which tells what the outcome should be. The optional is precision - it allows you to change the value on the go (for example, round it to two decimal places). If you do not use precision, the value will stay with its current precision.

    +
    Precision might lead to rounding. Note also the US thousands separator
    SELECT
    FORMAT(1234.56, 'N') AS WithoutCustomPrecision /* Output: 1,234.56 */
    , FORMAT(1234.56, 'N1') AS RoundedWithCustomPrecision /* Output: 1,234.6 */
    +

    There are nine standard formats available, but only a few are useful on a day-to-day basis in Salesforce Marketing Cloud:

    +
    Format specifierDescriptionExample (for US culture)Comment
    'C'/'c'Currency$1,234.56You can pass a culture code as a third argument to format the value straight to needed currency (including currency symbol and appropriate separators)
    'D'/'d'Decimal1235Support integers only. Precision enforces a minimum number of digits (great for adding leading zeroes)
    'N'/'n'Number1,234.56Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation
    'P'/'p'Percent12.34 %Precision enforces a number of decimal places. You can pass a culture code as a third argument to format the value to country-specific notation
    +

    Just as highlighted in the table header - the examples are for the SFMC default US culture formating.

    +

    You can find the complete list of standard date format specifiers on Microsoft .Net Doc Pages.

    +

    Custom number formats

    +

    Of course, the formats shown above are not the limit of what you can do. Whenever you want something different, you can create a custom format by just providing a pattern:

    +
    Format specifierDescriptionComments
    '0'Zero placeholderReplaces the zero with the digit if available; otherwise, zero appears in the result string.
    '#'Number placeholderReplaces the zero with the digit if available; otherwise, no number appears in the result string. It also ignores not significant zeroes (like leading ones)
    '.'Leading pointInforms the format function about desired decimal separator place
    '%'Percentage placeholderMultiplies the number by 100 and inserts per cent sign in the selected place
    ''Escape characterAllows you to escape any format specifier symbol if you want it literally in the outcome
    'string'/"string"String literalPasses the string straight to the outcome
    ';'Section separatorAllows you to pass different custom formats for positive, zero and negative values
    +

    Again, the examples are for the default US culture formatting and might look different for different cultures (for example, hour separator might be changed automatically to . for Italy).

    +

    You can find the complete list of standard date format specifiers on Microsoft .Net Doc Pages.

    +

    The custom number formats can do wonders for your personalization needs. Example? Sure!

    +

    Let's say you want your customers to validate their phone numbers before you leverage the SMS channel. You have them in Mobile Connect compliant format (only digits, no spaces, country code included). 48520935815 is not a very user-friendly format to validate. Let's fix it:

    +
    From '48520935815' to '(48) 520 935 815' in one line
    SELECT
    s.SubscriberKey
    , FORMAT(CONVERT(BIGINT, ea.MobileNumber), '(###) ### ### ###') AS FormattedPhone /* Output: (48) 520 935 815 */
    FROM _Subscribers AS s
    INNER JOIN EnterpriseAttribute AS ea
    ON ea._SubscriberID = s.SubscriberID
    +

    As you can see, we had to use the CONVERT function with the BIGINT parameter, as the MobileNumber is a Text field. Thanks to conversion, we can use numeric functions to format it quickly. It could get even better with LIKE in CASE used to create different formats depending on the country code.

    +

    Another use case? Let's assume we have a VIPDiscount field. It contains a number between 0.00 and 0.99 that tells what discount is appropriate for the selected user based on their VIP status. You store it in decimal numeric because it is a much more accessible format for SSJS or AMPScript to calculate the final price of items promoted in communication.

    +

    However, showing the customer that he has a 0.33 discount is not a good idea. FORMAT can help us once more:

    +
    Depending on your needs you may use Standard format or a Custom one
    SELECT
    FORMAT(VIPDiscount, 'P') AS StandardFormattedVIPDiscount /* Output: 33.00 % */
    , FORMAT(VIPDiscount, '-00.##%') AS CustomFormattedVIPDiscount /* Output: -33% */
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-select/index.html b/docs/sql/sfmc-sql-select/index.html index decc6960f..d419ba4ce 100644 --- a/docs/sql/sfmc-sql-select/index.html +++ b/docs/sql/sfmc-sql-select/index.html @@ -1,22 +1,91 @@ - + - -SFMC SQL Select | Mateusz Dąbrowski + +SFMC SQL Select | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Select

    Selected information on the SELECT statement in SFMC SQL

    The SELECT statement opens each query. It picks the columns from the source data extensions and system data views and allows you to create entirely new data points.

    The simplest version of this statement is SELECT *, which targets all available columns from the source. I do not recommend this approach, as it is terrible for your query's readability and performance. As Salesforce Marketing Cloud caches the source Data Extension column names when you save SQL Query Activity, you won't have added value of flexible selection. You will still have to edit and save the activity. Also, Query Studio does not support this shortcut. Don't use *.

    The prefered method is targeting columns explicitly by their names:

    Select ContactKey and EmailAddress columns
    SELECT
    ContactKey
    , EmailAddres

    If a column name contains a space, hyphen or is a SQL's reserved keyword, you need to capture it with squared brackets:

    Let's add another column with whitespace in its name
    SELECT
    ContactKey
    , EmailAddres
    , [External Contact Id]

    There are also some exceptional cases related to selected System Data Views in Salesforce Marketing Cloud, where you need to use an underscore prefix before a name (for example, when taking Subscriber ID from Enterprise Attributes):

    There are some special column names with an underscore prefix
    SELECT _SubscriberId

    Aliasing with AS

    You can also utilise SELECT as a tool to rename the source columns to match your needs in an outcome data extension. It is especially useful when pulling the data from Synchronized Data Extension with names coming from Salesforce custom fields.

    Improve readability and consistency with aliasing
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender

    Custom values

    Use aliases also for passing new values directly from your query. Need to add a custom string to outcome data extension? Or maybe synchronisation timestamp for debugging purposes? You can leverage SQL for it.

    Add custom column aliased 'ImportDate' with a value equal to the UTC of the script execution for each record
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    You Should Know

    You can even go further by creating new values by leveraging existing data! For example, if you have a first name and last name, you can use SQL to create a FullName column from scratch:

    Let's create a concatenated column for easier personalisation
    SELECT
    SubscriberKey
    , EmailAddress
    , FirstName + ' ' + LastName AS FullName

    It becomes mighty with the SQL String functions.

    TOP

    You can add a TOP clause to your SELECT statement to limit the number of rows returned by your query.

    Returns 10 rows
    SELECT TOP 10
    SubscriberKey
    , PreferredChannel
    , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact

    TOP PERCENT

    The TOP clause is not limited to an integer; you can also ask for a specific per cent of rows with PERCENT modifier:

    SELECT TOP 10 PERCENT
    SubscriberKey
    , PreferredChannel
    , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact

    The number of rows will be rounded up to the nearest integer (so TOP 50 PERCENT from Data Extension with 101 rows will return 51 rows).

    You Should Know

    PERCENT modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity.

    TOP with ORDER BY

    The TOP clause best practice is to always use it with ORDER BY. Only with sorted data, you will understand rows selection logic.

    To sort outcomes of your query, add ORDER BY at the end - along with column(s) that used for sorting.

    Top 10% with the lowest Quiz Score
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore

    You can control the sort order by applying ASC (default) and DESC after the column.

    Top 10% with highest Quiz Score
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC
    You Should Know

    ORDER BY sorts Text fields alphabetically. It might surprise you if you store numbers in such field type, as it will order 10 before 2.

    The best solution is to use the appropriate field type for numbers. However, if for whatever reason you cannot do it, leverage CONVERT:

    Top 10% with highest Quiz Score if QuizScore is a Text field
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY CONVERT(INT, QuizScore) DESC

    For example, it will be needed when you ORDER BY COUNT within GROUP BY.

    ORDER BY will also sort dates in Marketing Cloud alphabetically using month(start with Apr, follow up with Aug and so on). You can fix it by using CONVERT to DATE (if you to order only by date) or DATETIME2 (if time is important for ordering as well), just as in previous example.

    ORDER BY can operate not only on the selected column. You already saw above that you can use expression (even CASE!) to calculate the sorting value, but it's much more flexible.

    You can sort using a column not picked in SELECT:

    Top 10% with highest Quiz Score, without returning the score
    SELECT TOP 10 PERCENT
    SubscriberKey
    ORDER BY QuizScore DESC

    You can sort using an alias defined in the SELECT statement:

    Top 10% with highest Quiz Score, using an alias
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore AS Points
    ORDER BY Points DESC

    And you can even sort using multiple values - each can have different sorting order.

    SQL will sort using the first provided column and then, while maintaining the order of the previous column, will sort again using the next value. Let's jump to an example:

    Top 10% with highest Quiz Score, first to solve
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC, QuizFilledDate ASC

    The query will first sort using QuizScore to find people with the most points. Next, it will apply the second sort on the date of quiz completion. As an outcome, we will have the highest scorers sorted from first to last within each high score.

    TOP WITH TIES

    Sometimes even such complex sorting might not be enough.

    For example, let's capture three top scorers of our quiz:

    Three top scorers
    SELECT TOP 3
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC

    As an outcome, we got:

    SubscriberKeyQuizScore
    XYZ97
    ACE97
    PIL96

    However, if we check our Data Extension, we could see more people with the same score:

    SubscriberKeyQuizScore
    XYZ97
    ACE97
    PIL96
    UDO96
    SDJ96

    What can we do to capture everyone with a score good enough for the Top 3 status? WITH TIES will help:

    Despite asking for TOP 3, it will return 5 rows due to ties
    SELECT TOP 3 WITH TIES
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC

    With those two words added after the TOP clause, our query will return all rows that match the sorted value in the last row. It, however, means that the number of outcomes is not set in stone, so be sure to prepare your next steps for that uncertainty.

    You Should Know

    WITH TIES modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity.

    DISTINCT

    The DISTINCT clause is the most straightforward deduplication tool.

    When added to the SELECT statement, it will check all available values and leave unique ones.

    Unique domains in your database sorted alphabetically
    SELECT DISTINCT
    Domain
    ORDER BY Domain

    It's perfect for single-column deduplication. However, when you apply it to a select with multiple columns, it will leverage all of them for deduplication.

    One row for each SubscriberKey - Domain pair, sorted alphabetically by domain
    SELECT DISTINCT
    SubscriberKey
    , Domain
    ORDER BY Domain

    In the above case, you will get a separate row for each Subscriber Key - Domain pair. It means that you might receive multiple rows with the same Subscriber Key (but each with a different Domain). And you will undoubtedly see numerous rows with the same domain (but each with a different Subscriber key).

    DISTINCT with TOP

    You can use both DISTINCT and TOP in the same query.

    SELECT DISTINCT TOP 10 PERCENT
    Domain
    ORDER BY Domain

    SQL will first deduplicate the results using DISTINCT and then limit output with TOP.

    You Should Know

    There is an important exception from stadard rules if you are using DISTINCT and ORDER BY in the same query. You have to add all columns used for sorting to the SELECT, which might have painful impact on your deduplication rules.

    Table Prefixes

    Additional elements that you will be using in many of your queries are table prefixes for selecting columns from multiple joined Data Extensions.

    SELECT
    _Subscriber.SubscriberKey
    , _EnterpriseAttribute.LastName

    I'm covering this topic in-depth in JOIN statement documentation.

    Flow control

    Despite official SFMC SQL documentation stating that it supports the IF constructs, I could not make it work.

    Variables & Functions

    Unfortunately, SFMC SQL does not support variables.

    Fortunately, it does support (selected) functions. Learn more about them in SFMC SQL Functions documentation pages related to Strings, Dates, Numbers, Conversion, Aggregation, CASE and LIKE.

    - - +

    SFMC SQL Select

    Selected information on the SELECT statement in SFMC SQL

    +

    The SELECT statement opens each query. It picks the columns from the source data extensions and system data views and allows you to create entirely new data points.

    +

    The simplest version of this statement is SELECT *, which targets all available columns from the source. I do not recommend this approach, as it is terrible for your query's readability and performance. As Salesforce Marketing Cloud caches the source Data Extension column names when you save SQL Query Activity, you won't have added value of flexible selection. You will still have to edit and save the activity. Also, Query Studio does not support this shortcut. Don't use *.

    +

    The prefered method is targeting columns explicitly by their names:

    +
    Select ContactKey and EmailAddress columns
    SELECT
    ContactKey
    , EmailAddres
    +

    If a column name contains a space, hyphen or is a SQL's reserved keyword, you need to capture it with squared brackets:

    +
    Let's add another column with whitespace in its name
    SELECT
    ContactKey
    , EmailAddres
    , [External Contact Id]
    +

    There are also some exceptional cases related to selected System Data Views in Salesforce Marketing Cloud, where you need to use an underscore prefix before a name (for example, when taking Subscriber ID from Enterprise Attributes):

    +
    There are some special column names with an underscore prefix
    SELECT _SubscriberId
    +

    Aliasing with AS

    +

    You can also utilise SELECT as a tool to rename the source columns to match your needs in an outcome data extension. It is especially useful when pulling the data from Synchronized Data Extension with names coming from Salesforce custom fields.

    +
    Improve readability and consistency with aliasing
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    +

    Custom values

    +

    Use aliases also for passing new values directly from your query. Need to add a custom string to outcome data extension? Or maybe synchronisation timestamp for debugging purposes? You can leverage SQL for it.

    +
    Add custom column aliased 'ImportDate' with a value equal to the UTC of the script execution for each record
    SELECT
    ContactKey
    , EmailAddress
    , [External Contact Id] AS ExternalContactId
    , Gender__c AS Gender
    , 'Lead' AS RecordType
    , GETUTCDATE() AS ImportDate
    +
    You Should Know

    You can even go further by creating new values by leveraging existing data! For example, if you have a first name and last name, you can use SQL to create a FullName column from scratch:

    Let's create a concatenated column for easier personalisation
    SELECT
    SubscriberKey
    , EmailAddress
    , FirstName + ' ' + LastName AS FullName

    It becomes mighty with the SQL String functions.

    +

    TOP

    +

    You can add a TOP clause to your SELECT statement to limit the number of rows returned by your query.

    +
    Returns 10 rows
    SELECT TOP 10
    SubscriberKey
    , PreferredChannel
    , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact
    +

    TOP PERCENT

    +

    The TOP clause is not limited to an integer; you can also ask for a specific per cent of rows with PERCENT modifier:

    +
    SELECT TOP 10 PERCENT
    SubscriberKey
    , PreferredChannel
    , IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact
    +

    The number of rows will be rounded up to the nearest integer (so TOP 50 PERCENT from Data Extension with 101 rows will return 51 rows).

    +
    You Should Know

    PERCENT modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity.

    +

    TOP with ORDER BY

    +

    The TOP clause best practice is to always use it with ORDER BY. Only with sorted data, you will understand rows selection logic.

    +

    To sort outcomes of your query, add ORDER BY at the end - along with column(s) that used for sorting.

    +
    Top 10% with the lowest Quiz Score
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore
    +

    You can control the sort order by applying ASC (default) and DESC after the column.

    +
    Top 10% with highest Quiz Score
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC
    +
    You Should Know

    ORDER BY sorts Text fields alphabetically. It might surprise you if you store numbers in such field type, as it will order 10 before 2.

    The best solution is to use the appropriate field type for numbers. However, if for whatever reason you cannot do it, leverage CONVERT:

    Top 10% with highest Quiz Score if QuizScore is a Text field
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY CONVERT(INT, QuizScore) DESC

    For example, it will be needed when you ORDER BY COUNT within GROUP BY.

    ORDER BY will also sort dates in Marketing Cloud alphabetically using month(start with Apr, follow up with Aug and so on). You can fix it by using CONVERT to DATE (if you to order only by date) or DATETIME2 (if time is important for ordering as well), just as in previous example.

    +

    ORDER BY can operate not only on the selected column. You already saw above that you can use expression (even CASE!) to calculate the sorting value, but it's much more flexible.

    +

    You can sort using a column not picked in SELECT:

    +
    Top 10% with highest Quiz Score, without returning the score
    SELECT TOP 10 PERCENT
    SubscriberKey
    ORDER BY QuizScore DESC
    +

    You can sort using an alias defined in the SELECT statement:

    +
    Top 10% with highest Quiz Score, using an alias
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore AS Points
    ORDER BY Points DESC
    +

    And you can even sort using multiple values - each can have different sorting order.

    +

    SQL will sort using the first provided column and then, while maintaining the order of the previous column, will sort again using the next value. Let's jump to an example:

    +
    Top 10% with highest Quiz Score, first to solve
    SELECT TOP 10 PERCENT
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC, QuizFilledDate ASC
    +

    The query will first sort using QuizScore to find people with the most points. Next, it will apply the second sort on the date of quiz completion. As an outcome, we will have the highest scorers sorted from first to last within each high score.

    +

    TOP WITH TIES

    +

    Sometimes even such complex sorting might not be enough.

    +

    For example, let's capture three top scorers of our quiz:

    +
    Three top scorers
    SELECT TOP 3
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC
    +

    As an outcome, we got:

    +
    SubscriberKeyQuizScore
    XYZ97
    ACE97
    PIL96
    +

    However, if we check our Data Extension, we could see more people with the same score:

    +
    SubscriberKeyQuizScore
    XYZ97
    ACE97
    PIL96
    UDO96
    SDJ96
    +

    What can we do to capture everyone with a score good enough for the Top 3 status? WITH TIES will help:

    +
    Despite asking for TOP 3, it will return 5 rows due to ties
    SELECT TOP 3 WITH TIES
    SubscriberKey
    , QuizScore
    ORDER BY QuizScore DESC
    +

    With those two words added after the TOP clause, our query will return all rows that match the sorted value in the last row. It, however, means that the number of outcomes is not set in stone, so be sure to prepare your next steps for that uncertainty.

    +
    You Should Know

    WITH TIES modifier doesn't work in Query Studio and will produce an error there. However, it works perfectly in Automation Studio Query Activity.

    +

    DISTINCT

    +

    The DISTINCT clause is the most straightforward deduplication tool.

    +

    When added to the SELECT statement, it will check all available values and leave unique ones.

    +
    Unique domains in your database sorted alphabetically
    SELECT DISTINCT
    Domain
    ORDER BY Domain
    +

    It's perfect for single-column deduplication. However, when you apply it to a select with multiple columns, it will leverage all of them for deduplication.

    +
    One row for each SubscriberKey - Domain pair, sorted alphabetically by domain
    SELECT DISTINCT
    SubscriberKey
    , Domain
    ORDER BY Domain
    +

    In the above case, you will get a separate row for each Subscriber Key - Domain pair. It means that you might receive multiple rows with the same Subscriber Key (but each with a different Domain). And you will undoubtedly see numerous rows with the same domain (but each with a different Subscriber key).

    +

    DISTINCT with TOP

    +

    You can use both DISTINCT and TOP in the same query.

    +
    SELECT DISTINCT TOP 10 PERCENT
    Domain
    ORDER BY Domain
    +

    SQL will first deduplicate the results using DISTINCT and then limit output with TOP.

    +
    You Should Know

    There is an important exception from stadard rules if you are using DISTINCT and ORDER BY in the same query. You have to add all columns used for sorting to the SELECT, which might have painful impact on your deduplication rules.

    +

    Table Prefixes

    +

    Additional elements that you will be using in many of your queries are table prefixes for selecting columns from multiple joined Data Extensions.

    +
    SELECT
    _Subscriber.SubscriberKey
    , _EnterpriseAttribute.LastName
    +

    I'm covering this topic in-depth in JOIN statement documentation.

    +

    Flow control

    +

    Despite official SFMC SQL documentation stating that it supports the IF constructs, I could not make it work.

    +

    Variables & Functions

    +

    Unfortunately, SFMC SQL does not support variables.

    +

    Fortunately, it does support (selected) functions. Learn more about them in SFMC SQL Functions documentation pages related to Strings, Dates, Numbers, Conversion, Aggregation, CASE and LIKE.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-string-functions/index.html b/docs/sql/sfmc-sql-string-functions/index.html index 70e350589..2cf3356cd 100644 --- a/docs/sql/sfmc-sql-string-functions/index.html +++ b/docs/sql/sfmc-sql-string-functions/index.html @@ -1,22 +1,77 @@ - + - -SFMC SQL String Functions | Mateusz Dąbrowski + +SFMC SQL String Functions | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL String Functions

    Take control over strings with built-in SQL functions. Let the query do the job.

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    Here, I will cover only selected string functions that I find most useful for Marketing Automation purposes. They will help you change the values, split and concatenate them, or find elements within.

    You Should Know

    All string functions in SQL use a 1-based index instead of 0-based indexing known from, for example, JavaScript. The first character starts at index 1. It is crucial to provide the correct value to the arguments and correctly interpret the results.

    LEFT & RIGHT

    LEFT and RIGHT functions allow you to cut down the string to just part of it.

    Both require source value and the number of characters to return.

    LEFT and RIGHT can work both on strings as well as on other data types
    SELECT
    LEFT(FirstName, 1) AS FirstNameInitialLetter
    , RIGHT(FirstName, 1) AS FirstNameEndingLetter
    , LEFT(s.DateJoined, 3) AS MonthJoined

    Both those functions can be beneficial to clean and streamline your data by themselves, but their real power becomes evident when you mix them with CHARINDEX for content-aware cuts.

    LEN

    LEN function returns a count of characters in the value.

    If you use Salesforce Contact ID as Subscriber Key, use LEN to find invalid records quickly
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE LEN(SubscriberKey) != 18

    It is less useful for segmentation but awesome for various administrative purposes. Apart from the example above, I highly recommend checking how this function combines with MAX function.

    CHARINDEX

    CHARINDEX function lets you find if and where one string is in another. You pass the value you want to find, the value in which you wish to search and, optionally, the index from which you want to start the search.

    Search for 'Manager' in the JobTitle column starting with the first index
    CHARINDEX("Manager", JobTitle, 1)

    I used the optional starting index in the example above, but you will not be using it in most cases. The CHARINDEX defaults to starting from the beginning so that we can write the above line shorter as CHARINDEX("Manager", JobTitle).

    The function returns one of the three possible values:

    1. NULL - if either value to find or searched value is NULL
    2. 0 - if the value to find is not within the searched value
    3. any other digit - the index where the value to find starts within the searched value - if there are multiple occurrences, the result will show the starting index of just the first one.

    By default, CHARINDEX in SFMC is case-insensitive in its searches. You can, however, enforce case sensitivity by adding COLLATE:

    Case sensitive CHARINDEX search - note lack of a comma between the value and COLLATE
    CHARINDEX("Manager", JobTitle COLLATE Latin1_General_CS_AS)
    You Should Know

    CHARINDEX is especially useful when combined with CASE and LEFT/RIGHT functions, as it allows for smart string operations:

    Dynamically pull part of the Institution Name value
    SELECT
    CASE
    WHEN CHARINDEX(' ', InstitutionName) > 0 THEN LEFT(InstitutionName, CHARINDEX(' ', InstitutionName) - 1)
    ELSE InstitutionName
    END AS InstitutionType
    FROM Accounts

    The above query checks whether there is a space within the InstitutionName value and if yes - it captures only the first word. Think about all the educational institution names with University of..., School of... - by taking only the first part, we can create a new simplified data point categorising records by type.

    PATINDEX

    While CHARINDEX is great for searching the position of a specific string in a value, PATINDEX gives you even more power by supporting the wildcard patterns used with LIKE operator:

    Wildcards & OperatorsDescription
    %Zero, one or more characters
    _Exactly one character
    []Any single character from the list specified inside
    -Range operator for []
    ^Exclusion operator for []

    To learn more about specific wildcards and advanced operators, check out the LIKE guide.

    Broad C-Suite hunt with PATINDEX
    PATINDEX('%C_O%', JobTitle)

    While wildcards give PATINDEX an edge over CHARINDEX, it misses one feature of the latter - an optional argument for starting the search from a specific string. Either can be better depending on the use case at hand.

    CONCAT

    CONCAT function allows you to join two or more strings together.

    You can use it on both existing values pulled from source data extension, as well as on custom strings and digits added directly in the query. In most cases, you will mix both.

    Perfect for preparing your data for personalization
    SELECT
    SubscriberKey
    , EmailAddress
    , CONCAT(FirstName, ' ', LastName) AS FullName

    You can concatenate any number of strings by just adding them comma-separated.

    You Should Know

    In many cases, you might see concatenation done with the plus sign notation.

    Same as above, but with the plus notation
    SELECT
    SubscriberKey
    , EmailAddress
    , FirstName + ' ' + LastName AS FullName

    It might seem cleaner, but there are two downsides to this method:

    1. With the plus notation, if at least one provided value is NULL, the outcome becomes NULL. CONCAT function treats such values as empty strings.
    2. If you want to join a string with a date type value, you need to use CONVERT, but CONCAT will do the implicit conversion for you.

    LTRIM and RTRIM

    LTRIM and RTRIM functions allow you to quickly clean your data by deleting unneeded spaces from the beginning or the end of the provided string.

    Noone likes useless whitespace in their database
    SELECT
    LTRIM(' data from webform ') AS CleanLeftSide /* Output: 'data from webform ' */
    , RTRIM(' data from webform ') AS CleanRightSide /* Output: ' data from webform' */
    , LTRIM(RTRIM(' data from webform ')) AS CleanBothSides /* Output: 'data from webform' */

    NEWID

    NEWID function creates a pseudorandom identifier in the form of a 36-character string GUID (RFC4122 compliant).

    The output structure is the same as for the SSJS Platform.Function.GUID() or AMPScript GUID() functions - five alphanumerical strings joined by hyphens.

    Returns GUID in the form of XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    SELECT NEWID() AS UniqueID

    LOWER, UPPER and Title Case

    When working with SQL, you will frequently encounter dirty data that needs some cleaning before being leveraged for personalisation in marketing sends. One of the frequent issues is inconsistent letter cases, especially on self-filled data points like first and last names coming from lead forms.

    Thankfully, SQL can clean up such data with built-in LOWER and UPPER.

    SELECT
    'DIRTY Data' AS SampleData
    , LOWER('DIRTY Data') AS Lowercase /* Output: 'dirty data' */
    , UPPER('DIRTY Data') AS Uppercase /* Output: 'DIRTY DATA' */

    However, there is no out-of-the-box function for Proper Case - a popular requirement, especially around names and titles. The basic solution for single-word strings is straightforward:

    SELECT
    FirstName /* Output: 'MATEUSZ' */
    , UPPER(LEFT(FirstName, 1)) + LOWER(RIGHT(FirstName, LEN(FirstName) - 1)) AS Propercase /* Output: 'Mateusz' */

    However, it will not work with complex (like names with a hyphen in the middle) or multi-word values. The standard SQL solution - User Defined Function - doesn't work in a limited Salesforce Marketing Cloud SQL environment. The alternative - using CHARINDEX/PATINDEX to find each word - gets awful as soon as you hit three words and more.

    Recommended approach? Either clean the data before ingestion to SFMC or do it directly in the email with the built-in AMPScript ProperCase function.

    FORMAT with Strings

    FORMAT function lets you quickly change the data into a different format. In Salesforce Marketing Cloud, it is especially useful, as you cannot create your functions. FORMAT might save you massive headaches.

    The FORMAT works only with datetime and numeric values. Why I'm writing about it here then? Because you can use CONVERT function to change some of your strings into compliant data types. Consider changing string dates into datetime or phone numbers into integers to format them easily. Check out FORMAT with Dates and FORMAT with Numbers for more information. The outcome of formatting both number and date types with this function is a string.

    - - +

    SFMC SQL String Functions

    Take control over strings with built-in SQL functions. Let the query do the job.

    +

    Salesforce Marketing Cloud SQL implementation does not support user-defined functions. There are, however, multiple built-in functions that are useful on a day-to-day basis when working with queries.

    +

    Here, I will cover only selected string functions that I find most useful for Marketing Automation purposes. They will help you change the values, split and concatenate them, or find elements within.

    +
    You Should Know

    All string functions in SQL use a 1-based index instead of 0-based indexing known from, for example, JavaScript. The first character starts at index 1. It is crucial to provide the correct value to the arguments and correctly interpret the results.

    +

    LEFT & RIGHT

    +

    LEFT and RIGHT functions allow you to cut down the string to just part of it.

    +

    Both require source value and the number of characters to return.

    +
    LEFT and RIGHT can work both on strings as well as on other data types
    SELECT
    LEFT(FirstName, 1) AS FirstNameInitialLetter
    , RIGHT(FirstName, 1) AS FirstNameEndingLetter
    , LEFT(s.DateJoined, 3) AS MonthJoined
    +

    Both those functions can be beneficial to clean and streamline your data by themselves, but their real power becomes evident when you mix them with CHARINDEX for content-aware cuts.

    +

    LEN

    +

    LEN function returns a count of characters in the value.

    +
    If you use Salesforce Contact ID as Subscriber Key, use LEN to find invalid records quickly
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE LEN(SubscriberKey) != 18
    +

    It is less useful for segmentation but awesome for various administrative purposes. Apart from the example above, I highly recommend checking how this function combines with MAX function.

    +

    CHARINDEX

    +

    CHARINDEX function lets you find if and where one string is in another. You pass the value you want to find, the value in which you wish to search and, optionally, the index from which you want to start the search.

    +
    Search for 'Manager' in the JobTitle column starting with the first index
    CHARINDEX("Manager", JobTitle, 1)
    +

    I used the optional starting index in the example above, but you will not be using it in most cases. The CHARINDEX defaults to starting from the beginning so that we can write the above line shorter as CHARINDEX("Manager", JobTitle).

    +

    The function returns one of the three possible values:

    +
      +
    1. NULL - if either value to find or searched value is NULL
    2. +
    3. 0 - if the value to find is not within the searched value
    4. +
    5. any other digit - the index where the value to find starts within the searched value - if there are multiple occurrences, the result will show the starting index of just the first one.
    6. +
    +

    By default, CHARINDEX in SFMC is case-insensitive in its searches. You can, however, enforce case sensitivity by adding COLLATE:

    +
    Case sensitive CHARINDEX search - note lack of a comma between the value and COLLATE
    CHARINDEX("Manager", JobTitle COLLATE Latin1_General_CS_AS)
    +
    You Should Know

    CHARINDEX is especially useful when combined with CASE and LEFT/RIGHT functions, as it allows for smart string operations:

    Dynamically pull part of the Institution Name value
    SELECT
    CASE
    WHEN CHARINDEX(' ', InstitutionName) > 0 THEN LEFT(InstitutionName, CHARINDEX(' ', InstitutionName) - 1)
    ELSE InstitutionName
    END AS InstitutionType
    FROM Accounts

    The above query checks whether there is a space within the InstitutionName value and if yes - it captures only the first word. Think about all the educational institution names with University of..., School of... - by taking only the first part, we can create a new simplified data point categorising records by type.

    +

    PATINDEX

    +

    While CHARINDEX is great for searching the position of a specific string in a value, PATINDEX gives you even more power by supporting the wildcard patterns used with LIKE operator:

    +
    Wildcards & OperatorsDescription
    %Zero, one or more characters
    _Exactly one character
    []Any single character from the list specified inside
    -Range operator for []
    ^Exclusion operator for []
    +

    To learn more about specific wildcards and advanced operators, check out the LIKE guide.

    +
    Broad C-Suite hunt with PATINDEX
    PATINDEX('%C_O%', JobTitle)
    +

    While wildcards give PATINDEX an edge over CHARINDEX, it misses one feature of the latter - an optional argument for starting the search from a specific string. Either can be better depending on the use case at hand.

    +

    CONCAT

    +

    CONCAT function allows you to join two or more strings together.

    +

    You can use it on both existing values pulled from source data extension, as well as on custom strings and digits added directly in the query. In most cases, you will mix both.

    +
    Perfect for preparing your data for personalization
    SELECT
    SubscriberKey
    , EmailAddress
    , CONCAT(FirstName, ' ', LastName) AS FullName
    +

    You can concatenate any number of strings by just adding them comma-separated.

    +
    You Should Know

    In many cases, you might see concatenation done with the plus sign notation.

    Same as above, but with the plus notation
    SELECT
    SubscriberKey
    , EmailAddress
    , FirstName + ' ' + LastName AS FullName

    It might seem cleaner, but there are two downsides to this method:

      +
    1. With the plus notation, if at least one provided value is NULL, the outcome becomes NULL. CONCAT function treats such values as empty strings.
    2. +
    3. If you want to join a string with a date type value, you need to use CONVERT, but CONCAT will do the implicit conversion for you.
    4. +
    +

    LTRIM, RTRIM and TRIM

    +

    LTRIM and RTRIM functions allow you to quickly clean your data by deleting unneeded spaces from the beginning or the end of the provided string.

    +
    Noone likes useless whitespace in their database
    SELECT
    LTRIM(' data from webform ') AS CleanLeftSide /* Output: 'data from webform ' */
    , RTRIM(' data from webform ') AS CleanRightSide /* Output: ' data from webform' */
    , TRIM(' data from webform ') AS CleanBothSides /* Output: 'data from webform' */
    +

    NEWID

    +

    NEWID function creates a pseudorandom identifier in the form of a 36-character string GUID (RFC4122 compliant).

    +

    The output structure is the same as for the SSJS Platform.Function.GUID() or AMPScript GUID() functions - five alphanumerical strings joined by hyphens.

    +
    Returns GUID in the form of XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    SELECT NEWID() AS UniqueID
    +

    LOWER, UPPER and Title Case

    +

    When working with SQL, you will frequently encounter dirty data that needs some cleaning before being leveraged for personalisation in marketing sends. One of the frequent issues is inconsistent letter cases, especially on self-filled data points like first and last names coming from lead forms.

    +

    Thankfully, SQL can clean up such data with built-in LOWER and UPPER.

    +
    SELECT
    'DIRTY Data' AS SampleData
    , LOWER('DIRTY Data') AS Lowercase /* Output: 'dirty data' */
    , UPPER('DIRTY Data') AS Uppercase /* Output: 'DIRTY DATA' */
    +

    However, there is no out-of-the-box function for Proper Case - a popular requirement, especially around names and titles. The basic solution for single-word strings is straightforward:

    +
    SELECT
    FirstName /* Output: 'MATEUSZ' */
    , UPPER(LEFT(FirstName, 1)) + LOWER(RIGHT(FirstName, LEN(FirstName) - 1)) AS Propercase /* Output: 'Mateusz' */
    +

    However, it will not work with complex (like names with a hyphen in the middle) or multi-word values. The standard SQL solution - User Defined Function - doesn't work in a limited Salesforce Marketing Cloud SQL environment. The alternative - using CHARINDEX/PATINDEX to find each word - gets awful as soon as you hit three words and more.

    +

    Recommended approach? Either clean the data before ingestion to SFMC or do it directly in the email with the built-in AMPScript ProperCase function.

    +

    FORMAT with Strings

    +

    FORMAT function lets you quickly change the data into a different format. In Salesforce Marketing Cloud, it is especially useful, as you cannot create your functions. FORMAT might save you massive headaches.

    +

    The FORMAT works only with datetime and numeric values. Why I'm writing about it here then? Because you can use CONVERT function to change some of your strings into compliant data types. Consider changing string dates into datetime or phone numbers into integers to format them easily. Check out FORMAT with Dates and FORMAT with Numbers for more information. The outcome of formatting both number and date types with this function is a string.

    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-style-guide/index.html b/docs/sql/sfmc-sql-style-guide/index.html index 5ae73e708..a8a0f4cba 100644 --- a/docs/sql/sfmc-sql-style-guide/index.html +++ b/docs/sql/sfmc-sql-style-guide/index.html @@ -1,22 +1,152 @@ - + - -SFMC SQL Style Guide | Mateusz Dąbrowski + +SFMC SQL Style Guide | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Style Guide

    Query with style. Readable, bug-free code is a few shifts & spaces away.

    First things first: this Salesforce Marketing Cloud SQL style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:

    1. Be consistent across your codebase.
    2. Strive for good readability.

    Everything else is preference. And you are just about to learn about mine.

    Letter Case

    SQL gives you much freedom regarding the type of letter case you will be using for parts of your query. Let's use this freedom to create queries that are readable and aligned in convention to other Marketing Cloud programmatic languages operating on the same data.

    SQL Syntax Case

    Use UPPERCASE for all elements of SQL syntax.

    This approach helps visually differentiate query language from Tables (data extensions, data views) and Columns (fields) to improve readability.

    /* ✅ Upper Case for SQL Syntax */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    /* ❌ Pascal Case for SQL Syntax */
    Select
    SubscriberKey
    , EmailAddress
    From Ent._Subscribers
    Where DateJoined >= DateAdd(Month, -1, GetDate())

    /* ❌ Lower Case for SQL Syntax */
    select
    SubscriberKey
    , EmailAddress
    from Ent._Subscribers
    where DateJoined >= dateadd(month, -1, getdate())

    Column & Table Names Case

    Use PascalCase for all Table and Column names.

    Treat it as a soft recommendation, as it is highly connected to your organisation's conventions. If other connected systems are using a different style, it might be best to follow it in Marketing Cloud.

    It is especially true for Tables, as you might be using mixed convention leveraging lowercase, uppercase and underscores for Data Extension names. However, try not to use hyphens, as those will require you to use square brackets around the name and might interfere in query syntax highlighting, leading to worse readability.

    The most popular SQL convention for Table and Column names is snake_case. However, in Marketing Cloud, the Table and Column names will share the case between your queries and the User Interface. It is essential to make them as readable and human friendly as possible. Additionally, in many cases, you will also leverage those names in AMPScript and SSJS.

    Due to the above, I believe PascalCase - especially for Column names - is the best choice for Marketing Cloud SQL.

    /* ✅ Pascal Case for Table and Column names */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ✅ Pascal Case for Column names and custom consistent covention for Table names */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WEL_WelcomeCampaignSegment_20201011_OTH AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ❌ Lower Case for Table and Column names */
    SELECT
    wel.subscriberkey
    , wel.emailaddress
    , o.eventdate AS opendate
    FROM welcomecampaignsegment AS wel
    INNER JOIN _open AS o
    ON o.subscriberkey = wel.subscriberkey

    /* ❌ Upper Case for Table and Column names */
    SELECT
    WEL.SUBSCRIBERKEY
    , WEL.EMAILADDRESS
    , O.EVENTDATE AS OPENDATE
    FROM WELCOMECAMPAIGNSEGMENT AS WEL
    INNER JOIN _OPEN AS O
    ON O.SUBSCRIBERKEY = WEL.SUBSCRIBERKEY
    You Should Know

    If you want to make your Style Guide even safer, you can decide on writing all Columns and Table names in square brackets. As Marketing Cloud is not checking whether you use SQL's reserved keywords, this approach will protect you from potential silent issue. The cost, however, is much more characters and less readable queries.

    You need to decide how hard you want to leverage the square brackets
    SELECT
    [wel].[SubscriberKey]
    , [wel].[EmailAddress]
    , [o].[EventDate] AS [OpenDate]
    FROM [WelcomeCampaignSegment] AS [wel]
    INNER JOIN [_Open] AS [o]
    ON [o].[SubscriberKey] = [wel].[SubscriberKey]

    Alignment and Indentation

    SQL is very flexible when it comes to alignment and indentation of the query. Writing everything in one line creates a valid code that will run. But just because it is correct, it doesn't mean it is good. Generous use of new lines and indents has close to no impact on performance but a massive impact on readability. Enter and Space keys are your friends.

    There are many styles out there, and I decided to follow those that merge good writing speed with excellent readability.

    Single Information per Line

    Limit information per line to one.

    I recommend keeping one information per line, as it allows for much easier scanning. The four most important examples of this approach are:

    1. Each SELECT Column in a separate line
    2. Each WHERE condition in a separate line
    3. Each CASE condition in a separate line
    4. Each JOIN and ON relationship in a separate line
    /* ✅ Single information per line  */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    ELSE 0
    END

    /* ❌ Multiple pieces of information per line */
    SELECT s.SubscriberKey AS SubscriberKey, j.EmailName AS EmailName, s.EventDate AS SentDate, j.DeliveredTime AS DeliveryDate, o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j ON j.JobID = s.JobID
    LEFT JOIN _Open AS o ON o.JobID = s.JobID AND o.ListID = s.ListID AND o.BatchID = s.BatchID AND o.SubscriberID = s.SubscriberID AND o.IsUnique = 1
    WHERE 1 = CASE WHEN j.EmailName LIKE 'UPS_%' THEN 1 WHEN j.EmailName LIKE 'CRS_%' THEN 1 ELSE 0 END

    As you can see, the SELECT and WHERE keywords have their separate line to mark respective block starting. For readability reasons, I make an exception if there is only one Column or condition to be used:

    /* ✅ Single Column in SELECT and single condition in WHERE lines */
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE Domain = 'mateuszdabrowski.pl'

    /* ❌ Separate lines with single SELECT Column and WHERE condition */
    SELECT
    SubscriberKey
    FROM _Subscribers
    WHERE
    Domain = 'mateuszdabrowski.pl'
    You Should Know

    If you are using DISTINCT or TOP, put it into the same line as SELECT. In such a case, even if you work on a single Column, move it to a separate row for better readability.

    /* ✅ Single Column in SELECT and single condition in WHERE lines */
    SELECT DISTINCT TOP 10
    SubscriberKey
    FROM ContenstSubmissions

    /* ❌ Separate lines for single SELECT Column and WHERE condition */
    SELECT DISTINCT TOP 10 SubscriberKey
    FROM ContenstSubmissions

    Left Aligned Keywords

    Align main SQL keywords to the left.

    This rule focuses on writing speed. While I prefer the Vertically Aligned Space approach's aesthetics, I don't see any significant readability gains. On the other hand, writing in this style in Marketing Cloud is a pain, as there is no autoformatter supporting it in the Query Studio or Query Activity. We would have to add all those additional spaces manually. It's just not worth it.

    /* ✅ Left Aligned Keywords */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    /* ❌ Post Keyword Space Aligned Vertically */
    SELECT SubscriberKey,
    EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    Consistent Indentation

    Use indentation to highlight SQL keyword relationships.

    This rule focuses on readability. The logic, in short, is to indent whenever the line is dependent on the previous line (child line), for example:

    • Selected Column Names are children of SELECT
    • JOIN keywords are children of the initial Table referenced with FROM
    • Joining relationships (ON) are children of JOIN
    • Case conditions are children of the CASE
    • Where conditions are children of the WHERE
    • Sub-queries follow the same rules in respective indentation level.

    For simplicity I use 4-spaces indent, as it is both standard and can be added in Marketing Cloud Query with a single click of the Tab key.

    /* ✅ Dependency based indentation */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    ELSE 0
    END

    /* ❌ Lack of indentation */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j ON j.JobID = s.JobID
    LEFT JOIN _Open AS o ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE 1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    ELSE 0
    END

    Intentional Spacing

    Use spaces wherever it makes the query more readable.

    The must-have is spacing around any operators (equality or comparison) and after commas.

    However, there is another place where spacing is beneficial for readability but might require an exception in some scenarios. Spacing for aliases and THEN keywords of the CASE statement.

    I try to use it whenever possible, but when there is huge imbalance in length (for example one Column requires multi-function calculation or there is a single complex WHEN in CASE) equal spacing might make the query harder to read. Always decide which approach works best for your query from readability perspective.

    /* ✅ Spacing around operators plus equalizing aliases and THEN */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    WHEN j.EmailName = 'OTH_SeedList' THEN 1
    ELSE 0
    END

    /* ✅ Spacing around operators plus equalizing aliases with exceptions */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    , DATEDIFF(HOUR, s.EventDate, o.EventDate) AS TimeToOpen
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' OR j.EmailName LIKE 'CRS_%' THEN 1
    WHEN j.EmailName = 'OTH_SeedList' THEN 1
    ELSE 0
    END

    /* ❌ Lack of spacing */
    SELECT
    s.SubscriberKey AS SubscriberKey
    ,j.EmailName AS EmailName
    ,s.EventDate AS SentDate
    ,j.DeliveredTime AS DeliveryDate
    ,o.EventDate AS OpenDate
    ,DATEDIFF(HOUR,s.EventDate,o.EventDate) AS TimeToOpen
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID=s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID=s.JobID
    AND o.ListID=s.ListID
    AND o.BatchID=s.BatchID
    AND o.SubscriberID=s.SubscriberID
    AND o.IsUnique=1
    WHERE
    1=CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    WHEN j.EmailName='OTH_SeedList' THEN 1
    ELSE 0
    END

    Commas Placement

    Use commas at the beginning of the line.

    There are few approaches related to comma placement. Initially, I favoured commas at the end of the line, as I found them more accessible to use due to their similarity to natural language. However, there are strong reasons to use the comma at the beginning of the line. Here is what convinced me to change my style:

    1. Adding or deleting a Column requires a change in only one line. It's easier, faster and minimises the risk of a crash due to the trailing comma.
    2. Above is also very beneficial during difference checking and when leveraging git for query version control. With a comma at the beginning of the line, the Column addition or deletion is displayed correctly as a single line change.
    3. Having a comma in the beginning makes it easier to assess where a new Column definition starts quickly. It is a vast readability improvement when you are using more complex structures, like CASE in SELECT.
    4. It's also easier to quickly assess whether you have a comma for each Column. With lines of various length, it is much harder with the comma at the end.

    For the sake of readability, I indent the first Column by two spaces so that it is in line with the following ones. Similarly, I indent END after CASE in SELECT by two spaces for the same reason.

    /* ✅ Commas at the beginning */
    SELECT
    SubscriberKey
    , EmailAddress
    , DateJoined
    FROM Ent._Subscribers

    /* ❌ Commas in the end */
    SELECT
    SubscriberKey,
    EmailAddress,
    DateJoined
    FROM Ent._Subscribers

    Explicit vs Implicit

    Many things in SQL can be done in multiple ways - using various functions, symbols or shortcuts. While all those options may work, not all are a good idea. Whenever you are choosing the approach, go for the explicit and straightforward. Even if it means writing a few characters more.

    Date Parts

    Use full Date Parts names.

    Yes, abbreviations let you save few characters, but they kill the readability unless someone is fluent in those shortcuts. For Marketing Cloud purposes, the time saved during writing is not worth the time lost when reading. Go with the full version.

    /* ✅ Full Date Part */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    /* ❌ Abbreviated Date Part */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(M, -1, GETDATE())

    JOIN and ON

    Use INNER JOIN name and reference Column from the new Table first after ON.

    Instead of just JOIN, write INNER JOIN - it's longer but explicit and in line with the rest of JOIN keywords. It makes it easier to scan queries with multiple various JOIN statements.

    Additionally, when defining JOIN relationships after ON, firstly reference the Column from the joined Table. The previous Table should be on the right side. It will improve consistency and reading speed.

    /* ✅ Explicit Inner Join and Column from new Table on the left side of the ON condition */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ❌ Implicit Inner Join and Column from new Table on the right side of the ON condition */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    JOIN _Open AS o
    ON wel.SubscriberKey = o.SubscriberKey

    Table Aliases

    When using JOIN, add meaningful aliases for Tables and prefix all Columns with them.

    There are a few points:

    1. If you are working on only one Table without JOIN - don't use aliases at all. They are not needed and would make the query less readable.
    2. If you have any JOIN - always use aliases and prefixes. SQL doesn't always require it, but it is much easier to read the query when the Columns have an explicit Table mention in the prefix.
    3. When you create an alias for a Table, make it meaningful. Using subsequent letters of the alphabet is not a good idea. Instead, use something that will remind the reader of the full name - for example, abbreviation using the first letter of each word in the Table. It will allow for much easier reading.
    4. Always use AS keyword between the Table name and the alias.
    /* ✅ No aliasing in single Table query */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers

    /* ❌ Aliasing in single Table query */
    SELECT
    s.SubscriberKey
    , s.EmailAddress
    FROM Ent._Subscribers AS s

    /* ✅ Meaningful aliasing and prefixes in multi Table query */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ❌ No aliasing and no prefix in multi Table query */
    SELECT
    SubscriberKey
    , EmailAddress
    , EventDate AS OpenDate
    FROM WelcomeCampaignSegment
    INNER JOIN _Open
    ON _Open.SubscriberKey = WelcomeCampaignSegment.SubscriberKey

    /* ❌ Not meaningful aliasing and no AS keyword in multi Table query */
    SELECT
    a.SubscriberKey
    , a.EmailAddress
    , b.EventDate AS OpenDate
    FROM WelcomeCampaignSegment a
    INNER JOIN _Open b
    ON a.SubscriberKey = b.SubscriberKey

    Not Equal To Symbol

    Use != instead of <>.

    The != symbol is much more popular and used in many languages. Using it makes the query more readable to people not experienced in SQL.

    /* ✅ Use of != for negation */
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE CONVERT(DATE, DateJoined) != CONVERT(DATE, GETDATE())

    /* ❌ Use of <> for negation */
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE CONVERT(DATE, DateJoined) <> CONVERT(DATE, GETDATE())

    Meaningful Column Names

    Use Column names that suggest the data type.

    Just as with a letter case, you might have your hands tied by cross-system dependencies. But whenever possible, strive for meaningful names:

    1. Use descriptive Column names. It is better to have a long explicit one (IsTrackingSuppressed) than a short mysterious abbreviation (trk).
    2. When the Column is a boolean, prefix it with Is (or Has/Does depending on the underlying data).
    3. When the Column is a date, suffix it with Date.
    /* ✅ Meaningful and consistent Column Names */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    , j.SuppressTracking AS IsTrackingSuppressed
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID

    /* ❌ No consistency and type alignment in Column Names */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryTime
    , o.EventDate AS OpenedAt
    , j.SuppressTracking AS SuppressTracking
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID

    Sum Up

    It is a long article, so let's gather all the recommendations in one place:

    1. Be consistent
    2. Strive for readability
    3. Use comments to provide required context to your query
    4. Use UPPERCASE for SQL syntax 🔗
    5. Use PascalCase for Table & Column names 🔗
    6. Limit information per line to one 🔗
    7. Align main SQL keywords to the left 🔗
    8. Use indentation to highlight the relationship between SQL keywords 🔗
    9. Use spaces wherever it makes the query more readable 🔗
    10. Use commas at the beginning of the line 🔗
    11. Use full Date Parts names 🔗
    12. Use INNER JOIN name over JOIN 🔗
    13. In JOIN ON reference Column from newly joined Table on the left 🔗
    14. When using JOIN, add meaningful aliases for Tables and prefix all Columns 🔗
    15. Always use AS keyword between the Table name and the alias 🔗
    16. Use != instead of <> 🔗
    17. Use Column names that suggest the data type 🔗

    If you want to share something I'm missing or have arguments for a different recommendation - let me know.

    Looking for more Marketing Cloud style? Check out my:

    - - +

    SFMC SQL Style Guide

    Query with style. Readable, bug-free code is a few shifts & spaces away.

    +

    First things first: this Salesforce Marketing Cloud SQL style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:

    +
      +
    1. Be consistent across your codebase.
    2. +
    3. Strive for good readability.
    4. +
    +

    Everything else is preference. And you are just about to learn about mine.

    +

    Letter Case

    +

    SQL gives you much freedom regarding the type of letter case you will be using for parts of your query. Let's use this freedom to create queries that are readable and aligned in convention to other Marketing Cloud programmatic languages operating on the same data.

    +

    SQL Syntax Case

    +

    Use UPPERCASE for all elements of SQL syntax.

    +

    This approach helps visually differentiate query language from Tables (data extensions, data views) and Columns (fields) to improve readability.

    +
    /* ✅ Upper Case for SQL Syntax */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    /* ❌ Pascal Case for SQL Syntax */
    Select
    SubscriberKey
    , EmailAddress
    From Ent._Subscribers
    Where DateJoined >= DateAdd(Month, -1, GetDate())

    /* ❌ Lower Case for SQL Syntax */
    select
    SubscriberKey
    , EmailAddress
    from Ent._Subscribers
    where DateJoined >= dateadd(month, -1, getdate())
    +

    Column & Table Names Case

    +

    Use PascalCase for all Table and Column names.

    +

    Treat it as a soft recommendation, as it is highly connected to your organisation's conventions. If other connected systems are using a different style, it might be best to follow it in Marketing Cloud.

    +

    It is especially true for Tables, as you might be using mixed convention leveraging lowercase, uppercase and underscores for Data Extension names. However, try not to use hyphens, as those will require you to use square brackets around the name and might interfere in query syntax highlighting, leading to worse readability.

    +

    The most popular SQL convention for Table and Column names is snake_case. However, in Marketing Cloud, the Table and Column names will share the case between your queries and the User Interface. It is essential to make them as readable and human friendly as possible. Additionally, in many cases, you will also leverage those names in AMPScript and SSJS.

    +

    Due to the above, I believe PascalCase - especially for Column names - is the best choice for Marketing Cloud SQL.

    +
    /* ✅ Pascal Case for Table and Column names */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ✅ Pascal Case for Column names and custom consistent covention for Table names */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WEL_WelcomeCampaignSegment_20201011_OTH AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ❌ Lower Case for Table and Column names */
    SELECT
    wel.subscriberkey
    , wel.emailaddress
    , o.eventdate AS opendate
    FROM welcomecampaignsegment AS wel
    INNER JOIN _open AS o
    ON o.subscriberkey = wel.subscriberkey

    /* ❌ Upper Case for Table and Column names */
    SELECT
    WEL.SUBSCRIBERKEY
    , WEL.EMAILADDRESS
    , O.EVENTDATE AS OPENDATE
    FROM WELCOMECAMPAIGNSEGMENT AS WEL
    INNER JOIN _OPEN AS O
    ON O.SUBSCRIBERKEY = WEL.SUBSCRIBERKEY
    +
    You Should Know

    If you want to make your Style Guide even safer, you can decide on writing all Columns and Table names in square brackets. As Marketing Cloud is not checking whether you use SQL's reserved keywords, this approach will protect you from potential silent issue. The cost, however, is much more characters and less readable queries.

    You need to decide how hard you want to leverage the square brackets
    SELECT
    [wel].[SubscriberKey]
    , [wel].[EmailAddress]
    , [o].[EventDate] AS [OpenDate]
    FROM [WelcomeCampaignSegment] AS [wel]
    INNER JOIN [_Open] AS [o]
    ON [o].[SubscriberKey] = [wel].[SubscriberKey]
    +
    +

    Alignment and Indentation

    +

    SQL is very flexible when it comes to alignment and indentation of the query. Writing everything in one line creates a valid code that will run. But just because it is correct, it doesn't mean it is good. Generous use of new lines and indents has close to no impact on performance but a massive impact on readability. Enter and Space keys are your friends.

    +

    There are many styles out there, and I decided to follow those that merge good writing speed with excellent readability.

    +

    Single Information per Line

    +

    Limit information per line to one.

    +

    I recommend keeping one information per line, as it allows for much easier scanning. The four most important examples of this approach are:

    +
      +
    1. Each SELECT Column in a separate line
    2. +
    3. Each WHERE condition in a separate line
    4. +
    5. Each CASE condition in a separate line
    6. +
    7. Each JOIN and ON relationship in a separate line
    8. +
    +
    /* ✅ Single information per line  */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    ELSE 0
    END

    /* ❌ Multiple pieces of information per line */
    SELECT s.SubscriberKey AS SubscriberKey, j.EmailName AS EmailName, s.EventDate AS SentDate, j.DeliveredTime AS DeliveryDate, o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j ON j.JobID = s.JobID
    LEFT JOIN _Open AS o ON o.JobID = s.JobID AND o.ListID = s.ListID AND o.BatchID = s.BatchID AND o.SubscriberID = s.SubscriberID AND o.IsUnique = 1
    WHERE 1 = CASE WHEN j.EmailName LIKE 'UPS_%' THEN 1 WHEN j.EmailName LIKE 'CRS_%' THEN 1 ELSE 0 END
    +

    As you can see, the SELECT and WHERE keywords have their separate line to mark respective block starting. For readability reasons, I make an exception if there is only one Column or condition to be used:

    +
    /* ✅ Single Column in SELECT and single condition in WHERE lines */
    SELECT SubscriberKey
    FROM _Subscribers
    WHERE Domain = 'mateuszdabrowski.pl'

    /* ❌ Separate lines with single SELECT Column and WHERE condition */
    SELECT
    SubscriberKey
    FROM _Subscribers
    WHERE
    Domain = 'mateuszdabrowski.pl'
    +
    You Should Know

    If you are using DISTINCT or TOP, put it into the same line as SELECT. In such a case, even if you work on a single Column, move it to a separate row for better readability.

    /* ✅ Single Column in SELECT and single condition in WHERE lines */
    SELECT DISTINCT TOP 10
    SubscriberKey
    FROM ContenstSubmissions

    /* ❌ Separate lines for single SELECT Column and WHERE condition */
    SELECT DISTINCT TOP 10 SubscriberKey
    FROM ContenstSubmissions
    +

    Left Aligned Keywords

    +

    Align main SQL keywords to the left.

    +

    This rule focuses on writing speed. While I prefer the Vertically Aligned Space approach's aesthetics, I don't see any significant readability gains. On the other hand, writing in this style in Marketing Cloud is a pain, as there is no autoformatter supporting it in the Query Studio or Query Activity. We would have to add all those additional spaces manually. It's just not worth it.

    +
    /* ✅ Left Aligned Keywords */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    /* ❌ Post Keyword Space Aligned Vertically */
    SELECT SubscriberKey,
    EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())
    +

    Consistent Indentation

    +

    Use indentation to highlight SQL keyword relationships.

    +

    This rule focuses on readability. The logic, in short, is to indent whenever the line is dependent on the previous line (child line), for example:

    +
      +
    • Selected Column Names are children of SELECT
    • +
    • JOIN keywords are children of the initial Table referenced with FROM
    • +
    • Joining relationships (ON) are children of JOIN
    • +
    • Case conditions are children of the CASE
    • +
    • Where conditions are children of the WHERE
    • +
    • Sub-queries follow the same rules in respective indentation level.
    • +
    +

    For simplicity I use 4-spaces indent, as it is both standard and can be added in Marketing Cloud Query with a single click of the Tab key.

    +
    /* ✅ Dependency based indentation */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    ELSE 0
    END

    /* ❌ Lack of indentation */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j ON j.JobID = s.JobID
    LEFT JOIN _Open AS o ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE 1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    ELSE 0
    END
    +

    Intentional Spacing

    +

    Use spaces wherever it makes the query more readable.

    +

    The must-have is spacing around any operators (equality or comparison) and after commas.

    +

    However, there is another place where spacing is beneficial for readability but might require an exception in some scenarios. Spacing for aliases and THEN keywords of the CASE statement.

    +

    I try to use it whenever possible, but when there is huge imbalance in length (for example one Column requires multi-function calculation or there is a single complex WHEN in CASE) equal spacing might make the query harder to read. Always decide which approach works best for your query from readability perspective.

    +
    /* ✅ Spacing around operators plus equalizing aliases and THEN */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    WHEN j.EmailName = 'OTH_SeedList' THEN 1
    ELSE 0
    END

    /* ✅ Spacing around operators plus equalizing aliases with exceptions */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    , DATEDIFF(HOUR, s.EventDate, o.EventDate) AS TimeToOpen
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    WHERE
    1 = CASE
    WHEN j.EmailName LIKE 'UPS_%' OR j.EmailName LIKE 'CRS_%' THEN 1
    WHEN j.EmailName = 'OTH_SeedList' THEN 1
    ELSE 0
    END

    /* ❌ Lack of spacing */
    SELECT
    s.SubscriberKey AS SubscriberKey
    ,j.EmailName AS EmailName
    ,s.EventDate AS SentDate
    ,j.DeliveredTime AS DeliveryDate
    ,o.EventDate AS OpenDate
    ,DATEDIFF(HOUR,s.EventDate,o.EventDate) AS TimeToOpen
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID=s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID=s.JobID
    AND o.ListID=s.ListID
    AND o.BatchID=s.BatchID
    AND o.SubscriberID=s.SubscriberID
    AND o.IsUnique=1
    WHERE
    1=CASE
    WHEN j.EmailName LIKE 'UPS_%' THEN 1
    WHEN j.EmailName LIKE 'CRS_%' THEN 1
    WHEN j.EmailName='OTH_SeedList' THEN 1
    ELSE 0
    END
    +

    Commas Placement

    +

    Use commas at the beginning of the line.

    +

    There are few approaches related to comma placement. Initially, I favoured commas at the end of the line, as I found them more accessible to use due to their similarity to natural language. However, there are strong reasons to use the comma at the beginning of the line. Here is what convinced me to change my style:

    +
      +
    1. Adding or deleting a Column requires a change in only one line. It's easier, faster and minimises the risk of a crash due to the trailing comma.
    2. +
    3. Above is also very beneficial during difference checking and when leveraging git for query version control. With a comma at the beginning of the line, the Column addition or deletion is displayed correctly as a single line change.
    4. +
    5. Having a comma in the beginning makes it easier to assess where a new Column definition starts quickly. It is a vast readability improvement when you are using more complex structures, like CASE in SELECT.
    6. +
    7. It's also easier to quickly assess whether you have a comma for each Column. With lines of various length, it is much harder with the comma at the end.
    8. +
    +

    For the sake of readability, I indent the first Column by two spaces so that it is in line with the following ones. Similarly, I indent END after CASE in SELECT by two spaces for the same reason.

    +
    /* ✅ Commas at the beginning */
    SELECT
    SubscriberKey
    , EmailAddress
    , DateJoined
    FROM Ent._Subscribers

    /* ❌ Commas in the end */
    SELECT
    SubscriberKey,
    EmailAddress,
    DateJoined
    FROM Ent._Subscribers
    +
    +

    Explicit vs Implicit

    +

    Many things in SQL can be done in multiple ways - using various functions, symbols or shortcuts. While all those options may work, not all are a good idea. Whenever you are choosing the approach, go for the explicit and straightforward. Even if it means writing a few characters more.

    +

    Date Parts

    +

    Use full Date Parts names.

    +

    Yes, abbreviations let you save few characters, but they kill the readability unless someone is fluent in those shortcuts. For Marketing Cloud purposes, the time saved during writing is not worth the time lost when reading. Go with the full version.

    +
    /* ✅ Full Date Part */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(MONTH, -1, GETDATE())

    /* ❌ Abbreviated Date Part */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers
    WHERE DateJoined >= DATEADD(M, -1, GETDATE())
    +

    JOIN and ON

    +

    Use INNER JOIN name and reference Column from the new Table first after ON.

    +

    Instead of just JOIN, write INNER JOIN - it's longer but explicit and in line with the rest of JOIN keywords. It makes it easier to scan queries with multiple various JOIN statements.

    +

    Additionally, when defining JOIN relationships after ON, firstly reference the Column from the joined Table. The previous Table should be on the right side. It will improve consistency and reading speed.

    +
    /* ✅ Explicit Inner Join and Column from new Table on the left side of the ON condition */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ❌ Implicit Inner Join and Column from new Table on the right side of the ON condition */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    JOIN _Open AS o
    ON wel.SubscriberKey = o.SubscriberKey
    +

    Table Aliases

    +

    When using JOIN, add meaningful aliases for Tables and prefix all Columns with them.

    +

    There are a few points:

    +
      +
    1. If you are working on only one Table without JOIN - don't use aliases at all. They are not needed and would make the query less readable.
    2. +
    3. If you have any JOIN - always use aliases and prefixes. SQL doesn't always require it, but it is much easier to read the query when the Columns have an explicit Table mention in the prefix.
    4. +
    5. When you create an alias for a Table, make it meaningful. Using subsequent letters of the alphabet is not a good idea. Instead, use something that will remind the reader of the full name - for example, abbreviation using the first letter of each word in the Table. It will allow for much easier reading.
    6. +
    7. Always use AS keyword between the Table name and the alias.
    8. +
    +
    /* ✅ No aliasing in single Table query */
    SELECT
    SubscriberKey
    , EmailAddress
    FROM Ent._Subscribers

    /* ❌ Aliasing in single Table query */
    SELECT
    s.SubscriberKey
    , s.EmailAddress
    FROM Ent._Subscribers AS s

    /* ✅ Meaningful aliasing and prefixes in multi Table query */
    SELECT
    wel.SubscriberKey
    , wel.EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* ❌ No aliasing and no prefix in multi Table query */
    SELECT
    SubscriberKey
    , EmailAddress
    , EventDate AS OpenDate
    FROM WelcomeCampaignSegment
    INNER JOIN _Open
    ON _Open.SubscriberKey = WelcomeCampaignSegment.SubscriberKey

    /* ❌ Not meaningful aliasing and no AS keyword in multi Table query */
    SELECT
    a.SubscriberKey
    , a.EmailAddress
    , b.EventDate AS OpenDate
    FROM WelcomeCampaignSegment a
    INNER JOIN _Open b
    ON a.SubscriberKey = b.SubscriberKey
    +

    Not Equal To Symbol

    +

    Use != instead of <>.

    +

    The != symbol is much more popular and used in many languages. Using it makes the query more readable to people not experienced in SQL.

    +
    /* ✅ Use of != for negation */
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE CONVERT(DATE, DateJoined) != CONVERT(DATE, GETDATE())

    /* ❌ Use of <> for negation */
    SELECT SubscriberKey
    FROM Ent._Subscribers
    WHERE CONVERT(DATE, DateJoined) <> CONVERT(DATE, GETDATE())
    +

    Meaningful Column Names

    +

    Use Column names that suggest the data type.

    +

    Just as with a letter case, you might have your hands tied by cross-system dependencies. But whenever possible, strive for meaningful names:

    +
      +
    1. Use descriptive Column names. It is better to have a long explicit one (IsTrackingSuppressed) than a short mysterious abbreviation (trk).
    2. +
    3. When the Column is a boolean, prefix it with Is (or Has/Does depending on the underlying data).
    4. +
    5. When the Column is a date, suffix it with Date.
    6. +
    +
    /* ✅ Meaningful and consistent Column Names */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    , j.SuppressTracking AS IsTrackingSuppressed
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID

    /* ❌ No consistency and type alignment in Column Names */
    SELECT
    s.SubscriberKey AS SubscriberKey
    , j.EmailName AS EmailName
    , s.EventDate AS SentDate
    , j.DeliveredTime AS DeliveryTime
    , o.EventDate AS OpenedAt
    , j.SuppressTracking AS SuppressTracking
    FROM _Sent AS s
    LEFT JOIN _Job AS j
    ON j.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    +

    Sum Up

    +

    It is a long article, so let's gather all the recommendations in one place:

    +
      +
    1. Be consistent
    2. +
    3. Strive for readability
    4. +
    5. Use comments to provide required context to your query
    6. +
    7. Use UPPERCASE for SQL syntax 🔗
    8. +
    9. Use PascalCase for Table & Column names 🔗
    10. +
    11. Limit information per line to one 🔗
    12. +
    13. Align main SQL keywords to the left 🔗
    14. +
    15. Use indentation to highlight the relationship between SQL keywords 🔗
    16. +
    17. Use spaces wherever it makes the query more readable 🔗
    18. +
    19. Use commas at the beginning of the line 🔗
    20. +
    21. Use full Date Parts names 🔗
    22. +
    23. Use INNER JOIN name over JOIN 🔗
    24. +
    25. In JOIN ON reference Column from newly joined Table on the left 🔗
    26. +
    27. When using JOIN, add meaningful aliases for Tables and prefix all Columns 🔗
    28. +
    29. Always use AS keyword between the Table name and the alias 🔗
    30. +
    31. Use != instead of <> 🔗
    32. +
    33. Use Column names that suggest the data type 🔗
    34. +
    +

    If you want to share something I'm missing or have arguments for a different recommendation - let me know.

    +

    Looking for more Marketing Cloud style? Check out my:

    +
    \ No newline at end of file diff --git a/docs/sql/sfmc-sql-where/index.html b/docs/sql/sfmc-sql-where/index.html index 19c1cef4f..f602a9695 100644 --- a/docs/sql/sfmc-sql-where/index.html +++ b/docs/sql/sfmc-sql-where/index.html @@ -1,22 +1,75 @@ - + - -SFMC SQL Where | Mateusz Dąbrowski + +SFMC SQL Where | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Where

    Use WHERE to make your query lean and to the point. Less is more.

    With just SELECT and FROM statements, you can already start building your queries. With the addition of JOIN, you can do much more than in the Salesforce Marketing Cloud UI. WHERE grants you even more power by allowing you to filter your queries' outcomes.

    The concept behind it is straightforward. It takes all the results you obtained with the query above the WHERE, and for each, it applies one or more conditions. If they evaluate to TRUE - this particular result will be available in the output Data Extension. If evaluation ends with FALSE, WHERE will filter it out.

    All subscribers with domain equal to 'mateuszdabrowski.pl'
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Domain = 'mateuszdabrowski.pl'
    You Should Know

    WHERE statement is heavily impacted by NULL values - be sure to check dedicated guide on how to solve those issues.

    Basic operators

    In many scenarios, you will be using the basic operators in your WHERE clauses. In the example above, you already saw the equality operator (=). There are a few more available.

    OperatorDescription
    =Equal to
    != or <>Not equal to
    >Greater than
    <Less than
    >=Greater or equal to
    <=Less or equal to

    Equality operators

    Equality operators (=, !=) are great when you have a controlled value. Think booleans (for example Opt-in information) and picklists (for example Status field on _Subscribers System Data View that is limited to four values).

    All subscribers that do not have the unsubscribed status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Status != 'unsubscribed'

    Comparison operators

    Comparison operators (<, >, >=, <=) are perfect when you are operating on numbers (for example selecting contacts with low Customer Lifetime Value) or dates.

    All subscribers that joined within the last month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE CONVERT(DATE, DateJoined) >= DATEADD(MONTH, -1, CONVERT(DATE, GETUTCDATE()))

    With dates, you will frequently want to use a bit more complex structure for the comparison to work correctly. In this case, we are converting the DateJoined value to a simple date (day, month, year without the time). We are also getting a current date in UTC format and converting it to a simple date. Next, we subtract one month and compare it to the DateJoined transformed value. I cover more such examples in the SFMC SQL Date Functions.

    LIKE operator

    Another handy operator is LIKE. It allows you to leverage wildcards to search for matching records based on value fragment. You may know it from the SELECT CASE statement, but it is much more useful with WHERE. Think about filtering with just a part of the value (for example email domain in EmailAddress field) or with a single element within multi picklist (for instance finding one value within the comma-separated list of all purchased products).

    However, in the marketing automation world, the LIKE operator is handy for selecting contacts based on the multi-picklist columns. Consider ActiveSubscriptions field with any combination of values Phone, TV, or Internet.

    Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use equality operator (WHERE ActiveSubscription = 'Phone'), as it would return only contacts that have just this one subscription. However, some of your customers might have multiple (phone and tv or phone and internet plans). For SQL, a field containing 'Phone' is not equal to having a value of 'Phone', Internet'. LIKE operator is here to save the day.

    All subscribers that have at least Phone subscription
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE ActiveSubscription LIKE '%Phone%'

    It is also an excellent tool for database cleaning by finding incorrect values within automation. To learn more about the possibilities, check out the LIKE guide.

    Logical operators

    The WHERE statement supports standard logical operators - AND & OR.

    They allow you to create more fine-tuned filters evaluating either multiple values or a single value from various points of view. You can use as many ANDs and ORs as you want, but keep in mind the AutoKill 30 minute limit for query execution.

    All subscribers that have at least Phone subscription AND are in its twelfth month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    ActiveSubscription LIKE '%Phone%'
    AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))

    The standard order of execution evaluates the pairs joined by AND first and then considers the ones with OR. But you can use parentheses () to enforce your order:

    All subscribers that have at least either Phone OR Internet subscription AND are in its twelfth month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')
    AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))

    There are many use cases for using AND or OR. The most popular ones are filtering by range (numerical or date-based) and capturing records fulfilling at least one of multiple criteria. For both, there is an optional shorthand.

    BETWEEN shorthand

    Whenever you want to work on ranges, instead of binding >= & <= scopes (closed range) with AND, you can leverage BETWEEN statement.

    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')
    AND CONVERT(DATE, SubscriptionStart)
    BETWEEN DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))

    The BETWEEN is replacing only a range greater or equal to the first value and smaller or equal to the second value. Additionally, it behaves weird when working with dates or datetime values.

    For example: WHERE Date BETWEEN "01/01/2020" AND "31/01/2020" will work as if you wrote WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 00:00:00". It would result in a lack of data for the last day of the range. In most cases you would rather want WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 23:59:59".

    Due to the above, I recommended not use BETWEEN statement, unless you are sure the range is correct.

    IN shorthand

    There is another shorthand available - the IN statement. And it is much more interesting than the BETWEEN.

    It allows you to simplify WHERE statement with multiple OR operators (like WHERE Status = 'held' OR Status = 'unsubscribed' OR Status = 'bounced') by using a list of searched values:

    All subscribers with the unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Status IN ('held', 'unsubscribed', 'bounced')

    As you can see above, the syntax is much shorter and more readable.

    But the beauty of IN statement doesn't end there. It additionally optimizes the search speed by sorting the data and performing the binary search. Thanks to it, using IN instead of multiple ORs can lead to significant performance improvements.

    You Should Know

    Unfortunately, you cannot use IN statement together with LIKE statement. You need to use one or more OR operators for such use case.

    NOT operator

    Sometimes you want to rather exclude some records instead of searching for them. In many cases, you can do it by just adjusting the operators (for example != instead of =). There are, however, some situations where the NOT operator is the best tool for the job.

    It is especially apparent when working with LIKE, BETWEEN, IN and EXISTS operators.

    All subscribers NOT with unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Status NOT IN ('held', 'unsubscribed', 'bounced')
    All subscribers that have email address NOT ending with @mateuszdabrowski.pl
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE EmailAddress NOT LIKE '%@mateuszdabrowski.pl'

    CASE operator

    The CASE statement is not only useful in a SELECT part of the query. You can use it also within the WHERE. There are two approaches to do this.

    The first compare 1 to the outcome of the CASE statement that evaluates each of its conditions to either 1 or 0. If the comparison evaluates to WHERE 1 = 1 it will resolve to TRUE and return the result.

    All subscribers NOT with unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE
    1 = CASE Status
    WHEN 'active' THEN 1
    WHEN 'held' THEN 0
    WHEN 'unsubscribed' THEN 0
    WHEN 'bounced' THEN 0
    END

    It works, but you can write it better with other means mentioned above in most cases. This query was previously coded with single-line WHERE utilizing NOT IN statement.

    You Should Know

    You can do better even with the search version of CASE, as it allows you to use AND/OR/IN within the CASE:

    All subscribers NOT with unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE
    1 = CASE
    WHEN Status = 'active' THEN 1
    WHEN Status IN ('held', 'unsubscribed', 'bounced') THEN 0
    END

    Notice the lack of Status column name right after CASE keyword and its addition in each WHEN.

    The second approach compares a field to the CASE statement evaluation and is much more useful:

    All subscribers that have EmailAddress different from the Preferred Email
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    EmailAddress != CASE
    WHEN PreferredEmail = 'Personal Email' THEN PersonalEmail
    WHEN PreferredEmail = 'Work Email' THEN WorkEmail
    END

    It can still be written using multiple AND & OR statements, but it is shorter and more readable thanks to the CASE statement.

    You Should Know

    CASE statement returns THEN value of the first condition that evaluated to TRUE. It means that if in your query first condition is true, the rest will be ignored. Even if for the selected contact, all of them would be true.

    Always consider the order of the conditions in your CASE statement. It might lead to errors if you don't expect behaviour mentioned above, and make your life much easier if you know it works that way.

    To learn more about the possibilities and shorthands, check out the CASE guide.

    - - +

    SFMC SQL Where

    Use WHERE to make your query lean and to the point. Less is more.

    +

    With just SELECT and FROM statements, you can already start building your queries. With the addition of JOIN, you can do much more than in the Salesforce Marketing Cloud UI. WHERE grants you even more power by allowing you to filter your queries' outcomes.

    +

    The concept behind it is straightforward. It takes all the results you obtained with the query above the WHERE, and for each, it applies one or more conditions. If they evaluate to TRUE - this particular result will be available in the output Data Extension. If evaluation ends with FALSE, WHERE will filter it out.

    +
    All subscribers with domain equal to 'mateuszdabrowski.pl'
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Domain = 'mateuszdabrowski.pl'
    +
    You Should Know

    WHERE statement is heavily impacted by NULL values - be sure to check dedicated guide on how to solve those issues.

    +

    Basic operators

    +

    In many scenarios, you will be using the basic operators in your WHERE clauses. In the example above, you already saw the equality operator (=). There are a few more available.

    +
    OperatorDescription
    =Equal to
    != or <>Not equal to
    >Greater than
    <Less than
    >=Greater or equal to
    <=Less or equal to
    +

    Equality operators

    +

    Equality operators (=, !=) are great when you have a controlled value. Think booleans (for example Opt-in information) and picklists (for example Status field on _Subscribers System Data View that is limited to four values).

    +
    All subscribers that do not have the unsubscribed status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Status != 'unsubscribed'
    +

    Comparison operators

    +

    Comparison operators (<, >, >=, <=) are perfect when you are operating on numbers (for example selecting contacts with low Customer Lifetime Value) or dates.

    +
    All subscribers that joined within the last month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE CONVERT(DATE, DateJoined) >= DATEADD(MONTH, -1, CONVERT(DATE, GETUTCDATE()))
    +

    With dates, you will frequently want to use a bit more complex structure for the comparison to work correctly. In this case, we are converting the DateJoined value to a simple date (day, month, year without the time). We are also getting a current date in UTC format and converting it to a simple date. Next, we subtract one month and compare it to the DateJoined transformed value. I cover more such examples in the SFMC SQL Date Functions.

    +

    LIKE operator

    +

    Another handy operator is LIKE. It allows you to leverage wildcards to search for matching records based on value fragment. You may know it from the SELECT CASE statement, but it is much more useful with WHERE. Think about filtering with just a part of the value (for example email domain in EmailAddress field) or with a single element within multi picklist (for instance finding one value within the comma-separated list of all purchased products).

    +

    However, in the marketing automation world, the LIKE operator is handy for selecting contacts based on the multi-picklist columns. Consider ActiveSubscriptions field with any combination of values Phone, TV, or Internet.

    +

    Suppose you would like to select all contacts with active phone subscription. In that case, you shouldn't use equality operator (WHERE ActiveSubscription = 'Phone'), as it would return only contacts that have just this one subscription. However, some of your customers might have multiple (phone and tv or phone and internet plans). For SQL, a field containing 'Phone' is not equal to having a value of 'Phone', Internet'. LIKE operator is here to save the day.

    +
    All subscribers that have at least Phone subscription
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE ActiveSubscription LIKE '%Phone%'
    +

    It is also an excellent tool for database cleaning by finding incorrect values within automation. To learn more about the possibilities, check out the LIKE guide.

    +

    Logical operators

    +

    The WHERE statement supports standard logical operators - AND & OR.

    +

    They allow you to create more fine-tuned filters evaluating either multiple values or a single value from various points of view. You can use as many ANDs and ORs as you want, but keep in mind the AutoKill 30 minute limit for query execution.

    +
    All subscribers that have at least Phone subscription AND are in its twelfth month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    ActiveSubscription LIKE '%Phone%'
    AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))
    +

    The standard order of execution evaluates the pairs joined by AND first and then considers the ones with OR. But you can use parentheses () to enforce your order:

    +
    All subscribers that have at least either Phone OR Internet subscription AND are in its twelfth month
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')
    AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))
    +

    There are many use cases for using AND or OR. The most popular ones are filtering by range (numerical or date-based) and capturing records fulfilling at least one of multiple criteria. For both, there is an optional shorthand.

    +

    BETWEEN shorthand

    +

    Whenever you want to work on ranges, instead of binding >= & <= scopes (closed range) with AND, you can leverage BETWEEN statement.

    +
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    (ActiveSubscription LIKE '%Phone%' OR ActiveSubscription LIKE '%Internet%')
    AND CONVERT(DATE, SubscriptionStart)
    BETWEEN DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE()))
    AND DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()))
    +

    The BETWEEN is replacing only a range greater or equal to the first value and smaller or equal to the second value. Additionally, it behaves weird when working with dates or datetime values.

    +

    For example: WHERE Date BETWEEN "01/01/2020" AND "31/01/2020" will work as if you wrote WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 00:00:00". It would result in a lack of data for the last day of the range. In most cases you would rather want WHERE Date >= "01/01/2020 00:00:00" AND Date <= "31/01/2020 23:59:59".

    +

    Due to the above, I recommended not use BETWEEN statement, unless you are sure the range is correct.

    +

    IN shorthand

    +

    There is another shorthand available - the IN statement. And it is much more interesting than the BETWEEN.

    +

    It allows you to simplify WHERE statement with multiple OR operators (like WHERE Status = 'held' OR Status = 'unsubscribed' OR Status = 'bounced') by using a list of searched values:

    +
    All subscribers with the unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Status IN ('held', 'unsubscribed', 'bounced')
    +

    As you can see above, the syntax is much shorter and more readable.

    +

    But the beauty of IN statement doesn't end there. It additionally optimizes the search speed by sorting the data and performing the binary search. Thanks to it, using IN instead of multiple ORs can lead to significant performance improvements.

    +
    You Should Know

    Unfortunately, you cannot use IN statement together with LIKE statement. You need to use one or more OR operators for such use case.

    +

    NOT operator

    +

    Sometimes you want to rather exclude some records instead of searching for them. In many cases, you can do it by just adjusting the operators (for example != instead of =). There are, however, some situations where the NOT operator is the best tool for the job.

    +

    It is especially apparent when working with LIKE, BETWEEN, IN and EXISTS operators.

    +
    All subscribers NOT with unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE Status NOT IN ('held', 'unsubscribed', 'bounced')
    +
    All subscribers that have email address NOT ending with @mateuszdabrowski.pl
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE EmailAddress NOT LIKE '%@mateuszdabrowski.pl'
    +

    CASE operator

    +

    The CASE statement is not only useful in a SELECT part of the query. You can use it also within the WHERE. There are two approaches to do this.

    +

    The first compare 1 to the outcome of the CASE statement that evaluates each of its conditions to either 1 or 0. If the comparison evaluates to WHERE 1 = 1 it will resolve to TRUE and return the result.

    +
    All subscribers NOT with unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE
    1 = CASE Status
    WHEN 'active' THEN 1
    WHEN 'held' THEN 0
    WHEN 'unsubscribed' THEN 0
    WHEN 'bounced' THEN 0
    END
    +

    It works, but you can write it better with other means mentioned above in most cases. This query was previously coded with single-line WHERE utilizing NOT IN statement.

    +
    You Should Know

    You can do better even with the search version of CASE, as it allows you to use AND/OR/IN within the CASE:

    All subscribers NOT with unsubscribed, bounced or temporarily held status
    SELECT
    SubscriberKey
    , EmailAddress
    FROM _Subscribers
    WHERE
    1 = CASE
    WHEN Status = 'active' THEN 1
    WHEN Status IN ('held', 'unsubscribed', 'bounced') THEN 0
    END

    Notice the lack of Status column name right after CASE keyword and its addition in each WHEN.

    +

    The second approach compares a field to the CASE statement evaluation and is much more useful:

    +
    All subscribers that have EmailAddress different from the Preferred Email
    SELECT
    SubscriberKey
    , EmailAddress
    FROM MasterSubscriberDE
    WHERE
    EmailAddress != CASE
    WHEN PreferredEmail = 'Personal Email' THEN PersonalEmail
    WHEN PreferredEmail = 'Work Email' THEN WorkEmail
    END
    +

    It can still be written using multiple AND & OR statements, but it is shorter and more readable thanks to the CASE statement.

    +
    You Should Know

    CASE statement returns THEN value of the first condition that evaluated to TRUE. It means that if in your query first condition is true, the rest will be ignored. Even if for the selected contact, all of them would be true.

    Always consider the order of the conditions in your CASE statement. It might lead to errors if you don't expect behaviour mentioned above, and make your life much easier if you know it works that way.

    +

    To learn more about the possibilities and shorthands, check out the CASE guide.

    \ No newline at end of file diff --git a/docs/sql/snippets/sfmc-sql-debugging-email-sends/index.html b/docs/sql/snippets/sfmc-sql-debugging-email-sends/index.html index e3b185139..a91cadcb6 100644 --- a/docs/sql/snippets/sfmc-sql-debugging-email-sends/index.html +++ b/docs/sql/snippets/sfmc-sql-debugging-email-sends/index.html @@ -1,22 +1,85 @@ - + - -SFMC SQL Debugging Email Sends | Mateusz Dąbrowski + +SFMC SQL Debugging Email Sends | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with the Query Studio to the rescue.

    Problem with straightforward Email Send analysis

    Deliverability issues, unfortunately, are a standard both during the Salesforce Marketing Cloud implementation phase as well as after the go-live.

    The test you sent to yourself during the Marketing Cloud implementation that never arrived in the inbox. The subscriber that asks where is his newsletter with the promo code.

    You can try debugging it with Journey Builder data or Reports, but in most cases, those solutions provide either not enough or way too much for the specific check you need to make.

    Solution

    SELECT
    s.SubscriberKey AS SubscriberKey
    , sub.EmailAddress AS EmailAddress
    , sub.Status AS SubscriptionStatus
    , j.JourneyName AS JourneyName
    , j.VersionNumber AS JourneyVersion
    , job.EmailName AS EmailName
    , s.EventDate AS SentDate
    , job.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    , c.EventDate AS ClickDate
    , b.EventDate AS BounceDate
    , b.BounceCategory AS BounceCategory
    , b.BounceSubcategory AS BounceSubcategory
    , b.SMTPBounceReason AS BounceReason
    , u.EventDate AS UnsubscribeDate
    FROM _Sent AS s
    LEFT JOIN _Job AS job
    ON job.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    LEFT JOIN _Click AS c
    ON s.JobID = c.JobID
    AND c.ListID = s.ListID
    AND c.BatchID = s.BatchID
    AND c.SubscriberID = s.SubscriberID
    AND c.IsUnique = 1
    LEFT JOIN _Bounce AS b
    ON s.JobID = b.JobID
    AND b.ListID = s.ListID
    AND b.BatchID = s.BatchID
    AND b.SubscriberID = s.SubscriberID
    AND b.IsUnique = 1
    LEFT JOIN _Unsubscribe AS u
    ON s.JobID = u.JobID
    AND u.ListID = s.ListID
    AND u.BatchID = s.BatchID
    AND u.SubscriberID = s.SubscriberID
    AND u.IsUnique = 1
    LEFT JOIN _JourneyActivity AS ja
    ON ja.JourneyActivityObjectID = s.TriggererSendDefinitionObjectID
    LEFT JOIN _Journey AS j
    ON j.VersionID = ja.VersionID
    LEFT JOIN _Subscribers AS sub
    ON sub.SubscriberKey = s.SubscriberKey
    WHERE s.EventDate >= DATEADD(DAY, -1, GETDATE())

    Within a few seconds, you will see information about sends from the last day, with all the details that might be useful for debugging, like STMP Bounce Reason, Subscriber Status, Unsubscribe Date, etc.

    Wondering what to do with that data? Check out Email Send Debugging Step-by-Step section below.

    You Should Know

    If you are running it from the child Business Unit and do not see EmailAddress, BounceCount and Status, add the Ent. prefix to _Subscribers Data View name in the last JOIN. It will pull the data from _Subscribers of the parent Business Unit.

    Options

    You can even adapt the above query to better suit your needs.

    Change timeframe

    My default is checking the sends from the last day. You can change it by modifying the DATEADD function.

    Limit to a single subscriber

    If you are looking for a problem related to only one specific subscriber, you can add s.SubscriberKey = 'SubscriberKeyOfThatContact' or sub.EmailAddress = 'specific@email.address' to the WHERE statement. Or replace the current one not to be limited by the timeframe.

    Limit to a single domain

    If you see problems with deliverability for a particular user, I highly recommend checking whether other users from the same domain also have such issues. Maybe it is related to corporate server policy? Add sub.Domain = 'Recipients.Domain' to the WHERE statement. Or replace the current one not to be limited by the timeframe.

    Limit to a single email

    If the problem is related to just one email asset, you can limit your outcomes by adding job.EmailName = 'ProblematicEmailName' to the WHERE statement. Or replace the current one not to be limited by the timeframe.

    Limit to a single Journey

    If you want to focus on a single Journey, you can limit your outcomes by adding j.JourneyName = 'ProblematicJourneyName' to the WHERE statement. Or replace the current one not to be limited by the timeframe. You can also pinpoint it further by filtering on j.JourneyVersion.

    Limit to single engagement type

    If you are interested only in bounces and do not need any other sends, add b.IsUnique = 1 to the WHERE statement.

    You can use the same approach to output only opens or clicks by changing the prefix from b to the alias representing the needed System Data View.

    Email Send Debugging Step-by-Step

    Now you know the SFMC Email Send Debugging query in and out. But how to work with the outcomes? And what are the next steps?

    As they say, with great power comes great complexity. And that's definitely true for finding the root cause of the undelivered email. The deliverability by itself is already a beautiful mess, and then there are various features and options you can use directly in Salesforce Marketing Cloud. Let's dive in.

    You Should Know

    You don't have to follow the steps below in the same order as presented. You can mix and match them, as long as you leave the Support Ticket creation for when you tried all other options.

    I personally debug in that order because, while I wait for the Query Studio to return the output from query, I can check the following steps in parallel.

    1. Query System Data Views

    I like to start with the query described in this guide - filtered down to problematic subscriber - to get a high-level picture of the situation. Free Salesforce Query Studio is the best place to execute that little exploratory analysis.

    Once you see the outcome, there are few possibilities:

    • There is no data for that subscriber/send » It's time go to to the next step.
    • BounceDate is filled » Either the email is invalid (hence the bounce), or the recipient's inbox Admin blocked the email (they sometimes use fake bounces to fight spam - especially in enterprise B2B and public markets).
    • OpenDate or ClickDate is filled » It's time to compare their timestamps with DeliveryDate. If those are within a single second and there are no later subsequent opens/clicks, the email has been checked by an antispam bot and flagged for no delivery to the final recipient (again, B2B and Public). If the timestamps are spread out (especially engagement ones from the DeliveryDate), the email got delivered to the right person, and they just forgot or lost it.
    • DeliveryDate is filled » If there is no Bounce, Open or Click timestamps, but Delivery is filled in, the email should be in the subscriber's Spam folder or Promotions tab.
    • DeliveryDate is not filled » It's time go to to the next step.

    2. Check Send Log

    If System Data Views don't have the data or the DeliveryDate is not filled, the email hasn't reached the recipient's inbox. Time to investigate the Send Log.

    Check whether an ErrorCode column value is filled for the send and subscriber you are debugging.

    • There is no data for that subscriber/send » It's time go to to the next step.
    • ErrorCode is filled » Check the Error Code value meaning to find the root cause.
    • ErrorCode is not filled » The email was sent but not delivered to the recipient - you have deliverability issues. Check your configuration (From Address Management in SFMC + SPF/DKIM/DMARC in DNS) and deliverability metrics (Salesforce offers Reputation Audit Test and Sender Rating as features-on-demand).

    3. Check All Subscribers List

    If there is no trace of the send in System Data Views and Send Log, it means that Marketing Cloud was not able to attempt sending. There are few possible reasons for that. Let's start with potential subscriber issues by searching for problematic Contact in Email Studio All Subscribers.

    • There is no subscriber » The most probable reason is subscriber block by SFMC List Detective that protects your lists from nasty emails. What frequently trips people is that it scrubs various group addresses like admin@, info@ and more.
    • Subscriber Status is Unsubscribed or Held » Contact is not eligible for receiving the email. Should they want to get it - push them through the official subscription process to stay compliant.

    If you are sending through Journey Builder and in the Journey configuration selected to use Email Address from the Entry Source instead of Contacts, be sure to also check whether the Email Address field in the Data Extension selected for Entry stores correct email for that subscriber.

    4. Check Personalised Email Preview

    If everything was fine with the Subscriber, another option is an issue with the Email Asset. To check that, go to Content Builder, find the email, go to Preview and Test and select the subscriber in the same context as the one used for sending (for example, in the sendable Data Extension used as an Entry to the Journey). Check also a few other subscribers from the same place.

    • Email Preview errors out for all Subscribers » There is an issue with your email (probably with some programmatic content) that errored out during send.
    • Email Preview errors out only for that Subscriber » There is an issue with the personalisation data of that subscriber that clashes with your programmatic content.

    5. Check Suppressions and Exclusions

    If there are no errors within the Preview, the next potential culprit can be Exclusion or Suppression. There are quite a lot of them, and not all will be relevant for you, depending on the SFMC configuration and method of sending, so be sure to check applicable ones from the Exclusion List, Exclusion Script, Suppression List, Auto-Suppression List.

    6. Create Support Ticket

    If, after all those checks, there is still no answer to the root cause - create a Support Ticket. Sometimes, it can be a master unsubscribe, server-related queue build-up or a bug on the Marketing Cloud backend.

    Email Send Debugging Flowchart

    Prefer complex processes visualised? Got you covered:

    - - +

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with the Query Studio to the rescue.

    +

    Problem with straightforward Email Send analysis

    +

    Deliverability issues, unfortunately, are a standard both during the Salesforce Marketing Cloud implementation phase as well as after the go-live.

    +

    The test you sent to yourself during the Marketing Cloud implementation that never arrived in the inbox. The subscriber that asks where is his newsletter with the promo code.

    +

    You can try debugging it with Journey Builder data or Reports, but in most cases, those solutions provide either not enough or way too much for the specific check you need to make.

    +

    Solution

    +
    SELECT
    s.SubscriberKey AS SubscriberKey
    , sub.EmailAddress AS EmailAddress
    , sub.Status AS SubscriptionStatus
    , j.JourneyName AS JourneyName
    , j.VersionNumber AS JourneyVersion
    , job.EmailName AS EmailName
    , s.EventDate AS SentDate
    , job.DeliveredTime AS DeliveryDate
    , o.EventDate AS OpenDate
    , c.EventDate AS ClickDate
    , b.EventDate AS BounceDate
    , b.BounceCategory AS BounceCategory
    , b.BounceSubcategory AS BounceSubcategory
    , b.SMTPBounceReason AS BounceReason
    , u.EventDate AS UnsubscribeDate
    FROM _Sent AS s
    LEFT JOIN _Job AS job
    ON job.JobID = s.JobID
    LEFT JOIN _Open AS o
    ON o.JobID = s.JobID
    AND o.ListID = s.ListID
    AND o.BatchID = s.BatchID
    AND o.SubscriberID = s.SubscriberID
    AND o.IsUnique = 1
    LEFT JOIN _Click AS c
    ON s.JobID = c.JobID
    AND c.ListID = s.ListID
    AND c.BatchID = s.BatchID
    AND c.SubscriberID = s.SubscriberID
    AND c.IsUnique = 1
    LEFT JOIN _Bounce AS b
    ON s.JobID = b.JobID
    AND b.ListID = s.ListID
    AND b.BatchID = s.BatchID
    AND b.SubscriberID = s.SubscriberID
    AND b.IsUnique = 1
    LEFT JOIN _Unsubscribe AS u
    ON s.JobID = u.JobID
    AND u.ListID = s.ListID
    AND u.BatchID = s.BatchID
    AND u.SubscriberID = s.SubscriberID
    AND u.IsUnique = 1
    LEFT JOIN _JourneyActivity AS ja
    ON ja.JourneyActivityObjectID = s.TriggererSendDefinitionObjectID
    LEFT JOIN _Journey AS j
    ON j.VersionID = ja.VersionID
    LEFT JOIN _Subscribers AS sub
    ON sub.SubscriberKey = s.SubscriberKey
    WHERE s.EventDate >= DATEADD(DAY, -1, GETDATE())
    +

    Within a few seconds, you will see information about sends from the last day, with all the details that might be useful for debugging, like STMP Bounce Reason, Subscriber Status, Unsubscribe Date, etc.

    +

    Wondering what to do with that data? Check out Email Send Debugging Step-by-Step section below.

    +
    You Should Know

    If you are running it from the child Business Unit and do not see EmailAddress, BounceCount and Status, add the Ent. prefix to _Subscribers Data View name in the last JOIN. It will pull the data from _Subscribers of the parent Business Unit.

    +

    Options

    +

    You can even adapt the above query to better suit your needs.

    +

    Change timeframe

    +

    My default is checking the sends from the last day. You can change it by modifying the DATEADD function.

    +

    Limit to a single subscriber

    +

    If you are looking for a problem related to only one specific subscriber, you can add s.SubscriberKey = 'SubscriberKeyOfThatContact' or sub.EmailAddress = 'specific@email.address' to the WHERE statement. Or replace the current one not to be limited by the timeframe.

    +

    Limit to a single domain

    +

    If you see problems with deliverability for a particular user, I highly recommend checking whether other users from the same domain also have such issues. Maybe it is related to corporate server policy? Add sub.Domain = 'Recipients.Domain' to the WHERE statement. Or replace the current one not to be limited by the timeframe.

    +

    Limit to a single email

    +

    If the problem is related to just one email asset, you can limit your outcomes by adding job.EmailName = 'ProblematicEmailName' to the WHERE statement. Or replace the current one not to be limited by the timeframe.

    +

    Limit to a single Journey

    +

    If you want to focus on a single Journey, you can limit your outcomes by adding j.JourneyName = 'ProblematicJourneyName' to the WHERE statement. Or replace the current one not to be limited by the timeframe. You can also pinpoint it further by filtering on j.JourneyVersion.

    +

    Limit to single engagement type

    +

    If you are interested only in bounces and do not need any other sends, add b.IsUnique = 1 to the WHERE statement.

    +

    You can use the same approach to output only opens or clicks by changing the prefix from b to the alias representing the needed System Data View.

    +

    Email Send Debugging Step-by-Step

    +

    Now you know the SFMC Email Send Debugging query in and out. But how to work with the outcomes? And what are the next steps?

    +

    As they say, with great power comes great complexity. And that's definitely true for finding the root cause of the undelivered email. The deliverability by itself is already a beautiful mess, and then there are various features and options you can use directly in Salesforce Marketing Cloud. Let's dive in.

    +
    You Should Know

    You don't have to follow the steps below in the same order as presented. You can mix and match them, as long as you leave the Support Ticket creation for when you tried all other options.

    I personally debug in that order because, while I wait for the Query Studio to return the output from query, I can check the following steps in parallel.

    +

    1. Query System Data Views

    +

    I like to start with the query described in this guide - filtered down to problematic subscriber - to get a high-level picture of the situation. Free Salesforce Query Studio is the best place to execute that little exploratory analysis.

    +

    Once you see the outcome, there are few possibilities:

    +
      +
    • There is no data for that subscriber/send » It's time go to to the next step.
    • +
    • BounceDate is filled » Either the email is invalid (hence the bounce), or the recipient's inbox Admin blocked the email (they sometimes use fake bounces to fight spam - especially in enterprise B2B and public markets).
    • +
    • OpenDate or ClickDate is filled » It's time to compare their timestamps with DeliveryDate. If those are within a single second and there are no later subsequent opens/clicks, the email has been checked by an antispam bot and flagged for no delivery to the final recipient (again, B2B and Public). If the timestamps are spread out (especially engagement ones from the DeliveryDate), the email got delivered to the right person, and they just forgot or lost it.
    • +
    • DeliveryDate is filled » If there is no Bounce, Open or Click timestamps, but Delivery is filled in, the email should be in the subscriber's Spam folder or Promotions tab.
    • +
    • DeliveryDate is not filled » It's time go to to the next step.
    • +
    +

    2. Check Send Log

    +

    If System Data Views don't have the data or the DeliveryDate is not filled, the email hasn't reached the recipient's inbox. Time to investigate the Send Log.

    +

    Check whether an ErrorCode column value is filled for the send and subscriber you are debugging.

    +
      +
    • There is no data for that subscriber/send » It's time go to to the next step.
    • +
    • ErrorCode is filled » Check the Error Code value meaning to find the root cause.
    • +
    • ErrorCode is not filled » The email was sent but not delivered to the recipient - you have deliverability issues. Check your configuration (From Address Management in SFMC + SPF/DKIM/DMARC in DNS) and deliverability metrics (Salesforce offers Reputation Audit Test and Sender Rating as features-on-demand).
    • +
    +

    3. Check All Subscribers List

    +

    If there is no trace of the send in System Data Views and Send Log, it means that Marketing Cloud was not able to attempt sending. There are few possible reasons for that. Let's start with potential subscriber issues by searching for problematic Contact in Email Studio All Subscribers.

    +
      +
    • There is no subscriber » The most probable reason is subscriber block by SFMC List Detective that protects your lists from nasty emails. What frequently trips people is that it scrubs various group addresses like admin@, info@ and more.
    • +
    • Subscriber Status is Unsubscribed or Held » Contact is not eligible for receiving the email. Should they want to get it - push them through the official subscription process to stay compliant.
    • +
    +

    If you are sending through Journey Builder and in the Journey configuration selected to use Email Address from the Entry Source instead of Contacts, be sure to also check whether the Email Address field in the Data Extension selected for Entry stores correct email for that subscriber.

    +

    4. Check Personalised Email Preview

    +

    If everything was fine with the Subscriber, another option is an issue with the Email Asset. To check that, go to Content Builder, find the email, go to Preview and Test and select the subscriber in the same context as the one used for sending (for example, in the sendable Data Extension used as an Entry to the Journey). Check also a few other subscribers from the same place.

    +
      +
    • Email Preview errors out for all Subscribers » There is an issue with your email (probably with some programmatic content) that errored out during send.
    • +
    • Email Preview errors out only for that Subscriber » There is an issue with the personalisation data of that subscriber that clashes with your programmatic content.
    • +
    +

    5. Check Suppressions and Exclusions

    +

    If there are no errors within the Preview, the next potential culprit can be Exclusion or Suppression. There are quite a lot of them, and not all will be relevant for you, depending on the SFMC configuration and method of sending, so be sure to check applicable ones from the Exclusion List, Exclusion Script, Suppression List, Auto-Suppression List.

    +

    6. Create Support Ticket

    +

    If, after all those checks, there is still no answer to the root cause - create a Support Ticket. Sometimes, it can be a master unsubscribe, server-related queue build-up or a bug on the Marketing Cloud backend.

    +

    Email Send Debugging Flowchart

    +

    Prefer complex processes visualised? Got you covered:

    +
    \ No newline at end of file diff --git a/docs/sql/snippets/sfmc-sql-debugging-value-length/index.html b/docs/sql/snippets/sfmc-sql-debugging-value-length/index.html index 612ffe959..297c9a517 100644 --- a/docs/sql/snippets/sfmc-sql-debugging-value-length/index.html +++ b/docs/sql/snippets/sfmc-sql-debugging-value-length/index.html @@ -1,22 +1,85 @@ - + - -SFMC SQL Debugging Value Length | Mateusz Dąbrowski + +SFMC SQL Debugging Value Length | Mateusz Dąbrowski - - - + + + -
    -

    SFMC SQL Debugging Value Length

    Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.

    Working with Marketing Cloud (or any other Marketing Automation Platform) is always the dance between optimisation and flexibility. It is easily visible when working with SFMC Data Extensions.

    On the one hand, limiting the maximum field length is a must-have best practice. Salesforce recommends keeping the total sum of all fields length under 4000 characters. For many use cases, a tiny number. But if you want to have lean Data Extensions to query them quickly, it is the way. And in the Marketing Cloud, nearly everything is a query - even if you don't write a line of SQL.

    On the other hand, it might be tough to limit your Data Extension so much in real-life scenarios. Especially when you are bringing data from other systems. Example? Salesforce CRM integration through Marketing Cloud Connect. The picklist fields from CRM come to Synchronized Data Extensions as 255 character text fields - even if they have only one-digit values associated with it. Select a few such picklists to be available in Marketing Cloud, and you hit the Data Extension character length limit recommended by Salesforce.

    What to do with that?

    Limit the maximum length of those picklists in the Marketing Cloud Data Extension you use for campaigns. You are sure that your Gender field will always have one character value (F/M/O/U)? Make the maximum length equal to 1. It is an excellent way to trim unneeded length, but sometimes, you might be surprised, especially with less obvious picklists, like a job title. Similar issues might also come from standard text fields.

    Once you build your standard Data Extension with those optimisations in mind, it is time to pull the data from Synchronized Data Extensions.

    You Should Know

    I'm mentioning the Marketing Cloud Connect Synchronized Data Extensions, but you can also leverage it for FTP-based data uploads. The solution will require additional intermediate Data Extension with generous field lengths in place of Marketing Cloud Connect Synchronized Data Extension. Rest will be the same.

    All good, until one of the values, exceed the maximum length you set for its field. The Automation crashes with a cryptic error that tells you nothing and can push you for a long crusade to find the culprit. What now?

    Short Term Solution

    You can make quick manual check with a simple SQL query. Open your Query Studio and copy-paste the below code:

    Sample maximum length checking query on Contact object Synchronized Data Extension
    SELECT
    MAX(LEN(c.Id)) AS SubscriberKey
    , MAX(LEN(c.FirstName)) AS FirstName
    , MAX(LEN(c.LastName)) AS LastName
    , MAX(LEN(c.Email)) AS EmailAddress
    , MAX(LEN(c.JobTitle__c)) AS CurrentRole
    , MAX(LEN(c.Industry__c)) AS Industry
    FROM Contact_Salesforce AS c
    You Should Know

    If you are running those queries from the child Business Unit, add Ent. prefix to Synchronized Data Extension names, as those are stored on the parent level.

    This query will output one row of data with the current maximum length of the values that you have in your Synchronized Data Extension for the selected fields. It uses MAX function on the LEN outcome to find the single maximum length available across all records. It has two great uses:

    Discovery with MAX LEN

    You can use it even before configuring the Data Extension and Profile Attributes to analyse your real-life data.

    For example, if out of your whole database, the longest First Name is 33 characters, you will probably be just fine with a maximum length of 40 on this field. If a picklist field returns you 5 with this query - you won't need the default 255 characters.

    Of course, as mentioned above, the values might get longer in the future. But as Marketing Cloud allows you to change maximum field length up but not down, it might be a good idea to try as low as reasonable and leave space for growth.

    Debugging with MAX LEN

    The second use of the above snippet is quick debugging when an error occurs. Execute it in Query Studio and compare against the column lengths you set up in your Data Extension. If you see in Query Studio any value longer than the maximum you set up in Data Extension - you found a culprit.

    Now you can look in the data source and check whether this longer-than-expected value is correct. If yes, it is time to update your maximum length in the Data Extension and Profile Attribute configuration.

    You Should Know

    In most cases, the field length of 255 should be more than enough. But if you need it, Marketing Cloud allows you to go up to 4000 characters per field.

    4000 characters length is an instant way of getting over the recommended limit, but it might be useful for logging Data Extensions that you won't query in the future. For example, if you want to save _Bounce Data View to standard Data Extension, SMTPBounceReason might use such a long field.

    If you need more, there is a trick reported by Markus Slabina. Use Email Studio to add a new field and make the length empty. Save. It will create a nvarchar(max) field that allows absurdly long data to be stored.

    Remember that:

    1. It works only in Email Studio - Contact Builder won't work
    2. It is a workaround and might disappear at any moment
    3. You shouldn't use it unless there is no other option

    Basic Long Term Solution

    The snippet above is nice but suitable only for short term manual checks. And you don't want to perform manual checks for the long term. If you wonder whether there is a way to automate it nicely, you are here for a treat.

    Yes, you can automate such validation by using two additional Activities.

    Go to the Automation that takes care of moving the data from Synchronized Data Extension do Standard Data Extension and Profile Attributes. Before the Activities that are transfering the data, add a SQL Query Activity. In it, paste the below code:

    Basic field length checking query
    SELECT
    c.Id AS ContactID
    , LEN(c.Id) AS SubscriberKey
    , LEN(c.FirstName) AS FirstName
    , LEN(c.LastName) AS LastName
    , LEN(c.Email) AS EmailAddress
    , LEN(c.JobTitle__c) AS JobTitle
    , LEN(c.Industry__c) AS Industry
    FROM Contact_Salesforce AS c
    WHERE
    18 - LEN(c.Id) < 0
    OR 40 - LEN(c.FirstName) < 0
    OR 80 - LEN(c.LastName) < 0
    OR 254 - LEN(c.Email) < 0
    OR 80 - LEN(c.JobTitle__c) < 0
    OR 40 - LEN(c.Industry__c) < 0

    Of course, you will want to adapt it to your needs. Change the fields along with their names and lengths. Select the right Synchronized Data Extension. How? Let's dive in what this code does so that you can make it your own.

    The first field we SELECT is the Unique Identifier (Contact ID / Subscriber Key or other based on the specific object you are validating). It is useful to quickly know which record(s) should you checked when some values lengths exceed the expectations.

    After that, you can see the standard FROM statement. You can, of course, JOIN additional data sources.

    Finally, there is a WHERE statement. In it, we are checking whether at least one field on each record has a value longer than expected. To adapt it - change the number on the left to the length of the field you set up in the target Data Extension / Profile Attribute.

    This SQL Query Activity should output the rows to a technical Value Length Data Extension with all the same columns as the target Data Extension / Profile Attributes list. However, it can have much shorter max lengths for the columns, as all fields but the Unique Identifier one will output only the field's length (up to 4 digits). Configure the SQL Activity to Overwrite the technical Data Extension and always have the latest state data.

    Right after this SQL Query Activity add Verification Activity and configure it to check the technical Data Extension mentioned above. If there is any row in it - it should stop the whole Automation and send an alert email to the Marketing Cloud administrator.

    To sum up, sample Automation could look like this:

    1. SQL Query Activity with the Debugging Value Length query
    2. Verification Activity that checks Value Length Data Extension
    3. SQL Query Activity that moves data from Synchronized Data Extension to target Data Extension
    4. Export Activity
    5. Transfer Activity
    6. Import Activity

    The last three Activities above are the classic ETL group for updating the All Subscribers and Profile Attributes.

    Such setup won't silently crash your Automation whenever there is a single value longer than expected. It will stop the Automation before the crash, inform the administrator that there is an issue and provide Unique Identifiers of records leading to that error for an easy check. Neat, right? Well, it can be even better.

    Options

    The basic version above is already lovely, but we can make a few improvements to make the administrator's life even easier.

    Show fields with too long value

    Previously shown query will show the problematic record, but it will display all field lengths for it. The administrator will still have to compare the lengths to find which one is the issue's source.

    However, we already are coding the expected field length in the FROM part of the query. Why not use it to make life easier?

    Let's change the LEN(c.Id) AS [Subscriber Key], in the SELECT statement part to something a bit more interesting:

    Use CASE to display only the problematic fields
    CASE
    WHEN 18 - LEN(c.Id) < 0
    THEN LEN(c.Id)
    END AS SubscriberKey

    As you can see, we changed a simple line to a more complex CASE statement. There is a good reason for it. Thanks to it, the query will evaluate each field against the expected length and in the Value Length Data Extension display information only for the problematic values.

    The administrator will no longer have to compare each field with configured maximum - he will see it directly in the Data Extension, which saves time and limits the errors.

    Extended length information

    We can go even further with this approach and add a bit more data to the output for those problematic fields by making few calculations in THEN part of the CASE statement.

    Let the code do the work
    CASE
    WHEN 18 - LEN(c.Id) < 0
    THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')
    END AS SubscriberKey

    Here, apart from the problematic field's length, we are also showing how much it exceeds the current configuration.

    For example, if we expect the First Name to be under 40 characters and one record comes with 46 characters, the previous solution would output 46. This extended one will be a bit more verbose by showing 46 (6 over limit).

    Remember that if you implement this option, it will impact the output length in your technical Data Extension. 4 characters will be no longer enough. 22, however, will work like a charm.

    Fully-fledged Long Term Solution

    After applying both of the above options to the Basic SQL Snippet, it looks like this:

    SELECT
    c.Id AS ContactID
    , CASE
    WHEN 18 - LEN(c.Id) < 0
    THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')
    END AS SubscriberKey
    , CASE
    WHEN 40 - LEN(c.FirstName) < 0
    THEN CONCAT(LEN(c.FirstName), '(', LEN(c.FirstName) - 40, ' over limit)')
    END AS FirstName
    , CASE
    WHEN 80 - LEN(c.LastName) < 0
    THEN CONCAT(LEN(c.LastName), '(', LEN(c.LastName) - 80, ' over limit)')
    END AS LastName
    , CASE
    WHEN 254 - LEN(c.Email) < 0
    THEN CONCAT(LEN(c.Email), '(', LEN(c.Email) - 254, ' over limit)')
    END AS EmailAddress
    , CASE
    WHEN 80 - LEN(c.JobTitle__c) < 0
    THEN CONCAT(LEN(c.JobTitle__c), '(', LEN(c.JobTitle__c) - 80, ' over limit)')
    END AS JobTitle
    , CASE
    WHEN 40 - LEN(c.Industry__c) < 0
    THEN CONCAT(LEN(c.Industry__c), '(', LEN(c.Industry__c) - 40, ' over limit)')
    END AS Industry
    FROM Contact_Salesforce AS c
    WHERE
    18 - LEN(c.Id) < 0
    OR 40 - LEN(c.FirstName) < 0
    OR 80 - LEN(c.LastName) < 0
    OR 254 - LEN(c.Email) < 0
    OR 80 - LEN(c.JobTitle__c) < 0
    OR 40 - LEN(c.Industry__c) < 0
    - - +

    SFMC SQL Debugging Value Length

    Your Automations crash due to longer than expected values coming from the external source? Make your life easier with SQL.

    + +

    Working with Marketing Cloud (or any other Marketing Automation Platform) is always the dance between optimisation and flexibility. It is easily visible when working with SFMC Data Extensions.

    +

    On the one hand, limiting the maximum field length is a must-have best practice. Salesforce recommends keeping the total sum of all fields length under 4000 characters. For many use cases, a tiny number. But if you want to have lean Data Extensions to query them quickly, it is the way. And in the Marketing Cloud, nearly everything is a query - even if you don't write a line of SQL.

    +

    On the other hand, it might be tough to limit your Data Extension so much in real-life scenarios. Especially when you are bringing data from other systems. Example? Salesforce CRM integration through Marketing Cloud Connect. The picklist fields from CRM come to Synchronized Data Extensions as 255 character text fields - even if they have only one-digit values associated with it. Select a few such picklists to be available in Marketing Cloud, and you hit the Data Extension character length limit recommended by Salesforce.

    +

    What to do with that?

    +

    Limit the maximum length of those picklists in the Marketing Cloud Data Extension you use for campaigns. You are sure that your Gender field will always have one character value (F/M/O/U)? Make the maximum length equal to 1. It is an excellent way to trim unneeded length, but sometimes, you might be surprised, especially with less obvious picklists, like a job title. Similar issues might also come from standard text fields.

    +

    Once you build your standard Data Extension with those optimisations in mind, it is time to pull the data from Synchronized Data Extensions.

    +
    You Should Know

    I'm mentioning the Marketing Cloud Connect Synchronized Data Extensions, but you can also leverage it for FTP-based data uploads. The solution will require additional intermediate Data Extension with generous field lengths in place of Marketing Cloud Connect Synchronized Data Extension. Rest will be the same.

    +

    All good, until one of the values, exceed the maximum length you set for its field. The Automation crashes with a cryptic error that tells you nothing and can push you for a long crusade to find the culprit. What now?

    +

    Short Term Solution

    +

    You can make quick manual check with a simple SQL query. Open your Query Studio and copy-paste the below code:

    +
    Sample maximum length checking query on Contact object Synchronized Data Extension
    SELECT
    MAX(LEN(c.Id)) AS SubscriberKey
    , MAX(LEN(c.FirstName)) AS FirstName
    , MAX(LEN(c.LastName)) AS LastName
    , MAX(LEN(c.Email)) AS EmailAddress
    , MAX(LEN(c.JobTitle__c)) AS CurrentRole
    , MAX(LEN(c.Industry__c)) AS Industry
    FROM Contact_Salesforce AS c
    +
    You Should Know

    If you are running those queries from the child Business Unit, add Ent. prefix to Synchronized Data Extension names, as those are stored on the parent level.

    +

    This query will output one row of data with the current maximum length of the values that you have in your Synchronized Data Extension for the selected fields. It uses MAX function on the LEN outcome to find the single maximum length available across all records. It has two great uses:

    +

    Discovery with MAX LEN

    +

    You can use it even before configuring the Data Extension and Profile Attributes to analyse your real-life data.

    +

    For example, if out of your whole database, the longest First Name is 33 characters, you will probably be just fine with a maximum length of 40 on this field. If a picklist field returns you 5 with this query - you won't need the default 255 characters.

    +

    Of course, as mentioned above, the values might get longer in the future. But as Marketing Cloud allows you to change maximum field length up but not down, it might be a good idea to try as low as reasonable and leave space for growth.

    +

    Debugging with MAX LEN

    +

    The second use of the above snippet is quick debugging when an error occurs. Execute it in Query Studio and compare against the column lengths you set up in your Data Extension. If you see in Query Studio any value longer than the maximum you set up in Data Extension - you found a culprit.

    +

    Now you can look in the data source and check whether this longer-than-expected value is correct. If yes, it is time to update your maximum length in the Data Extension and Profile Attribute configuration.

    +
    You Should Know

    In most cases, the field length of 255 should be more than enough. But if you need it, Marketing Cloud allows you to go up to 4000 characters per field.

    4000 characters length is an instant way of getting over the recommended limit, but it might be useful for logging Data Extensions that you won't query in the future. For example, if you want to save _Bounce Data View to standard Data Extension, SMTPBounceReason might use such a long field.

    If you need more, there is a trick reported by Markus Slabina. Use Email Studio to add a new field and make the length empty. Save. It will create a nvarchar(max) field that allows absurdly long data to be stored.

    Remember that:

      +
    1. It works only in Email Studio - Contact Builder won't work
    2. +
    3. It is a workaround and might disappear at any moment
    4. +
    5. You shouldn't use it unless there is no other option
    6. +
    +

    Basic Long Term Solution

    +

    The snippet above is nice but suitable only for short term manual checks. And you don't want to perform manual checks for the long term. If you wonder whether there is a way to automate it nicely, you are here for a treat.

    +

    Yes, you can automate such validation by using two additional Activities.

    +

    Go to the Automation that takes care of moving the data from Synchronized Data Extension do Standard Data Extension and Profile Attributes. Before the Activities that are transfering the data, add a SQL Query Activity. In it, paste the below code:

    +
    Basic field length checking query
    SELECT
    c.Id AS ContactID
    , LEN(c.Id) AS SubscriberKey
    , LEN(c.FirstName) AS FirstName
    , LEN(c.LastName) AS LastName
    , LEN(c.Email) AS EmailAddress
    , LEN(c.JobTitle__c) AS JobTitle
    , LEN(c.Industry__c) AS Industry
    FROM Contact_Salesforce AS c
    WHERE
    18 - LEN(c.Id) < 0
    OR 40 - LEN(c.FirstName) < 0
    OR 80 - LEN(c.LastName) < 0
    OR 254 - LEN(c.Email) < 0
    OR 80 - LEN(c.JobTitle__c) < 0
    OR 40 - LEN(c.Industry__c) < 0
    +

    Of course, you will want to adapt it to your needs. Change the fields along with their names and lengths. Select the right Synchronized Data Extension. How? Let's dive in what this code does so that you can make it your own.

    +

    The first field we SELECT is the Unique Identifier (Contact ID / Subscriber Key or other based on the specific object you are validating). It is useful to quickly know which record(s) should you checked when some values lengths exceed the expectations.

    +

    After that, you can see the standard FROM statement. You can, of course, JOIN additional data sources.

    +

    Finally, there is a WHERE statement. In it, we are checking whether at least one field on each record has a value longer than expected. To adapt it - change the number on the left to the length of the field you set up in the target Data Extension / Profile Attribute.

    +

    This SQL Query Activity should output the rows to a technical Value Length Data Extension with all the same columns as the target Data Extension / Profile Attributes list. However, it can have much shorter max lengths for the columns, as all fields but the Unique Identifier one will output only the field's length (up to 4 digits). Configure the SQL Activity to Overwrite the technical Data Extension and always have the latest state data.

    +

    Right after this SQL Query Activity add Verification Activity and configure it to check the technical Data Extension mentioned above. If there is any row in it - it should stop the whole Automation and send an alert email to the Marketing Cloud administrator.

    +

    To sum up, sample Automation could look like this:

    +
      +
    1. SQL Query Activity with the Debugging Value Length query
    2. +
    3. Verification Activity that checks Value Length Data Extension
    4. +
    5. SQL Query Activity that moves data from Synchronized Data Extension to target Data Extension
    6. +
    7. Export Activity
    8. +
    9. Transfer Activity
    10. +
    11. Import Activity
    12. +
    +

    The last three Activities above are the classic ETL group for updating the All Subscribers and Profile Attributes.

    +

    Such setup won't silently crash your Automation whenever there is a single value longer than expected. It will stop the Automation before the crash, inform the administrator that there is an issue and provide Unique Identifiers of records leading to that error for an easy check. Neat, right? Well, it can be even better.

    +

    Options

    +

    The basic version above is already lovely, but we can make a few improvements to make the administrator's life even easier.

    +

    Show fields with too long value

    +

    Previously shown query will show the problematic record, but it will display all field lengths for it. The administrator will still have to compare the lengths to find which one is the issue's source.

    +

    However, we already are coding the expected field length in the FROM part of the query. Why not use it to make life easier?

    +

    Let's change the LEN(c.Id) AS [Subscriber Key], in the SELECT statement part to something a bit more interesting:

    +
    Use CASE to display only the problematic fields
    CASE
    WHEN 18 - LEN(c.Id) < 0
    THEN LEN(c.Id)
    END AS SubscriberKey
    +

    As you can see, we changed a simple line to a more complex CASE statement. There is a good reason for it. Thanks to it, the query will evaluate each field against the expected length and in the Value Length Data Extension display information only for the problematic values.

    +

    The administrator will no longer have to compare each field with configured maximum - he will see it directly in the Data Extension, which saves time and limits the errors.

    +

    Extended length information

    +

    We can go even further with this approach and add a bit more data to the output for those problematic fields by making few calculations in THEN part of the CASE statement.

    +
    Let the code do the work
    CASE
    WHEN 18 - LEN(c.Id) < 0
    THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')
    END AS SubscriberKey
    +

    Here, apart from the problematic field's length, we are also showing how much it exceeds the current configuration.

    +

    For example, if we expect the First Name to be under 40 characters and one record comes with 46 characters, the previous solution would output 46. This extended one will be a bit more verbose by showing 46 (6 over limit).

    +

    Remember that if you implement this option, it will impact the output length in your technical Data Extension. 4 characters will be no longer enough. 22, however, will work like a charm.

    +

    Fully-fledged Long Term Solution

    +

    After applying both of the above options to the Basic SQL Snippet, it looks like this:

    +
    SELECT
    c.Id AS ContactID
    , CASE
    WHEN 18 - LEN(c.Id) < 0
    THEN CONCAT(LEN(c.Id), '(', LEN(c.Id) - 18, ' over limit)')
    END AS SubscriberKey
    , CASE
    WHEN 40 - LEN(c.FirstName) < 0
    THEN CONCAT(LEN(c.FirstName), '(', LEN(c.FirstName) - 40, ' over limit)')
    END AS FirstName
    , CASE
    WHEN 80 - LEN(c.LastName) < 0
    THEN CONCAT(LEN(c.LastName), '(', LEN(c.LastName) - 80, ' over limit)')
    END AS LastName
    , CASE
    WHEN 254 - LEN(c.Email) < 0
    THEN CONCAT(LEN(c.Email), '(', LEN(c.Email) - 254, ' over limit)')
    END AS EmailAddress
    , CASE
    WHEN 80 - LEN(c.JobTitle__c) < 0
    THEN CONCAT(LEN(c.JobTitle__c), '(', LEN(c.JobTitle__c) - 80, ' over limit)')
    END AS JobTitle
    , CASE
    WHEN 40 - LEN(c.Industry__c) < 0
    THEN CONCAT(LEN(c.Industry__c), '(', LEN(c.Industry__c) - 40, ' over limit)')
    END AS Industry
    FROM Contact_Salesforce AS c
    WHERE
    18 - LEN(c.Id) < 0
    OR 40 - LEN(c.FirstName) < 0
    OR 80 - LEN(c.LastName) < 0
    OR 254 - LEN(c.Email) < 0
    OR 80 - LEN(c.JobTitle__c) < 0
    OR 40 - LEN(c.Industry__c) < 0
    \ No newline at end of file diff --git a/docs/ssjs/debugging-ssjs/index.html b/docs/ssjs/debugging-ssjs/index.html index 54e1648fb..34585a114 100644 --- a/docs/ssjs/debugging-ssjs/index.html +++ b/docs/ssjs/debugging-ssjs/index.html @@ -1,22 +1,146 @@ - + - -SSJS Debugging & Error Handling | Mateusz Dąbrowski + +SSJS Debugging & Error Handling | Mateusz Dąbrowski - - - + + + -
    -

    SSJS Debugging & Error Handling

    To catch, or not to catch, that is debugging.

    When you start working with programmatic languages in Salesforce Marketing Cloud, you will quickly become close friends with the Error 500 page. And if you beat it and go forward with the code and official documentation, you will fall in love with unexpected errors in functions and API responses. How to survive those?


    SSJS Testing Ground

    Before diving deep into errors, let's talk about where to write the SSJS. The language is useful in many places within the Marketing Cloud ecosystem. Among else in:

    • Cloud Pages (Web Studio)
    • Code Resources (Web Studio -> Content Builder)
    • Content Blocks (Content Builder)
    • Emails and other communication (Email Studio / Mobile Studio / Content Builder)
    • Script Activities (Automation Studio)

    In all of the above cases, you might write more complex logic that will be error-prone and in need of debugging. However, only a few of those are really good to test your code, as only some of them provide access to methods mentioned later in the article.

    Cloud Page

    The most popular recommendation is Cloud Page - write or paste the SSJS code there, publish and check whether it is working correctly. It is a great way, as it allows you to easily leverage SSJS for the backend and HTML/CSS/JavaScript for the frontend.

    It has, however, two flaws that, in some scenarios, might guide you to a different solution.

    1. Cost. Each view of the Cloud Page costs one Super Message. During debugging, you might hit quite a lot of those. And those tests - across your team and over time - stack up.
    2. Speed and context. Each time you want to republish the updated Cloud Page, you have to go through the Preview window (that load the whole code in POST method context), confirm it and go to the page via URL to see the GET method context.
    You Should Know

    Whenever you are writing an SSJS script on the Cloud Page, be sure to check your code on the published page, not the Web Studio Preview. Many SSJS functions do not work correctly in the Preview, so you might see errors that won't happen on the Cloud Page.

    JSON Code Resource

    When I want to go around those issues, I work in JSON Code Resource (in the past stored in Web Studio, now in Content Builder). It generates a link you can use to check whether everything works, just like a Cloud Page. However, page views are free. There is also no preview allowing for a faster save-reload cycle.

    The cons? You won't be able to use any frontend (neither HTML nor JavaScript), which might be a deal-breaker in some scenarios.

    So where?

    If you needCloud PageJSON Code Resource
    SSJS
    HTML/CSS/JS
    No Cost
    Quick Save

    500 - Internal Server Error

    The first type of error you might encounter is the dreaded 500 Error you see right after trying to run your code Reason? The backend code (SSJS/AMPScript) is invalid. There might be a few reasons for this. The most popular are:

    1. Typo in SSJS Function Name
    2. Unclosed or wrongly closed Bracket
    3. Use of JavaScript feature that is not available in SSJS (there is quite a lot of those...)
    4. Lack of declaration (in most cases either missing variable declaration, Platform.Load("Core","1"); or var soap = new Script.Util.WSProxy(); while using it later in the code)

    How to deal with those issues? Apart from just reading through your code line by line, there are two faster solutions.

    Divide and Conquer

    The first one can be done directly in the Marketing Cloud but is a bit of a brute-force approach. You block half of your code from running by enclosing it in a multiline comment (/* here goes the code */) and check again. If it works, you have half of the SSJS validated (from the 500 error perspective). If not, you split the remaining code in half and comment it out. Rinse, repeat. This way, you can quickly find the few lines that are the source of the issue and focus on validating them.

    SSJS Linting

    For many issues leading to 500 error, there is an even faster solution, but it requires some pre-work:

    1. You need to have Visual Studio Code with ESLint extension installed.
    2. You need to have NodeJS installed.
    3. You need to have a folder where you will store your SSJS code in files with the .ssjs file extension.
    4. You need to install the excellent ESLing configuration for SSJS made by Joern Berkefeld. To do this, run in terminal npm i -D eslint eslint-config-ssjs for the SSJS folder.

    Once done, you have automatic SSJS code validation (again, only from the perspective of 500 error - but it is still worth it).

    There is also a much more basic and less helpful but built-in solution to validate your SSJS code directly in the Marketing Cloud. Script Activity in Automation Studio. After adding your code there and clicking Validate Syntax button, it will check it against some basic rules. However, I recommend going with the ESLint. It provides much more value and is faster once configured.

    What about Try/Catch?

    There will be a separate section about Try/Catch. It does not work for issues leading to 500 Error.


    Write the Error down

    You got past the 500 error. Great! The script is still not outputting what you wanted? It is time to check what else might be wrong. The easiest way is to use the Write function. It shows whatever you pass in it to the frontend view. It is handy as SSJS does not support console.log due to its server-side nature (a little trick to make it work is below).

    To use this function just add Write('This will be visible on the website') between <script runat="server"> Platform.Load('Core','1'); and </script>.

    Of course, in real life, you will probably want to use it for variables:

    <script runat="server">
    Platform.Load('Core','1');
    var response = HTTP.Get('http://www.example.com');
    Write('Response from example.com: ' + response + '<br><br>');
    </script>

    As you can see in the code snippet above, I have more than just a response variable within my Write. The string before describes what is printed (useful mainly if you use multiple Writes in your code). The one after - <br><br> - will separate it from the rest of the website content (however, as it is HTML, it won't work in JSON Code Resource. You can use \n\n instead for the same outcome). I highly recommend this approach.

    Few things to remember
    1. Write is Core Library function, so you need to load it first in your script with Platform.Load('Core','1');.
    2. If the variable you want to output is an object, you need to parse it to a string using Stringify(response).
    3. If you don't want to load Core Library, use Platform versions of those functions: Platform.Response.Write() and Platform.Function.Stringify().

    Debugging Variable

    Whenever you create a script for the long-term, it is good to keep your debugging Write functions. There might be new requirements. Data sources change. Marketing Cloud too. And sometimes, those things might break your code.

    Of course, keeping the Writes as above is a no-go. You don't want your customers to see those. But there is a neat little trick to eat the cake and have it too:

    <script runat="server">
    Platform.Load('Core','1');
    var debugging = true;

    var response = HTTP.Get('http://www.example.com?q=1234');

    if (debugging) {
    Write('Response from example.com: ' + response + '<br><br>');
    };
    </script>

    I added two things:

    1. There is var debugging = true; near the top. When debugging, keep it on true. When you publish it for production - change the value to false.
    2. The Write is within the if block. It now works only if the debugging variable equals true.
    You Should Know

    Make your life easier with a nice clean function that will save you a lot of time in the long run:

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    var response = HTTP.Get('http://www.example.com?q=1234');
    if (debugging) debugValue('Response from example.com', response);

    With this approach, once you copy-paste the function, you have cleaner debugging lines, less code to write, no worry whether you need to Stringify or not and automatic new line addition for easier reading. Just pass debug description and the value you want to check and see the magic happen.

    Console Logging

    I mentioned before that SSJS does not support console.log as it executes on a server. There is, however, a workaround that might bring the SSJS values to your console. SSJS personalization strings passed to your JavaScript can help:

    console.log('Response from example.com' + '<ctrl:var name=response />')
    Passing Objects from SSJS to JS

    If the variable you want to pass to JavaScript is an SSJS Object, you will need to create a parsed variable to make it work:

    1. In SSJS create var parsedResponse = Stringify(response);
    2. In JS change the personalization to console.log(<ctrl:var name=parsedResponse />) (notice different name value and lack of quotes around personalization string)

    Alternatively use ternary to cover all scenarios:

    var parsedResponse = typeof response == 'object' ? Stringify(response) : response

    Try to Catch the Error

    Using Write is a great and simple solution, but it will work only if the code runs correctly. And sometimes it won't. For those cases, add a Try-Catch block. Check the Response tab below to compare the difference between standard Write(response) and writing the caught error.

    GET request to invalid URL within Try/Catch block
    <script runat="server">
    Platform.Load('Core','1');
    var debugging = true;

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    // Try/Catch Block with error Write
    try {
    var response = HTTP.Get('http://www.example.c');
    } catch (error) {
    if (debugging) debugValue('1. Error caught', error);
    };

    // Standard Write
    if (debugging) debugValue('2. Response from example.com', response);
    </script>

    Try/Catch is especially useful for SSJS Functions that call out-of-page data. Marketing Cloud Data Extensions, Salesforce Objects or even data sources from outside the Salesforce environment. It also will help when you are handling responses from such sources. For example, trying to get value from a nested object.

    In most cases, the simple Try/Catch will be all you need, but there is also a third element that might be very helpful: finally. Its purpose is to store a code that will execute, no matter what. Great for a cleanup code that must run regardless whether the previous logic was successful or not.

    try {
    // Risky code
    } catch (error) {
    // Code that will be executed if the risky code crashes
    } finally {
    // Code that will be executed always
    };

    Out of the three, SSJS requires only Try. You can use it with Catch, Finally or both, depending on your use case.

    You should know

    Try/Catch block in SSJS has separate scope. It means that any variables declared within the block won't be accessible from outside. Neither in the other parts of SSJS nor by personalization strings.

    There is a way to overcome this limitation. Declare the variables you want to use globally before the try and modify their values within the block:

    <script runat="server">
    Platform.Load('Core','1');

    var response;
    try {
    response = HTTP.Get('http://www.example.com');
    } catch (error) {
    // Error handling logic
    };
    </script>

    Throw Error

    You can leverage the Try/Catch block further by implementing your custom errors with throw. Why would you break your own code on purpose? It will help you control the execution of the code - especially if it uses external data. It can also be great for debugging and streamlining user experience.

    try {
    if (submissionData.greCaptcha) {
    var secret = "XXX";
    var payload = "secret=" + secret + "&response=" + submissionData.greCaptcha;
    var contentType = "application/x-www-form-urlencoded";
    var endpoint = "https://www.google.com/recaptcha/api/siteverify";
    var response = HTTP.Post(endpoint, contentType, payload);
    if (response.StatusCode == 200) {
    var parsedResponse = Platform.Function.ParseJSON(String(response.Response));
    if (!parsedResponse.success) throw 'Wrong reCAPTCHA';
    } else {
    throw 'reCAPTCHA API error';
    };
    };
    } catch (error) {
    debugValue('reCaptcha Error', error);
    };

    In the above example, you can see that we are checking whether the response from our reCaptcha validation to know whether we reached the Google server (else we throw reCAPTCHA API error) and if yes - was the Captcha solved.

    Here I'm using the string passed to throw just for debugging purposes, but you can use it for an overlay with feedback to your client or log the error.

    You Should Know

    You are not limited to strings with the throw. You can also pass objects to mimic the Marketing Cloud errors. It will make error handling much easier:

    if (response.StatusCode != 200) {
    throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};
    };

    Error Logging

    Once you debug your code using the above methods, it is still good to program defensively and leverage the Try/Catch block in the production environment. It will allow you to handle the errors for the customers and log the errors to a data extension (it will provide you with a history of problems along with a description of what happened). You can even build something more sophisticated, like automatically creating a JIRA bug ticket.

    Logging to Data Extension

    The easiest way to log your errors is to leverage Marketing Cloud Data Extensions.

    My recommendation is to create one Data Extension that will capture all the errors from the whole instance. It will make it much easier and faster to check any new issues.

    Here you can find a sample setup:

    Column NamePrimary KeyLengthTypeNullableDefault Value
    idYes36TextNo
    errorSource100TextNo
    errorMessage2000TextYes
    errorDescription2000TextYes
    errorDateDateYesCurrent Date

    If you have multiple Business Units on your instance, add it as a Shared Data Extension.

    It shouldn't be sendable or testable, but consider adding a retention period. Align it with the internal process for checking it for new issues. Seven days per record is a good starting point.

    Global Error Catching

    Instead of writing Try/Catch blocks for every potentially risky function, you might create just one block that will capture the whole code. You can even use it to catch errors in your AMPScript, as described by Zuzanna Jarczyńska.

    This approach might make your code shorter and more comfortable to read but limit your control over specific handling for various scenarios.

    You Should Know

    Any redirect within your try block is recognized as an error and caught. If you need to use a redirect, don't use the global Try/Catch approach and instead leverage it only for potentially problematic code.

    You can also leverage one of the approaches mentioned by Gortonington in his article on Try/Catch. It might be instrumental when you want to leverage redirect to handle the customer's error.


    Error Handler Function

    Once you start implementing the solutions mentioned above, it might get quite repetitive to add the same lines for conditional Write, log to Data Extension, et cetera.

    You can solve it by creating a single Error Handler function and just calling it wherever it is needed:

    <script runat="server">
    Platform.Load('Core','1');
    var debugging = true;

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /**
    * @function handleError
    * @description If debuging is enabled, outputs the error value. Else, adds the error with context to error logging Data Extension.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(
    'Data_Extension_Name',
    ['id', 'errorSource', 'errorMessage', 'errorDescription'],
    [GUID(), 'Name of the asset where the script runs', Stringify(error.message), Stringify(error.description)]
    );
    };
    };

    try {
    var response = HTTP.Get('http://www.example.c');
    } catch (error) {
    handleError(error);
    };
    </script>

    Whenever the Try/Catch block finds an error, the above snippet will check the value of debugging variable. If it is equal to true, it will just Write the error to the page to make it easier to debug quickly. If it is false, it will add the error to the Data Extension instead.

    Most of the Marketing Cloud Errors are objects with two keys: message and description. Putting those elements into separate columns of the Data Extension make it easier to read the log.

    Using the Error Handler Function is useful, especially when you are triggering it multiple times or when you have elaborate logic for handling (for example, API calls to external systems for bug tracking).

    You Should Know

    You can also create your custom error, by passing a custom object to the handleErrror function:

    handleError({message: 'Custom Error Message', description: 'Custom Error Description'});

    There is also a new solution - SSJS Lib - created by email360. Among other tools, they support console logging and simplified debugging. You can read more about the implementation here.


    Sum Up

    If you have any problems with your SSJS code:

    1. Test it in Cloud Page or JSON Code Resource 🔗
    2. Overcome 500 Error with linting or divide & conquer methodology 🔗
    3. Use the Write function to understand what happens with your variables during execution 🔗
    4. Use the Try/Catch block to understand better what is the reason for errors you encounter 🔗
    5. Save errors from your production code to easily track and solve the problems 🔗
    6. Simplify the approach with custom Error Handler Function 🔗
    - - +

    SSJS Debugging & Error Handling

    To catch, or not to catch, that is debugging.

    +

    When you start working with programmatic languages in Salesforce Marketing Cloud, you will quickly become close friends with the Error 500 page. And if you beat it and go forward with the code and official documentation, you will fall in love with unexpected errors in functions and API responses. How to survive those?

    +
    +

    SSJS Testing Ground

    +

    Before diving deep into errors, let's talk about where to write the SSJS. The language is useful in many places within the Marketing Cloud ecosystem. Among else in:

    +
      +
    • Cloud Pages (Web Studio)
    • +
    • Code Resources (Web Studio -> Content Builder)
    • +
    • Content Blocks (Content Builder)
    • +
    • Emails and other communication (Email Studio / Mobile Studio / Content Builder)
    • +
    • Script Activities (Automation Studio)
    • +
    +

    In all of the above cases, you might write more complex logic that will be error-prone and in need of debugging. However, only a few of those are really good to test your code, as only some of them provide access to methods mentioned later in the article.

    +

    Cloud Page

    +

    The most popular recommendation is Cloud Page - write or paste the SSJS code there, publish and check whether it is working correctly. It is a great way, as it allows you to easily leverage SSJS for the backend and HTML/CSS/JavaScript for the frontend.

    +

    It has, however, two flaws that, in some scenarios, might guide you to a different solution.

    +
      +
    1. Cost. Each view of the Cloud Page costs one Super Message. During debugging, you might hit quite a lot of those. And those tests - across your team and over time - stack up.
    2. +
    3. Speed and context. Each time you want to republish the updated Cloud Page, you have to go through the Preview window (that load the whole code in POST method context), confirm it and go to the page via URL to see the GET method context.
    4. +
    +
    You Should Know

    Whenever you are writing an SSJS script on the Cloud Page, be sure to check your code on the published page, not the Web Studio Preview. Many SSJS functions do not work correctly in the Preview, so you might see errors that won't happen on the Cloud Page.

    +

    JSON Code Resource

    +

    When I want to go around those issues, I work in JSON Code Resource (in the past stored in Web Studio, now in Content Builder). It generates a link you can use to check whether everything works, just like a Cloud Page. However, page views are free. There is also no preview allowing for a faster save-reload cycle.

    +

    The cons? You won't be able to use any frontend (neither HTML nor JavaScript), which might be a deal-breaker in some scenarios.

    +

    So where?

    +
    If you needCloud PageJSON Code Resource
    SSJS
    HTML/CSS/JS
    No Cost
    Quick Save
    +
    +

    500 - Internal Server Error

    +

    The first type of error you might encounter is the dreaded 500 Error you see right after trying to run your code Reason? The backend code (SSJS/AMPScript) is invalid. There might be a few reasons for this. The most popular are:

    +
      +
    1. Typo in SSJS Function Name
    2. +
    3. Unclosed or wrongly closed Bracket
    4. +
    5. Use of JavaScript feature that is not available in SSJS (there is quite a lot of those...)
    6. +
    7. Lack of declaration (in most cases either missing variable declaration, Platform.Load("Core","1"); or var soap = new Script.Util.WSProxy(); while using it later in the code)
    8. +
    +

    How to deal with those issues? Apart from just reading through your code line by line, there are two faster solutions.

    +

    Divide and Conquer

    +

    The first one can be done directly in the Marketing Cloud but is a bit of a brute-force approach. You block half of your code from running by enclosing it in a multiline comment (/* here goes the code */) and check again. If it works, you have half of the SSJS validated (from the 500 error perspective). If not, you split the remaining code in half and comment it out. Rinse, repeat. This way, you can quickly find the few lines that are the source of the issue and focus on validating them.

    +

    SSJS Linting

    +

    For many issues leading to 500 error, there is an even faster solution, but it requires some pre-work:

    +
      +
    1. You need to have Visual Studio Code with ESLint extension installed.
    2. +
    3. You need to have NodeJS installed.
    4. +
    5. You need to have a folder where you will store your SSJS code in files with the .ssjs file extension.
    6. +
    7. You need to install the excellent ESLing configuration for SSJS made by Joern Berkefeld. To do this, run in terminal npm i -D eslint eslint-config-ssjs for the SSJS folder.
    8. +
    +

    Once done, you have automatic SSJS code validation (again, only from the perspective of 500 error - but it is still worth it).

    +

    There is also a much more basic and less helpful but built-in solution to validate your SSJS code directly in the Marketing Cloud. Script Activity in Automation Studio. After adding your code there and clicking Validate Syntax button, it will check it against some basic rules. However, I recommend going with the ESLint. It provides much more value and is faster once configured.

    +
    What about Try/Catch?

    There will be a separate section about Try/Catch. It does not work for issues leading to 500 Error.

    +
    +

    Write the Error down

    +

    You got past the 500 error. Great! The script is still not outputting what you wanted? It is time to check what else might be wrong. The easiest way is to use the Write function. It shows whatever you pass in it to the frontend view. It is handy as SSJS does not support console.log due to its server-side nature (a little trick to make it work is below).

    +

    To use this function just add Write('This will be visible on the website') between <script runat="server"> Platform.Load('Core','1'); and </script>.

    +

    Of course, in real life, you will probably want to use it for variables:

    +
    <script runat="server">
    Platform.Load('Core','1');
    var response = HTTP.Get('http://www.example.com');
    Write('Response from example.com: ' + response + '<br><br>');
    </script>
    +

    As you can see in the code snippet above, I have more than just a response variable within my Write. The string before describes what is printed (useful mainly if you use multiple Writes in your code). The one after - <br><br> - will separate it from the rest of the website content (however, as it is HTML, it won't work in JSON Code Resource. You can use \n\n instead for the same outcome). I highly recommend this approach.

    +
    Few things to remember
      +
    1. Write is Core Library function, so you need to load it first in your script with Platform.Load('Core','1');.
    2. +
    3. If the variable you want to output is an object, you need to parse it to a string using Stringify(response).
    4. +
    5. If you don't want to load Core Library, use Platform versions of those functions: Platform.Response.Write() and Platform.Function.Stringify().
    6. +
    +

    Debugging Variable

    +

    Whenever you create a script for the long-term, it is good to keep your debugging Write functions. There might be new requirements. Data sources change. Marketing Cloud too. And sometimes, those things might break your code.

    +

    Of course, keeping the Writes as above is a no-go. You don't want your customers to see those. But there is a neat little trick to eat the cake and have it too:

    +
    <script runat="server">
    Platform.Load('Core','1');
    var debugging = true;

    var response = HTTP.Get('http://www.example.com?q=1234');

    if (debugging) {
    Write('Response from example.com: ' + response + '<br><br>');
    };
    </script>
    +

    I added two things:

    +
      +
    1. There is var debugging = true; near the top. When debugging, keep it on true. When you publish it for production - change the value to false.
    2. +
    3. The Write is within the if block. It now works only if the debugging variable equals true.
    4. +
    +
    You Should Know

    Make your life easier with a nice clean function that will save you a lot of time in the long run:

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    var response = HTTP.Get('http://www.example.com?q=1234');
    if (debugging) debugValue('Response from example.com', response);

    With this approach, once you copy-paste the function, you have cleaner debugging lines, less code to write, no worry whether you need to Stringify or not and automatic new line addition for easier reading. Just pass debug description and the value you want to check and see the magic happen.

    +

    Console Logging

    +

    I mentioned before that SSJS does not support console.log as it executes on a server. There is, however, a workaround that might bring the SSJS values to your console. SSJS personalization strings passed to your JavaScript can help:

    +
    console.log('Response from example.com' + '<ctrl:var name=response />')
    +
    Passing Objects from SSJS to JS

    If the variable you want to pass to JavaScript is an SSJS Object, you will need to create a parsed variable to make it work:

      +
    1. In SSJS create var parsedResponse = Stringify(response);
    2. +
    3. In JS change the personalization to console.log(<ctrl:var name=parsedResponse />) (notice different name value and lack of quotes around personalization string)
    4. +

    Alternatively use ternary to cover all scenarios:

    var parsedResponse = typeof response == 'object' ? Stringify(response) : response
    +
    +

    Try to Catch the Error

    +

    Using Write is a great and simple solution, but it will work only if the code runs correctly. And sometimes it won't. For those cases, add a Try-Catch block. Check the Response tab below to compare the difference between standard Write(response) and writing the caught error.

    +
    GET request to invalid URL within Try/Catch block
    <script runat="server">
    Platform.Load('Core','1');
    var debugging = true;

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    // Try/Catch Block with error Write
    try {
    var response = HTTP.Get('http://www.example.c');
    } catch (error) {
    if (debugging) debugValue('1. Error caught', error);
    };

    // Standard Write
    if (debugging) debugValue('2. Response from example.com', response);
    </script>
    +

    Try/Catch is especially useful for SSJS Functions that call out-of-page data. Marketing Cloud Data Extensions, Salesforce Objects or even data sources from outside the Salesforce environment. It also will help when you are handling responses from such sources. For example, trying to get value from a nested object.

    +

    In most cases, the simple Try/Catch will be all you need, but there is also a third element that might be very helpful: finally. Its purpose is to store a code that will execute, no matter what. Great for a cleanup code that must run regardless whether the previous logic was successful or not.

    +
    try {
    // Risky code
    } catch (error) {
    // Code that will be executed if the risky code crashes
    } finally {
    // Code that will be executed always
    };
    +

    Out of the three, SSJS requires only Try. You can use it with Catch, Finally or both, depending on your use case.

    +
    You should know

    Try/Catch block in SSJS has separate scope. It means that any variables declared within the block won't be accessible from outside. Neither in the other parts of SSJS nor by personalization strings.

    There is a way to overcome this limitation. Declare the variables you want to use globally before the try and modify their values within the block:

    <script runat="server">
    Platform.Load('Core','1');

    var response;
    try {
    response = HTTP.Get('http://www.example.com');
    } catch (error) {
    // Error handling logic
    };
    </script>
    +

    Throw Error

    +

    You can leverage the Try/Catch block further by implementing your custom errors with throw. Why would you break your own code on purpose? It will help you control the execution of the code - especially if it uses external data. It can also be great for debugging and streamlining user experience.

    +
    try {
    if (submissionData.greCaptcha) {
    var secret = "XXX";
    var payload = "secret=" + secret + "&response=" + submissionData.greCaptcha;
    var contentType = "application/x-www-form-urlencoded";
    var endpoint = "https://www.google.com/recaptcha/api/siteverify";
    var response = HTTP.Post(endpoint, contentType, payload);
    if (response.StatusCode == 200) {
    var parsedResponse = Platform.Function.ParseJSON(String(response.Response));
    if (!parsedResponse.success) throw 'Wrong reCAPTCHA';
    } else {
    throw 'reCAPTCHA API error';
    };
    };
    } catch (error) {
    debugValue('reCaptcha Error', error);
    };
    +

    In the above example, you can see that we are checking whether the response from our reCaptcha validation to know whether we reached the Google server (else we throw reCAPTCHA API error) and if yes - was the Captcha solved.

    +

    Here I'm using the string passed to throw just for debugging purposes, but you can use it for an overlay with feedback to your client or log the error.

    +
    You Should Know

    You are not limited to strings with the throw. You can also pass objects to mimic the Marketing Cloud errors. It will make error handling much easier:

    if (response.StatusCode != 200) {
    throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};
    };
    +
    +

    Error Logging

    +

    Once you debug your code using the above methods, it is still good to program defensively and leverage the Try/Catch block in the production environment. It will allow you to handle the errors for the customers and log the errors to a data extension (it will provide you with a history of problems along with a description of what happened). You can even build something more sophisticated, like automatically creating a JIRA bug ticket.

    +

    Logging to Data Extension

    +

    The easiest way to log your errors is to leverage Marketing Cloud Data Extensions.

    +

    My recommendation is to create one Data Extension that will capture all the errors from the whole instance. It will make it much easier and faster to check any new issues.

    +

    Here you can find a sample setup:

    +
    Column NamePrimary KeyLengthTypeNullableDefault Value
    idYes36TextNo
    errorSource100TextNo
    errorMessage2000TextYes
    errorDescription2000TextYes
    errorDateDateYesCurrent Date
    +

    If you have multiple Business Units on your instance, add it as a Shared Data Extension.

    +

    It shouldn't be sendable or testable, but consider adding a retention period. Align it with the internal process for checking it for new issues. Seven days per record is a good starting point.

    +

    Global Error Catching

    +

    Instead of writing Try/Catch blocks for every potentially risky function, you might create just one block that will capture the whole code. You can even use it to catch errors in your AMPScript, as described by Zuzanna Jarczyńska.

    +

    This approach might make your code shorter and more comfortable to read but limit your control over specific handling for various scenarios.

    +
    You Should Know

    Any redirect within your try block is recognized as an error and caught. If you need to use a redirect, don't use the global Try/Catch approach and instead leverage it only for potentially problematic code.

    You can also leverage one of the approaches mentioned by Gortonington in his article on Try/Catch. It might be instrumental when you want to leverage redirect to handle the customer's error.

    +
    +

    Error Handler Function

    +

    Once you start implementing the solutions mentioned above, it might get quite repetitive to add the same lines for conditional Write, log to Data Extension, et cetera.

    +

    You can solve it by creating a single Error Handler function and just calling it wherever it is needed:

    +
    <script runat="server">
    Platform.Load('Core','1');
    var debugging = true;

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /**
    * @function handleError
    * @description If debuging is enabled, outputs the error value. Else, adds the error with context to error logging Data Extension.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(
    'Data_Extension_Name',
    ['id', 'errorSource', 'errorMessage', 'errorDescription'],
    [GUID(), 'Name of the asset where the script runs', Stringify(error.message), Stringify(error.description)]
    );
    };
    };

    try {
    var response = HTTP.Get('http://www.example.c');
    } catch (error) {
    handleError(error);
    };
    </script>
    +

    Whenever the Try/Catch block finds an error, the above snippet will check the value of debugging variable. If it is equal to true, it will just Write the error to the page to make it easier to debug quickly. If it is false, it will add the error to the Data Extension instead.

    +

    Most of the Marketing Cloud Errors are objects with two keys: message and description. Putting those elements into separate columns of the Data Extension make it easier to read the log.

    +

    Using the Error Handler Function is useful, especially when you are triggering it multiple times or when you have elaborate logic for handling (for example, API calls to external systems for bug tracking).

    +
    You Should Know

    You can also create your custom error, by passing a custom object to the handleErrror function:

    handleError({message: 'Custom Error Message', description: 'Custom Error Description'});
    +

    There is also a new solution - SSJS Lib - created by email360. Among other tools, they support console logging and simplified debugging. You can read more about the implementation here.

    +
    +

    Sum Up

    +

    If you have any problems with your SSJS code:

    +
      +
    1. Test it in Cloud Page or JSON Code Resource 🔗
    2. +
    3. Overcome 500 Error with linting or divide & conquer methodology 🔗
    4. +
    5. Use the Write function to understand what happens with your variables during execution 🔗
    6. +
    7. Use the Try/Catch block to understand better what is the reason for errors you encounter 🔗
    8. +
    9. Save errors from your production code to easily track and solve the problems 🔗
    10. +
    11. Simplify the approach with custom Error Handler Function 🔗
    12. +
    \ No newline at end of file diff --git a/docs/ssjs/snippets/ampscript-in-ssjs/index.html b/docs/ssjs/snippets/ampscript-in-ssjs/index.html index 5eb73a02b..57ba246e4 100644 --- a/docs/ssjs/snippets/ampscript-in-ssjs/index.html +++ b/docs/ssjs/snippets/ampscript-in-ssjs/index.html @@ -1,22 +1,63 @@ - + - -AMPScript in SSJS | Mateusz Dąbrowski + +AMPScript in SSJS | Mateusz Dąbrowski - - - + + + -
    -

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Problem with missing SSJS functions

    SSJS language has many features missing from AMPScript - try/catch blocks, arrays and objects to mention the most used ones. But some things are available only in AMPScript.

    Some, like ProperCase function, can be recreated in SSJS with a bit of RegEx creativity. Other, like RetrieveSalesforceObjects, cannot (unless you decide on building custom wrappers around Salesforce API).

    Either way, you are in for a time consuming, error-prone custom coding. Is there a better way?

    Solution

    You guessed it - yes, there is a better way. You can run AMPScript code with your SSJS. The simple answer to this problem is Platform.Function.TreatAsContent() SSJS function.

    But the good answer is few lines longer:

    /**
    * @function ampScript
    * @description Executes provided AMPScript code and returns value assigned to @Response variable
    * @param {string} code - String of AMPScript code without start/end delimiters. Final outcome should be assigned to @Response to enable passing back to SSJS
    * @return {?string} - Returns value from AMPScript execution if any was assigned to @Response variable
    */
    function ampScript(code) {
    var ampBlock = '\%\%[' + code + ']\%\%';
    Platform.Function.TreatAsContent(ampBlock);
    return Variable.GetValue('@response');
    };
    You Should Know

    As we are using Variable.GetValue here, you will need to import Salesforce Marketing Cloud SSJS Core library at the top of your script.

    Just add Platform.Load('core', '1') right after <script runat="server"> and you are good to go!

    Instead of writing your AMPScript execution wrapper every time from scratch, here is a ready-to-use function that you can copy-paste across your scripts that allows you to use ampscript and do it gracefully.

    Sure, it still uses the Platform.Function.TreatAsContent() at its heart, but there are two additional tricks:

    1. var ampBlock = '\%\%[' + code + ']\%\%': allows you to write AMPScript without the block symbols and adds them in the last moment. This way, Marketing Cloud will execute your code once you pass it to the Platform.Function.TreatAsContent() function. It is essential when you want to insert SSJS in your AMPScript.
    2. return Variable.GetValue('@response');: allows you to pull back data from your AMPScript to the SSJS. For it to work, you must SET the @response variable in your AMPScript. Whatever value you assign to the @response in the AMPScript context, will be returned to your SSJS context.

    How to use it? Pass the AMPScript code in the function and, if you want to do something with @response value, assign it to an SSJS variable.

    As JavaScript lacks native ProperCase, we can use AMPScript for that
    var properCaseFullName = ampScript("SET @response = ProperCase(AttributeValue('fullName'))");
    You Should Know

    Be sure only to use this approach if there is no equivalent SSJS solution, as mixing languages will impact performance. It is crucial for code in the messages that Marketing Cloud will execute on send time.

    For example, if you are only planning to use ProperCase, it might be better to go the RegEx path for significant volume messaging.

    Options

    You can adapt the above script to suit your needs better.

    Long AMPScript Code

    Above example is a short and straightforward AMPScript. However, you will need a bit more code to do the job in many cases. You can write it as a single line if you want, but I recommend you split it into separate lines for readability purposes.

    You can do it quickly, by just concatenating strings with +.

    Check whether there is a Campaign in Salesforce called 'WelcomeCampaign2021'
    var response = ampScript("SET @retrieve = RetrieveSalesforceObjects("
    + "'Campaign', 'Id', 'Name', '=', 'WelcomeCampaign2021') "
    + "IF RowCount(@retrieve) > 0 THEN SET @response = 'true' "
    + "ELSE SET @response = 'false' ENDIF");
    You Should Know

    To use any Salesforce Object functions, you will need to have Marketing Cloud Connect implemented to tie in your Marketing Cloud and Sales or Service Cloud.

    Be sure always to check, whether you have space either at the end of the previous line or beginning of the new line. Otherwise, after concatenation, you might end up with incorrect code.

    Dynamic AMPScript Code

    Using AMPScript via SSJS not only enables additional features for Server-Side JavaScript. It also allows you to make your AMPScript more dynamic by leveraging variables in the loops:

    Same check as above, but for multiple campaigns and output to an array
    var availableCampaigns = [];
    for (var campaignName in campaignList) {
    var response = ampScript("SET @retrieve = RetrieveSalesforceObjects("
    + "'Campaign', 'Id', 'Name', '=', '" + campaignName + "') "
    + "IF RowCount(@retrieve) > 0 THEN SET @response = 'true' "
    + "ELSE SET @response = 'false' ENDIF");
    if (reponse) availableCampaigns.push(campaignName);
    };

    It is even more useful when you have variability in what you want to create. For example, let's consider a use case where you want to create Campaigns in Salesforce from Marketing Cloud, but only some of your campaigns have an End Date known from the beginning.

    In CreateSalesforceObject AMPScript function, you must pass all fields with their values and a count of fields added to the object. With SSJS, you can use the length method to count the Campaign's fields in each loop's run. Then pass the outcome to the call parameters just as in the example above.

    Working with AMPScript on Lists & Objects

    Unfortunately, AMPScript doesn't support list or objects. Fortunately, SSJS do. We will need a bit of creativity to pull that off, but it makes life so much easier once done.

    The easy example is visible in the previous section - the snippet creates an array of Campaigns available in Salesforce.

    But we can go so much farther than that:

    var response = ampScript("SET @retrieve = RetrieveSalesforceObjects("
    + "'Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True') "
    + "SET @rowCount = RowCount(@retrieve) SET @response = '' "
    + "IF @rowCount > 0 THEN FOR @counter = 1 TO @rowCount DO "
    + "SET @row = Row(@retrieve, @counter) "
    + "SET @name = Field(@row, 'Name') SET @id = Field(@row, 'Id') "
    + "SET @startDate = Field(@row, 'StartDate') SET @endDate = Field(@row, 'EndDate') "
    + "SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate) "
    + "SET @response = Concat(@response, @rowData, ';') "
    + "NEXT @counter ENDIF");
    response = response.split(';');
    var campaignData = [];
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };

    Ok, a lot to unpack. But trust me, it's worth it. Let's go!

    The first line is easy - we are using RetrieveSalesforceObjects function to get a list of all active Salesforce Campaigns and limit the fields we need about them.

    Next, we have a standard AMPScript way of iterating over the function's outcomes.

    Now starts the exciting part - we are creating an AMPScript variable for each field, concatenate it using a comma and then adding it to the end of the @response variable - semicolon-separated.

    Structure of the AMPScript output
    Name1,Id1,StartDate1,EndDate1;Name2,Id2,StartDate2,EndDate2;Name3,Id3,StartDate3,EndDate3

    As we assigned the final string to @response, the function will return it to the SSJS context.

    Once it's there, we are leveraging the SSJS by splitting the string on semicolons to create an array of substrings containing each Salesforce Campaign's details.

    Then we loop over it and split each Campaign string by comma. With the deconstructed data, we create a nice and clean campaignData object that we can use in the rest of our code. Neat.

    - - +

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    +

    Problem with missing SSJS functions

    +

    SSJS language has many features missing from AMPScript - try/catch blocks, arrays and objects to mention the most used ones. But some things are available only in AMPScript.

    +

    Some, like ProperCase function, can be recreated in SSJS with a bit of RegEx creativity. Other, like RetrieveSalesforceObjects, cannot (unless you decide on building custom wrappers around Salesforce API).

    +

    Either way, you are in for a time consuming, error-prone custom coding. Is there a better way?

    +

    Solution

    +

    You guessed it - yes, there is a better way. You can run AMPScript code with your SSJS. The simple answer to this problem is Platform.Function.TreatAsContent() SSJS function.

    +

    But the good answer is few lines longer:

    +
    /**
    * @function ampScript
    * @description Executes provided AMPScript code and returns value assigned to @Response variable
    * @param {string} code - String of AMPScript code without start/end delimiters. Final outcome should be assigned to @Response to enable passing back to SSJS
    * @return {?string} - Returns value from AMPScript execution if any was assigned to @Response variable
    */
    function ampScript(code) {
    var ampBlock = '\%\%[' + code + ']\%\%';
    Platform.Function.TreatAsContent(ampBlock);
    return Variable.GetValue('@response');
    };
    +
    You Should Know

    As we are using Variable.GetValue here, you will need to import Salesforce Marketing Cloud SSJS Core library at the top of your script.

    Just add Platform.Load('core', '1') right after <script runat="server"> and you are good to go!

    +

    Instead of writing your AMPScript execution wrapper every time from scratch, here is a ready-to-use function that you can copy-paste across your scripts that allows you to use ampscript and do it gracefully.

    +

    Sure, it still uses the Platform.Function.TreatAsContent() at its heart, but there are two additional tricks:

    +
      +
    1. var ampBlock = '\%\%[' + code + ']\%\%': allows you to write AMPScript without the block symbols and adds them in the last moment. This way, Marketing Cloud will execute your code once you pass it to the Platform.Function.TreatAsContent() function. It is essential when you want to insert SSJS in your AMPScript.
    2. +
    3. return Variable.GetValue('@response');: allows you to pull back data from your AMPScript to the SSJS. For it to work, you must SET the @response variable in your AMPScript. Whatever value you assign to the @response in the AMPScript context, will be returned to your SSJS context.
    4. +
    +

    How to use it? Pass the AMPScript code in the function and, if you want to do something with @response value, assign it to an SSJS variable.

    +
    As JavaScript lacks native ProperCase, we can use AMPScript for that
    var properCaseFullName = ampScript("SET @response = ProperCase(AttributeValue('fullName'))");
    +
    You Should Know

    Be sure only to use this approach if there is no equivalent SSJS solution, as mixing languages will impact performance. It is crucial for code in the messages that Marketing Cloud will execute on send time.

    For example, if you are only planning to use ProperCase, it might be better to go the RegEx path for significant volume messaging.

    +

    Options

    +

    You can adapt the above script to suit your needs better.

    +

    Long AMPScript Code

    +

    Above example is a short and straightforward AMPScript. However, you will need a bit more code to do the job in many cases. You can write it as a single line if you want, but I recommend you split it into separate lines for readability purposes.

    +

    You can do it quickly, by just concatenating strings with +.

    +
    Check whether there is a Campaign in Salesforce called 'WelcomeCampaign2021'
    var response = ampScript("SET @retrieve = RetrieveSalesforceObjects("
    + "'Campaign', 'Id', 'Name', '=', 'WelcomeCampaign2021') "
    + "IF RowCount(@retrieve) > 0 THEN SET @response = 'true' "
    + "ELSE SET @response = 'false' ENDIF");
    +
    You Should Know

    To use any Salesforce Object functions, you will need to have Marketing Cloud Connect implemented to tie in your Marketing Cloud and Sales or Service Cloud.

    +

    Be sure always to check, whether you have space either at the end of the previous line or beginning of the new line. Otherwise, after concatenation, you might end up with incorrect code.

    +

    Dynamic AMPScript Code

    +

    Using AMPScript via SSJS not only enables additional features for Server-Side JavaScript. It also allows you to make your AMPScript more dynamic by leveraging variables in the loops:

    +
    Same check as above, but for multiple campaigns and output to an array
    var availableCampaigns = [];
    for (var campaignName in campaignList) {
    var response = ampScript("SET @retrieve = RetrieveSalesforceObjects("
    + "'Campaign', 'Id', 'Name', '=', '" + campaignName + "') "
    + "IF RowCount(@retrieve) > 0 THEN SET @response = 'true' "
    + "ELSE SET @response = 'false' ENDIF");
    if (reponse) availableCampaigns.push(campaignName);
    };
    +

    It is even more useful when you have variability in what you want to create. For example, let's consider a use case where you want to create Campaigns in Salesforce from Marketing Cloud, but only some of your campaigns have an End Date known from the beginning.

    +

    In CreateSalesforceObject AMPScript function, you must pass all fields with their values and a count of fields added to the object. With SSJS, you can use the length method to count the Campaign's fields in each loop's run. Then pass the outcome to the call parameters just as in the example above.

    +

    Working with AMPScript on Lists & Objects

    +

    Unfortunately, AMPScript doesn't support list or objects. Fortunately, SSJS do. We will need a bit of creativity to pull that off, but it makes life so much easier once done.

    +

    The easy example is visible in the previous section - the snippet creates an array of Campaigns available in Salesforce.

    +

    But we can go so much farther than that:

    +
    var response = ampScript("SET @retrieve = RetrieveSalesforceObjects("
    + "'Campaign', 'Name,Id,StartDate,EndDate', 'IsActive', '=', 'True') "
    + "SET @rowCount = RowCount(@retrieve) SET @response = '' "
    + "IF @rowCount > 0 THEN FOR @counter = 1 TO @rowCount DO "
    + "SET @row = Row(@retrieve, @counter) "
    + "SET @name = Field(@row, 'Name') SET @id = Field(@row, 'Id') "
    + "SET @startDate = Field(@row, 'StartDate') SET @endDate = Field(@row, 'EndDate') "
    + "SET @rowData = Concat(@name, ',', @id, ',', @startDate, ',', @endDate) "
    + "SET @response = Concat(@response, @rowData, ';') "
    + "NEXT @counter ENDIF");
    response = response.split(';');
    var campaignData = [];
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };
    +

    Ok, a lot to unpack. But trust me, it's worth it. Let's go!

    +

    The first line is easy - we are using RetrieveSalesforceObjects function to get a list of all active Salesforce Campaigns and limit the fields we need about them.

    +

    Next, we have a standard AMPScript way of iterating over the function's outcomes.

    +

    Now starts the exciting part - we are creating an AMPScript variable for each field, concatenate it using a comma and then adding it to the end of the @response variable - semicolon-separated.

    +
    Structure of the AMPScript output
    Name1,Id1,StartDate1,EndDate1;Name2,Id2,StartDate2,EndDate2;Name3,Id3,StartDate3,EndDate3
    +

    As we assigned the final string to @response, the function will return it to the SSJS context.

    +

    Once it's there, we are leveraging the SSJS by splitting the string on semicolons to create an array of substrings containing each Salesforce Campaign's details.

    +

    Then we loop over it and split each Campaign string by comma. With the deconstructed data, we create a nice and clean campaignData object that we can use in the rest of our code. Neat.

    \ No newline at end of file diff --git a/docs/ssjs/snippets/sfmc-cloud-page-apps/index.html b/docs/ssjs/snippets/sfmc-cloud-page-apps/index.html index 43d11b4c1..a510dab98 100644 --- a/docs/ssjs/snippets/sfmc-cloud-page-apps/index.html +++ b/docs/ssjs/snippets/sfmc-cloud-page-apps/index.html @@ -1,22 +1,144 @@ - + - -Solve with Cloud Page Apps | Mateusz Dąbrowski + +Solve with Cloud Page Apps | Mateusz Dąbrowski - - - + + + -
    -

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    Cloud Page Apps: what and why

    When out-of-the-box features are not enough

    Salesforce Marketing Cloud offers a multitude of options. With all the Studios, Builders, and other Salesforce-ecosystem cross-sells, you can deliver nearly anything. Nearly.

    There will always be some business processes or requirements that are too niche or too unique to be covered out-of-the-box. Sometimes they can be delivered with what is available after some compromises. Sometimes only custom development can help.

    Depending on the use case and company resources, you can overcome such challenges in two ways. By shopping at AppExchange - Salesforce App Store with 3rd Party solutions - or by building a custom application connected to Marketing Cloud with APIs (for example, leveraging yet another Salesforce product - Heroku).

    AppExchange might be a great idea if you can find a product solving your problem, but it will add a recurring cost to your budget. On the other hand, a fully-fledged custom application might deliver precisely what you need but create considerable up-front cost (in either money for external developers or time for an in-house team) and require maintenance.

    There is, however, the third path. One that can be perfect if you have a necessary but relatively small requirement for internally used power-up and would instead go lean on both budget and time — Marketing Cloud micro application.

    Out-of-the-box approach to out-of-the-box feature

    Marketing Cloud micro application offers AppExchange-style deep integration with Marketing Cloud platform and solution flexibility of custom development. In short, it is an application hosted on a Cloud Page and available via the main menu of Marketing Cloud. A Cloud Page App.

    The good? You can use Marketing Cloud programmatic languages (SSJS and AMPScript) with all their nifty built-in functions to control the assets and behaviours of the SFMC platform and connected Sales & Service Clouds. You can also leverage the APIs to gather even more power and pull external logic and data. All this without having to care about hosting, scaling and integration. Available directly from the Marketing Cloud menu. And cost? Just a super message for loading a Cloud Page.

    The bad? It is suitable for relatively simple apps. Think about a single front-end page powered by an SSJS or AMPScript backend on a Code Resource. Of course, you can try to build something more complex, but you may quickly get into a place where the whole endeavour would have been easier with an outside-hosted application.

    Build your dream

    So what can you do with such a solution? Possibilities are endless, but to share a few use cases:

    • Marketing Cloud Asset Viewer that allows you to quickly locate, for example, a Data Extension or Content asset.
    • Data Extension Analyzer for quick data analysis or even visualisation of values from a selected Data Extension.
    • KPI Dashboard displaying the most critical data for understanding your communication's current state - or even related data from Sales or Service Cloud imported using functions enabled by Marketing Cloud Connect.
    • Deliverability Dashboard pulling data from Marketing Cloud and external deliverability monitoring and alerting tools.
    • Documentation or FAQ related to your company processes and best practices that everyone should follow when building customer experience through Marketing Cloud.
    • Templated Journey creator to deploy tested flows for most used campaigns in a single click.

    Anything related to Marketing Cloud that you wish could be a bit more automated or easy can be a good idea for a micro application approach.

    Cloud Page Apps step by step

    Create your first Marketing Cloud micro application

    Implementation is very straightforward, and you can do it in few minutes:

    1. Create a simple Cloud Page (blank page with a "Hello World" will do the job for now).
    2. Publish it and copy the URL of the Cloud Page.
    3. Go to Marketing Cloud Setup -> Apps -> Installed Packages and create a New Package.
    4. Add a Marketing Cloud App Component to the Package and paste the Cloud Page URL in both Endpoint fields and Save.

    That's all. You just created your first Marketing Cloud micro application. Refresh Marketing Cloud to see it available in the main menu under the AppExchange icon. Now it's time to build up your solution to solve the business need.

    A Good application is a secure application

    Your micro application is now available from the Marketing Cloud menu. But unfortunately, it can also be accessed from any other place, as it is still just a simple Cloud Page. It is, of course, not ideal. You don't want random people to access your API-fueled solution.

    API Integration Component

    Thankfully, you can leverage the already created Installed Package to secure the micro application cleanly. To do so, add yet another Component to the Package - this time, you will need API Integration one. Select Web App integration type and paste your micro application Cloud Page URL to the Redirect URI field.

    You don't need to select anything in the Scope to secure your micro application. But if you plan on using the API calls, feel free to choose the required areas now. If you only want to leverage built-in SSJS and AMPScript functions, keep them unchecked.

    Once you save the Component, you will see that your Installed Package API Component now lists: Client Id, Client Secret, and API Base URI. Copy those, as you will need them in the next step.

    You Should Know

    After you create your Installed Package, three base URI's are available - Authentication, REST and SOAP. After the https://, all of them have a common alphanumeric string with hyphens unique to your SFMC. I copy only this part to build any endpoint necessary for the application.

    For example, for https://abcdefghi-jklmnoprst-123456.auth.marketingcloudapis.com/, the API Base URI is abcdefghi-jklmnoprst-123456.

    API Authorisation

    With the above pre-work completed, you can use SSJS or AMPScript on your Cloud Page to redirect to the v2/authorize endpoint of your Authentication Base URI before loading. It will require any visitor to log into your Marketing Cloud to load your micro application. What's even better, it will automatically load it for users already logged in (micro Single Sign-On).

    You will need to pass Client Id and Cloud Page URL (for redirect after successful login) as query parameters to your authorisation redirect. Another necessary thing is Response Type equal to code. Finally, you can pass a State. The value of this parameter will be available after the redirect. It is excellent for recognising whether someone opened your micro application before (no state) or after (available state) logging in.

    API Authentication Flow
    var appURL = 'APP_CLOUD_PAGE_URL';
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';
    var state = GUID();

    Platform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);

    API Authentication with Token

    Once your micro application refreshes after authorisation, you can get the code query string parameter with SSJS or AMPScript function and use it to make a POST API call to Authentication Base URI - this time to v2/token endpoint. As the code from the authorisation endpoint is required in the payload, the fact of receiving the token in the response will validate that the visitor is eligible to access the micro application and use it.

    API Token Authorisation Flow
    var appURL = 'APP_CLOUD_PAGE_URL';
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    var code = Platform.Request.GetQueryStringParameter('code');
    var payload = {
    grant_type: 'authorization_code',
    code: code,
    client_id: clientID,
    client_secret: clientSecret,
    redirect_uri: appURL
    };

    var response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));

    if (response.StatusCode == 200) {
    var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);
    var accessToken = parsedResponse.access_token;
    var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());
    tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);
    };

    You Should Know

    If you want to use the token for API in the context of a specific Business Unit, add account_id: businessUnitMID, to the payload to get the right token. Otherwise you will get autorization errors on API calls.

    This way, you just added a micro Single Sign-On feature that is as secure as your Marketing Cloud. And that's not all! As now only your Marketing Cloud users can access the application, you can leverage the Installed Package Access tab to control who will see your solution in the main menu.

    Now you have a secure, SSO-enabled micro application deeply integrated with Marketing Cloud ready to solve your business needs and power up your Marketing Team.

    You Should Know

    Adding this micro SSO process blocks Web Studio from loading the Cloud Page in Preview. During development, you either have to comment out the SSO or validate the changes only by publishing and checking in the Cloud Page App directly.

    It also increases the cost of using the micro application from 1 Super Message per use to 2, due to Cloud Page refresh during authorization.

    Capture your Cloud Page App usage

    We can also add a logging solution that will store session and log app use history. We will need a Data Extension (one can serve multiple Cloud Page Apps) and a bit more code around the above snippets.

    Create Data Extension with the following structure (session column being the Primary Key):

    NameDataTypeDefault ValueLengthNullable
    🔑 sessionText50No
    appNameText100Yes
    createdDateDateCurrent dateYes
    tokenText520Yes
    tokenExpireDateYes
    userNameText100Yes
    userEmailText254Yes

    As for data retention, one day for Individual Records is enough for authorisation purposes. However, you can extend it for logging history purposes. Keep in mind that the more data stored, the slower the Data Extension operations speeds. Pushing data to this table is straightforward:

    Fill Cloud Page App Logging Data Extension
    Platform.Function.UpsertData(authDE, ['session'], [state], ['appName', 'token', 'tokenExpire'], [appName, accessToken, tokenExpire]);

    It will additionally allow you to safely split your application into the front end (Cloud Page) and back end (Code Resource) to improve user experience and optimise speed and cost.

    Secured Cloud Page App Template

    By considering all the above, we get a robust and secure template for our Cloud Page Apps:

    Full Cloud Page App Template
    <script runat="server">
    /* -------------------------------------------------------------------------

    Authenticates each visitor to limit access only to SFMC logged-in users.

    1. Global Variables
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. Authentication Flow
    3.1. Authorisation
    3.2. Authentication with REST Token
    3.2.1. Build token request payload
    3.2.2. Request the token
    3.2.3. Destructure the response
    3.2.4. Get User Details
    3.2.5. Upsert Logging Data Extension
    3.2.6. Handle authentication error
    3.3. Authorisation Error

    -------------------------------------------------------------------------- */

    Platform.Load('core', '1');

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */
    /* ----------------------------------------------------------------------- */

    var debugging = false;
    var appName = 'CLOUD_APP_NAME';
    var appURL = 'APP_CLOUD_PAGE_URL';

    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';
    var authDE = 'AUTHENTICATION_DATA_EXTENSION';

    var state = Platform.Request.GetQueryStringParameter('state');

    var errorMessage = Platform.Request.GetQueryStringParameter('error');
    var errorDescription = Platform.Request.GetQueryStringParameter('error_description');
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Debugging --------------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ---------------------- 2.2. Error handling ---------------------------- */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to error page.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(errorDE, ['id', 'appName', 'errorMessage', 'errorDescription'], [GUID(), appName, error.message, error.description]);
    Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);
    };
    };

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 3. AUTHENTICATION FLOW ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 3.1. Authorization ----------------------------- */

    if (!state && !errorMessage) {
    state = GUID();
    Platform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);

    /* ---------------------- 3.2. Authentication ---------------------------- */

    } else if (state) {
    /* 3.2.1. Build token request payload */
    var code = Platform.Request.GetQueryStringParameter('code');
    var payload = {
    grant_type: 'authorization_code',
    code: code,
    client_id: clientID,
    client_secret: clientSecret,
    redirect_uri: appURL
    };
    /* 3.2.2. Request the token */
    var response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));
    /* 3.2.3. Destructure the response */
    if (response.StatusCode == 200) {
    var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);
    var accessToken = parsedResponse.access_token;
    var appScope = parsedResponse.scope;
    var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());
    tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);

    /* 3.2.4. Get User Details */
    response = HTTP.Get('https://' + clientBase + '.auth.marketingcloudapis.com/v2/userinfo', ['Authorization'], ['Bearer ' + accessToken]);
    if (debugging) debugValue('UserInfo Response', response)
    userName = Platform.Function.ParseJSON(response.Content).user.name;
    userEmail = Platform.Function.ParseJSON(response.Content).user.email;

    /* 3.2.5. Upsert Authentication Logging Data Extension */
    Platform.Function.UpsertData(authDE, ['session'], [state],
    ['appName', 'token', 'tokenExpire', 'userName', 'userEmail'],
    [appName, accessToken, tokenExpire, userName, userEmail]
    );

    /* 3.2.6. Handle authentication error */
    } else {
    handleError({message: 'Authentication Failed', description: 'Status: ' + response.StatusCode})
    };

    /* ---------------------- 3.3. Authorization Error ----------------------- */

    } else {
    handleError({message: errorMessage, description: errorDescription});
    };
    </script>

    <!-- The Cloud Page App micro SSO solution will secure anything you create below -->
    You Should Know

    Any reload done within the app (Reload/Redirect/Post via Form) should point back to Apps Cloud Page URL with 'state=' + state appended to it as a query parameter (remember to use ? if it will be the first parameter or & in another case).

    You can also leverage the session to lookup the token for API calls: Platform.Function.Lookup(authDE, 'token', 'session', state)

    To implement it, copy and paste the above code to the top of the Cloud Page used for the App. Next, change the values at the top of the code (the uppercase ones) to match your package installation and app details. That's all!

    Implementation Sum Up

    There was much information to digest, so it's time for a streamlined step by step guide from zero to hero:

    1. Logging Data Extensions
      1. In Content Builder or Email Studio create a Cloud Page App Logging Data Extension.
      2. In Content Builder or Email Studio create an Error Logging Data Extension.
      3. In both cases, one is enough for multiple Cloud Page Apps. If stored in the Shared Data Extensions folder, both can serve multiple Business Units.
    2. Cloud Page
      1. Create a new Cloud Page.
      2. Copy the URL.
    3. Installed Package
      1. Go to System -> Platform Tools -> Apps -> Installed Packages.
      2. Click New in the top right corner.
      3. Add Unique Name and Description suggesting the App's purpose.
      4. Marketing Cloud App Component.
        1. Click Add Component at the bottom.
        2. Select Marketing Cloud App and click Next.
        3. Add Unique Name and Description suggesting the App's purpose.
        4. Add Cloud Page URL copied in step 2.ii as both Login and Logout Endpoint.
        5. Click Save.
      5. API Integration Component.
        1. Click Add Component on the right side of the page.
        2. Select API Integration and click Next.
        3. Select Web App and click Next.
        4. Add Cloud Page URL copied in step 2.ii as Redirect URI.
        5. Add Scope of the App (should be minimal, can be extended later) and click Save.
      6. Copy Client Id, Client Secret and Client Base URI.
    4. Menu Unlock
      1. Refresh tab with Marketing Cloud.
      2. On the main menu pane of Marketing Cloud, hover over AppExchange to see your application.
    5. Secured Template
      1. Copy the template in the prefered language to the Cloud Page from step 2.i.
      2. Update the unique values in the variables at the top part of the template (CAPS_LOCK placeholders).
    6. Build your solution

    Learn more

    Looking for more? Check out follow up materials for added context and deeper dive:

    1. Webinar recording on Cloud Page Apps.
    2. Webinar recording on Architecting Web Solutions in SFMC.
    3. Article on Power of SFMC Code Resources.
    4. Article on SFMC AppExchange Solutions.
    5. Code Snippets on my GitHub.
    - - +

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    +

    Cloud Page Apps: what and why

    +

    When out-of-the-box features are not enough

    +

    Salesforce Marketing Cloud offers a multitude of options. With all the Studios, Builders, and other Salesforce-ecosystem cross-sells, you can deliver nearly anything. Nearly.

    +

    There will always be some business processes or requirements that are too niche or too unique to be covered out-of-the-box. Sometimes they can be delivered with what is available after some compromises. Sometimes only custom development can help.

    +

    Depending on the use case and company resources, you can overcome such challenges in two ways. By shopping at AppExchange - Salesforce App Store with 3rd Party solutions - or by building a custom application connected to Marketing Cloud with APIs (for example, leveraging yet another Salesforce product - Heroku).

    +

    AppExchange might be a great idea if you can find a product solving your problem, but it will add a recurring cost to your budget. On the other hand, a fully-fledged custom application might deliver precisely what you need but create considerable up-front cost (in either money for external developers or time for an in-house team) and require maintenance.

    +

    There is, however, the third path. One that can be perfect if you have a necessary but relatively small requirement for internally used power-up and would instead go lean on both budget and time — Marketing Cloud micro application.

    +

    Out-of-the-box approach to out-of-the-box feature

    +

    Marketing Cloud micro application offers AppExchange-style deep integration with Marketing Cloud platform and solution flexibility of custom development. In short, it is an application hosted on a Cloud Page and available via the main menu of Marketing Cloud. A Cloud Page App.

    +

    The good? You can use Marketing Cloud programmatic languages (SSJS and AMPScript) with all their nifty built-in functions to control the assets and behaviours of the SFMC platform and connected Sales & Service Clouds. You can also leverage the APIs to gather even more power and pull external logic and data. All this without having to care about hosting, scaling and integration. Available directly from the Marketing Cloud menu. And cost? Just a super message for loading a Cloud Page.

    +

    The bad? It is suitable for relatively simple apps. Think about a single front-end page powered by an SSJS or AMPScript backend on a Code Resource. Of course, you can try to build something more complex, but you may quickly get into a place where the whole endeavour would have been easier with an outside-hosted application.

    +

    Build your dream

    +

    So what can you do with such a solution? Possibilities are endless, but to share a few use cases:

    +
      +
    • Marketing Cloud Asset Viewer that allows you to quickly locate, for example, a Data Extension or Content asset.
    • +
    • Data Extension Analyzer for quick data analysis or even visualisation of values from a selected Data Extension.
    • +
    • KPI Dashboard displaying the most critical data for understanding your communication's current state - or even related data from Sales or Service Cloud imported using functions enabled by Marketing Cloud Connect.
    • +
    • Deliverability Dashboard pulling data from Marketing Cloud and external deliverability monitoring and alerting tools.
    • +
    • Documentation or FAQ related to your company processes and best practices that everyone should follow when building customer experience through Marketing Cloud.
    • +
    • Templated Journey creator to deploy tested flows for most used campaigns in a single click.
    • +
    +

    Anything related to Marketing Cloud that you wish could be a bit more automated or easy can be a good idea for a micro application approach.

    +

    Cloud Page Apps step by step

    +

    Create your first Marketing Cloud micro application

    +

    Implementation is very straightforward, and you can do it in few minutes:

    +
      +
    1. Create a simple Cloud Page (blank page with a "Hello World" will do the job for now).
    2. +
    3. Publish it and copy the URL of the Cloud Page.
    4. +
    5. Go to Marketing Cloud Setup -> Apps -> Installed Packages and create a New Package.
    6. +
    7. Add a Marketing Cloud App Component to the Package and paste the Cloud Page URL in both Endpoint fields and Save.
    8. +
    +

    That's all. You just created your first Marketing Cloud micro application. Refresh Marketing Cloud to see it available in the main menu under the AppExchange icon. Now it's time to build up your solution to solve the business need.

    +

    A Good application is a secure application

    +

    Your micro application is now available from the Marketing Cloud menu. But unfortunately, it can also be accessed from any other place, as it is still just a simple Cloud Page. It is, of course, not ideal. You don't want random people to access your API-fueled solution.

    +

    API Integration Component

    +

    Thankfully, you can leverage the already created Installed Package to secure the micro application cleanly. To do so, add yet another Component to the Package - this time, you will need API Integration one. Select Web App integration type and paste your micro application Cloud Page URL to the Redirect URI field.

    +

    You don't need to select anything in the Scope to secure your micro application. But if you plan on using the API calls, feel free to choose the required areas now. If you only want to leverage built-in SSJS and AMPScript functions, keep them unchecked.

    +

    Once you save the Component, you will see that your Installed Package API Component now lists: Client Id, Client Secret, and API Base URI. Copy those, as you will need them in the next step.

    +
    You Should Know

    After you create your Installed Package, three base URI's are available - Authentication, REST and SOAP. After the https://, all of them have a common alphanumeric string with hyphens unique to your SFMC. I copy only this part to build any endpoint necessary for the application.

    For example, for https://abcdefghi-jklmnoprst-123456.auth.marketingcloudapis.com/, the API Base URI is abcdefghi-jklmnoprst-123456.

    +

    API Authorisation

    +

    With the above pre-work completed, you can use SSJS or AMPScript on your Cloud Page to redirect to the v2/authorize endpoint of your Authentication Base URI before loading. It will require any visitor to log into your Marketing Cloud to load your micro application. What's even better, it will automatically load it for users already logged in (micro Single Sign-On).

    +

    You will need to pass Client Id and Cloud Page URL (for redirect after successful login) as query parameters to your authorisation redirect. Another necessary thing is Response Type equal to code. Finally, you can pass a State. The value of this parameter will be available after the redirect. It is excellent for recognising whether someone opened your micro application before (no state) or after (available state) logging in.

    +
    API Authentication Flow
    var appURL = 'APP_CLOUD_PAGE_URL';
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';
    var state = GUID();

    Platform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);
    +

    API Authentication with Token

    +

    Once your micro application refreshes after authorisation, you can get the code query string parameter with SSJS or AMPScript function and use it to make a POST API call to Authentication Base URI - this time to v2/token endpoint. As the code from the authorisation endpoint is required in the payload, the fact of receiving the token in the response will validate that the visitor is eligible to access the micro application and use it.

    +
    API Token Authorisation Flow
    var appURL = 'APP_CLOUD_PAGE_URL';
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    var code = Platform.Request.GetQueryStringParameter('code');
    var payload = {
    grant_type: 'authorization_code',
    code: code,
    client_id: clientID,
    client_secret: clientSecret,
    redirect_uri: appURL
    };

    var response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));

    if (response.StatusCode == 200) {
    var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);
    var accessToken = parsedResponse.access_token;
    var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());
    tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);
    };

    You Should Know

    If you want to use the token for API in the context of a specific Business Unit, add account_id: businessUnitMID, to the payload to get the right token. Otherwise you will get autorization errors on API calls.

    +

    This way, you just added a micro Single Sign-On feature that is as secure as your Marketing Cloud. And that's not all! As now only your Marketing Cloud users can access the application, you can leverage the Installed Package Access tab to control who will see your solution in the main menu.

    +

    Now you have a secure, SSO-enabled micro application deeply integrated with Marketing Cloud ready to solve your business needs and power up your Marketing Team.

    +
    You Should Know

    Adding this micro SSO process blocks Web Studio from loading the Cloud Page in Preview. During development, you either have to comment out the SSO or validate the changes only by publishing and checking in the Cloud Page App directly.

    It also increases the cost of using the micro application from 1 Super Message per use to 2, due to Cloud Page refresh during authorization.

    +

    Capture your Cloud Page App usage

    +

    We can also add a logging solution that will store session and log app use history. We will need a Data Extension (one can serve multiple Cloud Page Apps) and a bit more code around the above snippets.

    +

    Create Data Extension with the following structure (session column being the Primary Key):

    +
    NameDataTypeDefault ValueLengthNullable
    🔑 sessionText50No
    appNameText100Yes
    createdDateDateCurrent dateYes
    tokenText520Yes
    tokenExpireDateYes
    userNameText100Yes
    userEmailText254Yes
    +

    As for data retention, one day for Individual Records is enough for authorisation purposes. However, you can extend it for logging history purposes. Keep in mind that the more data stored, the slower the Data Extension operations speeds. Pushing data to this table is straightforward:

    +
    Fill Cloud Page App Logging Data Extension
    Platform.Function.UpsertData(authDE, ['session'], [state], ['appName', 'token', 'tokenExpire'], [appName, accessToken, tokenExpire]);
    +

    It will additionally allow you to safely split your application into the front end (Cloud Page) and back end (Code Resource) to improve user experience and optimise speed and cost.

    +

    Secured Cloud Page App Template

    +

    By considering all the above, we get a robust and secure template for our Cloud Page Apps:

    +
    Full Cloud Page App Template
    <script runat="server">
    /* -------------------------------------------------------------------------

    Authenticates each visitor to limit access only to SFMC logged-in users.

    1. Global Variables
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. Authentication Flow
    3.1. Authorisation
    3.2. Authentication with REST Token
    3.2.1. Build token request payload
    3.2.2. Request the token
    3.2.3. Destructure the response
    3.2.4. Get User Details
    3.2.5. Upsert Logging Data Extension
    3.2.6. Handle authentication error
    3.3. Authorisation Error

    -------------------------------------------------------------------------- */

    Platform.Load('core', '1');

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */
    /* ----------------------------------------------------------------------- */

    var debugging = false;
    var appName = 'CLOUD_APP_NAME';
    var appURL = 'APP_CLOUD_PAGE_URL';

    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';
    var authDE = 'AUTHENTICATION_DATA_EXTENSION';

    var state = Platform.Request.GetQueryStringParameter('state');

    var errorMessage = Platform.Request.GetQueryStringParameter('error');
    var errorDescription = Platform.Request.GetQueryStringParameter('error_description');
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Debugging --------------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ---------------------- 2.2. Error handling ---------------------------- */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to error page.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(errorDE, ['id', 'appName', 'errorMessage', 'errorDescription'], [GUID(), appName, error.message, error.description]);
    Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);
    };
    };

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 3. AUTHENTICATION FLOW ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 3.1. Authorization ----------------------------- */

    if (!state && !errorMessage) {
    state = GUID();
    Platform.Response.Redirect('https://' + clientBase + '.auth.marketingcloudapis.com/v2/authorize?response_type=code&client_id=' + clientID + '&redirect_uri=' + appURL + '&state=' + state);

    /* ---------------------- 3.2. Authentication ---------------------------- */

    } else if (state) {
    /* 3.2.1. Build token request payload */
    var code = Platform.Request.GetQueryStringParameter('code');
    var payload = {
    grant_type: 'authorization_code',
    code: code,
    client_id: clientID,
    client_secret: clientSecret,
    redirect_uri: appURL
    };
    /* 3.2.2. Request the token */
    var response = HTTP.Post('https://' + clientBase + '.auth.marketingcloudapis.com/v2/token', 'application/json', Stringify(payload));
    /* 3.2.3. Destructure the response */
    if (response.StatusCode == 200) {
    var parsedResponse = Platform.Function.ParseJSON(response.Response[0]);
    var accessToken = parsedResponse.access_token;
    var appScope = parsedResponse.scope;
    var tokenExpire = Platform.Function.SystemDateToLocalDate(Platform.Function.Now());
    tokenExpire.setMinutes(tokenExpire.getMinutes() + 18);

    /* 3.2.4. Get User Details */
    response = HTTP.Get('https://' + clientBase + '.auth.marketingcloudapis.com/v2/userinfo', ['Authorization'], ['Bearer ' + accessToken]);
    if (debugging) debugValue('UserInfo Response', response)
    userName = Platform.Function.ParseJSON(response.Content).user.name;
    userEmail = Platform.Function.ParseJSON(response.Content).user.email;

    /* 3.2.5. Upsert Authentication Logging Data Extension */
    Platform.Function.UpsertData(authDE, ['session'], [state],
    ['appName', 'token', 'tokenExpire', 'userName', 'userEmail'],
    [appName, accessToken, tokenExpire, userName, userEmail]
    );

    /* 3.2.6. Handle authentication error */
    } else {
    handleError({message: 'Authentication Failed', description: 'Status: ' + response.StatusCode})
    };

    /* ---------------------- 3.3. Authorization Error ----------------------- */

    } else {
    handleError({message: errorMessage, description: errorDescription});
    };
    </script>

    <!-- The Cloud Page App micro SSO solution will secure anything you create below -->
    You Should Know

    Any reload done within the app (Reload/Redirect/Post via Form) should point back to Apps Cloud Page URL with 'state=' + state appended to it as a query parameter (remember to use ? if it will be the first parameter or & in another case).

    You can also leverage the session to lookup the token for API calls: Platform.Function.Lookup(authDE, 'token', 'session', state)

    +

    To implement it, copy and paste the above code to the top of the Cloud Page used for the App. Next, change the values at the top of the code (the uppercase ones) to match your package installation and app details. That's all!

    +

    Implementation Sum Up

    +

    There was much information to digest, so it's time for a streamlined step by step guide from zero to hero:

    +
      +
    1. Logging Data Extensions +
        +
      1. In Content Builder or Email Studio create a Cloud Page App Logging Data Extension.
      2. +
      3. In Content Builder or Email Studio create an Error Logging Data Extension.
      4. +
      5. In both cases, one is enough for multiple Cloud Page Apps. If stored in the Shared Data Extensions folder, both can serve multiple Business Units.
      6. +
      +
    2. +
    3. Cloud Page +
        +
      1. Create a new Cloud Page.
      2. +
      3. Copy the URL.
      4. +
      +
    4. +
    5. Installed Package +
        +
      1. Go to System -> Platform Tools -> Apps -> Installed Packages.
      2. +
      3. Click New in the top right corner.
      4. +
      5. Add Unique Name and Description suggesting the App's purpose.
      6. +
      7. Marketing Cloud App Component. +
          +
        1. Click Add Component at the bottom.
        2. +
        3. Select Marketing Cloud App and click Next.
        4. +
        5. Add Unique Name and Description suggesting the App's purpose.
        6. +
        7. Add Cloud Page URL copied in step 2.ii as both Login and Logout Endpoint.
        8. +
        9. Click Save.
        10. +
        +
      8. +
      9. API Integration Component. +
          +
        1. Click Add Component on the right side of the page.
        2. +
        3. Select API Integration and click Next.
        4. +
        5. Select Web App and click Next.
        6. +
        7. Add Cloud Page URL copied in step 2.ii as Redirect URI.
        8. +
        9. Add Scope of the App (should be minimal, can be extended later) and click Save.
        10. +
        +
      10. +
      11. Copy Client Id, Client Secret and Client Base URI.
      12. +
      +
    6. +
    7. Menu Unlock +
        +
      1. Refresh tab with Marketing Cloud.
      2. +
      3. On the main menu pane of Marketing Cloud, hover over AppExchange to see your application.
      4. +
      +
    8. +
    9. Secured Template +
        +
      1. Copy the template in the prefered language to the Cloud Page from step 2.i.
      2. +
      3. Update the unique values in the variables at the top part of the template (CAPS_LOCK placeholders).
      4. +
      +
    10. +
    11. Build your solution
    12. +
    +

    Learn more

    +

    Looking for more? Check out follow up materials for added context and deeper dive:

    +
      +
    1. Webinar recording on Cloud Page Apps.
    2. +
    3. Webinar recording on Architecting Web Solutions in SFMC.
    4. +
    5. Article on Power of SFMC Code Resources.
    6. +
    7. Article on SFMC AppExchange Solutions.
    8. +
    9. Code Snippets on my GitHub.
    10. +
    \ No newline at end of file diff --git a/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/index.html b/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/index.html index 6bd7a1891..21dd4afdd 100644 --- a/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/index.html +++ b/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/index.html @@ -1,22 +1,57 @@ - + - -MobileConnect Phone Change | Mateusz Dąbrowski + +MobileConnect Phone Change | Mateusz Dąbrowski - - - + + + -
    -

    MobileConnect Phone Change

    Control your MobileConnect data with hidden _MobileAddress features.

    Problem with changing MobileConnect Mobile Number

    There is a lot to like about the Salesforce Marketing Cloud Mobile Connect, but Contact management is not the one.

    One of the problems is managing the Mobile Phone Number. It is a crucial data point because we are using it to send the SMS and because it is the key value for many of the MobileConnect Data Views.

    There are many scenarios when we might want to update the user's Mobile Number. Be it wrong data in the initial load or client's request to change the number.

    The official approach is to import the contact with the new Mobile Number. It, however, won't overwrite the previous phone. It will merely add a new one to the record with higher priority. Not perfect.

    So what you can do? Leverage the _MobileAddress Data View along with simple SSJS snippet and force Marketing Cloud to do what you want it to do.

    You Should Know

    The solution shown below is working perfectly fine right now. However, remember that Salesforce considers _MobileAddress Data View as legacy and unsupported, so be sure to make the first run on test data to check whether it is still working correctly.

    Considering how intertwined this Data View still is with MobileConnect, I don't expect changes anytime soon.

    Solution

    _MobileAddress Data View is unique, as it can be modified using SSJS - this is not the case with most other Data Views. We can make use of this by using Rows.Update function.

    We will need:

    • Contact ID - you can check it by going to MobileConnect » Manage Contacts » clicking a Contact Key » Attributes tab. It will be in the first table.
    • New Mobile Number - must be in the MobileConnect format with the dialling code prefix (without the + or 00). For example, Poland has +48 dialling code and nine-digit numbers, so the correct form is 48123456789.

    With that two information, Init the Data View and update it. Remember to load the Core Library.

    Change Mobile Number of a single Contact
    <script runat="server">
    Platform.Load('Core','1');
    var contactId = 123456789;
    var mobileAddressDataView = DataExtension.Init('_MobileAddress');
    var result = mobileAddressDataView.Rows.Update({_MobileNumber: '48123456789'}, ['_ContactID'], [contactId]);
    </script>

    That's it. Running this snippet - even in a Cloud Page or Code Resource - will change the Mobile Number assigned to the Contact. Just be sure to publish the page and load it. The Web Studio Preview won't work.

    You Should Know

    If the new Mobile Number has different dialling code, be sure to also update _CountryCode field with appropriate two-letter code (for example, PL)

    You can do it in one line:

    mobileAddressDataView.Rows.Update({_MobileNumber:'48123456789',_CountryCode:'PL'},['_ContactID'],[contactId]);

    Options

    You can adapt the above script to better suit your needs.

    Change or Merge Contact ID

    You are not limited to Mobile Number change in MobileConnect with this solution. You can leverage _MobileAddress Data View to even merge MobileConnect contacts.

    Use cases?

    • You might have two contacts with different phone numbers that you have identified to be the same person (one tied to personal and second to work number). To optimize the contact count, you can make a merge.
    • Your client opted-in for Keyword using SMS. It created a Contact with the phone number as Contact Key. Later your CRM pushed this contact to Marketing Cloud with proper Contact Key. Merge it to have the engagement data adequately allocated.

    To do this, you search by Contact ID of the to-be-merged record and update it to the one you want to use after the merge.

    Change Contact ID of a single Contact
    <script runat="server">
    Platform.Load('Core','1');
    var currentContactId = 123456789;
    var targetContactId = 987654321;
    var mobileAddressDataView = DataExtension.Init('_MobileAddress');
    var result = mobileAddressDataView.Rows.Update({_ContactID: targetContactId}, ['_ContactID'], [currentContactId]);
    </script>
    You Should Know

    You cannot merge two Contacts with the same Mobile Number. It is why it is crucial to leverage this snippet before you import new Contacts into MobileConnect.

    You can, however, change the Mobile Number before merging. For example, by adding 0 before the dialling code. The phone won't be correct, but you can lower priority. Engagement and Subscription history is assigned to Mobile Number, not specific Contact ID, so as long as the merged record will keep the original number, it will also have its history.

    Add, Lookup, Remove

    You are not limited to updating. You can also leverage other SSJS functions to add, lookup or remove MobileConnect Contacts. Those might be great for enhancing your Preference Center or leveraging Automation Studio.

    Self-serve it

    Above snippets are great for single cases you want to cover, but you might consider using them as a part of your Preference Center and allow your customer to change their phone number themselves.

    Be sure, however, to normalize the number provided manually by the client for it to be numbers only with appropriate dialling code and country code.

    Automate it

    You can also leverage the snippet within an Automation Studio using Data Extension as a batch data source and Script Activity for processing. Pack the snippet within a for loop and make a more significant change to your MobileConnect data.

    You Should Know

    Technically you can use this solution to modify any field of _MobileAddress. Due to the unsupported status of this Data View, I would recommend using Contact Builder whenever it is enough for your use case. It allows you to change everything but the Mobile Number and Contact ID.

    - - +

    MobileConnect Phone Change

    Control your MobileConnect data with hidden _MobileAddress features.

    +

    Problem with changing MobileConnect Mobile Number

    +

    There is a lot to like about the Salesforce Marketing Cloud Mobile Connect, but Contact management is not the one.

    +

    One of the problems is managing the Mobile Phone Number. It is a crucial data point because we are using it to send the SMS and because it is the key value for many of the MobileConnect Data Views.

    +

    There are many scenarios when we might want to update the user's Mobile Number. Be it wrong data in the initial load or client's request to change the number.

    +

    The official approach is to import the contact with the new Mobile Number. It, however, won't overwrite the previous phone. It will merely add a new one to the record with higher priority. Not perfect.

    +

    So what you can do? Leverage the _MobileAddress Data View along with simple SSJS snippet and force Marketing Cloud to do what you want it to do.

    +
    You Should Know

    The solution shown below is working perfectly fine right now. However, remember that Salesforce considers _MobileAddress Data View as legacy and unsupported, so be sure to make the first run on test data to check whether it is still working correctly.

    Considering how intertwined this Data View still is with MobileConnect, I don't expect changes anytime soon.

    +

    Solution

    +

    _MobileAddress Data View is unique, as it can be modified using SSJS - this is not the case with most other Data Views. We can make use of this by using Rows.Update function.

    +

    We will need:

    +
      +
    • Contact ID - you can check it by going to MobileConnect » Manage Contacts » clicking a Contact Key » Attributes tab. It will be in the first table.
    • +
    • New Mobile Number - must be in the MobileConnect format with the dialling code prefix (without the + or 00). For example, Poland has +48 dialling code and nine-digit numbers, so the correct form is 48123456789.
    • +
    +

    With that two information, Init the Data View and update it. Remember to load the Core Library.

    +
    Change Mobile Number of a single Contact
    <script runat="server">
    Platform.Load('Core','1');
    var contactId = 123456789;
    var mobileAddressDataView = DataExtension.Init('_MobileAddress');
    var result = mobileAddressDataView.Rows.Update({_MobileNumber: '48123456789'}, ['_ContactID'], [contactId]);
    </script>
    +

    That's it. Running this snippet - even in a Cloud Page or Code Resource - will change the Mobile Number assigned to the Contact. Just be sure to publish the page and load it. The Web Studio Preview won't work.

    +
    You Should Know

    If the new Mobile Number has different dialling code, be sure to also update _CountryCode field with appropriate two-letter code (for example, PL)

    You can do it in one line:

    mobileAddressDataView.Rows.Update({_MobileNumber:'48123456789',_CountryCode:'PL'},['_ContactID'],[contactId]);
    +

    Options

    +

    You can adapt the above script to better suit your needs.

    +

    Change or Merge Contact ID

    +

    You are not limited to Mobile Number change in MobileConnect with this solution. You can leverage _MobileAddress Data View to even merge MobileConnect contacts.

    +

    Use cases?

    +
      +
    • You might have two contacts with different phone numbers that you have identified to be the same person (one tied to personal and second to work number). To optimize the contact count, you can make a merge.
    • +
    • Your client opted-in for Keyword using SMS. It created a Contact with the phone number as Contact Key. Later your CRM pushed this contact to Marketing Cloud with proper Contact Key. Merge it to have the engagement data adequately allocated.
    • +
    +

    To do this, you search by Contact ID of the to-be-merged record and update it to the one you want to use after the merge.

    +
    Change Contact ID of a single Contact
    <script runat="server">
    Platform.Load('Core','1');
    var currentContactId = 123456789;
    var targetContactId = 987654321;
    var mobileAddressDataView = DataExtension.Init('_MobileAddress');
    var result = mobileAddressDataView.Rows.Update({_ContactID: targetContactId}, ['_ContactID'], [currentContactId]);
    </script>
    +
    You Should Know

    You cannot merge two Contacts with the same Mobile Number. It is why it is crucial to leverage this snippet before you import new Contacts into MobileConnect.

    You can, however, change the Mobile Number before merging. For example, by adding 0 before the dialling code. The phone won't be correct, but you can lower priority. Engagement and Subscription history is assigned to Mobile Number, not specific Contact ID, so as long as the merged record will keep the original number, it will also have its history.

    +

    Add, Lookup, Remove

    +

    You are not limited to updating. You can also leverage other SSJS functions to add, lookup or remove MobileConnect Contacts. Those might be great for enhancing your Preference Center or leveraging Automation Studio.

    +

    Self-serve it

    +

    Above snippets are great for single cases you want to cover, but you might consider using them as a part of your Preference Center and allow your customer to change their phone number themselves.

    +

    Be sure, however, to normalize the number provided manually by the client for it to be numbers only with appropriate dialling code and country code.

    +

    Automate it

    +

    You can also leverage the snippet within an Automation Studio using Data Extension as a batch data source and Script Activity for processing. Pack the snippet within a for loop and make a more significant change to your MobileConnect data.

    +
    You Should Know

    Technically you can use this solution to modify any field of _MobileAddress. Due to the unsupported status of this Data View, I would recommend using Contact Builder whenever it is enough for your use case. It allows you to change everything but the Mobile Number and Contact ID.

    \ No newline at end of file diff --git a/docs/ssjs/snippets/ssjs-script-template/index.html b/docs/ssjs/snippets/ssjs-script-template/index.html index 45189619a..4217ddf16 100644 --- a/docs/ssjs/snippets/ssjs-script-template/index.html +++ b/docs/ssjs/snippets/ssjs-script-template/index.html @@ -1,22 +1,65 @@ - + - -SSJS Script Template | Mateusz Dąbrowski + +SSJS Script Template | Mateusz Dąbrowski - - - + + + -
    -

    SSJS Script Template

    Jumpstart your coding with best practice fueled SSJS Template.

    Some like to start with a blank slate. Some - from a well-crafted template. I'm in the #TeamTemplate, and here you can see my SSJS one. Check the bottom of this page for a walkthrough.

    SSJS Template Code

    <script runat="server">
    /* -------------------------------------------------------------------------

    Short description of the purpose of the script.

    1. Global Variables
    1.1. API Endpoint
    1.2. Error Handling
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. {{Section Name}}
    ...

    -------------------------------------------------------------------------- */

    Platform.Load('core', '1');
    // Uncomment below if you will be using SOAP API via WSProxy in the script
    // var soap = new Script.Util.WSProxy();

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */
    /* ----------------------------------------------------------------------- */

    var endpoint, headerNames, headerValues, payload, response, parsedResponse;
    var debugging = false;

    /* ---------------------- 1.1. API Endpoint------------------------------- */
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    /* -------------------- 1.2. Error Handling------------------------------- */
    var scriptName = 'SCRIPT_NAME';
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Debugging --------------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ---------------------- 2.2. Error handling ---------------------------- */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to error page.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);
    Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);
    };
    };

    try {
    /* ----------------------------------------------------------------------- */
    /* ----------------------- 3. {{SECTION NAME}} --------------------------- */
    /* ----------------------------------------------------------------------- */

    /**
    * There can be just one section for simpler scripts, or there can be multiple.
    * As your code grow, split it into separate numbered sections for easier navigation.
    * Always try to make each section coherent with code logic to make the split meaningful.
    */

    // if (debugging) debugValue('{{API Call Name}} Response', response);

    } catch (error) {
    handleError(error);
    }

    </script>

    SSJS Template Description

    Table of Contents

        /* -------------------------------------------------------------------------

    Short description of the purpose of the script.

    1. Global Variables
    1.1. API Endpoint
    1.2. Error Handling
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. {{Section Name}}
    ...

    -------------------------------------------------------------------------- */

    The opening section of the template does two things:

    1. Briefly informs everyone what the purpose of this script is
    2. Describes the high-level structure of the script to allow for quick navigation

    Read more on that approach in my SSJS Style Guide.

    Global Variables

        /* ----------------------------------------------------------------------- */
    /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */
    /* ----------------------------------------------------------------------- */

    var endpoint, headerNames, headerValues, payload, response, parsedResponse;
    var debugging = false;

    /* ---------------------- 1.1. API Endpoint------------------------------- */
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    /* -------------------- 1.2. Error Handling------------------------------- */
    var scriptName = 'SCRIPT_NAME';
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';

    This section is responsible for storing all key variables. There are two main types I like to keep here:

    Multiuse empty variables

    var endpoint, headerNames, headerValues, payload, response, parsedResponse;

    In this category, you will find variables used multiple times within various parts of the script, but their specific values have too short lifespan to warrant a separate variable.

    By declaring them here, I don't have to use var later in the script, and therefore I don't have to worry about the order of the code if I make some changes during the refactoring phase.

    There is also a second reason - defining them before the try/catch block, even without any value, will allow accessing its value after that block. Read more about that in Debugging & Error Handling.

    Customizable variables

        var debugging = false;

    /* ---------------------- 1.1. API Endpoint------------------------------- */
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    /* -------------------- 1.2. Error Handling------------------------------- */
    var scriptName = 'SCRIPT_NAME';
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';

    The second type I store here are customizable global variables:

    • changing from script to script or
    • controlling the script's behaviour (like configurational ones or the debugging variable described in detail here)

    The template contains the API Endpoint section that I frequently use, but if your script does not need it - delete it to optimize and simplify the code.

    Helper Functions

        /* ----------------------------------------------------------------------- */
    /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Debugging --------------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ---------------------- 2.2. Error handling ---------------------------- */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to error page.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);
    Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);
    };
    };

    In this section, I keep all the helper functions used multiple times in the script or are battle-tested and shared across various scripts.

    In the template, you can find my two favourite ones that I use in every single script.

    To learn more about them, check out detailed descriptions of debugValue and handleError functions.

    You Should Know

    If the script will be used in JSON Code Resource backend I modify those two functions a bit by:

    1. Changing the debugValue Write to: Write(' --- ' + description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + ' --- '); as break line tag will not work.

    2. Removing the Platform.Response.Redirect from handleError as we don't want backend redirects. The errorURL variable follows suit.

    In many cross-cloud scenarios I also use AMPScript runner, but as it is more use case specific solution, I don't keep it in base template.

    I prefix all functions with documentation comments.

    Script Body

        try {
    /* ----------------------------------------------------------------------- */
    /* ----------------------- 3. {{SECTION NAME}} --------------------------- */
    /* ----------------------------------------------------------------------- */

    /**
    * There can be just one section for simpler scripts, or there can be multiple.
    * As your code grow, split it into separate numbered sections for easier navigation.
    * Always try to make each section coherent with code logic to make the split meaningful.
    */

    } catch (error) {
    handleError(error);
    }

    The final part of the template is where I'm adding the main part of the script. It's wrapped in try/catch (more on that here) and - if the script is long - split into sections.

    - - +

    SSJS Script Template

    Jumpstart your coding with best practice fueled SSJS Template.

    +

    Some like to start with a blank slate. Some - from a well-crafted template. I'm in the #TeamTemplate, and here you can see my SSJS one. Check the bottom of this page for a walkthrough.

    +

    SSJS Template Code

    +
    <script runat="server">
    /* -------------------------------------------------------------------------

    Short description of the purpose of the script.

    1. Global Variables
    1.1. API Endpoint
    1.2. Error Handling
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. {{Section Name}}
    ...

    -------------------------------------------------------------------------- */

    Platform.Load('core', '1');
    // Uncomment below if you will be using SOAP API via WSProxy in the script
    // var soap = new Script.Util.WSProxy();

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */
    /* ----------------------------------------------------------------------- */

    var endpoint, headerNames, headerValues, payload, response, parsedResponse;
    var debugging = false;

    /* ---------------------- 1.1. API Endpoint------------------------------- */
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    /* -------------------- 1.2. Error Handling------------------------------- */
    var scriptName = 'SCRIPT_NAME';
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';

    /* ----------------------------------------------------------------------- */
    /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Debugging --------------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ---------------------- 2.2. Error handling ---------------------------- */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to error page.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);
    Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);
    };
    };

    try {
    /* ----------------------------------------------------------------------- */
    /* ----------------------- 3. {{SECTION NAME}} --------------------------- */
    /* ----------------------------------------------------------------------- */

    /**
    * There can be just one section for simpler scripts, or there can be multiple.
    * As your code grow, split it into separate numbered sections for easier navigation.
    * Always try to make each section coherent with code logic to make the split meaningful.
    */

    // if (debugging) debugValue('{{API Call Name}} Response', response);

    } catch (error) {
    handleError(error);
    }

    </script>
    +

    SSJS Template Description

    +

    Table of Contents

    +
        /* -------------------------------------------------------------------------

    Short description of the purpose of the script.

    1. Global Variables
    1.1. API Endpoint
    1.2. Error Handling
    2. Helper Functions
    2.1. Debugging
    2.2. Error handling
    3. {{Section Name}}
    ...

    -------------------------------------------------------------------------- */
    +

    The opening section of the template does two things:

    +
      +
    1. Briefly informs everyone what the purpose of this script is
    2. +
    3. Describes the high-level structure of the script to allow for quick navigation
    4. +
    +

    Read more on that approach in my SSJS Style Guide.

    +

    Global Variables

    +
        /* ----------------------------------------------------------------------- */
    /* ---------------------- 1. GLOBAL VARIABLES ---------------------------- */
    /* ----------------------------------------------------------------------- */

    var endpoint, headerNames, headerValues, payload, response, parsedResponse;
    var debugging = false;

    /* ---------------------- 1.1. API Endpoint------------------------------- */
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    /* -------------------- 1.2. Error Handling------------------------------- */
    var scriptName = 'SCRIPT_NAME';
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';
    +

    This section is responsible for storing all key variables. There are two main types I like to keep here:

    +

    Multiuse empty variables

    +
    var endpoint, headerNames, headerValues, payload, response, parsedResponse;
    +

    In this category, you will find variables used multiple times within various parts of the script, but their specific values have too short lifespan to warrant a separate variable.

    +

    By declaring them here, I don't have to use var later in the script, and therefore I don't have to worry about the order of the code if I make some changes during the refactoring phase.

    +

    There is also a second reason - defining them before the try/catch block, even without any value, will allow accessing its value after that block. Read more about that in Debugging & Error Handling.

    +

    Customizable variables

    +
        var debugging = false;

    /* ---------------------- 1.1. API Endpoint------------------------------- */
    var clientID = 'CLIENT_ID';
    var clientSecret = 'CLIENT_SECRET';
    var clientBase = 'API_BASE_URI';

    /* -------------------- 1.2. Error Handling------------------------------- */
    var scriptName = 'SCRIPT_NAME';
    var errorDE = 'ERROR_DATA_EXTENSION';
    var errorURL = 'ERROR_CLOUD_PAGE_URL';
    +

    The second type I store here are customizable global variables:

    +
      +
    • changing from script to script or
    • +
    • controlling the script's behaviour (like configurational ones or the debugging variable described in detail here)
    • +
    +

    The template contains the API Endpoint section that I frequently use, but if your script does not need it - delete it to optimize and simplify the code.

    +

    Helper Functions

    +
        /* ----------------------------------------------------------------------- */
    /* ---------------------- 2. HELPER FUNCTIONS ---------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ---------------------- 2.1. Debugging --------------------------------- */

    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ---------------------- 2.2. Error handling ---------------------------- */

    /**
    * @function handleError
    * @description Adds the error with context to error logging Data Extension and redirects to error page.
    * @param {Object} error - The caught error object. Can come from the try/catch block or be manually created.
    * @param {string} error.message - First error key stores short error message describing the issue.
    * @param {string} error.description - Second error key stores detailed error path helping with root cause analysis
    */
    function handleError(error) {
    if (debugging) {
    debugValue('Found error', error);
    } else {
    // Remember that if your Logging Data Extension is in Shared Folder, you need to add the "ENT." prefix to name
    Platform.Function.InsertData(errorDE, ['id', 'scriptName', 'errorMessage', 'errorDescription'], [GUID(), scriptName, error.message, error.description]);
    Platform.Response.Redirect(errorURL + '?error=' + error.message + '&error_description=' + error.description);
    };
    };
    +

    In this section, I keep all the helper functions used multiple times in the script or are battle-tested and shared across various scripts.

    +

    In the template, you can find my two favourite ones that I use in every single script.

    +

    To learn more about them, check out detailed descriptions of debugValue and handleError functions.

    +
    You Should Know

    If the script will be used in JSON Code Resource backend I modify those two functions a bit by:

      +
    1. +

      Changing the debugValue Write to: Write(' --- ' + description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + ' --- '); as break line tag will not work.

      +
    2. +
    3. +

      Removing the Platform.Response.Redirect from handleError as we don't want backend redirects. The errorURL variable follows suit.

      +
    4. +
    +

    In many cross-cloud scenarios I also use AMPScript runner, but as it is more use case specific solution, I don't keep it in base template.

    +

    I prefix all functions with documentation comments.

    +

    Script Body

    +
        try {
    /* ----------------------------------------------------------------------- */
    /* ----------------------- 3. {{SECTION NAME}} --------------------------- */
    /* ----------------------------------------------------------------------- */

    /**
    * There can be just one section for simpler scripts, or there can be multiple.
    * As your code grow, split it into separate numbered sections for easier navigation.
    * Always try to make each section coherent with code logic to make the split meaningful.
    */

    } catch (error) {
    handleError(error);
    }
    +

    The final part of the template is where I'm adding the main part of the script. It's wrapped in try/catch (more on that here) and - if the script is long - split into sections.

    \ No newline at end of file diff --git a/docs/ssjs/ssjs-if-and-switch/index.html b/docs/ssjs/ssjs-if-and-switch/index.html index 744038ce7..3f295f571 100644 --- a/docs/ssjs/ssjs-if-and-switch/index.html +++ b/docs/ssjs/ssjs-if-and-switch/index.html @@ -1,23 +1,79 @@ - + - -SSJS If & Switch | Mateusz Dąbrowski + +SSJS If & Switch | Mateusz Dąbrowski - - - + + + -
    -

    SSJS If & Switch

    Deep dive into the two pillars of SSJS flow control

    If Statements

    The most popular way of handling conditional logic is with the if statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code.

    Create a segment of customers that made more than two purchases
    for (var customer in customers) {
    if (customer.purchases > 2) {
    marketingSegment.push(customer.email);
    };
    };

    Basic if can be extended by adding optional else if for an additional condition with the different outcome or optional else for all scenarios not caught by above conditions.

    Create multiple segments for different levels of customers
    for (var customer in customers) {
    if (customer.purchases > 10) {
    goldCustomerSegment.push(customer.email);
    } else if (customer.purchases > 5) {
    silverCustomerSegment.push(customer.email);
    } else {
    bronzeCustomerSegment.push(customer.email);
    };
    };

    And, Or, Brackets

    The if statement is even more powerful if you enhance your conditions with the ORs (||), ANDs (&&) and brackets:

    Split customers into two segments depending on a condition group
    for (var customer in customers) {
    if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {
    reengagementCampaignSegment.push(customer);
    } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {
    upsellCampaignSegment.push(customer);
    };
    };

    Boolean evaluation

    You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable.

    If the customer has domain of your competiton, add him to blocklist
    for (var customer in customers) {
    var competitionUser = customer.email.includes('@competition.com');
    if (competitionUser) { // if comptetitionUser is true, block will be exectuted
    blocklist.push(customer);
    };
    };

    Flip Booleans with Bang

    Bang symbol (!) can be used to flip the value of a boolean:

    If the customer does not have competition domain in email, add him to campaign
    for (var customer in customers) {
    var competitionUser = customer.email.toLowerCase().indexOf('@competition.com') >= 0;
    if (!competitionUser) { // if not competition user, execute content
    campaignSegment.push(customer);
    };
    };

    Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean.

    Falsy values in JavaScript are: false, 0, empty string "", null, undefined, NaN. -All other possible values are considered truthy.

    This is very useful, as it allows you to leverage boolean evaluation on truthy values:

    Applies either personalized name or default value
    for (var customer in customers) {
    var helloPersonalization;
    if (customer.firstName) { // if customer.firstName has characters, it is truthy
    helloPersonalization = customer.firstName;
    } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy
    helloPersonalization = 'Valued Customer';
    };
    };

    To make it clear - above code is very "dirty" and can be written much better (for example without else if by applying default value on variable initialization). You will find an example of how to write it better later.

    You Should Know

    You can level up the use of this feature by leveraging double bang !! to convert truthy/falsy value into an (appropriate) boolean.

    If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true
    var isOptedIn = !!optInDate;

    If Shorthand

    For simple, one-line if statements, there is also a one-line shorthand:

    If the customer is opted in, send an email
    if (isOptedIn) sendEmail(emailAddress, emailID);

    You could probably use simple if conditions for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out.

    Ternary

    If a simple if statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:

    Dirty if statement using basic 'if'
    for (var customer in customers) {
    var helloPersonalization;
    if (customer.firstName) {
    helloPersonalization = 'Hello' + customer.firstName;
    } else if (!customer.firstName) {
    helloPersonalization = 'Hello Valued Customer';
    };
    };

    we can use a clean ternary:

    Same logic changed to a ternary
    for (var customer in customers) {
    var helloPersonalization = customer.firstName ? 'Hello' + customer.firstName : 'Hello Valued Customer';
    };

    Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: variable = condition ? valueIfTrue : valueIfFalse;. So in the example above, if the customer.firstName is not empty (is truthy), it will be pushed as the value of helloPersonalization. If it is empty, the default value will be assigned instead.

    You Should Know

    The ternary has more uses not than just the standard if statement. It is awesome text customization with pseudo-interpolation:

    Fill in the sentence with different words depending on boolean value of isOptedIn
    Write('You are ' + (isOptedIn ? 'opted in' : 'not opted in'));

    Ternaries are not limited to variables and strings. They can also run functions or debugging:

    If isLoggedIn is false, the redirectToLogInPage function will be executed
    !isLoggedIn ? redirectToLogInPage() : null;

    Shortcircuiting

    We already covered using OR || + AND && operators. But by using them correctly, you can optimize the speed of your scripts greatly.

    Shortcircuiting OR

    OR evaluates to true if at least one value is equal to true.

    If the left side of the OR evaluates to true, we know for sure that the whole statement is true. Checking the value of the right side is not needed. And JavaScript knows this too.

    Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side.

    If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign
    for (var customer in customers) {
    if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {
    exclusionSegment.push(customer);
    };
    };

    Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the lastPurchaseDate is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish.

    Shortcircuiting AND

    Similar logic can be applied to AND operator. && evaluates to true only if both sides are true. If we have a more straightforward condition or we suspect it might frequently evaluate to false, we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator.

    If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid
    if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {
    var isLoggedIn = true;
    };

    In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password.


    Switch Statement

    Sometimes you have many options for a single condition. You could write it with a simple if, but the switch might be much more readable than a long list of else if statements with nearly identical conditions. In SSJS switch is especially useful for centralized handler page you query from multiple front ends.

    Return the error type based on the code
    function errorDescription(error) {
    switch (error.code) {
    case 400:
    return 'Bad Request';
    case 401:
    return 'Unauthorized';
    case 403:
    return 'Forbidden';
    case 404:
    return 'Not Found'
    default:
    return 'Unknown Error';
    };
    };

    Some things to remember when working with a switch:

    • If multiple cases fulfil the condition, a switch will execute the first from the top.
    • You can assign multiple cases to the same code block:
    Return either sum or difference of two values (sum by default)
    var outcome;
    switch (a, operation, b) {
    default:
    case '+':
    case 'plus':
    outcome = a + b;
    break;
    case '-':
    case 'minus':
    outcome = a - b;
    break;
    };
    • Use either break statement to end each case or use the return statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen.
    • Always use default statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered.
    • Cases in a switch are using strict comparison (===) for evaluation, so the provided value must match the case not only by value but also by type. A string value of '0' won't trigger an integer 0 case.
    - - +

    SSJS If & Switch

    Deep dive into the two pillars of SSJS flow control

    +

    If Statements

    +

    The most popular way of handling conditional logic is with the if statement. It is universal, flexible, and easy to understand. By evaluating a condition, it allows your script to either execute or omit part of the code.

    +
    Create a segment of customers that made more than two purchases
    for (var customer in customers) {
    if (customer.purchases > 2) {
    marketingSegment.push(customer.email);
    };
    };
    +

    Basic if can be extended by adding optional else if for an additional condition with the different outcome or optional else for all scenarios not caught by above conditions.

    +
    Create multiple segments for different levels of customers
    for (var customer in customers) {
    if (customer.purchases > 10) {
    goldCustomerSegment.push(customer.email);
    } else if (customer.purchases > 5) {
    silverCustomerSegment.push(customer.email);
    } else {
    bronzeCustomerSegment.push(customer.email);
    };
    };
    +

    And, Or, Brackets

    +

    The if statement is even more powerful if you enhance your conditions with the ORs (||), ANDs (&&) and brackets:

    +
    Split customers into two segments depending on a condition group
    for (var customer in customers) {
    if (customer.purchases <=2 || customer.lastPurchaseDate <= new Date('2019-12-31')) {
    reengagementCampaignSegment.push(customer);
    } else if (customer.purchases > 2 && customer.lastPurchaseDate > new Date('2019-12-31')) {
    upsellCampaignSegment.push(customer);
    };
    };
    +

    Boolean evaluation

    +

    You can use boolean values of variables/methods/functions to omit the operator in your condition and make the code more readable.

    +
    If the customer has domain of your competiton, add him to blocklist
    for (var customer in customers) {
    var competitionUser = customer.email.includes('@competition.com');
    if (competitionUser) { // if comptetitionUser is true, block will be exectuted
    blocklist.push(customer);
    };
    };
    +

    Flip Booleans with Bang

    +

    Bang symbol (!) can be used to flip the value of a boolean:

    +
    If the customer does not have competition domain in email, add him to campaign
    for (var customer in customers) {
    var competitionUser = customer.email.toLowerCase().indexOf('@competition.com') >= 0;
    if (!competitionUser) { // if not competition user, execute content
    campaignSegment.push(customer);
    };
    };
    +

    Bang not only functions as a NOT operator but also changes truthy and falsy values into an (opposite) boolean.

    +

    Falsy values in JavaScript are: false, 0, empty string "", null, undefined, NaN. +All other possible values are considered truthy.

    +

    This is very useful, as it allows you to leverage boolean evaluation on truthy values:

    +
    Applies either personalized name or default value
    for (var customer in customers) {
    var helloPersonalization;
    if (customer.firstName) { // if customer.firstName has characters, it is truthy
    helloPersonalization = customer.firstName;
    } else if (!customer.firstName) { // if it does not have any characterrs, it will be falsy
    helloPersonalization = 'Valued Customer';
    };
    };
    +

    To make it clear - above code is very "dirty" and can be written much better (for example without else if by applying default value on variable initialization). You will find an example of how to write it better later.

    +
    You Should Know

    You can level up the use of this feature by leveraging double bang !! to convert truthy/falsy value into an (appropriate) boolean.

    If optInDate has any value (is not empty) the isOptedIn variable will evaluate to true
    var isOptedIn = !!optInDate;
    +

    If Shorthand

    +

    For simple, one-line if statements, there is also a one-line shorthand:

    +
    If the customer is opted in, send an email
    if (isOptedIn) sendEmail(emailAddress, emailID);
    +

    You could probably use simple if conditions for the whole logic of your code. But you shouldn't. There are some interesting and useful options worth checking out.

    +

    Ternary

    +

    If a simple if statement has only two possible outcomes depending on a condition, ternary is more straightforward and readable alternative. Based on previous example, instead of:

    +
    Dirty if statement using basic 'if'
    for (var customer in customers) {
    var helloPersonalization;
    if (customer.firstName) {
    helloPersonalization = 'Hello' + customer.firstName;
    } else if (!customer.firstName) {
    helloPersonalization = 'Hello Valued Customer';
    };
    };
    +

    we can use a clean ternary:

    +
    Same logic changed to a ternary
    for (var customer in customers) {
    var helloPersonalization = customer.firstName ? 'Hello' + customer.firstName : 'Hello Valued Customer';
    };
    +

    Instead of 6 lines of code, we have 1. Awesome! But how does it work? The ternary structure looks like this: variable = condition ? valueIfTrue : valueIfFalse;. So in the example above, if the customer.firstName is not empty (is truthy), it will be pushed as the value of helloPersonalization. If it is empty, the default value will be assigned instead.

    +
    You Should Know

    The ternary has more uses not than just the standard if statement. It is awesome text customization with pseudo-interpolation:

    Fill in the sentence with different words depending on boolean value of isOptedIn
    Write('You are ' + (isOptedIn ? 'opted in' : 'not opted in'));

    Ternaries are not limited to variables and strings. They can also run functions or debugging:

    If isLoggedIn is false, the redirectToLogInPage function will be executed
    !isLoggedIn ? redirectToLogInPage() : null;
    +
    +

    Shortcircuiting

    +

    We already covered using OR || + AND && operators. But by using them correctly, you can optimize the speed of your scripts greatly.

    +

    Shortcircuiting OR

    +

    OR evaluates to true if at least one value is equal to true.

    +

    If the left side of the OR evaluates to true, we know for sure that the whole statement is true. Checking the value of the right side is not needed. And JavaScript knows this too.

    +

    Thanks to it, if we want to use an OR statement and we suspect that one side is much faster than the other, we should use it on the left side.

    +
    If last purchase was before 2020 or a very complex check requiring calls to eCommerce API evaluates to false, filter out the customer from the campaign
    for (var customer in customers) {
    if (customer.lastPurchaseDate < new Date('2019-12-31') || complexRequestToEcommerceAPI() === false) {
    exclusionSegment.push(customer);
    };
    };
    +

    Left side in the above example is a straightforward and quick check, as all parts of the condition are already within the script. The right side, however, might take seconds to get the data from other system and calculate the value. If the lastPurchaseDate is before our threshold, we don't have to waste time and API calls. A win for us, and a win for the customer waiting for the script to finish.

    +

    Shortcircuiting AND

    +

    Similar logic can be applied to AND operator. && evaluates to true only if both sides are true. If we have a more straightforward condition or we suspect it might frequently evaluate to false, we should put it on the left side. If it ends up being falsy, JavaScript won't be checking the right side of the AND operator.

    +
    If the email provided for login is in correct format, check if password has required length. Once validated, check if this login and password are matching pair for a user. Only then consider the login to be valid
    if (isValidEmail(login) && isValidPassword(password) && isValidPair(email, password)) {
    var isLoggedIn = true;
    };
    +

    In the above example, we are doing multiple tests ordered from the easiest to the hardest. Thanks to it, if the login is not in the correct format for an email address, we won't have even to check the password or query our encrypted database with a hashed version of the password.

    +
    +

    Switch Statement

    +

    Sometimes you have many options for a single condition. You could write it with a simple if, but the switch might be much more readable than a long list of else if statements with nearly identical conditions. In SSJS switch is especially useful for centralized handler page you query from multiple front ends.

    +
    Return the error type based on the code
    function errorDescription(error) {
    switch (error.code) {
    case 400:
    return 'Bad Request';
    case 401:
    return 'Unauthorized';
    case 403:
    return 'Forbidden';
    case 404:
    return 'Not Found'
    default:
    return 'Unknown Error';
    };
    };
    +

    Some things to remember when working with a switch:

    +
      +
    • If multiple cases fulfil the condition, a switch will execute the first from the top.
    • +
    • You can assign multiple cases to the same code block:
    • +
    +
    Return either sum or difference of two values (sum by default)
    var outcome;
    switch (a, operation, b) {
    default:
    case '+':
    case 'plus':
    outcome = a + b;
    break;
    case '-':
    case 'minus':
    outcome = a - b;
    break;
    };
    +
      +
    • Use either break statement to end each case or use the return statement if in function. Otherwise, the switch will also execute all below cases until it encounters one of the above keywords (or hits the last scenario). Of course, there might be some edge scenarios where you want this exact behaviour to happen.
    • +
    • Always use default statement, even if you believe it will never be triggered (not required, but best practice). Use it to handle the scenario you haven't considered.
    • +
    • Cases in a switch are using strict comparison (===) for evaluation, so the provided value must match the case not only by value but also by type. A string value of '0' won't trigger an integer 0 case.
    • +
    \ No newline at end of file diff --git a/docs/ssjs/ssjs-loops/index.html b/docs/ssjs/ssjs-loops/index.html index 76e1a52b5..9e1f0a5e9 100644 --- a/docs/ssjs/ssjs-loops/index.html +++ b/docs/ssjs/ssjs-loops/index.html @@ -1,22 +1,66 @@ - + - -SSJS Loops | Mateusz Dąbrowski + +SSJS Loops | Mateusz Dąbrowski - - - + + + -
    -

    SSJS Loops

    Let's dive into limited looping options of the SSJS.

    Working with arrays and objects is one of the selling points of SSJS vs AMPScript. And the primary way to utilize those structures is to loop over them. While SSJS doesn't have all the magic of the modern JavaScript, it still has much more to offer than single FOR available in AMPScript.

    For Loops

    For

    The classic for loop might be a bit long to write, but it has a lot of excellent properties:

    • Works with break and continue statements for better looping control.
    • Both initial and increment expressions can do multiple things (examples available below).
    • Condition is not limited to iterable length (although it is the most popular way).
    • Fast across various scenarios.
    Example of for loop iterating over an array
    for (var i = 0; i < array.length; i++) {
    Write(i); // Returns the current iteration
    Write(array[i] + '<br/><br/>'); // Returns the value of current element
    };

    Let's break the script down to five steps each for loop follows:

    1. Execute initial expression (var i = 0 in the above example).
    2. Evaluate the condition (i < array.length). If it is false - the loop terminates. If true:
    3. The statement within the loop is executed (Write(array[i])).
    4. Finally, the increment expression will evaluate (i++).
    5. The loop goes back to step 2 until it is false.

    To optimize speed, cache the length used for condition. By assigning it to a variable in initial expression, the loop won't have to calculate the length on each iteration.

    Initial expression assigns array.length to a variable to cache it
    for (var i = 0, range = array.length; i < range; i++) {
    Write(i); // Returns the current iteration
    Write(array[i] + '<br/><br/>'); // Returns the value of current element
    };

    You can get more logic within the for declaration to, for example, have a cleaner statement within the loop:

    Provide itemValue variable instead of just current iteration
    for (var i = 0, itemValue = array[i], range = array.length; i < range; i++, itemValue = array[i]) {
    Write(itemValue + '<br/><br/>'); // Returns the value of current element
    };

    As ES6 for...of loop is not available in SSJS, you will use this one in most scenarios.

    For in

    for...in loop in modern JavaScript is used nearly exclusively for debugging. It is because it loops not only over standard values but also over object prototype methods and properties.

    In SSJS however, the ES6 for...of loop is not available. Object.keys() or Object.entries() also does not exist. This makes the for...in the only solution for iterating over objects.

    for (var key in object) {
    Write(key + '<br/><br/>'); // Returns string name of the current key
    };

    In simple scripts created in SSJS you shouldn't have issues with the prototype methods and properties, however, if you encounter any issues (or want to code defensively), use hasOwnProperty method:

    for (var key in object) {
    if (object.hasOwnProperty(key) && key != '_type') {
    Write(key + '<br/><br/>');
    };
    };

    Remember to use for...in only for looping over objects. For any other scenario classic for loop is both safer and more powerful.

    You Should Know

    If you ever use for...in loop for an array, remember that the loop-counter variable will return a string instead of a number. For example '0' for first array item instead of 0.


    While Loops

    While

    A while loop executes its statement as long as the condition evaluates to true.

    Infinite while loop
    var run = true;
    while (run === true) {
    Write('To the infinity and beyond!');
    };

    To break out of while loop, there must be logic within it that will change the condition to false (or a break statement):

    var run = true;
    var i = 0;
    while (run === true) {
    Write('To the infinity and beyond!');
    i++;
    if (i > 10) {
    run = false;
    };
    };

    or just:

    This loop has the same outcome as the one above
    var run = true;
    var i = 0;
    while (i <= 10) {
    Write('To the infinity and beyond!');
    i++;
    };

    while loop is the best option for iterating over big arrays.

    Do While

    Same as while, but the code runs once before evaluating the condition.

    do {
    Write('Running!');
    } while (run === true);

    Perfect when you need to run an API call, check whether there are more pages of outcomes and act accordingly.

    You Should Know

    JavaScript support labels for loops. It allows you to name each loop for even better control with both continue and break statements.

    Labelled loop example using a nested for loops
    MainLoopLabel:
    for (var i = 0; i < array.length; i++) {
    // Logic
    SecondaryLoopLabel:
    for (var j = 0; j < array[i].length; j++) {
    // Logic
    if (array[i][j] === 'important') {
    break MainLoopLabel;
    };
    };
    };

    As you can see, in the first line we added a label for the first for loop. Then, in the statement within the second for loop, we used break followed by the label. Once executed, it will break both for loops, even if there were still iterations in the main one. The same approach works with the continue statement.

    - - +

    SSJS Loops

    Let's dive into limited looping options of the SSJS.

    +

    Working with arrays and objects is one of the selling points of SSJS vs AMPScript. And the primary way to utilize those structures is to loop over them. While SSJS doesn't have all the magic of the modern JavaScript, it still has much more to offer than single FOR available in AMPScript.

    +

    For Loops

    +

    For

    +

    The classic for loop might be a bit long to write, but it has a lot of excellent properties:

    +
      +
    • Works with break and continue statements for better looping control.
    • +
    • Both initial and increment expressions can do multiple things (examples available below).
    • +
    • Condition is not limited to iterable length (although it is the most popular way).
    • +
    • Fast across various scenarios.
    • +
    +
    Example of for loop iterating over an array
    for (var i = 0; i < array.length; i++) {
    Write(i); // Returns the current iteration
    Write(array[i] + '<br/><br/>'); // Returns the value of current element
    };
    +

    Let's break the script down to five steps each for loop follows:

    +
      +
    1. Execute initial expression (var i = 0 in the above example).
    2. +
    3. Evaluate the condition (i < array.length). If it is false - the loop terminates. If true:
    4. +
    5. The statement within the loop is executed (Write(array[i])).
    6. +
    7. Finally, the increment expression will evaluate (i++).
    8. +
    9. The loop goes back to step 2 until it is false.
    10. +
    +

    To optimize speed, cache the length used for condition. By assigning it to a variable in initial expression, the loop won't have to calculate the length on each iteration.

    +
    Initial expression assigns array.length to a variable to cache it
    for (var i = 0, range = array.length; i < range; i++) {
    Write(i); // Returns the current iteration
    Write(array[i] + '<br/><br/>'); // Returns the value of current element
    };
    +

    You can get more logic within the for declaration to, for example, have a cleaner statement within the loop:

    +
    Provide itemValue variable instead of just current iteration
    for (var i = 0, itemValue = array[i], range = array.length; i < range; i++, itemValue = array[i]) {
    Write(itemValue + '<br/><br/>'); // Returns the value of current element
    };
    +

    As ES6 for...of loop is not available in SSJS, you will use this one in most scenarios.

    +

    For in

    +

    for...in loop in modern JavaScript is used nearly exclusively for debugging. It is because it loops not only over standard values but also over object prototype methods and properties.

    +

    In SSJS however, the ES6 for...of loop is not available. Object.keys() or Object.entries() also does not exist. This makes the for...in the only solution for iterating over objects.

    +
    for (var key in object) {
    Write(key + '<br/><br/>'); // Returns string name of the current key
    };
    +

    In simple scripts created in SSJS you shouldn't have issues with the prototype methods and properties, however, if you encounter any issues (or want to code defensively), use hasOwnProperty method:

    +
    for (var key in object) {
    if (object.hasOwnProperty(key) && key != '_type') {
    Write(key + '<br/><br/>');
    };
    };
    +

    Remember to use for...in only for looping over objects. For any other scenario classic for loop is both safer and more powerful.

    +
    You Should Know

    If you ever use for...in loop for an array, remember that the loop-counter variable will return a string instead of a number. For example '0' for first array item instead of 0.

    +
    +

    While Loops

    +

    While

    +

    A while loop executes its statement as long as the condition evaluates to true.

    +
    Infinite while loop
    var run = true;
    while (run === true) {
    Write('To the infinity and beyond!');
    };
    +

    To break out of while loop, there must be logic within it that will change the condition to false (or a break statement):

    +
    var run = true;
    var i = 0;
    while (run === true) {
    Write('To the infinity and beyond!');
    i++;
    if (i > 10) {
    run = false;
    };
    };
    +

    or just:

    +
    This loop has the same outcome as the one above
    var run = true;
    var i = 0;
    while (i <= 10) {
    Write('To the infinity and beyond!');
    i++;
    };
    +

    while loop is the best option for iterating over big arrays.

    +

    Do While

    +

    Same as while, but the code runs once before evaluating the condition.

    +
    do {
    Write('Running!');
    } while (run === true);
    +

    Perfect when you need to run an API call, check whether there are more pages of outcomes and act accordingly.

    +
    You Should Know

    JavaScript support labels for loops. It allows you to name each loop for even better control with both continue and break statements.

    Labelled loop example using a nested for loops
    MainLoopLabel:
    for (var i = 0; i < array.length; i++) {
    // Logic
    SecondaryLoopLabel:
    for (var j = 0; j < array[i].length; j++) {
    // Logic
    if (array[i][j] === 'important') {
    break MainLoopLabel;
    };
    };
    };

    As you can see, in the first line we added a label for the first for loop. Then, in the statement within the second for loop, we used break followed by the label. Once executed, it will break both for loops, even if there were still iterations in the main one. The same approach works with the continue statement.

    \ No newline at end of file diff --git a/docs/ssjs/ssjs-style-guide/index.html b/docs/ssjs/ssjs-style-guide/index.html index e6152c2c4..9896d49c2 100644 --- a/docs/ssjs/ssjs-style-guide/index.html +++ b/docs/ssjs/ssjs-style-guide/index.html @@ -1,22 +1,169 @@ - + - -SSJS Style Guide | Mateusz Dąbrowski + +SSJS Style Guide | Mateusz Dąbrowski - - - + + + -
    -

    SSJS Style Guide

    Script with style. Readable code is a few rules & conventions away.

    First things first: this Salesforce Marketing Cloud SSJS style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:

    1. Be consistent across your codebase.
    2. Strive for good readability.

    Everything else is preference. And you are just about to learn about mine.

    Naming Convention

    SSJS gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity.

    Meaningful Names

    Use descriptive names to provide context.

    As John F. Woods said, always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project.

    Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your SSJS better with meaningful variable and function names.

    Variable Names

    1. Use descriptive variable names. It is better to have a long explicit one (isTrackingSuppressed) than a short mysterious abbreviation (trk).
    2. When the variable is a boolean, prefix it with is (or has/does/are depending on the underlying data).
    3. When the variable is a date, suffix it with Date.
    4. When the variable is an array, use a plural name (optIns, favouriteProductCategories).
    /* ✅ Descriptive and suggesting boolean data type */
    var isTrackingSuppressed = false;

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    var value = false;

    /* ✅ Descriptive and suggesting date data type */
    var trackingSupressionStartDate = new Date();

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    var supressed = new Date();

    Function Names

    1. Use descriptive function names. It is better to have a long explicit one (getEmailAddress) than a short mysterious abbreviation (geteml). Think how you can add as much information as possible, without adding unnecessary bits (lookupContactBySubscriberKey vs lookupAvailableContactBySubscriberKeyFromDataExtension).
    2. Use a verb (get, post, update, send) as the first part of the name to tell what the function is doing.
    3. Apply variable naming rules to the parameters - leave single-letter names for minifiers.
    /* ✅ Both function name and parameters are descriptive */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ❌ Neither function name nor parameters are descriptive */
    function write(d, v) {
    Write(d + ': ' + (typeof v == 'object' ? Stringify(v) : v) + '<br><br>');
    };

    JS Variables, Functions & Methods Letter Case

    Use camelCase for all elements of JS syntax.

    The first category of the building blocks in your code will be JavaScript (ECMAScript 3 in case of SSJS) native elements. Variables (var only), functions (no array goodies), and methods.

    For all of those I'm using camelCase. It's the most popular convetion, so it will make it easier to work with other programmers, leverage code snippets and onboard new-to-SSJS people to SFMC development.

    /* ✅ camelCase for JS syntax */
    var variableName = 'Hello World';
    function functionName(variableName) {
    return variableName.toLowerCase();
    };

    /* ❌ Random case */
    var VARIABLENAME = 'Hello World';
    function FunctionName(variableName) {
    return variableName.tolowercase();
    };
    You Should Know

    JavaScript variables are case sensitive. Name and name are two different variables that can have different values, so it's critically important to have a stable convention.

    SSJS Functions Letter Case

    Use PascalCase for all elements of SSJS syntax.

    I take a different approach when working with SSJS Functions from both Platform and Core libraries. For any element coming from those, I use PascalCase.

    Not only it allows to differentiate JavaScript native and SFMC custom elements, but it also follows the official SSJS documentation (and therefore most of the snippets you might find).

    /* ✅ PamelCase for JS syntax */
    Platform.Load('Core', '1');
    var dataExtension = DataExtension.Retrieve({
    Property: 'CustomerKey',
    SimpleOperator: 'equals',
    Value: 'dataExtensionExternalKey'
    });

    /* ❌ Random case */
    PLATFORM.LOAD('Core', '1');
    var dataExtension = dataextensions.retrieve({
    Property: 'CustomerKey',
    SimpleOperator: 'equals',
    Value: 'dataExtensionExternalKey'
    });

    Alignment and Indentation

    Letter case is just one element of syntax convention that helps with readability. Another huge one is alignment and indentation. JavaScript requires neither, but both can help you write better code.

    Expanded Syntax

    Sparse is better than dense.

    Readability counts. Having fewer lines is not worth the mental gymnastics required to read a condensed code. It is also much easier to find unclosed brackets.

    /* ✅ Expanded Variable Syntax */
    var debugging = {
    request: true,
    response: true,
    error: true
    };

    /* ❌ Condensed Variable Syntax */
    var debugging = { request: true, response: true, error: true };

    /* ✅ Expanded Function Syntax */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ❌ Condensed Function Syntax */
    function debugValue(description, value) { Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>'); };

    /* ✅ Expanded Try/Catch Syntax */
    try {
    var response = HTTP.Get('http://www.example.c');
    } catch (error) {
    handleError(error);
    };

    /* ❌ Condensed Try/Catch Syntax */
    try { var response = HTTP.Get('http://www.example.c'); } catch (error) { handleError(error); };
    You Should Know

    I have two exceptions to this rule - both related to if statement shorthands.

    1. Ternary operator

    Ternary simplifies basic if/else statements, and when used correctly, it should be readable in a single line. If you fear it might be hard to understand, you probably shouldn't use the ternary operator in the first place.

    /* ✅ Condensed Ternary Syntax */
    typeof value == 'object' ? Stringify(value) : value;

    /* ❌ Expanded Ternary Syntax */
    typeof value == 'object'
    ? Stringify(value)
    : value;

    /* ❌ Too Complex for Ternary Syntax */
    debugging ? debugValue(error) : Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);
    1. Single line if statements.

    Similarly to ternary, single-line if statements also should be used only for basic if statements. Whenever there is any complexity (be it else statement or just a longer case body), I always go with the expanded syntax.

    /* ✅ Condensed Shorthand If Syntax */
    if (debugging) debugValue(error);

    /* ✅ Expanded Standard If Syntax */
    if (debugging) {
    debugValue(error);
    } else {
    Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);
    };

    /* ❌ Too Complex for Shorthand If Syntax */
    if (response.StatusCode == 200) { var parsedResponse = Platform.Function.ParseJSON(String(response.Response)); if (!parsedResponse.success) throw 'Wrong reCAPTCHA'; };

    It's up to you to decide how complex is too complex. Whenever in doubt - use expanded syntax.

    Consistent Indentation

    Use indentation to highlight code relationships.

    This rule extends the expanded syntax guide. Don't stop at expanding. Indent. It will help you quickly understand the relationships between the code lines.

    The easy way to implement correct identation is to add a level whenever you open curly bracket and remove one whenever you close it. However, sometimes readability can be improved with even more identation, for example within expanded array.

    /* ✅ Indented Syntax */
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };

    /* ❌ Flat Syntax */
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };
    You Should Know

    It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click.

    Intentional Spacing

    Use spaces wherever it makes the code more readable.

    To visually separate elements, use spaces:

    • Around operators.
    • Before opening curly bracket and after closing curly bracket.
    • After commas.
    • After keywords (if, while, function, etc.).

    To provide important context, don't add spaces:

    • After opening and before closing non-curly brackets.
    • Between function name and arguments.
    /* ✅ Intentional spacing */
    if (response.StatusCode != 200) {
    throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'}
    };

    /* ❌ Lack of spacing */
    if(response.StatusCode!=200){
    throw{'message':'HTTP.Get Error','description':'Could not connect to example.com'}
    };

    /* ✅ Intentional spacing */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ❌ Wrong spacing */
    function debugValue ( description, value ) {
    Write ( description + ': ' + ( typeof value == 'object' ? Stringify( value ) : value ) + '<br><br>' );
    };

    Debatable Styles

    Apart from letter case and indentation, some additional style rules are important to consider. Multiple arguments favour various conventions, so feel free not to follow my recommendation as long as you stay consistent across your code.

    Semicolons

    Add a semicolon after each statement.

    The semicolons in JavaScript are optional. You can do without them entirely. But I prefer to use them. Why?

    If you do not use semicolons, JS will add them for you using Automatic Semicolon Injection (ASI). In most cases, it works perfectly, but there might be some situations where the outcome is not what you expected. And that will lead to a very long and frustrating debugging session. If you want to think about ASI when writing, you may ignore semicolons.

    If you don't want to worry about ASI, per JS language specification, you should:

    • Mark the end of your simple statements with a semicolon ;. Think variable declarations and operations.
    • Don't end complex statements with a semicolon. Think if statements, loops, functions, try/catch blocks.
    • But... you need a semicolon after the do/while loop. Because JavaScript (and yeah, it is different from while loop when considering the statement blocks). Oh, and you will need to add them in your for loop iteration rules.

    That's also a bit to digest and worry about when writing the code. Let's simplify it.

    While you don't need a semicolon after complex statements, it won't hurt. It can even help you if you plan to minify the code. So, to make it straightforward and fail-safe, I recommend adding it after each statement.

    Keep calm and spam semicolons
    /* ✅ Semicolons everywhere */
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };

    /* ❌ No semicolons - this will crash due to no semicolons between for iteration rules */
    for (var i = 0 i < response.length - 1 i++) {
    var responseRowData = response[i].split(',')
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    })
    }

    Consistent Quotes

    Use single quote style.

    With SSJS, you can use either single quotes (') or double quotes ("). Don't follow the random approach of Salesforce SSJS documentation - choose one and be consistent.

    I prefer single quotes for SSJS:

    1. I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML.
    2. On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster.

    However, there are also arguments for double quotes:

    1. There are many English words using apostrophes, and using double quotes means no need to escape them.
    2. JSON requires double quotes.

    In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)

    /* ✅ Single Quotes */
    if (response.StatusCode != 200) {
    throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};
    };

    /* ✅ Double Quotes */
    if (response.StatusCode != 200) {
    throw {"message": "HTTP.Get Error", "description": "Could not connect to example.com"};
    };

    /* ❌ Mixed Quotes */
    if (response.StatusCode != 200) {
    throw {'message': "HTTP.Get Error", 'description': "Could not connect to example.com"};
    };

    Comments

    Code tells you how. Comments tell you why. - Jeff Atwood

    To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks.

    Whenever you build more complex SSJS code, I recommend using at least three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough.

    1. Table of Contents Comment

    The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script.

    Before even starting to write SSJS, describe the desired outcome and steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation.

    As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces.

    /* ---------------------------------------------------------------------

    Authenticates each visitor to limit access only to SFMC logged-in users.

    1. Global Variables - should be updated for each implementation
    2. Helper Functions
    2.1. Error handling
    3. Authentication Flow
    3.1. Authorisation
    3.2. Authentication with REST Token
    3.2.1. Upsert Logging Data Extension

    --------------------------------------------------------------------- */

    2. Section Comments

    To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts.

    For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 2. HELPER FUNCTIONS ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------------- 2.1. Error handling ------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 3. AUTHENTICATION FLOW ---------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------------- 3.1. Authorisation -------------------------- */

    /* ------------------------- 3.2. Authentication ------------------------- */

    /* 3.2.1. Build token request payload */

    3. Documentation Comments

    Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments.

    You should use one for every custom function you create, but it might also benefit variables (especially those with values coming from an API response). Rule of thumb - add them whenever someone else reading your code for the first time would ask a question about context or purpose.

    I recommend using JSDoc for few reasons:

    1. It's a popular standard.
    2. It provides recommendations on what to add to the comment.
    3. Many code editors will help you write it and highlight its syntax.
    4. Marketing Cloud ecosystem already leverages it in Interaction Studio.
    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /**
    * ClientID of SFMC Installed Package required for API calls
    * @type {string}
    * @const
    */
    var clientID = 'CLIENT_ID';

    /**
    * Authentication GUID passed as a query string through SSO redirect
    * @type {string}
    */
    var state = Platform.Request.GetQueryStringParameter('state');

    If you find it too complex, feel free to make it simpler, as long as your approach:

    1. describes context and purpose and
    2. is consistent across the codebase.

    Sum Up

    It is a long article, so let's gather all the recommendations in one place:

    1. Be consistent
    2. Strive for readability
    3. Use descriptive names to provide context 🔗
    4. Use camelCase for all elements of JS syntax 🔗
    5. Use PascalCase for all elements of SSJS syntax 🔗
    6. Sparse is better than dense 🔗
    7. Use indentation to highlight code relationships 🔗
    8. Use spaces wherever it makes the code more readable 🔗
    9. Add a semicolon after each statement 🔗
    10. Use single quote style 🔗
    11. Use comments to provide required context to your script 🔗

    If you want to share something I'm missing or have arguments for a different recommendation - let me know.

    Looking for more Marketing Cloud style? Check out my:

    - - +

    SSJS Style Guide

    Script with style. Readable code is a few rules & conventions away.

    +

    First things first: this Salesforce Marketing Cloud SSJS style guide is highly subjective. You may use it as it is, implement only some parts of it, or ignore it altogether. There are only two rules that I believe are a must-have:

    +
      +
    1. Be consistent across your codebase.
    2. +
    3. Strive for good readability.
    4. +
    +

    Everything else is preference. And you are just about to learn about mine.

    +

    Naming Convention

    +

    SSJS gives you a lot of freedom when it comes to naming and letter case. But instead of going freestyle with that flexibility, we should leverage it to build something meaningful and readable. I decided to focus also on simplicity.

    +

    Meaningful Names

    +

    Use descriptive names to provide context.

    +

    As John F. Woods said, always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Meaningful and consistent names are an excellent starting point for living a long (coding) life with a limited amount of frustration and regret when someone asks you about your year-old code to adapt to a new project.

    +

    Applying the rules listed below is easy when you write the code and remember its logic but can be a challenge after resetting your memory by writing few other scripts. Make your SSJS better with meaningful variable and function names.

    +

    Variable Names

    +
      +
    1. Use descriptive variable names. It is better to have a long explicit one (isTrackingSuppressed) than a short mysterious abbreviation (trk).
    2. +
    3. When the variable is a boolean, prefix it with is (or has/does/are depending on the underlying data).
    4. +
    5. When the variable is a date, suffix it with Date.
    6. +
    7. When the variable is an array, use a plural name (optIns, favouriteProductCategories).
    8. +
    +
    /* ✅ Descriptive and suggesting boolean data type */
    var isTrackingSuppressed = false;

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    var value = false;

    /* ✅ Descriptive and suggesting date data type */
    var trackingSupressionStartDate = new Date();

    /* ❌ Name neither describes the variable purpose nor suggest its data type */
    var supressed = new Date();
    +

    Function Names

    +
      +
    1. Use descriptive function names. It is better to have a long explicit one (getEmailAddress) than a short mysterious abbreviation (geteml). Think how you can add as much information as possible, without adding unnecessary bits (lookupContactBySubscriberKey vs lookupAvailableContactBySubscriberKeyFromDataExtension).
    2. +
    3. Use a verb (get, post, update, send) as the first part of the name to tell what the function is doing.
    4. +
    5. Apply variable naming rules to the parameters - leave single-letter names for minifiers.
    6. +
    +
    /* ✅ Both function name and parameters are descriptive */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ❌ Neither function name nor parameters are descriptive */
    function write(d, v) {
    Write(d + ': ' + (typeof v == 'object' ? Stringify(v) : v) + '<br><br>');
    };
    +

    JS Variables, Functions & Methods Letter Case

    +

    Use camelCase for all elements of JS syntax.

    +

    The first category of the building blocks in your code will be JavaScript (ECMAScript 3 in case of SSJS) native elements. Variables (var only), functions (no array goodies), and methods.

    +

    For all of those I'm using camelCase. It's the most popular convetion, so it will make it easier to work with other programmers, leverage code snippets and onboard new-to-SSJS people to SFMC development.

    +
    /* ✅ camelCase for JS syntax */
    var variableName = 'Hello World';
    function functionName(variableName) {
    return variableName.toLowerCase();
    };

    /* ❌ Random case */
    var VARIABLENAME = 'Hello World';
    function FunctionName(variableName) {
    return variableName.tolowercase();
    };
    +
    You Should Know

    JavaScript variables are case sensitive. Name and name are two different variables that can have different values, so it's critically important to have a stable convention.

    +

    SSJS Functions Letter Case

    +

    Use PascalCase for all elements of SSJS syntax.

    +

    I take a different approach when working with SSJS Functions from both Platform and Core libraries. For any element coming from those, I use PascalCase.

    +

    Not only it allows to differentiate JavaScript native and SFMC custom elements, but it also follows the official SSJS documentation (and therefore most of the snippets you might find).

    +
    /* ✅ PamelCase for JS syntax */
    Platform.Load('Core', '1');
    var dataExtension = DataExtension.Retrieve({
    Property: 'CustomerKey',
    SimpleOperator: 'equals',
    Value: 'dataExtensionExternalKey'
    });

    /* ❌ Random case */
    PLATFORM.LOAD('Core', '1');
    var dataExtension = dataextensions.retrieve({
    Property: 'CustomerKey',
    SimpleOperator: 'equals',
    Value: 'dataExtensionExternalKey'
    });
    +

    Alignment and Indentation

    +

    Letter case is just one element of syntax convention that helps with readability. Another huge one is alignment and indentation. JavaScript requires neither, but both can help you write better code.

    +

    Expanded Syntax

    +

    Sparse is better than dense.

    +

    Readability counts. Having fewer lines is not worth the mental gymnastics required to read a condensed code. It is also much easier to find unclosed brackets.

    +
    /* ✅ Expanded Variable Syntax */
    var debugging = {
    request: true,
    response: true,
    error: true
    };

    /* ❌ Condensed Variable Syntax */
    var debugging = { request: true, response: true, error: true };

    /* ✅ Expanded Function Syntax */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ❌ Condensed Function Syntax */
    function debugValue(description, value) { Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>'); };

    /* ✅ Expanded Try/Catch Syntax */
    try {
    var response = HTTP.Get('http://www.example.c');
    } catch (error) {
    handleError(error);
    };

    /* ❌ Condensed Try/Catch Syntax */
    try { var response = HTTP.Get('http://www.example.c'); } catch (error) { handleError(error); };
    +
    You Should Know

    I have two exceptions to this rule - both related to if statement shorthands.

      +
    1. Ternary operator
    2. +

    Ternary simplifies basic if/else statements, and when used correctly, it should be readable in a single line. If you fear it might be hard to understand, you probably shouldn't use the ternary operator in the first place.

    /* ✅ Condensed Ternary Syntax */
    typeof value == 'object' ? Stringify(value) : value;

    /* ❌ Expanded Ternary Syntax */
    typeof value == 'object'
    ? Stringify(value)
    : value;

    /* ❌ Too Complex for Ternary Syntax */
    debugging ? debugValue(error) : Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);
      +
    1. Single line if statements.
    2. +

    Similarly to ternary, single-line if statements also should be used only for basic if statements. Whenever there is any complexity (be it else statement or just a longer case body), I always go with the expanded syntax.

    /* ✅ Condensed Shorthand If Syntax */
    if (debugging) debugValue(error);

    /* ✅ Expanded Standard If Syntax */
    if (debugging) {
    debugValue(error);
    } else {
    Platform.Function.InsertData('Data_Extension_Name', ['id', 'errorSource', 'errorMessage', 'errorDescription'], [GUID(), 'Name of the place where the script runs', Stringify(error.message), Stringify(error.description)]);
    };

    /* ❌ Too Complex for Shorthand If Syntax */
    if (response.StatusCode == 200) { var parsedResponse = Platform.Function.ParseJSON(String(response.Response)); if (!parsedResponse.success) throw 'Wrong reCAPTCHA'; };

    It's up to you to decide how complex is too complex. Whenever in doubt - use expanded syntax.

    +

    Consistent Indentation

    +

    Use indentation to highlight code relationships.

    +

    This rule extends the expanded syntax guide. Don't stop at expanding. Indent. It will help you quickly understand the relationships between the code lines.

    +

    The easy way to implement correct identation is to add a level whenever you open curly bracket and remove one whenever you close it. However, sometimes readability can be improved with even more identation, for example within expanded array.

    +
    /* ✅ Indented Syntax */
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };

    /* ❌ Flat Syntax */
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };
    +
    You Should Know

    It's safer to use spaces instead of tabs for indentation. And it's more readable to use four spaces instead of two. You can configure your code editor to output four spaces on each Tab click.

    +

    Intentional Spacing

    +

    Use spaces wherever it makes the code more readable.

    +

    To visually separate elements, use spaces:

    +
      +
    • Around operators.
    • +
    • Before opening curly bracket and after closing curly bracket.
    • +
    • After commas.
    • +
    • After keywords (if, while, function, etc.).
    • +
    +

    To provide important context, don't add spaces:

    +
      +
    • After opening and before closing non-curly brackets.
    • +
    • Between function name and arguments.
    • +
    +
    /* ✅ Intentional spacing */
    if (response.StatusCode != 200) {
    throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'}
    };

    /* ❌ Lack of spacing */
    if(response.StatusCode!=200){
    throw{'message':'HTTP.Get Error','description':'Could not connect to example.com'}
    };

    /* ✅ Intentional spacing */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /* ❌ Wrong spacing */
    function debugValue ( description, value ) {
    Write ( description + ': ' + ( typeof value == 'object' ? Stringify( value ) : value ) + '<br><br>' );
    };
    +

    Debatable Styles

    +

    Apart from letter case and indentation, some additional style rules are important to consider. Multiple arguments favour various conventions, so feel free not to follow my recommendation as long as you stay consistent across your code.

    +

    Semicolons

    +

    Add a semicolon after each statement.

    +

    The semicolons in JavaScript are optional. You can do without them entirely. But I prefer to use them. Why?

    +

    If you do not use semicolons, JS will add them for you using Automatic Semicolon Injection (ASI). In most cases, it works perfectly, but there might be some situations where the outcome is not what you expected. And that will lead to a very long and frustrating debugging session. If you want to think about ASI when writing, you may ignore semicolons.

    +

    If you don't want to worry about ASI, per JS language specification, you should:

    +
      +
    • Mark the end of your simple statements with a semicolon ;. Think variable declarations and operations.
    • +
    • Don't end complex statements with a semicolon. Think if statements, loops, functions, try/catch blocks.
    • +
    • But... you need a semicolon after the do/while loop. Because JavaScript (and yeah, it is different from while loop when considering the statement blocks). Oh, and you will need to add them in your for loop iteration rules.
    • +
    +

    That's also a bit to digest and worry about when writing the code. Let's simplify it.

    +

    While you don't need a semicolon after complex statements, it won't hurt. It can even help you if you plan to minify the code. So, to make it straightforward and fail-safe, I recommend adding it after each statement.

    +
    Keep calm and spam semicolons
    /* ✅ Semicolons everywhere */
    for (var i = 0; i < response.length - 1; i++) {
    var responseRowData = response[i].split(',');
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    });
    };

    /* ❌ No semicolons - this will crash due to no semicolons between for iteration rules */
    for (var i = 0 i < response.length - 1 i++) {
    var responseRowData = response[i].split(',')
    campaignData.push({
    name: responseRowData[0],
    id: responseRowData[1],
    startDate: responseRowData[2],
    endDate: responseRowData[3]
    })
    }
    +

    Consistent Quotes

    +

    Use single quote style.

    +

    With SSJS, you can use either single quotes (') or double quotes ("). Don't follow the random approach of Salesforce SSJS documentation - choose one and be consistent.

    +

    I prefer single quotes for SSJS:

    +
      +
    1. I frequently use string variables with HTML that uses double quotes. Using single quotes in SSJS means no need to escape the ones in HTML.
    2. +
    3. On most keyboard (including mine), it doesn't require pressing Shift each time. Clicking one button is faster.
    4. +
    +

    However, there are also arguments for double quotes:

    +
      +
    1. There are many English words using apostrophes, and using double quotes means no need to escape them.
    2. +
    3. JSON requires double quotes.
    4. +
    +

    In the end, pick one, align with your team, and stay consistent. Yes, this means updating quotes after copy-pasting from Stack Overflow. RegEx is your friend ;)

    +
    /* ✅ Single Quotes */
    if (response.StatusCode != 200) {
    throw {'message': 'HTTP.Get Error', 'description': 'Could not connect to example.com'};
    };

    /* ✅ Double Quotes */
    if (response.StatusCode != 200) {
    throw {"message": "HTTP.Get Error", "description": "Could not connect to example.com"};
    };

    /* ❌ Mixed Quotes */
    if (response.StatusCode != 200) {
    throw {'message': "HTTP.Get Error", 'description': "Could not connect to example.com"};
    };
    +

    Comments

    +

    Code tells you how. Comments tell you why. - Jeff Atwood

    +

    To make your code better, don't stop at just the code. Leverage comments to their full potential. Context, logic and caveats description will improve the experience for everyone - including you after few weeks.

    +

    Whenever you build more complex SSJS code, I recommend using at least three types of comments: table of contents, section and documentation. For short scripts, the last type will be enough.

    +

    1. Table of Contents Comment

    +

    The first type of comment you should use at the top of your longer scripts is the table of contents comment. This one will be your best friend during the whole lifecycle of your script.

    +

    Before even starting to write SSJS, describe the desired outcome and steps you plan to code to get there. It can be high level; it can be a draft. But it will help you focus on the best way to write your script and consider potential roadblocks or opportunities for optimisation.

    +

    As you are building your script - update the comment to reflect the approach you took. It will help you assess the impact of potential changes and find missing pieces.

    +
    /* ---------------------------------------------------------------------

    Authenticates each visitor to limit access only to SFMC logged-in users.

    1. Global Variables - should be updated for each implementation
    2. Helper Functions
    2.1. Error handling
    3. Authentication Flow
    3.1. Authorisation
    3.2. Authentication with REST Token
    3.2.1. Upsert Logging Data Extension

    --------------------------------------------------------------------- */
    +

    2. Section Comments

    +

    To fully leverage the pseudo-code table of contents, add section comments to mark where each part of your code starts.

    +

    For complex scripts, it might be a good idea to create few different levels of such comments. I use upper case with dashes for the first level, title case with dashes for the second level and only title case for the third level of comments

    +
    /* ----------------------------------------------------------------------- */
    /* ------------------------- 1. GLOBAL VARIABLES ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 2. HELPER FUNCTIONS ------------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------------- 2.1. Error handling ------------------------- */

    /* ----------------------------------------------------------------------- */
    /* ------------------------- 3. AUTHENTICATION FLOW ---------------------- */
    /* ----------------------------------------------------------------------- */

    /* ------------------------- 3.1. Authorisation -------------------------- */

    /* ------------------------- 3.2. Authentication ------------------------- */

    /* 3.2.1. Build token request payload */
    +

    3. Documentation Comments

    +

    Two previous comment types are suitable for high-level view and organisation of your more complex scripts. But the essential type of comment is the one that goes into detail about the implementation - the documentation comments.

    +

    You should use one for every custom function you create, but it might also benefit variables (especially those with values coming from an API response). Rule of thumb - add them whenever someone else reading your code for the first time would ask a question about context or purpose.

    +

    I recommend using JSDoc for few reasons:

    +
      +
    1. It's a popular standard.
    2. +
    3. It provides recommendations on what to add to the comment.
    4. +
    5. Many code editors will help you write it and highlight its syntax.
    6. +
    7. Marketing Cloud ecosystem already leverages it in Interaction Studio.
    8. +
    +
    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    /**
    * ClientID of SFMC Installed Package required for API calls
    * @type {string}
    * @const
    */
    var clientID = 'CLIENT_ID';

    /**
    * Authentication GUID passed as a query string through SSO redirect
    * @type {string}
    */
    var state = Platform.Request.GetQueryStringParameter('state');
    +

    If you find it too complex, feel free to make it simpler, as long as your approach:

    +
      +
    1. describes context and purpose and
    2. +
    3. is consistent across the codebase.
    4. +
    +

    Sum Up

    +

    It is a long article, so let's gather all the recommendations in one place:

    +
      +
    1. Be consistent
    2. +
    3. Strive for readability
    4. +
    5. Use descriptive names to provide context 🔗
    6. +
    7. Use camelCase for all elements of JS syntax 🔗
    8. +
    9. Use PascalCase for all elements of SSJS syntax 🔗
    10. +
    11. Sparse is better than dense 🔗
    12. +
    13. Use indentation to highlight code relationships 🔗
    14. +
    15. Use spaces wherever it makes the code more readable 🔗
    16. +
    17. Add a semicolon after each statement 🔗
    18. +
    19. Use single quote style 🔗
    20. +
    21. Use comments to provide required context to your script 🔗
    22. +
    +

    If you want to share something I'm missing or have arguments for a different recommendation - let me know.

    +

    Looking for more Marketing Cloud style? Check out my:

    +
    \ No newline at end of file diff --git a/docs/ssjs/ssjs-vs-ampscript-performance/index.html b/docs/ssjs/ssjs-vs-ampscript-performance/index.html index 7a06d6708..b9392662b 100644 --- a/docs/ssjs/ssjs-vs-ampscript-performance/index.html +++ b/docs/ssjs/ssjs-vs-ampscript-performance/index.html @@ -1,22 +1,83 @@ - + - -SSJS vs AMPScript Performance | Mateusz Dąbrowski + +SSJS vs AMPScript Performance | Mateusz Dąbrowski - - - + + + -
    -

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    There is much knowledge shared on blogs, social networks, and Stack Exchange in the Salesforce Marketing Cloud world. Frequently you will see some strong opinions on which scripting approach is best.

    I decided to check some of those assumptions empirically. Some test results are obvious, and some might surprise you (just as they surprised me).

    I split the article into two sections:

    1. Conclusions are the TL;DR of my tests. If you want quick high-level findings - go there.
    2. Performance Test Cases are the nerdy part, where I describe the exact code used for each case and more dive into detailed outcomes that might give you a better basis for a decision on what to use.
    You Should Know

    This article will be in constant Work In Progress state, as I plan to add new test cases and conclusions perpetually.

    Should you have any interesting idea for a test case - let me know!

    Next: speed comparison of mirrored SSJS Platform and Core functions.

    Conclusions

    AMPScript vs SSJS

    For scripting in time-critical assets (Emails, SMS, Pushes), go with AMPScript. It is much more optimised for the most popular use cases in this space, which will make a difference when scaled for hundreds of thousands of executions.

    For scripting in other assets (Landing Pages, Automation Studio), it depends on the use case. As a rule of thumb, AMPScript might be a bit more optimised, but for more complex projects, it lacks readability, flexibility and power (arrays, objects, try/catch, etc.). If you are building something simple - AMPScript might be the way to go. Otherwise, go with SSJS (or mix for optimisation).

    SSJS Best Practices

    When splitting your SSJS code block, try not to do it within a long loop (Code Block Breaking).

    However, if you find an out-of-the-box AMPScript function that does something requiring custom development on the SSJS side (ProperCase, SFDC integration), it might be worth to inject AMPScript into your SSJS. The impact of code splitting on execution time might be much smaller than that of the complex code necessary to replicate a function (ProperCase). For functions available in both languages, you should stay with the SSJS not to mix scripting contexts (LowerCase & UpperCase).

    Methodology

    The testing toolset is minimal by the nature of SSJS and AMPScript. I'm using a Cloud Page and new Date().getTime(); to capture the execution's beginning and end. Within this scope, I run a loop with the code I want to test. Finally, I divide the total time by the number of loop iterations to get an average run time.

    This approach means that the millisecond values I provide are in no way the exact times you can use to calculate the speed at scale. But they should be standardised enough to allow for meaningful comparison between various scenarios. The actual times also change a bit when we run the test multiple times, as the strain on Marketing Cloud servers at the very moment of execution also has an impact. Focus less on exact milliseconds count and more on relations between the values.

    In the test case descriptions, you can find additional details on the methodology: input used for the test, expected output, number of loop iterations or exact code tested.

    You Should Know

    For testing the execution speed of AMPScript block solutions, I'm using the SSJS to start and stop the count. I compared it with calculation using AMPScript FormatDate(Now(), 'ISO'), and there was no meaningful difference between the two.

    Performance Test Cases

    Code Block Breaking

    I wanted to test the cost of breaking out of a code block for both SSJS and AMPScript.

    Understanding the execution time impact of the scripting context switch was necessary for me to make valid conclusions for future tests and help decide on the best approach when coding a personalisation solution.

    Test Cases

    In this scenario, there is no context switch. I timed a pure SSJS loop to have a base for analysis.

    for (var i = 0; i < 10000; i++) {
    var a;
    };

    Outcomes (ms)

    SSJSSSJS + HTMLSSJS + AMPScriptAMPScriptAMPScript x2
    0.00160.14530.14220.00150.0016

    Sum Up

    1. Breaking out of the SSJS code block is impacting execution time.
    2. Breaking out of the AMPScript code block has close to none impact on execution time.

    ProperCase

    What should you use when you want to change a string to Proper Case? As there is no single function in SSJS for that, I compared two pure SSJS approaches (split/join & replace with RegEx) with AMPScript in SSJS and (nearly) pure AMPScript.

    The test was performed using ten different strings varying in number of words and capitalization:

    var sentences = [
    'one', // 1
    'one Two', // 2
    'one Two THREE', // 3
    'one Two THREE fOUR', // 4
    'one Two THREE fOUR FiVe', // 5
    'one Two THREE fOUR FiVe siX', // 6
    'one Two THREE fOUR FiVe siX &', // 7
    'one Two THREE fOUR FiVe siX & 8', // 8
    'one Two THREE fOUR FiVe siX & 8 nine', // 9
    'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10
    ];

    All approaches output final sentence as: One Two Three Four Five Six & 8 Nine-ten

    Test Cases

    function toTitleCase(string) {
    var sentence = string.toLowerCase().split(" ");
    for (var i = 0; i < sentence.length; i++) {
    sentence[i] = sentence[i][0].toUpperCase() + sentence[i].slice(1);
    };
    sentence = sentence.join(" ");
    return sentence;
    };

    title = toTitleCase(testedString);

    Outcomes (ms)

    SentenceSSJS SplitSSJS ReplaceAMPScript in SSJSAMPScript
    10.09680.07820.36860.0032
    20.13760.11860.36880.0032
    30.1750.15940.38740.0032
    40.22180.20320.3750.0062
    50.25620.2470.36860.0064
    60.29680.28120.3720.0062
    70.33440.28440.3750.003
    80.3720.28740.3720.003
    90.41260.33120.37180.0064
    100.41240.3420.3750.0064

    Sum Up:

    1. Pure AMPScript execution time for ProperCase scenario murders SSJS.
    2. When working with arrays or regex replace, SSJS execution time extends with each additional word. However, AMPScript execution time is constant thanks to the optimised out-of-the-box ProperCase function.
    3. Although AMPScript in SSJS is doing levels-of-magnitude worse than pure AMPScript, it will be a better choice then pure SSJS for long sentences (10+ words).
    4. SSJS Replace might be the option to choose despite the performance if you want more flexibility (for example, changing that Nine-ten to Nine-Ten).
    5. Otherwise, for anything longer than a few words, consider breaking from the SSJS code block to leverage AMPscript.

    LowerCase & UpperCase

    Based on the Proper Case scenario's exciting outcomes, I decided to follow up on that with a performance comparison on a function that is available out-of-the-box in both SSJS and AMPScript. For testing, I used sibling string modification - Lower Case.

    The test was performed using ten different strings varying in number of words and capitalization (same as for Proper Case):

    var sentences = [
    'one', // 1
    'one Two', // 2
    'one Two THREE', // 3
    'one Two THREE fOUR', // 4
    'one Two THREE fOUR FiVe', // 5
    'one Two THREE fOUR FiVe siX', // 6
    'one Two THREE fOUR FiVe siX &', // 7
    'one Two THREE fOUR FiVe siX & 8', // 8
    'one Two THREE fOUR FiVe siX & 8 nine', // 9
    'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10
    ];

    All approaches output final sentence as: one two three four five six & 8 nine-ten

    Test Cases

    title = testedString.toLowerCase();

    Outcomes (ms)

    SentenceSSJS MethodSSJS FunctionAMPScript in SSJSAMPScript
    10.0140.02030.36250.0032
    20.01250.01870.36250.0031
    30.01250.01880.36250.0031
    40.01250.01880.36870.0016
    50.01250.01870.36410.0015
    60.01250.01880.36410.0031
    70.01250.01870.36250.0032
    80.01250.01870.36720.0031
    90.01250.02040.35930.0032
    100.0140.02030.36250.0016

    Sum up

    1. The out-of-the-box JavaScript method works much better then the custom solution developer for Proper Case - just like the AMPScript function, it executes in constant time regardless of sentence length.
    2. Pure AMPScript execution time still is better, but due to constant time in both languages and much faster SSJS speed, there is no longer any reason to use AMPScript in SSJS or break out of SSJS code block.
    - - +

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    +

    There is much knowledge shared on blogs, social networks, and Stack Exchange in the Salesforce Marketing Cloud world. Frequently you will see some strong opinions on which scripting approach is best.

    +

    I decided to check some of those assumptions empirically. Some test results are obvious, and some might surprise you (just as they surprised me).

    +

    I split the article into two sections:

    +
      +
    1. Conclusions are the TL;DR of my tests. If you want quick high-level findings - go there.
    2. +
    3. Performance Test Cases are the nerdy part, where I describe the exact code used for each case and more dive into detailed outcomes that might give you a better basis for a decision on what to use.
    4. +
    +
    You Should Know

    This article will be in constant Work In Progress state, as I plan to add new test cases and conclusions perpetually.

    Should you have any interesting idea for a test case - let me know!

    Next: speed comparison of mirrored SSJS Platform and Core functions.

    +

    Conclusions

    +

    AMPScript vs SSJS

    +

    For scripting in time-critical assets (Emails, SMS, Pushes), go with AMPScript. It is much more optimised for the most popular use cases in this space, which will make a difference when scaled for hundreds of thousands of executions.

    +

    For scripting in other assets (Landing Pages, Automation Studio), it depends on the use case. As a rule of thumb, AMPScript might be a bit more optimised, but for more complex projects, it lacks readability, flexibility and power (arrays, objects, try/catch, etc.). If you are building something simple - AMPScript might be the way to go. Otherwise, go with SSJS (or mix for optimisation).

    +

    SSJS Best Practices

    +

    When splitting your SSJS code block, try not to do it within a long loop (Code Block Breaking).

    +

    However, if you find an out-of-the-box AMPScript function that does something requiring custom development on the SSJS side (ProperCase, SFDC integration), it might be worth to inject AMPScript into your SSJS. The impact of code splitting on execution time might be much smaller than that of the complex code necessary to replicate a function (ProperCase). For functions available in both languages, you should stay with the SSJS not to mix scripting contexts (LowerCase & UpperCase).

    +

    Methodology

    +

    The testing toolset is minimal by the nature of SSJS and AMPScript. I'm using a Cloud Page and new Date().getTime(); to capture the execution's beginning and end. Within this scope, I run a loop with the code I want to test. Finally, I divide the total time by the number of loop iterations to get an average run time.

    +

    This approach means that the millisecond values I provide are in no way the exact times you can use to calculate the speed at scale. But they should be standardised enough to allow for meaningful comparison between various scenarios. The actual times also change a bit when we run the test multiple times, as the strain on Marketing Cloud servers at the very moment of execution also has an impact. Focus less on exact milliseconds count and more on relations between the values.

    +

    In the test case descriptions, you can find additional details on the methodology: input used for the test, expected output, number of loop iterations or exact code tested.

    +
    You Should Know

    For testing the execution speed of AMPScript block solutions, I'm using the SSJS to start and stop the count. I compared it with calculation using AMPScript FormatDate(Now(), 'ISO'), and there was no meaningful difference between the two.

    +

    Performance Test Cases

    +

    Code Block Breaking

    +

    I wanted to test the cost of breaking out of a code block for both SSJS and AMPScript.

    +

    Understanding the execution time impact of the scripting context switch was necessary for me to make valid conclusions for future tests and help decide on the best approach when coding a personalisation solution.

    +

    Test Cases

    +

    In this scenario, there is no context switch. I timed a pure SSJS loop to have a base for analysis.

    for (var i = 0; i < 10000; i++) {
    var a;
    };
    +

    Outcomes (ms)

    +
    SSJSSSJS + HTMLSSJS + AMPScriptAMPScriptAMPScript x2
    0.00160.14530.14220.00150.0016
    +

    Sum Up

    +
      +
    1. Breaking out of the SSJS code block is impacting execution time.
    2. +
    3. Breaking out of the AMPScript code block has close to none impact on execution time.
    4. +
    +

    ProperCase

    +

    What should you use when you want to change a string to Proper Case? As there is no single function in SSJS for that, I compared two pure SSJS approaches (split/join & replace with RegEx) with AMPScript in SSJS and (nearly) pure AMPScript.

    +

    The test was performed using ten different strings varying in number of words and capitalization:

    +
    var sentences = [
    'one', // 1
    'one Two', // 2
    'one Two THREE', // 3
    'one Two THREE fOUR', // 4
    'one Two THREE fOUR FiVe', // 5
    'one Two THREE fOUR FiVe siX', // 6
    'one Two THREE fOUR FiVe siX &', // 7
    'one Two THREE fOUR FiVe siX & 8', // 8
    'one Two THREE fOUR FiVe siX & 8 nine', // 9
    'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10
    ];
    +

    All approaches output final sentence as: One Two Three Four Five Six & 8 Nine-ten

    +

    Test Cases

    +
    function toTitleCase(string) {
    var sentence = string.toLowerCase().split(" ");
    for (var i = 0; i < sentence.length; i++) {
    sentence[i] = sentence[i][0].toUpperCase() + sentence[i].slice(1);
    };
    sentence = sentence.join(" ");
    return sentence;
    };

    title = toTitleCase(testedString);
    +

    Outcomes (ms)

    +
    SentenceSSJS SplitSSJS ReplaceAMPScript in SSJSAMPScript
    10.09680.07820.36860.0032
    20.13760.11860.36880.0032
    30.1750.15940.38740.0032
    40.22180.20320.3750.0062
    50.25620.2470.36860.0064
    60.29680.28120.3720.0062
    70.33440.28440.3750.003
    80.3720.28740.3720.003
    90.41260.33120.37180.0064
    100.41240.3420.3750.0064
    +

    Sum Up:

    +
      +
    1. Pure AMPScript execution time for ProperCase scenario murders SSJS.
    2. +
    3. When working with arrays or regex replace, SSJS execution time extends with each additional word. However, AMPScript execution time is constant thanks to the optimised out-of-the-box ProperCase function.
    4. +
    5. Although AMPScript in SSJS is doing levels-of-magnitude worse than pure AMPScript, it will be a better choice then pure SSJS for long sentences (10+ words).
    6. +
    7. SSJS Replace might be the option to choose despite the performance if you want more flexibility (for example, changing that Nine-ten to Nine-Ten).
    8. +
    9. Otherwise, for anything longer than a few words, consider breaking from the SSJS code block to leverage AMPscript.
    10. +
    +

    LowerCase & UpperCase

    +

    Based on the Proper Case scenario's exciting outcomes, I decided to follow up on that with a performance comparison on a function that is available out-of-the-box in both SSJS and AMPScript. For testing, I used sibling string modification - Lower Case.

    +

    The test was performed using ten different strings varying in number of words and capitalization (same as for Proper Case):

    +
    var sentences = [
    'one', // 1
    'one Two', // 2
    'one Two THREE', // 3
    'one Two THREE fOUR', // 4
    'one Two THREE fOUR FiVe', // 5
    'one Two THREE fOUR FiVe siX', // 6
    'one Two THREE fOUR FiVe siX &', // 7
    'one Two THREE fOUR FiVe siX & 8', // 8
    'one Two THREE fOUR FiVe siX & 8 nine', // 9
    'one Two THREE fOUR FiVe siX & 8 nine-ten' // 10
    ];
    +

    All approaches output final sentence as: one two three four five six & 8 nine-ten

    +

    Test Cases

    +
    title = testedString.toLowerCase();
    +

    Outcomes (ms)

    +
    SentenceSSJS MethodSSJS FunctionAMPScript in SSJSAMPScript
    10.0140.02030.36250.0032
    20.01250.01870.36250.0031
    30.01250.01880.36250.0031
    40.01250.01880.36870.0016
    50.01250.01870.36410.0015
    60.01250.01880.36410.0031
    70.01250.01870.36250.0032
    80.01250.01870.36720.0031
    90.01250.02040.35930.0032
    100.0140.02030.36250.0016
    +

    Sum up

    +
      +
    1. The out-of-the-box JavaScript method works much better then the custom solution developer for Proper Case - just like the AMPScript function, it executes in constant time regardless of sentence length.
    2. +
    3. Pure AMPScript execution time still is better, but due to constant time in both languages and much faster SSJS speed, there is no longer any reason to use AMPScript in SSJS or break out of SSJS code block.
    4. +
    \ No newline at end of file diff --git a/docs/tags/amp-script/index.html b/docs/tags/amp-script/index.html index 8cf1fd602..7bac80ccb 100644 --- a/docs/tags/amp-script/index.html +++ b/docs/tags/amp-script/index.html @@ -1,22 +1,19 @@ - + - -6 docs tagged with "AMPScript" | Mateusz Dąbrowski + +6 docs tagged with "AMPScript" | Mateusz Dąbrowski - - - + + + -
    -

    6 docs tagged with "AMPScript"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    - - +

    6 docs tagged with "AMPScript"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    \ No newline at end of file diff --git a/docs/tags/analytics/index.html b/docs/tags/analytics/index.html index aec38658a..235fc84d4 100644 --- a/docs/tags/analytics/index.html +++ b/docs/tags/analytics/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Analytics" | Mateusz Dąbrowski + +5 docs tagged with "Analytics" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Analytics"

    View All Tags

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    - - +

    5 docs tagged with "Analytics"

    View All Tags

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    \ No newline at end of file diff --git a/docs/tags/app-exchange/index.html b/docs/tags/app-exchange/index.html index f16e5a8b0..9c145ea57 100644 --- a/docs/tags/app-exchange/index.html +++ b/docs/tags/app-exchange/index.html @@ -1,22 +1,19 @@ - + - -2 docs tagged with "AppExchange" | Mateusz Dąbrowski + +2 docs tagged with "AppExchange" | Mateusz Dąbrowski - - - + + + -
    -

    2 docs tagged with "AppExchange"

    View All Tags

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    - - + \ No newline at end of file diff --git a/docs/tags/app/index.html b/docs/tags/app/index.html index d11347344..b573c582c 100644 --- a/docs/tags/app/index.html +++ b/docs/tags/app/index.html @@ -1,22 +1,19 @@ - + - -4 docs tagged with "App" | Mateusz Dąbrowski + +4 docs tagged with "App" | Mateusz Dąbrowski - - - + + + -
    -

    4 docs tagged with "App"

    View All Tags

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    - - +

    4 docs tagged with "App"

    View All Tags

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    \ No newline at end of file diff --git a/docs/tags/automation/index.html b/docs/tags/automation/index.html index b1a7d6b9d..2ee5fc19a 100644 --- a/docs/tags/automation/index.html +++ b/docs/tags/automation/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Automation" | Mateusz Dąbrowski + +5 docs tagged with "Automation" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Automation"

    View All Tags

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    - - +

    5 docs tagged with "Automation"

    View All Tags

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    \ No newline at end of file diff --git a/docs/tags/behavioral-triggers/index.html b/docs/tags/behavioral-triggers/index.html index 3bff12f14..d247b6feb 100644 --- a/docs/tags/behavioral-triggers/index.html +++ b/docs/tags/behavioral-triggers/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Behavioral Triggers" | Mateusz Dąbrowski + +One doc tagged with "Behavioral Triggers" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/best-practice/index.html b/docs/tags/best-practice/index.html index 0579246c8..094fe8abb 100644 --- a/docs/tags/best-practice/index.html +++ b/docs/tags/best-practice/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Best Practice" | Mateusz Dąbrowski + +5 docs tagged with "Best Practice" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Best Practice"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SSJS Style Guide

    Script with style. Readable code is a few rules & best practices away.

    Zen of SFMC

    Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.

    - - +

    5 docs tagged with "Best Practice"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SSJS Style Guide

    Script with style. Readable code is a few rules & best practices away.

    Zen of SFMC

    Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.

    \ No newline at end of file diff --git a/docs/tags/cloud-page/index.html b/docs/tags/cloud-page/index.html index ed1c9b619..8b90befa9 100644 --- a/docs/tags/cloud-page/index.html +++ b/docs/tags/cloud-page/index.html @@ -1,22 +1,19 @@ - + - -8 docs tagged with "Cloud Page" | Mateusz Dąbrowski + +8 docs tagged with "Cloud Page" | Mateusz Dąbrowski - - - + + + -
    -

    8 docs tagged with "Cloud Page"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    - - +

    8 docs tagged with "Cloud Page"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    \ No newline at end of file diff --git a/docs/tags/configuration/index.html b/docs/tags/configuration/index.html index 32d2ec8b4..994fcdb3e 100644 --- a/docs/tags/configuration/index.html +++ b/docs/tags/configuration/index.html @@ -1,22 +1,19 @@ - + - -8 docs tagged with "Configuration" | Mateusz Dąbrowski + +8 docs tagged with "Configuration" | Mateusz Dąbrowski - - - + + + -
    -

    8 docs tagged with "Configuration"

    View All Tags

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    - - +

    8 docs tagged with "Configuration"

    View All Tags

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    \ No newline at end of file diff --git a/docs/tags/crm/index.html b/docs/tags/crm/index.html index 860d3a943..6269f6641 100644 --- a/docs/tags/crm/index.html +++ b/docs/tags/crm/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "CRM" | Mateusz Dąbrowski + +One doc tagged with "CRM" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/data-extensions/index.html b/docs/tags/data-extensions/index.html index b0025e933..d0b0ac233 100644 --- a/docs/tags/data-extensions/index.html +++ b/docs/tags/data-extensions/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Data Extensions" | Mateusz Dąbrowski + +5 docs tagged with "Data Extensions" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Data Extensions"

    View All Tags

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    - - +

    5 docs tagged with "Data Extensions"

    View All Tags

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    \ No newline at end of file diff --git a/docs/tags/data-management/index.html b/docs/tags/data-management/index.html index 298d11a6b..9e1367e4c 100644 --- a/docs/tags/data-management/index.html +++ b/docs/tags/data-management/index.html @@ -1,22 +1,19 @@ - + - -3 docs tagged with "Data Management" | Mateusz Dąbrowski + +3 docs tagged with "Data Management" | Mateusz Dąbrowski - - - + + + -
    -

    3 docs tagged with "Data Management"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    - - +

    3 docs tagged with "Data Management"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    \ No newline at end of file diff --git a/docs/tags/debugging/index.html b/docs/tags/debugging/index.html index db649bb39..99a06b93d 100644 --- a/docs/tags/debugging/index.html +++ b/docs/tags/debugging/index.html @@ -1,22 +1,19 @@ - + - -4 docs tagged with "Debugging" | Mateusz Dąbrowski + +4 docs tagged with "Debugging" | Mateusz Dąbrowski - - - + + + -
    -

    4 docs tagged with "Debugging"

    View All Tags

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    - - +

    4 docs tagged with "Debugging"

    View All Tags

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    \ No newline at end of file diff --git a/docs/tags/deliverability/index.html b/docs/tags/deliverability/index.html index e0f37c5ee..63d60541e 100644 --- a/docs/tags/deliverability/index.html +++ b/docs/tags/deliverability/index.html @@ -1,22 +1,19 @@ - + - -2 docs tagged with "Deliverability" | Mateusz Dąbrowski + +2 docs tagged with "Deliverability" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/einstein/index.html b/docs/tags/einstein/index.html index 1b05ece9e..6923f1cc1 100644 --- a/docs/tags/einstein/index.html +++ b/docs/tags/einstein/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Einstein" | Mateusz Dąbrowski + +One doc tagged with "Einstein" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/eloqua/index.html b/docs/tags/eloqua/index.html index 9b274044d..de4257d27 100644 --- a/docs/tags/eloqua/index.html +++ b/docs/tags/eloqua/index.html @@ -1,22 +1,19 @@ - + - -2 docs tagged with "Eloqua" | Mateusz Dąbrowski + +2 docs tagged with "Eloqua" | Mateusz Dąbrowski - - - + + + -
    -

    2 docs tagged with "Eloqua"

    View All Tags

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    - - +

    2 docs tagged with "Eloqua"

    View All Tags

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    \ No newline at end of file diff --git a/docs/tags/email/index.html b/docs/tags/email/index.html index b5d4e8973..b31ab2f30 100644 --- a/docs/tags/email/index.html +++ b/docs/tags/email/index.html @@ -1,22 +1,19 @@ - + - -7 docs tagged with "Email" | Mateusz Dąbrowski + +7 docs tagged with "Email" | Mateusz Dąbrowski - - - + + + -
    -

    7 docs tagged with "Email"

    View All Tags

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    - - +

    7 docs tagged with "Email"

    View All Tags

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    \ No newline at end of file diff --git a/docs/tags/index.html b/docs/tags/index.html index 3338bcaec..c5124ba6f 100644 --- a/docs/tags/index.html +++ b/docs/tags/index.html @@ -1,22 +1,19 @@ - + - -Tags | Mateusz Dąbrowski + +Tags | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/integration/index.html b/docs/tags/integration/index.html index 11de0a420..c5256e872 100644 --- a/docs/tags/integration/index.html +++ b/docs/tags/integration/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Integration" | Mateusz Dąbrowski + +One doc tagged with "Integration" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/interaction-studio/index.html b/docs/tags/interaction-studio/index.html index ba842699a..87b783cd7 100644 --- a/docs/tags/interaction-studio/index.html +++ b/docs/tags/interaction-studio/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Interaction Studio" | Mateusz Dąbrowski + +6 docs tagged with "Interaction Studio" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Interaction Studio"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    - - +

    6 docs tagged with "Interaction Studio"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    \ No newline at end of file diff --git a/docs/tags/java-script/index.html b/docs/tags/java-script/index.html index 3b0cf2821..725faddad 100644 --- a/docs/tags/java-script/index.html +++ b/docs/tags/java-script/index.html @@ -1,22 +1,19 @@ - + - -7 docs tagged with "JavaScript" | Mateusz Dąbrowski + +7 docs tagged with "JavaScript" | Mateusz Dąbrowski - - - + + + -
    -

    7 docs tagged with "JavaScript"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    JS If & Switch

    Deep dive into the two pillars of JavaScript flow control.

    JS Loops

    JavaScript offers four for loops and two while loops. What's the difference?

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    - - +

    7 docs tagged with "JavaScript"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    JS If & Switch

    Deep dive into the two pillars of JavaScript flow control.

    JS Loops

    JavaScript offers four for loops and two while loops. What's the difference?

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    \ No newline at end of file diff --git a/docs/tags/journey/index.html b/docs/tags/journey/index.html index 5228af4d4..f730f82f4 100644 --- a/docs/tags/journey/index.html +++ b/docs/tags/journey/index.html @@ -1,22 +1,19 @@ - + - -3 docs tagged with "Journey" | Mateusz Dąbrowski + +3 docs tagged with "Journey" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/marketing-cloud-personalization/index.html b/docs/tags/marketing-cloud-personalization/index.html index ca7cf69df..db4df97aa 100644 --- a/docs/tags/marketing-cloud-personalization/index.html +++ b/docs/tags/marketing-cloud-personalization/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Marketing Cloud Personalization" | Mateusz Dąbrowski + +6 docs tagged with "Marketing Cloud Personalization" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Marketing Cloud Personalization"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    - - +

    6 docs tagged with "Marketing Cloud Personalization"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    \ No newline at end of file diff --git a/docs/tags/marketing-cloud/index.html b/docs/tags/marketing-cloud/index.html index 6cb4f05a0..0e0368e43 100644 --- a/docs/tags/marketing-cloud/index.html +++ b/docs/tags/marketing-cloud/index.html @@ -1,22 +1,19 @@ - + - -47 docs tagged with "Marketing Cloud" | Mateusz Dąbrowski + +48 docs tagged with "Marketing Cloud" | Mateusz Dąbrowski - - - + + + -
    -

    47 docs tagged with "Marketing Cloud"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    SFMC SQL Basics

    SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.

    SFMC SQL Case

    Empower your Marketing Cloud queries with conditional SQL CASE logic.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC SQL Join

    Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.

    SFMC SQL NULL Functions

    IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.

    SFMC SQL Where

    Use WHERE to make your query lean and to the point. Less is more.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    SSJS Loops

    Let's dive into limited looping options of the SSJS.

    SSJS Style Guide

    Script with style. Readable code is a few rules & best practices away.

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    Zen of SFMC

    Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.

    - - +

    48 docs tagged with "Marketing Cloud"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC AppExchange Solutions

    Fill the feature gaps with plug-and-play apps. Salesforce Marketing Cloud AppExchange ready-to-use solution highlights.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    SFMC SQL Basics

    SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.

    SFMC SQL Case

    Empower your Marketing Cloud queries with conditional SQL CASE logic.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC SQL Join

    Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.

    SFMC SQL NULL Functions

    IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.

    SFMC SQL Where

    Use WHERE to make your query lean and to the point. Less is more.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    SSJS Loops

    Let's dive into limited looping options of the SSJS.

    SSJS Style Guide

    Script with style. Readable code is a few rules & best practices away.

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    Zen of SFMC

    Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.

    \ No newline at end of file diff --git a/docs/tags/performance/index.html b/docs/tags/performance/index.html index 7e37a1f80..6ba09c6a9 100644 --- a/docs/tags/performance/index.html +++ b/docs/tags/performance/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Performance" | Mateusz Dąbrowski + +One doc tagged with "Performance" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/personalisation/index.html b/docs/tags/personalisation/index.html index 6be20e574..9dd4d96b2 100644 --- a/docs/tags/personalisation/index.html +++ b/docs/tags/personalisation/index.html @@ -1,22 +1,19 @@ - + - -7 docs tagged with "Personalisation" | Mateusz Dąbrowski + +8 docs tagged with "Personalisation" | Mateusz Dąbrowski - - - + + + -
    -

    7 docs tagged with "Personalisation"

    View All Tags

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    - - +

    8 docs tagged with "Personalisation"

    View All Tags

    Engage with Countdown

    Start boosting conversion rates right now! There are many ways to engage customers, and urgency is the king among them. Learn how to leverage it today.

    MCP Open Time Email

    Personalise your SFMC emails with the next best action recommendations. In real-time. Even after delivery. Magic.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    Tailor the experience with data logic

    Everyone and his boss are talking about personalisation. Most stop at tailoring the content. Don't be that person. Utilise the power of simple data logic and control the user flows.

    \ No newline at end of file diff --git a/docs/tags/setup/index.html b/docs/tags/setup/index.html index 8b8f0168e..59ddc8a11 100644 --- a/docs/tags/setup/index.html +++ b/docs/tags/setup/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Setup" | Mateusz Dąbrowski + +5 docs tagged with "Setup" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Setup"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    - - +

    5 docs tagged with "Setup"

    View All Tags

    MCP Catalog Architecture

    Marketing Cloud Personalization (Interaction Studio) Catalog Objects architecture, data ingestion, limitations, tricks and tips. Build right from the start.

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC MCC Integration Patterns

    Marketing Cloud Connect Architecture: Single-Org, Multi-Org and everything in between. Integrate Salesforce CRM and Marketing Cloud the right way.

    \ No newline at end of file diff --git a/docs/tags/sms/index.html b/docs/tags/sms/index.html index 571aa4fa5..ac1f18875 100644 --- a/docs/tags/sms/index.html +++ b/docs/tags/sms/index.html @@ -1,22 +1,19 @@ - + - -3 docs tagged with "SMS" | Mateusz Dąbrowski + +3 docs tagged with "SMS" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/snippet/index.html b/docs/tags/snippet/index.html index d42a98155..2e8fab80a 100644 --- a/docs/tags/snippet/index.html +++ b/docs/tags/snippet/index.html @@ -1,22 +1,19 @@ - + - -9 docs tagged with "Snippet" | Mateusz Dąbrowski + +9 docs tagged with "Snippet" | Mateusz Dąbrowski - - - + + + -
    -

    9 docs tagged with "Snippet"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    - - +

    9 docs tagged with "Snippet"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    \ No newline at end of file diff --git a/docs/tags/sql/index.html b/docs/tags/sql/index.html index e3d0de1ef..0be32df20 100644 --- a/docs/tags/sql/index.html +++ b/docs/tags/sql/index.html @@ -1,22 +1,19 @@ - + - -20 docs tagged with "SQL" | Mateusz Dąbrowski + +20 docs tagged with "SQL" | Mateusz Dąbrowski - - - + + + -
    -

    20 docs tagged with "SQL"

    View All Tags

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC SQL Basics

    SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.

    SFMC SQL Case

    Empower your Marketing Cloud queries with conditional SQL CASE logic.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC SQL Join

    Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.

    SFMC SQL NULL Functions

    IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.

    SFMC SQL Where

    Use WHERE to make your query lean and to the point. Less is more.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    - - +

    20 docs tagged with "SQL"

    View All Tags

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    SFMC SQL Basics

    SELECT your data FROM Salesforce Marketing Cloud WHERE drag-and-drop Filters are not enough.

    SFMC SQL Case

    Empower your Marketing Cloud queries with conditional SQL CASE logic.

    SFMC SQL Debugging Email Sends

    Make finding problems with email delivery in Salesforce Marketing Cloud great again. SQL with Query Studio to the rescue.

    SFMC SQL Join

    Data Extensions. System Data Views. With the JOIN statement, use one query to rule them all.

    SFMC SQL NULL Functions

    IS NULL, or IS NOT NULL, that is the question. Ways of working with NULL values in SFMC SQL.

    SFMC SQL Where

    Use WHERE to make your query lean and to the point. Less is more.

    SFMC System Data Views

    Dive deep into System Data Views - the backend Marketing Cloud data. Actionable pearls await.

    \ No newline at end of file diff --git a/docs/tags/ssjs/index.html b/docs/tags/ssjs/index.html index db153a79b..170d15102 100644 --- a/docs/tags/ssjs/index.html +++ b/docs/tags/ssjs/index.html @@ -1,22 +1,19 @@ - + - -13 docs tagged with "SSJS" | Mateusz Dąbrowski + +13 docs tagged with "SSJS" | Mateusz Dąbrowski - - - + + + -
    -

    13 docs tagged with "SSJS"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    SSJS Loops

    Let's dive into limited looping options of the SSJS.

    SSJS Style Guide

    Script with style. Readable code is a few rules & best practices away.

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    - - +

    13 docs tagged with "SSJS"

    View All Tags

    AMPScript in SSJS

    Not all AMPScript functions are available in SSJS. But you still can use them.

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    SFMC Code Resource

    Learn how to use and abuse SFMC Code Resources, the free-of-charge programmatic powerhouse.

    SFMC Contact Deletion

    Marketing Automation is as powerful as the database quality behind it. To make it good you must first remove the bad. Let's do it.

    Solve with Cloud Page Apps

    Create micro applications tailored to your organisation needs using only Salesforce Marketing Cloud features.

    SSJS Loops

    Let's dive into limited looping options of the SSJS.

    SSJS Style Guide

    Script with style. Readable code is a few rules & best practices away.

    SSJS vs AMPScript Performance

    Should I use AMPScript or SSJS? Which is better? As always, it depends. Check the performance comparisons for various use cases.

    \ No newline at end of file diff --git a/docs/tags/style-guide/index.html b/docs/tags/style-guide/index.html index e10efa189..b679d72b1 100644 --- a/docs/tags/style-guide/index.html +++ b/docs/tags/style-guide/index.html @@ -1,22 +1,19 @@ - + - -3 docs tagged with "Style Guide" | Mateusz Dąbrowski + +3 docs tagged with "Style Guide" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/type-script/index.html b/docs/tags/type-script/index.html index a31a8fd16..97a651342 100644 --- a/docs/tags/type-script/index.html +++ b/docs/tags/type-script/index.html @@ -1,22 +1,19 @@ - + - -3 docs tagged with "TypeScript" | Mateusz Dąbrowski + +4 docs tagged with "TypeScript" | Mateusz Dąbrowski - - - + + + -
    -

    3 docs tagged with "TypeScript"

    View All Tags

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    - - +

    4 docs tagged with "TypeScript"

    View All Tags

    MCP Catalog ETL Metadata Viewer

    Debug your Marketing Cloud Personalization (Interaction Studio) Catalog Object Item attributes with the power of Serverside Code.

    MCP Serverside Code Basics

    Wrap your head around the core feature of Marketing Cloud Personalization (Interaction Studio) and build the bridge between marketer and customer.

    MCP Serverside Code Properties

    Build your marketers' dream campaign configuration UI in Marketing Cloud Personalization (Interaction Studio). All the input magic in one place.

    \ No newline at end of file diff --git a/docs/tags/users/index.html b/docs/tags/users/index.html index 267d1768b..1d72a0a25 100644 --- a/docs/tags/users/index.html +++ b/docs/tags/users/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Users" | Mateusz Dąbrowski + +One doc tagged with "Users" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/docs/tags/webinar/index.html b/docs/tags/webinar/index.html index b309c23fc..560a64d63 100644 --- a/docs/tags/webinar/index.html +++ b/docs/tags/webinar/index.html @@ -1,22 +1,19 @@ - + - -3 docs tagged with "Webinar" | Mateusz Dąbrowski + +3 docs tagged with "Webinar" | Mateusz Dąbrowski - - - + + + -
    -

    3 docs tagged with "Webinar"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    - - +

    3 docs tagged with "Webinar"

    View All Tags

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    \ No newline at end of file diff --git a/docs/webinars/sfmc-webinar-account-architecture/index.html b/docs/webinars/sfmc-webinar-account-architecture/index.html index 859b1c268..75fc9fd27 100644 --- a/docs/webinars/sfmc-webinar-account-architecture/index.html +++ b/docs/webinars/sfmc-webinar-account-architecture/index.html @@ -1,22 +1,38 @@ - + - -SFMC Account Architecture | Mateusz Dąbrowski + +SFMC Account Architecture | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    Table of Contents

    1. SFMC Business Units (5:53)
    2. Business Units Setup Patterns (21:02)
    3. Single-Org vs Multi-Org (27:31)
    4. Marketing Cloud Connect Patterns (41:36)
    5. SAP, Private Domains & IPs (50:21)
    6. Deliverability & IP Warmup (56:22)

    Video


    You Should Know

    While one SF Org can have only one integration to a single Marketing Cloud Account, you can leverage more than one Integration User on the Salesforce side for that connection. Doing so provides a few significant benefits:

    1. The recommended limit of up to 5 Business Units per integration in Multi-Org is applied to the SF Integration User, not Marketing Cloud Connect itself. It enables you to use multiple SF Integration Users in a single SF Org to connect dozens of Business Units (up to 5 per User).
    2. The shared Synchronized Objects configuration per SF Org is applied to SF Integration User. It enables you to set distinct configurations per each SF Integration User (shared across Business Units connected using the same User).
    3. While you still cannot control the Synchronized DEs visibility of SFMC Users, you can control which Objects and Records are being synchronized to each Business Unit by applying appropriate Permissions to each SF Integration User. It enables use cases like syncing different Contact Record Types to each Business Unit.

    Using the above approach requires additional User licences on the SF CRM side and adds complexity to your implementation. However, it can significantly expand possible use cases in Multi-Org configurations. Full details in the Marketing Cloud Connect Integration Patterns deep dive.

    Materials

    28 January 2023Salesforce Marketing Cloud Infrastructure Setup - Org Setup
    RecordingYouTube
    ArticlesSFMC MCC Integration Patterns
    Salesforce Architects blog on Business Units and Marketing Cloud Connect
    Salesforce Documentation on Multi-Org Considerations
    - - +

    SFMC Account Architecture

    Learn how to structure your Marketing Cloud Account to make the most of the Business Units, Marketing Cloud Connect and deliverability features.

    +

    Table of Contents

    +
      +
    1. SFMC Business Units (5:53)
    2. +
    3. Business Units Setup Patterns (21:02)
    4. +
    5. Single-Org vs Multi-Org (27:31)
    6. +
    7. Marketing Cloud Connect Patterns (41:36)
    8. +
    9. SAP, Private Domains & IPs (50:21)
    10. +
    11. Deliverability & IP Warmup (56:22)
    12. +
    +

    Video

    +
    +
    +
    You Should Know

    While one SF Org can have only one integration to a single Marketing Cloud Account, you can leverage more than one Integration User on the Salesforce side for that connection. Doing so provides a few significant benefits:

      +
    1. The recommended limit of up to 5 Business Units per integration in Multi-Org is applied to the SF Integration User, not Marketing Cloud Connect itself. It enables you to use multiple SF Integration Users in a single SF Org to connect dozens of Business Units (up to 5 per User).
    2. +
    3. The shared Synchronized Objects configuration per SF Org is applied to SF Integration User. It enables you to set distinct configurations per each SF Integration User (shared across Business Units connected using the same User).
    4. +
    5. While you still cannot control the Synchronized DEs visibility of SFMC Users, you can control which Objects and Records are being synchronized to each Business Unit by applying appropriate Permissions to each SF Integration User. It enables use cases like syncing different Contact Record Types to each Business Unit.
    6. +

    Using the above approach requires additional User licences on the SF CRM side and adds complexity to your implementation. However, it can significantly expand possible use cases in Multi-Org configurations. Full details in the Marketing Cloud Connect Integration Patterns deep dive.

    +

    Materials

    +
    28 January 2023Salesforce Marketing Cloud Infrastructure Setup - Org Setup
    RecordingYouTube
    ArticlesSFMC MCC Integration Patterns
    Salesforce Architects blog on Business Units and Marketing Cloud Connect
    Salesforce Documentation on Multi-Org Considerations
    \ No newline at end of file diff --git a/docs/webinars/sfmc-webinar-architecting-web-solutions/index.html b/docs/webinars/sfmc-webinar-architecting-web-solutions/index.html index d0eb8c3a9..5b431de1d 100644 --- a/docs/webinars/sfmc-webinar-architecting-web-solutions/index.html +++ b/docs/webinars/sfmc-webinar-architecting-web-solutions/index.html @@ -1,22 +1,37 @@ - + - -Architecting Web Solutions in SFMC | Mateusz Dąbrowski + +Architecting Web Solutions in SFMC | Mateusz Dąbrowski - - - + + + -
    -

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    Table of Contents

    1. Web Studio 101 (3:07)
    2. AMPScript vs SSJS in Web Studio (12:38)
    3. Web Studio Patterns (19:53)
      1. Landing Page (20:10)
      2. Web Form (33:50)
      3. Preference Center (46:32)
      4. Cloud Page App (57:30)
    4. Web Studio Security (1:03:17)

    Video

    Materials

    14 June 2022Architecting Web Solutions in SFMC
    RecordingYouTube
    SlidesPDF
    ArticlesSolve with Cloud Page Apps & Power of Code Resources
    - - +

    Architecting Web Solutions in SFMC

    Learn how to make the most out of Marketing Cloud Web Studio using best practices and tested architecture patterns for Cloud Pages and Code Resources.

    +

    Table of Contents

    +
      +
    1. Web Studio 101 (3:07)
    2. +
    3. AMPScript vs SSJS in Web Studio (12:38)
    4. +
    5. Web Studio Patterns (19:53) +
        +
      1. Landing Page (20:10)
      2. +
      3. Web Form (33:50)
      4. +
      5. Preference Center (46:32)
      6. +
      7. Cloud Page App (57:30)
      8. +
      +
    6. +
    7. Web Studio Security (1:03:17)
    8. +
    +

    Video

    +
    +

    Materials

    +
    14 June 2022Architecting Web Solutions in SFMC
    RecordingYouTube
    SlidesPDF
    ArticlesSolve with Cloud Page Apps & Power of Code Resources
    \ No newline at end of file diff --git a/docs/webinars/sfmc-webinar-cloud-page-apps/index.html b/docs/webinars/sfmc-webinar-cloud-page-apps/index.html index 6ec48009b..0bcc79c00 100644 --- a/docs/webinars/sfmc-webinar-cloud-page-apps/index.html +++ b/docs/webinars/sfmc-webinar-cloud-page-apps/index.html @@ -1,22 +1,32 @@ - + - -SFMC Cloud Page Apps | Mateusz Dąbrowski + +SFMC Cloud Page Apps | Mateusz Dąbrowski - - - + + + -
    -

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    Table of Contents

    1. SFMC Solutioning 101 (4:15)
    2. Cloud Page App 101 (12:11)
    3. AppExchange Menu Magic (14:20)
    4. Cloud Page App SSO (22:06)
    5. Simple Cloud Page App (26:53)
    6. Complex Cloud Page App (43:36)

    Video

    Materials

    19 October 2022When AppExchange is right and what to do when it's wrong
    RecordingYouTube
    SlidesPDF
    SnippetsGitHub
    ArticlesSolve with Cloud Page Apps & Power of Code Resources
    - - +

    SFMC Cloud Page Apps

    Learn how and when to create a custom application for your SFMC users using Cloud Pages, Code Resources and Installed Packages.

    +

    Table of Contents

    +
      +
    1. SFMC Solutioning 101 (4:15)
    2. +
    3. Cloud Page App 101 (12:11)
    4. +
    5. AppExchange Menu Magic (14:20)
    6. +
    7. Cloud Page App SSO (22:06)
    8. +
    9. Simple Cloud Page App (26:53)
    10. +
    11. Complex Cloud Page App (43:36)
    12. +
    +

    Video

    +
    +

    Materials

    +
    19 October 2022When AppExchange is right and what to do when it's wrong
    RecordingYouTube
    SlidesPDF
    SnippetsGitHub
    ArticlesSolve with Cloud Page Apps & Power of Code Resources
    \ No newline at end of file diff --git a/docs/zen-of-sfmc/index.html b/docs/zen-of-sfmc/index.html index ba21950d5..396e441c7 100644 --- a/docs/zen-of-sfmc/index.html +++ b/docs/zen-of-sfmc/index.html @@ -1,22 +1,163 @@ - + - -Zen of SFMC | Mateusz Dąbrowski + +Zen of SFMC | Mateusz Dąbrowski - - - + + + -
    -

    Zen of SFMC

    Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.

    I'm a massive fan of Tim Peters' PEP20 - Zen of Python. In 19 short lines, he described his recommendations for writing good Python code. The outcome transcended the specific language, and I see it as a universal guide on software engineering.

    In this article, I share my Salesforce Marting Cloud adaptation and interpretation of this pearl. Expect some modifications to the original text (minimal, as most of the recommendations are perfectly valid for our Marketing Automation world), followed by my comments on how particular lines can benefit SFMC practice.

    Zen of SFMC

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Naming conventions count twice.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    Even when certain, test.
    Now is better than never.
    Although never is often better than right now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Documentation is one honking great idea - let's do more of it!

    Thoughts on Zen

    Remember that those recommendations are just that - recommendations. Not strict rules, but rather a set of (sometimes contradictory) guidelines that might help you in your day-to-day work with Salesforce Marketing Cloud.


    Beautiful is better than ugly.

    Beauty might not immediately come to mind in the context of software development and implementation, especially in the world of short deadlines and evergrowing KPIs. However, one should not forget about beauty when deploying Marketing Cloud solutions.

    It makes working on the tool more motivating and pleasant and supports many other recommendations listed here - with readability in the first place. Below you can see examples of implementing the beauty principle in the Salesforce Marketing Cloud.

    When you are writing code in Salesforce Marketing Cloud - be it AMPScript, SSJS, SQL, or other - you have a lot of flexibility regarding structure and style. Random indentation, lack of new lines, cryptic variables? Everything is possible and might work.

    But you shouldn't stop at writing code that just works. Apply a beauty-focused mindset, and while writing might take a bit longer, the outcome will be more readable, understandable to others and easier to debug.

    Both queries work - which one would you rather read?
    /* Beauty */
    SELECT
    wel.SubscriberKey AS SubscriberKey
    , wel.EmailAddress AS EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* and the Beast */
    Select a.subscriberkey, a.emailaddress, b.eventdate
    From welcomecampaignsegment a join _open b on a.subscriberkey = b.subscriberkey

    Check my Style Guides for AMPScript, SSJS, SQL to see more guides on making your code beautiful.


    Explicit is better than implicit.

    Salesforce Marketing Cloud enables you to decide whether you want to create things implicitly or explicitly. Implicit is faster and easier. Explicit is sturdier and better.

    As the SFMC is long term commitment used by many people, it's always worth spending a bit more effort and going for the explicit whenever possible. It will save you and your organisation much time in the long run, so consider it an investment.

    We can leverage many tricks when coding for Salesforce Marketing Cloud - implicit data type conversions, undocumented endpoints and function behaviours, or just language-specific syntactic sugar. As helpful as they are, those tricks obscure readability, introduce error risk to the code, and many won't know/understand them.

    This is why, unless such tricks are necessary, I recommend going for the explicit, clear and obvious version. Even if it is slightly longer or not as sexy.

    Of course, it is not always possible - some things are possible only by coding on the edge of the documentation. Even then, you can make it more explicit with good comments. And don't limit those to just the tricky parts. Describing the cleanest functions and scripts will help you (and your team) work more effectively.

    'Code tells you how. Comments tell you why.' - Jeff Atwood
    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    Read more on using comments in [SSJS]./ssjs/ssjs-style-guide.mdx#comments) and AMPScript.

    You Should Know

    An explicit approach can (and should) be taken to the next level with smart use of asset Keys. They are frequently used in code - especially the Data Extension and Content Block keys. While the default pseudo-random ID does the work, I recommend going for the custom explicit Keys.

    If you keep Data Extension Name and Key in sync (it might not be possible with longer names due to the Key length limit), you won't have to worry about whether the Data Extension lookup uses the key or the name.

    You can get even more value from this approach with Content Blocks. It's popular to use them for AMPScript snippets shared across multiple emails or brand-wide dynamic footers. Frequently they are added to the Email Templates with the help of the AMPScript ContentBlockByID function. However, as an asset collection grows, it will be harder to remember which Content Block you imported that way (IDs aren't helpful with that).

    Explicit Content Block Key and ContentBlockByKey function can help:

    Which one would you rather see in the email template?
    %%=ContentBlockByID("123456")=%%
    // vs
    %%=ContentBlockByKey("SharedFooterEMEA")=%%

    Simple is better than complex.

    Marketing Cloud is a complex tool within a complex Salesforce ecosystem focused on solving complex business needs. But how you operate and develop SFMC should be as straightforward as possible. It will make your solution robust, agile and easily understandable.

    KISS

    This recommendation is also known in the software development community under a popular acronym: KISS (Keep It Simple Stupid Salesforce). In short, it advocates creating solutions as simple as they can be without sacrificing other values (like readability or performance).

    YAGNI

    Another popular acronym connected to the simplicity principle is YAGNI (You Aren't Gonna Need It). This Extreme Programming methodology mantra adds another perspective by stating that you should build only the necessary elements when creating the solution. Everything else is just bloat that makes the outcome more convoluted and error-prone.

    The simplicity focus is useful already when you select the best programming language to do the job. Sure, SSJS is much more powerful and flexible than AMPScript, but unless you have a specific need for this power (YAGNI) you should go for the simpler solution (KISS) (more on selecting SSJS vs AMPScript).

    Once you select the best language for the job, you will have to code the solution. And here again, simplicity will be a helpful guideline. For example, yes, you can create a universal SSJS API wrapper class, but if your script only needs to update Salesforce objects, built-in AMPScript functions will be enough (YAGNI) and much simpler (KISS).

    Think about KISS and YAGNI whenever you are coding, and it will help you deliver more straightforward and better solutions.

    SELECT
    SubscriberKey
    , CASE
    WHEN DateJoined >= DATEADD(MONTH, -1, GETDATE()) THEN 1
    WHEN DateJoined < DATEADD(MONTH, -1, GETDATE()) THEN 0
    END AS IsNewJoiner
    FROM Ent._Subscribers
    /* When you only need two opposite CASE rules, simple IIF shorthand is better */
    SELECT
    SubscriberKey
    , IIF(DateJoined >= DATEADD(MONTH, -1, GETDATE()), 1, 0) AS IsNewJoiner
    FROM Ent._Subscribers

    Complex is better than complicated.

    It might sound contradictory to the previous recommendation, but only on the surface. There is a limit to what can be simplified before it starts getting complicated. In such a case, the complex is the lesser evil.

    SOC

    When laser-focused on simplicity, you will feel tempted to create the whole solution as one element (one script, one Automation, one email). SOC (Separation of Concerns) rule tells us that it might be a bad idea to build one solution from multiple parts, each with a different purpose. Numerous concerns stacked within a single asset will make it complicated rather than simple. The recommendation? Split it into separate purpose-oriented elements. It will get more complex but less complicated.

    DRY

    Another essential acronym is DRY (Don't Repeat Yourself). It shows a different perspective on the same problem - the simple solution that needs to be replicated multiple times leads to a complicated outcome. Updating is a hassle; performance drops; readability is poor. DRY suggests finding such repetitive spots and refactoring them.

    Another application of the DRY principle is related not to a specific solution but to work in general. If you find you are doing the same thing again and again, Don't Repeat Yourself. Automate it.

    I have seen many (too many) Subscription Preference Centers in SFMC built with AMPScript. Yes, it's a simple language and capable enough to deliver such a solution. But because of its simplicity, for this use case, it quickly gets full of repeating script lines (DRY violation), multiple purposes (SOC violation) and endless lines of code (readability suffers).

    My recommendation for most of the Preference Centers is to go with SSJS. Yes, it's a more complex language than AMPScript, but with a set of tools dedicated to delivering complex use cases. Implement SOC and make it DRY with functions & loops. Bring it to the next level by splitting Front-End (Cloud Page) and Back-End (Code Resource). Compared to a single Cloud Page with AMPScript, this solution will be more complex but much less complicated. Thus easier to debug and maintain.


    Flat is better than nested. Sparse is better than dense.

    When working on the solution, it is easy to build a matryoshka. Multiple goals within one asset? Let's add an if/switch in the code or a decision split in the Journey Builder. Edge case found during testing? Yet another if. Multiple goals within one email? The 4-column layout is here! KPIs for leads, sales, loyalty and brand are not yet met? Let's pack them in a just-being-built welcome Journey.

    This turn of events is natural during development, but it quickly leads to a complicated outcome. There are two ways to solve it:

    1. Plan - As Abraham Lincoln once said, "Give me six hours to chop down a tree, and I will spend the first four sharpening the axe". The same approach will benefit your Marketing Cloud instance.
    2. Refactor - Planning is incredible, but it's nearly impossible to prepare a bulletproof plan. That's fine, as long as you refactor your solution after hitting the bump on the road.

    Following those steps will help you create simpler, lighter and better solutions. And the more refactors you do, the better in planning you will become.

    It's easy to write deeply nested code. It's even easier to write dense code, full of syntactic sugar that is short and looks 'professional'—especially when copy-pasting a magical solution found on the Stack Overlow (been there, done that).

    However, the good code doesn't have to be short or prove that you know all quirks of the language. The good code must be readable, simple and explicit. And in many cases, it will be a bit longer and created from simpler building blocks.

    Just because it works, doesn't mean it's worth it
    var region = country == 'UK' ? 'EMEA' : country == 'PL' ? 'EMEA' : country == 'US' ? 'AMER' : 'APAC';
    /* Chained ternary operator above might take less lines of code, but it's definitely not readable.
    Making it more sparse and flat is not only easier for the readars but also for future modifications */
    if (country == 'UK' || country == 'PL') {
    var region = 'EMEA';
    } else if (country == 'US') {
    var region = 'AMER';
    } else {
    var region = 'APAC';
    };

    Readability counts.

    Readability is key. In code, it limits bugs, simplifies debugging, improves future development and saves tons of time. In content, it's key to drive the message to the recipient. In short, without readability, there is no value.

    I have already written a lot about readability of Marketing Cloud programmatic langauges: AMPScript, SSJS, SQL.

    As for the readability of content:

    1. Write short sentences (15 words are nice; stay under 30).
    2. Use simple language (instead of "due to the fact that" use "because").
    3. Prove with hard data (instead of "significant amount of customers recommends" use "93% of customer recommends").
    4. Cut marketing fluff (every part of the content should have an answer to the "so what?" question).
    5. Proofread. Proofread again.

    Naming conventions count twice.

    I love naming conventions and believe they are crucial to the long term success of marketing automation solutions. They improve readability and maintainability, bring clarity and unlock even more automation possibilities.

    What is unique about them is that they provide the most value when implemented from the very start and enforced everywhere. But if you are thinking long term (and with Marketing Automation tools - you should), it's better to implement one late than never. The bigger and older the solution, the more you will feel that a good naming convention is not nice-to-have but rather a must-have.

    You can benefit from implementing a naming convention in all SFMC programming languages. Strive for variable, function, column names that are obvious even for someone who sees the code for the first time. Saving a few characters for a shorter name is not worth the time lost for deciphering the meaning later.

    /* You may know what it means when you write the code... */
    if (ts && !tsd) tsd = new Date();

    /* ... but everyone else, and even you after a week, will be thankful for explicit names */
    if (isTrackingSuppressed && !trackingSuppressionStartDate) trackingSuppressionStartDate = new Date()

    Looking for more examples of good naming? Check Style Guide recommendations for AMPScript, SSJS and SQL.


    Special cases aren't special enough to break the rules. Although practicality beats purity.

    Those contradictory lines follow the ancient greek golden middle way philosophy. The thought behind them is pretty straightforward. Whenever you decide to stick to some recommendation or rule (be it from this article or else) - fight the temptation to create exceptions when you encounter the first bump on the road.

    Sure, it might be easier to ignore the rule when the deadline is near or you have too much to do. It's easy to say, "I will align it later". But there is always more work to be done "later", and in the end, you finish with a messy solution that doesn't provide the promised value.

    On the other hand, following the rules by the book in every single case might stop you from delivering a working solution at all.

    That's why we must learn how to follow the rules and when to break them.

    So follow the rules as a default, break them only when there is no other option, and refactor them whenever possible.


    Errors should never pass silently. Unless explicitly silenced.

    Every solution can encounter some problems or edge cases. You can even be hit with something outside of your control, like server issues. It is why capturing and analysing the errors is so essential.

    In terms of code it means proper debugging and error handling. Especially error logging is good idea to keep up with the potential issues in matured Marketing Cloud solution. You can also protect your solution by creating last resort checks in messaging with the RaiseError function.

    But there are also platform-based features that capture issues. Journey pre-launch validation, Verification Activity for Automation Studio and its built-in error logging, Send Logs, and Audit Trail. Salesforce Marketing Cloud offers many tools to make sure you are up to speed with the state of your platform, so make sure you use all of them.

    However, just because you can, it doesn't mean you always need to throw an error. There are some cases where silencing them is the right thing to do. Example?

    When sending a personalised email, you might find some contacts with missing data that would error out the send. Ask yourself whether you genuinely want an error in such cases, or rather a dynamic content with non-personalised default will work better.

    Such workarounds are even more critical for errors on client-facing assets like Cloud Pages. When coding the user experience, check the possible errors and consider which should be visible to the end-user.

    And - considering the quality of out-of-the-box SFMC errors - always provide custom error messages.


    In the face of ambiguity, refuse the temptation to guess. Even when certain, test.

    With the complexity of Marketing Cloud, cross-cloud integrations, constant platform updates and solution development, there is much room for ambiguity. It's even more significant when you consider how the SFMC is growing - by 3rd party acquisitions and building new features on top of the legacy ones. There is a constant technical debt and multiple frameworks co-existing at the same time. With updates hitting the platform multiple times a year, even with stuff you have already done numerous times in the past - don't assume it will work the same. Don't guess. Check.

    There are multiple examples of this risk. SSJS is not-fully-supported ES3 limited by the .NET backend, so you never know which feature will work. SQL is a partial SQL Server 2016 with different behaviour in Script Activity and Query Studio. There are inconsistent approaches within the same solution (for example shared folder permissions). Unexpected bugs (like incorrect rendering of Behavioral Triggers). Temporary issues that change the SSJS function responses for few days.

    With all this ambiguity in the system, always check during development and always check again before go-live.


    Now is better than never. Although never is often better than right now.

    When you see an opportunity for improvement or encounter a helpful recommendation, it's a good idea to take a note and implement it to improve the value of your solution. However, fight the temptation to do it instantaneously. Even the enhancement most needed in your solution might break everything if you implement it hastily.

    Using previous examples:

    1. If you are not yet using proper debugging and error handling, you definitely should implement it. Should you do it right now? Well, there are some quirks that you should test beforehand; otherwise, your script might error out and break the existing process.

    2. If you want to implement the asset naming convention, definitely start with discovery and cross-department alignment to have a complete picture of needs before creating the naming template. I believe everyone should use the naming convention, but it will be counterproductive if you start using it too fast and later have to update it based on late feedback.


    If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea.

    Marketing Cloud implementation is not something that one can easily explain to a five-year-old. However, if you find it hard to explain it to your colleague or client, it means that the solution is either too complex, too ambiguous, or not understood enough. Each of those cases is dangerous. In the best scenario, it may lead to a non-optimised outcome, in the worst - to a business-breaking crash.


    Documentation is one honking great idea - let's do more of it!

    Writing and maintaining documentation is a pain. I agree. But you know what is even bigger pain? Not having that documentation in the long run. Marketing Automation projects are long term investments. There are change requests, new team members, mistakes and bugs.

    In the long run, good documentation saves much more time than it takes to create it. With the complexity of the solution and the size of the team operating on it, that value grows exponentially.

    John F. Woods once said, "always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live". The same is true for the whole marketing automation solution - and documentation is your best bet at surviving ;)


    Sum Up

    There is a lot of contradictory recommendations above. It's intentional. Zen of SFMC is not a list of rigid rules - it would be impossible with the number of differences between Marketing Cloud customers. Instead, it's a set of flexible guidelines. Treat them as friendly best practices, not absolute rules and adapt them to improve your work.

    Across all those recommendations, you can see some key recurring ideas:

    1. Make it simple
    2. Make it readable
    3. Make it understandable
    4. Make it maintainable
    5. Make it practical

    However, I still love to check the full text of the zen of SFMC to see how well I aligned my solution with it.

    - - +

    Zen of SFMC

    Salesforce Marketing Cloud implementation, development and operations Best Practices. In brief and detail.

    +

    I'm a massive fan of Tim Peters' PEP20 - Zen of Python. In 19 short lines, he described his recommendations for writing good Python code. The outcome transcended the specific language, and I see it as a universal guide on software engineering.

    +

    In this article, I share my Salesforce Marting Cloud adaptation and interpretation of this pearl. Expect some modifications to the original text (minimal, as most of the recommendations are perfectly valid for our Marketing Automation world), followed by my comments on how particular lines can benefit SFMC practice.

    +

    Zen of SFMC

    +
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Naming conventions count twice.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    Even when certain, test.
    Now is better than never.
    Although never is often better than right now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Documentation is one honking great idea - let's do more of it!
    +

    Thoughts on Zen

    +

    Remember that those recommendations are just that - recommendations. Not strict rules, but rather a set of (sometimes contradictory) guidelines that might help you in your day-to-day work with Salesforce Marketing Cloud.

    +
    +

    Beautiful is better than ugly.

    +

    Beauty might not immediately come to mind in the context of software development and implementation, especially in the world of short deadlines and evergrowing KPIs. However, one should not forget about beauty when deploying Marketing Cloud solutions.

    +

    It makes working on the tool more motivating and pleasant and supports many other recommendations listed here - with readability in the first place. Below you can see examples of implementing the beauty principle in the Salesforce Marketing Cloud.

    +

    When you are writing code in Salesforce Marketing Cloud - be it AMPScript, SSJS, SQL, or other - you have a lot of flexibility regarding structure and style. Random indentation, lack of new lines, cryptic variables? Everything is possible and might work.

    But you shouldn't stop at writing code that just works. Apply a beauty-focused mindset, and while writing might take a bit longer, the outcome will be more readable, understandable to others and easier to debug.

    Both queries work - which one would you rather read?
    /* Beauty */
    SELECT
    wel.SubscriberKey AS SubscriberKey
    , wel.EmailAddress AS EmailAddress
    , o.EventDate AS OpenDate
    FROM WelcomeCampaignSegment AS wel
    INNER JOIN _Open AS o
    ON o.SubscriberKey = wel.SubscriberKey

    /* and the Beast */
    Select a.subscriberkey, a.emailaddress, b.eventdate
    From welcomecampaignsegment a join _open b on a.subscriberkey = b.subscriberkey

    Check my Style Guides for AMPScript, SSJS, SQL to see more guides on making your code beautiful.

    +
    +

    Explicit is better than implicit.

    +

    Salesforce Marketing Cloud enables you to decide whether you want to create things implicitly or explicitly. Implicit is faster and easier. Explicit is sturdier and better.

    +

    As the SFMC is long term commitment used by many people, it's always worth spending a bit more effort and going for the explicit whenever possible. It will save you and your organisation much time in the long run, so consider it an investment.

    +

    We can leverage many tricks when coding for Salesforce Marketing Cloud - implicit data type conversions, undocumented endpoints and function behaviours, or just language-specific syntactic sugar. As helpful as they are, those tricks obscure readability, introduce error risk to the code, and many won't know/understand them.

    This is why, unless such tricks are necessary, I recommend going for the explicit, clear and obvious version. Even if it is slightly longer or not as sexy.

    Of course, it is not always possible - some things are possible only by coding on the edge of the documentation. Even then, you can make it more explicit with good comments. And don't limit those to just the tricky parts. Describing the cleanest functions and scripts will help you (and your team) work more effectively.

    'Code tells you how. Comments tell you why.' - Jeff Atwood
    /**
    * @function debugValue
    * @description Outputs provided description and SSJS value to front-end in a type-safe & consistent way
    * @param {string} description - Describes meaning of the second parameter in the output
    * @param {*} value - The value that needs to be debugged
    */
    function debugValue(description, value) {
    Write(description + ': ' + (typeof value == 'object' ? Stringify(value) : value) + '<br><br>');
    };

    Read more on using comments in [SSJS]./ssjs/ssjs-style-guide.mdx#comments) and AMPScript.

    You Should Know

    An explicit approach can (and should) be taken to the next level with smart use of asset Keys. They are frequently used in code - especially the Data Extension and Content Block keys. While the default pseudo-random ID does the work, I recommend going for the custom explicit Keys.

    If you keep Data Extension Name and Key in sync (it might not be possible with longer names due to the Key length limit), you won't have to worry about whether the Data Extension lookup uses the key or the name.

    You can get even more value from this approach with Content Blocks. It's popular to use them for AMPScript snippets shared across multiple emails or brand-wide dynamic footers. Frequently they are added to the Email Templates with the help of the AMPScript ContentBlockByID function. However, as an asset collection grows, it will be harder to remember which Content Block you imported that way (IDs aren't helpful with that).

    Explicit Content Block Key and ContentBlockByKey function can help:

    Which one would you rather see in the email template?
    %%=ContentBlockByID("123456")=%%
    // vs
    %%=ContentBlockByKey("SharedFooterEMEA")=%%
    +
    +

    Simple is better than complex.

    +

    Marketing Cloud is a complex tool within a complex Salesforce ecosystem focused on solving complex business needs. But how you operate and develop SFMC should be as straightforward as possible. It will make your solution robust, agile and easily understandable.

    +

    KISS

    +

    This recommendation is also known in the software development community under a popular acronym: KISS (Keep It Simple Stupid Salesforce). In short, it advocates creating solutions as simple as they can be without sacrificing other values (like readability or performance).

    +

    YAGNI

    +

    Another popular acronym connected to the simplicity principle is YAGNI (You Aren't Gonna Need It). This Extreme Programming methodology mantra adds another perspective by stating that you should build only the necessary elements when creating the solution. Everything else is just bloat that makes the outcome more convoluted and error-prone.

    +

    The simplicity focus is useful already when you select the best programming language to do the job. Sure, SSJS is much more powerful and flexible than AMPScript, but unless you have a specific need for this power (YAGNI) you should go for the simpler solution (KISS) (more on selecting SSJS vs AMPScript).

    Once you select the best language for the job, you will have to code the solution. And here again, simplicity will be a helpful guideline. For example, yes, you can create a universal SSJS API wrapper class, but if your script only needs to update Salesforce objects, built-in AMPScript functions will be enough (YAGNI) and much simpler (KISS).

    Think about KISS and YAGNI whenever you are coding, and it will help you deliver more straightforward and better solutions.

    SELECT
    SubscriberKey
    , CASE
    WHEN DateJoined >= DATEADD(MONTH, -1, GETDATE()) THEN 1
    WHEN DateJoined < DATEADD(MONTH, -1, GETDATE()) THEN 0
    END AS IsNewJoiner
    FROM Ent._Subscribers
    /* When you only need two opposite CASE rules, simple IIF shorthand is better */
    SELECT
    SubscriberKey
    , IIF(DateJoined >= DATEADD(MONTH, -1, GETDATE()), 1, 0) AS IsNewJoiner
    FROM Ent._Subscribers
    +
    +

    Complex is better than complicated.

    +

    It might sound contradictory to the previous recommendation, but only on the surface. There is a limit to what can be simplified before it starts getting complicated. In such a case, the complex is the lesser evil.

    +

    SOC

    +

    When laser-focused on simplicity, you will feel tempted to create the whole solution as one element (one script, one Automation, one email). SOC (Separation of Concerns) rule tells us that it might be a bad idea to build one solution from multiple parts, each with a different purpose. Numerous concerns stacked within a single asset will make it complicated rather than simple. The recommendation? Split it into separate purpose-oriented elements. It will get more complex but less complicated.

    +

    DRY

    +

    Another essential acronym is DRY (Don't Repeat Yourself). It shows a different perspective on the same problem - the simple solution that needs to be replicated multiple times leads to a complicated outcome. Updating is a hassle; performance drops; readability is poor. DRY suggests finding such repetitive spots and refactoring them.

    +

    Another application of the DRY principle is related not to a specific solution but to work in general. If you find you are doing the same thing again and again, Don't Repeat Yourself. Automate it.

    +

    I have seen many (too many) Subscription Preference Centers in SFMC built with AMPScript. Yes, it's a simple language and capable enough to deliver such a solution. But because of its simplicity, for this use case, it quickly gets full of repeating script lines (DRY violation), multiple purposes (SOC violation) and endless lines of code (readability suffers).

    My recommendation for most of the Preference Centers is to go with SSJS. Yes, it's a more complex language than AMPScript, but with a set of tools dedicated to delivering complex use cases. Implement SOC and make it DRY with functions & loops. Bring it to the next level by splitting Front-End (Cloud Page) and Back-End (Code Resource). Compared to a single Cloud Page with AMPScript, this solution will be more complex but much less complicated. Thus easier to debug and maintain.

    +
    +

    Flat is better than nested. Sparse is better than dense.

    +

    When working on the solution, it is easy to build a matryoshka. Multiple goals within one asset? Let's add an if/switch in the code or a decision split in the Journey Builder. Edge case found during testing? Yet another if. Multiple goals within one email? The 4-column layout is here! KPIs for leads, sales, loyalty and brand are not yet met? Let's pack them in a just-being-built welcome Journey.

    +

    This turn of events is natural during development, but it quickly leads to a complicated outcome. There are two ways to solve it:

    +
      +
    1. Plan - As Abraham Lincoln once said, "Give me six hours to chop down a tree, and I will spend the first four sharpening the axe". The same approach will benefit your Marketing Cloud instance.
    2. +
    3. Refactor - Planning is incredible, but it's nearly impossible to prepare a bulletproof plan. That's fine, as long as you refactor your solution after hitting the bump on the road.
    4. +
    +

    Following those steps will help you create simpler, lighter and better solutions. And the more refactors you do, the better in planning you will become.

    +

    It's easy to write deeply nested code. It's even easier to write dense code, full of syntactic sugar that is short and looks 'professional'—especially when copy-pasting a magical solution found on the Stack Overlow (been there, done that).

    However, the good code doesn't have to be short or prove that you know all quirks of the language. The good code must be readable, simple and explicit. And in many cases, it will be a bit longer and created from simpler building blocks.

    Just because it works, doesn't mean it's worth it
    var region = country == 'UK' ? 'EMEA' : country == 'PL' ? 'EMEA' : country == 'US' ? 'AMER' : 'APAC';
    /* Chained ternary operator above might take less lines of code, but it's definitely not readable.
    Making it more sparse and flat is not only easier for the readars but also for future modifications */
    if (country == 'UK' || country == 'PL') {
    var region = 'EMEA';
    } else if (country == 'US') {
    var region = 'AMER';
    } else {
    var region = 'APAC';
    };
    +
    +

    Readability counts.

    +

    Readability is key. In code, it limits bugs, simplifies debugging, improves future development and saves tons of time. In content, it's key to drive the message to the recipient. In short, without readability, there is no value.

    +

    I have already written a lot about readability of Marketing Cloud programmatic langauges: AMPScript, SSJS, SQL.

    +

    As for the readability of content:

    +
      +
    1. Write short sentences (15 words are nice; stay under 30).
    2. +
    3. Use simple language (instead of "due to the fact that" use "because").
    4. +
    5. Prove with hard data (instead of "significant amount of customers recommends" use "93% of customer recommends").
    6. +
    7. Cut marketing fluff (every part of the content should have an answer to the "so what?" question).
    8. +
    9. Proofread. Proofread again.
    10. +
    +
    +

    Naming conventions count twice.

    +

    I love naming conventions and believe they are crucial to the long term success of marketing automation solutions. They improve readability and maintainability, bring clarity and unlock even more automation possibilities.

    +

    What is unique about them is that they provide the most value when implemented from the very start and enforced everywhere. But if you are thinking long term (and with Marketing Automation tools - you should), it's better to implement one late than never. The bigger and older the solution, the more you will feel that a good naming convention is not nice-to-have but rather a must-have.

    +

    You can benefit from implementing a naming convention in all SFMC programming languages. Strive for variable, function, column names that are obvious even for someone who sees the code for the first time. Saving a few characters for a shorter name is not worth the time lost for deciphering the meaning later.

    /* You may know what it means when you write the code... */
    if (ts && !tsd) tsd = new Date();

    /* ... but everyone else, and even you after a week, will be thankful for explicit names */
    if (isTrackingSuppressed && !trackingSuppressionStartDate) trackingSuppressionStartDate = new Date()

    Looking for more examples of good naming? Check Style Guide recommendations for AMPScript, SSJS and SQL.

    +
    +

    Special cases aren't special enough to break the rules. Although practicality beats purity.

    +

    Those contradictory lines follow the ancient greek golden middle way philosophy. The thought behind them is pretty straightforward. Whenever you decide to stick to some recommendation or rule (be it from this article or else) - fight the temptation to create exceptions when you encounter the first bump on the road.

    +

    Sure, it might be easier to ignore the rule when the deadline is near or you have too much to do. It's easy to say, "I will align it later". But there is always more work to be done "later", and in the end, you finish with a messy solution that doesn't provide the promised value.

    +

    On the other hand, following the rules by the book in every single case might stop you from delivering a working solution at all.

    +

    That's why we must learn how to follow the rules and when to break them.

    +

    So follow the rules as a default, break them only when there is no other option, and refactor them whenever possible.

    +
    +

    Errors should never pass silently. Unless explicitly silenced.

    +

    Every solution can encounter some problems or edge cases. You can even be hit with something outside of your control, like server issues. It is why capturing and analysing the errors is so essential.

    +

    In terms of code it means proper debugging and error handling. Especially error logging is good idea to keep up with the potential issues in matured Marketing Cloud solution. You can also protect your solution by creating last resort checks in messaging with the RaiseError function.

    +

    But there are also platform-based features that capture issues. Journey pre-launch validation, Verification Activity for Automation Studio and its built-in error logging, Send Logs, and Audit Trail. Salesforce Marketing Cloud offers many tools to make sure you are up to speed with the state of your platform, so make sure you use all of them.

    +

    However, just because you can, it doesn't mean you always need to throw an error. There are some cases where silencing them is the right thing to do. Example?

    +

    When sending a personalised email, you might find some contacts with missing data that would error out the send. Ask yourself whether you genuinely want an error in such cases, or rather a dynamic content with non-personalised default will work better.

    +

    Such workarounds are even more critical for errors on client-facing assets like Cloud Pages. When coding the user experience, check the possible errors and consider which should be visible to the end-user.

    +

    And - considering the quality of out-of-the-box SFMC errors - always provide custom error messages.

    +
    +

    In the face of ambiguity, refuse the temptation to guess. Even when certain, test.

    +

    With the complexity of Marketing Cloud, cross-cloud integrations, constant platform updates and solution development, there is much room for ambiguity. It's even more significant when you consider how the SFMC is growing - by 3rd party acquisitions and building new features on top of the legacy ones. There is a constant technical debt and multiple frameworks co-existing at the same time. With updates hitting the platform multiple times a year, even with stuff you have already done numerous times in the past - don't assume it will work the same. Don't guess. Check.

    +

    There are multiple examples of this risk. SSJS is not-fully-supported ES3 limited by the .NET backend, so you never know which feature will work. SQL is a partial SQL Server 2016 with different behaviour in Script Activity and Query Studio. There are inconsistent approaches within the same solution (for example shared folder permissions). Unexpected bugs (like incorrect rendering of Behavioral Triggers). Temporary issues that change the SSJS function responses for few days.

    +

    With all this ambiguity in the system, always check during development and always check again before go-live.

    +
    +

    Now is better than never. Although never is often better than right now.

    +

    When you see an opportunity for improvement or encounter a helpful recommendation, it's a good idea to take a note and implement it to improve the value of your solution. However, fight the temptation to do it instantaneously. Even the enhancement most needed in your solution might break everything if you implement it hastily.

    +

    Using previous examples:

    +
      +
    1. +

      If you are not yet using proper debugging and error handling, you definitely should implement it. Should you do it right now? Well, there are some quirks that you should test beforehand; otherwise, your script might error out and break the existing process.

      +
    2. +
    3. +

      If you want to implement the asset naming convention, definitely start with discovery and cross-department alignment to have a complete picture of needs before creating the naming template. I believe everyone should use the naming convention, but it will be counterproductive if you start using it too fast and later have to update it based on late feedback.

      +
    4. +
    +
    +

    If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea.

    +

    Marketing Cloud implementation is not something that one can easily explain to a five-year-old. However, if you find it hard to explain it to your colleague or client, it means that the solution is either too complex, too ambiguous, or not understood enough. Each of those cases is dangerous. In the best scenario, it may lead to a non-optimised outcome, in the worst - to a business-breaking crash.

    +
    +

    Documentation is one honking great idea - let's do more of it!

    +

    Writing and maintaining documentation is a pain. I agree. But you know what is even bigger pain? Not having that documentation in the long run. Marketing Automation projects are long term investments. There are change requests, new team members, mistakes and bugs.

    +

    In the long run, good documentation saves much more time than it takes to create it. With the complexity of the solution and the size of the team operating on it, that value grows exponentially.

    +

    John F. Woods once said, "always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live". The same is true for the whole marketing automation solution - and documentation is your best bet at surviving ;)

    +
    +

    Sum Up

    +

    There is a lot of contradictory recommendations above. It's intentional. Zen of SFMC is not a list of rigid rules - it would be impossible with the number of differences between Marketing Cloud customers. Instead, it's a set of flexible guidelines. Treat them as friendly best practices, not absolute rules and adapt them to improve your work.

    +

    Across all those recommendations, you can see some key recurring ideas:

    +
      +
    1. Make it simple
    2. +
    3. Make it readable
    4. +
    5. Make it understandable
    6. +
    7. Make it maintainable
    8. +
    9. Make it practical
    10. +
    +

    However, I still love to check the full text of the zen of SFMC to see how well I aligned my solution with it.

    \ No newline at end of file diff --git a/index.html b/index.html index e11f7d848..d1ee4ee7c 100644 --- a/index.html +++ b/index.html @@ -2,21 +2,18 @@ - -Automate Marketing Automation | Mateusz Dąbrowski + +Automate Marketing Automation | Mateusz Dąbrowski - - - + + + -
    -

    Automate Marketing Automation

    let code = do('our job');

    [object Object]

    Let's connect

    Ahoj! My name is Mateusz Dąbrowski. I'm Marketing Cloud Architect and Salesforce MVP. I find joy in telling the code to do my job. Got questions, suggestions or want to get in touch?

    [object Object]

    Pick my brain

    My notes on AMPScript, SSJS, JavaScript, SQL and Configuration used in Marketing Cloud. Are you craving for more in-depth documentation or looking for tested code snippets? Hop in!

    [object Object]

    Change the Cloud

    Salesforce Marketing Cloud is powerful. But it can always be more useful. Here you can find all my Salesforce IdeaExchange contributions. Vote to make Marketing Cloud a better tool.

    Most popular docs & snippets

    SQL Basics
    Best place to start your journey with writing SQL Queries in SFMC.
    SQL Select
    Learn how to SELECT the data and how to limit it with TOP & DISTINCT.
    SQL Join
    Check how to work with more than one Data Extension or Data View.
    Create, calculate and format date, time and timezone with SQL.
    System Data Views
    Learn about hidden Data Views storing key data about your SFMC.
    Debugging Email Sends
    Step-by-step guide to resolving problems with SFMC email sends.
    All you need to know about working with SFMC Behavioral Triggers.
    Contact Deletion
    Everything you need to clean up your SFMC from dirty Contacts.
    - - +

    Automate Marketing Automation

    let code = do('our job');

    [object Object]

    Let's connect

    Ahoj! My name is Mateusz Dąbrowski. I'm Marketing Cloud Architect and Salesforce MVP. I find joy in telling the code to do my job. Got questions, suggestions or want to get in touch?

    [object Object]

    Pick my brain

    My notes on AMPScript, SSJS, JavaScript, SQL and Configuration used in Marketing Cloud. Are you craving for more in-depth documentation or looking for tested code snippets? Hop in!

    [object Object]

    Change the Cloud

    Salesforce Marketing Cloud is powerful. But it can always be more useful. Here you can find all my Salesforce IdeaExchange contributions. Vote to make Marketing Cloud a better tool.

    Most popular docs & snippets

    SQL Basics
    Best place to start your journey with writing SQL Queries in SFMC.
    SQL Select
    Learn how to SELECT the data and how to limit it with TOP & DISTINCT.
    SQL Join
    Check how to work with more than one Data Extension or Data View.
    Create, calculate and format date, time and timezone with SQL.
    System Data Views
    Learn about hidden Data Views storing key data about your SFMC.
    Debugging Email Sends
    Step-by-step guide to resolving problems with SFMC email sends.
    All you need to know about working with SFMC Behavioral Triggers.
    Contact Deletion
    Everything you need to clean up your SFMC from dirty Contacts.
    \ No newline at end of file diff --git a/search/index.html b/search/index.html index 0c65b74d3..b7035ac98 100644 --- a/search/index.html +++ b/search/index.html @@ -2,21 +2,18 @@ - -Search the documentation | Mateusz Dąbrowski + +Search the documentation | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 4e67c03df..b9f652a73 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://mateuszdabrowski.pl/docs/tags/weekly0.5https://mateuszdabrowski.pl/docs/tags/amp-script/weekly0.5https://mateuszdabrowski.pl/docs/tags/analytics/weekly0.5https://mateuszdabrowski.pl/docs/tags/app-exchange/weekly0.5https://mateuszdabrowski.pl/docs/tags/app/weekly0.5https://mateuszdabrowski.pl/docs/tags/automation/weekly0.5https://mateuszdabrowski.pl/docs/tags/behavioral-triggers/weekly0.5https://mateuszdabrowski.pl/docs/tags/best-practice/weekly0.5https://mateuszdabrowski.pl/docs/tags/cloud-page/weekly0.5https://mateuszdabrowski.pl/docs/tags/configuration/weekly0.5https://mateuszdabrowski.pl/docs/tags/crm/weekly0.5https://mateuszdabrowski.pl/docs/tags/data-extensions/weekly0.5https://mateuszdabrowski.pl/docs/tags/data-management/weekly0.5https://mateuszdabrowski.pl/docs/tags/debugging/weekly0.5https://mateuszdabrowski.pl/docs/tags/deliverability/weekly0.5https://mateuszdabrowski.pl/docs/tags/einstein/weekly0.5https://mateuszdabrowski.pl/docs/tags/eloqua/weekly0.5https://mateuszdabrowski.pl/docs/tags/email/weekly0.5https://mateuszdabrowski.pl/docs/tags/integration/weekly0.5https://mateuszdabrowski.pl/docs/tags/interaction-studio/weekly0.5https://mateuszdabrowski.pl/docs/tags/java-script/weekly0.5https://mateuszdabrowski.pl/docs/tags/journey/weekly0.5https://mateuszdabrowski.pl/docs/tags/marketing-cloud-personalization/weekly0.5https://mateuszdabrowski.pl/docs/tags/marketing-cloud/weekly0.5https://mateuszdabrowski.pl/docs/tags/performance/weekly0.5https://mateuszdabrowski.pl/docs/tags/personalisation/weekly0.5https://mateuszdabrowski.pl/docs/tags/setup/weekly0.5https://mateuszdabrowski.pl/docs/tags/sms/weekly0.5https://mateuszdabrowski.pl/docs/tags/snippet/weekly0.5https://mateuszdabrowski.pl/docs/tags/sql/weekly0.5https://mateuszdabrowski.pl/docs/tags/ssjs/weekly0.5https://mateuszdabrowski.pl/docs/tags/style-guide/weekly0.5https://mateuszdabrowski.pl/docs/tags/type-script/weekly0.5https://mateuszdabrowski.pl/docs/tags/users/weekly0.5https://mateuszdabrowski.pl/docs/tags/webinar/weekly0.5https://mateuszdabrowski.pl/search/weekly0.5https://mateuszdabrowski.pl/sites/tags/weekly0.5https://mateuszdabrowski.pl/sites/tags/best-practice/weekly0.5https://mateuszdabrowski.pl/sites/tags/faq/weekly0.5https://mateuszdabrowski.pl/sites/tags/interaction-studio/weekly0.5https://mateuszdabrowski.pl/sites/tags/marketing-cloud-personalization/weekly0.5https://mateuszdabrowski.pl/sites/tags/marketing-cloud/weekly0.5https://mateuszdabrowski.pl/sites/tags/personalization/weekly0.5https://mateuszdabrowski.pl/docs/weekly0.5https://mateuszdabrowski.pl/docs/ampscript/ampscript-style-guide/weekly0.5https://mateuszdabrowski.pl/docs/category/ampscript-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/ampscript/weekly0.5https://mateuszdabrowski.pl/docs/category/javascript/weekly0.5https://mateuszdabrowski.pl/docs/category/js-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/mc-personalization-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/mc-personalization/weekly0.5https://mateuszdabrowski.pl/docs/category/serverside-code/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-config/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-sql-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-sql/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-webinars/weekly0.5https://mateuszdabrowski.pl/docs/category/ssjs-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/ssjs/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-appexchange-solutions/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-behavioral-triggers/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-code-resource/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-contact-deletion/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-enhanced-send-log/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-features-on-demand/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-mcc-integration-patterns/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-mobile-connect-data-views/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-system-data-views/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-catalog-architecture/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-open-time-email/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-serverside-code-basics/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-serverside-code-properties/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/weekly0.5https://mateuszdabrowski.pl/docs/js/js-dom/weekly0.5https://mateuszdabrowski.pl/docs/js/js-if-and-switch/weekly0.5https://mateuszdabrowski.pl/docs/js/js-loops/weekly0.5https://mateuszdabrowski.pl/docs/js/snippets/engage-with-countdown/weekly0.5https://mateuszdabrowski.pl/docs/js/snippets/export-import-document-sfmc-roles/weekly0.5https://mateuszdabrowski.pl/docs/js/snippets/tailor-with-data/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-aggregate-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-basics/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-case/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-conversion-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-date-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-from/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-join/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-like/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-null-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-numeric-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-select/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-string-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-style-guide/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-where/weekly0.5https://mateuszdabrowski.pl/docs/sql/snippets/sfmc-sql-debugging-email-sends/weekly0.5https://mateuszdabrowski.pl/docs/sql/snippets/sfmc-sql-debugging-value-length/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/debugging-ssjs/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/ampscript-in-ssjs/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/sfmc-cloud-page-apps/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/ssjs-script-template/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-if-and-switch/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-loops/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-style-guide/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-vs-ampscript-performance/weekly0.5https://mateuszdabrowski.pl/docs/webinars/sfmc-webinar-account-architecture/weekly0.5https://mateuszdabrowski.pl/docs/webinars/sfmc-webinar-architecting-web-solutions/weekly0.5https://mateuszdabrowski.pl/docs/webinars/sfmc-webinar-cloud-page-apps/weekly0.5https://mateuszdabrowski.pl/docs/zen-of-sfmc/weekly0.5https://mateuszdabrowski.pl/sites/category/faq/weekly0.5https://mateuszdabrowski.pl/sites/category/ideas/weekly0.5https://mateuszdabrowski.pl/sites/faq/how-to-get-sf-certification-vouchers/weekly0.5https://mateuszdabrowski.pl/sites/faq/how-to-get-sfmc-hands-on-experience/weekly0.5https://mateuszdabrowski.pl/sites/ideas/marketing-cloud-ideas/weekly0.5https://mateuszdabrowski.pl/sites/ideas/mc-personalization-ideas/weekly0.5https://mateuszdabrowski.pl/sites/licence/weekly0.5https://mateuszdabrowski.pl/sites/my-toolset/weekly0.5https://mateuszdabrowski.pl/sites/newsletter/weekly0.5https://mateuszdabrowski.pl/sites/privacy/weekly0.5https://mateuszdabrowski.pl/weekly0.5 \ No newline at end of file +https://mateuszdabrowski.pl/search/weekly0.5https://mateuszdabrowski.pl/docs/tags/weekly0.5https://mateuszdabrowski.pl/docs/tags/amp-script/weekly0.5https://mateuszdabrowski.pl/docs/tags/analytics/weekly0.5https://mateuszdabrowski.pl/docs/tags/app-exchange/weekly0.5https://mateuszdabrowski.pl/docs/tags/app/weekly0.5https://mateuszdabrowski.pl/docs/tags/automation/weekly0.5https://mateuszdabrowski.pl/docs/tags/behavioral-triggers/weekly0.5https://mateuszdabrowski.pl/docs/tags/best-practice/weekly0.5https://mateuszdabrowski.pl/docs/tags/cloud-page/weekly0.5https://mateuszdabrowski.pl/docs/tags/configuration/weekly0.5https://mateuszdabrowski.pl/docs/tags/crm/weekly0.5https://mateuszdabrowski.pl/docs/tags/data-extensions/weekly0.5https://mateuszdabrowski.pl/docs/tags/data-management/weekly0.5https://mateuszdabrowski.pl/docs/tags/debugging/weekly0.5https://mateuszdabrowski.pl/docs/tags/deliverability/weekly0.5https://mateuszdabrowski.pl/docs/tags/einstein/weekly0.5https://mateuszdabrowski.pl/docs/tags/eloqua/weekly0.5https://mateuszdabrowski.pl/docs/tags/email/weekly0.5https://mateuszdabrowski.pl/docs/tags/integration/weekly0.5https://mateuszdabrowski.pl/docs/tags/interaction-studio/weekly0.5https://mateuszdabrowski.pl/docs/tags/java-script/weekly0.5https://mateuszdabrowski.pl/docs/tags/journey/weekly0.5https://mateuszdabrowski.pl/docs/tags/marketing-cloud-personalization/weekly0.5https://mateuszdabrowski.pl/docs/tags/marketing-cloud/weekly0.5https://mateuszdabrowski.pl/docs/tags/performance/weekly0.5https://mateuszdabrowski.pl/docs/tags/personalisation/weekly0.5https://mateuszdabrowski.pl/docs/tags/setup/weekly0.5https://mateuszdabrowski.pl/docs/tags/sms/weekly0.5https://mateuszdabrowski.pl/docs/tags/snippet/weekly0.5https://mateuszdabrowski.pl/docs/tags/sql/weekly0.5https://mateuszdabrowski.pl/docs/tags/ssjs/weekly0.5https://mateuszdabrowski.pl/docs/tags/style-guide/weekly0.5https://mateuszdabrowski.pl/docs/tags/type-script/weekly0.5https://mateuszdabrowski.pl/docs/tags/users/weekly0.5https://mateuszdabrowski.pl/docs/tags/webinar/weekly0.5https://mateuszdabrowski.pl/docs/weekly0.5https://mateuszdabrowski.pl/docs/ampscript/ampscript-style-guide/weekly0.5https://mateuszdabrowski.pl/docs/category/ampscript-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/ampscript/weekly0.5https://mateuszdabrowski.pl/docs/category/javascript/weekly0.5https://mateuszdabrowski.pl/docs/category/js-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/mc-personalization-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/mc-personalization/weekly0.5https://mateuszdabrowski.pl/docs/category/serverside-code/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-config/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-sql-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-sql/weekly0.5https://mateuszdabrowski.pl/docs/category/sfmc-webinars/weekly0.5https://mateuszdabrowski.pl/docs/category/ssjs-snippets/weekly0.5https://mateuszdabrowski.pl/docs/category/ssjs/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-appexchange-solutions/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-behavioral-triggers/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-code-resource/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-contact-deletion/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-enhanced-send-log/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-features-on-demand/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-mcc-integration-patterns/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-mobile-connect-data-views/weekly0.5https://mateuszdabrowski.pl/docs/config/sfmc-system-data-views/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-catalog-architecture/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-open-time-email/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-serverside-code-basics/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-serverside-code-context/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/mcp-serverside-code-properties/weekly0.5https://mateuszdabrowski.pl/docs/interaction-studio/snippets/mcp-catalog-etl-metadata-viewer/weekly0.5https://mateuszdabrowski.pl/docs/js/js-dom/weekly0.5https://mateuszdabrowski.pl/docs/js/js-if-and-switch/weekly0.5https://mateuszdabrowski.pl/docs/js/js-loops/weekly0.5https://mateuszdabrowski.pl/docs/js/snippets/engage-with-countdown/weekly0.5https://mateuszdabrowski.pl/docs/js/snippets/export-import-document-sfmc-roles/weekly0.5https://mateuszdabrowski.pl/docs/js/snippets/tailor-with-data/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-aggregate-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-basics/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-case/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-conversion-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-date-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-from/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-join/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-like/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-null-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-numeric-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-select/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-string-functions/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-style-guide/weekly0.5https://mateuszdabrowski.pl/docs/sql/sfmc-sql-where/weekly0.5https://mateuszdabrowski.pl/docs/sql/snippets/sfmc-sql-debugging-email-sends/weekly0.5https://mateuszdabrowski.pl/docs/sql/snippets/sfmc-sql-debugging-value-length/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/debugging-ssjs/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/ampscript-in-ssjs/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/sfmc-cloud-page-apps/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/ssjs-mobileconnect-phone-change/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/snippets/ssjs-script-template/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-if-and-switch/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-loops/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-style-guide/weekly0.5https://mateuszdabrowski.pl/docs/ssjs/ssjs-vs-ampscript-performance/weekly0.5https://mateuszdabrowski.pl/docs/webinars/sfmc-webinar-account-architecture/weekly0.5https://mateuszdabrowski.pl/docs/webinars/sfmc-webinar-architecting-web-solutions/weekly0.5https://mateuszdabrowski.pl/docs/webinars/sfmc-webinar-cloud-page-apps/weekly0.5https://mateuszdabrowski.pl/docs/zen-of-sfmc/weekly0.5https://mateuszdabrowski.pl/sites/tags/weekly0.5https://mateuszdabrowski.pl/sites/tags/best-practice/weekly0.5https://mateuszdabrowski.pl/sites/tags/faq/weekly0.5https://mateuszdabrowski.pl/sites/tags/interaction-studio/weekly0.5https://mateuszdabrowski.pl/sites/tags/marketing-cloud-personalization/weekly0.5https://mateuszdabrowski.pl/sites/tags/marketing-cloud/weekly0.5https://mateuszdabrowski.pl/sites/tags/personalization/weekly0.5https://mateuszdabrowski.pl/sites/category/faq/weekly0.5https://mateuszdabrowski.pl/sites/category/ideas/weekly0.5https://mateuszdabrowski.pl/sites/faq/how-to-get-sf-certification-vouchers/weekly0.5https://mateuszdabrowski.pl/sites/faq/how-to-get-sfmc-hands-on-experience/weekly0.5https://mateuszdabrowski.pl/sites/ideas/marketing-cloud-ideas/weekly0.5https://mateuszdabrowski.pl/sites/ideas/mc-personalization-ideas/weekly0.5https://mateuszdabrowski.pl/sites/licence/weekly0.5https://mateuszdabrowski.pl/sites/my-toolset/weekly0.5https://mateuszdabrowski.pl/sites/newsletter/weekly0.5https://mateuszdabrowski.pl/sites/privacy/weekly0.5https://mateuszdabrowski.pl/weekly0.5 \ No newline at end of file diff --git a/sites/category/faq/index.html b/sites/category/faq/index.html index 05848441f..390e44d19 100644 --- a/sites/category/faq/index.html +++ b/sites/category/faq/index.html @@ -1,22 +1,19 @@ - + - -Frequently Asked Questions | Mateusz Dąbrowski + +Frequently Asked Questions | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/category/ideas/index.html b/sites/category/ideas/index.html index f9a217dd2..f8fdeeefb 100644 --- a/sites/category/ideas/index.html +++ b/sites/category/ideas/index.html @@ -1,22 +1,19 @@ - + - -Ideas | Mateusz Dąbrowski + +Ideas | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/faq/how-to-get-sf-certification-vouchers/index.html b/sites/faq/how-to-get-sf-certification-vouchers/index.html index 440c59a15..a64ec0849 100644 --- a/sites/faq/how-to-get-sf-certification-vouchers/index.html +++ b/sites/faq/how-to-get-sf-certification-vouchers/index.html @@ -1,22 +1,105 @@ - + - -How to get SF Certification vouchers? | Mateusz Dąbrowski + +How to get SF Certification vouchers? | Mateusz Dąbrowski - - - + + + -
    -

    How to get SF Certification vouchers?

    Salesforce Certifications. What, why and how (you can pay less).

    In the Salesforce ecosystem, badges and certificates are everywhere. While the former is free on Trailhead, the latter is pretty expensive even to attempt to get them. It creates some questions:

    1. What is the difference between free badges and paid certs?
    2. Why bother with the paid option?
    3. Can you get certified for free (or at least cheaper)?

    Let's dive in.

    Badges vs Certification

    When it comes to official proofs of Salesforce knowledge, there are four types available: Badges and Superbadges available on Trailhead (self-learning platform for everyone), Certifications available on Webassessor (examination platform for everyone) and Professional Accreditations available on Partner Learning Camp (self-learning platform for official Partners).

    Badges

    Badges are obtained (for free) by passing a few quizzes and, in some cases, guided hands-on exercises within a Trailhead module focused on a specific topic. It can be technical (for example, configuration or development) or business (best practices or frameworks). Salesforce provides all required knowledge within the module, and you should be able to complete it in between 5 to 40 minutes, depending on the module's complexity. They are great for learning and easy to obtain (especially with unlimited attempts). For me, having a badge proves that someone has a high-level awareness of a topic covered by the badge.

    Superbadges

    Trailhead also offers Superbadges (also for free). These are different beasts from standard badges - not only do they have some of these as a prerequisite, but their crucial task is a full-blown hands-on exercise on the Salesforce CRM platform. While they also provide a guide with references, it's not enough, and some work with documentation and problem-solving is also required to perform the hands-on tasks. They take a few to a dozen hours and are much closer to project experience. For me, having a Superbadge proves that someone completed the basic version of a task once and should be able to do something similar with documentation and support.

    Salesforce Certifications

    Salesforce Certifications are entirely different. Whereas badges and Superbadges are created for learning, certifications are for proving knowledge. You will complete (many) badges before you attempt the certification exam. Real project experience is also beneficial (or even required) for most of them. On top of that, they aren't free. Exam attempts cost between $75+VAT (for Associate exams), $200+VAT (for most) and $400+VAT (for Architect exams). Oh yeah, there is also a Certified Technical Architect for $6000+VAT per attempt waiting for you ;). While the difficulty between the exams varies a lot, they are much more challenging than badges as you have limited time (1-2 hours) to pass them and cannot use any resources other than your head. For me, having a certification proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there.

    Salesforce Accreditations

    Finally, there are Professional Accreditations available only for Salesforce Partners - companies responsible for implementing, supporting and enriching Salesforce solutions for SF customers. Professional Accreditations are very similar to Salesforce Certifications - they are paid, require passing an exam, and have a learning path built with Trailhead modules. There are some differences, however. On top of publicly available modules, they have some Partner-only knowledge sources (in some cases - hands-on exercises). Additionally, they cover more niche topics that aren't part of the standard Salesforce Certifications. For me, accreditation proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there.

    To sum up - my growing order of confidence in a person's skills based on just credentials looks like this:

    1. Badge
    2. Associate Certification
    3. Superbadge
    4. Salesforce Non-Architect Certification and Professional Accreditation
    5. Salesforce Architect Certification

    Does it mean someone with just badges is a worse expert than someone with 5 certificates? Not necessarily - there are knowledge titans that don't have (many or any) certifications for various reasons but know the tools better than Salesforce. Real-world project experience and expertise are best. So why bother paying for certs?

    Why get Salesforce certified?

    Badges, Superbadges and actual project experience are enough to be a top expert. There is no need to pay for certification to be an outstanding Trailblazer. Still, there are significant benefits to pursuing official credentials:

    You will be seen by recruiters

    Certifications are a great tool to stand out to recruiters. They are easy to understand and show in search, making them the perfect tool to put their foot in the door.

    To better understand that, let's break down the recruitment process into three key steps (yeah, I simplify it a lot):

    1. Create a pool of candidates - quick search (on LinkedIn, career platforms, received CVs) for potential candidates using keyword matches. It can be manual; it can be automated with AI. Here, your previous role names and certifications play the leading role.
    2. Select the most interesting candidates - a deeper dive into the profile to limit the pool from the previous step to the best matches. Your past jobs and task descriptions shine here as they showcase what you are doing. Certifications can give you an edge here as proof of knowledge - especially for Salesforce Partner companies.
    3. Interview the top candidates - after two previous rounds, it's time to talk. At this step, certifications are no longer critical, and the key is your communication, self-presentation skills, and real platform experience.

    As you can see, certificates won't guarantee a job, but they will give you much more visibility and increase your chance of being picked up. This is especially true for higher positions where credentials are frequently optional or even mandatory requirements.

    You will have an argument for a rise

    Certification is also an excellent argument for getting a rise. It is easy proof of getting better than before and a reason for you being worth more on the market (as recruiters will see you easier).

    It is especially true when you work for a Salesforce Partner - for them, the certs are much more critical because both Salesforce and potential clients check them when looking for a project partner.

    You will validate your knowledge

    Certifications are a nice tool to validate your knowledge, especially if you have been working on a tool for a long time. Salesforce platforms change a lot over time, and while the old ways might still work for some time, there might be new, better methods. Additionally, you may not be aware of everything available with how broad the Salesforce capabilities are.

    Preparing for and passing a certification exam is a great way to validate you know the current basics for a given role and - with obligatory ongoing credential maintenance - that you stay on top of changes.

    You will be motivated to expand your knowledge

    Certifications are also great tools when you want to learn something new. Salesforce prepares dedicated Trailmixes on Trailhead that group relevant badges for a certification area. Thanks to certifications, there are also a lot of additional materials supporting your learning created by companies like Focus on Force or other Trailblazers on their blogs and videos.

    After all this learning, getting certified is a neat way to validate your work and gain confidence in your baseline knowledge.

    Certification sum up - not needed, but worthwhile. So, how can you get Salesforce Certified without ruining the budget?

    How to get Salesforce Certified for free?

    Salesforce certification is costly, and paying for it out of pocket creates a significant dent in the budget, especially with static worldwide pricing that doesn't consider the difference in purchasing power between countries.

    There are, however, some options to spend less or even nothing to get a chance to pass the credential exam.

    Vouchers from your company

    This is probably not the answer you are looking for, but the easiest way to get the voucher might be to get it from your company. However, a lot will depend on the company you work for.

    It is easy if you work for Salesforce Partner. Not only are they getting vouchers as a part of the Partner program, but they also have a discount on buying more for their employees. Additionally, they want their employees to be certified, giving them a better chance to score a new project. Salesforce and potential clients look for project partner certifications on company-wide and specific consultant levels.

    It is much more challenging if you work as an in-house. Many companies don't want to fund exam vouchers to their in-house employees because they don't see the added value for their day-to-day work and fear the recruitment/rise benefits of getting certified. If this is the case, try to show the knowledge maintenance and upskilling benefits and tie them to your KPIs. Another option to get a voucher might be to propose it as a fallback benefit if a rise is unavailable in a given evaluation period. If this also doesn't work, it's time to look for other potential sources (or a new employer).

    Vouchers for Partner Community

    Another great source of vouchers is limited to employees of Salesforce Partners. Apart from getting those vouchers from their company, there are recurring opportunities given directly from Salesforce for certifications that are currently in their focus. The best place to look for them is to join Partner Community channels for specific products and check the description and recent posts for goodies.

    Partner Community

    Vouchers from Salesforce

    In the past, Salesforce frequently publicly shared vouchers that at least cut down the price and sometimes even allowed for free exam attempts. For example, in the first half of 2023, a $100 off voucher made Salesforce Associate certification completely free. However, since then, those vouchers have become extremely scarce, and the few still appearing are much less beneficial. My favourite place to check which (if any) public vouchers are currently available is to visit the always-updated page by Dinesh Yadav:

    Dinesh's Voucher Tracker

    Vouchers from Trailhead Quest

    Outside of publicly shared vouchers, Salesforce also offers Trailhead Quests that, for doing some task, give you a chance to get a goodie. There are multiple options, with the prizes varying from the time-limited badge through a mystery box up to the topic of this article - a certification voucher. Keep checking this page occasionally, as the list changes regularly.

    Trailhead Quests

    Vouchers from Meetups

    Trailblazer Community Group Leaders and offline meetup organisers can sometimes get vouchers from Salesforce for quiz/raffle purposes. Check events happening close to you, broaden your knowledge and get a chance to win a voucher for a free exam.

    Trailblazer Community Groups events

    Vouchers from Salesforce special programs

    There are also various opportunities to get free exams by supporting Salesforce with your work.

    One example of such a program (rare but relatively accessible) is helping Salesforce create or test new certifications. With this option, you will need to provide feedback on the exam questions, certification scope and prep materials. It will let you attempt the certification for free long before it is publicly available. The best way to look for such opportunities is to follow the Salesforce Credentials Development team on LinkedIn or Trailblazer Community and patiently wait for a post inviting to a new certification project.

    Asking people for vouchers

    Please don't.

    Think about why that random person should give you a voucher:

    • If they get them from their company - the company will check whether they used them for certification.
    • If they get them from Partner Community - those are limited to Partners employees. If you are one, you can get it yourself. If you are not - you won't be eligible to receive it.
    • If they get them from publicly available vouchers - you can also get them from the same source.
    • If they get them from Trailhead Quest or a meetup raffle - they participated because they wanted it for themselves so they won't be giving it away.
    • If they get them from Salesforce programs - they are named vouchers that no one else can use.
    • If they bought them from their pocket - why would they want to give those hundred dollars away?

    Instead of asking others about their vouchers, try the methods above to get your own.

    Sum Up

    1. Salesforce Certifications are not needed but worthwhile.
    2. There are multiple ways to try getting certified for free, but if you want to go on an exam-passing spree, your best bet is to work for Salesforce Partner (or Salesforce themselves).
    - - +

    How to get SF Certification vouchers?

    Salesforce Certifications. What, why and how (you can pay less).

    +

    In the Salesforce ecosystem, badges and certificates are everywhere. While the former is free on Trailhead, the latter is pretty expensive even to attempt to get them. It creates some questions:

    +
      +
    1. What is the difference between free badges and paid certs?
    2. +
    3. Why bother with the paid option?
    4. +
    5. Can you get certified for free (or at least cheaper)?
    6. +
    +

    Let's dive in.

    +

    Badges vs Certification

    +

    When it comes to official proofs of Salesforce knowledge, there are four types available: Badges and Superbadges available on Trailhead (self-learning platform for everyone), Certifications available on Webassessor (examination platform for everyone) and Professional Accreditations available on Partner Learning Camp (self-learning platform for official Partners).

    +

    Badges

    +

    Badges are obtained (for free) by passing a few quizzes and, in some cases, guided hands-on exercises within a Trailhead module focused on a specific topic. It can be technical (for example, configuration or development) or business (best practices or frameworks). Salesforce provides all required knowledge within the module, and you should be able to complete it in between 5 to 40 minutes, depending on the module's complexity. They are great for learning and easy to obtain (especially with unlimited attempts). For me, having a badge proves that someone has a high-level awareness of a topic covered by the badge.

    +

    Superbadges

    +

    Trailhead also offers Superbadges (also for free). These are different beasts from standard badges - not only do they have some of these as a prerequisite, but their crucial task is a full-blown hands-on exercise on the Salesforce CRM platform. While they also provide a guide with references, it's not enough, and some work with documentation and problem-solving is also required to perform the hands-on tasks. They take a few to a dozen hours and are much closer to project experience. For me, having a Superbadge proves that someone completed the basic version of a task once and should be able to do something similar with documentation and support.

    +

    Salesforce Certifications

    +

    Salesforce Certifications are entirely different. Whereas badges and Superbadges are created for learning, certifications are for proving knowledge. You will complete (many) badges before you attempt the certification exam. Real project experience is also beneficial (or even required) for most of them. On top of that, they aren't free. Exam attempts cost between $75+VAT (for Associate exams), $200+VAT (for most) and $400+VAT (for Architect exams). Oh yeah, there is also a Certified Technical Architect for $6000+VAT per attempt waiting for you ;). While the difficulty between the exams varies a lot, they are much more challenging than badges as you have limited time (1-2 hours) to pass them and cannot use any resources other than your head. For me, having a certification proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there.

    +

    Salesforce Accreditations

    +

    Finally, there are Professional Accreditations available only for Salesforce Partners - companies responsible for implementing, supporting and enriching Salesforce solutions for SF customers. Professional Accreditations are very similar to Salesforce Certifications - they are paid, require passing an exam, and have a learning path built with Trailhead modules. There are some differences, however. On top of publicly available modules, they have some Partner-only knowledge sources (in some cases - hands-on exercises). Additionally, they cover more niche topics that aren't part of the standard Salesforce Certifications. For me, accreditation proves that someone has a baseline knowledge in the area and can be at least semi-independent in working there.

    +

    To sum up - my growing order of confidence in a person's skills based on just credentials looks like this:

    +
      +
    1. Badge
    2. +
    3. Associate Certification
    4. +
    5. Superbadge
    6. +
    7. Salesforce Non-Architect Certification and Professional Accreditation
    8. +
    9. Salesforce Architect Certification
    10. +
    +

    Does it mean someone with just badges is a worse expert than someone with 5 certificates? Not necessarily - there are knowledge titans that don't have (many or any) certifications for various reasons but know the tools better than Salesforce. Real-world project experience and expertise are best. So why bother paying for certs?

    +

    Why get Salesforce certified?

    +

    Badges, Superbadges and actual project experience are enough to be a top expert. There is no need to pay for certification to be an outstanding Trailblazer. Still, there are significant benefits to pursuing official credentials:

    +

    You will be seen by recruiters

    +

    Certifications are a great tool to stand out to recruiters. They are easy to understand and show in search, making them the perfect tool to put their foot in the door.

    +

    To better understand that, let's break down the recruitment process into three key steps (yeah, I simplify it a lot):

    +
      +
    1. Create a pool of candidates - quick search (on LinkedIn, career platforms, received CVs) for potential candidates using keyword matches. It can be manual; it can be automated with AI. Here, your previous role names and certifications play the leading role.
    2. +
    3. Select the most interesting candidates - a deeper dive into the profile to limit the pool from the previous step to the best matches. Your past jobs and task descriptions shine here as they showcase what you are doing. Certifications can give you an edge here as proof of knowledge - especially for Salesforce Partner companies.
    4. +
    5. Interview the top candidates - after two previous rounds, it's time to talk. At this step, certifications are no longer critical, and the key is your communication, self-presentation skills, and real platform experience.
    6. +
    +

    As you can see, certificates won't guarantee a job, but they will give you much more visibility and increase your chance of being picked up. This is especially true for higher positions where credentials are frequently optional or even mandatory requirements.

    +

    You will have an argument for a rise

    +

    Certification is also an excellent argument for getting a rise. It is easy proof of getting better than before and a reason for you being worth more on the market (as recruiters will see you easier).

    +

    It is especially true when you work for a Salesforce Partner - for them, the certs are much more critical because both Salesforce and potential clients check them when looking for a project partner.

    +

    You will validate your knowledge

    +

    Certifications are a nice tool to validate your knowledge, especially if you have been working on a tool for a long time. Salesforce platforms change a lot over time, and while the old ways might still work for some time, there might be new, better methods. Additionally, you may not be aware of everything available with how broad the Salesforce capabilities are.

    +

    Preparing for and passing a certification exam is a great way to validate you know the current basics for a given role and - with obligatory ongoing credential maintenance - that you stay on top of changes.

    +

    You will be motivated to expand your knowledge

    +

    Certifications are also great tools when you want to learn something new. Salesforce prepares dedicated Trailmixes on Trailhead that group relevant badges for a certification area. Thanks to certifications, there are also a lot of additional materials supporting your learning created by companies like Focus on Force or other Trailblazers on their blogs and videos.

    +

    After all this learning, getting certified is a neat way to validate your work and gain confidence in your baseline knowledge.

    +

    Certification sum up - not needed, but worthwhile. So, how can you get Salesforce Certified without ruining the budget?

    +

    How to get Salesforce Certified for free?

    +

    Salesforce certification is costly, and paying for it out of pocket creates a significant dent in the budget, especially with static worldwide pricing that doesn't consider the difference in purchasing power between countries.

    +

    There are, however, some options to spend less or even nothing to get a chance to pass the credential exam.

    +

    Vouchers from your company

    +

    This is probably not the answer you are looking for, but the easiest way to get the voucher might be to get it from your company. However, a lot will depend on the company you work for.

    +

    It is easy if you work for Salesforce Partner. Not only are they getting vouchers as a part of the Partner program, but they also have a discount on buying more for their employees. Additionally, they want their employees to be certified, giving them a better chance to score a new project. Salesforce and potential clients look for project partner certifications on company-wide and specific consultant levels.

    +

    It is much more challenging if you work as an in-house. Many companies don't want to fund exam vouchers to their in-house employees because they don't see the added value for their day-to-day work and fear the recruitment/rise benefits of getting certified. If this is the case, try to show the knowledge maintenance and upskilling benefits and tie them to your KPIs. Another option to get a voucher might be to propose it as a fallback benefit if a rise is unavailable in a given evaluation period. If this also doesn't work, it's time to look for other potential sources (or a new employer).

    +

    Vouchers for Partner Community

    +

    Another great source of vouchers is limited to employees of Salesforce Partners. Apart from getting those vouchers from their company, there are recurring opportunities given directly from Salesforce for certifications that are currently in their focus. The best place to look for them is to join Partner Community channels for specific products and check the description and recent posts for goodies.

    +Partner Community +

    Vouchers from Salesforce

    +

    In the past, Salesforce frequently publicly shared vouchers that at least cut down the price and sometimes even allowed for free exam attempts. For example, in the first half of 2023, a $100 off voucher made Salesforce Associate certification completely free. However, since then, those vouchers have become extremely scarce, and the few still appearing are much less beneficial. My favourite place to check which (if any) public vouchers are currently available is to visit the always-updated page by Dinesh Yadav:

    +Dinesh's Voucher Tracker +

    Vouchers from Trailhead Quest

    +

    Outside of publicly shared vouchers, Salesforce also offers Trailhead Quests that, for doing some task, give you a chance to get a goodie. There are multiple options, with the prizes varying from the time-limited badge through a mystery box up to the topic of this article - a certification voucher. Keep checking this page occasionally, as the list changes regularly.

    +Trailhead Quests +

    Vouchers from Meetups

    +

    Trailblazer Community Group Leaders and offline meetup organisers can sometimes get vouchers from Salesforce for quiz/raffle purposes. Check events happening close to you, broaden your knowledge and get a chance to win a voucher for a free exam.

    +Trailblazer Community Groups events +

    Vouchers from Salesforce special programs

    +

    There are also various opportunities to get free exams by supporting Salesforce with your work.

    +

    One example of such a program (rare but relatively accessible) is helping Salesforce create or test new certifications. With this option, you will need to provide feedback on the exam questions, certification scope and prep materials. It will let you attempt the certification for free long before it is publicly available. The best way to look for such opportunities is to follow the Salesforce Credentials Development team on LinkedIn or Trailblazer Community and patiently wait for a post inviting to a new certification project.

    +

    Asking people for vouchers

    +

    Please don't.

    +

    Think about why that random person should give you a voucher:

    +
      +
    • If they get them from their company - the company will check whether they used them for certification.
    • +
    • If they get them from Partner Community - those are limited to Partners employees. If you are one, you can get it yourself. If you are not - you won't be eligible to receive it.
    • +
    • If they get them from publicly available vouchers - you can also get them from the same source.
    • +
    • If they get them from Trailhead Quest or a meetup raffle - they participated because they wanted it for themselves so they won't be giving it away.
    • +
    • If they get them from Salesforce programs - they are named vouchers that no one else can use.
    • +
    • If they bought them from their pocket - why would they want to give those hundred dollars away?
    • +
    +

    Instead of asking others about their vouchers, try the methods above to get your own.

    +

    Sum Up

    +
      +
    1. Salesforce Certifications are not needed but worthwhile.
    2. +
    3. There are multiple ways to try getting certified for free, but if you want to go on an exam-passing spree, your best bet is to work for Salesforce Partner (or Salesforce themselves).
    4. +
    \ No newline at end of file diff --git a/sites/faq/how-to-get-sfmc-hands-on-experience/index.html b/sites/faq/how-to-get-sfmc-hands-on-experience/index.html index 9c6f68c5f..03398ea9b 100644 --- a/sites/faq/how-to-get-sfmc-hands-on-experience/index.html +++ b/sites/faq/how-to-get-sfmc-hands-on-experience/index.html @@ -1,22 +1,48 @@ - + - -How to get hands-on experience with SFMC | Mateusz Dąbrowski + +How to get hands-on experience with SFMC | Mateusz Dąbrowski - - - + + + -
    -

    How to get hands-on experience with SFMC

    You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?

    With more and more people looking to learn about Salesforce Marketing Cloud, there are recurring questions about how to get a real-life experience with the platform. For Salesforce CRM, it is incredibly user-friendly through Trailhead Playgrounds and full Dev Orgs. Salesforce Marketing Cloud, unfortunately, doesn't have such options. About a decade ago, there was a brief moment when Developer Edition accounts for Salesforce Marketing Cloud were available, but now it is much more complicated. Let's talk options.

    You Should Know

    There is an idea to bring SFMC Dev Orgs back, and while I encourage voting on it, don't have high hopes.

    Access through your company

    This is probably not the answer you are looking for, but the easiest way to get hands-on experience with the SFMC is to work for a company using it. There are three scenarios here:

    1. Any company that bought Salesforce Marketing Cloud

    This one is straightforward. If the company has a licence, you can try to get access to it to learn and play. However, due to compliance, security and user licence limits, it might be hard if you are outside the digital marketing/marketing automation team. An excellent option here is to look for a nonprofit organisation using Marketing Cloud and offer them your support for free. Knowledge for you and tasks done for the Nonprofit. There are also internships available in the ecosystem.

    2. Salesforce Marketing Cloud Consulting Partner

    Registered Salesforce Consulting Partners can request a special non-production account for learning, development, testing and demoing. If you work for an SF Partner, they should have that account already. If not - they can request it through Partner Program Support Case. It's a nice account with many SuperMessages, Business Units, User and features like Marketing Cloud Personalization available.

    3. Salesforce Marketing Cloud ISV Partner

    That special non-production account is also available to Salesforce ISV (Independent Software Vendor) Partners. However, they must prove that they are building a Marketing Cloud AppExchange app to be eligible for one.

    Access through Mentor

    While the official Salesforce Mentorship program is no longer live, there are still people in the ecosystem that offer their mentorship - and in some cases they are able to provide an access to SFMC as well if their company allows that.

    Access through Trailhead Academy

    In 2023, Salesforce added another - more available but paywalled - option to the Trailhead Academy. It offers a 6-weeks-long Virtual Bootcamp for Salesforce Marketing Cloud with hands-on experience on the platform as a part of the course. Multiple languages are available, and the price for the English one is $225 (it varies based on the language, so be sure to check the planned classes for the cost to you).

    Access through SuperMums

    There is also much pricier, unofficial but fuller option: SuperMums SFMC Bootcamp. For £2400 you are getting a 7-weeks live course with 4-weeks access to the platform that hopes to prepare you fully for your first Marketing Cloud job.

    Access through Trailblazer Community

    If you want something free, some community-driven bootcamps offer temporary access to Salesforce Marketing Cloud for learning purposes. The best group to follow is the Salesforce Marketer Group in Pheonix, US led by the knowledge-sharing powerhouse Jyothsna Bitra (JB).

    Access through HandsOnSFMC

    Last (but definitely not least) full-access option I'm aware of is delivered by the fabulous Tim Ziter through his knowledge-packed HandsOnSFMC website. It's a weekly event focused on building stuff directly on the SFMC platform. Short term access to Marketing Cloud included.

    Limited access through MCSnippets

    Yet another free option is offered by the Salesforce MVP Pato Sapir. This one, however, is not full-blown access to the Marketing Cloud, but rather a set of web apps (MC Snippets for AMPScript and SSJS and MC Snippets for SQL) that provides option to write proprietary code on the SFMC Platform. Perfect for polishing your dev skills and preparing for Salesforce Marketing Cloud Developer certification.

    What else for beginners?

    I'm unaware of any hands-on access options besides those listed above (and I'm all ears if you know some more!). What's left for beginners is read-only learning on Trailhead and watch-only learning on SFMC-focused YouTube Channels. I especially recommend checking out the following:

    1. Trailblazing Together channel packed with Marketing Cloud Bootcamps recordings.
    2. Cameron Robert's channel full of step-by-step video guides on all things SFMC.

    After you grasp the basics, the whole Salesforce Marketing Cloud blogosphere opens for you with its broad knowledge.

    - - +

    How to get hands-on experience with SFMC

    You want to learn Salesforce Marketing Cloud. And the best way to learn is to get your hands dirty. So, how can you get access to the SFMC playground?

    +

    With more and more people looking to learn about Salesforce Marketing Cloud, there are recurring questions about how to get a real-life experience with the platform. For Salesforce CRM, it is incredibly user-friendly through Trailhead Playgrounds and full Dev Orgs. Salesforce Marketing Cloud, unfortunately, doesn't have such options. About a decade ago, there was a brief moment when Developer Edition accounts for Salesforce Marketing Cloud were available, but now it is much more complicated. Let's talk options.

    +
    You Should Know

    There is an idea to bring SFMC Dev Orgs back, and while I encourage voting on it, don't have high hopes.

    +

    Access through your company

    +

    This is probably not the answer you are looking for, but the easiest way to get hands-on experience with the SFMC is to work for a company using it. There are three scenarios here:

    +

    1. Any company that bought Salesforce Marketing Cloud

    +

    This one is straightforward. If the company has a licence, you can try to get access to it to learn and play. However, due to compliance, security and user licence limits, it might be hard if you are outside the digital marketing/marketing automation team. An excellent option here is to look for a nonprofit organisation using Marketing Cloud and offer them your support for free. Knowledge for you and tasks done for the Nonprofit. There are also internships available in the ecosystem.

    +

    2. Salesforce Marketing Cloud Consulting Partner

    +

    Registered Salesforce Consulting Partners can request a special non-production account for learning, development, testing and demoing. If you work for an SF Partner, they should have that account already. If not - they can request it through Partner Program Support Case. It's a nice account with many SuperMessages, Business Units, User and features like Marketing Cloud Personalization available.

    +

    3. Salesforce Marketing Cloud ISV Partner

    +

    That special non-production account is also available to Salesforce ISV (Independent Software Vendor) Partners. However, they must prove that they are building a Marketing Cloud AppExchange app to be eligible for one.

    +

    Access through Mentor

    +

    While the official Salesforce Mentorship program is no longer live, there are still people in the ecosystem that offer their mentorship - and in some cases they are able to provide an access to SFMC as well if their company allows that.

    +

    Access through Trailhead Academy

    +

    In 2023, Salesforce added another - more available but paywalled - option to the Trailhead Academy. It offers a 6-weeks-long Virtual Bootcamp for Salesforce Marketing Cloud with hands-on experience on the platform as a part of the course. Multiple languages are available, and the price for the English one is $225 (it varies based on the language, so be sure to check the planned classes for the cost to you).

    +

    Access through SuperMums

    +

    There is also much pricier, unofficial but fuller option: SuperMums SFMC Bootcamp. For £2400 you are getting a 7-weeks live course with 4-weeks access to the platform that hopes to prepare you fully for your first Marketing Cloud job.

    +

    Access through Trailblazer Community

    +

    If you want something free, some community-driven bootcamps offer temporary access to Salesforce Marketing Cloud for learning purposes. The best group to follow is the Salesforce Marketer Group in Pheonix, US led by the knowledge-sharing powerhouse Jyothsna Bitra (JB).

    +

    Access through HandsOnSFMC

    +

    Last (but definitely not least) full-access option I'm aware of is delivered by the fabulous Tim Ziter through his knowledge-packed HandsOnSFMC website. It's a weekly event focused on building stuff directly on the SFMC platform. Short term access to Marketing Cloud included.

    +

    Limited access through MCSnippets

    +

    Yet another free option is offered by the Salesforce MVP Pato Sapir. This one, however, is not full-blown access to the Marketing Cloud, but rather a set of web apps (MC Snippets for AMPScript and SSJS and MC Snippets for SQL) that provides option to write proprietary code on the SFMC Platform. Perfect for polishing your dev skills and preparing for Salesforce Marketing Cloud Developer certification.

    +

    What else for beginners?

    +

    I'm unaware of any hands-on access options besides those listed above (and I'm all ears if you know some more!). What's left for beginners is read-only learning on Trailhead and watch-only learning on SFMC-focused YouTube Channels. I especially recommend checking out the following:

    +
      +
    1. Trailblazing Together channel packed with Marketing Cloud Bootcamps recordings.
    2. +
    3. Cameron Robert's channel full of step-by-step video guides on all things SFMC.
    4. +
    +

    After you grasp the basics, the whole Salesforce Marketing Cloud blogosphere opens for you with its broad knowledge.

    \ No newline at end of file diff --git a/sites/ideas/marketing-cloud-ideas/index.html b/sites/ideas/marketing-cloud-ideas/index.html index ca7370ad7..91adc6b54 100644 --- a/sites/ideas/marketing-cloud-ideas/index.html +++ b/sites/ideas/marketing-cloud-ideas/index.html @@ -1,23 +1,177 @@ - + - -Marketing Cloud Ideas | Mateusz Dąbrowski + +Marketing Cloud Ideas | Mateusz Dąbrowski - - - + + + -
    -

    Marketing Cloud Ideas

    Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!

    Mobile Studio

    Locale-based SMS Blackout

    SMS Blackout allows blocking SMS sends in the chosen timeframe. Currently, SMS Blackout can be configured based on Account Timezone.

    However, it would be much better for multi-country clients to configure the Blackout period based on the recipient's local timezone. MobilePhone locale is perfect for implementing this.

    This way, it would be possible to create, for example, a single SMS Blackout for nighttime and apply it for each contact regardless of the timezone. The locale is already there for MobileConnect and can be leveraged for determining timezone offset.

    Vote on IdeaExchange

    Web Studio

    Cloud Page Favicon & Open Graph Management

    Currently the only option to manage <meta> elements in Web Studio is to code them manually on each Cloud Page. This is creating a lot of workload and is an error prone process.

    While many <meta> tags are Cloud Page specific and this is not that big of a problem, there are some that could be shared:

    1. Favicon - not only it could be shared by all Cloud Pages, but now it's not even possible to upload one in .ico format to Content Builder.
    2. og:image/twitter:image - having possibility to set a default one (with possibility to overwrite for a specific page) would greatly improve the UX of social shared Cloud Pages - even just putting a nice company logo would make sharing lead or whitepaper forms look so much nicer and trigger better engagement.

    This could be easily improved by Salesforce by implementing one of two options:

    1. [Minimum Valuable Solution] Global configuration for Web Studio where one can upload a favicon and og:image/twitter:image and have it applied to all Cloud Pages
    2. [Solution Deluxe] Possibility to upload multiple favicons and og:images/twitter:images and use a picklist option on Cloud Page level to select the one that should be used.

    Input field in Cloud Page editor for og:title would be cherry on top.

    Vote on IdeaExchange

    Journey Builder

    DeliveryTime for Journey Builder emails

    DeliveryTime is _Job Data View field that stores timestamp for the email delivery (when it successfully reached the target Email Service Provider). It is currently impossible to get delivery time for emails sent via Journey Builder.

    All other engagement data points are available (EventDate field for _Sent, _Open, _Click, _Bounce), but DeliveryTime from _Job Data View returns NULL for Journey Builder emails.

    It is happening, however, only for Journey Builder emails. Sends via any other methods (for example, Send Flow) are correctly displaying the delivery time.

    I see it as a massive limitation for automations focused on keeping the database clean and debugging sends.

    Vote on IdeaExchange

    _DataSourceName for Entry Data Extension in Journey Builder

    As per the documentation, _DataSourceName personalisation string should show the communication audience's name. It covers lists, data extensions, groups, and filters.

    It works when the email is sent via Email Studio -> Email -> Content -> Send flow. However, when we send an Email (or SMS) from Journey Builder, _DataSourceName shows "All Subscribers" instead of the Entry Data Extension name. It is true for both Multi-Step Journeys and Single Email Sends.

    _DataSourceName should show Entry Data Extension Name for Emails in Journey Builder. It is handy to debug from Send Log and create dynamic logic in emails based on the Data Extension naming convention.

    Vote on IdeaExchange

    Journey Builder Script Activity

    Salesforce Marketing Cloud Journey Builder offers many out-of-the-box Activities and the possibility to create or download custom ones from AppExchange. However, there is a space between those solutions that Salesforce can cover to empower Marketing Cloud users. An out-of-the-box Script Activity, similar to the one available in Automation Studio.

    Flexible enough to offer countless possibilities to SFMC power users without the complexity of creating a custom solution with the whole hosting, scalability and security considerations.

    Right now, it requires either:

    • Stitching multiple Journeys and Automations with status-capturing Data Extensions to let members flow through the mix or
    • filthy tricks with scripting in emails and, in the end, raising an error to block it from sending (quasi Script Activity with bad impact on reporting, performance, speed and super messages).

    Salesforce can solve it. Below are two possible solutions (and a bonus one for even more performance-oriented fun):

    1. Minimum Valuable Solution: Script Activity with the same features as in Automation Studio. The possibility of executing SSJS (or even AMPScript to optimise performance) against every Journey member would allow for pre-send updates of data from external systems using HTTP functions to ensure that crucial personalisation details are up-to-date.
    2. Solution Deluxe: Extension of the previous idea to define various paths based on a predefined value in the script. Think about custom decision splits using out-of-sfmc data that allow you to change the Journey path based on real-time information from external systems.
    3. Bonus Solution: There is also a place for a much less system-heavy script activity on the side. One that captures all members that get to that Activity and in predefined cadence (for example, every hour), if there is at least one member available, executes provided script once. Think of it as a mix of Wait and Script Activity that allows executing logic applied to groups. Use cases? Lazy update of the personalisation-source Data Extension that happens only if there are members that would need it. Or performance check of the subsequent communication to decide whether the members should receive it. All with the performance impact of one script execution per hour - regardless of the number of members.
    Vote on IdeaExchange

    Wait Until Time Range Activity

    Salesforce Marketing Cloud offers many different Wait Activities, but one basic is missing - Wait Until Time Range.

    Use Case

    You want to send emails only at a specific time range (like 9 AM - 5 PM). -For example, Journey is filled at random times with events via API or form submissions, but you don't want the email to be sent in the night.

    Current Options

    Right now, there is no easy workaround:

    1. Einstein STO is a blackbox
    2. Wait by Duration is closest to the solution, as it allows you to delay sending to a specific hour (for example, extend the wait duration till 9 AM). Still, unfortunately, it means that if someone enters Journey at 10 AM, they will have to wait a whole day. We want to send emails normally in a given time range.
    3. Update Contact adding Timestamp to Data Extension, and Decision Split deciding what should happen (send or Wait by Duration). Nice, but a lot of steps, configuration, performance penalty and awful Journey readability for longer Journeys.
    4. Custom Journey Builder Activity. Sure, but that's a lot of custom work and worrying about scalability.

    Salesforce can solve it.

    Possible solutions

    1. Minimum Valuable Solution: Improve Wait by Duration with "Extend wait duration outside of time range" or create a separate Wait Until Time Range Activity.
    2. Solution Deluxe: Allow both time ranges and days-of-week ranges (with the possibility to mix both) to cover the no-sends-on-weekends use case.
    Vote on IdeaExchange

    Behavioral Triggers

    Einstein User Attributes in Behavioral Trigger Content Block

    The Behavioral Triggers Content Block for Emails is an excellent tool for easy drag-and-drop creation of Abandoned Engagement communication. But it is missing one powerful feature — the ability to personalise the email with customer data.

    It is already available in the form of:

    • Einstein User Attributes that we can pass through the setUserInfo data layer.
    • The request used in the back end of the current Behavioral Triggers Content Block; by adding "&user_attributes=attributeName" to the endpoint.
    • Code of the existing Behavioral Triggers Content Block responsible for creating AMPScript variables based on the Einstein User Attributes data.

    However, as the Einstein User Attributes are neither added to the request by default nor configured in the User Integrace of the Content Block, to get this data in the email, one must create yet another, the same call with the above query parameter added. Neither user friendly nor optimal due to expensive HTTP.Get function running twice in such a scenario.

    Salesforce can fix it. Below are two solution tiers:

    1. Minimum Valuable Solution: Add the required query string ("&user_attributes=X,Y") with all potential Custom Einsteins User Attributes to the request URL built within the Content Block code.
    2. Solution Deluxe: Improve the above with the UI-enabled selection of needed Profile Attributes, just as available with Product Attributes.
    Vote on IdeaExchange

    Behavioral Triggers Content Block allows for easy out-of-the-box use of abandoned engagement data in our Emails. It neatly pulls the Catalog items that captivated the customer's attention and displays them for win-back purposes. Of course, each item links back to its e-commerce page.

    Its implementation is, however, leading to a problem with tracking. My favourite solution - Parameter Manager with Web Analytics Connector - is not working on the Behavioral Trigger Content Block. Neither can we add the tracking parameters manually, as there is no such option in the UI.

    Right now, there are only two ways to add the UTM's:

    1. Add them to the Catalog directly - this adds them for all scenarios connected to Einstein or Behavioral Triggers. Not helpful, as in most cases, we want to differentiate various personalisation placements by using distinct UTM tracking.
    2. Create a Custom Behavioral Trigger Content Block - now we will be able to leverage direct links from IGO_PRODUCTATTRIBS add tracking to them in the product's HTML template. Okay, but not easy and make you lose click data for Einstein Recommendations.

    Salesforce can fix it. Below are two possible solutions:

    1. Minimum Valuable Solution: Add a text box to a Behavioral Trigger Content Block configuration menu to add our custom tracking. The Content Block should apply the provided tracking query to each link. AMPScript support included.
    2. Solution Deluxe: On top of the above solution, Marketing Cloud should consider the Parameter Management to allow for a mix of global UTM's from Web Analytics Connector and local from the new text box in Behavioral Trigger Content Block configuration.
    Vote on IdeaExchange

    Behavioral Trigger Abandoned Cart Custom Attributes

    The Behavioral Triggers are a terrific solution for Abandoned Engagement. The Abandoned Cart scenario already has multiple great features that make it easy to implement.

    There is, however, an area for an easy improvement on that idea to make it much more flexible and ready for real-world scenarios. Salesforce can do it with two solutions:

    Custom Cart Attributes

    Just as there are Custom Attributes for the Product Catalog, it would be great to have a similar option on the cart itself. Product Catalog ones are global - shared for all Customers interested in selected products. There is a need for something more unique and customer-specific.

    It is already available in the form of an optional price attribute of trackCart Collect.js Data Layer that contains individual price that does not impact the Product Catalog. It would be great to have the possibility to add a few more, available in trackCart Collect.js and the response from Einstein Backend (IgoDigital).

    Use case? Sure. Coupon Code Name, Coupon Code Discount (either integer or float for per cent value), added Personalisation, Voucher ID. All those tools are frequently used in e-commerce and would be perfect for a trackCart layer. Suitable for personalisation, perfect for passing data needed for rebuilding the cart.

    Cart Attributes Visibility in the Content Block

    This one is an extension of the above idea. We already have a way to decide which Product Catalog Attributes are displayed in the Behavioral Trigger Content Block. But in many cases, when I use Abandoned Cart, I would like to show trackCart individual price (including applied coupons) instead of the global Catalog one. It could also be helpful for some Custom Cart Attributes from the previous solution.

    Below are three solution tiers:

    1. Minimum Valuable Solution: Add price trackCart attribute (amount in the response from the IgoDigital) available for selection when defining fields shown for products in Behavioral Trigger Content Block.
    2. Nice Solution: On top of the first point, add two additional (optional) attributes to trackCart Collect.js and IgoDigital response: couponCodeName, couponCodeDiscount - and make them also available for selection in Behavioral Trigger Content Block.
    3. Solution Deluxe: On top of the first point, add the possibility of defining Custom Cart Attributes in the UI and leveraging them in trackCart Collect.js and IgoDigital response. Just as with Custom Profile Attributes / Custom Product Attributes. Additionally, make them also available for selection in Behavioral Trigger Content Block.
    Vote on IdeaExchange

    Behavioral Trigger Content Block rendering on Yahoo, AOL, Windows Outlook

    The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. On those Email Providers, the product text is not displayed, and the customer only sees the images.

    The reason for this is using rem units font-size for product descriptions - font-size: 0.8125rem:

    <td class="mcbt_name" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 310px;">--name--</td>

    rem units are currently not supported by Yahoo, AOL and Windows Outlook (Can I Email) which leads to those Email Providers ignoring this parameter. When this happens, the font-size value is inherited from the parent that have font-size configured.

    And for Behavioral Trigger Content block that parent is a <td> parameter within header markupFragment. Unfortunately, it has font-size: 0:

    <td class="multi-column" style="padding: 0; text-align: center; font-size: 0; padding-top: 10px; padding-bottom: 10px;">

    There should be no rem units used in the Behavioral Trigger Content Block code and instead a standard px font-size assignment for the Block to render correctly.

    Vote on IdeaExchange

    Content Builder

    Content Builder Shared Folders Permissions

    Content Builder is great for creating and neatly organising assets in Marketing Cloud, but it has one huge issue. Folder access management.

    There are already great Ideas on expanding the folder rights, so in this Idea, I want to focus on something different - and much easier to fix for Salesforce.

    When settings permissions for a Marketing Cloud User or Role, there are options that control the rights to Shared Folders of Content Builder. As with Shared Data Extensions Folder permissions, you can decide what the user or role can do with Shared Content Folders.

    However, there is one huge difference:

    1. With Shared Data Extension Folders, when you remove all permissions, the user or role can no longer see Shared space and effectively loses access to all Shared Data Extensions.
    2. With Shared Content Folders, when you remove all permissions, the user or role will not see the folders, but they will still see the Shared Folder tab and - what's much worse - All Shared Content section displaying all the Content assets stored within Shared Folders.

    As SFMC applies the permissions to read and edit content to both local and shared assets, every person with edit rights can change assets in a Shared Content Folder - event if they do not have permission to that folder.

    This behaviour breaks a prevalent use case of having local folders available to all creators while limiting shared folders only to administrative roles. It is possible (and very useful) for Data Extensions. But not for Content Builder, as everyone can access all administrative-level assets (like master templates or crucial content blocks).

    The fix is straightforward - if the current user does not have any permissions to Shared Content Builder Folders, it shouldn't see either the All Shared Content section or even the Shared Folders tab. That's it. It would then mirror the Shared Data Extension folder permissions and enable the local/administrative access split use case.

    Vote on IdeaExchange

    Setup

    Restore default permissions for SFMC Standard System Roles

    While Salesforce updates the Standard Roles (Email Studio and Marketing Cloud ones) during Releases, users can also modify them within the SFMC Setup freely (permissions of those System Roles are not locked).

    Unfortunately, there is no option to see whether the Standard Role deviates from the default configuration. It creates problems for new administrators coming to existing implementation or after someone modifies the wrong role by mistake/not following the best practices.

    Official documentation only stores high-level information about the out-of-the-box configuration that cannot be used to restore the original state.

    It would be of great help to have on the Stnadard System Roles either:

    • Button that lets you restore the default (for new orgs) permissions configuration or
    • Information on each permission what is its default state.

    Currently, there is no real workaround apart from:

    • Checking it against another, unchanged SFMC (which is not an option for most) or
    • Using the manual backup, I'm currently building (which is not the best long-term option, especially with all the changes to the permissions happening multiple times a year).
    Vote on IdeaExchange
    - - +

    Marketing Cloud Ideas

    Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!

    +

    Mobile Studio

    +

    Locale-based SMS Blackout

    +

    SMS Blackout allows blocking SMS sends in the chosen timeframe. Currently, SMS Blackout can be configured based on Account Timezone.

    +

    However, it would be much better for multi-country clients to configure the Blackout period based on the recipient's local timezone. MobilePhone locale is perfect for implementing this.

    +

    This way, it would be possible to create, for example, a single SMS Blackout for nighttime and apply it for each contact regardless of the timezone. The locale is already there for MobileConnect and can be leveraged for determining timezone offset.

    +Vote on IdeaExchange +
    +

    Web Studio

    +

    Cloud Page Favicon & Open Graph Management

    +

    Currently the only option to manage <meta> elements in Web Studio is to code them manually on each Cloud Page. This is creating a lot of workload and is an error prone process.

    +

    While many <meta> tags are Cloud Page specific and this is not that big of a problem, there are some that could be shared:

    +
      +
    1. Favicon - not only it could be shared by all Cloud Pages, but now it's not even possible to upload one in .ico format to Content Builder.
    2. +
    3. og:image/twitter:image - having possibility to set a default one (with possibility to overwrite for a specific page) would greatly improve the UX of social shared Cloud Pages - even just putting a nice company logo would make sharing lead or whitepaper forms look so much nicer and trigger better engagement.
    4. +
    +

    This could be easily improved by Salesforce by implementing one of two options:

    +
      +
    1. [Minimum Valuable Solution] Global configuration for Web Studio where one can upload a favicon and og:image/twitter:image and have it applied to all Cloud Pages
    2. +
    3. [Solution Deluxe] Possibility to upload multiple favicons and og:images/twitter:images and use a picklist option on Cloud Page level to select the one that should be used.
    4. +
    +

    Input field in Cloud Page editor for og:title would be cherry on top.

    +Vote on IdeaExchange +
    +

    Journey Builder

    +

    DeliveryTime for Journey Builder emails

    +

    DeliveryTime is _Job Data View field that stores timestamp for the email delivery (when it successfully reached the target Email Service Provider). It is currently impossible to get delivery time for emails sent via Journey Builder.

    +

    All other engagement data points are available (EventDate field for _Sent, _Open, _Click, _Bounce), but DeliveryTime from _Job Data View returns NULL for Journey Builder emails.

    +

    It is happening, however, only for Journey Builder emails. Sends via any other methods (for example, Send Flow) are correctly displaying the delivery time.

    +

    I see it as a massive limitation for automations focused on keeping the database clean and debugging sends.

    +Vote on IdeaExchange +

    _DataSourceName for Entry Data Extension in Journey Builder

    +

    As per the documentation, _DataSourceName personalisation string should show the communication audience's name. It covers lists, data extensions, groups, and filters.

    +

    It works when the email is sent via Email Studio -> Email -> Content -> Send flow. However, when we send an Email (or SMS) from Journey Builder, _DataSourceName shows "All Subscribers" instead of the Entry Data Extension name. It is true for both Multi-Step Journeys and Single Email Sends.

    +

    _DataSourceName should show Entry Data Extension Name for Emails in Journey Builder. It is handy to debug from Send Log and create dynamic logic in emails based on the Data Extension naming convention.

    +Vote on IdeaExchange +

    Journey Builder Script Activity

    +

    Salesforce Marketing Cloud Journey Builder offers many out-of-the-box Activities and the possibility to create or download custom ones from AppExchange. However, there is a space between those solutions that Salesforce can cover to empower Marketing Cloud users. An out-of-the-box Script Activity, similar to the one available in Automation Studio.

    +

    Flexible enough to offer countless possibilities to SFMC power users without the complexity of creating a custom solution with the whole hosting, scalability and security considerations.

    +

    Right now, it requires either:

    +
      +
    • Stitching multiple Journeys and Automations with status-capturing Data Extensions to let members flow through the mix or
    • +
    • filthy tricks with scripting in emails and, in the end, raising an error to block it from sending (quasi Script Activity with bad impact on reporting, performance, speed and super messages).
    • +
    +

    Salesforce can solve it. Below are two possible solutions (and a bonus one for even more performance-oriented fun):

    +
      +
    1. Minimum Valuable Solution: Script Activity with the same features as in Automation Studio. The possibility of executing SSJS (or even AMPScript to optimise performance) against every Journey member would allow for pre-send updates of data from external systems using HTTP functions to ensure that crucial personalisation details are up-to-date.
    2. +
    3. Solution Deluxe: Extension of the previous idea to define various paths based on a predefined value in the script. Think about custom decision splits using out-of-sfmc data that allow you to change the Journey path based on real-time information from external systems.
    4. +
    5. Bonus Solution: There is also a place for a much less system-heavy script activity on the side. One that captures all members that get to that Activity and in predefined cadence (for example, every hour), if there is at least one member available, executes provided script once. Think of it as a mix of Wait and Script Activity that allows executing logic applied to groups. Use cases? Lazy update of the personalisation-source Data Extension that happens only if there are members that would need it. Or performance check of the subsequent communication to decide whether the members should receive it. All with the performance impact of one script execution per hour - regardless of the number of members.
    6. +
    +Vote on IdeaExchange +

    Wait Until Time Range Activity

    +

    Salesforce Marketing Cloud offers many different Wait Activities, but one basic is missing - Wait Until Time Range.

    +

    Use Case

    +

    You want to send emails only at a specific time range (like 9 AM - 5 PM). +For example, Journey is filled at random times with events via API or form submissions, but you don't want the email to be sent in the night.

    +

    Current Options

    +

    Right now, there is no easy workaround:

    +
      +
    1. Einstein STO is a blackbox
    2. +
    3. Wait by Duration is closest to the solution, as it allows you to delay sending to a specific hour (for example, extend the wait duration till 9 AM). Still, unfortunately, it means that if someone enters Journey at 10 AM, they will have to wait a whole day. We want to send emails normally in a given time range.
    4. +
    5. Update Contact adding Timestamp to Data Extension, and Decision Split deciding what should happen (send or Wait by Duration). Nice, but a lot of steps, configuration, performance penalty and awful Journey readability for longer Journeys.
    6. +
    7. Custom Journey Builder Activity. Sure, but that's a lot of custom work and worrying about scalability.
    8. +
    +

    Salesforce can solve it.

    +

    Possible solutions

    +
      +
    1. Minimum Valuable Solution: Improve Wait by Duration with "Extend wait duration outside of time range" or create a separate Wait Until Time Range Activity.
    2. +
    3. Solution Deluxe: Allow both time ranges and days-of-week ranges (with the possibility to mix both) to cover the no-sends-on-weekends use case.
    4. +
    +Vote on IdeaExchange +
    +

    Behavioral Triggers

    +

    Einstein User Attributes in Behavioral Trigger Content Block

    +

    The Behavioral Triggers Content Block for Emails is an excellent tool for easy drag-and-drop creation of Abandoned Engagement communication. But it is missing one powerful feature — the ability to personalise the email with customer data.

    +

    It is already available in the form of:

    +
      +
    • Einstein User Attributes that we can pass through the setUserInfo data layer.
    • +
    • The request used in the back end of the current Behavioral Triggers Content Block; by adding "&user_attributes=attributeName" to the endpoint.
    • +
    • Code of the existing Behavioral Triggers Content Block responsible for creating AMPScript variables based on the Einstein User Attributes data.
    • +
    +

    However, as the Einstein User Attributes are neither added to the request by default nor configured in the User Integrace of the Content Block, to get this data in the email, one must create yet another, the same call with the above query parameter added. Neither user friendly nor optimal due to expensive HTTP.Get function running twice in such a scenario.

    +

    Salesforce can fix it. Below are two solution tiers:

    +
      +
    1. Minimum Valuable Solution: Add the required query string ("&user_attributes=X,Y") with all potential Custom Einsteins User Attributes to the request URL built within the Content Block code.
    2. +
    3. Solution Deluxe: Improve the above with the UI-enabled selection of needed Profile Attributes, just as available with Product Attributes.
    4. +
    +Vote on IdeaExchange + +

    Behavioral Triggers Content Block allows for easy out-of-the-box use of abandoned engagement data in our Emails. It neatly pulls the Catalog items that captivated the customer's attention and displays them for win-back purposes. Of course, each item links back to its e-commerce page.

    +

    Its implementation is, however, leading to a problem with tracking. My favourite solution - Parameter Manager with Web Analytics Connector - is not working on the Behavioral Trigger Content Block. Neither can we add the tracking parameters manually, as there is no such option in the UI.

    +

    Right now, there are only two ways to add the UTM's:

    +
      +
    1. Add them to the Catalog directly - this adds them for all scenarios connected to Einstein or Behavioral Triggers. Not helpful, as in most cases, we want to differentiate various personalisation placements by using distinct UTM tracking.
    2. +
    3. Create a Custom Behavioral Trigger Content Block - now we will be able to leverage direct links from IGO_PRODUCTATTRIBS add tracking to them in the product's HTML template. Okay, but not easy and make you lose click data for Einstein Recommendations.
    4. +
    +

    Salesforce can fix it. Below are two possible solutions:

    +
      +
    1. Minimum Valuable Solution: Add a text box to a Behavioral Trigger Content Block configuration menu to add our custom tracking. The Content Block should apply the provided tracking query to each link. AMPScript support included.
    2. +
    3. Solution Deluxe: On top of the above solution, Marketing Cloud should consider the Parameter Management to allow for a mix of global UTM's from Web Analytics Connector and local from the new text box in Behavioral Trigger Content Block configuration.
    4. +
    +Vote on IdeaExchange +

    Behavioral Trigger Abandoned Cart Custom Attributes

    +

    The Behavioral Triggers are a terrific solution for Abandoned Engagement. The Abandoned Cart scenario already has multiple great features that make it easy to implement.

    +

    There is, however, an area for an easy improvement on that idea to make it much more flexible and ready for real-world scenarios. Salesforce can do it with two solutions:

    +

    Custom Cart Attributes

    +

    Just as there are Custom Attributes for the Product Catalog, it would be great to have a similar option on the cart itself. Product Catalog ones are global - shared for all Customers interested in selected products. There is a need for something more unique and customer-specific.

    +

    It is already available in the form of an optional price attribute of trackCart Collect.js Data Layer that contains individual price that does not impact the Product Catalog. It would be great to have the possibility to add a few more, available in trackCart Collect.js and the response from Einstein Backend (IgoDigital).

    +

    Use case? Sure. Coupon Code Name, Coupon Code Discount (either integer or float for per cent value), added Personalisation, Voucher ID. All those tools are frequently used in e-commerce and would be perfect for a trackCart layer. Suitable for personalisation, perfect for passing data needed for rebuilding the cart.

    +

    Cart Attributes Visibility in the Content Block

    +

    This one is an extension of the above idea. We already have a way to decide which Product Catalog Attributes are displayed in the Behavioral Trigger Content Block. But in many cases, when I use Abandoned Cart, I would like to show trackCart individual price (including applied coupons) instead of the global Catalog one. It could also be helpful for some Custom Cart Attributes from the previous solution.

    +

    Below are three solution tiers:

    +
      +
    1. Minimum Valuable Solution: Add price trackCart attribute (amount in the response from the IgoDigital) available for selection when defining fields shown for products in Behavioral Trigger Content Block.
    2. +
    3. Nice Solution: On top of the first point, add two additional (optional) attributes to trackCart Collect.js and IgoDigital response: couponCodeName, couponCodeDiscount - and make them also available for selection in Behavioral Trigger Content Block.
    4. +
    5. Solution Deluxe: On top of the first point, add the possibility of defining Custom Cart Attributes in the UI and leveraging them in trackCart Collect.js and IgoDigital response. Just as with Custom Profile Attributes / Custom Product Attributes. Additionally, make them also available for selection in Behavioral Trigger Content Block.
    6. +
    +Vote on IdeaExchange +

    Behavioral Trigger Content Block rendering on Yahoo, AOL, Windows Outlook

    +

    The current version of Behavioral Trigger Content Block is not rendering correctly on Yahoo, AOL and Windows Outlook. On those Email Providers, the product text is not displayed, and the customer only sees the images.

    +

    The reason for this is using rem units font-size for product descriptions - font-size: 0.8125rem:

    +

    <td class="mcbt_name" style="padding: 0; font-size: 0.8125rem; padding-top: 10px; text-align: center; width: 100%; max-width: 310px;">--name--</td>

    +

    rem units are currently not supported by Yahoo, AOL and Windows Outlook (Can I Email) which leads to those Email Providers ignoring this parameter. When this happens, the font-size value is inherited from the parent that have font-size configured.

    +

    And for Behavioral Trigger Content block that parent is a <td> parameter within header markupFragment. Unfortunately, it has font-size: 0:

    +

    <td class="multi-column" style="padding: 0; text-align: center; font-size: 0; padding-top: 10px; padding-bottom: 10px;">

    +

    There should be no rem units used in the Behavioral Trigger Content Block code and instead a standard px font-size assignment for the Block to render correctly.

    +Vote on IdeaExchange +
    +

    Content Builder

    +

    Content Builder Shared Folders Permissions

    +

    Content Builder is great for creating and neatly organising assets in Marketing Cloud, but it has one huge issue. Folder access management.

    +

    There are already great Ideas on expanding the folder rights, so in this Idea, I want to focus on something different - and much easier to fix for Salesforce.

    +

    When settings permissions for a Marketing Cloud User or Role, there are options that control the rights to Shared Folders of Content Builder. As with Shared Data Extensions Folder permissions, you can decide what the user or role can do with Shared Content Folders.

    +

    However, there is one huge difference:

    +
      +
    1. With Shared Data Extension Folders, when you remove all permissions, the user or role can no longer see Shared space and effectively loses access to all Shared Data Extensions.
    2. +
    3. With Shared Content Folders, when you remove all permissions, the user or role will not see the folders, but they will still see the Shared Folder tab and - what's much worse - All Shared Content section displaying all the Content assets stored within Shared Folders.
    4. +
    +

    As SFMC applies the permissions to read and edit content to both local and shared assets, every person with edit rights can change assets in a Shared Content Folder - event if they do not have permission to that folder.

    +

    This behaviour breaks a prevalent use case of having local folders available to all creators while limiting shared folders only to administrative roles. It is possible (and very useful) for Data Extensions. But not for Content Builder, as everyone can access all administrative-level assets (like master templates or crucial content blocks).

    +

    The fix is straightforward - if the current user does not have any permissions to Shared Content Builder Folders, it shouldn't see either the All Shared Content section or even the Shared Folders tab. That's it. It would then mirror the Shared Data Extension folder permissions and enable the local/administrative access split use case.

    +Vote on IdeaExchange +
    +

    Setup

    +

    Restore default permissions for SFMC Standard System Roles

    +

    While Salesforce updates the Standard Roles (Email Studio and Marketing Cloud ones) during Releases, users can also modify them within the SFMC Setup freely (permissions of those System Roles are not locked).

    +

    Unfortunately, there is no option to see whether the Standard Role deviates from the default configuration. It creates problems for new administrators coming to existing implementation or after someone modifies the wrong role by mistake/not following the best practices.

    +

    Official documentation only stores high-level information about the out-of-the-box configuration that cannot be used to restore the original state.

    +

    It would be of great help to have on the Stnadard System Roles either:

    +
      +
    • Button that lets you restore the default (for new orgs) permissions configuration or
    • +
    • Information on each permission what is its default state.
    • +
    +

    Currently, there is no real workaround apart from:

    +
      +
    • Checking it against another, unchanged SFMC (which is not an option for most) or
    • +
    • Using the manual backup, I'm currently building (which is not the best long-term option, especially with all the changes to the permissions happening multiple times a year).
    • +
    +Vote on IdeaExchange
    \ No newline at end of file diff --git a/sites/ideas/mc-personalization-ideas/index.html b/sites/ideas/mc-personalization-ideas/index.html index 49f18ea68..a71e1c15f 100644 --- a/sites/ideas/mc-personalization-ideas/index.html +++ b/sites/ideas/mc-personalization-ideas/index.html @@ -1,22 +1,148 @@ - + - -MC Personalization Ideas | Mateusz Dąbrowski + +MC Personalization Ideas | Mateusz Dąbrowski - - - + + + -
    -

    MC Personalization Ideas

    Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!

    Catalog

    Full MCP Category hierarchy support for ETL

    Marketing Cloud Personalization can create a working hierarchy tree of categories with a clean subcategory drill-down view in catalog UI and automatic summing of the views and revenue from the lowest level category up in the hierarchy.

    However, this is now possible only under multiple conditions: just one Category per product (for the attribution to work), a specific format of the category ID, and only through Sitemap.

    Especially problematic is that last limitation because, in many cases, ETL is the better way to manage it - especially with the format required for that feature.

    Category ETL already has a solution that provides the same level of detail to Marketing Cloud Personalization (Interaction Studio) using two out-of-the-box attributes: department and parentCategoryId.

    MCP displays the hierarchy built with those fields on the specific Category page under the ID. Unfortunately, it is not replicating the drill-down hierarchy tree UI in the Category list view and does not pass the data from the bottom Category up the hierarchy.

    It should change - there should be a feature parity between Sitemap and ETL for such an important feature. Especially considering that all information required for it is already available.

    Read about risky workaround here.

    Vote on IdeaExchange

    Full MCP Catalog Export

    Marketing Cloud Personalization (Interaction Studio) already supports Catalog manual export through the Export button on the Catalog listing. However, it exports products only with the limited data set available in the listing view.

    The problem with the current state is that the exported file does not contain complete catalog data (like promotable and archived attributes) and cannot be used as an ETL source.

    It is a huge issue because it makes it impossible to debug catalog item states outside of MCP (and doing it directly in the platform is not scalable). It also makes it impossible to batch-modify items (for example, for selective archiving or exclusion) for subsequent ETL import.

    There should be an option to export the catalog in full scope, matching the ETL schema, including hidden Items that didn't yet get any action (view, cart, purchase).

    Bonus points for an option to include (or not) archived Items in the export. It would be a hugely beneficial addition for debugging purposes and Item reintroduction requirements (for example after mistake in archiving).

    Read about partial workaround here.

    Vote on IdeaExchange

    Full MCP Catalog Metadata visibility

    Marketing Cloud Personalization (Interaction Studio) already supports Catalog Object custom attribute metadata view (open Item in the Catalog and hover over custom attribute value to see the details). However, it is limited only to those custom attributes if the ETL updates them.

    We can slightly extend it with a custom Metadata Viewer solution to show that data also for built-in attributes. However, it is still a very limited solution due to product gaps:

    1. origin and lastUpdated values for Sources other than ETL (Sitemap, Mobile App, Manual update in UI, API)
    2. Showing this information for built-in attributes in the Catalog UI
    3. General Item createdDate and lastUpdatedDate (not attribute-specific)

    That scope of information would make debugging Catalog metadata issues significantly easier. Less work for admins/developers. Less downtime for the recommendations. Fewer support tickets for Salesforce.

    Vote on IdeaExchange

    Einstein Recipes

    Multiple Dimensional Variations for Products in Einstein Recipes

    Einstein Recipes are a powerful and flexible tool for creating recommendations, but the fourth step - Variations - is not on par with the rest of the options.

    You can configure only a single Dimensional Variation. While you can choose from multiple Item Types when configuring it, once you select one, that's the end of the story. You cannot limit recommended products to, for example, only 2 per category and 2 per brand.

    It heavily limits control over product recommendations, especially for e-commerce with multiple catalog objects. Currently, there is no real workaround.

    At the same time, it is possible to select multiple Boosters or Exclusions of the same type and configure them differently. It would be great to select multiple Dimensional Variations with different configurations.

    Vote on IdeaExchange

    Department Variation for Products in Einstein Recipes

    Einstein Recipes lets you configure Dimensional Variations on the Category, but unfortunately, it works only on the primary category level. There is no option to select the Department (master category) level.

    It is very limiting for e-commerce with broad category trees like:

    • monitors (gaming, graphic, office, medical, etc.)
    • computers (laptops, ultrabooks, convertibles, desktops, all-in-ones, etc.)
    • paints (acrylic, enamel, emulsion, etc.).

    With such categories, recommendations with Category Variation configured can easily still be dominated by a similar product (like 12 monitor recommendations despite the Category Variation limit set to 3 due to similar primary categories).

    There are two possible solutions to this issue:

    1. Add Department as another option in the Item Type dropdown (as it is separate from Categories in Exclusions and Boosters) or
    2. When the Item Type Category is selected, add a checkbox on whether Variation should happen on the primary Category or Department level.

    Currently, the only workaround is to create a separate Catalog for Departments, but that defeats the purpose of Is Department checkbox on the default Category object.

    Vote on IdeaExchange

    Price Reduction Ingredient in Einstein Recipes

    Triggered Campaigns added a great option of targetting various events for Journey Builder sends. Among them, there are Catalog Triggers. Some of them, like Product Expiring Soon, are also available for Web with Einstein Recipes Ingredients.

    However, currently, there is no Ingredient for a popular e-commerce use case - Price Reduction.

    Marketing Cloud Personalization (Interaction Studio) has all the required information (the price and listPrice attributes used for the Triggered Campaign).

    There is a workaround to make it possible now - calculating whether product price has been reduced externally and passing this information to a Related Catalog Object. However, there are better solutions for something that MCP is already doing out-of-the-box for another channel.

    There are two possible solutions to this:

    1. Simple ingredient that returns all price-reduced items (similar to Trending).
    2. Configurable ingredient with an option to select minimum price reduction percent.

    The solution can further improve it by adding a Recipe Booster on the price reduction percent.

    Vote on IdeaExchange

    Rating Count in Recipe's Rating Exclusion

    Marketing Cloud Personalization (Interaction Studio) offers many Exclusions/Inclusions on Recipes that allow to hone the recommendations to the exact business needs. Among them there is Rating that allows to exclude/include items based on their rating (with an optional zero rating capture).

    It would be great to have additional option in the same exclusion/inclusion to decide on rating count being greater than, less then or between two values. It should be easy, as the rating count is already part of the data model just like rating itself.

    This would enable use cases like:

    1. Including only products with great rating that have at least 10 ratings.
    2. Excluding products with bad rating if they have more than 3 ratings.
    3. Including products user purchased that have less than 3 ratings for review-request campaign.

    Currently such filters can be applied only on the Serverside Code level in the Template, which is not perfect as it can very easily limit the 12 received recommendations to just few or even zero. Having it on recipe level would be much more powerful.

    Vote on IdeaExchange

    Abandoned Cart Retention setting

    Marketing Cloud Personalization (Interaction Studio) captures the cart information and makes it available for Einstein Recipes recommendation generation & context object in Campaign Template Server-Side Code. Unfortunately, we can only manage the cart content through proactive actions. If a client adds something to the cart and doesn't visit it for long periods, their cart content will remain in the MCP.

    Currently, a dirty workaround for that is a Web Campaign launching on the first visit in the session using the context.user object to check whether the user has a cart and its age. Depending on that, it can push clear cart action. But this could be more user and performance friendly.

    The better option would be adding an option to MCP settings that would allow each business to configure (or not) the retention of the cart data so that it can be removed from the system automatically after some time.

    Vote on IdeaExchange

    ETL

    External Email Campaign ETL Experience Name & ID

    External Email Campaign ETL enables passing behavioural data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it is limited to a Campaign ID and Campaign Name. It is a problem because to benefit from that data in segmentation fully, it should also allow passing Email ID and Email Name.

    The good part - only minimal work is needed, as the groundwork is already laid down. The trick is to leverage it by adding Experience ID and Experience Name columns to the ETL as fields for Email metadata.

    When you check the event stream for an outcome from that ETL, you will see it described as Impression on experience Default in campaign {CAMPAIGN_NAME}. What is more, the same event will already show (empty) properties .etl_eeid (ExternalExperienceID) and .etl_een (ExternalExperienceName) that are matching filled in .etl_ecid (ExternalCampaignID) and .etl_ecn (ExternalCampaignName). Finally, the segmentation is also ready for this extension, as the External Email Campaign ETL is leveraging the same Campaign Stat Count (or Recency) segmentation as Marketing Cloud Personalization (Interaction Studio) built-in campaigns, leveraging both Campaigns and Experiences.

    Currently, one has to choose whether to segment only on emails (without any connection to a specific campaign) or only campaigns (without any ties to specific emails within the campaigns). With that ETL change, we could build segments focusing either on whole Campaigns (f.e. SFMC Journeys) or only particular Emails in selected Journeys (f.e. the First email in Welcome Journey). Easy win for truly targeted Personalization!

    Vote on IdeaExchange

    External Email Campaign ETL Send Segmentation

    External Email Campaign ETL enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, only segmentation based on Click and Open (View) is currently supported.

    Two options are available in the Campaigns - Campaign Stat Count (or Recency) segmentation rule - Get sent email campaign and Qualify to view (control) - but neither works for the Send event. It renders that event type useless right now.

    Enabling one of the above segmentation rules (preferably Get sent email campaign) would unlock use cases like targeting Web or Push campaigns to users who we sent an email campaign, but they never opened it. Great way to fully leverage the cross-channel and real-time nature of Personalization.

    Vote on IdeaExchange

    External Email Campaign ETL Unsubscription Event Type

    External Email Campaign ETL enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it cannot pass unsubscriptions.

    Official documentation mentions this event type in the eventType column description but doesn't follow it up in the Example Values section. I also performed tests on my side and found it is impossible - Test Run in Feed returns an error: Transform error: Invalid eventType 'Unsubscribe'. Valid types are Send, Click, Open. Unsubscription could be easily segmentable as an already existing Dismissal action.

    Unsubscribe should be added to unlock a wide range of targeted campaigns like surveys about unsubscription reasons, win-back campaigns or replacing email subscription prompts with other channel recommendations.

    Vote on IdeaExchange

    Segmentation

    MCP Action Name Management

    Marketing Cloud Personalization (Interaction Studio) captures actions from multiple sources to enable user segmentation and campaign targeting. Unfortunately, it does not offer any option to manage created actions, meaning everything that was pushed stays on the Dataset forever.

    At the very least, there should be an option to view and remove existing Actions that are no longer needed (for example, test or refactored ones). It would significantly improve user experience by providing control over the number of options in the segmentation/targeting picklists.

    Even better would be an option to merge existing actions so that we wouldn't lose any behavioural after refactoring the action names.

    You Should Know

    Partially implemented now - you can view and remove (but not merge or edit) actions by going in the MCP to Settings » Modules » Actions tab.

    Vote on IdeaExchange

    MCP Hourly-based Segmentation Rules

    Currently segmentation rules in the Marketing Cloud Personalization (Interaction Studio) are based on number of days. This is very limiting for on-the-site campaign targeting.

    For example, if we would like to display an infobar or slide-in for abandoned cart basket, current segemntation can only show us users that:

    1. Do have Items in cart
    2. Didn't do any Cart Action today

    It means we can start abandoned cart Web Campaign only on the next day.

    With hourly based segmentation rules we could improve it greatly to show us users that:

    1. Do have Items in cart
    2. Didn't do any Cart Action in the last hour

    The best way to solve it would be to have additional picklist at the end of rule configuration where we can choose whether it should be day or hour based.

    Vote on IdeaExchange

    Reporting

    Direct Attribution on MCP Campaign level

    Marketing Cloud Personalization (Interaction Studio) offers a wide selection of Reports based on Activity, Results and Visits. It lacks, however, clear and detailed reporting on direct attribution from specific campaigns.

    Currently, attribution tracking is available in two places:

    1. The Main Dashboard (MCP Home Page) displays the Total Stats and Revenue Dashboard at the top. It showcases direct revenue from campaigns (The User clicks a product recommendation and purchases that specific promoted item in the selected timeframe). Unfortunately, it does not offer per campaign (and per experience) data, only a global value split between all Web Recommendations and all Email Recommendations (OTE).
    2. On the other hand, Specific Campaign Statistics display detailed statistics for each experience. Unfortunately, they don't offer direct attribution. While you can select whether the attribution should be based on click or view and what should be the attribution window, it is much more random data. View attribution means that if a user viewed a campaign and purchased anything (even wholly unrelated to the campaign recommendation) in the specified timeframe - it will be treated as revenue from that campaign. Similarly, click attribution means that if the user clicks on the campaign (for example, on a Laptop recommendation) and makes any purchase (for example, a new Monitor and cable), the whole revenue will still be attributed to the campaign. While it is acceptable for product-less campaigns (like Infobar) where direct attribution might not be possible, it's useless for meaningful analysis of recommendations conversion.

    There is no clean workaround for that problem - the Data Warehouse end of sales didn't help either. The only way right now is to append Campaign & Experience IDs to all links in the Campaigns and move the calculation to an external analytics system. That's a huge, complex work with a subpar experience of displaying reports in 3rd party solution, compared to having it directly in the system deploying those campaigns and tracking purchases - the system already calculating it for the existing total results.

    There should be an additional option on the Campaign Statistics level (on top of existing ones that are good for product-less campaigns) displaying attribution with the same logic as the Main Dashboard but with the per-experience detail.

    Vote on IdeaExchange
    - - +

    MC Personalization Ideas

    Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!

    +

    Catalog

    +

    Full MCP Category hierarchy support for ETL

    +

    Marketing Cloud Personalization can create a working hierarchy tree of categories with a clean subcategory drill-down view in catalog UI and automatic summing of the views and revenue from the lowest level category up in the hierarchy.

    +

    However, this is now possible only under multiple conditions: just one Category per product (for the attribution to work), a specific format of the category ID, and only through Sitemap.

    +

    Especially problematic is that last limitation because, in many cases, ETL is the better way to manage it - especially with the format required for that feature.

    +

    Category ETL already has a solution that provides the same level of detail to Marketing Cloud Personalization (Interaction Studio) using two out-of-the-box attributes: department and parentCategoryId.

    +

    MCP displays the hierarchy built with those fields on the specific Category page under the ID. Unfortunately, it is not replicating the drill-down hierarchy tree UI in the Category list view and does not pass the data from the bottom Category up the hierarchy.

    +

    It should change - there should be a feature parity between Sitemap and ETL for such an important feature. Especially considering that all information required for it is already available.

    +

    Read about risky workaround here.

    +Vote on IdeaExchange +

    Full MCP Catalog Export

    +

    Marketing Cloud Personalization (Interaction Studio) already supports Catalog manual export through the Export button on the Catalog listing. However, it exports products only with the limited data set available in the listing view.

    +

    The problem with the current state is that the exported file does not contain complete catalog data (like promotable and archived attributes) and cannot be used as an ETL source.

    +

    It is a huge issue because it makes it impossible to debug catalog item states outside of MCP (and doing it directly in the platform is not scalable). It also makes it impossible to batch-modify items (for example, for selective archiving or exclusion) for subsequent ETL import.

    +

    There should be an option to export the catalog in full scope, matching the ETL schema, including hidden Items that didn't yet get any action (view, cart, purchase).

    +

    Bonus points for an option to include (or not) archived Items in the export. It would be a hugely beneficial addition for debugging purposes and Item reintroduction requirements (for example after mistake in archiving).

    +

    Read about partial workaround here.

    +Vote on IdeaExchange +

    Full MCP Catalog Metadata visibility

    +

    Marketing Cloud Personalization (Interaction Studio) already supports Catalog Object custom attribute metadata view (open Item in the Catalog and hover over custom attribute value to see the details). However, it is limited only to those custom attributes if the ETL updates them.

    +

    We can slightly extend it with a custom Metadata Viewer solution to show that data also for built-in attributes. However, it is still a very limited solution due to product gaps:

    +
      +
    1. origin and lastUpdated values for Sources other than ETL (Sitemap, Mobile App, Manual update in UI, API)
    2. +
    3. Showing this information for built-in attributes in the Catalog UI
    4. +
    5. General Item createdDate and lastUpdatedDate (not attribute-specific)
    6. +
    +

    That scope of information would make debugging Catalog metadata issues significantly easier. Less work for admins/developers. Less downtime for the recommendations. Fewer support tickets for Salesforce.

    +Vote on IdeaExchange +

    Einstein Recipes

    +

    Multiple Dimensional Variations for Products in Einstein Recipes

    +

    Einstein Recipes are a powerful and flexible tool for creating recommendations, but the fourth step - Variations - is not on par with the rest of the options.

    +

    You can configure only a single Dimensional Variation. While you can choose from multiple Item Types when configuring it, once you select one, that's the end of the story. You cannot limit recommended products to, for example, only 2 per category and 2 per brand.

    +

    It heavily limits control over product recommendations, especially for e-commerce with multiple catalog objects. Currently, there is no real workaround.

    +

    At the same time, it is possible to select multiple Boosters or Exclusions of the same type and configure them differently. It would be great to select multiple Dimensional Variations with different configurations.

    +Vote on IdeaExchange +

    Department Variation for Products in Einstein Recipes

    +

    Einstein Recipes lets you configure Dimensional Variations on the Category, but unfortunately, it works only on the primary category level. There is no option to select the Department (master category) level.

    +

    It is very limiting for e-commerce with broad category trees like:

    +
      +
    • monitors (gaming, graphic, office, medical, etc.)
    • +
    • computers (laptops, ultrabooks, convertibles, desktops, all-in-ones, etc.)
    • +
    • paints (acrylic, enamel, emulsion, etc.).
    • +
    +

    With such categories, recommendations with Category Variation configured can easily still be dominated by a similar product (like 12 monitor recommendations despite the Category Variation limit set to 3 due to similar primary categories).

    +

    There are two possible solutions to this issue:

    +
      +
    1. Add Department as another option in the Item Type dropdown (as it is separate from Categories in Exclusions and Boosters) or
    2. +
    3. When the Item Type Category is selected, add a checkbox on whether Variation should happen on the primary Category or Department level.
    4. +
    +

    Currently, the only workaround is to create a separate Catalog for Departments, but that defeats the purpose of Is Department checkbox on the default Category object.

    +Vote on IdeaExchange +

    Price Reduction Ingredient in Einstein Recipes

    +

    Triggered Campaigns added a great option of targetting various events for Journey Builder sends. Among them, there are Catalog Triggers. Some of them, like Product Expiring Soon, are also available for Web with Einstein Recipes Ingredients.

    +

    However, currently, there is no Ingredient for a popular e-commerce use case - Price Reduction.

    +

    Marketing Cloud Personalization (Interaction Studio) has all the required information (the price and listPrice attributes used for the Triggered Campaign).

    +

    There is a workaround to make it possible now - calculating whether product price has been reduced externally and passing this information to a Related Catalog Object. However, there are better solutions for something that MCP is already doing out-of-the-box for another channel.

    +

    There are two possible solutions to this:

    +
      +
    1. Simple ingredient that returns all price-reduced items (similar to Trending).
    2. +
    3. Configurable ingredient with an option to select minimum price reduction percent.
    4. +
    +

    The solution can further improve it by adding a Recipe Booster on the price reduction percent.

    +Vote on IdeaExchange +

    Rating Count in Recipe's Rating Exclusion

    +

    Marketing Cloud Personalization (Interaction Studio) offers many Exclusions/Inclusions on Recipes that allow to hone the recommendations to the exact business needs. Among them there is Rating that allows to exclude/include items based on their rating (with an optional zero rating capture).

    +

    It would be great to have additional option in the same exclusion/inclusion to decide on rating count being greater than, less then or between two values. It should be easy, as the rating count is already part of the data model just like rating itself.

    +

    This would enable use cases like:

    +
      +
    1. Including only products with great rating that have at least 10 ratings.
    2. +
    3. Excluding products with bad rating if they have more than 3 ratings.
    4. +
    5. Including products user purchased that have less than 3 ratings for review-request campaign.
    6. +
    +

    Currently such filters can be applied only on the Serverside Code level in the Template, which is not perfect as it can very easily limit the 12 received recommendations to just few or even zero. Having it on recipe level would be much more powerful.

    +Vote on IdeaExchange +

    Abandoned Cart Retention setting

    +

    Marketing Cloud Personalization (Interaction Studio) captures the cart information and makes it available for Einstein Recipes recommendation generation & context object in Campaign Template Server-Side Code. Unfortunately, we can only manage the cart content through proactive actions. If a client adds something to the cart and doesn't visit it for long periods, their cart content will remain in the MCP.

    +

    Currently, a dirty workaround for that is a Web Campaign launching on the first visit in the session using the context.user object to check whether the user has a cart and its age. Depending on that, it can push clear cart action. But this could be more user and performance friendly.

    +

    The better option would be adding an option to MCP settings that would allow each business to configure (or not) the retention of the cart data so that it can be removed from the system automatically after some time.

    +Vote on IdeaExchange +

    ETL

    +

    External Email Campaign ETL Experience Name & ID

    +

    External Email Campaign ETL enables passing behavioural data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it is limited to a Campaign ID and Campaign Name. It is a problem because to benefit from that data in segmentation fully, it should also allow passing Email ID and Email Name.

    +

    The good part - only minimal work is needed, as the groundwork is already laid down. The trick is to leverage it by adding Experience ID and Experience Name columns to the ETL as fields for Email metadata.

    +

    When you check the event stream for an outcome from that ETL, you will see it described as Impression on experience Default in campaign {CAMPAIGN_NAME}. What is more, the same event will already show (empty) properties .etl_eeid (ExternalExperienceID) and .etl_een (ExternalExperienceName) that are matching filled in .etl_ecid (ExternalCampaignID) and .etl_ecn (ExternalCampaignName). Finally, the segmentation is also ready for this extension, as the External Email Campaign ETL is leveraging the same Campaign Stat Count (or Recency) segmentation as Marketing Cloud Personalization (Interaction Studio) built-in campaigns, leveraging both Campaigns and Experiences.

    +

    Currently, one has to choose whether to segment only on emails (without any connection to a specific campaign) or only campaigns (without any ties to specific emails within the campaigns). With that ETL change, we could build segments focusing either on whole Campaigns (f.e. SFMC Journeys) or only particular Emails in selected Journeys (f.e. the First email in Welcome Journey). Easy win for truly targeted Personalization!

    +Vote on IdeaExchange +

    External Email Campaign ETL Send Segmentation

    +

    External Email Campaign ETL enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, only segmentation based on Click and Open (View) is currently supported.

    +

    Two options are available in the Campaigns - Campaign Stat Count (or Recency) segmentation rule - Get sent email campaign and Qualify to view (control) - but neither works for the Send event. It renders that event type useless right now.

    +

    Enabling one of the above segmentation rules (preferably Get sent email campaign) would unlock use cases like targeting Web or Push campaigns to users who we sent an email campaign, but they never opened it. Great way to fully leverage the cross-channel and real-time nature of Personalization.

    +Vote on IdeaExchange +

    External Email Campaign ETL Unsubscription Event Type

    +

    External Email Campaign ETL enables passing Send, Click and Open data from Marketing Automation platforms (like Salesforce Marketing Cloud). However, currently, it cannot pass unsubscriptions.

    +

    Official documentation mentions this event type in the eventType column description but doesn't follow it up in the Example Values section. I also performed tests on my side and found it is impossible - Test Run in Feed returns an error: Transform error: Invalid eventType 'Unsubscribe'. Valid types are Send, Click, Open. Unsubscription could be easily segmentable as an already existing Dismissal action.

    +

    Unsubscribe should be added to unlock a wide range of targeted campaigns like surveys about unsubscription reasons, win-back campaigns or replacing email subscription prompts with other channel recommendations.

    +Vote on IdeaExchange +

    Segmentation

    +

    MCP Action Name Management

    +

    Marketing Cloud Personalization (Interaction Studio) captures actions from multiple sources to enable user segmentation and campaign targeting. Unfortunately, it does not offer any option to manage created actions, meaning everything that was pushed stays on the Dataset forever.

    +

    At the very least, there should be an option to view and remove existing Actions that are no longer needed (for example, test or refactored ones). It would significantly improve user experience by providing control over the number of options in the segmentation/targeting picklists.

    +

    Even better would be an option to merge existing actions so that we wouldn't lose any behavioural after refactoring the action names.

    +
    You Should Know

    Partially implemented now - you can view and remove (but not merge or edit) actions by going in the MCP to Settings » Modules » Actions tab.

    +Vote on IdeaExchange +

    MCP Hourly-based Segmentation Rules

    +

    Currently segmentation rules in the Marketing Cloud Personalization (Interaction Studio) are based on number of days. This is very limiting for on-the-site campaign targeting.

    +

    For example, if we would like to display an infobar or slide-in for abandoned cart basket, current segemntation can only show us users that:

    +
      +
    1. Do have Items in cart
    2. +
    3. Didn't do any Cart Action today
    4. +
    +

    It means we can start abandoned cart Web Campaign only on the next day.

    +

    With hourly based segmentation rules we could improve it greatly to show us users that:

    +
      +
    1. Do have Items in cart
    2. +
    3. Didn't do any Cart Action in the last hour
    4. +
    +

    The best way to solve it would be to have additional picklist at the end of rule configuration where we can choose whether it should be day or hour based.

    +Vote on IdeaExchange +

    Reporting

    +

    Direct Attribution on MCP Campaign level

    +

    Marketing Cloud Personalization (Interaction Studio) offers a wide selection of Reports based on Activity, Results and Visits. It lacks, however, clear and detailed reporting on direct attribution from specific campaigns.

    +

    Currently, attribution tracking is available in two places:

    +
      +
    1. The Main Dashboard (MCP Home Page) displays the Total Stats and Revenue Dashboard at the top. It showcases direct revenue from campaigns (The User clicks a product recommendation and purchases that specific promoted item in the selected timeframe). Unfortunately, it does not offer per campaign (and per experience) data, only a global value split between all Web Recommendations and all Email Recommendations (OTE).
    2. +
    3. On the other hand, Specific Campaign Statistics display detailed statistics for each experience. Unfortunately, they don't offer direct attribution. While you can select whether the attribution should be based on click or view and what should be the attribution window, it is much more random data. View attribution means that if a user viewed a campaign and purchased anything (even wholly unrelated to the campaign recommendation) in the specified timeframe - it will be treated as revenue from that campaign. Similarly, click attribution means that if the user clicks on the campaign (for example, on a Laptop recommendation) and makes any purchase (for example, a new Monitor and cable), the whole revenue will still be attributed to the campaign. While it is acceptable for product-less campaigns (like Infobar) where direct attribution might not be possible, it's useless for meaningful analysis of recommendations conversion.
    4. +
    +

    There is no clean workaround for that problem - the Data Warehouse end of sales didn't help either. The only way right now is to append Campaign & Experience IDs to all links in the Campaigns and move the calculation to an external analytics system. That's a huge, complex work with a subpar experience of displaying reports in 3rd party solution, compared to having it directly in the system deploying those campaigns and tracking purchases - the system already calculating it for the existing total results.

    +

    There should be an additional option on the Campaign Statistics level (on top of existing ones that are good for product-less campaigns) displaying attribution with the same logic as the Main Dashboard but with the per-experience detail.

    +Vote on IdeaExchange
    \ No newline at end of file diff --git a/sites/licence/index.html b/sites/licence/index.html index fc6c1a2a7..a4a0ce6f5 100644 --- a/sites/licence/index.html +++ b/sites/licence/index.html @@ -1,22 +1,34 @@ - + - -License & Attribution | Mateusz Dąbrowski + +License & Attribution | Mateusz Dąbrowski - - - + + + -
    -

    License & Attribution

    Let's talk copyrights in a human-readable way.

    Writing & Graphics

    All writing, graphics and other content on the site is my original content (unless stated otherwise), and I license it under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0. If you are looking at the repository, almost everything in the docs, sites and pages is CC BY-NC-SA 4.0 and available for re-use with attribution:

    "Article Title" ― Mateusz DąbrowskiCC BY-NC-SA 4.0

    Attribution Snippet
    <a href="https://mateuszdabrowski.pl/link-to-article/">"Article Title"</a> &mdash;
    <a href="https://mateuszdabrowski.pl/">Mateusz Dąbrowski</a> &mdash;
    <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>

    Code & Design

    Site design and its source code are adapted by me and available under the MIT license and are openly available for re-use on GitHub

    Attribution

    - - +

    License & Attribution

    Let's talk copyrights in a human-readable way.

    +

    Writing & Graphics

    +

    All writing, graphics and other content on the site is my original content (unless stated otherwise), and I license it under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0. If you are looking at the repository, almost everything in the docs, sites and pages is CC BY-NC-SA 4.0 and available for re-use with attribution:

    +
    +

    "Article Title" ― Mateusz DąbrowskiCC BY-NC-SA 4.0

    +
    +
    Attribution Snippet
    <a href="https://mateuszdabrowski.pl/link-to-article/">"Article Title"</a> &mdash;
    <a href="https://mateuszdabrowski.pl/">Mateusz Dąbrowski</a> &mdash;
    <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>
    +

    Code & Design

    +

    Site design and its source code are adapted by me and available under the MIT license and are openly available for re-use on GitHub

    +

    Attribution

    +
    \ No newline at end of file diff --git a/sites/my-toolset/index.html b/sites/my-toolset/index.html index fc3d30eab..be668a330 100644 --- a/sites/my-toolset/index.html +++ b/sites/my-toolset/index.html @@ -1,22 +1,75 @@ - + - -Toolset | Mateusz Dąbrowski + +Toolset | Mateusz Dąbrowski - - - + + + -
    -

    Toolset

    Show me your tools, and I will tell you who you are. Or so they say.

    Operating System

    MacOS and Windows if needed (sorry Ubuntu, it wasn't working for me anymore).

    Browser

    Safari for non-development, Firefox Developer Edition and Chrome for everything code related.

    Text Editor

    For all my development and writing, I'm using Microsoft Visual Studio Code. I tested about a dozen various editors, and this one feels like the most polished and universal solutions for Marketing Automation Developers. It's blazing fast, powerful and extendable — great out-of-the-box, awesome once you configured for your own needs. I'm using it not only for standard coding (HTML, CSS, JavaScript, SSJS, AMPScript, MJML) but also for writing Markdown (including this site), working with JSON, manipulating CSV files and RegExing.

    A lot of VSCode powers comes from a fantastic extension repository, and some require a sincere recommendation (in alphabetical order):

    • Color Highlight: Simple tools that add appropriate background to any colour code. Excellent for anything front-end.
    • ESLint: If you write JavaScript, you use ESLint. Period.
    • Image Preview: Another handy and straightforward solution. It shows miniatures of the image next to the import in the code.
    • Live Server: There are many tools to see hot reloading version of the page you are coding. This one is the simplest.
    • Material Theme: It's a beautiful looking theme.
    • MJML and mjml-syntax: Must have extensions if you want to write mobile-first emails with MJML in VSCode.
    • MCFS (AMPScript): Worth already for syntax suggestions and highlighting, but there are also more fun features if you dare to connect it to SFMC.
    • Path Intellisense: Autocompletes paths. Yay!
    • Rainbow CSV: Shows columns in pure CSV. Happy magic.
    • TabNine: If you ever dreamt about the code that writes itself, this is the extension you want. Creepy. Awesome. But creepy. Must have.
    • Todo Tree: The best way to work with TODO logging in code.
    • vscode-icons: Those are nice looking icons.
    • HTML End Tag Labels: Adds HTML tag details on closing tags to make it easier to find yourself in the nested jungle.

    Finally, it is not an extension, but a must-have for me: Fira Code font. Check it out. You will love it.

    If you are interested in my configuration, you can find dotfiles on the Github Repository.

    Terminal

    95% of the time I'm using the terminal integrated into VSCode. 5% of the time it is iTerm (on Mac) or Powershell (on Windows).

    Windows setup with Powershell both as standalone and in the VSCode is quite out-of-the-box with just some useful aliases.

    My Mac is a bit more customized. For starters, instead of bash, I'm using zsh with oh-my-zsh and Homebrew. I also have a lot of aliases to speed up my work (you can check them in Github Repo).

    Diagrams

    For work - Lucidchart. I need visuals for mapping out architectures, processes and stories. Lucidchart makes it fast and easy.

    Privately - Mermaid. Lets me create diagrams with code and output them to a website in non-image format for better performance. You can find it in multiple articles, like MMC Integration Patterns

    API Client

    Postman. It is simple, and it works.

    Design

    I'm not a graphic designer. I need something that is simple, fast and can output images for emails, landing pages and presentations. With such needs, there is nothing better than Sketch.

    Productivity

    Apart from the above main areas, I also love some smaller apps that make my life better (unfortunately, all but the last one are Mac only):

    1. Numi - the best calculator app you can have. By far.
    2. Better Touch Tool not only allows you to leverage gestures to their fullest but also takes care of windows snapping to the edges.
    3. Mailplane - if you use Gmail and have a Mac, this app is a must.
    4. PDF Expert is the best PDF app you can have.
    5. Cleanshot makes capturing, annotating and sharing screenshots a breeze.
    6. Reeder - RSS is my favourite way of keeping up to speed with topics that are important to me. Reeder does it best.
    7. For tasks and notes, after testing multiple options, I stuck with Apple Notes and Reminders.

    For Windows, there is one must-have power user tool: Microsoft PowerToys. Make your day-to-day Windows life better.

    Web Tools

    There are many website tools that make my life so much easier.

    1. Regex101 is a one-stop-shop for writing and testing your regular expressions.
    2. Can I Use? is perfect for checking whether a frontend feature is supported wide enough for you to use it on your website or Cloud Page.
    3. Can I Email? does the same as the previous tool, but in the everchanging yet still always behind email world.
    4. Built With provides a sneak peak into what created a website. Starting discovery for Marketing Cloud Personalization? This is your first step.
    5. Placehold is the best solution for adding placeholder images to your design. Just adapt the URL to get exactly what you need.
    - - +

    Toolset

    Show me your tools, and I will tell you who you are. Or so they say.

    +

    Operating System

    +

    MacOS and Windows if needed (sorry Ubuntu, it wasn't working for me anymore).

    +

    Browser

    +

    Safari for non-development, Firefox Developer Edition and Chrome for everything code related.

    +

    Text Editor

    +

    For all my development and writing, I'm using Microsoft Visual Studio Code. I tested about a dozen various editors, and this one feels like the most polished and universal solutions for Marketing Automation Developers. It's blazing fast, powerful and extendable — great out-of-the-box, awesome once you configured for your own needs. I'm using it not only for standard coding (HTML, CSS, JavaScript, SSJS, AMPScript, MJML) but also for writing Markdown (including this site), working with JSON, manipulating CSV files and RegExing.

    +

    A lot of VSCode powers comes from a fantastic extension repository, and some require a sincere recommendation (in alphabetical order):

    +
      +
    • Color Highlight: Simple tools that add appropriate background to any colour code. Excellent for anything front-end.
    • +
    • ESLint: If you write JavaScript, you use ESLint. Period.
    • +
    • Image Preview: Another handy and straightforward solution. It shows miniatures of the image next to the import in the code.
    • +
    • Live Server: There are many tools to see hot reloading version of the page you are coding. This one is the simplest.
    • +
    • Material Theme: It's a beautiful looking theme.
    • +
    • MJML and mjml-syntax: Must have extensions if you want to write mobile-first emails with MJML in VSCode.
    • +
    • MCFS (AMPScript): Worth already for syntax suggestions and highlighting, but there are also more fun features if you dare to connect it to SFMC.
    • +
    • Path Intellisense: Autocompletes paths. Yay!
    • +
    • Rainbow CSV: Shows columns in pure CSV. Happy magic.
    • +
    • TabNine: If you ever dreamt about the code that writes itself, this is the extension you want. Creepy. Awesome. But creepy. Must have.
    • +
    • Todo Tree: The best way to work with TODO logging in code.
    • +
    • vscode-icons: Those are nice looking icons.
    • +
    • HTML End Tag Labels: Adds HTML tag details on closing tags to make it easier to find yourself in the nested jungle.
    • +
    +

    Finally, it is not an extension, but a must-have for me: Fira Code font. Check it out. You will love it.

    +

    If you are interested in my configuration, you can find dotfiles on the Github Repository.

    +

    Terminal

    +

    95% of the time I'm using the terminal integrated into VSCode. 5% of the time it is iTerm (on Mac) or Powershell (on Windows).

    +

    Windows setup with Powershell both as standalone and in the VSCode is quite out-of-the-box with just some useful aliases.

    +

    My Mac is a bit more customized. For starters, instead of bash, I'm using zsh with oh-my-zsh and Homebrew. I also have a lot of aliases to speed up my work (you can check them in Github Repo).

    +

    Diagrams

    +

    For work - Lucidchart. I need visuals for mapping out architectures, processes and stories. Lucidchart makes it fast and easy.

    +

    Privately - Mermaid. Lets me create diagrams with code and output them to a website in non-image format for better performance. You can find it in multiple articles, like MMC Integration Patterns

    +

    API Client

    +

    Postman. It is simple, and it works.

    +

    Design

    +

    I'm not a graphic designer. I need something that is simple, fast and can output images for emails, landing pages and presentations. With such needs, there is nothing better than Sketch.

    +

    Productivity

    +

    Apart from the above main areas, I also love some smaller apps that make my life better (unfortunately, all but the last one are Mac only):

    +
      +
    1. Numi - the best calculator app you can have. By far.
    2. +
    3. Better Touch Tool not only allows you to leverage gestures to their fullest but also takes care of windows snapping to the edges.
    4. +
    5. Mailplane - if you use Gmail and have a Mac, this app is a must.
    6. +
    7. PDF Expert is the best PDF app you can have.
    8. +
    9. Cleanshot makes capturing, annotating and sharing screenshots a breeze.
    10. +
    11. Reeder - RSS is my favourite way of keeping up to speed with topics that are important to me. Reeder does it best.
    12. +
    13. For tasks and notes, after testing multiple options, I stuck with Apple Notes and Reminders.
    14. +
    +

    For Windows, there is one must-have power user tool: Microsoft PowerToys. Make your day-to-day Windows life better.

    +

    Web Tools

    +

    There are many website tools that make my life so much easier.

    +
      +
    1. Regex101 is a one-stop-shop for writing and testing your regular expressions.
    2. +
    3. Can I Use? is perfect for checking whether a frontend feature is supported wide enough for you to use it on your website or Cloud Page.
    4. +
    5. Can I Email? does the same as the previous tool, but in the everchanging yet still always behind email world.
    6. +
    7. Built With provides a sneak peak into what created a website. Starting discovery for Marketing Cloud Personalization? This is your first step.
    8. +
    9. Placehold is the best solution for adding placeholder images to your design. Just adapt the URL to get exactly what you need.
    10. +
    \ No newline at end of file diff --git a/sites/newsletter/index.html b/sites/newsletter/index.html index d9950e8ee..3ea5d007f 100644 --- a/sites/newsletter/index.html +++ b/sites/newsletter/index.html @@ -1,22 +1,30 @@ - + - -Newsletter | Mateusz Dąbrowski + +Newsletter | Mateusz Dąbrowski - - - + + + -
    -

    Newsletter

    Get yet another email in your inbox. This time, about SFMC.

    Looking for a Salesforce Marketing Cloud-focused newsletter lacking any specific cadence and jumping from one topic to another?

    You are in the right place!

    I plan to send short emails about:

    • New content on my site.
    • Interesting articles and videos by other Trailblazers.
    • Exciting news from the SFMC world.
    • Some random marketing-related stuff I find worthwhile.

    Sounds good? Here you can join the list:

    - - +

    Newsletter

    Get yet another email in your inbox. This time, about SFMC.

    +

    Looking for a Salesforce Marketing Cloud-focused newsletter lacking any specific cadence and jumping from one topic to another?

    +

    You are in the right place!

    +

    I plan to send short emails about:

    +
      +
    • New content on my site.
    • +
    • Interesting articles and videos by other Trailblazers.
    • +
    • Exciting news from the SFMC world.
    • +
    • Some random marketing-related stuff I find worthwhile.
    • +
    +

    Sounds good? Here you can join the list:

    +
    \ No newline at end of file diff --git a/sites/privacy/index.html b/sites/privacy/index.html index 1da27605d..c048b19f8 100644 --- a/sites/privacy/index.html +++ b/sites/privacy/index.html @@ -1,22 +1,37 @@ - + - -Privacy | Mateusz Dąbrowski + +Privacy | Mateusz Dąbrowski - - - + + + -
    -

    Privacy

    Legal stuff. Short and simple.

    TL;DR

    I do not collect your personal data and do not share any information with third parties except for non-personally identifiable, aggregated data used by Google Analytics Solutions and Cloudflare.

    Cookies

    Cookies are a small text file that is placed on your computer by websites that you visit. They are widely used to make websites work and provide analytical data to the owner of the site. I'm using cookies from two different sources: Google Analytics Solutions and Cloudflare.

    Check yourself

    You can check what cookies are in use on any page and what are their values by going to Developer Tools in your browser, navigating to Console tab, writing document.cookies and confirming with Enter. Many browsers also have a more detailed view in the Developer Tools. For example, Safari will show you more information about Cookies in the Storage tab.

    Google Analytics

    Google Analytics is a web analytics service that tracks and reports website traffic.

    Cookie NameExpirationPurpose
    _ga2 yearsThis cookie uses a random number and a timestamp combination to create a unique and anonymous identifier of each visitor
    _gid24 hoursThis cookie works just like the one above but is focused on mapping visitor behaviour on the website
    _gat1 minuteThis cookie throttles request rate to Google Analytics server

    To further protect your privacy, I am not sharing visitor IP with Google Analytics and have Google Advertising Features switched off.

    Cloudflare

    Cloudflare is service providing security and protection for websites.

    Cookie NameExpirationPurpose
    _cfduid11 daysThis cookie collects anonymised (one-way hashed) visitor IP addresses to detect malicious ones and minimise blocking legitimate users.
    _cf_bm30 minutesThis cookie detects behaviour anomalies to identify and mitigate automated bad bot traffic

    Data processing

    I only collect general information such as pages visited, time spent on pages, heat-map of activity on the site, information about the browser, country where you are located, etc. The data collected is used in the aggregated form to improve this website and spot trends without possibility to identify individuals.

    Anonymised information mentioned above is aggregated and stored in a central database provided by Google Analytics Solutions. It is erased on a regular, rolling basis (after 26 months of inactivity).

    Additionally, if you want to stop even this level of processing, most web browsers allow control over most cookies through the browser settings. You may delete the cookies or let them expire. You can also opt-out Google tracking across all websites by downloading the Google Analytics opt-out browser add-on. If you have any additional questions regarding data processing on this website, feel free to send me an email.

    Changes

    I may occasionally update this Privacy Policy to add information about new tools used on the website that may have access to aggregated data.

    - - +

    Privacy

    Legal stuff. Short and simple.

    +

    TL;DR

    +

    I do not collect your personal data and do not share any information with third parties except for non-personally identifiable, aggregated data used by Google Analytics Solutions and Cloudflare.

    +

    Cookies

    +

    Cookies are a small text file that is placed on your computer by websites that you visit. They are widely used to make websites work and provide analytical data to the owner of the site. I'm using cookies from two different sources: Google Analytics Solutions and Cloudflare.

    +
    Check yourself

    You can check what cookies are in use on any page and what are their values by going to Developer Tools in your browser, navigating to Console tab, writing document.cookies and confirming with Enter. Many browsers also have a more detailed view in the Developer Tools. For example, Safari will show you more information about Cookies in the Storage tab.

    +

    Google Analytics

    +

    Google Analytics is a web analytics service that tracks and reports website traffic.

    +
    Cookie NameExpirationPurpose
    _ga2 yearsThis cookie uses a random number and a timestamp combination to create a unique and anonymous identifier of each visitor
    _gid24 hoursThis cookie works just like the one above but is focused on mapping visitor behaviour on the website
    _gat1 minuteThis cookie throttles request rate to Google Analytics server
    +

    To further protect your privacy, I am not sharing visitor IP with Google Analytics and have Google Advertising Features switched off.

    +

    Cloudflare

    +

    Cloudflare is service providing security and protection for websites.

    +
    Cookie NameExpirationPurpose
    _cfduid11 daysThis cookie collects anonymised (one-way hashed) visitor IP addresses to detect malicious ones and minimise blocking legitimate users.
    _cf_bm30 minutesThis cookie detects behaviour anomalies to identify and mitigate automated bad bot traffic
    +

    Data processing

    +

    I only collect general information such as pages visited, time spent on pages, heat-map of activity on the site, information about the browser, country where you are located, etc. The data collected is used in the aggregated form to improve this website and spot trends without possibility to identify individuals.

    +

    Anonymised information mentioned above is aggregated and stored in a central database provided by Google Analytics Solutions. It is erased on a regular, rolling basis (after 26 months of inactivity).

    +

    Additionally, if you want to stop even this level of processing, most web browsers allow control over most cookies through the browser settings. You may delete the cookies or let them expire. You can also opt-out Google tracking across all websites by downloading the Google Analytics opt-out browser add-on. If you have any additional questions regarding data processing on this website, feel free to send me an e‑mail.

    +

    Changes

    +

    I may occasionally update this Privacy Policy to add information about new tools used on the website that may have access to aggregated data.

    \ No newline at end of file diff --git a/sites/tags/best-practice/index.html b/sites/tags/best-practice/index.html index 738dbbe2c..9c90877f2 100644 --- a/sites/tags/best-practice/index.html +++ b/sites/tags/best-practice/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Best Practice" | Mateusz Dąbrowski + +One doc tagged with "Best Practice" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/tags/faq/index.html b/sites/tags/faq/index.html index a7cb42f0c..b7a6e3efa 100644 --- a/sites/tags/faq/index.html +++ b/sites/tags/faq/index.html @@ -1,22 +1,19 @@ - + - -2 docs tagged with "FAQ" | Mateusz Dąbrowski + +2 docs tagged with "FAQ" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/tags/index.html b/sites/tags/index.html index e09f9fef1..bba3f4bd4 100644 --- a/sites/tags/index.html +++ b/sites/tags/index.html @@ -1,22 +1,19 @@ - + - -Tags | Mateusz Dąbrowski + +Tags | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/tags/interaction-studio/index.html b/sites/tags/interaction-studio/index.html index 64e5f62c9..1555e480b 100644 --- a/sites/tags/interaction-studio/index.html +++ b/sites/tags/interaction-studio/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Interaction Studio" | Mateusz Dąbrowski + +One doc tagged with "Interaction Studio" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/tags/marketing-cloud-personalization/index.html b/sites/tags/marketing-cloud-personalization/index.html index cdbcda6c8..1f2171928 100644 --- a/sites/tags/marketing-cloud-personalization/index.html +++ b/sites/tags/marketing-cloud-personalization/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Marketing Cloud Personalization" | Mateusz Dąbrowski + +One doc tagged with "Marketing Cloud Personalization" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file diff --git a/sites/tags/marketing-cloud/index.html b/sites/tags/marketing-cloud/index.html index 6b56d6dbc..15db646d5 100644 --- a/sites/tags/marketing-cloud/index.html +++ b/sites/tags/marketing-cloud/index.html @@ -1,22 +1,19 @@ - + - -5 docs tagged with "Marketing Cloud" | Mateusz Dąbrowski + +5 docs tagged with "Marketing Cloud" | Mateusz Dąbrowski - - - + + + -
    -

    5 docs tagged with "Marketing Cloud"

    View All Tags

    Marketing Cloud Ideas

    Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!

    MC Personalization Ideas

    Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!

    Newsletter

    Get yet another email in your inbox. This time, about SFMC.

    - - +

    5 docs tagged with "Marketing Cloud"

    View All Tags

    Marketing Cloud Ideas

    Here you can find all my Salesforce Marketing Cloud IdeaExchange contributions. Let's make the change!

    MC Personalization Ideas

    Here you can find all my Marketing Cloud Personalisation (Interaction Studio) IdeaExchange contributions. Let's make the change!

    Newsletter

    Get yet another email in your inbox. This time, about SFMC.

    \ No newline at end of file diff --git a/sites/tags/personalization/index.html b/sites/tags/personalization/index.html index 501e8ec7f..735598789 100644 --- a/sites/tags/personalization/index.html +++ b/sites/tags/personalization/index.html @@ -1,22 +1,19 @@ - + - -One doc tagged with "Personalization" | Mateusz Dąbrowski + +One doc tagged with "Personalization" | Mateusz Dąbrowski - - - + + + - - - + \ No newline at end of file

    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 diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png b/assets/ideal-img/article-image-sql-join-inner-left-join.c789f84.640.png deleted file mode 100644 index 3e3211dff4dcdc8358f40ededf34574a7606a179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79529 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%0Dbv$Cde9`XX)^KPf z5sS@=Yseuyo7yb>!Forp^lbbd9WhQ8|l$wzATB*P57e`5(;_HRJGKH|1g z_Md-G%B2MsZ%1!0ZuPvIDOcVBFA;0@KR5ctp!|OPn$&$ke#0(u1lZPl+<9sP#tJg_J}{q-jrzcDJ(K`Ym+#Y z9s|X^+FHm?qqk#c!)>k}s! z_(oJcWKlQz(f633OV=(yLe_cKkIfh zUsdb2(zFZ#2AwQU7y81-7}|VKzOA)|Oj-u))^;EdT{zEd8@R;=aHqH1Oss%5)$NyY zYpvdcf>scl|7!VQbP+43YeBBFdjd^fb05v>8dhle-`iPS(Jrn|2`8s&;1HebGtA_qYK=W-Z5azgdhTr8|M2 zn8DAt*n=*2JT-7AW5fR&Z%-feM&R-wRNqtiK&R$U8%^vO|oU8}dlN_$mnlSj9#S-aDZ zYagM;7v&~PSpvCkllg1DJLex{fQK0tt-(u{5bwdK9hY%(0hb>&9%$~jmh68pRb4N; zR4;E2Rxe_BGpcME@4X6Uxxl~h(=|u4rcd>AF7xmGZbZ#moNC8&JE!)1C+d@uTIc8Q zxpcoSy&QFD^m{j$*E+xSVscODol`umP;I{bsN2b(>n67q-<8ggPG%XQ2I<6La>InXCT-W)I4GD=i5=bwJcl_}}{_Dgbk zM}x{0!+RMUn7Mquel#!KvGnczaz$}v?|YfOrHWS4iVp7|c{j)my)H7=LW7beZ=#6R*uZ| zD{cpAoK2tB-mf&en0N`(37XerTLup2%LeGfJ4|FoPRMZ{FkIU5QoZBJ)DM*=w>voX zxzM|osrP0pt{-(OJ6w8Hb63OcP|xy^Ytxa%=LENOlIPpy?c{x&C(}gm2P{0-08nx2Ov$q z2Dr5I?9#b(YZ=78Ro0h}W(iq+$dzz!LKDJQhSRxE4(H0@oA>DO8^bEH|6=TmpXQ9i z`!{DBx)O9NqdQ%D`l)DT2c7TGzTB~bQ5>1Ws#UQ!hIm@C*t%%RC_JAt;`J?~TF>|q*tIJb6r zWv!`OWs}pEvROx9rrQQY;8rl09s&RxpZ>o_OEv+^YA^u=3AiJ2D^1%bXoXB|PU;;? zYGb&y^JV)Ff6Xn!1_E7jMAjUdUzjNT`~_>(i`#I z{7~2C)_Swbj>e^Lj@r!w(SfhrJS|3xDWjI#+J^Vt6tfet1yH&&WSl(+_)?3=rMm&VxO*HT|Bm7AANqK><>)|&v( z&Br6t=C%1#S=U@RxIv)9(RF1jzUgX_X2tt5`b6d`jae#WGEhjqW?hT?!@M_ z_&3Xa)t)q~vT^Aui$h-+Q>9GjE7s%Rjahqp84cD1HnRhdd=Yxp7M-3QcA@Xwczidi zA;>a|cK>P2+JQR;Jk+SaIXS6!3!F{J$Wx;I_T;Fdyl~FgXR=w~D9iM$>e?4MMAnA* z_o>Y{5WMy>q{|ZGv-s3p#zFVf_nHMOd3)cRgryEKhnvZ7a&T-k7qkbgQp$Sx04v7yR4Az@5%;43b2NncwC@^?fNA;{@yn9-?SQ4PI^(E7g6H2vPIgo4YgkZ{`+$x z2V5b`Ym@1s+Qf3dj5N9P@41%GPig7F()Iu9-*aE@=XzFZ)^yZg-n2c$xe^G?bCdTN zkvNwAB;>l}5^wCPPE5e{O)i6qY{M5!4%R@g4uT(&=t>8GwLv!-oA| zl}1ispxMgin;N&pnrV#peq?6$c75#~KQ}+m^~TuBB$tcu51rrgz>Bq}kh}LX0ZzFV zQjnFZyk!^3N#>et!KZaWCdtcul2#21o5X%hx}oGG zY+g=k(FL6hETMgOcPwQ>g0nmPJ>pN6>Xzp#&C@7}Pb$SKnjFe>@`R^<&CQvPjv435 zG|y)F-Yo8on;k=^ZDUEvf9c|c{ZQo~!08Q_Wq-Xyr-j9{|I&X`apYKX(n*tHH9GpW z%hxv&o#PIZRyJDmuC<@rl9o@?7f!lbWpKOiLvcIdWz4O}k4PEmlhNdLpH;fMaFnFg z&CJ=Ar7km}2DJ0_%Z*IQbP{vjSiGbInSG0uAY_)?YEaLg1x(C}&oZ4IgZr@9#U1_9 zsXush-Q;tSX6W^`uJ7iwgHua({Sjy#{np~*a#X0qG^5h2`Il&jgT>+D;Y>w{mUrRj zap%U*e6%aw7Ds7fAwE~Hg1qi_a=Sq!usdd{Gq2_6T?*fsB!!X|NY(Nm0rpWS6b|_FDY&S?e+uF))}z(ub)_;8BbriaAgFD3!8q=P>Rl z-ZBRxaLJ!`s&{-*!hn`DGb!!^exq(#+n-Hm$vy*R3{p)1n01G^XjUU5(ugplSUdeu z37LES_gu>w`*;~QW0&+7k}ohZHQMmU@}hWemVntOLNX?G^PI?cz6WFe*->3X|8e(h zN^B~xmY8-ef_%?v^YcHse9Heo#r^-#^c8+lcF)@^OLw<)w{$m1m(n36-QBWucS$TQ z^3dJ5EJ#R$Al=d>o%-H>-_MUfU^(}hb7rpVnmIG-4a;4DPNxS=$dXPcQ5r!mV-S8e z@W*oL0|VGb&~MB4`hU0clSO}e9Q)Ai45D5gNgJ?*PyehNcOIB$Y5O}q)^<7_VA6XN z#%0_n#r5`!n{yL7;d+*>FbR*jjd+_|JMhkNcakyXL)m-Ij;IrDrFM@UrQ?$m)iH!G zh{dK~?L2Z^Hag&%x2}!(`?$;1JVhsdyZajyC%7W#m#^+E%tQ8hypt+NW$DrGpv-h` ztK!yvJTz@y!@i5_F4ZpcO;JMaW%G`?g1G{sdL%W*o$RNU2%r%T4yv)Hf7trhBER$d zJYEt1Y5jU*hi2Q>3idEILBR!y>VdB8nuZU@exDg7`2XCmmTCQteDm^W5%mc<_+I;W zB<44NcyBP&{UHnTUu4Ao`ATwGj`P|iL!0-_UQ3Hd;FWs5h=Y}J+rs?3L%xu!x)kBY zr*DQ@jHHg@1qauk_}fCBe1Yfdjq}0+%iZgO{dsv5&cB~U+Z=L7N$mdHc)$S^0^WW_nGK=Mi$jvHiyY-RYpMPeO23tw zNuUwDt#KY(?$WH48VOemfE5>kJG?PlWc_V(Uq80zHqWdtSTt*N;_yWE_|nMtb#Dnb z^62oLTNC9z&f-h;o3{^tWR(7{e@f*4=)3>YV{R0lstk*04!QF^uaWHXSap3bVPlta z*1+YIvsCkmzsC0HUA|OE*MwtH;jNa4$7Q)B_vZ6IQdv_nT@DHYH>7Qx+!~FdXnqo# zr^q*XD_7X`TsU0+`4{9OA``9SSp<2>I*aAr=9}#ANRE`b-u{ob1zir}$)+uWD>%mc z+rRWpHga!utmHnJ@2|G35)_H)SL1lCJPc7fyxmv}y8ZksVuFjmwy%y`FIGGJqx-&C zcVOWAJO?c)y|}RUi%8*!i^d^B6n4r-LS)W};D<}g?qJUpz-62=})mHweN4uX>*B{1FRZoX(>5C-@XlLb0 zVOf;726C&N!HYPj=5Av--bO(tUdAjc+xAPBzrf9kTPI)$%n(ILUC&xVG!~XJ>mY<} z8}T(O|L!w-guJLkKg-52zt+KNz0^tfT_1aFZOo*}-4U0=+`u8f@vJ%WgoXytGhk@f z>363!wmYTBWZhc#oa^5VW(`eZkQp!*qKUtzFl{9y?%V*5@Y&DH~ zYk)#j=&xl2EGz%ETsN?Qn)0QwP3!n!-FVjTE4z8X7{2>+mGSoMz&qU$Cm__lUKXp^Mi!b#M&oG<1h}>*>*%J`hN3-Ihx^+=28UH)OPOk#KOEFk6v1njg{hE zcuNTnCF)nr?NtMC;!J$l))smtia)%Xr%*M6)48w5rhoN1l3Pf?w8LFz`GU;V+))A% zA_wsGV%Dai$jh()+JNj$9IKCpRkhB|QvBP?Whmj#42C&sP%kOJ^^W2bD--d zbkQZntZl0rrLIAF$UCvl-(3m5);=jE2XcX0#F89Zh^*F@-v zNU{K7X0tiPZHvR+$>up$NpZKnnvW*uYV)4AT?x4M{4aMd`R{$tCi=I|@W(en95B+w z>C{2hjdZY3-Oi!1h67kWxOt<&wcH=^z6S! zp7LVS_xFzOQRxzvv?><|a;g-o-JXMies0QI&fzSnj0Y!qIURw%TH(rgNUHyO&ZKKn zqYiv#$*dF9aBBftfGpRDUO6vyy*l)ee1}wy9md_Lv+2+EK)If?QA8^#RrT=@q!ONG za%(c&^R4P6oe?ypWb3;LG&4aSc4pn2s`B$ilM23X;4<%F%xY}R=N=84i)pJU47*{a zF=tPrJS+~X>3zq%)UJcy{i>){_zbFY%-LRNV(YbR;<8VQoNWVda9D~?L+;(ZkP(C-Wi`gF%Z{_VO0_;bM=b+ELW>c{!{cY&!(i#wRoC5@ zbHjk%B|9x?V#u)I`C8X9iLcKhfcw)WoL4*8Jno&FSpDT_aRDikNPwsYypzUeR_OJ1 z)WF3|z9>W5U+6>q9G2hT$FKg_S~Lwa1jJ-`Ri`mLZ_Z`C}XGx09H!C5)Dzqr3G zMZzZXg`Fqz1ck~vmzXv3GKB_2oBYapgAcWfGCsOKd{dV z<0Q_@ezUeyCRP9we@ooo<#T-UcykQSpTb&Lv}^veKUJhP52``6*$BI-&R(p&>J4dL zdZFB54SI$1M>GqcPkj2T!_I)yu*-%o^lHr+7-iks)^_`D#slb6viceukP-UfD+JD1 zZJ$H*O`0S%`0Xm*U|cR*vaioVK`)e8!=CVc81Z8OqDt<-%adS(-^?>q@X%va;w73L zF*vYo*`3$3c%xr*liEFX*}(^3N=}jqVyE!mYqyVTl_)~wIM9pdbXu^M*ulO%r<%>- z(DS5kb!}~9^w444&cIC!pAHcj4d9cA8OZPYq-Xz1pu`wi-r{_zt!+k@taiDA%z?X+ zo{}K+PtxII*pEe?2)~y@cf+}iT4yLI>s*6nxmWhvr{jrZH3!o$YMgfA=pT)W3sXAAkvXoN{EfJQYw@h#=$n>Zi0 z)%xyF7FG_46nvz``;yDDN%I(jB=lir!9}RKLUaOS>eJUBfL>5Qu;AcUvWZ?6!(tkk zd+V_X=moWl9b?AJVt~>VC-iY$0%+osDp}=Tly`FHo&-o`&X<{04n|vTHypDJv0LcA zcg`1)GlPVN>Hg<6W@3#i3-zXX1R`^v=a-HIoe1vkb|@uEy6}Mp$qM?1fH2@Hxwhso zN05zqU9*<`eWqnn@)nD%7HRVgMs_M1FsJXbz*px!$s&ecjdt7E&+3i~iXi}eQlT{*SMhU;HS|r{Ug@|(f z&K1o^x+DT-j5?wQ1r-I3o3TL={MG66R~ntmTLZdYEjRa{RmMd$-wwU-_Y*2zp$sR^ z^zu89AJlPG*EIHV>!I+Rp0xojoU(QkA-_|UvEFg4`wwuN_t=aD20CAs#|iaz3TAgwy+}c3r zTzMFi{}0-ff`XM9$KgAdqm_GZE|-K4QPxo`7u-6jm zZ2wD<5Yw6{1)nYp9v_>u*lHg5IEgx#>eOH4iHLXl5*-XK^C-2g2B2hUt*A{fhE^ zgF~yt(3f>UdjFd(iDqRB9B@~gQv@NafybMW6sEeW)-yp9=evZTC_=B2RpGD4iMdys z3vE>t+bD^Mg>e{Ehbx`Bf z^x`f$8xT`_BzpqjIOprB>@xn_M8rsg80$hvT3>J!tSkx!IIaM=>@smQuP+XWslt;D z|G*|TGCJcYhtIpt<%Rk^(L=wl7L|vx{{B3da@62zp3T7O%HeMO*T4%9XXhsS0eIO~ zfw{MQ!~gUo)OyVG2A4%TwBRr03qKgQj=FWiDQLE=?C6N{Ut6-<@{ff7xj#Z=Zs5n# zlyjDp6vxMJ<9?SCAG@57=7;2O=&FzfVI@@$Q^)^x5%*rVoiMW(6l?{E-Urm%)8>KR zUWW~OAra`>f^#LVo7OWe6Vl@yIfVlaX+7OG`pfhAXf2_y{av7w>yZgxOW+Mfx8L2F z$%%r+GeE<4h_oc-_O=GDoh|wPW+J9PY<#?(gel23I$iktKHt^m*u8omYVXu`*4`D( zoGE^;B2hEu|xSJuM{o z`Yu%@kZxGX1Ht<~^5<`$(V4MBvA(9}W41knjGjNSov- z37e{wZn5ViR~4~J+;=M!ZM`q1GJ2pWxk*uc(HKN+(UMfK3LY&V*`3LT0V_r^V|+P+ zDZ<8*Q=uYqD$-f6&z^1THX>czk9mUHfB(s800dkUWgD1mXOZuuPF|7<2xsGYdRPbDqH9 zP!UAgAHwah@t=h3+D7RKORxRz6~cm12JzAMP~AQFVv~ndzr0f&%vZngmwf*eN{5GL zLMR-X+-uG=&PxFi@ zngCl1+UmXwrT$~~G~I43e1a<(eIg%2m!L-{$w4f?{%ZiKZ78<~rR{Itz>-v``)<2% zzjOS4bU7Cnmq2s}wk+_8^iO~OfDALz?_G^-$$rcW6YKxU(XcINW{kgK2^JEXo|jG< zgewK(eSqs^5m)$3xZl4tJUt(H22G#-=8i$d`G{af%@aSyQLO8PPg5Dw+>2tcB=P9% zuTk=2P@xfo*zesDVc|K_Kf(G71KIQHl2?$}+)a5K0n*^pczGo*3QTM4k#JSYFGx!e zI$vzsz^i3hKND5;|FA`0Fo5~R`3NFJhyR$tqI32A_+sq|A<*vxCjoSK@}BtQEAsjJ zSlP`dQp?9@v`iFmp5s`D(JK=@58cadJ7E{2H-Jdu16Y++N8`ojiTwawR6CigD>Nb5&+s$@QRo&iKN z2UYWH5hlp&ES9!`ewF&#Kg5*Q{`5%JF_8JLjCEXNc(=iN$vIXXT~UnKLIt|99*gvr z>IVh(366N3dGBM^9S%fhanU&>Wq}k(dwnBhoN9g}%l5&Ih!qq_f#2((vqbo-BEB8jA4Etq(KG6w;DNl!z?$ zWlp=;6hcWp6%`WSG+UcGO5B5D**cPR{tCVTMhBbVaY%cQ3$QMI??STDF`gUJ`#S=V zL*zl);GdpWIi{=OcUt5gx<&Cv`jn<)*5K-Hq&}&|pAE@~-O^!mtv=dL-m&}#n}`4H zN73__mJoseL4!%2bx|o1O1bcwKo~@>Pk7>GR*6(nq>uJfmvS2~gU| z=xJKia=1%6tI!)8J#z^%9&ncRj!~Id7~*e8km$?6KFM?i@l*XJ86FM0*#kq}NQmu> zXsfI^4evkQ$(Z;Fr_asO=8Wm+XC^IqXyqc=x5(7=4mF2d+zG&iTqo=QuNI*Ar)>57 zRp)M&i540Xd~e|U6zkLYWtO#=FQa>1=kQLf(#W*M`dt_aI5V zxr4CaFE_@J-fys@tTGzjh1s2hc6;wYHqMcPJcJn$w>;w5!k`?T8aF6R=v~88$mja} zdRX?D^~{eSgHD-Q=k)Le5MWFsj`{Yhj0|NhwVh~>2jZKt%AqZ8&}dw&RfG~M$tH!F zjJ_V}9f3%lhLWPSxGBWsoS@^A3~U_zv=8AsyO!5EC}Re1-IP}vHVQ=wKP_^<2y9V{;xelZR1Z8ht6et`zowe1heN9!#o3%NK~Z*qY*pD35-DX^fL7#3JyMBzxVPi6a>> z(+Tmv4dF{&5j5Or$mW>G`6VCW<(S86R#MhkY$ksTtH<1v+{8kfnRUQ)<4)z6Ue}(~ zO0RG9?N{MrCW^ZLMESaVe{zz7)rwfTg>ma-srh|?G(H-VL&K%lh*bUpW19;z32~Cp zy3!;LE?jAF@aM`S1!oXWqfT1jZg&0EDS!2c z>@@|~QMKB=J;=oG4Jx`7(m9_g8BDnttW-wL-ijji^)JUc3w#gdpXr>jEki=g3}2?k zW4OGj>s}ub;BocXahEJeMV578x$@?|H6I>EIWgbxJ0j?)x(h2p$Dy{_-}lNOw^bMM z8yY|lvqeYFW3#EoCWS}KtDr0O)s6h}Re5n_#6#oQ^z1Cwsm60tRmkuPqoGz%_)ztb zVAWgS&sm_3K#?b}=^(f(_Nqzh9__3bb-LSYD$g5zwI(R+ff(s*DW*wyJ>0ZP&eeSA zhIoV#2Q8I_b04E7$l^~8sbTp}Z@r zy5IMViC12ML#7E|<-pKR*}U)-%@Ct|M1S6bW?!_sBod_lirQi?65m=*EgWAybWdS5 zrJB^<2|~6l!*fnx$yGX@+t4IJ>e-1nFDNKrEJN!YJ_7+V5v;qOHhVdx90H>Tb5U1F z1jq^_go_6GL&5MR!ztZoCdiG zyBM=x4gU*ZW3qCg;IR@{x?7Z8XPiJ&$Pk)Y@b z+M>UCFVcjY5p|ntDlc}5o+l9p;9)J1yg?xqPvL@%O=Vwb{6ZaX^e13M4OI8v7x{*{2deD6|R zq)UITiQBslbIQv)=Z5bAPCg%tW8Zz%Rrm)x6DQl@0b0Q?o>1LC-{Q_7uPfQr1{y*4E0rpNi)w;W4P3T4dSKudG6w6bkAnZ*sJC zHqiBgB?wZeWbX!?k6~xnhXfsm_WhHR7iS@{Df}Y>#y|8(wkfV&ZFV9C5XGgknC=D0 zNq-(*9Z_$l*RKi>3P4H=MipXFCR;4$h^C;Vq)UiXQZi=?M6unps2mbtU@aK6h;Skr zzWyXa<)WbC!e0Ps6(oD+9*UGSm&S-!>o}M3Fh?O_32vFy7TC56s@{L}u>2AAV^?8t zh<)qoq3-MO!MiXS!zT&4%TB8z!7M%!W;KlE7rT2$F)<0eF`H?@rdaq~QmTXC$ipUs zzn}C-JI?)imJ(ja>qRo~74?_kQ;iX#Mpn-8p>OEY=hUv$}=a(>gW+}h>k0Q^6-gNiQH4TN_r$?Q+|<9>9CZ1 zo<|`iMPB%+wb=$g{#AyYCD^LXs@KC?K;@e%LR%`ryOL57hoFi9=fGZBUREZf#am!A zu$Wn2@C_lh^!qCyTv#>(^6*4D6C{33{*GPeazXZby_e^Nr2!oYLRofR_cVPEuht$M zNzE#Ze((_9$0k4>93?cYL?c97^yM&0#8UkBt!K~32#jC;?~Ws+;SQdhP&M)KKUA6M zRcCagi)Uw9Rsn&=dPHiLO?!G1Uh-CHMB|hFsmG-zB}%_CW|S=E zcb}^#9mx;B%_H^L^ViAAaa&6EKsw0iCYb>bZG%gzBls7_U*~TMZy3JzK!c`5Vyeot zGpU$XWxLRV{tED2j@>^le*d|lV82g&@7G8YdZ-xYM!{uqOkh$J3Oaf_qpYGew3{j! zoGQZ*3*SXI$a#bJBAKMkmNhay4qrXt{Dq#6#)#!i(Dap865C0az%SUX>F&3vtnOcA z`lk=SW8x5v^vwLvJ3x<_h>NDwXKW3kijeuwk+o)Kym{li2Q9&8RG1MRJ?cnAh^FAS z*08icri+={%o!!+<&lFRM9ZX0B<7Z^>`WQ%jFKKYXFjq$Jm3H^X<2ky8n`2>7zM=Y zjp*EMyUlc4PklZixEJ#X3#o4#hC;R!h}1_(5>dt34DhsRE&9M^{h9}@6o%PiPYiS{128LYGx7e@Uvii|le?mDmnqb7;r^OfldupiY~ zL)grgJIq-nT&Y41HZuqqN(C?!dJ#HOE@ly0LlUy6Xs03YcQXm>eR~c|!<4qGCNS{u zn;3@KxR%9*n$9OVBpnNM7pP9I?rcd?oa`JwkLiX)192pT=Nn|LLHe3Z{Y|p0olwct zyt-L5eLUC;Eb?;$?9~HODnqxMOneJ%K$n4sDa49kq$DQ7ET#tvauad>ej*NvsbHax zPojH@9BZmq6TecVqIk)d6spf4i6T^b!xjxjD%3^A}+(hB>9&WI74TG%|5fCY zlzK{6s+Gp>F_w`=OOq14vxG8PYU;_7lvb@$Qe^o%?F7 z7@9jMxc}}gO1M|{4}xx;0&PilJ&_AuwQkLYX~-xLQTk&W?!%sGhvdzA%%&YRhE7h# z|MR1T$aDlidHKZ?GHp0Wk@Kj)?n&?EaM2OvexaW=CfMI4_orqib`Y}6glxuLh`}|q zcQ-utVUkasBAY8Ow7Sv{Sl>HDu0`_)tdU#3YZsVC`Qcn!|Ea+xuOj*KgTkCr2TJ=2 zaGVwj?;1+BEDu_Y8JR1~y8j|>NXc+PtkNV`q{kycz#udlni2NuC=RmBo`&~hKGEbr zAg3Cg*BM?JIuMYlvAD~R1KT}ycit&@s$%Tz(JRS&)638Xhd?hX=sZ+aF$9byjZNj< zllaf+j#!D9wa9X}P?cV-zb30?<1LVgIs>P~C_;kT%`0IOgOE%usR(8%oR=|cWB^zQ z=>v`|VgF@BT`gRx`rF0D#eaEm4IZ?X7GV4U7|_k6Wd6T2dkxG4#NgmCV?;#)WO^t- zw*7PB5Gz{8@=?oqj(&3Xm|yz`kBoeemMaPCZcZ*jY0&rj=b0i@KK9Y!vm@7_5jy_GRybu24i-%m70KSX< z20A}OwS2io6JTbDmZ-H+X0?Ly&c#G|N!fhnWANpw&(dGej7$Q6IHmgSzyRO zq!CYjJi{Xkt@FpKVq=;poL&q}$XjVELrNHtJY1ycK731r+((3Z z_Ga@eWHoi#bC>MemH`lky;Et6MZ!Mek>rS@dIw4l4G*kfeDSid2BZ}+hD%y4vkrue z*VN2vd_EXx>i5v!3CdhfJB5gcihAy@9%cO|Nh3$!eq3V#Qpt7D%Dn@^1U`oH;}w_; zd%0M@IyEDI*sqy?Iu1ehodPuE)@Wp6B1*MZDWj}t2vq@7$aVxL@v$;3GYd6|6U9YK zD#n}{!#R9AM1Bz1)2*(*_>5GN$@k?*>NtxI&1ta#aAz7}M)gK!TJH5&Oj7O(KgKxl zF`x|zA=Ge9=h;A{CLUnkYg&CT%*J2PGz(h=nmUCyY^{5Dz&ZYo`)djMkh zIlwZ38NE7Bm&Yp$Z#NePA-xBICk|iAtW$Gx;y5xu0H{urPP6~Fh0G`?)5ku*&4ka+ z5`28G8?*HYiG=vLVD`k9mddeOSWLOJ;~^i8o0M7!-EQCEp1!{ zEY65$rHdmHmMCYx)mW>K!_;f#4o%K4H9=LF-c{cq(`I)i51l!93LzfP>JOQ$KGpd$OMpioIem*4?tkV% zn0#3jwLTR;ELm$rrc=Vo;_CZsTZzFw*fqGyWQNuX)bC;jK%Y2Km;`Hs^{1s2O2cAH zWeolbl&W{$3kcy)nE8slgwly4_vuriA?cWHAbgS_X(dK3xTs*JjZb2EuAZYa%||a` zh}Jg++Kja-1gUiXb;R_X%-Z2UkW2IrUGl{6Q({dkzTCb zAs}|&qFW02SNAKi$FGZ`b!wufB-KisRpQ9^UlRM;4`NljOjP0%GDOTBngTyu1H>ak zc?Ig}{(f0jYvK`h)*YUZs?iuZF+#eKJ%^r;?9`R{%Uc*o7K9ydH;>`u2Z|m6Og4O? zfyUK`0y4^Q-0fv`nr!B0Wfi^wXCZ4>U*CE0ESW{_Sc$pjW-s6ozJ+Q-DG=gF(?<F^kJBjU#x0VvVRCP}@znX98A2C)rbF~RN?4$u%4N=dON(uZ*!l1ZTDf|}( zsoZm45%)xd9DYJcf4|=OJNR-~Bt%edx8H_CaC--wZjmxF+ z%MeZr3y{12X>L7{}4}U z%X~}(%XV7sTMX1B+~6mB$XJp>0`YH;Kyxb33_1Yy6Qb@t&YWY{zpkmSHW~ZL4{30K zL0v?HhFn6IWoYf8o7CO0rT>wP%(MUKy{3@!i)+ok@QpB|6w;l38F{O%IHvtB6n3wQn^Xj~vI-FRfCM(Zr7 z09}iVyP9?qRG#7r_wr6t0L@$yopCh8PHu{laq1iPi6EXsV>UNhi^fshD!n$(dPk)1 zK~^_nSOLo&B0$^*pfvcvp;}fwu>c2u0T1v)pd~F$O}Y9xdco?jsYDe`DWdcwJOK1> zZhC-KkBtGPOBpD;)jkt+eDLog{$#0&U=%G9{0{bz29MDVMp5mE7Pi1@1_WmQcG+j?$n7}z*oqtZeWQ{vHI+mZuNV?vK(07BoxT5 z+hZixDJTtkgV5Un^l*ldhU)6?PlnNn6_u6bp0-rnutjYW$=yp3QMCH_wNfC zagf5l{8zi*Y%N)939qaJ{obbVDuf=&yXv!VZzma=0>ll68Bd6Ve(C@YM^qp3XRP=z z(EkQ|pJ|^n9=i`^;40Y1$I6yFaX4k5`3@l*I7D$Wc)+~a!x-ssss6|+I@AEdICdOP ztm4)Zsu@1f`U(BM2=sOUGM?c9BfX*pN5hevC_erck0u92Vjr+77>l+wLl;~IOTR9ZNCQIscA1hy#j9o>x|WDwQbq=g^qJJh{5*84UA+J_wwzdeseeFVr7Z54) zVN^EdrxpkL&jzRB;r%z=YdD4LVLd1Bq|}rmInEsE7ewhZ#_*3$&2G4X9Xv&ob>kuO z6#afAmfelPriC|SQ2b34DQhOSKt2Y4RfPe`Nm6&ZTS6DFYzDSwq{e}TjMbKf==DN& ze!AVKfSrV0z5XrI1Q1BtAtPWR0f}*%9{8Mw01vCcR?HhTscfd=8QV(ya34I>0_XDL zI*?~4y@aleQ(Pprt=y-aER3?z@s(zSz6|up2@yF9AxcY)sVz#h@;y$Bs=9v8bUx1# zX%B+QCmKZnOs7xnyA7kAET{ZPk&2@0k36&-zRX7C<0A1WFRm@2iZ^6RB3h+WChLgE zl4l#$&*frki7>pFkNh@aP9=dKQ_v)44ok0x1v*<=*hYqyf3SfU|D08Zi~w#TbGwYsa#xOFFZ{wJ7+30a+4P z8l>lq^rhIwjDSt!wr+O2P&}C9x5}Ty>@#EkB{P-cX zg7j1LK|)!L7?}$`+6E=5uQ7*5=$9oJwDZSD9xtqse03^efeGO8?vkTcVY)ecyaNYX z200yE{JIn()|u7WrlU3WdtYE#lr|q-tq_fCQAC;aTB2m!2l~rPnR{r6Qy!DgegO;O zNK{N2$qv7qn@{B+LKDk(h}Pch5L$}?^uqGb6?2nT@Xup}i`1vr*8;hmZ0=ZdD2SF< zkuyx?ds#B1J{Y&CG-a-kqyy^3R$NHX?ZD&VzOu3kyaJu(6Mp=^3s+j#6kFd5&CNBu zNoHRC=c!QQ6B0^hj%L=RiJ|1>t{}P)WQqa?0I|oGuX=Wb12|)m76LoF>IdW;!I{K_ zeQ?1AuqqjN5hY9+7M+_*c71();RkfWlyy{q_MbtiN35)-?axhwm_OIaHC{%NcMS8C zF6_m~Rmy*Jaw|QrTN99LkYzwFdDT7hXSaDZ=SxLN0cmUw%czq~jRYis;KuTIK~YLE z2{Eaf2CfMPutp`PVpEcc??c>ufzc!8 zkB>zCUVMFjD>0(gQ~@0zRi#?&L^V49h$bIS{&qapy{-rcKXTPp0HM7W2S_m{QLm!_ zryQAgK-MW8d7*`q-nbtd6_avJ#G8*Axsr0!-MwrWW0iXG1!S|oCto@5&LB3Pe$|i~ zDNP8E!Y9Q-dG&pa<31>_3k6M=?(!tdAXC0txOnYjbkNK+C_MKVor9vA&Y*hw;+X?2 zeQPs10qlGg@dDe?RvIq;PogLhEozc9FfIQRhFbbf7e3wA9u<>{jEw`j%k+3~C2 zS=!sjeyy$tlEYk?Z)j_{=%=WHQ1reV5*f5}QsPW1Pnr=?24hF>&#Vcfholo%6@`*; zzpFBlNuLC@fl9Ay{pf@bJeU_pyT|RXwa4oqX)-MJTZUZiO>GRplFDTFC<@e63l#Qz z=*<|bZ^MMprBc#@HEeJ7S2M@nZszhtr}-Y$R9(4GcP z|CrsIi6IdpA|iq%LdFSF3`~sT6yg3!WDwsgB5pwLfdripV6an^yknhy-1Q1xFI*s0 zZSR|I{cB04S)kx*&df{5O;oYRh2by=nGNS0q}1s7Y+|&7--khf(g#Y5`P|wXRX^l- zl>`@UQig}QGdq0*H2?VI19WrgmU+t)+7 zeanvKg=v2};x`Ci`n209uv$QQS7Ju#P_2kDT3Xt4p%+|$Nttb=CHV*JK6$DAC%V*3 zuj7bVx@ZqCg4~TW{X<{wnfR?PLPsQvNM-=}!~0NK9T2n_R+$7G560jHLA-5iWO4_U z;1D_pE%NM~?mrcahRXd)^gHq3cRkyOejQgMu6Hvt2Lbmgp;o6WNXSjojZV^tcWbyi z`)^V|WkrwegVV1_q69h-#TCBPvjh6r!1(z1f5s^d6pUEG*z~w+8XAH>j9-zXqxV4@ zmV!`<*fQ{Q^bzcMl^KxoE1Y1bvOS}T1>;2PuVKbxao*p$P)@EFh@wa``(nFwJ zRf1JK&reeQg@xZC-{=hZ1F+H59-TuhY53-9l-1ORvp5X&d&kftTa|W~tfq_u11Sj7 z=LU|^jfP>&o80k96NI^c-}xGG3B2Z8qz;HDE!*X45FLzz)rDM~h2rh;B-8V=B$39| z%&9xBm!`rS{1GNvE3~Twdxpv+wvK^>p0Eg3vnwb`6W8P%iK@j{c|;+iHs28!Ivmra zz-XJ3-VU=RVp=uNCCo_uMf zhU_lFlm(9pI-C_ps!1skk|9p49H^VQ;j&-9nI zX&wJ5h@Je@WY_O~v9+NWda1k@f|Upv85z7o!*uN}ww)$nnji&C-zmu*($03+@FmiZ zHa`!`Fd=;BHf-cx*6RNtN@Yq#l~L{Jd>;%Q2})DG=7N1AhXQH0BmlhQ9jD z=Ope}YEwr4I2oA#qM$SK`Mc5=8$NHTTdV*~=h-^Y-8z`}m1uHJfwwvBY&4>5H_9IB zw6lQsPuad2;ExmJJ#I0`nOU_0+wKDy(nmX_qf6jxkNmXZpm32L6j4<%AvZU28?a%MZ zS<*hDjak74nqKkS;^(CHlIcVDw)O<91ms&rF~Xy8<61d8JCjl;Kp>9oO-}e6sOoSZV==O$yUf{#yJL1Sa$#b@BPztS)pMx3bF~5papO0 z*lQ}5)%{0Se2SEQ)oQa1dqz;bYPQf+?s1h-?vx_~=!koT%~R~WBetVh2qP96Rb3kL z2q7lE^?2CCsceeD<95#W9z1Mq|BY8Awpbx`k{}aooAwi4yz0Fd*uIu0!rZMmOCi$7 z=z}xwfsXbP+RsITT2><6f04)=J^KVP_p1ov#u+LjPcWOS4uB>|1I~MK3%?~M*!6b! zLU8aECI}xTYJ08{=0iE0WM=>efsvU>B=070CFr9|h#N&@BRzH=((8qE{^nDvk@18E z>L(GIsE0jLR8xq#;oCWj50TRNu-3zdrNkeM3XT1dfD!-@TOgxs(Z2G~U8sqOwn3a` z_ocEDHGa_$PG;uc9FbqcA+Z)T$X5AHuL|H*pngmBQc z*Z{rG$M-b&Qd{D5>72JWH?kG)NV@|lFrXd zIz*3F_q8Y>H*(STn<8~S9IJF6T@DkBkNSPPRBkYzkcou~;}8k-^MF22a_1jv7X9Vp z{s;zwYE& zre>a#g+!o(hp~;cS$+Y?fCN_v#mY+r$f`V?kOdt!FL+j=$I4Osv^22eBEn$eHq8w` zh}7zkRDfnxRbgtg5r45iiFWdi(2S7h8L8MywokG3w~hiKC4R17e%k)VBA zEEV()|AjFFDnc#HT$b_cEz^&<^~jRcxC-aoMEYd0#pUH>zilzy@H6uKS){EZagM=xk>8T&M*{ z*wV)j(03N1eCLS0+*4+w%?WH%TO`U8!aEP8%$^$@xgT5&Ty2Cv$r1gAfR$T)3Gs0F zkRZt%9ixdlD>oZHl=dqN-;$P=mVB9hNljfuhGafn25@rAmy|5n9N~72z)L=lOG3M4 zrH0msPk0MLf(%0XaZ-L9!nq|6viRR17b3DMvLxy0=@p-;;UtPpg6IySQ2^R>hr$-# zHYMYC%Au@SYccrWnU5xz#0z$y1kps^9(ZJC{koEXERbO20o9&mm9-S?S1pWE zxUhhn${>4|y$803U~ca-kjubuP=24SjSwYDSZ9&igWNVI0+~b3Qi}PUN8m|CBEYSM za?gs+5S*kRQ^f`d@T=xf7?iwFKVh~jxdC?uhV{F}q7&no^^`gn!c>ibKAha&yiX@p zrWy4hbU^WskjCIJ(6Qmajlj92!1F)3aQ=v!smfH3ZQvPZk7rC~v4TcW<8W~HRi+Fn z90T#Jk?Du{n~TQP@RO$H4|B4Im?rV9_^7kZo~c%XJF_-n?eQuaGDHM;f1GJ1v9Dpp zKL>0vQwU=vq?J1W5jm}no6=hhY%F0(Lk}PmF57_0ST1**OMk-njZo75!XUug`r@H1 zF2lR;N*|VT@G9PwOsx@6vj8y{{)?Scy2pP#1&B>VB+>1Jsl2pg-0wTX??u3#YW9?n z5qOy0GyUapp@_d}3Uj_BP~i~uaC<=xq=$6OA`GJt_fb!KDhh&86eO|9Hm@Q|38l6s zaqzY$R7@3^b!5gR`bE29<88$=9R>4>0zoC+zH@nS7Xo!M_tPM3ZiRnXc zw5UgY4~X(T^vfy4r?qwZ0PCRiH6oCV4DbfX=RabwuLnECP5lZJB4o~;{(n4ucQoAJ z7p*!Bqqos}7e+}Cy_blZ2qKIU1koaT8@=}=BD!cvbfPmlQ4^x~E`-rXo%hN2z2CEz zwfr^Xb3gZfptg*y%*|0xy(1t zI_xBT(>=5Ztgr@oI5{;1{=`ej3sH6PG`8dUwkwSq=MNcoA{v?xL$m#euDLR9!~uv* z4HekWs_2>`)L^}gFqy3_UTiMX=ntM%*Fn1hSVtgcfGby2%+^JV?QdLnC3OnXNh3=s z_3fIWbaYlKJ##O;`Fn_tl`+=Qelc$NEgLr8Vna5^5=_gWCiE~<@G|rH4=TLB!sbxb zATI$iG4Tj${BSA|$31o`Dyrx>@w{(KplQAllGuHbWc~3Fn>pJ$PZ@{Ds}HC_`#}nS zGR^XS{~>pih?u5$4C3ZxBLepzK9UQ>zDdr^@xTdE|7I@CQcideFW4 zqJX!|VBAp3yBjRt0N-zvCnqP$l=7?d6uvxLTif}D0{TniTJowm+u(}oIDoPpc?W<~ zhyIGk9Ph2O`@mlN>T}nuU70DNPId1T7i6uzlWh|)N5`ZbnWZSzjUoh8^K)yIj{g&>P}UUsfv5Js5f6~>dI38BEkhOx6*;_XfsQ#BtJ{M7~g;M0E0608&Mf zay-2hE<757tta@AChm`h1l2h`tZ&z+yfKwZ6`|jysCqd#JgjKuB02&gl2_NC`_tcl zteXD20l9jScC_L}1G)*?p!>klNgcIoK=&;CRnR|tk<{uSp1?Sc9uSfJZ-M?eI>B|S z@@l;~0zzP#1cU{fU>$PD8ZtKZuPSGPm7I-lDmT=GdLI(v4mlCaum*#Uq0-Lxo+2st zgdzW7SivL}kE8SfUi~RVG!WFz%P=b2>K1S5ZI}0q39EWq?^Bw>A8evacbY)oEAc)Pso~1n3m4kEse6nTB(v#3Gc~l8q~rVb zkWCm0yo2II#9yXP|8vg2VM*}E_0~ZP-SaBh%J1u`#;b2yG)cdMfZFxQn+ zg7JDVkxA@ZCSKHK%ExSCr-GQVB(2Bt)W7J7N8+3Fe>;xY-Qen&vzf^7Qsr zDgRl}9sHh@Ty^AWPE3ynvmv*aQMak)AmARkK_Dg+s9Tf?FkQ=e&>HL7Zidt z$^lujk$dRk^JlQ|f*LW0No}E=vs5Vnqc%vDY6Afr^DHWWLaR#dOY7+5m^ZcC6s^N_ z51v!AU^=tL68X!aXZM+f#Dk%% zpE~GqJ=H34mUES@h=L40P?|J)B{bs`esw>ayT7r$$(CORnIx6#{=SBjZ?XlIb46g=6|ROg%sn`qt<^w z4ujQ7sW8>iD>VsqwhTpbdx`uSuBeuYS})Q6lJ2gF~T;0$G3~*FY_r0DZ$BFAEW0tPRpHpK0pa>r}sHht4 z`bb`^u{d7(bm!oJ!f{`p&nmCFnnJt&JzeBK1i;gYsD+@|U5W?0EaDyN^t|hP#0|cQ zyT8rC4zk0z`s(oR&vMJV0Q$x;MOVUNRbmgZRNqffC%XUAVhYeG*+X&~=7juw_E8cp z2sy_XmOoEHVIe@vLcH;eX?RCv8TY<+xJy(jDty@dGt(Vmpsg%lJZv2E$=~4U&tabE zCz#CI#yZ|NeXa`HLk4&;*~4-Ml7xh>j)Q*_4`Wo(n=fC&czC+CB9)aZ1)M#TRyj>M zjs^BsNI{aX5&kyVOY0{mroOyM7E)ntH@VF63Vt((R+f97oqb)akf_DZ!V@R!&ETYf z#k1vY&-|gyt>EIt^@wg(LQLDuAq3Or6&ylL_*{vPkdgeH4JXw8qj3ib)S1Ni59Q9=Xv1>5^mp$n*P{O>z6O8}mkofWkdl@iF`1=I3BuzE zxY*&)p2tC}S}FOe2xcKhno>e&7Ig67y+Sg(c4|KUNz4ghVbAv!f?7lJQyUR!(&LH%~Y-3?o` z;j!DGd&las& zk^}vcmgqmDY)>BIez6E5X_FbWRQzlZny8T*Y0RVX+=lytv*1A4Jpz#$s`F2j!eB`4 zt_Zb)2L)kIedgMDH+`>?jiZJx1qHyvDK8ci#@=a_IvuW+{AJ{ae3N})k1rwKYope| zNhz<81+<);UzC=Xs|3B`uZfLKPW?n|;~`cDs7n3hHW)~39q-!;&`f$rujyuoZVniH z4m_r>Q9u*=Mv)e-v|SjWN7>U`Z-svZU6B5RW8QV#GJmn~Wqw-Oj)^mT2m)nkMY*KnDvC0Q2Y2YYdO2rK8rS$;=4^w+;KaQBhY= z?}o}UWG1@MQSc#C1&PdJB6asSsl=?R+Kx|evFp6w7B;uDy!wXL(?U!+ zM$FlUYJc5S>)4v)hbA(s{L#qG+bO@$Kl{Px5ODs|Q}#~CkHwE^^fn3Ec7Y}9&k_zq zqo!Jy-+-mk%~O&&6sneP-K$^0M+}N7Svwxjih^Hn`Yn zx!Y|4!{=@1;(shXsemD(gB~x-g@4vl2)jeOI}{Y;8S?=bSe_j-!QddQq=>yG4~yhp zxx?XsQdIX~+?(^-+KKA{D9(w9$%X&Q`LUDb@-I-mS(t^rc$FeAc9$2)@Ol0hA+o8B zCuRJxRfEZysqw?1$0#T^GaDg*QXt=KiD@%71FTTE{|)_U+>>--4xOqIJbyBz+o_bc z_K7Bxd?9JT=4+Vo*Y*2c06l0PE9H}vygaF?r$pv{pj$#pesc6rIT-Hp?2vv*`fB(C z-^D&c7g-8>e3)SP3k2379>9H3ncbZj7#@k}bdKzTD}GZCYbiLSyqT&TW$-R zqYIAv&YKgqhtQyCwO8;vB&EByr2Cd^?=H@LV|VnngZJ1Ts zuzy#!CWbaFscfw#!7tbNJjLj#A2I`4VI3{4fqMd~YESPwn%E;2N$E~BQ3UPZ3$4o! ziCf5q^^|y$A`06gA5al803EcrFo&-qfZ(9}z7iyYaGBIjxMI6l=hK@q%`BTLtzWWVg+pbxq+K2VYHks0+)NGDZLr50asvp&4<~ z1OXKRHiu+&WhGfn2DHw%f8dpgTM{B89B1G$eE?^t8EsyQLR`a`NN%*a5%PVa?gkBA zcV;$8ST7E@Q~w7+xRfsuJ!?>CETEA&F&Znp&hKAsJH!qO9m{gR)Ve$7Z=baFttDKj z#rSzEHwvy=+#MbO{H}9U8n8vx(pxWu4dri{GD{u!sEJBFAIdYNq^5{2q0|GL;#R!WYU9L|)(B0`Ggh6Szp zadc76ud^px)v7zELq3uv3bQv9P-K>--JE8GV|PBF+MmH4>d)m6m&BbejxJQA1@S~> z{i~%IQvctn^lUN*NVN_Zx$GrYoxKR4rmGwDb^4ydwnj((0DM~5Yp3$UhN=eOTRzeZ z5tCd54k7pm9w%bw^nBt+Mm=FDTuTO$hfiC*wO7jn4I@T9(Zg{4E485bxf z2Yrixej5?cmH+?*9q7({69GMeLI^iESe#SX#pF>Gp|uMvljW__SA!!45AJ8q_JlU_ zGqbbcz$}XFPOy|Ztpk2ai0UCUM?>R~OBY%L9~Fw+BaJ{Xj^LWg1U!ExsV%6-DK5h5 zS4bgN4l-+E+RY7!1eBc0dud}Q1&vAG*a5S59jWo{Wktb){Rs-sd?eTxULcJXo6Z$N z`|K^1f6gDWU&a*zlBr~;dYGvYa3<8%-jY~$4pg}JkcBSS%1{%TJPYOT3j^MpFmo zQ{VFHv0tM!N`qIQp30)3heXlPo9cs*d(-$;E*p&Pv^so*i@iGJ-rcpbe)_k67&UJ< z#7heb@+TcBJ~*rS>5?)$pKoL%r~loUW`N5hY+__+knw4hSanNZ1mKElO3Fa(#{m%) zp$a;@QsckJc8yjkY)eunjfi*48K=kq{*BPA3$iy$?=waC9~eX71au{qfw&B9EMZFz zgt^jSY&(wYwekSeT3ShGUtbODQhccCmyKg9E}} zR|U^p>Z{`8iK@ElzL(Ko_V$iv=-hb99Q5$pGCv&FYY%K;UHO{OID|{4|Iin^;*-Ub}$jE7b z9?0MpiBd$kc4*k(g>K#xqO*FDeJ0Y{b(`nMT-T{N+4z9DtLOyVw#d}L!UEfXEgq(y zoEw!sEV~iwwS@0c@i)fCHs+<0P<=N8p0&m~qZD1TL_TK5hponTsZ+yg?cGP~J>gVpcNrx;Y z4l6iM_^hZT<;anPlhZbnQddZ0^uqP|_Xj=nBRhmSVKy1+q^{C>Gk+)^m;8?lARKjX zs7vvaH&d(+mG-jV2iMJ%OgjDtFapyDMlL}IF9+TU9H>z(>9CFPVGmL8=_MPp0j?1m z78dfV2;lvzn+b>=Yrm2_x<|1gyD;zEo_Z?;2x9nL$=14|;sO9c9=?vXyuym?!*6c0 zknr|o6PF~l`iuGU1a5eirY6U&jwk7|8Bl)PYXd?NzJ-s7XLvNWZ`W|TxNc`H0* z4P=NoWC>rLac|!;aMe;Z&;rxB?hE!o+I69D9A&Fl((y-r@-ls~Z^|HqocI13QszW= z9!N5>n?5|$Ff0JqzkNIX>^DV^>c-Oa^ly$OXC-e8{%F{@dUMBvx#7;^aA2m_ZQHj+ z^-#4szdkk~U;=Gw$y;N#*!m98eolk@EskxhiBI#NOTXu3;fNt4>;reV*Ts4s2h<)} z@b6?az0#VGA4Tzzt3x%bdDy>J;Z*!A`m18Srx;6-8oa*J@3Y-qxI@2yw>-^2gj-Y| z#FY3Tzqu$amt}c}6*&!QmMg9Js^aHG3*7IMu_m?wXi-)g!i6^qe%|3DxSSD!Z$Zu> zv8=P6Rn8Vrz=y$~@=4qA!&KmAt`?w?aCaZLC#0zIMx2#ux5<5TwMGG(Q4J7)-t?FV zScPPpblhIWjSnQQtc54#5{^UG)zgB=jpM*2U%yCe09d;)$3=Vd7osCDtr%}Rw|rZ; zLpFYr+=&jE)~ zOL&x$dK|0$zu-~%t#pN_H_>WW+NpL6Ec6fe%WaGdB$JO-xVa5Z`ZKzO${#|;Zz#-X z65<|EsP3IE5PnD?Oht?2!2YG4szV!YZ>O;1R2T&yumj6X6m~|J4cT&%!c|f*L{DS$ z_<|x&)=DJ;fjwzVjm&~0{@YA2`jqE}ZLObtoamaCshxRJ%h2AA6+SPZJD<9ef{u;$ z8|}xAb7jU70DrO-`x}=oBscYaU({WhkA&B$Thc$o9Z;ukK7BgQZI(A)YW2_qvRT=N zKiwYn;W1u!C>A%tCz19A=c-SPv|g+}H~^Rxy1K#dVw{nj8k?!kLym4VV5b7j5UJK{ z1M|aNKEsgBI2kQR^&iQf-31@7vsxVndfT`xoY7c?1phThJ4wdksY$TuXo(emu8V(z z2gY6F@HiaOeguH9#}kK|1dCq8ecR4>AtS$n>8z062LdeqTiiFZxwrI=&C0SG@XpFb z9<+4FR~UKWME?2av=6D`0w6Fi-S58zA!fZXHC{3;N1NN6{Qf~(E>6-e}N(U zA$G5Z;fu%N5!jQ@XxNt=BL6KPtdBAInQ@B{#M%AnwR*#CHFvl$)0yy z11hJf^^X(ob|r_D@84zv{W1NSvJUUqz`xwO=T=rLICobX3Vp5z?PQ3PY4VK5Pyi4| z^Hy|uAN+XVrn_%1F2iMWr%4*IgC2!nOs6k#TxZM#kEEdX={rLpiK4bJv-J}vE z4)EF`-)KTUy}M6gweqvXvM2X$H@BcuIv!z~Hxiuq>E>A0hU#X)8vrLGDat1bRwJJI z3M)#7m{2tOi!c%7D0&`BF)Y zE2P)hcN{Iao*}c|*X29)!i{u##;lhy95+^`1N4FSBMcT@{Kp!)w#H5rP62}W-8&Zi zvnu_@cb*WJqU3h&KwkD}K@dGS7L=HKck=U@RvO*)x|!&>W6;$27Nk5mNQ-Em!nk>(WbhJm6&HspJ6o=mT->%hqROG4 z6L6lJ@~z0@c}L)f)-)_dJP=^0e#mTCTVr5i9zQc1qq89tgP{weLbmKm&C;8-k$cOw}Y?z1JFx*QVI** z;Mg8Sy(}22YUY7+d_pYszsOz1##-F7@%p#vKoF_%MlD5WSZ)q-EcntJSesx(?#(_O zx*_{Q(SBr8J#N(+LzLLxw|;nclxr}xW^sT8Cm`)^#H{lAkansQHeU(5S*@g$yN>S4a&T393|04qX zL&94K#3RUJTGlFvd>iEKb2QtJD(tuuTr%)Ejw3^%yD!$G6mDEmvtJq&-FI7aSy|%I z&yP;m34B}t=`cE1})fn+NY#@`r>xt25;jKv-=D^gt_b( zXUSOUm?ZA9xAudMi(h+puK%Na0m9fMkdx^0`#Gztrh zGq1rEO^CO@^zcFfw4%}M&6#8ynqc6vTLNRxA z!3e6{4zib%_UN;YJE}XB!VLw>Ofc&OG&-LCRN}*mNDz7%^~n-L1lj~=-P{0{*4NAZ zMoDs-JP}Th(T}<{A8Dz2=?ZTXQi6KaHkP(Gw~)44B-`Nm4J<^=ZTz)G&fQMm>3b0Ws7O$&qrddWW<9TPN+uTu9Hwu^wOhoG+-5?aQ757VvGTJiuY#JRE zd_}ipHPB3C>T=X`Qn{9Nha&T7M{NLq)*1=qh~IP`VptOS*U-~0WwMA(we5<6GTv}# zHton*>j1vp4`Mtj5P+=PV>p3gIluN&!p#@&S;@4B9wDo4IBJ-R0L6+yV|rUU{K4*D z(tOaJZRjz~rCy`v%C784uk*Qoaim|>`tlu3@Z|>#?$3UOP~9L%@I^xhQY83D9Ma6_ zE6K#n@l7p1cPN3p$VMP}6{MK+M%WtVr%U6fUV+1JT4wL<6efqvKr9ZZX#w^rMZZ z-f$lZs4325j4Aq}B*eU zQ2yfI@t-b_IDi>)n%r?U@4msczT0xo*Su7Vr3612rFc3ZU8s*mRI1F^gF_@u07}Ng zrcA+8+;3<%ddnYTjirgz@a4dJ>WY?|=rj32^L4=Wer2(HwJ9}d|3A1(vjr+@uPg&n-R-ke1Gplh#*M09T#)i9o&7 z-_F;MP`KPEN%{2SvvY~NRlze)9=SO(UXYI#0!m)hQG6oRei0VT{tm1Agep!jeD`mE ziNRtJdobrr54}o)iqVo=&eHcWB@$Jvv$)%1)#Hm7VcJ1X8 zq}r%#-sH=7KAn!~xct=7+krv#OE^RaY%1=&aZ+FrD;BPB44JhK8+K4VThD?f3y6-l zA1XOaIzrz{@u%erCz{;P46;ChSOjxG{e&6c{Sz2`qJ=1HnDk2USGwz!cYoq$+@~$B zwlx!Zi2_IH94J?g?<+aM6f1vs*?m_6dcQWyVGFNKtfTldb1sTBY3wfv)ngZ_&QxJVAWG{@V5PO#C2St^Yq9om5>y_ z4V`O=#<2)K`+&tGD!HU&6ni!lZzmw@4@+;u@a2m5Op!HmMP-`;eU|1`6dw-BMZY)tDD@w@2{?cuBehpg_Hww7ww zvFw@PG2yGT_hUEwEYfZYWsEa(*aSBtVytx@CrTEgujL1XH=WrG4W}cnS^TJTF$>$8 zmlxghUMoq5g8Iw;vBDV0wWKa2e3)S9ld1VCjxQN(eVu?*R=p$FaEF^l`ExlHp~CYi zvInQx%IZ19L=h0LT9V%t40TT=A`HPfL5U@lny4z8o+*OhNX{b<&*nGo->Y$awMefn zhEHv?pbkV|30z3yA{2&#ZZ8YTRz>dCMBH1a^?roto3GMe-FDpVb*M`|=Wg_&3@m54 zSyu=k#%v#A6c!pVF8lNTbZ3NQ3k^|}%I&x1t}7;b%z;4x(Qauy$R`7FrOgFcph8nI zP5zHhLroF{Z7qr4(Ae!^L&9gZu}*N%8@V?f=*9Uc@Xp69J$*>P-u$wX4Tk=zb~rvM z8Zq`F28yP2nXe{(UC64&gdbUQ^t&>M1ap+zP*~xg#ef*Nw1|`^Qzxv0JpMUmR%X~$ zDw$VPO38emdB=4}M)}eC&rJn7xvk+$Y9Aj2tP)!y zb6ULE4pta_t}jGZ7bPt^J0&f9qYm2>Lp_Oa+XT(I-6o6}uIP25)`;SK&GR?*wA~|8 z!d`#UAcZlFl{@#zXh@(B$nNklXB{`ojoWv)>;bGz@z7H9#}LRbhP9_Lh+^z3lPMX< z7}hl_n!o+{U1c)1*mdK8A*5;padLXUC1B(;kF5YAb>F(~a&G+Daule6^~j9b3cnk2 zAj(#55pfoIkAOv`RVQ(3O(^dx?e_Dp<1cc^YApzwv?IRMC}$}wKB992%zVP3@HWtM znSj&P>!T0BmkJ8H5Lq5_+)Y&o=2)X6RUC1`+GYK9U+J^8V*^g(zs+bj_W*M z`}x`PqrZm%boDR#%Lc6s)G*btQ1}-x2=$7)9*Fsv8=J3qLhn{a7q5T5ar~&5jR<<% zFFGe@tJ?#45;4Y3*-p0aWUDa$qt698Y+RbIz43XIa@_m37yAxzLH{y|cLgJ0NRprs z7)pg}C}U-fyj>tp-t&|)H3~g>{nUi;iFMgxlu?kRN7{b$hoO|5_u&(qui0yJ-$=@X z;qfPA?U)zV=&|^EN>jy@@S*j_Ge%2{!#j9Tx@LF>dZ?qPGRGH!lzrbt5oN+aU_5Fr z#1kqM_J=2aWh?C0y;Xb5E#ZjSEkzg(DzNq_g&w;`mEFtWP_8Y0WrpcM z2E})`uZN-j=%QdHd+qAn=oSN&3S!A#r_-Ome<#|j=<4$>xO+VENwtQi1S^@#FlD#OCljQ z=ro=hj;EB=L2$sN4&hq~KGo8NXi}qIh_tE#gZCV@-SS7`n%-*<*Za7&*QXZaym;wb z#XvIt$J3#_5~)_q(ujSC=oM$jS(zSFhn@pAN1XA=xo2Dc!grw|Sn?xT zsqGmg8d@;J=#C%0E9DEB^!KRpjPwV_+SGPyGTMjYzucq=rvTC<7qG&0 z?6F6NGg$N|Cn0pu57$ohTTPMCK3liTdp;!B-36;px-mG;NhW&V{tl}nScE0`c==AS z7n(Q{<`>&Q=7gfl#mFAC`m^3jvsa)}cys%6F-ZzxeK|^jIO4GH_D!hEv0zd%*&8Wt zR<%&A>J@Hed*9j@bqCLf84z_JBDtN?T~&>@1ZUvRKP%kUiWR@9jNM-5OI+hkan@K= zw{bDj$pm~BvJLDC$fJx?66p)z9&nohI(Y`Wqy0C#EO3|gmfH*=}0%QGLMD-bhp1jw9{QOXr)&J;5bS}cRbhxMoXG+h_ z8eSWXuuA{1fn3!I|8M7*X^Z{xhy^p@&H75Pdhy#2-!L8yfoD2S^p=aX?(PU!`j+n& zF+9G@N*@u5ZLi>|LATxh9t$2rCDE6`=p%bn((P7UY3^>H zbwrNcT?Y4GU@k3>kb12B2Z3a3;tc@|{s)2Nh@Y>HvLo?D5bN83&WRvxL>J=X?nO~f z;u)!hy&6u9E5|oDz}{748wy2t{s08%ppKQB`(V z>ZEGV;KsnHPUmbj+@XF2Wa|)!P1b&1Uun2MPNm>aez8~>k3?+|7 z6w1}3w^?tf}Yjg@2dNt;t?fGS8`>;)Ysw6{stH5iDbd_9k+-W1dN~Ulql}Cg%I8s{oGt|gfjTk zVrcb&Uzhs>9TO30wr^C!x%*v#*9XOT1;9ALg5RORz-R=cL)4~7F#X>kx)*mJt>Nx9 zWO}m4Y`$cR?(<2gn~5ZY0tzEqSSX^5V5Z;AV`a-9e;ATq2O}QjFH6?eii8dfjVKxV zCGIG;%|; znWS)nLtUJnOa!;hY{kn7IN)Y7%(T+{(G3K!qr!RbwKB_gWggWRy!111lKAjko9pTm ziI{;mzWMqBRt+=y&&{GLnya+)9->99^X8WmVq1v-N+~+%4g&Jp-=tJ3!@kSD$XnT* z&J*7eHE4McZN$5}$G(ZQeoiyD*aUO9e|q%dp2fFe2t~BGn}wuw6)f`moVDy3x_c&Y z`fr{1%<>t_k{Iy=6_&B$~1v5?g_ zb?;H56!&s`SMMKF&Rih7(LZ0yxG$?Dv6X-3p?)P~olAZdJoaU7fQj8<*zdlaUXGcPjVyn45CERUEX53`8B zicN98uTrdEP+SA08?bS3SmbJlsY=OB#!p*ba-Z+dA+9f$6Mn2cX*|jDxqPNK@r6CD z-Y6F)89IAJ%H((5KyB}Hk=;O*l597pLko4&wrXc}4LnY9AxsnfjU!oCPJ3`~$k!nPNsvPm7 z6?wsq;5MqE(~E}0;p7j94407)S>bx-iZ7-`XDE&G(ub0BQ}pP9t=_I^M@1u=U7l<` zQ!blAp2Tf8l_lemJt`Qu8`(=Y^eC=Kmjwy)f{b%Fy+nBaEb?iRN>jEF)w<sOdg^7p9q&zSg zR?njE9(OCx_hI8?JKTdxC9MUAjQZ`C0 z;h$MX)@YW?MvgnOnJ~^UJa9R3=;N32=3s z-o7XmK2|Ce&qMcqkQQa@t#wjJ#h_^^%k8qtz0<^296yI(UD3^b*{P$pPqQ80ty-Pb z4^hn38kt&GAEpMS^SQZ%a0PucfMbG+VnR{NP(E;CZ$KdY>%vAw$re}dIfRtA1p2!4E9 zGMKMG%N6u>Zb~Fp4sWu0~&clZffe{(w?rq@ zi{#bu*nYHaVI8Thd} zYr{P5@WeC9JmLR7dSqlIIV+vUXk9fAMf_%WrnqHZ?j(y}0__szVG(nuAU(kgqx;B$ z=m2I-w_;#)M++C74IA47@}t_o9>r}rG7fnQ(qIeF`$|r-*10Dkmy}gtWfd#h4ZN!u zDeqR!Rzg%mLVYTvF@g>BrI#X^eug=-579h=OI14f&Y#9wLiI- zPHRZtQktfwZkQpvhL)}p$x4vgFaS|KYL()%)G+;(3q6Be~yBVPS0D@7=SYoltIz!>+8`n9^qaD zy%OW=_RPy+sIf>boW=Xtr4kHM&R~aQ2@1Gt#;ql@smXLgPmgB?8H?)J!L=#@d(d~u zFECV^Ml{rcf4E0m=L3Ad55F1hMMQCO^BC9z`y zso-kqLyJ}u=X{H=NdaPyyg z7h<-m>JDI=nIm9iF^RX6cp{NJhYSg0G3f|}MB8_BcDzUltNBSvEQPnKz zV>+$UKQBs&RyFIvw|d1#a@?9zaO!i`lABPcSGO@}iYVxgV@0U(*FqUCL0w3XB3PlP zsYzOj89dWf8zb4Q?N(G4vLciGDI>(EiE`w=ODv_?)`p_$19A5L?Vt@? zuKc_zedp*k8mp&IOt3T@?M&{GKmXZRtx8nKnyr!2PZl9&tIkyFSagOM*`bSAVTOHBinOL2DyhD|7h$XX>CDAiT&Bsru##(EED4Xf& zQwyq)P=u-{ln{c!q|GWdYdwmPbd-v@nVGV&9Vk`oq`M~sjnzN)JAj;A=T$e-i7KYKa~W-nBp5xLwpzYT;!;- zPxAQI5AOTgc79^Lt6;%s>vc{Arw)R6DBq7qfL$QZBD<-(HJiFNTB%uE8~&Zw!QXU0Ea@#Q7uVk~`9+<&z+Y3kR*zaH#%c&lTxX z3$Lm0RMG9;V<(^mM(bVOg+jE2-018kY_Hau&ibj3YUOmhCwL#`Pn7;#T51Pz`e-$T z+lRf_5+{V(-g&*&I8&=km^Oik?IY4;3gubq0cAIv-_d4E=lL*=l8 z-pb4g;Od)w=xCeuV`Lm4dlV%bP4oN5@n1z6bA1+7neVpk^y|V#wV#lRqda z={}?#JH%7~qslary^us>ur(KAwgV-Lu2z4z7c9#twiiQ0TesL>d^ z_~jx=_o&nZdnZrkUK{Hqg2129W=ePzxDzVluYRK<-$iu25Sw~r*rVv=6mlLn%f-e; zLCuPq`&>aS<&J&7(_klo2YLpY{4nkM=L$(Ph;2!3R!H+I7|ofBqdB0@=d+BxLlzj_ zMcq%rOZn{rHh$>2t(5;HawD|FKRR&h2V#H?1e)Jtd&Va!>YiDJpu%kpw_iEk1(#A2 z`7pFJ8Mud^f}L+`ecgx>Hz1|yL{F%VonPf5qY)OtWT{NAU`$t7o&IFu@v)p(W9Zqn z!_JCZ&D-uzRT&8;4rMbnEQp(!Pz$C?_fG3^qpa1zPFfa!ChTyeSPD*9hWye$b4A6x zwvinW%2_eaK1NjE6z`p3%%m;BmhRg(9&D7dAiF4oJ^oNRb|u3| z<<=?JC;OUJoYR{m6u1jEik^mfFWo4;?1{?hjave2NgLkZcikj_Pbv6GopuvFm1?_c0BZLR_)5NTzTyJtCC@R9sSG zRd2#q*!U(Og$kD=4F||+$LZs%GRqyx9A_m?^7bfke=`qg4Mv!;YwX>Uy+M8$Sb}d( zjHwh&=eI~XO~eyazP0-#XF}>HYVuUICHz%cjEU6ZBbftpX*QM}@lACXJIb0j9@RA* z31Fi8>m1SlX%7 zJJ5(Jct|fY9p~Q8mqivsMXUfzE1I=B26=EYk*M4CB45A}P3b+mtdo{OAGfdA!Dp)Q zsv2^@I%YSXDPv_LWTq#?pi(KKpOfF0t#a=JO6ZB7?1tuYCsn*EH$IMvQ5A2IVQli) z(}aq9#zf!f*(N>N^nXH%WU0{@ariYoQC{EUsC#)P!XNbC0d<#zdX9&cL!j^Lf5u0Ox? z5sReYBDA#?rT&to;PRwVlte!7jtmbh(EC~BWjsp4AvcR?y$QYVt;wIh5smQcU{#N! zAqnK=zlz*kiw(4TZ^)J3ag7Jz5f@UY%9MM|u7`N7PxOrkWYTI7*23bLjV;{~$b9SV zk%Taj5AZp=V*?(OK!i63Gv@x3cwt`fX`U_S{B)Z_#s5c$kD7kf5BX88AXVTPq60cr8Dm z#Q6}7U=yMxpd@ACf>@bwJjgk!jp#vUU$9+ER(6+8uReJUetgsr2PIF(ebgzSGx?#@ zMT}e;c7KYNg8*&Td42|-P@!gj)sVRY43A%6FVaut1gWd5=UGEM;UQdq7ed?^u@r=e zo%a<;YDaW;aUbVwz2?Oa@1`bt{j}U|CJip{NeI|@ZNnM6kC8z7ibi&)lk2Cw3niYf zQ%8wzD$XQVjTvbgME3fAZ1izSCjCI{k|yhB1$q0l7xr;DBRl&=7)h%Sc&ux9U#Kk3 z<5A$w!zR`0X6v*)(clb2xHIW%jqT*jcX}z|PkY%7;q&iszWPNhOq%mO)y88%^Iver z9!+>p%R_dwKLyIdaSM{eeIFrBjRjP_D|WO`S0X{+9tO(|W5 z8)RWjl$vTZwSpsJ@!^7~Y*0&6XGm!q?DC}b#Re85n=Q?ICE+9uU!{oB&sgQmQ*ZN| z2jZmu4^3ae7T4A^i@UqKy9bxSU4sQ1Ab5b_o*A6r?(Xh{po2qj3+@DWCvtLk-tW18 z09dTvy}GNbtJ)*^n9?-pq#JHqk;`B+y$*pl_DLfXI{B#`KaxjRC>gjq{6F?|5CJY} zj_g{dGPbEM(h94Q(%=xJ50At;Y|EmbLgYMpLv5p>%X$NVaA}zx=>kpe373Bz?UNKu zK7gI_jCAlDft%A1G6@lxvzdhypMLLWlJ$fsR6nVy0eXmQTDmt9r&0CVvy^54~{ zGTL>Hdbh$FH?vR!?(0So_=+{MHnKrr-XkqjBF-ipFqjlV^MR`M8|XV?i$&67cs(+C zCmRDl9TvWEA)mopg+hG`Es8y|jbKtrZJR%Jd6eO`bcEH8rzvK_zr%^(`#U;NOncFx zd##(s4zV%tM+ZsCmIx7CGzAQaRfLeqV3gm??Q=O?<3Fd*$&M0+n$@v3+i@$NWn?oJ zBeO^EKBzNwZiA5&-}`VR3{TE)8;np#f05&MuWO7sgocHMIrBkD8z+AuJ;gQIkF1D~ zui$)X(MDq>P6vdHd1B=)0(i{FM=tOU8wuJBQIf2*LnFT9jEo6}bVQO_Nm;SnlQw1X zU2zY-et077Fox!$PEX43UjY2@chWmAcR6*G5t$yZvgTp;lq2 z0ucnBo}MX4K^7~#d)Zm}xnXMTQIjj-T35<#%w=%*u2#XIx1O|@xAsi$OG-QRAO73* z@CLgENT+@L=+OJOGU$>|3HKbn-mO21s1jSf{%uJOhKv#pQZHKC;T&EulpTwGROffB zm&OyipuDIcg@T!x9qe0WVHBuXflkKU%YXOBA?)=#$2zM< zbM|Szkat`DcZ?UBy`wPcT%mmF`G~TDUvI-_f?n==*u1!<#e5TaT zT6xOBv!Y%~gcl@~>sdLCEO*h+lsJMxyhvu?bWcB#zW-{b(FtUt8Bs+q`H5$K$%Pzz zV_QyV(EyVT(V4HH#%qTK$8L}!ar>I4K7(iW95JVy$luvgA_vz(ntBqsu5Ly{DB2=8n1S4&U zWu^FL#eb5VatIqdrK!uqgr==x1=LX;@iviVpc)#jL}SbKl$1F+)f6vM4mn3{raB1z z3h!tZYs1nSJkqErD>?dRH+ZO`ON=oL_bczrJj7v|#J2xQVw-i?st^_+^Bs}nA>bj+ zHo_W%u}H>vi?t~nzy{S0S(s%jSN0CAFyAn4g2MJ69ZlCtv)UHm^pSzK{Wyf6T}x#@RH(9!O?YHg<0Ac4!A-+|h}dfI_YV zHp$Jtce^xHinHa#ZwX0xE+ns!+O^}aj;Rm6fd{#hTCMzl@(eiymfGeH&CCpYm%cCS zV5}$hx@Q}yqHhkcuK{n^Ul|&;(XjDnL=0hebBqJ7Lz~sEbvI?9)2D=k6=9?-0bqfX z-RinDmw!)!Y*IKMY{kjD%Hia&2C51FlbpeL)qt5@3KeK_{}bpxK}T9)L|Lyf1q(`8 z{npFl@Cvgb!m;j9MKgbfs{ zZR{|%8cqyw>l)yj+KYneciUxJ2rD4&o{qe*#!Y;)&80`z<78~CiwZQrS3yTIMA>B! zS*#{$mZ5C)cn~xaF%iGxrhRDjbP*piM_LgEiLY#wAvrIBV z^JOvAQ3$Se$~L-@Xj2IIIzoq$Faf$X6XsKoh~c21o^cXx>N0eO za5K@t6JQI#D9Ipt)v{WqIN1cTTbO3oe9JZ;RE5DYz|R-s$77VjIDhnV|gMg}KU7ZfIu`NCj%w1kbHjZO{RSPT0v>bwaLl>9LE<3yREBWE6yRBPh z%b28DAEFMSwUP*@e{*PCOKw<84xqY0i8pqt&}@2*xQ;=Gxzev+6OW zBem=yGI`d+)1Td3mzx}|5Kv-?(d{Th!9Oelks2sMBs-drP4m%JUGl9~LLRo*rDtwE z0hU$6pQU@^zTXspx|R~hUGvgatnvH3GYcp_*;JfP!>)YzG#!dV{H_M?f*w^0EuBgZ z*~#T)1gKiUe2mQ8MQnG6Y*lc~?ugT>Wfe3txI7RoMA^f!8;H=fK>!Z^8~m*YD9`@v zAc`OtWr4~G(#cgtY2mH<{*wanYAtmY=~nBc<;sO1=E4W*Nvfv?!v@Jr&p83bLIBij zM?nOl(*lUjf4XV=HKR#g?%}nVZqZ~`eF)0O$v|OtE%HfG-eH+tJheDq01xM3I`O&_+bTq`LvcgW&N8Hog5GngzXa z@apl}yPdGQLzk-k{kfaPv5Dx&Yh0x-l1ZBI-_|JL11GvYRRc)b`6B?R##l(VNhq@{ z6x!uM1NIyG3{Rpj8eX#LC7KswEsxvCR?k$4IFbD-bju=>j|SVS5(mEp>%K=k^dSFs zHwo%P&;?Xjqo$4V6^)6WIOOLUcQT6x~p8W~pp@*GMP=Wwq(3GV@r?j-7WwF*F&#K2`RoK2WHvYPqSaj-yD)|`JL#LCKP4A!@K!1A0BPJnMrQwjF zfBZAh(7?k+2Z+4*5PNUXYNu-p&-fVIrfzG2w9Ak8x+kxSwQlEH_ z_Nr_lpH%qbP(2ap*79=uQ3BgY3KxHqc*3|-J6&y3C83LG&dn-SUUl}IbGt(|Mv|vn zTOFQRNSBjD@{g$!w5*CKnh_XvV5buu1vF$O1Z&6V&9{PJc(r^S^AQtcr^E)Jp|~0f z+hzb@)6(tp{Y40N3L@5xe(D9_ayIli99pn4P3%l?f9C<#RKaN^RDejzsG*<%1hgbe zLu{Y|UT!#x*5>RY;fF~-w{X27GNt}j5D2ZsEbY{`lA<|(1XMF5Pqny|Q1+S zaylw-l}`0Xr>clXqB>^`JO<<$nsYiu<9F{ia(tzEEhsMuR|SVz)UbOG&^#KU-jC>0 z-PIkzL>%cHM4DvCj*2T%+aeB{BuxFUB4F&X)02z0#))GAy`uFbtUV)bU8M2D5Luii zcolmS8Xz($rC^el>;Mr37EN?qBYF@EAjeFaSZFoSzCLLOAqoTG=i-B522`iJ?eyCbusm2mN>G^OfZ?{f%A zOJLxafMFP@2xD=YMs!N4j7cJT?}$bIJR2ddq@x9mC6!!XKh=5rwa4#6n|4-SPUxBo zs9};)jTPYB2}i?c7z!!xFy;!98<{3 ztiW4==j7;5&JtGe9lf)8PTU72ahj1|N}>leM?g3XX_7I{(~a|sKmht#W~J;(LWLDD z&k%CsZ<1RI?1aGBK|9cX*wZxCQ6da0@+T)Ied^@=E@nLupAO->NYc|9csrJ~)Kv9r z|LQQQMj*YcO-xQhCywyU+X3epe1xg2&Y~U^!2D*Lz;dYpFK9Eo3DX;hlUiXmzsE1( zV%7&VGL%$w7pq}sKtGKiL7@41+DR56tzg7}k~MK>D=!u&j_uK+ry@M&uH(X$;1#z2 zZ9($nL5Yi(*E8#I7^eK=c|{Ho6{`mPZ|QqTRtr1fd^I^IJSQ9GYT-s9FH1ZT-7}HG81-x{}z0+ia;(dDA-n)c9C^Th~y2< z{eq3-%<%A0dG6~od;?FMfVGwT7>((hwyb#3ADk7cfo-^WtJy%#rM{9JKUDK-_mh_o zSKVecOD4*q8JzNC^%568JNr#VHpJ{d0)cxWB(yIwWOsBc_;D%VPMGVRs8B9@zsnRy zLYXIm%71Jf_F$KaDCNDSqNNfBSZq#Dg(uabl%QT*uZDfIFHp|Yi;;Zf3Mx%G|# z_-!*^48bk@wtNOznQ|I$X1V(Am>}>Wj$o3y4y3v|l|aj+m7`?MOv-V!R;wLaWG|T20<|M8PI?4=}3W~;~4n{aX&7loIs_FD2VrCu= zH{HD(icW|_;&c(gJkol+p&wjcLTDXA6Y(2|+)ZVp2aGk|z#{Ma8+?da9d7 zv?qGT;yeP}Gz{dk$#cgDS(l`3jAaP#4(8VZ$Udp%!0u(Y*se0-uApGC#5MHb(ihxn z%JqUh|%v;PC*;mgWhS}3O)V)m)kFN#GuoTnbwj&S>EDSd$m zDr~6(Gjl)Wb~t_F0E#X;qw(Dt&(iJ&PP-+9CD!n_h|}*i`Lcjl@BG8Vbq}gk_wblp z$aj9(&fquycoZ06@QgqF`AbQRZHzY!BM80Ab=cBw-V!Y!zc5&`ckaUtxC)na-s}4P ze=a~%RrE7@t=ipZ=rT^)*4CCzt?-S|BVOmnWtg(nPDl`RGh*$TRYoe2XU-b&!7xAJ z%qL6JXB8(HqGbo_OwGkp@))Ae!V&rX@UiL;BduJ#nLyqN%9-!gjSQ@(0KJR6Qg~3g z)iOYm4RJ$%2tcf;s5sf0iGjCx^KMXZxPU!OE>Y4~xEeD%N6SmmvaAXtafY5Rh=e4N zA1rxG^0g1(o4%os3mpm&`@U#`8w_EJML%YQoBWbOb#qh( zDhE3%!81(x7dCZhlbziG^1zE*Zja_VXCpDtw~+pxAbg)(Vs;bcwBE@Wc=#K8M}d^A z4D8Ywi0oTVv3sTNz1?M;SObn}4|=U~Ai(BjvBFEE?kxUr69q_V84xFZKo{GgeAE7n6QSHOLs8XDapj z2Q|!G@ypUsc9uWP!bztO~;>pj5MJU;B7#J?@qCj8P0sLp#G!ORAgkInr|~4kU|Z-AOH&9E zQv$C5sTu0?-97$zz z1L<*S8)jdV*wapMBMouO3+$NuF!_ihOzV|wYzVIjd4O@Ync@9CCLbmCKf3j6&nj2X zYE&7NaZyD@Eo{q0o)5(%x=|hHB~&5gu<}U0!Jr6O=!NZ4Z#vVZEF(nl_M>Dgg$>*V zagFk=Vh+RQqQw2$nyXo^;^3q!O7-Bv|FyoRHnN{>QO2^CoSm+D?Wu)vvwlJF&wznz zm1+VlE>C`AUhHlUpR!R=qKrf|@nRn%fK}K)XfzFoke}fVT|6%sHE4ktmj2wfhE(vK zJ?f08&OL!2MoXk>|-Q{rXo(>{gxl2HDZd#2nAVM6yP$ho2kU4Ev>w!u<`%rj72j z{>%K>fQU6ChQ!lfq%+3baqo40Ui2bda{QL`(3%T_oCNIzWafGbyfUZ@2LUN*VsrDn z@U@r4|6q87%ixzC>F@0kzO0f})a8GelGOG{i^!sOn3H=H_1w1#02C{E? z*bY6q&Tpmn4uJ2C6YjsmL!v1b#+F!)K>;~O1Zn7h<6>m>K1|F^qrZ`M)oP$z_9Q@8 z=|mfd5hejtn+p|i^1yU;zR@xQ@P;z_XsDq`WPy7V@d7F}#54jM8Vl2D!br7DTM$pl zvyClqF0t&?#(Gb(tjxeDZTjR&NF9D@(gHy2u{dZKf+EUEP)=4^m zWb&|38?GwZ#n%ErXWh%vPfSEk*c^*_WhBwwdRC9%UQov(PWLpZM!fl>>5})*S6yK9 z1T2)zCoJ~$=xU790JyF?B%^PiKYKWMp$OsT(Jw=m#^H~+=e#}8N7Au%IEZi3{cP6X z?K&NSfL#eTFBIF~x0(;z6N~5!=oi0yt`x`m3Skd>V5YUH&bj>iZ=rQeyXdhJ8%C0iccT(S(3o-dip6~ zZ4K5|Yj!2l77KdeN<5T&occZyRd!6HK7(m-y9 zhE$q!_%{sXGHp-cLmZ--s@W(p(kTcT7rt?_G!;@RS~j7mmEY;n@UtTOeegz~B?~-S zZ8g%}VXp@!J~2fN_W&20Sk1#M<%X_n0c@)RRAeNn)JH>6=(%J{G4ZK-GPYVhp1gY7 zeuMxga;#U;7)#AL9`Z9>mYJvREqLlU)T}`vuvA&EHj2I-h6gk!kbeq+5mC?RD{Mg4 zM7){R)CL^Jl2+h6H`70()2lN$P-jQ3UCDZY2-cZJ;5+lEPO8t9?5s(M)R=z*q!>aB zhGB5$;YuT&R=u3Psz?S?hhS$8nHA(yMPJFS`o$|FJF}VxBx>^*F5{Oji>KX!~kNRR9u#I4(#pVE6w*u`;T$f~Cez|vqI9ToU z+wiVmeIh#(B^MxYF?Pt{nQI-Q$WKpjGO()z)h>da3@Ff%>D{3C9;VU+q>0JN$->vJ z7CjwZ;r|@FxQdH5Y0KzCiGVDDy9_KIC{>m+A=nMFE=%t%+@d5~d4niv6FYvzD^=g*$=bZiab&dnN zWesw*pkYPwi&^JA{PAPZs-rmG5dFxyfb2x_BfQuMO~A2`e-6_zw|luX6kC_Wlas9& z0wx;b;IBMdc%oa!zSf^*u&7ruw-X=%7}G&L3E`=BU+9?E*wM8a=)bL|7ow-Gfqc7` zeI+eud4T{d4M(kPZcfgs_(vZuKxx`i>0q4jVSejG%z?qdR8L|YoaIzhUV%PdKdY-lp9UI?Ts92T` zIpI-wo;qRchvCkppZQmSiK6GQj~+bxZp9o-M)|De>Dn zVVm*ZQG=S{WFDt|i{>3amek;puD=jjwSS%S%g>#PK={wYn;-pYG0c|9mhWWO zBYhz-CrpaBS+Oe3x^Pq>zi@8PEm0Q{{=VQf8}NuL*w`&3RRp9P`z5^ z^<1}m_)wK?ga%T}3XA%7x_q7?y(f~+loiNwkuunVA7c_lP!!z}+ zMEC~QQ@gfgyl6Sbc3hdeWbq3frK){#I|1?p&gw;mx<_C$)SnZFQR>@gk8u?T9}y<( z!x8n1ob2ofi%Piw3v}~>k-@#rmI30&+UzljjfcR z;*^%{4Ebnnh4|K3M|KecnLIgB`TgO1U5q!ci$?E^dJyYfgPR5o= zD9$E$Iyx~?nGUbWR}eMO!aDN?tHoZAgf=m!gT9S6v3^-zfLbzyCS6mCDgBu!;H7Ji z_$QL76qj2hpjC9a`|D(z+Cplxy?4=*ou;E}AVBbYDR$-$RgvbCfV07vp8{2HonCqy zZr1l?F95cdpSvsGedWK&kFJgmn~0>s+ka<-d7NSvh+l zdQP!ah~`DC9}^A2pB$|+iG^YvcHQR_{XJ^XEj)imeE3t*;fN7l<8nzoU6?vzBf<-U zT#}Ul1Fu9p*}X9X%BqRjoA5&gi4j5`9-an&<@v;{8W`M zC(c-s@ZEd_K+UFAOz(zsiYEaq8=SZ2dm7C1$X4Bh!2e8ZoI)A-1+j~SLkUTBObH>T z<)L2`*6}0G*XUi?oFRtx;g4asbM40=eaf99Ry$t1x@^R1wrkwRyRx4i9c7J$0rCM# zuSH_a-uI>z*-vp~I0)e78+teft@Rh2G6%9)v%nFr5QKsqJ7B8N=_tdaaNeq`mjTljl zz4o#r|5;zY1T*u)zt9g2(C3jmhH2G8yX#!01G7mRRoM5kxi~pX9n<^o$wJ3SN(!j( zP|#lAFVC^11NHA7%E-zoVb+T52i1So48e|siZM$E0Ob9qeabOHiJvyvZ>Aken8VnOkC# zrrKQ!K~l;E>@~(>{Y&f#Ew>#Oj!twj$*dANOwR4FjhnpxsPN}P^O zc+5>UCL)u@d}ocJN5vilX_{G1>Op3@Wurm$pRwbk2AkXj03C*n9<GjPX&*Mzdk13E~2C;aeF5>IqD zFzw>xiDXwnaPdUgtKsc*Aj6-gd^M#augv3vXpMx_Fm7G!7kb}4T_j2lJW^hHz(Y94 zm!H=n*>JFRqTnqsM&)rM6dyCmnfEft#rfWmD9e*s+)|ZNNmB2N++0B|=Z0sPN-drp z$H#rB-e&2Q7at)%I^6v@ie8>5ALG%dnWmW=z?W(z9=SW=Ckk3z z;}v7JD=sIUKdAVhQ%lRP9+KJEX-ow)$-0`dMbII*i<;svqP7s!jjN~+?%R%syNj*= zMEdEC7psrh21-iWg)QifXJxI7#u6gF`Kkx2fPcMmTJMb&f&CrVIAPO-2g(kRKAfv~ zr>h6#y=dz}8%y$qEq``E&3{VqXQvf0s}>)%#Ja9Iq{u- zBI1>BUI6coRgj#e6&W)q0%8PccpFc#i0TXCQ^oG5h0c=$(u-HpS3EGG3jB9xVL-4@v&WN4#LVht>}>?4A*oNN=SPJG7=Y#)1Yn07L@?g` zG6N=5uNVWGB&;Z|1P{T|w6+4|K~QMbJtf|6A%<(!3@Rk=?CUq|_EVt2&i! zs=*e~M_3Y4@QeFJu*JsT3TU5^8E{gs;sldP;y4k|8w&Xf^bGm-A9e9!z>=@X9v>DOsRniBr>3 zZ7LMPPdtzgy%| z@qyWWNttL|ed#Zj1_z+ER(65g$&zz&M)lD|ih;Tc9U>zph7K&69L7lkdk~2w(SyhU zCj?M8)5$ppX`AC(GIqucRj`@NXbd|qv3ki|9)eNmKYADo(+4G!_L*?+c(nbf)y|w%-QN&)uu%!!xyJv9VulXjWU2H7bX&!Jyx@{S&$hK0iM^ObKd4kut zkduMrFU~9Vwq$AW7>y9MACXf80y_z#9mTiiISPiskv?1Hb8&bM1J#r5D>g1t{2qoW^4hc%&EmSZ^n=PS=N-ct5y8S(V zzsw8%su7*EMPx%mgYdO65T)(m_E}Pk0Iu`7Hk^J?Bb*TNSoh>szTTiHdp}M>vEOWL z5RV=fi57qMQt z^7vL`e;Oh9Nc!SBQesk3Z{T9*5Bwi94!_ICe|k*7&}eo0FC0oQ4Qo%trh-FiG&JI- zaZO7?U@;X<$7n{8Z*>;OrmUOBV@F z01DhHvp}Crq%^xmP$rG_acr3*f1_;n2gIl&HzL3IUdjKY-3isGmABU=$wuQ}lx(iN zY<6E|ihvLC)D=185Vq6uBBuvU5JN4UpkY(bRi_8}5F*hHKv3kLf?}J1QGhQ~ErtoNw?e7nds7Ay zRdzb*(b3P=5O&^#w^955{aklq@VL}@3ChyeQ>r0UDn&n@$uIZiFv4`P_!p4setgQx z%Iu2;Uta{s3tr&<-VVXZw8F4kw;>{Kl&TxUeL7<)PLSUeJs(u~B!K#VFYwL;Yr8KO zPRk`JK5Zy3%R~sgSKB`VZYNnjRRy{qB)Io=_=u%_1c02H7itjx7cE(i$W!{f!V|@m zA&lDP&uiJ)!q)~CJ=Q=r4Y0E#5vfHc$t46Bt!?Y1x`%M=n6pFX8z}Xr@#_oXK#eHZ z58F@hO!2_0G$bSu&^TmAc2I2=uApy-?2cT?CEf&h4EhRpd86BKRrUyBM zF7j>UkE_ibmcdABP!I}8$R0D?U2hM965X*^0nvkFi(zm(%1Dd|S9<{ejw$oc_u}7i z?wzt+Yh+7Ckc@PF6f_Y|?nU23r)PtSjw*n48k?Y?py}>3(nez--`LG|nU-TQQ&7J{ zv+=Zjz=$h5p|Vr}+{#?+I8A%&PpXa(!!@r-oy5oE_(n29McXlc%=W6Rjz^(^5C&Y& z^3yz+sgw{a&L;=)NB3=<>!_7*(khtg2f#yjOz$M(@=ib%1hC(1rf1*WUsR~JnhpEa z{XhJ>WK1;cFEhQ>dLn?wkkFcd3NC?yC$um1KfLRZm3p7A*2^ z+PJ+EuN3f&#=Lvv*QcjYz#-68^*viP9YO%o9v^WS02Xp2vTrU(L;tKBE=MAzQgf6e z2y06+zS4&#$qeC11ouDNv5FI3~ehcgc4s zBNY1Ild0(^J6}%2JfhW{{b3kM+D#J=FE67EFRn+1!JJ5V!pGZG4A5xUvF_0|#IRH@ zzBXeL@e4R{F7+KwgdytKK-kH8Fzwg#ClwzfcU)kK8@`$KK?#w?No|l24(I8eDi)xy z1+x{{pK^GIcEczu3|qp4|0I?`6(cVnJY?9D;D7u1#mS*c*=!SEjiX4K9$^U~j_Agh zI%?Yi^wE$%;4I(;4jdbWhJ6)4_F#8nd+QKzl00V$MOwi%aT^XO185cWd%M4YWt$V< zA4z}lt_eGQF5QQX6nw+BJDeCUN3ICN%SvqiXr{>~Wo9b>J1W`#9X0(1#*-(L7#HW2 zL-wmXVL?Gw!vhFhRvx-u7;^1IC@^ufWL`yigkwZCJ7u;NNSn|AtVMX4Js`rOQ{G~J z*YbR{(g>w;iKPVyz)7Xi(a16R3*mv4lbIuql*5>8{T`wMxCf*fAdhIk`Q4^C`3GB! z@4shj#7udU+!;J5RF9wby#rLcT++~%z|&x6()lPKo-^oF<&9#DOG{s8o5jxTv8$)u z<}4$y?T6`6Px9gQv>5mov79#t91S{0+2?ZX3gzk;rZE0or+)-U(phAVVHS<@rb;L? zg)-XL>RK2s=0MO=I{EmJ0I1l55@ya%tx|af4+sHzLSfWMa`a)ig4eHCA}fgr=%HzQLJ;(4&J)h9j>PZl<%u*U|(P2+;e*vnBX*$K*_YtsAzhMX; zJlUyrbGQHzDXC}DG4rc+ysPTRk8CxqUvcwUNk)LZyNY>W_OdoYJXig;4Yl7~l-=6{ zGD2;1F#~x8UN7_tt8f_ZZHD$|%8eC$TS6<3fr#lMEENM*gsOO z1sKNm1$^Q0b~A^$f50MhadF?Z&c!0VcZZR=i;S(2Z9oK3;`kF*SEW}67<_K|msIlBBJDUGthb2h zD|DmnqeaInjGL^*s@DJ463qW)b&81W?@eV=$Sxn3K$s}4@927)p*w1rG^_MsB~uX{ zui$P4EM^T}lnRH4h{(aTh~Z+-GGyF-(ABpn*h?;e5cvvkPhfSZLhb)^0Tx>BlMAvw z-zLOB+;WB{sIty-Kp*6=OY*d0vg7jiQpDUZ{?IC(K7WcX)gnD>)eEkGh%j&S+gQ~R zQ!|SR_~ajiA?o@#ul87nDoQAFsgK)o`99gj6XeY9;wY)(Ch38A}sF<{F@pnYLu zk^aqYdnE%GI}|gJ;!^Fuf&!ArW$BdO4DHybVqy-s7A9FAfM^SbmPTsvVhtSl&~r*q zt~8hvx-PZJDs~P9p)^=@M_ycTiEcFm30>qH1_|$V9{a9@>`A_Kd}lZlusB@9j|b-o z(JbcloCJRqPj3HP1jfQkJ<4kkQcRd2oHjss zKKk3QlI&IEbVpZz_l~NeFki{SkizWBI8V|a)Tyfp&4*GTN>Du*85)+)yb>dn;~11PAF$Z0B;j}a2pC4*cb!q1_%&40_~cR}nm@uGe^5{I zm1%W$i||&+YT0q*@sJuC85*!&@GX(8%4NB(+#ZbWd58^D0axE?^B&o5R5rwfTN0iOV{q*r{)S{BoSu^Buovm{M2o>(a)6X8>a$A47Z3e;rE6STI`?kJS%}5} zP;D@U0w?tRR$fQvJS(jca&kcMPJWuG2<5Z8sBXGz7Q#wY&Rb5Tak@^ig;3E-MC|1e zi41-#Ta2lL^=$S-yNba*uL+BZPuFFuAlLws&GKYqOLq{3n6+*SQ=#umpc{W?8E zA2L8#3{t&)%Pq$g&8W_OB|2#dc0Y9Ay>8q-5%r; zYyN%*g%u#>UDqp@jKx1ys8#Q6BsUBiWxCsaL@O{RU07IX>gec*!6e2Q3G+rMOn+z- z5*1r^2ztwc-1PLRdm5g`kZ47Sar<%rVn>2v#>r<>D%nk>>m%Xu>F&2u9CpMM^y{;9 zRE}E+CBBHnH+_PS!LUsBqJvn(3^Ca4e1xMa+tln}{r#A`FRKQ$9l5ShBC_W~NR&!z zjj>t_4Qq)EZ8rwaEhuUzp{z~A(qup+f$eUZ`ATZEYe2zrtB3*-9{c43qY``6ELF7E zs_yIMHTdXHx1Z@ilyqeFb1)L&Y%s=J;L{|!tTwoVKbTHdPHW|83Od+kOGIqDcUAuN zQW%A2>YK5G9Y#|S2eUA?b0)9bzH9{O)*;{h_3nLHIXSBXb!jYFsaR7_Zxk9Mr_m2M zdPXsGLF7=|=3`kCt?D#dyX!Sp{*2}f{x`cH|FV+^<4nhYbNfWAdGnUVX?B zWb_L1%&4aEVEv){7yiV_KJo;S)hlHBYLyS!fE5YF2@B~(!OGj4m`0oHpX-f8Fb1QZ zp}YUaD3MPb_YjA7n5O9)GKC|U$|PD#N^9A?&Mj_;tq|Gz`}j!U6D1@#QI@{-Rgv*i zsla_8dVlcUJr?CB9iEsZbdT#~G?dG4|G@otf2t!7X|vD0aejBf;EkCUYfGzVTO|Z^ zizS8X;n6ZeNEV*EiXU!sa?Lw#_X7Z$~H1Gob92g>S zj!)^;Mw0wb=IU-mL?C7ERN=jnK*Qsk8g@J)@jVL}hS=puLCmlXLmxJA@CTaAghYBq zZt~`4nl-}L>trGcTw#<@x|2dlZwz#Fi{VlKd9l70?)GrIPtc?P92Jz6i@O`%#Y5=` z#Dq{sH^!24b2y;_*JHElrNzL#`Wa;*{wB{R5WV?QC_k8tHY{pR#xt3EiU`H=>WXuQ z2_$se)Sqz9MlD|rx9g|AD-fpJhh`%fk?>0`p*U+`VPIgi1Ltl=mO{nA#IR~N)!h;1 z2!`u~?l{%MT%iAb^=uNmsN$$gnfC`SW;W*{2lO^1o$OjwInnyY?XQLPwd*|kk`NGG z1Y$BFH263+O!Sqw4%*P&Gi9%yUJ86&e&f88Z4w*VZ>SAi`%{B>1P4+#0fg>nOB0%T zmH!KDzA4n*{c?2`_4i#xl$S&I@7!>j(sp044Md&?FWpNTo3%ws)`3NQEkp;L8-*ga zQZy1D*PTyzrL?~!9H$7UT?CzG zT6tNQq+dcN5&nxX+3Zu%w}NMsif=OJs;a6=TD$nqtWt-qK#TRpq^7P)wrwQz?7Q>? zf{^v^b&?D!3+0U)ggh-$if*Q6+3t&A<#EIM~=OGvs z{PF92Mke$fBXSSOnWrWvpj&&g^0Qf4h(qrjaQJpf4MgbZXJQAA4aB9KD~D;HIB^K3Qij%N z@Q1r><}J1w%8}%1h(+s*zLvrBd_lcBaqtS-D-8Wkg{QyUOH0C?8gznIrd`N!WZ|gGF@>6u#B;Fjv_Sfa6uh#gq_|U%DkO8!xw7>my zyck5zkYrc}`d*#?MrM(5>g`JzJ8}(ii%=}d(x$P8V!c#~J16bNC~Cipk7Echw1Htg zyqTRX0vrvKbxFLuy_1)h@O0QZ+(qp~3ftVII=G&xlvvG5$N+tfKQNj1C;>T0qqs0nw zadr-4<{%JLOc$_rw|!g}w8xF(vQ!N6;J6dG^WwQ};6r7ZH{3?>b&%T9I_7Y9b%!AzL3omSHX+n2#UnJ41s<{vvcvTUL?1hneXlUgD z0hBsJN`MS1;-?YT3u=B89|&rAspA)6Dzh!J|4F2@=DSOdgTFfGzQ4qMm}a1Ax7Q>> zjTPVti9!qZ?p0A$i5NMRJ@x&oZ`~Rvh}9%Umx{Xmj6csKQj5JUic3PN{xMJ?5ce`t z8gW_dR7F*Fa7+E2j<~zOMVpeQB0K{_>D>DF4#(M2G#cRO!*ZVhVUW-eH6@&%b~6;^ z$l8<-Myrl~*gjt{%l(VzdypxRTbKX5?ZeRSd~I&4d6zJZUY58!4HIm za^JWAM7xXYGEzrSy4!Rj8+lFXB%%IR+9dxVZwHdRyBC0-Pinu%YRZH>5O#J%FWUr1 z1EiVlT*$##qMH}dcdJGnmqIPRZlC*Xb(QF-Ny4a(Vli@i(Vjc5QP_tvyJJQ%X!Q8ONL_7|ZeIN?F=v+&wjV+k>6&xO~p@dq+$%HV+zWqe5;8#)!R zG*{m7X^i(|^~du$u2HQ8D!)6eVJ^lKDIXM^O2XxJM?c?qwzE8#`#qjOY75>E4|WK?vG~~->@p5b=Kwt z@O3$fPgA&r(hCJfcm|ZbbIVo8NN9q+tpe?;VT45|HDBL> z$2n3^ga#*6V-$TzrgtGt<;5PzHBEs-8}YejO@Wx7WvETQ_rFf?oD$A2HpBLYZOUcMG&&eVG6% z{$i5qUqAbY>{=OlX2M>(^vK@@1*-^R_~vR^`HUF^vs-Vu0y=||-yIG%>|~&vn4LZW z7(W!n7UDX;mcO?FB{RGfkHUB$pQvX5{Q@&B)J+=R^+-GB6Lp(GQhpQ%h9&R#Z)hbV z)N*aHD`+g;tn=?S!qSGl6vU{<{X=jgW&R_d>OcOb?JV|yM6e=azrB%ci#^*rNQyh&7*W;%*2)2g(2`V>_neo zu)ku5t=Snl3?`AnAN~l`Wc@%+bh6?Cn6E4I!v0h=ZU`Kh9Odv0G;|kQ`E*e-+(YBq zypWL}poL^cf=MxYt6EAjeO8??+rPHB3F3KdDw@ODPaI;BR*c=UV^ZeYGV7u|-{Vh< zJH{wJ1U=vNG+yiQ_G}xkQfp~wYWG75i3YHRQGC#U)7E$%&(L#n67uu&v(4_ zNAw)uLeI`9HhcU%!!n656mMWbEU$6jmkiW1z&>*1Kka9}v4JwMBvm-cvLoKiNw-8B zYg3)6oiTBnd;dSS-ZCt%U|Aal1`qBQT!Xv2ySux)ySux)2ZDqUB)F46@E{>DxI4k+ zF0#+LvcLOxo_Ttechy_f-2k244tTB!?{#e5>6+MQ_A_MAcI-f3^(*ATBZ}NsN!h$a zfkRyemWSu7IDiK@^*2Yc(b1=2^}|62l=p+XEHH@(ous=)ZHPEnSxYIRu;NIgU-4Lk zS{zI!@~)y9Sn233rb^)spzUIIL-AR|^grl()Vs#mz+~ZgEO?M9enu*kS@#w(6EN=% zJ`ToE4F@8~5ohPrDm$bt&AFwt zPAyS$LW?J(N0isZOf3bwihPh-kxc6y8NiV8i#X7MRY+b6CQYso9kv~_i98$osz54O zm*ao7Wr?Z~IK9XbvkXh}gm>8cqPSH4$z^z?tc{0|8#dnps}%O(4>Lyt3fH)7pPD^3 z5eki!G(Q(izyTGhE|k0)1<)w}Qc_WYmCa4OnMt9v`@=cJnclYG8}znvz$b^vK3HWRK2@IXSYZt;aj7^KKgY&WT zkqHmv8^qz$(AO)!$Di+!P?P&kJO(g}LmnDbjn5#Jm~;lgWu{2;-pT!@ZROv3fC3V2 z4&iC+IP~XtFG_!P6IY%JW(f1w^6zMg;}TIy0A1^GUt^k=Q_%MMH8dfAMdw={hTH(} zsd`$LAdFuS&ueExEFznmm>XPVN){9liWqqjFwC%ihTAaO4q8(^1~%`e9~-X_ObiU9 zoK(7>;o?5#Ss0)rLk;5TNITiKnj%4qrp&g!U+j~?KL+0J@RH*)GhiB$mMGh)d$oi9 z`}qBx#b%#>(cm4hK`jIaz1$FMWgYa54l2xJLku_STQYTBn~pFpW!Rt$$3R|go7141`^%pfcL-CyQSRR;*JGR_wa{LBMCrc z5U4(zfF*k zIJXqM3pp}@XI>zkNJjsISX+wh zkCe|5f}8h3l27Mr!A%`GoSsJ*x!aQU(DWo_9N!mA@wl$Bfl?>Ivjk0*p0yN9?-m8d zc<`lW;U$kBlCKgtp{MJ5itQf)-Te$7)Q{iah5XfA?GZ@MP4%Lr85*=}`(d>8>)`=( zFWKy0IwBI&AHXtIBp4s|6i`d2F!_D3Z`F4Y?|g``8iFsCbbHZakuoYTS|!gg4$r$j zBM)#C{~Q1S#e10FOSv!KL$_@iJo;-=_EE(T!6v+a+PMC`z@j>H`GgIU3!A818m?-V z%{(^;c%{`ozg?nKB?4!{I)BPfTpVOp#uy_nBlWl+h6i%6TLl2#?wEl-(h}ajB6Uwm zPZ!^=n9sjcp0|ok?$V1fKdD@voXNxH{@IcO`q97q2wkLGpa-njAQMBse}*y;W{(|M zMUs%xP0221_D2e4QjI_X%GZmeA#-zc8HMwKQ~#hjh@3b3%TFF&G>+WG>$Jq(H6U~JpSblCo~2fa=ISmJ zDuzGtzOh36RO~AB$h)kYCW%G37x{Z<1dZ^wm(urL*6C)2#hXLuplyG_rRn6ddW?3A zG&DkUNrMcS(>opwi^>fR`$~l`8+4zu@S;W`p{V&%($nC%tMhmg9mG!Qo^J8tro#b4 zMST5IM6caYQrCi6)Xw8`j52SDWm4gZw^fK~h9+Y&jTDxGeCMD*YmV&xBh`fms$t)z zot!+?y4j?)6st|@x62>gV@^gEtVsy-3&CCgz=m>I##)4?-wrbJ@`HDGc)vK`1G)4S z+mL5Ma^gFh6vFRmv#cuX;js;};xyBwDurl%b)MU6WMYeyejoHwh;1YJ*)W*mVd$ij zOv-o&k0?H=@tF`zgeKW{eif(Th*JXl2Uhl?hj-YYk)!g0ci z5e4{6CT&{o>@-PBl3ksfR*)o$sXO6E=|>IG5zk$Qr667_Aaf}Duf!jvI5t!Gt_RIi zQ-URwnRoN`Rcu-)Y=IwqR(aOc=x8912-V>^&ZEN4!H+)f6_Nz9M*9uo+E$3OsPD!6 zB(TcJDOd&A$X7*@rbQZ6B50mGp?E`AQ?T)4=f$H{Gt(0Lql9>6@Up8s^F+};@P(2f zKXXSFedNOG>?%WubM%_vY>UyVxuE{O7iU(+s&7d75W=^SM??)RG;*+#cK|B*&@8kP z*7^dQkhx7xLk@Kio!p0mANe`XZ3A`zVFQvAb^xNyd3}uqb`~?;K*OFt1<+H@`CtFjst^ZPc}n|rPQm$_JbWi^{)4- zC{CuyDu@LVzScVw?309WQp1{WZRPWb0d`BHfIm!gV*|tDX>a`ba((_ zS60MQ6I%@v!^PVcpWAw`X?`uVvw{-%cl^Yd&Ac`Ck1>9}F@g6f%~5t}(6?n|(_A0U zvUy(LZ`sh*h&d&IV*PK*CLHmg7LzBzHv{BO6BAB)-ZnVMrsaarl1D?GSb z1aipXCiBMvtF$yQ1U})n1UaHbRVd0HOdbnm6oTmZ(Wn%*uc98?+j1p)SHZSsYD2Hv z+uPJhDzsP|2_tE2Q;>9E}p}2w&G5e+mOhpm?5(r ze2!&gz**-9JuWtAH%6QU4Xs$566$ti8WnyO@d+-j(s}H6XGPt#t@^BnMbU)fQeCE2 zE3Kl8(nvvteaVTJK{HDoE9(&(VMwgdUH&(vT&%h`u&WfSh6Z9Exgj$b768?uuK@4^ zl8Mj+XKU+a%4519$xCK~lPs&UpbMI9G=)mGX3Wb2F@vS?hmQuHj@)09i?QedB!Qj{u{?*v=09P ztz09-O5v4rh(we~xl<^{u&JF3-V;gbYvHgZ6Nz4iiqk49NINS=ovrImgc*gYjd>{ zSKg|N-HnLLA#@LORqUX`K>rhx1uzMd0g6^RQ5>? zoAp`MG9u&uc&52|nYRx&>Xufa!cvbBF8;Bh9gD@7%=z>|qL3RWmH|C3M#9>O_$La= zxW65ukkDh>?yjqw4W8Gx_w4NK|K+UPh;C7~r0McMkx)wMxlxzV(bM#di1K5;ZgwW_ zdhQNUEFgp~A_(vRK0KhJE==Gqmx{R+a!WH+K7YW06k2QRt2`MVK01TATZ(Z8XP0;w zA<=>ABYeGEvFV|oxex6mq)7vvti&QGq2Iis6LoVfQSn|NV*43xCMS=2rTC2Q7V5Jw9lD^n*2JF(A;@pW^fF6orPBpdk_!B!?{-I0-Fd~!4wq?gCd zHjE#ab1a%>Ds_;<-XmO75bi*wo6R<@mbY{vNS;F1;wuY#pgHE|&eD!Cp!yV$zSi_P z6F|TF;O5k(Ac^c^1`|KA=xhOiCm2HmmwAkH>1#=5nzKpVsQ zdHyp4*Ssa}4{8qsw&jFbE^(TD(}ARH?61kCZC^2WVppNbqW*UlAlJ<$<#Vv`$8Mw8 zgM<^S@xHl3Xr?QB75^_57P8EUTy2)Tn`(izspDKLhewhna0vW{S~7(qi6iw>=9)0H z-YW?T1B2-MbhH?soQ0-tkDyP{+qJ<(q5g2eNh%RsK-L1vL3P*n=TGapXy@Ry zHqgKZGFn;WH?fFQ3cQXLCU7#1t}*P-`g@+Ce>Gr=I159rxp#gMF8fF1@bIuAQK<^; z046nD3g#H{HasgV@d!nag7`~dLoNQog;9C&cuzQOth}hdEhs7vR)S`XBV44gBzl|; z73JZmb0)($)}T(_%+pB&OOKt+^>dr^mf&x>LX)bZd@EIDQ*^}ok)iU{8hE7b>MaTR zNFr*M^bitFnl~u8!TlQ%Wj#k$DLuVzk-QZg7QaEhoHTKk=7*8Kg%@KmFTt zkNwEe*wMJi)LeE|mm5|`w;J5Y&&$b!gU<+*9qYOr1hPVoQGHtlhaI<#NCzac7qE)8h|wDWxvaY}%Jp zXeim!f|o_}AfHul!z^GYnN2=^dQY4TH=0bcK7@`KNiJaO1_5L+B1vdUzDR{G_C?FG z?*=5dE5z~@^VWBVmQ)M#!cRYP85`ucS7QdaGEWm8{`qQDgGs&Z&ag*&RYkr<`vdV- z)(gU%)BI~N@3NO2OpEFJRs>EtcRg4&6ymHeo>u4y*}F1Xgq~35dA&;0GttV~qV1)a zQM_60*w*}ZEIKKna&6+D;eCaheD}@#AFCLWapw@y1O?bW_`{yQf8zarcBm~(%$QrB zrdi?hv5?mi1}HC@s^0;w4p8cze`i;d@-@5%8RN9QpT&)KO`be&pO}gMh-ox|bk0d=Rb@2_9hDzl zQPIR9q?spmMX)C!CHESw{tTM+$!UHtT{iz+i#bH9qc`$!EWm`69OE_Kwh~yG9IdkD zYSu|^{D9-C?(e@U$9Jm%W<-iaQB0~{KUmO`7>4^F6o*w*E^u0PO8Ac)?i@YA{4OC;VCr2hy*|LdZ#mj(n9*PDFB9y@Tg|% z#x%rPErZo)6g(7TWYK=|^$ReZPjzOv4LIe|rsLV{OX|zM|B&92;+kO@=&x$iT1q7d z8YLj8q%L4xE)Z&YzYMAT5r6VB@-J`F*lEVx5k|JYoYE``v4pu9QPuY=mye(1q)76j z5pKd)+u7uN(;~9$yP`$J5W1~O;f4Rc>fz8tnlm-aHKo#tklwO-}j_j?ljDp@H>zsmHG zxKSTQNC+n1CFTuYDAHY*em#Y`WxWra?3j`|BpHR}EMw!~1NZPwN?#n)d5gcK(Nh^Hq5H6~cVnB!Wsf zhm00?RFhQ4fO2}qk~Yn$$mEvjdp<)kZPJz$NL&I&Bor%71RfL{}&uMB31 zwZJKNs<*l`k&v6~zq7=t&gSbqCO3TEPeQ!9T#*7hKjS`^(Q=_D`tIP>oN>->;WG!$ zrA!D(k?EJUmxhjPd+(ev_VWK=|2@#1MRa#a0wREKP7hMx?1q18RzG?RjFERiu1#G;uweJ6o8Rh-sU1 zho@5k4j!%Co^QzYmw12B|KG-aH5`w-;nBge zx&(b*;r%XuDu-^8+iK6n$p+e7b0JM?jJE?Q6-j}bV|&E_1KdfU_f~JGW|7hHrcg({ z@0kmGT)i}Gc~asT30Q`(`nWCgJBH_3P}9+7j7~I^U5P8mHX4Ou%1l(#fGA4thfCf; zFoyvSPO(jd3QPT?KROEws|@R%_YU^h#1@d0AH?K)ZnNa2ZL;VVMW=ttY@ar4o5>kt zL3~n2B=m0n?Q8*>hDcd=tiaCpJE}C@GH^uaV^3E#iA{5w$(5$4uoh9*i%JO5%gHJ*kN;-J*uKo=37AU)18vFiL4*m#|HsXn)ECZAI+@|h4)B5`K zkgqGv=K4x^Pgk(2Gx$XXX%{>mQTCV^!v{(}FTUfnW8On$`d%}xmOed>>33b`HA=OqiMCoYz17oZ>L+@6h@o4q zRvyXwNIvI!3#!eZFL+QFBv^>g<3hni+@XTwj#{u zwYmBoLK^fK=CRG&S=945vUtoa2BN*Egzy>1@COuH3{MW%=6?(d+%F&ci$cB3vR%&2 zr55JXca`)Tm8#siLju}2-H*t1oI_AclDaar(&9-mkWt!(9~$cR-xeVoJ(S4hMn={h z-e<7KN)POsqa9@T9Jm8u?cZ3VZQ3+*^g3IVhCcTL?1TFV}gTFKT{-? zeczJMwqmRL?mo<5!c1|q)v@DU3T4F=k})=ovB!vjg6h{4GtT-Y@0F-QMz@pKg=n9ySGZj+f)oYFsC+S zp!L-fACxTqVD*6a`jg-w^QV)o)S!o$SF81?Ue#>1v`&g`b14rOIw$_U4Sg*xI?F6u zfHTEuezLoj3m_3wIkV9OSk*n-}DPx?BpV@S%=fWok$LTun9rek3|6xHptt2Fn3S)*B z{w4Jq8T#@7oXJ~MI7mO^vRwKpM=9~FYtpM1 zJh;uN6oaKq6*BfCCMcvOL9THSKj3RqwZC;%Y<$Upc*x9jy6rZxLV61<;pAN*17D#nQT!^1|UCxHlLj z7XU93)3&TD_{qNG(o~8nJ{c}0(iQik^lyz`EO;L;=dP$%Lph4WqTg7(XDDmFTuXXb3o*_dg@(kC04n9Tbw4&+_C zxF!wb56|zES~WKvq+31sjgElnu1RD8T>D4od#Ibji57b%0o+U$qd zImb+%83QIo$UXabR^2Qb(L#I(Y^HC}o;T6piTwl$=~NPP$y$0G&+*!Q#t&H@x^vJh zXOWMDvZq7cCO@fr1b8DY8gUsveHuXE%h&necqH18;?o-592(qHOrzLh^0gV^S#sD$ zMoBdHcVZY`oeNV3x9NINZU0o8zsjLvruyA(n4CujS4mx&qz9Dp{_NGJEeNlQaYs~j(Rdtr1zAO zEn4<_^jPxz_nE|~KwZmXV8q0l+&q1Ruqu#Yp61q0`K-VQ&@+|9xvcK1CpVo~3(G7&K zqaJaH;6jt4(?@HTSq766VeUukmAVQtQso!iBRPx10h1tDy*Z2u%CPjvC5@HGC!?9K z9a%O&tz4rdlQx)&U~CnW3cy0_upd(?Z{b(zU8YLlnE|BCs-~efk*d!jK#>|S}*#2+yOD&e-Zf|3m6e^TA1h4T(eD}b^IJ5*I=*4l6p{BKBe`8KA}D@bB9 znq!w|ytbE5fuVyC+`|Y9aT=F<4=Cdw)FBRd1&+<*wZSW?@Vxy>E4}Nqz=JFzY(zYt zVxKYbTJXLBM+JW1%}tC5i{=qtc2_IO ztb9{OamyJW|NLtJFP?~F8r)lrX;Aa`0QwN5PIG=%hPi1Fr4-{?vT7+FD=3u*OSl{w zy>mo!x=gbZHW9(-)?R^C!bq?Gg@Kc?m64OFwV~FZM1ug0c5$}}(w#L9i%(uY{Y$-eRTWheTlb-lcQW+v@jN}G%*^uY z5)lI*F2VYwWNAr<`ii~Gr4!oEdX?yAMO29QGdKVeaOwNPZ#>%hx)K5XrJ}l=Ul=vK zvNETpAytnX5tU1$i-RkaK7H=e-NC^`TZ?4>@NoBa`7HbqCIp@iRvG={sEef=M)t^v ztCxui)Jby`b%K^wd1DRqdtP4~8Ch}70I2T*7qp)Klp?q~@5d6qlJS3lT~?hjV{++n zEB!-9`22Z^M`OsBDzlN3olp>F7yu@QGz`P%Zwt*3`o?lN;I?z5u8g|Bb$!0L`m;_? zu5${5FZ!h^rlY|LnAmM@YHErl1jcZD2DhQyK)hiFqCerOQT$Z`&B|tgllM!j z)3mbtxTi%8b)zzpFn;lfGewz^QQHg{Q|aTRN8_a`PLgI!riKGdRkX&^$&PZ3BIWZ@=WGo+>7y}<_+vLyB3fT;4n%navK@Oho-T4?Bd7_uG=}6S_?G9k-_e~>zy{y;BkBwH)@%1tcVDq7_n&uGf50~G>_kd5Oa|@$ zCEVsez&lKOG^+s)g-z!^d>f&98yA~{um^cYRR`MDL&-&o7yWl3S7UHPCE{Pmt)%zu+nYgjOM-g`;31G>_|x0d_NOuhj(x%t=iR z{gAyF!0d&tPQ(k5kup29Y>{H6KJa7c+lb=~8b!Z!KHZAw;Di2Cn1sI)i=jXK&pO;r zt0KVbh==j<+?{1d|313E4$QHaIylk-6d6G~@MXO(ksAI-G+MiV$p4nD{lTcE@PPnD zQM8RUB3f>rXKJKDDMp}fII$OEmLpi^1Z7}s#mvM-rCkIVLoPj!9!J=QcZ1=j$azFR zc>7S_uQkvrp-XaKcNqB-kkR1%q&?j~j+nFhZ4*-_-x#_E+DIk#S=Hul|NNQUpkyTE z|FwwtBRWjcpyvVSQnSB_m(rVj?#|w0{p*{;?+ywIu|j6g#iol7`eBsxOTkFv;e#k9 z8C^R5@C3hfxd5ldfSi(qn&z#+w2j0G3pKR?FnAmROemuLr+x$X0=YUIpuoY9;HNv+ zq2XcE`by3kE3AJq>I3GQjQvQDVCUG`T%I5PDi#0{8|$UuKLL9PZ~Cs{LiQ{)r3bDZ z7hLo|G6TBdL2nH>(96T5CjdQ_m$vIjqr*Vr14}kx-a-rq<^i2LP0jo}5dan^uE2hy z?L@kQRnAlHE`eirE#%D)H0UEp0J7#nij8$*R_8ewso}-=fTrN|wvCLv-$t7xnAWNEqq>$yXy*nK_Xh*}HObq4%|de7aOy-k zG78lEHF+RWkug9V4%SV3vFjfGa01QEItB(9_}eHa>?Loc?dLAFcLN4;kj`-P*#Bklb7Rhz&Y)2@;D31|M7i8QDOQ83NdoC z`4Qflfw*?_eP5-gLMy0x<{L>+D1`Z?*d; zdGf-(3^O-4-Ux%Tk&qGE1-epCRN!9ATZq+nF3Nq~p~7&q1MlpRBFHA913f)8?P8NW zJ?!#K&{Eu47~+JmgG#Z_b)}~Dj6#>%c@$BB>0D*#Dy($=F|yeZ7I+^;ZE$1gVZ^i_ z^Sy&RbDtpOE$oXwjHHh!K%p~3Mrv;C_oskWLmjm;RH!hNYqLcBENu%8&5~do!>J(T zJE70DDtcm2c1MR$ih_udX1HOiq9|n9HV*J-OA_WWe~y~FK2%SHzW91LYFcfi9mD(+ z0ia$1VCp9)nc`#Zr$}xt9PUi;AYWfjxg9kDfofqA;4cNOFUZ~<_1{?-{poI@ZY zA(5{Cofx?$#7G0b<>~m4V}bZINFyA%*!%LAXKgWAUx9FeHS62AALma{en*Gk*!aQa z7He+7M?~Og8xLRTKZa7&IhZ1vm2?D??qXz~8jGKGIrjE`;K_HBcm?D4i#a#GaR&J2 z8o=6w>&XgdyCCrwZLPzCO+&1LMkPgIHoU9#`%cB;d?D)E5`&l5*N4E7KIfhdWHY3k z*F8~V`9&sKR09JsCAqj6OC3c>;M*Cy5P;Iflx7mar{Lh&KgueE0ft_E*rH z6iWCiExUxO7orUp$94GD6FAG+GyE97i}D}SD1mndymEvE6ci*1={7e@j4$E=GtLR7 zJ3n*}-h1KO%oNDEaiKQ{Cdp0YSfjD-eihIl$eqbn$;yR zgW#>;=(@QbwL9JF-vHSv{Km}P88R>k0eB$Z?x3)sAmdhy)&m@eBFj?v^Ai+o-N)1& zw+$cX;)=(3^rkNf`tBpei`3MqCvN3!^#)Kq(2v7ZUvP0Y#!!P}28HiRuhGFrzXEMb zt60xFlmnogpFXV*)P{;`R8^X;-}b;cTTt$<@B>&KXvpWLCE6&VX+Zs9f^)V!HuQDg+ zpeq>SCTQ>5SmNK9pWs(+b|@R9q4$Y>%CE;$Wo=ys*JB$bFKDd(w`GlGvv)>zD93sJ zk(HwJFK_l-!Y2xN3*I2oopz%^C_5L9;Q}XL5^WB*Khk&lIu{b5u-Dt_AVkaY@y&g9 z7w^mrvxZNGVK-vZG%v-kH|s9IEHKt!NU?m&%6Xi27nF0r7U9L7b70-mJ$>=x>Tctt zT9|SmV&ik-df%S#-!?V1^DN;P^QUY1AROoCxi*vfo;7W!GE10mrhf`@B~7iUKfAd> zDRKh+Kxh#rvg%bNsGzyO0I<~+c2j27wY?Wiy#BJX81fF+HONDQ>(t!yuNj7leAmX` z#!>&Zzf4;$rk2=&JJ@%H+`agX0Sk5K+GhbYM$d=Z@kToP`zaV{^y%tRtS;NMK`)ie z!`Z@Dx=%OxYm|H&xWV_?=ZA}31XQxJdRd)6M)1`i-BJ6xAxh!kH-M2Itgy}pK1!cW zmq0J2QFIvk*hix0(nA7(6Qi&p+IKF`umaLa;OdvX*P(3TM_qIX#`}A6c)9en&>!|S zlix=gdoDBYcC~xRTf;rB>DAOO;*9UH1zu0iWFCs4pDMBM37%G7pOTA55BkZ_-^tF* z+~pQO@&=rcyr_Q1yyJulWb_bx5Hf8NX5~Q2U#Oal07fgbIO(aYQ}oAJ{n&^Cnq$ro zxF51dY0h`KyJaVWfHM(D1I7W=aWdo~bRMGlUt}|h>x|4T&qn{k z9OwzDj77Nqztexu?McsOjtgvpPa&}o0Z|eD4F|?MnwA}O%((qNksz&oX^fPVy?Wg- z_Ju(Sczx`PRloZs9H_|kLK1NMt9FzTLjy}qF<+wo zj~{(2*a5rdB!l|vmpBNA3RE2Vs6D5xjo7Arz3b<(p~8>p!u`chGbHAf-=u?J6)BKk z)I)kY{bZjFzXkZFw`sfB0Gb?=Kcui;P%p)R6{8}h@d~$Lj@!2l!rs(Z%*s@tRUDvolkadFH zv-$(Qqaxy7NdY9pIOkj3J=d09Pq@LVc^H@ecI*RS5>>@X<&!Bvh|<6qtUOkms@Wt0Q)32?H5AaVj zXRkt8-#T3_-3X?-&jNks2-jm2qA_c^2-D2WR5DUxZhMZHcZN)=S~dN!n-oGO;nvTi zxWN%qq-JfVc?cxWeQ-NhgPg4d=idEgA@YBzOTy-)uz)Q!UPOtkEyWya(!G-yh?Byh z!7opHlJo|6?+1H>ck1qrM}lWgt1+`eY5!KNAVaDF;d zO;M&O*{#0eu14R73=>O)9F7tP-r1q2lgwVqPyz(wlv~Y?Wnp}Gy}mJc7A$O~_xqgR z*$?w0JKK45@9U$@*m!?$&_=w^lyR4Q9{TJ~@aXHUwa>F+Krca_w$L* z-tV=j%DI?**H(70@ynIqfAgA-?oD_VR;^({3i~QdE ze73NZ_+%MGTXnESHNl7<5#9xbxJIlY+A%NV0frU4sK+K73G{qjs^JjUQy2uG{wVziSOFuAz zfS@icX{d$MbFss`Wi0gSEAezU>a+EFFPw%yrU3CnxoC8%`?@j>rtbxM)ZY)ea9Wr& zUQYxG&X^989d-pVUINvC=sjk4^X<3w;U7U8J2u}Z=OzYBex(W(ihNQAys42-)b!0_ zsDTWdjG6I|jR__+bd~)TCyV;yyUlK&oyKlN;fG!BVfYeuWf1tt_^Av&M9|^GSjRx! zX!9QbI%}AZYU(vk``}b@Z-{3Slb&uMSR;(;29L)bhsPa-{e7X&^N~?BYR{fvJEwC2 zS}h*Zni}R${ABlUGqWonroLFc10u?&ka4PQ95ZH^e6w@H{&fHdO&^pYb*~7VIJ&gh4b?GdPmZ9`kO`&_LS|Vm_J#+Zq(J^SCS38 zGCQR49{l={TP&(*mBk@o<<tqFb zNhuK5|K7B1c?UnXS%yIfYp17%u0Iy8r(%F^uuWF?UQLC`lSrN-jh`eXp7y0}#(zi~ zT7Au+e%aPv$1v}k(6Jclo9f!8N~_dC+sllFo(ewFpEWjlz3rhfR&OEDWLH`i@#Z(epW{L^MILnQ^jpv5UD=j?-v%Z^rhVU0^ z6iJ4LNcVsGU)6@7|TaMWP4D~pS@ExvV>)OnvI0+S)c~+qPBqvkdvrGsps~8VAdmjH0jawd%%)`H+LBW z4g(XzSWEp|Z`6TGLFp|DjPbH{ssLVKnP65-b{H0KzJ+mh-@z^}&LhY}8`U?t?9aFH zYoM$vY8R3aKY5XR%)SPWr*r8kFFVjUy)x#B4@i~pKGorhivTCag+)rfRs$jMcJT!f z2GHsz4CL$6{Z-6gpJ_c+vg)5J5iC5oAQqTh{Nwx7VC%f4=SEA!5kD;Q z+Y=POu|JSv_v|8L2a1xM->+F#SCP|jFhxjHE?Qgr(7u_DArpyex%2; zL!vc;NGJVhZ0S^ew)Azr9=7$0*6$s62c1z+Ro3; z-!33{vQZ@mz(g)oG&Hp0T6`83$Ec@=s{SEYs4OrzIL&-4@W9iq{r#f8UYtwxSaBy2 zw+d6G)3r&%8rdH0!RSQ#02NSHAZOWEv7ZKx+5jFeW(H* z0Jz}tD%h9ac{o5mg?Y!-L?0nyd zTtJA676pPiFsLkzLFK6md=Tn$Kw1ZiuIyh-&{!bt%wQ-=7;a!rQGb|2msiL91IKD z5mQhx83!UE0XQtts{XgiqAYaWC;$w`jk3WJHVZ^xLHn|%{hpapThY~EG zQq&b2Dq78Q?Vs8WO&VHaxHtRw7S&YOqHYJD{rHfW26e)T=5o1+ZL|pPY)n-tZcLq? z-Q29Q)&PtH3Nk%>Om>?Zm^zj76a#NXHJo?C2JF_%)GpKlOFkE?0@&G`{VsuRMbzXF zFWK250-RtWArEKm(Ukg&%KLsMCIUBom4EEiE0UkY0vxO#B0YXgahujHGl6+tJR)Qi z)o{ZdS;0~1lhUM<74`?LWDroFC}W-P?e3byCXLw0(>pOU*!7`?k(SU0*ugsAtAPrg zxPLJjuU$I;7AHw+>W1DCOC;GqZf!fb*$1p=sv!oLbHU6-WGD)3=KvX}3wnHDV9aL;#{`;r;Fbs4Fa&Cv)bcUSZ3ee&D`aS) zqTbR(~X-pH$=EAdf#Gnm7^;{5DrpfL?Jw{|2*r-y3f8%1l9i1bcKLME*w-Tu^Mr+X{wuq z_^Yd-M9~;LBBc=e-GYT3wCMBl^AqJrGXJh6~8StF!M*c{i2odd@l+tsAb^m(z z0V_`BNWLN(J~WxNQ>{k5e^MS$_m%GediKQ`2cPFewX>XEI^oDM>w z5_Ni6H;oREN9EaDRJozdCO-e615h=El>gDIRBPYUR6XTJ$jZvdDUB!^H@%hlDo`DXMA8l4{El;o$)QD&X8+-Qo{p-`HYb=g zN@MJmRUu||Z-UcTgJGPR*{^F{JRKB8lkkAKpW^+YXs1hiMSFpDS{{Oai@#xx+&o-n=A-j)gs5-~FncgEjKYkc1C#!0zG=J52y=Gy)?Z?$mt3 z5?kL^4Tr9py5HEy&4)I%UjgKmB!>LfhE(v ziBdX^ep16OQPU53V28Mbt4gX$tIDd%>n2$0EfWI-{9X{<#>q)aK>-RU1aY|^`i=?lt=o>92sN*n-eh?H#X4|W0-27k)T5A4*+~K*P#GT1g=%5~xv}6s{`-0&!QuV6{bLSfyaGtI61&I1E8@G1#eS&WmP@D(@4Dz2+L3be=C zcT_EyJHylG{eb{S{5|Ef!RNT=^Uv3x?@kp5F@IJAB;w&#HdRzaBO^yp=06eBw8XC; zg{8@)WPs7a)FU8Xo6r|p^7gXUjajYzFf-i9M(rA?bZwVW z{I9!rbc~}O@2gALYQ4yRUh}-=dDnA*J5$B(%%3fH9VdFKmFWOzJgx@S^ZL|dFZ5We7X9nHcPA=)O`E^}ggN>$f+s&q|Gc!HUhDj|6A zvkwKM83y(jhhpE^9WMErE|E z;wUwAkjQHp5BY4==r}0JDyY3yc#^mN@}ZZ)#W%P^86UYfuVn*A_iFcgUSAyv2qySh zwuI7_Nm{j!=Y11)Ie*z>PERtsvPFVvz*;*zkhu-UgQ-ep=g9MdmNtlcv}beRFDvh* zNVDHhJTTZM$;j4h_V3F}xu~wN$M_K0Cpj@|42DZ&Myu^^+G#{Wfv&Xz?g{p#RheiOg2n z$6Co)&NRXaC5I2?z0~QE@x+*p|FDe>7fEv{O!J4Sl_}|~&<`;6Y$p8qf1b34Ff>)S z75yT?UH;V4+NLMv)&Y~seXnxSQ|m|0MlqRWHbUQt;t?+SI}{pTCyReMc6K;b*59Iy{n?)dZ3-mKKy~y}1#*{* zwYsr^qx9O*R`b92KXb~R)MF|hQ8Y@=ru>H*simC2zS}$yHQNXJe%))s2UsM9jBOvc z_wpYWXnXU+*^jSem$Y#iE5oH6%7}O88}c%)1N`3b88z>VEHj3O5a z&`X*jssSid4t+lQEcJm+R3y9fy#h*~y)}EZRa557(c}sjv^{Gy#(nQ};9Ewd%hI^; zi?rVX#2~B{lhAnQH(~pI9(8(>3_K5d7od-*o(Sa+Yt)_*Ze{9>&hMQ zGV0%Q(RCutC{za?C&<9Ik*erEzPCCEok>@pRro#zt4qbb5DQ3GO7YoP!HB=IB{ZBl z!}s_eMV0reoc^O_m-{m6{vXOBu_N=uTck%MKEx{5Ef~c4AM@X#Q*Z1|@fQveCMTnz z1c+Nbf25>tn}4NPcCBsREg>{Au4^yZB;e_K9t#ZMo&I*nbRtP08oy%2uu=xBVlRwA z<|rd{12C`gSu7;#cU-Jl7`JGS$bCpv_|in4vfJVUiBjkt$+eNf&9`QwoGciSXlg*> zleLW}&8k2C(o0g3XFb0QFeNrxRbME&qto9Unni2-0$e@eCT42wGUeIM$)Vf^Qr`Pg zCkIV}j+fsp_9F)bWHA!UGQ+pUd_?U-rb1#7XwZaVhhFBG3=UtLh?WVaYNnVCfooO1 zosey1MmqZgQYkX?Xp%+|5=6Dsi=o&MW|!+rL%fYO@;!>d8!*q;eS34uHnP>q;2|$L z+-obX^J((&Qu4u3R`2t0XXv?PS-XG6A{!7cJ@>ISv zq>y=2xgI_165{ZFuHE}&fGk0*%q;w#!w8OmZOM8R4DZX$(fw^CY%<;yMCO7Q7XlQL zd*~0-gu#sB7S9o*4`n?mS5R@&@{D)$EfUd2t~DbJH&O1c3*U?vT&0qWonDMwNTijS zG{ck|SP9sgjx*_jO_8#s-Sf(*_d8b6!F}qqT&3@XW4~Qf^?%%R_%n`9mHabWZC|w< zFm8zt+EqNy_u;STqb{m`_2K|K8jh|4j41clP9`E1(&@nHrqLOfE#)I_AHyi2m65Eh zUMAk2o9LTjUi26 zUA4z7g-bq{xhomg~0Uhp#k{=HtCVv_o5N$2F~b1@3k~Ytn$c?52KL zs_gX5`pW?2t4+&e%aZMMtL1=}ffI*WuE^m1j{(Wi7|H!FUNERoOe3QyX zDqV8~X$R#ujm-E=&kIR^Wm{lyIk7iq7>d$o;;pD!?Zp9ZsNkS`m6sLAs#3tpEw04E8!qBE{o zBE?*)0^&l7Hw(=sZy6rl^D)M5qNU`I&6P5aJ+7NZc!eZ4_0N2O%T%(l(~4a!!xeB1 zxNoQ*e5qFUK0vP9%Viv8WN11pl*~e0EjJYjAqe}93>hs(exW%XZrhZs!}Xw7(55k1 zl47rl@4iv;))t?P!^$%@nYTzizuoTill64&EBhwEVH*K!)}GDZdVM73!&)z58p)1k z<0qT>Bqa5m{wM!^A|6Z68FRQqC2I=x|M15NY&WY$|M_Z7LqQr**2_^G2irm@EK{5i z?n{OyK0`fdBe)|DI#oj$KY3l|LN>RJsU|IG#O$%SBFAA}CdkV&ligj}sS=?p-wd$2 zVKIF8@5^arRl7@L_5ae;0Pnc&)_Mbu|KIw$(2Y2R`Gal)tH8YF6h}(VZyCm*S{s*{8;){1&Nv*vg;0 zJ-&{1TVk0_n}D+#o^;mCrbnPTT4gEHx4aQ0Ud_v0D&HXlJ@1aRB#EXFnp)1pENEo3L(Not#oI^Oj#6XmevCi^k zJsR5s*zt!8;Q(G1C-0&Albld|qqV1`TkhzmDUVNVnE$&j;^VQppZAeQJ${GE-rF5Q z(4i8DOv>or7@6Z=xeh%k^6J~YQzG1CSLUevrZwWG3e9v#bj#@M?iS)m&4)*YVLB|j z)dYlErJ{tU3jK%)>WMyL?;&vy)NIP0c?lPmyJ1k$ie-6>$yO;x(PA#1wV6pB6we~rdCKOq;QHsN^$rh6Ou{qO^%N6Ghi z`Ag#Ys=C?)N39DaxbS3SSIuiGRi-=5XG4-r3Z71LOQBUzFU@O=+$jR#9#=$Y6Q#WRSJ#g6J^7{Qxpa$7!Kaeuwi322g58dZ%NJ{&qBQot z_TY_NQ=;a_JQfqu&|5>hd))Q(=9T;uk_AOAvzvBHpHzDV>DbTabBSEOJdbV2Q+p-T zn`#4iP{8)S7ptu3lo`pTIPxfxm0{C|Q~G^`p7&~Y$=g!LNrg#1kt@Tj44Bv;gI3u& zzU^;KHl-RWZVp@7M=yPZRc=~@_v&fj6BZqxjB{-xmu}Fez-~O9_Pn0*2SeTbF7~X6 zDewAdz-}XAMh(s*$1p)2MPd^8peeOfmX0E@Pw9%pZe;aA6VnOWcT(ZhXGzx^GG0!9 zQ}+EoRyG-jSFc1_m3=CePmkvRW7V6y3AnuP51^9;W9WAmK0pZ7d?2b%JEQ(iXh=f0 zXE2P|T=MQu7bBiBcS-t4iB*G+N4Gm!&Fx-lx-K%}e!~s91=rtqmolRej%CwcxEzDj z+qA~Fdya{MKx138EiIEhOel|LbHuqTU_#TNlcm`|2gEBZuC{5}8@qnBp}no{bDG;% z#M^KE)(jy*g%kde&4+Jy9KH9EsvkF*pNu}`)r=C-iXju&MNZ7AHOn^tn67HxVGc-c zG@Q8yzgbDe4iY2I4Zt-z%_zV*E9uzD#Ylt#+1_EuTKD;j0Dh1G_5e=u45c}b*u)mT zDQ&G!lo~u_h-$wjrjux>w;_(lR>9^;{XeI_fu&osSb0$gV)}d*$Mcv(diO- zSOYYC>XMuNZTb5p7PM#2gc`M*(aVK{BSNq49-S7L#m(g9c+W#-^`>b#@2J8PpBy8^ z*(XsCf^zcy2za)HtNFHt=ljn9gWFT`|-cI9E-h}f* z=;lNf+UIyD5KLU^$_q#fxyHFK1L`yEPy3wxcGZ!&4}9xS5Qua-BD&3FzHEE)2<{`V z!Z95c-99?MyL}EPqQi%>wQ2;y%=~p4?>09#rc?#kH_Fd&!s#o?Q%D@IYX{^vzMc_- zvsO~4fEWpInx+3U+oEYZ-4do0#j_NA_8!fD6+ARr1!ivcFwL+7A6__PB?UWa(RG`E znnuXXeR$GFMsxNS;KxT%1F?q&Re<8dl=r`SoGvfUgJEe4b)f5SgkNB;KAokK5ip^72us=b|NI z@n<4QlYqXNp*&;TBnrKHNi#R$)RmwV;>}qq5_s(ME*@ad7o}qakz_CzFt*Z`3+ST5 z7xe(P&?ET>(O@bATMADmk_?F}y4ch<;OkzqDf1?G8yJ8qNHX@bsyqULeXyJc2$8S; z@}D2%{Sf4}|NaF~Kdb-u&;Q4SD|z@oSQ6S|7(lcfdFLP2_MUo5+jvFlW&K+FaYM=| zjTYmp^Q3slS?b;ELqs^uu>EgDtdU;&NkPTH}-%kHm8MOS_)@;rwR%x-W z;5ft0R)K4r9p8V$^YeN2=|N79fy-8Yd`}BW#y3p{V2@#y`#7UE&u*`yjfhIwp#-cz zV4v5s1j2|ln7)&9k&jv`w8>tFNu4KPT#AlN28LeC%SLzVKLLec z`!&_P@W^QWzXrnRHM?22GT6^T>dV&$d+irt)77rWcJa?IWvA`z$>{hpYQ1nL1H!?$ z1GG1^TbT|E3}}E3wmw1c2PbG)bjCM~#i-a5V)J4p4Fv z_BEE%Zcf;(gXmz17H#^I$5x6ZR@!=Rs`lK*PBO9_hDF`KrE#k4jVHIXQf;IuV?Kgk ziPW(r4w%}$@z=hR$_kR3#X|w4d(3NojWyI>c<(fJFaOTO5!o>}u zd)+5H<;UAXRHv0IbsSti4*8DtEqV3ZqWMaA_WYHx-uM*n-=e1n-_VY&iGfOD7nc{( z_G}~3FZ3~xg;$E@Fblmmzlx_0cI=NQq!zDv=f?|9N1jY&)D5E#gy@1*7%Q7g`e*9` zkC{m_7Ac7JMQ0|TF-s~F!ehn_)yTb3U{FDN*m7oSp{i%Est(ZJ{K znL>7Qx8f2%cspx7&U)aXgw+qf0xhWX=%wg-FPJR}T4RT}VplQ&)0lf6YZ zhJ3 ze@njmKawP$qE0(00{*pHw>0$rc-!OWCwl9$9bQm!2{Nd!dAl(QU(UuhjQs?u1{9FAiW+Z^L`54C0apjr{O_OqNDcu*nR*X2$ ziM!~ZqpO}OHRY|(xk^5K6J7Is^H^wEbA9(uyL-tWn>5t)(kj36bW(+JKVhSG@9Bro zIEAsaV=B$t;Iz~ayU{R<#Nuz`wCxy7p}4MnyxZTA*=k6Z!<0$ABh|QjA%1l5?0K8K z#YJ^t%5B?r+rC1O~WVc)@b>B6VIpB1PmvR}-y$P9=VEEhi zz~eg`qc!8T#i`atEEbT^gN^R&#d+V!MxND5gJbI&KzzE|aXH)3qe`-fgAB8pg3QBP zO}Q;yH&O1NI3_Cc-ONeVZ8I2%RbpyS>m{(l`pUwrs6~@$tS!X<%X?#SCz*@4rKKeZ zIxse)G2g0pCSsI^Qk}lRz{W%k{EeYkSA(Cce!sb@!%K+|R5b^` zgU!5_>q9S>Xqs}Hu6h+fiU0xOZ8BL`+A0W>VRm$%5vIrRQ?A$^Q4UEz8rkb=vYoZ!808_ zcw6P3Q~H!_HR|>_)vPrnbW@!^ouP7FC@6S*-v$$`m9?aY) zHL&B)KN<`Trj}WmoKRHILE+ED1R&;|&}-+06c+39nq@i8}UW^%TB)FscmKi_dv z#YUL_LKJn8r3{V5BMw84nd)q_y;fx#60pxP%0En43~Wb-@13Svd9w%!594whzG16} z2+P~Z0`blM;+qNN4fyePz)Jg;9o;m54YqbP(VFZjKTx7m|Iy#vI9@S(*re^H`0>{? zOL669Jnw2@nE;EqaU7@XaCVxTTvfQJ{PG<4J^#X911go;-##?;9X2)38wMRzR77`A zVyuE1Z^-Fx;1mxER%H=ACjU>W&af@6Gw0Avy#)6N+wn zbzGL^d+h$YxA4878PxpeBiCg$r^{frDht&N&C)wJ3OBv$3b`Z&m-AiDitSN*r_vf4 zM`iZz^u$}MKWg^C({zE_<|=@MlQuV|s_L`rp)Q(UiyaQ1wviK;E%V@4#)rwwvt5&P%T06&OFiY3mXlH}Vbj$^{SDba)@9=@>K|lT2b&_aTHRyxlsCtVG7eCQkz7yKZ zj;q0r*olvReL$JtoBd==;jq*QGx?59ND0E$cEfJ4pAOe^tD>vg5&O4wJA1A>d>4D%8CThz!*GrqK`A{)jpM&yq%q|?7sPvkj|QYzz(r{aqYzP6U=^tH$t>Fcb~&g~^I-E9%f z4V=q)pO7X1q`KemzwJLn(tfg79dEyJ&daJukCU>}Pw&^2m9?p^j0s(&bw*M(bs56moj#L+H9A`pR5Vo2vHZTk?A9_?`Y0 zIH0_Y6Bk1F2BxK6v97qj30uNmEa5zl^Dtibo7Ld8x?hWH1zDCjg;&F9A<`+|#G1DZ zR_Kw5wFC}`$7{ojI5(9-v;=)jn33!x=Qz0reWqglVb+;MT{&xtA$`4e!|Kq3f-Np= z`L8AK;GI|%8{8g-H=`ihD9twt|GK2)$YVDw?0XsGcCfG0xICJqwBxB^!W88C7o69Z z_}4(*yPQ!9BjK;CSfxXM+G2A1eupSOwWYS=Oc$5^{nMT~klkGP?_m+nA%{VQ`xjZB z!2wAf!g%)j(uQk1M}Lq3`pQ9%x%_f}H@X+pt{&97y>dA`AK{HbGlvT;JlNZgkeJa> zw&4<0IiEmUF;tCZghD+$e3JB~W-TycuSF;g19Hix$`3BcbavLaO8A}czxH|MGeSz* zOMYh$$4#Arm4sjKQTVx%szu#T8^+=Z_7?zhEoE6ya^eRKKP5R;)J690J!Dct4<3jNxov`q%;^_fd?5tLi*YH}BB-3AW6WmU-PBsNGtoFM&b&8vt zhuc|dW-}4wQ>s@mJ)}ppW7st}tqM{0bTJ??h=p&bPM}AlO#d39 zO7ibbJ-TJ>%Hj%q$rp*OIh`jjGpUFH9}YZp_X(@quNSs2P7uQaCj4NTF!IVhoI3U2 z^G8ltWH|$ZTjdc&q8F}R$QH3 z9rV~}beLQ!RDfFQVXIo{XY+M6k!dP9pO2+^dX=2QxLj16A5hqQ12jNzV3(DAeU}`O zVS}B<_*n^3HezPk<>(z3)6JDX5CuAGA+I$n_Et9n+YkMPAWyI|wA%nAU}10?&wIt6 zna5PbdN(A$FoAAJ_Q^rg8Su|?C7wkw5W7+k`#=d(jTt`SL`wcp@;?Jq{iHTbkqIfJ zS~XD5`XiojJz?rSH1p^LJ(?4FpobA~FgW(W`T__qeG&&Fh@VaHa2C8fa+3lyZ&OCOaW~_}Ff11@A%Al7g`^VGJjAo)` z2oisd{q4u+x!g<4o$mUN$@8D$UGksm^wi(Elp-tvGF83k8Rjlr)F2?g7q^VMj9iF_ z+Ux(%i&tw_^L#}8nAKJV(ug4|Fk?Z}As>pPjnXFMQ-tU-hMUu?msP7mv)9ix!!E~B z)Q-N8nO6M(7JAVV@1=qXNC&*`)!+YM4bf;GYN^Fr#9Gv~xnTj%ds!QSVGQ55PCttY z3v)X5PVL4b12%I(%Z(6e2bw4PAN2LnldKdp+J_MVFIlnG6(e_#xQEmoh1Ctf2Y4>2 zvzK^25o+XHhspS&qJ46}Qnj@_V&;dXEsZ2t=;$*Z4A<4$EcH-s1qmf~T5se+mY+}j>902)XL7kv%8q9I zfnlV-tCs5EHP?Y0`rX-=;r$HJ6c8x@TugCj3Z=M-N={MgLb{E)7k8$<$5}#%Y_Rp- za_nC^wl=H2tCYfH@M((0OA|zN3F7?J@Zlw+(WPn57+=5jAr|`+`nb_Jg+vx-*^`9Z=Q?m*#m`Z%vaw<2B`U;>|s3HE6Tb7 z85@T{Mv?FVu2GdQ4njohpcUim>bA_b2Vjb@+v_)Jg9^>7?qg3iRMKbA#cu)TaL&Fw z-(r?ij~Dt;{M?Y1f%wUuIfnb zRdv`JhQ2UvR)Z;)Kx^>d8~W}U=&i-$_3%9q77)M;EJ@;3DCTp{{sy=Z8m|QFJP$cvzhk*urDX zczRcD^L0~I1%XrlP&o-lew&wi!|bJ9_$kW71#ft|iT2$28i<&<>}^7Bvo3tY74=Uv zH*Vuwj6o$kE!xlBJ_n$ zw)rc+NT?;cjH(#BZZlIDgvnno#%TvFnVwb_V|Dbhw5Msc(*Cgcp-56^;d8 zLrbO&bRQJHW;^Pbd(cCL*Wr}=s&Mw6U=H@#{8L>7=l}y$i?y+Tui$)b0=LBF{uE0* zO%EZ`Y~`0Zojb2;Phq9Dd7PD4Cc+0HYQZ1gd$1~02j9V0v5>hYoURBPsABjb{^u~j zfmg0=u-UA&&Q?hQ_epAxqZyigeNMNMLnw$lcwEOuGsO@NQ=|H5Xt7=~m^JLip#;OC z>r>fecZV9dcXQ@u$Elo+e)lx^_t8&`%dci4_gk9HEv%0*%MPCJKU@jetrxy}@4_Zl z2XN^6XO}z=^?0b&-qfigzXdZX3TpH}Nd;^NY@x^dZwyYX4tiKHCTcYS0L5RC0V_elJ9j3N( zzy6cOWlH$pi3MZHFJ!9UrH4tBKo+n_?`<~0V;hSbyh@bkIUPW6*QAS&<)R)Y_&x*l zY5lo`bq~|iBh&vlh@8X8D3T1(%zY~2$rDg}*+O7fV9Q@`GY`+iubXKvybX-Znu(b7 zd1;oo{GLwPHvtx~$Io|oMCIsNYzUy-GY29CmCRKq zx17>9zniYQ_j;8ufr~dk5&fWqEa_F;{5lXEAT@+=y4PPF@XMb-3M%tEcQ~to77w4W&(K}(m|8{2n)+{wS3+QJ! zwAeuPIs@^iXRWPVaEW(v59Q5Xzw&GmokgIXNUl8rHvO*{iJ8!*G&lVjlGj|%T>E7U z=Z4Chb8*WQ$$ya7&WuhsNjcCwiWlw}nS*H$L`i3e9G zu$I)0=1IHR!d&qSYxJPMgq%-tf#aRb+Et@RpU}R0Es*Co5{gs!K#5=WiQuOFfrEnmpN-VY*$KI|f$n3}tle7lp8 z0Y?!5MFHAQcVPW)ci@6A`yYU+_kJ^vPQI+xrITN^;*1gVlvn(Z z0Qj%wGV!!;R|h$8ZzTj|)62C#g{OYaJ zK1a?x3x^tAv2K&;$IWMRV2UNtJ8upISwI74!BQ4p0z%LGWYG;W%Iu&jf8j4zfNR$y z;ks{)gM)=6+Q-I$A92Z!0zXBmfsj1tHY9!2E+CYUB%Rv>y{7H}j~cE|EcUNm zgb{jji}Of}{g|)!nL$KrO8wU}3Jun72rlHqYJ`+A8QylyjTuP_K(1tcaF@et3;;Wz zH7dsH5O2;5oPAn=1~tf3dD~s*WgL$F)L{2UZaKW= zN$Vr>eIe7_*kRV(tuZV7wOFg(I9Ebq^_QSs=*SJp8EC~^p1u9qTu15^{Ih^Cuk-Qb zw8**Gj_gRd@0xmn5>26CS>f`*C!LZlWPASL1rddR{C7*kTz`fBXlneFY>AfP8&C(M z7cIj}{qI9{*fnH;`!vksf^wk(h-~0VB49GPAH_g8?lOv)J$=%u_6y+Q?b!QH&!79H z{KOspqZfPSx{8U*r#4s}CxWC?@PZWfN*1S2Ay_n{;6;Fza!iVBBRa5L^~C&?k5T#= z+4i>bH%NoB7F|2;SFWf$A=Z>_A!WDEuqwZf9>P8RrDQ?J4w6;>d#RqxK2xB1>H<7S zxY6_8g@X8kZHI~12+QPok&U*S(8^bupIF$ND?)rcO6M+r$!-Tp|HKQziuI+}4hNLp z0Nw7VB@GVPa|n}RmQ;KFSyY3xD2|**XI5i^`x*ZLVW!9oy_Y9=F(K?g9btr3fPQVI`=cHJ>8Sl0HZqX2+B3Q?a)0FbFO zVIzR}p@k=C5zY&uywm?qh`KV%$)?P&p|BcX6d?iE&aAd+!1))F5Dh0Cxj` z2OfZ)vVfemEccW6HT-)OKVq0orY*bt;Cg>yEyw^bUeJBSk4lNHtP&0UjMl_E6Cc%I z+9!NkYZE#fYF>ekWoVZ)D+65T^i!a9F<^`@aXl#2Yy2~pxk-MH92b!~_gHwML&INr zTe@T24&r_g`%-1!dcs!U+u0O5)g2jasb2!r|58m9HF94!d+^e~va#phmHD*^Vvl&zF*1O1L=`GA&)&KmQi6$QuervoZq6Rtv&{Hj0cI$Zf1 z?#8nezHP-We1@Ws^!s(+e|@nKS7(K*d@2^2i&1JKWsqT1`FW-7Y*+H{@CRt8wcS4m zOOxy~4i32PX^L2`gOqZzKMLhUuN~Bciyz1HQXef47DpWnN2l!A_RI39#0?Cb#I_>> zDjfl6TOQ+&cyE&i3-7Jvu3DUVjFSAq0NSCQ+kFxHf~;;yC@4wxL!;2Y2P$RCRD&(Z z`}-gnrTZ#jPT^ks3^Y{wt8W1x_SeWEoe`lsl{AK3VQA3U)Kl-`v)Re{K3{uCTzU(C zEnut|(SkSXm*oW)D}`S$cG}tnQt>uwmo!ED)@d>xNl;hii=2YXWN9Ugz0cNE*%RaXf6D z(HI;6fW2$kt|-jQVu>$NFOEEXls$(Z-bHQnnSm)tGKQ&$SG5B3`;E>0!V4=8+PE2q zyv*Fou0Rg7q+4w;GGOm^+&*6$vZW8LqAIHEwPP+`?*PuJXElzX+nh|+DRw{xnAUYy z(9CmU^x|@{IZq65IYMcr*$I9^?s&R3pVjQ?Co1#Oo}Z!YmzDUm2gSyzK%Qivmu?da z0g#!>CE%zj8QrIBcc?v%j@Jj7{$Pil42oO96hGbd$0rZQ_xe~q>@%1H+5Kfc_KB*p zy|93l?|V*kg>;z@bJL`A_eNdxo?GF*R$GY}?J2a3(6Yb9P5X`>h~$+cx=cdqJRO)R z)>O|Gl$ByAT(Fc3+4K7mjSRFK;h7)+xG%$>9Sy2QD17;G7iNft8b z;1bt&L_>SmVL)=a$9NiH!At$aBvM0dL|Ka0r_EhPKg9uT;gkJd<4ex#y@+eZqA8XU zx0CtGt9+Z4N3Svo!{o$GJ-N-QHvfQ}@D4H`Rw8{k0V8wY_@^Um!1|bPE^!a)H{U&{ z!i~UBmt-9L_$3k?(3)WAceEG?oxyKqtp`OHzW${0N{1D05kY5(@;0mYST8pT#3l>- zeWxHEqVp|Ui-iTVxw-l7`~pfEAl||W$Z87Q-E;I0^IV~2svkDjZdAu7vt>HJrK|m^ zLy+JB0s^_C)yW4op!~m^))-Kzkap z4kVaNuzsyiAsH;aKn8(ac*8Swn{aXTl(;H3VW@NNqhh$|{1{S^~k z^uvRk#4a5x2(4xX!5~m>*Pe!6pEuZ9 zlM(L@A`5CPnL$QX)l?sMHy0s-2A6=WNK$o9^FIKR2Y{8aCbOE|K_^Cx&%=RSId$wQ z`)r64DhpZ}CpTf;FHFzw_!u6LV-E5Eoq}f8&@J*ivbb{36o3sVsWek*_G{7Xg_lo( zg_HYFe~B+;q$%Dn{*i4p)4Hw#E(q%TLjFYXH5i%ClRBS5GwfW#F1`X8V4jW9{5d}e zg|SnZ&^G%gI4$1G-@vIZmzhnpUxK*)dFu5PdhJnNz*hxKkkB9}1y8#o^Eln2su5Y! zvI!wsnP%heMwS7oSxtQP_)>0Kw?S`}{=;|9M<|y+Ugutf#uqc1p_C#$fc^nTG$}d! z4IB4)ewA)kfusZPrv^GTIzE;u_DRy&%5YQ*>RTg*25|2WRKynlXxsQC6IZE-UvB*2 zaRu%kOC{FL0`h_F{Ckc5>D`bdrMOQiT!aAI6INXq^dZZX`)| z-{|=C;-I=iK5g$C=hRK}$&>Ngd4mpoS441t^x;M85(2;QLl<9zOS_ZDjj>5po)&Va z*#G_mr}%|Nzm~?k=lNC9!LQ3GW$48=hr{u=(IrJ*i6^eE3n)-MLj`0+q08#P^x4nx)(Xoieio zHFNuiT-L$Y>bVZ{9Z=yo(DnWz9dhP>MMTbei)Tymb@+!v`AIrGr;kb|n>cOG z!5Jneo;(oC%lJZLSHrokj_E)qMche0-KY;i;`isUGA6~~^1Fio_>=c3NnyYgGNF}x zIQ)?z;~Kuit*_1H9MdT`B%dqM&rkgK{s(TI!U%f7d*(6^x z%nTzAt_vRR#i=!>0gja2%&VI&J!lmGwSv#3{Fa3bw;7J0{+<)^92> zEGzd+TzkyLYH%-*i zaD1AFp%SNqwi&rsP#=d$UKL947rKc5t_#2Sp>yHg^zXrV3)fUpmF2l-xjc0bdgy4y zRYcYr+ajNwqx^ndp^GXV;l@Goe3k%8Ct&A!p|3cKZrC<1v~hW8@OXDZ=P7}2+0>z{ z-ZdK!E|Ym8h7jZbG%fSi3D!~%SXEBH8f_B&><{Pvu zZ^Mbmu2-KJB>Fv69Y5WH3tuBCoKn(SgizDJd8{auaonLEbmq6pJWaKq2IlC@S+(}s zPwLYbh&CCY{YTYuEiNU8eP;gS=9wi^o>)Ea0uLsn=lb|JJm*e%3bka*RsS;a*WUzyzf3Pjis?>AT$Iwk z?g81=Bf><6yOS52Oh~?~rq|uvPB6P1HM@cbH*&rmPj3v`xEbP6R=X@cg!54e~ z?^D$nV#H~vruU~lOR#!jSRL=`wX-$AbWxn~YsrPITyykUUB57=`aFAdh4OU`XmO@j{tX*$=QIg5kiGsne!%m}=(ky)&Sd31{X z=94wi2B2Tb4u%4yg18u; z4eirGQu|LYKC{^8JpsYKyRox1n4lBQ&tdI+km5dh+iT7n#+7 z()#KVr+uT^5v&X<(GAl#dMC^6UIgt@u&~~@4nyoFPnYYbDvW&+O0!k=+AGN~t{+!9 zUWjYy$+|oM9#KLiUfUN!!xqoxC)zJwY2ZVsJG@?;LBoMU9K4>P)eNNtsMcZnlx5UQ zsNId)CrnRsBKG=g55c^(4Mjk6=TRjN)}Tyow{4T1BMG!eC@!bCIP5HR=ye{Ks%#D# zsM5&T4*fK&vca?hGPHHS*tBY(em9kXHFKYQ2h1hy@5A9t>`Ke$763o5s63#;! zPs?%9p`2bTVc6(8??aIK_-{xH=(IoD*Lu{<-7J58NmQS8>vI;Dy%66?FU?AznJj`8iPc3poTep9sb6l#U4@;yJ1_z4iy zGtnr%=_+I4x(0-*itv`SNVc21R4)uXNEvIEy+zpT4X+2bf)U z4org2IN#{KaF~&f=xw>hbRj~bCdYU&`pH>`-F}m4mJBOU{9^0hgI?qz{V4c^AD!KD zPM0a-`gvt)peo^T5jed7Cw@L4KBfxH`5j)JUwcZds#{fDwUi{t#4BF45G!GB#ifl3 zc9)2@?Fck=Y3Yhm>tJ7*zQ9jA&xu&}g!rEhy)anZ*CZhs{}i0jHj;Yiis2IJlSw$= zI=j-`5uittyH=h);PL==DT6&?7B(*TbSfJ|UMseKnQ*0EzW7n!?hAl=UV7ad4Z&0_ z<4Mx?fsA`ttLQP4hLhp{kEpMXYU7K##iax*7D{jm6iuKw1TRpmlw!pR(iV3O?nR5Y z6mNk-p-7>)y9A267k2_d0x!S!t?#}2N7iIk)|%Wo=j=Ii?%DgUUT9117D*c51+2WR zI-xmE)i~Kzy~B6qwyGLcfd+1f1+qtDV=%ZjOV}=w4BN7}25i}Ns;D0@CG9oo8A0af z^AaTA5xnNx6-AEtrnkqm@rUW+`u|+|>7}^B4&ama8uePJdW|esm-( zZ#`uSE8J3F2hBD2tXzq5KW%YXLhUoGpk8p3r;*3kmvn%h2Kswq@<3K=~l!-DFU!VO~8n2GsFD?#qCO zkF2%_tb+&3EmDFjr`{VLFX?6Hwr%$Z4?EKg%;@K>FLuW97m6TgfupW_ki$sZ{eBw( z!_N9k%$idQyQ;c=G6K4CKAkjXdz^T+5){PUL{hG#h5FEbj9xyD@H(y9Kp&cq*;sK6z|Qodp`-{Axst(#87z=RDciSmi>AYa`$wI4!eEZ9(yZA+v!2+~(T2uF`G-v%yH*gy8RZ z5*fjS%V3h4+5O$G-pju7a;!K{d>)F-YDB^R-hQi1xnjV$?(63f=>GJXAo8|@>7QTF zN5}USaMW5<1HuS&v+{s8zn!0HrQPc|*XL`QPOzmT2s}&4#nTDa0~=UWM`EqMc~8;0 z&ucMvP8b_8)qCu(5^BAAvTwYGT(JW9T^%t_29bvhL74+?7gor6Gdsp+PuL!yMGTPc zuKh=vnUBzQhFsgeW7SMG0or`t+$7SsXN zTQA5|dVi3H>QuSW4jDW{9w60LV80LM?JGz8+o-7r6;09K1g3rqC>rz|)qHx$eYnn* zf5R&>`NMGe<@=hOR&#?Vo@qam`1AQ=*sbgTw-?~oQ-^N@b#T~?YkrKBgDIQMU-mIEam9WQ;ojniP4UOX~?LkE#>`N+S9ZUVJtK3{4K(Q~X{fv%fIlM0gUp_lYfxb%zx;l2IgabR1oa!$pU$x>pT|m3?|HNyT73x9MB) z=-PdUuRPXkXNoiLGlhGw;cAN_lnZZ$9KM@#q7lcDRMY`uB)7m z&yYf2{MEwxuVV$J$hv~z@JvNOsdr^=`OA?HJT?TAq=-EJ0Q|Y3et$uXP|EB!u-ITF z@9Edr*w|kB>?v*Gg^Pc_MaD33+fS6V@cp*7^t zkFPV1tUXJ&k33(r!2pzusY@``C$-q!Sj8Tglq&M!{Os75X@C$G;a5~{c4>v^^ZG@e zCCSlN%lQ7e5-`vC^@FP+^X}NaxR4<3%IWFry?ckhYfahS!HhOGsjl1T@d#{v-DYT& z@#NF|h@RfChun7%ecA!K%OQir`Ojwp)GCY2nVX82F>>dK^(mJ7M*cnls^3vba^{Hd zJ>FF@%Wc5zQ7&m2vpDb3eoGu}Za!G=p)us-mPFtW%LUw=6;|HIYY1f$XTZK!d{eYd zxia8W^kBD-)2<675A0Rt15g|dpI4Eh81HNys9-r1w;rt@zp^slFIq`QyQ-%Wcu^Zi z#v?D#Qj-hW67Fu>1HYy|`gtYLWQ^x-bYgjKU$Z?lXTP%>fJ?KoIf~zw6Y^@H8^F7 z*n)JP$~o{RN5zPcKY?oGL96#%{}Nqu=Il)fqQ83<%8W@@9Iu0NA;W9rvXAt8{bgke>>XDJ*V`1p#ro7{~HL?vCD_mf9)S05*1YZ$UwLI8&3Xu@!xs?HFfb}VbX$Ql~M{L?huejuT;q_kCV zEfGDNV0rsV%SM8fzyUq~n-zcnCyfRt@jwxuM(k|OL5d85jv!i5gBv&ONvHBMcT|+O zB9OxV)eVvGhVZ3=jsf7v3XZs?gD13gV~=LCtYpi}x9U8m z%(LoxB4trP0p__-IU70dU$DtAO_v&ejH`ORqZp7#EQ+4~8dw!0bDRS84W?M@ZYC`; z;LHj%Q%G0R{QUe`_|J(9p!RZxmc&--Vj$!J8kyEAf1~jzhAenTN1#^>&d?DjS;$B^ z=fV=)+6}c-)m^NpCGl*(dM|wQ24%7XvBaerSe6`>joG0_3VTR7Dg<`8Z~0bNlkeh_O%e9a|N3Jw@@?x34;|;3)l{l z8;`z3la}$m9#noq#I*6$UzH0@YaB0A6f}OkTOWtpYbqV0fcM=Q=DxFi;de+8VFUHdZY11XUib?`I3!-=3kio->H}FPa6%Ftmm7u1>ThoWjF(>?HWm@whx|3AOZX zg`}mj^VCi{+&8gAPaGgC$h+5E4pQBOT?^}hrhJI|vx|OSWDI%7Rl^v~IbMK3?wb0} zmmItKc(=!gPd?rSJ96Ab29k*7nU&bj6F`-W<{ocaX*U0iy79m_w(;4wW>?{lBOb;pNQCM$^J_km_62?3f2~E*3#l z;5N;@gA#Bs;_FHCwcRAESBjmLImLU`s2!f0C+N(Z0@>F=vyb-1B-#Ys##J&&tjerL zhgp9jiQRJO4hZ32ud(aK4+)VuVu~g7~#6^P9gJotdjE zF3>%qTNSwQm0VnVWV@$Y;<509o7ogCO1*{%7dlodo%@{DSmxu^8nv-0j3zk-8yBG1 z!^F-xk{yZg7sph5J;vZx zRRNd~uu(xl6u2b#WUigqSzM%XPs5@|6BIAIC|Nl{;=RkFgztsMAPy9dI6rKD6arhI z09^FjF~khWj=a!li=AhLHg1J$FRNylm4cfg*ciy-04ue&rGyNB#I=r=wj6^2Sn$gU zu3x^dA{Mp6>&+%+kEFv1>v%zmS2DOsy3y|LVlm0jL5&-VeWBKTMHdIQqT0f=$!g8d zd?ipCAcqw=W$v8H+~B>)zEA#|XLmkQ!yj4L086 zYL)xUSHeyuVJJRgkZ@#@SK+ej?4%$Z&yHZ+a&hdR22*Jeh-9naCwTodhyTroZoys# zvXtr+l^Y>XHKWB{g^Jx3>7fC<6sKOI6ymc`+^s8d_h@2Rcypup8ay#zJmD_k#3wL} zze8U~yY?sZC)IoUpjv#-PVaYA-dN%!$FK|SY-X+Gmi9P_oV66nAgE3LJql#iVaTRk zi@UXUebMonjCs==6!=fH^A=KvXQ$0vNXGIiAj55p&UIPfEw%0+R1i(exq<+Mef92 zm7(E5?+v9a->*Nx?Tx&BglNl%i6Fa_YRV)rlzDoLGVCSJj#R_hf`N3*_7Wib2+Q&_ z=*HuwaCp?jAEJHeT&{Z7$%=+_mHI5?fK3$FtjiyoeoEy+zc+KSb<-is!FJ9cDUteXk>7Qg{6HqFwA?R-Ve+YGSVS$o zc+DK3C9`2%$`Amq%WZT$ZEQV(-B8-}nZeq2>?Y|`RL>$GPL)ZHw^0(DuTg*;<+h?b z4KG!apkZrfA8P)2Bj@0)CVArs+bEhT@7f&kOGx{M|i8Rahhdm}k>J`YWjpb{E1cePgziN@opIDVf6l5Cjrr^= z)s(6i55+5wDc>06Zo$QY@V^q7vS03dg;B!@oD&3)B(;m2@~ImZv!)DKbgiB!td{an zez`<;TN>JS>ecCFxxe;p7Q0vEJjy{fehvLA6P=fH7tlBxh%(Pnxn8ZffFB567v!EW z+*GM#R0DhN*2>J$AGo;|IG!=Pi~h?vd4>{!WkThb=>=!WbFj&gJHMt!%|Dv}qrXbx z(ys5lw1!=&Pxt^7I6urGfM5@>!EuZ31`);6mlDcQvysk|hCvP3M2HKUhg>+0HkW@U z(VloDV_zB#0R=BO9Kb}b7(+-#Fs&zgJO;1;U<;CGSmz0KbgKEA_7)JNcuCfT(U1_} z;Xc!!K?_TY6O2z3X9F;WCCA>)zAkGQ>sq_!AA_qbqyQ!@-arCG_ZY+?z@LESH5Tlc z_mQjrO%^qUDB%mDP8EN!_>!+~hV;i6Fq(b2V!f>^Iyono{#6Ni@1g4L28-!821{8_^$BGq`&~~{EU#+JwjpMhEnJGq~|U7 zcVd$gqFriDQh+o0w@hlA@XkUTRG{eMw1J4rnJWXE!{4i=^y@3vYH`CsTzPI~VEgWP zJ$jKukR2T?8gL{YgY=XMu~h6?kDJd zW|gNcbSD-k7EM;5AYnqtF(G0S9@ZvSLg~SpAqG~I(+i@VRKA)+cJv zcZ9UWAPRqn$5bp=j`x7Ge(Nkh%g~)w2^T3&hodGde|a>_Zk?Dj@X43(APnKNHcRNW z*I;zez_gSo=zi0yL7-yrxJ1ywsCn?n_k4hsir|VBYeAh6+;NFd_&|D@=@sKBnjI5E zk+Of_IX20)m?Y_bWbCl$LvQpvbOmDRnX|rIm6j0DQvi{p;6!Y875d(ZoiOaB^Z-^q zVEsD2Any&YRPdLz)`_-z6~yE=YRLMDjh6F{zP9NjE|jyx{DuiWKv#EnyGd!*V~Ch` zHMIk*uGH88#_C#st#6D@SdE85UVLF)l#q@M^BOku)kL+a;P%03A9g{Kt)a=6O3&AY z2RGdD5MsWa8UD{bOvfoVKUPr-K0mX9e3HJlGF*(>NttXq{~*qLN1Wex$RJmgHw^XK z2>U2=*3po%&Diu&Gi=5;+=X?4fdtn{HhbdwD(g=Z`s9?zaMtPoj5s~VS-&gyav^n)X~Ck0rYldC0vH zH}f!w6OJ5|qQJ$i21P}8-!6f9fNJE7ms&%`&&iOo%6qfAc-iG!p6 zu(zwCtofJgcMc=La()6>e{?ovsOSH{*AIy?X~!dc+{t)Y`A+XRO=@Duz}}A(s%+91 zV_e*u13_VfQI-lLBj5Y*9w&cG9TU2L%?t<>b30uN0|Wp(y&msSl5Wm1=2!A0i3zGK za;b)?u|+0OND>m%QsYt;hke#s`t^4G_X`#0vf%0oLHNU; zL}8G?HPU1K44kDX&hmkU7qH4v%8)2$LBm|ok%@F?Ux$#sxBS*`z?Rt!TQ!P_j=(0T zOHdZn?urn^qx6=(`?i?l)Lcmm_S$_2luJ*MqytzHh8D8G*|Mq=M)t#}E)Bm$)vg*| z$Eyf+=l4-KJ1`cNQd?r$K65tx>3s>1Tgb=tRE`N>t@vi}5mbo0gSiD$m-Y+%=!SYV z>7y#bIRAQ@078c7%vEHv-W4X&Vgqpg&VMa?1*&3yvA^(Nrf{HS zq|jWS(iY@WAS?@kO4x+1j}y5DHZNr+P2^O8gS9)3SX8?gd-|X@E;@a1s3*}%3?ex? zq-{gu)Jr)WJEx07+PGdrpo9w#M3-_0ZZ5tijItmOo?#l+#B2NaG2KqVy=rrQDtYm5n z6N1v!m6_mGq_UDQGMk2Ar-q0k?i zOHgU8g3omkqNhcCobnrs$xj+cv@qmLC)pkQR&JUFP(3qK$UceKWElxpPU{Tux%drZ zXG(Dx_e`aETf4zV1fTgq@VU>VQNSfgI?B#>(%61mV1yF@ruWjD;xd}kbBY#DNKHUs zZA7r=)u1f82EgwiKRjM_zF~RP?Be3VLqJM}GHkGq11CLw>=7tQZn;^`ZGpENkc4%4 z*}dh6IWH41CROpUHOEA|ML=Q~H{N5o2Bd@#AqJV`l%8<=V#I{~!`ScZ>q%0q=2`SD z)hP+U9&^UT(y~A~P8BF+h&4F)oiKI(ADL^hxH18KiT&V?4)1SgQ{Vyyz`^DLbo?7XGmgj+%!Cv2; zOoE5Bd|1I6e@(=rCpZ}Q=!8PgEjqW2C0P#cL39KzsSurWI}s(|svr!%@73T4QQT=c zcvb0A&$%~TO+jg(<>1U5r9v@1^j1RB1OA4~ z1lNwY{Su7po2|5{VOc%xK5z*S$>g%w@Zr4f_OhBe9WPS9U!R)9C{SQfuPXQI`5HBf zQolBPmOT{gRF#Z+9`MZSLvtvj%3BMnM-j+gM2s5vy%e!`#m1qYDzKjknz1O*czCKY@_Jp!l(RRWJ^-oJsz@FBz0EXe4%HZT1O@kvA!Nd{$Kd z`6;PJ-g=s)61hWx`$xm};-!<^Xk!5_@M-aA^%~j?L9|$8Ft`>bO(Oq9R%4~J_;un@ zB}z8sRc|WE#_0Ha_3dfboEV%uOc}1S?vmPXiW$fyQ7MSuc-M|{ zzwwto=AN!Y660PN`B0>^7zUqQWV*b5ScYn3?^aF<-?1Fkj5=niCy52owjX!!fAvnO z^eMMI4=~m;dAKm0|Jd`xYTWZ4I!;2Q7YA7>P`kxwDQ{eS(GL&;2wE}VJMKzH--#&! zPj<|=hh3RU6$_rxf4m=V49AuYNOCOjoFo5d)cP&7G66|o4oT0;o3=kNSlrz(7C}hV#0?$=*OC9G zYi-i_0f~ZKaSZv|2Z!!p-q5)h-`K6Bjix$xCWtqZ%6cE+Zc342muu{n(S;`#8u>WbWZhkUc^YxoA3VtNU4Jb^3%8=goovxwuVJf5@i?HR@(d7#;^w?6;rG4Hk7_0D9_n-tsHVO3 z$^}?nRmtC_)1|o5n%|xLdo9t362oUih{c(FDtH-_rJCoY8`lTRx}{oIW_BdVKJ zRtYN8`LyX~m`y!E+=De?f0rsE>fsW87ttHtMy`G8)zP*tnC;!;8#&~csu$8_Sq9%9z3=wjTv0ko$k8oD63M*LizOV#|K5I z&i;l!7e=dSj2IQKZB}i0YR1_w^))7hiG)%BfZDU*1B}hF++ui@X&8P7<7u`$*f^2&h*;uvFgH-sFU$Irc7g=bH({k2$Ux*E^q z@_7Y{*m(v>`ocr9W!{W970M^~Ux;uwP%7K=W8AbO81SMtAgxf7p`49PPd|!vpVNAFF z!Yl3XHJ%bve#CvKbH4N}*R}@|iF*TVP4Vim6&}cELi;IkMrZe6BI5*d6UIzykP8kD zj>tVz&L{`V(eFtGj7@MoA=`ooufl(?s!5hKq4D9?z9Zf80IX}{S*qL_a_5q)d2FiR|_-Cb*T0xL_FilNsL zA%?02ZKy12C6BI@ES3pbinV|;Y!J~XEu!=ZF93zvs*n}XE&3}7z1kxkEV_B3-dm!A zi)knS!%<+S7#>m?u*K^uilOK?J0A1>Z!ZAuDvfq==WK73?5kwg=tkc0z|}`DBDDVX zGWGD89hN78{S+I(tCnHV*^gUkdL%g;ybDbCn`EDm6U z74Dufaps>Mn{y!wwP32NR}it6bHw=8_{qU!3FlWew6h2$Xie1F^)ZSGC+_(CQkWnh zqLA7$*bN410hp=WGjM9w7FT+K+pk+I2d954P^p;w0k5LDZ<`F$2riy=Q?>PUXlo=) z{KU{#*k@j0#5C|NEGRtQt)O@m5$tHjYT9EXw_+6rA45Ah7wN4&j;gB{L)Zgtr^45X zK5YL#=t&d0w^mWxn<5E77t3G+Oqb0jJEvkqICeizIN@trs`$(up%A2MY-8PHIdH&G zG?gv0ztZlB$;xrms=RskpT4bxE7U}rOsWtq!8-J)DDD){QQ_>lFcGz?1sj|e@8vmZo68hU;}736jH>JB)3$h;8xv#hOVm)TL4^Me^kOd;V`p^9t5j>gI$eEzjkT93=kRE&?IzR% zF=Zb!zVYw6Rz2cuYYaCkD zcemnR`lgF9H>|HnDGBc4u(^l@OnjCog_J)-ORXwtEWLo-250M+;izOuxqPJl19-k-RT@K zkT*nXAQA-KVcpmI0S|a37RTy6NhBAic5F~Z^bd^_Ma9f*6bqI!qQu_+2yE~Fdrwh@ zDuOW=)@J1vo<7Vq5po-+m)p-`nv5OK>;C&(s5?AbSgLni#2lh|9!@t=w&=0~_cE=i z20c%!gsMJ?-`=*?7CoJDG|626E37P=HUpWHarCpWbLCNBJq01?=jFwkq;|^R8C$^S zA#NHl>2uZBu?wuVrD%s9Imq((h3tiKU4yLa`KJzcH}_p!_o=Nz5mSxCl#P zc=7L1;{&zMhh~LGm7k`Us)UmvoI}2{KA}mze)BxDd(PajbVXV=+3P5`KS1DXWbG)+%u}#_{KB~8Y>pwKo4Uw@p7-13@G@io=Mnd za*i>%e}&iJ+CXUPAn^(-*r3n z(b><|gv!g4LBi1?H~Khd*@}DmBfx0p9u=XWczAWNF$0&O?MAg>y;yX}JRz;jMH?S! zt6iv9(#XsE0g;twb26nvd{)7^?~a_FLMYJr$JM{U-((e}Lk~h5x#@ioGD6-+bD8}g zOi-WIhmW}VRJdQl0YWNiiv8n#y>2($l*4hvsuC_|KlzMA`t7BvV_yd2WpJ`^)tZw2 z(rYjJ{)+zh=RIZa0u9?1nD|T?2}~0OTy1twqqxy@vHYfsrJ70nPNu&PZ?rTkvjppQ zX!R|<=-dw+J@1g)0mm_?7&Vv2t}&7(o5w$SF%p=! ziuV=C;m0grc;8K62a=%nb=18ny9^rjeHGQ8(IAot1Z(4+QS)36!P9`4ebiN}ve%#3 zVcq4jP7@CFLyq5C1&6Uxj5#H!nr58_4Sp@R{r!|6bFnAC3|Smh-S;;ZTI5V2u=klJ zq93no!+)mUnRqReN4;hLi-Pq-2_2z$HM5Mo_7l45D${7}GS*G5s3^`Fdn2p7PtR@) z;q>bc{xR7u)5x?_6OYdxeMj=7KC`%IAuhsK_^PUwjp=BlScAKt1Ws_ypu}@MeSGV~ zFADuK49d3WFAXU0{(6G^yuLG0iji^rj-R%PrQN)fV+>Z5I>nT^I z;-qu+)8Mb>A~2Rp21U7FRU(C-Oyxe+P_k;AgS^@wIaIT_lQZU%qjTi^DIx82F8vJG zG0v2XVH#Ft$s@kM&C2}uLk6u8M%v@I*YPVq%p8c@xDZAW!03Y;0q4t?Cs~qnWbD5- z%J^;@6+#;Cx4F7$x33+_>)4;1>1Y1rB(SPMC)AFKd0LX98V=Z2B+#~HUAB*LebdbA zP(8i;>HrR2ve_oQU$o*s95w+shvh~E{wY8fu?y3>v^TkNqpVGLgy^N#b!S>gUK{>a zY0zE52nRud>@Y9AkY3Q(_BbRaX;Bd|#*3u+Il$C%8t*JUN>%k?U$#Ds1#{OlQyB1ZMG>d_a~Buss3ZwtYbafD z^k=$>+P`G7L15_;agt+dCaVswy7AN+4ajPT&Vg8uhFhqgUdDIoM{X~aZPjC#q-6TF zvGP8YEZOL0V`_i8ZC2#>W(@^|1s<`;cU_h|!OqKG)yxA44o$Gdr$>2HA5Z!uuo8&z z)7slaP)By+Jc@#U-jFGmRQ`Nhf@|}Ejp0ijDd?Hw_vR%#k=HGF1xJvqnwLoy<9~Ki z#69&OM9ms+g*f2R3T(_b$pG*lHN`JB9Ixw}n`j`G2OD|2_F6sVU4-;-v^g=qJWH0I zSQbrOQ>$GteL$JyW@(O|{AGL-`6aZs@~8Jxf+B+~#neIw1&RTem(*J8)?QR|`S^!3 z-tQZ;T;lIb&SpB**<0Mc*b-T##`qs@C3=p;`X~ebc@qi2iUUPNhF-?nUnDlz2<#Xq zs4nAXw`WyzwUMpG$rtF>W&}X2b7I~VGVDBpMKjuMPIza3u|7(oa#v|Wn+M$*w3U!& zsV|6U_3AGSIA%Y0><9X_`l=pLh~&tdErb;=7RFiYjH|11y?9dE|Gt1KgOxyB2RQ~_ zee+=mGd~IS8!_V=TUO*2NKfW7fRE#wmmN(NJb{LoOw;u1%M-ht50w)6ZFrABWYtf& z3hYP@q@txKAQ$Yu8?Od?^QC6Z-Fu~r%>!mF=JfOk$LSp2c?d);fb611?CYLtS!{ke z>=%`-<94PjL4Md*D;_({ek1gSS|4dGyu;yn0l$60V#88Bg3ZC}@5JJMuOYBl8v}yZo?C=R^B21?!ko7Lp76IdI@Oorha={^eAU z1o`(tLU=#Zi6#57KJhnp91v~pic`A-qPY%Yf{asz$KIc zzeps;%_tt9grO7z%Cm7fD9%BSCveqeOp7w{kgtf&a6SbeO6)B3WH%)BE3fAP79^7dkf68 z*8xO=b#HU4T_v>p9{qt@B8sE2FLUC{iZtuI8WD>eH4dQMVG|BvBa_%1NPRXo&C;6~ zZ1?z;EWqFSjD83Q-q)&VVE=J6UvGHPZN0{a&+(MuD2#Q zzOPPX*&AiQj|rhjJ>=En{U9y&O%_G}^S%TYUUJItkc{XO{4O>nvfWne{JQDtVWCrz zX+UVbGke>)T1wXr5bZi#cB#oPMPq!X9~$dH#=4>LNJ)c&YCPE0>egwzPV?g5~E$ykwWMTnjdN2h$F9 zmVVY%mt8T>LTYi4k8^Gfqw}QLcUb}^`1iG+)63) z!c*!Gz~b_NH-z$Iy+psU1Mh$HguNR)-^ffZ18&<~TG9uFctxjxyc7nW375aq*K=cj z9rm}pj84BH&OaNtRm$9@JUT+?m=KnBCN4!?>pB9hG}8JIjcwzua7cv=g6BEBsB7gC zy&^{S1B}?ijw}H{_cAl;=Bk0gisSOJTMm)7v>@15-@?jI3eE?qQ$k~dmL}*I6^n)B zNZ%1Gi==+3r%O4I_6`<*fL|y9jB9qZ=|@?<%TKQqME0A}XWPN7^5RQJm6AQ#8%hw) zIjiIqJobJDExAp@ETQMsXEIN3d!?QKjd{5xs*dM0ih1UQz0{tv;PQKIDt@6$kNd9~ zf@pa9(W1OIk!cE=V6_>=$7{y}3r_gkhD_6ICn^&&efjSP^hd|5zSf8xsGEW_(Z6ea zqQTh}(CW)To{pT`j_mE|zqt~>q1_^IDdY!D-U$%&a%M5NzPN=TYZO3vFs^x|r!AUm zW<_p02W?E{N0yftkenseJCsQz*P7(1?6`S#JRsG{UVTfnf9r-Hn#&Yzc2?=1rt7J= z7x9LAQc199&h9*kHLFYi?@oEP+E`9}5ot~u_0^84Bh86~a7e;y=z`({PtEkVn|Pec z9g>Y*rtU_pA{iBISG6{qsV4qJxLwLz2};``#DZ%sa0o@*J9tU8!MLDBHkoFUY<~EY z(3CAf+McKX`!Rk85^L0tjG!sCi);YrvGg4A;qsj?(u-7vVL@A9=e?VC2-}>07K1~* zsI6Z8bQYtqz(4)3i2-Du<#?*dRcv>eVHi*W;=(fyQa@~13+_&Q*ywjaeib&CHa1o)FtB2&6dPdx z{vcNoh|`qe@Eb?*8U!D-qOd%ZH3MEaDRxg@K4HEIGiR0s#Id(nYR!ld5>2M1MO3B( z<<>u?G|tYjp()TI0I+u1J=pmzS|?YxJts=6jd8jUA#5JCoYv z90d)f>3w~XImmjR1IclB`{Q?nal)GYVCB&Co4xF3*riubh~%+*OjdMd?avr|0NR?j z=HGMfdqVvZG7;niG|(IHOC z91@^y57y27{9@K>@9I(mn=Fb&hBrso@m-(rVM&LDRF0$h$cN(Au_%2xTSoB)fOsag z+!EnDlZ)Yaf^*tav{nMJ=W;ms;HUG#H|ClxTYY19*>9jw;$bedQ9LrWb5iz(Y3?-* zyyE@U@Jx%_xdjN$<2sgLddQ4`6c3D)U)FI28t-ld>rN&!B>eO>AP#xvdn)~YV19`J zdl1puPMggMm;Bw*1s6)VkeV~MU5NE-YCTf?`j@H(TxPxsODV&@^)$A{kakMH2@A6Q;Y-JT56%ZK>;3Xf}k|^)~6WR5<-|@)ATXnt+fQ>K$R|^L2MD ztdqVPxpiFjLHI4FBBU#W^y!N)=k$U!dW5c<0y9v>d%t~A8_W;l^Vt_u`Y63yhu(G} zocaTfY!M0l>p)5#lG>LtXT}SyzB4n8b%<;c-|aN9skWLM__$AbZ0UWD7(rRWHrp_- zb6U$F1N@%HW<)o72pSX%e0P=d@1bT7tj#IPMpsr{biOC5?ZgAIhz8}bWKD2OUrKtaJmvr-nWV_*%g)qM~cbYFPS+g?^i_LO= zdk;gY^!g7opbYH0lvO(mVZuF8u*HOoo`E)>2t{Y5aTXiwvi~x)>w%ERV#T8hotE zyGn<__7yF1K)3YU?Q zkwN7t!GWnqzq(fZ@`!`oJSXF@nW2B!Hsj>X`2QPKz^}lao!K?KkT3%fs(P69qZH%& zFX&_~a<4H%nW4h}KVY67R(b#bE9MBs{DO->Qql|ivS;cH?n`c{qS7ZHRpBl9-|%9u zivt?|`)w@I;63hH*4$}7?f$PN(s@}1zH-)k<1dxn+W1Hm)_nCw%K)y`=jQx4OY)mn z**0?7PfMlGsmJTHVyXJ=eEV11Z7-o8ZQ@9yf6q^qZEABzfD1fQj6<-R-qpN|tql5G zzmaB1r$~_F=Dk4EEfeM?LFIo&pZtkmO~U^jrfPujx!XS3dq^{?N05o>W-N-#{QfMX z@AwDni06M~>8L1~1IsRU=Ij2o`Zn}oy z8M3$yy`m?RK50Ka_Kh<-x^5?gf)}q^uNa}HG1`31#W3`<>;EdvQ5de|S{Hc`s>>7B zz?gh`->(7{O1S#(ENSA^dG5oVj#kj=M{|d_O%KqffhyS2Q z`tZFrgUyw8(9OhO#KG*`tcMkgf_s_q(g*R`4l+@KXyTIvdjYSikEBr&!26&8)#@)_<;z@65U}h%K^A?TikjF*ymP1CjamD^^HwF}(M_Nxl=ts&C%n zpBXr-Z$vBnC@@v;)?u5`&nJT%s68J-!Q*3i{6t zUHYNDc>b#7q7Uq%FecjTLIhscc&^k(=e(%41zbpd%|+ysd6tZ4NRP*8J%22Q@#bx= zA*FvHOmHy`m0Z>5vNN4V7s>{w{`eo`yA-iAz8Bv&LP*wsJ%2^Ky|8>)w-GQGUnhHb zhlvI0?BjrKh6MNQjX3PnW=OxxU4GNzmO$5k*FHU_I8$YZyf^&`?LXxj|9tk*T7C zUllT=-yO*?HW7YlO=D5Gi#2GrdQo{%rJr}%k)wF_+WLVmHVNcJ)O0A9I@RHNDol>ZHq-^9Icf7Wt6;@tY(I2h(vo$}S;Pp?QtRqv>?N49>cfl8m2yeIS;D|+hX zI-^TFHpYXHKb>1dSM;+KhvrkBDT$rviX-=2n--Rwd}f-KMF{+$$G!;vUb&Q?QW*Ql z+Hy|&FEo}{d&BjYj9an;O{OC&|1u9v`?6oo^4cOiE8I!Bq}Pa}{&OFD&o2tC8C7dH zXbj2HL^EA2RywGI#0)Hrfiz|{G>PesLYGdW-{cx~v3QT_PVGjAK4{;t@5y1$5C+X% zt5oR^35i*G6B*UMq<5q`cQA|Zs%cA_TollK<+J}#zL2(cr@72mG?Mb$#_>+bF^k7O zIp{Z~uQR&84MT$Ivcb6h+65+r-cI*Qo8w#iu)w>Srf7{>={)R`KMDT+vC>+CuGuSM zG-w#qdx4hoF8Y~Nw|wa2&EQFNc8bBltrLtS#QUFdsfD9rExVd3D-o4%hm1I6-xn%> z6V6@(6z1Mya69lPSxtcCs?=#3Cf=mV*{Obv8tEalOl3W_d39^<5DAQO03}1>t6eSc z#_?I0#6ByFTo%UqeN4J{g03;@abJUZgwkbk;ZTx%T{WV9Jo1VbuLf!jj zte(gAS)cDqcYTR3yBC6w>i)^tPj8xh*VGF!TC;5bFKQ5c-gAxo?wMmeE0yyrWpTS( z0^SWe-wS7pv#a%@Lofld1G6x)(f8xu8kP8*1_77B&r^?I*uc|#e~G;kju)rVKX^Ea zk}XHyFJHBKdjNiF^}2p>o7Bftjy}Y36=`(0t7*A?a#fC_Y94ggpJHWXl==#k^E$&_ z|J8}P1@}6+Z=V}_Rya-O)NU<5++Q)%(G=m`)A+uSQ2!e+4p~lI_t2gp0Hulxsr;DGzdt; zBHfL2r}P3!w-QS#A)SJx(%qmmf=hRU3P>;Au(0qRe((2Q-~I_)hqGs9o_Ws9eLq9J zZ)AEeag5rO2tqXLqxy}PH4{w+z$9Hc7Y)T`U%IjnGHV%_!kU6+=w-~m461iKaaEJESW z(1w^I=kj&ts&*PotKNX%gvXYZrmuquJ?F$U31e?#po86cQj+6Wv`(JGGGX}iNPPz| z***ehhC`Moyh@6hbxMoNRdX!ore0slP@cZwkZE^)YkF_1y}~CB)h&Gk4u_W@RI-F7 zVq5Y&Pr5j(zkz>&5vfbXpN2H{Uurk>ZL010?ib#oUKkMpR)z;}CA!Y>EKWW70GtKX zgoxl2tZ-9Gjn&L0>4eDDvgA#8Kmn8<6J~&lo(s0Ui1pBr{22n#_FYP@KXbVO<^`cEmoA|)%tDKs1Z84L?O_%zgNim>Pw+btO)-6!QxmN^|cgr~p zd9L%S9gv$so-<=JHC2g*<@s{VAgi=kvm%Lr_^YSuaAC~_?){6*U0sXILb^?7>=Vwp z?*{E=<sCmZ?bD?(*AD3D2e4ZX<#&V5ZAVW__M-}$b-%lo-8Cjo@`|Ed zr(^>jzlvGPZOKw(lh}|f<1)l$>TiSb1=pn9g-oRlLTmR8wL?&IuQZ;~T!Q|ko<%3K zfLZx%%9-@`9zn(Nk z^YVRY9$N_tC{R+7|M<=u&b5^vODXOv;qac{&F7rc?hvmEy-`G&5SRQ!AOUHZ8VC$1VV#;k;) zm@+bPd#lecMaVzYPTV8jYP_xY72oY@zugx>sAx3iUx@UDlS+*Fj@CD!ibVy9av`Ij zQvd$UYqH|oSDJp4CH%v#&d+rbV^Ndb&dn#G;^TBxy6;4H4uCxL8Gij61&dZ&=5(IB zLaG>=1a#O&0_415uy8pxS)`{s(_6TBUlpP1GK_8eki^kGw8=C*A z4YP!|e8IQN*Q4)fx5`8;HPXxXDp9=)e&b|6Livz|i{u;$1JAMmWsb)7@8r{Cb)e!i zqW>;T)3-9~}MDPuWfVGOC4*RhkPVWmIi&F0Kb(26$s@{%q|E5k# zRT&~0ZtzpQbxOE2-Bk_S9u>xCuD3VuDfq^5dS#sOEMoWD`xUtB1X+L$!(M51TNkOJ zB#a-UltNCV_tLpL4RFdyxav7o66BWJd4Obk4Q!i=IjSO9#N(5lhKn< z+&a`>_Zl)>-r4bg77?#X5^8cx=ie;8I0_nW75lTJ;n*bTvv50&bJw_{Rg`rzFD4nn zMG|_~gmU5vGBh3LKk2e#KO8jdI1yg9C&j!rHS704!cVWljPcgj77w-(R8HPj9T{GK zzqQ_q)b}let=!V1`Yc{bLQ^FNL-L~yx6~(e|2FbfY*momtgL+*c&jz%8?I2>P2}tUdNg#**%Pl!`V!1~v@C=~MT)HWFV$JmN^# zfdxY`u7=sM`yIYCITqmw%~@g!zuU96lNtV<-%Y~v7Ha63-&tPmV-obq*Oa|E(a}H* zNt1fL?Pqx-;1m=3$|h7>vB~C*qw*)?(ltDs?w4WoH6-*Bz>CeZCn6uCWya7s-xeeN z6+^|sr3arx^nWV$^AxAISuuAWv|@YAff3@Njq|Hl*dwI~u{4{RwJr6@ zXEn3MpH59j5SPSDv8X@^(Rf@*PcxNaPo=5yv38>Qaa;?;DDMv5no1Kcfn#tTQ@9fU zn^#u(oAmN7|C+)p&$|Q?Y7-B+(SM-PMJl`;_ew`IN9SeA>sXmC0#BcTxTdntB6+YZ zjuZJ&4=pun=9|4?KDzK&P?Em)Bu`+(uoPCNPqNI|q{W4sUs_W#E0n;VS@Djs(z@Vv^zAAyn;bm2 zj;S1~CeffyH9$m}^?5b%Q20^g6PUyBdGR$4HPxtb)?;r5$4!d0LlGz+CC(1{iM99{ zQ??!V_xNE4o5|&%op(3Z?j!?gSSDk5;i(VTx#`gHEjYm{9lfc>V5ae1OVV{DJNUG;u)sbegpKjVH7 zIEO6Wk>_R@*J^B=t7X(xWP^I%!7rgE)zT{xHsydU+WGQMLG+I)H6N3D%3 zX+m*}HG`q$@#=4E#O?x2a4~&n$)xBP{>h%u0%OdDx;<3CKB zl$gq4rpxhW2993JTh^1&W`VIYA&UiYf|{hepfz0c7dr>w_X z^FGWN7%!%AA>fcJH5eE|yNx+eQ=u^_(7Kc{tC zP)$0aZpWpX_}lB_QkC1Z=l*awEJW13A$IfofB1-0b_Or^!h{?jBK zA`I&gzK=gk3BlPf=uV0?svZ%l%*F^YQzr1Jn7Yw2e{L~8&nsd3*${uKC>UdUqlhyK zHdbV8Udyjg8+1FHkY)i1rnaj8& zvyKM~2Iz^bM)Z=7Ha(LTq`VXs$s$zzysBIz zZ-gx6#~BV2-pHD2S>{28t&Y)-mR3rh`-eO-o6X@12J_-JjDhVMSs=N3bHWQd#3+Y= zskE46A1b+U_X)PYz^fhl1m@Y%G$p3Nw`<}}hbDylCbnAWbI-;qKc>Zbk5PO7Z{lVH zr7u~FiHgcgmI~(eFF*Wl42^84Pq)-&^2y$>@=Jng3Tl_Xvwbx|ETAtsTEBG^Q5TwX zG94ySbT9h??N3j5x#`IByvqa(Wc;al{b8MYGC9vS;XLNtNv%g+5c9g+xSo`H*8#1! za*I!+&EnW)zo|{|2!+?=+h}v8W>V{5>hV-0N1$>fI*MalR+$jKP=Q><#jojK7T2SE zWwFU+P|DvK7q3J+px%|c7QLOBmOdeb!M%Zhuv}z%kgo6PtO|Y9# z^R;=jxvn{iOvZZ?M)8b+Jg8k@Tr2JaHlB= z^pHHLmv|-FSWD$bPTr0deYra;f3B?4{wrDO&tj+McV$dLQ$JPUahhMH2I3VO{l+=! zk`K3YTEK(2Tk-FG{^5An1izs@4%+=XX8f`O8ZFB3Vf!77x6r?Fu0AmfJ^StOl|1r` zBomcD2Vy>?H#mx|FtR)HgbDOv5;|PQLc$oDI9G$VIn$oC7yM6vQtgwd@oBZRs4;=J z?W9C#`W{ue|0LGGS6ihjsz_~S9LPdLsrrC@$qUcW*H2j1LSgE8M!M6t9522#$R>RN zmn`7cUobVJxb_z%^b?yRerN^1`h&xn-(+Z$Dfk1IaAY;oU0sarT9_e5`rz1U%<}oB zEvP`fpTZ`&BG^Z~p7k}!XZr-)u@$}E(i78|f*CR>2trTKvlx|Kfu%Yq4+099LY53CZ?S z*)96^k+P%yDNDNUiPT8AivEh0#A#&Mv#QaGkk+5JKes&5^yp|3pk;Q{Ra?yq|z_ZtJb7M3e+%(28(p%Hr!{Z89lMe8SKVHhto8 z)Mi;QORraUxmUG_UbeH~7jD%wQ%6lK-cVJdZHSLR2gXfImgT!`$x$&0$3V{#n@&f& z=dIP;#`ABQLG<%GMCAnlZWuUZP`MX^+Z{$Po3W6C-;`Xd>lOIOpqwtb^3D1BySq@I z=SF3=3b>8l6eVSzjma23fnTumzI@8^#|~7!{BprfA_F?YB;Vr{t#Nu{9js2#fY)EH z`F29y3^sN+{&`<17q9L*SD(m4FDYW#@M)KaB04=?N~vUsm;Xf*x8Dr%CWm^xtF1pZ z&(v}*$F15mCMcj4af3g2<*wWW1rLi6N4MMJCKH)oreR8bQPU@5U&oYXlaxsn2xQCU zG!?kU892KckC1F&sZTV$^VkejK2hime&PsA+mARul7Wm|s-k8484p8(uyc(;T0wW{ zH`(CA!QeYDVv)K+U-Lf*Mm$P9_vFK?YwtTI^M*`Ka$^YX`rqH6;S6ZpsOa2>dwByL zrMpChJe9N=Ng*P5K2iopOViJ zJnKV0RXZkiS(js>uns1T$0S9M(;_GWe;Ay6Rr@vy{eCO*x#gIZ{acQ{zgR?5;)MZ? z3kCeE4GTV4qQ$KP!FCHzC;g{v*VxTJ zxt#UX_F0c~TCfj`rADqIg)HcUT7MI0EQ-&0N@-U{PkOW8F2#sO$fKI3j&ie5W`q$3 z&>mi>a4dP}ng%vMB@{`lCkM+CEE0(0M(zF3q)V20j;(NTDJ;7pb~<~tb?uEE+)din zjH{D~kMrbfLOuT`n`a!6P0nKx$dGZ$7rTzx24ina;r<#+jNxN8>)^Fi^7p$|0x?oH zJ?PcmnluA3E3KpL3a-q+YtniYD1ip@7^QFM4me23zDlzL-+kP`{mL|~`|<_}QCT+Q zvCuvZ#q~J?l5E90j;ILBt$@=f4)p0F@`jn^3mur7R-3LwWBd^T!+bK~D>=X+qO5Nc z?Pn|jP*z&D&1Xd4k&TBgni&*Y^Gzxs zynpjeS3+L8XUVCqOO17~ZwPlvKW|&&ZD$zwxDC~}u<3<)JmsCh4voRpr3ux@XXEU8VMwbJgfGDORh^olkbQJARJW5d%KwBKa^RzX^fru4b#v8B0kB&qkGJ%wXX8f zRm5g6D7D2edkc?XWQbG4=(mjC(V-lRe#XSpvu;QPF%HFN#5b8pbQ`BY`O#$Nba!bl zJP)SaI=ic73}_uCN*l(4MJ`o7BJGkW+B#PzmCGg>iu@83_4Hr-iTjzY0X$iRMhE)} z4{93J8t1~VB+-{8U^pVy@#^AWS4mQv*|Pk;tkWrTCG5Fe+FceSPE6+U&^Kr1p9w_k z64mLsqSawJ^sIvc-4RYeAc+>H|w_!oBBQ7eIiVN9XS*#bEom%~_L7~XSp zFqauTz60vSK@AgITk0gl(;trfII#)={wg4- zH&>i9GY(itF_tq_Bv^jjB1V0w6FD1Tt+l%(6Gb>MJ zaoE8=C)vH5nqvtJakkC~JVWRtF#vE;IXtxW@K*82m?O=C{9m{obE5?(0l&3GsIBB$ubh z7a#LXrc@SE&E0JCpRH&acfCcooiN6yT|`}Y-v?##1;1!G(yj+hT12Aza2YG=$DfJ- z4B@3I+emj?Jz}`yjVT5Xa8ez6w-zb{>ICmwpy~~-E#xVu`@UcgS~o_fOFa$B=dM8O z{1{MQeeT~;lsDe=*uV8W;$om`rJOPh+A++8b0QAuajE-^!P!AbW#d#=$Sk?=jq4>` z$)t5_!%aT0?Suq`tZ|uvHV;SzeeJ-{PkO)jD+0%q;h)^JWa-*~&uqnb?8DQL*=;Ts zKUJbrkR-JeQF`k@1Qp}U7%_=MTSBTLUMx3j6x8q+bwP1#*u!eqD-?(`>MILMJ z2+<@$Z}0f@LNZLK{P5hMVjmGR4&qJ*9$t&761~ErURrdPj)qlmur@I8?ZZ!VD)htw z%R=oV?wL<3bMc3$%wRM=%WqH%162@S7dByf&x>SW?*m&mY{<7)IwrL1qio?gTabS! zm|SI%mIakazAFd1;!gHVlpQ{tx7^UhN%=^xm&qGDnRrI?OY0K3ppvJaT4D_3N=%== zRT@4Ht3AF|=tW!O?k7ECQs0baEzFfp_V}uWuo4_1!EDUdeY=QSw z#_h*Zb7YvC8DVAftUj90V2+x%BRR@qIgQQjIX3kCwY0oqggWQf92sLy;g*A+io522 zXV*Du8OjnZj%9{*m{`-hx;aFlUvQWHIgJeY!Z%KanG;`-Cj=9!9;F~V0rdu3 zhQdTjqC#3U&GQ(J1_^waajds4<%2fOml#Mf2eh2RDl1x^%>{RsTg*G0TTR*S?N~%x zBj+xoAvg#Fg{CC+RsZAWh3DlP5Ed*$<)nhtu_YBtqOxegQo8$)fbwJo$_;`|2RNFA zz}AJ@$V?j8GQzXw^?o_KP*X)xd={*MwKv$FRa(PfkJGvf6~IF&qkE_075U?DPPD+s zGo{U{V2jsXhw4pQe`Y_uUf12`uNxxX(41LWx(2UH(-fZpRk!@OYd`WoJ}VA%?rS5% zT+G?e)a^xUFO~FCsC%{v93HOvC^wQ@i?~C|T7e=-@~OQVkcWOVnTw+Vw!ksjo+M0h z;91_{n@l>EOY@ntG@U&rNC1mQ{PqZ>Wl;{cZo!U zOClV#zOi8Z`ZQ5VFwps<*oC=2?SoJJTty%bN2E>y*e_Y##2QAS^O1~?f#VcxEp7RF zX_^ePG&)Z!4<1rlnto1Oar|xWNzvgxtKn9G`v}!oO8y-cGtT6waj!Il6|AI4IAxBB zTHH!ul*{1aF!EbVn>udBqAhFI@0G5^T#MXWQ}a~rH-N|#?73@^ z=y-+RRoW*zrGR;Pn#uX-NfH*UTtui zD_dz?%LlL+lu1p!spMc$s%4d&q*;W0jUd zz|yx#VQt=TI3h#DRkeD8hG~y{I6|Cw13&QNVML79IfnW^e;-itdq@(TIUfOx+ywQE z&x;(etdVL|bv3q?(_UL8)-|`O)O=Ni%baiDY+|W#ZTGNG?d3X?^$1qWVEERU+Z%H{eZ z6&cc2<;E^xA+f_b2ffpDW;RL%_rJf1b72xY2uXa%RITm!tcT1YjF23S!I28k+0 zqpx^*24IKjM&!9KvJvj+hQ_t9ma}t>N=r19AC%Ugu$+$%e0kOE-LGo4Gxqg`{)G02 z0S)DBU|g?TrmL}+aI(!<{Z*S80~myGy0)%8lv_?%uGB=Bz#A&Y33p~P%dM<~E+P7lgW zvB6sVwa;v^NBPU^r5^OZa$HD7j&|Jwuq%}UObLnp9LnhdL_U8TX?@Ehko~-at15rA zeD;9M+`>}RmHAju7Svy2rFmkPGn-?S#cMcndhz^_K4{95+L%(UHmH7+nr6sgy185V zbESWnX=hJa)|s_^NkQP5AS}th?2(N0miI?f84w!H`n5kUlb zIQK!%lx+X&<6G+Pt#3WJrq=YP4uUG6angUOerehgXVb7n8J-c-TY?j+ppkF5*H6~; zmig9l-D`}jIm%D#8rTRUb~FPm&6~6486lsyc0AWegXp^dUEhAYDw%m#9Pe>u2`mMz zhEXx#IE8$}L|iLZN_}{}+uJ1xKn>FB0T`UjiYs*avqb~i6e;D7_|?+rhz|_oF#=&a zn#lNC(tc6xG(LipPftJbb^BoHxT$_!IFu{h63LVSL3K(U{bf7-&3LX({XxBoQRvAQ zomwmlm&wZ>9<7p=^av|)pjR!-k~C#{S~Isiy2BEE6>GZb{ZT~1Ja3t{BurrTDV#rK z&VU?qrnVmTQ&=n1msvH3fhOj-K>pOMiOdOyk0gA?L0`WGXppW_brV|&Fewy<*L3dw z7gQ?*MEgtRki?>G9ODZN4Vg((iTX$Lz|P4gEmMEq%-oWbAfL3|xsXq1U?(TAZbm3P zzZls#R-Wu3am^$KFNL+r12m2Nrc}h#+XcK0;eSA!t8hD^OW0q?H+8P^btS6h=;pLW zqkhR5Y-5<167V5QuGfHYb_X<;ANH?6>9CIU%us@hb{=i#4?<@-NA4-RDplFY#*$lE zYM*_{QmJ4vxaLoi6jXdMc$gAvFI!YKml)`^<52$^A0PFQR4T3XHIIb3)~M$@Abn3hzRJ4EAGVU3+6Ur>}fde*v>oYWB|hzAjz@ z*KEtU>3xmR`6Cl3M|GXEg=e`1l>B{1Abz(%GzoONyjQ<0o6MJj%@jS6WC zO%hyPj#rV%7ExsJu$} zAR{hp4yox~D_`+E4DS_RYPPE2FvoKp2pZzz4WuA$z-Ti5AF0RZxlSBtb~TUinAO~#$wSqY->QD=4O6dlx~_M@G=5lFq#~NOeL^;-s z?-Iy5uLy>pavt^M3@qSj52(1ygh)zth*A^ZI3BIX8|rfbR<^Nas$KxB$g=H+wohOB znReH-(?_7&QmMfT?NmW8reN^l-`06pD^=>E%fRbEYJ#r4ch8AEvjY%4_g4$tW<@s7 zvfLADze&X=`!&P_(EY2a> z&p4SRryLI>&NEYc=MhE1cnHWxZXGSGjxMWPPI~73Vw1KWA{XcIA`zGsepA^TEA5*l9P`bfd9thOIV3Fw^!PBe^S} zvTsQ|Gt?w;d0k`WB>^k{3x)sC(KW_~$8wRT94G52-W+FMJnQuJYqEQUH#`t3JrYXZ z8F`rcv5HzUU6Q=w6klA9zHcjWe=z3_T}E9CDAD)g<1it30VCQ5u_YS#sl$@zDq|gQ zU^wkaYGAsJOYkjWu8A=;bC^APxX!jT(|rg%4v1>v(VgA)bF`=C@G9g$(t0srPV6}& z&?NS%yi&QN{p>e&z0y^^!nz^J;&G-Ahk(>onOFN^s*+ODE|kNFde;=+hk*}`ly^8&rs#VS^^zK%j3>w~^u{myo^TQD zhhv^$P@+y0j*d@)nY@)AoI-&sv+@f6``>nqQ|bysOwPUhx!VsgtowI$uyRWsDHZJu z@B7b!^IPydU+$0pEC%B}tr-dD>)K^Ave4&d{J5t2h~Dzmo?GNF^IAKp37!{cow~fv z+iu`j>0rhY=1$Q~-#m*qY~p?MIH3cYkceRbjSaEqNw#~!8lqzt`RDWTw0-&-wPdor z={ZFTzn*usp2YeG20VYdo`URsu@&8-LsZTT6{JW_B?(fjH8W(S{T+{#!^Ha*yBQ&M zZh*moi;VbM{O%BdEjE8XKg8 zb%$@YJtv8*dnd3RZQjIawr>Kc!QE<+OE=|00gN9kO?Xu{>|B!udkIAQ>&eTV5EQhZ5>;I}G?0w)Qnsu&SSMZ&=TwB5` zVzL>c_lT7K=XpFNx84X49@5K3;w8q+&Y9Q;$T6c|hFXS!j~OfDLVmG0e^tGb*^IgK zX}|l-oap@d2QKA`C{z{35h5x5S}(NGCGlI|DLks>7jAdn{`xD6$*@iIP8@etms6x7 zBu_#lukJ>?H4=>Xf`ouQ;?qbdemBWn!yUynt)nxYRN>hJwXO%*H_yf*9#pI8tFbb{ z7CxV0Kesp+Kqo5*zQ3ue+j!!uVOkXRHOEN*XB8ddn&9!5E{SBbCEaD)MEf5~EkE*R zy5Bdx?qoC6T5j^3W!qwLGX1=0_&C{zkHYwx7k*I6xdrhy#2v)N?`C_fHn&olnn+zU z|5JEpO;kg7&6uy6?x&0Dl+F6U$h4InQop@u{{24h=;K31rTm}gIYY_{*Nj+psd5($ z?K!>FCFK{|n~Nc-KF))s&aXr$rwH~>O;ht14XNI4wQb?2#g3#L9D&Y{hMSgW)O{nF zomqs|g~u|IvK2fa*c-$v){V0IeQdAsik@)$RPw7p1JoItL|@UU>e86!w#-E}DuL9t z5o<`#tih%%=3>oQ*T*aIo;g8a6gj#KjiWOdYZ*94SlgyZ*sV?B2HJ}OI+SKhI8d=o z&ws~wGp-I=_qIoT*_HOUeFxsj)gbf*1Wa|9e4TP)m{C3>HR}^7ej+KT4O|vRdzR`a z#w&{YgWPvUL4q6{VCwrqJ_uX2Sm*VCC-+5Zj<4;mqn^M!FK#$rD48Y_In(UEjwODU zF+oRByA2mjb7pBqBEtMg%C@cp9aaklO$cF?JUfp)b6ywFp;!c?t5igcK|Avwd%Ntu z)xqimbI(!Ju2dN-L)NqW&DQZpZ9c9(RQ8RIOfo~?kj@)ddjnUExH$WjTP_W4zNVr+ zHZ?zl7N`44^KCpgC+w{1_Xi-JZFUh{rk_n*suF*&Vlv={UrTlxUnMv={;GvJcH3FI zE_|vSA2VixiI;6DlKf@PjB0<|9{u@ooh#EP`6q+58nTy0Neh^@}DpWkmd(wie@&7ke> zO>5qe@qahfVR!GNbJQtRYueZPAXzQhgQ$V?9eZ{G!g2M%xN!r(e%SkMIXcm{b!HyQ z2ZFcKY^t_Jd&n``j$u6{Ip)FHAbxN-W?|+4OC7UzQuVIg@#;a^p}U-^Jw_G)#PYBI z{Gj_6#ayR=dvtdM{MM_-CeuIgyxigu0KE}LJiv@rrk}Z*hfMyvvlLiObLV2$1A^I8 zpL1TZ`as>c92#~%m>d&vs8!-1BmdFA@{Ru2hWzqg3~Lml_yrmr6)j_p3+q83J% zD7%<<|6PxQ43jShkb|ltmVR#n6}bUw@PFNvlzeJi;n~_a0qPxPrDsI%zV|$`7oExo z2L!I;>>p-id>R zJ6<$vjd}}AdzOd$Na|)`Y&JC`$l~Qkk`j8qE7OGl7Mg! zU+vN|s9yyEgsgj`Io$G#47scWzqwYTT;y~yyz|CE2KW+v9kC8{oJJ3}5*2{4civ0f z4UN{>QwUfxg{&`(`ZU$XJcwXx%l=GHB=?a3`YzeDDgg)*qW-t@eUd&EQ-E80)Z{lkfZ2cDj2}8^>myTHkbE~mo6Gwis<@DCY;L!Z)rUv+ z{p2PwJ^=cD*K}FbjwlO|f#?Q8l_U^A8E4qxyi);SOJy#DwnXQCDC*c6TX(5+SpM}- z%sojdjtNh-IRa!MkMGN<1EG#*1FcEet6PA47V$umI@)B^E#Gbm5wikTTf~E`*7G3r zth&eh|29&*kvS7zXCS6Dd?hGaEx?oZTzqYCzPChhlwGZD4_U{mel1wU=yR>*Hxh;dEX?)bCsBDB}M9N6=45MKM{ zR&U22Kuw_hkGOXYSfiS2R4tY7=pcu28l6I*;V_0N}Bq*f-W`q4>)$QIoK- zhvCb`i1W=7+tQ%qp)V6JBWIi8hl^f*_b1>WIA6L@!;OZ;FJDdivBpCZUuH#c~KuKOD-0MHl}pC`OwI`SQ%UoA?# z|3-<5+q+ctQ4ng^V$SR)t+~yXdhEd?TVt1Rf2TQdVSESteK)=a@9TTy+&!_irGZrO zsB@>;uF2f9IQJMEQ0`SPE6a_gf$?e1)PDg&#ORmH=+w|@V5Um>$k0)sdEu0gE^eWlWpT2+qw98OD*3p5(VH6mMBNnCDb%EF$+oMvr_ z_dFbF+IaU`9%Ll&ebl>(|89ix%`#&`-PpU1)7bUk_JALPl$enr4^hO1M)%IHJylxl zEVU`({nehml-MiKbf7`!Z~Nbi9sSFZ=%y@^55k10Na@DgvD~|}Vt2xrps5QDkQeZA zk~E>(UY<9W5ou^DKFBF!|aaix#@R%J+-d|FeBQbsn+E~t-;-56{P74Xzu;Y#R zN}r33L8m-m0Tiastm`+gpXTf?HncYS?`WEe#Jhc9s;G>algxH7WTvntEMK0P9q>jr zUijZO0{z=H+1mnVkO}j)cHYXK5mPheixdlXI(iF}hH$}-U!0xQ z|2=z4)u<4A$ouyrwAhi6FU z6Y9ZCJzfOF)%G=q){}yx<#iSz!G$`7{LKdFgA1siuW_sf#+_C(XXMxBX2eM1GyhWrE?Eui^?H(N=%uY zo^6%d)(7{HyUQXKY=raUU}^d8!VQQeHcqYXf*M4;Uhv=;GH-l7Eq+$o+ZEh+6!f)| z=lAiC+%E^0&~d42e6qtnoz=Pv54_TVyxy~ZO7$SfRXDTZF?_8~)UyY|dIWjS(FYp? z9L8UQF|j$W;}0Y0I5*PS+Hk&>7`82!&(nqT5WHzMd(g-}klTiQZ4%U!Wci zL!)(upm?H37Xf^rgG%!VS;-vu9^> zzy4S3_bQR2q^6m+kV^oWsl3GLEMSnj{XNZjN8R%<8QUyMg<4VGWHkA8bgbfLBlL=& z+5USNpzn`r_v2E*${7@-(}|qNt^M)CO0bL={S~njt20mdlElE{kcZpu!36$a?Oic| zkHdExjt!byW{jF2qUoPcToN`b4;|=@9+ojEf6DbUKG=pj>z``3>V1>cYmygQ^g`9VBp0=9 zK#CQPZ-5#xvRPK(ea0t6*!1rPPeHajQgJIlsI5JI7s188oK7hQ zk(*7xT67Gc_G>8K-+xF#!Lya)4=Dm2F-uWCb}~legTZLC5&)zMLE;s{3y!t+PH;d4 z+|jnLC&hpXcHLKE)Mw*GI4ohcI7wt`7BkH*e0mVh*Xpr8McQ=p%gW{vIteai!1j&Z z-@)TrfOT;64Lr-4SH`K-<1Eg@p*VPojdK!p|40@`@2%ct;r8Bbo}uRL3c_zve$BoW z@@EU4aoHcrK>vFMmBHv9!JQK7595r%t0D%p<2ZW^eg9h^%-WynpGgGCbTaCtj8)6N zn65o)j?oMx%B--se*X4pYhdopZ~ICfio$KNo35)J)3G_pjf;q89md-JPBB30`0jZp3f zV#Zc(6oazT%XP|~ch#1Uw;7p2AChFID9aE=N^iDYGebj3V`p5ckJVif6A|YNPQsm< zxm&TI(*R;q%5yd;Cbm1aAu6o?NYUQTPp-DW5vv=qa%}M3?&o0ay@}_BOTR<8$T}uy{3Kt2Rb#@VAiq2 z)MZ!cl@X%mDrSoduEq37K57WAFoDs94N8OxqV0-KYbP*d%fJ$hXFu>#3im7?o z9sD&-B*b=0tK{9yal12K6``Eet~6T>W9aQsTZ4tEjuZ!D7L5m)wRGoi;N9w3UzN+( zk^(YW8M|OEMj2Jmx(IaGbrM(C0I?Maa|U^g+dLGz5EZ=u;cF$X?S-cvZO^yRa5d4c zQf2Rnar98&n4ox^v+kN5a_wJ4w_E08%}v~U`^)aZ45m5w+)CtV9EP3npweZ!p@cD}mb6AAZsV*0V;N&IJ@{H9O_=)dcBV!#fjX=R^J>WCi3O z4h=87IVM6?*~~Fy)F5HZXx=W;7YSl}AJMxY{GSE^$VP&7gB7pYjGoQMz`L?)4z21L z#TW@R9N&)KHRxt39x7`a!67$-H;Z!OBLRW?g2Tv^nZrc zNCYU;+TQFHCT^mL)iC#MhaVzZk@+Q>iH{~Z>IbD1K*M6c(w&U7ldh$!NH8x#M;$c( zd*M7$4py;XT5!fLUsjSLe1Y9R*S0AzNAqt9C*(|OGPrWhR9Ke@bNh!-I2gTd3PtqKoJ9sP#(4_pWWfK$+Mk#hHHp z2N_}!3DsR9_sDy0!IFV~%x6c6Sx;nm)?Rl-0n{MS?HeXu5-zHGn0@AV=5?$s|CU<> zunLf1I#-KhrUyU6bPCEodl?>wo`bYZ1K5uyeGK%1VBguDHjp^x&M=x~?_yW$tbX2* z8%s|f8D@;PDu}mhFbSVe-@;j2X|9*D#^fj4AZ?q|s}f^EFk;Zb^$Fj24xbi&%tcHH zRNQHrx5yk1=Z1QBP?gKj!Dswx8&Dks$&<8*p%GvvI;r>EprD@CQhX8Vh4` zFi`gShYoeS=vv(fr>*VLhq5evISew;{#8LSUca2&El$?UW>UL2|!W z9wX2z{im#dc4`OjAQlS3BUsCQv1Gr%3E>##;-k-xbl_E?x8Fq=3brJ`U-0bOZfi3e`UpHgM@p7O;gn$4(XGhJx_C}$=6 z>#<^3mKaG-GXWooeI5Y!rTO*-SA?e6E>o@z8`%s{mYCQF-TckO^}q?8A$#kCF&Xv+ z+}{{e?c-+GcEXzO$01{2RwQ|vVE^hc**5XzNE&!0k3N!}4{h{q0=ok!CRZ-LAdOw= zB0^7Rv|HSo-s7k7lmSu1vPb~YkC%7IpHXAf(K&n%xp3{ZJqRz@#@;5=T5eB$iai}$f3czj(3>u1*z%sBJ8Uqn0E`GUVUeU`$#ZR$n) zSwM#Q%685rFvjw=U9OL*ULqfT@VQ;MJ_LXp=R@sfq{pdRmvJ_o@;c53GI81}L;k42 zl@=5HvE~4ltZGhkQ1qw^lQq}XsR6*@2J0K81@pI#FdJpU@j4^oi>fJXLDS99`6MgV z0zRAjYo7oCn|~q?C5pD^D<8_Y5Mc{&xvgG$J?UEKW8R**Lm~S^k*M<`l z{7RfD=|+i_Kz!r;|IG`6_c7=f@DP99Eqsy8KK4qv)$RAtT73^0npOtS;5$uUgO2*t zyb-YFZoA)mU{kn>tVT#@;9Ai4k-1~@bRri%A75jtw10(k^PTqKxS-D~v|Pw33+)}o z(wM=9Bs5r%5Gquc8eA#w^P=aIud|^WLHYS6EzEwP|*qvNMm=U`K zGCweao)gk3Tv+^puhIrC1ACOuA1_!PazW^o%bbpBu4rH!zzP;nX(`PX#9L;5WAj8% z&A;^Olqb$Fx z6=45%F$%0KosF5|LCn-Mu!6U79y+){ZcWb?24EEDA~TWv{TS{$p&Bo86hQMq7B`Nw z_8FH?mdvg8>M>S*DecRpM9?5mEbE9 zcrf~F{3%l2Kqc_-Aqk();>Vd+&+zIppWMJ7Zhs_g$de8XNQgMzYjc!>S-+m4*T>~=`hi1_NbEIJ>P7_O+Bb3i}{Ti-f z!RUvme@H8Q2%FYpLSE=rV?&|5yD?I7OSCLDtsy-g;C>Rkm6?zfRN&3N5YD;2h}aw4 z9s2Rg5RtIaH&(+OYx~AA7)L4SAuJ5LQ`Z@3&O(byTvMHCbx`Dn?LH&lQ zkF^`27!@)dpa0dO&LXi^JyZ7rXuHNh_`H#Qw9@~O_m*!_eg7Np(A`qfAR=ATHKd57 zlt_&Xp>#;s3`k0sAgQQym((zdbW4MjAdPg_+1t0 z>wVuBQ-tA1BLGnK12LvQsLYA$9`Dvrtn~L2=Y(8Q7X31P0Ujf>jVIIynkiqTLvAqB zztoG=oTLBO6ac_>R0oyz67|at>~jb`3}>{%9=`2f@k*V`2^LrOb#xQy1c*Cds;3Ow z##VW#@?i(Z>Ce388yXHP%9~ln^alrOfXN6=-9446*JsKGbT z(gk-KxOYw(eREpfiCY($L;nhW{PbqcGaLX?#>y}-eTUp`!6~I%*z=jY%S9HR9e(3w z*gfwTuO1BXNOG7o=otJEez9lcLWfndi)nExO@ne z?hJ&X^VVgTQ!|dXI#LFji>^-bdSzbIL~{7>tN4Tx&!W{D?-OAI1l~nO!^WP(l+lSK zy~lj5KG4511(*Hprt$sGxvDYbat8*t&a1rvEC74KF*7ffM5(1F@Z<*v&D4yBRUfI! zufxyS<*y`IloTF+K7Ap|^n>;#?PWNEoHzoOh%rKm<;W*f$TFpHFDhtJl8440l2H(Wu=%59t1_{oe$Y3b3jxj3Do&fmv6c5hp?n$u%-WU!Twz zac24la_!NK=`Y6MDEGg7KB9eJ(Xju<1qah#yHONBMnrju7=qi6bU#KzZM0ic5gxGA zIi%=0KeC>6%*6@1dpA63N!OCabJD_u^f6J)3!A-^xJX{*jG(OJ zxW%zaI-fX{DDF9I=2);RB%i}j06rqEZNymm%+*h}CT%pWXzuCWY-sB9G379FNk;rr z>4b!SSF3IkE*?8#gr7U58H1AY9QLgU4>|KpX4!oh&Uew2H3@8LNsJ89boYab(MTzG zM#IU5HCAvP^z}B-%hyeJ<4)7=N;8@KZ4Z~sl6-YN(n?CMa@7>Cu+)BkZqumYZVzns zeBBXgO>Gxbz4==jMLQyWK} zLnovfA^5@+JF{S5<`Z+(#yAU%%VXWj=@fKt8)2cWEh!00fllBYD0m6-uKhf@=7*MF zvwCPZSHGlUQG@og^zkB=9VCx*r9`N{L?XwyGw2TIHOO;SPYTz3%jNegI;ihK>*f|2 z@s5=~eKiXH$~^L>&`ki-GAcJYEZUJOr8Q&UC}<|sTAhV~><#4sdYXi$_Na$1_uu+9 z7rf8Xm~I)J?t>>V@vK)8XIGc4({bVw4!@W6#v#=l)>|mLC_E^ZUGi6g_Ls)a&{HHALB&?@x zY1tg1^`OJn+tqTamTDkCN45DP=3*%nJa03D zI}r#{Zir(9`mV{4cpdlcF+$-af~rdJjJR6uZD_QZ?nIIB9bsQKn~8kMD1n(6?m__cgpK6R(^;682W3#9pXY%!Rofr@GxxK~ zAXxsobWMi2QY9>FJ+rbV&+AITrHQx!z*(nXr**)t_ltAbpv8$HszaEt1bO*U@2%Z=Pi-xD5SF%aYM7&N zT&f!Mo1Nt&zekQE|H1UX+YFHtLgC8s$dI%fo1yf;zog9W_&L{3CoAWJZPUw>84Ldo zRa_|U@#}y$D7jz9mvhl)%!Bgo_mNn5AE<`F&c=i%=7l4y8(Vhmb;2Xkr2W9Fx-8VY zg?2JWY+cg@oN0qTpxECn^wzC|T?UI5c8z`*FD08D7aN=VlQ^F~0e3{2)PDP}RbE)= zO%^ZfTh@qq@XG@~jw~zGEzQ~FFWH#nTtqj)+l%!n(kag$=u%~$RVJl>`WU#f|L>=& z!fKKND;2*G@P_&KvlGVH-B3YsdTEsj&ef#rCA|3m&3^vx9l+y%o~Qq|{J&pQ5hMSp zlmFWa@DTXV81?^Wf5a4dd)ao&pddp4KFVAT-Chm#`xR)(l$is~?$2Uw3|u%+QXf%Q z*f-yu?TvwkUd`(wY(@b0|B}a1?(xDe6%J#RP5+M7?Rd=C?eLfWEC&y18Km`a;r4og z=vZgcn8}~v@ahduMNPR${V(q6Trt5fR}rmqcwo=+kG^}_KWb-==eZpjgXC70cNzCh z-EFvgnC`SQqu%=KG}a{mE(y#aBeD^a5`c6b5wT^qCfyDWM9yZTc)-%rLikX?s^~vS z(R0BY*k7h}4`2ZxcC)1HyI|1%+a+)*bq`RfeXsmw#>?Qla1D8h-&~9a?zPm1f4LOS zd-gz{>kQE9Q9Enuno;D7dp9UUtp)STNNI?XFG|3MroipnHDRy`j z(i$}uD}M(?*TH6d&}Q8z`HdZkdynC zy}_aRQO9j4%N6Vl_^5|B^W^}w0DQA0(DHF_W)kH^EFBCmA7z)ogXboc7RpEGg zQm@KT60(3rtjR!@-;1C+s$NX+yb((eN5~+t1wY6Qm2wBAsyi?3mQYp{^8a!0h&o17~u8hUD~e0 zLI2-&y*T%jCG|(rKhO5TR#|NS2bM_3ZGvu~OD`YE%(#}qnH;XN0MVXV0O(O70FQwEaE86BM*RSnN&Mkv&phEj7|E?=DAcyG_|8s8jZrw6>SO{LkVxjw|{e!4R zmxFy{=3EffCeZT^==PYG@E_3uvO{w0Z4RJcvjDOtS1AQeO})g*Wm6K8P7-hnZc`(^ zC+BVytvgrK&@UeSe8QlyF6PM8Uq>~kLrU@YGm65%lm(!vPD%gSYuW++M9YBj;%VDt zZ+6(&i+N8mvErRk?(o{3lAZdeGb2@mA}kxv-mn*#qJ`>|><8rl4ux6UHH0e0?>$QT zH$}W;)`q6tT>=>sxkeX5zMs51V$_C{D-Hg0TNdrFv_0O7Ss`NAXKTHfMasRKXXn&1 z;O~~X_VBv5%A7q*>b5Gp>PkpJ%_{;RaU}C|T|u#o_zuf);iK64Ds$Pd9sJJ1y+RqQ z5m^A5!U(ME8JDH5y?*_|a>d@}GWMM+%DbV2dV@0nQMRWFJ_M3kgCYn}__ySJ7 zbze2IUT?!${Euj@>?GKi^@Y1j`OWo%0%F~in2Q(m0g?GLJS@%$sIaW;Gym(}4#GNm zBXD%p;j`e7G&G&Q^YL2KWb5B_ZWuLG9Kwar3kF<^YK-dnFmaEF?Ihdx_Tz&C%=pop zxqtZV=m-5KYRYkPrUZg>*HyUg8kdBEOisQBB9awm`eILi-W0%Fs&2d+`^-E02^<^h z7xv@48Os6isKSPiPjs3`I8Om^u>A6r+xT(8uk}w0RDiXhb#5=+v-i(l-FWM^HQ1cbA-8{AXXbpW|IYmis#KCQ&DKk3MS9K(~-&4kWf#k$C9z7XLs41X!Gy70iCzqvZNc zIb7O{ki83J9Uhrm=_TM7C1RlqHP-fswybG4$hs|1&3?uS`2gBHi6i)ACQCB zJn+2P8zv=UAuprTtxX^QY$u4(DSfp)b`bEf@!TBvnA3RZXI3al@`Q)9j?Y9Q343PFA)b2G#Q_mw#5>ah-f!ko|)}Z5A~rt=&I4o=P#Ec{H^>V>5&sY~b@j(>n}G1} z&zU<50Q;DS&Y(v3-xgP&9`UuNr%v8gcT9;Ll1-_ClEKag+zzY8jWO?CKZd?O2T z?Z+)CiHSsx0vOY>-0B0lJ-|)fPs`W~?}Z(!h!?0jA7T7P)DK#89^Re&+W9pp_x02- z7mV+}F@dUs2PQZx*j5bW*!V9`sHSW)9s*A6;}IS?hglB1@a@pHvOGC}_OU4GvSoKl zNpwBRX9+apuJA1Du98+#5innW?aff64MOZ_W!TS@lP07QBYX z-BZ0Puiv>6xQQlKVDYrqPZ^Kc5ew!IsjMr{$4U_6mO=Jp0wCOo&SLPe{ zP@t_a#)#+^AI{28@DjT(?OE=}^{1)x@ECqXM*q|9h}yDtqMe=gR?l)@A*I>;X}OH_ z^JkK&6vvT|WUa=M0gz&{bC;uLbp*J$u8Xzh$?bXSu#!G}cXqfcpPi6iIB1MQNtSOa z_{HfY;2_=$LtQTBu4)PuEsr}|fo=&~uF@5@7URDcs!n0r;k_Q?Z$*yXIrU)#YUJmQo^WJG+0CR+gwIR zYcWi|E!uQoVxykY=K?0UWq}11wOf?$zW$h^HNyU7_x3wDd9S*~47>sm4CmJg*6LG$ z|B!yRz4ff-m$4%0T@m^eo4Pm4{Miq9h22W6d0FjZh;ZOBpC7Q#)G&w3?EhEO3HY^2+>~Ussd3 zo4X6g(O|KW=>txVd9hHkNRpK|YZ`)|p`ShO+Z6F;$7R3ir*4Wz`45LOKinky_T9@ zU@SbEJ=4tT8;TK#$~^!qt^@n;F154X$7Tw^_N?m=cE{)@8X6N1{Cs^=k?Sw*(dDJc zx!!N1LZj4YRO(m|eP#Czjj2?ZIUQ1?H>=Ziz}wFuJsBX}aIN6MmpXLeFDg^zp~V5|kuY&U4%INQsA~82= zpSqt_R_91}Jx+da{Uo$%c$X3LIH{Q6#kH(XCeEUfCEel74RD^}#!yc%GtR8j<43<2 z`xYey49^ldqj|e2$mvsaBXgepH|Z3SzkorKxoe@g&m0)E^(ew3_2dii-SYmTBxt4v zuzAd;wB+841|1a4}tB`4W0#Z=>|oS5CNaE?5wo%08gFzrSoxZGQP?S|Ih z)D_P>WYL?MekOsT0YiJEyq-7|8yXG1qXcpk5#};Do;&t0yH2=pW8}EJEIJXXfkas2 z+R{RA?!_4XNAx>|QYdk~VAvpE* zI||rMc^TKAmCan_5A`Ws3z$PFg3@vDe!NL-1F{AZ;jX&h;ttt<=_r`o!|wt76-4gi zkUOHPp5mc6zUPwSTT`*!C0D$7CMA+euFLkq-sp~ro*?$yCY~p&Z&Z^KVmG^7bOkK= zGRR+lM(wOm33M}l67A+?nUv)iBHb;$DFy5?f0Fz&UC))0hI9A{-n5mP9*V5h;$Ljg znMg{>a2}Hf5AS%o84$x!Kc_Ji!h)cL_uCckCrVPifXz?3%hb~Y$(bTP#Ps>9OQJ?} zrrIwM^!2Bz!!DlB(1VqtUc@#bN}=(uC{@;^d}$Q#oat?&YOGlEtfAZoAP@~7cI12p zQ?I1^T1J_dvT>enJp?~n4luBtv$m1MDf4_PR8Q<`)Q=RdR?0~|mF@Dvh@;M@!N-@x zjZ8Ip<&}XpB1j}R(uU2y2x5JU^!TihOkx$o@-HW&trrtM8)sgwjLXU?$*@5s6nDWt z&4h>?#^dJld>WMXm9h5DPmC?~jTLIH91be>9lNud_X&_sc+^ZX^cl43LT_IEEOp`) z@vdPiDaUtp-O!6`Fx31Z5D~mdBK$VNq3pyz$S8DHL_}u;KBS62xtkc)9R^gL-*Xau z+g`3It-RQssD58Jw_QeA4X3#KFE~5nh#EA8N#G=k>AyL&PrVzZB486Waw(#g!~`Xk zM6KkZ^jNFWH_z$Sl)8Q3-jeAds*3lzl14WqP|D^}3y!|Uv)pnD)4{7mEDt=yy?VU^ zqAr@`4?~psWGZHyu;~{{zU*k6u7%>?`Ay|IfkU+VN`zp>YoY=3hhS#J7*ndAo$tZrae|K8!N z8?bp$ecwxOKxJ)k({6@y^mp@Jtm)^Sg5c!t>j{&qPS#r9%3a<_h7Q7dwn_QdGau2A zd}t%jHOzOltM3u!JEH9uGB5^iST7Y zYiMRH->Y0#f-g30lAOnR`GyE2P}SNW(5X|%wo!lYO$aJeCoUN}b@JvU1@;L$LYKcc z&KL%*EW2QLa{InH-!-Gq-4u;9K|@Jdh^y&7gp+O>L$eGhga$7Nr;ifn5{~x*8FM5_ z>bVQQ;BT%sUYIb&r@VU48=dI!-h)8ebH>@=m_7UPZ5X61CJ1NbdF#%AAX@a48K_HH zMi!Nz$mAw_5I=XeA+0!fjI7cfCa{PBF%ugY-&|EKS1$k7x(LD$Otl?vDp=33A>*46 zG)5)EZPUDw3|b|jD0Hz@Vyr3We-<5t|1dIX(j2O zDn27iDGgM1+yyrO67ym45XC3nU9v@3>$=3@$IWj(2J#17zn%=O$VSzEYr7+aLF*y( zFj&*l!G;Pp?pd6-$Aij{RxZ&m2vl8q)uVX99^_d+S(#XbU5=8!`7F5i&@!8pvSwxb zoeli+h4`l@76(ZVv(ApRF~7=a>AIIfF&I8(8s7c+=drWbLLdV$h`c_74bnmHG|F)c z%X`MNtv+3y{OjMYNtf{gFfoO?mTKz4`1Xuulz_=1UC978uDuj2oi1tU>wS1Zd{elZ$7W=fEi0lRYYL^QgR&7o;4anRlmb`DJXjZYp79b^~Z zU@ZQK%KcMXfeGLulq>#-B! zoZNj{ckw5aQrRbBVFgYN6w2x;)t6|98?{WPkHe-D=lS3?%Qm-=+c>Pb^FB{~kL@64 z!W*K!bh|Rbg(#cc|6>7&SGFt8&aEiq{V7q`E%E%M#JWEY2kG#IbS)L(mRUbfB=a#a zt!L<)>8>QP6=QHb)rW`9e>^1j4#yomYjCV$trHW-RHZXe_-Ty61E;j5eJE-LC4*>O z)M$1RqzmOUKfkzIcbxXMTiaXaIgHp!Zl!B@ufDbfKP_I z8N%{V!9K-Sta0g-I>7n;#Ja^$Raaz{ioJ(>PY#Npv?pWziHpbk2g#kC)9`oZPrqy4 zp4n;@!?pG-l6{ig&oAEDIwkeRXk9PT(AXy4LhS5DYoT*-W)-Wu--N4Vz0b&EU3!NA zy~%wr!hQ4_ft1Z{S1=UT-5sh6VYUnVq*>j!bs`<0tL8@`g!b+4+20P^4#phXi>!Vc zz;ZL#Ts|6(81$~T`->;(ACAzY4k;B%l6xm?TKC+x)dLy7yj7`)sV&~>%n8B7rgM!K zKJ=t9BtFxUxnh=PCH2|j+Kb1gD5o%(bc(P4i+{&HPvO|&ph-0$r%3xMWoKY2ar2%Z ztAp9B3oovS@nE!&@dWSb9tI9MQ_32icj)0|wxChTf`N6ey&;G7?6i_&I(WK-?ypelfkMH2 zm#?AP{gSK`$5#odlQf<1y=oojnnAh*&P<*R>UEhFj>}bHFH*x|cxr1osg%{C0nSw1 zNZK~RSxwi%;egg^LD~s~ruq--DHaUhP=vG3ku!myn=Sk;5AKzKa)w5PxDVIZ%v&r9 zJi&+<99AU}6`%ZpH?;<2hRaufblXiPAJH2zAFGkHROiS|WJ~W55yt;)ggm?mnTO=K z#YkNM*B{fPFn?@@9fx7c%28udPIEF!h2t4ve|o8<<64*MiubIka#bWeSdb5%6^+pt z;vBm^Wa|*dvQ%Spi&F&{wBuRv_dQ8nb5@g@_3b3(hc#=mJC7eMRymgGiM(y7iJwTr zMcP&ORDVBnnJ7V=zWJHv;o^?4B~dZdNzj|FBgbpRJm{WK|0a=JFqm02`#z(dLkANJ zrCY8gG#sb1M^dU|gYi+hKe%ir>wWU3@k`}ZcfHOklrM(hr>tP0YjkWYC%yVg?kc#mi8S2U z%kK7VXe*sMMkS(#5P^_|A^FmY8#Qsb^8Nxw_--OfS$+jqln)o&VC=u}*}1TOLzrxm zdKdaRYX$JU4Y0ZhFiCaqmXF)v3gY{{(Y>W}aabI)&>rXOiu#a(VVzYL5gMOzg|C^^ z6N#C}C&^UruWPV6AZmadv&TMFmQM|MN}0p<@|(h{p zR{Ea!+N`)VGy}zbZup|>rsE46iZp@Ywj{`U78%^>^499o2vfw0fx@3uWjW?jV3tla z`09>0`Bx>EJ!Q#-m6Eyoq82(BMkK5M5q6tes$DVBQG3?iWUtbSwMh?>%>ZfE#P~e^ zH9ZrK&*v9L3omjSDEHo;aUZ>rI?UdTEQLdf#hJ({o1Gorlo6K24GYSvpznF)=#TOW zA>;QF+%mWhJ1q71VWcwT)2}S`eRL_u*+Q%f%UYIdN}hWSbFueXM-Mq%k}<8svj4ub zuQ7j86}|JQ*b6~u1rf#%RMe>&^<92^M8u?6u{U{6a+LTfD_!LeJhJ8RmNUpH_BDU2 zdV~h6ztz!=@wHh@ z?OnOuu{6OAZwP85=7eUS_Dl&^_6N;}^+A<3=r&K}zH8VXl(NZGRL9rtDni||LrM)a3aue?2OEZ$-5O6nt&vnWLE{$=-Ba>F`r9H!LT!?BoE zp1_0;}KA!}}_Fv+qHPu^bk02RrsQ<^ zCXDm}xxPeU!gTW|DwmRP>6&q9gqZR<;oC0Fxhh7I<5>DDr|&(d_CFxz4&z_s5+P-yR!A&mw0@s<0XngoI^Uc zY$xc}BlSS}=~KlKV~uKwtvdH?@ptY|uRjKU*rt^ct}Bq6wdQHmwz;sw&(5 z&L_9)xAQmFBeEZ$KPUCP&s%nDUH)6*u}T63271gyDreX4fs@U`DmevdnIT&OHvdUb>>i%B6$ zuT}n3ndPoI%zB(>)yzN4BfGFB*`vPMyv&es5@Ua&FKpQDvclW)1aHw7Lpp<_f3Q6FkhF$9vTkXTaUjz$cq? zZ^OWE59}Ns(DzJsg|o+WVf{1=Jjl`^yj`sQe4~<@h~a2_LD?zOa1we zeBvy(#vy4QL??BL+haxg1=_%U3RCpJT9zLN;;GN)n{l1U3Ye+sT>JcgFFN6DqS2HF zr;D?PR=aJZF|$Kp@ncVqGz=Nd4j6W3x>y_WtjM%V=q#;r}-B zzdr>&3I=Q~x^~+XnCSlR?eS><91ZS<=VoncAr=<++GnH6qew5#G{HPQZSMdzUvS0H5(n z^z{?qjVCM$ANpPcPtr!{v%SPUVR^tOIdm?9V*4Jjt{8X*==TaYZ46P`3|asjpb!oS zJh_2Z;DLC>pm&A*7iin0fDzc-ZRs`2(X^(sp*L{rv$IP5m+xvo=_XS|DB}ui z`zR2Xw|~1-rhQ2^@H6TIC^NK!m;y<#v(H8c09?5K;kEQV0~9OKo3?lPUNeNK@1+a% z)wx0?I_I}wmgN#C?fy$n9AL9tq2(7vsSYjRZyJ)CPU`sVI9SSD5P%V~UANv$sKBD$ za?ekq;xoH_qJR{fOY*L1>~lD{EX*(yRKSE!tU?bI`m)>|1P%ik7>4>Ug11@NT9zlz$O=ehrC)4>?VC9t}g z?m^>j2q5TB+0MAf%9}4@($WnA`#=ULmHyrvqq4nX#3$qBUUf@=zTGv2=X6n`12|VO zg@d*L4yO=o=hyiRv2Yo%e)(UltU%z#6EYBSn3#EJ35da-T{rcC8-CfQ0}>P>J2@bP(R^kADi2-zhnCNC z!>^Yw^FS#SzHseK3Yc0vDm~r-VE|W9%mOlnnJeE4*7y5>J_4kG{KeVn`;auK59D$7 zeGg|$j2>M9<*>{^c&`h8S=%b|%W91LLxl;n^hNrze$GKkJE-zB23n{DG+QrD&Q8j; z2AL=DMDY-T?^D!u|=gy>Udtrjapc%_QMUw;iY*KhKAsH-`&lh0r+ip9y z$v?03Z(<&iIJ*RbsLxzM_~zYO!}Z^-HkVhX5G=)t6iF7KztICxyviirO{3YXm{_3f z-nC^G{0~!M1d~JmktSSn8;>W6b*evs7{+9I-x^p*J=N(C)Q>L#Rw}2F31D&%`AcOz^;+Xj8<1?*FgLJ>Qy`f9Tk>h>|~e!F)oq^iSe@aMHLsX0o#~BzSh`w z56}eQYVMH!(=t$Czbw~z#}$%*9^OpeikV&m=^3B0wE#eQW~>MVih1Qhi+<7@Ln;{2Bhl*;0_pw!Gz<^ESM^uZ54GNn;JgDIcf3tP zO9x~C06{O;?WzZzoOAR^PcX??al&u1q}&sM@eMyvSzI@@%fubHP_PqL;8(7Dcs&=& z+rTc*@08|$~g#=Az%@SM;afn!Vv++5$ChyX`L7| z%-Hy!Q(ml`La_R5SASX}MOof3osNiK4g^D>j|Ksab2g^U9|d8NM7!+WPI>%@|CxJ+ zFMssrrrH!F;kvef%7b_kAY_`LbD@?^$VfZR8Umajp>d11)oAGUPg5YYxXKcAVR_Wb zvB9Re)C?j?4wFOn-o2fM*&fq<7GBssAN|v`)D0Ba+DuA7;%>R+XDsw?(09O)%C%>#_v6yW($VLknQ^Q{?yOMPXw1oUq8=br-jJ4KPkW(?)xTsJ^`v6N;PW@h_D8YR;3ooDH>h=0!Mm|iSbWLZ;-IHVyi$jc@-}Fq z5;q-ypX(sCCybccUn>2_eO>y!HT`A9I0R<7i`hjj!+(W%k;b8+ivzj@Dcs4RXvB+! zl~Yo&Dy%`+OYCI4u?HY6E)BjHfQBwQcvvd3YPKbv7iJ$V>tO){PK2A+e5Prt8Ji^w zhW=(iG<~j&w$p&eN`K&mE)s(jFitxAZhj%{;5hL-ioca|&IdIAxv~#M_C&`6n&{z4HSfd&!^! z2J_wcKVKZ_=NMLep4@va69?R7ES-X9PCgTyYCmwh#{hi-oapc)swsISAnxqP{$nTK zUmHlha{%p=V(KY(lZrOE3hU2-E4}ch#5aMw9nT8?xo4aZS%^X9RuXaX!I2wvMz1Hx zJE$ojnbyb%3Zk$OT|7ybMo|NlkUJ1iLbFJE(jY>e3 zuRi)>NVG-Vvgy9J*I|LsUeN|-NesTXajMuiC6Zp$J1o9nUl`gdLE%@Qz0zNH?#b$z znAjXG5|%cNysav*LmLE^v)2!9u`7I&c6?J&om_Ol%=E!3;kIIiE9E?}gV#d%K4hbS zC$ktINMIu?Js&8Uxvj0R;?2wO{On@*N~dmvIpDcXC0F8!{LU#FV#Cl?ubOrkjD`;1 z0+two9(snK7$Xphn_x$*2y81L&aw*v?vv>IHjh|@(1ir3yoF)=K{ZCAdkjMquu^^P zbSd~VsjI9{DYxU0Q_!#LEK>v95clR9Z~*b#etUU>O*d@R8wO7>2<-NeJ^Daq-rSWn zTaA&mhhbHivRFIjdm7BC-J31>zy~RspG#~XV{!qzjMzd*qAAu3`0q7v3{5O(pk+pO>OTmc4QsrgoHVK1ZKqLa1` zz1Hm{W6bm%;xU+A+uLf}U+pJtx&$zs--Yi=vi*K7GfT{P1ij^l8{&O^cP$~_B&x{`PddU;2ZCq8WeaQPodUD|YcdPI17uaI*i)HqpWC3U7vdg&DmEkg z70*_{tFz?p88mm_TZ`D>r@U!J8A4-Qm(n~VSn;DLHuIug5Mk~rh*Q1K{ds(ApVIip z-^BZ|7K-&USEIFb128o^)BBrGwRgk^c|~9Ba9nC9=P+Q5H(Z2CY1eUE5y1cAF00<~3_%OYy+QXNv)mm|%-QJYGvnM6}g` zXEu&VIAm`oN&oHVxA1ObW!ZHtPRSRMgns$8>=*ds-NfU^#ii6XL;KNLT27wpwQDK9 zpUJx0in*~}f1f?NsX;Ny+YB;VikOl;G^b`QlqSbVhQ40VnntX1|-y zK0gWwU)N9UxArELak?)A#mn!#Ougk5f}EA_Xqv|tWZ$-*xcg8gO!QV8atEo+yrYoN zUbgWd&sAhOC#riNbF1<<=AG;pL3Kzs?nP{zxZU5r-GB$xg<23uF57I9nP7991q`u6 zo;7x}M|;MxD)a5bKIW?BN%gzfSqdDcBYGCWamoyqddvF{?KmqtA$|x9FJGe$D30}c__ifatpQ2(=mpDfWyvlizZmHiWo|gCG!Oe}hZR$8nV(@W z&Ug}zSYNT0DKOqEsDI|Q==U0_ z$KTw2yMjD6aMHhaNtHfZ199rFr~s+FqrLmxQpKPYc@`o` zF=G->U)hZ}4jo&Qv?bEtFz3|Pl^79!%Do83+t2ctIor0v_7i0_Yq<4~2YNE(pjXnB zoK7T$z9S1JW=fEkg2|4oM;jsf(VupNgzt!>A)KatC_t-_SEhtP(Q(*_&cVgCfH1S% z9Y~76qXNQKVBmz#SsEZQoCu?1GeasHB0qROi(+-=Kp>AEWu%{Qe<&(-yBYAI)0gA> zoc09+Hw#C1?FG#rdA0QYP_qdq9JhM|Qg3qE;0f3pZuR!$f|0hhIeCjZr{0Rjj8e z2``UI?psExNsZc8&(tR^dWb{W!RPWi`H_Zc4MYm%GH;$k_i+~1pu1CpenBiY?v#Rf zlGb;J>VYe4j3<9g(U9ppeVmnTP8qgK9D~9?n^h9^cX8>|jlA=DaBD4*7^b-EUbi%k z49fgsct3g$E=XX;mr5+ybdan2`g2Cad;XAN#|N$KmxX2RjH^Nngv6{E{MU&Zku$b+ zk1iN>rF$}Bp5(odpJ_CG*wFd?w(znm9|+N!<4Lgl zaj$&!WR8_MZXi&0g}-0|oDYB&JlYnuz*E#yNOW zLmuR@u?{G{DdID6VL?Q`whxGeK(+&bw#N`$>LdISrFh0u^1U&@H}M zt%Rz3_cn*TCak~u`&^T^L{m>XC4#Lm{Dlh^mR<~b17qYECKfSf`(m=PTpA88odMj= zQF4>?;Sn(|!!unn*bF`la+iCZTxG(Y^Bdnv4zjMI=RI9;Z%#4W8`cR?+*-L37v0xe zIKo{D7Rg^q%W%6i(qk>}Ll+FNT#FynHIYesL}1JCu%xuk9et6Q+i}e|b0I6%bkq(l z4=kIND~+%Fp4|DU2#aaYU+gT46D|?&OB0dY{!SCRYUn?~3Y%&%HVuEbo!B8rO;>pJ zefUzYfNRYp%lZm$XDD#>DNSB^o3P1beba~0PQ3}E@px9QR3QvHr$4V29zM<1tbRo1 zIw5ISl2dPfoMhKQKuq^e6xaPGQhvC`I?C+#jx~W~?`u{5qMfl<97v3BTyjr>N7}Ej zTUc~am{>s`{FyyE-7i8M6|-gnafmD7DE)!Yx%@)tv?SqbJIC=a0swNd2SY`QLSjrO zEb6n{euz8X6M~ZMcRig;L+hgl;`XSMa4Kf=-Lu=I;H-8US~yMmH+Z){%?y~RVNe>g z>c=6qov4T`n}M8)Jg5v>oNWV$pNplzxS_GSK$1qj4Y z3P?i`swZfju0rjd=<_`%b1xhnhJyD34qujSmGJY9_dd%bnllT`-Fw@M1=FLX+ppUv zg>jmaQNVE8Y)iB{?FS9=$9#8c)9t@UIX|%?i^72T?K_l^E?!OtJ+b>q0by*ZU-w+E zsVBEruEq#^w2po*Og>NRALX!@T~o5|*h3unc>Hz4wSRoQoDey-XdZgZ2$Ph@=F#H| z6{&)`=fbS4R-aNPcp8hi)?ILgbSb8;aEM*|9Xb&Gjdqk1Sq=$n05?K%w7{kW5GI{} zeeXo=>))^5Kl$oAuZD@0MLSds6vPKXBCDa_?%ALpzd#fqkVWlyvr<~NmN0DVDv6P{ znqY-E9XU8)Em6&jzziG5Ew8&GPe5mAHk$J{YO@^W9zG*uAr8xZ0FQg{NL%4>$w#Q1 z``r$bn{fZ)I^*@NW^k68cC9U<~+yeyCDoYBQPRgpW4A-}p_ ziF|o3O(eOFMz1~{=g4x_rb|FaP(6sO%Fb&oC>NEl`~rP=KpAA(A*JiqQ8h%9x&C<8 zfk$Z3Hqbyw~$dN9Ji>SMRI?L*Jmd_BFHclzDNtJxr+_gbqxWC-i z2*hDbVq2>8)Z1BffhJ?a?q>3Y|SBOdTjBxVn|%!c<&o`rrq{c>1OcP z2ulOYS<@jph&H~}lwz*IMxDyqzNZ1TE$^Cv7y_ye%ZUytj&Bz%E-KAN87e4V25??G zBaw)vjkj(G)H7?#-lh`WF;We&RBb~uJjgG=_>(#yym}WA9^Xx_0IdISE7s4jD!#zO zop@xzA>HGr5si_wP9&V-*)yy5-Oi9}$tEC|U#Wh@KtAhHqnamWW6bVdIi*KY+&n^g z(%3pvYR}H!lR*WOkEP4CGj(QZ=+u2T{YY8*J-6fnTt$HqKHCdhCq?1|X^5tt2!zpz zFe5p4&F$rp`LveCLK@H^(1?B4LdR^xjmJZ49C1Rr!Zj{ef!bI)W6~&35of~wuhuCT zcewe>(U3hkadTTJF$fe>mCL$3nj=4{lY9sNhPXhr*i7_p%F^h zVswAmzq1t9OI~Iym(PKQnm3aYJIdRX+XU~W9@CINleq1~I(n&n<8o{_*TvWDV!r>v zeAgyth^&wf8xLV;H|f zK;$-)%bK4Y8q$Wo@lkZOUif-;-?3;xu6_Ra1Ui1<2#MoQ*Kn}jCAs&) zurk3ybNooefY)Xt>8?jVChi_14C-E4cYE~$tya+b1n3zEMy{_ziUG%fu?8v?{ekwp z43i|2fLJ%g)8+Zeh4Bxq+3J9pJmHRMngl`=ex;@}@dQA5RWCReTcJ_xq^V?omY8up z@(1aLIvf$(@5yz_1!z&FYLIAisxv8ee|zd0kBO=1C%5eNjBB&ahPi~06} z=YsfgSU1tt@>K0Oi%&cyQ3&X8zxp_ zky%&d+A#>>z5*hetLVq}K#jvp~$#PJj;Qg;*Pkq^py1pj&uTqqZLq!gD za?R2a(=vA}MbJ<=I66m7x)f(h+VgqXT0uRfLFTjTFz|~XOBu>Ucxc&tlmI$=p3{J) zM|zDRWu*}r$Hb#Rttfv-U?FK~nyRhWlmL@hB?l=m^AQf57m@S(#M8Yk=jdq_k?0*? zjvi4;$nXolkNWC5Dwsd&Dk6SyyLE1oS{=?Kc{aV&W0+I%G^!k8HI7BRfu^BDUml5> zWEXF5)SiNi&xX^wMtAsZDpp8D&-;XwQn+>Auu0{LSVJ+XaZj2dceXn;V6j)>QGwN5 z_Ie!%cX3>;SzxATpFl7&Awk;GhRHXGjblNUll=Jpa7-nZDt_}*`NMCK^1!0Mi30<> zLm$T2a2AEDje93)YFx6C8$-kXN&<_=+W7^WXj@J+Qk+*^4}x=)>^6|)dmpbH^Zz03 zEu*6N(tnwIsEJzJyV6Fr=rI#Xj-UY9??Ev{dp-2Tfvw z?n{e}su=IKH2xdZg+a^e9?#gKt3B!4$|26e*a!<5BoXHx%8BH^A5@9;kio&UKarD;7>PwVp(%RTZ z%<32~<)BNUe9tbDgHy^MX7di8MUt8tU@Z|>AdO(i6m`>UC_b`XsET`9v$ckcU#@9B zx#kh%CiMHl(yGPa7Kt|5q);r`HMY&)!5S*u@~?8kb!@QW;#oXwr9Cnu>O22|4PfLc z>bv@IUuVTw@PhJ^yWL9RS^PlsvkxSfebVAn9J8{h|Mm+Z7N*+oa{LI7Egr#k{@B`M z^;+Htnp~L^bLXEF+EYF)U_WvjtSs<)Wm4icU=!Bx#w#$%l-XZq#wBnQ;(U!rn&y8j z6#*Zled|-9f0;ApNwA0sg{96QXyhno7(+!@rh>&gu$*5#8ieSB;P#Z$6420I3j9>? z^3gd1f5bCWM9gn;x^E=yd<%827o&!)4~MHEIBmlT-zqxghBX2fQKrT|oS9gj=Wzhp z=jDCz?%8#5V9wre8_yla?YJFoGwLV%u4=)Gd|3sCoX?-`%yj1ZT=mO!Kg#2)H9k6= zA(nASFA|gY-^p1EgS=_F`g-KgKo!mwwGOGhlW1Up8HDTdTr^?n4KIiHcQ3u?VG3avqF!1pE8N76UCPsP+WBIkJl=s;NmcGv;_(sh!2+> z7>MLyQ0%T9F%d)vQT){+Idm*$ej$5GYz|dj$Vt;QW?6PKc*MB-6vVWzJhDl&y|&?*^(< zLI99EwOW;LFa%{V>d9yCWbaO8S52;DOZhh#K!BO;>AmYIfns<$k7cuF5|1@N*S>AP%#dH(+XFN2Q6D zVME3n!|VO4U0TS0{W&fLcke!JXGVCVnuW{KUJ7o7yO@nd_#`(sG_p%1sK4jM5YsZz zC{w@t$c@_qFWsf!p{cwb&GDr3CXh5(ynQHic$p6iO^t_<9!(*aHQn!f3&?m=OBa#< z^76PR*XueE>w*fLY(0f)aEK_9%Po4MSUq`K-V|Q=l3c%8(#1~WlNH@i^xai#JTd)fJQ5IqI~4|6cNAyR*+d-l~? zFkkZN_pCxm{<4b?zybXoR~`fAE+K$=^h6 zN~XKb5S{;=h|IZqMUts|PaS-g5BM#Eu%%YigMG&tdz5%#Siz{kjyYDi<hd z2a85ZdH&`KK2E1+55Z^Cox*#Oa#YGgM;u1IV$2yxXP*eSArcY}m7;WT4bW!yKs>~5 zKKeWJX-a=x0RIheLop>Pv;s%ItI#ZCZum6Dvu<+QKW=i9TGOjI_;z)dJ|@w|g08=Q z@BUeQ)Mg+&h*90`e*3|t>tCU65@5o0tYmipx=H=pOl`;YX^Uus;pS5j_2k#*($lkV zdp%b~1?LV*2M^7=u5wdI)ltNEeNVU!wO;*KIQN-q^g+PiC_5^Rk=1<~+`v5#5gG{B z_>{gg0ACbHms|WGwzfZh=EP@Jy#hkIFX>1t`HA?F zvB}X+dh1hcl+}<>DdJr+l(>?Z(7a|FS0ZS@(g2>hXm`I^N5+jJR-6>;^x`8<5^wRX zk|(C4+5FDAoXe1>wrp#&HcxlOLpxw%_g?x0xmT01;N?E5iUl>P>lKz-G_~>&hH26! zl~8lv>7+pP_QiZnsY#R#GUh6x+?~TQE9anc zh(fFUF^l#r5y>Q%+Nq_aQgyMD>^rwa!LMf~#*xx+ZOG>rT{#Yc;Q>}`<-kQb{K@Ww zwjN)F)eRfg_Wahy$0?g;7e5W|{O_<{ z+dDleJTxU6sTELE(}+BCTX4K^VzeB%aan3stJlQ-BjRAByI$#bjmRHU%hkU5mM?vH z=`Gnkrp4A-^yMIbKPA?68c*M%B;IX=IZjbSP8{zKKpHKOCaF%#{z&aOJMz^ReJpfJG_3>&cU46?WhcRQUJL`tQb>-g;22Vehm^DOK3 zNpL@4T{Me5p4xq|ed;DNpx8a2md&ME`5}(6=-e&aNyp~Y>bO_Xa~?cfV&I&A)yK{p zfTJmrsuzxV>a4g2Mk-py6ffL_HcWk1o7L`^_IHK%Jty+VI??!O{gN90^fK*@4?ZUp z)rdJ4glN->rSYP*S^ob!WA(ogtt$Wjiw%}xo8(7bY#;15*^Z+gH0rt*zVVVhr9@s7 z9Qst%nA>F|(vjZV#i~Xn68q{^V>jQVJR~oCgr_To^4)6j0_CC$(~x@)>JFf(hzw#akM)h3)eM65YY{(fswVDT z@ubEd=IzPnr7Fd$TOO+-DR%79{zj?5rYj8XAKw5j8pi56Cg8DexN&Cit0uZ`nuVMe zVg?rnt5$t|-L}Syo-Y*rC298p!HP7%$4d-?U!q7iy3oO#R1n!{2MaF$mXT3+`zuoa zWCQ;wDF6#2aoPUbi3F7|uC0W|{MP_DF}sddn+>mU@c}d)0r9}b+JWbAYt*zDc)qzE zj+DZc1tmC)3qV$dc-B|26T}DFIn~{ImjSfw=E-6JSY-)wKmzOI?@lhfo*U#arJhUM zvB|RR1FJR74B)M9VsKGdWL$VDgi<(6+nw=DaNOYbR&vmDKB%6#2NTOjm=P4&Y^Q=G$*P1Ap$h@>oGu}=?VY^E8^ zt=wNd1VM_agP9QT!Ma0GfgzR$@>gFI?SrB!PkyRD|(O=@US?Msh|LSx}Mz%|1tyJzV1#dSjk5Gx#kD~hgwv_s+=h`<=wtb&o3BakOR z_3AcNs3h-ZcH`1{mH9K+x^^ot3RVt;o>9PlgJ?&?^bQPrv=4l8 zse~Vj_Nh+??g||OE+(%Z3Jg0M5BantQx>;t!O7)+ku3P4sF@+M>FNTc=#Ic)_W|{n zcaYL1AF$U^R($jG++0=rdopbUADO%EM1;Y1TdTCCrfsuna{iw#tGwBKma> zB^sz7m#S#P^1c6IE3MT%5M=p7_9-yXLnP#1VZnhT&;nz=0isPON5H=3Q6sXukSWc% z-seR*Is?dYmceE1f4vg1*_lBR`qP9idNqfrXd>{{cG`U0Hb*z;pT{((;6g)GSp-YC zmNdPrRsP!yEyS_c%xSXDHr7oI(|KVg27Lw)PG4Qn(s#|kRlt8GvTK4vX*KbMTswMG z6HRJH28XXlOjF6_GC@4CU2o7KZrPk&az@`&C`ZdGHgA9{*4UEa96QJ4bkb*`I@o1E zYcpkqGLJg7F;4fQBVm}#3CGA`g(BTm3;>8EC0fmcAJY39P5FFGiM6+w26RGWL_j_& zbh0z5xzf+C?nm%shIwKbE=4o!tRL%UP~{Jw)0F{N|ROEDQbo>A%I-WE|vnSDx!v9 zj0sF-6&c-iu*-ZA18zcyW4r^9zplw9ToFvPcsP7s8~tWIv^dKIi`*``?`TUf#ws79 z0r(cnO0q8d|i7sTV=8_X{tRlt~s6S~3FtmCj`kUuhwvh*= zUZoYXHXdC(3<5c5(oIlPwS!2QUA(lvW@?=myj4$)cAFX)YedR0ZvuWZe!x{=8n)eAh#Ckj^o?xxLI=q`d1x_cPn^OxdLdNcTLmYPs9B_ zyB$e#>h5O>XnaZjjJU=^dednOtfv}07Ee+p>@( zyx$m@$|q3bS*o8UF->E|keVap!pgGLCYS~K40@$_F$2?pl3uu4m2wJVN=-7j;(#k? z+I%+b>Ft2J#y!fYNNfjAVc36C3A= zLu7Es?TKQ)5dz>AW%zff1Y4Q{P`BiGAjaUb-Idj(_~TJzx6Ug$Tiss6eDlY^orCi@ z!<&n{4K>4O0l_2+Acw7_SAXDKT94CWw^_R|(jxb56GZlY^VsxwDDPSf^11b>l+0uL zu12H-{U5qMC%^l%UH*C?8M!xlE=Y+}VF4p=G3?br2DFy8$d$xW-R~gv^Z_p#N^CVA zei*K${h-RCWo;051*m?G-X3Uf24x=&2go?}8wNlyhtpm)oaUnPpdfs3g%L(M}27OKz24|Md&OlgWS44$CVUWjD*8U~_E{4q>Or zNA&7D>@#}4Q7J?e!HMEF`+B>XwN_Upi2chsJW9RpfMlUq+;2-+bdw80@G)Dh@`>Fp zzbtqK($%lpndY5Dah>#L5x9?7jo}T0P6%{iVkh*DV+>YfBBsapVqF zTmdn;Mn!Ld<_#K>@7>gT?A#&$T>-OT@8Y?WlK(i}~Si9{Ve$uAb=+^{ltrmQb9HpK2gQ zU#}yQX0s<-Ed%xsUA7-!+>Zn%dnN67d+PuJVKa3YaHSW1p6xwE7V|y!ZxE*aY(Gfv zM~aGX6bzHj`{l8U78bd=;-XZZpzzN`>a)+PF)(A5w#$06M{WwYggQj<0#VQQ*0tiw z{Ne>Cud{S&%6tX)Sy~{F?_rQ?Iy$B$@aXevmkv%6-$MlwBR(8VP3d1`2Q*)syBv4rVQiGLBzAIHuf z+WeJyg)Lno5a9Ia3IMWYbOcs#uO7Lldbd8HiEif7KuX>eod$(pe%xb})k2RL&_p*? zMw(}aB`%n;OF5dL@i@!`ePG7b_@!?(cNY=(O=-ddlQaFeCb2vLD2!?{!);|aabIg1^SHJ^T-&wev3{tUXtkEWNBxP={BKZ9} zxJzUw0k}Ou-ta{9M}y<6<5e1OodWH4zO_3L%zr!ZjQ!~0^!tkGFyF>dl797;KD*~^ zhE;?7GLB`n3*BvZU&}>@u%TGQ-lJtY17@M#pAZ^>}Vj9*!-W6EFJY=Z%D*xsI$X{>GW$CLu zjW7>r&xj#3Yi0SH!bxGiH3h7ni&GoAl`~^xYs%c(@kzG7Db<$vZEMIsBv#;}F*rrg z$*RnRUl=9Vsz?_|@k8H_<995>&o3{Te{Qp+g=hs*uuhN4?k9`R3Y)KE-M5zYXu!tq z+?6;zxa&;h`a#Q2_Gu{kUDcF+{f4X}zZdon2l7m+Z9s$TPD`*K??*rM(c780>gxpw zEcpADImhcKz;BVTAcbb}AM`;IPi&qGIC@s-loXuOBC=iezEM zW@}O+$od}{jNzyk$W!Bfcx+K>w?BCv5rlb~-^>Afu-R$&whwVD_=_YY=tPrP5&aXh zQrY80GANblglml|%}DT!rab!H*C2>BDH}u$IOP^;sU&3xBfT1&dRDL0%n8vlZO*Cdp~ zN)CTtZcKmQ((`~@uu{94jmBex74b?pgf438Q72p?9H^8oDQv=N_(sBFkgakho_f}DK-^DiaQUws*Qt{ z?7pzUK$)}{rQMdVv^|59T`t>0TVD@TmYpyRQYItWKP7_^?8fv4h)V5vik{hJDjHU z%25hsWBco@@__Y}OJ$q%mc+|)zn{rNqjX(~hMU3C2%KXHzY9y(b|x_;P|v5OTsn?M z=}pE-_v`S=ODy{GwKgv?mD?1{MmJ-qNE`#vuxk{NUD9ey<|eHf@gFi--&Z&3cbDk` zc!qJMT*sw(*H||t8MlI3U2NU|Jw6X;H-9wdKA({Gf!1NhvAc z!@_%CL=_TRy%lkQN4wsZ0O(5e6d^)@Xk(2w#AUKF&6zTY<6X$Bm!DY+DzeU`nLe6S zy2gCJRb_eCcLvQ;d|P>;$NUzXy%#gH&FikbaF z_^i5E6t^E_M%=T$c-2Fs`C_<1g4j#NQe=u;=IMtf&nl}X{LGW$e&@yjjO=a%FC{!B zhT=E_SNcPIOB4nfr9}z#t3iL~VjGK+BQ4&#q_hejLRc|!V&1bjwwB+cj&jTF7JE?`qqI)zNV2rTF9$5h$$)}Z#ekf_ zL)KpUWo|`So4PESLcH7H*A0Z{q^WpL;TixH4nx<$2e6sTs4og(0YVN2@EH@yA%HX<8ckX`=vfpufO)l#-h7qC8nP-`m4? zyl0LqI2bbU8^vwHOI0hKJZ0Kyawk@wgaoSG;hPsRWeM%n3f1EFxLl5j&LjWIV}6ZMnal_QQE= zqXHSN?Z7E6*N;Y*KSz#*S3{>NsJ?1TzPykmX+?A@EeYXGT4e3QgE_p&opyZuiX}>p zY_EQn9_f2N?YOIQ!B{6CDjV6zILU!qt^)TB0uDz5EV@d`Tj@VwlAO$Ez1zLs@FW7>$gB|QqVH@P7>ep+D39RcN` zN?6r)dE0NAhPns!(r?zzicHH-L=v<;E{{g{WbGQ1wXzJQrGDgkc7V0{lc_*mA%1k| z%6;f=mNs|Dx#Z(t$h;}d?i;X?ymqCzI;St$!QPw_$GOvv{DWB8$(I z8&sjshN-P`fJcb=Tp*cZP_a1U$kR;Cg|!8ynhLQ6CI_}@0#-X~gjN_xNkHz05DYRR6!|`@{%1L4c-UewH@G*QkZ#oj}R zIV7^<@P~~Q{F23x{1MnH{KFILSz?|=tWhWX3-$*g(LC*1bb7$Rz6p0w>gYs2;mR;x zRnLDxnWSr95>9qfv=1~orn$zdt=tGAYxh{5(vx_!+cNF2u@Zt}T*NW_7}|&w!JV`-{wpV~6>awG z5XFxtDXxtDh8LbA+U?GZ9Hf>SgZkwcEi+@Hc6!LL~~z3&lMh2kWCn8~7InKS1uhX?mCVM4Tj#Ty)z!K@nWI6p-ZWqzI|vWU@2 z*FrC$E~x?oziG|7Y`=hgpma=pMz+JHTjR z#e*#AaxL+gm$@)RH@(J~=jI+1YnVCPNzLzv3$df@(QpIL$xnx7BIX;z{Vc04b!(yh zGl|)#U65H}=Dev;!)SpeO~y(;pdPP%YWs%wX2{<2d0o;cRUg#HV-|`cm6inVCToKk z4fG!E?gR#|6U*HnMrv-2igP%DI*v|D!%lTQsY$=57L)G~^HE5uVI0@+E1Xd7SgA_e z^kQdMz$NA+We=m!Fwq zgF?sn)F<(9dhm?!#Va5&@*3Nr z)|-HuRDIZg1}CAMpsL4ygAiHBZF8RBc9nJNRwZfAFnH{30t*&D-B_CmH$+X zF2cfK!j?mP>ROVFh-fBfRDPTBLQfYRiT=Z&dy(<3b~@+ZLtiv~2+^NVLfSCQU)8X$kz)P&l}?Q$Wnc3Xwj$uz=N+5(!-A{chn+c32p^Fed;2LXoNwVhNpWHt8^mWpPJl z=3`ZNw%<;v+>QjiL+8JPymfE;=J1G*l!)|p#cFn|@u*38rd0K>*a8J`1)5NrfA6*H zUm{E#2FdVp)G=c8N3^=MEt@P+awUD%!(6NRyF)zV;+UEMP>`FN0ts3EgXx zS}pQ@QM>!?h54)v&I4HY?GKY{s&OdhG=H7)cbbI_^>NV~o-9KJrJl2#tj9xfH@3de zimXy6`Mzunx1La>Skk@=ttl<~Y5HZd!xR#N+4EG%GSpWJx^-eJ`215A+M*3xlgfNB zVav9z-fRDJ;Sg}>WzbXc%bT>KGKI}e)sQoLKbP+NHuS=N%*qqP^L_Ca^M#eOuII+?)TT^ z;mbA-7RleHxq2Eq41u5N=|Q=7ybjvy3#ejDy$p{_l;$eA0*w;4Zi|RZh7NhK?5wiR z&F11kupL&r8ZM4l2c_q|&NkZ!1~tP1e5|7Ls@J4genLa?UB429b4&{%n7y9-W)UTB zEwDpsosd_qVly&VEig3;^nC%%ke7wS)L#?Dd!J0;`)W|ko@c-xljYUcH#G7dpJ&ORt!jon)@aE#mssznDHKR5^lS!p z^%%!LD~A30T>zkUla7Hyy|TsJyy~M^bK-2yodb6!>g0VWi1c38SL<75yVw}gk61L< zU}aZ^iub|boV5fINiH)4GX{y(Tg?Q2kak!G$ps3k=?I)r3{0n5IbJTW5&!B1M zLJr;5a#$e!oxAV~zji@~>LrKcOYh@nEsgzvwGzevZNeG`pJ6rz zGYl&87%hSwF?32%Ud6FLrn}29hRa6PzPYEmnK-7kr?_}X*kY%IfvHCn5|&vJ zKJEA3&z->jgclC zCYJ+RpicCfxUO%(X9+t`3QePVKJ=o$fck~?m(IVYw7OXJ7OtnP8M;w@D0mP)Lg%7y zLLp=4Evdhvcz4WTFXY=tJr3{Rhj+z}L|9}kk2H?=QdI4T+vqk3{zM+{`WOgK$k6e_ z!VytT%KHZRCxd(D%t8-hh}qh$Rql3;;VvcA(w%IHTlsQsGzBzlgZKUMyP=lrnB57^ zf(KkfKU0#-TFnH}+kB=ihOaB&QGOL^7y#NXEN&O_xq`)xEll8}{mAvRYF6DDboxc2 z0mWc(Z2>a_5OlatT~;z9nJBYd|FH~Fi?o-*>saI8xDD#yc2irAYElDk#+R`U5w-}a zY_7XY4fOQ7K`#O9_;7R2zne;-H}lnZ(v}|Qrf{`{mE9}b7MN8Hn-_c$kXfGHyZyDh zm2_22Ww%7-&TKcKYLVlK>-3KODAPxmuA-(AlB$zk#3I8U4AnX|MiEkX=wS1xl~LB? z^W$Yak?XtUDAXdtJNI>;LDSZzBa~YX+<+AhDaK+fL&_I?bx*vXa$Sk-Iw==Gw4dUO zR0{LDhldLhQg^2<8gdUm@)@xz4huclY<6?OIGf{BQTocRM!k3{?jJ`0-(z!e7{(&9FpHz{_p+zPqVSsKTHS zrDE!CaSH&9Cb#ZP3Zm!dV@C}&m-i@4ImQU)?<8NhzkH&kwF0ao9Ms;|w2!ej}v_U8({592&@9{^B(zojM zDp}Od>Q3^Wdj96at)C|x9Cq`@#)-)!SYTd<_Zu5%yV{@=RDZmNX)S)%Ak$XlvEZ!@ zhkUlAL5Yor@KADpC>If~O(&u@2H%_`_Nau{VkNOk6~{fToye?=S5%uy(eGxh=p zS7gS^n;&HuEL{3KX1l@8_LX&r(lDJ)4jcbwaXz9C%Dd-C5kDP)sU-nDLkH@1Y8i-X zcM6+IRLDKILJwWww}jt%U2I_H@AZ>y-0Y+p@$rhI>k<;z|IqCpJA){K0!|U?9e;*d z;0>zG?~Hbr{ZlAfD6=VWN%H%b=f-b7U%jn)!O{@mbEJQ-UmSzT=A1uZD^|aieDkSw zhMVn>asvDlV(CMby<7KT{@ZS-&Wl+mM-Nnn4b94Z!?r1^h8~GtLx;KCK|X6=->YhJ z_YsMSlcsJu@0W2EGCl?R!IggMw%DsjMYx}LtL!;!J{WB)hPf;(M78Lcc0Fe206w80 zXkCl1VvnW0-51c07B$j-p91Yb8Ryj9={MpM+RjrLn9e0^WLnSv z8e4>*wAY^-u>IUDIDF$J75M;lj`565Nuc|vcT#xLf&(}Nkn^3%Qq7k0P(6v_*iKXxq829!RoLjp=Gy6^u?v? zIcOJhLFLypS6F5zFSJigfwPQr8!z)}??^x=7u$-k^!biL4pZgON>Z_(s!0!ijN2;oF#=vLG2%XlE*SYoB=`_YBN~|5pEJrFG{qlO`Pxz?43j3hw!@%@XF?Q9Ym~3`6E7RZwSWtKs~903 zvqqQtYY9T%cZC*#iMVo*ruazsD<0bn^A~ z&aGY&Jwt4?2)@7F;UrdyA4P)(ODoS1u_cNnHK4 zEN>v5r8}l8;addpuet|=u0V8lmK884S2O5}O0B9(^@C-W=qIOQI%xod(32u|modkU z*!~f+HRbOVsfjiES~BsRS)z_RZqh9!W0QGB+0K|Q23DQ{;o@bsKJ&P$jN*&P7&n<8 z8Ob5Id&W8>8xlDsE!+-6)e$yQe>>OC&I#fwdSD@2w?`jZYIfMWO~*K$C};)_-Kv>` z?cS?zVcOABp!r-QBnV>d)zmjpQfg$96ASHo!^Y2H(YjvbIwST+e-NtF|Z_pyw8oWLku@( zHdK=RFjupMPAC0~s8XTS5lG>@vqWAkr*~dJ(W(629*q%xOh)_;4WYGWI?D6q{i91y z^K^jv3G~5~`aA2|>kdsiQYN-5(bmIwdZo*(h+6~MZaSg($W+9cYR?$zd-pdkxdxS9 z&Mx=mx+|St*yN*ejdXxr6jmfU-!3tZcTgLn_YK> zeQ`pU{~-+5sAusZH!5l2ev1;0*=CPabIKE;JkY-L75ZgVof-e~*-&AjVw zFQR8e2Lg~)=Ujr-I7zPVSa9~eBDFV3 z;}?cfuRu<|0Sh7NsJa^75l-pn|Bf>+1I^xcwdZ#{Ao4t4RPd)+se6!0F+gUzg!Ow_ z`v+Y5Fw>Ih%>T5N(>6VHi)8Q*@=@UxSHx#84_4_a2Egay{66BC?e>*(2>i$}Opdss zRrgBS8>8Q10HWwBleg(EllIEZI#u_Xh*(VLp}toq2@tnL^`Nm49k#VnxAlf$_Wg#hh^rX*dxaVI-GlZ{i#|Em9}Q6>1f!!< zes4XaT3oeF<GaXYX@(+s5T_eTS`j1uq8m_;t%VV^RtrjouA+_9ngQW0;IGjaQ z8*VDd;!7ZIM$EBYw`SJDD(%v=baQF>B$Ssh%-_|A1j|tTo+SE3LJD2daF%6=Dd^SN zm{y!1ae8@HDp0Nca`O8i%jyW3vyUU3{aEuP$ok5VEugkIU<&`gEnMF?;TKFhHerAf z1BtJ={c%4ry4qdCAT7`R`x7gJo%4Vq8i*F1_yucgmT*ThBL5}doh7=B+o`%%?YrWx z|FHt>KyFRj*s5VBMy5>3{O`57)JAM*xYq*5;qiw>ctpwT4jVHy-?IL5~=#c+}5XnI`g z`WQckwuRuR2PQ5^A_Ixil80CPb=fWbvdvfj@yTS}s$|<2=aMOHNzdRLAeFP=|-(Yvw5AOy3!tSH-?m z31M49s|qMVyIOn<0l<*QsPxLuUcUiy@6on~ybaUGXL zr8N;Lcv6h@$5}sYCrR&u3+LpfT%RnjSnz{c+al8N$~2Fear!9B%uStUOYa zd9|Rf89Q*h((BS)84YT$@JlCE&v`0j zg7@5#>ECvqcd8AX#yj#2m-O!N&@8DGt*Ae-(S+B((AAO-)Gair6n&XKaHkc;eMeG@ zV^Vt6Ssi*p(H(nf@<`W-&GeChv?aVz^h1{psM*}U)0OJ2phoXmCqJMBM4r|%&s|`) z6&iwMr-LNhpqH~)86VH$cXaV56V7?yuM->!$QZ}z}) z%Xc7ae{@POmPuge{4FBsA>r^RHfJ4n_OLAGW_D^PkTaGuQ3FR5ag8qAmmmyZ9ZYh&D6Wk?_-NT@*1=SzQ|EWv zb_*a3m5j)Wi3ytt-!u&LDwdLTMjU9VsO%%*UZxA&FaEhb3n{!T3o~!#8&81O8+uBW zQrU@XzsOw8_dnn}LXZIX_nXjjXUiPG7@8^)RR_vg?~oLrq;!lpFXcmncFdbRH8f@< zJDV?nwgaZqdCtSTuv~cmJTzFIbC-h!6A_!e6v0vox4nB~uwX{Um?A?G~z(CoUb>*yIs)E5X)i1Q< z|Ie1Zo<$4}1;bMS=Kkv1@sLsA8tAS9%zClfq`UpOaANFp zucu%eH2`!Twu6qndmbWS)Ko$WG)e*>2g&|PL$P9C|HML;p5uSvKGpg<8(>rQ2oS3J zpa5!1=GKQBSq$u3a+P~`iZefp)8J-~O@O^CwC+8b1-;W*u<=>eaw2e&Pik7|HJj6w zaGwz^S-SwO=ItP_`%jkkWbu#_1n%fSl8^+T+?qwI=2KBFNqX1OH9B@wR{&xx1Sr>J zX#kADB=l}^=d_Li)Ux^jPB=xjQ^3>YS`&THIgG@tpUDPfUaL#doNyo&eO0jL-|PNb$Q)}5Za0IAIyZ#)=iwJVX9 z#aKmyTDNv?Fx=SU!q9=1!!R`H%V-^*amHie?Gxw zH#kmLOND#gd9w;Qz*;yFC?Ag#JaJoyE%jVqX2uoo)+bFyBDlWAA4j>NK}qeP*Q8b9 z>kTy6()$d04gp-a=Lbme*I!pN_PRF#0}D)3J3t%o3Uya(-cn7w91X(7j+={L{p{o~ ztN@6i9K`lPd7zT_oU#pk zfedZ?ga4=AFUtZU9J?w&Mc<*X4vRsf{DR=j(i(<|__NWyo;ddTyqHj?Yy% z!V5(Az3+gb4X=i&uSDEefMryy+5?QUUZ=f35eL+f(*G2lgc{UiVAyo^;wqN`XA^YX zey&WOw*}eMvI_F>Q8P;5Rh|+7!qC^9)!~jQt07*ppd8fjI7rv9KF*)@)C-s%aN4VM zbKK8);+#LChxeKqAe+8-iCb@ud*w+?kJrhS z8y}66_oX!({KTe#swm;)MgfLN@KqW6pxTwfVdT65U|6+r_;2C>YUoFnn3nG1#G?o-%|S`@&9g$eyT0U{*yX`)zXp2 z;H(d$on>GB$c0}VXY#>ffO!AAA0TvUb5S;14m8?j+sMNB=az6psh!DcGvf_Bc2>o0 z_rWM{qJx-9+At;)s%5zhn7EiG_DB<%v49x|`ul)h#eFy1?>>NTuZ9ux8)>~jU!GtX zIFPgI>@)@Tevc(iX-xv=<_}zI==Sf{pM0%_A8x$fxCJw?s1#uAM7n-H{&-=T_$&2I z>La75nUtJ|V>lk!>c`IS(Rmw^5&`!xIiz;=hLTht7iFPs>VwbR8b9?m9~*7#fqZ0= zNs#?zENI{T0S2$L`E=0@?0{nZ?y^tU15heATYj~gsqANISqBT6)Z=i+y6)S7isrPg z+^EI-q=iE!9ejl)+Uve<)m+V$$$*t|S8+bFHi?Z%(`!1qMe61b;Oh9VLS#Uwd}<@t z_!M61W%p+^w&cHFDKAC#z}W6P9urqa-iofu!IOmb!i_~B>y1`y3OA18NZy=sL4^DI z@>5&*{L>%TSZbBbv*gr&xJ)rGYwtnWXV7hmYZtYdgRzG86PkKs*FV zDk)vi@s8ae1_e(%o_hEV@@e{sa(9E-Z;7lmU_Po*$*f&&5fHf1PtoF4*#4YoSlkTd zb$t0r?6-g`U1q|jIFZNGQ=(`+r!;CRySQVdl~nHv4hqOpaXqDG#b z=RgD(_!jKjS|t+_m2vM8CKFQzzq0B(dW$W@hGWXP;HD?-LGlp^zyd%yooJ$`1Ms5*w2uC*!77Uq~ql+bFbxbUgU$Zxy9-dtm zef#T?y4-BGT@X)A+CX%%^UDR5KPHBF`fiK4M*Mb)<<}+$-|Xq8*|= z=QbcR!nF*fJw#hp;nNkL3lc|HEO6IqKKY zLNpEfKJ_rMLiZB>inIb}DDxj|oG8vez)XXTU{2KIp z$2u;=(MnjXG>67s$zev%t0#wuv0Qi(t0`Yo8!o!ZU_FpG2#sIX=3N#&{Q~?SFG}Sb zHAtq{=|>r(ui&hPT@wH)u^tIFrNyITZV9vgsl)F!Kgi$utKnKu&H-}yL+Ysx!|^5N zM|kAp%obhXG@Vj}*~dX~ZSaWHNy7iMGp9Pfc>~klHO=|EpN;6u(v@c-_o_Sac+xm} zlU!1W!SBk1zG@KihAUt)$_3c57x>TFAAMNGLdontz`X!<+WKrEBE|V`SHS3nAO_xs zV1q`Fr}>_I0CIj>ik)rtg~!^!)n{h$!K> zdRvwr;mODQ`sy~K7Eax{0++AqLm09};W$?owt(rwlkBBAeF95zCQcL?>DPK`qd{#$c86YT(2A8_I+v?ZsurnBU)&~hv> z@t!K6FKs!f*LlvG`tz&Vm<=0c)34L_cX=f_Oh>%pSvJ^k1WxW)Gb;ABKQ2w1^Q3#j ztw}jUORD3?DDs-JTHnHNcS|(GgbNd6D~Y=h5(3SL?OX z|3}t&2Q}3M?4CgAy-DbyNf!c2FQNA$(tGm-DI!HWBow7c2?)}QAkwSS6bN7lRf>u< z6{PoG0|_^NGvC}hbN|ZZWY3w*o;|yJcAw|@U08Li>*Oi6@dnp8vUoj5;k%kzd`>ZtyhqQ}%NHoVB<&cbRvc&2gYPI(PfqcJ zhW9Dtz5ei#-!4o<_J~FCXk8W=_LXI%jS)wK9liY`d-GcOHUazn{R8Jwd+7mo8_JWN z@Rf5PsUO<`Gr5D8OzXZs#w1AtJo(yiKJojMysf`99Ir&dZeIdRM07=T$KMwt@ zN;zj-kBB5BqF88S;4i8{LFW$R2*elk;2r zd$q*nKBftf8IL|*vWOyqr7W%vIg#Twx7=Z0(*H2EJx{ZNt=>)y>cvlEg1vuGr zyXDEqtNq0M;|Juvg#<@UKkcpisMn65obhOoV!5nr8O8w#s#G!%W% zGB2VIH*%7Z zrC12x1S+x6;jG5WVc{;~e6HQ+YBa{LnX{*S#jF_-yh+}&p`v2&b&?cBKsH(K69<`- z-j4=*hts(l+CtvuDt(e2ylrP}|R;9Da7PSn}Dz&Sgb;i6oQ0 zMH!P&k^|IF9$ei)s2OyC3qJHh^C1g7_W=bI?Q$PZlC5|=;IfHbUsX9#G% zl#|h|T;tuG{@xc28Bo6Hl-44|8uKgd`=mdmk@#85j}L*cOUgSj3(41xnrB$EPQ|Fx^PDWYvlTsJ{QO zj0GP7+qi(0dy=bS&II4`cjLRy9@*?$Y^e9*L)L^2j0t@xFsqs^2>e@8B82FOQd!a>jX)J&6Swzx1Ho7fJ*p8$9IX{-bjN zkPz=HrrFK^bQ<|%%}O}b?VTM&E@JoMwPB3&&ki|m))4GYP*k8O7~n+~Jk}gxcF&T? zA*w}N{uw=kdE>JceZe(*SsXQ9-`HpZAgF-h6a^1i{L4nl&r`d@4*!9_Op7aI+R zux`s|iTiHc8INF&TH=q>K5+*o?3vq08mg|`z0!0ft07wg1ZubvW+XJ=oi6XjvTL00 zTMjVIDWA_ zy_JrLYnJ_n8VuoW;Fakko#ejB)-{LzdTHc*%^RNX>;4(+U#cpUSr6n7xqQgL?M@J} zJP~WQh+y%dX=7*YMT!oeSXj*ZMhdo-V;xl7SFvXT2toghZ$Y z#XxjOc-}NoMlXoC6Jf>|592oZFVF{9&1MA|g04V!ZPItr!HC7uN|g91 zU~X8?Xj%AvI{ zktUHObOl@uA4t~de|(N6KyGjW>p?2>z1XX6>)AAlXY#HDnM83zf#y%K8eW`LVN4Mz^iF(@sG zMQw3$qwUB)g8o})lRrujhd9bb$7Ymu5A(+WZShUbJ^pCaDl^Xm?ey5U6EgkWoC@K? zNae|KAI(t}yYiofhQKZVPMvAiynboDK-L+3VYaK$84MJ(5JZmHU7;c$1Njw7 z8Z(pDsZ?`+WWK6Y`hL;)LrMB6f;Th05LC)QB=icDi3RczQAnK z09u>reOpwkMMX!1Ff1hnu72cpuxz2wmD?2jl*)bVTm2FQpN)$|Uo4e3F`}qupY9ec zr+fM2pcBH%XlEb#5FN4U5kok7UikCb5YBr0bd!aC<>^TYduSm9?ui3U_PyLDl}T+L zsXhPkU$I>>2;ABK#_PF#8@E)>5uSgr7Lf<55o?uPIxym``y%#y_CY*Z;1+p$q$prT zH(=bJ?=x>~B>NB9kw1AbhI^?ci~Txf=o|G=qWw{8gk*%1*78_am3l+IZ~3nR)FdNO zxJuE5pyy!Ab(?2}5t^C>_iFdJAgPvI#T_*Q1?kGToFmyrFbs zNE^4UxgY1Vt)j(@P7(DNUv<=>!H90h^`zfGhc+)zLqjHx=p}+0eNkIxmCaI^tsYt3Rny*Wv}@b{ z+=y!FMz>e8lz&e_%w)KpsQ{jRyCURb_3$Z`7)?5}aJm|?H;MT;|lLV+BoE^3`l(IcV&ns*rz-miC^ z!K`rs%tWUa)8uU2u_9>o3hXwwuLhU!_gKJ&0wH+9XM2vK31#MXDp?~Z4e-#t&h;L; zO9ns#S?@MqM6})iZ%AVAC6lw*RgdN0t(@ZYw`k$SQ+!0zy&K1f-z5x2=)Rn*jpMP~ z=gKeH=Z;YDMK;YQVoEXBff6cvCQsq23=Ls?Bjl)2a_qauECKv({`s;~i%V{Sz{b5I zmidlPiUd6q1YCI+U4VMye};nZ8$74zi_gg`1id9B+|XOn?iB8G(J5--wsTJ{)q;ba zi2<&(tBodWc|crUVp$v_c*y8Mg6$eiM|(=OS0CI*OU@i~4?x)RzBCn_78XC`E;i|X z>f~Y5G|#)40uZoeGl@2dXzjm)f-b6CajNM0^dYBWcwOPNDl7%B#@%MD>&;pb5|usq zD1siQi1_g%L(INt?javP@nwi*CpOpIfQl}%{BzxZZgzUSNfqFait1E!wTKQnSvnoH z;^o1k7j!i!5`~*w)SDi&X1H(ft=mMRe^b$=hMEUeBAo?HcbS#__AYR~tRp6_HmM*v z5iqY7k!3x4zCy|RC}S@=nujvfn-Q1pPV%|J>w$zIf(BJ}DSc(=Q|<_r2DMQr0hN5ZYh>dQq(sf$%xvE^{e33^YuVFqR1R6=@jA^LNvlcZ#~AO6$PI+DUf92*Qonswmf7V;FQ90QrG6Z z>C6TRzHvlR-L8i;_0E4lo$!#%mKTwV$O-jqm>gcL*d&3RyRd+#@M{-MteV^y(Vlvn z?$8z=fC}A^2r`{4gI0NRtHh_A$1o7^mh+p)wJHsNNrLE%Q3jCO89smtyTZ@uPeH0wtm!m)UyWdv;8rPo~5pe#sf5 z`sr`2-LW{)NBV`NqF%?E`M3F{PJw+O-iQ?XfWbEeL9~kcP5P?SBeaB=nIRT6S0qq z@WLLI%{thTN5*C{5{W^F+SFUrZ9|X88VOcZk1Z~|k^q?$iGUl@Bq9t|l0IvM_`e?D zW`Kjfa!K&$70Qyo_ZJJS+Fw9L4cX}^qmC;Hn>wd4!PkR>KUHvk^YG|a)UI_Bh)!5+ z!9aI5rDl85!vfCLv&u<(*F}*&dReIIjFB2$3<*&^ZLZ8DM zF+|``@6WtiJJO0LmQS*(R4gs(Ly=X#jwi&3iyvxIZASk}2z5Y(wI*2cO0V6BgcHoI zir&kWzB8ChI?U|r`t(p|jQLZajz>~xl=e*6`&A7rxZTMs~za8sF4z9$cAKcN7!LT1+N`Chf@I&7dBjf<~AX?EL3){C_hN0e{MA#71W_ zGzh3^z?C5ImG$UfIbg2G@IF@wTVtxtL$#tIr~N}Ud7Iv|8}2W4E9i&q|EmRvTk)c% z>tfjHZ1NUjy_g7d!r zUMAQP34Uz>v~+>A&A%Q@CPg#+$F7rnb}E;GW<_ z-uMQDSc&_wqyhxu=J;C_&TOzVAA|)r6vHWFG7U=Hy+mV1r~|J~;wjab_l|3|6=sJ7 zPs3G=5&VXNR6Cu2gtx+gd_%c~Eq?@@s$HR^?pM5b6l;WRlKZ=pzC^rtw`ke=d}Nc8KD z*cYT0BbyEvA0Itlf_rhe65ixE){7}Oz5w-dW%&4WP6$-@k1yTcD3A6nXfsGze&BJv zQjSJgzq};mzBkEIOaw?wKgDq?{%to}MZqy&y0^;PziTlQnWq8#C=KX|X65&*y&zXQ zPFPZKK~ut|SnBI_ra3ssw7)#~N#V^7MTQzow=RbsTe7VdS+Wd-I|<&Ui^;U2DwU@D zsMTVLZ}z)9yNw41oyh=;zA&?RYYxsSk;r;xq8i&VMyo`C36;oSfho;kW%(C%mz}&U zrJr5`=iA>}y23rKMX2ZZ2OVZG5J4Hu=p^YI%S5l6yoSH>sP8D+QzG_+KPwl_l&GC6 zHAGGHOpnc%%|6z*p%6zaVF^nR0ipcOVU|a_jP8^j~?7kV9iH%MF}^Z zxMsHmSBcyR?6w!I#UZ7#M!lJ?Rs4zpAdq$}5i+>~@>69ulDmi7gj1!erB8|M`*V<0 zaS75PRwLxHTa_IO<6G+U&rfI)a7Zv5R_0Qz| z@8-r^&)`hF5o8ME32bgZn(yx+H=$a(KnNC95Xlp`#QUyP1}!oYQHa#?kTk6Sjr+u+ zuxq6{rMEwd)$95p=*X9-ys|=D{+OAm;Ojx_fT=IfdG&b;;L0=8T=&1|iKr(U^(X?F zq;mw*=C3=E?C}JUVpr#?HPO=ctNFGiU z#(L-RkRTYZ!eD5qIDSS*<_h%-KE~c7{wln{mUtHW--DIq#;F=52=(xTwm5&ZhdPJr zmmn@?sck2{-S)n3g54y_f=`l{*2s&{7j7m&P13LAP~iyEWNE%r3x`*k~9%OE|N@0l=#JYfQ)z$attecol--CP$RQ=WAw~OJw;8U$s7WGmhw=r z%KV8u$&1yD2u89hS9odm!LdEz)7<;<+-@T(e)aG0k!Lc#@Mosi4;l8bGhB|XeX+QV{*gk#o!66;QXjQT_0~B z4@u$T)wEfI0EE|OaG0(N@ljGniD+eIgFvHEgYyCGv`EuXFX`NLCEkX3a7pc*2T za&3#9_zS#9ec!==#d6H6N#F_Ob&d+-ShIfb%_jUV+NL%X=ghyFWteh8;f+j}8S+itQQFYFH2(-g&-U|FRs~qG6ETPr) zl$Ig5etXey0<*-)J&L`R)&Z&x(e-6F@>T=66EjO8l_JvX;=sB)r8BcnVy;gj&>X*^ z?rSA>Vi2QZUJ(!z`CO zLs9R>Uuiw#xj%RFJY3+=ylcyFhquwR0PRRM^|_20=55rs|B5&w>qhs++mJ1Y&{@^l~LbXDl$LCHkJR%unY9r+qJ5je*4^)Zy zoA*nHT(*rxRgu>!uZ{c3gHKD*RR)6%;KBU{0v{xU8@%{7$GRC*ZjR-%Zhhlq}u5 zQ&FeOLp;}~fY-J6f_#B2Nn@J*oXad$i@z<>w6(&!l`!4MwKju&zJ@r>jQO+usPz)< zk<~}R#vlC$uM*2AP`pZ{1$#~`Lnk~h5RcarH&z5~P(w)!XnhDVY{om2ReFD?)+;H@ z!X>uwS*j!TRxQEN2mb3ZdEdXbsobAd){=oNs(j13C;|n&n|wwhI7FZgoHn&wY?8bs zaU>Qs!~PH?xa^C5_eM+ejQiUpa%AeYsZvP?i7Ewx(uc2E0E1t^QiYNsG@$qI4BOIo z*}L)a5F}1CIh|74jk(6?LWf(&$9YLAkYm});Yb2FHTpfhpk(n7k-uPDhFm$H-!r^= z9R&w6xQ*6o(}iZ;dAlZ<^z9#w?);G%`Kk*8}>2i?t& z77=`ZK@s!EpwT1a2jo4F&-G$jworVpzhf$Rok=4@@Nvq66a5OJJ{q@#uFa_WPu#{Y z-^E8r72B5+6_Hs-CYAm%N{>5?Dm}oR2E|gNOPc#Y0WdVJ2T7*}nD3dm?|`J#`4Ej- ziPQ9CXh0~{N|}{hww;X@ZHJ)y9e!G0FyxEm_dBheabGVdJ&GsJK2|bC)IziuH@RnC zGkt#wGv$3;HpFx?(#>jxo+(NA`}hS!%LyS6%^L^gwr#d@;+gJvdCjo-Hr@8@`}MnN zn0wrnU~a#>bO@dHRdv^9nXY22I|p?FBS zm&wXEBvLWHh{n~p-%A&nPgc2XP{xO{S3wP0Plcc4{CdPWfW7Q#+q2*$Y2rq);C6Fu zPj#he=?#_)*q=yn({I>zpURM$rFE}uvv3#ruhPEOk~rE5GpxXQGqbp6!+%|KWy;Q( zGZ^0_`vpD-)G`E4CGY*{bGcNG1fG=Y3#77Myunr~Uy`oJ^Xt1yJAY z-GV)ag{R&>$FC^jG=d~OPW9Ff=ziWfSWvZKQ|Pf5jTYtG=~u2kiAIMWVpVisTvxE2 z55@p(Z#uudeKW5jyinEVx{_ON=F#I>=qc(h8}(D2ZAH5^`wlm-?IqpDVI;apCG*D> zzamn#c9u>dg*nQt&LX+7twq1#GA`nTN4vC9{%;%y)bXvI!eCt3!0pul34_LJ?)7D7 znTdHK#tX7+z8a?`P477NdOY0>39jH#xUruK)>T8B*fA5Fyrj{+r$tpIHN;5tNmT{J zYL#Nhp2$b6ODF=`WPwntyl#{9z!|YmLnruo1lOksOD}H6c*1LEt}|%q81+b41@U>C z!!F`Db14JEFV>Lvs9e$FVbRLkAw5~re0 z8qZ5s|y*XbpP;^PU`~>geNg7+&al2|;{ zSA887SOGl6uf(HQSZ!0(v}=8LlpVJOwotZ;>!Kw$&}a6M3v&QOC6Y?bK`3gXsO zqg#R>kAPNVH*!SWJW^b~&an(jU$(2(8Aer3$mz}}r38KCPdn$)s5qr(*F#21rrJwd zeoVj8yogM4(dku^w$j%ItASKk4fyi~dpud9@G(R*$>WsHPn)zhNu$6I|IW{<(-F*y zpLUzq!Ef{~5Tj-)oKbJ^8|LT!P6tGzfC8b28joP67Oa?gQ?icTWO|p<93wxX9?>_e zUh}JKTo@tZ%gP(OEstYECj0R{ z9kTLj#4pphEw~t?qRH_V{&Ggh@;J8zJ(Q&z-&}A2$U< z`l{o83^HSqR1x-9=VeZ(Mc4GT$5Aj`YQvN=HY!XdUUI6F7?=1>P0u=)-X?*)G-th7? z8>AE@2AvX?BzMCTJyM#fIpt9%doPyU>N*A!@aKm#x$=pUw=?GyQaMx)_I z87xqUv^KMK9%H{AJPh&`mKX8ztJqk-s0%K9wQd$wb$X*OG>wd`6B)MXJjmje9rPpMv$l%zDtGo|oa6n5qUUXEKAsO3lIKku z_KI4SV|Ey`BW;D9oQ!dSFk5d$1Kp0L{f^n6{p7i=QxB?F z%k_UZR++5%z#h2O0-L0R+cO;w_BSH3GP46N>YsBZ52bpoGMoM}>FjLOtp0hB#a3%} zWcAQ+4f#lzq+a{Ix0*n~qk7I=DketeHOgtU^VM@l(!dDNW;qH9rXw?tEd;K47K*+V zSILkgA&h~7pJC$|ujC)`!o;1xbV8|M{K4Mml;>}!1J1y9MbpKZyxj zc@pub{Lj(<`M^lVg78IV#2e1y+WuYbe}1Zs`FEB7TW<3Und|>^5@C!=%Ku-Wm*Q+ zZFQbMSqn7*r&A{f{TL+2`E}b=eqJbkUNNzix?t&dEW(IE-+LwaTd0vR+@R!)-84Gfs8{>*R>=VVkhqbr0-Hq@+-<{jI>8_k)pQqb&481Ov;LrM2|3`$yYX*nC z-oyJ#(tT%}{w6PmJTIKYht2xr+;i|cfZbj*@+?~T?ipA8{-<=`9gN-`^cl_+*t(Us zfz3FC%>9EPh^|&wPO;BF6IWk3zg$UQz{k};XTR@h+Wt%RHbe&;rWm}N8-)iWe0=i# zy~EM-hDYB(WbcH@nyVFKJY~;HLDcA!wDV^poqQwR$;KU(eik77ymWF z^#%6qcWT*&uDl9nDt(?7w?uol;$Vco*qKA;Jb$JOjoX0X1|6|@K8jV(F*Du}W&ZWz zyYlVcBHpucYI6IdIP!Qnf8LgI^iPJoFeWWJWdE1^=OZ-x9^Reum=|z--s>JcaS@pw zh0h?bmzUc%v^!&*(|nmhlv=y`{B(2b{H1JH-_Hhzg+FcMD#-To528|RpF0CL-h*j5 zCl5Y*b^SL{>?^w%`2l-yi)-x0J6GEO$)WcG%}1r(iE?kbu~XcwFDO}l{`zTKJj48{ z;#Tzt#i&;~S^o=H(x7qZ3T^H-az-W6pTll1U~SP@j7qsx z6mh;{jSYC=Fe;KvDV;+;-~~siA3mF0akp*Z>4)!?ChdzWxa$KGj8X6QL0IejKF=J! zTHpV38|}P#=e&$cI>+lD<+pb5k_5yZ5lypTRIwUK^hF4)eQ)kVrQJ%r?MB6qkRLt& z{37SFuoKy~$D?mfVaWN>3Dv9Ds?D&g9M}_NkK$gQUu|?t=-(Bqxd%gK_y%$&^WRu* z|As^3d7Y@P*e=TN_S~;h&gNowH+1XTuKj7NonQB~Bi^R*j#feD$+vg;jcq~Ur3-bCi(z{)_M?o+A;*sjvqdkauD|Xwka0zCdE6H;OxFX$R-i!GG zQjNZ0p1Ek--cm833f;JTg}i(vJR6A@`W6*}2nSY+RAD{X@IuT#wa2@|Iu44u(0{cE z<7K&tstt=4a1j?_Jg#NFT0A@WC-px!K%N@xq2TfLd})h~>)qQHjV&eDoh1f9iX_V0 z+tkI&)ce6~jI32<$M>CFtC5gDxA-RI&T`MbqpYX`T~W3A=~uE*#qn<0H}0*JL!q~PJevBEh<5)RrS8`Vas+=@IJJ5N)(3t zr)VE`3{`Kix2w(YR$ja)A8J^pb;M)X?{Y6i5i#?t9`mVYt{eGYU{5c^DrYJ%k>d6D z?foW|T8>ZgkJ-k#H}c$D803+$l!I>&ugCWn+8ePL01?S7?d>70pldWbg>?_P_&KC8 z>fj=}@xlH3_Wp}r#ZG!8$!(`=0amMm>k}m<^YY$5>&~x(WQ>gP)jafkmfb?JJ0w$F=@kB5%Zc$)HKb$(8jH zqZxca$iYb%S3OX?ij`>5`v^9S!|*PS zX^dlA?lSV<<=bG5(vZyg*dE-vAMQPN{{Z)t*Y^(|crlN>y+&5b0hW#Ss^8OM*t1`t zlIZ?Sqwj0ESs2;dH5mQDhtt<-HJ(yI2S~8<9sX_+RF2~lmUxI4>OSVrAl|!>#p3lA zO8L@Ub6GlBq~zFMK&P|0;XZ9^nF#|CTNi#vxJz{TZ=l$#sD%euFjOfXbbY{vAV_ZU z_tgt|W`}%?7ZuCS!&C!ShnT=V^B;w=$Z~CyB*)IAGnku}IBkQn-8m)lkaDkIhi+ji zSh$)~#>bi>^jP!p#s2TDkT9sdky9U@z+!ei2)h|PKluLBYhSIOGS757uLo(ausQFg zW&t;;sg1!0ZvMnGC#=5T>h-@$$?aJwlJz}%`98lHdMC21|ATHRZo3gz(@hI}KlDF- zB~kQO)ws^{2_&09i^`G+CTQTpreA&F7LSe7N6(DzC1Qyt3@is)??>*h8ecjyth@^nj?N3+yrhHXBWn zj*h~dZtV%2wQe(`2;3_J*dnc~bMM}U;45tLv3*BdJ~5Mo8;bn6dRl$)c7CSk4W`1^ zECp80Auv;0DLT}8z_%2>Tacq6Qg}#RAnRv*E0`8K^~y0zm(zki^m@&WszmhEyl_%5 z31CDf5Y$xh=)Ixd?M%Gna8`%gM`BAdXCx&5_RQ%vyWwGf%9k9M`qjGA5Pcedve6s~ zliP`GZMCK$a&j``n}2Y|M~8hQ*xneTg>0RR()c3ae`nj%=XgE7D6uf`duxN`WyC+I zhrWOgFI2M3mF3mQYoS21UY-{>c)L`FwRtM%l0stM=Yt-_Z2H$@Eg~CMca+d+oCVfq zBZ-@gBiizXA(@!*{0H9Our~G1UAcIb)_%_gJ3ZEV9^r9x(sSo1>K z$Jrm_+RS*Moi(eVxxW`6wnDk6c%WkVspsDgnFkMA(}h>Ea&j05?bhkLFEBo=9G7@=iYZNXe=Ghj^E8n!3(b%43sx1v*^1TbN_Bnkyol z$}BY+SjF_MHJmFzyZU~()@^4S>=w6ojqB5(RnFSw|5PTW)o}H1RD4Hi`fOLin zn&Y#zdGJ_nhL1}@Gs_tJ#KvuAci}FZN@VCaVU=GYzdHQ)W}eWHak(3qD;V5bLo@`1 zD1oQxODX4~JWF#~M2}RqH#8>%57kTXvM->GE@HLO#hXIrcZpTm21GD3)pocNx=|YD zT#=wJ-$p}l`l#j0PeNViud3(7^8XRj_M6~hvY*xrSqB{kI#K)U>b2Blb@@&sGiY5I z8)1qe`-UxXznV*94lK+X4jyhD6R92&3FBN|P}>X|HxYleTKyqqIm_!RqDz2PY4^a$ zQnJ)VdPTgyp-@QPo9&5;xDN5;UTF_l)4#^sPZ2&6ds-pMJ_0=)4%y0XR2@Heiv38} zPLHqbN0nRzpR3OIV^3wFTHtdk>>xgodiL3Rik#LFwLcuQpQJI5j$)RE;D$`NDmMjH zsGSTHADd|Y=jm7-o4xk}w0?k!IZeMl5sOg)FX)#dJeHN(zA`J91RvR>nG2>Hosb(o zL|P``(IB}G%fO)cj`)tMJ9FFjHm^Rurm!BSD6xCmspL~H_rF?z3T4a8gQ!J3D~qH5 zmA}Sa@EmYI!M>?%;vj?Q6tQjXD_m{S2qwx^TsMb0C5yZ;e~|Jt%#6xTo&94I;IJG; zZob+?*9V&X+1|b9yLYmIrBO+SnAQy?Xg!JyjTR43BWAvMw--r@tRXgN<^266{g}~C z?WtyAYM1Mb=70XGH^>>$HnA)J<9L>7<`mWAstq^qw#wdRO=R9IOy`)DQJIP2Ns80g@0CSzA4R=?FyJ=NGFH*FOSW}{_z zKJxgX;ki6>Hg?mN@JWL}Ct(1G(DVWJ&q1qT6M>GJYkbQ}mM$0B&{j@iIUxzg5a~&@ z^74_Z@w0cG%{<`Btb8z+fc6xGU(N?Pl2k5`=w|P4{VP45bP!#v{k1klnkMf0?-+9D zb5Cti^%)H}(U{2czZrdnd%TBq`w%sW>F}F*3SsDE97MZVl0wc~S5Va|aD7Z~gQzKB zdUiH9MQWT?W8jQp9pvW@bklMoe<$>Xzv}qny9xT(BYNHATVR+9icBiCE~0a7&R(!+ zvdcL%L)>ZIhFoP%K>ltsUnx(<8WCmM*prf{_2jZ7dGfu&fAP8Vn1sJM_FD>QnmMAH z_e)SN5%<+0fOe5{2^0}XfUrQn+2)OX#(iiJi%!%RCp`0b&^3UUijz=;6o? z)7YN^1Qm!|Np5C3`Q$)*6KT|)B^x$5F*}2LzRra(NQxs*A z{6+IsGZ?;!#l4~7ZM#xyT?Q)oV&p4p=tBb+r(k88#pzIF^g(r z4SV?%4R?><$+KE7IQNXG!4MC}EAzbJP>?FYB-7(A{BMKQ3zJ8S*Oo^G@lfS@F_RoKS0f0E_aE%ux6h_ zT`Ye`NCcS$kB`c(=tVS(Z%X*{PVn>)e3E^~mi-0gB6j@NO>C1c;Y3Mb^HM8-{S>%3 z+VRT#v;s@u@VKj0nUNhjW_(i~HhnV1;!1JM$oUc%%hFXERTz23j0L~%S83XWr@2Tp zg`si?qbgO+P3aR#t+qqB1bOWcQDa1b2Cag7+CQ6a36CCJ@Q@xw4g5KASg*D1tch1K zqH>meXl@C-KS?n{Mng{{@Ukw5PmaHpj3kzvjwbdcUInMjUU~0Jy*N3Ufk3Ue4?I2E$a%ozFfC~ZjJOFT`;hE<9f2}l{7>5*U zqi{WRMm?VhB#l3QKPb_b;gO46t_gEK%Ls;=wJ7vq!JE&Ta6N34L2;ck6qd$ROY!7} zkeTh#GM|VXA-@cJn>%RKi{Fw^wvTMe7O%H&J zn_kaN_u&WogJCx`+tnz`LtUXJReqhDcMd}|(Lb;63)CT~P7PX?R#?AMuSy(MN*vt9 z4fxf%+a57t)T#FRYJ`u1r`SD2V$MCA(SzhS?8{o=7CUbgYj#1Z+211idvk6zMl`^s zuT-K-d5NN!swtahP>!e_UNM4K(MqBw|J80O_P#{KP5Nd2hkm`mQV)NzjmLZC7#20g zg&O)7uQhFN??%6knzg&NKP$0+fqb<}cuH%Rv@hbZ6mI!f8SwU8+Un1}Do0{S8` zuY>fYtVhJy)rF#49r=zjYyc62uy!J?t%0G0lScs)9*)g>J@u%l*`qGDx6=RCWVP?` zJX~56C3*IroLRQ{Uon?wxg3Q|>Vs!Zb^nY^WYxK0vCvFHLIMsDMbZ~=uH|uWpgY{X z&|e5-w}-v(pb`>(!<#t?ey6XXV0LVz`p`O-J1dS~gQ^Lgw#212_=G@!MFfj~TQGk0 zP7Q5&0Y^DkJVX(JK{_@rV`R2B(NI4oz2ffXjjOA_iqILiF7k6$_If(Ec$e^#cA6nM zNm~9ZTo4SIO>l)UtGz|Y)~S0B+(87<9ad4}xgu}b1MOTz3kOtUM^09lTLQX`ocqYPPFv1Y9Q#vJg8 zid-LSQ~oOL144X0L~~7U@;Jy8NtTawsU~3kuTFQiSsJKSv74*!(8|zv!!$?#m0eBM zZ>j^MotoeJX4w^i(aQ-$V-q!`JYkjjXed zIBn;K(&AqA2*NzdM8KRc+WuV5L{66t!7KpW=GFwOm5*~z9aQfgPn(}6K|hLG0SH^w zqzn-{$3hOr2__i`m!0R6V&MtOE)`@2X$>wP@~lp61Q z*^2RIh_xu_N9J+6R+gNmM+*UFPLAw`kT*ylHgeA9Sl9dRuQsZr8u=E=4q;mUghB9&V?I|x^bS7-wu7y z1YPY}abY;am@L$N+KE#X!*^MxZm>zChe-XKKv%G;8#J&~-!!B6@`=x9Of^mwvswNm zvQ=wn=a)$0l8!bwr5jQj;NOcHfz&1)GPl!j^Byc2}Q0Ba?G$;0Z%b(KEFq!~5>p{;dJddVzGaI4g|~ z4JC)(F)FQ?56JP-@qd=11d^O*m1J!lM%1SyfuL1q4#;pFyTD+3w`HPY4*9s0M+0~V zoWG&1Z(TO1^p=0kOgELAila^_<|Ew2)e&qcNnx)+mvQho&Y!<&QY5TeBmAc3!Cu)9 zA?}NUR=ou0RFHdh3S{+V5H7!T+TzPHzLqyca^xip)^}@R3D1t`UDTnp8>7_Z_AE5Z0Gdn4I}by%S?1q zIrgA5WK~nNXu@vOvPD)`=mPBi-A&Oz;=IiR@x$8yKk%^C0MCnDQVzJsTXJK(;M-h5 zlvT4>x9jA4-;~8EqS-Z@L-|oa!$zs#ukV5^^1>U}0K{`b+WLmLR(K=+0xqH3>K*}8d~+!~Y~z7PA`gUGnTc{vfou`jyR8g+#bq)rdA8u|TG z+h>4dKne;tzaLO-sGz2+Np#amXY?siQG$E!J4)C{jb(K*pdRGLPDa)&Y99yFbkc<) zbnxO>hIb*ekRezkPwf!DABtwyk+}$be z6iTt;5L^l^P_#(#7E5p`PH>7_p~c-D0u*<53m)9v{muQH^{(?1&X@BoSxHusxkmQP zHG9VGuf>-RBUm^6msW|~64ZrJ-OZU3C-k;$2tsPF^O-&K8-1>0c3yfU15mJqC8DB5 z#$sQZ>E$0PZ-f_(!RE>~b8Xf9Cix|%XTx)MAjV~>a+}6w(OLq|Zzi;`x8cthygRqd zI3*4iswt93#GqJ-bv8E{^CB-|b4UEApMX%QXE3lu;yW`k)irJA!y2|IWYdqIrx6xx{3;{tm~R z^ZaY^&lzG%k&E)+0sfB+{{oCJmV#^;(4N)j zC)>sKMjs12rhmU%fNGd$Jx(Osgdz44+DKws^=Ov}=WWCsekD2gyoTQ}G3+O;xn+CB zD#l%IS!CH~j#1G21~L0vU2Ai-1q679RBtpvZG5WkV|4&-7Gj9)$)g&dij*^>3GC$m zi;G>dIc2c5TA9Sndz7#mskCwm!$gD7x@`LVRpW0b_XLQ-Tto^uXr1&S$yubGUEzoN zIQVE`J(2$Y%t82{=;(~~InAWr`SkVUhI?6bdZC*YM; zin#V*JjTRM03s~aPFFt%Cl7t1FxN4SbLU{VBbccQIK;0nCiM>O_|=g(gh?%FEv^J1hTxHmeyl$pNl>T$2YDGls}|h~M~q_N#F!;QW@Z&Od0s{L8$k1s zBg4dUNNGz;_7CM9yj@LVLW5Hdg(SaLa)u-B;7~G}=mw+y3pJAVhKIh2NzOrkIxn4z zYDEu`DmFAF2l{uU;=Hub67S&{3na_aV}aKK2`qn$z$T%d5G3!#fv5ZU{*KvT$vk|$ zDH}=8N)Mgw6rBiqv{?5+Za2eH2=f_7a3y@acMns|C?jeR_e<2BKZn9%h??#!698>3 zG;PCx+5IUsZ<&pU5v@*M#`kZMW*9i<;z;@UH`f5CRhWEL>m5C~F?1_9-s;tRBPR{s zR;+N3{7q#d>U9e1ui8mC&DVQo4+amGzKa`bGX&$my1I!>XiAM$!yLP(IB?6OXG8PH zyG>{h8R)%@4coL-+WW4SqDy3NKU_scfNf|zqpF5O&kdE``b$CHoWQ2lBgQPttag97 zpITXfI6}-auK%|8mB@Th)y)DCk?wQL(I(2vs1Hjw&F5cdYn!ObWl6i9db^(KN~O{l-rK}QCLtH zeT-~0e2l_mWDqnV-=~K?3g>Bswogds)XaNNaE@IJJfc~Hy{%tjwYjcbW<}(D;wjD^ z_1m z=3&T>$HA-0uy;x7MaD-=Iimn*B0W(Xc{t?4oY_}W_g zx*}%&C<-Be{1Yvmt0LQf`>G#&>+$vcxs#TJ9fs0ZUc{IC<_?9z9QQJ6Gt^|Gd+tr7 zt?p6f9F$NT*5i_aob?cz)m&uOkq|Pa+h@edfu$<)GYnQ)BqP6_N8O_}`f+Xbo|uPd zWC$^w0$v1pW`vI~K(i_>37lc=qYTYImXps1`O^oI(hWxV%bLyRP3)%R_*a;!JQVxAv(h8MFLfmRx z7QSzf>maz}(?Q9;OMCj;F&oJ35z0P{?}HR;fih8|FH4JYr6u2`hJkp6K{+d!XS1U@ zA4^Td7F(2%QuQ|+-_!v6mMLzszK1PQ-kga;o86idtR%C*?~N+@m1NpMZNP>o$HoY; z?9_>i@7VY{Ji3bUw=NC|Au=<=%Q1cp_a4T}fIa$k>}sul;Bhiw$j)S(9yy{dbsYJY z5x~?`YVlf9PT{{b(tynifZFX$^s_^cz5U#a&&hbRnCqx{JA7CwnfsqIgO=JQekCbC zfwvl#-9%PW57>87n=Io(dm+)R+;wzBctrj1yexHX(AcF<_2C%xPH#(_{)E9}m=kRR zxi3GAVj}zR0r$sjyr!#m-Bi6EdWA1Z!2C8VyjaYg5w_}{nzDC~{Agddz8vjbVi8&O z4oyirF`7YJ%;0ys7=BlXdY6@WeW#aYEi(LyM!fU^#kD>DtIAoy0?+AK3SkH!{Gh6y zIV;YuB28^uVTebLP4jpqW>WVgjuZftnsII$ht|~^^?mK)17wu?k_85ZxO(r-%G$kz z9)Gk91e|R!!dd7{r*9|H5Qg#uFOJ5CNLCzSENQ9Yqxu%pn$~H?nrCTByvX1a~j@ zCfPO;BgnZa?{y&mN=BMukgfeTREEKPk6=uGyfaS9jyLp0JMk|!HH9D=(V&>cb2HwqK2DWs8OnV^Qk)+WZQCiaEie#CR)Wr_2hC>q z*Tb-~_(+>1l*FU^+Ex}oOC6<=F_P_ObO0eB_T^n&gYjb`5l60 znTxH*A>l_|^#@BBIz5xK$1S3m-|Zl--!vRCO(HzRd@@D%4#o;X;@iHSOU{?EGK(mt z-NRTX+oOdQV)Q)$G>CMS95Xwz-S<-bQgQiIkRq4Ew8~h((rgToUr{X{sl%~rWc~=> z&UIEImDWK;+FS8Gn3Zm~`=GK%5RnU5>|50)X6})Q(immJN}4*pG}7=O!pdnxN{V zllYCt%esX+04FU<1xcYi$n$LA?Fg*(p~tdqQN;iGDf6$enpqVrHT?YHLY}ru*ozTe zq}S+v+5eLHjN8|X(UGVvM44b8<#>vr{biJTuha~uy($n-bN|TLxI&g!z5okKzpZb0 zh)-t$oM~6~>}`qLEc(R>4}3$H_TWkPu(hz^=RYJ+Iw0iqaG}<+a)LAK92^^Pb%y?D z_t?BFywt}?_9e(@8=bM1XQxy(ufHeyrQGmeMoLT*i=g?r5;n#+N;dd)N(VLp(g+Gs zOO5ill=*<;O@@Tb7j-~p%euc_5+m=iQZIr6vIdyc;By5@UJ(f`LvA`sUo0jwJ2hH> zb7!`S13Uh1o(|GC3cJNY09jjUYa7uAA9U7q*k95hZ+wAhB1p3Dg?NB@U#Lm&8sXDp zUi>fY0Qv_hz7b!_FuXo|rVX{H-mEN=SlX*_{4JDA*n(=j1vQ@!y;MLftXVt|uyZ=a z!n3JQLUEIL3ez&(eTE?8(BL7s#mL1%JmY1}Q8CUO@eGltW8$aL(zrQgoG2oB(NcB^ zwKyI+GDOtRc6Z}XW1lA7Uug~c(uXj% zmfEp?`HV!0Y^v0Z`%q%j_1sr~AHfLYt%+ZXhVMPU<+?6r@xPhn9%;Hs$;C&x5ffY^RC2jf00bk#NMO36w6%U*sLH>?|iRvF((P8UT{ zDJly0zL3KzzXA5w-3Rd$vm;7_ht67S&f`Il7$SnXoc|}8u6B98pOkX#lafc3YE|?M zRS^RrYo3VGO8x^r4EPhEJ}jE6Qkj2}rQCZ0&fuqTlw(}5i*fLd!b@nA^!rIdiwKVk z`#b+Cc|32kL1nfFnKE^iUVrp9e^P;@SVqYKhIY-Yw<6N`Rrt*B2+*M}TV$CV$l5xS z9>hexl$olGVG`%|G=mK&dv$i+e+INNk7`iS*8DTpA16dIqHwof?`_z%`Fg1Dw5}+< zhHM1P57(BZvpyS~H$yQ8w3PF!#a?jV@3A<`!aijdZ7~pb{5I#m&;}flgo7c*?C1SI ze#*r3M7Hzp^k6~xy_@{H6CUKe!BNtxRl1R+mj%zmj8E0lp0ga!tU4Q%cb1E3_LXvD zXT~M0^!qt#16gWwdakp!S+3CZF$jT++7r^CmC=3JF>A=xX$$$_sKg&3BJCqu-q?6% zd+v`2aUwttH}&WJy^=Pfg0Vi#Hr#hTyqN>+ZArdNx{=i!XHT{i=d}aaqVk_gDYWvh z5GV`R?({7v^}ges^|#gNY_iaGL30dxz`v%q-NP;K#cpRf#r~N0k^LDN#{^5s#>8=Z zvx8VvrRM5f(cv8rsXcT(Gy}*!T}Im;{$u*tY6G-Q7Ton@Md8?wNs$2Xa`Y_Y5UV%aA4tFMXRSz*X%+zye2t z*gB~nAu?{Gufm%OeC=w6pae@1PmzoV1jvwdRQe(!`B8)MF-%hkNP?sS3{}GErTNAg ztrE@5=^NSldfI=ht#wwL$71GvA%O6O?Z=zM?qy>zlP*X2GMve8>pb8^<7f8@dorC? zDk|NJjm!J<@|4+-rfVZyDz@_|2#cpNgpe`8RIGVuDd?$*I}x8{c)c$QylSTUZ<|y@ zud_|=!|QB>j+n=H^mmfvR7p{M#n1;Sp1Yt4)DNVtYiv5aUrZtqou$OKM@&t(?|4io zWa8~{Sk2|Bc*2?ti)ol`BgviRO}cG9z1SJWD`oULQ+n-aeaxU^!=c?pCg8CFeo(9n z2W*AEbMF3m;f=#Z%9ycmJ#U8LDjWfExca@-n>^DsF{Nt}%gfSu<#XW_%x@B%f~*9H zm!~ele~4qd`gP$FfKt&f;-w>Mj}D(1P9Lkak#hrbi?S!)nM*5mY)_FggskxKbk*;bAdVmm(`XXf) z*Mz`Xrx=+3Uq8BW;xN$*ipYgD2a3=`5ckc^KQaQkEPTtOOb`-oQoe3pX2j>YYQGrZsN!L%X#$C_e|in>*hkJ z;ybl6mm5rSuX2%DOzue9&pOkO9}l9jiGSX?Tx=*_$%;x)M!;0^a>V|2;#*d_)*PSE zomF3=Zz;;kIA;XB8E7Cm-n+Ij6rf}zhr{ryg+`#_q_z`rmun@K{W4lV(jI?gSV>tt+HnjN}o5%kU#FJrddDBW>Xsu~^V2bIm(? zF@2KJrHJ+*68TpO{wD#)LNk+Nlpvwl?&00>o}PlwL{w-RT;Do9U-+D7YJjfCFGH&m|7BK8Uq(>yybW1n)8Yuf9aEJ2PcKikFTHiz^{V|buR~X^S#wX`XRMKW zCdK$o3Oq$?tLR*_zux3$fL8+Hc`0glDv%t zYV=9i_QaCl>q5g#<1*hDBDeX;&(FV^CfP=qy&Cju(8~O$QRyvqDRNk31lHdSa`H@K zqMK)=lIz8sMFLu$g|4IXPDJe;bRMf}@zK*XK}t_`hb3&A+J5i4=i#n^Pu^5kD7-bt zfS!PJEnm}CD_5tF%h6WemVWa&&6wf*HcvC}Mqa_v%7I0Mke_sfDBr+-Smv_fk!9(~ zHL9X^=&ZK13jf-Sj3wK_jHCyen+OWT_=Iv4-)4Dx1^4}rYW@)y0^ zQWv|aRE#9RaG?=y5B}PjsWw6LKPJmeq{AIpYCcz}tOCxDk8`(d^fth_Yv_pJO!0h0)^ zq4arC?TSeNxa`G()*z#EWkw*CH!*F72@-wUVHONo!IFeWaa$WK0os*bM5k0`r38>p))WQcvqDz_~VK_RoF4$b0%PP zXY7x81UXlYcB#(79GAfn42IE8KZG|{) zDj2kx<#T;)9QZN%7o=IBTI;yU1|5jY1rEgO*jfQ=9;9&vt14C>@F}d^S7ygg8ZX~J z&NZA?+4~&gJ>Jl`FQ&U+*ZMxAL;b<7I=YerXaXPfot-0a=>T1QkyMrmtZLPi{67}q zBreeY)OU#8is(|4b25#D=LghCf{*oO%&2f}$ntzu*ZvNz9bXK-+|@+#yUOqa&aX;9 zd@orIAT~){U;oYg7|pcT{4rW{u34}ccD`BueMZTaT5txf9-{wEB?8xq7Wka{_oyNS ztvR<1-~&HDstG>mK`2gj$efPt8vuMgcqHTtG23F0^)zrXO+?UgUB;l!yQ$o;woeeW zWaEW@)ZnF-ro`OUTbNNYBq@igf7^@en|40`j#e6lM$&f~k5=5G+3gqtT54GO&1C?Z zE*OQFb}JY(+ohKq)%NL>8-d{LifY%xxkC6EaTzo$-q45vZ%-uL_9oUzVhFGa$YsQ5 zH+IcWkXv!3aZoDW3?&)c=942Kn74kv{9#b%0FI&(V`Vv%4aKWxkPU&tcF1h4-T<$0 zKhKG~1mV*0Pxh&1SSS2=Uq^|pySV(F3V6Oq0|9Ot8B}|;moIt_=$wk%*t*j+TzjcO zAAD{L|I?PrMK`F9oruY>&~Yuxq1!?WX)16hrx|o{Brj+;^p1+xF1{Xz$~y23x`FH_ z?CObuOSa6_%2q6#$Nq$RsnN8RM#PD^oH{HpFtx0>x>MiaFK~HpUC`&^YpSGeP5IXk!-A`=9d34pcIa+p zkX*011&K#NXn0`i(bhWG4Qvv0GjN`Mv)3wioNc~zJQG*$ww68W=KZQ5261ntS#0Wa zvo|tLoqt!Ot+ETv5zz$A)tw7EE-O(1>UzOL485?Gj~;L->#vwliT3=2#b zb7v)rKnPO)odXDY_g{DcIm(pac^|wL^Sdca7xkEOJ6Qk?>r_HMI`2Tw!ihn9MS?Po z9_oPt*N2vYZRek+ZRSONiGi2T{9fOw>d}xV#%lur+vjpU1 z$90}l?Fw({Vy9sVBD4ZrTD=lndV)VGNL@9hvhz(YZ@vEpc{o0;ZeF_w7(A@v zFSg*X{@}NJO!@q9#|9cHl(g&yyvo}?9URY{9orjB`yVi6)taMo|eZY_O;RhZ3y?&9;iR z3PTGha=0>>qphrIfup0J2MdMp?dm!|d%sx(M0umtKYwbseH5F|KTKWPKsf1sZsfk* z70FeIs@|WrT&&q123_uOS%1NvI(TYwc6&SOweQ=5B$LHP*dvu?pl%(r)*F$0v>rp?W=ekTiWTyUph$d2kt+t2)f^Uri!|Mr1IeT5l~-;*C36H zE9f94X-hL@HeL9+eirWSz{u!C2~S%I)H}UBe4uua1g9RluBLKK35^8+T(I(0qzut*0168 z%_Qci3U?8B008R)*Z9>WK{1jyUu)708tfZThkq|Ztu@Pi?;NP0P^(e6?=)@jTY(R2 z!xp^W%&cpodvH*`n{T~NhaBVDSNl|Y2GaQ6+b#mQo2!p6H2{@%k1cYUy4v?mPZB;Z zD zXvX(p-4&46&Cy2yL08~VsD9s`r(FJJT88gKd^+ISO22rm*G5+?|{5QZD{uX4i=ocD*vhsld=Wlj+T+Vj=N+Z zkBb%Y7N-mGmuh3^c*UGQJh!+!R7u>QA&R}i0AgM?mFZ1>4H8bLc+ICURQM^ z9DFrhsyg*uavL{??9Rw9-NL5#*}@+x9^XTwy~Y=AHq{KT$Kj6_D~LgIJsFy6`EJKP zuy~N9Z=WEo@b^-8>gs$dx1}Q%TVPk+!koB83htgHef1zQYouBdDwQBmY3xWN9E35S zu+BY8J{BPSb1$}Be|Bf2Ka$2aD(bVK0}O#m$TNs5LvjUDW?&ZTUa3-gua>rKJ`T&u zY?(iLa;$Z}g#!;8x1BJFOXzxHk@4s_T$=T$IBL`&COoU@gxkeh%hQk2-Lkj92Co}X z-M3U7=nzXS=pe6pZbIGO)%6-~`vY|=4BBKzi%H7(Dp4!f%-C>*tRCePhyktj%j7a{ z6;0ZYc_TD-kou!ICN)((QjnfIJVIfumjk zs|dU2l+VvsmLRBZ`w!%Y>xKdbS>STsM?o)mByM)hr4jL*$!KxNc8IJ{TvJzNEn>{W zGJ$i5AP$oob*(YwzJX}CHUBXl!%Ss?b64SzANS%*4Iu3j0%o_LM{O(C=dcBS#ifl< zY(PlkryFC{r+WgmGcZZV_%7XZdQ4lw1_GCo!`kpU!no&7HIv&(=kv{8__t#H^SxDE zh}WgELDNsj=S;pa{m>5vuZYj()z!QpKP_OD*KLJMhJ4dO*x?s6q*mnr^bDmbZX-6c ze>|-^5FM|83$Z%{QXug($|VaNsEQNxU8GL+yZvF%a2o`IqsQaM+wft`TlpoQi?>Uz zufbZR4)SIh@s|*kRz*n>Q-=*h8}4H=aHs3iiN~_wiRAZ)xs$4owPgB-VUu&qQ-8;# zD5j=>&buQu63y;Qxp26vNnTmT-l!Ahds1~LB!{3)oH+gY?}y$used)^SE}ZIqzc<5 zuC%(Snk}2Ia|4`2_J0RTc&RxpgT@xc_D_ZPG9E}!@ncDkEf6!=q8IZO@$X8FdRg@e=m)4m^cxVT?rJ(luJi7gQMC;L;{Wh^>=Hk4r3sF_iQxkP4z3SD zM_1N!A6!xd;1H3^`0-!VJ^YYgLhWjC?R^T5Jw{W3ubf87@h?o=p7}IBlbll=FP+J& zUsKX#zv0C2c)WkTza&4JDNe9fd(9ivEVp)u5D=<$t?X66qcd~1RE3lu z{)V=q3+6Y1NqxPYl&7}6G&lU}t5 zqgQ2W6@Yg~HN^-0@j2Cm>cq&T{}!b5-6Ooy-tu%Q<#AOB$tCgK#E=XYUR{pEx{=qz zInzzYWO;F(SiQBUJBSb9v5ncTLB*LKv` z74)e8P}lH$@w!j!Bj(*ysc8IQv*f(_n$M5BvwA^D^?1+yb(6*&`VCl``eE>QxuNwV zKDCm)PLWMZB^XK=5Y~<0egrkeCVThE3w~>GSs|A(u9}4440?rV-weRfp`Om}bBScz z^{1tS=V??FDf?%aPs(`+#+yHpMid?VhpmOM#s z)}*rd;rXMw02b~;?RY_}Bj;~!6?;@Gn+=k?J{Njej=&P|IpYzyR1M)m^mfY-&eTS@ z^49PZ2oH1-lqq@FXt8waAx_9LJa-BS=if1qHLr#9tQU*on5Nt!;PWFSEQh7-d7tEu z8y(iYoxV~x^1JLglvY+Y5O(VWXQ!I1;p~>%Q#s_Dg0F;LKtl22G z==|2GLOlC=F56`2)_Lw!D&JoNec)42ID8I4NL^;l)Ezn;zuHU1`FO(3ZK)2F`ZIpE$)jd+okjV(63y&juR26T_8b~87^M4_k zl`@o<@8f=IkpMRsYw_=Zr3C(yK0lNdp}E;@^bH)j&mJ72>8l*_z~l07E~DmY2#r^Z zPktIc=kB~2sno4^o2K4`n?GYHJ;3$;D2NT%yMrv~_~323{TU|)P{)1k^cI`9)V}a~(`bi+W5`hSw`SnRk)F={qD|oGfn{#{ znY_UncnR2lxMmh={Icj0wiZX;&KHNM9PK44eTqv*$b>Gue8y6#Y~CXsif()^y7Y5e z47j5Ru2Gk(u9Fzsq6X=UqkSy;_x;$P1+Ww*`O6s z!y0<6)@#0W(Ujh<(n}&}$(&g4b+w)D&VLI;Or@qQj=iO@%I%M={hTUP2u-7qAlPGv zyCssY+NcMQoe^S)>!D66z(-$ya;qM!x%&?C9gbCg!y)ymW-@So`}rDxc%qVoDByzy z`7A|nK9XM22u0{|n;uI9TNQ;kM!9 zrozIGK*aG&cdF)F!xAi*Lr1{W!(Adi%A%?)VA<&Xpe?Dpy`J^u4^_y&e_+9%4z;7{ zVrw_YOSjZD>^hk6p*XWLajom5<<#$+O$Lca1>A17jA}1I23XTNUAu{^x5p{j4qlA^xd&nQ zW!1Ij=^J3v64^+GSrl#{(Bxa|=RbV2f_96Et1hrzhK<1gDKDJ)6^h(>=9B|K-@$z| zW74e* z#Jum$NJkuW#h#bL9l~Ic<0a5cO7$FcCh?|~D?@07R=8&LJ;1XnY7*eC=9RNFjd!j8 zT31P7xax$kesSm144OXZEl#V-&hFF?#cSB+)G_*^Ofe=2udE7HRPk$}rvcLO2&j3j z;{`qlF2X8T?Jn(}!$5wUqs7!Od#?~0vLd;L!h~bn=Uf{k4$QkVo4zQa_F-0^jcLKX z)U}$<@^V4noli@xmgA)MLVNFDW7jU>^|HEFuiM3*@PzVW>nZ^Oyc!XH*2PH)s-xw= z$Hi3=hxMQOQenY?(Y@%$OL*_88!Txhfof@s=8p}PkhjDNZ1Mi`LHqna3TjJ#_L{p7 zOTiwb;I&#AS?O@$$6mJ2e^YcyL!&9or*|u>T)kAGCkY?}l*OU7rTB#+tUcOz|4gyd z=2#BipYj_8f%paU4AB()lW2I1bqK3SMuFgx3I(;eCn1fBHf~ zT>R{JvV}igHmyvZD8{Q^o{Ilwhp{bQu`Tg}dmO=0iE}y~7ySj4UC9fkGZlwzPLB0@r%aNEp z-rj!DgXiNOy=-4f^^cL;)jPlc^01of%*TM)+e6E8bA_dUu7^k2=(Kf~nN3dDjr^D! z&YQu*ma653e>PAdvNbf(LKtZh^_Aruu$tF{2m_RV0sy65GN0Z0a4n)T1Cce>Xew*u zL$t*zQzqcb!}UIFT;q})!yi7KUf3znVQ1uzizomchD#ybp%9a42Cw(jmn*6jB3~+L zczJ5Ka{CpHKra!{$up{(8)zVy(>u_Pf1*^2i#94`+{!Fo+dB>Vda$*s5qOcbE~J3f z)`r5u_V;LgXf(*){9&9M-OTtoj~?cP(9t&XU$U`BSZ+PObB9Sxq_@>T8FYyc zFN;cF;2#HdXhNKC?NY^^3ue#XY*hNJkomy`mtG!HkIo{NZo27ydMxRH?+l-L{h46| ziX2#it@p=*m*$yu|LoUH14Hp^MIy)xbvJh^CCaqPE`F}VIs*kki!P;fGqGa|`pr&l z>EbQD@7GJi$ltd+vIBJADl{6#oo_LrAK$%1Ss(UgJv>~!=@D_>sUMW8SOdd#&4(&u z+vjR>8sf4aujSj*Jj?be-Q3oluHoBlx?1SwK0>Fkcvayb_!KCh6iT-0*C|N*v!h^4 z&+PN4ERn3F*UdXIj|;6uw48e`%d5(-i2qzBqp1Nvc+{``_uxq-;ACa?nCWfxx;=XU z<(OEyp)Hsf`nKBTXmKl=Dry}mpsoO2HiJ)qfH?2AUFw%QyufRoOpZvxekW<5wYHUz zXe!%lWc0-WcpN|Ry?q3|avEo1AnKH9YIopDV_bb;$T`5FIT|pa+gZCHv~7B})mfXd zNcb^UWv&>rm>)r2`iuD2*81|jGsJdRl?o8h9gn^M{n8EG?fdQ)XVW#@Q_q3yxoCXT ztLBxzz8y%t&{h3%f+}bRjlKGTJmxLzvS%VnQbR_GVYn9d3k(P`Jl8Wdf&le62yQI!JdcFR9|y(*ay;N_FqK1}kl^xFSQsql&~$mI1!@R~of!PVZYfu`+AUqYwAyj1Fx z6{Cnz_#$36zZT-2TdeI0-4)vnI{^SkWcFZ%{P5udz0#485K-brtvQE>a-xU_1G@ zro~XNS*wtbD6s@_$?AjPlRSp+YyTM)P7AV6@5Q!`vCzcdP@Hdk3}kZIPKdas)bdq3m%q)6+q$`yoM& z{VP1P|Mp+q&DI8}2p0GTp-{19qlNNu9GeZdn{d)AoNo#q=Hxg9Uja@v6%exg{Csr|?SV0+ zKL1?O`4sihB(N)gP_Ub!g?s<~C4&E`gb~F?gIHOw6i322M;xH=l7C4B10~?D56{!b zC~s#=YG^0B{T5M_&g;#y*v%OSVu7z(0%}(%H3mQhAYwKjXyyGP-$N^j_(wH#szf<5 zCdv^P(JkR!^57SPjF{qVS`*WhN0MKp5Z^Q+?~pRwIBm*|TbC^6wKa{uY4JnyEcO!I z80)xfNys|45cPNwT2)0!nJRS* zPFoUCQigY>eR%h&8C+^^D3UUOa9&68>E`wfLa0EHS5RQ;;&Rp3Bpsb8MSy;{D{;14 z9FA#0P73Fb(BBO3)=Au_wSR}T`DdA6FxOg8DH2u9zdX8i*FQ>Ywchd76^==L=aU}N z$I&FN;+b^s_Cw*E3c9hja8IQ_yXREcMdLX+meF?-x8M_*;^*Vx<*hzhrVru{qrhNV zUL+P21VkT|y&Kr(%d^MDNC-z<{ZgflV}k{WVp0Z^ z4h)WmD&)#*c;krAu^O7^xH=;o)nt96U>|9h@8mLhjdf)SLrtOSKTNl4l7&IUjK_+)f^N#v*46oRHF!{2}J9PYgLT)ieH z7DF0?km^N})2)Y>Rs$CJEnpb}DKS28zrbYzG1cSkjqk z#Al1U<9+9DM^o&P2CS;?p(K5}6F9RaI8qqT?vFbkdyFlf85sH4-B>tnEJDzzM6ehd z2U>n}_E8aA_G=pqT;KZUpB3&r`@!B(PrdESTQWIcw^8k{f6gCLtZ*I2zL4()iq)<|7Z=VptG?(=Lc@xVFs1Q zq)PVlPm{;$YGJ%h{r<9wzUQ$QPIY-wEF*Q7C$1HFj7mq$zFbWnHQt7>8Lp|mcWqVl zzOO5^{j+jl~pf^W))c(MAILN@!z*byHw& zQ5Y*&m!i`ZC!8B4Vp8@Bw0zH+KUNS@d6Enyxcgv!jJo26&R6TqkTe*V^gC#u0lNy8 zsr`xU#kNC5R&O7+!IKH1rW6q*3FGUZ;t)frg53w>E2?KaweO7Dte>pA_ zPg_I_QiU{>39my|&W@HtF}D*y)ul@t=? zejOaxynFwCRoMOi`6mp^BR#lyIE;dQl`QJ36TOO4*U|60_&%TySDj&UF7)Zb%|6T0 zfvno&TG)FLq4+KGHH}1-S8JvfRpYlyUHnF2Y4zy|jB?c&tMZVDX38El)phj-cHdb3_)($B!b*UV9SXB_wsRvx?d^?aCmHa)^?}|>j+CO)|;@OvmH8&VQlW_9)@Qd8OzKt%ucSP)Vt&kS1cGZftDu@`*o% z*M?QOO7(Q;91^zp(u{JA#;W9psi`Wa+AdeJIArvo_R1+#&4JM#*~i}0p50I)Yhag7 zY`UD!fw^Tdyx&Mq9Ny&Q&WF@Rep1TkOC+;!Jg2nbB3K{o=pqP71MyJ0PFUr7JWh@7 z5`m>KaJ{`fco58GkY?iIiu_)L&OmFj+DLLp%hy;)Iufu&9|Y7&nh>pQxgR=j-p5?6 zT53Q+DR1s27P<4aNSov9lI>GDYVETNCp}qn zF|ew%7>Vx>j`jY2qxZdezZyM3P&g??Mb&U%4x`eR6G__*>oVBU`Tf7QY#JuH*XUnu zJAIlbykLaPv?6GK-oN3hX93RzApRnjBV@XJ3Yd-Prf`CEXGJK~sm8p#yr^w`2%118 zL}tLdVX(2c5BI!165qdqVXZj`^0Y)kn6HjDR zbXQ^u#_U3^)z6dpC$!|^frQ@(aY(6eRrglN5XZ-!*}ac>a!8c7cD|eWc6Fjg7S~JR z@CK}X)!t7E2ek8;CZddvjyC#6Z3LDhFrvvoCu{juhK7^@uJna@A#C9gUK<*MR1r4a zFS8P1<|WM3+CAB2*-^Tfcf>bQEGU5T`i_H}th^Q^z9uBS{f{Y`d(G=tl_CD-j7vYA z{Nd>lj%l>m3yIP;*45RO_XZ9Vd{Q(y8;Yc*4<7mqE3uiRXmmzs20d7s5gDa4_Kf%o zu*?+YAk&Yq#QBSo(&wJM$_U~iIlQosnO6SB%pc}|UkvB9JRt!-N0|jppuvS4l9ij8 znW?Cw!%BiBGDPKNLS+zg{e-lS8CIn1-&!+>jEalb;x!iO9P;6VtHJ5t4p=%xs=oTt z3{JgHL?Z<;tM?~&{{h5Fk(YbKRn4ykUpi>~K7Yo=#3RH=C1KaGefd3?wE_2n*+xB`#N#jY)36`>MDTPC`KVw&RK^g@sgT z^Ndm=C*g9!+Bs{!RiqrbVOAe@lapUd#p?X-gN?xQT%VMIbk>$Q3N`TpYdzTre%F*f zYLj6|TAJZIG&@wK#8|1uW(?l~on&2gLk*;28Te+hwV>S>pR=Q^ImGM)(;5SPY{)6t zXH8b={)}Qvl;&S5MtU`PRB1k9n7>x5=^c2ez95~5_I!u12C z6F+2pH&7=xCU2vbvPapaWRLI69sZw56j=vi!S zNfD9;|06e6c#W1Ye2U^gW#`2gFzaeMl&)}HU#+KWI&DD@R}TJHBGW!je{MDjU6gO9 zo$X2_7Wp&SLON?xzbrf-MvXxO7dR4zFFiFLdZH6$JipVVgu~z(fPnoi8!`G@6FLK# z+m7$-M8D45@(`OyudA9Q_Du8OTW1h6Rq-0{Gi#j}*gsSLwfW@{F4Fw5fC`b95G9hD zq9>Sv(`*!N4_D#Sr%z>Kn;0lv>AjfAKYql<{>Hlgqf{q(PmOl6#Pah(5gvFRZxEQ! zy~S>_p0?*1zOaAMPm8Fh#6OiS6qaUo%YB}RIH(bqlm9q516Asg3Im5BB0BP`%q`5K zHhuba)nazV7uPu{4>!ZOYAi$rtU8bP^h0TZw_|_QHRh3;`< zDJ)*;i?&{PsjV#uTMz~u8Y5bc_x+Sh7YjYg;ZVi6ihi$=??1qSnlfM#VT)CmGkp&3 zi5x13rbX6R zdh-S_R+UvnV2kMFPya5Af`H(iQbl=ru$&WKaMEXQlI)3(91A-MNIt}zR#h?UOxk<^ zjh;GTMh=xw}4f`j#p z!j^xL+5h3`D;T2cx^Q7;7#fCd7&-)`M7kMLN(t$dmKLRFsG%DX=@O9^B%~We${?g$ zrE}s^&g7q4j?m8phCr6>nOM5rq*DTaB@P#FCc((#91Lk z2?B7c2#O*1>s6*Y2T#@CFgx1^9OQ=eU#lqbQbB4N8WQg{lzjZ}yP4%sHosx4ebrX( z?uIgducCtx$#k6O5aZDFE?}A7ywtZ$@9pQky1dQ+ub<#YjC13dl!htQsEtIct=RtA z3u0vDEKN_3CY4BDyx63pnIj9>fk%aSkTif8R-7KJgIwhy3#zuAx z*~L7(UlDID$}F;0K#qlkHH6B#`N zUu}e$7phpkpf?f>P*2t?S;zWVkK$jnUGi%62E0L!t|P^!xX5RIY1*DnmW zRTATWS{Dx?$JFvr;+m+EbjWDJ95@5a+etD{UNU6f(B?%7}iE2$eEraEspHP1;p+g&*>kg%t zIQUym>4h^Ol0~DgA!HA~TuaZc_n~OY904Ar@`|76>|EJdgzfjXn&+Mz7HJAdMKeN} zx4XhxLh@kyamZI>x{5g+X)^eUB)oM5sqeup=0aug_*-pTTbp1so0|;qOc2OJUtlid zNaYDF#cCu)r&3yHfU5SKbH10YG^eJ3sApvIYB_Lz8j`$hD}U}3pc(&X)2(>X~cM-P388uG?<9Y_Dgclxkr1?oB1DqsF z?3YgY-dV#W+c#A_WoQ_A5>Ld2D^3TzG9eUpO~38RE;uqH!85+b;3^DH16w?{-gQ}I zEZh5_kRM9CD_i?&ew)C~z*<&vS=qszXUTs-dd zv-drE@$NXqc{=6kn(G@IHtz0z3r{s>Bw)g|NWACPufO0#YRB#rY0e;=ISOg3&aXk- zxal#fFYk{;jBJw3%&%DR9z1o&>EGDMVRWjxw^52xl4h;{%JMj(C4}F?lU+cPS*jgd zR8;ium^Mg}A8+sCqD8XrU1_)HB~bvW%pVVynHH-9`vhQjeH_LXAF2I4Yvm)G9a}H6 z7@!_vnv($rCmIboc&BG%T#Rc0o1GC@x!R8`^z(D*^Fg`wl zU0pfc`zat4cbR>mfn+W2MokCyd(DKg0fIYDPz+h@eVt|z^j;=k$eZtzlXZL79P`02 zVb9lO^Ob~zaq8%#@NUNF>f5+mY7o5^kCeeb%BIDy{pDIZ$uJI8ZJ`#JZ-H+ zuDZ5Pq)~CtcLh>U2XsycIx-4Cn3|ee)49bErDnF~L01V`0FmLud@Ds4cbFYbCV3P(wSH4lF|Q=%@-d6^)WM*{e;_bWeZ9zAg(D z&os;S04iWY(|h0Oy#V!6gNDY&DrsH(2v22C53|4kxZ!)f+t1U& zweAm7K&;8}sgXuM089eVd+ZmzYiRMeLK}ZKHQ4&`+1PQPU3mpR$Ku3!qvt9{%fe#j zpGm&Q43r5hvG3E$Tp2}Wy&4pFD)Vv^tJyum4&-BWQxgv7ugCqRBXmcUAH~gip=FL2+4J z;iVc-DO`pA_BOVJP;NLVR888txOgwjYQo+8Am>Mb=w*XWQof!9j?0$l@=%S`=^An( zRth#yoVL?dCgW7J3E`?13H5qYMupaIz)Y1B16*N!ef`Tw@s&Lk@KoD7YHEW8`tOrd zj0t{SsG3Aa>go-PhZ37KhVg!e?&m!yYO70FilyK^kc21}co&p65Q(%fei}2iPC5Da zQ9f-Pnra}_z!z3m*X~g-!_|ml( z$I}+nMc7g@jDBcZIdGO0(R68^fj5%QTb^QlV^r7B{nz&aUctDi)Ijkt1*{$6?J`7= zq4~=0g)kB(Sf?cG`XGIH;`00PHn#a?|Lg%OctDEJOlw)p2N((0cz$zT05?#5HGZ{?M1t4>v_?Zz=x~ivO`{2Da63n z7?l*=c~Qw3^a`jI4}Ebe+mpYP@Ob(jZ zIC1}&nXwx40qVr~7PY92R3Q`WjgXQu6=%!*Z{2@$fe%34qL%Y=-{eKf36k)#Ft5cV zENf8HRdrKSvp2|{K*Y8#?7>(!$xA!Bb|#RoMcX zj_}^!)c~-cABTv_j42+pysD}yXWK1cPZjfNeO^_&a9VLjzF0R-kU;>8UBu8|_4dmi*3I$vrs2pi8_JO|qoQ zI9;OTq8Z))JF1`enzl>8oum_HW0pk4_ehMz%0D=91fu%)geH1&_DOf{?eg++t7w)2 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
    yn#Q)d742rR21@PT zK~0{PTeC^dBHBEh6ii-~V~G%uFkbn(EM@iTrm}ikJlJ2{-R@j&i0@5Jqt?DJCj#J( zT18B{*?&&imH{Si3$C|-7cf}04aSFk{PotE9MX z$UYlgxY^*YD>j9_8Wnk}2^4k+cJeWTfy;-a;Es zes^rVvrt>_z1fP@N+;v4byY$`Rgu?I;t$$0XLl2MwWi%{^(5g|HZt3v2`#kah;QzY zWQ@IJjyBq!ylsqe^NJed_-23ENnq{NW_hrR1HdD|3eiE@ZHR)&t3p~w7 zA0Nu)ec_9_3$3N4IgeJ4tj8Kjf9Bkwog?Asa~9Lo`wz27Tl;n7tE zk~kL-5iDu5k=GXAQg4nqlicbJujDo{+VN31s_<>hk7~Z=mK*^Eqk8R>1kdz%wgLdu zZ*`Ln!dQG|{}tqhttH%Dk4j3B zGiD++@&b6dZa8&@RUBTi$6PD;j)LCROHa7BgL;$L$_@4^kkU=p)rMG#jzFZTn4Y!9 z(%shnC@llgNKsl*cJfl3>)^&rS7)=1J`8ROlb|6j)UC>+*0g7cvsvTXcEQ2@=Jdek z#Wc^vM-aUW9Zo1DSk%Ch#;l>{Qrkn_{z7e%^KF%edHK=!4Ur%{lN@G42}2sk(Y3R{ zlF%i=%*oC=Rv*Wi9qV0B_n&Q}uX{;xf=L(h;ywq#3jHmI2^rq7a6^(mY8FETxCrih zSEL}qED!syLb&NZnO?!4tW8YIBLL!9`P8VIysG~L*h5QLWRbfW32c#~kz>f0pD4Ag zVBlU#iw(cuJ6Z>eI`Wf zLdnWvH^UK8f0W;*EOgx-qJ|uNgkLKacEw50qBOiH337fbkqxM#WgKCFPbPPTSR5+9 zQbp?}vIk68{^BEK5O6(DROe^FiP{q75ae!-Zn(fZQ(c@SiS>rsIkaj_)R)R)l20+0 z_=%)#pQ{Sdl3Ztc(g_FsDSqR@?;Q#eI!@(l-SGenL^~7z>~x0ribnxCL)p!ghQKJ$ z8XhiAYFnSjsEsVeM^Jg`8)RK<9+pP-HI}47cY#D&tZQ`2R&vj1bVtDFbV zUf0v2SCw>VvbMk_DOl`SH&Hlx#&6qex2N;hDgFmh9(rUIu`U&wcQDgmyArm5-KDQAIWFV!w|T0d9G6%r`v1)bj@!L5P25xk?FHBg#lK-R($Qt3vXn{U;DY zrl&3*DZhRs*QG&UZvq{w-e)gbE}kNKSP8d^#iY z!q0e^7)+g`dDkN1bytx8sO|LB5s8sq^_o{bL8A=?feAG)wgUO)_9T%3GeXPG0!E^D z1r{CxIb#@0TQ{-fSw;TJt%%}nXK+}+luRP5ij~XAb52DV zH*aNjb{x}5D!T6!AB8aEsn#q3u%Llal0Ts=-XgZ1Pr)I;9Mh{$>s;Uur$>*_f5m0h zAQXA{Q4N2$JivMJr>+s3W8(s2(#TD}a@~m9-0(gJ_#l&8tag+r<2H&8PSF(B!6j;U zis;2}kAAKy#y#)D=m0nK)G22?g`25tq^XPvLa;n`NUaFHVXo@4KS2~u3Jc)L%@G|e z=lK)S9CGSMIFq+-q>J!63{Hbi(V#|ZTFjL^T7}-q3)T_6%PqO+R5+vmJDIp+{3rVx zWcQ%<613n|5_wsAan0Z0O+9NBE`yI!u4_hOU}Irs<<2O4Yd>T7(BSEontx&9)D!|6YrHF6RA zC4I%T^}1i2=upK+x)d9U_pkM3>I~mY?SsIfZWe`H&?t8f);+=^usOY*SkAUL&uVZ?c|0c@0R-Mpj^DGP-ZB?8+q zSB3e&;1tgNz=agTqcRMfPK}IuJm|n_Uis|dk^a>BWyPSMTjLRLF%<@pd7S?T11AfY zH1BSu8+tRxEoaOHq;#<;2n75m=)L*E;4pVXDOCWMHKe0=oV77Kb5fU$E0%%1%iqA| ziN62HyS|O^y2g1b14dtbeCq0Y)+t)XsVvsOAedxyo|uwg>hp#JEgDmZsrTTcP}0f~ z&7}CRk7pA2OqL-Ax3+b@A%{yo#<$ALF+D2T6&G{qq~sFaX|3lf0;0PpnEhQbT#`Tg z57#A+8`1h3ltyp5ZOoRF*<_AwBTky)I|k)TUF?U%cZ&&?cEF9*A{6AO=4E#V(4vc- z{;#=+=~-T4!Za|v}a?|LdO2KFP$iybf{IGRLC$j-xjw0d9H9XSP?71#SVtTlxI{%QUDXrg`$ zTm-v7;+dP9glu;=F~m6q|Zu#Tg}*=9}= zTcWDzSKOXqgSzfL({@goi>oUhm;@AB4W7!b%T@dBdYo5H#s`_!+hcW2+h9SH9A^%U zsNbZsT>J?UBc%+vYa_GHiuef4Zu8oe+cy1+~{kBwVjwc>4w90#RqyC4!d+6<*fXi&cQk9BF;$V?;uORTf0$r(4IR zDgQQWe1HCgA&R<&(c2;nj+?Z+ag10FaW2o99o6QDGM*S&nHm{Aq>nMJazL{F3`JZa z>YtcGe6^GWW{EPPta$pAs}1gwwZ4EHQQh6z3>4)PWmd^6= z3@(6vln#@TWoPgopal*@woko5em9yRmo2{~R%m)5%vI88Y4uf~*+bCt#YDf7$E@f{ zU_op&bOGRH@4MixVNQ5JH>ME#JF-pU>8cNcOo^qC)f`JP&^2N|yuMw0gSf4Klh zhopS%oQ)FV8=}ZFV=LZEzb>RU)dCZ$D-!rZ^-~ARZZYuqz2^8uonD!g?JR+yN8J(C z8pt>OB6BCwUq3Ql&om4X^pY6c$M}+@b#V()Pn*byJBEkdkRWO7tsa|o#Qbsj+ zoyNmAy1Xy1xHz+^GEI5Wr1yhd9YU37a`m(Qh-BFw?6%&n-m9KR9>Rj=^C(oj+HM;! z%=ilCaO>;-)^?O$J-HXG*U!b-$aK4sVd}|y(Pzur+YyYy(F@M_=)L?)+4xDp(u^ih zsr<3d$KE*R#r}T8L!g7Jfl1Jzugz61LR!snRil>ZQw;I1>}HHYnis3T+00PUzy6X) zERVHmfT6~!G8&BmW6KOK>IZzk?ff2M4f|f|D%zi67JW!|+k} zr-A`@@dpUuXw7wPmoO%o;5Ru}M;yNawCP?hv~`~!Vi1v>s;A#?1EexJ3{FA4l<*K> zyO~ykjIJDp>Q6fQgIYD7BPaxQyi!2xc$+Cc&Jwq&VVnr|mZ2?0*Y7eeLzceYC2h{J zxbT{)N=)vO2tnDtMrE7~5m0PJiUfs!6)sD9Dj`1i2l8ESOja5+*sN(bD6c0RXd5S^ zVe7eQlnD3NM+!aaLWXI@DlSaDfT1R3k|XCgScw1sarYhGZ2#fEMr)6tC2EAKRf^CW zwfAVv4%8N^!&b!Jt76rz5u;0MQ+toZ4yramtlAO8&dvAU-@SjtJ;%wBlS7iv`}2O@ z&-1*-gMLO&CEjQM#Ran*9j=tZk9^{I^7C&U-<=Jdx%^7!>SSMseM0r`ULEM+`H|%K z@6BxeAKL?<#m`WW6wBc*c)4&(O&Rgz^vd-+c~la}uSPvoTm=I+1&pnT&b7FCmWDi> z;gx3pyjXvHEK|17cf9&OpmAYmAYFe?)2Hyexoci=bNZ3WTU1ZSWc{KrfINt0;jeD) zPXqqVo{}3=F~lYd<6ZE9st;-aKA#eq$o$%WUijqcq25^)`tZMftU>oB+;>oi)mG!*SjexHs_PM@ zjr-3{y)6qJU+g&vQi-UMUNgdZTaJz4;n|xH z4Onw3QajOFP5gD#A1cp65Hw=CC28Zt94$2T^+OE2s`ZpOOz&?0I*vJvT+Q{nj!ZcB*g|IB~#`OnQtn2Xn zNX|yp&s=}++w-Ku$%*ZGw9f1oOXbzIx$7&tGv5#+ciotRFqIKdN$yGah@7|GqV8Mt zAI63A=md{0TPE_};hZ|;CpRmruM8DBz`VEBo6(? zR>R#g|6&fm)Blb}l1!g0Qfe98(@l|&(MKt{6{gG!{@3^80w+K9XT@jR{LAXu!dyp? z?4<*%g0q>I2-|+npN3wKRz~-91mWkpUgwi6oM*ppL}L)V@}Kt9Tv15Q>ucq4p=PzYxP}IA>>r?`~6EW{e z$`Ji%?RhxeTZ;zDCN7mk?jPqw% z{;S|41vulA3;|re#tWr(Y(wna{oQB2XYjvO0cOw>8TG447tOVmw3Nn$^VxZ1nfvfk z0PX%qpS(|JnVj&fGVxXlvs3l>lL%trV@UTj*HW=RZ)Ep3UeQ+mJl{QGXPutvm5h$l z2#xo@y_!}c5UX|yj}0ROA0Tp~q)V8IL$Y#jrI%uzPYYyjd7JBPRrjZ&BYAg31Dwj3 z$Zu8LS~f|8`6cmRd0*W+YZ3UHlNYMG5tW9DC2p+lkD&Qi(j^D^j)T>J7FdCwkJ^m% zTNiuV{b>62+c~*vL=2#LUF(mO_x-T{LSToWqWtzB!Y*yyo8e2nnALOT^5SBVt4k5C zowk33>s~d^4?#h7Je`&Xgeeremn;THU?UboHDMlYz8Eb&ve&`?`c`LRylVr@e^gtM z!;lF%UAcQfyKU_7i*^Y@Z4HeFW=w1~S{oU~PB?3~TVLi%-QZg6->NwY8#6zXRDW}J zNaPp55B?E2^CwfAydT+)Mc!gc0J}j%1lBR?uAw*q;Ly zD-hQJ$C`L6Ciygo6aEO(-tK_wfTLvlVkL>u=pb8wLRyIs&hDq>e3&cN+D*)*>>9hC#GT^RJ5>8Dj#Yb8sy{qFzcS6<|-zy1|r#|4(CRIEAT(r zVpC=*?7nCa7lU&gYU=LSxje}~+hqCsH+{Rxqb_TIt`aQL{?{8ZRLY=xCYWhOVs7hk zjA>KLgHtuLKDh4}@+7owUUDtHNYXVvYw??+=wXvt)%b{pb*C`E)RK)g7<1R_CclsC zZUkg#tujm`@Y_?7`Rc!t8JK)Tc$$ipxwarCNV5=fygB&S6-!f z8_z_Z&47FR>B}Sw+WQ~Z%LVX{<<}$UA53LwH#XlN3hX2;z94p6#?aCc)lS@0VE5-! z&bbe%{AA7Ctvm-`;(|3nAC*zF&JW}=#cDjVxXigWEI;<$`taiL<}hza>ajXpEquc) zWTBz|=mAcJ=cv+4JQc6GkLr#i{lt0R@|%wVRqY2v|M_6g^Dlzf_e@=-)l<}?a(WsY zW=+glmuo!lhmCffmICFgNbK04NCTFa_bT42%m%*P3gn563^_>=#PXRNQJZ%DgmVP3 zF(=Sm?~jh3JT?j%V`I>K=-$L%|k@q3*4?yW*syM-)m znr(}tnpmKY7vF=&_@a9Hdk=8?T)%P<3|!uEaX7%NDPq`VxV~ctn|naIH*Zs zWx-D|&tbd2Sh>^WCKz20Dw{8EcWgz2U7C)`{X8=)Jv9qK<9zWmw!%N1*zG&cmvb_o z@5RuH)fAUXF%I+%O7T&Q2X|Pw=;pG0f2v#>a8S5%_}fhI3vU(1M#3%r%tleLlv}#X z)4Pha@+$S8-4zDY6)x4+n6{dsm-uVXxUZSzI0esU$5o|GfsnuIsG1KjEv2*g-sY$g zajd@eKqY6#ys3pZrN$?ZfAb!aMR_XW&ilBK1$VgmVkN{-n$bqutHEu!m9HD|J^zVk z)ECtIhiN=dL|dk)Lht#S=>fhh!~S=cNCaeD&-7adb~RWRo`v;_o()}M?wo~uJv4pR zCh)gjW5{<*F@buO+1u5-`vHE0RoBO?YdQgKx-0*Afw4?6+Jaon;mNTt%WUbY?_iMi z+Vs1s;6Bt9jpMI(!PMcSb+KV*v|X3aM)a8f*>@Z%i8+5hwI5Ubs}%3h=Flj}`LX9$ z#$aUS!}&ZgY&=(ReceE9nFw8$2a#7O2vR7Wf03O^-W@;DKm4B7Bsvg`pl+!`Qn34#Z>mQ6(XUjU zgk$v>*Z;_C@dJM)xs0ef2R-+pu3~N#LZGDI>=cJ%3$W*RTWWp`7okfoK0T?p&$*EY zXH=*U;Qc4@h1|MM6BXYQ+RAuU-J*0huX;UC1nq=2i*Vu(7^V_Fef*vF?vE(-!Sz-RNmycM>kncLJBo}x$W36D}wbSlojc4;1qxJ`e!E#|GlPUFWBLAaot+oIBw-@HhHv7sZYyRC?4i&M& z%80R%83KDV@onPUJUqs#3Y9VrKJYLC9JBm-z`fe{w3l-yyidUYvUbMj z_V`gRiW^gjOm${rZT=r^)%^{CD|0|shPK_Ws__w~I*%Xdx;5f_OGZB!XqmW?_rc#& z&v>8IZZS0Vf$E*|>l^`n;k+T~^MH*~IlIo84gR&qgmFX#F{U8geVR-nxJD^=sH`m~ zfB7%o%#4b%k#Cp9n}{$!Ts>aCcQ2%U7PSGbY(hoTDjqDshX;>5C@+vBmY(}L+$g�@ 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 literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png b/assets/ideal-img/article-image-sql-join-inner-left-join-reversed.15f0975.640.png new file mode 100644 index 0000000000000000000000000000000000000000..1d5dff6e10cf9fa9e1471e5ee20199d9813eff74 GIT binary patch literal 81765 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 Yheu~_mfFhk0mSDeEw1phM$|Cyf0@dhDF6Tf literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-sql-join-inner-left-join-reversed.530ad23.1030.png b/assets/ideal-img/article-image-sql-join-inner-left-join-reversed.530ad23.1030.png deleted file mode 100644 index 6eea691e3865dfa4ce1589ce3bd0956cf90fa004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163763 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

    ITHFkQRN>>|nzLc~#(0@#q2g$3POmiJM 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%0DZlNE(nw{2}%bZ)* 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 z zK6biG&#OH_nb{xfv+!~?-`*UOE7w*;EN%ZAPeEEr~Bu|->-jLsL<{H zBz_1$1?fT2tB&svMy!Rqm-k7Hf7^Eb5Y*m?w9fmU2sokyJv2(4olN~+7kYJVmD^R_ zp23gNfE6}@Rd+7m2*S||bIE=#`OweHbvEpp8ZQkpNEa@i^uR9a>zC<}GV0L=ZOj4g zI)hgD)mAl~i2MFpx4E_}h(Pq3W@u*OO`=#njfCA>UJA4)*+ZF)o{V*~%R4V2ZcETv z^yfSY2Tx`+#8~c%(Ai-&3=_=YliUNl%KkxwK!T*StDeV5YcsI>pKdx95R_@0?4`!Fpo|l%NWs94ubN&|x zPI@I^LANc{O^9$Jm+nnFoTJ55u(+*zB)@0<5T5or>+DT~RDS0~SEN|@HKpT*DQoWI z8h+kUU(a6fqVb;b;B0PC!ZAi`zV3`%-TnpSrs<km#jn z4PyYkK&{l(h-49g8hD*-CwFKp+2nkK9Em+(&pWJ)f=vShX!Cq`ga<6i!5f&?UR3wT zOe$!kd^x?viQ>VNB@ZZXp$4&c4GqpH*a7HKap9*6a!K7zgwE!8j6wd$vbK1eSMeWf zK1v9krHcT>1}MI$SO4J_Mp_2IHz}C>YKDz|K9uOD^cr$=GQ=-*{>vByecgG#bI5f8 z+~*o=zBg6=$vs}sgFmd>|5~_tt((#wMN65Gu?B3ZM7K?>1p_%xvl@T(Ctsos3^Dt3 zG5h9Y1xCsEC==co27L(TI`7QAo%qVz-L6QhCD!>j)`X0|)7#J5jI?#~8UuN!FI;7U zb`&v48l3LtfRJZtBFdT;Tu6GRiIo@6dua?o^-r8QdfpVhz2J??=rT1*2462ErJ^8%T(ok{Gca_6Q_Y(^CrQLjF zOG!?}VJ`f`4CsN;;`h@nX}OEZ_hPLG;+Ixx;sA^)sP9I%Hx%qK=1Mx?d=L7Jyf@L* z+M?Jude;&RxiM2geWu5LEoqJ7e6IWZ4E4?0-7ADp z%8$2Vb=j%1BwARYU#H^J!LwoLvvY!YppLg7@5?3rup6|3zNt_z!W5%1;ERL*HSbp( zX81j&%27+-u(XtvVlE1x9VYP@sPg*$ZQf!{!6^AI~5t6GJ}OWw2;&vu?PWa1NniKOEkc z#7!y3;R+P+iAKnw{hCM$k)Kn6kUPmqzGKtZUnbf;n`Ky`&GI*Qmxf`k%%7XPLJ+Vw z=!i;(uZU1WNnHPsos){G%rr==i)UX56Eib?X#t6cHH*)H{VRzA<_&YuIJe8kZW6nj z#nitb3e@=1CM#lmp{uxv=Yk11JgFJzT-w>ehdK$z6u0%0y=jgvV zUcT1Q?g8eCXDkMYv)$p7K12%jUHEkkzx9uQ0T&h57QD%dS!llrDKH*`Lv3`o$0g8Z z9!Z{9SV0nn0^AqJoI-!^Ps`aRcKH3%LCQ8U^;GvPk2yp_OMOguzsX68`oCR_x_R3X z^s(F~H-+v|THx*%p z;q(kos`l0sZ{re!L7&jaYs)GL3L7dKOAsF+NbjF!r?8aRLznaG_2l;7)C#xk1Ne%R zj$vu_W*pFDqWE zMudj=1A-^<^7XXkr*mf3lIk>9%>JisMuISM}xOG zDm9wi609nPb|2frHgePE5myLx0C0Aoa+f^1!c{daey6}81A+dR2#{bIs(HK z-WFW&{!vxctsbVVTawo8UTIVxaOCF?$-K&0xzGQffroL{p$*^x>?LvJz*#2GVIeUJ zD10zFAwky42g~lB*&5a?8HQg>s^x^b;)vQi7VdiabDVd!IUfZyQ`6+%fCRA zx-zXkXeITZr(kL7sU_5ZEe$78oKfr1NI%9rDaHtg(A0F?^nyQl7`NnT< zI50!lm=mm$f8KRrNWUlUzmDaasviyQ$;TEVQLKfdLNox;BBhk<-C;1jTOQn?>dC%# zRHC{9svC`?63^gTlAgh6wTwffhi4bMy><$~JI!c@pM%9oO6$xngZ=|Xm@k7AfV==k zybBv7r=$#jBLo|ahnAm^w~*tpQJ)UU=MiF6eYjgbRsBx!rhI3jOu}^KDt9ts&t>~R zvJ+2!7QGg3B26Qf9!eXg1ro)^Az=sXb1P#V1b#RD)@cAp~iA+Rcx zkY~Y3+CjZ&DuLLS+_*^78pufT&3{m5KT$}`;(&hkt_$&0>3{fh^C8WzT2QT1wLg+m zSi_#^6@B{^Jv)7h9N6(avhF=p-ZB#>*JzZ|w^ln@78}{+i7i3FsbKVa5Q}jRJnDS- z9~wx|J;CD9z!tDq+ga}9q}|M=Nd&TF0QD60L8O_iMtBHsw1dU9Cv<0cBN+P0A5OPy zx11M$9Kv9E;;wtG+wvSEMF#2ZJx{3-Z@04I_7DTE`|9bO*Y4$VA#UGf99LWct^uZ?4;z z|0H_Z%1`;B!FJFf4ZC-b2Y{%m)vs>u7qI%-!3{gC`<3EFle;+Osn>a3cN|r42d{2t zg{cKJ>H|bxUlPX7UiI}+{c*hy0`KKA1|%4JP^j7;1zXc^$60`ZYJWBd|8a3$|B9_F zlbs@E$A5VK62cbc;$2c!=JE!vj8@#oSKoY+=<&cpq}{(ej8De&UsVJ^Z6)x08UJ4n zyJ=o)QU%7LRlC_PN)Y5M3{tA5NP_YVYu^0qNZ6@eq4RI0T38EFd+>`F|6#D3%<2b< z|HH(F*B%Xy_Y!)Za(jkvzS?vv5D$Xk6~*>;d~iyV&^F#`d`o#PHTYOt_ro1c&dmi^ z!#?nG0)*{t+mvlEF_t=M-`ai{Vk=Ov2Z!$@=9QU;g-1pUR9k-jESp@rfBV}E_VDoH zKq&)L0XpWqUgFt>I%YJmXYyyKM*ind{#fMmIa+oCkiss+-rbjx`rQ}bJ<}g{B%)l! zm2PBfcX%b8?E(6$`A3u)nyqDcvJU}w*%sWhB=0CmKd0~ICn0|-N6VT`%|4iv{^vcq za+YmW-&t50Emm0qHzplS&n>pTZ!bepqZ?2BW#?vjh00^p$p#_tSJ*izabJHBTr{{~ zq6Mc{tPfW+?BUY<87xdsrsFZZuR*gkR13Ek=v%($lSQLID9ZYh@gv|(|4whM-XM=T zN`sugp$9g6YsYGnioB&^2x90qN?rO(!69gTV6b>(lIVes#XAwkcFR)@qzXrLUwbUR zUVLDnoP}Am#Z~~Y`|4^bSreZU>@xUgSOSK-KD;GX!zJr-6a1rLuJsXfXG&b-+S$(t z%)rQ~wfWB>oKUrHrf@g_SSbNyBxKyfH-F@cDMQfwsb~}h#&y2w7ln_^F{i%mzQn!( zc;|NQYBN<2PNvW0Yfjpp^Jw22L8~e@EY=Gvx@=--ReROowp)ox zPx1-ayoX4w#(s^asErBtdQE< z?$}#Qbtifjm$b@iO^M4u;SynkM<)j%-2$0%3u#Nw`jFxse~Y`&J_m{>P*|%p{0&v- zJ*TW8&|1Qq?wZ9G5?qO>H^p9B7S-(adT-Bg8GA%dL>2ci zM=4$TJO(oAyj*fMd3*TmxK~AOVX3HXFaHm?fUd8owUv(%P8+jiysg$(|0D-stBv*| zzb_tft$Gq;8n*@YnX8yN-}R+m<5SaCu<4UE?XAnB>D!;<(a?+^rxXR9%YhBr+VO90 zGZ>hk-BRBkXUz^}UsL5IbpmLf=DXlhz^rfOzs=0#IV(xO_m5Dcq{%*!fu6-F!_Vih z|0CO3XmN^fuzPtwo)P*kvl9`b@FgN!7+>p#?xbrwr4l`AL^#JOzk?q{c$J^%0!hWr z&)&5Dt8PPF{8MuA-hsHq4jKk%4T4YdrLzV*aLIJ`UmQCNCfh7>d)}k}@N>S}>7MeG zI0{*{U2IH-2!rP`T9jhUj%lpS>Q>x;w?xj~h)+|vW>8lXl}3~`vJsATc6%u}E8=_B zAFbYdzRX|Yc(->2w3(}I(6@Sel~!<7f7s-Kk{~-l^tX?VUa;&rtX+?tqsmc<^^oBeJf1n8^qtFhqLI$!LZJ6m%wUshL2pVfBG z;uZbp?W;qH>I?j5*XMnEH(x(dSN_DULkW?w zuUVlQ+0?Kby_0yw%6ZB%#-g<+^a^r}vV;v5y&^<J&tF77{Fxg3)!o9Y zFrYdMvnF9UFE-K)Dh7pWH7Sh9yfB>aIURU%@c}5We7T{{4L!7ejl=8mL1GZ-gA4M( zhc{cZc(aMQ;a|M=cS{%& zh%pX(o0neGHXG&;_*GlcCP7EQgIc3+r_d!p_B*Gn<$OlEKz#$-CKhg#26Gk%Rs8)u z{Bum_v1S2K&jiW{|7+J{U+j31`H=D;pj^2&>l}SAa+4<#pFE|;+pbYX3lJ-tMV@sw zLV|mf8Mrpg1;Wv%#I^4M@gDp?t=uOoYqEo@Y306I8Q< zh6kocWWplp=|B6cY4oZWj8vE~Y$jce3pBs<_!C;VpU&C+cL|gEnU~0VVB$%uE3a{n z0XC8&xXgGnQk$~er{Qz$##nLjnOFb?vy;6{AeY_|)tw9cl`@yGE77q*(v)t#)0u`e|dO8$` zNOb`x32%pL8w)#?$4U~Aer~v)c1TYFx(2&9yNH*fM8We%N(0sKq=5VQDe=mti_CVHgeul|)H0s>kl_4PX;3S8*|Mu{g zMP=~x5A&48mZDSjyl2spn~^JxW$ge0{8}(L`(JP+3^C7u&&bGlc5xx)q$LWpc~0aK z&F}9P?i0nM?^VDN_NnZjaH+m+0!#C}2NtpYUmPOCqG>-QOAL>3)mLPZ`X$>YFWE2P z5m1Mh{9G>M4_6(DfjH!9s%_MbZ21Lr31dq6W&gZ`&q3fU=@mEvEaPK>h?z!Buf&x` zU%1)1oa6`U5S)O%{(&v|Z9&s)C200Ep06W9FU_g2H$U@^`czWSn5VCgQChTkw(jn6 zbMZz90)ZxXdZtF#rNIkU1eDpID9Eba9|X7nq70A%3^l~wO9>477x)525RtmX8%PL4 zoErQs^@e0HJQ-Q)3|U%aDsfzs+&4iXYdH3Tw)b7P(@w5yaVA66-qo491=b`(WPYIbV#+LW0kig)1cek1#iz-hab#_q%57Ea=(c>ZwFU z@Xogn3^MS&q`rje_=s&thQK!`$Rq&F?#BDR=!YX`vUn>Y~== zCb5?PO+9<|#iINRN#L8cz2n2C5#VSE?dj^DR`k4|PGOij&UAS4U1PQ2atTZ%+4TXB zHSBmTa%+XE7vVti@CydAG`~eNPf)H~pnuc;?DA0-kF93C{dOl&ZA;)^-|6z{V7!zE z-#KLyXJuL>yX}m?0IOWK5{lk%8ScDc5!OE$N5@s5L>qD>92#8q&-tCP zuq1g4#N#QYU%x~IE)XHVc^LlJE&i)#ss|#yC9Jw#2uOh)9TjD`SyyJ+bZ3<#a#zou z^&C!!t9|wD#DHa8hnl&<4UOLsAyYnl>v%i0(qQAFQ+=>5rVw7t^Zwd~* zqLuXV8Sgj%)fqSAAg2i!05y@lmE1II^s!(>eOdl&ynzsU^J^vySc-GgAOQ>o4nSa(tMLlr5`5 zwI6G3Ob((lYebWBGe$qV|7gLPq_`OanB~%zX`dbe{ZuRKygySmWi=Lt#7g?Lke>Ud zD7H4wwjt;E7B_v(t!XpzO|umpf7~ZQGJ@LBeHno zAys}%F6FC*#V6M#(d6Dt@VutCW(msjeNZHrccD9Ucu#d>dPTNR2^wT!MD-9ZCmrK? zalH;h9?4YS$_t!uF}%qm?Q3c#yKwG!nUp0p{H5Zbe-p`1E47mce&_zfg>}{SC59zL zXRvrS3W8VoYkImB4&=g4@cw*oGtY) z9_VKx;UgD6o9tk(Hg5?j-pGn1QP4V(+!iO8+!NZrNqK9fhX2s@fT=Z}XCBF28n%56 zEfHKln%dcj3-kJNkrLU}EAioU*?y;5sE{yNqVWTaa&voYz6*s3cL)= za$KDGnE_jHys5Ca4Zi*h%s_V>E3uf?Ywb3^A3jp$-0p^W9ZN_{zRr(f%suNJpb5xV zg7$oZn+83R-`w3XJg1%O5zi%MWkcl)MP_EC4_S@u3z*M2g31x3qfr3Wy305DZ4t$rz*%rgZn*C zWNl@}o0Uy%M|B*o$WA4Je%3#rW6IPf#|jIEly}-<{lw?#-gDYaT98io zN%}f<#ZbZ9(&1S{#dGwVBP=3dwSO2@M#X^%7plP*INm?V#G-0KD?*lRQiuK1hMr%l8TkY zPgCl&6tQ@NzBXw_e!02fTms#+#*V_7p=W1D-P|PfPfUd}eX6P>%Cnm48OO1KK=A>M z|7?vb>3;p5mSUrect~R{^)&qpjG9UZrQdd2I|POurTV=`$T^B7faeTkUwi2 z^7cJy*!goh0udN6n3Zw$u3oDg@ZfYuzUlE6lpUXCd@evFl1p<;EsHiBrryQ$Wyu8d z4Xr!oN2BKWdKK6Skbi-0k*y~d&6 zzl~byBz1J2BEoa^1}x&SRh0-j|V8>`o8fV6F^Mh z0{)W!m{KY%YHD$EqObnNuM;g0?%CQS5rcePK_RYMDZIQOynZ3`C{JQgf_z2)9OG9W zVqDT6XqcGqn0<#1IeZ2GEFUR?mK}l4(RG|7FBhWSk zeB8|EXWDtGxpm4Qk*z0_m?$M6`74e;D8hJn*(koHB0zJ|PRs4RpYm1ktraVvGTJ)= zW&lW=#Hn8x#Yw=plcWh_;1^+A58TWxrJpf*j&&zJoz84V`>*;tL&O#?DIsW{%PaWg z%O)8QzBnN$rxOp9Q~Do-)`B8Yjhf`t4!g4~3V!Zs1ntzeU&(}l-dds}m@hq|mRdtc z&Czc-+r%x4(e1UrO8T8Mu`nBUF*OlF5KTnAzxbQKNO>Wm3Pyg7pn)!Q>f~HpxYrZY z?wFI8St&$B@!G7#PluT7INHd#(z*DoqzzU7{E4nFpxZ1f!TOu?->Kvp*{cXbx^EPy zLX@AIx_Sd=NB(5F)20N7-gfSRxF1c$u<9jdJ;AV7#c1Q|LUR4w2oEqB3ThlG=9u`B zoSE|u=|Tf6WlCodYVT^Y#=lv;=FYS-PHAG4`+uEX^YHa`B<`rFb}q@ z^ncSAKB)kj4>VY;G_gW+Q>ke=X*;!i6c8Te?YL21n3H1y*yu7F3Q?!MF(d zvLT0mP>8mH`wlM~8n}xey*vM(&F1ulA|lil1XX;W*Bb-o#{pgKtO*dwAjpjG?tGy% zphpQhcp&}1GeL*O$YR=5-=(s+>oj5KQrw20AH+IE-)4QWR9tj+0tS=oE?ip+_w$z4 z#AUOoZ;+T@6DTrViVT2ZJ2zKD8lcbAR?&2nMlD3c+nxoCU+J45g6z7rsMjwxJ(FQV}QGQ(jm^W&iUGM|>MTx#KWwC%`X9~&jOYN_5`~bi z@BHSN%*7=YrPrJFc`Zg;>FPCx-eOZfQs0HlaGm-i|(gOy%rjX|yx zr2?MOaZD&(426=8F^i2xQz>=I?9Snxr}4>giCu&~bdWeI5~2MMo1P7r%BG1!49Y;9 zUjM2on0Yb}Bu}qdY`R6zmW}G@Nf=!A|4JtqVIj~vUCyRlq7rdppV!|MVViweYA!!> zDmgg%x0+;4Ft_bfLs{LvZy&#YgmQ{0t+QVk5@_<;6*O8$iAJBfr5=|Dqe>GT5_ zuvB@3L?&kblHPHLeTW>HpKK=^@+|dG1?caXG#rU@N8_cBS#Q9%V(KU7l8D9V6?=>) z*=}VV*5{nF#qC1&>Bee=NGy1HH2%i>(;LkVK8`Nnmh-Uiel=I@xV4Wz;In9srE-%s zT7}5jsaH*wSp@v8!z2{1d`!J;^688Pim`uDRKGMeeX-g;*S4GDewd#jGJz?%YD?bjH^rK|o{#C&Iv(tVsP>--sJ#{7@&r?Ko#Lxmx|6Ls1Z=+LAK*?`sQl%+b8uhagT{vH6w7;dec9|O3WgS+W>CLsIaPjUFHecMK< zB#`RY@TgTwUD}hMEZ)b42LY4zM-HLcmi4UhWlPT`v?Zyu=?T(>vMi=S2kSQODcCc)BPaX5AIp*{$Ei+UGh07-~c( zAxU!&#vzbEsVn6+z$HOWg*888W>YDrdsS3k@+B3=osix~Xaa#(%NL^_yT+-Osz&45fM#^Gm zKGm&Psv+oOu0m0lCaeO*zW%E787`$OVZXhZmJBwMh~`h9)`e_)=9*>wLI=!dI@4LP zFFjb~81NvTN6J7q@9FZ8Fot4Ydp=iGko7?f28^42uI+)&r*4F<;D@W z>-+#MOy*7o+_pl|90StwY-v0`b>0kXeyRVa=Yq+zC83CuBsDQ9!YY}?HT6gAgI&IR z{XYz8Oxza(Vgu{H>&-5RYaQ|y?dlblV|HTRUZqdd z0=vbLUWjj75H##ANFid9qfa%@iu%?9C~hZudR?YZZ&{IINidu0O!u2Y|Mg49Aj`+5 zw3Mt!lC#lL|L=cKYx&6e&VtX~*pidmzpE?Hd>jtf)LKXGFsfkbmH#b=ub}Vw6_jWo zQxr1|o@~FD?pG0U9#A0jyDaIxXd8C3?ZeMFzt{r*g%7{`?arp%p-LwcJ3J=a{Vc14 zTqGf+BUx%lOG$9!ofn;eagXyD5DqA~36pNEUr@pOXK!V`X5oBV+W1QUYBjR=P;Ghj z*hxgxbh3^DUhOS-Yw~zw<}=hvGda){qM(O@E$Af@8$9@DL}O=-Q#Q7K{kBm@DY~UN6y0NW-3&@8xgW2VMq)I_-l8t=WZ&`u3^!6{}|y2#&MR zCjwwGD;DQwF!B?FENO<``SKxOCU_@@?DAAZw5I+@7CsDl^xqd!$0p|bi!-)(?atq> zF{fv@-wtcO{%E4EO)e`rt!f|nxeN3Pp=RRP7y1#x7fl5+$`N%j@RJ1^h%)UMKT5A3 z*LwZHwcGwKtMNqO_IM~trs-nweSH);%g~3)pm)jp)|wDP?42lK0H0gaQm$%)FfU#& zsz)kxuW>yzu+8Galj!t9BK=N%%ao=dY7K{lnl`w!HhousL=AD`AMcG7aEJfP4%HTh z9dJit_%i@bDsh5T<9MaeWtL2+8?bfGk#%PAbG_^{AqBly#I+I=jNT4a0sV1Ux=GWt z{Pe)qDrdCZ!9>GXj}5X12l7-4razD1dE(T-mEReGuqO!#9=LzgogZa}K}3@}zS9J$ z@dh_?0{?cL`~ZWV9-_Z?t7r?BjB}64+T^P5$!Ni2%)>zQF0yP($Y1wi(q{SBO+K9) zC~VhZe|W>Rn%Zjye7eh5pFhW6pG)7$*Gnv@Nx@+KFq8dzSm)SWq*=fL2k;%GfF(iH z6dUSYU5A*H7q6u&;GZ*9aBOfvWq$tO4ieDL3_CV%UiZ$_yJO?xP4vyyPl@n871h!o z4mG+T-e3sj{=h+~^JS)I8ykcMtekd}y4?i@5y*%iX7sv5Ac61s>I1_HKatW`Y+4e= zZvH1*UL~$3FrI*$FPg;$y)h*-M)U3SHywTY9qC+Z?-=5RWvh`&HI3a0a$G=9WSsXr#0T%>{<19; zVvUCy=>tneo_#JOMHRm2w~Y5=ZfZhP4`)P0Obkk)MTGI8bbGFTC6{LijhInExJ1+T$7Rntq|dtLUMIwwVV z?}UJ}>AlF)_IIa*fe2Z*T^BN%tzDLEwcD0ie19PPl=h7ajoO@2w-{uwf@f6Bp{UB} z8LW=u&NHw1Pxa&413(&DT4{SsO+*X-GgzjPx*kIdS~3z&x{d4Rb}S9%oI@D!@>!qg zhIA`O-Gt|%9szBfZlrjHsEH383(L*$FF6`JOg|4WTmz(3scXa)CP)3S3_yhSsmxO1 z{7JUvbc>F3JC{JENG|}`{IBlc*^C~`D#gZi)AtCci3p1mz?_}wkfo|o!6J;0yx8hv zKFuQ_Jio*V|CiX28Cd1mGP%P3m8PsHDnE$Aq7qDjvj;1^=<`yx4jKmy3!GgzNAAej zLwSWX9(s8^1u0(END@44>NZx^2Gq{{my3)KWU0!j=jS$M_3xN>TB_zQGTcXT3}|dY zDf+A3ALGAvD~pCG_e(*)1)cGiyN8VSnNCGciHZ%}gm$W)CUR1TVg^)We{9AH^Tu+$ zgfQ9~Ug%ZsOVio*w*HxiTG{2`cm(x(o}aQ_jhRbgH1123dw4$auPa{oPmC$vPCP0d z-s%l>g_w`rYc1QfG*&;!K*(?BgNL$(w>U`G9>Qo;tHMP%i&%rTbuVHf>pW*1SeeI3!PWNdCf8fpfi~Z|6ajIhE#XnBK zJcLdz&&Dq!^NT|ApJ=9%>Cr!QooVt1lky4s4A}+XTl_s)cWKBNNQ#iLol`k|+ehwc zK*%Mn?FP@IIpS=u*}q8#^-FFlp@?k3GxgK*IE!md`{yL~T~qpnJmYwX{41p6dt_3j zJEeV^oJ4COffR&Mo_o4^*1--wGkT*>S+vsBCQY3n%qVlU6pYCJji$+CsJVW6yH5TI zYSitgbeW++%n_L7j7el^vsfOlO|w4(=MXdzFv>IhYz{}rpVZmP)Yi$FjaOfgWZPp( zC*{BoI$gJh49ITp>RT96uQ?IDDT(>-}u@%}_v?fO)5)xQft5YujHJ7L*puZqNQ6*rINKyFtD$exVBE z`d-)ud3MBI$~BhFxOG1ProN@FU{{=xxVDLfFB{o{GDCD1=VM~ngdP+BqE2xCnCG6f zW4z35qC%QeBa3t`%r$AH)IU+|xAFUFZ*@^^qZS#ZsvbZ?{1uLHTYWKfIShTQJq%%J zFApOai?GGtUmK&s$e_UFxh0QXO!)j?_}+^@ThTHq`|s5OZn-b9YiV2__qq-3C0)c3 z_ZS`ByTXKB+D-IKA-^5X@V?57o+v`M{E7E%6QO8;fXUkVISlC4b!1CSk|Jhdw1!Bz zqV>$WGW2eD+;gj#C9JCmiEkYJxK|VZ)qTSS`lvIF-+ZoyI~6v*t+IQ5pGhu~_sOq! z7ow}Nk z9t;o@H?W{}>$E4*$diW~^h%zLuNwGfQCBlf|Ht3#S9{%u|9vMH$K&%Gr=9$;29MJR zGq(3y`)>W($iLuUT|SlNuMirBuwk`0-e;#z=jRJrTje+^CCesHZ-!|rP%Cg1Ov2(y6lR7%bGj40@ z{nIH!8d{nIZ-r0JZBN68-&lCJ)@qXN+{>&$y4M^q!M^;*ureowK&%_7rok?P2*!pr z%>L%9UW$lQXm*qwD*s_|Jc)0d**#1(1@)BtK1^skBeXIW_G&P!2|`t>+FN=5onygF}hj;kSq*~%$=smR{ux7;np7krORQ8I7A zAsL$w=n|97d@U4PbpaEQ112!LiRWQb%0l}Dsxv_I?DxF+5MD~uuU}~?g4XumFPQz= zIM|Na+4d{|bUqTD7`HHpjvX8tNq!G+TB~7EpR{G{D3CzKB_%o^@_uEOj0FBM_SsV=={ zxLn@7BbYvzV&9uy7&9ZPk0Y=rBaQ2cxIVkS92AGDq}R1ui7s!ow`c5hmWJIZ;cl)M z#}*GfTcrm&<#xvDJ@_dulmXcV+6i zIWeH-y2wBINrw*C2gpBf(Z}iAk0Eq>(_8a>GS9!$x1KPhv%v;JGB_wCDOqg7od#3Ps7NBIdwX?zz_z-&#wH;} zz>i@QehYn-EE;4wCCzDE9$RI!4%Ix330M2to86vyb0Kthl&>_Ge|5rV3z~bN`eb(6 zd4XMIA$lm=E3XR*xE}Wd81>msU7ch@<2zg$t*q|W$p4&g7NpJG}GyU26V`CK%P67mBVZR(Ye?i&GRhj&%VhFS} zw3fY;WGA#T;dZNB9{iM_Mr%0PZO1iar(Q!HZ*N^ksbWhrk?{`V`4?-X&F<=RClt0I z*{7Vh7PdrNfBv`ys~O4{8H>J*3#v=CC>pA!i^+5@{S(jzC{lt3XP0hdv#W(~DC6Qg z_x8H9ej|XJ<4vmqI|Cllcb7cA-rHczU$r1wP5Gvqt4m7hX_fa~bVdfV$LaY@rs4a# z;K!z;9|^{~Lf?D6gO3<$$hgz5?c|TGm|di2b}SvKtZ=jAvcLIhMHFT?YGTDeZ(;U( z;*Uv|dz~a}cYe%bOmnSZmgEziF3MY_RRTilGn%xVpTzc*FMf?&4V69ZekyAo)U#3F zImPaN;J>=QmRo%=VB>Bhi;BMf01*uU_xjq!Ce%A?zkC~+s1&Bnf~J4bt@UO+_s;Nu zrn-k-<$V+`+sC}RDzia~N8FEciu1eneckg3+2+mh7GmO7oZLl(bzUXhObYxADgCqt zNiNEHBQ5rBOs9(XWD9*M=VnzP+Tw3}M4oKtI$62GBLJ;dKO?cdZDC@Rhtk&W+lq`t6Cse1D+>j%pw}zh^C?c@ip#~54XzjEQWI*(*e~a--PL383dd}l z%KX~adWMv!$asG~dOZmzcs_~nwk&1sZ>-!eFh1d~p+US1BSWqY-mB|3&H zx;bWu`r}rZ6mP^Ts)c*!&9&!<$pw9RQSBoq6D>_n-ap(gzh2Qci0IfJBdUQih=ko8 zo-&!L$H^3oyxrWAISW?z+9EfKJ&%+{8eYyt6~tv{m&Q1fktkuN zSkxqu6xQ`l7PeN(vU;NaA)AD%y{b(2Gwx1_gDXr|{A~y$)t|?ISYmfO-%oLOIS46- zpO6ICdX4D`l;6*!?tK|SFE#NMKkh?~z7V3*hxgr!)bUtnTx|$dq=SQad&`Qd6$?-> zvNPOV>+=&!b^!BDJ!viW3?X=_3V(Uq(A)+IE#Op(h*4TvfA8jls2GJk@%2(wY8czr zFGEs4rZNo{MQ%S-ovij0LWX+G^h!1;p0>hi z#$OJ`=JLTPqW^-sw84$q-#n@*FhRQ~DAonXy4`TrO9ueNr((5rb%u_v~GnFIRGTS z0_@a5YwOMJ9i6ZgQrlZ1w%F52T~(HXi2HIQBW6I9_XPpr*zfUJhkECg3YYRN+-tLr5m8t9@XS5eXNTRaxI} zuH0)bP8a=ErR^ay@}8FY882VG(c^BWm@RGNW>~YJeQvByng)?mo}QFDB_}gG++&K? zieBkDJMIgb;jiLI;U&pTR2yi(#Hg|WFddduW_ypkZo|8<(_OV+o;H081i2+P#@Hf9OE za=5`NoX+V_V1_Z$Oy-s;dSiqQ3Z+z8TPt#Kf-fwx!m$_gOWqc9q--Hn!Z6W*)u?wa z=r`+O#gAJUSyZrxf@w`s)~X-0)%9QNM$Ya!T0P?Ky6nT3^qqTvy4Ty_lN#GMP^t87 zrBblBcVIM{TkA(-##RbVytQy{&UdN;38$Q@CdOJ#&8nD=vA^|R&0g4Ndr^Dd>>*UZ z3CR{Tfa3KvDY`Te6p@Y^*m`_>&_&pip4twO=w;?-n19$DaPEXtA)923^8X}NrUI_oKba?D3nB)jq6Yyv>pvMj0t^gDqVb2K0skbMRPg_QkU;b$ Y%0Y4Q_$S7)5d=KXRJ4@K70rVF4;EKh3jhEB diff --git a/assets/ideal-img/article-image-sql-join-cheat-sheet.fe36765.1030.png b/assets/ideal-img/article-image-sql-join-cheat-sheet.fe36765.1030.png new file mode 100644 index 0000000000000000000000000000000000000000..0c81deccba7889bd36fb9bb9472a90e492a3dcda GIT binary patch literal 1071238 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

    Kq)w(m9-jW)NYzW?u#_gTCcoRPa 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

  2. Cb)r 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 diff --git a/assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png b/assets/ideal-img/article-image-appexchange-segmentation.3972b9a.640.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5503a0b70ce0eebad821ccfa569a197a37cf24 GIT binary patch literal 88203 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 OKgbKVW)+CbasLCd-hzn$ literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png b/assets/ideal-img/article-image-is-serverside-purpose.1c6d393.640.png new file mode 100644 index 0000000000000000000000000000000000000000..19882885730f98678bbf8b1470275e79eb3da9d7 GIT binary patch literal 61436 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 NZzL5Y%EgQV{}1G$lEMH0 literal 0 HcmV?d00001 diff --git a/assets/ideal-img/article-image-is-serverside-purpose.5bba003.1030.png b/assets/ideal-img/article-image-is-serverside-purpose.5bba003.1030.png deleted file mode 100644 index 8cc5145c00ec90c4ddac225738edeb183d6e3bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155737 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ʄ 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